diff --git a/.github/labeler.yml b/.github/labeler.yml
index 146f7e2d109..ae138e56b08 100644
--- a/.github/labeler.yml
+++ b/.github/labeler.yml
@@ -42,3 +42,4 @@ documentation:
"QL-for-QL":
- ql/**/*
+ - .github/workflows/ql-for-ql*
diff --git a/.github/workflows/go-tests.yml b/.github/workflows/go-tests.yml
index 26055bd71da..cff69adcaeb 100644
--- a/.github/workflows/go-tests.yml
+++ b/.github/workflows/go-tests.yml
@@ -11,10 +11,10 @@ jobs:
name: Test Linux (Ubuntu)
runs-on: ubuntu-latest
steps:
- - name: Set up Go 1.18.1
+ - name: Set up Go 1.19
uses: actions/setup-go@v3
with:
- go-version: 1.18.1
+ go-version: 1.19
id: go
- name: Check out code
@@ -57,10 +57,10 @@ jobs:
name: Test MacOS
runs-on: macos-latest
steps:
- - name: Set up Go 1.18.1
+ - name: Set up Go 1.19
uses: actions/setup-go@v3
with:
- go-version: 1.18.1
+ go-version: 1.19
id: go
- name: Check out code
@@ -87,10 +87,10 @@ jobs:
name: Test Windows
runs-on: windows-2019
steps:
- - name: Set up Go 1.18.1
+ - name: Set up Go 1.19
uses: actions/setup-go@v3
with:
- go-version: 1.18.1
+ go-version: 1.19
id: go
- name: Check out code
diff --git a/.github/workflows/ql-for-ql-build.yml b/.github/workflows/ql-for-ql-build.yml
index 7c3b8ccb78c..99370014505 100644
--- a/.github/workflows/ql-for-ql-build.yml
+++ b/.github/workflows/ql-for-ql-build.yml
@@ -17,7 +17,7 @@ jobs:
- uses: actions/checkout@v3
- name: Find codeql
id: find-codeql
- uses: github/codeql-action/init@aa93aea877e5fb8841bcb1193f672abf6e9f2980
+ uses: github/codeql-action/init@71a8b35ff4c80fcfcd05bc1cd932fe3c08f943ca
with:
languages: javascript # does not matter
- name: Get CodeQL version
@@ -27,31 +27,37 @@ jobs:
shell: bash
env:
CODEQL: ${{ steps.find-codeql.outputs.codeql-path }}
+ - name: Cache entire pack
+ id: cache-pack
+ uses: actions/cache@v3
+ with:
+ path: ${{ runner.temp }}/pack
+ key: ${{ runner.os }}-pack-${{ hashFiles('ql/**/Cargo.lock') }}-${{ hashFiles('ql/**/*.rs') }}-${{ hashFiles('ql/**/*.ql*') }}-${{ hashFiles('ql/**/qlpack.yml') }}-${{ hashFiles('ql/ql/src/ql.dbscheme*') }}-${{ steps.get-codeql-version.outputs.version }}--${{ hashFiles('.github/workflows/ql-for-ql-build.yml') }}
- name: Cache queries
+ if: steps.cache-pack.outputs.cache-hit != 'true'
id: cache-queries
uses: actions/cache@v3
with:
- path: ${{ runner.temp }}/query-pack.zip
- key: queries-${{ hashFiles('ql/**/*.ql*') }}-${{ hashFiles('ql/**/qlpack.yml') }}-${{ hashFiles('ql/ql/src/ql.dbscheme*') }}-${{ steps.get-codeql-version.outputs.version }}
+ path: ${{ runner.temp }}/queries
+ key: queries-${{ hashFiles('ql/**/*.ql*') }}-${{ hashFiles('ql/**/qlpack.yml') }}-${{ hashFiles('ql/ql/src/ql.dbscheme*') }}-${{ steps.get-codeql-version.outputs.version }}--${{ hashFiles('.github/workflows/ql-for-ql-build.yml') }}
- name: Build query pack
- if: steps.cache-queries.outputs.cache-hit != 'true'
+ if: steps.cache-queries.outputs.cache-hit != 'true' && steps.cache-pack.outputs.cache-hit != 'true'
run: |
cd ql/ql/src
- "${CODEQL}" pack create
- cd .codeql/pack/codeql/ql/0.0.0
- zip "${PACKZIP}" -r .
- rm -rf *
+ "${CODEQL}" pack create -j 16
+ mv .codeql/pack/codeql/ql/0.0.0 ${{ runner.temp }}/queries
env:
CODEQL: ${{ steps.find-codeql.outputs.codeql-path }}
- PACKZIP: ${{ runner.temp }}/query-pack.zip
- - name: Upload query pack
- uses: actions/upload-artifact@v3
- with:
- name: query-pack-zip
- path: ${{ runner.temp }}/query-pack.zip
-
+ - name: Move cache queries to pack
+ if: steps.cache-pack.outputs.cache-hit != 'true'
+ run: |
+ cp -r ${{ runner.temp }}/queries ${{ runner.temp }}/pack
+ env:
+ CODEQL: ${{ steps.find-codeql.outputs.codeql-path }}
+
### Build the extractor ###
- name: Cache entire extractor
+ if: steps.cache-pack.outputs.cache-hit != 'true'
id: cache-extractor
uses: actions/cache@v3
with:
@@ -62,7 +68,7 @@ jobs:
ql/target/release/ql-extractor.exe
key: ${{ runner.os }}-extractor-${{ hashFiles('ql/**/Cargo.lock') }}-${{ hashFiles('ql/**/*.rs') }}
- name: Cache cargo
- if: steps.cache-extractor.outputs.cache-hit != 'true'
+ if: steps.cache-extractor.outputs.cache-hit != 'true' && steps.cache-pack.outputs.cache-hit != 'true'
uses: actions/cache@v3
with:
path: |
@@ -71,73 +77,35 @@ jobs:
ql/target
key: ${{ runner.os }}-rust-cargo-${{ hashFiles('ql/**/Cargo.lock') }}
- name: Check formatting
- if: steps.cache-extractor.outputs.cache-hit != 'true'
+ if: steps.cache-extractor.outputs.cache-hit != 'true' && steps.cache-pack.outputs.cache-hit != 'true'
run: cd ql; cargo fmt --all -- --check
- name: Build
- if: steps.cache-extractor.outputs.cache-hit != 'true'
+ if: steps.cache-extractor.outputs.cache-hit != 'true' && steps.cache-pack.outputs.cache-hit != 'true'
run: cd ql; cargo build --verbose
- name: Run tests
- if: steps.cache-extractor.outputs.cache-hit != 'true'
+ if: steps.cache-extractor.outputs.cache-hit != 'true' && steps.cache-pack.outputs.cache-hit != 'true'
run: cd ql; cargo test --verbose
- name: Release build
- if: steps.cache-extractor.outputs.cache-hit != 'true'
+ if: steps.cache-extractor.outputs.cache-hit != 'true' && steps.cache-pack.outputs.cache-hit != 'true'
run: cd ql; cargo build --release
- name: Generate dbscheme
- if: steps.cache-extractor.outputs.cache-hit != 'true'
+ if: steps.cache-extractor.outputs.cache-hit != 'true' && steps.cache-pack.outputs.cache-hit != 'true'
run: ql/target/release/ql-generator --dbscheme ql/ql/src/ql.dbscheme --library ql/ql/src/codeql_ql/ast/internal/TreeSitter.qll
- - uses: actions/upload-artifact@v3
- with:
- name: extractor-ubuntu-latest
- path: |
- ql/target/release/ql-autobuilder
- ql/target/release/ql-autobuilder.exe
- ql/target/release/ql-extractor
- ql/target/release/ql-extractor.exe
- retention-days: 1
### Package the queries and extractor ###
- - uses: actions/download-artifact@v3
- with:
- name: query-pack-zip
- path: query-pack-zip
- - uses: actions/download-artifact@v3
- with:
- name: extractor-ubuntu-latest
- path: linux64
- - run: |
- unzip query-pack-zip/*.zip -d pack
- cp -r ql/codeql-extractor.yml ql/tools ql/ql/src/ql.dbscheme.stats pack/
- mkdir -p pack/tools/linux64
- if [[ -f linux64/ql-autobuilder ]]; then
- cp linux64/ql-autobuilder pack/tools/linux64/autobuilder
- chmod +x pack/tools/linux64/autobuilder
- fi
- if [[ -f linux64/ql-extractor ]]; then
- cp linux64/ql-extractor pack/tools/linux64/extractor
- chmod +x pack/tools/linux64/extractor
- fi
- cd pack
- zip -rq ../codeql-ql.zip .
- rm -rf *
- - uses: actions/upload-artifact@v3
- with:
- name: codeql-ql-pack
- path: codeql-ql.zip
- retention-days: 1
+ - name: Package pack
+ if: steps.cache-pack.outputs.cache-hit != 'true'
+ run: |
+ cp -r ql/codeql-extractor.yml ql/tools ql/ql/src/ql.dbscheme.stats ${PACK}/
+ mkdir -p ${PACK}/tools/linux64
+ cp ql/target/release/ql-autobuilder ${PACK}/tools/linux64/autobuilder
+ cp ql/target/release/ql-extractor ${PACK}/tools/linux64/extractor
+ chmod +x ${PACK}/tools/linux64/autobuilder
+ chmod +x ${PACK}/tools/linux64/extractor
+ env:
+ PACK: ${{ runner.temp }}/pack
### Run the analysis ###
- - name: Download pack
- uses: actions/download-artifact@v3
- with:
- name: codeql-ql-pack
- path: ${{ runner.temp }}/codeql-ql-pack-artifact
-
- - name: Prepare pack
- run: |
- unzip "${PACK_ARTIFACT}/*.zip" -d "${PACK}"
- env:
- PACK_ARTIFACT: ${{ runner.temp }}/codeql-ql-pack-artifact
- PACK: ${{ runner.temp }}/pack
- name: Hack codeql-action options
run: |
JSON=$(jq -nc --arg pack "${PACK}" '.database."run-queries"=["--search-path", $pack] | .resolve.queries=["--search-path", $pack] | .resolve.extractor=["--search-path", $pack] | .database.init=["--search-path", $pack]')
@@ -151,21 +119,26 @@ jobs:
echo " - ql/ql/test" >> ${CONF}
echo " - \"*/ql/lib/upgrades/\"" >> ${CONF}
echo "disable-default-queries: true" >> ${CONF}
- echo "packs:" >> ${CONF}
- echo " - codeql/ql" >> ${CONF}
+ echo "queries:" >> ${CONF}
+ echo " - uses: ./ql/ql/src/codeql-suites/ql-code-scanning.qls" >> ${CONF}
echo "Config file: "
cat ${CONF}
env:
CONF: ./ql-for-ql-config.yml
- name: Initialize CodeQL
- uses: github/codeql-action/init@aa93aea877e5fb8841bcb1193f672abf6e9f2980
+ uses: github/codeql-action/init@71a8b35ff4c80fcfcd05bc1cd932fe3c08f943ca
with:
languages: ql
db-location: ${{ runner.temp }}/db
config-file: ./ql-for-ql-config.yml
+ - name: Move pack cache
+ run: |
+ cp -r ${PACK}/.cache ql/ql/src/.cache
+ env:
+ PACK: ${{ runner.temp }}/pack
- name: Perform CodeQL Analysis
- uses: github/codeql-action/analyze@aa93aea877e5fb8841bcb1193f672abf6e9f2980
+ uses: github/codeql-action/analyze@71a8b35ff4c80fcfcd05bc1cd932fe3c08f943ca
with:
category: "ql-for-ql"
- name: Copy sarif file to CWD
diff --git a/.github/workflows/ql-for-ql-dataset_measure.yml b/.github/workflows/ql-for-ql-dataset_measure.yml
index a5ed2e9b266..f53c6a996f0 100644
--- a/.github/workflows/ql-for-ql-dataset_measure.yml
+++ b/.github/workflows/ql-for-ql-dataset_measure.yml
@@ -25,7 +25,7 @@ jobs:
- name: Find codeql
id: find-codeql
- uses: github/codeql-action/init@aa93aea877e5fb8841bcb1193f672abf6e9f2980
+ uses: github/codeql-action/init@71a8b35ff4c80fcfcd05bc1cd932fe3c08f943ca
with:
languages: javascript # does not matter
- uses: actions/cache@v3
diff --git a/.github/workflows/ql-for-ql-tests.yml b/.github/workflows/ql-for-ql-tests.yml
index b016f21f2b9..6bda6f1f8ae 100644
--- a/.github/workflows/ql-for-ql-tests.yml
+++ b/.github/workflows/ql-for-ql-tests.yml
@@ -22,7 +22,7 @@ jobs:
- uses: actions/checkout@v3
- name: Find codeql
id: find-codeql
- uses: github/codeql-action/init@aa93aea877e5fb8841bcb1193f672abf6e9f2980
+ uses: github/codeql-action/init@71a8b35ff4c80fcfcd05bc1cd932fe3c08f943ca
with:
languages: javascript # does not matter
- uses: actions/cache@v3
@@ -44,7 +44,7 @@ jobs:
CODEQL: ${{ steps.find-codeql.outputs.codeql-path }}
- name: Check QL formatting
run: |
- find ql/ql "(" -name "*.ql" -or -name "*.qll" ")" -print0 | xargs -0 "${CODEQL}" query format --check-only
+ find ql/ql/src "(" -name "*.ql" -or -name "*.qll" ")" -print0 | xargs -0 "${CODEQL}" query format --check-only
env:
CODEQL: ${{ steps.find-codeql.outputs.codeql-path }}
- name: Check QL compilation
diff --git a/config/identical-files.json b/config/identical-files.json
index 403e6b91c2f..b05629f9e96 100644
--- a/config/identical-files.json
+++ b/config/identical-files.json
@@ -485,28 +485,39 @@
"ruby/ql/lib/codeql/ruby/security/internal/SensitiveDataHeuristics.qll"
],
"ReDoS Util Python/JS/Ruby/Java": [
- "javascript/ql/lib/semmle/javascript/security/performance/ReDoSUtil.qll",
- "python/ql/lib/semmle/python/security/performance/ReDoSUtil.qll",
- "ruby/ql/lib/codeql/ruby/security/performance/ReDoSUtil.qll",
- "java/ql/lib/semmle/code/java/security/performance/ReDoSUtil.qll"
+ "javascript/ql/lib/semmle/javascript/security/regexp/NfaUtils.qll",
+ "python/ql/lib/semmle/python/security/regexp/NfaUtils.qll",
+ "ruby/ql/lib/codeql/ruby/security/regexp/NfaUtils.qll",
+ "java/ql/lib/semmle/code/java/security/regexp/NfaUtils.qll"
],
"ReDoS Exponential Python/JS/Ruby/Java": [
- "javascript/ql/lib/semmle/javascript/security/performance/ExponentialBackTracking.qll",
- "python/ql/lib/semmle/python/security/performance/ExponentialBackTracking.qll",
- "ruby/ql/lib/codeql/ruby/security/performance/ExponentialBackTracking.qll",
- "java/ql/lib/semmle/code/java/security/performance/ExponentialBackTracking.qll"
+ "javascript/ql/lib/semmle/javascript/security/regexp/ExponentialBackTracking.qll",
+ "python/ql/lib/semmle/python/security/regexp/ExponentialBackTracking.qll",
+ "ruby/ql/lib/codeql/ruby/security/regexp/ExponentialBackTracking.qll",
+ "java/ql/lib/semmle/code/java/security/regexp/ExponentialBackTracking.qll"
],
"ReDoS Polynomial Python/JS/Ruby/Java": [
- "javascript/ql/lib/semmle/javascript/security/performance/SuperlinearBackTracking.qll",
- "python/ql/lib/semmle/python/security/performance/SuperlinearBackTracking.qll",
- "ruby/ql/lib/codeql/ruby/security/performance/SuperlinearBackTracking.qll",
- "java/ql/lib/semmle/code/java/security/performance/SuperlinearBackTracking.qll"
+ "javascript/ql/lib/semmle/javascript/security/regexp/SuperlinearBackTracking.qll",
+ "python/ql/lib/semmle/python/security/regexp/SuperlinearBackTracking.qll",
+ "ruby/ql/lib/codeql/ruby/security/regexp/SuperlinearBackTracking.qll",
+ "java/ql/lib/semmle/code/java/security/regexp/SuperlinearBackTracking.qll"
+ ],
+ "RegexpMatching Python/JS/Ruby": [
+ "javascript/ql/lib/semmle/javascript/security/regexp/RegexpMatching.qll",
+ "python/ql/lib/semmle/python/security/regexp/RegexpMatching.qll",
+ "ruby/ql/lib/codeql/ruby/security/regexp/RegexpMatching.qll"
],
"BadTagFilterQuery Python/JS/Ruby": [
"javascript/ql/lib/semmle/javascript/security/BadTagFilterQuery.qll",
"python/ql/lib/semmle/python/security/BadTagFilterQuery.qll",
"ruby/ql/lib/codeql/ruby/security/BadTagFilterQuery.qll"
],
+ "OverlyLargeRange Python/JS/Ruby/Java": [
+ "javascript/ql/lib/semmle/javascript/security/OverlyLargeRangeQuery.qll",
+ "python/ql/lib/semmle/python/security/OverlyLargeRangeQuery.qll",
+ "ruby/ql/lib/codeql/ruby/security/OverlyLargeRangeQuery.qll",
+ "java/ql/lib/semmle/code/java/security/OverlyLargeRangeQuery.qll"
+ ],
"CFG": [
"csharp/ql/lib/semmle/code/csharp/controlflow/internal/ControlFlowGraphImplShared.qll",
"ruby/ql/lib/codeql/ruby/controlflow/internal/ControlFlowGraphImplShared.qll",
@@ -586,5 +597,9 @@
"Swift patterns test file": [
"swift/ql/test/extractor-tests/patterns/patterns.swift",
"swift/ql/test/library-tests/parent/patterns.swift"
+ ],
+ "IncompleteMultiCharacterSanitization JS/Ruby": [
+ "javascript/ql/lib/semmle/javascript/security/IncompleteMultiCharacterSanitizationQuery.qll",
+ "ruby/ql/lib/codeql/ruby/security/IncompleteMultiCharacterSanitizationQuery.qll"
]
}
diff --git a/cpp/downgrades/73af5058c6899dcdb05754c27ca966aeb3a68c94/exprs.ql b/cpp/downgrades/73af5058c6899dcdb05754c27ca966aeb3a68c94/exprs.ql
new file mode 100644
index 00000000000..dd5c09a67c0
--- /dev/null
+++ b/cpp/downgrades/73af5058c6899dcdb05754c27ca966aeb3a68c94/exprs.ql
@@ -0,0 +1,13 @@
+class Expr extends @expr {
+ string toString() { none() }
+}
+
+class Location extends @location_expr {
+ string toString() { none() }
+}
+
+from Expr expr, int kind, int kind_new, Location location
+where
+ exprs(expr, kind, location) and
+ if expr instanceof @blockassignexpr then kind_new = 0 else kind_new = kind
+select expr, kind_new, location
diff --git a/cpp/downgrades/73af5058c6899dcdb05754c27ca966aeb3a68c94/old.dbscheme b/cpp/downgrades/73af5058c6899dcdb05754c27ca966aeb3a68c94/old.dbscheme
new file mode 100644
index 00000000000..73af5058c68
--- /dev/null
+++ b/cpp/downgrades/73af5058c6899dcdb05754c27ca966aeb3a68c94/old.dbscheme
@@ -0,0 +1,2131 @@
+
+/**
+ * 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
+ */
+
+@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 @macroinvocations.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
+ | 2 = constructor
+ | 3 = destructor
+ | 4 = conversion
+ | 5 = operator
+ | 6 = builtin // GCC built-in functions, e.g. __builtin___memcpy_chk
+ ;
+*/
+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);
+
+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
+);
+
+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 = error
+ | 2 = unknown
+ | 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 = __int8 // Microsoft-specific
+ | 21 = __int16 // Microsoft-specific
+ | 22 = __int32 // Microsoft-specific
+ | 23 = __int64 // Microsoft-specific
+ | 24 = float
+ | 25 = double
+ | 26 = long_double
+ | 27 = _Complex_float // C99-specific
+ | 28 = _Complex_double // C99-specific
+ | 29 = _Complex_long double // C99-specific
+ | 30 = _Imaginary_float // C99-specific
+ | 31 = _Imaginary_double // C99-specific
+ | 32 = _Imaginary_long_double // C99-specific
+ | 33 = wchar_t // Microsoft-specific
+ | 34 = decltype_nullptr // C++11
+ | 35 = __int128
+ | 36 = unsigned___int128
+ | 37 = signed___int128
+ | 38 = __float128
+ | 39 = _Complex___float128
+ | 40 = _Decimal32
+ | 41 = _Decimal64
+ | 42 = _Decimal128
+ | 43 = char16_t
+ | 44 = char32_t
+ | 45 = _Float32
+ | 46 = _Float32x
+ | 47 = _Float64
+ | 48 = _Float64x
+ | 49 = _Float128
+ | 50 = _Float128x
+ | 51 = char8_t
+ ;
+*/
+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
+);
+
+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 EDG frontend. See symbol_ref.h there.
+ 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
+;
+
+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_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
+ | @assignpaddexpr
+ | @assignpsubexpr
+ ;
+
+@assign_op_expr = @assign_arith_expr | @assign_bitwise_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 // EDG 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
+;
+
+@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
+ | @isstandardlayoutexpr
+ | @istriviallycopyableexpr
+ | @isliteraltypeexpr
+ | @hastrivialmoveconstructorexpr
+ | @hastrivialmoveassignexpr
+ | @hasnothrowmoveassignexpr
+ | @isconstructibleexpr
+ | @isnothrowconstructibleexpr
+ | @hasfinalizerexpr
+ | @isdelegateexpr
+ | @isinterfaceclassexpr
+ | @isrefarrayexpr
+ | @isrefclassexpr
+ | @issealedexpr
+ | @issimplevalueclassexpr
+ | @isvalueclassexpr
+ | @isfinalexpr
+ | @builtinchooseexpr
+ | @builtincomplex
+ | @isassignable
+ | @isaggregate
+ | @hasuniqueobjectrepresentations
+ | @builtinbitcast
+ | @builtinshuffle
+ ;
+
+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.
+ */
+#keyset[aggregate, field]
+aggregate_field_init(
+ int aggregate: @aggregateliteral ref,
+ int initializer: @expr ref,
+ int field: @membervariable ref
+);
+
+/**
+ * The index of the element being initialized by an initializer expression
+ * within an aggregate initializer for an array.
+ */
+#keyset[aggregate, element_index]
+aggregate_array_init(
+ int aggregate: @aggregateliteral ref,
+ int initializer: @expr ref,
+ int element_index: 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(
+ unique 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/73af5058c6899dcdb05754c27ca966aeb3a68c94/semmlecode.cpp.dbscheme b/cpp/downgrades/73af5058c6899dcdb05754c27ca966aeb3a68c94/semmlecode.cpp.dbscheme
new file mode 100644
index 00000000000..34549c3b093
--- /dev/null
+++ b/cpp/downgrades/73af5058c6899dcdb05754c27ca966aeb3a68c94/semmlecode.cpp.dbscheme
@@ -0,0 +1,2130 @@
+
+/**
+ * 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
+ */
+
+@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 @macroinvocations.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
+ | 2 = constructor
+ | 3 = destructor
+ | 4 = conversion
+ | 5 = operator
+ | 6 = builtin // GCC built-in functions, e.g. __builtin___memcpy_chk
+ ;
+*/
+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);
+
+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
+);
+
+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 = error
+ | 2 = unknown
+ | 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 = __int8 // Microsoft-specific
+ | 21 = __int16 // Microsoft-specific
+ | 22 = __int32 // Microsoft-specific
+ | 23 = __int64 // Microsoft-specific
+ | 24 = float
+ | 25 = double
+ | 26 = long_double
+ | 27 = _Complex_float // C99-specific
+ | 28 = _Complex_double // C99-specific
+ | 29 = _Complex_long double // C99-specific
+ | 30 = _Imaginary_float // C99-specific
+ | 31 = _Imaginary_double // C99-specific
+ | 32 = _Imaginary_long_double // C99-specific
+ | 33 = wchar_t // Microsoft-specific
+ | 34 = decltype_nullptr // C++11
+ | 35 = __int128
+ | 36 = unsigned___int128
+ | 37 = signed___int128
+ | 38 = __float128
+ | 39 = _Complex___float128
+ | 40 = _Decimal32
+ | 41 = _Decimal64
+ | 42 = _Decimal128
+ | 43 = char16_t
+ | 44 = char32_t
+ | 45 = _Float32
+ | 46 = _Float32x
+ | 47 = _Float64
+ | 48 = _Float64x
+ | 49 = _Float128
+ | 50 = _Float128x
+ | 51 = char8_t
+ ;
+*/
+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
+);
+
+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 EDG frontend. See symbol_ref.h there.
+ 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
+;
+
+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_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
+ | @assignpaddexpr
+ | @assignpsubexpr
+ ;
+
+@assign_op_expr = @assign_arith_expr | @assign_bitwise_expr
+
+@assign_expr = @assignexpr | @assign_op_expr
+
+/*
+ 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 // EDG 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
+;
+
+@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
+ | @isstandardlayoutexpr
+ | @istriviallycopyableexpr
+ | @isliteraltypeexpr
+ | @hastrivialmoveconstructorexpr
+ | @hastrivialmoveassignexpr
+ | @hasnothrowmoveassignexpr
+ | @isconstructibleexpr
+ | @isnothrowconstructibleexpr
+ | @hasfinalizerexpr
+ | @isdelegateexpr
+ | @isinterfaceclassexpr
+ | @isrefarrayexpr
+ | @isrefclassexpr
+ | @issealedexpr
+ | @issimplevalueclassexpr
+ | @isvalueclassexpr
+ | @isfinalexpr
+ | @builtinchooseexpr
+ | @builtincomplex
+ | @isassignable
+ | @isaggregate
+ | @hasuniqueobjectrepresentations
+ | @builtinbitcast
+ | @builtinshuffle
+ ;
+
+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.
+ */
+#keyset[aggregate, field]
+aggregate_field_init(
+ int aggregate: @aggregateliteral ref,
+ int initializer: @expr ref,
+ int field: @membervariable ref
+);
+
+/**
+ * The index of the element being initialized by an initializer expression
+ * within an aggregate initializer for an array.
+ */
+#keyset[aggregate, element_index]
+aggregate_array_init(
+ int aggregate: @aggregateliteral ref,
+ int initializer: @expr ref,
+ int element_index: 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(
+ unique 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/73af5058c6899dcdb05754c27ca966aeb3a68c94/upgrade.properties b/cpp/downgrades/73af5058c6899dcdb05754c27ca966aeb3a68c94/upgrade.properties
new file mode 100644
index 00000000000..64e22f4f2d6
--- /dev/null
+++ b/cpp/downgrades/73af5058c6899dcdb05754c27ca966aeb3a68c94/upgrade.properties
@@ -0,0 +1,3 @@
+description: Support block assignment
+compatibility: partial
+exprs.rel: run exprs.qlo
diff --git a/cpp/downgrades/f96ad9b2da43bbc9e55a72a165febd270ae07981/old.dbscheme b/cpp/downgrades/f96ad9b2da43bbc9e55a72a165febd270ae07981/old.dbscheme
new file mode 100644
index 00000000000..f96ad9b2da4
--- /dev/null
+++ b/cpp/downgrades/f96ad9b2da43bbc9e55a72a165febd270ae07981/old.dbscheme
@@ -0,0 +1,2136 @@
+
+/**
+ * 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
+ */
+
+@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 @macroinvocations.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
+ | 2 = constructor
+ | 3 = destructor
+ | 4 = conversion
+ | 5 = operator
+ | 6 = builtin // GCC built-in functions, e.g. __builtin___memcpy_chk
+ ;
+*/
+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);
+
+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 = error
+ | 2 = unknown
+ | 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 = __int8 // Microsoft-specific
+ | 21 = __int16 // Microsoft-specific
+ | 22 = __int32 // Microsoft-specific
+ | 23 = __int64 // Microsoft-specific
+ | 24 = float
+ | 25 = double
+ | 26 = long_double
+ | 27 = _Complex_float // C99-specific
+ | 28 = _Complex_double // C99-specific
+ | 29 = _Complex_long double // C99-specific
+ | 30 = _Imaginary_float // C99-specific
+ | 31 = _Imaginary_double // C99-specific
+ | 32 = _Imaginary_long_double // C99-specific
+ | 33 = wchar_t // Microsoft-specific
+ | 34 = decltype_nullptr // C++11
+ | 35 = __int128
+ | 36 = unsigned___int128
+ | 37 = signed___int128
+ | 38 = __float128
+ | 39 = _Complex___float128
+ | 40 = _Decimal32
+ | 41 = _Decimal64
+ | 42 = _Decimal128
+ | 43 = char16_t
+ | 44 = char32_t
+ | 45 = _Float32
+ | 46 = _Float32x
+ | 47 = _Float64
+ | 48 = _Float64x
+ | 49 = _Float128
+ | 50 = _Float128x
+ | 51 = char8_t
+ ;
+*/
+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
+);
+
+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 EDG frontend. See symbol_ref.h there.
+ 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
+;
+
+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_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
+ | @assignpaddexpr
+ | @assignpsubexpr
+ ;
+
+@assign_op_expr = @assign_arith_expr | @assign_bitwise_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 // EDG 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
+;
+
+@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
+ | @isstandardlayoutexpr
+ | @istriviallycopyableexpr
+ | @isliteraltypeexpr
+ | @hastrivialmoveconstructorexpr
+ | @hastrivialmoveassignexpr
+ | @hasnothrowmoveassignexpr
+ | @isconstructibleexpr
+ | @isnothrowconstructibleexpr
+ | @hasfinalizerexpr
+ | @isdelegateexpr
+ | @isinterfaceclassexpr
+ | @isrefarrayexpr
+ | @isrefclassexpr
+ | @issealedexpr
+ | @issimplevalueclassexpr
+ | @isvalueclassexpr
+ | @isfinalexpr
+ | @builtinchooseexpr
+ | @builtincomplex
+ | @isassignable
+ | @isaggregate
+ | @hasuniqueobjectrepresentations
+ | @builtinbitcast
+ | @builtinshuffle
+ ;
+
+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.
+ */
+#keyset[aggregate, field]
+aggregate_field_init(
+ int aggregate: @aggregateliteral ref,
+ int initializer: @expr ref,
+ int field: @membervariable ref
+);
+
+/**
+ * The index of the element being initialized by an initializer expression
+ * within an aggregate initializer for an array.
+ */
+#keyset[aggregate, element_index]
+aggregate_array_init(
+ int aggregate: @aggregateliteral ref,
+ int initializer: @expr ref,
+ int element_index: 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(
+ unique 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/f96ad9b2da43bbc9e55a72a165febd270ae07981/semmlecode.cpp.dbscheme b/cpp/downgrades/f96ad9b2da43bbc9e55a72a165febd270ae07981/semmlecode.cpp.dbscheme
new file mode 100644
index 00000000000..73af5058c68
--- /dev/null
+++ b/cpp/downgrades/f96ad9b2da43bbc9e55a72a165febd270ae07981/semmlecode.cpp.dbscheme
@@ -0,0 +1,2131 @@
+
+/**
+ * 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
+ */
+
+@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 @macroinvocations.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
+ | 2 = constructor
+ | 3 = destructor
+ | 4 = conversion
+ | 5 = operator
+ | 6 = builtin // GCC built-in functions, e.g. __builtin___memcpy_chk
+ ;
+*/
+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);
+
+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
+);
+
+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 = error
+ | 2 = unknown
+ | 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 = __int8 // Microsoft-specific
+ | 21 = __int16 // Microsoft-specific
+ | 22 = __int32 // Microsoft-specific
+ | 23 = __int64 // Microsoft-specific
+ | 24 = float
+ | 25 = double
+ | 26 = long_double
+ | 27 = _Complex_float // C99-specific
+ | 28 = _Complex_double // C99-specific
+ | 29 = _Complex_long double // C99-specific
+ | 30 = _Imaginary_float // C99-specific
+ | 31 = _Imaginary_double // C99-specific
+ | 32 = _Imaginary_long_double // C99-specific
+ | 33 = wchar_t // Microsoft-specific
+ | 34 = decltype_nullptr // C++11
+ | 35 = __int128
+ | 36 = unsigned___int128
+ | 37 = signed___int128
+ | 38 = __float128
+ | 39 = _Complex___float128
+ | 40 = _Decimal32
+ | 41 = _Decimal64
+ | 42 = _Decimal128
+ | 43 = char16_t
+ | 44 = char32_t
+ | 45 = _Float32
+ | 46 = _Float32x
+ | 47 = _Float64
+ | 48 = _Float64x
+ | 49 = _Float128
+ | 50 = _Float128x
+ | 51 = char8_t
+ ;
+*/
+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
+);
+
+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 EDG frontend. See symbol_ref.h there.
+ 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
+;
+
+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_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
+ | @assignpaddexpr
+ | @assignpsubexpr
+ ;
+
+@assign_op_expr = @assign_arith_expr | @assign_bitwise_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 // EDG 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
+;
+
+@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
+ | @isstandardlayoutexpr
+ | @istriviallycopyableexpr
+ | @isliteraltypeexpr
+ | @hastrivialmoveconstructorexpr
+ | @hastrivialmoveassignexpr
+ | @hasnothrowmoveassignexpr
+ | @isconstructibleexpr
+ | @isnothrowconstructibleexpr
+ | @hasfinalizerexpr
+ | @isdelegateexpr
+ | @isinterfaceclassexpr
+ | @isrefarrayexpr
+ | @isrefclassexpr
+ | @issealedexpr
+ | @issimplevalueclassexpr
+ | @isvalueclassexpr
+ | @isfinalexpr
+ | @builtinchooseexpr
+ | @builtincomplex
+ | @isassignable
+ | @isaggregate
+ | @hasuniqueobjectrepresentations
+ | @builtinbitcast
+ | @builtinshuffle
+ ;
+
+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.
+ */
+#keyset[aggregate, field]
+aggregate_field_init(
+ int aggregate: @aggregateliteral ref,
+ int initializer: @expr ref,
+ int field: @membervariable ref
+);
+
+/**
+ * The index of the element being initialized by an initializer expression
+ * within an aggregate initializer for an array.
+ */
+#keyset[aggregate, element_index]
+aggregate_array_init(
+ int aggregate: @aggregateliteral ref,
+ int initializer: @expr ref,
+ int element_index: 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(
+ unique 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/f96ad9b2da43bbc9e55a72a165febd270ae07981/upgrade.properties b/cpp/downgrades/f96ad9b2da43bbc9e55a72a165febd270ae07981/upgrade.properties
new file mode 100644
index 00000000000..167e65388e5
--- /dev/null
+++ b/cpp/downgrades/f96ad9b2da43bbc9e55a72a165febd270ae07981/upgrade.properties
@@ -0,0 +1,3 @@
+description: Add relation for orphaned local variables
+compatibility: full
+orphaned_variables.rel: delete
diff --git a/cpp/ql/lib/CHANGELOG.md b/cpp/ql/lib/CHANGELOG.md
index 9b4761ec2ce..6f20ab41c69 100644
--- a/cpp/ql/lib/CHANGELOG.md
+++ b/cpp/ql/lib/CHANGELOG.md
@@ -1,3 +1,15 @@
+## 0.3.3
+
+### New Features
+
+* Added a predicate `getValueConstant` to `AttributeArgument` that yields the argument value as an `Expr` when the value is a constant expression.
+* A new class predicate `MustFlowConfiguration::allowInterproceduralFlow` has been added to the `semmle.code.cpp.ir.dataflow.MustFlow` library. The new predicate can be overridden to disable interprocedural flow.
+* Added subclasses of `BuiltInOperations` for `__builtin_bit_cast`, `__builtin_shuffle`, `__has_unique_object_representations`, `__is_aggregate`, and `__is_assignable`.
+
+### Major Analysis Improvements
+
+* The IR dataflow library now includes flow through global variables. This enables new findings in many scenarios.
+
## 0.3.2
### Bug Fixes
diff --git a/cpp/ql/lib/change-notes/2022-06-23-global-var-flow.md b/cpp/ql/lib/change-notes/2022-06-23-global-var-flow.md
deleted file mode 100644
index ce931ef8de0..00000000000
--- a/cpp/ql/lib/change-notes/2022-06-23-global-var-flow.md
+++ /dev/null
@@ -1,4 +0,0 @@
----
-category: majorAnalysis
----
-* The IR dataflow library now includes flow through global variables. This enables new findings in many scenarios.
diff --git a/cpp/ql/lib/change-notes/2022-07-26-additional-builtin-support.md b/cpp/ql/lib/change-notes/2022-07-26-additional-builtin-support.md
deleted file mode 100644
index 2e4d7db69a5..00000000000
--- a/cpp/ql/lib/change-notes/2022-07-26-additional-builtin-support.md
+++ /dev/null
@@ -1,4 +0,0 @@
----
-category: feature
----
-* Added subclasses of `BuiltInOperations` for `__builtin_bit_cast`, `__builtin_shuffle`, `__has_unique_object_representations`, `__is_aggregate`, and `__is_assignable`.
diff --git a/cpp/ql/lib/change-notes/2022-08-02-must-flow-local-only-flow.md b/cpp/ql/lib/change-notes/2022-08-02-must-flow-local-only-flow.md
deleted file mode 100644
index 820822a5396..00000000000
--- a/cpp/ql/lib/change-notes/2022-08-02-must-flow-local-only-flow.md
+++ /dev/null
@@ -1,4 +0,0 @@
----
-category: feature
----
-* A new class predicate `MustFlowConfiguration::allowInterproceduralFlow` has been added to the `semmle.code.cpp.ir.dataflow.MustFlow` library. The new predicate can be overridden to disable interprocedural flow.
diff --git a/cpp/ql/lib/change-notes/2022-08-10-constant-attribute-argument-support.md b/cpp/ql/lib/change-notes/2022-08-10-constant-attribute-argument-support.md
deleted file mode 100644
index 056190026a8..00000000000
--- a/cpp/ql/lib/change-notes/2022-08-10-constant-attribute-argument-support.md
+++ /dev/null
@@ -1,4 +0,0 @@
----
-category: feature
----
-* Added a predicate `getValueConstant` to `AttributeArgument` that yields the argument value as an `Expr` when the value is a constant expression.
diff --git a/cpp/ql/lib/change-notes/2022-08-12-block-assignment-support.md b/cpp/ql/lib/change-notes/2022-08-12-block-assignment-support.md
new file mode 100644
index 00000000000..aaa4066a989
--- /dev/null
+++ b/cpp/ql/lib/change-notes/2022-08-12-block-assignment-support.md
@@ -0,0 +1,4 @@
+---
+category: feature
+---
+* Added a `BlockAssignExpr` class, which models a `memcpy`-like operation used in compiler generated copy/move constructors and assignment operations.
diff --git a/cpp/ql/lib/change-notes/2022-08-17-deleted-deprecations.md b/cpp/ql/lib/change-notes/2022-08-17-deleted-deprecations.md
new file mode 100644
index 00000000000..a6f230afd44
--- /dev/null
+++ b/cpp/ql/lib/change-notes/2022-08-17-deleted-deprecations.md
@@ -0,0 +1,6 @@
+---
+category: minorAnalysis
+---
+* All deprecated predicates/classes/modules that have been deprecated for over a year have been
+deleted.
+
diff --git a/cpp/ql/lib/change-notes/2022-08-22-link-targets-for-variables.md b/cpp/ql/lib/change-notes/2022-08-22-link-targets-for-variables.md
new file mode 100644
index 00000000000..b3d9efe975b
--- /dev/null
+++ b/cpp/ql/lib/change-notes/2022-08-22-link-targets-for-variables.md
@@ -0,0 +1,4 @@
+---
+category: feature
+---
+* Added support for getting the link targets of global and namespace variables.
diff --git a/cpp/ql/lib/change-notes/2022-08-22-xml-rename.md b/cpp/ql/lib/change-notes/2022-08-22-xml-rename.md
new file mode 100644
index 00000000000..6b73d2d2250
--- /dev/null
+++ b/cpp/ql/lib/change-notes/2022-08-22-xml-rename.md
@@ -0,0 +1,5 @@
+---
+category: deprecated
+---
+* Many classes/predicates/modules with upper-case acronyms in their name have been renamed to follow our style-guide.
+ The old name still exists as a deprecated alias.
\ No newline at end of file
diff --git a/cpp/ql/lib/change-notes/released/0.3.3.md b/cpp/ql/lib/change-notes/released/0.3.3.md
new file mode 100644
index 00000000000..9a459eb7f3b
--- /dev/null
+++ b/cpp/ql/lib/change-notes/released/0.3.3.md
@@ -0,0 +1,11 @@
+## 0.3.3
+
+### New Features
+
+* Added a predicate `getValueConstant` to `AttributeArgument` that yields the argument value as an `Expr` when the value is a constant expression.
+* A new class predicate `MustFlowConfiguration::allowInterproceduralFlow` has been added to the `semmle.code.cpp.ir.dataflow.MustFlow` library. The new predicate can be overridden to disable interprocedural flow.
+* Added subclasses of `BuiltInOperations` for `__builtin_bit_cast`, `__builtin_shuffle`, `__has_unique_object_representations`, `__is_aggregate`, and `__is_assignable`.
+
+### Major Analysis Improvements
+
+* The IR dataflow library now includes flow through global variables. This enables new findings in many scenarios.
diff --git a/cpp/ql/lib/codeql-pack.release.yml b/cpp/ql/lib/codeql-pack.release.yml
index 18c64250f42..9da182d3394 100644
--- a/cpp/ql/lib/codeql-pack.release.yml
+++ b/cpp/ql/lib/codeql-pack.release.yml
@@ -1,2 +1,2 @@
---
-lastReleaseVersion: 0.3.2
+lastReleaseVersion: 0.3.3
diff --git a/cpp/ql/lib/experimental/semmle/code/cpp/semantic/SemanticExprSpecific.qll b/cpp/ql/lib/experimental/semmle/code/cpp/semantic/SemanticExprSpecific.qll
index 67867cce9dc..3ed2c49e5c0 100644
--- a/cpp/ql/lib/experimental/semmle/code/cpp/semantic/SemanticExprSpecific.qll
+++ b/cpp/ql/lib/experimental/semmle/code/cpp/semantic/SemanticExprSpecific.qll
@@ -119,27 +119,67 @@ module SemanticExprConfig {
result = block.getDisplayIndex()
}
- class SsaVariable instanceof IR::Instruction {
- SsaVariable() { super.hasMemoryResult() }
+ newtype TSsaVariable =
+ TSsaInstruction(IR::Instruction instr) { instr.hasMemoryResult() } or
+ TSsaOperand(IR::Operand op) { op.isDefinitionInexact() }
- final string toString() { result = super.toString() }
+ class SsaVariable extends TSsaVariable {
+ string toString() { none() }
- final Location getLocation() { result = super.getLocation() }
+ Location getLocation() { none() }
+
+ IR::Instruction asInstruction() { none() }
+
+ IR::Operand asOperand() { none() }
}
- predicate explicitUpdate(SsaVariable v, Expr sourceExpr) { v = sourceExpr }
+ class SsaInstructionVariable extends SsaVariable, TSsaInstruction {
+ IR::Instruction instr;
- predicate phi(SsaVariable v) { v instanceof IR::PhiInstruction }
+ SsaInstructionVariable() { this = TSsaInstruction(instr) }
- SsaVariable getAPhiInput(SsaVariable v) { result = v.(IR::PhiInstruction).getAnInput() }
+ final override string toString() { result = instr.toString() }
- Expr getAUse(SsaVariable v) { result.(IR::LoadInstruction).getSourceValue() = v }
+ final override Location getLocation() { result = instr.getLocation() }
+
+ final override IR::Instruction asInstruction() { result = instr }
+ }
+
+ class SsaOperand extends SsaVariable, TSsaOperand {
+ IR::Operand op;
+
+ SsaOperand() { this = TSsaOperand(op) }
+
+ final override string toString() { result = op.toString() }
+
+ final override Location getLocation() { result = op.getLocation() }
+
+ final override IR::Operand asOperand() { result = op }
+ }
+
+ predicate explicitUpdate(SsaVariable v, Expr sourceExpr) { v.asInstruction() = sourceExpr }
+
+ predicate phi(SsaVariable v) { v.asInstruction() instanceof IR::PhiInstruction }
+
+ SsaVariable getAPhiInput(SsaVariable v) {
+ exists(IR::PhiInstruction instr |
+ result.asInstruction() = instr.getAnInput()
+ or
+ result.asOperand() = instr.getAnInputOperand()
+ )
+ }
+
+ Expr getAUse(SsaVariable v) { result.(IR::LoadInstruction).getSourceValue() = v.asInstruction() }
SemType getSsaVariableType(SsaVariable v) {
- result = getSemanticType(v.(IR::Instruction).getResultIRType())
+ result = getSemanticType(v.asInstruction().getResultIRType())
}
- BasicBlock getSsaVariableBasicBlock(SsaVariable v) { result = v.(IR::Instruction).getBlock() }
+ BasicBlock getSsaVariableBasicBlock(SsaVariable v) {
+ result = v.asInstruction().getBlock()
+ or
+ result = v.asOperand().getUse().getBlock()
+ }
private newtype TReadPosition =
TReadPositionBlock(IR::IRBlock block) or
@@ -169,7 +209,9 @@ module SemanticExprConfig {
final override predicate hasRead(SsaVariable v) {
exists(IR::Operand operand |
- operand.getDef() = v and not operand instanceof IR::PhiInputOperand
+ operand.getDef() = v.asInstruction() and
+ not operand instanceof IR::PhiInputOperand and
+ operand.getUse().getBlock() = block
)
}
}
@@ -186,7 +228,7 @@ module SemanticExprConfig {
final override predicate hasRead(SsaVariable v) {
exists(IR::PhiInputOperand operand |
- operand.getDef() = v and
+ operand.getDef() = v.asInstruction() and
operand.getPredecessorBlock() = pred and
operand.getUse().getBlock() = succ
)
@@ -205,17 +247,16 @@ module SemanticExprConfig {
exists(IR::PhiInputOperand operand |
pos = TReadPositionPhiInputEdge(operand.getPredecessorBlock(), operand.getUse().getBlock())
|
- phi = operand.getUse() and input = operand.getDef()
+ phi.asInstruction() = operand.getUse() and
+ (
+ input.asInstruction() = operand.getDef()
+ or
+ input.asOperand() = operand
+ )
)
}
class Bound instanceof IRBound::Bound {
- Bound() {
- this instanceof IRBound::ZeroBound
- or
- this.(IRBound::ValueNumberBound).getValueNumber().getAnInstruction() instanceof SsaVariable
- }
-
string toString() { result = super.toString() }
final Location getLocation() { result = super.getLocation() }
@@ -228,13 +269,13 @@ module SemanticExprConfig {
override string toString() {
result =
- min(SsaVariable instr |
- instr = bound.getValueNumber().getAnInstruction()
+ min(SsaVariable v |
+ v.asInstruction() = bound.getValueNumber().getAnInstruction()
|
- instr
+ v
order by
- instr.(IR::Instruction).getBlock().getDisplayIndex(),
- instr.(IR::Instruction).getDisplayIndexInBlock()
+ v.asInstruction().getBlock().getDisplayIndex(),
+ v.asInstruction().getDisplayIndexInBlock()
).toString()
}
}
@@ -242,7 +283,7 @@ module SemanticExprConfig {
predicate zeroBound(Bound bound) { bound instanceof IRBound::ZeroBound }
predicate ssaBound(Bound bound, SsaVariable v) {
- v = bound.(IRBound::ValueNumberBound).getValueNumber().getAnInstruction()
+ v.asInstruction() = bound.(IRBound::ValueNumberBound).getValueNumber().getAnInstruction()
}
Expr getBoundExpr(Bound bound, int delta) {
@@ -251,22 +292,20 @@ module SemanticExprConfig {
class Guard = IRGuards::IRGuardCondition;
- predicate guard(Guard guard, BasicBlock block) {
- block = guard.(IRGuards::IRGuardCondition).getBlock()
- }
+ predicate guard(Guard guard, BasicBlock block) { block = guard.getBlock() }
Expr getGuardAsExpr(Guard guard) { result = guard }
predicate equalityGuard(Guard guard, Expr e1, Expr e2, boolean polarity) {
- guard.(IRGuards::IRGuardCondition).comparesEq(e1.getAUse(), e2.getAUse(), 0, true, polarity)
+ guard.comparesEq(e1.getAUse(), e2.getAUse(), 0, true, polarity)
}
predicate guardDirectlyControlsBlock(Guard guard, BasicBlock controlled, boolean branch) {
- guard.(IRGuards::IRGuardCondition).controls(controlled, branch)
+ guard.controls(controlled, branch)
}
predicate guardHasBranchEdge(Guard guard, BasicBlock bb1, BasicBlock bb2, boolean branch) {
- guard.(IRGuards::IRGuardCondition).controlsEdge(bb1, bb2, branch)
+ guard.controlsEdge(bb1, bb2, branch)
}
Guard comparisonGuard(Expr e) { result = e }
@@ -284,9 +323,13 @@ SemBasicBlock getSemanticBasicBlock(IR::IRBlock block) { result = block }
IR::IRBlock getCppBasicBlock(SemBasicBlock block) { block = result }
-SemSsaVariable getSemanticSsaVariable(IR::Instruction instr) { result = instr }
+SemSsaVariable getSemanticSsaVariable(IR::Instruction instr) {
+ result.(SemanticExprConfig::SsaVariable).asInstruction() = instr
+}
-IR::Instruction getCppSsaVariableInstruction(SemSsaVariable v) { v = result }
+IR::Instruction getCppSsaVariableInstruction(SemSsaVariable var) {
+ var.(SemanticExprConfig::SsaVariable).asInstruction() = result
+}
SemBound getSemanticBound(IRBound::Bound bound) { result = bound }
diff --git a/cpp/ql/lib/experimental/semmle/code/cpp/semantic/analysis/ModulusAnalysis.qll b/cpp/ql/lib/experimental/semmle/code/cpp/semantic/analysis/ModulusAnalysis.qll
index 8e025effbc7..5320048349a 100644
--- a/cpp/ql/lib/experimental/semmle/code/cpp/semantic/analysis/ModulusAnalysis.qll
+++ b/cpp/ql/lib/experimental/semmle/code/cpp/semantic/analysis/ModulusAnalysis.qll
@@ -160,6 +160,7 @@ private predicate phiModulusInit(SemSsaPhiNode phi, SemBound b, int val, int mod
/**
* Holds if all inputs to `phi` numbered `1` to `rix` are equal to `b + val` modulo `mod`.
*/
+pragma[nomagic]
private predicate phiModulusRankStep(SemSsaPhiNode phi, SemBound b, int val, int mod, int rix) {
rix = 0 and
phiModulusInit(phi, b, val, mod)
@@ -169,7 +170,7 @@ private predicate phiModulusRankStep(SemSsaPhiNode phi, SemBound b, int val, int
val = remainder(v1, mod)
|
exists(int v2, int m2 |
- rankedPhiInput(phi, inp, edge, rix) and
+ rankedPhiInput(pragma[only_bind_out](phi), inp, edge, rix) and
phiModulusRankStep(phi, b, v1, m1, rix - 1) and
ssaModulus(inp, edge, b, v2, m2) and
mod = m1.gcd(m2).gcd(v1 - v2)
diff --git a/cpp/ql/lib/experimental/semmle/code/cpp/semantic/analysis/RangeAnalysis.qll b/cpp/ql/lib/experimental/semmle/code/cpp/semantic/analysis/RangeAnalysis.qll
index 3d5bea8bca6..4f8462705b1 100644
--- a/cpp/ql/lib/experimental/semmle/code/cpp/semantic/analysis/RangeAnalysis.qll
+++ b/cpp/ql/lib/experimental/semmle/code/cpp/semantic/analysis/RangeAnalysis.qll
@@ -342,7 +342,10 @@ private class ConvertOrBoxExpr extends SemUnaryExpr {
* A cast that can be ignored for the purpose of range analysis.
*/
private class SafeCastExpr extends ConvertOrBoxExpr {
- SafeCastExpr() { conversionCannotOverflow(getTrackedType(getOperand()), getTrackedType(this)) }
+ SafeCastExpr() {
+ conversionCannotOverflow(getTrackedType(pragma[only_bind_into](getOperand())),
+ getTrackedType(this))
+ }
}
/**
diff --git a/cpp/ql/lib/experimental/semmle/code/cpp/semantic/analysis/SignAnalysisCommon.qll b/cpp/ql/lib/experimental/semmle/code/cpp/semantic/analysis/SignAnalysisCommon.qll
index c7e05f1bd99..6015c33c035 100644
--- a/cpp/ql/lib/experimental/semmle/code/cpp/semantic/analysis/SignAnalysisCommon.qll
+++ b/cpp/ql/lib/experimental/semmle/code/cpp/semantic/analysis/SignAnalysisCommon.qll
@@ -189,9 +189,12 @@ private class BinarySignExpr extends FlowSignExpr {
BinarySignExpr() { binary = this }
override Sign getSignRestriction() {
- result =
- semExprSign(binary.getLeftOperand())
- .applyBinaryOp(semExprSign(binary.getRightOperand()), binary.getOpcode())
+ exists(SemExpr left, SemExpr right |
+ binaryExprOperands(binary, left, right) and
+ result =
+ semExprSign(pragma[only_bind_out](left))
+ .applyBinaryOp(semExprSign(pragma[only_bind_out](right)), binary.getOpcode())
+ )
or
exists(SemDivExpr div | div = binary |
result = semExprSign(div.getLeftOperand()) and
@@ -201,6 +204,10 @@ private class BinarySignExpr extends FlowSignExpr {
}
}
+private predicate binaryExprOperands(SemBinaryExpr binary, SemExpr left, SemExpr right) {
+ binary.getLeftOperand() = left and binary.getRightOperand() = right
+}
+
/**
* A `Convert`, `Box`, or `Unbox` expression.
*/
@@ -221,7 +228,7 @@ private class UnarySignExpr extends FlowSignExpr {
UnarySignExpr() { unary = this and not this instanceof SemCastExpr }
override Sign getSignRestriction() {
- result = semExprSign(unary.getOperand()).applyUnaryOp(unary.getOpcode())
+ result = semExprSign(pragma[only_bind_out](unary.getOperand())).applyUnaryOp(unary.getOpcode())
}
}
diff --git a/cpp/ql/lib/qlpack.yml b/cpp/ql/lib/qlpack.yml
index 06e68dba48c..089b767ee8d 100644
--- a/cpp/ql/lib/qlpack.yml
+++ b/cpp/ql/lib/qlpack.yml
@@ -1,5 +1,5 @@
name: codeql/cpp-all
-version: 0.3.3-dev
+version: 0.3.4-dev
groups: cpp
dbscheme: semmlecode.cpp.dbscheme
extractor: cpp
diff --git a/cpp/ql/lib/semmle/code/cpp/File.qll b/cpp/ql/lib/semmle/code/cpp/File.qll
index 398633edbd8..e58467fac20 100644
--- a/cpp/ql/lib/semmle/code/cpp/File.qll
+++ b/cpp/ql/lib/semmle/code/cpp/File.qll
@@ -218,8 +218,6 @@ class Folder extends Container, @folder {
class File extends Container, @file {
override string getAbsolutePath() { files(underlyingElement(this), result) }
- override string toString() { result = Container.super.toString() }
-
override string getAPrimaryQlClass() { result = "File" }
override Location getLocation() {
diff --git a/cpp/ql/lib/semmle/code/cpp/Linkage.qll b/cpp/ql/lib/semmle/code/cpp/Linkage.qll
index 54a6099eaef..766ddd188c1 100644
--- a/cpp/ql/lib/semmle/code/cpp/Linkage.qll
+++ b/cpp/ql/lib/semmle/code/cpp/Linkage.qll
@@ -41,6 +41,15 @@ class LinkTarget extends @link_target {
* translation units which contributed to this link target.
*/
Class getAClass() { link_parent(unresolveElement(result), this) }
+
+ /**
+ * Gets a global or namespace variable which was compiled into this
+ * link target, or had its declaration included by one of the translation
+ * units which contributed to this link target.
+ */
+ GlobalOrNamespaceVariable getAGlobalOrNamespaceVariable() {
+ link_parent(unresolveElement(result), this)
+ }
}
/**
diff --git a/cpp/ql/lib/semmle/code/cpp/Variable.qll b/cpp/ql/lib/semmle/code/cpp/Variable.qll
index 7e188980b9c..b0e0647d24b 100644
--- a/cpp/ql/lib/semmle/code/cpp/Variable.qll
+++ b/cpp/ql/lib/semmle/code/cpp/Variable.qll
@@ -398,6 +398,8 @@ class LocalVariable extends LocalScopeVariable, @localvariable {
exists(DeclStmt s | s.getADeclaration() = this and s.getEnclosingFunction() = result)
or
exists(ConditionDeclExpr e | e.getVariable() = this and e.getEnclosingFunction() = result)
+ or
+ orphaned_variables(underlyingElement(this), unresolveElement(result))
}
}
@@ -471,6 +473,9 @@ class GlobalOrNamespaceVariable extends Variable, @globalvariable {
override Type getType() { globalvariables(underlyingElement(this), unresolveElement(result), _) }
override Element getEnclosingElement() { none() }
+
+ /** Gets a link target which compiled or referenced this global or namespace variable. */
+ LinkTarget getALinkTarget() { this = result.getAGlobalOrNamespaceVariable() }
}
/**
diff --git a/cpp/ql/lib/semmle/code/cpp/XML.qll b/cpp/ql/lib/semmle/code/cpp/XML.qll
old mode 100755
new mode 100644
index fb781a4683f..d74129d425e
--- a/cpp/ql/lib/semmle/code/cpp/XML.qll
+++ b/cpp/ql/lib/semmle/code/cpp/XML.qll
@@ -8,7 +8,7 @@ private class TXmlLocatable =
@xmldtd or @xmlelement or @xmlattribute or @xmlnamespace or @xmlcomment or @xmlcharacters;
/** An XML element that has a location. */
-class XMLLocatable extends @xmllocatable, TXmlLocatable {
+class XmlLocatable extends @xmllocatable, TXmlLocatable {
/** Gets the source location for this element. */
Location getLocation() { xmllocations(this, result) }
@@ -32,13 +32,16 @@ class XMLLocatable extends @xmllocatable, TXmlLocatable {
string toString() { none() } // overridden in subclasses
}
+/** DEPRECATED: Alias for XmlLocatable */
+deprecated class XMLLocatable = XmlLocatable;
+
/**
- * An `XMLParent` is either an `XMLElement` or an `XMLFile`,
+ * An `XmlParent` is either an `XmlElement` or an `XmlFile`,
* both of which can contain other elements.
*/
-class XMLParent extends @xmlparent {
- XMLParent() {
- // explicitly restrict `this` to be either an `XMLElement` or an `XMLFile`;
+class XmlParent extends @xmlparent {
+ XmlParent() {
+ // explicitly restrict `this` to be either an `XmlElement` or an `XmlFile`;
// the type `@xmlparent` currently also includes non-XML files
this instanceof @xmlelement or xmlEncoding(this, _)
}
@@ -50,28 +53,28 @@ class XMLParent extends @xmlparent {
string getName() { none() } // overridden in subclasses
/** Gets the file to which this XML parent belongs. */
- XMLFile getFile() { result = this or xmlElements(this, _, _, _, result) }
+ XmlFile getFile() { result = this or xmlElements(this, _, _, _, result) }
/** Gets the child element at a specified index of this XML parent. */
- XMLElement getChild(int index) { xmlElements(result, _, this, index, _) }
+ XmlElement getChild(int index) { xmlElements(result, _, this, index, _) }
/** Gets a child element of this XML parent. */
- XMLElement getAChild() { xmlElements(result, _, this, _, _) }
+ XmlElement getAChild() { xmlElements(result, _, this, _, _) }
/** Gets a child element of this XML parent with the given `name`. */
- XMLElement getAChild(string name) { xmlElements(result, _, this, _, _) and result.hasName(name) }
+ XmlElement getAChild(string name) { xmlElements(result, _, this, _, _) and result.hasName(name) }
/** Gets a comment that is a child of this XML parent. */
- XMLComment getAComment() { xmlComments(result, _, this, _) }
+ XmlComment getAComment() { xmlComments(result, _, this, _) }
/** Gets a character sequence that is a child of this XML parent. */
- XMLCharacters getACharactersSet() { xmlChars(result, _, this, _, _, _) }
+ XmlCharacters getACharactersSet() { xmlChars(result, _, this, _, _, _) }
- /** Gets the depth in the tree. (Overridden in XMLElement.) */
+ /** Gets the depth in the tree. (Overridden in XmlElement.) */
int getDepth() { result = 0 }
/** Gets the number of child XML elements of this XML parent. */
- int getNumberOfChildren() { result = count(XMLElement e | xmlElements(e, _, this, _, _)) }
+ int getNumberOfChildren() { result = count(XmlElement e | xmlElements(e, _, this, _, _)) }
/** Gets the number of places in the body of this XML parent where text occurs. */
int getNumberOfCharacterSets() { result = count(int pos | xmlChars(_, _, this, pos, _, _)) }
@@ -92,9 +95,12 @@ class XMLParent extends @xmlparent {
string toString() { result = this.getName() }
}
+/** DEPRECATED: Alias for XmlParent */
+deprecated class XMLParent = XmlParent;
+
/** An XML file. */
-class XMLFile extends XMLParent, File {
- XMLFile() { xmlEncoding(this, _) }
+class XmlFile extends XmlParent, File {
+ XmlFile() { xmlEncoding(this, _) }
/** Gets a printable representation of this XML file. */
override string toString() { result = this.getName() }
@@ -120,15 +126,21 @@ class XMLFile extends XMLParent, File {
string getEncoding() { xmlEncoding(this, result) }
/** Gets the XML file itself. */
- override XMLFile getFile() { result = this }
+ override XmlFile getFile() { result = this }
/** Gets a top-most element in an XML file. */
- XMLElement getARootElement() { result = this.getAChild() }
+ XmlElement getARootElement() { result = this.getAChild() }
/** Gets a DTD associated with this XML file. */
- XMLDTD getADTD() { xmlDTDs(result, _, _, _, this) }
+ XmlDtd getADtd() { xmlDTDs(result, _, _, _, this) }
+
+ /** DEPRECATED: Alias for getADtd */
+ deprecated XmlDtd getADTD() { result = this.getADtd() }
}
+/** DEPRECATED: Alias for XmlFile */
+deprecated class XMLFile = XmlFile;
+
/**
* An XML document type definition (DTD).
*
@@ -140,7 +152,7 @@ class XMLFile extends XMLParent, File {
*
* ```
*/
-class XMLDTD extends XMLLocatable, @xmldtd {
+class XmlDtd extends XmlLocatable, @xmldtd {
/** Gets the name of the root element of this DTD. */
string getRoot() { xmlDTDs(this, result, _, _, _) }
@@ -154,7 +166,7 @@ class XMLDTD extends XMLLocatable, @xmldtd {
predicate isPublic() { not xmlDTDs(this, _, "", _, _) }
/** Gets the parent of this DTD. */
- XMLParent getParent() { xmlDTDs(this, _, _, _, result) }
+ XmlParent getParent() { xmlDTDs(this, _, _, _, result) }
override string toString() {
this.isPublic() and
@@ -165,6 +177,9 @@ class XMLDTD extends XMLLocatable, @xmldtd {
}
}
+/** DEPRECATED: Alias for XmlDtd */
+deprecated class XMLDTD = XmlDtd;
+
/**
* An XML element in an XML file.
*
@@ -176,7 +191,7 @@ class XMLDTD extends XMLLocatable, @xmldtd {
*
* ```
*/
-class XMLElement extends @xmlelement, XMLParent, XMLLocatable {
+class XmlElement extends @xmlelement, XmlParent, XmlLocatable {
/** Holds if this XML element has the given `name`. */
predicate hasName(string name) { name = this.getName() }
@@ -184,10 +199,10 @@ class XMLElement extends @xmlelement, XMLParent, XMLLocatable {
override string getName() { xmlElements(this, result, _, _, _) }
/** Gets the XML file in which this XML element occurs. */
- override XMLFile getFile() { xmlElements(this, _, _, _, result) }
+ override XmlFile getFile() { xmlElements(this, _, _, _, result) }
/** Gets the parent of this XML element. */
- XMLParent getParent() { xmlElements(this, _, result, _, _) }
+ XmlParent getParent() { xmlElements(this, _, result, _, _) }
/** Gets the index of this XML element among its parent's children. */
int getIndex() { xmlElements(this, _, _, result, _) }
@@ -196,7 +211,7 @@ class XMLElement extends @xmlelement, XMLParent, XMLLocatable {
predicate hasNamespace() { xmlHasNs(this, _, _) }
/** Gets the namespace of this XML element, if any. */
- XMLNamespace getNamespace() { xmlHasNs(this, result, _) }
+ XmlNamespace getNamespace() { xmlHasNs(this, result, _) }
/** Gets the index of this XML element among its parent's children. */
int getElementPositionIndex() { xmlElements(this, _, _, result, _) }
@@ -205,10 +220,10 @@ class XMLElement extends @xmlelement, XMLParent, XMLLocatable {
override int getDepth() { result = this.getParent().getDepth() + 1 }
/** Gets an XML attribute of this XML element. */
- XMLAttribute getAnAttribute() { result.getElement() = this }
+ XmlAttribute getAnAttribute() { result.getElement() = this }
/** Gets the attribute with the specified `name`, if any. */
- XMLAttribute getAttribute(string name) { result.getElement() = this and result.getName() = name }
+ XmlAttribute getAttribute(string name) { result.getElement() = this and result.getName() = name }
/** Holds if this XML element has an attribute with the specified `name`. */
predicate hasAttribute(string name) { exists(this.getAttribute(name)) }
@@ -220,6 +235,9 @@ class XMLElement extends @xmlelement, XMLParent, XMLLocatable {
override string toString() { result = this.getName() }
}
+/** DEPRECATED: Alias for XmlElement */
+deprecated class XMLElement = XmlElement;
+
/**
* An attribute that occurs inside an XML element.
*
@@ -230,18 +248,18 @@ class XMLElement extends @xmlelement, XMLParent, XMLLocatable {
* android:versionCode="1"
* ```
*/
-class XMLAttribute extends @xmlattribute, XMLLocatable {
+class XmlAttribute extends @xmlattribute, XmlLocatable {
/** Gets the name of this attribute. */
string getName() { xmlAttrs(this, _, result, _, _, _) }
/** Gets the XML element to which this attribute belongs. */
- XMLElement getElement() { xmlAttrs(this, result, _, _, _, _) }
+ XmlElement getElement() { xmlAttrs(this, result, _, _, _, _) }
/** Holds if this attribute has a namespace. */
predicate hasNamespace() { xmlHasNs(this, _, _) }
/** Gets the namespace of this attribute, if any. */
- XMLNamespace getNamespace() { xmlHasNs(this, result, _) }
+ XmlNamespace getNamespace() { xmlHasNs(this, result, _) }
/** Gets the value of this attribute. */
string getValue() { xmlAttrs(this, _, _, result, _, _) }
@@ -250,6 +268,9 @@ class XMLAttribute extends @xmlattribute, XMLLocatable {
override string toString() { result = this.getName() + "=" + this.getValue() }
}
+/** DEPRECATED: Alias for XmlAttribute */
+deprecated class XMLAttribute = XmlAttribute;
+
/**
* A namespace used in an XML file.
*
@@ -259,23 +280,29 @@ class XMLAttribute extends @xmlattribute, XMLLocatable {
* xmlns:android="http://schemas.android.com/apk/res/android"
* ```
*/
-class XMLNamespace extends XMLLocatable, @xmlnamespace {
+class XmlNamespace extends XmlLocatable, @xmlnamespace {
/** Gets the prefix of this namespace. */
string getPrefix() { xmlNs(this, result, _, _) }
/** Gets the URI of this namespace. */
- string getURI() { xmlNs(this, _, result, _) }
+ string getUri() { xmlNs(this, _, result, _) }
+
+ /** DEPRECATED: Alias for getUri */
+ deprecated string getURI() { result = this.getUri() }
/** Holds if this namespace has no prefix. */
predicate isDefault() { this.getPrefix() = "" }
override string toString() {
- this.isDefault() and result = this.getURI()
+ this.isDefault() and result = this.getUri()
or
- not this.isDefault() and result = this.getPrefix() + ":" + this.getURI()
+ not this.isDefault() and result = this.getPrefix() + ":" + this.getUri()
}
}
+/** DEPRECATED: Alias for XmlNamespace */
+deprecated class XMLNamespace = XmlNamespace;
+
/**
* A comment in an XML file.
*
@@ -285,17 +312,20 @@ class XMLNamespace extends XMLLocatable, @xmlnamespace {
*
* ```
*/
-class XMLComment extends @xmlcomment, XMLLocatable {
+class XmlComment extends @xmlcomment, XmlLocatable {
/** Gets the text content of this XML comment. */
string getText() { xmlComments(this, result, _, _) }
/** Gets the parent of this XML comment. */
- XMLParent getParent() { xmlComments(this, _, result, _) }
+ XmlParent getParent() { xmlComments(this, _, result, _) }
/** Gets a printable representation of this XML comment. */
override string toString() { result = this.getText() }
}
+/** DEPRECATED: Alias for XmlComment */
+deprecated class XMLComment = XmlComment;
+
/**
* A sequence of characters that occurs between opening and
* closing tags of an XML element, excluding other elements.
@@ -306,12 +336,12 @@ class XMLComment extends @xmlcomment, XMLLocatable {
* This is a sequence of characters.
* ```
*/
-class XMLCharacters extends @xmlcharacters, XMLLocatable {
+class XmlCharacters extends @xmlcharacters, XmlLocatable {
/** Gets the content of this character sequence. */
string getCharacters() { xmlChars(this, result, _, _, _, _) }
/** Gets the parent of this character sequence. */
- XMLParent getParent() { xmlChars(this, _, result, _, _, _) }
+ XmlParent getParent() { xmlChars(this, _, result, _, _, _) }
/** Holds if this character sequence is CDATA. */
predicate isCDATA() { xmlChars(this, _, _, _, 1, _) }
@@ -319,3 +349,6 @@ class XMLCharacters extends @xmlcharacters, XMLLocatable {
/** Gets a printable representation of this XML character sequence. */
override string toString() { result = this.getCharacters() }
}
+
+/** DEPRECATED: Alias for XmlCharacters */
+deprecated class XMLCharacters = XmlCharacters;
diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl.qll
index 340bfe280b7..468f8640a78 100644
--- a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl.qll
+++ b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl.qll
@@ -3061,7 +3061,7 @@ private class PathNodeMid extends PathNodeImpl, TPathNodeMid {
else cc instanceof CallContextAny
) and
sc instanceof SummaryCtxNone and
- ap instanceof AccessPathNil
+ ap = TAccessPathNil(node.getDataFlowType())
}
predicate isAtSink() {
diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl2.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl2.qll
index 340bfe280b7..468f8640a78 100644
--- a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl2.qll
+++ b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl2.qll
@@ -3061,7 +3061,7 @@ private class PathNodeMid extends PathNodeImpl, TPathNodeMid {
else cc instanceof CallContextAny
) and
sc instanceof SummaryCtxNone and
- ap instanceof AccessPathNil
+ ap = TAccessPathNil(node.getDataFlowType())
}
predicate isAtSink() {
diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl3.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl3.qll
index 340bfe280b7..468f8640a78 100644
--- a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl3.qll
+++ b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl3.qll
@@ -3061,7 +3061,7 @@ private class PathNodeMid extends PathNodeImpl, TPathNodeMid {
else cc instanceof CallContextAny
) and
sc instanceof SummaryCtxNone and
- ap instanceof AccessPathNil
+ ap = TAccessPathNil(node.getDataFlowType())
}
predicate isAtSink() {
diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl4.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl4.qll
index 340bfe280b7..468f8640a78 100644
--- a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl4.qll
+++ b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl4.qll
@@ -3061,7 +3061,7 @@ private class PathNodeMid extends PathNodeImpl, TPathNodeMid {
else cc instanceof CallContextAny
) and
sc instanceof SummaryCtxNone and
- ap instanceof AccessPathNil
+ ap = TAccessPathNil(node.getDataFlowType())
}
predicate isAtSink() {
diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImplLocal.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImplLocal.qll
index 340bfe280b7..468f8640a78 100644
--- a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImplLocal.qll
+++ b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImplLocal.qll
@@ -3061,7 +3061,7 @@ private class PathNodeMid extends PathNodeImpl, TPathNodeMid {
else cc instanceof CallContextAny
) and
sc instanceof SummaryCtxNone and
- ap instanceof AccessPathNil
+ ap = TAccessPathNil(node.getDataFlowType())
}
predicate isAtSink() {
diff --git a/cpp/ql/lib/semmle/code/cpp/exprs/Assignment.qll b/cpp/ql/lib/semmle/code/cpp/exprs/Assignment.qll
index fd03220c183..f30c9ec8d67 100644
--- a/cpp/ql/lib/semmle/code/cpp/exprs/Assignment.qll
+++ b/cpp/ql/lib/semmle/code/cpp/exprs/Assignment.qll
@@ -47,6 +47,20 @@ class AssignExpr extends Assignment, @assignexpr {
override string toString() { result = "... = ..." }
}
+/**
+ * A compiler generated assignment operation that may occur in a compiler generated
+ * copy/move constructor or assignment operator, and which functions like `memcpy`
+ * where the size argument is based on the type of the rvalue of the assignment.
+ */
+class BlockAssignExpr extends Assignment, @blockassignexpr {
+ override string getOperator() { result = "=" }
+
+ override string getAPrimaryQlClass() { result = "BlockAssignExpr" }
+
+ /** Gets a textual representation of this assignment. */
+ override string toString() { result = "... = ..." }
+}
+
/**
* A non-overloaded binary assignment operation other than `=`.
*
diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl.qll
index 340bfe280b7..468f8640a78 100644
--- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl.qll
+++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl.qll
@@ -3061,7 +3061,7 @@ private class PathNodeMid extends PathNodeImpl, TPathNodeMid {
else cc instanceof CallContextAny
) and
sc instanceof SummaryCtxNone and
- ap instanceof AccessPathNil
+ ap = TAccessPathNil(node.getDataFlowType())
}
predicate isAtSink() {
diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl2.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl2.qll
index 340bfe280b7..468f8640a78 100644
--- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl2.qll
+++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl2.qll
@@ -3061,7 +3061,7 @@ private class PathNodeMid extends PathNodeImpl, TPathNodeMid {
else cc instanceof CallContextAny
) and
sc instanceof SummaryCtxNone and
- ap instanceof AccessPathNil
+ ap = TAccessPathNil(node.getDataFlowType())
}
predicate isAtSink() {
diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl3.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl3.qll
index 340bfe280b7..468f8640a78 100644
--- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl3.qll
+++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl3.qll
@@ -3061,7 +3061,7 @@ private class PathNodeMid extends PathNodeImpl, TPathNodeMid {
else cc instanceof CallContextAny
) and
sc instanceof SummaryCtxNone and
- ap instanceof AccessPathNil
+ ap = TAccessPathNil(node.getDataFlowType())
}
predicate isAtSink() {
diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl4.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl4.qll
index 340bfe280b7..468f8640a78 100644
--- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl4.qll
+++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl4.qll
@@ -3061,7 +3061,7 @@ private class PathNodeMid extends PathNodeImpl, TPathNodeMid {
else cc instanceof CallContextAny
) and
sc instanceof SummaryCtxNone and
- ap instanceof AccessPathNil
+ ap = TAccessPathNil(node.getDataFlowType())
}
predicate isAtSink() {
diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/SsaImplCommon.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/SsaImplCommon.qll
index eed0d050735..659940def50 100644
--- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/SsaImplCommon.qll
+++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/SsaImplCommon.qll
@@ -39,7 +39,7 @@ private module Liveness {
/**
* Holds if the `i`th node of basic block `bb` is a reference to `v` of kind `k`.
*/
- private predicate ref(BasicBlock bb, int i, SourceVariable v, RefKind k) {
+ predicate ref(BasicBlock bb, int i, SourceVariable v, RefKind k) {
exists(boolean certain | variableRead(bb, i, v, certain) | k = Read(certain))
or
exists(boolean certain | variableWrite(bb, i, v, certain) | k = Write(certain))
@@ -76,6 +76,10 @@ private module Liveness {
not result + 1 = refRank(bb, _, v, _)
}
+ predicate lastRefIsRead(BasicBlock bb, SourceVariable v) {
+ maxRefRank(bb, v) = refRank(bb, _, v, Read(_))
+ }
+
/**
* Gets the (1-based) rank of the first reference to `v` inside basic block `bb`
* that is either a read or a certain write.
@@ -185,23 +189,29 @@ newtype TDefinition =
private module SsaDefReaches {
newtype TSsaRefKind =
- SsaRead() or
+ SsaActualRead() or
+ SsaPhiRead() or
SsaDef()
+ class SsaRead = SsaActualRead or SsaPhiRead;
+
/**
* A classification of SSA variable references into reads and definitions.
*/
class SsaRefKind extends TSsaRefKind {
string toString() {
- this = SsaRead() and
- result = "SsaRead"
+ this = SsaActualRead() and
+ result = "SsaActualRead"
+ or
+ this = SsaPhiRead() and
+ result = "SsaPhiRead"
or
this = SsaDef() and
result = "SsaDef"
}
int getOrder() {
- this = SsaRead() and
+ this instanceof SsaRead and
result = 0
or
this = SsaDef() and
@@ -209,6 +219,80 @@ private module SsaDefReaches {
}
}
+ /**
+ * Holds if `bb` is in the dominance frontier of a block containing a
+ * read of `v`.
+ */
+ pragma[nomagic]
+ private predicate inReadDominanceFrontier(BasicBlock bb, SourceVariable v) {
+ exists(BasicBlock readbb | inDominanceFrontier(readbb, bb) |
+ lastRefIsRead(readbb, v)
+ or
+ phiRead(readbb, v)
+ )
+ }
+
+ /**
+ * Holds if a phi-read node should be inserted for variable `v` at the beginning
+ * of basic block `bb`.
+ *
+ * Phi-read nodes are like normal phi nodes, but they are inserted based on reads
+ * instead of writes, and only if the dominance-frontier block does not already
+ * contain a reference (read or write) to `v`. Unlike normal phi nodes, this is
+ * an internal implementation detail that is not exposed.
+ *
+ * The motivation for adding phi-reads is to improve performance of the use-use
+ * calculation in cases where there is a large number of reads that can reach the
+ * same join-point, and from there reach a large number of basic blocks. Example:
+ *
+ * ```cs
+ * if (a)
+ * use(x);
+ * else if (b)
+ * use(x);
+ * else if (c)
+ * use(x);
+ * else if (d)
+ * use(x);
+ * // many more ifs ...
+ *
+ * // phi-read for `x` inserted here
+ *
+ * // program not mentioning `x`, with large basic block graph
+ *
+ * use(x);
+ * ```
+ *
+ * Without phi-reads, the analysis has to replicate reachability for each of
+ * the guarded uses of `x`. However, with phi-reads, the analysis will limit
+ * each conditional use of `x` to reach the basic block containing the phi-read
+ * node for `x`, and only that basic block will have to compute reachability
+ * through the remainder of the large program.
+ *
+ * Like normal reads, each phi-read node `phi-read` can be reached from exactly
+ * one SSA definition (without passing through another definition): Assume, for
+ * the sake of contradiction, that there are two reaching definitions `def1` and
+ * `def2`. Now, if both `def1` and `def2` dominate `phi-read`, then the nearest
+ * dominating definition will prevent the other from reaching `phi-read`. So, at
+ * least one of `def1` and `def2` cannot dominate `phi-read`; assume it is `def1`.
+ * Then `def1` must go through one of its dominance-frontier blocks in order to
+ * reach `phi-read`. However, such a block will always start with a (normal) phi
+ * node, which contradicts reachability.
+ *
+ * Also, like normal reads, the unique SSA definition `def` that reaches `phi-read`,
+ * will dominate `phi-read`. Assuming it doesn't means that the path from `def`
+ * to `phi-read` goes through a dominance-frontier block, and hence a phi node,
+ * which contradicts reachability.
+ */
+ pragma[nomagic]
+ predicate phiRead(BasicBlock bb, SourceVariable v) {
+ inReadDominanceFrontier(bb, v) and
+ liveAtEntry(bb, v) and
+ // only if there are no other references to `v` inside `bb`
+ not ref(bb, _, v, _) and
+ not exists(Definition def | def.definesAt(v, bb, _))
+ }
+
/**
* Holds if the `i`th node of basic block `bb` is a reference to `v`,
* either a read (when `k` is `SsaRead()`) or an SSA definition (when `k`
@@ -216,11 +300,16 @@ private module SsaDefReaches {
*
* Unlike `Liveness::ref`, this includes `phi` nodes.
*/
+ pragma[nomagic]
predicate ssaRef(BasicBlock bb, int i, SourceVariable v, SsaRefKind k) {
variableRead(bb, i, v, _) and
- k = SsaRead()
+ k = SsaActualRead()
or
- exists(Definition def | def.definesAt(v, bb, i)) and
+ phiRead(bb, v) and
+ i = -1 and
+ k = SsaPhiRead()
+ or
+ any(Definition def).definesAt(v, bb, i) and
k = SsaDef()
}
@@ -273,7 +362,7 @@ private module SsaDefReaches {
)
or
ssaDefReachesRank(bb, def, rnk - 1, v) and
- rnk = ssaRefRank(bb, _, v, SsaRead())
+ rnk = ssaRefRank(bb, _, v, any(SsaRead k))
}
/**
@@ -283,7 +372,7 @@ private module SsaDefReaches {
predicate ssaDefReachesReadWithinBlock(SourceVariable v, Definition def, BasicBlock bb, int i) {
exists(int rnk |
ssaDefReachesRank(bb, def, rnk, v) and
- rnk = ssaRefRank(bb, i, v, SsaRead())
+ rnk = ssaRefRank(bb, i, v, any(SsaRead k))
)
}
@@ -309,45 +398,94 @@ private module SsaDefReaches {
ssaDefRank(def, v, bb, i, _) = maxSsaRefRank(bb, v)
}
- predicate defOccursInBlock(Definition def, BasicBlock bb, SourceVariable v) {
- exists(ssaDefRank(def, v, bb, _, _))
+ predicate defOccursInBlock(Definition def, BasicBlock bb, SourceVariable v, SsaRefKind k) {
+ exists(ssaDefRank(def, v, bb, _, k))
}
pragma[noinline]
private predicate ssaDefReachesThroughBlock(Definition def, BasicBlock bb) {
ssaDefReachesEndOfBlock(bb, def, _) and
- not defOccursInBlock(_, bb, def.getSourceVariable())
+ not defOccursInBlock(_, bb, def.getSourceVariable(), _)
}
/**
* Holds if `def` is accessed in basic block `bb1` (either a read or a write),
- * `bb2` is a transitive successor of `bb1`, `def` is live at the end of `bb1`,
- * and the underlying variable for `def` is neither read nor written in any block
- * on the path between `bb1` and `bb2`.
+ * `bb2` is a transitive successor of `bb1`, `def` is live at the end of _some_
+ * predecessor of `bb2`, and the underlying variable for `def` is neither read
+ * nor written in any block on the path between `bb1` and `bb2`.
+ *
+ * Phi reads are considered as normal reads for this predicate.
*/
- predicate varBlockReaches(Definition def, BasicBlock bb1, BasicBlock bb2) {
- defOccursInBlock(def, bb1, _) and
+ pragma[nomagic]
+ private predicate varBlockReachesInclPhiRead(Definition def, BasicBlock bb1, BasicBlock bb2) {
+ defOccursInBlock(def, bb1, _, _) and
bb2 = getABasicBlockSuccessor(bb1)
or
exists(BasicBlock mid |
- varBlockReaches(def, bb1, mid) and
+ varBlockReachesInclPhiRead(def, bb1, mid) and
ssaDefReachesThroughBlock(def, mid) and
bb2 = getABasicBlockSuccessor(mid)
)
}
+ pragma[nomagic]
+ private predicate phiReadStep(Definition def, SourceVariable v, BasicBlock bb1, BasicBlock bb2) {
+ varBlockReachesInclPhiRead(def, bb1, bb2) and
+ defOccursInBlock(def, bb2, v, SsaPhiRead())
+ }
+
+ pragma[nomagic]
+ private predicate varBlockReachesExclPhiRead(Definition def, BasicBlock bb1, BasicBlock bb2) {
+ varBlockReachesInclPhiRead(pragma[only_bind_into](def), bb1, pragma[only_bind_into](bb2)) and
+ ssaRef(bb2, _, def.getSourceVariable(), [SsaActualRead().(TSsaRefKind), SsaDef()])
+ or
+ exists(BasicBlock mid |
+ varBlockReachesExclPhiRead(def, mid, bb2) and
+ phiReadStep(def, _, bb1, mid)
+ )
+ }
+
/**
* Holds if `def` is accessed in basic block `bb1` (either a read or a write),
- * `def` is read at index `i2` in basic block `bb2`, `bb2` is in a transitive
- * successor block of `bb1`, and `def` is neither read nor written in any block
- * on a path between `bb1` and `bb2`.
+ * the underlying variable `v` of `def` is accessed in basic block `bb2`
+ * (either a read or a write), `bb2` is a transitive successor of `bb1`, and
+ * `v` is neither read nor written in any block on the path between `bb1`
+ * and `bb2`.
*/
+ pragma[nomagic]
+ predicate varBlockReaches(Definition def, BasicBlock bb1, BasicBlock bb2) {
+ varBlockReachesExclPhiRead(def, bb1, bb2) and
+ not defOccursInBlock(def, bb1, _, SsaPhiRead())
+ }
+
+ pragma[nomagic]
predicate defAdjacentRead(Definition def, BasicBlock bb1, BasicBlock bb2, int i2) {
varBlockReaches(def, bb1, bb2) and
- ssaRefRank(bb2, i2, def.getSourceVariable(), SsaRead()) = 1
+ ssaRefRank(bb2, i2, def.getSourceVariable(), SsaActualRead()) = 1
+ }
+
+ /**
+ * Holds if `def` is accessed in basic block `bb` (either a read or a write),
+ * `bb1` can reach a transitive successor `bb2` where `def` is no longer live,
+ * and `v` is neither read nor written in any block on the path between `bb`
+ * and `bb2`.
+ */
+ pragma[nomagic]
+ predicate varBlockReachesExit(Definition def, BasicBlock bb) {
+ exists(BasicBlock bb2 | varBlockReachesInclPhiRead(def, bb, bb2) |
+ not defOccursInBlock(def, bb2, _, _) and
+ not ssaDefReachesEndOfBlock(bb2, def, _)
+ )
+ or
+ exists(BasicBlock mid |
+ varBlockReachesExit(def, mid) and
+ phiReadStep(def, _, bb, mid)
+ )
}
}
+predicate phiReadExposedForTesting = phiRead/2;
+
private import SsaDefReaches
pragma[nomagic]
@@ -365,7 +503,8 @@ predicate liveThrough(BasicBlock bb, SourceVariable v) {
*/
pragma[nomagic]
predicate ssaDefReachesEndOfBlock(BasicBlock bb, Definition def, SourceVariable v) {
- exists(int last | last = maxSsaRefRank(bb, v) |
+ exists(int last |
+ last = maxSsaRefRank(pragma[only_bind_into](bb), pragma[only_bind_into](v)) and
ssaDefReachesRank(bb, def, last, v) and
liveAtExit(bb, v)
)
@@ -405,7 +544,7 @@ pragma[nomagic]
predicate ssaDefReachesRead(SourceVariable v, Definition def, BasicBlock bb, int i) {
ssaDefReachesReadWithinBlock(v, def, bb, i)
or
- variableRead(bb, i, v, _) and
+ ssaRef(bb, i, v, any(SsaRead k)) and
ssaDefReachesEndOfBlock(getABasicBlockPredecessor(bb), def, v) and
not ssaDefReachesReadWithinBlock(v, _, bb, i)
}
@@ -421,7 +560,7 @@ pragma[nomagic]
predicate adjacentDefRead(Definition def, BasicBlock bb1, int i1, BasicBlock bb2, int i2) {
exists(int rnk |
rnk = ssaDefRank(def, _, bb1, i1, _) and
- rnk + 1 = ssaDefRank(def, _, bb1, i2, SsaRead()) and
+ rnk + 1 = ssaDefRank(def, _, bb1, i2, SsaActualRead()) and
variableRead(bb1, i2, _, _) and
bb2 = bb1
)
@@ -538,18 +677,15 @@ predicate lastRefRedefNoUncertainReads(Definition def, BasicBlock bb, int i, Def
*/
pragma[nomagic]
predicate lastRef(Definition def, BasicBlock bb, int i) {
+ // Can reach another definition
lastRefRedef(def, bb, i, _)
or
- lastSsaRef(def, _, bb, i) and
- (
+ exists(SourceVariable v | lastSsaRef(def, v, bb, i) |
// Can reach exit directly
bb instanceof ExitBasicBlock
or
// Can reach a block using one or more steps, where `def` is no longer live
- exists(BasicBlock bb2 | varBlockReaches(def, bb, bb2) |
- not defOccursInBlock(def, bb2, _) and
- not ssaDefReachesEndOfBlock(bb2, def, _)
- )
+ varBlockReachesExit(def, bb)
)
}
diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/IRConsistency.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/IRConsistency.qll
index 45b44b14a3c..01405b08e80 100644
--- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/IRConsistency.qll
+++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/IRConsistency.qll
@@ -22,7 +22,7 @@ module InstructionConsistency {
abstract Language::Location getLocation();
}
- private class PresentIRFunction extends OptionalIRFunction, TPresentIRFunction {
+ class PresentIRFunction extends OptionalIRFunction, TPresentIRFunction {
private IRFunction irFunc;
PresentIRFunction() { this = TPresentIRFunction(irFunc) }
@@ -37,6 +37,8 @@ module InstructionConsistency {
result =
min(Language::Location loc | loc = irFunc.getLocation() | loc order by loc.toString())
}
+
+ IRFunction getIRFunction() { result = irFunc }
}
private class MissingIRFunction extends OptionalIRFunction, TMissingIRFunction {
diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/AliasedSSA.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/AliasedSSA.qll
index 76a99026d59..0a3e0287635 100644
--- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/AliasedSSA.qll
+++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/AliasedSSA.qll
@@ -3,7 +3,7 @@ import semmle.code.cpp.ir.internal.Overlap
private import semmle.code.cpp.ir.internal.IRCppLanguage as Language
private import semmle.code.cpp.Print
private import semmle.code.cpp.ir.implementation.unaliased_ssa.IR
-private import semmle.code.cpp.ir.implementation.unaliased_ssa.internal.SSAConstruction as OldSSA
+private import semmle.code.cpp.ir.implementation.unaliased_ssa.internal.SSAConstruction as OldSsa
private import semmle.code.cpp.ir.internal.IntegerConstant as Ints
private import semmle.code.cpp.ir.internal.IntegerInterval as Interval
private import semmle.code.cpp.ir.implementation.internal.OperandTag
@@ -572,7 +572,7 @@ private Overlap getVariableMemoryLocationOverlap(
* Holds if the def/use information for the result of `instr` can be reused from the previous
* iteration of the IR.
*/
-predicate canReuseSsaForOldResult(Instruction instr) { OldSSA::canReuseSsaForMemoryResult(instr) }
+predicate canReuseSsaForOldResult(Instruction instr) { OldSsa::canReuseSsaForMemoryResult(instr) }
/** DEPRECATED: Alias for canReuseSsaForOldResult */
deprecated predicate canReuseSSAForOldResult = canReuseSsaForOldResult/1;
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 c1329b9b8f7..5539fab2dd4 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
@@ -5,10 +5,9 @@ private import Imports::OperandTag
private import Imports::Overlap
private import Imports::TInstruction
private import Imports::RawIR as RawIR
-private import SSAInstructions
-private import SSAOperands
+private import SsaInstructions
+private import SsaOperands
private import NewIR
-
import Cached
cached
diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/SSAConstructionInternal.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/SSAConstructionInternal.qll
index 2d5dccc773a..04484b09002 100644
--- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/SSAConstructionInternal.qll
+++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/SSAConstructionInternal.qll
@@ -2,10 +2,18 @@ import semmle.code.cpp.ir.implementation.unaliased_ssa.IR as OldIR
import semmle.code.cpp.ir.implementation.unaliased_ssa.internal.reachability.ReachableBlock as Reachability
import semmle.code.cpp.ir.implementation.unaliased_ssa.internal.reachability.Dominance as Dominance
import semmle.code.cpp.ir.implementation.aliased_ssa.IR as NewIR
-import semmle.code.cpp.ir.implementation.internal.TInstruction::AliasedSsaInstructions as SSAInstructions
+import semmle.code.cpp.ir.implementation.internal.TInstruction::AliasedSsaInstructions as SsaInstructions
+
+/** DEPRECATED: Alias for SsaInstructions */
+deprecated module SSAInstructions = SsaInstructions;
+
import semmle.code.cpp.ir.internal.IRCppLanguage as Language
import AliasedSSA as Alias
-import semmle.code.cpp.ir.implementation.internal.TOperand::AliasedSsaOperands as SSAOperands
+import semmle.code.cpp.ir.implementation.internal.TOperand::AliasedSsaOperands as SsaOperands
+
+/** DEPRECATED: Alias for SsaOperands */
+deprecated module SSAOperands = SsaOperands;
+
private import SideEffectElimination as Elim
predicate removedInstruction(Reachability::ReachableInstruction instr) {
diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/internal/TInstruction.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/internal/TInstruction.qll
index 6dd4bc0c1d3..36ec0b9875b 100644
--- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/internal/TInstruction.qll
+++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/internal/TInstruction.qll
@@ -29,16 +29,16 @@ newtype TInstruction =
UnaliasedSsa::SSA::hasUnreachedInstruction(irFunc)
} or
TAliasedSsaPhiInstruction(
- TRawInstruction blockStartInstr, AliasedSSA::SSA::MemoryLocation memoryLocation
+ TRawInstruction blockStartInstr, AliasedSsa::SSA::MemoryLocation memoryLocation
) {
- AliasedSSA::SSA::hasPhiInstruction(blockStartInstr, memoryLocation)
+ AliasedSsa::SSA::hasPhiInstruction(blockStartInstr, memoryLocation)
} or
TAliasedSsaChiInstruction(TRawInstruction primaryInstruction) {
- not AliasedSSA::removedInstruction(primaryInstruction) and
- AliasedSSA::SSA::hasChiInstruction(primaryInstruction)
+ not AliasedSsa::removedInstruction(primaryInstruction) and
+ AliasedSsa::SSA::hasChiInstruction(primaryInstruction)
} or
TAliasedSsaUnreachedInstruction(IRFunctionBase irFunc) {
- AliasedSSA::SSA::hasUnreachedInstruction(irFunc)
+ AliasedSsa::SSA::hasUnreachedInstruction(irFunc)
}
/**
@@ -84,7 +84,7 @@ module AliasedSsaInstructions {
class TPhiInstruction = TAliasedSsaPhiInstruction or TUnaliasedSsaPhiInstruction;
TPhiInstruction phiInstruction(
- TRawInstruction blockStartInstr, AliasedSSA::SSA::MemoryLocation memoryLocation
+ TRawInstruction blockStartInstr, AliasedSsa::SSA::MemoryLocation memoryLocation
) {
result = TAliasedSsaPhiInstruction(blockStartInstr, memoryLocation)
}
diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/internal/TInstructionInternal.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/internal/TInstructionInternal.qll
index be5a401c07b..5e143948270 100644
--- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/internal/TInstructionInternal.qll
+++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/internal/TInstructionInternal.qll
@@ -1,5 +1,9 @@
import semmle.code.cpp.ir.internal.IRCppLanguage as Language
import semmle.code.cpp.ir.implementation.raw.internal.IRConstruction as IRConstruction
import semmle.code.cpp.ir.implementation.unaliased_ssa.internal.SSAConstruction as UnaliasedSsa
-import semmle.code.cpp.ir.implementation.aliased_ssa.internal.SSAConstruction as AliasedSSA
+import semmle.code.cpp.ir.implementation.aliased_ssa.internal.SSAConstruction as AliasedSsa
+
+/** DEPRECATED: Alias for AliasedSsa */
+deprecated module AliasedSSA = AliasedSsa;
+
import semmle.code.cpp.ir.implementation.aliased_ssa.internal.SideEffectElimination as Elim
diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/IRConsistency.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/IRConsistency.qll
index 45b44b14a3c..01405b08e80 100644
--- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/IRConsistency.qll
+++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/IRConsistency.qll
@@ -22,7 +22,7 @@ module InstructionConsistency {
abstract Language::Location getLocation();
}
- private class PresentIRFunction extends OptionalIRFunction, TPresentIRFunction {
+ class PresentIRFunction extends OptionalIRFunction, TPresentIRFunction {
private IRFunction irFunc;
PresentIRFunction() { this = TPresentIRFunction(irFunc) }
@@ -37,6 +37,8 @@ module InstructionConsistency {
result =
min(Language::Location loc | loc = irFunc.getLocation() | loc order by loc.toString())
}
+
+ IRFunction getIRFunction() { result = irFunc }
}
private class MissingIRFunction extends OptionalIRFunction, TMissingIRFunction {
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 f91486833ff..56da47325ee 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
@@ -1450,8 +1450,6 @@ class TranslatedAssignExpr extends TranslatedNonConstantExpr {
result = this.getLeftOperand().getResult()
}
- abstract Instruction getStoredValue();
-
final TranslatedExpr getLeftOperand() {
result = getTranslatedExpr(expr.getLValue().getFullyConverted())
}
@@ -1493,6 +1491,75 @@ class TranslatedAssignExpr extends TranslatedNonConstantExpr {
}
}
+class TranslatedBlockAssignExpr extends TranslatedNonConstantExpr {
+ override BlockAssignExpr expr;
+
+ final override TranslatedElement getChild(int id) {
+ id = 0 and result = this.getLeftOperand()
+ or
+ id = 1 and result = this.getRightOperand()
+ }
+
+ final override Instruction getFirstInstruction() {
+ // The operand evaluation order should not matter since block assignments behave like memcpy.
+ result = this.getLeftOperand().getFirstInstruction()
+ }
+
+ final override Instruction getResult() { result = this.getInstruction(AssignmentStoreTag()) }
+
+ final TranslatedExpr getLeftOperand() {
+ result = getTranslatedExpr(expr.getLValue().getFullyConverted())
+ }
+
+ final TranslatedExpr getRightOperand() {
+ result = getTranslatedExpr(expr.getRValue().getFullyConverted())
+ }
+
+ override Instruction getInstructionSuccessor(InstructionTag tag, EdgeKind kind) {
+ tag = LoadTag() and
+ result = this.getInstruction(AssignmentStoreTag()) and
+ kind instanceof GotoEdge
+ or
+ tag = AssignmentStoreTag() and
+ result = this.getParent().getChildSuccessor(this) and
+ kind instanceof GotoEdge
+ }
+
+ override Instruction getChildSuccessor(TranslatedElement child) {
+ child = this.getLeftOperand() and
+ result = this.getRightOperand().getFirstInstruction()
+ or
+ child = this.getRightOperand() and
+ result = this.getInstruction(LoadTag())
+ }
+
+ override predicate hasInstruction(Opcode opcode, InstructionTag tag, CppType resultType) {
+ tag = LoadTag() and
+ opcode instanceof Opcode::Load and
+ resultType = getTypeForPRValue(expr.getRValue().getType())
+ or
+ tag = AssignmentStoreTag() and
+ opcode instanceof Opcode::Store and
+ // The frontend specifies that the relevant type is the one of the source.
+ resultType = getTypeForPRValue(expr.getRValue().getType())
+ }
+
+ override Instruction getInstructionRegisterOperand(InstructionTag tag, OperandTag operandTag) {
+ tag = LoadTag() and
+ operandTag instanceof AddressOperandTag and
+ result = this.getRightOperand().getResult()
+ or
+ tag = AssignmentStoreTag() and
+ (
+ operandTag instanceof AddressOperandTag and
+ result = this.getLeftOperand().getResult()
+ or
+ operandTag instanceof StoreValueOperandTag and
+ result = this.getInstruction(LoadTag())
+ )
+ }
+}
+
class TranslatedAssignOperation extends TranslatedNonConstantExpr {
override AssignOperation expr;
diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/IRConsistency.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/IRConsistency.qll
index 45b44b14a3c..01405b08e80 100644
--- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/IRConsistency.qll
+++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/IRConsistency.qll
@@ -22,7 +22,7 @@ module InstructionConsistency {
abstract Language::Location getLocation();
}
- private class PresentIRFunction extends OptionalIRFunction, TPresentIRFunction {
+ class PresentIRFunction extends OptionalIRFunction, TPresentIRFunction {
private IRFunction irFunc;
PresentIRFunction() { this = TPresentIRFunction(irFunc) }
@@ -37,6 +37,8 @@ module InstructionConsistency {
result =
min(Language::Location loc | loc = irFunc.getLocation() | loc order by loc.toString())
}
+
+ IRFunction getIRFunction() { result = irFunc }
}
private class MissingIRFunction extends OptionalIRFunction, TMissingIRFunction {
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 c1329b9b8f7..5539fab2dd4 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
@@ -5,10 +5,9 @@ private import Imports::OperandTag
private import Imports::Overlap
private import Imports::TInstruction
private import Imports::RawIR as RawIR
-private import SSAInstructions
-private import SSAOperands
+private import SsaInstructions
+private import SsaOperands
private import NewIR
-
import Cached
cached
diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/internal/SSAConstructionInternal.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/internal/SSAConstructionInternal.qll
index e0c4f494623..0cae9fd95ba 100644
--- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/internal/SSAConstructionInternal.qll
+++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/internal/SSAConstructionInternal.qll
@@ -3,13 +3,20 @@ import semmle.code.cpp.ir.implementation.raw.internal.reachability.ReachableBloc
import semmle.code.cpp.ir.implementation.raw.internal.reachability.Dominance as Dominance
import semmle.code.cpp.ir.implementation.unaliased_ssa.IR as NewIR
import semmle.code.cpp.ir.implementation.raw.internal.IRConstruction as RawStage
-import semmle.code.cpp.ir.implementation.internal.TInstruction::UnaliasedSsaInstructions as SSAInstructions
+import semmle.code.cpp.ir.implementation.internal.TInstruction::UnaliasedSsaInstructions as SsaInstructions
+
+/** DEPRECATED: Alias for SsaInstructions */
+deprecated module SSAInstructions = SsaInstructions;
+
import semmle.code.cpp.ir.internal.IRCppLanguage as Language
import SimpleSSA as Alias
-import semmle.code.cpp.ir.implementation.internal.TOperand::UnaliasedSsaOperands as SSAOperands
+import semmle.code.cpp.ir.implementation.internal.TOperand::UnaliasedSsaOperands as SsaOperands
+
+/** DEPRECATED: Alias for SsaOperands */
+deprecated module SSAOperands = SsaOperands;
predicate removedInstruction(Reachability::ReachableInstruction instr) { none() }
class OldBlock = Reachability::ReachableBlock;
-class OldInstruction = Reachability::ReachableInstruction;
\ No newline at end of file
+class OldInstruction = Reachability::ReachableInstruction;
diff --git a/cpp/ql/lib/semmle/code/cpp/models/implementations/StdPair.qll b/cpp/ql/lib/semmle/code/cpp/models/implementations/StdPair.qll
index c6fabcac314..28d05e5c306 100644
--- a/cpp/ql/lib/semmle/code/cpp/models/implementations/StdPair.qll
+++ b/cpp/ql/lib/semmle/code/cpp/models/implementations/StdPair.qll
@@ -11,12 +11,6 @@ private class StdPair extends ClassTemplateInstantiation {
StdPair() { this.hasQualifiedName(["std", "bsl"], "pair") }
}
-/**
- * DEPRECATED: This is now called `StdPair` and is a private part of the
- * library implementation.
- */
-deprecated class StdPairClass = StdPair;
-
/**
* Any of the single-parameter constructors of `std::pair` that takes a reference to an
* instantiation of `std::pair`. These constructors allow conversion between pair types when the
diff --git a/cpp/ql/lib/semmle/code/cpp/models/interfaces/FlowSource.qll b/cpp/ql/lib/semmle/code/cpp/models/interfaces/FlowSource.qll
index 6b0a257d6f9..e99836939ae 100644
--- a/cpp/ql/lib/semmle/code/cpp/models/interfaces/FlowSource.qll
+++ b/cpp/ql/lib/semmle/code/cpp/models/interfaces/FlowSource.qll
@@ -27,13 +27,6 @@ abstract class RemoteFlowSourceFunction extends Function {
predicate hasSocketInput(FunctionInput input) { none() }
}
-/**
- * DEPRECATED: Use `RemoteFlowSourceFunction` instead.
- *
- * A library function that returns data that may be read from a network connection.
- */
-deprecated class RemoteFlowFunction = RemoteFlowSourceFunction;
-
/**
* A library function that returns data that is directly controlled by a user.
*/
@@ -44,13 +37,6 @@ abstract class LocalFlowSourceFunction extends Function {
abstract predicate hasLocalFlowSource(FunctionOutput output, string description);
}
-/**
- * DEPRECATED: Use `LocalFlowSourceFunction` instead.
- *
- * A library function that returns data that is directly controlled by a user.
- */
-deprecated class LocalFlowFunction = LocalFlowSourceFunction;
-
/** A library function that sends data over a network connection. */
abstract class RemoteFlowSinkFunction extends Function {
/**
diff --git a/cpp/ql/lib/semmlecode.cpp.dbscheme b/cpp/ql/lib/semmlecode.cpp.dbscheme
index 34549c3b093..f96ad9b2da4 100644
--- a/cpp/ql/lib/semmlecode.cpp.dbscheme
+++ b/cpp/ql/lib/semmlecode.cpp.dbscheme
@@ -523,6 +523,11 @@ autoderivation(
int derivation_type: @type ref
);
+orphaned_variables(
+ int var: @localvariable ref,
+ int function: @function ref
+)
+
enumconstants(
unique int id: @enumconstant,
int parent: @usertype ref,
@@ -1302,7 +1307,7 @@ funbind(
@assign_op_expr = @assign_arith_expr | @assign_bitwise_expr
-@assign_expr = @assignexpr | @assign_op_expr
+@assign_expr = @assignexpr | @assign_op_expr | @blockassignexpr
/*
case @allocator.form of
@@ -1660,6 +1665,7 @@ case @expr.kind of
| 332 = @hasuniqueobjectrepresentations
| 333 = @builtinbitcast
| 334 = @builtinshuffle
+| 335 = @blockassignexpr
;
@var_args_expr = @vastartexpr
diff --git a/cpp/ql/lib/semmlecode.cpp.dbscheme.stats b/cpp/ql/lib/semmlecode.cpp.dbscheme.stats
index 6ab07086478..7fb9f2c2e4d 100644
--- a/cpp/ql/lib/semmlecode.cpp.dbscheme.stats
+++ b/cpp/ql/lib/semmlecode.cpp.dbscheme.stats
@@ -4,14 +4,14 @@
@compilation
9948
-
- @external_package
- 4
-
@externalDataElement
65
+
+ @external_package
+ 4
+
@svnentry
575525
@@ -20,6 +20,14 @@
@location_stmt
3813503
+
+ @location_expr
+ 13165921
+
+
+ @location_default
+ 29655056
+
@diagnostic
72092
@@ -32,14 +40,6 @@
@folder
15274
-
- @location_default
- 29655056
-
-
- @location_expr
- 13165921
-
@macroinvocation
33818017
@@ -52,6 +52,10 @@
@fun_decl
4995583
+
+ @var_decl
+ 8391080
+
@type_decl
3240440
@@ -68,10 +72,6 @@
@static_assert
130562
-
- @var_decl
- 8391080
-
@parameter
6536424
@@ -86,7 +86,7 @@
@localvariable
- 581169
+ 581177
@enumconstant
@@ -130,19 +130,19 @@
@gnuattribute
- 653549
+ 680858
@stdattribute
- 468565
+ 493039
@alignas
- 8794
+ 9719
@declspec
- 239199
+ 243695
@msattribute
@@ -150,7 +150,7 @@
@attribute_arg_token
- 24994
+ 38879
@attribute_arg_type
@@ -158,7 +158,7 @@
@attribute_arg_constant_expr
- 322609
+ 367506
@attribute_arg_empty
@@ -190,7 +190,7 @@
@namequalifier
- 1536058
+ 1533107
@value
@@ -198,176 +198,12 @@
@initialiser
- 1733596
+ 1699581
@lambdacapture
27771
-
- @stmt_expr
- 1483542
-
-
- @stmt_if
- 724702
-
-
- @stmt_while
- 30109
-
-
- @stmt_label
- 53054
-
-
- @stmt_return
- 1285345
-
-
- @stmt_block
- 1423276
-
-
- @stmt_end_test_while
- 148628
-
-
- @stmt_for
- 61453
-
-
- @stmt_switch_case
- 209699
-
-
- @stmt_switch
- 20747
-
-
- @stmt_try_block
- 46934
-
-
- @stmt_decl
- 606536
-
-
- @stmt_empty
- 193311
-
-
- @stmt_continue
- 22525
-
-
- @stmt_break
- 102345
-
-
- @stmt_range_based_for
- 8331
-
-
- @stmt_handler
- 65331
-
-
- @stmt_constexpr_if
- 52504
-
-
- @stmt_goto
- 110508
-
-
- @stmt_asm
- 109773
-
-
- @stmt_microsoft_try
- 163
-
-
- @stmt_set_vla_size
- 26
-
-
- @stmt_vla_decl
- 22
-
-
- @stmt_assigned_goto
- 9060
-
-
- @stmt_co_return
- 2
-
-
- @delete_array_expr
- 1406
-
-
- @new_array_expr
- 5104
-
-
- @ctordirectinit
- 112980
-
-
- @ctorvirtualinit
- 6512
-
-
- @ctorfieldinit
- 201086
-
-
- @ctordelegatinginit
- 3352
-
-
- @dtordirectdestruct
- 41776
-
-
- @dtorvirtualdestruct
- 4128
-
-
- @dtorfielddestruct
- 41706
-
-
- @static_cast
- 210928
-
-
- @reinterpret_cast
- 30749
-
-
- @const_cast
- 35247
-
-
- @dynamic_cast
- 1037
-
-
- @c_style_cast
- 4209396
-
-
- @lambdaexpr
- 21291
-
-
- @param_ref
- 244969
-
@errorexpr
46893
@@ -570,7 +406,7 @@
@subscriptexpr
- 367580
+ 367585
@callexpr
@@ -660,6 +496,70 @@
@aggregateliteral
913874
+
+ @delete_array_expr
+ 1406
+
+
+ @new_array_expr
+ 5104
+
+
+ @ctordirectinit
+ 112980
+
+
+ @ctorvirtualinit
+ 6512
+
+
+ @ctorfieldinit
+ 201086
+
+
+ @ctordelegatinginit
+ 3352
+
+
+ @dtordirectdestruct
+ 41776
+
+
+ @dtorvirtualdestruct
+ 4128
+
+
+ @dtorfielddestruct
+ 41706
+
+
+ @static_cast
+ 210928
+
+
+ @reinterpret_cast
+ 30749
+
+
+ @const_cast
+ 35247
+
+
+ @dynamic_cast
+ 1037
+
+
+ @c_style_cast
+ 4209396
+
+
+ @lambdaexpr
+ 21291
+
+
+ @param_ref
+ 244969
+
@istrivialexpr
925
@@ -980,6 +880,110 @@
@builtinshuffle
1959
+
+ @blockassignexpr
+ 12
+
+
+ @stmt_expr
+ 1483542
+
+
+ @stmt_if
+ 724702
+
+
+ @stmt_while
+ 30109
+
+
+ @stmt_label
+ 53054
+
+
+ @stmt_return
+ 1285345
+
+
+ @stmt_block
+ 1423276
+
+
+ @stmt_end_test_while
+ 148628
+
+
+ @stmt_for
+ 61453
+
+
+ @stmt_switch_case
+ 209699
+
+
+ @stmt_switch
+ 20747
+
+
+ @stmt_try_block
+ 46934
+
+
+ @stmt_decl
+ 606536
+
+
+ @stmt_empty
+ 193314
+
+
+ @stmt_continue
+ 22525
+
+
+ @stmt_break
+ 102345
+
+
+ @stmt_range_based_for
+ 8331
+
+
+ @stmt_handler
+ 65331
+
+
+ @stmt_constexpr_if
+ 52504
+
+
+ @stmt_goto
+ 110508
+
+
+ @stmt_asm
+ 109773
+
+
+ @stmt_microsoft_try
+ 163
+
+
+ @stmt_set_vla_size
+ 26
+
+
+ @stmt_vla_decl
+ 22
+
+
+ @stmt_assigned_goto
+ 9060
+
+
+ @stmt_co_return
+ 2
+
@ppd_if
661418
@@ -1026,7 +1030,7 @@
@ppd_line
- 27755
+ 27756
@ppd_error
@@ -1668,7 +1672,7 @@
seconds
- 14239
+ 10330
@@ -1749,35 +1753,35 @@
3
4
- 279
+ 678
4
5
- 717
+ 319
6
- 9
- 159
+ 8
+ 119
- 9
+ 8
10
- 79
+ 159
10
11
- 119
+ 79
11
- 12
+ 13
159
- 14
+ 15
18
159
@@ -1787,8 +1791,8 @@
159
- 24
- 124
+ 25
+ 92
159
@@ -1857,12 +1861,12 @@
3
4
- 598
+ 1396
4
5
- 1156
+ 358
5
@@ -1872,33 +1876,28 @@
6
7
- 319
+ 478
7
8
- 199
+ 39
8
9
- 159
+ 319
9
- 12
- 279
+ 24
+ 239
- 13
- 41
+ 25
+ 90
279
-
- 41
- 96
- 119
-
@@ -1943,18 +1942,23 @@
12
- 4
- 5
- 79
-
-
- 177
- 178
+ 3
+ 4
39
- 179
- 180
+ 4
+ 5
+ 39
+
+
+ 128
+ 129
+ 39
+
+
+ 133
+ 134
39
@@ -1971,22 +1975,27 @@
1
2
- 9373
+ 6062
2
3
- 3510
+ 2034
3
+ 4
+ 917
+
+
+ 4
5
- 1196
+ 797
5
- 46
- 159
+ 42
+ 518
@@ -2002,23 +2011,33 @@
1
2
- 8735
+ 5225
2
3
- 3589
+ 1874
3
4
- 1116
+ 1276
4
- 74
+ 5
+ 997
+
+
+ 5
+ 9
797
+
+ 9
+ 65
+ 159
+
@@ -2033,12 +2052,12 @@
1
2
- 14000
+ 10051
2
4
- 239
+ 279
@@ -2417,7 +2436,7 @@
cpu_seconds
- 7688
+ 7792
elapsed_seconds
@@ -2467,17 +2486,17 @@
1
2
- 6363
+ 6489
2
3
- 853
+ 922
3
- 15
- 472
+ 19
+ 380
@@ -2493,12 +2512,12 @@
1
2
- 7123
+ 7319
2
3
- 564
+ 472
@@ -2519,51 +2538,56 @@
2
3
- 34
+ 23
- 6
- 7
+ 3
+ 4
11
- 8
- 9
+ 7
+ 8
11
- 12
- 13
+ 10
+ 11
11
- 21
- 22
+ 11
+ 12
11
- 46
- 47
+ 26
+ 27
11
- 135
- 136
+ 51
+ 52
11
- 158
- 159
+ 160
+ 161
11
- 232
- 233
+ 172
+ 173
11
- 237
- 238
+ 198
+ 199
+ 11
+
+
+ 219
+ 220
11
@@ -2585,51 +2609,56 @@
2
3
- 34
+ 23
- 6
- 7
+ 3
+ 4
11
- 8
- 9
+ 7
+ 8
11
- 12
- 13
+ 10
+ 11
11
- 21
- 22
+ 11
+ 12
11
- 45
- 46
+ 24
+ 25
11
- 110
- 111
+ 49
+ 50
11
- 122
- 123
+ 115
+ 116
11
- 162
- 163
+ 140
+ 141
11
- 222
- 223
+ 155
+ 156
+ 11
+
+
+ 197
+ 198
11
@@ -12001,7 +12030,7 @@
2
3
- 543235
+ 543239
3
@@ -12036,7 +12065,7 @@
11
337
- 224493
+ 224489
339
@@ -13800,11 +13829,11 @@
member_function_this_type
- 554460
+ 553401
id
- 554460
+ 553401
this_type
@@ -13822,7 +13851,7 @@
1
2
- 554460
+ 553401
@@ -18082,11 +18111,11 @@
localvariables
- 581169
+ 581177
id
- 581169
+ 581177
type_id
@@ -18094,7 +18123,7 @@
name
- 91320
+ 91322
@@ -18108,7 +18137,7 @@
1
2
- 581169
+ 581177
@@ -18124,7 +18153,7 @@
1
2
- 581169
+ 581177
@@ -18145,7 +18174,7 @@
2
3
- 5408
+ 5412
3
@@ -18155,7 +18184,7 @@
4
7
- 3409
+ 3405
7
@@ -18181,7 +18210,7 @@
1
2
- 26970
+ 26975
2
@@ -18191,7 +18220,7 @@
3
5
- 2943
+ 2939
5
@@ -18217,12 +18246,12 @@
1
2
- 57518
+ 57519
2
3
- 14406
+ 14407
3
@@ -18253,7 +18282,7 @@
1
2
- 77144
+ 77145
2
@@ -18339,6 +18368,64 @@
+
+ orphaned_variables
+ 21805
+
+
+ var
+ 21805
+
+
+ function
+ 17536
+
+
+
+
+ var
+ function
+
+
+ 12
+
+
+ 1
+ 2
+ 21805
+
+
+
+
+
+
+ function
+ var
+
+
+ 12
+
+
+ 1
+ 2
+ 15772
+
+
+ 2
+ 3
+ 1587
+
+
+ 3
+ 47
+ 176
+
+
+
+
+
+
+
enumconstants
241273
@@ -21628,11 +21715,11 @@
mangled_name
- 5184427
+ 5182113
id
- 5184427
+ 5182113
mangled_name
@@ -21650,7 +21737,7 @@
1
2
- 5184427
+ 5182113
@@ -22605,11 +22692,11 @@
function_instantiation
- 907164
+ 907058
to
- 907164
+ 907058
from
@@ -22627,7 +22714,7 @@
1
2
- 907164
+ 907058
@@ -24568,11 +24655,11 @@
attributes
- 695736
+ 737258
id
- 695736
+ 737258
kind
@@ -24602,7 +24689,7 @@
1
2
- 695736
+ 737258
@@ -24618,7 +24705,7 @@
1
2
- 695736
+ 737258
@@ -24634,7 +24721,7 @@
1
2
- 695736
+ 737258
@@ -24650,7 +24737,7 @@
1
2
- 695736
+ 737258
@@ -24664,18 +24751,18 @@
12
- 4
- 5
+ 5
+ 6
104
- 2168
- 2169
+ 2330
+ 2331
104
- 4480
- 4481
+ 4714
+ 4715
104
@@ -24775,16 +24862,16 @@
4
5
- 209
+ 104
5
6
- 104
+ 209
- 9
- 10
+ 11
+ 12
104
@@ -24818,8 +24905,8 @@
104
- 659
- 660
+ 1053
+ 1054
104
@@ -24962,8 +25049,8 @@
104
- 6629
- 6630
+ 7026
+ 7027
104
@@ -25043,17 +25130,17 @@
1
2
- 442104
+ 425055
2
- 9
- 36815
+ 3
+ 37443
- 9
+ 3
201
- 4497
+ 20918
@@ -25116,11 +25203,11 @@
attribute_args
- 348066
+ 406848
id
- 348066
+ 406848
kind
@@ -25128,7 +25215,7 @@
attribute
- 267529
+ 295763
index
@@ -25150,7 +25237,7 @@
1
2
- 348066
+ 406848
@@ -25166,7 +25253,7 @@
1
2
- 348066
+ 406848
@@ -25182,7 +25269,7 @@
1
2
- 348066
+ 406848
@@ -25198,7 +25285,7 @@
1
2
- 348066
+ 406848
@@ -25217,13 +25304,13 @@
462
- 54
- 55
+ 84
+ 85
462
- 697
- 698
+ 794
+ 795
462
@@ -25243,13 +25330,13 @@
462
- 54
- 55
+ 84
+ 85
462
- 545
- 546
+ 606
+ 607
462
@@ -25313,17 +25400,17 @@
1
2
- 202730
+ 214301
2
3
- 49062
+ 51839
3
4
- 15737
+ 29622
@@ -25339,12 +25426,12 @@
1
2
- 257346
+ 271695
2
3
- 10182
+ 24068
@@ -25360,17 +25447,17 @@
1
2
- 202730
+ 214301
2
3
- 49062
+ 51839
3
4
- 15737
+ 29622
@@ -25386,17 +25473,17 @@
1
2
- 202730
+ 214301
2
3
- 49062
+ 51839
3
4
- 15737
+ 29622
@@ -25410,18 +25497,18 @@
12
- 34
- 35
+ 64
+ 65
462
- 140
- 141
+ 176
+ 177
462
- 578
- 579
+ 639
+ 640
462
@@ -25457,18 +25544,18 @@
12
- 34
- 35
+ 64
+ 65
462
- 140
- 141
+ 176
+ 177
462
- 578
- 579
+ 639
+ 640
462
@@ -25511,12 +25598,22 @@
1
2
- 311037
+ 276786
2
- 17
- 13885
+ 3
+ 23142
+
+
+ 3
+ 9
+ 24531
+
+
+ 17
+ 18
+ 462
@@ -25553,12 +25650,22 @@
1
2
- 311037
+ 276786
2
- 17
- 13885
+ 3
+ 23142
+
+
+ 3
+ 9
+ 24531
+
+
+ 17
+ 18
+ 462
@@ -25584,11 +25691,11 @@
attribute_arg_value
- 24994
+ 38879
arg
- 24994
+ 38879
value
@@ -25606,7 +25713,7 @@
1
2
- 24994
+ 38879
@@ -25626,7 +25733,7 @@
2
- 16
+ 34
1388
@@ -25786,7 +25893,7 @@
typeattributes
- 62440
+ 85973
type_id
@@ -25794,7 +25901,7 @@
spec_id
- 62440
+ 85973
@@ -25808,12 +25915,17 @@
1
2
- 61603
+ 55014
2
3
- 418
+ 5124
+
+
+ 3
+ 13
+ 1882
@@ -25829,7 +25941,7 @@
1
2
- 62440
+ 85973
@@ -25839,7 +25951,7 @@
funcattributes
- 629948
+ 647729
func_id
@@ -25847,7 +25959,7 @@
spec_id
- 629948
+ 647729
@@ -25861,12 +25973,12 @@
1
2
- 558408
+ 554120
2
7
- 33887
+ 38175
@@ -25882,7 +25994,7 @@
1
2
- 629948
+ 647729
@@ -25892,7 +26004,7 @@
varattributes
- 371048
+ 371880
var_id
@@ -25900,7 +26012,7 @@
spec_id
- 371048
+ 371880
@@ -25914,17 +26026,17 @@
1
2
- 273482
+ 273279
2
3
- 48762
+ 48804
- 14
- 15
- 3
+ 3
+ 62
+ 164
@@ -25940,7 +26052,7 @@
1
2
- 371048
+ 371880
@@ -28896,15 +29008,15 @@
namequalifiers
- 1536058
+ 1533107
id
- 1536058
+ 1533107
qualifiableelement
- 1536058
+ 1533107
qualifyingelement
@@ -28926,7 +29038,7 @@
1
2
- 1536058
+ 1533107
@@ -28942,7 +29054,7 @@
1
2
- 1536058
+ 1533107
@@ -28958,7 +29070,7 @@
1
2
- 1536058
+ 1533107
@@ -28974,7 +29086,7 @@
1
2
- 1536058
+ 1533107
@@ -28990,7 +29102,7 @@
1
2
- 1536058
+ 1533107
@@ -29006,7 +29118,7 @@
1
2
- 1536058
+ 1533107
@@ -29338,7 +29450,7 @@
fun
- 533842
+ 533823
@@ -29373,12 +29485,12 @@
1
2
- 329787
+ 329747
2
3
- 82184
+ 82204
3
@@ -30396,11 +30508,11 @@
initialisers
- 1733596
+ 1699581
init
- 1733596
+ 1699581
var
@@ -30408,7 +30520,7 @@
expr
- 1733596
+ 1699581
location
@@ -30426,7 +30538,7 @@
1
2
- 1733596
+ 1699581
@@ -30442,7 +30554,7 @@
1
2
- 1733596
+ 1699581
@@ -30458,7 +30570,7 @@
1
2
- 1733596
+ 1699581
@@ -30547,7 +30659,7 @@
1
2
- 1733596
+ 1699581
@@ -30563,7 +30675,7 @@
1
2
- 1733596
+ 1699581
@@ -30579,7 +30691,7 @@
1
2
- 1733596
+ 1699581
@@ -34778,11 +34890,11 @@
stmt_decl_bind
- 585099
+ 585107
stmt
- 544986
+ 544993
num
@@ -34790,7 +34902,7 @@
decl
- 584994
+ 585002
@@ -34804,12 +34916,12 @@
1
2
- 524125
+ 524132
2
19
- 20860
+ 20861
@@ -34825,12 +34937,12 @@
1
2
- 524125
+ 524132
2
19
- 20860
+ 20861
@@ -35028,7 +35140,7 @@
1
2
- 584956
+ 584964
2
@@ -35049,7 +35161,7 @@
1
2
- 584994
+ 585002
@@ -35059,11 +35171,11 @@
stmt_decl_entry_bind
- 527560
+ 527567
stmt
- 487748
+ 487755
num
@@ -35071,7 +35183,7 @@
decl_entry
- 527501
+ 527508
@@ -35085,7 +35197,7 @@
1
2
- 467152
+ 467158
2
@@ -35106,7 +35218,7 @@
1
2
- 467152
+ 467158
2
@@ -35309,7 +35421,7 @@
1
2
- 527480
+ 527487
3
@@ -35330,7 +35442,7 @@
1
2
- 527501
+ 527508
diff --git a/cpp/ql/lib/upgrades/34549c3b0937002f11037d01822ebe99442c1402/old.dbscheme b/cpp/ql/lib/upgrades/34549c3b0937002f11037d01822ebe99442c1402/old.dbscheme
new file mode 100644
index 00000000000..34549c3b093
--- /dev/null
+++ b/cpp/ql/lib/upgrades/34549c3b0937002f11037d01822ebe99442c1402/old.dbscheme
@@ -0,0 +1,2130 @@
+
+/**
+ * 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
+ */
+
+@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 @macroinvocations.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
+ | 2 = constructor
+ | 3 = destructor
+ | 4 = conversion
+ | 5 = operator
+ | 6 = builtin // GCC built-in functions, e.g. __builtin___memcpy_chk
+ ;
+*/
+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);
+
+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
+);
+
+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 = error
+ | 2 = unknown
+ | 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 = __int8 // Microsoft-specific
+ | 21 = __int16 // Microsoft-specific
+ | 22 = __int32 // Microsoft-specific
+ | 23 = __int64 // Microsoft-specific
+ | 24 = float
+ | 25 = double
+ | 26 = long_double
+ | 27 = _Complex_float // C99-specific
+ | 28 = _Complex_double // C99-specific
+ | 29 = _Complex_long double // C99-specific
+ | 30 = _Imaginary_float // C99-specific
+ | 31 = _Imaginary_double // C99-specific
+ | 32 = _Imaginary_long_double // C99-specific
+ | 33 = wchar_t // Microsoft-specific
+ | 34 = decltype_nullptr // C++11
+ | 35 = __int128
+ | 36 = unsigned___int128
+ | 37 = signed___int128
+ | 38 = __float128
+ | 39 = _Complex___float128
+ | 40 = _Decimal32
+ | 41 = _Decimal64
+ | 42 = _Decimal128
+ | 43 = char16_t
+ | 44 = char32_t
+ | 45 = _Float32
+ | 46 = _Float32x
+ | 47 = _Float64
+ | 48 = _Float64x
+ | 49 = _Float128
+ | 50 = _Float128x
+ | 51 = char8_t
+ ;
+*/
+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
+);
+
+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 EDG frontend. See symbol_ref.h there.
+ 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
+;
+
+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_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
+ | @assignpaddexpr
+ | @assignpsubexpr
+ ;
+
+@assign_op_expr = @assign_arith_expr | @assign_bitwise_expr
+
+@assign_expr = @assignexpr | @assign_op_expr
+
+/*
+ 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 // EDG 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
+;
+
+@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
+ | @isstandardlayoutexpr
+ | @istriviallycopyableexpr
+ | @isliteraltypeexpr
+ | @hastrivialmoveconstructorexpr
+ | @hastrivialmoveassignexpr
+ | @hasnothrowmoveassignexpr
+ | @isconstructibleexpr
+ | @isnothrowconstructibleexpr
+ | @hasfinalizerexpr
+ | @isdelegateexpr
+ | @isinterfaceclassexpr
+ | @isrefarrayexpr
+ | @isrefclassexpr
+ | @issealedexpr
+ | @issimplevalueclassexpr
+ | @isvalueclassexpr
+ | @isfinalexpr
+ | @builtinchooseexpr
+ | @builtincomplex
+ | @isassignable
+ | @isaggregate
+ | @hasuniqueobjectrepresentations
+ | @builtinbitcast
+ | @builtinshuffle
+ ;
+
+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.
+ */
+#keyset[aggregate, field]
+aggregate_field_init(
+ int aggregate: @aggregateliteral ref,
+ int initializer: @expr ref,
+ int field: @membervariable ref
+);
+
+/**
+ * The index of the element being initialized by an initializer expression
+ * within an aggregate initializer for an array.
+ */
+#keyset[aggregate, element_index]
+aggregate_array_init(
+ int aggregate: @aggregateliteral ref,
+ int initializer: @expr ref,
+ int element_index: 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(
+ unique 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/34549c3b0937002f11037d01822ebe99442c1402/semmlecode.cpp.dbscheme b/cpp/ql/lib/upgrades/34549c3b0937002f11037d01822ebe99442c1402/semmlecode.cpp.dbscheme
new file mode 100644
index 00000000000..73af5058c68
--- /dev/null
+++ b/cpp/ql/lib/upgrades/34549c3b0937002f11037d01822ebe99442c1402/semmlecode.cpp.dbscheme
@@ -0,0 +1,2131 @@
+
+/**
+ * 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
+ */
+
+@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 @macroinvocations.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
+ | 2 = constructor
+ | 3 = destructor
+ | 4 = conversion
+ | 5 = operator
+ | 6 = builtin // GCC built-in functions, e.g. __builtin___memcpy_chk
+ ;
+*/
+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);
+
+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
+);
+
+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 = error
+ | 2 = unknown
+ | 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 = __int8 // Microsoft-specific
+ | 21 = __int16 // Microsoft-specific
+ | 22 = __int32 // Microsoft-specific
+ | 23 = __int64 // Microsoft-specific
+ | 24 = float
+ | 25 = double
+ | 26 = long_double
+ | 27 = _Complex_float // C99-specific
+ | 28 = _Complex_double // C99-specific
+ | 29 = _Complex_long double // C99-specific
+ | 30 = _Imaginary_float // C99-specific
+ | 31 = _Imaginary_double // C99-specific
+ | 32 = _Imaginary_long_double // C99-specific
+ | 33 = wchar_t // Microsoft-specific
+ | 34 = decltype_nullptr // C++11
+ | 35 = __int128
+ | 36 = unsigned___int128
+ | 37 = signed___int128
+ | 38 = __float128
+ | 39 = _Complex___float128
+ | 40 = _Decimal32
+ | 41 = _Decimal64
+ | 42 = _Decimal128
+ | 43 = char16_t
+ | 44 = char32_t
+ | 45 = _Float32
+ | 46 = _Float32x
+ | 47 = _Float64
+ | 48 = _Float64x
+ | 49 = _Float128
+ | 50 = _Float128x
+ | 51 = char8_t
+ ;
+*/
+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
+);
+
+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 EDG frontend. See symbol_ref.h there.
+ 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
+;
+
+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_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
+ | @assignpaddexpr
+ | @assignpsubexpr
+ ;
+
+@assign_op_expr = @assign_arith_expr | @assign_bitwise_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 // EDG 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
+;
+
+@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
+ | @isstandardlayoutexpr
+ | @istriviallycopyableexpr
+ | @isliteraltypeexpr
+ | @hastrivialmoveconstructorexpr
+ | @hastrivialmoveassignexpr
+ | @hasnothrowmoveassignexpr
+ | @isconstructibleexpr
+ | @isnothrowconstructibleexpr
+ | @hasfinalizerexpr
+ | @isdelegateexpr
+ | @isinterfaceclassexpr
+ | @isrefarrayexpr
+ | @isrefclassexpr
+ | @issealedexpr
+ | @issimplevalueclassexpr
+ | @isvalueclassexpr
+ | @isfinalexpr
+ | @builtinchooseexpr
+ | @builtincomplex
+ | @isassignable
+ | @isaggregate
+ | @hasuniqueobjectrepresentations
+ | @builtinbitcast
+ | @builtinshuffle
+ ;
+
+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.
+ */
+#keyset[aggregate, field]
+aggregate_field_init(
+ int aggregate: @aggregateliteral ref,
+ int initializer: @expr ref,
+ int field: @membervariable ref
+);
+
+/**
+ * The index of the element being initialized by an initializer expression
+ * within an aggregate initializer for an array.
+ */
+#keyset[aggregate, element_index]
+aggregate_array_init(
+ int aggregate: @aggregateliteral ref,
+ int initializer: @expr ref,
+ int element_index: 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(
+ unique 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/34549c3b0937002f11037d01822ebe99442c1402/upgrade.properties b/cpp/ql/lib/upgrades/34549c3b0937002f11037d01822ebe99442c1402/upgrade.properties
new file mode 100644
index 00000000000..a83e07fb1fa
--- /dev/null
+++ b/cpp/ql/lib/upgrades/34549c3b0937002f11037d01822ebe99442c1402/upgrade.properties
@@ -0,0 +1,2 @@
+description: Support block assignment
+compatibility: backwards
diff --git a/cpp/ql/lib/upgrades/73af5058c6899dcdb05754c27ca966aeb3a68c94/old.dbscheme b/cpp/ql/lib/upgrades/73af5058c6899dcdb05754c27ca966aeb3a68c94/old.dbscheme
new file mode 100644
index 00000000000..73af5058c68
--- /dev/null
+++ b/cpp/ql/lib/upgrades/73af5058c6899dcdb05754c27ca966aeb3a68c94/old.dbscheme
@@ -0,0 +1,2131 @@
+
+/**
+ * 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
+ */
+
+@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 @macroinvocations.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
+ | 2 = constructor
+ | 3 = destructor
+ | 4 = conversion
+ | 5 = operator
+ | 6 = builtin // GCC built-in functions, e.g. __builtin___memcpy_chk
+ ;
+*/
+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);
+
+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
+);
+
+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 = error
+ | 2 = unknown
+ | 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 = __int8 // Microsoft-specific
+ | 21 = __int16 // Microsoft-specific
+ | 22 = __int32 // Microsoft-specific
+ | 23 = __int64 // Microsoft-specific
+ | 24 = float
+ | 25 = double
+ | 26 = long_double
+ | 27 = _Complex_float // C99-specific
+ | 28 = _Complex_double // C99-specific
+ | 29 = _Complex_long double // C99-specific
+ | 30 = _Imaginary_float // C99-specific
+ | 31 = _Imaginary_double // C99-specific
+ | 32 = _Imaginary_long_double // C99-specific
+ | 33 = wchar_t // Microsoft-specific
+ | 34 = decltype_nullptr // C++11
+ | 35 = __int128
+ | 36 = unsigned___int128
+ | 37 = signed___int128
+ | 38 = __float128
+ | 39 = _Complex___float128
+ | 40 = _Decimal32
+ | 41 = _Decimal64
+ | 42 = _Decimal128
+ | 43 = char16_t
+ | 44 = char32_t
+ | 45 = _Float32
+ | 46 = _Float32x
+ | 47 = _Float64
+ | 48 = _Float64x
+ | 49 = _Float128
+ | 50 = _Float128x
+ | 51 = char8_t
+ ;
+*/
+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
+);
+
+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 EDG frontend. See symbol_ref.h there.
+ 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
+;
+
+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_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
+ | @assignpaddexpr
+ | @assignpsubexpr
+ ;
+
+@assign_op_expr = @assign_arith_expr | @assign_bitwise_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 // EDG 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
+;
+
+@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
+ | @isstandardlayoutexpr
+ | @istriviallycopyableexpr
+ | @isliteraltypeexpr
+ | @hastrivialmoveconstructorexpr
+ | @hastrivialmoveassignexpr
+ | @hasnothrowmoveassignexpr
+ | @isconstructibleexpr
+ | @isnothrowconstructibleexpr
+ | @hasfinalizerexpr
+ | @isdelegateexpr
+ | @isinterfaceclassexpr
+ | @isrefarrayexpr
+ | @isrefclassexpr
+ | @issealedexpr
+ | @issimplevalueclassexpr
+ | @isvalueclassexpr
+ | @isfinalexpr
+ | @builtinchooseexpr
+ | @builtincomplex
+ | @isassignable
+ | @isaggregate
+ | @hasuniqueobjectrepresentations
+ | @builtinbitcast
+ | @builtinshuffle
+ ;
+
+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.
+ */
+#keyset[aggregate, field]
+aggregate_field_init(
+ int aggregate: @aggregateliteral ref,
+ int initializer: @expr ref,
+ int field: @membervariable ref
+);
+
+/**
+ * The index of the element being initialized by an initializer expression
+ * within an aggregate initializer for an array.
+ */
+#keyset[aggregate, element_index]
+aggregate_array_init(
+ int aggregate: @aggregateliteral ref,
+ int initializer: @expr ref,
+ int element_index: 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(
+ unique 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/73af5058c6899dcdb05754c27ca966aeb3a68c94/semmlecode.cpp.dbscheme b/cpp/ql/lib/upgrades/73af5058c6899dcdb05754c27ca966aeb3a68c94/semmlecode.cpp.dbscheme
new file mode 100644
index 00000000000..f96ad9b2da4
--- /dev/null
+++ b/cpp/ql/lib/upgrades/73af5058c6899dcdb05754c27ca966aeb3a68c94/semmlecode.cpp.dbscheme
@@ -0,0 +1,2136 @@
+
+/**
+ * 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
+ */
+
+@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 @macroinvocations.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
+ | 2 = constructor
+ | 3 = destructor
+ | 4 = conversion
+ | 5 = operator
+ | 6 = builtin // GCC built-in functions, e.g. __builtin___memcpy_chk
+ ;
+*/
+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);
+
+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 = error
+ | 2 = unknown
+ | 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 = __int8 // Microsoft-specific
+ | 21 = __int16 // Microsoft-specific
+ | 22 = __int32 // Microsoft-specific
+ | 23 = __int64 // Microsoft-specific
+ | 24 = float
+ | 25 = double
+ | 26 = long_double
+ | 27 = _Complex_float // C99-specific
+ | 28 = _Complex_double // C99-specific
+ | 29 = _Complex_long double // C99-specific
+ | 30 = _Imaginary_float // C99-specific
+ | 31 = _Imaginary_double // C99-specific
+ | 32 = _Imaginary_long_double // C99-specific
+ | 33 = wchar_t // Microsoft-specific
+ | 34 = decltype_nullptr // C++11
+ | 35 = __int128
+ | 36 = unsigned___int128
+ | 37 = signed___int128
+ | 38 = __float128
+ | 39 = _Complex___float128
+ | 40 = _Decimal32
+ | 41 = _Decimal64
+ | 42 = _Decimal128
+ | 43 = char16_t
+ | 44 = char32_t
+ | 45 = _Float32
+ | 46 = _Float32x
+ | 47 = _Float64
+ | 48 = _Float64x
+ | 49 = _Float128
+ | 50 = _Float128x
+ | 51 = char8_t
+ ;
+*/
+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
+);
+
+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 EDG frontend. See symbol_ref.h there.
+ 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
+;
+
+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_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
+ | @assignpaddexpr
+ | @assignpsubexpr
+ ;
+
+@assign_op_expr = @assign_arith_expr | @assign_bitwise_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 // EDG 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
+;
+
+@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
+ | @isstandardlayoutexpr
+ | @istriviallycopyableexpr
+ | @isliteraltypeexpr
+ | @hastrivialmoveconstructorexpr
+ | @hastrivialmoveassignexpr
+ | @hasnothrowmoveassignexpr
+ | @isconstructibleexpr
+ | @isnothrowconstructibleexpr
+ | @hasfinalizerexpr
+ | @isdelegateexpr
+ | @isinterfaceclassexpr
+ | @isrefarrayexpr
+ | @isrefclassexpr
+ | @issealedexpr
+ | @issimplevalueclassexpr
+ | @isvalueclassexpr
+ | @isfinalexpr
+ | @builtinchooseexpr
+ | @builtincomplex
+ | @isassignable
+ | @isaggregate
+ | @hasuniqueobjectrepresentations
+ | @builtinbitcast
+ | @builtinshuffle
+ ;
+
+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.
+ */
+#keyset[aggregate, field]
+aggregate_field_init(
+ int aggregate: @aggregateliteral ref,
+ int initializer: @expr ref,
+ int field: @membervariable ref
+);
+
+/**
+ * The index of the element being initialized by an initializer expression
+ * within an aggregate initializer for an array.
+ */
+#keyset[aggregate, element_index]
+aggregate_array_init(
+ int aggregate: @aggregateliteral ref,
+ int initializer: @expr ref,
+ int element_index: 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(
+ unique 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/73af5058c6899dcdb05754c27ca966aeb3a68c94/upgrade.properties b/cpp/ql/lib/upgrades/73af5058c6899dcdb05754c27ca966aeb3a68c94/upgrade.properties
new file mode 100644
index 00000000000..137cd99e154
--- /dev/null
+++ b/cpp/ql/lib/upgrades/73af5058c6899dcdb05754c27ca966aeb3a68c94/upgrade.properties
@@ -0,0 +1,2 @@
+description: Add relation for orphaned local variables
+compatibility: partial
diff --git a/cpp/ql/src/Best Practices/BlockWithTooManyStatements.ql b/cpp/ql/src/Best Practices/BlockWithTooManyStatements.ql
index 97481bc8b03..be175660bd9 100644
--- a/cpp/ql/src/Best Practices/BlockWithTooManyStatements.ql
+++ b/cpp/ql/src/Best Practices/BlockWithTooManyStatements.ql
@@ -29,7 +29,4 @@ where
n = strictcount(ComplexStmt s | s = b.getAStmt()) and
n > 3 and
complexStmt = b.getAStmt()
-select b,
- "Block with too many statements (" + n.toString() +
- " complex statements in the block). Complex statements at: $@", complexStmt,
- complexStmt.toString()
+select b, "Block with too many statements (" + n.toString() + " complex statements in the block)."
diff --git a/cpp/ql/src/Best Practices/Likely Errors/EmptyBlock.ql b/cpp/ql/src/Best Practices/Likely Errors/EmptyBlock.ql
index 6e434c85c95..055fbf29f7c 100644
--- a/cpp/ql/src/Best Practices/Likely Errors/EmptyBlock.ql
+++ b/cpp/ql/src/Best Practices/Likely Errors/EmptyBlock.ql
@@ -110,4 +110,4 @@ where
emptyBlock(s, eb) and
not emptyBlockContainsNonchild(eb) and
not lineComment(eb)
-select eb, "Empty block without comment"
+select eb, "Empty block without comment."
diff --git a/cpp/ql/src/CHANGELOG.md b/cpp/ql/src/CHANGELOG.md
index ae7e4f7151b..773bb1be347 100644
--- a/cpp/ql/src/CHANGELOG.md
+++ b/cpp/ql/src/CHANGELOG.md
@@ -1,3 +1,9 @@
+## 0.3.2
+
+### Minor Analysis Improvements
+
+* The query `cpp/bad-strncpy-size` now covers more `strncpy`-like functions than before, including `strxfrm`(`_l`), `wcsxfrm`(`_l`), and `stpncpy`. Users of this query may see an increase in results.
+
## 0.3.1
## 0.3.0
diff --git a/cpp/ql/src/Documentation/CommentedOutCode.ql b/cpp/ql/src/Documentation/CommentedOutCode.ql
index 89411738178..1fe70ac4c94 100644
--- a/cpp/ql/src/Documentation/CommentedOutCode.ql
+++ b/cpp/ql/src/Documentation/CommentedOutCode.ql
@@ -12,4 +12,4 @@
import CommentedOutCode
from CommentedOutCode comment
-select comment, "This comment appears to contain commented-out code"
+select comment, "This comment appears to contain commented-out code."
diff --git a/cpp/ql/src/Likely Bugs/Arithmetic/BitwiseSignCheck.ql b/cpp/ql/src/Likely Bugs/Arithmetic/BitwiseSignCheck.ql
index fe1b2640058..dd27e4b7aee 100644
--- a/cpp/ql/src/Likely Bugs/Arithmetic/BitwiseSignCheck.ql
+++ b/cpp/ql/src/Likely Bugs/Arithmetic/BitwiseSignCheck.ql
@@ -1,7 +1,6 @@
/**
* @name Sign check of bitwise operation
- * @description Checking the sign of a bitwise operation often has surprising
- * edge cases.
+ * @description Checking the sign of the result of a bitwise operation may yield unexpected results.
* @kind problem
* @problem.severity warning
* @precision high
@@ -26,4 +25,4 @@ where
forall(int op | op = lhs.(BitwiseAndExpr).getAnOperand().getValue().toInt() | op < 0) and
// exception for cases involving macros
not e.isAffectedByMacro()
-select e, "Potential unsafe sign check of a bitwise operation."
+select e, "Potentially unsafe sign check of a bitwise operation."
diff --git a/cpp/ql/src/Likely Bugs/Arithmetic/FloatComparison.ql b/cpp/ql/src/Likely Bugs/Arithmetic/FloatComparison.ql
index 5233f567fa5..5a2180bfaf3 100644
--- a/cpp/ql/src/Likely Bugs/Arithmetic/FloatComparison.ql
+++ b/cpp/ql/src/Likely Bugs/Arithmetic/FloatComparison.ql
@@ -21,4 +21,4 @@ where
FloatingPointType and
not ro.getAnOperand().isConstant() and // comparisons to constants generate too many false positives
not left.(VariableAccess).getTarget() = right.(VariableAccess).getTarget() // skip self comparison
-select ro, "Equality test on floating point values may not behave as expected."
+select ro, "Equality checks on floating point values can yield unexpected results."
diff --git a/cpp/ql/src/Likely Bugs/Likely Typos/MissingEnumCaseInSwitch.ql b/cpp/ql/src/Likely Bugs/Likely Typos/MissingEnumCaseInSwitch.ql
index 554937127c0..86e419f22ac 100644
--- a/cpp/ql/src/Likely Bugs/Likely Typos/MissingEnumCaseInSwitch.ql
+++ b/cpp/ql/src/Likely Bugs/Likely Typos/MissingEnumCaseInSwitch.ql
@@ -13,10 +13,11 @@
import cpp
-from EnumSwitch es, float missing, float total
+from EnumSwitch es, float missing, float total, EnumConstant case
where
not es.hasDefaultCase() and
missing = count(es.getAMissingCase()) and
total = missing + count(es.getASwitchCase()) and
- missing / total < 0.3
-select es, "Switch statement is missing case for " + es.getAMissingCase().getName()
+ missing / total < 0.3 and
+ case = es.getAMissingCase()
+select es, "Switch statement does not have a case for $@.", case, case.getName()
diff --git a/cpp/ql/src/Likely Bugs/Memory Management/UsingExpiredStackAddress.ql b/cpp/ql/src/Likely Bugs/Memory Management/UsingExpiredStackAddress.ql
index 3f3997315d4..663f2e990b5 100644
--- a/cpp/ql/src/Likely Bugs/Memory Management/UsingExpiredStackAddress.ql
+++ b/cpp/ql/src/Likely Bugs/Memory Management/UsingExpiredStackAddress.ql
@@ -106,6 +106,26 @@ predicate inheritanceConversionTypes(
toType = convert.getResultType()
}
+private signature class ConversionInstruction extends UnaryInstruction;
+
+module Conversion {
+ signature predicate hasTypes(I instr, Type fromType, Type toType);
+
+ module Using {
+ pragma[nomagic]
+ predicate hasOperandAndTypes(I convert, Instruction unary, Type fromType, Type toType) {
+ project(convert, fromType, toType) and
+ unary = convert.getUnary()
+ }
+ }
+}
+
+pragma[nomagic]
+predicate hasObjectAndField(FieldAddressInstruction fai, Instruction object, Field f) {
+ fai.getObjectAddress() = object and
+ fai.getField() = f
+}
+
/** Gets the HashCons value of an address computed by `instr`, if any. */
TGlobalAddress globalAddress(Instruction instr) {
result = TGlobalVariable(instr.(VariableAddressInstruction).getAstVariable())
@@ -117,25 +137,27 @@ TGlobalAddress globalAddress(Instruction instr) {
result = TLoad(globalAddress(load.getSourceAddress()))
)
or
- exists(ConvertInstruction convert, Type fromType, Type toType | instr = convert |
- uncheckedConversionTypes(convert, fromType, toType) and
- result = TConversion("unchecked", globalAddress(convert.getUnary()), fromType, toType)
+ exists(Type fromType, Type toType, Instruction unary |
+ Conversion::Using::hasOperandAndTypes(instr,
+ unary, fromType, toType) and
+ result = TConversion("unchecked", globalAddress(unary), fromType, toType)
)
or
- exists(CheckedConvertOrNullInstruction convert, Type fromType, Type toType | instr = convert |
- checkedConversionTypes(convert, fromType, toType) and
- result = TConversion("checked", globalAddress(convert.getUnary()), fromType, toType)
+ exists(Type fromType, Type toType, Instruction unary |
+ Conversion::Using::hasOperandAndTypes(instr,
+ unary, fromType, toType) and
+ result = TConversion("checked", globalAddress(unary), fromType, toType)
)
or
- exists(InheritanceConversionInstruction convert, Type fromType, Type toType | instr = convert |
- inheritanceConversionTypes(convert, fromType, toType) and
- result = TConversion("inheritance", globalAddress(convert.getUnary()), fromType, toType)
+ exists(Type fromType, Type toType, Instruction unary |
+ Conversion::Using::hasOperandAndTypes(instr,
+ unary, fromType, toType) and
+ result = TConversion("inheritance", globalAddress(unary), fromType, toType)
)
or
- exists(FieldAddressInstruction fai | instr = fai |
- result =
- TFieldAddress(globalAddress(pragma[only_bind_into](fai.getObjectAddress())),
- pragma[only_bind_out](fai.getField()))
+ exists(FieldAddressInstruction fai, Instruction object, Field f | instr = fai |
+ hasObjectAndField(fai, object, f) and
+ result = TFieldAddress(globalAddress(object), f)
)
or
result = globalAddress(instr.(PointerOffsetInstruction).getLeft())
@@ -268,7 +290,11 @@ class PathElement extends TPathElement {
predicate isSink(IRBlock block) { exists(this.asSink(block)) }
string toString() {
- result = [asStore().toString(), asCall(_).toString(), asMid().toString(), asSink(_).toString()]
+ result =
+ [
+ this.asStore().toString(), this.asCall(_).toString(), this.asMid().toString(),
+ this.asSink(_).toString()
+ ]
}
predicate hasLocationInfo(
diff --git a/cpp/ql/src/Likely Bugs/OO/NonVirtualDestructorInBaseClass.qhelp b/cpp/ql/src/Likely Bugs/OO/NonVirtualDestructorInBaseClass.qhelp
index 9b5552e93fe..aa2b1dcfa65 100644
--- a/cpp/ql/src/Likely Bugs/OO/NonVirtualDestructorInBaseClass.qhelp
+++ b/cpp/ql/src/Likely Bugs/OO/NonVirtualDestructorInBaseClass.qhelp
@@ -30,7 +30,7 @@ Make sure that all classes with virtual functions also have a virtual destructor
S. Meyers. Effective C++ 3d ed. pp 40-44. Addison-Wesley Professional, 2005.
- When should your destructor be virtual?
+ When should your destructor be virtual?
diff --git a/cpp/ql/src/Metrics/Internal/IRConsistency.ql b/cpp/ql/src/Metrics/Internal/IRConsistency.ql
index 5f45d15b8e2..e90c158fe94 100644
--- a/cpp/ql/src/Metrics/Internal/IRConsistency.ql
+++ b/cpp/ql/src/Metrics/Internal/IRConsistency.ql
@@ -10,6 +10,12 @@ import cpp
import semmle.code.cpp.ir.implementation.aliased_ssa.IR
import semmle.code.cpp.ir.implementation.aliased_ssa.IRConsistency as IRConsistency
+class PresentIRFunction extends IRConsistency::PresentIRFunction {
+ override string toString() {
+ result = min(string name | name = this.getIRFunction().getFunction().getQualifiedName() | name)
+ }
+}
+
select count(Instruction i | IRConsistency::missingOperand(i, _, _, _) | i) as missingOperand,
count(Instruction i | IRConsistency::unexpectedOperand(i, _, _, _) | i) as unexpectedOperand,
count(Instruction i | IRConsistency::duplicateOperand(i, _, _, _) | i) as duplicateOperand,
diff --git a/cpp/ql/src/Security/CWE/CWE-020/ExternalAPIs.qll b/cpp/ql/src/Security/CWE/CWE-020/ExternalAPIs.qll
index 0636dcbe11b..de7d043ad59 100644
--- a/cpp/ql/src/Security/CWE/CWE-020/ExternalAPIs.qll
+++ b/cpp/ql/src/Security/CWE/CWE-020/ExternalAPIs.qll
@@ -21,7 +21,9 @@ class UntrustedExternalApiDataNode extends ExternalApiDataNode {
/** DEPRECATED: Alias for UntrustedExternalApiDataNode */
deprecated class UntrustedExternalAPIDataNode = UntrustedExternalApiDataNode;
+/** An external API which is used with untrusted data. */
private newtype TExternalApi =
+ /** An untrusted API method `m` where untrusted data is passed at `index`. */
TExternalApiParameter(Function f, int index) {
exists(UntrustedExternalApiDataNode n |
f = n.getExternalFunction() and
diff --git a/cpp/ql/src/Security/CWE/CWE-020/ir/ExternalAPIs.qll b/cpp/ql/src/Security/CWE/CWE-020/ir/ExternalAPIs.qll
index 0636dcbe11b..de7d043ad59 100644
--- a/cpp/ql/src/Security/CWE/CWE-020/ir/ExternalAPIs.qll
+++ b/cpp/ql/src/Security/CWE/CWE-020/ir/ExternalAPIs.qll
@@ -21,7 +21,9 @@ class UntrustedExternalApiDataNode extends ExternalApiDataNode {
/** DEPRECATED: Alias for UntrustedExternalApiDataNode */
deprecated class UntrustedExternalAPIDataNode = UntrustedExternalApiDataNode;
+/** An external API which is used with untrusted data. */
private newtype TExternalApi =
+ /** An untrusted API method `m` where untrusted data is passed at `index`. */
TExternalApiParameter(Function f, int index) {
exists(UntrustedExternalApiDataNode n |
f = n.getExternalFunction() and
diff --git a/cpp/ql/src/Security/CWE/CWE-078/ExecTainted.ql b/cpp/ql/src/Security/CWE/CWE-078/ExecTainted.ql
index 7a3877f638c..e50c5df03fa 100644
--- a/cpp/ql/src/Security/CWE/CWE-078/ExecTainted.ql
+++ b/cpp/ql/src/Security/CWE/CWE-078/ExecTainted.ql
@@ -19,6 +19,7 @@ import semmle.code.cpp.security.Security
import semmle.code.cpp.valuenumbering.GlobalValueNumbering
import semmle.code.cpp.ir.IR
import semmle.code.cpp.ir.dataflow.TaintTracking
+import semmle.code.cpp.ir.dataflow.TaintTracking2
import semmle.code.cpp.security.FlowSources
import semmle.code.cpp.models.implementations.Strcat
import DataFlow::PathGraph
@@ -83,6 +84,32 @@ class ExecState extends DataFlow::FlowState {
DataFlow::Node getFstNode() { result = fst }
DataFlow::Node getSndNode() { result = snd }
+
+ /** Holds if this is a possible `ExecState` for `sink`. */
+ predicate isFeasibleForSink(DataFlow::Node sink) {
+ any(ExecStateConfiguration conf).hasFlow(snd, sink)
+ }
+}
+
+/**
+ * A `TaintTracking` configuration that's used to find the relevant `ExecState`s for a
+ * given sink. This avoids a cartesian product between all sinks and all `ExecState`s in
+ * `ExecTaintConfiguration::isSink`.
+ */
+class ExecStateConfiguration extends TaintTracking2::Configuration {
+ ExecStateConfiguration() { this = "ExecStateConfiguration" }
+
+ override predicate isSource(DataFlow::Node source) {
+ exists(ExecState state | state.getSndNode() = source)
+ }
+
+ override predicate isSink(DataFlow::Node sink) {
+ shellCommand(sinkAsArgumentIndirection(sink), _)
+ }
+
+ override predicate isSanitizerOut(DataFlow::Node node) {
+ isSink(node, _) // Prevent duplicates along a call chain, since `shellCommand` will include wrappers
+ }
}
class ExecTaintConfiguration extends TaintTracking::Configuration {
@@ -94,8 +121,8 @@ class ExecTaintConfiguration extends TaintTracking::Configuration {
}
override predicate isSink(DataFlow::Node sink, DataFlow::FlowState state) {
- shellCommand(sinkAsArgumentIndirection(sink), _) and
- state instanceof ExecState
+ any(ExecStateConfiguration conf).isSink(sink) and
+ state.(ExecState).isFeasibleForSink(sink)
}
override predicate isAdditionalTaintStep(
diff --git a/cpp/ql/src/Security/CWE/CWE-295/SSLResultConflation.ql b/cpp/ql/src/Security/CWE/CWE-295/SSLResultConflation.ql
index c72142e2ef3..0d706affd0b 100644
--- a/cpp/ql/src/Security/CWE/CWE-295/SSLResultConflation.ql
+++ b/cpp/ql/src/Security/CWE/CWE-295/SSLResultConflation.ql
@@ -17,8 +17,8 @@ import semmle.code.cpp.dataflow.DataFlow
/**
* A call to `SSL_get_verify_result`.
*/
-class SSLGetVerifyResultCall extends FunctionCall {
- SSLGetVerifyResultCall() { getTarget().getName() = "SSL_get_verify_result" }
+class SslGetVerifyResultCall extends FunctionCall {
+ SslGetVerifyResultCall() { getTarget().getName() = "SSL_get_verify_result" }
}
/**
@@ -29,7 +29,7 @@ class VerifyResultConfig extends DataFlow::Configuration {
VerifyResultConfig() { this = "VerifyResultConfig" }
override predicate isSource(DataFlow::Node source) {
- source.asExpr() instanceof SSLGetVerifyResultCall
+ source.asExpr() instanceof SslGetVerifyResultCall
}
override predicate isSink(DataFlow::Node sink) {
diff --git a/cpp/ql/src/Security/CWE/CWE-295/SSLResultNotChecked.ql b/cpp/ql/src/Security/CWE/CWE-295/SSLResultNotChecked.ql
index ad66bd2bd57..0d972a734b3 100644
--- a/cpp/ql/src/Security/CWE/CWE-295/SSLResultNotChecked.ql
+++ b/cpp/ql/src/Security/CWE/CWE-295/SSLResultNotChecked.ql
@@ -17,33 +17,33 @@ import semmle.code.cpp.controlflow.IRGuards
/**
* A call to `SSL_get_peer_certificate`.
*/
-class SSLGetPeerCertificateCall extends FunctionCall {
- SSLGetPeerCertificateCall() {
+class SslGetPeerCertificateCall extends FunctionCall {
+ SslGetPeerCertificateCall() {
getTarget().getName() = "SSL_get_peer_certificate" // SSL_get_peer_certificate(ssl)
}
- Expr getSSLArgument() { result = getArgument(0) }
+ Expr getSslArgument() { result = getArgument(0) }
}
/**
* A call to `SSL_get_verify_result`.
*/
-class SSLGetVerifyResultCall extends FunctionCall {
- SSLGetVerifyResultCall() {
+class SslGetVerifyResultCall extends FunctionCall {
+ SslGetVerifyResultCall() {
getTarget().getName() = "SSL_get_verify_result" // SSL_get_peer_certificate(ssl)
}
- Expr getSSLArgument() { result = getArgument(0) }
+ Expr getSslArgument() { result = getArgument(0) }
}
/**
* Holds if the SSL object passed into `SSL_get_peer_certificate` is checked with
* `SSL_get_verify_result` entering `node`.
*/
-predicate resultIsChecked(SSLGetPeerCertificateCall getCertCall, ControlFlowNode node) {
- exists(Expr ssl, SSLGetVerifyResultCall check |
- ssl = globalValueNumber(getCertCall.getSSLArgument()).getAnExpr() and
- ssl = check.getSSLArgument() and
+predicate resultIsChecked(SslGetPeerCertificateCall getCertCall, ControlFlowNode node) {
+ exists(Expr ssl, SslGetVerifyResultCall check |
+ ssl = globalValueNumber(getCertCall.getSslArgument()).getAnExpr() and
+ ssl = check.getSslArgument() and
node = check
)
}
@@ -53,7 +53,7 @@ predicate resultIsChecked(SSLGetPeerCertificateCall getCertCall, ControlFlowNode
* `0` on the edge `node1` to `node2`.
*/
predicate certIsZero(
- SSLGetPeerCertificateCall getCertCall, ControlFlowNode node1, ControlFlowNode node2
+ SslGetPeerCertificateCall getCertCall, ControlFlowNode node1, ControlFlowNode node2
) {
exists(Expr cert | cert = globalValueNumber(getCertCall).getAnExpr() |
exists(GuardCondition guard, Expr zero |
@@ -87,7 +87,7 @@ predicate certIsZero(
* `SSL_get_verify_result` at `node`. Note that this is only computed at the call to
* `SSL_get_peer_certificate` and at the start and end of `BasicBlock`s.
*/
-predicate certNotChecked(SSLGetPeerCertificateCall getCertCall, ControlFlowNode node) {
+predicate certNotChecked(SslGetPeerCertificateCall getCertCall, ControlFlowNode node) {
// cert is not checked at the call to `SSL_get_peer_certificate`
node = getCertCall
or
@@ -112,7 +112,7 @@ predicate certNotChecked(SSLGetPeerCertificateCall getCertCall, ControlFlowNode
)
}
-from SSLGetPeerCertificateCall getCertCall, ControlFlowNode node
+from SslGetPeerCertificateCall getCertCall, ControlFlowNode node
where
certNotChecked(getCertCall, node) and
node instanceof Function // (function exit)
diff --git a/cpp/ql/src/Security/CWE/CWE-311/CleartextBufferWrite.ql b/cpp/ql/src/Security/CWE/CWE-311/CleartextBufferWrite.ql
index 77d4d9caf7f..0c3e35e0fbc 100644
--- a/cpp/ql/src/Security/CWE/CWE-311/CleartextBufferWrite.ql
+++ b/cpp/ql/src/Security/CWE/CWE-311/CleartextBufferWrite.ql
@@ -26,6 +26,10 @@ class ToBufferConfiguration extends TaintTracking::Configuration {
override predicate isSource(DataFlow::Node source) { source instanceof FlowSource }
+ override predicate isSanitizer(DataFlow::Node node) {
+ node.asExpr().getUnspecifiedType() instanceof IntegralType
+ }
+
override predicate isSink(DataFlow::Node sink) {
exists(BufferWrite::BufferWrite w | w.getASource() = sink.asExpr())
}
diff --git a/cpp/ql/src/Security/CWE/CWE-497/SystemData.qll b/cpp/ql/src/Security/CWE/CWE-497/SystemData.qll
index 070125e7baf..0c04264892c 100644
--- a/cpp/ql/src/Security/CWE/CWE-497/SystemData.qll
+++ b/cpp/ql/src/Security/CWE/CWE-497/SystemData.qll
@@ -47,14 +47,17 @@ class EnvData extends SystemData {
/**
* Data originating from a call to `mysql_get_client_info()`.
*/
-class SQLClientInfo extends SystemData {
- SQLClientInfo() { this.(FunctionCall).getTarget().hasName("mysql_get_client_info") }
+class SqlClientInfo extends SystemData {
+ SqlClientInfo() { this.(FunctionCall).getTarget().hasName("mysql_get_client_info") }
override DataFlow::Node getAnExpr() { result.asConvertedExpr() = this }
override predicate isSensitive() { any() }
}
+/** DEPRECATED: Alias for SqlClientInfo */
+deprecated class SQLClientInfo = SqlClientInfo;
+
private predicate sqlConnectInfo(FunctionCall source, Expr use) {
(
source.getTarget().hasName("mysql_connect") or
@@ -66,14 +69,17 @@ private predicate sqlConnectInfo(FunctionCall source, Expr use) {
/**
* Data passed into an SQL connect function.
*/
-class SQLConnectInfo extends SystemData {
- SQLConnectInfo() { sqlConnectInfo(this, _) }
+class SqlConnectInfo extends SystemData {
+ SqlConnectInfo() { sqlConnectInfo(this, _) }
override DataFlow::Node getAnExpr() { sqlConnectInfo(this, result.asConvertedExpr()) }
override predicate isSensitive() { any() }
}
+/** DEPRECATED: Alias for SqlConnectInfo */
+deprecated class SQLConnectInfo = SqlConnectInfo;
+
private predicate posixSystemInfo(FunctionCall source, DataFlow::Node use) {
// size_t confstr(int name, char *buf, size_t len)
// - various OS / system strings, such as the libc version
diff --git a/cpp/ql/src/change-notes/2022-08-22-cleartext-buffer-write-sanitizer.md b/cpp/ql/src/change-notes/2022-08-22-cleartext-buffer-write-sanitizer.md
new file mode 100644
index 00000000000..3e8af3711ac
--- /dev/null
+++ b/cpp/ql/src/change-notes/2022-08-22-cleartext-buffer-write-sanitizer.md
@@ -0,0 +1,4 @@
+---
+category: minorAnalysis
+---
+* The "Cleartext storage of sensitive information in buffer" (`cpp/cleartext-storage-buffer`) query has been improved to produce fewer false positives.
diff --git a/cpp/ql/src/change-notes/2022-08-23-alert-messages.md b/cpp/ql/src/change-notes/2022-08-23-alert-messages.md
new file mode 100644
index 00000000000..22f4c5c6682
--- /dev/null
+++ b/cpp/ql/src/change-notes/2022-08-23-alert-messages.md
@@ -0,0 +1,4 @@
+---
+category: minorAnalysis
+---
+* The alert message of many queries have been changed to make the message consistent with other languages.
\ No newline at end of file
diff --git a/cpp/ql/src/change-notes/2021-08-10-use-strcpyfunction-in-bad-strncpy-size.md b/cpp/ql/src/change-notes/released/0.3.2.md
similarity index 82%
rename from cpp/ql/src/change-notes/2021-08-10-use-strcpyfunction-in-bad-strncpy-size.md
rename to cpp/ql/src/change-notes/released/0.3.2.md
index 3468fec4c8d..1b02e1445e3 100644
--- a/cpp/ql/src/change-notes/2021-08-10-use-strcpyfunction-in-bad-strncpy-size.md
+++ b/cpp/ql/src/change-notes/released/0.3.2.md
@@ -1,4 +1,5 @@
----
-category: minorAnalysis
----
+## 0.3.2
+
+### Minor Analysis Improvements
+
* The query `cpp/bad-strncpy-size` now covers more `strncpy`-like functions than before, including `strxfrm`(`_l`), `wcsxfrm`(`_l`), and `stpncpy`. Users of this query may see an increase in results.
diff --git a/cpp/ql/src/codeql-pack.release.yml b/cpp/ql/src/codeql-pack.release.yml
index bb106b1cb63..18c64250f42 100644
--- a/cpp/ql/src/codeql-pack.release.yml
+++ b/cpp/ql/src/codeql-pack.release.yml
@@ -1,2 +1,2 @@
---
-lastReleaseVersion: 0.3.1
+lastReleaseVersion: 0.3.2
diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-125/DangerousWorksWithMultibyteOrWideCharacters.ql b/cpp/ql/src/experimental/Security/CWE/CWE-125/DangerousWorksWithMultibyteOrWideCharacters.ql
index f73ba21c39b..0b7555c9e41 100644
--- a/cpp/ql/src/experimental/Security/CWE/CWE-125/DangerousWorksWithMultibyteOrWideCharacters.ql
+++ b/cpp/ql/src/experimental/Security/CWE/CWE-125/DangerousWorksWithMultibyteOrWideCharacters.ql
@@ -67,7 +67,7 @@ predicate findUseCharacterConversion(Expr exp, string msg) {
exists(FunctionCall fc |
fc = exp and
(
- exists(Loop lptmp | lptmp = fc.getEnclosingStmt().getParentStmt*()) and
+ fc.getEnclosingStmt().getParentStmt*() instanceof Loop and
fc.getTarget().hasName(["mbtowc", "mbrtowc", "_mbtowc_l"]) and
not fc.getArgument(0).isConstant() and
not fc.getArgument(1).isConstant() and
diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-190/DangerousUseOfTransformationAfterOperation.ql b/cpp/ql/src/experimental/Security/CWE/CWE-190/DangerousUseOfTransformationAfterOperation.ql
index 0bebc69a8bf..026c279de7c 100644
--- a/cpp/ql/src/experimental/Security/CWE/CWE-190/DangerousUseOfTransformationAfterOperation.ql
+++ b/cpp/ql/src/experimental/Security/CWE/CWE-190/DangerousUseOfTransformationAfterOperation.ql
@@ -44,11 +44,8 @@ predicate conversionDoneLate(MulExpr mexp) {
mexp.getEnclosingElement().(ComparisonOperation).hasOperands(mexp, e0) and
e0.getType().getSize() = mexp.getConversion().getConversion().getType().getSize()
or
- e0.(FunctionCall)
- .getTarget()
- .getParameter(argumentPosition(e0.(FunctionCall), mexp, _))
- .getType()
- .getSize() = mexp.getConversion().getConversion().getType().getSize()
+ e0.(FunctionCall).getTarget().getParameter(argumentPosition(e0, mexp, _)).getType().getSize() =
+ mexp.getConversion().getConversion().getType().getSize()
)
)
}
@@ -75,7 +72,7 @@ predicate signSmallerWithEqualSizes(MulExpr mexp) {
ae.getRValue().getUnderlyingType().(IntegralType).isUnsigned() and
ae.getLValue().getUnderlyingType().(IntegralType).isSigned() and
(
- not exists(DivExpr de | mexp.getParent*() = de)
+ not mexp.getParent*() instanceof DivExpr
or
exists(DivExpr de, Expr ec |
e2.isConstant() and
diff --git a/cpp/ql/src/jsf/4.10 Classes/AV Rule 78.qhelp b/cpp/ql/src/jsf/4.10 Classes/AV Rule 78.qhelp
index 0d25ce90c96..8a2aa181cf1 100644
--- a/cpp/ql/src/jsf/4.10 Classes/AV Rule 78.qhelp
+++ b/cpp/ql/src/jsf/4.10 Classes/AV Rule 78.qhelp
@@ -33,7 +33,7 @@ Make sure that all classes with virtual functions also have a virtual destructor
S. Meyers. Effective C++ 3d ed. pp 40-44. Addison-Wesley Professional, 2005.
- When should your destructor be virtual?
+ When should your destructor be virtual?
diff --git a/cpp/ql/src/qlpack.yml b/cpp/ql/src/qlpack.yml
index 03b90cb3668..08cd1fb4641 100644
--- a/cpp/ql/src/qlpack.yml
+++ b/cpp/ql/src/qlpack.yml
@@ -1,5 +1,5 @@
name: codeql/cpp-queries
-version: 0.3.2-dev
+version: 0.3.3-dev
groups:
- cpp
- queries
diff --git a/cpp/ql/test/TestUtilities/InlineExpectationsTest.qll b/cpp/ql/test/TestUtilities/InlineExpectationsTest.qll
index 4b4a31d6950..e4984dfd0c3 100644
--- a/cpp/ql/test/TestUtilities/InlineExpectationsTest.qll
+++ b/cpp/ql/test/TestUtilities/InlineExpectationsTest.qll
@@ -330,6 +330,19 @@ abstract private class Expectation extends FailureLocatable {
override Location getLocation() { result = comment.getLocation() }
}
+private predicate onSameLine(ValidExpectation a, ActualResult b) {
+ exists(string fname, int line, Location la, Location lb |
+ // Join order intent:
+ // Take the locations of ActualResults,
+ // join with locations in the same file / on the same line,
+ // then match those against ValidExpectations.
+ la = a.getLocation() and
+ pragma[only_bind_into](lb) = b.getLocation() and
+ pragma[only_bind_into](la).hasLocationInfo(fname, line, _, _, _) and
+ lb.hasLocationInfo(fname, line, _, _, _)
+ )
+}
+
private class ValidExpectation extends Expectation, TValidExpectation {
string tag;
string value;
@@ -344,8 +357,7 @@ private class ValidExpectation extends Expectation, TValidExpectation {
string getKnownFailure() { result = knownFailure }
predicate matchesActualResult(ActualResult actualResult) {
- getLocation().getStartLine() = actualResult.getLocation().getStartLine() and
- getLocation().getFile() = actualResult.getLocation().getFile() and
+ onSameLine(pragma[only_bind_into](this), actualResult) and
getTag() = actualResult.getTag() and
getValue() = actualResult.getValue()
}
diff --git a/cpp/ql/test/TestUtilities/dataflow/FlowTestCommon.qll b/cpp/ql/test/TestUtilities/dataflow/FlowTestCommon.qll
index 5841412331d..c765ba89a00 100644
--- a/cpp/ql/test/TestUtilities/dataflow/FlowTestCommon.qll
+++ b/cpp/ql/test/TestUtilities/dataflow/FlowTestCommon.qll
@@ -13,7 +13,7 @@
import cpp
private import semmle.code.cpp.ir.dataflow.DataFlow::DataFlow as IRDataFlow
-private import semmle.code.cpp.dataflow.DataFlow::DataFlow as ASTDataFlow
+private import semmle.code.cpp.dataflow.DataFlow::DataFlow as AstDataFlow
import TestUtilities.InlineExpectationsTest
class IRFlowTest extends InlineExpectationsTest {
@@ -49,11 +49,11 @@ class AstFlowTest extends InlineExpectationsTest {
override predicate hasActualResult(Location location, string element, string tag, string value) {
exists(
- ASTDataFlow::Node source, ASTDataFlow::Node sink, ASTDataFlow::Configuration conf, int n
+ AstDataFlow::Node source, AstDataFlow::Node sink, AstDataFlow::Configuration conf, int n
|
tag = "ast" and
conf.hasFlow(source, sink) and
- n = strictcount(ASTDataFlow::Node otherSource | conf.hasFlow(otherSource, sink)) and
+ n = strictcount(AstDataFlow::Node otherSource | conf.hasFlow(otherSource, sink)) and
(
n = 1 and value = ""
or
diff --git a/cpp/ql/test/library-tests/dataflow/DefaultTaintTracking/annotate_path_to_sink/tainted.ql b/cpp/ql/test/library-tests/dataflow/DefaultTaintTracking/annotate_path_to_sink/tainted.ql
index 1737bb0bb33..9662b7c454d 100644
--- a/cpp/ql/test/library-tests/dataflow/DefaultTaintTracking/annotate_path_to_sink/tainted.ql
+++ b/cpp/ql/test/library-tests/dataflow/DefaultTaintTracking/annotate_path_to_sink/tainted.ql
@@ -4,7 +4,7 @@
*/
import cpp
-import semmle.code.cpp.security.TaintTrackingImpl as ASTTaintTracking
+import semmle.code.cpp.security.TaintTrackingImpl as AstTaintTracking
import semmle.code.cpp.ir.dataflow.DefaultTaintTracking as IRDefaultTaintTracking
import IRDefaultTaintTracking::TaintedWithPath as TaintedWithPath
import TaintedWithPath::Private
@@ -17,7 +17,7 @@ predicate isSinkArgument(Element sink) {
)
}
-predicate astTaint(Expr source, Element sink) { ASTTaintTracking::tainted(source, sink) }
+predicate astTaint(Expr source, Element sink) { AstTaintTracking::tainted(source, sink) }
class SourceConfiguration extends TaintedWithPath::TaintTrackingConfiguration {
override predicate isSink(Element e) { isSinkArgument(e) }
diff --git a/cpp/ql/test/library-tests/dataflow/DefaultTaintTracking/annotate_sinks_only/tainted.ql b/cpp/ql/test/library-tests/dataflow/DefaultTaintTracking/annotate_sinks_only/tainted.ql
index 61014bbd48f..5c9583b800a 100644
--- a/cpp/ql/test/library-tests/dataflow/DefaultTaintTracking/annotate_sinks_only/tainted.ql
+++ b/cpp/ql/test/library-tests/dataflow/DefaultTaintTracking/annotate_sinks_only/tainted.ql
@@ -5,7 +5,7 @@
*/
import cpp
-import semmle.code.cpp.security.TaintTrackingImpl as ASTTaintTracking
+import semmle.code.cpp.security.TaintTrackingImpl as AstTaintTracking
import semmle.code.cpp.ir.dataflow.DefaultTaintTracking as IRDefaultTaintTracking
import IRDefaultTaintTracking::TaintedWithPath as TaintedWithPath
import TestUtilities.InlineExpectationsTest
@@ -18,7 +18,7 @@ predicate argToSinkCall(Element sink) {
}
predicate astTaint(Expr source, Element sink) {
- ASTTaintTracking::tainted(source, sink) and argToSinkCall(sink)
+ AstTaintTracking::tainted(source, sink) and argToSinkCall(sink)
}
class SourceConfiguration extends TaintedWithPath::TaintTrackingConfiguration {
diff --git a/cpp/ql/test/library-tests/dataflow/DefaultTaintTracking/globals/global.ql b/cpp/ql/test/library-tests/dataflow/DefaultTaintTracking/globals/global.ql
index a9a4a1af231..d6d4e1d6264 100644
--- a/cpp/ql/test/library-tests/dataflow/DefaultTaintTracking/globals/global.ql
+++ b/cpp/ql/test/library-tests/dataflow/DefaultTaintTracking/globals/global.ql
@@ -1,11 +1,11 @@
import cpp
import semmle.code.cpp.security.Security
-import semmle.code.cpp.security.TaintTrackingImpl as ASTTaintTracking
+import semmle.code.cpp.security.TaintTrackingImpl as AstTaintTracking
import semmle.code.cpp.ir.dataflow.DefaultTaintTracking as IRDefaultTaintTracking
import TestUtilities.InlineExpectationsTest
predicate astTaint(Expr source, Element sink, string globalVar) {
- ASTTaintTracking::taintedIncludingGlobalVars(source, sink, globalVar) and globalVar != ""
+ AstTaintTracking::taintedIncludingGlobalVars(source, sink, globalVar) and globalVar != ""
}
predicate irTaint(Expr source, Element sink, string globalVar) {
diff --git a/cpp/ql/test/library-tests/files/Files.ql b/cpp/ql/test/library-tests/files/Files.ql
index ee489c01843..3828d427899 100644
--- a/cpp/ql/test/library-tests/files/Files.ql
+++ b/cpp/ql/test/library-tests/files/Files.ql
@@ -7,7 +7,7 @@ string describe(File f) {
f.compiledAsCpp() and
result = "C++"
or
- f instanceof XMLParent and
+ f instanceof XmlParent and
result = "XMLParent" // regression tests a bug in the characteristic predicate of XMLParent
}
diff --git a/cpp/ql/test/library-tests/ir/ir/PrintAST.expected b/cpp/ql/test/library-tests/ir/ir/PrintAST.expected
index 9aedef96249..1523c0eef25 100644
--- a/cpp/ql/test/library-tests/ir/ir/PrintAST.expected
+++ b/cpp/ql/test/library-tests/ir/ir/PrintAST.expected
@@ -13975,6 +13975,192 @@ ir.cpp:
# 1815| Type = [IntType] int
# 1815| ValueCategory = prvalue(load)
# 1817| getStmt(8): [ReturnStmt] return ...
+# 1834| [CopyAssignmentOperator] block_assignment::A& block_assignment::A::operator=(block_assignment::A const&)
+# 1834| :
+#-----| getParameter(0): [Parameter] (unnamed parameter 0)
+#-----| Type = [LValueReferenceType] const A &
+# 1834| [MoveAssignmentOperator] block_assignment::A& block_assignment::A::operator=(block_assignment::A&&)
+# 1834| :
+#-----| getParameter(0): [Parameter] (unnamed parameter 0)
+#-----| Type = [RValueReferenceType] A &&
+#-----| getEntryPoint(): [BlockStmt] { ... }
+#-----| getStmt(0): [ExprStmt] ExprStmt
+#-----| getExpr(): [BlockAssignExpr] ... = ...
+#-----| Type = [VoidType] void
+#-----| ValueCategory = prvalue
+#-----| getLValue(): [PointerFieldAccess] e
+#-----| Type = [ArrayType] enum [1]
+#-----| ValueCategory = lvalue
+#-----| getQualifier(): [ThisExpr] this
+#-----| Type = [PointerType] A *
+#-----| ValueCategory = prvalue(load)
+#-----| getRValue(): [ReferenceFieldAccess] e
+#-----| Type = [ArrayType] enum [1]
+#-----| ValueCategory = lvalue
+#-----| getQualifier(): [VariableAccess] (unnamed parameter 0)
+#-----| Type = [RValueReferenceType] A &&
+#-----| ValueCategory = prvalue(load)
+#-----| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference)
+#-----| Type = [Class] A
+#-----| ValueCategory = lvalue
+#-----| getStmt(1): [ReturnStmt] return ...
+#-----| getExpr(): [PointerDereferenceExpr] * ...
+#-----| Type = [Class] A
+#-----| ValueCategory = lvalue
+#-----| getOperand(): [ThisExpr] this
+#-----| Type = [PointerType] A *
+#-----| ValueCategory = prvalue(load)
+#-----| 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| :
+#-----| getParameter(0): [Parameter] (unnamed parameter 0)
+#-----| Type = [LValueReferenceType] const A &
+# 1834| [MoveConstructor] void block_assignment::A::A(block_assignment::A&&)
+# 1834| :
+#-----| 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| :
+#-----| getParameter(0): [Parameter] (unnamed parameter 0)
+#-----| Type = [LValueReferenceType] const B &
+# 1839| [MoveAssignmentOperator] block_assignment::B& block_assignment::B::operator=(block_assignment::B&&)
+# 1839| :
+#-----| 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)
+#-----| getOperand().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference)
+#-----| Type = [Struct] B
+#-----| ValueCategory = lvalue
+#-----| getOperand().getFullyConverted(): [CStyleCast] (A *)...
+#-----| Conversion = [BaseClassConversion] base class conversion
+#-----| Type = [PointerType] A *
+#-----| ValueCategory = prvalue
+#-----| getQualifier().getFullyConverted(): [CStyleCast] (A *)...
+#-----| Conversion = [BaseClassConversion] base class conversion
+#-----| Type = [PointerType] A *
+#-----| ValueCategory = prvalue
+#-----| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to)
+#-----| Type = [LValueReferenceType] A &
+#-----| ValueCategory = prvalue
+#-----| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference)
+#-----| Type = [Class] A
+#-----| ValueCategory = lvalue
+#-----| getStmt(1): [ReturnStmt] return ...
+#-----| getExpr(): [PointerDereferenceExpr] * ...
+#-----| Type = [Struct] B
+#-----| ValueCategory = lvalue
+#-----| getOperand(): [ThisExpr] this
+#-----| Type = [PointerType] B *
+#-----| ValueCategory = prvalue(load)
+#-----| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to)
+#-----| Type = [LValueReferenceType] B &
+#-----| ValueCategory = prvalue
+# 1839| [CopyConstructor] void block_assignment::B::B(block_assignment::B const&)
+# 1839| :
+#-----| getParameter(0): [Parameter] (unnamed parameter 0)
+#-----| Type = [LValueReferenceType] const B &
+# 1839| [MoveConstructor] void block_assignment::B::B(block_assignment::B&&)
+# 1839| :
+#-----| 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 ...
perf-regression.cpp:
# 4| [CopyAssignmentOperator] Big& Big::operator=(Big const&)
# 4| :
diff --git a/cpp/ql/test/library-tests/ir/ir/ir.cpp b/cpp/ql/test/library-tests/ir/ir/ir.cpp
index 4c49d95d453..3e43f5b0d61 100644
--- a/cpp/ql/test/library-tests/ir/ir/ir.cpp
+++ b/cpp/ql/test/library-tests/ir/ir/ir.cpp
@@ -1830,4 +1830,25 @@ char *global_string = "global string";
int global_6 = global_2;
+namespace block_assignment {
+ class A {
+ enum {} e[1];
+ virtual void f();
+ };
+
+ struct B : A {
+ B(A *);
+ };
+
+ void foo() {
+ B v(0);
+ v = 0;
+ }
+}
+
+void magicvars() {
+ const char *pf = __PRETTY_FUNCTION__;
+ const char *strfunc = __func__;
+}
+
// semmle-extractor-options: -std=c++17 --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 449908bf1c4..410a1bed500 100644
--- a/cpp/ql/test/library-tests/ir/ir/operand_locations.expected
+++ b/cpp/ql/test/library-tests/ir/ir/operand_locations.expected
@@ -671,6 +671,10 @@
| 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_1 |
+| file://:0:0:0:0 | Address | &:r0_1 |
| file://:0:0:0:0 | Address | &:r0_2 |
| file://:0:0:0:0 | Address | &:r0_3 |
| file://:0:0:0:0 | Address | &:r0_3 |
@@ -691,6 +695,13 @@
| 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_3 |
+| file://:0:0:0:0 | Address | &:r0_3 |
+| 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_5 |
| file://:0:0:0:0 | Address | &:r0_5 |
@@ -699,6 +710,10 @@
| file://:0:0:0:0 | Address | &:r0_5 |
| 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_8 |
+| file://:0:0:0:0 | Address | &:r0_8 |
+| file://:0:0:0:0 | Address | &:r0_8 |
| file://:0:0:0:0 | Address | &:r0_8 |
| file://:0:0:0:0 | Address | &:r0_8 |
| file://:0:0:0:0 | Address | &:r0_8 |
@@ -708,10 +723,15 @@
| 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_13 |
| 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_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 |
@@ -719,6 +739,7 @@
| 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 |
+| file://:0:0:0:0 | Arg(0) | 0:r0_8 |
| file://:0:0:0:0 | Arg(0) | 0:r0_15 |
| file://:0:0:0:0 | Arg(0) | 0:r0_15 |
| file://:0:0:0:0 | CallTarget | func:r0_1 |
@@ -731,8 +752,12 @@
| file://:0:0:0:0 | ChiPartial | partial:m0_8 |
| file://:0:0:0:0 | ChiPartial | partial:m0_11 |
| file://:0:0:0:0 | ChiPartial | partial:m0_11 |
+| file://:0:0:0:0 | ChiPartial | partial:m0_11 |
+| file://:0:0:0:0 | ChiPartial | partial:m0_13 |
+| file://:0:0:0:0 | ChiPartial | partial:m0_13 |
| file://:0:0:0:0 | ChiTotal | total:m0_3 |
| file://:0:0:0:0 | ChiTotal | total:m0_4 |
+| file://:0:0:0:0 | ChiTotal | total:m0_4 |
| 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 |
@@ -740,6 +765,8 @@
| 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 | Left | r0_2 |
| file://:0:0:0:0 | Left | r0_4 |
| file://:0:0:0:0 | Left | r0_7 |
@@ -753,6 +780,9 @@
| 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_2 |
+| file://:0:0:0:0 | Load | m0_2 |
| file://:0:0:0:0 | Load | m745_6 |
| file://:0:0:0:0 | Load | m754_6 |
| file://:0:0:0:0 | Load | m763_6 |
@@ -760,6 +790,10 @@
| file://:0:0:0:0 | Load | m1466_4 |
| file://:0:0:0:0 | Load | m1685_7 |
| file://:0:0:0:0 | Load | m1714_7 |
+| 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 | ~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 |
@@ -776,6 +810,8 @@
| 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 |
@@ -785,6 +821,7 @@
| 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 | ~m96_8 |
| file://:0:0:0:0 | SideEffect | ~m754_8 |
| file://:0:0:0:0 | SideEffect | ~m763_8 |
@@ -794,6 +831,7 @@
| 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 | StoreValue | r0_1 |
| file://:0:0:0:0 | StoreValue | r0_1 |
| file://:0:0:0:0 | StoreValue | r0_1 |
@@ -807,8 +845,11 @@
| file://:0:0:0:0 | StoreValue | r0_6 |
| file://:0:0:0:0 | StoreValue | r0_7 |
| file://:0:0:0:0 | StoreValue | r0_9 |
+| file://:0:0:0:0 | StoreValue | r0_12 |
| file://:0:0:0:0 | StoreValue | r0_13 |
| file://:0:0:0:0 | StoreValue | r0_13 |
+| file://:0:0:0:0 | StoreValue | r0_19 |
+| file://:0:0:0:0 | StoreValue | r0_20 |
| file://:0:0:0:0 | StoreValue | r0_22 |
| file://:0:0:0:0 | StoreValue | r0_22 |
| file://:0:0:0:0 | Unary | r0_1 |
@@ -821,18 +862,27 @@
| file://:0:0:0:0 | Unary | r0_6 |
| file://:0:0:0:0 | Unary | r0_6 |
| file://:0:0:0:0 | Unary | r0_6 |
+| file://:0:0:0:0 | Unary | r0_6 |
+| file://:0:0:0:0 | Unary | r0_6 |
+| file://:0:0:0:0 | Unary | r0_7 |
| file://:0:0:0:0 | Unary | r0_7 |
| file://:0:0:0:0 | Unary | r0_7 |
| file://:0:0:0:0 | Unary | r0_7 |
| file://:0:0:0:0 | Unary | r0_8 |
| file://:0:0:0:0 | Unary | r0_9 |
| file://:0:0:0:0 | Unary | r0_9 |
+| file://:0:0:0:0 | Unary | r0_9 |
+| file://:0:0:0:0 | Unary | r0_10 |
| 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_12 |
| 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 |
+| file://:0:0:0:0 | Unary | r0_19 |
| file://:0:0:0:0 | Unary | r0_20 |
| file://:0:0:0:0 | Unary | r0_20 |
| file://:0:0:0:0 | Unary | r0_21 |
@@ -8363,6 +8413,102 @@
| 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 |
| 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_ir.expected b/cpp/ql/test/library-tests/ir/ir/raw_ir.expected
index 8f67435f3c1..1d059ce6a1e 100644
--- a/cpp/ql/test/library-tests/ir/ir/raw_ir.expected
+++ b/cpp/ql/test/library-tests/ir/ir/raw_ir.expected
@@ -9797,6 +9797,141 @@ ir.cpp:
# 1831| v1831_8(void) = AliasedUse : ~m?
# 1831| v1831_9(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
+#-----| 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?
+#-----| mu0_4(unknown) = InitializeIndirection[(unnamed parameter 0)] : &:r0_3
+#-----| r0_5(glval) = VariableAddress[#this] :
+#-----| r0_6(A *) = Load[#this] : &:r0_5, ~m?
+#-----| r0_7(glval[1]>) = FieldAddress[e] : r0_6
+#-----| r0_8(glval) = VariableAddress[(unnamed parameter 0)] :
+#-----| r0_9(A &&) = Load[(unnamed parameter 0)] : &:r0_8, ~m?
+#-----| r0_10(glval) = CopyValue : r0_9
+#-----| r0_11(glval[1]>) = FieldAddress[e] : r0_10
+#-----| r0_12(enum [1]) = Load[?] : &:r0_11, ~m?
+#-----| mu0_13(enum [1]) = Store[?] : &:r0_7, r0_12
+#-----| r0_14(glval) = VariableAddress[#return] :
+#-----| r0_15(glval) = VariableAddress[#this] :
+#-----| r0_16(A *) = Load[#this] : &:r0_15, ~m?
+#-----| 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?
+#-----| 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 :
+
+# 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
+#-----| 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?
+#-----| 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_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?
+#-----| 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 :
+
+# 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 :
+
+# 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 :
+
perf-regression.cpp:
# 6| void Big::Big()
# 6| Block 0
diff --git a/cpp/ql/test/library-tests/ir/range-analysis/RangeAnalysis.ql b/cpp/ql/test/library-tests/ir/range-analysis/RangeAnalysis.ql
index d93abe6d504..e8eb7a4a217 100644
--- a/cpp/ql/test/library-tests/ir/range-analysis/RangeAnalysis.ql
+++ b/cpp/ql/test/library-tests/ir/range-analysis/RangeAnalysis.ql
@@ -1,6 +1,7 @@
import cpp
import experimental.semmle.code.cpp.semantic.analysis.RangeAnalysis
import experimental.semmle.code.cpp.semantic.Semantic
+import experimental.semmle.code.cpp.semantic.SemanticExprSpecific
import semmle.code.cpp.ir.IR as IR
import TestUtilities.InlineExpectationsTest
@@ -37,8 +38,13 @@ private string getBoundString(SemBound b, int delta) {
b instanceof SemZeroBound and result = delta.toString()
or
result =
- strictconcat(b.(SemSsaBound).getAVariable().(IR::Instruction).getAst().toString(), ":") +
- getOffsetString(delta)
+ strictconcat(b.(SemSsaBound)
+ .getAVariable()
+ .(SemanticExprConfig::SsaVariable)
+ .asInstruction()
+ .getAst()
+ .toString(), ":"
+ ) + getOffsetString(delta)
}
private string getARangeString(SemExpr e) {
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 665d30605ee..e06e22a5e67 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
@@ -99,8 +99,6 @@ 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
-| misc.c:178:22:178:40 | VariableAddress: __PRETTY_FUNCTION__ | Variable address instruction 'VariableAddress: __PRETTY_FUNCTION__' has no associated variable, in function '$@'. | misc.c:177:6:177:14 | void magicvars() | void magicvars() |
-| misc.c:179:27:179:34 | VariableAddress: __func__ | Variable address instruction 'VariableAddress: __func__' has no associated variable, in function '$@'. | misc.c:177:6:177:14 | void magicvars() | void magicvars() |
missingCanonicalLanguageType
multipleCanonicalLanguageTypes
missingIRType
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 69f6429c080..90e261c5c34 100644
--- a/cpp/ql/test/library-tests/syntax-zoo/raw_consistency.expected
+++ b/cpp/ql/test/library-tests/syntax-zoo/raw_consistency.expected
@@ -149,8 +149,6 @@ 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
-| misc.c:178:22:178:40 | VariableAddress: __PRETTY_FUNCTION__ | Variable address instruction 'VariableAddress: __PRETTY_FUNCTION__' has no associated variable, in function '$@'. | misc.c:177:6:177:14 | void magicvars() | void magicvars() |
-| misc.c:179:27:179:34 | VariableAddress: __func__ | Variable address instruction 'VariableAddress: __func__' has no associated variable, in function '$@'. | misc.c:177:6:177:14 | void magicvars() | void magicvars() |
missingCanonicalLanguageType
multipleCanonicalLanguageTypes
missingIRType
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 83e97d12a7d..06ed8ac215b 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
@@ -99,8 +99,6 @@ 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
-| misc.c:178:22:178:40 | VariableAddress: __PRETTY_FUNCTION__ | Variable address instruction 'VariableAddress: __PRETTY_FUNCTION__' has no associated variable, in function '$@'. | misc.c:177:6:177:14 | void magicvars() | void magicvars() |
-| misc.c:179:27:179:34 | VariableAddress: __func__ | Variable address instruction 'VariableAddress: __func__' has no associated variable, in function '$@'. | misc.c:177:6:177:14 | void magicvars() | void magicvars() |
missingCanonicalLanguageType
multipleCanonicalLanguageTypes
missingIRType
diff --git a/cpp/ql/test/query-tests/Best Practices/Likely Errors/EmptyBlock/EmptyBlock.expected b/cpp/ql/test/query-tests/Best Practices/Likely Errors/EmptyBlock/EmptyBlock.expected
index db58438a704..dc572fae9be 100644
--- a/cpp/ql/test/query-tests/Best Practices/Likely Errors/EmptyBlock/EmptyBlock.expected
+++ b/cpp/ql/test/query-tests/Best Practices/Likely Errors/EmptyBlock/EmptyBlock.expected
@@ -1,3 +1,3 @@
-| empty_block.cpp:9:10:9:11 | { ... } | Empty block without comment |
-| empty_block.cpp:12:10:13:3 | { ... } | Empty block without comment |
-| empty_block.cpp:20:10:21:3 | { ... } | Empty block without comment |
+| empty_block.cpp:9:10:9:11 | { ... } | Empty block without comment. |
+| empty_block.cpp:12:10:13:3 | { ... } | Empty block without comment. |
+| empty_block.cpp:20:10:21:3 | { ... } | Empty block without comment. |
diff --git a/cpp/ql/test/query-tests/Documentation/CommentedOutCode/CommentedOutCode.expected b/cpp/ql/test/query-tests/Documentation/CommentedOutCode/CommentedOutCode.expected
index b7889805514..9b4547cd2cd 100644
--- a/cpp/ql/test/query-tests/Documentation/CommentedOutCode/CommentedOutCode.expected
+++ b/cpp/ql/test/query-tests/Documentation/CommentedOutCode/CommentedOutCode.expected
@@ -1,20 +1,20 @@
-| test2.cpp:37:1:37:39 | // int myFunction() { return myValue; } | This comment appears to contain commented-out code |
-| test2.cpp:39:1:39:45 | // int myFunction() const { return myValue; } | This comment appears to contain commented-out code |
-| test2.cpp:41:1:41:54 | // int myFunction() const noexcept { return myValue; } | This comment appears to contain commented-out code |
-| test2.cpp:43:1:43:18 | // #define MYMACRO | This comment appears to contain commented-out code |
-| test2.cpp:45:1:45:23 | // #include "include.h" | This comment appears to contain commented-out code |
-| test2.cpp:47:1:51:2 | /*\n#ifdef\nvoid myFunction();\n#endif\n*/ | This comment appears to contain commented-out code |
-| test2.cpp:59:1:59:24 | // #if(defined(MYMACRO)) | This comment appears to contain commented-out code |
-| test2.cpp:63:1:63:15 | // #pragma once | This comment appears to contain commented-out code |
-| test2.cpp:65:1:65:17 | // # pragma once | This comment appears to contain commented-out code |
-| test2.cpp:67:1:67:19 | /*#error"myerror"*/ | This comment appears to contain commented-out code |
-| test2.cpp:91:1:95:2 | /*\n#ifdef MYMACRO\n\t// ...\n#endif // #ifdef MYMACRO\n*/ | This comment appears to contain commented-out code |
-| test2.cpp:107:21:107:43 | // #include "config2.h" | This comment appears to contain commented-out code |
-| test2.cpp:115:16:115:35 | /* #ifdef MYMACRO */ | This comment appears to contain commented-out code |
-| test2.cpp:117:1:117:24 | // commented_out_code(); | This comment appears to contain commented-out code |
-| test2.cpp:120:2:120:25 | // commented_out_code(); | This comment appears to contain commented-out code |
-| test.c:2:1:2:22 | // commented out code; | This comment appears to contain commented-out code |
-| test.c:4:1:7:8 | // some; | This comment appears to contain commented-out code |
-| test.c:9:1:13:8 | // also; | This comment appears to contain commented-out code |
-| test.c:21:1:26:2 | /*\n some;\n commented;\n out;\n code;\n*/ | This comment appears to contain commented-out code |
-| test.c:28:1:34:2 | /*\n also;\n this\n is;\n commented-out\n code;\n*/ | This comment appears to contain commented-out code |
+| test2.cpp:37:1:37:39 | // int myFunction() { return myValue; } | This comment appears to contain commented-out code. |
+| test2.cpp:39:1:39:45 | // int myFunction() const { return myValue; } | This comment appears to contain commented-out code. |
+| test2.cpp:41:1:41:54 | // int myFunction() const noexcept { return myValue; } | This comment appears to contain commented-out code. |
+| test2.cpp:43:1:43:18 | // #define MYMACRO | This comment appears to contain commented-out code. |
+| test2.cpp:45:1:45:23 | // #include "include.h" | This comment appears to contain commented-out code. |
+| test2.cpp:47:1:51:2 | /*\n#ifdef\nvoid myFunction();\n#endif\n*/ | This comment appears to contain commented-out code. |
+| test2.cpp:59:1:59:24 | // #if(defined(MYMACRO)) | This comment appears to contain commented-out code. |
+| test2.cpp:63:1:63:15 | // #pragma once | This comment appears to contain commented-out code. |
+| test2.cpp:65:1:65:17 | // # pragma once | This comment appears to contain commented-out code. |
+| test2.cpp:67:1:67:19 | /*#error"myerror"*/ | This comment appears to contain commented-out code. |
+| test2.cpp:91:1:95:2 | /*\n#ifdef MYMACRO\n\t// ...\n#endif // #ifdef MYMACRO\n*/ | This comment appears to contain commented-out code. |
+| test2.cpp:107:21:107:43 | // #include "config2.h" | This comment appears to contain commented-out code. |
+| test2.cpp:115:16:115:35 | /* #ifdef MYMACRO */ | This comment appears to contain commented-out code. |
+| test2.cpp:117:1:117:24 | // commented_out_code(); | This comment appears to contain commented-out code. |
+| test2.cpp:120:2:120:25 | // commented_out_code(); | This comment appears to contain commented-out code. |
+| test.c:2:1:2:22 | // commented out code; | This comment appears to contain commented-out code. |
+| test.c:4:1:7:8 | // some; | This comment appears to contain commented-out code. |
+| test.c:9:1:13:8 | // also; | This comment appears to contain commented-out code. |
+| test.c:21:1:26:2 | /*\n some;\n commented;\n out;\n code;\n*/ | This comment appears to contain commented-out code. |
+| test.c:28:1:34:2 | /*\n also;\n this\n is;\n commented-out\n code;\n*/ | This comment appears to contain commented-out code. |
diff --git a/cpp/ql/test/query-tests/Likely Bugs/Arithmetic/BitwiseSignCheck/BitwiseSignCheck.expected b/cpp/ql/test/query-tests/Likely Bugs/Arithmetic/BitwiseSignCheck/BitwiseSignCheck.expected
index a6d6da31f69..ce1f90c3ed2 100644
--- a/cpp/ql/test/query-tests/Likely Bugs/Arithmetic/BitwiseSignCheck/BitwiseSignCheck.expected
+++ b/cpp/ql/test/query-tests/Likely Bugs/Arithmetic/BitwiseSignCheck/BitwiseSignCheck.expected
@@ -1,4 +1,4 @@
-| bsc.cpp:2:10:2:32 | ... > ... | Potential unsafe sign check of a bitwise operation. |
-| bsc.cpp:6:10:6:32 | ... > ... | Potential unsafe sign check of a bitwise operation. |
-| bsc.cpp:18:10:18:28 | ... > ... | Potential unsafe sign check of a bitwise operation. |
-| bsc.cpp:22:10:22:28 | ... < ... | Potential unsafe sign check of a bitwise operation. |
+| bsc.cpp:2:10:2:32 | ... > ... | Potentially unsafe sign check of a bitwise operation. |
+| bsc.cpp:6:10:6:32 | ... > ... | Potentially unsafe sign check of a bitwise operation. |
+| bsc.cpp:18:10:18:28 | ... > ... | Potentially unsafe sign check of a bitwise operation. |
+| bsc.cpp:22:10:22:28 | ... < ... | Potentially unsafe sign check of a bitwise operation. |
diff --git a/cpp/ql/test/query-tests/Likely Bugs/Arithmetic/FloatComparison/FloatComparison.expected b/cpp/ql/test/query-tests/Likely Bugs/Arithmetic/FloatComparison/FloatComparison.expected
index 6152aa1c475..31fda8e5f89 100644
--- a/cpp/ql/test/query-tests/Likely Bugs/Arithmetic/FloatComparison/FloatComparison.expected
+++ b/cpp/ql/test/query-tests/Likely Bugs/Arithmetic/FloatComparison/FloatComparison.expected
@@ -1,4 +1,4 @@
-| c.c:10:5:10:10 | ... == ... | Equality test on floating point values may not behave as expected. |
-| c.c:14:5:14:14 | ... == ... | Equality test on floating point values may not behave as expected. |
-| c.c:16:5:16:12 | ... == ... | Equality test on floating point values may not behave as expected. |
-| c.c:17:5:17:12 | ... == ... | Equality test on floating point values may not behave as expected. |
+| c.c:10:5:10:10 | ... == ... | Equality checks on floating point values can yield unexpected results. |
+| c.c:14:5:14:14 | ... == ... | Equality checks on floating point values can yield unexpected results. |
+| c.c:16:5:16:12 | ... == ... | Equality checks on floating point values can yield unexpected results. |
+| c.c:17:5:17:12 | ... == ... | Equality checks on floating point values can yield unexpected results. |
diff --git a/csharp/documentation/library-coverage/coverage.csv b/csharp/documentation/library-coverage/coverage.csv
index 485242620f3..fd6c64f91d0 100644
--- a/csharp/documentation/library-coverage/coverage.csv
+++ b/csharp/documentation/library-coverage/coverage.csv
@@ -1,28 +1,28 @@
-package,sink,source,summary,sink:code,sink:encryption-decryptor,sink:encryption-encryptor,sink:encryption-keyprop,sink:encryption-symmetrickey,sink:html,sink:remote,sink:sql,sink:xss,source:local,summary:taint,summary:value
-Dapper,55,,,,,,,,,,55,,,,
-JsonToItemsTaskFactory,,,7,,,,,,,,,,,7,
-Microsoft.ApplicationBlocks.Data,28,,,,,,,,,,28,,,,
-Microsoft.CSharp,,,24,,,,,,,,,,,24,
-Microsoft.EntityFrameworkCore,6,,,,,,,,,,6,,,,
-Microsoft.Extensions.Caching.Distributed,,,15,,,,,,,,,,,15,
-Microsoft.Extensions.Caching.Memory,,,46,,,,,,,,,,,45,1
-Microsoft.Extensions.Configuration,,,83,,,,,,,,,,,80,3
-Microsoft.Extensions.DependencyInjection,,,62,,,,,,,,,,,62,
-Microsoft.Extensions.DependencyModel,,,12,,,,,,,,,,,12,
-Microsoft.Extensions.FileProviders,,,15,,,,,,,,,,,15,
-Microsoft.Extensions.FileSystemGlobbing,,,15,,,,,,,,,,,13,2
-Microsoft.Extensions.Hosting,,,17,,,,,,,,,,,16,1
-Microsoft.Extensions.Http,,,10,,,,,,,,,,,10,
-Microsoft.Extensions.Logging,,,37,,,,,,,,,,,37,
-Microsoft.Extensions.Options,,,8,,,,,,,,,,,8,
-Microsoft.Extensions.Primitives,,,63,,,,,,,,,,,63,
-Microsoft.Interop,,,27,,,,,,,,,,,27,
-Microsoft.NET.Build.Tasks,,,1,,,,,,,,,,,1,
-Microsoft.NETCore.Platforms.BuildTasks,,,4,,,,,,,,,,,4,
-Microsoft.VisualBasic,,,9,,,,,,,,,,,5,4
-Microsoft.Win32,,,8,,,,,,,,,,,8,
-MySql.Data.MySqlClient,48,,,,,,,,,,48,,,,
-Newtonsoft.Json,,,91,,,,,,,,,,,73,18
-ServiceStack,194,,7,27,,,,,,75,92,,,7,
-System,35,3,11796,,1,1,1,,4,,25,3,3,9854,1942
-Windows.Security.Cryptography.Core,1,,,,,,,1,,,,,,,
+package,sink,source,summary,sink:code,sink:encryption-decryptor,sink:encryption-encryptor,sink:encryption-keyprop,sink:encryption-symmetrickey,sink:html,sink:remote,sink:sql,sink:xss,source:file,source:local,summary:taint,summary:value
+Dapper,55,,,,,,,,,,55,,,,,
+JsonToItemsTaskFactory,,,7,,,,,,,,,,,,7,
+Microsoft.ApplicationBlocks.Data,28,,,,,,,,,,28,,,,,
+Microsoft.CSharp,,,24,,,,,,,,,,,,24,
+Microsoft.EntityFrameworkCore,6,,,,,,,,,,6,,,,,
+Microsoft.Extensions.Caching.Distributed,,,15,,,,,,,,,,,,15,
+Microsoft.Extensions.Caching.Memory,,,46,,,,,,,,,,,,45,1
+Microsoft.Extensions.Configuration,,,83,,,,,,,,,,,,80,3
+Microsoft.Extensions.DependencyInjection,,,62,,,,,,,,,,,,62,
+Microsoft.Extensions.DependencyModel,,,12,,,,,,,,,,,,12,
+Microsoft.Extensions.FileProviders,,,15,,,,,,,,,,,,15,
+Microsoft.Extensions.FileSystemGlobbing,,,15,,,,,,,,,,,,13,2
+Microsoft.Extensions.Hosting,,,17,,,,,,,,,,,,16,1
+Microsoft.Extensions.Http,,,10,,,,,,,,,,,,10,
+Microsoft.Extensions.Logging,,,37,,,,,,,,,,,,37,
+Microsoft.Extensions.Options,,,8,,,,,,,,,,,,8,
+Microsoft.Extensions.Primitives,,,63,,,,,,,,,,,,63,
+Microsoft.Interop,,,27,,,,,,,,,,,,27,
+Microsoft.NET.Build.Tasks,,,1,,,,,,,,,,,,1,
+Microsoft.NETCore.Platforms.BuildTasks,,,4,,,,,,,,,,,,4,
+Microsoft.VisualBasic,,,9,,,,,,,,,,,,5,4
+Microsoft.Win32,,,8,,,,,,,,,,,,8,
+MySql.Data.MySqlClient,48,,,,,,,,,,48,,,,,
+Newtonsoft.Json,,,91,,,,,,,,,,,,73,18
+ServiceStack,194,,7,27,,,,,,75,92,,,,7,
+System,43,4,11809,,1,1,1,,4,,33,3,1,3,9867,1942
+Windows.Security.Cryptography.Core,1,,,,,,,1,,,,,,,,
diff --git a/csharp/documentation/library-coverage/coverage.rst b/csharp/documentation/library-coverage/coverage.rst
index d088c041e8b..1d3a0a7d5cc 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``",3,11796,35,7
+ System,"``System.*``, ``System``",4,11809,43,7
Others,"``Dapper``, ``JsonToItemsTaskFactory``, ``Microsoft.ApplicationBlocks.Data``, ``Microsoft.CSharp``, ``Microsoft.EntityFrameworkCore``, ``Microsoft.Extensions.Caching.Distributed``, ``Microsoft.Extensions.Caching.Memory``, ``Microsoft.Extensions.Configuration``, ``Microsoft.Extensions.DependencyInjection``, ``Microsoft.Extensions.DependencyModel``, ``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.NETCore.Platforms.BuildTasks``, ``Microsoft.VisualBasic``, ``Microsoft.Win32``, ``MySql.Data.MySqlClient``, ``Newtonsoft.Json``, ``Windows.Security.Cryptography.Core``",,554,138,
- Totals,,3,12357,367,7
+ Totals,,4,12370,375,7
diff --git a/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md b/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md
index 0efa6239b0f..e6a2f6edefc 100644
--- a/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md
+++ b/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md
@@ -1,3 +1,5 @@
+## 1.2.3
+
## 1.2.2
## 1.2.1
diff --git a/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.2.3.md b/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.2.3.md
new file mode 100644
index 00000000000..dec11cbd564
--- /dev/null
+++ b/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.2.3.md
@@ -0,0 +1 @@
+## 1.2.3
diff --git a/csharp/ql/campaigns/Solorigate/lib/codeql-pack.release.yml b/csharp/ql/campaigns/Solorigate/lib/codeql-pack.release.yml
index 0a70a9a01a7..09a7400b594 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.2.2
+lastReleaseVersion: 1.2.3
diff --git a/csharp/ql/campaigns/Solorigate/lib/qlpack.yml b/csharp/ql/campaigns/Solorigate/lib/qlpack.yml
index 78cc75ede63..c25094f667e 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.2.3-dev
+version: 1.2.4-dev
groups:
- csharp
- solorigate
diff --git a/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md b/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md
index 0efa6239b0f..e6a2f6edefc 100644
--- a/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md
+++ b/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md
@@ -1,3 +1,5 @@
+## 1.2.3
+
## 1.2.2
## 1.2.1
diff --git a/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.2.3.md b/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.2.3.md
new file mode 100644
index 00000000000..dec11cbd564
--- /dev/null
+++ b/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.2.3.md
@@ -0,0 +1 @@
+## 1.2.3
diff --git a/csharp/ql/campaigns/Solorigate/src/codeql-pack.release.yml b/csharp/ql/campaigns/Solorigate/src/codeql-pack.release.yml
index 0a70a9a01a7..09a7400b594 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.2.2
+lastReleaseVersion: 1.2.3
diff --git a/csharp/ql/campaigns/Solorigate/src/qlpack.yml b/csharp/ql/campaigns/Solorigate/src/qlpack.yml
index fced50b6ef4..d2d8273babb 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.2.3-dev
+version: 1.2.4-dev
groups:
- csharp
- solorigate
diff --git a/csharp/ql/lib/CHANGELOG.md b/csharp/ql/lib/CHANGELOG.md
index 5ea16d73e48..ba78aa63788 100644
--- a/csharp/ql/lib/CHANGELOG.md
+++ b/csharp/ql/lib/CHANGELOG.md
@@ -1,3 +1,5 @@
+## 0.3.3
+
## 0.3.2
## 0.3.1
diff --git a/csharp/ql/lib/change-notes/2022-08-17-deleted-deprecations.md b/csharp/ql/lib/change-notes/2022-08-17-deleted-deprecations.md
new file mode 100644
index 00000000000..a6f230afd44
--- /dev/null
+++ b/csharp/ql/lib/change-notes/2022-08-17-deleted-deprecations.md
@@ -0,0 +1,6 @@
+---
+category: minorAnalysis
+---
+* All deprecated predicates/classes/modules that have been deprecated for over a year have been
+deleted.
+
diff --git a/csharp/ql/lib/change-notes/2022-08-22-xml-rename.md b/csharp/ql/lib/change-notes/2022-08-22-xml-rename.md
new file mode 100644
index 00000000000..6b73d2d2250
--- /dev/null
+++ b/csharp/ql/lib/change-notes/2022-08-22-xml-rename.md
@@ -0,0 +1,5 @@
+---
+category: deprecated
+---
+* Many classes/predicates/modules with upper-case acronyms in their name have been renamed to follow our style-guide.
+ The old name still exists as a deprecated alias.
\ No newline at end of file
diff --git a/csharp/ql/lib/change-notes/released/0.3.3.md b/csharp/ql/lib/change-notes/released/0.3.3.md
new file mode 100644
index 00000000000..4574a88b38c
--- /dev/null
+++ b/csharp/ql/lib/change-notes/released/0.3.3.md
@@ -0,0 +1 @@
+## 0.3.3
diff --git a/csharp/ql/lib/codeql-pack.release.yml b/csharp/ql/lib/codeql-pack.release.yml
index 18c64250f42..9da182d3394 100644
--- a/csharp/ql/lib/codeql-pack.release.yml
+++ b/csharp/ql/lib/codeql-pack.release.yml
@@ -1,2 +1,2 @@
---
-lastReleaseVersion: 0.3.2
+lastReleaseVersion: 0.3.3
diff --git a/csharp/ql/lib/qlpack.yml b/csharp/ql/lib/qlpack.yml
index 8f932e28c7a..bbf1b6189ff 100644
--- a/csharp/ql/lib/qlpack.yml
+++ b/csharp/ql/lib/qlpack.yml
@@ -1,5 +1,5 @@
name: codeql/csharp-all
-version: 0.3.3-dev
+version: 0.3.4-dev
groups: csharp
dbscheme: semmlecode.csharp.dbscheme
extractor: csharp
diff --git a/csharp/ql/lib/semmle/code/asp/WebConfig.qll b/csharp/ql/lib/semmle/code/asp/WebConfig.qll
index 024d60ca450..34fa9cf3972 100644
--- a/csharp/ql/lib/semmle/code/asp/WebConfig.qll
+++ b/csharp/ql/lib/semmle/code/asp/WebConfig.qll
@@ -7,7 +7,7 @@ import csharp
/**
* A `Web.config` file.
*/
-class WebConfigXml extends XMLFile {
+class WebConfigXml extends XmlFile {
WebConfigXml() { this.getName().matches("%Web.config") }
}
@@ -15,7 +15,7 @@ class WebConfigXml extends XMLFile {
deprecated class WebConfigXML = WebConfigXml;
/** A `` tag in an ASP.NET configuration file. */
-class ConfigurationXmlElement extends XMLElement {
+class ConfigurationXmlElement extends XmlElement {
ConfigurationXmlElement() { this.getName().toLowerCase() = "configuration" }
}
@@ -23,7 +23,7 @@ class ConfigurationXmlElement extends XMLElement {
deprecated class ConfigurationXMLElement = ConfigurationXmlElement;
/** A `` tag in an ASP.NET configuration file. */
-class LocationXmlElement extends XMLElement {
+class LocationXmlElement extends XmlElement {
LocationXmlElement() {
this.getParent() instanceof ConfigurationXmlElement and
this.getName().toLowerCase() = "location"
@@ -34,7 +34,7 @@ class LocationXmlElement extends XMLElement {
deprecated class LocationXMLElement = LocationXmlElement;
/** A `` tag in an ASP.NET configuration file. */
-class SystemWebXmlElement extends XMLElement {
+class SystemWebXmlElement extends XmlElement {
SystemWebXmlElement() {
(
this.getParent() instanceof ConfigurationXmlElement
@@ -49,7 +49,7 @@ class SystemWebXmlElement extends XMLElement {
deprecated class SystemWebXMLElement = SystemWebXmlElement;
/** A `` tag in an ASP.NET configuration file. */
-class SystemWebServerXmlElement extends XMLElement {
+class SystemWebServerXmlElement extends XmlElement {
SystemWebServerXmlElement() {
(
this.getParent() instanceof ConfigurationXmlElement
@@ -64,7 +64,7 @@ class SystemWebServerXmlElement extends XMLElement {
deprecated class SystemWebServerXMLElement = SystemWebServerXmlElement;
/** A `` tag in an ASP.NET configuration file. */
-class CustomErrorsXmlElement extends XMLElement {
+class CustomErrorsXmlElement extends XmlElement {
CustomErrorsXmlElement() {
this.getParent() instanceof SystemWebXmlElement and
this.getName().toLowerCase() = "customerrors"
@@ -75,7 +75,7 @@ class CustomErrorsXmlElement extends XMLElement {
deprecated class CustomErrorsXMLElement = CustomErrorsXmlElement;
/** A `` tag in an ASP.NET configuration file. */
-class HttpRuntimeXmlElement extends XMLElement {
+class HttpRuntimeXmlElement extends XmlElement {
HttpRuntimeXmlElement() {
this.getParent() instanceof SystemWebXmlElement and
this.getName().toLowerCase() = "httpruntime"
@@ -86,7 +86,7 @@ class HttpRuntimeXmlElement extends XMLElement {
deprecated class HttpRuntimeXMLElement = HttpRuntimeXmlElement;
/** A `` tag under `` in an ASP.NET configuration file. */
-class FormsElement extends XMLElement {
+class FormsElement extends XmlElement {
FormsElement() {
this = any(SystemWebXmlElement sw).getAChild("authentication").getAChild("forms")
}
@@ -94,18 +94,24 @@ class FormsElement extends XMLElement {
/**
* Gets attribute's `requireSSL` value.
*/
- string getRequireSSL() {
+ string getRequireSsl() {
result = this.getAttribute("requireSSL").getValue().trim().toLowerCase()
}
+ /** DEPRECATED: Alias for getRequireSsl */
+ deprecated string getRequireSSL() { result = this.getRequireSsl() }
+
/**
* Holds if `requireSSL` value is true.
*/
- predicate isRequireSSL() { this.getRequireSSL() = "true" }
+ predicate isRequireSsl() { this.getRequireSsl() = "true" }
+
+ /** DEPRECATED: Alias for isRequireSsl */
+ deprecated predicate isRequireSSL() { this.isRequireSsl() }
}
/** A `` tag in an ASP.NET configuration file. */
-class HttpCookiesElement extends XMLElement {
+class HttpCookiesElement extends XmlElement {
HttpCookiesElement() { this = any(SystemWebXmlElement sw).getAChild("httpCookies") }
/**
@@ -123,17 +129,23 @@ class HttpCookiesElement extends XMLElement {
/**
* Gets attribute's `requireSSL` value.
*/
- string getRequireSSL() {
+ string getRequireSsl() {
result = this.getAttribute("requireSSL").getValue().trim().toLowerCase()
}
+ /** DEPRECATED: Alias for getRequireSsl */
+ deprecated string getRequireSSL() { result = this.getRequireSsl() }
+
/**
* Holds if there is any chance that `requireSSL` is set to `true` either globally or for Forms.
*/
- predicate isRequireSSL() {
- this.getRequireSSL() = "true"
+ predicate isRequireSsl() {
+ this.getRequireSsl() = "true"
or
- not this.getRequireSSL() = "false" and // not set all, i.e. default
- exists(FormsElement forms | forms.getFile() = this.getFile() | forms.isRequireSSL())
+ not this.getRequireSsl() = "false" and // not set all, i.e. default
+ exists(FormsElement forms | forms.getFile() = this.getFile() | forms.isRequireSsl())
}
+
+ /** DEPRECATED: Alias for isRequireSsl */
+ deprecated predicate isRequireSSL() { this.isRequireSsl() }
}
diff --git a/csharp/ql/lib/semmle/code/cil/DataFlow.qll b/csharp/ql/lib/semmle/code/cil/DataFlow.qll
index d62ee739369..55f8eb89432 100644
--- a/csharp/ql/lib/semmle/code/cil/DataFlow.qll
+++ b/csharp/ql/lib/semmle/code/cil/DataFlow.qll
@@ -109,125 +109,6 @@ private predicate localTaintStep(DataFlowNode src, DataFlowNode sink) {
src = sink.(UnaryBitwiseOperation).getOperand()
}
-deprecated module DefUse {
- /**
- * A classification of variable references into reads and writes.
- */
- private newtype RefKind =
- Read() or
- Write()
-
- /**
- * Holds if the `i`th node of basic block `bb` is a reference to `v`,
- * either a read (when `k` is `Read()`) or a write (when `k` is `Write()`).
- */
- private predicate ref(BasicBlock bb, int i, StackVariable v, RefKind k) {
- exists(ReadAccess ra | bb.getNode(i) = ra |
- ra.getTarget() = v and
- k = Read()
- )
- or
- exists(VariableUpdate vu | bb.getNode(i) = vu |
- vu.getVariable() = v and
- k = Write()
- )
- }
-
- /**
- * Gets the (1-based) rank of the reference to `v` at the `i`th node of
- * basic block `bb`, which has the given reference kind `k`.
- */
- private int refRank(BasicBlock bb, int i, StackVariable v, RefKind k) {
- i = rank[result](int j | ref(bb, j, v, _)) and
- ref(bb, i, v, k)
- }
-
- /**
- * Holds if stack variable `v` is live at the beginning of basic block `bb`.
- */
- private predicate liveAtEntry(BasicBlock bb, StackVariable v) {
- // The first reference to `v` inside `bb` is a read
- refRank(bb, _, v, Read()) = 1
- or
- // There is no reference to `v` inside `bb`, but `v` is live at entry
- // to a successor basic block of `bb`
- not exists(refRank(bb, _, v, _)) and
- liveAtExit(bb, v)
- }
-
- /**
- * Holds if stack variable `v` is live at the end of basic block `bb`.
- */
- private predicate liveAtExit(BasicBlock bb, StackVariable v) {
- liveAtEntry(bb.getASuccessor(), v)
- }
-
- /**
- * Holds if the variable update `vu` reaches rank index `rankix`
- * in its own basic block `bb`.
- */
- private predicate defReachesRank(BasicBlock bb, VariableUpdate vu, int rankix, StackVariable v) {
- exists(int i |
- rankix = refRank(bb, i, v, Write()) and
- vu = bb.getNode(i)
- )
- or
- defReachesRank(bb, vu, rankix - 1, v) and
- rankix = refRank(bb, _, v, Read())
- }
-
- /**
- * Holds if the variable update `vu` of stack variable `v` reaches the
- * end of a basic block `bb`, at which point it is still live, without
- * crossing another update.
- */
- private predicate defReachesEndOfBlock(BasicBlock bb, VariableUpdate vu, StackVariable v) {
- liveAtExit(bb, v) and
- (
- exists(int last | last = max(refRank(bb, _, v, _)) | defReachesRank(bb, vu, last, v))
- or
- defReachesStartOfBlock(bb, vu, v) and
- not exists(refRank(bb, _, v, Write()))
- )
- }
-
- pragma[noinline]
- private predicate defReachesStartOfBlock(BasicBlock bb, VariableUpdate vu, StackVariable v) {
- defReachesEndOfBlock(bb.getAPredecessor(), vu, v)
- }
-
- /**
- * Holds if the variable update `vu` of stack variable `v` reaches `read` in the
- * same basic block without crossing another update of `v`.
- */
- private predicate defReachesReadWithinBlock(StackVariable v, VariableUpdate vu, ReadAccess read) {
- exists(BasicBlock bb, int rankix, int i |
- defReachesRank(bb, vu, rankix, v) and
- rankix = refRank(bb, i, v, Read()) and
- read = bb.getNode(i)
- )
- }
-
- /** Holds if the variable update `vu` can be used at the read `use`. */
- cached
- deprecated predicate variableUpdateUse(StackVariable target, VariableUpdate vu, ReadAccess use) {
- defReachesReadWithinBlock(target, vu, use)
- or
- exists(BasicBlock bb, int i |
- exists(refRank(bb, i, target, Read())) and
- use = bb.getNode(i) and
- defReachesEndOfBlock(bb.getAPredecessor(), vu, target) and
- not defReachesReadWithinBlock(target, _, use)
- )
- }
-
- /** Holds if the update `def` can be used at the read `use`. */
- cached
- deprecated predicate defUse(StackVariable target, Expr def, ReadAccess use) {
- exists(VariableUpdate vu | def = vu.getSource() | variableUpdateUse(target, vu, use))
- }
-}
-
/** A node that updates a variable. */
abstract class VariableUpdate extends DataFlowNode {
/** Gets the value assigned, if any. */
diff --git a/csharp/ql/lib/semmle/code/cil/Types.qll b/csharp/ql/lib/semmle/code/cil/Types.qll
index 6bb980d6a87..32efaf193ad 100644
--- a/csharp/ql/lib/semmle/code/cil/Types.qll
+++ b/csharp/ql/lib/semmle/code/cil/Types.qll
@@ -309,8 +309,6 @@ class FunctionPointerType extends Type, CustomModifierReceiver, Parameterizable,
/** Gets the calling convention. */
int getCallingConvention() { cil_function_pointer_calling_conventions(this, result) }
- override string toString() { result = Type.super.toString() }
-
/** Holds if the return type is `void`. */
predicate returnsVoid() { this.getReturnType() instanceof VoidType }
diff --git a/csharp/ql/lib/semmle/code/cil/internal/SsaImplCommon.qll b/csharp/ql/lib/semmle/code/cil/internal/SsaImplCommon.qll
index eed0d050735..659940def50 100644
--- a/csharp/ql/lib/semmle/code/cil/internal/SsaImplCommon.qll
+++ b/csharp/ql/lib/semmle/code/cil/internal/SsaImplCommon.qll
@@ -39,7 +39,7 @@ private module Liveness {
/**
* Holds if the `i`th node of basic block `bb` is a reference to `v` of kind `k`.
*/
- private predicate ref(BasicBlock bb, int i, SourceVariable v, RefKind k) {
+ predicate ref(BasicBlock bb, int i, SourceVariable v, RefKind k) {
exists(boolean certain | variableRead(bb, i, v, certain) | k = Read(certain))
or
exists(boolean certain | variableWrite(bb, i, v, certain) | k = Write(certain))
@@ -76,6 +76,10 @@ private module Liveness {
not result + 1 = refRank(bb, _, v, _)
}
+ predicate lastRefIsRead(BasicBlock bb, SourceVariable v) {
+ maxRefRank(bb, v) = refRank(bb, _, v, Read(_))
+ }
+
/**
* Gets the (1-based) rank of the first reference to `v` inside basic block `bb`
* that is either a read or a certain write.
@@ -185,23 +189,29 @@ newtype TDefinition =
private module SsaDefReaches {
newtype TSsaRefKind =
- SsaRead() or
+ SsaActualRead() or
+ SsaPhiRead() or
SsaDef()
+ class SsaRead = SsaActualRead or SsaPhiRead;
+
/**
* A classification of SSA variable references into reads and definitions.
*/
class SsaRefKind extends TSsaRefKind {
string toString() {
- this = SsaRead() and
- result = "SsaRead"
+ this = SsaActualRead() and
+ result = "SsaActualRead"
+ or
+ this = SsaPhiRead() and
+ result = "SsaPhiRead"
or
this = SsaDef() and
result = "SsaDef"
}
int getOrder() {
- this = SsaRead() and
+ this instanceof SsaRead and
result = 0
or
this = SsaDef() and
@@ -209,6 +219,80 @@ private module SsaDefReaches {
}
}
+ /**
+ * Holds if `bb` is in the dominance frontier of a block containing a
+ * read of `v`.
+ */
+ pragma[nomagic]
+ private predicate inReadDominanceFrontier(BasicBlock bb, SourceVariable v) {
+ exists(BasicBlock readbb | inDominanceFrontier(readbb, bb) |
+ lastRefIsRead(readbb, v)
+ or
+ phiRead(readbb, v)
+ )
+ }
+
+ /**
+ * Holds if a phi-read node should be inserted for variable `v` at the beginning
+ * of basic block `bb`.
+ *
+ * Phi-read nodes are like normal phi nodes, but they are inserted based on reads
+ * instead of writes, and only if the dominance-frontier block does not already
+ * contain a reference (read or write) to `v`. Unlike normal phi nodes, this is
+ * an internal implementation detail that is not exposed.
+ *
+ * The motivation for adding phi-reads is to improve performance of the use-use
+ * calculation in cases where there is a large number of reads that can reach the
+ * same join-point, and from there reach a large number of basic blocks. Example:
+ *
+ * ```cs
+ * if (a)
+ * use(x);
+ * else if (b)
+ * use(x);
+ * else if (c)
+ * use(x);
+ * else if (d)
+ * use(x);
+ * // many more ifs ...
+ *
+ * // phi-read for `x` inserted here
+ *
+ * // program not mentioning `x`, with large basic block graph
+ *
+ * use(x);
+ * ```
+ *
+ * Without phi-reads, the analysis has to replicate reachability for each of
+ * the guarded uses of `x`. However, with phi-reads, the analysis will limit
+ * each conditional use of `x` to reach the basic block containing the phi-read
+ * node for `x`, and only that basic block will have to compute reachability
+ * through the remainder of the large program.
+ *
+ * Like normal reads, each phi-read node `phi-read` can be reached from exactly
+ * one SSA definition (without passing through another definition): Assume, for
+ * the sake of contradiction, that there are two reaching definitions `def1` and
+ * `def2`. Now, if both `def1` and `def2` dominate `phi-read`, then the nearest
+ * dominating definition will prevent the other from reaching `phi-read`. So, at
+ * least one of `def1` and `def2` cannot dominate `phi-read`; assume it is `def1`.
+ * Then `def1` must go through one of its dominance-frontier blocks in order to
+ * reach `phi-read`. However, such a block will always start with a (normal) phi
+ * node, which contradicts reachability.
+ *
+ * Also, like normal reads, the unique SSA definition `def` that reaches `phi-read`,
+ * will dominate `phi-read`. Assuming it doesn't means that the path from `def`
+ * to `phi-read` goes through a dominance-frontier block, and hence a phi node,
+ * which contradicts reachability.
+ */
+ pragma[nomagic]
+ predicate phiRead(BasicBlock bb, SourceVariable v) {
+ inReadDominanceFrontier(bb, v) and
+ liveAtEntry(bb, v) and
+ // only if there are no other references to `v` inside `bb`
+ not ref(bb, _, v, _) and
+ not exists(Definition def | def.definesAt(v, bb, _))
+ }
+
/**
* Holds if the `i`th node of basic block `bb` is a reference to `v`,
* either a read (when `k` is `SsaRead()`) or an SSA definition (when `k`
@@ -216,11 +300,16 @@ private module SsaDefReaches {
*
* Unlike `Liveness::ref`, this includes `phi` nodes.
*/
+ pragma[nomagic]
predicate ssaRef(BasicBlock bb, int i, SourceVariable v, SsaRefKind k) {
variableRead(bb, i, v, _) and
- k = SsaRead()
+ k = SsaActualRead()
or
- exists(Definition def | def.definesAt(v, bb, i)) and
+ phiRead(bb, v) and
+ i = -1 and
+ k = SsaPhiRead()
+ or
+ any(Definition def).definesAt(v, bb, i) and
k = SsaDef()
}
@@ -273,7 +362,7 @@ private module SsaDefReaches {
)
or
ssaDefReachesRank(bb, def, rnk - 1, v) and
- rnk = ssaRefRank(bb, _, v, SsaRead())
+ rnk = ssaRefRank(bb, _, v, any(SsaRead k))
}
/**
@@ -283,7 +372,7 @@ private module SsaDefReaches {
predicate ssaDefReachesReadWithinBlock(SourceVariable v, Definition def, BasicBlock bb, int i) {
exists(int rnk |
ssaDefReachesRank(bb, def, rnk, v) and
- rnk = ssaRefRank(bb, i, v, SsaRead())
+ rnk = ssaRefRank(bb, i, v, any(SsaRead k))
)
}
@@ -309,45 +398,94 @@ private module SsaDefReaches {
ssaDefRank(def, v, bb, i, _) = maxSsaRefRank(bb, v)
}
- predicate defOccursInBlock(Definition def, BasicBlock bb, SourceVariable v) {
- exists(ssaDefRank(def, v, bb, _, _))
+ predicate defOccursInBlock(Definition def, BasicBlock bb, SourceVariable v, SsaRefKind k) {
+ exists(ssaDefRank(def, v, bb, _, k))
}
pragma[noinline]
private predicate ssaDefReachesThroughBlock(Definition def, BasicBlock bb) {
ssaDefReachesEndOfBlock(bb, def, _) and
- not defOccursInBlock(_, bb, def.getSourceVariable())
+ not defOccursInBlock(_, bb, def.getSourceVariable(), _)
}
/**
* Holds if `def` is accessed in basic block `bb1` (either a read or a write),
- * `bb2` is a transitive successor of `bb1`, `def` is live at the end of `bb1`,
- * and the underlying variable for `def` is neither read nor written in any block
- * on the path between `bb1` and `bb2`.
+ * `bb2` is a transitive successor of `bb1`, `def` is live at the end of _some_
+ * predecessor of `bb2`, and the underlying variable for `def` is neither read
+ * nor written in any block on the path between `bb1` and `bb2`.
+ *
+ * Phi reads are considered as normal reads for this predicate.
*/
- predicate varBlockReaches(Definition def, BasicBlock bb1, BasicBlock bb2) {
- defOccursInBlock(def, bb1, _) and
+ pragma[nomagic]
+ private predicate varBlockReachesInclPhiRead(Definition def, BasicBlock bb1, BasicBlock bb2) {
+ defOccursInBlock(def, bb1, _, _) and
bb2 = getABasicBlockSuccessor(bb1)
or
exists(BasicBlock mid |
- varBlockReaches(def, bb1, mid) and
+ varBlockReachesInclPhiRead(def, bb1, mid) and
ssaDefReachesThroughBlock(def, mid) and
bb2 = getABasicBlockSuccessor(mid)
)
}
+ pragma[nomagic]
+ private predicate phiReadStep(Definition def, SourceVariable v, BasicBlock bb1, BasicBlock bb2) {
+ varBlockReachesInclPhiRead(def, bb1, bb2) and
+ defOccursInBlock(def, bb2, v, SsaPhiRead())
+ }
+
+ pragma[nomagic]
+ private predicate varBlockReachesExclPhiRead(Definition def, BasicBlock bb1, BasicBlock bb2) {
+ varBlockReachesInclPhiRead(pragma[only_bind_into](def), bb1, pragma[only_bind_into](bb2)) and
+ ssaRef(bb2, _, def.getSourceVariable(), [SsaActualRead().(TSsaRefKind), SsaDef()])
+ or
+ exists(BasicBlock mid |
+ varBlockReachesExclPhiRead(def, mid, bb2) and
+ phiReadStep(def, _, bb1, mid)
+ )
+ }
+
/**
* Holds if `def` is accessed in basic block `bb1` (either a read or a write),
- * `def` is read at index `i2` in basic block `bb2`, `bb2` is in a transitive
- * successor block of `bb1`, and `def` is neither read nor written in any block
- * on a path between `bb1` and `bb2`.
+ * the underlying variable `v` of `def` is accessed in basic block `bb2`
+ * (either a read or a write), `bb2` is a transitive successor of `bb1`, and
+ * `v` is neither read nor written in any block on the path between `bb1`
+ * and `bb2`.
*/
+ pragma[nomagic]
+ predicate varBlockReaches(Definition def, BasicBlock bb1, BasicBlock bb2) {
+ varBlockReachesExclPhiRead(def, bb1, bb2) and
+ not defOccursInBlock(def, bb1, _, SsaPhiRead())
+ }
+
+ pragma[nomagic]
predicate defAdjacentRead(Definition def, BasicBlock bb1, BasicBlock bb2, int i2) {
varBlockReaches(def, bb1, bb2) and
- ssaRefRank(bb2, i2, def.getSourceVariable(), SsaRead()) = 1
+ ssaRefRank(bb2, i2, def.getSourceVariable(), SsaActualRead()) = 1
+ }
+
+ /**
+ * Holds if `def` is accessed in basic block `bb` (either a read or a write),
+ * `bb1` can reach a transitive successor `bb2` where `def` is no longer live,
+ * and `v` is neither read nor written in any block on the path between `bb`
+ * and `bb2`.
+ */
+ pragma[nomagic]
+ predicate varBlockReachesExit(Definition def, BasicBlock bb) {
+ exists(BasicBlock bb2 | varBlockReachesInclPhiRead(def, bb, bb2) |
+ not defOccursInBlock(def, bb2, _, _) and
+ not ssaDefReachesEndOfBlock(bb2, def, _)
+ )
+ or
+ exists(BasicBlock mid |
+ varBlockReachesExit(def, mid) and
+ phiReadStep(def, _, bb, mid)
+ )
}
}
+predicate phiReadExposedForTesting = phiRead/2;
+
private import SsaDefReaches
pragma[nomagic]
@@ -365,7 +503,8 @@ predicate liveThrough(BasicBlock bb, SourceVariable v) {
*/
pragma[nomagic]
predicate ssaDefReachesEndOfBlock(BasicBlock bb, Definition def, SourceVariable v) {
- exists(int last | last = maxSsaRefRank(bb, v) |
+ exists(int last |
+ last = maxSsaRefRank(pragma[only_bind_into](bb), pragma[only_bind_into](v)) and
ssaDefReachesRank(bb, def, last, v) and
liveAtExit(bb, v)
)
@@ -405,7 +544,7 @@ pragma[nomagic]
predicate ssaDefReachesRead(SourceVariable v, Definition def, BasicBlock bb, int i) {
ssaDefReachesReadWithinBlock(v, def, bb, i)
or
- variableRead(bb, i, v, _) and
+ ssaRef(bb, i, v, any(SsaRead k)) and
ssaDefReachesEndOfBlock(getABasicBlockPredecessor(bb), def, v) and
not ssaDefReachesReadWithinBlock(v, _, bb, i)
}
@@ -421,7 +560,7 @@ pragma[nomagic]
predicate adjacentDefRead(Definition def, BasicBlock bb1, int i1, BasicBlock bb2, int i2) {
exists(int rnk |
rnk = ssaDefRank(def, _, bb1, i1, _) and
- rnk + 1 = ssaDefRank(def, _, bb1, i2, SsaRead()) and
+ rnk + 1 = ssaDefRank(def, _, bb1, i2, SsaActualRead()) and
variableRead(bb1, i2, _, _) and
bb2 = bb1
)
@@ -538,18 +677,15 @@ predicate lastRefRedefNoUncertainReads(Definition def, BasicBlock bb, int i, Def
*/
pragma[nomagic]
predicate lastRef(Definition def, BasicBlock bb, int i) {
+ // Can reach another definition
lastRefRedef(def, bb, i, _)
or
- lastSsaRef(def, _, bb, i) and
- (
+ exists(SourceVariable v | lastSsaRef(def, v, bb, i) |
// Can reach exit directly
bb instanceof ExitBasicBlock
or
// Can reach a block using one or more steps, where `def` is no longer live
- exists(BasicBlock bb2 | varBlockReaches(def, bb, bb2) |
- not defOccursInBlock(def, bb2, _) and
- not ssaDefReachesEndOfBlock(bb2, def, _)
- )
+ varBlockReachesExit(def, bb)
)
}
diff --git a/csharp/ql/lib/semmle/code/csharp/Callable.qll b/csharp/ql/lib/semmle/code/csharp/Callable.qll
index b403d201266..0477874eec1 100644
--- a/csharp/ql/lib/semmle/code/csharp/Callable.qll
+++ b/csharp/ql/lib/semmle/code/csharp/Callable.qll
@@ -215,11 +215,7 @@ class Callable extends DotNet::Callable, Parameterizable, ExprOrStmtParent, @cal
/** Gets a `Call` that has this callable as a target. */
Call getACall() { this = result.getTarget() }
- override Parameter getParameter(int n) { result = Parameterizable.super.getParameter(n) }
-
override Parameter getAParameter() { result = Parameterizable.super.getAParameter() }
-
- override int getNumberOfParameters() { result = Parameterizable.super.getNumberOfParameters() }
}
/**
@@ -276,8 +272,6 @@ class Method extends Callable, Virtualizable, Attributable, @method {
predicate hasParams() { exists(this.getParamsType()) }
// Remove when `Callable.isOverridden()` is removed
- override predicate isOverridden() { Virtualizable.super.isOverridden() }
-
override predicate fromSource() {
Callable.super.fromSource() and
not this.isCompilerGenerated()
@@ -472,8 +466,6 @@ class RecordCloneMethod extends Method, DotNet::RecordCloneCallable {
override Constructor getConstructor() {
result = DotNet::RecordCloneCallable.super.getConstructor()
}
-
- override string toString() { result = Method.super.toString() }
}
/**
diff --git a/csharp/ql/lib/semmle/code/csharp/Namespace.qll b/csharp/ql/lib/semmle/code/csharp/Namespace.qll
index e5e4287962f..6812eada0a5 100644
--- a/csharp/ql/lib/semmle/code/csharp/Namespace.qll
+++ b/csharp/ql/lib/semmle/code/csharp/Namespace.qll
@@ -116,10 +116,6 @@ class Namespace extends DotNet::Namespace, TypeContainer, Declaration, @namespac
override Location getALocation() { result = this.getADeclaration().getALocation() }
override string toString() { result = DotNet::Namespace.super.toString() }
-
- override predicate hasQualifiedName(string a, string b) {
- DotNet::Namespace.super.hasQualifiedName(a, b)
- }
}
/**
diff --git a/csharp/ql/lib/semmle/code/csharp/Property.qll b/csharp/ql/lib/semmle/code/csharp/Property.qll
index 58a7b52a66e..1bd65425845 100644
--- a/csharp/ql/lib/semmle/code/csharp/Property.qll
+++ b/csharp/ql/lib/semmle/code/csharp/Property.qll
@@ -42,8 +42,6 @@ class DeclarationWithAccessors extends AssignableMember, Virtualizable, Attribut
}
override Type getType() { none() }
-
- override string toString() { result = AssignableMember.super.toString() }
}
/**
diff --git a/csharp/ql/lib/semmle/code/csharp/Type.qll b/csharp/ql/lib/semmle/code/csharp/Type.qll
index c7f1515990b..f95ded84771 100644
--- a/csharp/ql/lib/semmle/code/csharp/Type.qll
+++ b/csharp/ql/lib/semmle/code/csharp/Type.qll
@@ -882,7 +882,7 @@ private newtype TCallingConvention =
MkCallingConvention(int i) { function_pointer_calling_conventions(_, i) }
/**
- * Represents a signature calling convention. Specifies how arguments in a given
+ * A signature representing a calling convention. Specifies how arguments in a given
* signature are passed from the caller to the callee.
*/
class CallingConvention extends TCallingConvention {
@@ -890,21 +890,21 @@ class CallingConvention extends TCallingConvention {
string toString() { result = "CallingConvention" }
}
-/** Managed calling convention with fixed-length argument list. */
+/** A managed calling convention with fixed-length argument list. */
class DefaultCallingConvention extends CallingConvention {
DefaultCallingConvention() { this = MkCallingConvention(0) }
override string toString() { result = "DefaultCallingConvention" }
}
-/** Unmanaged C/C++-style calling convention where the call stack is cleaned by the caller. */
+/** An unmanaged C/C++-style calling convention where the call stack is cleaned by the caller. */
class CDeclCallingConvention extends CallingConvention {
CDeclCallingConvention() { this = MkCallingConvention(1) }
override string toString() { result = "CDeclCallingConvention" }
}
-/** Unmanaged calling convention where call stack is cleaned up by the callee. */
+/** An unmanaged calling convention where call stack is cleaned up by the callee. */
class StdCallCallingConvention extends CallingConvention {
StdCallCallingConvention() { this = MkCallingConvention(2) }
@@ -912,7 +912,7 @@ class StdCallCallingConvention extends CallingConvention {
}
/**
- * Unmanaged C++-style calling convention for calling instance member functions
+ * An unmanaged C++-style calling convention for calling instance member functions
* with a fixed argument list.
*/
class ThisCallCallingConvention extends CallingConvention {
@@ -921,20 +921,30 @@ class ThisCallCallingConvention extends CallingConvention {
override string toString() { result = "ThisCallCallingConvention" }
}
-/** Unmanaged calling convention where arguments are passed in registers when possible. */
+/** An unmanaged calling convention where arguments are passed in registers when possible. */
class FastCallCallingConvention extends CallingConvention {
FastCallCallingConvention() { this = MkCallingConvention(4) }
override string toString() { result = "FastCallCallingConvention" }
}
-/** Managed calling convention for passing extra arguments. */
+/** A managed calling convention for passing extra arguments. */
class VarArgsCallingConvention extends CallingConvention {
VarArgsCallingConvention() { this = MkCallingConvention(5) }
override string toString() { result = "VarArgsCallingConvention" }
}
+/**
+ * An unmanaged calling convention that indicates that the specifics
+ * are encoded as modopts.
+ */
+class UnmanagedCallingConvention extends CallingConvention {
+ UnmanagedCallingConvention() { this = MkCallingConvention(9) }
+
+ override string toString() { result = "UnmanagedCallingConvention" }
+}
+
/**
* A function pointer type, for example
*
diff --git a/csharp/ql/lib/semmle/code/csharp/XML.qll b/csharp/ql/lib/semmle/code/csharp/XML.qll
old mode 100755
new mode 100644
index fb781a4683f..d74129d425e
--- a/csharp/ql/lib/semmle/code/csharp/XML.qll
+++ b/csharp/ql/lib/semmle/code/csharp/XML.qll
@@ -8,7 +8,7 @@ private class TXmlLocatable =
@xmldtd or @xmlelement or @xmlattribute or @xmlnamespace or @xmlcomment or @xmlcharacters;
/** An XML element that has a location. */
-class XMLLocatable extends @xmllocatable, TXmlLocatable {
+class XmlLocatable extends @xmllocatable, TXmlLocatable {
/** Gets the source location for this element. */
Location getLocation() { xmllocations(this, result) }
@@ -32,13 +32,16 @@ class XMLLocatable extends @xmllocatable, TXmlLocatable {
string toString() { none() } // overridden in subclasses
}
+/** DEPRECATED: Alias for XmlLocatable */
+deprecated class XMLLocatable = XmlLocatable;
+
/**
- * An `XMLParent` is either an `XMLElement` or an `XMLFile`,
+ * An `XmlParent` is either an `XmlElement` or an `XmlFile`,
* both of which can contain other elements.
*/
-class XMLParent extends @xmlparent {
- XMLParent() {
- // explicitly restrict `this` to be either an `XMLElement` or an `XMLFile`;
+class XmlParent extends @xmlparent {
+ XmlParent() {
+ // explicitly restrict `this` to be either an `XmlElement` or an `XmlFile`;
// the type `@xmlparent` currently also includes non-XML files
this instanceof @xmlelement or xmlEncoding(this, _)
}
@@ -50,28 +53,28 @@ class XMLParent extends @xmlparent {
string getName() { none() } // overridden in subclasses
/** Gets the file to which this XML parent belongs. */
- XMLFile getFile() { result = this or xmlElements(this, _, _, _, result) }
+ XmlFile getFile() { result = this or xmlElements(this, _, _, _, result) }
/** Gets the child element at a specified index of this XML parent. */
- XMLElement getChild(int index) { xmlElements(result, _, this, index, _) }
+ XmlElement getChild(int index) { xmlElements(result, _, this, index, _) }
/** Gets a child element of this XML parent. */
- XMLElement getAChild() { xmlElements(result, _, this, _, _) }
+ XmlElement getAChild() { xmlElements(result, _, this, _, _) }
/** Gets a child element of this XML parent with the given `name`. */
- XMLElement getAChild(string name) { xmlElements(result, _, this, _, _) and result.hasName(name) }
+ XmlElement getAChild(string name) { xmlElements(result, _, this, _, _) and result.hasName(name) }
/** Gets a comment that is a child of this XML parent. */
- XMLComment getAComment() { xmlComments(result, _, this, _) }
+ XmlComment getAComment() { xmlComments(result, _, this, _) }
/** Gets a character sequence that is a child of this XML parent. */
- XMLCharacters getACharactersSet() { xmlChars(result, _, this, _, _, _) }
+ XmlCharacters getACharactersSet() { xmlChars(result, _, this, _, _, _) }
- /** Gets the depth in the tree. (Overridden in XMLElement.) */
+ /** Gets the depth in the tree. (Overridden in XmlElement.) */
int getDepth() { result = 0 }
/** Gets the number of child XML elements of this XML parent. */
- int getNumberOfChildren() { result = count(XMLElement e | xmlElements(e, _, this, _, _)) }
+ int getNumberOfChildren() { result = count(XmlElement e | xmlElements(e, _, this, _, _)) }
/** Gets the number of places in the body of this XML parent where text occurs. */
int getNumberOfCharacterSets() { result = count(int pos | xmlChars(_, _, this, pos, _, _)) }
@@ -92,9 +95,12 @@ class XMLParent extends @xmlparent {
string toString() { result = this.getName() }
}
+/** DEPRECATED: Alias for XmlParent */
+deprecated class XMLParent = XmlParent;
+
/** An XML file. */
-class XMLFile extends XMLParent, File {
- XMLFile() { xmlEncoding(this, _) }
+class XmlFile extends XmlParent, File {
+ XmlFile() { xmlEncoding(this, _) }
/** Gets a printable representation of this XML file. */
override string toString() { result = this.getName() }
@@ -120,15 +126,21 @@ class XMLFile extends XMLParent, File {
string getEncoding() { xmlEncoding(this, result) }
/** Gets the XML file itself. */
- override XMLFile getFile() { result = this }
+ override XmlFile getFile() { result = this }
/** Gets a top-most element in an XML file. */
- XMLElement getARootElement() { result = this.getAChild() }
+ XmlElement getARootElement() { result = this.getAChild() }
/** Gets a DTD associated with this XML file. */
- XMLDTD getADTD() { xmlDTDs(result, _, _, _, this) }
+ XmlDtd getADtd() { xmlDTDs(result, _, _, _, this) }
+
+ /** DEPRECATED: Alias for getADtd */
+ deprecated XmlDtd getADTD() { result = this.getADtd() }
}
+/** DEPRECATED: Alias for XmlFile */
+deprecated class XMLFile = XmlFile;
+
/**
* An XML document type definition (DTD).
*
@@ -140,7 +152,7 @@ class XMLFile extends XMLParent, File {
*
* ```
*/
-class XMLDTD extends XMLLocatable, @xmldtd {
+class XmlDtd extends XmlLocatable, @xmldtd {
/** Gets the name of the root element of this DTD. */
string getRoot() { xmlDTDs(this, result, _, _, _) }
@@ -154,7 +166,7 @@ class XMLDTD extends XMLLocatable, @xmldtd {
predicate isPublic() { not xmlDTDs(this, _, "", _, _) }
/** Gets the parent of this DTD. */
- XMLParent getParent() { xmlDTDs(this, _, _, _, result) }
+ XmlParent getParent() { xmlDTDs(this, _, _, _, result) }
override string toString() {
this.isPublic() and
@@ -165,6 +177,9 @@ class XMLDTD extends XMLLocatable, @xmldtd {
}
}
+/** DEPRECATED: Alias for XmlDtd */
+deprecated class XMLDTD = XmlDtd;
+
/**
* An XML element in an XML file.
*
@@ -176,7 +191,7 @@ class XMLDTD extends XMLLocatable, @xmldtd {
*
* ```
*/
-class XMLElement extends @xmlelement, XMLParent, XMLLocatable {
+class XmlElement extends @xmlelement, XmlParent, XmlLocatable {
/** Holds if this XML element has the given `name`. */
predicate hasName(string name) { name = this.getName() }
@@ -184,10 +199,10 @@ class XMLElement extends @xmlelement, XMLParent, XMLLocatable {
override string getName() { xmlElements(this, result, _, _, _) }
/** Gets the XML file in which this XML element occurs. */
- override XMLFile getFile() { xmlElements(this, _, _, _, result) }
+ override XmlFile getFile() { xmlElements(this, _, _, _, result) }
/** Gets the parent of this XML element. */
- XMLParent getParent() { xmlElements(this, _, result, _, _) }
+ XmlParent getParent() { xmlElements(this, _, result, _, _) }
/** Gets the index of this XML element among its parent's children. */
int getIndex() { xmlElements(this, _, _, result, _) }
@@ -196,7 +211,7 @@ class XMLElement extends @xmlelement, XMLParent, XMLLocatable {
predicate hasNamespace() { xmlHasNs(this, _, _) }
/** Gets the namespace of this XML element, if any. */
- XMLNamespace getNamespace() { xmlHasNs(this, result, _) }
+ XmlNamespace getNamespace() { xmlHasNs(this, result, _) }
/** Gets the index of this XML element among its parent's children. */
int getElementPositionIndex() { xmlElements(this, _, _, result, _) }
@@ -205,10 +220,10 @@ class XMLElement extends @xmlelement, XMLParent, XMLLocatable {
override int getDepth() { result = this.getParent().getDepth() + 1 }
/** Gets an XML attribute of this XML element. */
- XMLAttribute getAnAttribute() { result.getElement() = this }
+ XmlAttribute getAnAttribute() { result.getElement() = this }
/** Gets the attribute with the specified `name`, if any. */
- XMLAttribute getAttribute(string name) { result.getElement() = this and result.getName() = name }
+ XmlAttribute getAttribute(string name) { result.getElement() = this and result.getName() = name }
/** Holds if this XML element has an attribute with the specified `name`. */
predicate hasAttribute(string name) { exists(this.getAttribute(name)) }
@@ -220,6 +235,9 @@ class XMLElement extends @xmlelement, XMLParent, XMLLocatable {
override string toString() { result = this.getName() }
}
+/** DEPRECATED: Alias for XmlElement */
+deprecated class XMLElement = XmlElement;
+
/**
* An attribute that occurs inside an XML element.
*
@@ -230,18 +248,18 @@ class XMLElement extends @xmlelement, XMLParent, XMLLocatable {
* android:versionCode="1"
* ```
*/
-class XMLAttribute extends @xmlattribute, XMLLocatable {
+class XmlAttribute extends @xmlattribute, XmlLocatable {
/** Gets the name of this attribute. */
string getName() { xmlAttrs(this, _, result, _, _, _) }
/** Gets the XML element to which this attribute belongs. */
- XMLElement getElement() { xmlAttrs(this, result, _, _, _, _) }
+ XmlElement getElement() { xmlAttrs(this, result, _, _, _, _) }
/** Holds if this attribute has a namespace. */
predicate hasNamespace() { xmlHasNs(this, _, _) }
/** Gets the namespace of this attribute, if any. */
- XMLNamespace getNamespace() { xmlHasNs(this, result, _) }
+ XmlNamespace getNamespace() { xmlHasNs(this, result, _) }
/** Gets the value of this attribute. */
string getValue() { xmlAttrs(this, _, _, result, _, _) }
@@ -250,6 +268,9 @@ class XMLAttribute extends @xmlattribute, XMLLocatable {
override string toString() { result = this.getName() + "=" + this.getValue() }
}
+/** DEPRECATED: Alias for XmlAttribute */
+deprecated class XMLAttribute = XmlAttribute;
+
/**
* A namespace used in an XML file.
*
@@ -259,23 +280,29 @@ class XMLAttribute extends @xmlattribute, XMLLocatable {
* xmlns:android="http://schemas.android.com/apk/res/android"
* ```
*/
-class XMLNamespace extends XMLLocatable, @xmlnamespace {
+class XmlNamespace extends XmlLocatable, @xmlnamespace {
/** Gets the prefix of this namespace. */
string getPrefix() { xmlNs(this, result, _, _) }
/** Gets the URI of this namespace. */
- string getURI() { xmlNs(this, _, result, _) }
+ string getUri() { xmlNs(this, _, result, _) }
+
+ /** DEPRECATED: Alias for getUri */
+ deprecated string getURI() { result = this.getUri() }
/** Holds if this namespace has no prefix. */
predicate isDefault() { this.getPrefix() = "" }
override string toString() {
- this.isDefault() and result = this.getURI()
+ this.isDefault() and result = this.getUri()
or
- not this.isDefault() and result = this.getPrefix() + ":" + this.getURI()
+ not this.isDefault() and result = this.getPrefix() + ":" + this.getUri()
}
}
+/** DEPRECATED: Alias for XmlNamespace */
+deprecated class XMLNamespace = XmlNamespace;
+
/**
* A comment in an XML file.
*
@@ -285,17 +312,20 @@ class XMLNamespace extends XMLLocatable, @xmlnamespace {
*
* ```
*/
-class XMLComment extends @xmlcomment, XMLLocatable {
+class XmlComment extends @xmlcomment, XmlLocatable {
/** Gets the text content of this XML comment. */
string getText() { xmlComments(this, result, _, _) }
/** Gets the parent of this XML comment. */
- XMLParent getParent() { xmlComments(this, _, result, _) }
+ XmlParent getParent() { xmlComments(this, _, result, _) }
/** Gets a printable representation of this XML comment. */
override string toString() { result = this.getText() }
}
+/** DEPRECATED: Alias for XmlComment */
+deprecated class XMLComment = XmlComment;
+
/**
* A sequence of characters that occurs between opening and
* closing tags of an XML element, excluding other elements.
@@ -306,12 +336,12 @@ class XMLComment extends @xmlcomment, XMLLocatable {
* This is a sequence of characters.
* ```
*/
-class XMLCharacters extends @xmlcharacters, XMLLocatable {
+class XmlCharacters extends @xmlcharacters, XmlLocatable {
/** Gets the content of this character sequence. */
string getCharacters() { xmlChars(this, result, _, _, _, _) }
/** Gets the parent of this character sequence. */
- XMLParent getParent() { xmlChars(this, _, result, _, _, _) }
+ XmlParent getParent() { xmlChars(this, _, result, _, _, _) }
/** Holds if this character sequence is CDATA. */
predicate isCDATA() { xmlChars(this, _, _, _, 1, _) }
@@ -319,3 +349,6 @@ class XMLCharacters extends @xmlcharacters, XMLLocatable {
/** Gets a printable representation of this XML character sequence. */
override string toString() { result = this.getCharacters() }
}
+
+/** DEPRECATED: Alias for XmlCharacters */
+deprecated class XMLCharacters = XmlCharacters;
diff --git a/csharp/ql/lib/semmle/code/csharp/controlflow/internal/pressa/SsaImplCommon.qll b/csharp/ql/lib/semmle/code/csharp/controlflow/internal/pressa/SsaImplCommon.qll
index eed0d050735..659940def50 100644
--- a/csharp/ql/lib/semmle/code/csharp/controlflow/internal/pressa/SsaImplCommon.qll
+++ b/csharp/ql/lib/semmle/code/csharp/controlflow/internal/pressa/SsaImplCommon.qll
@@ -39,7 +39,7 @@ private module Liveness {
/**
* Holds if the `i`th node of basic block `bb` is a reference to `v` of kind `k`.
*/
- private predicate ref(BasicBlock bb, int i, SourceVariable v, RefKind k) {
+ predicate ref(BasicBlock bb, int i, SourceVariable v, RefKind k) {
exists(boolean certain | variableRead(bb, i, v, certain) | k = Read(certain))
or
exists(boolean certain | variableWrite(bb, i, v, certain) | k = Write(certain))
@@ -76,6 +76,10 @@ private module Liveness {
not result + 1 = refRank(bb, _, v, _)
}
+ predicate lastRefIsRead(BasicBlock bb, SourceVariable v) {
+ maxRefRank(bb, v) = refRank(bb, _, v, Read(_))
+ }
+
/**
* Gets the (1-based) rank of the first reference to `v` inside basic block `bb`
* that is either a read or a certain write.
@@ -185,23 +189,29 @@ newtype TDefinition =
private module SsaDefReaches {
newtype TSsaRefKind =
- SsaRead() or
+ SsaActualRead() or
+ SsaPhiRead() or
SsaDef()
+ class SsaRead = SsaActualRead or SsaPhiRead;
+
/**
* A classification of SSA variable references into reads and definitions.
*/
class SsaRefKind extends TSsaRefKind {
string toString() {
- this = SsaRead() and
- result = "SsaRead"
+ this = SsaActualRead() and
+ result = "SsaActualRead"
+ or
+ this = SsaPhiRead() and
+ result = "SsaPhiRead"
or
this = SsaDef() and
result = "SsaDef"
}
int getOrder() {
- this = SsaRead() and
+ this instanceof SsaRead and
result = 0
or
this = SsaDef() and
@@ -209,6 +219,80 @@ private module SsaDefReaches {
}
}
+ /**
+ * Holds if `bb` is in the dominance frontier of a block containing a
+ * read of `v`.
+ */
+ pragma[nomagic]
+ private predicate inReadDominanceFrontier(BasicBlock bb, SourceVariable v) {
+ exists(BasicBlock readbb | inDominanceFrontier(readbb, bb) |
+ lastRefIsRead(readbb, v)
+ or
+ phiRead(readbb, v)
+ )
+ }
+
+ /**
+ * Holds if a phi-read node should be inserted for variable `v` at the beginning
+ * of basic block `bb`.
+ *
+ * Phi-read nodes are like normal phi nodes, but they are inserted based on reads
+ * instead of writes, and only if the dominance-frontier block does not already
+ * contain a reference (read or write) to `v`. Unlike normal phi nodes, this is
+ * an internal implementation detail that is not exposed.
+ *
+ * The motivation for adding phi-reads is to improve performance of the use-use
+ * calculation in cases where there is a large number of reads that can reach the
+ * same join-point, and from there reach a large number of basic blocks. Example:
+ *
+ * ```cs
+ * if (a)
+ * use(x);
+ * else if (b)
+ * use(x);
+ * else if (c)
+ * use(x);
+ * else if (d)
+ * use(x);
+ * // many more ifs ...
+ *
+ * // phi-read for `x` inserted here
+ *
+ * // program not mentioning `x`, with large basic block graph
+ *
+ * use(x);
+ * ```
+ *
+ * Without phi-reads, the analysis has to replicate reachability for each of
+ * the guarded uses of `x`. However, with phi-reads, the analysis will limit
+ * each conditional use of `x` to reach the basic block containing the phi-read
+ * node for `x`, and only that basic block will have to compute reachability
+ * through the remainder of the large program.
+ *
+ * Like normal reads, each phi-read node `phi-read` can be reached from exactly
+ * one SSA definition (without passing through another definition): Assume, for
+ * the sake of contradiction, that there are two reaching definitions `def1` and
+ * `def2`. Now, if both `def1` and `def2` dominate `phi-read`, then the nearest
+ * dominating definition will prevent the other from reaching `phi-read`. So, at
+ * least one of `def1` and `def2` cannot dominate `phi-read`; assume it is `def1`.
+ * Then `def1` must go through one of its dominance-frontier blocks in order to
+ * reach `phi-read`. However, such a block will always start with a (normal) phi
+ * node, which contradicts reachability.
+ *
+ * Also, like normal reads, the unique SSA definition `def` that reaches `phi-read`,
+ * will dominate `phi-read`. Assuming it doesn't means that the path from `def`
+ * to `phi-read` goes through a dominance-frontier block, and hence a phi node,
+ * which contradicts reachability.
+ */
+ pragma[nomagic]
+ predicate phiRead(BasicBlock bb, SourceVariable v) {
+ inReadDominanceFrontier(bb, v) and
+ liveAtEntry(bb, v) and
+ // only if there are no other references to `v` inside `bb`
+ not ref(bb, _, v, _) and
+ not exists(Definition def | def.definesAt(v, bb, _))
+ }
+
/**
* Holds if the `i`th node of basic block `bb` is a reference to `v`,
* either a read (when `k` is `SsaRead()`) or an SSA definition (when `k`
@@ -216,11 +300,16 @@ private module SsaDefReaches {
*
* Unlike `Liveness::ref`, this includes `phi` nodes.
*/
+ pragma[nomagic]
predicate ssaRef(BasicBlock bb, int i, SourceVariable v, SsaRefKind k) {
variableRead(bb, i, v, _) and
- k = SsaRead()
+ k = SsaActualRead()
or
- exists(Definition def | def.definesAt(v, bb, i)) and
+ phiRead(bb, v) and
+ i = -1 and
+ k = SsaPhiRead()
+ or
+ any(Definition def).definesAt(v, bb, i) and
k = SsaDef()
}
@@ -273,7 +362,7 @@ private module SsaDefReaches {
)
or
ssaDefReachesRank(bb, def, rnk - 1, v) and
- rnk = ssaRefRank(bb, _, v, SsaRead())
+ rnk = ssaRefRank(bb, _, v, any(SsaRead k))
}
/**
@@ -283,7 +372,7 @@ private module SsaDefReaches {
predicate ssaDefReachesReadWithinBlock(SourceVariable v, Definition def, BasicBlock bb, int i) {
exists(int rnk |
ssaDefReachesRank(bb, def, rnk, v) and
- rnk = ssaRefRank(bb, i, v, SsaRead())
+ rnk = ssaRefRank(bb, i, v, any(SsaRead k))
)
}
@@ -309,45 +398,94 @@ private module SsaDefReaches {
ssaDefRank(def, v, bb, i, _) = maxSsaRefRank(bb, v)
}
- predicate defOccursInBlock(Definition def, BasicBlock bb, SourceVariable v) {
- exists(ssaDefRank(def, v, bb, _, _))
+ predicate defOccursInBlock(Definition def, BasicBlock bb, SourceVariable v, SsaRefKind k) {
+ exists(ssaDefRank(def, v, bb, _, k))
}
pragma[noinline]
private predicate ssaDefReachesThroughBlock(Definition def, BasicBlock bb) {
ssaDefReachesEndOfBlock(bb, def, _) and
- not defOccursInBlock(_, bb, def.getSourceVariable())
+ not defOccursInBlock(_, bb, def.getSourceVariable(), _)
}
/**
* Holds if `def` is accessed in basic block `bb1` (either a read or a write),
- * `bb2` is a transitive successor of `bb1`, `def` is live at the end of `bb1`,
- * and the underlying variable for `def` is neither read nor written in any block
- * on the path between `bb1` and `bb2`.
+ * `bb2` is a transitive successor of `bb1`, `def` is live at the end of _some_
+ * predecessor of `bb2`, and the underlying variable for `def` is neither read
+ * nor written in any block on the path between `bb1` and `bb2`.
+ *
+ * Phi reads are considered as normal reads for this predicate.
*/
- predicate varBlockReaches(Definition def, BasicBlock bb1, BasicBlock bb2) {
- defOccursInBlock(def, bb1, _) and
+ pragma[nomagic]
+ private predicate varBlockReachesInclPhiRead(Definition def, BasicBlock bb1, BasicBlock bb2) {
+ defOccursInBlock(def, bb1, _, _) and
bb2 = getABasicBlockSuccessor(bb1)
or
exists(BasicBlock mid |
- varBlockReaches(def, bb1, mid) and
+ varBlockReachesInclPhiRead(def, bb1, mid) and
ssaDefReachesThroughBlock(def, mid) and
bb2 = getABasicBlockSuccessor(mid)
)
}
+ pragma[nomagic]
+ private predicate phiReadStep(Definition def, SourceVariable v, BasicBlock bb1, BasicBlock bb2) {
+ varBlockReachesInclPhiRead(def, bb1, bb2) and
+ defOccursInBlock(def, bb2, v, SsaPhiRead())
+ }
+
+ pragma[nomagic]
+ private predicate varBlockReachesExclPhiRead(Definition def, BasicBlock bb1, BasicBlock bb2) {
+ varBlockReachesInclPhiRead(pragma[only_bind_into](def), bb1, pragma[only_bind_into](bb2)) and
+ ssaRef(bb2, _, def.getSourceVariable(), [SsaActualRead().(TSsaRefKind), SsaDef()])
+ or
+ exists(BasicBlock mid |
+ varBlockReachesExclPhiRead(def, mid, bb2) and
+ phiReadStep(def, _, bb1, mid)
+ )
+ }
+
/**
* Holds if `def` is accessed in basic block `bb1` (either a read or a write),
- * `def` is read at index `i2` in basic block `bb2`, `bb2` is in a transitive
- * successor block of `bb1`, and `def` is neither read nor written in any block
- * on a path between `bb1` and `bb2`.
+ * the underlying variable `v` of `def` is accessed in basic block `bb2`
+ * (either a read or a write), `bb2` is a transitive successor of `bb1`, and
+ * `v` is neither read nor written in any block on the path between `bb1`
+ * and `bb2`.
*/
+ pragma[nomagic]
+ predicate varBlockReaches(Definition def, BasicBlock bb1, BasicBlock bb2) {
+ varBlockReachesExclPhiRead(def, bb1, bb2) and
+ not defOccursInBlock(def, bb1, _, SsaPhiRead())
+ }
+
+ pragma[nomagic]
predicate defAdjacentRead(Definition def, BasicBlock bb1, BasicBlock bb2, int i2) {
varBlockReaches(def, bb1, bb2) and
- ssaRefRank(bb2, i2, def.getSourceVariable(), SsaRead()) = 1
+ ssaRefRank(bb2, i2, def.getSourceVariable(), SsaActualRead()) = 1
+ }
+
+ /**
+ * Holds if `def` is accessed in basic block `bb` (either a read or a write),
+ * `bb1` can reach a transitive successor `bb2` where `def` is no longer live,
+ * and `v` is neither read nor written in any block on the path between `bb`
+ * and `bb2`.
+ */
+ pragma[nomagic]
+ predicate varBlockReachesExit(Definition def, BasicBlock bb) {
+ exists(BasicBlock bb2 | varBlockReachesInclPhiRead(def, bb, bb2) |
+ not defOccursInBlock(def, bb2, _, _) and
+ not ssaDefReachesEndOfBlock(bb2, def, _)
+ )
+ or
+ exists(BasicBlock mid |
+ varBlockReachesExit(def, mid) and
+ phiReadStep(def, _, bb, mid)
+ )
}
}
+predicate phiReadExposedForTesting = phiRead/2;
+
private import SsaDefReaches
pragma[nomagic]
@@ -365,7 +503,8 @@ predicate liveThrough(BasicBlock bb, SourceVariable v) {
*/
pragma[nomagic]
predicate ssaDefReachesEndOfBlock(BasicBlock bb, Definition def, SourceVariable v) {
- exists(int last | last = maxSsaRefRank(bb, v) |
+ exists(int last |
+ last = maxSsaRefRank(pragma[only_bind_into](bb), pragma[only_bind_into](v)) and
ssaDefReachesRank(bb, def, last, v) and
liveAtExit(bb, v)
)
@@ -405,7 +544,7 @@ pragma[nomagic]
predicate ssaDefReachesRead(SourceVariable v, Definition def, BasicBlock bb, int i) {
ssaDefReachesReadWithinBlock(v, def, bb, i)
or
- variableRead(bb, i, v, _) and
+ ssaRef(bb, i, v, any(SsaRead k)) and
ssaDefReachesEndOfBlock(getABasicBlockPredecessor(bb), def, v) and
not ssaDefReachesReadWithinBlock(v, _, bb, i)
}
@@ -421,7 +560,7 @@ pragma[nomagic]
predicate adjacentDefRead(Definition def, BasicBlock bb1, int i1, BasicBlock bb2, int i2) {
exists(int rnk |
rnk = ssaDefRank(def, _, bb1, i1, _) and
- rnk + 1 = ssaDefRank(def, _, bb1, i2, SsaRead()) and
+ rnk + 1 = ssaDefRank(def, _, bb1, i2, SsaActualRead()) and
variableRead(bb1, i2, _, _) and
bb2 = bb1
)
@@ -538,18 +677,15 @@ predicate lastRefRedefNoUncertainReads(Definition def, BasicBlock bb, int i, Def
*/
pragma[nomagic]
predicate lastRef(Definition def, BasicBlock bb, int i) {
+ // Can reach another definition
lastRefRedef(def, bb, i, _)
or
- lastSsaRef(def, _, bb, i) and
- (
+ exists(SourceVariable v | lastSsaRef(def, v, bb, i) |
// Can reach exit directly
bb instanceof ExitBasicBlock
or
// Can reach a block using one or more steps, where `def` is no longer live
- exists(BasicBlock bb2 | varBlockReaches(def, bb, bb2) |
- not defOccursInBlock(def, bb2, _) and
- not ssaDefReachesEndOfBlock(bb2, def, _)
- )
+ varBlockReachesExit(def, bb)
)
}
diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/CallContext.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/CallContext.qll
deleted file mode 100755
index 47ff7f96111..00000000000
--- a/csharp/ql/lib/semmle/code/csharp/dataflow/CallContext.qll
+++ /dev/null
@@ -1,96 +0,0 @@
-/**
- * DEPRECATED.
- *
- * Provides classes for data flow call contexts.
- */
-
-import csharp
-private import semmle.code.csharp.dataflow.internal.DelegateDataFlow
-private import semmle.code.csharp.dispatch.Dispatch
-
-// Internal representation of call contexts
-cached
-private newtype TCallContext =
- TEmptyCallContext() or
- TArgNonDelegateCallContext(Expr arg) { exists(DispatchCall dc | arg = dc.getArgument(_)) } or
- TArgDelegateCallContext(DelegateCall dc, int i) { exists(dc.getArgument(i)) } or
- TArgFunctionPointerCallContext(FunctionPointerCall fptrc, int i) { exists(fptrc.getArgument(i)) }
-
-/**
- * DEPRECATED.
- *
- * A call context.
- *
- * A call context records the origin of data flow into callables.
- */
-deprecated class CallContext extends TCallContext {
- /** Gets a textual representation of this call context. */
- string toString() { none() }
-
- /** Gets the location of this call context, if any. */
- Location getLocation() { none() }
-}
-
-/** DEPRECATED. An empty call context. */
-deprecated class EmptyCallContext extends CallContext, TEmptyCallContext {
- override string toString() { result = "" }
-
- override EmptyLocation getLocation() { any() }
-}
-
-/**
- * DEPRECATED.
- *
- * An argument call context, that is a call argument through which data flows
- * into a callable.
- */
-abstract deprecated class ArgumentCallContext extends CallContext {
- /**
- * Holds if this call context represents the argument at position `i` of the
- * call expression `call`.
- */
- abstract predicate isArgument(Expr call, int i);
-}
-
-/** DEPRECATED. An argument of a non-delegate call. */
-deprecated class NonDelegateCallArgumentCallContext extends ArgumentCallContext,
- TArgNonDelegateCallContext {
- Expr arg;
-
- NonDelegateCallArgumentCallContext() { this = TArgNonDelegateCallContext(arg) }
-
- override predicate isArgument(Expr call, int i) {
- exists(DispatchCall dc | arg = dc.getArgument(i) | call = dc.getCall())
- }
-
- override string toString() { result = arg.toString() }
-
- override Location getLocation() { result = arg.getLocation() }
-}
-
-/** DEPRECATED. An argument of a delegate or function pointer call. */
-deprecated class DelegateLikeCallArgumentCallContext extends ArgumentCallContext {
- DelegateLikeCall dc;
- int arg;
-
- DelegateLikeCallArgumentCallContext() {
- this = TArgDelegateCallContext(dc, arg) or this = TArgFunctionPointerCallContext(dc, arg)
- }
-
- override predicate isArgument(Expr call, int i) {
- call = dc and
- i = arg
- }
-
- override string toString() { result = dc.getArgument(arg).toString() }
-
- override Location getLocation() { result = dc.getArgument(arg).getLocation() }
-}
-
-/** DEPRECATED. An argument of a delegate call. */
-deprecated class DelegateCallArgumentCallContext extends DelegateLikeCallArgumentCallContext,
- TArgDelegateCallContext { }
-
-/** DEPRECATED. An argument of a function pointer call. */
-deprecated class FunctionPointerCallArgumentCallContext extends DelegateLikeCallArgumentCallContext,
- TArgFunctionPointerCallContext { }
diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/ExternalFlow.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/ExternalFlow.qll
index 904ac79f009..9285ba2f4a7 100644
--- a/csharp/ql/lib/semmle/code/csharp/dataflow/ExternalFlow.qll
+++ b/csharp/ql/lib/semmle/code/csharp/dataflow/ExternalFlow.qll
@@ -5,12 +5,13 @@
*
* The CSV specification has the following columns:
* - Sources:
- * `namespace; type; subtypes; name; signature; ext; output; kind`
+ * `namespace; type; subtypes; name; signature; ext; output; kind; provenance`
* - Sinks:
- * `namespace; type; subtypes; name; signature; ext; input; kind`
+ * `namespace; type; subtypes; name; signature; ext; input; kind; provenance`
* - Summaries:
- * `namespace; type; subtypes; name; signature; ext; input; output; kind`
- *
+ * `namespace; type; subtypes; name; signature; ext; input; output; kind; provenance`
+ * - Negative Summaries:
+ * `namespace; type; name; signature; provenance`
* The interpretation of a row is similar to API-graphs with a left-to-right
* reading.
* 1. The `namespace` column selects a namespace.
@@ -163,11 +164,27 @@ class SummaryModelCsv extends Unit {
abstract predicate row(string row);
}
-private predicate sourceModel(string row) { any(SourceModelCsv s).row(row) }
+/**
+ * A unit class for adding negative summary model rows.
+ *
+ * Extend this class to add additional flow summary definitions.
+ */
+class NegativeSummaryModelCsv extends Unit {
+ /** Holds if `row` specifies a negative summary definition. */
+ abstract predicate row(string row);
+}
-private predicate sinkModel(string row) { any(SinkModelCsv s).row(row) }
+/** Holds if `row` is a source model. */
+predicate sourceModel(string row) { any(SourceModelCsv s).row(row) }
-private predicate summaryModel(string row) { any(SummaryModelCsv s).row(row) }
+/** Holds if `row` is a sink model. */
+predicate sinkModel(string row) { any(SinkModelCsv s).row(row) }
+
+/** Holds if `row` is a summary model. */
+predicate summaryModel(string row) { any(SummaryModelCsv s).row(row) }
+
+/** Holds if `row` is a negative summary model. */
+predicate negativeSummaryModel(string row) { any(NegativeSummaryModelCsv s).row(row) }
/** Holds if a source model exists for the given parameters. */
predicate sourceModel(
@@ -230,6 +247,20 @@ predicate summaryModel(
)
}
+/** Holds if a summary model exists indicating there is no flow for the given parameters. */
+predicate negativeSummaryModel(
+ string namespace, string type, string name, string signature, string provenance
+) {
+ exists(string row |
+ negativeSummaryModel(row) and
+ row.splitAt(";", 0) = namespace and
+ row.splitAt(";", 1) = type and
+ row.splitAt(";", 2) = name and
+ row.splitAt(";", 3) = signature and
+ row.splitAt(";", 4) = provenance
+ )
+}
+
private predicate relevantNamespace(string namespace) {
sourceModel(namespace, _, _, _, _, _, _, _, _) or
sinkModel(namespace, _, _, _, _, _, _, _, _) or
@@ -286,38 +317,7 @@ predicate modelCoverage(string namespace, int namespaces, string kind, string pa
/** Provides a query predicate to check the CSV data for validation errors. */
module CsvValidation {
- /** Holds if some row in a CSV-based flow model appears to contain typos. */
- query predicate invalidModelRow(string msg) {
- exists(
- string pred, string namespace, string type, string name, string signature, string ext,
- string provenance
- |
- sourceModel(namespace, type, _, name, signature, ext, _, _, provenance) and pred = "source"
- or
- sinkModel(namespace, type, _, name, signature, ext, _, _, provenance) and pred = "sink"
- or
- summaryModel(namespace, type, _, name, signature, ext, _, _, _, provenance) and
- pred = "summary"
- |
- not namespace.regexpMatch("[a-zA-Z0-9_\\.]+") and
- msg = "Dubious namespace \"" + namespace + "\" in " + pred + " model."
- or
- not type.regexpMatch("[a-zA-Z0-9_<>,\\+]+") and
- msg = "Dubious type \"" + type + "\" in " + pred + " model."
- or
- not name.regexpMatch("[a-zA-Z0-9_<>,]*") and
- msg = "Dubious member name \"" + name + "\" in " + pred + " model."
- or
- not signature.regexpMatch("|\\([a-zA-Z0-9_<>\\.\\+\\*,\\[\\]]*\\)") and
- msg = "Dubious signature \"" + signature + "\" in " + pred + " model."
- or
- not ext.regexpMatch("|Attribute") and
- msg = "Unrecognized extra API graph element \"" + ext + "\" in " + pred + " model."
- or
- not provenance = ["manual", "generated"] and
- msg = "Unrecognized provenance description \"" + provenance + "\" in " + pred + " model."
- )
- or
+ private string getInvalidModelInput() {
exists(string pred, AccessPath input, string part |
sinkModel(_, _, _, _, _, _, input, _, _) and pred = "sink"
or
@@ -332,9 +332,11 @@ module CsvValidation {
part = input.getToken(_) and
parseParam(part, _)
) and
- msg = "Unrecognized input specification \"" + part + "\" in " + pred + " model."
+ result = "Unrecognized input specification \"" + part + "\" in " + pred + " model."
)
- or
+ }
+
+ private string getInvalidModelOutput() {
exists(string pred, string output, string part |
sourceModel(_, _, _, _, _, _, output, _, _) and pred = "source"
or
@@ -343,58 +345,123 @@ module CsvValidation {
invalidSpecComponent(output, part) and
not part = "" and
not (part = ["Argument", "Parameter"] and pred = "source") and
- msg = "Unrecognized output specification \"" + part + "\" in " + pred + " model."
+ result = "Unrecognized output specification \"" + part + "\" in " + pred + " model."
)
- or
- exists(string pred, string row, int expect |
- sourceModel(row) and expect = 9 and pred = "source"
- or
- sinkModel(row) and expect = 9 and pred = "sink"
- or
- summaryModel(row) and expect = 10 and pred = "summary"
- |
- exists(int cols |
- cols = 1 + max(int n | exists(row.splitAt(";", n))) and
- cols != expect and
- msg =
- "Wrong number of columns in " + pred + " model row, expected " + expect + ", got " + cols +
- " in " + row + "."
- )
- or
- exists(string b |
- b = row.splitAt(";", 2) and
- not b = ["true", "false"] and
- msg = "Invalid boolean \"" + b + "\" in " + pred + " model."
- )
- )
- or
+ }
+
+ private string getInvalidModelKind() {
exists(string row, string kind | summaryModel(row) |
kind = row.splitAt(";", 8) and
not kind = ["taint", "value"] and
- msg = "Invalid kind \"" + kind + "\" in summary model."
+ result = "Invalid kind \"" + kind + "\" in summary model."
)
or
exists(string row, string kind | sinkModel(row) |
kind = row.splitAt(";", 7) and
not kind = ["code", "sql", "xss", "remote", "html"] and
not kind.matches("encryption-%") and
- msg = "Invalid kind \"" + kind + "\" in sink model."
+ result = "Invalid kind \"" + kind + "\" in sink model."
)
or
exists(string row, string kind | sourceModel(row) |
kind = row.splitAt(";", 7) and
- not kind = "local" and
- msg = "Invalid kind \"" + kind + "\" in source model."
+ not kind = ["local", "file"] and
+ result = "Invalid kind \"" + kind + "\" in source model."
)
}
+
+ private string getInvalidModelSubtype() {
+ exists(string pred, string row |
+ sourceModel(row) and pred = "source"
+ or
+ sinkModel(row) and pred = "sink"
+ or
+ summaryModel(row) and pred = "summary"
+ |
+ exists(string b |
+ b = row.splitAt(";", 2) and
+ not b = ["true", "false"] and
+ result = "Invalid boolean \"" + b + "\" in " + pred + " model."
+ )
+ )
+ }
+
+ private string getInvalidModelColumnCount() {
+ exists(string pred, string row, int expect |
+ sourceModel(row) and expect = 9 and pred = "source"
+ or
+ sinkModel(row) and expect = 9 and pred = "sink"
+ or
+ summaryModel(row) and expect = 10 and pred = "summary"
+ or
+ negativeSummaryModel(row) and expect = 5 and pred = "negative summary"
+ |
+ exists(int cols |
+ cols = 1 + max(int n | exists(row.splitAt(";", n))) and
+ cols != expect and
+ result =
+ "Wrong number of columns in " + pred + " model row, expected " + expect + ", got " + cols +
+ " in " + row + "."
+ )
+ )
+ }
+
+ private string getInvalidModelSignature() {
+ exists(
+ string pred, string namespace, string type, string name, string signature, string ext,
+ string provenance
+ |
+ sourceModel(namespace, type, _, name, signature, ext, _, _, provenance) and pred = "source"
+ or
+ sinkModel(namespace, type, _, name, signature, ext, _, _, provenance) and pred = "sink"
+ or
+ summaryModel(namespace, type, _, name, signature, ext, _, _, _, provenance) and
+ pred = "summary"
+ or
+ negativeSummaryModel(namespace, type, name, signature, provenance) and
+ ext = "" and
+ pred = "negative summary"
+ |
+ not namespace.regexpMatch("[a-zA-Z0-9_\\.]+") and
+ result = "Dubious namespace \"" + namespace + "\" in " + pred + " model."
+ or
+ not type.regexpMatch("[a-zA-Z0-9_<>,\\+]+") and
+ result = "Dubious type \"" + type + "\" in " + pred + " model."
+ or
+ not name.regexpMatch("[a-zA-Z0-9_<>,]*") and
+ result = "Dubious member name \"" + name + "\" in " + pred + " model."
+ or
+ not signature.regexpMatch("|\\([a-zA-Z0-9_<>\\.\\+\\*,\\[\\]]*\\)") and
+ result = "Dubious signature \"" + signature + "\" in " + pred + " model."
+ or
+ not ext.regexpMatch("|Attribute") and
+ result = "Unrecognized extra API graph element \"" + ext + "\" in " + pred + " model."
+ or
+ not provenance = ["manual", "generated"] and
+ result = "Unrecognized provenance description \"" + provenance + "\" in " + pred + " model."
+ )
+ }
+
+ /** Holds if some row in a CSV-based flow model appears to contain typos. */
+ query predicate invalidModelRow(string msg) {
+ msg =
+ [
+ getInvalidModelSignature(), getInvalidModelInput(), getInvalidModelOutput(),
+ getInvalidModelSubtype(), getInvalidModelColumnCount(), getInvalidModelKind()
+ ]
+ }
}
private predicate elementSpec(
string namespace, string type, boolean subtypes, string name, string signature, string ext
) {
- sourceModel(namespace, type, subtypes, name, signature, ext, _, _, _) or
- sinkModel(namespace, type, subtypes, name, signature, ext, _, _, _) or
+ sourceModel(namespace, type, subtypes, name, signature, ext, _, _, _)
+ or
+ sinkModel(namespace, type, subtypes, name, signature, ext, _, _, _)
+ or
summaryModel(namespace, type, subtypes, name, signature, ext, _, _, _, _)
+ or
+ negativeSummaryModel(namespace, type, name, signature, _) and ext = "" and subtypes = false
}
private predicate elementSpec(
@@ -508,7 +575,7 @@ private Element interpretElement0(
)
}
-/** Gets the source/sink/summary element corresponding to the supplied parameters. */
+/** Gets the source/sink/summary/negativesummary element corresponding to the supplied parameters. */
Element interpretElement(
string namespace, string type, boolean subtypes, string name, string signature, string ext
) {
diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/SSA.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/SSA.qll
index e900b36a023..f377d94e15c 100644
--- a/csharp/ql/lib/semmle/code/csharp/dataflow/SSA.qll
+++ b/csharp/ql/lib/semmle/code/csharp/dataflow/SSA.qll
@@ -163,10 +163,6 @@ module Ssa {
* (`ImplicitDefinition`), or a phi node (`PhiNode`).
*/
class Definition extends SsaImpl::Definition {
- final override SourceVariable getSourceVariable() {
- result = SsaImpl::Definition.super.getSourceVariable()
- }
-
/**
* Gets the control flow node of this SSA definition, if any. Phi nodes are
* examples of SSA definitions without a control flow node, as they are
@@ -177,7 +173,7 @@ module Ssa {
}
/**
- * Holds is this SSA definition is live at the end of basic block `bb`.
+ * Holds if this SSA definition is live at the end of basic block `bb`.
* That is, this definition reaches the end of basic block `bb`, at which
* point it is still live, without crossing another SSA definition of the
* same source variable.
diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/TaintTracking.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/TaintTracking.qll
old mode 100755
new mode 100644
diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/TaintTracking2.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/TaintTracking2.qll
old mode 100755
new mode 100644
diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/TaintTracking3.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/TaintTracking3.qll
old mode 100755
new mode 100644
diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/TaintTracking4.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/TaintTracking4.qll
old mode 100755
new mode 100644
diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/TaintTracking5.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/TaintTracking5.qll
old mode 100755
new mode 100644
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 76c018df03d..3b55d19456a 100644
--- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowDispatch.qll
+++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowDispatch.qll
@@ -105,15 +105,12 @@ class DataFlowSummarizedCallable instanceof FlowSummary::SummarizedCallable {
private module Cached {
/**
* The following heuristic is used to rank when to use source code or when to use summaries for DataFlowCallables.
- * 1. Use hand written summaries.
- * 2. Use source code.
- * 3. Use auto generated summaries.
+ * 1. Use hand written summaries or source code.
+ * 2. Use auto generated summaries.
*/
cached
newtype TDataFlowCallable =
- TDotNetCallable(DotNet::Callable c) {
- c.isUnboundDeclaration() and not c instanceof DataFlowSummarizedCallable
- } or
+ TDotNetCallable(DotNet::Callable c) { c.isUnboundDeclaration() } or
TSummarizedCallable(DataFlowSummarizedCallable sc)
cached
@@ -370,7 +367,7 @@ class NonDelegateDataFlowCall extends DataFlowCall, TNonDelegateCall {
override DataFlow::ExprNode getNode() { result.getControlFlowNode() = cfn }
override DataFlowCallable getEnclosingCallable() {
- result.getUnderlyingCallable() = cfn.getEnclosingCallable()
+ result.asCallable() = cfn.getEnclosingCallable()
}
override string toString() { result = cfn.toString() }
@@ -400,7 +397,7 @@ class ExplicitDelegateLikeDataFlowCall extends DelegateDataFlowCall, TExplicitDe
override DataFlow::ExprNode getNode() { result.getControlFlowNode() = cfn }
override DataFlowCallable getEnclosingCallable() {
- result.getUnderlyingCallable() = cfn.getEnclosingCallable()
+ result.asCallable() = cfn.getEnclosingCallable()
}
override string toString() { result = cfn.toString() }
@@ -419,14 +416,14 @@ class TransitiveCapturedDataFlowCall extends DataFlowCall, TTransitiveCapturedCa
TransitiveCapturedDataFlowCall() { this = TTransitiveCapturedCall(cfn, target) }
- override DataFlowCallable getARuntimeTarget() { result.getUnderlyingCallable() = target }
+ override DataFlowCallable getARuntimeTarget() { result.asCallable() = target }
override ControlFlow::Nodes::ElementNode getControlFlowNode() { result = cfn }
override DataFlow::ExprNode getNode() { none() }
override DataFlowCallable getEnclosingCallable() {
- result.getUnderlyingCallable() = cfn.getEnclosingCallable()
+ result.asCallable() = cfn.getEnclosingCallable()
}
override string toString() { result = "[transitive] " + cfn.toString() }
@@ -450,7 +447,7 @@ class CilDataFlowCall extends DataFlowCall, TCilCall {
override DataFlow::ExprNode getNode() { result.getExpr() = call }
override DataFlowCallable getEnclosingCallable() {
- result.getUnderlyingCallable() = call.getEnclosingCallable()
+ result.asCallable() = call.getEnclosingCallable()
}
override string toString() { result = call.toString() }
diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl.qll
index 340bfe280b7..468f8640a78 100644
--- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl.qll
+++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl.qll
@@ -3061,7 +3061,7 @@ private class PathNodeMid extends PathNodeImpl, TPathNodeMid {
else cc instanceof CallContextAny
) and
sc instanceof SummaryCtxNone and
- ap instanceof AccessPathNil
+ ap = TAccessPathNil(node.getDataFlowType())
}
predicate isAtSink() {
diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl2.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl2.qll
index 340bfe280b7..468f8640a78 100644
--- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl2.qll
+++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl2.qll
@@ -3061,7 +3061,7 @@ private class PathNodeMid extends PathNodeImpl, TPathNodeMid {
else cc instanceof CallContextAny
) and
sc instanceof SummaryCtxNone and
- ap instanceof AccessPathNil
+ ap = TAccessPathNil(node.getDataFlowType())
}
predicate isAtSink() {
diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl3.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl3.qll
index 340bfe280b7..468f8640a78 100644
--- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl3.qll
+++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl3.qll
@@ -3061,7 +3061,7 @@ private class PathNodeMid extends PathNodeImpl, TPathNodeMid {
else cc instanceof CallContextAny
) and
sc instanceof SummaryCtxNone and
- ap instanceof AccessPathNil
+ ap = TAccessPathNil(node.getDataFlowType())
}
predicate isAtSink() {
diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl4.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl4.qll
index 340bfe280b7..468f8640a78 100644
--- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl4.qll
+++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl4.qll
@@ -3061,7 +3061,7 @@ private class PathNodeMid extends PathNodeImpl, TPathNodeMid {
else cc instanceof CallContextAny
) and
sc instanceof SummaryCtxNone and
- ap instanceof AccessPathNil
+ ap = TAccessPathNil(node.getDataFlowType())
}
predicate isAtSink() {
diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl5.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl5.qll
index 340bfe280b7..468f8640a78 100644
--- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl5.qll
+++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl5.qll
@@ -3061,7 +3061,7 @@ private class PathNodeMid extends PathNodeImpl, TPathNodeMid {
else cc instanceof CallContextAny
) and
sc instanceof SummaryCtxNone and
- ap instanceof AccessPathNil
+ ap = TAccessPathNil(node.getDataFlowType())
}
predicate isAtSink() {
diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImplForContentDataFlow.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImplForContentDataFlow.qll
index 340bfe280b7..468f8640a78 100644
--- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImplForContentDataFlow.qll
+++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImplForContentDataFlow.qll
@@ -3061,7 +3061,7 @@ private class PathNodeMid extends PathNodeImpl, TPathNodeMid {
else cc instanceof CallContextAny
) and
sc instanceof SummaryCtxNone and
- ap instanceof AccessPathNil
+ ap = TAccessPathNil(node.getDataFlowType())
}
predicate isAtSink() {
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 3d013a504c5..e259e78669d 100644
--- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll
+++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll
@@ -65,9 +65,11 @@ abstract class NodeImpl extends Node {
private class ExprNodeImpl extends ExprNode, NodeImpl {
override DataFlowCallable getEnclosingCallableImpl() {
- result.getUnderlyingCallable() = this.getExpr().(CIL::Expr).getEnclosingCallable()
- or
- result.getUnderlyingCallable() = this.getControlFlowNodeImpl().getEnclosingCallable()
+ result.asCallable() =
+ [
+ this.getExpr().(CIL::Expr).getEnclosingCallable().(DotNet::Callable),
+ this.getControlFlowNodeImpl().getEnclosingCallable()
+ ]
}
override DotNet::Type getTypeImpl() {
@@ -852,7 +854,7 @@ class SsaDefinitionNode extends NodeImpl, TSsaDefinitionNode {
Ssa::Definition getDefinition() { result = def }
override DataFlowCallable getEnclosingCallableImpl() {
- result.getUnderlyingCallable() = def.getEnclosingCallable()
+ result.asCallable() = def.getEnclosingCallable()
}
override Type getTypeImpl() { result = def.getSourceVariable().getType() }
@@ -914,9 +916,7 @@ private module ParameterNodes {
callable = c.asCallable() and pos.isThisParameter()
}
- override DataFlowCallable getEnclosingCallableImpl() {
- result.getUnderlyingCallable() = callable
- }
+ override DataFlowCallable getEnclosingCallableImpl() { result.asCallable() = callable }
override Type getTypeImpl() { result = callable.getDeclaringType() }
@@ -963,7 +963,7 @@ private module ParameterNodes {
override predicate isParameterOf(DataFlowCallable c, ParameterPosition pos) {
pos.isImplicitCapturedParameterPosition(def.getSourceVariable().getAssignable()) and
- c.getUnderlyingCallable() = this.getEnclosingCallable()
+ c.asCallable() = this.getEnclosingCallable()
}
}
@@ -1078,7 +1078,7 @@ private module ArgumentNodes {
}
override DataFlowCallable getEnclosingCallableImpl() {
- result.getUnderlyingCallable() = cfn.getEnclosingCallable()
+ result.asCallable() = cfn.getEnclosingCallable()
}
override Type getTypeImpl() { result = v.getType() }
@@ -1107,7 +1107,7 @@ private module ArgumentNodes {
override ControlFlow::Node getControlFlowNodeImpl() { result = cfn }
override DataFlowCallable getEnclosingCallableImpl() {
- result.getUnderlyingCallable() = cfn.getEnclosingCallable()
+ result.asCallable() = cfn.getEnclosingCallable()
}
override Type getTypeImpl() { result = cfn.getElement().(Expr).getType() }
@@ -1146,7 +1146,7 @@ private module ArgumentNodes {
}
override DataFlowCallable getEnclosingCallableImpl() {
- result.getUnderlyingCallable() = callCfn.getEnclosingCallable()
+ result.asCallable() = callCfn.getEnclosingCallable()
}
override Type getTypeImpl() { result = this.getParameter().getType() }
@@ -1227,7 +1227,7 @@ private module ReturnNodes {
override NormalReturnKind getKind() { any() }
override DataFlowCallable getEnclosingCallableImpl() {
- result.getUnderlyingCallable() = yrs.getEnclosingCallable()
+ result.asCallable() = yrs.getEnclosingCallable()
}
override Type getTypeImpl() { result = yrs.getEnclosingCallable().getReturnType() }
@@ -1253,7 +1253,7 @@ private module ReturnNodes {
override NormalReturnKind getKind() { any() }
override DataFlowCallable getEnclosingCallableImpl() {
- result.getUnderlyingCallable() = expr.getEnclosingCallable()
+ result.asCallable() = expr.getEnclosingCallable()
}
override Type getTypeImpl() { result = expr.getEnclosingCallable().getReturnType() }
@@ -1330,9 +1330,10 @@ private module ReturnNodes {
* In this case we adjust it to instead be a return node.
*/
private predicate summaryPostUpdateNodeIsOutOrRef(SummaryNode n, Parameter p) {
- exists(ParameterNode pn |
+ exists(ParameterNodeImpl pn, DataFlowCallable c, ParameterPosition pos |
FlowSummaryImpl::Private::summaryPostUpdateNode(n, pn) and
- pn.getParameter() = p and
+ pn.isParameterOf(c, pos) and
+ p = c.asSummarizedCallable().getParameter(pos.getPosition()) and
p.isOutOrRef()
)
}
@@ -1903,7 +1904,7 @@ private module PostUpdateNodes {
}
override DataFlowCallable getEnclosingCallableImpl() {
- result.getUnderlyingCallable() = cfn.getEnclosingCallable()
+ result.asCallable() = cfn.getEnclosingCallable()
}
override DotNet::Type getTypeImpl() { result = oc.getType() }
@@ -1923,7 +1924,7 @@ private module PostUpdateNodes {
override ExprNode getPreUpdateNode() { cfn = result.getControlFlowNode() }
override DataFlowCallable getEnclosingCallableImpl() {
- result.getUnderlyingCallable() = cfn.getEnclosingCallable()
+ result.asCallable() = cfn.getEnclosingCallable()
}
override Type getTypeImpl() { result = cfn.getElement().(Expr).getType() }
@@ -2012,12 +2013,11 @@ class LambdaCallKind = Unit;
/** Holds if `creation` is an expression that creates a delegate for `c`. */
predicate lambdaCreation(ExprNode creation, LambdaCallKind kind, DataFlowCallable c) {
exists(Expr e | e = creation.getExpr() |
- c.getUnderlyingCallable() = e.(AnonymousFunctionExpr)
- or
- c.getUnderlyingCallable() = e.(CallableAccess).getTarget().getUnboundDeclaration()
- or
- c.getUnderlyingCallable() =
- e.(AddressOfExpr).getOperand().(CallableAccess).getTarget().getUnboundDeclaration()
+ c.asCallable() =
+ [
+ e.(AnonymousFunctionExpr), e.(CallableAccess).getTarget().getUnboundDeclaration(),
+ e.(AddressOfExpr).getOperand().(CallableAccess).getTarget().getUnboundDeclaration()
+ ]
) and
kind = TMkUnit()
}
@@ -2129,18 +2129,37 @@ module Csv {
if isBaseCallableOrPrototype(c) then result = "true" else result = "false"
}
- /** Computes the first 6 columns for CSV rows of `c`. */
+ private predicate partialModel(
+ DotNet::Callable c, string namespace, string type, string name, string parameters
+ ) {
+ c.getDeclaringType().hasQualifiedName(namespace, type) and
+ c.hasQualifiedName(_, name) and
+ parameters = "(" + parameterQualifiedTypeNamesToString(c) + ")"
+ }
+
+ /** Computes the first 6 columns for positive CSV rows of `c`. */
string asPartialModel(DotNet::Callable c) {
- exists(string namespace, string type, string name |
- c.getDeclaringType().hasQualifiedName(namespace, type) and
- c.hasQualifiedName(_, name) and
+ exists(string namespace, string type, string name, string parameters |
+ partialModel(c, namespace, type, name, parameters) and
result =
namespace + ";" //
+ type + ";" //
+ getCallableOverride(c) + ";" //
+ name + ";" //
- + "(" + parameterQualifiedTypeNamesToString(c) + ")" + ";" //
+ + parameters + ";" //
+ /* ext + */ ";" //
)
}
+
+ /** Computes the first 4 columns for negative CSV rows of `c`. */
+ string asPartialNegativeModel(DotNet::Callable c) {
+ exists(string namespace, string type, string name, string parameters |
+ partialModel(c, namespace, type, name, parameters) and
+ result =
+ namespace + ";" //
+ + type + ";" //
+ + name + ";" //
+ + parameters + ";" //
+ )
+ }
}
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 7685e519b27..a70bffabfdb 100644
--- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPublic.qll
+++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPublic.qll
@@ -41,7 +41,7 @@ class Node extends TNode {
/** Gets the enclosing callable of this node. */
final Callable getEnclosingCallable() {
- result = this.(NodeImpl).getEnclosingCallableImpl().getUnderlyingCallable()
+ result = this.(NodeImpl).getEnclosingCallableImpl().asCallable()
}
/** Gets the control flow node corresponding to this node, if any. */
@@ -103,7 +103,7 @@ class ParameterNode extends Node instanceof ParameterNodeImpl {
DotNet::Parameter getParameter() {
exists(DataFlowCallable c, ParameterPosition ppos |
super.isParameterOf(c, ppos) and
- result = c.getUnderlyingCallable().getParameter(ppos.getPosition())
+ result = c.asCallable().getParameter(ppos.getPosition())
)
}
diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DelegateDataFlow.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DelegateDataFlow.qll
deleted file mode 100755
index 6a4810d6b01..00000000000
--- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DelegateDataFlow.qll
+++ /dev/null
@@ -1,285 +0,0 @@
-/**
- * DEPRECATED.
- *
- * INTERNAL: Do not use.
- *
- * Provides classes for resolving delegate calls.
- */
-
-import csharp
-private import dotnet
-private import semmle.code.csharp.dataflow.CallContext
-private import semmle.code.csharp.dataflow.internal.DataFlowDispatch
-private import semmle.code.csharp.dataflow.internal.DataFlowPrivate
-private import semmle.code.csharp.dataflow.internal.DataFlowPublic
-private import semmle.code.csharp.dispatch.Dispatch
-private import semmle.code.csharp.frameworks.system.linq.Expressions
-
-/** A source of flow for a delegate or function pointer expression. */
-abstract private class DelegateLikeFlowSource extends DataFlow::ExprNode {
- /** Gets the callable that is referenced in this delegate or function pointer flow source. */
- abstract Callable getCallable();
-}
-
-/** A source of flow for a delegate expression. */
-private class DelegateFlowSource extends DelegateLikeFlowSource {
- Callable c;
-
- DelegateFlowSource() {
- this.getExpr() =
- any(Expr e |
- c = e.(AnonymousFunctionExpr) or
- c = e.(CallableAccess).getTarget().getUnboundDeclaration()
- )
- }
-
- /** Gets the callable that is referenced in this delegate flow source. */
- override Callable getCallable() { result = c }
-}
-
-/** A source of flow for a function pointer expression. */
-private class FunctionPointerFlowSource extends DelegateLikeFlowSource {
- Callable c;
-
- FunctionPointerFlowSource() {
- c =
- this.getExpr()
- .(AddressOfExpr)
- .getOperand()
- .(CallableAccess)
- .getTarget()
- .getUnboundDeclaration()
- }
-
- /** Gets the callable that is referenced in this function pointer flow source. */
- override Callable getCallable() { result = c }
-}
-
-/** A sink of flow for a delegate or function pointer expression. */
-abstract private class DelegateLikeFlowSink extends DataFlow::Node {
- /**
- * Gets an actual run-time target of this delegate call in the given call
- * context, if any. The call context records the *last* call required to
- * resolve the target, if any. Example:
- *
- * ```csharp
- * public int M(Func f, string x) {
- * return f(x);
- * }
- *
- * void M2() {
- * M(x => x.Length, y);
- *
- * M(_ => 42, z);
- *
- * Func isZero = x => x == 0;
- * isZero(10);
- * }
- * ```
- *
- * - The call on line 2 can be resolved to either `x => x.Length` (line 6)
- * or `_ => 42` (line 8) in the call contexts from lines 7 and 8,
- * respectively.
- * - The call on line 11 can be resolved to `x => x == 0` (line 10) in an
- * empty call context (the call is locally resolvable).
- *
- * Note that only the *last* call required is taken into account, hence if
- * `M` above is redefined as follows:
- *
- * ```csharp
- * public int M(Func f, string x) {
- * return M2(f, x);
- * }
- *
- * public int M2(Func f, string x) {
- * return f(x);
- * }
- *
- * void M2() {
- * M(x => x.Length, y);
- *
- * M(_ => 42, z);
- *
- * Func isZero = x => x == 0;
- * isZero(10);
- * }
- * ```
- *
- * then the call context from line 2 is the call context for all
- * possible delegates resolved on line 6.
- */
- cached
- deprecated Callable getARuntimeTarget(CallContext context) {
- exists(DelegateLikeFlowSource dfs |
- flowsFrom(this, dfs, _, context) and
- result = dfs.getCallable()
- )
- }
-}
-
-/** A delegate or function pointer call expression. */
-deprecated class DelegateLikeCallExpr extends DelegateLikeFlowSink, DataFlow::ExprNode {
- DelegateLikeCall dc;
-
- DelegateLikeCallExpr() { this.getExpr() = dc.getExpr() }
-
- /** Gets the delegate or function pointer call that this expression belongs to. */
- DelegateLikeCall getCall() { result = dc }
-}
-
-/** A delegate expression that is added to an event. */
-deprecated class AddEventSource extends DelegateLikeFlowSink, DataFlow::ExprNode {
- AddEventExpr ae;
-
- AddEventSource() { this.getExpr() = ae.getRValue() }
-
- /** Gets the event that this delegate is added to. */
- Event getEvent() { result = ae.getTarget() }
-}
-
-/** A non-delegate call. */
-private class NonDelegateCall extends Expr {
- private DispatchCall dc;
-
- NonDelegateCall() { this = dc.getCall() }
-
- /**
- * Gets a run-time target of this call. A target is always a source
- * declaration, and if the callable has both CIL and source code, only
- * the source code version is returned.
- */
- Callable getARuntimeTarget() { result = getCallableForDataFlow(dc.getADynamicTarget()) }
-
- /** Gets the `i`th argument of this call. */
- Expr getArgument(int i) { result = dc.getArgument(i) }
-}
-
-private class NormalReturnNode extends Node {
- NormalReturnNode() { this.(ReturnNode).getKind() instanceof NormalReturnKind }
-}
-
-/**
- * Holds if data can flow (inter-procedurally) to delegate `sink` from
- * `node`. This predicate searches backwards from `sink` to `node`.
- *
- * The parameter `isReturned` indicates whether the path from `sink` to
- * `node` goes through a returned expression. The call context `lastCall`
- * records the last call on the path from `node` to `sink`, if any.
- */
-deprecated private predicate flowsFrom(
- DelegateLikeFlowSink sink, DataFlow::Node node, boolean isReturned, CallContext lastCall
-) {
- // Base case
- sink = node and
- isReturned = false and
- lastCall instanceof EmptyCallContext
- or
- // Local flow
- exists(DataFlow::Node mid | flowsFrom(sink, mid, isReturned, lastCall) |
- LocalFlow::localFlowStepCommon(node, mid)
- or
- exists(Ssa::Definition def |
- LocalFlow::localSsaFlowStep(def, node, mid) and
- LocalFlow::usesInstanceField(def)
- )
- or
- node.asExpr() = mid.asExpr().(DelegateCreation).getArgument()
- )
- or
- // Flow through static field or property
- exists(DataFlow::Node mid |
- flowsFrom(sink, mid, _, _) and
- jumpStep(node, mid) and
- isReturned = false and
- lastCall instanceof EmptyCallContext
- )
- or
- // Flow into a callable (non-delegate call)
- exists(ParameterNode mid, CallContext prevLastCall, NonDelegateCall call, Parameter p |
- flowsFrom(sink, mid, isReturned, prevLastCall) and
- isReturned = false and
- p = mid.getParameter() and
- flowIntoNonDelegateCall(call, node.asExpr(), p) and
- lastCall = getLastCall(prevLastCall, call, p.getPosition())
- )
- or
- // Flow into a callable (delegate call)
- exists(
- ParameterNode mid, CallContext prevLastCall, DelegateLikeCall call, Callable c, Parameter p,
- int i
- |
- flowsFrom(sink, mid, isReturned, prevLastCall) and
- isReturned = false and
- flowIntoDelegateCall(call, c, node.asExpr(), i) and
- c.getParameter(i) = p and
- p = mid.getParameter() and
- lastCall = getLastCall(prevLastCall, call, i)
- )
- or
- // Flow out of a callable (non-delegate call).
- exists(DataFlow::ExprNode mid |
- flowsFrom(sink, mid, _, lastCall) and
- isReturned = true and
- flowOutOfNonDelegateCall(mid.getExpr(), node)
- )
- or
- // Flow out of a callable (delegate call).
- exists(DataFlow::ExprNode mid |
- flowsFrom(sink, mid, _, _) and
- isReturned = true and
- flowOutOfDelegateCall(mid.getExpr(), node, lastCall)
- )
-}
-
-/**
- * Gets the last call when tracking flow into `call`. The context
- * `prevLastCall` is the previous last call, so the result is the
- * previous call if it exists, otherwise `call` is the last call.
- */
-bindingset[call, i]
-deprecated private CallContext getLastCall(CallContext prevLastCall, Expr call, int i) {
- prevLastCall instanceof EmptyCallContext and
- result.(ArgumentCallContext).isArgument(call, i)
- or
- prevLastCall instanceof ArgumentCallContext and
- result = prevLastCall
-}
-
-pragma[noinline]
-private predicate flowIntoNonDelegateCall(NonDelegateCall call, Expr arg, DotNet::Parameter p) {
- exists(DotNet::Callable callable, int i |
- callable = call.getARuntimeTarget() and
- p = callable.getAParameter() and
- arg = call.getArgument(i) and
- i = p.getPosition()
- )
-}
-
-pragma[noinline]
-deprecated private predicate flowIntoDelegateCall(DelegateLikeCall call, Callable c, Expr arg, int i) {
- exists(DelegateLikeFlowSource dfs, DelegateLikeCallExpr dce |
- // the call context is irrelevant because the delegate call
- // itself will be the context
- flowsFrom(dce, dfs, _, _) and
- arg = call.getArgument(i) and
- c = dfs.getCallable() and
- call = dce.getCall()
- )
-}
-
-pragma[noinline]
-private predicate flowOutOfNonDelegateCall(NonDelegateCall call, NormalReturnNode ret) {
- call.getARuntimeTarget() = ret.getEnclosingCallable()
-}
-
-pragma[noinline]
-deprecated private predicate flowOutOfDelegateCall(
- DelegateLikeCall dc, NormalReturnNode ret, CallContext lastCall
-) {
- exists(DelegateLikeFlowSource dfs, DelegateLikeCallExpr dce, Callable c |
- flowsFrom(dce, dfs, _, lastCall) and
- ret.getEnclosingCallable() = c and
- c = dfs.getCallable() and
- dc = dce.getCall()
- )
-}
diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/FlowSummaryImpl.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/FlowSummaryImpl.qll
index 7abae2b105b..e00fc952e1c 100644
--- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/FlowSummaryImpl.qll
+++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/FlowSummaryImpl.qll
@@ -240,6 +240,16 @@ module Public {
*/
predicate isAutoGenerated() { none() }
}
+
+ /** A callable with a flow summary stating there is no flow via the callable. */
+ class NegativeSummarizedCallable extends SummarizedCallableBase {
+ NegativeSummarizedCallable() { negativeSummaryElement(this, _) }
+
+ /**
+ * Holds if the negative summary is auto generated.
+ */
+ predicate isAutoGenerated() { negativeSummaryElement(this, true) }
+ }
}
/**
@@ -1094,7 +1104,7 @@ module Private {
/** Provides a query predicate for outputting a set of relevant flow summaries. */
module TestOutput {
- /** A flow summary to include in the `summary/3` query predicate. */
+ /** A flow summary to include in the `summary/1` query predicate. */
abstract class RelevantSummarizedCallable instanceof SummarizedCallable {
/** Gets the string representation of this callable used by `summary/1`. */
abstract string getCallableCsv();
@@ -1109,6 +1119,14 @@ module Private {
string toString() { result = super.toString() }
}
+ /** A flow summary to include in the `negativeSummary/1` query predicate. */
+ abstract class RelevantNegativeSummarizedCallable instanceof NegativeSummarizedCallable {
+ /** Gets the string representation of this callable used by `summary/1`. */
+ abstract string getCallableCsv();
+
+ string toString() { result = super.toString() }
+ }
+
/** Render the kind in the format used in flow summaries. */
private string renderKind(boolean preservesValue) {
preservesValue = true and result = "value"
@@ -1116,8 +1134,12 @@ module Private {
preservesValue = false and result = "taint"
}
- private string renderProvenance(RelevantSummarizedCallable c) {
- if c.(SummarizedCallable).isAutoGenerated() then result = "generated" else result = "manual"
+ private string renderProvenance(SummarizedCallable c) {
+ if c.isAutoGenerated() then result = "generated" else result = "manual"
+ }
+
+ private string renderProvenanceNegative(NegativeSummarizedCallable c) {
+ if c.isAutoGenerated() then result = "generated" else result = "manual"
}
/**
@@ -1132,8 +1154,23 @@ module Private {
|
c.relevantSummary(input, output, preservesValue) and
csv =
- c.getCallableCsv() + getComponentStackCsv(input) + ";" + getComponentStackCsv(output) +
- ";" + renderKind(preservesValue) + ";" + renderProvenance(c)
+ c.getCallableCsv() // Callable information
+ + getComponentStackCsv(input) + ";" // input
+ + getComponentStackCsv(output) + ";" // output
+ + renderKind(preservesValue) + ";" // kind
+ + renderProvenance(c) // provenance
+ )
+ }
+
+ /**
+ * Holds if a negative flow summary `csv` exists (semi-colon separated format). Used for testing purposes.
+ * The syntax is: "namespace;type;name;signature;provenance"",
+ */
+ query predicate negativeSummary(string csv) {
+ exists(RelevantNegativeSummarizedCallable c |
+ csv =
+ c.getCallableCsv() // Callable information
+ + renderProvenanceNegative(c) // provenance
)
}
}
diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/FlowSummaryImplSpecific.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/FlowSummaryImplSpecific.qll
index cbd990691a9..620c3a7a410 100644
--- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/FlowSummaryImplSpecific.qll
+++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/FlowSummaryImplSpecific.qll
@@ -114,6 +114,18 @@ predicate summaryElement(Callable c, string input, string output, string kind, b
)
}
+/**
+ * Holds if a negative flow summary exists for `c`, which means that there is no
+ * flow through `c`. The flag `generated` states whether the summary is autogenerated.
+ */
+predicate negativeSummaryElement(Callable c, boolean generated) {
+ exists(string namespace, string type, string name, string signature, string provenance |
+ negativeSummaryModel(namespace, type, name, signature, provenance) and
+ generated = isGenerated(provenance) and
+ c = interpretElement(namespace, type, false, name, signature, "")
+ )
+}
+
/**
* Holds if an external source specification exists for `e` with output specification
* `output`, kind `kind`, and a flag `generated` stating whether the source specification is
@@ -199,7 +211,7 @@ string getParameterPositionCsv(ParameterPosition pos) {
result = pos.getPosition().toString()
or
pos.isThisParameter() and
- result = "Qualifier"
+ result = "this"
}
/** Gets the textual representation of an argument position in the format used for flow summaries. */
@@ -207,7 +219,7 @@ string getArgumentPositionCsv(ArgumentPosition pos) {
result = pos.getPosition().toString()
or
pos.isQualifier() and
- result = "This"
+ result = "this"
}
/** Holds if input specification component `c` needs a reference. */
@@ -287,7 +299,7 @@ bindingset[s]
ArgumentPosition parseParamBody(string s) {
result.getPosition() = AccessPath::parseInt(s)
or
- s = "This" and
+ s = "this" and
result.isQualifier()
}
@@ -296,6 +308,6 @@ bindingset[s]
ParameterPosition parseArgBody(string s) {
result.getPosition() = AccessPath::parseInt(s)
or
- s = "Qualifier" and
+ s = "this" and
result.isThisParameter()
}
diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/NegativeSummary.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/NegativeSummary.qll
new file mode 100644
index 00000000000..0ed48a2b21f
--- /dev/null
+++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/NegativeSummary.qll
@@ -0,0 +1,9 @@
+/** Provides modules for importing negative summaries. */
+
+/**
+ * A module importing the frameworks that provide external flow data,
+ * ensuring that they are visible to the taint tracking / data flow library.
+ */
+private module Frameworks {
+ private import semmle.code.csharp.frameworks.GeneratedNegative
+}
diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/SsaImplCommon.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/SsaImplCommon.qll
index eed0d050735..659940def50 100644
--- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/SsaImplCommon.qll
+++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/SsaImplCommon.qll
@@ -39,7 +39,7 @@ private module Liveness {
/**
* Holds if the `i`th node of basic block `bb` is a reference to `v` of kind `k`.
*/
- private predicate ref(BasicBlock bb, int i, SourceVariable v, RefKind k) {
+ predicate ref(BasicBlock bb, int i, SourceVariable v, RefKind k) {
exists(boolean certain | variableRead(bb, i, v, certain) | k = Read(certain))
or
exists(boolean certain | variableWrite(bb, i, v, certain) | k = Write(certain))
@@ -76,6 +76,10 @@ private module Liveness {
not result + 1 = refRank(bb, _, v, _)
}
+ predicate lastRefIsRead(BasicBlock bb, SourceVariable v) {
+ maxRefRank(bb, v) = refRank(bb, _, v, Read(_))
+ }
+
/**
* Gets the (1-based) rank of the first reference to `v` inside basic block `bb`
* that is either a read or a certain write.
@@ -185,23 +189,29 @@ newtype TDefinition =
private module SsaDefReaches {
newtype TSsaRefKind =
- SsaRead() or
+ SsaActualRead() or
+ SsaPhiRead() or
SsaDef()
+ class SsaRead = SsaActualRead or SsaPhiRead;
+
/**
* A classification of SSA variable references into reads and definitions.
*/
class SsaRefKind extends TSsaRefKind {
string toString() {
- this = SsaRead() and
- result = "SsaRead"
+ this = SsaActualRead() and
+ result = "SsaActualRead"
+ or
+ this = SsaPhiRead() and
+ result = "SsaPhiRead"
or
this = SsaDef() and
result = "SsaDef"
}
int getOrder() {
- this = SsaRead() and
+ this instanceof SsaRead and
result = 0
or
this = SsaDef() and
@@ -209,6 +219,80 @@ private module SsaDefReaches {
}
}
+ /**
+ * Holds if `bb` is in the dominance frontier of a block containing a
+ * read of `v`.
+ */
+ pragma[nomagic]
+ private predicate inReadDominanceFrontier(BasicBlock bb, SourceVariable v) {
+ exists(BasicBlock readbb | inDominanceFrontier(readbb, bb) |
+ lastRefIsRead(readbb, v)
+ or
+ phiRead(readbb, v)
+ )
+ }
+
+ /**
+ * Holds if a phi-read node should be inserted for variable `v` at the beginning
+ * of basic block `bb`.
+ *
+ * Phi-read nodes are like normal phi nodes, but they are inserted based on reads
+ * instead of writes, and only if the dominance-frontier block does not already
+ * contain a reference (read or write) to `v`. Unlike normal phi nodes, this is
+ * an internal implementation detail that is not exposed.
+ *
+ * The motivation for adding phi-reads is to improve performance of the use-use
+ * calculation in cases where there is a large number of reads that can reach the
+ * same join-point, and from there reach a large number of basic blocks. Example:
+ *
+ * ```cs
+ * if (a)
+ * use(x);
+ * else if (b)
+ * use(x);
+ * else if (c)
+ * use(x);
+ * else if (d)
+ * use(x);
+ * // many more ifs ...
+ *
+ * // phi-read for `x` inserted here
+ *
+ * // program not mentioning `x`, with large basic block graph
+ *
+ * use(x);
+ * ```
+ *
+ * Without phi-reads, the analysis has to replicate reachability for each of
+ * the guarded uses of `x`. However, with phi-reads, the analysis will limit
+ * each conditional use of `x` to reach the basic block containing the phi-read
+ * node for `x`, and only that basic block will have to compute reachability
+ * through the remainder of the large program.
+ *
+ * Like normal reads, each phi-read node `phi-read` can be reached from exactly
+ * one SSA definition (without passing through another definition): Assume, for
+ * the sake of contradiction, that there are two reaching definitions `def1` and
+ * `def2`. Now, if both `def1` and `def2` dominate `phi-read`, then the nearest
+ * dominating definition will prevent the other from reaching `phi-read`. So, at
+ * least one of `def1` and `def2` cannot dominate `phi-read`; assume it is `def1`.
+ * Then `def1` must go through one of its dominance-frontier blocks in order to
+ * reach `phi-read`. However, such a block will always start with a (normal) phi
+ * node, which contradicts reachability.
+ *
+ * Also, like normal reads, the unique SSA definition `def` that reaches `phi-read`,
+ * will dominate `phi-read`. Assuming it doesn't means that the path from `def`
+ * to `phi-read` goes through a dominance-frontier block, and hence a phi node,
+ * which contradicts reachability.
+ */
+ pragma[nomagic]
+ predicate phiRead(BasicBlock bb, SourceVariable v) {
+ inReadDominanceFrontier(bb, v) and
+ liveAtEntry(bb, v) and
+ // only if there are no other references to `v` inside `bb`
+ not ref(bb, _, v, _) and
+ not exists(Definition def | def.definesAt(v, bb, _))
+ }
+
/**
* Holds if the `i`th node of basic block `bb` is a reference to `v`,
* either a read (when `k` is `SsaRead()`) or an SSA definition (when `k`
@@ -216,11 +300,16 @@ private module SsaDefReaches {
*
* Unlike `Liveness::ref`, this includes `phi` nodes.
*/
+ pragma[nomagic]
predicate ssaRef(BasicBlock bb, int i, SourceVariable v, SsaRefKind k) {
variableRead(bb, i, v, _) and
- k = SsaRead()
+ k = SsaActualRead()
or
- exists(Definition def | def.definesAt(v, bb, i)) and
+ phiRead(bb, v) and
+ i = -1 and
+ k = SsaPhiRead()
+ or
+ any(Definition def).definesAt(v, bb, i) and
k = SsaDef()
}
@@ -273,7 +362,7 @@ private module SsaDefReaches {
)
or
ssaDefReachesRank(bb, def, rnk - 1, v) and
- rnk = ssaRefRank(bb, _, v, SsaRead())
+ rnk = ssaRefRank(bb, _, v, any(SsaRead k))
}
/**
@@ -283,7 +372,7 @@ private module SsaDefReaches {
predicate ssaDefReachesReadWithinBlock(SourceVariable v, Definition def, BasicBlock bb, int i) {
exists(int rnk |
ssaDefReachesRank(bb, def, rnk, v) and
- rnk = ssaRefRank(bb, i, v, SsaRead())
+ rnk = ssaRefRank(bb, i, v, any(SsaRead k))
)
}
@@ -309,45 +398,94 @@ private module SsaDefReaches {
ssaDefRank(def, v, bb, i, _) = maxSsaRefRank(bb, v)
}
- predicate defOccursInBlock(Definition def, BasicBlock bb, SourceVariable v) {
- exists(ssaDefRank(def, v, bb, _, _))
+ predicate defOccursInBlock(Definition def, BasicBlock bb, SourceVariable v, SsaRefKind k) {
+ exists(ssaDefRank(def, v, bb, _, k))
}
pragma[noinline]
private predicate ssaDefReachesThroughBlock(Definition def, BasicBlock bb) {
ssaDefReachesEndOfBlock(bb, def, _) and
- not defOccursInBlock(_, bb, def.getSourceVariable())
+ not defOccursInBlock(_, bb, def.getSourceVariable(), _)
}
/**
* Holds if `def` is accessed in basic block `bb1` (either a read or a write),
- * `bb2` is a transitive successor of `bb1`, `def` is live at the end of `bb1`,
- * and the underlying variable for `def` is neither read nor written in any block
- * on the path between `bb1` and `bb2`.
+ * `bb2` is a transitive successor of `bb1`, `def` is live at the end of _some_
+ * predecessor of `bb2`, and the underlying variable for `def` is neither read
+ * nor written in any block on the path between `bb1` and `bb2`.
+ *
+ * Phi reads are considered as normal reads for this predicate.
*/
- predicate varBlockReaches(Definition def, BasicBlock bb1, BasicBlock bb2) {
- defOccursInBlock(def, bb1, _) and
+ pragma[nomagic]
+ private predicate varBlockReachesInclPhiRead(Definition def, BasicBlock bb1, BasicBlock bb2) {
+ defOccursInBlock(def, bb1, _, _) and
bb2 = getABasicBlockSuccessor(bb1)
or
exists(BasicBlock mid |
- varBlockReaches(def, bb1, mid) and
+ varBlockReachesInclPhiRead(def, bb1, mid) and
ssaDefReachesThroughBlock(def, mid) and
bb2 = getABasicBlockSuccessor(mid)
)
}
+ pragma[nomagic]
+ private predicate phiReadStep(Definition def, SourceVariable v, BasicBlock bb1, BasicBlock bb2) {
+ varBlockReachesInclPhiRead(def, bb1, bb2) and
+ defOccursInBlock(def, bb2, v, SsaPhiRead())
+ }
+
+ pragma[nomagic]
+ private predicate varBlockReachesExclPhiRead(Definition def, BasicBlock bb1, BasicBlock bb2) {
+ varBlockReachesInclPhiRead(pragma[only_bind_into](def), bb1, pragma[only_bind_into](bb2)) and
+ ssaRef(bb2, _, def.getSourceVariable(), [SsaActualRead().(TSsaRefKind), SsaDef()])
+ or
+ exists(BasicBlock mid |
+ varBlockReachesExclPhiRead(def, mid, bb2) and
+ phiReadStep(def, _, bb1, mid)
+ )
+ }
+
/**
* Holds if `def` is accessed in basic block `bb1` (either a read or a write),
- * `def` is read at index `i2` in basic block `bb2`, `bb2` is in a transitive
- * successor block of `bb1`, and `def` is neither read nor written in any block
- * on a path between `bb1` and `bb2`.
+ * the underlying variable `v` of `def` is accessed in basic block `bb2`
+ * (either a read or a write), `bb2` is a transitive successor of `bb1`, and
+ * `v` is neither read nor written in any block on the path between `bb1`
+ * and `bb2`.
*/
+ pragma[nomagic]
+ predicate varBlockReaches(Definition def, BasicBlock bb1, BasicBlock bb2) {
+ varBlockReachesExclPhiRead(def, bb1, bb2) and
+ not defOccursInBlock(def, bb1, _, SsaPhiRead())
+ }
+
+ pragma[nomagic]
predicate defAdjacentRead(Definition def, BasicBlock bb1, BasicBlock bb2, int i2) {
varBlockReaches(def, bb1, bb2) and
- ssaRefRank(bb2, i2, def.getSourceVariable(), SsaRead()) = 1
+ ssaRefRank(bb2, i2, def.getSourceVariable(), SsaActualRead()) = 1
+ }
+
+ /**
+ * Holds if `def` is accessed in basic block `bb` (either a read or a write),
+ * `bb1` can reach a transitive successor `bb2` where `def` is no longer live,
+ * and `v` is neither read nor written in any block on the path between `bb`
+ * and `bb2`.
+ */
+ pragma[nomagic]
+ predicate varBlockReachesExit(Definition def, BasicBlock bb) {
+ exists(BasicBlock bb2 | varBlockReachesInclPhiRead(def, bb, bb2) |
+ not defOccursInBlock(def, bb2, _, _) and
+ not ssaDefReachesEndOfBlock(bb2, def, _)
+ )
+ or
+ exists(BasicBlock mid |
+ varBlockReachesExit(def, mid) and
+ phiReadStep(def, _, bb, mid)
+ )
}
}
+predicate phiReadExposedForTesting = phiRead/2;
+
private import SsaDefReaches
pragma[nomagic]
@@ -365,7 +503,8 @@ predicate liveThrough(BasicBlock bb, SourceVariable v) {
*/
pragma[nomagic]
predicate ssaDefReachesEndOfBlock(BasicBlock bb, Definition def, SourceVariable v) {
- exists(int last | last = maxSsaRefRank(bb, v) |
+ exists(int last |
+ last = maxSsaRefRank(pragma[only_bind_into](bb), pragma[only_bind_into](v)) and
ssaDefReachesRank(bb, def, last, v) and
liveAtExit(bb, v)
)
@@ -405,7 +544,7 @@ pragma[nomagic]
predicate ssaDefReachesRead(SourceVariable v, Definition def, BasicBlock bb, int i) {
ssaDefReachesReadWithinBlock(v, def, bb, i)
or
- variableRead(bb, i, v, _) and
+ ssaRef(bb, i, v, any(SsaRead k)) and
ssaDefReachesEndOfBlock(getABasicBlockPredecessor(bb), def, v) and
not ssaDefReachesReadWithinBlock(v, _, bb, i)
}
@@ -421,7 +560,7 @@ pragma[nomagic]
predicate adjacentDefRead(Definition def, BasicBlock bb1, int i1, BasicBlock bb2, int i2) {
exists(int rnk |
rnk = ssaDefRank(def, _, bb1, i1, _) and
- rnk + 1 = ssaDefRank(def, _, bb1, i2, SsaRead()) and
+ rnk + 1 = ssaDefRank(def, _, bb1, i2, SsaActualRead()) and
variableRead(bb1, i2, _, _) and
bb2 = bb1
)
@@ -538,18 +677,15 @@ predicate lastRefRedefNoUncertainReads(Definition def, BasicBlock bb, int i, Def
*/
pragma[nomagic]
predicate lastRef(Definition def, BasicBlock bb, int i) {
+ // Can reach another definition
lastRefRedef(def, bb, i, _)
or
- lastSsaRef(def, _, bb, i) and
- (
+ exists(SourceVariable v | lastSsaRef(def, v, bb, i) |
// Can reach exit directly
bb instanceof ExitBasicBlock
or
// Can reach a block using one or more steps, where `def` is no longer live
- exists(BasicBlock bb2 | varBlockReaches(def, bb, bb2) |
- not defOccursInBlock(def, bb2, _) and
- not ssaDefReachesEndOfBlock(bb2, def, _)
- )
+ varBlockReachesExit(def, bb)
)
}
diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/TaintTrackingPrivate.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/TaintTrackingPrivate.qll
old mode 100755
new mode 100644
diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/TaintTrackingPublic.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/TaintTrackingPublic.qll
old mode 100755
new mode 100644
diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/basessa/SsaImplCommon.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/basessa/SsaImplCommon.qll
index eed0d050735..659940def50 100644
--- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/basessa/SsaImplCommon.qll
+++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/basessa/SsaImplCommon.qll
@@ -39,7 +39,7 @@ private module Liveness {
/**
* Holds if the `i`th node of basic block `bb` is a reference to `v` of kind `k`.
*/
- private predicate ref(BasicBlock bb, int i, SourceVariable v, RefKind k) {
+ predicate ref(BasicBlock bb, int i, SourceVariable v, RefKind k) {
exists(boolean certain | variableRead(bb, i, v, certain) | k = Read(certain))
or
exists(boolean certain | variableWrite(bb, i, v, certain) | k = Write(certain))
@@ -76,6 +76,10 @@ private module Liveness {
not result + 1 = refRank(bb, _, v, _)
}
+ predicate lastRefIsRead(BasicBlock bb, SourceVariable v) {
+ maxRefRank(bb, v) = refRank(bb, _, v, Read(_))
+ }
+
/**
* Gets the (1-based) rank of the first reference to `v` inside basic block `bb`
* that is either a read or a certain write.
@@ -185,23 +189,29 @@ newtype TDefinition =
private module SsaDefReaches {
newtype TSsaRefKind =
- SsaRead() or
+ SsaActualRead() or
+ SsaPhiRead() or
SsaDef()
+ class SsaRead = SsaActualRead or SsaPhiRead;
+
/**
* A classification of SSA variable references into reads and definitions.
*/
class SsaRefKind extends TSsaRefKind {
string toString() {
- this = SsaRead() and
- result = "SsaRead"
+ this = SsaActualRead() and
+ result = "SsaActualRead"
+ or
+ this = SsaPhiRead() and
+ result = "SsaPhiRead"
or
this = SsaDef() and
result = "SsaDef"
}
int getOrder() {
- this = SsaRead() and
+ this instanceof SsaRead and
result = 0
or
this = SsaDef() and
@@ -209,6 +219,80 @@ private module SsaDefReaches {
}
}
+ /**
+ * Holds if `bb` is in the dominance frontier of a block containing a
+ * read of `v`.
+ */
+ pragma[nomagic]
+ private predicate inReadDominanceFrontier(BasicBlock bb, SourceVariable v) {
+ exists(BasicBlock readbb | inDominanceFrontier(readbb, bb) |
+ lastRefIsRead(readbb, v)
+ or
+ phiRead(readbb, v)
+ )
+ }
+
+ /**
+ * Holds if a phi-read node should be inserted for variable `v` at the beginning
+ * of basic block `bb`.
+ *
+ * Phi-read nodes are like normal phi nodes, but they are inserted based on reads
+ * instead of writes, and only if the dominance-frontier block does not already
+ * contain a reference (read or write) to `v`. Unlike normal phi nodes, this is
+ * an internal implementation detail that is not exposed.
+ *
+ * The motivation for adding phi-reads is to improve performance of the use-use
+ * calculation in cases where there is a large number of reads that can reach the
+ * same join-point, and from there reach a large number of basic blocks. Example:
+ *
+ * ```cs
+ * if (a)
+ * use(x);
+ * else if (b)
+ * use(x);
+ * else if (c)
+ * use(x);
+ * else if (d)
+ * use(x);
+ * // many more ifs ...
+ *
+ * // phi-read for `x` inserted here
+ *
+ * // program not mentioning `x`, with large basic block graph
+ *
+ * use(x);
+ * ```
+ *
+ * Without phi-reads, the analysis has to replicate reachability for each of
+ * the guarded uses of `x`. However, with phi-reads, the analysis will limit
+ * each conditional use of `x` to reach the basic block containing the phi-read
+ * node for `x`, and only that basic block will have to compute reachability
+ * through the remainder of the large program.
+ *
+ * Like normal reads, each phi-read node `phi-read` can be reached from exactly
+ * one SSA definition (without passing through another definition): Assume, for
+ * the sake of contradiction, that there are two reaching definitions `def1` and
+ * `def2`. Now, if both `def1` and `def2` dominate `phi-read`, then the nearest
+ * dominating definition will prevent the other from reaching `phi-read`. So, at
+ * least one of `def1` and `def2` cannot dominate `phi-read`; assume it is `def1`.
+ * Then `def1` must go through one of its dominance-frontier blocks in order to
+ * reach `phi-read`. However, such a block will always start with a (normal) phi
+ * node, which contradicts reachability.
+ *
+ * Also, like normal reads, the unique SSA definition `def` that reaches `phi-read`,
+ * will dominate `phi-read`. Assuming it doesn't means that the path from `def`
+ * to `phi-read` goes through a dominance-frontier block, and hence a phi node,
+ * which contradicts reachability.
+ */
+ pragma[nomagic]
+ predicate phiRead(BasicBlock bb, SourceVariable v) {
+ inReadDominanceFrontier(bb, v) and
+ liveAtEntry(bb, v) and
+ // only if there are no other references to `v` inside `bb`
+ not ref(bb, _, v, _) and
+ not exists(Definition def | def.definesAt(v, bb, _))
+ }
+
/**
* Holds if the `i`th node of basic block `bb` is a reference to `v`,
* either a read (when `k` is `SsaRead()`) or an SSA definition (when `k`
@@ -216,11 +300,16 @@ private module SsaDefReaches {
*
* Unlike `Liveness::ref`, this includes `phi` nodes.
*/
+ pragma[nomagic]
predicate ssaRef(BasicBlock bb, int i, SourceVariable v, SsaRefKind k) {
variableRead(bb, i, v, _) and
- k = SsaRead()
+ k = SsaActualRead()
or
- exists(Definition def | def.definesAt(v, bb, i)) and
+ phiRead(bb, v) and
+ i = -1 and
+ k = SsaPhiRead()
+ or
+ any(Definition def).definesAt(v, bb, i) and
k = SsaDef()
}
@@ -273,7 +362,7 @@ private module SsaDefReaches {
)
or
ssaDefReachesRank(bb, def, rnk - 1, v) and
- rnk = ssaRefRank(bb, _, v, SsaRead())
+ rnk = ssaRefRank(bb, _, v, any(SsaRead k))
}
/**
@@ -283,7 +372,7 @@ private module SsaDefReaches {
predicate ssaDefReachesReadWithinBlock(SourceVariable v, Definition def, BasicBlock bb, int i) {
exists(int rnk |
ssaDefReachesRank(bb, def, rnk, v) and
- rnk = ssaRefRank(bb, i, v, SsaRead())
+ rnk = ssaRefRank(bb, i, v, any(SsaRead k))
)
}
@@ -309,45 +398,94 @@ private module SsaDefReaches {
ssaDefRank(def, v, bb, i, _) = maxSsaRefRank(bb, v)
}
- predicate defOccursInBlock(Definition def, BasicBlock bb, SourceVariable v) {
- exists(ssaDefRank(def, v, bb, _, _))
+ predicate defOccursInBlock(Definition def, BasicBlock bb, SourceVariable v, SsaRefKind k) {
+ exists(ssaDefRank(def, v, bb, _, k))
}
pragma[noinline]
private predicate ssaDefReachesThroughBlock(Definition def, BasicBlock bb) {
ssaDefReachesEndOfBlock(bb, def, _) and
- not defOccursInBlock(_, bb, def.getSourceVariable())
+ not defOccursInBlock(_, bb, def.getSourceVariable(), _)
}
/**
* Holds if `def` is accessed in basic block `bb1` (either a read or a write),
- * `bb2` is a transitive successor of `bb1`, `def` is live at the end of `bb1`,
- * and the underlying variable for `def` is neither read nor written in any block
- * on the path between `bb1` and `bb2`.
+ * `bb2` is a transitive successor of `bb1`, `def` is live at the end of _some_
+ * predecessor of `bb2`, and the underlying variable for `def` is neither read
+ * nor written in any block on the path between `bb1` and `bb2`.
+ *
+ * Phi reads are considered as normal reads for this predicate.
*/
- predicate varBlockReaches(Definition def, BasicBlock bb1, BasicBlock bb2) {
- defOccursInBlock(def, bb1, _) and
+ pragma[nomagic]
+ private predicate varBlockReachesInclPhiRead(Definition def, BasicBlock bb1, BasicBlock bb2) {
+ defOccursInBlock(def, bb1, _, _) and
bb2 = getABasicBlockSuccessor(bb1)
or
exists(BasicBlock mid |
- varBlockReaches(def, bb1, mid) and
+ varBlockReachesInclPhiRead(def, bb1, mid) and
ssaDefReachesThroughBlock(def, mid) and
bb2 = getABasicBlockSuccessor(mid)
)
}
+ pragma[nomagic]
+ private predicate phiReadStep(Definition def, SourceVariable v, BasicBlock bb1, BasicBlock bb2) {
+ varBlockReachesInclPhiRead(def, bb1, bb2) and
+ defOccursInBlock(def, bb2, v, SsaPhiRead())
+ }
+
+ pragma[nomagic]
+ private predicate varBlockReachesExclPhiRead(Definition def, BasicBlock bb1, BasicBlock bb2) {
+ varBlockReachesInclPhiRead(pragma[only_bind_into](def), bb1, pragma[only_bind_into](bb2)) and
+ ssaRef(bb2, _, def.getSourceVariable(), [SsaActualRead().(TSsaRefKind), SsaDef()])
+ or
+ exists(BasicBlock mid |
+ varBlockReachesExclPhiRead(def, mid, bb2) and
+ phiReadStep(def, _, bb1, mid)
+ )
+ }
+
/**
* Holds if `def` is accessed in basic block `bb1` (either a read or a write),
- * `def` is read at index `i2` in basic block `bb2`, `bb2` is in a transitive
- * successor block of `bb1`, and `def` is neither read nor written in any block
- * on a path between `bb1` and `bb2`.
+ * the underlying variable `v` of `def` is accessed in basic block `bb2`
+ * (either a read or a write), `bb2` is a transitive successor of `bb1`, and
+ * `v` is neither read nor written in any block on the path between `bb1`
+ * and `bb2`.
*/
+ pragma[nomagic]
+ predicate varBlockReaches(Definition def, BasicBlock bb1, BasicBlock bb2) {
+ varBlockReachesExclPhiRead(def, bb1, bb2) and
+ not defOccursInBlock(def, bb1, _, SsaPhiRead())
+ }
+
+ pragma[nomagic]
predicate defAdjacentRead(Definition def, BasicBlock bb1, BasicBlock bb2, int i2) {
varBlockReaches(def, bb1, bb2) and
- ssaRefRank(bb2, i2, def.getSourceVariable(), SsaRead()) = 1
+ ssaRefRank(bb2, i2, def.getSourceVariable(), SsaActualRead()) = 1
+ }
+
+ /**
+ * Holds if `def` is accessed in basic block `bb` (either a read or a write),
+ * `bb1` can reach a transitive successor `bb2` where `def` is no longer live,
+ * and `v` is neither read nor written in any block on the path between `bb`
+ * and `bb2`.
+ */
+ pragma[nomagic]
+ predicate varBlockReachesExit(Definition def, BasicBlock bb) {
+ exists(BasicBlock bb2 | varBlockReachesInclPhiRead(def, bb, bb2) |
+ not defOccursInBlock(def, bb2, _, _) and
+ not ssaDefReachesEndOfBlock(bb2, def, _)
+ )
+ or
+ exists(BasicBlock mid |
+ varBlockReachesExit(def, mid) and
+ phiReadStep(def, _, bb, mid)
+ )
}
}
+predicate phiReadExposedForTesting = phiRead/2;
+
private import SsaDefReaches
pragma[nomagic]
@@ -365,7 +503,8 @@ predicate liveThrough(BasicBlock bb, SourceVariable v) {
*/
pragma[nomagic]
predicate ssaDefReachesEndOfBlock(BasicBlock bb, Definition def, SourceVariable v) {
- exists(int last | last = maxSsaRefRank(bb, v) |
+ exists(int last |
+ last = maxSsaRefRank(pragma[only_bind_into](bb), pragma[only_bind_into](v)) and
ssaDefReachesRank(bb, def, last, v) and
liveAtExit(bb, v)
)
@@ -405,7 +544,7 @@ pragma[nomagic]
predicate ssaDefReachesRead(SourceVariable v, Definition def, BasicBlock bb, int i) {
ssaDefReachesReadWithinBlock(v, def, bb, i)
or
- variableRead(bb, i, v, _) and
+ ssaRef(bb, i, v, any(SsaRead k)) and
ssaDefReachesEndOfBlock(getABasicBlockPredecessor(bb), def, v) and
not ssaDefReachesReadWithinBlock(v, _, bb, i)
}
@@ -421,7 +560,7 @@ pragma[nomagic]
predicate adjacentDefRead(Definition def, BasicBlock bb1, int i1, BasicBlock bb2, int i2) {
exists(int rnk |
rnk = ssaDefRank(def, _, bb1, i1, _) and
- rnk + 1 = ssaDefRank(def, _, bb1, i2, SsaRead()) and
+ rnk + 1 = ssaDefRank(def, _, bb1, i2, SsaActualRead()) and
variableRead(bb1, i2, _, _) and
bb2 = bb1
)
@@ -538,18 +677,15 @@ predicate lastRefRedefNoUncertainReads(Definition def, BasicBlock bb, int i, Def
*/
pragma[nomagic]
predicate lastRef(Definition def, BasicBlock bb, int i) {
+ // Can reach another definition
lastRefRedef(def, bb, i, _)
or
- lastSsaRef(def, _, bb, i) and
- (
+ exists(SourceVariable v | lastSsaRef(def, v, bb, i) |
// Can reach exit directly
bb instanceof ExitBasicBlock
or
// Can reach a block using one or more steps, where `def` is no longer live
- exists(BasicBlock bb2 | varBlockReaches(def, bb, bb2) |
- not defOccursInBlock(def, bb2, _) and
- not ssaDefReachesEndOfBlock(bb2, def, _)
- )
+ varBlockReachesExit(def, bb)
)
}
diff --git a/csharp/ql/lib/semmle/code/csharp/exprs/Call.qll b/csharp/ql/lib/semmle/code/csharp/exprs/Call.qll
index 42d8e30e25b..1aa67410c59 100644
--- a/csharp/ql/lib/semmle/code/csharp/exprs/Call.qll
+++ b/csharp/ql/lib/semmle/code/csharp/exprs/Call.qll
@@ -5,8 +5,6 @@
*/
import Expr
-import semmle.code.csharp.dataflow.CallContext as CallContext
-private import semmle.code.csharp.dataflow.internal.DelegateDataFlow
private import semmle.code.csharp.dataflow.internal.DataFlowDispatch
private import semmle.code.csharp.dataflow.internal.DataFlowImplCommon
private import semmle.code.csharp.dispatch.Dispatch
@@ -536,19 +534,6 @@ private class DelegateLikeCall_ = @delegate_invocation_expr or @function_pointer
class DelegateLikeCall extends Call, DelegateLikeCall_ {
override Callable getTarget() { none() }
- /**
- * DEPRECATED: Use `getARuntimeTarget/0` instead.
- *
- * Gets a potential run-time target of this delegate or function pointer call in the given
- * call context `cc`.
- */
- deprecated Callable getARuntimeTarget(CallContext::CallContext cc) {
- exists(DelegateLikeCallExpr call |
- this = call.getCall() and
- result = call.getARuntimeTarget(cc)
- )
- }
-
/**
* Gets the delegate or function pointer expression of this call. For example, the
* delegate expression of `X()` on line 5 is the access to the field `X` in
@@ -568,7 +553,7 @@ class DelegateLikeCall extends Call, DelegateLikeCall_ {
final override Callable getARuntimeTarget() {
exists(ExplicitDelegateLikeDataFlowCall call |
this = call.getCall() and
- result = viableCallableLambda(call, _).getUnderlyingCallable()
+ result = viableCallableLambda(call, _).asCallable()
)
}
@@ -589,48 +574,6 @@ class DelegateLikeCall extends Call, DelegateLikeCall_ {
* ```
*/
class DelegateCall extends DelegateLikeCall, @delegate_invocation_expr {
- /**
- * DEPRECATED: Use `getARuntimeTarget/0` instead.
- *
- * Gets a potential run-time target of this delegate call in the given
- * call context `cc`.
- */
- deprecated override Callable getARuntimeTarget(CallContext::CallContext cc) {
- result = DelegateLikeCall.super.getARuntimeTarget(cc)
- or
- exists(AddEventSource aes, CallContext::CallContext cc2 |
- aes = this.getAnAddEventSource(_) and
- result = aes.getARuntimeTarget(cc2)
- |
- aes = this.getAnAddEventSourceSameEnclosingCallable() and
- cc = cc2
- or
- // The event is added in another callable, so the call context is not relevant
- aes = this.getAnAddEventSourceDifferentEnclosingCallable() and
- cc instanceof CallContext::EmptyCallContext
- )
- }
-
- deprecated private AddEventSource getAnAddEventSource(Callable enclosingCallable) {
- this.getExpr().(EventAccess).getTarget() = result.getEvent() and
- enclosingCallable = result.getExpr().getEnclosingCallable()
- }
-
- deprecated private AddEventSource getAnAddEventSourceSameEnclosingCallable() {
- result = this.getAnAddEventSource(this.getEnclosingCallable())
- }
-
- deprecated private AddEventSource getAnAddEventSourceDifferentEnclosingCallable() {
- exists(Callable c | result = this.getAnAddEventSource(c) | c != this.getEnclosingCallable())
- }
-
- /**
- * DEPRECATED: use `getExpr` instead.
- *
- * Gets the delegate expression of this call.
- */
- deprecated Expr getDelegateExpr() { result = this.getExpr() }
-
override string toString() { result = "delegate call" }
override string getAPrimaryQlClass() { result = "DelegateCall" }
diff --git a/csharp/ql/lib/semmle/code/csharp/exprs/Expr.qll b/csharp/ql/lib/semmle/code/csharp/exprs/Expr.qll
index e62b95a04cf..87fbcb8c3a9 100644
--- a/csharp/ql/lib/semmle/code/csharp/exprs/Expr.qll
+++ b/csharp/ql/lib/semmle/code/csharp/exprs/Expr.qll
@@ -1036,9 +1036,6 @@ class TupleExpr extends Expr, @tuple_expr {
/** Gets an argument of this tuple. */
Expr getAnArgument() { result = this.getArgument(_) }
- /** Holds if this tuple is a read access. */
- deprecated predicate isReadAccess() { not this = getAnAssignOrForeachChild() }
-
/** Holds if this expression is a tuple construction. */
predicate isConstruction() {
not this = getAnAssignOrForeachChild() and
diff --git a/csharp/ql/lib/semmle/code/csharp/frameworks/GeneratedNegative.qll b/csharp/ql/lib/semmle/code/csharp/frameworks/GeneratedNegative.qll
new file mode 100644
index 00000000000..0e1c66e251d
--- /dev/null
+++ b/csharp/ql/lib/semmle/code/csharp/frameworks/GeneratedNegative.qll
@@ -0,0 +1,9 @@
+/**
+ * A module importing all generated negative Models as Data models.
+ */
+
+import csharp
+
+private module GeneratedFrameworks {
+ private import generated.dotnet.NegativeRuntime
+}
diff --git a/csharp/ql/lib/semmle/code/csharp/frameworks/JsonNET.qll b/csharp/ql/lib/semmle/code/csharp/frameworks/JsonNET.qll
index 5fb1c2f1aa5..f8d8a5bbc81 100644
--- a/csharp/ql/lib/semmle/code/csharp/frameworks/JsonNET.qll
+++ b/csharp/ql/lib/semmle/code/csharp/frameworks/JsonNET.qll
@@ -228,11 +228,11 @@ module JsonNET {
override predicate row(string row) {
row =
[
- "Newtonsoft.Json.Linq;JToken;false;SelectToken;(System.String);;Argument[Qualifier];ReturnValue;taint;manual",
- "Newtonsoft.Json.Linq;JToken;false;SelectToken;(System.String,Newtonsoft.Json.Linq.JsonSelectSettings);;Argument[Qualifier];ReturnValue;taint;manual",
- "Newtonsoft.Json.Linq;JToken;false;SelectToken;(System.String,System.Boolean);;Argument[Qualifier];ReturnValue;taint;manual",
- "Newtonsoft.Json.Linq;JToken;false;ToString;();;Argument[Qualifier];ReturnValue;taint;manual",
- "Newtonsoft.Json.Linq;JToken;false;ToString;(Newtonsoft.Json.Formatting,Newtonsoft.Json.JsonConverter[]);;Argument[Qualifier];ReturnValue;taint;manual",
+ "Newtonsoft.Json.Linq;JToken;false;SelectToken;(System.String);;Argument[this];ReturnValue;taint;manual",
+ "Newtonsoft.Json.Linq;JToken;false;SelectToken;(System.String,Newtonsoft.Json.Linq.JsonSelectSettings);;Argument[this];ReturnValue;taint;manual",
+ "Newtonsoft.Json.Linq;JToken;false;SelectToken;(System.String,System.Boolean);;Argument[this];ReturnValue;taint;manual",
+ "Newtonsoft.Json.Linq;JToken;false;ToString;();;Argument[this];ReturnValue;taint;manual",
+ "Newtonsoft.Json.Linq;JToken;false;ToString;(Newtonsoft.Json.Formatting,Newtonsoft.Json.JsonConverter[]);;Argument[this];ReturnValue;taint;manual",
]
}
}
@@ -253,21 +253,21 @@ module JsonNET {
override predicate row(string row) {
row =
[
- "Newtonsoft.Json.Linq;JObject;false;Add;(System.Collections.Generic.KeyValuePair);;Argument[0].Property[System.Collections.Generic.KeyValuePair<,>.Key];Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];value;manual",
- "Newtonsoft.Json.Linq;JObject;false;Add;(System.Collections.Generic.KeyValuePair);;Argument[0].Property[System.Collections.Generic.KeyValuePair<,>.Value];Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];value;manual",
- "Newtonsoft.Json.Linq;JObject;false;JObject;(Newtonsoft.Json.Linq.JObject);;Argument[0].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];value;manual",
- "Newtonsoft.Json.Linq;JObject;false;JObject;(Newtonsoft.Json.Linq.JObject);;Argument[0].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];value;manual",
- "Newtonsoft.Json.Linq;JObject;false;JObject;(System.Object[]);;Argument[0].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];value;manual",
- "Newtonsoft.Json.Linq;JObject;false;JObject;(System.Object[]);;Argument[0].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];value;manual",
+ "Newtonsoft.Json.Linq;JObject;false;Add;(System.Collections.Generic.KeyValuePair);;Argument[0].Property[System.Collections.Generic.KeyValuePair<,>.Key];Argument[this].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];value;manual",
+ "Newtonsoft.Json.Linq;JObject;false;Add;(System.Collections.Generic.KeyValuePair);;Argument[0].Property[System.Collections.Generic.KeyValuePair<,>.Value];Argument[this].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];value;manual",
+ "Newtonsoft.Json.Linq;JObject;false;JObject;(Newtonsoft.Json.Linq.JObject);;Argument[0].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];Argument[this].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];value;manual",
+ "Newtonsoft.Json.Linq;JObject;false;JObject;(Newtonsoft.Json.Linq.JObject);;Argument[0].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];Argument[this].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];value;manual",
+ "Newtonsoft.Json.Linq;JObject;false;JObject;(System.Object[]);;Argument[0].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];Argument[this].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];value;manual",
+ "Newtonsoft.Json.Linq;JObject;false;JObject;(System.Object[]);;Argument[0].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];Argument[this].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];value;manual",
"Newtonsoft.Json.Linq;JObject;false;Parse;(System.String);;Argument[0];ReturnValue;taint;manual",
"Newtonsoft.Json.Linq;JObject;false;Parse;(System.String,Newtonsoft.Json.Linq.JsonLoadSettings);;Argument[0];ReturnValue;taint;manual",
- "Newtonsoft.Json.Linq;JObject;false;get_Item;(System.Object);;Argument[Qualifier].Element;ReturnValue;value;manual",
- "Newtonsoft.Json.Linq;JObject;false;get_Item;(System.Object);;Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];ReturnValue;value;manual",
- "Newtonsoft.Json.Linq;JObject;false;get_Item;(System.String);;Argument[Qualifier].Element;ReturnValue;value;manual",
- "Newtonsoft.Json.Linq;JObject;false;set_Item;(System.Object,Newtonsoft.Json.Linq.JToken);;Argument[0];Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];value;manual",
- "Newtonsoft.Json.Linq;JObject;false;set_Item;(System.Object,Newtonsoft.Json.Linq.JToken);;Argument[1];Argument[Qualifier].Element;value;manual",
- "Newtonsoft.Json.Linq;JObject;false;set_Item;(System.Object,Newtonsoft.Json.Linq.JToken);;Argument[1];Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];value;manual",
- "Newtonsoft.Json.Linq;JObject;false;set_Item;(System.String,Newtonsoft.Json.Linq.JToken);;Argument[1];Argument[Qualifier].Element;value;manual",
+ "Newtonsoft.Json.Linq;JObject;false;get_Item;(System.Object);;Argument[this].Element;ReturnValue;value;manual",
+ "Newtonsoft.Json.Linq;JObject;false;get_Item;(System.Object);;Argument[this].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];ReturnValue;value;manual",
+ "Newtonsoft.Json.Linq;JObject;false;get_Item;(System.String);;Argument[this].Element;ReturnValue;value;manual",
+ "Newtonsoft.Json.Linq;JObject;false;set_Item;(System.Object,Newtonsoft.Json.Linq.JToken);;Argument[0];Argument[this].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];value;manual",
+ "Newtonsoft.Json.Linq;JObject;false;set_Item;(System.Object,Newtonsoft.Json.Linq.JToken);;Argument[1];Argument[this].Element;value;manual",
+ "Newtonsoft.Json.Linq;JObject;false;set_Item;(System.Object,Newtonsoft.Json.Linq.JToken);;Argument[1];Argument[this].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];value;manual",
+ "Newtonsoft.Json.Linq;JObject;false;set_Item;(System.String,Newtonsoft.Json.Linq.JToken);;Argument[1];Argument[this].Element;value;manual",
]
}
}
@@ -277,8 +277,8 @@ module JsonNET {
override predicate row(string row) {
row =
[
- "Newtonsoft.Json.Linq;JArray;false;get_Item;(System.Object);;Argument[Qualifier].Element;ReturnValue;value;manual",
- "Newtonsoft.Json.Linq;JArray;false;set_Item;(System.Object,Newtonsoft.Json.Linq.JToken);;Argument[1];Argument[Qualifier].Element;value;manual",
+ "Newtonsoft.Json.Linq;JArray;false;get_Item;(System.Object);;Argument[this].Element;ReturnValue;value;manual",
+ "Newtonsoft.Json.Linq;JArray;false;set_Item;(System.Object,Newtonsoft.Json.Linq.JToken);;Argument[1];Argument[this].Element;value;manual",
]
}
}
@@ -288,8 +288,8 @@ module JsonNET {
override predicate row(string row) {
row =
[
- "Newtonsoft.Json.Linq;JConstructor;false;get_Item;(System.Object);;Argument[Qualifier].Element;ReturnValue;value;manual",
- "Newtonsoft.Json.Linq;JConstructor;false;set_Item;(System.Object,Newtonsoft.Json.Linq.JToken);;Argument[1];Argument[Qualifier].Element;value;manual",
+ "Newtonsoft.Json.Linq;JConstructor;false;get_Item;(System.Object);;Argument[this].Element;ReturnValue;value;manual",
+ "Newtonsoft.Json.Linq;JConstructor;false;set_Item;(System.Object,Newtonsoft.Json.Linq.JToken);;Argument[1];Argument[this].Element;value;manual",
]
}
}
@@ -298,7 +298,7 @@ module JsonNET {
private class NewtonsoftJsonLinqJContainerFlowModelCsv extends SummaryModelCsv {
override predicate row(string row) {
row =
- "Newtonsoft.Json.Linq;JContainer;true;Add;(System.Object);;Argument[0];Argument[Qualifier].Element;value;manual"
+ "Newtonsoft.Json.Linq;JContainer;true;Add;(System.Object);;Argument[0];Argument[this].Element;value;manual"
}
}
}
diff --git a/csharp/ql/lib/semmle/code/csharp/frameworks/ServiceStack.qll b/csharp/ql/lib/semmle/code/csharp/frameworks/ServiceStack.qll
index 2f54ae3e08b..362ebe55f05 100644
--- a/csharp/ql/lib/semmle/code/csharp/frameworks/ServiceStack.qll
+++ b/csharp/ql/lib/semmle/code/csharp/frameworks/ServiceStack.qll
@@ -282,13 +282,13 @@ private class ServiceStackXssSummaryModelCsv extends SummaryModelCsv {
override predicate row(string row) {
row =
[
- "ServiceStack;HttpResult;false;HttpResult;(System.String,System.String);;Argument[0];Argument[Qualifier];taint;manual",
- "ServiceStack;HttpResult;false;HttpResult;(System.Object,System.String,System.Net.HttpStatusCode);;Argument[0];Argument[Qualifier];taint;manual",
- "ServiceStack;HttpResult;false;HttpResult;(System.Object,System.String);;Argument[0];Argument[Qualifier];taint;manual",
- "ServiceStack;HttpResult;false;HttpResult;(System.Object,System.Net.HttpStatusCode);;Argument[0];Argument[Qualifier];taint;manual",
- "ServiceStack;HttpResult;false;HttpResult;(System.Object);;Argument[0];Argument[Qualifier];taint;manual",
- "ServiceStack;HttpResult;false;HttpResult;(System.IO.Stream,System.String);;Argument[0];Argument[Qualifier];taint;manual",
- "ServiceStack;HttpResult;false;HttpResult;(System.Byte[],System.String);;Argument[0];Argument[Qualifier];taint;manual"
+ "ServiceStack;HttpResult;false;HttpResult;(System.String,System.String);;Argument[0];Argument[this];taint;manual",
+ "ServiceStack;HttpResult;false;HttpResult;(System.Object,System.String,System.Net.HttpStatusCode);;Argument[0];Argument[this];taint;manual",
+ "ServiceStack;HttpResult;false;HttpResult;(System.Object,System.String);;Argument[0];Argument[this];taint;manual",
+ "ServiceStack;HttpResult;false;HttpResult;(System.Object,System.Net.HttpStatusCode);;Argument[0];Argument[this];taint;manual",
+ "ServiceStack;HttpResult;false;HttpResult;(System.Object);;Argument[0];Argument[this];taint;manual",
+ "ServiceStack;HttpResult;false;HttpResult;(System.IO.Stream,System.String);;Argument[0];Argument[this];taint;manual",
+ "ServiceStack;HttpResult;false;HttpResult;(System.Byte[],System.String);;Argument[0];Argument[this];taint;manual"
]
}
}
diff --git a/csharp/ql/lib/semmle/code/csharp/frameworks/Sql.qll b/csharp/ql/lib/semmle/code/csharp/frameworks/Sql.qll
index 04c06399fea..2a981572d0b 100644
--- a/csharp/ql/lib/semmle/code/csharp/frameworks/Sql.qll
+++ b/csharp/ql/lib/semmle/code/csharp/frameworks/Sql.qll
@@ -39,7 +39,8 @@ class IDbCommandConstructionSqlExpr extends SqlExpr, ObjectCreation {
.hasQualifiedName([
// Known sealed classes:
"System.Data.SqlClient.SqlCommand", "System.Data.Odbc.OdbcCommand",
- "System.Data.OleDb.OleDbCommand", "System.Data.EntityClient.EntityCommand"
+ "System.Data.OleDb.OleDbCommand", "System.Data.EntityClient.EntityCommand",
+ "System.Data.SQLite.SQLiteCommand"
])
)
}
@@ -67,18 +68,46 @@ private class IDbCommandConstructionSinkModelCsv extends SinkModelCsv {
// EntityCommand
"System.Data.EntityClient;EntityCommand;false;EntityCommand;(System.String);;Argument[0];sql;manual",
"System.Data.EntityClient;EntityCommand;false;EntityCommand;(System.String,System.Data.EntityClient.EntityConnection);;Argument[0];sql;manual",
- "System.Data.EntityClient;EntityCommand;false;EntityCommand;(System.String,System.Data.EntityClient.EntityConnection,System.Data.EntityClient.EntityTransaction);;Argument[0];sql;manual"
+ "System.Data.EntityClient;EntityCommand;false;EntityCommand;(System.String,System.Data.EntityClient.EntityConnection,System.Data.EntityClient.EntityTransaction);;Argument[0];sql;manual",
+ // SQLiteCommand
+ "System.Data.SQLite;SQLiteCommand;false;SQLiteCommand;(System.String);;Argument[0];sql;manual",
+ "System.Data.SQLite;SQLiteCommand;false;SQLiteCommand;(System.String,System.Data.SQLite.SQLiteConnection);;Argument[0];sql;manual",
+ "System.Data.SQLite;SQLiteCommand;false;SQLiteCommand;(System.String,System.Data.SQLite.SQLiteConnection,System.Data.SQLite.SQLiteTransaction);;Argument[0];sql;manual",
]
}
}
-/** A construction of an `SqlDataAdapter` object. */
+/** Data flow for SqlCommand and friends. */
+private class SqlCommandSummaryModelCsv extends SummaryModelCsv {
+ override predicate row(string row) {
+ row =
+ [
+ // SqlCommand
+ "System.Data.SqlClient;SqlCommand;false;SqlCommand;(System.String);;Argument[0];Argument[this];taint;manual",
+ "System.Data.SqlClient;SqlCommand;false;SqlCommand;(System.String,System.Data.SqlClient.SqlConnection);;Argument[0];Argument[this];taint;manual",
+ "System.Data.SqlClient;SqlCommand;false;SqlCommand;(System.String,System.Data.SqlClient.SqlConnection,System.Data.SqlClient.SqlTransaction);;Argument[0];Argument[this];taint;manual",
+ // SQLiteCommand.
+ "System.Data.SQLite;SQLiteCommand;false;SQLiteCommand;(System.String);;Argument[0];Argument[this];taint;manual",
+ "System.Data.SQLite;SQLiteCommand;false;SQLiteCommand;(System.String,System.Data.SQLite.SQLiteConnection);;Argument[0];Argument[this];taint;manual",
+ "System.Data.SQLite;SQLiteCommand;false;SQLiteCommand;(System.String,System.Data.SQLite.SQLiteConnection,System.Data.SQLite.SQLiteTransaction);;Argument[0];Argument[this];taint;manual",
+ ]
+ }
+}
+
+/** A construction of an `Adapter` object. */
private class SqlDataAdapterConstructionSinkModelCsv extends SinkModelCsv {
override predicate row(string row) {
row =
[
+ // SqlDataAdapter
+ "System.Data.SqlClient;SqlDataAdapter;false;SqlDataAdapter;(System.Data.SqlClient.SqlCommand);;Argument[0];sql;manual",
"System.Data.SqlClient;SqlDataAdapter;false;SqlDataAdapter;(System.String,System.String);;Argument[0];sql;manual",
- "System.Data.SqlClient;SqlDataAdapter;false;SqlDataAdapter;(System.String,System.Data.SqlClient.SqlConnection);;Argument[0];sql;manual"
+ "System.Data.SqlClient;SqlDataAdapter;false;SqlDataAdapter;(System.String,System.Data.SqlClient.SqlConnection);;Argument[0];sql;manual",
+ // SQLiteDataAdapter
+ "System.Data.SQLite;SQLiteDataAdapter;false;SQLiteDataAdapter;(System.Data.SQLite.SQLiteCommand);;Argument[0];sql;manual",
+ "System.Data.SQLite;SQLiteDataAdapter;false;SQLiteDataAdapter;(System.String,System.Data.SQLite.SQLiteConnection);;Argument[0];sql;manual",
+ "System.Data.SQLite;SQLiteDataAdapter;false;SQLiteDataAdapter;(System.String,System.String);;Argument[0];sql;manual",
+ "System.Data.SQLite;SQLiteDataAdapter;false;SQLiteDataAdapter;(System.String,System.String,System.Boolean);;Argument[0];sql;manual",
]
}
}
diff --git a/csharp/ql/lib/semmle/code/csharp/frameworks/System.qll b/csharp/ql/lib/semmle/code/csharp/frameworks/System.qll
index 6621c6a7835..e878179d7f8 100644
--- a/csharp/ql/lib/semmle/code/csharp/frameworks/System.qll
+++ b/csharp/ql/lib/semmle/code/csharp/frameworks/System.qll
@@ -72,7 +72,7 @@ private class SystemArrayFlowModelCsv extends SummaryModelCsv {
[
"System;Array;false;AsReadOnly<>;(T[]);;Argument[0].Element;ReturnValue.Element;value;manual",
"System;Array;false;Clone;();;Argument[0].Element;ReturnValue.Element;value;manual",
- "System;Array;false;CopyTo;(System.Array,System.Int64);;Argument[Qualifier].Element;Argument[0].Element;value;manual",
+ "System;Array;false;CopyTo;(System.Array,System.Int64);;Argument[this].Element;Argument[0].Element;value;manual",
"System;Array;false;Find<>;(T[],System.Predicate);;Argument[0].Element;Argument[1].Parameter[0];value;manual",
"System;Array;false;Find<>;(T[],System.Predicate);;Argument[0].Element;ReturnValue;value;manual",
"System;Array;false;FindAll<>;(T[],System.Predicate);;Argument[0].Element;Argument[1].Parameter[0];value;manual",
@@ -622,10 +622,10 @@ private class SystemLazyFlowModelCsv extends SummaryModelCsv {
override predicate row(string row) {
row =
[
- "System;Lazy<>;false;Lazy;(System.Func);;Argument[0].ReturnValue;Argument[Qualifier].Property[System.Lazy<>.Value];value;manual",
- "System;Lazy<>;false;Lazy;(System.Func,System.Boolean);;Argument[0].ReturnValue;Argument[Qualifier].Property[System.Lazy<>.Value];value;manual",
- "System;Lazy<>;false;Lazy;(System.Func,System.Threading.LazyThreadSafetyMode);;Argument[0].ReturnValue;Argument[Qualifier].Property[System.Lazy<>.Value];value;manual",
- "System;Lazy<>;false;get_Value;();;Argument[Qualifier];ReturnValue;taint;manual",
+ "System;Lazy<>;false;Lazy;(System.Func);;Argument[0].ReturnValue;Argument[this].Property[System.Lazy<>.Value];value;manual",
+ "System;Lazy<>;false;Lazy;(System.Func,System.Boolean);;Argument[0].ReturnValue;Argument[this].Property[System.Lazy<>.Value];value;manual",
+ "System;Lazy<>;false;Lazy;(System.Func,System.Threading.LazyThreadSafetyMode);;Argument[0].ReturnValue;Argument[this].Property[System.Lazy<>.Value];value;manual",
+ "System;Lazy<>;false;get_Value;();;Argument[this];ReturnValue;taint;manual",
]
}
}
@@ -664,12 +664,12 @@ private class SystemNullableFlowModelCsv extends SummaryModelCsv {
override predicate row(string row) {
row =
[
- "System;Nullable<>;false;GetValueOrDefault;();;Argument[Qualifier].Property[System.Nullable<>.Value];ReturnValue;value;manual",
+ "System;Nullable<>;false;GetValueOrDefault;();;Argument[this].Property[System.Nullable<>.Value];ReturnValue;value;manual",
"System;Nullable<>;false;GetValueOrDefault;(T);;Argument[0];ReturnValue;value;manual",
- "System;Nullable<>;false;GetValueOrDefault;(T);;Argument[Qualifier].Property[System.Nullable<>.Value];ReturnValue;value;manual",
- "System;Nullable<>;false;Nullable;(T);;Argument[0];Argument[Qualifier].Property[System.Nullable<>.Value];value;manual",
- "System;Nullable<>;false;get_HasValue;();;Argument[Qualifier].Property[System.Nullable<>.Value];ReturnValue;taint;manual",
- "System;Nullable<>;false;get_Value;();;Argument[Qualifier];ReturnValue;taint;manual",
+ "System;Nullable<>;false;GetValueOrDefault;(T);;Argument[this].Property[System.Nullable<>.Value];ReturnValue;value;manual",
+ "System;Nullable<>;false;Nullable;(T);;Argument[0];Argument[this].Property[System.Nullable<>.Value];value;manual",
+ "System;Nullable<>;false;get_HasValue;();;Argument[this].Property[System.Nullable<>.Value];ReturnValue;taint;manual",
+ "System;Nullable<>;false;get_Value;();;Argument[this];ReturnValue;taint;manual",
]
}
}
@@ -885,7 +885,7 @@ private class SystemStringFlowModelCsv extends SummaryModelCsv {
override predicate row(string row) {
row =
[
- "System;String;false;Clone;();;Argument[Qualifier];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",
"System;String;false;Concat;(System.Object,System.Object);;Argument[0];ReturnValue;taint;manual",
@@ -937,10 +937,10 @@ private class SystemStringFlowModelCsv extends SummaryModelCsv {
"System;String;false;Format;(System.String,System.Object,System.Object,System.Object);;Argument[3];ReturnValue;taint;manual",
"System;String;false;Format;(System.String,System.Object[]);;Argument[0];ReturnValue;taint;manual",
"System;String;false;Format;(System.String,System.Object[]);;Argument[1].Element;ReturnValue;taint;manual",
- "System;String;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.CharEnumerator.Current];value;manual",
- "System;String;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.Generic.IEnumerator<>.Current];value;manual",
+ "System;String;false;GetEnumerator;();;Argument[this].Element;ReturnValue.Property[System.CharEnumerator.Current];value;manual",
+ "System;String;false;GetEnumerator;();;Argument[this].Element;ReturnValue.Property[System.Collections.Generic.IEnumerator<>.Current];value;manual",
"System;String;false;Insert;(System.Int32,System.String);;Argument[1];ReturnValue;taint;manual",
- "System;String;false;Insert;(System.Int32,System.String);;Argument[Qualifier];ReturnValue;taint;manual",
+ "System;String;false;Insert;(System.Int32,System.String);;Argument[this];ReturnValue;taint;manual",
"System;String;false;Join;(System.Char,System.Object[]);;Argument[0];ReturnValue;taint;manual",
"System;String;false;Join;(System.Char,System.Object[]);;Argument[1].Element;ReturnValue;taint;manual",
"System;String;false;Join;(System.Char,System.String[]);;Argument[0];ReturnValue;taint;manual",
@@ -959,49 +959,49 @@ private class SystemStringFlowModelCsv extends SummaryModelCsv {
"System;String;false;Join<>;(System.Char,System.Collections.Generic.IEnumerable);;Argument[1].Element;ReturnValue;taint;manual",
"System;String;false;Join<>;(System.String,System.Collections.Generic.IEnumerable);;Argument[0];ReturnValue;taint;manual",
"System;String;false;Join<>;(System.String,System.Collections.Generic.IEnumerable);;Argument[1].Element;ReturnValue;taint;manual",
- "System;String;false;Normalize;();;Argument[Qualifier];ReturnValue;taint;manual",
- "System;String;false;Normalize;(System.Text.NormalizationForm);;Argument[Qualifier];ReturnValue;taint;manual",
- "System;String;false;PadLeft;(System.Int32);;Argument[Qualifier];ReturnValue;taint;manual",
- "System;String;false;PadLeft;(System.Int32,System.Char);;Argument[Qualifier];ReturnValue;taint;manual",
- "System;String;false;PadRight;(System.Int32);;Argument[Qualifier];ReturnValue;taint;manual",
- "System;String;false;PadRight;(System.Int32,System.Char);;Argument[Qualifier];ReturnValue;taint;manual",
- "System;String;false;Remove;(System.Int32);;Argument[Qualifier];ReturnValue;taint;manual",
- "System;String;false;Remove;(System.Int32,System.Int32);;Argument[Qualifier];ReturnValue;taint;manual",
+ "System;String;false;Normalize;();;Argument[this];ReturnValue;taint;manual",
+ "System;String;false;Normalize;(System.Text.NormalizationForm);;Argument[this];ReturnValue;taint;manual",
+ "System;String;false;PadLeft;(System.Int32);;Argument[this];ReturnValue;taint;manual",
+ "System;String;false;PadLeft;(System.Int32,System.Char);;Argument[this];ReturnValue;taint;manual",
+ "System;String;false;PadRight;(System.Int32);;Argument[this];ReturnValue;taint;manual",
+ "System;String;false;PadRight;(System.Int32,System.Char);;Argument[this];ReturnValue;taint;manual",
+ "System;String;false;Remove;(System.Int32);;Argument[this];ReturnValue;taint;manual",
+ "System;String;false;Remove;(System.Int32,System.Int32);;Argument[this];ReturnValue;taint;manual",
"System;String;false;Replace;(System.Char,System.Char);;Argument[1];ReturnValue;taint;manual",
- "System;String;false;Replace;(System.Char,System.Char);;Argument[Qualifier];ReturnValue;taint;manual",
+ "System;String;false;Replace;(System.Char,System.Char);;Argument[this];ReturnValue;taint;manual",
"System;String;false;Replace;(System.String,System.String);;Argument[1];ReturnValue;taint;manual",
- "System;String;false;Replace;(System.String,System.String);;Argument[Qualifier];ReturnValue;taint;manual",
- "System;String;false;Split;(System.Char,System.Int32,System.StringSplitOptions);;Argument[Qualifier];ReturnValue.Element;taint;manual",
- "System;String;false;Split;(System.Char,System.StringSplitOptions);;Argument[Qualifier];ReturnValue.Element;taint;manual",
- "System;String;false;Split;(System.Char[]);;Argument[Qualifier];ReturnValue.Element;taint;manual",
- "System;String;false;Split;(System.Char[],System.Int32);;Argument[Qualifier];ReturnValue.Element;taint;manual",
- "System;String;false;Split;(System.Char[],System.Int32,System.StringSplitOptions);;Argument[Qualifier];ReturnValue.Element;taint;manual",
- "System;String;false;Split;(System.Char[],System.StringSplitOptions);;Argument[Qualifier];ReturnValue.Element;taint;manual",
- "System;String;false;Split;(System.String,System.Int32,System.StringSplitOptions);;Argument[Qualifier];ReturnValue.Element;taint;manual",
- "System;String;false;Split;(System.String,System.StringSplitOptions);;Argument[Qualifier];ReturnValue.Element;taint;manual",
- "System;String;false;Split;(System.String[],System.Int32,System.StringSplitOptions);;Argument[Qualifier];ReturnValue.Element;taint;manual",
- "System;String;false;Split;(System.String[],System.StringSplitOptions);;Argument[Qualifier];ReturnValue.Element;taint;manual",
- "System;String;false;String;(System.Char[]);;Argument[0].Element;Argument[Qualifier];taint;manual",
- "System;String;false;String;(System.Char[],System.Int32,System.Int32);;Argument[0].Element;Argument[Qualifier];taint;manual",
- "System;String;false;Substring;(System.Int32);;Argument[Qualifier];ReturnValue;taint;manual",
- "System;String;false;Substring;(System.Int32,System.Int32);;Argument[Qualifier];ReturnValue;taint;manual",
- "System;String;false;ToLower;();;Argument[Qualifier];ReturnValue;taint;manual",
- "System;String;false;ToLower;(System.Globalization.CultureInfo);;Argument[Qualifier];ReturnValue;taint;manual",
- "System;String;false;ToLowerInvariant;();;Argument[Qualifier];ReturnValue;taint;manual",
- "System;String;false;ToString;();;Argument[Qualifier];ReturnValue;value;manual",
- "System;String;false;ToString;(System.IFormatProvider);;Argument[Qualifier];ReturnValue;value;manual",
- "System;String;false;ToUpper;();;Argument[Qualifier];ReturnValue;taint;manual",
- "System;String;false;ToUpper;(System.Globalization.CultureInfo);;Argument[Qualifier];ReturnValue;taint;manual",
- "System;String;false;ToUpperInvariant;();;Argument[Qualifier];ReturnValue;taint;manual",
- "System;String;false;Trim;();;Argument[Qualifier];ReturnValue;taint;manual",
- "System;String;false;Trim;(System.Char);;Argument[Qualifier];ReturnValue;taint;manual",
- "System;String;false;Trim;(System.Char[]);;Argument[Qualifier];ReturnValue;taint;manual",
- "System;String;false;TrimEnd;();;Argument[Qualifier];ReturnValue;taint;manual",
- "System;String;false;TrimEnd;(System.Char);;Argument[Qualifier];ReturnValue;taint;manual",
- "System;String;false;TrimEnd;(System.Char[]);;Argument[Qualifier];ReturnValue;taint;manual",
- "System;String;false;TrimStart;();;Argument[Qualifier];ReturnValue;taint;manual",
- "System;String;false;TrimStart;(System.Char);;Argument[Qualifier];ReturnValue;taint;manual",
- "System;String;false;TrimStart;(System.Char[]);;Argument[Qualifier];ReturnValue;taint;manual",
+ "System;String;false;Replace;(System.String,System.String);;Argument[this];ReturnValue;taint;manual",
+ "System;String;false;Split;(System.Char,System.Int32,System.StringSplitOptions);;Argument[this];ReturnValue.Element;taint;manual",
+ "System;String;false;Split;(System.Char,System.StringSplitOptions);;Argument[this];ReturnValue.Element;taint;manual",
+ "System;String;false;Split;(System.Char[]);;Argument[this];ReturnValue.Element;taint;manual",
+ "System;String;false;Split;(System.Char[],System.Int32);;Argument[this];ReturnValue.Element;taint;manual",
+ "System;String;false;Split;(System.Char[],System.Int32,System.StringSplitOptions);;Argument[this];ReturnValue.Element;taint;manual",
+ "System;String;false;Split;(System.Char[],System.StringSplitOptions);;Argument[this];ReturnValue.Element;taint;manual",
+ "System;String;false;Split;(System.String,System.Int32,System.StringSplitOptions);;Argument[this];ReturnValue.Element;taint;manual",
+ "System;String;false;Split;(System.String,System.StringSplitOptions);;Argument[this];ReturnValue.Element;taint;manual",
+ "System;String;false;Split;(System.String[],System.Int32,System.StringSplitOptions);;Argument[this];ReturnValue.Element;taint;manual",
+ "System;String;false;Split;(System.String[],System.StringSplitOptions);;Argument[this];ReturnValue.Element;taint;manual",
+ "System;String;false;String;(System.Char[]);;Argument[0].Element;Argument[this];taint;manual",
+ "System;String;false;String;(System.Char[],System.Int32,System.Int32);;Argument[0].Element;Argument[this];taint;manual",
+ "System;String;false;Substring;(System.Int32);;Argument[this];ReturnValue;taint;manual",
+ "System;String;false;Substring;(System.Int32,System.Int32);;Argument[this];ReturnValue;taint;manual",
+ "System;String;false;ToLower;();;Argument[this];ReturnValue;taint;manual",
+ "System;String;false;ToLower;(System.Globalization.CultureInfo);;Argument[this];ReturnValue;taint;manual",
+ "System;String;false;ToLowerInvariant;();;Argument[this];ReturnValue;taint;manual",
+ "System;String;false;ToString;();;Argument[this];ReturnValue;value;manual",
+ "System;String;false;ToString;(System.IFormatProvider);;Argument[this];ReturnValue;value;manual",
+ "System;String;false;ToUpper;();;Argument[this];ReturnValue;taint;manual",
+ "System;String;false;ToUpper;(System.Globalization.CultureInfo);;Argument[this];ReturnValue;taint;manual",
+ "System;String;false;ToUpperInvariant;();;Argument[this];ReturnValue;taint;manual",
+ "System;String;false;Trim;();;Argument[this];ReturnValue;taint;manual",
+ "System;String;false;Trim;(System.Char);;Argument[this];ReturnValue;taint;manual",
+ "System;String;false;Trim;(System.Char[]);;Argument[this];ReturnValue;taint;manual",
+ "System;String;false;TrimEnd;();;Argument[this];ReturnValue;taint;manual",
+ "System;String;false;TrimEnd;(System.Char);;Argument[this];ReturnValue;taint;manual",
+ "System;String;false;TrimEnd;(System.Char[]);;Argument[this];ReturnValue;taint;manual",
+ "System;String;false;TrimStart;();;Argument[this];ReturnValue;taint;manual",
+ "System;String;false;TrimStart;(System.Char);;Argument[this];ReturnValue;taint;manual",
+ "System;String;false;TrimStart;(System.Char[]);;Argument[this];ReturnValue;taint;manual",
]
}
}
@@ -1072,13 +1072,13 @@ private class SystemUriFlowModelCsv extends SummaryModelCsv {
override predicate row(string row) {
row =
[
- "System;Uri;false;ToString;();;Argument[Qualifier];ReturnValue;taint;manual",
- "System;Uri;false;Uri;(System.String);;Argument[0];Argument[Qualifier];taint;manual",
- "System;Uri;false;Uri;(System.String,System.Boolean);;Argument[0];Argument[Qualifier];taint;manual",
- "System;Uri;false;Uri;(System.String,System.UriKind);;Argument[0];Argument[Qualifier];taint;manual",
- "System;Uri;false;get_OriginalString;();;Argument[Qualifier];ReturnValue;taint;manual",
- "System;Uri;false;get_PathAndQuery;();;Argument[Qualifier];ReturnValue;taint;manual",
- "System;Uri;false;get_Query;();;Argument[Qualifier];ReturnValue;taint;manual",
+ "System;Uri;false;ToString;();;Argument[this];ReturnValue;taint;manual",
+ "System;Uri;false;Uri;(System.String);;Argument[0];Argument[this];taint;manual",
+ "System;Uri;false;Uri;(System.String,System.Boolean);;Argument[0];Argument[this];taint;manual",
+ "System;Uri;false;Uri;(System.String,System.UriKind);;Argument[0];Argument[this];taint;manual",
+ "System;Uri;false;get_OriginalString;();;Argument[this];ReturnValue;taint;manual",
+ "System;Uri;false;get_PathAndQuery;();;Argument[this];ReturnValue;taint;manual",
+ "System;Uri;false;get_Query;();;Argument[this];ReturnValue;taint;manual",
]
}
}
@@ -1364,76 +1364,76 @@ private class SystemTupleTFlowModelCsv extends SummaryModelCsv {
override predicate row(string row) {
row =
[
- "System;Tuple<,,,,,,,>;false;Tuple;(T1,T2,T3,T4,T5,T6,T7,TRest);;Argument[0];Argument[Qualifier].Property[System.Tuple<,,,,,,,>.Item1];value;manual",
- "System;Tuple<,,,,,,,>;false;Tuple;(T1,T2,T3,T4,T5,T6,T7,TRest);;Argument[1];Argument[Qualifier].Property[System.Tuple<,,,,,,,>.Item2];value;manual",
- "System;Tuple<,,,,,,,>;false;Tuple;(T1,T2,T3,T4,T5,T6,T7,TRest);;Argument[2];Argument[Qualifier].Property[System.Tuple<,,,,,,,>.Item3];value;manual",
- "System;Tuple<,,,,,,,>;false;Tuple;(T1,T2,T3,T4,T5,T6,T7,TRest);;Argument[3];Argument[Qualifier].Property[System.Tuple<,,,,,,,>.Item4];value;manual",
- "System;Tuple<,,,,,,,>;false;Tuple;(T1,T2,T3,T4,T5,T6,T7,TRest);;Argument[4];Argument[Qualifier].Property[System.Tuple<,,,,,,,>.Item5];value;manual",
- "System;Tuple<,,,,,,,>;false;Tuple;(T1,T2,T3,T4,T5,T6,T7,TRest);;Argument[5];Argument[Qualifier].Property[System.Tuple<,,,,,,,>.Item6];value;manual",
- "System;Tuple<,,,,,,,>;false;Tuple;(T1,T2,T3,T4,T5,T6,T7,TRest);;Argument[6];Argument[Qualifier].Property[System.Tuple<,,,,,,,>.Item7];value;manual",
- "System;Tuple<,,,,,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Property[System.Tuple<,,,,,,,>.Item1];ReturnValue;value;manual",
- "System;Tuple<,,,,,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Property[System.Tuple<,,,,,,,>.Item2];ReturnValue;value;manual",
- "System;Tuple<,,,,,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Property[System.Tuple<,,,,,,,>.Item3];ReturnValue;value;manual",
- "System;Tuple<,,,,,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Property[System.Tuple<,,,,,,,>.Item4];ReturnValue;value;manual",
- "System;Tuple<,,,,,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Property[System.Tuple<,,,,,,,>.Item5];ReturnValue;value;manual",
- "System;Tuple<,,,,,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Property[System.Tuple<,,,,,,,>.Item6];ReturnValue;value;manual",
- "System;Tuple<,,,,,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Property[System.Tuple<,,,,,,,>.Item7];ReturnValue;value;manual",
- "System;Tuple<,,,,,,>;false;Tuple;(T1,T2,T3,T4,T5,T6,T7);;Argument[0];Argument[Qualifier].Property[System.Tuple<,,,,,,>.Item1];value;manual",
- "System;Tuple<,,,,,,>;false;Tuple;(T1,T2,T3,T4,T5,T6,T7);;Argument[1];Argument[Qualifier].Property[System.Tuple<,,,,,,>.Item2];value;manual",
- "System;Tuple<,,,,,,>;false;Tuple;(T1,T2,T3,T4,T5,T6,T7);;Argument[2];Argument[Qualifier].Property[System.Tuple<,,,,,,>.Item3];value;manual",
- "System;Tuple<,,,,,,>;false;Tuple;(T1,T2,T3,T4,T5,T6,T7);;Argument[3];Argument[Qualifier].Property[System.Tuple<,,,,,,>.Item4];value;manual",
- "System;Tuple<,,,,,,>;false;Tuple;(T1,T2,T3,T4,T5,T6,T7);;Argument[4];Argument[Qualifier].Property[System.Tuple<,,,,,,>.Item5];value;manual",
- "System;Tuple<,,,,,,>;false;Tuple;(T1,T2,T3,T4,T5,T6,T7);;Argument[5];Argument[Qualifier].Property[System.Tuple<,,,,,,>.Item6];value;manual",
- "System;Tuple<,,,,,,>;false;Tuple;(T1,T2,T3,T4,T5,T6,T7);;Argument[6];Argument[Qualifier].Property[System.Tuple<,,,,,,>.Item7];value;manual",
- "System;Tuple<,,,,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Property[System.Tuple<,,,,,,>.Item1];ReturnValue;value;manual",
- "System;Tuple<,,,,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Property[System.Tuple<,,,,,,>.Item2];ReturnValue;value;manual",
- "System;Tuple<,,,,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Property[System.Tuple<,,,,,,>.Item3];ReturnValue;value;manual",
- "System;Tuple<,,,,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Property[System.Tuple<,,,,,,>.Item4];ReturnValue;value;manual",
- "System;Tuple<,,,,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Property[System.Tuple<,,,,,,>.Item5];ReturnValue;value;manual",
- "System;Tuple<,,,,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Property[System.Tuple<,,,,,,>.Item6];ReturnValue;value;manual",
- "System;Tuple<,,,,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Property[System.Tuple<,,,,,,>.Item7];ReturnValue;value;manual",
- "System;Tuple<,,,,,>;false;Tuple;(T1,T2,T3,T4,T5,T6);;Argument[0];Argument[Qualifier].Property[System.Tuple<,,,,,>.Item1];value;manual",
- "System;Tuple<,,,,,>;false;Tuple;(T1,T2,T3,T4,T5,T6);;Argument[1];Argument[Qualifier].Property[System.Tuple<,,,,,>.Item2];value;manual",
- "System;Tuple<,,,,,>;false;Tuple;(T1,T2,T3,T4,T5,T6);;Argument[2];Argument[Qualifier].Property[System.Tuple<,,,,,>.Item3];value;manual",
- "System;Tuple<,,,,,>;false;Tuple;(T1,T2,T3,T4,T5,T6);;Argument[3];Argument[Qualifier].Property[System.Tuple<,,,,,>.Item4];value;manual",
- "System;Tuple<,,,,,>;false;Tuple;(T1,T2,T3,T4,T5,T6);;Argument[4];Argument[Qualifier].Property[System.Tuple<,,,,,>.Item5];value;manual",
- "System;Tuple<,,,,,>;false;Tuple;(T1,T2,T3,T4,T5,T6);;Argument[5];Argument[Qualifier].Property[System.Tuple<,,,,,>.Item6];value;manual",
- "System;Tuple<,,,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Property[System.Tuple<,,,,,>.Item1];ReturnValue;value;manual",
- "System;Tuple<,,,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Property[System.Tuple<,,,,,>.Item2];ReturnValue;value;manual",
- "System;Tuple<,,,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Property[System.Tuple<,,,,,>.Item3];ReturnValue;value;manual",
- "System;Tuple<,,,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Property[System.Tuple<,,,,,>.Item4];ReturnValue;value;manual",
- "System;Tuple<,,,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Property[System.Tuple<,,,,,>.Item5];ReturnValue;value;manual",
- "System;Tuple<,,,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Property[System.Tuple<,,,,,>.Item6];ReturnValue;value;manual",
- "System;Tuple<,,,,>;false;Tuple;(T1,T2,T3,T4,T5);;Argument[0];Argument[Qualifier].Property[System.Tuple<,,,,>.Item1];value;manual",
- "System;Tuple<,,,,>;false;Tuple;(T1,T2,T3,T4,T5);;Argument[1];Argument[Qualifier].Property[System.Tuple<,,,,>.Item2];value;manual",
- "System;Tuple<,,,,>;false;Tuple;(T1,T2,T3,T4,T5);;Argument[2];Argument[Qualifier].Property[System.Tuple<,,,,>.Item3];value;manual",
- "System;Tuple<,,,,>;false;Tuple;(T1,T2,T3,T4,T5);;Argument[3];Argument[Qualifier].Property[System.Tuple<,,,,>.Item4];value;manual",
- "System;Tuple<,,,,>;false;Tuple;(T1,T2,T3,T4,T5);;Argument[4];Argument[Qualifier].Property[System.Tuple<,,,,>.Item5];value;manual",
- "System;Tuple<,,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Property[System.Tuple<,,,,>.Item1];ReturnValue;value;manual",
- "System;Tuple<,,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Property[System.Tuple<,,,,>.Item2];ReturnValue;value;manual",
- "System;Tuple<,,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Property[System.Tuple<,,,,>.Item3];ReturnValue;value;manual",
- "System;Tuple<,,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Property[System.Tuple<,,,,>.Item4];ReturnValue;value;manual",
- "System;Tuple<,,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Property[System.Tuple<,,,,>.Item5];ReturnValue;value;manual",
- "System;Tuple<,,,>;false;Tuple;(T1,T2,T3,T4);;Argument[0];Argument[Qualifier].Property[System.Tuple<,,,>.Item1];value;manual",
- "System;Tuple<,,,>;false;Tuple;(T1,T2,T3,T4);;Argument[1];Argument[Qualifier].Property[System.Tuple<,,,>.Item2];value;manual",
- "System;Tuple<,,,>;false;Tuple;(T1,T2,T3,T4);;Argument[2];Argument[Qualifier].Property[System.Tuple<,,,>.Item3];value;manual",
- "System;Tuple<,,,>;false;Tuple;(T1,T2,T3,T4);;Argument[3];Argument[Qualifier].Property[System.Tuple<,,,>.Item4];value;manual",
- "System;Tuple<,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Property[System.Tuple<,,,>.Item1];ReturnValue;value;manual",
- "System;Tuple<,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Property[System.Tuple<,,,>.Item2];ReturnValue;value;manual",
- "System;Tuple<,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Property[System.Tuple<,,,>.Item3];ReturnValue;value;manual",
- "System;Tuple<,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Property[System.Tuple<,,,>.Item4];ReturnValue;value;manual",
- "System;Tuple<,,>;false;Tuple;(T1,T2,T3);;Argument[0];Argument[Qualifier].Property[System.Tuple<,,>.Item1];value;manual",
- "System;Tuple<,,>;false;Tuple;(T1,T2,T3);;Argument[1];Argument[Qualifier].Property[System.Tuple<,,>.Item2];value;manual",
- "System;Tuple<,,>;false;Tuple;(T1,T2,T3);;Argument[2];Argument[Qualifier].Property[System.Tuple<,,>.Item3];value;manual",
- "System;Tuple<,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Property[System.Tuple<,,>.Item1];ReturnValue;value;manual",
- "System;Tuple<,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Property[System.Tuple<,,>.Item2];ReturnValue;value;manual",
- "System;Tuple<,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Property[System.Tuple<,,>.Item3];ReturnValue;value;manual",
- "System;Tuple<,>;false;Tuple;(T1,T2);;Argument[0];Argument[Qualifier].Property[System.Tuple<,>.Item1];value;manual",
- "System;Tuple<,>;false;Tuple;(T1,T2);;Argument[1];Argument[Qualifier].Property[System.Tuple<,>.Item2];value;manual",
- "System;Tuple<,>;false;get_Item;(System.Int32);;Argument[Qualifier].Property[System.Tuple<,>.Item1];ReturnValue;value;manual",
- "System;Tuple<,>;false;get_Item;(System.Int32);;Argument[Qualifier].Property[System.Tuple<,>.Item2];ReturnValue;value;manual",
- "System;Tuple<>;false;Tuple;(T1);;Argument[0];Argument[Qualifier].Property[System.Tuple<>.Item1];value;manual",
- "System;Tuple<>;false;get_Item;(System.Int32);;Argument[Qualifier].Property[System.Tuple<>.Item1];ReturnValue;value;manual",
+ "System;Tuple<,,,,,,,>;false;Tuple;(T1,T2,T3,T4,T5,T6,T7,TRest);;Argument[0];Argument[this].Property[System.Tuple<,,,,,,,>.Item1];value;manual",
+ "System;Tuple<,,,,,,,>;false;Tuple;(T1,T2,T3,T4,T5,T6,T7,TRest);;Argument[1];Argument[this].Property[System.Tuple<,,,,,,,>.Item2];value;manual",
+ "System;Tuple<,,,,,,,>;false;Tuple;(T1,T2,T3,T4,T5,T6,T7,TRest);;Argument[2];Argument[this].Property[System.Tuple<,,,,,,,>.Item3];value;manual",
+ "System;Tuple<,,,,,,,>;false;Tuple;(T1,T2,T3,T4,T5,T6,T7,TRest);;Argument[3];Argument[this].Property[System.Tuple<,,,,,,,>.Item4];value;manual",
+ "System;Tuple<,,,,,,,>;false;Tuple;(T1,T2,T3,T4,T5,T6,T7,TRest);;Argument[4];Argument[this].Property[System.Tuple<,,,,,,,>.Item5];value;manual",
+ "System;Tuple<,,,,,,,>;false;Tuple;(T1,T2,T3,T4,T5,T6,T7,TRest);;Argument[5];Argument[this].Property[System.Tuple<,,,,,,,>.Item6];value;manual",
+ "System;Tuple<,,,,,,,>;false;Tuple;(T1,T2,T3,T4,T5,T6,T7,TRest);;Argument[6];Argument[this].Property[System.Tuple<,,,,,,,>.Item7];value;manual",
+ "System;Tuple<,,,,,,,>;false;get_Item;(System.Int32);;Argument[this].Property[System.Tuple<,,,,,,,>.Item1];ReturnValue;value;manual",
+ "System;Tuple<,,,,,,,>;false;get_Item;(System.Int32);;Argument[this].Property[System.Tuple<,,,,,,,>.Item2];ReturnValue;value;manual",
+ "System;Tuple<,,,,,,,>;false;get_Item;(System.Int32);;Argument[this].Property[System.Tuple<,,,,,,,>.Item3];ReturnValue;value;manual",
+ "System;Tuple<,,,,,,,>;false;get_Item;(System.Int32);;Argument[this].Property[System.Tuple<,,,,,,,>.Item4];ReturnValue;value;manual",
+ "System;Tuple<,,,,,,,>;false;get_Item;(System.Int32);;Argument[this].Property[System.Tuple<,,,,,,,>.Item5];ReturnValue;value;manual",
+ "System;Tuple<,,,,,,,>;false;get_Item;(System.Int32);;Argument[this].Property[System.Tuple<,,,,,,,>.Item6];ReturnValue;value;manual",
+ "System;Tuple<,,,,,,,>;false;get_Item;(System.Int32);;Argument[this].Property[System.Tuple<,,,,,,,>.Item7];ReturnValue;value;manual",
+ "System;Tuple<,,,,,,>;false;Tuple;(T1,T2,T3,T4,T5,T6,T7);;Argument[0];Argument[this].Property[System.Tuple<,,,,,,>.Item1];value;manual",
+ "System;Tuple<,,,,,,>;false;Tuple;(T1,T2,T3,T4,T5,T6,T7);;Argument[1];Argument[this].Property[System.Tuple<,,,,,,>.Item2];value;manual",
+ "System;Tuple<,,,,,,>;false;Tuple;(T1,T2,T3,T4,T5,T6,T7);;Argument[2];Argument[this].Property[System.Tuple<,,,,,,>.Item3];value;manual",
+ "System;Tuple<,,,,,,>;false;Tuple;(T1,T2,T3,T4,T5,T6,T7);;Argument[3];Argument[this].Property[System.Tuple<,,,,,,>.Item4];value;manual",
+ "System;Tuple<,,,,,,>;false;Tuple;(T1,T2,T3,T4,T5,T6,T7);;Argument[4];Argument[this].Property[System.Tuple<,,,,,,>.Item5];value;manual",
+ "System;Tuple<,,,,,,>;false;Tuple;(T1,T2,T3,T4,T5,T6,T7);;Argument[5];Argument[this].Property[System.Tuple<,,,,,,>.Item6];value;manual",
+ "System;Tuple<,,,,,,>;false;Tuple;(T1,T2,T3,T4,T5,T6,T7);;Argument[6];Argument[this].Property[System.Tuple<,,,,,,>.Item7];value;manual",
+ "System;Tuple<,,,,,,>;false;get_Item;(System.Int32);;Argument[this].Property[System.Tuple<,,,,,,>.Item1];ReturnValue;value;manual",
+ "System;Tuple<,,,,,,>;false;get_Item;(System.Int32);;Argument[this].Property[System.Tuple<,,,,,,>.Item2];ReturnValue;value;manual",
+ "System;Tuple<,,,,,,>;false;get_Item;(System.Int32);;Argument[this].Property[System.Tuple<,,,,,,>.Item3];ReturnValue;value;manual",
+ "System;Tuple<,,,,,,>;false;get_Item;(System.Int32);;Argument[this].Property[System.Tuple<,,,,,,>.Item4];ReturnValue;value;manual",
+ "System;Tuple<,,,,,,>;false;get_Item;(System.Int32);;Argument[this].Property[System.Tuple<,,,,,,>.Item5];ReturnValue;value;manual",
+ "System;Tuple<,,,,,,>;false;get_Item;(System.Int32);;Argument[this].Property[System.Tuple<,,,,,,>.Item6];ReturnValue;value;manual",
+ "System;Tuple<,,,,,,>;false;get_Item;(System.Int32);;Argument[this].Property[System.Tuple<,,,,,,>.Item7];ReturnValue;value;manual",
+ "System;Tuple<,,,,,>;false;Tuple;(T1,T2,T3,T4,T5,T6);;Argument[0];Argument[this].Property[System.Tuple<,,,,,>.Item1];value;manual",
+ "System;Tuple<,,,,,>;false;Tuple;(T1,T2,T3,T4,T5,T6);;Argument[1];Argument[this].Property[System.Tuple<,,,,,>.Item2];value;manual",
+ "System;Tuple<,,,,,>;false;Tuple;(T1,T2,T3,T4,T5,T6);;Argument[2];Argument[this].Property[System.Tuple<,,,,,>.Item3];value;manual",
+ "System;Tuple<,,,,,>;false;Tuple;(T1,T2,T3,T4,T5,T6);;Argument[3];Argument[this].Property[System.Tuple<,,,,,>.Item4];value;manual",
+ "System;Tuple<,,,,,>;false;Tuple;(T1,T2,T3,T4,T5,T6);;Argument[4];Argument[this].Property[System.Tuple<,,,,,>.Item5];value;manual",
+ "System;Tuple<,,,,,>;false;Tuple;(T1,T2,T3,T4,T5,T6);;Argument[5];Argument[this].Property[System.Tuple<,,,,,>.Item6];value;manual",
+ "System;Tuple<,,,,,>;false;get_Item;(System.Int32);;Argument[this].Property[System.Tuple<,,,,,>.Item1];ReturnValue;value;manual",
+ "System;Tuple<,,,,,>;false;get_Item;(System.Int32);;Argument[this].Property[System.Tuple<,,,,,>.Item2];ReturnValue;value;manual",
+ "System;Tuple<,,,,,>;false;get_Item;(System.Int32);;Argument[this].Property[System.Tuple<,,,,,>.Item3];ReturnValue;value;manual",
+ "System;Tuple<,,,,,>;false;get_Item;(System.Int32);;Argument[this].Property[System.Tuple<,,,,,>.Item4];ReturnValue;value;manual",
+ "System;Tuple<,,,,,>;false;get_Item;(System.Int32);;Argument[this].Property[System.Tuple<,,,,,>.Item5];ReturnValue;value;manual",
+ "System;Tuple<,,,,,>;false;get_Item;(System.Int32);;Argument[this].Property[System.Tuple<,,,,,>.Item6];ReturnValue;value;manual",
+ "System;Tuple<,,,,>;false;Tuple;(T1,T2,T3,T4,T5);;Argument[0];Argument[this].Property[System.Tuple<,,,,>.Item1];value;manual",
+ "System;Tuple<,,,,>;false;Tuple;(T1,T2,T3,T4,T5);;Argument[1];Argument[this].Property[System.Tuple<,,,,>.Item2];value;manual",
+ "System;Tuple<,,,,>;false;Tuple;(T1,T2,T3,T4,T5);;Argument[2];Argument[this].Property[System.Tuple<,,,,>.Item3];value;manual",
+ "System;Tuple<,,,,>;false;Tuple;(T1,T2,T3,T4,T5);;Argument[3];Argument[this].Property[System.Tuple<,,,,>.Item4];value;manual",
+ "System;Tuple<,,,,>;false;Tuple;(T1,T2,T3,T4,T5);;Argument[4];Argument[this].Property[System.Tuple<,,,,>.Item5];value;manual",
+ "System;Tuple<,,,,>;false;get_Item;(System.Int32);;Argument[this].Property[System.Tuple<,,,,>.Item1];ReturnValue;value;manual",
+ "System;Tuple<,,,,>;false;get_Item;(System.Int32);;Argument[this].Property[System.Tuple<,,,,>.Item2];ReturnValue;value;manual",
+ "System;Tuple<,,,,>;false;get_Item;(System.Int32);;Argument[this].Property[System.Tuple<,,,,>.Item3];ReturnValue;value;manual",
+ "System;Tuple<,,,,>;false;get_Item;(System.Int32);;Argument[this].Property[System.Tuple<,,,,>.Item4];ReturnValue;value;manual",
+ "System;Tuple<,,,,>;false;get_Item;(System.Int32);;Argument[this].Property[System.Tuple<,,,,>.Item5];ReturnValue;value;manual",
+ "System;Tuple<,,,>;false;Tuple;(T1,T2,T3,T4);;Argument[0];Argument[this].Property[System.Tuple<,,,>.Item1];value;manual",
+ "System;Tuple<,,,>;false;Tuple;(T1,T2,T3,T4);;Argument[1];Argument[this].Property[System.Tuple<,,,>.Item2];value;manual",
+ "System;Tuple<,,,>;false;Tuple;(T1,T2,T3,T4);;Argument[2];Argument[this].Property[System.Tuple<,,,>.Item3];value;manual",
+ "System;Tuple<,,,>;false;Tuple;(T1,T2,T3,T4);;Argument[3];Argument[this].Property[System.Tuple<,,,>.Item4];value;manual",
+ "System;Tuple<,,,>;false;get_Item;(System.Int32);;Argument[this].Property[System.Tuple<,,,>.Item1];ReturnValue;value;manual",
+ "System;Tuple<,,,>;false;get_Item;(System.Int32);;Argument[this].Property[System.Tuple<,,,>.Item2];ReturnValue;value;manual",
+ "System;Tuple<,,,>;false;get_Item;(System.Int32);;Argument[this].Property[System.Tuple<,,,>.Item3];ReturnValue;value;manual",
+ "System;Tuple<,,,>;false;get_Item;(System.Int32);;Argument[this].Property[System.Tuple<,,,>.Item4];ReturnValue;value;manual",
+ "System;Tuple<,,>;false;Tuple;(T1,T2,T3);;Argument[0];Argument[this].Property[System.Tuple<,,>.Item1];value;manual",
+ "System;Tuple<,,>;false;Tuple;(T1,T2,T3);;Argument[1];Argument[this].Property[System.Tuple<,,>.Item2];value;manual",
+ "System;Tuple<,,>;false;Tuple;(T1,T2,T3);;Argument[2];Argument[this].Property[System.Tuple<,,>.Item3];value;manual",
+ "System;Tuple<,,>;false;get_Item;(System.Int32);;Argument[this].Property[System.Tuple<,,>.Item1];ReturnValue;value;manual",
+ "System;Tuple<,,>;false;get_Item;(System.Int32);;Argument[this].Property[System.Tuple<,,>.Item2];ReturnValue;value;manual",
+ "System;Tuple<,,>;false;get_Item;(System.Int32);;Argument[this].Property[System.Tuple<,,>.Item3];ReturnValue;value;manual",
+ "System;Tuple<,>;false;Tuple;(T1,T2);;Argument[0];Argument[this].Property[System.Tuple<,>.Item1];value;manual",
+ "System;Tuple<,>;false;Tuple;(T1,T2);;Argument[1];Argument[this].Property[System.Tuple<,>.Item2];value;manual",
+ "System;Tuple<,>;false;get_Item;(System.Int32);;Argument[this].Property[System.Tuple<,>.Item1];ReturnValue;value;manual",
+ "System;Tuple<,>;false;get_Item;(System.Int32);;Argument[this].Property[System.Tuple<,>.Item2];ReturnValue;value;manual",
+ "System;Tuple<>;false;Tuple;(T1);;Argument[0];Argument[this].Property[System.Tuple<>.Item1];value;manual",
+ "System;Tuple<>;false;get_Item;(System.Int32);;Argument[this].Property[System.Tuple<>.Item1];ReturnValue;value;manual",
]
}
}
@@ -1622,76 +1622,76 @@ private class SystemValueTupleTFlowModelCsv extends SummaryModelCsv {
override predicate row(string row) {
row =
[
- "System;ValueTuple<,,,,,,,>;false;ValueTuple;(T1,T2,T3,T4,T5,T6,T7,TRest);;Argument[0];Argument[Qualifier].Field[System.ValueTuple<,,,,,,,>.Item1];value;manual",
- "System;ValueTuple<,,,,,,,>;false;ValueTuple;(T1,T2,T3,T4,T5,T6,T7,TRest);;Argument[1];Argument[Qualifier].Field[System.ValueTuple<,,,,,,,>.Item2];value;manual",
- "System;ValueTuple<,,,,,,,>;false;ValueTuple;(T1,T2,T3,T4,T5,T6,T7,TRest);;Argument[2];Argument[Qualifier].Field[System.ValueTuple<,,,,,,,>.Item3];value;manual",
- "System;ValueTuple<,,,,,,,>;false;ValueTuple;(T1,T2,T3,T4,T5,T6,T7,TRest);;Argument[3];Argument[Qualifier].Field[System.ValueTuple<,,,,,,,>.Item4];value;manual",
- "System;ValueTuple<,,,,,,,>;false;ValueTuple;(T1,T2,T3,T4,T5,T6,T7,TRest);;Argument[4];Argument[Qualifier].Field[System.ValueTuple<,,,,,,,>.Item5];value;manual",
- "System;ValueTuple<,,,,,,,>;false;ValueTuple;(T1,T2,T3,T4,T5,T6,T7,TRest);;Argument[5];Argument[Qualifier].Field[System.ValueTuple<,,,,,,,>.Item6];value;manual",
- "System;ValueTuple<,,,,,,,>;false;ValueTuple;(T1,T2,T3,T4,T5,T6,T7,TRest);;Argument[6];Argument[Qualifier].Field[System.ValueTuple<,,,,,,,>.Item7];value;manual",
- "System;ValueTuple<,,,,,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Field[System.ValueTuple<,,,,,,,>.Item1];ReturnValue;value;manual",
- "System;ValueTuple<,,,,,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Field[System.ValueTuple<,,,,,,,>.Item2];ReturnValue;value;manual",
- "System;ValueTuple<,,,,,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Field[System.ValueTuple<,,,,,,,>.Item3];ReturnValue;value;manual",
- "System;ValueTuple<,,,,,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Field[System.ValueTuple<,,,,,,,>.Item4];ReturnValue;value;manual",
- "System;ValueTuple<,,,,,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Field[System.ValueTuple<,,,,,,,>.Item5];ReturnValue;value;manual",
- "System;ValueTuple<,,,,,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Field[System.ValueTuple<,,,,,,,>.Item6];ReturnValue;value;manual",
- "System;ValueTuple<,,,,,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Field[System.ValueTuple<,,,,,,,>.Item7];ReturnValue;value;manual",
- "System;ValueTuple<,,,,,,>;false;ValueTuple;(T1,T2,T3,T4,T5,T6,T7);;Argument[0];Argument[Qualifier].Field[System.ValueTuple<,,,,,,>.Item1];value;manual",
- "System;ValueTuple<,,,,,,>;false;ValueTuple;(T1,T2,T3,T4,T5,T6,T7);;Argument[1];Argument[Qualifier].Field[System.ValueTuple<,,,,,,>.Item2];value;manual",
- "System;ValueTuple<,,,,,,>;false;ValueTuple;(T1,T2,T3,T4,T5,T6,T7);;Argument[2];Argument[Qualifier].Field[System.ValueTuple<,,,,,,>.Item3];value;manual",
- "System;ValueTuple<,,,,,,>;false;ValueTuple;(T1,T2,T3,T4,T5,T6,T7);;Argument[3];Argument[Qualifier].Field[System.ValueTuple<,,,,,,>.Item4];value;manual",
- "System;ValueTuple<,,,,,,>;false;ValueTuple;(T1,T2,T3,T4,T5,T6,T7);;Argument[4];Argument[Qualifier].Field[System.ValueTuple<,,,,,,>.Item5];value;manual",
- "System;ValueTuple<,,,,,,>;false;ValueTuple;(T1,T2,T3,T4,T5,T6,T7);;Argument[5];Argument[Qualifier].Field[System.ValueTuple<,,,,,,>.Item6];value;manual",
- "System;ValueTuple<,,,,,,>;false;ValueTuple;(T1,T2,T3,T4,T5,T6,T7);;Argument[6];Argument[Qualifier].Field[System.ValueTuple<,,,,,,>.Item7];value;manual",
- "System;ValueTuple<,,,,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Field[System.ValueTuple<,,,,,,>.Item1];ReturnValue;value;manual",
- "System;ValueTuple<,,,,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Field[System.ValueTuple<,,,,,,>.Item2];ReturnValue;value;manual",
- "System;ValueTuple<,,,,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Field[System.ValueTuple<,,,,,,>.Item3];ReturnValue;value;manual",
- "System;ValueTuple<,,,,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Field[System.ValueTuple<,,,,,,>.Item4];ReturnValue;value;manual",
- "System;ValueTuple<,,,,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Field[System.ValueTuple<,,,,,,>.Item5];ReturnValue;value;manual",
- "System;ValueTuple<,,,,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Field[System.ValueTuple<,,,,,,>.Item6];ReturnValue;value;manual",
- "System;ValueTuple<,,,,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Field[System.ValueTuple<,,,,,,>.Item7];ReturnValue;value;manual",
- "System;ValueTuple<,,,,,>;false;ValueTuple;(T1,T2,T3,T4,T5,T6);;Argument[0];Argument[Qualifier].Field[System.ValueTuple<,,,,,>.Item1];value;manual",
- "System;ValueTuple<,,,,,>;false;ValueTuple;(T1,T2,T3,T4,T5,T6);;Argument[1];Argument[Qualifier].Field[System.ValueTuple<,,,,,>.Item2];value;manual",
- "System;ValueTuple<,,,,,>;false;ValueTuple;(T1,T2,T3,T4,T5,T6);;Argument[2];Argument[Qualifier].Field[System.ValueTuple<,,,,,>.Item3];value;manual",
- "System;ValueTuple<,,,,,>;false;ValueTuple;(T1,T2,T3,T4,T5,T6);;Argument[3];Argument[Qualifier].Field[System.ValueTuple<,,,,,>.Item4];value;manual",
- "System;ValueTuple<,,,,,>;false;ValueTuple;(T1,T2,T3,T4,T5,T6);;Argument[4];Argument[Qualifier].Field[System.ValueTuple<,,,,,>.Item5];value;manual",
- "System;ValueTuple<,,,,,>;false;ValueTuple;(T1,T2,T3,T4,T5,T6);;Argument[5];Argument[Qualifier].Field[System.ValueTuple<,,,,,>.Item6];value;manual",
- "System;ValueTuple<,,,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Field[System.ValueTuple<,,,,,>.Item1];ReturnValue;value;manual",
- "System;ValueTuple<,,,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Field[System.ValueTuple<,,,,,>.Item2];ReturnValue;value;manual",
- "System;ValueTuple<,,,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Field[System.ValueTuple<,,,,,>.Item3];ReturnValue;value;manual",
- "System;ValueTuple<,,,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Field[System.ValueTuple<,,,,,>.Item4];ReturnValue;value;manual",
- "System;ValueTuple<,,,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Field[System.ValueTuple<,,,,,>.Item5];ReturnValue;value;manual",
- "System;ValueTuple<,,,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Field[System.ValueTuple<,,,,,>.Item6];ReturnValue;value;manual",
- "System;ValueTuple<,,,,>;false;ValueTuple;(T1,T2,T3,T4,T5);;Argument[0];Argument[Qualifier].Field[System.ValueTuple<,,,,>.Item1];value;manual",
- "System;ValueTuple<,,,,>;false;ValueTuple;(T1,T2,T3,T4,T5);;Argument[1];Argument[Qualifier].Field[System.ValueTuple<,,,,>.Item2];value;manual",
- "System;ValueTuple<,,,,>;false;ValueTuple;(T1,T2,T3,T4,T5);;Argument[2];Argument[Qualifier].Field[System.ValueTuple<,,,,>.Item3];value;manual",
- "System;ValueTuple<,,,,>;false;ValueTuple;(T1,T2,T3,T4,T5);;Argument[3];Argument[Qualifier].Field[System.ValueTuple<,,,,>.Item4];value;manual",
- "System;ValueTuple<,,,,>;false;ValueTuple;(T1,T2,T3,T4,T5);;Argument[4];Argument[Qualifier].Field[System.ValueTuple<,,,,>.Item5];value;manual",
- "System;ValueTuple<,,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Field[System.ValueTuple<,,,,>.Item1];ReturnValue;value;manual",
- "System;ValueTuple<,,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Field[System.ValueTuple<,,,,>.Item2];ReturnValue;value;manual",
- "System;ValueTuple<,,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Field[System.ValueTuple<,,,,>.Item3];ReturnValue;value;manual",
- "System;ValueTuple<,,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Field[System.ValueTuple<,,,,>.Item4];ReturnValue;value;manual",
- "System;ValueTuple<,,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Field[System.ValueTuple<,,,,>.Item5];ReturnValue;value;manual",
- "System;ValueTuple<,,,>;false;ValueTuple;(T1,T2,T3,T4);;Argument[0];Argument[Qualifier].Field[System.ValueTuple<,,,>.Item1];value;manual",
- "System;ValueTuple<,,,>;false;ValueTuple;(T1,T2,T3,T4);;Argument[1];Argument[Qualifier].Field[System.ValueTuple<,,,>.Item2];value;manual",
- "System;ValueTuple<,,,>;false;ValueTuple;(T1,T2,T3,T4);;Argument[2];Argument[Qualifier].Field[System.ValueTuple<,,,>.Item3];value;manual",
- "System;ValueTuple<,,,>;false;ValueTuple;(T1,T2,T3,T4);;Argument[3];Argument[Qualifier].Field[System.ValueTuple<,,,>.Item4];value;manual",
- "System;ValueTuple<,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Field[System.ValueTuple<,,,>.Item1];ReturnValue;value;manual",
- "System;ValueTuple<,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Field[System.ValueTuple<,,,>.Item2];ReturnValue;value;manual",
- "System;ValueTuple<,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Field[System.ValueTuple<,,,>.Item3];ReturnValue;value;manual",
- "System;ValueTuple<,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Field[System.ValueTuple<,,,>.Item4];ReturnValue;value;manual",
- "System;ValueTuple<,,>;false;ValueTuple;(T1,T2,T3);;Argument[0];Argument[Qualifier].Field[System.ValueTuple<,,>.Item1];value;manual",
- "System;ValueTuple<,,>;false;ValueTuple;(T1,T2,T3);;Argument[1];Argument[Qualifier].Field[System.ValueTuple<,,>.Item2];value;manual",
- "System;ValueTuple<,,>;false;ValueTuple;(T1,T2,T3);;Argument[2];Argument[Qualifier].Field[System.ValueTuple<,,>.Item3];value;manual",
- "System;ValueTuple<,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Field[System.ValueTuple<,,>.Item1];ReturnValue;value;manual",
- "System;ValueTuple<,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Field[System.ValueTuple<,,>.Item2];ReturnValue;value;manual",
- "System;ValueTuple<,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Field[System.ValueTuple<,,>.Item3];ReturnValue;value;manual",
- "System;ValueTuple<,>;false;ValueTuple;(T1,T2);;Argument[0];Argument[Qualifier].Field[System.ValueTuple<,>.Item1];value;manual",
- "System;ValueTuple<,>;false;ValueTuple;(T1,T2);;Argument[1];Argument[Qualifier].Field[System.ValueTuple<,>.Item2];value;manual",
- "System;ValueTuple<,>;false;get_Item;(System.Int32);;Argument[Qualifier].Field[System.ValueTuple<,>.Item1];ReturnValue;value;manual",
- "System;ValueTuple<,>;false;get_Item;(System.Int32);;Argument[Qualifier].Field[System.ValueTuple<,>.Item2];ReturnValue;value;manual",
- "System;ValueTuple<>;false;ValueTuple;(T1);;Argument[0];Argument[Qualifier].Field[System.ValueTuple<>.Item1];value;manual",
- "System;ValueTuple<>;false;get_Item;(System.Int32);;Argument[Qualifier].Field[System.ValueTuple<>.Item1];ReturnValue;value;manual",
+ "System;ValueTuple<,,,,,,,>;false;ValueTuple;(T1,T2,T3,T4,T5,T6,T7,TRest);;Argument[0];Argument[this].Field[System.ValueTuple<,,,,,,,>.Item1];value;manual",
+ "System;ValueTuple<,,,,,,,>;false;ValueTuple;(T1,T2,T3,T4,T5,T6,T7,TRest);;Argument[1];Argument[this].Field[System.ValueTuple<,,,,,,,>.Item2];value;manual",
+ "System;ValueTuple<,,,,,,,>;false;ValueTuple;(T1,T2,T3,T4,T5,T6,T7,TRest);;Argument[2];Argument[this].Field[System.ValueTuple<,,,,,,,>.Item3];value;manual",
+ "System;ValueTuple<,,,,,,,>;false;ValueTuple;(T1,T2,T3,T4,T5,T6,T7,TRest);;Argument[3];Argument[this].Field[System.ValueTuple<,,,,,,,>.Item4];value;manual",
+ "System;ValueTuple<,,,,,,,>;false;ValueTuple;(T1,T2,T3,T4,T5,T6,T7,TRest);;Argument[4];Argument[this].Field[System.ValueTuple<,,,,,,,>.Item5];value;manual",
+ "System;ValueTuple<,,,,,,,>;false;ValueTuple;(T1,T2,T3,T4,T5,T6,T7,TRest);;Argument[5];Argument[this].Field[System.ValueTuple<,,,,,,,>.Item6];value;manual",
+ "System;ValueTuple<,,,,,,,>;false;ValueTuple;(T1,T2,T3,T4,T5,T6,T7,TRest);;Argument[6];Argument[this].Field[System.ValueTuple<,,,,,,,>.Item7];value;manual",
+ "System;ValueTuple<,,,,,,,>;false;get_Item;(System.Int32);;Argument[this].Field[System.ValueTuple<,,,,,,,>.Item1];ReturnValue;value;manual",
+ "System;ValueTuple<,,,,,,,>;false;get_Item;(System.Int32);;Argument[this].Field[System.ValueTuple<,,,,,,,>.Item2];ReturnValue;value;manual",
+ "System;ValueTuple<,,,,,,,>;false;get_Item;(System.Int32);;Argument[this].Field[System.ValueTuple<,,,,,,,>.Item3];ReturnValue;value;manual",
+ "System;ValueTuple<,,,,,,,>;false;get_Item;(System.Int32);;Argument[this].Field[System.ValueTuple<,,,,,,,>.Item4];ReturnValue;value;manual",
+ "System;ValueTuple<,,,,,,,>;false;get_Item;(System.Int32);;Argument[this].Field[System.ValueTuple<,,,,,,,>.Item5];ReturnValue;value;manual",
+ "System;ValueTuple<,,,,,,,>;false;get_Item;(System.Int32);;Argument[this].Field[System.ValueTuple<,,,,,,,>.Item6];ReturnValue;value;manual",
+ "System;ValueTuple<,,,,,,,>;false;get_Item;(System.Int32);;Argument[this].Field[System.ValueTuple<,,,,,,,>.Item7];ReturnValue;value;manual",
+ "System;ValueTuple<,,,,,,>;false;ValueTuple;(T1,T2,T3,T4,T5,T6,T7);;Argument[0];Argument[this].Field[System.ValueTuple<,,,,,,>.Item1];value;manual",
+ "System;ValueTuple<,,,,,,>;false;ValueTuple;(T1,T2,T3,T4,T5,T6,T7);;Argument[1];Argument[this].Field[System.ValueTuple<,,,,,,>.Item2];value;manual",
+ "System;ValueTuple<,,,,,,>;false;ValueTuple;(T1,T2,T3,T4,T5,T6,T7);;Argument[2];Argument[this].Field[System.ValueTuple<,,,,,,>.Item3];value;manual",
+ "System;ValueTuple<,,,,,,>;false;ValueTuple;(T1,T2,T3,T4,T5,T6,T7);;Argument[3];Argument[this].Field[System.ValueTuple<,,,,,,>.Item4];value;manual",
+ "System;ValueTuple<,,,,,,>;false;ValueTuple;(T1,T2,T3,T4,T5,T6,T7);;Argument[4];Argument[this].Field[System.ValueTuple<,,,,,,>.Item5];value;manual",
+ "System;ValueTuple<,,,,,,>;false;ValueTuple;(T1,T2,T3,T4,T5,T6,T7);;Argument[5];Argument[this].Field[System.ValueTuple<,,,,,,>.Item6];value;manual",
+ "System;ValueTuple<,,,,,,>;false;ValueTuple;(T1,T2,T3,T4,T5,T6,T7);;Argument[6];Argument[this].Field[System.ValueTuple<,,,,,,>.Item7];value;manual",
+ "System;ValueTuple<,,,,,,>;false;get_Item;(System.Int32);;Argument[this].Field[System.ValueTuple<,,,,,,>.Item1];ReturnValue;value;manual",
+ "System;ValueTuple<,,,,,,>;false;get_Item;(System.Int32);;Argument[this].Field[System.ValueTuple<,,,,,,>.Item2];ReturnValue;value;manual",
+ "System;ValueTuple<,,,,,,>;false;get_Item;(System.Int32);;Argument[this].Field[System.ValueTuple<,,,,,,>.Item3];ReturnValue;value;manual",
+ "System;ValueTuple<,,,,,,>;false;get_Item;(System.Int32);;Argument[this].Field[System.ValueTuple<,,,,,,>.Item4];ReturnValue;value;manual",
+ "System;ValueTuple<,,,,,,>;false;get_Item;(System.Int32);;Argument[this].Field[System.ValueTuple<,,,,,,>.Item5];ReturnValue;value;manual",
+ "System;ValueTuple<,,,,,,>;false;get_Item;(System.Int32);;Argument[this].Field[System.ValueTuple<,,,,,,>.Item6];ReturnValue;value;manual",
+ "System;ValueTuple<,,,,,,>;false;get_Item;(System.Int32);;Argument[this].Field[System.ValueTuple<,,,,,,>.Item7];ReturnValue;value;manual",
+ "System;ValueTuple<,,,,,>;false;ValueTuple;(T1,T2,T3,T4,T5,T6);;Argument[0];Argument[this].Field[System.ValueTuple<,,,,,>.Item1];value;manual",
+ "System;ValueTuple<,,,,,>;false;ValueTuple;(T1,T2,T3,T4,T5,T6);;Argument[1];Argument[this].Field[System.ValueTuple<,,,,,>.Item2];value;manual",
+ "System;ValueTuple<,,,,,>;false;ValueTuple;(T1,T2,T3,T4,T5,T6);;Argument[2];Argument[this].Field[System.ValueTuple<,,,,,>.Item3];value;manual",
+ "System;ValueTuple<,,,,,>;false;ValueTuple;(T1,T2,T3,T4,T5,T6);;Argument[3];Argument[this].Field[System.ValueTuple<,,,,,>.Item4];value;manual",
+ "System;ValueTuple<,,,,,>;false;ValueTuple;(T1,T2,T3,T4,T5,T6);;Argument[4];Argument[this].Field[System.ValueTuple<,,,,,>.Item5];value;manual",
+ "System;ValueTuple<,,,,,>;false;ValueTuple;(T1,T2,T3,T4,T5,T6);;Argument[5];Argument[this].Field[System.ValueTuple<,,,,,>.Item6];value;manual",
+ "System;ValueTuple<,,,,,>;false;get_Item;(System.Int32);;Argument[this].Field[System.ValueTuple<,,,,,>.Item1];ReturnValue;value;manual",
+ "System;ValueTuple<,,,,,>;false;get_Item;(System.Int32);;Argument[this].Field[System.ValueTuple<,,,,,>.Item2];ReturnValue;value;manual",
+ "System;ValueTuple<,,,,,>;false;get_Item;(System.Int32);;Argument[this].Field[System.ValueTuple<,,,,,>.Item3];ReturnValue;value;manual",
+ "System;ValueTuple<,,,,,>;false;get_Item;(System.Int32);;Argument[this].Field[System.ValueTuple<,,,,,>.Item4];ReturnValue;value;manual",
+ "System;ValueTuple<,,,,,>;false;get_Item;(System.Int32);;Argument[this].Field[System.ValueTuple<,,,,,>.Item5];ReturnValue;value;manual",
+ "System;ValueTuple<,,,,,>;false;get_Item;(System.Int32);;Argument[this].Field[System.ValueTuple<,,,,,>.Item6];ReturnValue;value;manual",
+ "System;ValueTuple<,,,,>;false;ValueTuple;(T1,T2,T3,T4,T5);;Argument[0];Argument[this].Field[System.ValueTuple<,,,,>.Item1];value;manual",
+ "System;ValueTuple<,,,,>;false;ValueTuple;(T1,T2,T3,T4,T5);;Argument[1];Argument[this].Field[System.ValueTuple<,,,,>.Item2];value;manual",
+ "System;ValueTuple<,,,,>;false;ValueTuple;(T1,T2,T3,T4,T5);;Argument[2];Argument[this].Field[System.ValueTuple<,,,,>.Item3];value;manual",
+ "System;ValueTuple<,,,,>;false;ValueTuple;(T1,T2,T3,T4,T5);;Argument[3];Argument[this].Field[System.ValueTuple<,,,,>.Item4];value;manual",
+ "System;ValueTuple<,,,,>;false;ValueTuple;(T1,T2,T3,T4,T5);;Argument[4];Argument[this].Field[System.ValueTuple<,,,,>.Item5];value;manual",
+ "System;ValueTuple<,,,,>;false;get_Item;(System.Int32);;Argument[this].Field[System.ValueTuple<,,,,>.Item1];ReturnValue;value;manual",
+ "System;ValueTuple<,,,,>;false;get_Item;(System.Int32);;Argument[this].Field[System.ValueTuple<,,,,>.Item2];ReturnValue;value;manual",
+ "System;ValueTuple<,,,,>;false;get_Item;(System.Int32);;Argument[this].Field[System.ValueTuple<,,,,>.Item3];ReturnValue;value;manual",
+ "System;ValueTuple<,,,,>;false;get_Item;(System.Int32);;Argument[this].Field[System.ValueTuple<,,,,>.Item4];ReturnValue;value;manual",
+ "System;ValueTuple<,,,,>;false;get_Item;(System.Int32);;Argument[this].Field[System.ValueTuple<,,,,>.Item5];ReturnValue;value;manual",
+ "System;ValueTuple<,,,>;false;ValueTuple;(T1,T2,T3,T4);;Argument[0];Argument[this].Field[System.ValueTuple<,,,>.Item1];value;manual",
+ "System;ValueTuple<,,,>;false;ValueTuple;(T1,T2,T3,T4);;Argument[1];Argument[this].Field[System.ValueTuple<,,,>.Item2];value;manual",
+ "System;ValueTuple<,,,>;false;ValueTuple;(T1,T2,T3,T4);;Argument[2];Argument[this].Field[System.ValueTuple<,,,>.Item3];value;manual",
+ "System;ValueTuple<,,,>;false;ValueTuple;(T1,T2,T3,T4);;Argument[3];Argument[this].Field[System.ValueTuple<,,,>.Item4];value;manual",
+ "System;ValueTuple<,,,>;false;get_Item;(System.Int32);;Argument[this].Field[System.ValueTuple<,,,>.Item1];ReturnValue;value;manual",
+ "System;ValueTuple<,,,>;false;get_Item;(System.Int32);;Argument[this].Field[System.ValueTuple<,,,>.Item2];ReturnValue;value;manual",
+ "System;ValueTuple<,,,>;false;get_Item;(System.Int32);;Argument[this].Field[System.ValueTuple<,,,>.Item3];ReturnValue;value;manual",
+ "System;ValueTuple<,,,>;false;get_Item;(System.Int32);;Argument[this].Field[System.ValueTuple<,,,>.Item4];ReturnValue;value;manual",
+ "System;ValueTuple<,,>;false;ValueTuple;(T1,T2,T3);;Argument[0];Argument[this].Field[System.ValueTuple<,,>.Item1];value;manual",
+ "System;ValueTuple<,,>;false;ValueTuple;(T1,T2,T3);;Argument[1];Argument[this].Field[System.ValueTuple<,,>.Item2];value;manual",
+ "System;ValueTuple<,,>;false;ValueTuple;(T1,T2,T3);;Argument[2];Argument[this].Field[System.ValueTuple<,,>.Item3];value;manual",
+ "System;ValueTuple<,,>;false;get_Item;(System.Int32);;Argument[this].Field[System.ValueTuple<,,>.Item1];ReturnValue;value;manual",
+ "System;ValueTuple<,,>;false;get_Item;(System.Int32);;Argument[this].Field[System.ValueTuple<,,>.Item2];ReturnValue;value;manual",
+ "System;ValueTuple<,,>;false;get_Item;(System.Int32);;Argument[this].Field[System.ValueTuple<,,>.Item3];ReturnValue;value;manual",
+ "System;ValueTuple<,>;false;ValueTuple;(T1,T2);;Argument[0];Argument[this].Field[System.ValueTuple<,>.Item1];value;manual",
+ "System;ValueTuple<,>;false;ValueTuple;(T1,T2);;Argument[1];Argument[this].Field[System.ValueTuple<,>.Item2];value;manual",
+ "System;ValueTuple<,>;false;get_Item;(System.Int32);;Argument[this].Field[System.ValueTuple<,>.Item1];ReturnValue;value;manual",
+ "System;ValueTuple<,>;false;get_Item;(System.Int32);;Argument[this].Field[System.ValueTuple<,>.Item2];ReturnValue;value;manual",
+ "System;ValueTuple<>;false;ValueTuple;(T1);;Argument[0];Argument[this].Field[System.ValueTuple<>.Item1];value;manual",
+ "System;ValueTuple<>;false;get_Item;(System.Int32);;Argument[this].Field[System.ValueTuple<>.Item1];ReturnValue;value;manual",
]
}
}
diff --git a/csharp/ql/lib/semmle/code/csharp/frameworks/generated/dotnet/NegativeRuntime.qll b/csharp/ql/lib/semmle/code/csharp/frameworks/generated/dotnet/NegativeRuntime.qll
new file mode 100644
index 00000000000..8abcb5071c7
--- /dev/null
+++ b/csharp/ql/lib/semmle/code/csharp/frameworks/generated/dotnet/NegativeRuntime.qll
@@ -0,0 +1,41724 @@
+/**
+ * THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT.
+ * Definitions of negative summaries in the Runtime framework.
+ */
+
+import csharp
+private import semmle.code.csharp.dataflow.ExternalFlow
+
+private class RuntimeNegativesummaryCsv extends NegativeSummaryModelCsv {
+ override predicate row(string row) {
+ row =
+ [
+ "AssemblyStripper;AssemblyStripper;StripAssembly;(System.String,System.String);generated",
+ "Generators;EventSourceGenerator;Execute;(Microsoft.CodeAnalysis.GeneratorExecutionContext);generated",
+ "Generators;EventSourceGenerator;Initialize;(Microsoft.CodeAnalysis.GeneratorInitializationContext);generated",
+ "Internal.Runtime.CompilerServices;Unsafe;Add<>;(System.Void*,System.Int32);generated",
+ "Internal.Runtime.CompilerServices;Unsafe;Add<>;(T,System.Int32);generated",
+ "Internal.Runtime.CompilerServices;Unsafe;Add<>;(T,System.IntPtr);generated",
+ "Internal.Runtime.CompilerServices;Unsafe;AddByteOffset<>;(T,System.IntPtr);generated",
+ "Internal.Runtime.CompilerServices;Unsafe;AreSame<>;(T,T);generated",
+ "Internal.Runtime.CompilerServices;Unsafe;As<,>;(TFrom);generated",
+ "Internal.Runtime.CompilerServices;Unsafe;As<>;(System.Object);generated",
+ "Internal.Runtime.CompilerServices;Unsafe;AsPointer<>;(T);generated",
+ "Internal.Runtime.CompilerServices;Unsafe;AsRef<>;(System.Void*);generated",
+ "Internal.Runtime.CompilerServices;Unsafe;AsRef<>;(T);generated",
+ "Internal.Runtime.CompilerServices;Unsafe;ByteOffset<>;(T,T);generated",
+ "Internal.Runtime.CompilerServices;Unsafe;InitBlockUnaligned;(System.Byte,System.Byte,System.UInt32);generated",
+ "Internal.Runtime.CompilerServices;Unsafe;IsAddressGreaterThan<>;(T,T);generated",
+ "Internal.Runtime.CompilerServices;Unsafe;IsAddressLessThan<>;(T,T);generated",
+ "Internal.Runtime.CompilerServices;Unsafe;IsNullRef<>;(T);generated",
+ "Internal.Runtime.CompilerServices;Unsafe;NullRef<>;();generated",
+ "Internal.Runtime.CompilerServices;Unsafe;Read<>;(System.Byte);generated",
+ "Internal.Runtime.CompilerServices;Unsafe;Read<>;(System.Void*);generated",
+ "Internal.Runtime.CompilerServices;Unsafe;ReadUnaligned<>;(System.Byte);generated",
+ "Internal.Runtime.CompilerServices;Unsafe;ReadUnaligned<>;(System.Void*);generated",
+ "Internal.Runtime.CompilerServices;Unsafe;SizeOf<>;();generated",
+ "Internal.Runtime.CompilerServices;Unsafe;SkipInit<>;(T);generated",
+ "Internal.Runtime.CompilerServices;Unsafe;Write<>;(System.Byte,T);generated",
+ "Internal.Runtime.CompilerServices;Unsafe;Write<>;(System.Void*,T);generated",
+ "Internal.Runtime.CompilerServices;Unsafe;WriteUnaligned<>;(System.Byte,T);generated",
+ "Internal.Runtime.CompilerServices;Unsafe;WriteUnaligned<>;(System.Void*,T);generated",
+ "Internal.Runtime.InteropServices;ComponentActivator;GetFunctionPointer;(System.IntPtr,System.IntPtr,System.IntPtr,System.IntPtr,System.IntPtr,System.IntPtr);generated",
+ "Internal.Runtime.InteropServices;ComponentActivator;LoadAssemblyAndGetFunctionPointer;(System.IntPtr,System.IntPtr,System.IntPtr,System.IntPtr,System.IntPtr,System.IntPtr);generated",
+ "Internal;Console+Error;Write;(System.String);generated",
+ "Internal;Console;Write;(System.String);generated",
+ "Internal;Console;WriteLine;();generated",
+ "Internal;Console;WriteLine;(System.String);generated",
+ "JsonToItemsTaskFactory;JsonToItemsTaskFactory+CaseInsensitiveDictionaryConverter;Write;(System.Text.Json.Utf8JsonWriter,System.Collections.Generic.Dictionary,System.Text.Json.JsonSerializerOptions);generated",
+ "JsonToItemsTaskFactory;JsonToItemsTaskFactory+JsonModelItem;JsonModelItem;(System.String,System.Collections.Generic.Dictionary);generated",
+ "JsonToItemsTaskFactory;JsonToItemsTaskFactory+JsonModelItem;get_Identity;();generated",
+ "JsonToItemsTaskFactory;JsonToItemsTaskFactory+JsonModelItem;get_Metadata;();generated",
+ "JsonToItemsTaskFactory;JsonToItemsTaskFactory+JsonModelItemConverter;JsonModelItemConverter;();generated",
+ "JsonToItemsTaskFactory;JsonToItemsTaskFactory+JsonModelItemConverter;Write;(System.Text.Json.Utf8JsonWriter,JsonToItemsTaskFactory.JsonToItemsTaskFactory+JsonModelItem,System.Text.Json.JsonSerializerOptions);generated",
+ "JsonToItemsTaskFactory;JsonToItemsTaskFactory+JsonModelRoot;JsonModelRoot;();generated",
+ "JsonToItemsTaskFactory;JsonToItemsTaskFactory+JsonModelRoot;get_Items;();generated",
+ "JsonToItemsTaskFactory;JsonToItemsTaskFactory+JsonModelRoot;get_Properties;();generated",
+ "JsonToItemsTaskFactory;JsonToItemsTaskFactory+JsonModelRoot;set_Items;(System.Collections.Generic.Dictionary);generated",
+ "JsonToItemsTaskFactory;JsonToItemsTaskFactory+JsonModelRoot;set_Properties;(System.Collections.Generic.Dictionary);generated",
+ "JsonToItemsTaskFactory;JsonToItemsTaskFactory+JsonToItemsTask;ConvertItems;(JsonToItemsTaskFactory.JsonToItemsTaskFactory+JsonModelItem[]);generated",
+ "JsonToItemsTaskFactory;JsonToItemsTaskFactory+JsonToItemsTask;Execute;();generated",
+ "JsonToItemsTaskFactory;JsonToItemsTaskFactory+JsonToItemsTask;GetJsonAsync;(System.String,System.IO.FileStream);generated",
+ "JsonToItemsTaskFactory;JsonToItemsTaskFactory+JsonToItemsTask;GetPropertyValue;(Microsoft.Build.Framework.TaskPropertyInfo);generated",
+ "JsonToItemsTaskFactory;JsonToItemsTaskFactory+JsonToItemsTask;JsonToItemsTask;(System.String,System.Boolean);generated",
+ "JsonToItemsTaskFactory;JsonToItemsTaskFactory+JsonToItemsTask;TryGetJson;(System.String,JsonToItemsTaskFactory.JsonToItemsTaskFactory+JsonModelRoot);generated",
+ "JsonToItemsTaskFactory;JsonToItemsTaskFactory+JsonToItemsTask;get_HostObject;();generated",
+ "JsonToItemsTaskFactory;JsonToItemsTaskFactory+JsonToItemsTask;get_JsonOptions;();generated",
+ "JsonToItemsTaskFactory;JsonToItemsTaskFactory+JsonToItemsTask;get_TaskName;();generated",
+ "JsonToItemsTaskFactory;JsonToItemsTaskFactory+JsonToItemsTask;set_HostObject;(Microsoft.Build.Framework.ITaskHost);generated",
+ "JsonToItemsTaskFactory;JsonToItemsTaskFactory;CleanupTask;(Microsoft.Build.Framework.ITask);generated",
+ "JsonToItemsTaskFactory;JsonToItemsTaskFactory;CreateTask;(Microsoft.Build.Framework.IBuildEngine);generated",
+ "JsonToItemsTaskFactory;JsonToItemsTaskFactory;JsonToItemsTaskFactory;();generated",
+ "JsonToItemsTaskFactory;JsonToItemsTaskFactory;get_FactoryName;();generated",
+ "JsonToItemsTaskFactory;JsonToItemsTaskFactory;get_TaskType;();generated",
+ "Microsoft.CSharp.RuntimeBinder;CSharpArgumentInfo;Create;(Microsoft.CSharp.RuntimeBinder.CSharpArgumentInfoFlags,System.String);generated",
+ "Microsoft.CSharp.RuntimeBinder;RuntimeBinderException;RuntimeBinderException;();generated",
+ "Microsoft.CSharp.RuntimeBinder;RuntimeBinderException;RuntimeBinderException;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);generated",
+ "Microsoft.CSharp.RuntimeBinder;RuntimeBinderException;RuntimeBinderException;(System.String);generated",
+ "Microsoft.CSharp.RuntimeBinder;RuntimeBinderException;RuntimeBinderException;(System.String,System.Exception);generated",
+ "Microsoft.CSharp.RuntimeBinder;RuntimeBinderInternalCompilerException;RuntimeBinderInternalCompilerException;();generated",
+ "Microsoft.CSharp.RuntimeBinder;RuntimeBinderInternalCompilerException;RuntimeBinderInternalCompilerException;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);generated",
+ "Microsoft.CSharp.RuntimeBinder;RuntimeBinderInternalCompilerException;RuntimeBinderInternalCompilerException;(System.String);generated",
+ "Microsoft.CSharp.RuntimeBinder;RuntimeBinderInternalCompilerException;RuntimeBinderInternalCompilerException;(System.String,System.Exception);generated",
+ "Microsoft.CSharp;CSharpCodeProvider;CSharpCodeProvider;();generated",
+ "Microsoft.CSharp;CSharpCodeProvider;GetConverter;(System.Type);generated",
+ "Microsoft.CSharp;CSharpCodeProvider;get_FileExtension;();generated",
+ "Microsoft.DotNet.Build.Tasks;BuildTask;BuildTask;();generated",
+ "Microsoft.DotNet.Build.Tasks;BuildTask;Execute;();generated",
+ "Microsoft.DotNet.Build.Tasks;BuildTask;get_BuildEngine;();generated",
+ "Microsoft.DotNet.Build.Tasks;BuildTask;get_HostObject;();generated",
+ "Microsoft.DotNet.Build.Tasks;BuildTask;set_BuildEngine;(Microsoft.Build.Framework.IBuildEngine);generated",
+ "Microsoft.DotNet.Build.Tasks;BuildTask;set_HostObject;(Microsoft.Build.Framework.ITaskHost);generated",
+ "Microsoft.DotNet.Build.Tasks;GenerateChecksums;Execute;();generated",
+ "Microsoft.DotNet.Build.Tasks;GenerateChecksums;get_Items;();generated",
+ "Microsoft.DotNet.Build.Tasks;GenerateChecksums;set_Items;(Microsoft.Build.Framework.ITaskItem[]);generated",
+ "Microsoft.DotNet.Build.Tasks;GenerateFileVersionProps;Execute;();generated",
+ "Microsoft.DotNet.Build.Tasks;GenerateFileVersionProps;get_Files;();generated",
+ "Microsoft.DotNet.Build.Tasks;GenerateFileVersionProps;get_PackageId;();generated",
+ "Microsoft.DotNet.Build.Tasks;GenerateFileVersionProps;get_PackageVersion;();generated",
+ "Microsoft.DotNet.Build.Tasks;GenerateFileVersionProps;get_PermitDllAndExeFilesLackingFileVersion;();generated",
+ "Microsoft.DotNet.Build.Tasks;GenerateFileVersionProps;get_PlatformManifestFile;();generated",
+ "Microsoft.DotNet.Build.Tasks;GenerateFileVersionProps;get_PreferredPackages;();generated",
+ "Microsoft.DotNet.Build.Tasks;GenerateFileVersionProps;get_PropsFile;();generated",
+ "Microsoft.DotNet.Build.Tasks;GenerateFileVersionProps;set_Files;(Microsoft.Build.Framework.ITaskItem[]);generated",
+ "Microsoft.DotNet.Build.Tasks;GenerateFileVersionProps;set_PackageId;(System.String);generated",
+ "Microsoft.DotNet.Build.Tasks;GenerateFileVersionProps;set_PackageVersion;(System.String);generated",
+ "Microsoft.DotNet.Build.Tasks;GenerateFileVersionProps;set_PermitDllAndExeFilesLackingFileVersion;(System.Boolean);generated",
+ "Microsoft.DotNet.Build.Tasks;GenerateFileVersionProps;set_PlatformManifestFile;(System.String);generated",
+ "Microsoft.DotNet.Build.Tasks;GenerateFileVersionProps;set_PreferredPackages;(System.String);generated",
+ "Microsoft.DotNet.Build.Tasks;GenerateFileVersionProps;set_PropsFile;(System.String);generated",
+ "Microsoft.DotNet.Build.Tasks;GenerateRunScript;Execute;();generated",
+ "Microsoft.DotNet.Build.Tasks;GenerateRunScript;get_OutputPath;();generated",
+ "Microsoft.DotNet.Build.Tasks;GenerateRunScript;get_RunCommands;();generated",
+ "Microsoft.DotNet.Build.Tasks;GenerateRunScript;get_SetCommands;();generated",
+ "Microsoft.DotNet.Build.Tasks;GenerateRunScript;get_TemplatePath;();generated",
+ "Microsoft.DotNet.Build.Tasks;GenerateRunScript;set_OutputPath;(System.String);generated",
+ "Microsoft.DotNet.Build.Tasks;GenerateRunScript;set_RunCommands;(System.String[]);generated",
+ "Microsoft.DotNet.Build.Tasks;GenerateRunScript;set_SetCommands;(System.String[]);generated",
+ "Microsoft.DotNet.Build.Tasks;GenerateRunScript;set_TemplatePath;(System.String);generated",
+ "Microsoft.DotNet.Build.Tasks;GenerateTestSharedFrameworkDepsFile;Execute;();generated",
+ "Microsoft.DotNet.Build.Tasks;GenerateTestSharedFrameworkDepsFile;get_RuntimeGraphFiles;();generated",
+ "Microsoft.DotNet.Build.Tasks;GenerateTestSharedFrameworkDepsFile;get_SharedFrameworkDirectory;();generated",
+ "Microsoft.DotNet.Build.Tasks;GenerateTestSharedFrameworkDepsFile;get_TargetRuntimeIdentifier;();generated",
+ "Microsoft.DotNet.Build.Tasks;GenerateTestSharedFrameworkDepsFile;set_RuntimeGraphFiles;(System.String[]);generated",
+ "Microsoft.DotNet.Build.Tasks;GenerateTestSharedFrameworkDepsFile;set_SharedFrameworkDirectory;(System.String);generated",
+ "Microsoft.DotNet.Build.Tasks;GenerateTestSharedFrameworkDepsFile;set_TargetRuntimeIdentifier;(System.String);generated",
+ "Microsoft.DotNet.Build.Tasks;RegenerateDownloadTable;Execute;();generated",
+ "Microsoft.DotNet.Build.Tasks;RegenerateDownloadTable;get_Branches;();generated",
+ "Microsoft.DotNet.Build.Tasks;RegenerateDownloadTable;get_Platforms;();generated",
+ "Microsoft.DotNet.Build.Tasks;RegenerateDownloadTable;get_ReadmeFile;();generated",
+ "Microsoft.DotNet.Build.Tasks;RegenerateDownloadTable;set_Branches;(Microsoft.Build.Framework.ITaskItem[]);generated",
+ "Microsoft.DotNet.Build.Tasks;RegenerateDownloadTable;set_Platforms;(Microsoft.Build.Framework.ITaskItem[]);generated",
+ "Microsoft.DotNet.Build.Tasks;RegenerateDownloadTable;set_ReadmeFile;(System.String);generated",
+ "Microsoft.DotNet.PlatformAbstractions;HashCodeCombiner;Add;(System.Int32);generated",
+ "Microsoft.DotNet.PlatformAbstractions;HashCodeCombiner;Add;(System.Object);generated",
+ "Microsoft.DotNet.PlatformAbstractions;HashCodeCombiner;Add;(System.String);generated",
+ "Microsoft.DotNet.PlatformAbstractions;HashCodeCombiner;Add<>;(TValue,System.Collections.Generic.IEqualityComparer);generated",
+ "Microsoft.DotNet.PlatformAbstractions;HashCodeCombiner;Start;();generated",
+ "Microsoft.DotNet.PlatformAbstractions;HashCodeCombiner;get_CombinedHash;();generated",
+ "Microsoft.Extensions.Caching.Distributed;DistributedCacheExtensions;GetString;(Microsoft.Extensions.Caching.Distributed.IDistributedCache,System.String);generated",
+ "Microsoft.Extensions.Caching.Distributed;DistributedCacheExtensions;GetStringAsync;(Microsoft.Extensions.Caching.Distributed.IDistributedCache,System.String,System.Threading.CancellationToken);generated",
+ "Microsoft.Extensions.Caching.Distributed;DistributedCacheExtensions;Set;(Microsoft.Extensions.Caching.Distributed.IDistributedCache,System.String,System.Byte[]);generated",
+ "Microsoft.Extensions.Caching.Distributed;DistributedCacheExtensions;SetAsync;(Microsoft.Extensions.Caching.Distributed.IDistributedCache,System.String,System.Byte[],System.Threading.CancellationToken);generated",
+ "Microsoft.Extensions.Caching.Distributed;DistributedCacheExtensions;SetString;(Microsoft.Extensions.Caching.Distributed.IDistributedCache,System.String,System.String);generated",
+ "Microsoft.Extensions.Caching.Distributed;DistributedCacheExtensions;SetString;(Microsoft.Extensions.Caching.Distributed.IDistributedCache,System.String,System.String,Microsoft.Extensions.Caching.Distributed.DistributedCacheEntryOptions);generated",
+ "Microsoft.Extensions.Caching.Distributed;DistributedCacheExtensions;SetStringAsync;(Microsoft.Extensions.Caching.Distributed.IDistributedCache,System.String,System.String,Microsoft.Extensions.Caching.Distributed.DistributedCacheEntryOptions,System.Threading.CancellationToken);generated",
+ "Microsoft.Extensions.Caching.Distributed;DistributedCacheExtensions;SetStringAsync;(Microsoft.Extensions.Caching.Distributed.IDistributedCache,System.String,System.String,System.Threading.CancellationToken);generated",
+ "Microsoft.Extensions.Caching.Distributed;IDistributedCache;Get;(System.String);generated",
+ "Microsoft.Extensions.Caching.Distributed;IDistributedCache;GetAsync;(System.String,System.Threading.CancellationToken);generated",
+ "Microsoft.Extensions.Caching.Distributed;IDistributedCache;Refresh;(System.String);generated",
+ "Microsoft.Extensions.Caching.Distributed;IDistributedCache;RefreshAsync;(System.String,System.Threading.CancellationToken);generated",
+ "Microsoft.Extensions.Caching.Distributed;IDistributedCache;Remove;(System.String);generated",
+ "Microsoft.Extensions.Caching.Distributed;IDistributedCache;RemoveAsync;(System.String,System.Threading.CancellationToken);generated",
+ "Microsoft.Extensions.Caching.Distributed;IDistributedCache;Set;(System.String,System.Byte[],Microsoft.Extensions.Caching.Distributed.DistributedCacheEntryOptions);generated",
+ "Microsoft.Extensions.Caching.Distributed;IDistributedCache;SetAsync;(System.String,System.Byte[],Microsoft.Extensions.Caching.Distributed.DistributedCacheEntryOptions,System.Threading.CancellationToken);generated",
+ "Microsoft.Extensions.Caching.Distributed;MemoryDistributedCache;Get;(System.String);generated",
+ "Microsoft.Extensions.Caching.Distributed;MemoryDistributedCache;GetAsync;(System.String,System.Threading.CancellationToken);generated",
+ "Microsoft.Extensions.Caching.Distributed;MemoryDistributedCache;MemoryDistributedCache;(Microsoft.Extensions.Options.IOptions);generated",
+ "Microsoft.Extensions.Caching.Distributed;MemoryDistributedCache;MemoryDistributedCache;(Microsoft.Extensions.Options.IOptions,Microsoft.Extensions.Logging.ILoggerFactory);generated",
+ "Microsoft.Extensions.Caching.Distributed;MemoryDistributedCache;Refresh;(System.String);generated",
+ "Microsoft.Extensions.Caching.Distributed;MemoryDistributedCache;RefreshAsync;(System.String,System.Threading.CancellationToken);generated",
+ "Microsoft.Extensions.Caching.Distributed;MemoryDistributedCache;Remove;(System.String);generated",
+ "Microsoft.Extensions.Caching.Distributed;MemoryDistributedCache;RemoveAsync;(System.String,System.Threading.CancellationToken);generated",
+ "Microsoft.Extensions.Caching.Distributed;MemoryDistributedCache;Set;(System.String,System.Byte[],Microsoft.Extensions.Caching.Distributed.DistributedCacheEntryOptions);generated",
+ "Microsoft.Extensions.Caching.Distributed;MemoryDistributedCache;SetAsync;(System.String,System.Byte[],Microsoft.Extensions.Caching.Distributed.DistributedCacheEntryOptions,System.Threading.CancellationToken);generated",
+ "Microsoft.Extensions.Caching.Memory;CacheExtensions;Get;(Microsoft.Extensions.Caching.Memory.IMemoryCache,System.Object);generated",
+ "Microsoft.Extensions.Caching.Memory;CacheExtensions;Get<>;(Microsoft.Extensions.Caching.Memory.IMemoryCache,System.Object);generated",
+ "Microsoft.Extensions.Caching.Memory;CacheExtensions;TryGetValue<>;(Microsoft.Extensions.Caching.Memory.IMemoryCache,System.Object,TItem);generated",
+ "Microsoft.Extensions.Caching.Memory;ICacheEntry;get_AbsoluteExpiration;();generated",
+ "Microsoft.Extensions.Caching.Memory;ICacheEntry;get_AbsoluteExpirationRelativeToNow;();generated",
+ "Microsoft.Extensions.Caching.Memory;ICacheEntry;get_ExpirationTokens;();generated",
+ "Microsoft.Extensions.Caching.Memory;ICacheEntry;get_Key;();generated",
+ "Microsoft.Extensions.Caching.Memory;ICacheEntry;get_PostEvictionCallbacks;();generated",
+ "Microsoft.Extensions.Caching.Memory;ICacheEntry;get_Priority;();generated",
+ "Microsoft.Extensions.Caching.Memory;ICacheEntry;get_Size;();generated",
+ "Microsoft.Extensions.Caching.Memory;ICacheEntry;get_SlidingExpiration;();generated",
+ "Microsoft.Extensions.Caching.Memory;ICacheEntry;get_Value;();generated",
+ "Microsoft.Extensions.Caching.Memory;ICacheEntry;set_AbsoluteExpiration;(System.Nullable);generated",
+ "Microsoft.Extensions.Caching.Memory;ICacheEntry;set_AbsoluteExpirationRelativeToNow;(System.Nullable);generated",
+ "Microsoft.Extensions.Caching.Memory;ICacheEntry;set_Priority;(Microsoft.Extensions.Caching.Memory.CacheItemPriority);generated",
+ "Microsoft.Extensions.Caching.Memory;ICacheEntry;set_Size;(System.Nullable);generated",
+ "Microsoft.Extensions.Caching.Memory;ICacheEntry;set_SlidingExpiration;(System.Nullable);generated",
+ "Microsoft.Extensions.Caching.Memory;ICacheEntry;set_Value;(System.Object);generated",
+ "Microsoft.Extensions.Caching.Memory;IMemoryCache;CreateEntry;(System.Object);generated",
+ "Microsoft.Extensions.Caching.Memory;IMemoryCache;Remove;(System.Object);generated",
+ "Microsoft.Extensions.Caching.Memory;IMemoryCache;TryGetValue;(System.Object,System.Object);generated",
+ "Microsoft.Extensions.Caching.Memory;MemoryCache;Clear;();generated",
+ "Microsoft.Extensions.Caching.Memory;MemoryCache;Compact;(System.Double);generated",
+ "Microsoft.Extensions.Caching.Memory;MemoryCache;Dispose;();generated",
+ "Microsoft.Extensions.Caching.Memory;MemoryCache;Dispose;(System.Boolean);generated",
+ "Microsoft.Extensions.Caching.Memory;MemoryCache;MemoryCache;(Microsoft.Extensions.Options.IOptions);generated",
+ "Microsoft.Extensions.Caching.Memory;MemoryCache;Remove;(System.Object);generated",
+ "Microsoft.Extensions.Caching.Memory;MemoryCache;TryGetValue;(System.Object,System.Object);generated",
+ "Microsoft.Extensions.Caching.Memory;MemoryCache;get_Count;();generated",
+ "Microsoft.Extensions.Caching.Memory;MemoryCacheEntryOptions;get_ExpirationTokens;();generated",
+ "Microsoft.Extensions.Caching.Memory;MemoryCacheEntryOptions;get_PostEvictionCallbacks;();generated",
+ "Microsoft.Extensions.Caching.Memory;MemoryCacheEntryOptions;get_Priority;();generated",
+ "Microsoft.Extensions.Caching.Memory;MemoryCacheEntryOptions;set_Priority;(Microsoft.Extensions.Caching.Memory.CacheItemPriority);generated",
+ "Microsoft.Extensions.Caching.Memory;MemoryCacheOptions;get_Clock;();generated",
+ "Microsoft.Extensions.Caching.Memory;MemoryCacheOptions;get_CompactionPercentage;();generated",
+ "Microsoft.Extensions.Caching.Memory;MemoryCacheOptions;get_ExpirationScanFrequency;();generated",
+ "Microsoft.Extensions.Caching.Memory;MemoryCacheOptions;get_TrackLinkedCacheEntries;();generated",
+ "Microsoft.Extensions.Caching.Memory;MemoryCacheOptions;set_Clock;(Microsoft.Extensions.Internal.ISystemClock);generated",
+ "Microsoft.Extensions.Caching.Memory;MemoryCacheOptions;set_CompactionPercentage;(System.Double);generated",
+ "Microsoft.Extensions.Caching.Memory;MemoryCacheOptions;set_ExpirationScanFrequency;(System.TimeSpan);generated",
+ "Microsoft.Extensions.Caching.Memory;MemoryCacheOptions;set_TrackLinkedCacheEntries;(System.Boolean);generated",
+ "Microsoft.Extensions.Caching.Memory;MemoryDistributedCacheOptions;MemoryDistributedCacheOptions;();generated",
+ "Microsoft.Extensions.Caching.Memory;PostEvictionCallbackRegistration;get_EvictionCallback;();generated",
+ "Microsoft.Extensions.Caching.Memory;PostEvictionCallbackRegistration;get_State;();generated",
+ "Microsoft.Extensions.Caching.Memory;PostEvictionCallbackRegistration;set_State;(System.Object);generated",
+ "Microsoft.Extensions.Configuration.CommandLine;CommandLineConfigurationProvider;CommandLineConfigurationProvider;(System.Collections.Generic.IEnumerable,System.Collections.Generic.IDictionary);generated",
+ "Microsoft.Extensions.Configuration.CommandLine;CommandLineConfigurationProvider;Load;();generated",
+ "Microsoft.Extensions.Configuration.CommandLine;CommandLineConfigurationProvider;get_Args;();generated",
+ "Microsoft.Extensions.Configuration.CommandLine;CommandLineConfigurationProvider;set_Args;(System.Collections.Generic.IEnumerable);generated",
+ "Microsoft.Extensions.Configuration.CommandLine;CommandLineConfigurationSource;Build;(Microsoft.Extensions.Configuration.IConfigurationBuilder);generated",
+ "Microsoft.Extensions.Configuration.CommandLine;CommandLineConfigurationSource;get_Args;();generated",
+ "Microsoft.Extensions.Configuration.CommandLine;CommandLineConfigurationSource;get_SwitchMappings;();generated",
+ "Microsoft.Extensions.Configuration.CommandLine;CommandLineConfigurationSource;set_Args;(System.Collections.Generic.IEnumerable);generated",
+ "Microsoft.Extensions.Configuration.CommandLine;CommandLineConfigurationSource;set_SwitchMappings;(System.Collections.Generic.IDictionary);generated",
+ "Microsoft.Extensions.Configuration.EnvironmentVariables;EnvironmentVariablesConfigurationProvider;EnvironmentVariablesConfigurationProvider;();generated",
+ "Microsoft.Extensions.Configuration.EnvironmentVariables;EnvironmentVariablesConfigurationProvider;Load;();generated",
+ "Microsoft.Extensions.Configuration.EnvironmentVariables;EnvironmentVariablesConfigurationSource;Build;(Microsoft.Extensions.Configuration.IConfigurationBuilder);generated",
+ "Microsoft.Extensions.Configuration.EnvironmentVariables;EnvironmentVariablesConfigurationSource;get_Prefix;();generated",
+ "Microsoft.Extensions.Configuration.EnvironmentVariables;EnvironmentVariablesConfigurationSource;set_Prefix;(System.String);generated",
+ "Microsoft.Extensions.Configuration.Ini;IniConfigurationProvider;IniConfigurationProvider;(Microsoft.Extensions.Configuration.Ini.IniConfigurationSource);generated",
+ "Microsoft.Extensions.Configuration.Ini;IniConfigurationProvider;Load;(System.IO.Stream);generated",
+ "Microsoft.Extensions.Configuration.Ini;IniConfigurationSource;Build;(Microsoft.Extensions.Configuration.IConfigurationBuilder);generated",
+ "Microsoft.Extensions.Configuration.Ini;IniStreamConfigurationProvider;IniStreamConfigurationProvider;(Microsoft.Extensions.Configuration.Ini.IniStreamConfigurationSource);generated",
+ "Microsoft.Extensions.Configuration.Ini;IniStreamConfigurationProvider;Load;(System.IO.Stream);generated",
+ "Microsoft.Extensions.Configuration.Ini;IniStreamConfigurationProvider;Read;(System.IO.Stream);generated",
+ "Microsoft.Extensions.Configuration.Ini;IniStreamConfigurationSource;Build;(Microsoft.Extensions.Configuration.IConfigurationBuilder);generated",
+ "Microsoft.Extensions.Configuration.Json;JsonConfigurationProvider;JsonConfigurationProvider;(Microsoft.Extensions.Configuration.Json.JsonConfigurationSource);generated",
+ "Microsoft.Extensions.Configuration.Json;JsonConfigurationProvider;Load;(System.IO.Stream);generated",
+ "Microsoft.Extensions.Configuration.Json;JsonConfigurationSource;Build;(Microsoft.Extensions.Configuration.IConfigurationBuilder);generated",
+ "Microsoft.Extensions.Configuration.Json;JsonStreamConfigurationProvider;JsonStreamConfigurationProvider;(Microsoft.Extensions.Configuration.Json.JsonStreamConfigurationSource);generated",
+ "Microsoft.Extensions.Configuration.Json;JsonStreamConfigurationProvider;Load;(System.IO.Stream);generated",
+ "Microsoft.Extensions.Configuration.Json;JsonStreamConfigurationSource;Build;(Microsoft.Extensions.Configuration.IConfigurationBuilder);generated",
+ "Microsoft.Extensions.Configuration.Memory;MemoryConfigurationProvider;Add;(System.String,System.String);generated",
+ "Microsoft.Extensions.Configuration.Memory;MemoryConfigurationSource;get_InitialData;();generated",
+ "Microsoft.Extensions.Configuration.Memory;MemoryConfigurationSource;set_InitialData;(System.Collections.Generic.IEnumerable>);generated",
+ "Microsoft.Extensions.Configuration.UserSecrets;UserSecretsIdAttribute;UserSecretsIdAttribute;(System.String);generated",
+ "Microsoft.Extensions.Configuration.UserSecrets;UserSecretsIdAttribute;get_UserSecretsId;();generated",
+ "Microsoft.Extensions.Configuration.Xml;XmlConfigurationProvider;Load;(System.IO.Stream);generated",
+ "Microsoft.Extensions.Configuration.Xml;XmlConfigurationProvider;XmlConfigurationProvider;(Microsoft.Extensions.Configuration.Xml.XmlConfigurationSource);generated",
+ "Microsoft.Extensions.Configuration.Xml;XmlConfigurationSource;Build;(Microsoft.Extensions.Configuration.IConfigurationBuilder);generated",
+ "Microsoft.Extensions.Configuration.Xml;XmlDocumentDecryptor;DecryptDocumentAndCreateXmlReader;(System.Xml.XmlDocument);generated",
+ "Microsoft.Extensions.Configuration.Xml;XmlDocumentDecryptor;XmlDocumentDecryptor;();generated",
+ "Microsoft.Extensions.Configuration.Xml;XmlStreamConfigurationProvider;Load;(System.IO.Stream);generated",
+ "Microsoft.Extensions.Configuration.Xml;XmlStreamConfigurationProvider;Read;(System.IO.Stream,Microsoft.Extensions.Configuration.Xml.XmlDocumentDecryptor);generated",
+ "Microsoft.Extensions.Configuration.Xml;XmlStreamConfigurationProvider;XmlStreamConfigurationProvider;(Microsoft.Extensions.Configuration.Xml.XmlStreamConfigurationSource);generated",
+ "Microsoft.Extensions.Configuration.Xml;XmlStreamConfigurationSource;Build;(Microsoft.Extensions.Configuration.IConfigurationBuilder);generated",
+ "Microsoft.Extensions.Configuration;BinderOptions;get_BindNonPublicProperties;();generated",
+ "Microsoft.Extensions.Configuration;BinderOptions;get_ErrorOnUnknownConfiguration;();generated",
+ "Microsoft.Extensions.Configuration;BinderOptions;set_BindNonPublicProperties;(System.Boolean);generated",
+ "Microsoft.Extensions.Configuration;BinderOptions;set_ErrorOnUnknownConfiguration;(System.Boolean);generated",
+ "Microsoft.Extensions.Configuration;ChainedConfigurationProvider;ChainedConfigurationProvider;(Microsoft.Extensions.Configuration.ChainedConfigurationSource);generated",
+ "Microsoft.Extensions.Configuration;ChainedConfigurationProvider;Dispose;();generated",
+ "Microsoft.Extensions.Configuration;ChainedConfigurationProvider;Load;();generated",
+ "Microsoft.Extensions.Configuration;ChainedConfigurationProvider;Set;(System.String,System.String);generated",
+ "Microsoft.Extensions.Configuration;ChainedConfigurationSource;Build;(Microsoft.Extensions.Configuration.IConfigurationBuilder);generated",
+ "Microsoft.Extensions.Configuration;ChainedConfigurationSource;get_Configuration;();generated",
+ "Microsoft.Extensions.Configuration;ChainedConfigurationSource;get_ShouldDisposeConfiguration;();generated",
+ "Microsoft.Extensions.Configuration;ChainedConfigurationSource;set_Configuration;(Microsoft.Extensions.Configuration.IConfiguration);generated",
+ "Microsoft.Extensions.Configuration;ChainedConfigurationSource;set_ShouldDisposeConfiguration;(System.Boolean);generated",
+ "Microsoft.Extensions.Configuration;ConfigurationBinder;Bind;(Microsoft.Extensions.Configuration.IConfiguration,System.Object);generated",
+ "Microsoft.Extensions.Configuration;ConfigurationBinder;Bind;(Microsoft.Extensions.Configuration.IConfiguration,System.String,System.Object);generated",
+ "Microsoft.Extensions.Configuration;ConfigurationBuilder;Build;();generated",
+ "Microsoft.Extensions.Configuration;ConfigurationBuilder;get_Properties;();generated",
+ "Microsoft.Extensions.Configuration;ConfigurationBuilder;get_Sources;();generated",
+ "Microsoft.Extensions.Configuration;ConfigurationDebugViewContext;ConfigurationDebugViewContext;(System.String,System.String,System.String,Microsoft.Extensions.Configuration.IConfigurationProvider);generated",
+ "Microsoft.Extensions.Configuration;ConfigurationDebugViewContext;get_ConfigurationProvider;();generated",
+ "Microsoft.Extensions.Configuration;ConfigurationDebugViewContext;get_Key;();generated",
+ "Microsoft.Extensions.Configuration;ConfigurationDebugViewContext;get_Path;();generated",
+ "Microsoft.Extensions.Configuration;ConfigurationDebugViewContext;get_Value;();generated",
+ "Microsoft.Extensions.Configuration;ConfigurationExtensions;AsEnumerable;(Microsoft.Extensions.Configuration.IConfiguration);generated",
+ "Microsoft.Extensions.Configuration;ConfigurationExtensions;AsEnumerable;(Microsoft.Extensions.Configuration.IConfiguration,System.Boolean);generated",
+ "Microsoft.Extensions.Configuration;ConfigurationExtensions;Exists;(Microsoft.Extensions.Configuration.IConfigurationSection);generated",
+ "Microsoft.Extensions.Configuration;ConfigurationKeyComparer;Compare;(System.String,System.String);generated",
+ "Microsoft.Extensions.Configuration;ConfigurationKeyComparer;get_Instance;();generated",
+ "Microsoft.Extensions.Configuration;ConfigurationKeyNameAttribute;ConfigurationKeyNameAttribute;(System.String);generated",
+ "Microsoft.Extensions.Configuration;ConfigurationKeyNameAttribute;get_Name;();generated",
+ "Microsoft.Extensions.Configuration;ConfigurationManager;ConfigurationManager;();generated",
+ "Microsoft.Extensions.Configuration;ConfigurationManager;Dispose;();generated",
+ "Microsoft.Extensions.Configuration;ConfigurationManager;GetChildren;();generated",
+ "Microsoft.Extensions.Configuration;ConfigurationManager;Reload;();generated",
+ "Microsoft.Extensions.Configuration;ConfigurationManager;set_Item;(System.String,System.String);generated",
+ "Microsoft.Extensions.Configuration;ConfigurationProvider;ConfigurationProvider;();generated",
+ "Microsoft.Extensions.Configuration;ConfigurationProvider;Load;();generated",
+ "Microsoft.Extensions.Configuration;ConfigurationProvider;OnReload;();generated",
+ "Microsoft.Extensions.Configuration;ConfigurationProvider;Set;(System.String,System.String);generated",
+ "Microsoft.Extensions.Configuration;ConfigurationProvider;ToString;();generated",
+ "Microsoft.Extensions.Configuration;ConfigurationProvider;TryGet;(System.String,System.String);generated",
+ "Microsoft.Extensions.Configuration;ConfigurationProvider;get_Data;();generated",
+ "Microsoft.Extensions.Configuration;ConfigurationProvider;set_Data;(System.Collections.Generic.IDictionary);generated",
+ "Microsoft.Extensions.Configuration;ConfigurationReloadToken;OnReload;();generated",
+ "Microsoft.Extensions.Configuration;ConfigurationReloadToken;get_ActiveChangeCallbacks;();generated",
+ "Microsoft.Extensions.Configuration;ConfigurationReloadToken;get_HasChanged;();generated",
+ "Microsoft.Extensions.Configuration;ConfigurationRoot;Dispose;();generated",
+ "Microsoft.Extensions.Configuration;ConfigurationRoot;GetChildren;();generated",
+ "Microsoft.Extensions.Configuration;ConfigurationRoot;Reload;();generated",
+ "Microsoft.Extensions.Configuration;ConfigurationRoot;set_Item;(System.String,System.String);generated",
+ "Microsoft.Extensions.Configuration;ConfigurationSection;GetChildren;();generated",
+ "Microsoft.Extensions.Configuration;ConfigurationSection;GetReloadToken;();generated",
+ "Microsoft.Extensions.Configuration;ConfigurationSection;GetSection;(System.String);generated",
+ "Microsoft.Extensions.Configuration;ConfigurationSection;set_Item;(System.String,System.String);generated",
+ "Microsoft.Extensions.Configuration;ConfigurationSection;set_Value;(System.String);generated",
+ "Microsoft.Extensions.Configuration;FileConfigurationExtensions;GetFileLoadExceptionHandler;(Microsoft.Extensions.Configuration.IConfigurationBuilder);generated",
+ "Microsoft.Extensions.Configuration;FileConfigurationExtensions;GetFileProvider;(Microsoft.Extensions.Configuration.IConfigurationBuilder);generated",
+ "Microsoft.Extensions.Configuration;FileConfigurationProvider;Dispose;();generated",
+ "Microsoft.Extensions.Configuration;FileConfigurationProvider;Dispose;(System.Boolean);generated",
+ "Microsoft.Extensions.Configuration;FileConfigurationProvider;FileConfigurationProvider;(Microsoft.Extensions.Configuration.FileConfigurationSource);generated",
+ "Microsoft.Extensions.Configuration;FileConfigurationProvider;Load;();generated",
+ "Microsoft.Extensions.Configuration;FileConfigurationProvider;Load;(System.IO.Stream);generated",
+ "Microsoft.Extensions.Configuration;FileConfigurationProvider;ToString;();generated",
+ "Microsoft.Extensions.Configuration;FileConfigurationProvider;get_Source;();generated",
+ "Microsoft.Extensions.Configuration;FileConfigurationSource;Build;(Microsoft.Extensions.Configuration.IConfigurationBuilder);generated",
+ "Microsoft.Extensions.Configuration;FileConfigurationSource;EnsureDefaults;(Microsoft.Extensions.Configuration.IConfigurationBuilder);generated",
+ "Microsoft.Extensions.Configuration;FileConfigurationSource;ResolveFileProvider;();generated",
+ "Microsoft.Extensions.Configuration;FileConfigurationSource;get_FileProvider;();generated",
+ "Microsoft.Extensions.Configuration;FileConfigurationSource;get_OnLoadException;();generated",
+ "Microsoft.Extensions.Configuration;FileConfigurationSource;get_Optional;();generated",
+ "Microsoft.Extensions.Configuration;FileConfigurationSource;get_Path;();generated",
+ "Microsoft.Extensions.Configuration;FileConfigurationSource;get_ReloadDelay;();generated",
+ "Microsoft.Extensions.Configuration;FileConfigurationSource;get_ReloadOnChange;();generated",
+ "Microsoft.Extensions.Configuration;FileConfigurationSource;set_FileProvider;(Microsoft.Extensions.FileProviders.IFileProvider);generated",
+ "Microsoft.Extensions.Configuration;FileConfigurationSource;set_Optional;(System.Boolean);generated",
+ "Microsoft.Extensions.Configuration;FileConfigurationSource;set_Path;(System.String);generated",
+ "Microsoft.Extensions.Configuration;FileConfigurationSource;set_ReloadDelay;(System.Int32);generated",
+ "Microsoft.Extensions.Configuration;FileConfigurationSource;set_ReloadOnChange;(System.Boolean);generated",
+ "Microsoft.Extensions.Configuration;FileLoadExceptionContext;get_Exception;();generated",
+ "Microsoft.Extensions.Configuration;FileLoadExceptionContext;get_Ignore;();generated",
+ "Microsoft.Extensions.Configuration;FileLoadExceptionContext;get_Provider;();generated",
+ "Microsoft.Extensions.Configuration;FileLoadExceptionContext;set_Exception;(System.Exception);generated",
+ "Microsoft.Extensions.Configuration;FileLoadExceptionContext;set_Ignore;(System.Boolean);generated",
+ "Microsoft.Extensions.Configuration;FileLoadExceptionContext;set_Provider;(Microsoft.Extensions.Configuration.FileConfigurationProvider);generated",
+ "Microsoft.Extensions.Configuration;IConfiguration;GetChildren;();generated",
+ "Microsoft.Extensions.Configuration;IConfiguration;GetReloadToken;();generated",
+ "Microsoft.Extensions.Configuration;IConfiguration;GetSection;(System.String);generated",
+ "Microsoft.Extensions.Configuration;IConfiguration;get_Item;(System.String);generated",
+ "Microsoft.Extensions.Configuration;IConfiguration;set_Item;(System.String,System.String);generated",
+ "Microsoft.Extensions.Configuration;IConfigurationBuilder;Add;(Microsoft.Extensions.Configuration.IConfigurationSource);generated",
+ "Microsoft.Extensions.Configuration;IConfigurationBuilder;Build;();generated",
+ "Microsoft.Extensions.Configuration;IConfigurationBuilder;get_Properties;();generated",
+ "Microsoft.Extensions.Configuration;IConfigurationBuilder;get_Sources;();generated",
+ "Microsoft.Extensions.Configuration;IConfigurationProvider;GetChildKeys;(System.Collections.Generic.IEnumerable,System.String);generated",
+ "Microsoft.Extensions.Configuration;IConfigurationProvider;GetReloadToken;();generated",
+ "Microsoft.Extensions.Configuration;IConfigurationProvider;Load;();generated",
+ "Microsoft.Extensions.Configuration;IConfigurationProvider;Set;(System.String,System.String);generated",
+ "Microsoft.Extensions.Configuration;IConfigurationProvider;TryGet;(System.String,System.String);generated",
+ "Microsoft.Extensions.Configuration;IConfigurationRoot;Reload;();generated",
+ "Microsoft.Extensions.Configuration;IConfigurationRoot;get_Providers;();generated",
+ "Microsoft.Extensions.Configuration;IConfigurationSection;get_Key;();generated",
+ "Microsoft.Extensions.Configuration;IConfigurationSection;get_Path;();generated",
+ "Microsoft.Extensions.Configuration;IConfigurationSection;get_Value;();generated",
+ "Microsoft.Extensions.Configuration;IConfigurationSection;set_Value;(System.String);generated",
+ "Microsoft.Extensions.Configuration;IConfigurationSource;Build;(Microsoft.Extensions.Configuration.IConfigurationBuilder);generated",
+ "Microsoft.Extensions.Configuration;StreamConfigurationProvider;Load;();generated",
+ "Microsoft.Extensions.Configuration;StreamConfigurationProvider;Load;(System.IO.Stream);generated",
+ "Microsoft.Extensions.Configuration;StreamConfigurationProvider;StreamConfigurationProvider;(Microsoft.Extensions.Configuration.StreamConfigurationSource);generated",
+ "Microsoft.Extensions.Configuration;StreamConfigurationProvider;get_Source;();generated",
+ "Microsoft.Extensions.Configuration;StreamConfigurationSource;Build;(Microsoft.Extensions.Configuration.IConfigurationBuilder);generated",
+ "Microsoft.Extensions.Configuration;StreamConfigurationSource;get_Stream;();generated",
+ "Microsoft.Extensions.Configuration;StreamConfigurationSource;set_Stream;(System.IO.Stream);generated",
+ "Microsoft.Extensions.DependencyInjection.Extensions;ServiceCollectionDescriptorExtensions;TryAddScoped;(Microsoft.Extensions.DependencyInjection.IServiceCollection,System.Type);generated",
+ "Microsoft.Extensions.DependencyInjection.Extensions;ServiceCollectionDescriptorExtensions;TryAddScoped;(Microsoft.Extensions.DependencyInjection.IServiceCollection,System.Type,System.Type);generated",
+ "Microsoft.Extensions.DependencyInjection.Extensions;ServiceCollectionDescriptorExtensions;TryAddScoped<,>;(Microsoft.Extensions.DependencyInjection.IServiceCollection);generated",
+ "Microsoft.Extensions.DependencyInjection.Extensions;ServiceCollectionDescriptorExtensions;TryAddScoped<>;(Microsoft.Extensions.DependencyInjection.IServiceCollection);generated",
+ "Microsoft.Extensions.DependencyInjection.Extensions;ServiceCollectionDescriptorExtensions;TryAddSingleton;(Microsoft.Extensions.DependencyInjection.IServiceCollection,System.Type);generated",
+ "Microsoft.Extensions.DependencyInjection.Extensions;ServiceCollectionDescriptorExtensions;TryAddSingleton;(Microsoft.Extensions.DependencyInjection.IServiceCollection,System.Type,System.Type);generated",
+ "Microsoft.Extensions.DependencyInjection.Extensions;ServiceCollectionDescriptorExtensions;TryAddSingleton<,>;(Microsoft.Extensions.DependencyInjection.IServiceCollection);generated",
+ "Microsoft.Extensions.DependencyInjection.Extensions;ServiceCollectionDescriptorExtensions;TryAddSingleton<>;(Microsoft.Extensions.DependencyInjection.IServiceCollection);generated",
+ "Microsoft.Extensions.DependencyInjection.Extensions;ServiceCollectionDescriptorExtensions;TryAddSingleton<>;(Microsoft.Extensions.DependencyInjection.IServiceCollection,TService);generated",
+ "Microsoft.Extensions.DependencyInjection.Extensions;ServiceCollectionDescriptorExtensions;TryAddTransient;(Microsoft.Extensions.DependencyInjection.IServiceCollection,System.Type);generated",
+ "Microsoft.Extensions.DependencyInjection.Extensions;ServiceCollectionDescriptorExtensions;TryAddTransient;(Microsoft.Extensions.DependencyInjection.IServiceCollection,System.Type,System.Type);generated",
+ "Microsoft.Extensions.DependencyInjection.Extensions;ServiceCollectionDescriptorExtensions;TryAddTransient<,>;(Microsoft.Extensions.DependencyInjection.IServiceCollection);generated",
+ "Microsoft.Extensions.DependencyInjection.Extensions;ServiceCollectionDescriptorExtensions;TryAddTransient<>;(Microsoft.Extensions.DependencyInjection.IServiceCollection);generated",
+ "Microsoft.Extensions.DependencyInjection.Specification.Fakes;AnotherClass;AnotherClass;(Microsoft.Extensions.DependencyInjection.Specification.Fakes.IFakeService);generated",
+ "Microsoft.Extensions.DependencyInjection.Specification.Fakes;AnotherClass;get_FakeService;();generated",
+ "Microsoft.Extensions.DependencyInjection.Specification.Fakes;AnotherClassAcceptingData;AnotherClassAcceptingData;(Microsoft.Extensions.DependencyInjection.Specification.Fakes.IFakeService,System.String,System.String);generated",
+ "Microsoft.Extensions.DependencyInjection.Specification.Fakes;AnotherClassAcceptingData;get_FakeService;();generated",
+ "Microsoft.Extensions.DependencyInjection.Specification.Fakes;AnotherClassAcceptingData;get_One;();generated",
+ "Microsoft.Extensions.DependencyInjection.Specification.Fakes;AnotherClassAcceptingData;get_Two;();generated",
+ "Microsoft.Extensions.DependencyInjection.Specification.Fakes;ClassImplementingIComparable;CompareTo;(Microsoft.Extensions.DependencyInjection.Specification.Fakes.ClassImplementingIComparable);generated",
+ "Microsoft.Extensions.DependencyInjection.Specification.Fakes;ClassWithAbstractClassConstraint<>;ClassWithAbstractClassConstraint;(T);generated",
+ "Microsoft.Extensions.DependencyInjection.Specification.Fakes;ClassWithAbstractClassConstraint<>;get_Value;();generated",
+ "Microsoft.Extensions.DependencyInjection.Specification.Fakes;ClassWithAmbiguousCtors;ClassWithAmbiguousCtors;(Microsoft.Extensions.DependencyInjection.Specification.Fakes.IFakeService,System.Int32);generated",
+ "Microsoft.Extensions.DependencyInjection.Specification.Fakes;ClassWithAmbiguousCtors;ClassWithAmbiguousCtors;(Microsoft.Extensions.DependencyInjection.Specification.Fakes.IFakeService,System.String);generated",
+ "Microsoft.Extensions.DependencyInjection.Specification.Fakes;ClassWithAmbiguousCtors;ClassWithAmbiguousCtors;(Microsoft.Extensions.DependencyInjection.Specification.Fakes.IFakeService,System.String,System.Int32);generated",
+ "Microsoft.Extensions.DependencyInjection.Specification.Fakes;ClassWithAmbiguousCtors;ClassWithAmbiguousCtors;(System.String);generated",
+ "Microsoft.Extensions.DependencyInjection.Specification.Fakes;ClassWithAmbiguousCtors;get_CtorUsed;();generated",
+ "Microsoft.Extensions.DependencyInjection.Specification.Fakes;ClassWithAmbiguousCtors;get_Data1;();generated",
+ "Microsoft.Extensions.DependencyInjection.Specification.Fakes;ClassWithAmbiguousCtors;get_Data2;();generated",
+ "Microsoft.Extensions.DependencyInjection.Specification.Fakes;ClassWithAmbiguousCtors;get_FakeService;();generated",
+ "Microsoft.Extensions.DependencyInjection.Specification.Fakes;ClassWithAmbiguousCtors;set_CtorUsed;(System.String);generated",
+ "Microsoft.Extensions.DependencyInjection.Specification.Fakes;ClassWithAmbiguousCtorsAndAttribute;ClassWithAmbiguousCtorsAndAttribute;(Microsoft.Extensions.DependencyInjection.Specification.Fakes.IFakeService,Microsoft.Extensions.DependencyInjection.Specification.Fakes.IFakeOuterService,System.String);generated",
+ "Microsoft.Extensions.DependencyInjection.Specification.Fakes;ClassWithAmbiguousCtorsAndAttribute;ClassWithAmbiguousCtorsAndAttribute;(Microsoft.Extensions.DependencyInjection.Specification.Fakes.IFakeService,System.String);generated",
+ "Microsoft.Extensions.DependencyInjection.Specification.Fakes;ClassWithAmbiguousCtorsAndAttribute;ClassWithAmbiguousCtorsAndAttribute;(System.String);generated",
+ "Microsoft.Extensions.DependencyInjection.Specification.Fakes;ClassWithAmbiguousCtorsAndAttribute;get_CtorUsed;();generated",
+ "Microsoft.Extensions.DependencyInjection.Specification.Fakes;ClassWithAmbiguousCtorsAndAttribute;set_CtorUsed;(System.String);generated",
+ "Microsoft.Extensions.DependencyInjection.Specification.Fakes;ClassWithClassConstraint<>;get_Value;();generated",
+ "Microsoft.Extensions.DependencyInjection.Specification.Fakes;ClassWithInterfaceConstraint<>;ClassWithInterfaceConstraint;(T);generated",
+ "Microsoft.Extensions.DependencyInjection.Specification.Fakes;ClassWithInterfaceConstraint<>;get_Value;();generated",
+ "Microsoft.Extensions.DependencyInjection.Specification.Fakes;ClassWithMultipleMarkedCtors;ClassWithMultipleMarkedCtors;(Microsoft.Extensions.DependencyInjection.Specification.Fakes.IFakeService,System.String);generated",
+ "Microsoft.Extensions.DependencyInjection.Specification.Fakes;ClassWithMultipleMarkedCtors;ClassWithMultipleMarkedCtors;(System.String);generated",
+ "Microsoft.Extensions.DependencyInjection.Specification.Fakes;ClassWithNestedReferencesToProvider;Dispose;();generated",
+ "Microsoft.Extensions.DependencyInjection.Specification.Fakes;ClassWithNewConstraint<>;get_Value;();generated",
+ "Microsoft.Extensions.DependencyInjection.Specification.Fakes;ClassWithNoConstraints<>;get_Value;();generated",
+ "Microsoft.Extensions.DependencyInjection.Specification.Fakes;ClassWithSelfReferencingConstraint<>;ClassWithSelfReferencingConstraint;(T);generated",
+ "Microsoft.Extensions.DependencyInjection.Specification.Fakes;ClassWithSelfReferencingConstraint<>;get_Value;();generated",
+ "Microsoft.Extensions.DependencyInjection.Specification.Fakes;ClassWithServiceProvider;ClassWithServiceProvider;(System.IServiceProvider);generated",
+ "Microsoft.Extensions.DependencyInjection.Specification.Fakes;ClassWithServiceProvider;get_ServiceProvider;();generated",
+ "Microsoft.Extensions.DependencyInjection.Specification.Fakes;ClassWithStructConstraint<>;get_Value;();generated",
+ "Microsoft.Extensions.DependencyInjection.Specification.Fakes;ClassWithThrowingCtor;ClassWithThrowingCtor;(Microsoft.Extensions.DependencyInjection.Specification.Fakes.IFakeService);generated",
+ "Microsoft.Extensions.DependencyInjection.Specification.Fakes;ClassWithThrowingEmptyCtor;ClassWithThrowingEmptyCtor;();generated",
+ "Microsoft.Extensions.DependencyInjection.Specification.Fakes;ConstrainedFakeOpenGenericService<>;ConstrainedFakeOpenGenericService;(TVal);generated",
+ "Microsoft.Extensions.DependencyInjection.Specification.Fakes;ConstrainedFakeOpenGenericService<>;get_Value;();generated",
+ "Microsoft.Extensions.DependencyInjection.Specification.Fakes;CreationCountFakeService;CreationCountFakeService;(Microsoft.Extensions.DependencyInjection.Specification.Fakes.IFakeService);generated",
+ "Microsoft.Extensions.DependencyInjection.Specification.Fakes;CreationCountFakeService;get_InstanceCount;();generated",
+ "Microsoft.Extensions.DependencyInjection.Specification.Fakes;CreationCountFakeService;get_InstanceId;();generated",
+ "Microsoft.Extensions.DependencyInjection.Specification.Fakes;CreationCountFakeService;set_InstanceCount;(System.Int32);generated",
+ "Microsoft.Extensions.DependencyInjection.Specification.Fakes;FakeDisposableCallbackInnerService;FakeDisposableCallbackInnerService;(Microsoft.Extensions.DependencyInjection.Specification.Fakes.FakeDisposeCallback);generated",
+ "Microsoft.Extensions.DependencyInjection.Specification.Fakes;FakeDisposableCallbackOuterService;FakeDisposableCallbackOuterService;(Microsoft.Extensions.DependencyInjection.Specification.Fakes.IFakeService,System.Collections.Generic.IEnumerable,Microsoft.Extensions.DependencyInjection.Specification.Fakes.FakeDisposeCallback);generated",
+ "Microsoft.Extensions.DependencyInjection.Specification.Fakes;FakeDisposableCallbackOuterService;get_MultipleServices;();generated",
+ "Microsoft.Extensions.DependencyInjection.Specification.Fakes;FakeDisposableCallbackOuterService;get_SingleService;();generated",
+ "Microsoft.Extensions.DependencyInjection.Specification.Fakes;FakeDisposableCallbackService;Dispose;();generated",
+ "Microsoft.Extensions.DependencyInjection.Specification.Fakes;FakeDisposableCallbackService;ToString;();generated",
+ "Microsoft.Extensions.DependencyInjection.Specification.Fakes;FakeDisposeCallback;get_Disposed;();generated",
+ "Microsoft.Extensions.DependencyInjection.Specification.Fakes;FakeOpenGenericService<>;FakeOpenGenericService;(TVal);generated",
+ "Microsoft.Extensions.DependencyInjection.Specification.Fakes;FakeOpenGenericService<>;get_Value;();generated",
+ "Microsoft.Extensions.DependencyInjection.Specification.Fakes;FakeOuterService;FakeOuterService;(Microsoft.Extensions.DependencyInjection.Specification.Fakes.IFakeService,System.Collections.Generic.IEnumerable);generated",
+ "Microsoft.Extensions.DependencyInjection.Specification.Fakes;FakeOuterService;get_MultipleServices;();generated",
+ "Microsoft.Extensions.DependencyInjection.Specification.Fakes;FakeOuterService;get_SingleService;();generated",
+ "Microsoft.Extensions.DependencyInjection.Specification.Fakes;FakeService;Dispose;();generated",
+ "Microsoft.Extensions.DependencyInjection.Specification.Fakes;FakeService;get_Disposed;();generated",
+ "Microsoft.Extensions.DependencyInjection.Specification.Fakes;FakeService;get_Value;();generated",
+ "Microsoft.Extensions.DependencyInjection.Specification.Fakes;FakeService;set_Disposed;(System.Boolean);generated",
+ "Microsoft.Extensions.DependencyInjection.Specification.Fakes;FakeService;set_Value;(Microsoft.Extensions.DependencyInjection.Specification.Fakes.PocoClass);generated",
+ "Microsoft.Extensions.DependencyInjection.Specification.Fakes;IFactoryService;get_FakeService;();generated",
+ "Microsoft.Extensions.DependencyInjection.Specification.Fakes;IFactoryService;get_Value;();generated",
+ "Microsoft.Extensions.DependencyInjection.Specification.Fakes;IFakeOpenGenericService<>;get_Value;();generated",
+ "Microsoft.Extensions.DependencyInjection.Specification.Fakes;IFakeOuterService;get_MultipleServices;();generated",
+ "Microsoft.Extensions.DependencyInjection.Specification.Fakes;IFakeOuterService;get_SingleService;();generated",
+ "Microsoft.Extensions.DependencyInjection.Specification.Fakes;ScopedFactoryService;get_FakeService;();generated",
+ "Microsoft.Extensions.DependencyInjection.Specification.Fakes;ScopedFactoryService;set_FakeService;(Microsoft.Extensions.DependencyInjection.Specification.Fakes.IFakeService);generated",
+ "Microsoft.Extensions.DependencyInjection.Specification.Fakes;ServiceAcceptingFactoryService;ServiceAcceptingFactoryService;(Microsoft.Extensions.DependencyInjection.Specification.Fakes.ScopedFactoryService,Microsoft.Extensions.DependencyInjection.Specification.Fakes.IFactoryService);generated",
+ "Microsoft.Extensions.DependencyInjection.Specification.Fakes;ServiceAcceptingFactoryService;get_ScopedService;();generated",
+ "Microsoft.Extensions.DependencyInjection.Specification.Fakes;ServiceAcceptingFactoryService;get_TransientService;();generated",
+ "Microsoft.Extensions.DependencyInjection.Specification.Fakes;ServiceAcceptingFactoryService;set_ScopedService;(Microsoft.Extensions.DependencyInjection.Specification.Fakes.ScopedFactoryService);generated",
+ "Microsoft.Extensions.DependencyInjection.Specification.Fakes;ServiceAcceptingFactoryService;set_TransientService;(Microsoft.Extensions.DependencyInjection.Specification.Fakes.IFactoryService);generated",
+ "Microsoft.Extensions.DependencyInjection.Specification.Fakes;TransientFactoryService;get_FakeService;();generated",
+ "Microsoft.Extensions.DependencyInjection.Specification.Fakes;TransientFactoryService;get_Value;();generated",
+ "Microsoft.Extensions.DependencyInjection.Specification.Fakes;TransientFactoryService;set_FakeService;(Microsoft.Extensions.DependencyInjection.Specification.Fakes.IFakeService);generated",
+ "Microsoft.Extensions.DependencyInjection.Specification.Fakes;TransientFactoryService;set_Value;(System.Int32);generated",
+ "Microsoft.Extensions.DependencyInjection.Specification.Fakes;TypeWithSupersetConstructors;TypeWithSupersetConstructors;(Microsoft.Extensions.DependencyInjection.Specification.Fakes.IFactoryService);generated",
+ "Microsoft.Extensions.DependencyInjection.Specification.Fakes;TypeWithSupersetConstructors;TypeWithSupersetConstructors;(Microsoft.Extensions.DependencyInjection.Specification.Fakes.IFakeMultipleService,Microsoft.Extensions.DependencyInjection.Specification.Fakes.IFactoryService,Microsoft.Extensions.DependencyInjection.Specification.Fakes.IFakeService,Microsoft.Extensions.DependencyInjection.Specification.Fakes.IFakeScopedService);generated",
+ "Microsoft.Extensions.DependencyInjection.Specification.Fakes;TypeWithSupersetConstructors;TypeWithSupersetConstructors;(Microsoft.Extensions.DependencyInjection.Specification.Fakes.IFakeService);generated",
+ "Microsoft.Extensions.DependencyInjection.Specification.Fakes;TypeWithSupersetConstructors;TypeWithSupersetConstructors;(Microsoft.Extensions.DependencyInjection.Specification.Fakes.IFakeService,Microsoft.Extensions.DependencyInjection.Specification.Fakes.IFactoryService);generated",
+ "Microsoft.Extensions.DependencyInjection.Specification.Fakes;TypeWithSupersetConstructors;TypeWithSupersetConstructors;(Microsoft.Extensions.DependencyInjection.Specification.Fakes.IFakeService,Microsoft.Extensions.DependencyInjection.Specification.Fakes.IFakeMultipleService,Microsoft.Extensions.DependencyInjection.Specification.Fakes.IFactoryService);generated",
+ "Microsoft.Extensions.DependencyInjection.Specification.Fakes;TypeWithSupersetConstructors;get_FactoryService;();generated",
+ "Microsoft.Extensions.DependencyInjection.Specification.Fakes;TypeWithSupersetConstructors;get_MultipleService;();generated",
+ "Microsoft.Extensions.DependencyInjection.Specification.Fakes;TypeWithSupersetConstructors;get_ScopedService;();generated",
+ "Microsoft.Extensions.DependencyInjection.Specification.Fakes;TypeWithSupersetConstructors;get_Service;();generated",
+ "Microsoft.Extensions.DependencyInjection.Specification;ClassWithOptionalArgsCtor;ClassWithOptionalArgsCtor;(System.String);generated",
+ "Microsoft.Extensions.DependencyInjection.Specification;ClassWithOptionalArgsCtor;get_Whatever;();generated",
+ "Microsoft.Extensions.DependencyInjection.Specification;ClassWithOptionalArgsCtor;set_Whatever;(System.String);generated",
+ "Microsoft.Extensions.DependencyInjection.Specification;ClassWithOptionalArgsCtorWithStructs;ClassWithOptionalArgsCtorWithStructs;(System.DateTime,System.DateTime,System.TimeSpan,System.TimeSpan,System.DateTimeOffset,System.DateTimeOffset,System.Guid,System.Guid,Microsoft.Extensions.DependencyInjection.Specification.ClassWithOptionalArgsCtorWithStructs+CustomStruct,Microsoft.Extensions.DependencyInjection.Specification.ClassWithOptionalArgsCtorWithStructs+CustomStruct,System.Nullable,System.Nullable,System.Nullable,System.Nullable);generated",
+ "Microsoft.Extensions.DependencyInjection.Specification;ClassWithOptionalArgsCtorWithStructs;get_Color;();generated",
+ "Microsoft.Extensions.DependencyInjection.Specification;ClassWithOptionalArgsCtorWithStructs;get_ColorNull;();generated",
+ "Microsoft.Extensions.DependencyInjection.Specification;ClassWithOptionalArgsCtorWithStructs;get_Integer;();generated",
+ "Microsoft.Extensions.DependencyInjection.Specification;ClassWithOptionalArgsCtorWithStructs;get_IntegerNull;();generated",
+ "Microsoft.Extensions.DependencyInjection.Specification;DependencyInjectionSpecificationTests;AbstractClassConstrainedOpenGenericServicesCanBeResolved;();generated",
+ "Microsoft.Extensions.DependencyInjection.Specification;DependencyInjectionSpecificationTests;AttemptingToResolveNonexistentServiceReturnsNull;();generated",
+ "Microsoft.Extensions.DependencyInjection.Specification;DependencyInjectionSpecificationTests;BuiltInServicesWithIsServiceReturnsTrue;();generated",
+ "Microsoft.Extensions.DependencyInjection.Specification;DependencyInjectionSpecificationTests;ClosedGenericsWithIsService;();generated",
+ "Microsoft.Extensions.DependencyInjection.Specification;DependencyInjectionSpecificationTests;ClosedServicesPreferredOverOpenGenericServices;();generated",
+ "Microsoft.Extensions.DependencyInjection.Specification;DependencyInjectionSpecificationTests;ConstrainedOpenGenericServicesCanBeResolved;();generated",
+ "Microsoft.Extensions.DependencyInjection.Specification;DependencyInjectionSpecificationTests;ConstrainedOpenGenericServicesReturnsEmptyWithNoMatches;();generated",
+ "Microsoft.Extensions.DependencyInjection.Specification;DependencyInjectionSpecificationTests;CreateInstance_CapturesInnerException_OfTargetInvocationException;();generated",
+ "Microsoft.Extensions.DependencyInjection.Specification;DependencyInjectionSpecificationTests;CreateInstance_WithAbstractTypeAndPublicConstructor_ThrowsCorrectException;();generated",
+ "Microsoft.Extensions.DependencyInjection.Specification;DependencyInjectionSpecificationTests;CreateServiceProvider;(Microsoft.Extensions.DependencyInjection.IServiceCollection);generated",
+ "Microsoft.Extensions.DependencyInjection.Specification;DependencyInjectionSpecificationTests;DisposesInReverseOrderOfCreation;();generated",
+ "Microsoft.Extensions.DependencyInjection.Specification;DependencyInjectionSpecificationTests;DisposingScopeDisposesService;();generated",
+ "Microsoft.Extensions.DependencyInjection.Specification;DependencyInjectionSpecificationTests;ExplictServiceRegisterationWithIsService;();generated",
+ "Microsoft.Extensions.DependencyInjection.Specification;DependencyInjectionSpecificationTests;FactoryServicesAreCreatedAsPartOfCreatingObjectGraph;();generated",
+ "Microsoft.Extensions.DependencyInjection.Specification;DependencyInjectionSpecificationTests;FactoryServicesCanBeCreatedByGetService;();generated",
+ "Microsoft.Extensions.DependencyInjection.Specification;DependencyInjectionSpecificationTests;GetServiceOrCreateInstanceRegisteredServiceSingleton;();generated",
+ "Microsoft.Extensions.DependencyInjection.Specification;DependencyInjectionSpecificationTests;GetServiceOrCreateInstanceRegisteredServiceTransient;();generated",
+ "Microsoft.Extensions.DependencyInjection.Specification;DependencyInjectionSpecificationTests;GetServiceOrCreateInstanceUnregisteredService;();generated",
+ "Microsoft.Extensions.DependencyInjection.Specification;DependencyInjectionSpecificationTests;IEnumerableWithIsServiceAlwaysReturnsTrue;();generated",
+ "Microsoft.Extensions.DependencyInjection.Specification;DependencyInjectionSpecificationTests;InterfaceConstrainedOpenGenericServicesCanBeResolved;();generated",
+ "Microsoft.Extensions.DependencyInjection.Specification;DependencyInjectionSpecificationTests;LastServiceReplacesPreviousServices;();generated",
+ "Microsoft.Extensions.DependencyInjection.Specification;DependencyInjectionSpecificationTests;MultipleServiceCanBeIEnumerableResolved;();generated",
+ "Microsoft.Extensions.DependencyInjection.Specification;DependencyInjectionSpecificationTests;NestedScopedServiceCanBeResolved;();generated",
+ "Microsoft.Extensions.DependencyInjection.Specification;DependencyInjectionSpecificationTests;NestedScopedServiceCanBeResolvedWithNoFallbackProvider;();generated",
+ "Microsoft.Extensions.DependencyInjection.Specification;DependencyInjectionSpecificationTests;NonexistentServiceCanBeIEnumerableResolved;();generated",
+ "Microsoft.Extensions.DependencyInjection.Specification;DependencyInjectionSpecificationTests;OpenGenericServicesCanBeResolved;();generated",
+ "Microsoft.Extensions.DependencyInjection.Specification;DependencyInjectionSpecificationTests;OpenGenericsWithIsService;();generated",
+ "Microsoft.Extensions.DependencyInjection.Specification;DependencyInjectionSpecificationTests;OuterServiceCanHaveOtherServicesInjected;();generated",
+ "Microsoft.Extensions.DependencyInjection.Specification;DependencyInjectionSpecificationTests;RegistrationOrderIsPreservedWhenServicesAreIEnumerableResolved;();generated",
+ "Microsoft.Extensions.DependencyInjection.Specification;DependencyInjectionSpecificationTests;ResolvesDifferentInstancesForServiceWhenResolvingEnumerable;(System.Type,System.Type,System.Type,Microsoft.Extensions.DependencyInjection.ServiceLifetime);generated",
+ "Microsoft.Extensions.DependencyInjection.Specification;DependencyInjectionSpecificationTests;ResolvesMixedOpenClosedGenericsAsEnumerable;();generated",
+ "Microsoft.Extensions.DependencyInjection.Specification;DependencyInjectionSpecificationTests;SafelyDisposeNestedProviderReferences;();generated",
+ "Microsoft.Extensions.DependencyInjection.Specification;DependencyInjectionSpecificationTests;ScopedServiceCanBeResolved;();generated",
+ "Microsoft.Extensions.DependencyInjection.Specification;DependencyInjectionSpecificationTests;ScopedServices_FromCachedScopeFactory_CanBeResolvedAndDisposed;();generated",
+ "Microsoft.Extensions.DependencyInjection.Specification;DependencyInjectionSpecificationTests;SelfResolveThenDispose;();generated",
+ "Microsoft.Extensions.DependencyInjection.Specification;DependencyInjectionSpecificationTests;ServiceContainerPicksConstructorWithLongestMatches;(Microsoft.Extensions.DependencyInjection.IServiceCollection,Microsoft.Extensions.DependencyInjection.Specification.Fakes.TypeWithSupersetConstructors);generated",
+ "Microsoft.Extensions.DependencyInjection.Specification;DependencyInjectionSpecificationTests;ServiceInstanceCanBeResolved;();generated",
+ "Microsoft.Extensions.DependencyInjection.Specification;DependencyInjectionSpecificationTests;ServiceProviderIsDisposable;();generated",
+ "Microsoft.Extensions.DependencyInjection.Specification;DependencyInjectionSpecificationTests;ServiceProviderRegistersServiceScopeFactory;();generated",
+ "Microsoft.Extensions.DependencyInjection.Specification;DependencyInjectionSpecificationTests;ServicesRegisteredWithImplementationTypeCanBeResolved;();generated",
+ "Microsoft.Extensions.DependencyInjection.Specification;DependencyInjectionSpecificationTests;ServicesRegisteredWithImplementationType_ReturnDifferentInstancesPerResolution_ForTransientServices;();generated",
+ "Microsoft.Extensions.DependencyInjection.Specification;DependencyInjectionSpecificationTests;ServicesRegisteredWithImplementationType_ReturnSameInstancesPerResolution_ForSingletons;();generated",
+ "Microsoft.Extensions.DependencyInjection.Specification;DependencyInjectionSpecificationTests;SingleServiceCanBeIEnumerableResolved;();generated",
+ "Microsoft.Extensions.DependencyInjection.Specification;DependencyInjectionSpecificationTests;SingletonServiceCanBeResolved;();generated",
+ "Microsoft.Extensions.DependencyInjection.Specification;DependencyInjectionSpecificationTests;SingletonServiceCanBeResolvedFromScope;();generated",
+ "Microsoft.Extensions.DependencyInjection.Specification;DependencyInjectionSpecificationTests;SingletonServicesComeFromRootProvider;();generated",
+ "Microsoft.Extensions.DependencyInjection.Specification;DependencyInjectionSpecificationTests;TransientServiceCanBeResolvedFromProvider;();generated",
+ "Microsoft.Extensions.DependencyInjection.Specification;DependencyInjectionSpecificationTests;TransientServiceCanBeResolvedFromScope;();generated",
+ "Microsoft.Extensions.DependencyInjection.Specification;DependencyInjectionSpecificationTests;TypeActivatorCreateFactoryDoesNotAllowForAmbiguousConstructorMatches;(System.Type);generated",
+ "Microsoft.Extensions.DependencyInjection.Specification;DependencyInjectionSpecificationTests;TypeActivatorCreateInstanceUsesFirstMathchedConstructor;(System.Object,System.String);generated",
+ "Microsoft.Extensions.DependencyInjection.Specification;DependencyInjectionSpecificationTests;get_CreateInstanceFuncs;();generated",
+ "Microsoft.Extensions.DependencyInjection.Specification;DependencyInjectionSpecificationTests;get_ExpectStructWithPublicDefaultConstructorInvoked;();generated",
+ "Microsoft.Extensions.DependencyInjection.Specification;DependencyInjectionSpecificationTests;get_ServiceContainerPicksConstructorWithLongestMatchesData;();generated",
+ "Microsoft.Extensions.DependencyInjection.Specification;DependencyInjectionSpecificationTests;get_SupportsIServiceProviderIsService;();generated",
+ "Microsoft.Extensions.DependencyInjection.Specification;DependencyInjectionSpecificationTests;get_TypesWithNonPublicConstructorData;();generated",
+ "Microsoft.Extensions.DependencyInjection;ActivatorUtilities;CreateFactory;(System.Type,System.Type[]);generated",
+ "Microsoft.Extensions.DependencyInjection;ActivatorUtilities;CreateInstance;(System.IServiceProvider,System.Type,System.Object[]);generated",
+ "Microsoft.Extensions.DependencyInjection;ActivatorUtilities;CreateInstance<>;(System.IServiceProvider,System.Object[]);generated",
+ "Microsoft.Extensions.DependencyInjection;AsyncServiceScope;Dispose;();generated",
+ "Microsoft.Extensions.DependencyInjection;AsyncServiceScope;DisposeAsync;();generated",
+ "Microsoft.Extensions.DependencyInjection;DefaultServiceProviderFactory;CreateServiceProvider;(Microsoft.Extensions.DependencyInjection.IServiceCollection);generated",
+ "Microsoft.Extensions.DependencyInjection;DefaultServiceProviderFactory;DefaultServiceProviderFactory;();generated",
+ "Microsoft.Extensions.DependencyInjection;HttpClientFactoryServiceCollectionExtensions;AddHttpClient;(Microsoft.Extensions.DependencyInjection.IServiceCollection,System.String);generated",
+ "Microsoft.Extensions.DependencyInjection;HttpClientFactoryServiceCollectionExtensions;AddHttpClient<,>;(Microsoft.Extensions.DependencyInjection.IServiceCollection);generated",
+ "Microsoft.Extensions.DependencyInjection;HttpClientFactoryServiceCollectionExtensions;AddHttpClient<,>;(Microsoft.Extensions.DependencyInjection.IServiceCollection,System.String);generated",
+ "Microsoft.Extensions.DependencyInjection;HttpClientFactoryServiceCollectionExtensions;AddHttpClient<>;(Microsoft.Extensions.DependencyInjection.IServiceCollection);generated",
+ "Microsoft.Extensions.DependencyInjection;HttpClientFactoryServiceCollectionExtensions;AddHttpClient<>;(Microsoft.Extensions.DependencyInjection.IServiceCollection,System.String);generated",
+ "Microsoft.Extensions.DependencyInjection;IHttpClientBuilder;get_Name;();generated",
+ "Microsoft.Extensions.DependencyInjection;IHttpClientBuilder;get_Services;();generated",
+ "Microsoft.Extensions.DependencyInjection;IServiceProviderFactory<>;CreateBuilder;(Microsoft.Extensions.DependencyInjection.IServiceCollection);generated",
+ "Microsoft.Extensions.DependencyInjection;IServiceProviderFactory<>;CreateServiceProvider;(TContainerBuilder);generated",
+ "Microsoft.Extensions.DependencyInjection;IServiceProviderIsService;IsService;(System.Type);generated",
+ "Microsoft.Extensions.DependencyInjection;IServiceScope;get_ServiceProvider;();generated",
+ "Microsoft.Extensions.DependencyInjection;IServiceScopeFactory;CreateScope;();generated",
+ "Microsoft.Extensions.DependencyInjection;ISupportRequiredService;GetRequiredService;(System.Type);generated",
+ "Microsoft.Extensions.DependencyInjection;OptionsServiceCollectionExtensions;AddOptions<>;(Microsoft.Extensions.DependencyInjection.IServiceCollection);generated",
+ "Microsoft.Extensions.DependencyInjection;OptionsServiceCollectionExtensions;AddOptions<>;(Microsoft.Extensions.DependencyInjection.IServiceCollection,System.String);generated",
+ "Microsoft.Extensions.DependencyInjection;ServiceCollection;Clear;();generated",
+ "Microsoft.Extensions.DependencyInjection;ServiceCollection;Contains;(Microsoft.Extensions.DependencyInjection.ServiceDescriptor);generated",
+ "Microsoft.Extensions.DependencyInjection;ServiceCollection;IndexOf;(Microsoft.Extensions.DependencyInjection.ServiceDescriptor);generated",
+ "Microsoft.Extensions.DependencyInjection;ServiceCollection;Remove;(Microsoft.Extensions.DependencyInjection.ServiceDescriptor);generated",
+ "Microsoft.Extensions.DependencyInjection;ServiceCollection;RemoveAt;(System.Int32);generated",
+ "Microsoft.Extensions.DependencyInjection;ServiceCollection;get_Count;();generated",
+ "Microsoft.Extensions.DependencyInjection;ServiceCollection;get_IsReadOnly;();generated",
+ "Microsoft.Extensions.DependencyInjection;ServiceCollectionContainerBuilderExtensions;BuildServiceProvider;(Microsoft.Extensions.DependencyInjection.IServiceCollection);generated",
+ "Microsoft.Extensions.DependencyInjection;ServiceCollectionContainerBuilderExtensions;BuildServiceProvider;(Microsoft.Extensions.DependencyInjection.IServiceCollection,Microsoft.Extensions.DependencyInjection.ServiceProviderOptions);generated",
+ "Microsoft.Extensions.DependencyInjection;ServiceCollectionContainerBuilderExtensions;BuildServiceProvider;(Microsoft.Extensions.DependencyInjection.IServiceCollection,System.Boolean);generated",
+ "Microsoft.Extensions.DependencyInjection;ServiceDescriptor;Describe;(System.Type,System.Type,Microsoft.Extensions.DependencyInjection.ServiceLifetime);generated",
+ "Microsoft.Extensions.DependencyInjection;ServiceDescriptor;Scoped;(System.Type,System.Type);generated",
+ "Microsoft.Extensions.DependencyInjection;ServiceDescriptor;Scoped<,>;();generated",
+ "Microsoft.Extensions.DependencyInjection;ServiceDescriptor;ServiceDescriptor;(System.Type,System.Object);generated",
+ "Microsoft.Extensions.DependencyInjection;ServiceDescriptor;ServiceDescriptor;(System.Type,System.Type,Microsoft.Extensions.DependencyInjection.ServiceLifetime);generated",
+ "Microsoft.Extensions.DependencyInjection;ServiceDescriptor;Singleton;(System.Type,System.Object);generated",
+ "Microsoft.Extensions.DependencyInjection;ServiceDescriptor;Singleton;(System.Type,System.Type);generated",
+ "Microsoft.Extensions.DependencyInjection;ServiceDescriptor;Singleton<,>;();generated",
+ "Microsoft.Extensions.DependencyInjection;ServiceDescriptor;Singleton<>;(TService);generated",
+ "Microsoft.Extensions.DependencyInjection;ServiceDescriptor;ToString;();generated",
+ "Microsoft.Extensions.DependencyInjection;ServiceDescriptor;Transient;(System.Type,System.Type);generated",
+ "Microsoft.Extensions.DependencyInjection;ServiceDescriptor;Transient<,>;();generated",
+ "Microsoft.Extensions.DependencyInjection;ServiceDescriptor;get_ImplementationFactory;();generated",
+ "Microsoft.Extensions.DependencyInjection;ServiceDescriptor;get_ImplementationInstance;();generated",
+ "Microsoft.Extensions.DependencyInjection;ServiceDescriptor;get_ImplementationType;();generated",
+ "Microsoft.Extensions.DependencyInjection;ServiceDescriptor;get_Lifetime;();generated",
+ "Microsoft.Extensions.DependencyInjection;ServiceDescriptor;get_ServiceType;();generated",
+ "Microsoft.Extensions.DependencyInjection;ServiceProvider;Dispose;();generated",
+ "Microsoft.Extensions.DependencyInjection;ServiceProvider;DisposeAsync;();generated",
+ "Microsoft.Extensions.DependencyInjection;ServiceProvider;GetService;(System.Type);generated",
+ "Microsoft.Extensions.DependencyInjection;ServiceProviderOptions;get_ValidateOnBuild;();generated",
+ "Microsoft.Extensions.DependencyInjection;ServiceProviderOptions;get_ValidateScopes;();generated",
+ "Microsoft.Extensions.DependencyInjection;ServiceProviderOptions;set_ValidateOnBuild;(System.Boolean);generated",
+ "Microsoft.Extensions.DependencyInjection;ServiceProviderOptions;set_ValidateScopes;(System.Boolean);generated",
+ "Microsoft.Extensions.DependencyInjection;ServiceProviderServiceExtensions;CreateAsyncScope;(Microsoft.Extensions.DependencyInjection.IServiceScopeFactory);generated",
+ "Microsoft.Extensions.DependencyInjection;ServiceProviderServiceExtensions;CreateAsyncScope;(System.IServiceProvider);generated",
+ "Microsoft.Extensions.DependencyInjection;ServiceProviderServiceExtensions;CreateScope;(System.IServiceProvider);generated",
+ "Microsoft.Extensions.DependencyModel.Resolution;AppBaseCompilationAssemblyResolver;AppBaseCompilationAssemblyResolver;();generated",
+ "Microsoft.Extensions.DependencyModel.Resolution;AppBaseCompilationAssemblyResolver;AppBaseCompilationAssemblyResolver;(System.String);generated",
+ "Microsoft.Extensions.DependencyModel.Resolution;DotNetReferenceAssembliesPathResolver;Resolve;();generated",
+ "Microsoft.Extensions.DependencyModel.Resolution;ICompilationAssemblyResolver;TryResolveAssemblyPaths;(Microsoft.Extensions.DependencyModel.CompilationLibrary,System.Collections.Generic.List);generated",
+ "Microsoft.Extensions.DependencyModel.Resolution;PackageCompilationAssemblyResolver;PackageCompilationAssemblyResolver;();generated",
+ "Microsoft.Extensions.DependencyModel.Resolution;PackageCompilationAssemblyResolver;PackageCompilationAssemblyResolver;(System.String);generated",
+ "Microsoft.Extensions.DependencyModel.Resolution;ReferenceAssemblyPathResolver;ReferenceAssemblyPathResolver;();generated",
+ "Microsoft.Extensions.DependencyModel.Resolution;ReferenceAssemblyPathResolver;ReferenceAssemblyPathResolver;(System.String,System.String[]);generated",
+ "Microsoft.Extensions.DependencyModel;CompilationLibrary;CompilationLibrary;(System.String,System.String,System.String,System.String,System.Collections.Generic.IEnumerable,System.Collections.Generic.IEnumerable,System.Boolean);generated",
+ "Microsoft.Extensions.DependencyModel;CompilationLibrary;CompilationLibrary;(System.String,System.String,System.String,System.String,System.Collections.Generic.IEnumerable,System.Collections.Generic.IEnumerable,System.Boolean,System.String,System.String);generated",
+ "Microsoft.Extensions.DependencyModel;CompilationLibrary;ResolveReferencePaths;();generated",
+ "Microsoft.Extensions.DependencyModel;CompilationLibrary;get_Assemblies;();generated",
+ "Microsoft.Extensions.DependencyModel;CompilationOptions;CompilationOptions;(System.Collections.Generic.IEnumerable,System.String,System.String,System.Nullable,System.Nullable,System.Nullable,System.String,System.Nullable,System.Nullable,System.String,System.Nullable,System.Nullable);generated",
+ "Microsoft.Extensions.DependencyModel;CompilationOptions;get_AllowUnsafe;();generated",
+ "Microsoft.Extensions.DependencyModel;CompilationOptions;get_DebugType;();generated",
+ "Microsoft.Extensions.DependencyModel;CompilationOptions;get_Default;();generated",
+ "Microsoft.Extensions.DependencyModel;CompilationOptions;get_Defines;();generated",
+ "Microsoft.Extensions.DependencyModel;CompilationOptions;get_DelaySign;();generated",
+ "Microsoft.Extensions.DependencyModel;CompilationOptions;get_EmitEntryPoint;();generated",
+ "Microsoft.Extensions.DependencyModel;CompilationOptions;get_GenerateXmlDocumentation;();generated",
+ "Microsoft.Extensions.DependencyModel;CompilationOptions;get_KeyFile;();generated",
+ "Microsoft.Extensions.DependencyModel;CompilationOptions;get_LanguageVersion;();generated",
+ "Microsoft.Extensions.DependencyModel;CompilationOptions;get_Optimize;();generated",
+ "Microsoft.Extensions.DependencyModel;CompilationOptions;get_Platform;();generated",
+ "Microsoft.Extensions.DependencyModel;CompilationOptions;get_PublicSign;();generated",
+ "Microsoft.Extensions.DependencyModel;CompilationOptions;get_WarningsAsErrors;();generated",
+ "Microsoft.Extensions.DependencyModel;Dependency;Dependency;(System.String,System.String);generated",
+ "Microsoft.Extensions.DependencyModel;Dependency;Equals;(Microsoft.Extensions.DependencyModel.Dependency);generated",
+ "Microsoft.Extensions.DependencyModel;Dependency;Equals;(System.Object);generated",
+ "Microsoft.Extensions.DependencyModel;Dependency;GetHashCode;();generated",
+ "Microsoft.Extensions.DependencyModel;Dependency;get_Name;();generated",
+ "Microsoft.Extensions.DependencyModel;Dependency;get_Version;();generated",
+ "Microsoft.Extensions.DependencyModel;DependencyContext;DependencyContext;(Microsoft.Extensions.DependencyModel.TargetInfo,Microsoft.Extensions.DependencyModel.CompilationOptions,System.Collections.Generic.IEnumerable,System.Collections.Generic.IEnumerable,System.Collections.Generic.IEnumerable);generated",
+ "Microsoft.Extensions.DependencyModel;DependencyContext;Load;(System.Reflection.Assembly);generated",
+ "Microsoft.Extensions.DependencyModel;DependencyContext;Merge;(Microsoft.Extensions.DependencyModel.DependencyContext);generated",
+ "Microsoft.Extensions.DependencyModel;DependencyContext;get_CompilationOptions;();generated",
+ "Microsoft.Extensions.DependencyModel;DependencyContext;get_CompileLibraries;();generated",
+ "Microsoft.Extensions.DependencyModel;DependencyContext;get_Default;();generated",
+ "Microsoft.Extensions.DependencyModel;DependencyContext;get_RuntimeGraph;();generated",
+ "Microsoft.Extensions.DependencyModel;DependencyContext;get_RuntimeLibraries;();generated",
+ "Microsoft.Extensions.DependencyModel;DependencyContext;get_Target;();generated",
+ "Microsoft.Extensions.DependencyModel;DependencyContextExtensions;GetDefaultAssemblyNames;(Microsoft.Extensions.DependencyModel.DependencyContext);generated",
+ "Microsoft.Extensions.DependencyModel;DependencyContextExtensions;GetDefaultAssemblyNames;(Microsoft.Extensions.DependencyModel.RuntimeLibrary,Microsoft.Extensions.DependencyModel.DependencyContext);generated",
+ "Microsoft.Extensions.DependencyModel;DependencyContextExtensions;GetDefaultNativeAssets;(Microsoft.Extensions.DependencyModel.DependencyContext);generated",
+ "Microsoft.Extensions.DependencyModel;DependencyContextExtensions;GetDefaultNativeAssets;(Microsoft.Extensions.DependencyModel.RuntimeLibrary,Microsoft.Extensions.DependencyModel.DependencyContext);generated",
+ "Microsoft.Extensions.DependencyModel;DependencyContextExtensions;GetDefaultNativeRuntimeFileAssets;(Microsoft.Extensions.DependencyModel.DependencyContext);generated",
+ "Microsoft.Extensions.DependencyModel;DependencyContextExtensions;GetDefaultNativeRuntimeFileAssets;(Microsoft.Extensions.DependencyModel.RuntimeLibrary,Microsoft.Extensions.DependencyModel.DependencyContext);generated",
+ "Microsoft.Extensions.DependencyModel;DependencyContextExtensions;GetRuntimeAssemblyNames;(Microsoft.Extensions.DependencyModel.DependencyContext,System.String);generated",
+ "Microsoft.Extensions.DependencyModel;DependencyContextExtensions;GetRuntimeAssemblyNames;(Microsoft.Extensions.DependencyModel.RuntimeLibrary,Microsoft.Extensions.DependencyModel.DependencyContext,System.String);generated",
+ "Microsoft.Extensions.DependencyModel;DependencyContextExtensions;GetRuntimeNativeAssets;(Microsoft.Extensions.DependencyModel.DependencyContext,System.String);generated",
+ "Microsoft.Extensions.DependencyModel;DependencyContextExtensions;GetRuntimeNativeAssets;(Microsoft.Extensions.DependencyModel.RuntimeLibrary,Microsoft.Extensions.DependencyModel.DependencyContext,System.String);generated",
+ "Microsoft.Extensions.DependencyModel;DependencyContextExtensions;GetRuntimeNativeRuntimeFileAssets;(Microsoft.Extensions.DependencyModel.DependencyContext,System.String);generated",
+ "Microsoft.Extensions.DependencyModel;DependencyContextExtensions;GetRuntimeNativeRuntimeFileAssets;(Microsoft.Extensions.DependencyModel.RuntimeLibrary,Microsoft.Extensions.DependencyModel.DependencyContext,System.String);generated",
+ "Microsoft.Extensions.DependencyModel;DependencyContextJsonReader;Dispose;();generated",
+ "Microsoft.Extensions.DependencyModel;DependencyContextJsonReader;Dispose;(System.Boolean);generated",
+ "Microsoft.Extensions.DependencyModel;DependencyContextJsonReader;Read;(System.IO.Stream);generated",
+ "Microsoft.Extensions.DependencyModel;DependencyContextLoader;DependencyContextLoader;();generated",
+ "Microsoft.Extensions.DependencyModel;DependencyContextLoader;Load;(System.Reflection.Assembly);generated",
+ "Microsoft.Extensions.DependencyModel;DependencyContextLoader;get_Default;();generated",
+ "Microsoft.Extensions.DependencyModel;DependencyContextWriter;Write;(Microsoft.Extensions.DependencyModel.DependencyContext,System.IO.Stream);generated",
+ "Microsoft.Extensions.DependencyModel;IDependencyContextReader;Read;(System.IO.Stream);generated",
+ "Microsoft.Extensions.DependencyModel;Library;Library;(System.String,System.String,System.String,System.String,System.Collections.Generic.IEnumerable,System.Boolean);generated",
+ "Microsoft.Extensions.DependencyModel;Library;Library;(System.String,System.String,System.String,System.String,System.Collections.Generic.IEnumerable,System.Boolean,System.String,System.String);generated",
+ "Microsoft.Extensions.DependencyModel;Library;Library;(System.String,System.String,System.String,System.String,System.Collections.Generic.IEnumerable,System.Boolean,System.String,System.String,System.String);generated",
+ "Microsoft.Extensions.DependencyModel;Library;get_Dependencies;();generated",
+ "Microsoft.Extensions.DependencyModel;Library;get_Hash;();generated",
+ "Microsoft.Extensions.DependencyModel;Library;get_HashPath;();generated",
+ "Microsoft.Extensions.DependencyModel;Library;get_Name;();generated",
+ "Microsoft.Extensions.DependencyModel;Library;get_Path;();generated",
+ "Microsoft.Extensions.DependencyModel;Library;get_RuntimeStoreManifestName;();generated",
+ "Microsoft.Extensions.DependencyModel;Library;get_Serviceable;();generated",
+ "Microsoft.Extensions.DependencyModel;Library;get_Type;();generated",
+ "Microsoft.Extensions.DependencyModel;Library;get_Version;();generated",
+ "Microsoft.Extensions.DependencyModel;ResourceAssembly;ResourceAssembly;(System.String,System.String);generated",
+ "Microsoft.Extensions.DependencyModel;ResourceAssembly;get_Locale;();generated",
+ "Microsoft.Extensions.DependencyModel;ResourceAssembly;get_Path;();generated",
+ "Microsoft.Extensions.DependencyModel;ResourceAssembly;set_Locale;(System.String);generated",
+ "Microsoft.Extensions.DependencyModel;ResourceAssembly;set_Path;(System.String);generated",
+ "Microsoft.Extensions.DependencyModel;RuntimeAssembly;get_Name;();generated",
+ "Microsoft.Extensions.DependencyModel;RuntimeAssembly;get_Path;();generated",
+ "Microsoft.Extensions.DependencyModel;RuntimeAssetGroup;RuntimeAssetGroup;(System.String,System.String[]);generated",
+ "Microsoft.Extensions.DependencyModel;RuntimeAssetGroup;get_Runtime;();generated",
+ "Microsoft.Extensions.DependencyModel;RuntimeFallbacks;RuntimeFallbacks;(System.String,System.Collections.Generic.IEnumerable);generated",
+ "Microsoft.Extensions.DependencyModel;RuntimeFallbacks;RuntimeFallbacks;(System.String,System.String[]);generated",
+ "Microsoft.Extensions.DependencyModel;RuntimeFallbacks;get_Fallbacks;();generated",
+ "Microsoft.Extensions.DependencyModel;RuntimeFallbacks;get_Runtime;();generated",
+ "Microsoft.Extensions.DependencyModel;RuntimeFallbacks;set_Fallbacks;(System.Collections.Generic.IReadOnlyList);generated",
+ "Microsoft.Extensions.DependencyModel;RuntimeFallbacks;set_Runtime;(System.String);generated",
+ "Microsoft.Extensions.DependencyModel;RuntimeFile;RuntimeFile;(System.String,System.String,System.String);generated",
+ "Microsoft.Extensions.DependencyModel;RuntimeFile;get_AssemblyVersion;();generated",
+ "Microsoft.Extensions.DependencyModel;RuntimeFile;get_FileVersion;();generated",
+ "Microsoft.Extensions.DependencyModel;RuntimeFile;get_Path;();generated",
+ "Microsoft.Extensions.DependencyModel;RuntimeLibrary;RuntimeLibrary;(System.String,System.String,System.String,System.String,System.Collections.Generic.IReadOnlyList,System.Collections.Generic.IReadOnlyList,System.Collections.Generic.IEnumerable,System.Collections.Generic.IEnumerable,System.Boolean);generated",
+ "Microsoft.Extensions.DependencyModel;RuntimeLibrary;RuntimeLibrary;(System.String,System.String,System.String,System.String,System.Collections.Generic.IReadOnlyList,System.Collections.Generic.IReadOnlyList,System.Collections.Generic.IEnumerable,System.Collections.Generic.IEnumerable,System.Boolean,System.String,System.String);generated",
+ "Microsoft.Extensions.DependencyModel;RuntimeLibrary;RuntimeLibrary;(System.String,System.String,System.String,System.String,System.Collections.Generic.IReadOnlyList,System.Collections.Generic.IReadOnlyList,System.Collections.Generic.IEnumerable,System.Collections.Generic.IEnumerable,System.Boolean,System.String,System.String,System.String);generated",
+ "Microsoft.Extensions.DependencyModel;RuntimeLibrary;get_NativeLibraryGroups;();generated",
+ "Microsoft.Extensions.DependencyModel;RuntimeLibrary;get_ResourceAssemblies;();generated",
+ "Microsoft.Extensions.DependencyModel;RuntimeLibrary;get_RuntimeAssemblyGroups;();generated",
+ "Microsoft.Extensions.DependencyModel;TargetInfo;TargetInfo;(System.String,System.String,System.String,System.Boolean);generated",
+ "Microsoft.Extensions.DependencyModel;TargetInfo;get_Framework;();generated",
+ "Microsoft.Extensions.DependencyModel;TargetInfo;get_IsPortable;();generated",
+ "Microsoft.Extensions.DependencyModel;TargetInfo;get_Runtime;();generated",
+ "Microsoft.Extensions.DependencyModel;TargetInfo;get_RuntimeSignature;();generated",
+ "Microsoft.Extensions.FileProviders.Composite;CompositeDirectoryContents;get_Exists;();generated",
+ "Microsoft.Extensions.FileProviders.Internal;PhysicalDirectoryContents;PhysicalDirectoryContents;(System.String);generated",
+ "Microsoft.Extensions.FileProviders.Internal;PhysicalDirectoryContents;get_Exists;();generated",
+ "Microsoft.Extensions.FileProviders.Physical;PhysicalDirectoryInfo;CreateReadStream;();generated",
+ "Microsoft.Extensions.FileProviders.Physical;PhysicalDirectoryInfo;get_Exists;();generated",
+ "Microsoft.Extensions.FileProviders.Physical;PhysicalDirectoryInfo;get_IsDirectory;();generated",
+ "Microsoft.Extensions.FileProviders.Physical;PhysicalDirectoryInfo;get_LastModified;();generated",
+ "Microsoft.Extensions.FileProviders.Physical;PhysicalDirectoryInfo;get_Length;();generated",
+ "Microsoft.Extensions.FileProviders.Physical;PhysicalDirectoryInfo;get_Name;();generated",
+ "Microsoft.Extensions.FileProviders.Physical;PhysicalDirectoryInfo;get_PhysicalPath;();generated",
+ "Microsoft.Extensions.FileProviders.Physical;PhysicalFileInfo;get_Exists;();generated",
+ "Microsoft.Extensions.FileProviders.Physical;PhysicalFileInfo;get_IsDirectory;();generated",
+ "Microsoft.Extensions.FileProviders.Physical;PhysicalFileInfo;get_LastModified;();generated",
+ "Microsoft.Extensions.FileProviders.Physical;PhysicalFileInfo;get_Length;();generated",
+ "Microsoft.Extensions.FileProviders.Physical;PhysicalFileInfo;get_Name;();generated",
+ "Microsoft.Extensions.FileProviders.Physical;PhysicalFilesWatcher;CreateFileChangeToken;(System.String);generated",
+ "Microsoft.Extensions.FileProviders.Physical;PhysicalFilesWatcher;Dispose;();generated",
+ "Microsoft.Extensions.FileProviders.Physical;PhysicalFilesWatcher;Dispose;(System.Boolean);generated",
+ "Microsoft.Extensions.FileProviders.Physical;PhysicalFilesWatcher;PhysicalFilesWatcher;(System.String,System.IO.FileSystemWatcher,System.Boolean);generated",
+ "Microsoft.Extensions.FileProviders.Physical;PollingFileChangeToken;get_ActiveChangeCallbacks;();generated",
+ "Microsoft.Extensions.FileProviders.Physical;PollingFileChangeToken;get_HasChanged;();generated",
+ "Microsoft.Extensions.FileProviders.Physical;PollingFileChangeToken;set_ActiveChangeCallbacks;(System.Boolean);generated",
+ "Microsoft.Extensions.FileProviders.Physical;PollingWildCardChangeToken;GetLastWriteUtc;(System.String);generated",
+ "Microsoft.Extensions.FileProviders.Physical;PollingWildCardChangeToken;PollingWildCardChangeToken;(System.String,System.String);generated",
+ "Microsoft.Extensions.FileProviders.Physical;PollingWildCardChangeToken;get_ActiveChangeCallbacks;();generated",
+ "Microsoft.Extensions.FileProviders.Physical;PollingWildCardChangeToken;get_HasChanged;();generated",
+ "Microsoft.Extensions.FileProviders.Physical;PollingWildCardChangeToken;set_ActiveChangeCallbacks;(System.Boolean);generated",
+ "Microsoft.Extensions.FileProviders;CompositeFileProvider;GetFileInfo;(System.String);generated",
+ "Microsoft.Extensions.FileProviders;CompositeFileProvider;Watch;(System.String);generated",
+ "Microsoft.Extensions.FileProviders;IDirectoryContents;get_Exists;();generated",
+ "Microsoft.Extensions.FileProviders;IFileInfo;CreateReadStream;();generated",
+ "Microsoft.Extensions.FileProviders;IFileInfo;get_Exists;();generated",
+ "Microsoft.Extensions.FileProviders;IFileInfo;get_IsDirectory;();generated",
+ "Microsoft.Extensions.FileProviders;IFileInfo;get_LastModified;();generated",
+ "Microsoft.Extensions.FileProviders;IFileInfo;get_Length;();generated",
+ "Microsoft.Extensions.FileProviders;IFileInfo;get_Name;();generated",
+ "Microsoft.Extensions.FileProviders;IFileInfo;get_PhysicalPath;();generated",
+ "Microsoft.Extensions.FileProviders;IFileProvider;GetDirectoryContents;(System.String);generated",
+ "Microsoft.Extensions.FileProviders;IFileProvider;GetFileInfo;(System.String);generated",
+ "Microsoft.Extensions.FileProviders;IFileProvider;Watch;(System.String);generated",
+ "Microsoft.Extensions.FileProviders;NotFoundDirectoryContents;get_Exists;();generated",
+ "Microsoft.Extensions.FileProviders;NotFoundDirectoryContents;get_Singleton;();generated",
+ "Microsoft.Extensions.FileProviders;NotFoundFileInfo;CreateReadStream;();generated",
+ "Microsoft.Extensions.FileProviders;NotFoundFileInfo;NotFoundFileInfo;(System.String);generated",
+ "Microsoft.Extensions.FileProviders;NotFoundFileInfo;get_Exists;();generated",
+ "Microsoft.Extensions.FileProviders;NotFoundFileInfo;get_IsDirectory;();generated",
+ "Microsoft.Extensions.FileProviders;NotFoundFileInfo;get_LastModified;();generated",
+ "Microsoft.Extensions.FileProviders;NotFoundFileInfo;get_Length;();generated",
+ "Microsoft.Extensions.FileProviders;NotFoundFileInfo;get_Name;();generated",
+ "Microsoft.Extensions.FileProviders;NotFoundFileInfo;get_PhysicalPath;();generated",
+ "Microsoft.Extensions.FileProviders;NullChangeToken;get_ActiveChangeCallbacks;();generated",
+ "Microsoft.Extensions.FileProviders;NullChangeToken;get_HasChanged;();generated",
+ "Microsoft.Extensions.FileProviders;NullChangeToken;get_Singleton;();generated",
+ "Microsoft.Extensions.FileProviders;NullFileProvider;GetDirectoryContents;(System.String);generated",
+ "Microsoft.Extensions.FileProviders;NullFileProvider;GetFileInfo;(System.String);generated",
+ "Microsoft.Extensions.FileProviders;NullFileProvider;Watch;(System.String);generated",
+ "Microsoft.Extensions.FileProviders;PhysicalFileProvider;Dispose;();generated",
+ "Microsoft.Extensions.FileProviders;PhysicalFileProvider;Dispose;(System.Boolean);generated",
+ "Microsoft.Extensions.FileProviders;PhysicalFileProvider;GetFileInfo;(System.String);generated",
+ "Microsoft.Extensions.FileProviders;PhysicalFileProvider;PhysicalFileProvider;(System.String);generated",
+ "Microsoft.Extensions.FileProviders;PhysicalFileProvider;PhysicalFileProvider;(System.String,Microsoft.Extensions.FileProviders.Physical.ExclusionFilters);generated",
+ "Microsoft.Extensions.FileProviders;PhysicalFileProvider;Watch;(System.String);generated",
+ "Microsoft.Extensions.FileProviders;PhysicalFileProvider;get_Root;();generated",
+ "Microsoft.Extensions.FileProviders;PhysicalFileProvider;get_UseActivePolling;();generated",
+ "Microsoft.Extensions.FileProviders;PhysicalFileProvider;get_UsePollingFileWatcher;();generated",
+ "Microsoft.Extensions.FileProviders;PhysicalFileProvider;set_UseActivePolling;(System.Boolean);generated",
+ "Microsoft.Extensions.FileProviders;PhysicalFileProvider;set_UsePollingFileWatcher;(System.Boolean);generated",
+ "Microsoft.Extensions.FileSystemGlobbing.Abstractions;DirectoryInfoBase;EnumerateFileSystemInfos;();generated",
+ "Microsoft.Extensions.FileSystemGlobbing.Abstractions;DirectoryInfoBase;GetDirectory;(System.String);generated",
+ "Microsoft.Extensions.FileSystemGlobbing.Abstractions;DirectoryInfoBase;GetFile;(System.String);generated",
+ "Microsoft.Extensions.FileSystemGlobbing.Abstractions;DirectoryInfoWrapper;DirectoryInfoWrapper;(System.IO.DirectoryInfo);generated",
+ "Microsoft.Extensions.FileSystemGlobbing.Abstractions;DirectoryInfoWrapper;EnumerateFileSystemInfos;();generated",
+ "Microsoft.Extensions.FileSystemGlobbing.Abstractions;DirectoryInfoWrapper;GetFile;(System.String);generated",
+ "Microsoft.Extensions.FileSystemGlobbing.Abstractions;DirectoryInfoWrapper;get_FullName;();generated",
+ "Microsoft.Extensions.FileSystemGlobbing.Abstractions;DirectoryInfoWrapper;get_Name;();generated",
+ "Microsoft.Extensions.FileSystemGlobbing.Abstractions;DirectoryInfoWrapper;get_ParentDirectory;();generated",
+ "Microsoft.Extensions.FileSystemGlobbing.Abstractions;FileInfoWrapper;get_Name;();generated",
+ "Microsoft.Extensions.FileSystemGlobbing.Abstractions;FileInfoWrapper;get_ParentDirectory;();generated",
+ "Microsoft.Extensions.FileSystemGlobbing.Abstractions;FileSystemInfoBase;get_FullName;();generated",
+ "Microsoft.Extensions.FileSystemGlobbing.Abstractions;FileSystemInfoBase;get_Name;();generated",
+ "Microsoft.Extensions.FileSystemGlobbing.Abstractions;FileSystemInfoBase;get_ParentDirectory;();generated",
+ "Microsoft.Extensions.FileSystemGlobbing.Internal.PathSegments;CurrentPathSegment;Match;(System.String);generated",
+ "Microsoft.Extensions.FileSystemGlobbing.Internal.PathSegments;CurrentPathSegment;get_CanProduceStem;();generated",
+ "Microsoft.Extensions.FileSystemGlobbing.Internal.PathSegments;LiteralPathSegment;Equals;(System.Object);generated",
+ "Microsoft.Extensions.FileSystemGlobbing.Internal.PathSegments;LiteralPathSegment;GetHashCode;();generated",
+ "Microsoft.Extensions.FileSystemGlobbing.Internal.PathSegments;LiteralPathSegment;LiteralPathSegment;(System.String,System.StringComparison);generated",
+ "Microsoft.Extensions.FileSystemGlobbing.Internal.PathSegments;LiteralPathSegment;Match;(System.String);generated",
+ "Microsoft.Extensions.FileSystemGlobbing.Internal.PathSegments;LiteralPathSegment;get_CanProduceStem;();generated",
+ "Microsoft.Extensions.FileSystemGlobbing.Internal.PathSegments;LiteralPathSegment;get_Value;();generated",
+ "Microsoft.Extensions.FileSystemGlobbing.Internal.PathSegments;ParentPathSegment;Match;(System.String);generated",
+ "Microsoft.Extensions.FileSystemGlobbing.Internal.PathSegments;ParentPathSegment;get_CanProduceStem;();generated",
+ "Microsoft.Extensions.FileSystemGlobbing.Internal.PathSegments;RecursiveWildcardSegment;Match;(System.String);generated",
+ "Microsoft.Extensions.FileSystemGlobbing.Internal.PathSegments;RecursiveWildcardSegment;get_CanProduceStem;();generated",
+ "Microsoft.Extensions.FileSystemGlobbing.Internal.PathSegments;WildcardPathSegment;Match;(System.String);generated",
+ "Microsoft.Extensions.FileSystemGlobbing.Internal.PathSegments;WildcardPathSegment;WildcardPathSegment;(System.String,System.Collections.Generic.List,System.String,System.StringComparison);generated",
+ "Microsoft.Extensions.FileSystemGlobbing.Internal.PathSegments;WildcardPathSegment;get_BeginsWith;();generated",
+ "Microsoft.Extensions.FileSystemGlobbing.Internal.PathSegments;WildcardPathSegment;get_CanProduceStem;();generated",
+ "Microsoft.Extensions.FileSystemGlobbing.Internal.PathSegments;WildcardPathSegment;get_Contains;();generated",
+ "Microsoft.Extensions.FileSystemGlobbing.Internal.PathSegments;WildcardPathSegment;get_EndsWith;();generated",
+ "Microsoft.Extensions.FileSystemGlobbing.Internal.PatternContexts;PatternContext<>;IsStackEmpty;();generated",
+ "Microsoft.Extensions.FileSystemGlobbing.Internal.PatternContexts;PatternContext<>;PopDirectory;();generated",
+ "Microsoft.Extensions.FileSystemGlobbing.Internal.PatternContexts;PatternContext<>;PushDirectory;(Microsoft.Extensions.FileSystemGlobbing.Abstractions.DirectoryInfoBase);generated",
+ "Microsoft.Extensions.FileSystemGlobbing.Internal.PatternContexts;PatternContext<>;Test;(Microsoft.Extensions.FileSystemGlobbing.Abstractions.DirectoryInfoBase);generated",
+ "Microsoft.Extensions.FileSystemGlobbing.Internal.PatternContexts;PatternContext<>;Test;(Microsoft.Extensions.FileSystemGlobbing.Abstractions.FileInfoBase);generated",
+ "Microsoft.Extensions.FileSystemGlobbing.Internal.PatternContexts;PatternContextLinear+FrameData;get_StemItems;();generated",
+ "Microsoft.Extensions.FileSystemGlobbing.Internal.PatternContexts;PatternContextLinear;IsLastSegment;();generated",
+ "Microsoft.Extensions.FileSystemGlobbing.Internal.PatternContexts;PatternContextLinear;PatternContextLinear;(Microsoft.Extensions.FileSystemGlobbing.Internal.ILinearPattern);generated",
+ "Microsoft.Extensions.FileSystemGlobbing.Internal.PatternContexts;PatternContextLinear;PushDirectory;(Microsoft.Extensions.FileSystemGlobbing.Abstractions.DirectoryInfoBase);generated",
+ "Microsoft.Extensions.FileSystemGlobbing.Internal.PatternContexts;PatternContextLinear;Test;(Microsoft.Extensions.FileSystemGlobbing.Abstractions.FileInfoBase);generated",
+ "Microsoft.Extensions.FileSystemGlobbing.Internal.PatternContexts;PatternContextLinear;TestMatchingSegment;(System.String);generated",
+ "Microsoft.Extensions.FileSystemGlobbing.Internal.PatternContexts;PatternContextLinear;get_Pattern;();generated",
+ "Microsoft.Extensions.FileSystemGlobbing.Internal.PatternContexts;PatternContextLinearExclude;PatternContextLinearExclude;(Microsoft.Extensions.FileSystemGlobbing.Internal.ILinearPattern);generated",
+ "Microsoft.Extensions.FileSystemGlobbing.Internal.PatternContexts;PatternContextLinearExclude;Test;(Microsoft.Extensions.FileSystemGlobbing.Abstractions.DirectoryInfoBase);generated",
+ "Microsoft.Extensions.FileSystemGlobbing.Internal.PatternContexts;PatternContextLinearInclude;PatternContextLinearInclude;(Microsoft.Extensions.FileSystemGlobbing.Internal.ILinearPattern);generated",
+ "Microsoft.Extensions.FileSystemGlobbing.Internal.PatternContexts;PatternContextLinearInclude;Test;(Microsoft.Extensions.FileSystemGlobbing.Abstractions.DirectoryInfoBase);generated",
+ "Microsoft.Extensions.FileSystemGlobbing.Internal.PatternContexts;PatternContextRagged+FrameData;get_StemItems;();generated",
+ "Microsoft.Extensions.FileSystemGlobbing.Internal.PatternContexts;PatternContextRagged;IsEndingGroup;();generated",
+ "Microsoft.Extensions.FileSystemGlobbing.Internal.PatternContexts;PatternContextRagged;IsStartingGroup;();generated",
+ "Microsoft.Extensions.FileSystemGlobbing.Internal.PatternContexts;PatternContextRagged;PatternContextRagged;(Microsoft.Extensions.FileSystemGlobbing.Internal.IRaggedPattern);generated",
+ "Microsoft.Extensions.FileSystemGlobbing.Internal.PatternContexts;PatternContextRagged;PopDirectory;();generated",
+ "Microsoft.Extensions.FileSystemGlobbing.Internal.PatternContexts;PatternContextRagged;PushDirectory;(Microsoft.Extensions.FileSystemGlobbing.Abstractions.DirectoryInfoBase);generated",
+ "Microsoft.Extensions.FileSystemGlobbing.Internal.PatternContexts;PatternContextRagged;Test;(Microsoft.Extensions.FileSystemGlobbing.Abstractions.FileInfoBase);generated",
+ "Microsoft.Extensions.FileSystemGlobbing.Internal.PatternContexts;PatternContextRagged;TestMatchingGroup;(Microsoft.Extensions.FileSystemGlobbing.Abstractions.FileSystemInfoBase);generated",
+ "Microsoft.Extensions.FileSystemGlobbing.Internal.PatternContexts;PatternContextRagged;TestMatchingSegment;(System.String);generated",
+ "Microsoft.Extensions.FileSystemGlobbing.Internal.PatternContexts;PatternContextRagged;get_Pattern;();generated",
+ "Microsoft.Extensions.FileSystemGlobbing.Internal.PatternContexts;PatternContextRaggedExclude;PatternContextRaggedExclude;(Microsoft.Extensions.FileSystemGlobbing.Internal.IRaggedPattern);generated",
+ "Microsoft.Extensions.FileSystemGlobbing.Internal.PatternContexts;PatternContextRaggedExclude;Test;(Microsoft.Extensions.FileSystemGlobbing.Abstractions.DirectoryInfoBase);generated",
+ "Microsoft.Extensions.FileSystemGlobbing.Internal.PatternContexts;PatternContextRaggedInclude;PatternContextRaggedInclude;(Microsoft.Extensions.FileSystemGlobbing.Internal.IRaggedPattern);generated",
+ "Microsoft.Extensions.FileSystemGlobbing.Internal.PatternContexts;PatternContextRaggedInclude;Test;(Microsoft.Extensions.FileSystemGlobbing.Abstractions.DirectoryInfoBase);generated",
+ "Microsoft.Extensions.FileSystemGlobbing.Internal.Patterns;PatternBuilder;Build;(System.String);generated",
+ "Microsoft.Extensions.FileSystemGlobbing.Internal.Patterns;PatternBuilder;PatternBuilder;();generated",
+ "Microsoft.Extensions.FileSystemGlobbing.Internal.Patterns;PatternBuilder;PatternBuilder;(System.StringComparison);generated",
+ "Microsoft.Extensions.FileSystemGlobbing.Internal.Patterns;PatternBuilder;get_ComparisonType;();generated",
+ "Microsoft.Extensions.FileSystemGlobbing.Internal;ILinearPattern;get_Segments;();generated",
+ "Microsoft.Extensions.FileSystemGlobbing.Internal;IPathSegment;Match;(System.String);generated",
+ "Microsoft.Extensions.FileSystemGlobbing.Internal;IPathSegment;get_CanProduceStem;();generated",
+ "Microsoft.Extensions.FileSystemGlobbing.Internal;IPattern;CreatePatternContextForExclude;();generated",
+ "Microsoft.Extensions.FileSystemGlobbing.Internal;IPattern;CreatePatternContextForInclude;();generated",
+ "Microsoft.Extensions.FileSystemGlobbing.Internal;IPatternContext;PopDirectory;();generated",
+ "Microsoft.Extensions.FileSystemGlobbing.Internal;IPatternContext;PushDirectory;(Microsoft.Extensions.FileSystemGlobbing.Abstractions.DirectoryInfoBase);generated",
+ "Microsoft.Extensions.FileSystemGlobbing.Internal;IPatternContext;Test;(Microsoft.Extensions.FileSystemGlobbing.Abstractions.DirectoryInfoBase);generated",
+ "Microsoft.Extensions.FileSystemGlobbing.Internal;IPatternContext;Test;(Microsoft.Extensions.FileSystemGlobbing.Abstractions.FileInfoBase);generated",
+ "Microsoft.Extensions.FileSystemGlobbing.Internal;IRaggedPattern;get_Contains;();generated",
+ "Microsoft.Extensions.FileSystemGlobbing.Internal;IRaggedPattern;get_EndsWith;();generated",
+ "Microsoft.Extensions.FileSystemGlobbing.Internal;IRaggedPattern;get_Segments;();generated",
+ "Microsoft.Extensions.FileSystemGlobbing.Internal;IRaggedPattern;get_StartsWith;();generated",
+ "Microsoft.Extensions.FileSystemGlobbing.Internal;MatcherContext;Execute;();generated",
+ "Microsoft.Extensions.FileSystemGlobbing.Internal;PatternTestResult;Success;(System.String);generated",
+ "Microsoft.Extensions.FileSystemGlobbing.Internal;PatternTestResult;get_IsSuccessful;();generated",
+ "Microsoft.Extensions.FileSystemGlobbing.Internal;PatternTestResult;get_Stem;();generated",
+ "Microsoft.Extensions.FileSystemGlobbing;FilePatternMatch;Equals;(Microsoft.Extensions.FileSystemGlobbing.FilePatternMatch);generated",
+ "Microsoft.Extensions.FileSystemGlobbing;FilePatternMatch;Equals;(System.Object);generated",
+ "Microsoft.Extensions.FileSystemGlobbing;FilePatternMatch;FilePatternMatch;(System.String,System.String);generated",
+ "Microsoft.Extensions.FileSystemGlobbing;FilePatternMatch;GetHashCode;();generated",
+ "Microsoft.Extensions.FileSystemGlobbing;FilePatternMatch;get_Path;();generated",
+ "Microsoft.Extensions.FileSystemGlobbing;FilePatternMatch;get_Stem;();generated",
+ "Microsoft.Extensions.FileSystemGlobbing;InMemoryDirectoryInfo;InMemoryDirectoryInfo;(System.String,System.Collections.Generic.IEnumerable);generated",
+ "Microsoft.Extensions.FileSystemGlobbing;InMemoryDirectoryInfo;get_FullName;();generated",
+ "Microsoft.Extensions.FileSystemGlobbing;InMemoryDirectoryInfo;get_Name;();generated",
+ "Microsoft.Extensions.FileSystemGlobbing;Matcher;Execute;(Microsoft.Extensions.FileSystemGlobbing.Abstractions.DirectoryInfoBase);generated",
+ "Microsoft.Extensions.FileSystemGlobbing;Matcher;Matcher;();generated",
+ "Microsoft.Extensions.FileSystemGlobbing;Matcher;Matcher;(System.StringComparison);generated",
+ "Microsoft.Extensions.FileSystemGlobbing;MatcherExtensions;AddExcludePatterns;(Microsoft.Extensions.FileSystemGlobbing.Matcher,System.Collections.Generic.IEnumerable[]);generated",
+ "Microsoft.Extensions.FileSystemGlobbing;MatcherExtensions;AddIncludePatterns;(Microsoft.Extensions.FileSystemGlobbing.Matcher,System.Collections.Generic.IEnumerable[]);generated",
+ "Microsoft.Extensions.FileSystemGlobbing;MatcherExtensions;GetResultsInFullPath;(Microsoft.Extensions.FileSystemGlobbing.Matcher,System.String);generated",
+ "Microsoft.Extensions.FileSystemGlobbing;MatcherExtensions;Match;(Microsoft.Extensions.FileSystemGlobbing.Matcher,System.Collections.Generic.IEnumerable);generated",
+ "Microsoft.Extensions.FileSystemGlobbing;MatcherExtensions;Match;(Microsoft.Extensions.FileSystemGlobbing.Matcher,System.String);generated",
+ "Microsoft.Extensions.FileSystemGlobbing;MatcherExtensions;Match;(Microsoft.Extensions.FileSystemGlobbing.Matcher,System.String,System.Collections.Generic.IEnumerable);generated",
+ "Microsoft.Extensions.FileSystemGlobbing;MatcherExtensions;Match;(Microsoft.Extensions.FileSystemGlobbing.Matcher,System.String,System.String);generated",
+ "Microsoft.Extensions.FileSystemGlobbing;PatternMatchingResult;PatternMatchingResult;(System.Collections.Generic.IEnumerable);generated",
+ "Microsoft.Extensions.FileSystemGlobbing;PatternMatchingResult;PatternMatchingResult;(System.Collections.Generic.IEnumerable,System.Boolean);generated",
+ "Microsoft.Extensions.FileSystemGlobbing;PatternMatchingResult;get_Files;();generated",
+ "Microsoft.Extensions.FileSystemGlobbing;PatternMatchingResult;get_HasMatches;();generated",
+ "Microsoft.Extensions.FileSystemGlobbing;PatternMatchingResult;set_Files;(System.Collections.Generic.IEnumerable);generated",
+ "Microsoft.Extensions.Hosting.Internal;ApplicationLifetime;NotifyStarted;();generated",
+ "Microsoft.Extensions.Hosting.Internal;ApplicationLifetime;NotifyStopped;();generated",
+ "Microsoft.Extensions.Hosting.Internal;ApplicationLifetime;StopApplication;();generated",
+ "Microsoft.Extensions.Hosting.Internal;ConsoleLifetime;ConsoleLifetime;(Microsoft.Extensions.Options.IOptions,Microsoft.Extensions.Hosting.IHostEnvironment,Microsoft.Extensions.Hosting.IHostApplicationLifetime,Microsoft.Extensions.Options.IOptions);generated",
+ "Microsoft.Extensions.Hosting.Internal;ConsoleLifetime;ConsoleLifetime;(Microsoft.Extensions.Options.IOptions,Microsoft.Extensions.Hosting.IHostEnvironment,Microsoft.Extensions.Hosting.IHostApplicationLifetime,Microsoft.Extensions.Options.IOptions,Microsoft.Extensions.Logging.ILoggerFactory);generated",
+ "Microsoft.Extensions.Hosting.Internal;ConsoleLifetime;Dispose;();generated",
+ "Microsoft.Extensions.Hosting.Internal;ConsoleLifetime;StopAsync;(System.Threading.CancellationToken);generated",
+ "Microsoft.Extensions.Hosting.Internal;ConsoleLifetime;WaitForStartAsync;(System.Threading.CancellationToken);generated",
+ "Microsoft.Extensions.Hosting.Internal;HostingEnvironment;get_ApplicationName;();generated",
+ "Microsoft.Extensions.Hosting.Internal;HostingEnvironment;get_ContentRootFileProvider;();generated",
+ "Microsoft.Extensions.Hosting.Internal;HostingEnvironment;get_ContentRootPath;();generated",
+ "Microsoft.Extensions.Hosting.Internal;HostingEnvironment;get_EnvironmentName;();generated",
+ "Microsoft.Extensions.Hosting.Internal;HostingEnvironment;set_ApplicationName;(System.String);generated",
+ "Microsoft.Extensions.Hosting.Internal;HostingEnvironment;set_ContentRootFileProvider;(Microsoft.Extensions.FileProviders.IFileProvider);generated",
+ "Microsoft.Extensions.Hosting.Internal;HostingEnvironment;set_ContentRootPath;(System.String);generated",
+ "Microsoft.Extensions.Hosting.Internal;HostingEnvironment;set_EnvironmentName;(System.String);generated",
+ "Microsoft.Extensions.Hosting.Systemd;ISystemdNotifier;Notify;(Microsoft.Extensions.Hosting.Systemd.ServiceState);generated",
+ "Microsoft.Extensions.Hosting.Systemd;ISystemdNotifier;get_IsEnabled;();generated",
+ "Microsoft.Extensions.Hosting.Systemd;SystemdHelpers;IsSystemdService;();generated",
+ "Microsoft.Extensions.Hosting.Systemd;SystemdLifetime;Dispose;();generated",
+ "Microsoft.Extensions.Hosting.Systemd;SystemdLifetime;StopAsync;(System.Threading.CancellationToken);generated",
+ "Microsoft.Extensions.Hosting.Systemd;SystemdLifetime;SystemdLifetime;(Microsoft.Extensions.Hosting.IHostEnvironment,Microsoft.Extensions.Hosting.IHostApplicationLifetime,Microsoft.Extensions.Hosting.Systemd.ISystemdNotifier,Microsoft.Extensions.Logging.ILoggerFactory);generated",
+ "Microsoft.Extensions.Hosting.Systemd;SystemdLifetime;WaitForStartAsync;(System.Threading.CancellationToken);generated",
+ "Microsoft.Extensions.Hosting.Systemd;SystemdNotifier;Notify;(Microsoft.Extensions.Hosting.Systemd.ServiceState);generated",
+ "Microsoft.Extensions.Hosting.Systemd;SystemdNotifier;SystemdNotifier;();generated",
+ "Microsoft.Extensions.Hosting.Systemd;SystemdNotifier;get_IsEnabled;();generated",
+ "Microsoft.Extensions.Hosting.WindowsServices;WindowsServiceHelpers;IsWindowsService;();generated",
+ "Microsoft.Extensions.Hosting.WindowsServices;WindowsServiceLifetime;Dispose;(System.Boolean);generated",
+ "Microsoft.Extensions.Hosting.WindowsServices;WindowsServiceLifetime;OnShutdown;();generated",
+ "Microsoft.Extensions.Hosting.WindowsServices;WindowsServiceLifetime;OnStart;(System.String[]);generated",
+ "Microsoft.Extensions.Hosting.WindowsServices;WindowsServiceLifetime;OnStop;();generated",
+ "Microsoft.Extensions.Hosting.WindowsServices;WindowsServiceLifetime;StopAsync;(System.Threading.CancellationToken);generated",
+ "Microsoft.Extensions.Hosting.WindowsServices;WindowsServiceLifetime;WindowsServiceLifetime;(Microsoft.Extensions.Hosting.IHostEnvironment,Microsoft.Extensions.Hosting.IHostApplicationLifetime,Microsoft.Extensions.Logging.ILoggerFactory,Microsoft.Extensions.Options.IOptions);generated",
+ "Microsoft.Extensions.Hosting.WindowsServices;WindowsServiceLifetime;WindowsServiceLifetime;(Microsoft.Extensions.Hosting.IHostEnvironment,Microsoft.Extensions.Hosting.IHostApplicationLifetime,Microsoft.Extensions.Logging.ILoggerFactory,Microsoft.Extensions.Options.IOptions,Microsoft.Extensions.Options.IOptions);generated",
+ "Microsoft.Extensions.Hosting;BackgroundService;Dispose;();generated",
+ "Microsoft.Extensions.Hosting;BackgroundService;ExecuteAsync;(System.Threading.CancellationToken);generated",
+ "Microsoft.Extensions.Hosting;BackgroundService;StopAsync;(System.Threading.CancellationToken);generated",
+ "Microsoft.Extensions.Hosting;ConsoleLifetimeOptions;get_SuppressStatusMessages;();generated",
+ "Microsoft.Extensions.Hosting;ConsoleLifetimeOptions;set_SuppressStatusMessages;(System.Boolean);generated",
+ "Microsoft.Extensions.Hosting;Host;CreateDefaultBuilder;();generated",
+ "Microsoft.Extensions.Hosting;Host;CreateDefaultBuilder;(System.String[]);generated",
+ "Microsoft.Extensions.Hosting;HostBuilder;Build;();generated",
+ "Microsoft.Extensions.Hosting;HostBuilder;get_Properties;();generated",
+ "Microsoft.Extensions.Hosting;HostBuilderContext;HostBuilderContext;(System.Collections.Generic.IDictionary);generated",
+ "Microsoft.Extensions.Hosting;HostBuilderContext;get_Configuration;();generated",
+ "Microsoft.Extensions.Hosting;HostBuilderContext;get_HostingEnvironment;();generated",
+ "Microsoft.Extensions.Hosting;HostBuilderContext;get_Properties;();generated",
+ "Microsoft.Extensions.Hosting;HostBuilderContext;set_Configuration;(Microsoft.Extensions.Configuration.IConfiguration);generated",
+ "Microsoft.Extensions.Hosting;HostBuilderContext;set_HostingEnvironment;(Microsoft.Extensions.Hosting.IHostEnvironment);generated",
+ "Microsoft.Extensions.Hosting;HostEnvironmentEnvExtensions;IsDevelopment;(Microsoft.Extensions.Hosting.IHostEnvironment);generated",
+ "Microsoft.Extensions.Hosting;HostEnvironmentEnvExtensions;IsEnvironment;(Microsoft.Extensions.Hosting.IHostEnvironment,System.String);generated",
+ "Microsoft.Extensions.Hosting;HostEnvironmentEnvExtensions;IsProduction;(Microsoft.Extensions.Hosting.IHostEnvironment);generated",
+ "Microsoft.Extensions.Hosting;HostEnvironmentEnvExtensions;IsStaging;(Microsoft.Extensions.Hosting.IHostEnvironment);generated",
+ "Microsoft.Extensions.Hosting;HostOptions;get_BackgroundServiceExceptionBehavior;();generated",
+ "Microsoft.Extensions.Hosting;HostOptions;get_ShutdownTimeout;();generated",
+ "Microsoft.Extensions.Hosting;HostOptions;set_BackgroundServiceExceptionBehavior;(Microsoft.Extensions.Hosting.BackgroundServiceExceptionBehavior);generated",
+ "Microsoft.Extensions.Hosting;HostOptions;set_ShutdownTimeout;(System.TimeSpan);generated",
+ "Microsoft.Extensions.Hosting;HostingAbstractionsHostBuilderExtensions;Start;(Microsoft.Extensions.Hosting.IHostBuilder);generated",
+ "Microsoft.Extensions.Hosting;HostingAbstractionsHostBuilderExtensions;StartAsync;(Microsoft.Extensions.Hosting.IHostBuilder,System.Threading.CancellationToken);generated",
+ "Microsoft.Extensions.Hosting;HostingAbstractionsHostExtensions;Run;(Microsoft.Extensions.Hosting.IHost);generated",
+ "Microsoft.Extensions.Hosting;HostingAbstractionsHostExtensions;RunAsync;(Microsoft.Extensions.Hosting.IHost,System.Threading.CancellationToken);generated",
+ "Microsoft.Extensions.Hosting;HostingAbstractionsHostExtensions;Start;(Microsoft.Extensions.Hosting.IHost);generated",
+ "Microsoft.Extensions.Hosting;HostingAbstractionsHostExtensions;StopAsync;(Microsoft.Extensions.Hosting.IHost,System.TimeSpan);generated",
+ "Microsoft.Extensions.Hosting;HostingAbstractionsHostExtensions;WaitForShutdown;(Microsoft.Extensions.Hosting.IHost);generated",
+ "Microsoft.Extensions.Hosting;HostingAbstractionsHostExtensions;WaitForShutdownAsync;(Microsoft.Extensions.Hosting.IHost,System.Threading.CancellationToken);generated",
+ "Microsoft.Extensions.Hosting;HostingEnvironmentExtensions;IsDevelopment;(Microsoft.Extensions.Hosting.IHostingEnvironment);generated",
+ "Microsoft.Extensions.Hosting;HostingEnvironmentExtensions;IsEnvironment;(Microsoft.Extensions.Hosting.IHostingEnvironment,System.String);generated",
+ "Microsoft.Extensions.Hosting;HostingEnvironmentExtensions;IsProduction;(Microsoft.Extensions.Hosting.IHostingEnvironment);generated",
+ "Microsoft.Extensions.Hosting;HostingEnvironmentExtensions;IsStaging;(Microsoft.Extensions.Hosting.IHostingEnvironment);generated",
+ "Microsoft.Extensions.Hosting;HostingHostBuilderExtensions;RunConsoleAsync;(Microsoft.Extensions.Hosting.IHostBuilder,System.Threading.CancellationToken);generated",
+ "Microsoft.Extensions.Hosting;IApplicationLifetime;StopApplication;();generated",
+ "Microsoft.Extensions.Hosting;IApplicationLifetime;get_ApplicationStarted;();generated",
+ "Microsoft.Extensions.Hosting;IApplicationLifetime;get_ApplicationStopped;();generated",
+ "Microsoft.Extensions.Hosting;IApplicationLifetime;get_ApplicationStopping;();generated",
+ "Microsoft.Extensions.Hosting;IHost;StartAsync;(System.Threading.CancellationToken);generated",
+ "Microsoft.Extensions.Hosting;IHost;StopAsync;(System.Threading.CancellationToken);generated",
+ "Microsoft.Extensions.Hosting;IHost;get_Services;();generated",
+ "Microsoft.Extensions.Hosting;IHostApplicationLifetime;StopApplication;();generated",
+ "Microsoft.Extensions.Hosting;IHostApplicationLifetime;get_ApplicationStarted;();generated",
+ "Microsoft.Extensions.Hosting;IHostApplicationLifetime;get_ApplicationStopped;();generated",
+ "Microsoft.Extensions.Hosting;IHostApplicationLifetime;get_ApplicationStopping;();generated",
+ "Microsoft.Extensions.Hosting;IHostBuilder;Build;();generated",
+ "Microsoft.Extensions.Hosting;IHostBuilder;UseServiceProviderFactory<>;(Microsoft.Extensions.DependencyInjection.IServiceProviderFactory);generated",
+ "Microsoft.Extensions.Hosting;IHostBuilder;get_Properties;();generated",
+ "Microsoft.Extensions.Hosting;IHostEnvironment;get_ApplicationName;();generated",
+ "Microsoft.Extensions.Hosting;IHostEnvironment;get_ContentRootFileProvider;();generated",
+ "Microsoft.Extensions.Hosting;IHostEnvironment;get_ContentRootPath;();generated",
+ "Microsoft.Extensions.Hosting;IHostEnvironment;get_EnvironmentName;();generated",
+ "Microsoft.Extensions.Hosting;IHostEnvironment;set_ApplicationName;(System.String);generated",
+ "Microsoft.Extensions.Hosting;IHostEnvironment;set_ContentRootFileProvider;(Microsoft.Extensions.FileProviders.IFileProvider);generated",
+ "Microsoft.Extensions.Hosting;IHostEnvironment;set_ContentRootPath;(System.String);generated",
+ "Microsoft.Extensions.Hosting;IHostEnvironment;set_EnvironmentName;(System.String);generated",
+ "Microsoft.Extensions.Hosting;IHostLifetime;StopAsync;(System.Threading.CancellationToken);generated",
+ "Microsoft.Extensions.Hosting;IHostLifetime;WaitForStartAsync;(System.Threading.CancellationToken);generated",
+ "Microsoft.Extensions.Hosting;IHostedService;StartAsync;(System.Threading.CancellationToken);generated",
+ "Microsoft.Extensions.Hosting;IHostedService;StopAsync;(System.Threading.CancellationToken);generated",
+ "Microsoft.Extensions.Hosting;IHostingEnvironment;get_ApplicationName;();generated",
+ "Microsoft.Extensions.Hosting;IHostingEnvironment;get_ContentRootFileProvider;();generated",
+ "Microsoft.Extensions.Hosting;IHostingEnvironment;get_ContentRootPath;();generated",
+ "Microsoft.Extensions.Hosting;IHostingEnvironment;get_EnvironmentName;();generated",
+ "Microsoft.Extensions.Hosting;IHostingEnvironment;set_ApplicationName;(System.String);generated",
+ "Microsoft.Extensions.Hosting;IHostingEnvironment;set_ContentRootFileProvider;(Microsoft.Extensions.FileProviders.IFileProvider);generated",
+ "Microsoft.Extensions.Hosting;IHostingEnvironment;set_ContentRootPath;(System.String);generated",
+ "Microsoft.Extensions.Hosting;IHostingEnvironment;set_EnvironmentName;(System.String);generated",
+ "Microsoft.Extensions.Hosting;WindowsServiceLifetimeOptions;get_ServiceName;();generated",
+ "Microsoft.Extensions.Hosting;WindowsServiceLifetimeOptions;set_ServiceName;(System.String);generated",
+ "Microsoft.Extensions.Http.Logging;LoggingHttpMessageHandler;SendAsync;(System.Net.Http.HttpRequestMessage,System.Threading.CancellationToken);generated",
+ "Microsoft.Extensions.Http.Logging;LoggingScopeHttpMessageHandler;SendAsync;(System.Net.Http.HttpRequestMessage,System.Threading.CancellationToken);generated",
+ "Microsoft.Extensions.Http;HttpClientFactoryOptions;get_HttpClientActions;();generated",
+ "Microsoft.Extensions.Http;HttpClientFactoryOptions;get_HttpMessageHandlerBuilderActions;();generated",
+ "Microsoft.Extensions.Http;HttpClientFactoryOptions;get_ShouldRedactHeaderValue;();generated",
+ "Microsoft.Extensions.Http;HttpClientFactoryOptions;get_SuppressHandlerScope;();generated",
+ "Microsoft.Extensions.Http;HttpClientFactoryOptions;set_SuppressHandlerScope;(System.Boolean);generated",
+ "Microsoft.Extensions.Http;HttpMessageHandlerBuilder;Build;();generated",
+ "Microsoft.Extensions.Http;HttpMessageHandlerBuilder;get_AdditionalHandlers;();generated",
+ "Microsoft.Extensions.Http;HttpMessageHandlerBuilder;get_Name;();generated",
+ "Microsoft.Extensions.Http;HttpMessageHandlerBuilder;get_PrimaryHandler;();generated",
+ "Microsoft.Extensions.Http;HttpMessageHandlerBuilder;get_Services;();generated",
+ "Microsoft.Extensions.Http;HttpMessageHandlerBuilder;set_Name;(System.String);generated",
+ "Microsoft.Extensions.Http;HttpMessageHandlerBuilder;set_PrimaryHandler;(System.Net.Http.HttpMessageHandler);generated",
+ "Microsoft.Extensions.Http;ITypedHttpClientFactory<>;CreateClient;(System.Net.Http.HttpClient);generated",
+ "Microsoft.Extensions.Internal;ISystemClock;get_UtcNow;();generated",
+ "Microsoft.Extensions.Internal;SystemClock;get_UtcNow;();generated",
+ "Microsoft.Extensions.Logging.Abstractions;LogEntry<>;get_Category;();generated",
+ "Microsoft.Extensions.Logging.Abstractions;LogEntry<>;get_EventId;();generated",
+ "Microsoft.Extensions.Logging.Abstractions;LogEntry<>;get_Exception;();generated",
+ "Microsoft.Extensions.Logging.Abstractions;LogEntry<>;get_Formatter;();generated",
+ "Microsoft.Extensions.Logging.Abstractions;LogEntry<>;get_LogLevel;();generated",
+ "Microsoft.Extensions.Logging.Abstractions;LogEntry<>;get_State;();generated",
+ "Microsoft.Extensions.Logging.Abstractions;NullLogger;BeginScope<>;(TState);generated",
+ "Microsoft.Extensions.Logging.Abstractions;NullLogger;IsEnabled;(Microsoft.Extensions.Logging.LogLevel);generated",
+ "Microsoft.Extensions.Logging.Abstractions;NullLogger;get_Instance;();generated",
+ "Microsoft.Extensions.Logging.Abstractions;NullLogger<>;BeginScope<>;(TState);generated",
+ "Microsoft.Extensions.Logging.Abstractions;NullLogger<>;IsEnabled;(Microsoft.Extensions.Logging.LogLevel);generated",
+ "Microsoft.Extensions.Logging.Abstractions;NullLoggerFactory;AddProvider;(Microsoft.Extensions.Logging.ILoggerProvider);generated",
+ "Microsoft.Extensions.Logging.Abstractions;NullLoggerFactory;CreateLogger;(System.String);generated",
+ "Microsoft.Extensions.Logging.Abstractions;NullLoggerFactory;Dispose;();generated",
+ "Microsoft.Extensions.Logging.Abstractions;NullLoggerFactory;NullLoggerFactory;();generated",
+ "Microsoft.Extensions.Logging.Abstractions;NullLoggerProvider;CreateLogger;(System.String);generated",
+ "Microsoft.Extensions.Logging.Abstractions;NullLoggerProvider;Dispose;();generated",
+ "Microsoft.Extensions.Logging.Abstractions;NullLoggerProvider;get_Instance;();generated",
+ "Microsoft.Extensions.Logging.Configuration;ILoggerProviderConfiguration<>;get_Configuration;();generated",
+ "Microsoft.Extensions.Logging.Configuration;ILoggerProviderConfigurationFactory;GetConfiguration;(System.Type);generated",
+ "Microsoft.Extensions.Logging.Configuration;LoggerProviderOptions;RegisterProviderOptions<,>;(Microsoft.Extensions.DependencyInjection.IServiceCollection);generated",
+ "Microsoft.Extensions.Logging.Configuration;LoggerProviderOptionsChangeTokenSource<,>;LoggerProviderOptionsChangeTokenSource;(Microsoft.Extensions.Logging.Configuration.ILoggerProviderConfiguration);generated",
+ "Microsoft.Extensions.Logging.Configuration;LoggingBuilderConfigurationExtensions;AddConfiguration;(Microsoft.Extensions.Logging.ILoggingBuilder);generated",
+ "Microsoft.Extensions.Logging.Console;ConsoleFormatter;ConsoleFormatter;(System.String);generated",
+ "Microsoft.Extensions.Logging.Console;ConsoleFormatter;Write<>;(Microsoft.Extensions.Logging.Abstractions.LogEntry,Microsoft.Extensions.Logging.IExternalScopeProvider,System.IO.TextWriter);generated",
+ "Microsoft.Extensions.Logging.Console;ConsoleFormatter;get_Name;();generated",
+ "Microsoft.Extensions.Logging.Console;ConsoleFormatterOptions;ConsoleFormatterOptions;();generated",
+ "Microsoft.Extensions.Logging.Console;ConsoleFormatterOptions;get_IncludeScopes;();generated",
+ "Microsoft.Extensions.Logging.Console;ConsoleFormatterOptions;get_TimestampFormat;();generated",
+ "Microsoft.Extensions.Logging.Console;ConsoleFormatterOptions;get_UseUtcTimestamp;();generated",
+ "Microsoft.Extensions.Logging.Console;ConsoleFormatterOptions;set_IncludeScopes;(System.Boolean);generated",
+ "Microsoft.Extensions.Logging.Console;ConsoleFormatterOptions;set_TimestampFormat;(System.String);generated",
+ "Microsoft.Extensions.Logging.Console;ConsoleFormatterOptions;set_UseUtcTimestamp;(System.Boolean);generated",
+ "Microsoft.Extensions.Logging.Console;ConsoleLoggerOptions;get_DisableColors;();generated",
+ "Microsoft.Extensions.Logging.Console;ConsoleLoggerOptions;get_Format;();generated",
+ "Microsoft.Extensions.Logging.Console;ConsoleLoggerOptions;get_FormatterName;();generated",
+ "Microsoft.Extensions.Logging.Console;ConsoleLoggerOptions;get_IncludeScopes;();generated",
+ "Microsoft.Extensions.Logging.Console;ConsoleLoggerOptions;get_LogToStandardErrorThreshold;();generated",
+ "Microsoft.Extensions.Logging.Console;ConsoleLoggerOptions;get_TimestampFormat;();generated",
+ "Microsoft.Extensions.Logging.Console;ConsoleLoggerOptions;get_UseUtcTimestamp;();generated",
+ "Microsoft.Extensions.Logging.Console;ConsoleLoggerOptions;set_DisableColors;(System.Boolean);generated",
+ "Microsoft.Extensions.Logging.Console;ConsoleLoggerOptions;set_Format;(Microsoft.Extensions.Logging.Console.ConsoleLoggerFormat);generated",
+ "Microsoft.Extensions.Logging.Console;ConsoleLoggerOptions;set_FormatterName;(System.String);generated",
+ "Microsoft.Extensions.Logging.Console;ConsoleLoggerOptions;set_IncludeScopes;(System.Boolean);generated",
+ "Microsoft.Extensions.Logging.Console;ConsoleLoggerOptions;set_LogToStandardErrorThreshold;(Microsoft.Extensions.Logging.LogLevel);generated",
+ "Microsoft.Extensions.Logging.Console;ConsoleLoggerOptions;set_TimestampFormat;(System.String);generated",
+ "Microsoft.Extensions.Logging.Console;ConsoleLoggerOptions;set_UseUtcTimestamp;(System.Boolean);generated",
+ "Microsoft.Extensions.Logging.Console;ConsoleLoggerProvider;ConsoleLoggerProvider;(Microsoft.Extensions.Options.IOptionsMonitor);generated",
+ "Microsoft.Extensions.Logging.Console;ConsoleLoggerProvider;Dispose;();generated",
+ "Microsoft.Extensions.Logging.Console;JsonConsoleFormatterOptions;JsonConsoleFormatterOptions;();generated",
+ "Microsoft.Extensions.Logging.Console;JsonConsoleFormatterOptions;get_JsonWriterOptions;();generated",
+ "Microsoft.Extensions.Logging.Console;JsonConsoleFormatterOptions;set_JsonWriterOptions;(System.Text.Json.JsonWriterOptions);generated",
+ "Microsoft.Extensions.Logging.Console;SimpleConsoleFormatterOptions;SimpleConsoleFormatterOptions;();generated",
+ "Microsoft.Extensions.Logging.Console;SimpleConsoleFormatterOptions;get_ColorBehavior;();generated",
+ "Microsoft.Extensions.Logging.Console;SimpleConsoleFormatterOptions;get_SingleLine;();generated",
+ "Microsoft.Extensions.Logging.Console;SimpleConsoleFormatterOptions;set_ColorBehavior;(Microsoft.Extensions.Logging.Console.LoggerColorBehavior);generated",
+ "Microsoft.Extensions.Logging.Console;SimpleConsoleFormatterOptions;set_SingleLine;(System.Boolean);generated",
+ "Microsoft.Extensions.Logging.Debug;DebugLoggerProvider;Dispose;();generated",
+ "Microsoft.Extensions.Logging.EventLog;EventLogLoggerProvider;Dispose;();generated",
+ "Microsoft.Extensions.Logging.EventLog;EventLogLoggerProvider;EventLogLoggerProvider;();generated",
+ "Microsoft.Extensions.Logging.EventLog;EventLogLoggerProvider;EventLogLoggerProvider;(Microsoft.Extensions.Options.IOptions);generated",
+ "Microsoft.Extensions.Logging.EventLog;EventLogSettings;get_Filter;();generated",
+ "Microsoft.Extensions.Logging.EventLog;EventLogSettings;get_LogName;();generated",
+ "Microsoft.Extensions.Logging.EventLog;EventLogSettings;get_MachineName;();generated",
+ "Microsoft.Extensions.Logging.EventLog;EventLogSettings;get_SourceName;();generated",
+ "Microsoft.Extensions.Logging.EventLog;EventLogSettings;set_LogName;(System.String);generated",
+ "Microsoft.Extensions.Logging.EventLog;EventLogSettings;set_MachineName;(System.String);generated",
+ "Microsoft.Extensions.Logging.EventLog;EventLogSettings;set_SourceName;(System.String);generated",
+ "Microsoft.Extensions.Logging.EventSource;EventSourceLoggerProvider;Dispose;();generated",
+ "Microsoft.Extensions.Logging.EventSource;LoggingEventSource;OnEventCommand;(System.Diagnostics.Tracing.EventCommandEventArgs);generated",
+ "Microsoft.Extensions.Logging.Generators;DiagnosticDescriptors;get_ArgumentHasNoCorrespondingTemplate;();generated",
+ "Microsoft.Extensions.Logging.Generators;DiagnosticDescriptors;get_GeneratingForMax6Arguments;();generated",
+ "Microsoft.Extensions.Logging.Generators;DiagnosticDescriptors;get_InconsistentTemplateCasing;();generated",
+ "Microsoft.Extensions.Logging.Generators;DiagnosticDescriptors;get_InvalidLoggingMethodName;();generated",
+ "Microsoft.Extensions.Logging.Generators;DiagnosticDescriptors;get_InvalidLoggingMethodParameterName;();generated",
+ "Microsoft.Extensions.Logging.Generators;DiagnosticDescriptors;get_LoggingMethodHasBody;();generated",
+ "Microsoft.Extensions.Logging.Generators;DiagnosticDescriptors;get_LoggingMethodIsGeneric;();generated",
+ "Microsoft.Extensions.Logging.Generators;DiagnosticDescriptors;get_LoggingMethodMustBePartial;();generated",
+ "Microsoft.Extensions.Logging.Generators;DiagnosticDescriptors;get_LoggingMethodMustReturnVoid;();generated",
+ "Microsoft.Extensions.Logging.Generators;DiagnosticDescriptors;get_LoggingMethodShouldBeStatic;();generated",
+ "Microsoft.Extensions.Logging.Generators;DiagnosticDescriptors;get_MalformedFormatStrings;();generated",
+ "Microsoft.Extensions.Logging.Generators;DiagnosticDescriptors;get_MissingLogLevel;();generated",
+ "Microsoft.Extensions.Logging.Generators;DiagnosticDescriptors;get_MissingLoggerArgument;();generated",
+ "Microsoft.Extensions.Logging.Generators;DiagnosticDescriptors;get_MissingLoggerField;();generated",
+ "Microsoft.Extensions.Logging.Generators;DiagnosticDescriptors;get_MissingRequiredType;();generated",
+ "Microsoft.Extensions.Logging.Generators;DiagnosticDescriptors;get_MultipleLoggerFields;();generated",
+ "Microsoft.Extensions.Logging.Generators;DiagnosticDescriptors;get_RedundantQualifierInMessage;();generated",
+ "Microsoft.Extensions.Logging.Generators;DiagnosticDescriptors;get_ShouldntMentionExceptionInMessage;();generated",
+ "Microsoft.Extensions.Logging.Generators;DiagnosticDescriptors;get_ShouldntMentionLogLevelInMessage;();generated",
+ "Microsoft.Extensions.Logging.Generators;DiagnosticDescriptors;get_ShouldntMentionLoggerInMessage;();generated",
+ "Microsoft.Extensions.Logging.Generators;DiagnosticDescriptors;get_ShouldntReuseEventIds;();generated",
+ "Microsoft.Extensions.Logging.Generators;DiagnosticDescriptors;get_TemplateHasNoCorrespondingArgument;();generated",
+ "Microsoft.Extensions.Logging.Generators;LoggerMessageGenerator;Execute;(Microsoft.CodeAnalysis.GeneratorExecutionContext);generated",
+ "Microsoft.Extensions.Logging.Generators;LoggerMessageGenerator;Initialize;(Microsoft.CodeAnalysis.GeneratorInitializationContext);generated",
+ "Microsoft.Extensions.Logging.Generators;LoggerMessageGenerator;Initialize;(Microsoft.CodeAnalysis.IncrementalGeneratorInitializationContext);generated",
+ "Microsoft.Extensions.Logging.TraceSource;TraceSourceLoggerProvider;CreateLogger;(System.String);generated",
+ "Microsoft.Extensions.Logging.TraceSource;TraceSourceLoggerProvider;Dispose;();generated",
+ "Microsoft.Extensions.Logging.TraceSource;TraceSourceLoggerProvider;TraceSourceLoggerProvider;(System.Diagnostics.SourceSwitch);generated",
+ "Microsoft.Extensions.Logging;EventId;Equals;(Microsoft.Extensions.Logging.EventId);generated",
+ "Microsoft.Extensions.Logging;EventId;Equals;(System.Object);generated",
+ "Microsoft.Extensions.Logging;EventId;EventId;(System.Int32,System.String);generated",
+ "Microsoft.Extensions.Logging;EventId;GetHashCode;();generated",
+ "Microsoft.Extensions.Logging;EventId;ToString;();generated",
+ "Microsoft.Extensions.Logging;EventId;get_Id;();generated",
+ "Microsoft.Extensions.Logging;EventId;get_Name;();generated",
+ "Microsoft.Extensions.Logging;EventId;op_Equality;(Microsoft.Extensions.Logging.EventId,Microsoft.Extensions.Logging.EventId);generated",
+ "Microsoft.Extensions.Logging;EventId;op_Inequality;(Microsoft.Extensions.Logging.EventId,Microsoft.Extensions.Logging.EventId);generated",
+ "Microsoft.Extensions.Logging;IExternalScopeProvider;Push;(System.Object);generated",
+ "Microsoft.Extensions.Logging;ILogger;BeginScope<>;(TState);generated",
+ "Microsoft.Extensions.Logging;ILogger;IsEnabled;(Microsoft.Extensions.Logging.LogLevel);generated",
+ "Microsoft.Extensions.Logging;ILoggerFactory;AddProvider;(Microsoft.Extensions.Logging.ILoggerProvider);generated",
+ "Microsoft.Extensions.Logging;ILoggerFactory;CreateLogger;(System.String);generated",
+ "Microsoft.Extensions.Logging;ILoggerProvider;CreateLogger;(System.String);generated",
+ "Microsoft.Extensions.Logging;ILoggingBuilder;get_Services;();generated",
+ "Microsoft.Extensions.Logging;ISupportExternalScope;SetScopeProvider;(Microsoft.Extensions.Logging.IExternalScopeProvider);generated",
+ "Microsoft.Extensions.Logging;LogDefineOptions;get_SkipEnabledCheck;();generated",
+ "Microsoft.Extensions.Logging;LogDefineOptions;set_SkipEnabledCheck;(System.Boolean);generated",
+ "Microsoft.Extensions.Logging;Logger<>;IsEnabled;(Microsoft.Extensions.Logging.LogLevel);generated",
+ "Microsoft.Extensions.Logging;Logger<>;Logger;(Microsoft.Extensions.Logging.ILoggerFactory);generated",
+ "Microsoft.Extensions.Logging;LoggerExtensions;Log;(Microsoft.Extensions.Logging.ILogger,Microsoft.Extensions.Logging.LogLevel,Microsoft.Extensions.Logging.EventId,System.Exception,System.String,System.Object[]);generated",
+ "Microsoft.Extensions.Logging;LoggerExtensions;Log;(Microsoft.Extensions.Logging.ILogger,Microsoft.Extensions.Logging.LogLevel,Microsoft.Extensions.Logging.EventId,System.String,System.Object[]);generated",
+ "Microsoft.Extensions.Logging;LoggerExtensions;Log;(Microsoft.Extensions.Logging.ILogger,Microsoft.Extensions.Logging.LogLevel,System.Exception,System.String,System.Object[]);generated",
+ "Microsoft.Extensions.Logging;LoggerExtensions;Log;(Microsoft.Extensions.Logging.ILogger,Microsoft.Extensions.Logging.LogLevel,System.String,System.Object[]);generated",
+ "Microsoft.Extensions.Logging;LoggerExtensions;LogCritical;(Microsoft.Extensions.Logging.ILogger,Microsoft.Extensions.Logging.EventId,System.Exception,System.String,System.Object[]);generated",
+ "Microsoft.Extensions.Logging;LoggerExtensions;LogCritical;(Microsoft.Extensions.Logging.ILogger,Microsoft.Extensions.Logging.EventId,System.String,System.Object[]);generated",
+ "Microsoft.Extensions.Logging;LoggerExtensions;LogCritical;(Microsoft.Extensions.Logging.ILogger,System.Exception,System.String,System.Object[]);generated",
+ "Microsoft.Extensions.Logging;LoggerExtensions;LogCritical;(Microsoft.Extensions.Logging.ILogger,System.String,System.Object[]);generated",
+ "Microsoft.Extensions.Logging;LoggerExtensions;LogDebug;(Microsoft.Extensions.Logging.ILogger,Microsoft.Extensions.Logging.EventId,System.Exception,System.String,System.Object[]);generated",
+ "Microsoft.Extensions.Logging;LoggerExtensions;LogDebug;(Microsoft.Extensions.Logging.ILogger,Microsoft.Extensions.Logging.EventId,System.String,System.Object[]);generated",
+ "Microsoft.Extensions.Logging;LoggerExtensions;LogDebug;(Microsoft.Extensions.Logging.ILogger,System.Exception,System.String,System.Object[]);generated",
+ "Microsoft.Extensions.Logging;LoggerExtensions;LogDebug;(Microsoft.Extensions.Logging.ILogger,System.String,System.Object[]);generated",
+ "Microsoft.Extensions.Logging;LoggerExtensions;LogError;(Microsoft.Extensions.Logging.ILogger,Microsoft.Extensions.Logging.EventId,System.Exception,System.String,System.Object[]);generated",
+ "Microsoft.Extensions.Logging;LoggerExtensions;LogError;(Microsoft.Extensions.Logging.ILogger,Microsoft.Extensions.Logging.EventId,System.String,System.Object[]);generated",
+ "Microsoft.Extensions.Logging;LoggerExtensions;LogError;(Microsoft.Extensions.Logging.ILogger,System.Exception,System.String,System.Object[]);generated",
+ "Microsoft.Extensions.Logging;LoggerExtensions;LogError;(Microsoft.Extensions.Logging.ILogger,System.String,System.Object[]);generated",
+ "Microsoft.Extensions.Logging;LoggerExtensions;LogInformation;(Microsoft.Extensions.Logging.ILogger,Microsoft.Extensions.Logging.EventId,System.Exception,System.String,System.Object[]);generated",
+ "Microsoft.Extensions.Logging;LoggerExtensions;LogInformation;(Microsoft.Extensions.Logging.ILogger,Microsoft.Extensions.Logging.EventId,System.String,System.Object[]);generated",
+ "Microsoft.Extensions.Logging;LoggerExtensions;LogInformation;(Microsoft.Extensions.Logging.ILogger,System.Exception,System.String,System.Object[]);generated",
+ "Microsoft.Extensions.Logging;LoggerExtensions;LogInformation;(Microsoft.Extensions.Logging.ILogger,System.String,System.Object[]);generated",
+ "Microsoft.Extensions.Logging;LoggerExtensions;LogTrace;(Microsoft.Extensions.Logging.ILogger,Microsoft.Extensions.Logging.EventId,System.Exception,System.String,System.Object[]);generated",
+ "Microsoft.Extensions.Logging;LoggerExtensions;LogTrace;(Microsoft.Extensions.Logging.ILogger,Microsoft.Extensions.Logging.EventId,System.String,System.Object[]);generated",
+ "Microsoft.Extensions.Logging;LoggerExtensions;LogTrace;(Microsoft.Extensions.Logging.ILogger,System.Exception,System.String,System.Object[]);generated",
+ "Microsoft.Extensions.Logging;LoggerExtensions;LogTrace;(Microsoft.Extensions.Logging.ILogger,System.String,System.Object[]);generated",
+ "Microsoft.Extensions.Logging;LoggerExtensions;LogWarning;(Microsoft.Extensions.Logging.ILogger,Microsoft.Extensions.Logging.EventId,System.Exception,System.String,System.Object[]);generated",
+ "Microsoft.Extensions.Logging;LoggerExtensions;LogWarning;(Microsoft.Extensions.Logging.ILogger,Microsoft.Extensions.Logging.EventId,System.String,System.Object[]);generated",
+ "Microsoft.Extensions.Logging;LoggerExtensions;LogWarning;(Microsoft.Extensions.Logging.ILogger,System.Exception,System.String,System.Object[]);generated",
+ "Microsoft.Extensions.Logging;LoggerExtensions;LogWarning;(Microsoft.Extensions.Logging.ILogger,System.String,System.Object[]);generated",
+ "Microsoft.Extensions.Logging;LoggerExternalScopeProvider;LoggerExternalScopeProvider;();generated",
+ "Microsoft.Extensions.Logging;LoggerFactory;AddProvider;(Microsoft.Extensions.Logging.ILoggerProvider);generated",
+ "Microsoft.Extensions.Logging;LoggerFactory;CheckDisposed;();generated",
+ "Microsoft.Extensions.Logging;LoggerFactory;CreateLogger;(System.String);generated",
+ "Microsoft.Extensions.Logging;LoggerFactory;Dispose;();generated",
+ "Microsoft.Extensions.Logging;LoggerFactory;LoggerFactory;();generated",
+ "Microsoft.Extensions.Logging;LoggerFactory;LoggerFactory;(System.Collections.Generic.IEnumerable);generated",
+ "Microsoft.Extensions.Logging;LoggerFactory;LoggerFactory;(System.Collections.Generic.IEnumerable,Microsoft.Extensions.Logging.LoggerFilterOptions);generated",
+ "Microsoft.Extensions.Logging;LoggerFactory;LoggerFactory;(System.Collections.Generic.IEnumerable,Microsoft.Extensions.Options.IOptionsMonitor);generated",
+ "Microsoft.Extensions.Logging;LoggerFactory;LoggerFactory;(System.Collections.Generic.IEnumerable,Microsoft.Extensions.Options.IOptionsMonitor,Microsoft.Extensions.Options.IOptions);generated",
+ "Microsoft.Extensions.Logging;LoggerFactoryExtensions;CreateLogger;(Microsoft.Extensions.Logging.ILoggerFactory,System.Type);generated",
+ "Microsoft.Extensions.Logging;LoggerFactoryExtensions;CreateLogger<>;(Microsoft.Extensions.Logging.ILoggerFactory);generated",
+ "Microsoft.Extensions.Logging;LoggerFactoryOptions;LoggerFactoryOptions;();generated",
+ "Microsoft.Extensions.Logging;LoggerFactoryOptions;get_ActivityTrackingOptions;();generated",
+ "Microsoft.Extensions.Logging;LoggerFactoryOptions;set_ActivityTrackingOptions;(Microsoft.Extensions.Logging.ActivityTrackingOptions);generated",
+ "Microsoft.Extensions.Logging;LoggerFilterOptions;LoggerFilterOptions;();generated",
+ "Microsoft.Extensions.Logging;LoggerFilterOptions;get_CaptureScopes;();generated",
+ "Microsoft.Extensions.Logging;LoggerFilterOptions;get_MinLevel;();generated",
+ "Microsoft.Extensions.Logging;LoggerFilterOptions;get_Rules;();generated",
+ "Microsoft.Extensions.Logging;LoggerFilterOptions;set_CaptureScopes;(System.Boolean);generated",
+ "Microsoft.Extensions.Logging;LoggerFilterOptions;set_MinLevel;(Microsoft.Extensions.Logging.LogLevel);generated",
+ "Microsoft.Extensions.Logging;LoggerFilterRule;ToString;();generated",
+ "Microsoft.Extensions.Logging;LoggerFilterRule;get_CategoryName;();generated",
+ "Microsoft.Extensions.Logging;LoggerFilterRule;get_Filter;();generated",
+ "Microsoft.Extensions.Logging;LoggerFilterRule;get_LogLevel;();generated",
+ "Microsoft.Extensions.Logging;LoggerFilterRule;get_ProviderName;();generated",
+ "Microsoft.Extensions.Logging;LoggerMessage;Define;(Microsoft.Extensions.Logging.LogLevel,Microsoft.Extensions.Logging.EventId,System.String);generated",
+ "Microsoft.Extensions.Logging;LoggerMessage;Define;(Microsoft.Extensions.Logging.LogLevel,Microsoft.Extensions.Logging.EventId,System.String,Microsoft.Extensions.Logging.LogDefineOptions);generated",
+ "Microsoft.Extensions.Logging;LoggerMessage;Define<,,,,,>;(Microsoft.Extensions.Logging.LogLevel,Microsoft.Extensions.Logging.EventId,System.String);generated",
+ "Microsoft.Extensions.Logging;LoggerMessage;Define<,,,,,>;(Microsoft.Extensions.Logging.LogLevel,Microsoft.Extensions.Logging.EventId,System.String,Microsoft.Extensions.Logging.LogDefineOptions);generated",
+ "Microsoft.Extensions.Logging;LoggerMessage;Define<,,,,>;(Microsoft.Extensions.Logging.LogLevel,Microsoft.Extensions.Logging.EventId,System.String);generated",
+ "Microsoft.Extensions.Logging;LoggerMessage;Define<,,,,>;(Microsoft.Extensions.Logging.LogLevel,Microsoft.Extensions.Logging.EventId,System.String,Microsoft.Extensions.Logging.LogDefineOptions);generated",
+ "Microsoft.Extensions.Logging;LoggerMessage;Define<,,,>;(Microsoft.Extensions.Logging.LogLevel,Microsoft.Extensions.Logging.EventId,System.String);generated",
+ "Microsoft.Extensions.Logging;LoggerMessage;Define<,,,>;(Microsoft.Extensions.Logging.LogLevel,Microsoft.Extensions.Logging.EventId,System.String,Microsoft.Extensions.Logging.LogDefineOptions);generated",
+ "Microsoft.Extensions.Logging;LoggerMessage;Define<,,>;(Microsoft.Extensions.Logging.LogLevel,Microsoft.Extensions.Logging.EventId,System.String);generated",
+ "Microsoft.Extensions.Logging;LoggerMessage;Define<,,>;(Microsoft.Extensions.Logging.LogLevel,Microsoft.Extensions.Logging.EventId,System.String,Microsoft.Extensions.Logging.LogDefineOptions);generated",
+ "Microsoft.Extensions.Logging;LoggerMessage;Define<,>;(Microsoft.Extensions.Logging.LogLevel,Microsoft.Extensions.Logging.EventId,System.String);generated",
+ "Microsoft.Extensions.Logging;LoggerMessage;Define<,>;(Microsoft.Extensions.Logging.LogLevel,Microsoft.Extensions.Logging.EventId,System.String,Microsoft.Extensions.Logging.LogDefineOptions);generated",
+ "Microsoft.Extensions.Logging;LoggerMessage;Define<>;(Microsoft.Extensions.Logging.LogLevel,Microsoft.Extensions.Logging.EventId,System.String);generated",
+ "Microsoft.Extensions.Logging;LoggerMessage;Define<>;(Microsoft.Extensions.Logging.LogLevel,Microsoft.Extensions.Logging.EventId,System.String,Microsoft.Extensions.Logging.LogDefineOptions);generated",
+ "Microsoft.Extensions.Logging;LoggerMessage;DefineScope;(System.String);generated",
+ "Microsoft.Extensions.Logging;LoggerMessage;DefineScope<,,,,,>;(System.String);generated",
+ "Microsoft.Extensions.Logging;LoggerMessage;DefineScope<,,,,>;(System.String);generated",
+ "Microsoft.Extensions.Logging;LoggerMessage;DefineScope<,,,>;(System.String);generated",
+ "Microsoft.Extensions.Logging;LoggerMessage;DefineScope<,,>;(System.String);generated",
+ "Microsoft.Extensions.Logging;LoggerMessage;DefineScope<,>;(System.String);generated",
+ "Microsoft.Extensions.Logging;LoggerMessage;DefineScope<>;(System.String);generated",
+ "Microsoft.Extensions.Logging;LoggerMessageAttribute;LoggerMessageAttribute;();generated",
+ "Microsoft.Extensions.Logging;LoggerMessageAttribute;LoggerMessageAttribute;(System.Int32,Microsoft.Extensions.Logging.LogLevel,System.String);generated",
+ "Microsoft.Extensions.Logging;LoggerMessageAttribute;get_EventId;();generated",
+ "Microsoft.Extensions.Logging;LoggerMessageAttribute;get_EventName;();generated",
+ "Microsoft.Extensions.Logging;LoggerMessageAttribute;get_Level;();generated",
+ "Microsoft.Extensions.Logging;LoggerMessageAttribute;get_Message;();generated",
+ "Microsoft.Extensions.Logging;LoggerMessageAttribute;get_SkipEnabledCheck;();generated",
+ "Microsoft.Extensions.Logging;LoggerMessageAttribute;set_EventId;(System.Int32);generated",
+ "Microsoft.Extensions.Logging;LoggerMessageAttribute;set_EventName;(System.String);generated",
+ "Microsoft.Extensions.Logging;LoggerMessageAttribute;set_Level;(Microsoft.Extensions.Logging.LogLevel);generated",
+ "Microsoft.Extensions.Logging;LoggerMessageAttribute;set_Message;(System.String);generated",
+ "Microsoft.Extensions.Logging;LoggerMessageAttribute;set_SkipEnabledCheck;(System.Boolean);generated",
+ "Microsoft.Extensions.Logging;ProviderAliasAttribute;ProviderAliasAttribute;(System.String);generated",
+ "Microsoft.Extensions.Logging;ProviderAliasAttribute;get_Alias;();generated",
+ "Microsoft.Extensions.Options;ConfigurationChangeTokenSource<>;ConfigurationChangeTokenSource;(Microsoft.Extensions.Configuration.IConfiguration);generated",
+ "Microsoft.Extensions.Options;ConfigurationChangeTokenSource<>;get_Name;();generated",
+ "Microsoft.Extensions.Options;ConfigureFromConfigurationOptions<>;ConfigureFromConfigurationOptions;(Microsoft.Extensions.Configuration.IConfiguration);generated",
+ "Microsoft.Extensions.Options;ConfigureNamedOptions<,,,,,>;Configure;(System.String,TOptions);generated",
+ "Microsoft.Extensions.Options;ConfigureNamedOptions<,,,,,>;Configure;(TOptions);generated",
+ "Microsoft.Extensions.Options;ConfigureNamedOptions<,,,,,>;get_Action;();generated",
+ "Microsoft.Extensions.Options;ConfigureNamedOptions<,,,,,>;get_Dependency1;();generated",
+ "Microsoft.Extensions.Options;ConfigureNamedOptions<,,,,,>;get_Dependency2;();generated",
+ "Microsoft.Extensions.Options;ConfigureNamedOptions<,,,,,>;get_Dependency3;();generated",
+ "Microsoft.Extensions.Options;ConfigureNamedOptions<,,,,,>;get_Dependency4;();generated",
+ "Microsoft.Extensions.Options;ConfigureNamedOptions<,,,,,>;get_Dependency5;();generated",
+ "Microsoft.Extensions.Options;ConfigureNamedOptions<,,,,,>;get_Name;();generated",
+ "Microsoft.Extensions.Options;ConfigureNamedOptions<,,,,>;Configure;(System.String,TOptions);generated",
+ "Microsoft.Extensions.Options;ConfigureNamedOptions<,,,,>;Configure;(TOptions);generated",
+ "Microsoft.Extensions.Options;ConfigureNamedOptions<,,,,>;get_Action;();generated",
+ "Microsoft.Extensions.Options;ConfigureNamedOptions<,,,,>;get_Dependency1;();generated",
+ "Microsoft.Extensions.Options;ConfigureNamedOptions<,,,,>;get_Dependency2;();generated",
+ "Microsoft.Extensions.Options;ConfigureNamedOptions<,,,,>;get_Dependency3;();generated",
+ "Microsoft.Extensions.Options;ConfigureNamedOptions<,,,,>;get_Dependency4;();generated",
+ "Microsoft.Extensions.Options;ConfigureNamedOptions<,,,,>;get_Name;();generated",
+ "Microsoft.Extensions.Options;ConfigureNamedOptions<,,,>;Configure;(System.String,TOptions);generated",
+ "Microsoft.Extensions.Options;ConfigureNamedOptions<,,,>;Configure;(TOptions);generated",
+ "Microsoft.Extensions.Options;ConfigureNamedOptions<,,,>;get_Action;();generated",
+ "Microsoft.Extensions.Options;ConfigureNamedOptions<,,,>;get_Dependency1;();generated",
+ "Microsoft.Extensions.Options;ConfigureNamedOptions<,,,>;get_Dependency2;();generated",
+ "Microsoft.Extensions.Options;ConfigureNamedOptions<,,,>;get_Dependency3;();generated",
+ "Microsoft.Extensions.Options;ConfigureNamedOptions<,,,>;get_Name;();generated",
+ "Microsoft.Extensions.Options;ConfigureNamedOptions<,,>;Configure;(System.String,TOptions);generated",
+ "Microsoft.Extensions.Options;ConfigureNamedOptions<,,>;Configure;(TOptions);generated",
+ "Microsoft.Extensions.Options;ConfigureNamedOptions<,,>;get_Action;();generated",
+ "Microsoft.Extensions.Options;ConfigureNamedOptions<,,>;get_Dependency1;();generated",
+ "Microsoft.Extensions.Options;ConfigureNamedOptions<,,>;get_Dependency2;();generated",
+ "Microsoft.Extensions.Options;ConfigureNamedOptions<,,>;get_Name;();generated",
+ "Microsoft.Extensions.Options;ConfigureNamedOptions<,>;Configure;(System.String,TOptions);generated",
+ "Microsoft.Extensions.Options;ConfigureNamedOptions<,>;Configure;(TOptions);generated",
+ "Microsoft.Extensions.Options;ConfigureNamedOptions<,>;get_Action;();generated",
+ "Microsoft.Extensions.Options;ConfigureNamedOptions<,>;get_Dependency;();generated",
+ "Microsoft.Extensions.Options;ConfigureNamedOptions<,>;get_Name;();generated",
+ "Microsoft.Extensions.Options;ConfigureNamedOptions<>;Configure;(System.String,TOptions);generated",
+ "Microsoft.Extensions.Options;ConfigureNamedOptions<>;Configure;(TOptions);generated",
+ "Microsoft.Extensions.Options;ConfigureNamedOptions<>;get_Action;();generated",
+ "Microsoft.Extensions.Options;ConfigureNamedOptions<>;get_Name;();generated",
+ "Microsoft.Extensions.Options;ConfigureOptions<>;Configure;(TOptions);generated",
+ "Microsoft.Extensions.Options;ConfigureOptions<>;get_Action;();generated",
+ "Microsoft.Extensions.Options;DataAnnotationValidateOptions<>;DataAnnotationValidateOptions;(System.String);generated",
+ "Microsoft.Extensions.Options;DataAnnotationValidateOptions<>;Validate;(System.String,TOptions);generated",
+ "Microsoft.Extensions.Options;DataAnnotationValidateOptions<>;get_Name;();generated",
+ "Microsoft.Extensions.Options;IConfigureNamedOptions<>;Configure;(System.String,TOptions);generated",
+ "Microsoft.Extensions.Options;IConfigureOptions<>;Configure;(TOptions);generated",
+ "Microsoft.Extensions.Options;IOptions<>;get_Value;();generated",
+ "Microsoft.Extensions.Options;IOptionsChangeTokenSource<>;GetChangeToken;();generated",
+ "Microsoft.Extensions.Options;IOptionsChangeTokenSource<>;get_Name;();generated",
+ "Microsoft.Extensions.Options;IOptionsFactory<>;Create;(System.String);generated",
+ "Microsoft.Extensions.Options;IOptionsMonitor<>;Get;(System.String);generated",
+ "Microsoft.Extensions.Options;IOptionsMonitor<>;get_CurrentValue;();generated",
+ "Microsoft.Extensions.Options;IOptionsMonitorCache<>;Clear;();generated",
+ "Microsoft.Extensions.Options;IOptionsMonitorCache<>;TryAdd;(System.String,TOptions);generated",
+ "Microsoft.Extensions.Options;IOptionsMonitorCache<>;TryRemove;(System.String);generated",
+ "Microsoft.Extensions.Options;IOptionsSnapshot<>;Get;(System.String);generated",
+ "Microsoft.Extensions.Options;IPostConfigureOptions<>;PostConfigure;(System.String,TOptions);generated",
+ "Microsoft.Extensions.Options;IValidateOptions<>;Validate;(System.String,TOptions);generated",
+ "Microsoft.Extensions.Options;NamedConfigureFromConfigurationOptions<>;NamedConfigureFromConfigurationOptions;(System.String,Microsoft.Extensions.Configuration.IConfiguration);generated",
+ "Microsoft.Extensions.Options;Options;Create<>;(TOptions);generated",
+ "Microsoft.Extensions.Options;OptionsBuilder<>;OptionsBuilder;(Microsoft.Extensions.DependencyInjection.IServiceCollection,System.String);generated",
+ "Microsoft.Extensions.Options;OptionsBuilder<>;get_Name;();generated",
+ "Microsoft.Extensions.Options;OptionsBuilder<>;get_Services;();generated",
+ "Microsoft.Extensions.Options;OptionsCache<>;Clear;();generated",
+ "Microsoft.Extensions.Options;OptionsCache<>;TryAdd;(System.String,TOptions);generated",
+ "Microsoft.Extensions.Options;OptionsCache<>;TryRemove;(System.String);generated",
+ "Microsoft.Extensions.Options;OptionsFactory<>;Create;(System.String);generated",
+ "Microsoft.Extensions.Options;OptionsFactory<>;CreateInstance;(System.String);generated",
+ "Microsoft.Extensions.Options;OptionsFactory<>;OptionsFactory;(System.Collections.Generic.IEnumerable>,System.Collections.Generic.IEnumerable>);generated",
+ "Microsoft.Extensions.Options;OptionsManager<>;Get;(System.String);generated",
+ "Microsoft.Extensions.Options;OptionsManager<>;get_Value;();generated",
+ "Microsoft.Extensions.Options;OptionsMonitor<>;Dispose;();generated",
+ "Microsoft.Extensions.Options;OptionsMonitor<>;Get;(System.String);generated",
+ "Microsoft.Extensions.Options;OptionsMonitor<>;get_CurrentValue;();generated",
+ "Microsoft.Extensions.Options;OptionsValidationException;OptionsValidationException;(System.String,System.Type,System.Collections.Generic.IEnumerable);generated",
+ "Microsoft.Extensions.Options;OptionsValidationException;get_Failures;();generated",
+ "Microsoft.Extensions.Options;OptionsValidationException;get_Message;();generated",
+ "Microsoft.Extensions.Options;OptionsValidationException;get_OptionsName;();generated",
+ "Microsoft.Extensions.Options;OptionsValidationException;get_OptionsType;();generated",
+ "Microsoft.Extensions.Options;OptionsWrapper<>;OptionsWrapper;(TOptions);generated",
+ "Microsoft.Extensions.Options;OptionsWrapper<>;get_Value;();generated",
+ "Microsoft.Extensions.Options;PostConfigureOptions<,,,,,>;PostConfigure;(System.String,TOptions);generated",
+ "Microsoft.Extensions.Options;PostConfigureOptions<,,,,,>;PostConfigure;(TOptions);generated",
+ "Microsoft.Extensions.Options;PostConfigureOptions<,,,,,>;get_Action;();generated",
+ "Microsoft.Extensions.Options;PostConfigureOptions<,,,,,>;get_Dependency1;();generated",
+ "Microsoft.Extensions.Options;PostConfigureOptions<,,,,,>;get_Dependency2;();generated",
+ "Microsoft.Extensions.Options;PostConfigureOptions<,,,,,>;get_Dependency3;();generated",
+ "Microsoft.Extensions.Options;PostConfigureOptions<,,,,,>;get_Dependency4;();generated",
+ "Microsoft.Extensions.Options;PostConfigureOptions<,,,,,>;get_Dependency5;();generated",
+ "Microsoft.Extensions.Options;PostConfigureOptions<,,,,,>;get_Name;();generated",
+ "Microsoft.Extensions.Options;PostConfigureOptions<,,,,>;PostConfigure;(System.String,TOptions);generated",
+ "Microsoft.Extensions.Options;PostConfigureOptions<,,,,>;PostConfigure;(TOptions);generated",
+ "Microsoft.Extensions.Options;PostConfigureOptions<,,,,>;get_Action;();generated",
+ "Microsoft.Extensions.Options;PostConfigureOptions<,,,,>;get_Dependency1;();generated",
+ "Microsoft.Extensions.Options;PostConfigureOptions<,,,,>;get_Dependency2;();generated",
+ "Microsoft.Extensions.Options;PostConfigureOptions<,,,,>;get_Dependency3;();generated",
+ "Microsoft.Extensions.Options;PostConfigureOptions<,,,,>;get_Dependency4;();generated",
+ "Microsoft.Extensions.Options;PostConfigureOptions<,,,,>;get_Name;();generated",
+ "Microsoft.Extensions.Options;PostConfigureOptions<,,,>;PostConfigure;(System.String,TOptions);generated",
+ "Microsoft.Extensions.Options;PostConfigureOptions<,,,>;PostConfigure;(TOptions);generated",
+ "Microsoft.Extensions.Options;PostConfigureOptions<,,,>;get_Action;();generated",
+ "Microsoft.Extensions.Options;PostConfigureOptions<,,,>;get_Dependency1;();generated",
+ "Microsoft.Extensions.Options;PostConfigureOptions<,,,>;get_Dependency2;();generated",
+ "Microsoft.Extensions.Options;PostConfigureOptions<,,,>;get_Dependency3;();generated",
+ "Microsoft.Extensions.Options;PostConfigureOptions<,,,>;get_Name;();generated",
+ "Microsoft.Extensions.Options;PostConfigureOptions<,,>;PostConfigure;(System.String,TOptions);generated",
+ "Microsoft.Extensions.Options;PostConfigureOptions<,,>;PostConfigure;(TOptions);generated",
+ "Microsoft.Extensions.Options;PostConfigureOptions<,,>;get_Action;();generated",
+ "Microsoft.Extensions.Options;PostConfigureOptions<,,>;get_Dependency1;();generated",
+ "Microsoft.Extensions.Options;PostConfigureOptions<,,>;get_Dependency2;();generated",
+ "Microsoft.Extensions.Options;PostConfigureOptions<,,>;get_Name;();generated",
+ "Microsoft.Extensions.Options;PostConfigureOptions<,>;PostConfigure;(System.String,TOptions);generated",
+ "Microsoft.Extensions.Options;PostConfigureOptions<,>;PostConfigure;(TOptions);generated",
+ "Microsoft.Extensions.Options;PostConfigureOptions<,>;get_Action;();generated",
+ "Microsoft.Extensions.Options;PostConfigureOptions<,>;get_Dependency;();generated",
+ "Microsoft.Extensions.Options;PostConfigureOptions<,>;get_Name;();generated",
+ "Microsoft.Extensions.Options;PostConfigureOptions<>;PostConfigure;(System.String,TOptions);generated",
+ "Microsoft.Extensions.Options;PostConfigureOptions<>;get_Action;();generated",
+ "Microsoft.Extensions.Options;PostConfigureOptions<>;get_Name;();generated",
+ "Microsoft.Extensions.Options;ValidateOptions<,,,,,>;Validate;(System.String,TOptions);generated",
+ "Microsoft.Extensions.Options;ValidateOptions<,,,,,>;get_Dependency1;();generated",
+ "Microsoft.Extensions.Options;ValidateOptions<,,,,,>;get_Dependency2;();generated",
+ "Microsoft.Extensions.Options;ValidateOptions<,,,,,>;get_Dependency3;();generated",
+ "Microsoft.Extensions.Options;ValidateOptions<,,,,,>;get_Dependency4;();generated",
+ "Microsoft.Extensions.Options;ValidateOptions<,,,,,>;get_Dependency5;();generated",
+ "Microsoft.Extensions.Options;ValidateOptions<,,,,,>;get_FailureMessage;();generated",
+ "Microsoft.Extensions.Options;ValidateOptions<,,,,,>;get_Name;();generated",
+ "Microsoft.Extensions.Options;ValidateOptions<,,,,,>;get_Validation;();generated",
+ "Microsoft.Extensions.Options;ValidateOptions<,,,,>;Validate;(System.String,TOptions);generated",
+ "Microsoft.Extensions.Options;ValidateOptions<,,,,>;get_Dependency1;();generated",
+ "Microsoft.Extensions.Options;ValidateOptions<,,,,>;get_Dependency2;();generated",
+ "Microsoft.Extensions.Options;ValidateOptions<,,,,>;get_Dependency3;();generated",
+ "Microsoft.Extensions.Options;ValidateOptions<,,,,>;get_Dependency4;();generated",
+ "Microsoft.Extensions.Options;ValidateOptions<,,,,>;get_FailureMessage;();generated",
+ "Microsoft.Extensions.Options;ValidateOptions<,,,,>;get_Name;();generated",
+ "Microsoft.Extensions.Options;ValidateOptions<,,,,>;get_Validation;();generated",
+ "Microsoft.Extensions.Options;ValidateOptions<,,,>;Validate;(System.String,TOptions);generated",
+ "Microsoft.Extensions.Options;ValidateOptions<,,,>;get_Dependency1;();generated",
+ "Microsoft.Extensions.Options;ValidateOptions<,,,>;get_Dependency2;();generated",
+ "Microsoft.Extensions.Options;ValidateOptions<,,,>;get_Dependency3;();generated",
+ "Microsoft.Extensions.Options;ValidateOptions<,,,>;get_FailureMessage;();generated",
+ "Microsoft.Extensions.Options;ValidateOptions<,,,>;get_Name;();generated",
+ "Microsoft.Extensions.Options;ValidateOptions<,,,>;get_Validation;();generated",
+ "Microsoft.Extensions.Options;ValidateOptions<,,>;Validate;(System.String,TOptions);generated",
+ "Microsoft.Extensions.Options;ValidateOptions<,,>;get_Dependency1;();generated",
+ "Microsoft.Extensions.Options;ValidateOptions<,,>;get_Dependency2;();generated",
+ "Microsoft.Extensions.Options;ValidateOptions<,,>;get_FailureMessage;();generated",
+ "Microsoft.Extensions.Options;ValidateOptions<,,>;get_Name;();generated",
+ "Microsoft.Extensions.Options;ValidateOptions<,,>;get_Validation;();generated",
+ "Microsoft.Extensions.Options;ValidateOptions<,>;Validate;(System.String,TOptions);generated",
+ "Microsoft.Extensions.Options;ValidateOptions<,>;get_Dependency;();generated",
+ "Microsoft.Extensions.Options;ValidateOptions<,>;get_FailureMessage;();generated",
+ "Microsoft.Extensions.Options;ValidateOptions<,>;get_Name;();generated",
+ "Microsoft.Extensions.Options;ValidateOptions<,>;get_Validation;();generated",
+ "Microsoft.Extensions.Options;ValidateOptions<>;Validate;(System.String,TOptions);generated",
+ "Microsoft.Extensions.Options;ValidateOptions<>;get_FailureMessage;();generated",
+ "Microsoft.Extensions.Options;ValidateOptions<>;get_Name;();generated",
+ "Microsoft.Extensions.Options;ValidateOptions<>;get_Validation;();generated",
+ "Microsoft.Extensions.Options;ValidateOptionsResult;Fail;(System.Collections.Generic.IEnumerable);generated",
+ "Microsoft.Extensions.Options;ValidateOptionsResult;Fail;(System.String);generated",
+ "Microsoft.Extensions.Options;ValidateOptionsResult;get_Failed;();generated",
+ "Microsoft.Extensions.Options;ValidateOptionsResult;get_FailureMessage;();generated",
+ "Microsoft.Extensions.Options;ValidateOptionsResult;get_Failures;();generated",
+ "Microsoft.Extensions.Options;ValidateOptionsResult;get_Skipped;();generated",
+ "Microsoft.Extensions.Options;ValidateOptionsResult;get_Succeeded;();generated",
+ "Microsoft.Extensions.Options;ValidateOptionsResult;set_Failed;(System.Boolean);generated",
+ "Microsoft.Extensions.Options;ValidateOptionsResult;set_FailureMessage;(System.String);generated",
+ "Microsoft.Extensions.Options;ValidateOptionsResult;set_Failures;(System.Collections.Generic.IEnumerable);generated",
+ "Microsoft.Extensions.Options;ValidateOptionsResult;set_Skipped;(System.Boolean);generated",
+ "Microsoft.Extensions.Options;ValidateOptionsResult;set_Succeeded;(System.Boolean);generated",
+ "Microsoft.Extensions.Primitives;CancellationChangeToken;CancellationChangeToken;(System.Threading.CancellationToken);generated",
+ "Microsoft.Extensions.Primitives;CancellationChangeToken;get_ActiveChangeCallbacks;();generated",
+ "Microsoft.Extensions.Primitives;CancellationChangeToken;get_HasChanged;();generated",
+ "Microsoft.Extensions.Primitives;CancellationChangeToken;set_ActiveChangeCallbacks;(System.Boolean);generated",
+ "Microsoft.Extensions.Primitives;CompositeChangeToken;CompositeChangeToken;(System.Collections.Generic.IReadOnlyList);generated",
+ "Microsoft.Extensions.Primitives;CompositeChangeToken;get_ActiveChangeCallbacks;();generated",
+ "Microsoft.Extensions.Primitives;CompositeChangeToken;get_ChangeTokens;();generated",
+ "Microsoft.Extensions.Primitives;CompositeChangeToken;get_HasChanged;();generated",
+ "Microsoft.Extensions.Primitives;IChangeToken;get_ActiveChangeCallbacks;();generated",
+ "Microsoft.Extensions.Primitives;IChangeToken;get_HasChanged;();generated",
+ "Microsoft.Extensions.Primitives;StringSegment;AsMemory;();generated",
+ "Microsoft.Extensions.Primitives;StringSegment;AsSpan;();generated",
+ "Microsoft.Extensions.Primitives;StringSegment;AsSpan;(System.Int32);generated",
+ "Microsoft.Extensions.Primitives;StringSegment;AsSpan;(System.Int32,System.Int32);generated",
+ "Microsoft.Extensions.Primitives;StringSegment;Compare;(Microsoft.Extensions.Primitives.StringSegment,Microsoft.Extensions.Primitives.StringSegment,System.StringComparison);generated",
+ "Microsoft.Extensions.Primitives;StringSegment;EndsWith;(System.String,System.StringComparison);generated",
+ "Microsoft.Extensions.Primitives;StringSegment;Equals;(Microsoft.Extensions.Primitives.StringSegment);generated",
+ "Microsoft.Extensions.Primitives;StringSegment;Equals;(Microsoft.Extensions.Primitives.StringSegment,Microsoft.Extensions.Primitives.StringSegment,System.StringComparison);generated",
+ "Microsoft.Extensions.Primitives;StringSegment;Equals;(Microsoft.Extensions.Primitives.StringSegment,System.StringComparison);generated",
+ "Microsoft.Extensions.Primitives;StringSegment;Equals;(System.Object);generated",
+ "Microsoft.Extensions.Primitives;StringSegment;Equals;(System.String);generated",
+ "Microsoft.Extensions.Primitives;StringSegment;Equals;(System.String,System.StringComparison);generated",
+ "Microsoft.Extensions.Primitives;StringSegment;GetHashCode;();generated",
+ "Microsoft.Extensions.Primitives;StringSegment;IndexOf;(System.Char);generated",
+ "Microsoft.Extensions.Primitives;StringSegment;IndexOf;(System.Char,System.Int32);generated",
+ "Microsoft.Extensions.Primitives;StringSegment;IndexOf;(System.Char,System.Int32,System.Int32);generated",
+ "Microsoft.Extensions.Primitives;StringSegment;IndexOfAny;(System.Char[]);generated",
+ "Microsoft.Extensions.Primitives;StringSegment;IndexOfAny;(System.Char[],System.Int32);generated",
+ "Microsoft.Extensions.Primitives;StringSegment;IndexOfAny;(System.Char[],System.Int32,System.Int32);generated",
+ "Microsoft.Extensions.Primitives;StringSegment;IsNullOrEmpty;(Microsoft.Extensions.Primitives.StringSegment);generated",
+ "Microsoft.Extensions.Primitives;StringSegment;LastIndexOf;(System.Char);generated",
+ "Microsoft.Extensions.Primitives;StringSegment;StartsWith;(System.String,System.StringComparison);generated",
+ "Microsoft.Extensions.Primitives;StringSegment;StringSegment;(System.String);generated",
+ "Microsoft.Extensions.Primitives;StringSegment;StringSegment;(System.String,System.Int32,System.Int32);generated",
+ "Microsoft.Extensions.Primitives;StringSegment;Subsegment;(System.Int32);generated",
+ "Microsoft.Extensions.Primitives;StringSegment;Subsegment;(System.Int32,System.Int32);generated",
+ "Microsoft.Extensions.Primitives;StringSegment;Substring;(System.Int32);generated",
+ "Microsoft.Extensions.Primitives;StringSegment;Substring;(System.Int32,System.Int32);generated",
+ "Microsoft.Extensions.Primitives;StringSegment;ToString;();generated",
+ "Microsoft.Extensions.Primitives;StringSegment;Trim;();generated",
+ "Microsoft.Extensions.Primitives;StringSegment;TrimEnd;();generated",
+ "Microsoft.Extensions.Primitives;StringSegment;TrimStart;();generated",
+ "Microsoft.Extensions.Primitives;StringSegment;get_Buffer;();generated",
+ "Microsoft.Extensions.Primitives;StringSegment;get_HasValue;();generated",
+ "Microsoft.Extensions.Primitives;StringSegment;get_Item;(System.Int32);generated",
+ "Microsoft.Extensions.Primitives;StringSegment;get_Length;();generated",
+ "Microsoft.Extensions.Primitives;StringSegment;get_Offset;();generated",
+ "Microsoft.Extensions.Primitives;StringSegment;get_Value;();generated",
+ "Microsoft.Extensions.Primitives;StringSegment;op_Equality;(Microsoft.Extensions.Primitives.StringSegment,Microsoft.Extensions.Primitives.StringSegment);generated",
+ "Microsoft.Extensions.Primitives;StringSegment;op_Inequality;(Microsoft.Extensions.Primitives.StringSegment,Microsoft.Extensions.Primitives.StringSegment);generated",
+ "Microsoft.Extensions.Primitives;StringSegmentComparer;Compare;(Microsoft.Extensions.Primitives.StringSegment,Microsoft.Extensions.Primitives.StringSegment);generated",
+ "Microsoft.Extensions.Primitives;StringSegmentComparer;Equals;(Microsoft.Extensions.Primitives.StringSegment,Microsoft.Extensions.Primitives.StringSegment);generated",
+ "Microsoft.Extensions.Primitives;StringSegmentComparer;GetHashCode;(Microsoft.Extensions.Primitives.StringSegment);generated",
+ "Microsoft.Extensions.Primitives;StringSegmentComparer;get_Ordinal;();generated",
+ "Microsoft.Extensions.Primitives;StringSegmentComparer;get_OrdinalIgnoreCase;();generated",
+ "Microsoft.Extensions.Primitives;StringTokenizer+Enumerator;Dispose;();generated",
+ "Microsoft.Extensions.Primitives;StringTokenizer+Enumerator;MoveNext;();generated",
+ "Microsoft.Extensions.Primitives;StringTokenizer+Enumerator;Reset;();generated",
+ "Microsoft.Extensions.Primitives;StringTokenizer+Enumerator;get_Current;();generated",
+ "Microsoft.Extensions.Primitives;StringTokenizer+Enumerator;set_Current;(Microsoft.Extensions.Primitives.StringSegment);generated",
+ "Microsoft.Extensions.Primitives;StringValues+Enumerator;Dispose;();generated",
+ "Microsoft.Extensions.Primitives;StringValues+Enumerator;Enumerator;(Microsoft.Extensions.Primitives.StringValues);generated",
+ "Microsoft.Extensions.Primitives;StringValues+Enumerator;MoveNext;();generated",
+ "Microsoft.Extensions.Primitives;StringValues+Enumerator;Reset;();generated",
+ "Microsoft.Extensions.Primitives;StringValues;Clear;();generated",
+ "Microsoft.Extensions.Primitives;StringValues;op_Equality;(Microsoft.Extensions.Primitives.StringValues,Microsoft.Extensions.Primitives.StringValues);generated",
+ "Microsoft.Extensions.Primitives;StringValues;op_Equality;(Microsoft.Extensions.Primitives.StringValues,System.Object);generated",
+ "Microsoft.Extensions.Primitives;StringValues;op_Equality;(Microsoft.Extensions.Primitives.StringValues,System.String);generated",
+ "Microsoft.Extensions.Primitives;StringValues;op_Equality;(Microsoft.Extensions.Primitives.StringValues,System.String[]);generated",
+ "Microsoft.Extensions.Primitives;StringValues;op_Equality;(System.Object,Microsoft.Extensions.Primitives.StringValues);generated",
+ "Microsoft.Extensions.Primitives;StringValues;op_Equality;(System.String,Microsoft.Extensions.Primitives.StringValues);generated",
+ "Microsoft.Extensions.Primitives;StringValues;op_Equality;(System.String[],Microsoft.Extensions.Primitives.StringValues);generated",
+ "Microsoft.Extensions.Primitives;StringValues;op_Inequality;(Microsoft.Extensions.Primitives.StringValues,Microsoft.Extensions.Primitives.StringValues);generated",
+ "Microsoft.Extensions.Primitives;StringValues;op_Inequality;(Microsoft.Extensions.Primitives.StringValues,System.Object);generated",
+ "Microsoft.Extensions.Primitives;StringValues;op_Inequality;(Microsoft.Extensions.Primitives.StringValues,System.String);generated",
+ "Microsoft.Extensions.Primitives;StringValues;op_Inequality;(Microsoft.Extensions.Primitives.StringValues,System.String[]);generated",
+ "Microsoft.Extensions.Primitives;StringValues;op_Inequality;(System.Object,Microsoft.Extensions.Primitives.StringValues);generated",
+ "Microsoft.Extensions.Primitives;StringValues;op_Inequality;(System.String,Microsoft.Extensions.Primitives.StringValues);generated",
+ "Microsoft.Extensions.Primitives;StringValues;op_Inequality;(System.String[],Microsoft.Extensions.Primitives.StringValues);generated",
+ "Microsoft.Interop.Analyzers;ConvertToGeneratedDllImportAnalyzer;Initialize;(Microsoft.CodeAnalysis.Diagnostics.AnalysisContext);generated",
+ "Microsoft.Interop.Analyzers;ConvertToGeneratedDllImportAnalyzer;get_SupportedDiagnostics;();generated",
+ "Microsoft.Interop.Analyzers;ConvertToGeneratedDllImportFixer;GetFixAllProvider;();generated",
+ "Microsoft.Interop.Analyzers;ConvertToGeneratedDllImportFixer;RegisterCodeFixesAsync;(Microsoft.CodeAnalysis.CodeFixes.CodeFixContext);generated",
+ "Microsoft.Interop.Analyzers;ConvertToGeneratedDllImportFixer;get_FixableDiagnosticIds;();generated",
+ "Microsoft.Interop.Analyzers;GeneratedDllImportAnalyzer;Initialize;(Microsoft.CodeAnalysis.Diagnostics.AnalysisContext);generated",
+ "Microsoft.Interop.Analyzers;GeneratedDllImportAnalyzer;get_SupportedDiagnostics;();generated",
+ "Microsoft.Interop.Analyzers;ManualTypeMarshallingAnalyzer;Initialize;(Microsoft.CodeAnalysis.Diagnostics.AnalysisContext);generated",
+ "Microsoft.Interop.Analyzers;ManualTypeMarshallingAnalyzer;get_SupportedDiagnostics;();generated",
+ "Microsoft.Interop;AnsiStringMarshaller;AsArgument;(Microsoft.Interop.TypePositionInfo,Microsoft.Interop.StubCodeContext);generated",
+ "Microsoft.Interop;AnsiStringMarshaller;AsNativeType;(Microsoft.Interop.TypePositionInfo);generated",
+ "Microsoft.Interop;AnsiStringMarshaller;AsParameter;(Microsoft.Interop.TypePositionInfo);generated",
+ "Microsoft.Interop;AnsiStringMarshaller;Generate;(Microsoft.Interop.TypePositionInfo,Microsoft.Interop.StubCodeContext);generated",
+ "Microsoft.Interop;AnsiStringMarshaller;GenerateAllocationExpression;(Microsoft.Interop.TypePositionInfo,Microsoft.Interop.StubCodeContext,Microsoft.CodeAnalysis.SyntaxToken,System.Boolean);generated",
+ "Microsoft.Interop;AnsiStringMarshaller;GenerateByteLengthCalculationExpression;(Microsoft.Interop.TypePositionInfo,Microsoft.Interop.StubCodeContext);generated",
+ "Microsoft.Interop;AnsiStringMarshaller;GenerateFreeExpression;(Microsoft.Interop.TypePositionInfo,Microsoft.Interop.StubCodeContext);generated",
+ "Microsoft.Interop;AnsiStringMarshaller;GenerateStackallocOnlyValueMarshalling;(Microsoft.Interop.TypePositionInfo,Microsoft.Interop.StubCodeContext,Microsoft.CodeAnalysis.SyntaxToken,Microsoft.CodeAnalysis.SyntaxToken);generated",
+ "Microsoft.Interop;AnsiStringMarshaller;SupportsByValueMarshalKind;(Microsoft.Interop.ByValueContentsMarshalKind,Microsoft.Interop.StubCodeContext);generated",
+ "Microsoft.Interop;AnsiStringMarshaller;UsesNativeIdentifier;(Microsoft.Interop.TypePositionInfo,Microsoft.Interop.StubCodeContext);generated",
+ "Microsoft.Interop;ArrayMarshaller;AsArgument;(Microsoft.Interop.TypePositionInfo,Microsoft.Interop.StubCodeContext);generated",
+ "Microsoft.Interop;ArrayMarshaller;AsParameter;(Microsoft.Interop.TypePositionInfo);generated",
+ "Microsoft.Interop;ArrayMarshaller;Generate;(Microsoft.Interop.TypePositionInfo,Microsoft.Interop.StubCodeContext);generated",
+ "Microsoft.Interop;ArrayMarshaller;IsSupported;(Microsoft.Interop.TargetFramework,System.Version);generated",
+ "Microsoft.Interop;ArrayMarshaller;SupportsByValueMarshalKind;(Microsoft.Interop.ByValueContentsMarshalKind,Microsoft.Interop.StubCodeContext);generated",
+ "Microsoft.Interop;ArrayMarshaller;UsesNativeIdentifier;(Microsoft.Interop.TypePositionInfo,Microsoft.Interop.StubCodeContext);generated",
+ "Microsoft.Interop;AttributedMarshallingModelGeneratorFactory;Create;(Microsoft.Interop.TypePositionInfo,Microsoft.Interop.StubCodeContext);generated",
+ "Microsoft.Interop;AttributedMarshallingModelGeneratorFactory;get_Options;();generated",
+ "Microsoft.Interop;BlittableMarshaller;AsArgument;(Microsoft.Interop.TypePositionInfo,Microsoft.Interop.StubCodeContext);generated",
+ "Microsoft.Interop;BlittableMarshaller;AsNativeType;(Microsoft.Interop.TypePositionInfo);generated",
+ "Microsoft.Interop;BlittableMarshaller;AsParameter;(Microsoft.Interop.TypePositionInfo);generated",
+ "Microsoft.Interop;BlittableMarshaller;Generate;(Microsoft.Interop.TypePositionInfo,Microsoft.Interop.StubCodeContext);generated",
+ "Microsoft.Interop;BlittableMarshaller;IsSupported;(Microsoft.Interop.TargetFramework,System.Version);generated",
+ "Microsoft.Interop;BlittableMarshaller;SupportsByValueMarshalKind;(Microsoft.Interop.ByValueContentsMarshalKind,Microsoft.Interop.StubCodeContext);generated",
+ "Microsoft.Interop;BlittableMarshaller;UsesNativeIdentifier;(Microsoft.Interop.TypePositionInfo,Microsoft.Interop.StubCodeContext);generated",
+ "Microsoft.Interop;BlittableTypeAttributeInfo;get_EqualityContract;();generated",
+ "Microsoft.Interop;BlittableTypeAttributeInfo;op_Equality;(Microsoft.Interop.BlittableTypeAttributeInfo,Microsoft.Interop.BlittableTypeAttributeInfo);generated",
+ "Microsoft.Interop;BlittableTypeAttributeInfo;op_Inequality;(Microsoft.Interop.BlittableTypeAttributeInfo,Microsoft.Interop.BlittableTypeAttributeInfo);generated",
+ "Microsoft.Interop;BoolMarshallerBase;AsArgument;(Microsoft.Interop.TypePositionInfo,Microsoft.Interop.StubCodeContext);generated",
+ "Microsoft.Interop;BoolMarshallerBase;AsParameter;(Microsoft.Interop.TypePositionInfo);generated",
+ "Microsoft.Interop;BoolMarshallerBase;Generate;(Microsoft.Interop.TypePositionInfo,Microsoft.Interop.StubCodeContext);generated",
+ "Microsoft.Interop;BoolMarshallerBase;IsSupported;(Microsoft.Interop.TargetFramework,System.Version);generated",
+ "Microsoft.Interop;BoolMarshallerBase;SupportsByValueMarshalKind;(Microsoft.Interop.ByValueContentsMarshalKind,Microsoft.Interop.StubCodeContext);generated",
+ "Microsoft.Interop;BoolMarshallerBase;UsesNativeIdentifier;(Microsoft.Interop.TypePositionInfo,Microsoft.Interop.StubCodeContext);generated",
+ "Microsoft.Interop;ByValueContentsMarshalKindValidator;Create;(Microsoft.Interop.TypePositionInfo,Microsoft.Interop.StubCodeContext);generated",
+ "Microsoft.Interop;ByteBoolMarshaller;ByteBoolMarshaller;();generated",
+ "Microsoft.Interop;ConditionalStackallocMarshallingGenerator;AsArgument;(Microsoft.Interop.TypePositionInfo,Microsoft.Interop.StubCodeContext);generated",
+ "Microsoft.Interop;ConditionalStackallocMarshallingGenerator;AsNativeType;(Microsoft.Interop.TypePositionInfo);generated",
+ "Microsoft.Interop;ConditionalStackallocMarshallingGenerator;AsParameter;(Microsoft.Interop.TypePositionInfo);generated",
+ "Microsoft.Interop;ConditionalStackallocMarshallingGenerator;Generate;(Microsoft.Interop.TypePositionInfo,Microsoft.Interop.StubCodeContext);generated",
+ "Microsoft.Interop;ConditionalStackallocMarshallingGenerator;GenerateAllocationExpression;(Microsoft.Interop.TypePositionInfo,Microsoft.Interop.StubCodeContext,Microsoft.CodeAnalysis.SyntaxToken,System.Boolean);generated",
+ "Microsoft.Interop;ConditionalStackallocMarshallingGenerator;GenerateByteLengthCalculationExpression;(Microsoft.Interop.TypePositionInfo,Microsoft.Interop.StubCodeContext);generated",
+ "Microsoft.Interop;ConditionalStackallocMarshallingGenerator;GenerateConditionalAllocationFreeSyntax;(Microsoft.Interop.TypePositionInfo,Microsoft.Interop.StubCodeContext);generated",
+ "Microsoft.Interop;ConditionalStackallocMarshallingGenerator;GenerateConditionalAllocationSyntax;(Microsoft.Interop.TypePositionInfo,Microsoft.Interop.StubCodeContext,System.Int32);generated",
+ "Microsoft.Interop;ConditionalStackallocMarshallingGenerator;GenerateFreeExpression;(Microsoft.Interop.TypePositionInfo,Microsoft.Interop.StubCodeContext);generated",
+ "Microsoft.Interop;ConditionalStackallocMarshallingGenerator;GenerateNullCheckExpression;(Microsoft.Interop.TypePositionInfo,Microsoft.Interop.StubCodeContext);generated",
+ "Microsoft.Interop;ConditionalStackallocMarshallingGenerator;GenerateStackallocOnlyValueMarshalling;(Microsoft.Interop.TypePositionInfo,Microsoft.Interop.StubCodeContext,Microsoft.CodeAnalysis.SyntaxToken,Microsoft.CodeAnalysis.SyntaxToken);generated",
+ "Microsoft.Interop;ConditionalStackallocMarshallingGenerator;IsSupported;(Microsoft.Interop.TargetFramework,System.Version);generated",
+ "Microsoft.Interop;ConditionalStackallocMarshallingGenerator;SupportsByValueMarshalKind;(Microsoft.Interop.ByValueContentsMarshalKind,Microsoft.Interop.StubCodeContext);generated",
+ "Microsoft.Interop;ConditionalStackallocMarshallingGenerator;TryGenerateSetupSyntax;(Microsoft.Interop.TypePositionInfo,Microsoft.Interop.StubCodeContext,Microsoft.CodeAnalysis.CSharp.Syntax.StatementSyntax);generated",
+ "Microsoft.Interop;ConditionalStackallocMarshallingGenerator;UsesConditionalStackAlloc;(Microsoft.Interop.TypePositionInfo,Microsoft.Interop.StubCodeContext);generated",
+ "Microsoft.Interop;ConditionalStackallocMarshallingGenerator;UsesNativeIdentifier;(Microsoft.Interop.TypePositionInfo,Microsoft.Interop.StubCodeContext);generated",
+ "Microsoft.Interop;ConstSizeCountInfo;ConstSizeCountInfo;(System.Int32);generated",
+ "Microsoft.Interop;ConstSizeCountInfo;get_EqualityContract;();generated",
+ "Microsoft.Interop;ConstSizeCountInfo;get_Size;();generated",
+ "Microsoft.Interop;ConstSizeCountInfo;op_Equality;(Microsoft.Interop.ConstSizeCountInfo,Microsoft.Interop.ConstSizeCountInfo);generated",
+ "Microsoft.Interop;ConstSizeCountInfo;op_Inequality;(Microsoft.Interop.ConstSizeCountInfo,Microsoft.Interop.ConstSizeCountInfo);generated",
+ "Microsoft.Interop;ConstSizeCountInfo;set_Size;(System.Int32);generated",
+ "Microsoft.Interop;CountElementCountInfo;CountElementCountInfo;(Microsoft.Interop.TypePositionInfo);generated",
+ "Microsoft.Interop;CountElementCountInfo;get_ElementInfo;();generated",
+ "Microsoft.Interop;CountElementCountInfo;get_EqualityContract;();generated",
+ "Microsoft.Interop;CountElementCountInfo;op_Equality;(Microsoft.Interop.CountElementCountInfo,Microsoft.Interop.CountElementCountInfo);generated",
+ "Microsoft.Interop;CountElementCountInfo;op_Inequality;(Microsoft.Interop.CountElementCountInfo,Microsoft.Interop.CountElementCountInfo);generated",
+ "Microsoft.Interop;CountElementCountInfo;set_ElementInfo;(Microsoft.Interop.TypePositionInfo);generated",
+ "Microsoft.Interop;CountInfo;get_EqualityContract;();generated",
+ "Microsoft.Interop;CountInfo;op_Equality;(Microsoft.Interop.CountInfo,Microsoft.Interop.CountInfo);generated",
+ "Microsoft.Interop;CountInfo;op_Inequality;(Microsoft.Interop.CountInfo,Microsoft.Interop.CountInfo);generated",
+ "Microsoft.Interop;DefaultMarshallingGeneratorFactory;Create;(Microsoft.Interop.TypePositionInfo,Microsoft.Interop.StubCodeContext);generated",
+ "Microsoft.Interop;DefaultMarshallingGeneratorFactory;DefaultMarshallingGeneratorFactory;(Microsoft.Interop.InteropGenerationOptions);generated",
+ "Microsoft.Interop;DefaultMarshallingInfo;DefaultMarshallingInfo;(Microsoft.Interop.CharEncoding);generated",
+ "Microsoft.Interop;DefaultMarshallingInfo;get_CharEncoding;();generated",
+ "Microsoft.Interop;DefaultMarshallingInfo;op_Equality;(Microsoft.Interop.DefaultMarshallingInfo,Microsoft.Interop.DefaultMarshallingInfo);generated",
+ "Microsoft.Interop;DefaultMarshallingInfo;op_Inequality;(Microsoft.Interop.DefaultMarshallingInfo,Microsoft.Interop.DefaultMarshallingInfo);generated",
+ "Microsoft.Interop;DefaultMarshallingInfo;set_CharEncoding;(Microsoft.Interop.CharEncoding);generated",
+ "Microsoft.Interop;DelegateMarshaller;AsArgument;(Microsoft.Interop.TypePositionInfo,Microsoft.Interop.StubCodeContext);generated",
+ "Microsoft.Interop;DelegateMarshaller;AsNativeType;(Microsoft.Interop.TypePositionInfo);generated",
+ "Microsoft.Interop;DelegateMarshaller;AsParameter;(Microsoft.Interop.TypePositionInfo);generated",
+ "Microsoft.Interop;DelegateMarshaller;Generate;(Microsoft.Interop.TypePositionInfo,Microsoft.Interop.StubCodeContext);generated",
+ "Microsoft.Interop;DelegateMarshaller;IsSupported;(Microsoft.Interop.TargetFramework,System.Version);generated",
+ "Microsoft.Interop;DelegateMarshaller;SupportsByValueMarshalKind;(Microsoft.Interop.ByValueContentsMarshalKind,Microsoft.Interop.StubCodeContext);generated",
+ "Microsoft.Interop;DelegateMarshaller;UsesNativeIdentifier;(Microsoft.Interop.TypePositionInfo,Microsoft.Interop.StubCodeContext);generated",
+ "Microsoft.Interop;DelegateTypeInfo;DelegateTypeInfo;(System.String,System.String);generated",
+ "Microsoft.Interop;DelegateTypeInfo;get_EqualityContract;();generated",
+ "Microsoft.Interop;DelegateTypeInfo;op_Equality;(Microsoft.Interop.DelegateTypeInfo,Microsoft.Interop.DelegateTypeInfo);generated",
+ "Microsoft.Interop;DelegateTypeInfo;op_Inequality;(Microsoft.Interop.DelegateTypeInfo,Microsoft.Interop.DelegateTypeInfo);generated",
+ "Microsoft.Interop;DiagnosticExtensions;CreateDiagnostic;(Microsoft.CodeAnalysis.AttributeData,Microsoft.CodeAnalysis.DiagnosticDescriptor,System.Object[]);generated",
+ "Microsoft.Interop;DiagnosticExtensions;CreateDiagnostic;(Microsoft.CodeAnalysis.ISymbol,Microsoft.CodeAnalysis.DiagnosticDescriptor,System.Object[]);generated",
+ "Microsoft.Interop;DiagnosticExtensions;CreateDiagnostic;(Microsoft.CodeAnalysis.Location,Microsoft.CodeAnalysis.DiagnosticDescriptor,System.Object[]);generated",
+ "Microsoft.Interop;DiagnosticExtensions;CreateDiagnostic;(System.Collections.Immutable.ImmutableArray,Microsoft.CodeAnalysis.DiagnosticDescriptor,System.Object[]);generated",
+ "Microsoft.Interop;DllImportGenerator+IncrementalityTracker+ExecutedStepInfo;ExecutedStepInfo;(Microsoft.Interop.DllImportGenerator+IncrementalityTracker+StepName,System.Object);generated",
+ "Microsoft.Interop;DllImportGenerator+IncrementalityTracker+ExecutedStepInfo;get_EqualityContract;();generated",
+ "Microsoft.Interop;DllImportGenerator+IncrementalityTracker+ExecutedStepInfo;get_Input;();generated",
+ "Microsoft.Interop;DllImportGenerator+IncrementalityTracker+ExecutedStepInfo;get_Step;();generated",
+ "Microsoft.Interop;DllImportGenerator+IncrementalityTracker+ExecutedStepInfo;op_Equality;(Microsoft.Interop.DllImportGenerator+IncrementalityTracker+ExecutedStepInfo,Microsoft.Interop.DllImportGenerator+IncrementalityTracker+ExecutedStepInfo);generated",
+ "Microsoft.Interop;DllImportGenerator+IncrementalityTracker+ExecutedStepInfo;op_Inequality;(Microsoft.Interop.DllImportGenerator+IncrementalityTracker+ExecutedStepInfo,Microsoft.Interop.DllImportGenerator+IncrementalityTracker+ExecutedStepInfo);generated",
+ "Microsoft.Interop;DllImportGenerator+IncrementalityTracker+ExecutedStepInfo;set_Input;(System.Object);generated",
+ "Microsoft.Interop;DllImportGenerator+IncrementalityTracker+ExecutedStepInfo;set_Step;(Microsoft.Interop.DllImportGenerator+IncrementalityTracker+StepName);generated",
+ "Microsoft.Interop;DllImportGenerator;Initialize;(Microsoft.CodeAnalysis.IncrementalGeneratorInitializationContext);generated",
+ "Microsoft.Interop;DllImportGenerator;get_IncrementalTracker;();generated",
+ "Microsoft.Interop;DllImportGenerator;set_IncrementalTracker;(Microsoft.Interop.DllImportGenerator+IncrementalityTracker);generated",
+ "Microsoft.Interop;EnumTypeInfo;EnumTypeInfo;(System.String,System.String,Microsoft.CodeAnalysis.SpecialType);generated",
+ "Microsoft.Interop;EnumTypeInfo;get_EqualityContract;();generated",
+ "Microsoft.Interop;EnumTypeInfo;get_UnderlyingType;();generated",
+ "Microsoft.Interop;EnumTypeInfo;op_Equality;(Microsoft.Interop.EnumTypeInfo,Microsoft.Interop.EnumTypeInfo);generated",
+ "Microsoft.Interop;EnumTypeInfo;op_Inequality;(Microsoft.Interop.EnumTypeInfo,Microsoft.Interop.EnumTypeInfo);generated",
+ "Microsoft.Interop;EnumTypeInfo;set_UnderlyingType;(Microsoft.CodeAnalysis.SpecialType);generated",
+ "Microsoft.Interop;Forwarder;AsArgument;(Microsoft.Interop.TypePositionInfo,Microsoft.Interop.StubCodeContext);generated",
+ "Microsoft.Interop;Forwarder;AsNativeType;(Microsoft.Interop.TypePositionInfo);generated",
+ "Microsoft.Interop;Forwarder;AsParameter;(Microsoft.Interop.TypePositionInfo);generated",
+ "Microsoft.Interop;Forwarder;Generate;(Microsoft.Interop.TypePositionInfo,Microsoft.Interop.StubCodeContext);generated",
+ "Microsoft.Interop;Forwarder;GenerateAttributesForReturnType;(Microsoft.Interop.TypePositionInfo);generated",
+ "Microsoft.Interop;Forwarder;IsSupported;(Microsoft.Interop.TargetFramework,System.Version);generated",
+ "Microsoft.Interop;Forwarder;SupportsByValueMarshalKind;(Microsoft.Interop.ByValueContentsMarshalKind,Microsoft.Interop.StubCodeContext);generated",
+ "Microsoft.Interop;Forwarder;UsesNativeIdentifier;(Microsoft.Interop.TypePositionInfo,Microsoft.Interop.StubCodeContext);generated",
+ "Microsoft.Interop;GeneratedDllImportData;GeneratedDllImportData;(System.String);generated",
+ "Microsoft.Interop;GeneratedDllImportData;get_CharSet;();generated",
+ "Microsoft.Interop;GeneratedDllImportData;get_EntryPoint;();generated",
+ "Microsoft.Interop;GeneratedDllImportData;get_ExactSpelling;();generated",
+ "Microsoft.Interop;GeneratedDllImportData;get_IsUserDefined;();generated",
+ "Microsoft.Interop;GeneratedDllImportData;get_ModuleName;();generated",
+ "Microsoft.Interop;GeneratedDllImportData;get_PreserveSig;();generated",
+ "Microsoft.Interop;GeneratedDllImportData;get_SetLastError;();generated",
+ "Microsoft.Interop;GeneratedDllImportData;op_Equality;(Microsoft.Interop.GeneratedDllImportData,Microsoft.Interop.GeneratedDllImportData);generated",
+ "Microsoft.Interop;GeneratedDllImportData;op_Inequality;(Microsoft.Interop.GeneratedDllImportData,Microsoft.Interop.GeneratedDllImportData);generated",
+ "Microsoft.Interop;GeneratedDllImportData;set_CharSet;(System.Runtime.InteropServices.CharSet);generated",
+ "Microsoft.Interop;GeneratedDllImportData;set_EntryPoint;(System.String);generated",
+ "Microsoft.Interop;GeneratedDllImportData;set_ExactSpelling;(System.Boolean);generated",
+ "Microsoft.Interop;GeneratedDllImportData;set_IsUserDefined;(Microsoft.Interop.DllImportMember);generated",
+ "Microsoft.Interop;GeneratedDllImportData;set_ModuleName;(System.String);generated",
+ "Microsoft.Interop;GeneratedDllImportData;set_PreserveSig;(System.Boolean);generated",
+ "Microsoft.Interop;GeneratedDllImportData;set_SetLastError;(System.Boolean);generated",
+ "Microsoft.Interop;GeneratedNativeMarshallingAttributeInfo;GeneratedNativeMarshallingAttributeInfo;(System.String);generated",
+ "Microsoft.Interop;GeneratedNativeMarshallingAttributeInfo;get_EqualityContract;();generated",
+ "Microsoft.Interop;GeneratedNativeMarshallingAttributeInfo;get_NativeMarshallingFullyQualifiedTypeName;();generated",
+ "Microsoft.Interop;GeneratedNativeMarshallingAttributeInfo;op_Equality;(Microsoft.Interop.GeneratedNativeMarshallingAttributeInfo,Microsoft.Interop.GeneratedNativeMarshallingAttributeInfo);generated",
+ "Microsoft.Interop;GeneratedNativeMarshallingAttributeInfo;op_Inequality;(Microsoft.Interop.GeneratedNativeMarshallingAttributeInfo,Microsoft.Interop.GeneratedNativeMarshallingAttributeInfo);generated",
+ "Microsoft.Interop;GeneratedNativeMarshallingAttributeInfo;set_NativeMarshallingFullyQualifiedTypeName;(System.String);generated",
+ "Microsoft.Interop;GeneratorDiagnostics;ReportConfigurationNotSupported;(Microsoft.CodeAnalysis.AttributeData,System.String,System.String);generated",
+ "Microsoft.Interop;GeneratorDiagnostics;ReportInvalidMarshallingAttributeInfo;(Microsoft.CodeAnalysis.AttributeData,System.String,System.String[]);generated",
+ "Microsoft.Interop;GeneratorDiagnostics;ReportMarshallingNotSupported;(Microsoft.CodeAnalysis.CSharp.Syntax.MethodDeclarationSyntax,Microsoft.Interop.TypePositionInfo,System.String);generated",
+ "Microsoft.Interop;GeneratorDiagnostics;ReportTargetFrameworkNotSupported;(System.Version);generated",
+ "Microsoft.Interop;HResultExceptionMarshaller;AsArgument;(Microsoft.Interop.TypePositionInfo,Microsoft.Interop.StubCodeContext);generated",
+ "Microsoft.Interop;HResultExceptionMarshaller;AsNativeType;(Microsoft.Interop.TypePositionInfo);generated",
+ "Microsoft.Interop;HResultExceptionMarshaller;AsParameter;(Microsoft.Interop.TypePositionInfo);generated",
+ "Microsoft.Interop;HResultExceptionMarshaller;Generate;(Microsoft.Interop.TypePositionInfo,Microsoft.Interop.StubCodeContext);generated",
+ "Microsoft.Interop;HResultExceptionMarshaller;IsSupported;(Microsoft.Interop.TargetFramework,System.Version);generated",
+ "Microsoft.Interop;HResultExceptionMarshaller;SupportsByValueMarshalKind;(Microsoft.Interop.ByValueContentsMarshalKind,Microsoft.Interop.StubCodeContext);generated",
+ "Microsoft.Interop;HResultExceptionMarshaller;UsesNativeIdentifier;(Microsoft.Interop.TypePositionInfo,Microsoft.Interop.StubCodeContext);generated",
+ "Microsoft.Interop;IAttributedReturnTypeMarshallingGenerator;GenerateAttributesForReturnType;(Microsoft.Interop.TypePositionInfo);generated",
+ "Microsoft.Interop;IGeneratorDiagnostics;ReportConfigurationNotSupported;(Microsoft.CodeAnalysis.AttributeData,System.String,System.String);generated",
+ "Microsoft.Interop;IGeneratorDiagnostics;ReportInvalidMarshallingAttributeInfo;(Microsoft.CodeAnalysis.AttributeData,System.String,System.String[]);generated",
+ "Microsoft.Interop;IGeneratorDiagnostics;ReportMarshallingNotSupported;(Microsoft.CodeAnalysis.CSharp.Syntax.MethodDeclarationSyntax,Microsoft.Interop.TypePositionInfo,System.String);generated",
+ "Microsoft.Interop;IGeneratorDiagnosticsExtensions;ReportConfigurationNotSupported;(Microsoft.Interop.IGeneratorDiagnostics,Microsoft.CodeAnalysis.AttributeData,System.String);generated",
+ "Microsoft.Interop;IMarshallingGenerator;AsArgument;(Microsoft.Interop.TypePositionInfo,Microsoft.Interop.StubCodeContext);generated",
+ "Microsoft.Interop;IMarshallingGenerator;AsNativeType;(Microsoft.Interop.TypePositionInfo);generated",
+ "Microsoft.Interop;IMarshallingGenerator;AsParameter;(Microsoft.Interop.TypePositionInfo);generated",
+ "Microsoft.Interop;IMarshallingGenerator;Generate;(Microsoft.Interop.TypePositionInfo,Microsoft.Interop.StubCodeContext);generated",
+ "Microsoft.Interop;IMarshallingGenerator;IsSupported;(Microsoft.Interop.TargetFramework,System.Version);generated",
+ "Microsoft.Interop;IMarshallingGenerator;SupportsByValueMarshalKind;(Microsoft.Interop.ByValueContentsMarshalKind,Microsoft.Interop.StubCodeContext);generated",
+ "Microsoft.Interop;IMarshallingGenerator;UsesNativeIdentifier;(Microsoft.Interop.TypePositionInfo,Microsoft.Interop.StubCodeContext);generated",
+ "Microsoft.Interop;IMarshallingGeneratorFactory;Create;(Microsoft.Interop.TypePositionInfo,Microsoft.Interop.StubCodeContext);generated",
+ "Microsoft.Interop;InteropGenerationOptions;InteropGenerationOptions;(System.Boolean,System.Boolean);generated",
+ "Microsoft.Interop;InteropGenerationOptions;get_EqualityContract;();generated",
+ "Microsoft.Interop;InteropGenerationOptions;get_UseInternalUnsafeType;();generated",
+ "Microsoft.Interop;InteropGenerationOptions;get_UseMarshalType;();generated",
+ "Microsoft.Interop;InteropGenerationOptions;op_Equality;(Microsoft.Interop.InteropGenerationOptions,Microsoft.Interop.InteropGenerationOptions);generated",
+ "Microsoft.Interop;InteropGenerationOptions;op_Inequality;(Microsoft.Interop.InteropGenerationOptions,Microsoft.Interop.InteropGenerationOptions);generated",
+ "Microsoft.Interop;InteropGenerationOptions;set_UseInternalUnsafeType;(System.Boolean);generated",
+ "Microsoft.Interop;InteropGenerationOptions;set_UseMarshalType;(System.Boolean);generated",
+ "Microsoft.Interop;ManagedTypeInfo;CreateTypeInfoForTypeSymbol;(Microsoft.CodeAnalysis.ITypeSymbol);generated",
+ "Microsoft.Interop;ManagedTypeInfo;ManagedTypeInfo;(System.String,System.String);generated",
+ "Microsoft.Interop;ManagedTypeInfo;get_DiagnosticFormattedName;();generated",
+ "Microsoft.Interop;ManagedTypeInfo;get_EqualityContract;();generated",
+ "Microsoft.Interop;ManagedTypeInfo;get_FullTypeName;();generated",
+ "Microsoft.Interop;ManagedTypeInfo;get_Syntax;();generated",
+ "Microsoft.Interop;ManagedTypeInfo;op_Equality;(Microsoft.Interop.ManagedTypeInfo,Microsoft.Interop.ManagedTypeInfo);generated",
+ "Microsoft.Interop;ManagedTypeInfo;op_Inequality;(Microsoft.Interop.ManagedTypeInfo,Microsoft.Interop.ManagedTypeInfo);generated",
+ "Microsoft.Interop;ManagedTypeInfo;set_DiagnosticFormattedName;(System.String);generated",
+ "Microsoft.Interop;ManagedTypeInfo;set_FullTypeName;(System.String);generated",
+ "Microsoft.Interop;ManualTypeMarshallingHelper;FindGetPinnableReference;(Microsoft.CodeAnalysis.ITypeSymbol);generated",
+ "Microsoft.Interop;ManualTypeMarshallingHelper;FindValueProperty;(Microsoft.CodeAnalysis.ITypeSymbol);generated",
+ "Microsoft.Interop;ManualTypeMarshallingHelper;HasFreeNativeMethod;(Microsoft.CodeAnalysis.ITypeSymbol);generated",
+ "Microsoft.Interop;ManualTypeMarshallingHelper;HasNativeValueStorageProperty;(Microsoft.CodeAnalysis.ITypeSymbol,Microsoft.CodeAnalysis.ITypeSymbol);generated",
+ "Microsoft.Interop;ManualTypeMarshallingHelper;HasSetUnmarshalledCollectionLengthMethod;(Microsoft.CodeAnalysis.ITypeSymbol);generated",
+ "Microsoft.Interop;ManualTypeMarshallingHelper;HasToManagedMethod;(Microsoft.CodeAnalysis.ITypeSymbol,Microsoft.CodeAnalysis.ITypeSymbol);generated",
+ "Microsoft.Interop;ManualTypeMarshallingHelper;IsCallerAllocatedSpanConstructor;(Microsoft.CodeAnalysis.IMethodSymbol,Microsoft.CodeAnalysis.ITypeSymbol,Microsoft.CodeAnalysis.ITypeSymbol,Microsoft.Interop.ManualTypeMarshallingHelper+NativeTypeMarshallingVariant);generated",
+ "Microsoft.Interop;ManualTypeMarshallingHelper;IsManagedToNativeConstructor;(Microsoft.CodeAnalysis.IMethodSymbol,Microsoft.CodeAnalysis.ITypeSymbol,Microsoft.Interop.ManualTypeMarshallingHelper+NativeTypeMarshallingVariant);generated",
+ "Microsoft.Interop;ManualTypeMarshallingHelper;TryGetElementTypeFromContiguousCollectionMarshaller;(Microsoft.CodeAnalysis.ITypeSymbol,Microsoft.CodeAnalysis.ITypeSymbol);generated",
+ "Microsoft.Interop;ManualTypeMarshallingHelper;TryGetManagedValuesProperty;(Microsoft.CodeAnalysis.ITypeSymbol,Microsoft.CodeAnalysis.IPropertySymbol);generated",
+ "Microsoft.Interop;MarshalAsInfo;MarshalAsInfo;(System.Runtime.InteropServices.UnmanagedType,Microsoft.Interop.CharEncoding);generated",
+ "Microsoft.Interop;MarshalAsInfo;get_EqualityContract;();generated",
+ "Microsoft.Interop;MarshalAsInfo;get_UnmanagedType;();generated",
+ "Microsoft.Interop;MarshalAsInfo;op_Equality;(Microsoft.Interop.MarshalAsInfo,Microsoft.Interop.MarshalAsInfo);generated",
+ "Microsoft.Interop;MarshalAsInfo;op_Inequality;(Microsoft.Interop.MarshalAsInfo,Microsoft.Interop.MarshalAsInfo);generated",
+ "Microsoft.Interop;MarshalAsInfo;set_UnmanagedType;(System.Runtime.InteropServices.UnmanagedType);generated",
+ "Microsoft.Interop;MarshallerHelpers+StringMarshaller;AllocationExpression;(Microsoft.Interop.CharEncoding,System.String);generated",
+ "Microsoft.Interop;MarshallerHelpers+StringMarshaller;FreeExpression;(System.String);generated",
+ "Microsoft.Interop;MarshallerHelpers;Declare;(Microsoft.CodeAnalysis.CSharp.Syntax.TypeSyntax,System.String,System.Boolean);generated",
+ "Microsoft.Interop;MarshallerHelpers;GetDependentElementsOfMarshallingInfo;(Microsoft.Interop.MarshallingInfo);generated",
+ "Microsoft.Interop;MarshallerHelpers;GetForLoop;(System.String,System.String);generated",
+ "Microsoft.Interop;MarshallerHelpers;GetRefKindForByValueContentsKind;(Microsoft.Interop.ByValueContentsMarshalKind);generated",
+ "Microsoft.Interop;MarshallingAttributeInfoParser;ParseMarshallingInfo;(Microsoft.CodeAnalysis.ITypeSymbol,System.Collections.Generic.IEnumerable);generated",
+ "Microsoft.Interop;MarshallingInfo;get_EqualityContract;();generated",
+ "Microsoft.Interop;MarshallingInfo;op_Equality;(Microsoft.Interop.MarshallingInfo,Microsoft.Interop.MarshallingInfo);generated",
+ "Microsoft.Interop;MarshallingInfo;op_Inequality;(Microsoft.Interop.MarshallingInfo,Microsoft.Interop.MarshallingInfo);generated",
+ "Microsoft.Interop;MarshallingInfoStringSupport;MarshallingInfoStringSupport;(Microsoft.Interop.CharEncoding);generated",
+ "Microsoft.Interop;MarshallingInfoStringSupport;get_CharEncoding;();generated",
+ "Microsoft.Interop;MarshallingInfoStringSupport;get_EqualityContract;();generated",
+ "Microsoft.Interop;MarshallingInfoStringSupport;op_Equality;(Microsoft.Interop.MarshallingInfoStringSupport,Microsoft.Interop.MarshallingInfoStringSupport);generated",
+ "Microsoft.Interop;MarshallingInfoStringSupport;op_Inequality;(Microsoft.Interop.MarshallingInfoStringSupport,Microsoft.Interop.MarshallingInfoStringSupport);generated",
+ "Microsoft.Interop;MarshallingInfoStringSupport;set_CharEncoding;(Microsoft.Interop.CharEncoding);generated",
+ "Microsoft.Interop;MarshallingNotSupportedException;MarshallingNotSupportedException;(Microsoft.Interop.TypePositionInfo,Microsoft.Interop.StubCodeContext);generated",
+ "Microsoft.Interop;MarshallingNotSupportedException;get_NotSupportedDetails;();generated",
+ "Microsoft.Interop;MarshallingNotSupportedException;get_StubCodeContext;();generated",
+ "Microsoft.Interop;MarshallingNotSupportedException;get_TypePositionInfo;();generated",
+ "Microsoft.Interop;MarshallingNotSupportedException;set_NotSupportedDetails;(System.String);generated",
+ "Microsoft.Interop;MarshallingNotSupportedException;set_StubCodeContext;(Microsoft.Interop.StubCodeContext);generated",
+ "Microsoft.Interop;MarshallingNotSupportedException;set_TypePositionInfo;(Microsoft.Interop.TypePositionInfo);generated",
+ "Microsoft.Interop;MissingSupportMarshallingInfo;get_EqualityContract;();generated",
+ "Microsoft.Interop;MissingSupportMarshallingInfo;op_Equality;(Microsoft.Interop.MissingSupportMarshallingInfo,Microsoft.Interop.MissingSupportMarshallingInfo);generated",
+ "Microsoft.Interop;MissingSupportMarshallingInfo;op_Inequality;(Microsoft.Interop.MissingSupportMarshallingInfo,Microsoft.Interop.MissingSupportMarshallingInfo);generated",
+ "Microsoft.Interop;NativeContiguousCollectionMarshallingInfo;NativeContiguousCollectionMarshallingInfo;(Microsoft.Interop.ManagedTypeInfo,Microsoft.Interop.ManagedTypeInfo,Microsoft.Interop.CustomMarshallingFeatures,System.Boolean,Microsoft.Interop.CountInfo,Microsoft.Interop.ManagedTypeInfo,Microsoft.Interop.MarshallingInfo);generated",
+ "Microsoft.Interop;NativeContiguousCollectionMarshallingInfo;get_ElementCountInfo;();generated",
+ "Microsoft.Interop;NativeContiguousCollectionMarshallingInfo;get_ElementMarshallingInfo;();generated",
+ "Microsoft.Interop;NativeContiguousCollectionMarshallingInfo;get_ElementType;();generated",
+ "Microsoft.Interop;NativeContiguousCollectionMarshallingInfo;get_EqualityContract;();generated",
+ "Microsoft.Interop;NativeContiguousCollectionMarshallingInfo;op_Equality;(Microsoft.Interop.NativeContiguousCollectionMarshallingInfo,Microsoft.Interop.NativeContiguousCollectionMarshallingInfo);generated",
+ "Microsoft.Interop;NativeContiguousCollectionMarshallingInfo;op_Inequality;(Microsoft.Interop.NativeContiguousCollectionMarshallingInfo,Microsoft.Interop.NativeContiguousCollectionMarshallingInfo);generated",
+ "Microsoft.Interop;NativeContiguousCollectionMarshallingInfo;set_ElementCountInfo;(Microsoft.Interop.CountInfo);generated",
+ "Microsoft.Interop;NativeContiguousCollectionMarshallingInfo;set_ElementMarshallingInfo;(Microsoft.Interop.MarshallingInfo);generated",
+ "Microsoft.Interop;NativeContiguousCollectionMarshallingInfo;set_ElementType;(Microsoft.Interop.ManagedTypeInfo);generated",
+ "Microsoft.Interop;NativeMarshallingAttributeInfo;NativeMarshallingAttributeInfo;(Microsoft.Interop.ManagedTypeInfo,Microsoft.Interop.ManagedTypeInfo,Microsoft.Interop.CustomMarshallingFeatures,System.Boolean);generated",
+ "Microsoft.Interop;NativeMarshallingAttributeInfo;get_EqualityContract;();generated",
+ "Microsoft.Interop;NativeMarshallingAttributeInfo;get_MarshallingFeatures;();generated",
+ "Microsoft.Interop;NativeMarshallingAttributeInfo;get_NativeMarshallingType;();generated",
+ "Microsoft.Interop;NativeMarshallingAttributeInfo;get_UseDefaultMarshalling;();generated",
+ "Microsoft.Interop;NativeMarshallingAttributeInfo;get_ValuePropertyType;();generated",
+ "Microsoft.Interop;NativeMarshallingAttributeInfo;op_Equality;(Microsoft.Interop.NativeMarshallingAttributeInfo,Microsoft.Interop.NativeMarshallingAttributeInfo);generated",
+ "Microsoft.Interop;NativeMarshallingAttributeInfo;op_Inequality;(Microsoft.Interop.NativeMarshallingAttributeInfo,Microsoft.Interop.NativeMarshallingAttributeInfo);generated",
+ "Microsoft.Interop;NativeMarshallingAttributeInfo;set_MarshallingFeatures;(Microsoft.Interop.CustomMarshallingFeatures);generated",
+ "Microsoft.Interop;NativeMarshallingAttributeInfo;set_NativeMarshallingType;(Microsoft.Interop.ManagedTypeInfo);generated",
+ "Microsoft.Interop;NativeMarshallingAttributeInfo;set_UseDefaultMarshalling;(System.Boolean);generated",
+ "Microsoft.Interop;NativeMarshallingAttributeInfo;set_ValuePropertyType;(Microsoft.Interop.ManagedTypeInfo);generated",
+ "Microsoft.Interop;NoCountInfo;get_EqualityContract;();generated",
+ "Microsoft.Interop;NoCountInfo;op_Equality;(Microsoft.Interop.NoCountInfo,Microsoft.Interop.NoCountInfo);generated",
+ "Microsoft.Interop;NoCountInfo;op_Inequality;(Microsoft.Interop.NoCountInfo,Microsoft.Interop.NoCountInfo);generated",
+ "Microsoft.Interop;NoMarshallingInfo;get_EqualityContract;();generated",
+ "Microsoft.Interop;NoMarshallingInfo;op_Equality;(Microsoft.Interop.NoMarshallingInfo,Microsoft.Interop.NoMarshallingInfo);generated",
+ "Microsoft.Interop;NoMarshallingInfo;op_Inequality;(Microsoft.Interop.NoMarshallingInfo,Microsoft.Interop.NoMarshallingInfo);generated",
+ "Microsoft.Interop;PinnableManagedValueMarshaller;AsArgument;(Microsoft.Interop.TypePositionInfo,Microsoft.Interop.StubCodeContext);generated",
+ "Microsoft.Interop;PinnableManagedValueMarshaller;AsParameter;(Microsoft.Interop.TypePositionInfo);generated",
+ "Microsoft.Interop;PinnableManagedValueMarshaller;Generate;(Microsoft.Interop.TypePositionInfo,Microsoft.Interop.StubCodeContext);generated",
+ "Microsoft.Interop;PinnableManagedValueMarshaller;IsSupported;(Microsoft.Interop.TargetFramework,System.Version);generated",
+ "Microsoft.Interop;PinnableManagedValueMarshaller;SupportsByValueMarshalKind;(Microsoft.Interop.ByValueContentsMarshalKind,Microsoft.Interop.StubCodeContext);generated",
+ "Microsoft.Interop;PinnableManagedValueMarshaller;UsesNativeIdentifier;(Microsoft.Interop.TypePositionInfo,Microsoft.Interop.StubCodeContext);generated",
+ "Microsoft.Interop;PlatformDefinedStringMarshaller;AsArgument;(Microsoft.Interop.TypePositionInfo,Microsoft.Interop.StubCodeContext);generated",
+ "Microsoft.Interop;PlatformDefinedStringMarshaller;AsNativeType;(Microsoft.Interop.TypePositionInfo);generated",
+ "Microsoft.Interop;PlatformDefinedStringMarshaller;AsParameter;(Microsoft.Interop.TypePositionInfo);generated",
+ "Microsoft.Interop;PlatformDefinedStringMarshaller;Generate;(Microsoft.Interop.TypePositionInfo,Microsoft.Interop.StubCodeContext);generated",
+ "Microsoft.Interop;PlatformDefinedStringMarshaller;GenerateAllocationExpression;(Microsoft.Interop.TypePositionInfo,Microsoft.Interop.StubCodeContext,Microsoft.CodeAnalysis.SyntaxToken,System.Boolean);generated",
+ "Microsoft.Interop;PlatformDefinedStringMarshaller;GenerateByteLengthCalculationExpression;(Microsoft.Interop.TypePositionInfo,Microsoft.Interop.StubCodeContext);generated",
+ "Microsoft.Interop;PlatformDefinedStringMarshaller;GenerateFreeExpression;(Microsoft.Interop.TypePositionInfo,Microsoft.Interop.StubCodeContext);generated",
+ "Microsoft.Interop;PlatformDefinedStringMarshaller;GenerateStackallocOnlyValueMarshalling;(Microsoft.Interop.TypePositionInfo,Microsoft.Interop.StubCodeContext,Microsoft.CodeAnalysis.SyntaxToken,Microsoft.CodeAnalysis.SyntaxToken);generated",
+ "Microsoft.Interop;PlatformDefinedStringMarshaller;SupportsByValueMarshalKind;(Microsoft.Interop.ByValueContentsMarshalKind,Microsoft.Interop.StubCodeContext);generated",
+ "Microsoft.Interop;PlatformDefinedStringMarshaller;UsesNativeIdentifier;(Microsoft.Interop.TypePositionInfo,Microsoft.Interop.StubCodeContext);generated",
+ "Microsoft.Interop;PointerTypeInfo;PointerTypeInfo;(System.String,System.String,System.Boolean);generated",
+ "Microsoft.Interop;PointerTypeInfo;get_EqualityContract;();generated",
+ "Microsoft.Interop;PointerTypeInfo;get_IsFunctionPointer;();generated",
+ "Microsoft.Interop;PointerTypeInfo;op_Equality;(Microsoft.Interop.PointerTypeInfo,Microsoft.Interop.PointerTypeInfo);generated",
+ "Microsoft.Interop;PointerTypeInfo;op_Inequality;(Microsoft.Interop.PointerTypeInfo,Microsoft.Interop.PointerTypeInfo);generated",
+ "Microsoft.Interop;PointerTypeInfo;set_IsFunctionPointer;(System.Boolean);generated",
+ "Microsoft.Interop;SafeHandleMarshaller;AsArgument;(Microsoft.Interop.TypePositionInfo,Microsoft.Interop.StubCodeContext);generated",
+ "Microsoft.Interop;SafeHandleMarshaller;AsNativeType;(Microsoft.Interop.TypePositionInfo);generated",
+ "Microsoft.Interop;SafeHandleMarshaller;AsParameter;(Microsoft.Interop.TypePositionInfo);generated",
+ "Microsoft.Interop;SafeHandleMarshaller;Generate;(Microsoft.Interop.TypePositionInfo,Microsoft.Interop.StubCodeContext);generated",
+ "Microsoft.Interop;SafeHandleMarshaller;IsSupported;(Microsoft.Interop.TargetFramework,System.Version);generated",
+ "Microsoft.Interop;SafeHandleMarshaller;SupportsByValueMarshalKind;(Microsoft.Interop.ByValueContentsMarshalKind,Microsoft.Interop.StubCodeContext);generated",
+ "Microsoft.Interop;SafeHandleMarshaller;UsesNativeIdentifier;(Microsoft.Interop.TypePositionInfo,Microsoft.Interop.StubCodeContext);generated",
+ "Microsoft.Interop;SafeHandleMarshallingInfo;SafeHandleMarshallingInfo;(System.Boolean,System.Boolean);generated",
+ "Microsoft.Interop;SafeHandleMarshallingInfo;get_AccessibleDefaultConstructor;();generated",
+ "Microsoft.Interop;SafeHandleMarshallingInfo;get_EqualityContract;();generated",
+ "Microsoft.Interop;SafeHandleMarshallingInfo;get_IsAbstract;();generated",
+ "Microsoft.Interop;SafeHandleMarshallingInfo;op_Equality;(Microsoft.Interop.SafeHandleMarshallingInfo,Microsoft.Interop.SafeHandleMarshallingInfo);generated",
+ "Microsoft.Interop;SafeHandleMarshallingInfo;op_Inequality;(Microsoft.Interop.SafeHandleMarshallingInfo,Microsoft.Interop.SafeHandleMarshallingInfo);generated",
+ "Microsoft.Interop;SafeHandleMarshallingInfo;set_AccessibleDefaultConstructor;(System.Boolean);generated",
+ "Microsoft.Interop;SafeHandleMarshallingInfo;set_IsAbstract;(System.Boolean);generated",
+ "Microsoft.Interop;SimpleManagedTypeInfo;SimpleManagedTypeInfo;(System.String,System.String);generated",
+ "Microsoft.Interop;SimpleManagedTypeInfo;get_EqualityContract;();generated",
+ "Microsoft.Interop;SimpleManagedTypeInfo;op_Equality;(Microsoft.Interop.SimpleManagedTypeInfo,Microsoft.Interop.SimpleManagedTypeInfo);generated",
+ "Microsoft.Interop;SimpleManagedTypeInfo;op_Inequality;(Microsoft.Interop.SimpleManagedTypeInfo,Microsoft.Interop.SimpleManagedTypeInfo);generated",
+ "Microsoft.Interop;SizeAndParamIndexInfo;SizeAndParamIndexInfo;(System.Int32,Microsoft.Interop.TypePositionInfo);generated",
+ "Microsoft.Interop;SizeAndParamIndexInfo;get_ConstSize;();generated",
+ "Microsoft.Interop;SizeAndParamIndexInfo;get_EqualityContract;();generated",
+ "Microsoft.Interop;SizeAndParamIndexInfo;get_ParamAtIndex;();generated",
+ "Microsoft.Interop;SizeAndParamIndexInfo;op_Equality;(Microsoft.Interop.SizeAndParamIndexInfo,Microsoft.Interop.SizeAndParamIndexInfo);generated",
+ "Microsoft.Interop;SizeAndParamIndexInfo;op_Inequality;(Microsoft.Interop.SizeAndParamIndexInfo,Microsoft.Interop.SizeAndParamIndexInfo);generated",
+ "Microsoft.Interop;SizeAndParamIndexInfo;set_ConstSize;(System.Int32);generated",
+ "Microsoft.Interop;SizeAndParamIndexInfo;set_ParamAtIndex;(Microsoft.Interop.TypePositionInfo);generated",
+ "Microsoft.Interop;SpecialTypeInfo;Equals;(Microsoft.Interop.SpecialTypeInfo);generated",
+ "Microsoft.Interop;SpecialTypeInfo;GetHashCode;();generated",
+ "Microsoft.Interop;SpecialTypeInfo;SpecialTypeInfo;(System.String,System.String,Microsoft.CodeAnalysis.SpecialType);generated",
+ "Microsoft.Interop;SpecialTypeInfo;get_EqualityContract;();generated",
+ "Microsoft.Interop;SpecialTypeInfo;get_SpecialType;();generated",
+ "Microsoft.Interop;SpecialTypeInfo;op_Equality;(Microsoft.Interop.SpecialTypeInfo,Microsoft.Interop.SpecialTypeInfo);generated",
+ "Microsoft.Interop;SpecialTypeInfo;op_Inequality;(Microsoft.Interop.SpecialTypeInfo,Microsoft.Interop.SpecialTypeInfo);generated",
+ "Microsoft.Interop;SpecialTypeInfo;set_SpecialType;(Microsoft.CodeAnalysis.SpecialType);generated",
+ "Microsoft.Interop;StubCodeContext;GetIdentifiers;(Microsoft.Interop.TypePositionInfo);generated",
+ "Microsoft.Interop;StubCodeContext;get_AdditionalTemporaryStateLivesAcrossStages;();generated",
+ "Microsoft.Interop;StubCodeContext;get_CurrentStage;();generated",
+ "Microsoft.Interop;StubCodeContext;get_ParentContext;();generated",
+ "Microsoft.Interop;StubCodeContext;get_SingleFrameSpansNativeContext;();generated",
+ "Microsoft.Interop;StubCodeContext;set_CurrentStage;(Microsoft.Interop.StubCodeContext+Stage);generated",
+ "Microsoft.Interop;StubCodeContext;set_ParentContext;(Microsoft.Interop.StubCodeContext);generated",
+ "Microsoft.Interop;SyntaxExtensions;AddStatementWithoutEmptyStatements;(Microsoft.CodeAnalysis.CSharp.Syntax.FixedStatementSyntax,Microsoft.CodeAnalysis.CSharp.Syntax.StatementSyntax);generated",
+ "Microsoft.Interop;SzArrayType;SzArrayType;(Microsoft.Interop.ManagedTypeInfo);generated",
+ "Microsoft.Interop;SzArrayType;get_ElementTypeInfo;();generated",
+ "Microsoft.Interop;SzArrayType;get_EqualityContract;();generated",
+ "Microsoft.Interop;SzArrayType;op_Equality;(Microsoft.Interop.SzArrayType,Microsoft.Interop.SzArrayType);generated",
+ "Microsoft.Interop;SzArrayType;op_Inequality;(Microsoft.Interop.SzArrayType,Microsoft.Interop.SzArrayType);generated",
+ "Microsoft.Interop;SzArrayType;set_ElementTypeInfo;(Microsoft.Interop.ManagedTypeInfo);generated",
+ "Microsoft.Interop;TypeNames;MarshalEx;(Microsoft.Interop.InteropGenerationOptions);generated",
+ "Microsoft.Interop;TypeNames;Unsafe;(Microsoft.Interop.InteropGenerationOptions);generated",
+ "Microsoft.Interop;TypePositionInfo;CreateForParameter;(Microsoft.CodeAnalysis.IParameterSymbol,Microsoft.Interop.MarshallingInfo,Microsoft.CodeAnalysis.Compilation);generated",
+ "Microsoft.Interop;TypePositionInfo;TypePositionInfo;(Microsoft.Interop.ManagedTypeInfo,Microsoft.Interop.MarshallingInfo);generated",
+ "Microsoft.Interop;TypePositionInfo;get_ByValueContentsMarshalKind;();generated",
+ "Microsoft.Interop;TypePositionInfo;get_InstanceIdentifier;();generated",
+ "Microsoft.Interop;TypePositionInfo;get_IsByRef;();generated",
+ "Microsoft.Interop;TypePositionInfo;get_IsManagedReturnPosition;();generated",
+ "Microsoft.Interop;TypePositionInfo;get_IsNativeReturnPosition;();generated",
+ "Microsoft.Interop;TypePositionInfo;get_ManagedIndex;();generated",
+ "Microsoft.Interop;TypePositionInfo;get_ManagedType;();generated",
+ "Microsoft.Interop;TypePositionInfo;get_MarshallingAttributeInfo;();generated",
+ "Microsoft.Interop;TypePositionInfo;get_NativeIndex;();generated",
+ "Microsoft.Interop;TypePositionInfo;get_RefKind;();generated",
+ "Microsoft.Interop;TypePositionInfo;get_RefKindSyntax;();generated",
+ "Microsoft.Interop;TypePositionInfo;op_Equality;(Microsoft.Interop.TypePositionInfo,Microsoft.Interop.TypePositionInfo);generated",
+ "Microsoft.Interop;TypePositionInfo;op_Inequality;(Microsoft.Interop.TypePositionInfo,Microsoft.Interop.TypePositionInfo);generated",
+ "Microsoft.Interop;TypePositionInfo;set_ByValueContentsMarshalKind;(Microsoft.Interop.ByValueContentsMarshalKind);generated",
+ "Microsoft.Interop;TypePositionInfo;set_InstanceIdentifier;(System.String);generated",
+ "Microsoft.Interop;TypePositionInfo;set_ManagedIndex;(System.Int32);generated",
+ "Microsoft.Interop;TypePositionInfo;set_ManagedType;(Microsoft.Interop.ManagedTypeInfo);generated",
+ "Microsoft.Interop;TypePositionInfo;set_MarshallingAttributeInfo;(Microsoft.Interop.MarshallingInfo);generated",
+ "Microsoft.Interop;TypePositionInfo;set_NativeIndex;(System.Int32);generated",
+ "Microsoft.Interop;TypePositionInfo;set_RefKind;(Microsoft.CodeAnalysis.RefKind);generated",
+ "Microsoft.Interop;TypePositionInfo;set_RefKindSyntax;(Microsoft.CodeAnalysis.CSharp.SyntaxKind);generated",
+ "Microsoft.Interop;TypeSymbolExtensions;AsTypeSyntax;(Microsoft.CodeAnalysis.ITypeSymbol);generated",
+ "Microsoft.Interop;TypeSymbolExtensions;HasOnlyBlittableFields;(Microsoft.CodeAnalysis.ITypeSymbol);generated",
+ "Microsoft.Interop;TypeSymbolExtensions;IsAutoLayout;(Microsoft.CodeAnalysis.INamedTypeSymbol,Microsoft.CodeAnalysis.ITypeSymbol);generated",
+ "Microsoft.Interop;TypeSymbolExtensions;IsConsideredBlittable;(Microsoft.CodeAnalysis.ITypeSymbol);generated",
+ "Microsoft.Interop;TypeSymbolExtensions;IsExposedOutsideOfCurrentCompilation;(Microsoft.CodeAnalysis.INamedTypeSymbol);generated",
+ "Microsoft.Interop;TypeSymbolExtensions;IsIntegralType;(Microsoft.CodeAnalysis.SpecialType);generated",
+ "Microsoft.Interop;Utf16CharMarshaller;AsArgument;(Microsoft.Interop.TypePositionInfo,Microsoft.Interop.StubCodeContext);generated",
+ "Microsoft.Interop;Utf16CharMarshaller;AsNativeType;(Microsoft.Interop.TypePositionInfo);generated",
+ "Microsoft.Interop;Utf16CharMarshaller;AsParameter;(Microsoft.Interop.TypePositionInfo);generated",
+ "Microsoft.Interop;Utf16CharMarshaller;Generate;(Microsoft.Interop.TypePositionInfo,Microsoft.Interop.StubCodeContext);generated",
+ "Microsoft.Interop;Utf16CharMarshaller;IsSupported;(Microsoft.Interop.TargetFramework,System.Version);generated",
+ "Microsoft.Interop;Utf16CharMarshaller;SupportsByValueMarshalKind;(Microsoft.Interop.ByValueContentsMarshalKind,Microsoft.Interop.StubCodeContext);generated",
+ "Microsoft.Interop;Utf16CharMarshaller;UsesNativeIdentifier;(Microsoft.Interop.TypePositionInfo,Microsoft.Interop.StubCodeContext);generated",
+ "Microsoft.Interop;Utf16CharMarshaller;Utf16CharMarshaller;();generated",
+ "Microsoft.Interop;Utf16StringMarshaller;AsArgument;(Microsoft.Interop.TypePositionInfo,Microsoft.Interop.StubCodeContext);generated",
+ "Microsoft.Interop;Utf16StringMarshaller;AsNativeType;(Microsoft.Interop.TypePositionInfo);generated",
+ "Microsoft.Interop;Utf16StringMarshaller;AsParameter;(Microsoft.Interop.TypePositionInfo);generated",
+ "Microsoft.Interop;Utf16StringMarshaller;Generate;(Microsoft.Interop.TypePositionInfo,Microsoft.Interop.StubCodeContext);generated",
+ "Microsoft.Interop;Utf16StringMarshaller;GenerateAllocationExpression;(Microsoft.Interop.TypePositionInfo,Microsoft.Interop.StubCodeContext,Microsoft.CodeAnalysis.SyntaxToken,System.Boolean);generated",
+ "Microsoft.Interop;Utf16StringMarshaller;GenerateByteLengthCalculationExpression;(Microsoft.Interop.TypePositionInfo,Microsoft.Interop.StubCodeContext);generated",
+ "Microsoft.Interop;Utf16StringMarshaller;GenerateFreeExpression;(Microsoft.Interop.TypePositionInfo,Microsoft.Interop.StubCodeContext);generated",
+ "Microsoft.Interop;Utf16StringMarshaller;GenerateStackallocOnlyValueMarshalling;(Microsoft.Interop.TypePositionInfo,Microsoft.Interop.StubCodeContext,Microsoft.CodeAnalysis.SyntaxToken,Microsoft.CodeAnalysis.SyntaxToken);generated",
+ "Microsoft.Interop;Utf16StringMarshaller;SupportsByValueMarshalKind;(Microsoft.Interop.ByValueContentsMarshalKind,Microsoft.Interop.StubCodeContext);generated",
+ "Microsoft.Interop;Utf16StringMarshaller;UsesNativeIdentifier;(Microsoft.Interop.TypePositionInfo,Microsoft.Interop.StubCodeContext);generated",
+ "Microsoft.Interop;Utf8StringMarshaller;AsArgument;(Microsoft.Interop.TypePositionInfo,Microsoft.Interop.StubCodeContext);generated",
+ "Microsoft.Interop;Utf8StringMarshaller;AsNativeType;(Microsoft.Interop.TypePositionInfo);generated",
+ "Microsoft.Interop;Utf8StringMarshaller;AsParameter;(Microsoft.Interop.TypePositionInfo);generated",
+ "Microsoft.Interop;Utf8StringMarshaller;Generate;(Microsoft.Interop.TypePositionInfo,Microsoft.Interop.StubCodeContext);generated",
+ "Microsoft.Interop;Utf8StringMarshaller;GenerateAllocationExpression;(Microsoft.Interop.TypePositionInfo,Microsoft.Interop.StubCodeContext,Microsoft.CodeAnalysis.SyntaxToken,System.Boolean);generated",
+ "Microsoft.Interop;Utf8StringMarshaller;GenerateByteLengthCalculationExpression;(Microsoft.Interop.TypePositionInfo,Microsoft.Interop.StubCodeContext);generated",
+ "Microsoft.Interop;Utf8StringMarshaller;GenerateFreeExpression;(Microsoft.Interop.TypePositionInfo,Microsoft.Interop.StubCodeContext);generated",
+ "Microsoft.Interop;Utf8StringMarshaller;GenerateStackallocOnlyValueMarshalling;(Microsoft.Interop.TypePositionInfo,Microsoft.Interop.StubCodeContext,Microsoft.CodeAnalysis.SyntaxToken,Microsoft.CodeAnalysis.SyntaxToken);generated",
+ "Microsoft.Interop;Utf8StringMarshaller;SupportsByValueMarshalKind;(Microsoft.Interop.ByValueContentsMarshalKind,Microsoft.Interop.StubCodeContext);generated",
+ "Microsoft.Interop;Utf8StringMarshaller;UsesNativeIdentifier;(Microsoft.Interop.TypePositionInfo,Microsoft.Interop.StubCodeContext);generated",
+ "Microsoft.Interop;VariantBoolMarshaller;VariantBoolMarshaller;();generated",
+ "Microsoft.Interop;WinBoolMarshaller;WinBoolMarshaller;();generated",
+ "Microsoft.NET.Build.Tasks;PrepareForReadyToRunCompilation;ExecuteCore;();generated",
+ "Microsoft.NET.Build.Tasks;PrepareForReadyToRunCompilation;get_Assemblies;();generated",
+ "Microsoft.NET.Build.Tasks;PrepareForReadyToRunCompilation;get_Crossgen2Composite;();generated",
+ "Microsoft.NET.Build.Tasks;PrepareForReadyToRunCompilation;get_Crossgen2Tool;();generated",
+ "Microsoft.NET.Build.Tasks;PrepareForReadyToRunCompilation;get_CrossgenTool;();generated",
+ "Microsoft.NET.Build.Tasks;PrepareForReadyToRunCompilation;get_EmitSymbols;();generated",
+ "Microsoft.NET.Build.Tasks;PrepareForReadyToRunCompilation;get_ExcludeList;();generated",
+ "Microsoft.NET.Build.Tasks;PrepareForReadyToRunCompilation;get_IncludeSymbolsInSingleFile;();generated",
+ "Microsoft.NET.Build.Tasks;PrepareForReadyToRunCompilation;get_MainAssembly;();generated",
+ "Microsoft.NET.Build.Tasks;PrepareForReadyToRunCompilation;get_OutputPath;();generated",
+ "Microsoft.NET.Build.Tasks;PrepareForReadyToRunCompilation;get_PublishReadyToRunCompositeExclusions;();generated",
+ "Microsoft.NET.Build.Tasks;PrepareForReadyToRunCompilation;get_ReadyToRunAssembliesToReference;();generated",
+ "Microsoft.NET.Build.Tasks;PrepareForReadyToRunCompilation;get_ReadyToRunCompileList;();generated",
+ "Microsoft.NET.Build.Tasks;PrepareForReadyToRunCompilation;get_ReadyToRunCompositeBuildInput;();generated",
+ "Microsoft.NET.Build.Tasks;PrepareForReadyToRunCompilation;get_ReadyToRunCompositeBuildReferences;();generated",
+ "Microsoft.NET.Build.Tasks;PrepareForReadyToRunCompilation;get_ReadyToRunFilesToPublish;();generated",
+ "Microsoft.NET.Build.Tasks;PrepareForReadyToRunCompilation;get_ReadyToRunSymbolsCompileList;();generated",
+ "Microsoft.NET.Build.Tasks;PrepareForReadyToRunCompilation;get_ReadyToRunUseCrossgen2;();generated",
+ "Microsoft.NET.Build.Tasks;PrepareForReadyToRunCompilation;set_Assemblies;(Microsoft.Build.Framework.ITaskItem[]);generated",
+ "Microsoft.NET.Build.Tasks;PrepareForReadyToRunCompilation;set_Crossgen2Composite;(System.Boolean);generated",
+ "Microsoft.NET.Build.Tasks;PrepareForReadyToRunCompilation;set_Crossgen2Tool;(Microsoft.Build.Framework.ITaskItem);generated",
+ "Microsoft.NET.Build.Tasks;PrepareForReadyToRunCompilation;set_CrossgenTool;(Microsoft.Build.Framework.ITaskItem);generated",
+ "Microsoft.NET.Build.Tasks;PrepareForReadyToRunCompilation;set_EmitSymbols;(System.Boolean);generated",
+ "Microsoft.NET.Build.Tasks;PrepareForReadyToRunCompilation;set_ExcludeList;(System.String[]);generated",
+ "Microsoft.NET.Build.Tasks;PrepareForReadyToRunCompilation;set_IncludeSymbolsInSingleFile;(System.Boolean);generated",
+ "Microsoft.NET.Build.Tasks;PrepareForReadyToRunCompilation;set_MainAssembly;(Microsoft.Build.Framework.ITaskItem);generated",
+ "Microsoft.NET.Build.Tasks;PrepareForReadyToRunCompilation;set_OutputPath;(System.String);generated",
+ "Microsoft.NET.Build.Tasks;PrepareForReadyToRunCompilation;set_PublishReadyToRunCompositeExclusions;(System.String[]);generated",
+ "Microsoft.NET.Build.Tasks;PrepareForReadyToRunCompilation;set_ReadyToRunUseCrossgen2;(System.Boolean);generated",
+ "Microsoft.NET.Build.Tasks;ResolveReadyToRunCompilers;ExecuteCore;();generated",
+ "Microsoft.NET.Build.Tasks;ResolveReadyToRunCompilers;get_Crossgen2Packs;();generated",
+ "Microsoft.NET.Build.Tasks;ResolveReadyToRunCompilers;get_Crossgen2Tool;();generated",
+ "Microsoft.NET.Build.Tasks;ResolveReadyToRunCompilers;get_CrossgenTool;();generated",
+ "Microsoft.NET.Build.Tasks;ResolveReadyToRunCompilers;get_EmitSymbols;();generated",
+ "Microsoft.NET.Build.Tasks;ResolveReadyToRunCompilers;get_NETCoreSdkRuntimeIdentifier;();generated",
+ "Microsoft.NET.Build.Tasks;ResolveReadyToRunCompilers;get_PerfmapFormatVersion;();generated",
+ "Microsoft.NET.Build.Tasks;ResolveReadyToRunCompilers;get_ReadyToRunUseCrossgen2;();generated",
+ "Microsoft.NET.Build.Tasks;ResolveReadyToRunCompilers;get_RuntimeGraphPath;();generated",
+ "Microsoft.NET.Build.Tasks;ResolveReadyToRunCompilers;get_RuntimePacks;();generated",
+ "Microsoft.NET.Build.Tasks;ResolveReadyToRunCompilers;get_TargetingPacks;();generated",
+ "Microsoft.NET.Build.Tasks;ResolveReadyToRunCompilers;set_Crossgen2Packs;(Microsoft.Build.Framework.ITaskItem[]);generated",
+ "Microsoft.NET.Build.Tasks;ResolveReadyToRunCompilers;set_Crossgen2Tool;(Microsoft.Build.Framework.ITaskItem);generated",
+ "Microsoft.NET.Build.Tasks;ResolveReadyToRunCompilers;set_CrossgenTool;(Microsoft.Build.Framework.ITaskItem);generated",
+ "Microsoft.NET.Build.Tasks;ResolveReadyToRunCompilers;set_EmitSymbols;(System.Boolean);generated",
+ "Microsoft.NET.Build.Tasks;ResolveReadyToRunCompilers;set_NETCoreSdkRuntimeIdentifier;(System.String);generated",
+ "Microsoft.NET.Build.Tasks;ResolveReadyToRunCompilers;set_PerfmapFormatVersion;(System.String);generated",
+ "Microsoft.NET.Build.Tasks;ResolveReadyToRunCompilers;set_ReadyToRunUseCrossgen2;(System.Boolean);generated",
+ "Microsoft.NET.Build.Tasks;ResolveReadyToRunCompilers;set_RuntimeGraphPath;(System.String);generated",
+ "Microsoft.NET.Build.Tasks;ResolveReadyToRunCompilers;set_RuntimePacks;(Microsoft.Build.Framework.ITaskItem[]);generated",
+ "Microsoft.NET.Build.Tasks;ResolveReadyToRunCompilers;set_TargetingPacks;(Microsoft.Build.Framework.ITaskItem[]);generated",
+ "Microsoft.NET.Build.Tasks;RunReadyToRunCompiler;ExecuteTool;(System.String,System.String,System.String);generated",
+ "Microsoft.NET.Build.Tasks;RunReadyToRunCompiler;GenerateCommandLineCommands;();generated",
+ "Microsoft.NET.Build.Tasks;RunReadyToRunCompiler;GenerateFullPathToTool;();generated",
+ "Microsoft.NET.Build.Tasks;RunReadyToRunCompiler;LogEventsFromTextOutput;(System.String,Microsoft.Build.Framework.MessageImportance);generated",
+ "Microsoft.NET.Build.Tasks;RunReadyToRunCompiler;RunReadyToRunCompiler;();generated",
+ "Microsoft.NET.Build.Tasks;RunReadyToRunCompiler;ValidateParameters;();generated",
+ "Microsoft.NET.Build.Tasks;RunReadyToRunCompiler;get_CompilationEntry;();generated",
+ "Microsoft.NET.Build.Tasks;RunReadyToRunCompiler;get_Crossgen2ExtraCommandLineArgs;();generated",
+ "Microsoft.NET.Build.Tasks;RunReadyToRunCompiler;get_Crossgen2PgoFiles;();generated",
+ "Microsoft.NET.Build.Tasks;RunReadyToRunCompiler;get_Crossgen2Tool;();generated",
+ "Microsoft.NET.Build.Tasks;RunReadyToRunCompiler;get_CrossgenTool;();generated",
+ "Microsoft.NET.Build.Tasks;RunReadyToRunCompiler;get_ImplementationAssemblyReferences;();generated",
+ "Microsoft.NET.Build.Tasks;RunReadyToRunCompiler;get_ReadyToRunCompositeBuildInput;();generated",
+ "Microsoft.NET.Build.Tasks;RunReadyToRunCompiler;get_ReadyToRunCompositeBuildReferences;();generated",
+ "Microsoft.NET.Build.Tasks;RunReadyToRunCompiler;get_ShowCompilerWarnings;();generated",
+ "Microsoft.NET.Build.Tasks;RunReadyToRunCompiler;get_ToolName;();generated",
+ "Microsoft.NET.Build.Tasks;RunReadyToRunCompiler;get_UseCrossgen2;();generated",
+ "Microsoft.NET.Build.Tasks;RunReadyToRunCompiler;get_WarningsDetected;();generated",
+ "Microsoft.NET.Build.Tasks;RunReadyToRunCompiler;set_CompilationEntry;(Microsoft.Build.Framework.ITaskItem);generated",
+ "Microsoft.NET.Build.Tasks;RunReadyToRunCompiler;set_Crossgen2ExtraCommandLineArgs;(System.String);generated",
+ "Microsoft.NET.Build.Tasks;RunReadyToRunCompiler;set_Crossgen2PgoFiles;(Microsoft.Build.Framework.ITaskItem[]);generated",
+ "Microsoft.NET.Build.Tasks;RunReadyToRunCompiler;set_Crossgen2Tool;(Microsoft.Build.Framework.ITaskItem);generated",
+ "Microsoft.NET.Build.Tasks;RunReadyToRunCompiler;set_CrossgenTool;(Microsoft.Build.Framework.ITaskItem);generated",
+ "Microsoft.NET.Build.Tasks;RunReadyToRunCompiler;set_ImplementationAssemblyReferences;(Microsoft.Build.Framework.ITaskItem[]);generated",
+ "Microsoft.NET.Build.Tasks;RunReadyToRunCompiler;set_ReadyToRunCompositeBuildInput;(Microsoft.Build.Framework.ITaskItem[]);generated",
+ "Microsoft.NET.Build.Tasks;RunReadyToRunCompiler;set_ReadyToRunCompositeBuildReferences;(Microsoft.Build.Framework.ITaskItem[]);generated",
+ "Microsoft.NET.Build.Tasks;RunReadyToRunCompiler;set_ShowCompilerWarnings;(System.Boolean);generated",
+ "Microsoft.NET.Build.Tasks;RunReadyToRunCompiler;set_UseCrossgen2;(System.Boolean);generated",
+ "Microsoft.NET.Build.Tasks;RunReadyToRunCompiler;set_WarningsDetected;(System.Boolean);generated",
+ "Microsoft.NET.Build.Tasks;TaskBase;Execute;();generated",
+ "Microsoft.NET.Build.Tasks;TaskBase;ExecuteCore;();generated",
+ "Microsoft.NETCore.Platforms.BuildTasks;BuildTask;BuildTask;();generated",
+ "Microsoft.NETCore.Platforms.BuildTasks;BuildTask;Execute;();generated",
+ "Microsoft.NETCore.Platforms.BuildTasks;BuildTask;get_BuildEngine;();generated",
+ "Microsoft.NETCore.Platforms.BuildTasks;BuildTask;get_HostObject;();generated",
+ "Microsoft.NETCore.Platforms.BuildTasks;BuildTask;set_BuildEngine;(Microsoft.Build.Framework.IBuildEngine);generated",
+ "Microsoft.NETCore.Platforms.BuildTasks;BuildTask;set_HostObject;(Microsoft.Build.Framework.ITaskHost);generated",
+ "Microsoft.NETCore.Platforms.BuildTasks;Extensions;GetBoolean;(Microsoft.Build.Framework.ITaskItem,System.String,System.Boolean);generated",
+ "Microsoft.NETCore.Platforms.BuildTasks;Extensions;GetString;(Microsoft.Build.Framework.ITaskItem,System.String);generated",
+ "Microsoft.NETCore.Platforms.BuildTasks;Extensions;GetStrings;(Microsoft.Build.Framework.ITaskItem,System.String);generated",
+ "Microsoft.NETCore.Platforms.BuildTasks;GenerateRuntimeGraph;Execute;();generated",
+ "Microsoft.NETCore.Platforms.BuildTasks;GenerateRuntimeGraph;WriteRuntimeGraph;(System.String,NuGet.RuntimeModel.RuntimeGraph);generated",
+ "Microsoft.NETCore.Platforms.BuildTasks;GenerateRuntimeGraph;get_AdditionalRuntimeIdentifierParent;();generated",
+ "Microsoft.NETCore.Platforms.BuildTasks;GenerateRuntimeGraph;get_AdditionalRuntimeIdentifiers;();generated",
+ "Microsoft.NETCore.Platforms.BuildTasks;GenerateRuntimeGraph;get_CompatibilityMap;();generated",
+ "Microsoft.NETCore.Platforms.BuildTasks;GenerateRuntimeGraph;get_ExternalRuntimeJsons;();generated",
+ "Microsoft.NETCore.Platforms.BuildTasks;GenerateRuntimeGraph;get_RuntimeDirectedGraph;();generated",
+ "Microsoft.NETCore.Platforms.BuildTasks;GenerateRuntimeGraph;get_RuntimeGroups;();generated",
+ "Microsoft.NETCore.Platforms.BuildTasks;GenerateRuntimeGraph;get_RuntimeJson;();generated",
+ "Microsoft.NETCore.Platforms.BuildTasks;GenerateRuntimeGraph;get_SourceRuntimeJson;();generated",
+ "Microsoft.NETCore.Platforms.BuildTasks;GenerateRuntimeGraph;get_UpdateRuntimeFiles;();generated",
+ "Microsoft.NETCore.Platforms.BuildTasks;GenerateRuntimeGraph;set_AdditionalRuntimeIdentifierParent;(System.String);generated",
+ "Microsoft.NETCore.Platforms.BuildTasks;GenerateRuntimeGraph;set_AdditionalRuntimeIdentifiers;(System.String[]);generated",
+ "Microsoft.NETCore.Platforms.BuildTasks;GenerateRuntimeGraph;set_CompatibilityMap;(System.String);generated",
+ "Microsoft.NETCore.Platforms.BuildTasks;GenerateRuntimeGraph;set_ExternalRuntimeJsons;(System.String[]);generated",
+ "Microsoft.NETCore.Platforms.BuildTasks;GenerateRuntimeGraph;set_RuntimeDirectedGraph;(System.String);generated",
+ "Microsoft.NETCore.Platforms.BuildTasks;GenerateRuntimeGraph;set_RuntimeGroups;(Microsoft.Build.Framework.ITaskItem[]);generated",
+ "Microsoft.NETCore.Platforms.BuildTasks;GenerateRuntimeGraph;set_RuntimeJson;(System.String);generated",
+ "Microsoft.NETCore.Platforms.BuildTasks;GenerateRuntimeGraph;set_SourceRuntimeJson;(System.String);generated",
+ "Microsoft.NETCore.Platforms.BuildTasks;GenerateRuntimeGraph;set_UpdateRuntimeFiles;(System.Boolean);generated",
+ "Microsoft.NETCore.Platforms.BuildTasks;ILog;LogError;(System.String,System.Object[]);generated",
+ "Microsoft.NETCore.Platforms.BuildTasks;ILog;LogMessage;(Microsoft.NETCore.Platforms.BuildTasks.LogImportance,System.String,System.Object[]);generated",
+ "Microsoft.NETCore.Platforms.BuildTasks;ILog;LogMessage;(System.String,System.Object[]);generated",
+ "Microsoft.NETCore.Platforms.BuildTasks;ILog;LogWarning;(System.String,System.Object[]);generated",
+ "Microsoft.NETCore.Platforms.BuildTasks;RID;Equals;(Microsoft.NETCore.Platforms.BuildTasks.RID);generated",
+ "Microsoft.NETCore.Platforms.BuildTasks;RID;Equals;(System.Object);generated",
+ "Microsoft.NETCore.Platforms.BuildTasks;RID;GetHashCode;();generated",
+ "Microsoft.NETCore.Platforms.BuildTasks;RID;Parse;(System.String);generated",
+ "Microsoft.NETCore.Platforms.BuildTasks;RID;ToString;();generated",
+ "Microsoft.NETCore.Platforms.BuildTasks;RID;get_Architecture;();generated",
+ "Microsoft.NETCore.Platforms.BuildTasks;RID;get_BaseRID;();generated",
+ "Microsoft.NETCore.Platforms.BuildTasks;RID;get_HasArchitecture;();generated",
+ "Microsoft.NETCore.Platforms.BuildTasks;RID;get_HasQualifier;();generated",
+ "Microsoft.NETCore.Platforms.BuildTasks;RID;get_HasVersion;();generated",
+ "Microsoft.NETCore.Platforms.BuildTasks;RID;get_OmitVersionDelimiter;();generated",
+ "Microsoft.NETCore.Platforms.BuildTasks;RID;get_Qualifier;();generated",
+ "Microsoft.NETCore.Platforms.BuildTasks;RID;get_Version;();generated",
+ "Microsoft.NETCore.Platforms.BuildTasks;RID;set_Architecture;(System.String);generated",
+ "Microsoft.NETCore.Platforms.BuildTasks;RID;set_BaseRID;(System.String);generated",
+ "Microsoft.NETCore.Platforms.BuildTasks;RID;set_OmitVersionDelimiter;(System.Boolean);generated",
+ "Microsoft.NETCore.Platforms.BuildTasks;RID;set_Qualifier;(System.String);generated",
+ "Microsoft.NETCore.Platforms.BuildTasks;RID;set_Version;(Microsoft.NETCore.Platforms.BuildTasks.RuntimeVersion);generated",
+ "Microsoft.NETCore.Platforms.BuildTasks;RuntimeGroup;ApplyRid;(Microsoft.NETCore.Platforms.BuildTasks.RID);generated",
+ "Microsoft.NETCore.Platforms.BuildTasks;RuntimeGroup;GetRuntimeDescriptions;();generated",
+ "Microsoft.NETCore.Platforms.BuildTasks;RuntimeGroup;GetRuntimeGraph;();generated",
+ "Microsoft.NETCore.Platforms.BuildTasks;RuntimeGroup;RuntimeGroup;(Microsoft.Build.Framework.ITaskItem);generated",
+ "Microsoft.NETCore.Platforms.BuildTasks;RuntimeGroup;RuntimeGroup;(System.String,System.String,System.Boolean,System.Boolean,System.Boolean,System.Collections.Generic.IEnumerable);generated",
+ "Microsoft.NETCore.Platforms.BuildTasks;RuntimeGroup;get_AdditionalQualifiers;();generated",
+ "Microsoft.NETCore.Platforms.BuildTasks;RuntimeGroup;get_ApplyVersionsToParent;();generated",
+ "Microsoft.NETCore.Platforms.BuildTasks;RuntimeGroup;get_Architectures;();generated",
+ "Microsoft.NETCore.Platforms.BuildTasks;RuntimeGroup;get_BaseRID;();generated",
+ "Microsoft.NETCore.Platforms.BuildTasks;RuntimeGroup;get_OmitRIDDefinitions;();generated",
+ "Microsoft.NETCore.Platforms.BuildTasks;RuntimeGroup;get_OmitRIDReferences;();generated",
+ "Microsoft.NETCore.Platforms.BuildTasks;RuntimeGroup;get_OmitRIDs;();generated",
+ "Microsoft.NETCore.Platforms.BuildTasks;RuntimeGroup;get_OmitVersionDelimiter;();generated",
+ "Microsoft.NETCore.Platforms.BuildTasks;RuntimeGroup;get_Parent;();generated",
+ "Microsoft.NETCore.Platforms.BuildTasks;RuntimeGroup;get_TreatVersionsAsCompatible;();generated",
+ "Microsoft.NETCore.Platforms.BuildTasks;RuntimeGroup;get_Versions;();generated",
+ "Microsoft.NETCore.Platforms.BuildTasks;RuntimeGroupCollection;AddRuntimeIdentifier;(Microsoft.NETCore.Platforms.BuildTasks.RID,System.String);generated",
+ "Microsoft.NETCore.Platforms.BuildTasks;RuntimeGroupCollection;AddRuntimeIdentifier;(System.String,System.String);generated",
+ "Microsoft.NETCore.Platforms.BuildTasks;RuntimeVersion;CompareTo;(Microsoft.NETCore.Platforms.BuildTasks.RuntimeVersion);generated",
+ "Microsoft.NETCore.Platforms.BuildTasks;RuntimeVersion;CompareTo;(System.Object);generated",
+ "Microsoft.NETCore.Platforms.BuildTasks;RuntimeVersion;Equals;(Microsoft.NETCore.Platforms.BuildTasks.RuntimeVersion);generated",
+ "Microsoft.NETCore.Platforms.BuildTasks;RuntimeVersion;Equals;(System.Object);generated",
+ "Microsoft.NETCore.Platforms.BuildTasks;RuntimeVersion;GetHashCode;();generated",
+ "Microsoft.NETCore.Platforms.BuildTasks;RuntimeVersion;op_Equality;(Microsoft.NETCore.Platforms.BuildTasks.RuntimeVersion,Microsoft.NETCore.Platforms.BuildTasks.RuntimeVersion);generated",
+ "Microsoft.NETCore.Platforms.BuildTasks;RuntimeVersion;op_GreaterThan;(Microsoft.NETCore.Platforms.BuildTasks.RuntimeVersion,Microsoft.NETCore.Platforms.BuildTasks.RuntimeVersion);generated",
+ "Microsoft.NETCore.Platforms.BuildTasks;RuntimeVersion;op_GreaterThanOrEqual;(Microsoft.NETCore.Platforms.BuildTasks.RuntimeVersion,Microsoft.NETCore.Platforms.BuildTasks.RuntimeVersion);generated",
+ "Microsoft.NETCore.Platforms.BuildTasks;RuntimeVersion;op_Inequality;(Microsoft.NETCore.Platforms.BuildTasks.RuntimeVersion,Microsoft.NETCore.Platforms.BuildTasks.RuntimeVersion);generated",
+ "Microsoft.NETCore.Platforms.BuildTasks;RuntimeVersion;op_LessThan;(Microsoft.NETCore.Platforms.BuildTasks.RuntimeVersion,Microsoft.NETCore.Platforms.BuildTasks.RuntimeVersion);generated",
+ "Microsoft.NETCore.Platforms.BuildTasks;RuntimeVersion;op_LessThanOrEqual;(Microsoft.NETCore.Platforms.BuildTasks.RuntimeVersion,Microsoft.NETCore.Platforms.BuildTasks.RuntimeVersion);generated",
+ "Microsoft.VisualBasic.CompilerServices;BooleanType;FromObject;(System.Object);generated",
+ "Microsoft.VisualBasic.CompilerServices;BooleanType;FromString;(System.String);generated",
+ "Microsoft.VisualBasic.CompilerServices;ByteType;FromObject;(System.Object);generated",
+ "Microsoft.VisualBasic.CompilerServices;ByteType;FromString;(System.String);generated",
+ "Microsoft.VisualBasic.CompilerServices;CharArrayType;FromObject;(System.Object);generated",
+ "Microsoft.VisualBasic.CompilerServices;CharArrayType;FromString;(System.String);generated",
+ "Microsoft.VisualBasic.CompilerServices;CharType;FromObject;(System.Object);generated",
+ "Microsoft.VisualBasic.CompilerServices;CharType;FromString;(System.String);generated",
+ "Microsoft.VisualBasic.CompilerServices;Conversions;ChangeType;(System.Object,System.Type);generated",
+ "Microsoft.VisualBasic.CompilerServices;Conversions;FallbackUserDefinedConversion;(System.Object,System.Type);generated",
+ "Microsoft.VisualBasic.CompilerServices;Conversions;FromCharAndCount;(System.Char,System.Int32);generated",
+ "Microsoft.VisualBasic.CompilerServices;Conversions;FromCharArray;(System.Char[]);generated",
+ "Microsoft.VisualBasic.CompilerServices;Conversions;FromCharArraySubset;(System.Char[],System.Int32,System.Int32);generated",
+ "Microsoft.VisualBasic.CompilerServices;Conversions;ToBoolean;(System.Object);generated",
+ "Microsoft.VisualBasic.CompilerServices;Conversions;ToBoolean;(System.String);generated",
+ "Microsoft.VisualBasic.CompilerServices;Conversions;ToByte;(System.Object);generated",
+ "Microsoft.VisualBasic.CompilerServices;Conversions;ToByte;(System.String);generated",
+ "Microsoft.VisualBasic.CompilerServices;Conversions;ToChar;(System.Object);generated",
+ "Microsoft.VisualBasic.CompilerServices;Conversions;ToChar;(System.String);generated",
+ "Microsoft.VisualBasic.CompilerServices;Conversions;ToCharArrayRankOne;(System.Object);generated",
+ "Microsoft.VisualBasic.CompilerServices;Conversions;ToCharArrayRankOne;(System.String);generated",
+ "Microsoft.VisualBasic.CompilerServices;Conversions;ToDate;(System.Object);generated",
+ "Microsoft.VisualBasic.CompilerServices;Conversions;ToDate;(System.String);generated",
+ "Microsoft.VisualBasic.CompilerServices;Conversions;ToDecimal;(System.Boolean);generated",
+ "Microsoft.VisualBasic.CompilerServices;Conversions;ToDecimal;(System.Object);generated",
+ "Microsoft.VisualBasic.CompilerServices;Conversions;ToDecimal;(System.String);generated",
+ "Microsoft.VisualBasic.CompilerServices;Conversions;ToDouble;(System.Object);generated",
+ "Microsoft.VisualBasic.CompilerServices;Conversions;ToDouble;(System.String);generated",
+ "Microsoft.VisualBasic.CompilerServices;Conversions;ToGenericParameter<>;(System.Object);generated",
+ "Microsoft.VisualBasic.CompilerServices;Conversions;ToInteger;(System.Object);generated",
+ "Microsoft.VisualBasic.CompilerServices;Conversions;ToInteger;(System.String);generated",
+ "Microsoft.VisualBasic.CompilerServices;Conversions;ToLong;(System.Object);generated",
+ "Microsoft.VisualBasic.CompilerServices;Conversions;ToLong;(System.String);generated",
+ "Microsoft.VisualBasic.CompilerServices;Conversions;ToSByte;(System.Object);generated",
+ "Microsoft.VisualBasic.CompilerServices;Conversions;ToSByte;(System.String);generated",
+ "Microsoft.VisualBasic.CompilerServices;Conversions;ToShort;(System.Object);generated",
+ "Microsoft.VisualBasic.CompilerServices;Conversions;ToShort;(System.String);generated",
+ "Microsoft.VisualBasic.CompilerServices;Conversions;ToSingle;(System.Object);generated",
+ "Microsoft.VisualBasic.CompilerServices;Conversions;ToSingle;(System.String);generated",
+ "Microsoft.VisualBasic.CompilerServices;Conversions;ToString;(System.Boolean);generated",
+ "Microsoft.VisualBasic.CompilerServices;Conversions;ToString;(System.Byte);generated",
+ "Microsoft.VisualBasic.CompilerServices;Conversions;ToString;(System.Char);generated",
+ "Microsoft.VisualBasic.CompilerServices;Conversions;ToString;(System.DateTime);generated",
+ "Microsoft.VisualBasic.CompilerServices;Conversions;ToString;(System.Decimal);generated",
+ "Microsoft.VisualBasic.CompilerServices;Conversions;ToString;(System.Decimal,System.Globalization.NumberFormatInfo);generated",
+ "Microsoft.VisualBasic.CompilerServices;Conversions;ToString;(System.Double);generated",
+ "Microsoft.VisualBasic.CompilerServices;Conversions;ToString;(System.Double,System.Globalization.NumberFormatInfo);generated",
+ "Microsoft.VisualBasic.CompilerServices;Conversions;ToString;(System.Int16);generated",
+ "Microsoft.VisualBasic.CompilerServices;Conversions;ToString;(System.Int32);generated",
+ "Microsoft.VisualBasic.CompilerServices;Conversions;ToString;(System.Int64);generated",
+ "Microsoft.VisualBasic.CompilerServices;Conversions;ToString;(System.Object);generated",
+ "Microsoft.VisualBasic.CompilerServices;Conversions;ToString;(System.Single);generated",
+ "Microsoft.VisualBasic.CompilerServices;Conversions;ToString;(System.Single,System.Globalization.NumberFormatInfo);generated",
+ "Microsoft.VisualBasic.CompilerServices;Conversions;ToString;(System.UInt32);generated",
+ "Microsoft.VisualBasic.CompilerServices;Conversions;ToString;(System.UInt64);generated",
+ "Microsoft.VisualBasic.CompilerServices;Conversions;ToUInteger;(System.Object);generated",
+ "Microsoft.VisualBasic.CompilerServices;Conversions;ToUInteger;(System.String);generated",
+ "Microsoft.VisualBasic.CompilerServices;Conversions;ToULong;(System.Object);generated",
+ "Microsoft.VisualBasic.CompilerServices;Conversions;ToULong;(System.String);generated",
+ "Microsoft.VisualBasic.CompilerServices;Conversions;ToUShort;(System.Object);generated",
+ "Microsoft.VisualBasic.CompilerServices;Conversions;ToUShort;(System.String);generated",
+ "Microsoft.VisualBasic.CompilerServices;DateType;FromObject;(System.Object);generated",
+ "Microsoft.VisualBasic.CompilerServices;DateType;FromString;(System.String);generated",
+ "Microsoft.VisualBasic.CompilerServices;DateType;FromString;(System.String,System.Globalization.CultureInfo);generated",
+ "Microsoft.VisualBasic.CompilerServices;DecimalType;FromBoolean;(System.Boolean);generated",
+ "Microsoft.VisualBasic.CompilerServices;DecimalType;FromObject;(System.Object);generated",
+ "Microsoft.VisualBasic.CompilerServices;DecimalType;FromObject;(System.Object,System.Globalization.NumberFormatInfo);generated",
+ "Microsoft.VisualBasic.CompilerServices;DecimalType;FromString;(System.String);generated",
+ "Microsoft.VisualBasic.CompilerServices;DecimalType;FromString;(System.String,System.Globalization.NumberFormatInfo);generated",
+ "Microsoft.VisualBasic.CompilerServices;DecimalType;Parse;(System.String,System.Globalization.NumberFormatInfo);generated",
+ "Microsoft.VisualBasic.CompilerServices;DesignerGeneratedAttribute;DesignerGeneratedAttribute;();generated",
+ "Microsoft.VisualBasic.CompilerServices;DoubleType;FromObject;(System.Object);generated",
+ "Microsoft.VisualBasic.CompilerServices;DoubleType;FromObject;(System.Object,System.Globalization.NumberFormatInfo);generated",
+ "Microsoft.VisualBasic.CompilerServices;DoubleType;FromString;(System.String);generated",
+ "Microsoft.VisualBasic.CompilerServices;DoubleType;FromString;(System.String,System.Globalization.NumberFormatInfo);generated",
+ "Microsoft.VisualBasic.CompilerServices;DoubleType;Parse;(System.String);generated",
+ "Microsoft.VisualBasic.CompilerServices;DoubleType;Parse;(System.String,System.Globalization.NumberFormatInfo);generated",
+ "Microsoft.VisualBasic.CompilerServices;IncompleteInitialization;IncompleteInitialization;();generated",
+ "Microsoft.VisualBasic.CompilerServices;IntegerType;FromObject;(System.Object);generated",
+ "Microsoft.VisualBasic.CompilerServices;IntegerType;FromString;(System.String);generated",
+ "Microsoft.VisualBasic.CompilerServices;LateBinding;LateCall;(System.Object,System.Type,System.String,System.Object[],System.String[],System.Boolean[]);generated",
+ "Microsoft.VisualBasic.CompilerServices;LateBinding;LateGet;(System.Object,System.Type,System.String,System.Object[],System.String[],System.Boolean[]);generated",
+ "Microsoft.VisualBasic.CompilerServices;LateBinding;LateIndexGet;(System.Object,System.Object[],System.String[]);generated",
+ "Microsoft.VisualBasic.CompilerServices;LateBinding;LateIndexSet;(System.Object,System.Object[],System.String[]);generated",
+ "Microsoft.VisualBasic.CompilerServices;LateBinding;LateIndexSetComplex;(System.Object,System.Object[],System.String[],System.Boolean,System.Boolean);generated",
+ "Microsoft.VisualBasic.CompilerServices;LateBinding;LateSet;(System.Object,System.Type,System.String,System.Object[],System.String[]);generated",
+ "Microsoft.VisualBasic.CompilerServices;LateBinding;LateSetComplex;(System.Object,System.Type,System.String,System.Object[],System.String[],System.Boolean,System.Boolean);generated",
+ "Microsoft.VisualBasic.CompilerServices;LikeOperator;LikeObject;(System.Object,System.Object,Microsoft.VisualBasic.CompareMethod);generated",
+ "Microsoft.VisualBasic.CompilerServices;LikeOperator;LikeString;(System.String,System.String,Microsoft.VisualBasic.CompareMethod);generated",
+ "Microsoft.VisualBasic.CompilerServices;LongType;FromObject;(System.Object);generated",
+ "Microsoft.VisualBasic.CompilerServices;LongType;FromString;(System.String);generated",
+ "Microsoft.VisualBasic.CompilerServices;NewLateBinding;FallbackCall;(System.Object,System.String,System.Object[],System.String[],System.Boolean);generated",
+ "Microsoft.VisualBasic.CompilerServices;NewLateBinding;FallbackGet;(System.Object,System.String,System.Object[],System.String[]);generated",
+ "Microsoft.VisualBasic.CompilerServices;NewLateBinding;FallbackIndexSet;(System.Object,System.Object[],System.String[]);generated",
+ "Microsoft.VisualBasic.CompilerServices;NewLateBinding;FallbackIndexSetComplex;(System.Object,System.Object[],System.String[],System.Boolean,System.Boolean);generated",
+ "Microsoft.VisualBasic.CompilerServices;NewLateBinding;FallbackInvokeDefault1;(System.Object,System.Object[],System.String[],System.Boolean);generated",
+ "Microsoft.VisualBasic.CompilerServices;NewLateBinding;FallbackInvokeDefault2;(System.Object,System.Object[],System.String[],System.Boolean);generated",
+ "Microsoft.VisualBasic.CompilerServices;NewLateBinding;FallbackSet;(System.Object,System.String,System.Object[]);generated",
+ "Microsoft.VisualBasic.CompilerServices;NewLateBinding;FallbackSetComplex;(System.Object,System.String,System.Object[],System.Boolean,System.Boolean);generated",
+ "Microsoft.VisualBasic.CompilerServices;NewLateBinding;LateCall;(System.Object,System.Type,System.String,System.Object[],System.String[],System.Type[],System.Boolean[],System.Boolean);generated",
+ "Microsoft.VisualBasic.CompilerServices;NewLateBinding;LateCallInvokeDefault;(System.Object,System.Object[],System.String[],System.Boolean);generated",
+ "Microsoft.VisualBasic.CompilerServices;NewLateBinding;LateGet;(System.Object,System.Type,System.String,System.Object[],System.String[],System.Type[],System.Boolean[]);generated",
+ "Microsoft.VisualBasic.CompilerServices;NewLateBinding;LateGetInvokeDefault;(System.Object,System.Object[],System.String[],System.Boolean);generated",
+ "Microsoft.VisualBasic.CompilerServices;NewLateBinding;LateIndexGet;(System.Object,System.Object[],System.String[]);generated",
+ "Microsoft.VisualBasic.CompilerServices;NewLateBinding;LateIndexSet;(System.Object,System.Object[],System.String[]);generated",
+ "Microsoft.VisualBasic.CompilerServices;NewLateBinding;LateIndexSetComplex;(System.Object,System.Object[],System.String[],System.Boolean,System.Boolean);generated",
+ "Microsoft.VisualBasic.CompilerServices;NewLateBinding;LateSet;(System.Object,System.Type,System.String,System.Object[],System.String[],System.Type[]);generated",
+ "Microsoft.VisualBasic.CompilerServices;NewLateBinding;LateSet;(System.Object,System.Type,System.String,System.Object[],System.String[],System.Type[],System.Boolean,System.Boolean,Microsoft.VisualBasic.CallType);generated",
+ "Microsoft.VisualBasic.CompilerServices;NewLateBinding;LateSetComplex;(System.Object,System.Type,System.String,System.Object[],System.String[],System.Type[],System.Boolean,System.Boolean);generated",
+ "Microsoft.VisualBasic.CompilerServices;ObjectFlowControl+ForLoopControl;ForLoopInitObj;(System.Object,System.Object,System.Object,System.Object,System.Object,System.Object);generated",
+ "Microsoft.VisualBasic.CompilerServices;ObjectFlowControl+ForLoopControl;ForNextCheckDec;(System.Decimal,System.Decimal,System.Decimal);generated",
+ "Microsoft.VisualBasic.CompilerServices;ObjectFlowControl+ForLoopControl;ForNextCheckObj;(System.Object,System.Object,System.Object);generated",
+ "Microsoft.VisualBasic.CompilerServices;ObjectFlowControl+ForLoopControl;ForNextCheckR4;(System.Single,System.Single,System.Single);generated",
+ "Microsoft.VisualBasic.CompilerServices;ObjectFlowControl+ForLoopControl;ForNextCheckR8;(System.Double,System.Double,System.Double);generated",
+ "Microsoft.VisualBasic.CompilerServices;ObjectFlowControl;CheckForSyncLockOnValueType;(System.Object);generated",
+ "Microsoft.VisualBasic.CompilerServices;ObjectType;AddObj;(System.Object,System.Object);generated",
+ "Microsoft.VisualBasic.CompilerServices;ObjectType;BitAndObj;(System.Object,System.Object);generated",
+ "Microsoft.VisualBasic.CompilerServices;ObjectType;BitOrObj;(System.Object,System.Object);generated",
+ "Microsoft.VisualBasic.CompilerServices;ObjectType;BitXorObj;(System.Object,System.Object);generated",
+ "Microsoft.VisualBasic.CompilerServices;ObjectType;DivObj;(System.Object,System.Object);generated",
+ "Microsoft.VisualBasic.CompilerServices;ObjectType;GetObjectValuePrimitive;(System.Object);generated",
+ "Microsoft.VisualBasic.CompilerServices;ObjectType;IDivObj;(System.Object,System.Object);generated",
+ "Microsoft.VisualBasic.CompilerServices;ObjectType;LikeObj;(System.Object,System.Object,Microsoft.VisualBasic.CompareMethod);generated",
+ "Microsoft.VisualBasic.CompilerServices;ObjectType;ModObj;(System.Object,System.Object);generated",
+ "Microsoft.VisualBasic.CompilerServices;ObjectType;MulObj;(System.Object,System.Object);generated",
+ "Microsoft.VisualBasic.CompilerServices;ObjectType;NegObj;(System.Object);generated",
+ "Microsoft.VisualBasic.CompilerServices;ObjectType;NotObj;(System.Object);generated",
+ "Microsoft.VisualBasic.CompilerServices;ObjectType;ObjTst;(System.Object,System.Object,System.Boolean);generated",
+ "Microsoft.VisualBasic.CompilerServices;ObjectType;ObjectType;();generated",
+ "Microsoft.VisualBasic.CompilerServices;ObjectType;PlusObj;(System.Object);generated",
+ "Microsoft.VisualBasic.CompilerServices;ObjectType;PowObj;(System.Object,System.Object);generated",
+ "Microsoft.VisualBasic.CompilerServices;ObjectType;ShiftLeftObj;(System.Object,System.Int32);generated",
+ "Microsoft.VisualBasic.CompilerServices;ObjectType;ShiftRightObj;(System.Object,System.Int32);generated",
+ "Microsoft.VisualBasic.CompilerServices;ObjectType;StrCatObj;(System.Object,System.Object);generated",
+ "Microsoft.VisualBasic.CompilerServices;ObjectType;SubObj;(System.Object,System.Object);generated",
+ "Microsoft.VisualBasic.CompilerServices;ObjectType;XorObj;(System.Object,System.Object);generated",
+ "Microsoft.VisualBasic.CompilerServices;Operators;AddObject;(System.Object,System.Object);generated",
+ "Microsoft.VisualBasic.CompilerServices;Operators;AndObject;(System.Object,System.Object);generated",
+ "Microsoft.VisualBasic.CompilerServices;Operators;CompareObjectEqual;(System.Object,System.Object,System.Boolean);generated",
+ "Microsoft.VisualBasic.CompilerServices;Operators;CompareObjectGreater;(System.Object,System.Object,System.Boolean);generated",
+ "Microsoft.VisualBasic.CompilerServices;Operators;CompareObjectGreaterEqual;(System.Object,System.Object,System.Boolean);generated",
+ "Microsoft.VisualBasic.CompilerServices;Operators;CompareObjectLess;(System.Object,System.Object,System.Boolean);generated",
+ "Microsoft.VisualBasic.CompilerServices;Operators;CompareObjectLessEqual;(System.Object,System.Object,System.Boolean);generated",
+ "Microsoft.VisualBasic.CompilerServices;Operators;CompareObjectNotEqual;(System.Object,System.Object,System.Boolean);generated",
+ "Microsoft.VisualBasic.CompilerServices;Operators;CompareString;(System.String,System.String,System.Boolean);generated",
+ "Microsoft.VisualBasic.CompilerServices;Operators;ConcatenateObject;(System.Object,System.Object);generated",
+ "Microsoft.VisualBasic.CompilerServices;Operators;ConditionalCompareObjectEqual;(System.Object,System.Object,System.Boolean);generated",
+ "Microsoft.VisualBasic.CompilerServices;Operators;ConditionalCompareObjectGreater;(System.Object,System.Object,System.Boolean);generated",
+ "Microsoft.VisualBasic.CompilerServices;Operators;ConditionalCompareObjectGreaterEqual;(System.Object,System.Object,System.Boolean);generated",
+ "Microsoft.VisualBasic.CompilerServices;Operators;ConditionalCompareObjectLess;(System.Object,System.Object,System.Boolean);generated",
+ "Microsoft.VisualBasic.CompilerServices;Operators;ConditionalCompareObjectLessEqual;(System.Object,System.Object,System.Boolean);generated",
+ "Microsoft.VisualBasic.CompilerServices;Operators;ConditionalCompareObjectNotEqual;(System.Object,System.Object,System.Boolean);generated",
+ "Microsoft.VisualBasic.CompilerServices;Operators;DivideObject;(System.Object,System.Object);generated",
+ "Microsoft.VisualBasic.CompilerServices;Operators;ExponentObject;(System.Object,System.Object);generated",
+ "Microsoft.VisualBasic.CompilerServices;Operators;FallbackInvokeUserDefinedOperator;(System.Object,System.Object[]);generated",
+ "Microsoft.VisualBasic.CompilerServices;Operators;IntDivideObject;(System.Object,System.Object);generated",
+ "Microsoft.VisualBasic.CompilerServices;Operators;LeftShiftObject;(System.Object,System.Object);generated",
+ "Microsoft.VisualBasic.CompilerServices;Operators;ModObject;(System.Object,System.Object);generated",
+ "Microsoft.VisualBasic.CompilerServices;Operators;MultiplyObject;(System.Object,System.Object);generated",
+ "Microsoft.VisualBasic.CompilerServices;Operators;NegateObject;(System.Object);generated",
+ "Microsoft.VisualBasic.CompilerServices;Operators;NotObject;(System.Object);generated",
+ "Microsoft.VisualBasic.CompilerServices;Operators;OrObject;(System.Object,System.Object);generated",
+ "Microsoft.VisualBasic.CompilerServices;Operators;PlusObject;(System.Object);generated",
+ "Microsoft.VisualBasic.CompilerServices;Operators;RightShiftObject;(System.Object,System.Object);generated",
+ "Microsoft.VisualBasic.CompilerServices;Operators;SubtractObject;(System.Object,System.Object);generated",
+ "Microsoft.VisualBasic.CompilerServices;Operators;XorObject;(System.Object,System.Object);generated",
+ "Microsoft.VisualBasic.CompilerServices;OptionCompareAttribute;OptionCompareAttribute;();generated",
+ "Microsoft.VisualBasic.CompilerServices;OptionTextAttribute;OptionTextAttribute;();generated",
+ "Microsoft.VisualBasic.CompilerServices;ProjectData;ClearProjectError;();generated",
+ "Microsoft.VisualBasic.CompilerServices;ProjectData;CreateProjectError;(System.Int32);generated",
+ "Microsoft.VisualBasic.CompilerServices;ProjectData;EndApp;();generated",
+ "Microsoft.VisualBasic.CompilerServices;ProjectData;SetProjectError;(System.Exception);generated",
+ "Microsoft.VisualBasic.CompilerServices;ProjectData;SetProjectError;(System.Exception,System.Int32);generated",
+ "Microsoft.VisualBasic.CompilerServices;ShortType;FromObject;(System.Object);generated",
+ "Microsoft.VisualBasic.CompilerServices;ShortType;FromString;(System.String);generated",
+ "Microsoft.VisualBasic.CompilerServices;SingleType;FromObject;(System.Object);generated",
+ "Microsoft.VisualBasic.CompilerServices;SingleType;FromObject;(System.Object,System.Globalization.NumberFormatInfo);generated",
+ "Microsoft.VisualBasic.CompilerServices;SingleType;FromString;(System.String);generated",
+ "Microsoft.VisualBasic.CompilerServices;SingleType;FromString;(System.String,System.Globalization.NumberFormatInfo);generated",
+ "Microsoft.VisualBasic.CompilerServices;StandardModuleAttribute;StandardModuleAttribute;();generated",
+ "Microsoft.VisualBasic.CompilerServices;StaticLocalInitFlag;StaticLocalInitFlag;();generated",
+ "Microsoft.VisualBasic.CompilerServices;StringType;FromBoolean;(System.Boolean);generated",
+ "Microsoft.VisualBasic.CompilerServices;StringType;FromByte;(System.Byte);generated",
+ "Microsoft.VisualBasic.CompilerServices;StringType;FromChar;(System.Char);generated",
+ "Microsoft.VisualBasic.CompilerServices;StringType;FromDate;(System.DateTime);generated",
+ "Microsoft.VisualBasic.CompilerServices;StringType;FromDecimal;(System.Decimal);generated",
+ "Microsoft.VisualBasic.CompilerServices;StringType;FromDecimal;(System.Decimal,System.Globalization.NumberFormatInfo);generated",
+ "Microsoft.VisualBasic.CompilerServices;StringType;FromDouble;(System.Double);generated",
+ "Microsoft.VisualBasic.CompilerServices;StringType;FromDouble;(System.Double,System.Globalization.NumberFormatInfo);generated",
+ "Microsoft.VisualBasic.CompilerServices;StringType;FromInteger;(System.Int32);generated",
+ "Microsoft.VisualBasic.CompilerServices;StringType;FromLong;(System.Int64);generated",
+ "Microsoft.VisualBasic.CompilerServices;StringType;FromObject;(System.Object);generated",
+ "Microsoft.VisualBasic.CompilerServices;StringType;FromShort;(System.Int16);generated",
+ "Microsoft.VisualBasic.CompilerServices;StringType;FromSingle;(System.Single);generated",
+ "Microsoft.VisualBasic.CompilerServices;StringType;FromSingle;(System.Single,System.Globalization.NumberFormatInfo);generated",
+ "Microsoft.VisualBasic.CompilerServices;StringType;MidStmtStr;(System.String,System.Int32,System.Int32,System.String);generated",
+ "Microsoft.VisualBasic.CompilerServices;StringType;StrCmp;(System.String,System.String,System.Boolean);generated",
+ "Microsoft.VisualBasic.CompilerServices;StringType;StrLike;(System.String,System.String,Microsoft.VisualBasic.CompareMethod);generated",
+ "Microsoft.VisualBasic.CompilerServices;StringType;StrLikeBinary;(System.String,System.String);generated",
+ "Microsoft.VisualBasic.CompilerServices;StringType;StrLikeText;(System.String,System.String);generated",
+ "Microsoft.VisualBasic.CompilerServices;Utils;CopyArray;(System.Array,System.Array);generated",
+ "Microsoft.VisualBasic.CompilerServices;Utils;GetResourceString;(System.String,System.String[]);generated",
+ "Microsoft.VisualBasic.CompilerServices;Versioned;CallByName;(System.Object,System.String,Microsoft.VisualBasic.CallType,System.Object[]);generated",
+ "Microsoft.VisualBasic.CompilerServices;Versioned;IsNumeric;(System.Object);generated",
+ "Microsoft.VisualBasic.CompilerServices;Versioned;SystemTypeName;(System.String);generated",
+ "Microsoft.VisualBasic.CompilerServices;Versioned;TypeName;(System.Object);generated",
+ "Microsoft.VisualBasic.CompilerServices;Versioned;VbTypeName;(System.String);generated",
+ "Microsoft.VisualBasic.FileIO;FileSystem;CombinePath;(System.String,System.String);generated",
+ "Microsoft.VisualBasic.FileIO;FileSystem;CopyDirectory;(System.String,System.String);generated",
+ "Microsoft.VisualBasic.FileIO;FileSystem;CopyDirectory;(System.String,System.String,Microsoft.VisualBasic.FileIO.UIOption);generated",
+ "Microsoft.VisualBasic.FileIO;FileSystem;CopyDirectory;(System.String,System.String,Microsoft.VisualBasic.FileIO.UIOption,Microsoft.VisualBasic.FileIO.UICancelOption);generated",
+ "Microsoft.VisualBasic.FileIO;FileSystem;CopyDirectory;(System.String,System.String,System.Boolean);generated",
+ "Microsoft.VisualBasic.FileIO;FileSystem;CopyFile;(System.String,System.String);generated",
+ "Microsoft.VisualBasic.FileIO;FileSystem;CopyFile;(System.String,System.String,Microsoft.VisualBasic.FileIO.UIOption);generated",
+ "Microsoft.VisualBasic.FileIO;FileSystem;CopyFile;(System.String,System.String,Microsoft.VisualBasic.FileIO.UIOption,Microsoft.VisualBasic.FileIO.UICancelOption);generated",
+ "Microsoft.VisualBasic.FileIO;FileSystem;CopyFile;(System.String,System.String,System.Boolean);generated",
+ "Microsoft.VisualBasic.FileIO;FileSystem;CreateDirectory;(System.String);generated",
+ "Microsoft.VisualBasic.FileIO;FileSystem;DeleteDirectory;(System.String,Microsoft.VisualBasic.FileIO.DeleteDirectoryOption);generated",
+ "Microsoft.VisualBasic.FileIO;FileSystem;DeleteDirectory;(System.String,Microsoft.VisualBasic.FileIO.UIOption,Microsoft.VisualBasic.FileIO.RecycleOption);generated",
+ "Microsoft.VisualBasic.FileIO;FileSystem;DeleteDirectory;(System.String,Microsoft.VisualBasic.FileIO.UIOption,Microsoft.VisualBasic.FileIO.RecycleOption,Microsoft.VisualBasic.FileIO.UICancelOption);generated",
+ "Microsoft.VisualBasic.FileIO;FileSystem;DeleteFile;(System.String);generated",
+ "Microsoft.VisualBasic.FileIO;FileSystem;DeleteFile;(System.String,Microsoft.VisualBasic.FileIO.UIOption,Microsoft.VisualBasic.FileIO.RecycleOption);generated",
+ "Microsoft.VisualBasic.FileIO;FileSystem;DeleteFile;(System.String,Microsoft.VisualBasic.FileIO.UIOption,Microsoft.VisualBasic.FileIO.RecycleOption,Microsoft.VisualBasic.FileIO.UICancelOption);generated",
+ "Microsoft.VisualBasic.FileIO;FileSystem;DirectoryExists;(System.String);generated",
+ "Microsoft.VisualBasic.FileIO;FileSystem;FileExists;(System.String);generated",
+ "Microsoft.VisualBasic.FileIO;FileSystem;FileSystem;();generated",
+ "Microsoft.VisualBasic.FileIO;FileSystem;FindInFiles;(System.String,System.String,System.Boolean,Microsoft.VisualBasic.FileIO.SearchOption);generated",
+ "Microsoft.VisualBasic.FileIO;FileSystem;FindInFiles;(System.String,System.String,System.Boolean,Microsoft.VisualBasic.FileIO.SearchOption,System.String[]);generated",
+ "Microsoft.VisualBasic.FileIO;FileSystem;GetDirectories;(System.String);generated",
+ "Microsoft.VisualBasic.FileIO;FileSystem;GetDirectories;(System.String,Microsoft.VisualBasic.FileIO.SearchOption,System.String[]);generated",
+ "Microsoft.VisualBasic.FileIO;FileSystem;GetDirectoryInfo;(System.String);generated",
+ "Microsoft.VisualBasic.FileIO;FileSystem;GetDriveInfo;(System.String);generated",
+ "Microsoft.VisualBasic.FileIO;FileSystem;GetFileInfo;(System.String);generated",
+ "Microsoft.VisualBasic.FileIO;FileSystem;GetFiles;(System.String);generated",
+ "Microsoft.VisualBasic.FileIO;FileSystem;GetFiles;(System.String,Microsoft.VisualBasic.FileIO.SearchOption,System.String[]);generated",
+ "Microsoft.VisualBasic.FileIO;FileSystem;GetName;(System.String);generated",
+ "Microsoft.VisualBasic.FileIO;FileSystem;GetParentPath;(System.String);generated",
+ "Microsoft.VisualBasic.FileIO;FileSystem;GetTempFileName;();generated",
+ "Microsoft.VisualBasic.FileIO;FileSystem;MoveDirectory;(System.String,System.String);generated",
+ "Microsoft.VisualBasic.FileIO;FileSystem;MoveDirectory;(System.String,System.String,Microsoft.VisualBasic.FileIO.UIOption);generated",
+ "Microsoft.VisualBasic.FileIO;FileSystem;MoveDirectory;(System.String,System.String,Microsoft.VisualBasic.FileIO.UIOption,Microsoft.VisualBasic.FileIO.UICancelOption);generated",
+ "Microsoft.VisualBasic.FileIO;FileSystem;MoveDirectory;(System.String,System.String,System.Boolean);generated",
+ "Microsoft.VisualBasic.FileIO;FileSystem;MoveFile;(System.String,System.String);generated",
+ "Microsoft.VisualBasic.FileIO;FileSystem;MoveFile;(System.String,System.String,Microsoft.VisualBasic.FileIO.UIOption);generated",
+ "Microsoft.VisualBasic.FileIO;FileSystem;MoveFile;(System.String,System.String,Microsoft.VisualBasic.FileIO.UIOption,Microsoft.VisualBasic.FileIO.UICancelOption);generated",
+ "Microsoft.VisualBasic.FileIO;FileSystem;MoveFile;(System.String,System.String,System.Boolean);generated",
+ "Microsoft.VisualBasic.FileIO;FileSystem;OpenTextFieldParser;(System.String);generated",
+ "Microsoft.VisualBasic.FileIO;FileSystem;OpenTextFieldParser;(System.String,System.Int32[]);generated",
+ "Microsoft.VisualBasic.FileIO;FileSystem;OpenTextFieldParser;(System.String,System.String[]);generated",
+ "Microsoft.VisualBasic.FileIO;FileSystem;OpenTextFileReader;(System.String);generated",
+ "Microsoft.VisualBasic.FileIO;FileSystem;OpenTextFileReader;(System.String,System.Text.Encoding);generated",
+ "Microsoft.VisualBasic.FileIO;FileSystem;OpenTextFileWriter;(System.String,System.Boolean);generated",
+ "Microsoft.VisualBasic.FileIO;FileSystem;OpenTextFileWriter;(System.String,System.Boolean,System.Text.Encoding);generated",
+ "Microsoft.VisualBasic.FileIO;FileSystem;ReadAllBytes;(System.String);generated",
+ "Microsoft.VisualBasic.FileIO;FileSystem;ReadAllText;(System.String);generated",
+ "Microsoft.VisualBasic.FileIO;FileSystem;ReadAllText;(System.String,System.Text.Encoding);generated",
+ "Microsoft.VisualBasic.FileIO;FileSystem;RenameDirectory;(System.String,System.String);generated",
+ "Microsoft.VisualBasic.FileIO;FileSystem;RenameFile;(System.String,System.String);generated",
+ "Microsoft.VisualBasic.FileIO;FileSystem;WriteAllBytes;(System.String,System.Byte[],System.Boolean);generated",
+ "Microsoft.VisualBasic.FileIO;FileSystem;WriteAllText;(System.String,System.String,System.Boolean);generated",
+ "Microsoft.VisualBasic.FileIO;FileSystem;WriteAllText;(System.String,System.String,System.Boolean,System.Text.Encoding);generated",
+ "Microsoft.VisualBasic.FileIO;FileSystem;get_CurrentDirectory;();generated",
+ "Microsoft.VisualBasic.FileIO;FileSystem;get_Drives;();generated",
+ "Microsoft.VisualBasic.FileIO;FileSystem;set_CurrentDirectory;(System.String);generated",
+ "Microsoft.VisualBasic.FileIO;MalformedLineException;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);generated",
+ "Microsoft.VisualBasic.FileIO;MalformedLineException;MalformedLineException;();generated",
+ "Microsoft.VisualBasic.FileIO;MalformedLineException;MalformedLineException;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);generated",
+ "Microsoft.VisualBasic.FileIO;MalformedLineException;MalformedLineException;(System.String);generated",
+ "Microsoft.VisualBasic.FileIO;MalformedLineException;MalformedLineException;(System.String,System.Exception);generated",
+ "Microsoft.VisualBasic.FileIO;MalformedLineException;MalformedLineException;(System.String,System.Int64);generated",
+ "Microsoft.VisualBasic.FileIO;MalformedLineException;MalformedLineException;(System.String,System.Int64,System.Exception);generated",
+ "Microsoft.VisualBasic.FileIO;MalformedLineException;ToString;();generated",
+ "Microsoft.VisualBasic.FileIO;MalformedLineException;get_LineNumber;();generated",
+ "Microsoft.VisualBasic.FileIO;MalformedLineException;set_LineNumber;(System.Int64);generated",
+ "Microsoft.VisualBasic.FileIO;SpecialDirectories;SpecialDirectories;();generated",
+ "Microsoft.VisualBasic.FileIO;SpecialDirectories;get_AllUsersApplicationData;();generated",
+ "Microsoft.VisualBasic.FileIO;SpecialDirectories;get_CurrentUserApplicationData;();generated",
+ "Microsoft.VisualBasic.FileIO;SpecialDirectories;get_Desktop;();generated",
+ "Microsoft.VisualBasic.FileIO;SpecialDirectories;get_MyDocuments;();generated",
+ "Microsoft.VisualBasic.FileIO;SpecialDirectories;get_MyMusic;();generated",
+ "Microsoft.VisualBasic.FileIO;SpecialDirectories;get_MyPictures;();generated",
+ "Microsoft.VisualBasic.FileIO;SpecialDirectories;get_ProgramFiles;();generated",
+ "Microsoft.VisualBasic.FileIO;SpecialDirectories;get_Programs;();generated",
+ "Microsoft.VisualBasic.FileIO;SpecialDirectories;get_Temp;();generated",
+ "Microsoft.VisualBasic.FileIO;TextFieldParser;Close;();generated",
+ "Microsoft.VisualBasic.FileIO;TextFieldParser;Dispose;();generated",
+ "Microsoft.VisualBasic.FileIO;TextFieldParser;Dispose;(System.Boolean);generated",
+ "Microsoft.VisualBasic.FileIO;TextFieldParser;PeekChars;(System.Int32);generated",
+ "Microsoft.VisualBasic.FileIO;TextFieldParser;ReadFields;();generated",
+ "Microsoft.VisualBasic.FileIO;TextFieldParser;ReadLine;();generated",
+ "Microsoft.VisualBasic.FileIO;TextFieldParser;ReadToEnd;();generated",
+ "Microsoft.VisualBasic.FileIO;TextFieldParser;SetDelimiters;(System.String[]);generated",
+ "Microsoft.VisualBasic.FileIO;TextFieldParser;SetFieldWidths;(System.Int32[]);generated",
+ "Microsoft.VisualBasic.FileIO;TextFieldParser;TextFieldParser;(System.IO.Stream);generated",
+ "Microsoft.VisualBasic.FileIO;TextFieldParser;TextFieldParser;(System.IO.Stream,System.Text.Encoding);generated",
+ "Microsoft.VisualBasic.FileIO;TextFieldParser;TextFieldParser;(System.IO.Stream,System.Text.Encoding,System.Boolean);generated",
+ "Microsoft.VisualBasic.FileIO;TextFieldParser;TextFieldParser;(System.IO.Stream,System.Text.Encoding,System.Boolean,System.Boolean);generated",
+ "Microsoft.VisualBasic.FileIO;TextFieldParser;TextFieldParser;(System.IO.TextReader);generated",
+ "Microsoft.VisualBasic.FileIO;TextFieldParser;TextFieldParser;(System.String);generated",
+ "Microsoft.VisualBasic.FileIO;TextFieldParser;TextFieldParser;(System.String,System.Text.Encoding);generated",
+ "Microsoft.VisualBasic.FileIO;TextFieldParser;TextFieldParser;(System.String,System.Text.Encoding,System.Boolean);generated",
+ "Microsoft.VisualBasic.FileIO;TextFieldParser;get_CommentTokens;();generated",
+ "Microsoft.VisualBasic.FileIO;TextFieldParser;get_Delimiters;();generated",
+ "Microsoft.VisualBasic.FileIO;TextFieldParser;get_EndOfData;();generated",
+ "Microsoft.VisualBasic.FileIO;TextFieldParser;get_ErrorLine;();generated",
+ "Microsoft.VisualBasic.FileIO;TextFieldParser;get_ErrorLineNumber;();generated",
+ "Microsoft.VisualBasic.FileIO;TextFieldParser;get_FieldWidths;();generated",
+ "Microsoft.VisualBasic.FileIO;TextFieldParser;get_HasFieldsEnclosedInQuotes;();generated",
+ "Microsoft.VisualBasic.FileIO;TextFieldParser;get_LineNumber;();generated",
+ "Microsoft.VisualBasic.FileIO;TextFieldParser;get_TextFieldType;();generated",
+ "Microsoft.VisualBasic.FileIO;TextFieldParser;get_TrimWhiteSpace;();generated",
+ "Microsoft.VisualBasic.FileIO;TextFieldParser;set_CommentTokens;(System.String[]);generated",
+ "Microsoft.VisualBasic.FileIO;TextFieldParser;set_Delimiters;(System.String[]);generated",
+ "Microsoft.VisualBasic.FileIO;TextFieldParser;set_FieldWidths;(System.Int32[]);generated",
+ "Microsoft.VisualBasic.FileIO;TextFieldParser;set_HasFieldsEnclosedInQuotes;(System.Boolean);generated",
+ "Microsoft.VisualBasic.FileIO;TextFieldParser;set_TextFieldType;(Microsoft.VisualBasic.FileIO.FieldType);generated",
+ "Microsoft.VisualBasic.FileIO;TextFieldParser;set_TrimWhiteSpace;(System.Boolean);generated",
+ "Microsoft.VisualBasic;Collection;Add;(System.Object,System.String,System.Object,System.Object);generated",
+ "Microsoft.VisualBasic;Collection;Clear;();generated",
+ "Microsoft.VisualBasic;Collection;Collection;();generated",
+ "Microsoft.VisualBasic;Collection;Contains;(System.Object);generated",
+ "Microsoft.VisualBasic;Collection;Contains;(System.String);generated",
+ "Microsoft.VisualBasic;Collection;IndexOf;(System.Object);generated",
+ "Microsoft.VisualBasic;Collection;Remove;(System.Int32);generated",
+ "Microsoft.VisualBasic;Collection;Remove;(System.Object);generated",
+ "Microsoft.VisualBasic;Collection;Remove;(System.String);generated",
+ "Microsoft.VisualBasic;Collection;RemoveAt;(System.Int32);generated",
+ "Microsoft.VisualBasic;Collection;get_Count;();generated",
+ "Microsoft.VisualBasic;Collection;get_IsFixedSize;();generated",
+ "Microsoft.VisualBasic;Collection;get_IsReadOnly;();generated",
+ "Microsoft.VisualBasic;Collection;get_IsSynchronized;();generated",
+ "Microsoft.VisualBasic;Collection;get_SyncRoot;();generated",
+ "Microsoft.VisualBasic;ComClassAttribute;ComClassAttribute;();generated",
+ "Microsoft.VisualBasic;ComClassAttribute;ComClassAttribute;(System.String);generated",
+ "Microsoft.VisualBasic;ComClassAttribute;ComClassAttribute;(System.String,System.String);generated",
+ "Microsoft.VisualBasic;ComClassAttribute;ComClassAttribute;(System.String,System.String,System.String);generated",
+ "Microsoft.VisualBasic;ComClassAttribute;get_ClassID;();generated",
+ "Microsoft.VisualBasic;ComClassAttribute;get_EventID;();generated",
+ "Microsoft.VisualBasic;ComClassAttribute;get_InterfaceID;();generated",
+ "Microsoft.VisualBasic;ComClassAttribute;get_InterfaceShadows;();generated",
+ "Microsoft.VisualBasic;ComClassAttribute;set_InterfaceShadows;(System.Boolean);generated",
+ "Microsoft.VisualBasic;ControlChars;ControlChars;();generated",
+ "Microsoft.VisualBasic;Conversion;CTypeDynamic;(System.Object,System.Type);generated",
+ "Microsoft.VisualBasic;Conversion;CTypeDynamic<>;(System.Object);generated",
+ "Microsoft.VisualBasic;Conversion;ErrorToString;();generated",
+ "Microsoft.VisualBasic;Conversion;ErrorToString;(System.Int32);generated",
+ "Microsoft.VisualBasic;Conversion;Fix;(System.Decimal);generated",
+ "Microsoft.VisualBasic;Conversion;Fix;(System.Double);generated",
+ "Microsoft.VisualBasic;Conversion;Fix;(System.Int16);generated",
+ "Microsoft.VisualBasic;Conversion;Fix;(System.Int32);generated",
+ "Microsoft.VisualBasic;Conversion;Fix;(System.Int64);generated",
+ "Microsoft.VisualBasic;Conversion;Fix;(System.Object);generated",
+ "Microsoft.VisualBasic;Conversion;Fix;(System.Single);generated",
+ "Microsoft.VisualBasic;Conversion;Hex;(System.Byte);generated",
+ "Microsoft.VisualBasic;Conversion;Hex;(System.Int16);generated",
+ "Microsoft.VisualBasic;Conversion;Hex;(System.Int32);generated",
+ "Microsoft.VisualBasic;Conversion;Hex;(System.Int64);generated",
+ "Microsoft.VisualBasic;Conversion;Hex;(System.Object);generated",
+ "Microsoft.VisualBasic;Conversion;Hex;(System.SByte);generated",
+ "Microsoft.VisualBasic;Conversion;Hex;(System.UInt16);generated",
+ "Microsoft.VisualBasic;Conversion;Hex;(System.UInt32);generated",
+ "Microsoft.VisualBasic;Conversion;Hex;(System.UInt64);generated",
+ "Microsoft.VisualBasic;Conversion;Int;(System.Decimal);generated",
+ "Microsoft.VisualBasic;Conversion;Int;(System.Double);generated",
+ "Microsoft.VisualBasic;Conversion;Int;(System.Int16);generated",
+ "Microsoft.VisualBasic;Conversion;Int;(System.Int32);generated",
+ "Microsoft.VisualBasic;Conversion;Int;(System.Int64);generated",
+ "Microsoft.VisualBasic;Conversion;Int;(System.Object);generated",
+ "Microsoft.VisualBasic;Conversion;Int;(System.Single);generated",
+ "Microsoft.VisualBasic;Conversion;Oct;(System.Byte);generated",
+ "Microsoft.VisualBasic;Conversion;Oct;(System.Int16);generated",
+ "Microsoft.VisualBasic;Conversion;Oct;(System.Int32);generated",
+ "Microsoft.VisualBasic;Conversion;Oct;(System.Int64);generated",
+ "Microsoft.VisualBasic;Conversion;Oct;(System.Object);generated",
+ "Microsoft.VisualBasic;Conversion;Oct;(System.SByte);generated",
+ "Microsoft.VisualBasic;Conversion;Oct;(System.UInt16);generated",
+ "Microsoft.VisualBasic;Conversion;Oct;(System.UInt32);generated",
+ "Microsoft.VisualBasic;Conversion;Oct;(System.UInt64);generated",
+ "Microsoft.VisualBasic;Conversion;Str;(System.Object);generated",
+ "Microsoft.VisualBasic;Conversion;Val;(System.Char);generated",
+ "Microsoft.VisualBasic;Conversion;Val;(System.Object);generated",
+ "Microsoft.VisualBasic;Conversion;Val;(System.String);generated",
+ "Microsoft.VisualBasic;DateAndTime;DateAdd;(Microsoft.VisualBasic.DateInterval,System.Double,System.DateTime);generated",
+ "Microsoft.VisualBasic;DateAndTime;DateAdd;(System.String,System.Double,System.Object);generated",
+ "Microsoft.VisualBasic;DateAndTime;DateDiff;(Microsoft.VisualBasic.DateInterval,System.DateTime,System.DateTime,Microsoft.VisualBasic.FirstDayOfWeek,Microsoft.VisualBasic.FirstWeekOfYear);generated",
+ "Microsoft.VisualBasic;DateAndTime;DateDiff;(System.String,System.Object,System.Object,Microsoft.VisualBasic.FirstDayOfWeek,Microsoft.VisualBasic.FirstWeekOfYear);generated",
+ "Microsoft.VisualBasic;DateAndTime;DatePart;(Microsoft.VisualBasic.DateInterval,System.DateTime,Microsoft.VisualBasic.FirstDayOfWeek,Microsoft.VisualBasic.FirstWeekOfYear);generated",
+ "Microsoft.VisualBasic;DateAndTime;DatePart;(System.String,System.Object,Microsoft.VisualBasic.FirstDayOfWeek,Microsoft.VisualBasic.FirstWeekOfYear);generated",
+ "Microsoft.VisualBasic;DateAndTime;DateSerial;(System.Int32,System.Int32,System.Int32);generated",
+ "Microsoft.VisualBasic;DateAndTime;DateValue;(System.String);generated",
+ "Microsoft.VisualBasic;DateAndTime;Day;(System.DateTime);generated",
+ "Microsoft.VisualBasic;DateAndTime;Hour;(System.DateTime);generated",
+ "Microsoft.VisualBasic;DateAndTime;Minute;(System.DateTime);generated",
+ "Microsoft.VisualBasic;DateAndTime;Month;(System.DateTime);generated",
+ "Microsoft.VisualBasic;DateAndTime;MonthName;(System.Int32,System.Boolean);generated",
+ "Microsoft.VisualBasic;DateAndTime;Second;(System.DateTime);generated",
+ "Microsoft.VisualBasic;DateAndTime;TimeSerial;(System.Int32,System.Int32,System.Int32);generated",
+ "Microsoft.VisualBasic;DateAndTime;TimeValue;(System.String);generated",
+ "Microsoft.VisualBasic;DateAndTime;Weekday;(System.DateTime,Microsoft.VisualBasic.FirstDayOfWeek);generated",
+ "Microsoft.VisualBasic;DateAndTime;WeekdayName;(System.Int32,System.Boolean,Microsoft.VisualBasic.FirstDayOfWeek);generated",
+ "Microsoft.VisualBasic;DateAndTime;Year;(System.DateTime);generated",
+ "Microsoft.VisualBasic;DateAndTime;get_DateString;();generated",
+ "Microsoft.VisualBasic;DateAndTime;get_Now;();generated",
+ "Microsoft.VisualBasic;DateAndTime;get_TimeOfDay;();generated",
+ "Microsoft.VisualBasic;DateAndTime;get_TimeString;();generated",
+ "Microsoft.VisualBasic;DateAndTime;get_Timer;();generated",
+ "Microsoft.VisualBasic;DateAndTime;get_Today;();generated",
+ "Microsoft.VisualBasic;DateAndTime;set_DateString;(System.String);generated",
+ "Microsoft.VisualBasic;DateAndTime;set_TimeOfDay;(System.DateTime);generated",
+ "Microsoft.VisualBasic;DateAndTime;set_TimeString;(System.String);generated",
+ "Microsoft.VisualBasic;DateAndTime;set_Today;(System.DateTime);generated",
+ "Microsoft.VisualBasic;ErrObject;Clear;();generated",
+ "Microsoft.VisualBasic;ErrObject;GetException;();generated",
+ "Microsoft.VisualBasic;ErrObject;Raise;(System.Int32,System.Object,System.Object,System.Object,System.Object);generated",
+ "Microsoft.VisualBasic;ErrObject;get_Description;();generated",
+ "Microsoft.VisualBasic;ErrObject;get_Erl;();generated",
+ "Microsoft.VisualBasic;ErrObject;get_HelpContext;();generated",
+ "Microsoft.VisualBasic;ErrObject;get_HelpFile;();generated",
+ "Microsoft.VisualBasic;ErrObject;get_LastDllError;();generated",
+ "Microsoft.VisualBasic;ErrObject;get_Number;();generated",
+ "Microsoft.VisualBasic;ErrObject;get_Source;();generated",
+ "Microsoft.VisualBasic;ErrObject;set_Description;(System.String);generated",
+ "Microsoft.VisualBasic;ErrObject;set_HelpContext;(System.Int32);generated",
+ "Microsoft.VisualBasic;ErrObject;set_HelpFile;(System.String);generated",
+ "Microsoft.VisualBasic;ErrObject;set_Number;(System.Int32);generated",
+ "Microsoft.VisualBasic;ErrObject;set_Source;(System.String);generated",
+ "Microsoft.VisualBasic;FileSystem;ChDir;(System.String);generated",
+ "Microsoft.VisualBasic;FileSystem;ChDrive;(System.Char);generated",
+ "Microsoft.VisualBasic;FileSystem;ChDrive;(System.String);generated",
+ "Microsoft.VisualBasic;FileSystem;CurDir;();generated",
+ "Microsoft.VisualBasic;FileSystem;CurDir;(System.Char);generated",
+ "Microsoft.VisualBasic;FileSystem;Dir;();generated",
+ "Microsoft.VisualBasic;FileSystem;Dir;(System.String,Microsoft.VisualBasic.FileAttribute);generated",
+ "Microsoft.VisualBasic;FileSystem;EOF;(System.Int32);generated",
+ "Microsoft.VisualBasic;FileSystem;FileAttr;(System.Int32);generated",
+ "Microsoft.VisualBasic;FileSystem;FileClose;(System.Int32[]);generated",
+ "Microsoft.VisualBasic;FileSystem;FileCopy;(System.String,System.String);generated",
+ "Microsoft.VisualBasic;FileSystem;FileDateTime;(System.String);generated",
+ "Microsoft.VisualBasic;FileSystem;FileGet;(System.Int32,System.Array,System.Int64,System.Boolean,System.Boolean);generated",
+ "Microsoft.VisualBasic;FileSystem;FileGet;(System.Int32,System.Boolean,System.Int64);generated",
+ "Microsoft.VisualBasic;FileSystem;FileGet;(System.Int32,System.Byte,System.Int64);generated",
+ "Microsoft.VisualBasic;FileSystem;FileGet;(System.Int32,System.Char,System.Int64);generated",
+ "Microsoft.VisualBasic;FileSystem;FileGet;(System.Int32,System.DateTime,System.Int64);generated",
+ "Microsoft.VisualBasic;FileSystem;FileGet;(System.Int32,System.Decimal,System.Int64);generated",
+ "Microsoft.VisualBasic;FileSystem;FileGet;(System.Int32,System.Double,System.Int64);generated",
+ "Microsoft.VisualBasic;FileSystem;FileGet;(System.Int32,System.Int16,System.Int64);generated",
+ "Microsoft.VisualBasic;FileSystem;FileGet;(System.Int32,System.Int32,System.Int64);generated",
+ "Microsoft.VisualBasic;FileSystem;FileGet;(System.Int32,System.Int64,System.Int64);generated",
+ "Microsoft.VisualBasic;FileSystem;FileGet;(System.Int32,System.Single,System.Int64);generated",
+ "Microsoft.VisualBasic;FileSystem;FileGet;(System.Int32,System.String,System.Int64,System.Boolean);generated",
+ "Microsoft.VisualBasic;FileSystem;FileGet;(System.Int32,System.ValueType,System.Int64);generated",
+ "Microsoft.VisualBasic;FileSystem;FileGetObject;(System.Int32,System.Object,System.Int64);generated",
+ "Microsoft.VisualBasic;FileSystem;FileLen;(System.String);generated",
+ "Microsoft.VisualBasic;FileSystem;FileOpen;(System.Int32,System.String,Microsoft.VisualBasic.OpenMode,Microsoft.VisualBasic.OpenAccess,Microsoft.VisualBasic.OpenShare,System.Int32);generated",
+ "Microsoft.VisualBasic;FileSystem;FilePut;(System.Int32,System.Array,System.Int64,System.Boolean,System.Boolean);generated",
+ "Microsoft.VisualBasic;FileSystem;FilePut;(System.Int32,System.Boolean,System.Int64);generated",
+ "Microsoft.VisualBasic;FileSystem;FilePut;(System.Int32,System.Byte,System.Int64);generated",
+ "Microsoft.VisualBasic;FileSystem;FilePut;(System.Int32,System.Char,System.Int64);generated",
+ "Microsoft.VisualBasic;FileSystem;FilePut;(System.Int32,System.DateTime,System.Int64);generated",
+ "Microsoft.VisualBasic;FileSystem;FilePut;(System.Int32,System.Decimal,System.Int64);generated",
+ "Microsoft.VisualBasic;FileSystem;FilePut;(System.Int32,System.Double,System.Int64);generated",
+ "Microsoft.VisualBasic;FileSystem;FilePut;(System.Int32,System.Int16,System.Int64);generated",
+ "Microsoft.VisualBasic;FileSystem;FilePut;(System.Int32,System.Int32,System.Int64);generated",
+ "Microsoft.VisualBasic;FileSystem;FilePut;(System.Int32,System.Int64,System.Int64);generated",
+ "Microsoft.VisualBasic;FileSystem;FilePut;(System.Int32,System.Single,System.Int64);generated",
+ "Microsoft.VisualBasic;FileSystem;FilePut;(System.Int32,System.String,System.Int64,System.Boolean);generated",
+ "Microsoft.VisualBasic;FileSystem;FilePut;(System.Int32,System.ValueType,System.Int64);generated",
+ "Microsoft.VisualBasic;FileSystem;FilePut;(System.Object,System.Object,System.Object);generated",
+ "Microsoft.VisualBasic;FileSystem;FilePutObject;(System.Int32,System.Object,System.Int64);generated",
+ "Microsoft.VisualBasic;FileSystem;FileWidth;(System.Int32,System.Int32);generated",
+ "Microsoft.VisualBasic;FileSystem;FreeFile;();generated",
+ "Microsoft.VisualBasic;FileSystem;GetAttr;(System.String);generated",
+ "Microsoft.VisualBasic;FileSystem;Input;(System.Int32,System.Boolean);generated",
+ "Microsoft.VisualBasic;FileSystem;Input;(System.Int32,System.Byte);generated",
+ "Microsoft.VisualBasic;FileSystem;Input;(System.Int32,System.Char);generated",
+ "Microsoft.VisualBasic;FileSystem;Input;(System.Int32,System.DateTime);generated",
+ "Microsoft.VisualBasic;FileSystem;Input;(System.Int32,System.Decimal);generated",
+ "Microsoft.VisualBasic;FileSystem;Input;(System.Int32,System.Double);generated",
+ "Microsoft.VisualBasic;FileSystem;Input;(System.Int32,System.Int16);generated",
+ "Microsoft.VisualBasic;FileSystem;Input;(System.Int32,System.Int32);generated",
+ "Microsoft.VisualBasic;FileSystem;Input;(System.Int32,System.Int64);generated",
+ "Microsoft.VisualBasic;FileSystem;Input;(System.Int32,System.Object);generated",
+ "Microsoft.VisualBasic;FileSystem;Input;(System.Int32,System.Single);generated",
+ "Microsoft.VisualBasic;FileSystem;Input;(System.Int32,System.String);generated",
+ "Microsoft.VisualBasic;FileSystem;InputString;(System.Int32,System.Int32);generated",
+ "Microsoft.VisualBasic;FileSystem;Kill;(System.String);generated",
+ "Microsoft.VisualBasic;FileSystem;LOF;(System.Int32);generated",
+ "Microsoft.VisualBasic;FileSystem;LineInput;(System.Int32);generated",
+ "Microsoft.VisualBasic;FileSystem;Loc;(System.Int32);generated",
+ "Microsoft.VisualBasic;FileSystem;Lock;(System.Int32);generated",
+ "Microsoft.VisualBasic;FileSystem;Lock;(System.Int32,System.Int64);generated",
+ "Microsoft.VisualBasic;FileSystem;Lock;(System.Int32,System.Int64,System.Int64);generated",
+ "Microsoft.VisualBasic;FileSystem;MkDir;(System.String);generated",
+ "Microsoft.VisualBasic;FileSystem;Print;(System.Int32,System.Object[]);generated",
+ "Microsoft.VisualBasic;FileSystem;PrintLine;(System.Int32,System.Object[]);generated",
+ "Microsoft.VisualBasic;FileSystem;Rename;(System.String,System.String);generated",
+ "Microsoft.VisualBasic;FileSystem;Reset;();generated",
+ "Microsoft.VisualBasic;FileSystem;RmDir;(System.String);generated",
+ "Microsoft.VisualBasic;FileSystem;SPC;(System.Int16);generated",
+ "Microsoft.VisualBasic;FileSystem;Seek;(System.Int32);generated",
+ "Microsoft.VisualBasic;FileSystem;Seek;(System.Int32,System.Int64);generated",
+ "Microsoft.VisualBasic;FileSystem;SetAttr;(System.String,Microsoft.VisualBasic.FileAttribute);generated",
+ "Microsoft.VisualBasic;FileSystem;TAB;();generated",
+ "Microsoft.VisualBasic;FileSystem;TAB;(System.Int16);generated",
+ "Microsoft.VisualBasic;FileSystem;Unlock;(System.Int32);generated",
+ "Microsoft.VisualBasic;FileSystem;Unlock;(System.Int32,System.Int64);generated",
+ "Microsoft.VisualBasic;FileSystem;Unlock;(System.Int32,System.Int64,System.Int64);generated",
+ "Microsoft.VisualBasic;FileSystem;Write;(System.Int32,System.Object[]);generated",
+ "Microsoft.VisualBasic;FileSystem;WriteLine;(System.Int32,System.Object[]);generated",
+ "Microsoft.VisualBasic;Financial;DDB;(System.Double,System.Double,System.Double,System.Double,System.Double);generated",
+ "Microsoft.VisualBasic;Financial;FV;(System.Double,System.Double,System.Double,System.Double,Microsoft.VisualBasic.DueDate);generated",
+ "Microsoft.VisualBasic;Financial;IPmt;(System.Double,System.Double,System.Double,System.Double,System.Double,Microsoft.VisualBasic.DueDate);generated",
+ "Microsoft.VisualBasic;Financial;IRR;(System.Double[],System.Double);generated",
+ "Microsoft.VisualBasic;Financial;MIRR;(System.Double[],System.Double,System.Double);generated",
+ "Microsoft.VisualBasic;Financial;NPV;(System.Double,System.Double[]);generated",
+ "Microsoft.VisualBasic;Financial;NPer;(System.Double,System.Double,System.Double,System.Double,Microsoft.VisualBasic.DueDate);generated",
+ "Microsoft.VisualBasic;Financial;PPmt;(System.Double,System.Double,System.Double,System.Double,System.Double,Microsoft.VisualBasic.DueDate);generated",
+ "Microsoft.VisualBasic;Financial;PV;(System.Double,System.Double,System.Double,System.Double,Microsoft.VisualBasic.DueDate);generated",
+ "Microsoft.VisualBasic;Financial;Pmt;(System.Double,System.Double,System.Double,System.Double,Microsoft.VisualBasic.DueDate);generated",
+ "Microsoft.VisualBasic;Financial;Rate;(System.Double,System.Double,System.Double,System.Double,Microsoft.VisualBasic.DueDate,System.Double);generated",
+ "Microsoft.VisualBasic;Financial;SLN;(System.Double,System.Double,System.Double);generated",
+ "Microsoft.VisualBasic;Financial;SYD;(System.Double,System.Double,System.Double,System.Double);generated",
+ "Microsoft.VisualBasic;HideModuleNameAttribute;HideModuleNameAttribute;();generated",
+ "Microsoft.VisualBasic;Information;Erl;();generated",
+ "Microsoft.VisualBasic;Information;Err;();generated",
+ "Microsoft.VisualBasic;Information;IsArray;(System.Object);generated",
+ "Microsoft.VisualBasic;Information;IsDBNull;(System.Object);generated",
+ "Microsoft.VisualBasic;Information;IsDate;(System.Object);generated",
+ "Microsoft.VisualBasic;Information;IsError;(System.Object);generated",
+ "Microsoft.VisualBasic;Information;IsNothing;(System.Object);generated",
+ "Microsoft.VisualBasic;Information;IsNumeric;(System.Object);generated",
+ "Microsoft.VisualBasic;Information;IsReference;(System.Object);generated",
+ "Microsoft.VisualBasic;Information;LBound;(System.Array,System.Int32);generated",
+ "Microsoft.VisualBasic;Information;QBColor;(System.Int32);generated",
+ "Microsoft.VisualBasic;Information;RGB;(System.Int32,System.Int32,System.Int32);generated",
+ "Microsoft.VisualBasic;Information;SystemTypeName;(System.String);generated",
+ "Microsoft.VisualBasic;Information;TypeName;(System.Object);generated",
+ "Microsoft.VisualBasic;Information;UBound;(System.Array,System.Int32);generated",
+ "Microsoft.VisualBasic;Information;VarType;(System.Object);generated",
+ "Microsoft.VisualBasic;Information;VbTypeName;(System.String);generated",
+ "Microsoft.VisualBasic;Interaction;AppActivate;(System.Int32);generated",
+ "Microsoft.VisualBasic;Interaction;AppActivate;(System.String);generated",
+ "Microsoft.VisualBasic;Interaction;Beep;();generated",
+ "Microsoft.VisualBasic;Interaction;CallByName;(System.Object,System.String,Microsoft.VisualBasic.CallType,System.Object[]);generated",
+ "Microsoft.VisualBasic;Interaction;Choose;(System.Double,System.Object[]);generated",
+ "Microsoft.VisualBasic;Interaction;Command;();generated",
+ "Microsoft.VisualBasic;Interaction;CreateObject;(System.String,System.String);generated",
+ "Microsoft.VisualBasic;Interaction;DeleteSetting;(System.String,System.String,System.String);generated",
+ "Microsoft.VisualBasic;Interaction;Environ;(System.Int32);generated",
+ "Microsoft.VisualBasic;Interaction;Environ;(System.String);generated",
+ "Microsoft.VisualBasic;Interaction;GetAllSettings;(System.String,System.String);generated",
+ "Microsoft.VisualBasic;Interaction;GetObject;(System.String,System.String);generated",
+ "Microsoft.VisualBasic;Interaction;GetSetting;(System.String,System.String,System.String,System.String);generated",
+ "Microsoft.VisualBasic;Interaction;IIf;(System.Boolean,System.Object,System.Object);generated",
+ "Microsoft.VisualBasic;Interaction;InputBox;(System.String,System.String,System.String,System.Int32,System.Int32);generated",
+ "Microsoft.VisualBasic;Interaction;MsgBox;(System.Object,Microsoft.VisualBasic.MsgBoxStyle,System.Object);generated",
+ "Microsoft.VisualBasic;Interaction;Partition;(System.Int64,System.Int64,System.Int64,System.Int64);generated",
+ "Microsoft.VisualBasic;Interaction;SaveSetting;(System.String,System.String,System.String,System.String);generated",
+ "Microsoft.VisualBasic;Interaction;Shell;(System.String,Microsoft.VisualBasic.AppWinStyle,System.Boolean,System.Int32);generated",
+ "Microsoft.VisualBasic;Interaction;Switch;(System.Object[]);generated",
+ "Microsoft.VisualBasic;MyGroupCollectionAttribute;MyGroupCollectionAttribute;(System.String,System.String,System.String,System.String);generated",
+ "Microsoft.VisualBasic;MyGroupCollectionAttribute;get_CreateMethod;();generated",
+ "Microsoft.VisualBasic;MyGroupCollectionAttribute;get_DefaultInstanceAlias;();generated",
+ "Microsoft.VisualBasic;MyGroupCollectionAttribute;get_DisposeMethod;();generated",
+ "Microsoft.VisualBasic;MyGroupCollectionAttribute;get_MyGroupName;();generated",
+ "Microsoft.VisualBasic;Strings;Asc;(System.Char);generated",
+ "Microsoft.VisualBasic;Strings;Asc;(System.String);generated",
+ "Microsoft.VisualBasic;Strings;AscW;(System.Char);generated",
+ "Microsoft.VisualBasic;Strings;AscW;(System.String);generated",
+ "Microsoft.VisualBasic;Strings;Chr;(System.Int32);generated",
+ "Microsoft.VisualBasic;Strings;ChrW;(System.Int32);generated",
+ "Microsoft.VisualBasic;Strings;Filter;(System.Object[],System.String,System.Boolean,Microsoft.VisualBasic.CompareMethod);generated",
+ "Microsoft.VisualBasic;Strings;Filter;(System.String[],System.String,System.Boolean,Microsoft.VisualBasic.CompareMethod);generated",
+ "Microsoft.VisualBasic;Strings;Format;(System.Object,System.String);generated",
+ "Microsoft.VisualBasic;Strings;FormatCurrency;(System.Object,System.Int32,Microsoft.VisualBasic.TriState,Microsoft.VisualBasic.TriState,Microsoft.VisualBasic.TriState);generated",
+ "Microsoft.VisualBasic;Strings;FormatDateTime;(System.DateTime,Microsoft.VisualBasic.DateFormat);generated",
+ "Microsoft.VisualBasic;Strings;FormatNumber;(System.Object,System.Int32,Microsoft.VisualBasic.TriState,Microsoft.VisualBasic.TriState,Microsoft.VisualBasic.TriState);generated",
+ "Microsoft.VisualBasic;Strings;FormatPercent;(System.Object,System.Int32,Microsoft.VisualBasic.TriState,Microsoft.VisualBasic.TriState,Microsoft.VisualBasic.TriState);generated",
+ "Microsoft.VisualBasic;Strings;GetChar;(System.String,System.Int32);generated",
+ "Microsoft.VisualBasic;Strings;InStr;(System.Int32,System.String,System.String,Microsoft.VisualBasic.CompareMethod);generated",
+ "Microsoft.VisualBasic;Strings;InStr;(System.String,System.String,Microsoft.VisualBasic.CompareMethod);generated",
+ "Microsoft.VisualBasic;Strings;InStrRev;(System.String,System.String,System.Int32,Microsoft.VisualBasic.CompareMethod);generated",
+ "Microsoft.VisualBasic;Strings;Join;(System.Object[],System.String);generated",
+ "Microsoft.VisualBasic;Strings;Join;(System.String[],System.String);generated",
+ "Microsoft.VisualBasic;Strings;LCase;(System.Char);generated",
+ "Microsoft.VisualBasic;Strings;LCase;(System.String);generated",
+ "Microsoft.VisualBasic;Strings;LSet;(System.String,System.Int32);generated",
+ "Microsoft.VisualBasic;Strings;LTrim;(System.String);generated",
+ "Microsoft.VisualBasic;Strings;Left;(System.String,System.Int32);generated",
+ "Microsoft.VisualBasic;Strings;Len;(System.Boolean);generated",
+ "Microsoft.VisualBasic;Strings;Len;(System.Byte);generated",
+ "Microsoft.VisualBasic;Strings;Len;(System.Char);generated",
+ "Microsoft.VisualBasic;Strings;Len;(System.DateTime);generated",
+ "Microsoft.VisualBasic;Strings;Len;(System.Decimal);generated",
+ "Microsoft.VisualBasic;Strings;Len;(System.Double);generated",
+ "Microsoft.VisualBasic;Strings;Len;(System.Int16);generated",
+ "Microsoft.VisualBasic;Strings;Len;(System.Int32);generated",
+ "Microsoft.VisualBasic;Strings;Len;(System.Int64);generated",
+ "Microsoft.VisualBasic;Strings;Len;(System.Object);generated",
+ "Microsoft.VisualBasic;Strings;Len;(System.SByte);generated",
+ "Microsoft.VisualBasic;Strings;Len;(System.Single);generated",
+ "Microsoft.VisualBasic;Strings;Len;(System.String);generated",
+ "Microsoft.VisualBasic;Strings;Len;(System.UInt16);generated",
+ "Microsoft.VisualBasic;Strings;Len;(System.UInt32);generated",
+ "Microsoft.VisualBasic;Strings;Len;(System.UInt64);generated",
+ "Microsoft.VisualBasic;Strings;Mid;(System.String,System.Int32);generated",
+ "Microsoft.VisualBasic;Strings;Mid;(System.String,System.Int32,System.Int32);generated",
+ "Microsoft.VisualBasic;Strings;RSet;(System.String,System.Int32);generated",
+ "Microsoft.VisualBasic;Strings;RTrim;(System.String);generated",
+ "Microsoft.VisualBasic;Strings;Replace;(System.String,System.String,System.String,System.Int32,System.Int32,Microsoft.VisualBasic.CompareMethod);generated",
+ "Microsoft.VisualBasic;Strings;Right;(System.String,System.Int32);generated",
+ "Microsoft.VisualBasic;Strings;Space;(System.Int32);generated",
+ "Microsoft.VisualBasic;Strings;Split;(System.String,System.String,System.Int32,Microsoft.VisualBasic.CompareMethod);generated",
+ "Microsoft.VisualBasic;Strings;StrComp;(System.String,System.String,Microsoft.VisualBasic.CompareMethod);generated",
+ "Microsoft.VisualBasic;Strings;StrConv;(System.String,Microsoft.VisualBasic.VbStrConv,System.Int32);generated",
+ "Microsoft.VisualBasic;Strings;StrDup;(System.Int32,System.Char);generated",
+ "Microsoft.VisualBasic;Strings;StrDup;(System.Int32,System.Object);generated",
+ "Microsoft.VisualBasic;Strings;StrDup;(System.Int32,System.String);generated",
+ "Microsoft.VisualBasic;Strings;StrReverse;(System.String);generated",
+ "Microsoft.VisualBasic;Strings;Trim;(System.String);generated",
+ "Microsoft.VisualBasic;Strings;UCase;(System.Char);generated",
+ "Microsoft.VisualBasic;Strings;UCase;(System.String);generated",
+ "Microsoft.VisualBasic;VBCodeProvider;GetConverter;(System.Type);generated",
+ "Microsoft.VisualBasic;VBCodeProvider;VBCodeProvider;();generated",
+ "Microsoft.VisualBasic;VBCodeProvider;get_FileExtension;();generated",
+ "Microsoft.VisualBasic;VBCodeProvider;get_LanguageOptions;();generated",
+ "Microsoft.VisualBasic;VBFixedArrayAttribute;VBFixedArrayAttribute;(System.Int32);generated",
+ "Microsoft.VisualBasic;VBFixedArrayAttribute;VBFixedArrayAttribute;(System.Int32,System.Int32);generated",
+ "Microsoft.VisualBasic;VBFixedArrayAttribute;get_Bounds;();generated",
+ "Microsoft.VisualBasic;VBFixedArrayAttribute;get_Length;();generated",
+ "Microsoft.VisualBasic;VBFixedStringAttribute;VBFixedStringAttribute;(System.Int32);generated",
+ "Microsoft.VisualBasic;VBFixedStringAttribute;get_Length;();generated",
+ "Microsoft.VisualBasic;VBMath;Randomize;();generated",
+ "Microsoft.VisualBasic;VBMath;Randomize;(System.Double);generated",
+ "Microsoft.VisualBasic;VBMath;Rnd;();generated",
+ "Microsoft.VisualBasic;VBMath;Rnd;(System.Single);generated",
+ "Microsoft.WebAssembly.Build.Tasks;EmccCompile;Execute;();generated",
+ "Microsoft.WebAssembly.Build.Tasks;EmccCompile;get_Arguments;();generated",
+ "Microsoft.WebAssembly.Build.Tasks;EmccCompile;get_DisableParallelCompile;();generated",
+ "Microsoft.WebAssembly.Build.Tasks;EmccCompile;get_EnvironmentVariables;();generated",
+ "Microsoft.WebAssembly.Build.Tasks;EmccCompile;get_OutputFiles;();generated",
+ "Microsoft.WebAssembly.Build.Tasks;EmccCompile;get_OutputMessageImportance;();generated",
+ "Microsoft.WebAssembly.Build.Tasks;EmccCompile;get_SourceFiles;();generated",
+ "Microsoft.WebAssembly.Build.Tasks;EmccCompile;get_WorkingDirectory;();generated",
+ "Microsoft.WebAssembly.Build.Tasks;EmccCompile;set_Arguments;(System.String);generated",
+ "Microsoft.WebAssembly.Build.Tasks;EmccCompile;set_DisableParallelCompile;(System.Boolean);generated",
+ "Microsoft.WebAssembly.Build.Tasks;EmccCompile;set_EnvironmentVariables;(Microsoft.Build.Framework.ITaskItem[]);generated",
+ "Microsoft.WebAssembly.Build.Tasks;EmccCompile;set_OutputFiles;(Microsoft.Build.Framework.ITaskItem[]);generated",
+ "Microsoft.WebAssembly.Build.Tasks;EmccCompile;set_OutputMessageImportance;(System.String);generated",
+ "Microsoft.WebAssembly.Build.Tasks;EmccCompile;set_SourceFiles;(Microsoft.Build.Framework.ITaskItem[]);generated",
+ "Microsoft.WebAssembly.Build.Tasks;EmccCompile;set_WorkingDirectory;(System.String);generated",
+ "Microsoft.WebAssembly.Build.Tasks;GenerateAOTProps;Execute;();generated",
+ "Microsoft.WebAssembly.Build.Tasks;GenerateAOTProps;get_Items;();generated",
+ "Microsoft.WebAssembly.Build.Tasks;GenerateAOTProps;get_OutputFile;();generated",
+ "Microsoft.WebAssembly.Build.Tasks;GenerateAOTProps;get_Properties;();generated",
+ "Microsoft.WebAssembly.Build.Tasks;GenerateAOTProps;set_Items;(Microsoft.Build.Framework.ITaskItem[]);generated",
+ "Microsoft.WebAssembly.Build.Tasks;GenerateAOTProps;set_OutputFile;(System.String);generated",
+ "Microsoft.WebAssembly.Build.Tasks;GenerateAOTProps;set_Properties;(Microsoft.Build.Framework.ITaskItem[]);generated",
+ "Microsoft.WebAssembly.Build.Tasks;RunWithEmSdkEnv;Execute;();generated",
+ "Microsoft.WebAssembly.Build.Tasks;RunWithEmSdkEnv;RunWithEmSdkEnv;();generated",
+ "Microsoft.WebAssembly.Build.Tasks;RunWithEmSdkEnv;get_EmSdkPath;();generated",
+ "Microsoft.WebAssembly.Build.Tasks;RunWithEmSdkEnv;set_EmSdkPath;(System.String);generated",
+ "Microsoft.Win32.SafeHandles;CriticalHandleMinusOneIsInvalid;CriticalHandleMinusOneIsInvalid;();generated",
+ "Microsoft.Win32.SafeHandles;CriticalHandleMinusOneIsInvalid;get_IsInvalid;();generated",
+ "Microsoft.Win32.SafeHandles;CriticalHandleZeroOrMinusOneIsInvalid;CriticalHandleZeroOrMinusOneIsInvalid;();generated",
+ "Microsoft.Win32.SafeHandles;CriticalHandleZeroOrMinusOneIsInvalid;get_IsInvalid;();generated",
+ "Microsoft.Win32.SafeHandles;SafeAccessTokenHandle;ReleaseHandle;();generated",
+ "Microsoft.Win32.SafeHandles;SafeAccessTokenHandle;SafeAccessTokenHandle;();generated",
+ "Microsoft.Win32.SafeHandles;SafeAccessTokenHandle;SafeAccessTokenHandle;(System.IntPtr);generated",
+ "Microsoft.Win32.SafeHandles;SafeAccessTokenHandle;get_InvalidHandle;();generated",
+ "Microsoft.Win32.SafeHandles;SafeAccessTokenHandle;get_IsInvalid;();generated",
+ "Microsoft.Win32.SafeHandles;SafeFileHandle;ReleaseHandle;();generated",
+ "Microsoft.Win32.SafeHandles;SafeFileHandle;SafeFileHandle;();generated",
+ "Microsoft.Win32.SafeHandles;SafeFileHandle;get_IsAsync;();generated",
+ "Microsoft.Win32.SafeHandles;SafeFileHandle;get_IsInvalid;();generated",
+ "Microsoft.Win32.SafeHandles;SafeFileHandle;set_IsAsync;(System.Boolean);generated",
+ "Microsoft.Win32.SafeHandles;SafeHandleMinusOneIsInvalid;SafeHandleMinusOneIsInvalid;(System.Boolean);generated",
+ "Microsoft.Win32.SafeHandles;SafeHandleMinusOneIsInvalid;get_IsInvalid;();generated",
+ "Microsoft.Win32.SafeHandles;SafeHandleZeroOrMinusOneIsInvalid;SafeHandleZeroOrMinusOneIsInvalid;(System.Boolean);generated",
+ "Microsoft.Win32.SafeHandles;SafeHandleZeroOrMinusOneIsInvalid;get_IsInvalid;();generated",
+ "Microsoft.Win32.SafeHandles;SafeMemoryMappedFileHandle;Dispose;(System.Boolean);generated",
+ "Microsoft.Win32.SafeHandles;SafeMemoryMappedFileHandle;ReleaseHandle;();generated",
+ "Microsoft.Win32.SafeHandles;SafeMemoryMappedFileHandle;SafeMemoryMappedFileHandle;();generated",
+ "Microsoft.Win32.SafeHandles;SafeMemoryMappedFileHandle;get_IsInvalid;();generated",
+ "Microsoft.Win32.SafeHandles;SafeMemoryMappedViewHandle;ReleaseHandle;();generated",
+ "Microsoft.Win32.SafeHandles;SafeMemoryMappedViewHandle;SafeMemoryMappedViewHandle;();generated",
+ "Microsoft.Win32.SafeHandles;SafeNCryptHandle;ReleaseHandle;();generated",
+ "Microsoft.Win32.SafeHandles;SafeNCryptHandle;ReleaseNativeHandle;();generated",
+ "Microsoft.Win32.SafeHandles;SafeNCryptHandle;SafeNCryptHandle;();generated",
+ "Microsoft.Win32.SafeHandles;SafeNCryptHandle;SafeNCryptHandle;(System.IntPtr,System.Runtime.InteropServices.SafeHandle);generated",
+ "Microsoft.Win32.SafeHandles;SafeNCryptHandle;get_IsInvalid;();generated",
+ "Microsoft.Win32.SafeHandles;SafeNCryptKeyHandle;ReleaseNativeHandle;();generated",
+ "Microsoft.Win32.SafeHandles;SafeNCryptKeyHandle;SafeNCryptKeyHandle;();generated",
+ "Microsoft.Win32.SafeHandles;SafeNCryptKeyHandle;SafeNCryptKeyHandle;(System.IntPtr,System.Runtime.InteropServices.SafeHandle);generated",
+ "Microsoft.Win32.SafeHandles;SafeNCryptProviderHandle;ReleaseNativeHandle;();generated",
+ "Microsoft.Win32.SafeHandles;SafeNCryptProviderHandle;SafeNCryptProviderHandle;();generated",
+ "Microsoft.Win32.SafeHandles;SafeNCryptSecretHandle;ReleaseNativeHandle;();generated",
+ "Microsoft.Win32.SafeHandles;SafeNCryptSecretHandle;SafeNCryptSecretHandle;();generated",
+ "Microsoft.Win32.SafeHandles;SafePipeHandle;Dispose;(System.Boolean);generated",
+ "Microsoft.Win32.SafeHandles;SafePipeHandle;ReleaseHandle;();generated",
+ "Microsoft.Win32.SafeHandles;SafePipeHandle;SafePipeHandle;();generated",
+ "Microsoft.Win32.SafeHandles;SafePipeHandle;get_IsInvalid;();generated",
+ "Microsoft.Win32.SafeHandles;SafeProcessHandle;ReleaseHandle;();generated",
+ "Microsoft.Win32.SafeHandles;SafeProcessHandle;SafeProcessHandle;();generated",
+ "Microsoft.Win32.SafeHandles;SafeRegistryHandle;ReleaseHandle;();generated",
+ "Microsoft.Win32.SafeHandles;SafeRegistryHandle;SafeRegistryHandle;();generated",
+ "Microsoft.Win32.SafeHandles;SafeWaitHandle;ReleaseHandle;();generated",
+ "Microsoft.Win32.SafeHandles;SafeWaitHandle;SafeWaitHandle;();generated",
+ "Microsoft.Win32.SafeHandles;SafeX509ChainHandle;Dispose;(System.Boolean);generated",
+ "Microsoft.Win32.SafeHandles;SafeX509ChainHandle;ReleaseHandle;();generated",
+ "Microsoft.Win32.SafeHandles;SafeX509ChainHandle;SafeX509ChainHandle;();generated",
+ "Microsoft.Win32;PowerModeChangedEventArgs;PowerModeChangedEventArgs;(Microsoft.Win32.PowerModes);generated",
+ "Microsoft.Win32;PowerModeChangedEventArgs;get_Mode;();generated",
+ "Microsoft.Win32;Registry;GetValue;(System.String,System.String,System.Object);generated",
+ "Microsoft.Win32;Registry;SetValue;(System.String,System.String,System.Object);generated",
+ "Microsoft.Win32;Registry;SetValue;(System.String,System.String,System.Object,Microsoft.Win32.RegistryValueKind);generated",
+ "Microsoft.Win32;RegistryAclExtensions;GetAccessControl;(Microsoft.Win32.RegistryKey);generated",
+ "Microsoft.Win32;RegistryAclExtensions;GetAccessControl;(Microsoft.Win32.RegistryKey,System.Security.AccessControl.AccessControlSections);generated",
+ "Microsoft.Win32;RegistryAclExtensions;SetAccessControl;(Microsoft.Win32.RegistryKey,System.Security.AccessControl.RegistrySecurity);generated",
+ "Microsoft.Win32;RegistryKey;Close;();generated",
+ "Microsoft.Win32;RegistryKey;CreateSubKey;(System.String);generated",
+ "Microsoft.Win32;RegistryKey;CreateSubKey;(System.String,Microsoft.Win32.RegistryKeyPermissionCheck);generated",
+ "Microsoft.Win32;RegistryKey;CreateSubKey;(System.String,Microsoft.Win32.RegistryKeyPermissionCheck,Microsoft.Win32.RegistryOptions);generated",
+ "Microsoft.Win32;RegistryKey;CreateSubKey;(System.String,Microsoft.Win32.RegistryKeyPermissionCheck,Microsoft.Win32.RegistryOptions,System.Security.AccessControl.RegistrySecurity);generated",
+ "Microsoft.Win32;RegistryKey;CreateSubKey;(System.String,Microsoft.Win32.RegistryKeyPermissionCheck,System.Security.AccessControl.RegistrySecurity);generated",
+ "Microsoft.Win32;RegistryKey;CreateSubKey;(System.String,System.Boolean);generated",
+ "Microsoft.Win32;RegistryKey;CreateSubKey;(System.String,System.Boolean,Microsoft.Win32.RegistryOptions);generated",
+ "Microsoft.Win32;RegistryKey;DeleteSubKey;(System.String);generated",
+ "Microsoft.Win32;RegistryKey;DeleteSubKey;(System.String,System.Boolean);generated",
+ "Microsoft.Win32;RegistryKey;DeleteSubKeyTree;(System.String);generated",
+ "Microsoft.Win32;RegistryKey;DeleteSubKeyTree;(System.String,System.Boolean);generated",
+ "Microsoft.Win32;RegistryKey;DeleteValue;(System.String);generated",
+ "Microsoft.Win32;RegistryKey;DeleteValue;(System.String,System.Boolean);generated",
+ "Microsoft.Win32;RegistryKey;Dispose;();generated",
+ "Microsoft.Win32;RegistryKey;Flush;();generated",
+ "Microsoft.Win32;RegistryKey;FromHandle;(Microsoft.Win32.SafeHandles.SafeRegistryHandle);generated",
+ "Microsoft.Win32;RegistryKey;FromHandle;(Microsoft.Win32.SafeHandles.SafeRegistryHandle,Microsoft.Win32.RegistryView);generated",
+ "Microsoft.Win32;RegistryKey;GetAccessControl;();generated",
+ "Microsoft.Win32;RegistryKey;GetAccessControl;(System.Security.AccessControl.AccessControlSections);generated",
+ "Microsoft.Win32;RegistryKey;GetSubKeyNames;();generated",
+ "Microsoft.Win32;RegistryKey;GetValue;(System.String);generated",
+ "Microsoft.Win32;RegistryKey;GetValue;(System.String,System.Object);generated",
+ "Microsoft.Win32;RegistryKey;GetValue;(System.String,System.Object,Microsoft.Win32.RegistryValueOptions);generated",
+ "Microsoft.Win32;RegistryKey;GetValueKind;(System.String);generated",
+ "Microsoft.Win32;RegistryKey;GetValueNames;();generated",
+ "Microsoft.Win32;RegistryKey;OpenBaseKey;(Microsoft.Win32.RegistryHive,Microsoft.Win32.RegistryView);generated",
+ "Microsoft.Win32;RegistryKey;OpenRemoteBaseKey;(Microsoft.Win32.RegistryHive,System.String);generated",
+ "Microsoft.Win32;RegistryKey;OpenRemoteBaseKey;(Microsoft.Win32.RegistryHive,System.String,Microsoft.Win32.RegistryView);generated",
+ "Microsoft.Win32;RegistryKey;OpenSubKey;(System.String);generated",
+ "Microsoft.Win32;RegistryKey;OpenSubKey;(System.String,Microsoft.Win32.RegistryKeyPermissionCheck);generated",
+ "Microsoft.Win32;RegistryKey;OpenSubKey;(System.String,Microsoft.Win32.RegistryKeyPermissionCheck,System.Security.AccessControl.RegistryRights);generated",
+ "Microsoft.Win32;RegistryKey;OpenSubKey;(System.String,System.Boolean);generated",
+ "Microsoft.Win32;RegistryKey;OpenSubKey;(System.String,System.Security.AccessControl.RegistryRights);generated",
+ "Microsoft.Win32;RegistryKey;SetAccessControl;(System.Security.AccessControl.RegistrySecurity);generated",
+ "Microsoft.Win32;RegistryKey;SetValue;(System.String,System.Object);generated",
+ "Microsoft.Win32;RegistryKey;SetValue;(System.String,System.Object,Microsoft.Win32.RegistryValueKind);generated",
+ "Microsoft.Win32;RegistryKey;get_SubKeyCount;();generated",
+ "Microsoft.Win32;RegistryKey;get_ValueCount;();generated",
+ "Microsoft.Win32;RegistryKey;get_View;();generated",
+ "Microsoft.Win32;SessionEndedEventArgs;SessionEndedEventArgs;(Microsoft.Win32.SessionEndReasons);generated",
+ "Microsoft.Win32;SessionEndedEventArgs;get_Reason;();generated",
+ "Microsoft.Win32;SessionEndingEventArgs;SessionEndingEventArgs;(Microsoft.Win32.SessionEndReasons);generated",
+ "Microsoft.Win32;SessionEndingEventArgs;get_Cancel;();generated",
+ "Microsoft.Win32;SessionEndingEventArgs;get_Reason;();generated",
+ "Microsoft.Win32;SessionEndingEventArgs;set_Cancel;(System.Boolean);generated",
+ "Microsoft.Win32;SessionSwitchEventArgs;SessionSwitchEventArgs;(Microsoft.Win32.SessionSwitchReason);generated",
+ "Microsoft.Win32;SessionSwitchEventArgs;get_Reason;();generated",
+ "Microsoft.Win32;SystemEvents;CreateTimer;(System.Int32);generated",
+ "Microsoft.Win32;SystemEvents;InvokeOnEventsThread;(System.Delegate);generated",
+ "Microsoft.Win32;SystemEvents;KillTimer;(System.IntPtr);generated",
+ "Microsoft.Win32;TimerElapsedEventArgs;TimerElapsedEventArgs;(System.IntPtr);generated",
+ "Microsoft.Win32;TimerElapsedEventArgs;get_TimerId;();generated",
+ "Microsoft.Win32;UserPreferenceChangedEventArgs;UserPreferenceChangedEventArgs;(Microsoft.Win32.UserPreferenceCategory);generated",
+ "Microsoft.Win32;UserPreferenceChangedEventArgs;get_Category;();generated",
+ "Microsoft.Win32;UserPreferenceChangingEventArgs;UserPreferenceChangingEventArgs;(Microsoft.Win32.UserPreferenceCategory);generated",
+ "Microsoft.Win32;UserPreferenceChangingEventArgs;get_Category;();generated",
+ "Microsoft.Workload.Build.Tasks;InstallWorkloadFromArtifacts;Execute;();generated",
+ "Microsoft.Workload.Build.Tasks;InstallWorkloadFromArtifacts;get_LocalNuGetsPath;();generated",
+ "Microsoft.Workload.Build.Tasks;InstallWorkloadFromArtifacts;get_OnlyUpdateManifests;();generated",
+ "Microsoft.Workload.Build.Tasks;InstallWorkloadFromArtifacts;get_SdkDir;();generated",
+ "Microsoft.Workload.Build.Tasks;InstallWorkloadFromArtifacts;get_TemplateNuGetConfigPath;();generated",
+ "Microsoft.Workload.Build.Tasks;InstallWorkloadFromArtifacts;get_VersionBand;();generated",
+ "Microsoft.Workload.Build.Tasks;InstallWorkloadFromArtifacts;get_WorkloadId;();generated",
+ "Microsoft.Workload.Build.Tasks;InstallWorkloadFromArtifacts;set_LocalNuGetsPath;(System.String);generated",
+ "Microsoft.Workload.Build.Tasks;InstallWorkloadFromArtifacts;set_OnlyUpdateManifests;(System.Boolean);generated",
+ "Microsoft.Workload.Build.Tasks;InstallWorkloadFromArtifacts;set_SdkDir;(System.String);generated",
+ "Microsoft.Workload.Build.Tasks;InstallWorkloadFromArtifacts;set_TemplateNuGetConfigPath;(System.String);generated",
+ "Microsoft.Workload.Build.Tasks;InstallWorkloadFromArtifacts;set_VersionBand;(System.String);generated",
+ "Microsoft.Workload.Build.Tasks;InstallWorkloadFromArtifacts;set_WorkloadId;(Microsoft.Build.Framework.ITaskItem);generated",
+ "System.Buffers.Binary;BinaryPrimitives;ReadDoubleBigEndian;(System.ReadOnlySpan);generated",
+ "System.Buffers.Binary;BinaryPrimitives;ReadDoubleLittleEndian;(System.ReadOnlySpan);generated",
+ "System.Buffers.Binary;BinaryPrimitives;ReadHalfBigEndian;(System.ReadOnlySpan);generated",
+ "System.Buffers.Binary;BinaryPrimitives;ReadHalfLittleEndian;(System.ReadOnlySpan);generated",
+ "System.Buffers.Binary;BinaryPrimitives;ReadInt16BigEndian;(System.ReadOnlySpan);generated",
+ "System.Buffers.Binary;BinaryPrimitives;ReadInt16LittleEndian;(System.ReadOnlySpan);generated",
+ "System.Buffers.Binary;BinaryPrimitives;ReadInt32BigEndian;(System.ReadOnlySpan);generated",
+ "System.Buffers.Binary;BinaryPrimitives;ReadInt32LittleEndian;(System.ReadOnlySpan);generated",
+ "System.Buffers.Binary;BinaryPrimitives;ReadInt64BigEndian;(System.ReadOnlySpan);generated",
+ "System.Buffers.Binary;BinaryPrimitives;ReadInt64LittleEndian;(System.ReadOnlySpan);generated",
+ "System.Buffers.Binary;BinaryPrimitives;ReadSingleBigEndian;(System.ReadOnlySpan);generated",
+ "System.Buffers.Binary;BinaryPrimitives;ReadSingleLittleEndian;(System.ReadOnlySpan);generated",
+ "System.Buffers.Binary;BinaryPrimitives;ReadUInt16BigEndian;(System.ReadOnlySpan);generated",
+ "System.Buffers.Binary;BinaryPrimitives;ReadUInt16LittleEndian;(System.ReadOnlySpan);generated",
+ "System.Buffers.Binary;BinaryPrimitives;ReadUInt32BigEndian;(System.ReadOnlySpan);generated",
+ "System.Buffers.Binary;BinaryPrimitives;ReadUInt32LittleEndian;(System.ReadOnlySpan);generated",
+ "System.Buffers.Binary;BinaryPrimitives;ReadUInt64BigEndian;(System.ReadOnlySpan);generated",
+ "System.Buffers.Binary;BinaryPrimitives;ReadUInt64LittleEndian;(System.ReadOnlySpan);generated",
+ "System.Buffers.Binary;BinaryPrimitives;ReverseEndianness;(System.Byte);generated",
+ "System.Buffers.Binary;BinaryPrimitives;ReverseEndianness;(System.Int16);generated",
+ "System.Buffers.Binary;BinaryPrimitives;ReverseEndianness;(System.Int32);generated",
+ "System.Buffers.Binary;BinaryPrimitives;ReverseEndianness;(System.Int64);generated",
+ "System.Buffers.Binary;BinaryPrimitives;ReverseEndianness;(System.SByte);generated",
+ "System.Buffers.Binary;BinaryPrimitives;ReverseEndianness;(System.UInt16);generated",
+ "System.Buffers.Binary;BinaryPrimitives;ReverseEndianness;(System.UInt32);generated",
+ "System.Buffers.Binary;BinaryPrimitives;ReverseEndianness;(System.UInt64);generated",
+ "System.Buffers.Binary;BinaryPrimitives;TryReadDoubleBigEndian;(System.ReadOnlySpan,System.Double);generated",
+ "System.Buffers.Binary;BinaryPrimitives;TryReadDoubleLittleEndian;(System.ReadOnlySpan,System.Double);generated",
+ "System.Buffers.Binary;BinaryPrimitives;TryReadHalfBigEndian;(System.ReadOnlySpan,System.Half);generated",
+ "System.Buffers.Binary;BinaryPrimitives;TryReadHalfLittleEndian;(System.ReadOnlySpan,System.Half);generated",
+ "System.Buffers.Binary;BinaryPrimitives;TryReadInt16BigEndian;(System.ReadOnlySpan,System.Int16);generated",
+ "System.Buffers.Binary;BinaryPrimitives;TryReadInt16LittleEndian;(System.ReadOnlySpan,System.Int16);generated",
+ "System.Buffers.Binary;BinaryPrimitives;TryReadInt32BigEndian;(System.ReadOnlySpan,System.Int32);generated",
+ "System.Buffers.Binary;BinaryPrimitives;TryReadInt32LittleEndian;(System.ReadOnlySpan,System.Int32);generated",
+ "System.Buffers.Binary;BinaryPrimitives;TryReadInt64BigEndian;(System.ReadOnlySpan,System.Int64);generated",
+ "System.Buffers.Binary;BinaryPrimitives;TryReadInt64LittleEndian;(System.ReadOnlySpan,System.Int64);generated",
+ "System.Buffers.Binary;BinaryPrimitives;TryReadSingleBigEndian;(System.ReadOnlySpan,System.Single);generated",
+ "System.Buffers.Binary;BinaryPrimitives;TryReadSingleLittleEndian;(System.ReadOnlySpan,System.Single);generated",
+ "System.Buffers.Binary;BinaryPrimitives;TryReadUInt16BigEndian;(System.ReadOnlySpan,System.UInt16);generated",
+ "System.Buffers.Binary;BinaryPrimitives;TryReadUInt16LittleEndian;(System.ReadOnlySpan,System.UInt16);generated",
+ "System.Buffers.Binary;BinaryPrimitives;TryReadUInt32BigEndian;(System.ReadOnlySpan,System.UInt32);generated",
+ "System.Buffers.Binary;BinaryPrimitives;TryReadUInt32LittleEndian;(System.ReadOnlySpan,System.UInt32);generated",
+ "System.Buffers.Binary;BinaryPrimitives;TryReadUInt64BigEndian;(System.ReadOnlySpan,System.UInt64);generated",
+ "System.Buffers.Binary;BinaryPrimitives;TryReadUInt64LittleEndian;(System.ReadOnlySpan,System.UInt64);generated",
+ "System.Buffers.Binary;BinaryPrimitives;TryWriteDoubleBigEndian;(System.Span,System.Double);generated",
+ "System.Buffers.Binary;BinaryPrimitives;TryWriteDoubleLittleEndian;(System.Span,System.Double);generated",
+ "System.Buffers.Binary;BinaryPrimitives;TryWriteHalfBigEndian;(System.Span,System.Half);generated",
+ "System.Buffers.Binary;BinaryPrimitives;TryWriteHalfLittleEndian;(System.Span,System.Half);generated",
+ "System.Buffers.Binary;BinaryPrimitives;TryWriteInt16BigEndian;(System.Span,System.Int16);generated",
+ "System.Buffers.Binary;BinaryPrimitives;TryWriteInt16LittleEndian;(System.Span,System.Int16);generated",
+ "System.Buffers.Binary;BinaryPrimitives;TryWriteInt32BigEndian;(System.Span,System.Int32);generated",
+ "System.Buffers.Binary;BinaryPrimitives;TryWriteInt32LittleEndian;(System.Span,System.Int32);generated",
+ "System.Buffers.Binary;BinaryPrimitives;TryWriteInt64BigEndian;(System.Span,System.Int64);generated",
+ "System.Buffers.Binary;BinaryPrimitives;TryWriteInt64LittleEndian;(System.Span,System.Int64);generated",
+ "System.Buffers.Binary;BinaryPrimitives;TryWriteSingleBigEndian;(System.Span,System.Single);generated",
+ "System.Buffers.Binary;BinaryPrimitives;TryWriteSingleLittleEndian;(System.Span,System.Single);generated",
+ "System.Buffers.Binary;BinaryPrimitives;TryWriteUInt16BigEndian;(System.Span,System.UInt16);generated",
+ "System.Buffers.Binary;BinaryPrimitives;TryWriteUInt16LittleEndian;(System.Span,System.UInt16);generated",
+ "System.Buffers.Binary;BinaryPrimitives;TryWriteUInt32BigEndian;(System.Span,System.UInt32);generated",
+ "System.Buffers.Binary;BinaryPrimitives;TryWriteUInt32LittleEndian;(System.Span,System.UInt32);generated",
+ "System.Buffers.Binary;BinaryPrimitives;TryWriteUInt64BigEndian;(System.Span,System.UInt64);generated",
+ "System.Buffers.Binary;BinaryPrimitives;TryWriteUInt64LittleEndian;(System.Span,System.UInt64);generated",
+ "System.Buffers.Binary;BinaryPrimitives;WriteDoubleBigEndian;(System.Span,System.Double);generated",
+ "System.Buffers.Binary;BinaryPrimitives;WriteDoubleLittleEndian;(System.Span,System.Double);generated",
+ "System.Buffers.Binary;BinaryPrimitives;WriteHalfBigEndian;(System.Span,System.Half);generated",
+ "System.Buffers.Binary;BinaryPrimitives;WriteHalfLittleEndian;(System.Span,System.Half);generated",
+ "System.Buffers.Binary;BinaryPrimitives;WriteInt16BigEndian;(System.Span,System.Int16);generated",
+ "System.Buffers.Binary;BinaryPrimitives;WriteInt16LittleEndian;(System.Span