diff --git a/.bazelversion b/.bazelversion index a8907c025d5..a3fcc7121bb 100644 --- a/.bazelversion +++ b/.bazelversion @@ -1 +1 @@ -7.0.2 +7.1.0 diff --git a/.github/workflows/cpp-swift-analysis.yml b/.github/workflows/cpp-swift-analysis.yml new file mode 100644 index 00000000000..b2ebbc7d7df --- /dev/null +++ b/.github/workflows/cpp-swift-analysis.yml @@ -0,0 +1,55 @@ +name: "Code scanning - C++" + +on: + push: + branches: + - main + - 'rc/*' + pull_request: + branches: + - main + - 'rc/*' + paths: + - 'swift/**' + - '.github/codeql/**' + - '.github/workflows/cpp-swift-analysis.yml' + schedule: + - cron: '0 9 * * 1' + +jobs: + CodeQL-Build: + + runs-on: ubuntu-latest + + permissions: + contents: read + security-events: write + pull-requests: read + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + # Initializes the CodeQL tools for scanning. + - name: Initialize CodeQL + uses: github/codeql-action/init@main + # Override language selection by uncommenting this and choosing your languages + with: + languages: cpp + config-file: ./.github/codeql/codeql-config.yml + + - name: "[Ubuntu] Remove GCC 13 from runner image" + shell: bash + run: | + sudo rm -f /etc/apt/sources.list.d/ubuntu-toolchain-r-ubuntu-test-jammy.list + sudo apt-get update + sudo apt-get install -y --allow-downgrades libc6=2.35-* libc6-dev=2.35-* libstdc++6=12.3.0-* libgcc-s1=12.3.0-* + + - name: "Build Swift extractor using Bazel" + run: | + bazel clean --expunge + bazel run //swift:create-extractor-pack --nouse_action_cache --noremote_accept_cached --noremote_upload_local_results --spawn_strategy=local --features=-layering_check + bazel shutdown + + - name: Perform CodeQL Analysis + uses: github/codeql-action/analyze@main diff --git a/CODEOWNERS b/CODEOWNERS index 1869b38b7c9..f052b0fe897 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -1,4 +1,5 @@ /cpp/ @github/codeql-c-analysis +/cpp/autobuilder/ @github/codeql-c-extractor /csharp/ @github/codeql-csharp /go/ @github/codeql-go /java/ @github/codeql-java diff --git a/codeql-workspace.yml b/codeql-workspace.yml index 5d8b300c8f4..9bb15b5d4a5 100644 --- a/codeql-workspace.yml +++ b/codeql-workspace.yml @@ -6,6 +6,7 @@ provide: - "*/ql/consistency-queries/qlpack.yml" - "*/ql/automodel/src/qlpack.yml" - "*/ql/automodel/test/qlpack.yml" + - "python/extractor/qlpack.yml" - "shared/**/qlpack.yml" - "cpp/ql/test/query-tests/Security/CWE/CWE-190/semmle/tainted/qlpack.yml" - "go/ql/config/legacy-support/qlpack.yml" @@ -27,7 +28,6 @@ provide: - "misc/suite-helpers/qlpack.yml" - "ruby/extractor-pack/codeql-extractor.yml" - "swift/extractor-pack/codeql-extractor.yml" - - "swift/integration-tests/qlpack.yml" - "ql/extractor-pack/codeql-extractor.yml" - ".github/codeql/extensions/**/codeql-pack.yml" diff --git a/config/identical-files.json b/config/identical-files.json index 017fdd11481..a8b1368f1af 100644 --- a/config/identical-files.json +++ b/config/identical-files.json @@ -251,12 +251,6 @@ "cpp/ql/src/Security/CWE/CWE-020/SafeExternalAPIFunction.qll", "cpp/ql/src/Security/CWE/CWE-020/ir/SafeExternalAPIFunction.qll" ], - "XML": [ - "cpp/ql/lib/semmle/code/cpp/XML.qll", - "csharp/ql/lib/semmle/code/csharp/XML.qll", - "java/ql/lib/semmle/code/xml/XML.qll", - "python/ql/lib/semmle/python/xml/XML.qll" - ], "DuplicationProblems.inc.qhelp": [ "cpp/ql/src/Metrics/Files/DuplicationProblems.inc.qhelp", "javascript/ql/src/Metrics/DuplicationProblems.inc.qhelp", diff --git a/cpp/autobuilder/Semmle.Autobuild.Cpp.Tests/BuildScripts.cs b/cpp/autobuilder/Semmle.Autobuild.Cpp.Tests/BuildScripts.cs index 963ef88d624..f243bdb5401 100644 --- a/cpp/autobuilder/Semmle.Autobuild.Cpp.Tests/BuildScripts.cs +++ b/cpp/autobuilder/Semmle.Autobuild.Cpp.Tests/BuildScripts.cs @@ -203,6 +203,8 @@ namespace Semmle.Autobuild.Cpp.Tests public IList Diagnostics { get; } = new List(); public void AddEntry(DiagnosticMessage message) => this.Diagnostics.Add(message); + + public void Dispose() { } } /// @@ -250,12 +252,7 @@ namespace Semmle.Autobuild.Cpp.Tests EndCallbackIn.Add(s); } - CppAutobuilder CreateAutoBuilder(bool isWindows, - string? buildless = null, string? solution = null, string? buildCommand = null, string? ignoreErrors = null, - string? msBuildArguments = null, string? msBuildPlatform = null, string? msBuildConfiguration = null, string? msBuildTarget = null, - string? dotnetArguments = null, string? dotnetVersion = null, string? vsToolsVersion = null, - string? nugetRestore = null, string? allSolutions = null, - string cwd = @"C:\Project") + CppAutobuilder CreateAutoBuilder(bool isWindows, string? dotnetVersion = null, string cwd = @"C:\Project") { string codeqlUpperLanguage = Language.Cpp.UpperCaseName; Actions.GetEnvironmentVariable[$"CODEQL_AUTOBUILDER_{codeqlUpperLanguage}_NO_INDEXING"] = "false"; @@ -265,22 +262,7 @@ namespace Semmle.Autobuild.Cpp.Tests Actions.GetEnvironmentVariable[$"CODEQL_EXTRACTOR_{codeqlUpperLanguage}_DIAGNOSTIC_DIR"] = ""; Actions.GetEnvironmentVariable["CODEQL_JAVA_HOME"] = @"C:\codeql\tools\java"; Actions.GetEnvironmentVariable["CODEQL_PLATFORM"] = "win64"; - Actions.GetEnvironmentVariable["SEMMLE_DIST"] = @"C:\odasa"; - Actions.GetEnvironmentVariable["SEMMLE_JAVA_HOME"] = @"C:\odasa\tools\java"; - Actions.GetEnvironmentVariable["SEMMLE_PLATFORM_TOOLS"] = @"C:\odasa\tools"; - Actions.GetEnvironmentVariable["LGTM_INDEX_VSTOOLS_VERSION"] = vsToolsVersion; - Actions.GetEnvironmentVariable["LGTM_INDEX_MSBUILD_ARGUMENTS"] = msBuildArguments; - Actions.GetEnvironmentVariable["LGTM_INDEX_MSBUILD_PLATFORM"] = msBuildPlatform; - Actions.GetEnvironmentVariable["LGTM_INDEX_MSBUILD_CONFIGURATION"] = msBuildConfiguration; - Actions.GetEnvironmentVariable["LGTM_INDEX_MSBUILD_TARGET"] = msBuildTarget; - Actions.GetEnvironmentVariable["LGTM_INDEX_DOTNET_ARGUMENTS"] = dotnetArguments; - Actions.GetEnvironmentVariable["LGTM_INDEX_DOTNET_VERSION"] = dotnetVersion; - Actions.GetEnvironmentVariable["LGTM_INDEX_BUILD_COMMAND"] = buildCommand; - Actions.GetEnvironmentVariable["LGTM_INDEX_SOLUTION"] = solution; - Actions.GetEnvironmentVariable["LGTM_INDEX_IGNORE_ERRORS"] = ignoreErrors; - Actions.GetEnvironmentVariable["LGTM_INDEX_BUILDLESS"] = buildless; - Actions.GetEnvironmentVariable["LGTM_INDEX_ALL_SOLUTIONS"] = allSolutions; - Actions.GetEnvironmentVariable["LGTM_INDEX_NUGET_RESTORE"] = nugetRestore; + Actions.GetEnvironmentVariable["CODEQL_EXTRACTOR_CSHARP_OPTION_DOTNET_VERSION"] = dotnetVersion; Actions.GetEnvironmentVariable["ProgramFiles(x86)"] = isWindows ? @"C:\Program Files (x86)" : null; Actions.GetCurrentDirectory = cwd; Actions.IsWindows = isWindows; diff --git a/cpp/autobuilder/Semmle.Autobuild.Cpp/CppAutobuilder.cs b/cpp/autobuilder/Semmle.Autobuild.Cpp/CppAutobuilder.cs index e3853b44a0c..cc2e1e05ad5 100644 --- a/cpp/autobuilder/Semmle.Autobuild.Cpp/CppAutobuilder.cs +++ b/cpp/autobuilder/Semmle.Autobuild.Cpp/CppAutobuilder.cs @@ -26,9 +26,6 @@ namespace Semmle.Autobuild.Cpp public override BuildScript GetBuildScript() { - if (Options.BuildCommand != null) - return new BuildCommandRule((_, f) => f(null)).Analyse(this, false); - return // First try MSBuild new MsBuildRule().Analyse(this, true) | diff --git a/cpp/autobuilder/Semmle.Autobuild.Cpp/Program.cs b/cpp/autobuilder/Semmle.Autobuild.Cpp/Program.cs index 5fca6f556fb..48a6528a65b 100644 --- a/cpp/autobuilder/Semmle.Autobuild.Cpp/Program.cs +++ b/cpp/autobuilder/Semmle.Autobuild.Cpp/Program.cs @@ -17,7 +17,7 @@ namespace Semmle.Autobuild.Cpp try { Console.WriteLine("CodeQL C++ autobuilder"); - var builder = new CppAutobuilder(actions, options); + using var builder = new CppAutobuilder(actions, options); return builder.AttemptBuild(); } catch (InvalidEnvironmentException ex) diff --git a/cpp/downgrades/abfce5c170f93e281948f7689ece373464fdaf87/expr_reuse.ql b/cpp/downgrades/abfce5c170f93e281948f7689ece373464fdaf87/expr_reuse.ql new file mode 100644 index 00000000000..201aa17cafd --- /dev/null +++ b/cpp/downgrades/abfce5c170f93e281948f7689ece373464fdaf87/expr_reuse.ql @@ -0,0 +1,7 @@ +class Expr extends @expr { + string toString() { none() } +} + +from Expr reuse, Expr original +where expr_reuse(reuse, original, _) +select reuse, original diff --git a/cpp/downgrades/abfce5c170f93e281948f7689ece373464fdaf87/expr_types.ql b/cpp/downgrades/abfce5c170f93e281948f7689ece373464fdaf87/expr_types.ql new file mode 100644 index 00000000000..0dc918e8d71 --- /dev/null +++ b/cpp/downgrades/abfce5c170f93e281948f7689ece373464fdaf87/expr_types.ql @@ -0,0 +1,22 @@ +class Expr extends @expr { + string toString() { none() } +} + +class Type extends @type { + string toString() { none() } +} + +predicate existingType(Expr expr, Type type, int value_category) { + expr_types(expr, type, value_category) +} + +predicate reuseType(Expr reuse, Type type, int value_category) { + exists(Expr original | + expr_reuse(reuse, original, value_category) and + expr_types(original, type, _) + ) +} + +from Expr expr, Type type, int value_category +where existingType(expr, type, value_category) or reuseType(expr, type, value_category) +select expr, type, value_category diff --git a/cpp/downgrades/abfce5c170f93e281948f7689ece373464fdaf87/old.dbscheme b/cpp/downgrades/abfce5c170f93e281948f7689ece373464fdaf87/old.dbscheme new file mode 100644 index 00000000000..abfce5c170f --- /dev/null +++ b/cpp/downgrades/abfce5c170f93e281948f7689ece373464fdaf87/old.dbscheme @@ -0,0 +1,2251 @@ + +/** + * An invocation of the compiler. Note that more than one file may be + * compiled per invocation. For example, this command compiles three + * source files: + * + * gcc -c f1.c f2.c f3.c + * + * The `id` simply identifies the invocation, while `cwd` is the working + * directory from which the compiler was invoked. + */ +compilations( + /** + * An invocation of the compiler. Note that more than one file may + * be compiled per invocation. For example, this command compiles + * three source files: + * + * gcc -c f1.c f2.c f3.c + */ + unique int id : @compilation, + string cwd : string ref +); + +/** + * The arguments that were passed to the extractor for a compiler + * invocation. If `id` is for the compiler invocation + * + * gcc -c f1.c f2.c f3.c + * + * then typically there will be rows for + * + * num | arg + * --- | --- + * 0 | *path to extractor* + * 1 | `--mimic` + * 2 | `/usr/bin/gcc` + * 3 | `-c` + * 4 | f1.c + * 5 | f2.c + * 6 | f3.c + */ +#keyset[id, num] +compilation_args( + int id : @compilation ref, + int num : int ref, + string arg : string ref +); + +/** + * The source files that are compiled by a compiler invocation. + * If `id` is for the compiler invocation + * + * gcc -c f1.c f2.c f3.c + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | f1.c + * 1 | f2.c + * 2 | f3.c + * + * Note that even if those files `#include` headers, those headers + * do not appear as rows. + */ +#keyset[id, num] +compilation_compiling_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The time taken by the extractor for a compiler invocation. + * + * For each file `num`, there will be rows for + * + * kind | seconds + * ---- | --- + * 1 | CPU seconds used by the extractor frontend + * 2 | Elapsed seconds during the extractor frontend + * 3 | CPU seconds used by the extractor backend + * 4 | Elapsed seconds during the extractor backend + */ +#keyset[id, num, kind] +compilation_time( + int id : @compilation ref, + int num : int ref, + /* kind: + 1 = frontend_cpu_seconds + 2 = frontend_elapsed_seconds + 3 = extractor_cpu_seconds + 4 = extractor_elapsed_seconds + */ + int kind : int ref, + float seconds : float ref +); + +/** + * An error or warning generated by the extractor. + * The diagnostic message `diagnostic` was generated during compiler + * invocation `compilation`, and is the `file_number_diagnostic_number`th + * message generated while extracting the `file_number`th file of that + * invocation. + */ +#keyset[compilation, file_number, file_number_diagnostic_number] +diagnostic_for( + int diagnostic : @diagnostic ref, + int compilation : @compilation ref, + int file_number : int ref, + int file_number_diagnostic_number : int ref +); + +/** + * If extraction was successful, then `cpu_seconds` and + * `elapsed_seconds` are the CPU time and elapsed time (respectively) + * that extraction took for compiler invocation `id`. + */ +compilation_finished( + unique int id : @compilation ref, + float cpu_seconds : float ref, + float elapsed_seconds : float ref +); + + +/** + * External data, loaded from CSV files during snapshot creation. See + * [Tutorial: Incorporating external data](https://help.semmle.com/wiki/display/SD/Tutorial%3A+Incorporating+external+data) + * for more information. + */ +externalData( + int id : @externalDataElement, + string path : string ref, + int column: int ref, + string value : string ref +); + +/** + * The source location of the snapshot. + */ +sourceLocationPrefix(string prefix : string ref); + +/** + * Information about packages that provide code used during compilation. + * The `id` is just a unique identifier. + * The `namespace` is typically the name of the package manager that + * provided the package (e.g. "dpkg" or "yum"). + * The `package_name` is the name of the package, and `version` is its + * version (as a string). + */ +external_packages( + unique int id: @external_package, + string namespace : string ref, + string package_name : string ref, + string version : string ref +); + +/** + * Holds if File `fileid` was provided by package `package`. + */ +header_to_external_package( + int fileid : @file ref, + int package : @external_package ref +); + +/* + * Version history + */ + +svnentries( + unique int id : @svnentry, + string revision : string ref, + string author : string ref, + date revisionDate : date ref, + int changeSize : int ref +) + +svnaffectedfiles( + int id : @svnentry ref, + int file : @file ref, + string action : string ref +) + +svnentrymsg( + unique int id : @svnentry ref, + string message : string ref +) + +svnchurn( + int commit : @svnentry ref, + int file : @file ref, + int addedLines : int ref, + int deletedLines : int ref +) + +/* + * C++ dbscheme + */ + +extractor_version( + string codeql_version: string ref, + string frontend_version: string ref +) + +@location = @location_stmt | @location_expr | @location_default ; + +/** + * The location of an element that is not an expression or a statement. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_default( + /** The location of an element that is not an expression or a statement. */ + unique int id: @location_default, + int container: @container ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +/** + * The location of a statement. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_stmt( + /** The location of a statement. */ + unique int id: @location_stmt, + int container: @container ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +/** + * The location of an expression. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_expr( + /** The location of an expression. */ + unique int id: @location_expr, + int container: @container ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +/** An element for which line-count information is available. */ +@sourceline = @file | @function | @variable | @enumconstant | @xmllocatable; + +numlines( + int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: int ref +); + +diagnostics( + unique int id: @diagnostic, + int severity: int ref, + string error_tag: string ref, + string error_message: string ref, + string full_error_message: string ref, + int location: @location_default ref +); + +files( + unique int id: @file, + string name: string ref +); + +folders( + unique int id: @folder, + string name: string ref +); + +@container = @folder | @file + +containerparent( + int parent: @container ref, + unique int child: @container ref +); + +fileannotations( + int id: @file ref, + int kind: int ref, + string name: string ref, + string value: string ref +); + +inmacroexpansion( + int id: @element ref, + int inv: @macroinvocation ref +); + +affectedbymacroexpansion( + int id: @element ref, + int inv: @macroinvocation ref +); + +case @macroinvocation.kind of + 1 = @macro_expansion +| 2 = @other_macro_reference +; + +macroinvocations( + unique int id: @macroinvocation, + int macro_id: @ppd_define ref, + int location: @location_default ref, + int kind: int ref +); + +macroparent( + unique int id: @macroinvocation ref, + int parent_id: @macroinvocation ref +); + +// a macroinvocation may be part of another location +// the way to find a constant expression that uses a macro +// is thus to find a constant expression that has a location +// to which a macro invocation is bound +macrolocationbind( + int id: @macroinvocation ref, + int location: @location ref +); + +#keyset[invocation, argument_index] +macro_argument_unexpanded( + int invocation: @macroinvocation ref, + int argument_index: int ref, + string text: string ref +); + +#keyset[invocation, argument_index] +macro_argument_expanded( + int invocation: @macroinvocation ref, + int argument_index: int ref, + string text: string ref +); + +/* +case @function.kind of + 1 = @normal_function +| 2 = @constructor +| 3 = @destructor +| 4 = @conversion_function +| 5 = @operator +| 6 = @builtin_function // GCC built-in functions, e.g. __builtin___memcpy_chk +| 7 = @user_defined_literal +| 8 = @deduction_guide +; +*/ + +functions( + unique int id: @function, + string name: string ref, + int kind: int ref +); + +function_entry_point( + int id: @function ref, + unique int entry_point: @stmt ref +); + +function_return_type( + int id: @function ref, + int return_type: @type ref +); + +/** + * If `function` is a coroutine, then this gives the `std::experimental::resumable_traits` + * instance associated with it, and the variables representing the `handle` and `promise` + * for it. + */ +coroutine( + unique int function: @function ref, + int traits: @type ref, + int handle: @variable ref, + int promise: @variable ref +); + +/** The `new` function used for allocating the coroutine state, if any. */ +coroutine_new( + unique int function: @function ref, + int new: @function ref +); + +/** The `delete` function used for deallocating the coroutine state, if any. */ +coroutine_delete( + unique int function: @function ref, + int delete: @function ref +); + +purefunctions(unique int id: @function ref); + +function_deleted(unique int id: @function ref); + +function_defaulted(unique int id: @function ref); + +function_prototyped(unique int id: @function ref) + +member_function_this_type( + unique int id: @function ref, + int this_type: @type ref +); + +#keyset[id, type_id] +fun_decls( + int id: @fun_decl, + int function: @function ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +fun_def(unique int id: @fun_decl ref); +fun_specialized(unique int id: @fun_decl ref); +fun_implicit(unique int id: @fun_decl ref); +fun_decl_specifiers( + int id: @fun_decl ref, + string name: string ref +) +#keyset[fun_decl, index] +fun_decl_throws( + int fun_decl: @fun_decl ref, + int index: int ref, + int type_id: @type ref +); +/* an empty throw specification is different from none */ +fun_decl_empty_throws(unique int fun_decl: @fun_decl ref); +fun_decl_noexcept( + int fun_decl: @fun_decl ref, + int constant: @expr ref +); +fun_decl_empty_noexcept(int fun_decl: @fun_decl ref); +fun_decl_typedef_type( + unique int fun_decl: @fun_decl ref, + int typedeftype_id: @usertype ref +); + +param_decl_bind( + unique int id: @var_decl ref, + int index: int ref, + int fun_decl: @fun_decl ref +); + +#keyset[id, type_id] +var_decls( + int id: @var_decl, + int variable: @variable ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +var_def(unique int id: @var_decl ref); +var_decl_specifiers( + int id: @var_decl ref, + string name: string ref +) +is_structured_binding(unique int id: @variable ref); + +type_decls( + unique int id: @type_decl, + int type_id: @type ref, + int location: @location_default ref +); +type_def(unique int id: @type_decl ref); +type_decl_top( + unique int type_decl: @type_decl ref +); + +namespace_decls( + unique int id: @namespace_decl, + int namespace_id: @namespace ref, + int location: @location_default ref, + int bodylocation: @location_default ref +); + +usings( + unique int id: @using, + int element_id: @element ref, + int location: @location_default ref +); + +/** The element which contains the `using` declaration. */ +using_container( + int parent: @element ref, + int child: @using ref +); + +static_asserts( + unique int id: @static_assert, + int condition : @expr ref, + string message : string ref, + int location: @location_default ref, + int enclosing : @element ref +); + +// each function has an ordered list of parameters +#keyset[id, type_id] +#keyset[function, index, type_id] +params( + int id: @parameter, + int function: @functionorblock ref, + int index: int ref, + int type_id: @type ref +); + +overrides( + int new: @function ref, + int old: @function ref +); + +#keyset[id, type_id] +membervariables( + int id: @membervariable, + int type_id: @type ref, + string name: string ref +); + +#keyset[id, type_id] +globalvariables( + int id: @globalvariable, + int type_id: @type ref, + string name: string ref +); + +#keyset[id, type_id] +localvariables( + int id: @localvariable, + int type_id: @type ref, + string name: string ref +); + +autoderivation( + unique int var: @variable ref, + int derivation_type: @type ref +); + +orphaned_variables( + int var: @localvariable ref, + int function: @function ref +) + +enumconstants( + unique int id: @enumconstant, + int parent: @usertype ref, + int index: int ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); + +@variable = @localscopevariable | @globalvariable | @membervariable; + +@localscopevariable = @localvariable | @parameter; + +/** + * Built-in types are the fundamental types, e.g., integral, floating, and void. + */ +case @builtintype.kind of + 1 = @errortype +| 2 = @unknowntype +| 3 = @void +| 4 = @boolean +| 5 = @char +| 6 = @unsigned_char +| 7 = @signed_char +| 8 = @short +| 9 = @unsigned_short +| 10 = @signed_short +| 11 = @int +| 12 = @unsigned_int +| 13 = @signed_int +| 14 = @long +| 15 = @unsigned_long +| 16 = @signed_long +| 17 = @long_long +| 18 = @unsigned_long_long +| 19 = @signed_long_long +// ... 20 Microsoft-specific __int8 +// ... 21 Microsoft-specific __int16 +// ... 22 Microsoft-specific __int32 +// ... 23 Microsoft-specific __int64 +| 24 = @float +| 25 = @double +| 26 = @long_double +| 27 = @complex_float // C99-specific _Complex float +| 28 = @complex_double // C99-specific _Complex double +| 29 = @complex_long_double // C99-specific _Complex long double +| 30 = @imaginary_float // C99-specific _Imaginary float +| 31 = @imaginary_double // C99-specific _Imaginary double +| 32 = @imaginary_long_double // C99-specific _Imaginary long double +| 33 = @wchar_t // Microsoft-specific +| 34 = @decltype_nullptr // C++11 +| 35 = @int128 // __int128 +| 36 = @unsigned_int128 // unsigned __int128 +| 37 = @signed_int128 // signed __int128 +| 38 = @float128 // __float128 +| 39 = @complex_float128 // _Complex __float128 +| 40 = @decimal32 // _Decimal32 +| 41 = @decimal64 // _Decimal64 +| 42 = @decimal128 // _Decimal128 +| 43 = @char16_t +| 44 = @char32_t +| 45 = @std_float32 // _Float32 +| 46 = @float32x // _Float32x +| 47 = @std_float64 // _Float64 +| 48 = @float64x // _Float64x +| 49 = @std_float128 // _Float128 +// ... 50 _Float128x +| 51 = @char8_t +| 52 = @float16 // _Float16 +| 53 = @complex_float16 // _Complex _Float16 +| 54 = @fp16 // __fp16 +| 55 = @std_bfloat16 // __bf16 +| 56 = @std_float16 // std::float16_t +| 57 = @complex_std_float32 // _Complex _Float32 +| 58 = @complex_float32x // _Complex _Float32x +| 59 = @complex_std_float64 // _Complex _Float64 +| 60 = @complex_float64x // _Complex _Float64x +| 61 = @complex_std_float128 // _Complex _Float128 +; + +builtintypes( + unique int id: @builtintype, + string name: string ref, + int kind: int ref, + int size: int ref, + int sign: int ref, + int alignment: int ref +); + +/** + * Derived types are types that are directly derived from existing types and + * point to, refer to, transform type data to return a new type. + */ +case @derivedtype.kind of + 1 = @pointer +| 2 = @reference +| 3 = @type_with_specifiers +| 4 = @array +| 5 = @gnu_vector +| 6 = @routineptr +| 7 = @routinereference +| 8 = @rvalue_reference // C++11 +// ... 9 type_conforming_to_protocols deprecated +| 10 = @block +; + +derivedtypes( + unique int id: @derivedtype, + string name: string ref, + int kind: int ref, + int type_id: @type ref +); + +pointerishsize(unique int id: @derivedtype ref, + int size: int ref, + int alignment: int ref); + +arraysizes( + unique int id: @derivedtype ref, + int num_elements: int ref, + int bytesize: int ref, + int alignment: int ref +); + +typedefbase( + unique int id: @usertype ref, + int type_id: @type ref +); + +/** + * An instance of the C++11 `decltype` operator. For example: + * ``` + * int a; + * decltype(1+a) b; + * ``` + * Here `expr` is `1+a`. + * + * Sometimes an additional pair of parentheses around the expression + * would change the semantics of this decltype, e.g. + * ``` + * struct A { double x; }; + * const A* a = new A(); + * decltype( a->x ); // type is double + * decltype((a->x)); // type is const double& + * ``` + * (Please consult the C++11 standard for more details). + * `parentheses_would_change_meaning` is `true` iff that is the case. + */ +#keyset[id, expr] +decltypes( + int id: @decltype, + int expr: @expr ref, + int base_type: @type ref, + boolean parentheses_would_change_meaning: boolean ref +); + +/* +case @usertype.kind of + 1 = @struct +| 2 = @class +| 3 = @union +| 4 = @enum +| 5 = @typedef // classic C: typedef typedef type name +| 6 = @template +| 7 = @template_parameter +| 8 = @template_template_parameter +| 9 = @proxy_class // a proxy class associated with a template parameter +// ... 10 objc_class deprecated +// ... 11 objc_protocol deprecated +// ... 12 objc_category deprecated +| 13 = @scoped_enum +| 14 = @using_alias // a using name = type style typedef +; +*/ + +usertypes( + unique int id: @usertype, + string name: string ref, + int kind: int ref +); + +usertypesize( + unique int id: @usertype ref, + int size: int ref, + int alignment: int ref +); + +usertype_final(unique int id: @usertype ref); + +usertype_uuid( + unique int id: @usertype ref, + string uuid: string ref +); + +mangled_name( + unique int id: @declaration ref, + int mangled_name : @mangledname, + boolean is_complete: boolean ref +); + +is_pod_class(unique int id: @usertype ref); +is_standard_layout_class(unique int id: @usertype ref); + +is_complete(unique int id: @usertype ref); + +is_class_template(unique int id: @usertype ref); +class_instantiation( + int to: @usertype ref, + int from: @usertype ref +); +class_template_argument( + int type_id: @usertype ref, + int index: int ref, + int arg_type: @type ref +); +class_template_argument_value( + int type_id: @usertype ref, + int index: int ref, + int arg_value: @expr ref +); + +is_proxy_class_for( + unique int id: @usertype ref, + unique int templ_param_id: @usertype ref +); + +type_mentions( + unique int id: @type_mention, + int type_id: @type ref, + int location: @location ref, + // a_symbol_reference_kind from the frontend. + int kind: int ref +); + +is_function_template(unique int id: @function ref); +function_instantiation( + unique int to: @function ref, + int from: @function ref +); +function_template_argument( + int function_id: @function ref, + int index: int ref, + int arg_type: @type ref +); +function_template_argument_value( + int function_id: @function ref, + int index: int ref, + int arg_value: @expr ref +); + +is_variable_template(unique int id: @variable ref); +variable_instantiation( + unique int to: @variable ref, + int from: @variable ref +); +variable_template_argument( + int variable_id: @variable ref, + int index: int ref, + int arg_type: @type ref +); +variable_template_argument_value( + int variable_id: @variable ref, + int index: int ref, + int arg_value: @expr ref +); + +/* + Fixed point types + precision(1) = short, precision(2) = default, precision(3) = long + is_unsigned(1) = unsigned is_unsigned(2) = signed + is_fract_type(1) = declared with _Fract + saturating(1) = declared with _Sat +*/ +/* TODO +fixedpointtypes( + unique int id: @fixedpointtype, + int precision: int ref, + int is_unsigned: int ref, + int is_fract_type: int ref, + int saturating: int ref); +*/ + +routinetypes( + unique int id: @routinetype, + int return_type: @type ref +); + +routinetypeargs( + int routine: @routinetype ref, + int index: int ref, + int type_id: @type ref +); + +ptrtomembers( + unique int id: @ptrtomember, + int type_id: @type ref, + int class_id: @type ref +); + +/* + specifiers for types, functions, and variables + + "public", + "protected", + "private", + + "const", + "volatile", + "static", + + "pure", + "virtual", + "sealed", // Microsoft + "__interface", // Microsoft + "inline", + "explicit", + + "near", // near far extension + "far", // near far extension + "__ptr32", // Microsoft + "__ptr64", // Microsoft + "__sptr", // Microsoft + "__uptr", // Microsoft + "dllimport", // Microsoft + "dllexport", // Microsoft + "thread", // Microsoft + "naked", // Microsoft + "microsoft_inline", // Microsoft + "forceinline", // Microsoft + "selectany", // Microsoft + "nothrow", // Microsoft + "novtable", // Microsoft + "noreturn", // Microsoft + "noinline", // Microsoft + "noalias", // Microsoft + "restrict", // Microsoft +*/ + +specifiers( + unique int id: @specifier, + unique string str: string ref +); + +typespecifiers( + int type_id: @type ref, + int spec_id: @specifier ref +); + +funspecifiers( + int func_id: @function ref, + int spec_id: @specifier ref +); + +varspecifiers( + int var_id: @accessible ref, + int spec_id: @specifier ref +); + +attributes( + unique int id: @attribute, + int kind: int ref, + string name: string ref, + string name_space: string ref, + int location: @location_default ref +); + +case @attribute.kind of + 0 = @gnuattribute +| 1 = @stdattribute +| 2 = @declspec +| 3 = @msattribute +| 4 = @alignas +// ... 5 @objc_propertyattribute deprecated +; + +attribute_args( + unique int id: @attribute_arg, + int kind: int ref, + int attribute: @attribute ref, + int index: int ref, + int location: @location_default ref +); + +case @attribute_arg.kind of + 0 = @attribute_arg_empty +| 1 = @attribute_arg_token +| 2 = @attribute_arg_constant +| 3 = @attribute_arg_type +| 4 = @attribute_arg_constant_expr +| 5 = @attribute_arg_expr +; + +attribute_arg_value( + unique int arg: @attribute_arg ref, + string value: string ref +); +attribute_arg_type( + unique int arg: @attribute_arg ref, + int type_id: @type ref +); +attribute_arg_constant( + unique int arg: @attribute_arg ref, + int constant: @expr ref +) +attribute_arg_expr( + unique int arg: @attribute_arg ref, + int expr: @expr ref +) +attribute_arg_name( + unique int arg: @attribute_arg ref, + string name: string ref +); + +typeattributes( + int type_id: @type ref, + int spec_id: @attribute ref +); + +funcattributes( + int func_id: @function ref, + int spec_id: @attribute ref +); + +varattributes( + int var_id: @accessible ref, + int spec_id: @attribute ref +); + +stmtattributes( + int stmt_id: @stmt ref, + int spec_id: @attribute ref +); + +@type = @builtintype + | @derivedtype + | @usertype + /* TODO | @fixedpointtype */ + | @routinetype + | @ptrtomember + | @decltype; + +unspecifiedtype( + unique int type_id: @type ref, + int unspecified_type_id: @type ref +); + +member( + int parent: @type ref, + int index: int ref, + int child: @member ref +); + +@enclosingfunction_child = @usertype | @variable | @namespace + +enclosingfunction( + unique int child: @enclosingfunction_child ref, + int parent: @function ref +); + +derivations( + unique int derivation: @derivation, + int sub: @type ref, + int index: int ref, + int super: @type ref, + int location: @location_default ref +); + +derspecifiers( + int der_id: @derivation ref, + int spec_id: @specifier ref +); + +/** + * Contains the byte offset of the base class subobject within the derived + * class. Only holds for non-virtual base classes, but see table + * `virtual_base_offsets` for offsets of virtual base class subobjects. + */ +direct_base_offsets( + unique int der_id: @derivation ref, + int offset: int ref +); + +/** + * Contains the byte offset of the virtual base class subobject for class + * `super` within a most-derived object of class `sub`. `super` can be either a + * direct or indirect base class. + */ +#keyset[sub, super] +virtual_base_offsets( + int sub: @usertype ref, + int super: @usertype ref, + int offset: int ref +); + +frienddecls( + unique int id: @frienddecl, + int type_id: @type ref, + int decl_id: @declaration ref, + int location: @location_default ref +); + +@declaredtype = @usertype ; + +@declaration = @function + | @declaredtype + | @variable + | @enumconstant + | @frienddecl; + +@member = @membervariable + | @function + | @declaredtype + | @enumconstant; + +@locatable = @diagnostic + | @declaration + | @ppd_include + | @ppd_define + | @macroinvocation + /*| @funcall*/ + | @xmllocatable + | @attribute + | @attribute_arg; + +@namedscope = @namespace | @usertype; + +@element = @locatable + | @file + | @folder + | @specifier + | @type + | @expr + | @namespace + | @initialiser + | @stmt + | @derivation + | @comment + | @preprocdirect + | @fun_decl + | @var_decl + | @type_decl + | @namespace_decl + | @using + | @namequalifier + | @specialnamequalifyingelement + | @static_assert + | @type_mention + | @lambdacapture; + +@exprparent = @element; + +comments( + unique int id: @comment, + string contents: string ref, + int location: @location_default ref +); + +commentbinding( + int id: @comment ref, + int element: @element ref +); + +exprconv( + int converted: @expr ref, + unique int conversion: @expr ref +); + +compgenerated(unique int id: @element ref); + +/** + * `destructor_call` destructs the `i`'th entity that should be + * destructed following `element`. Note that entities should be + * destructed in reverse construction order, so for a given `element` + * these should be called from highest to lowest `i`. + */ +#keyset[element, destructor_call] +#keyset[element, i] +synthetic_destructor_call( + int element: @element ref, + int i: int ref, + int destructor_call: @routineexpr ref +); + +namespaces( + unique int id: @namespace, + string name: string ref +); + +namespace_inline( + unique int id: @namespace ref +); + +namespacembrs( + int parentid: @namespace ref, + unique int memberid: @namespacembr ref +); + +@namespacembr = @declaration | @namespace; + +exprparents( + int expr_id: @expr ref, + int child_index: int ref, + int parent_id: @exprparent ref +); + +expr_isload(unique int expr_id: @expr ref); + +@cast = @c_style_cast + | @const_cast + | @dynamic_cast + | @reinterpret_cast + | @static_cast + ; + +/* +case @conversion.kind of + 0 = @simple_conversion // a numeric conversion, qualification conversion, or a reinterpret_cast +| 1 = @bool_conversion // conversion to 'bool' +| 2 = @base_class_conversion // a derived-to-base conversion +| 3 = @derived_class_conversion // a base-to-derived conversion +| 4 = @pm_base_class_conversion // a derived-to-base conversion of a pointer to member +| 5 = @pm_derived_class_conversion // a base-to-derived conversion of a pointer to member +| 6 = @glvalue_adjust // an adjustment of the type of a glvalue +| 7 = @prvalue_adjust // an adjustment of the type of a prvalue +; +*/ +/** + * Describes the semantics represented by a cast expression. This is largely + * independent of the source syntax of the cast, so it is separate from the + * regular expression kind. + */ +conversionkinds( + unique int expr_id: @cast ref, + int kind: int ref +); + +@conversion = @cast + | @array_to_pointer + | @parexpr + | @reference_to + | @ref_indirect + | @temp_init + ; + +/* +case @funbindexpr.kind of + 0 = @normal_call // a normal call +| 1 = @virtual_call // a virtual call +| 2 = @adl_call // a call whose target is only found by ADL +; +*/ +iscall( + unique int caller: @funbindexpr ref, + int kind: int ref +); + +numtemplatearguments( + unique int expr_id: @expr ref, + int num: int ref +); + +specialnamequalifyingelements( + unique int id: @specialnamequalifyingelement, + unique string name: string ref +); + +@namequalifiableelement = @expr | @namequalifier; +@namequalifyingelement = @namespace + | @specialnamequalifyingelement + | @usertype; + +namequalifiers( + unique int id: @namequalifier, + unique int qualifiableelement: @namequalifiableelement ref, + int qualifyingelement: @namequalifyingelement ref, + int location: @location_default ref +); + +varbind( + int expr: @varbindexpr ref, + int var: @accessible ref +); + +funbind( + int expr: @funbindexpr ref, + int fun: @function ref +); + +@any_new_expr = @new_expr + | @new_array_expr; + +@new_or_delete_expr = @any_new_expr + | @delete_expr + | @delete_array_expr; + +@prefix_crement_expr = @preincrexpr | @predecrexpr; + +@postfix_crement_expr = @postincrexpr | @postdecrexpr; + +@increment_expr = @preincrexpr | @postincrexpr; + +@decrement_expr = @predecrexpr | @postdecrexpr; + +@crement_expr = @increment_expr | @decrement_expr; + +@un_arith_op_expr = @arithnegexpr + | @unaryplusexpr + | @conjugation + | @realpartexpr + | @imagpartexpr + | @crement_expr + ; + +@un_bitwise_op_expr = @complementexpr; + +@un_log_op_expr = @notexpr; + +@un_op_expr = @address_of + | @indirect + | @un_arith_op_expr + | @un_bitwise_op_expr + | @builtinaddressof + | @vec_fill + | @un_log_op_expr + | @co_await + | @co_yield + ; + +@bin_log_op_expr = @andlogicalexpr | @orlogicalexpr; + +@cmp_op_expr = @eq_op_expr | @rel_op_expr; + +@eq_op_expr = @eqexpr | @neexpr; + +@rel_op_expr = @gtexpr + | @ltexpr + | @geexpr + | @leexpr + | @spaceshipexpr + ; + +@bin_bitwise_op_expr = @lshiftexpr + | @rshiftexpr + | @andexpr + | @orexpr + | @xorexpr + ; + +@p_arith_op_expr = @paddexpr + | @psubexpr + | @pdiffexpr + ; + +@bin_arith_op_expr = @addexpr + | @subexpr + | @mulexpr + | @divexpr + | @remexpr + | @jmulexpr + | @jdivexpr + | @fjaddexpr + | @jfaddexpr + | @fjsubexpr + | @jfsubexpr + | @minexpr + | @maxexpr + | @p_arith_op_expr + ; + +@bin_op_expr = @bin_arith_op_expr + | @bin_bitwise_op_expr + | @cmp_op_expr + | @bin_log_op_expr + ; + +@op_expr = @un_op_expr + | @bin_op_expr + | @assign_expr + | @conditionalexpr + ; + +@assign_arith_expr = @assignaddexpr + | @assignsubexpr + | @assignmulexpr + | @assigndivexpr + | @assignremexpr + ; + +@assign_bitwise_expr = @assignandexpr + | @assignorexpr + | @assignxorexpr + | @assignlshiftexpr + | @assignrshiftexpr + ; + +@assign_pointer_expr = @assignpaddexpr + | @assignpsubexpr + ; + +@assign_op_expr = @assign_arith_expr + | @assign_bitwise_expr + | @assign_pointer_expr + ; + +@assign_expr = @assignexpr | @assign_op_expr | @blockassignexpr + +/* + case @allocator.form of + 0 = plain + | 1 = alignment + ; +*/ + +/** + * The allocator function associated with a `new` or `new[]` expression. + * The `form` column specified whether the allocation call contains an alignment + * argument. + */ +expr_allocator( + unique int expr: @any_new_expr ref, + int func: @function ref, + int form: int ref +); + +/* + case @deallocator.form of + 0 = plain + | 1 = size + | 2 = alignment + | 3 = size_and_alignment + ; +*/ + +/** + * The deallocator function associated with a `delete`, `delete[]`, `new`, or + * `new[]` expression. For a `new` or `new[]` expression, the deallocator is the + * one used to free memory if the initialization throws an exception. + * The `form` column specifies whether the deallocation call contains a size + * argument, and alignment argument, or both. + */ +expr_deallocator( + unique int expr: @new_or_delete_expr ref, + int func: @function ref, + int form: int ref +); + +/** + * Holds if the `@conditionalexpr` is of the two operand form + * `guard ? : false`. + */ +expr_cond_two_operand( + unique int cond: @conditionalexpr ref +); + +/** + * The guard of `@conditionalexpr` `guard ? true : false` + */ +expr_cond_guard( + unique int cond: @conditionalexpr ref, + int guard: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` holds. For the two operand form + * `guard ?: false` consider using `expr_cond_guard` instead. + */ +expr_cond_true( + unique int cond: @conditionalexpr ref, + int true: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` does not hold. + */ +expr_cond_false( + unique int cond: @conditionalexpr ref, + int false: @expr ref +); + +/** A string representation of the value. */ +values( + unique int id: @value, + string str: string ref +); + +/** The actual text in the source code for the value, if any. */ +valuetext( + unique int id: @value ref, + string text: string ref +); + +valuebind( + int val: @value ref, + unique int expr: @expr ref +); + +fieldoffsets( + unique int id: @variable ref, + int byteoffset: int ref, + int bitoffset: int ref +); + +bitfield( + unique int id: @variable ref, + int bits: int ref, + int declared_bits: int ref +); + +/* TODO +memberprefix( + int member: @expr ref, + int prefix: @expr ref +); +*/ + +/* + kind(1) = mbrcallexpr + kind(2) = mbrptrcallexpr + kind(3) = mbrptrmbrcallexpr + kind(4) = ptrmbrptrmbrcallexpr + kind(5) = mbrreadexpr // x.y + kind(6) = mbrptrreadexpr // p->y + kind(7) = mbrptrmbrreadexpr // x.*pm + kind(8) = mbrptrmbrptrreadexpr // x->*pm + kind(9) = staticmbrreadexpr // static x.y + kind(10) = staticmbrptrreadexpr // static p->y +*/ +/* TODO +memberaccess( + int member: @expr ref, + int kind: int ref +); +*/ + +initialisers( + unique int init: @initialiser, + int var: @accessible ref, + unique int expr: @expr ref, + int location: @location_expr ref +); + +braced_initialisers( + int init: @initialiser ref +); + +/** + * An ancestor for the expression, for cases in which we cannot + * otherwise find the expression's parent. + */ +expr_ancestor( + int exp: @expr ref, + int ancestor: @element ref +); + +exprs( + unique int id: @expr, + int kind: int ref, + int location: @location_expr ref +); + +expr_reuse( + int reuse: @expr ref, + int original: @expr ref, + int value_category: int ref +) + +/* + case @value.category of + 1 = prval + | 2 = xval + | 3 = lval + ; +*/ +expr_types( + int id: @expr ref, + int typeid: @type ref, + int value_category: int ref +); + +case @expr.kind of + 1 = @errorexpr +| 2 = @address_of // & AddressOfExpr +| 3 = @reference_to // ReferenceToExpr (implicit?) +| 4 = @indirect // * PointerDereferenceExpr +| 5 = @ref_indirect // ReferenceDereferenceExpr (implicit?) +// ... +| 8 = @array_to_pointer // (???) +| 9 = @vacuous_destructor_call // VacuousDestructorCall +// ... +| 11 = @assume // Microsoft +| 12 = @parexpr +| 13 = @arithnegexpr +| 14 = @unaryplusexpr +| 15 = @complementexpr +| 16 = @notexpr +| 17 = @conjugation // GNU ~ operator +| 18 = @realpartexpr // GNU __real +| 19 = @imagpartexpr // GNU __imag +| 20 = @postincrexpr +| 21 = @postdecrexpr +| 22 = @preincrexpr +| 23 = @predecrexpr +| 24 = @conditionalexpr +| 25 = @addexpr +| 26 = @subexpr +| 27 = @mulexpr +| 28 = @divexpr +| 29 = @remexpr +| 30 = @jmulexpr // C99 mul imaginary +| 31 = @jdivexpr // C99 div imaginary +| 32 = @fjaddexpr // C99 add real + imaginary +| 33 = @jfaddexpr // C99 add imaginary + real +| 34 = @fjsubexpr // C99 sub real - imaginary +| 35 = @jfsubexpr // C99 sub imaginary - real +| 36 = @paddexpr // pointer add (pointer + int or int + pointer) +| 37 = @psubexpr // pointer sub (pointer - integer) +| 38 = @pdiffexpr // difference between two pointers +| 39 = @lshiftexpr +| 40 = @rshiftexpr +| 41 = @andexpr +| 42 = @orexpr +| 43 = @xorexpr +| 44 = @eqexpr +| 45 = @neexpr +| 46 = @gtexpr +| 47 = @ltexpr +| 48 = @geexpr +| 49 = @leexpr +| 50 = @minexpr // GNU minimum +| 51 = @maxexpr // GNU maximum +| 52 = @assignexpr +| 53 = @assignaddexpr +| 54 = @assignsubexpr +| 55 = @assignmulexpr +| 56 = @assigndivexpr +| 57 = @assignremexpr +| 58 = @assignlshiftexpr +| 59 = @assignrshiftexpr +| 60 = @assignandexpr +| 61 = @assignorexpr +| 62 = @assignxorexpr +| 63 = @assignpaddexpr // assign pointer add +| 64 = @assignpsubexpr // assign pointer sub +| 65 = @andlogicalexpr +| 66 = @orlogicalexpr +| 67 = @commaexpr +| 68 = @subscriptexpr // access to member of an array, e.g., a[5] +// ... 69 @objc_subscriptexpr deprecated +// ... 70 @cmdaccess deprecated +// ... +| 73 = @virtfunptrexpr +| 74 = @callexpr +// ... 75 @msgexpr_normal deprecated +// ... 76 @msgexpr_super deprecated +// ... 77 @atselectorexpr deprecated +// ... 78 @atprotocolexpr deprecated +| 79 = @vastartexpr +| 80 = @vaargexpr +| 81 = @vaendexpr +| 82 = @vacopyexpr +// ... 83 @atencodeexpr deprecated +| 84 = @varaccess +| 85 = @thisaccess +// ... 86 @objc_box_expr deprecated +| 87 = @new_expr +| 88 = @delete_expr +| 89 = @throw_expr +| 90 = @condition_decl // a variable declared in a condition, e.g., if(int x = y > 2) +| 91 = @braced_init_list +| 92 = @type_id +| 93 = @runtime_sizeof +| 94 = @runtime_alignof +| 95 = @sizeof_pack +| 96 = @expr_stmt // GNU extension +| 97 = @routineexpr +| 98 = @type_operand // used to access a type in certain contexts (haven't found any examples yet....) +| 99 = @offsetofexpr // offsetof ::= type and field +| 100 = @hasassignexpr // __has_assign ::= type +| 101 = @hascopyexpr // __has_copy ::= type +| 102 = @hasnothrowassign // __has_nothrow_assign ::= type +| 103 = @hasnothrowconstr // __has_nothrow_constructor ::= type +| 104 = @hasnothrowcopy // __has_nothrow_copy ::= type +| 105 = @hastrivialassign // __has_trivial_assign ::= type +| 106 = @hastrivialconstr // __has_trivial_constructor ::= type +| 107 = @hastrivialcopy // __has_trivial_copy ::= type +| 108 = @hasuserdestr // __has_user_destructor ::= type +| 109 = @hasvirtualdestr // __has_virtual_destructor ::= type +| 110 = @isabstractexpr // __is_abstract ::= type +| 111 = @isbaseofexpr // __is_base_of ::= type type +| 112 = @isclassexpr // __is_class ::= type +| 113 = @isconvtoexpr // __is_convertible_to ::= type type +| 114 = @isemptyexpr // __is_empty ::= type +| 115 = @isenumexpr // __is_enum ::= type +| 116 = @ispodexpr // __is_pod ::= type +| 117 = @ispolyexpr // __is_polymorphic ::= type +| 118 = @isunionexpr // __is_union ::= type +| 119 = @typescompexpr // GNU __builtin_types_compatible ::= type type +| 120 = @intaddrexpr // frontend internal builtin, used to implement offsetof +// ... +| 122 = @hastrivialdestructor // __has_trivial_destructor ::= type +| 123 = @literal +| 124 = @uuidof +| 127 = @aggregateliteral +| 128 = @delete_array_expr +| 129 = @new_array_expr +// ... 130 @objc_array_literal deprecated +// ... 131 @objc_dictionary_literal deprecated +| 132 = @foldexpr +// ... +| 200 = @ctordirectinit +| 201 = @ctorvirtualinit +| 202 = @ctorfieldinit +| 203 = @ctordelegatinginit +| 204 = @dtordirectdestruct +| 205 = @dtorvirtualdestruct +| 206 = @dtorfielddestruct +// ... +| 210 = @static_cast +| 211 = @reinterpret_cast +| 212 = @const_cast +| 213 = @dynamic_cast +| 214 = @c_style_cast +| 215 = @lambdaexpr +| 216 = @param_ref +| 217 = @noopexpr +// ... +| 294 = @istriviallyconstructibleexpr +| 295 = @isdestructibleexpr +| 296 = @isnothrowdestructibleexpr +| 297 = @istriviallydestructibleexpr +| 298 = @istriviallyassignableexpr +| 299 = @isnothrowassignableexpr +| 300 = @istrivialexpr +| 301 = @isstandardlayoutexpr +| 302 = @istriviallycopyableexpr +| 303 = @isliteraltypeexpr +| 304 = @hastrivialmoveconstructorexpr +| 305 = @hastrivialmoveassignexpr +| 306 = @hasnothrowmoveassignexpr +| 307 = @isconstructibleexpr +| 308 = @isnothrowconstructibleexpr +| 309 = @hasfinalizerexpr +| 310 = @isdelegateexpr +| 311 = @isinterfaceclassexpr +| 312 = @isrefarrayexpr +| 313 = @isrefclassexpr +| 314 = @issealedexpr +| 315 = @issimplevalueclassexpr +| 316 = @isvalueclassexpr +| 317 = @isfinalexpr +| 319 = @noexceptexpr +| 320 = @builtinshufflevector +| 321 = @builtinchooseexpr +| 322 = @builtinaddressof +| 323 = @vec_fill +| 324 = @builtinconvertvector +| 325 = @builtincomplex +| 326 = @spaceshipexpr +| 327 = @co_await +| 328 = @co_yield +| 329 = @temp_init +| 330 = @isassignable +| 331 = @isaggregate +| 332 = @hasuniqueobjectrepresentations +| 333 = @builtinbitcast +| 334 = @builtinshuffle +| 335 = @blockassignexpr +| 336 = @issame +| 337 = @isfunction +| 338 = @islayoutcompatible +| 339 = @ispointerinterconvertiblebaseof +| 340 = @isarray +| 341 = @arrayrank +| 342 = @arrayextent +| 343 = @isarithmetic +| 344 = @iscompletetype +| 345 = @iscompound +| 346 = @isconst +| 347 = @isfloatingpoint +| 348 = @isfundamental +| 349 = @isintegral +| 350 = @islvaluereference +| 351 = @ismemberfunctionpointer +| 352 = @ismemberobjectpointer +| 353 = @ismemberpointer +| 354 = @isobject +| 355 = @ispointer +| 356 = @isreference +| 357 = @isrvaluereference +| 358 = @isscalar +| 359 = @issigned +| 360 = @isunsigned +| 361 = @isvoid +| 362 = @isvolatile +| 363 = @reuseexpr +; + +@var_args_expr = @vastartexpr + | @vaendexpr + | @vaargexpr + | @vacopyexpr + ; + +@builtin_op = @var_args_expr + | @noopexpr + | @offsetofexpr + | @intaddrexpr + | @hasassignexpr + | @hascopyexpr + | @hasnothrowassign + | @hasnothrowconstr + | @hasnothrowcopy + | @hastrivialassign + | @hastrivialconstr + | @hastrivialcopy + | @hastrivialdestructor + | @hasuserdestr + | @hasvirtualdestr + | @isabstractexpr + | @isbaseofexpr + | @isclassexpr + | @isconvtoexpr + | @isemptyexpr + | @isenumexpr + | @ispodexpr + | @ispolyexpr + | @isunionexpr + | @typescompexpr + | @builtinshufflevector + | @builtinconvertvector + | @builtinaddressof + | @istriviallyconstructibleexpr + | @isdestructibleexpr + | @isnothrowdestructibleexpr + | @istriviallydestructibleexpr + | @istriviallyassignableexpr + | @isnothrowassignableexpr + | @istrivialexpr + | @isstandardlayoutexpr + | @istriviallycopyableexpr + | @isliteraltypeexpr + | @hastrivialmoveconstructorexpr + | @hastrivialmoveassignexpr + | @hasnothrowmoveassignexpr + | @isconstructibleexpr + | @isnothrowconstructibleexpr + | @hasfinalizerexpr + | @isdelegateexpr + | @isinterfaceclassexpr + | @isrefarrayexpr + | @isrefclassexpr + | @issealedexpr + | @issimplevalueclassexpr + | @isvalueclassexpr + | @isfinalexpr + | @builtinchooseexpr + | @builtincomplex + | @isassignable + | @isaggregate + | @hasuniqueobjectrepresentations + | @builtinbitcast + | @builtinshuffle + | @issame + | @isfunction + | @islayoutcompatible + | @ispointerinterconvertiblebaseof + | @isarray + | @arrayrank + | @arrayextent + | @isarithmetic + | @iscompletetype + | @iscompound + | @isconst + | @isfloatingpoint + | @isfundamental + | @isintegral + | @islvaluereference + | @ismemberfunctionpointer + | @ismemberobjectpointer + | @ismemberpointer + | @isobject + | @ispointer + | @isreference + | @isrvaluereference + | @isscalar + | @issigned + | @isunsigned + | @isvoid + | @isvolatile + ; + +new_allocated_type( + unique int expr: @new_expr ref, + int type_id: @type ref +); + +new_array_allocated_type( + unique int expr: @new_array_expr ref, + int type_id: @type ref +); + +/** + * The field being initialized by an initializer expression within an aggregate + * initializer for a class/struct/union. Position is used to sort repeated initializers. + */ +#keyset[aggregate, position] +aggregate_field_init( + int aggregate: @aggregateliteral ref, + int initializer: @expr ref, + int field: @membervariable ref, + int position: int ref +); + +/** + * The index of the element being initialized by an initializer expression + * within an aggregate initializer for an array. Position is used to sort repeated initializers. + */ +#keyset[aggregate, position] +aggregate_array_init( + int aggregate: @aggregateliteral ref, + int initializer: @expr ref, + int element_index: int ref, + int position: int ref +); + +@ctorinit = @ctordirectinit + | @ctorvirtualinit + | @ctorfieldinit + | @ctordelegatinginit; +@dtordestruct = @dtordirectdestruct + | @dtorvirtualdestruct + | @dtorfielddestruct; + + +condition_decl_bind( + unique int expr: @condition_decl ref, + unique int decl: @declaration ref +); + +typeid_bind( + unique int expr: @type_id ref, + int type_id: @type ref +); + +uuidof_bind( + unique int expr: @uuidof ref, + int type_id: @type ref +); + +@runtime_sizeof_or_alignof = @runtime_sizeof | @runtime_alignof; + +sizeof_bind( + unique int expr: @runtime_sizeof_or_alignof ref, + int type_id: @type ref +); + +code_block( + unique int block: @literal ref, + unique int routine: @function ref +); + +lambdas( + unique int expr: @lambdaexpr ref, + string default_capture: string ref, + boolean has_explicit_return_type: boolean ref +); + +lambda_capture( + unique int id: @lambdacapture, + int lambda: @lambdaexpr ref, + int index: int ref, + int field: @membervariable ref, + boolean captured_by_reference: boolean ref, + boolean is_implicit: boolean ref, + int location: @location_default ref +); + +@funbindexpr = @routineexpr + | @new_expr + | @delete_expr + | @delete_array_expr + | @ctordirectinit + | @ctorvirtualinit + | @ctordelegatinginit + | @dtordirectdestruct + | @dtorvirtualdestruct; + +@varbindexpr = @varaccess | @ctorfieldinit | @dtorfielddestruct; +@addressable = @function | @variable ; +@accessible = @addressable | @enumconstant ; + +@access = @varaccess | @routineexpr ; + +fold( + int expr: @foldexpr ref, + string operator: string ref, + boolean is_left_fold: boolean ref +); + +stmts( + unique int id: @stmt, + int kind: int ref, + int location: @location_stmt ref +); + +case @stmt.kind of + 1 = @stmt_expr +| 2 = @stmt_if +| 3 = @stmt_while +| 4 = @stmt_goto +| 5 = @stmt_label +| 6 = @stmt_return +| 7 = @stmt_block +| 8 = @stmt_end_test_while // do { ... } while ( ... ) +| 9 = @stmt_for +| 10 = @stmt_switch_case +| 11 = @stmt_switch +| 13 = @stmt_asm // "asm" statement or the body of an asm function +| 15 = @stmt_try_block +| 16 = @stmt_microsoft_try // Microsoft +| 17 = @stmt_decl +| 18 = @stmt_set_vla_size // C99 +| 19 = @stmt_vla_decl // C99 +| 25 = @stmt_assigned_goto // GNU +| 26 = @stmt_empty +| 27 = @stmt_continue +| 28 = @stmt_break +| 29 = @stmt_range_based_for // C++11 +// ... 30 @stmt_at_autoreleasepool_block deprecated +// ... 31 @stmt_objc_for_in deprecated +// ... 32 @stmt_at_synchronized deprecated +| 33 = @stmt_handler +// ... 34 @stmt_finally_end deprecated +| 35 = @stmt_constexpr_if +| 37 = @stmt_co_return +; + +type_vla( + int type_id: @type ref, + int decl: @stmt_vla_decl ref +); + +variable_vla( + int var: @variable ref, + int decl: @stmt_vla_decl ref +); + +if_initialization( + unique int if_stmt: @stmt_if ref, + int init_id: @stmt ref +); + +if_then( + unique int if_stmt: @stmt_if ref, + int then_id: @stmt ref +); + +if_else( + unique int if_stmt: @stmt_if ref, + int else_id: @stmt ref +); + +constexpr_if_initialization( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int init_id: @stmt ref +); + +constexpr_if_then( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int then_id: @stmt ref +); + +constexpr_if_else( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int else_id: @stmt ref +); + +while_body( + unique int while_stmt: @stmt_while ref, + int body_id: @stmt ref +); + +do_body( + unique int do_stmt: @stmt_end_test_while ref, + int body_id: @stmt ref +); + +switch_initialization( + unique int switch_stmt: @stmt_switch ref, + int init_id: @stmt ref +); + +#keyset[switch_stmt, index] +switch_case( + int switch_stmt: @stmt_switch ref, + int index: int ref, + int case_id: @stmt_switch_case ref +); + +switch_body( + unique int switch_stmt: @stmt_switch ref, + int body_id: @stmt ref +); + +@stmt_for_or_range_based_for = @stmt_for + | @stmt_range_based_for; + +for_initialization( + unique int for_stmt: @stmt_for_or_range_based_for ref, + int init_id: @stmt ref +); + +for_condition( + unique int for_stmt: @stmt_for ref, + int condition_id: @expr ref +); + +for_update( + unique int for_stmt: @stmt_for ref, + int update_id: @expr ref +); + +for_body( + unique int for_stmt: @stmt_for ref, + int body_id: @stmt ref +); + +@stmtparent = @stmt | @expr_stmt ; +stmtparents( + unique int id: @stmt ref, + int index: int ref, + int parent: @stmtparent ref +); + +ishandler(unique int block: @stmt_block ref); + +@cfgnode = @stmt | @expr | @function | @initialiser ; + +stmt_decl_bind( + int stmt: @stmt_decl ref, + int num: int ref, + int decl: @declaration ref +); + +stmt_decl_entry_bind( + int stmt: @stmt_decl ref, + int num: int ref, + int decl_entry: @element ref +); + +@functionorblock = @function | @stmt_block; + +blockscope( + unique int block: @stmt_block ref, + int enclosing: @functionorblock ref +); + +@jump = @stmt_goto | @stmt_break | @stmt_continue; + +@jumporlabel = @jump | @stmt_label | @literal; + +jumpinfo( + unique int id: @jumporlabel ref, + string str: string ref, + int target: @stmt ref +); + +preprocdirects( + unique int id: @preprocdirect, + int kind: int ref, + int location: @location_default ref +); +case @preprocdirect.kind of + 0 = @ppd_if +| 1 = @ppd_ifdef +| 2 = @ppd_ifndef +| 3 = @ppd_elif +| 4 = @ppd_else +| 5 = @ppd_endif +| 6 = @ppd_plain_include +| 7 = @ppd_define +| 8 = @ppd_undef +| 9 = @ppd_line +| 10 = @ppd_error +| 11 = @ppd_pragma +| 12 = @ppd_objc_import +| 13 = @ppd_include_next +| 18 = @ppd_warning +; + +@ppd_include = @ppd_plain_include | @ppd_objc_import | @ppd_include_next; + +@ppd_branch = @ppd_if | @ppd_ifdef | @ppd_ifndef | @ppd_elif; + +preprocpair( + int begin : @ppd_branch ref, + int elseelifend : @preprocdirect ref +); + +preproctrue(int branch : @ppd_branch ref); +preprocfalse(int branch : @ppd_branch ref); + +preproctext( + unique int id: @preprocdirect ref, + string head: string ref, + string body: string ref +); + +includes( + unique int id: @ppd_include ref, + int included: @file ref +); + +link_targets( + int id: @link_target, + int binary: @file ref +); + +link_parent( + int element : @element ref, + int link_target : @link_target ref +); + +/* XML Files */ + +xmlEncoding(unique int id: @file ref, string encoding: string ref); + +xmlDTDs( + unique int id: @xmldtd, + string root: string ref, + string publicId: string ref, + string systemId: string ref, + int fileid: @file ref +); + +xmlElements( + unique int id: @xmlelement, + string name: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int fileid: @file ref +); + +xmlAttrs( + unique int id: @xmlattribute, + int elementid: @xmlelement ref, + string name: string ref, + string value: string ref, + int idx: int ref, + int fileid: @file ref +); + +xmlNs( + int id: @xmlnamespace, + string prefixName: string ref, + string URI: string ref, + int fileid: @file ref +); + +xmlHasNs( + int elementId: @xmlnamespaceable ref, + int nsId: @xmlnamespace ref, + int fileid: @file ref +); + +xmlComments( + unique int id: @xmlcomment, + string text: string ref, + int parentid: @xmlparent ref, + int fileid: @file ref +); + +xmlChars( + unique int id: @xmlcharacters, + string text: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int isCDATA: int ref, + int fileid: @file ref +); + +@xmlparent = @file | @xmlelement; +@xmlnamespaceable = @xmlelement | @xmlattribute; + +xmllocations( + int xmlElement: @xmllocatable ref, + int location: @location_default ref +); + +@xmllocatable = @xmlcharacters + | @xmlelement + | @xmlcomment + | @xmlattribute + | @xmldtd + | @file + | @xmlnamespace; diff --git a/cpp/downgrades/abfce5c170f93e281948f7689ece373464fdaf87/semmlecode.cpp.dbscheme b/cpp/downgrades/abfce5c170f93e281948f7689ece373464fdaf87/semmlecode.cpp.dbscheme new file mode 100644 index 00000000000..aa7ff0ab32c --- /dev/null +++ b/cpp/downgrades/abfce5c170f93e281948f7689ece373464fdaf87/semmlecode.cpp.dbscheme @@ -0,0 +1,2250 @@ + +/** + * An invocation of the compiler. Note that more than one file may be + * compiled per invocation. For example, this command compiles three + * source files: + * + * gcc -c f1.c f2.c f3.c + * + * The `id` simply identifies the invocation, while `cwd` is the working + * directory from which the compiler was invoked. + */ +compilations( + /** + * An invocation of the compiler. Note that more than one file may + * be compiled per invocation. For example, this command compiles + * three source files: + * + * gcc -c f1.c f2.c f3.c + */ + unique int id : @compilation, + string cwd : string ref +); + +/** + * The arguments that were passed to the extractor for a compiler + * invocation. If `id` is for the compiler invocation + * + * gcc -c f1.c f2.c f3.c + * + * then typically there will be rows for + * + * num | arg + * --- | --- + * 0 | *path to extractor* + * 1 | `--mimic` + * 2 | `/usr/bin/gcc` + * 3 | `-c` + * 4 | f1.c + * 5 | f2.c + * 6 | f3.c + */ +#keyset[id, num] +compilation_args( + int id : @compilation ref, + int num : int ref, + string arg : string ref +); + +/** + * The source files that are compiled by a compiler invocation. + * If `id` is for the compiler invocation + * + * gcc -c f1.c f2.c f3.c + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | f1.c + * 1 | f2.c + * 2 | f3.c + * + * Note that even if those files `#include` headers, those headers + * do not appear as rows. + */ +#keyset[id, num] +compilation_compiling_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The time taken by the extractor for a compiler invocation. + * + * For each file `num`, there will be rows for + * + * kind | seconds + * ---- | --- + * 1 | CPU seconds used by the extractor frontend + * 2 | Elapsed seconds during the extractor frontend + * 3 | CPU seconds used by the extractor backend + * 4 | Elapsed seconds during the extractor backend + */ +#keyset[id, num, kind] +compilation_time( + int id : @compilation ref, + int num : int ref, + /* kind: + 1 = frontend_cpu_seconds + 2 = frontend_elapsed_seconds + 3 = extractor_cpu_seconds + 4 = extractor_elapsed_seconds + */ + int kind : int ref, + float seconds : float ref +); + +/** + * An error or warning generated by the extractor. + * The diagnostic message `diagnostic` was generated during compiler + * invocation `compilation`, and is the `file_number_diagnostic_number`th + * message generated while extracting the `file_number`th file of that + * invocation. + */ +#keyset[compilation, file_number, file_number_diagnostic_number] +diagnostic_for( + int diagnostic : @diagnostic ref, + int compilation : @compilation ref, + int file_number : int ref, + int file_number_diagnostic_number : int ref +); + +/** + * If extraction was successful, then `cpu_seconds` and + * `elapsed_seconds` are the CPU time and elapsed time (respectively) + * that extraction took for compiler invocation `id`. + */ +compilation_finished( + unique int id : @compilation ref, + float cpu_seconds : float ref, + float elapsed_seconds : float ref +); + + +/** + * External data, loaded from CSV files during snapshot creation. See + * [Tutorial: Incorporating external data](https://help.semmle.com/wiki/display/SD/Tutorial%3A+Incorporating+external+data) + * for more information. + */ +externalData( + int id : @externalDataElement, + string path : string ref, + int column: int ref, + string value : string ref +); + +/** + * The source location of the snapshot. + */ +sourceLocationPrefix(string prefix : string ref); + +/** + * Information about packages that provide code used during compilation. + * The `id` is just a unique identifier. + * The `namespace` is typically the name of the package manager that + * provided the package (e.g. "dpkg" or "yum"). + * The `package_name` is the name of the package, and `version` is its + * version (as a string). + */ +external_packages( + unique int id: @external_package, + string namespace : string ref, + string package_name : string ref, + string version : string ref +); + +/** + * Holds if File `fileid` was provided by package `package`. + */ +header_to_external_package( + int fileid : @file ref, + int package : @external_package ref +); + +/* + * Version history + */ + +svnentries( + unique int id : @svnentry, + string revision : string ref, + string author : string ref, + date revisionDate : date ref, + int changeSize : int ref +) + +svnaffectedfiles( + int id : @svnentry ref, + int file : @file ref, + string action : string ref +) + +svnentrymsg( + unique int id : @svnentry ref, + string message : string ref +) + +svnchurn( + int commit : @svnentry ref, + int file : @file ref, + int addedLines : int ref, + int deletedLines : int ref +) + +/* + * C++ dbscheme + */ + +extractor_version( + string codeql_version: string ref, + string frontend_version: string ref +) + +@location = @location_stmt | @location_expr | @location_default ; + +/** + * The location of an element that is not an expression or a statement. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_default( + /** The location of an element that is not an expression or a statement. */ + unique int id: @location_default, + int container: @container ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +/** + * The location of a statement. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_stmt( + /** The location of a statement. */ + unique int id: @location_stmt, + int container: @container ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +/** + * The location of an expression. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_expr( + /** The location of an expression. */ + unique int id: @location_expr, + int container: @container ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +/** An element for which line-count information is available. */ +@sourceline = @file | @function | @variable | @enumconstant | @xmllocatable; + +numlines( + int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: int ref +); + +diagnostics( + unique int id: @diagnostic, + int severity: int ref, + string error_tag: string ref, + string error_message: string ref, + string full_error_message: string ref, + int location: @location_default ref +); + +files( + unique int id: @file, + string name: string ref +); + +folders( + unique int id: @folder, + string name: string ref +); + +@container = @folder | @file + +containerparent( + int parent: @container ref, + unique int child: @container ref +); + +fileannotations( + int id: @file ref, + int kind: int ref, + string name: string ref, + string value: string ref +); + +inmacroexpansion( + int id: @element ref, + int inv: @macroinvocation ref +); + +affectedbymacroexpansion( + int id: @element ref, + int inv: @macroinvocation ref +); + +case @macroinvocation.kind of + 1 = @macro_expansion +| 2 = @other_macro_reference +; + +macroinvocations( + unique int id: @macroinvocation, + int macro_id: @ppd_define ref, + int location: @location_default ref, + int kind: int ref +); + +macroparent( + unique int id: @macroinvocation ref, + int parent_id: @macroinvocation ref +); + +// a macroinvocation may be part of another location +// the way to find a constant expression that uses a macro +// is thus to find a constant expression that has a location +// to which a macro invocation is bound +macrolocationbind( + int id: @macroinvocation ref, + int location: @location ref +); + +#keyset[invocation, argument_index] +macro_argument_unexpanded( + int invocation: @macroinvocation ref, + int argument_index: int ref, + string text: string ref +); + +#keyset[invocation, argument_index] +macro_argument_expanded( + int invocation: @macroinvocation ref, + int argument_index: int ref, + string text: string ref +); + +/* +case @function.kind of + 1 = @normal_function +| 2 = @constructor +| 3 = @destructor +| 4 = @conversion_function +| 5 = @operator +| 6 = @builtin_function // GCC built-in functions, e.g. __builtin___memcpy_chk +| 7 = @user_defined_literal +| 8 = @deduction_guide +; +*/ + +functions( + unique int id: @function, + string name: string ref, + int kind: int ref +); + +function_entry_point( + int id: @function ref, + unique int entry_point: @stmt ref +); + +function_return_type( + int id: @function ref, + int return_type: @type ref +); + +/** + * If `function` is a coroutine, then this gives the `std::experimental::resumable_traits` + * instance associated with it, and the variables representing the `handle` and `promise` + * for it. + */ +coroutine( + unique int function: @function ref, + int traits: @type ref, + int handle: @variable ref, + int promise: @variable ref +); + +/** The `new` function used for allocating the coroutine state, if any. */ +coroutine_new( + unique int function: @function ref, + int new: @function ref +); + +/** The `delete` function used for deallocating the coroutine state, if any. */ +coroutine_delete( + unique int function: @function ref, + int delete: @function ref +); + +purefunctions(unique int id: @function ref); + +function_deleted(unique int id: @function ref); + +function_defaulted(unique int id: @function ref); + +function_prototyped(unique int id: @function ref) + +member_function_this_type( + unique int id: @function ref, + int this_type: @type ref +); + +#keyset[id, type_id] +fun_decls( + int id: @fun_decl, + int function: @function ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +fun_def(unique int id: @fun_decl ref); +fun_specialized(unique int id: @fun_decl ref); +fun_implicit(unique int id: @fun_decl ref); +fun_decl_specifiers( + int id: @fun_decl ref, + string name: string ref +) +#keyset[fun_decl, index] +fun_decl_throws( + int fun_decl: @fun_decl ref, + int index: int ref, + int type_id: @type ref +); +/* an empty throw specification is different from none */ +fun_decl_empty_throws(unique int fun_decl: @fun_decl ref); +fun_decl_noexcept( + int fun_decl: @fun_decl ref, + int constant: @expr ref +); +fun_decl_empty_noexcept(int fun_decl: @fun_decl ref); +fun_decl_typedef_type( + unique int fun_decl: @fun_decl ref, + int typedeftype_id: @usertype ref +); + +param_decl_bind( + unique int id: @var_decl ref, + int index: int ref, + int fun_decl: @fun_decl ref +); + +#keyset[id, type_id] +var_decls( + int id: @var_decl, + int variable: @variable ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +var_def(unique int id: @var_decl ref); +var_decl_specifiers( + int id: @var_decl ref, + string name: string ref +) +is_structured_binding(unique int id: @variable ref); + +type_decls( + unique int id: @type_decl, + int type_id: @type ref, + int location: @location_default ref +); +type_def(unique int id: @type_decl ref); +type_decl_top( + unique int type_decl: @type_decl ref +); + +namespace_decls( + unique int id: @namespace_decl, + int namespace_id: @namespace ref, + int location: @location_default ref, + int bodylocation: @location_default ref +); + +usings( + unique int id: @using, + int element_id: @element ref, + int location: @location_default ref +); + +/** The element which contains the `using` declaration. */ +using_container( + int parent: @element ref, + int child: @using ref +); + +static_asserts( + unique int id: @static_assert, + int condition : @expr ref, + string message : string ref, + int location: @location_default ref, + int enclosing : @element ref +); + +// each function has an ordered list of parameters +#keyset[id, type_id] +#keyset[function, index, type_id] +params( + int id: @parameter, + int function: @functionorblock ref, + int index: int ref, + int type_id: @type ref +); + +overrides( + int new: @function ref, + int old: @function ref +); + +#keyset[id, type_id] +membervariables( + int id: @membervariable, + int type_id: @type ref, + string name: string ref +); + +#keyset[id, type_id] +globalvariables( + int id: @globalvariable, + int type_id: @type ref, + string name: string ref +); + +#keyset[id, type_id] +localvariables( + int id: @localvariable, + int type_id: @type ref, + string name: string ref +); + +autoderivation( + unique int var: @variable ref, + int derivation_type: @type ref +); + +orphaned_variables( + int var: @localvariable ref, + int function: @function ref +) + +enumconstants( + unique int id: @enumconstant, + int parent: @usertype ref, + int index: int ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); + +@variable = @localscopevariable | @globalvariable | @membervariable; + +@localscopevariable = @localvariable | @parameter; + +/** + * Built-in types are the fundamental types, e.g., integral, floating, and void. + */ +case @builtintype.kind of + 1 = @errortype +| 2 = @unknowntype +| 3 = @void +| 4 = @boolean +| 5 = @char +| 6 = @unsigned_char +| 7 = @signed_char +| 8 = @short +| 9 = @unsigned_short +| 10 = @signed_short +| 11 = @int +| 12 = @unsigned_int +| 13 = @signed_int +| 14 = @long +| 15 = @unsigned_long +| 16 = @signed_long +| 17 = @long_long +| 18 = @unsigned_long_long +| 19 = @signed_long_long +// ... 20 Microsoft-specific __int8 +// ... 21 Microsoft-specific __int16 +// ... 22 Microsoft-specific __int32 +// ... 23 Microsoft-specific __int64 +| 24 = @float +| 25 = @double +| 26 = @long_double +| 27 = @complex_float // C99-specific _Complex float +| 28 = @complex_double // C99-specific _Complex double +| 29 = @complex_long_double // C99-specific _Complex long double +| 30 = @imaginary_float // C99-specific _Imaginary float +| 31 = @imaginary_double // C99-specific _Imaginary double +| 32 = @imaginary_long_double // C99-specific _Imaginary long double +| 33 = @wchar_t // Microsoft-specific +| 34 = @decltype_nullptr // C++11 +| 35 = @int128 // __int128 +| 36 = @unsigned_int128 // unsigned __int128 +| 37 = @signed_int128 // signed __int128 +| 38 = @float128 // __float128 +| 39 = @complex_float128 // _Complex __float128 +| 40 = @decimal32 // _Decimal32 +| 41 = @decimal64 // _Decimal64 +| 42 = @decimal128 // _Decimal128 +| 43 = @char16_t +| 44 = @char32_t +| 45 = @std_float32 // _Float32 +| 46 = @float32x // _Float32x +| 47 = @std_float64 // _Float64 +| 48 = @float64x // _Float64x +| 49 = @std_float128 // _Float128 +// ... 50 _Float128x +| 51 = @char8_t +| 52 = @float16 // _Float16 +| 53 = @complex_float16 // _Complex _Float16 +| 54 = @fp16 // __fp16 +| 55 = @std_bfloat16 // __bf16 +| 56 = @std_float16 // std::float16_t +| 57 = @complex_std_float32 // _Complex _Float32 +| 58 = @complex_float32x // _Complex _Float32x +| 59 = @complex_std_float64 // _Complex _Float64 +| 60 = @complex_float64x // _Complex _Float64x +| 61 = @complex_std_float128 // _Complex _Float128 +; + +builtintypes( + unique int id: @builtintype, + string name: string ref, + int kind: int ref, + int size: int ref, + int sign: int ref, + int alignment: int ref +); + +/** + * Derived types are types that are directly derived from existing types and + * point to, refer to, transform type data to return a new type. + */ +case @derivedtype.kind of + 1 = @pointer +| 2 = @reference +| 3 = @type_with_specifiers +| 4 = @array +| 5 = @gnu_vector +| 6 = @routineptr +| 7 = @routinereference +| 8 = @rvalue_reference // C++11 +// ... 9 type_conforming_to_protocols deprecated +| 10 = @block +; + +derivedtypes( + unique int id: @derivedtype, + string name: string ref, + int kind: int ref, + int type_id: @type ref +); + +pointerishsize(unique int id: @derivedtype ref, + int size: int ref, + int alignment: int ref); + +arraysizes( + unique int id: @derivedtype ref, + int num_elements: int ref, + int bytesize: int ref, + int alignment: int ref +); + +typedefbase( + unique int id: @usertype ref, + int type_id: @type ref +); + +/** + * An instance of the C++11 `decltype` operator. For example: + * ``` + * int a; + * decltype(1+a) b; + * ``` + * Here `expr` is `1+a`. + * + * Sometimes an additional pair of parentheses around the expression + * would change the semantics of this decltype, e.g. + * ``` + * struct A { double x; }; + * const A* a = new A(); + * decltype( a->x ); // type is double + * decltype((a->x)); // type is const double& + * ``` + * (Please consult the C++11 standard for more details). + * `parentheses_would_change_meaning` is `true` iff that is the case. + */ +#keyset[id, expr] +decltypes( + int id: @decltype, + int expr: @expr ref, + int base_type: @type ref, + boolean parentheses_would_change_meaning: boolean ref +); + +/* +case @usertype.kind of + 1 = @struct +| 2 = @class +| 3 = @union +| 4 = @enum +| 5 = @typedef // classic C: typedef typedef type name +| 6 = @template +| 7 = @template_parameter +| 8 = @template_template_parameter +| 9 = @proxy_class // a proxy class associated with a template parameter +// ... 10 objc_class deprecated +// ... 11 objc_protocol deprecated +// ... 12 objc_category deprecated +| 13 = @scoped_enum +| 14 = @using_alias // a using name = type style typedef +; +*/ + +usertypes( + unique int id: @usertype, + string name: string ref, + int kind: int ref +); + +usertypesize( + unique int id: @usertype ref, + int size: int ref, + int alignment: int ref +); + +usertype_final(unique int id: @usertype ref); + +usertype_uuid( + unique int id: @usertype ref, + string uuid: string ref +); + +mangled_name( + unique int id: @declaration ref, + int mangled_name : @mangledname, + boolean is_complete: boolean ref +); + +is_pod_class(unique int id: @usertype ref); +is_standard_layout_class(unique int id: @usertype ref); + +is_complete(unique int id: @usertype ref); + +is_class_template(unique int id: @usertype ref); +class_instantiation( + int to: @usertype ref, + int from: @usertype ref +); +class_template_argument( + int type_id: @usertype ref, + int index: int ref, + int arg_type: @type ref +); +class_template_argument_value( + int type_id: @usertype ref, + int index: int ref, + int arg_value: @expr ref +); + +is_proxy_class_for( + unique int id: @usertype ref, + unique int templ_param_id: @usertype ref +); + +type_mentions( + unique int id: @type_mention, + int type_id: @type ref, + int location: @location ref, + // a_symbol_reference_kind from the frontend. + int kind: int ref +); + +is_function_template(unique int id: @function ref); +function_instantiation( + unique int to: @function ref, + int from: @function ref +); +function_template_argument( + int function_id: @function ref, + int index: int ref, + int arg_type: @type ref +); +function_template_argument_value( + int function_id: @function ref, + int index: int ref, + int arg_value: @expr ref +); + +is_variable_template(unique int id: @variable ref); +variable_instantiation( + unique int to: @variable ref, + int from: @variable ref +); +variable_template_argument( + int variable_id: @variable ref, + int index: int ref, + int arg_type: @type ref +); +variable_template_argument_value( + int variable_id: @variable ref, + int index: int ref, + int arg_value: @expr ref +); + +/* + Fixed point types + precision(1) = short, precision(2) = default, precision(3) = long + is_unsigned(1) = unsigned is_unsigned(2) = signed + is_fract_type(1) = declared with _Fract + saturating(1) = declared with _Sat +*/ +/* TODO +fixedpointtypes( + unique int id: @fixedpointtype, + int precision: int ref, + int is_unsigned: int ref, + int is_fract_type: int ref, + int saturating: int ref); +*/ + +routinetypes( + unique int id: @routinetype, + int return_type: @type ref +); + +routinetypeargs( + int routine: @routinetype ref, + int index: int ref, + int type_id: @type ref +); + +ptrtomembers( + unique int id: @ptrtomember, + int type_id: @type ref, + int class_id: @type ref +); + +/* + specifiers for types, functions, and variables + + "public", + "protected", + "private", + + "const", + "volatile", + "static", + + "pure", + "virtual", + "sealed", // Microsoft + "__interface", // Microsoft + "inline", + "explicit", + + "near", // near far extension + "far", // near far extension + "__ptr32", // Microsoft + "__ptr64", // Microsoft + "__sptr", // Microsoft + "__uptr", // Microsoft + "dllimport", // Microsoft + "dllexport", // Microsoft + "thread", // Microsoft + "naked", // Microsoft + "microsoft_inline", // Microsoft + "forceinline", // Microsoft + "selectany", // Microsoft + "nothrow", // Microsoft + "novtable", // Microsoft + "noreturn", // Microsoft + "noinline", // Microsoft + "noalias", // Microsoft + "restrict", // Microsoft +*/ + +specifiers( + unique int id: @specifier, + unique string str: string ref +); + +typespecifiers( + int type_id: @type ref, + int spec_id: @specifier ref +); + +funspecifiers( + int func_id: @function ref, + int spec_id: @specifier ref +); + +varspecifiers( + int var_id: @accessible ref, + int spec_id: @specifier ref +); + +attributes( + unique int id: @attribute, + int kind: int ref, + string name: string ref, + string name_space: string ref, + int location: @location_default ref +); + +case @attribute.kind of + 0 = @gnuattribute +| 1 = @stdattribute +| 2 = @declspec +| 3 = @msattribute +| 4 = @alignas +// ... 5 @objc_propertyattribute deprecated +; + +attribute_args( + unique int id: @attribute_arg, + int kind: int ref, + int attribute: @attribute ref, + int index: int ref, + int location: @location_default ref +); + +case @attribute_arg.kind of + 0 = @attribute_arg_empty +| 1 = @attribute_arg_token +| 2 = @attribute_arg_constant +| 3 = @attribute_arg_type +| 4 = @attribute_arg_constant_expr +| 5 = @attribute_arg_expr +; + +attribute_arg_value( + unique int arg: @attribute_arg ref, + string value: string ref +); +attribute_arg_type( + unique int arg: @attribute_arg ref, + int type_id: @type ref +); +attribute_arg_constant( + unique int arg: @attribute_arg ref, + int constant: @expr ref +) +attribute_arg_expr( + unique int arg: @attribute_arg ref, + int expr: @expr ref +) +attribute_arg_name( + unique int arg: @attribute_arg ref, + string name: string ref +); + +typeattributes( + int type_id: @type ref, + int spec_id: @attribute ref +); + +funcattributes( + int func_id: @function ref, + int spec_id: @attribute ref +); + +varattributes( + int var_id: @accessible ref, + int spec_id: @attribute ref +); + +stmtattributes( + int stmt_id: @stmt ref, + int spec_id: @attribute ref +); + +@type = @builtintype + | @derivedtype + | @usertype + /* TODO | @fixedpointtype */ + | @routinetype + | @ptrtomember + | @decltype; + +unspecifiedtype( + unique int type_id: @type ref, + int unspecified_type_id: @type ref +); + +member( + int parent: @type ref, + int index: int ref, + int child: @member ref +); + +@enclosingfunction_child = @usertype | @variable | @namespace + +enclosingfunction( + unique int child: @enclosingfunction_child ref, + int parent: @function ref +); + +derivations( + unique int derivation: @derivation, + int sub: @type ref, + int index: int ref, + int super: @type ref, + int location: @location_default ref +); + +derspecifiers( + int der_id: @derivation ref, + int spec_id: @specifier ref +); + +/** + * Contains the byte offset of the base class subobject within the derived + * class. Only holds for non-virtual base classes, but see table + * `virtual_base_offsets` for offsets of virtual base class subobjects. + */ +direct_base_offsets( + unique int der_id: @derivation ref, + int offset: int ref +); + +/** + * Contains the byte offset of the virtual base class subobject for class + * `super` within a most-derived object of class `sub`. `super` can be either a + * direct or indirect base class. + */ +#keyset[sub, super] +virtual_base_offsets( + int sub: @usertype ref, + int super: @usertype ref, + int offset: int ref +); + +frienddecls( + unique int id: @frienddecl, + int type_id: @type ref, + int decl_id: @declaration ref, + int location: @location_default ref +); + +@declaredtype = @usertype ; + +@declaration = @function + | @declaredtype + | @variable + | @enumconstant + | @frienddecl; + +@member = @membervariable + | @function + | @declaredtype + | @enumconstant; + +@locatable = @diagnostic + | @declaration + | @ppd_include + | @ppd_define + | @macroinvocation + /*| @funcall*/ + | @xmllocatable + | @attribute + | @attribute_arg; + +@namedscope = @namespace | @usertype; + +@element = @locatable + | @file + | @folder + | @specifier + | @type + | @expr + | @namespace + | @initialiser + | @stmt + | @derivation + | @comment + | @preprocdirect + | @fun_decl + | @var_decl + | @type_decl + | @namespace_decl + | @using + | @namequalifier + | @specialnamequalifyingelement + | @static_assert + | @type_mention + | @lambdacapture; + +@exprparent = @element; + +comments( + unique int id: @comment, + string contents: string ref, + int location: @location_default ref +); + +commentbinding( + int id: @comment ref, + int element: @element ref +); + +exprconv( + int converted: @expr ref, + unique int conversion: @expr ref +); + +compgenerated(unique int id: @element ref); + +/** + * `destructor_call` destructs the `i`'th entity that should be + * destructed following `element`. Note that entities should be + * destructed in reverse construction order, so for a given `element` + * these should be called from highest to lowest `i`. + */ +#keyset[element, destructor_call] +#keyset[element, i] +synthetic_destructor_call( + int element: @element ref, + int i: int ref, + int destructor_call: @routineexpr ref +); + +namespaces( + unique int id: @namespace, + string name: string ref +); + +namespace_inline( + unique int id: @namespace ref +); + +namespacembrs( + int parentid: @namespace ref, + unique int memberid: @namespacembr ref +); + +@namespacembr = @declaration | @namespace; + +exprparents( + int expr_id: @expr ref, + int child_index: int ref, + int parent_id: @exprparent ref +); + +expr_isload(unique int expr_id: @expr ref); + +@cast = @c_style_cast + | @const_cast + | @dynamic_cast + | @reinterpret_cast + | @static_cast + ; + +/* +case @conversion.kind of + 0 = @simple_conversion // a numeric conversion, qualification conversion, or a reinterpret_cast +| 1 = @bool_conversion // conversion to 'bool' +| 2 = @base_class_conversion // a derived-to-base conversion +| 3 = @derived_class_conversion // a base-to-derived conversion +| 4 = @pm_base_class_conversion // a derived-to-base conversion of a pointer to member +| 5 = @pm_derived_class_conversion // a base-to-derived conversion of a pointer to member +| 6 = @glvalue_adjust // an adjustment of the type of a glvalue +| 7 = @prvalue_adjust // an adjustment of the type of a prvalue +; +*/ +/** + * Describes the semantics represented by a cast expression. This is largely + * independent of the source syntax of the cast, so it is separate from the + * regular expression kind. + */ +conversionkinds( + unique int expr_id: @cast ref, + int kind: int ref +); + +@conversion = @cast + | @array_to_pointer + | @parexpr + | @reference_to + | @ref_indirect + | @temp_init + ; + +/* +case @funbindexpr.kind of + 0 = @normal_call // a normal call +| 1 = @virtual_call // a virtual call +| 2 = @adl_call // a call whose target is only found by ADL +; +*/ +iscall( + unique int caller: @funbindexpr ref, + int kind: int ref +); + +numtemplatearguments( + unique int expr_id: @expr ref, + int num: int ref +); + +specialnamequalifyingelements( + unique int id: @specialnamequalifyingelement, + unique string name: string ref +); + +@namequalifiableelement = @expr | @namequalifier; +@namequalifyingelement = @namespace + | @specialnamequalifyingelement + | @usertype; + +namequalifiers( + unique int id: @namequalifier, + unique int qualifiableelement: @namequalifiableelement ref, + int qualifyingelement: @namequalifyingelement ref, + int location: @location_default ref +); + +varbind( + int expr: @varbindexpr ref, + int var: @accessible ref +); + +funbind( + int expr: @funbindexpr ref, + int fun: @function ref +); + +@any_new_expr = @new_expr + | @new_array_expr; + +@new_or_delete_expr = @any_new_expr + | @delete_expr + | @delete_array_expr; + +@prefix_crement_expr = @preincrexpr | @predecrexpr; + +@postfix_crement_expr = @postincrexpr | @postdecrexpr; + +@increment_expr = @preincrexpr | @postincrexpr; + +@decrement_expr = @predecrexpr | @postdecrexpr; + +@crement_expr = @increment_expr | @decrement_expr; + +@un_arith_op_expr = @arithnegexpr + | @unaryplusexpr + | @conjugation + | @realpartexpr + | @imagpartexpr + | @crement_expr + ; + +@un_bitwise_op_expr = @complementexpr; + +@un_log_op_expr = @notexpr; + +@un_op_expr = @address_of + | @indirect + | @un_arith_op_expr + | @un_bitwise_op_expr + | @builtinaddressof + | @vec_fill + | @un_log_op_expr + | @co_await + | @co_yield + ; + +@bin_log_op_expr = @andlogicalexpr | @orlogicalexpr; + +@cmp_op_expr = @eq_op_expr | @rel_op_expr; + +@eq_op_expr = @eqexpr | @neexpr; + +@rel_op_expr = @gtexpr + | @ltexpr + | @geexpr + | @leexpr + | @spaceshipexpr + ; + +@bin_bitwise_op_expr = @lshiftexpr + | @rshiftexpr + | @andexpr + | @orexpr + | @xorexpr + ; + +@p_arith_op_expr = @paddexpr + | @psubexpr + | @pdiffexpr + ; + +@bin_arith_op_expr = @addexpr + | @subexpr + | @mulexpr + | @divexpr + | @remexpr + | @jmulexpr + | @jdivexpr + | @fjaddexpr + | @jfaddexpr + | @fjsubexpr + | @jfsubexpr + | @minexpr + | @maxexpr + | @p_arith_op_expr + ; + +@bin_op_expr = @bin_arith_op_expr + | @bin_bitwise_op_expr + | @cmp_op_expr + | @bin_log_op_expr + ; + +@op_expr = @un_op_expr + | @bin_op_expr + | @assign_expr + | @conditionalexpr + ; + +@assign_arith_expr = @assignaddexpr + | @assignsubexpr + | @assignmulexpr + | @assigndivexpr + | @assignremexpr + ; + +@assign_bitwise_expr = @assignandexpr + | @assignorexpr + | @assignxorexpr + | @assignlshiftexpr + | @assignrshiftexpr + ; + +@assign_pointer_expr = @assignpaddexpr + | @assignpsubexpr + ; + +@assign_op_expr = @assign_arith_expr + | @assign_bitwise_expr + | @assign_pointer_expr + ; + +@assign_expr = @assignexpr | @assign_op_expr | @blockassignexpr + +/* + case @allocator.form of + 0 = plain + | 1 = alignment + ; +*/ + +/** + * The allocator function associated with a `new` or `new[]` expression. + * The `form` column specified whether the allocation call contains an alignment + * argument. + */ +expr_allocator( + unique int expr: @any_new_expr ref, + int func: @function ref, + int form: int ref +); + +/* + case @deallocator.form of + 0 = plain + | 1 = size + | 2 = alignment + | 3 = size_and_alignment + ; +*/ + +/** + * The deallocator function associated with a `delete`, `delete[]`, `new`, or + * `new[]` expression. For a `new` or `new[]` expression, the deallocator is the + * one used to free memory if the initialization throws an exception. + * The `form` column specifies whether the deallocation call contains a size + * argument, and alignment argument, or both. + */ +expr_deallocator( + unique int expr: @new_or_delete_expr ref, + int func: @function ref, + int form: int ref +); + +/** + * Holds if the `@conditionalexpr` is of the two operand form + * `guard ? : false`. + */ +expr_cond_two_operand( + unique int cond: @conditionalexpr ref +); + +/** + * The guard of `@conditionalexpr` `guard ? true : false` + */ +expr_cond_guard( + unique int cond: @conditionalexpr ref, + int guard: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` holds. For the two operand form + * `guard ?: false` consider using `expr_cond_guard` instead. + */ +expr_cond_true( + unique int cond: @conditionalexpr ref, + int true: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` does not hold. + */ +expr_cond_false( + unique int cond: @conditionalexpr ref, + int false: @expr ref +); + +/** A string representation of the value. */ +values( + unique int id: @value, + string str: string ref +); + +/** The actual text in the source code for the value, if any. */ +valuetext( + unique int id: @value ref, + string text: string ref +); + +valuebind( + int val: @value ref, + unique int expr: @expr ref +); + +fieldoffsets( + unique int id: @variable ref, + int byteoffset: int ref, + int bitoffset: int ref +); + +bitfield( + unique int id: @variable ref, + int bits: int ref, + int declared_bits: int ref +); + +/* TODO +memberprefix( + int member: @expr ref, + int prefix: @expr ref +); +*/ + +/* + kind(1) = mbrcallexpr + kind(2) = mbrptrcallexpr + kind(3) = mbrptrmbrcallexpr + kind(4) = ptrmbrptrmbrcallexpr + kind(5) = mbrreadexpr // x.y + kind(6) = mbrptrreadexpr // p->y + kind(7) = mbrptrmbrreadexpr // x.*pm + kind(8) = mbrptrmbrptrreadexpr // x->*pm + kind(9) = staticmbrreadexpr // static x.y + kind(10) = staticmbrptrreadexpr // static p->y +*/ +/* TODO +memberaccess( + int member: @expr ref, + int kind: int ref +); +*/ + +initialisers( + unique int init: @initialiser, + int var: @accessible ref, + unique int expr: @expr ref, + int location: @location_expr ref +); + +braced_initialisers( + int init: @initialiser ref +); + +/** + * An ancestor for the expression, for cases in which we cannot + * otherwise find the expression's parent. + */ +expr_ancestor( + int exp: @expr ref, + int ancestor: @element ref +); + +exprs( + unique int id: @expr, + int kind: int ref, + int location: @location_expr ref +); + +expr_reuse( + int reuse: @expr ref, + int original: @expr ref +) + +/* + case @value.category of + 1 = prval + | 2 = xval + | 3 = lval + ; +*/ +expr_types( + int id: @expr ref, + int typeid: @type ref, + int value_category: int ref +); + +case @expr.kind of + 1 = @errorexpr +| 2 = @address_of // & AddressOfExpr +| 3 = @reference_to // ReferenceToExpr (implicit?) +| 4 = @indirect // * PointerDereferenceExpr +| 5 = @ref_indirect // ReferenceDereferenceExpr (implicit?) +// ... +| 8 = @array_to_pointer // (???) +| 9 = @vacuous_destructor_call // VacuousDestructorCall +// ... +| 11 = @assume // Microsoft +| 12 = @parexpr +| 13 = @arithnegexpr +| 14 = @unaryplusexpr +| 15 = @complementexpr +| 16 = @notexpr +| 17 = @conjugation // GNU ~ operator +| 18 = @realpartexpr // GNU __real +| 19 = @imagpartexpr // GNU __imag +| 20 = @postincrexpr +| 21 = @postdecrexpr +| 22 = @preincrexpr +| 23 = @predecrexpr +| 24 = @conditionalexpr +| 25 = @addexpr +| 26 = @subexpr +| 27 = @mulexpr +| 28 = @divexpr +| 29 = @remexpr +| 30 = @jmulexpr // C99 mul imaginary +| 31 = @jdivexpr // C99 div imaginary +| 32 = @fjaddexpr // C99 add real + imaginary +| 33 = @jfaddexpr // C99 add imaginary + real +| 34 = @fjsubexpr // C99 sub real - imaginary +| 35 = @jfsubexpr // C99 sub imaginary - real +| 36 = @paddexpr // pointer add (pointer + int or int + pointer) +| 37 = @psubexpr // pointer sub (pointer - integer) +| 38 = @pdiffexpr // difference between two pointers +| 39 = @lshiftexpr +| 40 = @rshiftexpr +| 41 = @andexpr +| 42 = @orexpr +| 43 = @xorexpr +| 44 = @eqexpr +| 45 = @neexpr +| 46 = @gtexpr +| 47 = @ltexpr +| 48 = @geexpr +| 49 = @leexpr +| 50 = @minexpr // GNU minimum +| 51 = @maxexpr // GNU maximum +| 52 = @assignexpr +| 53 = @assignaddexpr +| 54 = @assignsubexpr +| 55 = @assignmulexpr +| 56 = @assigndivexpr +| 57 = @assignremexpr +| 58 = @assignlshiftexpr +| 59 = @assignrshiftexpr +| 60 = @assignandexpr +| 61 = @assignorexpr +| 62 = @assignxorexpr +| 63 = @assignpaddexpr // assign pointer add +| 64 = @assignpsubexpr // assign pointer sub +| 65 = @andlogicalexpr +| 66 = @orlogicalexpr +| 67 = @commaexpr +| 68 = @subscriptexpr // access to member of an array, e.g., a[5] +// ... 69 @objc_subscriptexpr deprecated +// ... 70 @cmdaccess deprecated +// ... +| 73 = @virtfunptrexpr +| 74 = @callexpr +// ... 75 @msgexpr_normal deprecated +// ... 76 @msgexpr_super deprecated +// ... 77 @atselectorexpr deprecated +// ... 78 @atprotocolexpr deprecated +| 79 = @vastartexpr +| 80 = @vaargexpr +| 81 = @vaendexpr +| 82 = @vacopyexpr +// ... 83 @atencodeexpr deprecated +| 84 = @varaccess +| 85 = @thisaccess +// ... 86 @objc_box_expr deprecated +| 87 = @new_expr +| 88 = @delete_expr +| 89 = @throw_expr +| 90 = @condition_decl // a variable declared in a condition, e.g., if(int x = y > 2) +| 91 = @braced_init_list +| 92 = @type_id +| 93 = @runtime_sizeof +| 94 = @runtime_alignof +| 95 = @sizeof_pack +| 96 = @expr_stmt // GNU extension +| 97 = @routineexpr +| 98 = @type_operand // used to access a type in certain contexts (haven't found any examples yet....) +| 99 = @offsetofexpr // offsetof ::= type and field +| 100 = @hasassignexpr // __has_assign ::= type +| 101 = @hascopyexpr // __has_copy ::= type +| 102 = @hasnothrowassign // __has_nothrow_assign ::= type +| 103 = @hasnothrowconstr // __has_nothrow_constructor ::= type +| 104 = @hasnothrowcopy // __has_nothrow_copy ::= type +| 105 = @hastrivialassign // __has_trivial_assign ::= type +| 106 = @hastrivialconstr // __has_trivial_constructor ::= type +| 107 = @hastrivialcopy // __has_trivial_copy ::= type +| 108 = @hasuserdestr // __has_user_destructor ::= type +| 109 = @hasvirtualdestr // __has_virtual_destructor ::= type +| 110 = @isabstractexpr // __is_abstract ::= type +| 111 = @isbaseofexpr // __is_base_of ::= type type +| 112 = @isclassexpr // __is_class ::= type +| 113 = @isconvtoexpr // __is_convertible_to ::= type type +| 114 = @isemptyexpr // __is_empty ::= type +| 115 = @isenumexpr // __is_enum ::= type +| 116 = @ispodexpr // __is_pod ::= type +| 117 = @ispolyexpr // __is_polymorphic ::= type +| 118 = @isunionexpr // __is_union ::= type +| 119 = @typescompexpr // GNU __builtin_types_compatible ::= type type +| 120 = @intaddrexpr // frontend internal builtin, used to implement offsetof +// ... +| 122 = @hastrivialdestructor // __has_trivial_destructor ::= type +| 123 = @literal +| 124 = @uuidof +| 127 = @aggregateliteral +| 128 = @delete_array_expr +| 129 = @new_array_expr +// ... 130 @objc_array_literal deprecated +// ... 131 @objc_dictionary_literal deprecated +| 132 = @foldexpr +// ... +| 200 = @ctordirectinit +| 201 = @ctorvirtualinit +| 202 = @ctorfieldinit +| 203 = @ctordelegatinginit +| 204 = @dtordirectdestruct +| 205 = @dtorvirtualdestruct +| 206 = @dtorfielddestruct +// ... +| 210 = @static_cast +| 211 = @reinterpret_cast +| 212 = @const_cast +| 213 = @dynamic_cast +| 214 = @c_style_cast +| 215 = @lambdaexpr +| 216 = @param_ref +| 217 = @noopexpr +// ... +| 294 = @istriviallyconstructibleexpr +| 295 = @isdestructibleexpr +| 296 = @isnothrowdestructibleexpr +| 297 = @istriviallydestructibleexpr +| 298 = @istriviallyassignableexpr +| 299 = @isnothrowassignableexpr +| 300 = @istrivialexpr +| 301 = @isstandardlayoutexpr +| 302 = @istriviallycopyableexpr +| 303 = @isliteraltypeexpr +| 304 = @hastrivialmoveconstructorexpr +| 305 = @hastrivialmoveassignexpr +| 306 = @hasnothrowmoveassignexpr +| 307 = @isconstructibleexpr +| 308 = @isnothrowconstructibleexpr +| 309 = @hasfinalizerexpr +| 310 = @isdelegateexpr +| 311 = @isinterfaceclassexpr +| 312 = @isrefarrayexpr +| 313 = @isrefclassexpr +| 314 = @issealedexpr +| 315 = @issimplevalueclassexpr +| 316 = @isvalueclassexpr +| 317 = @isfinalexpr +| 319 = @noexceptexpr +| 320 = @builtinshufflevector +| 321 = @builtinchooseexpr +| 322 = @builtinaddressof +| 323 = @vec_fill +| 324 = @builtinconvertvector +| 325 = @builtincomplex +| 326 = @spaceshipexpr +| 327 = @co_await +| 328 = @co_yield +| 329 = @temp_init +| 330 = @isassignable +| 331 = @isaggregate +| 332 = @hasuniqueobjectrepresentations +| 333 = @builtinbitcast +| 334 = @builtinshuffle +| 335 = @blockassignexpr +| 336 = @issame +| 337 = @isfunction +| 338 = @islayoutcompatible +| 339 = @ispointerinterconvertiblebaseof +| 340 = @isarray +| 341 = @arrayrank +| 342 = @arrayextent +| 343 = @isarithmetic +| 344 = @iscompletetype +| 345 = @iscompound +| 346 = @isconst +| 347 = @isfloatingpoint +| 348 = @isfundamental +| 349 = @isintegral +| 350 = @islvaluereference +| 351 = @ismemberfunctionpointer +| 352 = @ismemberobjectpointer +| 353 = @ismemberpointer +| 354 = @isobject +| 355 = @ispointer +| 356 = @isreference +| 357 = @isrvaluereference +| 358 = @isscalar +| 359 = @issigned +| 360 = @isunsigned +| 361 = @isvoid +| 362 = @isvolatile +| 363 = @reuseexpr +; + +@var_args_expr = @vastartexpr + | @vaendexpr + | @vaargexpr + | @vacopyexpr + ; + +@builtin_op = @var_args_expr + | @noopexpr + | @offsetofexpr + | @intaddrexpr + | @hasassignexpr + | @hascopyexpr + | @hasnothrowassign + | @hasnothrowconstr + | @hasnothrowcopy + | @hastrivialassign + | @hastrivialconstr + | @hastrivialcopy + | @hastrivialdestructor + | @hasuserdestr + | @hasvirtualdestr + | @isabstractexpr + | @isbaseofexpr + | @isclassexpr + | @isconvtoexpr + | @isemptyexpr + | @isenumexpr + | @ispodexpr + | @ispolyexpr + | @isunionexpr + | @typescompexpr + | @builtinshufflevector + | @builtinconvertvector + | @builtinaddressof + | @istriviallyconstructibleexpr + | @isdestructibleexpr + | @isnothrowdestructibleexpr + | @istriviallydestructibleexpr + | @istriviallyassignableexpr + | @isnothrowassignableexpr + | @istrivialexpr + | @isstandardlayoutexpr + | @istriviallycopyableexpr + | @isliteraltypeexpr + | @hastrivialmoveconstructorexpr + | @hastrivialmoveassignexpr + | @hasnothrowmoveassignexpr + | @isconstructibleexpr + | @isnothrowconstructibleexpr + | @hasfinalizerexpr + | @isdelegateexpr + | @isinterfaceclassexpr + | @isrefarrayexpr + | @isrefclassexpr + | @issealedexpr + | @issimplevalueclassexpr + | @isvalueclassexpr + | @isfinalexpr + | @builtinchooseexpr + | @builtincomplex + | @isassignable + | @isaggregate + | @hasuniqueobjectrepresentations + | @builtinbitcast + | @builtinshuffle + | @issame + | @isfunction + | @islayoutcompatible + | @ispointerinterconvertiblebaseof + | @isarray + | @arrayrank + | @arrayextent + | @isarithmetic + | @iscompletetype + | @iscompound + | @isconst + | @isfloatingpoint + | @isfundamental + | @isintegral + | @islvaluereference + | @ismemberfunctionpointer + | @ismemberobjectpointer + | @ismemberpointer + | @isobject + | @ispointer + | @isreference + | @isrvaluereference + | @isscalar + | @issigned + | @isunsigned + | @isvoid + | @isvolatile + ; + +new_allocated_type( + unique int expr: @new_expr ref, + int type_id: @type ref +); + +new_array_allocated_type( + unique int expr: @new_array_expr ref, + int type_id: @type ref +); + +/** + * The field being initialized by an initializer expression within an aggregate + * initializer for a class/struct/union. Position is used to sort repeated initializers. + */ +#keyset[aggregate, position] +aggregate_field_init( + int aggregate: @aggregateliteral ref, + int initializer: @expr ref, + int field: @membervariable ref, + int position: int ref +); + +/** + * The index of the element being initialized by an initializer expression + * within an aggregate initializer for an array. Position is used to sort repeated initializers. + */ +#keyset[aggregate, position] +aggregate_array_init( + int aggregate: @aggregateliteral ref, + int initializer: @expr ref, + int element_index: int ref, + int position: int ref +); + +@ctorinit = @ctordirectinit + | @ctorvirtualinit + | @ctorfieldinit + | @ctordelegatinginit; +@dtordestruct = @dtordirectdestruct + | @dtorvirtualdestruct + | @dtorfielddestruct; + + +condition_decl_bind( + unique int expr: @condition_decl ref, + unique int decl: @declaration ref +); + +typeid_bind( + unique int expr: @type_id ref, + int type_id: @type ref +); + +uuidof_bind( + unique int expr: @uuidof ref, + int type_id: @type ref +); + +@runtime_sizeof_or_alignof = @runtime_sizeof | @runtime_alignof; + +sizeof_bind( + unique int expr: @runtime_sizeof_or_alignof ref, + int type_id: @type ref +); + +code_block( + unique int block: @literal ref, + unique int routine: @function ref +); + +lambdas( + unique int expr: @lambdaexpr ref, + string default_capture: string ref, + boolean has_explicit_return_type: boolean ref +); + +lambda_capture( + unique int id: @lambdacapture, + int lambda: @lambdaexpr ref, + int index: int ref, + int field: @membervariable ref, + boolean captured_by_reference: boolean ref, + boolean is_implicit: boolean ref, + int location: @location_default ref +); + +@funbindexpr = @routineexpr + | @new_expr + | @delete_expr + | @delete_array_expr + | @ctordirectinit + | @ctorvirtualinit + | @ctordelegatinginit + | @dtordirectdestruct + | @dtorvirtualdestruct; + +@varbindexpr = @varaccess | @ctorfieldinit | @dtorfielddestruct; +@addressable = @function | @variable ; +@accessible = @addressable | @enumconstant ; + +@access = @varaccess | @routineexpr ; + +fold( + int expr: @foldexpr ref, + string operator: string ref, + boolean is_left_fold: boolean ref +); + +stmts( + unique int id: @stmt, + int kind: int ref, + int location: @location_stmt ref +); + +case @stmt.kind of + 1 = @stmt_expr +| 2 = @stmt_if +| 3 = @stmt_while +| 4 = @stmt_goto +| 5 = @stmt_label +| 6 = @stmt_return +| 7 = @stmt_block +| 8 = @stmt_end_test_while // do { ... } while ( ... ) +| 9 = @stmt_for +| 10 = @stmt_switch_case +| 11 = @stmt_switch +| 13 = @stmt_asm // "asm" statement or the body of an asm function +| 15 = @stmt_try_block +| 16 = @stmt_microsoft_try // Microsoft +| 17 = @stmt_decl +| 18 = @stmt_set_vla_size // C99 +| 19 = @stmt_vla_decl // C99 +| 25 = @stmt_assigned_goto // GNU +| 26 = @stmt_empty +| 27 = @stmt_continue +| 28 = @stmt_break +| 29 = @stmt_range_based_for // C++11 +// ... 30 @stmt_at_autoreleasepool_block deprecated +// ... 31 @stmt_objc_for_in deprecated +// ... 32 @stmt_at_synchronized deprecated +| 33 = @stmt_handler +// ... 34 @stmt_finally_end deprecated +| 35 = @stmt_constexpr_if +| 37 = @stmt_co_return +; + +type_vla( + int type_id: @type ref, + int decl: @stmt_vla_decl ref +); + +variable_vla( + int var: @variable ref, + int decl: @stmt_vla_decl ref +); + +if_initialization( + unique int if_stmt: @stmt_if ref, + int init_id: @stmt ref +); + +if_then( + unique int if_stmt: @stmt_if ref, + int then_id: @stmt ref +); + +if_else( + unique int if_stmt: @stmt_if ref, + int else_id: @stmt ref +); + +constexpr_if_initialization( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int init_id: @stmt ref +); + +constexpr_if_then( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int then_id: @stmt ref +); + +constexpr_if_else( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int else_id: @stmt ref +); + +while_body( + unique int while_stmt: @stmt_while ref, + int body_id: @stmt ref +); + +do_body( + unique int do_stmt: @stmt_end_test_while ref, + int body_id: @stmt ref +); + +switch_initialization( + unique int switch_stmt: @stmt_switch ref, + int init_id: @stmt ref +); + +#keyset[switch_stmt, index] +switch_case( + int switch_stmt: @stmt_switch ref, + int index: int ref, + int case_id: @stmt_switch_case ref +); + +switch_body( + unique int switch_stmt: @stmt_switch ref, + int body_id: @stmt ref +); + +@stmt_for_or_range_based_for = @stmt_for + | @stmt_range_based_for; + +for_initialization( + unique int for_stmt: @stmt_for_or_range_based_for ref, + int init_id: @stmt ref +); + +for_condition( + unique int for_stmt: @stmt_for ref, + int condition_id: @expr ref +); + +for_update( + unique int for_stmt: @stmt_for ref, + int update_id: @expr ref +); + +for_body( + unique int for_stmt: @stmt_for ref, + int body_id: @stmt ref +); + +@stmtparent = @stmt | @expr_stmt ; +stmtparents( + unique int id: @stmt ref, + int index: int ref, + int parent: @stmtparent ref +); + +ishandler(unique int block: @stmt_block ref); + +@cfgnode = @stmt | @expr | @function | @initialiser ; + +stmt_decl_bind( + int stmt: @stmt_decl ref, + int num: int ref, + int decl: @declaration ref +); + +stmt_decl_entry_bind( + int stmt: @stmt_decl ref, + int num: int ref, + int decl_entry: @element ref +); + +@functionorblock = @function | @stmt_block; + +blockscope( + unique int block: @stmt_block ref, + int enclosing: @functionorblock ref +); + +@jump = @stmt_goto | @stmt_break | @stmt_continue; + +@jumporlabel = @jump | @stmt_label | @literal; + +jumpinfo( + unique int id: @jumporlabel ref, + string str: string ref, + int target: @stmt ref +); + +preprocdirects( + unique int id: @preprocdirect, + int kind: int ref, + int location: @location_default ref +); +case @preprocdirect.kind of + 0 = @ppd_if +| 1 = @ppd_ifdef +| 2 = @ppd_ifndef +| 3 = @ppd_elif +| 4 = @ppd_else +| 5 = @ppd_endif +| 6 = @ppd_plain_include +| 7 = @ppd_define +| 8 = @ppd_undef +| 9 = @ppd_line +| 10 = @ppd_error +| 11 = @ppd_pragma +| 12 = @ppd_objc_import +| 13 = @ppd_include_next +| 18 = @ppd_warning +; + +@ppd_include = @ppd_plain_include | @ppd_objc_import | @ppd_include_next; + +@ppd_branch = @ppd_if | @ppd_ifdef | @ppd_ifndef | @ppd_elif; + +preprocpair( + int begin : @ppd_branch ref, + int elseelifend : @preprocdirect ref +); + +preproctrue(int branch : @ppd_branch ref); +preprocfalse(int branch : @ppd_branch ref); + +preproctext( + unique int id: @preprocdirect ref, + string head: string ref, + string body: string ref +); + +includes( + unique int id: @ppd_include ref, + int included: @file ref +); + +link_targets( + int id: @link_target, + int binary: @file ref +); + +link_parent( + int element : @element ref, + int link_target : @link_target ref +); + +/* XML Files */ + +xmlEncoding(unique int id: @file ref, string encoding: string ref); + +xmlDTDs( + unique int id: @xmldtd, + string root: string ref, + string publicId: string ref, + string systemId: string ref, + int fileid: @file ref +); + +xmlElements( + unique int id: @xmlelement, + string name: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int fileid: @file ref +); + +xmlAttrs( + unique int id: @xmlattribute, + int elementid: @xmlelement ref, + string name: string ref, + string value: string ref, + int idx: int ref, + int fileid: @file ref +); + +xmlNs( + int id: @xmlnamespace, + string prefixName: string ref, + string URI: string ref, + int fileid: @file ref +); + +xmlHasNs( + int elementId: @xmlnamespaceable ref, + int nsId: @xmlnamespace ref, + int fileid: @file ref +); + +xmlComments( + unique int id: @xmlcomment, + string text: string ref, + int parentid: @xmlparent ref, + int fileid: @file ref +); + +xmlChars( + unique int id: @xmlcharacters, + string text: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int isCDATA: int ref, + int fileid: @file ref +); + +@xmlparent = @file | @xmlelement; +@xmlnamespaceable = @xmlelement | @xmlattribute; + +xmllocations( + int xmlElement: @xmllocatable ref, + int location: @location_default ref +); + +@xmllocatable = @xmlcharacters + | @xmlelement + | @xmlcomment + | @xmlattribute + | @xmldtd + | @file + | @xmlnamespace; diff --git a/cpp/downgrades/abfce5c170f93e281948f7689ece373464fdaf87/upgrade.properties b/cpp/downgrades/abfce5c170f93e281948f7689ece373464fdaf87/upgrade.properties new file mode 100644 index 00000000000..00edbefddf7 --- /dev/null +++ b/cpp/downgrades/abfce5c170f93e281948f7689ece373464fdaf87/upgrade.properties @@ -0,0 +1,4 @@ +description: Add value category to expr_reuse table +compatibility: full +expr_reuse.rel: run expr_reuse.qlo +expr_types.rel: run expr_types.qlo diff --git a/cpp/ql/lib/CHANGELOG.md b/cpp/ql/lib/CHANGELOG.md index b3091ec37d8..0ca4b539325 100644 --- a/cpp/ql/lib/CHANGELOG.md +++ b/cpp/ql/lib/CHANGELOG.md @@ -1,3 +1,32 @@ +## 0.12.10 + +### New Features + +* Added a `TaintInheritingContent` class that can be extended to model taint flowing from a qualifier to a field. +* Added a predicate `GuardCondition.comparesEq/4` to query whether an expression is compared to a constant. +* Added a predicate `GuardCondition.ensuresEq/4` to query whether a basic block is guarded by an expression being equal to a constant. +* Added a predicate `GuardCondition.comparesLt/4` to query whether an expression is compared to a constant. +* Added a predicate `GuardCondition.ensuresLt/4` to query whether a basic block is guarded by an expression being less than a constant. +* Added a predicate `GuardCondition.valueControls` to query whether a basic block is guarded by a particular `case` of a `switch` statement. + +### Minor Analysis Improvements + +* Added destructors for temporary objects with extended lifetimes to the intermediate representation. + +## 0.12.9 + +No user-facing changes. + +## 0.12.8 + +No user-facing changes. + +## 0.12.7 + +### Minor Analysis Improvements + +* Added destructors for named objects to the intermediate representation. + ## 0.12.6 ### New Features diff --git a/cpp/ql/lib/change-notes/2024-03-15-switches-in-guard-conditions.md b/cpp/ql/lib/change-notes/2024-03-15-switches-in-guard-conditions.md deleted file mode 100644 index cf0b920e29d..00000000000 --- a/cpp/ql/lib/change-notes/2024-03-15-switches-in-guard-conditions.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: feature ---- -* Added a predicate `GuardCondition.valueControls` to query whether a basic block is guarded by a particular `case` of a `switch` statement. \ No newline at end of file diff --git a/cpp/ql/lib/change-notes/released/0.12.10.md b/cpp/ql/lib/change-notes/released/0.12.10.md new file mode 100644 index 00000000000..64d91af2118 --- /dev/null +++ b/cpp/ql/lib/change-notes/released/0.12.10.md @@ -0,0 +1,14 @@ +## 0.12.10 + +### New Features + +* Added a `TaintInheritingContent` class that can be extended to model taint flowing from a qualifier to a field. +* Added a predicate `GuardCondition.comparesEq/4` to query whether an expression is compared to a constant. +* Added a predicate `GuardCondition.ensuresEq/4` to query whether a basic block is guarded by an expression being equal to a constant. +* Added a predicate `GuardCondition.comparesLt/4` to query whether an expression is compared to a constant. +* Added a predicate `GuardCondition.ensuresLt/4` to query whether a basic block is guarded by an expression being less than a constant. +* Added a predicate `GuardCondition.valueControls` to query whether a basic block is guarded by a particular `case` of a `switch` statement. + +### Minor Analysis Improvements + +* Added destructors for temporary objects with extended lifetimes to the intermediate representation. diff --git a/cpp/ql/lib/change-notes/2024-02-26-ir-named-destructors.md b/cpp/ql/lib/change-notes/released/0.12.7.md similarity index 54% rename from cpp/ql/lib/change-notes/2024-02-26-ir-named-destructors.md rename to cpp/ql/lib/change-notes/released/0.12.7.md index 4e35decaf8e..856a8b665c7 100644 --- a/cpp/ql/lib/change-notes/2024-02-26-ir-named-destructors.md +++ b/cpp/ql/lib/change-notes/released/0.12.7.md @@ -1,4 +1,5 @@ ---- -category: minorAnalysis ---- -* Added destructors for named objects to the intermediate representation. \ No newline at end of file +## 0.12.7 + +### Minor Analysis Improvements + +* Added destructors for named objects to the intermediate representation. diff --git a/cpp/ql/lib/change-notes/released/0.12.8.md b/cpp/ql/lib/change-notes/released/0.12.8.md new file mode 100644 index 00000000000..17f7d3963e2 --- /dev/null +++ b/cpp/ql/lib/change-notes/released/0.12.8.md @@ -0,0 +1,3 @@ +## 0.12.8 + +No user-facing changes. diff --git a/cpp/ql/lib/change-notes/released/0.12.9.md b/cpp/ql/lib/change-notes/released/0.12.9.md new file mode 100644 index 00000000000..3e0eb3573d6 --- /dev/null +++ b/cpp/ql/lib/change-notes/released/0.12.9.md @@ -0,0 +1,3 @@ +## 0.12.9 + +No user-facing changes. diff --git a/cpp/ql/lib/codeql-pack.release.yml b/cpp/ql/lib/codeql-pack.release.yml index 170a312c104..bd659eb114f 100644 --- a/cpp/ql/lib/codeql-pack.release.yml +++ b/cpp/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.12.6 +lastReleaseVersion: 0.12.10 diff --git a/cpp/ql/lib/qlpack.yml b/cpp/ql/lib/qlpack.yml index 8e201fff594..8d15b6d142a 100644 --- a/cpp/ql/lib/qlpack.yml +++ b/cpp/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/cpp-all -version: 0.12.7-dev +version: 0.12.11-dev groups: cpp dbscheme: semmlecode.cpp.dbscheme extractor: cpp @@ -11,4 +11,5 @@ dependencies: codeql/ssa: ${workspace} codeql/tutorial: ${workspace} codeql/util: ${workspace} + codeql/xml: ${workspace} warnOnImplicitThis: true diff --git a/cpp/ql/lib/semmle/code/cpp/PrintAST.qll b/cpp/ql/lib/semmle/code/cpp/PrintAST.qll index fa894a8b0fb..cfb2632bb8a 100644 --- a/cpp/ql/lib/semmle/code/cpp/PrintAST.qll +++ b/cpp/ql/lib/semmle/code/cpp/PrintAST.qll @@ -309,9 +309,12 @@ class ExprNode extends AstNode { override AstNode getChildInternal(int childIndex) { result.getAst() = expr.getChild(childIndex) or + childIndex = max(int index | exists(expr.getChild(index)) or index = 0) + 1 and + result.getAst() = expr.(ConditionDeclExpr).getInitializingExpr() + or exists(int destructorIndex | result.getAst() = expr.getImplicitDestructorCall(destructorIndex) and - childIndex = destructorIndex + max(int index | exists(expr.getChild(index)) or index = 0) + 1 + childIndex = destructorIndex + max(int index | exists(expr.getChild(index)) or index = 0) + 2 ) } @@ -686,6 +689,8 @@ private string getChildAccessorWithoutConversions(Locatable parent, Element chil not namedExprChildPredicates(expr, child, _) and exists(int n | expr.getChild(n) = child and result = "getChild(" + n + ")") or + expr.(ConditionDeclExpr).getInitializingExpr() = child and result = "getInitializingExpr()" + or exists(int n | expr.getImplicitDestructorCall(n) = child and result = "getImplicitDestructorCall(" + n + ")" @@ -857,7 +862,7 @@ private predicate namedExprChildPredicates(Expr expr, Element ele, string pred) or expr.(DeleteOrDeleteArrayExpr).getDestructorCall() = ele and pred = "getDestructorCall()" or - expr.(DeleteOrDeleteArrayExpr).getExpr() = ele and pred = "getExpr()" + expr.(DeleteOrDeleteArrayExpr).getExprWithReuse() = ele and pred = "getExprWithReuse()" or expr.(DestructorFieldDestruction).getExpr() = ele and pred = "getExpr()" or diff --git a/cpp/ql/lib/semmle/code/cpp/Variable.qll b/cpp/ql/lib/semmle/code/cpp/Variable.qll index db334f45572..3ac89ffc9b9 100644 --- a/cpp/ql/lib/semmle/code/cpp/Variable.qll +++ b/cpp/ql/lib/semmle/code/cpp/Variable.qll @@ -590,6 +590,33 @@ class TemplateVariable extends Variable { Variable getAnInstantiation() { result.isConstructedFrom(this) } } +/** + * A variable that is an instantiation of a template. For example + * the instantiation `myTemplateVariable` in the following code: + * ``` + * template + * T myTemplateVariable; + * + * void caller(int i) { + * myTemplateVariable = i; + * } + * ``` + */ +class VariableTemplateInstantiation extends Variable { + TemplateVariable tv; + + VariableTemplateInstantiation() { tv.getAnInstantiation() = this } + + override string getAPrimaryQlClass() { result = "VariableTemplateInstantiation" } + + /** + * Gets the variable template from which this instantiation was instantiated. + * + * Example: For `int x`, returns `T x`. + */ + TemplateVariable getTemplate() { result = tv } +} + /** * A non-static local variable or parameter that is not part of an * uninstantiated template. Uninstantiated templates are purely syntax, and diff --git a/cpp/ql/lib/semmle/code/cpp/XML.qll b/cpp/ql/lib/semmle/code/cpp/XML.qll index 65bdd7b7cc1..54157809260 100644 --- a/cpp/ql/lib/semmle/code/cpp/XML.qll +++ b/cpp/ql/lib/semmle/code/cpp/XML.qll @@ -3,305 +3,67 @@ */ import semmle.files.FileSystem +private import codeql.xml.Xml -private class TXmlLocatable = - @xmldtd or @xmlelement or @xmlattribute or @xmlnamespace or @xmlcomment or @xmlcharacters; +private module Input implements InputSig { + class XmlLocatableBase = @xmllocatable or @xmlnamespaceable; -/** An XML element that has a location. */ -class XmlLocatable extends @xmllocatable, TXmlLocatable { - /** Gets the source location for this element. */ - Location getLocation() { xmllocations(this, result) } + predicate xmllocations_(XmlLocatableBase e, Location loc) { xmllocations(e, loc) } - /** - * Holds if this element is at the specified location. - * The location spans column `startcolumn` of line `startline` to - * column `endcolumn` of line `endline` in file `filepath`. - * For more information, see - * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). - */ - predicate hasLocationInfo( - string filepath, int startline, int startcolumn, int endline, int endcolumn + class XmlParentBase = @xmlparent; + + class XmlNamespaceableBase = @xmlnamespaceable; + + class XmlElementBase = @xmlelement; + + class XmlFileBase = File; + + predicate xmlEncoding_(XmlFileBase f, string enc) { xmlEncoding(f, enc) } + + class XmlDtdBase = @xmldtd; + + predicate xmlDTDs_(XmlDtdBase e, string root, string publicId, string systemId, XmlFileBase file) { + xmlDTDs(e, root, publicId, systemId, file) + } + + predicate xmlElements_( + XmlElementBase e, string name, XmlParentBase parent, int idx, XmlFileBase file ) { - exists(File f, Location l | l = this.getLocation() | - locations_default(l, f, startline, startcolumn, endline, endcolumn) and - filepath = f.getAbsolutePath() - ) + xmlElements(e, name, parent, idx, file) } - /** Gets a textual representation of this element. */ - string toString() { none() } // overridden in subclasses -} + class XmlAttributeBase = @xmlattribute; -/** - * 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`; - // the type `@xmlparent` currently also includes non-XML files - this instanceof @xmlelement or xmlEncoding(this, _) + predicate xmlAttrs_( + XmlAttributeBase e, XmlElementBase elementid, string name, string value, int idx, + XmlFileBase file + ) { + xmlAttrs(e, elementid, name, value, idx, file) } - /** - * Gets a printable representation of this XML parent. - * (Intended to be overridden in subclasses.) - */ - string getName() { none() } // overridden in subclasses + class XmlNamespaceBase = @xmlnamespace; - /** Gets the file to which this XML parent belongs. */ - 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, _) } - - /** Gets a child element of this XML parent. */ - 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) } - - /** Gets a comment that is a child of this XML parent. */ - XmlComment getAComment() { xmlComments(result, _, this, _) } - - /** Gets a character sequence that is a child of this XML parent. */ - XmlCharacters getACharactersSet() { xmlChars(result, _, this, _, _, _) } - - /** 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, _, _)) } - - /** Gets the number of places in the body of this XML parent where text occurs. */ - int getNumberOfCharacterSets() { result = count(int pos | xmlChars(_, _, this, pos, _, _)) } - - /** - * Gets the result of appending all the character sequences of this XML parent from - * left to right, separated by a space. - */ - string allCharactersString() { - result = - concat(string chars, int pos | xmlChars(_, chars, this, pos, _, _) | chars, " " order by pos) + predicate xmlNs_(XmlNamespaceBase e, string prefixName, string uri, XmlFileBase file) { + xmlNs(e, prefixName, uri, file) } - /** Gets the text value contained in this XML parent. */ - string getTextValue() { result = this.allCharactersString() } + predicate xmlHasNs_(XmlNamespaceableBase e, XmlNamespaceBase ns, XmlFileBase file) { + xmlHasNs(e, ns, file) + } - /** Gets a printable representation of this XML parent. */ - string toString() { result = this.getName() } -} + class XmlCommentBase = @xmlcomment; -/** An XML file. */ -class XmlFile extends XmlParent, File { - XmlFile() { xmlEncoding(this, _) } + predicate xmlComments_(XmlCommentBase e, string text, XmlParentBase parent, XmlFileBase file) { + xmlComments(e, text, parent, file) + } - /** Gets a printable representation of this XML file. */ - override string toString() { result = this.getName() } + class XmlCharactersBase = @xmlcharacters; - /** Gets the name of this XML file. */ - override string getName() { result = File.super.getAbsolutePath() } - - /** Gets the encoding of this XML file. */ - string getEncoding() { xmlEncoding(this, result) } - - /** Gets the XML file itself. */ - override XmlFile getFile() { result = this } - - /** Gets a top-most element in an XML file. */ - XmlElement getARootElement() { result = this.getAChild() } - - /** Gets a DTD associated with this XML file. */ - XmlDtd getADtd() { xmlDTDs(result, _, _, _, this) } -} - -/** - * An XML document type definition (DTD). - * - * Example: - * - * ``` - * - * - * - * ``` - */ -class XmlDtd extends XmlLocatable, @xmldtd { - /** Gets the name of the root element of this DTD. */ - string getRoot() { xmlDTDs(this, result, _, _, _) } - - /** Gets the public ID of this DTD. */ - string getPublicId() { xmlDTDs(this, _, result, _, _) } - - /** Gets the system ID of this DTD. */ - string getSystemId() { xmlDTDs(this, _, _, result, _) } - - /** Holds if this DTD is public. */ - predicate isPublic() { not xmlDTDs(this, _, "", _, _) } - - /** Gets the parent of this DTD. */ - XmlParent getParent() { xmlDTDs(this, _, _, _, result) } - - override string toString() { - this.isPublic() and - result = this.getRoot() + " PUBLIC '" + this.getPublicId() + "' '" + this.getSystemId() + "'" - or - not this.isPublic() and - result = this.getRoot() + " SYSTEM '" + this.getSystemId() + "'" + predicate xmlChars_( + XmlCharactersBase e, string text, XmlParentBase parent, int idx, int isCDATA, XmlFileBase file + ) { + xmlChars(e, text, parent, idx, isCDATA, file) } } -/** - * An XML element in an XML file. - * - * Example: - * - * ``` - * - * - * ``` - */ -class XmlElement extends @xmlelement, XmlParent, XmlLocatable { - /** Holds if this XML element has the given `name`. */ - predicate hasName(string name) { name = this.getName() } - - /** Gets the name of this XML element. */ - override string getName() { xmlElements(this, result, _, _, _) } - - /** Gets the XML file in which this XML element occurs. */ - override XmlFile getFile() { xmlElements(this, _, _, _, result) } - - /** Gets the parent of this XML element. */ - XmlParent getParent() { xmlElements(this, _, result, _, _) } - - /** Gets the index of this XML element among its parent's children. */ - int getIndex() { xmlElements(this, _, _, result, _) } - - /** Holds if this XML element has a namespace. */ - predicate hasNamespace() { xmlHasNs(this, _, _) } - - /** Gets the namespace of this XML element, if any. */ - XmlNamespace getNamespace() { xmlHasNs(this, result, _) } - - /** Gets the index of this XML element among its parent's children. */ - int getElementPositionIndex() { xmlElements(this, _, _, result, _) } - - /** Gets the depth of this element within the XML file tree structure. */ - override int getDepth() { result = this.getParent().getDepth() + 1 } - - /** Gets an XML attribute of this XML element. */ - 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 } - - /** Holds if this XML element has an attribute with the specified `name`. */ - predicate hasAttribute(string name) { exists(this.getAttribute(name)) } - - /** Gets the value of the attribute with the specified `name`, if any. */ - string getAttributeValue(string name) { result = this.getAttribute(name).getValue() } - - /** Gets a printable representation of this XML element. */ - override string toString() { result = this.getName() } -} - -/** - * An attribute that occurs inside an XML element. - * - * Examples: - * - * ``` - * package="com.example.exampleapp" - * android:versionCode="1" - * ``` - */ -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, _, _, _, _) } - - /** Holds if this attribute has a namespace. */ - predicate hasNamespace() { xmlHasNs(this, _, _) } - - /** Gets the namespace of this attribute, if any. */ - XmlNamespace getNamespace() { xmlHasNs(this, result, _) } - - /** Gets the value of this attribute. */ - string getValue() { xmlAttrs(this, _, _, result, _, _) } - - /** Gets a printable representation of this XML attribute. */ - override string toString() { result = this.getName() + "=" + this.getValue() } -} - -/** - * A namespace used in an XML file. - * - * Example: - * - * ``` - * xmlns:android="http://schemas.android.com/apk/res/android" - * ``` - */ -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, _) } - - /** Holds if this namespace has no prefix. */ - predicate isDefault() { this.getPrefix() = "" } - - override string toString() { - this.isDefault() and result = this.getUri() - or - not this.isDefault() and result = this.getPrefix() + ":" + this.getUri() - } -} - -/** - * A comment in an XML file. - * - * Example: - * - * ``` - * - * ``` - */ -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, _) } - - /** Gets a printable representation of this XML comment. */ - override string toString() { result = this.getText() } -} - -/** - * A sequence of characters that occurs between opening and - * closing tags of an XML element, excluding other elements. - * - * Example: - * - * ``` - * This is a sequence of characters. - * ``` - */ -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, _, _, _) } - - /** Holds if this character sequence is CDATA. */ - predicate isCDATA() { xmlChars(this, _, _, _, 1, _) } - - /** Gets a printable representation of this XML character sequence. */ - override string toString() { result = this.getCharacters() } -} +import Make diff --git a/cpp/ql/lib/semmle/code/cpp/controlflow/IRGuards.qll b/cpp/ql/lib/semmle/code/cpp/controlflow/IRGuards.qll index e7762fc9fa8..ee419dd7024 100644 --- a/cpp/ql/lib/semmle/code/cpp/controlflow/IRGuards.qll +++ b/cpp/ql/lib/semmle/code/cpp/controlflow/IRGuards.qll @@ -125,6 +125,20 @@ class GuardCondition extends Expr { cached predicate ensuresLt(Expr left, Expr right, int k, BasicBlock block, boolean isLessThan) { none() } + /** + * Holds if (determined by this guard) `e < k` evaluates to `isLessThan` if + * this expression evaluates to `value`. + */ + cached + predicate comparesLt(Expr e, int k, boolean isLessThan, AbstractValue value) { none() } + + /** + * Holds if (determined by this guard) `e < k` must be `isLessThan` in `block`. + * If `isLessThan = false` then this implies `e >= k`. + */ + cached + predicate ensuresLt(Expr e, int k, BasicBlock block, boolean isLessThan) { none() } + /** Holds if (determined by this guard) `left == right + k` evaluates to `areEqual` if this expression evaluates to `testIsTrue`. */ cached predicate comparesEq(Expr left, Expr right, int k, boolean areEqual, boolean testIsTrue) { @@ -137,6 +151,17 @@ class GuardCondition extends Expr { */ cached predicate ensuresEq(Expr left, Expr right, int k, BasicBlock block, boolean areEqual) { none() } + + /** Holds if (determined by this guard) `e == k` evaluates to `areEqual` if this expression evaluates to `value`. */ + cached + predicate comparesEq(Expr e, int k, boolean areEqual, AbstractValue value) { none() } + + /** + * Holds if (determined by this guard) `e == k` must be `areEqual` in `block`. + * If `areEqual = false` then this implies `e != k`. + */ + cached + predicate ensuresEq(Expr e, int k, BasicBlock block, boolean areEqual) { none() } } /** @@ -165,12 +190,27 @@ private class GuardConditionFromBinaryLogicalOperator extends GuardCondition { ) } + override predicate comparesLt(Expr e, int k, boolean isLessThan, AbstractValue value) { + exists(BooleanValue partValue, GuardCondition part | + this.(BinaryLogicalOperation) + .impliesValue(part, partValue.getValue(), value.(BooleanValue).getValue()) + | + part.comparesLt(e, k, isLessThan, partValue) + ) + } + override predicate ensuresLt(Expr left, Expr right, int k, BasicBlock block, boolean isLessThan) { exists(boolean testIsTrue | this.comparesLt(left, right, k, isLessThan, testIsTrue) and this.controls(block, testIsTrue) ) } + override predicate ensuresLt(Expr e, int k, BasicBlock block, boolean isLessThan) { + exists(AbstractValue value | + this.comparesLt(e, k, isLessThan, value) and this.valueControls(block, value) + ) + } + override predicate comparesEq(Expr left, Expr right, int k, boolean areEqual, boolean testIsTrue) { exists(boolean partIsTrue, GuardCondition part | this.(BinaryLogicalOperation).impliesValue(part, partIsTrue, testIsTrue) @@ -184,6 +224,21 @@ private class GuardConditionFromBinaryLogicalOperator extends GuardCondition { this.comparesEq(left, right, k, areEqual, testIsTrue) and this.controls(block, testIsTrue) ) } + + override predicate comparesEq(Expr e, int k, boolean areEqual, AbstractValue value) { + exists(BooleanValue partValue, GuardCondition part | + this.(BinaryLogicalOperation) + .impliesValue(part, partValue.getValue(), value.(BooleanValue).getValue()) + | + part.comparesEq(e, k, areEqual, partValue) + ) + } + + override predicate ensuresEq(Expr e, int k, BasicBlock block, boolean areEqual) { + exists(AbstractValue value | + this.comparesEq(e, k, areEqual, value) and this.valueControls(block, value) + ) + } } /** @@ -201,7 +256,6 @@ private class GuardConditionFromIR extends GuardCondition { this.controlsBlock(controlled, v) } - /** Holds if (determined by this guard) `left < right + k` evaluates to `isLessThan` if this expression evaluates to `testIsTrue`. */ override predicate comparesLt(Expr left, Expr right, int k, boolean isLessThan, boolean testIsTrue) { exists(Instruction li, Instruction ri | li.getUnconvertedResultExpression() = left and @@ -210,10 +264,13 @@ private class GuardConditionFromIR extends GuardCondition { ) } - /** - * Holds if (determined by this guard) `left < right + k` must be `isLessThan` in `block`. - * If `isLessThan = false` then this implies `left >= right + k`. - */ + override predicate comparesLt(Expr e, int k, boolean isLessThan, AbstractValue value) { + exists(Instruction i | + i.getUnconvertedResultExpression() = e and + ir.comparesLt(i.getAUse(), k, isLessThan, value) + ) + } + override predicate ensuresLt(Expr left, Expr right, int k, BasicBlock block, boolean isLessThan) { exists(Instruction li, Instruction ri, boolean testIsTrue | li.getUnconvertedResultExpression() = left and @@ -223,7 +280,14 @@ private class GuardConditionFromIR extends GuardCondition { ) } - /** Holds if (determined by this guard) `left == right + k` evaluates to `areEqual` if this expression evaluates to `testIsTrue`. */ + override predicate ensuresLt(Expr e, int k, BasicBlock block, boolean isLessThan) { + exists(Instruction i, AbstractValue value | + i.getUnconvertedResultExpression() = e and + ir.comparesLt(i.getAUse(), k, isLessThan, value) and + this.valueControls(block, value) + ) + } + override predicate comparesEq(Expr left, Expr right, int k, boolean areEqual, boolean testIsTrue) { exists(Instruction li, Instruction ri | li.getUnconvertedResultExpression() = left and @@ -232,10 +296,6 @@ private class GuardConditionFromIR extends GuardCondition { ) } - /** - * Holds if (determined by this guard) `left == right + k` must be `areEqual` in `block`. - * If `areEqual = false` then this implies `left != right + k`. - */ override predicate ensuresEq(Expr left, Expr right, int k, BasicBlock block, boolean areEqual) { exists(Instruction li, Instruction ri, boolean testIsTrue | li.getUnconvertedResultExpression() = left and @@ -245,6 +305,21 @@ private class GuardConditionFromIR extends GuardCondition { ) } + override predicate comparesEq(Expr e, int k, boolean areEqual, AbstractValue value) { + exists(Instruction i | + i.getUnconvertedResultExpression() = e and + ir.comparesEq(i.getAUse(), k, areEqual, value) + ) + } + + override predicate ensuresEq(Expr e, int k, BasicBlock block, boolean areEqual) { + exists(Instruction i, AbstractValue value | + i.getUnconvertedResultExpression() = e and + ir.comparesEq(i.getAUse(), k, areEqual, value) and + this.valueControls(block, value) + ) + } + /** * Holds if this condition controls `block`, meaning that `block` is only * entered if the value of this condition is `v`. This helper @@ -415,7 +490,19 @@ class IRGuardCondition extends Instruction { /** Holds if (determined by this guard) `left < right + k` evaluates to `isLessThan` if this expression evaluates to `testIsTrue`. */ cached predicate comparesLt(Operand left, Operand right, int k, boolean isLessThan, boolean testIsTrue) { - compares_lt(this, left, right, k, isLessThan, testIsTrue) + exists(BooleanValue value | + compares_lt(this, left, right, k, isLessThan, value) and + value.getValue() = testIsTrue + ) + } + + /** + * Holds if (determined by this guard) `op < k` evaluates to `isLessThan` if + * this expression evaluates to `value`. + */ + cached + predicate comparesLt(Operand op, int k, boolean isLessThan, AbstractValue value) { + compares_lt(this, op, k, isLessThan, value) } /** @@ -424,8 +511,19 @@ class IRGuardCondition extends Instruction { */ cached predicate ensuresLt(Operand left, Operand right, int k, IRBlock block, boolean isLessThan) { - exists(boolean testIsTrue | - compares_lt(this, left, right, k, isLessThan, testIsTrue) and this.controls(block, testIsTrue) + exists(AbstractValue value | + compares_lt(this, left, right, k, isLessThan, value) and this.valueControls(block, value) + ) + } + + /** + * Holds if (determined by this guard) `op < k` must be `isLessThan` in `block`. + * If `isLessThan = false` then this implies `op >= k`. + */ + cached + predicate ensuresLt(Operand op, int k, IRBlock block, boolean isLessThan) { + exists(AbstractValue value | + compares_lt(this, op, k, isLessThan, value) and this.valueControls(block, value) ) } @@ -437,16 +535,37 @@ class IRGuardCondition extends Instruction { predicate ensuresLtEdge( Operand left, Operand right, int k, IRBlock pred, IRBlock succ, boolean isLessThan ) { - exists(boolean testIsTrue | - compares_lt(this, left, right, k, isLessThan, testIsTrue) and - this.controlsEdge(pred, succ, testIsTrue) + exists(AbstractValue value | + compares_lt(this, left, right, k, isLessThan, value) and + this.valueControlsEdge(pred, succ, value) + ) + } + + /** + * Holds if (determined by this guard) `op < k` must be `isLessThan` on the edge from + * `pred` to `succ`. If `isLessThan = false` then this implies `op >= k`. + */ + cached + predicate ensuresLtEdge(Operand left, int k, IRBlock pred, IRBlock succ, boolean isLessThan) { + exists(AbstractValue value | + compares_lt(this, left, k, isLessThan, value) and + this.valueControlsEdge(pred, succ, value) ) } /** Holds if (determined by this guard) `left == right + k` evaluates to `areEqual` if this expression evaluates to `testIsTrue`. */ cached predicate comparesEq(Operand left, Operand right, int k, boolean areEqual, boolean testIsTrue) { - compares_eq(this, left, right, k, areEqual, testIsTrue) + exists(BooleanValue value | + compares_eq(this, left, right, k, areEqual, value) and + value.getValue() = testIsTrue + ) + } + + /** Holds if (determined by this guard) `op == k` evaluates to `areEqual` if this expression evaluates to `value`. */ + cached + predicate comparesEq(Operand op, int k, boolean areEqual, AbstractValue value) { + compares_eq(this, op, k, areEqual, value) } /** @@ -455,8 +574,19 @@ class IRGuardCondition extends Instruction { */ cached predicate ensuresEq(Operand left, Operand right, int k, IRBlock block, boolean areEqual) { - exists(boolean testIsTrue | - compares_eq(this, left, right, k, areEqual, testIsTrue) and this.controls(block, testIsTrue) + exists(AbstractValue value | + compares_eq(this, left, right, k, areEqual, value) and this.valueControls(block, value) + ) + } + + /** + * Holds if (determined by this guard) `op == k` must be `areEqual` in `block`. + * If `areEqual = false` then this implies `op != k`. + */ + cached + predicate ensuresEq(Operand op, int k, IRBlock block, boolean areEqual) { + exists(AbstractValue value | + compares_eq(this, op, k, areEqual, value) and this.valueControls(block, value) ) } @@ -468,9 +598,21 @@ class IRGuardCondition extends Instruction { predicate ensuresEqEdge( Operand left, Operand right, int k, IRBlock pred, IRBlock succ, boolean areEqual ) { - exists(boolean testIsTrue | - compares_eq(this, left, right, k, areEqual, testIsTrue) and - this.controlsEdge(pred, succ, testIsTrue) + exists(AbstractValue value | + compares_eq(this, left, right, k, areEqual, value) and + this.valueControlsEdge(pred, succ, value) + ) + } + + /** + * Holds if (determined by this guard) `op == k` must be `areEqual` on the edge from + * `pred` to `succ`. If `areEqual = false` then this implies `op != k`. + */ + cached + predicate ensuresEqEdge(Operand op, int k, IRBlock pred, IRBlock succ, boolean areEqual) { + exists(AbstractValue value | + compares_eq(this, op, k, areEqual, value) and + this.valueControlsEdge(pred, succ, value) ) } @@ -572,52 +714,98 @@ private Instruction getBranchForCondition(Instruction guard) { * Beware making mistaken logical implications here relating `areEqual` and `testIsTrue`. */ private predicate compares_eq( - Instruction test, Operand left, Operand right, int k, boolean areEqual, boolean testIsTrue + Instruction test, Operand left, Operand right, int k, boolean areEqual, AbstractValue value ) { /* The simple case where the test *is* the comparison so areEqual = testIsTrue xor eq. */ - exists(boolean eq | simple_comparison_eq(test, left, right, k, eq) | - areEqual = true and testIsTrue = eq + exists(AbstractValue v | simple_comparison_eq(test, left, right, k, v) | + areEqual = true and value = v or - areEqual = false and testIsTrue = eq.booleanNot() + areEqual = false and value = v.getDualValue() ) or // I think this is handled by forwarding in controlsBlock. //or //logical_comparison_eq(test, left, right, k, areEqual, testIsTrue) /* a == b + k => b == a - k */ - exists(int mk | k = -mk | compares_eq(test, right, left, mk, areEqual, testIsTrue)) + exists(int mk | k = -mk | compares_eq(test, right, left, mk, areEqual, value)) or - complex_eq(test, left, right, k, areEqual, testIsTrue) + complex_eq(test, left, right, k, areEqual, value) or /* (x is true => (left == right + k)) => (!x is false => (left == right + k)) */ - exists(boolean isFalse | testIsTrue = isFalse.booleanNot() | - compares_eq(test.(LogicalNotInstruction).getUnary(), left, right, k, areEqual, isFalse) + exists(AbstractValue dual | value = dual.getDualValue() | + compares_eq(test.(LogicalNotInstruction).getUnary(), left, right, k, areEqual, dual) + ) +} + +/** Holds if `op == k` is `areEqual` given that `test` is equal to `value`. */ +private predicate compares_eq( + Instruction test, Operand op, int k, boolean areEqual, AbstractValue value +) { + /* The simple case where the test *is* the comparison so areEqual = testIsTrue xor eq. */ + exists(AbstractValue v | simple_comparison_eq(test, op, k, v) | + areEqual = true and value = v + or + areEqual = false and value = v.getDualValue() + ) + or + complex_eq(test, op, k, areEqual, value) + or + /* (x is true => (op == k)) => (!x is false => (op == k)) */ + exists(AbstractValue dual | value = dual.getDualValue() | + compares_eq(test.(LogicalNotInstruction).getUnary(), op, k, areEqual, dual) + ) + or + // ((test is `areEqual` => op == const + k2) and const == `k1`) => + // test is `areEqual` => op == k1 + k2 + exists(int k1, int k2, ConstantInstruction const | + compares_eq(test, op, const.getAUse(), k2, areEqual, value) and + int_value(const) = k1 and + k = k1 + k2 ) } /** Rearrange various simple comparisons into `left == right + k` form. */ private predicate simple_comparison_eq( - CompareInstruction cmp, Operand left, Operand right, int k, boolean areEqual + CompareInstruction cmp, Operand left, Operand right, int k, AbstractValue value ) { left = cmp.getLeftOperand() and cmp instanceof CompareEQInstruction and right = cmp.getRightOperand() and k = 0 and - areEqual = true + value.(BooleanValue).getValue() = true or left = cmp.getLeftOperand() and cmp instanceof CompareNEInstruction and right = cmp.getRightOperand() and k = 0 and - areEqual = false + value.(BooleanValue).getValue() = false +} + +/** Rearrange various simple comparisons into `op == k` form. */ +private predicate simple_comparison_eq(Instruction test, Operand op, int k, AbstractValue value) { + exists(SwitchInstruction switch, CaseEdge case | + test = switch.getExpression() and + op.getDef() = test and + case = value.(MatchValue).getCase() and + exists(switch.getSuccessor(case)) and + case.getValue().toInt() = k + ) } private predicate complex_eq( - CompareInstruction cmp, Operand left, Operand right, int k, boolean areEqual, boolean testIsTrue + CompareInstruction cmp, Operand left, Operand right, int k, boolean areEqual, AbstractValue value ) { - sub_eq(cmp, left, right, k, areEqual, testIsTrue) + sub_eq(cmp, left, right, k, areEqual, value) or - add_eq(cmp, left, right, k, areEqual, testIsTrue) + add_eq(cmp, left, right, k, areEqual, value) +} + +private predicate complex_eq( + Instruction test, Operand op, int k, boolean areEqual, AbstractValue value +) { + sub_eq(test, op, k, areEqual, value) + or + add_eq(test, op, k, areEqual, value) } /* @@ -627,31 +815,46 @@ private predicate complex_eq( /** Holds if `left < right + k` evaluates to `isLt` given that test is `testIsTrue`. */ private predicate compares_lt( - Instruction test, Operand left, Operand right, int k, boolean isLt, boolean testIsTrue + Instruction test, Operand left, Operand right, int k, boolean isLt, AbstractValue value ) { /* In the simple case, the test is the comparison, so isLt = testIsTrue */ - simple_comparison_lt(test, left, right, k) and isLt = true and testIsTrue = true + simple_comparison_lt(test, left, right, k) and + value.(BooleanValue).getValue() = isLt or - simple_comparison_lt(test, left, right, k) and isLt = false and testIsTrue = false - or - complex_lt(test, left, right, k, isLt, testIsTrue) + complex_lt(test, left, right, k, isLt, value) or /* (not (left < right + k)) => (left >= right + k) */ - exists(boolean isGe | isLt = isGe.booleanNot() | - compares_ge(test, left, right, k, isGe, testIsTrue) - ) + exists(boolean isGe | isLt = isGe.booleanNot() | compares_ge(test, left, right, k, isGe, value)) or /* (x is true => (left < right + k)) => (!x is false => (left < right + k)) */ - exists(boolean isFalse | testIsTrue = isFalse.booleanNot() | - compares_lt(test.(LogicalNotInstruction).getUnary(), left, right, k, isLt, isFalse) + exists(AbstractValue dual | value = dual.getDualValue() | + compares_lt(test.(LogicalNotInstruction).getUnary(), left, right, k, isLt, dual) + ) +} + +/** Holds if `op < k` evaluates to `isLt` given that `test` evaluates to `value`. */ +private predicate compares_lt(Instruction test, Operand op, int k, boolean isLt, AbstractValue value) { + simple_comparison_lt(test, op, k, isLt, value) + or + complex_lt(test, op, k, isLt, value) + or + /* (x is true => (op < k)) => (!x is false => (op < k)) */ + exists(AbstractValue dual | value = dual.getDualValue() | + compares_lt(test.(LogicalNotInstruction).getUnary(), op, k, isLt, dual) + ) + or + exists(int k1, int k2, ConstantInstruction const | + compares_lt(test, op, const.getAUse(), k2, isLt, value) and + int_value(const) = k1 and + k = k1 + k2 ) } /** `(a < b + k) => (b > a - k) => (b >= a + (1-k))` */ private predicate compares_ge( - Instruction test, Operand left, Operand right, int k, boolean isGe, boolean testIsTrue + Instruction test, Operand left, Operand right, int k, boolean isGe, AbstractValue value ) { - exists(int onemk | k = 1 - onemk | compares_lt(test, right, left, onemk, isGe, testIsTrue)) + exists(int onemk | k = 1 - onemk | compares_lt(test, right, left, onemk, isGe, value)) } /** Rearrange various simple comparisons into `left < right + k` form. */ @@ -677,55 +880,99 @@ private predicate simple_comparison_lt(CompareInstruction cmp, Operand left, Ope k = 1 } -private predicate complex_lt( - CompareInstruction cmp, Operand left, Operand right, int k, boolean isLt, boolean testIsTrue +/** Rearrange various simple comparisons into `op < k` form. */ +private predicate simple_comparison_lt( + Instruction test, Operand op, int k, boolean isLt, AbstractValue value ) { - sub_lt(cmp, left, right, k, isLt, testIsTrue) + exists(SwitchInstruction switch, CaseEdge case | + test = switch.getExpression() and + op.getDef() = test and + case = value.(MatchValue).getCase() and + exists(switch.getSuccessor(case)) and + case.getMaxValue() > case.getMinValue() + | + // op <= k => op < k - 1 + isLt = true and + case.getMaxValue().toInt() = k - 1 + or + isLt = false and + case.getMinValue().toInt() = k + ) +} + +private predicate complex_lt( + CompareInstruction cmp, Operand left, Operand right, int k, boolean isLt, AbstractValue value +) { + sub_lt(cmp, left, right, k, isLt, value) or - add_lt(cmp, left, right, k, isLt, testIsTrue) + add_lt(cmp, left, right, k, isLt, value) +} + +private predicate complex_lt( + Instruction test, Operand left, int k, boolean isLt, AbstractValue value +) { + sub_lt(test, left, k, isLt, value) + or + add_lt(test, left, k, isLt, value) } // left - x < right + c => left < right + (c+x) // left < (right - x) + c => left < right + (c-x) private predicate sub_lt( - CompareInstruction cmp, Operand left, Operand right, int k, boolean isLt, boolean testIsTrue + CompareInstruction cmp, Operand left, Operand right, int k, boolean isLt, AbstractValue value ) { exists(SubInstruction lhs, int c, int x | - compares_lt(cmp, lhs.getAUse(), right, c, isLt, testIsTrue) and + compares_lt(cmp, lhs.getAUse(), right, c, isLt, value) and left = lhs.getLeftOperand() and x = int_value(lhs.getRight()) and k = c + x ) or exists(SubInstruction rhs, int c, int x | - compares_lt(cmp, left, rhs.getAUse(), c, isLt, testIsTrue) and + compares_lt(cmp, left, rhs.getAUse(), c, isLt, value) and right = rhs.getLeftOperand() and x = int_value(rhs.getRight()) and k = c - x ) or exists(PointerSubInstruction lhs, int c, int x | - compares_lt(cmp, lhs.getAUse(), right, c, isLt, testIsTrue) and + compares_lt(cmp, lhs.getAUse(), right, c, isLt, value) and left = lhs.getLeftOperand() and x = int_value(lhs.getRight()) and k = c + x ) or exists(PointerSubInstruction rhs, int c, int x | - compares_lt(cmp, left, rhs.getAUse(), c, isLt, testIsTrue) and + compares_lt(cmp, left, rhs.getAUse(), c, isLt, value) and right = rhs.getLeftOperand() and x = int_value(rhs.getRight()) and k = c - x ) } +private predicate sub_lt(Instruction test, Operand left, int k, boolean isLt, AbstractValue value) { + exists(SubInstruction lhs, int c, int x | + compares_lt(test, lhs.getAUse(), c, isLt, value) and + left = lhs.getLeftOperand() and + x = int_value(lhs.getRight()) and + k = c + x + ) + or + exists(PointerSubInstruction lhs, int c, int x | + compares_lt(test, lhs.getAUse(), c, isLt, value) and + left = lhs.getLeftOperand() and + x = int_value(lhs.getRight()) and + k = c + x + ) +} + // left + x < right + c => left < right + (c-x) // left < (right + x) + c => left < right + (c+x) private predicate add_lt( - CompareInstruction cmp, Operand left, Operand right, int k, boolean isLt, boolean testIsTrue + CompareInstruction cmp, Operand left, Operand right, int k, boolean isLt, AbstractValue value ) { exists(AddInstruction lhs, int c, int x | - compares_lt(cmp, lhs.getAUse(), right, c, isLt, testIsTrue) and + compares_lt(cmp, lhs.getAUse(), right, c, isLt, value) and ( left = lhs.getLeftOperand() and x = int_value(lhs.getRight()) or @@ -735,7 +982,7 @@ private predicate add_lt( ) or exists(AddInstruction rhs, int c, int x | - compares_lt(cmp, left, rhs.getAUse(), c, isLt, testIsTrue) and + compares_lt(cmp, left, rhs.getAUse(), c, isLt, value) and ( right = rhs.getLeftOperand() and x = int_value(rhs.getRight()) or @@ -745,7 +992,7 @@ private predicate add_lt( ) or exists(PointerAddInstruction lhs, int c, int x | - compares_lt(cmp, lhs.getAUse(), right, c, isLt, testIsTrue) and + compares_lt(cmp, lhs.getAUse(), right, c, isLt, value) and ( left = lhs.getLeftOperand() and x = int_value(lhs.getRight()) or @@ -755,7 +1002,7 @@ private predicate add_lt( ) or exists(PointerAddInstruction rhs, int c, int x | - compares_lt(cmp, left, rhs.getAUse(), c, isLt, testIsTrue) and + compares_lt(cmp, left, rhs.getAUse(), c, isLt, value) and ( right = rhs.getLeftOperand() and x = int_value(rhs.getRight()) or @@ -765,47 +1012,86 @@ private predicate add_lt( ) } +private predicate add_lt(Instruction test, Operand left, int k, boolean isLt, AbstractValue value) { + exists(AddInstruction lhs, int c, int x | + compares_lt(test, lhs.getAUse(), c, isLt, value) and + ( + left = lhs.getLeftOperand() and x = int_value(lhs.getRight()) + or + left = lhs.getRightOperand() and x = int_value(lhs.getLeft()) + ) and + k = c - x + ) + or + exists(PointerAddInstruction lhs, int c, int x | + compares_lt(test, lhs.getAUse(), c, isLt, value) and + ( + left = lhs.getLeftOperand() and x = int_value(lhs.getRight()) + or + left = lhs.getRightOperand() and x = int_value(lhs.getLeft()) + ) and + k = c - x + ) +} + // left - x == right + c => left == right + (c+x) // left == (right - x) + c => left == right + (c-x) private predicate sub_eq( - CompareInstruction cmp, Operand left, Operand right, int k, boolean areEqual, boolean testIsTrue + CompareInstruction cmp, Operand left, Operand right, int k, boolean areEqual, AbstractValue value ) { exists(SubInstruction lhs, int c, int x | - compares_eq(cmp, lhs.getAUse(), right, c, areEqual, testIsTrue) and + compares_eq(cmp, lhs.getAUse(), right, c, areEqual, value) and left = lhs.getLeftOperand() and x = int_value(lhs.getRight()) and k = c + x ) or exists(SubInstruction rhs, int c, int x | - compares_eq(cmp, left, rhs.getAUse(), c, areEqual, testIsTrue) and + compares_eq(cmp, left, rhs.getAUse(), c, areEqual, value) and right = rhs.getLeftOperand() and x = int_value(rhs.getRight()) and k = c - x ) or exists(PointerSubInstruction lhs, int c, int x | - compares_eq(cmp, lhs.getAUse(), right, c, areEqual, testIsTrue) and + compares_eq(cmp, lhs.getAUse(), right, c, areEqual, value) and left = lhs.getLeftOperand() and x = int_value(lhs.getRight()) and k = c + x ) or exists(PointerSubInstruction rhs, int c, int x | - compares_eq(cmp, left, rhs.getAUse(), c, areEqual, testIsTrue) and + compares_eq(cmp, left, rhs.getAUse(), c, areEqual, value) and right = rhs.getLeftOperand() and x = int_value(rhs.getRight()) and k = c - x ) } +// op - x == c => op == (c+x) +private predicate sub_eq(Instruction test, Operand op, int k, boolean areEqual, AbstractValue value) { + exists(SubInstruction sub, int c, int x | + compares_eq(test, sub.getAUse(), c, areEqual, value) and + op = sub.getLeftOperand() and + x = int_value(sub.getRight()) and + k = c + x + ) + or + exists(PointerSubInstruction sub, int c, int x | + compares_eq(test, sub.getAUse(), c, areEqual, value) and + op = sub.getLeftOperand() and + x = int_value(sub.getRight()) and + k = c + x + ) +} + // left + x == right + c => left == right + (c-x) // left == (right + x) + c => left == right + (c+x) private predicate add_eq( - CompareInstruction cmp, Operand left, Operand right, int k, boolean areEqual, boolean testIsTrue + CompareInstruction cmp, Operand left, Operand right, int k, boolean areEqual, AbstractValue value ) { exists(AddInstruction lhs, int c, int x | - compares_eq(cmp, lhs.getAUse(), right, c, areEqual, testIsTrue) and + compares_eq(cmp, lhs.getAUse(), right, c, areEqual, value) and ( left = lhs.getLeftOperand() and x = int_value(lhs.getRight()) or @@ -815,7 +1101,7 @@ private predicate add_eq( ) or exists(AddInstruction rhs, int c, int x | - compares_eq(cmp, left, rhs.getAUse(), c, areEqual, testIsTrue) and + compares_eq(cmp, left, rhs.getAUse(), c, areEqual, value) and ( right = rhs.getLeftOperand() and x = int_value(rhs.getRight()) or @@ -825,7 +1111,7 @@ private predicate add_eq( ) or exists(PointerAddInstruction lhs, int c, int x | - compares_eq(cmp, lhs.getAUse(), right, c, areEqual, testIsTrue) and + compares_eq(cmp, lhs.getAUse(), right, c, areEqual, value) and ( left = lhs.getLeftOperand() and x = int_value(lhs.getRight()) or @@ -835,7 +1121,7 @@ private predicate add_eq( ) or exists(PointerAddInstruction rhs, int c, int x | - compares_eq(cmp, left, rhs.getAUse(), c, areEqual, testIsTrue) and + compares_eq(cmp, left, rhs.getAUse(), c, areEqual, value) and ( right = rhs.getLeftOperand() and x = int_value(rhs.getRight()) or @@ -845,5 +1131,30 @@ private predicate add_eq( ) } +// left + x == right + c => left == right + (c-x) +private predicate add_eq( + Instruction test, Operand left, int k, boolean areEqual, AbstractValue value +) { + exists(AddInstruction lhs, int c, int x | + compares_eq(test, lhs.getAUse(), c, areEqual, value) and + ( + left = lhs.getLeftOperand() and x = int_value(lhs.getRight()) + or + left = lhs.getRightOperand() and x = int_value(lhs.getLeft()) + ) and + k = c - x + ) + or + exists(PointerAddInstruction lhs, int c, int x | + compares_eq(test, lhs.getAUse(), c, areEqual, value) and + ( + left = lhs.getLeftOperand() and x = int_value(lhs.getRight()) + or + left = lhs.getRightOperand() and x = int_value(lhs.getLeft()) + ) and + k = c - x + ) +} + /** The int value of integer constant expression. */ private int int_value(Instruction i) { result = i.(IntegerConstantInstruction).getValue().toInt() } diff --git a/cpp/ql/lib/semmle/code/cpp/exprs/Expr.qll b/cpp/ql/lib/semmle/code/cpp/exprs/Expr.qll index 42e441668f2..9e12f853ba5 100644 --- a/cpp/ql/lib/semmle/code/cpp/exprs/Expr.qll +++ b/cpp/ql/lib/semmle/code/cpp/exprs/Expr.qll @@ -1015,8 +1015,33 @@ class DeleteOrDeleteArrayExpr extends Expr, TDeleteOrDeleteArrayExpr { Expr getExpr() { // If there is a destructor call, the object being deleted is the qualifier // otherwise it is the third child. - result = this.getChild(3) or result = this.getDestructorCall().getQualifier() + exists(Expr exprWithReuse | exprWithReuse = this.getExprWithReuse() | + if not exprWithReuse instanceof ReuseExpr + then result = exprWithReuse + else result = this.getDestructorCall().getQualifier() + ) } + + /** + * Gets the object or array being deleted, and gets a `ReuseExpr` when there + * is a destructor call and the object is also the qualifier of the call. + * + * For example, given: + * ``` + * struct HasDestructor { ~HasDestructor(); }; + * struct PlainOldData { int x, char y; }; + * + * void f(HasDestructor* hasDestructor, PlainOldData* pod) { + * delete hasDestructor; + * delete pod; + * } + * ``` + * This predicate yields a `ReuseExpr` for `delete hasDestructor`, as the + * the deleted expression has a destructor, and that expression is also + * the qualifier of the destructor call. In the case of `delete pod` the + * predicate does not yield a `ReuseExpr`, as there is no destructor call. + */ + Expr getExprWithReuse() { result = this.getChild(3) } } /** @@ -1340,5 +1365,23 @@ class ReuseExpr extends Expr, @reuseexpr { /** * Gets the expression that is being re-used. */ - Expr getReusedExpr() { expr_reuse(underlyingElement(this), unresolveElement(result)) } + Expr getReusedExpr() { + // In the case of a prvalue, the extractor outputs the expression + // before conversion, but the converted expression is intended. + if this.isPRValueCategory() + then result = this.getBaseReusedExpr().getFullyConverted() + else result = this.getBaseReusedExpr() + } + + private Expr getBaseReusedExpr() { + expr_reuse(underlyingElement(this), unresolveElement(result), _) + } + + override Type getType() { result = this.getReusedExpr().getType() } + + override predicate isLValueCategory() { expr_reuse(underlyingElement(this), _, 3) } + + override predicate isXValueCategory() { expr_reuse(underlyingElement(this), _, 2) } + + override predicate isPRValueCategory() { expr_reuse(underlyingElement(this), _, 1) } } diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/FlowSteps.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/FlowSteps.qll new file mode 100644 index 00000000000..673dc24b673 --- /dev/null +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/FlowSteps.qll @@ -0,0 +1,20 @@ +/** + * This file provides an abstract class that can be used to model additional + * object-to-field taint-flow. + */ + +private import codeql.util.Unit +private import semmle.code.cpp.dataflow.new.DataFlow + +/** + * A `Content` that should be implicitly regarded as tainted whenever an object with such `Content` + * is itself tainted. + * + * For example, if we had a type `struct Container { int field; }`, then by default a tainted + * `Container` and a `Container` with a tainted `int` stored in its `field` are distinct. + * + * If `any(DataFlow::FieldContent fc | fc.getField().hasQualifiedName("Container", "field"))` was + * included in this type however, then a tainted `Container` would imply that its `field` is also + * tainted (but not vice versa). + */ +abstract class TaintInheritingContent extends DataFlow::Content { } diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowUtil.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowUtil.qll index 81fc3115f55..001e8eaac9f 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowUtil.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowUtil.qll @@ -2301,8 +2301,8 @@ private import ContentStars /** A reference through a non-union instance field. */ class FieldContent extends Content, TFieldContent { - Field f; - int indirectionIndex; + private Field f; + private int indirectionIndex; FieldContent() { this = TFieldContent(f, indirectionIndex) } @@ -2329,9 +2329,9 @@ class FieldContent extends Content, TFieldContent { /** A reference through an instance field of a union. */ class UnionContent extends Content, TUnionContent { - Union u; - int indirectionIndex; - int bytes; + private Union u; + private int indirectionIndex; + private int bytes; UnionContent() { this = TUnionContent(u, bytes, indirectionIndex) } diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/TaintTrackingUtil.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/TaintTrackingUtil.qll index 51b893ddb23..0f69094e8d3 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/TaintTrackingUtil.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/TaintTrackingUtil.qll @@ -6,6 +6,7 @@ private import semmle.code.cpp.models.interfaces.SideEffect private import DataFlowUtil private import DataFlowPrivate private import SsaInternals as Ssa +private import semmle.code.cpp.ir.dataflow.FlowSteps /** * Holds if taint propagates from `nodeFrom` to `nodeTo` in exactly one local @@ -37,6 +38,12 @@ predicate localAdditionalTaintStep(DataFlow::Node nodeFrom, DataFlow::Node nodeT ) or any(Ssa::Indirection ind).isAdditionalTaintStep(nodeFrom, nodeTo) + or + // object->field conflation for content that is a `TaintInheritingContent`. + exists(DataFlow::ContentSet f | + readStep(nodeFrom, f, nodeTo) and + f.getAReadContent() instanceof TaintInheritingContent + ) } /** diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/EdgeKind.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/EdgeKind.qll index 91e1fe03e23..81db183fa63 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/EdgeKind.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/EdgeKind.qll @@ -90,6 +90,15 @@ class CaseEdge extends EdgeKind, TCaseEdge { * Gets the largest value of the switch expression for which control will flow along this edge. */ final string getMaxValue() { result = maxValue } + + /** + * Gets the unique value of the switch expression for which control will + * flow along this edge, if any. + */ + final string getValue() { + minValue = maxValue and + result = minValue + } } /** diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/constant/ConstantAnalysis.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/constant/ConstantAnalysis.qll index 47b744b3f7c..f65799f9a61 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/constant/ConstantAnalysis.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/constant/ConstantAnalysis.qll @@ -38,6 +38,12 @@ private int getBinaryInstructionValue(BinaryInstruction instr) { or instr instanceof DivInstruction and result = div(left, right) or + instr instanceof BitOrInstruction and result = bitOr(left, right) + or + instr instanceof BitAndInstruction and result = bitAnd(left, right) + or + instr instanceof BitXorInstruction and result = bitXor(left, right) + or instr instanceof CompareEQInstruction and result = compareEQ(left, right) or instr instanceof CompareNEInstruction and result = compareNE(left, right) diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/constant/ConstantAnalysis.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/constant/ConstantAnalysis.qll index 47b744b3f7c..f65799f9a61 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/constant/ConstantAnalysis.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/constant/ConstantAnalysis.qll @@ -38,6 +38,12 @@ private int getBinaryInstructionValue(BinaryInstruction instr) { or instr instanceof DivInstruction and result = div(left, right) or + instr instanceof BitOrInstruction and result = bitOr(left, right) + or + instr instanceof BitAndInstruction and result = bitAnd(left, right) + or + instr instanceof BitXorInstruction and result = bitXor(left, right) + or instr instanceof CompareEQInstruction and result = compareEQ(left, right) or instr instanceof CompareNEInstruction and result = compareNE(left, right) diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedElement.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedElement.qll index 81c704edb8b..d6ad6b8fde4 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedElement.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedElement.qll @@ -40,12 +40,43 @@ IRTempVariable getIRTempVariable(Locatable ast, TempVariableTag tag) { result.getTag() = tag } +/** Gets an operand of `op`. */ +private Expr getAnOperand(Operation op) { result = op.getAnOperand() } + +/** + * Gets the number of nested operands of `op`. For example, + * `getNumberOfNestedBinaryOperands((1 + 2) + 3))` is `3`. + */ +private int getNumberOfNestedBinaryOperands(Operation op) { result = count(getAnOperand*(op)) } + +/** + * Holds if `op` should not be translated to a `ConstantInstruction` as part of + * IR generation, even if the value of `op` is constant. + */ +private predicate ignoreConstantValue(Operation op) { + op instanceof BitwiseAndExpr + or + op instanceof BitwiseOrExpr + or + op instanceof BitwiseXorExpr +} + /** * Holds if `expr` is a constant of a type that can be replaced directly with * its value in the IR. This does not include address constants as we have no * means to express those as QL values. */ -predicate isIRConstant(Expr expr) { exists(expr.getValue()) } +predicate isIRConstant(Expr expr) { + exists(expr.getValue()) and + // We avoid constant folding certain operations since it's often useful to + // mark one of those as a source in dataflow, and if the operation is + // constant folded it's not possible to mark its operands as a source (or + // sink). + // But to avoid creating an outrageous amount of IR from very large + // constant expressions we fall back to constant folding if the operation + // has more than 50 operands (i.e., 1 + 2 + 3 + 4 + ... + 50) + if ignoreConstantValue(expr) then getNumberOfNestedBinaryOperands(expr) > 50 else any() +} // Pulled out for performance. See // https://github.com/github/codeql-coreql-team/issues/1044. @@ -99,11 +130,6 @@ private predicate ignoreExprAndDescendants(Expr expr) { or // suppress destructors of temporary variables until proper support is added for them. exists(Expr parent | parent.getAnImplicitDestructorCall() = expr) - or - exists(Stmt parent | - parent.getAnImplicitDestructorCall() = expr and - expr.(DestructorCall).getQualifier() instanceof ReuseExpr - ) } /** @@ -124,11 +150,6 @@ private predicate ignoreExprOnly(Expr expr) { or not translateFunction(getEnclosingFunction(expr)) and not Raw::varHasIRFunc(getEnclosingVariable(expr)) - or - exists(DeleteOrDeleteArrayExpr deleteExpr | - // Ignore the destructor call, because the duplicated qualifier breaks control flow. - deleteExpr.getDestructorCall() = expr - ) } /** 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 51111c24572..1a668ad6c23 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 @@ -2245,7 +2245,11 @@ class TranslatedDeleteOrDeleteArrayExpr extends TranslatedNonConstantExpr, Trans final override Type getCallResultType() { result = expr.getType() } - final override TranslatedExpr getQualifier() { none() } + final override TranslatedExpr getQualifier() { + result = getTranslatedExpr(expr.getDestructorCall()) + } + + final override Instruction getQualifierResult() { none() } final override predicate hasArguments() { // All deallocator calls have at least one argument. @@ -2260,7 +2264,7 @@ class TranslatedDeleteOrDeleteArrayExpr extends TranslatedNonConstantExpr, Trans final override TranslatedExpr getArgument(int index) { // The only argument we define is the pointer to be deallocated. index = 0 and - result = getTranslatedExpr(expr.getExpr().getFullyConverted()) + result = getTranslatedExpr(expr.getExprWithReuse().getFullyConverted()) } final override predicate mayThrowException() { @@ -2769,6 +2773,50 @@ class TranslatedTemporaryObjectExpr extends TranslatedNonConstantExpr, final override Instruction getResult() { result = this.getTargetAddress() } } +/** + * IR translation of a `ReuseExpr`. + * + * This translation produces a copy of the glvalue instruction holding the (unconverted) result + * of the reused expression. In the case where the original expression was a prvalue, the + * result will be a copy of the glvalue operand of a `TranslatedLoad`. + */ +class TranslatedReuseExpr extends TranslatedNonConstantExpr { + override ReuseExpr expr; + + override Instruction getFirstInstruction(EdgeKind kind) { + result = this.getInstruction(OnlyInstructionTag()) and + kind instanceof GotoEdge + } + + override predicate hasInstruction(Opcode opcode, InstructionTag tag, CppType resultType) { + opcode instanceof Opcode::CopyValue and + tag instanceof OnlyInstructionTag and + resultType = this.getResultType() + } + + override Instruction getResult() { result = this.getInstruction(OnlyInstructionTag()) } + + override Instruction getInstructionSuccessorInternal(InstructionTag tag, EdgeKind kind) { + tag = OnlyInstructionTag() and + kind instanceof GotoEdge and + result = this.getParent().getChildSuccessor(this, kind) + } + + override TranslatedElement getChildInternal(int id) { none() } + + override Instruction getALastInstructionInternal() { + result = this.getInstruction(OnlyInstructionTag()) + } + + override Instruction getInstructionRegisterOperand(InstructionTag tag, OperandTag operandTag) { + tag = OnlyInstructionTag() and + operandTag instanceof UnaryOperandTag and + if getTranslatedExpr(expr.getReusedExpr()) instanceof TranslatedLoad + then result = getTranslatedExpr(expr.getReusedExpr()).(TranslatedLoad).getOperand().getResult() + else result = getTranslatedExpr(expr.getReusedExpr()).getResult() + } +} + /** * IR translation of a `throw` expression. */ diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedStmt.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedStmt.qll index 247b15ed4c4..d8ec66a2ee7 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedStmt.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedStmt.qll @@ -248,19 +248,9 @@ abstract class TranslatedStmt extends TranslatedElement, TTranslatedStmt { final override TranslatedElement getChild(int id) { result = this.getChildInternal(id) or - exists(int destructorIndex, int tempDestructorCount | + exists(int destructorIndex | result.(TranslatedExpr).getExpr() = stmt.getImplicitDestructorCall(destructorIndex) and - id = this.getFirstDestructorCallIndex() + destructorIndex - tempDestructorCount and - // suppress destructors of temporary variables until proper support is added for them. - tempDestructorCount = - count(DestructorCall call, int tempIndex | - stmt.getImplicitDestructorCall(tempIndex) = call and - tempIndex < destructorIndex and - call.getQualifier() instanceof ReuseExpr - | - call - ) and - not stmt.getImplicitDestructorCall(destructorIndex).getQualifier() instanceof ReuseExpr + id = this.getFirstDestructorCallIndex() + destructorIndex ) } @@ -271,11 +261,7 @@ abstract class TranslatedStmt extends TranslatedElement, TTranslatedStmt { } final override predicate hasAnImplicitDestructorCall() { - exists(stmt.getAnImplicitDestructorCall()) and - // suppress destructors of temporary variables until proper support is added for them. - exists(Expr expr | stmt.getAnImplicitDestructorCall().getQualifier() = expr | - not expr instanceof ReuseExpr - ) + exists(stmt.getAnImplicitDestructorCall()) } final override string toString() { result = stmt.toString() } diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/constant/ConstantAnalysis.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/constant/ConstantAnalysis.qll index 47b744b3f7c..f65799f9a61 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/constant/ConstantAnalysis.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/constant/ConstantAnalysis.qll @@ -38,6 +38,12 @@ private int getBinaryInstructionValue(BinaryInstruction instr) { or instr instanceof DivInstruction and result = div(left, right) or + instr instanceof BitOrInstruction and result = bitOr(left, right) + or + instr instanceof BitAndInstruction and result = bitAnd(left, right) + or + instr instanceof BitXorInstruction and result = bitXor(left, right) + or instr instanceof CompareEQInstruction and result = compareEQ(left, right) or instr instanceof CompareNEInstruction and result = compareNE(left, right) diff --git a/cpp/ql/lib/semmle/code/cpp/ir/internal/IntegerPartial.qll b/cpp/ql/lib/semmle/code/cpp/ir/internal/IntegerPartial.qll index 0e24f283b17..923ee7293f9 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/internal/IntegerPartial.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/internal/IntegerPartial.qll @@ -89,6 +89,18 @@ int compareLE(int a, int b) { if a <= b then result = 1 else result = 0 } bindingset[a, b] int compareGE(int a, int b) { if a >= b then result = 1 else result = 0 } +/** Returns `a | b`. */ +bindingset[a, b] +int bitOr(int a, int b) { result = a.bitOr(b) } + +/** Returns `a & b`. */ +bindingset[a, b] +int bitAnd(int a, int b) { result = a.bitAnd(b) } + +/** Returns `a ^ b`. */ +bindingset[a, b] +int bitXor(int a, int b) { result = a.bitXor(b) } + /** * Returns `-a`. If the negation would overflow, there is no result. */ diff --git a/cpp/ql/lib/semmle/code/cpp/models/Models.qll b/cpp/ql/lib/semmle/code/cpp/models/Models.qll index 32377dbd71f..7794424b3f6 100644 --- a/cpp/ql/lib/semmle/code/cpp/models/Models.qll +++ b/cpp/ql/lib/semmle/code/cpp/models/Models.qll @@ -41,3 +41,4 @@ private import implementations.SqLite3 private import implementations.PostgreSql private import implementations.System private import implementations.StructuredExceptionHandling +private import implementations.Fopen diff --git a/cpp/ql/lib/semmle/code/cpp/models/implementations/Fopen.qll b/cpp/ql/lib/semmle/code/cpp/models/implementations/Fopen.qll new file mode 100644 index 00000000000..6bc700becf1 --- /dev/null +++ b/cpp/ql/lib/semmle/code/cpp/models/implementations/Fopen.qll @@ -0,0 +1,50 @@ +/** + * Provides implementation classes modeling `fopen` and various similar + * functions. See `semmle.code.cpp.models.Models` for usage information. + */ + +import semmle.code.cpp.models.interfaces.Alias +import semmle.code.cpp.models.interfaces.SideEffect + +/** The function `fopen` and friends. */ +private class Fopen extends Function, AliasFunction, SideEffectFunction { + Fopen() { + this.hasGlobalOrStdName(["fopen", "fopen_s", "freopen"]) + or + this.hasGlobalName(["_open", "_wfopen", "_fsopen", "_wfsopen", "_wopen"]) + } + + override predicate hasOnlySpecificWriteSideEffects() { any() } + + override predicate hasOnlySpecificReadSideEffects() { any() } + + override predicate parameterEscapesOnlyViaReturn(int i) { none() } + + override predicate parameterNeverEscapes(int index) { + // None of the parameters escape + this.getParameter(index).getUnspecifiedType() instanceof PointerType + } + + override predicate hasSpecificReadSideEffect(ParameterIndex i, boolean buffer) { + ( + this.hasGlobalOrStdName(["fopen", "fopen_s"]) + or + this.hasGlobalName(["_wfopen", "_fsopen", "_wfsopen"]) + ) and + i = [0, 1] and + buffer = true + or + this.hasGlobalOrStdName("freopen") and + ( + i = [0, 1] and + buffer = true + or + i = 2 and + buffer = false + ) + or + this.hasGlobalName(["_open", "_wopen"]) and + i = 0 and + buffer = true + } +} diff --git a/cpp/ql/lib/semmlecode.cpp.dbscheme b/cpp/ql/lib/semmlecode.cpp.dbscheme index aa7ff0ab32c..abfce5c170f 100644 --- a/cpp/ql/lib/semmlecode.cpp.dbscheme +++ b/cpp/ql/lib/semmlecode.cpp.dbscheme @@ -1515,7 +1515,8 @@ exprs( expr_reuse( int reuse: @expr ref, - int original: @expr ref + int original: @expr ref, + int value_category: int ref ) /* diff --git a/cpp/ql/lib/semmlecode.cpp.dbscheme.stats b/cpp/ql/lib/semmlecode.cpp.dbscheme.stats index 8d4a841aaf8..d6f973be1f6 100644 --- a/cpp/ql/lib/semmlecode.cpp.dbscheme.stats +++ b/cpp/ql/lib/semmlecode.cpp.dbscheme.stats @@ -2,7 +2,7 @@ @compilation - 9657 + 9654 @externalDataElement @@ -18,71 +18,71 @@ @location_default - 29786456 + 29787737 @location_stmt - 3820105 - - - @location_expr - 13188716 + 3820076 @diagnostic - 5013 + 5001 + + + @location_expr + 13188614 @file - 123134 + 123139 @folder - 16324 + 16325 @macro_expansion - 32971750 + 32959239 @other_macro_reference - 858211 + 858248 @function - 4646000 + 4646200 @fun_decl - 5009807 + 5010023 @var_decl - 8423062 + 8423424 @type_decl - 3242079 + 3242218 @namespace_decl - 311530 + 311523 @using - 369403 + 369419 @static_assert - 134655 + 134652 @parameter - 6576042 + 6576325 @membervariable - 1054758 + 1054750 @globalvariable @@ -90,11 +90,11 @@ @localvariable - 576906 + 576895 @enumconstant - 241684 + 241682 @errortype @@ -322,35 +322,35 @@ @pointer - 567632 + 567656 @type_with_specifiers - 1010263 + 1010307 @array - 110074 + 110079 @routineptr - 624659 + 624503 @reference - 1721148 + 1720495 @gnu_vector - 693 + 671 @routinereference - 235 + 234 @rvalue_reference - 620692 + 620537 @block @@ -358,43 +358,43 @@ @decltype - 27052 + 27053 @usertype - 5229957 + 5230182 @mangledname - 6448244 + 6448521 @type_mention - 4029370 + 4029338 @routinetype - 538161 + 538026 @ptrtomember - 37779 + 37781 @specifier - 24720 + 24721 @gnuattribute - 685636 + 685665 @stdattribute - 487895 + 487639 @declspec - 243123 + 243121 @msattribute @@ -402,15 +402,15 @@ @alignas - 9794 + 9795 @attribute_arg_token - 39179 + 39180 @attribute_arg_constant_expr - 370336 + 370352 @attribute_arg_empty @@ -430,19 +430,19 @@ @derivation - 391086 + 390988 @frienddecl - 706182 + 706005 @comment - 8686670 + 8682106 @namespace - 12126 + 12127 @specialnamequalifyingelement @@ -450,15 +450,15 @@ @namequalifier - 1516804 + 1515301 @value - 10777325 + 10777241 @initialiser - 1710241 + 1710223 @address_of @@ -466,15 +466,15 @@ @indirect - 292663 + 292660 @array_to_pointer - 1430922 + 1430911 @parexpr - 3587688 + 3587661 @arithnegexpr @@ -490,15 +490,15 @@ @notexpr - 276441 + 276439 @postincrexpr - 62049 + 62048 @postdecrexpr - 42038 + 42037 @preincrexpr @@ -510,75 +510,75 @@ @conditionalexpr - 657276 + 657271 @addexpr - 398417 + 398414 @subexpr - 340778 + 340775 @mulexpr - 306374 + 306372 @divexpr - 133174 + 133173 @remexpr - 15622 + 15618 @paddexpr - 86667 + 86666 @psubexpr - 49903 + 49902 @pdiffexpr - 35197 + 35178 @lshiftexpr - 566336 + 566331 @rshiftexpr - 140848 + 140847 @andexpr - 489084 + 489081 @orexpr - 145473 + 145472 @xorexpr - 54178 + 54177 @eqexpr - 470677 + 470674 @neexpr - 301684 + 301682 @gtexpr - 104011 + 104015 @ltexpr - 101679 + 101683 @geexpr @@ -586,11 +586,11 @@ @leexpr - 212539 + 212537 @assignexpr - 937011 + 937004 @assignaddexpr @@ -602,7 +602,7 @@ @assignmulexpr - 8214 + 8210 @assigndivexpr @@ -610,7 +610,7 @@ @assignremexpr - 414 + 413 @assignlshiftexpr @@ -642,23 +642,23 @@ @andlogicalexpr - 249967 + 249965 @orlogicalexpr - 866161 + 866154 @commaexpr - 122776 + 122711 @subscriptexpr - 364887 + 364880 @callexpr - 316232 + 316245 @vastartexpr @@ -678,15 +678,15 @@ @varaccess - 6029477 + 6029430 @runtime_sizeof - 295853 + 295851 @runtime_alignof - 49198 + 49186 @expr_stmt @@ -694,11 +694,11 @@ @routineexpr - 3151079 + 3150048 @type_operand - 1128821 + 1128813 @offsetofexpr @@ -706,7 +706,7 @@ @typescompexpr - 563810 + 563806 @literal @@ -722,27 +722,27 @@ @temp_init - 796653 + 795228 @errorexpr - 46241 + 46229 @reference_to - 1570260 + 1569867 @ref_indirect - 1906893 + 1906417 @vacuous_destructor_call - 8037 + 8035 @assume - 3231 + 3230 @conjugation @@ -794,31 +794,31 @@ @thisaccess - 1117586 + 1117561 @new_expr - 47006 + 46995 @delete_expr - 11621 + 11618 @throw_expr - 21061 + 21053 @condition_decl - 40853 + 40753 @braced_init_list - 1067 + 1064 @type_id - 35977 + 35968 @sizeof_pack @@ -878,11 +878,11 @@ @isconvtoexpr - 207 + 206 @isemptyexpr - 1461 + 1460 @isenumexpr @@ -914,7 +914,7 @@ @delete_array_expr - 1365 + 1364 @new_array_expr @@ -926,55 +926,55 @@ @ctordirectinit - 111410 + 111383 @ctorvirtualinit - 6322 + 6320 @ctorfieldinit - 198326 + 198277 @ctordelegatinginit - 3305 + 3304 @dtordirectdestruct - 41231 + 41220 @dtorvirtualdestruct - 4070 + 4069 @dtorfielddestruct - 41126 + 41116 @static_cast - 214451 + 214369 @reinterpret_cast - 30745 + 30729 @const_cast - 34990 + 34971 @dynamic_cast - 1007 + 1006 @lambdaexpr - 21455 + 21456 @param_ref - 236428 + 235847 @noopexpr @@ -994,7 +994,7 @@ @istriviallydestructibleexpr - 828 + 827 @istriviallyassignableexpr @@ -1002,7 +1002,7 @@ @isnothrowassignableexpr - 4140 + 4138 @istrivialexpr @@ -1038,7 +1038,7 @@ @isnothrowconstructibleexpr - 14285 + 14278 @hasfinalizerexpr @@ -1074,11 +1074,11 @@ @isfinalexpr - 1670 + 1669 @noexceptexpr - 24725 + 24664 @builtinshufflevector @@ -1090,7 +1090,7 @@ @builtinaddressof - 13117 + 13114 @vec_fill @@ -1134,7 +1134,7 @@ @builtinshuffle - 1902 + 1901 @blockassignexpr @@ -1250,67 +1250,67 @@ @reuseexpr - 331632 + 333955 @lambdacapture - 27985 + 27986 @stmt_expr - 1486111 + 1486099 @stmt_if - 725956 + 725951 @stmt_while - 29152 + 29141 @stmt_goto - 110697 + 110696 @stmt_label - 53145 + 53144 @stmt_return - 1284984 + 1285039 @stmt_block - 1423977 + 1424038 @stmt_end_test_while - 148882 + 148881 @stmt_for - 61560 + 61559 @stmt_switch_case - 201865 + 207702 @stmt_switch - 20788 + 20787 @stmt_asm - 109989 + 109988 @stmt_decl - 589211 + 588988 @stmt_empty - 191899 + 191895 @stmt_continue @@ -1318,11 +1318,11 @@ @stmt_break - 103183 + 103193 @stmt_try_block - 45181 + 45069 @stmt_microsoft_try @@ -1346,11 +1346,11 @@ @stmt_handler - 62891 + 62736 @stmt_constexpr_if - 52071 + 52043 @stmt_co_return @@ -1358,39 +1358,39 @@ @ppd_if - 666512 + 666541 @ppd_ifdef - 263060 + 263071 @ppd_ifndef - 266325 + 266336 @ppd_elif - 25186 + 25187 @ppd_else - 208955 + 208964 @ppd_endif - 1195898 + 1195950 @ppd_plain_include - 311101 + 311114 @ppd_define - 2408524 + 2407258 @ppd_undef - 258396 + 258407 @ppd_include_next @@ -1406,7 +1406,7 @@ @ppd_pragma - 311805 + 311642 @ppd_objc_import @@ -1418,7 +1418,7 @@ @link_target - 819 + 817 @xmldtd @@ -1436,23 +1436,23 @@ @xmlnamespace 4185 - - @xmlcomment - 26812 - @xmlcharacters 439958 + + @xmlcomment + 26812 + compilations - 9657 + 9654 id - 9657 + 9654 cwd @@ -1470,7 +1470,7 @@ 1 2 - 9657 + 9654 @@ -1496,7 +1496,7 @@ compilation_args - 652589 + 652584 id @@ -1508,7 +1508,7 @@ arg - 34463 + 34462 @@ -2044,7 +2044,7 @@ seconds - 9828 + 9748 @@ -2125,47 +2125,47 @@ 3 4 - 719 + 759 4 5 - 279 + 239 5 - 8 - 159 + 7 + 119 - 9 + 8 10 159 10 + 11 + 79 + + + 11 12 159 12 - 16 - 119 - - - 16 - 18 + 17 159 - 19 - 43 + 18 + 22 159 - 57 - 92 - 79 + 25 + 98 + 159 @@ -2233,22 +2233,22 @@ 3 4 - 1478 + 1438 4 5 - 279 + 319 5 6 - 239 + 199 6 7 - 439 + 479 7 @@ -2257,18 +2257,18 @@ 8 - 9 - 199 - - - 9 - 23 + 10 279 - 24 - 90 - 279 + 10 + 26 + 239 + + + 26 + 84 + 239 @@ -2316,21 +2316,16 @@ 3 4 + 79 + + + 137 + 138 39 - 4 - 5 - 39 - - - 136 - 137 - 39 - - - 146 - 147 + 142 + 143 39 @@ -2347,27 +2342,27 @@ 1 2 - 4834 + 4994 2 3 - 2557 + 2117 3 4 - 1238 + 1278 4 5 - 719 + 958 5 - 46 - 479 + 47 + 399 @@ -2383,32 +2378,32 @@ 1 2 - 4474 + 4554 2 3 - 2197 + 1997 3 4 - 1318 + 1238 4 5 - 679 + 839 5 7 - 799 + 878 7 - 76 - 359 + 74 + 239 @@ -2429,7 +2424,7 @@ 2 3 - 1718 + 1638 @@ -2439,15 +2434,15 @@ diagnostic_for - 5471 + 5457 diagnostic - 5013 + 5001 compilation - 819 + 817 file_number @@ -2455,7 +2450,7 @@ file_number_diagnostic_number - 400 + 399 @@ -2469,7 +2464,7 @@ 1 2 - 4861 + 4849 2 @@ -2490,7 +2485,7 @@ 1 2 - 5013 + 5001 @@ -2506,7 +2501,7 @@ 1 2 - 5013 + 5001 @@ -2522,7 +2517,7 @@ 5 6 - 610 + 608 7 @@ -2558,7 +2553,7 @@ 1 2 - 819 + 817 @@ -2574,7 +2569,7 @@ 5 6 - 610 + 608 7 @@ -2755,7 +2750,7 @@ 1 2 - 400 + 399 @@ -2765,15 +2760,15 @@ compilation_finished - 9657 + 9654 id - 9657 + 9654 cpu_seconds - 7330 + 7763 elapsed_seconds @@ -2791,7 +2786,7 @@ 1 2 - 9657 + 9654 @@ -2807,7 +2802,7 @@ 1 2 - 9657 + 9654 @@ -2823,17 +2818,17 @@ 1 2 - 6054 + 6510 2 3 - 850 + 872 3 - 20 - 425 + 14 + 380 @@ -2849,12 +2844,12 @@ 1 2 - 6692 + 7461 2 3 - 637 + 302 @@ -2868,53 +2863,63 @@ 12 - 1 - 2 + 2 + 3 + 22 + + + 3 + 4 11 - 2 - 3 - 33 + 6 + 7 + 11 7 8 - 22 - - - 11 - 12 11 - 12 - 13 + 8 + 9 11 - 52 - 53 + 9 + 10 11 - 161 - 162 + 37 + 38 11 - 163 - 164 + 47 + 48 11 - 184 - 185 + 118 + 119 11 - 259 - 260 + 140 + 141 + 11 + + + 229 + 230 + 11 + + + 255 + 256 11 @@ -2929,53 +2934,63 @@ 12 - 1 - 2 + 2 + 3 + 22 + + + 3 + 4 11 - 2 - 3 - 33 + 6 + 7 + 11 7 8 - 22 - - - 11 - 12 11 - 12 - 13 + 8 + 9 11 - 52 - 53 + 9 + 10 11 - 115 - 116 + 37 + 38 11 - 119 - 120 + 47 + 48 11 - 140 - 141 + 97 + 98 11 - 242 - 243 + 112 + 113 + 11 + + + 183 + 184 + 11 + + + 208 + 209 11 @@ -4748,31 +4763,31 @@ locations_default - 29786456 + 29787737 id - 29786456 + 29787737 container - 123134 + 123139 startLine - 2093288 + 2093378 startColumn - 36847 + 36848 endLine - 2097486 + 2097576 endColumn - 48041 + 48043 @@ -4786,7 +4801,7 @@ 1 2 - 29786456 + 29787737 @@ -4802,7 +4817,7 @@ 1 2 - 29786456 + 29787737 @@ -4818,7 +4833,7 @@ 1 2 - 29786456 + 29787737 @@ -4834,7 +4849,7 @@ 1 2 - 29786456 + 29787737 @@ -4850,7 +4865,7 @@ 1 2 - 29786456 + 29787737 @@ -4866,7 +4881,7 @@ 1 11 - 9794 + 9795 11 @@ -4881,12 +4896,12 @@ 30 42 - 9794 + 9795 43 61 - 9794 + 9795 61 @@ -4896,7 +4911,7 @@ 80 106 - 9794 + 9795 109 @@ -4952,7 +4967,7 @@ 13 20 - 9794 + 9795 20 @@ -4962,7 +4977,7 @@ 32 43 - 9794 + 9795 44 @@ -5023,7 +5038,7 @@ 1 4 - 8861 + 8862 4 @@ -5033,7 +5048,7 @@ 5 6 - 7462 + 7463 6 @@ -5048,12 +5063,12 @@ 10 15 - 10727 + 10728 15 23 - 9794 + 9795 23 @@ -5063,7 +5078,7 @@ 28 34 - 9794 + 9795 34 @@ -5078,7 +5093,7 @@ 55 66 - 9794 + 9795 66 @@ -5109,7 +5124,7 @@ 13 20 - 9794 + 9795 20 @@ -5119,7 +5134,7 @@ 32 43 - 9794 + 9795 43 @@ -5180,7 +5195,7 @@ 1 9 - 9794 + 9795 9 @@ -5230,12 +5245,12 @@ 66 74 - 9794 + 9795 74 78 - 9794 + 9795 78 @@ -5256,47 +5271,47 @@ 1 2 - 581158 + 581183 2 3 - 314832 + 314846 3 4 - 194963 + 194971 4 6 - 162313 + 162320 6 10 - 183302 + 183310 10 16 - 161847 + 161854 16 25 - 168377 + 168384 25 45 - 157183 + 157189 45 160 - 157649 + 157656 160 @@ -5317,42 +5332,42 @@ 1 2 - 870338 + 870375 2 3 - 273321 + 273333 3 5 - 193563 + 193572 5 8 - 173507 + 173515 8 13 - 187966 + 187974 13 20 - 160914 + 160921 20 51 - 159515 + 159522 51 265 - 74160 + 74163 @@ -5368,47 +5383,47 @@ 1 2 - 611475 + 611501 2 3 - 312967 + 312980 3 4 - 198228 + 198236 4 6 - 182836 + 182844 6 9 - 173041 + 173048 9 13 - 163246 + 163253 13 19 - 173974 + 173981 19 29 - 165112 + 165119 29 52 - 112407 + 112411 @@ -5424,22 +5439,22 @@ 1 2 - 1530321 + 1530386 2 3 - 348415 + 348430 3 5 - 161847 + 161854 5 16 - 52705 + 52707 @@ -5455,47 +5470,47 @@ 1 2 - 585822 + 585847 2 3 - 316232 + 316245 3 4 - 197761 + 197770 4 6 - 168377 + 168384 6 10 - 191698 + 191706 10 15 - 165578 + 165585 15 22 - 167910 + 167918 22 34 - 164179 + 164186 34 66 - 135727 + 135733 @@ -5597,7 +5612,7 @@ 23 35 - 3264 + 3265 38 @@ -5617,7 +5632,7 @@ 73 84 - 3264 + 3265 84 @@ -5627,12 +5642,12 @@ 96 101 - 3264 + 3265 101 105 - 3264 + 3265 107 @@ -5835,12 +5850,12 @@ 7 11 - 3264 + 3265 11 16 - 3264 + 3265 16 @@ -5850,7 +5865,7 @@ 22 24 - 3264 + 3265 24 @@ -5860,12 +5875,12 @@ 29 34 - 3264 + 3265 34 41 - 3264 + 3265 41 @@ -5906,47 +5921,47 @@ 1 2 - 591419 + 591444 2 3 - 306903 + 306916 3 4 - 198228 + 198236 4 6 - 159515 + 159522 6 10 - 182836 + 182844 10 16 - 160448 + 160455 16 25 - 170709 + 170716 25 45 - 158116 + 158122 45 160 - 158116 + 158122 160 @@ -5967,42 +5982,42 @@ 1 2 - 885729 + 885767 2 3 - 259795 + 259806 3 4 - 125000 + 125005 4 6 - 140858 + 140864 6 10 - 184701 + 184709 10 15 - 168377 + 168384 15 26 - 163246 + 163253 26 120 - 158116 + 158122 121 @@ -6023,22 +6038,22 @@ 1 2 - 1527988 + 1528054 2 3 - 341418 + 341433 3 5 - 170709 + 170716 5 10 - 57369 + 57372 @@ -6054,47 +6069,47 @@ 1 2 - 622669 + 622696 2 3 - 303172 + 303185 3 4 - 201493 + 201501 4 6 - 183769 + 183777 6 9 - 169776 + 169783 9 13 - 166511 + 166518 13 19 - 174907 + 174914 19 29 - 160914 + 160921 29 52 - 114272 + 114277 @@ -6110,47 +6125,47 @@ 1 2 - 597949 + 597975 2 3 - 306903 + 306916 3 4 - 196362 + 196370 4 6 - 169310 + 169317 6 9 - 154851 + 154857 9 14 - 168377 + 168384 14 21 - 178638 + 178646 21 32 - 163246 + 163253 32 60 - 158116 + 158122 60 @@ -6434,17 +6449,17 @@ 35 39 - 3264 + 3265 39 42 - 3264 + 3265 42 44 - 3264 + 3265 44 @@ -6545,11 +6560,11 @@ locations_stmt - 3820105 + 3820076 id - 3820105 + 3820076 container @@ -6557,7 +6572,7 @@ startLine - 200183 + 200182 startColumn @@ -6565,7 +6580,7 @@ endLine - 194439 + 194437 endColumn @@ -6583,7 +6598,7 @@ 1 2 - 3820105 + 3820076 @@ -6599,7 +6614,7 @@ 1 2 - 3820105 + 3820076 @@ -6615,7 +6630,7 @@ 1 2 - 3820105 + 3820076 @@ -6631,7 +6646,7 @@ 1 2 - 3820105 + 3820076 @@ -6647,7 +6662,7 @@ 1 2 - 3820105 + 3820076 @@ -7098,7 +7113,7 @@ 37 45 - 15112 + 15111 45 @@ -7139,7 +7154,7 @@ 4 6 - 14412 + 14411 6 @@ -7276,7 +7291,7 @@ 3 4 - 18468 + 18467 4 @@ -7321,7 +7336,7 @@ 12 14 - 15812 + 15811 14 @@ -7342,7 +7357,7 @@ 1 2 - 22174 + 22173 2 @@ -7798,7 +7813,7 @@ 3 4 - 11509 + 11508 4 @@ -7869,7 +7884,7 @@ 2 3 - 16162 + 16161 3 @@ -7889,7 +7904,7 @@ 8 11 - 15915 + 15914 11 @@ -7935,7 +7950,7 @@ 1 2 - 32530 + 32529 2 @@ -8016,7 +8031,7 @@ 3 4 - 16862 + 16861 4 @@ -8031,7 +8046,7 @@ 6 7 - 20465 + 20464 7 @@ -8082,7 +8097,7 @@ 3 4 - 12559 + 12558 4 @@ -8117,7 +8132,7 @@ 19 22 - 14062 + 14061 22 @@ -8527,11 +8542,11 @@ locations_expr - 13188716 + 13188614 id - 13188716 + 13188614 container @@ -8539,7 +8554,7 @@ startLine - 192236 + 192235 startColumn @@ -8547,7 +8562,7 @@ endLine - 192215 + 192214 endColumn @@ -8565,7 +8580,7 @@ 1 2 - 13188716 + 13188614 @@ -8581,7 +8596,7 @@ 1 2 - 13188716 + 13188614 @@ -8597,7 +8612,7 @@ 1 2 - 13188716 + 13188614 @@ -8613,7 +8628,7 @@ 1 2 - 13188716 + 13188614 @@ -8629,7 +8644,7 @@ 1 2 - 13188716 + 13188614 @@ -9050,7 +9065,7 @@ 5 9 - 16512 + 16511 9 @@ -9202,7 +9217,7 @@ 7 11 - 16718 + 16717 11 @@ -9268,7 +9283,7 @@ 2 3 - 44698 + 44697 3 @@ -9339,7 +9354,7 @@ 38 43 - 15565 + 15564 43 @@ -9760,12 +9775,12 @@ 1 5 - 16162 + 16161 5 9 - 16512 + 16511 9 @@ -9775,7 +9790,7 @@ 15 23 - 15112 + 15111 23 @@ -9785,12 +9800,12 @@ 32 44 - 14762 + 14761 44 60 - 14515 + 14514 60 @@ -9912,17 +9927,17 @@ 1 2 - 95634 + 95633 2 3 - 50092 + 50091 3 4 - 29421 + 29420 4 @@ -9958,7 +9973,7 @@ 7 11 - 16512 + 16511 11 @@ -10059,7 +10074,7 @@ 38 43 - 16162 + 16161 43 @@ -10459,23 +10474,23 @@ numlines - 1382466 + 1382525 element_id - 1375469 + 1375529 num_lines - 101679 + 101683 num_code - 84888 + 84891 num_comment - 59701 + 59704 @@ -10489,7 +10504,7 @@ 1 2 - 1368473 + 1368532 2 @@ -10510,7 +10525,7 @@ 1 2 - 1369406 + 1369465 2 @@ -10531,7 +10546,7 @@ 1 2 - 1375469 + 1375529 @@ -10547,17 +10562,17 @@ 1 2 - 68097 + 68100 2 3 - 12126 + 12127 3 4 - 7462 + 7463 4 @@ -10583,12 +10598,12 @@ 1 2 - 70429 + 70432 2 3 - 12126 + 12127 3 @@ -10619,22 +10634,22 @@ 1 2 - 69496 + 69499 2 3 - 14925 + 14926 3 4 - 10727 + 10728 4 7 - 6529 + 6530 @@ -10650,22 +10665,22 @@ 1 2 - 52705 + 52707 2 3 - 14458 + 14459 3 5 - 6529 + 6530 5 42 - 6529 + 6530 44 @@ -10686,7 +10701,7 @@ 1 2 - 52705 + 52707 2 @@ -10701,7 +10716,7 @@ 5 8 - 6529 + 6530 8 @@ -10722,7 +10737,7 @@ 1 2 - 53171 + 53174 2 @@ -10732,7 +10747,7 @@ 3 5 - 7462 + 7463 5 @@ -10742,7 +10757,7 @@ 7 10 - 3264 + 3265 @@ -10758,7 +10773,7 @@ 1 2 - 34515 + 34516 2 @@ -10799,7 +10814,7 @@ 1 2 - 34515 + 34516 2 @@ -10840,7 +10855,7 @@ 1 2 - 34515 + 34516 2 @@ -10875,11 +10890,11 @@ diagnostics - 5013 + 5001 id - 5013 + 5001 severity @@ -10891,11 +10906,11 @@ error_message - 400 + 399 full_error_message - 4213 + 4202 location @@ -10913,7 +10928,7 @@ 1 2 - 5013 + 5001 @@ -10929,7 +10944,7 @@ 1 2 - 5013 + 5001 @@ -10945,7 +10960,7 @@ 1 2 - 5013 + 5001 @@ -10961,7 +10976,7 @@ 1 2 - 5013 + 5001 @@ -10977,7 +10992,7 @@ 1 2 - 5013 + 5001 @@ -11209,7 +11224,7 @@ 1 2 - 400 + 399 @@ -11225,7 +11240,7 @@ 1 2 - 400 + 399 @@ -11303,7 +11318,7 @@ 1 2 - 4194 + 4183 43 @@ -11324,7 +11339,7 @@ 1 2 - 4213 + 4202 @@ -11340,7 +11355,7 @@ 1 2 - 4213 + 4202 @@ -11356,7 +11371,7 @@ 1 2 - 4213 + 4202 @@ -11372,7 +11387,7 @@ 1 2 - 4213 + 4202 @@ -11507,15 +11522,15 @@ files - 123134 + 123139 id - 123134 + 123139 name - 123134 + 123139 @@ -11529,7 +11544,7 @@ 1 2 - 123134 + 123139 @@ -11545,7 +11560,7 @@ 1 2 - 123134 + 123139 @@ -11555,15 +11570,15 @@ folders - 16324 + 16325 id - 16324 + 16325 name - 16324 + 16325 @@ -11577,7 +11592,7 @@ 1 2 - 16324 + 16325 @@ -11593,7 +11608,7 @@ 1 2 - 16324 + 16325 @@ -11603,15 +11618,15 @@ containerparent - 138526 + 138532 parent - 16324 + 16325 child - 138526 + 138532 @@ -11625,12 +11640,12 @@ 1 2 - 7462 + 7463 2 3 - 3264 + 3265 3 @@ -11666,7 +11681,7 @@ 1 2 - 138526 + 138532 @@ -11676,11 +11691,11 @@ fileannotations - 5084962 + 5083033 id - 4856 + 4855 kind @@ -11688,11 +11703,11 @@ name - 54298 + 54277 value - 45647 + 45630 @@ -11711,7 +11726,7 @@ 2 3 - 4688 + 4687 @@ -11772,7 +11787,7 @@ 936 937 - 1410 + 1409 1083 @@ -11838,7 +11853,7 @@ 1501 1502 - 1410 + 1409 1504 @@ -11848,7 +11863,7 @@ 1972 4080 - 235 + 234 @@ -11927,57 +11942,57 @@ 1 2 - 8784 + 8781 2 3 - 6166 + 6163 3 5 - 4140 + 4139 5 9 - 4230 + 4228 9 14 - 3950 + 3948 14 18 - 4140 + 4139 18 20 - 4677 + 4676 20 34 - 4185 + 4183 34 128 - 4465 + 4463 128 229 - 4084 + 4083 229 387 - 4207 + 4206 387 @@ -11998,7 +12013,7 @@ 1 2 - 54298 + 54277 @@ -12014,62 +12029,62 @@ 1 2 - 8796 + 8792 2 3 - 7990 + 7987 3 4 - 2540 + 2539 4 6 - 4476 + 4474 6 9 - 4095 + 4094 9 14 - 4174 + 4172 14 17 - 4095 + 4094 17 22 - 4554 + 4552 22 41 - 4174 + 4172 41 82 - 4129 + 4127 82 157 - 4073 + 4071 158 1895 - 1197 + 1196 @@ -12085,62 +12100,62 @@ 1 2 - 7095 + 7092 2 5 - 2215 + 2214 5 8 - 3301 + 3300 8 15 - 3502 + 3501 15 17 - 2517 + 2516 17 19 - 4107 + 4105 19 34 - 3301 + 3300 34 189 - 3592 + 3590 189 201 - 3581 + 3579 201 266 - 3525 + 3523 266 321 - 3648 + 3646 322 399 - 3916 + 3915 399 @@ -12161,7 +12176,7 @@ 1 2 - 45636 + 45619 2 @@ -12182,67 +12197,67 @@ 1 2 - 7117 + 7114 2 5 - 2562 + 2561 5 8 - 3480 + 3479 8 15 - 3525 + 3523 15 17 - 2808 + 2807 17 19 - 3558 + 3557 19 29 - 3480 + 3479 29 39 - 3637 + 3635 39 48 - 3581 + 3579 48 74 - 3536 + 3534 74 102 - 3424 + 3423 102 119 - 3569 + 3568 119 146 - 1365 + 1364 @@ -12252,15 +12267,15 @@ inmacroexpansion - 109785545 + 109784721 id - 18028412 + 18028276 inv - 2700329 + 2700307 @@ -12274,37 +12289,37 @@ 1 3 - 1582049 + 1582036 3 5 - 1077861 + 1077853 5 6 - 1184952 + 1184943 6 7 - 4820205 + 4820169 7 8 - 6386332 + 6386284 8 9 - 2605405 + 2605386 9 21 - 371604 + 371602 @@ -12320,32 +12335,32 @@ 1 2 - 378447 + 378443 2 3 - 544135 + 544126 3 4 - 351535 + 351533 4 7 - 200670 + 200669 7 8 - 207164 + 207162 8 9 - 241902 + 241901 9 @@ -12355,17 +12370,17 @@ 10 11 - 325505 + 325503 11 337 - 224864 + 224867 339 423 - 206365 + 206363 423 @@ -12380,15 +12395,15 @@ affectedbymacroexpansion - 35691161 + 35690892 id - 5157043 + 5157002 inv - 2784936 + 2784914 @@ -12402,37 +12417,37 @@ 1 2 - 2816098 + 2816076 2 3 - 560161 + 560157 3 4 - 264922 + 264920 4 5 - 565827 + 565823 5 12 - 391926 + 391923 12 50 - 407425 + 407422 50 9900 - 150681 + 150680 @@ -12448,62 +12463,62 @@ 1 4 - 229130 + 229127 4 7 - 231802 + 231800 7 9 - 220491 + 220489 9 12 - 251102 + 251100 12 13 - 333997 + 333995 13 14 - 165598 + 165596 14 15 - 298861 + 298859 15 16 - 121850 + 121849 16 17 - 276624 + 276622 17 18 - 146949 + 146948 18 20 - 252149 + 252148 20 25 - 208991 + 208989 25 @@ -12518,19 +12533,19 @@ macroinvocations - 33202987 + 33190389 id - 33202987 + 33190389 macro_id - 78795 + 78765 location - 753796 + 753510 kind @@ -12548,7 +12563,7 @@ 1 2 - 33202987 + 33190389 @@ -12564,7 +12579,7 @@ 1 2 - 33202987 + 33190389 @@ -12580,7 +12595,7 @@ 1 2 - 33202987 + 33190389 @@ -12596,52 +12611,52 @@ 1 2 - 16114 + 16108 2 3 - 16428 + 16421 3 4 - 3088 + 3087 4 5 - 5226 + 5224 5 8 - 5640 + 5638 8 13 - 6054 + 6051 13 26 - 6121 + 6119 26 61 - 6009 + 6007 61 199 - 5919 + 5917 199 1697 - 5964 + 5962 1716 @@ -12662,37 +12677,37 @@ 1 2 - 42100 + 42084 2 3 - 10306 + 10302 3 4 - 5114 + 5112 4 6 - 6781 + 6779 6 13 - 6423 + 6421 13 66 - 5953 + 5951 66 3614 - 2115 + 2114 @@ -12708,12 +12723,12 @@ 1 2 - 73110 + 73082 2 3 - 5684 + 5682 @@ -12729,37 +12744,37 @@ 1 2 - 278787 + 278681 2 3 - 168154 + 168090 3 4 - 70144 + 70117 4 5 - 59770 + 59747 5 9 - 69786 + 69759 9 21 - 58595 + 58573 21 244764 - 48557 + 48538 @@ -12775,12 +12790,12 @@ 1 2 - 708025 + 707756 2 350 - 45770 + 45753 @@ -12796,7 +12811,7 @@ 1 2 - 753796 + 753510 @@ -12869,15 +12884,15 @@ macroparent - 29691721 + 29680455 id - 29691721 + 29680455 parent_id - 23085760 + 23077000 @@ -12891,7 +12906,7 @@ 1 2 - 29691721 + 29680455 @@ -12907,17 +12922,17 @@ 1 2 - 17837443 + 17830675 2 3 - 4420895 + 4419217 3 88 - 827421 + 827107 @@ -12927,15 +12942,15 @@ macrolocationbind - 4044034 + 4043998 id - 2831314 + 2831290 location - 2021186 + 2021169 @@ -12949,17 +12964,17 @@ 1 2 - 2230051 + 2230032 2 3 - 341145 + 341142 3 7 - 230539 + 230537 7 @@ -12980,22 +12995,22 @@ 1 2 - 1611118 + 1611104 2 3 - 177692 + 177691 3 8 - 156878 + 156877 8 723 - 75497 + 75496 @@ -13005,11 +13020,11 @@ macro_argument_unexpanded - 83818746 + 83786944 invocation - 25989002 + 25979141 argument_index @@ -13017,7 +13032,7 @@ text - 315549 + 315429 @@ -13031,22 +13046,22 @@ 1 2 - 7368800 + 7366004 2 3 - 10582220 + 10578205 3 4 - 6086111 + 6083801 4 67 - 1951870 + 1951130 @@ -13062,22 +13077,22 @@ 1 2 - 7438351 + 7435529 2 3 - 10727500 + 10723430 3 4 - 5921224 + 5918977 4 67 - 1901925 + 1901204 @@ -13093,7 +13108,7 @@ 41230 41231 - 649 + 648 41432 @@ -13119,7 +13134,7 @@ 2 3 - 649 + 648 13 @@ -13145,57 +13160,57 @@ 1 2 - 34770 + 34756 2 3 - 60732 + 60709 3 4 - 17592 + 17585 4 5 - 44674 + 44657 5 7 - 23713 + 23704 7 12 - 18364 + 18357 12 16 - 21430 + 21422 16 23 - 24765 + 24756 23 42 - 24116 + 24107 42 129 - 23870 + 23861 129 522417 - 21520 + 21511 @@ -13211,17 +13226,17 @@ 1 2 - 228204 + 228118 2 3 - 77150 + 77120 3 9 - 10194 + 10191 @@ -13231,11 +13246,11 @@ macro_argument_expanded - 83818746 + 83786944 invocation - 25989002 + 25979141 argument_index @@ -13243,7 +13258,7 @@ text - 191229 + 191157 @@ -13257,22 +13272,22 @@ 1 2 - 7368800 + 7366004 2 3 - 10582220 + 10578205 3 4 - 6086111 + 6083801 4 67 - 1951870 + 1951130 @@ -13288,22 +13303,22 @@ 1 2 - 10597171 + 10593150 2 3 - 9122547 + 9119085 3 4 - 5163131 + 5161172 4 9 - 1106152 + 1105732 @@ -13319,7 +13334,7 @@ 41230 41231 - 649 + 648 41432 @@ -13371,62 +13386,62 @@ 1 2 - 20613 + 20605 2 3 - 36985 + 36971 3 4 - 8986 + 8982 4 5 - 16237 + 16231 5 6 - 2394 + 2393 6 7 - 22650 + 22641 7 9 - 14671 + 14665 9 14 - 11940 + 11936 14 19 - 14425 + 14419 19 48 - 14346 + 14341 48 151 - 14357 + 14352 152 1060462 - 13619 + 13614 @@ -13442,17 +13457,17 @@ 1 2 - 96778 + 96742 2 3 - 80171 + 80141 3 66 - 14279 + 14274 @@ -13462,19 +13477,19 @@ functions - 4646000 + 4646200 id - 4646000 + 4646200 name - 1916982 + 1917064 kind - 3264 + 3265 @@ -13488,7 +13503,7 @@ 1 2 - 4646000 + 4646200 @@ -13504,7 +13519,7 @@ 1 2 - 4646000 + 4646200 @@ -13520,22 +13535,22 @@ 1 2 - 1504201 + 1504266 2 3 - 152052 + 152059 3 5 - 150186 + 150193 5 1676 - 110541 + 110546 @@ -13551,7 +13566,7 @@ 1 2 - 1916516 + 1916598 2 @@ -13658,15 +13673,15 @@ function_entry_point - 1156719 + 1156769 id - 1146924 + 1146973 entry_point - 1156719 + 1156769 @@ -13680,12 +13695,12 @@ 1 2 - 1137129 + 1137178 2 3 - 9794 + 9795 @@ -13701,7 +13716,7 @@ 1 2 - 1156719 + 1156769 @@ -13711,15 +13726,15 @@ function_return_type - 4651131 + 4651331 id - 4646000 + 4646200 return_type - 987409 + 987451 @@ -13733,7 +13748,7 @@ 1 2 - 4640870 + 4641069 2 @@ -13754,22 +13769,22 @@ 1 2 - 510262 + 510284 2 3 - 375933 + 375949 3 10 - 75093 + 75096 10 2516 - 26119 + 26120 @@ -14091,59 +14106,59 @@ purefunctions - 100917 + 100915 id - 100917 + 100915 function_deleted - 137593 + 137599 id - 137593 + 137599 function_defaulted - 73694 + 73697 id - 73694 + 73697 function_prototyped - 4554116 + 4554311 id - 4554116 + 4554311 member_function_this_type - 546094 + 545957 id - 546094 + 545957 this_type - 187436 + 187389 @@ -14157,7 +14172,7 @@ 1 2 - 546094 + 545957 @@ -14173,32 +14188,32 @@ 1 2 - 67674 + 67657 2 3 - 44849 + 44838 3 4 - 30201 + 30193 4 5 - 15344 + 15340 5 7 - 15379 + 15375 7 66 - 13987 + 13983 @@ -14208,27 +14223,27 @@ fun_decls - 5014938 + 5015153 id - 5009807 + 5010023 function - 4502343 + 4502537 type_id - 986009 + 986052 name - 1819500 + 1819579 location - 3418385 + 3418532 @@ -14242,7 +14257,7 @@ 1 2 - 5009807 + 5010023 @@ -14258,7 +14273,7 @@ 1 2 - 5004676 + 5004892 2 @@ -14279,7 +14294,7 @@ 1 2 - 5009807 + 5010023 @@ -14295,7 +14310,7 @@ 1 2 - 5009807 + 5010023 @@ -14311,17 +14326,17 @@ 1 2 - 4073704 + 4073879 2 3 - 355877 + 355893 3 7 - 72761 + 72764 @@ -14337,12 +14352,12 @@ 1 2 - 4462697 + 4462889 2 3 - 39645 + 39647 @@ -14358,7 +14373,7 @@ 1 2 - 4502343 + 4502537 @@ -14374,12 +14389,12 @@ 1 2 - 4130141 + 4130318 2 4 - 371269 + 371285 5 @@ -14400,22 +14415,22 @@ 1 2 - 435635 + 435654 2 3 - 438433 + 438452 3 8 - 75093 + 75096 8 2761 - 36847 + 36848 @@ -14431,22 +14446,22 @@ 1 2 - 519590 + 519613 2 3 - 367538 + 367554 3 11 - 75559 + 75563 11 2477 - 23320 + 23321 @@ -14462,17 +14477,17 @@ 1 2 - 858677 + 858714 2 5 - 89552 + 89556 5 823 - 37779 + 37781 @@ -14488,22 +14503,22 @@ 1 2 - 754666 + 754698 2 3 - 131530 + 131535 3 10 - 74627 + 74630 10 2030 - 25186 + 25187 @@ -14519,27 +14534,27 @@ 1 2 - 1234611 + 1234664 2 3 - 266791 + 266803 3 4 - 80690 + 80693 4 6 - 136660 + 136666 6 1710 - 100746 + 100750 @@ -14555,22 +14570,22 @@ 1 2 - 1413716 + 1413777 2 3 - 151119 + 151126 3 5 - 144123 + 144129 5 1660 - 110541 + 110546 @@ -14586,17 +14601,17 @@ 1 2 - 1601216 + 1601285 2 4 - 134795 + 134800 4 930 - 83489 + 83492 @@ -14612,27 +14627,27 @@ 1 2 - 1255600 + 1255654 2 3 - 293377 + 293390 3 4 - 79757 + 79761 4 8 - 137593 + 137599 8 653 - 53171 + 53174 @@ -14648,17 +14663,17 @@ 1 2 - 2962227 + 2962355 2 4 - 296176 + 296188 4 55 - 159981 + 159988 @@ -14674,17 +14689,17 @@ 1 2 - 3029392 + 3029522 2 6 - 262593 + 262605 6 55 - 126399 + 126405 @@ -14700,12 +14715,12 @@ 1 2 - 3208496 + 3208634 2 25 - 209888 + 209897 @@ -14721,12 +14736,12 @@ 1 2 - 3246276 + 3246416 2 13 - 172108 + 172116 @@ -14736,22 +14751,22 @@ fun_def - 1935172 + 1935256 id - 1935172 + 1935256 fun_specialized - 26119 + 26120 id - 26119 + 26120 @@ -14769,11 +14784,11 @@ fun_decl_specifiers - 2903925 + 2904050 id - 1687970 + 1688043 name @@ -14791,17 +14806,17 @@ 1 2 - 490672 + 490693 2 3 - 1178641 + 1178691 3 4 - 18656 + 18657 @@ -14973,26 +14988,26 @@ fun_decl_empty_throws - 1933773 + 1933856 fun_decl - 1933773 + 1933856 fun_decl_noexcept - 60559 + 60528 fun_decl - 60559 + 60528 constant - 60456 + 60424 @@ -15006,7 +15021,7 @@ 1 2 - 60559 + 60528 @@ -15022,7 +15037,7 @@ 1 2 - 60352 + 60321 2 @@ -15037,11 +15052,11 @@ fun_decl_empty_noexcept - 869871 + 869909 fun_decl - 869871 + 869909 @@ -15146,11 +15161,11 @@ param_decl_bind - 7379682 + 7380000 id - 7379682 + 7380000 index @@ -15158,7 +15173,7 @@ fun_decl - 4222958 + 4223140 @@ -15172,7 +15187,7 @@ 1 2 - 7379682 + 7380000 @@ -15188,7 +15203,7 @@ 1 2 - 7379682 + 7380000 @@ -15366,22 +15381,22 @@ 1 2 - 2363345 + 2363447 2 3 - 1060637 + 1060682 3 4 - 502333 + 502354 4 18 - 296642 + 296655 @@ -15397,22 +15412,22 @@ 1 2 - 2363345 + 2363447 2 3 - 1060637 + 1060682 3 4 - 502333 + 502354 4 18 - 296642 + 296655 @@ -15422,27 +15437,27 @@ var_decls - 8493958 + 8494323 id - 8423062 + 8423424 variable - 7411865 + 7412184 type_id - 2384334 + 2384436 name - 666979 + 667007 location - 5306916 + 5307144 @@ -15456,7 +15471,7 @@ 1 2 - 8423062 + 8423424 @@ -15472,12 +15487,12 @@ 1 2 - 8354965 + 8355324 2 3 - 68097 + 68100 @@ -15493,7 +15508,7 @@ 1 2 - 8423062 + 8423424 @@ -15509,7 +15524,7 @@ 1 2 - 8420264 + 8420626 2 @@ -15530,17 +15545,17 @@ 1 2 - 6560651 + 6560933 2 3 - 697762 + 697792 3 7 - 153451 + 153458 @@ -15556,12 +15571,12 @@ 1 2 - 7240690 + 7241001 2 4 - 171175 + 171183 @@ -15577,12 +15592,12 @@ 1 2 - 7296660 + 7296974 2 3 - 115205 + 115210 @@ -15598,12 +15613,12 @@ 1 2 - 6867088 + 6867383 2 4 - 544777 + 544800 @@ -15619,27 +15634,27 @@ 1 2 - 1469220 + 1469283 2 3 - 509329 + 509351 3 4 - 97948 + 97952 4 7 - 187034 + 187042 7 762 - 120802 + 120807 @@ -15655,22 +15670,22 @@ 1 2 - 1602616 + 1602684 2 3 - 484609 + 484630 3 7 - 186567 + 186575 7 724 - 110541 + 110546 @@ -15686,17 +15701,17 @@ 1 2 - 1877336 + 1877417 2 3 - 384795 + 384812 3 128 - 122201 + 122207 @@ -15712,22 +15727,22 @@ 1 2 - 1705228 + 1705301 2 3 - 401586 + 401604 3 8 - 188433 + 188441 8 592 - 89086 + 89089 @@ -15743,37 +15758,37 @@ 1 2 - 340952 + 340967 2 3 - 86753 + 86757 3 4 - 48507 + 48509 4 6 - 51772 + 51774 6 12 - 52238 + 52241 12 33 - 50373 + 50375 34 3223 - 36380 + 36382 @@ -15789,37 +15804,37 @@ 1 2 - 368471 + 368486 2 3 - 77891 + 77895 3 4 - 45242 + 45244 4 6 - 49440 + 49442 6 14 - 53171 + 53174 14 56 - 50839 + 50841 56 3140 - 21921 + 21922 @@ -15835,27 +15850,27 @@ 1 2 - 456624 + 456643 2 3 - 93750 + 93754 3 5 - 46641 + 46643 5 19 - 50839 + 50841 19 1927 - 19123 + 19124 @@ -15871,32 +15886,32 @@ 1 2 - 378732 + 378748 2 3 - 90485 + 90489 3 5 - 59701 + 59704 5 9 - 51306 + 51308 9 21 - 50373 + 50375 21 1010 - 36380 + 36382 @@ -15912,17 +15927,17 @@ 1 2 - 4492082 + 4492275 2 3 - 531251 + 531274 3 1735 - 283582 + 283595 @@ -15938,17 +15953,17 @@ 1 2 - 4881075 + 4881285 2 17 - 415112 + 415130 17 1731 - 10727 + 10728 @@ -15964,12 +15979,12 @@ 1 2 - 4957102 + 4957315 2 1513 - 349814 + 349829 @@ -15985,7 +16000,7 @@ 1 2 - 5297588 + 5297815 2 @@ -16000,22 +16015,22 @@ var_def - 4024730 + 4024903 id - 4024730 + 4024903 var_decl_specifiers - 310635 + 310648 id - 310635 + 310648 name @@ -16033,7 +16048,7 @@ 1 2 - 310635 + 310648 @@ -16080,19 +16095,19 @@ type_decls - 3242079 + 3242218 id - 3242079 + 3242218 type_id - 3191705 + 3191843 location - 3163254 + 3163390 @@ -16106,7 +16121,7 @@ 1 2 - 3242079 + 3242218 @@ -16122,7 +16137,7 @@ 1 2 - 3242079 + 3242218 @@ -16138,12 +16153,12 @@ 1 2 - 3150194 + 3150330 2 5 - 41511 + 41513 @@ -16159,12 +16174,12 @@ 1 2 - 3150194 + 3150330 2 5 - 41511 + 41513 @@ -16180,12 +16195,12 @@ 1 2 - 3123142 + 3123276 2 20 - 40112 + 40113 @@ -16201,12 +16216,12 @@ 1 2 - 3123142 + 3123276 2 20 - 40112 + 40113 @@ -16216,33 +16231,33 @@ type_def - 2624540 + 2624653 id - 2624540 + 2624653 type_decl_top - 743005 + 743037 type_decl - 743005 + 743037 namespace_decls - 311530 + 311523 id - 311530 + 311523 namespace_id @@ -16250,11 +16265,11 @@ location - 311530 + 311523 bodylocation - 311530 + 311523 @@ -16268,7 +16283,7 @@ 1 2 - 311530 + 311523 @@ -16284,7 +16299,7 @@ 1 2 - 311530 + 311523 @@ -16300,7 +16315,7 @@ 1 2 - 311530 + 311523 @@ -16514,7 +16529,7 @@ 1 2 - 311530 + 311523 @@ -16530,7 +16545,7 @@ 1 2 - 311530 + 311523 @@ -16546,7 +16561,7 @@ 1 2 - 311530 + 311523 @@ -16562,7 +16577,7 @@ 1 2 - 311530 + 311523 @@ -16578,7 +16593,7 @@ 1 2 - 311530 + 311523 @@ -16594,7 +16609,7 @@ 1 2 - 311530 + 311523 @@ -16604,19 +16619,19 @@ usings - 369403 + 369419 id - 369403 + 369419 element_id - 315299 + 315312 location - 247668 + 247679 @@ -16630,7 +16645,7 @@ 1 2 - 369403 + 369419 @@ -16646,7 +16661,7 @@ 1 2 - 369403 + 369419 @@ -16662,12 +16677,12 @@ 1 2 - 263060 + 263071 2 3 - 50839 + 50841 3 @@ -16688,12 +16703,12 @@ 1 2 - 263060 + 263071 2 3 - 50839 + 50841 3 @@ -16714,22 +16729,22 @@ 1 2 - 202425 + 202434 2 4 - 10727 + 10728 4 5 - 31250 + 31251 5 11 - 3264 + 3265 @@ -16745,22 +16760,22 @@ 1 2 - 202425 + 202434 2 4 - 10727 + 10728 4 5 - 31250 + 31251 5 11 - 3264 + 3265 @@ -16770,15 +16785,15 @@ using_container - 462754 + 462579 parent - 10955 + 10951 child - 293425 + 293313 @@ -16792,7 +16807,7 @@ 1 2 - 3267 + 3266 2 @@ -16802,17 +16817,17 @@ 4 6 - 414 + 413 6 7 - 2473 + 2472 7 17 - 895 + 894 19 @@ -16848,22 +16863,22 @@ 1 2 - 216420 + 216338 2 3 - 51276 + 51257 3 11 - 23612 + 23603 13 41 - 2115 + 2114 @@ -16873,15 +16888,15 @@ static_asserts - 134655 + 134652 id - 134655 + 134652 condition - 134655 + 134652 message @@ -16889,7 +16904,7 @@ location - 17564 + 17563 enclosing @@ -16907,7 +16922,7 @@ 1 2 - 134655 + 134652 @@ -16923,7 +16938,7 @@ 1 2 - 134655 + 134652 @@ -16939,7 +16954,7 @@ 1 2 - 134655 + 134652 @@ -16955,7 +16970,7 @@ 1 2 - 134655 + 134652 @@ -16971,7 +16986,7 @@ 1 2 - 134655 + 134652 @@ -16987,7 +17002,7 @@ 1 2 - 134655 + 134652 @@ -17003,7 +17018,7 @@ 1 2 - 134655 + 134652 @@ -17019,7 +17034,7 @@ 1 2 - 134655 + 134652 @@ -17035,7 +17050,7 @@ 1 2 - 22236 + 22235 2 @@ -17076,7 +17091,7 @@ 1 2 - 22236 + 22235 2 @@ -17117,7 +17132,7 @@ 1 2 - 28006 + 28005 2 @@ -17481,15 +17496,15 @@ params - 6739755 + 6740045 id - 6576042 + 6576325 function - 3879674 + 3879840 index @@ -17497,7 +17512,7 @@ type_id - 2188904 + 2188998 @@ -17511,7 +17526,7 @@ 1 2 - 6576042 + 6576325 @@ -17527,7 +17542,7 @@ 1 2 - 6576042 + 6576325 @@ -17543,12 +17558,12 @@ 1 2 - 6452441 + 6452719 2 4 - 123601 + 123606 @@ -17564,22 +17579,22 @@ 1 2 - 2257002 + 2257099 2 3 - 951961 + 952002 3 4 - 429571 + 429590 4 18 - 241138 + 241149 @@ -17595,22 +17610,22 @@ 1 2 - 2257002 + 2257099 2 3 - 951961 + 952002 3 4 - 429571 + 429590 4 18 - 241138 + 241149 @@ -17626,22 +17641,22 @@ 1 2 - 2555043 + 2555153 2 3 - 826028 + 826063 3 4 - 346082 + 346097 4 12 - 152519 + 152525 @@ -17895,22 +17910,22 @@ 1 2 - 1488343 + 1488407 2 3 - 440299 + 440318 3 8 - 170242 + 170250 8 518 - 90018 + 90022 @@ -17926,22 +17941,22 @@ 1 2 - 1708026 + 1708100 2 3 - 248134 + 248145 3 9 - 168377 + 168384 9 502 - 64365 + 64368 @@ -17957,17 +17972,17 @@ 1 2 - 1761664 + 1761740 2 3 - 348415 + 348430 3 13 - 78824 + 78828 @@ -17977,11 +17992,11 @@ overrides - 125866 + 125864 new - 122890 + 122888 old @@ -17999,7 +18014,7 @@ 1 2 - 119922 + 119920 2 @@ -18060,19 +18075,19 @@ membervariables - 1056556 + 1056548 id - 1054758 + 1054750 type_id - 327746 + 327744 name - 451645 + 451642 @@ -18086,7 +18101,7 @@ 1 2 - 1053040 + 1053032 2 @@ -18107,7 +18122,7 @@ 1 2 - 1054758 + 1054750 @@ -18123,7 +18138,7 @@ 1 2 - 243043 + 243041 2 @@ -18154,12 +18169,12 @@ 1 2 - 255269 + 255267 2 3 - 46467 + 46466 3 @@ -18185,17 +18200,17 @@ 1 2 - 295343 + 295341 2 3 - 86541 + 86540 3 5 - 41193 + 41192 5 @@ -18216,12 +18231,12 @@ 1 2 - 367860 + 367858 2 3 - 51741 + 51740 3 @@ -18407,19 +18422,19 @@ localvariables - 576906 + 576895 id - 576906 + 576895 type_id - 37597 + 37592 name - 90649 + 90648 @@ -18433,7 +18448,7 @@ 1 2 - 576906 + 576895 @@ -18449,7 +18464,7 @@ 1 2 - 576906 + 576895 @@ -18470,12 +18485,12 @@ 2 3 - 5368 + 5372 3 4 - 2467 + 2459 4 @@ -18485,12 +18500,12 @@ 7 18 - 2851 + 2855 18 15849 - 2496 + 2492 @@ -18506,17 +18521,17 @@ 1 2 - 26772 + 26775 2 3 - 4572 + 4568 3 5 - 2921 + 2917 5 @@ -18542,12 +18557,12 @@ 1 2 - 57095 + 57094 2 3 - 14301 + 14300 3 @@ -18557,7 +18572,7 @@ 5 15 - 6990 + 6989 15 @@ -18578,7 +18593,7 @@ 1 2 - 76577 + 76576 2 @@ -18598,11 +18613,11 @@ autoderivation - 148035 + 147957 var - 148035 + 147957 derivation_type @@ -18620,7 +18635,7 @@ 1 2 - 148035 + 147957 @@ -18666,15 +18681,15 @@ orphaned_variables - 37368 + 37359 var - 37368 + 37359 function - 32845 + 32837 @@ -18688,7 +18703,7 @@ 1 2 - 37368 + 37359 @@ -18704,7 +18719,7 @@ 1 2 - 30792 + 30785 2 @@ -18719,11 +18734,11 @@ enumconstants - 241684 + 241682 id - 241684 + 241682 parent @@ -18739,11 +18754,11 @@ name - 241405 + 241403 location - 221587 + 221585 @@ -18757,7 +18772,7 @@ 1 2 - 241684 + 241682 @@ -18773,7 +18788,7 @@ 1 2 - 241684 + 241682 @@ -18789,7 +18804,7 @@ 1 2 - 241684 + 241682 @@ -18805,7 +18820,7 @@ 1 2 - 241684 + 241682 @@ -18821,7 +18836,7 @@ 1 2 - 241684 + 241682 @@ -19432,7 +19447,7 @@ 1 2 - 241125 + 241123 2 @@ -19453,7 +19468,7 @@ 1 2 - 241125 + 241123 2 @@ -19474,7 +19489,7 @@ 1 2 - 241405 + 241403 @@ -19490,7 +19505,7 @@ 1 2 - 241405 + 241403 @@ -19506,7 +19521,7 @@ 1 2 - 241125 + 241123 2 @@ -19527,7 +19542,7 @@ 1 2 - 220828 + 220826 2 @@ -19548,7 +19563,7 @@ 1 2 - 221587 + 221585 @@ -19564,7 +19579,7 @@ 1 2 - 220828 + 220826 2 @@ -19585,7 +19600,7 @@ 1 2 - 221587 + 221585 @@ -19601,7 +19616,7 @@ 1 2 - 220828 + 220826 2 @@ -19616,23 +19631,23 @@ builtintypes - 26119 + 26120 id - 26119 + 26120 name - 26119 + 26120 kind - 26119 + 26120 size - 3264 + 3265 sign @@ -19654,7 +19669,7 @@ 1 2 - 26119 + 26120 @@ -19670,7 +19685,7 @@ 1 2 - 26119 + 26120 @@ -19686,7 +19701,7 @@ 1 2 - 26119 + 26120 @@ -19702,7 +19717,7 @@ 1 2 - 26119 + 26120 @@ -19718,7 +19733,7 @@ 1 2 - 26119 + 26120 @@ -19734,7 +19749,7 @@ 1 2 - 26119 + 26120 @@ -19750,7 +19765,7 @@ 1 2 - 26119 + 26120 @@ -19766,7 +19781,7 @@ 1 2 - 26119 + 26120 @@ -19782,7 +19797,7 @@ 1 2 - 26119 + 26120 @@ -19798,7 +19813,7 @@ 1 2 - 26119 + 26120 @@ -19814,7 +19829,7 @@ 1 2 - 26119 + 26120 @@ -19830,7 +19845,7 @@ 1 2 - 26119 + 26120 @@ -19846,7 +19861,7 @@ 1 2 - 26119 + 26120 @@ -19862,7 +19877,7 @@ 1 2 - 26119 + 26120 @@ -19878,7 +19893,7 @@ 1 2 - 26119 + 26120 @@ -20323,15 +20338,15 @@ derivedtypes - 4330701 + 4330887 id - 4330701 + 4330887 name - 2160919 + 2161012 kind @@ -20339,7 +20354,7 @@ type_id - 2670715 + 2670830 @@ -20353,7 +20368,7 @@ 1 2 - 4330701 + 4330887 @@ -20369,7 +20384,7 @@ 1 2 - 4330701 + 4330887 @@ -20385,7 +20400,7 @@ 1 2 - 4330701 + 4330887 @@ -20401,17 +20416,17 @@ 1 2 - 1899258 + 1899340 2 5 - 164645 + 164653 5 1153 - 97015 + 97019 @@ -20427,7 +20442,7 @@ 1 2 - 2159986 + 2160079 2 @@ -20448,17 +20463,17 @@ 1 2 - 1899258 + 1899340 2 5 - 164645 + 164653 5 1135 - 97015 + 97019 @@ -20597,22 +20612,22 @@ 1 2 - 1651123 + 1651194 2 3 - 560169 + 560193 3 4 - 354012 + 354027 4 72 - 105410 + 105415 @@ -20628,22 +20643,22 @@ 1 2 - 1662317 + 1662389 2 3 - 552706 + 552730 3 4 - 351213 + 351228 4 72 - 104477 + 104482 @@ -20659,22 +20674,22 @@ 1 2 - 1655321 + 1655392 2 3 - 563900 + 563924 3 4 - 353079 + 353094 4 6 - 98414 + 98418 @@ -20684,11 +20699,11 @@ pointerishsize - 3210362 + 3210500 id - 3210362 + 3210500 size @@ -20710,7 +20725,7 @@ 1 2 - 3210362 + 3210500 @@ -20726,7 +20741,7 @@ 1 2 - 3210362 + 3210500 @@ -20800,19 +20815,19 @@ arraysizes - 88153 + 88157 id - 88153 + 88157 num_elements - 31716 + 31717 bytesize - 33115 + 33117 alignment @@ -20830,7 +20845,7 @@ 1 2 - 88153 + 88157 @@ -20846,7 +20861,7 @@ 1 2 - 88153 + 88157 @@ -20862,7 +20877,7 @@ 1 2 - 88153 + 88157 @@ -20883,7 +20898,7 @@ 2 3 - 23787 + 23788 3 @@ -20914,7 +20929,7 @@ 1 2 - 26585 + 26587 2 @@ -20940,7 +20955,7 @@ 1 2 - 26585 + 26587 2 @@ -20971,12 +20986,12 @@ 2 3 - 23787 + 23788 3 4 - 3264 + 3265 4 @@ -21002,7 +21017,7 @@ 1 2 - 27518 + 27519 2 @@ -21028,7 +21043,7 @@ 1 2 - 27518 + 27519 2 @@ -21136,15 +21151,15 @@ typedefbase - 1672769 + 1672135 id - 1672769 + 1672135 type_id - 787413 + 787114 @@ -21158,7 +21173,7 @@ 1 2 - 1672769 + 1672135 @@ -21174,22 +21189,22 @@ 1 2 - 612790 + 612558 2 3 - 82588 + 82557 3 6 - 61505 + 61481 6 5437 - 30528 + 30517 @@ -21199,19 +21214,19 @@ decltypes - 166216 + 165808 id - 16699 + 16658 expr - 166216 + 165808 base_type - 9970 + 9945 parentheses_would_change_meaning @@ -21229,37 +21244,37 @@ 1 2 - 5090 + 5077 2 3 - 6195 + 6180 3 5 - 1105 + 1102 5 12 - 1296 + 1293 12 18 - 1353 + 1350 18 46 - 1258 + 1255 51 740 - 400 + 399 @@ -21275,7 +21290,7 @@ 1 2 - 16699 + 16658 @@ -21291,7 +21306,7 @@ 1 2 - 16699 + 16658 @@ -21307,7 +21322,7 @@ 1 2 - 166216 + 165808 @@ -21323,7 +21338,7 @@ 1 2 - 166216 + 165808 @@ -21339,7 +21354,7 @@ 1 2 - 166216 + 165808 @@ -21355,17 +21370,17 @@ 1 2 - 7244 + 7226 2 3 - 2268 + 2263 4 149 - 457 + 456 @@ -21381,32 +21396,32 @@ 1 2 - 724 + 722 2 3 - 6138 + 6123 3 4 - 343 + 342 4 5 - 972 + 969 5 7 - 762 + 760 7 32 - 800 + 798 32 @@ -21427,7 +21442,7 @@ 1 2 - 9970 + 9945 @@ -21485,15 +21500,15 @@ usertypes - 5229957 + 5230182 id - 5229957 + 5230182 name - 1351216 + 1351274 kind @@ -21511,7 +21526,7 @@ 1 2 - 5229957 + 5230182 @@ -21527,7 +21542,7 @@ 1 2 - 5229957 + 5230182 @@ -21543,27 +21558,27 @@ 1 2 - 982745 + 982787 2 3 - 153451 + 153458 3 7 - 104477 + 104482 7 61 - 101679 + 101683 65 874 - 8861 + 8862 @@ -21579,17 +21594,17 @@ 1 2 - 1210823 + 1210876 2 3 - 125000 + 125005 3 7 - 15391 + 15392 @@ -21731,11 +21746,11 @@ usertypesize - 1705694 + 1705768 id - 1705694 + 1705768 size @@ -21757,7 +21772,7 @@ 1 2 - 1705694 + 1705768 @@ -21773,7 +21788,7 @@ 1 2 - 1705694 + 1705768 @@ -21789,7 +21804,7 @@ 1 2 - 3264 + 3265 2 @@ -21937,22 +21952,22 @@ usertype_final - 9420 + 9415 id - 9420 + 9415 usertype_uuid - 36639 + 36638 id - 36639 + 36638 uuid @@ -21970,7 +21985,7 @@ 1 2 - 36639 + 36638 @@ -21986,7 +22001,7 @@ 1 2 - 35890 + 35889 2 @@ -22001,15 +22016,15 @@ mangled_name - 9477636 + 9478043 id - 9477636 + 9478043 mangled_name - 6448244 + 6448521 is_complete @@ -22027,7 +22042,7 @@ 1 2 - 9477636 + 9478043 @@ -22043,7 +22058,7 @@ 1 2 - 9477636 + 9478043 @@ -22059,12 +22074,12 @@ 1 2 - 6167459 + 6167725 2 874 - 280784 + 280796 @@ -22080,7 +22095,7 @@ 1 2 - 6448244 + 6448521 @@ -22122,59 +22137,59 @@ is_pod_class - 530716 + 530515 id - 530716 + 530515 is_standard_layout_class - 1253734 + 1253788 id - 1253734 + 1253788 is_complete - 1645060 + 1645130 id - 1645060 + 1645130 is_class_template - 397855 + 397872 id - 397855 + 397872 class_instantiation - 1088622 + 1088668 to - 1088622 + 1088668 from - 168377 + 168384 @@ -22188,7 +22203,7 @@ 1 2 - 1088622 + 1088668 @@ -22204,12 +22219,12 @@ 1 2 - 59701 + 59704 2 3 - 29384 + 29385 3 @@ -22219,12 +22234,12 @@ 4 5 - 13059 + 13060 5 6 - 9794 + 9795 6 @@ -22234,7 +22249,7 @@ 10 16 - 13059 + 13060 16 @@ -22254,19 +22269,19 @@ class_template_argument - 2859038 + 2857953 type_id - 1304835 + 1304340 index - 1253 + 1252 arg_type - 833229 + 832912 @@ -22280,27 +22295,27 @@ 1 2 - 536592 + 536388 2 3 - 396090 + 395940 3 4 - 229424 + 229337 4 7 - 119328 + 119283 7 113 - 23400 + 23391 @@ -22316,22 +22331,22 @@ 1 2 - 563013 + 562800 2 3 - 407236 + 407082 3 4 - 242752 + 242660 4 113 - 91832 + 91797 @@ -22439,27 +22454,27 @@ 1 2 - 518731 + 518534 2 3 - 172921 + 172856 3 4 - 50884 + 50865 4 10 - 63519 + 63495 10 10265 - 27171 + 27161 @@ -22475,17 +22490,17 @@ 1 2 - 734424 + 734146 2 3 - 80630 + 80599 3 22 - 18174 + 18167 @@ -22495,11 +22510,11 @@ class_template_argument_value - 494870 + 494891 type_id - 304571 + 304584 index @@ -22507,7 +22522,7 @@ arg_value - 494870 + 494891 @@ -22521,12 +22536,12 @@ 1 2 - 249534 + 249544 2 3 - 53171 + 53174 3 @@ -22547,22 +22562,22 @@ 1 2 - 189366 + 189374 2 3 - 81156 + 81160 3 4 - 12126 + 12127 4 9 - 21921 + 21922 @@ -22640,7 +22655,7 @@ 1 2 - 494870 + 494891 @@ -22656,7 +22671,7 @@ 1 2 - 494870 + 494891 @@ -22666,15 +22681,15 @@ is_proxy_class_for - 62966 + 62969 id - 62966 + 62969 templ_param_id - 62966 + 62969 @@ -22688,7 +22703,7 @@ 1 2 - 62966 + 62969 @@ -22704,7 +22719,7 @@ 1 2 - 62966 + 62969 @@ -22714,19 +22729,19 @@ type_mentions - 4029370 + 4029338 id - 4029370 + 4029338 type_id - 198214 + 198212 location - 3995848 + 3995817 kind @@ -22744,7 +22759,7 @@ 1 2 - 4029370 + 4029338 @@ -22760,7 +22775,7 @@ 1 2 - 4029370 + 4029338 @@ -22776,7 +22791,7 @@ 1 2 - 4029370 + 4029338 @@ -22894,7 +22909,7 @@ 1 2 - 198214 + 198212 @@ -22910,7 +22925,7 @@ 1 2 - 3962326 + 3962295 2 @@ -22931,7 +22946,7 @@ 1 2 - 3962326 + 3962295 2 @@ -22952,7 +22967,7 @@ 1 2 - 3995848 + 3995817 @@ -23010,26 +23025,26 @@ is_function_template - 1401589 + 1401649 id - 1401589 + 1401649 function_instantiation - 894870 + 894647 to - 894870 + 894647 from - 144256 + 144220 @@ -23043,7 +23058,7 @@ 1 2 - 894870 + 894647 @@ -23059,27 +23074,27 @@ 1 2 - 100033 + 100008 2 3 - 14230 + 14227 3 6 - 11864 + 11861 6 21 - 11899 + 11896 22 870 - 6228 + 6226 @@ -23089,11 +23104,11 @@ function_template_argument - 2310645 + 2310067 function_id - 1319951 + 1319621 index @@ -23101,7 +23116,7 @@ arg_type - 300865 + 300789 @@ -23115,22 +23130,22 @@ 1 2 - 673580 + 673411 2 3 - 390007 + 389910 3 4 - 186566 + 186519 4 15 - 69797 + 69779 @@ -23146,22 +23161,22 @@ 1 2 - 690977 + 690804 2 3 - 399784 + 399684 3 4 - 166664 + 166622 4 9 - 62525 + 62509 @@ -23309,32 +23324,32 @@ 1 2 - 184304 + 184258 2 3 - 44049 + 44038 3 5 - 23172 + 23167 5 16 - 23207 + 23201 16 107 - 22720 + 22714 108 957 - 3409 + 3408 @@ -23350,17 +23365,17 @@ 1 2 - 271116 + 271048 2 4 - 25678 + 25671 4 17 - 4070 + 4069 @@ -23370,11 +23385,11 @@ function_template_argument_value - 358553 + 358464 function_id - 192516 + 192467 index @@ -23382,7 +23397,7 @@ arg_value - 355944 + 355855 @@ -23396,12 +23411,12 @@ 1 2 - 183260 + 183215 2 8 - 9255 + 9252 @@ -23417,17 +23432,17 @@ 1 2 - 175919 + 175875 2 31 - 15100 + 15096 32 97 - 1496 + 1495 @@ -23565,12 +23580,12 @@ 1 2 - 353334 + 353246 2 3 - 2609 + 2608 @@ -23586,7 +23601,7 @@ 1 2 - 355944 + 355855 @@ -23596,26 +23611,26 @@ is_variable_template - 46998 + 46973 id - 46998 + 46973 variable_instantiation - 171327 + 171237 to - 171327 + 171237 from - 25673 + 25659 @@ -23629,7 +23644,7 @@ 1 2 - 171327 + 171237 @@ -23645,22 +23660,22 @@ 1 2 - 13768 + 13761 2 3 - 2588 + 2586 3 4 - 1242 + 1241 4 6 - 1863 + 1862 6 @@ -23670,12 +23685,12 @@ 8 12 - 2173 + 2172 12 38 - 1966 + 1965 46 @@ -23690,19 +23705,19 @@ variable_template_argument - 308493 + 308331 variable_id - 162217 + 162132 index - 1759 + 1758 arg_type - 170085 + 169995 @@ -23716,22 +23731,22 @@ 1 2 - 83023 + 82980 2 3 - 50518 + 50491 3 4 - 18633 + 18624 4 17 - 10041 + 10036 @@ -23747,22 +23762,22 @@ 1 2 - 87682 + 87636 2 3 - 51760 + 51733 3 4 - 13561 + 13554 4 17 - 9213 + 9208 @@ -23783,12 +23798,12 @@ 19 20 - 621 + 620 26 27 - 414 + 413 47 @@ -23839,17 +23854,17 @@ 10 11 - 414 + 413 11 12 - 207 + 206 12 13 - 414 + 413 29 @@ -23895,22 +23910,22 @@ 1 2 - 136855 + 136783 2 3 - 19358 + 19348 3 24 - 12836 + 12829 24 110 - 1035 + 1034 @@ -23926,17 +23941,17 @@ 1 2 - 153211 + 153130 2 3 - 14803 + 14795 3 6 - 2070 + 2069 @@ -23946,19 +23961,19 @@ variable_template_argument_value - 11801 + 11795 variable_id - 7764 + 7760 index - 414 + 413 arg_value - 11801 + 11795 @@ -23972,12 +23987,12 @@ 1 2 - 7350 + 7346 2 3 - 414 + 413 @@ -23993,12 +24008,12 @@ 1 2 - 4347 + 4345 2 3 - 3105 + 3104 4 @@ -24081,7 +24096,7 @@ 1 2 - 11801 + 11795 @@ -24097,7 +24112,7 @@ 1 2 - 11801 + 11795 @@ -24107,15 +24122,15 @@ routinetypes - 538161 + 538026 id - 538161 + 538026 return_type - 280406 + 280336 @@ -24129,7 +24144,7 @@ 1 2 - 538161 + 538026 @@ -24145,17 +24160,17 @@ 1 2 - 244220 + 244159 2 3 - 20946 + 20940 3 3595 - 15239 + 15236 @@ -24165,11 +24180,11 @@ routinetypeargs - 982278 + 982320 routine - 423042 + 423060 index @@ -24177,7 +24192,7 @@ type_id - 226679 + 226689 @@ -24191,27 +24206,27 @@ 1 2 - 152519 + 152525 2 3 - 133862 + 133868 3 4 - 63432 + 63435 4 5 - 45709 + 45711 5 18 - 27518 + 27519 @@ -24227,27 +24242,27 @@ 1 2 - 182369 + 182377 2 3 - 133395 + 133401 3 4 - 58768 + 58771 4 5 - 33582 + 33583 5 11 - 14925 + 14926 @@ -24405,12 +24420,12 @@ 1 2 - 146455 + 146461 2 3 - 30783 + 30784 3 @@ -24420,12 +24435,12 @@ 5 12 - 18190 + 18191 12 110 - 14458 + 14459 @@ -24441,17 +24456,17 @@ 1 2 - 172575 + 172582 2 3 - 30783 + 30784 3 6 - 18656 + 18657 6 @@ -24466,19 +24481,19 @@ ptrtomembers - 37779 + 37781 id - 37779 + 37781 type_id - 37779 + 37781 class_id - 15391 + 15392 @@ -24492,7 +24507,7 @@ 1 2 - 37779 + 37781 @@ -24508,7 +24523,7 @@ 1 2 - 37779 + 37781 @@ -24524,7 +24539,7 @@ 1 2 - 37779 + 37781 @@ -24540,7 +24555,7 @@ 1 2 - 37779 + 37781 @@ -24602,15 +24617,15 @@ specifiers - 24720 + 24721 id - 24720 + 24721 str - 24720 + 24721 @@ -24624,7 +24639,7 @@ 1 2 - 24720 + 24721 @@ -24640,7 +24655,7 @@ 1 2 - 24720 + 24721 @@ -24650,11 +24665,11 @@ typespecifiers - 1291048 + 1291103 type_id - 1272857 + 1272912 spec_id @@ -24672,12 +24687,12 @@ 1 2 - 1254667 + 1254721 2 3 - 18190 + 18191 @@ -24738,11 +24753,11 @@ funspecifiers - 12607036 + 12603886 func_id - 3854601 + 3853638 spec_id @@ -24760,27 +24775,27 @@ 1 2 - 310746 + 310668 2 3 - 540214 + 540079 3 4 - 1133732 + 1133449 4 5 - 1624017 + 1623611 5 8 - 245890 + 245828 @@ -24896,11 +24911,11 @@ varspecifiers - 2243942 + 2244038 var_id - 1223883 + 1223936 spec_id @@ -24918,22 +24933,22 @@ 1 2 - 729479 + 729510 2 3 - 202425 + 202434 3 4 - 58302 + 58304 4 5 - 233675 + 233686 @@ -24994,11 +25009,11 @@ attributes - 729824 + 729440 id - 729824 + 729440 kind @@ -25006,15 +25021,15 @@ name - 1656 + 1655 name_space - 207 + 206 location - 479613 + 479361 @@ -25028,7 +25043,7 @@ 1 2 - 729824 + 729440 @@ -25044,7 +25059,7 @@ 1 2 - 729824 + 729440 @@ -25060,7 +25075,7 @@ 1 2 - 729824 + 729440 @@ -25076,7 +25091,7 @@ 1 2 - 729824 + 729440 @@ -25144,7 +25159,7 @@ 1 2 - 207 + 206 2 @@ -25272,12 +25287,12 @@ 1 2 - 1449 + 1448 2 3 - 207 + 206 @@ -25293,7 +25308,7 @@ 1 2 - 1656 + 1655 @@ -25314,7 +25329,7 @@ 2 3 - 207 + 206 4 @@ -25469,17 +25484,17 @@ 1 2 - 422573 + 422351 2 3 - 36335 + 36316 3 201 - 20704 + 20693 @@ -25495,7 +25510,7 @@ 1 2 - 479613 + 479361 @@ -25511,12 +25526,12 @@ 1 2 - 475369 + 475119 2 3 - 4244 + 4242 @@ -25532,7 +25547,7 @@ 1 2 - 479613 + 479361 @@ -25542,11 +25557,11 @@ attribute_args - 409982 + 410000 id - 409982 + 410000 kind @@ -25554,7 +25569,7 @@ attribute - 298041 + 298054 index @@ -25562,7 +25577,7 @@ location - 327426 + 327440 @@ -25576,7 +25591,7 @@ 1 2 - 409982 + 410000 @@ -25592,7 +25607,7 @@ 1 2 - 409982 + 410000 @@ -25608,7 +25623,7 @@ 1 2 - 409982 + 410000 @@ -25624,7 +25639,7 @@ 1 2 - 409982 + 410000 @@ -25739,17 +25754,17 @@ 1 2 - 215952 + 215961 2 3 - 52238 + 52241 3 4 - 29850 + 29852 @@ -25765,12 +25780,12 @@ 1 2 - 273788 + 273799 2 3 - 24253 + 24254 @@ -25786,17 +25801,17 @@ 1 2 - 215952 + 215961 2 3 - 52238 + 52241 3 4 - 29850 + 29852 @@ -25812,17 +25827,17 @@ 1 2 - 215952 + 215961 2 3 - 52238 + 52241 3 4 - 29850 + 29852 @@ -25937,17 +25952,17 @@ 1 2 - 278918 + 278930 2 3 - 23320 + 23321 3 9 - 24720 + 24721 17 @@ -25968,7 +25983,7 @@ 1 2 - 314832 + 314846 2 @@ -25989,17 +26004,17 @@ 1 2 - 278918 + 278930 2 3 - 23320 + 23321 3 9 - 24720 + 24721 17 @@ -26020,7 +26035,7 @@ 1 2 - 327426 + 327440 @@ -26030,11 +26045,11 @@ attribute_arg_value - 39179 + 39180 arg - 39179 + 39180 value @@ -26052,7 +26067,7 @@ 1 2 - 39179 + 39180 @@ -26068,7 +26083,7 @@ 1 2 - 14458 + 14459 2 @@ -26131,15 +26146,15 @@ attribute_arg_constant - 370336 + 370352 arg - 370336 + 370352 constant - 370336 + 370352 @@ -26153,7 +26168,7 @@ 1 2 - 370336 + 370352 @@ -26169,7 +26184,7 @@ 1 2 - 370336 + 370352 @@ -26280,15 +26295,15 @@ typeattributes - 84369 + 84325 type_id - 61698 + 61666 spec_id - 84369 + 84325 @@ -26302,17 +26317,17 @@ 1 2 - 55797 + 55768 2 4 - 4244 + 4242 12 13 - 1656 + 1655 @@ -26328,7 +26343,7 @@ 1 2 - 84369 + 84325 @@ -26338,15 +26353,15 @@ funcattributes - 651587 + 651615 func_id - 443098 + 443117 spec_id - 651587 + 651615 @@ -26360,17 +26375,17 @@ 1 2 - 334422 + 334436 2 3 - 65298 + 65301 3 6 - 34981 + 34982 6 @@ -26391,7 +26406,7 @@ 1 2 - 651587 + 651615 @@ -26507,15 +26522,15 @@ unspecifiedtype - 10144615 + 10145051 type_id - 10144615 + 10145051 unspecified_type_id - 6817181 + 6817474 @@ -26529,7 +26544,7 @@ 1 2 - 10144615 + 10145051 @@ -26545,17 +26560,17 @@ 1 2 - 4584433 + 4584630 2 3 - 1995340 + 1995426 3 145 - 237407 + 237417 @@ -26565,19 +26580,19 @@ member - 4945084 + 4943849 parent - 639377 + 639217 index - 8698 + 8696 child - 4900409 + 4899184 @@ -26591,42 +26606,42 @@ 1 3 - 19067 + 19062 3 4 - 344496 + 344410 4 5 - 37786 + 37777 5 7 - 52504 + 52491 7 10 - 52191 + 52178 10 15 - 49581 + 49569 15 24 - 48955 + 48943 24 251 - 34794 + 34785 @@ -26642,42 +26657,42 @@ 1 3 - 19067 + 19062 3 4 - 344427 + 344341 4 5 - 37821 + 37811 5 7 - 52608 + 52595 7 10 - 52539 + 52526 10 15 - 49198 + 49186 15 24 - 49024 + 49012 24 255 - 34689 + 34681 @@ -26708,42 +26723,42 @@ 5 22 - 661 + 660 22 42 - 661 + 660 42 56 - 661 + 660 56 100 - 661 + 660 104 164 - 661 + 660 181 299 - 661 + 660 300 727 - 661 + 660 845 4002 - 661 + 660 4606 @@ -26774,12 +26789,12 @@ 3 4 - 1148 + 1147 4 15 - 661 + 660 16 @@ -26789,7 +26804,7 @@ 36 55 - 661 + 660 57 @@ -26799,22 +26814,22 @@ 97 135 - 661 + 660 140 256 - 661 + 660 268 612 - 661 + 660 619 2611 - 661 + 660 2770 @@ -26835,7 +26850,7 @@ 1 2 - 4900409 + 4899184 @@ -26851,12 +26866,12 @@ 1 2 - 4857090 + 4855876 2 8 - 43318 + 43307 @@ -26866,15 +26881,15 @@ enclosingfunction - 117884 + 117840 child - 117884 + 117840 parent - 67335 + 67310 @@ -26888,7 +26903,7 @@ 1 2 - 117884 + 117840 @@ -26904,22 +26919,22 @@ 1 2 - 35587 + 35573 2 3 - 20893 + 20885 3 4 - 5908 + 5906 4 45 - 4946 + 4944 @@ -26929,15 +26944,15 @@ derivations - 391086 + 390988 derivation - 391086 + 390988 sub - 370836 + 370743 index @@ -26945,11 +26960,11 @@ super - 202501 + 202451 location - 37682 + 37672 @@ -26963,7 +26978,7 @@ 1 2 - 391086 + 390988 @@ -26979,7 +26994,7 @@ 1 2 - 391086 + 390988 @@ -26995,7 +27010,7 @@ 1 2 - 391086 + 390988 @@ -27011,7 +27026,7 @@ 1 2 - 391086 + 390988 @@ -27027,12 +27042,12 @@ 1 2 - 355874 + 355785 2 7 - 14961 + 14957 @@ -27048,12 +27063,12 @@ 1 2 - 355874 + 355785 2 7 - 14961 + 14957 @@ -27069,12 +27084,12 @@ 1 2 - 355874 + 355785 2 7 - 14961 + 14957 @@ -27090,12 +27105,12 @@ 1 2 - 355874 + 355785 2 7 - 14961 + 14957 @@ -27240,12 +27255,12 @@ 1 2 - 195125 + 195076 2 1519 - 7376 + 7374 @@ -27261,12 +27276,12 @@ 1 2 - 195125 + 195076 2 1519 - 7376 + 7374 @@ -27282,7 +27297,7 @@ 1 2 - 202049 + 201999 2 @@ -27303,12 +27318,12 @@ 1 2 - 198848 + 198798 2 108 - 3653 + 3652 @@ -27324,12 +27339,12 @@ 1 2 - 28009 + 28002 2 5 - 3201 + 3200 5 @@ -27339,7 +27354,7 @@ 15 134 - 2853 + 2852 136 @@ -27360,12 +27375,12 @@ 1 2 - 28009 + 28002 2 5 - 3201 + 3200 5 @@ -27375,7 +27390,7 @@ 15 134 - 2853 + 2852 136 @@ -27396,7 +27411,7 @@ 1 2 - 37682 + 37672 @@ -27412,17 +27427,17 @@ 1 2 - 30375 + 30367 2 5 - 3340 + 3339 5 45 - 2853 + 2852 54 @@ -27437,11 +27452,11 @@ derspecifiers - 392965 + 392867 der_id - 390703 + 390605 spec_id @@ -27459,7 +27474,7 @@ 1 2 - 388441 + 388344 2 @@ -27505,11 +27520,11 @@ direct_base_offsets - 362172 + 362081 der_id - 362172 + 362081 offset @@ -27527,7 +27542,7 @@ 1 2 - 362172 + 362081 @@ -27578,11 +27593,11 @@ virtual_base_offsets - 6445 + 6443 sub - 3558 + 3557 super @@ -27604,7 +27619,7 @@ 1 2 - 2797 + 2796 2 @@ -27635,7 +27650,7 @@ 1 2 - 2999 + 2998 2 @@ -27869,23 +27884,23 @@ frienddecls - 706182 + 706005 id - 706182 + 706005 type_id - 41857 + 41846 decl_id - 69309 + 69292 location - 6262 + 6261 @@ -27899,7 +27914,7 @@ 1 2 - 706182 + 706005 @@ -27915,7 +27930,7 @@ 1 2 - 706182 + 706005 @@ -27931,7 +27946,7 @@ 1 2 - 706182 + 706005 @@ -27947,22 +27962,22 @@ 1 2 - 6123 + 6122 2 3 - 13047 + 13044 3 6 - 2922 + 2921 6 10 - 3166 + 3165 10 @@ -27972,22 +27987,22 @@ 17 24 - 3305 + 3304 25 36 - 3270 + 3269 37 55 - 3201 + 3200 55 103 - 3583 + 3582 @@ -28003,22 +28018,22 @@ 1 2 - 6123 + 6122 2 3 - 13047 + 13044 3 6 - 2922 + 2921 6 10 - 3166 + 3165 10 @@ -28028,22 +28043,22 @@ 17 24 - 3305 + 3304 25 36 - 3270 + 3269 37 55 - 3201 + 3200 55 103 - 3583 + 3582 @@ -28059,7 +28074,7 @@ 1 2 - 40430 + 40420 2 @@ -28080,32 +28095,32 @@ 1 2 - 39978 + 39968 2 3 - 5810 + 5809 3 8 - 5949 + 5948 8 15 - 5358 + 5356 15 32 - 5219 + 5217 32 71 - 5219 + 5217 72 @@ -28126,32 +28141,32 @@ 1 2 - 39978 + 39968 2 3 - 5810 + 5809 3 8 - 5949 + 5948 8 15 - 5358 + 5356 15 32 - 5219 + 5217 32 71 - 5219 + 5217 72 @@ -28172,12 +28187,12 @@ 1 2 - 68648 + 68631 2 5 - 661 + 660 @@ -28193,7 +28208,7 @@ 1 2 - 5880 + 5878 2 @@ -28214,7 +28229,7 @@ 1 2 - 6123 + 6122 2 @@ -28235,7 +28250,7 @@ 1 2 - 5915 + 5913 2 @@ -28250,19 +28265,19 @@ comments - 8686670 + 8682106 id - 8686670 + 8682106 contents - 3307709 + 3305971 location - 8686670 + 8682106 @@ -28276,7 +28291,7 @@ 1 2 - 8686670 + 8682106 @@ -28292,7 +28307,7 @@ 1 2 - 8686670 + 8682106 @@ -28308,17 +28323,17 @@ 1 2 - 3025820 + 3024231 2 7 - 248657 + 248527 7 32784 - 33230 + 33212 @@ -28334,17 +28349,17 @@ 1 2 - 3025820 + 3024231 2 7 - 248657 + 248527 7 32784 - 33230 + 33212 @@ -28360,7 +28375,7 @@ 1 2 - 8686670 + 8682106 @@ -28376,7 +28391,7 @@ 1 2 - 8686670 + 8682106 @@ -28386,15 +28401,15 @@ commentbinding - 3088160 + 3088293 id - 2443103 + 2443208 element - 3011668 + 3011797 @@ -28408,12 +28423,12 @@ 1 2 - 2366144 + 2366245 2 97 - 76959 + 76962 @@ -28429,12 +28444,12 @@ 1 2 - 2935175 + 2935301 2 3 - 76492 + 76496 @@ -28444,15 +28459,15 @@ exprconv - 7033432 + 7033379 converted - 7033432 + 7033379 conversion - 7033432 + 7033379 @@ -28466,7 +28481,7 @@ 1 2 - 7033432 + 7033379 @@ -28482,7 +28497,7 @@ 1 2 - 7033432 + 7033379 @@ -28492,30 +28507,30 @@ compgenerated - 9265823 + 9267960 id - 9265823 + 9267960 synthetic_destructor_call - 471159 + 473158 element - 286813 + 286203 i - 381 + 380 destructor_call - 471159 + 473158 @@ -28529,27 +28544,27 @@ 1 2 - 190103 + 188057 2 3 - 50404 + 50984 3 4 - 21503 + 21850 4 - 7 - 23238 + 6 + 21584 - 7 + 6 20 - 1563 + 3727 @@ -28565,27 +28580,27 @@ 1 2 - 189912 + 188057 2 3 - 50537 + 50984 3 4 - 21503 + 21850 4 - 7 - 23295 + 6 + 21584 - 7 + 6 20 - 1563 + 3727 @@ -28644,18 +28659,18 @@ 19 - 18 - 19 + 19 + 20 19 - 26 - 27 + 27 + 28 19 - 34 - 35 + 35 + 36 19 @@ -28664,38 +28679,38 @@ 19 - 82 - 83 + 83 + 84 19 - 193 - 194 + 196 + 197 19 - 422 - 423 + 435 + 436 19 - 1301 - 1302 + 1331 + 1332 19 - 2429 - 2430 + 2480 + 2481 19 - 5068 - 5069 + 5156 + 5157 19 - 15013 - 15014 + 15018 + 15019 19 @@ -28755,18 +28770,18 @@ 19 - 18 - 19 + 19 + 20 19 - 26 - 27 + 27 + 28 19 - 34 - 35 + 35 + 36 19 @@ -28775,38 +28790,38 @@ 19 - 82 - 83 + 83 + 84 19 - 193 - 194 + 196 + 197 19 - 422 - 423 + 435 + 436 19 - 1301 - 1302 + 1331 + 1332 19 - 2429 - 2430 + 2480 + 2481 19 - 5071 - 5072 + 5156 + 5157 19 - 15038 - 15039 + 15018 + 15019 19 @@ -28823,7 +28838,7 @@ 1 2 - 471159 + 473158 @@ -28839,7 +28854,7 @@ 1 2 - 471159 + 473158 @@ -28849,15 +28864,15 @@ namespaces - 12126 + 12127 id - 12126 + 12127 name - 9794 + 9795 @@ -28871,7 +28886,7 @@ 1 2 - 12126 + 12127 @@ -28918,7 +28933,7 @@ namespacembrs - 2385733 + 2385836 parentid @@ -28926,7 +28941,7 @@ memberid - 2385733 + 2385836 @@ -29001,7 +29016,7 @@ 1 2 - 2385733 + 2385836 @@ -29011,11 +29026,11 @@ exprparents - 14207341 + 14207231 expr_id - 14207341 + 14207231 child_index @@ -29023,7 +29038,7 @@ parent_id - 9454239 + 9454166 @@ -29037,7 +29052,7 @@ 1 2 - 14207341 + 14207231 @@ -29053,7 +29068,7 @@ 1 2 - 14207341 + 14207231 @@ -29171,17 +29186,17 @@ 1 2 - 5409675 + 5409633 2 3 - 3706806 + 3706777 3 712 - 337757 + 337754 @@ -29197,17 +29212,17 @@ 1 2 - 5409675 + 5409633 2 3 - 3706806 + 3706777 3 712 - 337757 + 337754 @@ -29217,11 +29232,11 @@ expr_isload - 5170780 + 5168684 expr_id - 5170780 + 5168684 @@ -29301,11 +29316,11 @@ iscall - 3183297 + 3182186 caller - 3183297 + 3182186 kind @@ -29323,7 +29338,7 @@ 1 2 - 3183297 + 3182186 @@ -29337,18 +29352,18 @@ 12 - 1318 - 1319 + 1319 + 1320 19 - 2471 - 2472 + 2473 + 2474 19 - 163193 - 163194 + 163543 + 163544 19 @@ -29359,11 +29374,11 @@ numtemplatearguments - 393347 + 393249 expr_id - 393347 + 393249 num @@ -29381,7 +29396,7 @@ 1 2 - 393347 + 393249 @@ -29485,23 +29500,23 @@ namequalifiers - 1516804 + 1515301 id - 1516804 + 1515301 qualifiableelement - 1516804 + 1515301 qualifyingelement - 97777 + 97613 location - 305343 + 304593 @@ -29515,7 +29530,7 @@ 1 2 - 1516804 + 1515301 @@ -29531,7 +29546,7 @@ 1 2 - 1516804 + 1515301 @@ -29547,7 +29562,7 @@ 1 2 - 1516804 + 1515301 @@ -29563,7 +29578,7 @@ 1 2 - 1516804 + 1515301 @@ -29579,7 +29594,7 @@ 1 2 - 1516804 + 1515301 @@ -29595,7 +29610,7 @@ 1 2 - 1516804 + 1515301 @@ -29611,27 +29626,27 @@ 1 2 - 58601 + 58457 2 3 - 22457 + 22420 3 5 - 8921 + 8918 5 92 - 7377 + 7378 96 - 21572 - 419 + 21584 + 437 @@ -29647,27 +29662,27 @@ 1 2 - 58601 + 58457 2 3 - 22457 + 22420 3 5 - 8921 + 8918 5 92 - 7377 + 7378 96 - 21572 - 419 + 21584 + 437 @@ -29683,22 +29698,22 @@ 1 2 - 64035 + 63877 2 3 - 20703 + 20671 3 5 - 8388 + 8386 5 7095 - 4651 + 4678 @@ -29714,32 +29729,32 @@ 1 2 - 101018 + 100656 2 3 - 28385 + 28430 3 4 - 44780 + 44651 4 6 - 14316 + 13768 6 7 - 95394 + 95692 7 790 - 21446 + 21393 @@ -29755,32 +29770,32 @@ 1 2 - 101018 + 100656 2 3 - 28385 + 28430 3 4 - 44780 + 44651 4 6 - 14316 + 13768 6 7 - 95394 + 95692 7 790 - 21446 + 21393 @@ -29796,22 +29811,22 @@ 1 2 - 137659 + 137206 2 3 - 55799 + 55738 3 4 - 102658 + 102443 4 143 - 9226 + 9204 @@ -29821,15 +29836,15 @@ varbind - 6029477 + 6029430 expr - 6029477 + 6029430 var - 768575 + 768569 @@ -29843,7 +29858,7 @@ 1 2 - 6029477 + 6029430 @@ -29859,22 +29874,22 @@ 1 2 - 126229 + 126228 2 3 - 137882 + 137881 3 4 - 106299 + 106298 4 5 - 85216 + 85215 5 @@ -29914,15 +29929,15 @@ funbind - 3187262 + 3188690 expr - 3183583 + 3182471 fun - 512661 + 512219 @@ -29936,12 +29951,12 @@ 1 2 - 3179903 + 3176253 2 3 - 3679 + 6218 @@ -29957,32 +29972,32 @@ 1 2 - 316152 + 315736 2 3 - 78084 + 78026 3 4 - 31455 + 31396 4 7 - 46210 + 46153 7 - 133 - 38451 + 121 + 38471 - 133 - 4992 - 2306 + 123 + 5011 + 2434 @@ -29992,11 +30007,11 @@ expr_allocator - 45963 + 45951 expr - 45963 + 45951 func @@ -30018,7 +30033,7 @@ 1 2 - 45963 + 45951 @@ -30034,7 +30049,7 @@ 1 2 - 45963 + 45951 @@ -30118,11 +30133,11 @@ expr_deallocator - 54626 + 54613 expr - 54626 + 54613 func @@ -30144,7 +30159,7 @@ 1 2 - 54626 + 54613 @@ -30160,7 +30175,7 @@ 1 2 - 54626 + 54613 @@ -30265,15 +30280,15 @@ expr_cond_guard - 657276 + 657271 cond - 657276 + 657271 guard - 657276 + 657271 @@ -30287,7 +30302,7 @@ 1 2 - 657276 + 657271 @@ -30303,7 +30318,7 @@ 1 2 - 657276 + 657271 @@ -30313,15 +30328,15 @@ expr_cond_true - 657273 + 657268 cond - 657273 + 657268 true - 657273 + 657268 @@ -30335,7 +30350,7 @@ 1 2 - 657273 + 657268 @@ -30351,7 +30366,7 @@ 1 2 - 657273 + 657268 @@ -30361,15 +30376,15 @@ expr_cond_false - 657276 + 657271 cond - 657276 + 657271 false - 657276 + 657271 @@ -30383,7 +30398,7 @@ 1 2 - 657276 + 657271 @@ -30399,7 +30414,7 @@ 1 2 - 657276 + 657271 @@ -30409,15 +30424,15 @@ values - 10777325 + 10777241 id - 10777325 + 10777241 str - 88068 + 88067 @@ -30431,7 +30446,7 @@ 1 2 - 10777325 + 10777241 @@ -30540,15 +30555,15 @@ valuebind - 11211571 + 11211484 val - 10777325 + 10777241 expr - 11211571 + 11211484 @@ -30562,12 +30577,12 @@ 1 2 - 10365623 + 10365543 2 7 - 411701 + 411698 @@ -30583,7 +30598,7 @@ 1 2 - 11211571 + 11211484 @@ -30593,15 +30608,15 @@ fieldoffsets - 1054758 + 1054750 id - 1054758 + 1054750 byteoffset - 22694 + 22693 bitoffset @@ -30619,7 +30634,7 @@ 1 2 - 1054758 + 1054750 @@ -30635,7 +30650,7 @@ 1 2 - 1054758 + 1054750 @@ -30794,19 +30809,19 @@ bitfield - 20704 + 20693 id - 20704 + 20693 bits - 2588 + 2586 declared_bits - 2588 + 2586 @@ -30820,7 +30835,7 @@ 1 2 - 20704 + 20693 @@ -30836,7 +30851,7 @@ 1 2 - 20704 + 20693 @@ -30857,37 +30872,37 @@ 2 3 - 621 + 620 3 4 - 207 + 206 4 5 - 207 + 206 5 6 - 207 + 206 6 8 - 207 + 206 8 11 - 207 + 206 12 115 - 207 + 206 @@ -30903,7 +30918,7 @@ 1 2 - 2588 + 2586 @@ -30924,37 +30939,37 @@ 2 3 - 621 + 620 3 4 - 207 + 206 4 5 - 207 + 206 5 6 - 207 + 206 6 8 - 207 + 206 8 11 - 207 + 206 12 115 - 207 + 206 @@ -30970,7 +30985,7 @@ 1 2 - 2588 + 2586 @@ -30980,23 +30995,23 @@ initialisers - 1710241 + 1710223 init - 1710241 + 1710223 var - 719566 + 719570 expr - 1710241 + 1710223 location - 394521 + 394513 @@ -31010,7 +31025,7 @@ 1 2 - 1710241 + 1710223 @@ -31026,7 +31041,7 @@ 1 2 - 1710241 + 1710223 @@ -31042,7 +31057,7 @@ 1 2 - 1710241 + 1710223 @@ -31058,7 +31073,7 @@ 1 2 - 633820 + 633825 2 @@ -31068,7 +31083,7 @@ 16 25 - 57022 + 57020 @@ -31084,7 +31099,7 @@ 1 2 - 633820 + 633825 2 @@ -31094,7 +31109,7 @@ 16 25 - 57022 + 57020 @@ -31110,7 +31125,7 @@ 1 2 - 719560 + 719563 2 @@ -31131,7 +31146,7 @@ 1 2 - 1710241 + 1710223 @@ -31147,7 +31162,7 @@ 1 2 - 1710241 + 1710223 @@ -31163,7 +31178,7 @@ 1 2 - 1710241 + 1710223 @@ -31179,7 +31194,7 @@ 1 2 - 321604 + 321597 2 @@ -31189,12 +31204,12 @@ 3 15 - 30977 + 30976 15 111551 - 17983 + 17982 @@ -31210,17 +31225,17 @@ 1 2 - 344488 + 344480 2 4 - 36106 + 36086 4 12073 - 13927 + 13945 @@ -31236,7 +31251,7 @@ 1 2 - 321604 + 321597 2 @@ -31246,12 +31261,12 @@ 3 15 - 30977 + 30976 15 111551 - 17983 + 17982 @@ -31272,15 +31287,15 @@ expr_ancestor - 475296 + 477285 exp - 475296 + 477285 ancestor - 269541 + 268993 @@ -31294,7 +31309,7 @@ 1 2 - 475296 + 477285 @@ -31310,27 +31325,27 @@ 1 2 - 165739 + 163963 2 3 - 54712 + 55148 3 4 - 22152 + 22496 4 6 - 22132 + 22592 6 26 - 4804 + 4792 @@ -31340,11 +31355,11 @@ exprs - 18388573 + 18388431 id - 18388573 + 18388431 kind @@ -31352,7 +31367,7 @@ location - 8488587 + 8488521 @@ -31366,7 +31381,7 @@ 1 2 - 18388573 + 18388431 @@ -31382,7 +31397,7 @@ 1 2 - 18388573 + 18388431 @@ -31560,22 +31575,22 @@ 1 2 - 7145568 + 7145513 2 3 - 663069 + 663064 3 18 - 638140 + 638135 18 71656 - 41808 + 41807 @@ -31591,17 +31606,17 @@ 1 2 - 7251643 + 7251587 2 3 - 618277 + 618273 3 32 - 618666 + 618661 @@ -31611,15 +31626,19 @@ expr_reuse - 331632 + 333955 reuse - 331632 + 333955 original - 331632 + 333955 + + + value_category + 19 @@ -31633,7 +31652,23 @@ 1 2 - 331632 + 333955 + + + + + + + reuse + value_category + + + 12 + + + 1 + 2 + 333955 @@ -31649,7 +31684,55 @@ 1 2 - 331632 + 333955 + + + + + + + original + value_category + + + 12 + + + 1 + 2 + 333955 + + + + + + + value_category + reuse + + + 12 + + + 17561 + 17562 + 19 + + + + + + + value_category + original + + + 12 + + + 17561 + 17562 + 19 @@ -31659,15 +31742,15 @@ expr_types - 18461112 + 18456468 id - 18330447 + 18325931 typeid - 1237209 + 1236717 value_category @@ -31685,12 +31768,12 @@ 1 2 - 18199782 + 18195394 2 3 - 130664 + 130536 @@ -31706,7 +31789,7 @@ 1 2 - 18330447 + 18325931 @@ -31722,42 +31805,42 @@ 1 2 - 448184 + 448002 2 3 - 256965 + 256901 3 4 - 102788 + 102760 4 5 - 84133 + 84078 5 8 - 110196 + 110166 8 14 - 98435 + 98352 14 42 - 93511 + 93486 42 - 125366 - 42995 + 125373 + 42967 @@ -31773,17 +31856,17 @@ 1 2 - 1069468 + 1069040 2 3 - 157321 + 157261 3 4 - 10418 + 10414 @@ -31802,13 +31885,13 @@ 11 - 372687 - 372688 + 372581 + 372582 11 - 1250400 - 1250401 + 1250724 + 1250725 11 @@ -31833,8 +31916,8 @@ 11 - 92891 - 92892 + 92889 + 92890 11 @@ -31845,15 +31928,15 @@ new_allocated_type - 47006 + 46995 expr - 47006 + 46995 type_id - 27800 + 27793 @@ -31867,7 +31950,7 @@ 1 2 - 47006 + 46995 @@ -31883,17 +31966,17 @@ 1 2 - 11621 + 11618 2 3 - 14717 + 14714 3 19 - 1461 + 1460 @@ -32988,15 +33071,15 @@ condition_decl_bind - 40853 + 40753 expr - 40853 + 40753 decl - 40853 + 40753 @@ -33010,7 +33093,7 @@ 1 2 - 40853 + 40753 @@ -33026,7 +33109,7 @@ 1 2 - 40853 + 40753 @@ -33036,15 +33119,15 @@ typeid_bind - 35977 + 35968 expr - 35977 + 35968 type_id - 16179 + 16175 @@ -33058,7 +33141,7 @@ 1 2 - 35977 + 35968 @@ -33074,7 +33157,7 @@ 1 2 - 15761 + 15757 3 @@ -33097,7 +33180,7 @@ type_id - 20097 + 20096 @@ -33127,7 +33210,7 @@ 1 2 - 19932 + 19931 2 @@ -33142,15 +33225,15 @@ sizeof_bind - 199195 + 199194 expr - 199195 + 199194 type_id - 8181 + 8224 @@ -33164,7 +33247,7 @@ 1 2 - 199195 + 199194 @@ -33180,12 +33263,12 @@ 1 2 - 2693 + 2704 2 3 - 2333 + 2328 3 @@ -33195,7 +33278,7 @@ 4 5 - 740 + 746 5 @@ -33205,12 +33288,12 @@ 6 9 - 714 + 756 9 133 - 650 + 640 164 @@ -33273,11 +33356,11 @@ lambdas - 21455 + 21456 expr - 21455 + 21456 default_capture @@ -33299,7 +33382,7 @@ 1 2 - 21455 + 21456 @@ -33315,7 +33398,7 @@ 1 2 - 21455 + 21456 @@ -33389,15 +33472,15 @@ lambda_capture - 27985 + 27986 id - 27985 + 27986 lambda - 20522 + 20523 index @@ -33405,7 +33488,7 @@ field - 27985 + 27986 captured_by_reference @@ -33431,7 +33514,7 @@ 1 2 - 27985 + 27986 @@ -33447,7 +33530,7 @@ 1 2 - 27985 + 27986 @@ -33463,7 +33546,7 @@ 1 2 - 27985 + 27986 @@ -33479,7 +33562,7 @@ 1 2 - 27985 + 27986 @@ -33495,7 +33578,7 @@ 1 2 - 27985 + 27986 @@ -33511,7 +33594,7 @@ 1 2 - 27985 + 27986 @@ -33527,12 +33610,12 @@ 1 2 - 13059 + 13060 2 3 - 7462 + 7463 @@ -33548,12 +33631,12 @@ 1 2 - 13059 + 13060 2 3 - 7462 + 7463 @@ -33569,12 +33652,12 @@ 1 2 - 13059 + 13060 2 3 - 7462 + 7463 @@ -33590,7 +33673,7 @@ 1 2 - 20522 + 20523 @@ -33606,7 +33689,7 @@ 1 2 - 20522 + 20523 @@ -33622,12 +33705,12 @@ 1 2 - 13059 + 13060 2 3 - 7462 + 7463 @@ -33759,7 +33842,7 @@ 1 2 - 27985 + 27986 @@ -33775,7 +33858,7 @@ 1 2 - 27985 + 27986 @@ -33791,7 +33874,7 @@ 1 2 - 27985 + 27986 @@ -33807,7 +33890,7 @@ 1 2 - 27985 + 27986 @@ -33823,7 +33906,7 @@ 1 2 - 27985 + 27986 @@ -33839,7 +33922,7 @@ 1 2 - 27985 + 27986 @@ -34268,19 +34351,19 @@ stmts - 4619943 + 4618654 id - 4619943 + 4618654 kind - 1966 + 1965 location - 2269598 + 2268406 @@ -34294,7 +34377,7 @@ 1 2 - 4619943 + 4618654 @@ -34310,7 +34393,7 @@ 1 2 - 4619943 + 4618654 @@ -34394,28 +34477,28 @@ 103 - 2635 - 2636 + 2636 + 2637 103 - 4621 - 4622 + 4622 + 4623 103 - 8803 - 8804 + 8806 + 8807 103 - 11577 - 11578 + 11579 + 11580 103 - 13335 - 13336 + 13339 + 13340 103 @@ -34538,22 +34621,22 @@ 1 2 - 1879323 + 1878336 2 4 - 174019 + 173927 4 12 - 174122 + 174031 12 - 687 - 42133 + 689 + 42110 @@ -34569,12 +34652,12 @@ 1 2 - 2212869 + 2211706 2 8 - 56729 + 56699 @@ -34728,15 +34811,15 @@ if_then - 725956 + 725951 if_stmt - 725956 + 725951 then_id - 725956 + 725951 @@ -34750,7 +34833,7 @@ 1 2 - 725956 + 725951 @@ -34766,7 +34849,7 @@ 1 2 - 725956 + 725951 @@ -34776,15 +34859,15 @@ if_else - 184680 + 184679 if_stmt - 184680 + 184679 else_id - 184680 + 184679 @@ -34798,7 +34881,7 @@ 1 2 - 184680 + 184679 @@ -34814,7 +34897,7 @@ 1 2 - 184680 + 184679 @@ -34824,15 +34907,15 @@ constexpr_if_initialization - 1 + 2 constexpr_if_stmt - 1 + 2 init_id - 1 + 2 @@ -34846,7 +34929,7 @@ 1 2 - 1 + 2 @@ -34862,7 +34945,7 @@ 1 2 - 1 + 2 @@ -34872,15 +34955,15 @@ constexpr_if_then - 52071 + 52043 constexpr_if_stmt - 52071 + 52043 then_id - 52071 + 52043 @@ -34894,7 +34977,7 @@ 1 2 - 52071 + 52043 @@ -34910,7 +34993,7 @@ 1 2 - 52071 + 52043 @@ -34920,15 +35003,15 @@ constexpr_if_else - 30538 + 30522 constexpr_if_stmt - 30538 + 30522 else_id - 30538 + 30522 @@ -34942,7 +35025,7 @@ 1 2 - 30538 + 30522 @@ -34958,7 +35041,7 @@ 1 2 - 30538 + 30522 @@ -34968,15 +35051,15 @@ while_body - 29152 + 29141 while_stmt - 29152 + 29141 body_id - 29152 + 29141 @@ -34990,7 +35073,7 @@ 1 2 - 29152 + 29141 @@ -35006,7 +35089,7 @@ 1 2 - 29152 + 29141 @@ -35016,15 +35099,15 @@ do_body - 148882 + 148881 do_stmt - 148882 + 148881 body_id - 148882 + 148881 @@ -35038,7 +35121,7 @@ 1 2 - 148882 + 148881 @@ -35054,7 +35137,7 @@ 1 2 - 148882 + 148881 @@ -35064,15 +35147,15 @@ switch_initialization - 5 + 6 switch_stmt - 5 + 6 init_id - 5 + 6 @@ -35086,7 +35169,7 @@ 1 2 - 5 + 6 @@ -35102,7 +35185,7 @@ 1 2 - 5 + 6 @@ -35112,19 +35195,19 @@ switch_case - 201865 + 207702 switch_stmt - 10809 + 11029 index - 4689 + 4678 case_id - 201865 + 207702 @@ -35143,52 +35226,52 @@ 3 4 - 2402 + 2396 4 5 - 1753 + 1768 5 6 - 1048 + 1045 6 8 - 991 + 988 8 9 - 533 + 532 9 10 - 1029 + 1026 10 - 12 - 991 + 11 + 361 - 12 - 25 - 838 + 11 + 14 + 1007 - 30 - 152 - 819 + 14 + 31 + 931 - 181 + 36 247 - 343 + 912 @@ -35209,52 +35292,52 @@ 3 4 - 2402 + 2396 4 5 - 1753 + 1768 5 6 - 1048 + 1045 6 8 - 991 + 988 8 9 - 533 + 532 9 10 - 1029 + 1026 10 - 12 - 991 + 11 + 361 - 12 - 25 - 838 + 11 + 14 + 1007 - 30 - 152 - 819 + 14 + 31 + 931 - 181 + 36 247 - 343 + 912 @@ -35270,31 +35353,31 @@ 14 15 - 1239 + 1236 - 18 - 19 - 571 - - - 32 - 33 - 2020 + 19 + 20 + 570 33 - 62 - 400 + 34 + 2015 - 66 - 292 - 362 + 34 + 63 + 399 - 346 - 568 + 68 + 304 + 361 + + + 358 + 581 95 @@ -35311,31 +35394,31 @@ 14 15 - 1239 + 1236 - 18 - 19 - 571 - - - 32 - 33 - 2020 + 19 + 20 + 570 33 - 62 - 400 + 34 + 2015 - 66 - 292 - 362 + 34 + 63 + 399 - 346 - 568 + 68 + 304 + 361 + + + 358 + 581 95 @@ -35352,7 +35435,7 @@ 1 2 - 201865 + 207702 @@ -35368,7 +35451,7 @@ 1 2 - 201865 + 207702 @@ -35378,15 +35461,15 @@ switch_body - 20788 + 20787 switch_stmt - 20788 + 20787 body_id - 20788 + 20787 @@ -35400,7 +35483,7 @@ 1 2 - 20788 + 20787 @@ -35416,7 +35499,7 @@ 1 2 - 20788 + 20787 @@ -35426,15 +35509,15 @@ for_initialization - 53407 + 53406 for_stmt - 53407 + 53406 init_id - 53407 + 53406 @@ -35448,7 +35531,7 @@ 1 2 - 53407 + 53406 @@ -35464,7 +35547,7 @@ 1 2 - 53407 + 53406 @@ -35570,15 +35653,15 @@ for_body - 61560 + 61559 for_stmt - 61560 + 61559 body_id - 61560 + 61559 @@ -35592,7 +35675,7 @@ 1 2 - 61560 + 61559 @@ -35608,7 +35691,7 @@ 1 2 - 61560 + 61559 @@ -35618,11 +35701,11 @@ stmtparents - 4054468 + 4054557 id - 4054468 + 4054557 index @@ -35630,7 +35713,7 @@ parent - 1721248 + 1721299 @@ -35644,7 +35727,7 @@ 1 2 - 4054468 + 4054557 @@ -35660,7 +35743,7 @@ 1 2 - 4054468 + 4054557 @@ -35720,7 +35803,7 @@ 77 - 195132 + 195140 704 @@ -35781,7 +35864,7 @@ 77 - 195132 + 195140 704 @@ -35798,27 +35881,27 @@ 1 2 - 989113 + 989142 2 3 - 372551 + 372562 3 4 - 105697 + 105701 4 6 - 111251 + 111255 6 17 - 130351 + 130355 17 @@ -35839,27 +35922,27 @@ 1 2 - 989113 + 989142 2 3 - 372551 + 372562 3 4 - 105697 + 105701 4 6 - 111251 + 111255 6 17 - 130351 + 130355 17 @@ -35874,22 +35957,22 @@ ishandler - 62891 + 62736 block - 62891 + 62736 stmt_decl_bind - 580807 + 580797 stmt - 540988 + 540979 num @@ -35897,7 +35980,7 @@ decl - 580703 + 580692 @@ -35911,7 +35994,7 @@ 1 2 - 520281 + 520271 2 @@ -35932,7 +36015,7 @@ 1 2 - 520281 + 520271 2 @@ -36135,7 +36218,7 @@ 1 2 - 580665 + 580655 2 @@ -36156,7 +36239,7 @@ 1 2 - 580703 + 580692 @@ -36166,11 +36249,11 @@ stmt_decl_entry_bind - 523682 + 523673 stmt - 484163 + 484155 num @@ -36178,7 +36261,7 @@ decl_entry - 523624 + 523614 @@ -36192,7 +36275,7 @@ 1 2 - 463719 + 463710 2 @@ -36213,7 +36296,7 @@ 1 2 - 463719 + 463710 2 @@ -36416,7 +36499,7 @@ 1 2 - 523603 + 523593 3 @@ -36437,7 +36520,7 @@ 1 2 - 523624 + 523614 @@ -36447,15 +36530,15 @@ blockscope - 1415581 + 1415642 block - 1415581 + 1415642 enclosing - 1300376 + 1300432 @@ -36469,7 +36552,7 @@ 1 2 - 1415581 + 1415642 @@ -36485,12 +36568,12 @@ 1 2 - 1235077 + 1235130 2 13 - 65298 + 65301 @@ -36500,11 +36583,11 @@ jumpinfo - 254471 + 254469 id - 254471 + 254469 str @@ -36512,7 +36595,7 @@ target - 53145 + 53144 @@ -36526,7 +36609,7 @@ 1 2 - 254471 + 254469 @@ -36542,7 +36625,7 @@ 1 2 - 254471 + 254469 @@ -36640,7 +36723,7 @@ 2 3 - 26478 + 26477 3 @@ -36676,7 +36759,7 @@ 1 2 - 53145 + 53144 @@ -36686,11 +36769,11 @@ preprocdirects - 4389195 + 4386889 id - 4389195 + 4386889 kind @@ -36698,7 +36781,7 @@ location - 4386607 + 4384302 @@ -36712,7 +36795,7 @@ 1 2 - 4389195 + 4386889 @@ -36728,7 +36811,7 @@ 1 2 - 4389195 + 4386889 @@ -36876,7 +36959,7 @@ 1 2 - 4386503 + 4384198 26 @@ -36897,7 +36980,7 @@ 1 2 - 4386607 + 4384302 @@ -36907,15 +36990,15 @@ preprocpair - 1430040 + 1430102 begin - 1195898 + 1195950 elseelifend - 1430040 + 1430102 @@ -36929,12 +37012,12 @@ 1 2 - 977614 + 977656 2 3 - 208022 + 208031 3 @@ -36955,7 +37038,7 @@ 1 2 - 1430040 + 1430102 @@ -36965,41 +37048,41 @@ preproctrue - 766326 + 766359 branch - 766326 + 766359 preprocfalse - 331157 + 331171 branch - 331157 + 331171 preproctext - 3539079 + 3537219 id - 3539079 + 3537219 head - 2564841 + 2563493 body - 1498986 + 1498199 @@ -37013,7 +37096,7 @@ 1 2 - 3539079 + 3537219 @@ -37029,7 +37112,7 @@ 1 2 - 3539079 + 3537219 @@ -37045,12 +37128,12 @@ 1 2 - 2418979 + 2417708 2 740 - 145861 + 145784 @@ -37066,12 +37149,12 @@ 1 2 - 2503142 + 2501827 2 5 - 61698 + 61666 @@ -37087,17 +37170,17 @@ 1 2 - 1356955 + 1356242 2 6 - 112424 + 112364 6 11630 - 29607 + 29591 @@ -37113,17 +37196,17 @@ 1 2 - 1359957 + 1359243 2 7 - 112734 + 112675 7 2980 - 26294 + 26280 @@ -37133,15 +37216,15 @@ includes - 312967 + 312980 id - 312967 + 312980 included - 117071 + 117076 @@ -37155,7 +37238,7 @@ 1 2 - 312967 + 312980 @@ -37171,12 +37254,12 @@ 1 2 - 61100 + 61103 2 3 - 21921 + 21922 3 @@ -37191,7 +37274,7 @@ 6 14 - 8861 + 8862 14 @@ -37206,15 +37289,15 @@ link_targets - 819 + 817 id - 819 + 817 binary - 819 + 817 @@ -37228,7 +37311,7 @@ 1 2 - 819 + 817 @@ -37244,7 +37327,7 @@ 1 2 - 819 + 817 @@ -37254,11 +37337,11 @@ link_parent - 38877182 + 38867468 element - 4927618 + 4926386 link_target @@ -37276,17 +37359,17 @@ 1 2 - 664255 + 664089 2 9 - 25852 + 25845 9 10 - 4237510 + 4236452 diff --git a/cpp/ql/lib/upgrades/aa7ff0ab32cd4674f6ab731d32fea64116997b05/expr_reuse.ql b/cpp/ql/lib/upgrades/aa7ff0ab32cd4674f6ab731d32fea64116997b05/expr_reuse.ql new file mode 100644 index 00000000000..e0648d97b73 --- /dev/null +++ b/cpp/ql/lib/upgrades/aa7ff0ab32cd4674f6ab731d32fea64116997b05/expr_reuse.ql @@ -0,0 +1,7 @@ +class Expr extends @expr { + string toString() { none() } +} + +from Expr reuse, Expr original, int value_category +where expr_reuse(reuse, original) and expr_types(original, _, value_category) +select reuse, original, value_category diff --git a/cpp/ql/lib/upgrades/aa7ff0ab32cd4674f6ab731d32fea64116997b05/old.dbscheme b/cpp/ql/lib/upgrades/aa7ff0ab32cd4674f6ab731d32fea64116997b05/old.dbscheme new file mode 100644 index 00000000000..aa7ff0ab32c --- /dev/null +++ b/cpp/ql/lib/upgrades/aa7ff0ab32cd4674f6ab731d32fea64116997b05/old.dbscheme @@ -0,0 +1,2250 @@ + +/** + * An invocation of the compiler. Note that more than one file may be + * compiled per invocation. For example, this command compiles three + * source files: + * + * gcc -c f1.c f2.c f3.c + * + * The `id` simply identifies the invocation, while `cwd` is the working + * directory from which the compiler was invoked. + */ +compilations( + /** + * An invocation of the compiler. Note that more than one file may + * be compiled per invocation. For example, this command compiles + * three source files: + * + * gcc -c f1.c f2.c f3.c + */ + unique int id : @compilation, + string cwd : string ref +); + +/** + * The arguments that were passed to the extractor for a compiler + * invocation. If `id` is for the compiler invocation + * + * gcc -c f1.c f2.c f3.c + * + * then typically there will be rows for + * + * num | arg + * --- | --- + * 0 | *path to extractor* + * 1 | `--mimic` + * 2 | `/usr/bin/gcc` + * 3 | `-c` + * 4 | f1.c + * 5 | f2.c + * 6 | f3.c + */ +#keyset[id, num] +compilation_args( + int id : @compilation ref, + int num : int ref, + string arg : string ref +); + +/** + * The source files that are compiled by a compiler invocation. + * If `id` is for the compiler invocation + * + * gcc -c f1.c f2.c f3.c + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | f1.c + * 1 | f2.c + * 2 | f3.c + * + * Note that even if those files `#include` headers, those headers + * do not appear as rows. + */ +#keyset[id, num] +compilation_compiling_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The time taken by the extractor for a compiler invocation. + * + * For each file `num`, there will be rows for + * + * kind | seconds + * ---- | --- + * 1 | CPU seconds used by the extractor frontend + * 2 | Elapsed seconds during the extractor frontend + * 3 | CPU seconds used by the extractor backend + * 4 | Elapsed seconds during the extractor backend + */ +#keyset[id, num, kind] +compilation_time( + int id : @compilation ref, + int num : int ref, + /* kind: + 1 = frontend_cpu_seconds + 2 = frontend_elapsed_seconds + 3 = extractor_cpu_seconds + 4 = extractor_elapsed_seconds + */ + int kind : int ref, + float seconds : float ref +); + +/** + * An error or warning generated by the extractor. + * The diagnostic message `diagnostic` was generated during compiler + * invocation `compilation`, and is the `file_number_diagnostic_number`th + * message generated while extracting the `file_number`th file of that + * invocation. + */ +#keyset[compilation, file_number, file_number_diagnostic_number] +diagnostic_for( + int diagnostic : @diagnostic ref, + int compilation : @compilation ref, + int file_number : int ref, + int file_number_diagnostic_number : int ref +); + +/** + * If extraction was successful, then `cpu_seconds` and + * `elapsed_seconds` are the CPU time and elapsed time (respectively) + * that extraction took for compiler invocation `id`. + */ +compilation_finished( + unique int id : @compilation ref, + float cpu_seconds : float ref, + float elapsed_seconds : float ref +); + + +/** + * External data, loaded from CSV files during snapshot creation. See + * [Tutorial: Incorporating external data](https://help.semmle.com/wiki/display/SD/Tutorial%3A+Incorporating+external+data) + * for more information. + */ +externalData( + int id : @externalDataElement, + string path : string ref, + int column: int ref, + string value : string ref +); + +/** + * The source location of the snapshot. + */ +sourceLocationPrefix(string prefix : string ref); + +/** + * Information about packages that provide code used during compilation. + * The `id` is just a unique identifier. + * The `namespace` is typically the name of the package manager that + * provided the package (e.g. "dpkg" or "yum"). + * The `package_name` is the name of the package, and `version` is its + * version (as a string). + */ +external_packages( + unique int id: @external_package, + string namespace : string ref, + string package_name : string ref, + string version : string ref +); + +/** + * Holds if File `fileid` was provided by package `package`. + */ +header_to_external_package( + int fileid : @file ref, + int package : @external_package ref +); + +/* + * Version history + */ + +svnentries( + unique int id : @svnentry, + string revision : string ref, + string author : string ref, + date revisionDate : date ref, + int changeSize : int ref +) + +svnaffectedfiles( + int id : @svnentry ref, + int file : @file ref, + string action : string ref +) + +svnentrymsg( + unique int id : @svnentry ref, + string message : string ref +) + +svnchurn( + int commit : @svnentry ref, + int file : @file ref, + int addedLines : int ref, + int deletedLines : int ref +) + +/* + * C++ dbscheme + */ + +extractor_version( + string codeql_version: string ref, + string frontend_version: string ref +) + +@location = @location_stmt | @location_expr | @location_default ; + +/** + * The location of an element that is not an expression or a statement. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_default( + /** The location of an element that is not an expression or a statement. */ + unique int id: @location_default, + int container: @container ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +/** + * The location of a statement. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_stmt( + /** The location of a statement. */ + unique int id: @location_stmt, + int container: @container ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +/** + * The location of an expression. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_expr( + /** The location of an expression. */ + unique int id: @location_expr, + int container: @container ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +/** An element for which line-count information is available. */ +@sourceline = @file | @function | @variable | @enumconstant | @xmllocatable; + +numlines( + int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: int ref +); + +diagnostics( + unique int id: @diagnostic, + int severity: int ref, + string error_tag: string ref, + string error_message: string ref, + string full_error_message: string ref, + int location: @location_default ref +); + +files( + unique int id: @file, + string name: string ref +); + +folders( + unique int id: @folder, + string name: string ref +); + +@container = @folder | @file + +containerparent( + int parent: @container ref, + unique int child: @container ref +); + +fileannotations( + int id: @file ref, + int kind: int ref, + string name: string ref, + string value: string ref +); + +inmacroexpansion( + int id: @element ref, + int inv: @macroinvocation ref +); + +affectedbymacroexpansion( + int id: @element ref, + int inv: @macroinvocation ref +); + +case @macroinvocation.kind of + 1 = @macro_expansion +| 2 = @other_macro_reference +; + +macroinvocations( + unique int id: @macroinvocation, + int macro_id: @ppd_define ref, + int location: @location_default ref, + int kind: int ref +); + +macroparent( + unique int id: @macroinvocation ref, + int parent_id: @macroinvocation ref +); + +// a macroinvocation may be part of another location +// the way to find a constant expression that uses a macro +// is thus to find a constant expression that has a location +// to which a macro invocation is bound +macrolocationbind( + int id: @macroinvocation ref, + int location: @location ref +); + +#keyset[invocation, argument_index] +macro_argument_unexpanded( + int invocation: @macroinvocation ref, + int argument_index: int ref, + string text: string ref +); + +#keyset[invocation, argument_index] +macro_argument_expanded( + int invocation: @macroinvocation ref, + int argument_index: int ref, + string text: string ref +); + +/* +case @function.kind of + 1 = @normal_function +| 2 = @constructor +| 3 = @destructor +| 4 = @conversion_function +| 5 = @operator +| 6 = @builtin_function // GCC built-in functions, e.g. __builtin___memcpy_chk +| 7 = @user_defined_literal +| 8 = @deduction_guide +; +*/ + +functions( + unique int id: @function, + string name: string ref, + int kind: int ref +); + +function_entry_point( + int id: @function ref, + unique int entry_point: @stmt ref +); + +function_return_type( + int id: @function ref, + int return_type: @type ref +); + +/** + * If `function` is a coroutine, then this gives the `std::experimental::resumable_traits` + * instance associated with it, and the variables representing the `handle` and `promise` + * for it. + */ +coroutine( + unique int function: @function ref, + int traits: @type ref, + int handle: @variable ref, + int promise: @variable ref +); + +/** The `new` function used for allocating the coroutine state, if any. */ +coroutine_new( + unique int function: @function ref, + int new: @function ref +); + +/** The `delete` function used for deallocating the coroutine state, if any. */ +coroutine_delete( + unique int function: @function ref, + int delete: @function ref +); + +purefunctions(unique int id: @function ref); + +function_deleted(unique int id: @function ref); + +function_defaulted(unique int id: @function ref); + +function_prototyped(unique int id: @function ref) + +member_function_this_type( + unique int id: @function ref, + int this_type: @type ref +); + +#keyset[id, type_id] +fun_decls( + int id: @fun_decl, + int function: @function ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +fun_def(unique int id: @fun_decl ref); +fun_specialized(unique int id: @fun_decl ref); +fun_implicit(unique int id: @fun_decl ref); +fun_decl_specifiers( + int id: @fun_decl ref, + string name: string ref +) +#keyset[fun_decl, index] +fun_decl_throws( + int fun_decl: @fun_decl ref, + int index: int ref, + int type_id: @type ref +); +/* an empty throw specification is different from none */ +fun_decl_empty_throws(unique int fun_decl: @fun_decl ref); +fun_decl_noexcept( + int fun_decl: @fun_decl ref, + int constant: @expr ref +); +fun_decl_empty_noexcept(int fun_decl: @fun_decl ref); +fun_decl_typedef_type( + unique int fun_decl: @fun_decl ref, + int typedeftype_id: @usertype ref +); + +param_decl_bind( + unique int id: @var_decl ref, + int index: int ref, + int fun_decl: @fun_decl ref +); + +#keyset[id, type_id] +var_decls( + int id: @var_decl, + int variable: @variable ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +var_def(unique int id: @var_decl ref); +var_decl_specifiers( + int id: @var_decl ref, + string name: string ref +) +is_structured_binding(unique int id: @variable ref); + +type_decls( + unique int id: @type_decl, + int type_id: @type ref, + int location: @location_default ref +); +type_def(unique int id: @type_decl ref); +type_decl_top( + unique int type_decl: @type_decl ref +); + +namespace_decls( + unique int id: @namespace_decl, + int namespace_id: @namespace ref, + int location: @location_default ref, + int bodylocation: @location_default ref +); + +usings( + unique int id: @using, + int element_id: @element ref, + int location: @location_default ref +); + +/** The element which contains the `using` declaration. */ +using_container( + int parent: @element ref, + int child: @using ref +); + +static_asserts( + unique int id: @static_assert, + int condition : @expr ref, + string message : string ref, + int location: @location_default ref, + int enclosing : @element ref +); + +// each function has an ordered list of parameters +#keyset[id, type_id] +#keyset[function, index, type_id] +params( + int id: @parameter, + int function: @functionorblock ref, + int index: int ref, + int type_id: @type ref +); + +overrides( + int new: @function ref, + int old: @function ref +); + +#keyset[id, type_id] +membervariables( + int id: @membervariable, + int type_id: @type ref, + string name: string ref +); + +#keyset[id, type_id] +globalvariables( + int id: @globalvariable, + int type_id: @type ref, + string name: string ref +); + +#keyset[id, type_id] +localvariables( + int id: @localvariable, + int type_id: @type ref, + string name: string ref +); + +autoderivation( + unique int var: @variable ref, + int derivation_type: @type ref +); + +orphaned_variables( + int var: @localvariable ref, + int function: @function ref +) + +enumconstants( + unique int id: @enumconstant, + int parent: @usertype ref, + int index: int ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); + +@variable = @localscopevariable | @globalvariable | @membervariable; + +@localscopevariable = @localvariable | @parameter; + +/** + * Built-in types are the fundamental types, e.g., integral, floating, and void. + */ +case @builtintype.kind of + 1 = @errortype +| 2 = @unknowntype +| 3 = @void +| 4 = @boolean +| 5 = @char +| 6 = @unsigned_char +| 7 = @signed_char +| 8 = @short +| 9 = @unsigned_short +| 10 = @signed_short +| 11 = @int +| 12 = @unsigned_int +| 13 = @signed_int +| 14 = @long +| 15 = @unsigned_long +| 16 = @signed_long +| 17 = @long_long +| 18 = @unsigned_long_long +| 19 = @signed_long_long +// ... 20 Microsoft-specific __int8 +// ... 21 Microsoft-specific __int16 +// ... 22 Microsoft-specific __int32 +// ... 23 Microsoft-specific __int64 +| 24 = @float +| 25 = @double +| 26 = @long_double +| 27 = @complex_float // C99-specific _Complex float +| 28 = @complex_double // C99-specific _Complex double +| 29 = @complex_long_double // C99-specific _Complex long double +| 30 = @imaginary_float // C99-specific _Imaginary float +| 31 = @imaginary_double // C99-specific _Imaginary double +| 32 = @imaginary_long_double // C99-specific _Imaginary long double +| 33 = @wchar_t // Microsoft-specific +| 34 = @decltype_nullptr // C++11 +| 35 = @int128 // __int128 +| 36 = @unsigned_int128 // unsigned __int128 +| 37 = @signed_int128 // signed __int128 +| 38 = @float128 // __float128 +| 39 = @complex_float128 // _Complex __float128 +| 40 = @decimal32 // _Decimal32 +| 41 = @decimal64 // _Decimal64 +| 42 = @decimal128 // _Decimal128 +| 43 = @char16_t +| 44 = @char32_t +| 45 = @std_float32 // _Float32 +| 46 = @float32x // _Float32x +| 47 = @std_float64 // _Float64 +| 48 = @float64x // _Float64x +| 49 = @std_float128 // _Float128 +// ... 50 _Float128x +| 51 = @char8_t +| 52 = @float16 // _Float16 +| 53 = @complex_float16 // _Complex _Float16 +| 54 = @fp16 // __fp16 +| 55 = @std_bfloat16 // __bf16 +| 56 = @std_float16 // std::float16_t +| 57 = @complex_std_float32 // _Complex _Float32 +| 58 = @complex_float32x // _Complex _Float32x +| 59 = @complex_std_float64 // _Complex _Float64 +| 60 = @complex_float64x // _Complex _Float64x +| 61 = @complex_std_float128 // _Complex _Float128 +; + +builtintypes( + unique int id: @builtintype, + string name: string ref, + int kind: int ref, + int size: int ref, + int sign: int ref, + int alignment: int ref +); + +/** + * Derived types are types that are directly derived from existing types and + * point to, refer to, transform type data to return a new type. + */ +case @derivedtype.kind of + 1 = @pointer +| 2 = @reference +| 3 = @type_with_specifiers +| 4 = @array +| 5 = @gnu_vector +| 6 = @routineptr +| 7 = @routinereference +| 8 = @rvalue_reference // C++11 +// ... 9 type_conforming_to_protocols deprecated +| 10 = @block +; + +derivedtypes( + unique int id: @derivedtype, + string name: string ref, + int kind: int ref, + int type_id: @type ref +); + +pointerishsize(unique int id: @derivedtype ref, + int size: int ref, + int alignment: int ref); + +arraysizes( + unique int id: @derivedtype ref, + int num_elements: int ref, + int bytesize: int ref, + int alignment: int ref +); + +typedefbase( + unique int id: @usertype ref, + int type_id: @type ref +); + +/** + * An instance of the C++11 `decltype` operator. For example: + * ``` + * int a; + * decltype(1+a) b; + * ``` + * Here `expr` is `1+a`. + * + * Sometimes an additional pair of parentheses around the expression + * would change the semantics of this decltype, e.g. + * ``` + * struct A { double x; }; + * const A* a = new A(); + * decltype( a->x ); // type is double + * decltype((a->x)); // type is const double& + * ``` + * (Please consult the C++11 standard for more details). + * `parentheses_would_change_meaning` is `true` iff that is the case. + */ +#keyset[id, expr] +decltypes( + int id: @decltype, + int expr: @expr ref, + int base_type: @type ref, + boolean parentheses_would_change_meaning: boolean ref +); + +/* +case @usertype.kind of + 1 = @struct +| 2 = @class +| 3 = @union +| 4 = @enum +| 5 = @typedef // classic C: typedef typedef type name +| 6 = @template +| 7 = @template_parameter +| 8 = @template_template_parameter +| 9 = @proxy_class // a proxy class associated with a template parameter +// ... 10 objc_class deprecated +// ... 11 objc_protocol deprecated +// ... 12 objc_category deprecated +| 13 = @scoped_enum +| 14 = @using_alias // a using name = type style typedef +; +*/ + +usertypes( + unique int id: @usertype, + string name: string ref, + int kind: int ref +); + +usertypesize( + unique int id: @usertype ref, + int size: int ref, + int alignment: int ref +); + +usertype_final(unique int id: @usertype ref); + +usertype_uuid( + unique int id: @usertype ref, + string uuid: string ref +); + +mangled_name( + unique int id: @declaration ref, + int mangled_name : @mangledname, + boolean is_complete: boolean ref +); + +is_pod_class(unique int id: @usertype ref); +is_standard_layout_class(unique int id: @usertype ref); + +is_complete(unique int id: @usertype ref); + +is_class_template(unique int id: @usertype ref); +class_instantiation( + int to: @usertype ref, + int from: @usertype ref +); +class_template_argument( + int type_id: @usertype ref, + int index: int ref, + int arg_type: @type ref +); +class_template_argument_value( + int type_id: @usertype ref, + int index: int ref, + int arg_value: @expr ref +); + +is_proxy_class_for( + unique int id: @usertype ref, + unique int templ_param_id: @usertype ref +); + +type_mentions( + unique int id: @type_mention, + int type_id: @type ref, + int location: @location ref, + // a_symbol_reference_kind from the frontend. + int kind: int ref +); + +is_function_template(unique int id: @function ref); +function_instantiation( + unique int to: @function ref, + int from: @function ref +); +function_template_argument( + int function_id: @function ref, + int index: int ref, + int arg_type: @type ref +); +function_template_argument_value( + int function_id: @function ref, + int index: int ref, + int arg_value: @expr ref +); + +is_variable_template(unique int id: @variable ref); +variable_instantiation( + unique int to: @variable ref, + int from: @variable ref +); +variable_template_argument( + int variable_id: @variable ref, + int index: int ref, + int arg_type: @type ref +); +variable_template_argument_value( + int variable_id: @variable ref, + int index: int ref, + int arg_value: @expr ref +); + +/* + Fixed point types + precision(1) = short, precision(2) = default, precision(3) = long + is_unsigned(1) = unsigned is_unsigned(2) = signed + is_fract_type(1) = declared with _Fract + saturating(1) = declared with _Sat +*/ +/* TODO +fixedpointtypes( + unique int id: @fixedpointtype, + int precision: int ref, + int is_unsigned: int ref, + int is_fract_type: int ref, + int saturating: int ref); +*/ + +routinetypes( + unique int id: @routinetype, + int return_type: @type ref +); + +routinetypeargs( + int routine: @routinetype ref, + int index: int ref, + int type_id: @type ref +); + +ptrtomembers( + unique int id: @ptrtomember, + int type_id: @type ref, + int class_id: @type ref +); + +/* + specifiers for types, functions, and variables + + "public", + "protected", + "private", + + "const", + "volatile", + "static", + + "pure", + "virtual", + "sealed", // Microsoft + "__interface", // Microsoft + "inline", + "explicit", + + "near", // near far extension + "far", // near far extension + "__ptr32", // Microsoft + "__ptr64", // Microsoft + "__sptr", // Microsoft + "__uptr", // Microsoft + "dllimport", // Microsoft + "dllexport", // Microsoft + "thread", // Microsoft + "naked", // Microsoft + "microsoft_inline", // Microsoft + "forceinline", // Microsoft + "selectany", // Microsoft + "nothrow", // Microsoft + "novtable", // Microsoft + "noreturn", // Microsoft + "noinline", // Microsoft + "noalias", // Microsoft + "restrict", // Microsoft +*/ + +specifiers( + unique int id: @specifier, + unique string str: string ref +); + +typespecifiers( + int type_id: @type ref, + int spec_id: @specifier ref +); + +funspecifiers( + int func_id: @function ref, + int spec_id: @specifier ref +); + +varspecifiers( + int var_id: @accessible ref, + int spec_id: @specifier ref +); + +attributes( + unique int id: @attribute, + int kind: int ref, + string name: string ref, + string name_space: string ref, + int location: @location_default ref +); + +case @attribute.kind of + 0 = @gnuattribute +| 1 = @stdattribute +| 2 = @declspec +| 3 = @msattribute +| 4 = @alignas +// ... 5 @objc_propertyattribute deprecated +; + +attribute_args( + unique int id: @attribute_arg, + int kind: int ref, + int attribute: @attribute ref, + int index: int ref, + int location: @location_default ref +); + +case @attribute_arg.kind of + 0 = @attribute_arg_empty +| 1 = @attribute_arg_token +| 2 = @attribute_arg_constant +| 3 = @attribute_arg_type +| 4 = @attribute_arg_constant_expr +| 5 = @attribute_arg_expr +; + +attribute_arg_value( + unique int arg: @attribute_arg ref, + string value: string ref +); +attribute_arg_type( + unique int arg: @attribute_arg ref, + int type_id: @type ref +); +attribute_arg_constant( + unique int arg: @attribute_arg ref, + int constant: @expr ref +) +attribute_arg_expr( + unique int arg: @attribute_arg ref, + int expr: @expr ref +) +attribute_arg_name( + unique int arg: @attribute_arg ref, + string name: string ref +); + +typeattributes( + int type_id: @type ref, + int spec_id: @attribute ref +); + +funcattributes( + int func_id: @function ref, + int spec_id: @attribute ref +); + +varattributes( + int var_id: @accessible ref, + int spec_id: @attribute ref +); + +stmtattributes( + int stmt_id: @stmt ref, + int spec_id: @attribute ref +); + +@type = @builtintype + | @derivedtype + | @usertype + /* TODO | @fixedpointtype */ + | @routinetype + | @ptrtomember + | @decltype; + +unspecifiedtype( + unique int type_id: @type ref, + int unspecified_type_id: @type ref +); + +member( + int parent: @type ref, + int index: int ref, + int child: @member ref +); + +@enclosingfunction_child = @usertype | @variable | @namespace + +enclosingfunction( + unique int child: @enclosingfunction_child ref, + int parent: @function ref +); + +derivations( + unique int derivation: @derivation, + int sub: @type ref, + int index: int ref, + int super: @type ref, + int location: @location_default ref +); + +derspecifiers( + int der_id: @derivation ref, + int spec_id: @specifier ref +); + +/** + * Contains the byte offset of the base class subobject within the derived + * class. Only holds for non-virtual base classes, but see table + * `virtual_base_offsets` for offsets of virtual base class subobjects. + */ +direct_base_offsets( + unique int der_id: @derivation ref, + int offset: int ref +); + +/** + * Contains the byte offset of the virtual base class subobject for class + * `super` within a most-derived object of class `sub`. `super` can be either a + * direct or indirect base class. + */ +#keyset[sub, super] +virtual_base_offsets( + int sub: @usertype ref, + int super: @usertype ref, + int offset: int ref +); + +frienddecls( + unique int id: @frienddecl, + int type_id: @type ref, + int decl_id: @declaration ref, + int location: @location_default ref +); + +@declaredtype = @usertype ; + +@declaration = @function + | @declaredtype + | @variable + | @enumconstant + | @frienddecl; + +@member = @membervariable + | @function + | @declaredtype + | @enumconstant; + +@locatable = @diagnostic + | @declaration + | @ppd_include + | @ppd_define + | @macroinvocation + /*| @funcall*/ + | @xmllocatable + | @attribute + | @attribute_arg; + +@namedscope = @namespace | @usertype; + +@element = @locatable + | @file + | @folder + | @specifier + | @type + | @expr + | @namespace + | @initialiser + | @stmt + | @derivation + | @comment + | @preprocdirect + | @fun_decl + | @var_decl + | @type_decl + | @namespace_decl + | @using + | @namequalifier + | @specialnamequalifyingelement + | @static_assert + | @type_mention + | @lambdacapture; + +@exprparent = @element; + +comments( + unique int id: @comment, + string contents: string ref, + int location: @location_default ref +); + +commentbinding( + int id: @comment ref, + int element: @element ref +); + +exprconv( + int converted: @expr ref, + unique int conversion: @expr ref +); + +compgenerated(unique int id: @element ref); + +/** + * `destructor_call` destructs the `i`'th entity that should be + * destructed following `element`. Note that entities should be + * destructed in reverse construction order, so for a given `element` + * these should be called from highest to lowest `i`. + */ +#keyset[element, destructor_call] +#keyset[element, i] +synthetic_destructor_call( + int element: @element ref, + int i: int ref, + int destructor_call: @routineexpr ref +); + +namespaces( + unique int id: @namespace, + string name: string ref +); + +namespace_inline( + unique int id: @namespace ref +); + +namespacembrs( + int parentid: @namespace ref, + unique int memberid: @namespacembr ref +); + +@namespacembr = @declaration | @namespace; + +exprparents( + int expr_id: @expr ref, + int child_index: int ref, + int parent_id: @exprparent ref +); + +expr_isload(unique int expr_id: @expr ref); + +@cast = @c_style_cast + | @const_cast + | @dynamic_cast + | @reinterpret_cast + | @static_cast + ; + +/* +case @conversion.kind of + 0 = @simple_conversion // a numeric conversion, qualification conversion, or a reinterpret_cast +| 1 = @bool_conversion // conversion to 'bool' +| 2 = @base_class_conversion // a derived-to-base conversion +| 3 = @derived_class_conversion // a base-to-derived conversion +| 4 = @pm_base_class_conversion // a derived-to-base conversion of a pointer to member +| 5 = @pm_derived_class_conversion // a base-to-derived conversion of a pointer to member +| 6 = @glvalue_adjust // an adjustment of the type of a glvalue +| 7 = @prvalue_adjust // an adjustment of the type of a prvalue +; +*/ +/** + * Describes the semantics represented by a cast expression. This is largely + * independent of the source syntax of the cast, so it is separate from the + * regular expression kind. + */ +conversionkinds( + unique int expr_id: @cast ref, + int kind: int ref +); + +@conversion = @cast + | @array_to_pointer + | @parexpr + | @reference_to + | @ref_indirect + | @temp_init + ; + +/* +case @funbindexpr.kind of + 0 = @normal_call // a normal call +| 1 = @virtual_call // a virtual call +| 2 = @adl_call // a call whose target is only found by ADL +; +*/ +iscall( + unique int caller: @funbindexpr ref, + int kind: int ref +); + +numtemplatearguments( + unique int expr_id: @expr ref, + int num: int ref +); + +specialnamequalifyingelements( + unique int id: @specialnamequalifyingelement, + unique string name: string ref +); + +@namequalifiableelement = @expr | @namequalifier; +@namequalifyingelement = @namespace + | @specialnamequalifyingelement + | @usertype; + +namequalifiers( + unique int id: @namequalifier, + unique int qualifiableelement: @namequalifiableelement ref, + int qualifyingelement: @namequalifyingelement ref, + int location: @location_default ref +); + +varbind( + int expr: @varbindexpr ref, + int var: @accessible ref +); + +funbind( + int expr: @funbindexpr ref, + int fun: @function ref +); + +@any_new_expr = @new_expr + | @new_array_expr; + +@new_or_delete_expr = @any_new_expr + | @delete_expr + | @delete_array_expr; + +@prefix_crement_expr = @preincrexpr | @predecrexpr; + +@postfix_crement_expr = @postincrexpr | @postdecrexpr; + +@increment_expr = @preincrexpr | @postincrexpr; + +@decrement_expr = @predecrexpr | @postdecrexpr; + +@crement_expr = @increment_expr | @decrement_expr; + +@un_arith_op_expr = @arithnegexpr + | @unaryplusexpr + | @conjugation + | @realpartexpr + | @imagpartexpr + | @crement_expr + ; + +@un_bitwise_op_expr = @complementexpr; + +@un_log_op_expr = @notexpr; + +@un_op_expr = @address_of + | @indirect + | @un_arith_op_expr + | @un_bitwise_op_expr + | @builtinaddressof + | @vec_fill + | @un_log_op_expr + | @co_await + | @co_yield + ; + +@bin_log_op_expr = @andlogicalexpr | @orlogicalexpr; + +@cmp_op_expr = @eq_op_expr | @rel_op_expr; + +@eq_op_expr = @eqexpr | @neexpr; + +@rel_op_expr = @gtexpr + | @ltexpr + | @geexpr + | @leexpr + | @spaceshipexpr + ; + +@bin_bitwise_op_expr = @lshiftexpr + | @rshiftexpr + | @andexpr + | @orexpr + | @xorexpr + ; + +@p_arith_op_expr = @paddexpr + | @psubexpr + | @pdiffexpr + ; + +@bin_arith_op_expr = @addexpr + | @subexpr + | @mulexpr + | @divexpr + | @remexpr + | @jmulexpr + | @jdivexpr + | @fjaddexpr + | @jfaddexpr + | @fjsubexpr + | @jfsubexpr + | @minexpr + | @maxexpr + | @p_arith_op_expr + ; + +@bin_op_expr = @bin_arith_op_expr + | @bin_bitwise_op_expr + | @cmp_op_expr + | @bin_log_op_expr + ; + +@op_expr = @un_op_expr + | @bin_op_expr + | @assign_expr + | @conditionalexpr + ; + +@assign_arith_expr = @assignaddexpr + | @assignsubexpr + | @assignmulexpr + | @assigndivexpr + | @assignremexpr + ; + +@assign_bitwise_expr = @assignandexpr + | @assignorexpr + | @assignxorexpr + | @assignlshiftexpr + | @assignrshiftexpr + ; + +@assign_pointer_expr = @assignpaddexpr + | @assignpsubexpr + ; + +@assign_op_expr = @assign_arith_expr + | @assign_bitwise_expr + | @assign_pointer_expr + ; + +@assign_expr = @assignexpr | @assign_op_expr | @blockassignexpr + +/* + case @allocator.form of + 0 = plain + | 1 = alignment + ; +*/ + +/** + * The allocator function associated with a `new` or `new[]` expression. + * The `form` column specified whether the allocation call contains an alignment + * argument. + */ +expr_allocator( + unique int expr: @any_new_expr ref, + int func: @function ref, + int form: int ref +); + +/* + case @deallocator.form of + 0 = plain + | 1 = size + | 2 = alignment + | 3 = size_and_alignment + ; +*/ + +/** + * The deallocator function associated with a `delete`, `delete[]`, `new`, or + * `new[]` expression. For a `new` or `new[]` expression, the deallocator is the + * one used to free memory if the initialization throws an exception. + * The `form` column specifies whether the deallocation call contains a size + * argument, and alignment argument, or both. + */ +expr_deallocator( + unique int expr: @new_or_delete_expr ref, + int func: @function ref, + int form: int ref +); + +/** + * Holds if the `@conditionalexpr` is of the two operand form + * `guard ? : false`. + */ +expr_cond_two_operand( + unique int cond: @conditionalexpr ref +); + +/** + * The guard of `@conditionalexpr` `guard ? true : false` + */ +expr_cond_guard( + unique int cond: @conditionalexpr ref, + int guard: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` holds. For the two operand form + * `guard ?: false` consider using `expr_cond_guard` instead. + */ +expr_cond_true( + unique int cond: @conditionalexpr ref, + int true: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` does not hold. + */ +expr_cond_false( + unique int cond: @conditionalexpr ref, + int false: @expr ref +); + +/** A string representation of the value. */ +values( + unique int id: @value, + string str: string ref +); + +/** The actual text in the source code for the value, if any. */ +valuetext( + unique int id: @value ref, + string text: string ref +); + +valuebind( + int val: @value ref, + unique int expr: @expr ref +); + +fieldoffsets( + unique int id: @variable ref, + int byteoffset: int ref, + int bitoffset: int ref +); + +bitfield( + unique int id: @variable ref, + int bits: int ref, + int declared_bits: int ref +); + +/* TODO +memberprefix( + int member: @expr ref, + int prefix: @expr ref +); +*/ + +/* + kind(1) = mbrcallexpr + kind(2) = mbrptrcallexpr + kind(3) = mbrptrmbrcallexpr + kind(4) = ptrmbrptrmbrcallexpr + kind(5) = mbrreadexpr // x.y + kind(6) = mbrptrreadexpr // p->y + kind(7) = mbrptrmbrreadexpr // x.*pm + kind(8) = mbrptrmbrptrreadexpr // x->*pm + kind(9) = staticmbrreadexpr // static x.y + kind(10) = staticmbrptrreadexpr // static p->y +*/ +/* TODO +memberaccess( + int member: @expr ref, + int kind: int ref +); +*/ + +initialisers( + unique int init: @initialiser, + int var: @accessible ref, + unique int expr: @expr ref, + int location: @location_expr ref +); + +braced_initialisers( + int init: @initialiser ref +); + +/** + * An ancestor for the expression, for cases in which we cannot + * otherwise find the expression's parent. + */ +expr_ancestor( + int exp: @expr ref, + int ancestor: @element ref +); + +exprs( + unique int id: @expr, + int kind: int ref, + int location: @location_expr ref +); + +expr_reuse( + int reuse: @expr ref, + int original: @expr ref +) + +/* + case @value.category of + 1 = prval + | 2 = xval + | 3 = lval + ; +*/ +expr_types( + int id: @expr ref, + int typeid: @type ref, + int value_category: int ref +); + +case @expr.kind of + 1 = @errorexpr +| 2 = @address_of // & AddressOfExpr +| 3 = @reference_to // ReferenceToExpr (implicit?) +| 4 = @indirect // * PointerDereferenceExpr +| 5 = @ref_indirect // ReferenceDereferenceExpr (implicit?) +// ... +| 8 = @array_to_pointer // (???) +| 9 = @vacuous_destructor_call // VacuousDestructorCall +// ... +| 11 = @assume // Microsoft +| 12 = @parexpr +| 13 = @arithnegexpr +| 14 = @unaryplusexpr +| 15 = @complementexpr +| 16 = @notexpr +| 17 = @conjugation // GNU ~ operator +| 18 = @realpartexpr // GNU __real +| 19 = @imagpartexpr // GNU __imag +| 20 = @postincrexpr +| 21 = @postdecrexpr +| 22 = @preincrexpr +| 23 = @predecrexpr +| 24 = @conditionalexpr +| 25 = @addexpr +| 26 = @subexpr +| 27 = @mulexpr +| 28 = @divexpr +| 29 = @remexpr +| 30 = @jmulexpr // C99 mul imaginary +| 31 = @jdivexpr // C99 div imaginary +| 32 = @fjaddexpr // C99 add real + imaginary +| 33 = @jfaddexpr // C99 add imaginary + real +| 34 = @fjsubexpr // C99 sub real - imaginary +| 35 = @jfsubexpr // C99 sub imaginary - real +| 36 = @paddexpr // pointer add (pointer + int or int + pointer) +| 37 = @psubexpr // pointer sub (pointer - integer) +| 38 = @pdiffexpr // difference between two pointers +| 39 = @lshiftexpr +| 40 = @rshiftexpr +| 41 = @andexpr +| 42 = @orexpr +| 43 = @xorexpr +| 44 = @eqexpr +| 45 = @neexpr +| 46 = @gtexpr +| 47 = @ltexpr +| 48 = @geexpr +| 49 = @leexpr +| 50 = @minexpr // GNU minimum +| 51 = @maxexpr // GNU maximum +| 52 = @assignexpr +| 53 = @assignaddexpr +| 54 = @assignsubexpr +| 55 = @assignmulexpr +| 56 = @assigndivexpr +| 57 = @assignremexpr +| 58 = @assignlshiftexpr +| 59 = @assignrshiftexpr +| 60 = @assignandexpr +| 61 = @assignorexpr +| 62 = @assignxorexpr +| 63 = @assignpaddexpr // assign pointer add +| 64 = @assignpsubexpr // assign pointer sub +| 65 = @andlogicalexpr +| 66 = @orlogicalexpr +| 67 = @commaexpr +| 68 = @subscriptexpr // access to member of an array, e.g., a[5] +// ... 69 @objc_subscriptexpr deprecated +// ... 70 @cmdaccess deprecated +// ... +| 73 = @virtfunptrexpr +| 74 = @callexpr +// ... 75 @msgexpr_normal deprecated +// ... 76 @msgexpr_super deprecated +// ... 77 @atselectorexpr deprecated +// ... 78 @atprotocolexpr deprecated +| 79 = @vastartexpr +| 80 = @vaargexpr +| 81 = @vaendexpr +| 82 = @vacopyexpr +// ... 83 @atencodeexpr deprecated +| 84 = @varaccess +| 85 = @thisaccess +// ... 86 @objc_box_expr deprecated +| 87 = @new_expr +| 88 = @delete_expr +| 89 = @throw_expr +| 90 = @condition_decl // a variable declared in a condition, e.g., if(int x = y > 2) +| 91 = @braced_init_list +| 92 = @type_id +| 93 = @runtime_sizeof +| 94 = @runtime_alignof +| 95 = @sizeof_pack +| 96 = @expr_stmt // GNU extension +| 97 = @routineexpr +| 98 = @type_operand // used to access a type in certain contexts (haven't found any examples yet....) +| 99 = @offsetofexpr // offsetof ::= type and field +| 100 = @hasassignexpr // __has_assign ::= type +| 101 = @hascopyexpr // __has_copy ::= type +| 102 = @hasnothrowassign // __has_nothrow_assign ::= type +| 103 = @hasnothrowconstr // __has_nothrow_constructor ::= type +| 104 = @hasnothrowcopy // __has_nothrow_copy ::= type +| 105 = @hastrivialassign // __has_trivial_assign ::= type +| 106 = @hastrivialconstr // __has_trivial_constructor ::= type +| 107 = @hastrivialcopy // __has_trivial_copy ::= type +| 108 = @hasuserdestr // __has_user_destructor ::= type +| 109 = @hasvirtualdestr // __has_virtual_destructor ::= type +| 110 = @isabstractexpr // __is_abstract ::= type +| 111 = @isbaseofexpr // __is_base_of ::= type type +| 112 = @isclassexpr // __is_class ::= type +| 113 = @isconvtoexpr // __is_convertible_to ::= type type +| 114 = @isemptyexpr // __is_empty ::= type +| 115 = @isenumexpr // __is_enum ::= type +| 116 = @ispodexpr // __is_pod ::= type +| 117 = @ispolyexpr // __is_polymorphic ::= type +| 118 = @isunionexpr // __is_union ::= type +| 119 = @typescompexpr // GNU __builtin_types_compatible ::= type type +| 120 = @intaddrexpr // frontend internal builtin, used to implement offsetof +// ... +| 122 = @hastrivialdestructor // __has_trivial_destructor ::= type +| 123 = @literal +| 124 = @uuidof +| 127 = @aggregateliteral +| 128 = @delete_array_expr +| 129 = @new_array_expr +// ... 130 @objc_array_literal deprecated +// ... 131 @objc_dictionary_literal deprecated +| 132 = @foldexpr +// ... +| 200 = @ctordirectinit +| 201 = @ctorvirtualinit +| 202 = @ctorfieldinit +| 203 = @ctordelegatinginit +| 204 = @dtordirectdestruct +| 205 = @dtorvirtualdestruct +| 206 = @dtorfielddestruct +// ... +| 210 = @static_cast +| 211 = @reinterpret_cast +| 212 = @const_cast +| 213 = @dynamic_cast +| 214 = @c_style_cast +| 215 = @lambdaexpr +| 216 = @param_ref +| 217 = @noopexpr +// ... +| 294 = @istriviallyconstructibleexpr +| 295 = @isdestructibleexpr +| 296 = @isnothrowdestructibleexpr +| 297 = @istriviallydestructibleexpr +| 298 = @istriviallyassignableexpr +| 299 = @isnothrowassignableexpr +| 300 = @istrivialexpr +| 301 = @isstandardlayoutexpr +| 302 = @istriviallycopyableexpr +| 303 = @isliteraltypeexpr +| 304 = @hastrivialmoveconstructorexpr +| 305 = @hastrivialmoveassignexpr +| 306 = @hasnothrowmoveassignexpr +| 307 = @isconstructibleexpr +| 308 = @isnothrowconstructibleexpr +| 309 = @hasfinalizerexpr +| 310 = @isdelegateexpr +| 311 = @isinterfaceclassexpr +| 312 = @isrefarrayexpr +| 313 = @isrefclassexpr +| 314 = @issealedexpr +| 315 = @issimplevalueclassexpr +| 316 = @isvalueclassexpr +| 317 = @isfinalexpr +| 319 = @noexceptexpr +| 320 = @builtinshufflevector +| 321 = @builtinchooseexpr +| 322 = @builtinaddressof +| 323 = @vec_fill +| 324 = @builtinconvertvector +| 325 = @builtincomplex +| 326 = @spaceshipexpr +| 327 = @co_await +| 328 = @co_yield +| 329 = @temp_init +| 330 = @isassignable +| 331 = @isaggregate +| 332 = @hasuniqueobjectrepresentations +| 333 = @builtinbitcast +| 334 = @builtinshuffle +| 335 = @blockassignexpr +| 336 = @issame +| 337 = @isfunction +| 338 = @islayoutcompatible +| 339 = @ispointerinterconvertiblebaseof +| 340 = @isarray +| 341 = @arrayrank +| 342 = @arrayextent +| 343 = @isarithmetic +| 344 = @iscompletetype +| 345 = @iscompound +| 346 = @isconst +| 347 = @isfloatingpoint +| 348 = @isfundamental +| 349 = @isintegral +| 350 = @islvaluereference +| 351 = @ismemberfunctionpointer +| 352 = @ismemberobjectpointer +| 353 = @ismemberpointer +| 354 = @isobject +| 355 = @ispointer +| 356 = @isreference +| 357 = @isrvaluereference +| 358 = @isscalar +| 359 = @issigned +| 360 = @isunsigned +| 361 = @isvoid +| 362 = @isvolatile +| 363 = @reuseexpr +; + +@var_args_expr = @vastartexpr + | @vaendexpr + | @vaargexpr + | @vacopyexpr + ; + +@builtin_op = @var_args_expr + | @noopexpr + | @offsetofexpr + | @intaddrexpr + | @hasassignexpr + | @hascopyexpr + | @hasnothrowassign + | @hasnothrowconstr + | @hasnothrowcopy + | @hastrivialassign + | @hastrivialconstr + | @hastrivialcopy + | @hastrivialdestructor + | @hasuserdestr + | @hasvirtualdestr + | @isabstractexpr + | @isbaseofexpr + | @isclassexpr + | @isconvtoexpr + | @isemptyexpr + | @isenumexpr + | @ispodexpr + | @ispolyexpr + | @isunionexpr + | @typescompexpr + | @builtinshufflevector + | @builtinconvertvector + | @builtinaddressof + | @istriviallyconstructibleexpr + | @isdestructibleexpr + | @isnothrowdestructibleexpr + | @istriviallydestructibleexpr + | @istriviallyassignableexpr + | @isnothrowassignableexpr + | @istrivialexpr + | @isstandardlayoutexpr + | @istriviallycopyableexpr + | @isliteraltypeexpr + | @hastrivialmoveconstructorexpr + | @hastrivialmoveassignexpr + | @hasnothrowmoveassignexpr + | @isconstructibleexpr + | @isnothrowconstructibleexpr + | @hasfinalizerexpr + | @isdelegateexpr + | @isinterfaceclassexpr + | @isrefarrayexpr + | @isrefclassexpr + | @issealedexpr + | @issimplevalueclassexpr + | @isvalueclassexpr + | @isfinalexpr + | @builtinchooseexpr + | @builtincomplex + | @isassignable + | @isaggregate + | @hasuniqueobjectrepresentations + | @builtinbitcast + | @builtinshuffle + | @issame + | @isfunction + | @islayoutcompatible + | @ispointerinterconvertiblebaseof + | @isarray + | @arrayrank + | @arrayextent + | @isarithmetic + | @iscompletetype + | @iscompound + | @isconst + | @isfloatingpoint + | @isfundamental + | @isintegral + | @islvaluereference + | @ismemberfunctionpointer + | @ismemberobjectpointer + | @ismemberpointer + | @isobject + | @ispointer + | @isreference + | @isrvaluereference + | @isscalar + | @issigned + | @isunsigned + | @isvoid + | @isvolatile + ; + +new_allocated_type( + unique int expr: @new_expr ref, + int type_id: @type ref +); + +new_array_allocated_type( + unique int expr: @new_array_expr ref, + int type_id: @type ref +); + +/** + * The field being initialized by an initializer expression within an aggregate + * initializer for a class/struct/union. Position is used to sort repeated initializers. + */ +#keyset[aggregate, position] +aggregate_field_init( + int aggregate: @aggregateliteral ref, + int initializer: @expr ref, + int field: @membervariable ref, + int position: int ref +); + +/** + * The index of the element being initialized by an initializer expression + * within an aggregate initializer for an array. Position is used to sort repeated initializers. + */ +#keyset[aggregate, position] +aggregate_array_init( + int aggregate: @aggregateliteral ref, + int initializer: @expr ref, + int element_index: int ref, + int position: int ref +); + +@ctorinit = @ctordirectinit + | @ctorvirtualinit + | @ctorfieldinit + | @ctordelegatinginit; +@dtordestruct = @dtordirectdestruct + | @dtorvirtualdestruct + | @dtorfielddestruct; + + +condition_decl_bind( + unique int expr: @condition_decl ref, + unique int decl: @declaration ref +); + +typeid_bind( + unique int expr: @type_id ref, + int type_id: @type ref +); + +uuidof_bind( + unique int expr: @uuidof ref, + int type_id: @type ref +); + +@runtime_sizeof_or_alignof = @runtime_sizeof | @runtime_alignof; + +sizeof_bind( + unique int expr: @runtime_sizeof_or_alignof ref, + int type_id: @type ref +); + +code_block( + unique int block: @literal ref, + unique int routine: @function ref +); + +lambdas( + unique int expr: @lambdaexpr ref, + string default_capture: string ref, + boolean has_explicit_return_type: boolean ref +); + +lambda_capture( + unique int id: @lambdacapture, + int lambda: @lambdaexpr ref, + int index: int ref, + int field: @membervariable ref, + boolean captured_by_reference: boolean ref, + boolean is_implicit: boolean ref, + int location: @location_default ref +); + +@funbindexpr = @routineexpr + | @new_expr + | @delete_expr + | @delete_array_expr + | @ctordirectinit + | @ctorvirtualinit + | @ctordelegatinginit + | @dtordirectdestruct + | @dtorvirtualdestruct; + +@varbindexpr = @varaccess | @ctorfieldinit | @dtorfielddestruct; +@addressable = @function | @variable ; +@accessible = @addressable | @enumconstant ; + +@access = @varaccess | @routineexpr ; + +fold( + int expr: @foldexpr ref, + string operator: string ref, + boolean is_left_fold: boolean ref +); + +stmts( + unique int id: @stmt, + int kind: int ref, + int location: @location_stmt ref +); + +case @stmt.kind of + 1 = @stmt_expr +| 2 = @stmt_if +| 3 = @stmt_while +| 4 = @stmt_goto +| 5 = @stmt_label +| 6 = @stmt_return +| 7 = @stmt_block +| 8 = @stmt_end_test_while // do { ... } while ( ... ) +| 9 = @stmt_for +| 10 = @stmt_switch_case +| 11 = @stmt_switch +| 13 = @stmt_asm // "asm" statement or the body of an asm function +| 15 = @stmt_try_block +| 16 = @stmt_microsoft_try // Microsoft +| 17 = @stmt_decl +| 18 = @stmt_set_vla_size // C99 +| 19 = @stmt_vla_decl // C99 +| 25 = @stmt_assigned_goto // GNU +| 26 = @stmt_empty +| 27 = @stmt_continue +| 28 = @stmt_break +| 29 = @stmt_range_based_for // C++11 +// ... 30 @stmt_at_autoreleasepool_block deprecated +// ... 31 @stmt_objc_for_in deprecated +// ... 32 @stmt_at_synchronized deprecated +| 33 = @stmt_handler +// ... 34 @stmt_finally_end deprecated +| 35 = @stmt_constexpr_if +| 37 = @stmt_co_return +; + +type_vla( + int type_id: @type ref, + int decl: @stmt_vla_decl ref +); + +variable_vla( + int var: @variable ref, + int decl: @stmt_vla_decl ref +); + +if_initialization( + unique int if_stmt: @stmt_if ref, + int init_id: @stmt ref +); + +if_then( + unique int if_stmt: @stmt_if ref, + int then_id: @stmt ref +); + +if_else( + unique int if_stmt: @stmt_if ref, + int else_id: @stmt ref +); + +constexpr_if_initialization( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int init_id: @stmt ref +); + +constexpr_if_then( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int then_id: @stmt ref +); + +constexpr_if_else( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int else_id: @stmt ref +); + +while_body( + unique int while_stmt: @stmt_while ref, + int body_id: @stmt ref +); + +do_body( + unique int do_stmt: @stmt_end_test_while ref, + int body_id: @stmt ref +); + +switch_initialization( + unique int switch_stmt: @stmt_switch ref, + int init_id: @stmt ref +); + +#keyset[switch_stmt, index] +switch_case( + int switch_stmt: @stmt_switch ref, + int index: int ref, + int case_id: @stmt_switch_case ref +); + +switch_body( + unique int switch_stmt: @stmt_switch ref, + int body_id: @stmt ref +); + +@stmt_for_or_range_based_for = @stmt_for + | @stmt_range_based_for; + +for_initialization( + unique int for_stmt: @stmt_for_or_range_based_for ref, + int init_id: @stmt ref +); + +for_condition( + unique int for_stmt: @stmt_for ref, + int condition_id: @expr ref +); + +for_update( + unique int for_stmt: @stmt_for ref, + int update_id: @expr ref +); + +for_body( + unique int for_stmt: @stmt_for ref, + int body_id: @stmt ref +); + +@stmtparent = @stmt | @expr_stmt ; +stmtparents( + unique int id: @stmt ref, + int index: int ref, + int parent: @stmtparent ref +); + +ishandler(unique int block: @stmt_block ref); + +@cfgnode = @stmt | @expr | @function | @initialiser ; + +stmt_decl_bind( + int stmt: @stmt_decl ref, + int num: int ref, + int decl: @declaration ref +); + +stmt_decl_entry_bind( + int stmt: @stmt_decl ref, + int num: int ref, + int decl_entry: @element ref +); + +@functionorblock = @function | @stmt_block; + +blockscope( + unique int block: @stmt_block ref, + int enclosing: @functionorblock ref +); + +@jump = @stmt_goto | @stmt_break | @stmt_continue; + +@jumporlabel = @jump | @stmt_label | @literal; + +jumpinfo( + unique int id: @jumporlabel ref, + string str: string ref, + int target: @stmt ref +); + +preprocdirects( + unique int id: @preprocdirect, + int kind: int ref, + int location: @location_default ref +); +case @preprocdirect.kind of + 0 = @ppd_if +| 1 = @ppd_ifdef +| 2 = @ppd_ifndef +| 3 = @ppd_elif +| 4 = @ppd_else +| 5 = @ppd_endif +| 6 = @ppd_plain_include +| 7 = @ppd_define +| 8 = @ppd_undef +| 9 = @ppd_line +| 10 = @ppd_error +| 11 = @ppd_pragma +| 12 = @ppd_objc_import +| 13 = @ppd_include_next +| 18 = @ppd_warning +; + +@ppd_include = @ppd_plain_include | @ppd_objc_import | @ppd_include_next; + +@ppd_branch = @ppd_if | @ppd_ifdef | @ppd_ifndef | @ppd_elif; + +preprocpair( + int begin : @ppd_branch ref, + int elseelifend : @preprocdirect ref +); + +preproctrue(int branch : @ppd_branch ref); +preprocfalse(int branch : @ppd_branch ref); + +preproctext( + unique int id: @preprocdirect ref, + string head: string ref, + string body: string ref +); + +includes( + unique int id: @ppd_include ref, + int included: @file ref +); + +link_targets( + int id: @link_target, + int binary: @file ref +); + +link_parent( + int element : @element ref, + int link_target : @link_target ref +); + +/* XML Files */ + +xmlEncoding(unique int id: @file ref, string encoding: string ref); + +xmlDTDs( + unique int id: @xmldtd, + string root: string ref, + string publicId: string ref, + string systemId: string ref, + int fileid: @file ref +); + +xmlElements( + unique int id: @xmlelement, + string name: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int fileid: @file ref +); + +xmlAttrs( + unique int id: @xmlattribute, + int elementid: @xmlelement ref, + string name: string ref, + string value: string ref, + int idx: int ref, + int fileid: @file ref +); + +xmlNs( + int id: @xmlnamespace, + string prefixName: string ref, + string URI: string ref, + int fileid: @file ref +); + +xmlHasNs( + int elementId: @xmlnamespaceable ref, + int nsId: @xmlnamespace ref, + int fileid: @file ref +); + +xmlComments( + unique int id: @xmlcomment, + string text: string ref, + int parentid: @xmlparent ref, + int fileid: @file ref +); + +xmlChars( + unique int id: @xmlcharacters, + string text: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int isCDATA: int ref, + int fileid: @file ref +); + +@xmlparent = @file | @xmlelement; +@xmlnamespaceable = @xmlelement | @xmlattribute; + +xmllocations( + int xmlElement: @xmllocatable ref, + int location: @location_default ref +); + +@xmllocatable = @xmlcharacters + | @xmlelement + | @xmlcomment + | @xmlattribute + | @xmldtd + | @file + | @xmlnamespace; diff --git a/cpp/ql/lib/upgrades/aa7ff0ab32cd4674f6ab731d32fea64116997b05/semmlecode.cpp.dbscheme b/cpp/ql/lib/upgrades/aa7ff0ab32cd4674f6ab731d32fea64116997b05/semmlecode.cpp.dbscheme new file mode 100644 index 00000000000..abfce5c170f --- /dev/null +++ b/cpp/ql/lib/upgrades/aa7ff0ab32cd4674f6ab731d32fea64116997b05/semmlecode.cpp.dbscheme @@ -0,0 +1,2251 @@ + +/** + * An invocation of the compiler. Note that more than one file may be + * compiled per invocation. For example, this command compiles three + * source files: + * + * gcc -c f1.c f2.c f3.c + * + * The `id` simply identifies the invocation, while `cwd` is the working + * directory from which the compiler was invoked. + */ +compilations( + /** + * An invocation of the compiler. Note that more than one file may + * be compiled per invocation. For example, this command compiles + * three source files: + * + * gcc -c f1.c f2.c f3.c + */ + unique int id : @compilation, + string cwd : string ref +); + +/** + * The arguments that were passed to the extractor for a compiler + * invocation. If `id` is for the compiler invocation + * + * gcc -c f1.c f2.c f3.c + * + * then typically there will be rows for + * + * num | arg + * --- | --- + * 0 | *path to extractor* + * 1 | `--mimic` + * 2 | `/usr/bin/gcc` + * 3 | `-c` + * 4 | f1.c + * 5 | f2.c + * 6 | f3.c + */ +#keyset[id, num] +compilation_args( + int id : @compilation ref, + int num : int ref, + string arg : string ref +); + +/** + * The source files that are compiled by a compiler invocation. + * If `id` is for the compiler invocation + * + * gcc -c f1.c f2.c f3.c + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | f1.c + * 1 | f2.c + * 2 | f3.c + * + * Note that even if those files `#include` headers, those headers + * do not appear as rows. + */ +#keyset[id, num] +compilation_compiling_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The time taken by the extractor for a compiler invocation. + * + * For each file `num`, there will be rows for + * + * kind | seconds + * ---- | --- + * 1 | CPU seconds used by the extractor frontend + * 2 | Elapsed seconds during the extractor frontend + * 3 | CPU seconds used by the extractor backend + * 4 | Elapsed seconds during the extractor backend + */ +#keyset[id, num, kind] +compilation_time( + int id : @compilation ref, + int num : int ref, + /* kind: + 1 = frontend_cpu_seconds + 2 = frontend_elapsed_seconds + 3 = extractor_cpu_seconds + 4 = extractor_elapsed_seconds + */ + int kind : int ref, + float seconds : float ref +); + +/** + * An error or warning generated by the extractor. + * The diagnostic message `diagnostic` was generated during compiler + * invocation `compilation`, and is the `file_number_diagnostic_number`th + * message generated while extracting the `file_number`th file of that + * invocation. + */ +#keyset[compilation, file_number, file_number_diagnostic_number] +diagnostic_for( + int diagnostic : @diagnostic ref, + int compilation : @compilation ref, + int file_number : int ref, + int file_number_diagnostic_number : int ref +); + +/** + * If extraction was successful, then `cpu_seconds` and + * `elapsed_seconds` are the CPU time and elapsed time (respectively) + * that extraction took for compiler invocation `id`. + */ +compilation_finished( + unique int id : @compilation ref, + float cpu_seconds : float ref, + float elapsed_seconds : float ref +); + + +/** + * External data, loaded from CSV files during snapshot creation. See + * [Tutorial: Incorporating external data](https://help.semmle.com/wiki/display/SD/Tutorial%3A+Incorporating+external+data) + * for more information. + */ +externalData( + int id : @externalDataElement, + string path : string ref, + int column: int ref, + string value : string ref +); + +/** + * The source location of the snapshot. + */ +sourceLocationPrefix(string prefix : string ref); + +/** + * Information about packages that provide code used during compilation. + * The `id` is just a unique identifier. + * The `namespace` is typically the name of the package manager that + * provided the package (e.g. "dpkg" or "yum"). + * The `package_name` is the name of the package, and `version` is its + * version (as a string). + */ +external_packages( + unique int id: @external_package, + string namespace : string ref, + string package_name : string ref, + string version : string ref +); + +/** + * Holds if File `fileid` was provided by package `package`. + */ +header_to_external_package( + int fileid : @file ref, + int package : @external_package ref +); + +/* + * Version history + */ + +svnentries( + unique int id : @svnentry, + string revision : string ref, + string author : string ref, + date revisionDate : date ref, + int changeSize : int ref +) + +svnaffectedfiles( + int id : @svnentry ref, + int file : @file ref, + string action : string ref +) + +svnentrymsg( + unique int id : @svnentry ref, + string message : string ref +) + +svnchurn( + int commit : @svnentry ref, + int file : @file ref, + int addedLines : int ref, + int deletedLines : int ref +) + +/* + * C++ dbscheme + */ + +extractor_version( + string codeql_version: string ref, + string frontend_version: string ref +) + +@location = @location_stmt | @location_expr | @location_default ; + +/** + * The location of an element that is not an expression or a statement. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_default( + /** The location of an element that is not an expression or a statement. */ + unique int id: @location_default, + int container: @container ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +/** + * The location of a statement. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_stmt( + /** The location of a statement. */ + unique int id: @location_stmt, + int container: @container ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +/** + * The location of an expression. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_expr( + /** The location of an expression. */ + unique int id: @location_expr, + int container: @container ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +/** An element for which line-count information is available. */ +@sourceline = @file | @function | @variable | @enumconstant | @xmllocatable; + +numlines( + int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: int ref +); + +diagnostics( + unique int id: @diagnostic, + int severity: int ref, + string error_tag: string ref, + string error_message: string ref, + string full_error_message: string ref, + int location: @location_default ref +); + +files( + unique int id: @file, + string name: string ref +); + +folders( + unique int id: @folder, + string name: string ref +); + +@container = @folder | @file + +containerparent( + int parent: @container ref, + unique int child: @container ref +); + +fileannotations( + int id: @file ref, + int kind: int ref, + string name: string ref, + string value: string ref +); + +inmacroexpansion( + int id: @element ref, + int inv: @macroinvocation ref +); + +affectedbymacroexpansion( + int id: @element ref, + int inv: @macroinvocation ref +); + +case @macroinvocation.kind of + 1 = @macro_expansion +| 2 = @other_macro_reference +; + +macroinvocations( + unique int id: @macroinvocation, + int macro_id: @ppd_define ref, + int location: @location_default ref, + int kind: int ref +); + +macroparent( + unique int id: @macroinvocation ref, + int parent_id: @macroinvocation ref +); + +// a macroinvocation may be part of another location +// the way to find a constant expression that uses a macro +// is thus to find a constant expression that has a location +// to which a macro invocation is bound +macrolocationbind( + int id: @macroinvocation ref, + int location: @location ref +); + +#keyset[invocation, argument_index] +macro_argument_unexpanded( + int invocation: @macroinvocation ref, + int argument_index: int ref, + string text: string ref +); + +#keyset[invocation, argument_index] +macro_argument_expanded( + int invocation: @macroinvocation ref, + int argument_index: int ref, + string text: string ref +); + +/* +case @function.kind of + 1 = @normal_function +| 2 = @constructor +| 3 = @destructor +| 4 = @conversion_function +| 5 = @operator +| 6 = @builtin_function // GCC built-in functions, e.g. __builtin___memcpy_chk +| 7 = @user_defined_literal +| 8 = @deduction_guide +; +*/ + +functions( + unique int id: @function, + string name: string ref, + int kind: int ref +); + +function_entry_point( + int id: @function ref, + unique int entry_point: @stmt ref +); + +function_return_type( + int id: @function ref, + int return_type: @type ref +); + +/** + * If `function` is a coroutine, then this gives the `std::experimental::resumable_traits` + * instance associated with it, and the variables representing the `handle` and `promise` + * for it. + */ +coroutine( + unique int function: @function ref, + int traits: @type ref, + int handle: @variable ref, + int promise: @variable ref +); + +/** The `new` function used for allocating the coroutine state, if any. */ +coroutine_new( + unique int function: @function ref, + int new: @function ref +); + +/** The `delete` function used for deallocating the coroutine state, if any. */ +coroutine_delete( + unique int function: @function ref, + int delete: @function ref +); + +purefunctions(unique int id: @function ref); + +function_deleted(unique int id: @function ref); + +function_defaulted(unique int id: @function ref); + +function_prototyped(unique int id: @function ref) + +member_function_this_type( + unique int id: @function ref, + int this_type: @type ref +); + +#keyset[id, type_id] +fun_decls( + int id: @fun_decl, + int function: @function ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +fun_def(unique int id: @fun_decl ref); +fun_specialized(unique int id: @fun_decl ref); +fun_implicit(unique int id: @fun_decl ref); +fun_decl_specifiers( + int id: @fun_decl ref, + string name: string ref +) +#keyset[fun_decl, index] +fun_decl_throws( + int fun_decl: @fun_decl ref, + int index: int ref, + int type_id: @type ref +); +/* an empty throw specification is different from none */ +fun_decl_empty_throws(unique int fun_decl: @fun_decl ref); +fun_decl_noexcept( + int fun_decl: @fun_decl ref, + int constant: @expr ref +); +fun_decl_empty_noexcept(int fun_decl: @fun_decl ref); +fun_decl_typedef_type( + unique int fun_decl: @fun_decl ref, + int typedeftype_id: @usertype ref +); + +param_decl_bind( + unique int id: @var_decl ref, + int index: int ref, + int fun_decl: @fun_decl ref +); + +#keyset[id, type_id] +var_decls( + int id: @var_decl, + int variable: @variable ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +var_def(unique int id: @var_decl ref); +var_decl_specifiers( + int id: @var_decl ref, + string name: string ref +) +is_structured_binding(unique int id: @variable ref); + +type_decls( + unique int id: @type_decl, + int type_id: @type ref, + int location: @location_default ref +); +type_def(unique int id: @type_decl ref); +type_decl_top( + unique int type_decl: @type_decl ref +); + +namespace_decls( + unique int id: @namespace_decl, + int namespace_id: @namespace ref, + int location: @location_default ref, + int bodylocation: @location_default ref +); + +usings( + unique int id: @using, + int element_id: @element ref, + int location: @location_default ref +); + +/** The element which contains the `using` declaration. */ +using_container( + int parent: @element ref, + int child: @using ref +); + +static_asserts( + unique int id: @static_assert, + int condition : @expr ref, + string message : string ref, + int location: @location_default ref, + int enclosing : @element ref +); + +// each function has an ordered list of parameters +#keyset[id, type_id] +#keyset[function, index, type_id] +params( + int id: @parameter, + int function: @functionorblock ref, + int index: int ref, + int type_id: @type ref +); + +overrides( + int new: @function ref, + int old: @function ref +); + +#keyset[id, type_id] +membervariables( + int id: @membervariable, + int type_id: @type ref, + string name: string ref +); + +#keyset[id, type_id] +globalvariables( + int id: @globalvariable, + int type_id: @type ref, + string name: string ref +); + +#keyset[id, type_id] +localvariables( + int id: @localvariable, + int type_id: @type ref, + string name: string ref +); + +autoderivation( + unique int var: @variable ref, + int derivation_type: @type ref +); + +orphaned_variables( + int var: @localvariable ref, + int function: @function ref +) + +enumconstants( + unique int id: @enumconstant, + int parent: @usertype ref, + int index: int ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); + +@variable = @localscopevariable | @globalvariable | @membervariable; + +@localscopevariable = @localvariable | @parameter; + +/** + * Built-in types are the fundamental types, e.g., integral, floating, and void. + */ +case @builtintype.kind of + 1 = @errortype +| 2 = @unknowntype +| 3 = @void +| 4 = @boolean +| 5 = @char +| 6 = @unsigned_char +| 7 = @signed_char +| 8 = @short +| 9 = @unsigned_short +| 10 = @signed_short +| 11 = @int +| 12 = @unsigned_int +| 13 = @signed_int +| 14 = @long +| 15 = @unsigned_long +| 16 = @signed_long +| 17 = @long_long +| 18 = @unsigned_long_long +| 19 = @signed_long_long +// ... 20 Microsoft-specific __int8 +// ... 21 Microsoft-specific __int16 +// ... 22 Microsoft-specific __int32 +// ... 23 Microsoft-specific __int64 +| 24 = @float +| 25 = @double +| 26 = @long_double +| 27 = @complex_float // C99-specific _Complex float +| 28 = @complex_double // C99-specific _Complex double +| 29 = @complex_long_double // C99-specific _Complex long double +| 30 = @imaginary_float // C99-specific _Imaginary float +| 31 = @imaginary_double // C99-specific _Imaginary double +| 32 = @imaginary_long_double // C99-specific _Imaginary long double +| 33 = @wchar_t // Microsoft-specific +| 34 = @decltype_nullptr // C++11 +| 35 = @int128 // __int128 +| 36 = @unsigned_int128 // unsigned __int128 +| 37 = @signed_int128 // signed __int128 +| 38 = @float128 // __float128 +| 39 = @complex_float128 // _Complex __float128 +| 40 = @decimal32 // _Decimal32 +| 41 = @decimal64 // _Decimal64 +| 42 = @decimal128 // _Decimal128 +| 43 = @char16_t +| 44 = @char32_t +| 45 = @std_float32 // _Float32 +| 46 = @float32x // _Float32x +| 47 = @std_float64 // _Float64 +| 48 = @float64x // _Float64x +| 49 = @std_float128 // _Float128 +// ... 50 _Float128x +| 51 = @char8_t +| 52 = @float16 // _Float16 +| 53 = @complex_float16 // _Complex _Float16 +| 54 = @fp16 // __fp16 +| 55 = @std_bfloat16 // __bf16 +| 56 = @std_float16 // std::float16_t +| 57 = @complex_std_float32 // _Complex _Float32 +| 58 = @complex_float32x // _Complex _Float32x +| 59 = @complex_std_float64 // _Complex _Float64 +| 60 = @complex_float64x // _Complex _Float64x +| 61 = @complex_std_float128 // _Complex _Float128 +; + +builtintypes( + unique int id: @builtintype, + string name: string ref, + int kind: int ref, + int size: int ref, + int sign: int ref, + int alignment: int ref +); + +/** + * Derived types are types that are directly derived from existing types and + * point to, refer to, transform type data to return a new type. + */ +case @derivedtype.kind of + 1 = @pointer +| 2 = @reference +| 3 = @type_with_specifiers +| 4 = @array +| 5 = @gnu_vector +| 6 = @routineptr +| 7 = @routinereference +| 8 = @rvalue_reference // C++11 +// ... 9 type_conforming_to_protocols deprecated +| 10 = @block +; + +derivedtypes( + unique int id: @derivedtype, + string name: string ref, + int kind: int ref, + int type_id: @type ref +); + +pointerishsize(unique int id: @derivedtype ref, + int size: int ref, + int alignment: int ref); + +arraysizes( + unique int id: @derivedtype ref, + int num_elements: int ref, + int bytesize: int ref, + int alignment: int ref +); + +typedefbase( + unique int id: @usertype ref, + int type_id: @type ref +); + +/** + * An instance of the C++11 `decltype` operator. For example: + * ``` + * int a; + * decltype(1+a) b; + * ``` + * Here `expr` is `1+a`. + * + * Sometimes an additional pair of parentheses around the expression + * would change the semantics of this decltype, e.g. + * ``` + * struct A { double x; }; + * const A* a = new A(); + * decltype( a->x ); // type is double + * decltype((a->x)); // type is const double& + * ``` + * (Please consult the C++11 standard for more details). + * `parentheses_would_change_meaning` is `true` iff that is the case. + */ +#keyset[id, expr] +decltypes( + int id: @decltype, + int expr: @expr ref, + int base_type: @type ref, + boolean parentheses_would_change_meaning: boolean ref +); + +/* +case @usertype.kind of + 1 = @struct +| 2 = @class +| 3 = @union +| 4 = @enum +| 5 = @typedef // classic C: typedef typedef type name +| 6 = @template +| 7 = @template_parameter +| 8 = @template_template_parameter +| 9 = @proxy_class // a proxy class associated with a template parameter +// ... 10 objc_class deprecated +// ... 11 objc_protocol deprecated +// ... 12 objc_category deprecated +| 13 = @scoped_enum +| 14 = @using_alias // a using name = type style typedef +; +*/ + +usertypes( + unique int id: @usertype, + string name: string ref, + int kind: int ref +); + +usertypesize( + unique int id: @usertype ref, + int size: int ref, + int alignment: int ref +); + +usertype_final(unique int id: @usertype ref); + +usertype_uuid( + unique int id: @usertype ref, + string uuid: string ref +); + +mangled_name( + unique int id: @declaration ref, + int mangled_name : @mangledname, + boolean is_complete: boolean ref +); + +is_pod_class(unique int id: @usertype ref); +is_standard_layout_class(unique int id: @usertype ref); + +is_complete(unique int id: @usertype ref); + +is_class_template(unique int id: @usertype ref); +class_instantiation( + int to: @usertype ref, + int from: @usertype ref +); +class_template_argument( + int type_id: @usertype ref, + int index: int ref, + int arg_type: @type ref +); +class_template_argument_value( + int type_id: @usertype ref, + int index: int ref, + int arg_value: @expr ref +); + +is_proxy_class_for( + unique int id: @usertype ref, + unique int templ_param_id: @usertype ref +); + +type_mentions( + unique int id: @type_mention, + int type_id: @type ref, + int location: @location ref, + // a_symbol_reference_kind from the frontend. + int kind: int ref +); + +is_function_template(unique int id: @function ref); +function_instantiation( + unique int to: @function ref, + int from: @function ref +); +function_template_argument( + int function_id: @function ref, + int index: int ref, + int arg_type: @type ref +); +function_template_argument_value( + int function_id: @function ref, + int index: int ref, + int arg_value: @expr ref +); + +is_variable_template(unique int id: @variable ref); +variable_instantiation( + unique int to: @variable ref, + int from: @variable ref +); +variable_template_argument( + int variable_id: @variable ref, + int index: int ref, + int arg_type: @type ref +); +variable_template_argument_value( + int variable_id: @variable ref, + int index: int ref, + int arg_value: @expr ref +); + +/* + Fixed point types + precision(1) = short, precision(2) = default, precision(3) = long + is_unsigned(1) = unsigned is_unsigned(2) = signed + is_fract_type(1) = declared with _Fract + saturating(1) = declared with _Sat +*/ +/* TODO +fixedpointtypes( + unique int id: @fixedpointtype, + int precision: int ref, + int is_unsigned: int ref, + int is_fract_type: int ref, + int saturating: int ref); +*/ + +routinetypes( + unique int id: @routinetype, + int return_type: @type ref +); + +routinetypeargs( + int routine: @routinetype ref, + int index: int ref, + int type_id: @type ref +); + +ptrtomembers( + unique int id: @ptrtomember, + int type_id: @type ref, + int class_id: @type ref +); + +/* + specifiers for types, functions, and variables + + "public", + "protected", + "private", + + "const", + "volatile", + "static", + + "pure", + "virtual", + "sealed", // Microsoft + "__interface", // Microsoft + "inline", + "explicit", + + "near", // near far extension + "far", // near far extension + "__ptr32", // Microsoft + "__ptr64", // Microsoft + "__sptr", // Microsoft + "__uptr", // Microsoft + "dllimport", // Microsoft + "dllexport", // Microsoft + "thread", // Microsoft + "naked", // Microsoft + "microsoft_inline", // Microsoft + "forceinline", // Microsoft + "selectany", // Microsoft + "nothrow", // Microsoft + "novtable", // Microsoft + "noreturn", // Microsoft + "noinline", // Microsoft + "noalias", // Microsoft + "restrict", // Microsoft +*/ + +specifiers( + unique int id: @specifier, + unique string str: string ref +); + +typespecifiers( + int type_id: @type ref, + int spec_id: @specifier ref +); + +funspecifiers( + int func_id: @function ref, + int spec_id: @specifier ref +); + +varspecifiers( + int var_id: @accessible ref, + int spec_id: @specifier ref +); + +attributes( + unique int id: @attribute, + int kind: int ref, + string name: string ref, + string name_space: string ref, + int location: @location_default ref +); + +case @attribute.kind of + 0 = @gnuattribute +| 1 = @stdattribute +| 2 = @declspec +| 3 = @msattribute +| 4 = @alignas +// ... 5 @objc_propertyattribute deprecated +; + +attribute_args( + unique int id: @attribute_arg, + int kind: int ref, + int attribute: @attribute ref, + int index: int ref, + int location: @location_default ref +); + +case @attribute_arg.kind of + 0 = @attribute_arg_empty +| 1 = @attribute_arg_token +| 2 = @attribute_arg_constant +| 3 = @attribute_arg_type +| 4 = @attribute_arg_constant_expr +| 5 = @attribute_arg_expr +; + +attribute_arg_value( + unique int arg: @attribute_arg ref, + string value: string ref +); +attribute_arg_type( + unique int arg: @attribute_arg ref, + int type_id: @type ref +); +attribute_arg_constant( + unique int arg: @attribute_arg ref, + int constant: @expr ref +) +attribute_arg_expr( + unique int arg: @attribute_arg ref, + int expr: @expr ref +) +attribute_arg_name( + unique int arg: @attribute_arg ref, + string name: string ref +); + +typeattributes( + int type_id: @type ref, + int spec_id: @attribute ref +); + +funcattributes( + int func_id: @function ref, + int spec_id: @attribute ref +); + +varattributes( + int var_id: @accessible ref, + int spec_id: @attribute ref +); + +stmtattributes( + int stmt_id: @stmt ref, + int spec_id: @attribute ref +); + +@type = @builtintype + | @derivedtype + | @usertype + /* TODO | @fixedpointtype */ + | @routinetype + | @ptrtomember + | @decltype; + +unspecifiedtype( + unique int type_id: @type ref, + int unspecified_type_id: @type ref +); + +member( + int parent: @type ref, + int index: int ref, + int child: @member ref +); + +@enclosingfunction_child = @usertype | @variable | @namespace + +enclosingfunction( + unique int child: @enclosingfunction_child ref, + int parent: @function ref +); + +derivations( + unique int derivation: @derivation, + int sub: @type ref, + int index: int ref, + int super: @type ref, + int location: @location_default ref +); + +derspecifiers( + int der_id: @derivation ref, + int spec_id: @specifier ref +); + +/** + * Contains the byte offset of the base class subobject within the derived + * class. Only holds for non-virtual base classes, but see table + * `virtual_base_offsets` for offsets of virtual base class subobjects. + */ +direct_base_offsets( + unique int der_id: @derivation ref, + int offset: int ref +); + +/** + * Contains the byte offset of the virtual base class subobject for class + * `super` within a most-derived object of class `sub`. `super` can be either a + * direct or indirect base class. + */ +#keyset[sub, super] +virtual_base_offsets( + int sub: @usertype ref, + int super: @usertype ref, + int offset: int ref +); + +frienddecls( + unique int id: @frienddecl, + int type_id: @type ref, + int decl_id: @declaration ref, + int location: @location_default ref +); + +@declaredtype = @usertype ; + +@declaration = @function + | @declaredtype + | @variable + | @enumconstant + | @frienddecl; + +@member = @membervariable + | @function + | @declaredtype + | @enumconstant; + +@locatable = @diagnostic + | @declaration + | @ppd_include + | @ppd_define + | @macroinvocation + /*| @funcall*/ + | @xmllocatable + | @attribute + | @attribute_arg; + +@namedscope = @namespace | @usertype; + +@element = @locatable + | @file + | @folder + | @specifier + | @type + | @expr + | @namespace + | @initialiser + | @stmt + | @derivation + | @comment + | @preprocdirect + | @fun_decl + | @var_decl + | @type_decl + | @namespace_decl + | @using + | @namequalifier + | @specialnamequalifyingelement + | @static_assert + | @type_mention + | @lambdacapture; + +@exprparent = @element; + +comments( + unique int id: @comment, + string contents: string ref, + int location: @location_default ref +); + +commentbinding( + int id: @comment ref, + int element: @element ref +); + +exprconv( + int converted: @expr ref, + unique int conversion: @expr ref +); + +compgenerated(unique int id: @element ref); + +/** + * `destructor_call` destructs the `i`'th entity that should be + * destructed following `element`. Note that entities should be + * destructed in reverse construction order, so for a given `element` + * these should be called from highest to lowest `i`. + */ +#keyset[element, destructor_call] +#keyset[element, i] +synthetic_destructor_call( + int element: @element ref, + int i: int ref, + int destructor_call: @routineexpr ref +); + +namespaces( + unique int id: @namespace, + string name: string ref +); + +namespace_inline( + unique int id: @namespace ref +); + +namespacembrs( + int parentid: @namespace ref, + unique int memberid: @namespacembr ref +); + +@namespacembr = @declaration | @namespace; + +exprparents( + int expr_id: @expr ref, + int child_index: int ref, + int parent_id: @exprparent ref +); + +expr_isload(unique int expr_id: @expr ref); + +@cast = @c_style_cast + | @const_cast + | @dynamic_cast + | @reinterpret_cast + | @static_cast + ; + +/* +case @conversion.kind of + 0 = @simple_conversion // a numeric conversion, qualification conversion, or a reinterpret_cast +| 1 = @bool_conversion // conversion to 'bool' +| 2 = @base_class_conversion // a derived-to-base conversion +| 3 = @derived_class_conversion // a base-to-derived conversion +| 4 = @pm_base_class_conversion // a derived-to-base conversion of a pointer to member +| 5 = @pm_derived_class_conversion // a base-to-derived conversion of a pointer to member +| 6 = @glvalue_adjust // an adjustment of the type of a glvalue +| 7 = @prvalue_adjust // an adjustment of the type of a prvalue +; +*/ +/** + * Describes the semantics represented by a cast expression. This is largely + * independent of the source syntax of the cast, so it is separate from the + * regular expression kind. + */ +conversionkinds( + unique int expr_id: @cast ref, + int kind: int ref +); + +@conversion = @cast + | @array_to_pointer + | @parexpr + | @reference_to + | @ref_indirect + | @temp_init + ; + +/* +case @funbindexpr.kind of + 0 = @normal_call // a normal call +| 1 = @virtual_call // a virtual call +| 2 = @adl_call // a call whose target is only found by ADL +; +*/ +iscall( + unique int caller: @funbindexpr ref, + int kind: int ref +); + +numtemplatearguments( + unique int expr_id: @expr ref, + int num: int ref +); + +specialnamequalifyingelements( + unique int id: @specialnamequalifyingelement, + unique string name: string ref +); + +@namequalifiableelement = @expr | @namequalifier; +@namequalifyingelement = @namespace + | @specialnamequalifyingelement + | @usertype; + +namequalifiers( + unique int id: @namequalifier, + unique int qualifiableelement: @namequalifiableelement ref, + int qualifyingelement: @namequalifyingelement ref, + int location: @location_default ref +); + +varbind( + int expr: @varbindexpr ref, + int var: @accessible ref +); + +funbind( + int expr: @funbindexpr ref, + int fun: @function ref +); + +@any_new_expr = @new_expr + | @new_array_expr; + +@new_or_delete_expr = @any_new_expr + | @delete_expr + | @delete_array_expr; + +@prefix_crement_expr = @preincrexpr | @predecrexpr; + +@postfix_crement_expr = @postincrexpr | @postdecrexpr; + +@increment_expr = @preincrexpr | @postincrexpr; + +@decrement_expr = @predecrexpr | @postdecrexpr; + +@crement_expr = @increment_expr | @decrement_expr; + +@un_arith_op_expr = @arithnegexpr + | @unaryplusexpr + | @conjugation + | @realpartexpr + | @imagpartexpr + | @crement_expr + ; + +@un_bitwise_op_expr = @complementexpr; + +@un_log_op_expr = @notexpr; + +@un_op_expr = @address_of + | @indirect + | @un_arith_op_expr + | @un_bitwise_op_expr + | @builtinaddressof + | @vec_fill + | @un_log_op_expr + | @co_await + | @co_yield + ; + +@bin_log_op_expr = @andlogicalexpr | @orlogicalexpr; + +@cmp_op_expr = @eq_op_expr | @rel_op_expr; + +@eq_op_expr = @eqexpr | @neexpr; + +@rel_op_expr = @gtexpr + | @ltexpr + | @geexpr + | @leexpr + | @spaceshipexpr + ; + +@bin_bitwise_op_expr = @lshiftexpr + | @rshiftexpr + | @andexpr + | @orexpr + | @xorexpr + ; + +@p_arith_op_expr = @paddexpr + | @psubexpr + | @pdiffexpr + ; + +@bin_arith_op_expr = @addexpr + | @subexpr + | @mulexpr + | @divexpr + | @remexpr + | @jmulexpr + | @jdivexpr + | @fjaddexpr + | @jfaddexpr + | @fjsubexpr + | @jfsubexpr + | @minexpr + | @maxexpr + | @p_arith_op_expr + ; + +@bin_op_expr = @bin_arith_op_expr + | @bin_bitwise_op_expr + | @cmp_op_expr + | @bin_log_op_expr + ; + +@op_expr = @un_op_expr + | @bin_op_expr + | @assign_expr + | @conditionalexpr + ; + +@assign_arith_expr = @assignaddexpr + | @assignsubexpr + | @assignmulexpr + | @assigndivexpr + | @assignremexpr + ; + +@assign_bitwise_expr = @assignandexpr + | @assignorexpr + | @assignxorexpr + | @assignlshiftexpr + | @assignrshiftexpr + ; + +@assign_pointer_expr = @assignpaddexpr + | @assignpsubexpr + ; + +@assign_op_expr = @assign_arith_expr + | @assign_bitwise_expr + | @assign_pointer_expr + ; + +@assign_expr = @assignexpr | @assign_op_expr | @blockassignexpr + +/* + case @allocator.form of + 0 = plain + | 1 = alignment + ; +*/ + +/** + * The allocator function associated with a `new` or `new[]` expression. + * The `form` column specified whether the allocation call contains an alignment + * argument. + */ +expr_allocator( + unique int expr: @any_new_expr ref, + int func: @function ref, + int form: int ref +); + +/* + case @deallocator.form of + 0 = plain + | 1 = size + | 2 = alignment + | 3 = size_and_alignment + ; +*/ + +/** + * The deallocator function associated with a `delete`, `delete[]`, `new`, or + * `new[]` expression. For a `new` or `new[]` expression, the deallocator is the + * one used to free memory if the initialization throws an exception. + * The `form` column specifies whether the deallocation call contains a size + * argument, and alignment argument, or both. + */ +expr_deallocator( + unique int expr: @new_or_delete_expr ref, + int func: @function ref, + int form: int ref +); + +/** + * Holds if the `@conditionalexpr` is of the two operand form + * `guard ? : false`. + */ +expr_cond_two_operand( + unique int cond: @conditionalexpr ref +); + +/** + * The guard of `@conditionalexpr` `guard ? true : false` + */ +expr_cond_guard( + unique int cond: @conditionalexpr ref, + int guard: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` holds. For the two operand form + * `guard ?: false` consider using `expr_cond_guard` instead. + */ +expr_cond_true( + unique int cond: @conditionalexpr ref, + int true: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` does not hold. + */ +expr_cond_false( + unique int cond: @conditionalexpr ref, + int false: @expr ref +); + +/** A string representation of the value. */ +values( + unique int id: @value, + string str: string ref +); + +/** The actual text in the source code for the value, if any. */ +valuetext( + unique int id: @value ref, + string text: string ref +); + +valuebind( + int val: @value ref, + unique int expr: @expr ref +); + +fieldoffsets( + unique int id: @variable ref, + int byteoffset: int ref, + int bitoffset: int ref +); + +bitfield( + unique int id: @variable ref, + int bits: int ref, + int declared_bits: int ref +); + +/* TODO +memberprefix( + int member: @expr ref, + int prefix: @expr ref +); +*/ + +/* + kind(1) = mbrcallexpr + kind(2) = mbrptrcallexpr + kind(3) = mbrptrmbrcallexpr + kind(4) = ptrmbrptrmbrcallexpr + kind(5) = mbrreadexpr // x.y + kind(6) = mbrptrreadexpr // p->y + kind(7) = mbrptrmbrreadexpr // x.*pm + kind(8) = mbrptrmbrptrreadexpr // x->*pm + kind(9) = staticmbrreadexpr // static x.y + kind(10) = staticmbrptrreadexpr // static p->y +*/ +/* TODO +memberaccess( + int member: @expr ref, + int kind: int ref +); +*/ + +initialisers( + unique int init: @initialiser, + int var: @accessible ref, + unique int expr: @expr ref, + int location: @location_expr ref +); + +braced_initialisers( + int init: @initialiser ref +); + +/** + * An ancestor for the expression, for cases in which we cannot + * otherwise find the expression's parent. + */ +expr_ancestor( + int exp: @expr ref, + int ancestor: @element ref +); + +exprs( + unique int id: @expr, + int kind: int ref, + int location: @location_expr ref +); + +expr_reuse( + int reuse: @expr ref, + int original: @expr ref, + int value_category: int ref +) + +/* + case @value.category of + 1 = prval + | 2 = xval + | 3 = lval + ; +*/ +expr_types( + int id: @expr ref, + int typeid: @type ref, + int value_category: int ref +); + +case @expr.kind of + 1 = @errorexpr +| 2 = @address_of // & AddressOfExpr +| 3 = @reference_to // ReferenceToExpr (implicit?) +| 4 = @indirect // * PointerDereferenceExpr +| 5 = @ref_indirect // ReferenceDereferenceExpr (implicit?) +// ... +| 8 = @array_to_pointer // (???) +| 9 = @vacuous_destructor_call // VacuousDestructorCall +// ... +| 11 = @assume // Microsoft +| 12 = @parexpr +| 13 = @arithnegexpr +| 14 = @unaryplusexpr +| 15 = @complementexpr +| 16 = @notexpr +| 17 = @conjugation // GNU ~ operator +| 18 = @realpartexpr // GNU __real +| 19 = @imagpartexpr // GNU __imag +| 20 = @postincrexpr +| 21 = @postdecrexpr +| 22 = @preincrexpr +| 23 = @predecrexpr +| 24 = @conditionalexpr +| 25 = @addexpr +| 26 = @subexpr +| 27 = @mulexpr +| 28 = @divexpr +| 29 = @remexpr +| 30 = @jmulexpr // C99 mul imaginary +| 31 = @jdivexpr // C99 div imaginary +| 32 = @fjaddexpr // C99 add real + imaginary +| 33 = @jfaddexpr // C99 add imaginary + real +| 34 = @fjsubexpr // C99 sub real - imaginary +| 35 = @jfsubexpr // C99 sub imaginary - real +| 36 = @paddexpr // pointer add (pointer + int or int + pointer) +| 37 = @psubexpr // pointer sub (pointer - integer) +| 38 = @pdiffexpr // difference between two pointers +| 39 = @lshiftexpr +| 40 = @rshiftexpr +| 41 = @andexpr +| 42 = @orexpr +| 43 = @xorexpr +| 44 = @eqexpr +| 45 = @neexpr +| 46 = @gtexpr +| 47 = @ltexpr +| 48 = @geexpr +| 49 = @leexpr +| 50 = @minexpr // GNU minimum +| 51 = @maxexpr // GNU maximum +| 52 = @assignexpr +| 53 = @assignaddexpr +| 54 = @assignsubexpr +| 55 = @assignmulexpr +| 56 = @assigndivexpr +| 57 = @assignremexpr +| 58 = @assignlshiftexpr +| 59 = @assignrshiftexpr +| 60 = @assignandexpr +| 61 = @assignorexpr +| 62 = @assignxorexpr +| 63 = @assignpaddexpr // assign pointer add +| 64 = @assignpsubexpr // assign pointer sub +| 65 = @andlogicalexpr +| 66 = @orlogicalexpr +| 67 = @commaexpr +| 68 = @subscriptexpr // access to member of an array, e.g., a[5] +// ... 69 @objc_subscriptexpr deprecated +// ... 70 @cmdaccess deprecated +// ... +| 73 = @virtfunptrexpr +| 74 = @callexpr +// ... 75 @msgexpr_normal deprecated +// ... 76 @msgexpr_super deprecated +// ... 77 @atselectorexpr deprecated +// ... 78 @atprotocolexpr deprecated +| 79 = @vastartexpr +| 80 = @vaargexpr +| 81 = @vaendexpr +| 82 = @vacopyexpr +// ... 83 @atencodeexpr deprecated +| 84 = @varaccess +| 85 = @thisaccess +// ... 86 @objc_box_expr deprecated +| 87 = @new_expr +| 88 = @delete_expr +| 89 = @throw_expr +| 90 = @condition_decl // a variable declared in a condition, e.g., if(int x = y > 2) +| 91 = @braced_init_list +| 92 = @type_id +| 93 = @runtime_sizeof +| 94 = @runtime_alignof +| 95 = @sizeof_pack +| 96 = @expr_stmt // GNU extension +| 97 = @routineexpr +| 98 = @type_operand // used to access a type in certain contexts (haven't found any examples yet....) +| 99 = @offsetofexpr // offsetof ::= type and field +| 100 = @hasassignexpr // __has_assign ::= type +| 101 = @hascopyexpr // __has_copy ::= type +| 102 = @hasnothrowassign // __has_nothrow_assign ::= type +| 103 = @hasnothrowconstr // __has_nothrow_constructor ::= type +| 104 = @hasnothrowcopy // __has_nothrow_copy ::= type +| 105 = @hastrivialassign // __has_trivial_assign ::= type +| 106 = @hastrivialconstr // __has_trivial_constructor ::= type +| 107 = @hastrivialcopy // __has_trivial_copy ::= type +| 108 = @hasuserdestr // __has_user_destructor ::= type +| 109 = @hasvirtualdestr // __has_virtual_destructor ::= type +| 110 = @isabstractexpr // __is_abstract ::= type +| 111 = @isbaseofexpr // __is_base_of ::= type type +| 112 = @isclassexpr // __is_class ::= type +| 113 = @isconvtoexpr // __is_convertible_to ::= type type +| 114 = @isemptyexpr // __is_empty ::= type +| 115 = @isenumexpr // __is_enum ::= type +| 116 = @ispodexpr // __is_pod ::= type +| 117 = @ispolyexpr // __is_polymorphic ::= type +| 118 = @isunionexpr // __is_union ::= type +| 119 = @typescompexpr // GNU __builtin_types_compatible ::= type type +| 120 = @intaddrexpr // frontend internal builtin, used to implement offsetof +// ... +| 122 = @hastrivialdestructor // __has_trivial_destructor ::= type +| 123 = @literal +| 124 = @uuidof +| 127 = @aggregateliteral +| 128 = @delete_array_expr +| 129 = @new_array_expr +// ... 130 @objc_array_literal deprecated +// ... 131 @objc_dictionary_literal deprecated +| 132 = @foldexpr +// ... +| 200 = @ctordirectinit +| 201 = @ctorvirtualinit +| 202 = @ctorfieldinit +| 203 = @ctordelegatinginit +| 204 = @dtordirectdestruct +| 205 = @dtorvirtualdestruct +| 206 = @dtorfielddestruct +// ... +| 210 = @static_cast +| 211 = @reinterpret_cast +| 212 = @const_cast +| 213 = @dynamic_cast +| 214 = @c_style_cast +| 215 = @lambdaexpr +| 216 = @param_ref +| 217 = @noopexpr +// ... +| 294 = @istriviallyconstructibleexpr +| 295 = @isdestructibleexpr +| 296 = @isnothrowdestructibleexpr +| 297 = @istriviallydestructibleexpr +| 298 = @istriviallyassignableexpr +| 299 = @isnothrowassignableexpr +| 300 = @istrivialexpr +| 301 = @isstandardlayoutexpr +| 302 = @istriviallycopyableexpr +| 303 = @isliteraltypeexpr +| 304 = @hastrivialmoveconstructorexpr +| 305 = @hastrivialmoveassignexpr +| 306 = @hasnothrowmoveassignexpr +| 307 = @isconstructibleexpr +| 308 = @isnothrowconstructibleexpr +| 309 = @hasfinalizerexpr +| 310 = @isdelegateexpr +| 311 = @isinterfaceclassexpr +| 312 = @isrefarrayexpr +| 313 = @isrefclassexpr +| 314 = @issealedexpr +| 315 = @issimplevalueclassexpr +| 316 = @isvalueclassexpr +| 317 = @isfinalexpr +| 319 = @noexceptexpr +| 320 = @builtinshufflevector +| 321 = @builtinchooseexpr +| 322 = @builtinaddressof +| 323 = @vec_fill +| 324 = @builtinconvertvector +| 325 = @builtincomplex +| 326 = @spaceshipexpr +| 327 = @co_await +| 328 = @co_yield +| 329 = @temp_init +| 330 = @isassignable +| 331 = @isaggregate +| 332 = @hasuniqueobjectrepresentations +| 333 = @builtinbitcast +| 334 = @builtinshuffle +| 335 = @blockassignexpr +| 336 = @issame +| 337 = @isfunction +| 338 = @islayoutcompatible +| 339 = @ispointerinterconvertiblebaseof +| 340 = @isarray +| 341 = @arrayrank +| 342 = @arrayextent +| 343 = @isarithmetic +| 344 = @iscompletetype +| 345 = @iscompound +| 346 = @isconst +| 347 = @isfloatingpoint +| 348 = @isfundamental +| 349 = @isintegral +| 350 = @islvaluereference +| 351 = @ismemberfunctionpointer +| 352 = @ismemberobjectpointer +| 353 = @ismemberpointer +| 354 = @isobject +| 355 = @ispointer +| 356 = @isreference +| 357 = @isrvaluereference +| 358 = @isscalar +| 359 = @issigned +| 360 = @isunsigned +| 361 = @isvoid +| 362 = @isvolatile +| 363 = @reuseexpr +; + +@var_args_expr = @vastartexpr + | @vaendexpr + | @vaargexpr + | @vacopyexpr + ; + +@builtin_op = @var_args_expr + | @noopexpr + | @offsetofexpr + | @intaddrexpr + | @hasassignexpr + | @hascopyexpr + | @hasnothrowassign + | @hasnothrowconstr + | @hasnothrowcopy + | @hastrivialassign + | @hastrivialconstr + | @hastrivialcopy + | @hastrivialdestructor + | @hasuserdestr + | @hasvirtualdestr + | @isabstractexpr + | @isbaseofexpr + | @isclassexpr + | @isconvtoexpr + | @isemptyexpr + | @isenumexpr + | @ispodexpr + | @ispolyexpr + | @isunionexpr + | @typescompexpr + | @builtinshufflevector + | @builtinconvertvector + | @builtinaddressof + | @istriviallyconstructibleexpr + | @isdestructibleexpr + | @isnothrowdestructibleexpr + | @istriviallydestructibleexpr + | @istriviallyassignableexpr + | @isnothrowassignableexpr + | @istrivialexpr + | @isstandardlayoutexpr + | @istriviallycopyableexpr + | @isliteraltypeexpr + | @hastrivialmoveconstructorexpr + | @hastrivialmoveassignexpr + | @hasnothrowmoveassignexpr + | @isconstructibleexpr + | @isnothrowconstructibleexpr + | @hasfinalizerexpr + | @isdelegateexpr + | @isinterfaceclassexpr + | @isrefarrayexpr + | @isrefclassexpr + | @issealedexpr + | @issimplevalueclassexpr + | @isvalueclassexpr + | @isfinalexpr + | @builtinchooseexpr + | @builtincomplex + | @isassignable + | @isaggregate + | @hasuniqueobjectrepresentations + | @builtinbitcast + | @builtinshuffle + | @issame + | @isfunction + | @islayoutcompatible + | @ispointerinterconvertiblebaseof + | @isarray + | @arrayrank + | @arrayextent + | @isarithmetic + | @iscompletetype + | @iscompound + | @isconst + | @isfloatingpoint + | @isfundamental + | @isintegral + | @islvaluereference + | @ismemberfunctionpointer + | @ismemberobjectpointer + | @ismemberpointer + | @isobject + | @ispointer + | @isreference + | @isrvaluereference + | @isscalar + | @issigned + | @isunsigned + | @isvoid + | @isvolatile + ; + +new_allocated_type( + unique int expr: @new_expr ref, + int type_id: @type ref +); + +new_array_allocated_type( + unique int expr: @new_array_expr ref, + int type_id: @type ref +); + +/** + * The field being initialized by an initializer expression within an aggregate + * initializer for a class/struct/union. Position is used to sort repeated initializers. + */ +#keyset[aggregate, position] +aggregate_field_init( + int aggregate: @aggregateliteral ref, + int initializer: @expr ref, + int field: @membervariable ref, + int position: int ref +); + +/** + * The index of the element being initialized by an initializer expression + * within an aggregate initializer for an array. Position is used to sort repeated initializers. + */ +#keyset[aggregate, position] +aggregate_array_init( + int aggregate: @aggregateliteral ref, + int initializer: @expr ref, + int element_index: int ref, + int position: int ref +); + +@ctorinit = @ctordirectinit + | @ctorvirtualinit + | @ctorfieldinit + | @ctordelegatinginit; +@dtordestruct = @dtordirectdestruct + | @dtorvirtualdestruct + | @dtorfielddestruct; + + +condition_decl_bind( + unique int expr: @condition_decl ref, + unique int decl: @declaration ref +); + +typeid_bind( + unique int expr: @type_id ref, + int type_id: @type ref +); + +uuidof_bind( + unique int expr: @uuidof ref, + int type_id: @type ref +); + +@runtime_sizeof_or_alignof = @runtime_sizeof | @runtime_alignof; + +sizeof_bind( + unique int expr: @runtime_sizeof_or_alignof ref, + int type_id: @type ref +); + +code_block( + unique int block: @literal ref, + unique int routine: @function ref +); + +lambdas( + unique int expr: @lambdaexpr ref, + string default_capture: string ref, + boolean has_explicit_return_type: boolean ref +); + +lambda_capture( + unique int id: @lambdacapture, + int lambda: @lambdaexpr ref, + int index: int ref, + int field: @membervariable ref, + boolean captured_by_reference: boolean ref, + boolean is_implicit: boolean ref, + int location: @location_default ref +); + +@funbindexpr = @routineexpr + | @new_expr + | @delete_expr + | @delete_array_expr + | @ctordirectinit + | @ctorvirtualinit + | @ctordelegatinginit + | @dtordirectdestruct + | @dtorvirtualdestruct; + +@varbindexpr = @varaccess | @ctorfieldinit | @dtorfielddestruct; +@addressable = @function | @variable ; +@accessible = @addressable | @enumconstant ; + +@access = @varaccess | @routineexpr ; + +fold( + int expr: @foldexpr ref, + string operator: string ref, + boolean is_left_fold: boolean ref +); + +stmts( + unique int id: @stmt, + int kind: int ref, + int location: @location_stmt ref +); + +case @stmt.kind of + 1 = @stmt_expr +| 2 = @stmt_if +| 3 = @stmt_while +| 4 = @stmt_goto +| 5 = @stmt_label +| 6 = @stmt_return +| 7 = @stmt_block +| 8 = @stmt_end_test_while // do { ... } while ( ... ) +| 9 = @stmt_for +| 10 = @stmt_switch_case +| 11 = @stmt_switch +| 13 = @stmt_asm // "asm" statement or the body of an asm function +| 15 = @stmt_try_block +| 16 = @stmt_microsoft_try // Microsoft +| 17 = @stmt_decl +| 18 = @stmt_set_vla_size // C99 +| 19 = @stmt_vla_decl // C99 +| 25 = @stmt_assigned_goto // GNU +| 26 = @stmt_empty +| 27 = @stmt_continue +| 28 = @stmt_break +| 29 = @stmt_range_based_for // C++11 +// ... 30 @stmt_at_autoreleasepool_block deprecated +// ... 31 @stmt_objc_for_in deprecated +// ... 32 @stmt_at_synchronized deprecated +| 33 = @stmt_handler +// ... 34 @stmt_finally_end deprecated +| 35 = @stmt_constexpr_if +| 37 = @stmt_co_return +; + +type_vla( + int type_id: @type ref, + int decl: @stmt_vla_decl ref +); + +variable_vla( + int var: @variable ref, + int decl: @stmt_vla_decl ref +); + +if_initialization( + unique int if_stmt: @stmt_if ref, + int init_id: @stmt ref +); + +if_then( + unique int if_stmt: @stmt_if ref, + int then_id: @stmt ref +); + +if_else( + unique int if_stmt: @stmt_if ref, + int else_id: @stmt ref +); + +constexpr_if_initialization( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int init_id: @stmt ref +); + +constexpr_if_then( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int then_id: @stmt ref +); + +constexpr_if_else( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int else_id: @stmt ref +); + +while_body( + unique int while_stmt: @stmt_while ref, + int body_id: @stmt ref +); + +do_body( + unique int do_stmt: @stmt_end_test_while ref, + int body_id: @stmt ref +); + +switch_initialization( + unique int switch_stmt: @stmt_switch ref, + int init_id: @stmt ref +); + +#keyset[switch_stmt, index] +switch_case( + int switch_stmt: @stmt_switch ref, + int index: int ref, + int case_id: @stmt_switch_case ref +); + +switch_body( + unique int switch_stmt: @stmt_switch ref, + int body_id: @stmt ref +); + +@stmt_for_or_range_based_for = @stmt_for + | @stmt_range_based_for; + +for_initialization( + unique int for_stmt: @stmt_for_or_range_based_for ref, + int init_id: @stmt ref +); + +for_condition( + unique int for_stmt: @stmt_for ref, + int condition_id: @expr ref +); + +for_update( + unique int for_stmt: @stmt_for ref, + int update_id: @expr ref +); + +for_body( + unique int for_stmt: @stmt_for ref, + int body_id: @stmt ref +); + +@stmtparent = @stmt | @expr_stmt ; +stmtparents( + unique int id: @stmt ref, + int index: int ref, + int parent: @stmtparent ref +); + +ishandler(unique int block: @stmt_block ref); + +@cfgnode = @stmt | @expr | @function | @initialiser ; + +stmt_decl_bind( + int stmt: @stmt_decl ref, + int num: int ref, + int decl: @declaration ref +); + +stmt_decl_entry_bind( + int stmt: @stmt_decl ref, + int num: int ref, + int decl_entry: @element ref +); + +@functionorblock = @function | @stmt_block; + +blockscope( + unique int block: @stmt_block ref, + int enclosing: @functionorblock ref +); + +@jump = @stmt_goto | @stmt_break | @stmt_continue; + +@jumporlabel = @jump | @stmt_label | @literal; + +jumpinfo( + unique int id: @jumporlabel ref, + string str: string ref, + int target: @stmt ref +); + +preprocdirects( + unique int id: @preprocdirect, + int kind: int ref, + int location: @location_default ref +); +case @preprocdirect.kind of + 0 = @ppd_if +| 1 = @ppd_ifdef +| 2 = @ppd_ifndef +| 3 = @ppd_elif +| 4 = @ppd_else +| 5 = @ppd_endif +| 6 = @ppd_plain_include +| 7 = @ppd_define +| 8 = @ppd_undef +| 9 = @ppd_line +| 10 = @ppd_error +| 11 = @ppd_pragma +| 12 = @ppd_objc_import +| 13 = @ppd_include_next +| 18 = @ppd_warning +; + +@ppd_include = @ppd_plain_include | @ppd_objc_import | @ppd_include_next; + +@ppd_branch = @ppd_if | @ppd_ifdef | @ppd_ifndef | @ppd_elif; + +preprocpair( + int begin : @ppd_branch ref, + int elseelifend : @preprocdirect ref +); + +preproctrue(int branch : @ppd_branch ref); +preprocfalse(int branch : @ppd_branch ref); + +preproctext( + unique int id: @preprocdirect ref, + string head: string ref, + string body: string ref +); + +includes( + unique int id: @ppd_include ref, + int included: @file ref +); + +link_targets( + int id: @link_target, + int binary: @file ref +); + +link_parent( + int element : @element ref, + int link_target : @link_target ref +); + +/* XML Files */ + +xmlEncoding(unique int id: @file ref, string encoding: string ref); + +xmlDTDs( + unique int id: @xmldtd, + string root: string ref, + string publicId: string ref, + string systemId: string ref, + int fileid: @file ref +); + +xmlElements( + unique int id: @xmlelement, + string name: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int fileid: @file ref +); + +xmlAttrs( + unique int id: @xmlattribute, + int elementid: @xmlelement ref, + string name: string ref, + string value: string ref, + int idx: int ref, + int fileid: @file ref +); + +xmlNs( + int id: @xmlnamespace, + string prefixName: string ref, + string URI: string ref, + int fileid: @file ref +); + +xmlHasNs( + int elementId: @xmlnamespaceable ref, + int nsId: @xmlnamespace ref, + int fileid: @file ref +); + +xmlComments( + unique int id: @xmlcomment, + string text: string ref, + int parentid: @xmlparent ref, + int fileid: @file ref +); + +xmlChars( + unique int id: @xmlcharacters, + string text: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int isCDATA: int ref, + int fileid: @file ref +); + +@xmlparent = @file | @xmlelement; +@xmlnamespaceable = @xmlelement | @xmlattribute; + +xmllocations( + int xmlElement: @xmllocatable ref, + int location: @location_default ref +); + +@xmllocatable = @xmlcharacters + | @xmlelement + | @xmlcomment + | @xmlattribute + | @xmldtd + | @file + | @xmlnamespace; diff --git a/cpp/ql/lib/upgrades/aa7ff0ab32cd4674f6ab731d32fea64116997b05/upgrade.properties b/cpp/ql/lib/upgrades/aa7ff0ab32cd4674f6ab731d32fea64116997b05/upgrade.properties new file mode 100644 index 00000000000..82bbbe273cd --- /dev/null +++ b/cpp/ql/lib/upgrades/aa7ff0ab32cd4674f6ab731d32fea64116997b05/upgrade.properties @@ -0,0 +1,3 @@ +description: Add value category to expr_reuse table +compatibility: full +expr_reuse.rel: run expr_reuse.qlo diff --git a/cpp/ql/src/CHANGELOG.md b/cpp/ql/src/CHANGELOG.md index ffcd73ff5d7..01ec26e694f 100644 --- a/cpp/ql/src/CHANGELOG.md +++ b/cpp/ql/src/CHANGELOG.md @@ -1,3 +1,34 @@ +## 0.9.9 + +### New Queries + +* Added a new query, `cpp/type-confusion`, to detect casts to invalid types. + +### Query Metadata Changes + +* `@precision medium` metadata was added to the `cpp/boost/tls-settings-misconfiguration` and `cpp/boost/use-of-deprecated-hardcoded-security-protocol` queries, and these queries are now included in the security-extended suite. The `@name` metadata of these queries were also updated. + +### Minor Analysis Improvements + +* The "Missing return-value check for a 'scanf'-like function" query (`cpp/missing-check-scanf`) has been converted to a `path-problem` query. +* The "Potentially uninitialized local variable" query (`cpp/uninitialized-local`) has been converted to a `path-problem` query. +* Added models for `GLib` allocation and deallocation functions. + +## 0.9.8 + +No user-facing changes. + +## 0.9.7 + +No user-facing changes. + +## 0.9.6 + +### Minor Analysis Improvements + +* The "non-constant format string" query (`cpp/non-constant-format`) has been converted to a `path-problem` query. +* The new C/C++ dataflow and taint-tracking libraries (`semmle.code.cpp.dataflow.new.DataFlow` and `semmle.code.cpp.dataflow.new.TaintTracking`) now implicitly assume that dataflow and taint modelled via `DataFlowFunction` and `TaintFunction` always fully overwrite their buffers and thus act as flow barriers. As a result, many dataflow and taint-tracking queries now produce fewer false positives. To remove this assumption and go back to the previous behavior for a given model, one can override the new `isPartialWrite` predicate. + ## 0.9.5 ### Minor Analysis Improvements diff --git a/cpp/ql/src/Critical/DoubleFree.ql b/cpp/ql/src/Critical/DoubleFree.ql index 802c81fd050..a454b63d5a5 100644 --- a/cpp/ql/src/Critical/DoubleFree.ql +++ b/cpp/ql/src/Critical/DoubleFree.ql @@ -37,6 +37,5 @@ where DoubleFree::flowPath(source, sink) and isFree(source.getNode(), _, _, dealloc) and isFree(sink.getNode(), e2) -select sink.getNode(), source, sink, - "Memory pointed to by '" + e2.toString() + "' may already have been freed by $@.", dealloc, - dealloc.toString() +select sink.getNode(), source, sink, "Memory pointed to by $@ may already have been freed by $@.", + e2, e2.toString(), dealloc, dealloc.toString() diff --git a/cpp/ql/src/Critical/MissingCheckScanf.ql b/cpp/ql/src/Critical/MissingCheckScanf.ql index 78560383b00..5d8ce9e8846 100644 --- a/cpp/ql/src/Critical/MissingCheckScanf.ql +++ b/cpp/ql/src/Critical/MissingCheckScanf.ql @@ -2,7 +2,7 @@ * @name Missing return-value check for a 'scanf'-like function * @description Failing to check that a call to 'scanf' actually writes to an * output variable can lead to unexpected behavior at reading time. - * @kind problem + * @kind path-problem * @problem.severity warning * @security-severity 7.5 * @precision medium @@ -18,16 +18,9 @@ import semmle.code.cpp.commons.Scanf import semmle.code.cpp.controlflow.Guards import semmle.code.cpp.dataflow.new.DataFlow::DataFlow import semmle.code.cpp.ir.IR -import semmle.code.cpp.ir.ValueNumbering +import semmle.code.cpp.valuenumbering.GlobalValueNumbering import ScanfChecks - -/** Holds if `n` reaches an argument to a call to a `scanf`-like function. */ -pragma[nomagic] -predicate revFlow0(Node n) { - isSink(_, _, n, _) - or - exists(Node succ | revFlow0(succ) | localFlowStep(n, succ)) -} +import ScanfToUseFlow::PathGraph /** * Holds if `n` represents an uninitialized stack-allocated variable, or a @@ -38,30 +31,45 @@ predicate isUninitialized(Node n) { n.asIndirectExpr(1) instanceof AllocationExpr } -pragma[nomagic] -predicate fwdFlow0(Node n) { - revFlow0(n) and - ( - isUninitialized(n) - or - exists(Node prev | - fwdFlow0(prev) and - localFlowStep(prev, n) - ) - ) -} - predicate isSink(ScanfFunctionCall call, int index, Node n, Expr input) { input = call.getOutputArgument(index) and n.asIndirectExpr() = input } +/** + * A configuration to track a uninitialized data flowing to a `scanf`-like + * output parameter position. + * + * This is meant to be a simple flow to rule out cases like: + * ``` + * int x = 0; + * scanf(..., &x); + * use(x); + * ``` + * since `x` is already initialized it's not a security concern that `x` is + * used without checking the return value of `scanf`. + * + * Since this flow is meant to be simple, we disable field flow and require the + * source and the sink to be in the same callable. + */ +module UninitializedToScanfConfig implements ConfigSig { + predicate isSource(Node source) { isUninitialized(source) } + + predicate isSink(Node sink) { isSink(_, _, sink, _) } + + FlowFeature getAFeature() { result instanceof FeatureEqualSourceSinkCallContext } + + int accessPathLimit() { result = 0 } +} + +module UninitializedToScanfFlow = Global; + /** * Holds if `call` is a `scanf`-like call and `output` is the `index`'th * argument that has not been previously initialized. */ predicate isRelevantScanfCall(ScanfFunctionCall call, int index, Expr output) { - exists(Node n | fwdFlow0(n) and isSink(call, index, n, output)) and + exists(Node n | UninitializedToScanfFlow::flowTo(n) and isSink(call, index, n, output)) and // Exclude results from incorrectky checked scanf query not incorrectlyCheckedScanf(call) } @@ -77,31 +85,6 @@ predicate isSource(ScanfFunctionCall call, int index, Node n, Expr output) { n.asDefiningArgument() = output } -/** - * Holds if `n` is reachable from an output argument of a relevant call to - * a `scanf`-like function. - */ -pragma[nomagic] -predicate fwdFlow(Node n) { - isSource(_, _, n, _) - or - exists(Node prev | - fwdFlow(prev) and - localFlowStep(prev, n) and - not isSanitizerOut(prev) - ) -} - -/** Holds if `n` should not have outgoing flow. */ -predicate isSanitizerOut(Node n) { - // We disable flow out of sinks to reduce result duplication - isSink(n, _) - or - // If the node is being passed to a function it may be - // modified, and thus it's safe to later read the value. - exists(n.asIndirectArgument()) -} - /** * Holds if `n` is a node such that `n.asExpr() = e` and `e` is not an * argument of a deallocation expression. @@ -112,40 +95,37 @@ predicate isSink(Node n, Expr e) { } /** - * Holds if `n` is part of a path from a call to a `scanf`-like function - * to a use of the written variable. + * A configuration to track flow from the output argument of a call to a + * `scanf`-like function, and to a use of the defined variable. */ -pragma[nomagic] -predicate revFlow(Node n) { - fwdFlow(n) and - ( +module ScanfToUseConfig implements ConfigSig { + predicate isSource(Node source) { isSource(_, _, source, _) } + + predicate isSink(Node sink) { isSink(sink, _) } + + predicate isBarrierOut(Node n) { + // We disable flow out of sinks to reduce result duplication isSink(n, _) or - exists(Node succ | - revFlow(succ) and - localFlowStep(n, succ) and - not isSanitizerOut(n) - ) - ) + // If the node is being passed to a function it may be + // modified, and thus it's safe to later read the value. + exists(n.asIndirectArgument()) + } } -/** A local flow step, restricted to relevant dataflow nodes. */ -private predicate step(Node n1, Node n2) { - revFlow(n1) and - revFlow(n2) and - localFlowStep(n1, n2) -} - -predicate hasFlow(Node n1, Node n2) = fastTC(step/2)(n1, n2) +module ScanfToUseFlow = Global; /** * Holds if `source` is the `index`'th argument to the `scanf`-like call `call`, and `sink` is * a dataflow node that represents the expression `e`. */ -predicate hasFlow(Node source, ScanfFunctionCall call, int index, Node sink, Expr e) { - isSource(call, index, source, _) and - hasFlow(source, sink) and - isSink(sink, e) +predicate flowPath( + ScanfToUseFlow::PathNode source, ScanfFunctionCall call, int index, ScanfToUseFlow::PathNode sink, + Expr e +) { + isSource(call, index, source.getNode(), _) and + ScanfToUseFlow::flowPath(source, sink) and + isSink(sink.getNode(), e) } /** @@ -167,39 +147,33 @@ int getMinimumGuardConstant(ScanfFunctionCall call, int index) { * Holds the access to `e` isn't guarded by a check that ensures that `call` returned * at least `minGuard`. */ -predicate hasNonGuardedAccess(ScanfFunctionCall call, Expr e, int minGuard) { +predicate hasNonGuardedAccess( + ScanfToUseFlow::PathNode source, ScanfFunctionCall call, ScanfToUseFlow::PathNode sink, Expr e, + int minGuard +) { exists(int index | - hasFlow(_, call, index, _, e) and + flowPath(source, call, index, sink, e) and minGuard = getMinimumGuardConstant(call, index) | - not exists(int value | - e.getBasicBlock() = blockGuardedBy(value, "==", call) and minGuard <= value + not exists(GuardCondition guard | + // call == k and k >= minGuard so call >= minGuard + guard + .ensuresEq(globalValueNumber(call).getAnExpr(), any(int k | minGuard <= k), + e.getBasicBlock(), true) or - e.getBasicBlock() = blockGuardedBy(value, "<", call) and minGuard - 1 <= value - or - e.getBasicBlock() = blockGuardedBy(value, "<=", call) and minGuard <= value + // call >= k and k >= minGuard so call >= minGuard + guard + .ensuresLt(globalValueNumber(call).getAnExpr(), any(int k | minGuard <= k), + e.getBasicBlock(), false) ) ) } -/** Returns a block guarded by the assertion of `value op call` */ -BasicBlock blockGuardedBy(int value, string op, ScanfFunctionCall call) { - exists(GuardCondition g, Expr left, Expr right | - right = g.getAChild() and - value = left.getValue().toInt() and - localExprFlow(call, right) - | - g.ensuresEq(left, right, 0, result, true) and op = "==" - or - g.ensuresLt(left, right, 0, result, true) and op = "<" - or - g.ensuresLt(left, right, 1, result, true) and op = "<=" - ) -} - -from ScanfFunctionCall call, Expr e, int minGuard -where hasNonGuardedAccess(call, e, minGuard) -select e, +from + ScanfToUseFlow::PathNode source, ScanfToUseFlow::PathNode sink, ScanfFunctionCall call, Expr e, + int minGuard +where hasNonGuardedAccess(source, call, sink, e, minGuard) +select e, source, sink, "This variable is read, but may not have been written. " + "It should be guarded by a check that the $@ returns at least " + minGuard + ".", call, call.toString() diff --git a/cpp/ql/src/Critical/ScanfChecks.qll b/cpp/ql/src/Critical/ScanfChecks.qll index b2464ecc9f4..6f50172537e 100644 --- a/cpp/ql/src/Critical/ScanfChecks.qll +++ b/cpp/ql/src/Critical/ScanfChecks.qll @@ -3,15 +3,11 @@ private import semmle.code.cpp.commons.Scanf private import semmle.code.cpp.controlflow.IRGuards private import semmle.code.cpp.ir.ValueNumbering -private ConstantInstruction getZeroInstruction() { result.getValue() = "0" } - -private Operand zero() { result.getDef() = getZeroInstruction() } - private predicate exprInBooleanContext(Expr e) { exists(IRGuardCondition gc | exists(Instruction i | i.getUnconvertedResultExpression() = e and - gc.comparesEq(valueNumber(i).getAUse(), zero(), 0, _, _) + gc.comparesEq(valueNumber(i).getAUse(), 0, _, _) ) or gc.getUnconvertedResultExpression() = e @@ -36,10 +32,6 @@ private string getEofValue() { ) } -private ConstantInstruction getEofInstruction() { result.getValue() = getEofValue() } - -private Operand eof() { result.getDef() = getEofInstruction() } - /** * Holds if the value of `call` has been checked to not equal `EOF`. */ @@ -47,10 +39,10 @@ private predicate checkedForEof(ScanfFunctionCall call) { exists(IRGuardCondition gc | exists(Instruction i | i.getUnconvertedResultExpression() = call | // call == EOF - gc.comparesEq(valueNumber(i).getAUse(), eof(), 0, _, _) + gc.comparesEq(valueNumber(i).getAUse(), getEofValue().toInt(), _, _) or // call < 0 (EOF is guaranteed to be negative) - gc.comparesLt(valueNumber(i).getAUse(), zero(), 0, true, _) + gc.comparesLt(valueNumber(i).getAUse(), 0, true, _) ) ) } diff --git a/cpp/ql/src/Likely Bugs/Protocols/TlsSettingsMisconfiguration.ql b/cpp/ql/src/Likely Bugs/Protocols/TlsSettingsMisconfiguration.ql index 61989db1c6e..f5d1a09d04e 100644 --- a/cpp/ql/src/Likely Bugs/Protocols/TlsSettingsMisconfiguration.ql +++ b/cpp/ql/src/Likely Bugs/Protocols/TlsSettingsMisconfiguration.ql @@ -1,8 +1,9 @@ /** - * @name Boost_asio TLS Settings Misconfiguration + * @name boost::asio TLS settings misconfiguration * @description Using the TLS or SSLv23 protocol from the boost::asio library, but not disabling deprecated protocols, or disabling minimum-recommended protocols. * @kind problem * @problem.severity error + * @precision medium * @security-severity 7.5 * @id cpp/boost/tls-settings-misconfiguration * @tags security @@ -12,34 +13,41 @@ import cpp import semmle.code.cpp.security.boostorg.asio.protocols -module ExistsAnyFlowConfig implements DataFlow::ConfigSig { - predicate isSource(DataFlow::Node source) { - exists(BoostorgAsio::SslContextClass c | c.getAContructorCall() = source.asExpr()) - } +predicate isSourceImpl(DataFlow::Node source, ConstructorCall cc) { + exists(BoostorgAsio::SslContextClass c | c.getAContructorCall() = cc and cc = source.asExpr()) +} - predicate isSink(DataFlow::Node sink) { - exists(BoostorgAsio::SslSetOptionsFunction f, FunctionCall fcSetOptions | - f.getACallToThisFunction() = fcSetOptions and - fcSetOptions.getQualifier() = sink.asExpr() - ) - } +predicate isSinkImpl(DataFlow::Node sink, FunctionCall fcSetOptions) { + exists(BoostorgAsio::SslSetOptionsFunction f | + f.getACallToThisFunction() = fcSetOptions and + fcSetOptions.getQualifier() = sink.asIndirectExpr() + ) +} + +module ExistsAnyFlowConfig implements DataFlow::ConfigSig { + predicate isSource(DataFlow::Node source) { isSourceImpl(source, _) } + + predicate isSink(DataFlow::Node sink) { isSinkImpl(sink, _) } } module ExistsAnyFlow = DataFlow::Global; bindingset[flag] predicate isOptionSet(ConstructorCall cc, int flag, FunctionCall fcSetOptions) { - exists(VariableAccess contextSetOptions | - ExistsAnyFlow::flow(DataFlow::exprNode(cc), DataFlow::exprNode(contextSetOptions)) and - exists(BoostorgAsio::SslSetOptionsFunction f | f.getACallToThisFunction() = fcSetOptions | - contextSetOptions = fcSetOptions.getQualifier() and - forall(Expr optionArgument, Expr optionArgumentSource | - optionArgument = fcSetOptions.getArgument(0) and - BoostorgAsio::SslOptionFlow::flow(DataFlow::exprNode(optionArgumentSource), - DataFlow::exprNode(optionArgument)) - | - optionArgument.getValue().toInt().bitShiftRight(16).bitAnd(flag) = flag - ) + exists( + VariableAccess contextSetOptions, BoostorgAsio::SslSetOptionsFunction f, DataFlow::Node source, + DataFlow::Node sink + | + isSourceImpl(source, cc) and + isSinkImpl(sink, fcSetOptions) and + ExistsAnyFlow::flow(source, sink) and + f.getACallToThisFunction() = fcSetOptions and + contextSetOptions = fcSetOptions.getQualifier() and + forex(Expr optionArgument | + optionArgument = fcSetOptions.getArgument(0) and + BoostorgAsio::SslOptionFlow::flowTo(DataFlow::exprNode(optionArgument)) + | + optionArgument.getValue().toInt().bitShiftRight(16).bitAnd(flag) = flag ) ) } diff --git a/cpp/ql/src/Likely Bugs/Protocols/UseOfDeprecatedHardcodedProtocol.ql b/cpp/ql/src/Likely Bugs/Protocols/UseOfDeprecatedHardcodedProtocol.ql index 4df70695179..085a46a9d3f 100644 --- a/cpp/ql/src/Likely Bugs/Protocols/UseOfDeprecatedHardcodedProtocol.ql +++ b/cpp/ql/src/Likely Bugs/Protocols/UseOfDeprecatedHardcodedProtocol.ql @@ -1,8 +1,9 @@ /** - * @name boost::asio Use of deprecated hardcoded Protocol + * @name boost::asio use of deprecated hardcoded protocol * @description Using a deprecated hard-coded protocol using the boost::asio library. * @kind problem * @problem.severity error + * @precision medium * @security-severity 7.5 * @id cpp/boost/use-of-deprecated-hardcoded-security-protocol * @tags security diff --git a/cpp/ql/src/Summary/LinesOfUserCode.ql b/cpp/ql/src/Summary/LinesOfUserCode.ql index 67d3aa6a8e0..468dbda4ffb 100644 --- a/cpp/ql/src/Summary/LinesOfUserCode.ql +++ b/cpp/ql/src/Summary/LinesOfUserCode.ql @@ -4,6 +4,7 @@ * @kind metric * @tags summary * lines-of-code + * debug * @id cpp/summary/lines-of-user-code */ diff --git a/cpp/ql/src/change-notes/2024-02-29-non-constant-format-path-query.md b/cpp/ql/src/change-notes/2024-02-29-non-constant-format-path-query.md deleted file mode 100644 index 2e5933a61e8..00000000000 --- a/cpp/ql/src/change-notes/2024-02-29-non-constant-format-path-query.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* The "non-constant format string" query (`cpp/non-constant-format`) has been converted to a `path-problem` query. \ No newline at end of file diff --git a/cpp/ql/src/change-notes/2024-03-05-type-confusion-query.md b/cpp/ql/src/change-notes/2024-03-05-type-confusion-query.md deleted file mode 100644 index f96a4684b76..00000000000 --- a/cpp/ql/src/change-notes/2024-03-05-type-confusion-query.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: newQuery ---- -* Added a new query, `cpp/type-confusion`, to detect casts to invalid types. \ No newline at end of file diff --git a/cpp/ql/src/change-notes/2024-03-13-glib-alloc-and-dealloc.md b/cpp/ql/src/change-notes/2024-03-13-glib-alloc-and-dealloc.md deleted file mode 100644 index bc9082285d4..00000000000 --- a/cpp/ql/src/change-notes/2024-03-13-glib-alloc-and-dealloc.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Added models for `GLib` allocation and deallocation functions. diff --git a/cpp/ql/src/change-notes/2024-03-18-uninitialized-local-path-problem.md b/cpp/ql/src/change-notes/2024-03-18-uninitialized-local-path-problem.md deleted file mode 100644 index 14a8c2e7ce7..00000000000 --- a/cpp/ql/src/change-notes/2024-03-18-uninitialized-local-path-problem.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* The "Potentially uninitialized local variable" query (`cpp/uninitialized-local`) has been converted to a `path-problem` query. \ No newline at end of file diff --git a/cpp/ql/src/change-notes/2024-02-16-modelled-functions-block-flow.md b/cpp/ql/src/change-notes/released/0.9.6.md similarity index 77% rename from cpp/ql/src/change-notes/2024-02-16-modelled-functions-block-flow.md rename to cpp/ql/src/change-notes/released/0.9.6.md index d6ef3c3e056..0c85f3f9f0f 100644 --- a/cpp/ql/src/change-notes/2024-02-16-modelled-functions-block-flow.md +++ b/cpp/ql/src/change-notes/released/0.9.6.md @@ -1,4 +1,6 @@ ---- -category: minorAnalysis ---- +## 0.9.6 + +### Minor Analysis Improvements + +* The "non-constant format string" query (`cpp/non-constant-format`) has been converted to a `path-problem` query. * The new C/C++ dataflow and taint-tracking libraries (`semmle.code.cpp.dataflow.new.DataFlow` and `semmle.code.cpp.dataflow.new.TaintTracking`) now implicitly assume that dataflow and taint modelled via `DataFlowFunction` and `TaintFunction` always fully overwrite their buffers and thus act as flow barriers. As a result, many dataflow and taint-tracking queries now produce fewer false positives. To remove this assumption and go back to the previous behavior for a given model, one can override the new `isPartialWrite` predicate. diff --git a/cpp/ql/src/change-notes/released/0.9.7.md b/cpp/ql/src/change-notes/released/0.9.7.md new file mode 100644 index 00000000000..8583b9747e8 --- /dev/null +++ b/cpp/ql/src/change-notes/released/0.9.7.md @@ -0,0 +1,3 @@ +## 0.9.7 + +No user-facing changes. diff --git a/cpp/ql/src/change-notes/released/0.9.8.md b/cpp/ql/src/change-notes/released/0.9.8.md new file mode 100644 index 00000000000..d1ca1c4d647 --- /dev/null +++ b/cpp/ql/src/change-notes/released/0.9.8.md @@ -0,0 +1,3 @@ +## 0.9.8 + +No user-facing changes. diff --git a/cpp/ql/src/change-notes/released/0.9.9.md b/cpp/ql/src/change-notes/released/0.9.9.md new file mode 100644 index 00000000000..46f120c28d7 --- /dev/null +++ b/cpp/ql/src/change-notes/released/0.9.9.md @@ -0,0 +1,15 @@ +## 0.9.9 + +### New Queries + +* Added a new query, `cpp/type-confusion`, to detect casts to invalid types. + +### Query Metadata Changes + +* `@precision medium` metadata was added to the `cpp/boost/tls-settings-misconfiguration` and `cpp/boost/use-of-deprecated-hardcoded-security-protocol` queries, and these queries are now included in the security-extended suite. The `@name` metadata of these queries were also updated. + +### Minor Analysis Improvements + +* The "Missing return-value check for a 'scanf'-like function" query (`cpp/missing-check-scanf`) has been converted to a `path-problem` query. +* The "Potentially uninitialized local variable" query (`cpp/uninitialized-local`) has been converted to a `path-problem` query. +* Added models for `GLib` allocation and deallocation functions. diff --git a/cpp/ql/src/codeql-pack.release.yml b/cpp/ql/src/codeql-pack.release.yml index 460240feaff..aabed7c396b 100644 --- a/cpp/ql/src/codeql-pack.release.yml +++ b/cpp/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.9.5 +lastReleaseVersion: 0.9.9 diff --git a/cpp/ql/src/qlpack.yml b/cpp/ql/src/qlpack.yml index 31bd20166b2..f50b33af9b7 100644 --- a/cpp/ql/src/qlpack.yml +++ b/cpp/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/cpp-queries -version: 0.9.6-dev +version: 0.9.10-dev groups: - cpp - queries diff --git a/cpp/ql/test/examples/expressions/PrintAST.expected b/cpp/ql/test/examples/expressions/PrintAST.expected index 86aa1e36414..7de95cb8b4a 100644 --- a/cpp/ql/test/examples/expressions/PrintAST.expected +++ b/cpp/ql/test/examples/expressions/PrintAST.expected @@ -105,10 +105,24 @@ ConditionDecl.cpp: # 3| getVariableAccess(): [VariableAccess] k # 3| Type = [IntType] int # 3| ValueCategory = prvalue(load) +# 3| getInitializingExpr(): [LTExpr] ... < ... +# 3| Type = [BoolType] bool +# 3| ValueCategory = prvalue +# 3| getLesserOperand(): [VariableAccess] j +# 3| Type = [IntType] int +# 3| ValueCategory = prvalue(load) +# 3| getGreaterOperand(): [Literal] 5 +# 3| Type = [IntType] int +# 3| Value = [Literal] 5 +# 3| ValueCategory = prvalue # 3| getVariableAccess().getFullyConverted(): [CStyleCast] (bool)... # 3| Conversion = [BoolConversion] conversion to bool # 3| Type = [BoolType] bool # 3| ValueCategory = prvalue +# 3| getInitializingExpr().getFullyConverted(): [CStyleCast] (int)... +# 3| Conversion = [IntegralConversion] integral conversion +# 3| Type = [IntType] int +# 3| ValueCategory = prvalue # 3| getStmt(): [BlockStmt] { ... } # 5| getStmt(2): [ReturnStmt] return ... ConstructorCall.cpp: @@ -412,11 +426,14 @@ DestructorCall.cpp: # 12| getQualifier(): [VariableAccess] c # 12| Type = [PointerType] C * # 12| ValueCategory = prvalue(load) +# 12| getExprWithReuse(): [ReuseExpr] reuse of c +# 12| Type = [PointerType] C * +# 12| ValueCategory = prvalue # 13| getStmt(1): [ExprStmt] ExprStmt # 13| getExpr(): [DeleteExpr] delete # 13| Type = [VoidType] void # 13| ValueCategory = prvalue -# 13| getExpr(): [VariableAccess] d +# 13| getExprWithReuse(): [VariableAccess] d # 13| Type = [PointerType] D * # 13| ValueCategory = prvalue(load) # 14| getStmt(2): [ReturnStmt] return ... diff --git a/cpp/ql/test/library-tests/compiler_generated/compilerGenerated.expected b/cpp/ql/test/library-tests/compiler_generated/compilerGenerated.expected index f7c1dd25dc5..b61085ff7c6 100644 --- a/cpp/ql/test/library-tests/compiler_generated/compilerGenerated.expected +++ b/cpp/ql/test/library-tests/compiler_generated/compilerGenerated.expected @@ -14,6 +14,7 @@ | cpp.cpp:10:7:10:7 | operator= | Function | | cpp.cpp:10:7:10:7 | ~MyClass | Function | | cpp.cpp:15:5:15:12 | call to ~MyClass | Expr | +| cpp.cpp:15:12:15:12 | reuse of m | Expr | | cpp.cpp:16:1:16:1 | return ... | Stmt | | file://:0:0:0:0 | operator delete | Function | | file://:0:0:0:0 | operator new | Function | diff --git a/cpp/ql/test/library-tests/controlflow/guards-ir/tests.expected b/cpp/ql/test/library-tests/controlflow/guards-ir/tests.expected index ac8068e768d..cc29559d5d3 100644 --- a/cpp/ql/test/library-tests/controlflow/guards-ir/tests.expected +++ b/cpp/ql/test/library-tests/controlflow/guards-ir/tests.expected @@ -62,7 +62,9 @@ astGuardsCompare | 26 | x >= 0+1 when ... > ... is true | | 31 | - ... != x+0 when ... == ... is false | | 31 | - ... == x+0 when ... == ... is true | +| 31 | x != -1 when ... == ... is false | | 31 | x != - ...+0 when ... == ... is false | +| 31 | x == -1 when ... == ... is true | | 31 | x == - ...+0 when ... == ... is true | | 34 | 10 < j+1 when ... < ... is false | | 34 | 10 >= j+1 when ... < ... is true | @@ -86,15 +88,20 @@ astGuardsCompare | 58 | 0 < y+1 when ... \|\| ... is false | | 58 | 0 == x+0 when ... == ... is true | | 58 | 0 >= y+1 when ... < ... is true | +| 58 | x != 0 when ... == ... is false | +| 58 | x != 0 when ... \|\| ... is false | | 58 | x != 0+0 when ... == ... is false | | 58 | x != 0+0 when ... \|\| ... is false | +| 58 | x == 0 when ... == ... is true | | 58 | x == 0+0 when ... == ... is true | | 58 | y < 0+0 when ... < ... is true | | 58 | y >= 0+0 when ... < ... is false | | 58 | y >= 0+0 when ... \|\| ... is false | | 75 | 0 != x+0 when ... == ... is false | | 75 | 0 == x+0 when ... == ... is true | +| 75 | x != 0 when ... == ... is false | | 75 | x != 0+0 when ... == ... is false | +| 75 | x == 0 when ... == ... is true | | 75 | x == 0+0 when ... == ... is true | | 85 | 0 != x+0 when ... == ... is false | | 85 | 0 != y+0 when ... != ... is true | @@ -102,15 +109,23 @@ astGuardsCompare | 85 | 0 == x+0 when ... && ... is true | | 85 | 0 == x+0 when ... == ... is true | | 85 | 0 == y+0 when ... != ... is false | +| 85 | x != 0 when ... == ... is false | | 85 | x != 0+0 when ... == ... is false | +| 85 | x == 0 when ... && ... is true | +| 85 | x == 0 when ... == ... is true | | 85 | x == 0+0 when ... && ... is true | | 85 | x == 0+0 when ... == ... is true | +| 85 | y != 0 when ... != ... is true | +| 85 | y != 0 when ... && ... is true | | 85 | y != 0+0 when ... != ... is true | | 85 | y != 0+0 when ... && ... is true | +| 85 | y == 0 when ... != ... is false | | 85 | y == 0+0 when ... != ... is false | | 94 | 0 != x+0 when ... != ... is true | | 94 | 0 == x+0 when ... != ... is false | +| 94 | x != 0 when ... != ... is true | | 94 | x != 0+0 when ... != ... is true | +| 94 | x == 0 when ... != ... is false | | 94 | x == 0+0 when ... != ... is false | | 102 | 10 < j+1 when ... < ... is false | | 102 | 10 >= j+1 when ... < ... is true | @@ -122,8 +137,11 @@ astGuardsCompare | 109 | 0 < y+1 when ... \|\| ... is false | | 109 | 0 == x+0 when ... == ... is true | | 109 | 0 >= y+1 when ... < ... is true | +| 109 | x != 0 when ... == ... is false | +| 109 | x != 0 when ... \|\| ... is false | | 109 | x != 0+0 when ... == ... is false | | 109 | x != 0+0 when ... \|\| ... is false | +| 109 | x == 0 when ... == ... is true | | 109 | x == 0+0 when ... == ... is true | | 109 | y < 0+0 when ... < ... is true | | 109 | y >= 0+0 when ... < ... is false | @@ -162,7 +180,9 @@ astGuardsCompare | 165 | y >= x+43 when ... < ... is true | | 175 | 0 != call to foo+0 when ... == ... is false | | 175 | 0 == call to foo+0 when ... == ... is true | +| 175 | call to foo != 0 when ... == ... is false | | 175 | call to foo != 0+0 when ... == ... is false | +| 175 | call to foo == 0 when ... == ... is true | | 175 | call to foo == 0+0 when ... == ... is true | astGuardsControl | test.c:7:9:7:13 | ... > ... | false | 10 | 11 | @@ -443,6 +463,34 @@ astGuardsEnsure | test.cpp:31:7:31:13 | ... == ... | test.cpp:31:12:31:13 | - ... | != | test.cpp:31:7:31:7 | x | 0 | 34 | 34 | | test.cpp:31:7:31:13 | ... == ... | test.cpp:31:12:31:13 | - ... | == | test.cpp:31:7:31:7 | x | 0 | 30 | 30 | | test.cpp:31:7:31:13 | ... == ... | test.cpp:31:12:31:13 | - ... | == | test.cpp:31:7:31:7 | x | 0 | 31 | 32 | +astGuardsEnsure_const +| test.c:58:9:58:14 | ... == ... | test.c:58:9:58:9 | x | != | 0 | 58 | 58 | +| test.c:58:9:58:14 | ... == ... | test.c:58:9:58:9 | x | != | 0 | 62 | 62 | +| test.c:58:9:58:23 | ... \|\| ... | test.c:58:9:58:9 | x | != | 0 | 62 | 62 | +| test.c:75:9:75:14 | ... == ... | test.c:75:9:75:9 | x | != | 0 | 78 | 79 | +| test.c:75:9:75:14 | ... == ... | test.c:75:9:75:9 | x | == | 0 | 75 | 77 | +| test.c:85:8:85:13 | ... == ... | test.c:85:8:85:8 | x | == | 0 | 85 | 85 | +| test.c:85:8:85:13 | ... == ... | test.c:85:8:85:8 | x | == | 0 | 86 | 86 | +| test.c:85:8:85:23 | ... && ... | test.c:85:8:85:8 | x | == | 0 | 86 | 86 | +| test.c:85:8:85:23 | ... && ... | test.c:85:18:85:18 | y | != | 0 | 86 | 86 | +| test.c:85:18:85:23 | ... != ... | test.c:85:18:85:18 | y | != | 0 | 86 | 86 | +| test.c:94:11:94:16 | ... != ... | test.c:94:11:94:11 | x | != | 0 | 94 | 96 | +| test.c:94:11:94:16 | ... != ... | test.c:94:11:94:11 | x | == | 0 | 70 | 70 | +| test.c:94:11:94:16 | ... != ... | test.c:94:11:94:11 | x | == | 0 | 99 | 102 | +| test.c:94:11:94:16 | ... != ... | test.c:94:11:94:11 | x | == | 0 | 102 | 102 | +| test.c:94:11:94:16 | ... != ... | test.c:94:11:94:11 | x | == | 0 | 107 | 109 | +| test.c:94:11:94:16 | ... != ... | test.c:94:11:94:11 | x | == | 0 | 109 | 109 | +| test.c:94:11:94:16 | ... != ... | test.c:94:11:94:11 | x | == | 0 | 109 | 117 | +| test.c:94:11:94:16 | ... != ... | test.c:94:11:94:11 | x | == | 0 | 113 | 113 | +| test.c:109:9:109:14 | ... == ... | test.c:109:9:109:9 | x | != | 0 | 109 | 109 | +| test.c:109:9:109:14 | ... == ... | test.c:109:9:109:9 | x | != | 0 | 113 | 113 | +| test.c:109:9:109:23 | ... \|\| ... | test.c:109:9:109:9 | x | != | 0 | 113 | 113 | +| test.c:175:13:175:32 | ... == ... | test.c:175:13:175:15 | call to foo | != | 0 | 175 | 175 | +| test.c:175:13:175:32 | ... == ... | test.c:175:13:175:15 | call to foo | == | 0 | 175 | 175 | +| test.cpp:31:7:31:13 | ... == ... | test.cpp:31:7:31:7 | x | != | -1 | 30 | 30 | +| test.cpp:31:7:31:13 | ... == ... | test.cpp:31:7:31:7 | x | != | -1 | 34 | 34 | +| test.cpp:31:7:31:13 | ... == ... | test.cpp:31:7:31:7 | x | == | -1 | 30 | 30 | +| test.cpp:31:7:31:13 | ... == ... | test.cpp:31:7:31:7 | x | == | -1 | 31 | 32 | irGuards | test.c:7:9:7:13 | CompareGT: ... > ... | | test.c:17:8:17:12 | CompareLT: ... < ... | @@ -482,74 +530,110 @@ irGuardsCompare | 7 | 0 < x+0 when CompareGT: ... > ... is true | | 7 | 0 >= x+0 when CompareGT: ... > ... is false | | 7 | x < 0+1 when CompareGT: ... > ... is false | +| 7 | x < 1 when CompareGT: ... > ... is false | | 7 | x >= 0+1 when CompareGT: ... > ... is true | +| 7 | x >= 1 when CompareGT: ... > ... is true | | 17 | 0 < x+1 when CompareLT: ... < ... is false | | 17 | 0 >= x+1 when CompareLT: ... < ... is true | | 17 | 1 < y+0 when CompareGT: ... > ... is true | | 17 | 1 >= y+0 when CompareGT: ... > ... is false | +| 17 | x < 0 when CompareLT: ... < ... is true | | 17 | x < 0+0 when CompareLT: ... < ... is true | +| 17 | x >= 0 when CompareLT: ... < ... is false | | 17 | x >= 0+0 when CompareLT: ... < ... is false | | 17 | y < 1+1 when CompareGT: ... > ... is false | +| 17 | y < 2 when CompareGT: ... > ... is false | | 17 | y >= 1+1 when CompareGT: ... > ... is true | +| 17 | y >= 2 when CompareGT: ... > ... is true | | 26 | 0 < x+0 when CompareGT: ... > ... is true | | 26 | 0 >= x+0 when CompareGT: ... > ... is false | | 26 | x < 0+1 when CompareGT: ... > ... is false | +| 26 | x < 1 when CompareGT: ... > ... is false | | 26 | x >= 0+1 when CompareGT: ... > ... is true | +| 26 | x >= 1 when CompareGT: ... > ... is true | | 31 | - ... != x+0 when CompareEQ: ... == ... is false | | 31 | - ... == x+0 when CompareEQ: ... == ... is true | +| 31 | x != -1 when CompareEQ: ... == ... is false | | 31 | x != - ...+0 when CompareEQ: ... == ... is false | +| 31 | x == -1 when CompareEQ: ... == ... is true | | 31 | x == - ...+0 when CompareEQ: ... == ... is true | | 34 | 10 < j+1 when CompareLT: ... < ... is false | | 34 | 10 >= j+1 when CompareLT: ... < ... is true | +| 34 | j < 10 when CompareLT: ... < ... is true | | 34 | j < 10+0 when CompareLT: ... < ... is true | +| 34 | j >= 10 when CompareLT: ... < ... is false | | 34 | j >= 10+0 when CompareLT: ... < ... is false | | 42 | 10 < j+1 when CompareLT: ... < ... is false | | 42 | 10 >= j+1 when CompareLT: ... < ... is true | +| 42 | j < 10 when CompareLT: ... < ... is true | | 42 | j < 10+0 when CompareLT: ... < ... is true | +| 42 | j >= 10 when CompareLT: ... < ... is false | | 42 | j >= 10+0 when CompareLT: ... < ... is false | | 44 | 0 < z+0 when CompareGT: ... > ... is true | | 44 | 0 >= z+0 when CompareGT: ... > ... is false | | 44 | z < 0+1 when CompareGT: ... > ... is false | +| 44 | z < 1 when CompareGT: ... > ... is false | | 44 | z >= 0+1 when CompareGT: ... > ... is true | +| 44 | z >= 1 when CompareGT: ... > ... is true | | 45 | 0 < y+0 when CompareGT: ... > ... is true | | 45 | 0 >= y+0 when CompareGT: ... > ... is false | | 45 | y < 0+1 when CompareGT: ... > ... is false | +| 45 | y < 1 when CompareGT: ... > ... is false | | 45 | y >= 0+1 when CompareGT: ... > ... is true | +| 45 | y >= 1 when CompareGT: ... > ... is true | | 58 | 0 != x+0 when CompareEQ: ... == ... is false | | 58 | 0 < y+1 when CompareLT: ... < ... is false | | 58 | 0 == x+0 when CompareEQ: ... == ... is true | | 58 | 0 >= y+1 when CompareLT: ... < ... is true | +| 58 | x != 0 when CompareEQ: ... == ... is false | | 58 | x != 0+0 when CompareEQ: ... == ... is false | +| 58 | x == 0 when CompareEQ: ... == ... is true | | 58 | x == 0+0 when CompareEQ: ... == ... is true | +| 58 | y < 0 when CompareLT: ... < ... is true | | 58 | y < 0+0 when CompareLT: ... < ... is true | +| 58 | y >= 0 when CompareLT: ... < ... is false | | 58 | y >= 0+0 when CompareLT: ... < ... is false | | 75 | 0 != x+0 when CompareEQ: ... == ... is false | | 75 | 0 == x+0 when CompareEQ: ... == ... is true | +| 75 | x != 0 when CompareEQ: ... == ... is false | | 75 | x != 0+0 when CompareEQ: ... == ... is false | +| 75 | x == 0 when CompareEQ: ... == ... is true | | 75 | x == 0+0 when CompareEQ: ... == ... is true | | 85 | 0 != x+0 when CompareEQ: ... == ... is false | | 85 | 0 != y+0 when CompareNE: ... != ... is true | | 85 | 0 == x+0 when CompareEQ: ... == ... is true | | 85 | 0 == y+0 when CompareNE: ... != ... is false | +| 85 | x != 0 when CompareEQ: ... == ... is false | | 85 | x != 0+0 when CompareEQ: ... == ... is false | +| 85 | x == 0 when CompareEQ: ... == ... is true | | 85 | x == 0+0 when CompareEQ: ... == ... is true | +| 85 | y != 0 when CompareNE: ... != ... is true | | 85 | y != 0+0 when CompareNE: ... != ... is true | +| 85 | y == 0 when CompareNE: ... != ... is false | | 85 | y == 0+0 when CompareNE: ... != ... is false | | 94 | 0 != x+0 when CompareNE: ... != ... is true | | 94 | 0 == x+0 when CompareNE: ... != ... is false | +| 94 | x != 0 when CompareNE: ... != ... is true | | 94 | x != 0+0 when CompareNE: ... != ... is true | +| 94 | x == 0 when CompareNE: ... != ... is false | | 94 | x == 0+0 when CompareNE: ... != ... is false | | 102 | 10 < j+1 when CompareLT: ... < ... is false | | 102 | 10 >= j+1 when CompareLT: ... < ... is true | +| 102 | j < 10 when CompareLT: ... < ... is true | | 102 | j < 10+0 when CompareLT: ... < ... is true | +| 102 | j >= 10 when CompareLT: ... < ... is false | | 102 | j >= 10+0 when CompareLT: ... < ... is false | | 109 | 0 != x+0 when CompareEQ: ... == ... is false | | 109 | 0 < y+1 when CompareLT: ... < ... is false | | 109 | 0 == x+0 when CompareEQ: ... == ... is true | | 109 | 0 >= y+1 when CompareLT: ... < ... is true | +| 109 | x != 0 when CompareEQ: ... == ... is false | | 109 | x != 0+0 when CompareEQ: ... == ... is false | +| 109 | x == 0 when CompareEQ: ... == ... is true | | 109 | x == 0+0 when CompareEQ: ... == ... is true | +| 109 | y < 0 when CompareLT: ... < ... is true | | 109 | y < 0+0 when CompareLT: ... < ... is true | +| 109 | y >= 0 when CompareLT: ... < ... is false | | 109 | y >= 0+0 when CompareLT: ... < ... is false | | 156 | ... + ... != x+0 when CompareEQ: ... == ... is false | | 156 | ... + ... == x+0 when CompareEQ: ... == ... is true | @@ -585,7 +669,9 @@ irGuardsCompare | 165 | y >= x+43 when CompareLT: ... < ... is true | | 175 | 0 != call to foo+0 when CompareEQ: ... == ... is false | | 175 | 0 == call to foo+0 when CompareEQ: ... == ... is true | +| 175 | call to foo != 0 when CompareEQ: ... == ... is false | | 175 | call to foo != 0+0 when CompareEQ: ... == ... is false | +| 175 | call to foo == 0 when CompareEQ: ... == ... is true | | 175 | call to foo == 0+0 when CompareEQ: ... == ... is true | irGuardsControl | test.c:7:9:7:13 | CompareGT: ... > ... | false | 11 | 11 | @@ -841,3 +927,75 @@ irGuardsEnsure | test.cpp:31:7:31:13 | CompareEQ: ... == ... | test.cpp:31:12:31:13 | Constant: - ... | != | test.cpp:31:7:31:7 | Load: x | 0 | 34 | 34 | | test.cpp:31:7:31:13 | CompareEQ: ... == ... | test.cpp:31:12:31:13 | Constant: - ... | == | test.cpp:31:7:31:7 | Load: x | 0 | 30 | 30 | | test.cpp:31:7:31:13 | CompareEQ: ... == ... | test.cpp:31:12:31:13 | Constant: - ... | == | test.cpp:31:7:31:7 | Load: x | 0 | 32 | 32 | +irGuardsEnsure_const +| test.c:7:9:7:13 | CompareGT: ... > ... | test.c:7:9:7:9 | Load: x | < | 1 | 11 | 11 | +| test.c:7:9:7:13 | CompareGT: ... > ... | test.c:7:9:7:9 | Load: x | >= | 1 | 8 | 8 | +| test.c:17:8:17:12 | CompareLT: ... < ... | test.c:17:8:17:8 | Load: x | < | 0 | 17 | 17 | +| test.c:17:8:17:12 | CompareLT: ... < ... | test.c:17:8:17:8 | Load: x | < | 0 | 18 | 18 | +| test.c:17:17:17:21 | CompareGT: ... > ... | test.c:17:17:17:17 | Load: y | >= | 2 | 18 | 18 | +| test.c:26:11:26:15 | CompareGT: ... > ... | test.c:26:11:26:11 | Load: x | < | 1 | 2 | 2 | +| test.c:26:11:26:15 | CompareGT: ... > ... | test.c:26:11:26:11 | Load: x | < | 1 | 31 | 31 | +| test.c:26:11:26:15 | CompareGT: ... > ... | test.c:26:11:26:11 | Load: x | < | 1 | 34 | 34 | +| test.c:26:11:26:15 | CompareGT: ... > ... | test.c:26:11:26:11 | Load: x | < | 1 | 35 | 35 | +| test.c:26:11:26:15 | CompareGT: ... > ... | test.c:26:11:26:11 | Load: x | < | 1 | 39 | 39 | +| test.c:26:11:26:15 | CompareGT: ... > ... | test.c:26:11:26:11 | Load: x | < | 1 | 42 | 42 | +| test.c:26:11:26:15 | CompareGT: ... > ... | test.c:26:11:26:11 | Load: x | < | 1 | 43 | 43 | +| test.c:26:11:26:15 | CompareGT: ... > ... | test.c:26:11:26:11 | Load: x | < | 1 | 45 | 45 | +| test.c:26:11:26:15 | CompareGT: ... > ... | test.c:26:11:26:11 | Load: x | < | 1 | 46 | 46 | +| test.c:26:11:26:15 | CompareGT: ... > ... | test.c:26:11:26:11 | Load: x | < | 1 | 52 | 52 | +| test.c:26:11:26:15 | CompareGT: ... > ... | test.c:26:11:26:11 | Load: x | < | 1 | 56 | 56 | +| test.c:26:11:26:15 | CompareGT: ... > ... | test.c:26:11:26:11 | Load: x | < | 1 | 58 | 58 | +| test.c:26:11:26:15 | CompareGT: ... > ... | test.c:26:11:26:11 | Load: x | < | 1 | 59 | 59 | +| test.c:26:11:26:15 | CompareGT: ... > ... | test.c:26:11:26:11 | Load: x | < | 1 | 62 | 62 | +| test.c:26:11:26:15 | CompareGT: ... > ... | test.c:26:11:26:11 | Load: x | >= | 1 | 27 | 27 | +| test.c:34:16:34:21 | CompareLT: ... < ... | test.c:34:16:34:16 | Load: j | < | 10 | 35 | 35 | +| test.c:34:16:34:21 | CompareLT: ... < ... | test.c:34:16:34:16 | Load: j | >= | 10 | 2 | 2 | +| test.c:34:16:34:21 | CompareLT: ... < ... | test.c:34:16:34:16 | Load: j | >= | 10 | 39 | 39 | +| test.c:34:16:34:21 | CompareLT: ... < ... | test.c:34:16:34:16 | Load: j | >= | 10 | 42 | 42 | +| test.c:34:16:34:21 | CompareLT: ... < ... | test.c:34:16:34:16 | Load: j | >= | 10 | 43 | 43 | +| test.c:34:16:34:21 | CompareLT: ... < ... | test.c:34:16:34:16 | Load: j | >= | 10 | 45 | 45 | +| test.c:34:16:34:21 | CompareLT: ... < ... | test.c:34:16:34:16 | Load: j | >= | 10 | 46 | 46 | +| test.c:34:16:34:21 | CompareLT: ... < ... | test.c:34:16:34:16 | Load: j | >= | 10 | 52 | 52 | +| test.c:34:16:34:21 | CompareLT: ... < ... | test.c:34:16:34:16 | Load: j | >= | 10 | 56 | 56 | +| test.c:34:16:34:21 | CompareLT: ... < ... | test.c:34:16:34:16 | Load: j | >= | 10 | 58 | 58 | +| test.c:34:16:34:21 | CompareLT: ... < ... | test.c:34:16:34:16 | Load: j | >= | 10 | 59 | 59 | +| test.c:34:16:34:21 | CompareLT: ... < ... | test.c:34:16:34:16 | Load: j | >= | 10 | 62 | 62 | +| test.c:42:16:42:21 | CompareLT: ... < ... | test.c:42:16:42:16 | Load: j | < | 10 | 43 | 43 | +| test.c:42:16:42:21 | CompareLT: ... < ... | test.c:42:16:42:16 | Load: j | < | 10 | 45 | 45 | +| test.c:42:16:42:21 | CompareLT: ... < ... | test.c:42:16:42:16 | Load: j | < | 10 | 46 | 46 | +| test.c:42:16:42:21 | CompareLT: ... < ... | test.c:42:16:42:16 | Load: j | < | 10 | 52 | 52 | +| test.c:44:12:44:16 | CompareGT: ... > ... | test.c:44:12:44:12 | Load: z | < | 1 | 52 | 52 | +| test.c:44:12:44:16 | CompareGT: ... > ... | test.c:44:12:44:12 | Load: z | >= | 1 | 45 | 45 | +| test.c:44:12:44:16 | CompareGT: ... > ... | test.c:44:12:44:12 | Load: z | >= | 1 | 46 | 46 | +| test.c:45:16:45:20 | CompareGT: ... > ... | test.c:45:16:45:16 | Load: y | >= | 1 | 46 | 46 | +| test.c:58:9:58:14 | CompareEQ: ... == ... | test.c:58:9:58:9 | Load: x | != | 0 | 58 | 58 | +| test.c:58:9:58:14 | CompareEQ: ... == ... | test.c:58:9:58:9 | Load: x | != | 0 | 62 | 62 | +| test.c:58:19:58:23 | CompareLT: ... < ... | test.c:58:19:58:19 | Load: y | >= | 0 | 62 | 62 | +| test.c:75:9:75:14 | CompareEQ: ... == ... | test.c:75:9:75:9 | Load: x | != | 0 | 79 | 79 | +| test.c:75:9:75:14 | CompareEQ: ... == ... | test.c:75:9:75:9 | Load: x | == | 0 | 76 | 76 | +| test.c:85:8:85:13 | CompareEQ: ... == ... | test.c:85:8:85:8 | Load: x | == | 0 | 85 | 85 | +| test.c:85:8:85:13 | CompareEQ: ... == ... | test.c:85:8:85:8 | Load: x | == | 0 | 86 | 86 | +| test.c:85:18:85:23 | CompareNE: ... != ... | test.c:85:18:85:18 | Load: y | != | 0 | 86 | 86 | +| test.c:94:11:94:16 | CompareNE: ... != ... | test.c:94:11:94:11 | Load: x | != | 0 | 95 | 95 | +| test.c:94:11:94:16 | CompareNE: ... != ... | test.c:94:11:94:11 | Load: x | == | 0 | 70 | 70 | +| test.c:94:11:94:16 | CompareNE: ... != ... | test.c:94:11:94:11 | Load: x | == | 0 | 99 | 99 | +| test.c:94:11:94:16 | CompareNE: ... != ... | test.c:94:11:94:11 | Load: x | == | 0 | 102 | 102 | +| test.c:94:11:94:16 | CompareNE: ... != ... | test.c:94:11:94:11 | Load: x | == | 0 | 103 | 103 | +| test.c:94:11:94:16 | CompareNE: ... != ... | test.c:94:11:94:11 | Load: x | == | 0 | 107 | 107 | +| test.c:94:11:94:16 | CompareNE: ... != ... | test.c:94:11:94:11 | Load: x | == | 0 | 109 | 109 | +| test.c:94:11:94:16 | CompareNE: ... != ... | test.c:94:11:94:11 | Load: x | == | 0 | 110 | 110 | +| test.c:94:11:94:16 | CompareNE: ... != ... | test.c:94:11:94:11 | Load: x | == | 0 | 113 | 113 | +| test.c:102:16:102:21 | CompareLT: ... < ... | test.c:102:16:102:16 | Load: j | < | 10 | 103 | 103 | +| test.c:102:16:102:21 | CompareLT: ... < ... | test.c:102:16:102:16 | Load: j | >= | 10 | 70 | 70 | +| test.c:102:16:102:21 | CompareLT: ... < ... | test.c:102:16:102:16 | Load: j | >= | 10 | 107 | 107 | +| test.c:102:16:102:21 | CompareLT: ... < ... | test.c:102:16:102:16 | Load: j | >= | 10 | 109 | 109 | +| test.c:102:16:102:21 | CompareLT: ... < ... | test.c:102:16:102:16 | Load: j | >= | 10 | 110 | 110 | +| test.c:102:16:102:21 | CompareLT: ... < ... | test.c:102:16:102:16 | Load: j | >= | 10 | 113 | 113 | +| test.c:109:9:109:14 | CompareEQ: ... == ... | test.c:109:9:109:9 | Load: x | != | 0 | 109 | 109 | +| test.c:109:9:109:14 | CompareEQ: ... == ... | test.c:109:9:109:9 | Load: x | != | 0 | 113 | 113 | +| test.c:109:19:109:23 | CompareLT: ... < ... | test.c:109:19:109:19 | Load: y | >= | 0 | 113 | 113 | +| test.c:175:13:175:32 | CompareEQ: ... == ... | test.c:175:13:175:15 | Call: call to foo | != | 0 | 175 | 175 | +| test.c:175:13:175:32 | CompareEQ: ... == ... | test.c:175:13:175:15 | Call: call to foo | == | 0 | 175 | 175 | +| test.cpp:31:7:31:13 | CompareEQ: ... == ... | test.cpp:31:7:31:7 | Load: x | != | -1 | 34 | 34 | +| test.cpp:31:7:31:13 | CompareEQ: ... == ... | test.cpp:31:7:31:7 | Load: x | == | -1 | 30 | 30 | +| test.cpp:31:7:31:13 | CompareEQ: ... == ... | test.cpp:31:7:31:7 | Load: x | == | -1 | 32 | 32 | diff --git a/cpp/ql/test/library-tests/controlflow/guards-ir/tests.ql b/cpp/ql/test/library-tests/controlflow/guards-ir/tests.ql index fe3d92d2c2b..0f147f9ea8d 100644 --- a/cpp/ql/test/library-tests/controlflow/guards-ir/tests.ql +++ b/cpp/ql/test/library-tests/controlflow/guards-ir/tests.ql @@ -4,22 +4,34 @@ import semmle.code.cpp.controlflow.IRGuards query predicate astGuards(GuardCondition guard) { any() } query predicate astGuardsCompare(int startLine, string msg) { - exists(GuardCondition guard, Expr left, Expr right, int k, string which, string op | - exists(boolean sense | + exists(GuardCondition guard, Expr left, int k, string op | + exists(boolean sense, string which | sense = true and which = "true" or sense = false and which = "false" | - guard.comparesLt(left, right, k, true, sense) and op = " < " + exists(Expr right | + guard.comparesLt(left, right, k, true, sense) and op = " < " + or + guard.comparesLt(left, right, k, false, sense) and op = " >= " + or + guard.comparesEq(left, right, k, true, sense) and op = " == " + or + guard.comparesEq(left, right, k, false, sense) and op = " != " + | + msg = left + op + right + "+" + k + " when " + guard + " is " + which + ) + ) + or + exists(AbstractValue value | + guard.comparesEq(left, k, true, value) and op = " == " or - guard.comparesLt(left, right, k, false, sense) and op = " >= " - or - guard.comparesEq(left, right, k, true, sense) and op = " == " - or - guard.comparesEq(left, right, k, false, sense) and op = " != " - ) and - startLine = guard.getLocation().getStartLine() and - msg = left + op + right + "+" + k + " when " + guard + " is " + which + guard.comparesEq(left, k, false, value) and op = " != " + | + msg = left + op + k + " when " + guard + " is " + value + ) + | + startLine = guard.getLocation().getStartLine() ) } @@ -46,28 +58,58 @@ query predicate astGuardsEnsure( ) } +query predicate astGuardsEnsure_const( + GuardCondition guard, Expr left, string op, int k, int start, int end +) { + exists(BasicBlock block | + guard.ensuresEq(left, k, block, true) and op = "==" + or + guard.ensuresEq(left, k, block, false) and op = "!=" + | + block.hasLocationInfo(_, start, _, end, _) + ) +} + query predicate irGuards(IRGuardCondition guard) { any() } query predicate irGuardsCompare(int startLine, string msg) { - exists(IRGuardCondition guard, Operand left, Operand right, int k, string which, string op | - exists(boolean sense | + exists(IRGuardCondition guard, Operand left, int k, string op | + exists(boolean sense, string which | sense = true and which = "true" or sense = false and which = "false" | - guard.comparesLt(left, right, k, true, sense) and op = " < " + exists(Operand right | + guard.comparesLt(left, right, k, true, sense) and op = " < " + or + guard.comparesLt(left, right, k, false, sense) and op = " >= " + or + guard.comparesEq(left, right, k, true, sense) and op = " == " + or + guard.comparesEq(left, right, k, false, sense) and op = " != " + | + msg = + left.getAnyDef().getUnconvertedResultExpression() + op + + right.getAnyDef().getUnconvertedResultExpression() + "+" + k + " when " + guard + " is " + + which + ) + ) + or + exists(AbstractValue value | + guard.comparesLt(left, k, true, value) and op = " < " or - guard.comparesLt(left, right, k, false, sense) and op = " >= " + guard.comparesLt(left, k, false, value) and op = " >= " or - guard.comparesEq(left, right, k, true, sense) and op = " == " + guard.comparesEq(left, k, true, value) and op = " == " or - guard.comparesEq(left, right, k, false, sense) and op = " != " - ) and - startLine = guard.getLocation().getStartLine() and - msg = - left.getAnyDef().getUnconvertedResultExpression() + op + - right.getAnyDef().getUnconvertedResultExpression() + "+" + k + " when " + guard + " is " + - which + guard.comparesEq(left, k, false, value) and op = " != " + | + msg = + left.getAnyDef().getUnconvertedResultExpression() + op + k + " when " + guard + " is " + + value + ) + | + startLine = guard.getLocation().getStartLine() ) } @@ -95,3 +137,20 @@ query predicate irGuardsEnsure( block.getLocation().hasLocationInfo(_, start, _, end, _) ) } + +query predicate irGuardsEnsure_const( + IRGuardCondition guard, Instruction left, string op, int k, int start, int end +) { + exists(IRBlock block, Operand leftOp | + guard.ensuresLt(leftOp, k, block, true) and op = "<" + or + guard.ensuresLt(leftOp, k, block, false) and op = ">=" + or + guard.ensuresEq(leftOp, k, block, true) and op = "==" + or + guard.ensuresEq(leftOp, k, block, false) and op = "!=" + | + leftOp = left.getAUse() and + block.getLocation().hasLocationInfo(_, start, _, end, _) + ) +} diff --git a/cpp/ql/test/library-tests/controlflow/guards/GuardsCompare.expected b/cpp/ql/test/library-tests/controlflow/guards/GuardsCompare.expected index 58068f3991d..b88856d90cf 100644 --- a/cpp/ql/test/library-tests/controlflow/guards/GuardsCompare.expected +++ b/cpp/ql/test/library-tests/controlflow/guards/GuardsCompare.expected @@ -1,58 +1,93 @@ | 7 | 0 < x+0 when ... > ... is true | | 7 | 0 >= x+0 when ... > ... is false | | 7 | x < 0+1 when ... > ... is false | +| 7 | x < 1 when ... > ... is false | | 7 | x >= 0+1 when ... > ... is true | +| 7 | x >= 1 when ... > ... is true | | 17 | 0 < x+1 when ... < ... is false | | 17 | 0 >= x+1 when ... && ... is true | | 17 | 0 >= x+1 when ... < ... is true | | 17 | 1 < y+0 when ... && ... is true | | 17 | 1 < y+0 when ... > ... is true | | 17 | 1 >= y+0 when ... > ... is false | +| 17 | x < 0 when ... && ... is true | +| 17 | x < 0 when ... < ... is true | | 17 | x < 0+0 when ... && ... is true | | 17 | x < 0+0 when ... < ... is true | +| 17 | x >= 0 when ... < ... is false | | 17 | x >= 0+0 when ... < ... is false | | 17 | y < 1+1 when ... > ... is false | +| 17 | y < 2 when ... > ... is false | | 17 | y >= 1+1 when ... && ... is true | | 17 | y >= 1+1 when ... > ... is true | +| 17 | y >= 2 when ... && ... is true | +| 17 | y >= 2 when ... > ... is true | | 26 | 0 < x+0 when ... > ... is true | | 26 | 0 >= x+0 when ... > ... is false | | 26 | x < 0+1 when ... > ... is false | +| 26 | x < 1 when ... > ... is false | | 26 | x >= 0+1 when ... > ... is true | +| 26 | x >= 1 when ... > ... is true | | 31 | - ... != x+0 when ... == ... is false | | 31 | - ... == x+0 when ... == ... is true | +| 31 | x != -1 when ... == ... is false | | 31 | x != - ...+0 when ... == ... is false | +| 31 | x == -1 when ... == ... is true | | 31 | x == - ...+0 when ... == ... is true | | 34 | 10 < j+1 when ... < ... is false | | 34 | 10 >= j+1 when ... < ... is true | +| 34 | j < 10 when ... < ... is true | | 34 | j < 10+0 when ... < ... is true | +| 34 | j >= 10 when ... < ... is false | | 34 | j >= 10+0 when ... < ... is false | | 42 | 10 < j+1 when ... < ... is false | | 42 | 10 >= j+1 when ... < ... is true | +| 42 | j < 10 when ... < ... is true | | 42 | j < 10+0 when ... < ... is true | +| 42 | j >= 10 when ... < ... is false | | 42 | j >= 10+0 when ... < ... is false | | 44 | 0 < z+0 when ... > ... is true | | 44 | 0 >= z+0 when ... > ... is false | | 44 | z < 0+1 when ... > ... is false | +| 44 | z < 1 when ... > ... is false | | 44 | z >= 0+1 when ... > ... is true | +| 44 | z >= 1 when ... > ... is true | | 45 | 0 < y+0 when ... > ... is true | | 45 | 0 >= y+0 when ... > ... is false | | 45 | y < 0+1 when ... > ... is false | +| 45 | y < 1 when ... > ... is false | | 45 | y >= 0+1 when ... > ... is true | +| 45 | y >= 1 when ... > ... is true | | 58 | 0 != x+0 when ... == ... is false | | 58 | 0 != x+0 when ... \|\| ... is false | | 58 | 0 < y+1 when ... < ... is false | | 58 | 0 < y+1 when ... \|\| ... is false | | 58 | 0 == x+0 when ... == ... is true | | 58 | 0 >= y+1 when ... < ... is true | +| 58 | x != 0 when ... == ... is false | +| 58 | x != 0 when ... \|\| ... is false | | 58 | x != 0+0 when ... == ... is false | | 58 | x != 0+0 when ... \|\| ... is false | +| 58 | x == 0 when ... == ... is true | | 58 | x == 0+0 when ... == ... is true | +| 58 | y < 0 when ... < ... is true | | 58 | y < 0+0 when ... < ... is true | +| 58 | y >= 0 when ... < ... is false | +| 58 | y >= 0 when ... \|\| ... is false | | 58 | y >= 0+0 when ... < ... is false | | 58 | y >= 0+0 when ... \|\| ... is false | +| 61 | i == 0 when i is Case[0] | +| 61 | i == 1 when i is Case[1] | +| 61 | i == 2 when i is Case[2] | +| 74 | i < 11 when i is Case[0..10] | +| 74 | i < 21 when i is Case[11..20] | +| 74 | i >= 0 when i is Case[0..10] | +| 74 | i >= 11 when i is Case[11..20] | | 75 | 0 != x+0 when ... == ... is false | | 75 | 0 == x+0 when ... == ... is true | +| 75 | x != 0 when ... == ... is false | | 75 | x != 0+0 when ... == ... is false | +| 75 | x == 0 when ... == ... is true | | 75 | x == 0+0 when ... == ... is true | | 85 | 0 != x+0 when ... == ... is false | | 85 | 0 != y+0 when ... != ... is true | @@ -60,19 +95,29 @@ | 85 | 0 == x+0 when ... && ... is true | | 85 | 0 == x+0 when ... == ... is true | | 85 | 0 == y+0 when ... != ... is false | +| 85 | x != 0 when ... == ... is false | | 85 | x != 0+0 when ... == ... is false | +| 85 | x == 0 when ... && ... is true | +| 85 | x == 0 when ... == ... is true | | 85 | x == 0+0 when ... && ... is true | | 85 | x == 0+0 when ... == ... is true | +| 85 | y != 0 when ... != ... is true | +| 85 | y != 0 when ... && ... is true | | 85 | y != 0+0 when ... != ... is true | | 85 | y != 0+0 when ... && ... is true | +| 85 | y == 0 when ... != ... is false | | 85 | y == 0+0 when ... != ... is false | | 94 | 0 != x+0 when ... != ... is true | | 94 | 0 == x+0 when ... != ... is false | +| 94 | x != 0 when ... != ... is true | | 94 | x != 0+0 when ... != ... is true | +| 94 | x == 0 when ... != ... is false | | 94 | x == 0+0 when ... != ... is false | | 102 | 10 < j+1 when ... < ... is false | | 102 | 10 >= j+1 when ... < ... is true | +| 102 | j < 10 when ... < ... is true | | 102 | j < 10+0 when ... < ... is true | +| 102 | j >= 10 when ... < ... is false | | 102 | j >= 10+0 when ... < ... is false | | 109 | 0 != x+0 when ... == ... is false | | 109 | 0 != x+0 when ... \|\| ... is false | @@ -80,9 +125,15 @@ | 109 | 0 < y+1 when ... \|\| ... is false | | 109 | 0 == x+0 when ... == ... is true | | 109 | 0 >= y+1 when ... < ... is true | +| 109 | x != 0 when ... == ... is false | +| 109 | x != 0 when ... \|\| ... is false | | 109 | x != 0+0 when ... == ... is false | | 109 | x != 0+0 when ... \|\| ... is false | +| 109 | x == 0 when ... == ... is true | | 109 | x == 0+0 when ... == ... is true | +| 109 | y < 0 when ... < ... is true | | 109 | y < 0+0 when ... < ... is true | +| 109 | y >= 0 when ... < ... is false | +| 109 | y >= 0 when ... \|\| ... is false | | 109 | y >= 0+0 when ... < ... is false | | 109 | y >= 0+0 when ... \|\| ... is false | diff --git a/cpp/ql/test/library-tests/controlflow/guards/GuardsCompare.ql b/cpp/ql/test/library-tests/controlflow/guards/GuardsCompare.ql index a1373b2923b..b05f5b95d00 100644 --- a/cpp/ql/test/library-tests/controlflow/guards/GuardsCompare.ql +++ b/cpp/ql/test/library-tests/controlflow/guards/GuardsCompare.ql @@ -7,20 +7,35 @@ import cpp import semmle.code.cpp.controlflow.Guards -from GuardCondition guard, Expr left, Expr right, int k, string which, string op, string msg +from GuardCondition guard, Expr left, int k, string op, string msg where - exists(boolean sense | + exists(boolean sense, string which | sense = true and which = "true" or sense = false and which = "false" | - guard.comparesLt(left, right, k, true, sense) and op = " < " + exists(Expr right | + guard.comparesLt(left, right, k, true, sense) and op = " < " + or + guard.comparesLt(left, right, k, false, sense) and op = " >= " + or + guard.comparesEq(left, right, k, true, sense) and op = " == " + or + guard.comparesEq(left, right, k, false, sense) and op = " != " + | + msg = left + op + right + "+" + k + " when " + guard + " is " + which + ) + ) + or + exists(AbstractValue value | + guard.comparesLt(left, k, true, value) and op = " < " or - guard.comparesLt(left, right, k, false, sense) and op = " >= " + guard.comparesLt(left, k, false, value) and op = " >= " or - guard.comparesEq(left, right, k, true, sense) and op = " == " + guard.comparesEq(left, k, true, value) and op = " == " or - guard.comparesEq(left, right, k, false, sense) and op = " != " - ) and - msg = left + op + right + "+" + k + " when " + guard + " is " + which + guard.comparesEq(left, k, false, value) and op = " != " + | + msg = left + op + k + " when " + guard + " is " + value + ) select guard.getLocation().getStartLine(), msg diff --git a/cpp/ql/test/library-tests/dataflow/taint-tests/localTaint.expected b/cpp/ql/test/library-tests/dataflow/taint-tests/localTaint.expected index 54fd7cd8883..6da494e75d7 100644 --- a/cpp/ql/test/library-tests/dataflow/taint-tests/localTaint.expected +++ b/cpp/ql/test/library-tests/dataflow/taint-tests/localTaint.expected @@ -6676,6 +6676,7 @@ WARNING: Module TaintTracking has been deprecated and may be removed in future ( | taint.cpp:757:7:757:10 | path | taint.cpp:759:8:759:11 | path | | | taint.cpp:758:21:758:24 | ref arg path | taint.cpp:759:8:759:11 | path | | | taint.cpp:759:8:759:11 | path | taint.cpp:759:7:759:11 | * ... | | +| taint.cpp:769:37:769:42 | call to source | taint.cpp:770:7:770:9 | obj | | | vector.cpp:16:43:16:49 | source1 | vector.cpp:17:26:17:32 | source1 | | | vector.cpp:16:43:16:49 | source1 | vector.cpp:31:38:31:44 | source1 | | | vector.cpp:17:21:17:33 | call to vector | vector.cpp:19:14:19:14 | v | | diff --git a/cpp/ql/test/library-tests/dataflow/taint-tests/taint.cpp b/cpp/ql/test/library-tests/dataflow/taint-tests/taint.cpp index 0ba45b6f30a..1504142bdce 100644 --- a/cpp/ql/test/library-tests/dataflow/taint-tests/taint.cpp +++ b/cpp/ql/test/library-tests/dataflow/taint-tests/taint.cpp @@ -757,4 +757,15 @@ void test_call_sprintf() { char path[10]; call_sprintf_twice(path, indirect_source()); sink(*path); // $ ast,ir +} + +struct TaintInheritingContentObject { + int flowFromObject; +}; + +TaintInheritingContentObject source(bool); + +void test_TaintInheritingContent() { + TaintInheritingContentObject obj = source(true); + sink(obj.flowFromObject); // $ ir MISSING: ast } \ No newline at end of file diff --git a/cpp/ql/test/library-tests/dataflow/taint-tests/taint.ql b/cpp/ql/test/library-tests/dataflow/taint-tests/taint.ql index 56c8cd8ba68..14773027817 100644 --- a/cpp/ql/test/library-tests/dataflow/taint-tests/taint.ql +++ b/cpp/ql/test/library-tests/dataflow/taint-tests/taint.ql @@ -76,6 +76,24 @@ module AstTest { module IRTest { private import semmle.code.cpp.ir.IR private import semmle.code.cpp.ir.dataflow.TaintTracking + private import semmle.code.cpp.ir.dataflow.FlowSteps + + /** + * Object->field flow when the object is of type + * TaintInheritingContentObject and the field is named + * flowFromObject + */ + class TaintInheritingContentTest extends TaintInheritingContent, DataFlow::FieldContent { + TaintInheritingContentTest() { + exists(Struct o, Field f | + this.getField() = f and + f = o.getAField() and + o.hasGlobalName("TaintInheritingContentObject") and + f.hasName("flowFromObject") and + this.getIndirectionIndex() = 1 + ) + } + } /** Common data flow configuration to be used by tests. */ module TestAllocationConfig implements DataFlow::ConfigSig { diff --git a/cpp/ql/test/library-tests/ir/ir/PrintAST.expected b/cpp/ql/test/library-tests/ir/ir/PrintAST.expected index 87179ad8bf8..7761598e90f 100644 --- a/cpp/ql/test/library-tests/ir/ir/PrintAST.expected +++ b/cpp/ql/test/library-tests/ir/ir/PrintAST.expected @@ -1781,6 +1781,12 @@ destructors_for_temps.cpp: # 15| getQualifier(): [ConstructorCall] call to ClassWithDestructor2 # 15| Type = [VoidType] void # 15| ValueCategory = prvalue +# 15| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor2 +# 15| Type = [VoidType] void +# 15| ValueCategory = prvalue +# 15| getQualifier(): [ReuseExpr] reuse of temporary object +# 15| Type = [Class] ClassWithDestructor2 +# 15| ValueCategory = xvalue # 15| getQualifier().getFullyConverted(): [TemporaryObjectExpr] temporary object # 15| Type = [Class] ClassWithDestructor2 # 15| ValueCategory = prvalue(load) @@ -1804,6 +1810,12 @@ destructors_for_temps.cpp: # 16| getQualifier().getFullyConverted(): [TemporaryObjectExpr] temporary object # 16| Type = [Class] ClassWithDestructor2 # 16| ValueCategory = prvalue(load) +# 16| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor2 +# 16| Type = [VoidType] void +# 16| ValueCategory = prvalue +# 16| getQualifier(): [ReuseExpr] reuse of temporary object +# 16| Type = [Class] ClassWithDestructor2 +# 16| ValueCategory = xvalue # 17| getStmt(2): [ReturnStmt] return ... # 17| getExpr(): [FunctionCall] call to get_x # 17| Type = [PlainCharType] char @@ -1811,6 +1823,12 @@ destructors_for_temps.cpp: # 17| getQualifier(): [ConstructorCall] call to ClassWithDestructor2 # 17| Type = [VoidType] void # 17| ValueCategory = prvalue +# 17| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor2 +# 17| Type = [VoidType] void +# 17| ValueCategory = prvalue +# 17| getQualifier(): [ReuseExpr] reuse of temporary object +# 17| Type = [Class] ClassWithDestructor2 +# 17| ValueCategory = xvalue # 17| getQualifier().getFullyConverted(): [TemporaryObjectExpr] temporary object # 17| Type = [Class] ClassWithDestructor2 # 17| ValueCategory = prvalue(load) @@ -1846,6 +1864,18 @@ destructors_for_temps.cpp: # 23| getQualifier().getFullyConverted(): [TemporaryObjectExpr] temporary object # 23| Type = [Class] ClassWithDestructor2 # 23| ValueCategory = prvalue(load) +# 23| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor2 +# 23| Type = [VoidType] void +# 23| ValueCategory = prvalue +# 23| getQualifier(): [ReuseExpr] reuse of temporary object +# 23| Type = [Class] ClassWithDestructor2 +# 23| ValueCategory = xvalue +# 23| getImplicitDestructorCall(1): [DestructorCall] call to ~ClassWithDestructor2 +# 23| Type = [VoidType] void +# 23| ValueCategory = prvalue +# 23| getQualifier(): [ReuseExpr] reuse of temporary object +# 23| Type = [Class] ClassWithDestructor2 +# 23| ValueCategory = xvalue # 23| getLeftOperand().getFullyConverted(): [CStyleCast] (int)... # 23| Conversion = [IntegralConversion] integral conversion # 23| Type = [IntType] int @@ -1947,6 +1977,12 @@ destructors_for_temps.cpp: # 39| getElse(): [ConstructorCall] call to ClassWithDestructor2 # 39| Type = [VoidType] void # 39| ValueCategory = prvalue +# 39| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor2 +# 39| Type = [VoidType] void +# 39| ValueCategory = prvalue +# 39| getQualifier(): [ReuseExpr] reuse of temporary object +# 39| Type = [Class] ClassWithDestructor2 +# 39| ValueCategory = xvalue # 39| getThen().getFullyConverted(): [TemporaryObjectExpr] temporary object # 39| Type = [Class] ClassWithDestructor2 # 39| ValueCategory = prvalue(load) @@ -1994,7 +2030,13 @@ destructors_for_temps.cpp: # 45| getQualifier().getFullyConverted(): [TemporaryObjectExpr] temporary object # 45| Type = [Class] ClassWithDestructor2 # 45| ValueCategory = prvalue(load) -# 47| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor2 +# 45| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor2 +# 45| Type = [VoidType] void +# 45| ValueCategory = prvalue +# 45| getQualifier(): [ReuseExpr] reuse of temporary object +# 45| Type = [Class] ClassWithDestructor2 +# 45| ValueCategory = xvalue +# 47| getImplicitDestructorCall(1): [DestructorCall] call to ~ClassWithDestructor2 # 47| Type = [VoidType] void # 47| ValueCategory = prvalue # 47| getQualifier(): [VariableAccess] c @@ -2054,6 +2096,24 @@ destructors_for_temps.cpp: # 51| getElse(): [ConstructorCall] call to ClassWithDestructor2 # 51| Type = [VoidType] void # 51| ValueCategory = prvalue +# 51| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor2 +# 51| Type = [VoidType] void +# 51| ValueCategory = prvalue +# 51| getQualifier(): [ReuseExpr] reuse of temporary object +# 51| Type = [Class] ClassWithDestructor2 +# 51| ValueCategory = xvalue +# 51| getImplicitDestructorCall(1): [DestructorCall] call to ~ClassWithDestructor2 +# 51| Type = [VoidType] void +# 51| ValueCategory = prvalue +# 51| getQualifier(): [ReuseExpr] reuse of temporary object +# 51| Type = [Class] ClassWithDestructor2 +# 51| ValueCategory = xvalue +# 51| getImplicitDestructorCall(2): [DestructorCall] call to ~ClassWithDestructor2 +# 51| Type = [VoidType] void +# 51| ValueCategory = prvalue +# 51| getQualifier(): [ReuseExpr] reuse of temporary object +# 51| Type = [Class] ClassWithDestructor2 +# 51| ValueCategory = xvalue # 51| getElse().getFullyConverted(): [TemporaryObjectExpr] temporary object # 51| Type = [Class] ClassWithDestructor2 # 51| ValueCategory = prvalue(load) @@ -2101,6 +2161,24 @@ destructors_for_temps.cpp: # 55| getElse(): [ConstructorCall] call to ClassWithDestructor2 # 55| Type = [VoidType] void # 55| ValueCategory = prvalue +# 55| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor2 +# 55| Type = [VoidType] void +# 55| ValueCategory = prvalue +# 55| getQualifier(): [ReuseExpr] reuse of temporary object +# 55| Type = [Class] ClassWithDestructor2 +# 55| ValueCategory = xvalue +# 55| getImplicitDestructorCall(1): [DestructorCall] call to ~ClassWithDestructor2 +# 55| Type = [VoidType] void +# 55| ValueCategory = prvalue +# 55| getQualifier(): [ReuseExpr] reuse of temporary object +# 55| Type = [Class] ClassWithDestructor2 +# 55| ValueCategory = xvalue +# 55| getImplicitDestructorCall(2): [DestructorCall] call to ~ClassWithDestructor2 +# 55| Type = [VoidType] void +# 55| ValueCategory = prvalue +# 55| getQualifier(): [ReuseExpr] reuse of temporary object +# 55| Type = [Class] ClassWithDestructor2 +# 55| ValueCategory = xvalue # 55| getElse().getFullyConverted(): [TemporaryObjectExpr] temporary object # 55| Type = [Class] ClassWithDestructor2 # 55| ValueCategory = prvalue(load) @@ -7233,6 +7311,12 @@ ir.cpp: # 809| Conversion = [BaseClassConversion] base class conversion # 809| Type = [SpecifiedType] const Base # 809| ValueCategory = lvalue +# 809| getImplicitDestructorCall(0): [DestructorCall] call to ~Base +# 809| Type = [VoidType] void +# 809| ValueCategory = prvalue +# 809| getQualifier(): [ReuseExpr] reuse of temporary object +# 809| Type = [Struct,VirtualBaseClass] Base +# 809| ValueCategory = xvalue # 809| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) # 809| Type = [LValueReferenceType] const Base & # 809| ValueCategory = prvalue @@ -7266,6 +7350,12 @@ ir.cpp: # 810| Conversion = [BaseClassConversion] base class conversion # 810| Type = [SpecifiedType] const Base # 810| ValueCategory = lvalue +# 810| getImplicitDestructorCall(0): [DestructorCall] call to ~Base +# 810| Type = [VoidType] void +# 810| ValueCategory = prvalue +# 810| getQualifier(): [ReuseExpr] reuse of temporary object +# 810| Type = [Struct,VirtualBaseClass] Base +# 810| ValueCategory = xvalue # 810| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) # 810| Type = [LValueReferenceType] const Base & # 810| ValueCategory = prvalue @@ -7473,6 +7563,12 @@ ir.cpp: # 823| Conversion = [BaseClassConversion] base class conversion # 823| Type = [SpecifiedType] const Middle # 823| ValueCategory = lvalue +# 823| getImplicitDestructorCall(0): [DestructorCall] call to ~Base +# 823| Type = [VoidType] void +# 823| ValueCategory = prvalue +# 823| getQualifier(): [ReuseExpr] reuse of temporary object +# 823| Type = [Struct,VirtualBaseClass] Base +# 823| ValueCategory = xvalue # 823| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) # 823| Type = [LValueReferenceType] const Base & # 823| ValueCategory = prvalue @@ -7510,6 +7606,12 @@ ir.cpp: # 824| Conversion = [BaseClassConversion] base class conversion # 824| Type = [SpecifiedType] const Middle # 824| ValueCategory = lvalue +# 824| getImplicitDestructorCall(0): [DestructorCall] call to ~Base +# 824| Type = [VoidType] void +# 824| ValueCategory = prvalue +# 824| getQualifier(): [ReuseExpr] reuse of temporary object +# 824| Type = [Struct,VirtualBaseClass] Base +# 824| ValueCategory = xvalue # 824| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) # 824| Type = [LValueReferenceType] const Base & # 824| ValueCategory = prvalue @@ -8710,6 +8812,15 @@ ir.cpp: # 976| getVariableAccess(): [VariableAccess] b # 976| Type = [BoolType] bool # 976| ValueCategory = prvalue(load) +# 976| getInitializingExpr(): [LTExpr] ... < ... +# 976| Type = [BoolType] bool +# 976| ValueCategory = prvalue +# 976| getLesserOperand(): [VariableAccess] x +# 976| Type = [IntType] int +# 976| ValueCategory = prvalue(load) +# 976| getGreaterOperand(): [VariableAccess] y +# 976| Type = [IntType] int +# 976| ValueCategory = prvalue(load) # 976| getThen(): [BlockStmt] { ... } # 977| getStmt(0): [ExprStmt] ExprStmt # 977| getExpr(): [AssignExpr] ... = ... @@ -8729,6 +8840,15 @@ ir.cpp: # 979| getVariableAccess(): [VariableAccess] z # 979| Type = [IntType] int # 979| ValueCategory = prvalue(load) +# 979| getInitializingExpr(): [AddExpr] ... + ... +# 979| Type = [IntType] int +# 979| ValueCategory = prvalue +# 979| getLeftOperand(): [VariableAccess] x +# 979| Type = [IntType] int +# 979| ValueCategory = prvalue(load) +# 979| getRightOperand(): [VariableAccess] y +# 979| Type = [IntType] int +# 979| ValueCategory = prvalue(load) # 979| getVariableAccess().getFullyConverted(): [CStyleCast] (bool)... # 979| Conversion = [BoolConversion] conversion to bool # 979| Type = [BoolType] bool @@ -8752,6 +8872,12 @@ ir.cpp: # 982| getVariableAccess(): [VariableAccess] p # 982| Type = [IntPointerType] int * # 982| ValueCategory = prvalue(load) +# 982| getInitializingExpr(): [AddressOfExpr] & ... +# 982| Type = [IntPointerType] int * +# 982| ValueCategory = prvalue +# 982| getOperand(): [VariableAccess] x +# 982| Type = [IntType] int +# 982| ValueCategory = lvalue # 982| getVariableAccess().getFullyConverted(): [CStyleCast] (bool)... # 982| Conversion = [BoolConversion] conversion to bool # 982| Type = [BoolType] bool @@ -8786,6 +8912,15 @@ ir.cpp: # 988| getVariableAccess(): [VariableAccess] b # 988| Type = [BoolType] bool # 988| ValueCategory = prvalue(load) +# 988| getInitializingExpr(): [LTExpr] ... < ... +# 988| Type = [BoolType] bool +# 988| ValueCategory = prvalue +# 988| getLesserOperand(): [VariableAccess] x +# 988| Type = [IntType] int +# 988| ValueCategory = prvalue(load) +# 988| getGreaterOperand(): [VariableAccess] y +# 988| Type = [IntType] int +# 988| ValueCategory = prvalue(load) # 988| getStmt(): [BlockStmt] { ... } # 990| getStmt(1): [WhileStmt] while (...) ... # 990| getCondition(): [ConditionDeclExpr] (condition decl) @@ -8794,6 +8929,15 @@ ir.cpp: # 990| getVariableAccess(): [VariableAccess] z # 990| Type = [IntType] int # 990| ValueCategory = prvalue(load) +# 990| getInitializingExpr(): [AddExpr] ... + ... +# 990| Type = [IntType] int +# 990| ValueCategory = prvalue +# 990| getLeftOperand(): [VariableAccess] x +# 990| Type = [IntType] int +# 990| ValueCategory = prvalue(load) +# 990| getRightOperand(): [VariableAccess] y +# 990| Type = [IntType] int +# 990| ValueCategory = prvalue(load) # 990| getVariableAccess().getFullyConverted(): [CStyleCast] (bool)... # 990| Conversion = [BoolConversion] conversion to bool # 990| Type = [BoolType] bool @@ -8806,6 +8950,12 @@ ir.cpp: # 992| getVariableAccess(): [VariableAccess] p # 992| Type = [IntPointerType] int * # 992| ValueCategory = prvalue(load) +# 992| getInitializingExpr(): [AddressOfExpr] & ... +# 992| Type = [IntPointerType] int * +# 992| ValueCategory = prvalue +# 992| getOperand(): [VariableAccess] x +# 992| Type = [IntType] int +# 992| ValueCategory = lvalue # 992| getVariableAccess().getFullyConverted(): [CStyleCast] (bool)... # 992| Conversion = [BoolConversion] conversion to bool # 992| Type = [BoolType] bool @@ -8918,11 +9068,11 @@ ir.cpp: # 1016| getExpr(): [DeleteExpr] delete # 1016| Type = [VoidType] void # 1016| ValueCategory = prvalue -# 1016| getExpr(): [Literal] 0 +# 1016| getExprWithReuse(): [Literal] 0 # 1016| Type = [NullPointerType] decltype(nullptr) # 1016| Value = [Literal] 0 # 1016| ValueCategory = prvalue -# 1016| getExpr().getFullyConverted(): [StaticCast] static_cast... +# 1016| getExprWithReuse().getFullyConverted(): [StaticCast] static_cast... # 1016| Conversion = [PointerConversion] pointer conversion # 1016| Type = [IntPointerType] int * # 1016| Value = [StaticCast] 0 @@ -8943,6 +9093,9 @@ ir.cpp: # 1017| Type = [PointerType] String * # 1017| Value = [StaticCast] 0 # 1017| ValueCategory = prvalue +# 1017| getExprWithReuse(): [ReuseExpr] reuse of static_cast... +# 1017| Type = [PointerType] String * +# 1017| ValueCategory = prvalue # 1018| getStmt(2): [ExprStmt] ExprStmt # 1018| getExpr(): [DeleteExpr] delete # 1018| Type = [VoidType] void @@ -8950,11 +9103,11 @@ ir.cpp: # 1018| getDeallocatorCall(): [FunctionCall] call to operator delete # 1018| Type = [VoidType] void # 1018| ValueCategory = prvalue -# 1018| getExpr(): [Literal] 0 +# 1018| getExprWithReuse(): [Literal] 0 # 1018| Type = [NullPointerType] decltype(nullptr) # 1018| Value = [Literal] 0 # 1018| ValueCategory = prvalue -# 1018| getExpr().getFullyConverted(): [StaticCast] static_cast... +# 1018| getExprWithReuse().getFullyConverted(): [StaticCast] static_cast... # 1018| Conversion = [PointerConversion] pointer conversion # 1018| Type = [PointerType] SizedDealloc * # 1018| Value = [StaticCast] 0 @@ -8963,11 +9116,11 @@ ir.cpp: # 1019| getExpr(): [DeleteExpr] delete # 1019| Type = [VoidType] void # 1019| ValueCategory = prvalue -# 1019| getExpr(): [Literal] 0 +# 1019| getExprWithReuse(): [Literal] 0 # 1019| Type = [NullPointerType] decltype(nullptr) # 1019| Value = [Literal] 0 # 1019| ValueCategory = prvalue -# 1019| getExpr().getFullyConverted(): [StaticCast] static_cast... +# 1019| getExprWithReuse().getFullyConverted(): [StaticCast] static_cast... # 1019| Conversion = [PointerConversion] pointer conversion # 1019| Type = [PointerType] Overaligned * # 1019| Value = [StaticCast] 0 @@ -8988,6 +9141,9 @@ ir.cpp: # 1020| Type = [PointerType] PolymorphicBase * # 1020| Value = [StaticCast] 0 # 1020| ValueCategory = prvalue +# 1020| getExprWithReuse(): [ReuseExpr] reuse of static_cast... +# 1020| Type = [PointerType] PolymorphicBase * +# 1020| ValueCategory = prvalue # 1021| getStmt(5): [ReturnStmt] return ... # 1024| [TopLevelFunction] void OperatorDeleteArray() # 1024| : @@ -8996,11 +9152,11 @@ ir.cpp: # 1025| getExpr(): [DeleteArrayExpr] delete[] # 1025| Type = [VoidType] void # 1025| ValueCategory = prvalue -# 1025| getExpr(): [Literal] 0 +# 1025| getExprWithReuse(): [Literal] 0 # 1025| Type = [NullPointerType] decltype(nullptr) # 1025| Value = [Literal] 0 # 1025| ValueCategory = prvalue -# 1025| getExpr().getFullyConverted(): [StaticCast] static_cast... +# 1025| getExprWithReuse().getFullyConverted(): [StaticCast] static_cast... # 1025| Conversion = [PointerConversion] pointer conversion # 1025| Type = [IntPointerType] int * # 1025| Value = [StaticCast] 0 @@ -9021,6 +9177,9 @@ ir.cpp: # 1026| Type = [PointerType] String * # 1026| Value = [StaticCast] 0 # 1026| ValueCategory = prvalue +# 1026| getExprWithReuse(): [ReuseExpr] reuse of static_cast... +# 1026| Type = [PointerType] String * +# 1026| ValueCategory = prvalue # 1027| getStmt(2): [ExprStmt] ExprStmt # 1027| getExpr(): [DeleteArrayExpr] delete[] # 1027| Type = [VoidType] void @@ -9028,11 +9187,11 @@ ir.cpp: # 1027| getDeallocatorCall(): [FunctionCall] call to operator delete[] # 1027| Type = [VoidType] void # 1027| ValueCategory = prvalue -# 1027| getExpr(): [Literal] 0 +# 1027| getExprWithReuse(): [Literal] 0 # 1027| Type = [NullPointerType] decltype(nullptr) # 1027| Value = [Literal] 0 # 1027| ValueCategory = prvalue -# 1027| getExpr().getFullyConverted(): [StaticCast] static_cast... +# 1027| getExprWithReuse().getFullyConverted(): [StaticCast] static_cast... # 1027| Conversion = [PointerConversion] pointer conversion # 1027| Type = [PointerType] SizedDealloc * # 1027| Value = [StaticCast] 0 @@ -9041,11 +9200,11 @@ ir.cpp: # 1028| getExpr(): [DeleteArrayExpr] delete[] # 1028| Type = [VoidType] void # 1028| ValueCategory = prvalue -# 1028| getExpr(): [Literal] 0 +# 1028| getExprWithReuse(): [Literal] 0 # 1028| Type = [NullPointerType] decltype(nullptr) # 1028| Value = [Literal] 0 # 1028| ValueCategory = prvalue -# 1028| getExpr().getFullyConverted(): [StaticCast] static_cast... +# 1028| getExprWithReuse().getFullyConverted(): [StaticCast] static_cast... # 1028| Conversion = [PointerConversion] pointer conversion # 1028| Type = [PointerType] Overaligned * # 1028| Value = [StaticCast] 0 @@ -9066,6 +9225,9 @@ ir.cpp: # 1029| Type = [PointerType] PolymorphicBase * # 1029| Value = [StaticCast] 0 # 1029| ValueCategory = prvalue +# 1029| getExprWithReuse(): [ReuseExpr] reuse of static_cast... +# 1029| Type = [PointerType] PolymorphicBase * +# 1029| ValueCategory = prvalue # 1030| getStmt(5): [ReturnStmt] return ... # 1032| [CopyAssignmentOperator] EmptyStruct& EmptyStruct::operator=(EmptyStruct const&) # 1032| : @@ -9770,6 +9932,10 @@ ir.cpp: # 1078| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const iterator & +# 1078| [CopyAssignmentOperator] std::iterator& std::iterator::operator=(std::iterator const&) +# 1078| : +#-----| getParameter(0): [Parameter] (unnamed parameter 0) +#-----| Type = [LValueReferenceType] const iterator & # 1078| [CopyAssignmentOperator] std::iterator& std::iterator::operator=(std::iterator const&) # 1078| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) @@ -9788,6 +9954,10 @@ ir.cpp: # 1082| : # 1082| getParameter(0): [Parameter] other # 1082| Type = [LValueReferenceType] const iterator & +# 1082| [CopyConstructor] void std::iterator::iterator(std::iterator const&) +# 1082| : +# 1082| getParameter(0): [Parameter] other +# 1082| Type = [LValueReferenceType] const iterator & # 1082| [CopyConstructor] void std::iterator::iterator(std::iterator const&) # 1082| : # 1082| getParameter(0): [Parameter] other @@ -9798,6 +9968,8 @@ ir.cpp: # 1084| : # 1084| [MemberFunction] std::iterator& std::iterator::operator++() # 1084| : +# 1084| [MemberFunction] std::iterator& std::iterator::operator++() +# 1084| : # 1084| [MemberFunction] std::iterator& std::iterator::operator++() # 1084| : # 1085| [MemberFunction] std::iterator std::iterator::operator++(int) @@ -9826,6 +9998,10 @@ ir.cpp: # 1089| : # 1089| getParameter(0): [Parameter] other # 1089| Type = [ClassTemplateInstantiation,Struct] iterator +# 1089| [ConstMemberFunction] bool std::iterator::operator!=(std::iterator) const +# 1089| : +# 1089| getParameter(0): [Parameter] other +# 1089| Type = [ClassTemplateInstantiation,Struct] iterator # 1089| [ConstMemberFunction] bool std::iterator::operator!=(std::iterator) const # 1089| : # 1089| getParameter(0): [Parameter] other @@ -9834,6 +10010,8 @@ ir.cpp: # 1090| : # 1090| [ConstMemberFunction] String& std::iterator::operator*() const # 1090| : +# 1090| [ConstMemberFunction] char& std::iterator::operator*() const +# 1090| : # 1090| [ConstMemberFunction] int& std::iterator::operator*() const # 1090| : # 1090| [ConstMemberFunction] reference_type std::iterator::operator*() const @@ -9918,6 +10096,10 @@ ir.cpp: # 1108| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const vector & +# 1108| [CopyAssignmentOperator] std::vector& std::vector::operator=(std::vector const&) +# 1108| : +#-----| getParameter(0): [Parameter] (unnamed parameter 0) +#-----| Type = [LValueReferenceType] const vector & # 1108| [CopyAssignmentOperator] std::vector& std::vector::operator=(std::vector const&) # 1108| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) @@ -9930,6 +10112,10 @@ ir.cpp: # 1108| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const vector & +# 1108| [CopyConstructor] void std::vector::vector(std::vector const&) +# 1108| : +#-----| getParameter(0): [Parameter] (unnamed parameter 0) +#-----| Type = [LValueReferenceType] const vector & # 1108| [CopyConstructor] void std::vector::vector(std::vector const&) # 1108| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) @@ -9946,6 +10132,10 @@ ir.cpp: # 1109| : # 1109| getParameter(0): [Parameter] (unnamed parameter 0) # 1109| Type = [TemplateParameter] T +# 1109| [Constructor] void std::vector::vector(char) +# 1109| : +# 1109| getParameter(0): [Parameter] (unnamed parameter 0) +# 1109| Type = [PlainCharType] char # 1109| [Constructor] void std::vector::vector(int) # 1109| : # 1109| getParameter(0): [Parameter] (unnamed parameter 0) @@ -9962,6 +10152,8 @@ ir.cpp: # 1115| : # 1115| [ConstMemberFunction] std::vector::iterator std::vector::begin() const # 1115| : +# 1115| [ConstMemberFunction] std::vector::iterator std::vector::begin() const +# 1115| : # 1115| [ConstMemberFunction] std::vector::iterator std::vector::begin() const # 1115| : # 1116| [ConstMemberFunction] std::vector::iterator std::vector::end() const @@ -9970,6 +10162,8 @@ ir.cpp: # 1116| : # 1116| [ConstMemberFunction] std::vector::iterator std::vector::end() const # 1116| : +# 1116| [ConstMemberFunction] std::vector::iterator std::vector::end() const +# 1116| : # 1116| [ConstMemberFunction] std::vector::iterator std::vector::end() const # 1116| : # 1120| [Operator,TemplateFunction,TopLevelFunction] bool std::operator==(iterator, iterator) @@ -11673,6 +11867,12 @@ ir.cpp: # 1419| getArgument(0).getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion # 1419| Type = [PointerType] const char * # 1419| ValueCategory = prvalue +# 1419| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 1419| Type = [VoidType] void +# 1419| ValueCategory = prvalue +# 1419| getQualifier(): [ReuseExpr] reuse of temporary object +# 1419| Type = [SpecifiedType] const String +# 1419| ValueCategory = xvalue # 1419| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) # 1419| Type = [LValueReferenceType] const String & # 1419| ValueCategory = prvalue @@ -11696,6 +11896,12 @@ ir.cpp: # 1420| Conversion = [GlvalueConversion] glvalue conversion # 1420| Type = [SpecifiedType] const String # 1420| ValueCategory = lvalue +# 1420| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 1420| Type = [VoidType] void +# 1420| ValueCategory = prvalue +# 1420| getQualifier(): [ReuseExpr] reuse of temporary object +# 1420| Type = [Struct] String +# 1420| ValueCategory = xvalue # 1420| getArgument(0).getFullyConverted(): [TemporaryObjectExpr] temporary object # 1420| Type = [Struct] String # 1420| ValueCategory = lvalue @@ -11713,6 +11919,12 @@ ir.cpp: # 1421| getArgument(0).getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion # 1421| Type = [PointerType] const char * # 1421| ValueCategory = prvalue +# 1421| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 1421| Type = [VoidType] void +# 1421| ValueCategory = prvalue +# 1421| getQualifier(): [ReuseExpr] reuse of temporary object +# 1421| Type = [Struct] String +# 1421| ValueCategory = xvalue # 1421| getArgument(0).getFullyConverted(): [TemporaryObjectExpr] temporary object # 1421| Type = [Struct] String # 1421| ValueCategory = lvalue @@ -11723,6 +11935,12 @@ ir.cpp: # 1422| getQualifier(): [ConstructorCall] call to String # 1422| Type = [VoidType] void # 1422| ValueCategory = prvalue +# 1422| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 1422| Type = [VoidType] void +# 1422| ValueCategory = prvalue +# 1422| getQualifier(): [ReuseExpr] reuse of temporary object +# 1422| Type = [Struct] String +# 1422| ValueCategory = xvalue # 1422| getQualifier().getFullyConverted(): [CStyleCast] (const String)... # 1422| Conversion = [PrvalueAdjustmentConversion] prvalue adjustment conversion # 1422| Type = [SpecifiedType] const String @@ -11737,6 +11955,12 @@ ir.cpp: # 1423| getQualifier(): [FunctionCall] call to returnValue # 1423| Type = [Struct] String # 1423| ValueCategory = prvalue +# 1423| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 1423| Type = [VoidType] void +# 1423| ValueCategory = prvalue +# 1423| getQualifier(): [ReuseExpr] reuse of temporary object +# 1423| Type = [Struct] String +# 1423| ValueCategory = xvalue # 1423| getQualifier().getFullyConverted(): [CStyleCast] (const String)... # 1423| Conversion = [PrvalueAdjustmentConversion] prvalue adjustment conversion # 1423| Type = [SpecifiedType] const String @@ -11748,6 +11972,12 @@ ir.cpp: # 1425| getExpr(): [FunctionCall] call to defaultConstruct # 1425| Type = [Struct] String # 1425| ValueCategory = prvalue +# 1425| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 1425| Type = [VoidType] void +# 1425| ValueCategory = prvalue +# 1425| getQualifier(): [ReuseExpr] reuse of temporary object +# 1425| Type = [Struct] String +# 1425| ValueCategory = xvalue # 1425| getExpr().getFullyConverted(): [TemporaryObjectExpr] temporary object # 1425| Type = [Struct] String # 1425| ValueCategory = prvalue @@ -11815,6 +12045,12 @@ ir.cpp: # 1433| getArgument(0): [VariableAccess] d # 1433| Type = [Class] destructor_only # 1433| ValueCategory = prvalue(load) +# 1433| getImplicitDestructorCall(0): [DestructorCall] call to ~destructor_only +# 1433| Type = [VoidType] void +# 1433| ValueCategory = prvalue +# 1433| getQualifier(): [ReuseExpr] reuse of temporary object +# 1433| Type = [Class] destructor_only +# 1433| ValueCategory = xvalue # 1433| getArgument(0).getFullyConverted(): [TemporaryObjectExpr] temporary object # 1433| Type = [Class] destructor_only # 1433| ValueCategory = lvalue @@ -11826,6 +12062,12 @@ ir.cpp: # 1434| Type = [Class] destructor_only # 1434| Value = [Literal] 0 # 1434| ValueCategory = prvalue +# 1434| getImplicitDestructorCall(0): [DestructorCall] call to ~destructor_only +# 1434| Type = [VoidType] void +# 1434| ValueCategory = prvalue +# 1434| getQualifier(): [ReuseExpr] reuse of temporary object +# 1434| Type = [Class] destructor_only +# 1434| ValueCategory = xvalue # 1434| getQualifier().getFullyConverted(): [TemporaryObjectExpr] temporary object # 1434| Type = [Class] destructor_only # 1434| ValueCategory = prvalue(load) @@ -11836,6 +12078,12 @@ ir.cpp: # 1435| getQualifier(): [FunctionCall] call to returnValue # 1435| Type = [Class] destructor_only # 1435| ValueCategory = prvalue +# 1435| getImplicitDestructorCall(0): [DestructorCall] call to ~destructor_only +# 1435| Type = [VoidType] void +# 1435| ValueCategory = prvalue +# 1435| getQualifier(): [ReuseExpr] reuse of temporary object +# 1435| Type = [Class] destructor_only +# 1435| ValueCategory = xvalue # 1435| getQualifier().getFullyConverted(): [TemporaryObjectExpr] temporary object # 1435| Type = [Class] destructor_only # 1435| ValueCategory = prvalue(load) @@ -11843,6 +12091,12 @@ ir.cpp: # 1437| getExpr(): [FunctionCall] call to defaultConstruct # 1437| Type = [Class] destructor_only # 1437| ValueCategory = prvalue +# 1437| getImplicitDestructorCall(0): [DestructorCall] call to ~destructor_only +# 1437| Type = [VoidType] void +# 1437| ValueCategory = prvalue +# 1437| getQualifier(): [ReuseExpr] reuse of temporary object +# 1437| Type = [Class] destructor_only +# 1437| ValueCategory = xvalue # 1437| getExpr().getFullyConverted(): [TemporaryObjectExpr] temporary object # 1437| Type = [Class] destructor_only # 1437| ValueCategory = prvalue @@ -14586,6 +14840,9 @@ ir.cpp: # 1816| getVariableAccess(): [VariableAccess] w2 # 1816| Type = [IntType] int # 1816| ValueCategory = prvalue(load) +# 1816| getInitializingExpr(): [VariableAccess] w +# 1816| Type = [IntType] int +# 1816| ValueCategory = prvalue(load) # 1816| getVariableAccess().getFullyConverted(): [CStyleCast] (bool)... # 1816| Conversion = [BoolConversion] conversion to bool # 1816| Type = [BoolType] bool @@ -14621,6 +14878,9 @@ ir.cpp: # 1820| getVariableAccess(): [VariableAccess] v2 # 1820| Type = [IntType] int # 1820| ValueCategory = prvalue(load) +# 1820| getInitializingExpr(): [VariableAccess] v +# 1820| Type = [IntType] int +# 1820| ValueCategory = prvalue(load) # 1820| getVariableAccess().getFullyConverted(): [CStyleCast] (bool)... # 1820| Conversion = [BoolConversion] conversion to bool # 1820| Type = [BoolType] bool @@ -14681,6 +14941,9 @@ ir.cpp: # 1829| getVariableAccess(): [VariableAccess] z2 # 1829| Type = [IntType] int # 1829| ValueCategory = prvalue(load) +# 1829| getInitializingExpr(): [VariableAccess] z +# 1829| Type = [IntType] int +# 1829| ValueCategory = prvalue(load) # 1829| getVariableAccess().getFullyConverted(): [CStyleCast] (bool)... # 1829| Conversion = [BoolConversion] conversion to bool # 1829| Type = [BoolType] bool @@ -14797,6 +15060,9 @@ ir.cpp: # 1846| getVariableAccess(): [VariableAccess] w2 # 1846| Type = [IntType] int # 1846| ValueCategory = prvalue(load) +# 1846| getInitializingExpr(): [VariableAccess] w +# 1846| Type = [IntType] int +# 1846| ValueCategory = prvalue(load) # 1846| getStmt(): [BlockStmt] { ... } # 1847| getStmt(0): [SwitchCase] default: # 1848| getStmt(1): [ExprStmt] ExprStmt @@ -14829,6 +15095,9 @@ ir.cpp: # 1851| getVariableAccess(): [VariableAccess] v2 # 1851| Type = [IntType] int # 1851| ValueCategory = prvalue(load) +# 1851| getInitializingExpr(): [VariableAccess] v +# 1851| Type = [IntType] int +# 1851| ValueCategory = prvalue(load) # 1851| getStmt(): [BlockStmt] { ... } # 1852| getStmt(0): [SwitchCase] default: # 1853| getStmt(1): [ExprStmt] ExprStmt @@ -14883,6 +15152,9 @@ ir.cpp: # 1862| getVariableAccess(): [VariableAccess] z2 # 1862| Type = [IntType] int # 1862| ValueCategory = prvalue(load) +# 1862| getInitializingExpr(): [VariableAccess] z +# 1862| Type = [IntType] int +# 1862| ValueCategory = prvalue(load) # 1862| getStmt(): [BlockStmt] { ... } # 1863| getStmt(0): [SwitchCase] default: # 1864| getStmt(1): [ExprStmt] ExprStmt @@ -15345,773 +15617,821 @@ ir.cpp: # 1934| Type = [ClassTemplateInstantiation,Struct] Bar2 # 1934| ValueCategory = lvalue # 1935| getStmt(2): [ReturnStmt] return ... -# 1938| [GlobalVariable] char global_template -# 1938| getInitializer(): [Initializer] initializer for global_template -# 1938| getExpr(): [Literal] 42 -# 1938| Type = [IntType] int -# 1938| Value = [Literal] 42 -# 1938| ValueCategory = prvalue -# 1938| getExpr().getFullyConverted(): [CStyleCast] (char)... -# 1938| Conversion = [IntegralConversion] integral conversion -# 1938| Type = [PlainCharType] char -# 1938| Value = [CStyleCast] 42 -# 1938| ValueCategory = prvalue -# 1938| [GlobalVariable] int global_template -# 1938| getInitializer(): [Initializer] initializer for global_template -# 1938| getExpr(): [Literal] 42 -# 1938| Type = [IntType] int -# 1938| Value = [Literal] 42 -# 1938| ValueCategory = prvalue -# 1940| [TopLevelFunction] int test_global_template_int() -# 1940| : -# 1940| getEntryPoint(): [BlockStmt] { ... } -# 1941| getStmt(0): [DeclStmt] declaration -# 1941| getDeclarationEntry(0): [VariableDeclarationEntry] definition of local_int +# 1937| [CopyAssignmentOperator] missing_declaration_entries::Bar3& missing_declaration_entries::Bar3::operator=(missing_declaration_entries::Bar3 const&) +# 1937| : +#-----| getParameter(0): [Parameter] (unnamed parameter 0) +#-----| Type = [LValueReferenceType] const Bar3 & +# 1937| [MoveAssignmentOperator] missing_declaration_entries::Bar3& missing_declaration_entries::Bar3::operator=(missing_declaration_entries::Bar3&&) +# 1937| : +#-----| getParameter(0): [Parameter] (unnamed parameter 0) +#-----| Type = [RValueReferenceType] Bar3 && +# 1939| [MemberFunction] int missing_declaration_entries::Bar3::two_more_missing_variable_declaration_entries() +# 1939| : +# 1939| getEntryPoint(): [BlockStmt] { ... } +# 1940| getStmt(0): [DeclStmt] declaration +# 1940| getDeclarationEntry(0): [VariableDeclarationEntry] declaration of g +# 1940| Type = [IntType] int +# 1941| getStmt(1): [DeclStmt] declaration +# 1941| getDeclarationEntry(0): [FunctionDeclarationEntry] declaration of z # 1941| Type = [IntType] int -# 1941| getVariable().getInitializer(): [Initializer] initializer for local_int -# 1941| getExpr(): [VariableAccess] global_template -# 1941| Type = [IntType] int -# 1941| ValueCategory = prvalue(load) -# 1942| getStmt(1): [DeclStmt] declaration -# 1942| getDeclarationEntry(0): [VariableDeclarationEntry] definition of local_char -# 1942| Type = [PlainCharType] char -# 1942| getVariable().getInitializer(): [Initializer] initializer for local_char -# 1942| getExpr(): [VariableAccess] global_template -# 1942| Type = [PlainCharType] char -# 1942| ValueCategory = prvalue(load) -# 1943| getStmt(2): [ReturnStmt] return ... -# 1943| getExpr(): [AddExpr] ... + ... -# 1943| Type = [IntType] int -# 1943| ValueCategory = prvalue -# 1943| getLeftOperand(): [VariableAccess] local_int -# 1943| Type = [IntType] int -# 1943| ValueCategory = prvalue(load) -# 1943| getRightOperand(): [VariableAccess] local_char -# 1943| Type = [PlainCharType] char -# 1943| ValueCategory = prvalue(load) -# 1943| getRightOperand().getFullyConverted(): [CStyleCast] (int)... -# 1943| Conversion = [IntegralConversion] integral conversion -# 1943| Type = [IntType] int -# 1943| ValueCategory = prvalue -# 1946| [TopLevelFunction] void noreturnFunc() +# 1942| getStmt(2): [ReturnStmt] return ... +# 1942| getExpr(): [VariableAccess] g +# 1942| Type = [IntType] int +# 1942| ValueCategory = prvalue(load) +# 1939| [MemberFunction] int missing_declaration_entries::Bar3::two_more_missing_variable_declaration_entries() +# 1939| : +# 1939| getEntryPoint(): [BlockStmt] { ... } +# 1940| getStmt(0): [DeclStmt] declaration +# 1941| getStmt(1): [DeclStmt] declaration +# 1942| getStmt(2): [ReturnStmt] return ... +# 1942| getExpr(): [VariableAccess] g +# 1942| Type = [IntType] int +# 1942| ValueCategory = prvalue(load) +# 1941| [TopLevelFunction] int missing_declaration_entries::z(float) +# 1941| : +# 1941| getParameter(0): [Parameter] (unnamed parameter 0) +# 1941| Type = [FloatType] float +# 1946| [TopLevelFunction] void missing_declaration_entries::test3() # 1946| : -# 1948| [TopLevelFunction] int noreturnTest(int) -# 1948| : -# 1948| getParameter(0): [Parameter] x -# 1948| Type = [IntType] int -# 1948| getEntryPoint(): [BlockStmt] { ... } -# 1949| getStmt(0): [IfStmt] if (...) ... -# 1949| getCondition(): [LTExpr] ... < ... -# 1949| Type = [BoolType] bool -# 1949| ValueCategory = prvalue -# 1949| getLesserOperand(): [VariableAccess] x -# 1949| Type = [IntType] int -# 1949| ValueCategory = prvalue(load) -# 1949| getGreaterOperand(): [Literal] 10 -# 1949| Type = [IntType] int -# 1949| Value = [Literal] 10 -# 1949| ValueCategory = prvalue -# 1949| getThen(): [BlockStmt] { ... } -# 1950| getStmt(0): [ReturnStmt] return ... -# 1950| getExpr(): [VariableAccess] x -# 1950| Type = [IntType] int -# 1950| ValueCategory = prvalue(load) -# 1951| getElse(): [BlockStmt] { ... } -# 1952| getStmt(0): [ExprStmt] ExprStmt -# 1952| getExpr(): [FunctionCall] call to noreturnFunc -# 1952| Type = [VoidType] void -# 1952| ValueCategory = prvalue -# 1954| getStmt(1): [ReturnStmt] return ... -# 1956| [TopLevelFunction] int noreturnTest2(int) -# 1956| : -# 1956| getParameter(0): [Parameter] x -# 1956| Type = [IntType] int -# 1956| getEntryPoint(): [BlockStmt] { ... } -# 1957| getStmt(0): [IfStmt] if (...) ... -# 1957| getCondition(): [LTExpr] ... < ... -# 1957| Type = [BoolType] bool +# 1946| getEntryPoint(): [BlockStmt] { ... } +# 1947| getStmt(0): [DeclStmt] declaration +# 1947| getDeclarationEntry(0): [VariableDeclarationEntry] definition of b +# 1947| Type = [ClassTemplateInstantiation,Struct] Bar3 +# 1948| getStmt(1): [ExprStmt] ExprStmt +# 1948| getExpr(): [FunctionCall] call to two_more_missing_variable_declaration_entries +# 1948| Type = [IntType] int +# 1948| ValueCategory = prvalue +# 1948| getQualifier(): [VariableAccess] b +# 1948| Type = [ClassTemplateInstantiation,Struct] Bar3 +# 1948| ValueCategory = lvalue +# 1949| getStmt(2): [ReturnStmt] return ... +# 1952| [GlobalVariable,VariableTemplateInstantiation] char global_template +# 1952| getInitializer(): [Initializer] initializer for global_template +# 1952| getExpr(): [Literal] 42 +# 1952| Type = [IntType] int +# 1952| Value = [Literal] 42 +# 1952| ValueCategory = prvalue +# 1952| getExpr().getFullyConverted(): [CStyleCast] (char)... +# 1952| Conversion = [IntegralConversion] integral conversion +# 1952| Type = [PlainCharType] char +# 1952| Value = [CStyleCast] 42 +# 1952| ValueCategory = prvalue +# 1952| [GlobalVariable,VariableTemplateInstantiation] int global_template +# 1952| getInitializer(): [Initializer] initializer for global_template +# 1952| getExpr(): [Literal] 42 +# 1952| Type = [IntType] int +# 1952| Value = [Literal] 42 +# 1952| ValueCategory = prvalue +# 1954| [TopLevelFunction] int test_global_template_int() +# 1954| : +# 1954| getEntryPoint(): [BlockStmt] { ... } +# 1955| getStmt(0): [DeclStmt] declaration +# 1955| getDeclarationEntry(0): [VariableDeclarationEntry] definition of local_int +# 1955| Type = [IntType] int +# 1955| getVariable().getInitializer(): [Initializer] initializer for local_int +# 1955| getExpr(): [VariableAccess] global_template +# 1955| Type = [IntType] int +# 1955| ValueCategory = prvalue(load) +# 1956| getStmt(1): [DeclStmt] declaration +# 1956| getDeclarationEntry(0): [VariableDeclarationEntry] definition of local_char +# 1956| Type = [PlainCharType] char +# 1956| getVariable().getInitializer(): [Initializer] initializer for local_char +# 1956| getExpr(): [VariableAccess] global_template +# 1956| Type = [PlainCharType] char +# 1956| ValueCategory = prvalue(load) +# 1957| getStmt(2): [ReturnStmt] return ... +# 1957| getExpr(): [AddExpr] ... + ... +# 1957| Type = [IntType] int # 1957| ValueCategory = prvalue -# 1957| getLesserOperand(): [VariableAccess] x +# 1957| getLeftOperand(): [VariableAccess] local_int # 1957| Type = [IntType] int # 1957| ValueCategory = prvalue(load) -# 1957| getGreaterOperand(): [Literal] 10 +# 1957| getRightOperand(): [VariableAccess] local_char +# 1957| Type = [PlainCharType] char +# 1957| ValueCategory = prvalue(load) +# 1957| getRightOperand().getFullyConverted(): [CStyleCast] (int)... +# 1957| Conversion = [IntegralConversion] integral conversion # 1957| Type = [IntType] int -# 1957| Value = [Literal] 10 # 1957| ValueCategory = prvalue -# 1957| getThen(): [BlockStmt] { ... } -# 1958| getStmt(0): [ExprStmt] ExprStmt -# 1958| getExpr(): [FunctionCall] call to noreturnFunc -# 1958| Type = [VoidType] void -# 1958| ValueCategory = prvalue -# 1960| getStmt(1): [ReturnStmt] return ... -# 1960| getExpr(): [VariableAccess] x -# 1960| Type = [IntType] int -# 1960| ValueCategory = prvalue(load) -# 1963| [TopLevelFunction] int static_function(int) -# 1963| : -# 1963| getParameter(0): [Parameter] x -# 1963| Type = [IntType] int -# 1963| getEntryPoint(): [BlockStmt] { ... } -# 1964| getStmt(0): [ReturnStmt] return ... -# 1964| getExpr(): [VariableAccess] x -# 1964| Type = [IntType] int -# 1964| ValueCategory = prvalue(load) -# 1967| [TopLevelFunction] void test_static_functions_with_assignments() -# 1967| : -# 1967| getEntryPoint(): [BlockStmt] { ... } -# 1968| getStmt(0): [DeclStmt] declaration -# 1968| getDeclarationEntry(0): [VariableDeclarationEntry] definition of c -# 1968| Type = [Class] C -# 1968| getVariable().getInitializer(): [Initializer] initializer for c -# 1968| getExpr(): [ConstructorCall] call to C -# 1968| Type = [VoidType] void -# 1968| ValueCategory = prvalue -# 1969| getStmt(1): [DeclStmt] declaration -# 1969| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x -# 1969| Type = [IntType] int -# 1970| getStmt(2): [ExprStmt] ExprStmt -# 1970| getExpr(): [AssignExpr] ... = ... -# 1970| Type = [IntType] int -# 1970| ValueCategory = lvalue -# 1970| getLValue(): [VariableAccess] x -# 1970| Type = [IntType] int -# 1970| ValueCategory = lvalue -# 1970| getRValue(): [FunctionCall] call to StaticMemberFunction -# 1970| Type = [IntType] int -# 1970| ValueCategory = prvalue -# 1970| getQualifier(): [VariableAccess] c -# 1970| Type = [Class] C -# 1970| ValueCategory = lvalue -# 1970| getArgument(0): [Literal] 10 -# 1970| Type = [IntType] int -# 1970| Value = [Literal] 10 -# 1970| ValueCategory = prvalue -# 1971| getStmt(3): [DeclStmt] declaration -# 1971| getDeclarationEntry(0): [VariableDeclarationEntry] definition of y -# 1971| Type = [IntType] int -# 1972| getStmt(4): [ExprStmt] ExprStmt -# 1972| getExpr(): [AssignExpr] ... = ... -# 1972| Type = [IntType] int -# 1972| ValueCategory = lvalue -# 1972| getLValue(): [VariableAccess] y -# 1972| Type = [IntType] int -# 1972| ValueCategory = lvalue -# 1972| getRValue(): [FunctionCall] call to StaticMemberFunction -# 1972| Type = [IntType] int -# 1972| ValueCategory = prvalue -# 1972| getArgument(0): [Literal] 10 -# 1972| Type = [IntType] int -# 1972| Value = [Literal] 10 +# 1960| [TopLevelFunction] void noreturnFunc() +# 1960| : +# 1962| [TopLevelFunction] int noreturnTest(int) +# 1962| : +# 1962| getParameter(0): [Parameter] x +# 1962| Type = [IntType] int +# 1962| getEntryPoint(): [BlockStmt] { ... } +# 1963| getStmt(0): [IfStmt] if (...) ... +# 1963| getCondition(): [LTExpr] ... < ... +# 1963| Type = [BoolType] bool +# 1963| ValueCategory = prvalue +# 1963| getLesserOperand(): [VariableAccess] x +# 1963| Type = [IntType] int +# 1963| ValueCategory = prvalue(load) +# 1963| getGreaterOperand(): [Literal] 10 +# 1963| Type = [IntType] int +# 1963| Value = [Literal] 10 +# 1963| ValueCategory = prvalue +# 1963| getThen(): [BlockStmt] { ... } +# 1964| getStmt(0): [ReturnStmt] return ... +# 1964| getExpr(): [VariableAccess] x +# 1964| Type = [IntType] int +# 1964| ValueCategory = prvalue(load) +# 1965| getElse(): [BlockStmt] { ... } +# 1966| getStmt(0): [ExprStmt] ExprStmt +# 1966| getExpr(): [FunctionCall] call to noreturnFunc +# 1966| Type = [VoidType] void +# 1966| ValueCategory = prvalue +# 1968| getStmt(1): [ReturnStmt] return ... +# 1970| [TopLevelFunction] int noreturnTest2(int) +# 1970| : +# 1970| getParameter(0): [Parameter] x +# 1970| Type = [IntType] int +# 1970| getEntryPoint(): [BlockStmt] { ... } +# 1971| getStmt(0): [IfStmt] if (...) ... +# 1971| getCondition(): [LTExpr] ... < ... +# 1971| Type = [BoolType] bool +# 1971| ValueCategory = prvalue +# 1971| getLesserOperand(): [VariableAccess] x +# 1971| Type = [IntType] int +# 1971| ValueCategory = prvalue(load) +# 1971| getGreaterOperand(): [Literal] 10 +# 1971| Type = [IntType] int +# 1971| Value = [Literal] 10 +# 1971| ValueCategory = prvalue +# 1971| getThen(): [BlockStmt] { ... } +# 1972| getStmt(0): [ExprStmt] ExprStmt +# 1972| getExpr(): [FunctionCall] call to noreturnFunc +# 1972| Type = [VoidType] void # 1972| ValueCategory = prvalue -# 1973| getStmt(5): [DeclStmt] declaration -# 1973| getDeclarationEntry(0): [VariableDeclarationEntry] definition of z -# 1973| Type = [IntType] int -# 1974| getStmt(6): [ExprStmt] ExprStmt -# 1974| getExpr(): [AssignExpr] ... = ... +# 1974| getStmt(1): [ReturnStmt] return ... +# 1974| getExpr(): [VariableAccess] x # 1974| Type = [IntType] int -# 1974| ValueCategory = lvalue -# 1974| getLValue(): [VariableAccess] z -# 1974| Type = [IntType] int -# 1974| ValueCategory = lvalue -# 1974| getRValue(): [FunctionCall] call to static_function -# 1974| Type = [IntType] int -# 1974| ValueCategory = prvalue -# 1974| getArgument(0): [Literal] 10 -# 1974| Type = [IntType] int -# 1974| Value = [Literal] 10 -# 1974| ValueCategory = prvalue -# 1975| getStmt(7): [ReturnStmt] return ... -# 1975| getImplicitDestructorCall(0): [DestructorCall] call to ~C -# 1975| Type = [VoidType] void -# 1975| ValueCategory = prvalue -# 1975| getQualifier(): [VariableAccess] c -# 1975| Type = [Class] C -# 1975| ValueCategory = lvalue -# 1977| [TopLevelFunction] void test_double_assign() +# 1974| ValueCategory = prvalue(load) +# 1977| [TopLevelFunction] int static_function(int) # 1977| : +# 1977| getParameter(0): [Parameter] x +# 1977| Type = [IntType] int # 1977| getEntryPoint(): [BlockStmt] { ... } -# 1978| getStmt(0): [DeclStmt] declaration -# 1978| getDeclarationEntry(0): [VariableDeclarationEntry] definition of i +# 1978| getStmt(0): [ReturnStmt] return ... +# 1978| getExpr(): [VariableAccess] x # 1978| Type = [IntType] int -# 1978| getDeclarationEntry(1): [VariableDeclarationEntry] definition of j -# 1978| Type = [IntType] int -# 1979| getStmt(1): [ExprStmt] ExprStmt -# 1979| getExpr(): [AssignExpr] ... = ... -# 1979| Type = [IntType] int -# 1979| ValueCategory = lvalue -# 1979| getLValue(): [VariableAccess] i -# 1979| Type = [IntType] int -# 1979| ValueCategory = lvalue -# 1979| getRValue(): [AssignExpr] ... = ... -# 1979| Type = [IntType] int -# 1979| ValueCategory = prvalue(load) -# 1979| getLValue(): [VariableAccess] j -# 1979| Type = [IntType] int -# 1979| ValueCategory = lvalue -# 1979| getRValue(): [Literal] 40 -# 1979| Type = [IntType] int -# 1979| Value = [Literal] 40 -# 1979| ValueCategory = prvalue -# 1980| getStmt(2): [ReturnStmt] return ... -# 1982| [TopLevelFunction] void test_assign_with_assign_operation() -# 1982| : -# 1982| getEntryPoint(): [BlockStmt] { ... } -# 1983| getStmt(0): [DeclStmt] declaration -# 1983| getDeclarationEntry(0): [VariableDeclarationEntry] definition of i +# 1978| ValueCategory = prvalue(load) +# 1981| [TopLevelFunction] void test_static_functions_with_assignments() +# 1981| : +# 1981| getEntryPoint(): [BlockStmt] { ... } +# 1982| getStmt(0): [DeclStmt] declaration +# 1982| getDeclarationEntry(0): [VariableDeclarationEntry] definition of c +# 1982| Type = [Class] C +# 1982| getVariable().getInitializer(): [Initializer] initializer for c +# 1982| getExpr(): [ConstructorCall] call to C +# 1982| Type = [VoidType] void +# 1982| ValueCategory = prvalue +# 1983| getStmt(1): [DeclStmt] declaration +# 1983| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x # 1983| Type = [IntType] int -# 1983| getDeclarationEntry(1): [VariableDeclarationEntry] definition of j -# 1983| Type = [IntType] int -# 1983| getVariable().getInitializer(): [Initializer] initializer for j -# 1983| getExpr(): [Literal] 0 -# 1983| Type = [IntType] int -# 1983| Value = [Literal] 0 -# 1983| ValueCategory = prvalue -# 1984| getStmt(1): [ExprStmt] ExprStmt +# 1984| getStmt(2): [ExprStmt] ExprStmt # 1984| getExpr(): [AssignExpr] ... = ... # 1984| Type = [IntType] int # 1984| ValueCategory = lvalue -# 1984| getLValue(): [VariableAccess] i +# 1984| getLValue(): [VariableAccess] x # 1984| Type = [IntType] int # 1984| ValueCategory = lvalue -# 1984| getRValue(): [AssignAddExpr] ... += ... +# 1984| getRValue(): [FunctionCall] call to StaticMemberFunction # 1984| Type = [IntType] int -# 1984| ValueCategory = prvalue(load) -# 1984| getLValue(): [VariableAccess] j -# 1984| Type = [IntType] int +# 1984| ValueCategory = prvalue +# 1984| getQualifier(): [VariableAccess] c +# 1984| Type = [Class] C # 1984| ValueCategory = lvalue -# 1984| getRValue(): [Literal] 40 +# 1984| getArgument(0): [Literal] 10 # 1984| Type = [IntType] int -# 1984| Value = [Literal] 40 +# 1984| Value = [Literal] 10 # 1984| ValueCategory = prvalue -# 1984| getRValue().getFullyConverted(): [ParenthesisExpr] (...) -# 1984| Type = [IntType] int -# 1984| ValueCategory = prvalue(load) -# 1985| getStmt(2): [ReturnStmt] return ... -# 1987| [CopyAssignmentOperator] D& D::operator=(D const&) -# 1987| : -#-----| getParameter(0): [Parameter] (unnamed parameter 0) -#-----| Type = [LValueReferenceType] const D & -# 1987| [MoveAssignmentOperator] D& D::operator=(D&&) -# 1987| : -#-----| getParameter(0): [Parameter] (unnamed parameter 0) -#-----| Type = [RValueReferenceType] D && -# 1991| [MemberFunction] D& D::ReferenceStaticMemberFunction() +# 1985| getStmt(3): [DeclStmt] declaration +# 1985| getDeclarationEntry(0): [VariableDeclarationEntry] definition of y +# 1985| Type = [IntType] int +# 1986| getStmt(4): [ExprStmt] ExprStmt +# 1986| getExpr(): [AssignExpr] ... = ... +# 1986| Type = [IntType] int +# 1986| ValueCategory = lvalue +# 1986| getLValue(): [VariableAccess] y +# 1986| Type = [IntType] int +# 1986| ValueCategory = lvalue +# 1986| getRValue(): [FunctionCall] call to StaticMemberFunction +# 1986| Type = [IntType] int +# 1986| ValueCategory = prvalue +# 1986| getArgument(0): [Literal] 10 +# 1986| Type = [IntType] int +# 1986| Value = [Literal] 10 +# 1986| ValueCategory = prvalue +# 1987| getStmt(5): [DeclStmt] declaration +# 1987| getDeclarationEntry(0): [VariableDeclarationEntry] definition of z +# 1987| Type = [IntType] int +# 1988| getStmt(6): [ExprStmt] ExprStmt +# 1988| getExpr(): [AssignExpr] ... = ... +# 1988| Type = [IntType] int +# 1988| ValueCategory = lvalue +# 1988| getLValue(): [VariableAccess] z +# 1988| Type = [IntType] int +# 1988| ValueCategory = lvalue +# 1988| getRValue(): [FunctionCall] call to static_function +# 1988| Type = [IntType] int +# 1988| ValueCategory = prvalue +# 1988| getArgument(0): [Literal] 10 +# 1988| Type = [IntType] int +# 1988| Value = [Literal] 10 +# 1988| ValueCategory = prvalue +# 1989| getStmt(7): [ReturnStmt] return ... +# 1989| getImplicitDestructorCall(0): [DestructorCall] call to ~C +# 1989| Type = [VoidType] void +# 1989| ValueCategory = prvalue +# 1989| getQualifier(): [VariableAccess] c +# 1989| Type = [Class] C +# 1989| ValueCategory = lvalue +# 1991| [TopLevelFunction] void test_double_assign() # 1991| : # 1991| getEntryPoint(): [BlockStmt] { ... } -# 1992| getStmt(0): [ReturnStmt] return ... -# 1992| getExpr(): [VariableAccess] x -# 1992| Type = [Class] D -# 1992| ValueCategory = lvalue -# 1992| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1992| Type = [LValueReferenceType] D & -# 1992| ValueCategory = prvalue -# 1994| [MemberFunction] D D::ObjectStaticMemberFunction() -# 1994| : -# 1994| getEntryPoint(): [BlockStmt] { ... } -# 1995| getStmt(0): [ReturnStmt] return ... -# 1995| getExpr(): [VariableAccess] x -# 1995| Type = [Class] D -# 1995| ValueCategory = prvalue(load) -# 1999| [TopLevelFunction] void test_static_member_functions_with_reference_return() -# 1999| : -# 1999| getEntryPoint(): [BlockStmt] { ... } -# 2000| getStmt(0): [DeclStmt] declaration -# 2000| getDeclarationEntry(0): [VariableDeclarationEntry] definition of d -# 2000| Type = [Class] D -# 2002| getStmt(1): [ExprStmt] ExprStmt -# 2002| getExpr(): [FunctionCall] call to ReferenceStaticMemberFunction -# 2002| Type = [LValueReferenceType] D & -# 2002| ValueCategory = prvalue -# 2002| getQualifier(): [VariableAccess] d -# 2002| Type = [Class] D -# 2002| ValueCategory = lvalue -# 2002| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 2002| Type = [Class] D -# 2002| ValueCategory = lvalue -# 2003| getStmt(2): [ExprStmt] ExprStmt -# 2003| getExpr(): [FunctionCall] call to ReferenceStaticMemberFunction -# 2003| Type = [LValueReferenceType] D & -# 2003| ValueCategory = prvalue -# 2003| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 2003| Type = [Class] D -# 2003| ValueCategory = lvalue -# 2004| getStmt(3): [ExprStmt] ExprStmt -# 2004| getExpr(): [FunctionCall] call to ObjectStaticMemberFunction -# 2004| Type = [Class] D -# 2004| ValueCategory = prvalue -# 2004| getQualifier(): [VariableAccess] d -# 2004| Type = [Class] D -# 2004| ValueCategory = lvalue -# 2005| getStmt(4): [ExprStmt] ExprStmt -# 2005| getExpr(): [FunctionCall] call to ObjectStaticMemberFunction -# 2005| Type = [Class] D -# 2005| ValueCategory = prvalue -# 2007| getStmt(5): [DeclStmt] declaration -# 2007| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x -# 2007| Type = [Class] D -# 2008| getStmt(6): [ExprStmt] ExprStmt -# 2008| getExpr(): [AssignExpr] ... = ... -# 2008| Type = [Class] D -# 2008| ValueCategory = lvalue -# 2008| getLValue(): [VariableAccess] x -# 2008| Type = [Class] D -# 2008| ValueCategory = lvalue -# 2008| getRValue(): [FunctionCall] call to ReferenceStaticMemberFunction -# 2008| Type = [LValueReferenceType] D & -# 2008| ValueCategory = prvalue -# 2008| getQualifier(): [VariableAccess] d -# 2008| Type = [Class] D -# 2008| ValueCategory = lvalue -# 2008| getRValue().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 2008| Type = [Class] D -# 2008| ValueCategory = prvalue(load) -# 2009| getStmt(7): [DeclStmt] declaration -# 2009| getDeclarationEntry(0): [VariableDeclarationEntry] definition of y +# 1992| getStmt(0): [DeclStmt] declaration +# 1992| getDeclarationEntry(0): [VariableDeclarationEntry] definition of i +# 1992| Type = [IntType] int +# 1992| getDeclarationEntry(1): [VariableDeclarationEntry] definition of j +# 1992| Type = [IntType] int +# 1993| getStmt(1): [ExprStmt] ExprStmt +# 1993| getExpr(): [AssignExpr] ... = ... +# 1993| Type = [IntType] int +# 1993| ValueCategory = lvalue +# 1993| getLValue(): [VariableAccess] i +# 1993| Type = [IntType] int +# 1993| ValueCategory = lvalue +# 1993| getRValue(): [AssignExpr] ... = ... +# 1993| Type = [IntType] int +# 1993| ValueCategory = prvalue(load) +# 1993| getLValue(): [VariableAccess] j +# 1993| Type = [IntType] int +# 1993| ValueCategory = lvalue +# 1993| getRValue(): [Literal] 40 +# 1993| Type = [IntType] int +# 1993| Value = [Literal] 40 +# 1993| ValueCategory = prvalue +# 1994| getStmt(2): [ReturnStmt] return ... +# 1996| [TopLevelFunction] void test_assign_with_assign_operation() +# 1996| : +# 1996| getEntryPoint(): [BlockStmt] { ... } +# 1997| getStmt(0): [DeclStmt] declaration +# 1997| getDeclarationEntry(0): [VariableDeclarationEntry] definition of i +# 1997| Type = [IntType] int +# 1997| getDeclarationEntry(1): [VariableDeclarationEntry] definition of j +# 1997| Type = [IntType] int +# 1997| getVariable().getInitializer(): [Initializer] initializer for j +# 1997| getExpr(): [Literal] 0 +# 1997| Type = [IntType] int +# 1997| Value = [Literal] 0 +# 1997| ValueCategory = prvalue +# 1998| getStmt(1): [ExprStmt] ExprStmt +# 1998| getExpr(): [AssignExpr] ... = ... +# 1998| Type = [IntType] int +# 1998| ValueCategory = lvalue +# 1998| getLValue(): [VariableAccess] i +# 1998| Type = [IntType] int +# 1998| ValueCategory = lvalue +# 1998| getRValue(): [AssignAddExpr] ... += ... +# 1998| Type = [IntType] int +# 1998| ValueCategory = prvalue(load) +# 1998| getLValue(): [VariableAccess] j +# 1998| Type = [IntType] int +# 1998| ValueCategory = lvalue +# 1998| getRValue(): [Literal] 40 +# 1998| Type = [IntType] int +# 1998| Value = [Literal] 40 +# 1998| ValueCategory = prvalue +# 1998| getRValue().getFullyConverted(): [ParenthesisExpr] (...) +# 1998| Type = [IntType] int +# 1998| ValueCategory = prvalue(load) +# 1999| getStmt(2): [ReturnStmt] return ... +# 2001| [CopyAssignmentOperator] D& D::operator=(D const&) +# 2001| : +#-----| getParameter(0): [Parameter] (unnamed parameter 0) +#-----| Type = [LValueReferenceType] const D & +# 2001| [MoveAssignmentOperator] D& D::operator=(D&&) +# 2001| : +#-----| getParameter(0): [Parameter] (unnamed parameter 0) +#-----| Type = [RValueReferenceType] D && +# 2005| [MemberFunction] D& D::ReferenceStaticMemberFunction() +# 2005| : +# 2005| getEntryPoint(): [BlockStmt] { ... } +# 2006| getStmt(0): [ReturnStmt] return ... +# 2006| getExpr(): [VariableAccess] x +# 2006| Type = [Class] D +# 2006| ValueCategory = lvalue +# 2006| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 2006| Type = [LValueReferenceType] D & +# 2006| ValueCategory = prvalue +# 2008| [MemberFunction] D D::ObjectStaticMemberFunction() +# 2008| : +# 2008| getEntryPoint(): [BlockStmt] { ... } +# 2009| getStmt(0): [ReturnStmt] return ... +# 2009| getExpr(): [VariableAccess] x # 2009| Type = [Class] D -# 2010| getStmt(8): [ExprStmt] ExprStmt -# 2010| getExpr(): [AssignExpr] ... = ... -# 2010| Type = [Class] D -# 2010| ValueCategory = lvalue -# 2010| getLValue(): [VariableAccess] y -# 2010| Type = [Class] D -# 2010| ValueCategory = lvalue -# 2010| getRValue(): [FunctionCall] call to ReferenceStaticMemberFunction -# 2010| Type = [LValueReferenceType] D & -# 2010| ValueCategory = prvalue -# 2010| getRValue().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 2010| Type = [Class] D -# 2010| ValueCategory = prvalue(load) -# 2011| getStmt(9): [DeclStmt] declaration -# 2011| getDeclarationEntry(0): [VariableDeclarationEntry] definition of j -# 2011| Type = [Class] D -# 2012| getStmt(10): [ExprStmt] ExprStmt -# 2012| getExpr(): [AssignExpr] ... = ... -# 2012| Type = [Class] D -# 2012| ValueCategory = lvalue -# 2012| getLValue(): [VariableAccess] j -# 2012| Type = [Class] D -# 2012| ValueCategory = lvalue -# 2012| getRValue(): [FunctionCall] call to ObjectStaticMemberFunction -# 2012| Type = [Class] D -# 2012| ValueCategory = prvalue -# 2012| getQualifier(): [VariableAccess] d -# 2012| Type = [Class] D -# 2012| ValueCategory = lvalue -# 2013| getStmt(11): [DeclStmt] declaration -# 2013| getDeclarationEntry(0): [VariableDeclarationEntry] definition of k -# 2013| Type = [Class] D -# 2014| getStmt(12): [ExprStmt] ExprStmt -# 2014| getExpr(): [AssignExpr] ... = ... +# 2009| ValueCategory = prvalue(load) +# 2013| [TopLevelFunction] void test_static_member_functions_with_reference_return() +# 2013| : +# 2013| getEntryPoint(): [BlockStmt] { ... } +# 2014| getStmt(0): [DeclStmt] declaration +# 2014| getDeclarationEntry(0): [VariableDeclarationEntry] definition of d # 2014| Type = [Class] D -# 2014| ValueCategory = lvalue -# 2014| getLValue(): [VariableAccess] k -# 2014| Type = [Class] D -# 2014| ValueCategory = lvalue -# 2014| getRValue(): [FunctionCall] call to ObjectStaticMemberFunction -# 2014| Type = [Class] D -# 2014| ValueCategory = prvalue -# 2015| getStmt(13): [ReturnStmt] return ... -# 2017| [TopLevelFunction] void test_volatile() -# 2017| : -# 2017| getEntryPoint(): [BlockStmt] { ... } -# 2018| getStmt(0): [DeclStmt] declaration -# 2018| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x -# 2018| Type = [SpecifiedType] volatile int -# 2019| getStmt(1): [ExprStmt] ExprStmt -# 2019| getExpr(): [VariableAccess] x -# 2019| Type = [IntType] int -# 2019| ValueCategory = prvalue(load) -# 2020| getStmt(2): [ReturnStmt] return ... -# 2022| [CopyAssignmentOperator] ValCat& ValCat::operator=(ValCat const&) -# 2022| : +# 2016| getStmt(1): [ExprStmt] ExprStmt +# 2016| getExpr(): [FunctionCall] call to ReferenceStaticMemberFunction +# 2016| Type = [LValueReferenceType] D & +# 2016| ValueCategory = prvalue +# 2016| getQualifier(): [VariableAccess] d +# 2016| Type = [Class] D +# 2016| ValueCategory = lvalue +# 2016| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 2016| Type = [Class] D +# 2016| ValueCategory = lvalue +# 2017| getStmt(2): [ExprStmt] ExprStmt +# 2017| getExpr(): [FunctionCall] call to ReferenceStaticMemberFunction +# 2017| Type = [LValueReferenceType] D & +# 2017| ValueCategory = prvalue +# 2017| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 2017| Type = [Class] D +# 2017| ValueCategory = lvalue +# 2018| getStmt(3): [ExprStmt] ExprStmt +# 2018| getExpr(): [FunctionCall] call to ObjectStaticMemberFunction +# 2018| Type = [Class] D +# 2018| ValueCategory = prvalue +# 2018| getQualifier(): [VariableAccess] d +# 2018| Type = [Class] D +# 2018| ValueCategory = lvalue +# 2019| getStmt(4): [ExprStmt] ExprStmt +# 2019| getExpr(): [FunctionCall] call to ObjectStaticMemberFunction +# 2019| Type = [Class] D +# 2019| ValueCategory = prvalue +# 2021| getStmt(5): [DeclStmt] declaration +# 2021| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x +# 2021| Type = [Class] D +# 2022| getStmt(6): [ExprStmt] ExprStmt +# 2022| getExpr(): [AssignExpr] ... = ... +# 2022| Type = [Class] D +# 2022| ValueCategory = lvalue +# 2022| getLValue(): [VariableAccess] x +# 2022| Type = [Class] D +# 2022| ValueCategory = lvalue +# 2022| getRValue(): [FunctionCall] call to ReferenceStaticMemberFunction +# 2022| Type = [LValueReferenceType] D & +# 2022| ValueCategory = prvalue +# 2022| getQualifier(): [VariableAccess] d +# 2022| Type = [Class] D +# 2022| ValueCategory = lvalue +# 2022| getRValue().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 2022| Type = [Class] D +# 2022| ValueCategory = prvalue(load) +# 2023| getStmt(7): [DeclStmt] declaration +# 2023| getDeclarationEntry(0): [VariableDeclarationEntry] definition of y +# 2023| Type = [Class] D +# 2024| getStmt(8): [ExprStmt] ExprStmt +# 2024| getExpr(): [AssignExpr] ... = ... +# 2024| Type = [Class] D +# 2024| ValueCategory = lvalue +# 2024| getLValue(): [VariableAccess] y +# 2024| Type = [Class] D +# 2024| ValueCategory = lvalue +# 2024| getRValue(): [FunctionCall] call to ReferenceStaticMemberFunction +# 2024| Type = [LValueReferenceType] D & +# 2024| ValueCategory = prvalue +# 2024| getRValue().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 2024| Type = [Class] D +# 2024| ValueCategory = prvalue(load) +# 2025| getStmt(9): [DeclStmt] declaration +# 2025| getDeclarationEntry(0): [VariableDeclarationEntry] definition of j +# 2025| Type = [Class] D +# 2026| getStmt(10): [ExprStmt] ExprStmt +# 2026| getExpr(): [AssignExpr] ... = ... +# 2026| Type = [Class] D +# 2026| ValueCategory = lvalue +# 2026| getLValue(): [VariableAccess] j +# 2026| Type = [Class] D +# 2026| ValueCategory = lvalue +# 2026| getRValue(): [FunctionCall] call to ObjectStaticMemberFunction +# 2026| Type = [Class] D +# 2026| ValueCategory = prvalue +# 2026| getQualifier(): [VariableAccess] d +# 2026| Type = [Class] D +# 2026| ValueCategory = lvalue +# 2027| getStmt(11): [DeclStmt] declaration +# 2027| getDeclarationEntry(0): [VariableDeclarationEntry] definition of k +# 2027| Type = [Class] D +# 2028| getStmt(12): [ExprStmt] ExprStmt +# 2028| getExpr(): [AssignExpr] ... = ... +# 2028| Type = [Class] D +# 2028| ValueCategory = lvalue +# 2028| getLValue(): [VariableAccess] k +# 2028| Type = [Class] D +# 2028| ValueCategory = lvalue +# 2028| getRValue(): [FunctionCall] call to ObjectStaticMemberFunction +# 2028| Type = [Class] D +# 2028| ValueCategory = prvalue +# 2029| getStmt(13): [ReturnStmt] return ... +# 2031| [TopLevelFunction] void test_volatile() +# 2031| : +# 2031| getEntryPoint(): [BlockStmt] { ... } +# 2032| getStmt(0): [DeclStmt] declaration +# 2032| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x +# 2032| Type = [SpecifiedType] volatile int +# 2033| getStmt(1): [ExprStmt] ExprStmt +# 2033| getExpr(): [VariableAccess] x +# 2033| Type = [IntType] int +# 2033| ValueCategory = prvalue(load) +# 2034| getStmt(2): [ReturnStmt] return ... +# 2036| [CopyAssignmentOperator] ValCat& ValCat::operator=(ValCat const&) +# 2036| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const ValCat & -# 2022| [MoveAssignmentOperator] ValCat& ValCat::operator=(ValCat&&) -# 2022| : +# 2036| [MoveAssignmentOperator] ValCat& ValCat::operator=(ValCat&&) +# 2036| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] ValCat && -# 2023| [MemberFunction] ValCat& ValCat::lvalue() -# 2023| : -# 2024| [MemberFunction] ValCat&& ValCat::xvalue() -# 2024| : -# 2025| [MemberFunction] ValCat ValCat::prvalue() -# 2025| : -# 2028| [TopLevelFunction] void value_category_test() -# 2028| : -# 2028| getEntryPoint(): [BlockStmt] { ... } -# 2029| getStmt(0): [DeclStmt] declaration -# 2029| getDeclarationEntry(0): [VariableDeclarationEntry] definition of c -# 2029| Type = [Struct] ValCat -# 2031| getStmt(1): [ExprStmt] ExprStmt -# 2031| getExpr(): [AssignExpr] ... = ... -# 2031| Type = [Struct] ValCat -# 2031| ValueCategory = lvalue -# 2031| getLValue(): [FunctionCall] call to lvalue -# 2031| Type = [LValueReferenceType] ValCat & -# 2031| ValueCategory = prvalue -# 2031| getQualifier(): [VariableAccess] c -# 2031| Type = [Struct] ValCat -# 2031| ValueCategory = lvalue -# 2031| getRValue(): [ClassAggregateLiteral] {...} -# 2031| Type = [Struct] ValCat -# 2031| ValueCategory = prvalue -# 2031| getLValue().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 2031| Type = [Struct] ValCat -# 2031| ValueCategory = lvalue -#-----| getRValue().getFullyConverted(): [TemporaryObjectExpr] temporary object -#-----| Type = [Struct] ValCat -#-----| ValueCategory = prvalue(load) -# 2032| getStmt(2): [ExprStmt] ExprStmt -# 2032| getExpr(): [AssignExpr] ... = ... -# 2032| Type = [Struct] ValCat -# 2032| ValueCategory = lvalue -# 2032| getLValue(): [FunctionCall] call to xvalue -# 2032| Type = [RValueReferenceType] ValCat && -# 2032| ValueCategory = prvalue -# 2032| getQualifier(): [VariableAccess] c -# 2032| Type = [Struct] ValCat -# 2032| ValueCategory = lvalue -# 2032| getRValue(): [ClassAggregateLiteral] {...} -# 2032| Type = [Struct] ValCat -# 2032| ValueCategory = prvalue -# 2032| getLValue().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 2032| Type = [Struct] ValCat -# 2032| ValueCategory = lvalue -#-----| getRValue().getFullyConverted(): [TemporaryObjectExpr] temporary object -#-----| Type = [Struct] ValCat -#-----| ValueCategory = prvalue(load) -# 2033| getStmt(3): [ExprStmt] ExprStmt -# 2033| getExpr(): [AssignExpr] ... = ... -# 2033| Type = [Struct] ValCat -# 2033| ValueCategory = lvalue -# 2033| getLValue(): [FunctionCall] call to prvalue -# 2033| Type = [Struct] ValCat -# 2033| ValueCategory = prvalue -# 2033| getQualifier(): [VariableAccess] c -# 2033| Type = [Struct] ValCat -# 2033| ValueCategory = lvalue -# 2033| getRValue(): [ClassAggregateLiteral] {...} -# 2033| Type = [Struct] ValCat -# 2033| ValueCategory = prvalue -# 2033| getLValue().getFullyConverted(): [TemporaryObjectExpr] temporary object -# 2033| Type = [Struct] ValCat -# 2033| ValueCategory = lvalue -#-----| getRValue().getFullyConverted(): [TemporaryObjectExpr] temporary object -#-----| Type = [Struct] ValCat -#-----| ValueCategory = prvalue(load) -# 2034| getStmt(4): [ExprStmt] ExprStmt -# 2034| getExpr(): [AssignExpr] ... = ... -# 2034| Type = [Struct] ValCat -# 2034| ValueCategory = lvalue -# 2034| getLValue(): [FunctionCall] call to lvalue -# 2034| Type = [LValueReferenceType] ValCat & -# 2034| ValueCategory = prvalue -# 2034| getRValue(): [ClassAggregateLiteral] {...} -# 2034| Type = [Struct] ValCat -# 2034| ValueCategory = prvalue -# 2034| getLValue().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 2034| Type = [Struct] ValCat -# 2034| ValueCategory = lvalue -#-----| getRValue().getFullyConverted(): [TemporaryObjectExpr] temporary object -#-----| Type = [Struct] ValCat -#-----| ValueCategory = prvalue(load) -# 2035| getStmt(5): [ExprStmt] ExprStmt -# 2035| getExpr(): [AssignExpr] ... = ... -# 2035| Type = [Struct] ValCat -# 2035| ValueCategory = lvalue -# 2035| getLValue(): [FunctionCall] call to xvalue -# 2035| Type = [RValueReferenceType] ValCat && -# 2035| ValueCategory = prvalue -# 2035| getRValue(): [ClassAggregateLiteral] {...} -# 2035| Type = [Struct] ValCat -# 2035| ValueCategory = prvalue -# 2035| getLValue().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 2035| Type = [Struct] ValCat -# 2035| ValueCategory = lvalue -#-----| getRValue().getFullyConverted(): [TemporaryObjectExpr] temporary object -#-----| Type = [Struct] ValCat -#-----| ValueCategory = prvalue(load) -# 2036| getStmt(6): [ExprStmt] ExprStmt -# 2036| getExpr(): [AssignExpr] ... = ... -# 2036| Type = [Struct] ValCat -# 2036| ValueCategory = lvalue -# 2036| getLValue(): [FunctionCall] call to prvalue -# 2036| Type = [Struct] ValCat -# 2036| ValueCategory = prvalue -# 2036| getRValue(): [ClassAggregateLiteral] {...} -# 2036| Type = [Struct] ValCat -# 2036| ValueCategory = prvalue -# 2036| getLValue().getFullyConverted(): [TemporaryObjectExpr] temporary object -# 2036| Type = [Struct] ValCat -# 2036| ValueCategory = lvalue -#-----| getRValue().getFullyConverted(): [TemporaryObjectExpr] temporary object -#-----| Type = [Struct] ValCat -#-----| ValueCategory = prvalue(load) -# 2037| getStmt(7): [ReturnStmt] return ... -# 2039| [TopLevelFunction] void SetStaticFuncPtr() +# 2037| [MemberFunction] ValCat& ValCat::lvalue() +# 2037| : +# 2038| [MemberFunction] ValCat&& ValCat::xvalue() +# 2038| : +# 2039| [MemberFunction] ValCat ValCat::prvalue() # 2039| : -# 2039| getEntryPoint(): [BlockStmt] { ... } -# 2040| getStmt(0): [DeclStmt] declaration -# 2040| getDeclarationEntry(0): [VariableDeclarationEntry] definition of c -# 2040| Type = [Class] C -# 2040| getVariable().getInitializer(): [Initializer] initializer for c -# 2040| getExpr(): [ConstructorCall] call to C -# 2040| Type = [VoidType] void -# 2040| ValueCategory = prvalue -# 2041| getStmt(1): [DeclStmt] declaration -# 2041| getDeclarationEntry(0): [VariableDeclarationEntry] definition of pfn -# 2041| Type = [FunctionPointerType] ..(*)(..) -# 2041| getVariable().getInitializer(): [Initializer] initializer for pfn -# 2041| getExpr(): [FunctionAccess] StaticMemberFunction -# 2041| Type = [FunctionPointerType] ..(*)(..) -# 2041| ValueCategory = prvalue(load) -# 2042| getStmt(2): [ExprStmt] ExprStmt -# 2042| getExpr(): [AssignExpr] ... = ... -# 2042| Type = [FunctionPointerType] ..(*)(..) -# 2042| ValueCategory = lvalue -# 2042| getLValue(): [VariableAccess] pfn -# 2042| Type = [FunctionPointerType] ..(*)(..) -# 2042| ValueCategory = lvalue -# 2042| getRValue(): [FunctionAccess] StaticMemberFunction -# 2042| Type = [FunctionPointerType] ..(*)(..) -# 2042| ValueCategory = prvalue(load) -# 2042| getQualifier(): [VariableAccess] c -# 2042| Type = [Class] C -# 2042| ValueCategory = lvalue -# 2043| getStmt(3): [ReturnStmt] return ... -# 2043| getImplicitDestructorCall(0): [DestructorCall] call to ~C -# 2043| Type = [VoidType] void -# 2043| ValueCategory = prvalue -# 2043| getQualifier(): [VariableAccess] c -# 2043| Type = [Class] C -# 2043| ValueCategory = lvalue -# 2045| [TopLevelFunction] void TernaryTestInt(bool, int, int, int) -# 2045| : -# 2045| getParameter(0): [Parameter] a -# 2045| Type = [BoolType] bool -# 2045| getParameter(1): [Parameter] x -# 2045| Type = [IntType] int -# 2045| getParameter(2): [Parameter] y -# 2045| Type = [IntType] int -# 2045| getParameter(3): [Parameter] z -# 2045| Type = [IntType] int -# 2045| getEntryPoint(): [BlockStmt] { ... } -# 2046| getStmt(0): [ExprStmt] ExprStmt +# 2042| [TopLevelFunction] void value_category_test() +# 2042| : +# 2042| getEntryPoint(): [BlockStmt] { ... } +# 2043| getStmt(0): [DeclStmt] declaration +# 2043| getDeclarationEntry(0): [VariableDeclarationEntry] definition of c +# 2043| Type = [Struct] ValCat +# 2045| getStmt(1): [ExprStmt] ExprStmt +# 2045| getExpr(): [AssignExpr] ... = ... +# 2045| Type = [Struct] ValCat +# 2045| ValueCategory = lvalue +# 2045| getLValue(): [FunctionCall] call to lvalue +# 2045| Type = [LValueReferenceType] ValCat & +# 2045| ValueCategory = prvalue +# 2045| getQualifier(): [VariableAccess] c +# 2045| Type = [Struct] ValCat +# 2045| ValueCategory = lvalue +# 2045| getRValue(): [ClassAggregateLiteral] {...} +# 2045| Type = [Struct] ValCat +# 2045| ValueCategory = prvalue +# 2045| getLValue().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 2045| Type = [Struct] ValCat +# 2045| ValueCategory = lvalue +#-----| getRValue().getFullyConverted(): [TemporaryObjectExpr] temporary object +#-----| Type = [Struct] ValCat +#-----| ValueCategory = prvalue(load) +# 2046| getStmt(2): [ExprStmt] ExprStmt # 2046| getExpr(): [AssignExpr] ... = ... -# 2046| Type = [IntType] int +# 2046| Type = [Struct] ValCat # 2046| ValueCategory = lvalue -# 2046| getLValue(): [VariableAccess] z -# 2046| Type = [IntType] int +# 2046| getLValue(): [FunctionCall] call to xvalue +# 2046| Type = [RValueReferenceType] ValCat && +# 2046| ValueCategory = prvalue +# 2046| getQualifier(): [VariableAccess] c +# 2046| Type = [Struct] ValCat +# 2046| ValueCategory = lvalue +# 2046| getRValue(): [ClassAggregateLiteral] {...} +# 2046| Type = [Struct] ValCat +# 2046| ValueCategory = prvalue +# 2046| getLValue().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 2046| Type = [Struct] ValCat # 2046| ValueCategory = lvalue -# 2046| getRValue(): [ConditionalExpr] ... ? ... : ... -# 2046| Type = [IntType] int -# 2046| ValueCategory = prvalue(load) -# 2046| getCondition(): [VariableAccess] a -# 2046| Type = [BoolType] bool -# 2046| ValueCategory = prvalue(load) -# 2046| getThen(): [VariableAccess] x -# 2046| Type = [IntType] int -# 2046| ValueCategory = prvalue(load) -# 2046| getElse(): [VariableAccess] y -# 2046| Type = [IntType] int -# 2046| ValueCategory = prvalue(load) -# 2047| getStmt(1): [ExprStmt] ExprStmt +#-----| getRValue().getFullyConverted(): [TemporaryObjectExpr] temporary object +#-----| Type = [Struct] ValCat +#-----| ValueCategory = prvalue(load) +# 2047| getStmt(3): [ExprStmt] ExprStmt # 2047| getExpr(): [AssignExpr] ... = ... -# 2047| Type = [IntType] int +# 2047| Type = [Struct] ValCat # 2047| ValueCategory = lvalue -# 2047| getLValue(): [VariableAccess] z -# 2047| Type = [IntType] int +# 2047| getLValue(): [FunctionCall] call to prvalue +# 2047| Type = [Struct] ValCat +# 2047| ValueCategory = prvalue +# 2047| getQualifier(): [VariableAccess] c +# 2047| Type = [Struct] ValCat +# 2047| ValueCategory = lvalue +# 2047| getRValue(): [ClassAggregateLiteral] {...} +# 2047| Type = [Struct] ValCat +# 2047| ValueCategory = prvalue +# 2047| getLValue().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 2047| Type = [Struct] ValCat # 2047| ValueCategory = lvalue -# 2047| getRValue(): [ConditionalExpr] ... ? ... : ... -# 2047| Type = [IntType] int -# 2047| ValueCategory = prvalue(load) -# 2047| getCondition(): [VariableAccess] a -# 2047| Type = [BoolType] bool -# 2047| ValueCategory = prvalue(load) -# 2047| getThen(): [VariableAccess] x -# 2047| Type = [IntType] int -# 2047| ValueCategory = prvalue(load) -# 2047| getElse(): [Literal] 5 -# 2047| Type = [IntType] int -# 2047| Value = [Literal] 5 -# 2047| ValueCategory = prvalue -# 2048| getStmt(2): [ExprStmt] ExprStmt +#-----| getRValue().getFullyConverted(): [TemporaryObjectExpr] temporary object +#-----| Type = [Struct] ValCat +#-----| ValueCategory = prvalue(load) +# 2048| getStmt(4): [ExprStmt] ExprStmt # 2048| getExpr(): [AssignExpr] ... = ... -# 2048| Type = [IntType] int +# 2048| Type = [Struct] ValCat # 2048| ValueCategory = lvalue -# 2048| getLValue(): [VariableAccess] z -# 2048| Type = [IntType] int -# 2048| ValueCategory = lvalue -# 2048| getRValue(): [ConditionalExpr] ... ? ... : ... -# 2048| Type = [IntType] int +# 2048| getLValue(): [FunctionCall] call to lvalue +# 2048| Type = [LValueReferenceType] ValCat & # 2048| ValueCategory = prvalue -# 2048| getCondition(): [VariableAccess] a -# 2048| Type = [BoolType] bool -# 2048| ValueCategory = prvalue(load) -# 2048| getThen(): [Literal] 3 -# 2048| Type = [IntType] int -# 2048| Value = [Literal] 3 -# 2048| ValueCategory = prvalue -# 2048| getElse(): [Literal] 5 -# 2048| Type = [IntType] int -# 2048| Value = [Literal] 5 -# 2048| ValueCategory = prvalue -# 2049| getStmt(3): [ExprStmt] ExprStmt +# 2048| getRValue(): [ClassAggregateLiteral] {...} +# 2048| Type = [Struct] ValCat +# 2048| ValueCategory = prvalue +# 2048| getLValue().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 2048| Type = [Struct] ValCat +# 2048| ValueCategory = lvalue +#-----| getRValue().getFullyConverted(): [TemporaryObjectExpr] temporary object +#-----| Type = [Struct] ValCat +#-----| ValueCategory = prvalue(load) +# 2049| getStmt(5): [ExprStmt] ExprStmt # 2049| getExpr(): [AssignExpr] ... = ... -# 2049| Type = [IntType] int +# 2049| Type = [Struct] ValCat # 2049| ValueCategory = lvalue -# 2049| getLValue(): [ConditionalExpr] ... ? ... : ... -# 2049| Type = [IntType] int -# 2049| ValueCategory = lvalue -# 2049| getCondition(): [VariableAccess] a -# 2049| Type = [BoolType] bool -# 2049| ValueCategory = prvalue(load) -# 2049| getThen(): [VariableAccess] x -# 2049| Type = [IntType] int -# 2049| ValueCategory = lvalue -# 2049| getElse(): [VariableAccess] y -# 2049| Type = [IntType] int -# 2049| ValueCategory = lvalue -# 2049| getRValue(): [Literal] 7 -# 2049| Type = [IntType] int -# 2049| Value = [Literal] 7 +# 2049| getLValue(): [FunctionCall] call to xvalue +# 2049| Type = [RValueReferenceType] ValCat && # 2049| ValueCategory = prvalue -# 2049| getLValue().getFullyConverted(): [ParenthesisExpr] (...) -# 2049| Type = [IntType] int +# 2049| getRValue(): [ClassAggregateLiteral] {...} +# 2049| Type = [Struct] ValCat +# 2049| ValueCategory = prvalue +# 2049| getLValue().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 2049| Type = [Struct] ValCat # 2049| ValueCategory = lvalue -# 2050| getStmt(4): [ReturnStmt] return ... -# 2052| [CopyAssignmentOperator] TernaryPodObj& TernaryPodObj::operator=(TernaryPodObj const&) -# 2052| : +#-----| getRValue().getFullyConverted(): [TemporaryObjectExpr] temporary object +#-----| Type = [Struct] ValCat +#-----| ValueCategory = prvalue(load) +# 2050| getStmt(6): [ExprStmt] ExprStmt +# 2050| getExpr(): [AssignExpr] ... = ... +# 2050| Type = [Struct] ValCat +# 2050| ValueCategory = lvalue +# 2050| getLValue(): [FunctionCall] call to prvalue +# 2050| Type = [Struct] ValCat +# 2050| ValueCategory = prvalue +# 2050| getRValue(): [ClassAggregateLiteral] {...} +# 2050| Type = [Struct] ValCat +# 2050| ValueCategory = prvalue +# 2050| getLValue().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 2050| Type = [Struct] ValCat +# 2050| ValueCategory = lvalue +#-----| getRValue().getFullyConverted(): [TemporaryObjectExpr] temporary object +#-----| Type = [Struct] ValCat +#-----| ValueCategory = prvalue(load) +# 2051| getStmt(7): [ReturnStmt] return ... +# 2053| [TopLevelFunction] void SetStaticFuncPtr() +# 2053| : +# 2053| getEntryPoint(): [BlockStmt] { ... } +# 2054| getStmt(0): [DeclStmt] declaration +# 2054| getDeclarationEntry(0): [VariableDeclarationEntry] definition of c +# 2054| Type = [Class] C +# 2054| getVariable().getInitializer(): [Initializer] initializer for c +# 2054| getExpr(): [ConstructorCall] call to C +# 2054| Type = [VoidType] void +# 2054| ValueCategory = prvalue +# 2055| getStmt(1): [DeclStmt] declaration +# 2055| getDeclarationEntry(0): [VariableDeclarationEntry] definition of pfn +# 2055| Type = [FunctionPointerType] ..(*)(..) +# 2055| getVariable().getInitializer(): [Initializer] initializer for pfn +# 2055| getExpr(): [FunctionAccess] StaticMemberFunction +# 2055| Type = [FunctionPointerType] ..(*)(..) +# 2055| ValueCategory = prvalue(load) +# 2056| getStmt(2): [ExprStmt] ExprStmt +# 2056| getExpr(): [AssignExpr] ... = ... +# 2056| Type = [FunctionPointerType] ..(*)(..) +# 2056| ValueCategory = lvalue +# 2056| getLValue(): [VariableAccess] pfn +# 2056| Type = [FunctionPointerType] ..(*)(..) +# 2056| ValueCategory = lvalue +# 2056| getRValue(): [FunctionAccess] StaticMemberFunction +# 2056| Type = [FunctionPointerType] ..(*)(..) +# 2056| ValueCategory = prvalue(load) +# 2056| getQualifier(): [VariableAccess] c +# 2056| Type = [Class] C +# 2056| ValueCategory = lvalue +# 2057| getStmt(3): [ReturnStmt] return ... +# 2057| getImplicitDestructorCall(0): [DestructorCall] call to ~C +# 2057| Type = [VoidType] void +# 2057| ValueCategory = prvalue +# 2057| getQualifier(): [VariableAccess] c +# 2057| Type = [Class] C +# 2057| ValueCategory = lvalue +# 2059| [TopLevelFunction] void TernaryTestInt(bool, int, int, int) +# 2059| : +# 2059| getParameter(0): [Parameter] a +# 2059| Type = [BoolType] bool +# 2059| getParameter(1): [Parameter] x +# 2059| Type = [IntType] int +# 2059| getParameter(2): [Parameter] y +# 2059| Type = [IntType] int +# 2059| getParameter(3): [Parameter] z +# 2059| Type = [IntType] int +# 2059| getEntryPoint(): [BlockStmt] { ... } +# 2060| getStmt(0): [ExprStmt] ExprStmt +# 2060| getExpr(): [AssignExpr] ... = ... +# 2060| Type = [IntType] int +# 2060| ValueCategory = lvalue +# 2060| getLValue(): [VariableAccess] z +# 2060| Type = [IntType] int +# 2060| ValueCategory = lvalue +# 2060| getRValue(): [ConditionalExpr] ... ? ... : ... +# 2060| Type = [IntType] int +# 2060| ValueCategory = prvalue(load) +# 2060| getCondition(): [VariableAccess] a +# 2060| Type = [BoolType] bool +# 2060| ValueCategory = prvalue(load) +# 2060| getThen(): [VariableAccess] x +# 2060| Type = [IntType] int +# 2060| ValueCategory = prvalue(load) +# 2060| getElse(): [VariableAccess] y +# 2060| Type = [IntType] int +# 2060| ValueCategory = prvalue(load) +# 2061| getStmt(1): [ExprStmt] ExprStmt +# 2061| getExpr(): [AssignExpr] ... = ... +# 2061| Type = [IntType] int +# 2061| ValueCategory = lvalue +# 2061| getLValue(): [VariableAccess] z +# 2061| Type = [IntType] int +# 2061| ValueCategory = lvalue +# 2061| getRValue(): [ConditionalExpr] ... ? ... : ... +# 2061| Type = [IntType] int +# 2061| ValueCategory = prvalue(load) +# 2061| getCondition(): [VariableAccess] a +# 2061| Type = [BoolType] bool +# 2061| ValueCategory = prvalue(load) +# 2061| getThen(): [VariableAccess] x +# 2061| Type = [IntType] int +# 2061| ValueCategory = prvalue(load) +# 2061| getElse(): [Literal] 5 +# 2061| Type = [IntType] int +# 2061| Value = [Literal] 5 +# 2061| ValueCategory = prvalue +# 2062| getStmt(2): [ExprStmt] ExprStmt +# 2062| getExpr(): [AssignExpr] ... = ... +# 2062| Type = [IntType] int +# 2062| ValueCategory = lvalue +# 2062| getLValue(): [VariableAccess] z +# 2062| Type = [IntType] int +# 2062| ValueCategory = lvalue +# 2062| getRValue(): [ConditionalExpr] ... ? ... : ... +# 2062| Type = [IntType] int +# 2062| ValueCategory = prvalue +# 2062| getCondition(): [VariableAccess] a +# 2062| Type = [BoolType] bool +# 2062| ValueCategory = prvalue(load) +# 2062| getThen(): [Literal] 3 +# 2062| Type = [IntType] int +# 2062| Value = [Literal] 3 +# 2062| ValueCategory = prvalue +# 2062| getElse(): [Literal] 5 +# 2062| Type = [IntType] int +# 2062| Value = [Literal] 5 +# 2062| ValueCategory = prvalue +# 2063| getStmt(3): [ExprStmt] ExprStmt +# 2063| getExpr(): [AssignExpr] ... = ... +# 2063| Type = [IntType] int +# 2063| ValueCategory = lvalue +# 2063| getLValue(): [ConditionalExpr] ... ? ... : ... +# 2063| Type = [IntType] int +# 2063| ValueCategory = lvalue +# 2063| getCondition(): [VariableAccess] a +# 2063| Type = [BoolType] bool +# 2063| ValueCategory = prvalue(load) +# 2063| getThen(): [VariableAccess] x +# 2063| Type = [IntType] int +# 2063| ValueCategory = lvalue +# 2063| getElse(): [VariableAccess] y +# 2063| Type = [IntType] int +# 2063| ValueCategory = lvalue +# 2063| getRValue(): [Literal] 7 +# 2063| Type = [IntType] int +# 2063| Value = [Literal] 7 +# 2063| ValueCategory = prvalue +# 2063| getLValue().getFullyConverted(): [ParenthesisExpr] (...) +# 2063| Type = [IntType] int +# 2063| ValueCategory = lvalue +# 2064| getStmt(4): [ReturnStmt] return ... +# 2066| [CopyAssignmentOperator] TernaryPodObj& TernaryPodObj::operator=(TernaryPodObj const&) +# 2066| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const TernaryPodObj & -# 2052| [MoveAssignmentOperator] TernaryPodObj& TernaryPodObj::operator=(TernaryPodObj&&) -# 2052| : +# 2066| [MoveAssignmentOperator] TernaryPodObj& TernaryPodObj::operator=(TernaryPodObj&&) +# 2066| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] TernaryPodObj && -# 2055| [TopLevelFunction] void TernaryTestPodObj(bool, TernaryPodObj, TernaryPodObj, TernaryPodObj) -# 2055| : -# 2055| getParameter(0): [Parameter] a -# 2055| Type = [BoolType] bool -# 2055| getParameter(1): [Parameter] x -# 2055| Type = [Struct] TernaryPodObj -# 2055| getParameter(2): [Parameter] y -# 2055| Type = [Struct] TernaryPodObj -# 2055| getParameter(3): [Parameter] z -# 2055| Type = [Struct] TernaryPodObj -# 2055| getEntryPoint(): [BlockStmt] { ... } -# 2056| getStmt(0): [ExprStmt] ExprStmt -# 2056| getExpr(): [AssignExpr] ... = ... -# 2056| Type = [Struct] TernaryPodObj -# 2056| ValueCategory = lvalue -# 2056| getLValue(): [VariableAccess] z -# 2056| Type = [Struct] TernaryPodObj -# 2056| ValueCategory = lvalue -# 2056| getRValue(): [ConditionalExpr] ... ? ... : ... -# 2056| Type = [Struct] TernaryPodObj -# 2056| ValueCategory = prvalue(load) -# 2056| getCondition(): [VariableAccess] a -# 2056| Type = [BoolType] bool -# 2056| ValueCategory = prvalue(load) -# 2056| getThen(): [VariableAccess] x -# 2056| Type = [Struct] TernaryPodObj -# 2056| ValueCategory = prvalue(load) -# 2056| getElse(): [VariableAccess] y -# 2056| Type = [Struct] TernaryPodObj -# 2056| ValueCategory = prvalue(load) -# 2057| getStmt(1): [ExprStmt] ExprStmt -# 2057| getExpr(): [AssignExpr] ... = ... -# 2057| Type = [Struct] TernaryPodObj -# 2057| ValueCategory = lvalue -# 2057| getLValue(): [VariableAccess] z -# 2057| Type = [Struct] TernaryPodObj -# 2057| ValueCategory = lvalue -# 2057| getRValue(): [ConditionalExpr] ... ? ... : ... -# 2057| Type = [Struct] TernaryPodObj -# 2057| ValueCategory = prvalue -# 2057| getCondition(): [VariableAccess] a -# 2057| Type = [BoolType] bool -# 2057| ValueCategory = prvalue(load) -# 2057| getThen(): [VariableAccess] x -# 2057| Type = [Struct] TernaryPodObj -# 2057| ValueCategory = prvalue(load) -# 2057| getElse(): [Literal] 0 -# 2057| Type = [Struct] TernaryPodObj -# 2057| Value = [Literal] 0 -# 2057| ValueCategory = prvalue -# 2057| getThen().getFullyConverted(): [TemporaryObjectExpr] temporary object -# 2057| Type = [Struct] TernaryPodObj -# 2057| ValueCategory = prvalue(load) -# 2057| getElse().getFullyConverted(): [TemporaryObjectExpr] temporary object -# 2057| Type = [Struct] TernaryPodObj -# 2057| ValueCategory = prvalue(load) -# 2057| getRValue().getFullyConverted(): [TemporaryObjectExpr] temporary object -# 2057| Type = [Struct] TernaryPodObj -# 2057| ValueCategory = prvalue(load) -# 2058| getStmt(2): [ExprStmt] ExprStmt -# 2058| getExpr(): [AssignExpr] ... = ... -# 2058| Type = [Struct] TernaryPodObj -# 2058| ValueCategory = lvalue -# 2058| getLValue(): [VariableAccess] z -# 2058| Type = [Struct] TernaryPodObj -# 2058| ValueCategory = lvalue -# 2058| getRValue(): [ConditionalExpr] ... ? ... : ... -# 2058| Type = [Struct] TernaryPodObj -# 2058| ValueCategory = prvalue -# 2058| getCondition(): [VariableAccess] a -# 2058| Type = [BoolType] bool -# 2058| ValueCategory = prvalue(load) -# 2058| getThen(): [Literal] 0 -# 2058| Type = [Struct] TernaryPodObj -# 2058| Value = [Literal] 0 -# 2058| ValueCategory = prvalue -# 2058| getElse(): [Literal] 0 -# 2058| Type = [Struct] TernaryPodObj -# 2058| Value = [Literal] 0 -# 2058| ValueCategory = prvalue -# 2058| getThen().getFullyConverted(): [TemporaryObjectExpr] temporary object -# 2058| Type = [Struct] TernaryPodObj -# 2058| ValueCategory = prvalue(load) -# 2058| getElse().getFullyConverted(): [TemporaryObjectExpr] temporary object -# 2058| Type = [Struct] TernaryPodObj -# 2058| ValueCategory = prvalue(load) -# 2058| getRValue().getFullyConverted(): [TemporaryObjectExpr] temporary object -# 2058| Type = [Struct] TernaryPodObj -# 2058| ValueCategory = prvalue(load) -# 2059| getStmt(3): [ExprStmt] ExprStmt -# 2059| getExpr(): [AssignExpr] ... = ... -# 2059| Type = [Struct] TernaryPodObj -# 2059| ValueCategory = lvalue -# 2059| getLValue(): [AssignExpr] ... = ... -# 2059| Type = [Struct] TernaryPodObj -# 2059| ValueCategory = lvalue -# 2059| getLValue(): [VariableAccess] z -# 2059| Type = [Struct] TernaryPodObj -# 2059| ValueCategory = lvalue -# 2059| getRValue(): [ConditionalExpr] ... ? ... : ... -# 2059| Type = [Struct] TernaryPodObj -# 2059| ValueCategory = prvalue(load) -# 2059| getCondition(): [VariableAccess] a -# 2059| Type = [BoolType] bool -# 2059| ValueCategory = prvalue(load) -# 2059| getThen(): [VariableAccess] x -# 2059| Type = [Struct] TernaryPodObj -# 2059| ValueCategory = prvalue(load) -# 2059| getElse(): [VariableAccess] y -# 2059| Type = [Struct] TernaryPodObj -# 2059| ValueCategory = prvalue(load) -# 2059| getRValue(): [Literal] 0 -# 2059| Type = [Struct] TernaryPodObj -# 2059| Value = [Literal] 0 -# 2059| ValueCategory = prvalue -# 2059| getLValue().getFullyConverted(): [ParenthesisExpr] (...) -# 2059| Type = [Struct] TernaryPodObj -# 2059| ValueCategory = lvalue -# 2059| getRValue().getFullyConverted(): [TemporaryObjectExpr] temporary object -# 2059| Type = [Struct] TernaryPodObj -# 2059| ValueCategory = prvalue(load) -# 2060| getStmt(4): [ReturnStmt] return ... -# 2062| [CopyAssignmentOperator] TernaryNonPodObj& TernaryNonPodObj::operator=(TernaryNonPodObj const&) -# 2062| : +# 2069| [TopLevelFunction] void TernaryTestPodObj(bool, TernaryPodObj, TernaryPodObj, TernaryPodObj) +# 2069| : +# 2069| getParameter(0): [Parameter] a +# 2069| Type = [BoolType] bool +# 2069| getParameter(1): [Parameter] x +# 2069| Type = [Struct] TernaryPodObj +# 2069| getParameter(2): [Parameter] y +# 2069| Type = [Struct] TernaryPodObj +# 2069| getParameter(3): [Parameter] z +# 2069| Type = [Struct] TernaryPodObj +# 2069| getEntryPoint(): [BlockStmt] { ... } +# 2070| getStmt(0): [ExprStmt] ExprStmt +# 2070| getExpr(): [AssignExpr] ... = ... +# 2070| Type = [Struct] TernaryPodObj +# 2070| ValueCategory = lvalue +# 2070| getLValue(): [VariableAccess] z +# 2070| Type = [Struct] TernaryPodObj +# 2070| ValueCategory = lvalue +# 2070| getRValue(): [ConditionalExpr] ... ? ... : ... +# 2070| Type = [Struct] TernaryPodObj +# 2070| ValueCategory = prvalue(load) +# 2070| getCondition(): [VariableAccess] a +# 2070| Type = [BoolType] bool +# 2070| ValueCategory = prvalue(load) +# 2070| getThen(): [VariableAccess] x +# 2070| Type = [Struct] TernaryPodObj +# 2070| ValueCategory = prvalue(load) +# 2070| getElse(): [VariableAccess] y +# 2070| Type = [Struct] TernaryPodObj +# 2070| ValueCategory = prvalue(load) +# 2071| getStmt(1): [ExprStmt] ExprStmt +# 2071| getExpr(): [AssignExpr] ... = ... +# 2071| Type = [Struct] TernaryPodObj +# 2071| ValueCategory = lvalue +# 2071| getLValue(): [VariableAccess] z +# 2071| Type = [Struct] TernaryPodObj +# 2071| ValueCategory = lvalue +# 2071| getRValue(): [ConditionalExpr] ... ? ... : ... +# 2071| Type = [Struct] TernaryPodObj +# 2071| ValueCategory = prvalue +# 2071| getCondition(): [VariableAccess] a +# 2071| Type = [BoolType] bool +# 2071| ValueCategory = prvalue(load) +# 2071| getThen(): [VariableAccess] x +# 2071| Type = [Struct] TernaryPodObj +# 2071| ValueCategory = prvalue(load) +# 2071| getElse(): [Literal] 0 +# 2071| Type = [Struct] TernaryPodObj +# 2071| Value = [Literal] 0 +# 2071| ValueCategory = prvalue +# 2071| getThen().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 2071| Type = [Struct] TernaryPodObj +# 2071| ValueCategory = prvalue(load) +# 2071| getElse().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 2071| Type = [Struct] TernaryPodObj +# 2071| ValueCategory = prvalue(load) +# 2071| getRValue().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 2071| Type = [Struct] TernaryPodObj +# 2071| ValueCategory = prvalue(load) +# 2072| getStmt(2): [ExprStmt] ExprStmt +# 2072| getExpr(): [AssignExpr] ... = ... +# 2072| Type = [Struct] TernaryPodObj +# 2072| ValueCategory = lvalue +# 2072| getLValue(): [VariableAccess] z +# 2072| Type = [Struct] TernaryPodObj +# 2072| ValueCategory = lvalue +# 2072| getRValue(): [ConditionalExpr] ... ? ... : ... +# 2072| Type = [Struct] TernaryPodObj +# 2072| ValueCategory = prvalue +# 2072| getCondition(): [VariableAccess] a +# 2072| Type = [BoolType] bool +# 2072| ValueCategory = prvalue(load) +# 2072| getThen(): [Literal] 0 +# 2072| Type = [Struct] TernaryPodObj +# 2072| Value = [Literal] 0 +# 2072| ValueCategory = prvalue +# 2072| getElse(): [Literal] 0 +# 2072| Type = [Struct] TernaryPodObj +# 2072| Value = [Literal] 0 +# 2072| ValueCategory = prvalue +# 2072| getThen().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 2072| Type = [Struct] TernaryPodObj +# 2072| ValueCategory = prvalue(load) +# 2072| getElse().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 2072| Type = [Struct] TernaryPodObj +# 2072| ValueCategory = prvalue(load) +# 2072| getRValue().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 2072| Type = [Struct] TernaryPodObj +# 2072| ValueCategory = prvalue(load) +# 2073| getStmt(3): [ExprStmt] ExprStmt +# 2073| getExpr(): [AssignExpr] ... = ... +# 2073| Type = [Struct] TernaryPodObj +# 2073| ValueCategory = lvalue +# 2073| getLValue(): [AssignExpr] ... = ... +# 2073| Type = [Struct] TernaryPodObj +# 2073| ValueCategory = lvalue +# 2073| getLValue(): [VariableAccess] z +# 2073| Type = [Struct] TernaryPodObj +# 2073| ValueCategory = lvalue +# 2073| getRValue(): [ConditionalExpr] ... ? ... : ... +# 2073| Type = [Struct] TernaryPodObj +# 2073| ValueCategory = prvalue(load) +# 2073| getCondition(): [VariableAccess] a +# 2073| Type = [BoolType] bool +# 2073| ValueCategory = prvalue(load) +# 2073| getThen(): [VariableAccess] x +# 2073| Type = [Struct] TernaryPodObj +# 2073| ValueCategory = prvalue(load) +# 2073| getElse(): [VariableAccess] y +# 2073| Type = [Struct] TernaryPodObj +# 2073| ValueCategory = prvalue(load) +# 2073| getRValue(): [Literal] 0 +# 2073| Type = [Struct] TernaryPodObj +# 2073| Value = [Literal] 0 +# 2073| ValueCategory = prvalue +# 2073| getLValue().getFullyConverted(): [ParenthesisExpr] (...) +# 2073| Type = [Struct] TernaryPodObj +# 2073| ValueCategory = lvalue +# 2073| getRValue().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 2073| Type = [Struct] TernaryPodObj +# 2073| ValueCategory = prvalue(load) +# 2074| getStmt(4): [ReturnStmt] return ... +# 2076| [CopyAssignmentOperator] TernaryNonPodObj& TernaryNonPodObj::operator=(TernaryNonPodObj const&) +# 2076| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const TernaryNonPodObj & #-----| getEntryPoint(): [BlockStmt] { ... } @@ -16125,1391 +16445,977 @@ ir.cpp: #-----| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) #-----| Type = [LValueReferenceType] TernaryNonPodObj & #-----| ValueCategory = prvalue -# 2062| [Constructor] void TernaryNonPodObj::TernaryNonPodObj() -# 2062| : -# 2062| : -# 2062| getEntryPoint(): [BlockStmt] { ... } -# 2062| getStmt(0): [ReturnStmt] return ... -# 2062| [CopyConstructor] void TernaryNonPodObj::TernaryNonPodObj(TernaryNonPodObj const&) -# 2062| : +# 2076| [Constructor] void TernaryNonPodObj::TernaryNonPodObj() +# 2076| : +# 2076| : +# 2076| getEntryPoint(): [BlockStmt] { ... } +# 2076| getStmt(0): [ReturnStmt] return ... +# 2076| [CopyConstructor] void TernaryNonPodObj::TernaryNonPodObj(TernaryNonPodObj const&) +# 2076| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const TernaryNonPodObj & -# 2062| : -# 2062| getEntryPoint(): [BlockStmt] { ... } -# 2062| getStmt(0): [ReturnStmt] return ... -# 2063| [Destructor,VirtualFunction] void TernaryNonPodObj::~TernaryNonPodObj() -# 2063| : -# 2063| getEntryPoint(): [BlockStmt] { ... } -# 2063| getStmt(0): [ReturnStmt] return ... -# 2063| : -# 2066| [TopLevelFunction] void TernaryTestNonPodObj(bool, TernaryNonPodObj, TernaryNonPodObj, TernaryNonPodObj) -# 2066| : -# 2066| getParameter(0): [Parameter] a -# 2066| Type = [BoolType] bool -# 2066| getParameter(1): [Parameter] x -# 2066| Type = [Struct] TernaryNonPodObj -# 2066| getParameter(2): [Parameter] y -# 2066| Type = [Struct] TernaryNonPodObj -# 2066| getParameter(3): [Parameter] z -# 2066| Type = [Struct] TernaryNonPodObj -# 2066| getEntryPoint(): [BlockStmt] { ... } -# 2067| getStmt(0): [ExprStmt] ExprStmt -# 2067| getExpr(): [FunctionCall] call to operator= -# 2067| Type = [LValueReferenceType] TernaryNonPodObj & -# 2067| ValueCategory = prvalue -# 2067| getQualifier(): [VariableAccess] z -# 2067| Type = [Struct] TernaryNonPodObj -# 2067| ValueCategory = lvalue -# 2067| getArgument(0): [ConditionalExpr] ... ? ... : ... -# 2067| Type = [Struct] TernaryNonPodObj -# 2067| ValueCategory = lvalue -# 2067| getCondition(): [VariableAccess] a -# 2067| Type = [BoolType] bool -# 2067| ValueCategory = prvalue(load) -# 2067| getThen(): [VariableAccess] x -# 2067| Type = [Struct] TernaryNonPodObj -# 2067| ValueCategory = lvalue -# 2067| getElse(): [VariableAccess] y -# 2067| Type = [Struct] TernaryNonPodObj -# 2067| ValueCategory = lvalue -# 2067| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) -# 2067| Type = [LValueReferenceType] const TernaryNonPodObj & -# 2067| ValueCategory = prvalue -# 2067| getExpr(): [CStyleCast] (const TernaryNonPodObj)... -# 2067| Conversion = [GlvalueConversion] glvalue conversion -# 2067| Type = [SpecifiedType] const TernaryNonPodObj -# 2067| ValueCategory = lvalue -# 2067| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 2067| Type = [Struct] TernaryNonPodObj -# 2067| ValueCategory = lvalue -# 2068| getStmt(1): [ExprStmt] ExprStmt -# 2068| getExpr(): [FunctionCall] call to operator= -# 2068| Type = [LValueReferenceType] TernaryNonPodObj & -# 2068| ValueCategory = prvalue -# 2068| getQualifier(): [VariableAccess] z -# 2068| Type = [Struct] TernaryNonPodObj -# 2068| ValueCategory = lvalue -# 2068| getArgument(0): [ConditionalExpr] ... ? ... : ... -# 2068| Type = [Struct] TernaryNonPodObj -# 2068| ValueCategory = prvalue -# 2068| getCondition(): [VariableAccess] a -# 2068| Type = [BoolType] bool -# 2068| ValueCategory = prvalue(load) -# 2068| getThen(): [ConstructorCall] call to TernaryNonPodObj -# 2068| Type = [VoidType] void -# 2068| ValueCategory = prvalue -# 2068| getArgument(0): [VariableAccess] x -# 2068| Type = [Struct] TernaryNonPodObj -# 2068| ValueCategory = lvalue -# 2068| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) -# 2068| Type = [LValueReferenceType] const TernaryNonPodObj & -# 2068| ValueCategory = prvalue -# 2068| getExpr(): [CStyleCast] (const TernaryNonPodObj)... -# 2068| Conversion = [GlvalueConversion] glvalue conversion -# 2068| Type = [SpecifiedType] const TernaryNonPodObj -# 2068| ValueCategory = lvalue -# 2068| getElse(): [ConstructorCall] call to TernaryNonPodObj -# 2068| Type = [VoidType] void -# 2068| ValueCategory = prvalue -# 2068| getThen().getFullyConverted(): [TemporaryObjectExpr] temporary object -# 2068| Type = [Struct] TernaryNonPodObj -# 2068| ValueCategory = prvalue(load) -# 2068| getElse().getFullyConverted(): [TemporaryObjectExpr] temporary object -# 2068| Type = [Struct] TernaryNonPodObj -# 2068| ValueCategory = prvalue(load) -# 2068| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) -# 2068| Type = [LValueReferenceType] const TernaryNonPodObj & -# 2068| ValueCategory = prvalue -# 2068| getExpr(): [CStyleCast] (const TernaryNonPodObj)... -# 2068| Conversion = [GlvalueConversion] glvalue conversion -# 2068| Type = [SpecifiedType] const TernaryNonPodObj -# 2068| ValueCategory = lvalue -# 2068| getExpr(): [TemporaryObjectExpr] temporary object -# 2068| Type = [Struct] TernaryNonPodObj -# 2068| ValueCategory = lvalue -# 2068| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 2068| Type = [Struct] TernaryNonPodObj -# 2068| ValueCategory = lvalue -# 2069| getStmt(2): [ExprStmt] ExprStmt -# 2069| getExpr(): [FunctionCall] call to operator= -# 2069| Type = [LValueReferenceType] TernaryNonPodObj & -# 2069| ValueCategory = prvalue -# 2069| getQualifier(): [VariableAccess] z -# 2069| Type = [Struct] TernaryNonPodObj -# 2069| ValueCategory = lvalue -# 2069| getArgument(0): [ConditionalExpr] ... ? ... : ... -# 2069| Type = [Struct] TernaryNonPodObj -# 2069| ValueCategory = prvalue -# 2069| getCondition(): [VariableAccess] a -# 2069| Type = [BoolType] bool -# 2069| ValueCategory = prvalue(load) -# 2069| getThen(): [ConstructorCall] call to TernaryNonPodObj -# 2069| Type = [VoidType] void -# 2069| ValueCategory = prvalue -# 2069| getElse(): [ConstructorCall] call to TernaryNonPodObj -# 2069| Type = [VoidType] void -# 2069| ValueCategory = prvalue -# 2069| getThen().getFullyConverted(): [TemporaryObjectExpr] temporary object -# 2069| Type = [Struct] TernaryNonPodObj -# 2069| ValueCategory = prvalue(load) -# 2069| getElse().getFullyConverted(): [TemporaryObjectExpr] temporary object -# 2069| Type = [Struct] TernaryNonPodObj -# 2069| ValueCategory = prvalue(load) -# 2069| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) -# 2069| Type = [LValueReferenceType] const TernaryNonPodObj & -# 2069| ValueCategory = prvalue -# 2069| getExpr(): [CStyleCast] (const TernaryNonPodObj)... -# 2069| Conversion = [GlvalueConversion] glvalue conversion -# 2069| Type = [SpecifiedType] const TernaryNonPodObj -# 2069| ValueCategory = lvalue -# 2069| getExpr(): [TemporaryObjectExpr] temporary object -# 2069| Type = [Struct] TernaryNonPodObj -# 2069| ValueCategory = lvalue -# 2069| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 2069| Type = [Struct] TernaryNonPodObj -# 2069| ValueCategory = lvalue -# 2070| getStmt(3): [ExprStmt] ExprStmt -# 2070| getExpr(): [FunctionCall] call to operator= -# 2070| Type = [LValueReferenceType] TernaryNonPodObj & -# 2070| ValueCategory = prvalue -# 2070| getQualifier(): [FunctionCall] call to operator= -# 2070| Type = [LValueReferenceType] TernaryNonPodObj & -# 2070| ValueCategory = prvalue -# 2070| getQualifier(): [VariableAccess] z -# 2070| Type = [Struct] TernaryNonPodObj -# 2070| ValueCategory = lvalue -# 2070| getArgument(0): [ConditionalExpr] ... ? ... : ... -# 2070| Type = [Struct] TernaryNonPodObj -# 2070| ValueCategory = lvalue -# 2070| getCondition(): [VariableAccess] a -# 2070| Type = [BoolType] bool -# 2070| ValueCategory = prvalue(load) -# 2070| getThen(): [VariableAccess] x -# 2070| Type = [Struct] TernaryNonPodObj -# 2070| ValueCategory = lvalue -# 2070| getElse(): [VariableAccess] y -# 2070| Type = [Struct] TernaryNonPodObj -# 2070| ValueCategory = lvalue -# 2070| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) -# 2070| Type = [LValueReferenceType] const TernaryNonPodObj & -# 2070| ValueCategory = prvalue -# 2070| getExpr(): [CStyleCast] (const TernaryNonPodObj)... -# 2070| Conversion = [GlvalueConversion] glvalue conversion -# 2070| Type = [SpecifiedType] const TernaryNonPodObj -# 2070| ValueCategory = lvalue -# 2070| getArgument(0): [ConstructorCall] call to TernaryNonPodObj -# 2070| Type = [VoidType] void -# 2070| ValueCategory = prvalue -# 2070| getQualifier().getFullyConverted(): [ParenthesisExpr] (...) -# 2070| Type = [Struct] TernaryNonPodObj -# 2070| ValueCategory = lvalue -# 2070| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -# 2070| Type = [Struct] TernaryNonPodObj -# 2070| ValueCategory = lvalue -# 2070| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) -# 2070| Type = [LValueReferenceType] const TernaryNonPodObj & -# 2070| ValueCategory = prvalue -# 2070| getExpr(): [CStyleCast] (const TernaryNonPodObj)... -# 2070| Conversion = [GlvalueConversion] glvalue conversion -# 2070| Type = [SpecifiedType] const TernaryNonPodObj -# 2070| ValueCategory = lvalue -# 2070| getExpr(): [TemporaryObjectExpr] temporary object -# 2070| Type = [Struct] TernaryNonPodObj -# 2070| ValueCategory = lvalue -# 2070| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 2070| Type = [Struct] TernaryNonPodObj -# 2070| ValueCategory = lvalue -# 2071| getStmt(4): [ReturnStmt] return ... -# 2073| [TopLevelFunction] void CommaTestHelper(unsigned int) -# 2073| : -# 2073| getParameter(0): [Parameter] (unnamed parameter 0) -# 2073| Type = [IntType] unsigned int -# 2075| [TopLevelFunction] unsigned int CommaTest(unsigned int) -# 2075| : -# 2075| getParameter(0): [Parameter] x -# 2075| Type = [IntType] unsigned int -# 2075| getEntryPoint(): [BlockStmt] { ... } -# 2076| getStmt(0): [DeclStmt] declaration -# 2076| getDeclarationEntry(0): [VariableDeclarationEntry] definition of y -# 2076| Type = [IntType] unsigned int -# 2077| getStmt(1): [ExprStmt] ExprStmt -# 2077| getExpr(): [AssignExpr] ... = ... -# 2077| Type = [IntType] unsigned int -# 2077| ValueCategory = lvalue -# 2077| getLValue(): [VariableAccess] y -# 2077| Type = [IntType] unsigned int -# 2077| ValueCategory = lvalue -# 2077| getRValue(): [ConditionalExpr] ... ? ... : ... -# 2077| Type = [IntType] unsigned int -# 2077| ValueCategory = prvalue(load) -# 2077| getCondition(): [LTExpr] ... < ... -# 2077| Type = [BoolType] bool -# 2077| ValueCategory = prvalue -# 2077| getLesserOperand(): [VariableAccess] x -# 2077| Type = [IntType] unsigned int -# 2077| ValueCategory = prvalue(load) -# 2077| getGreaterOperand(): [Literal] 100 -# 2077| Type = [IntType] int -# 2077| Value = [Literal] 100 -# 2077| ValueCategory = prvalue -# 2077| getGreaterOperand().getFullyConverted(): [CStyleCast] (unsigned int)... -# 2077| Conversion = [IntegralConversion] integral conversion -# 2077| Type = [IntType] unsigned int -# 2077| Value = [CStyleCast] 100 -# 2077| ValueCategory = prvalue -# 2078| getThen(): [CommaExpr] ... , ... -# 2078| Type = [IntType] unsigned int -# 2078| ValueCategory = prvalue(load) -# 2078| getLeftOperand(): [FunctionCall] call to CommaTestHelper -# 2078| Type = [VoidType] void -# 2078| ValueCategory = prvalue -# 2078| getArgument(0): [VariableAccess] x -# 2078| Type = [IntType] unsigned int -# 2078| ValueCategory = prvalue(load) -# 2078| getRightOperand(): [VariableAccess] x -# 2078| Type = [IntType] unsigned int -# 2078| ValueCategory = prvalue(load) -# 2079| getElse(): [CommaExpr] ... , ... -# 2079| Type = [IntType] int -# 2079| ValueCategory = prvalue -# 2079| getLeftOperand(): [FunctionCall] call to CommaTestHelper -# 2079| Type = [VoidType] void -# 2079| ValueCategory = prvalue -# 2079| getArgument(0): [VariableAccess] x -# 2079| Type = [IntType] unsigned int -# 2079| ValueCategory = prvalue(load) -# 2079| getRightOperand(): [Literal] 10 -# 2079| Type = [IntType] int -# 2079| Value = [Literal] 10 -# 2079| ValueCategory = prvalue -# 2078| getThen().getFullyConverted(): [ParenthesisExpr] (...) -# 2078| Type = [IntType] unsigned int -# 2078| ValueCategory = prvalue(load) -# 2079| getElse().getFullyConverted(): [CStyleCast] (unsigned int)... -# 2079| Conversion = [IntegralConversion] integral conversion -# 2079| Type = [IntType] unsigned int -# 2079| ValueCategory = prvalue -# 2079| getExpr(): [ParenthesisExpr] (...) -# 2079| Type = [IntType] int -# 2079| ValueCategory = prvalue -# 2080| getStmt(2): [ReturnStmt] return ... -# 2082| [TopLevelFunction] void NewDeleteMem() -# 2082| : -# 2082| getEntryPoint(): [BlockStmt] { ... } -# 2083| getStmt(0): [DeclStmt] declaration -# 2083| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x -# 2083| Type = [IntPointerType] int * -# 2083| getVariable().getInitializer(): [Initializer] initializer for x -# 2083| getExpr(): [NewExpr] new -# 2083| Type = [IntPointerType] int * +# 2076| : +# 2076| getEntryPoint(): [BlockStmt] { ... } +# 2076| getStmt(0): [ReturnStmt] return ... +# 2077| [Destructor,VirtualFunction] void TernaryNonPodObj::~TernaryNonPodObj() +# 2077| : +# 2077| getEntryPoint(): [BlockStmt] { ... } +# 2077| getStmt(0): [ReturnStmt] return ... +# 2077| : +# 2080| [TopLevelFunction] void TernaryTestNonPodObj(bool, TernaryNonPodObj, TernaryNonPodObj, TernaryNonPodObj) +# 2080| : +# 2080| getParameter(0): [Parameter] a +# 2080| Type = [BoolType] bool +# 2080| getParameter(1): [Parameter] x +# 2080| Type = [Struct] TernaryNonPodObj +# 2080| getParameter(2): [Parameter] y +# 2080| Type = [Struct] TernaryNonPodObj +# 2080| getParameter(3): [Parameter] z +# 2080| Type = [Struct] TernaryNonPodObj +# 2080| getEntryPoint(): [BlockStmt] { ... } +# 2081| getStmt(0): [ExprStmt] ExprStmt +# 2081| getExpr(): [FunctionCall] call to operator= +# 2081| Type = [LValueReferenceType] TernaryNonPodObj & +# 2081| ValueCategory = prvalue +# 2081| getQualifier(): [VariableAccess] z +# 2081| Type = [Struct] TernaryNonPodObj +# 2081| ValueCategory = lvalue +# 2081| getArgument(0): [ConditionalExpr] ... ? ... : ... +# 2081| Type = [Struct] TernaryNonPodObj +# 2081| ValueCategory = lvalue +# 2081| getCondition(): [VariableAccess] a +# 2081| Type = [BoolType] bool +# 2081| ValueCategory = prvalue(load) +# 2081| getThen(): [VariableAccess] x +# 2081| Type = [Struct] TernaryNonPodObj +# 2081| ValueCategory = lvalue +# 2081| getElse(): [VariableAccess] y +# 2081| Type = [Struct] TernaryNonPodObj +# 2081| ValueCategory = lvalue +# 2081| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) +# 2081| Type = [LValueReferenceType] const TernaryNonPodObj & +# 2081| ValueCategory = prvalue +# 2081| getExpr(): [CStyleCast] (const TernaryNonPodObj)... +# 2081| Conversion = [GlvalueConversion] glvalue conversion +# 2081| Type = [SpecifiedType] const TernaryNonPodObj +# 2081| ValueCategory = lvalue +# 2081| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 2081| Type = [Struct] TernaryNonPodObj +# 2081| ValueCategory = lvalue +# 2082| getStmt(1): [ExprStmt] ExprStmt +# 2082| getExpr(): [FunctionCall] call to operator= +# 2082| Type = [LValueReferenceType] TernaryNonPodObj & +# 2082| ValueCategory = prvalue +# 2082| getQualifier(): [VariableAccess] z +# 2082| Type = [Struct] TernaryNonPodObj +# 2082| ValueCategory = lvalue +# 2082| getArgument(0): [ConditionalExpr] ... ? ... : ... +# 2082| Type = [Struct] TernaryNonPodObj +# 2082| ValueCategory = prvalue +# 2082| getCondition(): [VariableAccess] a +# 2082| Type = [BoolType] bool +# 2082| ValueCategory = prvalue(load) +# 2082| getThen(): [ConstructorCall] call to TernaryNonPodObj +# 2082| Type = [VoidType] void +# 2082| ValueCategory = prvalue +# 2082| getArgument(0): [VariableAccess] x +# 2082| Type = [Struct] TernaryNonPodObj +# 2082| ValueCategory = lvalue +# 2082| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) +# 2082| Type = [LValueReferenceType] const TernaryNonPodObj & +# 2082| ValueCategory = prvalue +# 2082| getExpr(): [CStyleCast] (const TernaryNonPodObj)... +# 2082| Conversion = [GlvalueConversion] glvalue conversion +# 2082| Type = [SpecifiedType] const TernaryNonPodObj +# 2082| ValueCategory = lvalue +# 2082| getElse(): [ConstructorCall] call to TernaryNonPodObj +# 2082| Type = [VoidType] void +# 2082| ValueCategory = prvalue +# 2082| getThen().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 2082| Type = [Struct] TernaryNonPodObj +# 2082| ValueCategory = prvalue(load) +# 2082| getElse().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 2082| Type = [Struct] TernaryNonPodObj +# 2082| ValueCategory = prvalue(load) +# 2082| getImplicitDestructorCall(0): [DestructorCall] call to ~TernaryNonPodObj +# 2082| Type = [VoidType] void +# 2082| ValueCategory = prvalue +# 2082| getQualifier(): [ReuseExpr] reuse of temporary object +# 2082| Type = [Struct] TernaryNonPodObj +# 2082| ValueCategory = xvalue +# 2082| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) +# 2082| Type = [LValueReferenceType] const TernaryNonPodObj & +# 2082| ValueCategory = prvalue +# 2082| getExpr(): [CStyleCast] (const TernaryNonPodObj)... +# 2082| Conversion = [GlvalueConversion] glvalue conversion +# 2082| Type = [SpecifiedType] const TernaryNonPodObj +# 2082| ValueCategory = lvalue +# 2082| getExpr(): [TemporaryObjectExpr] temporary object +# 2082| Type = [Struct] TernaryNonPodObj +# 2082| ValueCategory = lvalue +# 2082| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 2082| Type = [Struct] TernaryNonPodObj +# 2082| ValueCategory = lvalue +# 2083| getStmt(2): [ExprStmt] ExprStmt +# 2083| getExpr(): [FunctionCall] call to operator= +# 2083| Type = [LValueReferenceType] TernaryNonPodObj & +# 2083| ValueCategory = prvalue +# 2083| getQualifier(): [VariableAccess] z +# 2083| Type = [Struct] TernaryNonPodObj +# 2083| ValueCategory = lvalue +# 2083| getArgument(0): [ConditionalExpr] ... ? ... : ... +# 2083| Type = [Struct] TernaryNonPodObj +# 2083| ValueCategory = prvalue +# 2083| getCondition(): [VariableAccess] a +# 2083| Type = [BoolType] bool +# 2083| ValueCategory = prvalue(load) +# 2083| getThen(): [ConstructorCall] call to TernaryNonPodObj +# 2083| Type = [VoidType] void # 2083| ValueCategory = prvalue -# 2084| getStmt(1): [ExprStmt] ExprStmt -# 2084| getExpr(): [AssignExpr] ... = ... -# 2084| Type = [IntType] int -# 2084| ValueCategory = lvalue -# 2084| getLValue(): [PointerDereferenceExpr] * ... -# 2084| Type = [IntType] int -# 2084| ValueCategory = lvalue -# 2084| getOperand(): [VariableAccess] x -# 2084| Type = [IntPointerType] int * -# 2084| ValueCategory = prvalue(load) -# 2084| getRValue(): [Literal] 6 -# 2084| Type = [IntType] int -# 2084| Value = [Literal] 6 +# 2083| getElse(): [ConstructorCall] call to TernaryNonPodObj +# 2083| Type = [VoidType] void +# 2083| ValueCategory = prvalue +# 2083| getThen().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 2083| Type = [Struct] TernaryNonPodObj +# 2083| ValueCategory = prvalue(load) +# 2083| getElse().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 2083| Type = [Struct] TernaryNonPodObj +# 2083| ValueCategory = prvalue(load) +# 2083| getImplicitDestructorCall(0): [DestructorCall] call to ~TernaryNonPodObj +# 2083| Type = [VoidType] void +# 2083| ValueCategory = prvalue +# 2083| getQualifier(): [ReuseExpr] reuse of temporary object +# 2083| Type = [Struct] TernaryNonPodObj +# 2083| ValueCategory = xvalue +# 2083| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) +# 2083| Type = [LValueReferenceType] const TernaryNonPodObj & +# 2083| ValueCategory = prvalue +# 2083| getExpr(): [CStyleCast] (const TernaryNonPodObj)... +# 2083| Conversion = [GlvalueConversion] glvalue conversion +# 2083| Type = [SpecifiedType] const TernaryNonPodObj +# 2083| ValueCategory = lvalue +# 2083| getExpr(): [TemporaryObjectExpr] temporary object +# 2083| Type = [Struct] TernaryNonPodObj +# 2083| ValueCategory = lvalue +# 2083| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 2083| Type = [Struct] TernaryNonPodObj +# 2083| ValueCategory = lvalue +# 2084| getStmt(3): [ExprStmt] ExprStmt +# 2084| getExpr(): [FunctionCall] call to operator= +# 2084| Type = [LValueReferenceType] TernaryNonPodObj & +# 2084| ValueCategory = prvalue +# 2084| getQualifier(): [FunctionCall] call to operator= +# 2084| Type = [LValueReferenceType] TernaryNonPodObj & # 2084| ValueCategory = prvalue -# 2085| getStmt(2): [ExprStmt] ExprStmt -# 2085| getExpr(): [DeleteExpr] delete -# 2085| Type = [VoidType] void -# 2085| ValueCategory = prvalue -# 2085| getExpr(): [VariableAccess] x -# 2085| Type = [IntPointerType] int * -# 2085| ValueCategory = prvalue(load) -# 2086| getStmt(3): [ReturnStmt] return ... -# 2088| [CopyAssignmentOperator] Base2& Base2::operator=(Base2 const&) -# 2088| : +# 2084| getQualifier(): [VariableAccess] z +# 2084| Type = [Struct] TernaryNonPodObj +# 2084| ValueCategory = lvalue +# 2084| getArgument(0): [ConditionalExpr] ... ? ... : ... +# 2084| Type = [Struct] TernaryNonPodObj +# 2084| ValueCategory = lvalue +# 2084| getCondition(): [VariableAccess] a +# 2084| Type = [BoolType] bool +# 2084| ValueCategory = prvalue(load) +# 2084| getThen(): [VariableAccess] x +# 2084| Type = [Struct] TernaryNonPodObj +# 2084| ValueCategory = lvalue +# 2084| getElse(): [VariableAccess] y +# 2084| Type = [Struct] TernaryNonPodObj +# 2084| ValueCategory = lvalue +# 2084| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) +# 2084| Type = [LValueReferenceType] const TernaryNonPodObj & +# 2084| ValueCategory = prvalue +# 2084| getExpr(): [CStyleCast] (const TernaryNonPodObj)... +# 2084| Conversion = [GlvalueConversion] glvalue conversion +# 2084| Type = [SpecifiedType] const TernaryNonPodObj +# 2084| ValueCategory = lvalue +# 2084| getArgument(0): [ConstructorCall] call to TernaryNonPodObj +# 2084| Type = [VoidType] void +# 2084| ValueCategory = prvalue +# 2084| getImplicitDestructorCall(0): [DestructorCall] call to ~TernaryNonPodObj +# 2084| Type = [VoidType] void +# 2084| ValueCategory = prvalue +# 2084| getQualifier(): [ReuseExpr] reuse of temporary object +# 2084| Type = [Struct] TernaryNonPodObj +# 2084| ValueCategory = xvalue +# 2084| getQualifier().getFullyConverted(): [ParenthesisExpr] (...) +# 2084| Type = [Struct] TernaryNonPodObj +# 2084| ValueCategory = lvalue +# 2084| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +# 2084| Type = [Struct] TernaryNonPodObj +# 2084| ValueCategory = lvalue +# 2084| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) +# 2084| Type = [LValueReferenceType] const TernaryNonPodObj & +# 2084| ValueCategory = prvalue +# 2084| getExpr(): [CStyleCast] (const TernaryNonPodObj)... +# 2084| Conversion = [GlvalueConversion] glvalue conversion +# 2084| Type = [SpecifiedType] const TernaryNonPodObj +# 2084| ValueCategory = lvalue +# 2084| getExpr(): [TemporaryObjectExpr] temporary object +# 2084| Type = [Struct] TernaryNonPodObj +# 2084| ValueCategory = lvalue +# 2084| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 2084| Type = [Struct] TernaryNonPodObj +# 2084| ValueCategory = lvalue +# 2085| getStmt(4): [ReturnStmt] return ... +# 2087| [TopLevelFunction] void CommaTestHelper(unsigned int) +# 2087| : +# 2087| getParameter(0): [Parameter] (unnamed parameter 0) +# 2087| Type = [IntType] unsigned int +# 2089| [TopLevelFunction] unsigned int CommaTest(unsigned int) +# 2089| : +# 2089| getParameter(0): [Parameter] x +# 2089| Type = [IntType] unsigned int +# 2089| getEntryPoint(): [BlockStmt] { ... } +# 2090| getStmt(0): [DeclStmt] declaration +# 2090| getDeclarationEntry(0): [VariableDeclarationEntry] definition of y +# 2090| Type = [IntType] unsigned int +# 2091| getStmt(1): [ExprStmt] ExprStmt +# 2091| getExpr(): [AssignExpr] ... = ... +# 2091| Type = [IntType] unsigned int +# 2091| ValueCategory = lvalue +# 2091| getLValue(): [VariableAccess] y +# 2091| Type = [IntType] unsigned int +# 2091| ValueCategory = lvalue +# 2091| getRValue(): [ConditionalExpr] ... ? ... : ... +# 2091| Type = [IntType] unsigned int +# 2091| ValueCategory = prvalue(load) +# 2091| getCondition(): [LTExpr] ... < ... +# 2091| Type = [BoolType] bool +# 2091| ValueCategory = prvalue +# 2091| getLesserOperand(): [VariableAccess] x +# 2091| Type = [IntType] unsigned int +# 2091| ValueCategory = prvalue(load) +# 2091| getGreaterOperand(): [Literal] 100 +# 2091| Type = [IntType] int +# 2091| Value = [Literal] 100 +# 2091| ValueCategory = prvalue +# 2091| getGreaterOperand().getFullyConverted(): [CStyleCast] (unsigned int)... +# 2091| Conversion = [IntegralConversion] integral conversion +# 2091| Type = [IntType] unsigned int +# 2091| Value = [CStyleCast] 100 +# 2091| ValueCategory = prvalue +# 2092| getThen(): [CommaExpr] ... , ... +# 2092| Type = [IntType] unsigned int +# 2092| ValueCategory = prvalue(load) +# 2092| getLeftOperand(): [FunctionCall] call to CommaTestHelper +# 2092| Type = [VoidType] void +# 2092| ValueCategory = prvalue +# 2092| getArgument(0): [VariableAccess] x +# 2092| Type = [IntType] unsigned int +# 2092| ValueCategory = prvalue(load) +# 2092| getRightOperand(): [VariableAccess] x +# 2092| Type = [IntType] unsigned int +# 2092| ValueCategory = prvalue(load) +# 2093| getElse(): [CommaExpr] ... , ... +# 2093| Type = [IntType] int +# 2093| ValueCategory = prvalue +# 2093| getLeftOperand(): [FunctionCall] call to CommaTestHelper +# 2093| Type = [VoidType] void +# 2093| ValueCategory = prvalue +# 2093| getArgument(0): [VariableAccess] x +# 2093| Type = [IntType] unsigned int +# 2093| ValueCategory = prvalue(load) +# 2093| getRightOperand(): [Literal] 10 +# 2093| Type = [IntType] int +# 2093| Value = [Literal] 10 +# 2093| ValueCategory = prvalue +# 2092| getThen().getFullyConverted(): [ParenthesisExpr] (...) +# 2092| Type = [IntType] unsigned int +# 2092| ValueCategory = prvalue(load) +# 2093| getElse().getFullyConverted(): [CStyleCast] (unsigned int)... +# 2093| Conversion = [IntegralConversion] integral conversion +# 2093| Type = [IntType] unsigned int +# 2093| ValueCategory = prvalue +# 2093| getExpr(): [ParenthesisExpr] (...) +# 2093| Type = [IntType] int +# 2093| ValueCategory = prvalue +# 2094| getStmt(2): [ReturnStmt] return ... +# 2096| [TopLevelFunction] void NewDeleteMem() +# 2096| : +# 2096| getEntryPoint(): [BlockStmt] { ... } +# 2097| getStmt(0): [DeclStmt] declaration +# 2097| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x +# 2097| Type = [IntPointerType] int * +# 2097| getVariable().getInitializer(): [Initializer] initializer for x +# 2097| getExpr(): [NewExpr] new +# 2097| Type = [IntPointerType] int * +# 2097| ValueCategory = prvalue +# 2098| getStmt(1): [ExprStmt] ExprStmt +# 2098| getExpr(): [AssignExpr] ... = ... +# 2098| Type = [IntType] int +# 2098| ValueCategory = lvalue +# 2098| getLValue(): [PointerDereferenceExpr] * ... +# 2098| Type = [IntType] int +# 2098| ValueCategory = lvalue +# 2098| getOperand(): [VariableAccess] x +# 2098| Type = [IntPointerType] int * +# 2098| ValueCategory = prvalue(load) +# 2098| getRValue(): [Literal] 6 +# 2098| Type = [IntType] int +# 2098| Value = [Literal] 6 +# 2098| ValueCategory = prvalue +# 2099| getStmt(2): [ExprStmt] ExprStmt +# 2099| getExpr(): [DeleteExpr] delete +# 2099| Type = [VoidType] void +# 2099| ValueCategory = prvalue +# 2099| getExprWithReuse(): [VariableAccess] x +# 2099| Type = [IntPointerType] int * +# 2099| ValueCategory = prvalue(load) +# 2100| getStmt(3): [ReturnStmt] return ... +# 2102| [CopyAssignmentOperator] Base2& Base2::operator=(Base2 const&) +# 2102| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const Base2 & -# 2088| [Constructor] void Base2::Base2() -# 2088| : -# 2088| : -# 2088| getEntryPoint(): [BlockStmt] { ... } -# 2088| getStmt(0): [ReturnStmt] return ... -# 2088| [CopyConstructor] void Base2::Base2(Base2 const&) -# 2088| : +# 2102| [Constructor] void Base2::Base2() +# 2102| : +# 2102| : +# 2102| getEntryPoint(): [BlockStmt] { ... } +# 2102| getStmt(0): [ReturnStmt] return ... +# 2102| [CopyConstructor] void Base2::Base2(Base2 const&) +# 2102| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const Base2 & -# 2090| [MemberFunction] void Base2::operator delete(void*) -# 2090| : -# 2090| getParameter(0): [Parameter] p -# 2090| Type = [VoidPointerType] void * -# 2090| getEntryPoint(): [BlockStmt] { ... } -# 2091| getStmt(0): [ReturnStmt] return ... -# 2092| [Destructor,VirtualFunction] void Base2::~Base2() -# 2092| : -# 2092| getEntryPoint(): [BlockStmt] { ... } -# 2092| getStmt(0): [ReturnStmt] return ... -# 2092| : -# 2095| [CopyAssignmentOperator] Derived2& Derived2::operator=(Derived2 const&) -# 2095| : -#-----| getParameter(0): [Parameter] (unnamed parameter 0) -#-----| Type = [LValueReferenceType] const Derived2 & -# 2095| [Constructor] void Derived2::Derived2() -# 2095| : -# 2095| : -# 2095| getInitializer(0): [ConstructorDirectInit] call to Base2 -# 2095| Type = [VoidType] void -# 2095| ValueCategory = prvalue -# 2095| getEntryPoint(): [BlockStmt] { ... } -# 2095| getStmt(0): [ReturnStmt] return ... -# 2095| [CopyConstructor] void Derived2::Derived2(Derived2 const&) -# 2095| : -#-----| getParameter(0): [Parameter] (unnamed parameter 0) -#-----| Type = [LValueReferenceType] const Derived2 & -# 2098| [Destructor,VirtualFunction] void Derived2::~Derived2() -# 2098| : -# 2098| getEntryPoint(): [BlockStmt] { ... } -# 2098| getStmt(0): [ReturnStmt] return ... -# 2098| : -# 2098| getDestruction(0): [DestructorDirectDestruction] call to ~Base2 -# 2098| Type = [VoidType] void -# 2098| ValueCategory = prvalue -# 2100| [MemberFunction] void Derived2::operator delete(void*) -# 2100| : -# 2100| getParameter(0): [Parameter] p -# 2100| Type = [VoidPointerType] void * -# 2100| getEntryPoint(): [BlockStmt] { ... } -# 2101| getStmt(0): [ReturnStmt] return ... -# 2105| [TopLevelFunction] int virtual_delete() -# 2105| : +# 2104| [MemberFunction] void Base2::operator delete(void*) +# 2104| : +# 2104| getParameter(0): [Parameter] p +# 2104| Type = [VoidPointerType] void * +# 2104| getEntryPoint(): [BlockStmt] { ... } +# 2105| getStmt(0): [ReturnStmt] return ... +# 2106| [Destructor,VirtualFunction] void Base2::~Base2() +# 2106| : # 2106| getEntryPoint(): [BlockStmt] { ... } -# 2107| getStmt(0): [DeclStmt] declaration -# 2107| getDeclarationEntry(0): [VariableDeclarationEntry] definition of b1 -# 2107| Type = [PointerType] Base2 * -# 2107| getVariable().getInitializer(): [Initializer] initializer for b1 -# 2107| getExpr(): [NewExpr] new -# 2107| Type = [PointerType] Base2 * -# 2107| ValueCategory = prvalue -# 2107| getInitializer(): [ConstructorCall] call to Base2 -# 2107| Type = [VoidType] void -# 2107| ValueCategory = prvalue -# 2108| getStmt(1): [ExprStmt] ExprStmt -# 2108| getExpr(): [DeleteExpr] delete -# 2108| Type = [VoidType] void -# 2108| ValueCategory = prvalue -# 2108| getDeallocatorCall(): [FunctionCall] call to operator delete -# 2108| Type = [VoidType] void -# 2108| ValueCategory = prvalue -# 2108| getDestructorCall(): [DestructorCall] call to ~Base2 -# 2108| Type = [VoidType] void -# 2108| ValueCategory = prvalue -# 2108| getQualifier(): [VariableAccess] b1 -# 2108| Type = [PointerType] Base2 * -# 2108| ValueCategory = prvalue(load) -# 2110| getStmt(2): [DeclStmt] declaration -# 2110| getDeclarationEntry(0): [VariableDeclarationEntry] definition of b2 -# 2110| Type = [PointerType] Base2 * -# 2110| getVariable().getInitializer(): [Initializer] initializer for b2 -# 2110| getExpr(): [NewExpr] new -# 2110| Type = [PointerType] Derived2 * -# 2110| ValueCategory = prvalue -# 2110| getInitializer(): [ConstructorCall] call to Derived2 -# 2110| Type = [VoidType] void -# 2110| ValueCategory = prvalue -# 2110| getExpr().getFullyConverted(): [CStyleCast] (Base2 *)... -# 2110| Conversion = [BaseClassConversion] base class conversion -# 2110| Type = [PointerType] Base2 * -# 2110| ValueCategory = prvalue -# 2111| getStmt(3): [ExprStmt] ExprStmt -# 2111| getExpr(): [DeleteExpr] delete -# 2111| Type = [VoidType] void -# 2111| ValueCategory = prvalue -# 2111| getDeallocatorCall(): [FunctionCall] call to operator delete -# 2111| Type = [VoidType] void -# 2111| ValueCategory = prvalue -# 2111| getDestructorCall(): [DestructorCall] call to ~Base2 -# 2111| Type = [VoidType] void -# 2111| ValueCategory = prvalue -# 2111| getQualifier(): [VariableAccess] b2 -# 2111| Type = [PointerType] Base2 * -# 2111| ValueCategory = prvalue(load) -# 2113| getStmt(4): [DeclStmt] declaration -# 2113| getDeclarationEntry(0): [VariableDeclarationEntry] definition of d -# 2113| Type = [PointerType] Derived2 * -# 2113| getVariable().getInitializer(): [Initializer] initializer for d -# 2113| getExpr(): [NewExpr] new -# 2113| Type = [PointerType] Derived2 * -# 2113| ValueCategory = prvalue -# 2113| getInitializer(): [ConstructorCall] call to Derived2 -# 2113| Type = [VoidType] void -# 2113| ValueCategory = prvalue -# 2114| getStmt(5): [ExprStmt] ExprStmt -# 2114| getExpr(): [DeleteExpr] delete -# 2114| Type = [VoidType] void -# 2114| ValueCategory = prvalue -# 2114| getDeallocatorCall(): [FunctionCall] call to operator delete -# 2114| Type = [VoidType] void -# 2114| ValueCategory = prvalue -# 2114| getDestructorCall(): [DestructorCall] call to ~Derived2 -# 2114| Type = [VoidType] void -# 2114| ValueCategory = prvalue -# 2114| getQualifier(): [VariableAccess] d -# 2114| Type = [PointerType] Derived2 * -# 2114| ValueCategory = prvalue(load) -# 2115| getStmt(6): [ReturnStmt] return ... -# 2117| [TopLevelFunction] void test_constant_folding_use(int) -# 2117| : -# 2117| getParameter(0): [Parameter] (unnamed parameter 0) -# 2117| Type = [IntType] int -# 2119| [TopLevelFunction] void test_constant_folding() +# 2106| getStmt(0): [ReturnStmt] return ... +# 2106| : +# 2109| [CopyAssignmentOperator] Derived2& Derived2::operator=(Derived2 const&) +# 2109| : +#-----| getParameter(0): [Parameter] (unnamed parameter 0) +#-----| Type = [LValueReferenceType] const Derived2 & +# 2109| [Constructor] void Derived2::Derived2() +# 2109| : +# 2109| : +# 2109| getInitializer(0): [ConstructorDirectInit] call to Base2 +# 2109| Type = [VoidType] void +# 2109| ValueCategory = prvalue +# 2109| getEntryPoint(): [BlockStmt] { ... } +# 2109| getStmt(0): [ReturnStmt] return ... +# 2109| [CopyConstructor] void Derived2::Derived2(Derived2 const&) +# 2109| : +#-----| getParameter(0): [Parameter] (unnamed parameter 0) +#-----| Type = [LValueReferenceType] const Derived2 & +# 2112| [Destructor,VirtualFunction] void Derived2::~Derived2() +# 2112| : +# 2112| getEntryPoint(): [BlockStmt] { ... } +# 2112| getStmt(0): [ReturnStmt] return ... +# 2112| : +# 2112| getDestruction(0): [DestructorDirectDestruction] call to ~Base2 +# 2112| Type = [VoidType] void +# 2112| ValueCategory = prvalue +# 2114| [MemberFunction] void Derived2::operator delete(void*) +# 2114| : +# 2114| getParameter(0): [Parameter] p +# 2114| Type = [VoidPointerType] void * +# 2114| getEntryPoint(): [BlockStmt] { ... } +# 2115| getStmt(0): [ReturnStmt] return ... +# 2119| [TopLevelFunction] int virtual_delete() # 2119| : -# 2119| getEntryPoint(): [BlockStmt] { ... } -# 2120| getStmt(0): [DeclStmt] declaration -# 2120| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x -# 2120| Type = [SpecifiedType] const int -# 2120| getVariable().getInitializer(): [Initializer] initializer for x -# 2120| getExpr(): [Literal] 116 -# 2120| Type = [IntType] int -# 2120| Value = [Literal] 116 -# 2120| ValueCategory = prvalue -# 2121| getStmt(1): [ExprStmt] ExprStmt -# 2121| getExpr(): [FunctionCall] call to test_constant_folding_use -# 2121| Type = [VoidType] void -# 2121| ValueCategory = prvalue -# 2121| getArgument(0): [VariableAccess] x -# 2121| Type = [IntType] int -# 2121| Value = [VariableAccess] 116 -# 2121| ValueCategory = prvalue(load) -# 2122| getStmt(2): [ReturnStmt] return ... -# 2124| [TopLevelFunction] void exit(int) -# 2124| : -# 2124| getParameter(0): [Parameter] code -# 2124| Type = [IntType] int -# 2126| [TopLevelFunction] int NonExit() -# 2126| : -# 2126| getEntryPoint(): [BlockStmt] { ... } -# 2127| getStmt(0): [DeclStmt] declaration -# 2127| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x -# 2127| Type = [IntType] int -# 2127| getVariable().getInitializer(): [Initializer] initializer for x -# 2127| getExpr(): [FunctionCall] call to Add -# 2127| Type = [IntType] int +# 2120| getEntryPoint(): [BlockStmt] { ... } +# 2121| getStmt(0): [DeclStmt] declaration +# 2121| getDeclarationEntry(0): [VariableDeclarationEntry] definition of b1 +# 2121| Type = [PointerType] Base2 * +# 2121| getVariable().getInitializer(): [Initializer] initializer for b1 +# 2121| getExpr(): [NewExpr] new +# 2121| Type = [PointerType] Base2 * +# 2121| ValueCategory = prvalue +# 2121| getInitializer(): [ConstructorCall] call to Base2 +# 2121| Type = [VoidType] void +# 2121| ValueCategory = prvalue +# 2122| getStmt(1): [ExprStmt] ExprStmt +# 2122| getExpr(): [DeleteExpr] delete +# 2122| Type = [VoidType] void +# 2122| ValueCategory = prvalue +# 2122| getDeallocatorCall(): [FunctionCall] call to operator delete +# 2122| Type = [VoidType] void +# 2122| ValueCategory = prvalue +# 2122| getDestructorCall(): [DestructorCall] call to ~Base2 +# 2122| Type = [VoidType] void +# 2122| ValueCategory = prvalue +# 2122| getQualifier(): [VariableAccess] b1 +# 2122| Type = [PointerType] Base2 * +# 2122| ValueCategory = prvalue(load) +# 2122| getExprWithReuse(): [ReuseExpr] reuse of b1 +# 2122| Type = [PointerType] Base2 * +# 2122| ValueCategory = prvalue +# 2124| getStmt(2): [DeclStmt] declaration +# 2124| getDeclarationEntry(0): [VariableDeclarationEntry] definition of b2 +# 2124| Type = [PointerType] Base2 * +# 2124| getVariable().getInitializer(): [Initializer] initializer for b2 +# 2124| getExpr(): [NewExpr] new +# 2124| Type = [PointerType] Derived2 * +# 2124| ValueCategory = prvalue +# 2124| getInitializer(): [ConstructorCall] call to Derived2 +# 2124| Type = [VoidType] void +# 2124| ValueCategory = prvalue +# 2124| getExpr().getFullyConverted(): [CStyleCast] (Base2 *)... +# 2124| Conversion = [BaseClassConversion] base class conversion +# 2124| Type = [PointerType] Base2 * +# 2124| ValueCategory = prvalue +# 2125| getStmt(3): [ExprStmt] ExprStmt +# 2125| getExpr(): [DeleteExpr] delete +# 2125| Type = [VoidType] void +# 2125| ValueCategory = prvalue +# 2125| getDeallocatorCall(): [FunctionCall] call to operator delete +# 2125| Type = [VoidType] void +# 2125| ValueCategory = prvalue +# 2125| getDestructorCall(): [DestructorCall] call to ~Base2 +# 2125| Type = [VoidType] void +# 2125| ValueCategory = prvalue +# 2125| getQualifier(): [VariableAccess] b2 +# 2125| Type = [PointerType] Base2 * +# 2125| ValueCategory = prvalue(load) +# 2125| getExprWithReuse(): [ReuseExpr] reuse of b2 +# 2125| Type = [PointerType] Base2 * +# 2125| ValueCategory = prvalue +# 2127| getStmt(4): [DeclStmt] declaration +# 2127| getDeclarationEntry(0): [VariableDeclarationEntry] definition of d +# 2127| Type = [PointerType] Derived2 * +# 2127| getVariable().getInitializer(): [Initializer] initializer for d +# 2127| getExpr(): [NewExpr] new +# 2127| Type = [PointerType] Derived2 * # 2127| ValueCategory = prvalue -# 2127| getArgument(0): [Literal] 3 -# 2127| Type = [IntType] int -# 2127| Value = [Literal] 3 +# 2127| getInitializer(): [ConstructorCall] call to Derived2 +# 2127| Type = [VoidType] void # 2127| ValueCategory = prvalue -# 2127| getArgument(1): [Literal] 4 -# 2127| Type = [IntType] int -# 2127| Value = [Literal] 4 -# 2127| ValueCategory = prvalue -# 2128| getStmt(1): [IfStmt] if (...) ... -# 2128| getCondition(): [EQExpr] ... == ... -# 2128| Type = [BoolType] bool +# 2128| getStmt(5): [ExprStmt] ExprStmt +# 2128| getExpr(): [DeleteExpr] delete +# 2128| Type = [VoidType] void # 2128| ValueCategory = prvalue -# 2128| getLeftOperand(): [VariableAccess] x -# 2128| Type = [IntType] int -# 2128| ValueCategory = prvalue(load) -# 2128| getRightOperand(): [Literal] 7 -# 2128| Type = [IntType] int -# 2128| Value = [Literal] 7 +# 2128| getDeallocatorCall(): [FunctionCall] call to operator delete +# 2128| Type = [VoidType] void # 2128| ValueCategory = prvalue -# 2129| getThen(): [ExprStmt] ExprStmt -# 2129| getExpr(): [FunctionCall] call to exit -# 2129| Type = [VoidType] void -# 2129| ValueCategory = prvalue -# 2129| getArgument(0): [Literal] 3 -# 2129| Type = [IntType] int -# 2129| Value = [Literal] 3 -# 2129| ValueCategory = prvalue -# 2130| getStmt(2): [ExprStmt] ExprStmt -# 2130| getExpr(): [FunctionCall] call to VoidFunc -# 2130| Type = [VoidType] void -# 2130| ValueCategory = prvalue -# 2131| getStmt(3): [ReturnStmt] return ... -# 2131| getExpr(): [VariableAccess] x -# 2131| Type = [IntType] int -# 2131| ValueCategory = prvalue(load) -# 2134| [TopLevelFunction] void CallsNonExit() -# 2134| : -# 2134| getEntryPoint(): [BlockStmt] { ... } -# 2135| getStmt(0): [ExprStmt] ExprStmt -# 2135| getExpr(): [FunctionCall] call to VoidFunc +# 2128| getDestructorCall(): [DestructorCall] call to ~Derived2 +# 2128| Type = [VoidType] void +# 2128| ValueCategory = prvalue +# 2128| getQualifier(): [VariableAccess] d +# 2128| Type = [PointerType] Derived2 * +# 2128| ValueCategory = prvalue(load) +# 2128| getExprWithReuse(): [ReuseExpr] reuse of d +# 2128| Type = [PointerType] Derived2 * +# 2128| ValueCategory = prvalue +# 2129| getStmt(6): [ReturnStmt] return ... +# 2131| [TopLevelFunction] void test_constant_folding_use(int) +# 2131| : +# 2131| getParameter(0): [Parameter] (unnamed parameter 0) +# 2131| Type = [IntType] int +# 2133| [TopLevelFunction] void test_constant_folding() +# 2133| : +# 2133| getEntryPoint(): [BlockStmt] { ... } +# 2134| getStmt(0): [DeclStmt] declaration +# 2134| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x +# 2134| Type = [SpecifiedType] const int +# 2134| getVariable().getInitializer(): [Initializer] initializer for x +# 2134| getExpr(): [Literal] 116 +# 2134| Type = [IntType] int +# 2134| Value = [Literal] 116 +# 2134| ValueCategory = prvalue +# 2135| getStmt(1): [ExprStmt] ExprStmt +# 2135| getExpr(): [FunctionCall] call to test_constant_folding_use # 2135| Type = [VoidType] void # 2135| ValueCategory = prvalue -# 2136| getStmt(1): [ExprStmt] ExprStmt -# 2136| getExpr(): [FunctionCall] call to exit -# 2136| Type = [VoidType] void -# 2136| ValueCategory = prvalue -# 2136| getArgument(0): [Literal] 3 -# 2136| Type = [IntType] int -# 2136| Value = [Literal] 3 -# 2136| ValueCategory = prvalue -# 2137| getStmt(2): [ReturnStmt] return ... -# 2139| [TopLevelFunction] int TransNonExit() -# 2139| : -# 2139| getEntryPoint(): [BlockStmt] { ... } -# 2140| getStmt(0): [DeclStmt] declaration -# 2140| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x -# 2140| Type = [IntType] int -# 2140| getVariable().getInitializer(): [Initializer] initializer for x -# 2140| getExpr(): [FunctionCall] call to Add -# 2140| Type = [IntType] int -# 2140| ValueCategory = prvalue -# 2140| getArgument(0): [Literal] 3 -# 2140| Type = [IntType] int -# 2140| Value = [Literal] 3 -# 2140| ValueCategory = prvalue -# 2140| getArgument(1): [Literal] 4 -# 2140| Type = [IntType] int -# 2140| Value = [Literal] 4 -# 2140| ValueCategory = prvalue -# 2141| getStmt(1): [IfStmt] if (...) ... -# 2141| getCondition(): [EQExpr] ... == ... -# 2141| Type = [BoolType] bool -# 2141| ValueCategory = prvalue -# 2141| getLeftOperand(): [VariableAccess] x -# 2141| Type = [IntType] int -# 2141| ValueCategory = prvalue(load) -# 2141| getRightOperand(): [Literal] 7 -# 2141| Type = [IntType] int -# 2141| Value = [Literal] 7 -# 2141| ValueCategory = prvalue -# 2142| getThen(): [ExprStmt] ExprStmt -# 2142| getExpr(): [FunctionCall] call to CallsNonExit -# 2142| Type = [VoidType] void +# 2135| getArgument(0): [VariableAccess] x +# 2135| Type = [IntType] int +# 2135| Value = [VariableAccess] 116 +# 2135| ValueCategory = prvalue(load) +# 2136| getStmt(2): [ReturnStmt] return ... +# 2138| [TopLevelFunction] void exit(int) +# 2138| : +# 2138| getParameter(0): [Parameter] code +# 2138| Type = [IntType] int +# 2140| [TopLevelFunction] int NonExit() +# 2140| : +# 2140| getEntryPoint(): [BlockStmt] { ... } +# 2141| getStmt(0): [DeclStmt] declaration +# 2141| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x +# 2141| Type = [IntType] int +# 2141| getVariable().getInitializer(): [Initializer] initializer for x +# 2141| getExpr(): [FunctionCall] call to Add +# 2141| Type = [IntType] int +# 2141| ValueCategory = prvalue +# 2141| getArgument(0): [Literal] 3 +# 2141| Type = [IntType] int +# 2141| Value = [Literal] 3 +# 2141| ValueCategory = prvalue +# 2141| getArgument(1): [Literal] 4 +# 2141| Type = [IntType] int +# 2141| Value = [Literal] 4 +# 2141| ValueCategory = prvalue +# 2142| getStmt(1): [IfStmt] if (...) ... +# 2142| getCondition(): [EQExpr] ... == ... +# 2142| Type = [BoolType] bool +# 2142| ValueCategory = prvalue +# 2142| getLeftOperand(): [VariableAccess] x +# 2142| Type = [IntType] int +# 2142| ValueCategory = prvalue(load) +# 2142| getRightOperand(): [Literal] 7 +# 2142| Type = [IntType] int +# 2142| Value = [Literal] 7 # 2142| ValueCategory = prvalue -# 2143| getStmt(2): [ExprStmt] ExprStmt -# 2143| getExpr(): [FunctionCall] call to VoidFunc -# 2143| Type = [VoidType] void -# 2143| ValueCategory = prvalue -# 2144| getStmt(3): [ReturnStmt] return ... -# 2144| getExpr(): [VariableAccess] x -# 2144| Type = [IntType] int -# 2144| ValueCategory = prvalue(load) -# 2147| [TopLevelFunction] void newArrayCorrectType(size_t) -# 2147| : -# 2147| getParameter(0): [Parameter] n -# 2147| Type = [CTypedefType,Size_t] size_t -# 2147| getEntryPoint(): [BlockStmt] { ... } -# 2148| getStmt(0): [ExprStmt] ExprStmt -# 2148| getExpr(): [NewArrayExpr] new[] -# 2148| Type = [IntPointerType] int * -# 2148| ValueCategory = prvalue -# 2148| getExtent(): [VariableAccess] n -# 2148| Type = [CTypedefType,Size_t] size_t -# 2148| ValueCategory = prvalue(load) -# 2149| getStmt(1): [ExprStmt] ExprStmt -# 2149| getExpr(): [NewArrayExpr] new[] -# 2149| Type = [IntPointerType] int * +# 2143| getThen(): [ExprStmt] ExprStmt +# 2143| getExpr(): [FunctionCall] call to exit +# 2143| Type = [VoidType] void +# 2143| ValueCategory = prvalue +# 2143| getArgument(0): [Literal] 3 +# 2143| Type = [IntType] int +# 2143| Value = [Literal] 3 +# 2143| ValueCategory = prvalue +# 2144| getStmt(2): [ExprStmt] ExprStmt +# 2144| getExpr(): [FunctionCall] call to VoidFunc +# 2144| Type = [VoidType] void +# 2144| ValueCategory = prvalue +# 2145| getStmt(3): [ReturnStmt] return ... +# 2145| getExpr(): [VariableAccess] x +# 2145| Type = [IntType] int +# 2145| ValueCategory = prvalue(load) +# 2148| [TopLevelFunction] void CallsNonExit() +# 2148| : +# 2148| getEntryPoint(): [BlockStmt] { ... } +# 2149| getStmt(0): [ExprStmt] ExprStmt +# 2149| getExpr(): [FunctionCall] call to VoidFunc +# 2149| Type = [VoidType] void # 2149| ValueCategory = prvalue -# 2149| getAllocatorCall(): [FunctionCall] call to operator new[] -# 2149| Type = [VoidPointerType] void * -# 2149| ValueCategory = prvalue -# 2149| getArgument(0): [ErrorExpr] -# 2149| Type = [LongType] unsigned long -# 2149| ValueCategory = prvalue -# 2149| getArgument(1): [Literal] 1.0 -# 2149| Type = [FloatType] float -# 2149| Value = [Literal] 1.0 -# 2149| ValueCategory = prvalue -# 2149| getExtent(): [VariableAccess] n -# 2149| Type = [CTypedefType,Size_t] size_t -# 2149| ValueCategory = prvalue(load) -# 2150| getStmt(2): [ExprStmt] ExprStmt -# 2150| getExpr(): [NewArrayExpr] new[] -# 2150| Type = [PointerType] String * +# 2150| getStmt(1): [ExprStmt] ExprStmt +# 2150| getExpr(): [FunctionCall] call to exit +# 2150| Type = [VoidType] void # 2150| ValueCategory = prvalue -# 2150| getInitializer(): [ArrayAggregateLiteral] {...} -# 2150| Type = [ArrayType] String[] +# 2150| getArgument(0): [Literal] 3 +# 2150| Type = [IntType] int +# 2150| Value = [Literal] 3 # 2150| ValueCategory = prvalue -# 2150| getAnElementExpr(0): [ConstructorCall] call to String -# 2150| Type = [VoidType] void -# 2150| ValueCategory = prvalue -# 2150| getExtent(): [VariableAccess] n -# 2150| Type = [CTypedefType,Size_t] size_t -# 2150| ValueCategory = prvalue(load) -# 2151| getStmt(3): [ExprStmt] ExprStmt -# 2151| getExpr(): [NewArrayExpr] new[] -# 2151| Type = [PointerType] Overaligned * -# 2151| ValueCategory = prvalue -# 2151| getExtent(): [VariableAccess] n -# 2151| Type = [CTypedefType,Size_t] size_t -# 2151| ValueCategory = prvalue(load) -# 2151| getAlignmentArgument(): [Literal] 128 -# 2151| Type = [ScopedEnum] align_val_t -# 2151| Value = [Literal] 128 -# 2151| ValueCategory = prvalue -# 2152| getStmt(4): [ExprStmt] ExprStmt -# 2152| getExpr(): [NewArrayExpr] new[] -# 2152| Type = [PointerType] DefaultCtorWithDefaultParam * -# 2152| ValueCategory = prvalue -# 2152| getInitializer(): [ArrayAggregateLiteral] {...} -# 2152| Type = [ArrayType] DefaultCtorWithDefaultParam[] -# 2152| ValueCategory = prvalue -# 2152| getAnElementExpr(0): [ConstructorCall] call to DefaultCtorWithDefaultParam -# 2152| Type = [VoidType] void -# 2152| ValueCategory = prvalue -# 2152| getExtent(): [VariableAccess] n -# 2152| Type = [CTypedefType,Size_t] size_t -# 2152| ValueCategory = prvalue(load) -# 2153| getStmt(5): [ExprStmt] ExprStmt -# 2153| getExpr(): [NewArrayExpr] new[] -# 2153| Type = [IntPointerType] int * -# 2153| ValueCategory = prvalue -# 2153| getInitializer(): [ArrayAggregateLiteral] {...} -# 2153| Type = [ArrayType] int[3] -# 2153| ValueCategory = prvalue -# 2153| getAnElementExpr(0): [Literal] 0 -# 2153| Type = [IntType] int -# 2153| Value = [Literal] 0 -# 2153| ValueCategory = prvalue -# 2153| getAnElementExpr(1): [Literal] 1 -# 2153| Type = [IntType] int -# 2153| Value = [Literal] 1 -# 2153| ValueCategory = prvalue -# 2153| getAnElementExpr(2): [Literal] 2 -# 2153| Type = [IntType] int -# 2153| Value = [Literal] 2 -# 2153| ValueCategory = prvalue -# 2153| getExtent(): [VariableAccess] n -# 2153| Type = [CTypedefType,Size_t] size_t -# 2153| ValueCategory = prvalue(load) -# 2154| getStmt(6): [ReturnStmt] return ... -# 2156| [TopLevelFunction] double strtod(char const*, char**) -# 2156| : -# 2156| getParameter(0): [Parameter] str -# 2156| Type = [PointerType] const char * -# 2156| getParameter(1): [Parameter] endptr -# 2156| Type = [PointerType] char ** -# 2158| [TopLevelFunction] char* test_strtod(char*) -# 2158| : -# 2158| getParameter(0): [Parameter] s -# 2158| Type = [CharPointerType] char * -# 2158| getEntryPoint(): [BlockStmt] { ... } -# 2159| getStmt(0): [DeclStmt] declaration -# 2159| getDeclarationEntry(0): [VariableDeclarationEntry] definition of end -# 2159| Type = [CharPointerType] char * -# 2160| getStmt(1): [DeclStmt] declaration -# 2160| getDeclarationEntry(0): [VariableDeclarationEntry] definition of d -# 2160| Type = [DoubleType] double -# 2160| getVariable().getInitializer(): [Initializer] initializer for d -# 2160| getExpr(): [FunctionCall] call to strtod -# 2160| Type = [DoubleType] double -# 2160| ValueCategory = prvalue -# 2160| getArgument(0): [VariableAccess] s -# 2160| Type = [CharPointerType] char * -# 2160| ValueCategory = prvalue(load) -# 2160| getArgument(1): [AddressOfExpr] & ... -# 2160| Type = [PointerType] char ** -# 2160| ValueCategory = prvalue -# 2160| getOperand(): [VariableAccess] end -# 2160| Type = [CharPointerType] char * -# 2160| ValueCategory = lvalue -# 2160| getArgument(0).getFullyConverted(): [CStyleCast] (const char *)... -# 2160| Conversion = [PointerConversion] pointer conversion -# 2160| Type = [PointerType] const char * -# 2160| ValueCategory = prvalue -# 2161| getStmt(2): [ReturnStmt] return ... -# 2161| getExpr(): [VariableAccess] end -# 2161| Type = [CharPointerType] char * -# 2161| ValueCategory = prvalue(load) -# 2164| [CopyAssignmentOperator] HasOperatorBool& HasOperatorBool::operator=(HasOperatorBool const&) -# 2164| : +# 2151| getStmt(2): [ReturnStmt] return ... +# 2153| [TopLevelFunction] int TransNonExit() +# 2153| : +# 2153| getEntryPoint(): [BlockStmt] { ... } +# 2154| getStmt(0): [DeclStmt] declaration +# 2154| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x +# 2154| Type = [IntType] int +# 2154| getVariable().getInitializer(): [Initializer] initializer for x +# 2154| getExpr(): [FunctionCall] call to Add +# 2154| Type = [IntType] int +# 2154| ValueCategory = prvalue +# 2154| getArgument(0): [Literal] 3 +# 2154| Type = [IntType] int +# 2154| Value = [Literal] 3 +# 2154| ValueCategory = prvalue +# 2154| getArgument(1): [Literal] 4 +# 2154| Type = [IntType] int +# 2154| Value = [Literal] 4 +# 2154| ValueCategory = prvalue +# 2155| getStmt(1): [IfStmt] if (...) ... +# 2155| getCondition(): [EQExpr] ... == ... +# 2155| Type = [BoolType] bool +# 2155| ValueCategory = prvalue +# 2155| getLeftOperand(): [VariableAccess] x +# 2155| Type = [IntType] int +# 2155| ValueCategory = prvalue(load) +# 2155| getRightOperand(): [Literal] 7 +# 2155| Type = [IntType] int +# 2155| Value = [Literal] 7 +# 2155| ValueCategory = prvalue +# 2156| getThen(): [ExprStmt] ExprStmt +# 2156| getExpr(): [FunctionCall] call to CallsNonExit +# 2156| Type = [VoidType] void +# 2156| ValueCategory = prvalue +# 2157| getStmt(2): [ExprStmt] ExprStmt +# 2157| getExpr(): [FunctionCall] call to VoidFunc +# 2157| Type = [VoidType] void +# 2157| ValueCategory = prvalue +# 2158| getStmt(3): [ReturnStmt] return ... +# 2158| getExpr(): [VariableAccess] x +# 2158| Type = [IntType] int +# 2158| ValueCategory = prvalue(load) +# 2161| [TopLevelFunction] void newArrayCorrectType(size_t) +# 2161| : +# 2161| getParameter(0): [Parameter] n +# 2161| Type = [CTypedefType,Size_t] size_t +# 2161| getEntryPoint(): [BlockStmt] { ... } +# 2162| getStmt(0): [ExprStmt] ExprStmt +# 2162| getExpr(): [NewArrayExpr] new[] +# 2162| Type = [IntPointerType] int * +# 2162| ValueCategory = prvalue +# 2162| getExtent(): [VariableAccess] n +# 2162| Type = [CTypedefType,Size_t] size_t +# 2162| ValueCategory = prvalue(load) +# 2163| getStmt(1): [ExprStmt] ExprStmt +# 2163| getExpr(): [NewArrayExpr] new[] +# 2163| Type = [IntPointerType] int * +# 2163| ValueCategory = prvalue +# 2163| getAllocatorCall(): [FunctionCall] call to operator new[] +# 2163| Type = [VoidPointerType] void * +# 2163| ValueCategory = prvalue +# 2163| getArgument(0): [ErrorExpr] +# 2163| Type = [LongType] unsigned long +# 2163| ValueCategory = prvalue +# 2163| getArgument(1): [Literal] 1.0 +# 2163| Type = [FloatType] float +# 2163| Value = [Literal] 1.0 +# 2163| ValueCategory = prvalue +# 2163| getExtent(): [VariableAccess] n +# 2163| Type = [CTypedefType,Size_t] size_t +# 2163| ValueCategory = prvalue(load) +# 2164| getStmt(2): [ExprStmt] ExprStmt +# 2164| getExpr(): [NewArrayExpr] new[] +# 2164| Type = [PointerType] String * +# 2164| ValueCategory = prvalue +# 2164| getInitializer(): [ArrayAggregateLiteral] {...} +# 2164| Type = [ArrayType] String[] +# 2164| ValueCategory = prvalue +# 2164| getAnElementExpr(0): [ConstructorCall] call to String +# 2164| Type = [VoidType] void +# 2164| ValueCategory = prvalue +# 2164| getExtent(): [VariableAccess] n +# 2164| Type = [CTypedefType,Size_t] size_t +# 2164| ValueCategory = prvalue(load) +# 2165| getStmt(3): [ExprStmt] ExprStmt +# 2165| getExpr(): [NewArrayExpr] new[] +# 2165| Type = [PointerType] Overaligned * +# 2165| ValueCategory = prvalue +# 2165| getExtent(): [VariableAccess] n +# 2165| Type = [CTypedefType,Size_t] size_t +# 2165| ValueCategory = prvalue(load) +# 2165| getAlignmentArgument(): [Literal] 128 +# 2165| Type = [ScopedEnum] align_val_t +# 2165| Value = [Literal] 128 +# 2165| ValueCategory = prvalue +# 2166| getStmt(4): [ExprStmt] ExprStmt +# 2166| getExpr(): [NewArrayExpr] new[] +# 2166| Type = [PointerType] DefaultCtorWithDefaultParam * +# 2166| ValueCategory = prvalue +# 2166| getInitializer(): [ArrayAggregateLiteral] {...} +# 2166| Type = [ArrayType] DefaultCtorWithDefaultParam[] +# 2166| ValueCategory = prvalue +# 2166| getAnElementExpr(0): [ConstructorCall] call to DefaultCtorWithDefaultParam +# 2166| Type = [VoidType] void +# 2166| ValueCategory = prvalue +# 2166| getExtent(): [VariableAccess] n +# 2166| Type = [CTypedefType,Size_t] size_t +# 2166| ValueCategory = prvalue(load) +# 2167| getStmt(5): [ExprStmt] ExprStmt +# 2167| getExpr(): [NewArrayExpr] new[] +# 2167| Type = [IntPointerType] int * +# 2167| ValueCategory = prvalue +# 2167| getInitializer(): [ArrayAggregateLiteral] {...} +# 2167| Type = [ArrayType] int[3] +# 2167| ValueCategory = prvalue +# 2167| getAnElementExpr(0): [Literal] 0 +# 2167| Type = [IntType] int +# 2167| Value = [Literal] 0 +# 2167| ValueCategory = prvalue +# 2167| getAnElementExpr(1): [Literal] 1 +# 2167| Type = [IntType] int +# 2167| Value = [Literal] 1 +# 2167| ValueCategory = prvalue +# 2167| getAnElementExpr(2): [Literal] 2 +# 2167| Type = [IntType] int +# 2167| Value = [Literal] 2 +# 2167| ValueCategory = prvalue +# 2167| getExtent(): [VariableAccess] n +# 2167| Type = [CTypedefType,Size_t] size_t +# 2167| ValueCategory = prvalue(load) +# 2168| getStmt(6): [ReturnStmt] return ... +# 2170| [TopLevelFunction] double strtod(char const*, char**) +# 2170| : +# 2170| getParameter(0): [Parameter] str +# 2170| Type = [PointerType] const char * +# 2170| getParameter(1): [Parameter] endptr +# 2170| Type = [PointerType] char ** +# 2172| [TopLevelFunction] char* test_strtod(char*) +# 2172| : +# 2172| getParameter(0): [Parameter] s +# 2172| Type = [CharPointerType] char * +# 2172| getEntryPoint(): [BlockStmt] { ... } +# 2173| getStmt(0): [DeclStmt] declaration +# 2173| getDeclarationEntry(0): [VariableDeclarationEntry] definition of end +# 2173| Type = [CharPointerType] char * +# 2174| getStmt(1): [DeclStmt] declaration +# 2174| getDeclarationEntry(0): [VariableDeclarationEntry] definition of d +# 2174| Type = [DoubleType] double +# 2174| getVariable().getInitializer(): [Initializer] initializer for d +# 2174| getExpr(): [FunctionCall] call to strtod +# 2174| Type = [DoubleType] double +# 2174| ValueCategory = prvalue +# 2174| getArgument(0): [VariableAccess] s +# 2174| Type = [CharPointerType] char * +# 2174| ValueCategory = prvalue(load) +# 2174| getArgument(1): [AddressOfExpr] & ... +# 2174| Type = [PointerType] char ** +# 2174| ValueCategory = prvalue +# 2174| getOperand(): [VariableAccess] end +# 2174| Type = [CharPointerType] char * +# 2174| ValueCategory = lvalue +# 2174| getArgument(0).getFullyConverted(): [CStyleCast] (const char *)... +# 2174| Conversion = [PointerConversion] pointer conversion +# 2174| Type = [PointerType] const char * +# 2174| ValueCategory = prvalue +# 2175| getStmt(2): [ReturnStmt] return ... +# 2175| getExpr(): [VariableAccess] end +# 2175| Type = [CharPointerType] char * +# 2175| ValueCategory = prvalue(load) +# 2178| [CopyAssignmentOperator] HasOperatorBool& HasOperatorBool::operator=(HasOperatorBool const&) +# 2178| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const HasOperatorBool & -# 2164| [MoveAssignmentOperator] HasOperatorBool& HasOperatorBool::operator=(HasOperatorBool&&) -# 2164| : +# 2178| [MoveAssignmentOperator] HasOperatorBool& HasOperatorBool::operator=(HasOperatorBool&&) +# 2178| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] HasOperatorBool && -# 2165| [ConversionOperator] bool HasOperatorBool::operator bool() -# 2165| : -# 2168| [TopLevelFunction] void call_as_child_of_ConditionDeclExpr() -# 2168| : -# 2168| getEntryPoint(): [BlockStmt] { ... } -# 2169| getStmt(0): [IfStmt] if (...) ... -# 2169| getCondition(): [ConditionDeclExpr] (condition decl) -# 2169| Type = [BoolType] bool -# 2169| ValueCategory = prvalue -# 2169| getChild(0): [FunctionCall] call to operator bool -# 2169| Type = [BoolType] bool -# 2169| ValueCategory = prvalue -# 2169| getQualifier(): [VariableAccess] b -# 2169| Type = [Struct] HasOperatorBool -# 2169| ValueCategory = prvalue(load) -# 2169| getThen(): [BlockStmt] { ... } -# 2170| getStmt(1): [ReturnStmt] return ... -# 2172| [CopyAssignmentOperator] ClassWithDestructor& ClassWithDestructor::operator=(ClassWithDestructor const&) -# 2172| : -#-----| getParameter(0): [Parameter] (unnamed parameter 0) -#-----| Type = [LValueReferenceType] const ClassWithDestructor & -# 2172| [CopyConstructor] void ClassWithDestructor::ClassWithDestructor(ClassWithDestructor const&) -# 2172| : -#-----| getParameter(0): [Parameter] (unnamed parameter 0) -#-----| Type = [LValueReferenceType] const ClassWithDestructor & -# 2172| : -# 2172| getInitializer(0): [ConstructorFieldInit] constructor init of field x -# 2172| Type = [CharPointerType] char * -# 2172| ValueCategory = prvalue -# 2172| getExpr(): [ReferenceFieldAccess] x -# 2172| Type = [CharPointerType] char * -# 2172| ValueCategory = prvalue(load) -# 2172| getQualifier(): [VariableAccess] (unnamed parameter 0) -# 2172| Type = [LValueReferenceType] const ClassWithDestructor & -# 2172| ValueCategory = prvalue(load) -# 2172| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 2172| Type = [SpecifiedType] const ClassWithDestructor -# 2172| ValueCategory = lvalue -# 2172| getEntryPoint(): [BlockStmt] { ... } -# 2172| getStmt(0): [ReturnStmt] return ... -# 2175| [Constructor] void ClassWithDestructor::ClassWithDestructor() -# 2175| : -# 2175| : -# 2175| getEntryPoint(): [BlockStmt] { ... } -# 2175| getStmt(0): [ExprStmt] ExprStmt -# 2175| getExpr(): [AssignExpr] ... = ... -# 2175| Type = [CharPointerType] char * -# 2175| ValueCategory = lvalue -# 2175| getLValue(): [ImplicitThisFieldAccess,PointerFieldAccess] x -# 2175| Type = [CharPointerType] char * -# 2175| ValueCategory = lvalue -# 2175| getQualifier(): [ThisExpr] this -# 2175| Type = [PointerType] ClassWithDestructor * -# 2175| ValueCategory = prvalue(load) -# 2175| getRValue(): [NewExpr] new -# 2175| Type = [CharPointerType] char * -# 2175| ValueCategory = prvalue -# 2175| getStmt(1): [ReturnStmt] return ... -# 2176| [Destructor] void ClassWithDestructor::~ClassWithDestructor() -# 2176| : -# 2176| getEntryPoint(): [BlockStmt] { ... } -# 2176| getStmt(0): [ExprStmt] ExprStmt -# 2176| getExpr(): [DeleteExpr] delete -# 2176| Type = [VoidType] void -# 2176| ValueCategory = prvalue -# 2176| getExpr(): [ImplicitThisFieldAccess,PointerFieldAccess] x -# 2176| Type = [CharPointerType] char * -# 2176| ValueCategory = prvalue(load) -# 2176| getQualifier(): [ThisExpr] this -# 2176| Type = [PointerType] ClassWithDestructor * -# 2176| ValueCategory = prvalue(load) -# 2176| getStmt(1): [ReturnStmt] return ... -# 2176| : -# 2178| [MemberFunction] void ClassWithDestructor::set_x(char) -# 2178| : -# 2178| getParameter(0): [Parameter] y -# 2178| Type = [PlainCharType] char -# 2178| getEntryPoint(): [BlockStmt] { ... } -# 2178| getStmt(0): [ExprStmt] ExprStmt -# 2178| getExpr(): [AssignExpr] ... = ... -# 2178| Type = [PlainCharType] char -# 2178| ValueCategory = lvalue -# 2178| getLValue(): [PointerDereferenceExpr] * ... -# 2178| Type = [PlainCharType] char -# 2178| ValueCategory = lvalue -# 2178| getOperand(): [ImplicitThisFieldAccess,PointerFieldAccess] x -# 2178| Type = [CharPointerType] char * -# 2178| ValueCategory = prvalue(load) -# 2178| getQualifier(): [ThisExpr] this -# 2178| Type = [PointerType] ClassWithDestructor * -# 2178| ValueCategory = prvalue(load) -# 2178| getRValue(): [VariableAccess] y -# 2178| Type = [PlainCharType] char -# 2178| ValueCategory = prvalue(load) -# 2178| getStmt(1): [ReturnStmt] return ... -# 2179| [MemberFunction] char ClassWithDestructor::get_x() +# 2179| [ConversionOperator] bool HasOperatorBool::operator bool() # 2179| : -# 2179| getEntryPoint(): [BlockStmt] { ... } -# 2179| getStmt(0): [ReturnStmt] return ... -# 2179| getExpr(): [PointerDereferenceExpr] * ... -# 2179| Type = [PlainCharType] char -# 2179| ValueCategory = prvalue(load) -# 2179| getOperand(): [ImplicitThisFieldAccess,PointerFieldAccess] x -# 2179| Type = [CharPointerType] char * -# 2179| ValueCategory = prvalue(load) -# 2179| getQualifier(): [ThisExpr] this -# 2179| Type = [PointerType] ClassWithDestructor * -# 2179| ValueCategory = prvalue(load) -# 2182| [GlobalVariable] bool initialization_with_destructor_bool -# 2182| getInitializer(): [Initializer] initializer for initialization_with_destructor_bool -# 2182| getExpr(): [Literal] 1 -# 2182| Type = [BoolType] bool -# 2182| Value = [Literal] 1 -# 2182| ValueCategory = prvalue -# 2184| [TopLevelFunction] void initialization_with_destructor(bool, char) -# 2184| : -# 2184| getParameter(0): [Parameter] b -# 2184| Type = [BoolType] bool -# 2184| getParameter(1): [Parameter] c -# 2184| Type = [PlainCharType] char -# 2184| getEntryPoint(): [BlockStmt] { ... } -# 2185| getStmt(0): [IfStmt] if (...) ... -# 2185| getInitialization(): [DeclStmt] declaration -# 2185| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x -# 2185| Type = [Class] ClassWithDestructor -# 2185| getVariable().getInitializer(): [Initializer] initializer for x -# 2185| getExpr(): [ConstructorCall] call to ClassWithDestructor -# 2185| Type = [VoidType] void -# 2185| ValueCategory = prvalue -# 2185| getCondition(): [VariableAccess] b -# 2185| Type = [BoolType] bool -# 2185| ValueCategory = prvalue(load) -# 2186| getThen(): [ExprStmt] ExprStmt -# 2186| getExpr(): [FunctionCall] call to set_x -# 2186| Type = [VoidType] void -# 2186| ValueCategory = prvalue -# 2186| getQualifier(): [VariableAccess] x -# 2186| Type = [Class] ClassWithDestructor -# 2186| ValueCategory = lvalue -# 2186| getArgument(0): [CharLiteral] 97 -# 2186| Type = [PlainCharType] char -# 2186| Value = [CharLiteral] 97 -# 2186| ValueCategory = prvalue -# 2186| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor -# 2186| Type = [VoidType] void -# 2186| ValueCategory = prvalue -# 2186| getQualifier(): [VariableAccess] x -# 2186| Type = [Class] ClassWithDestructor +# 2182| [TopLevelFunction] void call_as_child_of_ConditionDeclExpr() +# 2182| : +# 2182| getEntryPoint(): [BlockStmt] { ... } +# 2183| getStmt(0): [IfStmt] if (...) ... +# 2183| getCondition(): [ConditionDeclExpr] (condition decl) +# 2183| Type = [BoolType] bool +# 2183| ValueCategory = prvalue +# 2183| getChild(0): [FunctionCall] call to operator bool +# 2183| Type = [BoolType] bool +# 2183| ValueCategory = prvalue +# 2183| getQualifier(): [VariableAccess] b +# 2183| Type = [Struct] HasOperatorBool +# 2183| ValueCategory = prvalue(load) +# 2183| getInitializingExpr(): [Literal] 0 +# 2183| Type = [Struct] HasOperatorBool +# 2183| Value = [Literal] 0 +# 2183| ValueCategory = prvalue +# 2183| getThen(): [BlockStmt] { ... } +# 2184| getStmt(1): [ReturnStmt] return ... +# 2186| [CopyAssignmentOperator] ClassWithDestructor& ClassWithDestructor::operator=(ClassWithDestructor const&) +# 2186| : +#-----| getParameter(0): [Parameter] (unnamed parameter 0) +#-----| Type = [LValueReferenceType] const ClassWithDestructor & +# 2186| [CopyConstructor] void ClassWithDestructor::ClassWithDestructor(ClassWithDestructor const&) +# 2186| : +#-----| getParameter(0): [Parameter] (unnamed parameter 0) +#-----| Type = [LValueReferenceType] const ClassWithDestructor & +# 2186| : +# 2186| getInitializer(0): [ConstructorFieldInit] constructor init of field x +# 2186| Type = [CharPointerType] char * +# 2186| ValueCategory = prvalue +# 2186| getExpr(): [ReferenceFieldAccess] x +# 2186| Type = [CharPointerType] char * +# 2186| ValueCategory = prvalue(load) +# 2186| getQualifier(): [VariableAccess] (unnamed parameter 0) +# 2186| Type = [LValueReferenceType] const ClassWithDestructor & +# 2186| ValueCategory = prvalue(load) +# 2186| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 2186| Type = [SpecifiedType] const ClassWithDestructor # 2186| ValueCategory = lvalue -# 2188| getStmt(1): [ConstexprIfStmt] if constexpr (...) ... -# 2188| getInitialization(): [DeclStmt] declaration -# 2188| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x -# 2188| Type = [Class] ClassWithDestructor -# 2188| getVariable().getInitializer(): [Initializer] initializer for x -# 2188| getExpr(): [ConstructorCall] call to ClassWithDestructor -# 2188| Type = [VoidType] void -# 2188| ValueCategory = prvalue -# 2188| getCondition(): [VariableAccess] initialization_with_destructor_bool -# 2188| Type = [BoolType] bool -# 2188| Value = [VariableAccess] 1 -# 2188| ValueCategory = prvalue(load) -# 2189| getThen(): [ExprStmt] ExprStmt -# 2189| getExpr(): [FunctionCall] call to set_x -# 2189| Type = [VoidType] void -# 2189| ValueCategory = prvalue -# 2189| getQualifier(): [VariableAccess] x -# 2189| Type = [Class] ClassWithDestructor -# 2189| ValueCategory = lvalue -# 2189| getArgument(0): [CharLiteral] 97 -# 2189| Type = [PlainCharType] char -# 2189| Value = [CharLiteral] 97 -# 2189| ValueCategory = prvalue -# 2189| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor -# 2189| Type = [VoidType] void -# 2189| ValueCategory = prvalue -# 2189| getQualifier(): [VariableAccess] x -# 2189| Type = [Class] ClassWithDestructor +# 2186| getEntryPoint(): [BlockStmt] { ... } +# 2186| getStmt(0): [ReturnStmt] return ... +# 2189| [Constructor] void ClassWithDestructor::ClassWithDestructor() +# 2189| : +# 2189| : +# 2189| getEntryPoint(): [BlockStmt] { ... } +# 2189| getStmt(0): [ExprStmt] ExprStmt +# 2189| getExpr(): [AssignExpr] ... = ... +# 2189| Type = [CharPointerType] char * +# 2189| ValueCategory = lvalue +# 2189| getLValue(): [ImplicitThisFieldAccess,PointerFieldAccess] x +# 2189| Type = [CharPointerType] char * # 2189| ValueCategory = lvalue -# 2191| getStmt(2): [SwitchStmt] switch (...) ... -# 2191| getInitialization(): [DeclStmt] declaration -# 2191| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x -# 2191| Type = [Class] ClassWithDestructor -# 2191| getVariable().getInitializer(): [Initializer] initializer for x -# 2191| getExpr(): [ConstructorCall] call to ClassWithDestructor -# 2191| Type = [VoidType] void -# 2191| ValueCategory = prvalue -# 2191| getExpr(): [VariableAccess] c -# 2191| Type = [PlainCharType] char -# 2191| ValueCategory = prvalue(load) -# 2191| getStmt(): [BlockStmt] { ... } -# 2192| getStmt(0): [SwitchCase] case ...: -# 2192| getExpr(): [CharLiteral] 97 -# 2192| Type = [PlainCharType] char -# 2192| Value = [CharLiteral] 97 -# 2192| ValueCategory = prvalue -# 2192| getExpr().getFullyConverted(): [CStyleCast] (int)... -# 2192| Conversion = [IntegralConversion] integral conversion -# 2192| Type = [IntType] int -# 2192| Value = [CStyleCast] 97 -# 2192| ValueCategory = prvalue -# 2193| getStmt(1): [ExprStmt] ExprStmt -# 2193| getExpr(): [FunctionCall] call to set_x -# 2193| Type = [VoidType] void -# 2193| ValueCategory = prvalue -# 2193| getQualifier(): [VariableAccess] x -# 2193| Type = [Class] ClassWithDestructor -# 2193| ValueCategory = lvalue -# 2193| getArgument(0): [CharLiteral] 97 -# 2193| Type = [PlainCharType] char -# 2193| Value = [CharLiteral] 97 -# 2193| ValueCategory = prvalue -# 2194| getStmt(2): [BreakStmt] break; -# 2195| getStmt(3): [SwitchCase] default: -# 2196| getStmt(4): [ExprStmt] ExprStmt -# 2196| getExpr(): [FunctionCall] call to set_x -# 2196| Type = [VoidType] void -# 2196| ValueCategory = prvalue -# 2196| getQualifier(): [VariableAccess] x -# 2196| Type = [Class] ClassWithDestructor -# 2196| ValueCategory = lvalue -# 2196| getArgument(0): [CharLiteral] 98 -# 2196| Type = [PlainCharType] char -# 2196| Value = [CharLiteral] 98 -# 2196| ValueCategory = prvalue -# 2197| getStmt(5): [BreakStmt] break; -# 2198| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor -# 2198| Type = [VoidType] void -# 2198| ValueCategory = prvalue -# 2198| getQualifier(): [VariableAccess] x -# 2198| Type = [Class] ClassWithDestructor -# 2198| ValueCategory = lvalue -# 2191| getExpr().getFullyConverted(): [CStyleCast] (int)... -# 2191| Conversion = [IntegralConversion] integral conversion -# 2191| Type = [IntType] int -# 2191| ValueCategory = prvalue -# 2198| getStmt(3): [LabelStmt] label ...: -# 2200| getStmt(4): [DeclStmt] declaration -# 2200| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x -# 2200| Type = [Class] ClassWithDestructor -# 2200| getVariable().getInitializer(): [Initializer] initializer for x -# 2200| getExpr(): [ConstructorCall] call to ClassWithDestructor -# 2200| Type = [VoidType] void +# 2189| getQualifier(): [ThisExpr] this +# 2189| Type = [PointerType] ClassWithDestructor * +# 2189| ValueCategory = prvalue(load) +# 2189| getRValue(): [NewExpr] new +# 2189| Type = [CharPointerType] char * +# 2189| ValueCategory = prvalue +# 2189| getStmt(1): [ReturnStmt] return ... +# 2190| [Destructor] void ClassWithDestructor::~ClassWithDestructor() +# 2190| : +# 2190| getEntryPoint(): [BlockStmt] { ... } +# 2190| getStmt(0): [ExprStmt] ExprStmt +# 2190| getExpr(): [DeleteExpr] delete +# 2190| Type = [VoidType] void +# 2190| ValueCategory = prvalue +# 2190| getExprWithReuse(): [ImplicitThisFieldAccess,PointerFieldAccess] x +# 2190| Type = [CharPointerType] char * +# 2190| ValueCategory = prvalue(load) +# 2190| getQualifier(): [ThisExpr] this +# 2190| Type = [PointerType] ClassWithDestructor * +# 2190| ValueCategory = prvalue(load) +# 2190| getStmt(1): [ReturnStmt] return ... +# 2190| : +# 2192| [MemberFunction] void ClassWithDestructor::set_x(char) +# 2192| : +# 2192| getParameter(0): [Parameter] y +# 2192| Type = [PlainCharType] char +# 2192| getEntryPoint(): [BlockStmt] { ... } +# 2192| getStmt(0): [ExprStmt] ExprStmt +# 2192| getExpr(): [AssignExpr] ... = ... +# 2192| Type = [PlainCharType] char +# 2192| ValueCategory = lvalue +# 2192| getLValue(): [PointerDereferenceExpr] * ... +# 2192| Type = [PlainCharType] char +# 2192| ValueCategory = lvalue +# 2192| getOperand(): [ImplicitThisFieldAccess,PointerFieldAccess] x +# 2192| Type = [CharPointerType] char * +# 2192| ValueCategory = prvalue(load) +# 2192| getQualifier(): [ThisExpr] this +# 2192| Type = [PointerType] ClassWithDestructor * +# 2192| ValueCategory = prvalue(load) +# 2192| getRValue(): [VariableAccess] y +# 2192| Type = [PlainCharType] char +# 2192| ValueCategory = prvalue(load) +# 2192| getStmt(1): [ReturnStmt] return ... +# 2193| [MemberFunction] char ClassWithDestructor::get_x() +# 2193| : +# 2193| getEntryPoint(): [BlockStmt] { ... } +# 2193| getStmt(0): [ReturnStmt] return ... +# 2193| getExpr(): [PointerDereferenceExpr] * ... +# 2193| Type = [PlainCharType] char +# 2193| ValueCategory = prvalue(load) +# 2193| getOperand(): [ImplicitThisFieldAccess,PointerFieldAccess] x +# 2193| Type = [CharPointerType] char * +# 2193| ValueCategory = prvalue(load) +# 2193| getQualifier(): [ThisExpr] this +# 2193| Type = [PointerType] ClassWithDestructor * +# 2193| ValueCategory = prvalue(load) +# 2196| [GlobalVariable] bool initialization_with_destructor_bool +# 2196| getInitializer(): [Initializer] initializer for initialization_with_destructor_bool +# 2196| getExpr(): [Literal] 1 +# 2196| Type = [BoolType] bool +# 2196| Value = [Literal] 1 +# 2196| ValueCategory = prvalue +# 2198| [TopLevelFunction] void initialization_with_destructor(bool, char) +# 2198| : +# 2198| getParameter(0): [Parameter] b +# 2198| Type = [BoolType] bool +# 2198| getParameter(1): [Parameter] c +# 2198| Type = [PlainCharType] char +# 2198| getEntryPoint(): [BlockStmt] { ... } +# 2199| getStmt(0): [IfStmt] if (...) ... +# 2199| getInitialization(): [DeclStmt] declaration +# 2199| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x +# 2199| Type = [Class] ClassWithDestructor +# 2199| getVariable().getInitializer(): [Initializer] initializer for x +# 2199| getExpr(): [ConstructorCall] call to ClassWithDestructor +# 2199| Type = [VoidType] void +# 2199| ValueCategory = prvalue +# 2199| getCondition(): [VariableAccess] b +# 2199| Type = [BoolType] bool +# 2199| ValueCategory = prvalue(load) +# 2200| getThen(): [ExprStmt] ExprStmt +# 2200| getExpr(): [FunctionCall] call to set_x +# 2200| Type = [VoidType] void +# 2200| ValueCategory = prvalue +# 2200| getQualifier(): [VariableAccess] x +# 2200| Type = [Class] ClassWithDestructor +# 2200| ValueCategory = lvalue +# 2200| getArgument(0): [CharLiteral] 97 +# 2200| Type = [PlainCharType] char +# 2200| Value = [CharLiteral] 97 # 2200| ValueCategory = prvalue -# 2201| getStmt(5): [RangeBasedForStmt] for(...:...) ... -# 2201| getInitialization(): [DeclStmt] declaration -# 2201| getDeclarationEntry(0): [VariableDeclarationEntry] definition of ys -# 2201| Type = [ClassTemplateInstantiation,Struct] vector -# 2201| getVariable().getInitializer(): [Initializer] initializer for ys -# 2201| getExpr(): [ConstructorCall] call to vector -# 2201| Type = [VoidType] void -# 2201| ValueCategory = prvalue -# 2201| getArgument(0): [VariableAccess] x -# 2201| Type = [Class] ClassWithDestructor -# 2201| ValueCategory = prvalue(load) -# 2201| getArgument(0).getFullyConverted(): [TemporaryObjectExpr] temporary object -# 2201| Type = [Class] ClassWithDestructor -# 2201| ValueCategory = lvalue -# 2201| getChild(1): [DeclStmt] declaration -# 2201| getDeclarationEntry(0): [VariableDeclarationEntry] declaration of (__range) -# 2201| Type = [LValueReferenceType] vector & -#-----| getVariable().getInitializer(): [Initializer] initializer for (__range) -# 2201| getExpr(): [VariableAccess] ys -# 2201| Type = [ClassTemplateInstantiation,Struct] vector -# 2201| ValueCategory = lvalue -# 2201| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 2201| Type = [LValueReferenceType] vector & -# 2201| ValueCategory = prvalue -# 2201| getBeginEndDeclaration(): [DeclStmt] declaration -# 2201| getDeclarationEntry(0): [VariableDeclarationEntry] declaration of (__begin) -# 2201| Type = [NestedTypedefType,UsingAliasTypedefType] iterator -#-----| getVariable().getInitializer(): [Initializer] initializer for (__begin) -# 2201| getExpr(): [FunctionCall] call to begin -# 2201| Type = [NestedTypedefType,UsingAliasTypedefType] iterator -# 2201| ValueCategory = prvalue -# 2201| getQualifier(): [VariableAccess] (__range) -# 2201| Type = [LValueReferenceType] vector & -# 2201| ValueCategory = prvalue(load) -#-----| getQualifier().getFullyConverted(): [CStyleCast] (const vector)... -#-----| Conversion = [GlvalueConversion] glvalue conversion -#-----| Type = [SpecifiedType] const vector -#-----| ValueCategory = lvalue -#-----| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -#-----| Type = [ClassTemplateInstantiation,Struct] vector -#-----| ValueCategory = lvalue -# 2201| getDeclarationEntry(1): [VariableDeclarationEntry] declaration of (__end) -# 2201| Type = [NestedTypedefType,UsingAliasTypedefType] iterator -#-----| getVariable().getInitializer(): [Initializer] initializer for (__end) -# 2201| getExpr(): [FunctionCall] call to end -# 2201| Type = [NestedTypedefType,UsingAliasTypedefType] iterator -# 2201| ValueCategory = prvalue -# 2201| getQualifier(): [VariableAccess] (__range) -# 2201| Type = [LValueReferenceType] vector & -# 2201| ValueCategory = prvalue(load) -#-----| getQualifier().getFullyConverted(): [CStyleCast] (const vector)... -#-----| Conversion = [GlvalueConversion] glvalue conversion -#-----| Type = [SpecifiedType] const vector -#-----| ValueCategory = lvalue -#-----| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -#-----| Type = [ClassTemplateInstantiation,Struct] vector -#-----| ValueCategory = lvalue -# 2201| getCondition(): [FunctionCall] call to operator!= -# 2201| Type = [BoolType] bool -# 2201| ValueCategory = prvalue -# 2201| getQualifier(): [VariableAccess] (__begin) -# 2201| Type = [NestedTypedefType,UsingAliasTypedefType] iterator -# 2201| ValueCategory = lvalue -# 2201| getArgument(0): [ConstructorCall] call to iterator -# 2201| Type = [VoidType] void -# 2201| ValueCategory = prvalue -# 2201| getArgument(0): [VariableAccess] (__end) -# 2201| Type = [NestedTypedefType,UsingAliasTypedefType] iterator -# 2201| ValueCategory = lvalue -#-----| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) -#-----| Type = [LValueReferenceType] const iterator & -#-----| ValueCategory = prvalue -#-----| getExpr(): [CStyleCast] (const iterator)... -#-----| Conversion = [GlvalueConversion] glvalue conversion -#-----| Type = [SpecifiedType] const iterator -#-----| ValueCategory = lvalue -#-----| getQualifier().getFullyConverted(): [CStyleCast] (const iterator)... -#-----| Conversion = [GlvalueConversion] glvalue conversion -#-----| Type = [SpecifiedType] const iterator -#-----| ValueCategory = lvalue -#-----| getArgument(0).getFullyConverted(): [TemporaryObjectExpr] temporary object -#-----| Type = [ClassTemplateInstantiation,Struct] iterator -#-----| ValueCategory = lvalue -# 2201| getUpdate(): [FunctionCall] call to operator++ -# 2201| Type = [LValueReferenceType] iterator & -# 2201| ValueCategory = prvalue -# 2201| getQualifier(): [VariableAccess] (__begin) -# 2201| Type = [NestedTypedefType,UsingAliasTypedefType] iterator -# 2201| ValueCategory = lvalue -# 2201| getChild(5): [DeclStmt] declaration -# 2201| getDeclarationEntry(0): [VariableDeclarationEntry] definition of y -# 2201| Type = [Class] ClassWithDestructor -# 2201| getVariable().getInitializer(): [Initializer] initializer for y -# 2201| getExpr(): [OverloadedPointerDereferenceExpr] call to operator* -# 2201| Type = [LValueReferenceType] ClassWithDestructor & -# 2201| ValueCategory = prvalue -# 2201| getQualifier(): [VariableAccess] (__begin) -# 2201| Type = [NestedTypedefType,UsingAliasTypedefType] iterator -# 2201| ValueCategory = lvalue -#-----| getQualifier().getFullyConverted(): [CStyleCast] (const iterator)... -#-----| Conversion = [GlvalueConversion] glvalue conversion -#-----| Type = [SpecifiedType] const iterator -#-----| ValueCategory = lvalue -# 2201| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 2201| Type = [Class] ClassWithDestructor -# 2201| ValueCategory = prvalue(load) -# 2202| getStmt(): [ExprStmt] ExprStmt -# 2202| getExpr(): [FunctionCall] call to set_x -# 2202| Type = [VoidType] void -# 2202| ValueCategory = prvalue -# 2202| getQualifier(): [VariableAccess] y -# 2202| Type = [Class] ClassWithDestructor -# 2202| ValueCategory = lvalue -# 2202| getArgument(0): [CharLiteral] 97 -# 2202| Type = [PlainCharType] char -# 2202| Value = [CharLiteral] 97 -# 2202| ValueCategory = prvalue -# 2201| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor -# 2201| Type = [VoidType] void -# 2201| ValueCategory = prvalue -# 2201| getQualifier(): [VariableAccess] y -# 2201| Type = [Class] ClassWithDestructor -# 2201| ValueCategory = lvalue -# 2201| getImplicitDestructorCall(0): [DestructorCall] call to ~vector -# 2201| Type = [VoidType] void -# 2201| ValueCategory = prvalue -# 2201| getQualifier(): [VariableAccess] ys -# 2201| Type = [ClassTemplateInstantiation,Struct] vector -# 2201| ValueCategory = lvalue -# 2201| getUpdate().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 2201| Type = [ClassTemplateInstantiation,Struct] iterator -# 2201| ValueCategory = lvalue -# 2204| getStmt(6): [RangeBasedForStmt] for(...:...) ... -# 2204| getInitialization(): [DeclStmt] declaration -# 2204| getDeclarationEntry(0): [VariableDeclarationEntry] definition of ys -# 2204| Type = [ClassTemplateInstantiation,Struct] vector -# 2204| getVariable().getInitializer(): [Initializer] initializer for ys -# 2204| getExpr(): [ConstructorCall] call to vector -# 2204| Type = [VoidType] void -# 2204| ValueCategory = prvalue -# 2204| getArgument(0): [VariableAccess] x -# 2204| Type = [Class] ClassWithDestructor -# 2204| ValueCategory = prvalue(load) -# 2204| getArgument(0).getFullyConverted(): [TemporaryObjectExpr] temporary object -# 2204| Type = [Class] ClassWithDestructor -# 2204| ValueCategory = lvalue -# 2204| getChild(1): [DeclStmt] declaration -# 2204| getDeclarationEntry(0): [VariableDeclarationEntry] declaration of (__range) -# 2204| Type = [LValueReferenceType] vector & -#-----| getVariable().getInitializer(): [Initializer] initializer for (__range) -# 2204| getExpr(): [VariableAccess] ys -# 2204| Type = [ClassTemplateInstantiation,Struct] vector -# 2204| ValueCategory = lvalue -# 2204| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 2204| Type = [LValueReferenceType] vector & -# 2204| ValueCategory = prvalue -# 2204| getBeginEndDeclaration(): [DeclStmt] declaration -# 2204| getDeclarationEntry(0): [VariableDeclarationEntry] declaration of (__begin) -# 2204| Type = [NestedTypedefType,UsingAliasTypedefType] iterator -#-----| getVariable().getInitializer(): [Initializer] initializer for (__begin) -# 2204| getExpr(): [FunctionCall] call to begin -# 2204| Type = [NestedTypedefType,UsingAliasTypedefType] iterator -# 2204| ValueCategory = prvalue -# 2204| getQualifier(): [VariableAccess] (__range) -# 2204| Type = [LValueReferenceType] vector & -# 2204| ValueCategory = prvalue(load) -#-----| getQualifier().getFullyConverted(): [CStyleCast] (const vector)... -#-----| Conversion = [GlvalueConversion] glvalue conversion -#-----| Type = [SpecifiedType] const vector -#-----| ValueCategory = lvalue -#-----| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -#-----| Type = [ClassTemplateInstantiation,Struct] vector -#-----| ValueCategory = lvalue -# 2204| getDeclarationEntry(1): [VariableDeclarationEntry] declaration of (__end) -# 2204| Type = [NestedTypedefType,UsingAliasTypedefType] iterator -#-----| getVariable().getInitializer(): [Initializer] initializer for (__end) -# 2204| getExpr(): [FunctionCall] call to end -# 2204| Type = [NestedTypedefType,UsingAliasTypedefType] iterator -# 2204| ValueCategory = prvalue -# 2204| getQualifier(): [VariableAccess] (__range) -# 2204| Type = [LValueReferenceType] vector & -# 2204| ValueCategory = prvalue(load) -#-----| getQualifier().getFullyConverted(): [CStyleCast] (const vector)... -#-----| Conversion = [GlvalueConversion] glvalue conversion -#-----| Type = [SpecifiedType] const vector -#-----| ValueCategory = lvalue -#-----| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -#-----| Type = [ClassTemplateInstantiation,Struct] vector -#-----| ValueCategory = lvalue -# 2204| getCondition(): [FunctionCall] call to operator!= -# 2204| Type = [BoolType] bool -# 2204| ValueCategory = prvalue -# 2204| getQualifier(): [VariableAccess] (__begin) -# 2204| Type = [NestedTypedefType,UsingAliasTypedefType] iterator -# 2204| ValueCategory = lvalue -# 2204| getArgument(0): [ConstructorCall] call to iterator -# 2204| Type = [VoidType] void -# 2204| ValueCategory = prvalue -# 2204| getArgument(0): [VariableAccess] (__end) -# 2204| Type = [NestedTypedefType,UsingAliasTypedefType] iterator -# 2204| ValueCategory = lvalue -#-----| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) -#-----| Type = [LValueReferenceType] const iterator & -#-----| ValueCategory = prvalue -#-----| getExpr(): [CStyleCast] (const iterator)... -#-----| Conversion = [GlvalueConversion] glvalue conversion -#-----| Type = [SpecifiedType] const iterator -#-----| ValueCategory = lvalue -#-----| getQualifier().getFullyConverted(): [CStyleCast] (const iterator)... -#-----| Conversion = [GlvalueConversion] glvalue conversion -#-----| Type = [SpecifiedType] const iterator -#-----| ValueCategory = lvalue -#-----| getArgument(0).getFullyConverted(): [TemporaryObjectExpr] temporary object -#-----| Type = [ClassTemplateInstantiation,Struct] iterator -#-----| ValueCategory = lvalue -# 2204| getUpdate(): [FunctionCall] call to operator++ -# 2204| Type = [LValueReferenceType] iterator & -# 2204| ValueCategory = prvalue -# 2204| getQualifier(): [VariableAccess] (__begin) -# 2204| Type = [NestedTypedefType,UsingAliasTypedefType] iterator -# 2204| ValueCategory = lvalue -# 2204| getChild(5): [DeclStmt] declaration -# 2204| getDeclarationEntry(0): [VariableDeclarationEntry] definition of y -# 2204| Type = [Class] ClassWithDestructor -# 2204| getVariable().getInitializer(): [Initializer] initializer for y -# 2204| getExpr(): [OverloadedPointerDereferenceExpr] call to operator* -# 2204| Type = [LValueReferenceType] ClassWithDestructor & -# 2204| ValueCategory = prvalue -# 2204| getQualifier(): [VariableAccess] (__begin) -# 2204| Type = [NestedTypedefType,UsingAliasTypedefType] iterator -# 2204| ValueCategory = lvalue -#-----| getQualifier().getFullyConverted(): [CStyleCast] (const iterator)... -#-----| Conversion = [GlvalueConversion] glvalue conversion -#-----| Type = [SpecifiedType] const iterator -#-----| ValueCategory = lvalue -# 2204| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 2204| Type = [Class] ClassWithDestructor -# 2204| ValueCategory = prvalue(load) -# 2204| getStmt(): [BlockStmt] { ... } -# 2205| getStmt(0): [ExprStmt] ExprStmt -# 2205| getExpr(): [FunctionCall] call to set_x -# 2205| Type = [VoidType] void -# 2205| ValueCategory = prvalue -# 2205| getQualifier(): [VariableAccess] y -# 2205| Type = [Class] ClassWithDestructor -# 2205| ValueCategory = lvalue -# 2205| getArgument(0): [CharLiteral] 97 -# 2205| Type = [PlainCharType] char -# 2205| Value = [CharLiteral] 97 +# 2200| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor +# 2200| Type = [VoidType] void +# 2200| ValueCategory = prvalue +# 2200| getQualifier(): [VariableAccess] x +# 2200| Type = [Class] ClassWithDestructor +# 2200| ValueCategory = lvalue +# 2202| getStmt(1): [ConstexprIfStmt] if constexpr (...) ... +# 2202| getInitialization(): [DeclStmt] declaration +# 2202| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x +# 2202| Type = [Class] ClassWithDestructor +# 2202| getVariable().getInitializer(): [Initializer] initializer for x +# 2202| getExpr(): [ConstructorCall] call to ClassWithDestructor +# 2202| Type = [VoidType] void +# 2202| ValueCategory = prvalue +# 2202| getCondition(): [VariableAccess] initialization_with_destructor_bool +# 2202| Type = [BoolType] bool +# 2202| Value = [VariableAccess] 1 +# 2202| ValueCategory = prvalue(load) +# 2203| getThen(): [ExprStmt] ExprStmt +# 2203| getExpr(): [FunctionCall] call to set_x +# 2203| Type = [VoidType] void +# 2203| ValueCategory = prvalue +# 2203| getQualifier(): [VariableAccess] x +# 2203| Type = [Class] ClassWithDestructor +# 2203| ValueCategory = lvalue +# 2203| getArgument(0): [CharLiteral] 97 +# 2203| Type = [PlainCharType] char +# 2203| Value = [CharLiteral] 97 +# 2203| ValueCategory = prvalue +# 2203| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor +# 2203| Type = [VoidType] void +# 2203| ValueCategory = prvalue +# 2203| getQualifier(): [VariableAccess] x +# 2203| Type = [Class] ClassWithDestructor +# 2203| ValueCategory = lvalue +# 2205| getStmt(2): [SwitchStmt] switch (...) ... +# 2205| getInitialization(): [DeclStmt] declaration +# 2205| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x +# 2205| Type = [Class] ClassWithDestructor +# 2205| getVariable().getInitializer(): [Initializer] initializer for x +# 2205| getExpr(): [ConstructorCall] call to ClassWithDestructor +# 2205| Type = [VoidType] void # 2205| ValueCategory = prvalue -# 2206| getStmt(1): [IfStmt] if (...) ... -# 2206| getCondition(): [EQExpr] ... == ... -# 2206| Type = [BoolType] bool +# 2205| getExpr(): [VariableAccess] c +# 2205| Type = [PlainCharType] char +# 2205| ValueCategory = prvalue(load) +# 2205| getStmt(): [BlockStmt] { ... } +# 2206| getStmt(0): [SwitchCase] case ...: +# 2206| getExpr(): [CharLiteral] 97 +# 2206| Type = [PlainCharType] char +# 2206| Value = [CharLiteral] 97 # 2206| ValueCategory = prvalue -# 2206| getLeftOperand(): [FunctionCall] call to get_x -# 2206| Type = [PlainCharType] char -# 2206| ValueCategory = prvalue -# 2206| getQualifier(): [VariableAccess] y -# 2206| Type = [Class] ClassWithDestructor -# 2206| ValueCategory = lvalue -# 2206| getRightOperand(): [CharLiteral] 98 -# 2206| Type = [PlainCharType] char -# 2206| Value = [CharLiteral] 98 -# 2206| ValueCategory = prvalue -# 2206| getLeftOperand().getFullyConverted(): [CStyleCast] (int)... -# 2206| Conversion = [IntegralConversion] integral conversion -# 2206| Type = [IntType] int -# 2206| ValueCategory = prvalue -# 2206| getRightOperand().getFullyConverted(): [CStyleCast] (int)... -# 2206| Conversion = [IntegralConversion] integral conversion -# 2206| Type = [IntType] int -# 2206| Value = [CStyleCast] 98 -# 2206| ValueCategory = prvalue -# 2207| getThen(): [ReturnStmt] return ... -# 2204| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor -# 2204| Type = [VoidType] void -# 2204| ValueCategory = prvalue -# 2204| getQualifier(): [VariableAccess] y -# 2204| Type = [Class] ClassWithDestructor -# 2204| ValueCategory = lvalue -# 2204| getImplicitDestructorCall(1): [DestructorCall] call to ~vector -# 2204| Type = [VoidType] void -# 2204| ValueCategory = prvalue -# 2204| getQualifier(): [VariableAccess] ys -# 2204| Type = [ClassTemplateInstantiation,Struct] vector -# 2204| ValueCategory = lvalue -# 2219| getImplicitDestructorCall(2): [DestructorCall] call to ~ClassWithDestructor -# 2219| Type = [VoidType] void -# 2219| ValueCategory = prvalue -# 2219| getQualifier(): [VariableAccess] x -# 2219| Type = [Class] ClassWithDestructor -# 2219| ValueCategory = lvalue -# 2204| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor -# 2204| Type = [VoidType] void -# 2204| ValueCategory = prvalue -# 2204| getQualifier(): [VariableAccess] y -# 2204| Type = [Class] ClassWithDestructor -# 2204| ValueCategory = lvalue -# 2204| getImplicitDestructorCall(0): [DestructorCall] call to ~vector -# 2204| Type = [VoidType] void -# 2204| ValueCategory = prvalue -# 2204| getQualifier(): [VariableAccess] ys -# 2204| Type = [ClassTemplateInstantiation,Struct] vector -# 2204| ValueCategory = lvalue -# 2204| getUpdate().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 2204| Type = [ClassTemplateInstantiation,Struct] iterator -# 2204| ValueCategory = lvalue -# 2210| getStmt(7): [RangeBasedForStmt] for(...:...) ... -# 2210| getInitialization(): [DeclStmt] declaration -# 2210| getDeclarationEntry(0): [VariableDeclarationEntry] definition of ys -# 2210| Type = [ClassTemplateInstantiation,Struct] vector -# 2210| getVariable().getInitializer(): [Initializer] initializer for ys -# 2210| getExpr(): [ConstructorCall] call to vector -# 2210| Type = [VoidType] void -# 2210| ValueCategory = prvalue -# 2210| getArgument(0): [Literal] 1 -# 2210| Type = [IntType] int -# 2210| Value = [Literal] 1 -# 2210| ValueCategory = prvalue -# 2210| getChild(1): [DeclStmt] declaration -# 2210| getDeclarationEntry(0): [VariableDeclarationEntry] declaration of (__range) -# 2210| Type = [LValueReferenceType] vector & -#-----| getVariable().getInitializer(): [Initializer] initializer for (__range) -# 2210| getExpr(): [VariableAccess] ys -# 2210| Type = [ClassTemplateInstantiation,Struct] vector +# 2206| getExpr().getFullyConverted(): [CStyleCast] (int)... +# 2206| Conversion = [IntegralConversion] integral conversion +# 2206| Type = [IntType] int +# 2206| Value = [CStyleCast] 97 +# 2206| ValueCategory = prvalue +# 2207| getStmt(1): [ExprStmt] ExprStmt +# 2207| getExpr(): [FunctionCall] call to set_x +# 2207| Type = [VoidType] void +# 2207| ValueCategory = prvalue +# 2207| getQualifier(): [VariableAccess] x +# 2207| Type = [Class] ClassWithDestructor +# 2207| ValueCategory = lvalue +# 2207| getArgument(0): [CharLiteral] 97 +# 2207| Type = [PlainCharType] char +# 2207| Value = [CharLiteral] 97 +# 2207| ValueCategory = prvalue +# 2208| getStmt(2): [BreakStmt] break; +# 2209| getStmt(3): [SwitchCase] default: +# 2210| getStmt(4): [ExprStmt] ExprStmt +# 2210| getExpr(): [FunctionCall] call to set_x +# 2210| Type = [VoidType] void +# 2210| ValueCategory = prvalue +# 2210| getQualifier(): [VariableAccess] x +# 2210| Type = [Class] ClassWithDestructor # 2210| ValueCategory = lvalue -# 2210| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 2210| Type = [LValueReferenceType] vector & +# 2210| getArgument(0): [CharLiteral] 98 +# 2210| Type = [PlainCharType] char +# 2210| Value = [CharLiteral] 98 # 2210| ValueCategory = prvalue -# 2210| getBeginEndDeclaration(): [DeclStmt] declaration -# 2210| getDeclarationEntry(0): [VariableDeclarationEntry] declaration of (__begin) -# 2210| Type = [NestedTypedefType,UsingAliasTypedefType] iterator -#-----| getVariable().getInitializer(): [Initializer] initializer for (__begin) -# 2210| getExpr(): [FunctionCall] call to begin -# 2210| Type = [NestedTypedefType,UsingAliasTypedefType] iterator -# 2210| ValueCategory = prvalue -# 2210| getQualifier(): [VariableAccess] (__range) -# 2210| Type = [LValueReferenceType] vector & -# 2210| ValueCategory = prvalue(load) -#-----| getQualifier().getFullyConverted(): [CStyleCast] (const vector)... -#-----| Conversion = [GlvalueConversion] glvalue conversion -#-----| Type = [SpecifiedType] const vector -#-----| ValueCategory = lvalue -#-----| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -#-----| Type = [ClassTemplateInstantiation,Struct] vector -#-----| ValueCategory = lvalue -# 2210| getDeclarationEntry(1): [VariableDeclarationEntry] declaration of (__end) -# 2210| Type = [NestedTypedefType,UsingAliasTypedefType] iterator -#-----| getVariable().getInitializer(): [Initializer] initializer for (__end) -# 2210| getExpr(): [FunctionCall] call to end -# 2210| Type = [NestedTypedefType,UsingAliasTypedefType] iterator -# 2210| ValueCategory = prvalue -# 2210| getQualifier(): [VariableAccess] (__range) -# 2210| Type = [LValueReferenceType] vector & -# 2210| ValueCategory = prvalue(load) -#-----| getQualifier().getFullyConverted(): [CStyleCast] (const vector)... -#-----| Conversion = [GlvalueConversion] glvalue conversion -#-----| Type = [SpecifiedType] const vector -#-----| ValueCategory = lvalue -#-----| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -#-----| Type = [ClassTemplateInstantiation,Struct] vector -#-----| ValueCategory = lvalue -# 2210| getCondition(): [FunctionCall] call to operator!= -# 2210| Type = [BoolType] bool -# 2210| ValueCategory = prvalue -# 2210| getQualifier(): [VariableAccess] (__begin) -# 2210| Type = [NestedTypedefType,UsingAliasTypedefType] iterator -# 2210| ValueCategory = lvalue -# 2210| getArgument(0): [ConstructorCall] call to iterator -# 2210| Type = [VoidType] void -# 2210| ValueCategory = prvalue -# 2210| getArgument(0): [VariableAccess] (__end) -# 2210| Type = [NestedTypedefType,UsingAliasTypedefType] iterator -# 2210| ValueCategory = lvalue -#-----| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) -#-----| Type = [LValueReferenceType] const iterator & -#-----| ValueCategory = prvalue -#-----| getExpr(): [CStyleCast] (const iterator)... -#-----| Conversion = [GlvalueConversion] glvalue conversion -#-----| Type = [SpecifiedType] const iterator -#-----| ValueCategory = lvalue -#-----| getQualifier().getFullyConverted(): [CStyleCast] (const iterator)... -#-----| Conversion = [GlvalueConversion] glvalue conversion -#-----| Type = [SpecifiedType] const iterator -#-----| ValueCategory = lvalue -#-----| getArgument(0).getFullyConverted(): [TemporaryObjectExpr] temporary object -#-----| Type = [ClassTemplateInstantiation,Struct] iterator -#-----| ValueCategory = lvalue -# 2210| getUpdate(): [FunctionCall] call to operator++ -# 2210| Type = [LValueReferenceType] iterator & -# 2210| ValueCategory = prvalue -# 2210| getQualifier(): [VariableAccess] (__begin) -# 2210| Type = [NestedTypedefType,UsingAliasTypedefType] iterator -# 2210| ValueCategory = lvalue -# 2210| getChild(5): [DeclStmt] declaration -# 2210| getDeclarationEntry(0): [VariableDeclarationEntry] definition of y -# 2210| Type = [IntType] int -# 2210| getVariable().getInitializer(): [Initializer] initializer for y -# 2210| getExpr(): [OverloadedPointerDereferenceExpr] call to operator* -# 2210| Type = [LValueReferenceType] int & -# 2210| ValueCategory = prvalue -# 2210| getQualifier(): [VariableAccess] (__begin) -# 2210| Type = [NestedTypedefType,UsingAliasTypedefType] iterator -# 2210| ValueCategory = lvalue -#-----| getQualifier().getFullyConverted(): [CStyleCast] (const iterator)... -#-----| Conversion = [GlvalueConversion] glvalue conversion -#-----| Type = [SpecifiedType] const iterator -#-----| ValueCategory = lvalue -# 2210| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 2210| Type = [IntType] int -# 2210| ValueCategory = prvalue(load) -# 2210| getStmt(): [BlockStmt] { ... } -# 2211| getStmt(0): [IfStmt] if (...) ... -# 2211| getCondition(): [EQExpr] ... == ... -# 2211| Type = [BoolType] bool -# 2211| ValueCategory = prvalue -# 2211| getLeftOperand(): [VariableAccess] y -# 2211| Type = [IntType] int -# 2211| ValueCategory = prvalue(load) -# 2211| getRightOperand(): [Literal] 1 -# 2211| Type = [IntType] int -# 2211| Value = [Literal] 1 -# 2211| ValueCategory = prvalue -# 2212| getThen(): [ReturnStmt] return ... -# 2210| getImplicitDestructorCall(0): [DestructorCall] call to ~vector -# 2210| Type = [VoidType] void -# 2210| ValueCategory = prvalue -# 2210| getQualifier(): [VariableAccess] ys -# 2210| Type = [ClassTemplateInstantiation,Struct] vector -# 2210| ValueCategory = lvalue -# 2219| getImplicitDestructorCall(1): [DestructorCall] call to ~ClassWithDestructor -# 2219| Type = [VoidType] void -# 2219| ValueCategory = prvalue -# 2219| getQualifier(): [VariableAccess] x -# 2219| Type = [Class] ClassWithDestructor -# 2219| ValueCategory = lvalue -# 2210| getImplicitDestructorCall(0): [DestructorCall] call to ~vector -# 2210| Type = [VoidType] void -# 2210| ValueCategory = prvalue -# 2210| getQualifier(): [VariableAccess] ys -# 2210| Type = [ClassTemplateInstantiation,Struct] vector -# 2210| ValueCategory = lvalue -# 2210| getUpdate().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 2210| Type = [ClassTemplateInstantiation,Struct] iterator -# 2210| ValueCategory = lvalue -# 2215| getStmt(8): [RangeBasedForStmt] for(...:...) ... +# 2211| getStmt(5): [BreakStmt] break; +# 2212| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor +# 2212| Type = [VoidType] void +# 2212| ValueCategory = prvalue +# 2212| getQualifier(): [VariableAccess] x +# 2212| Type = [Class] ClassWithDestructor +# 2212| ValueCategory = lvalue +# 2205| getExpr().getFullyConverted(): [CStyleCast] (int)... +# 2205| Conversion = [IntegralConversion] integral conversion +# 2205| Type = [IntType] int +# 2205| ValueCategory = prvalue +# 2212| getStmt(3): [LabelStmt] label ...: +# 2214| getStmt(4): [DeclStmt] declaration +# 2214| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x +# 2214| Type = [Class] ClassWithDestructor +# 2214| getVariable().getInitializer(): [Initializer] initializer for x +# 2214| getExpr(): [ConstructorCall] call to ClassWithDestructor +# 2214| Type = [VoidType] void +# 2214| ValueCategory = prvalue +# 2215| getStmt(5): [RangeBasedForStmt] for(...:...) ... # 2215| getInitialization(): [DeclStmt] declaration # 2215| getDeclarationEntry(0): [VariableDeclarationEntry] definition of ys # 2215| Type = [ClassTemplateInstantiation,Struct] vector @@ -17520,6 +17426,12 @@ ir.cpp: # 2215| getArgument(0): [VariableAccess] x # 2215| Type = [Class] ClassWithDestructor # 2215| ValueCategory = prvalue(load) +# 2215| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor +# 2215| Type = [VoidType] void +# 2215| ValueCategory = prvalue +# 2215| getQualifier(): [ReuseExpr] reuse of temporary object +# 2215| Type = [Class] ClassWithDestructor +# 2215| ValueCategory = xvalue # 2215| getArgument(0).getFullyConverted(): [TemporaryObjectExpr] temporary object # 2215| Type = [Class] ClassWithDestructor # 2215| ValueCategory = lvalue @@ -17615,34 +17527,18 @@ ir.cpp: # 2215| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) # 2215| Type = [Class] ClassWithDestructor # 2215| ValueCategory = prvalue(load) -# 2215| getStmt(): [BlockStmt] { ... } -# 2216| getStmt(0): [DeclStmt] declaration -# 2216| getDeclarationEntry(0): [VariableDeclarationEntry] definition of z1 +# 2216| getStmt(): [ExprStmt] ExprStmt +# 2216| getExpr(): [FunctionCall] call to set_x +# 2216| Type = [VoidType] void +# 2216| ValueCategory = prvalue +# 2216| getQualifier(): [VariableAccess] y # 2216| Type = [Class] ClassWithDestructor -# 2216| getVariable().getInitializer(): [Initializer] initializer for z1 -# 2216| getExpr(): [ConstructorCall] call to ClassWithDestructor -# 2216| Type = [VoidType] void -# 2216| ValueCategory = prvalue -# 2217| getStmt(1): [DeclStmt] declaration -# 2217| getDeclarationEntry(0): [VariableDeclarationEntry] definition of z2 -# 2217| Type = [Class] ClassWithDestructor -# 2217| getVariable().getInitializer(): [Initializer] initializer for z2 -# 2217| getExpr(): [ConstructorCall] call to ClassWithDestructor -# 2217| Type = [VoidType] void -# 2217| ValueCategory = prvalue -# 2218| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor -# 2218| Type = [VoidType] void -# 2218| ValueCategory = prvalue -# 2218| getQualifier(): [VariableAccess] z2 -# 2218| Type = [Class] ClassWithDestructor -# 2218| ValueCategory = lvalue -# 2218| getImplicitDestructorCall(1): [DestructorCall] call to ~ClassWithDestructor -# 2218| Type = [VoidType] void -# 2218| ValueCategory = prvalue -# 2218| getQualifier(): [VariableAccess] z1 -# 2218| Type = [Class] ClassWithDestructor -# 2218| ValueCategory = lvalue -# 2215| getImplicitDestructorCall(2): [DestructorCall] call to ~ClassWithDestructor +# 2216| ValueCategory = lvalue +# 2216| getArgument(0): [CharLiteral] 97 +# 2216| Type = [PlainCharType] char +# 2216| Value = [CharLiteral] 97 +# 2216| ValueCategory = prvalue +# 2215| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor # 2215| Type = [VoidType] void # 2215| ValueCategory = prvalue # 2215| getQualifier(): [VariableAccess] y @@ -17657,596 +17553,830 @@ ir.cpp: # 2215| getUpdate().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) # 2215| Type = [ClassTemplateInstantiation,Struct] iterator # 2215| ValueCategory = lvalue -# 2219| getStmt(9): [ReturnStmt] return ... -# 2219| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor -# 2219| Type = [VoidType] void -# 2219| ValueCategory = prvalue -# 2219| getQualifier(): [VariableAccess] x -# 2219| Type = [Class] ClassWithDestructor -# 2219| ValueCategory = lvalue -# 2221| [TopLevelFunction] void static_variable_with_destructor_1() -# 2221| : -# 2221| getEntryPoint(): [BlockStmt] { ... } -# 2222| getStmt(0): [DeclStmt] declaration -# 2222| getDeclarationEntry(0): [VariableDeclarationEntry] definition of a -# 2222| Type = [Class] ClassWithDestructor -# 2222| getVariable().getInitializer(): [Initializer] initializer for a -# 2222| getExpr(): [ConstructorCall] call to ClassWithDestructor -# 2222| Type = [VoidType] void -# 2222| ValueCategory = prvalue -# 2223| getStmt(1): [DeclStmt] declaration -# 2223| getDeclarationEntry(0): [VariableDeclarationEntry] definition of b -# 2223| Type = [Class] ClassWithDestructor +# 2218| getStmt(6): [RangeBasedForStmt] for(...:...) ... +# 2218| getInitialization(): [DeclStmt] declaration +# 2218| getDeclarationEntry(0): [VariableDeclarationEntry] definition of ys +# 2218| Type = [ClassTemplateInstantiation,Struct] vector +# 2218| getVariable().getInitializer(): [Initializer] initializer for ys +# 2218| getExpr(): [ConstructorCall] call to vector +# 2218| Type = [VoidType] void +# 2218| ValueCategory = prvalue +# 2218| getArgument(0): [VariableAccess] x +# 2218| Type = [Class] ClassWithDestructor +# 2218| ValueCategory = prvalue(load) +# 2218| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor +# 2218| Type = [VoidType] void +# 2218| ValueCategory = prvalue +# 2218| getQualifier(): [ReuseExpr] reuse of temporary object +# 2218| Type = [Class] ClassWithDestructor +# 2218| ValueCategory = xvalue +# 2218| getArgument(0).getFullyConverted(): [TemporaryObjectExpr] temporary object +# 2218| Type = [Class] ClassWithDestructor +# 2218| ValueCategory = lvalue +# 2218| getChild(1): [DeclStmt] declaration +# 2218| getDeclarationEntry(0): [VariableDeclarationEntry] declaration of (__range) +# 2218| Type = [LValueReferenceType] vector & +#-----| getVariable().getInitializer(): [Initializer] initializer for (__range) +# 2218| getExpr(): [VariableAccess] ys +# 2218| Type = [ClassTemplateInstantiation,Struct] vector +# 2218| ValueCategory = lvalue +# 2218| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 2218| Type = [LValueReferenceType] vector & +# 2218| ValueCategory = prvalue +# 2218| getBeginEndDeclaration(): [DeclStmt] declaration +# 2218| getDeclarationEntry(0): [VariableDeclarationEntry] declaration of (__begin) +# 2218| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +#-----| getVariable().getInitializer(): [Initializer] initializer for (__begin) +# 2218| getExpr(): [FunctionCall] call to begin +# 2218| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +# 2218| ValueCategory = prvalue +# 2218| getQualifier(): [VariableAccess] (__range) +# 2218| Type = [LValueReferenceType] vector & +# 2218| ValueCategory = prvalue(load) +#-----| getQualifier().getFullyConverted(): [CStyleCast] (const vector)... +#-----| Conversion = [GlvalueConversion] glvalue conversion +#-----| Type = [SpecifiedType] const vector +#-----| ValueCategory = lvalue +#-----| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +#-----| Type = [ClassTemplateInstantiation,Struct] vector +#-----| ValueCategory = lvalue +# 2218| getDeclarationEntry(1): [VariableDeclarationEntry] declaration of (__end) +# 2218| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +#-----| getVariable().getInitializer(): [Initializer] initializer for (__end) +# 2218| getExpr(): [FunctionCall] call to end +# 2218| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +# 2218| ValueCategory = prvalue +# 2218| getQualifier(): [VariableAccess] (__range) +# 2218| Type = [LValueReferenceType] vector & +# 2218| ValueCategory = prvalue(load) +#-----| getQualifier().getFullyConverted(): [CStyleCast] (const vector)... +#-----| Conversion = [GlvalueConversion] glvalue conversion +#-----| Type = [SpecifiedType] const vector +#-----| ValueCategory = lvalue +#-----| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +#-----| Type = [ClassTemplateInstantiation,Struct] vector +#-----| ValueCategory = lvalue +# 2218| getCondition(): [FunctionCall] call to operator!= +# 2218| Type = [BoolType] bool +# 2218| ValueCategory = prvalue +# 2218| getQualifier(): [VariableAccess] (__begin) +# 2218| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +# 2218| ValueCategory = lvalue +# 2218| getArgument(0): [ConstructorCall] call to iterator +# 2218| Type = [VoidType] void +# 2218| ValueCategory = prvalue +# 2218| getArgument(0): [VariableAccess] (__end) +# 2218| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +# 2218| ValueCategory = lvalue +#-----| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) +#-----| Type = [LValueReferenceType] const iterator & +#-----| ValueCategory = prvalue +#-----| getExpr(): [CStyleCast] (const iterator)... +#-----| Conversion = [GlvalueConversion] glvalue conversion +#-----| Type = [SpecifiedType] const iterator +#-----| ValueCategory = lvalue +#-----| getQualifier().getFullyConverted(): [CStyleCast] (const iterator)... +#-----| Conversion = [GlvalueConversion] glvalue conversion +#-----| Type = [SpecifiedType] const iterator +#-----| ValueCategory = lvalue +#-----| getArgument(0).getFullyConverted(): [TemporaryObjectExpr] temporary object +#-----| Type = [ClassTemplateInstantiation,Struct] iterator +#-----| ValueCategory = lvalue +# 2218| getUpdate(): [FunctionCall] call to operator++ +# 2218| Type = [LValueReferenceType] iterator & +# 2218| ValueCategory = prvalue +# 2218| getQualifier(): [VariableAccess] (__begin) +# 2218| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +# 2218| ValueCategory = lvalue +# 2218| getChild(5): [DeclStmt] declaration +# 2218| getDeclarationEntry(0): [VariableDeclarationEntry] definition of y +# 2218| Type = [Class] ClassWithDestructor +# 2218| getVariable().getInitializer(): [Initializer] initializer for y +# 2218| getExpr(): [OverloadedPointerDereferenceExpr] call to operator* +# 2218| Type = [LValueReferenceType] ClassWithDestructor & +# 2218| ValueCategory = prvalue +# 2218| getQualifier(): [VariableAccess] (__begin) +# 2218| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +# 2218| ValueCategory = lvalue +#-----| getQualifier().getFullyConverted(): [CStyleCast] (const iterator)... +#-----| Conversion = [GlvalueConversion] glvalue conversion +#-----| Type = [SpecifiedType] const iterator +#-----| ValueCategory = lvalue +# 2218| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 2218| Type = [Class] ClassWithDestructor +# 2218| ValueCategory = prvalue(load) +# 2218| getStmt(): [BlockStmt] { ... } +# 2219| getStmt(0): [ExprStmt] ExprStmt +# 2219| getExpr(): [FunctionCall] call to set_x +# 2219| Type = [VoidType] void +# 2219| ValueCategory = prvalue +# 2219| getQualifier(): [VariableAccess] y +# 2219| Type = [Class] ClassWithDestructor +# 2219| ValueCategory = lvalue +# 2219| getArgument(0): [CharLiteral] 97 +# 2219| Type = [PlainCharType] char +# 2219| Value = [CharLiteral] 97 +# 2219| ValueCategory = prvalue +# 2220| getStmt(1): [IfStmt] if (...) ... +# 2220| getCondition(): [EQExpr] ... == ... +# 2220| Type = [BoolType] bool +# 2220| ValueCategory = prvalue +# 2220| getLeftOperand(): [FunctionCall] call to get_x +# 2220| Type = [PlainCharType] char +# 2220| ValueCategory = prvalue +# 2220| getQualifier(): [VariableAccess] y +# 2220| Type = [Class] ClassWithDestructor +# 2220| ValueCategory = lvalue +# 2220| getRightOperand(): [CharLiteral] 98 +# 2220| Type = [PlainCharType] char +# 2220| Value = [CharLiteral] 98 +# 2220| ValueCategory = prvalue +# 2220| getLeftOperand().getFullyConverted(): [CStyleCast] (int)... +# 2220| Conversion = [IntegralConversion] integral conversion +# 2220| Type = [IntType] int +# 2220| ValueCategory = prvalue +# 2220| getRightOperand().getFullyConverted(): [CStyleCast] (int)... +# 2220| Conversion = [IntegralConversion] integral conversion +# 2220| Type = [IntType] int +# 2220| Value = [CStyleCast] 98 +# 2220| ValueCategory = prvalue +# 2221| getThen(): [ReturnStmt] return ... +# 2218| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor +# 2218| Type = [VoidType] void +# 2218| ValueCategory = prvalue +# 2218| getQualifier(): [VariableAccess] y +# 2218| Type = [Class] ClassWithDestructor +# 2218| ValueCategory = lvalue +# 2218| getImplicitDestructorCall(1): [DestructorCall] call to ~vector +# 2218| Type = [VoidType] void +# 2218| ValueCategory = prvalue +# 2218| getQualifier(): [VariableAccess] ys +# 2218| Type = [ClassTemplateInstantiation,Struct] vector +# 2218| ValueCategory = lvalue +# 2233| getImplicitDestructorCall(2): [DestructorCall] call to ~ClassWithDestructor +# 2233| Type = [VoidType] void +# 2233| ValueCategory = prvalue +# 2233| getQualifier(): [VariableAccess] x +# 2233| Type = [Class] ClassWithDestructor +# 2233| ValueCategory = lvalue +# 2218| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor +# 2218| Type = [VoidType] void +# 2218| ValueCategory = prvalue +# 2218| getQualifier(): [VariableAccess] y +# 2218| Type = [Class] ClassWithDestructor +# 2218| ValueCategory = lvalue +# 2218| getImplicitDestructorCall(0): [DestructorCall] call to ~vector +# 2218| Type = [VoidType] void +# 2218| ValueCategory = prvalue +# 2218| getQualifier(): [VariableAccess] ys +# 2218| Type = [ClassTemplateInstantiation,Struct] vector +# 2218| ValueCategory = lvalue +# 2218| getUpdate().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 2218| Type = [ClassTemplateInstantiation,Struct] iterator +# 2218| ValueCategory = lvalue +# 2224| getStmt(7): [RangeBasedForStmt] for(...:...) ... +# 2224| getInitialization(): [DeclStmt] declaration +# 2224| getDeclarationEntry(0): [VariableDeclarationEntry] definition of ys +# 2224| Type = [ClassTemplateInstantiation,Struct] vector +# 2224| getVariable().getInitializer(): [Initializer] initializer for ys +# 2224| getExpr(): [ConstructorCall] call to vector +# 2224| Type = [VoidType] void +# 2224| ValueCategory = prvalue +# 2224| getArgument(0): [Literal] 1 +# 2224| Type = [IntType] int +# 2224| Value = [Literal] 1 +# 2224| ValueCategory = prvalue +# 2224| getChild(1): [DeclStmt] declaration +# 2224| getDeclarationEntry(0): [VariableDeclarationEntry] declaration of (__range) +# 2224| Type = [LValueReferenceType] vector & +#-----| getVariable().getInitializer(): [Initializer] initializer for (__range) +# 2224| getExpr(): [VariableAccess] ys +# 2224| Type = [ClassTemplateInstantiation,Struct] vector +# 2224| ValueCategory = lvalue +# 2224| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 2224| Type = [LValueReferenceType] vector & +# 2224| ValueCategory = prvalue +# 2224| getBeginEndDeclaration(): [DeclStmt] declaration +# 2224| getDeclarationEntry(0): [VariableDeclarationEntry] declaration of (__begin) +# 2224| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +#-----| getVariable().getInitializer(): [Initializer] initializer for (__begin) +# 2224| getExpr(): [FunctionCall] call to begin +# 2224| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +# 2224| ValueCategory = prvalue +# 2224| getQualifier(): [VariableAccess] (__range) +# 2224| Type = [LValueReferenceType] vector & +# 2224| ValueCategory = prvalue(load) +#-----| getQualifier().getFullyConverted(): [CStyleCast] (const vector)... +#-----| Conversion = [GlvalueConversion] glvalue conversion +#-----| Type = [SpecifiedType] const vector +#-----| ValueCategory = lvalue +#-----| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +#-----| Type = [ClassTemplateInstantiation,Struct] vector +#-----| ValueCategory = lvalue +# 2224| getDeclarationEntry(1): [VariableDeclarationEntry] declaration of (__end) +# 2224| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +#-----| getVariable().getInitializer(): [Initializer] initializer for (__end) +# 2224| getExpr(): [FunctionCall] call to end +# 2224| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +# 2224| ValueCategory = prvalue +# 2224| getQualifier(): [VariableAccess] (__range) +# 2224| Type = [LValueReferenceType] vector & +# 2224| ValueCategory = prvalue(load) +#-----| getQualifier().getFullyConverted(): [CStyleCast] (const vector)... +#-----| Conversion = [GlvalueConversion] glvalue conversion +#-----| Type = [SpecifiedType] const vector +#-----| ValueCategory = lvalue +#-----| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +#-----| Type = [ClassTemplateInstantiation,Struct] vector +#-----| ValueCategory = lvalue +# 2224| getCondition(): [FunctionCall] call to operator!= +# 2224| Type = [BoolType] bool +# 2224| ValueCategory = prvalue +# 2224| getQualifier(): [VariableAccess] (__begin) +# 2224| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +# 2224| ValueCategory = lvalue +# 2224| getArgument(0): [ConstructorCall] call to iterator +# 2224| Type = [VoidType] void +# 2224| ValueCategory = prvalue +# 2224| getArgument(0): [VariableAccess] (__end) +# 2224| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +# 2224| ValueCategory = lvalue +#-----| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) +#-----| Type = [LValueReferenceType] const iterator & +#-----| ValueCategory = prvalue +#-----| getExpr(): [CStyleCast] (const iterator)... +#-----| Conversion = [GlvalueConversion] glvalue conversion +#-----| Type = [SpecifiedType] const iterator +#-----| ValueCategory = lvalue +#-----| getQualifier().getFullyConverted(): [CStyleCast] (const iterator)... +#-----| Conversion = [GlvalueConversion] glvalue conversion +#-----| Type = [SpecifiedType] const iterator +#-----| ValueCategory = lvalue +#-----| getArgument(0).getFullyConverted(): [TemporaryObjectExpr] temporary object +#-----| Type = [ClassTemplateInstantiation,Struct] iterator +#-----| ValueCategory = lvalue +# 2224| getUpdate(): [FunctionCall] call to operator++ +# 2224| Type = [LValueReferenceType] iterator & +# 2224| ValueCategory = prvalue +# 2224| getQualifier(): [VariableAccess] (__begin) +# 2224| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +# 2224| ValueCategory = lvalue +# 2224| getChild(5): [DeclStmt] declaration +# 2224| getDeclarationEntry(0): [VariableDeclarationEntry] definition of y +# 2224| Type = [IntType] int +# 2224| getVariable().getInitializer(): [Initializer] initializer for y +# 2224| getExpr(): [OverloadedPointerDereferenceExpr] call to operator* +# 2224| Type = [LValueReferenceType] int & +# 2224| ValueCategory = prvalue +# 2224| getQualifier(): [VariableAccess] (__begin) +# 2224| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +# 2224| ValueCategory = lvalue +#-----| getQualifier().getFullyConverted(): [CStyleCast] (const iterator)... +#-----| Conversion = [GlvalueConversion] glvalue conversion +#-----| Type = [SpecifiedType] const iterator +#-----| ValueCategory = lvalue +# 2224| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 2224| Type = [IntType] int +# 2224| ValueCategory = prvalue(load) +# 2224| getStmt(): [BlockStmt] { ... } +# 2225| getStmt(0): [IfStmt] if (...) ... +# 2225| getCondition(): [EQExpr] ... == ... +# 2225| Type = [BoolType] bool +# 2225| ValueCategory = prvalue +# 2225| getLeftOperand(): [VariableAccess] y +# 2225| Type = [IntType] int +# 2225| ValueCategory = prvalue(load) +# 2225| getRightOperand(): [Literal] 1 +# 2225| Type = [IntType] int +# 2225| Value = [Literal] 1 +# 2225| ValueCategory = prvalue +# 2226| getThen(): [ReturnStmt] return ... +# 2224| getImplicitDestructorCall(0): [DestructorCall] call to ~vector +# 2224| Type = [VoidType] void +# 2224| ValueCategory = prvalue +# 2224| getQualifier(): [VariableAccess] ys +# 2224| Type = [ClassTemplateInstantiation,Struct] vector +# 2224| ValueCategory = lvalue +# 2233| getImplicitDestructorCall(1): [DestructorCall] call to ~ClassWithDestructor +# 2233| Type = [VoidType] void +# 2233| ValueCategory = prvalue +# 2233| getQualifier(): [VariableAccess] x +# 2233| Type = [Class] ClassWithDestructor +# 2233| ValueCategory = lvalue +# 2224| getImplicitDestructorCall(0): [DestructorCall] call to ~vector +# 2224| Type = [VoidType] void +# 2224| ValueCategory = prvalue +# 2224| getQualifier(): [VariableAccess] ys +# 2224| Type = [ClassTemplateInstantiation,Struct] vector +# 2224| ValueCategory = lvalue +# 2224| getUpdate().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 2224| Type = [ClassTemplateInstantiation,Struct] iterator +# 2224| ValueCategory = lvalue +# 2229| getStmt(8): [RangeBasedForStmt] for(...:...) ... +# 2229| getInitialization(): [DeclStmt] declaration +# 2229| getDeclarationEntry(0): [VariableDeclarationEntry] definition of ys +# 2229| Type = [ClassTemplateInstantiation,Struct] vector +# 2229| getVariable().getInitializer(): [Initializer] initializer for ys +# 2229| getExpr(): [ConstructorCall] call to vector +# 2229| Type = [VoidType] void +# 2229| ValueCategory = prvalue +# 2229| getArgument(0): [VariableAccess] x +# 2229| Type = [Class] ClassWithDestructor +# 2229| ValueCategory = prvalue(load) +# 2229| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor +# 2229| Type = [VoidType] void +# 2229| ValueCategory = prvalue +# 2229| getQualifier(): [ReuseExpr] reuse of temporary object +# 2229| Type = [Class] ClassWithDestructor +# 2229| ValueCategory = xvalue +# 2229| getArgument(0).getFullyConverted(): [TemporaryObjectExpr] temporary object +# 2229| Type = [Class] ClassWithDestructor +# 2229| ValueCategory = lvalue +# 2229| getChild(1): [DeclStmt] declaration +# 2229| getDeclarationEntry(0): [VariableDeclarationEntry] declaration of (__range) +# 2229| Type = [LValueReferenceType] vector & +#-----| getVariable().getInitializer(): [Initializer] initializer for (__range) +# 2229| getExpr(): [VariableAccess] ys +# 2229| Type = [ClassTemplateInstantiation,Struct] vector +# 2229| ValueCategory = lvalue +# 2229| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 2229| Type = [LValueReferenceType] vector & +# 2229| ValueCategory = prvalue +# 2229| getBeginEndDeclaration(): [DeclStmt] declaration +# 2229| getDeclarationEntry(0): [VariableDeclarationEntry] declaration of (__begin) +# 2229| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +#-----| getVariable().getInitializer(): [Initializer] initializer for (__begin) +# 2229| getExpr(): [FunctionCall] call to begin +# 2229| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +# 2229| ValueCategory = prvalue +# 2229| getQualifier(): [VariableAccess] (__range) +# 2229| Type = [LValueReferenceType] vector & +# 2229| ValueCategory = prvalue(load) +#-----| getQualifier().getFullyConverted(): [CStyleCast] (const vector)... +#-----| Conversion = [GlvalueConversion] glvalue conversion +#-----| Type = [SpecifiedType] const vector +#-----| ValueCategory = lvalue +#-----| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +#-----| Type = [ClassTemplateInstantiation,Struct] vector +#-----| ValueCategory = lvalue +# 2229| getDeclarationEntry(1): [VariableDeclarationEntry] declaration of (__end) +# 2229| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +#-----| getVariable().getInitializer(): [Initializer] initializer for (__end) +# 2229| getExpr(): [FunctionCall] call to end +# 2229| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +# 2229| ValueCategory = prvalue +# 2229| getQualifier(): [VariableAccess] (__range) +# 2229| Type = [LValueReferenceType] vector & +# 2229| ValueCategory = prvalue(load) +#-----| getQualifier().getFullyConverted(): [CStyleCast] (const vector)... +#-----| Conversion = [GlvalueConversion] glvalue conversion +#-----| Type = [SpecifiedType] const vector +#-----| ValueCategory = lvalue +#-----| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +#-----| Type = [ClassTemplateInstantiation,Struct] vector +#-----| ValueCategory = lvalue +# 2229| getCondition(): [FunctionCall] call to operator!= +# 2229| Type = [BoolType] bool +# 2229| ValueCategory = prvalue +# 2229| getQualifier(): [VariableAccess] (__begin) +# 2229| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +# 2229| ValueCategory = lvalue +# 2229| getArgument(0): [ConstructorCall] call to iterator +# 2229| Type = [VoidType] void +# 2229| ValueCategory = prvalue +# 2229| getArgument(0): [VariableAccess] (__end) +# 2229| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +# 2229| ValueCategory = lvalue +#-----| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) +#-----| Type = [LValueReferenceType] const iterator & +#-----| ValueCategory = prvalue +#-----| getExpr(): [CStyleCast] (const iterator)... +#-----| Conversion = [GlvalueConversion] glvalue conversion +#-----| Type = [SpecifiedType] const iterator +#-----| ValueCategory = lvalue +#-----| getQualifier().getFullyConverted(): [CStyleCast] (const iterator)... +#-----| Conversion = [GlvalueConversion] glvalue conversion +#-----| Type = [SpecifiedType] const iterator +#-----| ValueCategory = lvalue +#-----| getArgument(0).getFullyConverted(): [TemporaryObjectExpr] temporary object +#-----| Type = [ClassTemplateInstantiation,Struct] iterator +#-----| ValueCategory = lvalue +# 2229| getUpdate(): [FunctionCall] call to operator++ +# 2229| Type = [LValueReferenceType] iterator & +# 2229| ValueCategory = prvalue +# 2229| getQualifier(): [VariableAccess] (__begin) +# 2229| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +# 2229| ValueCategory = lvalue +# 2229| getChild(5): [DeclStmt] declaration +# 2229| getDeclarationEntry(0): [VariableDeclarationEntry] definition of y +# 2229| Type = [Class] ClassWithDestructor +# 2229| getVariable().getInitializer(): [Initializer] initializer for y +# 2229| getExpr(): [OverloadedPointerDereferenceExpr] call to operator* +# 2229| Type = [LValueReferenceType] ClassWithDestructor & +# 2229| ValueCategory = prvalue +# 2229| getQualifier(): [VariableAccess] (__begin) +# 2229| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +# 2229| ValueCategory = lvalue +#-----| getQualifier().getFullyConverted(): [CStyleCast] (const iterator)... +#-----| Conversion = [GlvalueConversion] glvalue conversion +#-----| Type = [SpecifiedType] const iterator +#-----| ValueCategory = lvalue +# 2229| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 2229| Type = [Class] ClassWithDestructor +# 2229| ValueCategory = prvalue(load) +# 2229| getStmt(): [BlockStmt] { ... } +# 2230| getStmt(0): [DeclStmt] declaration +# 2230| getDeclarationEntry(0): [VariableDeclarationEntry] definition of z1 +# 2230| Type = [Class] ClassWithDestructor +# 2230| getVariable().getInitializer(): [Initializer] initializer for z1 +# 2230| getExpr(): [ConstructorCall] call to ClassWithDestructor +# 2230| Type = [VoidType] void +# 2230| ValueCategory = prvalue +# 2231| getStmt(1): [DeclStmt] declaration +# 2231| getDeclarationEntry(0): [VariableDeclarationEntry] definition of z2 +# 2231| Type = [Class] ClassWithDestructor +# 2231| getVariable().getInitializer(): [Initializer] initializer for z2 +# 2231| getExpr(): [ConstructorCall] call to ClassWithDestructor +# 2231| Type = [VoidType] void +# 2231| ValueCategory = prvalue +# 2232| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor +# 2232| Type = [VoidType] void +# 2232| ValueCategory = prvalue +# 2232| getQualifier(): [VariableAccess] z2 +# 2232| Type = [Class] ClassWithDestructor +# 2232| ValueCategory = lvalue +# 2232| getImplicitDestructorCall(1): [DestructorCall] call to ~ClassWithDestructor +# 2232| Type = [VoidType] void +# 2232| ValueCategory = prvalue +# 2232| getQualifier(): [VariableAccess] z1 +# 2232| Type = [Class] ClassWithDestructor +# 2232| ValueCategory = lvalue +# 2229| getImplicitDestructorCall(2): [DestructorCall] call to ~ClassWithDestructor +# 2229| Type = [VoidType] void +# 2229| ValueCategory = prvalue +# 2229| getQualifier(): [VariableAccess] y +# 2229| Type = [Class] ClassWithDestructor +# 2229| ValueCategory = lvalue +# 2229| getImplicitDestructorCall(0): [DestructorCall] call to ~vector +# 2229| Type = [VoidType] void +# 2229| ValueCategory = prvalue +# 2229| getQualifier(): [VariableAccess] ys +# 2229| Type = [ClassTemplateInstantiation,Struct] vector +# 2229| ValueCategory = lvalue +# 2229| getUpdate().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 2229| Type = [ClassTemplateInstantiation,Struct] iterator +# 2229| ValueCategory = lvalue +# 2233| getStmt(9): [ReturnStmt] return ... +# 2233| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor +# 2233| Type = [VoidType] void +# 2233| ValueCategory = prvalue +# 2233| getQualifier(): [VariableAccess] x +# 2233| Type = [Class] ClassWithDestructor +# 2233| ValueCategory = lvalue +# 2235| [TopLevelFunction] void static_variable_with_destructor_1() +# 2235| : +# 2235| getEntryPoint(): [BlockStmt] { ... } +# 2236| getStmt(0): [DeclStmt] declaration +# 2236| getDeclarationEntry(0): [VariableDeclarationEntry] definition of a +# 2236| Type = [Class] ClassWithDestructor +# 2236| getVariable().getInitializer(): [Initializer] initializer for a +# 2236| getExpr(): [ConstructorCall] call to ClassWithDestructor +# 2236| Type = [VoidType] void +# 2236| ValueCategory = prvalue +# 2237| getStmt(1): [DeclStmt] declaration +# 2237| getDeclarationEntry(0): [VariableDeclarationEntry] definition of b +# 2237| Type = [Class] ClassWithDestructor #-----| getVariable().getInitializer(): [Initializer] initializer for b #-----| getExpr(): [ConstructorCall] call to ClassWithDestructor #-----| Type = [VoidType] void #-----| ValueCategory = prvalue -# 2224| getStmt(2): [ReturnStmt] return ... -# 2224| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor -# 2224| Type = [VoidType] void -# 2224| ValueCategory = prvalue -# 2224| getQualifier(): [VariableAccess] a -# 2224| Type = [Class] ClassWithDestructor -# 2224| ValueCategory = lvalue -# 2226| [TopLevelFunction] void static_variable_with_destructor_2() -# 2226| : -# 2226| getEntryPoint(): [BlockStmt] { ... } -# 2227| getStmt(0): [DeclStmt] declaration -# 2227| getDeclarationEntry(0): [VariableDeclarationEntry] definition of a -# 2227| Type = [Class] ClassWithDestructor +# 2238| getStmt(2): [ReturnStmt] return ... +# 2238| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor +# 2238| Type = [VoidType] void +# 2238| ValueCategory = prvalue +# 2238| getQualifier(): [VariableAccess] a +# 2238| Type = [Class] ClassWithDestructor +# 2238| ValueCategory = lvalue +# 2240| [TopLevelFunction] void static_variable_with_destructor_2() +# 2240| : +# 2240| getEntryPoint(): [BlockStmt] { ... } +# 2241| getStmt(0): [DeclStmt] declaration +# 2241| getDeclarationEntry(0): [VariableDeclarationEntry] definition of a +# 2241| Type = [Class] ClassWithDestructor #-----| getVariable().getInitializer(): [Initializer] initializer for a #-----| getExpr(): [ConstructorCall] call to ClassWithDestructor #-----| Type = [VoidType] void #-----| ValueCategory = prvalue -# 2228| getStmt(1): [DeclStmt] declaration -# 2228| getDeclarationEntry(0): [VariableDeclarationEntry] definition of b -# 2228| Type = [Class] ClassWithDestructor -# 2228| getVariable().getInitializer(): [Initializer] initializer for b -# 2228| getExpr(): [ConstructorCall] call to ClassWithDestructor -# 2228| Type = [VoidType] void -# 2228| ValueCategory = prvalue -# 2229| getStmt(2): [ReturnStmt] return ... -# 2229| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor -# 2229| Type = [VoidType] void -# 2229| ValueCategory = prvalue -# 2229| getQualifier(): [VariableAccess] b -# 2229| Type = [Class] ClassWithDestructor -# 2229| ValueCategory = lvalue -# 2231| [TopLevelFunction] void static_variable_with_destructor_3() -# 2231| : -# 2231| getEntryPoint(): [BlockStmt] { ... } -# 2232| getStmt(0): [DeclStmt] declaration -# 2232| getDeclarationEntry(0): [VariableDeclarationEntry] definition of a -# 2232| Type = [Class] ClassWithDestructor -# 2232| getVariable().getInitializer(): [Initializer] initializer for a -# 2232| getExpr(): [ConstructorCall] call to ClassWithDestructor -# 2232| Type = [VoidType] void -# 2232| ValueCategory = prvalue -# 2233| getStmt(1): [DeclStmt] declaration -# 2233| getDeclarationEntry(0): [VariableDeclarationEntry] definition of b -# 2233| Type = [Class] ClassWithDestructor -# 2233| getVariable().getInitializer(): [Initializer] initializer for b -# 2233| getExpr(): [ConstructorCall] call to ClassWithDestructor -# 2233| Type = [VoidType] void -# 2233| ValueCategory = prvalue -# 2234| getStmt(2): [DeclStmt] declaration -# 2234| getDeclarationEntry(0): [VariableDeclarationEntry] definition of c -# 2234| Type = [Class] ClassWithDestructor +# 2242| getStmt(1): [DeclStmt] declaration +# 2242| getDeclarationEntry(0): [VariableDeclarationEntry] definition of b +# 2242| Type = [Class] ClassWithDestructor +# 2242| getVariable().getInitializer(): [Initializer] initializer for b +# 2242| getExpr(): [ConstructorCall] call to ClassWithDestructor +# 2242| Type = [VoidType] void +# 2242| ValueCategory = prvalue +# 2243| getStmt(2): [ReturnStmt] return ... +# 2243| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor +# 2243| Type = [VoidType] void +# 2243| ValueCategory = prvalue +# 2243| getQualifier(): [VariableAccess] b +# 2243| Type = [Class] ClassWithDestructor +# 2243| ValueCategory = lvalue +# 2245| [TopLevelFunction] void static_variable_with_destructor_3() +# 2245| : +# 2245| getEntryPoint(): [BlockStmt] { ... } +# 2246| getStmt(0): [DeclStmt] declaration +# 2246| getDeclarationEntry(0): [VariableDeclarationEntry] definition of a +# 2246| Type = [Class] ClassWithDestructor +# 2246| getVariable().getInitializer(): [Initializer] initializer for a +# 2246| getExpr(): [ConstructorCall] call to ClassWithDestructor +# 2246| Type = [VoidType] void +# 2246| ValueCategory = prvalue +# 2247| getStmt(1): [DeclStmt] declaration +# 2247| getDeclarationEntry(0): [VariableDeclarationEntry] definition of b +# 2247| Type = [Class] ClassWithDestructor +# 2247| getVariable().getInitializer(): [Initializer] initializer for b +# 2247| getExpr(): [ConstructorCall] call to ClassWithDestructor +# 2247| Type = [VoidType] void +# 2247| ValueCategory = prvalue +# 2248| getStmt(2): [DeclStmt] declaration +# 2248| getDeclarationEntry(0): [VariableDeclarationEntry] definition of c +# 2248| Type = [Class] ClassWithDestructor #-----| getVariable().getInitializer(): [Initializer] initializer for c #-----| getExpr(): [ConstructorCall] call to ClassWithDestructor #-----| Type = [VoidType] void #-----| ValueCategory = prvalue -# 2235| getStmt(3): [ReturnStmt] return ... -# 2235| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor -# 2235| Type = [VoidType] void -# 2235| ValueCategory = prvalue -# 2235| getQualifier(): [VariableAccess] b -# 2235| Type = [Class] ClassWithDestructor -# 2235| ValueCategory = lvalue -# 2235| getImplicitDestructorCall(1): [DestructorCall] call to ~ClassWithDestructor -# 2235| Type = [VoidType] void -# 2235| ValueCategory = prvalue -# 2235| getQualifier(): [VariableAccess] a -# 2235| Type = [Class] ClassWithDestructor -# 2235| ValueCategory = lvalue -# 2237| [GlobalVariable] ClassWithDestructor global_class_with_destructor -# 2237| getInitializer(): [Initializer] initializer for global_class_with_destructor -# 2237| getExpr(): [ConstructorCall] call to ClassWithDestructor -# 2237| Type = [VoidType] void -# 2237| ValueCategory = prvalue -# 2241| [FunctionTemplateInstantiation,TopLevelFunction] ClassWithDestructor& vacuous_destructor_call::get(ClassWithDestructor&) -# 2241| : -# 2241| getParameter(0): [Parameter] t -# 2241| Type = [LValueReferenceType] ClassWithDestructor & -# 2241| getEntryPoint(): [BlockStmt] { ... } -# 2241| getStmt(0): [ReturnStmt] return ... -# 2241| getExpr(): [VariableAccess] t -# 2241| Type = [LValueReferenceType] ClassWithDestructor & -# 2241| ValueCategory = prvalue(load) -# 2241| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 2241| Type = [LValueReferenceType] ClassWithDestructor & -# 2241| ValueCategory = prvalue -# 2241| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -# 2241| Type = [Class] ClassWithDestructor -# 2241| ValueCategory = lvalue -# 2241| [TemplateFunction,TopLevelFunction] T& vacuous_destructor_call::get(T&) -# 2241| : -# 2241| getParameter(0): [Parameter] t -# 2241| Type = [LValueReferenceType] T & -# 2241| getEntryPoint(): [BlockStmt] { ... } -# 2241| getStmt(0): [ReturnStmt] return ... -# 2241| getExpr(): [VariableAccess] t -# 2241| Type = [LValueReferenceType] T & -# 2241| ValueCategory = prvalue(load) -# 2241| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 2241| Type = [TemplateParameter] T -# 2241| ValueCategory = lvalue -# 2241| [FunctionTemplateInstantiation,TopLevelFunction] int& vacuous_destructor_call::get(int&) -# 2241| : -# 2241| getParameter(0): [Parameter] t -# 2241| Type = [LValueReferenceType] int & -# 2241| getEntryPoint(): [BlockStmt] { ... } -# 2241| getStmt(0): [ReturnStmt] return ... -# 2241| getExpr(): [VariableAccess] t -# 2241| Type = [LValueReferenceType] int & -# 2241| ValueCategory = prvalue(load) -# 2241| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 2241| Type = [LValueReferenceType] int & -# 2241| ValueCategory = prvalue -# 2241| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -# 2241| Type = [IntType] int -# 2241| ValueCategory = lvalue -# 2244| [FunctionTemplateInstantiation,TopLevelFunction] void vacuous_destructor_call::call_destructor(ClassWithDestructor&) -# 2244| : -# 2244| getParameter(0): [Parameter] t -# 2244| Type = [LValueReferenceType] ClassWithDestructor & -# 2244| getEntryPoint(): [BlockStmt] { ... } -# 2245| getStmt(0): [ExprStmt] ExprStmt -# 2245| getExpr(): [DestructorCall] call to ~ClassWithDestructor -# 2245| Type = [VoidType] void -# 2245| ValueCategory = prvalue -# 2245| getQualifier(): [FunctionCall] call to get -# 2245| Type = [LValueReferenceType] ClassWithDestructor & -# 2245| ValueCategory = prvalue -# 2245| getArgument(0): [VariableAccess] t -# 2245| Type = [LValueReferenceType] ClassWithDestructor & -# 2245| ValueCategory = prvalue(load) -# 2245| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) -# 2245| Type = [LValueReferenceType] ClassWithDestructor & -# 2245| ValueCategory = prvalue -# 2245| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -# 2245| Type = [Class] ClassWithDestructor -# 2245| ValueCategory = lvalue -# 2245| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 2245| Type = [Class] ClassWithDestructor -# 2245| ValueCategory = lvalue -# 2246| getStmt(1): [ReturnStmt] return ... -# 2244| [TemplateFunction,TopLevelFunction] void vacuous_destructor_call::call_destructor(T&) -# 2244| : -# 2244| getParameter(0): [Parameter] t -# 2244| Type = [LValueReferenceType] T & -# 2244| getEntryPoint(): [BlockStmt] { ... } -# 2245| getStmt(0): [ExprStmt] ExprStmt -# 2245| getExpr(): [ExprCall] call to expression -# 2245| Type = [UnknownType] unknown -# 2245| ValueCategory = prvalue -# 2245| getExpr(): [Literal] Unknown literal -# 2245| Type = [UnknownType] unknown -# 2245| ValueCategory = prvalue -# 2245| getChild(-1): [ExprCall] call to expression -# 2245| Type = [UnknownType] unknown -# 2245| ValueCategory = prvalue -# 2245| getExpr(): [Literal] Unknown literal -# 2245| Type = [UnknownType] unknown -# 2245| ValueCategory = prvalue -# 2245| getArgument(0): [VariableAccess] t -# 2245| Type = [LValueReferenceType] T & -# 2245| ValueCategory = prvalue(load) -# 2245| getArgument(0).getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 2245| Type = [TemplateParameter] T -# 2245| ValueCategory = lvalue -# 2246| getStmt(1): [ReturnStmt] return ... -# 2244| [FunctionTemplateInstantiation,TopLevelFunction] void vacuous_destructor_call::call_destructor(int&) -# 2244| : -# 2244| getParameter(0): [Parameter] t -# 2244| Type = [LValueReferenceType] int & -# 2244| getEntryPoint(): [BlockStmt] { ... } -# 2245| getStmt(0): [ExprStmt] ExprStmt -# 2245| getExpr(): [VacuousDestructorCall] (vacuous destructor call) -# 2245| Type = [VoidType] void -# 2245| ValueCategory = prvalue -# 2245| getChild(0): [FunctionCall] call to get -# 2245| Type = [LValueReferenceType] int & -# 2245| ValueCategory = prvalue -# 2245| getArgument(0): [VariableAccess] t -# 2245| Type = [LValueReferenceType] int & -# 2245| ValueCategory = prvalue(load) -# 2245| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) -# 2245| Type = [LValueReferenceType] int & -# 2245| ValueCategory = prvalue -# 2245| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -# 2245| Type = [IntType] int -# 2245| ValueCategory = lvalue -# 2245| getChild(0).getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 2245| Type = [IntType] int -# 2245| ValueCategory = lvalue -# 2246| getStmt(1): [ReturnStmt] return ... -# 2248| [TopLevelFunction] void vacuous_destructor_call::non_vacuous_destructor_call() -# 2248| : -# 2248| getEntryPoint(): [BlockStmt] { ... } -# 2249| getStmt(0): [DeclStmt] declaration -# 2249| getDeclarationEntry(0): [VariableDeclarationEntry] definition of c -# 2249| Type = [Class] ClassWithDestructor -# 2249| getVariable().getInitializer(): [Initializer] initializer for c -# 2249| getExpr(): [ConstructorCall] call to ClassWithDestructor -# 2249| Type = [VoidType] void -# 2249| ValueCategory = prvalue -# 2250| getStmt(1): [ExprStmt] ExprStmt -# 2250| getExpr(): [FunctionCall] call to call_destructor -# 2250| Type = [VoidType] void -# 2250| ValueCategory = prvalue -# 2250| getArgument(0): [VariableAccess] c -# 2250| Type = [Class] ClassWithDestructor -# 2250| ValueCategory = lvalue -# 2250| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) -# 2250| Type = [LValueReferenceType] ClassWithDestructor & -# 2250| ValueCategory = prvalue -# 2251| getStmt(2): [ReturnStmt] return ... -# 2251| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor -# 2251| Type = [VoidType] void -# 2251| ValueCategory = prvalue -# 2251| getQualifier(): [VariableAccess] c -# 2251| Type = [Class] ClassWithDestructor -# 2251| ValueCategory = lvalue -# 2253| [TopLevelFunction] void vacuous_destructor_call::vacuous_destructor_call() -# 2253| : -# 2253| getEntryPoint(): [BlockStmt] { ... } -# 2254| getStmt(0): [DeclStmt] declaration -# 2254| getDeclarationEntry(0): [VariableDeclarationEntry] definition of i -# 2254| Type = [IntType] int -# 2255| getStmt(1): [ExprStmt] ExprStmt -# 2255| getExpr(): [FunctionCall] call to call_destructor -# 2255| Type = [VoidType] void +# 2249| getStmt(3): [ReturnStmt] return ... +# 2249| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor +# 2249| Type = [VoidType] void +# 2249| ValueCategory = prvalue +# 2249| getQualifier(): [VariableAccess] b +# 2249| Type = [Class] ClassWithDestructor +# 2249| ValueCategory = lvalue +# 2249| getImplicitDestructorCall(1): [DestructorCall] call to ~ClassWithDestructor +# 2249| Type = [VoidType] void +# 2249| ValueCategory = prvalue +# 2249| getQualifier(): [VariableAccess] a +# 2249| Type = [Class] ClassWithDestructor +# 2249| ValueCategory = lvalue +# 2251| [GlobalVariable] ClassWithDestructor global_class_with_destructor +# 2251| getInitializer(): [Initializer] initializer for global_class_with_destructor +# 2251| getExpr(): [ConstructorCall] call to ClassWithDestructor +# 2251| Type = [VoidType] void +# 2251| ValueCategory = prvalue +# 2255| [FunctionTemplateInstantiation,TopLevelFunction] ClassWithDestructor& vacuous_destructor_call::get(ClassWithDestructor&) +# 2255| : +# 2255| getParameter(0): [Parameter] t +# 2255| Type = [LValueReferenceType] ClassWithDestructor & +# 2255| getEntryPoint(): [BlockStmt] { ... } +# 2255| getStmt(0): [ReturnStmt] return ... +# 2255| getExpr(): [VariableAccess] t +# 2255| Type = [LValueReferenceType] ClassWithDestructor & +# 2255| ValueCategory = prvalue(load) +# 2255| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 2255| Type = [LValueReferenceType] ClassWithDestructor & # 2255| ValueCategory = prvalue -# 2255| getArgument(0): [VariableAccess] i +# 2255| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +# 2255| Type = [Class] ClassWithDestructor +# 2255| ValueCategory = lvalue +# 2255| [TemplateFunction,TopLevelFunction] T& vacuous_destructor_call::get(T&) +# 2255| : +# 2255| getParameter(0): [Parameter] t +# 2255| Type = [LValueReferenceType] T & +# 2255| getEntryPoint(): [BlockStmt] { ... } +# 2255| getStmt(0): [ReturnStmt] return ... +# 2255| getExpr(): [VariableAccess] t +# 2255| Type = [LValueReferenceType] T & +# 2255| ValueCategory = prvalue(load) +# 2255| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 2255| Type = [TemplateParameter] T +# 2255| ValueCategory = lvalue +# 2255| [FunctionTemplateInstantiation,TopLevelFunction] int& vacuous_destructor_call::get(int&) +# 2255| : +# 2255| getParameter(0): [Parameter] t +# 2255| Type = [LValueReferenceType] int & +# 2255| getEntryPoint(): [BlockStmt] { ... } +# 2255| getStmt(0): [ReturnStmt] return ... +# 2255| getExpr(): [VariableAccess] t +# 2255| Type = [LValueReferenceType] int & +# 2255| ValueCategory = prvalue(load) +# 2255| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 2255| Type = [LValueReferenceType] int & +# 2255| ValueCategory = prvalue +# 2255| getExpr(): [ReferenceDereferenceExpr] (reference dereference) # 2255| Type = [IntType] int # 2255| ValueCategory = lvalue -# 2255| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) -# 2255| Type = [LValueReferenceType] int & -# 2255| ValueCategory = prvalue -# 2256| getStmt(2): [ReturnStmt] return ... -# 2259| [TopLevelFunction] void TryCatchDestructors(bool) -# 2259| : -# 2259| getParameter(0): [Parameter] b -# 2259| Type = [BoolType] bool -# 2259| getEntryPoint(): [BlockStmt] { ... } -# 2260| getStmt(0): [TryStmt] try { ... } -# 2260| getStmt(): [BlockStmt] { ... } -# 2261| getStmt(0): [DeclStmt] declaration -# 2261| getDeclarationEntry(0): [VariableDeclarationEntry] definition of s -# 2261| Type = [Struct] String -# 2261| getVariable().getInitializer(): [Initializer] initializer for s -# 2261| getExpr(): [ConstructorCall] call to String -# 2261| Type = [VoidType] void -# 2261| ValueCategory = prvalue -# 2262| getStmt(1): [IfStmt] if (...) ... -# 2262| getCondition(): [VariableAccess] b -# 2262| Type = [BoolType] bool -# 2262| ValueCategory = prvalue(load) -# 2262| getThen(): [BlockStmt] { ... } -# 2263| getStmt(0): [ExprStmt] ExprStmt -# 2263| getExpr(): [ThrowExpr] throw ... -# 2263| Type = [PointerType] const char * -# 2263| ValueCategory = prvalue -# 2263| getExpr(): string literal -# 2263| Type = [ArrayType] const char[15] -# 2263| Value = [StringLiteral] "string literal" -# 2263| ValueCategory = lvalue -# 2266| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2266| Type = [VoidType] void -# 2266| ValueCategory = prvalue -# 2266| getQualifier(): [VariableAccess] s -# 2266| Type = [Struct] String -# 2266| ValueCategory = lvalue -# 2263| getExpr().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion -# 2263| Type = [PointerType] const char * -# 2263| ValueCategory = prvalue -# 2265| getStmt(2): [DeclStmt] declaration -# 2265| getDeclarationEntry(0): [VariableDeclarationEntry] definition of s2 -# 2265| Type = [Struct] String -# 2265| getVariable().getInitializer(): [Initializer] initializer for s2 -# 2265| getExpr(): [ConstructorCall] call to String -# 2265| Type = [VoidType] void -# 2265| ValueCategory = prvalue -# 2266| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2266| Type = [VoidType] void -# 2266| ValueCategory = prvalue -# 2266| getQualifier(): [VariableAccess] s2 -# 2266| Type = [Struct] String -# 2266| ValueCategory = lvalue -# 2266| getImplicitDestructorCall(1): [DestructorCall] call to ~String -# 2266| Type = [VoidType] void -# 2266| ValueCategory = prvalue -# 2266| getQualifier(): [VariableAccess] s -# 2266| Type = [Struct] String -# 2266| ValueCategory = lvalue -# 2267| getChild(1): [Handler] -# 2267| getBlock(): [CatchBlock] { ... } -# 2268| getStmt(0): [ExprStmt] ExprStmt -# 2268| getExpr(): [ThrowExpr] throw ... -# 2268| Type = [Struct] String -# 2268| ValueCategory = prvalue -# 2268| getExpr(): [ConstructorCall] call to String -# 2268| Type = [VoidType] void -# 2268| ValueCategory = prvalue -# 2268| getArgument(0): [VariableAccess] s -# 2268| Type = [PointerType] const char * -# 2268| ValueCategory = prvalue(load) -# 2270| getChild(2): [Handler] -# 2270| getBlock(): [CatchBlock] { ... } -# 2272| getChild(3): [Handler] -# 2272| getBlock(): [CatchAnyBlock] { ... } -# 2273| getStmt(0): [ExprStmt] ExprStmt -# 2273| getExpr(): [ReThrowExpr] re-throw exception -# 2273| Type = [VoidType] void -# 2273| ValueCategory = prvalue -# 2275| getStmt(1): [ReturnStmt] return ... -# 2277| [TopLevelFunction] void IfDestructors(bool) -# 2277| : -# 2277| getParameter(0): [Parameter] b -# 2277| Type = [BoolType] bool -# 2277| getEntryPoint(): [BlockStmt] { ... } -# 2278| getStmt(0): [DeclStmt] declaration -# 2278| getDeclarationEntry(0): [VariableDeclarationEntry] definition of s1 -# 2278| Type = [Struct] String -# 2278| getVariable().getInitializer(): [Initializer] initializer for s1 -# 2278| getExpr(): [ConstructorCall] call to String -# 2278| Type = [VoidType] void -# 2278| ValueCategory = prvalue -# 2279| getStmt(1): [IfStmt] if (...) ... -# 2279| getCondition(): [VariableAccess] b -# 2279| Type = [BoolType] bool -# 2279| ValueCategory = prvalue(load) -# 2279| getThen(): [BlockStmt] { ... } -# 2280| getStmt(0): [DeclStmt] declaration -# 2280| getDeclarationEntry(0): [VariableDeclarationEntry] definition of s2 +# 2258| [FunctionTemplateInstantiation,TopLevelFunction] void vacuous_destructor_call::call_destructor(ClassWithDestructor&) +# 2258| : +# 2258| getParameter(0): [Parameter] t +# 2258| Type = [LValueReferenceType] ClassWithDestructor & +# 2258| getEntryPoint(): [BlockStmt] { ... } +# 2259| getStmt(0): [ExprStmt] ExprStmt +# 2259| getExpr(): [DestructorCall] call to ~ClassWithDestructor +# 2259| Type = [VoidType] void +# 2259| ValueCategory = prvalue +# 2259| getQualifier(): [FunctionCall] call to get +# 2259| Type = [LValueReferenceType] ClassWithDestructor & +# 2259| ValueCategory = prvalue +# 2259| getArgument(0): [VariableAccess] t +# 2259| Type = [LValueReferenceType] ClassWithDestructor & +# 2259| ValueCategory = prvalue(load) +# 2259| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) +# 2259| Type = [LValueReferenceType] ClassWithDestructor & +# 2259| ValueCategory = prvalue +# 2259| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +# 2259| Type = [Class] ClassWithDestructor +# 2259| ValueCategory = lvalue +# 2259| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 2259| Type = [Class] ClassWithDestructor +# 2259| ValueCategory = lvalue +# 2260| getStmt(1): [ReturnStmt] return ... +# 2258| [TemplateFunction,TopLevelFunction] void vacuous_destructor_call::call_destructor(T&) +# 2258| : +# 2258| getParameter(0): [Parameter] t +# 2258| Type = [LValueReferenceType] T & +# 2258| getEntryPoint(): [BlockStmt] { ... } +# 2259| getStmt(0): [ExprStmt] ExprStmt +# 2259| getExpr(): [ExprCall] call to expression +# 2259| Type = [UnknownType] unknown +# 2259| ValueCategory = prvalue +# 2259| getExpr(): [Literal] Unknown literal +# 2259| Type = [UnknownType] unknown +# 2259| ValueCategory = prvalue +# 2259| getChild(-1): [ExprCall] call to expression +# 2259| Type = [UnknownType] unknown +# 2259| ValueCategory = prvalue +# 2259| getExpr(): [Literal] Unknown literal +# 2259| Type = [UnknownType] unknown +# 2259| ValueCategory = prvalue +# 2259| getArgument(0): [VariableAccess] t +# 2259| Type = [LValueReferenceType] T & +# 2259| ValueCategory = prvalue(load) +# 2259| getArgument(0).getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 2259| Type = [TemplateParameter] T +# 2259| ValueCategory = lvalue +# 2260| getStmt(1): [ReturnStmt] return ... +# 2258| [FunctionTemplateInstantiation,TopLevelFunction] void vacuous_destructor_call::call_destructor(int&) +# 2258| : +# 2258| getParameter(0): [Parameter] t +# 2258| Type = [LValueReferenceType] int & +# 2258| getEntryPoint(): [BlockStmt] { ... } +# 2259| getStmt(0): [ExprStmt] ExprStmt +# 2259| getExpr(): [VacuousDestructorCall] (vacuous destructor call) +# 2259| Type = [VoidType] void +# 2259| ValueCategory = prvalue +# 2259| getChild(0): [FunctionCall] call to get +# 2259| Type = [LValueReferenceType] int & +# 2259| ValueCategory = prvalue +# 2259| getArgument(0): [VariableAccess] t +# 2259| Type = [LValueReferenceType] int & +# 2259| ValueCategory = prvalue(load) +# 2259| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) +# 2259| Type = [LValueReferenceType] int & +# 2259| ValueCategory = prvalue +# 2259| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +# 2259| Type = [IntType] int +# 2259| ValueCategory = lvalue +# 2259| getChild(0).getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 2259| Type = [IntType] int +# 2259| ValueCategory = lvalue +# 2260| getStmt(1): [ReturnStmt] return ... +# 2262| [TopLevelFunction] void vacuous_destructor_call::non_vacuous_destructor_call() +# 2262| : +# 2262| getEntryPoint(): [BlockStmt] { ... } +# 2263| getStmt(0): [DeclStmt] declaration +# 2263| getDeclarationEntry(0): [VariableDeclarationEntry] definition of c +# 2263| Type = [Class] ClassWithDestructor +# 2263| getVariable().getInitializer(): [Initializer] initializer for c +# 2263| getExpr(): [ConstructorCall] call to ClassWithDestructor +# 2263| Type = [VoidType] void +# 2263| ValueCategory = prvalue +# 2264| getStmt(1): [ExprStmt] ExprStmt +# 2264| getExpr(): [FunctionCall] call to call_destructor +# 2264| Type = [VoidType] void +# 2264| ValueCategory = prvalue +# 2264| getArgument(0): [VariableAccess] c +# 2264| Type = [Class] ClassWithDestructor +# 2264| ValueCategory = lvalue +# 2264| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) +# 2264| Type = [LValueReferenceType] ClassWithDestructor & +# 2264| ValueCategory = prvalue +# 2265| getStmt(2): [ReturnStmt] return ... +# 2265| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor +# 2265| Type = [VoidType] void +# 2265| ValueCategory = prvalue +# 2265| getQualifier(): [VariableAccess] c +# 2265| Type = [Class] ClassWithDestructor +# 2265| ValueCategory = lvalue +# 2267| [TopLevelFunction] void vacuous_destructor_call::vacuous_destructor_call() +# 2267| : +# 2267| getEntryPoint(): [BlockStmt] { ... } +# 2268| getStmt(0): [DeclStmt] declaration +# 2268| getDeclarationEntry(0): [VariableDeclarationEntry] definition of i +# 2268| Type = [IntType] int +# 2269| getStmt(1): [ExprStmt] ExprStmt +# 2269| getExpr(): [FunctionCall] call to call_destructor +# 2269| Type = [VoidType] void +# 2269| ValueCategory = prvalue +# 2269| getArgument(0): [VariableAccess] i +# 2269| Type = [IntType] int +# 2269| ValueCategory = lvalue +# 2269| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) +# 2269| Type = [LValueReferenceType] int & +# 2269| ValueCategory = prvalue +# 2270| getStmt(2): [ReturnStmt] return ... +# 2273| [TopLevelFunction] void TryCatchDestructors(bool) +# 2273| : +# 2273| getParameter(0): [Parameter] b +# 2273| Type = [BoolType] bool +# 2273| getEntryPoint(): [BlockStmt] { ... } +# 2274| getStmt(0): [TryStmt] try { ... } +# 2274| getStmt(): [BlockStmt] { ... } +# 2275| getStmt(0): [DeclStmt] declaration +# 2275| getDeclarationEntry(0): [VariableDeclarationEntry] definition of s +# 2275| Type = [Struct] String +# 2275| getVariable().getInitializer(): [Initializer] initializer for s +# 2275| getExpr(): [ConstructorCall] call to String +# 2275| Type = [VoidType] void +# 2275| ValueCategory = prvalue +# 2276| getStmt(1): [IfStmt] if (...) ... +# 2276| getCondition(): [VariableAccess] b +# 2276| Type = [BoolType] bool +# 2276| ValueCategory = prvalue(load) +# 2276| getThen(): [BlockStmt] { ... } +# 2277| getStmt(0): [ExprStmt] ExprStmt +# 2277| getExpr(): [ThrowExpr] throw ... +# 2277| Type = [PointerType] const char * +# 2277| ValueCategory = prvalue +# 2277| getExpr(): string literal +# 2277| Type = [ArrayType] const char[15] +# 2277| Value = [StringLiteral] "string literal" +# 2277| ValueCategory = lvalue +# 2280| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 2280| Type = [VoidType] void +# 2280| ValueCategory = prvalue +# 2280| getQualifier(): [VariableAccess] s +# 2280| Type = [Struct] String +# 2280| ValueCategory = lvalue +# 2277| getExpr().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion +# 2277| Type = [PointerType] const char * +# 2277| ValueCategory = prvalue +# 2279| getStmt(2): [DeclStmt] declaration +# 2279| getDeclarationEntry(0): [VariableDeclarationEntry] definition of s2 +# 2279| Type = [Struct] String +# 2279| getVariable().getInitializer(): [Initializer] initializer for s2 +# 2279| getExpr(): [ConstructorCall] call to String +# 2279| Type = [VoidType] void +# 2279| ValueCategory = prvalue +# 2280| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 2280| Type = [VoidType] void +# 2280| ValueCategory = prvalue +# 2280| getQualifier(): [VariableAccess] s2 # 2280| Type = [Struct] String -# 2280| getVariable().getInitializer(): [Initializer] initializer for s2 -# 2280| getExpr(): [ConstructorCall] call to String -# 2280| Type = [VoidType] void -# 2280| ValueCategory = prvalue -# 2281| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2281| Type = [VoidType] void -# 2281| ValueCategory = prvalue -# 2281| getQualifier(): [VariableAccess] s2 -# 2281| Type = [Struct] String -# 2281| ValueCategory = lvalue -# 2281| getElse(): [BlockStmt] { ... } -# 2282| getStmt(0): [DeclStmt] declaration -# 2282| getDeclarationEntry(0): [VariableDeclarationEntry] definition of s3 -# 2282| Type = [Struct] String -# 2282| getVariable().getInitializer(): [Initializer] initializer for s3 +# 2280| ValueCategory = lvalue +# 2280| getImplicitDestructorCall(1): [DestructorCall] call to ~String +# 2280| Type = [VoidType] void +# 2280| ValueCategory = prvalue +# 2280| getQualifier(): [VariableAccess] s +# 2280| Type = [Struct] String +# 2280| ValueCategory = lvalue +# 2281| getChild(1): [Handler] +# 2281| getBlock(): [CatchBlock] { ... } +# 2282| getStmt(0): [ExprStmt] ExprStmt +# 2282| getExpr(): [ThrowExpr] throw ... +# 2282| Type = [Struct] String +# 2282| ValueCategory = prvalue # 2282| getExpr(): [ConstructorCall] call to String # 2282| Type = [VoidType] void # 2282| ValueCategory = prvalue -# 2283| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2283| Type = [VoidType] void -# 2283| ValueCategory = prvalue -# 2283| getQualifier(): [VariableAccess] s3 -# 2283| Type = [Struct] String -# 2283| ValueCategory = lvalue -# 2284| getStmt(2): [DeclStmt] declaration -# 2284| getDeclarationEntry(0): [VariableDeclarationEntry] definition of s4 -# 2284| Type = [Struct] String -# 2284| getVariable().getInitializer(): [Initializer] initializer for s4 -# 2284| getExpr(): [ConstructorCall] call to String -# 2284| Type = [VoidType] void -# 2284| ValueCategory = prvalue -# 2285| getStmt(3): [ReturnStmt] return ... -# 2285| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2285| Type = [VoidType] void -# 2285| ValueCategory = prvalue -# 2285| getQualifier(): [VariableAccess] s4 -# 2285| Type = [Struct] String -# 2285| ValueCategory = lvalue -# 2285| getImplicitDestructorCall(1): [DestructorCall] call to ~String -# 2285| Type = [VoidType] void -# 2285| ValueCategory = prvalue -# 2285| getQualifier(): [VariableAccess] s1 -# 2285| Type = [Struct] String -# 2285| ValueCategory = lvalue -# 2287| [TopLevelFunction] void ForDestructors() -# 2287| : -# 2287| getEntryPoint(): [BlockStmt] { ... } -# 2288| getStmt(0): [DeclStmt] declaration -# 2288| getDeclarationEntry(0): [VariableDeclarationEntry] definition of c -# 2288| Type = [PlainCharType] char -# 2288| getVariable().getInitializer(): [Initializer] initializer for c -# 2288| getExpr(): [CharLiteral] 97 -# 2288| Type = [PlainCharType] char -# 2288| Value = [CharLiteral] 97 -# 2288| ValueCategory = prvalue -# 2289| getStmt(1): [ForStmt] for(...;...;...) ... -# 2289| getInitialization(): [DeclStmt] declaration -# 2289| getDeclarationEntry(0): [VariableDeclarationEntry] definition of s -# 2289| Type = [Struct] String -# 2289| getVariable().getInitializer(): [Initializer] initializer for s -# 2289| getExpr(): [ConstructorCall] call to String -# 2289| Type = [VoidType] void -# 2289| ValueCategory = prvalue -# 2289| getArgument(0): hello -# 2289| Type = [ArrayType] const char[6] -# 2289| Value = [StringLiteral] "hello" -# 2289| ValueCategory = lvalue -# 2289| getArgument(0).getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion -# 2289| Type = [PointerType] const char * -# 2289| ValueCategory = prvalue -# 2289| getCondition(): [NEExpr] ... != ... -# 2289| Type = [BoolType] bool -# 2289| ValueCategory = prvalue -# 2289| getLeftOperand(): [VariableAccess] c -# 2289| Type = [PlainCharType] char -# 2289| ValueCategory = prvalue(load) -# 2289| getRightOperand(): [Literal] 0 -# 2289| Type = [IntType] int -# 2289| Value = [Literal] 0 -# 2289| ValueCategory = prvalue -# 2289| getLeftOperand().getFullyConverted(): [CStyleCast] (int)... -# 2289| Conversion = [IntegralConversion] integral conversion -# 2289| Type = [IntType] int -# 2289| ValueCategory = prvalue -# 2289| getUpdate(): [AssignExpr] ... = ... -# 2289| Type = [PlainCharType] char -# 2289| ValueCategory = lvalue -# 2289| getLValue(): [VariableAccess] c -# 2289| Type = [PlainCharType] char -# 2289| ValueCategory = lvalue -# 2289| getRValue(): [FunctionCall] call to pop_back -# 2289| Type = [PlainCharType] char -# 2289| ValueCategory = prvalue -# 2289| getQualifier(): [VariableAccess] s -# 2289| Type = [Struct] String -# 2289| ValueCategory = lvalue -# 2289| getStmt(): [BlockStmt] { ... } -# 2290| getStmt(0): [DeclStmt] declaration -# 2290| getDeclarationEntry(0): [VariableDeclarationEntry] definition of s2 -# 2290| Type = [Struct] String -# 2290| getVariable().getInitializer(): [Initializer] initializer for s2 -# 2290| getExpr(): [ConstructorCall] call to String -# 2290| Type = [VoidType] void -# 2290| ValueCategory = prvalue -# 2291| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2291| Type = [VoidType] void -# 2291| ValueCategory = prvalue -# 2291| getQualifier(): [VariableAccess] s2 -# 2291| Type = [Struct] String -# 2291| ValueCategory = lvalue -# 2289| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2289| Type = [VoidType] void -# 2289| ValueCategory = prvalue -# 2289| getQualifier(): [VariableAccess] s -# 2289| Type = [Struct] String -# 2289| ValueCategory = lvalue -# 2293| getStmt(2): [RangeBasedForStmt] for(...:...) ... -# 2293| getChild(1): [DeclStmt] declaration -# 2293| getDeclarationEntry(0): [VariableDeclarationEntry] declaration of (__range) -# 2293| Type = [RValueReferenceType] vector && -#-----| getVariable().getInitializer(): [Initializer] initializer for (__range) -# 2293| getExpr(): [ConstructorCall] call to vector -# 2293| Type = [VoidType] void -# 2293| ValueCategory = prvalue -# 2293| getArgument(0): [ConstructorCall] call to String -# 2293| Type = [VoidType] void -# 2293| ValueCategory = prvalue -# 2293| getArgument(0): hello -# 2293| Type = [ArrayType] const char[6] -# 2293| Value = [StringLiteral] "hello" -# 2293| ValueCategory = lvalue -# 2293| getArgument(0).getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion -# 2293| Type = [PointerType] const char * -# 2293| ValueCategory = prvalue -# 2293| getArgument(0).getFullyConverted(): [TemporaryObjectExpr] temporary object -# 2293| Type = [Struct] String -# 2293| ValueCategory = lvalue -# 2293| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 2293| Type = [LValueReferenceType] vector & -# 2293| ValueCategory = prvalue -# 2293| getExpr(): [TemporaryObjectExpr] temporary object -# 2293| Type = [ClassTemplateInstantiation,Struct] vector -# 2293| ValueCategory = xvalue -# 2293| getBeginEndDeclaration(): [DeclStmt] declaration -# 2293| getDeclarationEntry(0): [VariableDeclarationEntry] declaration of (__begin) -# 2293| Type = [NestedTypedefType,UsingAliasTypedefType] iterator -#-----| getVariable().getInitializer(): [Initializer] initializer for (__begin) -# 2293| getExpr(): [FunctionCall] call to begin -# 2293| Type = [NestedTypedefType,UsingAliasTypedefType] iterator -# 2293| ValueCategory = prvalue -# 2293| getQualifier(): [VariableAccess] (__range) -# 2293| Type = [RValueReferenceType] vector && -# 2293| ValueCategory = prvalue(load) -#-----| getQualifier().getFullyConverted(): [CStyleCast] (const vector)... -#-----| Conversion = [GlvalueConversion] glvalue conversion -#-----| Type = [SpecifiedType] const vector -#-----| ValueCategory = lvalue -#-----| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -#-----| Type = [ClassTemplateInstantiation,Struct] vector -#-----| ValueCategory = lvalue -# 2293| getDeclarationEntry(1): [VariableDeclarationEntry] declaration of (__end) -# 2293| Type = [NestedTypedefType,UsingAliasTypedefType] iterator -#-----| getVariable().getInitializer(): [Initializer] initializer for (__end) -# 2293| getExpr(): [FunctionCall] call to end -# 2293| Type = [NestedTypedefType,UsingAliasTypedefType] iterator -# 2293| ValueCategory = prvalue -# 2293| getQualifier(): [VariableAccess] (__range) -# 2293| Type = [RValueReferenceType] vector && -# 2293| ValueCategory = prvalue(load) -#-----| getQualifier().getFullyConverted(): [CStyleCast] (const vector)... -#-----| Conversion = [GlvalueConversion] glvalue conversion -#-----| Type = [SpecifiedType] const vector -#-----| ValueCategory = lvalue -#-----| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -#-----| Type = [ClassTemplateInstantiation,Struct] vector -#-----| ValueCategory = lvalue -# 2293| getCondition(): [FunctionCall] call to operator!= +# 2282| getArgument(0): [VariableAccess] s +# 2282| Type = [PointerType] const char * +# 2282| ValueCategory = prvalue(load) +# 2284| getChild(2): [Handler] +# 2284| getBlock(): [CatchBlock] { ... } +# 2286| getChild(3): [Handler] +# 2286| getBlock(): [CatchAnyBlock] { ... } +# 2287| getStmt(0): [ExprStmt] ExprStmt +# 2287| getExpr(): [ReThrowExpr] re-throw exception +# 2287| Type = [VoidType] void +# 2287| ValueCategory = prvalue +# 2289| getStmt(1): [ReturnStmt] return ... +# 2291| [TopLevelFunction] void IfDestructors(bool) +# 2291| : +# 2291| getParameter(0): [Parameter] b +# 2291| Type = [BoolType] bool +# 2291| getEntryPoint(): [BlockStmt] { ... } +# 2292| getStmt(0): [DeclStmt] declaration +# 2292| getDeclarationEntry(0): [VariableDeclarationEntry] definition of s1 +# 2292| Type = [Struct] String +# 2292| getVariable().getInitializer(): [Initializer] initializer for s1 +# 2292| getExpr(): [ConstructorCall] call to String +# 2292| Type = [VoidType] void +# 2292| ValueCategory = prvalue +# 2293| getStmt(1): [IfStmt] if (...) ... +# 2293| getCondition(): [VariableAccess] b # 2293| Type = [BoolType] bool -# 2293| ValueCategory = prvalue -# 2293| getQualifier(): [VariableAccess] (__begin) -# 2293| Type = [NestedTypedefType,UsingAliasTypedefType] iterator -# 2293| ValueCategory = lvalue -# 2293| getArgument(0): [ConstructorCall] call to iterator -# 2293| Type = [VoidType] void -# 2293| ValueCategory = prvalue -# 2293| getArgument(0): [VariableAccess] (__end) -# 2293| Type = [NestedTypedefType,UsingAliasTypedefType] iterator -# 2293| ValueCategory = lvalue -#-----| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) -#-----| Type = [LValueReferenceType] const iterator & -#-----| ValueCategory = prvalue -#-----| getExpr(): [CStyleCast] (const iterator)... -#-----| Conversion = [GlvalueConversion] glvalue conversion -#-----| Type = [SpecifiedType] const iterator -#-----| ValueCategory = lvalue -#-----| getQualifier().getFullyConverted(): [CStyleCast] (const iterator)... -#-----| Conversion = [GlvalueConversion] glvalue conversion -#-----| Type = [SpecifiedType] const iterator -#-----| ValueCategory = lvalue -#-----| getArgument(0).getFullyConverted(): [TemporaryObjectExpr] temporary object -#-----| Type = [ClassTemplateInstantiation,Struct] iterator -#-----| ValueCategory = lvalue -# 2293| getUpdate(): [FunctionCall] call to operator++ -# 2293| Type = [LValueReferenceType] iterator & -# 2293| ValueCategory = prvalue -# 2293| getQualifier(): [VariableAccess] (__begin) -# 2293| Type = [NestedTypedefType,UsingAliasTypedefType] iterator -# 2293| ValueCategory = lvalue -# 2293| getChild(5): [DeclStmt] declaration -# 2293| getDeclarationEntry(0): [VariableDeclarationEntry] definition of s -# 2293| Type = [Struct] String -# 2293| getVariable().getInitializer(): [Initializer] initializer for s -# 2293| getExpr(): [ConstructorCall] call to String -# 2293| Type = [VoidType] void -# 2293| ValueCategory = prvalue -# 2293| getArgument(0): [OverloadedPointerDereferenceExpr] call to operator* -# 2293| Type = [LValueReferenceType] String & -# 2293| ValueCategory = prvalue -# 2293| getQualifier(): [VariableAccess] (__begin) -# 2293| Type = [NestedTypedefType,UsingAliasTypedefType] iterator -# 2293| ValueCategory = lvalue -#-----| getQualifier().getFullyConverted(): [CStyleCast] (const iterator)... -#-----| Conversion = [GlvalueConversion] glvalue conversion -#-----| Type = [SpecifiedType] const iterator -#-----| ValueCategory = lvalue -# 2293| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) -# 2293| Type = [LValueReferenceType] const String & -# 2293| ValueCategory = prvalue -# 2293| getExpr(): [CStyleCast] (const String)... -# 2293| Conversion = [GlvalueConversion] glvalue conversion -# 2293| Type = [SpecifiedType] const String -# 2293| ValueCategory = lvalue -# 2293| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -# 2293| Type = [Struct] String -# 2293| ValueCategory = lvalue -# 2293| getStmt(): [BlockStmt] { ... } +# 2293| ValueCategory = prvalue(load) +# 2293| getThen(): [BlockStmt] { ... } # 2294| getStmt(0): [DeclStmt] declaration # 2294| getDeclarationEntry(0): [VariableDeclarationEntry] definition of s2 # 2294| Type = [Struct] String @@ -18260,105 +18390,52 @@ ir.cpp: # 2295| getQualifier(): [VariableAccess] s2 # 2295| Type = [Struct] String # 2295| ValueCategory = lvalue -# 2293| getImplicitDestructorCall(1): [DestructorCall] call to ~String -# 2293| Type = [VoidType] void -# 2293| ValueCategory = prvalue -# 2293| getQualifier(): [VariableAccess] s -# 2293| Type = [Struct] String -# 2293| ValueCategory = lvalue -# 2293| getUpdate().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 2293| Type = [ClassTemplateInstantiation,Struct] iterator -# 2293| ValueCategory = lvalue -# 2297| getStmt(3): [ForStmt] for(...;...;...) ... -# 2297| getInitialization(): [DeclStmt] declaration -# 2297| getDeclarationEntry(0): [VariableDeclarationEntry] definition of s -# 2297| Type = [Struct] String -# 2297| getVariable().getInitializer(): [Initializer] initializer for s -# 2297| getExpr(): [ConstructorCall] call to String -# 2297| Type = [VoidType] void -# 2297| ValueCategory = prvalue -# 2297| getArgument(0): hello -# 2297| Type = [ArrayType] const char[6] -# 2297| Value = [StringLiteral] "hello" -# 2297| ValueCategory = lvalue -# 2297| getArgument(0).getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion -# 2297| Type = [PointerType] const char * -# 2297| ValueCategory = prvalue -# 2297| getDeclarationEntry(1): [VariableDeclarationEntry] definition of s2 -# 2297| Type = [Struct] String -# 2297| getVariable().getInitializer(): [Initializer] initializer for s2 -# 2297| getExpr(): [ConstructorCall] call to String -# 2297| Type = [VoidType] void -# 2297| ValueCategory = prvalue -# 2297| getArgument(0): world -# 2297| Type = [ArrayType] const char[6] -# 2297| Value = [StringLiteral] "world" -# 2297| ValueCategory = lvalue -# 2297| getArgument(0).getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion -# 2297| Type = [PointerType] const char * -# 2297| ValueCategory = prvalue -# 2297| getCondition(): [NEExpr] ... != ... -# 2297| Type = [BoolType] bool -# 2297| ValueCategory = prvalue -# 2297| getLeftOperand(): [VariableAccess] c -# 2297| Type = [PlainCharType] char -# 2297| ValueCategory = prvalue(load) -# 2297| getRightOperand(): [Literal] 0 -# 2297| Type = [IntType] int -# 2297| Value = [Literal] 0 +# 2295| getElse(): [BlockStmt] { ... } +# 2296| getStmt(0): [DeclStmt] declaration +# 2296| getDeclarationEntry(0): [VariableDeclarationEntry] definition of s3 +# 2296| Type = [Struct] String +# 2296| getVariable().getInitializer(): [Initializer] initializer for s3 +# 2296| getExpr(): [ConstructorCall] call to String +# 2296| Type = [VoidType] void +# 2296| ValueCategory = prvalue +# 2297| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 2297| Type = [VoidType] void # 2297| ValueCategory = prvalue -# 2297| getLeftOperand().getFullyConverted(): [CStyleCast] (int)... -# 2297| Conversion = [IntegralConversion] integral conversion -# 2297| Type = [IntType] int -# 2297| ValueCategory = prvalue -# 2297| getUpdate(): [AssignExpr] ... = ... -# 2297| Type = [PlainCharType] char -# 2297| ValueCategory = lvalue -# 2297| getLValue(): [VariableAccess] c -# 2297| Type = [PlainCharType] char -# 2297| ValueCategory = lvalue -# 2297| getRValue(): [FunctionCall] call to pop_back -# 2297| Type = [PlainCharType] char -# 2297| ValueCategory = prvalue -# 2297| getQualifier(): [VariableAccess] s +# 2297| getQualifier(): [VariableAccess] s3 # 2297| Type = [Struct] String # 2297| ValueCategory = lvalue -# 2297| getStmt(): [BlockStmt] { ... } -# 2298| getStmt(0): [ExprStmt] ExprStmt -# 2298| getExpr(): [AssignExpr] ... = ... -# 2298| Type = [PlainCharType] char -# 2298| ValueCategory = lvalue -# 2298| getLValue(): [VariableAccess] c -# 2298| Type = [PlainCharType] char -# 2298| ValueCategory = lvalue -# 2298| getRValue(): [Literal] 0 -# 2298| Type = [IntType] int -# 2298| Value = [Literal] 0 -# 2298| ValueCategory = prvalue -# 2298| getRValue().getFullyConverted(): [CStyleCast] (char)... -# 2298| Conversion = [IntegralConversion] integral conversion -# 2298| Type = [PlainCharType] char -# 2298| Value = [CStyleCast] 0 -# 2298| ValueCategory = prvalue -# 2297| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2297| Type = [VoidType] void -# 2297| ValueCategory = prvalue -# 2297| getQualifier(): [VariableAccess] s2 -# 2297| Type = [Struct] String -# 2297| ValueCategory = lvalue -# 2297| getImplicitDestructorCall(1): [DestructorCall] call to ~String -# 2297| Type = [VoidType] void -# 2297| ValueCategory = prvalue -# 2297| getQualifier(): [VariableAccess] s -# 2297| Type = [Struct] String -# 2297| ValueCategory = lvalue -# 2300| getStmt(4): [ReturnStmt] return ... -# 2302| [TopLevelFunction] void IfDestructors2(bool) -# 2302| : -# 2302| getParameter(0): [Parameter] b -# 2302| Type = [BoolType] bool -# 2302| getEntryPoint(): [BlockStmt] { ... } -# 2303| getStmt(0): [IfStmt] if (...) ... +# 2298| getStmt(2): [DeclStmt] declaration +# 2298| getDeclarationEntry(0): [VariableDeclarationEntry] definition of s4 +# 2298| Type = [Struct] String +# 2298| getVariable().getInitializer(): [Initializer] initializer for s4 +# 2298| getExpr(): [ConstructorCall] call to String +# 2298| Type = [VoidType] void +# 2298| ValueCategory = prvalue +# 2299| getStmt(3): [ReturnStmt] return ... +# 2299| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 2299| Type = [VoidType] void +# 2299| ValueCategory = prvalue +# 2299| getQualifier(): [VariableAccess] s4 +# 2299| Type = [Struct] String +# 2299| ValueCategory = lvalue +# 2299| getImplicitDestructorCall(1): [DestructorCall] call to ~String +# 2299| Type = [VoidType] void +# 2299| ValueCategory = prvalue +# 2299| getQualifier(): [VariableAccess] s1 +# 2299| Type = [Struct] String +# 2299| ValueCategory = lvalue +# 2301| [TopLevelFunction] void ForDestructors() +# 2301| : +# 2301| getEntryPoint(): [BlockStmt] { ... } +# 2302| getStmt(0): [DeclStmt] declaration +# 2302| getDeclarationEntry(0): [VariableDeclarationEntry] definition of c +# 2302| Type = [PlainCharType] char +# 2302| getVariable().getInitializer(): [Initializer] initializer for c +# 2302| getExpr(): [CharLiteral] 97 +# 2302| Type = [PlainCharType] char +# 2302| Value = [CharLiteral] 97 +# 2302| ValueCategory = prvalue +# 2303| getStmt(1): [ForStmt] for(...;...;...) ... # 2303| getInitialization(): [DeclStmt] declaration # 2303| getDeclarationEntry(0): [VariableDeclarationEntry] definition of s # 2303| Type = [Struct] String @@ -18373,303 +18450,1743 @@ ir.cpp: # 2303| getArgument(0).getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion # 2303| Type = [PointerType] const char * # 2303| ValueCategory = prvalue -# 2303| getCondition(): [VariableAccess] b +# 2303| getCondition(): [NEExpr] ... != ... # 2303| Type = [BoolType] bool -# 2303| ValueCategory = prvalue(load) -# 2303| getThen(): [BlockStmt] { ... } +# 2303| ValueCategory = prvalue +# 2303| getLeftOperand(): [VariableAccess] c +# 2303| Type = [PlainCharType] char +# 2303| ValueCategory = prvalue(load) +# 2303| getRightOperand(): [Literal] 0 +# 2303| Type = [IntType] int +# 2303| Value = [Literal] 0 +# 2303| ValueCategory = prvalue +# 2303| getLeftOperand().getFullyConverted(): [CStyleCast] (int)... +# 2303| Conversion = [IntegralConversion] integral conversion +# 2303| Type = [IntType] int +# 2303| ValueCategory = prvalue +# 2303| getUpdate(): [AssignExpr] ... = ... +# 2303| Type = [PlainCharType] char +# 2303| ValueCategory = lvalue +# 2303| getLValue(): [VariableAccess] c +# 2303| Type = [PlainCharType] char +# 2303| ValueCategory = lvalue +# 2303| getRValue(): [FunctionCall] call to pop_back +# 2303| Type = [PlainCharType] char +# 2303| ValueCategory = prvalue +# 2303| getQualifier(): [VariableAccess] s +# 2303| Type = [Struct] String +# 2303| ValueCategory = lvalue +# 2303| getStmt(): [BlockStmt] { ... } # 2304| getStmt(0): [DeclStmt] declaration -# 2304| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x -# 2304| Type = [IntType] int -# 2304| getVariable().getInitializer(): [Initializer] initializer for x -# 2304| getExpr(): [Literal] 0 -# 2304| Type = [IntType] int -# 2304| Value = [Literal] 0 +# 2304| getDeclarationEntry(0): [VariableDeclarationEntry] definition of s2 +# 2304| Type = [Struct] String +# 2304| getVariable().getInitializer(): [Initializer] initializer for s2 +# 2304| getExpr(): [ConstructorCall] call to String +# 2304| Type = [VoidType] void # 2304| ValueCategory = prvalue -# 2305| getElse(): [BlockStmt] { ... } -# 2306| getStmt(0): [DeclStmt] declaration -# 2306| getDeclarationEntry(0): [VariableDeclarationEntry] definition of y -# 2306| Type = [IntType] int -# 2306| getVariable().getInitializer(): [Initializer] initializer for y -# 2306| getExpr(): [Literal] 0 -# 2306| Type = [IntType] int -# 2306| Value = [Literal] 0 -# 2306| ValueCategory = prvalue -# 2307| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2307| Type = [VoidType] void +# 2305| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 2305| Type = [VoidType] void +# 2305| ValueCategory = prvalue +# 2305| getQualifier(): [VariableAccess] s2 +# 2305| Type = [Struct] String +# 2305| ValueCategory = lvalue +# 2303| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 2303| Type = [VoidType] void +# 2303| ValueCategory = prvalue +# 2303| getQualifier(): [VariableAccess] s +# 2303| Type = [Struct] String +# 2303| ValueCategory = lvalue +# 2307| getStmt(2): [RangeBasedForStmt] for(...:...) ... +# 2307| getChild(1): [DeclStmt] declaration +# 2307| getDeclarationEntry(0): [VariableDeclarationEntry] declaration of (__range) +# 2307| Type = [RValueReferenceType] vector && +#-----| getVariable().getInitializer(): [Initializer] initializer for (__range) +# 2307| getExpr(): [ConstructorCall] call to vector +# 2307| Type = [VoidType] void +# 2307| ValueCategory = prvalue +# 2307| getArgument(0): [ConstructorCall] call to String +# 2307| Type = [VoidType] void +# 2307| ValueCategory = prvalue +# 2307| getArgument(0): hello +# 2307| Type = [ArrayType] const char[6] +# 2307| Value = [StringLiteral] "hello" +# 2307| ValueCategory = lvalue +# 2307| getArgument(0).getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion +# 2307| Type = [PointerType] const char * +# 2307| ValueCategory = prvalue +# 2307| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 2307| Type = [VoidType] void +# 2307| ValueCategory = prvalue +# 2307| getQualifier(): [ReuseExpr] reuse of temporary object +# 2307| Type = [Struct] String +# 2307| ValueCategory = xvalue +# 2307| getArgument(0).getFullyConverted(): [TemporaryObjectExpr] temporary object +# 2307| Type = [Struct] String +# 2307| ValueCategory = lvalue +# 2307| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 2307| Type = [LValueReferenceType] vector & +# 2307| ValueCategory = prvalue +# 2307| getExpr(): [TemporaryObjectExpr] temporary object +# 2307| Type = [ClassTemplateInstantiation,Struct] vector +# 2307| ValueCategory = xvalue +# 2307| getBeginEndDeclaration(): [DeclStmt] declaration +# 2307| getDeclarationEntry(0): [VariableDeclarationEntry] declaration of (__begin) +# 2307| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +#-----| getVariable().getInitializer(): [Initializer] initializer for (__begin) +# 2307| getExpr(): [FunctionCall] call to begin +# 2307| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +# 2307| ValueCategory = prvalue +# 2307| getQualifier(): [VariableAccess] (__range) +# 2307| Type = [RValueReferenceType] vector && +# 2307| ValueCategory = prvalue(load) +#-----| getQualifier().getFullyConverted(): [CStyleCast] (const vector)... +#-----| Conversion = [GlvalueConversion] glvalue conversion +#-----| Type = [SpecifiedType] const vector +#-----| ValueCategory = lvalue +#-----| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +#-----| Type = [ClassTemplateInstantiation,Struct] vector +#-----| ValueCategory = lvalue +# 2307| getDeclarationEntry(1): [VariableDeclarationEntry] declaration of (__end) +# 2307| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +#-----| getVariable().getInitializer(): [Initializer] initializer for (__end) +# 2307| getExpr(): [FunctionCall] call to end +# 2307| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +# 2307| ValueCategory = prvalue +# 2307| getQualifier(): [VariableAccess] (__range) +# 2307| Type = [RValueReferenceType] vector && +# 2307| ValueCategory = prvalue(load) +#-----| getQualifier().getFullyConverted(): [CStyleCast] (const vector)... +#-----| Conversion = [GlvalueConversion] glvalue conversion +#-----| Type = [SpecifiedType] const vector +#-----| ValueCategory = lvalue +#-----| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +#-----| Type = [ClassTemplateInstantiation,Struct] vector +#-----| ValueCategory = lvalue +# 2307| getCondition(): [FunctionCall] call to operator!= +# 2307| Type = [BoolType] bool # 2307| ValueCategory = prvalue -# 2307| getQualifier(): [VariableAccess] s -# 2307| Type = [Struct] String +# 2307| getQualifier(): [VariableAccess] (__begin) +# 2307| Type = [NestedTypedefType,UsingAliasTypedefType] iterator # 2307| ValueCategory = lvalue -# 2308| getStmt(1): [ReturnStmt] return ... -# 2310| [CopyAssignmentOperator] Bool& Bool::operator=(Bool const&) -# 2310| : +# 2307| getArgument(0): [ConstructorCall] call to iterator +# 2307| Type = [VoidType] void +# 2307| ValueCategory = prvalue +# 2307| getArgument(0): [VariableAccess] (__end) +# 2307| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +# 2307| ValueCategory = lvalue +#-----| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) +#-----| Type = [LValueReferenceType] const iterator & +#-----| ValueCategory = prvalue +#-----| getExpr(): [CStyleCast] (const iterator)... +#-----| Conversion = [GlvalueConversion] glvalue conversion +#-----| Type = [SpecifiedType] const iterator +#-----| ValueCategory = lvalue +#-----| getQualifier().getFullyConverted(): [CStyleCast] (const iterator)... +#-----| Conversion = [GlvalueConversion] glvalue conversion +#-----| Type = [SpecifiedType] const iterator +#-----| ValueCategory = lvalue +#-----| getArgument(0).getFullyConverted(): [TemporaryObjectExpr] temporary object +#-----| Type = [ClassTemplateInstantiation,Struct] iterator +#-----| ValueCategory = lvalue +# 2307| getUpdate(): [FunctionCall] call to operator++ +# 2307| Type = [LValueReferenceType] iterator & +# 2307| ValueCategory = prvalue +# 2307| getQualifier(): [VariableAccess] (__begin) +# 2307| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +# 2307| ValueCategory = lvalue +# 2307| getChild(5): [DeclStmt] declaration +# 2307| getDeclarationEntry(0): [VariableDeclarationEntry] definition of s +# 2307| Type = [Struct] String +# 2307| getVariable().getInitializer(): [Initializer] initializer for s +# 2307| getExpr(): [ConstructorCall] call to String +# 2307| Type = [VoidType] void +# 2307| ValueCategory = prvalue +# 2307| getArgument(0): [OverloadedPointerDereferenceExpr] call to operator* +# 2307| Type = [LValueReferenceType] String & +# 2307| ValueCategory = prvalue +# 2307| getQualifier(): [VariableAccess] (__begin) +# 2307| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +# 2307| ValueCategory = lvalue +#-----| getQualifier().getFullyConverted(): [CStyleCast] (const iterator)... +#-----| Conversion = [GlvalueConversion] glvalue conversion +#-----| Type = [SpecifiedType] const iterator +#-----| ValueCategory = lvalue +# 2307| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) +# 2307| Type = [LValueReferenceType] const String & +# 2307| ValueCategory = prvalue +# 2307| getExpr(): [CStyleCast] (const String)... +# 2307| Conversion = [GlvalueConversion] glvalue conversion +# 2307| Type = [SpecifiedType] const String +# 2307| ValueCategory = lvalue +# 2307| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +# 2307| Type = [Struct] String +# 2307| ValueCategory = lvalue +# 2307| getStmt(): [BlockStmt] { ... } +# 2308| getStmt(0): [DeclStmt] declaration +# 2308| getDeclarationEntry(0): [VariableDeclarationEntry] definition of s2 +# 2308| Type = [Struct] String +# 2308| getVariable().getInitializer(): [Initializer] initializer for s2 +# 2308| getExpr(): [ConstructorCall] call to String +# 2308| Type = [VoidType] void +# 2308| ValueCategory = prvalue +# 2309| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 2309| Type = [VoidType] void +# 2309| ValueCategory = prvalue +# 2309| getQualifier(): [VariableAccess] s2 +# 2309| Type = [Struct] String +# 2309| ValueCategory = lvalue +# 2307| getImplicitDestructorCall(1): [DestructorCall] call to ~String +# 2307| Type = [VoidType] void +# 2307| ValueCategory = prvalue +# 2307| getQualifier(): [VariableAccess] s +# 2307| Type = [Struct] String +# 2307| ValueCategory = lvalue +# 2307| getUpdate().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 2307| Type = [ClassTemplateInstantiation,Struct] iterator +# 2307| ValueCategory = lvalue +# 2311| getStmt(3): [ForStmt] for(...;...;...) ... +# 2311| getInitialization(): [DeclStmt] declaration +# 2311| getDeclarationEntry(0): [VariableDeclarationEntry] definition of s +# 2311| Type = [Struct] String +# 2311| getVariable().getInitializer(): [Initializer] initializer for s +# 2311| getExpr(): [ConstructorCall] call to String +# 2311| Type = [VoidType] void +# 2311| ValueCategory = prvalue +# 2311| getArgument(0): hello +# 2311| Type = [ArrayType] const char[6] +# 2311| Value = [StringLiteral] "hello" +# 2311| ValueCategory = lvalue +# 2311| getArgument(0).getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion +# 2311| Type = [PointerType] const char * +# 2311| ValueCategory = prvalue +# 2311| getDeclarationEntry(1): [VariableDeclarationEntry] definition of s2 +# 2311| Type = [Struct] String +# 2311| getVariable().getInitializer(): [Initializer] initializer for s2 +# 2311| getExpr(): [ConstructorCall] call to String +# 2311| Type = [VoidType] void +# 2311| ValueCategory = prvalue +# 2311| getArgument(0): world +# 2311| Type = [ArrayType] const char[6] +# 2311| Value = [StringLiteral] "world" +# 2311| ValueCategory = lvalue +# 2311| getArgument(0).getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion +# 2311| Type = [PointerType] const char * +# 2311| ValueCategory = prvalue +# 2311| getCondition(): [NEExpr] ... != ... +# 2311| Type = [BoolType] bool +# 2311| ValueCategory = prvalue +# 2311| getLeftOperand(): [VariableAccess] c +# 2311| Type = [PlainCharType] char +# 2311| ValueCategory = prvalue(load) +# 2311| getRightOperand(): [Literal] 0 +# 2311| Type = [IntType] int +# 2311| Value = [Literal] 0 +# 2311| ValueCategory = prvalue +# 2311| getLeftOperand().getFullyConverted(): [CStyleCast] (int)... +# 2311| Conversion = [IntegralConversion] integral conversion +# 2311| Type = [IntType] int +# 2311| ValueCategory = prvalue +# 2311| getUpdate(): [AssignExpr] ... = ... +# 2311| Type = [PlainCharType] char +# 2311| ValueCategory = lvalue +# 2311| getLValue(): [VariableAccess] c +# 2311| Type = [PlainCharType] char +# 2311| ValueCategory = lvalue +# 2311| getRValue(): [FunctionCall] call to pop_back +# 2311| Type = [PlainCharType] char +# 2311| ValueCategory = prvalue +# 2311| getQualifier(): [VariableAccess] s +# 2311| Type = [Struct] String +# 2311| ValueCategory = lvalue +# 2311| getStmt(): [BlockStmt] { ... } +# 2312| getStmt(0): [ExprStmt] ExprStmt +# 2312| getExpr(): [AssignExpr] ... = ... +# 2312| Type = [PlainCharType] char +# 2312| ValueCategory = lvalue +# 2312| getLValue(): [VariableAccess] c +# 2312| Type = [PlainCharType] char +# 2312| ValueCategory = lvalue +# 2312| getRValue(): [Literal] 0 +# 2312| Type = [IntType] int +# 2312| Value = [Literal] 0 +# 2312| ValueCategory = prvalue +# 2312| getRValue().getFullyConverted(): [CStyleCast] (char)... +# 2312| Conversion = [IntegralConversion] integral conversion +# 2312| Type = [PlainCharType] char +# 2312| Value = [CStyleCast] 0 +# 2312| ValueCategory = prvalue +# 2311| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 2311| Type = [VoidType] void +# 2311| ValueCategory = prvalue +# 2311| getQualifier(): [VariableAccess] s2 +# 2311| Type = [Struct] String +# 2311| ValueCategory = lvalue +# 2311| getImplicitDestructorCall(1): [DestructorCall] call to ~String +# 2311| Type = [VoidType] void +# 2311| ValueCategory = prvalue +# 2311| getQualifier(): [VariableAccess] s +# 2311| Type = [Struct] String +# 2311| ValueCategory = lvalue +# 2314| getStmt(4): [ReturnStmt] return ... +# 2316| [TopLevelFunction] void IfDestructors2(bool) +# 2316| : +# 2316| getParameter(0): [Parameter] b +# 2316| Type = [BoolType] bool +# 2316| getEntryPoint(): [BlockStmt] { ... } +# 2317| getStmt(0): [IfStmt] if (...) ... +# 2317| getInitialization(): [DeclStmt] declaration +# 2317| getDeclarationEntry(0): [VariableDeclarationEntry] definition of s +# 2317| Type = [Struct] String +# 2317| getVariable().getInitializer(): [Initializer] initializer for s +# 2317| getExpr(): [ConstructorCall] call to String +# 2317| Type = [VoidType] void +# 2317| ValueCategory = prvalue +# 2317| getArgument(0): hello +# 2317| Type = [ArrayType] const char[6] +# 2317| Value = [StringLiteral] "hello" +# 2317| ValueCategory = lvalue +# 2317| getArgument(0).getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion +# 2317| Type = [PointerType] const char * +# 2317| ValueCategory = prvalue +# 2317| getCondition(): [VariableAccess] b +# 2317| Type = [BoolType] bool +# 2317| ValueCategory = prvalue(load) +# 2317| getThen(): [BlockStmt] { ... } +# 2318| getStmt(0): [DeclStmt] declaration +# 2318| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x +# 2318| Type = [IntType] int +# 2318| getVariable().getInitializer(): [Initializer] initializer for x +# 2318| getExpr(): [Literal] 0 +# 2318| Type = [IntType] int +# 2318| Value = [Literal] 0 +# 2318| ValueCategory = prvalue +# 2319| getElse(): [BlockStmt] { ... } +# 2320| getStmt(0): [DeclStmt] declaration +# 2320| getDeclarationEntry(0): [VariableDeclarationEntry] definition of y +# 2320| Type = [IntType] int +# 2320| getVariable().getInitializer(): [Initializer] initializer for y +# 2320| getExpr(): [Literal] 0 +# 2320| Type = [IntType] int +# 2320| Value = [Literal] 0 +# 2320| ValueCategory = prvalue +# 2321| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 2321| Type = [VoidType] void +# 2321| ValueCategory = prvalue +# 2321| getQualifier(): [VariableAccess] s +# 2321| Type = [Struct] String +# 2321| ValueCategory = lvalue +# 2322| getStmt(1): [ReturnStmt] return ... +# 2324| [CopyAssignmentOperator] Bool& Bool::operator=(Bool const&) +# 2324| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const Bool & -# 2310| [CopyConstructor] void Bool::Bool(Bool const&) -# 2310| : +# 2324| [CopyConstructor] void Bool::Bool(Bool const&) +# 2324| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const Bool & -# 2312| [Constructor] void Bool::Bool(bool) -# 2312| : -# 2312| getParameter(0): [Parameter] b_ -# 2312| Type = [BoolType] bool -# 2313| [ConversionOperator] bool Bool::operator bool() -# 2313| : -# 2314| [Destructor] void Bool::~Bool() -# 2314| : -# 2317| [TopLevelFunction] void IfDestructors3(bool) -# 2317| : -# 2317| getParameter(0): [Parameter] b -# 2317| Type = [BoolType] bool -# 2317| getEntryPoint(): [BlockStmt] { ... } -# 2318| getStmt(0): [IfStmt] if (...) ... -# 2318| getCondition(): [ConditionDeclExpr] (condition decl) -# 2318| Type = [BoolType] bool -# 2318| ValueCategory = prvalue -# 2318| getChild(0): [FunctionCall] call to operator bool -# 2318| Type = [BoolType] bool -# 2318| ValueCategory = prvalue -# 2318| getQualifier(): [VariableAccess] B -# 2318| Type = [Class] Bool -# 2318| ValueCategory = prvalue(load) -# 2318| getThen(): [BlockStmt] { ... } -# 2319| getStmt(0): [DeclStmt] declaration -# 2319| getDeclarationEntry(0): [VariableDeclarationEntry] definition of s1 -# 2319| Type = [Struct] String -# 2319| getVariable().getInitializer(): [Initializer] initializer for s1 -# 2319| getExpr(): [ConstructorCall] call to String -# 2319| Type = [VoidType] void -# 2319| ValueCategory = prvalue -# 2320| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2320| Type = [VoidType] void -# 2320| ValueCategory = prvalue -# 2320| getQualifier(): [VariableAccess] s1 -# 2320| Type = [Struct] String -# 2320| ValueCategory = lvalue -# 2320| getElse(): [BlockStmt] { ... } -# 2321| getStmt(0): [DeclStmt] declaration -# 2321| getDeclarationEntry(0): [VariableDeclarationEntry] definition of s2 -# 2321| Type = [Struct] String -# 2321| getVariable().getInitializer(): [Initializer] initializer for s2 -# 2321| getExpr(): [ConstructorCall] call to String -# 2321| Type = [VoidType] void -# 2321| ValueCategory = prvalue -# 2322| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2322| Type = [VoidType] void -# 2322| ValueCategory = prvalue -# 2322| getQualifier(): [VariableAccess] s2 -# 2322| Type = [Struct] String -# 2322| ValueCategory = lvalue -# 2322| getImplicitDestructorCall(0): [DestructorCall] call to ~Bool -# 2322| Type = [VoidType] void -# 2322| ValueCategory = prvalue -# 2322| getQualifier(): [VariableAccess] B -# 2322| Type = [Class] Bool -# 2322| ValueCategory = lvalue -# 2323| getStmt(1): [ReturnStmt] return ... -# 2325| [TopLevelFunction] void WhileLoopDestructors(bool) -# 2325| : -# 2325| getParameter(0): [Parameter] b -# 2325| Type = [BoolType] bool -# 2325| getEntryPoint(): [BlockStmt] { ... } -# 2326| getStmt(0): [BlockStmt] { ... } -# 2327| getStmt(0): [DeclStmt] declaration -# 2327| getDeclarationEntry(0): [VariableDeclarationEntry] definition of s -# 2327| Type = [Struct] String -# 2327| getVariable().getInitializer(): [Initializer] initializer for s -# 2327| getExpr(): [ConstructorCall] call to String -# 2327| Type = [VoidType] void -# 2327| ValueCategory = prvalue -# 2328| getStmt(1): [WhileStmt] while (...) ... -# 2328| getCondition(): [VariableAccess] b -# 2328| Type = [BoolType] bool -# 2328| ValueCategory = prvalue(load) -# 2328| getStmt(): [BlockStmt] { ... } -# 2329| getStmt(0): [ExprStmt] ExprStmt -# 2329| getExpr(): [AssignExpr] ... = ... -# 2329| Type = [BoolType] bool -# 2329| ValueCategory = lvalue -# 2329| getLValue(): [VariableAccess] b -# 2329| Type = [BoolType] bool -# 2329| ValueCategory = lvalue -# 2329| getRValue(): [Literal] 0 -# 2329| Type = [BoolType] bool -# 2329| Value = [Literal] 0 -# 2329| ValueCategory = prvalue -# 2331| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2331| Type = [VoidType] void -# 2331| ValueCategory = prvalue -# 2331| getQualifier(): [VariableAccess] s -# 2331| Type = [Struct] String -# 2331| ValueCategory = lvalue -# 2333| getStmt(1): [BlockStmt] { ... } -# 2334| getStmt(0): [WhileStmt] while (...) ... -# 2334| getCondition(): [ConditionDeclExpr] (condition decl) -# 2334| Type = [BoolType] bool +# 2326| [Constructor] void Bool::Bool(bool) +# 2326| : +# 2326| getParameter(0): [Parameter] b_ +# 2326| Type = [BoolType] bool +# 2327| [ConversionOperator] bool Bool::operator bool() +# 2327| : +# 2328| [Destructor] void Bool::~Bool() +# 2328| : +# 2331| [TopLevelFunction] void IfDestructors3(bool) +# 2331| : +# 2331| getParameter(0): [Parameter] b +# 2331| Type = [BoolType] bool +# 2331| getEntryPoint(): [BlockStmt] { ... } +# 2332| getStmt(0): [IfStmt] if (...) ... +# 2332| getCondition(): [ConditionDeclExpr] (condition decl) +# 2332| Type = [BoolType] bool +# 2332| ValueCategory = prvalue +# 2332| getChild(0): [FunctionCall] call to operator bool +# 2332| Type = [BoolType] bool +# 2332| ValueCategory = prvalue +# 2332| getQualifier(): [VariableAccess] B +# 2332| Type = [Class] Bool +# 2332| ValueCategory = prvalue(load) +# 2332| getInitializingExpr(): [ConstructorCall] call to Bool +# 2332| Type = [VoidType] void +# 2332| ValueCategory = prvalue +# 2332| getArgument(0): [VariableAccess] b +# 2332| Type = [BoolType] bool +# 2332| ValueCategory = prvalue(load) +# 2332| getThen(): [BlockStmt] { ... } +# 2333| getStmt(0): [DeclStmt] declaration +# 2333| getDeclarationEntry(0): [VariableDeclarationEntry] definition of s1 +# 2333| Type = [Struct] String +# 2333| getVariable().getInitializer(): [Initializer] initializer for s1 +# 2333| getExpr(): [ConstructorCall] call to String +# 2333| Type = [VoidType] void +# 2333| ValueCategory = prvalue +# 2334| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 2334| Type = [VoidType] void # 2334| ValueCategory = prvalue -# 2334| getChild(0): [FunctionCall] call to operator bool -# 2334| Type = [BoolType] bool -# 2334| ValueCategory = prvalue -# 2334| getQualifier(): [VariableAccess] B -# 2334| Type = [Class] Bool -# 2334| ValueCategory = prvalue(load) -# 2334| getStmt(): [BlockStmt] { ... } -# 2335| getStmt(0): [ExprStmt] ExprStmt -# 2335| getExpr(): [AssignExpr] ... = ... -# 2335| Type = [BoolType] bool -# 2335| ValueCategory = lvalue -# 2335| getLValue(): [VariableAccess] b -# 2335| Type = [BoolType] bool -# 2335| ValueCategory = lvalue -# 2335| getRValue(): [Literal] 0 -# 2335| Type = [BoolType] bool -# 2335| Value = [Literal] 0 +# 2334| getQualifier(): [VariableAccess] s1 +# 2334| Type = [Struct] String +# 2334| ValueCategory = lvalue +# 2334| getElse(): [BlockStmt] { ... } +# 2335| getStmt(0): [DeclStmt] declaration +# 2335| getDeclarationEntry(0): [VariableDeclarationEntry] definition of s2 +# 2335| Type = [Struct] String +# 2335| getVariable().getInitializer(): [Initializer] initializer for s2 +# 2335| getExpr(): [ConstructorCall] call to String +# 2335| Type = [VoidType] void # 2335| ValueCategory = prvalue -# 2336| getImplicitDestructorCall(0): [DestructorCall] call to ~Bool -# 2336| Type = [VoidType] void -# 2336| ValueCategory = prvalue -# 2336| getQualifier(): [VariableAccess] B -# 2336| Type = [Class] Bool -# 2336| ValueCategory = lvalue -# 2336| getImplicitDestructorCall(0): [DestructorCall] call to ~Bool +# 2336| getImplicitDestructorCall(0): [DestructorCall] call to ~String # 2336| Type = [VoidType] void # 2336| ValueCategory = prvalue -# 2336| getQualifier(): [VariableAccess] B -# 2336| Type = [Class] Bool +# 2336| getQualifier(): [VariableAccess] s2 +# 2336| Type = [Struct] String # 2336| ValueCategory = lvalue -# 2338| getStmt(2): [ReturnStmt] return ... -# 2340| [TopLevelFunction] void VoidFunc() -# 2340| : -# 2340| getEntryPoint(): [BlockStmt] { ... } -# 2340| getStmt(0): [ReturnStmt] return ... -# 2342| [TopLevelFunction] void IfReturnDestructors(bool) -# 2342| : -# 2342| getParameter(0): [Parameter] b -# 2342| Type = [BoolType] bool -# 2342| getEntryPoint(): [BlockStmt] { ... } -# 2343| getStmt(0): [DeclStmt] declaration -# 2343| getDeclarationEntry(0): [VariableDeclarationEntry] definition of s -# 2343| Type = [Struct] String -# 2343| getVariable().getInitializer(): [Initializer] initializer for s -# 2343| getExpr(): [ConstructorCall] call to String -# 2343| Type = [VoidType] void -# 2343| ValueCategory = prvalue -# 2344| getStmt(1): [IfStmt] if (...) ... -# 2344| getCondition(): [VariableAccess] b -# 2344| Type = [BoolType] bool -# 2344| ValueCategory = prvalue(load) -# 2344| getThen(): [BlockStmt] { ... } -# 2345| getStmt(0): [ReturnStmt] return ... -# 2351| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2351| Type = [VoidType] void -# 2351| ValueCategory = prvalue -# 2351| getQualifier(): [VariableAccess] s -# 2351| Type = [Struct] String -# 2351| ValueCategory = lvalue -# 2347| getStmt(2): [IfStmt] if (...) ... -# 2347| getCondition(): [VariableAccess] b -# 2347| Type = [BoolType] bool -# 2347| ValueCategory = prvalue(load) -# 2347| getThen(): [BlockStmt] { ... } -# 2348| getStmt(0): [ReturnStmt] return ... -# 2348| getExpr(): [FunctionCall] call to VoidFunc +# 2336| getImplicitDestructorCall(0): [DestructorCall] call to ~Bool +# 2336| Type = [VoidType] void +# 2336| ValueCategory = prvalue +# 2336| getQualifier(): [VariableAccess] B +# 2336| Type = [Class] Bool +# 2336| ValueCategory = lvalue +# 2337| getStmt(1): [ReturnStmt] return ... +# 2339| [TopLevelFunction] void WhileLoopDestructors(bool) +# 2339| : +# 2339| getParameter(0): [Parameter] b +# 2339| Type = [BoolType] bool +# 2339| getEntryPoint(): [BlockStmt] { ... } +# 2340| getStmt(0): [BlockStmt] { ... } +# 2341| getStmt(0): [DeclStmt] declaration +# 2341| getDeclarationEntry(0): [VariableDeclarationEntry] definition of s +# 2341| Type = [Struct] String +# 2341| getVariable().getInitializer(): [Initializer] initializer for s +# 2341| getExpr(): [ConstructorCall] call to String +# 2341| Type = [VoidType] void +# 2341| ValueCategory = prvalue +# 2342| getStmt(1): [WhileStmt] while (...) ... +# 2342| getCondition(): [VariableAccess] b +# 2342| Type = [BoolType] bool +# 2342| ValueCategory = prvalue(load) +# 2342| getStmt(): [BlockStmt] { ... } +# 2343| getStmt(0): [ExprStmt] ExprStmt +# 2343| getExpr(): [AssignExpr] ... = ... +# 2343| Type = [BoolType] bool +# 2343| ValueCategory = lvalue +# 2343| getLValue(): [VariableAccess] b +# 2343| Type = [BoolType] bool +# 2343| ValueCategory = lvalue +# 2343| getRValue(): [Literal] 0 +# 2343| Type = [BoolType] bool +# 2343| Value = [Literal] 0 +# 2343| ValueCategory = prvalue +# 2345| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 2345| Type = [VoidType] void +# 2345| ValueCategory = prvalue +# 2345| getQualifier(): [VariableAccess] s +# 2345| Type = [Struct] String +# 2345| ValueCategory = lvalue +# 2347| getStmt(1): [BlockStmt] { ... } +# 2348| getStmt(0): [WhileStmt] while (...) ... +# 2348| getCondition(): [ConditionDeclExpr] (condition decl) +# 2348| Type = [BoolType] bool +# 2348| ValueCategory = prvalue +# 2348| getChild(0): [FunctionCall] call to operator bool +# 2348| Type = [BoolType] bool +# 2348| ValueCategory = prvalue +# 2348| getQualifier(): [VariableAccess] B +# 2348| Type = [Class] Bool +# 2348| ValueCategory = prvalue(load) +# 2348| getInitializingExpr(): [ConstructorCall] call to Bool # 2348| Type = [VoidType] void # 2348| ValueCategory = prvalue -# 2351| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2351| Type = [VoidType] void -# 2351| ValueCategory = prvalue -# 2351| getQualifier(): [VariableAccess] s -# 2351| Type = [Struct] String -# 2351| ValueCategory = lvalue -# 2350| getStmt(3): [ExprStmt] ExprStmt -# 2350| getExpr(): [VariableAccess] s -# 2350| Type = [Struct] String -# 2350| ValueCategory = lvalue -# 2351| getStmt(4): [ReturnStmt] return ... -# 2351| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2351| Type = [VoidType] void -# 2351| ValueCategory = prvalue -# 2351| getQualifier(): [VariableAccess] s -# 2351| Type = [Struct] String -# 2351| ValueCategory = lvalue -# 2353| [TopLevelFunction] int IfReturnDestructors3(bool) -# 2353| : -# 2353| getParameter(0): [Parameter] b -# 2353| Type = [BoolType] bool -# 2353| getEntryPoint(): [BlockStmt] { ... } -# 2354| getStmt(0): [DeclStmt] declaration -# 2354| getDeclarationEntry(0): [VariableDeclarationEntry] definition of s -# 2354| Type = [Struct] String -# 2354| getVariable().getInitializer(): [Initializer] initializer for s -# 2354| getExpr(): [ConstructorCall] call to String -# 2354| Type = [VoidType] void -# 2354| ValueCategory = prvalue -# 2355| getStmt(1): [IfStmt] if (...) ... -# 2355| getCondition(): [VariableAccess] b -# 2355| Type = [BoolType] bool -# 2355| ValueCategory = prvalue(load) -# 2355| getThen(): [BlockStmt] { ... } -# 2356| getStmt(0): [ReturnStmt] return ... -# 2356| getExpr(): [Literal] 1 -# 2356| Type = [IntType] int -# 2356| Value = [Literal] 1 -# 2356| ValueCategory = prvalue -# 2359| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2359| Type = [VoidType] void -# 2359| ValueCategory = prvalue -# 2359| getQualifier(): [VariableAccess] s -# 2359| Type = [Struct] String -# 2359| ValueCategory = lvalue -# 2358| getStmt(2): [ReturnStmt] return ... -# 2358| getExpr(): [Literal] 0 -# 2358| Type = [IntType] int -# 2358| Value = [Literal] 0 -# 2358| ValueCategory = prvalue -# 2359| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2359| Type = [VoidType] void -# 2359| ValueCategory = prvalue -# 2359| getQualifier(): [VariableAccess] s -# 2359| Type = [Struct] String -# 2359| ValueCategory = lvalue -# 2361| [TopLevelFunction] void VoidReturnDestructors() -# 2361| : -# 2361| getEntryPoint(): [BlockStmt] { ... } -# 2362| getStmt(0): [DeclStmt] declaration -# 2362| getDeclarationEntry(0): [VariableDeclarationEntry] definition of s -# 2362| Type = [Struct] String -# 2362| getVariable().getInitializer(): [Initializer] initializer for s -# 2362| getExpr(): [ConstructorCall] call to String +# 2348| getArgument(0): [VariableAccess] b +# 2348| Type = [BoolType] bool +# 2348| ValueCategory = prvalue(load) +# 2348| getStmt(): [BlockStmt] { ... } +# 2349| getStmt(0): [ExprStmt] ExprStmt +# 2349| getExpr(): [AssignExpr] ... = ... +# 2349| Type = [BoolType] bool +# 2349| ValueCategory = lvalue +# 2349| getLValue(): [VariableAccess] b +# 2349| Type = [BoolType] bool +# 2349| ValueCategory = lvalue +# 2349| getRValue(): [Literal] 0 +# 2349| Type = [BoolType] bool +# 2349| Value = [Literal] 0 +# 2349| ValueCategory = prvalue +# 2350| getImplicitDestructorCall(0): [DestructorCall] call to ~Bool +# 2350| Type = [VoidType] void +# 2350| ValueCategory = prvalue +# 2350| getQualifier(): [VariableAccess] B +# 2350| Type = [Class] Bool +# 2350| ValueCategory = lvalue +# 2350| getImplicitDestructorCall(0): [DestructorCall] call to ~Bool +# 2350| Type = [VoidType] void +# 2350| ValueCategory = prvalue +# 2350| getQualifier(): [VariableAccess] B +# 2350| Type = [Class] Bool +# 2350| ValueCategory = lvalue +# 2352| getStmt(2): [ReturnStmt] return ... +# 2354| [TopLevelFunction] void VoidFunc() +# 2354| : +# 2354| getEntryPoint(): [BlockStmt] { ... } +# 2354| getStmt(0): [ReturnStmt] return ... +# 2356| [TopLevelFunction] void IfReturnDestructors(bool) +# 2356| : +# 2356| getParameter(0): [Parameter] b +# 2356| Type = [BoolType] bool +# 2356| getEntryPoint(): [BlockStmt] { ... } +# 2357| getStmt(0): [DeclStmt] declaration +# 2357| getDeclarationEntry(0): [VariableDeclarationEntry] definition of s +# 2357| Type = [Struct] String +# 2357| getVariable().getInitializer(): [Initializer] initializer for s +# 2357| getExpr(): [ConstructorCall] call to String +# 2357| Type = [VoidType] void +# 2357| ValueCategory = prvalue +# 2358| getStmt(1): [IfStmt] if (...) ... +# 2358| getCondition(): [VariableAccess] b +# 2358| Type = [BoolType] bool +# 2358| ValueCategory = prvalue(load) +# 2358| getThen(): [BlockStmt] { ... } +# 2359| getStmt(0): [ReturnStmt] return ... +# 2365| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 2365| Type = [VoidType] void +# 2365| ValueCategory = prvalue +# 2365| getQualifier(): [VariableAccess] s +# 2365| Type = [Struct] String +# 2365| ValueCategory = lvalue +# 2361| getStmt(2): [IfStmt] if (...) ... +# 2361| getCondition(): [VariableAccess] b +# 2361| Type = [BoolType] bool +# 2361| ValueCategory = prvalue(load) +# 2361| getThen(): [BlockStmt] { ... } +# 2362| getStmt(0): [ReturnStmt] return ... +# 2362| getExpr(): [FunctionCall] call to VoidFunc # 2362| Type = [VoidType] void # 2362| ValueCategory = prvalue -# 2363| getStmt(1): [ReturnStmt] return ... -# 2363| getExpr(): [FunctionCall] call to VoidFunc -# 2363| Type = [VoidType] void -# 2363| ValueCategory = prvalue -# 2364| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2364| Type = [VoidType] void -# 2364| ValueCategory = prvalue -# 2364| getQualifier(): [VariableAccess] s -# 2364| Type = [Struct] String -# 2364| ValueCategory = lvalue -# 2367| [CopyAssignmentOperator] return_routine_type::HasVoidToIntFunc& return_routine_type::HasVoidToIntFunc::operator=(return_routine_type::HasVoidToIntFunc const&) +# 2365| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 2365| Type = [VoidType] void +# 2365| ValueCategory = prvalue +# 2365| getQualifier(): [VariableAccess] s +# 2365| Type = [Struct] String +# 2365| ValueCategory = lvalue +# 2364| getStmt(3): [ExprStmt] ExprStmt +# 2364| getExpr(): [VariableAccess] s +# 2364| Type = [Struct] String +# 2364| ValueCategory = lvalue +# 2365| getStmt(4): [ReturnStmt] return ... +# 2365| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 2365| Type = [VoidType] void +# 2365| ValueCategory = prvalue +# 2365| getQualifier(): [VariableAccess] s +# 2365| Type = [Struct] String +# 2365| ValueCategory = lvalue +# 2367| [TopLevelFunction] int IfReturnDestructors3(bool) # 2367| : +# 2367| getParameter(0): [Parameter] b +# 2367| Type = [BoolType] bool +# 2367| getEntryPoint(): [BlockStmt] { ... } +# 2368| getStmt(0): [DeclStmt] declaration +# 2368| getDeclarationEntry(0): [VariableDeclarationEntry] definition of s +# 2368| Type = [Struct] String +# 2368| getVariable().getInitializer(): [Initializer] initializer for s +# 2368| getExpr(): [ConstructorCall] call to String +# 2368| Type = [VoidType] void +# 2368| ValueCategory = prvalue +# 2369| getStmt(1): [IfStmt] if (...) ... +# 2369| getCondition(): [VariableAccess] b +# 2369| Type = [BoolType] bool +# 2369| ValueCategory = prvalue(load) +# 2369| getThen(): [BlockStmt] { ... } +# 2370| getStmt(0): [ReturnStmt] return ... +# 2370| getExpr(): [Literal] 1 +# 2370| Type = [IntType] int +# 2370| Value = [Literal] 1 +# 2370| ValueCategory = prvalue +# 2373| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 2373| Type = [VoidType] void +# 2373| ValueCategory = prvalue +# 2373| getQualifier(): [VariableAccess] s +# 2373| Type = [Struct] String +# 2373| ValueCategory = lvalue +# 2372| getStmt(2): [ReturnStmt] return ... +# 2372| getExpr(): [Literal] 0 +# 2372| Type = [IntType] int +# 2372| Value = [Literal] 0 +# 2372| ValueCategory = prvalue +# 2373| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 2373| Type = [VoidType] void +# 2373| ValueCategory = prvalue +# 2373| getQualifier(): [VariableAccess] s +# 2373| Type = [Struct] String +# 2373| ValueCategory = lvalue +# 2375| [TopLevelFunction] void VoidReturnDestructors() +# 2375| : +# 2375| getEntryPoint(): [BlockStmt] { ... } +# 2376| getStmt(0): [DeclStmt] declaration +# 2376| getDeclarationEntry(0): [VariableDeclarationEntry] definition of s +# 2376| Type = [Struct] String +# 2376| getVariable().getInitializer(): [Initializer] initializer for s +# 2376| getExpr(): [ConstructorCall] call to String +# 2376| Type = [VoidType] void +# 2376| ValueCategory = prvalue +# 2377| getStmt(1): [ReturnStmt] return ... +# 2377| getExpr(): [FunctionCall] call to VoidFunc +# 2377| Type = [VoidType] void +# 2377| ValueCategory = prvalue +# 2378| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 2378| Type = [VoidType] void +# 2378| ValueCategory = prvalue +# 2378| getQualifier(): [VariableAccess] s +# 2378| Type = [Struct] String +# 2378| ValueCategory = lvalue +# 2381| [CopyAssignmentOperator] return_routine_type::HasVoidToIntFunc& return_routine_type::HasVoidToIntFunc::operator=(return_routine_type::HasVoidToIntFunc const&) +# 2381| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const HasVoidToIntFunc & -# 2367| [MoveAssignmentOperator] return_routine_type::HasVoidToIntFunc& return_routine_type::HasVoidToIntFunc::operator=(return_routine_type::HasVoidToIntFunc&&) -# 2367| : +# 2381| [MoveAssignmentOperator] return_routine_type::HasVoidToIntFunc& return_routine_type::HasVoidToIntFunc::operator=(return_routine_type::HasVoidToIntFunc&&) +# 2381| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] HasVoidToIntFunc && -# 2369| [MemberFunction] void return_routine_type::HasVoidToIntFunc::VoidToInt(int) -# 2369| : -# 2369| getParameter(0): [Parameter] (unnamed parameter 0) -# 2369| Type = [IntType] int -# 2374| [TopLevelFunction] return_routine_type::VoidToIntMemberFunc return_routine_type::GetVoidToIntFunc() -# 2374| : -# 2375| getEntryPoint(): [BlockStmt] { ... } -# 2376| getStmt(0): [ReturnStmt] return ... -# 2376| getExpr(): [FunctionAccess] VoidToInt -# 2376| Type = [RoutineType] ..()(..) -# 2376| ValueCategory = prvalue +# 2383| [MemberFunction] void return_routine_type::HasVoidToIntFunc::VoidToInt(int) +# 2383| : +# 2383| getParameter(0): [Parameter] (unnamed parameter 0) +# 2383| Type = [IntType] int +# 2388| [TopLevelFunction] return_routine_type::VoidToIntMemberFunc return_routine_type::GetVoidToIntFunc() +# 2388| : +# 2389| getEntryPoint(): [BlockStmt] { ... } +# 2390| getStmt(0): [ReturnStmt] return ... +# 2390| getExpr(): [FunctionAccess] VoidToInt +# 2390| Type = [RoutineType] ..()(..) +# 2390| ValueCategory = prvalue +# 2395| [TopLevelFunction] int small_operation_should_not_be_constant_folded() +# 2395| : +# 2395| getEntryPoint(): [BlockStmt] { ... } +# 2396| getStmt(0): [ReturnStmt] return ... +# 2396| getExpr(): [BitwiseXorExpr] ... ^ ... +# 2396| Type = [IntType] int +# 2396| Value = [BitwiseXorExpr] 3 +# 2396| ValueCategory = prvalue +# 2396| getLeftOperand(): [Literal] 1 +# 2396| Type = [IntType] int +# 2396| Value = [Literal] 1 +# 2396| ValueCategory = prvalue +# 2396| getRightOperand(): [Literal] 2 +# 2396| Type = [IntType] int +# 2396| Value = [Literal] 2 +# 2396| ValueCategory = prvalue +# 2406| [TopLevelFunction] int large_operation_should_be_constant_folded() +# 2406| : +# 2406| getEntryPoint(): [BlockStmt] { ... } +# 2407| getStmt(0): [ReturnStmt] return ... +# 2407| getExpr(): [BitwiseXorExpr] ... ^ ... +# 2407| Type = [IntType] int +# 2407| Value = [BitwiseXorExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand(): [BitwiseXorExpr] ... ^ ... +# 2407| Type = [IntType] int +# 2407| Value = [BitwiseXorExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand(): [BitwiseXorExpr] ... ^ ... +# 2407| Type = [IntType] int +# 2407| Value = [BitwiseXorExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand(): [BitwiseXorExpr] ... ^ ... +# 2407| Type = [IntType] int +# 2407| Value = [BitwiseXorExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand(): [BitwiseXorExpr] ... ^ ... +# 2407| Type = [IntType] int +# 2407| Value = [BitwiseXorExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand(): [BitwiseXorExpr] ... ^ ... +# 2407| Type = [IntType] int +# 2407| Value = [BitwiseXorExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand(): [Literal] 1 +# 2407| Type = [IntType] int +# 2407| Value = [Literal] 1 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand(): [Literal] 1 +# 2407| Type = [IntType] int +# 2407| Value = [Literal] 1 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand(): [BitwiseXorExpr] ... ^ ... +# 2407| Type = [IntType] int +# 2407| Value = [BitwiseXorExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand(): [Literal] 1 +# 2407| Type = [IntType] int +# 2407| Value = [Literal] 1 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand(): [Literal] 1 +# 2407| Type = [IntType] int +# 2407| Value = [Literal] 1 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2407| Type = [IntType] int +# 2407| Value = [ParenthesisExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2407| Type = [IntType] int +# 2407| Value = [ParenthesisExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand(): [BitwiseXorExpr] ... ^ ... +# 2407| Type = [IntType] int +# 2407| Value = [BitwiseXorExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand(): [BitwiseXorExpr] ... ^ ... +# 2407| Type = [IntType] int +# 2407| Value = [BitwiseXorExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand(): [Literal] 1 +# 2407| Type = [IntType] int +# 2407| Value = [Literal] 1 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand(): [Literal] 1 +# 2407| Type = [IntType] int +# 2407| Value = [Literal] 1 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand(): [BitwiseXorExpr] ... ^ ... +# 2407| Type = [IntType] int +# 2407| Value = [BitwiseXorExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand(): [Literal] 1 +# 2407| Type = [IntType] int +# 2407| Value = [Literal] 1 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand(): [Literal] 1 +# 2407| Type = [IntType] int +# 2407| Value = [Literal] 1 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2407| Type = [IntType] int +# 2407| Value = [ParenthesisExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2407| Type = [IntType] int +# 2407| Value = [ParenthesisExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2407| Type = [IntType] int +# 2407| Value = [ParenthesisExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2407| Type = [IntType] int +# 2407| Value = [ParenthesisExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand(): [BitwiseXorExpr] ... ^ ... +# 2407| Type = [IntType] int +# 2407| Value = [BitwiseXorExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand(): [BitwiseXorExpr] ... ^ ... +# 2407| Type = [IntType] int +# 2407| Value = [BitwiseXorExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand(): [BitwiseXorExpr] ... ^ ... +# 2407| Type = [IntType] int +# 2407| Value = [BitwiseXorExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand(): [Literal] 1 +# 2407| Type = [IntType] int +# 2407| Value = [Literal] 1 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand(): [Literal] 1 +# 2407| Type = [IntType] int +# 2407| Value = [Literal] 1 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand(): [BitwiseXorExpr] ... ^ ... +# 2407| Type = [IntType] int +# 2407| Value = [BitwiseXorExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand(): [Literal] 1 +# 2407| Type = [IntType] int +# 2407| Value = [Literal] 1 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand(): [Literal] 1 +# 2407| Type = [IntType] int +# 2407| Value = [Literal] 1 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2407| Type = [IntType] int +# 2407| Value = [ParenthesisExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2407| Type = [IntType] int +# 2407| Value = [ParenthesisExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand(): [BitwiseXorExpr] ... ^ ... +# 2407| Type = [IntType] int +# 2407| Value = [BitwiseXorExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand(): [BitwiseXorExpr] ... ^ ... +# 2407| Type = [IntType] int +# 2407| Value = [BitwiseXorExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand(): [Literal] 1 +# 2407| Type = [IntType] int +# 2407| Value = [Literal] 1 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand(): [Literal] 1 +# 2407| Type = [IntType] int +# 2407| Value = [Literal] 1 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand(): [BitwiseXorExpr] ... ^ ... +# 2407| Type = [IntType] int +# 2407| Value = [BitwiseXorExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand(): [Literal] 1 +# 2407| Type = [IntType] int +# 2407| Value = [Literal] 1 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand(): [Literal] 1 +# 2407| Type = [IntType] int +# 2407| Value = [Literal] 1 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2407| Type = [IntType] int +# 2407| Value = [ParenthesisExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2407| Type = [IntType] int +# 2407| Value = [ParenthesisExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2407| Type = [IntType] int +# 2407| Value = [ParenthesisExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2407| Type = [IntType] int +# 2407| Value = [ParenthesisExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2407| Type = [IntType] int +# 2407| Value = [ParenthesisExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2407| Type = [IntType] int +# 2407| Value = [ParenthesisExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand(): [BitwiseXorExpr] ... ^ ... +# 2407| Type = [IntType] int +# 2407| Value = [BitwiseXorExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand(): [BitwiseXorExpr] ... ^ ... +# 2407| Type = [IntType] int +# 2407| Value = [BitwiseXorExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand(): [BitwiseXorExpr] ... ^ ... +# 2407| Type = [IntType] int +# 2407| Value = [BitwiseXorExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand(): [BitwiseXorExpr] ... ^ ... +# 2407| Type = [IntType] int +# 2407| Value = [BitwiseXorExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand(): [Literal] 1 +# 2407| Type = [IntType] int +# 2407| Value = [Literal] 1 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand(): [Literal] 1 +# 2407| Type = [IntType] int +# 2407| Value = [Literal] 1 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand(): [BitwiseXorExpr] ... ^ ... +# 2407| Type = [IntType] int +# 2407| Value = [BitwiseXorExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand(): [Literal] 1 +# 2407| Type = [IntType] int +# 2407| Value = [Literal] 1 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand(): [Literal] 1 +# 2407| Type = [IntType] int +# 2407| Value = [Literal] 1 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2407| Type = [IntType] int +# 2407| Value = [ParenthesisExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2407| Type = [IntType] int +# 2407| Value = [ParenthesisExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand(): [BitwiseXorExpr] ... ^ ... +# 2407| Type = [IntType] int +# 2407| Value = [BitwiseXorExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand(): [BitwiseXorExpr] ... ^ ... +# 2407| Type = [IntType] int +# 2407| Value = [BitwiseXorExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand(): [Literal] 1 +# 2407| Type = [IntType] int +# 2407| Value = [Literal] 1 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand(): [Literal] 1 +# 2407| Type = [IntType] int +# 2407| Value = [Literal] 1 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand(): [BitwiseXorExpr] ... ^ ... +# 2407| Type = [IntType] int +# 2407| Value = [BitwiseXorExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand(): [Literal] 1 +# 2407| Type = [IntType] int +# 2407| Value = [Literal] 1 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand(): [Literal] 1 +# 2407| Type = [IntType] int +# 2407| Value = [Literal] 1 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2407| Type = [IntType] int +# 2407| Value = [ParenthesisExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2407| Type = [IntType] int +# 2407| Value = [ParenthesisExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2407| Type = [IntType] int +# 2407| Value = [ParenthesisExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2407| Type = [IntType] int +# 2407| Value = [ParenthesisExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand(): [BitwiseXorExpr] ... ^ ... +# 2407| Type = [IntType] int +# 2407| Value = [BitwiseXorExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand(): [BitwiseXorExpr] ... ^ ... +# 2407| Type = [IntType] int +# 2407| Value = [BitwiseXorExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand(): [BitwiseXorExpr] ... ^ ... +# 2407| Type = [IntType] int +# 2407| Value = [BitwiseXorExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand(): [Literal] 1 +# 2407| Type = [IntType] int +# 2407| Value = [Literal] 1 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand(): [Literal] 1 +# 2407| Type = [IntType] int +# 2407| Value = [Literal] 1 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand(): [BitwiseXorExpr] ... ^ ... +# 2407| Type = [IntType] int +# 2407| Value = [BitwiseXorExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand(): [Literal] 1 +# 2407| Type = [IntType] int +# 2407| Value = [Literal] 1 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand(): [Literal] 1 +# 2407| Type = [IntType] int +# 2407| Value = [Literal] 1 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2407| Type = [IntType] int +# 2407| Value = [ParenthesisExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2407| Type = [IntType] int +# 2407| Value = [ParenthesisExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand(): [BitwiseXorExpr] ... ^ ... +# 2407| Type = [IntType] int +# 2407| Value = [BitwiseXorExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand(): [BitwiseXorExpr] ... ^ ... +# 2407| Type = [IntType] int +# 2407| Value = [BitwiseXorExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand(): [Literal] 1 +# 2407| Type = [IntType] int +# 2407| Value = [Literal] 1 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand(): [Literal] 1 +# 2407| Type = [IntType] int +# 2407| Value = [Literal] 1 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand(): [BitwiseXorExpr] ... ^ ... +# 2407| Type = [IntType] int +# 2407| Value = [BitwiseXorExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand(): [Literal] 1 +# 2407| Type = [IntType] int +# 2407| Value = [Literal] 1 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand(): [Literal] 1 +# 2407| Type = [IntType] int +# 2407| Value = [Literal] 1 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2407| Type = [IntType] int +# 2407| Value = [ParenthesisExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2407| Type = [IntType] int +# 2407| Value = [ParenthesisExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2407| Type = [IntType] int +# 2407| Value = [ParenthesisExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2407| Type = [IntType] int +# 2407| Value = [ParenthesisExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2407| Type = [IntType] int +# 2407| Value = [ParenthesisExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2407| Type = [IntType] int +# 2407| Value = [ParenthesisExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2407| Type = [IntType] int +# 2407| Value = [ParenthesisExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2407| Type = [IntType] int +# 2407| Value = [ParenthesisExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand(): [BitwiseXorExpr] ... ^ ... +# 2407| Type = [IntType] int +# 2407| Value = [BitwiseXorExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand(): [BitwiseXorExpr] ... ^ ... +# 2407| Type = [IntType] int +# 2407| Value = [BitwiseXorExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand(): [BitwiseXorExpr] ... ^ ... +# 2407| Type = [IntType] int +# 2407| Value = [BitwiseXorExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand(): [BitwiseXorExpr] ... ^ ... +# 2407| Type = [IntType] int +# 2407| Value = [BitwiseXorExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand(): [BitwiseXorExpr] ... ^ ... +# 2407| Type = [IntType] int +# 2407| Value = [BitwiseXorExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand(): [Literal] 1 +# 2407| Type = [IntType] int +# 2407| Value = [Literal] 1 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand(): [Literal] 1 +# 2407| Type = [IntType] int +# 2407| Value = [Literal] 1 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand(): [BitwiseXorExpr] ... ^ ... +# 2407| Type = [IntType] int +# 2407| Value = [BitwiseXorExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand(): [Literal] 1 +# 2407| Type = [IntType] int +# 2407| Value = [Literal] 1 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand(): [Literal] 1 +# 2407| Type = [IntType] int +# 2407| Value = [Literal] 1 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2407| Type = [IntType] int +# 2407| Value = [ParenthesisExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2407| Type = [IntType] int +# 2407| Value = [ParenthesisExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand(): [BitwiseXorExpr] ... ^ ... +# 2407| Type = [IntType] int +# 2407| Value = [BitwiseXorExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand(): [BitwiseXorExpr] ... ^ ... +# 2407| Type = [IntType] int +# 2407| Value = [BitwiseXorExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand(): [Literal] 1 +# 2407| Type = [IntType] int +# 2407| Value = [Literal] 1 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand(): [Literal] 1 +# 2407| Type = [IntType] int +# 2407| Value = [Literal] 1 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand(): [BitwiseXorExpr] ... ^ ... +# 2407| Type = [IntType] int +# 2407| Value = [BitwiseXorExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand(): [Literal] 1 +# 2407| Type = [IntType] int +# 2407| Value = [Literal] 1 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand(): [Literal] 1 +# 2407| Type = [IntType] int +# 2407| Value = [Literal] 1 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2407| Type = [IntType] int +# 2407| Value = [ParenthesisExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2407| Type = [IntType] int +# 2407| Value = [ParenthesisExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2407| Type = [IntType] int +# 2407| Value = [ParenthesisExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2407| Type = [IntType] int +# 2407| Value = [ParenthesisExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand(): [BitwiseXorExpr] ... ^ ... +# 2407| Type = [IntType] int +# 2407| Value = [BitwiseXorExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand(): [BitwiseXorExpr] ... ^ ... +# 2407| Type = [IntType] int +# 2407| Value = [BitwiseXorExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand(): [BitwiseXorExpr] ... ^ ... +# 2407| Type = [IntType] int +# 2407| Value = [BitwiseXorExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand(): [Literal] 1 +# 2407| Type = [IntType] int +# 2407| Value = [Literal] 1 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand(): [Literal] 1 +# 2407| Type = [IntType] int +# 2407| Value = [Literal] 1 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand(): [BitwiseXorExpr] ... ^ ... +# 2407| Type = [IntType] int +# 2407| Value = [BitwiseXorExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand(): [Literal] 1 +# 2407| Type = [IntType] int +# 2407| Value = [Literal] 1 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand(): [Literal] 1 +# 2407| Type = [IntType] int +# 2407| Value = [Literal] 1 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2407| Type = [IntType] int +# 2407| Value = [ParenthesisExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2407| Type = [IntType] int +# 2407| Value = [ParenthesisExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand(): [BitwiseXorExpr] ... ^ ... +# 2407| Type = [IntType] int +# 2407| Value = [BitwiseXorExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand(): [BitwiseXorExpr] ... ^ ... +# 2407| Type = [IntType] int +# 2407| Value = [BitwiseXorExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand(): [Literal] 1 +# 2407| Type = [IntType] int +# 2407| Value = [Literal] 1 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand(): [Literal] 1 +# 2407| Type = [IntType] int +# 2407| Value = [Literal] 1 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand(): [BitwiseXorExpr] ... ^ ... +# 2407| Type = [IntType] int +# 2407| Value = [BitwiseXorExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand(): [Literal] 1 +# 2407| Type = [IntType] int +# 2407| Value = [Literal] 1 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand(): [Literal] 1 +# 2407| Type = [IntType] int +# 2407| Value = [Literal] 1 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2407| Type = [IntType] int +# 2407| Value = [ParenthesisExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2407| Type = [IntType] int +# 2407| Value = [ParenthesisExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2407| Type = [IntType] int +# 2407| Value = [ParenthesisExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2407| Type = [IntType] int +# 2407| Value = [ParenthesisExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2407| Type = [IntType] int +# 2407| Value = [ParenthesisExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2407| Type = [IntType] int +# 2407| Value = [ParenthesisExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand(): [BitwiseXorExpr] ... ^ ... +# 2407| Type = [IntType] int +# 2407| Value = [BitwiseXorExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand(): [BitwiseXorExpr] ... ^ ... +# 2407| Type = [IntType] int +# 2407| Value = [BitwiseXorExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand(): [BitwiseXorExpr] ... ^ ... +# 2407| Type = [IntType] int +# 2407| Value = [BitwiseXorExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand(): [BitwiseXorExpr] ... ^ ... +# 2407| Type = [IntType] int +# 2407| Value = [BitwiseXorExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand(): [Literal] 1 +# 2407| Type = [IntType] int +# 2407| Value = [Literal] 1 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand(): [Literal] 1 +# 2407| Type = [IntType] int +# 2407| Value = [Literal] 1 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand(): [BitwiseXorExpr] ... ^ ... +# 2407| Type = [IntType] int +# 2407| Value = [BitwiseXorExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand(): [Literal] 1 +# 2407| Type = [IntType] int +# 2407| Value = [Literal] 1 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand(): [Literal] 1 +# 2407| Type = [IntType] int +# 2407| Value = [Literal] 1 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2407| Type = [IntType] int +# 2407| Value = [ParenthesisExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2407| Type = [IntType] int +# 2407| Value = [ParenthesisExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand(): [BitwiseXorExpr] ... ^ ... +# 2407| Type = [IntType] int +# 2407| Value = [BitwiseXorExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand(): [BitwiseXorExpr] ... ^ ... +# 2407| Type = [IntType] int +# 2407| Value = [BitwiseXorExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand(): [Literal] 1 +# 2407| Type = [IntType] int +# 2407| Value = [Literal] 1 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand(): [Literal] 1 +# 2407| Type = [IntType] int +# 2407| Value = [Literal] 1 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand(): [BitwiseXorExpr] ... ^ ... +# 2407| Type = [IntType] int +# 2407| Value = [BitwiseXorExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand(): [Literal] 1 +# 2407| Type = [IntType] int +# 2407| Value = [Literal] 1 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand(): [Literal] 1 +# 2407| Type = [IntType] int +# 2407| Value = [Literal] 1 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2407| Type = [IntType] int +# 2407| Value = [ParenthesisExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2407| Type = [IntType] int +# 2407| Value = [ParenthesisExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2407| Type = [IntType] int +# 2407| Value = [ParenthesisExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2407| Type = [IntType] int +# 2407| Value = [ParenthesisExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand(): [BitwiseXorExpr] ... ^ ... +# 2407| Type = [IntType] int +# 2407| Value = [BitwiseXorExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand(): [BitwiseXorExpr] ... ^ ... +# 2407| Type = [IntType] int +# 2407| Value = [BitwiseXorExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand(): [BitwiseXorExpr] ... ^ ... +# 2407| Type = [IntType] int +# 2407| Value = [BitwiseXorExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand(): [Literal] 1 +# 2407| Type = [IntType] int +# 2407| Value = [Literal] 1 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand(): [Literal] 1 +# 2407| Type = [IntType] int +# 2407| Value = [Literal] 1 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand(): [BitwiseXorExpr] ... ^ ... +# 2407| Type = [IntType] int +# 2407| Value = [BitwiseXorExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand(): [Literal] 1 +# 2407| Type = [IntType] int +# 2407| Value = [Literal] 1 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand(): [Literal] 1 +# 2407| Type = [IntType] int +# 2407| Value = [Literal] 1 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2407| Type = [IntType] int +# 2407| Value = [ParenthesisExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2407| Type = [IntType] int +# 2407| Value = [ParenthesisExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand(): [BitwiseXorExpr] ... ^ ... +# 2407| Type = [IntType] int +# 2407| Value = [BitwiseXorExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand(): [BitwiseXorExpr] ... ^ ... +# 2407| Type = [IntType] int +# 2407| Value = [BitwiseXorExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand(): [Literal] 1 +# 2407| Type = [IntType] int +# 2407| Value = [Literal] 1 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand(): [Literal] 1 +# 2407| Type = [IntType] int +# 2407| Value = [Literal] 1 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand(): [BitwiseXorExpr] ... ^ ... +# 2407| Type = [IntType] int +# 2407| Value = [BitwiseXorExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand(): [Literal] 1 +# 2407| Type = [IntType] int +# 2407| Value = [Literal] 1 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand(): [Literal] 1 +# 2407| Type = [IntType] int +# 2407| Value = [Literal] 1 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2407| Type = [IntType] int +# 2407| Value = [ParenthesisExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2407| Type = [IntType] int +# 2407| Value = [ParenthesisExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2407| Type = [IntType] int +# 2407| Value = [ParenthesisExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2407| Type = [IntType] int +# 2407| Value = [ParenthesisExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2407| Type = [IntType] int +# 2407| Value = [ParenthesisExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2407| Type = [IntType] int +# 2407| Value = [ParenthesisExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2407| Type = [IntType] int +# 2407| Value = [ParenthesisExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2407| Type = [IntType] int +# 2407| Value = [ParenthesisExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2407| Type = [IntType] int +# 2407| Value = [ParenthesisExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2407| Type = [IntType] int +# 2407| Value = [ParenthesisExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getExpr().getFullyConverted(): [ParenthesisExpr] (...) +# 2407| Type = [IntType] int +# 2407| Value = [ParenthesisExpr] 0 +# 2407| ValueCategory = prvalue +# 2410| [TopLevelFunction] void initialization_with_temp_destructor() +# 2410| : +# 2410| getEntryPoint(): [BlockStmt] { ... } +# 2411| getStmt(0): [IfStmt] if (...) ... +# 2411| getCondition(): [ConditionDeclExpr] (condition decl) +# 2411| Type = [BoolType] bool +# 2411| ValueCategory = prvalue +# 2411| getVariableAccess(): [VariableAccess] x +# 2411| Type = [PlainCharType] char +# 2411| ValueCategory = prvalue(load) +# 2411| getInitializingExpr(): [FunctionCall] call to get_x +# 2411| Type = [PlainCharType] char +# 2411| ValueCategory = prvalue +# 2411| getQualifier(): [ConstructorCall] call to ClassWithDestructor +# 2411| Type = [VoidType] void +# 2411| ValueCategory = prvalue +# 2411| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor +# 2411| Type = [VoidType] void +# 2411| ValueCategory = prvalue +# 2411| getQualifier(): [ReuseExpr] reuse of temporary object +# 2411| Type = [Class] ClassWithDestructor +# 2411| ValueCategory = xvalue +# 2411| getQualifier().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 2411| Type = [Class] ClassWithDestructor +# 2411| ValueCategory = prvalue(load) +# 2411| getVariableAccess().getFullyConverted(): [CStyleCast] (bool)... +# 2411| Conversion = [BoolConversion] conversion to bool +# 2411| Type = [BoolType] bool +# 2411| ValueCategory = prvalue +# 2412| getThen(): [ExprStmt] ExprStmt +# 2412| getExpr(): [PostfixIncrExpr] ... ++ +# 2412| Type = [PlainCharType] char +# 2412| ValueCategory = prvalue +# 2412| getOperand(): [VariableAccess] x +# 2412| Type = [PlainCharType] char +# 2412| ValueCategory = lvalue +# 2414| getStmt(1): [IfStmt] if (...) ... +# 2414| getInitialization(): [DeclStmt] declaration +# 2414| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x +# 2414| Type = [PlainCharType] char +# 2414| getVariable().getInitializer(): [Initializer] initializer for x +# 2414| getExpr(): [FunctionCall] call to get_x +# 2414| Type = [PlainCharType] char +# 2414| ValueCategory = prvalue +# 2414| getQualifier(): [ConstructorCall] call to ClassWithDestructor +# 2414| Type = [VoidType] void +# 2414| ValueCategory = prvalue +# 2414| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor +# 2414| Type = [VoidType] void +# 2414| ValueCategory = prvalue +# 2414| getQualifier(): [ReuseExpr] reuse of temporary object +# 2414| Type = [Class] ClassWithDestructor +# 2414| ValueCategory = xvalue +# 2414| getQualifier().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 2414| Type = [Class] ClassWithDestructor +# 2414| ValueCategory = prvalue(load) +# 2414| getCondition(): [VariableAccess] x +# 2414| Type = [PlainCharType] char +# 2414| ValueCategory = prvalue(load) +# 2415| getThen(): [ExprStmt] ExprStmt +# 2415| getExpr(): [PostfixIncrExpr] ... ++ +# 2415| Type = [PlainCharType] char +# 2415| ValueCategory = prvalue +# 2415| getOperand(): [VariableAccess] x +# 2415| Type = [PlainCharType] char +# 2415| ValueCategory = lvalue +# 2414| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 2414| Conversion = [BoolConversion] conversion to bool +# 2414| Type = [BoolType] bool +# 2414| ValueCategory = prvalue +# 2417| getStmt(2): [ConstexprIfStmt] if constexpr (...) ... +# 2417| getInitialization(): [DeclStmt] declaration +# 2417| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x +# 2417| Type = [PlainCharType] char +# 2417| getVariable().getInitializer(): [Initializer] initializer for x +# 2417| getExpr(): [FunctionCall] call to get_x +# 2417| Type = [PlainCharType] char +# 2417| ValueCategory = prvalue +# 2417| getQualifier(): [ConstructorCall] call to ClassWithDestructor +# 2417| Type = [VoidType] void +# 2417| ValueCategory = prvalue +# 2417| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor +# 2417| Type = [VoidType] void +# 2417| ValueCategory = prvalue +# 2417| getQualifier(): [ReuseExpr] reuse of temporary object +# 2417| Type = [Class] ClassWithDestructor +# 2417| ValueCategory = xvalue +# 2417| getQualifier().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 2417| Type = [Class] ClassWithDestructor +# 2417| ValueCategory = prvalue(load) +# 2417| getCondition(): [VariableAccess] initialization_with_destructor_bool +# 2417| Type = [BoolType] bool +# 2417| Value = [VariableAccess] 1 +# 2417| ValueCategory = prvalue(load) +# 2418| getThen(): [ExprStmt] ExprStmt +# 2418| getExpr(): [PostfixIncrExpr] ... ++ +# 2418| Type = [PlainCharType] char +# 2418| ValueCategory = prvalue +# 2418| getOperand(): [VariableAccess] x +# 2418| Type = [PlainCharType] char +# 2418| ValueCategory = lvalue +# 2420| getStmt(3): [SwitchStmt] switch (...) ... +# 2420| getExpr(): [ConditionDeclExpr] (condition decl) +# 2420| Type = [IntType] int +# 2420| ValueCategory = prvalue +# 2420| getVariableAccess(): [VariableAccess] x +# 2420| Type = [PlainCharType] char +# 2420| ValueCategory = prvalue(load) +# 2420| getInitializingExpr(): [FunctionCall] call to get_x +# 2420| Type = [PlainCharType] char +# 2420| ValueCategory = prvalue +# 2420| getQualifier(): [ConstructorCall] call to ClassWithDestructor +# 2420| Type = [VoidType] void +# 2420| ValueCategory = prvalue +# 2420| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor +# 2420| Type = [VoidType] void +# 2420| ValueCategory = prvalue +# 2420| getQualifier(): [ReuseExpr] reuse of temporary object +# 2420| Type = [Class] ClassWithDestructor +# 2420| ValueCategory = xvalue +# 2420| getQualifier().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 2420| Type = [Class] ClassWithDestructor +# 2420| ValueCategory = prvalue(load) +# 2420| getVariableAccess().getFullyConverted(): [CStyleCast] (int)... +# 2420| Conversion = [IntegralConversion] integral conversion +# 2420| Type = [IntType] int +# 2420| ValueCategory = prvalue +# 2420| getStmt(): [BlockStmt] { ... } +# 2421| getStmt(0): [SwitchCase] case ...: +# 2421| getExpr(): [CharLiteral] 97 +# 2421| Type = [PlainCharType] char +# 2421| Value = [CharLiteral] 97 +# 2421| ValueCategory = prvalue +# 2421| getExpr().getFullyConverted(): [CStyleCast] (int)... +# 2421| Conversion = [IntegralConversion] integral conversion +# 2421| Type = [IntType] int +# 2421| Value = [CStyleCast] 97 +# 2421| ValueCategory = prvalue +# 2422| getStmt(1): [ExprStmt] ExprStmt +# 2422| getExpr(): [PostfixIncrExpr] ... ++ +# 2422| Type = [PlainCharType] char +# 2422| ValueCategory = prvalue +# 2422| getOperand(): [VariableAccess] x +# 2422| Type = [PlainCharType] char +# 2422| ValueCategory = lvalue +# 2425| getStmt(4): [SwitchStmt] switch (...) ... +# 2425| getInitialization(): [DeclStmt] declaration +# 2425| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x +# 2425| Type = [PlainCharType] char +# 2425| getVariable().getInitializer(): [Initializer] initializer for x +# 2425| getExpr(): [FunctionCall] call to get_x +# 2425| Type = [PlainCharType] char +# 2425| ValueCategory = prvalue +# 2425| getQualifier(): [ConstructorCall] call to ClassWithDestructor +# 2425| Type = [VoidType] void +# 2425| ValueCategory = prvalue +# 2425| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor +# 2425| Type = [VoidType] void +# 2425| ValueCategory = prvalue +# 2425| getQualifier(): [ReuseExpr] reuse of temporary object +# 2425| Type = [Class] ClassWithDestructor +# 2425| ValueCategory = xvalue +# 2425| getQualifier().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 2425| Type = [Class] ClassWithDestructor +# 2425| ValueCategory = prvalue(load) +# 2425| getExpr(): [VariableAccess] x +# 2425| Type = [PlainCharType] char +# 2425| ValueCategory = prvalue(load) +# 2425| getStmt(): [BlockStmt] { ... } +# 2426| getStmt(0): [SwitchCase] case ...: +# 2426| getExpr(): [CharLiteral] 97 +# 2426| Type = [PlainCharType] char +# 2426| Value = [CharLiteral] 97 +# 2426| ValueCategory = prvalue +# 2426| getExpr().getFullyConverted(): [CStyleCast] (int)... +# 2426| Conversion = [IntegralConversion] integral conversion +# 2426| Type = [IntType] int +# 2426| Value = [CStyleCast] 97 +# 2426| ValueCategory = prvalue +# 2427| getStmt(1): [ExprStmt] ExprStmt +# 2427| getExpr(): [PostfixIncrExpr] ... ++ +# 2427| Type = [PlainCharType] char +# 2427| ValueCategory = prvalue +# 2427| getOperand(): [VariableAccess] x +# 2427| Type = [PlainCharType] char +# 2427| ValueCategory = lvalue +# 2425| getExpr().getFullyConverted(): [CStyleCast] (int)... +# 2425| Conversion = [IntegralConversion] integral conversion +# 2425| Type = [IntType] int +# 2425| ValueCategory = prvalue +# 2430| getStmt(5): [RangeBasedForStmt] for(...:...) ... +# 2430| getInitialization(): [DeclStmt] declaration +# 2430| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x +# 2430| Type = [PlainCharType] char +# 2430| getVariable().getInitializer(): [Initializer] initializer for x +# 2430| getExpr(): [FunctionCall] call to get_x +# 2430| Type = [PlainCharType] char +# 2430| ValueCategory = prvalue +# 2430| getQualifier(): [ConstructorCall] call to ClassWithDestructor +# 2430| Type = [VoidType] void +# 2430| ValueCategory = prvalue +# 2430| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor +# 2430| Type = [VoidType] void +# 2430| ValueCategory = prvalue +# 2430| getQualifier(): [ReuseExpr] reuse of temporary object +# 2430| Type = [Class] ClassWithDestructor +# 2430| ValueCategory = xvalue +# 2430| getQualifier().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 2430| Type = [Class] ClassWithDestructor +# 2430| ValueCategory = prvalue(load) +# 2430| getChild(1): [DeclStmt] declaration +# 2430| getDeclarationEntry(0): [VariableDeclarationEntry] declaration of (__range) +# 2430| Type = [RValueReferenceType] vector && +#-----| getVariable().getInitializer(): [Initializer] initializer for (__range) +# 2430| getExpr(): [ConstructorCall] call to vector +# 2430| Type = [VoidType] void +# 2430| ValueCategory = prvalue +# 2430| getArgument(0): [VariableAccess] x +# 2430| Type = [PlainCharType] char +# 2430| ValueCategory = prvalue(load) +# 2430| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 2430| Type = [LValueReferenceType] vector & +# 2430| ValueCategory = prvalue +# 2430| getExpr(): [TemporaryObjectExpr] temporary object +# 2430| Type = [ClassTemplateInstantiation,Struct] vector +# 2430| ValueCategory = xvalue +# 2430| getBeginEndDeclaration(): [DeclStmt] declaration +# 2430| getDeclarationEntry(0): [VariableDeclarationEntry] declaration of (__begin) +# 2430| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +#-----| getVariable().getInitializer(): [Initializer] initializer for (__begin) +# 2430| getExpr(): [FunctionCall] call to begin +# 2430| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +# 2430| ValueCategory = prvalue +# 2430| getQualifier(): [VariableAccess] (__range) +# 2430| Type = [RValueReferenceType] vector && +# 2430| ValueCategory = prvalue(load) +#-----| getQualifier().getFullyConverted(): [CStyleCast] (const vector)... +#-----| Conversion = [GlvalueConversion] glvalue conversion +#-----| Type = [SpecifiedType] const vector +#-----| ValueCategory = lvalue +#-----| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +#-----| Type = [ClassTemplateInstantiation,Struct] vector +#-----| ValueCategory = lvalue +# 2430| getDeclarationEntry(1): [VariableDeclarationEntry] declaration of (__end) +# 2430| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +#-----| getVariable().getInitializer(): [Initializer] initializer for (__end) +# 2430| getExpr(): [FunctionCall] call to end +# 2430| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +# 2430| ValueCategory = prvalue +# 2430| getQualifier(): [VariableAccess] (__range) +# 2430| Type = [RValueReferenceType] vector && +# 2430| ValueCategory = prvalue(load) +#-----| getQualifier().getFullyConverted(): [CStyleCast] (const vector)... +#-----| Conversion = [GlvalueConversion] glvalue conversion +#-----| Type = [SpecifiedType] const vector +#-----| ValueCategory = lvalue +#-----| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +#-----| Type = [ClassTemplateInstantiation,Struct] vector +#-----| ValueCategory = lvalue +# 2430| getCondition(): [FunctionCall] call to operator!= +# 2430| Type = [BoolType] bool +# 2430| ValueCategory = prvalue +# 2430| getQualifier(): [VariableAccess] (__begin) +# 2430| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +# 2430| ValueCategory = lvalue +# 2430| getArgument(0): [ConstructorCall] call to iterator +# 2430| Type = [VoidType] void +# 2430| ValueCategory = prvalue +# 2430| getArgument(0): [VariableAccess] (__end) +# 2430| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +# 2430| ValueCategory = lvalue +#-----| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) +#-----| Type = [LValueReferenceType] const iterator & +#-----| ValueCategory = prvalue +#-----| getExpr(): [CStyleCast] (const iterator)... +#-----| Conversion = [GlvalueConversion] glvalue conversion +#-----| Type = [SpecifiedType] const iterator +#-----| ValueCategory = lvalue +#-----| getQualifier().getFullyConverted(): [CStyleCast] (const iterator)... +#-----| Conversion = [GlvalueConversion] glvalue conversion +#-----| Type = [SpecifiedType] const iterator +#-----| ValueCategory = lvalue +#-----| getArgument(0).getFullyConverted(): [TemporaryObjectExpr] temporary object +#-----| Type = [ClassTemplateInstantiation,Struct] iterator +#-----| ValueCategory = lvalue +# 2430| getUpdate(): [FunctionCall] call to operator++ +# 2430| Type = [LValueReferenceType] iterator & +# 2430| ValueCategory = prvalue +# 2430| getQualifier(): [VariableAccess] (__begin) +# 2430| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +# 2430| ValueCategory = lvalue +# 2430| getChild(5): [DeclStmt] declaration +# 2430| getDeclarationEntry(0): [VariableDeclarationEntry] definition of y +# 2430| Type = [PlainCharType] char +# 2430| getVariable().getInitializer(): [Initializer] initializer for y +# 2430| getExpr(): [OverloadedPointerDereferenceExpr] call to operator* +# 2430| Type = [LValueReferenceType] char & +# 2430| ValueCategory = prvalue +# 2430| getQualifier(): [VariableAccess] (__begin) +# 2430| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +# 2430| ValueCategory = lvalue +#-----| getQualifier().getFullyConverted(): [CStyleCast] (const iterator)... +#-----| Conversion = [GlvalueConversion] glvalue conversion +#-----| Type = [SpecifiedType] const iterator +#-----| ValueCategory = lvalue +# 2430| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 2430| Type = [PlainCharType] char +# 2430| ValueCategory = prvalue(load) +# 2431| getStmt(): [ExprStmt] ExprStmt +# 2431| getExpr(): [AssignAddExpr] ... += ... +# 2431| Type = [PlainCharType] char +# 2431| ValueCategory = lvalue +# 2431| getLValue(): [VariableAccess] y +# 2431| Type = [PlainCharType] char +# 2431| ValueCategory = lvalue +# 2431| getRValue(): [VariableAccess] x +# 2431| Type = [PlainCharType] char +# 2431| ValueCategory = prvalue(load) +# 2431| getRValue().getFullyConverted(): [CStyleCast] (int)... +# 2431| Conversion = [IntegralConversion] integral conversion +# 2431| Type = [IntType] int +# 2431| ValueCategory = prvalue +# 2430| getUpdate().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 2430| Type = [ClassTemplateInstantiation,Struct] iterator +# 2430| ValueCategory = lvalue +# 2432| getStmt(6): [ReturnStmt] return ... +# 2434| [TopLevelFunction] void param_with_destructor_by_value(ClassWithDestructor) +# 2434| : +# 2434| getParameter(0): [Parameter] c +# 2434| Type = [Class] ClassWithDestructor +# 2434| getEntryPoint(): [BlockStmt] { ... } +# 2436| getStmt(0): [ReturnStmt] return ... +# 2438| [TopLevelFunction] void param_with_destructor_by_pointer(ClassWithDestructor*) +# 2438| : +# 2438| getParameter(0): [Parameter] c +# 2438| Type = [PointerType] ClassWithDestructor * +# 2438| getEntryPoint(): [BlockStmt] { ... } +# 2440| getStmt(0): [ReturnStmt] return ... +# 2442| [TopLevelFunction] void param_with_destructor_by_ref(ClassWithDestructor&) +# 2442| : +# 2442| getParameter(0): [Parameter] c +# 2442| Type = [LValueReferenceType] ClassWithDestructor & +# 2442| getEntryPoint(): [BlockStmt] { ... } +# 2444| getStmt(0): [ReturnStmt] return ... +# 2446| [TopLevelFunction] void param_with_destructor_by_rref(ClassWithDestructor&&) +# 2446| : +# 2446| getParameter(0): [Parameter] c +# 2446| Type = [RValueReferenceType] ClassWithDestructor && +# 2446| getEntryPoint(): [BlockStmt] { ... } +# 2448| getStmt(0): [ReturnStmt] return ... perf-regression.cpp: # 4| [CopyAssignmentOperator] Big& Big::operator=(Big const&) # 4| : @@ -18749,6 +20266,12 @@ smart_ptr.cpp: # 12| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) # 12| Type = [LValueReferenceType] unique_ptr> & # 12| ValueCategory = prvalue +# 12| getImplicitDestructorCall(0): [DestructorCall] call to ~unique_ptr +# 12| Type = [VoidType] void +# 12| ValueCategory = prvalue +# 12| getQualifier(): [ReuseExpr] reuse of temporary object +# 12| Type = [ClassTemplateInstantiation] unique_ptr> +# 12| ValueCategory = xvalue # 12| getArgument(0).getFullyConverted(): [TemporaryObjectExpr] temporary object # 12| Type = [ClassTemplateInstantiation] unique_ptr> # 12| ValueCategory = lvalue @@ -18798,6 +20321,12 @@ smart_ptr.cpp: # 19| Conversion = [GlvalueConversion] glvalue conversion # 19| Type = [SpecifiedType] const shared_ptr # 19| ValueCategory = lvalue +# 19| getImplicitDestructorCall(0): [DestructorCall] call to ~shared_ptr +# 19| Type = [VoidType] void +# 19| ValueCategory = prvalue +# 19| getQualifier(): [ReuseExpr] reuse of temporary object +# 19| Type = [ClassTemplateInstantiation] shared_ptr +# 19| ValueCategory = xvalue # 19| getArgument(0).getFullyConverted(): [TemporaryObjectExpr] temporary object # 19| Type = [ClassTemplateInstantiation] shared_ptr # 19| ValueCategory = lvalue @@ -18851,6 +20380,12 @@ smart_ptr.cpp: # 31| Conversion = [GlvalueConversion] glvalue conversion # 31| Type = [SpecifiedType] const shared_ptr # 31| ValueCategory = lvalue +# 31| getImplicitDestructorCall(0): [DestructorCall] call to ~shared_ptr +# 31| Type = [VoidType] void +# 31| ValueCategory = prvalue +# 31| getQualifier(): [ReuseExpr] reuse of temporary object +# 31| Type = [ClassTemplateInstantiation] shared_ptr +# 31| ValueCategory = xvalue # 31| getArgument(0).getFullyConverted(): [TemporaryObjectExpr] temporary object # 31| Type = [ClassTemplateInstantiation] shared_ptr # 31| ValueCategory = lvalue @@ -18874,6 +20409,12 @@ smart_ptr.cpp: # 35| Conversion = [GlvalueConversion] glvalue conversion # 35| Type = [SpecifiedType] const shared_ptr # 35| ValueCategory = lvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~shared_ptr +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [ReuseExpr] reuse of temporary object +# 35| Type = [ClassTemplateInstantiation] shared_ptr +# 35| ValueCategory = xvalue # 35| getArgument(0).getFullyConverted(): [TemporaryObjectExpr] temporary object # 35| Type = [ClassTemplateInstantiation] shared_ptr # 35| ValueCategory = lvalue @@ -18897,6 +20438,12 @@ smart_ptr.cpp: # 39| Conversion = [GlvalueConversion] glvalue conversion # 39| Type = [SpecifiedType] const shared_ptr> # 39| ValueCategory = lvalue +# 39| getImplicitDestructorCall(0): [DestructorCall] call to ~shared_ptr +# 39| Type = [VoidType] void +# 39| ValueCategory = prvalue +# 39| getQualifier(): [ReuseExpr] reuse of temporary object +# 39| Type = [ClassTemplateInstantiation] shared_ptr> +# 39| ValueCategory = xvalue # 39| getArgument(0).getFullyConverted(): [TemporaryObjectExpr] temporary object # 39| Type = [ClassTemplateInstantiation] shared_ptr> # 39| ValueCategory = lvalue @@ -18920,6 +20467,12 @@ smart_ptr.cpp: # 43| Conversion = [GlvalueConversion] glvalue conversion # 43| Type = [SpecifiedType] const shared_ptr> # 43| ValueCategory = lvalue +# 43| getImplicitDestructorCall(0): [DestructorCall] call to ~shared_ptr +# 43| Type = [VoidType] void +# 43| ValueCategory = prvalue +# 43| getQualifier(): [ReuseExpr] reuse of temporary object +# 43| Type = [ClassTemplateInstantiation] shared_ptr> +# 43| ValueCategory = xvalue # 43| getArgument(0).getFullyConverted(): [TemporaryObjectExpr] temporary object # 43| Type = [ClassTemplateInstantiation] shared_ptr> # 43| ValueCategory = lvalue @@ -18943,6 +20496,12 @@ smart_ptr.cpp: # 47| Conversion = [GlvalueConversion] glvalue conversion # 47| Type = [SpecifiedType] const shared_ptr> # 47| ValueCategory = lvalue +# 47| getImplicitDestructorCall(0): [DestructorCall] call to ~shared_ptr +# 47| Type = [VoidType] void +# 47| ValueCategory = prvalue +# 47| getQualifier(): [ReuseExpr] reuse of temporary object +# 47| Type = [ClassTemplateInstantiation] shared_ptr> +# 47| ValueCategory = xvalue # 47| getArgument(0).getFullyConverted(): [TemporaryObjectExpr] temporary object # 47| Type = [ClassTemplateInstantiation] shared_ptr> # 47| ValueCategory = lvalue diff --git a/cpp/ql/test/library-tests/ir/ir/aliased_ir.expected b/cpp/ql/test/library-tests/ir/ir/aliased_ir.expected index a5a09578750..39eccf0139f 100644 --- a/cpp/ql/test/library-tests/ir/ir/aliased_ir.expected +++ b/cpp/ql/test/library-tests/ir/ir/aliased_ir.expected @@ -891,24 +891,32 @@ destructors_for_temps.cpp: # 29| void temp_test3() # 29| Block 0 -# 29| v29_1(void) = EnterFunction : -# 29| m29_2(unknown) = AliasedDefinition : -# 29| m29_3(unknown) = InitializeNonLocal : -# 29| m29_4(unknown) = Chi : total:m29_2, partial:m29_3 -# 30| r30_1(glval) = VariableAddress[rs] : -# 30| r30_2(glval) = VariableAddress[#temp30:38] : -# 30| r30_3(glval) = FunctionAddress[returnValue] : -# 30| r30_4(ClassWithDestructor2) = Call[returnValue] : func:r30_3 -# 30| m30_5(unknown) = ^CallSideEffect : ~m29_4 -# 30| m30_6(unknown) = Chi : total:m29_4, partial:m30_5 -# 30| m30_7(ClassWithDestructor2) = Store[#temp30:38] : &:r30_2, r30_4 -# 30| r30_8(glval) = Convert : r30_2 -# 30| r30_9(ClassWithDestructor2 &) = CopyValue : r30_8 -# 30| m30_10(ClassWithDestructor2 &) = Store[rs] : &:r30_1, r30_9 -# 31| v31_1(void) = NoOp : -# 29| v29_5(void) = ReturnVoid : -# 29| v29_6(void) = AliasedUse : ~m30_6 -# 29| v29_7(void) = ExitFunction : +# 29| v29_1(void) = EnterFunction : +# 29| m29_2(unknown) = AliasedDefinition : +# 29| m29_3(unknown) = InitializeNonLocal : +# 29| m29_4(unknown) = Chi : total:m29_2, partial:m29_3 +# 30| r30_1(glval) = VariableAddress[rs] : +# 30| r30_2(glval) = VariableAddress[#temp30:38] : +# 30| r30_3(glval) = FunctionAddress[returnValue] : +# 30| r30_4(ClassWithDestructor2) = Call[returnValue] : func:r30_3 +# 30| m30_5(unknown) = ^CallSideEffect : ~m29_4 +# 30| m30_6(unknown) = Chi : total:m29_4, partial:m30_5 +# 30| m30_7(ClassWithDestructor2) = Store[#temp30:38] : &:r30_2, r30_4 +# 30| r30_8(glval) = Convert : r30_2 +# 30| r30_9(ClassWithDestructor2 &) = CopyValue : r30_8 +# 30| m30_10(ClassWithDestructor2 &) = Store[rs] : &:r30_1, r30_9 +# 31| v31_1(void) = NoOp : +# 31| r31_2(glval) = CopyValue : r30_2 +# 31| r31_3(glval) = FunctionAddress[~ClassWithDestructor2] : +# 31| v31_4(void) = Call[~ClassWithDestructor2] : func:r31_3, this:r31_2 +# 31| m31_5(unknown) = ^CallSideEffect : ~m30_6 +# 31| m31_6(unknown) = Chi : total:m30_6, partial:m31_5 +# 31| v31_7(void) = ^IndirectReadSideEffect[-1] : &:r31_2, m30_7 +# 31| m31_8(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r31_2 +# 31| m31_9(ClassWithDestructor2) = Chi : total:m30_7, partial:m31_8 +# 29| v29_5(void) = ReturnVoid : +# 29| v29_6(void) = AliasedUse : ~m31_6 +# 29| v29_7(void) = ExitFunction : # 33| void temp_test4() # 33| Block 0 @@ -935,16 +943,24 @@ destructors_for_temps.cpp: # 35| r35_9(ClassWithDestructor2 &) = CopyValue : r35_8 # 35| m35_10(ClassWithDestructor2 &) = Store[rs2] : &:r35_1, r35_9 # 36| v36_1(void) = NoOp : -# 36| r36_2(glval) = VariableAddress[c] : +# 36| r36_2(glval) = CopyValue : r35_2 # 36| r36_3(glval) = FunctionAddress[~ClassWithDestructor2] : # 36| v36_4(void) = Call[~ClassWithDestructor2] : func:r36_3, this:r36_2 # 36| m36_5(unknown) = ^CallSideEffect : ~m35_6 # 36| m36_6(unknown) = Chi : total:m35_6, partial:m36_5 -# 36| v36_7(void) = ^IndirectReadSideEffect[-1] : &:r36_2, m34_8 +# 36| v36_7(void) = ^IndirectReadSideEffect[-1] : &:r36_2, m35_7 # 36| m36_8(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r36_2 -# 36| m36_9(ClassWithDestructor2) = Chi : total:m34_8, partial:m36_8 +# 36| m36_9(ClassWithDestructor2) = Chi : total:m35_7, partial:m36_8 +# 36| r36_10(glval) = VariableAddress[c] : +# 36| r36_11(glval) = FunctionAddress[~ClassWithDestructor2] : +# 36| v36_12(void) = Call[~ClassWithDestructor2] : func:r36_11, this:r36_10 +# 36| m36_13(unknown) = ^CallSideEffect : ~m36_6 +# 36| m36_14(unknown) = Chi : total:m36_6, partial:m36_13 +# 36| v36_15(void) = ^IndirectReadSideEffect[-1] : &:r36_10, m34_8 +# 36| m36_16(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r36_10 +# 36| m36_17(ClassWithDestructor2) = Chi : total:m34_8, partial:m36_16 # 33| v33_5(void) = ReturnVoid : -# 33| v33_6(void) = AliasedUse : ~m36_6 +# 33| v33_6(void) = AliasedUse : ~m36_14 # 33| v33_7(void) = ExitFunction : # 38| void temp_test5(bool) @@ -6597,75 +6613,107 @@ ir.cpp: # 1015| void OperatorDelete() # 1015| Block 0 -# 1015| v1015_1(void) = EnterFunction : -# 1015| m1015_2(unknown) = AliasedDefinition : -# 1015| m1015_3(unknown) = InitializeNonLocal : -# 1015| m1015_4(unknown) = Chi : total:m1015_2, partial:m1015_3 -# 1016| r1016_1(glval) = FunctionAddress[operator delete] : -# 1016| r1016_2(int *) = Constant[0] : -# 1016| v1016_3(void) = Call[operator delete] : func:r1016_1, 0:r1016_2 -# 1016| m1016_4(unknown) = ^CallSideEffect : ~m1015_4 -# 1016| m1016_5(unknown) = Chi : total:m1015_4, partial:m1016_4 -# 1017| r1017_1(glval) = FunctionAddress[operator delete] : -# 1017| r1017_2(String *) = Constant[0] : -# 1017| v1017_3(void) = Call[operator delete] : func:r1017_1, 0:r1017_2 -# 1017| m1017_4(unknown) = ^CallSideEffect : ~m1016_5 -# 1017| m1017_5(unknown) = Chi : total:m1016_5, partial:m1017_4 -# 1018| r1018_1(glval) = FunctionAddress[operator delete] : -# 1018| r1018_2(SizedDealloc *) = Constant[0] : -# 1018| v1018_3(void) = Call[operator delete] : func:r1018_1, 0:r1018_2 -# 1018| m1018_4(unknown) = ^CallSideEffect : ~m1017_5 -# 1018| m1018_5(unknown) = Chi : total:m1017_5, partial:m1018_4 -# 1019| r1019_1(glval) = FunctionAddress[operator delete] : -# 1019| r1019_2(Overaligned *) = Constant[0] : -# 1019| v1019_3(void) = Call[operator delete] : func:r1019_1, 0:r1019_2 -# 1019| m1019_4(unknown) = ^CallSideEffect : ~m1018_5 -# 1019| m1019_5(unknown) = Chi : total:m1018_5, partial:m1019_4 -# 1020| r1020_1(glval) = VirtualDeleteFunctionAddress : -# 1020| r1020_2(PolymorphicBase *) = Constant[0] : -# 1020| v1020_3(void) = Call[?] : func:r1020_1, 0:r1020_2 -# 1020| m1020_4(unknown) = ^CallSideEffect : ~m1019_5 -# 1020| m1020_5(unknown) = Chi : total:m1019_5, partial:m1020_4 -# 1021| v1021_1(void) = NoOp : -# 1015| v1015_5(void) = ReturnVoid : -# 1015| v1015_6(void) = AliasedUse : ~m1020_5 -# 1015| v1015_7(void) = ExitFunction : +# 1015| v1015_1(void) = EnterFunction : +# 1015| m1015_2(unknown) = AliasedDefinition : +# 1015| m1015_3(unknown) = InitializeNonLocal : +# 1015| m1015_4(unknown) = Chi : total:m1015_2, partial:m1015_3 +# 1016| r1016_1(glval) = FunctionAddress[operator delete] : +# 1016| r1016_2(int *) = Constant[0] : +# 1016| v1016_3(void) = Call[operator delete] : func:r1016_1, 0:r1016_2 +# 1016| m1016_4(unknown) = ^CallSideEffect : ~m1015_4 +# 1016| m1016_5(unknown) = Chi : total:m1015_4, partial:m1016_4 +# 1017| r1017_1(String *) = Constant[0] : +# 1017| r1017_2(glval) = FunctionAddress[~String] : +# 1017| v1017_3(void) = Call[~String] : func:r1017_2 +# 1017| m1017_4(unknown) = ^CallSideEffect : ~m1016_5 +# 1017| m1017_5(unknown) = Chi : total:m1016_5, partial:m1017_4 +# 1017| v1017_6(void) = ^IndirectReadSideEffect[-1] : &:r1017_1, ~m1017_5 +# 1017| m1017_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r1017_1 +# 1017| m1017_8(unknown) = Chi : total:m1017_5, partial:m1017_7 +# 1017| r1017_9(glval) = FunctionAddress[operator delete] : +# 1017| r1017_10(String *) = CopyValue : r1017_1 +# 1017| v1017_11(void) = Call[operator delete] : func:r1017_9, 0:r1017_10 +# 1017| m1017_12(unknown) = ^CallSideEffect : ~m1017_8 +# 1017| m1017_13(unknown) = Chi : total:m1017_8, partial:m1017_12 +# 1018| r1018_1(glval) = FunctionAddress[operator delete] : +# 1018| r1018_2(SizedDealloc *) = Constant[0] : +# 1018| v1018_3(void) = Call[operator delete] : func:r1018_1, 0:r1018_2 +# 1018| m1018_4(unknown) = ^CallSideEffect : ~m1017_13 +# 1018| m1018_5(unknown) = Chi : total:m1017_13, partial:m1018_4 +# 1019| r1019_1(glval) = FunctionAddress[operator delete] : +# 1019| r1019_2(Overaligned *) = Constant[0] : +# 1019| v1019_3(void) = Call[operator delete] : func:r1019_1, 0:r1019_2 +# 1019| m1019_4(unknown) = ^CallSideEffect : ~m1018_5 +# 1019| m1019_5(unknown) = Chi : total:m1018_5, partial:m1019_4 +# 1020| r1020_1(PolymorphicBase *) = Constant[0] : +# 1020| r1020_2(glval) = FunctionAddress[~PolymorphicBase] : +# 1020| v1020_3(void) = Call[~PolymorphicBase] : func:r1020_2 +# 1020| m1020_4(unknown) = ^CallSideEffect : ~m1019_5 +# 1020| m1020_5(unknown) = Chi : total:m1019_5, partial:m1020_4 +# 1020| v1020_6(void) = ^IndirectReadSideEffect[-1] : &:r1020_1, ~m1020_5 +# 1020| m1020_7(PolymorphicBase) = ^IndirectMayWriteSideEffect[-1] : &:r1020_1 +# 1020| m1020_8(unknown) = Chi : total:m1020_5, partial:m1020_7 +# 1020| r1020_9(glval) = VirtualDeleteFunctionAddress : +# 1020| r1020_10(PolymorphicBase *) = CopyValue : r1020_1 +# 1020| v1020_11(void) = Call[?] : func:r1020_9, 0:r1020_10 +# 1020| m1020_12(unknown) = ^CallSideEffect : ~m1020_8 +# 1020| m1020_13(unknown) = Chi : total:m1020_8, partial:m1020_12 +# 1021| v1021_1(void) = NoOp : +# 1015| v1015_5(void) = ReturnVoid : +# 1015| v1015_6(void) = AliasedUse : ~m1020_13 +# 1015| v1015_7(void) = ExitFunction : # 1024| void OperatorDeleteArray() # 1024| Block 0 -# 1024| v1024_1(void) = EnterFunction : -# 1024| m1024_2(unknown) = AliasedDefinition : -# 1024| m1024_3(unknown) = InitializeNonLocal : -# 1024| m1024_4(unknown) = Chi : total:m1024_2, partial:m1024_3 -# 1025| r1025_1(glval) = FunctionAddress[operator delete[]] : -# 1025| r1025_2(int *) = Constant[0] : -# 1025| v1025_3(void) = Call[operator delete[]] : func:r1025_1, 0:r1025_2 -# 1025| m1025_4(unknown) = ^CallSideEffect : ~m1024_4 -# 1025| m1025_5(unknown) = Chi : total:m1024_4, partial:m1025_4 -# 1026| r1026_1(glval) = FunctionAddress[operator delete[]] : -# 1026| r1026_2(String *) = Constant[0] : -# 1026| v1026_3(void) = Call[operator delete[]] : func:r1026_1, 0:r1026_2 -# 1026| m1026_4(unknown) = ^CallSideEffect : ~m1025_5 -# 1026| m1026_5(unknown) = Chi : total:m1025_5, partial:m1026_4 -# 1027| r1027_1(glval) = FunctionAddress[operator delete[]] : -# 1027| r1027_2(SizedDealloc *) = Constant[0] : -# 1027| v1027_3(void) = Call[operator delete[]] : func:r1027_1, 0:r1027_2 -# 1027| m1027_4(unknown) = ^CallSideEffect : ~m1026_5 -# 1027| m1027_5(unknown) = Chi : total:m1026_5, partial:m1027_4 -# 1028| r1028_1(glval) = FunctionAddress[operator delete[]] : -# 1028| r1028_2(Overaligned *) = Constant[0] : -# 1028| v1028_3(void) = Call[operator delete[]] : func:r1028_1, 0:r1028_2 -# 1028| m1028_4(unknown) = ^CallSideEffect : ~m1027_5 -# 1028| m1028_5(unknown) = Chi : total:m1027_5, partial:m1028_4 -# 1029| r1029_1(glval) = FunctionAddress[operator delete[]] : -# 1029| r1029_2(PolymorphicBase *) = Constant[0] : -# 1029| v1029_3(void) = Call[operator delete[]] : func:r1029_1, 0:r1029_2 -# 1029| m1029_4(unknown) = ^CallSideEffect : ~m1028_5 -# 1029| m1029_5(unknown) = Chi : total:m1028_5, partial:m1029_4 -# 1030| v1030_1(void) = NoOp : -# 1024| v1024_5(void) = ReturnVoid : -# 1024| v1024_6(void) = AliasedUse : ~m1029_5 -# 1024| v1024_7(void) = ExitFunction : +# 1024| v1024_1(void) = EnterFunction : +# 1024| m1024_2(unknown) = AliasedDefinition : +# 1024| m1024_3(unknown) = InitializeNonLocal : +# 1024| m1024_4(unknown) = Chi : total:m1024_2, partial:m1024_3 +# 1025| r1025_1(glval) = FunctionAddress[operator delete[]] : +# 1025| r1025_2(int *) = Constant[0] : +# 1025| v1025_3(void) = Call[operator delete[]] : func:r1025_1, 0:r1025_2 +# 1025| m1025_4(unknown) = ^CallSideEffect : ~m1024_4 +# 1025| m1025_5(unknown) = Chi : total:m1024_4, partial:m1025_4 +# 1026| r1026_1(String *) = Constant[0] : +# 1026| r1026_2(glval) = FunctionAddress[~String] : +# 1026| v1026_3(void) = Call[~String] : func:r1026_2 +# 1026| m1026_4(unknown) = ^CallSideEffect : ~m1025_5 +# 1026| m1026_5(unknown) = Chi : total:m1025_5, partial:m1026_4 +# 1026| v1026_6(void) = ^IndirectReadSideEffect[-1] : &:r1026_1, ~m1026_5 +# 1026| m1026_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r1026_1 +# 1026| m1026_8(unknown) = Chi : total:m1026_5, partial:m1026_7 +# 1026| r1026_9(glval) = FunctionAddress[operator delete[]] : +# 1026| r1026_10(String *) = CopyValue : r1026_1 +# 1026| v1026_11(void) = Call[operator delete[]] : func:r1026_9, 0:r1026_10 +# 1026| m1026_12(unknown) = ^CallSideEffect : ~m1026_8 +# 1026| m1026_13(unknown) = Chi : total:m1026_8, partial:m1026_12 +# 1027| r1027_1(glval) = FunctionAddress[operator delete[]] : +# 1027| r1027_2(SizedDealloc *) = Constant[0] : +# 1027| v1027_3(void) = Call[operator delete[]] : func:r1027_1, 0:r1027_2 +# 1027| m1027_4(unknown) = ^CallSideEffect : ~m1026_13 +# 1027| m1027_5(unknown) = Chi : total:m1026_13, partial:m1027_4 +# 1028| r1028_1(glval) = FunctionAddress[operator delete[]] : +# 1028| r1028_2(Overaligned *) = Constant[0] : +# 1028| v1028_3(void) = Call[operator delete[]] : func:r1028_1, 0:r1028_2 +# 1028| m1028_4(unknown) = ^CallSideEffect : ~m1027_5 +# 1028| m1028_5(unknown) = Chi : total:m1027_5, partial:m1028_4 +# 1029| r1029_1(PolymorphicBase *) = Constant[0] : +# 1029| r1029_2(glval) = FunctionAddress[~PolymorphicBase] : +# 1029| v1029_3(void) = Call[~PolymorphicBase] : func:r1029_2 +# 1029| m1029_4(unknown) = ^CallSideEffect : ~m1028_5 +# 1029| m1029_5(unknown) = Chi : total:m1028_5, partial:m1029_4 +# 1029| v1029_6(void) = ^IndirectReadSideEffect[-1] : &:r1029_1, ~m1029_5 +# 1029| m1029_7(PolymorphicBase) = ^IndirectMayWriteSideEffect[-1] : &:r1029_1 +# 1029| m1029_8(unknown) = Chi : total:m1029_5, partial:m1029_7 +# 1029| r1029_9(glval) = FunctionAddress[operator delete[]] : +# 1029| r1029_10(PolymorphicBase *) = CopyValue : r1029_1 +# 1029| v1029_11(void) = Call[operator delete[]] : func:r1029_9, 0:r1029_10 +# 1029| m1029_12(unknown) = ^CallSideEffect : ~m1029_8 +# 1029| m1029_13(unknown) = Chi : total:m1029_8, partial:m1029_12 +# 1030| v1030_1(void) = NoOp : +# 1024| v1024_5(void) = ReturnVoid : +# 1024| v1024_6(void) = AliasedUse : ~m1029_13 +# 1024| v1024_7(void) = ExitFunction : # 1034| void EmptyStructInit() # 1034| Block 0 @@ -8882,16 +8930,24 @@ ir.cpp: # 1425| m1425_5(unknown) = Chi : total:m1423_11, partial:m1425_4 # 1425| m1425_6(String) = Store[#temp1425:5] : &:r1425_1, r1425_3 # 1426| v1426_1(void) = NoOp : -# 1426| r1426_2(glval) = VariableAddress[s] : +# 1426| r1426_2(glval) = CopyValue : r1416_2 # 1426| r1426_3(glval) = FunctionAddress[~String] : # 1426| v1426_4(void) = Call[~String] : func:r1426_3, this:r1426_2 # 1426| m1426_5(unknown) = ^CallSideEffect : ~m1425_5 # 1426| m1426_6(unknown) = Chi : total:m1425_5, partial:m1426_5 -# 1426| v1426_7(void) = ^IndirectReadSideEffect[-1] : &:r1426_2, m1415_6 +# 1426| v1426_7(void) = ^IndirectReadSideEffect[-1] : &:r1426_2, m1416_7 # 1426| m1426_8(String) = ^IndirectMayWriteSideEffect[-1] : &:r1426_2 -# 1426| m1426_9(String) = Chi : total:m1415_6, partial:m1426_8 +# 1426| m1426_9(String) = Chi : total:m1416_7, partial:m1426_8 +# 1426| r1426_10(glval) = VariableAddress[s] : +# 1426| r1426_11(glval) = FunctionAddress[~String] : +# 1426| v1426_12(void) = Call[~String] : func:r1426_11, this:r1426_10 +# 1426| m1426_13(unknown) = ^CallSideEffect : ~m1426_6 +# 1426| m1426_14(unknown) = Chi : total:m1426_6, partial:m1426_13 +# 1426| v1426_15(void) = ^IndirectReadSideEffect[-1] : &:r1426_10, m1415_6 +# 1426| m1426_16(String) = ^IndirectMayWriteSideEffect[-1] : &:r1426_10 +# 1426| m1426_17(String) = Chi : total:m1415_6, partial:m1426_16 # 1414| v1414_5(void) = ReturnVoid : -# 1414| v1414_6(void) = AliasedUse : ~m1426_6 +# 1414| v1414_6(void) = AliasedUse : ~m1426_14 # 1414| v1414_7(void) = ExitFunction : # 1428| void temporary_destructor_only() @@ -8973,16 +9029,24 @@ ir.cpp: # 1438| v1438_7(void) = ^IndirectReadSideEffect[-1] : &:r1438_2, m1431_2 # 1438| m1438_8(destructor_only) = ^IndirectMayWriteSideEffect[-1] : &:r1438_2 # 1438| m1438_9(destructor_only) = Chi : total:m1431_2, partial:m1438_8 -# 1438| r1438_10(glval) = VariableAddress[d] : +# 1438| r1438_10(glval) = CopyValue : r1430_2 # 1438| r1438_11(glval) = FunctionAddress[~destructor_only] : # 1438| v1438_12(void) = Call[~destructor_only] : func:r1438_11, this:r1438_10 # 1438| m1438_13(unknown) = ^CallSideEffect : ~m1438_6 # 1438| m1438_14(unknown) = Chi : total:m1438_6, partial:m1438_13 -# 1438| v1438_15(void) = ^IndirectReadSideEffect[-1] : &:r1438_10, m1429_6 +# 1438| v1438_15(void) = ^IndirectReadSideEffect[-1] : &:r1438_10, m1430_7 # 1438| m1438_16(destructor_only) = ^IndirectMayWriteSideEffect[-1] : &:r1438_10 -# 1438| m1438_17(destructor_only) = Chi : total:m1429_6, partial:m1438_16 +# 1438| m1438_17(destructor_only) = Chi : total:m1430_7, partial:m1438_16 +# 1438| r1438_18(glval) = VariableAddress[d] : +# 1438| r1438_19(glval) = FunctionAddress[~destructor_only] : +# 1438| v1438_20(void) = Call[~destructor_only] : func:r1438_19, this:r1438_18 +# 1438| m1438_21(unknown) = ^CallSideEffect : ~m1438_14 +# 1438| m1438_22(unknown) = Chi : total:m1438_14, partial:m1438_21 +# 1438| v1438_23(void) = ^IndirectReadSideEffect[-1] : &:r1438_18, m1429_6 +# 1438| m1438_24(destructor_only) = ^IndirectMayWriteSideEffect[-1] : &:r1438_18 +# 1438| m1438_25(destructor_only) = Chi : total:m1429_6, partial:m1438_24 # 1428| v1428_5(void) = ReturnVoid : -# 1428| v1428_6(void) = AliasedUse : ~m1438_14 +# 1428| v1428_6(void) = AliasedUse : ~m1438_22 # 1428| v1428_7(void) = ExitFunction : # 1440| void temporary_copy_constructor() @@ -11560,2313 +11624,1991 @@ ir.cpp: # 1932| v1932_6(void) = AliasedUse : ~m1934_5 # 1932| v1932_7(void) = ExitFunction : -# 1938| char global_template -# 1938| Block 0 -# 1938| v1938_1(void) = EnterFunction : -# 1938| m1938_2(unknown) = AliasedDefinition : -# 1938| r1938_3(glval) = VariableAddress[global_template] : -# 1938| r1938_4(char) = Constant[42] : -# 1938| m1938_5(char) = Store[global_template] : &:r1938_3, r1938_4 -# 1938| m1938_6(unknown) = Chi : total:m1938_2, partial:m1938_5 -# 1938| v1938_7(void) = ReturnVoid : -# 1938| v1938_8(void) = AliasedUse : ~m1938_6 -# 1938| v1938_9(void) = ExitFunction : +# 1939| int missing_declaration_entries::Bar3::two_more_missing_variable_declaration_entries() +# 1939| Block 0 +# 1939| v1939_1(void) = EnterFunction : +# 1939| m1939_2(unknown) = AliasedDefinition : +# 1939| m1939_3(unknown) = InitializeNonLocal : +# 1939| m1939_4(unknown) = Chi : total:m1939_2, partial:m1939_3 +# 1939| r1939_5(glval) = VariableAddress[#this] : +# 1939| m1939_6(glval>) = InitializeParameter[#this] : &:r1939_5 +# 1939| r1939_7(glval>) = Load[#this] : &:r1939_5, m1939_6 +# 1939| m1939_8(Bar3) = InitializeIndirection[#this] : &:r1939_7 +# 1942| r1942_1(glval) = VariableAddress[#return] : +# 1942| r1942_2(glval) = VariableAddress[g] : +# 1942| r1942_3(int) = Load[g] : &:r1942_2, ~m1939_3 +# 1942| m1942_4(int) = Store[#return] : &:r1942_1, r1942_3 +# 1939| v1939_9(void) = ReturnIndirection[#this] : &:r1939_7, m1939_8 +# 1939| r1939_10(glval) = VariableAddress[#return] : +# 1939| v1939_11(void) = ReturnValue : &:r1939_10, m1942_4 +# 1939| v1939_12(void) = AliasedUse : m1939_3 +# 1939| v1939_13(void) = ExitFunction : -# 1938| int global_template -# 1938| Block 0 -# 1938| v1938_1(void) = EnterFunction : -# 1938| m1938_2(unknown) = AliasedDefinition : -# 1938| r1938_3(glval) = VariableAddress[global_template] : -# 1938| r1938_4(int) = Constant[42] : -# 1938| m1938_5(int) = Store[global_template] : &:r1938_3, r1938_4 -# 1938| m1938_6(unknown) = Chi : total:m1938_2, partial:m1938_5 -# 1938| v1938_7(void) = ReturnVoid : -# 1938| v1938_8(void) = AliasedUse : ~m1938_6 -# 1938| v1938_9(void) = ExitFunction : +# 1946| void missing_declaration_entries::test3() +# 1946| Block 0 +# 1946| v1946_1(void) = EnterFunction : +# 1946| m1946_2(unknown) = AliasedDefinition : +# 1946| m1946_3(unknown) = InitializeNonLocal : +# 1946| m1946_4(unknown) = Chi : total:m1946_2, partial:m1946_3 +# 1947| r1947_1(glval>) = VariableAddress[b] : +# 1947| m1947_2(Bar3) = Uninitialized[b] : &:r1947_1 +# 1948| r1948_1(glval>) = VariableAddress[b] : +# 1948| r1948_2(glval) = FunctionAddress[two_more_missing_variable_declaration_entries] : +# 1948| r1948_3(int) = Call[two_more_missing_variable_declaration_entries] : func:r1948_2, this:r1948_1 +# 1948| m1948_4(unknown) = ^CallSideEffect : ~m1946_4 +# 1948| m1948_5(unknown) = Chi : total:m1946_4, partial:m1948_4 +# 1948| v1948_6(void) = ^IndirectReadSideEffect[-1] : &:r1948_1, m1947_2 +# 1948| m1948_7(Bar3) = ^IndirectMayWriteSideEffect[-1] : &:r1948_1 +# 1948| m1948_8(Bar3) = Chi : total:m1947_2, partial:m1948_7 +# 1949| v1949_1(void) = NoOp : +# 1946| v1946_5(void) = ReturnVoid : +# 1946| v1946_6(void) = AliasedUse : ~m1948_5 +# 1946| v1946_7(void) = ExitFunction : -# 1940| int test_global_template_int() -# 1940| Block 0 -# 1940| v1940_1(void) = EnterFunction : -# 1940| m1940_2(unknown) = AliasedDefinition : -# 1940| m1940_3(unknown) = InitializeNonLocal : -# 1940| m1940_4(unknown) = Chi : total:m1940_2, partial:m1940_3 -# 1941| r1941_1(glval) = VariableAddress[local_int] : -# 1941| r1941_2(glval) = VariableAddress[global_template] : -# 1941| r1941_3(int) = Load[global_template] : &:r1941_2, ~m1940_3 -# 1941| m1941_4(int) = Store[local_int] : &:r1941_1, r1941_3 -# 1942| r1942_1(glval) = VariableAddress[local_char] : -# 1942| r1942_2(glval) = VariableAddress[global_template] : -# 1942| r1942_3(char) = Load[global_template] : &:r1942_2, ~m1940_3 -# 1942| m1942_4(char) = Store[local_char] : &:r1942_1, r1942_3 -# 1943| r1943_1(glval) = VariableAddress[#return] : -# 1943| r1943_2(glval) = VariableAddress[local_int] : -# 1943| r1943_3(int) = Load[local_int] : &:r1943_2, m1941_4 -# 1943| r1943_4(glval) = VariableAddress[local_char] : -# 1943| r1943_5(char) = Load[local_char] : &:r1943_4, m1942_4 -# 1943| r1943_6(int) = Convert : r1943_5 -# 1943| r1943_7(int) = Add : r1943_3, r1943_6 -# 1943| m1943_8(int) = Store[#return] : &:r1943_1, r1943_7 -# 1940| r1940_5(glval) = VariableAddress[#return] : -# 1940| v1940_6(void) = ReturnValue : &:r1940_5, m1943_8 -# 1940| v1940_7(void) = AliasedUse : m1940_3 -# 1940| v1940_8(void) = ExitFunction : +# 1952| char global_template +# 1952| Block 0 +# 1952| v1952_1(void) = EnterFunction : +# 1952| m1952_2(unknown) = AliasedDefinition : +# 1952| r1952_3(glval) = VariableAddress[global_template] : +# 1952| r1952_4(char) = Constant[42] : +# 1952| m1952_5(char) = Store[global_template] : &:r1952_3, r1952_4 +# 1952| m1952_6(unknown) = Chi : total:m1952_2, partial:m1952_5 +# 1952| v1952_7(void) = ReturnVoid : +# 1952| v1952_8(void) = AliasedUse : ~m1952_6 +# 1952| v1952_9(void) = ExitFunction : -# 1948| int noreturnTest(int) -# 1948| Block 0 -# 1948| v1948_1(void) = EnterFunction : -# 1948| m1948_2(unknown) = AliasedDefinition : -# 1948| m1948_3(unknown) = InitializeNonLocal : -# 1948| m1948_4(unknown) = Chi : total:m1948_2, partial:m1948_3 -# 1948| r1948_5(glval) = VariableAddress[x] : -# 1948| m1948_6(int) = InitializeParameter[x] : &:r1948_5 -# 1949| r1949_1(glval) = VariableAddress[x] : -# 1949| r1949_2(int) = Load[x] : &:r1949_1, m1948_6 -# 1949| r1949_3(int) = Constant[10] : -# 1949| r1949_4(bool) = CompareLT : r1949_2, r1949_3 -# 1949| v1949_5(void) = ConditionalBranch : r1949_4 +# 1952| int global_template +# 1952| Block 0 +# 1952| v1952_1(void) = EnterFunction : +# 1952| m1952_2(unknown) = AliasedDefinition : +# 1952| r1952_3(glval) = VariableAddress[global_template] : +# 1952| r1952_4(int) = Constant[42] : +# 1952| m1952_5(int) = Store[global_template] : &:r1952_3, r1952_4 +# 1952| m1952_6(unknown) = Chi : total:m1952_2, partial:m1952_5 +# 1952| v1952_7(void) = ReturnVoid : +# 1952| v1952_8(void) = AliasedUse : ~m1952_6 +# 1952| v1952_9(void) = ExitFunction : + +# 1954| int test_global_template_int() +# 1954| Block 0 +# 1954| v1954_1(void) = EnterFunction : +# 1954| m1954_2(unknown) = AliasedDefinition : +# 1954| m1954_3(unknown) = InitializeNonLocal : +# 1954| m1954_4(unknown) = Chi : total:m1954_2, partial:m1954_3 +# 1955| r1955_1(glval) = VariableAddress[local_int] : +# 1955| r1955_2(glval) = VariableAddress[global_template] : +# 1955| r1955_3(int) = Load[global_template] : &:r1955_2, ~m1954_3 +# 1955| m1955_4(int) = Store[local_int] : &:r1955_1, r1955_3 +# 1956| r1956_1(glval) = VariableAddress[local_char] : +# 1956| r1956_2(glval) = VariableAddress[global_template] : +# 1956| r1956_3(char) = Load[global_template] : &:r1956_2, ~m1954_3 +# 1956| m1956_4(char) = Store[local_char] : &:r1956_1, r1956_3 +# 1957| r1957_1(glval) = VariableAddress[#return] : +# 1957| r1957_2(glval) = VariableAddress[local_int] : +# 1957| r1957_3(int) = Load[local_int] : &:r1957_2, m1955_4 +# 1957| r1957_4(glval) = VariableAddress[local_char] : +# 1957| r1957_5(char) = Load[local_char] : &:r1957_4, m1956_4 +# 1957| r1957_6(int) = Convert : r1957_5 +# 1957| r1957_7(int) = Add : r1957_3, r1957_6 +# 1957| m1957_8(int) = Store[#return] : &:r1957_1, r1957_7 +# 1954| r1954_5(glval) = VariableAddress[#return] : +# 1954| v1954_6(void) = ReturnValue : &:r1954_5, m1957_8 +# 1954| v1954_7(void) = AliasedUse : m1954_3 +# 1954| v1954_8(void) = ExitFunction : + +# 1962| int noreturnTest(int) +# 1962| Block 0 +# 1962| v1962_1(void) = EnterFunction : +# 1962| m1962_2(unknown) = AliasedDefinition : +# 1962| m1962_3(unknown) = InitializeNonLocal : +# 1962| m1962_4(unknown) = Chi : total:m1962_2, partial:m1962_3 +# 1962| r1962_5(glval) = VariableAddress[x] : +# 1962| m1962_6(int) = InitializeParameter[x] : &:r1962_5 +# 1963| r1963_1(glval) = VariableAddress[x] : +# 1963| r1963_2(int) = Load[x] : &:r1963_1, m1962_6 +# 1963| r1963_3(int) = Constant[10] : +# 1963| r1963_4(bool) = CompareLT : r1963_2, r1963_3 +# 1963| v1963_5(void) = ConditionalBranch : r1963_4 #-----| False -> Block 2 #-----| True -> Block 1 -# 1950| Block 1 -# 1950| r1950_1(glval) = VariableAddress[#return] : -# 1950| r1950_2(glval) = VariableAddress[x] : -# 1950| r1950_3(int) = Load[x] : &:r1950_2, m1948_6 -# 1950| m1950_4(int) = Store[#return] : &:r1950_1, r1950_3 -# 1948| r1948_7(glval) = VariableAddress[#return] : -# 1948| v1948_8(void) = ReturnValue : &:r1948_7, m1950_4 -# 1948| v1948_9(void) = AliasedUse : m1948_3 -# 1948| v1948_10(void) = ExitFunction : - -# 1952| Block 2 -# 1952| r1952_1(glval) = FunctionAddress[noreturnFunc] : -# 1952| v1952_2(void) = Call[noreturnFunc] : func:r1952_1 -# 1952| m1952_3(unknown) = ^CallSideEffect : ~m1948_4 -# 1952| m1952_4(unknown) = Chi : total:m1948_4, partial:m1952_3 -# 1948| v1948_11(void) = Unreached : - -# 1956| int noreturnTest2(int) -# 1956| Block 0 -# 1956| v1956_1(void) = EnterFunction : -# 1956| m1956_2(unknown) = AliasedDefinition : -# 1956| m1956_3(unknown) = InitializeNonLocal : -# 1956| m1956_4(unknown) = Chi : total:m1956_2, partial:m1956_3 -# 1956| r1956_5(glval) = VariableAddress[x] : -# 1956| m1956_6(int) = InitializeParameter[x] : &:r1956_5 -# 1957| r1957_1(glval) = VariableAddress[x] : -# 1957| r1957_2(int) = Load[x] : &:r1957_1, m1956_6 -# 1957| r1957_3(int) = Constant[10] : -# 1957| r1957_4(bool) = CompareLT : r1957_2, r1957_3 -# 1957| v1957_5(void) = ConditionalBranch : r1957_4 -#-----| False -> Block 2 -#-----| True -> Block 1 - -# 1958| Block 1 -# 1958| r1958_1(glval) = FunctionAddress[noreturnFunc] : -# 1958| v1958_2(void) = Call[noreturnFunc] : func:r1958_1 -# 1958| m1958_3(unknown) = ^CallSideEffect : ~m1956_4 -# 1958| m1958_4(unknown) = Chi : total:m1956_4, partial:m1958_3 -# 1956| v1956_7(void) = Unreached : - -# 1960| Block 2 -# 1960| r1960_1(glval) = VariableAddress[#return] : -# 1960| r1960_2(glval) = VariableAddress[x] : -# 1960| r1960_3(int) = Load[x] : &:r1960_2, m1956_6 -# 1960| m1960_4(int) = Store[#return] : &:r1960_1, r1960_3 -# 1956| r1956_8(glval) = VariableAddress[#return] : -# 1956| v1956_9(void) = ReturnValue : &:r1956_8, m1960_4 -# 1956| v1956_10(void) = AliasedUse : m1956_3 -# 1956| v1956_11(void) = ExitFunction : - -# 1963| int static_function(int) -# 1963| Block 0 -# 1963| v1963_1(void) = EnterFunction : -# 1963| m1963_2(unknown) = AliasedDefinition : -# 1963| m1963_3(unknown) = InitializeNonLocal : -# 1963| m1963_4(unknown) = Chi : total:m1963_2, partial:m1963_3 -# 1963| r1963_5(glval) = VariableAddress[x] : -# 1963| m1963_6(int) = InitializeParameter[x] : &:r1963_5 +# 1964| Block 1 # 1964| r1964_1(glval) = VariableAddress[#return] : # 1964| r1964_2(glval) = VariableAddress[x] : -# 1964| r1964_3(int) = Load[x] : &:r1964_2, m1963_6 +# 1964| r1964_3(int) = Load[x] : &:r1964_2, m1962_6 # 1964| m1964_4(int) = Store[#return] : &:r1964_1, r1964_3 -# 1963| r1963_7(glval) = VariableAddress[#return] : -# 1963| v1963_8(void) = ReturnValue : &:r1963_7, m1964_4 -# 1963| v1963_9(void) = AliasedUse : m1963_3 -# 1963| v1963_10(void) = ExitFunction : +# 1962| r1962_7(glval) = VariableAddress[#return] : +# 1962| v1962_8(void) = ReturnValue : &:r1962_7, m1964_4 +# 1962| v1962_9(void) = AliasedUse : m1962_3 +# 1962| v1962_10(void) = ExitFunction : -# 1967| void test_static_functions_with_assignments() -# 1967| Block 0 -# 1967| v1967_1(void) = EnterFunction : -# 1967| m1967_2(unknown) = AliasedDefinition : -# 1967| m1967_3(unknown) = InitializeNonLocal : -# 1967| m1967_4(unknown) = Chi : total:m1967_2, partial:m1967_3 -# 1968| r1968_1(glval) = VariableAddress[c] : -# 1968| m1968_2(C) = Uninitialized[c] : &:r1968_1 -# 1968| r1968_3(glval) = FunctionAddress[C] : -# 1968| v1968_4(void) = Call[C] : func:r1968_3, this:r1968_1 -# 1968| m1968_5(unknown) = ^CallSideEffect : ~m1967_4 -# 1968| m1968_6(unknown) = Chi : total:m1967_4, partial:m1968_5 -# 1968| m1968_7(C) = ^IndirectMayWriteSideEffect[-1] : &:r1968_1 -# 1968| m1968_8(C) = Chi : total:m1968_2, partial:m1968_7 -# 1969| r1969_1(glval) = VariableAddress[x] : -# 1969| m1969_2(int) = Uninitialized[x] : &:r1969_1 -# 1970| r1970_1(glval) = VariableAddress[c] : -# 1970| r1970_2(glval) = FunctionAddress[StaticMemberFunction] : -# 1970| r1970_3(int) = Constant[10] : -# 1970| r1970_4(int) = Call[StaticMemberFunction] : func:r1970_2, 0:r1970_3 -# 1970| m1970_5(unknown) = ^CallSideEffect : ~m1968_6 -# 1970| m1970_6(unknown) = Chi : total:m1968_6, partial:m1970_5 -# 1970| r1970_7(glval) = VariableAddress[x] : -# 1970| m1970_8(int) = Store[x] : &:r1970_7, r1970_4 -# 1971| r1971_1(glval) = VariableAddress[y] : -# 1971| m1971_2(int) = Uninitialized[y] : &:r1971_1 -# 1972| r1972_1(glval) = FunctionAddress[StaticMemberFunction] : -# 1972| r1972_2(int) = Constant[10] : -# 1972| r1972_3(int) = Call[StaticMemberFunction] : func:r1972_1, 0:r1972_2 -# 1972| m1972_4(unknown) = ^CallSideEffect : ~m1970_6 -# 1972| m1972_5(unknown) = Chi : total:m1970_6, partial:m1972_4 -# 1972| r1972_6(glval) = VariableAddress[y] : -# 1972| m1972_7(int) = Store[y] : &:r1972_6, r1972_3 -# 1973| r1973_1(glval) = VariableAddress[z] : -# 1973| m1973_2(int) = Uninitialized[z] : &:r1973_1 -# 1974| r1974_1(glval) = FunctionAddress[static_function] : -# 1974| r1974_2(int) = Constant[10] : -# 1974| r1974_3(int) = Call[static_function] : func:r1974_1, 0:r1974_2 -# 1974| m1974_4(unknown) = ^CallSideEffect : ~m1972_5 -# 1974| m1974_5(unknown) = Chi : total:m1972_5, partial:m1974_4 -# 1974| r1974_6(glval) = VariableAddress[z] : -# 1974| m1974_7(int) = Store[z] : &:r1974_6, r1974_3 -# 1975| v1975_1(void) = NoOp : -# 1975| r1975_2(glval) = VariableAddress[c] : -# 1975| r1975_3(glval) = FunctionAddress[~C] : -# 1975| v1975_4(void) = Call[~C] : func:r1975_3, this:r1975_2 -# 1975| m1975_5(unknown) = ^CallSideEffect : ~m1974_5 -# 1975| m1975_6(unknown) = Chi : total:m1974_5, partial:m1975_5 -# 1975| v1975_7(void) = ^IndirectReadSideEffect[-1] : &:r1975_2, m1968_8 -# 1975| m1975_8(C) = ^IndirectMayWriteSideEffect[-1] : &:r1975_2 -# 1975| m1975_9(C) = Chi : total:m1968_8, partial:m1975_8 -# 1967| v1967_5(void) = ReturnVoid : -# 1967| v1967_6(void) = AliasedUse : ~m1975_6 -# 1967| v1967_7(void) = ExitFunction : +# 1966| Block 2 +# 1966| r1966_1(glval) = FunctionAddress[noreturnFunc] : +# 1966| v1966_2(void) = Call[noreturnFunc] : func:r1966_1 +# 1966| m1966_3(unknown) = ^CallSideEffect : ~m1962_4 +# 1966| m1966_4(unknown) = Chi : total:m1962_4, partial:m1966_3 +# 1962| v1962_11(void) = Unreached : -# 1977| void test_double_assign() +# 1970| int noreturnTest2(int) +# 1970| Block 0 +# 1970| v1970_1(void) = EnterFunction : +# 1970| m1970_2(unknown) = AliasedDefinition : +# 1970| m1970_3(unknown) = InitializeNonLocal : +# 1970| m1970_4(unknown) = Chi : total:m1970_2, partial:m1970_3 +# 1970| r1970_5(glval) = VariableAddress[x] : +# 1970| m1970_6(int) = InitializeParameter[x] : &:r1970_5 +# 1971| r1971_1(glval) = VariableAddress[x] : +# 1971| r1971_2(int) = Load[x] : &:r1971_1, m1970_6 +# 1971| r1971_3(int) = Constant[10] : +# 1971| r1971_4(bool) = CompareLT : r1971_2, r1971_3 +# 1971| v1971_5(void) = ConditionalBranch : r1971_4 +#-----| False -> Block 2 +#-----| True -> Block 1 + +# 1972| Block 1 +# 1972| r1972_1(glval) = FunctionAddress[noreturnFunc] : +# 1972| v1972_2(void) = Call[noreturnFunc] : func:r1972_1 +# 1972| m1972_3(unknown) = ^CallSideEffect : ~m1970_4 +# 1972| m1972_4(unknown) = Chi : total:m1970_4, partial:m1972_3 +# 1970| v1970_7(void) = Unreached : + +# 1974| Block 2 +# 1974| r1974_1(glval) = VariableAddress[#return] : +# 1974| r1974_2(glval) = VariableAddress[x] : +# 1974| r1974_3(int) = Load[x] : &:r1974_2, m1970_6 +# 1974| m1974_4(int) = Store[#return] : &:r1974_1, r1974_3 +# 1970| r1970_8(glval) = VariableAddress[#return] : +# 1970| v1970_9(void) = ReturnValue : &:r1970_8, m1974_4 +# 1970| v1970_10(void) = AliasedUse : m1970_3 +# 1970| v1970_11(void) = ExitFunction : + +# 1977| int static_function(int) # 1977| Block 0 -# 1977| v1977_1(void) = EnterFunction : -# 1977| m1977_2(unknown) = AliasedDefinition : -# 1977| m1977_3(unknown) = InitializeNonLocal : -# 1977| m1977_4(unknown) = Chi : total:m1977_2, partial:m1977_3 -# 1978| r1978_1(glval) = VariableAddress[i] : -# 1978| m1978_2(int) = Uninitialized[i] : &:r1978_1 -# 1978| r1978_3(glval) = VariableAddress[j] : -# 1978| m1978_4(int) = Uninitialized[j] : &:r1978_3 -# 1979| r1979_1(int) = Constant[40] : -# 1979| r1979_2(glval) = VariableAddress[j] : -# 1979| m1979_3(int) = Store[j] : &:r1979_2, r1979_1 -# 1979| r1979_4(int) = Load[j] : &:r1979_2, m1979_3 -# 1979| r1979_5(glval) = VariableAddress[i] : -# 1979| m1979_6(int) = Store[i] : &:r1979_5, r1979_4 -# 1980| v1980_1(void) = NoOp : -# 1977| v1977_5(void) = ReturnVoid : -# 1977| v1977_6(void) = AliasedUse : m1977_3 -# 1977| v1977_7(void) = ExitFunction : +# 1977| v1977_1(void) = EnterFunction : +# 1977| m1977_2(unknown) = AliasedDefinition : +# 1977| m1977_3(unknown) = InitializeNonLocal : +# 1977| m1977_4(unknown) = Chi : total:m1977_2, partial:m1977_3 +# 1977| r1977_5(glval) = VariableAddress[x] : +# 1977| m1977_6(int) = InitializeParameter[x] : &:r1977_5 +# 1978| r1978_1(glval) = VariableAddress[#return] : +# 1978| r1978_2(glval) = VariableAddress[x] : +# 1978| r1978_3(int) = Load[x] : &:r1978_2, m1977_6 +# 1978| m1978_4(int) = Store[#return] : &:r1978_1, r1978_3 +# 1977| r1977_7(glval) = VariableAddress[#return] : +# 1977| v1977_8(void) = ReturnValue : &:r1977_7, m1978_4 +# 1977| v1977_9(void) = AliasedUse : m1977_3 +# 1977| v1977_10(void) = ExitFunction : -# 1982| void test_assign_with_assign_operation() -# 1982| Block 0 -# 1982| v1982_1(void) = EnterFunction : -# 1982| m1982_2(unknown) = AliasedDefinition : -# 1982| m1982_3(unknown) = InitializeNonLocal : -# 1982| m1982_4(unknown) = Chi : total:m1982_2, partial:m1982_3 -# 1983| r1983_1(glval) = VariableAddress[i] : -# 1983| m1983_2(int) = Uninitialized[i] : &:r1983_1 -# 1983| r1983_3(glval) = VariableAddress[j] : -# 1983| r1983_4(int) = Constant[0] : -# 1983| m1983_5(int) = Store[j] : &:r1983_3, r1983_4 -# 1984| r1984_1(int) = Constant[40] : -# 1984| r1984_2(glval) = VariableAddress[j] : -# 1984| r1984_3(int) = Load[j] : &:r1984_2, m1983_5 -# 1984| r1984_4(int) = Add : r1984_3, r1984_1 -# 1984| m1984_5(int) = Store[j] : &:r1984_2, r1984_4 -# 1984| r1984_6(int) = Load[j] : &:r1984_2, m1984_5 -# 1984| r1984_7(glval) = VariableAddress[i] : -# 1984| m1984_8(int) = Store[i] : &:r1984_7, r1984_6 -# 1985| v1985_1(void) = NoOp : -# 1982| v1982_5(void) = ReturnVoid : -# 1982| v1982_6(void) = AliasedUse : m1982_3 -# 1982| v1982_7(void) = ExitFunction : +# 1981| void test_static_functions_with_assignments() +# 1981| Block 0 +# 1981| v1981_1(void) = EnterFunction : +# 1981| m1981_2(unknown) = AliasedDefinition : +# 1981| m1981_3(unknown) = InitializeNonLocal : +# 1981| m1981_4(unknown) = Chi : total:m1981_2, partial:m1981_3 +# 1982| r1982_1(glval) = VariableAddress[c] : +# 1982| m1982_2(C) = Uninitialized[c] : &:r1982_1 +# 1982| r1982_3(glval) = FunctionAddress[C] : +# 1982| v1982_4(void) = Call[C] : func:r1982_3, this:r1982_1 +# 1982| m1982_5(unknown) = ^CallSideEffect : ~m1981_4 +# 1982| m1982_6(unknown) = Chi : total:m1981_4, partial:m1982_5 +# 1982| m1982_7(C) = ^IndirectMayWriteSideEffect[-1] : &:r1982_1 +# 1982| m1982_8(C) = Chi : total:m1982_2, partial:m1982_7 +# 1983| r1983_1(glval) = VariableAddress[x] : +# 1983| m1983_2(int) = Uninitialized[x] : &:r1983_1 +# 1984| r1984_1(glval) = VariableAddress[c] : +# 1984| r1984_2(glval) = FunctionAddress[StaticMemberFunction] : +# 1984| r1984_3(int) = Constant[10] : +# 1984| r1984_4(int) = Call[StaticMemberFunction] : func:r1984_2, 0:r1984_3 +# 1984| m1984_5(unknown) = ^CallSideEffect : ~m1982_6 +# 1984| m1984_6(unknown) = Chi : total:m1982_6, partial:m1984_5 +# 1984| r1984_7(glval) = VariableAddress[x] : +# 1984| m1984_8(int) = Store[x] : &:r1984_7, r1984_4 +# 1985| r1985_1(glval) = VariableAddress[y] : +# 1985| m1985_2(int) = Uninitialized[y] : &:r1985_1 +# 1986| r1986_1(glval) = FunctionAddress[StaticMemberFunction] : +# 1986| r1986_2(int) = Constant[10] : +# 1986| r1986_3(int) = Call[StaticMemberFunction] : func:r1986_1, 0:r1986_2 +# 1986| m1986_4(unknown) = ^CallSideEffect : ~m1984_6 +# 1986| m1986_5(unknown) = Chi : total:m1984_6, partial:m1986_4 +# 1986| r1986_6(glval) = VariableAddress[y] : +# 1986| m1986_7(int) = Store[y] : &:r1986_6, r1986_3 +# 1987| r1987_1(glval) = VariableAddress[z] : +# 1987| m1987_2(int) = Uninitialized[z] : &:r1987_1 +# 1988| r1988_1(glval) = FunctionAddress[static_function] : +# 1988| r1988_2(int) = Constant[10] : +# 1988| r1988_3(int) = Call[static_function] : func:r1988_1, 0:r1988_2 +# 1988| m1988_4(unknown) = ^CallSideEffect : ~m1986_5 +# 1988| m1988_5(unknown) = Chi : total:m1986_5, partial:m1988_4 +# 1988| r1988_6(glval) = VariableAddress[z] : +# 1988| m1988_7(int) = Store[z] : &:r1988_6, r1988_3 +# 1989| v1989_1(void) = NoOp : +# 1989| r1989_2(glval) = VariableAddress[c] : +# 1989| r1989_3(glval) = FunctionAddress[~C] : +# 1989| v1989_4(void) = Call[~C] : func:r1989_3, this:r1989_2 +# 1989| m1989_5(unknown) = ^CallSideEffect : ~m1988_5 +# 1989| m1989_6(unknown) = Chi : total:m1988_5, partial:m1989_5 +# 1989| v1989_7(void) = ^IndirectReadSideEffect[-1] : &:r1989_2, m1982_8 +# 1989| m1989_8(C) = ^IndirectMayWriteSideEffect[-1] : &:r1989_2 +# 1989| m1989_9(C) = Chi : total:m1982_8, partial:m1989_8 +# 1981| v1981_5(void) = ReturnVoid : +# 1981| v1981_6(void) = AliasedUse : ~m1989_6 +# 1981| v1981_7(void) = ExitFunction : -# 1991| D& D::ReferenceStaticMemberFunction() +# 1991| void test_double_assign() # 1991| Block 0 -# 1991| v1991_1(void) = EnterFunction : -# 1991| m1991_2(unknown) = AliasedDefinition : -# 1991| m1991_3(unknown) = InitializeNonLocal : -# 1991| m1991_4(unknown) = Chi : total:m1991_2, partial:m1991_3 -# 1992| r1992_1(glval) = VariableAddress[#return] : -# 1992| r1992_2(glval) = VariableAddress[x] : -# 1992| r1992_3(D &) = CopyValue : r1992_2 -# 1992| m1992_4(D &) = Store[#return] : &:r1992_1, r1992_3 -# 1991| r1991_5(glval) = VariableAddress[#return] : -# 1991| v1991_6(void) = ReturnValue : &:r1991_5, m1992_4 -# 1991| v1991_7(void) = AliasedUse : m1991_3 -# 1991| v1991_8(void) = ExitFunction : +# 1991| v1991_1(void) = EnterFunction : +# 1991| m1991_2(unknown) = AliasedDefinition : +# 1991| m1991_3(unknown) = InitializeNonLocal : +# 1991| m1991_4(unknown) = Chi : total:m1991_2, partial:m1991_3 +# 1992| r1992_1(glval) = VariableAddress[i] : +# 1992| m1992_2(int) = Uninitialized[i] : &:r1992_1 +# 1992| r1992_3(glval) = VariableAddress[j] : +# 1992| m1992_4(int) = Uninitialized[j] : &:r1992_3 +# 1993| r1993_1(int) = Constant[40] : +# 1993| r1993_2(glval) = VariableAddress[j] : +# 1993| m1993_3(int) = Store[j] : &:r1993_2, r1993_1 +# 1993| r1993_4(int) = Load[j] : &:r1993_2, m1993_3 +# 1993| r1993_5(glval) = VariableAddress[i] : +# 1993| m1993_6(int) = Store[i] : &:r1993_5, r1993_4 +# 1994| v1994_1(void) = NoOp : +# 1991| v1991_5(void) = ReturnVoid : +# 1991| v1991_6(void) = AliasedUse : m1991_3 +# 1991| v1991_7(void) = ExitFunction : -# 1994| D D::ObjectStaticMemberFunction() -# 1994| Block 0 -# 1994| v1994_1(void) = EnterFunction : -# 1994| m1994_2(unknown) = AliasedDefinition : -# 1994| m1994_3(unknown) = InitializeNonLocal : -# 1994| m1994_4(unknown) = Chi : total:m1994_2, partial:m1994_3 -# 1995| r1995_1(glval) = VariableAddress[#return] : -# 1995| r1995_2(glval) = VariableAddress[x] : -# 1995| r1995_3(D) = Load[x] : &:r1995_2, ~m1994_3 -# 1995| m1995_4(D) = Store[#return] : &:r1995_1, r1995_3 -# 1994| r1994_5(glval) = VariableAddress[#return] : -# 1994| v1994_6(void) = ReturnValue : &:r1994_5, m1995_4 -# 1994| v1994_7(void) = AliasedUse : m1994_3 -# 1994| v1994_8(void) = ExitFunction : +# 1996| void test_assign_with_assign_operation() +# 1996| Block 0 +# 1996| v1996_1(void) = EnterFunction : +# 1996| m1996_2(unknown) = AliasedDefinition : +# 1996| m1996_3(unknown) = InitializeNonLocal : +# 1996| m1996_4(unknown) = Chi : total:m1996_2, partial:m1996_3 +# 1997| r1997_1(glval) = VariableAddress[i] : +# 1997| m1997_2(int) = Uninitialized[i] : &:r1997_1 +# 1997| r1997_3(glval) = VariableAddress[j] : +# 1997| r1997_4(int) = Constant[0] : +# 1997| m1997_5(int) = Store[j] : &:r1997_3, r1997_4 +# 1998| r1998_1(int) = Constant[40] : +# 1998| r1998_2(glval) = VariableAddress[j] : +# 1998| r1998_3(int) = Load[j] : &:r1998_2, m1997_5 +# 1998| r1998_4(int) = Add : r1998_3, r1998_1 +# 1998| m1998_5(int) = Store[j] : &:r1998_2, r1998_4 +# 1998| r1998_6(int) = Load[j] : &:r1998_2, m1998_5 +# 1998| r1998_7(glval) = VariableAddress[i] : +# 1998| m1998_8(int) = Store[i] : &:r1998_7, r1998_6 +# 1999| v1999_1(void) = NoOp : +# 1996| v1996_5(void) = ReturnVoid : +# 1996| v1996_6(void) = AliasedUse : m1996_3 +# 1996| v1996_7(void) = ExitFunction : -# 1999| void test_static_member_functions_with_reference_return() -# 1999| Block 0 -# 1999| v1999_1(void) = EnterFunction : -# 1999| m1999_2(unknown) = AliasedDefinition : -# 1999| m1999_3(unknown) = InitializeNonLocal : -# 1999| m1999_4(unknown) = Chi : total:m1999_2, partial:m1999_3 -# 2000| r2000_1(glval) = VariableAddress[d] : -# 2000| m2000_2(D) = Uninitialized[d] : &:r2000_1 -# 2002| r2002_1(glval) = VariableAddress[d] : -# 2002| r2002_2(glval) = FunctionAddress[ReferenceStaticMemberFunction] : -# 2002| r2002_3(D &) = Call[ReferenceStaticMemberFunction] : func:r2002_2 -# 2002| m2002_4(unknown) = ^CallSideEffect : ~m1999_4 -# 2002| m2002_5(unknown) = Chi : total:m1999_4, partial:m2002_4 -# 2002| r2002_6(glval) = CopyValue : r2002_3 -# 2003| r2003_1(glval) = FunctionAddress[ReferenceStaticMemberFunction] : -# 2003| r2003_2(D &) = Call[ReferenceStaticMemberFunction] : func:r2003_1 -# 2003| m2003_3(unknown) = ^CallSideEffect : ~m2002_5 -# 2003| m2003_4(unknown) = Chi : total:m2002_5, partial:m2003_3 -# 2003| r2003_5(glval) = CopyValue : r2003_2 -# 2004| r2004_1(glval) = VariableAddress[d] : -# 2004| r2004_2(glval) = FunctionAddress[ObjectStaticMemberFunction] : -# 2004| r2004_3(D) = Call[ObjectStaticMemberFunction] : func:r2004_2 -# 2004| m2004_4(unknown) = ^CallSideEffect : ~m2003_4 -# 2004| m2004_5(unknown) = Chi : total:m2003_4, partial:m2004_4 -# 2005| r2005_1(glval) = FunctionAddress[ObjectStaticMemberFunction] : -# 2005| r2005_2(D) = Call[ObjectStaticMemberFunction] : func:r2005_1 -# 2005| m2005_3(unknown) = ^CallSideEffect : ~m2004_5 -# 2005| m2005_4(unknown) = Chi : total:m2004_5, partial:m2005_3 -# 2007| r2007_1(glval) = VariableAddress[x] : -# 2007| m2007_2(D) = Uninitialized[x] : &:r2007_1 -# 2008| r2008_1(glval) = VariableAddress[d] : -# 2008| r2008_2(glval) = FunctionAddress[ReferenceStaticMemberFunction] : -# 2008| r2008_3(D &) = Call[ReferenceStaticMemberFunction] : func:r2008_2 -# 2008| m2008_4(unknown) = ^CallSideEffect : ~m2005_4 -# 2008| m2008_5(unknown) = Chi : total:m2005_4, partial:m2008_4 -# 2008| r2008_6(D) = Load[?] : &:r2008_3, ~m2008_5 -# 2008| r2008_7(glval) = VariableAddress[x] : -# 2008| m2008_8(D) = Store[x] : &:r2008_7, r2008_6 -# 2009| r2009_1(glval) = VariableAddress[y] : -# 2009| m2009_2(D) = Uninitialized[y] : &:r2009_1 -# 2010| r2010_1(glval) = FunctionAddress[ReferenceStaticMemberFunction] : -# 2010| r2010_2(D &) = Call[ReferenceStaticMemberFunction] : func:r2010_1 -# 2010| m2010_3(unknown) = ^CallSideEffect : ~m2008_5 -# 2010| m2010_4(unknown) = Chi : total:m2008_5, partial:m2010_3 -# 2010| r2010_5(D) = Load[?] : &:r2010_2, ~m2010_4 -# 2010| r2010_6(glval) = VariableAddress[y] : -# 2010| m2010_7(D) = Store[y] : &:r2010_6, r2010_5 -# 2011| r2011_1(glval) = VariableAddress[j] : -# 2011| m2011_2(D) = Uninitialized[j] : &:r2011_1 -# 2012| r2012_1(glval) = VariableAddress[d] : -# 2012| r2012_2(glval) = FunctionAddress[ObjectStaticMemberFunction] : -# 2012| r2012_3(D) = Call[ObjectStaticMemberFunction] : func:r2012_2 -# 2012| m2012_4(unknown) = ^CallSideEffect : ~m2010_4 -# 2012| m2012_5(unknown) = Chi : total:m2010_4, partial:m2012_4 -# 2012| r2012_6(glval) = VariableAddress[j] : -# 2012| m2012_7(D) = Store[j] : &:r2012_6, r2012_3 -# 2013| r2013_1(glval) = VariableAddress[k] : -# 2013| m2013_2(D) = Uninitialized[k] : &:r2013_1 -# 2014| r2014_1(glval) = FunctionAddress[ObjectStaticMemberFunction] : -# 2014| r2014_2(D) = Call[ObjectStaticMemberFunction] : func:r2014_1 -# 2014| m2014_3(unknown) = ^CallSideEffect : ~m2012_5 -# 2014| m2014_4(unknown) = Chi : total:m2012_5, partial:m2014_3 -# 2014| r2014_5(glval) = VariableAddress[k] : -# 2014| m2014_6(D) = Store[k] : &:r2014_5, r2014_2 -# 2015| v2015_1(void) = NoOp : -# 1999| v1999_5(void) = ReturnVoid : -# 1999| v1999_6(void) = AliasedUse : ~m2014_4 -# 1999| v1999_7(void) = ExitFunction : +# 2005| D& D::ReferenceStaticMemberFunction() +# 2005| Block 0 +# 2005| v2005_1(void) = EnterFunction : +# 2005| m2005_2(unknown) = AliasedDefinition : +# 2005| m2005_3(unknown) = InitializeNonLocal : +# 2005| m2005_4(unknown) = Chi : total:m2005_2, partial:m2005_3 +# 2006| r2006_1(glval) = VariableAddress[#return] : +# 2006| r2006_2(glval) = VariableAddress[x] : +# 2006| r2006_3(D &) = CopyValue : r2006_2 +# 2006| m2006_4(D &) = Store[#return] : &:r2006_1, r2006_3 +# 2005| r2005_5(glval) = VariableAddress[#return] : +# 2005| v2005_6(void) = ReturnValue : &:r2005_5, m2006_4 +# 2005| v2005_7(void) = AliasedUse : m2005_3 +# 2005| v2005_8(void) = ExitFunction : -# 2017| void test_volatile() -# 2017| Block 0 -# 2017| v2017_1(void) = EnterFunction : -# 2017| m2017_2(unknown) = AliasedDefinition : -# 2017| m2017_3(unknown) = InitializeNonLocal : -# 2017| m2017_4(unknown) = Chi : total:m2017_2, partial:m2017_3 -# 2018| r2018_1(glval) = VariableAddress[x] : -# 2018| m2018_2(int) = Uninitialized[x] : &:r2018_1 -# 2019| r2019_1(glval) = VariableAddress[x] : -# 2019| r2019_2(int) = Load[x] : &:r2019_1, m2018_2 -# 2020| v2020_1(void) = NoOp : -# 2017| v2017_5(void) = ReturnVoid : -# 2017| v2017_6(void) = AliasedUse : m2017_3 -# 2017| v2017_7(void) = ExitFunction : +# 2008| D D::ObjectStaticMemberFunction() +# 2008| Block 0 +# 2008| v2008_1(void) = EnterFunction : +# 2008| m2008_2(unknown) = AliasedDefinition : +# 2008| m2008_3(unknown) = InitializeNonLocal : +# 2008| m2008_4(unknown) = Chi : total:m2008_2, partial:m2008_3 +# 2009| r2009_1(glval) = VariableAddress[#return] : +# 2009| r2009_2(glval) = VariableAddress[x] : +# 2009| r2009_3(D) = Load[x] : &:r2009_2, ~m2008_3 +# 2009| m2009_4(D) = Store[#return] : &:r2009_1, r2009_3 +# 2008| r2008_5(glval) = VariableAddress[#return] : +# 2008| v2008_6(void) = ReturnValue : &:r2008_5, m2009_4 +# 2008| v2008_7(void) = AliasedUse : m2008_3 +# 2008| v2008_8(void) = ExitFunction : -# 2028| void value_category_test() -# 2028| Block 0 -# 2028| v2028_1(void) = EnterFunction : -# 2028| m2028_2(unknown) = AliasedDefinition : -# 2028| m2028_3(unknown) = InitializeNonLocal : -# 2028| m2028_4(unknown) = Chi : total:m2028_2, partial:m2028_3 -# 2029| r2029_1(glval) = VariableAddress[c] : -# 2029| m2029_2(ValCat) = Uninitialized[c] : &:r2029_1 +# 2013| void test_static_member_functions_with_reference_return() +# 2013| Block 0 +# 2013| v2013_1(void) = EnterFunction : +# 2013| m2013_2(unknown) = AliasedDefinition : +# 2013| m2013_3(unknown) = InitializeNonLocal : +# 2013| m2013_4(unknown) = Chi : total:m2013_2, partial:m2013_3 +# 2014| r2014_1(glval) = VariableAddress[d] : +# 2014| m2014_2(D) = Uninitialized[d] : &:r2014_1 +# 2016| r2016_1(glval) = VariableAddress[d] : +# 2016| r2016_2(glval) = FunctionAddress[ReferenceStaticMemberFunction] : +# 2016| r2016_3(D &) = Call[ReferenceStaticMemberFunction] : func:r2016_2 +# 2016| m2016_4(unknown) = ^CallSideEffect : ~m2013_4 +# 2016| m2016_5(unknown) = Chi : total:m2013_4, partial:m2016_4 +# 2016| r2016_6(glval) = CopyValue : r2016_3 +# 2017| r2017_1(glval) = FunctionAddress[ReferenceStaticMemberFunction] : +# 2017| r2017_2(D &) = Call[ReferenceStaticMemberFunction] : func:r2017_1 +# 2017| m2017_3(unknown) = ^CallSideEffect : ~m2016_5 +# 2017| m2017_4(unknown) = Chi : total:m2016_5, partial:m2017_3 +# 2017| r2017_5(glval) = CopyValue : r2017_2 +# 2018| r2018_1(glval) = VariableAddress[d] : +# 2018| r2018_2(glval) = FunctionAddress[ObjectStaticMemberFunction] : +# 2018| r2018_3(D) = Call[ObjectStaticMemberFunction] : func:r2018_2 +# 2018| m2018_4(unknown) = ^CallSideEffect : ~m2017_4 +# 2018| m2018_5(unknown) = Chi : total:m2017_4, partial:m2018_4 +# 2019| r2019_1(glval) = FunctionAddress[ObjectStaticMemberFunction] : +# 2019| r2019_2(D) = Call[ObjectStaticMemberFunction] : func:r2019_1 +# 2019| m2019_3(unknown) = ^CallSideEffect : ~m2018_5 +# 2019| m2019_4(unknown) = Chi : total:m2018_5, partial:m2019_3 +# 2021| r2021_1(glval) = VariableAddress[x] : +# 2021| m2021_2(D) = Uninitialized[x] : &:r2021_1 +# 2022| r2022_1(glval) = VariableAddress[d] : +# 2022| r2022_2(glval) = FunctionAddress[ReferenceStaticMemberFunction] : +# 2022| r2022_3(D &) = Call[ReferenceStaticMemberFunction] : func:r2022_2 +# 2022| m2022_4(unknown) = ^CallSideEffect : ~m2019_4 +# 2022| m2022_5(unknown) = Chi : total:m2019_4, partial:m2022_4 +# 2022| r2022_6(D) = Load[?] : &:r2022_3, ~m2022_5 +# 2022| r2022_7(glval) = VariableAddress[x] : +# 2022| m2022_8(D) = Store[x] : &:r2022_7, r2022_6 +# 2023| r2023_1(glval) = VariableAddress[y] : +# 2023| m2023_2(D) = Uninitialized[y] : &:r2023_1 +# 2024| r2024_1(glval) = FunctionAddress[ReferenceStaticMemberFunction] : +# 2024| r2024_2(D &) = Call[ReferenceStaticMemberFunction] : func:r2024_1 +# 2024| m2024_3(unknown) = ^CallSideEffect : ~m2022_5 +# 2024| m2024_4(unknown) = Chi : total:m2022_5, partial:m2024_3 +# 2024| r2024_5(D) = Load[?] : &:r2024_2, ~m2024_4 +# 2024| r2024_6(glval) = VariableAddress[y] : +# 2024| m2024_7(D) = Store[y] : &:r2024_6, r2024_5 +# 2025| r2025_1(glval) = VariableAddress[j] : +# 2025| m2025_2(D) = Uninitialized[j] : &:r2025_1 +# 2026| r2026_1(glval) = VariableAddress[d] : +# 2026| r2026_2(glval) = FunctionAddress[ObjectStaticMemberFunction] : +# 2026| r2026_3(D) = Call[ObjectStaticMemberFunction] : func:r2026_2 +# 2026| m2026_4(unknown) = ^CallSideEffect : ~m2024_4 +# 2026| m2026_5(unknown) = Chi : total:m2024_4, partial:m2026_4 +# 2026| r2026_6(glval) = VariableAddress[j] : +# 2026| m2026_7(D) = Store[j] : &:r2026_6, r2026_3 +# 2027| r2027_1(glval) = VariableAddress[k] : +# 2027| m2027_2(D) = Uninitialized[k] : &:r2027_1 +# 2028| r2028_1(glval) = FunctionAddress[ObjectStaticMemberFunction] : +# 2028| r2028_2(D) = Call[ObjectStaticMemberFunction] : func:r2028_1 +# 2028| m2028_3(unknown) = ^CallSideEffect : ~m2026_5 +# 2028| m2028_4(unknown) = Chi : total:m2026_5, partial:m2028_3 +# 2028| r2028_5(glval) = VariableAddress[k] : +# 2028| m2028_6(D) = Store[k] : &:r2028_5, r2028_2 +# 2029| v2029_1(void) = NoOp : +# 2013| v2013_5(void) = ReturnVoid : +# 2013| v2013_6(void) = AliasedUse : ~m2028_4 +# 2013| v2013_7(void) = ExitFunction : + +# 2031| void test_volatile() +# 2031| Block 0 +# 2031| v2031_1(void) = EnterFunction : +# 2031| m2031_2(unknown) = AliasedDefinition : +# 2031| m2031_3(unknown) = InitializeNonLocal : +# 2031| m2031_4(unknown) = Chi : total:m2031_2, partial:m2031_3 +# 2032| r2032_1(glval) = VariableAddress[x] : +# 2032| m2032_2(int) = Uninitialized[x] : &:r2032_1 +# 2033| r2033_1(glval) = VariableAddress[x] : +# 2033| r2033_2(int) = Load[x] : &:r2033_1, m2032_2 +# 2034| v2034_1(void) = NoOp : +# 2031| v2031_5(void) = ReturnVoid : +# 2031| v2031_6(void) = AliasedUse : m2031_3 +# 2031| v2031_7(void) = ExitFunction : + +# 2042| void value_category_test() +# 2042| Block 0 +# 2042| v2042_1(void) = EnterFunction : +# 2042| m2042_2(unknown) = AliasedDefinition : +# 2042| m2042_3(unknown) = InitializeNonLocal : +# 2042| m2042_4(unknown) = Chi : total:m2042_2, partial:m2042_3 +# 2043| r2043_1(glval) = VariableAddress[c] : +# 2043| m2043_2(ValCat) = Uninitialized[c] : &:r2043_1 #-----| r0_1(glval) = VariableAddress[#temp0:0] : #-----| m0_2(ValCat) = Uninitialized[#temp0:0] : &:r0_1 #-----| r0_3(ValCat) = Load[#temp0:0] : &:r0_1, m0_2 -# 2031| r2031_1(glval) = VariableAddress[c] : -# 2031| r2031_2(glval) = FunctionAddress[lvalue] : -# 2031| r2031_3(ValCat &) = Call[lvalue] : func:r2031_2 -# 2031| m2031_4(unknown) = ^CallSideEffect : ~m2028_4 -# 2031| m2031_5(unknown) = Chi : total:m2028_4, partial:m2031_4 -# 2031| r2031_6(glval) = CopyValue : r2031_3 -# 2031| m2031_7(ValCat) = Store[?] : &:r2031_6, r0_3 -# 2031| m2031_8(unknown) = Chi : total:m2031_5, partial:m2031_7 +# 2045| r2045_1(glval) = VariableAddress[c] : +# 2045| r2045_2(glval) = FunctionAddress[lvalue] : +# 2045| r2045_3(ValCat &) = Call[lvalue] : func:r2045_2 +# 2045| m2045_4(unknown) = ^CallSideEffect : ~m2042_4 +# 2045| m2045_5(unknown) = Chi : total:m2042_4, partial:m2045_4 +# 2045| r2045_6(glval) = CopyValue : r2045_3 +# 2045| m2045_7(ValCat) = Store[?] : &:r2045_6, r0_3 +# 2045| m2045_8(unknown) = Chi : total:m2045_5, partial:m2045_7 #-----| r0_4(glval) = VariableAddress[#temp0:0] : #-----| m0_5(ValCat) = Uninitialized[#temp0:0] : &:r0_4 #-----| r0_6(ValCat) = Load[#temp0:0] : &:r0_4, m0_5 -# 2032| r2032_1(glval) = VariableAddress[c] : -# 2032| r2032_2(glval) = FunctionAddress[xvalue] : -# 2032| r2032_3(ValCat &&) = Call[xvalue] : func:r2032_2 -# 2032| m2032_4(unknown) = ^CallSideEffect : ~m2031_8 -# 2032| m2032_5(unknown) = Chi : total:m2031_8, partial:m2032_4 -# 2032| r2032_6(glval) = CopyValue : r2032_3 -# 2032| m2032_7(ValCat) = Store[?] : &:r2032_6, r0_6 -# 2032| m2032_8(unknown) = Chi : total:m2032_5, partial:m2032_7 +# 2046| r2046_1(glval) = VariableAddress[c] : +# 2046| r2046_2(glval) = FunctionAddress[xvalue] : +# 2046| r2046_3(ValCat &&) = Call[xvalue] : func:r2046_2 +# 2046| m2046_4(unknown) = ^CallSideEffect : ~m2045_8 +# 2046| m2046_5(unknown) = Chi : total:m2045_8, partial:m2046_4 +# 2046| r2046_6(glval) = CopyValue : r2046_3 +# 2046| m2046_7(ValCat) = Store[?] : &:r2046_6, r0_6 +# 2046| m2046_8(unknown) = Chi : total:m2046_5, partial:m2046_7 #-----| r0_7(glval) = VariableAddress[#temp0:0] : #-----| m0_8(ValCat) = Uninitialized[#temp0:0] : &:r0_7 #-----| r0_9(ValCat) = Load[#temp0:0] : &:r0_7, m0_8 -# 2033| r2033_1(glval) = VariableAddress[#temp2033:5] : -# 2033| r2033_2(glval) = VariableAddress[c] : -# 2033| r2033_3(glval) = FunctionAddress[prvalue] : -# 2033| r2033_4(ValCat) = Call[prvalue] : func:r2033_3 -# 2033| m2033_5(unknown) = ^CallSideEffect : ~m2032_8 -# 2033| m2033_6(unknown) = Chi : total:m2032_8, partial:m2033_5 -# 2033| m2033_7(ValCat) = Store[#temp2033:5] : &:r2033_1, r2033_4 -# 2033| m2033_8(ValCat) = Store[#temp2033:5] : &:r2033_1, r0_9 +# 2047| r2047_1(glval) = VariableAddress[#temp2047:5] : +# 2047| r2047_2(glval) = VariableAddress[c] : +# 2047| r2047_3(glval) = FunctionAddress[prvalue] : +# 2047| r2047_4(ValCat) = Call[prvalue] : func:r2047_3 +# 2047| m2047_5(unknown) = ^CallSideEffect : ~m2046_8 +# 2047| m2047_6(unknown) = Chi : total:m2046_8, partial:m2047_5 +# 2047| m2047_7(ValCat) = Store[#temp2047:5] : &:r2047_1, r2047_4 +# 2047| m2047_8(ValCat) = Store[#temp2047:5] : &:r2047_1, r0_9 #-----| r0_10(glval) = VariableAddress[#temp0:0] : #-----| m0_11(ValCat) = Uninitialized[#temp0:0] : &:r0_10 #-----| r0_12(ValCat) = Load[#temp0:0] : &:r0_10, m0_11 -# 2034| r2034_1(glval) = FunctionAddress[lvalue] : -# 2034| r2034_2(ValCat &) = Call[lvalue] : func:r2034_1 -# 2034| m2034_3(unknown) = ^CallSideEffect : ~m2033_6 -# 2034| m2034_4(unknown) = Chi : total:m2033_6, partial:m2034_3 -# 2034| r2034_5(glval) = CopyValue : r2034_2 -# 2034| m2034_6(ValCat) = Store[?] : &:r2034_5, r0_12 -# 2034| m2034_7(unknown) = Chi : total:m2034_4, partial:m2034_6 +# 2048| r2048_1(glval) = FunctionAddress[lvalue] : +# 2048| r2048_2(ValCat &) = Call[lvalue] : func:r2048_1 +# 2048| m2048_3(unknown) = ^CallSideEffect : ~m2047_6 +# 2048| m2048_4(unknown) = Chi : total:m2047_6, partial:m2048_3 +# 2048| r2048_5(glval) = CopyValue : r2048_2 +# 2048| m2048_6(ValCat) = Store[?] : &:r2048_5, r0_12 +# 2048| m2048_7(unknown) = Chi : total:m2048_4, partial:m2048_6 #-----| r0_13(glval) = VariableAddress[#temp0:0] : #-----| m0_14(ValCat) = Uninitialized[#temp0:0] : &:r0_13 #-----| r0_15(ValCat) = Load[#temp0:0] : &:r0_13, m0_14 -# 2035| r2035_1(glval) = FunctionAddress[xvalue] : -# 2035| r2035_2(ValCat &&) = Call[xvalue] : func:r2035_1 -# 2035| m2035_3(unknown) = ^CallSideEffect : ~m2034_7 -# 2035| m2035_4(unknown) = Chi : total:m2034_7, partial:m2035_3 -# 2035| r2035_5(glval) = CopyValue : r2035_2 -# 2035| m2035_6(ValCat) = Store[?] : &:r2035_5, r0_15 -# 2035| m2035_7(unknown) = Chi : total:m2035_4, partial:m2035_6 +# 2049| r2049_1(glval) = FunctionAddress[xvalue] : +# 2049| r2049_2(ValCat &&) = Call[xvalue] : func:r2049_1 +# 2049| m2049_3(unknown) = ^CallSideEffect : ~m2048_7 +# 2049| m2049_4(unknown) = Chi : total:m2048_7, partial:m2049_3 +# 2049| r2049_5(glval) = CopyValue : r2049_2 +# 2049| m2049_6(ValCat) = Store[?] : &:r2049_5, r0_15 +# 2049| m2049_7(unknown) = Chi : total:m2049_4, partial:m2049_6 #-----| r0_16(glval) = VariableAddress[#temp0:0] : #-----| m0_17(ValCat) = Uninitialized[#temp0:0] : &:r0_16 #-----| r0_18(ValCat) = Load[#temp0:0] : &:r0_16, m0_17 -# 2036| r2036_1(glval) = VariableAddress[#temp2036:5] : -# 2036| r2036_2(glval) = FunctionAddress[prvalue] : -# 2036| r2036_3(ValCat) = Call[prvalue] : func:r2036_2 -# 2036| m2036_4(unknown) = ^CallSideEffect : ~m2035_7 -# 2036| m2036_5(unknown) = Chi : total:m2035_7, partial:m2036_4 -# 2036| m2036_6(ValCat) = Store[#temp2036:5] : &:r2036_1, r2036_3 -# 2036| m2036_7(ValCat) = Store[#temp2036:5] : &:r2036_1, r0_18 -# 2037| v2037_1(void) = NoOp : -# 2028| v2028_5(void) = ReturnVoid : -# 2028| v2028_6(void) = AliasedUse : ~m2036_5 -# 2028| v2028_7(void) = ExitFunction : +# 2050| r2050_1(glval) = VariableAddress[#temp2050:5] : +# 2050| r2050_2(glval) = FunctionAddress[prvalue] : +# 2050| r2050_3(ValCat) = Call[prvalue] : func:r2050_2 +# 2050| m2050_4(unknown) = ^CallSideEffect : ~m2049_7 +# 2050| m2050_5(unknown) = Chi : total:m2049_7, partial:m2050_4 +# 2050| m2050_6(ValCat) = Store[#temp2050:5] : &:r2050_1, r2050_3 +# 2050| m2050_7(ValCat) = Store[#temp2050:5] : &:r2050_1, r0_18 +# 2051| v2051_1(void) = NoOp : +# 2042| v2042_5(void) = ReturnVoid : +# 2042| v2042_6(void) = AliasedUse : ~m2050_5 +# 2042| v2042_7(void) = ExitFunction : -# 2039| void SetStaticFuncPtr() -# 2039| Block 0 -# 2039| v2039_1(void) = EnterFunction : -# 2039| m2039_2(unknown) = AliasedDefinition : -# 2039| m2039_3(unknown) = InitializeNonLocal : -# 2039| m2039_4(unknown) = Chi : total:m2039_2, partial:m2039_3 -# 2040| r2040_1(glval) = VariableAddress[c] : -# 2040| m2040_2(C) = Uninitialized[c] : &:r2040_1 -# 2040| r2040_3(glval) = FunctionAddress[C] : -# 2040| v2040_4(void) = Call[C] : func:r2040_3, this:r2040_1 -# 2040| m2040_5(unknown) = ^CallSideEffect : ~m2039_4 -# 2040| m2040_6(unknown) = Chi : total:m2039_4, partial:m2040_5 -# 2040| m2040_7(C) = ^IndirectMayWriteSideEffect[-1] : &:r2040_1 -# 2040| m2040_8(C) = Chi : total:m2040_2, partial:m2040_7 -# 2041| r2041_1(glval<..(*)(..)>) = VariableAddress[pfn] : -# 2041| r2041_2(..(*)(..)) = FunctionAddress[StaticMemberFunction] : -# 2041| m2041_3(..(*)(..)) = Store[pfn] : &:r2041_1, r2041_2 -# 2042| r2042_1(glval) = VariableAddress[c] : -# 2042| r2042_2(..(*)(..)) = FunctionAddress[StaticMemberFunction] : -# 2042| r2042_3(glval<..(*)(..)>) = VariableAddress[pfn] : -# 2042| m2042_4(..(*)(..)) = Store[pfn] : &:r2042_3, r2042_2 -# 2043| v2043_1(void) = NoOp : -# 2043| r2043_2(glval) = VariableAddress[c] : -# 2043| r2043_3(glval) = FunctionAddress[~C] : -# 2043| v2043_4(void) = Call[~C] : func:r2043_3, this:r2043_2 -# 2043| m2043_5(unknown) = ^CallSideEffect : ~m2040_6 -# 2043| m2043_6(unknown) = Chi : total:m2040_6, partial:m2043_5 -# 2043| v2043_7(void) = ^IndirectReadSideEffect[-1] : &:r2043_2, m2040_8 -# 2043| m2043_8(C) = ^IndirectMayWriteSideEffect[-1] : &:r2043_2 -# 2043| m2043_9(C) = Chi : total:m2040_8, partial:m2043_8 -# 2039| v2039_5(void) = ReturnVoid : -# 2039| v2039_6(void) = AliasedUse : ~m2043_6 -# 2039| v2039_7(void) = ExitFunction : +# 2053| void SetStaticFuncPtr() +# 2053| Block 0 +# 2053| v2053_1(void) = EnterFunction : +# 2053| m2053_2(unknown) = AliasedDefinition : +# 2053| m2053_3(unknown) = InitializeNonLocal : +# 2053| m2053_4(unknown) = Chi : total:m2053_2, partial:m2053_3 +# 2054| r2054_1(glval) = VariableAddress[c] : +# 2054| m2054_2(C) = Uninitialized[c] : &:r2054_1 +# 2054| r2054_3(glval) = FunctionAddress[C] : +# 2054| v2054_4(void) = Call[C] : func:r2054_3, this:r2054_1 +# 2054| m2054_5(unknown) = ^CallSideEffect : ~m2053_4 +# 2054| m2054_6(unknown) = Chi : total:m2053_4, partial:m2054_5 +# 2054| m2054_7(C) = ^IndirectMayWriteSideEffect[-1] : &:r2054_1 +# 2054| m2054_8(C) = Chi : total:m2054_2, partial:m2054_7 +# 2055| r2055_1(glval<..(*)(..)>) = VariableAddress[pfn] : +# 2055| r2055_2(..(*)(..)) = FunctionAddress[StaticMemberFunction] : +# 2055| m2055_3(..(*)(..)) = Store[pfn] : &:r2055_1, r2055_2 +# 2056| r2056_1(glval) = VariableAddress[c] : +# 2056| r2056_2(..(*)(..)) = FunctionAddress[StaticMemberFunction] : +# 2056| r2056_3(glval<..(*)(..)>) = VariableAddress[pfn] : +# 2056| m2056_4(..(*)(..)) = Store[pfn] : &:r2056_3, r2056_2 +# 2057| v2057_1(void) = NoOp : +# 2057| r2057_2(glval) = VariableAddress[c] : +# 2057| r2057_3(glval) = FunctionAddress[~C] : +# 2057| v2057_4(void) = Call[~C] : func:r2057_3, this:r2057_2 +# 2057| m2057_5(unknown) = ^CallSideEffect : ~m2054_6 +# 2057| m2057_6(unknown) = Chi : total:m2054_6, partial:m2057_5 +# 2057| v2057_7(void) = ^IndirectReadSideEffect[-1] : &:r2057_2, m2054_8 +# 2057| m2057_8(C) = ^IndirectMayWriteSideEffect[-1] : &:r2057_2 +# 2057| m2057_9(C) = Chi : total:m2054_8, partial:m2057_8 +# 2053| v2053_5(void) = ReturnVoid : +# 2053| v2053_6(void) = AliasedUse : ~m2057_6 +# 2053| v2053_7(void) = ExitFunction : -# 2045| void TernaryTestInt(bool, int, int, int) -# 2045| Block 0 -# 2045| v2045_1(void) = EnterFunction : -# 2045| m2045_2(unknown) = AliasedDefinition : -# 2045| m2045_3(unknown) = InitializeNonLocal : -# 2045| m2045_4(unknown) = Chi : total:m2045_2, partial:m2045_3 -# 2045| r2045_5(glval) = VariableAddress[a] : -# 2045| m2045_6(bool) = InitializeParameter[a] : &:r2045_5 -# 2045| r2045_7(glval) = VariableAddress[x] : -# 2045| m2045_8(int) = InitializeParameter[x] : &:r2045_7 -# 2045| r2045_9(glval) = VariableAddress[y] : -# 2045| m2045_10(int) = InitializeParameter[y] : &:r2045_9 -# 2045| r2045_11(glval) = VariableAddress[z] : -# 2045| m2045_12(int) = InitializeParameter[z] : &:r2045_11 -# 2046| r2046_1(glval) = VariableAddress[a] : -# 2046| r2046_2(bool) = Load[a] : &:r2046_1, m2045_6 -# 2046| v2046_3(void) = ConditionalBranch : r2046_2 +# 2059| void TernaryTestInt(bool, int, int, int) +# 2059| Block 0 +# 2059| v2059_1(void) = EnterFunction : +# 2059| m2059_2(unknown) = AliasedDefinition : +# 2059| m2059_3(unknown) = InitializeNonLocal : +# 2059| m2059_4(unknown) = Chi : total:m2059_2, partial:m2059_3 +# 2059| r2059_5(glval) = VariableAddress[a] : +# 2059| m2059_6(bool) = InitializeParameter[a] : &:r2059_5 +# 2059| r2059_7(glval) = VariableAddress[x] : +# 2059| m2059_8(int) = InitializeParameter[x] : &:r2059_7 +# 2059| r2059_9(glval) = VariableAddress[y] : +# 2059| m2059_10(int) = InitializeParameter[y] : &:r2059_9 +# 2059| r2059_11(glval) = VariableAddress[z] : +# 2059| m2059_12(int) = InitializeParameter[z] : &:r2059_11 +# 2060| r2060_1(glval) = VariableAddress[a] : +# 2060| r2060_2(bool) = Load[a] : &:r2060_1, m2059_6 +# 2060| v2060_3(void) = ConditionalBranch : r2060_2 #-----| False -> Block 3 #-----| True -> Block 2 -# 2046| Block 1 -# 2046| m2046_4(int) = Phi : from 2:m2046_12, from 3:m2046_16 -# 2046| r2046_5(glval) = VariableAddress[#temp2046:9] : -# 2046| r2046_6(int) = Load[#temp2046:9] : &:r2046_5, m2046_4 -# 2046| r2046_7(glval) = VariableAddress[z] : -# 2046| m2046_8(int) = Store[z] : &:r2046_7, r2046_6 -# 2047| r2047_1(glval) = VariableAddress[a] : -# 2047| r2047_2(bool) = Load[a] : &:r2047_1, m2045_6 -# 2047| v2047_3(void) = ConditionalBranch : r2047_2 +# 2060| Block 1 +# 2060| m2060_4(int) = Phi : from 2:m2060_12, from 3:m2060_16 +# 2060| r2060_5(glval) = VariableAddress[#temp2060:9] : +# 2060| r2060_6(int) = Load[#temp2060:9] : &:r2060_5, m2060_4 +# 2060| r2060_7(glval) = VariableAddress[z] : +# 2060| m2060_8(int) = Store[z] : &:r2060_7, r2060_6 +# 2061| r2061_1(glval) = VariableAddress[a] : +# 2061| r2061_2(bool) = Load[a] : &:r2061_1, m2059_6 +# 2061| v2061_3(void) = ConditionalBranch : r2061_2 #-----| False -> Block 6 #-----| True -> Block 5 -# 2046| Block 2 -# 2046| r2046_9(glval) = VariableAddress[x] : -# 2046| r2046_10(int) = Load[x] : &:r2046_9, m2045_8 -# 2046| r2046_11(glval) = VariableAddress[#temp2046:9] : -# 2046| m2046_12(int) = Store[#temp2046:9] : &:r2046_11, r2046_10 +# 2060| Block 2 +# 2060| r2060_9(glval) = VariableAddress[x] : +# 2060| r2060_10(int) = Load[x] : &:r2060_9, m2059_8 +# 2060| r2060_11(glval) = VariableAddress[#temp2060:9] : +# 2060| m2060_12(int) = Store[#temp2060:9] : &:r2060_11, r2060_10 #-----| Goto -> Block 1 -# 2046| Block 3 -# 2046| r2046_13(glval) = VariableAddress[y] : -# 2046| r2046_14(int) = Load[y] : &:r2046_13, m2045_10 -# 2046| r2046_15(glval) = VariableAddress[#temp2046:9] : -# 2046| m2046_16(int) = Store[#temp2046:9] : &:r2046_15, r2046_14 +# 2060| Block 3 +# 2060| r2060_13(glval) = VariableAddress[y] : +# 2060| r2060_14(int) = Load[y] : &:r2060_13, m2059_10 +# 2060| r2060_15(glval) = VariableAddress[#temp2060:9] : +# 2060| m2060_16(int) = Store[#temp2060:9] : &:r2060_15, r2060_14 #-----| Goto -> Block 1 -# 2047| Block 4 -# 2047| m2047_4(int) = Phi : from 5:m2047_12, from 6:m2047_15 -# 2047| r2047_5(glval) = VariableAddress[#temp2047:9] : -# 2047| r2047_6(int) = Load[#temp2047:9] : &:r2047_5, m2047_4 -# 2047| r2047_7(glval) = VariableAddress[z] : -# 2047| m2047_8(int) = Store[z] : &:r2047_7, r2047_6 -# 2048| r2048_1(glval) = VariableAddress[a] : -# 2048| r2048_2(bool) = Load[a] : &:r2048_1, m2045_6 -# 2048| v2048_3(void) = ConditionalBranch : r2048_2 +# 2061| Block 4 +# 2061| m2061_4(int) = Phi : from 5:m2061_12, from 6:m2061_15 +# 2061| r2061_5(glval) = VariableAddress[#temp2061:9] : +# 2061| r2061_6(int) = Load[#temp2061:9] : &:r2061_5, m2061_4 +# 2061| r2061_7(glval) = VariableAddress[z] : +# 2061| m2061_8(int) = Store[z] : &:r2061_7, r2061_6 +# 2062| r2062_1(glval) = VariableAddress[a] : +# 2062| r2062_2(bool) = Load[a] : &:r2062_1, m2059_6 +# 2062| v2062_3(void) = ConditionalBranch : r2062_2 #-----| False -> Block 9 #-----| True -> Block 8 -# 2047| Block 5 -# 2047| r2047_9(glval) = VariableAddress[x] : -# 2047| r2047_10(int) = Load[x] : &:r2047_9, m2045_8 -# 2047| r2047_11(glval) = VariableAddress[#temp2047:9] : -# 2047| m2047_12(int) = Store[#temp2047:9] : &:r2047_11, r2047_10 +# 2061| Block 5 +# 2061| r2061_9(glval) = VariableAddress[x] : +# 2061| r2061_10(int) = Load[x] : &:r2061_9, m2059_8 +# 2061| r2061_11(glval) = VariableAddress[#temp2061:9] : +# 2061| m2061_12(int) = Store[#temp2061:9] : &:r2061_11, r2061_10 #-----| Goto -> Block 4 -# 2047| Block 6 -# 2047| r2047_13(int) = Constant[5] : -# 2047| r2047_14(glval) = VariableAddress[#temp2047:9] : -# 2047| m2047_15(int) = Store[#temp2047:9] : &:r2047_14, r2047_13 +# 2061| Block 6 +# 2061| r2061_13(int) = Constant[5] : +# 2061| r2061_14(glval) = VariableAddress[#temp2061:9] : +# 2061| m2061_15(int) = Store[#temp2061:9] : &:r2061_14, r2061_13 #-----| Goto -> Block 4 -# 2048| Block 7 -# 2048| m2048_4(int) = Phi : from 8:m2048_11, from 9:m2048_14 -# 2048| r2048_5(glval) = VariableAddress[#temp2048:9] : -# 2048| r2048_6(int) = Load[#temp2048:9] : &:r2048_5, m2048_4 -# 2048| r2048_7(glval) = VariableAddress[z] : -# 2048| m2048_8(int) = Store[z] : &:r2048_7, r2048_6 -# 2049| r2049_1(int) = Constant[7] : -# 2049| r2049_2(glval) = VariableAddress[a] : -# 2049| r2049_3(bool) = Load[a] : &:r2049_2, m2045_6 -# 2049| v2049_4(void) = ConditionalBranch : r2049_3 +# 2062| Block 7 +# 2062| m2062_4(int) = Phi : from 8:m2062_11, from 9:m2062_14 +# 2062| r2062_5(glval) = VariableAddress[#temp2062:9] : +# 2062| r2062_6(int) = Load[#temp2062:9] : &:r2062_5, m2062_4 +# 2062| r2062_7(glval) = VariableAddress[z] : +# 2062| m2062_8(int) = Store[z] : &:r2062_7, r2062_6 +# 2063| r2063_1(int) = Constant[7] : +# 2063| r2063_2(glval) = VariableAddress[a] : +# 2063| r2063_3(bool) = Load[a] : &:r2063_2, m2059_6 +# 2063| v2063_4(void) = ConditionalBranch : r2063_3 #-----| False -> Block 12 #-----| True -> Block 11 -# 2048| Block 8 -# 2048| r2048_9(int) = Constant[3] : -# 2048| r2048_10(glval) = VariableAddress[#temp2048:9] : -# 2048| m2048_11(int) = Store[#temp2048:9] : &:r2048_10, r2048_9 +# 2062| Block 8 +# 2062| r2062_9(int) = Constant[3] : +# 2062| r2062_10(glval) = VariableAddress[#temp2062:9] : +# 2062| m2062_11(int) = Store[#temp2062:9] : &:r2062_10, r2062_9 #-----| Goto -> Block 7 -# 2048| Block 9 -# 2048| r2048_12(int) = Constant[5] : -# 2048| r2048_13(glval) = VariableAddress[#temp2048:9] : -# 2048| m2048_14(int) = Store[#temp2048:9] : &:r2048_13, r2048_12 +# 2062| Block 9 +# 2062| r2062_12(int) = Constant[5] : +# 2062| r2062_13(glval) = VariableAddress[#temp2062:9] : +# 2062| m2062_14(int) = Store[#temp2062:9] : &:r2062_13, r2062_12 #-----| Goto -> Block 7 -# 2049| Block 10 -# 2049| m2049_5(glval) = Phi : from 11:m2049_12, from 12:m2049_15 -# 2049| r2049_6(glval) = VariableAddress[#temp2049:6] : -# 2049| r2049_7(glval) = Load[#temp2049:6] : &:r2049_6, m2049_5 -# 2049| m2049_8(int) = Store[?] : &:r2049_7, r2049_1 -# 2049| m2049_9(unknown) = Chi : total:m2045_4, partial:m2049_8 -# 2050| v2050_1(void) = NoOp : -# 2045| v2045_13(void) = ReturnVoid : -# 2045| v2045_14(void) = AliasedUse : ~m2049_9 -# 2045| v2045_15(void) = ExitFunction : +# 2063| Block 10 +# 2063| m2063_5(glval) = Phi : from 11:m2063_12, from 12:m2063_15 +# 2063| r2063_6(glval) = VariableAddress[#temp2063:6] : +# 2063| r2063_7(glval) = Load[#temp2063:6] : &:r2063_6, m2063_5 +# 2063| m2063_8(int) = Store[?] : &:r2063_7, r2063_1 +# 2063| m2063_9(unknown) = Chi : total:m2059_4, partial:m2063_8 +# 2064| v2064_1(void) = NoOp : +# 2059| v2059_13(void) = ReturnVoid : +# 2059| v2059_14(void) = AliasedUse : ~m2063_9 +# 2059| v2059_15(void) = ExitFunction : -# 2049| Block 11 -# 2049| r2049_10(glval) = VariableAddress[x] : -# 2049| r2049_11(glval) = VariableAddress[#temp2049:6] : -# 2049| m2049_12(glval) = Store[#temp2049:6] : &:r2049_11, r2049_10 +# 2063| Block 11 +# 2063| r2063_10(glval) = VariableAddress[x] : +# 2063| r2063_11(glval) = VariableAddress[#temp2063:6] : +# 2063| m2063_12(glval) = Store[#temp2063:6] : &:r2063_11, r2063_10 #-----| Goto -> Block 10 -# 2049| Block 12 -# 2049| r2049_13(glval) = VariableAddress[y] : -# 2049| r2049_14(glval) = VariableAddress[#temp2049:6] : -# 2049| m2049_15(glval) = Store[#temp2049:6] : &:r2049_14, r2049_13 +# 2063| Block 12 +# 2063| r2063_13(glval) = VariableAddress[y] : +# 2063| r2063_14(glval) = VariableAddress[#temp2063:6] : +# 2063| m2063_15(glval) = Store[#temp2063:6] : &:r2063_14, r2063_13 #-----| Goto -> Block 10 -# 2055| void TernaryTestPodObj(bool, TernaryPodObj, TernaryPodObj, TernaryPodObj) -# 2055| Block 0 -# 2055| v2055_1(void) = EnterFunction : -# 2055| m2055_2(unknown) = AliasedDefinition : -# 2055| m2055_3(unknown) = InitializeNonLocal : -# 2055| m2055_4(unknown) = Chi : total:m2055_2, partial:m2055_3 -# 2055| r2055_5(glval) = VariableAddress[a] : -# 2055| m2055_6(bool) = InitializeParameter[a] : &:r2055_5 -# 2055| r2055_7(glval) = VariableAddress[x] : -# 2055| m2055_8(TernaryPodObj) = InitializeParameter[x] : &:r2055_7 -# 2055| r2055_9(glval) = VariableAddress[y] : -# 2055| m2055_10(TernaryPodObj) = InitializeParameter[y] : &:r2055_9 -# 2055| r2055_11(glval) = VariableAddress[z] : -# 2055| m2055_12(TernaryPodObj) = InitializeParameter[z] : &:r2055_11 -# 2056| r2056_1(glval) = VariableAddress[a] : -# 2056| r2056_2(bool) = Load[a] : &:r2056_1, m2055_6 -# 2056| v2056_3(void) = ConditionalBranch : r2056_2 +# 2069| void TernaryTestPodObj(bool, TernaryPodObj, TernaryPodObj, TernaryPodObj) +# 2069| Block 0 +# 2069| v2069_1(void) = EnterFunction : +# 2069| m2069_2(unknown) = AliasedDefinition : +# 2069| m2069_3(unknown) = InitializeNonLocal : +# 2069| m2069_4(unknown) = Chi : total:m2069_2, partial:m2069_3 +# 2069| r2069_5(glval) = VariableAddress[a] : +# 2069| m2069_6(bool) = InitializeParameter[a] : &:r2069_5 +# 2069| r2069_7(glval) = VariableAddress[x] : +# 2069| m2069_8(TernaryPodObj) = InitializeParameter[x] : &:r2069_7 +# 2069| r2069_9(glval) = VariableAddress[y] : +# 2069| m2069_10(TernaryPodObj) = InitializeParameter[y] : &:r2069_9 +# 2069| r2069_11(glval) = VariableAddress[z] : +# 2069| m2069_12(TernaryPodObj) = InitializeParameter[z] : &:r2069_11 +# 2070| r2070_1(glval) = VariableAddress[a] : +# 2070| r2070_2(bool) = Load[a] : &:r2070_1, m2069_6 +# 2070| v2070_3(void) = ConditionalBranch : r2070_2 #-----| False -> Block 3 #-----| True -> Block 2 -# 2056| Block 1 -# 2056| m2056_4(TernaryPodObj) = Phi : from 2:m2056_12, from 3:m2056_16 -# 2056| r2056_5(glval) = VariableAddress[#temp2056:9] : -# 2056| r2056_6(TernaryPodObj) = Load[#temp2056:9] : &:r2056_5, m2056_4 -# 2056| r2056_7(glval) = VariableAddress[z] : -# 2056| m2056_8(TernaryPodObj) = Store[z] : &:r2056_7, r2056_6 -# 2057| r2057_1(glval) = VariableAddress[#temp2057:9] : -# 2057| r2057_2(glval) = VariableAddress[a] : -# 2057| r2057_3(bool) = Load[a] : &:r2057_2, m2055_6 -# 2057| v2057_4(void) = ConditionalBranch : r2057_3 +# 2070| Block 1 +# 2070| m2070_4(TernaryPodObj) = Phi : from 2:m2070_12, from 3:m2070_16 +# 2070| r2070_5(glval) = VariableAddress[#temp2070:9] : +# 2070| r2070_6(TernaryPodObj) = Load[#temp2070:9] : &:r2070_5, m2070_4 +# 2070| r2070_7(glval) = VariableAddress[z] : +# 2070| m2070_8(TernaryPodObj) = Store[z] : &:r2070_7, r2070_6 +# 2071| r2071_1(glval) = VariableAddress[#temp2071:9] : +# 2071| r2071_2(glval) = VariableAddress[a] : +# 2071| r2071_3(bool) = Load[a] : &:r2071_2, m2069_6 +# 2071| v2071_4(void) = ConditionalBranch : r2071_3 #-----| False -> Block 6 #-----| True -> Block 5 -# 2056| Block 2 -# 2056| r2056_9(glval) = VariableAddress[x] : -# 2056| r2056_10(TernaryPodObj) = Load[x] : &:r2056_9, m2055_8 -# 2056| r2056_11(glval) = VariableAddress[#temp2056:9] : -# 2056| m2056_12(TernaryPodObj) = Store[#temp2056:9] : &:r2056_11, r2056_10 +# 2070| Block 2 +# 2070| r2070_9(glval) = VariableAddress[x] : +# 2070| r2070_10(TernaryPodObj) = Load[x] : &:r2070_9, m2069_8 +# 2070| r2070_11(glval) = VariableAddress[#temp2070:9] : +# 2070| m2070_12(TernaryPodObj) = Store[#temp2070:9] : &:r2070_11, r2070_10 #-----| Goto -> Block 1 -# 2056| Block 3 -# 2056| r2056_13(glval) = VariableAddress[y] : -# 2056| r2056_14(TernaryPodObj) = Load[y] : &:r2056_13, m2055_10 -# 2056| r2056_15(glval) = VariableAddress[#temp2056:9] : -# 2056| m2056_16(TernaryPodObj) = Store[#temp2056:9] : &:r2056_15, r2056_14 +# 2070| Block 3 +# 2070| r2070_13(glval) = VariableAddress[y] : +# 2070| r2070_14(TernaryPodObj) = Load[y] : &:r2070_13, m2069_10 +# 2070| r2070_15(glval) = VariableAddress[#temp2070:9] : +# 2070| m2070_16(TernaryPodObj) = Store[#temp2070:9] : &:r2070_15, r2070_14 #-----| Goto -> Block 1 -# 2057| Block 4 -# 2057| m2057_5(TernaryPodObj) = Phi : from 5:m2057_18, from 6:m2057_24 -# 2057| r2057_6(glval) = VariableAddress[#temp2057:9] : -# 2057| r2057_7(TernaryPodObj) = Load[#temp2057:9] : &:r2057_6, m2057_5 -# 2057| m2057_8(TernaryPodObj) = Store[#temp2057:9] : &:r2057_1, r2057_7 -# 2057| r2057_9(TernaryPodObj) = Load[#temp2057:9] : &:r2057_1, m2057_8 -# 2057| r2057_10(glval) = VariableAddress[z] : -# 2057| m2057_11(TernaryPodObj) = Store[z] : &:r2057_10, r2057_9 -# 2058| r2058_1(glval) = VariableAddress[#temp2058:9] : -# 2058| r2058_2(glval) = VariableAddress[a] : -# 2058| r2058_3(bool) = Load[a] : &:r2058_2, m2055_6 -# 2058| v2058_4(void) = ConditionalBranch : r2058_3 +# 2071| Block 4 +# 2071| m2071_5(TernaryPodObj) = Phi : from 5:m2071_18, from 6:m2071_24 +# 2071| r2071_6(glval) = VariableAddress[#temp2071:9] : +# 2071| r2071_7(TernaryPodObj) = Load[#temp2071:9] : &:r2071_6, m2071_5 +# 2071| m2071_8(TernaryPodObj) = Store[#temp2071:9] : &:r2071_1, r2071_7 +# 2071| r2071_9(TernaryPodObj) = Load[#temp2071:9] : &:r2071_1, m2071_8 +# 2071| r2071_10(glval) = VariableAddress[z] : +# 2071| m2071_11(TernaryPodObj) = Store[z] : &:r2071_10, r2071_9 +# 2072| r2072_1(glval) = VariableAddress[#temp2072:9] : +# 2072| r2072_2(glval) = VariableAddress[a] : +# 2072| r2072_3(bool) = Load[a] : &:r2072_2, m2069_6 +# 2072| v2072_4(void) = ConditionalBranch : r2072_3 #-----| False -> Block 9 #-----| True -> Block 8 -# 2057| Block 5 -# 2057| r2057_12(glval) = VariableAddress[#temp2057:13] : -# 2057| r2057_13(glval) = VariableAddress[x] : -# 2057| r2057_14(TernaryPodObj) = Load[x] : &:r2057_13, m2055_8 -# 2057| m2057_15(TernaryPodObj) = Store[#temp2057:13] : &:r2057_12, r2057_14 -# 2057| r2057_16(TernaryPodObj) = Load[#temp2057:13] : &:r2057_12, m2057_15 -# 2057| r2057_17(glval) = VariableAddress[#temp2057:9] : -# 2057| m2057_18(TernaryPodObj) = Store[#temp2057:9] : &:r2057_17, r2057_16 +# 2071| Block 5 +# 2071| r2071_12(glval) = VariableAddress[#temp2071:13] : +# 2071| r2071_13(glval) = VariableAddress[x] : +# 2071| r2071_14(TernaryPodObj) = Load[x] : &:r2071_13, m2069_8 +# 2071| m2071_15(TernaryPodObj) = Store[#temp2071:13] : &:r2071_12, r2071_14 +# 2071| r2071_16(TernaryPodObj) = Load[#temp2071:13] : &:r2071_12, m2071_15 +# 2071| r2071_17(glval) = VariableAddress[#temp2071:9] : +# 2071| m2071_18(TernaryPodObj) = Store[#temp2071:9] : &:r2071_17, r2071_16 #-----| Goto -> Block 4 -# 2057| Block 6 -# 2057| r2057_19(glval) = VariableAddress[#temp2057:17] : -# 2057| r2057_20(TernaryPodObj) = Constant[0] : -# 2057| m2057_21(TernaryPodObj) = Store[#temp2057:17] : &:r2057_19, r2057_20 -# 2057| r2057_22(TernaryPodObj) = Load[#temp2057:17] : &:r2057_19, m2057_21 -# 2057| r2057_23(glval) = VariableAddress[#temp2057:9] : -# 2057| m2057_24(TernaryPodObj) = Store[#temp2057:9] : &:r2057_23, r2057_22 +# 2071| Block 6 +# 2071| r2071_19(glval) = VariableAddress[#temp2071:17] : +# 2071| r2071_20(TernaryPodObj) = Constant[0] : +# 2071| m2071_21(TernaryPodObj) = Store[#temp2071:17] : &:r2071_19, r2071_20 +# 2071| r2071_22(TernaryPodObj) = Load[#temp2071:17] : &:r2071_19, m2071_21 +# 2071| r2071_23(glval) = VariableAddress[#temp2071:9] : +# 2071| m2071_24(TernaryPodObj) = Store[#temp2071:9] : &:r2071_23, r2071_22 #-----| Goto -> Block 4 -# 2058| Block 7 -# 2058| m2058_5(TernaryPodObj) = Phi : from 8:m2058_17, from 9:m2058_23 -# 2058| r2058_6(glval) = VariableAddress[#temp2058:9] : -# 2058| r2058_7(TernaryPodObj) = Load[#temp2058:9] : &:r2058_6, m2058_5 -# 2058| m2058_8(TernaryPodObj) = Store[#temp2058:9] : &:r2058_1, r2058_7 -# 2058| r2058_9(TernaryPodObj) = Load[#temp2058:9] : &:r2058_1, m2058_8 -# 2058| r2058_10(glval) = VariableAddress[z] : -# 2058| m2058_11(TernaryPodObj) = Store[z] : &:r2058_10, r2058_9 -# 2059| r2059_1(glval) = VariableAddress[#temp2059:23] : -# 2059| r2059_2(TernaryPodObj) = Constant[0] : -# 2059| m2059_3(TernaryPodObj) = Store[#temp2059:23] : &:r2059_1, r2059_2 -# 2059| r2059_4(TernaryPodObj) = Load[#temp2059:23] : &:r2059_1, m2059_3 -# 2059| r2059_5(glval) = VariableAddress[a] : -# 2059| r2059_6(bool) = Load[a] : &:r2059_5, m2055_6 -# 2059| v2059_7(void) = ConditionalBranch : r2059_6 +# 2072| Block 7 +# 2072| m2072_5(TernaryPodObj) = Phi : from 8:m2072_17, from 9:m2072_23 +# 2072| r2072_6(glval) = VariableAddress[#temp2072:9] : +# 2072| r2072_7(TernaryPodObj) = Load[#temp2072:9] : &:r2072_6, m2072_5 +# 2072| m2072_8(TernaryPodObj) = Store[#temp2072:9] : &:r2072_1, r2072_7 +# 2072| r2072_9(TernaryPodObj) = Load[#temp2072:9] : &:r2072_1, m2072_8 +# 2072| r2072_10(glval) = VariableAddress[z] : +# 2072| m2072_11(TernaryPodObj) = Store[z] : &:r2072_10, r2072_9 +# 2073| r2073_1(glval) = VariableAddress[#temp2073:23] : +# 2073| r2073_2(TernaryPodObj) = Constant[0] : +# 2073| m2073_3(TernaryPodObj) = Store[#temp2073:23] : &:r2073_1, r2073_2 +# 2073| r2073_4(TernaryPodObj) = Load[#temp2073:23] : &:r2073_1, m2073_3 +# 2073| r2073_5(glval) = VariableAddress[a] : +# 2073| r2073_6(bool) = Load[a] : &:r2073_5, m2069_6 +# 2073| v2073_7(void) = ConditionalBranch : r2073_6 #-----| False -> Block 12 #-----| True -> Block 11 -# 2058| Block 8 -# 2058| r2058_12(glval) = VariableAddress[#temp2058:13] : -# 2058| r2058_13(TernaryPodObj) = Constant[0] : -# 2058| m2058_14(TernaryPodObj) = Store[#temp2058:13] : &:r2058_12, r2058_13 -# 2058| r2058_15(TernaryPodObj) = Load[#temp2058:13] : &:r2058_12, m2058_14 -# 2058| r2058_16(glval) = VariableAddress[#temp2058:9] : -# 2058| m2058_17(TernaryPodObj) = Store[#temp2058:9] : &:r2058_16, r2058_15 +# 2072| Block 8 +# 2072| r2072_12(glval) = VariableAddress[#temp2072:13] : +# 2072| r2072_13(TernaryPodObj) = Constant[0] : +# 2072| m2072_14(TernaryPodObj) = Store[#temp2072:13] : &:r2072_12, r2072_13 +# 2072| r2072_15(TernaryPodObj) = Load[#temp2072:13] : &:r2072_12, m2072_14 +# 2072| r2072_16(glval) = VariableAddress[#temp2072:9] : +# 2072| m2072_17(TernaryPodObj) = Store[#temp2072:9] : &:r2072_16, r2072_15 #-----| Goto -> Block 7 -# 2058| Block 9 -# 2058| r2058_18(glval) = VariableAddress[#temp2058:31] : -# 2058| r2058_19(TernaryPodObj) = Constant[0] : -# 2058| m2058_20(TernaryPodObj) = Store[#temp2058:31] : &:r2058_18, r2058_19 -# 2058| r2058_21(TernaryPodObj) = Load[#temp2058:31] : &:r2058_18, m2058_20 -# 2058| r2058_22(glval) = VariableAddress[#temp2058:9] : -# 2058| m2058_23(TernaryPodObj) = Store[#temp2058:9] : &:r2058_22, r2058_21 +# 2072| Block 9 +# 2072| r2072_18(glval) = VariableAddress[#temp2072:31] : +# 2072| r2072_19(TernaryPodObj) = Constant[0] : +# 2072| m2072_20(TernaryPodObj) = Store[#temp2072:31] : &:r2072_18, r2072_19 +# 2072| r2072_21(TernaryPodObj) = Load[#temp2072:31] : &:r2072_18, m2072_20 +# 2072| r2072_22(glval) = VariableAddress[#temp2072:9] : +# 2072| m2072_23(TernaryPodObj) = Store[#temp2072:9] : &:r2072_22, r2072_21 #-----| Goto -> Block 7 -# 2059| Block 10 -# 2059| m2059_8(TernaryPodObj) = Phi : from 11:m2059_18, from 12:m2059_22 -# 2059| r2059_9(glval) = VariableAddress[#temp2059:10] : -# 2059| r2059_10(TernaryPodObj) = Load[#temp2059:10] : &:r2059_9, m2059_8 -# 2059| r2059_11(glval) = VariableAddress[z] : -# 2059| m2059_12(TernaryPodObj) = Store[z] : &:r2059_11, r2059_10 -# 2059| r2059_13(glval) = CopyValue : r2059_11 -# 2059| m2059_14(TernaryPodObj) = Store[?] : &:r2059_13, r2059_4 -# 2060| v2060_1(void) = NoOp : -# 2055| v2055_13(void) = ReturnVoid : -# 2055| v2055_14(void) = AliasedUse : m2055_3 -# 2055| v2055_15(void) = ExitFunction : +# 2073| Block 10 +# 2073| m2073_8(TernaryPodObj) = Phi : from 11:m2073_18, from 12:m2073_22 +# 2073| r2073_9(glval) = VariableAddress[#temp2073:10] : +# 2073| r2073_10(TernaryPodObj) = Load[#temp2073:10] : &:r2073_9, m2073_8 +# 2073| r2073_11(glval) = VariableAddress[z] : +# 2073| m2073_12(TernaryPodObj) = Store[z] : &:r2073_11, r2073_10 +# 2073| r2073_13(glval) = CopyValue : r2073_11 +# 2073| m2073_14(TernaryPodObj) = Store[?] : &:r2073_13, r2073_4 +# 2074| v2074_1(void) = NoOp : +# 2069| v2069_13(void) = ReturnVoid : +# 2069| v2069_14(void) = AliasedUse : m2069_3 +# 2069| v2069_15(void) = ExitFunction : -# 2059| Block 11 -# 2059| r2059_15(glval) = VariableAddress[x] : -# 2059| r2059_16(TernaryPodObj) = Load[x] : &:r2059_15, m2055_8 -# 2059| r2059_17(glval) = VariableAddress[#temp2059:10] : -# 2059| m2059_18(TernaryPodObj) = Store[#temp2059:10] : &:r2059_17, r2059_16 +# 2073| Block 11 +# 2073| r2073_15(glval) = VariableAddress[x] : +# 2073| r2073_16(TernaryPodObj) = Load[x] : &:r2073_15, m2069_8 +# 2073| r2073_17(glval) = VariableAddress[#temp2073:10] : +# 2073| m2073_18(TernaryPodObj) = Store[#temp2073:10] : &:r2073_17, r2073_16 #-----| Goto -> Block 10 -# 2059| Block 12 -# 2059| r2059_19(glval) = VariableAddress[y] : -# 2059| r2059_20(TernaryPodObj) = Load[y] : &:r2059_19, m2055_10 -# 2059| r2059_21(glval) = VariableAddress[#temp2059:10] : -# 2059| m2059_22(TernaryPodObj) = Store[#temp2059:10] : &:r2059_21, r2059_20 +# 2073| Block 12 +# 2073| r2073_19(glval) = VariableAddress[y] : +# 2073| r2073_20(TernaryPodObj) = Load[y] : &:r2073_19, m2069_10 +# 2073| r2073_21(glval) = VariableAddress[#temp2073:10] : +# 2073| m2073_22(TernaryPodObj) = Store[#temp2073:10] : &:r2073_21, r2073_20 #-----| Goto -> Block 10 -# 2062| TernaryNonPodObj& TernaryNonPodObj::operator=(TernaryNonPodObj const&) -# 2062| Block 0 -# 2062| v2062_1(void) = EnterFunction : -# 2062| m2062_2(unknown) = AliasedDefinition : -# 2062| m2062_3(unknown) = InitializeNonLocal : -# 2062| m2062_4(unknown) = Chi : total:m2062_2, partial:m2062_3 -# 2062| r2062_5(glval) = VariableAddress[#this] : -# 2062| m2062_6(glval) = InitializeParameter[#this] : &:r2062_5 -# 2062| r2062_7(glval) = Load[#this] : &:r2062_5, m2062_6 -# 2062| m2062_8(TernaryNonPodObj) = InitializeIndirection[#this] : &:r2062_7 +# 2076| TernaryNonPodObj& TernaryNonPodObj::operator=(TernaryNonPodObj const&) +# 2076| Block 0 +# 2076| v2076_1(void) = EnterFunction : +# 2076| m2076_2(unknown) = AliasedDefinition : +# 2076| m2076_3(unknown) = InitializeNonLocal : +# 2076| m2076_4(unknown) = Chi : total:m2076_2, partial:m2076_3 +# 2076| r2076_5(glval) = VariableAddress[#this] : +# 2076| m2076_6(glval) = InitializeParameter[#this] : &:r2076_5 +# 2076| r2076_7(glval) = Load[#this] : &:r2076_5, m2076_6 +# 2076| m2076_8(TernaryNonPodObj) = InitializeIndirection[#this] : &:r2076_7 #-----| r0_1(glval) = VariableAddress[(unnamed parameter 0)] : #-----| m0_2(TernaryNonPodObj &) = InitializeParameter[(unnamed parameter 0)] : &:r0_1 #-----| r0_3(TernaryNonPodObj &) = Load[(unnamed parameter 0)] : &:r0_1, m0_2 #-----| m0_4(unknown) = InitializeIndirection[(unnamed parameter 0)] : &:r0_3 #-----| r0_5(glval) = VariableAddress[#return] : #-----| r0_6(glval) = VariableAddress[#this] : -#-----| r0_7(TernaryNonPodObj *) = Load[#this] : &:r0_6, m2062_6 +#-----| r0_7(TernaryNonPodObj *) = Load[#this] : &:r0_6, m2076_6 #-----| r0_8(glval) = CopyValue : r0_7 #-----| r0_9(TernaryNonPodObj &) = CopyValue : r0_8 #-----| m0_10(TernaryNonPodObj &) = Store[#return] : &:r0_5, r0_9 -# 2062| v2062_9(void) = ReturnIndirection[#this] : &:r2062_7, m2062_8 +# 2076| v2076_9(void) = ReturnIndirection[#this] : &:r2076_7, m2076_8 #-----| v0_11(void) = ReturnIndirection[(unnamed parameter 0)] : &:r0_3, m0_4 -# 2062| r2062_10(glval) = VariableAddress[#return] : -# 2062| v2062_11(void) = ReturnValue : &:r2062_10, m0_10 -# 2062| v2062_12(void) = AliasedUse : m2062_3 -# 2062| v2062_13(void) = ExitFunction : +# 2076| r2076_10(glval) = VariableAddress[#return] : +# 2076| v2076_11(void) = ReturnValue : &:r2076_10, m0_10 +# 2076| v2076_12(void) = AliasedUse : m2076_3 +# 2076| v2076_13(void) = ExitFunction : -# 2062| void TernaryNonPodObj::TernaryNonPodObj() -# 2062| Block 0 -# 2062| v2062_1(void) = EnterFunction : -# 2062| m2062_2(unknown) = AliasedDefinition : -# 2062| m2062_3(unknown) = InitializeNonLocal : -# 2062| m2062_4(unknown) = Chi : total:m2062_2, partial:m2062_3 -# 2062| r2062_5(glval) = VariableAddress[#this] : -# 2062| m2062_6(glval) = InitializeParameter[#this] : &:r2062_5 -# 2062| r2062_7(glval) = Load[#this] : &:r2062_5, m2062_6 -# 2062| m2062_8(TernaryNonPodObj) = InitializeIndirection[#this] : &:r2062_7 -# 2062| v2062_9(void) = NoOp : -# 2062| v2062_10(void) = ReturnIndirection[#this] : &:r2062_7, m2062_8 -# 2062| v2062_11(void) = ReturnVoid : -# 2062| v2062_12(void) = AliasedUse : m2062_3 -# 2062| v2062_13(void) = ExitFunction : +# 2076| void TernaryNonPodObj::TernaryNonPodObj() +# 2076| Block 0 +# 2076| v2076_1(void) = EnterFunction : +# 2076| m2076_2(unknown) = AliasedDefinition : +# 2076| m2076_3(unknown) = InitializeNonLocal : +# 2076| m2076_4(unknown) = Chi : total:m2076_2, partial:m2076_3 +# 2076| r2076_5(glval) = VariableAddress[#this] : +# 2076| m2076_6(glval) = InitializeParameter[#this] : &:r2076_5 +# 2076| r2076_7(glval) = Load[#this] : &:r2076_5, m2076_6 +# 2076| m2076_8(TernaryNonPodObj) = InitializeIndirection[#this] : &:r2076_7 +# 2076| v2076_9(void) = NoOp : +# 2076| v2076_10(void) = ReturnIndirection[#this] : &:r2076_7, m2076_8 +# 2076| v2076_11(void) = ReturnVoid : +# 2076| v2076_12(void) = AliasedUse : m2076_3 +# 2076| v2076_13(void) = ExitFunction : -# 2062| void TernaryNonPodObj::TernaryNonPodObj(TernaryNonPodObj const&) -# 2062| Block 0 -# 2062| v2062_1(void) = EnterFunction : -# 2062| m2062_2(unknown) = AliasedDefinition : -# 2062| m2062_3(unknown) = InitializeNonLocal : -# 2062| m2062_4(unknown) = Chi : total:m2062_2, partial:m2062_3 -# 2062| r2062_5(glval) = VariableAddress[#this] : -# 2062| m2062_6(glval) = InitializeParameter[#this] : &:r2062_5 -# 2062| r2062_7(glval) = Load[#this] : &:r2062_5, m2062_6 -# 2062| m2062_8(TernaryNonPodObj) = InitializeIndirection[#this] : &:r2062_7 +# 2076| void TernaryNonPodObj::TernaryNonPodObj(TernaryNonPodObj const&) +# 2076| Block 0 +# 2076| v2076_1(void) = EnterFunction : +# 2076| m2076_2(unknown) = AliasedDefinition : +# 2076| m2076_3(unknown) = InitializeNonLocal : +# 2076| m2076_4(unknown) = Chi : total:m2076_2, partial:m2076_3 +# 2076| r2076_5(glval) = VariableAddress[#this] : +# 2076| m2076_6(glval) = InitializeParameter[#this] : &:r2076_5 +# 2076| r2076_7(glval) = Load[#this] : &:r2076_5, m2076_6 +# 2076| m2076_8(TernaryNonPodObj) = InitializeIndirection[#this] : &:r2076_7 #-----| r0_1(glval) = VariableAddress[(unnamed parameter 0)] : #-----| m0_2(TernaryNonPodObj &) = InitializeParameter[(unnamed parameter 0)] : &:r0_1 #-----| r0_3(TernaryNonPodObj &) = Load[(unnamed parameter 0)] : &:r0_1, m0_2 #-----| m0_4(unknown) = InitializeIndirection[(unnamed parameter 0)] : &:r0_3 -# 2062| v2062_9(void) = NoOp : -# 2062| v2062_10(void) = ReturnIndirection[#this] : &:r2062_7, m2062_8 +# 2076| v2076_9(void) = NoOp : +# 2076| v2076_10(void) = ReturnIndirection[#this] : &:r2076_7, m2076_8 #-----| v0_5(void) = ReturnIndirection[(unnamed parameter 0)] : &:r0_3, m0_4 -# 2062| v2062_11(void) = ReturnVoid : -# 2062| v2062_12(void) = AliasedUse : m2062_3 -# 2062| v2062_13(void) = ExitFunction : +# 2076| v2076_11(void) = ReturnVoid : +# 2076| v2076_12(void) = AliasedUse : m2076_3 +# 2076| v2076_13(void) = ExitFunction : -# 2063| void TernaryNonPodObj::~TernaryNonPodObj() -# 2063| Block 0 -# 2063| v2063_1(void) = EnterFunction : -# 2063| m2063_2(unknown) = AliasedDefinition : -# 2063| m2063_3(unknown) = InitializeNonLocal : -# 2063| m2063_4(unknown) = Chi : total:m2063_2, partial:m2063_3 -# 2063| r2063_5(glval) = VariableAddress[#this] : -# 2063| m2063_6(glval) = InitializeParameter[#this] : &:r2063_5 -# 2063| r2063_7(glval) = Load[#this] : &:r2063_5, m2063_6 -# 2063| m2063_8(TernaryNonPodObj) = InitializeIndirection[#this] : &:r2063_7 -# 2063| v2063_9(void) = NoOp : -# 2063| v2063_10(void) = ReturnIndirection[#this] : &:r2063_7, m2063_8 -# 2063| v2063_11(void) = ReturnVoid : -# 2063| v2063_12(void) = AliasedUse : m2063_3 -# 2063| v2063_13(void) = ExitFunction : +# 2077| void TernaryNonPodObj::~TernaryNonPodObj() +# 2077| Block 0 +# 2077| v2077_1(void) = EnterFunction : +# 2077| m2077_2(unknown) = AliasedDefinition : +# 2077| m2077_3(unknown) = InitializeNonLocal : +# 2077| m2077_4(unknown) = Chi : total:m2077_2, partial:m2077_3 +# 2077| r2077_5(glval) = VariableAddress[#this] : +# 2077| m2077_6(glval) = InitializeParameter[#this] : &:r2077_5 +# 2077| r2077_7(glval) = Load[#this] : &:r2077_5, m2077_6 +# 2077| m2077_8(TernaryNonPodObj) = InitializeIndirection[#this] : &:r2077_7 +# 2077| v2077_9(void) = NoOp : +# 2077| v2077_10(void) = ReturnIndirection[#this] : &:r2077_7, m2077_8 +# 2077| v2077_11(void) = ReturnVoid : +# 2077| v2077_12(void) = AliasedUse : m2077_3 +# 2077| v2077_13(void) = ExitFunction : -# 2066| void TernaryTestNonPodObj(bool, TernaryNonPodObj, TernaryNonPodObj, TernaryNonPodObj) -# 2066| Block 0 -# 2066| v2066_1(void) = EnterFunction : -# 2066| m2066_2(unknown) = AliasedDefinition : -# 2066| m2066_3(unknown) = InitializeNonLocal : -# 2066| m2066_4(unknown) = Chi : total:m2066_2, partial:m2066_3 -# 2066| r2066_5(glval) = VariableAddress[a] : -# 2066| m2066_6(bool) = InitializeParameter[a] : &:r2066_5 -# 2066| r2066_7(glval) = VariableAddress[x] : -# 2066| m2066_8(TernaryNonPodObj) = InitializeParameter[x] : &:r2066_7 -# 2066| r2066_9(glval) = VariableAddress[y] : -# 2066| m2066_10(TernaryNonPodObj) = InitializeParameter[y] : &:r2066_9 -# 2066| r2066_11(glval) = VariableAddress[z] : -# 2066| m2066_12(TernaryNonPodObj) = InitializeParameter[z] : &:r2066_11 -# 2067| r2067_1(glval) = VariableAddress[z] : -# 2067| r2067_2(glval) = FunctionAddress[operator=] : -# 2067| r2067_3(glval) = VariableAddress[a] : -# 2067| r2067_4(bool) = Load[a] : &:r2067_3, m2066_6 -# 2067| v2067_5(void) = ConditionalBranch : r2067_4 +# 2080| void TernaryTestNonPodObj(bool, TernaryNonPodObj, TernaryNonPodObj, TernaryNonPodObj) +# 2080| Block 0 +# 2080| v2080_1(void) = EnterFunction : +# 2080| m2080_2(unknown) = AliasedDefinition : +# 2080| m2080_3(unknown) = InitializeNonLocal : +# 2080| m2080_4(unknown) = Chi : total:m2080_2, partial:m2080_3 +# 2080| r2080_5(glval) = VariableAddress[a] : +# 2080| m2080_6(bool) = InitializeParameter[a] : &:r2080_5 +# 2080| r2080_7(glval) = VariableAddress[x] : +# 2080| m2080_8(TernaryNonPodObj) = InitializeParameter[x] : &:r2080_7 +# 2080| r2080_9(glval) = VariableAddress[y] : +# 2080| m2080_10(TernaryNonPodObj) = InitializeParameter[y] : &:r2080_9 +# 2080| r2080_11(glval) = VariableAddress[z] : +# 2080| m2080_12(TernaryNonPodObj) = InitializeParameter[z] : &:r2080_11 +# 2081| r2081_1(glval) = VariableAddress[z] : +# 2081| r2081_2(glval) = FunctionAddress[operator=] : +# 2081| r2081_3(glval) = VariableAddress[a] : +# 2081| r2081_4(bool) = Load[a] : &:r2081_3, m2080_6 +# 2081| v2081_5(void) = ConditionalBranch : r2081_4 #-----| False -> Block 3 #-----| True -> Block 2 -# 2067| Block 1 -# 2067| m2067_6(glval) = Phi : from 2:m2067_21, from 3:m2067_24 -# 2067| r2067_7(glval) = VariableAddress[#temp2067:9] : -# 2067| r2067_8(glval) = Load[#temp2067:9] : &:r2067_7, m2067_6 -# 2067| r2067_9(glval) = Convert : r2067_8 -# 2067| r2067_10(TernaryNonPodObj &) = CopyValue : r2067_9 -# 2067| r2067_11(TernaryNonPodObj &) = Call[operator=] : func:r2067_2, this:r2067_1, 0:r2067_10 -# 2067| m2067_12(unknown) = ^CallSideEffect : ~m2066_4 -# 2067| m2067_13(unknown) = Chi : total:m2066_4, partial:m2067_12 -# 2067| v2067_14(void) = ^IndirectReadSideEffect[-1] : &:r2067_1, m2066_12 -# 2067| v2067_15(void) = ^BufferReadSideEffect[0] : &:r2067_10, ~m2067_13 -# 2067| m2067_16(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2067_1 -# 2067| m2067_17(TernaryNonPodObj) = Chi : total:m2066_12, partial:m2067_16 -# 2067| r2067_18(glval) = CopyValue : r2067_11 -# 2068| r2068_1(glval) = VariableAddress[z] : -# 2068| r2068_2(glval) = FunctionAddress[operator=] : -# 2068| r2068_3(glval) = VariableAddress[#temp2068:9] : -# 2068| r2068_4(glval) = VariableAddress[a] : -# 2068| r2068_5(bool) = Load[a] : &:r2068_4, m2066_6 -# 2068| v2068_6(void) = ConditionalBranch : r2068_5 +# 2081| Block 1 +# 2081| m2081_6(glval) = Phi : from 2:m2081_21, from 3:m2081_24 +# 2081| r2081_7(glval) = VariableAddress[#temp2081:9] : +# 2081| r2081_8(glval) = Load[#temp2081:9] : &:r2081_7, m2081_6 +# 2081| r2081_9(glval) = Convert : r2081_8 +# 2081| r2081_10(TernaryNonPodObj &) = CopyValue : r2081_9 +# 2081| r2081_11(TernaryNonPodObj &) = Call[operator=] : func:r2081_2, this:r2081_1, 0:r2081_10 +# 2081| m2081_12(unknown) = ^CallSideEffect : ~m2080_4 +# 2081| m2081_13(unknown) = Chi : total:m2080_4, partial:m2081_12 +# 2081| v2081_14(void) = ^IndirectReadSideEffect[-1] : &:r2081_1, m2080_12 +# 2081| v2081_15(void) = ^BufferReadSideEffect[0] : &:r2081_10, ~m2081_13 +# 2081| m2081_16(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2081_1 +# 2081| m2081_17(TernaryNonPodObj) = Chi : total:m2080_12, partial:m2081_16 +# 2081| r2081_18(glval) = CopyValue : r2081_11 +# 2082| r2082_1(glval) = VariableAddress[z] : +# 2082| r2082_2(glval) = FunctionAddress[operator=] : +# 2082| r2082_3(glval) = VariableAddress[#temp2082:9] : +# 2082| r2082_4(glval) = VariableAddress[a] : +# 2082| r2082_5(bool) = Load[a] : &:r2082_4, m2080_6 +# 2082| v2082_6(void) = ConditionalBranch : r2082_5 #-----| False -> Block 6 #-----| True -> Block 5 -# 2067| Block 2 -# 2067| r2067_19(glval) = VariableAddress[x] : -# 2067| r2067_20(glval) = VariableAddress[#temp2067:9] : -# 2067| m2067_21(glval) = Store[#temp2067:9] : &:r2067_20, r2067_19 +# 2081| Block 2 +# 2081| r2081_19(glval) = VariableAddress[x] : +# 2081| r2081_20(glval) = VariableAddress[#temp2081:9] : +# 2081| m2081_21(glval) = Store[#temp2081:9] : &:r2081_20, r2081_19 #-----| Goto -> Block 1 -# 2067| Block 3 -# 2067| r2067_22(glval) = VariableAddress[y] : -# 2067| r2067_23(glval) = VariableAddress[#temp2067:9] : -# 2067| m2067_24(glval) = Store[#temp2067:9] : &:r2067_23, r2067_22 +# 2081| Block 3 +# 2081| r2081_22(glval) = VariableAddress[y] : +# 2081| r2081_23(glval) = VariableAddress[#temp2081:9] : +# 2081| m2081_24(glval) = Store[#temp2081:9] : &:r2081_23, r2081_22 #-----| Goto -> Block 1 -# 2068| Block 4 -# 2068| m2068_7(unknown) = Phi : from 5:~m2068_30, from 6:~m2068_42 -# 2068| m2068_8(TernaryNonPodObj) = Phi : from 5:m2068_36, from 6:m2068_47 -# 2068| r2068_9(glval) = VariableAddress[#temp2068:9] : -# 2068| r2068_10(TernaryNonPodObj) = Load[#temp2068:9] : &:r2068_9, m2068_8 -# 2068| m2068_11(TernaryNonPodObj) = Store[#temp2068:9] : &:r2068_3, r2068_10 -# 2068| r2068_12(glval) = Convert : r2068_3 -# 2068| r2068_13(TernaryNonPodObj &) = CopyValue : r2068_12 -# 2068| r2068_14(TernaryNonPodObj &) = Call[operator=] : func:r2068_2, this:r2068_1, 0:r2068_13 -# 2068| m2068_15(unknown) = ^CallSideEffect : ~m2068_7 -# 2068| m2068_16(unknown) = Chi : total:m2068_7, partial:m2068_15 -# 2068| v2068_17(void) = ^IndirectReadSideEffect[-1] : &:r2068_1, m2067_17 -# 2068| v2068_18(void) = ^BufferReadSideEffect[0] : &:r2068_13, ~m2068_11 -# 2068| m2068_19(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2068_1 -# 2068| m2068_20(TernaryNonPodObj) = Chi : total:m2067_17, partial:m2068_19 -# 2068| r2068_21(glval) = CopyValue : r2068_14 -# 2069| r2069_1(glval) = VariableAddress[z] : -# 2069| r2069_2(glval) = FunctionAddress[operator=] : -# 2069| r2069_3(glval) = VariableAddress[#temp2069:9] : -# 2069| r2069_4(glval) = VariableAddress[a] : -# 2069| r2069_5(bool) = Load[a] : &:r2069_4, m2066_6 -# 2069| v2069_6(void) = ConditionalBranch : r2069_5 +# 2082| Block 4 +# 2082| m2082_7(unknown) = Phi : from 5:~m2082_30, from 6:~m2082_42 +# 2082| m2082_8(TernaryNonPodObj) = Phi : from 5:m2082_36, from 6:m2082_47 +# 2082| r2082_9(glval) = VariableAddress[#temp2082:9] : +# 2082| r2082_10(TernaryNonPodObj) = Load[#temp2082:9] : &:r2082_9, m2082_8 +# 2082| m2082_11(TernaryNonPodObj) = Store[#temp2082:9] : &:r2082_3, r2082_10 +# 2082| r2082_12(glval) = Convert : r2082_3 +# 2082| r2082_13(TernaryNonPodObj &) = CopyValue : r2082_12 +# 2082| r2082_14(TernaryNonPodObj &) = Call[operator=] : func:r2082_2, this:r2082_1, 0:r2082_13 +# 2082| m2082_15(unknown) = ^CallSideEffect : ~m2082_7 +# 2082| m2082_16(unknown) = Chi : total:m2082_7, partial:m2082_15 +# 2082| v2082_17(void) = ^IndirectReadSideEffect[-1] : &:r2082_1, m2081_17 +# 2082| v2082_18(void) = ^BufferReadSideEffect[0] : &:r2082_13, ~m2082_11 +# 2082| m2082_19(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2082_1 +# 2082| m2082_20(TernaryNonPodObj) = Chi : total:m2081_17, partial:m2082_19 +# 2082| r2082_21(glval) = CopyValue : r2082_14 +# 2083| r2083_1(glval) = VariableAddress[z] : +# 2083| r2083_2(glval) = FunctionAddress[operator=] : +# 2083| r2083_3(glval) = VariableAddress[#temp2083:9] : +# 2083| r2083_4(glval) = VariableAddress[a] : +# 2083| r2083_5(bool) = Load[a] : &:r2083_4, m2080_6 +# 2083| v2083_6(void) = ConditionalBranch : r2083_5 #-----| False -> Block 9 #-----| True -> Block 8 -# 2068| Block 5 -# 2068| r2068_22(glval) = VariableAddress[#temp2068:13] : -# 2068| m2068_23(TernaryNonPodObj) = Uninitialized[#temp2068:13] : &:r2068_22 -# 2068| r2068_24(glval) = FunctionAddress[TernaryNonPodObj] : -# 2068| r2068_25(glval) = VariableAddress[x] : -# 2068| r2068_26(glval) = Convert : r2068_25 -# 2068| r2068_27(TernaryNonPodObj &) = CopyValue : r2068_26 -# 2068| v2068_28(void) = Call[TernaryNonPodObj] : func:r2068_24, this:r2068_22, 0:r2068_27 -# 2068| m2068_29(unknown) = ^CallSideEffect : ~m2067_13 -# 2068| m2068_30(unknown) = Chi : total:m2067_13, partial:m2068_29 -# 2068| v2068_31(void) = ^BufferReadSideEffect[0] : &:r2068_27, ~m2066_8 -# 2068| m2068_32(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2068_22 -# 2068| m2068_33(TernaryNonPodObj) = Chi : total:m2068_23, partial:m2068_32 -# 2068| r2068_34(TernaryNonPodObj) = Load[#temp2068:13] : &:r2068_22, m2068_33 -# 2068| r2068_35(glval) = VariableAddress[#temp2068:9] : -# 2068| m2068_36(TernaryNonPodObj) = Store[#temp2068:9] : &:r2068_35, r2068_34 +# 2082| Block 5 +# 2082| r2082_22(glval) = VariableAddress[#temp2082:13] : +# 2082| m2082_23(TernaryNonPodObj) = Uninitialized[#temp2082:13] : &:r2082_22 +# 2082| r2082_24(glval) = FunctionAddress[TernaryNonPodObj] : +# 2082| r2082_25(glval) = VariableAddress[x] : +# 2082| r2082_26(glval) = Convert : r2082_25 +# 2082| r2082_27(TernaryNonPodObj &) = CopyValue : r2082_26 +# 2082| v2082_28(void) = Call[TernaryNonPodObj] : func:r2082_24, this:r2082_22, 0:r2082_27 +# 2082| m2082_29(unknown) = ^CallSideEffect : ~m2081_13 +# 2082| m2082_30(unknown) = Chi : total:m2081_13, partial:m2082_29 +# 2082| v2082_31(void) = ^BufferReadSideEffect[0] : &:r2082_27, ~m2080_8 +# 2082| m2082_32(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2082_22 +# 2082| m2082_33(TernaryNonPodObj) = Chi : total:m2082_23, partial:m2082_32 +# 2082| r2082_34(TernaryNonPodObj) = Load[#temp2082:13] : &:r2082_22, m2082_33 +# 2082| r2082_35(glval) = VariableAddress[#temp2082:9] : +# 2082| m2082_36(TernaryNonPodObj) = Store[#temp2082:9] : &:r2082_35, r2082_34 #-----| Goto -> Block 4 -# 2068| Block 6 -# 2068| r2068_37(glval) = VariableAddress[#temp2068:17] : -# 2068| m2068_38(TernaryNonPodObj) = Uninitialized[#temp2068:17] : &:r2068_37 -# 2068| r2068_39(glval) = FunctionAddress[TernaryNonPodObj] : -# 2068| v2068_40(void) = Call[TernaryNonPodObj] : func:r2068_39, this:r2068_37 -# 2068| m2068_41(unknown) = ^CallSideEffect : ~m2067_13 -# 2068| m2068_42(unknown) = Chi : total:m2067_13, partial:m2068_41 -# 2068| m2068_43(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2068_37 -# 2068| m2068_44(TernaryNonPodObj) = Chi : total:m2068_38, partial:m2068_43 -# 2068| r2068_45(TernaryNonPodObj) = Load[#temp2068:17] : &:r2068_37, m2068_44 -# 2068| r2068_46(glval) = VariableAddress[#temp2068:9] : -# 2068| m2068_47(TernaryNonPodObj) = Store[#temp2068:9] : &:r2068_46, r2068_45 +# 2082| Block 6 +# 2082| r2082_37(glval) = VariableAddress[#temp2082:17] : +# 2082| m2082_38(TernaryNonPodObj) = Uninitialized[#temp2082:17] : &:r2082_37 +# 2082| r2082_39(glval) = FunctionAddress[TernaryNonPodObj] : +# 2082| v2082_40(void) = Call[TernaryNonPodObj] : func:r2082_39, this:r2082_37 +# 2082| m2082_41(unknown) = ^CallSideEffect : ~m2081_13 +# 2082| m2082_42(unknown) = Chi : total:m2081_13, partial:m2082_41 +# 2082| m2082_43(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2082_37 +# 2082| m2082_44(TernaryNonPodObj) = Chi : total:m2082_38, partial:m2082_43 +# 2082| r2082_45(TernaryNonPodObj) = Load[#temp2082:17] : &:r2082_37, m2082_44 +# 2082| r2082_46(glval) = VariableAddress[#temp2082:9] : +# 2082| m2082_47(TernaryNonPodObj) = Store[#temp2082:9] : &:r2082_46, r2082_45 #-----| Goto -> Block 4 -# 2069| Block 7 -# 2069| m2069_7(unknown) = Phi : from 8:~m2069_27, from 9:~m2069_38 -# 2069| m2069_8(TernaryNonPodObj) = Phi : from 8:m2069_32, from 9:m2069_43 -# 2069| r2069_9(glval) = VariableAddress[#temp2069:9] : -# 2069| r2069_10(TernaryNonPodObj) = Load[#temp2069:9] : &:r2069_9, m2069_8 -# 2069| m2069_11(TernaryNonPodObj) = Store[#temp2069:9] : &:r2069_3, r2069_10 -# 2069| r2069_12(glval) = Convert : r2069_3 -# 2069| r2069_13(TernaryNonPodObj &) = CopyValue : r2069_12 -# 2069| r2069_14(TernaryNonPodObj &) = Call[operator=] : func:r2069_2, this:r2069_1, 0:r2069_13 -# 2069| m2069_15(unknown) = ^CallSideEffect : ~m2069_7 -# 2069| m2069_16(unknown) = Chi : total:m2069_7, partial:m2069_15 -# 2069| v2069_17(void) = ^IndirectReadSideEffect[-1] : &:r2069_1, m2068_20 -# 2069| v2069_18(void) = ^BufferReadSideEffect[0] : &:r2069_13, ~m2069_11 -# 2069| m2069_19(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2069_1 -# 2069| m2069_20(TernaryNonPodObj) = Chi : total:m2068_20, partial:m2069_19 -# 2069| r2069_21(glval) = CopyValue : r2069_14 -# 2070| r2070_1(glval) = VariableAddress[z] : -# 2070| r2070_2(glval) = FunctionAddress[operator=] : -# 2070| r2070_3(glval) = VariableAddress[a] : -# 2070| r2070_4(bool) = Load[a] : &:r2070_3, m2066_6 -# 2070| v2070_5(void) = ConditionalBranch : r2070_4 +# 2083| Block 7 +# 2083| m2083_7(unknown) = Phi : from 8:~m2083_27, from 9:~m2083_38 +# 2083| m2083_8(TernaryNonPodObj) = Phi : from 8:m2083_32, from 9:m2083_43 +# 2083| r2083_9(glval) = VariableAddress[#temp2083:9] : +# 2083| r2083_10(TernaryNonPodObj) = Load[#temp2083:9] : &:r2083_9, m2083_8 +# 2083| m2083_11(TernaryNonPodObj) = Store[#temp2083:9] : &:r2083_3, r2083_10 +# 2083| r2083_12(glval) = Convert : r2083_3 +# 2083| r2083_13(TernaryNonPodObj &) = CopyValue : r2083_12 +# 2083| r2083_14(TernaryNonPodObj &) = Call[operator=] : func:r2083_2, this:r2083_1, 0:r2083_13 +# 2083| m2083_15(unknown) = ^CallSideEffect : ~m2083_7 +# 2083| m2083_16(unknown) = Chi : total:m2083_7, partial:m2083_15 +# 2083| v2083_17(void) = ^IndirectReadSideEffect[-1] : &:r2083_1, m2082_20 +# 2083| v2083_18(void) = ^BufferReadSideEffect[0] : &:r2083_13, ~m2083_11 +# 2083| m2083_19(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2083_1 +# 2083| m2083_20(TernaryNonPodObj) = Chi : total:m2082_20, partial:m2083_19 +# 2083| r2083_21(glval) = CopyValue : r2083_14 +# 2084| r2084_1(glval) = VariableAddress[z] : +# 2084| r2084_2(glval) = FunctionAddress[operator=] : +# 2084| r2084_3(glval) = VariableAddress[a] : +# 2084| r2084_4(bool) = Load[a] : &:r2084_3, m2080_6 +# 2084| v2084_5(void) = ConditionalBranch : r2084_4 #-----| False -> Block 12 #-----| True -> Block 11 -# 2069| Block 8 -# 2069| r2069_22(glval) = VariableAddress[#temp2069:13] : -# 2069| m2069_23(TernaryNonPodObj) = Uninitialized[#temp2069:13] : &:r2069_22 -# 2069| r2069_24(glval) = FunctionAddress[TernaryNonPodObj] : -# 2069| v2069_25(void) = Call[TernaryNonPodObj] : func:r2069_24, this:r2069_22 -# 2069| m2069_26(unknown) = ^CallSideEffect : ~m2068_16 -# 2069| m2069_27(unknown) = Chi : total:m2068_16, partial:m2069_26 -# 2069| m2069_28(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2069_22 -# 2069| m2069_29(TernaryNonPodObj) = Chi : total:m2069_23, partial:m2069_28 -# 2069| r2069_30(TernaryNonPodObj) = Load[#temp2069:13] : &:r2069_22, m2069_29 -# 2069| r2069_31(glval) = VariableAddress[#temp2069:9] : -# 2069| m2069_32(TernaryNonPodObj) = Store[#temp2069:9] : &:r2069_31, r2069_30 +# 2083| Block 8 +# 2083| r2083_22(glval) = VariableAddress[#temp2083:13] : +# 2083| m2083_23(TernaryNonPodObj) = Uninitialized[#temp2083:13] : &:r2083_22 +# 2083| r2083_24(glval) = FunctionAddress[TernaryNonPodObj] : +# 2083| v2083_25(void) = Call[TernaryNonPodObj] : func:r2083_24, this:r2083_22 +# 2083| m2083_26(unknown) = ^CallSideEffect : ~m2082_16 +# 2083| m2083_27(unknown) = Chi : total:m2082_16, partial:m2083_26 +# 2083| m2083_28(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2083_22 +# 2083| m2083_29(TernaryNonPodObj) = Chi : total:m2083_23, partial:m2083_28 +# 2083| r2083_30(TernaryNonPodObj) = Load[#temp2083:13] : &:r2083_22, m2083_29 +# 2083| r2083_31(glval) = VariableAddress[#temp2083:9] : +# 2083| m2083_32(TernaryNonPodObj) = Store[#temp2083:9] : &:r2083_31, r2083_30 #-----| Goto -> Block 7 -# 2069| Block 9 -# 2069| r2069_33(glval) = VariableAddress[#temp2069:34] : -# 2069| m2069_34(TernaryNonPodObj) = Uninitialized[#temp2069:34] : &:r2069_33 -# 2069| r2069_35(glval) = FunctionAddress[TernaryNonPodObj] : -# 2069| v2069_36(void) = Call[TernaryNonPodObj] : func:r2069_35, this:r2069_33 -# 2069| m2069_37(unknown) = ^CallSideEffect : ~m2068_16 -# 2069| m2069_38(unknown) = Chi : total:m2068_16, partial:m2069_37 -# 2069| m2069_39(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2069_33 -# 2069| m2069_40(TernaryNonPodObj) = Chi : total:m2069_34, partial:m2069_39 -# 2069| r2069_41(TernaryNonPodObj) = Load[#temp2069:34] : &:r2069_33, m2069_40 -# 2069| r2069_42(glval) = VariableAddress[#temp2069:9] : -# 2069| m2069_43(TernaryNonPodObj) = Store[#temp2069:9] : &:r2069_42, r2069_41 +# 2083| Block 9 +# 2083| r2083_33(glval) = VariableAddress[#temp2083:34] : +# 2083| m2083_34(TernaryNonPodObj) = Uninitialized[#temp2083:34] : &:r2083_33 +# 2083| r2083_35(glval) = FunctionAddress[TernaryNonPodObj] : +# 2083| v2083_36(void) = Call[TernaryNonPodObj] : func:r2083_35, this:r2083_33 +# 2083| m2083_37(unknown) = ^CallSideEffect : ~m2082_16 +# 2083| m2083_38(unknown) = Chi : total:m2082_16, partial:m2083_37 +# 2083| m2083_39(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2083_33 +# 2083| m2083_40(TernaryNonPodObj) = Chi : total:m2083_34, partial:m2083_39 +# 2083| r2083_41(TernaryNonPodObj) = Load[#temp2083:34] : &:r2083_33, m2083_40 +# 2083| r2083_42(glval) = VariableAddress[#temp2083:9] : +# 2083| m2083_43(TernaryNonPodObj) = Store[#temp2083:9] : &:r2083_42, r2083_41 #-----| Goto -> Block 7 -# 2070| Block 10 -# 2070| m2070_6(glval) = Phi : from 11:m2070_40, from 12:m2070_43 -# 2070| r2070_7(glval) = VariableAddress[#temp2070:10] : -# 2070| r2070_8(glval) = Load[#temp2070:10] : &:r2070_7, m2070_6 -# 2070| r2070_9(glval) = Convert : r2070_8 -# 2070| r2070_10(TernaryNonPodObj &) = CopyValue : r2070_9 -# 2070| r2070_11(TernaryNonPodObj &) = Call[operator=] : func:r2070_2, this:r2070_1, 0:r2070_10 -# 2070| m2070_12(unknown) = ^CallSideEffect : ~m2069_16 -# 2070| m2070_13(unknown) = Chi : total:m2069_16, partial:m2070_12 -# 2070| v2070_14(void) = ^IndirectReadSideEffect[-1] : &:r2070_1, m2069_20 -# 2070| v2070_15(void) = ^BufferReadSideEffect[0] : &:r2070_10, ~m2070_13 -# 2070| m2070_16(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2070_1 -# 2070| m2070_17(TernaryNonPodObj) = Chi : total:m2069_20, partial:m2070_16 -# 2070| r2070_18(glval) = CopyValue : r2070_11 -# 2070| r2070_19(glval) = FunctionAddress[operator=] : -# 2070| r2070_20(glval) = VariableAddress[#temp2070:23] : -# 2070| m2070_21(TernaryNonPodObj) = Uninitialized[#temp2070:23] : &:r2070_20 -# 2070| r2070_22(glval) = FunctionAddress[TernaryNonPodObj] : -# 2070| v2070_23(void) = Call[TernaryNonPodObj] : func:r2070_22, this:r2070_20 -# 2070| m2070_24(unknown) = ^CallSideEffect : ~m2070_13 -# 2070| m2070_25(unknown) = Chi : total:m2070_13, partial:m2070_24 -# 2070| m2070_26(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2070_20 -# 2070| m2070_27(TernaryNonPodObj) = Chi : total:m2070_21, partial:m2070_26 -# 2070| r2070_28(glval) = Convert : r2070_20 -# 2070| r2070_29(TernaryNonPodObj &) = CopyValue : r2070_28 -# 2070| r2070_30(TernaryNonPodObj &) = Call[operator=] : func:r2070_19, this:r2070_18, 0:r2070_29 -# 2070| m2070_31(unknown) = ^CallSideEffect : ~m2070_25 -# 2070| m2070_32(unknown) = Chi : total:m2070_25, partial:m2070_31 -# 2070| v2070_33(void) = ^IndirectReadSideEffect[-1] : &:r2070_18, m2070_17 -# 2070| v2070_34(void) = ^BufferReadSideEffect[0] : &:r2070_29, ~m2070_27 -# 2070| m2070_35(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2070_18 -# 2070| m2070_36(TernaryNonPodObj) = Chi : total:m2070_17, partial:m2070_35 -# 2070| r2070_37(glval) = CopyValue : r2070_30 -# 2071| v2071_1(void) = NoOp : -# 2066| v2066_13(void) = ReturnVoid : -# 2066| v2066_14(void) = AliasedUse : ~m2070_32 -# 2066| v2066_15(void) = ExitFunction : +# 2084| Block 10 +# 2084| m2084_6(glval) = Phi : from 11:m2084_40, from 12:m2084_43 +# 2084| r2084_7(glval) = VariableAddress[#temp2084:10] : +# 2084| r2084_8(glval) = Load[#temp2084:10] : &:r2084_7, m2084_6 +# 2084| r2084_9(glval) = Convert : r2084_8 +# 2084| r2084_10(TernaryNonPodObj &) = CopyValue : r2084_9 +# 2084| r2084_11(TernaryNonPodObj &) = Call[operator=] : func:r2084_2, this:r2084_1, 0:r2084_10 +# 2084| m2084_12(unknown) = ^CallSideEffect : ~m2083_16 +# 2084| m2084_13(unknown) = Chi : total:m2083_16, partial:m2084_12 +# 2084| v2084_14(void) = ^IndirectReadSideEffect[-1] : &:r2084_1, m2083_20 +# 2084| v2084_15(void) = ^BufferReadSideEffect[0] : &:r2084_10, ~m2084_13 +# 2084| m2084_16(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2084_1 +# 2084| m2084_17(TernaryNonPodObj) = Chi : total:m2083_20, partial:m2084_16 +# 2084| r2084_18(glval) = CopyValue : r2084_11 +# 2084| r2084_19(glval) = FunctionAddress[operator=] : +# 2084| r2084_20(glval) = VariableAddress[#temp2084:23] : +# 2084| m2084_21(TernaryNonPodObj) = Uninitialized[#temp2084:23] : &:r2084_20 +# 2084| r2084_22(glval) = FunctionAddress[TernaryNonPodObj] : +# 2084| v2084_23(void) = Call[TernaryNonPodObj] : func:r2084_22, this:r2084_20 +# 2084| m2084_24(unknown) = ^CallSideEffect : ~m2084_13 +# 2084| m2084_25(unknown) = Chi : total:m2084_13, partial:m2084_24 +# 2084| m2084_26(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2084_20 +# 2084| m2084_27(TernaryNonPodObj) = Chi : total:m2084_21, partial:m2084_26 +# 2084| r2084_28(glval) = Convert : r2084_20 +# 2084| r2084_29(TernaryNonPodObj &) = CopyValue : r2084_28 +# 2084| r2084_30(TernaryNonPodObj &) = Call[operator=] : func:r2084_19, this:r2084_18, 0:r2084_29 +# 2084| m2084_31(unknown) = ^CallSideEffect : ~m2084_25 +# 2084| m2084_32(unknown) = Chi : total:m2084_25, partial:m2084_31 +# 2084| v2084_33(void) = ^IndirectReadSideEffect[-1] : &:r2084_18, m2084_17 +# 2084| v2084_34(void) = ^BufferReadSideEffect[0] : &:r2084_29, ~m2084_27 +# 2084| m2084_35(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2084_18 +# 2084| m2084_36(TernaryNonPodObj) = Chi : total:m2084_17, partial:m2084_35 +# 2084| r2084_37(glval) = CopyValue : r2084_30 +# 2085| v2085_1(void) = NoOp : +# 2080| v2080_13(void) = ReturnVoid : +# 2080| v2080_14(void) = AliasedUse : ~m2084_32 +# 2080| v2080_15(void) = ExitFunction : -# 2070| Block 11 -# 2070| r2070_38(glval) = VariableAddress[x] : -# 2070| r2070_39(glval) = VariableAddress[#temp2070:10] : -# 2070| m2070_40(glval) = Store[#temp2070:10] : &:r2070_39, r2070_38 +# 2084| Block 11 +# 2084| r2084_38(glval) = VariableAddress[x] : +# 2084| r2084_39(glval) = VariableAddress[#temp2084:10] : +# 2084| m2084_40(glval) = Store[#temp2084:10] : &:r2084_39, r2084_38 #-----| Goto -> Block 10 -# 2070| Block 12 -# 2070| r2070_41(glval) = VariableAddress[y] : -# 2070| r2070_42(glval) = VariableAddress[#temp2070:10] : -# 2070| m2070_43(glval) = Store[#temp2070:10] : &:r2070_42, r2070_41 +# 2084| Block 12 +# 2084| r2084_41(glval) = VariableAddress[y] : +# 2084| r2084_42(glval) = VariableAddress[#temp2084:10] : +# 2084| m2084_43(glval) = Store[#temp2084:10] : &:r2084_42, r2084_41 #-----| Goto -> Block 10 -# 2075| unsigned int CommaTest(unsigned int) -# 2075| Block 0 -# 2075| v2075_1(void) = EnterFunction : -# 2075| m2075_2(unknown) = AliasedDefinition : -# 2075| m2075_3(unknown) = InitializeNonLocal : -# 2075| m2075_4(unknown) = Chi : total:m2075_2, partial:m2075_3 -# 2075| r2075_5(glval) = VariableAddress[x] : -# 2075| m2075_6(unsigned int) = InitializeParameter[x] : &:r2075_5 -# 2076| r2076_1(glval) = VariableAddress[y] : -# 2076| m2076_2(unsigned int) = Uninitialized[y] : &:r2076_1 -# 2077| r2077_1(glval) = VariableAddress[x] : -# 2077| r2077_2(unsigned int) = Load[x] : &:r2077_1, m2075_6 -# 2077| r2077_3(unsigned int) = Constant[100] : -# 2077| r2077_4(bool) = CompareLT : r2077_2, r2077_3 -# 2077| v2077_5(void) = ConditionalBranch : r2077_4 +# 2089| unsigned int CommaTest(unsigned int) +# 2089| Block 0 +# 2089| v2089_1(void) = EnterFunction : +# 2089| m2089_2(unknown) = AliasedDefinition : +# 2089| m2089_3(unknown) = InitializeNonLocal : +# 2089| m2089_4(unknown) = Chi : total:m2089_2, partial:m2089_3 +# 2089| r2089_5(glval) = VariableAddress[x] : +# 2089| m2089_6(unsigned int) = InitializeParameter[x] : &:r2089_5 +# 2090| r2090_1(glval) = VariableAddress[y] : +# 2090| m2090_2(unsigned int) = Uninitialized[y] : &:r2090_1 +# 2091| r2091_1(glval) = VariableAddress[x] : +# 2091| r2091_2(unsigned int) = Load[x] : &:r2091_1, m2089_6 +# 2091| r2091_3(unsigned int) = Constant[100] : +# 2091| r2091_4(bool) = CompareLT : r2091_2, r2091_3 +# 2091| v2091_5(void) = ConditionalBranch : r2091_4 #-----| False -> Block 3 #-----| True -> Block 2 -# 2077| Block 1 -# 2077| m2077_6(unknown) = Phi : from 2:~m2078_6, from 3:~m2079_6 -# 2077| m2077_7(unsigned int) = Phi : from 2:m2077_13, from 3:m2077_15 -# 2077| r2077_8(glval) = VariableAddress[#temp2077:7] : -# 2077| r2077_9(unsigned int) = Load[#temp2077:7] : &:r2077_8, m2077_7 -# 2077| r2077_10(glval) = VariableAddress[y] : -# 2077| m2077_11(unsigned int) = Store[y] : &:r2077_10, r2077_9 -# 2080| r2080_1(glval) = VariableAddress[#return] : -# 2080| m2080_2(unsigned int) = Uninitialized[#return] : &:r2080_1 -# 2075| r2075_7(glval) = VariableAddress[#return] : -# 2075| v2075_8(void) = ReturnValue : &:r2075_7, m2080_2 -# 2075| v2075_9(void) = AliasedUse : ~m2077_6 -# 2075| v2075_10(void) = ExitFunction : +# 2091| Block 1 +# 2091| m2091_6(unknown) = Phi : from 2:~m2092_6, from 3:~m2093_6 +# 2091| m2091_7(unsigned int) = Phi : from 2:m2091_13, from 3:m2091_15 +# 2091| r2091_8(glval) = VariableAddress[#temp2091:7] : +# 2091| r2091_9(unsigned int) = Load[#temp2091:7] : &:r2091_8, m2091_7 +# 2091| r2091_10(glval) = VariableAddress[y] : +# 2091| m2091_11(unsigned int) = Store[y] : &:r2091_10, r2091_9 +# 2094| r2094_1(glval) = VariableAddress[#return] : +# 2094| m2094_2(unsigned int) = Uninitialized[#return] : &:r2094_1 +# 2089| r2089_7(glval) = VariableAddress[#return] : +# 2089| v2089_8(void) = ReturnValue : &:r2089_7, m2094_2 +# 2089| v2089_9(void) = AliasedUse : ~m2091_6 +# 2089| v2089_10(void) = ExitFunction : -# 2078| Block 2 -# 2078| r2078_1(glval) = FunctionAddress[CommaTestHelper] : -# 2078| r2078_2(glval) = VariableAddress[x] : -# 2078| r2078_3(unsigned int) = Load[x] : &:r2078_2, m2075_6 -# 2078| v2078_4(void) = Call[CommaTestHelper] : func:r2078_1, 0:r2078_3 -# 2078| m2078_5(unknown) = ^CallSideEffect : ~m2075_4 -# 2078| m2078_6(unknown) = Chi : total:m2075_4, partial:m2078_5 -# 2078| r2078_7(glval) = VariableAddress[x] : -# 2078| r2078_8(unsigned int) = Load[x] : &:r2078_7, m2075_6 -# 2078| r2078_9(unsigned int) = CopyValue : r2078_8 -# 2077| r2077_12(glval) = VariableAddress[#temp2077:7] : -# 2077| m2077_13(unsigned int) = Store[#temp2077:7] : &:r2077_12, r2078_9 +# 2092| Block 2 +# 2092| r2092_1(glval) = FunctionAddress[CommaTestHelper] : +# 2092| r2092_2(glval) = VariableAddress[x] : +# 2092| r2092_3(unsigned int) = Load[x] : &:r2092_2, m2089_6 +# 2092| v2092_4(void) = Call[CommaTestHelper] : func:r2092_1, 0:r2092_3 +# 2092| m2092_5(unknown) = ^CallSideEffect : ~m2089_4 +# 2092| m2092_6(unknown) = Chi : total:m2089_4, partial:m2092_5 +# 2092| r2092_7(glval) = VariableAddress[x] : +# 2092| r2092_8(unsigned int) = Load[x] : &:r2092_7, m2089_6 +# 2092| r2092_9(unsigned int) = CopyValue : r2092_8 +# 2091| r2091_12(glval) = VariableAddress[#temp2091:7] : +# 2091| m2091_13(unsigned int) = Store[#temp2091:7] : &:r2091_12, r2092_9 #-----| Goto -> Block 1 -# 2079| Block 3 -# 2079| r2079_1(glval) = FunctionAddress[CommaTestHelper] : -# 2079| r2079_2(glval) = VariableAddress[x] : -# 2079| r2079_3(unsigned int) = Load[x] : &:r2079_2, m2075_6 -# 2079| v2079_4(void) = Call[CommaTestHelper] : func:r2079_1, 0:r2079_3 -# 2079| m2079_5(unknown) = ^CallSideEffect : ~m2075_4 -# 2079| m2079_6(unknown) = Chi : total:m2075_4, partial:m2079_5 -# 2079| r2079_7(int) = Constant[10] : -# 2079| r2079_8(int) = CopyValue : r2079_7 -# 2079| r2079_9(unsigned int) = Convert : r2079_8 -# 2077| r2077_14(glval) = VariableAddress[#temp2077:7] : -# 2077| m2077_15(unsigned int) = Store[#temp2077:7] : &:r2077_14, r2079_9 +# 2093| Block 3 +# 2093| r2093_1(glval) = FunctionAddress[CommaTestHelper] : +# 2093| r2093_2(glval) = VariableAddress[x] : +# 2093| r2093_3(unsigned int) = Load[x] : &:r2093_2, m2089_6 +# 2093| v2093_4(void) = Call[CommaTestHelper] : func:r2093_1, 0:r2093_3 +# 2093| m2093_5(unknown) = ^CallSideEffect : ~m2089_4 +# 2093| m2093_6(unknown) = Chi : total:m2089_4, partial:m2093_5 +# 2093| r2093_7(int) = Constant[10] : +# 2093| r2093_8(int) = CopyValue : r2093_7 +# 2093| r2093_9(unsigned int) = Convert : r2093_8 +# 2091| r2091_14(glval) = VariableAddress[#temp2091:7] : +# 2091| m2091_15(unsigned int) = Store[#temp2091:7] : &:r2091_14, r2093_9 #-----| Goto -> Block 1 -# 2082| void NewDeleteMem() -# 2082| Block 0 -# 2082| v2082_1(void) = EnterFunction : -# 2082| m2082_2(unknown) = AliasedDefinition : -# 2082| m2082_3(unknown) = InitializeNonLocal : -# 2082| m2082_4(unknown) = Chi : total:m2082_2, partial:m2082_3 -# 2083| r2083_1(glval) = VariableAddress[x] : -# 2083| r2083_2(glval) = FunctionAddress[operator new] : -# 2083| r2083_3(unsigned long) = Constant[4] : -# 2083| r2083_4(void *) = Call[operator new] : func:r2083_2, 0:r2083_3 -# 2083| m2083_5(unknown) = ^CallSideEffect : ~m2082_4 -# 2083| m2083_6(unknown) = Chi : total:m2082_4, partial:m2083_5 -# 2083| m2083_7(unknown) = ^InitializeDynamicAllocation : &:r2083_4 -# 2083| r2083_8(int *) = Convert : r2083_4 -# 2083| m2083_9(int *) = Store[x] : &:r2083_1, r2083_8 -# 2084| r2084_1(int) = Constant[6] : -# 2084| r2084_2(glval) = VariableAddress[x] : -# 2084| r2084_3(int *) = Load[x] : &:r2084_2, m2083_9 -# 2084| r2084_4(glval) = CopyValue : r2084_3 -# 2084| m2084_5(int) = Store[?] : &:r2084_4, r2084_1 -# 2084| m2084_6(unknown) = Chi : total:m2083_7, partial:m2084_5 -# 2085| r2085_1(glval) = FunctionAddress[operator delete] : -# 2085| r2085_2(glval) = VariableAddress[x] : -# 2085| r2085_3(int *) = Load[x] : &:r2085_2, m2083_9 -# 2085| v2085_4(void) = Call[operator delete] : func:r2085_1, 0:r2085_3 -# 2085| m2085_5(unknown) = ^CallSideEffect : ~m2083_6 -# 2085| m2085_6(unknown) = Chi : total:m2083_6, partial:m2085_5 -# 2086| v2086_1(void) = NoOp : -# 2082| v2082_5(void) = ReturnVoid : -# 2082| v2082_6(void) = AliasedUse : ~m2085_6 -# 2082| v2082_7(void) = ExitFunction : +# 2096| void NewDeleteMem() +# 2096| Block 0 +# 2096| v2096_1(void) = EnterFunction : +# 2096| m2096_2(unknown) = AliasedDefinition : +# 2096| m2096_3(unknown) = InitializeNonLocal : +# 2096| m2096_4(unknown) = Chi : total:m2096_2, partial:m2096_3 +# 2097| r2097_1(glval) = VariableAddress[x] : +# 2097| r2097_2(glval) = FunctionAddress[operator new] : +# 2097| r2097_3(unsigned long) = Constant[4] : +# 2097| r2097_4(void *) = Call[operator new] : func:r2097_2, 0:r2097_3 +# 2097| m2097_5(unknown) = ^CallSideEffect : ~m2096_4 +# 2097| m2097_6(unknown) = Chi : total:m2096_4, partial:m2097_5 +# 2097| m2097_7(unknown) = ^InitializeDynamicAllocation : &:r2097_4 +# 2097| r2097_8(int *) = Convert : r2097_4 +# 2097| m2097_9(int *) = Store[x] : &:r2097_1, r2097_8 +# 2098| r2098_1(int) = Constant[6] : +# 2098| r2098_2(glval) = VariableAddress[x] : +# 2098| r2098_3(int *) = Load[x] : &:r2098_2, m2097_9 +# 2098| r2098_4(glval) = CopyValue : r2098_3 +# 2098| m2098_5(int) = Store[?] : &:r2098_4, r2098_1 +# 2098| m2098_6(unknown) = Chi : total:m2097_7, partial:m2098_5 +# 2099| r2099_1(glval) = FunctionAddress[operator delete] : +# 2099| r2099_2(glval) = VariableAddress[x] : +# 2099| r2099_3(int *) = Load[x] : &:r2099_2, m2097_9 +# 2099| v2099_4(void) = Call[operator delete] : func:r2099_1, 0:r2099_3 +# 2099| m2099_5(unknown) = ^CallSideEffect : ~m2097_6 +# 2099| m2099_6(unknown) = Chi : total:m2097_6, partial:m2099_5 +# 2100| v2100_1(void) = NoOp : +# 2096| v2096_5(void) = ReturnVoid : +# 2096| v2096_6(void) = AliasedUse : ~m2099_6 +# 2096| v2096_7(void) = ExitFunction : -# 2088| void Base2::Base2() -# 2088| Block 0 -# 2088| v2088_1(void) = EnterFunction : -# 2088| m2088_2(unknown) = AliasedDefinition : -# 2088| m2088_3(unknown) = InitializeNonLocal : -# 2088| m2088_4(unknown) = Chi : total:m2088_2, partial:m2088_3 -# 2088| r2088_5(glval) = VariableAddress[#this] : -# 2088| m2088_6(glval) = InitializeParameter[#this] : &:r2088_5 -# 2088| r2088_7(glval) = Load[#this] : &:r2088_5, m2088_6 -# 2088| m2088_8(Base2) = InitializeIndirection[#this] : &:r2088_7 -# 2088| v2088_9(void) = NoOp : -# 2088| v2088_10(void) = ReturnIndirection[#this] : &:r2088_7, m2088_8 -# 2088| v2088_11(void) = ReturnVoid : -# 2088| v2088_12(void) = AliasedUse : m2088_3 -# 2088| v2088_13(void) = ExitFunction : +# 2102| void Base2::Base2() +# 2102| Block 0 +# 2102| v2102_1(void) = EnterFunction : +# 2102| m2102_2(unknown) = AliasedDefinition : +# 2102| m2102_3(unknown) = InitializeNonLocal : +# 2102| m2102_4(unknown) = Chi : total:m2102_2, partial:m2102_3 +# 2102| r2102_5(glval) = VariableAddress[#this] : +# 2102| m2102_6(glval) = InitializeParameter[#this] : &:r2102_5 +# 2102| r2102_7(glval) = Load[#this] : &:r2102_5, m2102_6 +# 2102| m2102_8(Base2) = InitializeIndirection[#this] : &:r2102_7 +# 2102| v2102_9(void) = NoOp : +# 2102| v2102_10(void) = ReturnIndirection[#this] : &:r2102_7, m2102_8 +# 2102| v2102_11(void) = ReturnVoid : +# 2102| v2102_12(void) = AliasedUse : m2102_3 +# 2102| v2102_13(void) = ExitFunction : -# 2090| void Base2::operator delete(void*) -# 2090| Block 0 -# 2090| v2090_1(void) = EnterFunction : -# 2090| m2090_2(unknown) = AliasedDefinition : -# 2090| m2090_3(unknown) = InitializeNonLocal : -# 2090| m2090_4(unknown) = Chi : total:m2090_2, partial:m2090_3 -# 2090| r2090_5(glval) = VariableAddress[p] : -# 2090| m2090_6(void *) = InitializeParameter[p] : &:r2090_5 -# 2090| r2090_7(void *) = Load[p] : &:r2090_5, m2090_6 -# 2090| m2090_8(unknown) = InitializeIndirection[p] : &:r2090_7 -# 2091| v2091_1(void) = NoOp : -# 2090| v2090_9(void) = ReturnIndirection[p] : &:r2090_7, m2090_8 -# 2090| v2090_10(void) = ReturnVoid : -# 2090| v2090_11(void) = AliasedUse : m2090_3 -# 2090| v2090_12(void) = ExitFunction : +# 2104| void Base2::operator delete(void*) +# 2104| Block 0 +# 2104| v2104_1(void) = EnterFunction : +# 2104| m2104_2(unknown) = AliasedDefinition : +# 2104| m2104_3(unknown) = InitializeNonLocal : +# 2104| m2104_4(unknown) = Chi : total:m2104_2, partial:m2104_3 +# 2104| r2104_5(glval) = VariableAddress[p] : +# 2104| m2104_6(void *) = InitializeParameter[p] : &:r2104_5 +# 2104| r2104_7(void *) = Load[p] : &:r2104_5, m2104_6 +# 2104| m2104_8(unknown) = InitializeIndirection[p] : &:r2104_7 +# 2105| v2105_1(void) = NoOp : +# 2104| v2104_9(void) = ReturnIndirection[p] : &:r2104_7, m2104_8 +# 2104| v2104_10(void) = ReturnVoid : +# 2104| v2104_11(void) = AliasedUse : m2104_3 +# 2104| v2104_12(void) = ExitFunction : -# 2092| void Base2::~Base2() -# 2092| Block 0 -# 2092| v2092_1(void) = EnterFunction : -# 2092| m2092_2(unknown) = AliasedDefinition : -# 2092| m2092_3(unknown) = InitializeNonLocal : -# 2092| m2092_4(unknown) = Chi : total:m2092_2, partial:m2092_3 -# 2092| r2092_5(glval) = VariableAddress[#this] : -# 2092| m2092_6(glval) = InitializeParameter[#this] : &:r2092_5 -# 2092| r2092_7(glval) = Load[#this] : &:r2092_5, m2092_6 -# 2092| m2092_8(Base2) = InitializeIndirection[#this] : &:r2092_7 -# 2092| v2092_9(void) = NoOp : -# 2092| v2092_10(void) = ReturnIndirection[#this] : &:r2092_7, m2092_8 -# 2092| v2092_11(void) = ReturnVoid : -# 2092| v2092_12(void) = AliasedUse : m2092_3 -# 2092| v2092_13(void) = ExitFunction : +# 2106| void Base2::~Base2() +# 2106| Block 0 +# 2106| v2106_1(void) = EnterFunction : +# 2106| m2106_2(unknown) = AliasedDefinition : +# 2106| m2106_3(unknown) = InitializeNonLocal : +# 2106| m2106_4(unknown) = Chi : total:m2106_2, partial:m2106_3 +# 2106| r2106_5(glval) = VariableAddress[#this] : +# 2106| m2106_6(glval) = InitializeParameter[#this] : &:r2106_5 +# 2106| r2106_7(glval) = Load[#this] : &:r2106_5, m2106_6 +# 2106| m2106_8(Base2) = InitializeIndirection[#this] : &:r2106_7 +# 2106| v2106_9(void) = NoOp : +# 2106| v2106_10(void) = ReturnIndirection[#this] : &:r2106_7, m2106_8 +# 2106| v2106_11(void) = ReturnVoid : +# 2106| v2106_12(void) = AliasedUse : m2106_3 +# 2106| v2106_13(void) = ExitFunction : -# 2095| void Derived2::Derived2() -# 2095| Block 0 -# 2095| v2095_1(void) = EnterFunction : -# 2095| m2095_2(unknown) = AliasedDefinition : -# 2095| m2095_3(unknown) = InitializeNonLocal : -# 2095| m2095_4(unknown) = Chi : total:m2095_2, partial:m2095_3 -# 2095| r2095_5(glval) = VariableAddress[#this] : -# 2095| m2095_6(glval) = InitializeParameter[#this] : &:r2095_5 -# 2095| r2095_7(glval) = Load[#this] : &:r2095_5, m2095_6 -# 2095| m2095_8(Derived2) = InitializeIndirection[#this] : &:r2095_7 -# 2095| r2095_9(glval) = ConvertToNonVirtualBase[Derived2 : Base2] : m2095_6 -# 2095| r2095_10(glval) = FunctionAddress[Base2] : -# 2095| v2095_11(void) = Call[Base2] : func:r2095_10, this:r2095_9 -# 2095| m2095_12(unknown) = ^CallSideEffect : ~m2095_4 -# 2095| m2095_13(unknown) = Chi : total:m2095_4, partial:m2095_12 -# 2095| m2095_14(Base2) = ^IndirectMayWriteSideEffect[-1] : &:r2095_9 -# 2095| m2095_15(unknown) = Chi : total:m2095_8, partial:m2095_14 -# 2095| v2095_16(void) = NoOp : -# 2095| v2095_17(void) = ReturnIndirection[#this] : &:r2095_7, m2095_15 -# 2095| v2095_18(void) = ReturnVoid : -# 2095| v2095_19(void) = AliasedUse : ~m2095_13 -# 2095| v2095_20(void) = ExitFunction : +# 2109| void Derived2::Derived2() +# 2109| Block 0 +# 2109| v2109_1(void) = EnterFunction : +# 2109| m2109_2(unknown) = AliasedDefinition : +# 2109| m2109_3(unknown) = InitializeNonLocal : +# 2109| m2109_4(unknown) = Chi : total:m2109_2, partial:m2109_3 +# 2109| r2109_5(glval) = VariableAddress[#this] : +# 2109| m2109_6(glval) = InitializeParameter[#this] : &:r2109_5 +# 2109| r2109_7(glval) = Load[#this] : &:r2109_5, m2109_6 +# 2109| m2109_8(Derived2) = InitializeIndirection[#this] : &:r2109_7 +# 2109| r2109_9(glval) = ConvertToNonVirtualBase[Derived2 : Base2] : m2109_6 +# 2109| r2109_10(glval) = FunctionAddress[Base2] : +# 2109| v2109_11(void) = Call[Base2] : func:r2109_10, this:r2109_9 +# 2109| m2109_12(unknown) = ^CallSideEffect : ~m2109_4 +# 2109| m2109_13(unknown) = Chi : total:m2109_4, partial:m2109_12 +# 2109| m2109_14(Base2) = ^IndirectMayWriteSideEffect[-1] : &:r2109_9 +# 2109| m2109_15(unknown) = Chi : total:m2109_8, partial:m2109_14 +# 2109| v2109_16(void) = NoOp : +# 2109| v2109_17(void) = ReturnIndirection[#this] : &:r2109_7, m2109_15 +# 2109| v2109_18(void) = ReturnVoid : +# 2109| v2109_19(void) = AliasedUse : ~m2109_13 +# 2109| v2109_20(void) = ExitFunction : -# 2098| void Derived2::~Derived2() -# 2098| Block 0 -# 2098| v2098_1(void) = EnterFunction : -# 2098| m2098_2(unknown) = AliasedDefinition : -# 2098| m2098_3(unknown) = InitializeNonLocal : -# 2098| m2098_4(unknown) = Chi : total:m2098_2, partial:m2098_3 -# 2098| r2098_5(glval) = VariableAddress[#this] : -# 2098| m2098_6(glval) = InitializeParameter[#this] : &:r2098_5 -# 2098| r2098_7(glval) = Load[#this] : &:r2098_5, m2098_6 -# 2098| m2098_8(Derived2) = InitializeIndirection[#this] : &:r2098_7 -# 2098| v2098_9(void) = NoOp : -# 2098| r2098_10(glval) = ConvertToNonVirtualBase[Derived2 : Base2] : m2098_6 -# 2098| r2098_11(glval) = FunctionAddress[~Base2] : -# 2098| v2098_12(void) = Call[~Base2] : func:r2098_11, this:r2098_10 -# 2098| m2098_13(unknown) = ^CallSideEffect : ~m2098_4 -# 2098| m2098_14(unknown) = Chi : total:m2098_4, partial:m2098_13 -# 2098| v2098_15(void) = ReturnIndirection[#this] : &:r2098_7, m2098_8 -# 2098| v2098_16(void) = ReturnVoid : -# 2098| v2098_17(void) = AliasedUse : ~m2098_14 -# 2098| v2098_18(void) = ExitFunction : +# 2112| void Derived2::~Derived2() +# 2112| Block 0 +# 2112| v2112_1(void) = EnterFunction : +# 2112| m2112_2(unknown) = AliasedDefinition : +# 2112| m2112_3(unknown) = InitializeNonLocal : +# 2112| m2112_4(unknown) = Chi : total:m2112_2, partial:m2112_3 +# 2112| r2112_5(glval) = VariableAddress[#this] : +# 2112| m2112_6(glval) = InitializeParameter[#this] : &:r2112_5 +# 2112| r2112_7(glval) = Load[#this] : &:r2112_5, m2112_6 +# 2112| m2112_8(Derived2) = InitializeIndirection[#this] : &:r2112_7 +# 2112| v2112_9(void) = NoOp : +# 2112| r2112_10(glval) = ConvertToNonVirtualBase[Derived2 : Base2] : m2112_6 +# 2112| r2112_11(glval) = FunctionAddress[~Base2] : +# 2112| v2112_12(void) = Call[~Base2] : func:r2112_11, this:r2112_10 +# 2112| m2112_13(unknown) = ^CallSideEffect : ~m2112_4 +# 2112| m2112_14(unknown) = Chi : total:m2112_4, partial:m2112_13 +# 2112| v2112_15(void) = ReturnIndirection[#this] : &:r2112_7, m2112_8 +# 2112| v2112_16(void) = ReturnVoid : +# 2112| v2112_17(void) = AliasedUse : ~m2112_14 +# 2112| v2112_18(void) = ExitFunction : -# 2100| void Derived2::operator delete(void*) -# 2100| Block 0 -# 2100| v2100_1(void) = EnterFunction : -# 2100| m2100_2(unknown) = AliasedDefinition : -# 2100| m2100_3(unknown) = InitializeNonLocal : -# 2100| m2100_4(unknown) = Chi : total:m2100_2, partial:m2100_3 -# 2100| r2100_5(glval) = VariableAddress[p] : -# 2100| m2100_6(void *) = InitializeParameter[p] : &:r2100_5 -# 2100| r2100_7(void *) = Load[p] : &:r2100_5, m2100_6 -# 2100| m2100_8(unknown) = InitializeIndirection[p] : &:r2100_7 -# 2101| v2101_1(void) = NoOp : -# 2100| v2100_9(void) = ReturnIndirection[p] : &:r2100_7, m2100_8 -# 2100| v2100_10(void) = ReturnVoid : -# 2100| v2100_11(void) = AliasedUse : m2100_3 -# 2100| v2100_12(void) = ExitFunction : +# 2114| void Derived2::operator delete(void*) +# 2114| Block 0 +# 2114| v2114_1(void) = EnterFunction : +# 2114| m2114_2(unknown) = AliasedDefinition : +# 2114| m2114_3(unknown) = InitializeNonLocal : +# 2114| m2114_4(unknown) = Chi : total:m2114_2, partial:m2114_3 +# 2114| r2114_5(glval) = VariableAddress[p] : +# 2114| m2114_6(void *) = InitializeParameter[p] : &:r2114_5 +# 2114| r2114_7(void *) = Load[p] : &:r2114_5, m2114_6 +# 2114| m2114_8(unknown) = InitializeIndirection[p] : &:r2114_7 +# 2115| v2115_1(void) = NoOp : +# 2114| v2114_9(void) = ReturnIndirection[p] : &:r2114_7, m2114_8 +# 2114| v2114_10(void) = ReturnVoid : +# 2114| v2114_11(void) = AliasedUse : m2114_3 +# 2114| v2114_12(void) = ExitFunction : -# 2105| int virtual_delete() -# 2105| Block 0 -# 2105| v2105_1(void) = EnterFunction : -# 2105| m2105_2(unknown) = AliasedDefinition : -# 2105| m2105_3(unknown) = InitializeNonLocal : -# 2105| m2105_4(unknown) = Chi : total:m2105_2, partial:m2105_3 -# 2107| r2107_1(glval) = VariableAddress[b1] : -# 2107| r2107_2(glval) = FunctionAddress[operator new] : -# 2107| r2107_3(unsigned long) = Constant[8] : -# 2107| r2107_4(void *) = Call[operator new] : func:r2107_2, 0:r2107_3 -# 2107| m2107_5(unknown) = ^CallSideEffect : ~m2105_4 -# 2107| m2107_6(unknown) = Chi : total:m2105_4, partial:m2107_5 -# 2107| m2107_7(unknown) = ^InitializeDynamicAllocation : &:r2107_4 -# 2107| r2107_8(Base2 *) = Convert : r2107_4 -# 2107| r2107_9(glval) = FunctionAddress[Base2] : -# 2107| v2107_10(void) = Call[Base2] : func:r2107_9, this:r2107_8 -# 2107| m2107_11(unknown) = ^CallSideEffect : ~m2107_6 -# 2107| m2107_12(unknown) = Chi : total:m2107_6, partial:m2107_11 -# 2107| m2107_13(Base2) = ^IndirectMayWriteSideEffect[-1] : &:r2107_8 -# 2107| m2107_14(unknown) = Chi : total:m2107_7, partial:m2107_13 -# 2107| m2107_15(Base2 *) = Store[b1] : &:r2107_1, r2107_8 -# 2108| r2108_1(glval) = VirtualDeleteFunctionAddress : -# 2108| r2108_2(glval) = VariableAddress[b1] : -# 2108| r2108_3(Base2 *) = Load[b1] : &:r2108_2, m2107_15 -# 2108| v2108_4(void) = Call[?] : func:r2108_1, 0:r2108_3 -# 2108| m2108_5(unknown) = ^CallSideEffect : ~m2107_12 -# 2108| m2108_6(unknown) = Chi : total:m2107_12, partial:m2108_5 -# 2110| r2110_1(glval) = VariableAddress[b2] : -# 2110| r2110_2(glval) = FunctionAddress[operator new] : -# 2110| r2110_3(unsigned long) = Constant[16] : -# 2110| r2110_4(void *) = Call[operator new] : func:r2110_2, 0:r2110_3 -# 2110| m2110_5(unknown) = ^CallSideEffect : ~m2108_6 -# 2110| m2110_6(unknown) = Chi : total:m2108_6, partial:m2110_5 -# 2110| m2110_7(unknown) = ^InitializeDynamicAllocation : &:r2110_4 -# 2110| r2110_8(Derived2 *) = Convert : r2110_4 -# 2110| r2110_9(glval) = FunctionAddress[Derived2] : -# 2110| v2110_10(void) = Call[Derived2] : func:r2110_9, this:r2110_8 -# 2110| m2110_11(unknown) = ^CallSideEffect : ~m2110_6 -# 2110| m2110_12(unknown) = Chi : total:m2110_6, partial:m2110_11 -# 2110| m2110_13(Derived2) = ^IndirectMayWriteSideEffect[-1] : &:r2110_8 -# 2110| m2110_14(unknown) = Chi : total:m2110_7, partial:m2110_13 -# 2110| r2110_15(Base2 *) = ConvertToNonVirtualBase[Derived2 : Base2] : r2110_8 -# 2110| m2110_16(Base2 *) = Store[b2] : &:r2110_1, r2110_15 -# 2111| r2111_1(glval) = VirtualDeleteFunctionAddress : -# 2111| r2111_2(glval) = VariableAddress[b2] : -# 2111| r2111_3(Base2 *) = Load[b2] : &:r2111_2, m2110_16 -# 2111| v2111_4(void) = Call[?] : func:r2111_1, 0:r2111_3 -# 2111| m2111_5(unknown) = ^CallSideEffect : ~m2110_12 -# 2111| m2111_6(unknown) = Chi : total:m2110_12, partial:m2111_5 -# 2113| r2113_1(glval) = VariableAddress[d] : -# 2113| r2113_2(glval) = FunctionAddress[operator new] : -# 2113| r2113_3(unsigned long) = Constant[16] : -# 2113| r2113_4(void *) = Call[operator new] : func:r2113_2, 0:r2113_3 -# 2113| m2113_5(unknown) = ^CallSideEffect : ~m2111_6 -# 2113| m2113_6(unknown) = Chi : total:m2111_6, partial:m2113_5 -# 2113| m2113_7(unknown) = ^InitializeDynamicAllocation : &:r2113_4 -# 2113| r2113_8(Derived2 *) = Convert : r2113_4 -# 2113| r2113_9(glval) = FunctionAddress[Derived2] : -# 2113| v2113_10(void) = Call[Derived2] : func:r2113_9, this:r2113_8 -# 2113| m2113_11(unknown) = ^CallSideEffect : ~m2113_6 -# 2113| m2113_12(unknown) = Chi : total:m2113_6, partial:m2113_11 -# 2113| m2113_13(Derived2) = ^IndirectMayWriteSideEffect[-1] : &:r2113_8 -# 2113| m2113_14(unknown) = Chi : total:m2113_7, partial:m2113_13 -# 2113| m2113_15(Derived2 *) = Store[d] : &:r2113_1, r2113_8 -# 2114| r2114_1(glval) = VirtualDeleteFunctionAddress : -# 2114| r2114_2(glval) = VariableAddress[d] : -# 2114| r2114_3(Derived2 *) = Load[d] : &:r2114_2, m2113_15 -# 2114| v2114_4(void) = Call[?] : func:r2114_1, 0:r2114_3 -# 2114| m2114_5(unknown) = ^CallSideEffect : ~m2113_12 -# 2114| m2114_6(unknown) = Chi : total:m2113_12, partial:m2114_5 -# 2115| r2115_1(glval) = VariableAddress[#return] : -# 2115| m2115_2(int) = Uninitialized[#return] : &:r2115_1 -# 2105| r2105_5(glval) = VariableAddress[#return] : -# 2105| v2105_6(void) = ReturnValue : &:r2105_5, m2115_2 -# 2105| v2105_7(void) = AliasedUse : ~m2114_6 -# 2105| v2105_8(void) = ExitFunction : - -# 2119| void test_constant_folding() +# 2119| int virtual_delete() # 2119| Block 0 -# 2119| v2119_1(void) = EnterFunction : -# 2119| m2119_2(unknown) = AliasedDefinition : -# 2119| m2119_3(unknown) = InitializeNonLocal : -# 2119| m2119_4(unknown) = Chi : total:m2119_2, partial:m2119_3 -# 2120| r2120_1(glval) = VariableAddress[x] : -# 2120| r2120_2(int) = Constant[116] : -# 2120| m2120_3(int) = Store[x] : &:r2120_1, r2120_2 -# 2121| r2121_1(glval) = FunctionAddress[test_constant_folding_use] : -# 2121| r2121_2(int) = Constant[116] : -# 2121| v2121_3(void) = Call[test_constant_folding_use] : func:r2121_1, 0:r2121_2 -# 2121| m2121_4(unknown) = ^CallSideEffect : ~m2119_4 -# 2121| m2121_5(unknown) = Chi : total:m2119_4, partial:m2121_4 -# 2122| v2122_1(void) = NoOp : -# 2119| v2119_5(void) = ReturnVoid : -# 2119| v2119_6(void) = AliasedUse : ~m2121_5 -# 2119| v2119_7(void) = ExitFunction : +# 2119| v2119_1(void) = EnterFunction : +# 2119| m2119_2(unknown) = AliasedDefinition : +# 2119| m2119_3(unknown) = InitializeNonLocal : +# 2119| m2119_4(unknown) = Chi : total:m2119_2, partial:m2119_3 +# 2121| r2121_1(glval) = VariableAddress[b1] : +# 2121| r2121_2(glval) = FunctionAddress[operator new] : +# 2121| r2121_3(unsigned long) = Constant[8] : +# 2121| r2121_4(void *) = Call[operator new] : func:r2121_2, 0:r2121_3 +# 2121| m2121_5(unknown) = ^CallSideEffect : ~m2119_4 +# 2121| m2121_6(unknown) = Chi : total:m2119_4, partial:m2121_5 +# 2121| m2121_7(unknown) = ^InitializeDynamicAllocation : &:r2121_4 +# 2121| r2121_8(Base2 *) = Convert : r2121_4 +# 2121| r2121_9(glval) = FunctionAddress[Base2] : +# 2121| v2121_10(void) = Call[Base2] : func:r2121_9, this:r2121_8 +# 2121| m2121_11(unknown) = ^CallSideEffect : ~m2121_6 +# 2121| m2121_12(unknown) = Chi : total:m2121_6, partial:m2121_11 +# 2121| m2121_13(Base2) = ^IndirectMayWriteSideEffect[-1] : &:r2121_8 +# 2121| m2121_14(unknown) = Chi : total:m2121_7, partial:m2121_13 +# 2121| m2121_15(Base2 *) = Store[b1] : &:r2121_1, r2121_8 +# 2122| r2122_1(glval) = VariableAddress[b1] : +# 2122| r2122_2(Base2 *) = Load[b1] : &:r2122_1, m2121_15 +# 2122| r2122_3(glval) = FunctionAddress[~Base2] : +# 2122| v2122_4(void) = Call[~Base2] : func:r2122_3 +# 2122| m2122_5(unknown) = ^CallSideEffect : ~m2121_12 +# 2122| m2122_6(unknown) = Chi : total:m2121_12, partial:m2122_5 +# 2122| v2122_7(void) = ^IndirectReadSideEffect[-1] : &:r2122_2, ~m2121_14 +# 2122| m2122_8(Base2) = ^IndirectMayWriteSideEffect[-1] : &:r2122_2 +# 2122| m2122_9(unknown) = Chi : total:m2121_14, partial:m2122_8 +# 2122| r2122_10(glval) = VirtualDeleteFunctionAddress : +# 2122| r2122_11(Base2 *) = CopyValue : r2122_1 +# 2122| v2122_12(void) = Call[?] : func:r2122_10, 0:r2122_11 +# 2122| m2122_13(unknown) = ^CallSideEffect : ~m2122_6 +# 2122| m2122_14(unknown) = Chi : total:m2122_6, partial:m2122_13 +# 2124| r2124_1(glval) = VariableAddress[b2] : +# 2124| r2124_2(glval) = FunctionAddress[operator new] : +# 2124| r2124_3(unsigned long) = Constant[16] : +# 2124| r2124_4(void *) = Call[operator new] : func:r2124_2, 0:r2124_3 +# 2124| m2124_5(unknown) = ^CallSideEffect : ~m2122_14 +# 2124| m2124_6(unknown) = Chi : total:m2122_14, partial:m2124_5 +# 2124| m2124_7(unknown) = ^InitializeDynamicAllocation : &:r2124_4 +# 2124| r2124_8(Derived2 *) = Convert : r2124_4 +# 2124| r2124_9(glval) = FunctionAddress[Derived2] : +# 2124| v2124_10(void) = Call[Derived2] : func:r2124_9, this:r2124_8 +# 2124| m2124_11(unknown) = ^CallSideEffect : ~m2124_6 +# 2124| m2124_12(unknown) = Chi : total:m2124_6, partial:m2124_11 +# 2124| m2124_13(Derived2) = ^IndirectMayWriteSideEffect[-1] : &:r2124_8 +# 2124| m2124_14(unknown) = Chi : total:m2124_7, partial:m2124_13 +# 2124| r2124_15(Base2 *) = ConvertToNonVirtualBase[Derived2 : Base2] : r2124_8 +# 2124| m2124_16(Base2 *) = Store[b2] : &:r2124_1, r2124_15 +# 2125| r2125_1(glval) = VariableAddress[b2] : +# 2125| r2125_2(Base2 *) = Load[b2] : &:r2125_1, m2124_16 +# 2125| r2125_3(glval) = FunctionAddress[~Base2] : +# 2125| v2125_4(void) = Call[~Base2] : func:r2125_3 +# 2125| m2125_5(unknown) = ^CallSideEffect : ~m2124_12 +# 2125| m2125_6(unknown) = Chi : total:m2124_12, partial:m2125_5 +# 2125| v2125_7(void) = ^IndirectReadSideEffect[-1] : &:r2125_2, ~m2124_14 +# 2125| m2125_8(Base2) = ^IndirectMayWriteSideEffect[-1] : &:r2125_2 +# 2125| m2125_9(unknown) = Chi : total:m2124_14, partial:m2125_8 +# 2125| r2125_10(glval) = VirtualDeleteFunctionAddress : +# 2125| r2125_11(Base2 *) = CopyValue : r2125_1 +# 2125| v2125_12(void) = Call[?] : func:r2125_10, 0:r2125_11 +# 2125| m2125_13(unknown) = ^CallSideEffect : ~m2125_6 +# 2125| m2125_14(unknown) = Chi : total:m2125_6, partial:m2125_13 +# 2127| r2127_1(glval) = VariableAddress[d] : +# 2127| r2127_2(glval) = FunctionAddress[operator new] : +# 2127| r2127_3(unsigned long) = Constant[16] : +# 2127| r2127_4(void *) = Call[operator new] : func:r2127_2, 0:r2127_3 +# 2127| m2127_5(unknown) = ^CallSideEffect : ~m2125_14 +# 2127| m2127_6(unknown) = Chi : total:m2125_14, partial:m2127_5 +# 2127| m2127_7(unknown) = ^InitializeDynamicAllocation : &:r2127_4 +# 2127| r2127_8(Derived2 *) = Convert : r2127_4 +# 2127| r2127_9(glval) = FunctionAddress[Derived2] : +# 2127| v2127_10(void) = Call[Derived2] : func:r2127_9, this:r2127_8 +# 2127| m2127_11(unknown) = ^CallSideEffect : ~m2127_6 +# 2127| m2127_12(unknown) = Chi : total:m2127_6, partial:m2127_11 +# 2127| m2127_13(Derived2) = ^IndirectMayWriteSideEffect[-1] : &:r2127_8 +# 2127| m2127_14(unknown) = Chi : total:m2127_7, partial:m2127_13 +# 2127| m2127_15(Derived2 *) = Store[d] : &:r2127_1, r2127_8 +# 2128| r2128_1(glval) = VariableAddress[d] : +# 2128| r2128_2(Derived2 *) = Load[d] : &:r2128_1, m2127_15 +# 2128| r2128_3(glval) = FunctionAddress[~Derived2] : +# 2128| v2128_4(void) = Call[~Derived2] : func:r2128_3 +# 2128| m2128_5(unknown) = ^CallSideEffect : ~m2127_12 +# 2128| m2128_6(unknown) = Chi : total:m2127_12, partial:m2128_5 +# 2128| v2128_7(void) = ^IndirectReadSideEffect[-1] : &:r2128_2, ~m2127_14 +# 2128| m2128_8(Derived2) = ^IndirectMayWriteSideEffect[-1] : &:r2128_2 +# 2128| m2128_9(unknown) = Chi : total:m2127_14, partial:m2128_8 +# 2128| r2128_10(glval) = VirtualDeleteFunctionAddress : +# 2128| r2128_11(Derived2 *) = CopyValue : r2128_1 +# 2128| v2128_12(void) = Call[?] : func:r2128_10, 0:r2128_11 +# 2128| m2128_13(unknown) = ^CallSideEffect : ~m2128_6 +# 2128| m2128_14(unknown) = Chi : total:m2128_6, partial:m2128_13 +# 2129| r2129_1(glval) = VariableAddress[#return] : +# 2129| m2129_2(int) = Uninitialized[#return] : &:r2129_1 +# 2119| r2119_5(glval) = VariableAddress[#return] : +# 2119| v2119_6(void) = ReturnValue : &:r2119_5, m2129_2 +# 2119| v2119_7(void) = AliasedUse : ~m2128_14 +# 2119| v2119_8(void) = ExitFunction : -# 2126| int NonExit() -# 2126| Block 0 -# 2126| v2126_1(void) = EnterFunction : -# 2126| m2126_2(unknown) = AliasedDefinition : -# 2126| m2126_3(unknown) = InitializeNonLocal : -# 2126| m2126_4(unknown) = Chi : total:m2126_2, partial:m2126_3 -# 2127| r2127_1(glval) = VariableAddress[x] : -# 2127| r2127_2(glval) = FunctionAddress[Add] : -# 2127| r2127_3(int) = Constant[3] : -# 2127| r2127_4(int) = Constant[4] : -# 2127| r2127_5(int) = Call[Add] : func:r2127_2, 0:r2127_3, 1:r2127_4 -# 2127| m2127_6(unknown) = ^CallSideEffect : ~m2126_4 -# 2127| m2127_7(unknown) = Chi : total:m2126_4, partial:m2127_6 -# 2127| m2127_8(int) = Store[x] : &:r2127_1, r2127_5 -# 2128| r2128_1(glval) = VariableAddress[x] : -# 2128| r2128_2(int) = Load[x] : &:r2128_1, m2127_8 -# 2128| r2128_3(int) = Constant[7] : -# 2128| r2128_4(bool) = CompareEQ : r2128_2, r2128_3 -# 2128| v2128_5(void) = ConditionalBranch : r2128_4 -#-----| False -> Block 2 -#-----| True -> Block 1 +# 2133| void test_constant_folding() +# 2133| Block 0 +# 2133| v2133_1(void) = EnterFunction : +# 2133| m2133_2(unknown) = AliasedDefinition : +# 2133| m2133_3(unknown) = InitializeNonLocal : +# 2133| m2133_4(unknown) = Chi : total:m2133_2, partial:m2133_3 +# 2134| r2134_1(glval) = VariableAddress[x] : +# 2134| r2134_2(int) = Constant[116] : +# 2134| m2134_3(int) = Store[x] : &:r2134_1, r2134_2 +# 2135| r2135_1(glval) = FunctionAddress[test_constant_folding_use] : +# 2135| r2135_2(int) = Constant[116] : +# 2135| v2135_3(void) = Call[test_constant_folding_use] : func:r2135_1, 0:r2135_2 +# 2135| m2135_4(unknown) = ^CallSideEffect : ~m2133_4 +# 2135| m2135_5(unknown) = Chi : total:m2133_4, partial:m2135_4 +# 2136| v2136_1(void) = NoOp : +# 2133| v2133_5(void) = ReturnVoid : +# 2133| v2133_6(void) = AliasedUse : ~m2135_5 +# 2133| v2133_7(void) = ExitFunction : -# 2129| Block 1 -# 2129| r2129_1(glval) = FunctionAddress[exit] : -# 2129| r2129_2(int) = Constant[3] : -# 2129| v2129_3(void) = Call[exit] : func:r2129_1, 0:r2129_2 -# 2129| m2129_4(unknown) = ^CallSideEffect : ~m2127_7 -# 2129| m2129_5(unknown) = Chi : total:m2127_7, partial:m2129_4 -# 2126| v2126_5(void) = Unreached : - -# 2130| Block 2 -# 2130| r2130_1(glval) = FunctionAddress[VoidFunc] : -# 2130| v2130_2(void) = Call[VoidFunc] : func:r2130_1 -# 2130| m2130_3(unknown) = ^CallSideEffect : ~m2127_7 -# 2130| m2130_4(unknown) = Chi : total:m2127_7, partial:m2130_3 -# 2131| r2131_1(glval) = VariableAddress[#return] : -# 2131| r2131_2(glval) = VariableAddress[x] : -# 2131| r2131_3(int) = Load[x] : &:r2131_2, m2127_8 -# 2131| m2131_4(int) = Store[#return] : &:r2131_1, r2131_3 -# 2126| r2126_6(glval) = VariableAddress[#return] : -# 2126| v2126_7(void) = ReturnValue : &:r2126_6, m2131_4 -# 2126| v2126_8(void) = AliasedUse : ~m2130_4 -# 2126| v2126_9(void) = ExitFunction : - -# 2134| void CallsNonExit() -# 2134| Block 0 -# 2134| v2134_1(void) = EnterFunction : -# 2134| m2134_2(unknown) = AliasedDefinition : -# 2134| m2134_3(unknown) = InitializeNonLocal : -# 2134| m2134_4(unknown) = Chi : total:m2134_2, partial:m2134_3 -# 2135| r2135_1(glval) = FunctionAddress[VoidFunc] : -# 2135| v2135_2(void) = Call[VoidFunc] : func:r2135_1 -# 2135| m2135_3(unknown) = ^CallSideEffect : ~m2134_4 -# 2135| m2135_4(unknown) = Chi : total:m2134_4, partial:m2135_3 -# 2136| r2136_1(glval) = FunctionAddress[exit] : -# 2136| r2136_2(int) = Constant[3] : -# 2136| v2136_3(void) = Call[exit] : func:r2136_1, 0:r2136_2 -# 2136| m2136_4(unknown) = ^CallSideEffect : ~m2135_4 -# 2136| m2136_5(unknown) = Chi : total:m2135_4, partial:m2136_4 -# 2134| v2134_5(void) = Unreached : - -# 2139| int TransNonExit() -# 2139| Block 0 -# 2139| v2139_1(void) = EnterFunction : -# 2139| m2139_2(unknown) = AliasedDefinition : -# 2139| m2139_3(unknown) = InitializeNonLocal : -# 2139| m2139_4(unknown) = Chi : total:m2139_2, partial:m2139_3 -# 2140| r2140_1(glval) = VariableAddress[x] : -# 2140| r2140_2(glval) = FunctionAddress[Add] : -# 2140| r2140_3(int) = Constant[3] : -# 2140| r2140_4(int) = Constant[4] : -# 2140| r2140_5(int) = Call[Add] : func:r2140_2, 0:r2140_3, 1:r2140_4 -# 2140| m2140_6(unknown) = ^CallSideEffect : ~m2139_4 -# 2140| m2140_7(unknown) = Chi : total:m2139_4, partial:m2140_6 -# 2140| m2140_8(int) = Store[x] : &:r2140_1, r2140_5 +# 2140| int NonExit() +# 2140| Block 0 +# 2140| v2140_1(void) = EnterFunction : +# 2140| m2140_2(unknown) = AliasedDefinition : +# 2140| m2140_3(unknown) = InitializeNonLocal : +# 2140| m2140_4(unknown) = Chi : total:m2140_2, partial:m2140_3 # 2141| r2141_1(glval) = VariableAddress[x] : -# 2141| r2141_2(int) = Load[x] : &:r2141_1, m2140_8 -# 2141| r2141_3(int) = Constant[7] : -# 2141| r2141_4(bool) = CompareEQ : r2141_2, r2141_3 -# 2141| v2141_5(void) = ConditionalBranch : r2141_4 +# 2141| r2141_2(glval) = FunctionAddress[Add] : +# 2141| r2141_3(int) = Constant[3] : +# 2141| r2141_4(int) = Constant[4] : +# 2141| r2141_5(int) = Call[Add] : func:r2141_2, 0:r2141_3, 1:r2141_4 +# 2141| m2141_6(unknown) = ^CallSideEffect : ~m2140_4 +# 2141| m2141_7(unknown) = Chi : total:m2140_4, partial:m2141_6 +# 2141| m2141_8(int) = Store[x] : &:r2141_1, r2141_5 +# 2142| r2142_1(glval) = VariableAddress[x] : +# 2142| r2142_2(int) = Load[x] : &:r2142_1, m2141_8 +# 2142| r2142_3(int) = Constant[7] : +# 2142| r2142_4(bool) = CompareEQ : r2142_2, r2142_3 +# 2142| v2142_5(void) = ConditionalBranch : r2142_4 #-----| False -> Block 2 #-----| True -> Block 1 -# 2142| Block 1 -# 2142| r2142_1(glval) = FunctionAddress[CallsNonExit] : -# 2142| v2142_2(void) = Call[CallsNonExit] : func:r2142_1 -# 2139| v2139_5(void) = Unreached : +# 2143| Block 1 +# 2143| r2143_1(glval) = FunctionAddress[exit] : +# 2143| r2143_2(int) = Constant[3] : +# 2143| v2143_3(void) = Call[exit] : func:r2143_1, 0:r2143_2 +# 2143| m2143_4(unknown) = ^CallSideEffect : ~m2141_7 +# 2143| m2143_5(unknown) = Chi : total:m2141_7, partial:m2143_4 +# 2140| v2140_5(void) = Unreached : -# 2143| Block 2 -# 2143| r2143_1(glval) = FunctionAddress[VoidFunc] : -# 2143| v2143_2(void) = Call[VoidFunc] : func:r2143_1 -# 2143| m2143_3(unknown) = ^CallSideEffect : ~m2140_7 -# 2143| m2143_4(unknown) = Chi : total:m2140_7, partial:m2143_3 -# 2144| r2144_1(glval) = VariableAddress[#return] : -# 2144| r2144_2(glval) = VariableAddress[x] : -# 2144| r2144_3(int) = Load[x] : &:r2144_2, m2140_8 -# 2144| m2144_4(int) = Store[#return] : &:r2144_1, r2144_3 -# 2139| r2139_6(glval) = VariableAddress[#return] : -# 2139| v2139_7(void) = ReturnValue : &:r2139_6, m2144_4 -# 2139| v2139_8(void) = AliasedUse : ~m2143_4 -# 2139| v2139_9(void) = ExitFunction : +# 2144| Block 2 +# 2144| r2144_1(glval) = FunctionAddress[VoidFunc] : +# 2144| v2144_2(void) = Call[VoidFunc] : func:r2144_1 +# 2144| m2144_3(unknown) = ^CallSideEffect : ~m2141_7 +# 2144| m2144_4(unknown) = Chi : total:m2141_7, partial:m2144_3 +# 2145| r2145_1(glval) = VariableAddress[#return] : +# 2145| r2145_2(glval) = VariableAddress[x] : +# 2145| r2145_3(int) = Load[x] : &:r2145_2, m2141_8 +# 2145| m2145_4(int) = Store[#return] : &:r2145_1, r2145_3 +# 2140| r2140_6(glval) = VariableAddress[#return] : +# 2140| v2140_7(void) = ReturnValue : &:r2140_6, m2145_4 +# 2140| v2140_8(void) = AliasedUse : ~m2144_4 +# 2140| v2140_9(void) = ExitFunction : -# 2147| void newArrayCorrectType(size_t) -# 2147| Block 0 -# 2147| v2147_1(void) = EnterFunction : -# 2147| m2147_2(unknown) = AliasedDefinition : -# 2147| m2147_3(unknown) = InitializeNonLocal : -# 2147| m2147_4(unknown) = Chi : total:m2147_2, partial:m2147_3 -# 2147| r2147_5(glval) = VariableAddress[n] : -# 2147| m2147_6(unsigned long) = InitializeParameter[n] : &:r2147_5 -# 2148| r2148_1(glval) = FunctionAddress[operator new[]] : -# 2148| r2148_2(glval) = VariableAddress[n] : -# 2148| r2148_3(unsigned long) = Load[n] : &:r2148_2, m2147_6 -# 2148| r2148_4(unsigned long) = Constant[4] : -# 2148| r2148_5(unsigned long) = Mul : r2148_3, r2148_4 -# 2148| r2148_6(void *) = Call[operator new[]] : func:r2148_1, 0:r2148_5 -# 2148| m2148_7(unknown) = ^CallSideEffect : ~m2147_4 -# 2148| m2148_8(unknown) = Chi : total:m2147_4, partial:m2148_7 -# 2148| m2148_9(unknown) = ^InitializeDynamicAllocation : &:r2148_6 -# 2148| r2148_10(int *) = Convert : r2148_6 -# 2149| r2149_1(glval) = FunctionAddress[operator new[]] : -# 2149| r2149_2(glval) = VariableAddress[n] : -# 2149| r2149_3(unsigned long) = Load[n] : &:r2149_2, m2147_6 -# 2149| r2149_4(unsigned long) = Constant[4] : -# 2149| r2149_5(unsigned long) = Mul : r2149_3, r2149_4 -# 2149| r2149_6(float) = Constant[1.0] : -# 2149| r2149_7(void *) = Call[operator new[]] : func:r2149_1, 0:r2149_5, 1:r2149_6 -# 2149| m2149_8(unknown) = ^CallSideEffect : ~m2148_8 -# 2149| m2149_9(unknown) = Chi : total:m2148_8, partial:m2149_8 -# 2149| m2149_10(unknown) = ^InitializeDynamicAllocation : &:r2149_7 -# 2149| r2149_11(int *) = Convert : r2149_7 -# 2150| r2150_1(glval) = FunctionAddress[operator new[]] : -# 2150| r2150_2(glval) = VariableAddress[n] : -# 2150| r2150_3(unsigned long) = Load[n] : &:r2150_2, m2147_6 -# 2150| r2150_4(unsigned long) = Constant[8] : -# 2150| r2150_5(unsigned long) = Mul : r2150_3, r2150_4 -# 2150| r2150_6(void *) = Call[operator new[]] : func:r2150_1, 0:r2150_5 -# 2150| m2150_7(unknown) = ^CallSideEffect : ~m2149_9 -# 2150| m2150_8(unknown) = Chi : total:m2149_9, partial:m2150_7 -# 2150| m2150_9(unknown) = ^InitializeDynamicAllocation : &:r2150_6 -# 2150| r2150_10(String *) = Convert : r2150_6 -# 2151| r2151_1(glval) = FunctionAddress[operator new[]] : -# 2151| r2151_2(glval) = VariableAddress[n] : -# 2151| r2151_3(unsigned long) = Load[n] : &:r2151_2, m2147_6 -# 2151| r2151_4(unsigned long) = Constant[256] : -# 2151| r2151_5(unsigned long) = Mul : r2151_3, r2151_4 -# 2151| r2151_6(align_val_t) = Constant[128] : -# 2151| r2151_7(void *) = Call[operator new[]] : func:r2151_1, 0:r2151_5, 1:r2151_6 -# 2151| m2151_8(unknown) = ^CallSideEffect : ~m2150_8 -# 2151| m2151_9(unknown) = Chi : total:m2150_8, partial:m2151_8 -# 2151| m2151_10(unknown) = ^InitializeDynamicAllocation : &:r2151_7 -# 2151| r2151_11(Overaligned *) = Convert : r2151_7 -# 2152| r2152_1(glval) = FunctionAddress[operator new[]] : -# 2152| r2152_2(glval) = VariableAddress[n] : -# 2152| r2152_3(unsigned long) = Load[n] : &:r2152_2, m2147_6 -# 2152| r2152_4(unsigned long) = Constant[1] : -# 2152| r2152_5(unsigned long) = Mul : r2152_3, r2152_4 -# 2152| r2152_6(void *) = Call[operator new[]] : func:r2152_1, 0:r2152_5 -# 2152| m2152_7(unknown) = ^CallSideEffect : ~m2151_9 -# 2152| m2152_8(unknown) = Chi : total:m2151_9, partial:m2152_7 -# 2152| m2152_9(unknown) = ^InitializeDynamicAllocation : &:r2152_6 -# 2152| r2152_10(DefaultCtorWithDefaultParam *) = Convert : r2152_6 -# 2153| r2153_1(glval) = FunctionAddress[operator new[]] : -# 2153| r2153_2(glval) = VariableAddress[n] : -# 2153| r2153_3(unsigned long) = Load[n] : &:r2153_2, m2147_6 -# 2153| r2153_4(unsigned long) = Constant[4] : -# 2153| r2153_5(unsigned long) = Mul : r2153_3, r2153_4 -# 2153| r2153_6(void *) = Call[operator new[]] : func:r2153_1, 0:r2153_5 -# 2153| m2153_7(unknown) = ^CallSideEffect : ~m2152_8 -# 2153| m2153_8(unknown) = Chi : total:m2152_8, partial:m2153_7 -# 2153| m2153_9(unknown) = ^InitializeDynamicAllocation : &:r2153_6 -# 2153| r2153_10(int *) = Convert : r2153_6 -# 2154| v2154_1(void) = NoOp : -# 2147| v2147_7(void) = ReturnVoid : -# 2147| v2147_8(void) = AliasedUse : ~m2153_8 -# 2147| v2147_9(void) = ExitFunction : +# 2148| void CallsNonExit() +# 2148| Block 0 +# 2148| v2148_1(void) = EnterFunction : +# 2148| m2148_2(unknown) = AliasedDefinition : +# 2148| m2148_3(unknown) = InitializeNonLocal : +# 2148| m2148_4(unknown) = Chi : total:m2148_2, partial:m2148_3 +# 2149| r2149_1(glval) = FunctionAddress[VoidFunc] : +# 2149| v2149_2(void) = Call[VoidFunc] : func:r2149_1 +# 2149| m2149_3(unknown) = ^CallSideEffect : ~m2148_4 +# 2149| m2149_4(unknown) = Chi : total:m2148_4, partial:m2149_3 +# 2150| r2150_1(glval) = FunctionAddress[exit] : +# 2150| r2150_2(int) = Constant[3] : +# 2150| v2150_3(void) = Call[exit] : func:r2150_1, 0:r2150_2 +# 2150| m2150_4(unknown) = ^CallSideEffect : ~m2149_4 +# 2150| m2150_5(unknown) = Chi : total:m2149_4, partial:m2150_4 +# 2148| v2148_5(void) = Unreached : -# 2158| char* test_strtod(char*) -# 2158| Block 0 -# 2158| v2158_1(void) = EnterFunction : -# 2158| m2158_2(unknown) = AliasedDefinition : -# 2158| m2158_3(unknown) = InitializeNonLocal : -# 2158| m2158_4(unknown) = Chi : total:m2158_2, partial:m2158_3 -# 2158| r2158_5(glval) = VariableAddress[s] : -# 2158| m2158_6(char *) = InitializeParameter[s] : &:r2158_5 -# 2158| r2158_7(char *) = Load[s] : &:r2158_5, m2158_6 -# 2158| m2158_8(unknown) = InitializeIndirection[s] : &:r2158_7 -# 2159| r2159_1(glval) = VariableAddress[end] : -# 2159| m2159_2(char *) = Uninitialized[end] : &:r2159_1 -# 2160| r2160_1(glval) = VariableAddress[d] : -# 2160| r2160_2(glval) = FunctionAddress[strtod] : -# 2160| r2160_3(glval) = VariableAddress[s] : -# 2160| r2160_4(char *) = Load[s] : &:r2160_3, m2158_6 -# 2160| r2160_5(char *) = Convert : r2160_4 -# 2160| r2160_6(glval) = VariableAddress[end] : -# 2160| r2160_7(char **) = CopyValue : r2160_6 -# 2160| r2160_8(double) = Call[strtod] : func:r2160_2, 0:r2160_5, 1:r2160_7 -# 2160| v2160_9(void) = ^BufferReadSideEffect[0] : &:r2160_5, ~m2158_8 -# 2160| m2160_10(char *) = ^IndirectMayWriteSideEffect[1] : &:r2160_7 -# 2160| m2160_11(char *) = Chi : total:m2159_2, partial:m2160_10 -# 2160| m2160_12(double) = Store[d] : &:r2160_1, r2160_8 -# 2161| r2161_1(glval) = VariableAddress[#return] : -# 2161| r2161_2(glval) = VariableAddress[end] : -# 2161| r2161_3(char *) = Load[end] : &:r2161_2, m2160_11 -# 2161| m2161_4(char *) = Store[#return] : &:r2161_1, r2161_3 -# 2158| v2158_9(void) = ReturnIndirection[s] : &:r2158_7, m2158_8 -# 2158| r2158_10(glval) = VariableAddress[#return] : -# 2158| v2158_11(void) = ReturnValue : &:r2158_10, m2161_4 -# 2158| v2158_12(void) = AliasedUse : m2158_3 -# 2158| v2158_13(void) = ExitFunction : - -# 2168| void call_as_child_of_ConditionDeclExpr() -# 2168| Block 0 -# 2168| v2168_1(void) = EnterFunction : -# 2168| m2168_2(unknown) = AliasedDefinition : -# 2168| m2168_3(unknown) = InitializeNonLocal : -# 2168| m2168_4(unknown) = Chi : total:m2168_2, partial:m2168_3 -# 2169| r2169_1(glval) = VariableAddress[b] : -# 2169| r2169_2(HasOperatorBool) = Constant[0] : -# 2169| m2169_3(HasOperatorBool) = Store[b] : &:r2169_1, r2169_2 -# 2169| r2169_4(glval) = VariableAddress[b] : -# 2169| r2169_5(glval) = FunctionAddress[operator bool] : -# 2169| r2169_6(bool) = Call[operator bool] : func:r2169_5, this:r2169_4 -# 2169| m2169_7(unknown) = ^CallSideEffect : ~m2168_4 -# 2169| m2169_8(unknown) = Chi : total:m2168_4, partial:m2169_7 -# 2169| v2169_9(void) = ^IndirectReadSideEffect[-1] : &:r2169_4, m2169_3 -# 2169| m2169_10(HasOperatorBool) = ^IndirectMayWriteSideEffect[-1] : &:r2169_4 -# 2169| m2169_11(HasOperatorBool) = Chi : total:m2169_3, partial:m2169_10 -# 2169| r2169_12(bool) = CopyValue : r2169_6 -# 2169| v2169_13(void) = ConditionalBranch : r2169_12 +# 2153| int TransNonExit() +# 2153| Block 0 +# 2153| v2153_1(void) = EnterFunction : +# 2153| m2153_2(unknown) = AliasedDefinition : +# 2153| m2153_3(unknown) = InitializeNonLocal : +# 2153| m2153_4(unknown) = Chi : total:m2153_2, partial:m2153_3 +# 2154| r2154_1(glval) = VariableAddress[x] : +# 2154| r2154_2(glval) = FunctionAddress[Add] : +# 2154| r2154_3(int) = Constant[3] : +# 2154| r2154_4(int) = Constant[4] : +# 2154| r2154_5(int) = Call[Add] : func:r2154_2, 0:r2154_3, 1:r2154_4 +# 2154| m2154_6(unknown) = ^CallSideEffect : ~m2153_4 +# 2154| m2154_7(unknown) = Chi : total:m2153_4, partial:m2154_6 +# 2154| m2154_8(int) = Store[x] : &:r2154_1, r2154_5 +# 2155| r2155_1(glval) = VariableAddress[x] : +# 2155| r2155_2(int) = Load[x] : &:r2155_1, m2154_8 +# 2155| r2155_3(int) = Constant[7] : +# 2155| r2155_4(bool) = CompareEQ : r2155_2, r2155_3 +# 2155| v2155_5(void) = ConditionalBranch : r2155_4 #-----| False -> Block 2 #-----| True -> Block 1 -# 2169| Block 1 -# 2169| v2169_14(void) = NoOp : +# 2156| Block 1 +# 2156| r2156_1(glval) = FunctionAddress[CallsNonExit] : +# 2156| v2156_2(void) = Call[CallsNonExit] : func:r2156_1 +# 2153| v2153_5(void) = Unreached : + +# 2157| Block 2 +# 2157| r2157_1(glval) = FunctionAddress[VoidFunc] : +# 2157| v2157_2(void) = Call[VoidFunc] : func:r2157_1 +# 2157| m2157_3(unknown) = ^CallSideEffect : ~m2154_7 +# 2157| m2157_4(unknown) = Chi : total:m2154_7, partial:m2157_3 +# 2158| r2158_1(glval) = VariableAddress[#return] : +# 2158| r2158_2(glval) = VariableAddress[x] : +# 2158| r2158_3(int) = Load[x] : &:r2158_2, m2154_8 +# 2158| m2158_4(int) = Store[#return] : &:r2158_1, r2158_3 +# 2153| r2153_6(glval) = VariableAddress[#return] : +# 2153| v2153_7(void) = ReturnValue : &:r2153_6, m2158_4 +# 2153| v2153_8(void) = AliasedUse : ~m2157_4 +# 2153| v2153_9(void) = ExitFunction : + +# 2161| void newArrayCorrectType(size_t) +# 2161| Block 0 +# 2161| v2161_1(void) = EnterFunction : +# 2161| m2161_2(unknown) = AliasedDefinition : +# 2161| m2161_3(unknown) = InitializeNonLocal : +# 2161| m2161_4(unknown) = Chi : total:m2161_2, partial:m2161_3 +# 2161| r2161_5(glval) = VariableAddress[n] : +# 2161| m2161_6(unsigned long) = InitializeParameter[n] : &:r2161_5 +# 2162| r2162_1(glval) = FunctionAddress[operator new[]] : +# 2162| r2162_2(glval) = VariableAddress[n] : +# 2162| r2162_3(unsigned long) = Load[n] : &:r2162_2, m2161_6 +# 2162| r2162_4(unsigned long) = Constant[4] : +# 2162| r2162_5(unsigned long) = Mul : r2162_3, r2162_4 +# 2162| r2162_6(void *) = Call[operator new[]] : func:r2162_1, 0:r2162_5 +# 2162| m2162_7(unknown) = ^CallSideEffect : ~m2161_4 +# 2162| m2162_8(unknown) = Chi : total:m2161_4, partial:m2162_7 +# 2162| m2162_9(unknown) = ^InitializeDynamicAllocation : &:r2162_6 +# 2162| r2162_10(int *) = Convert : r2162_6 +# 2163| r2163_1(glval) = FunctionAddress[operator new[]] : +# 2163| r2163_2(glval) = VariableAddress[n] : +# 2163| r2163_3(unsigned long) = Load[n] : &:r2163_2, m2161_6 +# 2163| r2163_4(unsigned long) = Constant[4] : +# 2163| r2163_5(unsigned long) = Mul : r2163_3, r2163_4 +# 2163| r2163_6(float) = Constant[1.0] : +# 2163| r2163_7(void *) = Call[operator new[]] : func:r2163_1, 0:r2163_5, 1:r2163_6 +# 2163| m2163_8(unknown) = ^CallSideEffect : ~m2162_8 +# 2163| m2163_9(unknown) = Chi : total:m2162_8, partial:m2163_8 +# 2163| m2163_10(unknown) = ^InitializeDynamicAllocation : &:r2163_7 +# 2163| r2163_11(int *) = Convert : r2163_7 +# 2164| r2164_1(glval) = FunctionAddress[operator new[]] : +# 2164| r2164_2(glval) = VariableAddress[n] : +# 2164| r2164_3(unsigned long) = Load[n] : &:r2164_2, m2161_6 +# 2164| r2164_4(unsigned long) = Constant[8] : +# 2164| r2164_5(unsigned long) = Mul : r2164_3, r2164_4 +# 2164| r2164_6(void *) = Call[operator new[]] : func:r2164_1, 0:r2164_5 +# 2164| m2164_7(unknown) = ^CallSideEffect : ~m2163_9 +# 2164| m2164_8(unknown) = Chi : total:m2163_9, partial:m2164_7 +# 2164| m2164_9(unknown) = ^InitializeDynamicAllocation : &:r2164_6 +# 2164| r2164_10(String *) = Convert : r2164_6 +# 2165| r2165_1(glval) = FunctionAddress[operator new[]] : +# 2165| r2165_2(glval) = VariableAddress[n] : +# 2165| r2165_3(unsigned long) = Load[n] : &:r2165_2, m2161_6 +# 2165| r2165_4(unsigned long) = Constant[256] : +# 2165| r2165_5(unsigned long) = Mul : r2165_3, r2165_4 +# 2165| r2165_6(align_val_t) = Constant[128] : +# 2165| r2165_7(void *) = Call[operator new[]] : func:r2165_1, 0:r2165_5, 1:r2165_6 +# 2165| m2165_8(unknown) = ^CallSideEffect : ~m2164_8 +# 2165| m2165_9(unknown) = Chi : total:m2164_8, partial:m2165_8 +# 2165| m2165_10(unknown) = ^InitializeDynamicAllocation : &:r2165_7 +# 2165| r2165_11(Overaligned *) = Convert : r2165_7 +# 2166| r2166_1(glval) = FunctionAddress[operator new[]] : +# 2166| r2166_2(glval) = VariableAddress[n] : +# 2166| r2166_3(unsigned long) = Load[n] : &:r2166_2, m2161_6 +# 2166| r2166_4(unsigned long) = Constant[1] : +# 2166| r2166_5(unsigned long) = Mul : r2166_3, r2166_4 +# 2166| r2166_6(void *) = Call[operator new[]] : func:r2166_1, 0:r2166_5 +# 2166| m2166_7(unknown) = ^CallSideEffect : ~m2165_9 +# 2166| m2166_8(unknown) = Chi : total:m2165_9, partial:m2166_7 +# 2166| m2166_9(unknown) = ^InitializeDynamicAllocation : &:r2166_6 +# 2166| r2166_10(DefaultCtorWithDefaultParam *) = Convert : r2166_6 +# 2167| r2167_1(glval) = FunctionAddress[operator new[]] : +# 2167| r2167_2(glval) = VariableAddress[n] : +# 2167| r2167_3(unsigned long) = Load[n] : &:r2167_2, m2161_6 +# 2167| r2167_4(unsigned long) = Constant[4] : +# 2167| r2167_5(unsigned long) = Mul : r2167_3, r2167_4 +# 2167| r2167_6(void *) = Call[operator new[]] : func:r2167_1, 0:r2167_5 +# 2167| m2167_7(unknown) = ^CallSideEffect : ~m2166_8 +# 2167| m2167_8(unknown) = Chi : total:m2166_8, partial:m2167_7 +# 2167| m2167_9(unknown) = ^InitializeDynamicAllocation : &:r2167_6 +# 2167| r2167_10(int *) = Convert : r2167_6 +# 2168| v2168_1(void) = NoOp : +# 2161| v2161_7(void) = ReturnVoid : +# 2161| v2161_8(void) = AliasedUse : ~m2167_8 +# 2161| v2161_9(void) = ExitFunction : + +# 2172| char* test_strtod(char*) +# 2172| Block 0 +# 2172| v2172_1(void) = EnterFunction : +# 2172| m2172_2(unknown) = AliasedDefinition : +# 2172| m2172_3(unknown) = InitializeNonLocal : +# 2172| m2172_4(unknown) = Chi : total:m2172_2, partial:m2172_3 +# 2172| r2172_5(glval) = VariableAddress[s] : +# 2172| m2172_6(char *) = InitializeParameter[s] : &:r2172_5 +# 2172| r2172_7(char *) = Load[s] : &:r2172_5, m2172_6 +# 2172| m2172_8(unknown) = InitializeIndirection[s] : &:r2172_7 +# 2173| r2173_1(glval) = VariableAddress[end] : +# 2173| m2173_2(char *) = Uninitialized[end] : &:r2173_1 +# 2174| r2174_1(glval) = VariableAddress[d] : +# 2174| r2174_2(glval) = FunctionAddress[strtod] : +# 2174| r2174_3(glval) = VariableAddress[s] : +# 2174| r2174_4(char *) = Load[s] : &:r2174_3, m2172_6 +# 2174| r2174_5(char *) = Convert : r2174_4 +# 2174| r2174_6(glval) = VariableAddress[end] : +# 2174| r2174_7(char **) = CopyValue : r2174_6 +# 2174| r2174_8(double) = Call[strtod] : func:r2174_2, 0:r2174_5, 1:r2174_7 +# 2174| v2174_9(void) = ^BufferReadSideEffect[0] : &:r2174_5, ~m2172_8 +# 2174| m2174_10(char *) = ^IndirectMayWriteSideEffect[1] : &:r2174_7 +# 2174| m2174_11(char *) = Chi : total:m2173_2, partial:m2174_10 +# 2174| m2174_12(double) = Store[d] : &:r2174_1, r2174_8 +# 2175| r2175_1(glval) = VariableAddress[#return] : +# 2175| r2175_2(glval) = VariableAddress[end] : +# 2175| r2175_3(char *) = Load[end] : &:r2175_2, m2174_11 +# 2175| m2175_4(char *) = Store[#return] : &:r2175_1, r2175_3 +# 2172| v2172_9(void) = ReturnIndirection[s] : &:r2172_7, m2172_8 +# 2172| r2172_10(glval) = VariableAddress[#return] : +# 2172| v2172_11(void) = ReturnValue : &:r2172_10, m2175_4 +# 2172| v2172_12(void) = AliasedUse : m2172_3 +# 2172| v2172_13(void) = ExitFunction : + +# 2182| void call_as_child_of_ConditionDeclExpr() +# 2182| Block 0 +# 2182| v2182_1(void) = EnterFunction : +# 2182| m2182_2(unknown) = AliasedDefinition : +# 2182| m2182_3(unknown) = InitializeNonLocal : +# 2182| m2182_4(unknown) = Chi : total:m2182_2, partial:m2182_3 +# 2183| r2183_1(glval) = VariableAddress[b] : +# 2183| r2183_2(HasOperatorBool) = Constant[0] : +# 2183| m2183_3(HasOperatorBool) = Store[b] : &:r2183_1, r2183_2 +# 2183| r2183_4(glval) = VariableAddress[b] : +# 2183| r2183_5(glval) = FunctionAddress[operator bool] : +# 2183| r2183_6(bool) = Call[operator bool] : func:r2183_5, this:r2183_4 +# 2183| m2183_7(unknown) = ^CallSideEffect : ~m2182_4 +# 2183| m2183_8(unknown) = Chi : total:m2182_4, partial:m2183_7 +# 2183| v2183_9(void) = ^IndirectReadSideEffect[-1] : &:r2183_4, m2183_3 +# 2183| m2183_10(HasOperatorBool) = ^IndirectMayWriteSideEffect[-1] : &:r2183_4 +# 2183| m2183_11(HasOperatorBool) = Chi : total:m2183_3, partial:m2183_10 +# 2183| r2183_12(bool) = CopyValue : r2183_6 +# 2183| v2183_13(void) = ConditionalBranch : r2183_12 +#-----| False -> Block 2 +#-----| True -> Block 1 + +# 2183| Block 1 +# 2183| v2183_14(void) = NoOp : #-----| Goto -> Block 2 -# 2170| Block 2 -# 2170| v2170_1(void) = NoOp : -# 2168| v2168_5(void) = ReturnVoid : -# 2168| v2168_6(void) = AliasedUse : ~m2169_8 -# 2168| v2168_7(void) = ExitFunction : +# 2184| Block 2 +# 2184| v2184_1(void) = NoOp : +# 2182| v2182_5(void) = ReturnVoid : +# 2182| v2182_6(void) = AliasedUse : ~m2183_8 +# 2182| v2182_7(void) = ExitFunction : -# 2172| void ClassWithDestructor::ClassWithDestructor(ClassWithDestructor const&) -# 2172| Block 0 -# 2172| v2172_1(void) = EnterFunction : -# 2172| m2172_2(unknown) = AliasedDefinition : -# 2172| m2172_3(unknown) = InitializeNonLocal : -# 2172| m2172_4(unknown) = Chi : total:m2172_2, partial:m2172_3 -# 2172| r2172_5(glval) = VariableAddress[#this] : -# 2172| m2172_6(glval) = InitializeParameter[#this] : &:r2172_5 -# 2172| r2172_7(glval) = Load[#this] : &:r2172_5, m2172_6 -# 2172| m2172_8(ClassWithDestructor) = InitializeIndirection[#this] : &:r2172_7 +# 2186| void ClassWithDestructor::ClassWithDestructor(ClassWithDestructor const&) +# 2186| Block 0 +# 2186| v2186_1(void) = EnterFunction : +# 2186| m2186_2(unknown) = AliasedDefinition : +# 2186| m2186_3(unknown) = InitializeNonLocal : +# 2186| m2186_4(unknown) = Chi : total:m2186_2, partial:m2186_3 +# 2186| r2186_5(glval) = VariableAddress[#this] : +# 2186| m2186_6(glval) = InitializeParameter[#this] : &:r2186_5 +# 2186| r2186_7(glval) = Load[#this] : &:r2186_5, m2186_6 +# 2186| m2186_8(ClassWithDestructor) = InitializeIndirection[#this] : &:r2186_7 #-----| r0_1(glval) = VariableAddress[(unnamed parameter 0)] : #-----| m0_2(ClassWithDestructor &) = InitializeParameter[(unnamed parameter 0)] : &:r0_1 #-----| r0_3(ClassWithDestructor &) = Load[(unnamed parameter 0)] : &:r0_1, m0_2 #-----| m0_4(unknown) = InitializeIndirection[(unnamed parameter 0)] : &:r0_3 -# 2172| r2172_9(glval) = FieldAddress[x] : m2172_6 -# 2172| r2172_10(glval) = VariableAddress[(unnamed parameter 0)] : -# 2172| r2172_11(ClassWithDestructor &) = Load[(unnamed parameter 0)] : &:r2172_10, m0_2 -# 2172| r2172_12(glval) = CopyValue : r2172_11 -# 2172| r2172_13(glval) = FieldAddress[x] : r2172_12 -# 2172| r2172_14(char *) = Load[?] : &:r2172_13, ~m0_4 -# 2172| m2172_15(char *) = Store[?] : &:r2172_9, r2172_14 -# 2172| m2172_16(unknown) = Chi : total:m2172_8, partial:m2172_15 -# 2172| v2172_17(void) = NoOp : -# 2172| v2172_18(void) = ReturnIndirection[#this] : &:r2172_7, m2172_16 +# 2186| r2186_9(glval) = FieldAddress[x] : m2186_6 +# 2186| r2186_10(glval) = VariableAddress[(unnamed parameter 0)] : +# 2186| r2186_11(ClassWithDestructor &) = Load[(unnamed parameter 0)] : &:r2186_10, m0_2 +# 2186| r2186_12(glval) = CopyValue : r2186_11 +# 2186| r2186_13(glval) = FieldAddress[x] : r2186_12 +# 2186| r2186_14(char *) = Load[?] : &:r2186_13, ~m0_4 +# 2186| m2186_15(char *) = Store[?] : &:r2186_9, r2186_14 +# 2186| m2186_16(unknown) = Chi : total:m2186_8, partial:m2186_15 +# 2186| v2186_17(void) = NoOp : +# 2186| v2186_18(void) = ReturnIndirection[#this] : &:r2186_7, m2186_16 #-----| v0_5(void) = ReturnIndirection[(unnamed parameter 0)] : &:r0_3, m0_4 -# 2172| v2172_19(void) = ReturnVoid : -# 2172| v2172_20(void) = AliasedUse : m2172_3 -# 2172| v2172_21(void) = ExitFunction : +# 2186| v2186_19(void) = ReturnVoid : +# 2186| v2186_20(void) = AliasedUse : m2186_3 +# 2186| v2186_21(void) = ExitFunction : -# 2175| void ClassWithDestructor::ClassWithDestructor() -# 2175| Block 0 -# 2175| v2175_1(void) = EnterFunction : -# 2175| m2175_2(unknown) = AliasedDefinition : -# 2175| m2175_3(unknown) = InitializeNonLocal : -# 2175| m2175_4(unknown) = Chi : total:m2175_2, partial:m2175_3 -# 2175| r2175_5(glval) = VariableAddress[#this] : -# 2175| m2175_6(glval) = InitializeParameter[#this] : &:r2175_5 -# 2175| r2175_7(glval) = Load[#this] : &:r2175_5, m2175_6 -# 2175| m2175_8(ClassWithDestructor) = InitializeIndirection[#this] : &:r2175_7 -# 2175| r2175_9(glval) = FunctionAddress[operator new] : -# 2175| r2175_10(unsigned long) = Constant[1] : -# 2175| r2175_11(void *) = Call[operator new] : func:r2175_9, 0:r2175_10 -# 2175| m2175_12(unknown) = ^CallSideEffect : ~m2175_4 -# 2175| m2175_13(unknown) = Chi : total:m2175_4, partial:m2175_12 -# 2175| m2175_14(unknown) = ^InitializeDynamicAllocation : &:r2175_11 -# 2175| r2175_15(char *) = Convert : r2175_11 -# 2175| r2175_16(glval) = VariableAddress[#this] : -# 2175| r2175_17(ClassWithDestructor *) = Load[#this] : &:r2175_16, m2175_6 -# 2175| r2175_18(glval) = FieldAddress[x] : r2175_17 -# 2175| m2175_19(char *) = Store[?] : &:r2175_18, r2175_15 -# 2175| m2175_20(unknown) = Chi : total:m2175_8, partial:m2175_19 -# 2175| v2175_21(void) = NoOp : -# 2175| v2175_22(void) = ReturnIndirection[#this] : &:r2175_7, m2175_20 -# 2175| v2175_23(void) = ReturnVoid : -# 2175| v2175_24(void) = AliasedUse : ~m2175_13 -# 2175| v2175_25(void) = ExitFunction : +# 2189| void ClassWithDestructor::ClassWithDestructor() +# 2189| Block 0 +# 2189| v2189_1(void) = EnterFunction : +# 2189| m2189_2(unknown) = AliasedDefinition : +# 2189| m2189_3(unknown) = InitializeNonLocal : +# 2189| m2189_4(unknown) = Chi : total:m2189_2, partial:m2189_3 +# 2189| r2189_5(glval) = VariableAddress[#this] : +# 2189| m2189_6(glval) = InitializeParameter[#this] : &:r2189_5 +# 2189| r2189_7(glval) = Load[#this] : &:r2189_5, m2189_6 +# 2189| m2189_8(ClassWithDestructor) = InitializeIndirection[#this] : &:r2189_7 +# 2189| r2189_9(glval) = FunctionAddress[operator new] : +# 2189| r2189_10(unsigned long) = Constant[1] : +# 2189| r2189_11(void *) = Call[operator new] : func:r2189_9, 0:r2189_10 +# 2189| m2189_12(unknown) = ^CallSideEffect : ~m2189_4 +# 2189| m2189_13(unknown) = Chi : total:m2189_4, partial:m2189_12 +# 2189| m2189_14(unknown) = ^InitializeDynamicAllocation : &:r2189_11 +# 2189| r2189_15(char *) = Convert : r2189_11 +# 2189| r2189_16(glval) = VariableAddress[#this] : +# 2189| r2189_17(ClassWithDestructor *) = Load[#this] : &:r2189_16, m2189_6 +# 2189| r2189_18(glval) = FieldAddress[x] : r2189_17 +# 2189| m2189_19(char *) = Store[?] : &:r2189_18, r2189_15 +# 2189| m2189_20(unknown) = Chi : total:m2189_8, partial:m2189_19 +# 2189| v2189_21(void) = NoOp : +# 2189| v2189_22(void) = ReturnIndirection[#this] : &:r2189_7, m2189_20 +# 2189| v2189_23(void) = ReturnVoid : +# 2189| v2189_24(void) = AliasedUse : ~m2189_13 +# 2189| v2189_25(void) = ExitFunction : -# 2176| void ClassWithDestructor::~ClassWithDestructor() -# 2176| Block 0 -# 2176| v2176_1(void) = EnterFunction : -# 2176| m2176_2(unknown) = AliasedDefinition : -# 2176| m2176_3(unknown) = InitializeNonLocal : -# 2176| m2176_4(unknown) = Chi : total:m2176_2, partial:m2176_3 -# 2176| r2176_5(glval) = VariableAddress[#this] : -# 2176| m2176_6(glval) = InitializeParameter[#this] : &:r2176_5 -# 2176| r2176_7(glval) = Load[#this] : &:r2176_5, m2176_6 -# 2176| m2176_8(ClassWithDestructor) = InitializeIndirection[#this] : &:r2176_7 -# 2176| r2176_9(glval) = FunctionAddress[operator delete] : -# 2176| r2176_10(glval) = VariableAddress[#this] : -# 2176| r2176_11(ClassWithDestructor *) = Load[#this] : &:r2176_10, m2176_6 -# 2176| r2176_12(glval) = FieldAddress[x] : r2176_11 -# 2176| r2176_13(char *) = Load[?] : &:r2176_12, ~m2176_8 -# 2176| v2176_14(void) = Call[operator delete] : func:r2176_9, 0:r2176_13 -# 2176| m2176_15(unknown) = ^CallSideEffect : ~m2176_4 -# 2176| m2176_16(unknown) = Chi : total:m2176_4, partial:m2176_15 -# 2176| v2176_17(void) = NoOp : -# 2176| v2176_18(void) = ReturnIndirection[#this] : &:r2176_7, m2176_8 -# 2176| v2176_19(void) = ReturnVoid : -# 2176| v2176_20(void) = AliasedUse : ~m2176_16 -# 2176| v2176_21(void) = ExitFunction : +# 2190| void ClassWithDestructor::~ClassWithDestructor() +# 2190| Block 0 +# 2190| v2190_1(void) = EnterFunction : +# 2190| m2190_2(unknown) = AliasedDefinition : +# 2190| m2190_3(unknown) = InitializeNonLocal : +# 2190| m2190_4(unknown) = Chi : total:m2190_2, partial:m2190_3 +# 2190| r2190_5(glval) = VariableAddress[#this] : +# 2190| m2190_6(glval) = InitializeParameter[#this] : &:r2190_5 +# 2190| r2190_7(glval) = Load[#this] : &:r2190_5, m2190_6 +# 2190| m2190_8(ClassWithDestructor) = InitializeIndirection[#this] : &:r2190_7 +# 2190| r2190_9(glval) = FunctionAddress[operator delete] : +# 2190| r2190_10(glval) = VariableAddress[#this] : +# 2190| r2190_11(ClassWithDestructor *) = Load[#this] : &:r2190_10, m2190_6 +# 2190| r2190_12(glval) = FieldAddress[x] : r2190_11 +# 2190| r2190_13(char *) = Load[?] : &:r2190_12, ~m2190_8 +# 2190| v2190_14(void) = Call[operator delete] : func:r2190_9, 0:r2190_13 +# 2190| m2190_15(unknown) = ^CallSideEffect : ~m2190_4 +# 2190| m2190_16(unknown) = Chi : total:m2190_4, partial:m2190_15 +# 2190| v2190_17(void) = NoOp : +# 2190| v2190_18(void) = ReturnIndirection[#this] : &:r2190_7, m2190_8 +# 2190| v2190_19(void) = ReturnVoid : +# 2190| v2190_20(void) = AliasedUse : ~m2190_16 +# 2190| v2190_21(void) = ExitFunction : -# 2178| void ClassWithDestructor::set_x(char) -# 2178| Block 0 -# 2178| v2178_1(void) = EnterFunction : -# 2178| m2178_2(unknown) = AliasedDefinition : -# 2178| m2178_3(unknown) = InitializeNonLocal : -# 2178| m2178_4(unknown) = Chi : total:m2178_2, partial:m2178_3 -# 2178| r2178_5(glval) = VariableAddress[#this] : -# 2178| m2178_6(glval) = InitializeParameter[#this] : &:r2178_5 -# 2178| r2178_7(glval) = Load[#this] : &:r2178_5, m2178_6 -# 2178| m2178_8(ClassWithDestructor) = InitializeIndirection[#this] : &:r2178_7 -# 2178| r2178_9(glval) = VariableAddress[y] : -# 2178| m2178_10(char) = InitializeParameter[y] : &:r2178_9 -# 2178| r2178_11(glval) = VariableAddress[y] : -# 2178| r2178_12(char) = Load[y] : &:r2178_11, m2178_10 -# 2178| r2178_13(glval) = VariableAddress[#this] : -# 2178| r2178_14(ClassWithDestructor *) = Load[#this] : &:r2178_13, m2178_6 -# 2178| r2178_15(glval) = FieldAddress[x] : r2178_14 -# 2178| r2178_16(char *) = Load[?] : &:r2178_15, ~m2178_8 -# 2178| r2178_17(glval) = CopyValue : r2178_16 -# 2178| m2178_18(char) = Store[?] : &:r2178_17, r2178_12 -# 2178| m2178_19(unknown) = Chi : total:m2178_4, partial:m2178_18 -# 2178| v2178_20(void) = NoOp : -# 2178| v2178_21(void) = ReturnIndirection[#this] : &:r2178_7, m2178_8 -# 2178| v2178_22(void) = ReturnVoid : -# 2178| v2178_23(void) = AliasedUse : ~m2178_19 -# 2178| v2178_24(void) = ExitFunction : +# 2192| void ClassWithDestructor::set_x(char) +# 2192| Block 0 +# 2192| v2192_1(void) = EnterFunction : +# 2192| m2192_2(unknown) = AliasedDefinition : +# 2192| m2192_3(unknown) = InitializeNonLocal : +# 2192| m2192_4(unknown) = Chi : total:m2192_2, partial:m2192_3 +# 2192| r2192_5(glval) = VariableAddress[#this] : +# 2192| m2192_6(glval) = InitializeParameter[#this] : &:r2192_5 +# 2192| r2192_7(glval) = Load[#this] : &:r2192_5, m2192_6 +# 2192| m2192_8(ClassWithDestructor) = InitializeIndirection[#this] : &:r2192_7 +# 2192| r2192_9(glval) = VariableAddress[y] : +# 2192| m2192_10(char) = InitializeParameter[y] : &:r2192_9 +# 2192| r2192_11(glval) = VariableAddress[y] : +# 2192| r2192_12(char) = Load[y] : &:r2192_11, m2192_10 +# 2192| r2192_13(glval) = VariableAddress[#this] : +# 2192| r2192_14(ClassWithDestructor *) = Load[#this] : &:r2192_13, m2192_6 +# 2192| r2192_15(glval) = FieldAddress[x] : r2192_14 +# 2192| r2192_16(char *) = Load[?] : &:r2192_15, ~m2192_8 +# 2192| r2192_17(glval) = CopyValue : r2192_16 +# 2192| m2192_18(char) = Store[?] : &:r2192_17, r2192_12 +# 2192| m2192_19(unknown) = Chi : total:m2192_4, partial:m2192_18 +# 2192| v2192_20(void) = NoOp : +# 2192| v2192_21(void) = ReturnIndirection[#this] : &:r2192_7, m2192_8 +# 2192| v2192_22(void) = ReturnVoid : +# 2192| v2192_23(void) = AliasedUse : ~m2192_19 +# 2192| v2192_24(void) = ExitFunction : -# 2179| char ClassWithDestructor::get_x() -# 2179| Block 0 -# 2179| v2179_1(void) = EnterFunction : -# 2179| m2179_2(unknown) = AliasedDefinition : -# 2179| m2179_3(unknown) = InitializeNonLocal : -# 2179| m2179_4(unknown) = Chi : total:m2179_2, partial:m2179_3 -# 2179| r2179_5(glval) = VariableAddress[#this] : -# 2179| m2179_6(glval) = InitializeParameter[#this] : &:r2179_5 -# 2179| r2179_7(glval) = Load[#this] : &:r2179_5, m2179_6 -# 2179| m2179_8(ClassWithDestructor) = InitializeIndirection[#this] : &:r2179_7 -# 2179| r2179_9(glval) = VariableAddress[#return] : -# 2179| r2179_10(glval) = VariableAddress[#this] : -# 2179| r2179_11(ClassWithDestructor *) = Load[#this] : &:r2179_10, m2179_6 -# 2179| r2179_12(glval) = FieldAddress[x] : r2179_11 -# 2179| r2179_13(char *) = Load[?] : &:r2179_12, ~m2179_8 -# 2179| r2179_14(char) = Load[?] : &:r2179_13, ~m2179_4 -# 2179| m2179_15(char) = Store[#return] : &:r2179_9, r2179_14 -# 2179| v2179_16(void) = ReturnIndirection[#this] : &:r2179_7, m2179_8 -# 2179| r2179_17(glval) = VariableAddress[#return] : -# 2179| v2179_18(void) = ReturnValue : &:r2179_17, m2179_15 -# 2179| v2179_19(void) = AliasedUse : m2179_3 -# 2179| v2179_20(void) = ExitFunction : +# 2193| char ClassWithDestructor::get_x() +# 2193| Block 0 +# 2193| v2193_1(void) = EnterFunction : +# 2193| m2193_2(unknown) = AliasedDefinition : +# 2193| m2193_3(unknown) = InitializeNonLocal : +# 2193| m2193_4(unknown) = Chi : total:m2193_2, partial:m2193_3 +# 2193| r2193_5(glval) = VariableAddress[#this] : +# 2193| m2193_6(glval) = InitializeParameter[#this] : &:r2193_5 +# 2193| r2193_7(glval) = Load[#this] : &:r2193_5, m2193_6 +# 2193| m2193_8(ClassWithDestructor) = InitializeIndirection[#this] : &:r2193_7 +# 2193| r2193_9(glval) = VariableAddress[#return] : +# 2193| r2193_10(glval) = VariableAddress[#this] : +# 2193| r2193_11(ClassWithDestructor *) = Load[#this] : &:r2193_10, m2193_6 +# 2193| r2193_12(glval) = FieldAddress[x] : r2193_11 +# 2193| r2193_13(char *) = Load[?] : &:r2193_12, ~m2193_8 +# 2193| r2193_14(char) = Load[?] : &:r2193_13, ~m2193_4 +# 2193| m2193_15(char) = Store[#return] : &:r2193_9, r2193_14 +# 2193| v2193_16(void) = ReturnIndirection[#this] : &:r2193_7, m2193_8 +# 2193| r2193_17(glval) = VariableAddress[#return] : +# 2193| v2193_18(void) = ReturnValue : &:r2193_17, m2193_15 +# 2193| v2193_19(void) = AliasedUse : m2193_3 +# 2193| v2193_20(void) = ExitFunction : -# 2182| bool initialization_with_destructor_bool -# 2182| Block 0 -# 2182| v2182_1(void) = EnterFunction : -# 2182| m2182_2(unknown) = AliasedDefinition : -# 2182| r2182_3(glval) = VariableAddress[initialization_with_destructor_bool] : -# 2182| r2182_4(bool) = Constant[1] : -# 2182| m2182_5(bool) = Store[initialization_with_destructor_bool] : &:r2182_3, r2182_4 -# 2182| m2182_6(unknown) = Chi : total:m2182_2, partial:m2182_5 -# 2182| v2182_7(void) = ReturnVoid : -# 2182| v2182_8(void) = AliasedUse : ~m2182_6 -# 2182| v2182_9(void) = ExitFunction : +# 2196| bool initialization_with_destructor_bool +# 2196| Block 0 +# 2196| v2196_1(void) = EnterFunction : +# 2196| m2196_2(unknown) = AliasedDefinition : +# 2196| r2196_3(glval) = VariableAddress[initialization_with_destructor_bool] : +# 2196| r2196_4(bool) = Constant[1] : +# 2196| m2196_5(bool) = Store[initialization_with_destructor_bool] : &:r2196_3, r2196_4 +# 2196| m2196_6(unknown) = Chi : total:m2196_2, partial:m2196_5 +# 2196| v2196_7(void) = ReturnVoid : +# 2196| v2196_8(void) = AliasedUse : ~m2196_6 +# 2196| v2196_9(void) = ExitFunction : -# 2184| void initialization_with_destructor(bool, char) -# 2184| Block 0 -# 2184| v2184_1(void) = EnterFunction : -# 2184| m2184_2(unknown) = AliasedDefinition : -# 2184| m2184_3(unknown) = InitializeNonLocal : -# 2184| m2184_4(unknown) = Chi : total:m2184_2, partial:m2184_3 -# 2184| r2184_5(glval) = VariableAddress[b] : -# 2184| m2184_6(bool) = InitializeParameter[b] : &:r2184_5 -# 2184| r2184_7(glval) = VariableAddress[c] : -# 2184| m2184_8(char) = InitializeParameter[c] : &:r2184_7 -# 2185| r2185_1(glval) = VariableAddress[x] : -# 2185| m2185_2(ClassWithDestructor) = Uninitialized[x] : &:r2185_1 -# 2185| r2185_3(glval) = FunctionAddress[ClassWithDestructor] : -# 2185| v2185_4(void) = Call[ClassWithDestructor] : func:r2185_3, this:r2185_1 -# 2185| m2185_5(unknown) = ^CallSideEffect : ~m2184_4 -# 2185| m2185_6(unknown) = Chi : total:m2184_4, partial:m2185_5 -# 2185| m2185_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2185_1 -# 2185| m2185_8(ClassWithDestructor) = Chi : total:m2185_2, partial:m2185_7 -# 2185| r2185_9(glval) = VariableAddress[b] : -# 2185| r2185_10(bool) = Load[b] : &:r2185_9, m2184_6 -# 2185| v2185_11(void) = ConditionalBranch : r2185_10 +# 2198| void initialization_with_destructor(bool, char) +# 2198| Block 0 +# 2198| v2198_1(void) = EnterFunction : +# 2198| m2198_2(unknown) = AliasedDefinition : +# 2198| m2198_3(unknown) = InitializeNonLocal : +# 2198| m2198_4(unknown) = Chi : total:m2198_2, partial:m2198_3 +# 2198| r2198_5(glval) = VariableAddress[b] : +# 2198| m2198_6(bool) = InitializeParameter[b] : &:r2198_5 +# 2198| r2198_7(glval) = VariableAddress[c] : +# 2198| m2198_8(char) = InitializeParameter[c] : &:r2198_7 +# 2199| r2199_1(glval) = VariableAddress[x] : +# 2199| m2199_2(ClassWithDestructor) = Uninitialized[x] : &:r2199_1 +# 2199| r2199_3(glval) = FunctionAddress[ClassWithDestructor] : +# 2199| v2199_4(void) = Call[ClassWithDestructor] : func:r2199_3, this:r2199_1 +# 2199| m2199_5(unknown) = ^CallSideEffect : ~m2198_4 +# 2199| m2199_6(unknown) = Chi : total:m2198_4, partial:m2199_5 +# 2199| m2199_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2199_1 +# 2199| m2199_8(ClassWithDestructor) = Chi : total:m2199_2, partial:m2199_7 +# 2199| r2199_9(glval) = VariableAddress[b] : +# 2199| r2199_10(bool) = Load[b] : &:r2199_9, m2198_6 +# 2199| v2199_11(void) = ConditionalBranch : r2199_10 #-----| False -> Block 3 #-----| True -> Block 2 -# 2184| Block 1 -# 2184| m2184_9(unknown) = Phi : from 13:~m2219_5, from 19:~m2219_13, from 23:~m2219_22 -# 2184| v2184_10(void) = ReturnVoid : -# 2184| v2184_11(void) = AliasedUse : ~m2184_9 -# 2184| v2184_12(void) = ExitFunction : +# 2198| Block 1 +# 2198| m2198_9(unknown) = Phi : from 13:~m2233_5, from 19:~m2233_13, from 23:~m2233_22 +# 2198| v2198_10(void) = ReturnVoid : +# 2198| v2198_11(void) = AliasedUse : ~m2198_9 +# 2198| v2198_12(void) = ExitFunction : -# 2186| Block 2 -# 2186| r2186_1(glval) = VariableAddress[x] : -# 2186| r2186_2(glval) = FunctionAddress[set_x] : -# 2186| r2186_3(char) = Constant[97] : -# 2186| v2186_4(void) = Call[set_x] : func:r2186_2, this:r2186_1, 0:r2186_3 -# 2186| m2186_5(unknown) = ^CallSideEffect : ~m2185_6 -# 2186| m2186_6(unknown) = Chi : total:m2185_6, partial:m2186_5 -# 2186| v2186_7(void) = ^IndirectReadSideEffect[-1] : &:r2186_1, m2185_8 -# 2186| m2186_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2186_1 -# 2186| m2186_9(ClassWithDestructor) = Chi : total:m2185_8, partial:m2186_8 -# 2186| r2186_10(glval) = VariableAddress[x] : -# 2186| r2186_11(glval) = FunctionAddress[~ClassWithDestructor] : -# 2186| v2186_12(void) = Call[~ClassWithDestructor] : func:r2186_11, this:r2186_10 -# 2186| m2186_13(unknown) = ^CallSideEffect : ~m2186_6 -# 2186| m2186_14(unknown) = Chi : total:m2186_6, partial:m2186_13 -# 2186| v2186_15(void) = ^IndirectReadSideEffect[-1] : &:r2186_10, m2186_9 -# 2186| m2186_16(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2186_10 -# 2186| m2186_17(ClassWithDestructor) = Chi : total:m2186_9, partial:m2186_16 +# 2200| Block 2 +# 2200| r2200_1(glval) = VariableAddress[x] : +# 2200| r2200_2(glval) = FunctionAddress[set_x] : +# 2200| r2200_3(char) = Constant[97] : +# 2200| v2200_4(void) = Call[set_x] : func:r2200_2, this:r2200_1, 0:r2200_3 +# 2200| m2200_5(unknown) = ^CallSideEffect : ~m2199_6 +# 2200| m2200_6(unknown) = Chi : total:m2199_6, partial:m2200_5 +# 2200| v2200_7(void) = ^IndirectReadSideEffect[-1] : &:r2200_1, m2199_8 +# 2200| m2200_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2200_1 +# 2200| m2200_9(ClassWithDestructor) = Chi : total:m2199_8, partial:m2200_8 +# 2200| r2200_10(glval) = VariableAddress[x] : +# 2200| r2200_11(glval) = FunctionAddress[~ClassWithDestructor] : +# 2200| v2200_12(void) = Call[~ClassWithDestructor] : func:r2200_11, this:r2200_10 +# 2200| m2200_13(unknown) = ^CallSideEffect : ~m2200_6 +# 2200| m2200_14(unknown) = Chi : total:m2200_6, partial:m2200_13 +# 2200| v2200_15(void) = ^IndirectReadSideEffect[-1] : &:r2200_10, m2200_9 +# 2200| m2200_16(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2200_10 +# 2200| m2200_17(ClassWithDestructor) = Chi : total:m2200_9, partial:m2200_16 #-----| Goto -> Block 3 -# 2188| Block 3 -# 2188| m2188_1(unknown) = Phi : from 0:~m2185_6, from 2:~m2186_14 -# 2188| r2188_2(glval) = VariableAddress[x] : -# 2188| m2188_3(ClassWithDestructor) = Uninitialized[x] : &:r2188_2 -# 2188| r2188_4(glval) = FunctionAddress[ClassWithDestructor] : -# 2188| v2188_5(void) = Call[ClassWithDestructor] : func:r2188_4, this:r2188_2 -# 2188| m2188_6(unknown) = ^CallSideEffect : ~m2188_1 -# 2188| m2188_7(unknown) = Chi : total:m2188_1, partial:m2188_6 -# 2188| m2188_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2188_2 -# 2188| m2188_9(ClassWithDestructor) = Chi : total:m2188_3, partial:m2188_8 -# 2188| r2188_10(bool) = Constant[1] : -# 2188| v2188_11(void) = ConditionalBranch : r2188_10 +# 2202| Block 3 +# 2202| m2202_1(unknown) = Phi : from 0:~m2199_6, from 2:~m2200_14 +# 2202| r2202_2(glval) = VariableAddress[x] : +# 2202| m2202_3(ClassWithDestructor) = Uninitialized[x] : &:r2202_2 +# 2202| r2202_4(glval) = FunctionAddress[ClassWithDestructor] : +# 2202| v2202_5(void) = Call[ClassWithDestructor] : func:r2202_4, this:r2202_2 +# 2202| m2202_6(unknown) = ^CallSideEffect : ~m2202_1 +# 2202| m2202_7(unknown) = Chi : total:m2202_1, partial:m2202_6 +# 2202| m2202_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2202_2 +# 2202| m2202_9(ClassWithDestructor) = Chi : total:m2202_3, partial:m2202_8 +# 2202| r2202_10(bool) = Constant[1] : +# 2202| v2202_11(void) = ConditionalBranch : r2202_10 #-----| False -> Block 24 #-----| True -> Block 4 -# 2189| Block 4 -# 2189| r2189_1(glval) = VariableAddress[x] : -# 2189| r2189_2(glval) = FunctionAddress[set_x] : -# 2189| r2189_3(char) = Constant[97] : -# 2189| v2189_4(void) = Call[set_x] : func:r2189_2, this:r2189_1, 0:r2189_3 -# 2189| m2189_5(unknown) = ^CallSideEffect : ~m2188_7 -# 2189| m2189_6(unknown) = Chi : total:m2188_7, partial:m2189_5 -# 2189| v2189_7(void) = ^IndirectReadSideEffect[-1] : &:r2189_1, m2188_9 -# 2189| m2189_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2189_1 -# 2189| m2189_9(ClassWithDestructor) = Chi : total:m2188_9, partial:m2189_8 -# 2191| r2191_1(glval) = VariableAddress[x] : -# 2191| m2191_2(ClassWithDestructor) = Uninitialized[x] : &:r2191_1 -# 2191| r2191_3(glval) = FunctionAddress[ClassWithDestructor] : -# 2191| v2191_4(void) = Call[ClassWithDestructor] : func:r2191_3, this:r2191_1 -# 2191| m2191_5(unknown) = ^CallSideEffect : ~m2189_6 -# 2191| m2191_6(unknown) = Chi : total:m2189_6, partial:m2191_5 -# 2191| m2191_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2191_1 -# 2191| m2191_8(ClassWithDestructor) = Chi : total:m2191_2, partial:m2191_7 -# 2191| r2191_9(glval) = VariableAddress[c] : -# 2191| r2191_10(char) = Load[c] : &:r2191_9, m2184_8 -# 2191| r2191_11(int) = Convert : r2191_10 -# 2191| v2191_12(void) = Switch : r2191_11 +# 2203| Block 4 +# 2203| r2203_1(glval) = VariableAddress[x] : +# 2203| r2203_2(glval) = FunctionAddress[set_x] : +# 2203| r2203_3(char) = Constant[97] : +# 2203| v2203_4(void) = Call[set_x] : func:r2203_2, this:r2203_1, 0:r2203_3 +# 2203| m2203_5(unknown) = ^CallSideEffect : ~m2202_7 +# 2203| m2203_6(unknown) = Chi : total:m2202_7, partial:m2203_5 +# 2203| v2203_7(void) = ^IndirectReadSideEffect[-1] : &:r2203_1, m2202_9 +# 2203| m2203_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2203_1 +# 2203| m2203_9(ClassWithDestructor) = Chi : total:m2202_9, partial:m2203_8 +# 2205| r2205_1(glval) = VariableAddress[x] : +# 2205| m2205_2(ClassWithDestructor) = Uninitialized[x] : &:r2205_1 +# 2205| r2205_3(glval) = FunctionAddress[ClassWithDestructor] : +# 2205| v2205_4(void) = Call[ClassWithDestructor] : func:r2205_3, this:r2205_1 +# 2205| m2205_5(unknown) = ^CallSideEffect : ~m2203_6 +# 2205| m2205_6(unknown) = Chi : total:m2203_6, partial:m2205_5 +# 2205| m2205_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2205_1 +# 2205| m2205_8(ClassWithDestructor) = Chi : total:m2205_2, partial:m2205_7 +# 2205| r2205_9(glval) = VariableAddress[c] : +# 2205| r2205_10(char) = Load[c] : &:r2205_9, m2198_8 +# 2205| r2205_11(int) = Convert : r2205_10 +# 2205| v2205_12(void) = Switch : r2205_11 #-----| Case[97] -> Block 5 #-----| Default -> Block 6 -# 2192| Block 5 -# 2192| v2192_1(void) = NoOp : -# 2193| r2193_1(glval) = VariableAddress[x] : -# 2193| r2193_2(glval) = FunctionAddress[set_x] : -# 2193| r2193_3(char) = Constant[97] : -# 2193| v2193_4(void) = Call[set_x] : func:r2193_2, this:r2193_1, 0:r2193_3 -# 2193| m2193_5(unknown) = ^CallSideEffect : ~m2191_6 -# 2193| m2193_6(unknown) = Chi : total:m2191_6, partial:m2193_5 -# 2193| v2193_7(void) = ^IndirectReadSideEffect[-1] : &:r2193_1, m2191_8 -# 2193| m2193_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2193_1 -# 2193| m2193_9(ClassWithDestructor) = Chi : total:m2191_8, partial:m2193_8 -# 2194| v2194_1(void) = NoOp : +# 2206| Block 5 +# 2206| v2206_1(void) = NoOp : +# 2207| r2207_1(glval) = VariableAddress[x] : +# 2207| r2207_2(glval) = FunctionAddress[set_x] : +# 2207| r2207_3(char) = Constant[97] : +# 2207| v2207_4(void) = Call[set_x] : func:r2207_2, this:r2207_1, 0:r2207_3 +# 2207| m2207_5(unknown) = ^CallSideEffect : ~m2205_6 +# 2207| m2207_6(unknown) = Chi : total:m2205_6, partial:m2207_5 +# 2207| v2207_7(void) = ^IndirectReadSideEffect[-1] : &:r2207_1, m2205_8 +# 2207| m2207_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2207_1 +# 2207| m2207_9(ClassWithDestructor) = Chi : total:m2205_8, partial:m2207_8 +# 2208| v2208_1(void) = NoOp : #-----| Goto -> Block 7 -# 2195| Block 6 -# 2195| v2195_1(void) = NoOp : -# 2196| r2196_1(glval) = VariableAddress[x] : -# 2196| r2196_2(glval) = FunctionAddress[set_x] : -# 2196| r2196_3(char) = Constant[98] : -# 2196| v2196_4(void) = Call[set_x] : func:r2196_2, this:r2196_1, 0:r2196_3 -# 2196| m2196_5(unknown) = ^CallSideEffect : ~m2191_6 -# 2196| m2196_6(unknown) = Chi : total:m2191_6, partial:m2196_5 -# 2196| v2196_7(void) = ^IndirectReadSideEffect[-1] : &:r2196_1, m2191_8 -# 2196| m2196_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2196_1 -# 2196| m2196_9(ClassWithDestructor) = Chi : total:m2191_8, partial:m2196_8 -# 2197| v2197_1(void) = NoOp : +# 2209| Block 6 +# 2209| v2209_1(void) = NoOp : +# 2210| r2210_1(glval) = VariableAddress[x] : +# 2210| r2210_2(glval) = FunctionAddress[set_x] : +# 2210| r2210_3(char) = Constant[98] : +# 2210| v2210_4(void) = Call[set_x] : func:r2210_2, this:r2210_1, 0:r2210_3 +# 2210| m2210_5(unknown) = ^CallSideEffect : ~m2205_6 +# 2210| m2210_6(unknown) = Chi : total:m2205_6, partial:m2210_5 +# 2210| v2210_7(void) = ^IndirectReadSideEffect[-1] : &:r2210_1, m2205_8 +# 2210| m2210_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2210_1 +# 2210| m2210_9(ClassWithDestructor) = Chi : total:m2205_8, partial:m2210_8 +# 2211| v2211_1(void) = NoOp : #-----| Goto -> Block 7 -# 2198| Block 7 -# 2198| m2198_1(unknown) = Phi : from 5:~m2193_6, from 6:~m2196_6 -# 2198| v2198_2(void) = NoOp : -# 2200| r2200_1(glval) = VariableAddress[x] : -# 2200| m2200_2(ClassWithDestructor) = Uninitialized[x] : &:r2200_1 -# 2200| r2200_3(glval) = FunctionAddress[ClassWithDestructor] : -# 2200| v2200_4(void) = Call[ClassWithDestructor] : func:r2200_3, this:r2200_1 -# 2200| m2200_5(unknown) = ^CallSideEffect : ~m2198_1 -# 2200| m2200_6(unknown) = Chi : total:m2198_1, partial:m2200_5 -# 2200| m2200_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2200_1 -# 2200| m2200_8(ClassWithDestructor) = Chi : total:m2200_2, partial:m2200_7 -# 2201| r2201_1(glval>) = VariableAddress[ys] : -# 2201| m2201_2(vector) = Uninitialized[ys] : &:r2201_1 -# 2201| r2201_3(glval) = FunctionAddress[vector] : -# 2201| r2201_4(glval) = VariableAddress[#temp2201:45] : -# 2201| r2201_5(glval) = VariableAddress[x] : -# 2201| r2201_6(ClassWithDestructor) = Load[x] : &:r2201_5, m2200_8 -# 2201| m2201_7(ClassWithDestructor) = Store[#temp2201:45] : &:r2201_4, r2201_6 -# 2201| r2201_8(ClassWithDestructor) = Load[#temp2201:45] : &:r2201_4, m2201_7 -# 2201| v2201_9(void) = Call[vector] : func:r2201_3, this:r2201_1, 0:r2201_8 -# 2201| m2201_10(unknown) = ^CallSideEffect : ~m2200_6 -# 2201| m2201_11(unknown) = Chi : total:m2200_6, partial:m2201_10 -# 2201| m2201_12(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2201_1 -# 2201| m2201_13(vector) = Chi : total:m2201_2, partial:m2201_12 -# 2201| r2201_14(glval &>) = VariableAddress[(__range)] : -# 2201| r2201_15(glval>) = VariableAddress[ys] : -# 2201| r2201_16(vector &) = CopyValue : r2201_15 -# 2201| m2201_17(vector &) = Store[(__range)] : &:r2201_14, r2201_16 -# 2201| r2201_18(glval>) = VariableAddress[(__begin)] : -# 2201| r2201_19(glval &>) = VariableAddress[(__range)] : -# 2201| r2201_20(vector &) = Load[(__range)] : &:r2201_19, m2201_17 -#-----| r0_1(glval>) = CopyValue : r2201_20 +# 2212| Block 7 +# 2212| m2212_1(unknown) = Phi : from 5:~m2207_6, from 6:~m2210_6 +# 2212| v2212_2(void) = NoOp : +# 2214| r2214_1(glval) = VariableAddress[x] : +# 2214| m2214_2(ClassWithDestructor) = Uninitialized[x] : &:r2214_1 +# 2214| r2214_3(glval) = FunctionAddress[ClassWithDestructor] : +# 2214| v2214_4(void) = Call[ClassWithDestructor] : func:r2214_3, this:r2214_1 +# 2214| m2214_5(unknown) = ^CallSideEffect : ~m2212_1 +# 2214| m2214_6(unknown) = Chi : total:m2212_1, partial:m2214_5 +# 2214| m2214_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2214_1 +# 2214| m2214_8(ClassWithDestructor) = Chi : total:m2214_2, partial:m2214_7 +# 2215| r2215_1(glval>) = VariableAddress[ys] : +# 2215| m2215_2(vector) = Uninitialized[ys] : &:r2215_1 +# 2215| r2215_3(glval) = FunctionAddress[vector] : +# 2215| r2215_4(glval) = VariableAddress[#temp2215:45] : +# 2215| r2215_5(glval) = VariableAddress[x] : +# 2215| r2215_6(ClassWithDestructor) = Load[x] : &:r2215_5, m2214_8 +# 2215| m2215_7(ClassWithDestructor) = Store[#temp2215:45] : &:r2215_4, r2215_6 +# 2215| r2215_8(ClassWithDestructor) = Load[#temp2215:45] : &:r2215_4, m2215_7 +# 2215| v2215_9(void) = Call[vector] : func:r2215_3, this:r2215_1, 0:r2215_8 +# 2215| m2215_10(unknown) = ^CallSideEffect : ~m2214_6 +# 2215| m2215_11(unknown) = Chi : total:m2214_6, partial:m2215_10 +# 2215| m2215_12(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2215_1 +# 2215| m2215_13(vector) = Chi : total:m2215_2, partial:m2215_12 +# 2215| r2215_14(glval &>) = VariableAddress[(__range)] : +# 2215| r2215_15(glval>) = VariableAddress[ys] : +# 2215| r2215_16(vector &) = CopyValue : r2215_15 +# 2215| m2215_17(vector &) = Store[(__range)] : &:r2215_14, r2215_16 +# 2215| r2215_18(glval>) = VariableAddress[(__begin)] : +# 2215| r2215_19(glval &>) = VariableAddress[(__range)] : +# 2215| r2215_20(vector &) = Load[(__range)] : &:r2215_19, m2215_17 +#-----| r0_1(glval>) = CopyValue : r2215_20 #-----| r0_2(glval>) = Convert : r0_1 -# 2201| r2201_21(glval) = FunctionAddress[begin] : -# 2201| r2201_22(iterator) = Call[begin] : func:r2201_21, this:r0_2 -#-----| v0_3(void) = ^IndirectReadSideEffect[-1] : &:r0_2, m2201_13 -# 2201| m2201_23(iterator) = Store[(__begin)] : &:r2201_18, r2201_22 -# 2201| r2201_24(glval>) = VariableAddress[(__end)] : -# 2201| r2201_25(glval &>) = VariableAddress[(__range)] : -# 2201| r2201_26(vector &) = Load[(__range)] : &:r2201_25, m2201_17 -#-----| r0_4(glval>) = CopyValue : r2201_26 +# 2215| r2215_21(glval) = FunctionAddress[begin] : +# 2215| r2215_22(iterator) = Call[begin] : func:r2215_21, this:r0_2 +#-----| v0_3(void) = ^IndirectReadSideEffect[-1] : &:r0_2, m2215_13 +# 2215| m2215_23(iterator) = Store[(__begin)] : &:r2215_18, r2215_22 +# 2215| r2215_24(glval>) = VariableAddress[(__end)] : +# 2215| r2215_25(glval &>) = VariableAddress[(__range)] : +# 2215| r2215_26(vector &) = Load[(__range)] : &:r2215_25, m2215_17 +#-----| r0_4(glval>) = CopyValue : r2215_26 #-----| r0_5(glval>) = Convert : r0_4 -# 2201| r2201_27(glval) = FunctionAddress[end] : -# 2201| r2201_28(iterator) = Call[end] : func:r2201_27, this:r0_5 -#-----| v0_6(void) = ^IndirectReadSideEffect[-1] : &:r0_5, m2201_13 -# 2201| m2201_29(iterator) = Store[(__end)] : &:r2201_24, r2201_28 +# 2215| r2215_27(glval) = FunctionAddress[end] : +# 2215| r2215_28(iterator) = Call[end] : func:r2215_27, this:r0_5 +#-----| v0_6(void) = ^IndirectReadSideEffect[-1] : &:r0_5, m2215_13 +# 2215| m2215_29(iterator) = Store[(__end)] : &:r2215_24, r2215_28 #-----| Goto -> Block 8 -# 2201| Block 8 -# 2201| m2201_30(iterator) = Phi : from 7:m2201_23, from 9:m2201_68 -# 2201| m2201_31(unknown) = Phi : from 7:~m2201_11, from 9:~m2201_65 -# 2201| r2201_32(glval>) = VariableAddress[(__begin)] : -#-----| r0_7(glval>) = Convert : r2201_32 -# 2201| r2201_33(glval) = FunctionAddress[operator!=] : +# 2215| Block 8 +# 2215| m2215_30(iterator) = Phi : from 7:m2215_23, from 9:m2215_68 +# 2215| m2215_31(unknown) = Phi : from 7:~m2215_11, from 9:~m2215_65 +# 2215| r2215_32(glval>) = VariableAddress[(__begin)] : +#-----| r0_7(glval>) = Convert : r2215_32 +# 2215| r2215_33(glval) = FunctionAddress[operator!=] : #-----| r0_8(glval>) = VariableAddress[#temp0:0] : #-----| m0_9(iterator) = Uninitialized[#temp0:0] : &:r0_8 -# 2201| r2201_34(glval) = FunctionAddress[iterator] : -# 2201| r2201_35(glval>) = VariableAddress[(__end)] : -#-----| r0_10(glval>) = Convert : r2201_35 +# 2215| r2215_34(glval) = FunctionAddress[iterator] : +# 2215| r2215_35(glval>) = VariableAddress[(__end)] : +#-----| r0_10(glval>) = Convert : r2215_35 #-----| r0_11(iterator &) = CopyValue : r0_10 -# 2201| v2201_36(void) = Call[iterator] : func:r2201_34, this:r0_8, 0:r0_11 -# 2201| m2201_37(unknown) = ^CallSideEffect : ~m2201_31 -# 2201| m2201_38(unknown) = Chi : total:m2201_31, partial:m2201_37 -#-----| v0_12(void) = ^BufferReadSideEffect[0] : &:r0_11, ~m2201_29 -# 2201| m2201_39(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r0_8 -# 2201| m2201_40(iterator) = Chi : total:m0_9, partial:m2201_39 -#-----| r0_13(iterator) = Load[#temp0:0] : &:r0_8, m2201_40 -# 2201| r2201_41(bool) = Call[operator!=] : func:r2201_33, this:r0_7, 0:r0_13 -# 2201| m2201_42(unknown) = ^CallSideEffect : ~m2201_38 -# 2201| m2201_43(unknown) = Chi : total:m2201_38, partial:m2201_42 -#-----| v0_14(void) = ^IndirectReadSideEffect[-1] : &:r0_7, m2201_30 -# 2201| v2201_44(void) = ConditionalBranch : r2201_41 +# 2215| v2215_36(void) = Call[iterator] : func:r2215_34, this:r0_8, 0:r0_11 +# 2215| m2215_37(unknown) = ^CallSideEffect : ~m2215_31 +# 2215| m2215_38(unknown) = Chi : total:m2215_31, partial:m2215_37 +#-----| v0_12(void) = ^BufferReadSideEffect[0] : &:r0_11, ~m2215_29 +# 2215| m2215_39(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r0_8 +# 2215| m2215_40(iterator) = Chi : total:m0_9, partial:m2215_39 +#-----| r0_13(iterator) = Load[#temp0:0] : &:r0_8, m2215_40 +# 2215| r2215_41(bool) = Call[operator!=] : func:r2215_33, this:r0_7, 0:r0_13 +# 2215| m2215_42(unknown) = ^CallSideEffect : ~m2215_38 +# 2215| m2215_43(unknown) = Chi : total:m2215_38, partial:m2215_42 +#-----| v0_14(void) = ^IndirectReadSideEffect[-1] : &:r0_7, m2215_30 +# 2215| v2215_44(void) = ConditionalBranch : r2215_41 #-----| False -> Block 10 #-----| True -> Block 9 -# 2201| Block 9 -# 2201| r2201_45(glval) = VariableAddress[y] : -# 2201| r2201_46(glval>) = VariableAddress[(__begin)] : -#-----| r0_15(glval>) = Convert : r2201_46 -# 2201| r2201_47(glval) = FunctionAddress[operator*] : -# 2201| r2201_48(ClassWithDestructor &) = Call[operator*] : func:r2201_47, this:r0_15 -# 2201| m2201_49(unknown) = ^CallSideEffect : ~m2201_43 -# 2201| m2201_50(unknown) = Chi : total:m2201_43, partial:m2201_49 -#-----| v0_16(void) = ^IndirectReadSideEffect[-1] : &:r0_15, m2201_30 -# 2201| r2201_51(ClassWithDestructor) = Load[?] : &:r2201_48, ~m2201_50 -# 2201| m2201_52(ClassWithDestructor) = Store[y] : &:r2201_45, r2201_51 -# 2202| r2202_1(glval) = VariableAddress[y] : -# 2202| r2202_2(glval) = FunctionAddress[set_x] : -# 2202| r2202_3(char) = Constant[97] : -# 2202| v2202_4(void) = Call[set_x] : func:r2202_2, this:r2202_1, 0:r2202_3 -# 2202| m2202_5(unknown) = ^CallSideEffect : ~m2201_50 -# 2202| m2202_6(unknown) = Chi : total:m2201_50, partial:m2202_5 -# 2202| v2202_7(void) = ^IndirectReadSideEffect[-1] : &:r2202_1, m2201_52 -# 2202| m2202_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2202_1 -# 2202| m2202_9(ClassWithDestructor) = Chi : total:m2201_52, partial:m2202_8 -# 2201| r2201_53(glval) = VariableAddress[y] : -# 2201| r2201_54(glval) = FunctionAddress[~ClassWithDestructor] : -# 2201| v2201_55(void) = Call[~ClassWithDestructor] : func:r2201_54, this:r2201_53 -# 2201| m2201_56(unknown) = ^CallSideEffect : ~m2202_6 -# 2201| m2201_57(unknown) = Chi : total:m2202_6, partial:m2201_56 -# 2201| v2201_58(void) = ^IndirectReadSideEffect[-1] : &:r2201_53, m2202_9 -# 2201| m2201_59(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2201_53 -# 2201| m2201_60(ClassWithDestructor) = Chi : total:m2202_9, partial:m2201_59 -# 2201| r2201_61(glval>) = VariableAddress[(__begin)] : -# 2201| r2201_62(glval) = FunctionAddress[operator++] : -# 2201| r2201_63(iterator &) = Call[operator++] : func:r2201_62, this:r2201_61 -# 2201| m2201_64(unknown) = ^CallSideEffect : ~m2201_57 -# 2201| m2201_65(unknown) = Chi : total:m2201_57, partial:m2201_64 -# 2201| v2201_66(void) = ^IndirectReadSideEffect[-1] : &:r2201_61, m2201_30 -# 2201| m2201_67(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r2201_61 -# 2201| m2201_68(iterator) = Chi : total:m2201_30, partial:m2201_67 -# 2201| r2201_69(glval>) = CopyValue : r2201_63 -#-----| Goto (back edge) -> Block 8 - -# 2204| Block 10 -# 2204| r2204_1(glval>) = VariableAddress[ys] : -# 2204| m2204_2(vector) = Uninitialized[ys] : &:r2204_1 -# 2204| r2204_3(glval) = FunctionAddress[vector] : -# 2204| r2204_4(glval) = VariableAddress[#temp2204:45] : -# 2204| r2204_5(glval) = VariableAddress[x] : -# 2204| r2204_6(ClassWithDestructor) = Load[x] : &:r2204_5, m2200_8 -# 2204| m2204_7(ClassWithDestructor) = Store[#temp2204:45] : &:r2204_4, r2204_6 -# 2204| r2204_8(ClassWithDestructor) = Load[#temp2204:45] : &:r2204_4, m2204_7 -# 2204| v2204_9(void) = Call[vector] : func:r2204_3, this:r2204_1, 0:r2204_8 -# 2204| m2204_10(unknown) = ^CallSideEffect : ~m2201_43 -# 2204| m2204_11(unknown) = Chi : total:m2201_43, partial:m2204_10 -# 2204| m2204_12(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2204_1 -# 2204| m2204_13(vector) = Chi : total:m2204_2, partial:m2204_12 -# 2204| r2204_14(glval &>) = VariableAddress[(__range)] : -# 2204| r2204_15(glval>) = VariableAddress[ys] : -# 2204| r2204_16(vector &) = CopyValue : r2204_15 -# 2204| m2204_17(vector &) = Store[(__range)] : &:r2204_14, r2204_16 -# 2204| r2204_18(glval>) = VariableAddress[(__begin)] : -# 2204| r2204_19(glval &>) = VariableAddress[(__range)] : -# 2204| r2204_20(vector &) = Load[(__range)] : &:r2204_19, m2204_17 -#-----| r0_17(glval>) = CopyValue : r2204_20 -#-----| r0_18(glval>) = Convert : r0_17 -# 2204| r2204_21(glval) = FunctionAddress[begin] : -# 2204| r2204_22(iterator) = Call[begin] : func:r2204_21, this:r0_18 -#-----| v0_19(void) = ^IndirectReadSideEffect[-1] : &:r0_18, m2204_13 -# 2204| m2204_23(iterator) = Store[(__begin)] : &:r2204_18, r2204_22 -# 2204| r2204_24(glval>) = VariableAddress[(__end)] : -# 2204| r2204_25(glval &>) = VariableAddress[(__range)] : -# 2204| r2204_26(vector &) = Load[(__range)] : &:r2204_25, m2204_17 -#-----| r0_20(glval>) = CopyValue : r2204_26 -#-----| r0_21(glval>) = Convert : r0_20 -# 2204| r2204_27(glval) = FunctionAddress[end] : -# 2204| r2204_28(iterator) = Call[end] : func:r2204_27, this:r0_21 -#-----| v0_22(void) = ^IndirectReadSideEffect[-1] : &:r0_21, m2204_13 -# 2204| m2204_29(iterator) = Store[(__end)] : &:r2204_24, r2204_28 -#-----| Goto -> Block 11 - -# 2204| Block 11 -# 2204| m2204_30(iterator) = Phi : from 10:m2204_23, from 14:m2204_84 -# 2204| m2204_31(unknown) = Phi : from 10:~m2204_11, from 14:~m2204_81 -# 2204| r2204_32(glval>) = VariableAddress[(__begin)] : -#-----| r0_23(glval>) = Convert : r2204_32 -# 2204| r2204_33(glval) = FunctionAddress[operator!=] : -#-----| r0_24(glval>) = VariableAddress[#temp0:0] : -#-----| m0_25(iterator) = Uninitialized[#temp0:0] : &:r0_24 -# 2204| r2204_34(glval) = FunctionAddress[iterator] : -# 2204| r2204_35(glval>) = VariableAddress[(__end)] : -#-----| r0_26(glval>) = Convert : r2204_35 -#-----| r0_27(iterator &) = CopyValue : r0_26 -# 2204| v2204_36(void) = Call[iterator] : func:r2204_34, this:r0_24, 0:r0_27 -# 2204| m2204_37(unknown) = ^CallSideEffect : ~m2204_31 -# 2204| m2204_38(unknown) = Chi : total:m2204_31, partial:m2204_37 -#-----| v0_28(void) = ^BufferReadSideEffect[0] : &:r0_27, ~m2204_29 -# 2204| m2204_39(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r0_24 -# 2204| m2204_40(iterator) = Chi : total:m0_25, partial:m2204_39 -#-----| r0_29(iterator) = Load[#temp0:0] : &:r0_24, m2204_40 -# 2204| r2204_41(bool) = Call[operator!=] : func:r2204_33, this:r0_23, 0:r0_29 -# 2204| m2204_42(unknown) = ^CallSideEffect : ~m2204_38 -# 2204| m2204_43(unknown) = Chi : total:m2204_38, partial:m2204_42 -#-----| v0_30(void) = ^IndirectReadSideEffect[-1] : &:r0_23, m2204_30 -# 2204| v2204_44(void) = ConditionalBranch : r2204_41 -#-----| False -> Block 15 -#-----| True -> Block 12 - -# 2204| Block 12 -# 2204| r2204_45(glval) = VariableAddress[y] : -# 2204| r2204_46(glval>) = VariableAddress[(__begin)] : -#-----| r0_31(glval>) = Convert : r2204_46 -# 2204| r2204_47(glval) = FunctionAddress[operator*] : -# 2204| r2204_48(ClassWithDestructor &) = Call[operator*] : func:r2204_47, this:r0_31 -# 2204| m2204_49(unknown) = ^CallSideEffect : ~m2204_43 -# 2204| m2204_50(unknown) = Chi : total:m2204_43, partial:m2204_49 -#-----| v0_32(void) = ^IndirectReadSideEffect[-1] : &:r0_31, m2204_30 -# 2204| r2204_51(ClassWithDestructor) = Load[?] : &:r2204_48, ~m2204_50 -# 2204| m2204_52(ClassWithDestructor) = Store[y] : &:r2204_45, r2204_51 -# 2205| r2205_1(glval) = VariableAddress[y] : -# 2205| r2205_2(glval) = FunctionAddress[set_x] : -# 2205| r2205_3(char) = Constant[97] : -# 2205| v2205_4(void) = Call[set_x] : func:r2205_2, this:r2205_1, 0:r2205_3 -# 2205| m2205_5(unknown) = ^CallSideEffect : ~m2204_50 -# 2205| m2205_6(unknown) = Chi : total:m2204_50, partial:m2205_5 -# 2205| v2205_7(void) = ^IndirectReadSideEffect[-1] : &:r2205_1, m2204_52 -# 2205| m2205_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2205_1 -# 2205| m2205_9(ClassWithDestructor) = Chi : total:m2204_52, partial:m2205_8 -# 2206| r2206_1(glval) = VariableAddress[y] : -# 2206| r2206_2(glval) = FunctionAddress[get_x] : -# 2206| r2206_3(char) = Call[get_x] : func:r2206_2, this:r2206_1 -# 2206| m2206_4(unknown) = ^CallSideEffect : ~m2205_6 -# 2206| m2206_5(unknown) = Chi : total:m2205_6, partial:m2206_4 -# 2206| v2206_6(void) = ^IndirectReadSideEffect[-1] : &:r2206_1, m2205_9 -# 2206| m2206_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2206_1 -# 2206| m2206_8(ClassWithDestructor) = Chi : total:m2205_9, partial:m2206_7 -# 2206| r2206_9(int) = Convert : r2206_3 -# 2206| r2206_10(int) = Constant[98] : -# 2206| r2206_11(bool) = CompareEQ : r2206_9, r2206_10 -# 2206| v2206_12(void) = ConditionalBranch : r2206_11 -#-----| False -> Block 14 -#-----| True -> Block 13 - -# 2207| Block 13 -# 2207| v2207_1(void) = NoOp : -# 2204| r2204_53(glval) = VariableAddress[y] : -# 2204| r2204_54(glval) = FunctionAddress[~ClassWithDestructor] : -# 2204| v2204_55(void) = Call[~ClassWithDestructor] : func:r2204_54, this:r2204_53 -# 2204| m2204_56(unknown) = ^CallSideEffect : ~m2206_5 -# 2204| m2204_57(unknown) = Chi : total:m2206_5, partial:m2204_56 -# 2204| v2204_58(void) = ^IndirectReadSideEffect[-1] : &:r2204_53, m2206_8 -# 2204| m2204_59(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2204_53 -# 2204| m2204_60(ClassWithDestructor) = Chi : total:m2206_8, partial:m2204_59 -# 2204| r2204_61(glval>) = VariableAddress[ys] : -# 2204| r2204_62(glval) = FunctionAddress[~vector] : -# 2204| v2204_63(void) = Call[~vector] : func:r2204_62, this:r2204_61 -# 2204| m2204_64(unknown) = ^CallSideEffect : ~m2204_57 -# 2204| m2204_65(unknown) = Chi : total:m2204_57, partial:m2204_64 -# 2204| v2204_66(void) = ^IndirectReadSideEffect[-1] : &:r2204_61, m2204_13 -# 2204| m2204_67(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2204_61 -# 2204| m2204_68(vector) = Chi : total:m2204_13, partial:m2204_67 -# 2219| r2219_1(glval) = VariableAddress[x] : -# 2219| r2219_2(glval) = FunctionAddress[~ClassWithDestructor] : -# 2219| v2219_3(void) = Call[~ClassWithDestructor] : func:r2219_2, this:r2219_1 -# 2219| m2219_4(unknown) = ^CallSideEffect : ~m2204_65 -# 2219| m2219_5(unknown) = Chi : total:m2204_65, partial:m2219_4 -# 2219| v2219_6(void) = ^IndirectReadSideEffect[-1] : &:r2219_1, m2200_8 -# 2219| m2219_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2219_1 -# 2219| m2219_8(ClassWithDestructor) = Chi : total:m2200_8, partial:m2219_7 -#-----| Goto -> Block 1 - -# 2204| Block 14 -# 2204| r2204_69(glval) = VariableAddress[y] : -# 2204| r2204_70(glval) = FunctionAddress[~ClassWithDestructor] : -# 2204| v2204_71(void) = Call[~ClassWithDestructor] : func:r2204_70, this:r2204_69 -# 2204| m2204_72(unknown) = ^CallSideEffect : ~m2206_5 -# 2204| m2204_73(unknown) = Chi : total:m2206_5, partial:m2204_72 -# 2204| v2204_74(void) = ^IndirectReadSideEffect[-1] : &:r2204_69, m2206_8 -# 2204| m2204_75(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2204_69 -# 2204| m2204_76(ClassWithDestructor) = Chi : total:m2206_8, partial:m2204_75 -# 2204| r2204_77(glval>) = VariableAddress[(__begin)] : -# 2204| r2204_78(glval) = FunctionAddress[operator++] : -# 2204| r2204_79(iterator &) = Call[operator++] : func:r2204_78, this:r2204_77 -# 2204| m2204_80(unknown) = ^CallSideEffect : ~m2204_73 -# 2204| m2204_81(unknown) = Chi : total:m2204_73, partial:m2204_80 -# 2204| v2204_82(void) = ^IndirectReadSideEffect[-1] : &:r2204_77, m2204_30 -# 2204| m2204_83(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r2204_77 -# 2204| m2204_84(iterator) = Chi : total:m2204_30, partial:m2204_83 -# 2204| r2204_85(glval>) = CopyValue : r2204_79 -#-----| Goto (back edge) -> Block 11 - -# 2210| Block 15 -# 2210| r2210_1(glval>) = VariableAddress[ys] : -# 2210| m2210_2(vector) = Uninitialized[ys] : &:r2210_1 -# 2210| r2210_3(glval) = FunctionAddress[vector] : -# 2210| r2210_4(int) = Constant[1] : -# 2210| v2210_5(void) = Call[vector] : func:r2210_3, this:r2210_1, 0:r2210_4 -# 2210| m2210_6(unknown) = ^CallSideEffect : ~m2204_43 -# 2210| m2210_7(unknown) = Chi : total:m2204_43, partial:m2210_6 -# 2210| m2210_8(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2210_1 -# 2210| m2210_9(vector) = Chi : total:m2210_2, partial:m2210_8 -# 2210| r2210_10(glval &>) = VariableAddress[(__range)] : -# 2210| r2210_11(glval>) = VariableAddress[ys] : -# 2210| r2210_12(vector &) = CopyValue : r2210_11 -# 2210| m2210_13(vector &) = Store[(__range)] : &:r2210_10, r2210_12 -# 2210| r2210_14(glval>) = VariableAddress[(__begin)] : -# 2210| r2210_15(glval &>) = VariableAddress[(__range)] : -# 2210| r2210_16(vector &) = Load[(__range)] : &:r2210_15, m2210_13 -#-----| r0_33(glval>) = CopyValue : r2210_16 -#-----| r0_34(glval>) = Convert : r0_33 -# 2210| r2210_17(glval) = FunctionAddress[begin] : -# 2210| r2210_18(iterator) = Call[begin] : func:r2210_17, this:r0_34 -#-----| v0_35(void) = ^IndirectReadSideEffect[-1] : &:r0_34, m2210_9 -# 2210| m2210_19(iterator) = Store[(__begin)] : &:r2210_14, r2210_18 -# 2210| r2210_20(glval>) = VariableAddress[(__end)] : -# 2210| r2210_21(glval &>) = VariableAddress[(__range)] : -# 2210| r2210_22(vector &) = Load[(__range)] : &:r2210_21, m2210_13 -#-----| r0_36(glval>) = CopyValue : r2210_22 -#-----| r0_37(glval>) = Convert : r0_36 -# 2210| r2210_23(glval) = FunctionAddress[end] : -# 2210| r2210_24(iterator) = Call[end] : func:r2210_23, this:r0_37 -#-----| v0_38(void) = ^IndirectReadSideEffect[-1] : &:r0_37, m2210_9 -# 2210| m2210_25(iterator) = Store[(__end)] : &:r2210_20, r2210_24 -#-----| Goto -> Block 16 - -# 2210| Block 16 -# 2210| m2210_26(iterator) = Phi : from 15:m2210_19, from 17:m2210_48 -# 2210| m2210_27(unknown) = Phi : from 15:~m2210_7, from 17:~m2210_45 -# 2210| r2210_28(glval>) = VariableAddress[(__begin)] : -#-----| r0_39(glval>) = Convert : r2210_28 -# 2210| r2210_29(glval) = FunctionAddress[operator!=] : -#-----| r0_40(glval>) = VariableAddress[#temp0:0] : -#-----| m0_41(iterator) = Uninitialized[#temp0:0] : &:r0_40 -# 2210| r2210_30(glval) = FunctionAddress[iterator] : -# 2210| r2210_31(glval>) = VariableAddress[(__end)] : -#-----| r0_42(glval>) = Convert : r2210_31 -#-----| r0_43(iterator &) = CopyValue : r0_42 -# 2210| v2210_32(void) = Call[iterator] : func:r2210_30, this:r0_40, 0:r0_43 -# 2210| m2210_33(unknown) = ^CallSideEffect : ~m2210_27 -# 2210| m2210_34(unknown) = Chi : total:m2210_27, partial:m2210_33 -#-----| v0_44(void) = ^BufferReadSideEffect[0] : &:r0_43, ~m2210_25 -# 2210| m2210_35(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r0_40 -# 2210| m2210_36(iterator) = Chi : total:m0_41, partial:m2210_35 -#-----| r0_45(iterator) = Load[#temp0:0] : &:r0_40, m2210_36 -# 2210| r2210_37(bool) = Call[operator!=] : func:r2210_29, this:r0_39, 0:r0_45 -# 2210| m2210_38(unknown) = ^CallSideEffect : ~m2210_34 -# 2210| m2210_39(unknown) = Chi : total:m2210_34, partial:m2210_38 -#-----| v0_46(void) = ^IndirectReadSideEffect[-1] : &:r0_39, m2210_26 -# 2210| v2210_40(void) = ConditionalBranch : r2210_37 -#-----| False -> Block 20 -#-----| True -> Block 18 - -# 2210| Block 17 -# 2210| r2210_41(glval>) = VariableAddress[(__begin)] : -# 2210| r2210_42(glval) = FunctionAddress[operator++] : -# 2210| r2210_43(iterator &) = Call[operator++] : func:r2210_42, this:r2210_41 -# 2210| m2210_44(unknown) = ^CallSideEffect : ~m2210_55 -# 2210| m2210_45(unknown) = Chi : total:m2210_55, partial:m2210_44 -# 2210| v2210_46(void) = ^IndirectReadSideEffect[-1] : &:r2210_41, m2210_26 -# 2210| m2210_47(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r2210_41 -# 2210| m2210_48(iterator) = Chi : total:m2210_26, partial:m2210_47 -# 2210| r2210_49(glval>) = CopyValue : r2210_43 -#-----| Goto (back edge) -> Block 16 - -# 2210| Block 18 -# 2210| r2210_50(glval) = VariableAddress[y] : -# 2210| r2210_51(glval>) = VariableAddress[(__begin)] : -#-----| r0_47(glval>) = Convert : r2210_51 -# 2210| r2210_52(glval) = FunctionAddress[operator*] : -# 2210| r2210_53(int &) = Call[operator*] : func:r2210_52, this:r0_47 -# 2210| m2210_54(unknown) = ^CallSideEffect : ~m2210_39 -# 2210| m2210_55(unknown) = Chi : total:m2210_39, partial:m2210_54 -#-----| v0_48(void) = ^IndirectReadSideEffect[-1] : &:r0_47, m2210_26 -# 2210| r2210_56(int) = Load[?] : &:r2210_53, ~m2210_55 -# 2210| m2210_57(int) = Store[y] : &:r2210_50, r2210_56 -# 2211| r2211_1(glval) = VariableAddress[y] : -# 2211| r2211_2(int) = Load[y] : &:r2211_1, m2210_57 -# 2211| r2211_3(int) = Constant[1] : -# 2211| r2211_4(bool) = CompareEQ : r2211_2, r2211_3 -# 2211| v2211_5(void) = ConditionalBranch : r2211_4 -#-----| False -> Block 17 -#-----| True -> Block 19 - -# 2212| Block 19 -# 2212| v2212_1(void) = NoOp : -# 2210| r2210_58(glval>) = VariableAddress[ys] : -# 2210| r2210_59(glval) = FunctionAddress[~vector] : -# 2210| v2210_60(void) = Call[~vector] : func:r2210_59, this:r2210_58 -# 2210| m2210_61(unknown) = ^CallSideEffect : ~m2210_55 -# 2210| m2210_62(unknown) = Chi : total:m2210_55, partial:m2210_61 -# 2210| v2210_63(void) = ^IndirectReadSideEffect[-1] : &:r2210_58, m2210_9 -# 2210| m2210_64(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2210_58 -# 2210| m2210_65(vector) = Chi : total:m2210_9, partial:m2210_64 -# 2219| r2219_9(glval) = VariableAddress[x] : -# 2219| r2219_10(glval) = FunctionAddress[~ClassWithDestructor] : -# 2219| v2219_11(void) = Call[~ClassWithDestructor] : func:r2219_10, this:r2219_9 -# 2219| m2219_12(unknown) = ^CallSideEffect : ~m2210_62 -# 2219| m2219_13(unknown) = Chi : total:m2210_62, partial:m2219_12 -# 2219| v2219_14(void) = ^IndirectReadSideEffect[-1] : &:r2219_9, m2200_8 -# 2219| m2219_15(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2219_9 -# 2219| m2219_16(ClassWithDestructor) = Chi : total:m2200_8, partial:m2219_15 -#-----| Goto -> Block 1 - -# 2215| Block 20 -# 2215| r2215_1(glval>) = VariableAddress[ys] : -# 2215| m2215_2(vector) = Uninitialized[ys] : &:r2215_1 -# 2215| r2215_3(glval) = FunctionAddress[vector] : -# 2215| r2215_4(glval) = VariableAddress[#temp2215:45] : -# 2215| r2215_5(glval) = VariableAddress[x] : -# 2215| r2215_6(ClassWithDestructor) = Load[x] : &:r2215_5, m2200_8 -# 2215| m2215_7(ClassWithDestructor) = Store[#temp2215:45] : &:r2215_4, r2215_6 -# 2215| r2215_8(ClassWithDestructor) = Load[#temp2215:45] : &:r2215_4, m2215_7 -# 2215| v2215_9(void) = Call[vector] : func:r2215_3, this:r2215_1, 0:r2215_8 -# 2215| m2215_10(unknown) = ^CallSideEffect : ~m2210_39 -# 2215| m2215_11(unknown) = Chi : total:m2210_39, partial:m2215_10 -# 2215| m2215_12(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2215_1 -# 2215| m2215_13(vector) = Chi : total:m2215_2, partial:m2215_12 -# 2215| r2215_14(glval &>) = VariableAddress[(__range)] : -# 2215| r2215_15(glval>) = VariableAddress[ys] : -# 2215| r2215_16(vector &) = CopyValue : r2215_15 -# 2215| m2215_17(vector &) = Store[(__range)] : &:r2215_14, r2215_16 -# 2215| r2215_18(glval>) = VariableAddress[(__begin)] : -# 2215| r2215_19(glval &>) = VariableAddress[(__range)] : -# 2215| r2215_20(vector &) = Load[(__range)] : &:r2215_19, m2215_17 -#-----| r0_49(glval>) = CopyValue : r2215_20 -#-----| r0_50(glval>) = Convert : r0_49 -# 2215| r2215_21(glval) = FunctionAddress[begin] : -# 2215| r2215_22(iterator) = Call[begin] : func:r2215_21, this:r0_50 -#-----| v0_51(void) = ^IndirectReadSideEffect[-1] : &:r0_50, m2215_13 -# 2215| m2215_23(iterator) = Store[(__begin)] : &:r2215_18, r2215_22 -# 2215| r2215_24(glval>) = VariableAddress[(__end)] : -# 2215| r2215_25(glval &>) = VariableAddress[(__range)] : -# 2215| r2215_26(vector &) = Load[(__range)] : &:r2215_25, m2215_17 -#-----| r0_52(glval>) = CopyValue : r2215_26 -#-----| r0_53(glval>) = Convert : r0_52 -# 2215| r2215_27(glval) = FunctionAddress[end] : -# 2215| r2215_28(iterator) = Call[end] : func:r2215_27, this:r0_53 -#-----| v0_54(void) = ^IndirectReadSideEffect[-1] : &:r0_53, m2215_13 -# 2215| m2215_29(iterator) = Store[(__end)] : &:r2215_24, r2215_28 -#-----| Goto -> Block 21 - -# 2215| Block 21 -# 2215| m2215_30(iterator) = Phi : from 20:m2215_23, from 22:m2215_68 -# 2215| m2215_31(unknown) = Phi : from 20:~m2215_11, from 22:~m2215_65 -# 2215| r2215_32(glval>) = VariableAddress[(__begin)] : -#-----| r0_55(glval>) = Convert : r2215_32 -# 2215| r2215_33(glval) = FunctionAddress[operator!=] : -#-----| r0_56(glval>) = VariableAddress[#temp0:0] : -#-----| m0_57(iterator) = Uninitialized[#temp0:0] : &:r0_56 -# 2215| r2215_34(glval) = FunctionAddress[iterator] : -# 2215| r2215_35(glval>) = VariableAddress[(__end)] : -#-----| r0_58(glval>) = Convert : r2215_35 -#-----| r0_59(iterator &) = CopyValue : r0_58 -# 2215| v2215_36(void) = Call[iterator] : func:r2215_34, this:r0_56, 0:r0_59 -# 2215| m2215_37(unknown) = ^CallSideEffect : ~m2215_31 -# 2215| m2215_38(unknown) = Chi : total:m2215_31, partial:m2215_37 -#-----| v0_60(void) = ^BufferReadSideEffect[0] : &:r0_59, ~m2215_29 -# 2215| m2215_39(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r0_56 -# 2215| m2215_40(iterator) = Chi : total:m0_57, partial:m2215_39 -#-----| r0_61(iterator) = Load[#temp0:0] : &:r0_56, m2215_40 -# 2215| r2215_41(bool) = Call[operator!=] : func:r2215_33, this:r0_55, 0:r0_61 -# 2215| m2215_42(unknown) = ^CallSideEffect : ~m2215_38 -# 2215| m2215_43(unknown) = Chi : total:m2215_38, partial:m2215_42 -#-----| v0_62(void) = ^IndirectReadSideEffect[-1] : &:r0_55, m2215_30 -# 2215| v2215_44(void) = ConditionalBranch : r2215_41 -#-----| False -> Block 23 -#-----| True -> Block 22 - -# 2215| Block 22 +# 2215| Block 9 # 2215| r2215_45(glval) = VariableAddress[y] : # 2215| r2215_46(glval>) = VariableAddress[(__begin)] : -#-----| r0_63(glval>) = Convert : r2215_46 +#-----| r0_15(glval>) = Convert : r2215_46 # 2215| r2215_47(glval) = FunctionAddress[operator*] : -# 2215| r2215_48(ClassWithDestructor &) = Call[operator*] : func:r2215_47, this:r0_63 +# 2215| r2215_48(ClassWithDestructor &) = Call[operator*] : func:r2215_47, this:r0_15 # 2215| m2215_49(unknown) = ^CallSideEffect : ~m2215_43 # 2215| m2215_50(unknown) = Chi : total:m2215_43, partial:m2215_49 -#-----| v0_64(void) = ^IndirectReadSideEffect[-1] : &:r0_63, m2215_30 +#-----| v0_16(void) = ^IndirectReadSideEffect[-1] : &:r0_15, m2215_30 # 2215| r2215_51(ClassWithDestructor) = Load[?] : &:r2215_48, ~m2215_50 # 2215| m2215_52(ClassWithDestructor) = Store[y] : &:r2215_45, r2215_51 -# 2216| r2216_1(glval) = VariableAddress[z1] : -# 2216| m2216_2(ClassWithDestructor) = Uninitialized[z1] : &:r2216_1 -# 2216| r2216_3(glval) = FunctionAddress[ClassWithDestructor] : -# 2216| v2216_4(void) = Call[ClassWithDestructor] : func:r2216_3, this:r2216_1 +# 2216| r2216_1(glval) = VariableAddress[y] : +# 2216| r2216_2(glval) = FunctionAddress[set_x] : +# 2216| r2216_3(char) = Constant[97] : +# 2216| v2216_4(void) = Call[set_x] : func:r2216_2, this:r2216_1, 0:r2216_3 # 2216| m2216_5(unknown) = ^CallSideEffect : ~m2215_50 # 2216| m2216_6(unknown) = Chi : total:m2215_50, partial:m2216_5 -# 2216| m2216_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2216_1 -# 2216| m2216_8(ClassWithDestructor) = Chi : total:m2216_2, partial:m2216_7 -# 2217| r2217_1(glval) = VariableAddress[z2] : -# 2217| m2217_2(ClassWithDestructor) = Uninitialized[z2] : &:r2217_1 -# 2217| r2217_3(glval) = FunctionAddress[ClassWithDestructor] : -# 2217| v2217_4(void) = Call[ClassWithDestructor] : func:r2217_3, this:r2217_1 -# 2217| m2217_5(unknown) = ^CallSideEffect : ~m2216_6 -# 2217| m2217_6(unknown) = Chi : total:m2216_6, partial:m2217_5 -# 2217| m2217_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2217_1 -# 2217| m2217_8(ClassWithDestructor) = Chi : total:m2217_2, partial:m2217_7 -# 2218| r2218_1(glval) = VariableAddress[z2] : -# 2218| r2218_2(glval) = FunctionAddress[~ClassWithDestructor] : -# 2218| v2218_3(void) = Call[~ClassWithDestructor] : func:r2218_2, this:r2218_1 -# 2218| m2218_4(unknown) = ^CallSideEffect : ~m2217_6 -# 2218| m2218_5(unknown) = Chi : total:m2217_6, partial:m2218_4 -# 2218| v2218_6(void) = ^IndirectReadSideEffect[-1] : &:r2218_1, m2217_8 -# 2218| m2218_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2218_1 -# 2218| m2218_8(ClassWithDestructor) = Chi : total:m2217_8, partial:m2218_7 -# 2218| r2218_9(glval) = VariableAddress[z1] : -# 2218| r2218_10(glval) = FunctionAddress[~ClassWithDestructor] : -# 2218| v2218_11(void) = Call[~ClassWithDestructor] : func:r2218_10, this:r2218_9 -# 2218| m2218_12(unknown) = ^CallSideEffect : ~m2218_5 -# 2218| m2218_13(unknown) = Chi : total:m2218_5, partial:m2218_12 -# 2218| v2218_14(void) = ^IndirectReadSideEffect[-1] : &:r2218_9, m2216_8 -# 2218| m2218_15(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2218_9 -# 2218| m2218_16(ClassWithDestructor) = Chi : total:m2216_8, partial:m2218_15 +# 2216| v2216_7(void) = ^IndirectReadSideEffect[-1] : &:r2216_1, m2215_52 +# 2216| m2216_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2216_1 +# 2216| m2216_9(ClassWithDestructor) = Chi : total:m2215_52, partial:m2216_8 # 2215| r2215_53(glval) = VariableAddress[y] : # 2215| r2215_54(glval) = FunctionAddress[~ClassWithDestructor] : # 2215| v2215_55(void) = Call[~ClassWithDestructor] : func:r2215_54, this:r2215_53 -# 2215| m2215_56(unknown) = ^CallSideEffect : ~m2218_13 -# 2215| m2215_57(unknown) = Chi : total:m2218_13, partial:m2215_56 -# 2215| v2215_58(void) = ^IndirectReadSideEffect[-1] : &:r2215_53, m2215_52 +# 2215| m2215_56(unknown) = ^CallSideEffect : ~m2216_6 +# 2215| m2215_57(unknown) = Chi : total:m2216_6, partial:m2215_56 +# 2215| v2215_58(void) = ^IndirectReadSideEffect[-1] : &:r2215_53, m2216_9 # 2215| m2215_59(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2215_53 -# 2215| m2215_60(ClassWithDestructor) = Chi : total:m2215_52, partial:m2215_59 +# 2215| m2215_60(ClassWithDestructor) = Chi : total:m2216_9, partial:m2215_59 # 2215| r2215_61(glval>) = VariableAddress[(__begin)] : # 2215| r2215_62(glval) = FunctionAddress[operator++] : # 2215| r2215_63(iterator &) = Call[operator++] : func:r2215_62, this:r2215_61 @@ -13876,1264 +13618,2031 @@ ir.cpp: # 2215| m2215_67(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r2215_61 # 2215| m2215_68(iterator) = Chi : total:m2215_30, partial:m2215_67 # 2215| r2215_69(glval>) = CopyValue : r2215_63 -#-----| Goto (back edge) -> Block 21 +#-----| Goto (back edge) -> Block 8 -# 2219| Block 23 -# 2219| v2219_17(void) = NoOp : -# 2219| r2219_18(glval) = VariableAddress[x] : -# 2219| r2219_19(glval) = FunctionAddress[~ClassWithDestructor] : -# 2219| v2219_20(void) = Call[~ClassWithDestructor] : func:r2219_19, this:r2219_18 -# 2219| m2219_21(unknown) = ^CallSideEffect : ~m2215_43 -# 2219| m2219_22(unknown) = Chi : total:m2215_43, partial:m2219_21 -# 2219| v2219_23(void) = ^IndirectReadSideEffect[-1] : &:r2219_18, m2200_8 -# 2219| m2219_24(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2219_18 -# 2219| m2219_25(ClassWithDestructor) = Chi : total:m2200_8, partial:m2219_24 +# 2218| Block 10 +# 2218| r2218_1(glval>) = VariableAddress[ys] : +# 2218| m2218_2(vector) = Uninitialized[ys] : &:r2218_1 +# 2218| r2218_3(glval) = FunctionAddress[vector] : +# 2218| r2218_4(glval) = VariableAddress[#temp2218:45] : +# 2218| r2218_5(glval) = VariableAddress[x] : +# 2218| r2218_6(ClassWithDestructor) = Load[x] : &:r2218_5, m2214_8 +# 2218| m2218_7(ClassWithDestructor) = Store[#temp2218:45] : &:r2218_4, r2218_6 +# 2218| r2218_8(ClassWithDestructor) = Load[#temp2218:45] : &:r2218_4, m2218_7 +# 2218| v2218_9(void) = Call[vector] : func:r2218_3, this:r2218_1, 0:r2218_8 +# 2218| m2218_10(unknown) = ^CallSideEffect : ~m2215_43 +# 2218| m2218_11(unknown) = Chi : total:m2215_43, partial:m2218_10 +# 2218| m2218_12(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2218_1 +# 2218| m2218_13(vector) = Chi : total:m2218_2, partial:m2218_12 +# 2218| r2218_14(glval &>) = VariableAddress[(__range)] : +# 2218| r2218_15(glval>) = VariableAddress[ys] : +# 2218| r2218_16(vector &) = CopyValue : r2218_15 +# 2218| m2218_17(vector &) = Store[(__range)] : &:r2218_14, r2218_16 +# 2218| r2218_18(glval>) = VariableAddress[(__begin)] : +# 2218| r2218_19(glval &>) = VariableAddress[(__range)] : +# 2218| r2218_20(vector &) = Load[(__range)] : &:r2218_19, m2218_17 +#-----| r0_17(glval>) = CopyValue : r2218_20 +#-----| r0_18(glval>) = Convert : r0_17 +# 2218| r2218_21(glval) = FunctionAddress[begin] : +# 2218| r2218_22(iterator) = Call[begin] : func:r2218_21, this:r0_18 +#-----| v0_19(void) = ^IndirectReadSideEffect[-1] : &:r0_18, m2218_13 +# 2218| m2218_23(iterator) = Store[(__begin)] : &:r2218_18, r2218_22 +# 2218| r2218_24(glval>) = VariableAddress[(__end)] : +# 2218| r2218_25(glval &>) = VariableAddress[(__range)] : +# 2218| r2218_26(vector &) = Load[(__range)] : &:r2218_25, m2218_17 +#-----| r0_20(glval>) = CopyValue : r2218_26 +#-----| r0_21(glval>) = Convert : r0_20 +# 2218| r2218_27(glval) = FunctionAddress[end] : +# 2218| r2218_28(iterator) = Call[end] : func:r2218_27, this:r0_21 +#-----| v0_22(void) = ^IndirectReadSideEffect[-1] : &:r0_21, m2218_13 +# 2218| m2218_29(iterator) = Store[(__end)] : &:r2218_24, r2218_28 +#-----| Goto -> Block 11 + +# 2218| Block 11 +# 2218| m2218_30(iterator) = Phi : from 10:m2218_23, from 14:m2218_84 +# 2218| m2218_31(unknown) = Phi : from 10:~m2218_11, from 14:~m2218_81 +# 2218| r2218_32(glval>) = VariableAddress[(__begin)] : +#-----| r0_23(glval>) = Convert : r2218_32 +# 2218| r2218_33(glval) = FunctionAddress[operator!=] : +#-----| r0_24(glval>) = VariableAddress[#temp0:0] : +#-----| m0_25(iterator) = Uninitialized[#temp0:0] : &:r0_24 +# 2218| r2218_34(glval) = FunctionAddress[iterator] : +# 2218| r2218_35(glval>) = VariableAddress[(__end)] : +#-----| r0_26(glval>) = Convert : r2218_35 +#-----| r0_27(iterator &) = CopyValue : r0_26 +# 2218| v2218_36(void) = Call[iterator] : func:r2218_34, this:r0_24, 0:r0_27 +# 2218| m2218_37(unknown) = ^CallSideEffect : ~m2218_31 +# 2218| m2218_38(unknown) = Chi : total:m2218_31, partial:m2218_37 +#-----| v0_28(void) = ^BufferReadSideEffect[0] : &:r0_27, ~m2218_29 +# 2218| m2218_39(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r0_24 +# 2218| m2218_40(iterator) = Chi : total:m0_25, partial:m2218_39 +#-----| r0_29(iterator) = Load[#temp0:0] : &:r0_24, m2218_40 +# 2218| r2218_41(bool) = Call[operator!=] : func:r2218_33, this:r0_23, 0:r0_29 +# 2218| m2218_42(unknown) = ^CallSideEffect : ~m2218_38 +# 2218| m2218_43(unknown) = Chi : total:m2218_38, partial:m2218_42 +#-----| v0_30(void) = ^IndirectReadSideEffect[-1] : &:r0_23, m2218_30 +# 2218| v2218_44(void) = ConditionalBranch : r2218_41 +#-----| False -> Block 15 +#-----| True -> Block 12 + +# 2218| Block 12 +# 2218| r2218_45(glval) = VariableAddress[y] : +# 2218| r2218_46(glval>) = VariableAddress[(__begin)] : +#-----| r0_31(glval>) = Convert : r2218_46 +# 2218| r2218_47(glval) = FunctionAddress[operator*] : +# 2218| r2218_48(ClassWithDestructor &) = Call[operator*] : func:r2218_47, this:r0_31 +# 2218| m2218_49(unknown) = ^CallSideEffect : ~m2218_43 +# 2218| m2218_50(unknown) = Chi : total:m2218_43, partial:m2218_49 +#-----| v0_32(void) = ^IndirectReadSideEffect[-1] : &:r0_31, m2218_30 +# 2218| r2218_51(ClassWithDestructor) = Load[?] : &:r2218_48, ~m2218_50 +# 2218| m2218_52(ClassWithDestructor) = Store[y] : &:r2218_45, r2218_51 +# 2219| r2219_1(glval) = VariableAddress[y] : +# 2219| r2219_2(glval) = FunctionAddress[set_x] : +# 2219| r2219_3(char) = Constant[97] : +# 2219| v2219_4(void) = Call[set_x] : func:r2219_2, this:r2219_1, 0:r2219_3 +# 2219| m2219_5(unknown) = ^CallSideEffect : ~m2218_50 +# 2219| m2219_6(unknown) = Chi : total:m2218_50, partial:m2219_5 +# 2219| v2219_7(void) = ^IndirectReadSideEffect[-1] : &:r2219_1, m2218_52 +# 2219| m2219_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2219_1 +# 2219| m2219_9(ClassWithDestructor) = Chi : total:m2218_52, partial:m2219_8 +# 2220| r2220_1(glval) = VariableAddress[y] : +# 2220| r2220_2(glval) = FunctionAddress[get_x] : +# 2220| r2220_3(char) = Call[get_x] : func:r2220_2, this:r2220_1 +# 2220| m2220_4(unknown) = ^CallSideEffect : ~m2219_6 +# 2220| m2220_5(unknown) = Chi : total:m2219_6, partial:m2220_4 +# 2220| v2220_6(void) = ^IndirectReadSideEffect[-1] : &:r2220_1, m2219_9 +# 2220| m2220_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2220_1 +# 2220| m2220_8(ClassWithDestructor) = Chi : total:m2219_9, partial:m2220_7 +# 2220| r2220_9(int) = Convert : r2220_3 +# 2220| r2220_10(int) = Constant[98] : +# 2220| r2220_11(bool) = CompareEQ : r2220_9, r2220_10 +# 2220| v2220_12(void) = ConditionalBranch : r2220_11 +#-----| False -> Block 14 +#-----| True -> Block 13 + +# 2221| Block 13 +# 2221| v2221_1(void) = NoOp : +# 2218| r2218_53(glval) = VariableAddress[y] : +# 2218| r2218_54(glval) = FunctionAddress[~ClassWithDestructor] : +# 2218| v2218_55(void) = Call[~ClassWithDestructor] : func:r2218_54, this:r2218_53 +# 2218| m2218_56(unknown) = ^CallSideEffect : ~m2220_5 +# 2218| m2218_57(unknown) = Chi : total:m2220_5, partial:m2218_56 +# 2218| v2218_58(void) = ^IndirectReadSideEffect[-1] : &:r2218_53, m2220_8 +# 2218| m2218_59(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2218_53 +# 2218| m2218_60(ClassWithDestructor) = Chi : total:m2220_8, partial:m2218_59 +# 2218| r2218_61(glval>) = VariableAddress[ys] : +# 2218| r2218_62(glval) = FunctionAddress[~vector] : +# 2218| v2218_63(void) = Call[~vector] : func:r2218_62, this:r2218_61 +# 2218| m2218_64(unknown) = ^CallSideEffect : ~m2218_57 +# 2218| m2218_65(unknown) = Chi : total:m2218_57, partial:m2218_64 +# 2218| v2218_66(void) = ^IndirectReadSideEffect[-1] : &:r2218_61, m2218_13 +# 2218| m2218_67(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2218_61 +# 2218| m2218_68(vector) = Chi : total:m2218_13, partial:m2218_67 +# 2233| r2233_1(glval) = VariableAddress[x] : +# 2233| r2233_2(glval) = FunctionAddress[~ClassWithDestructor] : +# 2233| v2233_3(void) = Call[~ClassWithDestructor] : func:r2233_2, this:r2233_1 +# 2233| m2233_4(unknown) = ^CallSideEffect : ~m2218_65 +# 2233| m2233_5(unknown) = Chi : total:m2218_65, partial:m2233_4 +# 2233| v2233_6(void) = ^IndirectReadSideEffect[-1] : &:r2233_1, m2214_8 +# 2233| m2233_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2233_1 +# 2233| m2233_8(ClassWithDestructor) = Chi : total:m2214_8, partial:m2233_7 #-----| Goto -> Block 1 -# 2184| Block 24 -# 2184| v2184_13(void) = Unreached : +# 2218| Block 14 +# 2218| r2218_69(glval) = VariableAddress[y] : +# 2218| r2218_70(glval) = FunctionAddress[~ClassWithDestructor] : +# 2218| v2218_71(void) = Call[~ClassWithDestructor] : func:r2218_70, this:r2218_69 +# 2218| m2218_72(unknown) = ^CallSideEffect : ~m2220_5 +# 2218| m2218_73(unknown) = Chi : total:m2220_5, partial:m2218_72 +# 2218| v2218_74(void) = ^IndirectReadSideEffect[-1] : &:r2218_69, m2220_8 +# 2218| m2218_75(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2218_69 +# 2218| m2218_76(ClassWithDestructor) = Chi : total:m2220_8, partial:m2218_75 +# 2218| r2218_77(glval>) = VariableAddress[(__begin)] : +# 2218| r2218_78(glval) = FunctionAddress[operator++] : +# 2218| r2218_79(iterator &) = Call[operator++] : func:r2218_78, this:r2218_77 +# 2218| m2218_80(unknown) = ^CallSideEffect : ~m2218_73 +# 2218| m2218_81(unknown) = Chi : total:m2218_73, partial:m2218_80 +# 2218| v2218_82(void) = ^IndirectReadSideEffect[-1] : &:r2218_77, m2218_30 +# 2218| m2218_83(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r2218_77 +# 2218| m2218_84(iterator) = Chi : total:m2218_30, partial:m2218_83 +# 2218| r2218_85(glval>) = CopyValue : r2218_79 +#-----| Goto (back edge) -> Block 11 -# 2221| void static_variable_with_destructor_1() -# 2221| Block 0 -# 2221| v2221_1(void) = EnterFunction : -# 2221| m2221_2(unknown) = AliasedDefinition : -# 2221| m2221_3(unknown) = InitializeNonLocal : -# 2221| m2221_4(unknown) = Chi : total:m2221_2, partial:m2221_3 -# 2222| r2222_1(glval) = VariableAddress[a] : -# 2222| m2222_2(ClassWithDestructor) = Uninitialized[a] : &:r2222_1 -# 2222| r2222_3(glval) = FunctionAddress[ClassWithDestructor] : -# 2222| v2222_4(void) = Call[ClassWithDestructor] : func:r2222_3, this:r2222_1 -# 2222| m2222_5(unknown) = ^CallSideEffect : ~m2221_4 -# 2222| m2222_6(unknown) = Chi : total:m2221_4, partial:m2222_5 -# 2222| m2222_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2222_1 -# 2222| m2222_8(ClassWithDestructor) = Chi : total:m2222_2, partial:m2222_7 -# 2223| r2223_1(glval) = VariableAddress[b#init] : -# 2223| r2223_2(bool) = Load[b#init] : &:r2223_1, ~m2222_6 -# 2223| v2223_3(void) = ConditionalBranch : r2223_2 +# 2224| Block 15 +# 2224| r2224_1(glval>) = VariableAddress[ys] : +# 2224| m2224_2(vector) = Uninitialized[ys] : &:r2224_1 +# 2224| r2224_3(glval) = FunctionAddress[vector] : +# 2224| r2224_4(int) = Constant[1] : +# 2224| v2224_5(void) = Call[vector] : func:r2224_3, this:r2224_1, 0:r2224_4 +# 2224| m2224_6(unknown) = ^CallSideEffect : ~m2218_43 +# 2224| m2224_7(unknown) = Chi : total:m2218_43, partial:m2224_6 +# 2224| m2224_8(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2224_1 +# 2224| m2224_9(vector) = Chi : total:m2224_2, partial:m2224_8 +# 2224| r2224_10(glval &>) = VariableAddress[(__range)] : +# 2224| r2224_11(glval>) = VariableAddress[ys] : +# 2224| r2224_12(vector &) = CopyValue : r2224_11 +# 2224| m2224_13(vector &) = Store[(__range)] : &:r2224_10, r2224_12 +# 2224| r2224_14(glval>) = VariableAddress[(__begin)] : +# 2224| r2224_15(glval &>) = VariableAddress[(__range)] : +# 2224| r2224_16(vector &) = Load[(__range)] : &:r2224_15, m2224_13 +#-----| r0_33(glval>) = CopyValue : r2224_16 +#-----| r0_34(glval>) = Convert : r0_33 +# 2224| r2224_17(glval) = FunctionAddress[begin] : +# 2224| r2224_18(iterator) = Call[begin] : func:r2224_17, this:r0_34 +#-----| v0_35(void) = ^IndirectReadSideEffect[-1] : &:r0_34, m2224_9 +# 2224| m2224_19(iterator) = Store[(__begin)] : &:r2224_14, r2224_18 +# 2224| r2224_20(glval>) = VariableAddress[(__end)] : +# 2224| r2224_21(glval &>) = VariableAddress[(__range)] : +# 2224| r2224_22(vector &) = Load[(__range)] : &:r2224_21, m2224_13 +#-----| r0_36(glval>) = CopyValue : r2224_22 +#-----| r0_37(glval>) = Convert : r0_36 +# 2224| r2224_23(glval) = FunctionAddress[end] : +# 2224| r2224_24(iterator) = Call[end] : func:r2224_23, this:r0_37 +#-----| v0_38(void) = ^IndirectReadSideEffect[-1] : &:r0_37, m2224_9 +# 2224| m2224_25(iterator) = Store[(__end)] : &:r2224_20, r2224_24 +#-----| Goto -> Block 16 + +# 2224| Block 16 +# 2224| m2224_26(iterator) = Phi : from 15:m2224_19, from 17:m2224_48 +# 2224| m2224_27(unknown) = Phi : from 15:~m2224_7, from 17:~m2224_45 +# 2224| r2224_28(glval>) = VariableAddress[(__begin)] : +#-----| r0_39(glval>) = Convert : r2224_28 +# 2224| r2224_29(glval) = FunctionAddress[operator!=] : +#-----| r0_40(glval>) = VariableAddress[#temp0:0] : +#-----| m0_41(iterator) = Uninitialized[#temp0:0] : &:r0_40 +# 2224| r2224_30(glval) = FunctionAddress[iterator] : +# 2224| r2224_31(glval>) = VariableAddress[(__end)] : +#-----| r0_42(glval>) = Convert : r2224_31 +#-----| r0_43(iterator &) = CopyValue : r0_42 +# 2224| v2224_32(void) = Call[iterator] : func:r2224_30, this:r0_40, 0:r0_43 +# 2224| m2224_33(unknown) = ^CallSideEffect : ~m2224_27 +# 2224| m2224_34(unknown) = Chi : total:m2224_27, partial:m2224_33 +#-----| v0_44(void) = ^BufferReadSideEffect[0] : &:r0_43, ~m2224_25 +# 2224| m2224_35(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r0_40 +# 2224| m2224_36(iterator) = Chi : total:m0_41, partial:m2224_35 +#-----| r0_45(iterator) = Load[#temp0:0] : &:r0_40, m2224_36 +# 2224| r2224_37(bool) = Call[operator!=] : func:r2224_29, this:r0_39, 0:r0_45 +# 2224| m2224_38(unknown) = ^CallSideEffect : ~m2224_34 +# 2224| m2224_39(unknown) = Chi : total:m2224_34, partial:m2224_38 +#-----| v0_46(void) = ^IndirectReadSideEffect[-1] : &:r0_39, m2224_26 +# 2224| v2224_40(void) = ConditionalBranch : r2224_37 +#-----| False -> Block 20 +#-----| True -> Block 18 + +# 2224| Block 17 +# 2224| r2224_41(glval>) = VariableAddress[(__begin)] : +# 2224| r2224_42(glval) = FunctionAddress[operator++] : +# 2224| r2224_43(iterator &) = Call[operator++] : func:r2224_42, this:r2224_41 +# 2224| m2224_44(unknown) = ^CallSideEffect : ~m2224_55 +# 2224| m2224_45(unknown) = Chi : total:m2224_55, partial:m2224_44 +# 2224| v2224_46(void) = ^IndirectReadSideEffect[-1] : &:r2224_41, m2224_26 +# 2224| m2224_47(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r2224_41 +# 2224| m2224_48(iterator) = Chi : total:m2224_26, partial:m2224_47 +# 2224| r2224_49(glval>) = CopyValue : r2224_43 +#-----| Goto (back edge) -> Block 16 + +# 2224| Block 18 +# 2224| r2224_50(glval) = VariableAddress[y] : +# 2224| r2224_51(glval>) = VariableAddress[(__begin)] : +#-----| r0_47(glval>) = Convert : r2224_51 +# 2224| r2224_52(glval) = FunctionAddress[operator*] : +# 2224| r2224_53(int &) = Call[operator*] : func:r2224_52, this:r0_47 +# 2224| m2224_54(unknown) = ^CallSideEffect : ~m2224_39 +# 2224| m2224_55(unknown) = Chi : total:m2224_39, partial:m2224_54 +#-----| v0_48(void) = ^IndirectReadSideEffect[-1] : &:r0_47, m2224_26 +# 2224| r2224_56(int) = Load[?] : &:r2224_53, ~m2224_55 +# 2224| m2224_57(int) = Store[y] : &:r2224_50, r2224_56 +# 2225| r2225_1(glval) = VariableAddress[y] : +# 2225| r2225_2(int) = Load[y] : &:r2225_1, m2224_57 +# 2225| r2225_3(int) = Constant[1] : +# 2225| r2225_4(bool) = CompareEQ : r2225_2, r2225_3 +# 2225| v2225_5(void) = ConditionalBranch : r2225_4 +#-----| False -> Block 17 +#-----| True -> Block 19 + +# 2226| Block 19 +# 2226| v2226_1(void) = NoOp : +# 2224| r2224_58(glval>) = VariableAddress[ys] : +# 2224| r2224_59(glval) = FunctionAddress[~vector] : +# 2224| v2224_60(void) = Call[~vector] : func:r2224_59, this:r2224_58 +# 2224| m2224_61(unknown) = ^CallSideEffect : ~m2224_55 +# 2224| m2224_62(unknown) = Chi : total:m2224_55, partial:m2224_61 +# 2224| v2224_63(void) = ^IndirectReadSideEffect[-1] : &:r2224_58, m2224_9 +# 2224| m2224_64(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2224_58 +# 2224| m2224_65(vector) = Chi : total:m2224_9, partial:m2224_64 +# 2233| r2233_9(glval) = VariableAddress[x] : +# 2233| r2233_10(glval) = FunctionAddress[~ClassWithDestructor] : +# 2233| v2233_11(void) = Call[~ClassWithDestructor] : func:r2233_10, this:r2233_9 +# 2233| m2233_12(unknown) = ^CallSideEffect : ~m2224_62 +# 2233| m2233_13(unknown) = Chi : total:m2224_62, partial:m2233_12 +# 2233| v2233_14(void) = ^IndirectReadSideEffect[-1] : &:r2233_9, m2214_8 +# 2233| m2233_15(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2233_9 +# 2233| m2233_16(ClassWithDestructor) = Chi : total:m2214_8, partial:m2233_15 +#-----| Goto -> Block 1 + +# 2229| Block 20 +# 2229| r2229_1(glval>) = VariableAddress[ys] : +# 2229| m2229_2(vector) = Uninitialized[ys] : &:r2229_1 +# 2229| r2229_3(glval) = FunctionAddress[vector] : +# 2229| r2229_4(glval) = VariableAddress[#temp2229:45] : +# 2229| r2229_5(glval) = VariableAddress[x] : +# 2229| r2229_6(ClassWithDestructor) = Load[x] : &:r2229_5, m2214_8 +# 2229| m2229_7(ClassWithDestructor) = Store[#temp2229:45] : &:r2229_4, r2229_6 +# 2229| r2229_8(ClassWithDestructor) = Load[#temp2229:45] : &:r2229_4, m2229_7 +# 2229| v2229_9(void) = Call[vector] : func:r2229_3, this:r2229_1, 0:r2229_8 +# 2229| m2229_10(unknown) = ^CallSideEffect : ~m2224_39 +# 2229| m2229_11(unknown) = Chi : total:m2224_39, partial:m2229_10 +# 2229| m2229_12(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2229_1 +# 2229| m2229_13(vector) = Chi : total:m2229_2, partial:m2229_12 +# 2229| r2229_14(glval &>) = VariableAddress[(__range)] : +# 2229| r2229_15(glval>) = VariableAddress[ys] : +# 2229| r2229_16(vector &) = CopyValue : r2229_15 +# 2229| m2229_17(vector &) = Store[(__range)] : &:r2229_14, r2229_16 +# 2229| r2229_18(glval>) = VariableAddress[(__begin)] : +# 2229| r2229_19(glval &>) = VariableAddress[(__range)] : +# 2229| r2229_20(vector &) = Load[(__range)] : &:r2229_19, m2229_17 +#-----| r0_49(glval>) = CopyValue : r2229_20 +#-----| r0_50(glval>) = Convert : r0_49 +# 2229| r2229_21(glval) = FunctionAddress[begin] : +# 2229| r2229_22(iterator) = Call[begin] : func:r2229_21, this:r0_50 +#-----| v0_51(void) = ^IndirectReadSideEffect[-1] : &:r0_50, m2229_13 +# 2229| m2229_23(iterator) = Store[(__begin)] : &:r2229_18, r2229_22 +# 2229| r2229_24(glval>) = VariableAddress[(__end)] : +# 2229| r2229_25(glval &>) = VariableAddress[(__range)] : +# 2229| r2229_26(vector &) = Load[(__range)] : &:r2229_25, m2229_17 +#-----| r0_52(glval>) = CopyValue : r2229_26 +#-----| r0_53(glval>) = Convert : r0_52 +# 2229| r2229_27(glval) = FunctionAddress[end] : +# 2229| r2229_28(iterator) = Call[end] : func:r2229_27, this:r0_53 +#-----| v0_54(void) = ^IndirectReadSideEffect[-1] : &:r0_53, m2229_13 +# 2229| m2229_29(iterator) = Store[(__end)] : &:r2229_24, r2229_28 +#-----| Goto -> Block 21 + +# 2229| Block 21 +# 2229| m2229_30(iterator) = Phi : from 20:m2229_23, from 22:m2229_68 +# 2229| m2229_31(unknown) = Phi : from 20:~m2229_11, from 22:~m2229_65 +# 2229| r2229_32(glval>) = VariableAddress[(__begin)] : +#-----| r0_55(glval>) = Convert : r2229_32 +# 2229| r2229_33(glval) = FunctionAddress[operator!=] : +#-----| r0_56(glval>) = VariableAddress[#temp0:0] : +#-----| m0_57(iterator) = Uninitialized[#temp0:0] : &:r0_56 +# 2229| r2229_34(glval) = FunctionAddress[iterator] : +# 2229| r2229_35(glval>) = VariableAddress[(__end)] : +#-----| r0_58(glval>) = Convert : r2229_35 +#-----| r0_59(iterator &) = CopyValue : r0_58 +# 2229| v2229_36(void) = Call[iterator] : func:r2229_34, this:r0_56, 0:r0_59 +# 2229| m2229_37(unknown) = ^CallSideEffect : ~m2229_31 +# 2229| m2229_38(unknown) = Chi : total:m2229_31, partial:m2229_37 +#-----| v0_60(void) = ^BufferReadSideEffect[0] : &:r0_59, ~m2229_29 +# 2229| m2229_39(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r0_56 +# 2229| m2229_40(iterator) = Chi : total:m0_57, partial:m2229_39 +#-----| r0_61(iterator) = Load[#temp0:0] : &:r0_56, m2229_40 +# 2229| r2229_41(bool) = Call[operator!=] : func:r2229_33, this:r0_55, 0:r0_61 +# 2229| m2229_42(unknown) = ^CallSideEffect : ~m2229_38 +# 2229| m2229_43(unknown) = Chi : total:m2229_38, partial:m2229_42 +#-----| v0_62(void) = ^IndirectReadSideEffect[-1] : &:r0_55, m2229_30 +# 2229| v2229_44(void) = ConditionalBranch : r2229_41 +#-----| False -> Block 23 +#-----| True -> Block 22 + +# 2229| Block 22 +# 2229| r2229_45(glval) = VariableAddress[y] : +# 2229| r2229_46(glval>) = VariableAddress[(__begin)] : +#-----| r0_63(glval>) = Convert : r2229_46 +# 2229| r2229_47(glval) = FunctionAddress[operator*] : +# 2229| r2229_48(ClassWithDestructor &) = Call[operator*] : func:r2229_47, this:r0_63 +# 2229| m2229_49(unknown) = ^CallSideEffect : ~m2229_43 +# 2229| m2229_50(unknown) = Chi : total:m2229_43, partial:m2229_49 +#-----| v0_64(void) = ^IndirectReadSideEffect[-1] : &:r0_63, m2229_30 +# 2229| r2229_51(ClassWithDestructor) = Load[?] : &:r2229_48, ~m2229_50 +# 2229| m2229_52(ClassWithDestructor) = Store[y] : &:r2229_45, r2229_51 +# 2230| r2230_1(glval) = VariableAddress[z1] : +# 2230| m2230_2(ClassWithDestructor) = Uninitialized[z1] : &:r2230_1 +# 2230| r2230_3(glval) = FunctionAddress[ClassWithDestructor] : +# 2230| v2230_4(void) = Call[ClassWithDestructor] : func:r2230_3, this:r2230_1 +# 2230| m2230_5(unknown) = ^CallSideEffect : ~m2229_50 +# 2230| m2230_6(unknown) = Chi : total:m2229_50, partial:m2230_5 +# 2230| m2230_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2230_1 +# 2230| m2230_8(ClassWithDestructor) = Chi : total:m2230_2, partial:m2230_7 +# 2231| r2231_1(glval) = VariableAddress[z2] : +# 2231| m2231_2(ClassWithDestructor) = Uninitialized[z2] : &:r2231_1 +# 2231| r2231_3(glval) = FunctionAddress[ClassWithDestructor] : +# 2231| v2231_4(void) = Call[ClassWithDestructor] : func:r2231_3, this:r2231_1 +# 2231| m2231_5(unknown) = ^CallSideEffect : ~m2230_6 +# 2231| m2231_6(unknown) = Chi : total:m2230_6, partial:m2231_5 +# 2231| m2231_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2231_1 +# 2231| m2231_8(ClassWithDestructor) = Chi : total:m2231_2, partial:m2231_7 +# 2232| r2232_1(glval) = VariableAddress[z2] : +# 2232| r2232_2(glval) = FunctionAddress[~ClassWithDestructor] : +# 2232| v2232_3(void) = Call[~ClassWithDestructor] : func:r2232_2, this:r2232_1 +# 2232| m2232_4(unknown) = ^CallSideEffect : ~m2231_6 +# 2232| m2232_5(unknown) = Chi : total:m2231_6, partial:m2232_4 +# 2232| v2232_6(void) = ^IndirectReadSideEffect[-1] : &:r2232_1, m2231_8 +# 2232| m2232_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2232_1 +# 2232| m2232_8(ClassWithDestructor) = Chi : total:m2231_8, partial:m2232_7 +# 2232| r2232_9(glval) = VariableAddress[z1] : +# 2232| r2232_10(glval) = FunctionAddress[~ClassWithDestructor] : +# 2232| v2232_11(void) = Call[~ClassWithDestructor] : func:r2232_10, this:r2232_9 +# 2232| m2232_12(unknown) = ^CallSideEffect : ~m2232_5 +# 2232| m2232_13(unknown) = Chi : total:m2232_5, partial:m2232_12 +# 2232| v2232_14(void) = ^IndirectReadSideEffect[-1] : &:r2232_9, m2230_8 +# 2232| m2232_15(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2232_9 +# 2232| m2232_16(ClassWithDestructor) = Chi : total:m2230_8, partial:m2232_15 +# 2229| r2229_53(glval) = VariableAddress[y] : +# 2229| r2229_54(glval) = FunctionAddress[~ClassWithDestructor] : +# 2229| v2229_55(void) = Call[~ClassWithDestructor] : func:r2229_54, this:r2229_53 +# 2229| m2229_56(unknown) = ^CallSideEffect : ~m2232_13 +# 2229| m2229_57(unknown) = Chi : total:m2232_13, partial:m2229_56 +# 2229| v2229_58(void) = ^IndirectReadSideEffect[-1] : &:r2229_53, m2229_52 +# 2229| m2229_59(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2229_53 +# 2229| m2229_60(ClassWithDestructor) = Chi : total:m2229_52, partial:m2229_59 +# 2229| r2229_61(glval>) = VariableAddress[(__begin)] : +# 2229| r2229_62(glval) = FunctionAddress[operator++] : +# 2229| r2229_63(iterator &) = Call[operator++] : func:r2229_62, this:r2229_61 +# 2229| m2229_64(unknown) = ^CallSideEffect : ~m2229_57 +# 2229| m2229_65(unknown) = Chi : total:m2229_57, partial:m2229_64 +# 2229| v2229_66(void) = ^IndirectReadSideEffect[-1] : &:r2229_61, m2229_30 +# 2229| m2229_67(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r2229_61 +# 2229| m2229_68(iterator) = Chi : total:m2229_30, partial:m2229_67 +# 2229| r2229_69(glval>) = CopyValue : r2229_63 +#-----| Goto (back edge) -> Block 21 + +# 2233| Block 23 +# 2233| v2233_17(void) = NoOp : +# 2233| r2233_18(glval) = VariableAddress[x] : +# 2233| r2233_19(glval) = FunctionAddress[~ClassWithDestructor] : +# 2233| v2233_20(void) = Call[~ClassWithDestructor] : func:r2233_19, this:r2233_18 +# 2233| m2233_21(unknown) = ^CallSideEffect : ~m2229_43 +# 2233| m2233_22(unknown) = Chi : total:m2229_43, partial:m2233_21 +# 2233| v2233_23(void) = ^IndirectReadSideEffect[-1] : &:r2233_18, m2214_8 +# 2233| m2233_24(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2233_18 +# 2233| m2233_25(ClassWithDestructor) = Chi : total:m2214_8, partial:m2233_24 +#-----| Goto -> Block 1 + +# 2198| Block 24 +# 2198| v2198_13(void) = Unreached : + +# 2235| void static_variable_with_destructor_1() +# 2235| Block 0 +# 2235| v2235_1(void) = EnterFunction : +# 2235| m2235_2(unknown) = AliasedDefinition : +# 2235| m2235_3(unknown) = InitializeNonLocal : +# 2235| m2235_4(unknown) = Chi : total:m2235_2, partial:m2235_3 +# 2236| r2236_1(glval) = VariableAddress[a] : +# 2236| m2236_2(ClassWithDestructor) = Uninitialized[a] : &:r2236_1 +# 2236| r2236_3(glval) = FunctionAddress[ClassWithDestructor] : +# 2236| v2236_4(void) = Call[ClassWithDestructor] : func:r2236_3, this:r2236_1 +# 2236| m2236_5(unknown) = ^CallSideEffect : ~m2235_4 +# 2236| m2236_6(unknown) = Chi : total:m2235_4, partial:m2236_5 +# 2236| m2236_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2236_1 +# 2236| m2236_8(ClassWithDestructor) = Chi : total:m2236_2, partial:m2236_7 +# 2237| r2237_1(glval) = VariableAddress[b#init] : +# 2237| r2237_2(bool) = Load[b#init] : &:r2237_1, ~m2236_6 +# 2237| v2237_3(void) = ConditionalBranch : r2237_2 #-----| False -> Block 1 #-----| True -> Block 2 -# 2223| Block 1 -# 2223| r2223_4(glval) = VariableAddress[b] : +# 2237| Block 1 +# 2237| r2237_4(glval) = VariableAddress[b] : #-----| r0_1(glval) = FunctionAddress[ClassWithDestructor] : -#-----| v0_2(void) = Call[ClassWithDestructor] : func:r0_1, this:r2223_4 -#-----| m0_3(unknown) = ^CallSideEffect : ~m2222_6 -#-----| m0_4(unknown) = Chi : total:m2222_6, partial:m0_3 -#-----| m0_5(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2223_4 +#-----| v0_2(void) = Call[ClassWithDestructor] : func:r0_1, this:r2237_4 +#-----| m0_3(unknown) = ^CallSideEffect : ~m2236_6 +#-----| m0_4(unknown) = Chi : total:m2236_6, partial:m0_3 +#-----| m0_5(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2237_4 #-----| m0_6(unknown) = Chi : total:m0_4, partial:m0_5 -# 2223| r2223_5(bool) = Constant[1] : -# 2223| m2223_6(bool) = Store[b#init] : &:r2223_1, r2223_5 -# 2223| m2223_7(unknown) = Chi : total:m0_6, partial:m2223_6 +# 2237| r2237_5(bool) = Constant[1] : +# 2237| m2237_6(bool) = Store[b#init] : &:r2237_1, r2237_5 +# 2237| m2237_7(unknown) = Chi : total:m0_6, partial:m2237_6 #-----| Goto -> Block 2 -# 2224| Block 2 -# 2224| m2224_1(unknown) = Phi : from 0:~m2222_6, from 1:~m2223_7 -# 2224| v2224_2(void) = NoOp : -# 2224| r2224_3(glval) = VariableAddress[a] : -# 2224| r2224_4(glval) = FunctionAddress[~ClassWithDestructor] : -# 2224| v2224_5(void) = Call[~ClassWithDestructor] : func:r2224_4, this:r2224_3 -# 2224| m2224_6(unknown) = ^CallSideEffect : ~m2224_1 -# 2224| m2224_7(unknown) = Chi : total:m2224_1, partial:m2224_6 -# 2224| v2224_8(void) = ^IndirectReadSideEffect[-1] : &:r2224_3, m2222_8 -# 2224| m2224_9(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2224_3 -# 2224| m2224_10(ClassWithDestructor) = Chi : total:m2222_8, partial:m2224_9 -# 2221| v2221_5(void) = ReturnVoid : -# 2221| v2221_6(void) = AliasedUse : ~m2224_7 -# 2221| v2221_7(void) = ExitFunction : +# 2238| Block 2 +# 2238| m2238_1(unknown) = Phi : from 0:~m2236_6, from 1:~m2237_7 +# 2238| v2238_2(void) = NoOp : +# 2238| r2238_3(glval) = VariableAddress[a] : +# 2238| r2238_4(glval) = FunctionAddress[~ClassWithDestructor] : +# 2238| v2238_5(void) = Call[~ClassWithDestructor] : func:r2238_4, this:r2238_3 +# 2238| m2238_6(unknown) = ^CallSideEffect : ~m2238_1 +# 2238| m2238_7(unknown) = Chi : total:m2238_1, partial:m2238_6 +# 2238| v2238_8(void) = ^IndirectReadSideEffect[-1] : &:r2238_3, m2236_8 +# 2238| m2238_9(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2238_3 +# 2238| m2238_10(ClassWithDestructor) = Chi : total:m2236_8, partial:m2238_9 +# 2235| v2235_5(void) = ReturnVoid : +# 2235| v2235_6(void) = AliasedUse : ~m2238_7 +# 2235| v2235_7(void) = ExitFunction : -# 2226| void static_variable_with_destructor_2() -# 2226| Block 0 -# 2226| v2226_1(void) = EnterFunction : -# 2226| m2226_2(unknown) = AliasedDefinition : -# 2226| m2226_3(unknown) = InitializeNonLocal : -# 2226| m2226_4(unknown) = Chi : total:m2226_2, partial:m2226_3 -# 2227| r2227_1(glval) = VariableAddress[a#init] : -# 2227| r2227_2(bool) = Load[a#init] : &:r2227_1, ~m2226_3 -# 2227| v2227_3(void) = ConditionalBranch : r2227_2 +# 2240| void static_variable_with_destructor_2() +# 2240| Block 0 +# 2240| v2240_1(void) = EnterFunction : +# 2240| m2240_2(unknown) = AliasedDefinition : +# 2240| m2240_3(unknown) = InitializeNonLocal : +# 2240| m2240_4(unknown) = Chi : total:m2240_2, partial:m2240_3 +# 2241| r2241_1(glval) = VariableAddress[a#init] : +# 2241| r2241_2(bool) = Load[a#init] : &:r2241_1, ~m2240_3 +# 2241| v2241_3(void) = ConditionalBranch : r2241_2 #-----| False -> Block 1 #-----| True -> Block 2 -# 2227| Block 1 -# 2227| r2227_4(glval) = VariableAddress[a] : +# 2241| Block 1 +# 2241| r2241_4(glval) = VariableAddress[a] : #-----| r0_1(glval) = FunctionAddress[ClassWithDestructor] : -#-----| v0_2(void) = Call[ClassWithDestructor] : func:r0_1, this:r2227_4 -#-----| m0_3(unknown) = ^CallSideEffect : ~m2226_4 -#-----| m0_4(unknown) = Chi : total:m2226_4, partial:m0_3 -#-----| m0_5(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2227_4 +#-----| v0_2(void) = Call[ClassWithDestructor] : func:r0_1, this:r2241_4 +#-----| m0_3(unknown) = ^CallSideEffect : ~m2240_4 +#-----| m0_4(unknown) = Chi : total:m2240_4, partial:m0_3 +#-----| m0_5(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2241_4 #-----| m0_6(unknown) = Chi : total:m0_4, partial:m0_5 -# 2227| r2227_5(bool) = Constant[1] : -# 2227| m2227_6(bool) = Store[a#init] : &:r2227_1, r2227_5 -# 2227| m2227_7(unknown) = Chi : total:m0_6, partial:m2227_6 +# 2241| r2241_5(bool) = Constant[1] : +# 2241| m2241_6(bool) = Store[a#init] : &:r2241_1, r2241_5 +# 2241| m2241_7(unknown) = Chi : total:m0_6, partial:m2241_6 #-----| Goto -> Block 2 -# 2228| Block 2 -# 2228| m2228_1(unknown) = Phi : from 0:~m2226_4, from 1:~m2227_7 -# 2228| r2228_2(glval) = VariableAddress[b] : -# 2228| m2228_3(ClassWithDestructor) = Uninitialized[b] : &:r2228_2 -# 2228| r2228_4(glval) = FunctionAddress[ClassWithDestructor] : -# 2228| v2228_5(void) = Call[ClassWithDestructor] : func:r2228_4, this:r2228_2 -# 2228| m2228_6(unknown) = ^CallSideEffect : ~m2228_1 -# 2228| m2228_7(unknown) = Chi : total:m2228_1, partial:m2228_6 -# 2228| m2228_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2228_2 -# 2228| m2228_9(ClassWithDestructor) = Chi : total:m2228_3, partial:m2228_8 -# 2229| v2229_1(void) = NoOp : -# 2229| r2229_2(glval) = VariableAddress[b] : -# 2229| r2229_3(glval) = FunctionAddress[~ClassWithDestructor] : -# 2229| v2229_4(void) = Call[~ClassWithDestructor] : func:r2229_3, this:r2229_2 -# 2229| m2229_5(unknown) = ^CallSideEffect : ~m2228_7 -# 2229| m2229_6(unknown) = Chi : total:m2228_7, partial:m2229_5 -# 2229| v2229_7(void) = ^IndirectReadSideEffect[-1] : &:r2229_2, m2228_9 -# 2229| m2229_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2229_2 -# 2229| m2229_9(ClassWithDestructor) = Chi : total:m2228_9, partial:m2229_8 -# 2226| v2226_5(void) = ReturnVoid : -# 2226| v2226_6(void) = AliasedUse : ~m2229_6 -# 2226| v2226_7(void) = ExitFunction : +# 2242| Block 2 +# 2242| m2242_1(unknown) = Phi : from 0:~m2240_4, from 1:~m2241_7 +# 2242| r2242_2(glval) = VariableAddress[b] : +# 2242| m2242_3(ClassWithDestructor) = Uninitialized[b] : &:r2242_2 +# 2242| r2242_4(glval) = FunctionAddress[ClassWithDestructor] : +# 2242| v2242_5(void) = Call[ClassWithDestructor] : func:r2242_4, this:r2242_2 +# 2242| m2242_6(unknown) = ^CallSideEffect : ~m2242_1 +# 2242| m2242_7(unknown) = Chi : total:m2242_1, partial:m2242_6 +# 2242| m2242_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2242_2 +# 2242| m2242_9(ClassWithDestructor) = Chi : total:m2242_3, partial:m2242_8 +# 2243| v2243_1(void) = NoOp : +# 2243| r2243_2(glval) = VariableAddress[b] : +# 2243| r2243_3(glval) = FunctionAddress[~ClassWithDestructor] : +# 2243| v2243_4(void) = Call[~ClassWithDestructor] : func:r2243_3, this:r2243_2 +# 2243| m2243_5(unknown) = ^CallSideEffect : ~m2242_7 +# 2243| m2243_6(unknown) = Chi : total:m2242_7, partial:m2243_5 +# 2243| v2243_7(void) = ^IndirectReadSideEffect[-1] : &:r2243_2, m2242_9 +# 2243| m2243_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2243_2 +# 2243| m2243_9(ClassWithDestructor) = Chi : total:m2242_9, partial:m2243_8 +# 2240| v2240_5(void) = ReturnVoid : +# 2240| v2240_6(void) = AliasedUse : ~m2243_6 +# 2240| v2240_7(void) = ExitFunction : -# 2231| void static_variable_with_destructor_3() -# 2231| Block 0 -# 2231| v2231_1(void) = EnterFunction : -# 2231| m2231_2(unknown) = AliasedDefinition : -# 2231| m2231_3(unknown) = InitializeNonLocal : -# 2231| m2231_4(unknown) = Chi : total:m2231_2, partial:m2231_3 -# 2232| r2232_1(glval) = VariableAddress[a] : -# 2232| m2232_2(ClassWithDestructor) = Uninitialized[a] : &:r2232_1 -# 2232| r2232_3(glval) = FunctionAddress[ClassWithDestructor] : -# 2232| v2232_4(void) = Call[ClassWithDestructor] : func:r2232_3, this:r2232_1 -# 2232| m2232_5(unknown) = ^CallSideEffect : ~m2231_4 -# 2232| m2232_6(unknown) = Chi : total:m2231_4, partial:m2232_5 -# 2232| m2232_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2232_1 -# 2232| m2232_8(ClassWithDestructor) = Chi : total:m2232_2, partial:m2232_7 -# 2233| r2233_1(glval) = VariableAddress[b] : -# 2233| m2233_2(ClassWithDestructor) = Uninitialized[b] : &:r2233_1 -# 2233| r2233_3(glval) = FunctionAddress[ClassWithDestructor] : -# 2233| v2233_4(void) = Call[ClassWithDestructor] : func:r2233_3, this:r2233_1 -# 2233| m2233_5(unknown) = ^CallSideEffect : ~m2232_6 -# 2233| m2233_6(unknown) = Chi : total:m2232_6, partial:m2233_5 -# 2233| m2233_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2233_1 -# 2233| m2233_8(ClassWithDestructor) = Chi : total:m2233_2, partial:m2233_7 -# 2234| r2234_1(glval) = VariableAddress[c#init] : -# 2234| r2234_2(bool) = Load[c#init] : &:r2234_1, ~m2233_6 -# 2234| v2234_3(void) = ConditionalBranch : r2234_2 +# 2245| void static_variable_with_destructor_3() +# 2245| Block 0 +# 2245| v2245_1(void) = EnterFunction : +# 2245| m2245_2(unknown) = AliasedDefinition : +# 2245| m2245_3(unknown) = InitializeNonLocal : +# 2245| m2245_4(unknown) = Chi : total:m2245_2, partial:m2245_3 +# 2246| r2246_1(glval) = VariableAddress[a] : +# 2246| m2246_2(ClassWithDestructor) = Uninitialized[a] : &:r2246_1 +# 2246| r2246_3(glval) = FunctionAddress[ClassWithDestructor] : +# 2246| v2246_4(void) = Call[ClassWithDestructor] : func:r2246_3, this:r2246_1 +# 2246| m2246_5(unknown) = ^CallSideEffect : ~m2245_4 +# 2246| m2246_6(unknown) = Chi : total:m2245_4, partial:m2246_5 +# 2246| m2246_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2246_1 +# 2246| m2246_8(ClassWithDestructor) = Chi : total:m2246_2, partial:m2246_7 +# 2247| r2247_1(glval) = VariableAddress[b] : +# 2247| m2247_2(ClassWithDestructor) = Uninitialized[b] : &:r2247_1 +# 2247| r2247_3(glval) = FunctionAddress[ClassWithDestructor] : +# 2247| v2247_4(void) = Call[ClassWithDestructor] : func:r2247_3, this:r2247_1 +# 2247| m2247_5(unknown) = ^CallSideEffect : ~m2246_6 +# 2247| m2247_6(unknown) = Chi : total:m2246_6, partial:m2247_5 +# 2247| m2247_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2247_1 +# 2247| m2247_8(ClassWithDestructor) = Chi : total:m2247_2, partial:m2247_7 +# 2248| r2248_1(glval) = VariableAddress[c#init] : +# 2248| r2248_2(bool) = Load[c#init] : &:r2248_1, ~m2247_6 +# 2248| v2248_3(void) = ConditionalBranch : r2248_2 #-----| False -> Block 1 #-----| True -> Block 2 -# 2234| Block 1 -# 2234| r2234_4(glval) = VariableAddress[c] : +# 2248| Block 1 +# 2248| r2248_4(glval) = VariableAddress[c] : #-----| r0_1(glval) = FunctionAddress[ClassWithDestructor] : -#-----| v0_2(void) = Call[ClassWithDestructor] : func:r0_1, this:r2234_4 -#-----| m0_3(unknown) = ^CallSideEffect : ~m2233_6 -#-----| m0_4(unknown) = Chi : total:m2233_6, partial:m0_3 -#-----| m0_5(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2234_4 +#-----| v0_2(void) = Call[ClassWithDestructor] : func:r0_1, this:r2248_4 +#-----| m0_3(unknown) = ^CallSideEffect : ~m2247_6 +#-----| m0_4(unknown) = Chi : total:m2247_6, partial:m0_3 +#-----| m0_5(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2248_4 #-----| m0_6(unknown) = Chi : total:m0_4, partial:m0_5 -# 2234| r2234_5(bool) = Constant[1] : -# 2234| m2234_6(bool) = Store[c#init] : &:r2234_1, r2234_5 -# 2234| m2234_7(unknown) = Chi : total:m0_6, partial:m2234_6 +# 2248| r2248_5(bool) = Constant[1] : +# 2248| m2248_6(bool) = Store[c#init] : &:r2248_1, r2248_5 +# 2248| m2248_7(unknown) = Chi : total:m0_6, partial:m2248_6 #-----| Goto -> Block 2 -# 2235| Block 2 -# 2235| m2235_1(unknown) = Phi : from 0:~m2233_6, from 1:~m2234_7 -# 2235| v2235_2(void) = NoOp : -# 2235| r2235_3(glval) = VariableAddress[b] : -# 2235| r2235_4(glval) = FunctionAddress[~ClassWithDestructor] : -# 2235| v2235_5(void) = Call[~ClassWithDestructor] : func:r2235_4, this:r2235_3 -# 2235| m2235_6(unknown) = ^CallSideEffect : ~m2235_1 -# 2235| m2235_7(unknown) = Chi : total:m2235_1, partial:m2235_6 -# 2235| v2235_8(void) = ^IndirectReadSideEffect[-1] : &:r2235_3, m2233_8 -# 2235| m2235_9(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2235_3 -# 2235| m2235_10(ClassWithDestructor) = Chi : total:m2233_8, partial:m2235_9 -# 2235| r2235_11(glval) = VariableAddress[a] : -# 2235| r2235_12(glval) = FunctionAddress[~ClassWithDestructor] : -# 2235| v2235_13(void) = Call[~ClassWithDestructor] : func:r2235_12, this:r2235_11 -# 2235| m2235_14(unknown) = ^CallSideEffect : ~m2235_7 -# 2235| m2235_15(unknown) = Chi : total:m2235_7, partial:m2235_14 -# 2235| v2235_16(void) = ^IndirectReadSideEffect[-1] : &:r2235_11, m2232_8 -# 2235| m2235_17(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2235_11 -# 2235| m2235_18(ClassWithDestructor) = Chi : total:m2232_8, partial:m2235_17 -# 2231| v2231_5(void) = ReturnVoid : -# 2231| v2231_6(void) = AliasedUse : ~m2235_15 -# 2231| v2231_7(void) = ExitFunction : +# 2249| Block 2 +# 2249| m2249_1(unknown) = Phi : from 0:~m2247_6, from 1:~m2248_7 +# 2249| v2249_2(void) = NoOp : +# 2249| r2249_3(glval) = VariableAddress[b] : +# 2249| r2249_4(glval) = FunctionAddress[~ClassWithDestructor] : +# 2249| v2249_5(void) = Call[~ClassWithDestructor] : func:r2249_4, this:r2249_3 +# 2249| m2249_6(unknown) = ^CallSideEffect : ~m2249_1 +# 2249| m2249_7(unknown) = Chi : total:m2249_1, partial:m2249_6 +# 2249| v2249_8(void) = ^IndirectReadSideEffect[-1] : &:r2249_3, m2247_8 +# 2249| m2249_9(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2249_3 +# 2249| m2249_10(ClassWithDestructor) = Chi : total:m2247_8, partial:m2249_9 +# 2249| r2249_11(glval) = VariableAddress[a] : +# 2249| r2249_12(glval) = FunctionAddress[~ClassWithDestructor] : +# 2249| v2249_13(void) = Call[~ClassWithDestructor] : func:r2249_12, this:r2249_11 +# 2249| m2249_14(unknown) = ^CallSideEffect : ~m2249_7 +# 2249| m2249_15(unknown) = Chi : total:m2249_7, partial:m2249_14 +# 2249| v2249_16(void) = ^IndirectReadSideEffect[-1] : &:r2249_11, m2246_8 +# 2249| m2249_17(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2249_11 +# 2249| m2249_18(ClassWithDestructor) = Chi : total:m2246_8, partial:m2249_17 +# 2245| v2245_5(void) = ReturnVoid : +# 2245| v2245_6(void) = AliasedUse : ~m2249_15 +# 2245| v2245_7(void) = ExitFunction : -# 2237| ClassWithDestructor global_class_with_destructor -# 2237| Block 0 -# 2237| v2237_1(void) = EnterFunction : -# 2237| m2237_2(unknown) = AliasedDefinition : -# 2237| r2237_3(glval) = VariableAddress[global_class_with_destructor] : -# 2237| r2237_4(glval) = FunctionAddress[ClassWithDestructor] : -# 2237| v2237_5(void) = Call[ClassWithDestructor] : func:r2237_4, this:r2237_3 -# 2237| m2237_6(unknown) = ^CallSideEffect : ~m2237_2 -# 2237| m2237_7(unknown) = Chi : total:m2237_2, partial:m2237_6 -# 2237| m2237_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2237_3 -# 2237| m2237_9(unknown) = Chi : total:m2237_7, partial:m2237_8 -# 2237| v2237_10(void) = ReturnVoid : -# 2237| v2237_11(void) = AliasedUse : ~m2237_9 -# 2237| v2237_12(void) = ExitFunction : +# 2251| ClassWithDestructor global_class_with_destructor +# 2251| Block 0 +# 2251| v2251_1(void) = EnterFunction : +# 2251| m2251_2(unknown) = AliasedDefinition : +# 2251| r2251_3(glval) = VariableAddress[global_class_with_destructor] : +# 2251| r2251_4(glval) = FunctionAddress[ClassWithDestructor] : +# 2251| v2251_5(void) = Call[ClassWithDestructor] : func:r2251_4, this:r2251_3 +# 2251| m2251_6(unknown) = ^CallSideEffect : ~m2251_2 +# 2251| m2251_7(unknown) = Chi : total:m2251_2, partial:m2251_6 +# 2251| m2251_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2251_3 +# 2251| m2251_9(unknown) = Chi : total:m2251_7, partial:m2251_8 +# 2251| v2251_10(void) = ReturnVoid : +# 2251| v2251_11(void) = AliasedUse : ~m2251_9 +# 2251| v2251_12(void) = ExitFunction : -# 2241| ClassWithDestructor& vacuous_destructor_call::get(ClassWithDestructor&) -# 2241| Block 0 -# 2241| v2241_1(void) = EnterFunction : -# 2241| m2241_2(unknown) = AliasedDefinition : -# 2241| m2241_3(unknown) = InitializeNonLocal : -# 2241| m2241_4(unknown) = Chi : total:m2241_2, partial:m2241_3 -# 2241| r2241_5(glval) = VariableAddress[t] : -# 2241| m2241_6(ClassWithDestructor &) = InitializeParameter[t] : &:r2241_5 -# 2241| r2241_7(ClassWithDestructor &) = Load[t] : &:r2241_5, m2241_6 -# 2241| m2241_8(unknown) = InitializeIndirection[t] : &:r2241_7 -# 2241| r2241_9(glval) = VariableAddress[#return] : -# 2241| r2241_10(glval) = VariableAddress[t] : -# 2241| r2241_11(ClassWithDestructor &) = Load[t] : &:r2241_10, m2241_6 -# 2241| r2241_12(glval) = CopyValue : r2241_11 -# 2241| r2241_13(ClassWithDestructor &) = CopyValue : r2241_12 -# 2241| m2241_14(ClassWithDestructor &) = Store[#return] : &:r2241_9, r2241_13 -# 2241| v2241_15(void) = ReturnIndirection[t] : &:r2241_7, m2241_8 -# 2241| r2241_16(glval) = VariableAddress[#return] : -# 2241| v2241_17(void) = ReturnValue : &:r2241_16, m2241_14 -# 2241| v2241_18(void) = AliasedUse : m2241_3 -# 2241| v2241_19(void) = ExitFunction : +# 2255| ClassWithDestructor& vacuous_destructor_call::get(ClassWithDestructor&) +# 2255| Block 0 +# 2255| v2255_1(void) = EnterFunction : +# 2255| m2255_2(unknown) = AliasedDefinition : +# 2255| m2255_3(unknown) = InitializeNonLocal : +# 2255| m2255_4(unknown) = Chi : total:m2255_2, partial:m2255_3 +# 2255| r2255_5(glval) = VariableAddress[t] : +# 2255| m2255_6(ClassWithDestructor &) = InitializeParameter[t] : &:r2255_5 +# 2255| r2255_7(ClassWithDestructor &) = Load[t] : &:r2255_5, m2255_6 +# 2255| m2255_8(unknown) = InitializeIndirection[t] : &:r2255_7 +# 2255| r2255_9(glval) = VariableAddress[#return] : +# 2255| r2255_10(glval) = VariableAddress[t] : +# 2255| r2255_11(ClassWithDestructor &) = Load[t] : &:r2255_10, m2255_6 +# 2255| r2255_12(glval) = CopyValue : r2255_11 +# 2255| r2255_13(ClassWithDestructor &) = CopyValue : r2255_12 +# 2255| m2255_14(ClassWithDestructor &) = Store[#return] : &:r2255_9, r2255_13 +# 2255| v2255_15(void) = ReturnIndirection[t] : &:r2255_7, m2255_8 +# 2255| r2255_16(glval) = VariableAddress[#return] : +# 2255| v2255_17(void) = ReturnValue : &:r2255_16, m2255_14 +# 2255| v2255_18(void) = AliasedUse : m2255_3 +# 2255| v2255_19(void) = ExitFunction : -# 2241| int& vacuous_destructor_call::get(int&) -# 2241| Block 0 -# 2241| v2241_1(void) = EnterFunction : -# 2241| m2241_2(unknown) = AliasedDefinition : -# 2241| m2241_3(unknown) = InitializeNonLocal : -# 2241| m2241_4(unknown) = Chi : total:m2241_2, partial:m2241_3 -# 2241| r2241_5(glval) = VariableAddress[t] : -# 2241| m2241_6(int &) = InitializeParameter[t] : &:r2241_5 -# 2241| r2241_7(int &) = Load[t] : &:r2241_5, m2241_6 -# 2241| m2241_8(unknown) = InitializeIndirection[t] : &:r2241_7 -# 2241| r2241_9(glval) = VariableAddress[#return] : -# 2241| r2241_10(glval) = VariableAddress[t] : -# 2241| r2241_11(int &) = Load[t] : &:r2241_10, m2241_6 -# 2241| r2241_12(glval) = CopyValue : r2241_11 -# 2241| r2241_13(int &) = CopyValue : r2241_12 -# 2241| m2241_14(int &) = Store[#return] : &:r2241_9, r2241_13 -# 2241| v2241_15(void) = ReturnIndirection[t] : &:r2241_7, m2241_8 -# 2241| r2241_16(glval) = VariableAddress[#return] : -# 2241| v2241_17(void) = ReturnValue : &:r2241_16, m2241_14 -# 2241| v2241_18(void) = AliasedUse : m2241_3 -# 2241| v2241_19(void) = ExitFunction : +# 2255| int& vacuous_destructor_call::get(int&) +# 2255| Block 0 +# 2255| v2255_1(void) = EnterFunction : +# 2255| m2255_2(unknown) = AliasedDefinition : +# 2255| m2255_3(unknown) = InitializeNonLocal : +# 2255| m2255_4(unknown) = Chi : total:m2255_2, partial:m2255_3 +# 2255| r2255_5(glval) = VariableAddress[t] : +# 2255| m2255_6(int &) = InitializeParameter[t] : &:r2255_5 +# 2255| r2255_7(int &) = Load[t] : &:r2255_5, m2255_6 +# 2255| m2255_8(unknown) = InitializeIndirection[t] : &:r2255_7 +# 2255| r2255_9(glval) = VariableAddress[#return] : +# 2255| r2255_10(glval) = VariableAddress[t] : +# 2255| r2255_11(int &) = Load[t] : &:r2255_10, m2255_6 +# 2255| r2255_12(glval) = CopyValue : r2255_11 +# 2255| r2255_13(int &) = CopyValue : r2255_12 +# 2255| m2255_14(int &) = Store[#return] : &:r2255_9, r2255_13 +# 2255| v2255_15(void) = ReturnIndirection[t] : &:r2255_7, m2255_8 +# 2255| r2255_16(glval) = VariableAddress[#return] : +# 2255| v2255_17(void) = ReturnValue : &:r2255_16, m2255_14 +# 2255| v2255_18(void) = AliasedUse : m2255_3 +# 2255| v2255_19(void) = ExitFunction : -# 2244| void vacuous_destructor_call::call_destructor(ClassWithDestructor&) -# 2244| Block 0 -# 2244| v2244_1(void) = EnterFunction : -# 2244| m2244_2(unknown) = AliasedDefinition : -# 2244| m2244_3(unknown) = InitializeNonLocal : -# 2244| m2244_4(unknown) = Chi : total:m2244_2, partial:m2244_3 -# 2244| r2244_5(glval) = VariableAddress[t] : -# 2244| m2244_6(ClassWithDestructor &) = InitializeParameter[t] : &:r2244_5 -# 2244| r2244_7(ClassWithDestructor &) = Load[t] : &:r2244_5, m2244_6 -# 2244| m2244_8(unknown) = InitializeIndirection[t] : &:r2244_7 -# 2245| r2245_1(glval) = FunctionAddress[get] : -# 2245| r2245_2(glval) = VariableAddress[t] : -# 2245| r2245_3(ClassWithDestructor &) = Load[t] : &:r2245_2, m2244_6 -# 2245| r2245_4(glval) = CopyValue : r2245_3 -# 2245| r2245_5(ClassWithDestructor &) = CopyValue : r2245_4 -# 2245| r2245_6(ClassWithDestructor &) = Call[get] : func:r2245_1, 0:r2245_5 -# 2245| m2245_7(unknown) = ^CallSideEffect : ~m2244_4 -# 2245| m2245_8(unknown) = Chi : total:m2244_4, partial:m2245_7 -# 2245| v2245_9(void) = ^BufferReadSideEffect[0] : &:r2245_5, ~m2244_8 -# 2245| m2245_10(unknown) = ^BufferMayWriteSideEffect[0] : &:r2245_5 -# 2245| m2245_11(unknown) = Chi : total:m2244_8, partial:m2245_10 -# 2245| r2245_12(glval) = CopyValue : r2245_6 -# 2245| r2245_13(glval) = FunctionAddress[~ClassWithDestructor] : -# 2245| v2245_14(void) = Call[~ClassWithDestructor] : func:r2245_13 -# 2245| m2245_15(unknown) = ^CallSideEffect : ~m2245_8 -# 2245| m2245_16(unknown) = Chi : total:m2245_8, partial:m2245_15 -# 2245| v2245_17(void) = ^IndirectReadSideEffect[-1] : &:r2245_12, ~m2245_11 -# 2245| m2245_18(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2245_12 -# 2245| m2245_19(unknown) = Chi : total:m2245_11, partial:m2245_18 -# 2246| v2246_1(void) = NoOp : -# 2244| v2244_9(void) = ReturnIndirection[t] : &:r2244_7, m2245_19 -# 2244| v2244_10(void) = ReturnVoid : -# 2244| v2244_11(void) = AliasedUse : ~m2245_16 -# 2244| v2244_12(void) = ExitFunction : +# 2258| void vacuous_destructor_call::call_destructor(ClassWithDestructor&) +# 2258| Block 0 +# 2258| v2258_1(void) = EnterFunction : +# 2258| m2258_2(unknown) = AliasedDefinition : +# 2258| m2258_3(unknown) = InitializeNonLocal : +# 2258| m2258_4(unknown) = Chi : total:m2258_2, partial:m2258_3 +# 2258| r2258_5(glval) = VariableAddress[t] : +# 2258| m2258_6(ClassWithDestructor &) = InitializeParameter[t] : &:r2258_5 +# 2258| r2258_7(ClassWithDestructor &) = Load[t] : &:r2258_5, m2258_6 +# 2258| m2258_8(unknown) = InitializeIndirection[t] : &:r2258_7 +# 2259| r2259_1(glval) = FunctionAddress[get] : +# 2259| r2259_2(glval) = VariableAddress[t] : +# 2259| r2259_3(ClassWithDestructor &) = Load[t] : &:r2259_2, m2258_6 +# 2259| r2259_4(glval) = CopyValue : r2259_3 +# 2259| r2259_5(ClassWithDestructor &) = CopyValue : r2259_4 +# 2259| r2259_6(ClassWithDestructor &) = Call[get] : func:r2259_1, 0:r2259_5 +# 2259| m2259_7(unknown) = ^CallSideEffect : ~m2258_4 +# 2259| m2259_8(unknown) = Chi : total:m2258_4, partial:m2259_7 +# 2259| v2259_9(void) = ^BufferReadSideEffect[0] : &:r2259_5, ~m2258_8 +# 2259| m2259_10(unknown) = ^BufferMayWriteSideEffect[0] : &:r2259_5 +# 2259| m2259_11(unknown) = Chi : total:m2258_8, partial:m2259_10 +# 2259| r2259_12(glval) = CopyValue : r2259_6 +# 2259| r2259_13(glval) = FunctionAddress[~ClassWithDestructor] : +# 2259| v2259_14(void) = Call[~ClassWithDestructor] : func:r2259_13 +# 2259| m2259_15(unknown) = ^CallSideEffect : ~m2259_8 +# 2259| m2259_16(unknown) = Chi : total:m2259_8, partial:m2259_15 +# 2259| v2259_17(void) = ^IndirectReadSideEffect[-1] : &:r2259_12, ~m2259_11 +# 2259| m2259_18(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2259_12 +# 2259| m2259_19(unknown) = Chi : total:m2259_11, partial:m2259_18 +# 2260| v2260_1(void) = NoOp : +# 2258| v2258_9(void) = ReturnIndirection[t] : &:r2258_7, m2259_19 +# 2258| v2258_10(void) = ReturnVoid : +# 2258| v2258_11(void) = AliasedUse : ~m2259_16 +# 2258| v2258_12(void) = ExitFunction : -# 2244| void vacuous_destructor_call::call_destructor(int&) -# 2244| Block 0 -# 2244| v2244_1(void) = EnterFunction : -# 2244| m2244_2(unknown) = AliasedDefinition : -# 2244| m2244_3(unknown) = InitializeNonLocal : -# 2244| m2244_4(unknown) = Chi : total:m2244_2, partial:m2244_3 -# 2244| r2244_5(glval) = VariableAddress[t] : -# 2244| m2244_6(int &) = InitializeParameter[t] : &:r2244_5 -# 2244| r2244_7(int &) = Load[t] : &:r2244_5, m2244_6 -# 2244| m2244_8(unknown) = InitializeIndirection[t] : &:r2244_7 -# 2245| r2245_1(glval) = FunctionAddress[get] : -# 2245| r2245_2(glval) = VariableAddress[t] : -# 2245| r2245_3(int &) = Load[t] : &:r2245_2, m2244_6 -# 2245| r2245_4(glval) = CopyValue : r2245_3 -# 2245| r2245_5(int &) = CopyValue : r2245_4 -# 2245| r2245_6(int &) = Call[get] : func:r2245_1, 0:r2245_5 -# 2245| m2245_7(unknown) = ^CallSideEffect : ~m2244_4 -# 2245| m2245_8(unknown) = Chi : total:m2244_4, partial:m2245_7 -# 2245| v2245_9(void) = ^BufferReadSideEffect[0] : &:r2245_5, ~m2244_8 -# 2245| m2245_10(unknown) = ^BufferMayWriteSideEffect[0] : &:r2245_5 -# 2245| m2245_11(unknown) = Chi : total:m2244_8, partial:m2245_10 -# 2245| r2245_12(glval) = CopyValue : r2245_6 -# 2246| v2246_1(void) = NoOp : -# 2244| v2244_9(void) = ReturnIndirection[t] : &:r2244_7, m2245_11 -# 2244| v2244_10(void) = ReturnVoid : -# 2244| v2244_11(void) = AliasedUse : ~m2245_8 -# 2244| v2244_12(void) = ExitFunction : +# 2258| void vacuous_destructor_call::call_destructor(int&) +# 2258| Block 0 +# 2258| v2258_1(void) = EnterFunction : +# 2258| m2258_2(unknown) = AliasedDefinition : +# 2258| m2258_3(unknown) = InitializeNonLocal : +# 2258| m2258_4(unknown) = Chi : total:m2258_2, partial:m2258_3 +# 2258| r2258_5(glval) = VariableAddress[t] : +# 2258| m2258_6(int &) = InitializeParameter[t] : &:r2258_5 +# 2258| r2258_7(int &) = Load[t] : &:r2258_5, m2258_6 +# 2258| m2258_8(unknown) = InitializeIndirection[t] : &:r2258_7 +# 2259| r2259_1(glval) = FunctionAddress[get] : +# 2259| r2259_2(glval) = VariableAddress[t] : +# 2259| r2259_3(int &) = Load[t] : &:r2259_2, m2258_6 +# 2259| r2259_4(glval) = CopyValue : r2259_3 +# 2259| r2259_5(int &) = CopyValue : r2259_4 +# 2259| r2259_6(int &) = Call[get] : func:r2259_1, 0:r2259_5 +# 2259| m2259_7(unknown) = ^CallSideEffect : ~m2258_4 +# 2259| m2259_8(unknown) = Chi : total:m2258_4, partial:m2259_7 +# 2259| v2259_9(void) = ^BufferReadSideEffect[0] : &:r2259_5, ~m2258_8 +# 2259| m2259_10(unknown) = ^BufferMayWriteSideEffect[0] : &:r2259_5 +# 2259| m2259_11(unknown) = Chi : total:m2258_8, partial:m2259_10 +# 2259| r2259_12(glval) = CopyValue : r2259_6 +# 2260| v2260_1(void) = NoOp : +# 2258| v2258_9(void) = ReturnIndirection[t] : &:r2258_7, m2259_11 +# 2258| v2258_10(void) = ReturnVoid : +# 2258| v2258_11(void) = AliasedUse : ~m2259_8 +# 2258| v2258_12(void) = ExitFunction : -# 2248| void vacuous_destructor_call::non_vacuous_destructor_call() -# 2248| Block 0 -# 2248| v2248_1(void) = EnterFunction : -# 2248| m2248_2(unknown) = AliasedDefinition : -# 2248| m2248_3(unknown) = InitializeNonLocal : -# 2248| m2248_4(unknown) = Chi : total:m2248_2, partial:m2248_3 -# 2249| r2249_1(glval) = VariableAddress[c] : -# 2249| m2249_2(ClassWithDestructor) = Uninitialized[c] : &:r2249_1 -# 2249| r2249_3(glval) = FunctionAddress[ClassWithDestructor] : -# 2249| v2249_4(void) = Call[ClassWithDestructor] : func:r2249_3, this:r2249_1 -# 2249| m2249_5(unknown) = ^CallSideEffect : ~m2248_4 -# 2249| m2249_6(unknown) = Chi : total:m2248_4, partial:m2249_5 -# 2249| m2249_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2249_1 -# 2249| m2249_8(ClassWithDestructor) = Chi : total:m2249_2, partial:m2249_7 -# 2250| r2250_1(glval) = FunctionAddress[call_destructor] : -# 2250| r2250_2(glval) = VariableAddress[c] : -# 2250| r2250_3(ClassWithDestructor &) = CopyValue : r2250_2 -# 2250| v2250_4(void) = Call[call_destructor] : func:r2250_1, 0:r2250_3 -# 2250| m2250_5(unknown) = ^CallSideEffect : ~m2249_6 -# 2250| m2250_6(unknown) = Chi : total:m2249_6, partial:m2250_5 -# 2250| v2250_7(void) = ^BufferReadSideEffect[0] : &:r2250_3, ~m2249_8 -# 2250| m2250_8(unknown) = ^BufferMayWriteSideEffect[0] : &:r2250_3 -# 2250| m2250_9(ClassWithDestructor) = Chi : total:m2249_8, partial:m2250_8 -# 2251| v2251_1(void) = NoOp : -# 2251| r2251_2(glval) = VariableAddress[c] : -# 2251| r2251_3(glval) = FunctionAddress[~ClassWithDestructor] : -# 2251| v2251_4(void) = Call[~ClassWithDestructor] : func:r2251_3, this:r2251_2 -# 2251| m2251_5(unknown) = ^CallSideEffect : ~m2250_6 -# 2251| m2251_6(unknown) = Chi : total:m2250_6, partial:m2251_5 -# 2251| v2251_7(void) = ^IndirectReadSideEffect[-1] : &:r2251_2, m2250_9 -# 2251| m2251_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2251_2 -# 2251| m2251_9(ClassWithDestructor) = Chi : total:m2250_9, partial:m2251_8 -# 2248| v2248_5(void) = ReturnVoid : -# 2248| v2248_6(void) = AliasedUse : ~m2251_6 -# 2248| v2248_7(void) = ExitFunction : +# 2262| void vacuous_destructor_call::non_vacuous_destructor_call() +# 2262| Block 0 +# 2262| v2262_1(void) = EnterFunction : +# 2262| m2262_2(unknown) = AliasedDefinition : +# 2262| m2262_3(unknown) = InitializeNonLocal : +# 2262| m2262_4(unknown) = Chi : total:m2262_2, partial:m2262_3 +# 2263| r2263_1(glval) = VariableAddress[c] : +# 2263| m2263_2(ClassWithDestructor) = Uninitialized[c] : &:r2263_1 +# 2263| r2263_3(glval) = FunctionAddress[ClassWithDestructor] : +# 2263| v2263_4(void) = Call[ClassWithDestructor] : func:r2263_3, this:r2263_1 +# 2263| m2263_5(unknown) = ^CallSideEffect : ~m2262_4 +# 2263| m2263_6(unknown) = Chi : total:m2262_4, partial:m2263_5 +# 2263| m2263_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2263_1 +# 2263| m2263_8(ClassWithDestructor) = Chi : total:m2263_2, partial:m2263_7 +# 2264| r2264_1(glval) = FunctionAddress[call_destructor] : +# 2264| r2264_2(glval) = VariableAddress[c] : +# 2264| r2264_3(ClassWithDestructor &) = CopyValue : r2264_2 +# 2264| v2264_4(void) = Call[call_destructor] : func:r2264_1, 0:r2264_3 +# 2264| m2264_5(unknown) = ^CallSideEffect : ~m2263_6 +# 2264| m2264_6(unknown) = Chi : total:m2263_6, partial:m2264_5 +# 2264| v2264_7(void) = ^BufferReadSideEffect[0] : &:r2264_3, ~m2263_8 +# 2264| m2264_8(unknown) = ^BufferMayWriteSideEffect[0] : &:r2264_3 +# 2264| m2264_9(ClassWithDestructor) = Chi : total:m2263_8, partial:m2264_8 +# 2265| v2265_1(void) = NoOp : +# 2265| r2265_2(glval) = VariableAddress[c] : +# 2265| r2265_3(glval) = FunctionAddress[~ClassWithDestructor] : +# 2265| v2265_4(void) = Call[~ClassWithDestructor] : func:r2265_3, this:r2265_2 +# 2265| m2265_5(unknown) = ^CallSideEffect : ~m2264_6 +# 2265| m2265_6(unknown) = Chi : total:m2264_6, partial:m2265_5 +# 2265| v2265_7(void) = ^IndirectReadSideEffect[-1] : &:r2265_2, m2264_9 +# 2265| m2265_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2265_2 +# 2265| m2265_9(ClassWithDestructor) = Chi : total:m2264_9, partial:m2265_8 +# 2262| v2262_5(void) = ReturnVoid : +# 2262| v2262_6(void) = AliasedUse : ~m2265_6 +# 2262| v2262_7(void) = ExitFunction : -# 2253| void vacuous_destructor_call::vacuous_destructor_call() -# 2253| Block 0 -# 2253| v2253_1(void) = EnterFunction : -# 2253| m2253_2(unknown) = AliasedDefinition : -# 2253| m2253_3(unknown) = InitializeNonLocal : -# 2253| m2253_4(unknown) = Chi : total:m2253_2, partial:m2253_3 -# 2254| r2254_1(glval) = VariableAddress[i] : -# 2254| m2254_2(int) = Uninitialized[i] : &:r2254_1 -# 2255| r2255_1(glval) = FunctionAddress[call_destructor] : -# 2255| r2255_2(glval) = VariableAddress[i] : -# 2255| r2255_3(int &) = CopyValue : r2255_2 -# 2255| v2255_4(void) = Call[call_destructor] : func:r2255_1, 0:r2255_3 -# 2255| m2255_5(unknown) = ^CallSideEffect : ~m2253_4 -# 2255| m2255_6(unknown) = Chi : total:m2253_4, partial:m2255_5 -# 2255| v2255_7(void) = ^BufferReadSideEffect[0] : &:r2255_3, ~m2254_2 -# 2255| m2255_8(unknown) = ^BufferMayWriteSideEffect[0] : &:r2255_3 -# 2255| m2255_9(int) = Chi : total:m2254_2, partial:m2255_8 -# 2256| v2256_1(void) = NoOp : -# 2253| v2253_5(void) = ReturnVoid : -# 2253| v2253_6(void) = AliasedUse : ~m2255_6 -# 2253| v2253_7(void) = ExitFunction : +# 2267| void vacuous_destructor_call::vacuous_destructor_call() +# 2267| Block 0 +# 2267| v2267_1(void) = EnterFunction : +# 2267| m2267_2(unknown) = AliasedDefinition : +# 2267| m2267_3(unknown) = InitializeNonLocal : +# 2267| m2267_4(unknown) = Chi : total:m2267_2, partial:m2267_3 +# 2268| r2268_1(glval) = VariableAddress[i] : +# 2268| m2268_2(int) = Uninitialized[i] : &:r2268_1 +# 2269| r2269_1(glval) = FunctionAddress[call_destructor] : +# 2269| r2269_2(glval) = VariableAddress[i] : +# 2269| r2269_3(int &) = CopyValue : r2269_2 +# 2269| v2269_4(void) = Call[call_destructor] : func:r2269_1, 0:r2269_3 +# 2269| m2269_5(unknown) = ^CallSideEffect : ~m2267_4 +# 2269| m2269_6(unknown) = Chi : total:m2267_4, partial:m2269_5 +# 2269| v2269_7(void) = ^BufferReadSideEffect[0] : &:r2269_3, ~m2268_2 +# 2269| m2269_8(unknown) = ^BufferMayWriteSideEffect[0] : &:r2269_3 +# 2269| m2269_9(int) = Chi : total:m2268_2, partial:m2269_8 +# 2270| v2270_1(void) = NoOp : +# 2267| v2267_5(void) = ReturnVoid : +# 2267| v2267_6(void) = AliasedUse : ~m2269_6 +# 2267| v2267_7(void) = ExitFunction : -# 2259| void TryCatchDestructors(bool) -# 2259| Block 0 -# 2259| v2259_1(void) = EnterFunction : -# 2259| m2259_2(unknown) = AliasedDefinition : -# 2259| m2259_3(unknown) = InitializeNonLocal : -# 2259| m2259_4(unknown) = Chi : total:m2259_2, partial:m2259_3 -# 2259| r2259_5(glval) = VariableAddress[b] : -# 2259| m2259_6(bool) = InitializeParameter[b] : &:r2259_5 -# 2261| r2261_1(glval) = VariableAddress[s] : -# 2261| m2261_2(String) = Uninitialized[s] : &:r2261_1 -# 2261| r2261_3(glval) = FunctionAddress[String] : -# 2261| v2261_4(void) = Call[String] : func:r2261_3, this:r2261_1 -# 2261| m2261_5(unknown) = ^CallSideEffect : ~m2259_4 -# 2261| m2261_6(unknown) = Chi : total:m2259_4, partial:m2261_5 -# 2261| m2261_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2261_1 -# 2261| m2261_8(String) = Chi : total:m2261_2, partial:m2261_7 -# 2262| r2262_1(glval) = VariableAddress[b] : -# 2262| r2262_2(bool) = Load[b] : &:r2262_1, m2259_6 -# 2262| v2262_3(void) = ConditionalBranch : r2262_2 +# 2273| void TryCatchDestructors(bool) +# 2273| Block 0 +# 2273| v2273_1(void) = EnterFunction : +# 2273| m2273_2(unknown) = AliasedDefinition : +# 2273| m2273_3(unknown) = InitializeNonLocal : +# 2273| m2273_4(unknown) = Chi : total:m2273_2, partial:m2273_3 +# 2273| r2273_5(glval) = VariableAddress[b] : +# 2273| m2273_6(bool) = InitializeParameter[b] : &:r2273_5 +# 2275| r2275_1(glval) = VariableAddress[s] : +# 2275| m2275_2(String) = Uninitialized[s] : &:r2275_1 +# 2275| r2275_3(glval) = FunctionAddress[String] : +# 2275| v2275_4(void) = Call[String] : func:r2275_3, this:r2275_1 +# 2275| m2275_5(unknown) = ^CallSideEffect : ~m2273_4 +# 2275| m2275_6(unknown) = Chi : total:m2273_4, partial:m2275_5 +# 2275| m2275_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2275_1 +# 2275| m2275_8(String) = Chi : total:m2275_2, partial:m2275_7 +# 2276| r2276_1(glval) = VariableAddress[b] : +# 2276| r2276_2(bool) = Load[b] : &:r2276_1, m2273_6 +# 2276| v2276_3(void) = ConditionalBranch : r2276_2 #-----| False -> Block 4 #-----| True -> Block 3 -# 2259| Block 1 -# 2259| m2259_7(unknown) = Phi : from 2:~m2259_10, from 10:~m2275_1 -# 2259| v2259_8(void) = AliasedUse : ~m2259_7 -# 2259| v2259_9(void) = ExitFunction : +# 2273| Block 1 +# 2273| m2273_7(unknown) = Phi : from 2:~m2273_10, from 10:~m2289_1 +# 2273| v2273_8(void) = AliasedUse : ~m2273_7 +# 2273| v2273_9(void) = ExitFunction : -# 2259| Block 2 -# 2259| m2259_10(unknown) = Phi : from 6:~m2268_8, from 9:~m2261_6 -# 2259| v2259_11(void) = Unwind : +# 2273| Block 2 +# 2273| m2273_10(unknown) = Phi : from 6:~m2282_8, from 9:~m2275_6 +# 2273| v2273_11(void) = Unwind : #-----| Goto -> Block 1 -# 2263| Block 3 -# 2263| r2263_1(glval) = VariableAddress[#throw2263:7] : -# 2263| r2263_2(glval) = StringConstant["string literal"] : -# 2263| r2263_3(char *) = Convert : r2263_2 -# 2263| m2263_4(char *) = Store[#throw2263:7] : &:r2263_1, r2263_3 -# 2263| v2263_5(void) = ThrowValue : &:r2263_1, m2263_4 +# 2277| Block 3 +# 2277| r2277_1(glval) = VariableAddress[#throw2277:7] : +# 2277| r2277_2(glval) = StringConstant["string literal"] : +# 2277| r2277_3(char *) = Convert : r2277_2 +# 2277| m2277_4(char *) = Store[#throw2277:7] : &:r2277_1, r2277_3 +# 2277| v2277_5(void) = ThrowValue : &:r2277_1, m2277_4 #-----| Exception -> Block 5 -# 2265| Block 4 -# 2265| r2265_1(glval) = VariableAddress[s2] : -# 2265| m2265_2(String) = Uninitialized[s2] : &:r2265_1 -# 2265| r2265_3(glval) = FunctionAddress[String] : -# 2265| v2265_4(void) = Call[String] : func:r2265_3, this:r2265_1 -# 2265| m2265_5(unknown) = ^CallSideEffect : ~m2261_6 -# 2265| m2265_6(unknown) = Chi : total:m2261_6, partial:m2265_5 -# 2265| m2265_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2265_1 -# 2265| m2265_8(String) = Chi : total:m2265_2, partial:m2265_7 -# 2266| r2266_1(glval) = VariableAddress[s2] : -# 2266| r2266_2(glval) = FunctionAddress[~String] : -# 2266| v2266_3(void) = Call[~String] : func:r2266_2, this:r2266_1 -# 2266| m2266_4(unknown) = ^CallSideEffect : ~m2265_6 -# 2266| m2266_5(unknown) = Chi : total:m2265_6, partial:m2266_4 -# 2266| v2266_6(void) = ^IndirectReadSideEffect[-1] : &:r2266_1, m2265_8 -# 2266| m2266_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2266_1 -# 2266| m2266_8(String) = Chi : total:m2265_8, partial:m2266_7 -# 2266| r2266_9(glval) = VariableAddress[s] : -# 2266| r2266_10(glval) = FunctionAddress[~String] : -# 2266| v2266_11(void) = Call[~String] : func:r2266_10, this:r2266_9 -# 2266| m2266_12(unknown) = ^CallSideEffect : ~m2266_5 -# 2266| m2266_13(unknown) = Chi : total:m2266_5, partial:m2266_12 -# 2266| v2266_14(void) = ^IndirectReadSideEffect[-1] : &:r2266_9, m2261_8 -# 2266| m2266_15(String) = ^IndirectMayWriteSideEffect[-1] : &:r2266_9 -# 2266| m2266_16(String) = Chi : total:m2261_8, partial:m2266_15 +# 2279| Block 4 +# 2279| r2279_1(glval) = VariableAddress[s2] : +# 2279| m2279_2(String) = Uninitialized[s2] : &:r2279_1 +# 2279| r2279_3(glval) = FunctionAddress[String] : +# 2279| v2279_4(void) = Call[String] : func:r2279_3, this:r2279_1 +# 2279| m2279_5(unknown) = ^CallSideEffect : ~m2275_6 +# 2279| m2279_6(unknown) = Chi : total:m2275_6, partial:m2279_5 +# 2279| m2279_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2279_1 +# 2279| m2279_8(String) = Chi : total:m2279_2, partial:m2279_7 +# 2280| r2280_1(glval) = VariableAddress[s2] : +# 2280| r2280_2(glval) = FunctionAddress[~String] : +# 2280| v2280_3(void) = Call[~String] : func:r2280_2, this:r2280_1 +# 2280| m2280_4(unknown) = ^CallSideEffect : ~m2279_6 +# 2280| m2280_5(unknown) = Chi : total:m2279_6, partial:m2280_4 +# 2280| v2280_6(void) = ^IndirectReadSideEffect[-1] : &:r2280_1, m2279_8 +# 2280| m2280_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2280_1 +# 2280| m2280_8(String) = Chi : total:m2279_8, partial:m2280_7 +# 2280| r2280_9(glval) = VariableAddress[s] : +# 2280| r2280_10(glval) = FunctionAddress[~String] : +# 2280| v2280_11(void) = Call[~String] : func:r2280_10, this:r2280_9 +# 2280| m2280_12(unknown) = ^CallSideEffect : ~m2280_5 +# 2280| m2280_13(unknown) = Chi : total:m2280_5, partial:m2280_12 +# 2280| v2280_14(void) = ^IndirectReadSideEffect[-1] : &:r2280_9, m2275_8 +# 2280| m2280_15(String) = ^IndirectMayWriteSideEffect[-1] : &:r2280_9 +# 2280| m2280_16(String) = Chi : total:m2275_8, partial:m2280_15 #-----| Goto -> Block 10 -# 2267| Block 5 -# 2267| v2267_1(void) = CatchByType[const char *] : +# 2281| Block 5 +# 2281| v2281_1(void) = CatchByType[const char *] : #-----| Exception -> Block 7 #-----| Goto -> Block 6 -# 2267| Block 6 -# 2267| r2267_2(glval) = VariableAddress[s] : -# 2267| m2267_3(char *) = InitializeParameter[s] : &:r2267_2 -# 2267| r2267_4(char *) = Load[s] : &:r2267_2, m2267_3 -# 2267| m2267_5(unknown) = InitializeIndirection[s] : &:r2267_4 -# 2268| r2268_1(glval) = VariableAddress[#throw2268:5] : -# 2268| m2268_2(String) = Uninitialized[#throw2268:5] : &:r2268_1 -# 2268| r2268_3(glval) = FunctionAddress[String] : -# 2268| r2268_4(glval) = VariableAddress[s] : -# 2268| r2268_5(char *) = Load[s] : &:r2268_4, m2267_3 -# 2268| v2268_6(void) = Call[String] : func:r2268_3, this:r2268_1, 0:r2268_5 -# 2268| m2268_7(unknown) = ^CallSideEffect : ~m2261_6 -# 2268| m2268_8(unknown) = Chi : total:m2261_6, partial:m2268_7 -# 2268| v2268_9(void) = ^BufferReadSideEffect[0] : &:r2268_5, ~m2267_5 -# 2268| m2268_10(String) = ^IndirectMayWriteSideEffect[-1] : &:r2268_1 -# 2268| m2268_11(String) = Chi : total:m2268_2, partial:m2268_10 -# 2268| v2268_12(void) = ThrowValue : &:r2268_1, m2268_11 +# 2281| Block 6 +# 2281| r2281_2(glval) = VariableAddress[s] : +# 2281| m2281_3(char *) = InitializeParameter[s] : &:r2281_2 +# 2281| r2281_4(char *) = Load[s] : &:r2281_2, m2281_3 +# 2281| m2281_5(unknown) = InitializeIndirection[s] : &:r2281_4 +# 2282| r2282_1(glval) = VariableAddress[#throw2282:5] : +# 2282| m2282_2(String) = Uninitialized[#throw2282:5] : &:r2282_1 +# 2282| r2282_3(glval) = FunctionAddress[String] : +# 2282| r2282_4(glval) = VariableAddress[s] : +# 2282| r2282_5(char *) = Load[s] : &:r2282_4, m2281_3 +# 2282| v2282_6(void) = Call[String] : func:r2282_3, this:r2282_1, 0:r2282_5 +# 2282| m2282_7(unknown) = ^CallSideEffect : ~m2275_6 +# 2282| m2282_8(unknown) = Chi : total:m2275_6, partial:m2282_7 +# 2282| v2282_9(void) = ^BufferReadSideEffect[0] : &:r2282_5, ~m2281_5 +# 2282| m2282_10(String) = ^IndirectMayWriteSideEffect[-1] : &:r2282_1 +# 2282| m2282_11(String) = Chi : total:m2282_2, partial:m2282_10 +# 2282| v2282_12(void) = ThrowValue : &:r2282_1, m2282_11 #-----| Exception -> Block 2 -# 2270| Block 7 -# 2270| v2270_1(void) = CatchByType[const String &] : +# 2284| Block 7 +# 2284| v2284_1(void) = CatchByType[const String &] : #-----| Exception -> Block 9 #-----| Goto -> Block 8 -# 2270| Block 8 -# 2270| r2270_2(glval) = VariableAddress[e] : -# 2270| m2270_3(String &) = InitializeParameter[e] : &:r2270_2 -# 2270| r2270_4(String &) = Load[e] : &:r2270_2, m2270_3 -# 2270| m2270_5(unknown) = InitializeIndirection[e] : &:r2270_4 -# 2270| v2270_6(void) = NoOp : +# 2284| Block 8 +# 2284| r2284_2(glval) = VariableAddress[e] : +# 2284| m2284_3(String &) = InitializeParameter[e] : &:r2284_2 +# 2284| r2284_4(String &) = Load[e] : &:r2284_2, m2284_3 +# 2284| m2284_5(unknown) = InitializeIndirection[e] : &:r2284_4 +# 2284| v2284_6(void) = NoOp : #-----| Goto -> Block 10 -# 2272| Block 9 -# 2272| v2272_1(void) = CatchAny : -# 2273| v2273_1(void) = ReThrow : +# 2286| Block 9 +# 2286| v2286_1(void) = CatchAny : +# 2287| v2287_1(void) = ReThrow : #-----| Exception -> Block 2 -# 2275| Block 10 -# 2275| m2275_1(unknown) = Phi : from 4:~m2266_13, from 8:~m2261_6 -# 2275| v2275_2(void) = NoOp : -# 2259| v2259_12(void) = ReturnVoid : +# 2289| Block 10 +# 2289| m2289_1(unknown) = Phi : from 4:~m2280_13, from 8:~m2275_6 +# 2289| v2289_2(void) = NoOp : +# 2273| v2273_12(void) = ReturnVoid : #-----| Goto -> Block 1 -# 2277| void IfDestructors(bool) -# 2277| Block 0 -# 2277| v2277_1(void) = EnterFunction : -# 2277| m2277_2(unknown) = AliasedDefinition : -# 2277| m2277_3(unknown) = InitializeNonLocal : -# 2277| m2277_4(unknown) = Chi : total:m2277_2, partial:m2277_3 -# 2277| r2277_5(glval) = VariableAddress[b] : -# 2277| m2277_6(bool) = InitializeParameter[b] : &:r2277_5 -# 2278| r2278_1(glval) = VariableAddress[s1] : -# 2278| m2278_2(String) = Uninitialized[s1] : &:r2278_1 -# 2278| r2278_3(glval) = FunctionAddress[String] : -# 2278| v2278_4(void) = Call[String] : func:r2278_3, this:r2278_1 -# 2278| m2278_5(unknown) = ^CallSideEffect : ~m2277_4 -# 2278| m2278_6(unknown) = Chi : total:m2277_4, partial:m2278_5 -# 2278| m2278_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2278_1 -# 2278| m2278_8(String) = Chi : total:m2278_2, partial:m2278_7 -# 2279| r2279_1(glval) = VariableAddress[b] : -# 2279| r2279_2(bool) = Load[b] : &:r2279_1, m2277_6 -# 2279| v2279_3(void) = ConditionalBranch : r2279_2 +# 2291| void IfDestructors(bool) +# 2291| Block 0 +# 2291| v2291_1(void) = EnterFunction : +# 2291| m2291_2(unknown) = AliasedDefinition : +# 2291| m2291_3(unknown) = InitializeNonLocal : +# 2291| m2291_4(unknown) = Chi : total:m2291_2, partial:m2291_3 +# 2291| r2291_5(glval) = VariableAddress[b] : +# 2291| m2291_6(bool) = InitializeParameter[b] : &:r2291_5 +# 2292| r2292_1(glval) = VariableAddress[s1] : +# 2292| m2292_2(String) = Uninitialized[s1] : &:r2292_1 +# 2292| r2292_3(glval) = FunctionAddress[String] : +# 2292| v2292_4(void) = Call[String] : func:r2292_3, this:r2292_1 +# 2292| m2292_5(unknown) = ^CallSideEffect : ~m2291_4 +# 2292| m2292_6(unknown) = Chi : total:m2291_4, partial:m2292_5 +# 2292| m2292_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2292_1 +# 2292| m2292_8(String) = Chi : total:m2292_2, partial:m2292_7 +# 2293| r2293_1(glval) = VariableAddress[b] : +# 2293| r2293_2(bool) = Load[b] : &:r2293_1, m2291_6 +# 2293| v2293_3(void) = ConditionalBranch : r2293_2 #-----| False -> Block 2 #-----| True -> Block 1 -# 2280| Block 1 -# 2280| r2280_1(glval) = VariableAddress[s2] : -# 2280| m2280_2(String) = Uninitialized[s2] : &:r2280_1 -# 2280| r2280_3(glval) = FunctionAddress[String] : -# 2280| v2280_4(void) = Call[String] : func:r2280_3, this:r2280_1 -# 2280| m2280_5(unknown) = ^CallSideEffect : ~m2278_6 -# 2280| m2280_6(unknown) = Chi : total:m2278_6, partial:m2280_5 -# 2280| m2280_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2280_1 -# 2280| m2280_8(String) = Chi : total:m2280_2, partial:m2280_7 -# 2281| r2281_1(glval) = VariableAddress[s2] : -# 2281| r2281_2(glval) = FunctionAddress[~String] : -# 2281| v2281_3(void) = Call[~String] : func:r2281_2, this:r2281_1 -# 2281| m2281_4(unknown) = ^CallSideEffect : ~m2280_6 -# 2281| m2281_5(unknown) = Chi : total:m2280_6, partial:m2281_4 -# 2281| v2281_6(void) = ^IndirectReadSideEffect[-1] : &:r2281_1, m2280_8 -# 2281| m2281_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2281_1 -# 2281| m2281_8(String) = Chi : total:m2280_8, partial:m2281_7 +# 2294| Block 1 +# 2294| r2294_1(glval) = VariableAddress[s2] : +# 2294| m2294_2(String) = Uninitialized[s2] : &:r2294_1 +# 2294| r2294_3(glval) = FunctionAddress[String] : +# 2294| v2294_4(void) = Call[String] : func:r2294_3, this:r2294_1 +# 2294| m2294_5(unknown) = ^CallSideEffect : ~m2292_6 +# 2294| m2294_6(unknown) = Chi : total:m2292_6, partial:m2294_5 +# 2294| m2294_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2294_1 +# 2294| m2294_8(String) = Chi : total:m2294_2, partial:m2294_7 +# 2295| r2295_1(glval) = VariableAddress[s2] : +# 2295| r2295_2(glval) = FunctionAddress[~String] : +# 2295| v2295_3(void) = Call[~String] : func:r2295_2, this:r2295_1 +# 2295| m2295_4(unknown) = ^CallSideEffect : ~m2294_6 +# 2295| m2295_5(unknown) = Chi : total:m2294_6, partial:m2295_4 +# 2295| v2295_6(void) = ^IndirectReadSideEffect[-1] : &:r2295_1, m2294_8 +# 2295| m2295_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2295_1 +# 2295| m2295_8(String) = Chi : total:m2294_8, partial:m2295_7 #-----| Goto -> Block 3 -# 2282| Block 2 -# 2282| r2282_1(glval) = VariableAddress[s3] : -# 2282| m2282_2(String) = Uninitialized[s3] : &:r2282_1 -# 2282| r2282_3(glval) = FunctionAddress[String] : -# 2282| v2282_4(void) = Call[String] : func:r2282_3, this:r2282_1 -# 2282| m2282_5(unknown) = ^CallSideEffect : ~m2278_6 -# 2282| m2282_6(unknown) = Chi : total:m2278_6, partial:m2282_5 -# 2282| m2282_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2282_1 -# 2282| m2282_8(String) = Chi : total:m2282_2, partial:m2282_7 -# 2283| r2283_1(glval) = VariableAddress[s3] : -# 2283| r2283_2(glval) = FunctionAddress[~String] : -# 2283| v2283_3(void) = Call[~String] : func:r2283_2, this:r2283_1 -# 2283| m2283_4(unknown) = ^CallSideEffect : ~m2282_6 -# 2283| m2283_5(unknown) = Chi : total:m2282_6, partial:m2283_4 -# 2283| v2283_6(void) = ^IndirectReadSideEffect[-1] : &:r2283_1, m2282_8 -# 2283| m2283_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2283_1 -# 2283| m2283_8(String) = Chi : total:m2282_8, partial:m2283_7 +# 2296| Block 2 +# 2296| r2296_1(glval) = VariableAddress[s3] : +# 2296| m2296_2(String) = Uninitialized[s3] : &:r2296_1 +# 2296| r2296_3(glval) = FunctionAddress[String] : +# 2296| v2296_4(void) = Call[String] : func:r2296_3, this:r2296_1 +# 2296| m2296_5(unknown) = ^CallSideEffect : ~m2292_6 +# 2296| m2296_6(unknown) = Chi : total:m2292_6, partial:m2296_5 +# 2296| m2296_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2296_1 +# 2296| m2296_8(String) = Chi : total:m2296_2, partial:m2296_7 +# 2297| r2297_1(glval) = VariableAddress[s3] : +# 2297| r2297_2(glval) = FunctionAddress[~String] : +# 2297| v2297_3(void) = Call[~String] : func:r2297_2, this:r2297_1 +# 2297| m2297_4(unknown) = ^CallSideEffect : ~m2296_6 +# 2297| m2297_5(unknown) = Chi : total:m2296_6, partial:m2297_4 +# 2297| v2297_6(void) = ^IndirectReadSideEffect[-1] : &:r2297_1, m2296_8 +# 2297| m2297_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2297_1 +# 2297| m2297_8(String) = Chi : total:m2296_8, partial:m2297_7 #-----| Goto -> Block 3 -# 2284| Block 3 -# 2284| m2284_1(unknown) = Phi : from 1:~m2281_5, from 2:~m2283_5 -# 2284| r2284_2(glval) = VariableAddress[s4] : -# 2284| m2284_3(String) = Uninitialized[s4] : &:r2284_2 -# 2284| r2284_4(glval) = FunctionAddress[String] : -# 2284| v2284_5(void) = Call[String] : func:r2284_4, this:r2284_2 -# 2284| m2284_6(unknown) = ^CallSideEffect : ~m2284_1 -# 2284| m2284_7(unknown) = Chi : total:m2284_1, partial:m2284_6 -# 2284| m2284_8(String) = ^IndirectMayWriteSideEffect[-1] : &:r2284_2 -# 2284| m2284_9(String) = Chi : total:m2284_3, partial:m2284_8 -# 2285| v2285_1(void) = NoOp : -# 2285| r2285_2(glval) = VariableAddress[s4] : -# 2285| r2285_3(glval) = FunctionAddress[~String] : -# 2285| v2285_4(void) = Call[~String] : func:r2285_3, this:r2285_2 -# 2285| m2285_5(unknown) = ^CallSideEffect : ~m2284_7 -# 2285| m2285_6(unknown) = Chi : total:m2284_7, partial:m2285_5 -# 2285| v2285_7(void) = ^IndirectReadSideEffect[-1] : &:r2285_2, m2284_9 -# 2285| m2285_8(String) = ^IndirectMayWriteSideEffect[-1] : &:r2285_2 -# 2285| m2285_9(String) = Chi : total:m2284_9, partial:m2285_8 -# 2285| r2285_10(glval) = VariableAddress[s1] : -# 2285| r2285_11(glval) = FunctionAddress[~String] : -# 2285| v2285_12(void) = Call[~String] : func:r2285_11, this:r2285_10 -# 2285| m2285_13(unknown) = ^CallSideEffect : ~m2285_6 -# 2285| m2285_14(unknown) = Chi : total:m2285_6, partial:m2285_13 -# 2285| v2285_15(void) = ^IndirectReadSideEffect[-1] : &:r2285_10, m2278_8 -# 2285| m2285_16(String) = ^IndirectMayWriteSideEffect[-1] : &:r2285_10 -# 2285| m2285_17(String) = Chi : total:m2278_8, partial:m2285_16 -# 2277| v2277_7(void) = ReturnVoid : -# 2277| v2277_8(void) = AliasedUse : ~m2285_14 -# 2277| v2277_9(void) = ExitFunction : +# 2298| Block 3 +# 2298| m2298_1(unknown) = Phi : from 1:~m2295_5, from 2:~m2297_5 +# 2298| r2298_2(glval) = VariableAddress[s4] : +# 2298| m2298_3(String) = Uninitialized[s4] : &:r2298_2 +# 2298| r2298_4(glval) = FunctionAddress[String] : +# 2298| v2298_5(void) = Call[String] : func:r2298_4, this:r2298_2 +# 2298| m2298_6(unknown) = ^CallSideEffect : ~m2298_1 +# 2298| m2298_7(unknown) = Chi : total:m2298_1, partial:m2298_6 +# 2298| m2298_8(String) = ^IndirectMayWriteSideEffect[-1] : &:r2298_2 +# 2298| m2298_9(String) = Chi : total:m2298_3, partial:m2298_8 +# 2299| v2299_1(void) = NoOp : +# 2299| r2299_2(glval) = VariableAddress[s4] : +# 2299| r2299_3(glval) = FunctionAddress[~String] : +# 2299| v2299_4(void) = Call[~String] : func:r2299_3, this:r2299_2 +# 2299| m2299_5(unknown) = ^CallSideEffect : ~m2298_7 +# 2299| m2299_6(unknown) = Chi : total:m2298_7, partial:m2299_5 +# 2299| v2299_7(void) = ^IndirectReadSideEffect[-1] : &:r2299_2, m2298_9 +# 2299| m2299_8(String) = ^IndirectMayWriteSideEffect[-1] : &:r2299_2 +# 2299| m2299_9(String) = Chi : total:m2298_9, partial:m2299_8 +# 2299| r2299_10(glval) = VariableAddress[s1] : +# 2299| r2299_11(glval) = FunctionAddress[~String] : +# 2299| v2299_12(void) = Call[~String] : func:r2299_11, this:r2299_10 +# 2299| m2299_13(unknown) = ^CallSideEffect : ~m2299_6 +# 2299| m2299_14(unknown) = Chi : total:m2299_6, partial:m2299_13 +# 2299| v2299_15(void) = ^IndirectReadSideEffect[-1] : &:r2299_10, m2292_8 +# 2299| m2299_16(String) = ^IndirectMayWriteSideEffect[-1] : &:r2299_10 +# 2299| m2299_17(String) = Chi : total:m2292_8, partial:m2299_16 +# 2291| v2291_7(void) = ReturnVoid : +# 2291| v2291_8(void) = AliasedUse : ~m2299_14 +# 2291| v2291_9(void) = ExitFunction : -# 2287| void ForDestructors() -# 2287| Block 0 -# 2287| v2287_1(void) = EnterFunction : -# 2287| m2287_2(unknown) = AliasedDefinition : -# 2287| m2287_3(unknown) = InitializeNonLocal : -# 2287| m2287_4(unknown) = Chi : total:m2287_2, partial:m2287_3 -# 2288| r2288_1(glval) = VariableAddress[c] : -# 2288| r2288_2(char) = Constant[97] : -# 2288| m2288_3(char) = Store[c] : &:r2288_1, r2288_2 -# 2289| r2289_1(glval) = VariableAddress[s] : -# 2289| m2289_2(String) = Uninitialized[s] : &:r2289_1 -# 2289| r2289_3(glval) = FunctionAddress[String] : -# 2289| r2289_4(glval) = StringConstant["hello"] : -# 2289| r2289_5(char *) = Convert : r2289_4 -# 2289| v2289_6(void) = Call[String] : func:r2289_3, this:r2289_1, 0:r2289_5 -# 2289| m2289_7(unknown) = ^CallSideEffect : ~m2287_4 -# 2289| m2289_8(unknown) = Chi : total:m2287_4, partial:m2289_7 -# 2289| v2289_9(void) = ^BufferReadSideEffect[0] : &:r2289_5, ~m2287_3 -# 2289| m2289_10(String) = ^IndirectMayWriteSideEffect[-1] : &:r2289_1 -# 2289| m2289_11(String) = Chi : total:m2289_2, partial:m2289_10 -#-----| Goto -> Block 1 - -# 2289| Block 1 -# 2289| m2289_12(String) = Phi : from 0:m2289_11, from 2:m2289_28 -# 2289| m2289_13(unknown) = Phi : from 0:~m2289_8, from 2:~m2289_25 -# 2289| m2289_14(char) = Phi : from 0:m2288_3, from 2:m2289_30 -# 2289| r2289_15(glval) = VariableAddress[c] : -# 2289| r2289_16(char) = Load[c] : &:r2289_15, m2289_14 -# 2289| r2289_17(int) = Convert : r2289_16 -# 2289| r2289_18(int) = Constant[0] : -# 2289| r2289_19(bool) = CompareNE : r2289_17, r2289_18 -# 2289| v2289_20(void) = ConditionalBranch : r2289_19 -#-----| False -> Block 3 -#-----| True -> Block 2 - -# 2290| Block 2 -# 2290| r2290_1(glval) = VariableAddress[s2] : -# 2290| m2290_2(String) = Uninitialized[s2] : &:r2290_1 -# 2290| r2290_3(glval) = FunctionAddress[String] : -# 2290| v2290_4(void) = Call[String] : func:r2290_3, this:r2290_1 -# 2290| m2290_5(unknown) = ^CallSideEffect : ~m2289_13 -# 2290| m2290_6(unknown) = Chi : total:m2289_13, partial:m2290_5 -# 2290| m2290_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2290_1 -# 2290| m2290_8(String) = Chi : total:m2290_2, partial:m2290_7 -# 2291| r2291_1(glval) = VariableAddress[s2] : -# 2291| r2291_2(glval) = FunctionAddress[~String] : -# 2291| v2291_3(void) = Call[~String] : func:r2291_2, this:r2291_1 -# 2291| m2291_4(unknown) = ^CallSideEffect : ~m2290_6 -# 2291| m2291_5(unknown) = Chi : total:m2290_6, partial:m2291_4 -# 2291| v2291_6(void) = ^IndirectReadSideEffect[-1] : &:r2291_1, m2290_8 -# 2291| m2291_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2291_1 -# 2291| m2291_8(String) = Chi : total:m2290_8, partial:m2291_7 -# 2289| r2289_21(glval) = VariableAddress[s] : -# 2289| r2289_22(glval) = FunctionAddress[pop_back] : -# 2289| r2289_23(char) = Call[pop_back] : func:r2289_22, this:r2289_21 -# 2289| m2289_24(unknown) = ^CallSideEffect : ~m2291_5 -# 2289| m2289_25(unknown) = Chi : total:m2291_5, partial:m2289_24 -# 2289| v2289_26(void) = ^IndirectReadSideEffect[-1] : &:r2289_21, m2289_12 -# 2289| m2289_27(String) = ^IndirectMayWriteSideEffect[-1] : &:r2289_21 -# 2289| m2289_28(String) = Chi : total:m2289_12, partial:m2289_27 -# 2289| r2289_29(glval) = VariableAddress[c] : -# 2289| m2289_30(char) = Store[c] : &:r2289_29, r2289_23 -#-----| Goto (back edge) -> Block 1 - -# 2289| Block 3 -# 2289| r2289_31(glval) = VariableAddress[s] : -# 2289| r2289_32(glval) = FunctionAddress[~String] : -# 2289| v2289_33(void) = Call[~String] : func:r2289_32, this:r2289_31 -# 2289| m2289_34(unknown) = ^CallSideEffect : ~m2289_13 -# 2289| m2289_35(unknown) = Chi : total:m2289_13, partial:m2289_34 -# 2289| v2289_36(void) = ^IndirectReadSideEffect[-1] : &:r2289_31, m2289_12 -# 2289| m2289_37(String) = ^IndirectMayWriteSideEffect[-1] : &:r2289_31 -# 2289| m2289_38(String) = Chi : total:m2289_12, partial:m2289_37 -# 2293| r2293_1(glval &&>) = VariableAddress[(__range)] : -# 2293| r2293_2(glval>) = VariableAddress[#temp2293:20] : -# 2293| m2293_3(vector) = Uninitialized[#temp2293:20] : &:r2293_2 -# 2293| r2293_4(glval) = FunctionAddress[vector] : -# 2293| r2293_5(glval) = VariableAddress[#temp2293:40] : -# 2293| m2293_6(String) = Uninitialized[#temp2293:40] : &:r2293_5 -# 2293| r2293_7(glval) = FunctionAddress[String] : -# 2293| r2293_8(glval) = StringConstant["hello"] : -# 2293| r2293_9(char *) = Convert : r2293_8 -# 2293| v2293_10(void) = Call[String] : func:r2293_7, this:r2293_5, 0:r2293_9 -# 2293| m2293_11(unknown) = ^CallSideEffect : ~m2289_35 -# 2293| m2293_12(unknown) = Chi : total:m2289_35, partial:m2293_11 -# 2293| v2293_13(void) = ^BufferReadSideEffect[0] : &:r2293_9, ~m2287_3 -# 2293| m2293_14(String) = ^IndirectMayWriteSideEffect[-1] : &:r2293_5 -# 2293| m2293_15(String) = Chi : total:m2293_6, partial:m2293_14 -# 2293| r2293_16(String) = Load[#temp2293:40] : &:r2293_5, m2293_15 -# 2293| v2293_17(void) = Call[vector] : func:r2293_4, this:r2293_2, 0:r2293_16 -# 2293| m2293_18(unknown) = ^CallSideEffect : ~m2293_12 -# 2293| m2293_19(unknown) = Chi : total:m2293_12, partial:m2293_18 -# 2293| m2293_20(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2293_2 -# 2293| m2293_21(vector) = Chi : total:m2293_3, partial:m2293_20 -# 2293| r2293_22(vector &) = CopyValue : r2293_2 -# 2293| m2293_23(vector &&) = Store[(__range)] : &:r2293_1, r2293_22 -# 2293| r2293_24(glval>) = VariableAddress[(__begin)] : -# 2293| r2293_25(glval &&>) = VariableAddress[(__range)] : -# 2293| r2293_26(vector &&) = Load[(__range)] : &:r2293_25, m2293_23 -#-----| r0_1(glval>) = CopyValue : r2293_26 -#-----| r0_2(glval>) = Convert : r0_1 -# 2293| r2293_27(glval) = FunctionAddress[begin] : -# 2293| r2293_28(iterator) = Call[begin] : func:r2293_27, this:r0_2 -#-----| v0_3(void) = ^IndirectReadSideEffect[-1] : &:r0_2, m2293_21 -# 2293| m2293_29(iterator) = Store[(__begin)] : &:r2293_24, r2293_28 -# 2293| r2293_30(glval>) = VariableAddress[(__end)] : -# 2293| r2293_31(glval &&>) = VariableAddress[(__range)] : -# 2293| r2293_32(vector &&) = Load[(__range)] : &:r2293_31, m2293_23 -#-----| r0_4(glval>) = CopyValue : r2293_32 -#-----| r0_5(glval>) = Convert : r0_4 -# 2293| r2293_33(glval) = FunctionAddress[end] : -# 2293| r2293_34(iterator) = Call[end] : func:r2293_33, this:r0_5 -#-----| v0_6(void) = ^IndirectReadSideEffect[-1] : &:r0_5, m2293_21 -# 2293| m2293_35(iterator) = Store[(__end)] : &:r2293_30, r2293_34 -#-----| Goto -> Block 4 - -# 2293| Block 4 -# 2293| m2293_36(iterator) = Phi : from 3:m2293_29, from 5:m2293_83 -# 2293| m2293_37(unknown) = Phi : from 3:~m2293_19, from 5:~m2293_80 -# 2293| r2293_38(glval>) = VariableAddress[(__begin)] : -#-----| r0_7(glval>) = Convert : r2293_38 -# 2293| r2293_39(glval) = FunctionAddress[operator!=] : -#-----| r0_8(glval>) = VariableAddress[#temp0:0] : -#-----| m0_9(iterator) = Uninitialized[#temp0:0] : &:r0_8 -# 2293| r2293_40(glval) = FunctionAddress[iterator] : -# 2293| r2293_41(glval>) = VariableAddress[(__end)] : -#-----| r0_10(glval>) = Convert : r2293_41 -#-----| r0_11(iterator &) = CopyValue : r0_10 -# 2293| v2293_42(void) = Call[iterator] : func:r2293_40, this:r0_8, 0:r0_11 -# 2293| m2293_43(unknown) = ^CallSideEffect : ~m2293_37 -# 2293| m2293_44(unknown) = Chi : total:m2293_37, partial:m2293_43 -#-----| v0_12(void) = ^BufferReadSideEffect[0] : &:r0_11, ~m2293_35 -# 2293| m2293_45(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r0_8 -# 2293| m2293_46(iterator) = Chi : total:m0_9, partial:m2293_45 -#-----| r0_13(iterator) = Load[#temp0:0] : &:r0_8, m2293_46 -# 2293| r2293_47(bool) = Call[operator!=] : func:r2293_39, this:r0_7, 0:r0_13 -# 2293| m2293_48(unknown) = ^CallSideEffect : ~m2293_44 -# 2293| m2293_49(unknown) = Chi : total:m2293_44, partial:m2293_48 -#-----| v0_14(void) = ^IndirectReadSideEffect[-1] : &:r0_7, m2293_36 -# 2293| v2293_50(void) = ConditionalBranch : r2293_47 -#-----| False -> Block 6 -#-----| True -> Block 5 - -# 2293| Block 5 -# 2293| r2293_51(glval) = VariableAddress[s] : -# 2293| m2293_52(String) = Uninitialized[s] : &:r2293_51 -# 2293| r2293_53(glval) = FunctionAddress[String] : -# 2293| r2293_54(glval>) = VariableAddress[(__begin)] : -#-----| r0_15(glval>) = Convert : r2293_54 -# 2293| r2293_55(glval) = FunctionAddress[operator*] : -# 2293| r2293_56(String &) = Call[operator*] : func:r2293_55, this:r0_15 -# 2293| m2293_57(unknown) = ^CallSideEffect : ~m2293_49 -# 2293| m2293_58(unknown) = Chi : total:m2293_49, partial:m2293_57 -#-----| v0_16(void) = ^IndirectReadSideEffect[-1] : &:r0_15, m2293_36 -# 2293| r2293_59(glval) = CopyValue : r2293_56 -# 2293| r2293_60(glval) = Convert : r2293_59 -# 2293| r2293_61(String &) = CopyValue : r2293_60 -# 2293| v2293_62(void) = Call[String] : func:r2293_53, this:r2293_51, 0:r2293_61 -# 2293| m2293_63(unknown) = ^CallSideEffect : ~m2293_58 -# 2293| m2293_64(unknown) = Chi : total:m2293_58, partial:m2293_63 -# 2293| v2293_65(void) = ^BufferReadSideEffect[0] : &:r2293_61, ~m2293_64 -# 2293| m2293_66(String) = ^IndirectMayWriteSideEffect[-1] : &:r2293_51 -# 2293| m2293_67(String) = Chi : total:m2293_52, partial:m2293_66 -# 2294| r2294_1(glval) = VariableAddress[s2] : -# 2294| m2294_2(String) = Uninitialized[s2] : &:r2294_1 -# 2294| r2294_3(glval) = FunctionAddress[String] : -# 2294| v2294_4(void) = Call[String] : func:r2294_3, this:r2294_1 -# 2294| m2294_5(unknown) = ^CallSideEffect : ~m2293_64 -# 2294| m2294_6(unknown) = Chi : total:m2293_64, partial:m2294_5 -# 2294| m2294_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2294_1 -# 2294| m2294_8(String) = Chi : total:m2294_2, partial:m2294_7 -# 2295| r2295_1(glval) = VariableAddress[s2] : -# 2295| r2295_2(glval) = FunctionAddress[~String] : -# 2295| v2295_3(void) = Call[~String] : func:r2295_2, this:r2295_1 -# 2295| m2295_4(unknown) = ^CallSideEffect : ~m2294_6 -# 2295| m2295_5(unknown) = Chi : total:m2294_6, partial:m2295_4 -# 2295| v2295_6(void) = ^IndirectReadSideEffect[-1] : &:r2295_1, m2294_8 -# 2295| m2295_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2295_1 -# 2295| m2295_8(String) = Chi : total:m2294_8, partial:m2295_7 -# 2293| r2293_68(glval) = VariableAddress[s] : -# 2293| r2293_69(glval) = FunctionAddress[~String] : -# 2293| v2293_70(void) = Call[~String] : func:r2293_69, this:r2293_68 -# 2293| m2293_71(unknown) = ^CallSideEffect : ~m2295_5 -# 2293| m2293_72(unknown) = Chi : total:m2295_5, partial:m2293_71 -# 2293| v2293_73(void) = ^IndirectReadSideEffect[-1] : &:r2293_68, m2293_67 -# 2293| m2293_74(String) = ^IndirectMayWriteSideEffect[-1] : &:r2293_68 -# 2293| m2293_75(String) = Chi : total:m2293_67, partial:m2293_74 -# 2293| r2293_76(glval>) = VariableAddress[(__begin)] : -# 2293| r2293_77(glval) = FunctionAddress[operator++] : -# 2293| r2293_78(iterator &) = Call[operator++] : func:r2293_77, this:r2293_76 -# 2293| m2293_79(unknown) = ^CallSideEffect : ~m2293_72 -# 2293| m2293_80(unknown) = Chi : total:m2293_72, partial:m2293_79 -# 2293| v2293_81(void) = ^IndirectReadSideEffect[-1] : &:r2293_76, m2293_36 -# 2293| m2293_82(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r2293_76 -# 2293| m2293_83(iterator) = Chi : total:m2293_36, partial:m2293_82 -# 2293| r2293_84(glval>) = CopyValue : r2293_78 -#-----| Goto (back edge) -> Block 4 - -# 2297| Block 6 -# 2297| r2297_1(glval) = VariableAddress[s] : -# 2297| m2297_2(String) = Uninitialized[s] : &:r2297_1 -# 2297| r2297_3(glval) = FunctionAddress[String] : -# 2297| r2297_4(glval) = StringConstant["hello"] : -# 2297| r2297_5(char *) = Convert : r2297_4 -# 2297| v2297_6(void) = Call[String] : func:r2297_3, this:r2297_1, 0:r2297_5 -# 2297| m2297_7(unknown) = ^CallSideEffect : ~m2293_49 -# 2297| m2297_8(unknown) = Chi : total:m2293_49, partial:m2297_7 -# 2297| v2297_9(void) = ^BufferReadSideEffect[0] : &:r2297_5, ~m2287_3 -# 2297| m2297_10(String) = ^IndirectMayWriteSideEffect[-1] : &:r2297_1 -# 2297| m2297_11(String) = Chi : total:m2297_2, partial:m2297_10 -# 2297| r2297_12(glval) = VariableAddress[s2] : -# 2297| m2297_13(String) = Uninitialized[s2] : &:r2297_12 -# 2297| r2297_14(glval) = FunctionAddress[String] : -# 2297| r2297_15(glval) = StringConstant["world"] : -# 2297| r2297_16(char *) = Convert : r2297_15 -# 2297| v2297_17(void) = Call[String] : func:r2297_14, this:r2297_12, 0:r2297_16 -# 2297| m2297_18(unknown) = ^CallSideEffect : ~m2297_8 -# 2297| m2297_19(unknown) = Chi : total:m2297_8, partial:m2297_18 -# 2297| v2297_20(void) = ^BufferReadSideEffect[0] : &:r2297_16, ~m2287_3 -# 2297| m2297_21(String) = ^IndirectMayWriteSideEffect[-1] : &:r2297_12 -# 2297| m2297_22(String) = Chi : total:m2297_13, partial:m2297_21 -#-----| Goto -> Block 7 - -# 2297| Block 7 -# 2297| m2297_23(String) = Phi : from 6:m2297_11, from 8:m2297_39 -# 2297| m2297_24(unknown) = Phi : from 6:~m2297_19, from 8:~m2297_36 -# 2297| m2297_25(char) = Phi : from 6:m2289_14, from 8:m2297_41 -# 2297| r2297_26(glval) = VariableAddress[c] : -# 2297| r2297_27(char) = Load[c] : &:r2297_26, m2297_25 -# 2297| r2297_28(int) = Convert : r2297_27 -# 2297| r2297_29(int) = Constant[0] : -# 2297| r2297_30(bool) = CompareNE : r2297_28, r2297_29 -# 2297| v2297_31(void) = ConditionalBranch : r2297_30 -#-----| False -> Block 9 -#-----| True -> Block 8 - -# 2298| Block 8 -# 2298| r2298_1(char) = Constant[0] : -# 2298| r2298_2(glval) = VariableAddress[c] : -# 2298| m2298_3(char) = Store[c] : &:r2298_2, r2298_1 -# 2297| r2297_32(glval) = VariableAddress[s] : -# 2297| r2297_33(glval) = FunctionAddress[pop_back] : -# 2297| r2297_34(char) = Call[pop_back] : func:r2297_33, this:r2297_32 -# 2297| m2297_35(unknown) = ^CallSideEffect : ~m2297_24 -# 2297| m2297_36(unknown) = Chi : total:m2297_24, partial:m2297_35 -# 2297| v2297_37(void) = ^IndirectReadSideEffect[-1] : &:r2297_32, m2297_23 -# 2297| m2297_38(String) = ^IndirectMayWriteSideEffect[-1] : &:r2297_32 -# 2297| m2297_39(String) = Chi : total:m2297_23, partial:m2297_38 -# 2297| r2297_40(glval) = VariableAddress[c] : -# 2297| m2297_41(char) = Store[c] : &:r2297_40, r2297_34 -#-----| Goto (back edge) -> Block 7 - -# 2297| Block 9 -# 2297| r2297_42(glval) = VariableAddress[s2] : -# 2297| r2297_43(glval) = FunctionAddress[~String] : -# 2297| v2297_44(void) = Call[~String] : func:r2297_43, this:r2297_42 -# 2297| m2297_45(unknown) = ^CallSideEffect : ~m2297_24 -# 2297| m2297_46(unknown) = Chi : total:m2297_24, partial:m2297_45 -# 2297| v2297_47(void) = ^IndirectReadSideEffect[-1] : &:r2297_42, m2297_22 -# 2297| m2297_48(String) = ^IndirectMayWriteSideEffect[-1] : &:r2297_42 -# 2297| m2297_49(String) = Chi : total:m2297_22, partial:m2297_48 -# 2297| r2297_50(glval) = VariableAddress[s] : -# 2297| r2297_51(glval) = FunctionAddress[~String] : -# 2297| v2297_52(void) = Call[~String] : func:r2297_51, this:r2297_50 -# 2297| m2297_53(unknown) = ^CallSideEffect : ~m2297_46 -# 2297| m2297_54(unknown) = Chi : total:m2297_46, partial:m2297_53 -# 2297| v2297_55(void) = ^IndirectReadSideEffect[-1] : &:r2297_50, m2297_23 -# 2297| m2297_56(String) = ^IndirectMayWriteSideEffect[-1] : &:r2297_50 -# 2297| m2297_57(String) = Chi : total:m2297_23, partial:m2297_56 -# 2300| v2300_1(void) = NoOp : -# 2287| v2287_5(void) = ReturnVoid : -# 2287| v2287_6(void) = AliasedUse : ~m2297_54 -# 2287| v2287_7(void) = ExitFunction : - -# 2302| void IfDestructors2(bool) -# 2302| Block 0 -# 2302| v2302_1(void) = EnterFunction : -# 2302| m2302_2(unknown) = AliasedDefinition : -# 2302| m2302_3(unknown) = InitializeNonLocal : -# 2302| m2302_4(unknown) = Chi : total:m2302_2, partial:m2302_3 -# 2302| r2302_5(glval) = VariableAddress[b] : -# 2302| m2302_6(bool) = InitializeParameter[b] : &:r2302_5 +# 2301| void ForDestructors() +# 2301| Block 0 +# 2301| v2301_1(void) = EnterFunction : +# 2301| m2301_2(unknown) = AliasedDefinition : +# 2301| m2301_3(unknown) = InitializeNonLocal : +# 2301| m2301_4(unknown) = Chi : total:m2301_2, partial:m2301_3 +# 2302| r2302_1(glval) = VariableAddress[c] : +# 2302| r2302_2(char) = Constant[97] : +# 2302| m2302_3(char) = Store[c] : &:r2302_1, r2302_2 # 2303| r2303_1(glval) = VariableAddress[s] : # 2303| m2303_2(String) = Uninitialized[s] : &:r2303_1 # 2303| r2303_3(glval) = FunctionAddress[String] : # 2303| r2303_4(glval) = StringConstant["hello"] : # 2303| r2303_5(char *) = Convert : r2303_4 # 2303| v2303_6(void) = Call[String] : func:r2303_3, this:r2303_1, 0:r2303_5 -# 2303| m2303_7(unknown) = ^CallSideEffect : ~m2302_4 -# 2303| m2303_8(unknown) = Chi : total:m2302_4, partial:m2303_7 -# 2303| v2303_9(void) = ^BufferReadSideEffect[0] : &:r2303_5, ~m2302_3 +# 2303| m2303_7(unknown) = ^CallSideEffect : ~m2301_4 +# 2303| m2303_8(unknown) = Chi : total:m2301_4, partial:m2303_7 +# 2303| v2303_9(void) = ^BufferReadSideEffect[0] : &:r2303_5, ~m2301_3 # 2303| m2303_10(String) = ^IndirectMayWriteSideEffect[-1] : &:r2303_1 # 2303| m2303_11(String) = Chi : total:m2303_2, partial:m2303_10 -# 2303| r2303_12(glval) = VariableAddress[b] : -# 2303| r2303_13(bool) = Load[b] : &:r2303_12, m2302_6 -# 2303| v2303_14(void) = ConditionalBranch : r2303_13 -#-----| False -> Block 2 -#-----| True -> Block 1 - -# 2304| Block 1 -# 2304| r2304_1(glval) = VariableAddress[x] : -# 2304| r2304_2(int) = Constant[0] : -# 2304| m2304_3(int) = Store[x] : &:r2304_1, r2304_2 -#-----| Goto -> Block 3 - -# 2306| Block 2 -# 2306| r2306_1(glval) = VariableAddress[y] : -# 2306| r2306_2(int) = Constant[0] : -# 2306| m2306_3(int) = Store[y] : &:r2306_1, r2306_2 -#-----| Goto -> Block 3 - -# 2307| Block 3 -# 2307| r2307_1(glval) = VariableAddress[s] : -# 2307| r2307_2(glval) = FunctionAddress[~String] : -# 2307| v2307_3(void) = Call[~String] : func:r2307_2, this:r2307_1 -# 2307| m2307_4(unknown) = ^CallSideEffect : ~m2303_8 -# 2307| m2307_5(unknown) = Chi : total:m2303_8, partial:m2307_4 -# 2307| v2307_6(void) = ^IndirectReadSideEffect[-1] : &:r2307_1, m2303_11 -# 2307| m2307_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2307_1 -# 2307| m2307_8(String) = Chi : total:m2303_11, partial:m2307_7 -# 2308| v2308_1(void) = NoOp : -# 2302| v2302_7(void) = ReturnVoid : -# 2302| v2302_8(void) = AliasedUse : ~m2307_5 -# 2302| v2302_9(void) = ExitFunction : - -# 2317| void IfDestructors3(bool) -# 2317| Block 0 -# 2317| v2317_1(void) = EnterFunction : -# 2317| m2317_2(unknown) = AliasedDefinition : -# 2317| m2317_3(unknown) = InitializeNonLocal : -# 2317| m2317_4(unknown) = Chi : total:m2317_2, partial:m2317_3 -# 2317| r2317_5(glval) = VariableAddress[b] : -# 2317| m2317_6(bool) = InitializeParameter[b] : &:r2317_5 -# 2318| r2318_1(glval) = VariableAddress[B] : -# 2318| m2318_2(Bool) = Uninitialized[B] : &:r2318_1 -# 2318| r2318_3(glval) = FunctionAddress[Bool] : -# 2318| r2318_4(glval) = VariableAddress[b] : -# 2318| r2318_5(bool) = Load[b] : &:r2318_4, m2317_6 -# 2318| v2318_6(void) = Call[Bool] : func:r2318_3, this:r2318_1, 0:r2318_5 -# 2318| m2318_7(unknown) = ^CallSideEffect : ~m2317_4 -# 2318| m2318_8(unknown) = Chi : total:m2317_4, partial:m2318_7 -# 2318| m2318_9(Bool) = ^IndirectMayWriteSideEffect[-1] : &:r2318_1 -# 2318| m2318_10(Bool) = Chi : total:m2318_2, partial:m2318_9 -# 2318| r2318_11(glval) = VariableAddress[B] : -# 2318| r2318_12(glval) = FunctionAddress[operator bool] : -# 2318| r2318_13(bool) = Call[operator bool] : func:r2318_12, this:r2318_11 -# 2318| m2318_14(unknown) = ^CallSideEffect : ~m2318_8 -# 2318| m2318_15(unknown) = Chi : total:m2318_8, partial:m2318_14 -# 2318| v2318_16(void) = ^IndirectReadSideEffect[-1] : &:r2318_11, m2318_10 -# 2318| m2318_17(Bool) = ^IndirectMayWriteSideEffect[-1] : &:r2318_11 -# 2318| m2318_18(Bool) = Chi : total:m2318_10, partial:m2318_17 -# 2318| r2318_19(bool) = CopyValue : r2318_13 -# 2318| v2318_20(void) = ConditionalBranch : r2318_19 -#-----| False -> Block 2 -#-----| True -> Block 1 - -# 2319| Block 1 -# 2319| r2319_1(glval) = VariableAddress[s1] : -# 2319| m2319_2(String) = Uninitialized[s1] : &:r2319_1 -# 2319| r2319_3(glval) = FunctionAddress[String] : -# 2319| v2319_4(void) = Call[String] : func:r2319_3, this:r2319_1 -# 2319| m2319_5(unknown) = ^CallSideEffect : ~m2318_15 -# 2319| m2319_6(unknown) = Chi : total:m2318_15, partial:m2319_5 -# 2319| m2319_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2319_1 -# 2319| m2319_8(String) = Chi : total:m2319_2, partial:m2319_7 -# 2320| r2320_1(glval) = VariableAddress[s1] : -# 2320| r2320_2(glval) = FunctionAddress[~String] : -# 2320| v2320_3(void) = Call[~String] : func:r2320_2, this:r2320_1 -# 2320| m2320_4(unknown) = ^CallSideEffect : ~m2319_6 -# 2320| m2320_5(unknown) = Chi : total:m2319_6, partial:m2320_4 -# 2320| v2320_6(void) = ^IndirectReadSideEffect[-1] : &:r2320_1, m2319_8 -# 2320| m2320_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2320_1 -# 2320| m2320_8(String) = Chi : total:m2319_8, partial:m2320_7 -#-----| Goto -> Block 3 - -# 2321| Block 2 -# 2321| r2321_1(glval) = VariableAddress[s2] : -# 2321| m2321_2(String) = Uninitialized[s2] : &:r2321_1 -# 2321| r2321_3(glval) = FunctionAddress[String] : -# 2321| v2321_4(void) = Call[String] : func:r2321_3, this:r2321_1 -# 2321| m2321_5(unknown) = ^CallSideEffect : ~m2318_15 -# 2321| m2321_6(unknown) = Chi : total:m2318_15, partial:m2321_5 -# 2321| m2321_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2321_1 -# 2321| m2321_8(String) = Chi : total:m2321_2, partial:m2321_7 -# 2322| r2322_1(glval) = VariableAddress[s2] : -# 2322| r2322_2(glval) = FunctionAddress[~String] : -# 2322| v2322_3(void) = Call[~String] : func:r2322_2, this:r2322_1 -# 2322| m2322_4(unknown) = ^CallSideEffect : ~m2321_6 -# 2322| m2322_5(unknown) = Chi : total:m2321_6, partial:m2322_4 -# 2322| v2322_6(void) = ^IndirectReadSideEffect[-1] : &:r2322_1, m2321_8 -# 2322| m2322_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2322_1 -# 2322| m2322_8(String) = Chi : total:m2321_8, partial:m2322_7 -#-----| Goto -> Block 3 - -# 2322| Block 3 -# 2322| m2322_9(unknown) = Phi : from 1:~m2320_5, from 2:~m2322_5 -# 2322| r2322_10(glval) = VariableAddress[B] : -# 2322| r2322_11(glval) = FunctionAddress[~Bool] : -# 2322| v2322_12(void) = Call[~Bool] : func:r2322_11, this:r2322_10 -# 2322| m2322_13(unknown) = ^CallSideEffect : ~m2322_9 -# 2322| m2322_14(unknown) = Chi : total:m2322_9, partial:m2322_13 -# 2322| v2322_15(void) = ^IndirectReadSideEffect[-1] : &:r2322_10, m2318_18 -# 2322| m2322_16(Bool) = ^IndirectMayWriteSideEffect[-1] : &:r2322_10 -# 2322| m2322_17(Bool) = Chi : total:m2318_18, partial:m2322_16 -# 2323| v2323_1(void) = NoOp : -# 2317| v2317_7(void) = ReturnVoid : -# 2317| v2317_8(void) = AliasedUse : ~m2322_14 -# 2317| v2317_9(void) = ExitFunction : - -# 2325| void WhileLoopDestructors(bool) -# 2325| Block 0 -# 2325| v2325_1(void) = EnterFunction : -# 2325| m2325_2(unknown) = AliasedDefinition : -# 2325| m2325_3(unknown) = InitializeNonLocal : -# 2325| m2325_4(unknown) = Chi : total:m2325_2, partial:m2325_3 -# 2325| r2325_5(glval) = VariableAddress[b] : -# 2325| m2325_6(bool) = InitializeParameter[b] : &:r2325_5 -# 2327| r2327_1(glval) = VariableAddress[s] : -# 2327| m2327_2(String) = Uninitialized[s] : &:r2327_1 -# 2327| r2327_3(glval) = FunctionAddress[String] : -# 2327| v2327_4(void) = Call[String] : func:r2327_3, this:r2327_1 -# 2327| m2327_5(unknown) = ^CallSideEffect : ~m2325_4 -# 2327| m2327_6(unknown) = Chi : total:m2325_4, partial:m2327_5 -# 2327| m2327_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2327_1 -# 2327| m2327_8(String) = Chi : total:m2327_2, partial:m2327_7 #-----| Goto -> Block 1 -# 2328| Block 1 -# 2328| m2328_1(bool) = Phi : from 0:m2325_6, from 2:m2329_3 -# 2328| r2328_2(glval) = VariableAddress[b] : -# 2328| r2328_3(bool) = Load[b] : &:r2328_2, m2328_1 -# 2328| v2328_4(void) = ConditionalBranch : r2328_3 +# 2303| Block 1 +# 2303| m2303_12(String) = Phi : from 0:m2303_11, from 2:m2303_28 +# 2303| m2303_13(unknown) = Phi : from 0:~m2303_8, from 2:~m2303_25 +# 2303| m2303_14(char) = Phi : from 0:m2302_3, from 2:m2303_30 +# 2303| r2303_15(glval) = VariableAddress[c] : +# 2303| r2303_16(char) = Load[c] : &:r2303_15, m2303_14 +# 2303| r2303_17(int) = Convert : r2303_16 +# 2303| r2303_18(int) = Constant[0] : +# 2303| r2303_19(bool) = CompareNE : r2303_17, r2303_18 +# 2303| v2303_20(void) = ConditionalBranch : r2303_19 #-----| False -> Block 3 #-----| True -> Block 2 -# 2329| Block 2 -# 2329| r2329_1(bool) = Constant[0] : -# 2329| r2329_2(glval) = VariableAddress[b] : -# 2329| m2329_3(bool) = Store[b] : &:r2329_2, r2329_1 +# 2304| Block 2 +# 2304| r2304_1(glval) = VariableAddress[s2] : +# 2304| m2304_2(String) = Uninitialized[s2] : &:r2304_1 +# 2304| r2304_3(glval) = FunctionAddress[String] : +# 2304| v2304_4(void) = Call[String] : func:r2304_3, this:r2304_1 +# 2304| m2304_5(unknown) = ^CallSideEffect : ~m2303_13 +# 2304| m2304_6(unknown) = Chi : total:m2303_13, partial:m2304_5 +# 2304| m2304_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2304_1 +# 2304| m2304_8(String) = Chi : total:m2304_2, partial:m2304_7 +# 2305| r2305_1(glval) = VariableAddress[s2] : +# 2305| r2305_2(glval) = FunctionAddress[~String] : +# 2305| v2305_3(void) = Call[~String] : func:r2305_2, this:r2305_1 +# 2305| m2305_4(unknown) = ^CallSideEffect : ~m2304_6 +# 2305| m2305_5(unknown) = Chi : total:m2304_6, partial:m2305_4 +# 2305| v2305_6(void) = ^IndirectReadSideEffect[-1] : &:r2305_1, m2304_8 +# 2305| m2305_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2305_1 +# 2305| m2305_8(String) = Chi : total:m2304_8, partial:m2305_7 +# 2303| r2303_21(glval) = VariableAddress[s] : +# 2303| r2303_22(glval) = FunctionAddress[pop_back] : +# 2303| r2303_23(char) = Call[pop_back] : func:r2303_22, this:r2303_21 +# 2303| m2303_24(unknown) = ^CallSideEffect : ~m2305_5 +# 2303| m2303_25(unknown) = Chi : total:m2305_5, partial:m2303_24 +# 2303| v2303_26(void) = ^IndirectReadSideEffect[-1] : &:r2303_21, m2303_12 +# 2303| m2303_27(String) = ^IndirectMayWriteSideEffect[-1] : &:r2303_21 +# 2303| m2303_28(String) = Chi : total:m2303_12, partial:m2303_27 +# 2303| r2303_29(glval) = VariableAddress[c] : +# 2303| m2303_30(char) = Store[c] : &:r2303_29, r2303_23 #-----| Goto (back edge) -> Block 1 -# 2331| Block 3 -# 2331| r2331_1(glval) = VariableAddress[s] : -# 2331| r2331_2(glval) = FunctionAddress[~String] : -# 2331| v2331_3(void) = Call[~String] : func:r2331_2, this:r2331_1 -# 2331| m2331_4(unknown) = ^CallSideEffect : ~m2327_6 -# 2331| m2331_5(unknown) = Chi : total:m2327_6, partial:m2331_4 -# 2331| v2331_6(void) = ^IndirectReadSideEffect[-1] : &:r2331_1, m2327_8 -# 2331| m2331_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2331_1 -# 2331| m2331_8(String) = Chi : total:m2327_8, partial:m2331_7 +# 2303| Block 3 +# 2303| r2303_31(glval) = VariableAddress[s] : +# 2303| r2303_32(glval) = FunctionAddress[~String] : +# 2303| v2303_33(void) = Call[~String] : func:r2303_32, this:r2303_31 +# 2303| m2303_34(unknown) = ^CallSideEffect : ~m2303_13 +# 2303| m2303_35(unknown) = Chi : total:m2303_13, partial:m2303_34 +# 2303| v2303_36(void) = ^IndirectReadSideEffect[-1] : &:r2303_31, m2303_12 +# 2303| m2303_37(String) = ^IndirectMayWriteSideEffect[-1] : &:r2303_31 +# 2303| m2303_38(String) = Chi : total:m2303_12, partial:m2303_37 +# 2307| r2307_1(glval &&>) = VariableAddress[(__range)] : +# 2307| r2307_2(glval>) = VariableAddress[#temp2307:20] : +# 2307| m2307_3(vector) = Uninitialized[#temp2307:20] : &:r2307_2 +# 2307| r2307_4(glval) = FunctionAddress[vector] : +# 2307| r2307_5(glval) = VariableAddress[#temp2307:40] : +# 2307| m2307_6(String) = Uninitialized[#temp2307:40] : &:r2307_5 +# 2307| r2307_7(glval) = FunctionAddress[String] : +# 2307| r2307_8(glval) = StringConstant["hello"] : +# 2307| r2307_9(char *) = Convert : r2307_8 +# 2307| v2307_10(void) = Call[String] : func:r2307_7, this:r2307_5, 0:r2307_9 +# 2307| m2307_11(unknown) = ^CallSideEffect : ~m2303_35 +# 2307| m2307_12(unknown) = Chi : total:m2303_35, partial:m2307_11 +# 2307| v2307_13(void) = ^BufferReadSideEffect[0] : &:r2307_9, ~m2301_3 +# 2307| m2307_14(String) = ^IndirectMayWriteSideEffect[-1] : &:r2307_5 +# 2307| m2307_15(String) = Chi : total:m2307_6, partial:m2307_14 +# 2307| r2307_16(String) = Load[#temp2307:40] : &:r2307_5, m2307_15 +# 2307| v2307_17(void) = Call[vector] : func:r2307_4, this:r2307_2, 0:r2307_16 +# 2307| m2307_18(unknown) = ^CallSideEffect : ~m2307_12 +# 2307| m2307_19(unknown) = Chi : total:m2307_12, partial:m2307_18 +# 2307| m2307_20(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2307_2 +# 2307| m2307_21(vector) = Chi : total:m2307_3, partial:m2307_20 +# 2307| r2307_22(vector &) = CopyValue : r2307_2 +# 2307| m2307_23(vector &&) = Store[(__range)] : &:r2307_1, r2307_22 +# 2307| r2307_24(glval>) = VariableAddress[(__begin)] : +# 2307| r2307_25(glval &&>) = VariableAddress[(__range)] : +# 2307| r2307_26(vector &&) = Load[(__range)] : &:r2307_25, m2307_23 +#-----| r0_1(glval>) = CopyValue : r2307_26 +#-----| r0_2(glval>) = Convert : r0_1 +# 2307| r2307_27(glval) = FunctionAddress[begin] : +# 2307| r2307_28(iterator) = Call[begin] : func:r2307_27, this:r0_2 +#-----| v0_3(void) = ^IndirectReadSideEffect[-1] : &:r0_2, m2307_21 +# 2307| m2307_29(iterator) = Store[(__begin)] : &:r2307_24, r2307_28 +# 2307| r2307_30(glval>) = VariableAddress[(__end)] : +# 2307| r2307_31(glval &&>) = VariableAddress[(__range)] : +# 2307| r2307_32(vector &&) = Load[(__range)] : &:r2307_31, m2307_23 +#-----| r0_4(glval>) = CopyValue : r2307_32 +#-----| r0_5(glval>) = Convert : r0_4 +# 2307| r2307_33(glval) = FunctionAddress[end] : +# 2307| r2307_34(iterator) = Call[end] : func:r2307_33, this:r0_5 +#-----| v0_6(void) = ^IndirectReadSideEffect[-1] : &:r0_5, m2307_21 +# 2307| m2307_35(iterator) = Store[(__end)] : &:r2307_30, r2307_34 #-----| Goto -> Block 4 -# 2334| Block 4 -# 2334| m2334_1(unknown) = Phi : from 3:~m2331_5, from 5:~m2336_5 -# 2334| m2334_2(bool) = Phi : from 3:m2328_1, from 5:m2335_3 -# 2334| r2334_3(glval) = VariableAddress[B] : -# 2334| m2334_4(Bool) = Uninitialized[B] : &:r2334_3 -# 2334| r2334_5(glval) = FunctionAddress[Bool] : -# 2334| r2334_6(glval) = VariableAddress[b] : -# 2334| r2334_7(bool) = Load[b] : &:r2334_6, m2334_2 -# 2334| v2334_8(void) = Call[Bool] : func:r2334_5, this:r2334_3, 0:r2334_7 -# 2334| m2334_9(unknown) = ^CallSideEffect : ~m2334_1 -# 2334| m2334_10(unknown) = Chi : total:m2334_1, partial:m2334_9 -# 2334| m2334_11(Bool) = ^IndirectMayWriteSideEffect[-1] : &:r2334_3 -# 2334| m2334_12(Bool) = Chi : total:m2334_4, partial:m2334_11 -# 2334| r2334_13(glval) = VariableAddress[B] : -# 2334| r2334_14(glval) = FunctionAddress[operator bool] : -# 2334| r2334_15(bool) = Call[operator bool] : func:r2334_14, this:r2334_13 -# 2334| m2334_16(unknown) = ^CallSideEffect : ~m2334_10 -# 2334| m2334_17(unknown) = Chi : total:m2334_10, partial:m2334_16 -# 2334| v2334_18(void) = ^IndirectReadSideEffect[-1] : &:r2334_13, m2334_12 -# 2334| m2334_19(Bool) = ^IndirectMayWriteSideEffect[-1] : &:r2334_13 -# 2334| m2334_20(Bool) = Chi : total:m2334_12, partial:m2334_19 -# 2334| r2334_21(bool) = CopyValue : r2334_15 -# 2334| v2334_22(void) = ConditionalBranch : r2334_21 +# 2307| Block 4 +# 2307| m2307_36(iterator) = Phi : from 3:m2307_29, from 5:m2307_83 +# 2307| m2307_37(unknown) = Phi : from 3:~m2307_19, from 5:~m2307_80 +# 2307| r2307_38(glval>) = VariableAddress[(__begin)] : +#-----| r0_7(glval>) = Convert : r2307_38 +# 2307| r2307_39(glval) = FunctionAddress[operator!=] : +#-----| r0_8(glval>) = VariableAddress[#temp0:0] : +#-----| m0_9(iterator) = Uninitialized[#temp0:0] : &:r0_8 +# 2307| r2307_40(glval) = FunctionAddress[iterator] : +# 2307| r2307_41(glval>) = VariableAddress[(__end)] : +#-----| r0_10(glval>) = Convert : r2307_41 +#-----| r0_11(iterator &) = CopyValue : r0_10 +# 2307| v2307_42(void) = Call[iterator] : func:r2307_40, this:r0_8, 0:r0_11 +# 2307| m2307_43(unknown) = ^CallSideEffect : ~m2307_37 +# 2307| m2307_44(unknown) = Chi : total:m2307_37, partial:m2307_43 +#-----| v0_12(void) = ^BufferReadSideEffect[0] : &:r0_11, ~m2307_35 +# 2307| m2307_45(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r0_8 +# 2307| m2307_46(iterator) = Chi : total:m0_9, partial:m2307_45 +#-----| r0_13(iterator) = Load[#temp0:0] : &:r0_8, m2307_46 +# 2307| r2307_47(bool) = Call[operator!=] : func:r2307_39, this:r0_7, 0:r0_13 +# 2307| m2307_48(unknown) = ^CallSideEffect : ~m2307_44 +# 2307| m2307_49(unknown) = Chi : total:m2307_44, partial:m2307_48 +#-----| v0_14(void) = ^IndirectReadSideEffect[-1] : &:r0_7, m2307_36 +# 2307| v2307_50(void) = ConditionalBranch : r2307_47 #-----| False -> Block 6 #-----| True -> Block 5 -# 2335| Block 5 -# 2335| r2335_1(bool) = Constant[0] : -# 2335| r2335_2(glval) = VariableAddress[b] : -# 2335| m2335_3(bool) = Store[b] : &:r2335_2, r2335_1 -# 2336| r2336_1(glval) = VariableAddress[B] : -# 2336| r2336_2(glval) = FunctionAddress[~Bool] : -# 2336| v2336_3(void) = Call[~Bool] : func:r2336_2, this:r2336_1 -# 2336| m2336_4(unknown) = ^CallSideEffect : ~m2334_17 -# 2336| m2336_5(unknown) = Chi : total:m2334_17, partial:m2336_4 -# 2336| v2336_6(void) = ^IndirectReadSideEffect[-1] : &:r2336_1, m2334_20 -# 2336| m2336_7(Bool) = ^IndirectMayWriteSideEffect[-1] : &:r2336_1 -# 2336| m2336_8(Bool) = Chi : total:m2334_20, partial:m2336_7 +# 2307| Block 5 +# 2307| r2307_51(glval) = VariableAddress[s] : +# 2307| m2307_52(String) = Uninitialized[s] : &:r2307_51 +# 2307| r2307_53(glval) = FunctionAddress[String] : +# 2307| r2307_54(glval>) = VariableAddress[(__begin)] : +#-----| r0_15(glval>) = Convert : r2307_54 +# 2307| r2307_55(glval) = FunctionAddress[operator*] : +# 2307| r2307_56(String &) = Call[operator*] : func:r2307_55, this:r0_15 +# 2307| m2307_57(unknown) = ^CallSideEffect : ~m2307_49 +# 2307| m2307_58(unknown) = Chi : total:m2307_49, partial:m2307_57 +#-----| v0_16(void) = ^IndirectReadSideEffect[-1] : &:r0_15, m2307_36 +# 2307| r2307_59(glval) = CopyValue : r2307_56 +# 2307| r2307_60(glval) = Convert : r2307_59 +# 2307| r2307_61(String &) = CopyValue : r2307_60 +# 2307| v2307_62(void) = Call[String] : func:r2307_53, this:r2307_51, 0:r2307_61 +# 2307| m2307_63(unknown) = ^CallSideEffect : ~m2307_58 +# 2307| m2307_64(unknown) = Chi : total:m2307_58, partial:m2307_63 +# 2307| v2307_65(void) = ^BufferReadSideEffect[0] : &:r2307_61, ~m2307_64 +# 2307| m2307_66(String) = ^IndirectMayWriteSideEffect[-1] : &:r2307_51 +# 2307| m2307_67(String) = Chi : total:m2307_52, partial:m2307_66 +# 2308| r2308_1(glval) = VariableAddress[s2] : +# 2308| m2308_2(String) = Uninitialized[s2] : &:r2308_1 +# 2308| r2308_3(glval) = FunctionAddress[String] : +# 2308| v2308_4(void) = Call[String] : func:r2308_3, this:r2308_1 +# 2308| m2308_5(unknown) = ^CallSideEffect : ~m2307_64 +# 2308| m2308_6(unknown) = Chi : total:m2307_64, partial:m2308_5 +# 2308| m2308_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2308_1 +# 2308| m2308_8(String) = Chi : total:m2308_2, partial:m2308_7 +# 2309| r2309_1(glval) = VariableAddress[s2] : +# 2309| r2309_2(glval) = FunctionAddress[~String] : +# 2309| v2309_3(void) = Call[~String] : func:r2309_2, this:r2309_1 +# 2309| m2309_4(unknown) = ^CallSideEffect : ~m2308_6 +# 2309| m2309_5(unknown) = Chi : total:m2308_6, partial:m2309_4 +# 2309| v2309_6(void) = ^IndirectReadSideEffect[-1] : &:r2309_1, m2308_8 +# 2309| m2309_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2309_1 +# 2309| m2309_8(String) = Chi : total:m2308_8, partial:m2309_7 +# 2307| r2307_68(glval) = VariableAddress[s] : +# 2307| r2307_69(glval) = FunctionAddress[~String] : +# 2307| v2307_70(void) = Call[~String] : func:r2307_69, this:r2307_68 +# 2307| m2307_71(unknown) = ^CallSideEffect : ~m2309_5 +# 2307| m2307_72(unknown) = Chi : total:m2309_5, partial:m2307_71 +# 2307| v2307_73(void) = ^IndirectReadSideEffect[-1] : &:r2307_68, m2307_67 +# 2307| m2307_74(String) = ^IndirectMayWriteSideEffect[-1] : &:r2307_68 +# 2307| m2307_75(String) = Chi : total:m2307_67, partial:m2307_74 +# 2307| r2307_76(glval>) = VariableAddress[(__begin)] : +# 2307| r2307_77(glval) = FunctionAddress[operator++] : +# 2307| r2307_78(iterator &) = Call[operator++] : func:r2307_77, this:r2307_76 +# 2307| m2307_79(unknown) = ^CallSideEffect : ~m2307_72 +# 2307| m2307_80(unknown) = Chi : total:m2307_72, partial:m2307_79 +# 2307| v2307_81(void) = ^IndirectReadSideEffect[-1] : &:r2307_76, m2307_36 +# 2307| m2307_82(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r2307_76 +# 2307| m2307_83(iterator) = Chi : total:m2307_36, partial:m2307_82 +# 2307| r2307_84(glval>) = CopyValue : r2307_78 #-----| Goto (back edge) -> Block 4 -# 2336| Block 6 -# 2336| r2336_9(glval) = VariableAddress[B] : -# 2336| r2336_10(glval) = FunctionAddress[~Bool] : -# 2336| v2336_11(void) = Call[~Bool] : func:r2336_10, this:r2336_9 -# 2336| m2336_12(unknown) = ^CallSideEffect : ~m2334_17 -# 2336| m2336_13(unknown) = Chi : total:m2334_17, partial:m2336_12 -# 2336| v2336_14(void) = ^IndirectReadSideEffect[-1] : &:r2336_9, m2334_20 -# 2336| m2336_15(Bool) = ^IndirectMayWriteSideEffect[-1] : &:r2336_9 -# 2336| m2336_16(Bool) = Chi : total:m2334_20, partial:m2336_15 -# 2338| v2338_1(void) = NoOp : -# 2325| v2325_7(void) = ReturnVoid : -# 2325| v2325_8(void) = AliasedUse : ~m2336_13 -# 2325| v2325_9(void) = ExitFunction : +# 2311| Block 6 +# 2311| r2311_1(glval) = VariableAddress[s] : +# 2311| m2311_2(String) = Uninitialized[s] : &:r2311_1 +# 2311| r2311_3(glval) = FunctionAddress[String] : +# 2311| r2311_4(glval) = StringConstant["hello"] : +# 2311| r2311_5(char *) = Convert : r2311_4 +# 2311| v2311_6(void) = Call[String] : func:r2311_3, this:r2311_1, 0:r2311_5 +# 2311| m2311_7(unknown) = ^CallSideEffect : ~m2307_49 +# 2311| m2311_8(unknown) = Chi : total:m2307_49, partial:m2311_7 +# 2311| v2311_9(void) = ^BufferReadSideEffect[0] : &:r2311_5, ~m2301_3 +# 2311| m2311_10(String) = ^IndirectMayWriteSideEffect[-1] : &:r2311_1 +# 2311| m2311_11(String) = Chi : total:m2311_2, partial:m2311_10 +# 2311| r2311_12(glval) = VariableAddress[s2] : +# 2311| m2311_13(String) = Uninitialized[s2] : &:r2311_12 +# 2311| r2311_14(glval) = FunctionAddress[String] : +# 2311| r2311_15(glval) = StringConstant["world"] : +# 2311| r2311_16(char *) = Convert : r2311_15 +# 2311| v2311_17(void) = Call[String] : func:r2311_14, this:r2311_12, 0:r2311_16 +# 2311| m2311_18(unknown) = ^CallSideEffect : ~m2311_8 +# 2311| m2311_19(unknown) = Chi : total:m2311_8, partial:m2311_18 +# 2311| v2311_20(void) = ^BufferReadSideEffect[0] : &:r2311_16, ~m2301_3 +# 2311| m2311_21(String) = ^IndirectMayWriteSideEffect[-1] : &:r2311_12 +# 2311| m2311_22(String) = Chi : total:m2311_13, partial:m2311_21 +#-----| Goto -> Block 7 -# 2340| void VoidFunc() -# 2340| Block 0 -# 2340| v2340_1(void) = EnterFunction : -# 2340| m2340_2(unknown) = AliasedDefinition : -# 2340| m2340_3(unknown) = InitializeNonLocal : -# 2340| m2340_4(unknown) = Chi : total:m2340_2, partial:m2340_3 -# 2340| v2340_5(void) = NoOp : -# 2340| v2340_6(void) = ReturnVoid : -# 2340| v2340_7(void) = AliasedUse : m2340_3 -# 2340| v2340_8(void) = ExitFunction : +# 2311| Block 7 +# 2311| m2311_23(String) = Phi : from 6:m2311_11, from 8:m2311_39 +# 2311| m2311_24(unknown) = Phi : from 6:~m2311_19, from 8:~m2311_36 +# 2311| m2311_25(char) = Phi : from 6:m2303_14, from 8:m2311_41 +# 2311| r2311_26(glval) = VariableAddress[c] : +# 2311| r2311_27(char) = Load[c] : &:r2311_26, m2311_25 +# 2311| r2311_28(int) = Convert : r2311_27 +# 2311| r2311_29(int) = Constant[0] : +# 2311| r2311_30(bool) = CompareNE : r2311_28, r2311_29 +# 2311| v2311_31(void) = ConditionalBranch : r2311_30 +#-----| False -> Block 9 +#-----| True -> Block 8 -# 2342| void IfReturnDestructors(bool) -# 2342| Block 0 -# 2342| v2342_1(void) = EnterFunction : -# 2342| m2342_2(unknown) = AliasedDefinition : -# 2342| m2342_3(unknown) = InitializeNonLocal : -# 2342| m2342_4(unknown) = Chi : total:m2342_2, partial:m2342_3 -# 2342| r2342_5(glval) = VariableAddress[b] : -# 2342| m2342_6(bool) = InitializeParameter[b] : &:r2342_5 -# 2343| r2343_1(glval) = VariableAddress[s] : -# 2343| m2343_2(String) = Uninitialized[s] : &:r2343_1 -# 2343| r2343_3(glval) = FunctionAddress[String] : -# 2343| v2343_4(void) = Call[String] : func:r2343_3, this:r2343_1 -# 2343| m2343_5(unknown) = ^CallSideEffect : ~m2342_4 -# 2343| m2343_6(unknown) = Chi : total:m2342_4, partial:m2343_5 -# 2343| m2343_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2343_1 -# 2343| m2343_8(String) = Chi : total:m2343_2, partial:m2343_7 -# 2344| r2344_1(glval) = VariableAddress[b] : -# 2344| r2344_2(bool) = Load[b] : &:r2344_1, m2342_6 -# 2344| v2344_3(void) = ConditionalBranch : r2344_2 +# 2312| Block 8 +# 2312| r2312_1(char) = Constant[0] : +# 2312| r2312_2(glval) = VariableAddress[c] : +# 2312| m2312_3(char) = Store[c] : &:r2312_2, r2312_1 +# 2311| r2311_32(glval) = VariableAddress[s] : +# 2311| r2311_33(glval) = FunctionAddress[pop_back] : +# 2311| r2311_34(char) = Call[pop_back] : func:r2311_33, this:r2311_32 +# 2311| m2311_35(unknown) = ^CallSideEffect : ~m2311_24 +# 2311| m2311_36(unknown) = Chi : total:m2311_24, partial:m2311_35 +# 2311| v2311_37(void) = ^IndirectReadSideEffect[-1] : &:r2311_32, m2311_23 +# 2311| m2311_38(String) = ^IndirectMayWriteSideEffect[-1] : &:r2311_32 +# 2311| m2311_39(String) = Chi : total:m2311_23, partial:m2311_38 +# 2311| r2311_40(glval) = VariableAddress[c] : +# 2311| m2311_41(char) = Store[c] : &:r2311_40, r2311_34 +#-----| Goto (back edge) -> Block 7 + +# 2311| Block 9 +# 2311| r2311_42(glval) = VariableAddress[s2] : +# 2311| r2311_43(glval) = FunctionAddress[~String] : +# 2311| v2311_44(void) = Call[~String] : func:r2311_43, this:r2311_42 +# 2311| m2311_45(unknown) = ^CallSideEffect : ~m2311_24 +# 2311| m2311_46(unknown) = Chi : total:m2311_24, partial:m2311_45 +# 2311| v2311_47(void) = ^IndirectReadSideEffect[-1] : &:r2311_42, m2311_22 +# 2311| m2311_48(String) = ^IndirectMayWriteSideEffect[-1] : &:r2311_42 +# 2311| m2311_49(String) = Chi : total:m2311_22, partial:m2311_48 +# 2311| r2311_50(glval) = VariableAddress[s] : +# 2311| r2311_51(glval) = FunctionAddress[~String] : +# 2311| v2311_52(void) = Call[~String] : func:r2311_51, this:r2311_50 +# 2311| m2311_53(unknown) = ^CallSideEffect : ~m2311_46 +# 2311| m2311_54(unknown) = Chi : total:m2311_46, partial:m2311_53 +# 2311| v2311_55(void) = ^IndirectReadSideEffect[-1] : &:r2311_50, m2311_23 +# 2311| m2311_56(String) = ^IndirectMayWriteSideEffect[-1] : &:r2311_50 +# 2311| m2311_57(String) = Chi : total:m2311_23, partial:m2311_56 +# 2314| v2314_1(void) = NoOp : +# 2301| v2301_5(void) = ReturnVoid : +# 2301| v2301_6(void) = AliasedUse : ~m2311_54 +# 2301| v2301_7(void) = ExitFunction : + +# 2316| void IfDestructors2(bool) +# 2316| Block 0 +# 2316| v2316_1(void) = EnterFunction : +# 2316| m2316_2(unknown) = AliasedDefinition : +# 2316| m2316_3(unknown) = InitializeNonLocal : +# 2316| m2316_4(unknown) = Chi : total:m2316_2, partial:m2316_3 +# 2316| r2316_5(glval) = VariableAddress[b] : +# 2316| m2316_6(bool) = InitializeParameter[b] : &:r2316_5 +# 2317| r2317_1(glval) = VariableAddress[s] : +# 2317| m2317_2(String) = Uninitialized[s] : &:r2317_1 +# 2317| r2317_3(glval) = FunctionAddress[String] : +# 2317| r2317_4(glval) = StringConstant["hello"] : +# 2317| r2317_5(char *) = Convert : r2317_4 +# 2317| v2317_6(void) = Call[String] : func:r2317_3, this:r2317_1, 0:r2317_5 +# 2317| m2317_7(unknown) = ^CallSideEffect : ~m2316_4 +# 2317| m2317_8(unknown) = Chi : total:m2316_4, partial:m2317_7 +# 2317| v2317_9(void) = ^BufferReadSideEffect[0] : &:r2317_5, ~m2316_3 +# 2317| m2317_10(String) = ^IndirectMayWriteSideEffect[-1] : &:r2317_1 +# 2317| m2317_11(String) = Chi : total:m2317_2, partial:m2317_10 +# 2317| r2317_12(glval) = VariableAddress[b] : +# 2317| r2317_13(bool) = Load[b] : &:r2317_12, m2316_6 +# 2317| v2317_14(void) = ConditionalBranch : r2317_13 +#-----| False -> Block 2 +#-----| True -> Block 1 + +# 2318| Block 1 +# 2318| r2318_1(glval) = VariableAddress[x] : +# 2318| r2318_2(int) = Constant[0] : +# 2318| m2318_3(int) = Store[x] : &:r2318_1, r2318_2 +#-----| Goto -> Block 3 + +# 2320| Block 2 +# 2320| r2320_1(glval) = VariableAddress[y] : +# 2320| r2320_2(int) = Constant[0] : +# 2320| m2320_3(int) = Store[y] : &:r2320_1, r2320_2 +#-----| Goto -> Block 3 + +# 2321| Block 3 +# 2321| r2321_1(glval) = VariableAddress[s] : +# 2321| r2321_2(glval) = FunctionAddress[~String] : +# 2321| v2321_3(void) = Call[~String] : func:r2321_2, this:r2321_1 +# 2321| m2321_4(unknown) = ^CallSideEffect : ~m2317_8 +# 2321| m2321_5(unknown) = Chi : total:m2317_8, partial:m2321_4 +# 2321| v2321_6(void) = ^IndirectReadSideEffect[-1] : &:r2321_1, m2317_11 +# 2321| m2321_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2321_1 +# 2321| m2321_8(String) = Chi : total:m2317_11, partial:m2321_7 +# 2322| v2322_1(void) = NoOp : +# 2316| v2316_7(void) = ReturnVoid : +# 2316| v2316_8(void) = AliasedUse : ~m2321_5 +# 2316| v2316_9(void) = ExitFunction : + +# 2331| void IfDestructors3(bool) +# 2331| Block 0 +# 2331| v2331_1(void) = EnterFunction : +# 2331| m2331_2(unknown) = AliasedDefinition : +# 2331| m2331_3(unknown) = InitializeNonLocal : +# 2331| m2331_4(unknown) = Chi : total:m2331_2, partial:m2331_3 +# 2331| r2331_5(glval) = VariableAddress[b] : +# 2331| m2331_6(bool) = InitializeParameter[b] : &:r2331_5 +# 2332| r2332_1(glval) = VariableAddress[B] : +# 2332| m2332_2(Bool) = Uninitialized[B] : &:r2332_1 +# 2332| r2332_3(glval) = FunctionAddress[Bool] : +# 2332| r2332_4(glval) = VariableAddress[b] : +# 2332| r2332_5(bool) = Load[b] : &:r2332_4, m2331_6 +# 2332| v2332_6(void) = Call[Bool] : func:r2332_3, this:r2332_1, 0:r2332_5 +# 2332| m2332_7(unknown) = ^CallSideEffect : ~m2331_4 +# 2332| m2332_8(unknown) = Chi : total:m2331_4, partial:m2332_7 +# 2332| m2332_9(Bool) = ^IndirectMayWriteSideEffect[-1] : &:r2332_1 +# 2332| m2332_10(Bool) = Chi : total:m2332_2, partial:m2332_9 +# 2332| r2332_11(glval) = VariableAddress[B] : +# 2332| r2332_12(glval) = FunctionAddress[operator bool] : +# 2332| r2332_13(bool) = Call[operator bool] : func:r2332_12, this:r2332_11 +# 2332| m2332_14(unknown) = ^CallSideEffect : ~m2332_8 +# 2332| m2332_15(unknown) = Chi : total:m2332_8, partial:m2332_14 +# 2332| v2332_16(void) = ^IndirectReadSideEffect[-1] : &:r2332_11, m2332_10 +# 2332| m2332_17(Bool) = ^IndirectMayWriteSideEffect[-1] : &:r2332_11 +# 2332| m2332_18(Bool) = Chi : total:m2332_10, partial:m2332_17 +# 2332| r2332_19(bool) = CopyValue : r2332_13 +# 2332| v2332_20(void) = ConditionalBranch : r2332_19 +#-----| False -> Block 2 +#-----| True -> Block 1 + +# 2333| Block 1 +# 2333| r2333_1(glval) = VariableAddress[s1] : +# 2333| m2333_2(String) = Uninitialized[s1] : &:r2333_1 +# 2333| r2333_3(glval) = FunctionAddress[String] : +# 2333| v2333_4(void) = Call[String] : func:r2333_3, this:r2333_1 +# 2333| m2333_5(unknown) = ^CallSideEffect : ~m2332_15 +# 2333| m2333_6(unknown) = Chi : total:m2332_15, partial:m2333_5 +# 2333| m2333_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2333_1 +# 2333| m2333_8(String) = Chi : total:m2333_2, partial:m2333_7 +# 2334| r2334_1(glval) = VariableAddress[s1] : +# 2334| r2334_2(glval) = FunctionAddress[~String] : +# 2334| v2334_3(void) = Call[~String] : func:r2334_2, this:r2334_1 +# 2334| m2334_4(unknown) = ^CallSideEffect : ~m2333_6 +# 2334| m2334_5(unknown) = Chi : total:m2333_6, partial:m2334_4 +# 2334| v2334_6(void) = ^IndirectReadSideEffect[-1] : &:r2334_1, m2333_8 +# 2334| m2334_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2334_1 +# 2334| m2334_8(String) = Chi : total:m2333_8, partial:m2334_7 +#-----| Goto -> Block 3 + +# 2335| Block 2 +# 2335| r2335_1(glval) = VariableAddress[s2] : +# 2335| m2335_2(String) = Uninitialized[s2] : &:r2335_1 +# 2335| r2335_3(glval) = FunctionAddress[String] : +# 2335| v2335_4(void) = Call[String] : func:r2335_3, this:r2335_1 +# 2335| m2335_5(unknown) = ^CallSideEffect : ~m2332_15 +# 2335| m2335_6(unknown) = Chi : total:m2332_15, partial:m2335_5 +# 2335| m2335_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2335_1 +# 2335| m2335_8(String) = Chi : total:m2335_2, partial:m2335_7 +# 2336| r2336_1(glval) = VariableAddress[s2] : +# 2336| r2336_2(glval) = FunctionAddress[~String] : +# 2336| v2336_3(void) = Call[~String] : func:r2336_2, this:r2336_1 +# 2336| m2336_4(unknown) = ^CallSideEffect : ~m2335_6 +# 2336| m2336_5(unknown) = Chi : total:m2335_6, partial:m2336_4 +# 2336| v2336_6(void) = ^IndirectReadSideEffect[-1] : &:r2336_1, m2335_8 +# 2336| m2336_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2336_1 +# 2336| m2336_8(String) = Chi : total:m2335_8, partial:m2336_7 +#-----| Goto -> Block 3 + +# 2336| Block 3 +# 2336| m2336_9(unknown) = Phi : from 1:~m2334_5, from 2:~m2336_5 +# 2336| r2336_10(glval) = VariableAddress[B] : +# 2336| r2336_11(glval) = FunctionAddress[~Bool] : +# 2336| v2336_12(void) = Call[~Bool] : func:r2336_11, this:r2336_10 +# 2336| m2336_13(unknown) = ^CallSideEffect : ~m2336_9 +# 2336| m2336_14(unknown) = Chi : total:m2336_9, partial:m2336_13 +# 2336| v2336_15(void) = ^IndirectReadSideEffect[-1] : &:r2336_10, m2332_18 +# 2336| m2336_16(Bool) = ^IndirectMayWriteSideEffect[-1] : &:r2336_10 +# 2336| m2336_17(Bool) = Chi : total:m2332_18, partial:m2336_16 +# 2337| v2337_1(void) = NoOp : +# 2331| v2331_7(void) = ReturnVoid : +# 2331| v2331_8(void) = AliasedUse : ~m2336_14 +# 2331| v2331_9(void) = ExitFunction : + +# 2339| void WhileLoopDestructors(bool) +# 2339| Block 0 +# 2339| v2339_1(void) = EnterFunction : +# 2339| m2339_2(unknown) = AliasedDefinition : +# 2339| m2339_3(unknown) = InitializeNonLocal : +# 2339| m2339_4(unknown) = Chi : total:m2339_2, partial:m2339_3 +# 2339| r2339_5(glval) = VariableAddress[b] : +# 2339| m2339_6(bool) = InitializeParameter[b] : &:r2339_5 +# 2341| r2341_1(glval) = VariableAddress[s] : +# 2341| m2341_2(String) = Uninitialized[s] : &:r2341_1 +# 2341| r2341_3(glval) = FunctionAddress[String] : +# 2341| v2341_4(void) = Call[String] : func:r2341_3, this:r2341_1 +# 2341| m2341_5(unknown) = ^CallSideEffect : ~m2339_4 +# 2341| m2341_6(unknown) = Chi : total:m2339_4, partial:m2341_5 +# 2341| m2341_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2341_1 +# 2341| m2341_8(String) = Chi : total:m2341_2, partial:m2341_7 +#-----| Goto -> Block 1 + +# 2342| Block 1 +# 2342| m2342_1(bool) = Phi : from 0:m2339_6, from 2:m2343_3 +# 2342| r2342_2(glval) = VariableAddress[b] : +# 2342| r2342_3(bool) = Load[b] : &:r2342_2, m2342_1 +# 2342| v2342_4(void) = ConditionalBranch : r2342_3 #-----| False -> Block 3 #-----| True -> Block 2 -# 2342| Block 1 -# 2342| m2342_7(unknown) = Phi : from 2:~m2351_5, from 4:~m2351_13, from 5:~m2351_22 -# 2342| v2342_8(void) = ReturnVoid : -# 2342| v2342_9(void) = AliasedUse : ~m2342_7 -# 2342| v2342_10(void) = ExitFunction : +# 2343| Block 2 +# 2343| r2343_1(bool) = Constant[0] : +# 2343| r2343_2(glval) = VariableAddress[b] : +# 2343| m2343_3(bool) = Store[b] : &:r2343_2, r2343_1 +#-----| Goto (back edge) -> Block 1 -# 2345| Block 2 -# 2345| v2345_1(void) = NoOp : -# 2351| r2351_1(glval) = VariableAddress[s] : -# 2351| r2351_2(glval) = FunctionAddress[~String] : -# 2351| v2351_3(void) = Call[~String] : func:r2351_2, this:r2351_1 -# 2351| m2351_4(unknown) = ^CallSideEffect : ~m2343_6 -# 2351| m2351_5(unknown) = Chi : total:m2343_6, partial:m2351_4 -# 2351| v2351_6(void) = ^IndirectReadSideEffect[-1] : &:r2351_1, m2343_8 -# 2351| m2351_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2351_1 -# 2351| m2351_8(String) = Chi : total:m2343_8, partial:m2351_7 +# 2345| Block 3 +# 2345| r2345_1(glval) = VariableAddress[s] : +# 2345| r2345_2(glval) = FunctionAddress[~String] : +# 2345| v2345_3(void) = Call[~String] : func:r2345_2, this:r2345_1 +# 2345| m2345_4(unknown) = ^CallSideEffect : ~m2341_6 +# 2345| m2345_5(unknown) = Chi : total:m2341_6, partial:m2345_4 +# 2345| v2345_6(void) = ^IndirectReadSideEffect[-1] : &:r2345_1, m2341_8 +# 2345| m2345_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2345_1 +# 2345| m2345_8(String) = Chi : total:m2341_8, partial:m2345_7 +#-----| Goto -> Block 4 + +# 2348| Block 4 +# 2348| m2348_1(unknown) = Phi : from 3:~m2345_5, from 5:~m2350_5 +# 2348| m2348_2(bool) = Phi : from 3:m2342_1, from 5:m2349_3 +# 2348| r2348_3(glval) = VariableAddress[B] : +# 2348| m2348_4(Bool) = Uninitialized[B] : &:r2348_3 +# 2348| r2348_5(glval) = FunctionAddress[Bool] : +# 2348| r2348_6(glval) = VariableAddress[b] : +# 2348| r2348_7(bool) = Load[b] : &:r2348_6, m2348_2 +# 2348| v2348_8(void) = Call[Bool] : func:r2348_5, this:r2348_3, 0:r2348_7 +# 2348| m2348_9(unknown) = ^CallSideEffect : ~m2348_1 +# 2348| m2348_10(unknown) = Chi : total:m2348_1, partial:m2348_9 +# 2348| m2348_11(Bool) = ^IndirectMayWriteSideEffect[-1] : &:r2348_3 +# 2348| m2348_12(Bool) = Chi : total:m2348_4, partial:m2348_11 +# 2348| r2348_13(glval) = VariableAddress[B] : +# 2348| r2348_14(glval) = FunctionAddress[operator bool] : +# 2348| r2348_15(bool) = Call[operator bool] : func:r2348_14, this:r2348_13 +# 2348| m2348_16(unknown) = ^CallSideEffect : ~m2348_10 +# 2348| m2348_17(unknown) = Chi : total:m2348_10, partial:m2348_16 +# 2348| v2348_18(void) = ^IndirectReadSideEffect[-1] : &:r2348_13, m2348_12 +# 2348| m2348_19(Bool) = ^IndirectMayWriteSideEffect[-1] : &:r2348_13 +# 2348| m2348_20(Bool) = Chi : total:m2348_12, partial:m2348_19 +# 2348| r2348_21(bool) = CopyValue : r2348_15 +# 2348| v2348_22(void) = ConditionalBranch : r2348_21 +#-----| False -> Block 6 +#-----| True -> Block 5 + +# 2349| Block 5 +# 2349| r2349_1(bool) = Constant[0] : +# 2349| r2349_2(glval) = VariableAddress[b] : +# 2349| m2349_3(bool) = Store[b] : &:r2349_2, r2349_1 +# 2350| r2350_1(glval) = VariableAddress[B] : +# 2350| r2350_2(glval) = FunctionAddress[~Bool] : +# 2350| v2350_3(void) = Call[~Bool] : func:r2350_2, this:r2350_1 +# 2350| m2350_4(unknown) = ^CallSideEffect : ~m2348_17 +# 2350| m2350_5(unknown) = Chi : total:m2348_17, partial:m2350_4 +# 2350| v2350_6(void) = ^IndirectReadSideEffect[-1] : &:r2350_1, m2348_20 +# 2350| m2350_7(Bool) = ^IndirectMayWriteSideEffect[-1] : &:r2350_1 +# 2350| m2350_8(Bool) = Chi : total:m2348_20, partial:m2350_7 +#-----| Goto (back edge) -> Block 4 + +# 2350| Block 6 +# 2350| r2350_9(glval) = VariableAddress[B] : +# 2350| r2350_10(glval) = FunctionAddress[~Bool] : +# 2350| v2350_11(void) = Call[~Bool] : func:r2350_10, this:r2350_9 +# 2350| m2350_12(unknown) = ^CallSideEffect : ~m2348_17 +# 2350| m2350_13(unknown) = Chi : total:m2348_17, partial:m2350_12 +# 2350| v2350_14(void) = ^IndirectReadSideEffect[-1] : &:r2350_9, m2348_20 +# 2350| m2350_15(Bool) = ^IndirectMayWriteSideEffect[-1] : &:r2350_9 +# 2350| m2350_16(Bool) = Chi : total:m2348_20, partial:m2350_15 +# 2352| v2352_1(void) = NoOp : +# 2339| v2339_7(void) = ReturnVoid : +# 2339| v2339_8(void) = AliasedUse : ~m2350_13 +# 2339| v2339_9(void) = ExitFunction : + +# 2354| void VoidFunc() +# 2354| Block 0 +# 2354| v2354_1(void) = EnterFunction : +# 2354| m2354_2(unknown) = AliasedDefinition : +# 2354| m2354_3(unknown) = InitializeNonLocal : +# 2354| m2354_4(unknown) = Chi : total:m2354_2, partial:m2354_3 +# 2354| v2354_5(void) = NoOp : +# 2354| v2354_6(void) = ReturnVoid : +# 2354| v2354_7(void) = AliasedUse : m2354_3 +# 2354| v2354_8(void) = ExitFunction : + +# 2356| void IfReturnDestructors(bool) +# 2356| Block 0 +# 2356| v2356_1(void) = EnterFunction : +# 2356| m2356_2(unknown) = AliasedDefinition : +# 2356| m2356_3(unknown) = InitializeNonLocal : +# 2356| m2356_4(unknown) = Chi : total:m2356_2, partial:m2356_3 +# 2356| r2356_5(glval) = VariableAddress[b] : +# 2356| m2356_6(bool) = InitializeParameter[b] : &:r2356_5 +# 2357| r2357_1(glval) = VariableAddress[s] : +# 2357| m2357_2(String) = Uninitialized[s] : &:r2357_1 +# 2357| r2357_3(glval) = FunctionAddress[String] : +# 2357| v2357_4(void) = Call[String] : func:r2357_3, this:r2357_1 +# 2357| m2357_5(unknown) = ^CallSideEffect : ~m2356_4 +# 2357| m2357_6(unknown) = Chi : total:m2356_4, partial:m2357_5 +# 2357| m2357_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2357_1 +# 2357| m2357_8(String) = Chi : total:m2357_2, partial:m2357_7 +# 2358| r2358_1(glval) = VariableAddress[b] : +# 2358| r2358_2(bool) = Load[b] : &:r2358_1, m2356_6 +# 2358| v2358_3(void) = ConditionalBranch : r2358_2 +#-----| False -> Block 3 +#-----| True -> Block 2 + +# 2356| Block 1 +# 2356| m2356_7(unknown) = Phi : from 2:~m2365_5, from 4:~m2365_13, from 5:~m2365_22 +# 2356| v2356_8(void) = ReturnVoid : +# 2356| v2356_9(void) = AliasedUse : ~m2356_7 +# 2356| v2356_10(void) = ExitFunction : + +# 2359| Block 2 +# 2359| v2359_1(void) = NoOp : +# 2365| r2365_1(glval) = VariableAddress[s] : +# 2365| r2365_2(glval) = FunctionAddress[~String] : +# 2365| v2365_3(void) = Call[~String] : func:r2365_2, this:r2365_1 +# 2365| m2365_4(unknown) = ^CallSideEffect : ~m2357_6 +# 2365| m2365_5(unknown) = Chi : total:m2357_6, partial:m2365_4 +# 2365| v2365_6(void) = ^IndirectReadSideEffect[-1] : &:r2365_1, m2357_8 +# 2365| m2365_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2365_1 +# 2365| m2365_8(String) = Chi : total:m2357_8, partial:m2365_7 #-----| Goto -> Block 1 -# 2347| Block 3 -# 2347| r2347_1(glval) = VariableAddress[b] : -# 2347| r2347_2(bool) = Load[b] : &:r2347_1, m2342_6 -# 2347| v2347_3(void) = ConditionalBranch : r2347_2 +# 2361| Block 3 +# 2361| r2361_1(glval) = VariableAddress[b] : +# 2361| r2361_2(bool) = Load[b] : &:r2361_1, m2356_6 +# 2361| v2361_3(void) = ConditionalBranch : r2361_2 #-----| False -> Block 5 #-----| True -> Block 4 -# 2348| Block 4 -# 2348| r2348_1(glval) = FunctionAddress[VoidFunc] : -# 2348| v2348_2(void) = Call[VoidFunc] : func:r2348_1 -# 2348| m2348_3(unknown) = ^CallSideEffect : ~m2343_6 -# 2348| m2348_4(unknown) = Chi : total:m2343_6, partial:m2348_3 -# 2348| v2348_5(void) = NoOp : -# 2351| r2351_9(glval) = VariableAddress[s] : -# 2351| r2351_10(glval) = FunctionAddress[~String] : -# 2351| v2351_11(void) = Call[~String] : func:r2351_10, this:r2351_9 -# 2351| m2351_12(unknown) = ^CallSideEffect : ~m2348_4 -# 2351| m2351_13(unknown) = Chi : total:m2348_4, partial:m2351_12 -# 2351| v2351_14(void) = ^IndirectReadSideEffect[-1] : &:r2351_9, m2343_8 -# 2351| m2351_15(String) = ^IndirectMayWriteSideEffect[-1] : &:r2351_9 -# 2351| m2351_16(String) = Chi : total:m2343_8, partial:m2351_15 +# 2362| Block 4 +# 2362| r2362_1(glval) = FunctionAddress[VoidFunc] : +# 2362| v2362_2(void) = Call[VoidFunc] : func:r2362_1 +# 2362| m2362_3(unknown) = ^CallSideEffect : ~m2357_6 +# 2362| m2362_4(unknown) = Chi : total:m2357_6, partial:m2362_3 +# 2362| v2362_5(void) = NoOp : +# 2365| r2365_9(glval) = VariableAddress[s] : +# 2365| r2365_10(glval) = FunctionAddress[~String] : +# 2365| v2365_11(void) = Call[~String] : func:r2365_10, this:r2365_9 +# 2365| m2365_12(unknown) = ^CallSideEffect : ~m2362_4 +# 2365| m2365_13(unknown) = Chi : total:m2362_4, partial:m2365_12 +# 2365| v2365_14(void) = ^IndirectReadSideEffect[-1] : &:r2365_9, m2357_8 +# 2365| m2365_15(String) = ^IndirectMayWriteSideEffect[-1] : &:r2365_9 +# 2365| m2365_16(String) = Chi : total:m2357_8, partial:m2365_15 #-----| Goto -> Block 1 -# 2350| Block 5 -# 2350| r2350_1(glval) = VariableAddress[s] : -# 2351| v2351_17(void) = NoOp : -# 2351| r2351_18(glval) = VariableAddress[s] : -# 2351| r2351_19(glval) = FunctionAddress[~String] : -# 2351| v2351_20(void) = Call[~String] : func:r2351_19, this:r2351_18 -# 2351| m2351_21(unknown) = ^CallSideEffect : ~m2343_6 -# 2351| m2351_22(unknown) = Chi : total:m2343_6, partial:m2351_21 -# 2351| v2351_23(void) = ^IndirectReadSideEffect[-1] : &:r2351_18, m2343_8 -# 2351| m2351_24(String) = ^IndirectMayWriteSideEffect[-1] : &:r2351_18 -# 2351| m2351_25(String) = Chi : total:m2343_8, partial:m2351_24 +# 2364| Block 5 +# 2364| r2364_1(glval) = VariableAddress[s] : +# 2365| v2365_17(void) = NoOp : +# 2365| r2365_18(glval) = VariableAddress[s] : +# 2365| r2365_19(glval) = FunctionAddress[~String] : +# 2365| v2365_20(void) = Call[~String] : func:r2365_19, this:r2365_18 +# 2365| m2365_21(unknown) = ^CallSideEffect : ~m2357_6 +# 2365| m2365_22(unknown) = Chi : total:m2357_6, partial:m2365_21 +# 2365| v2365_23(void) = ^IndirectReadSideEffect[-1] : &:r2365_18, m2357_8 +# 2365| m2365_24(String) = ^IndirectMayWriteSideEffect[-1] : &:r2365_18 +# 2365| m2365_25(String) = Chi : total:m2357_8, partial:m2365_24 #-----| Goto -> Block 1 -# 2353| int IfReturnDestructors3(bool) -# 2353| Block 0 -# 2353| v2353_1(void) = EnterFunction : -# 2353| m2353_2(unknown) = AliasedDefinition : -# 2353| m2353_3(unknown) = InitializeNonLocal : -# 2353| m2353_4(unknown) = Chi : total:m2353_2, partial:m2353_3 -# 2353| r2353_5(glval) = VariableAddress[b] : -# 2353| m2353_6(bool) = InitializeParameter[b] : &:r2353_5 -# 2354| r2354_1(glval) = VariableAddress[s] : -# 2354| m2354_2(String) = Uninitialized[s] : &:r2354_1 -# 2354| r2354_3(glval) = FunctionAddress[String] : -# 2354| v2354_4(void) = Call[String] : func:r2354_3, this:r2354_1 -# 2354| m2354_5(unknown) = ^CallSideEffect : ~m2353_4 -# 2354| m2354_6(unknown) = Chi : total:m2353_4, partial:m2354_5 -# 2354| m2354_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2354_1 -# 2354| m2354_8(String) = Chi : total:m2354_2, partial:m2354_7 -# 2355| r2355_1(glval) = VariableAddress[b] : -# 2355| r2355_2(bool) = Load[b] : &:r2355_1, m2353_6 -# 2355| v2355_3(void) = ConditionalBranch : r2355_2 +# 2367| int IfReturnDestructors3(bool) +# 2367| Block 0 +# 2367| v2367_1(void) = EnterFunction : +# 2367| m2367_2(unknown) = AliasedDefinition : +# 2367| m2367_3(unknown) = InitializeNonLocal : +# 2367| m2367_4(unknown) = Chi : total:m2367_2, partial:m2367_3 +# 2367| r2367_5(glval) = VariableAddress[b] : +# 2367| m2367_6(bool) = InitializeParameter[b] : &:r2367_5 +# 2368| r2368_1(glval) = VariableAddress[s] : +# 2368| m2368_2(String) = Uninitialized[s] : &:r2368_1 +# 2368| r2368_3(glval) = FunctionAddress[String] : +# 2368| v2368_4(void) = Call[String] : func:r2368_3, this:r2368_1 +# 2368| m2368_5(unknown) = ^CallSideEffect : ~m2367_4 +# 2368| m2368_6(unknown) = Chi : total:m2367_4, partial:m2368_5 +# 2368| m2368_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2368_1 +# 2368| m2368_8(String) = Chi : total:m2368_2, partial:m2368_7 +# 2369| r2369_1(glval) = VariableAddress[b] : +# 2369| r2369_2(bool) = Load[b] : &:r2369_1, m2367_6 +# 2369| v2369_3(void) = ConditionalBranch : r2369_2 #-----| False -> Block 3 #-----| True -> Block 2 -# 2353| Block 1 -# 2353| m2353_7(unknown) = Phi : from 2:~m2359_5, from 3:~m2359_13 -# 2353| m2353_8(int) = Phi : from 2:m2356_3, from 3:m2358_3 -# 2353| r2353_9(glval) = VariableAddress[#return] : -# 2353| v2353_10(void) = ReturnValue : &:r2353_9, m2353_8 -# 2353| v2353_11(void) = AliasedUse : ~m2353_7 -# 2353| v2353_12(void) = ExitFunction : +# 2367| Block 1 +# 2367| m2367_7(unknown) = Phi : from 2:~m2373_5, from 3:~m2373_13 +# 2367| m2367_8(int) = Phi : from 2:m2370_3, from 3:m2372_3 +# 2367| r2367_9(glval) = VariableAddress[#return] : +# 2367| v2367_10(void) = ReturnValue : &:r2367_9, m2367_8 +# 2367| v2367_11(void) = AliasedUse : ~m2367_7 +# 2367| v2367_12(void) = ExitFunction : -# 2356| Block 2 -# 2356| r2356_1(glval) = VariableAddress[#return] : -# 2356| r2356_2(int) = Constant[1] : -# 2356| m2356_3(int) = Store[#return] : &:r2356_1, r2356_2 -# 2359| r2359_1(glval) = VariableAddress[s] : -# 2359| r2359_2(glval) = FunctionAddress[~String] : -# 2359| v2359_3(void) = Call[~String] : func:r2359_2, this:r2359_1 -# 2359| m2359_4(unknown) = ^CallSideEffect : ~m2354_6 -# 2359| m2359_5(unknown) = Chi : total:m2354_6, partial:m2359_4 -# 2359| v2359_6(void) = ^IndirectReadSideEffect[-1] : &:r2359_1, m2354_8 -# 2359| m2359_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2359_1 -# 2359| m2359_8(String) = Chi : total:m2354_8, partial:m2359_7 +# 2370| Block 2 +# 2370| r2370_1(glval) = VariableAddress[#return] : +# 2370| r2370_2(int) = Constant[1] : +# 2370| m2370_3(int) = Store[#return] : &:r2370_1, r2370_2 +# 2373| r2373_1(glval) = VariableAddress[s] : +# 2373| r2373_2(glval) = FunctionAddress[~String] : +# 2373| v2373_3(void) = Call[~String] : func:r2373_2, this:r2373_1 +# 2373| m2373_4(unknown) = ^CallSideEffect : ~m2368_6 +# 2373| m2373_5(unknown) = Chi : total:m2368_6, partial:m2373_4 +# 2373| v2373_6(void) = ^IndirectReadSideEffect[-1] : &:r2373_1, m2368_8 +# 2373| m2373_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2373_1 +# 2373| m2373_8(String) = Chi : total:m2368_8, partial:m2373_7 #-----| Goto -> Block 1 -# 2358| Block 3 -# 2358| r2358_1(glval) = VariableAddress[#return] : -# 2358| r2358_2(int) = Constant[0] : -# 2358| m2358_3(int) = Store[#return] : &:r2358_1, r2358_2 -# 2359| r2359_9(glval) = VariableAddress[s] : -# 2359| r2359_10(glval) = FunctionAddress[~String] : -# 2359| v2359_11(void) = Call[~String] : func:r2359_10, this:r2359_9 -# 2359| m2359_12(unknown) = ^CallSideEffect : ~m2354_6 -# 2359| m2359_13(unknown) = Chi : total:m2354_6, partial:m2359_12 -# 2359| v2359_14(void) = ^IndirectReadSideEffect[-1] : &:r2359_9, m2354_8 -# 2359| m2359_15(String) = ^IndirectMayWriteSideEffect[-1] : &:r2359_9 -# 2359| m2359_16(String) = Chi : total:m2354_8, partial:m2359_15 +# 2372| Block 3 +# 2372| r2372_1(glval) = VariableAddress[#return] : +# 2372| r2372_2(int) = Constant[0] : +# 2372| m2372_3(int) = Store[#return] : &:r2372_1, r2372_2 +# 2373| r2373_9(glval) = VariableAddress[s] : +# 2373| r2373_10(glval) = FunctionAddress[~String] : +# 2373| v2373_11(void) = Call[~String] : func:r2373_10, this:r2373_9 +# 2373| m2373_12(unknown) = ^CallSideEffect : ~m2368_6 +# 2373| m2373_13(unknown) = Chi : total:m2368_6, partial:m2373_12 +# 2373| v2373_14(void) = ^IndirectReadSideEffect[-1] : &:r2373_9, m2368_8 +# 2373| m2373_15(String) = ^IndirectMayWriteSideEffect[-1] : &:r2373_9 +# 2373| m2373_16(String) = Chi : total:m2368_8, partial:m2373_15 #-----| Goto -> Block 1 -# 2361| void VoidReturnDestructors() -# 2361| Block 0 -# 2361| v2361_1(void) = EnterFunction : -# 2361| m2361_2(unknown) = AliasedDefinition : -# 2361| m2361_3(unknown) = InitializeNonLocal : -# 2361| m2361_4(unknown) = Chi : total:m2361_2, partial:m2361_3 -# 2362| r2362_1(glval) = VariableAddress[s] : -# 2362| m2362_2(String) = Uninitialized[s] : &:r2362_1 -# 2362| r2362_3(glval) = FunctionAddress[String] : -# 2362| v2362_4(void) = Call[String] : func:r2362_3, this:r2362_1 -# 2362| m2362_5(unknown) = ^CallSideEffect : ~m2361_4 -# 2362| m2362_6(unknown) = Chi : total:m2361_4, partial:m2362_5 -# 2362| m2362_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2362_1 -# 2362| m2362_8(String) = Chi : total:m2362_2, partial:m2362_7 -# 2363| r2363_1(glval) = FunctionAddress[VoidFunc] : -# 2363| v2363_2(void) = Call[VoidFunc] : func:r2363_1 -# 2363| m2363_3(unknown) = ^CallSideEffect : ~m2362_6 -# 2363| m2363_4(unknown) = Chi : total:m2362_6, partial:m2363_3 -# 2363| v2363_5(void) = NoOp : -# 2364| r2364_1(glval) = VariableAddress[s] : -# 2364| r2364_2(glval) = FunctionAddress[~String] : -# 2364| v2364_3(void) = Call[~String] : func:r2364_2, this:r2364_1 -# 2364| m2364_4(unknown) = ^CallSideEffect : ~m2363_4 -# 2364| m2364_5(unknown) = Chi : total:m2363_4, partial:m2364_4 -# 2364| v2364_6(void) = ^IndirectReadSideEffect[-1] : &:r2364_1, m2362_8 -# 2364| m2364_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2364_1 -# 2364| m2364_8(String) = Chi : total:m2362_8, partial:m2364_7 -# 2361| v2361_5(void) = ReturnVoid : -# 2361| v2361_6(void) = AliasedUse : ~m2364_5 -# 2361| v2361_7(void) = ExitFunction : +# 2375| void VoidReturnDestructors() +# 2375| Block 0 +# 2375| v2375_1(void) = EnterFunction : +# 2375| m2375_2(unknown) = AliasedDefinition : +# 2375| m2375_3(unknown) = InitializeNonLocal : +# 2375| m2375_4(unknown) = Chi : total:m2375_2, partial:m2375_3 +# 2376| r2376_1(glval) = VariableAddress[s] : +# 2376| m2376_2(String) = Uninitialized[s] : &:r2376_1 +# 2376| r2376_3(glval) = FunctionAddress[String] : +# 2376| v2376_4(void) = Call[String] : func:r2376_3, this:r2376_1 +# 2376| m2376_5(unknown) = ^CallSideEffect : ~m2375_4 +# 2376| m2376_6(unknown) = Chi : total:m2375_4, partial:m2376_5 +# 2376| m2376_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2376_1 +# 2376| m2376_8(String) = Chi : total:m2376_2, partial:m2376_7 +# 2377| r2377_1(glval) = FunctionAddress[VoidFunc] : +# 2377| v2377_2(void) = Call[VoidFunc] : func:r2377_1 +# 2377| m2377_3(unknown) = ^CallSideEffect : ~m2376_6 +# 2377| m2377_4(unknown) = Chi : total:m2376_6, partial:m2377_3 +# 2377| v2377_5(void) = NoOp : +# 2378| r2378_1(glval) = VariableAddress[s] : +# 2378| r2378_2(glval) = FunctionAddress[~String] : +# 2378| v2378_3(void) = Call[~String] : func:r2378_2, this:r2378_1 +# 2378| m2378_4(unknown) = ^CallSideEffect : ~m2377_4 +# 2378| m2378_5(unknown) = Chi : total:m2377_4, partial:m2378_4 +# 2378| v2378_6(void) = ^IndirectReadSideEffect[-1] : &:r2378_1, m2376_8 +# 2378| m2378_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2378_1 +# 2378| m2378_8(String) = Chi : total:m2376_8, partial:m2378_7 +# 2375| v2375_5(void) = ReturnVoid : +# 2375| v2375_6(void) = AliasedUse : ~m2378_5 +# 2375| v2375_7(void) = ExitFunction : -# 2374| return_routine_type::VoidToIntMemberFunc return_routine_type::GetVoidToIntFunc() -# 2374| Block 0 -# 2374| v2374_1(void) = EnterFunction : -# 2374| m2374_2(unknown) = AliasedDefinition : -# 2374| m2374_3(unknown) = InitializeNonLocal : -# 2374| m2374_4(unknown) = Chi : total:m2374_2, partial:m2374_3 -# 2376| r2376_1(glval<..:: *>) = VariableAddress[#return] : -# 2376| r2376_2(..()(..)) = FunctionAddress[VoidToInt] : -# 2376| m2376_3(..:: *) = Store[#return] : &:r2376_1, r2376_2 -# 2374| r2374_5(glval<..:: *>) = VariableAddress[#return] : -# 2374| v2374_6(void) = ReturnValue : &:r2374_5, m2376_3 -# 2374| v2374_7(void) = AliasedUse : m2374_3 -# 2374| v2374_8(void) = ExitFunction : +# 2388| return_routine_type::VoidToIntMemberFunc return_routine_type::GetVoidToIntFunc() +# 2388| Block 0 +# 2388| v2388_1(void) = EnterFunction : +# 2388| m2388_2(unknown) = AliasedDefinition : +# 2388| m2388_3(unknown) = InitializeNonLocal : +# 2388| m2388_4(unknown) = Chi : total:m2388_2, partial:m2388_3 +# 2390| r2390_1(glval<..:: *>) = VariableAddress[#return] : +# 2390| r2390_2(..()(..)) = FunctionAddress[VoidToInt] : +# 2390| m2390_3(..:: *) = Store[#return] : &:r2390_1, r2390_2 +# 2388| r2388_5(glval<..:: *>) = VariableAddress[#return] : +# 2388| v2388_6(void) = ReturnValue : &:r2388_5, m2390_3 +# 2388| v2388_7(void) = AliasedUse : m2388_3 +# 2388| v2388_8(void) = ExitFunction : + +# 2395| int small_operation_should_not_be_constant_folded() +# 2395| Block 0 +# 2395| v2395_1(void) = EnterFunction : +# 2395| m2395_2(unknown) = AliasedDefinition : +# 2395| m2395_3(unknown) = InitializeNonLocal : +# 2395| m2395_4(unknown) = Chi : total:m2395_2, partial:m2395_3 +# 2396| r2396_1(glval) = VariableAddress[#return] : +# 2396| r2396_2(int) = Constant[1] : +# 2396| r2396_3(int) = Constant[2] : +# 2396| r2396_4(int) = BitXor : r2396_2, r2396_3 +# 2396| m2396_5(int) = Store[#return] : &:r2396_1, r2396_4 +# 2395| r2395_5(glval) = VariableAddress[#return] : +# 2395| v2395_6(void) = ReturnValue : &:r2395_5, m2396_5 +# 2395| v2395_7(void) = AliasedUse : m2395_3 +# 2395| v2395_8(void) = ExitFunction : + +# 2406| int large_operation_should_be_constant_folded() +# 2406| Block 0 +# 2406| v2406_1(void) = EnterFunction : +# 2406| m2406_2(unknown) = AliasedDefinition : +# 2406| m2406_3(unknown) = InitializeNonLocal : +# 2406| m2406_4(unknown) = Chi : total:m2406_2, partial:m2406_3 +# 2407| r2407_1(glval) = VariableAddress[#return] : +# 2407| r2407_2(int) = Constant[0] : +# 2407| m2407_3(int) = Store[#return] : &:r2407_1, r2407_2 +# 2406| r2406_5(glval) = VariableAddress[#return] : +# 2406| v2406_6(void) = ReturnValue : &:r2406_5, m2407_3 +# 2406| v2406_7(void) = AliasedUse : m2406_3 +# 2406| v2406_8(void) = ExitFunction : + +# 2410| void initialization_with_temp_destructor() +# 2410| Block 0 +# 2410| v2410_1(void) = EnterFunction : +# 2410| m2410_2(unknown) = AliasedDefinition : +# 2410| m2410_3(unknown) = InitializeNonLocal : +# 2410| m2410_4(unknown) = Chi : total:m2410_2, partial:m2410_3 +# 2411| r2411_1(glval) = VariableAddress[x] : +# 2411| r2411_2(glval) = VariableAddress[#temp2411:18] : +# 2411| m2411_3(ClassWithDestructor) = Uninitialized[#temp2411:18] : &:r2411_2 +# 2411| r2411_4(glval) = FunctionAddress[ClassWithDestructor] : +# 2411| v2411_5(void) = Call[ClassWithDestructor] : func:r2411_4, this:r2411_2 +# 2411| m2411_6(unknown) = ^CallSideEffect : ~m2410_4 +# 2411| m2411_7(unknown) = Chi : total:m2410_4, partial:m2411_6 +# 2411| m2411_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2411_2 +# 2411| m2411_9(ClassWithDestructor) = Chi : total:m2411_3, partial:m2411_8 +# 2411| r2411_10(glval) = FunctionAddress[get_x] : +# 2411| r2411_11(char) = Call[get_x] : func:r2411_10, this:r2411_2 +# 2411| m2411_12(unknown) = ^CallSideEffect : ~m2411_7 +# 2411| m2411_13(unknown) = Chi : total:m2411_7, partial:m2411_12 +# 2411| v2411_14(void) = ^IndirectReadSideEffect[-1] : &:r2411_2, m2411_9 +# 2411| m2411_15(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2411_2 +# 2411| m2411_16(ClassWithDestructor) = Chi : total:m2411_9, partial:m2411_15 +# 2411| m2411_17(char) = Store[x] : &:r2411_1, r2411_11 +# 2411| r2411_18(glval) = VariableAddress[x] : +# 2411| r2411_19(char) = Load[x] : &:r2411_18, m2411_17 +# 2411| r2411_20(char) = Constant[0] : +# 2411| r2411_21(bool) = CompareNE : r2411_19, r2411_20 +# 2411| r2411_22(bool) = CopyValue : r2411_21 +# 2411| v2411_23(void) = ConditionalBranch : r2411_22 +#-----| False -> Block 2 +#-----| True -> Block 1 + +# 2412| Block 1 +# 2412| r2412_1(glval) = VariableAddress[x] : +# 2412| r2412_2(char) = Load[x] : &:r2412_1, m2411_17 +# 2412| r2412_3(char) = Constant[1] : +# 2412| r2412_4(char) = Add : r2412_2, r2412_3 +# 2412| m2412_5(char) = Store[x] : &:r2412_1, r2412_4 +#-----| Goto -> Block 2 + +# 2414| Block 2 +# 2414| r2414_1(glval) = VariableAddress[x] : +# 2414| r2414_2(glval) = VariableAddress[#temp2414:18] : +# 2414| m2414_3(ClassWithDestructor) = Uninitialized[#temp2414:18] : &:r2414_2 +# 2414| r2414_4(glval) = FunctionAddress[ClassWithDestructor] : +# 2414| v2414_5(void) = Call[ClassWithDestructor] : func:r2414_4, this:r2414_2 +# 2414| m2414_6(unknown) = ^CallSideEffect : ~m2411_13 +# 2414| m2414_7(unknown) = Chi : total:m2411_13, partial:m2414_6 +# 2414| m2414_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2414_2 +# 2414| m2414_9(ClassWithDestructor) = Chi : total:m2414_3, partial:m2414_8 +# 2414| r2414_10(glval) = FunctionAddress[get_x] : +# 2414| r2414_11(char) = Call[get_x] : func:r2414_10, this:r2414_2 +# 2414| m2414_12(unknown) = ^CallSideEffect : ~m2414_7 +# 2414| m2414_13(unknown) = Chi : total:m2414_7, partial:m2414_12 +# 2414| v2414_14(void) = ^IndirectReadSideEffect[-1] : &:r2414_2, m2414_9 +# 2414| m2414_15(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2414_2 +# 2414| m2414_16(ClassWithDestructor) = Chi : total:m2414_9, partial:m2414_15 +# 2414| m2414_17(char) = Store[x] : &:r2414_1, r2414_11 +# 2414| r2414_18(glval) = VariableAddress[x] : +# 2414| r2414_19(char) = Load[x] : &:r2414_18, m2414_17 +# 2414| r2414_20(char) = Constant[0] : +# 2414| r2414_21(bool) = CompareNE : r2414_19, r2414_20 +# 2414| v2414_22(void) = ConditionalBranch : r2414_21 +#-----| False -> Block 4 +#-----| True -> Block 3 + +# 2415| Block 3 +# 2415| r2415_1(glval) = VariableAddress[x] : +# 2415| r2415_2(char) = Load[x] : &:r2415_1, m2414_17 +# 2415| r2415_3(char) = Constant[1] : +# 2415| r2415_4(char) = Add : r2415_2, r2415_3 +# 2415| m2415_5(char) = Store[x] : &:r2415_1, r2415_4 +#-----| Goto -> Block 4 + +# 2417| Block 4 +# 2417| r2417_1(glval) = VariableAddress[x] : +# 2417| r2417_2(glval) = VariableAddress[#temp2417:28] : +# 2417| m2417_3(ClassWithDestructor) = Uninitialized[#temp2417:28] : &:r2417_2 +# 2417| r2417_4(glval) = FunctionAddress[ClassWithDestructor] : +# 2417| v2417_5(void) = Call[ClassWithDestructor] : func:r2417_4, this:r2417_2 +# 2417| m2417_6(unknown) = ^CallSideEffect : ~m2414_13 +# 2417| m2417_7(unknown) = Chi : total:m2414_13, partial:m2417_6 +# 2417| m2417_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2417_2 +# 2417| m2417_9(ClassWithDestructor) = Chi : total:m2417_3, partial:m2417_8 +# 2417| r2417_10(glval) = FunctionAddress[get_x] : +# 2417| r2417_11(char) = Call[get_x] : func:r2417_10, this:r2417_2 +# 2417| m2417_12(unknown) = ^CallSideEffect : ~m2417_7 +# 2417| m2417_13(unknown) = Chi : total:m2417_7, partial:m2417_12 +# 2417| v2417_14(void) = ^IndirectReadSideEffect[-1] : &:r2417_2, m2417_9 +# 2417| m2417_15(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2417_2 +# 2417| m2417_16(ClassWithDestructor) = Chi : total:m2417_9, partial:m2417_15 +# 2417| m2417_17(char) = Store[x] : &:r2417_1, r2417_11 +# 2417| r2417_18(bool) = Constant[1] : +# 2417| v2417_19(void) = ConditionalBranch : r2417_18 +#-----| False -> Block 13 +#-----| True -> Block 5 + +# 2418| Block 5 +# 2418| r2418_1(glval) = VariableAddress[x] : +# 2418| r2418_2(char) = Load[x] : &:r2418_1, m2417_17 +# 2418| r2418_3(char) = Constant[1] : +# 2418| r2418_4(char) = Add : r2418_2, r2418_3 +# 2418| m2418_5(char) = Store[x] : &:r2418_1, r2418_4 +# 2420| r2420_1(glval) = VariableAddress[x] : +# 2420| r2420_2(glval) = VariableAddress[#temp2420:21] : +# 2420| m2420_3(ClassWithDestructor) = Uninitialized[#temp2420:21] : &:r2420_2 +# 2420| r2420_4(glval) = FunctionAddress[ClassWithDestructor] : +# 2420| v2420_5(void) = Call[ClassWithDestructor] : func:r2420_4, this:r2420_2 +# 2420| m2420_6(unknown) = ^CallSideEffect : ~m2417_13 +# 2420| m2420_7(unknown) = Chi : total:m2417_13, partial:m2420_6 +# 2420| m2420_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2420_2 +# 2420| m2420_9(ClassWithDestructor) = Chi : total:m2420_3, partial:m2420_8 +# 2420| r2420_10(glval) = FunctionAddress[get_x] : +# 2420| r2420_11(char) = Call[get_x] : func:r2420_10, this:r2420_2 +# 2420| m2420_12(unknown) = ^CallSideEffect : ~m2420_7 +# 2420| m2420_13(unknown) = Chi : total:m2420_7, partial:m2420_12 +# 2420| v2420_14(void) = ^IndirectReadSideEffect[-1] : &:r2420_2, m2420_9 +# 2420| m2420_15(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2420_2 +# 2420| m2420_16(ClassWithDestructor) = Chi : total:m2420_9, partial:m2420_15 +# 2420| m2420_17(char) = Store[x] : &:r2420_1, r2420_11 +# 2420| r2420_18(glval) = VariableAddress[x] : +# 2420| r2420_19(char) = Load[x] : &:r2420_18, m2420_17 +# 2420| r2420_20(int) = Convert : r2420_19 +# 2420| r2420_21(int) = CopyValue : r2420_20 +# 2420| v2420_22(void) = Switch : r2420_21 +#-----| Case[97] -> Block 6 +#-----| Default -> Block 7 + +# 2421| Block 6 +# 2421| v2421_1(void) = NoOp : +# 2422| r2422_1(glval) = VariableAddress[x] : +# 2422| r2422_2(char) = Load[x] : &:r2422_1, m2420_17 +# 2422| r2422_3(char) = Constant[1] : +# 2422| r2422_4(char) = Add : r2422_2, r2422_3 +# 2422| m2422_5(char) = Store[x] : &:r2422_1, r2422_4 +#-----| Goto -> Block 7 + +# 2425| Block 7 +# 2425| r2425_1(glval) = VariableAddress[x] : +# 2425| r2425_2(glval) = VariableAddress[#temp2425:21] : +# 2425| m2425_3(ClassWithDestructor) = Uninitialized[#temp2425:21] : &:r2425_2 +# 2425| r2425_4(glval) = FunctionAddress[ClassWithDestructor] : +# 2425| v2425_5(void) = Call[ClassWithDestructor] : func:r2425_4, this:r2425_2 +# 2425| m2425_6(unknown) = ^CallSideEffect : ~m2420_13 +# 2425| m2425_7(unknown) = Chi : total:m2420_13, partial:m2425_6 +# 2425| m2425_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2425_2 +# 2425| m2425_9(ClassWithDestructor) = Chi : total:m2425_3, partial:m2425_8 +# 2425| r2425_10(glval) = FunctionAddress[get_x] : +# 2425| r2425_11(char) = Call[get_x] : func:r2425_10, this:r2425_2 +# 2425| m2425_12(unknown) = ^CallSideEffect : ~m2425_7 +# 2425| m2425_13(unknown) = Chi : total:m2425_7, partial:m2425_12 +# 2425| v2425_14(void) = ^IndirectReadSideEffect[-1] : &:r2425_2, m2425_9 +# 2425| m2425_15(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2425_2 +# 2425| m2425_16(ClassWithDestructor) = Chi : total:m2425_9, partial:m2425_15 +# 2425| m2425_17(char) = Store[x] : &:r2425_1, r2425_11 +# 2425| r2425_18(glval) = VariableAddress[x] : +# 2425| r2425_19(char) = Load[x] : &:r2425_18, m2425_17 +# 2425| r2425_20(int) = Convert : r2425_19 +# 2425| v2425_21(void) = Switch : r2425_20 +#-----| Case[97] -> Block 8 +#-----| Default -> Block 9 + +# 2426| Block 8 +# 2426| v2426_1(void) = NoOp : +# 2427| r2427_1(glval) = VariableAddress[x] : +# 2427| r2427_2(char) = Load[x] : &:r2427_1, m2425_17 +# 2427| r2427_3(char) = Constant[1] : +# 2427| r2427_4(char) = Add : r2427_2, r2427_3 +# 2427| m2427_5(char) = Store[x] : &:r2427_1, r2427_4 +#-----| Goto -> Block 9 + +# 2430| Block 9 +# 2430| r2430_1(glval) = VariableAddress[x] : +# 2430| r2430_2(glval) = VariableAddress[#temp2430:18] : +# 2430| m2430_3(ClassWithDestructor) = Uninitialized[#temp2430:18] : &:r2430_2 +# 2430| r2430_4(glval) = FunctionAddress[ClassWithDestructor] : +# 2430| v2430_5(void) = Call[ClassWithDestructor] : func:r2430_4, this:r2430_2 +# 2430| m2430_6(unknown) = ^CallSideEffect : ~m2425_13 +# 2430| m2430_7(unknown) = Chi : total:m2425_13, partial:m2430_6 +# 2430| m2430_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2430_2 +# 2430| m2430_9(ClassWithDestructor) = Chi : total:m2430_3, partial:m2430_8 +# 2430| r2430_10(glval) = FunctionAddress[get_x] : +# 2430| r2430_11(char) = Call[get_x] : func:r2430_10, this:r2430_2 +# 2430| m2430_12(unknown) = ^CallSideEffect : ~m2430_7 +# 2430| m2430_13(unknown) = Chi : total:m2430_7, partial:m2430_12 +# 2430| v2430_14(void) = ^IndirectReadSideEffect[-1] : &:r2430_2, m2430_9 +# 2430| m2430_15(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2430_2 +# 2430| m2430_16(ClassWithDestructor) = Chi : total:m2430_9, partial:m2430_15 +# 2430| m2430_17(char) = Store[x] : &:r2430_1, r2430_11 +# 2430| r2430_18(glval &&>) = VariableAddress[(__range)] : +# 2430| r2430_19(glval>) = VariableAddress[#temp2430:58] : +# 2430| m2430_20(vector) = Uninitialized[#temp2430:58] : &:r2430_19 +# 2430| r2430_21(glval) = FunctionAddress[vector] : +# 2430| r2430_22(glval) = VariableAddress[x] : +# 2430| r2430_23(char) = Load[x] : &:r2430_22, m2430_17 +# 2430| v2430_24(void) = Call[vector] : func:r2430_21, this:r2430_19, 0:r2430_23 +# 2430| m2430_25(unknown) = ^CallSideEffect : ~m2430_13 +# 2430| m2430_26(unknown) = Chi : total:m2430_13, partial:m2430_25 +# 2430| m2430_27(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2430_19 +# 2430| m2430_28(vector) = Chi : total:m2430_20, partial:m2430_27 +# 2430| r2430_29(vector &) = CopyValue : r2430_19 +# 2430| m2430_30(vector &&) = Store[(__range)] : &:r2430_18, r2430_29 +# 2430| r2430_31(glval>) = VariableAddress[(__begin)] : +# 2430| r2430_32(glval &&>) = VariableAddress[(__range)] : +# 2430| r2430_33(vector &&) = Load[(__range)] : &:r2430_32, m2430_30 +#-----| r0_1(glval>) = CopyValue : r2430_33 +#-----| r0_2(glval>) = Convert : r0_1 +# 2430| r2430_34(glval) = FunctionAddress[begin] : +# 2430| r2430_35(iterator) = Call[begin] : func:r2430_34, this:r0_2 +#-----| v0_3(void) = ^IndirectReadSideEffect[-1] : &:r0_2, m2430_28 +# 2430| m2430_36(iterator) = Store[(__begin)] : &:r2430_31, r2430_35 +# 2430| r2430_37(glval>) = VariableAddress[(__end)] : +# 2430| r2430_38(glval &&>) = VariableAddress[(__range)] : +# 2430| r2430_39(vector &&) = Load[(__range)] : &:r2430_38, m2430_30 +#-----| r0_4(glval>) = CopyValue : r2430_39 +#-----| r0_5(glval>) = Convert : r0_4 +# 2430| r2430_40(glval) = FunctionAddress[end] : +# 2430| r2430_41(iterator) = Call[end] : func:r2430_40, this:r0_5 +#-----| v0_6(void) = ^IndirectReadSideEffect[-1] : &:r0_5, m2430_28 +# 2430| m2430_42(iterator) = Store[(__end)] : &:r2430_37, r2430_41 +#-----| Goto -> Block 10 + +# 2430| Block 10 +# 2430| m2430_43(iterator) = Phi : from 9:m2430_36, from 11:m2430_73 +# 2430| m2430_44(unknown) = Phi : from 9:~m2430_26, from 11:~m2430_70 +# 2430| r2430_45(glval>) = VariableAddress[(__begin)] : +#-----| r0_7(glval>) = Convert : r2430_45 +# 2430| r2430_46(glval) = FunctionAddress[operator!=] : +#-----| r0_8(glval>) = VariableAddress[#temp0:0] : +#-----| m0_9(iterator) = Uninitialized[#temp0:0] : &:r0_8 +# 2430| r2430_47(glval) = FunctionAddress[iterator] : +# 2430| r2430_48(glval>) = VariableAddress[(__end)] : +#-----| r0_10(glval>) = Convert : r2430_48 +#-----| r0_11(iterator &) = CopyValue : r0_10 +# 2430| v2430_49(void) = Call[iterator] : func:r2430_47, this:r0_8, 0:r0_11 +# 2430| m2430_50(unknown) = ^CallSideEffect : ~m2430_44 +# 2430| m2430_51(unknown) = Chi : total:m2430_44, partial:m2430_50 +#-----| v0_12(void) = ^BufferReadSideEffect[0] : &:r0_11, ~m2430_42 +# 2430| m2430_52(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r0_8 +# 2430| m2430_53(iterator) = Chi : total:m0_9, partial:m2430_52 +#-----| r0_13(iterator) = Load[#temp0:0] : &:r0_8, m2430_53 +# 2430| r2430_54(bool) = Call[operator!=] : func:r2430_46, this:r0_7, 0:r0_13 +# 2430| m2430_55(unknown) = ^CallSideEffect : ~m2430_51 +# 2430| m2430_56(unknown) = Chi : total:m2430_51, partial:m2430_55 +#-----| v0_14(void) = ^IndirectReadSideEffect[-1] : &:r0_7, m2430_43 +# 2430| v2430_57(void) = ConditionalBranch : r2430_54 +#-----| False -> Block 12 +#-----| True -> Block 11 + +# 2430| Block 11 +# 2430| r2430_58(glval) = VariableAddress[y] : +# 2430| r2430_59(glval>) = VariableAddress[(__begin)] : +#-----| r0_15(glval>) = Convert : r2430_59 +# 2430| r2430_60(glval) = FunctionAddress[operator*] : +# 2430| r2430_61(char &) = Call[operator*] : func:r2430_60, this:r0_15 +# 2430| m2430_62(unknown) = ^CallSideEffect : ~m2430_56 +# 2430| m2430_63(unknown) = Chi : total:m2430_56, partial:m2430_62 +#-----| v0_16(void) = ^IndirectReadSideEffect[-1] : &:r0_15, m2430_43 +# 2430| r2430_64(char) = Load[?] : &:r2430_61, ~m2430_63 +# 2430| m2430_65(char) = Store[y] : &:r2430_58, r2430_64 +# 2431| r2431_1(glval) = VariableAddress[x] : +# 2431| r2431_2(char) = Load[x] : &:r2431_1, m2430_17 +# 2431| r2431_3(int) = Convert : r2431_2 +# 2431| r2431_4(glval) = VariableAddress[y] : +# 2431| r2431_5(char) = Load[y] : &:r2431_4, m2430_65 +# 2431| r2431_6(int) = Convert : r2431_5 +# 2431| r2431_7(int) = Add : r2431_6, r2431_3 +# 2431| r2431_8(char) = Convert : r2431_7 +# 2431| m2431_9(char) = Store[y] : &:r2431_4, r2431_8 +# 2430| r2430_66(glval>) = VariableAddress[(__begin)] : +# 2430| r2430_67(glval) = FunctionAddress[operator++] : +# 2430| r2430_68(iterator &) = Call[operator++] : func:r2430_67, this:r2430_66 +# 2430| m2430_69(unknown) = ^CallSideEffect : ~m2430_63 +# 2430| m2430_70(unknown) = Chi : total:m2430_63, partial:m2430_69 +# 2430| v2430_71(void) = ^IndirectReadSideEffect[-1] : &:r2430_66, m2430_43 +# 2430| m2430_72(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r2430_66 +# 2430| m2430_73(iterator) = Chi : total:m2430_43, partial:m2430_72 +# 2430| r2430_74(glval>) = CopyValue : r2430_68 +#-----| Goto (back edge) -> Block 10 + +# 2432| Block 12 +# 2432| v2432_1(void) = NoOp : +# 2410| v2410_5(void) = ReturnVoid : +# 2410| v2410_6(void) = AliasedUse : ~m2430_56 +# 2410| v2410_7(void) = ExitFunction : + +# 2410| Block 13 +# 2410| v2410_8(void) = Unreached : + +# 2434| void param_with_destructor_by_value(ClassWithDestructor) +# 2434| Block 0 +# 2434| v2434_1(void) = EnterFunction : +# 2434| m2434_2(unknown) = AliasedDefinition : +# 2434| m2434_3(unknown) = InitializeNonLocal : +# 2434| m2434_4(unknown) = Chi : total:m2434_2, partial:m2434_3 +# 2434| r2434_5(glval) = VariableAddress[c] : +# 2434| m2434_6(ClassWithDestructor) = InitializeParameter[c] : &:r2434_5 +# 2436| v2436_1(void) = NoOp : +# 2434| v2434_7(void) = ReturnVoid : +# 2434| v2434_8(void) = AliasedUse : m2434_3 +# 2434| v2434_9(void) = ExitFunction : + +# 2438| void param_with_destructor_by_pointer(ClassWithDestructor*) +# 2438| Block 0 +# 2438| v2438_1(void) = EnterFunction : +# 2438| m2438_2(unknown) = AliasedDefinition : +# 2438| m2438_3(unknown) = InitializeNonLocal : +# 2438| m2438_4(unknown) = Chi : total:m2438_2, partial:m2438_3 +# 2438| r2438_5(glval) = VariableAddress[c] : +# 2438| m2438_6(ClassWithDestructor *) = InitializeParameter[c] : &:r2438_5 +# 2438| r2438_7(ClassWithDestructor *) = Load[c] : &:r2438_5, m2438_6 +# 2438| m2438_8(unknown) = InitializeIndirection[c] : &:r2438_7 +# 2440| v2440_1(void) = NoOp : +# 2438| v2438_9(void) = ReturnIndirection[c] : &:r2438_7, m2438_8 +# 2438| v2438_10(void) = ReturnVoid : +# 2438| v2438_11(void) = AliasedUse : m2438_3 +# 2438| v2438_12(void) = ExitFunction : + +# 2442| void param_with_destructor_by_ref(ClassWithDestructor&) +# 2442| Block 0 +# 2442| v2442_1(void) = EnterFunction : +# 2442| m2442_2(unknown) = AliasedDefinition : +# 2442| m2442_3(unknown) = InitializeNonLocal : +# 2442| m2442_4(unknown) = Chi : total:m2442_2, partial:m2442_3 +# 2442| r2442_5(glval) = VariableAddress[c] : +# 2442| m2442_6(ClassWithDestructor &) = InitializeParameter[c] : &:r2442_5 +# 2442| r2442_7(ClassWithDestructor &) = Load[c] : &:r2442_5, m2442_6 +# 2442| m2442_8(unknown) = InitializeIndirection[c] : &:r2442_7 +# 2444| v2444_1(void) = NoOp : +# 2442| v2442_9(void) = ReturnIndirection[c] : &:r2442_7, m2442_8 +# 2442| v2442_10(void) = ReturnVoid : +# 2442| v2442_11(void) = AliasedUse : m2442_3 +# 2442| v2442_12(void) = ExitFunction : + +# 2446| void param_with_destructor_by_rref(ClassWithDestructor&&) +# 2446| Block 0 +# 2446| v2446_1(void) = EnterFunction : +# 2446| m2446_2(unknown) = AliasedDefinition : +# 2446| m2446_3(unknown) = InitializeNonLocal : +# 2446| m2446_4(unknown) = Chi : total:m2446_2, partial:m2446_3 +# 2446| r2446_5(glval) = VariableAddress[c] : +# 2446| m2446_6(ClassWithDestructor &&) = InitializeParameter[c] : &:r2446_5 +# 2446| r2446_7(ClassWithDestructor &&) = Load[c] : &:r2446_5, m2446_6 +# 2446| m2446_8(unknown) = InitializeIndirection[c] : &:r2446_7 +# 2448| v2448_1(void) = NoOp : +# 2446| v2446_9(void) = ReturnIndirection[c] : &:r2446_7, m2446_8 +# 2446| v2446_10(void) = ReturnVoid : +# 2446| v2446_11(void) = AliasedUse : m2446_3 +# 2446| v2446_12(void) = ExitFunction : perf-regression.cpp: # 6| void Big::Big() diff --git a/cpp/ql/test/library-tests/ir/ir/ir.cpp b/cpp/ql/test/library-tests/ir/ir/ir.cpp index 492f8c71c11..7c8d0b1296b 100644 --- a/cpp/ql/test/library-tests/ir/ir/ir.cpp +++ b/cpp/ql/test/library-tests/ir/ir/ir.cpp @@ -1933,6 +1933,20 @@ namespace missing_declaration_entries { Bar2 b; b.two_missing_variable_declaration_entries(); } + + template struct Bar3 { + + int two_more_missing_variable_declaration_entries() { + extern int g; + int z(float); + return g; + } + }; + + void test3() { + Bar3 b; + b.two_more_missing_variable_declaration_entries(); + } } template T global_template = 42; @@ -2378,4 +2392,59 @@ namespace return_routine_type { } +int small_operation_should_not_be_constant_folded() { + return 1 ^ 2; +} + +#define BINOP2(x) (x ^ x) +#define BINOP4(x) (BINOP2(x) ^ BINOP2(x)) +#define BINOP8(x) (BINOP4(x) ^ BINOP4(x)) +#define BINOP16(x) (BINOP8(x) ^ BINOP8(x)) +#define BINOP32(x) (BINOP16(x) ^ BINOP16(x)) +#define BINOP64(x) (BINOP32(x) ^ BINOP32(x)) + +int large_operation_should_be_constant_folded() { + return BINOP64(1); +} + +void initialization_with_temp_destructor() { + if (char x = ClassWithDestructor().get_x()) + x++; + + if (char x = ClassWithDestructor().get_x(); x) + x++; + + if constexpr (char x = ClassWithDestructor().get_x(); initialization_with_destructor_bool) + x++; + + switch(char x = ClassWithDestructor().get_x()) { + case 'a': + x++; + } + + switch(char x = ClassWithDestructor().get_x(); x) { + case 'a': + x++; + } + + for(char x = ClassWithDestructor().get_x(); char y : std::vector(x)) + y += x; +} + +void param_with_destructor_by_value(ClassWithDestructor c) { + // The call to ~ClassWithDestructor::ClassWithDestructor() seems to be missing here. +} + +void param_with_destructor_by_pointer(ClassWithDestructor* c) { + // No destructor call should be here +} + +void param_with_destructor_by_ref(ClassWithDestructor& c) { + // No destructor call should be here +} + +void param_with_destructor_by_rref(ClassWithDestructor&& c) { + // No destructor call should be here +} + // semmle-extractor-options: -std=c++20 --clang diff --git a/cpp/ql/test/library-tests/ir/ir/operand_locations.expected b/cpp/ql/test/library-tests/ir/ir/operand_locations.expected index ad4cfdb1e7c..2799fc28e94 100644 --- a/cpp/ql/test/library-tests/ir/ir/operand_locations.expected +++ b/cpp/ql/test/library-tests/ir/ir/operand_locations.expected @@ -805,7 +805,7 @@ | destructors_for_temps.cpp:23:68:23:72 | Unary | r23_27 | | destructors_for_temps.cpp:29:6:29:15 | ChiPartial | partial:m29_3 | | destructors_for_temps.cpp:29:6:29:15 | ChiTotal | total:m29_2 | -| destructors_for_temps.cpp:29:6:29:15 | SideEffect | ~m30_6 | +| destructors_for_temps.cpp:29:6:29:15 | SideEffect | ~m31_6 | | destructors_for_temps.cpp:30:33:30:34 | Address | &:r30_1 | | destructors_for_temps.cpp:30:38:30:70 | CallTarget | func:r30_3 | | destructors_for_temps.cpp:30:38:30:70 | ChiPartial | partial:m30_5 | @@ -815,10 +815,21 @@ | destructors_for_temps.cpp:30:38:30:72 | Address | &:r30_2 | | destructors_for_temps.cpp:30:38:30:72 | StoreValue | r30_9 | | destructors_for_temps.cpp:30:38:30:72 | Unary | r30_2 | +| destructors_for_temps.cpp:30:38:30:72 | Unary | r30_2 | | destructors_for_temps.cpp:30:38:30:72 | Unary | r30_8 | +| destructors_for_temps.cpp:31:1:31:1 | Address | &:r31_2 | +| destructors_for_temps.cpp:31:1:31:1 | Address | &:r31_2 | +| destructors_for_temps.cpp:31:1:31:1 | Arg(this) | this:r31_2 | +| destructors_for_temps.cpp:31:1:31:1 | CallTarget | func:r31_3 | +| destructors_for_temps.cpp:31:1:31:1 | ChiPartial | partial:m31_5 | +| destructors_for_temps.cpp:31:1:31:1 | ChiPartial | partial:m31_8 | +| destructors_for_temps.cpp:31:1:31:1 | ChiTotal | total:m30_6 | +| destructors_for_temps.cpp:31:1:31:1 | ChiTotal | total:m30_7 | +| destructors_for_temps.cpp:31:1:31:1 | SideEffect | m30_7 | +| destructors_for_temps.cpp:31:1:31:1 | SideEffect | ~m30_6 | | destructors_for_temps.cpp:33:6:33:15 | ChiPartial | partial:m33_3 | | destructors_for_temps.cpp:33:6:33:15 | ChiTotal | total:m33_2 | -| destructors_for_temps.cpp:33:6:33:15 | SideEffect | ~m36_6 | +| destructors_for_temps.cpp:33:6:33:15 | SideEffect | ~m36_14 | | destructors_for_temps.cpp:34:26:34:26 | Address | &:r34_1 | | destructors_for_temps.cpp:34:26:34:26 | Address | &:r34_1 | | destructors_for_temps.cpp:34:26:34:26 | Arg(this) | this:r34_1 | @@ -837,17 +848,28 @@ | destructors_for_temps.cpp:35:39:35:73 | Address | &:r35_2 | | destructors_for_temps.cpp:35:39:35:73 | StoreValue | r35_9 | | destructors_for_temps.cpp:35:39:35:73 | Unary | r35_2 | +| destructors_for_temps.cpp:35:39:35:73 | Unary | r35_2 | | destructors_for_temps.cpp:35:39:35:73 | Unary | r35_8 | | destructors_for_temps.cpp:36:1:36:1 | Address | &:r36_2 | | destructors_for_temps.cpp:36:1:36:1 | Address | &:r36_2 | +| destructors_for_temps.cpp:36:1:36:1 | Address | &:r36_10 | +| destructors_for_temps.cpp:36:1:36:1 | Address | &:r36_10 | | destructors_for_temps.cpp:36:1:36:1 | Arg(this) | this:r36_2 | +| destructors_for_temps.cpp:36:1:36:1 | Arg(this) | this:r36_10 | | destructors_for_temps.cpp:36:1:36:1 | CallTarget | func:r36_3 | +| destructors_for_temps.cpp:36:1:36:1 | CallTarget | func:r36_11 | | destructors_for_temps.cpp:36:1:36:1 | ChiPartial | partial:m36_5 | | destructors_for_temps.cpp:36:1:36:1 | ChiPartial | partial:m36_8 | +| destructors_for_temps.cpp:36:1:36:1 | ChiPartial | partial:m36_13 | +| destructors_for_temps.cpp:36:1:36:1 | ChiPartial | partial:m36_16 | | destructors_for_temps.cpp:36:1:36:1 | ChiTotal | total:m34_8 | | destructors_for_temps.cpp:36:1:36:1 | ChiTotal | total:m35_6 | +| destructors_for_temps.cpp:36:1:36:1 | ChiTotal | total:m35_7 | +| destructors_for_temps.cpp:36:1:36:1 | ChiTotal | total:m36_6 | | destructors_for_temps.cpp:36:1:36:1 | SideEffect | m34_8 | +| destructors_for_temps.cpp:36:1:36:1 | SideEffect | m35_7 | | destructors_for_temps.cpp:36:1:36:1 | SideEffect | ~m35_6 | +| destructors_for_temps.cpp:36:1:36:1 | SideEffect | ~m36_6 | | destructors_for_temps.cpp:38:6:38:15 | ChiPartial | partial:m38_3 | | destructors_for_temps.cpp:38:6:38:15 | ChiTotal | total:m38_2 | | destructors_for_temps.cpp:38:6:38:15 | SideEffect | ~m39_5 | @@ -1127,6 +1149,7 @@ | file://:0:0:0:0 | Address | &:r0_2 | | file://:0:0:0:0 | Address | &:r0_2 | | file://:0:0:0:0 | Address | &:r0_2 | +| file://:0:0:0:0 | Address | &:r0_2 | | file://:0:0:0:0 | Address | &:r0_3 | | file://:0:0:0:0 | Address | &:r0_3 | | file://:0:0:0:0 | Address | &:r0_3 | @@ -1176,6 +1199,7 @@ | file://:0:0:0:0 | Address | &:r0_5 | | file://:0:0:0:0 | Address | &:r0_5 | | file://:0:0:0:0 | Address | &:r0_5 | +| file://:0:0:0:0 | Address | &:r0_5 | | file://:0:0:0:0 | Address | &:r0_6 | | file://:0:0:0:0 | Address | &:r0_6 | | file://:0:0:0:0 | Address | &:r0_6 | @@ -1186,6 +1210,10 @@ | file://:0:0:0:0 | Address | &:r0_7 | | file://:0:0:0:0 | Address | &:r0_7 | | file://:0:0:0:0 | Address | &:r0_7 | +| file://:0:0:0:0 | Address | &:r0_7 | +| file://:0:0:0:0 | Address | &:r0_8 | +| file://:0:0:0:0 | Address | &:r0_8 | +| file://:0:0:0:0 | Address | &:r0_8 | | file://:0:0:0:0 | Address | &:r0_8 | | file://:0:0:0:0 | Address | &:r0_8 | | file://:0:0:0:0 | Address | &:r0_8 | @@ -1208,6 +1236,7 @@ | 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_11 | | file://:0:0:0:0 | Address | &:r0_13 | | file://:0:0:0:0 | Address | &:r0_13 | | file://:0:0:0:0 | Address | &:r0_13 | @@ -1217,6 +1246,7 @@ | file://:0:0:0:0 | Address | &:r0_15 | | file://:0:0:0:0 | Address | &:r0_15 | | file://:0:0:0:0 | Address | &:r0_15 | +| file://:0:0:0:0 | Address | &:r0_15 | | file://:0:0:0:0 | Address | &:r0_16 | | file://:0:0:0:0 | Address | &:r0_16 | | file://:0:0:0:0 | Address | &:r0_16 | @@ -1265,6 +1295,8 @@ | file://:0:0:0:0 | Arg(0) | 0:r0_11 | | file://:0:0:0:0 | Arg(0) | 0:r0_11 | | file://:0:0:0:0 | Arg(0) | 0:r0_11 | +| file://:0:0:0:0 | Arg(0) | 0:r0_11 | +| file://:0:0:0:0 | Arg(0) | 0:r0_13 | | file://:0:0:0:0 | Arg(0) | 0:r0_13 | | file://:0:0:0:0 | Arg(0) | 0:r0_13 | | file://:0:0:0:0 | Arg(0) | 0:r0_15 | @@ -1314,9 +1346,9 @@ | file://:0:0:0:0 | ChiTotal | total:m1765_19 | | file://:0:0:0:0 | ChiTotal | total:m1883_8 | | file://:0:0:0:0 | ChiTotal | total:m1888_8 | -| file://:0:0:0:0 | ChiTotal | total:m2222_6 | -| file://:0:0:0:0 | ChiTotal | total:m2226_4 | -| file://:0:0:0:0 | ChiTotal | total:m2233_6 | +| file://:0:0:0:0 | ChiTotal | total:m2236_6 | +| file://:0:0:0:0 | ChiTotal | total:m2240_4 | +| file://:0:0:0:0 | ChiTotal | total:m2247_6 | | file://:0:0:0:0 | Left | r0_2 | | file://:0:0:0:0 | Left | r0_4 | | file://:0:0:0:0 | Left | r0_7 | @@ -1357,12 +1389,13 @@ | file://:0:0:0:0 | Load | m1883_6 | | file://:0:0:0:0 | Load | m1883_6 | | file://:0:0:0:0 | Load | m1888_6 | -| file://:0:0:0:0 | Load | m2062_6 | -| file://:0:0:0:0 | Load | m2201_40 | -| file://:0:0:0:0 | Load | m2204_40 | -| file://:0:0:0:0 | Load | m2210_36 | +| file://:0:0:0:0 | Load | m2076_6 | | file://:0:0:0:0 | Load | m2215_40 | -| file://:0:0:0:0 | Load | m2293_46 | +| file://:0:0:0:0 | Load | m2218_40 | +| file://:0:0:0:0 | Load | m2224_36 | +| file://:0:0:0:0 | Load | m2229_40 | +| file://:0:0:0:0 | Load | m2307_46 | +| file://:0:0:0:0 | Load | m2430_53 | | file://:0:0:0:0 | Load | ~m0_4 | | file://:0:0:0:0 | Load | ~m1493_6 | | file://:0:0:0:0 | Load | ~m1761_10 | @@ -1392,26 +1425,30 @@ | file://:0:0:0:0 | SideEffect | m1127_19 | | file://:0:0:0:0 | SideEffect | m1133_19 | | file://:0:0:0:0 | SideEffect | m1133_19 | -| file://:0:0:0:0 | SideEffect | m2201_13 | -| file://:0:0:0:0 | SideEffect | m2201_13 | -| file://:0:0:0:0 | SideEffect | m2201_30 | -| file://:0:0:0:0 | SideEffect | m2201_30 | -| file://:0:0:0:0 | SideEffect | m2204_13 | -| file://:0:0:0:0 | SideEffect | m2204_13 | -| file://:0:0:0:0 | SideEffect | m2204_30 | -| file://:0:0:0:0 | SideEffect | m2204_30 | -| file://:0:0:0:0 | SideEffect | m2210_9 | -| file://:0:0:0:0 | SideEffect | m2210_9 | -| file://:0:0:0:0 | SideEffect | m2210_26 | -| file://:0:0:0:0 | SideEffect | m2210_26 | | file://:0:0:0:0 | SideEffect | m2215_13 | | file://:0:0:0:0 | SideEffect | m2215_13 | | file://:0:0:0:0 | SideEffect | m2215_30 | | file://:0:0:0:0 | SideEffect | m2215_30 | -| file://:0:0:0:0 | SideEffect | m2293_21 | -| file://:0:0:0:0 | SideEffect | m2293_21 | -| file://:0:0:0:0 | SideEffect | m2293_36 | -| file://:0:0:0:0 | SideEffect | m2293_36 | +| file://:0:0:0:0 | SideEffect | m2218_13 | +| file://:0:0:0:0 | SideEffect | m2218_13 | +| file://:0:0:0:0 | SideEffect | m2218_30 | +| file://:0:0:0:0 | SideEffect | m2218_30 | +| file://:0:0:0:0 | SideEffect | m2224_9 | +| file://:0:0:0:0 | SideEffect | m2224_9 | +| file://:0:0:0:0 | SideEffect | m2224_26 | +| file://:0:0:0:0 | SideEffect | m2224_26 | +| file://:0:0:0:0 | SideEffect | m2229_13 | +| file://:0:0:0:0 | SideEffect | m2229_13 | +| file://:0:0:0:0 | SideEffect | m2229_30 | +| file://:0:0:0:0 | SideEffect | m2229_30 | +| file://:0:0:0:0 | SideEffect | m2307_21 | +| file://:0:0:0:0 | SideEffect | m2307_21 | +| file://:0:0:0:0 | SideEffect | m2307_36 | +| file://:0:0:0:0 | SideEffect | m2307_36 | +| file://:0:0:0:0 | SideEffect | m2430_28 | +| file://:0:0:0:0 | SideEffect | m2430_28 | +| file://:0:0:0:0 | SideEffect | m2430_43 | +| file://:0:0:0:0 | SideEffect | m2430_43 | | file://:0:0:0:0 | SideEffect | ~m0_4 | | file://:0:0:0:0 | SideEffect | ~m0_4 | | file://:0:0:0:0 | SideEffect | ~m0_4 | @@ -1430,14 +1467,15 @@ | file://:0:0:0:0 | SideEffect | ~m1289_4 | | file://:0:0:0:0 | SideEffect | ~m1496_6 | | file://:0:0:0:0 | SideEffect | ~m1888_8 | -| file://:0:0:0:0 | SideEffect | ~m2201_29 | -| file://:0:0:0:0 | SideEffect | ~m2204_29 | -| file://:0:0:0:0 | SideEffect | ~m2210_25 | | file://:0:0:0:0 | SideEffect | ~m2215_29 | -| file://:0:0:0:0 | SideEffect | ~m2222_6 | -| file://:0:0:0:0 | SideEffect | ~m2226_4 | -| file://:0:0:0:0 | SideEffect | ~m2233_6 | -| file://:0:0:0:0 | SideEffect | ~m2293_35 | +| file://:0:0:0:0 | SideEffect | ~m2218_29 | +| file://:0:0:0:0 | SideEffect | ~m2224_25 | +| file://:0:0:0:0 | SideEffect | ~m2229_29 | +| file://:0:0:0:0 | SideEffect | ~m2236_6 | +| file://:0:0:0:0 | SideEffect | ~m2240_4 | +| file://:0:0:0:0 | SideEffect | ~m2247_6 | +| file://:0:0:0:0 | SideEffect | ~m2307_35 | +| file://:0:0:0:0 | SideEffect | ~m2430_42 | | file://:0:0:0:0 | StoreValue | r0_1 | | file://:0:0:0:0 | StoreValue | r0_1 | | file://:0:0:0:0 | StoreValue | r0_1 | @@ -1469,10 +1507,12 @@ | file://:0:0:0:0 | Unary | r0_1 | | file://:0:0:0:0 | Unary | r0_1 | | file://:0:0:0:0 | Unary | r0_1 | +| file://:0:0:0:0 | Unary | r0_1 | | file://:0:0:0:0 | Unary | r0_2 | | file://:0:0:0:0 | Unary | r0_3 | | file://:0:0:0:0 | Unary | r0_4 | | file://:0:0:0:0 | Unary | r0_4 | +| file://:0:0:0:0 | Unary | r0_4 | | file://:0:0:0:0 | Unary | r0_5 | | file://:0:0:0:0 | Unary | r0_5 | | file://:0:0:0:0 | Unary | r0_6 | @@ -1497,6 +1537,7 @@ | 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_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 | @@ -5613,60 +5654,100 @@ | ir.cpp:1011:12:1011:12 | Unary | r1011_3 | | ir.cpp:1015:6:1015:19 | ChiPartial | partial:m1015_3 | | ir.cpp:1015:6:1015:19 | ChiTotal | total:m1015_2 | -| ir.cpp:1015:6:1015:19 | SideEffect | ~m1020_5 | +| ir.cpp:1015:6:1015:19 | SideEffect | ~m1020_13 | | ir.cpp:1016:3:1016:35 | CallTarget | func:r1016_1 | | ir.cpp:1016:3:1016:35 | ChiPartial | partial:m1016_4 | | ir.cpp:1016:3:1016:35 | ChiTotal | total:m1015_4 | | ir.cpp:1016:3:1016:35 | SideEffect | ~m1015_4 | | ir.cpp:1016:10:1016:35 | Arg(0) | 0:r1016_2 | -| ir.cpp:1017:3:1017:38 | CallTarget | func:r1017_1 | +| ir.cpp:1017:3:1017:38 | CallTarget | func:r1017_2 | +| ir.cpp:1017:3:1017:38 | CallTarget | func:r1017_9 | | ir.cpp:1017:3:1017:38 | ChiPartial | partial:m1017_4 | +| ir.cpp:1017:3:1017:38 | ChiPartial | partial:m1017_12 | | ir.cpp:1017:3:1017:38 | ChiTotal | total:m1016_5 | +| ir.cpp:1017:3:1017:38 | ChiTotal | total:m1017_8 | | ir.cpp:1017:3:1017:38 | SideEffect | ~m1016_5 | -| ir.cpp:1017:10:1017:38 | Arg(0) | 0:r1017_2 | +| ir.cpp:1017:3:1017:38 | SideEffect | ~m1017_8 | +| ir.cpp:1017:10:1017:38 | Address | &:r1017_1 | +| ir.cpp:1017:10:1017:38 | Address | &:r1017_1 | +| ir.cpp:1017:10:1017:38 | Arg(0) | 0:r1017_10 | +| ir.cpp:1017:10:1017:38 | ChiPartial | partial:m1017_7 | +| ir.cpp:1017:10:1017:38 | ChiTotal | total:m1017_5 | +| ir.cpp:1017:10:1017:38 | SideEffect | ~m1017_5 | +| ir.cpp:1017:10:1017:38 | Unary | r1017_1 | | ir.cpp:1018:3:1018:44 | CallTarget | func:r1018_1 | | ir.cpp:1018:3:1018:44 | ChiPartial | partial:m1018_4 | -| ir.cpp:1018:3:1018:44 | ChiTotal | total:m1017_5 | -| ir.cpp:1018:3:1018:44 | SideEffect | ~m1017_5 | +| ir.cpp:1018:3:1018:44 | ChiTotal | total:m1017_13 | +| ir.cpp:1018:3:1018:44 | SideEffect | ~m1017_13 | | ir.cpp:1018:10:1018:44 | Arg(0) | 0:r1018_2 | | ir.cpp:1019:3:1019:43 | CallTarget | func:r1019_1 | | ir.cpp:1019:3:1019:43 | ChiPartial | partial:m1019_4 | | ir.cpp:1019:3:1019:43 | ChiTotal | total:m1018_5 | | ir.cpp:1019:3:1019:43 | SideEffect | ~m1018_5 | | ir.cpp:1019:10:1019:43 | Arg(0) | 0:r1019_2 | -| ir.cpp:1020:3:1020:47 | CallTarget | func:r1020_1 | +| ir.cpp:1020:3:1020:47 | CallTarget | func:r1020_2 | +| ir.cpp:1020:3:1020:47 | CallTarget | func:r1020_9 | | ir.cpp:1020:3:1020:47 | ChiPartial | partial:m1020_4 | +| ir.cpp:1020:3:1020:47 | ChiPartial | partial:m1020_12 | | ir.cpp:1020:3:1020:47 | ChiTotal | total:m1019_5 | +| ir.cpp:1020:3:1020:47 | ChiTotal | total:m1020_8 | | ir.cpp:1020:3:1020:47 | SideEffect | ~m1019_5 | -| ir.cpp:1020:10:1020:47 | Arg(0) | 0:r1020_2 | +| ir.cpp:1020:3:1020:47 | SideEffect | ~m1020_8 | +| ir.cpp:1020:10:1020:47 | Address | &:r1020_1 | +| ir.cpp:1020:10:1020:47 | Address | &:r1020_1 | +| ir.cpp:1020:10:1020:47 | Arg(0) | 0:r1020_10 | +| ir.cpp:1020:10:1020:47 | ChiPartial | partial:m1020_7 | +| ir.cpp:1020:10:1020:47 | ChiTotal | total:m1020_5 | +| ir.cpp:1020:10:1020:47 | SideEffect | ~m1020_5 | +| ir.cpp:1020:10:1020:47 | Unary | r1020_1 | | ir.cpp:1024:6:1024:24 | ChiPartial | partial:m1024_3 | | ir.cpp:1024:6:1024:24 | ChiTotal | total:m1024_2 | -| ir.cpp:1024:6:1024:24 | SideEffect | ~m1029_5 | +| ir.cpp:1024:6:1024:24 | SideEffect | ~m1029_13 | | ir.cpp:1025:3:1025:37 | CallTarget | func:r1025_1 | | ir.cpp:1025:3:1025:37 | ChiPartial | partial:m1025_4 | | ir.cpp:1025:3:1025:37 | ChiTotal | total:m1024_4 | | ir.cpp:1025:3:1025:37 | SideEffect | ~m1024_4 | | ir.cpp:1025:12:1025:37 | Arg(0) | 0:r1025_2 | -| ir.cpp:1026:3:1026:40 | CallTarget | func:r1026_1 | +| ir.cpp:1026:3:1026:40 | CallTarget | func:r1026_2 | +| ir.cpp:1026:3:1026:40 | CallTarget | func:r1026_9 | | ir.cpp:1026:3:1026:40 | ChiPartial | partial:m1026_4 | +| ir.cpp:1026:3:1026:40 | ChiPartial | partial:m1026_12 | | ir.cpp:1026:3:1026:40 | ChiTotal | total:m1025_5 | +| ir.cpp:1026:3:1026:40 | ChiTotal | total:m1026_8 | | ir.cpp:1026:3:1026:40 | SideEffect | ~m1025_5 | -| ir.cpp:1026:12:1026:40 | Arg(0) | 0:r1026_2 | +| ir.cpp:1026:3:1026:40 | SideEffect | ~m1026_8 | +| ir.cpp:1026:12:1026:40 | Address | &:r1026_1 | +| ir.cpp:1026:12:1026:40 | Address | &:r1026_1 | +| ir.cpp:1026:12:1026:40 | Arg(0) | 0:r1026_10 | +| ir.cpp:1026:12:1026:40 | ChiPartial | partial:m1026_7 | +| ir.cpp:1026:12:1026:40 | ChiTotal | total:m1026_5 | +| ir.cpp:1026:12:1026:40 | SideEffect | ~m1026_5 | +| ir.cpp:1026:12:1026:40 | Unary | r1026_1 | | ir.cpp:1027:3:1027:46 | CallTarget | func:r1027_1 | | ir.cpp:1027:3:1027:46 | ChiPartial | partial:m1027_4 | -| ir.cpp:1027:3:1027:46 | ChiTotal | total:m1026_5 | -| ir.cpp:1027:3:1027:46 | SideEffect | ~m1026_5 | +| ir.cpp:1027:3:1027:46 | ChiTotal | total:m1026_13 | +| ir.cpp:1027:3:1027:46 | SideEffect | ~m1026_13 | | ir.cpp:1027:12:1027:46 | Arg(0) | 0:r1027_2 | | ir.cpp:1028:3:1028:45 | CallTarget | func:r1028_1 | | ir.cpp:1028:3:1028:45 | ChiPartial | partial:m1028_4 | | ir.cpp:1028:3:1028:45 | ChiTotal | total:m1027_5 | | ir.cpp:1028:3:1028:45 | SideEffect | ~m1027_5 | | ir.cpp:1028:12:1028:45 | Arg(0) | 0:r1028_2 | -| ir.cpp:1029:3:1029:49 | CallTarget | func:r1029_1 | +| ir.cpp:1029:3:1029:49 | CallTarget | func:r1029_2 | +| ir.cpp:1029:3:1029:49 | CallTarget | func:r1029_9 | | ir.cpp:1029:3:1029:49 | ChiPartial | partial:m1029_4 | +| ir.cpp:1029:3:1029:49 | ChiPartial | partial:m1029_12 | | ir.cpp:1029:3:1029:49 | ChiTotal | total:m1028_5 | +| ir.cpp:1029:3:1029:49 | ChiTotal | total:m1029_8 | | ir.cpp:1029:3:1029:49 | SideEffect | ~m1028_5 | -| ir.cpp:1029:12:1029:49 | Arg(0) | 0:r1029_2 | +| ir.cpp:1029:3:1029:49 | SideEffect | ~m1029_8 | +| ir.cpp:1029:12:1029:49 | Address | &:r1029_1 | +| ir.cpp:1029:12:1029:49 | Address | &:r1029_1 | +| ir.cpp:1029:12:1029:49 | Arg(0) | 0:r1029_10 | +| ir.cpp:1029:12:1029:49 | ChiPartial | partial:m1029_7 | +| ir.cpp:1029:12:1029:49 | ChiTotal | total:m1029_5 | +| ir.cpp:1029:12:1029:49 | SideEffect | ~m1029_5 | +| ir.cpp:1029:12:1029:49 | Unary | r1029_1 | | ir.cpp:1034:6:1034:20 | ChiPartial | partial:m1034_3 | | ir.cpp:1034:6:1034:20 | ChiTotal | total:m1034_2 | | ir.cpp:1034:6:1034:20 | SideEffect | m1034_3 | @@ -7257,7 +7338,7 @@ | ir.cpp:1376:5:1376:15 | StoreValue | r1376_2 | | ir.cpp:1414:6:1414:21 | ChiPartial | partial:m1414_3 | | ir.cpp:1414:6:1414:21 | ChiTotal | total:m1414_2 | -| ir.cpp:1414:6:1414:21 | SideEffect | ~m1426_6 | +| ir.cpp:1414:6:1414:21 | SideEffect | ~m1426_14 | | ir.cpp:1415:12:1415:12 | Address | &:r1415_1 | | ir.cpp:1415:16:1415:34 | CallTarget | func:r1415_2 | | ir.cpp:1415:16:1415:34 | ChiPartial | partial:m1415_4 | @@ -7273,6 +7354,7 @@ | ir.cpp:1416:24:1416:44 | Address | &:r1416_2 | | ir.cpp:1416:24:1416:44 | StoreValue | r1416_9 | | ir.cpp:1416:24:1416:44 | Unary | r1416_2 | +| ir.cpp:1416:24:1416:44 | Unary | r1416_2 | | ir.cpp:1416:24:1416:44 | Unary | r1416_8 | | ir.cpp:1418:5:1418:13 | CallTarget | func:r1418_1 | | ir.cpp:1418:5:1418:13 | ChiPartial | partial:m1418_6 | @@ -7384,17 +7466,27 @@ | ir.cpp:1425:5:1425:30 | Address | &:r1425_1 | | ir.cpp:1426:1:1426:1 | Address | &:r1426_2 | | ir.cpp:1426:1:1426:1 | Address | &:r1426_2 | +| ir.cpp:1426:1:1426:1 | Address | &:r1426_10 | +| ir.cpp:1426:1:1426:1 | Address | &:r1426_10 | | ir.cpp:1426:1:1426:1 | Arg(this) | this:r1426_2 | +| ir.cpp:1426:1:1426:1 | Arg(this) | this:r1426_10 | | ir.cpp:1426:1:1426:1 | CallTarget | func:r1426_3 | +| ir.cpp:1426:1:1426:1 | CallTarget | func:r1426_11 | | ir.cpp:1426:1:1426:1 | ChiPartial | partial:m1426_5 | | ir.cpp:1426:1:1426:1 | ChiPartial | partial:m1426_8 | +| ir.cpp:1426:1:1426:1 | ChiPartial | partial:m1426_13 | +| ir.cpp:1426:1:1426:1 | ChiPartial | partial:m1426_16 | | ir.cpp:1426:1:1426:1 | ChiTotal | total:m1415_6 | +| ir.cpp:1426:1:1426:1 | ChiTotal | total:m1416_7 | | ir.cpp:1426:1:1426:1 | ChiTotal | total:m1425_5 | +| ir.cpp:1426:1:1426:1 | ChiTotal | total:m1426_6 | | ir.cpp:1426:1:1426:1 | SideEffect | m1415_6 | +| ir.cpp:1426:1:1426:1 | SideEffect | m1416_7 | | ir.cpp:1426:1:1426:1 | SideEffect | ~m1425_5 | +| ir.cpp:1426:1:1426:1 | SideEffect | ~m1426_6 | | ir.cpp:1428:6:1428:30 | ChiPartial | partial:m1428_3 | | ir.cpp:1428:6:1428:30 | ChiTotal | total:m1428_2 | -| ir.cpp:1428:6:1428:30 | SideEffect | ~m1438_14 | +| ir.cpp:1428:6:1428:30 | SideEffect | ~m1438_22 | | ir.cpp:1429:21:1429:21 | Address | &:r1429_1 | | ir.cpp:1429:25:1429:52 | CallTarget | func:r1429_2 | | ir.cpp:1429:25:1429:52 | ChiPartial | partial:m1429_4 | @@ -7410,6 +7502,7 @@ | ir.cpp:1430:33:1430:62 | Address | &:r1430_2 | | ir.cpp:1430:33:1430:62 | StoreValue | r1430_9 | | ir.cpp:1430:33:1430:62 | Unary | r1430_2 | +| ir.cpp:1430:33:1430:62 | Unary | r1430_2 | | ir.cpp:1430:33:1430:62 | Unary | r1430_8 | | ir.cpp:1431:21:1431:22 | Address | &:r1431_1 | | ir.cpp:1432:5:1432:13 | CallTarget | func:r1432_1 | @@ -7470,22 +7563,32 @@ | ir.cpp:1438:1:1438:1 | Address | &:r1438_2 | | ir.cpp:1438:1:1438:1 | Address | &:r1438_10 | | ir.cpp:1438:1:1438:1 | Address | &:r1438_10 | +| ir.cpp:1438:1:1438:1 | Address | &:r1438_18 | +| ir.cpp:1438:1:1438:1 | Address | &:r1438_18 | | ir.cpp:1438:1:1438:1 | Arg(this) | this:r1438_2 | | ir.cpp:1438:1:1438:1 | Arg(this) | this:r1438_10 | +| ir.cpp:1438:1:1438:1 | Arg(this) | this:r1438_18 | | ir.cpp:1438:1:1438:1 | CallTarget | func:r1438_3 | | ir.cpp:1438:1:1438:1 | CallTarget | func:r1438_11 | +| ir.cpp:1438:1:1438:1 | CallTarget | func:r1438_19 | | ir.cpp:1438:1:1438:1 | ChiPartial | partial:m1438_5 | | ir.cpp:1438:1:1438:1 | ChiPartial | partial:m1438_8 | | ir.cpp:1438:1:1438:1 | ChiPartial | partial:m1438_13 | | ir.cpp:1438:1:1438:1 | ChiPartial | partial:m1438_16 | +| ir.cpp:1438:1:1438:1 | ChiPartial | partial:m1438_21 | +| ir.cpp:1438:1:1438:1 | ChiPartial | partial:m1438_24 | | ir.cpp:1438:1:1438:1 | ChiTotal | total:m1429_6 | +| ir.cpp:1438:1:1438:1 | ChiTotal | total:m1430_7 | | ir.cpp:1438:1:1438:1 | ChiTotal | total:m1431_2 | | ir.cpp:1438:1:1438:1 | ChiTotal | total:m1437_5 | | ir.cpp:1438:1:1438:1 | ChiTotal | total:m1438_6 | +| ir.cpp:1438:1:1438:1 | ChiTotal | total:m1438_14 | | ir.cpp:1438:1:1438:1 | SideEffect | m1429_6 | +| ir.cpp:1438:1:1438:1 | SideEffect | m1430_7 | | ir.cpp:1438:1:1438:1 | SideEffect | m1431_2 | | ir.cpp:1438:1:1438:1 | SideEffect | ~m1437_5 | | ir.cpp:1438:1:1438:1 | SideEffect | ~m1438_6 | +| ir.cpp:1438:1:1438:1 | SideEffect | ~m1438_14 | | ir.cpp:1440:6:1440:31 | ChiPartial | partial:m1440_3 | | ir.cpp:1440:6:1440:31 | ChiTotal | total:m1440_2 | | ir.cpp:1440:6:1440:31 | SideEffect | ~m1450_6 | @@ -9706,1653 +9809,1408 @@ | ir.cpp:1934:11:1934:50 | ChiPartial | partial:m1934_4 | | ir.cpp:1934:11:1934:50 | ChiTotal | total:m1932_4 | | ir.cpp:1934:11:1934:50 | SideEffect | ~m1932_4 | -| ir.cpp:1938:24:1938:24 | Address | &:r1938_3 | -| ir.cpp:1938:24:1938:24 | Address | &:r1938_3 | -| ir.cpp:1938:24:1938:24 | SideEffect | ~m1938_6 | -| ir.cpp:1938:24:1938:24 | SideEffect | ~m1938_6 | -| ir.cpp:1938:42:1938:43 | ChiPartial | partial:m1938_5 | -| ir.cpp:1938:42:1938:43 | ChiPartial | partial:m1938_5 | -| ir.cpp:1938:42:1938:43 | ChiTotal | total:m1938_2 | -| ir.cpp:1938:42:1938:43 | ChiTotal | total:m1938_2 | -| ir.cpp:1938:42:1938:43 | StoreValue | r1938_4 | -| ir.cpp:1938:42:1938:43 | StoreValue | r1938_4 | -| ir.cpp:1940:5:1940:28 | Address | &:r1940_5 | -| ir.cpp:1940:5:1940:28 | ChiPartial | partial:m1940_3 | -| ir.cpp:1940:5:1940:28 | ChiTotal | total:m1940_2 | -| ir.cpp:1940:5:1940:28 | Load | m1943_8 | -| ir.cpp:1940:5:1940:28 | SideEffect | m1940_3 | -| ir.cpp:1941:9:1941:17 | Address | &:r1941_1 | -| ir.cpp:1941:21:1941:40 | Address | &:r1941_2 | -| ir.cpp:1941:21:1941:40 | Load | ~m1940_3 | -| ir.cpp:1941:21:1941:40 | StoreValue | r1941_3 | -| ir.cpp:1942:10:1942:19 | Address | &:r1942_1 | -| ir.cpp:1942:23:1942:43 | Address | &:r1942_2 | -| ir.cpp:1942:23:1942:43 | Load | ~m1940_3 | -| ir.cpp:1942:23:1942:43 | StoreValue | r1942_3 | -| ir.cpp:1943:5:1943:39 | Address | &:r1943_1 | -| ir.cpp:1943:12:1943:20 | Address | &:r1943_2 | -| ir.cpp:1943:12:1943:20 | Left | r1943_3 | -| ir.cpp:1943:12:1943:20 | Load | m1941_4 | -| ir.cpp:1943:12:1943:38 | StoreValue | r1943_7 | -| ir.cpp:1943:24:1943:38 | Right | r1943_6 | -| ir.cpp:1943:29:1943:38 | Address | &:r1943_4 | -| ir.cpp:1943:29:1943:38 | Load | m1942_4 | -| ir.cpp:1943:29:1943:38 | Unary | r1943_5 | -| ir.cpp:1948:5:1948:16 | Address | &:r1948_7 | -| ir.cpp:1948:5:1948:16 | ChiPartial | partial:m1948_3 | -| ir.cpp:1948:5:1948:16 | ChiTotal | total:m1948_2 | -| ir.cpp:1948:5:1948:16 | Load | m1950_4 | -| ir.cpp:1948:5:1948:16 | SideEffect | m1948_3 | -| ir.cpp:1948:22:1948:22 | Address | &:r1948_5 | -| ir.cpp:1949:9:1949:9 | Address | &:r1949_1 | -| ir.cpp:1949:9:1949:9 | Left | r1949_2 | -| ir.cpp:1949:9:1949:9 | Load | m1948_6 | -| ir.cpp:1949:9:1949:14 | Condition | r1949_4 | -| ir.cpp:1949:13:1949:14 | Right | r1949_3 | -| ir.cpp:1950:9:1950:17 | Address | &:r1950_1 | -| ir.cpp:1950:16:1950:16 | Address | &:r1950_2 | -| ir.cpp:1950:16:1950:16 | Load | m1948_6 | -| ir.cpp:1950:16:1950:16 | StoreValue | r1950_3 | -| ir.cpp:1952:9:1952:20 | CallTarget | func:r1952_1 | -| ir.cpp:1952:9:1952:20 | ChiPartial | partial:m1952_3 | -| ir.cpp:1952:9:1952:20 | ChiTotal | total:m1948_4 | -| ir.cpp:1952:9:1952:20 | SideEffect | ~m1948_4 | -| ir.cpp:1956:5:1956:17 | Address | &:r1956_8 | -| ir.cpp:1956:5:1956:17 | ChiPartial | partial:m1956_3 | -| ir.cpp:1956:5:1956:17 | ChiTotal | total:m1956_2 | -| ir.cpp:1956:5:1956:17 | Load | m1960_4 | -| ir.cpp:1956:5:1956:17 | SideEffect | m1956_3 | -| ir.cpp:1956:23:1956:23 | Address | &:r1956_5 | -| ir.cpp:1957:9:1957:9 | Address | &:r1957_1 | -| ir.cpp:1957:9:1957:9 | Left | r1957_2 | -| ir.cpp:1957:9:1957:9 | Load | m1956_6 | -| ir.cpp:1957:9:1957:14 | Condition | r1957_4 | -| ir.cpp:1957:13:1957:14 | Right | r1957_3 | -| ir.cpp:1958:9:1958:20 | CallTarget | func:r1958_1 | -| ir.cpp:1958:9:1958:20 | ChiPartial | partial:m1958_3 | -| ir.cpp:1958:9:1958:20 | ChiTotal | total:m1956_4 | -| ir.cpp:1958:9:1958:20 | SideEffect | ~m1956_4 | -| ir.cpp:1960:5:1960:13 | Address | &:r1960_1 | -| ir.cpp:1960:12:1960:12 | Address | &:r1960_2 | -| ir.cpp:1960:12:1960:12 | Load | m1956_6 | -| ir.cpp:1960:12:1960:12 | StoreValue | r1960_3 | -| ir.cpp:1963:5:1963:19 | Address | &:r1963_7 | -| ir.cpp:1963:5:1963:19 | ChiPartial | partial:m1963_3 | -| ir.cpp:1963:5:1963:19 | ChiTotal | total:m1963_2 | -| ir.cpp:1963:5:1963:19 | Load | m1964_4 | -| ir.cpp:1963:5:1963:19 | SideEffect | m1963_3 | -| ir.cpp:1963:25:1963:25 | Address | &:r1963_5 | -| ir.cpp:1964:5:1964:13 | Address | &:r1964_1 | -| ir.cpp:1964:12:1964:12 | Address | &:r1964_2 | -| ir.cpp:1964:12:1964:12 | Load | m1963_6 | -| ir.cpp:1964:12:1964:12 | StoreValue | r1964_3 | -| ir.cpp:1967:6:1967:43 | ChiPartial | partial:m1967_3 | -| ir.cpp:1967:6:1967:43 | ChiTotal | total:m1967_2 | -| ir.cpp:1967:6:1967:43 | SideEffect | ~m1975_6 | -| ir.cpp:1968:7:1968:7 | Address | &:r1968_1 | -| ir.cpp:1968:7:1968:7 | Address | &:r1968_1 | -| ir.cpp:1968:7:1968:7 | Arg(this) | this:r1968_1 | -| ir.cpp:1968:7:1968:7 | CallTarget | func:r1968_3 | -| ir.cpp:1968:7:1968:7 | ChiPartial | partial:m1968_5 | -| ir.cpp:1968:7:1968:7 | ChiPartial | partial:m1968_7 | -| ir.cpp:1968:7:1968:7 | ChiTotal | total:m1967_4 | -| ir.cpp:1968:7:1968:7 | ChiTotal | total:m1968_2 | -| ir.cpp:1968:7:1968:7 | SideEffect | ~m1967_4 | -| ir.cpp:1969:9:1969:9 | Address | &:r1969_1 | -| ir.cpp:1970:5:1970:5 | Address | &:r1970_7 | -| ir.cpp:1970:11:1970:30 | CallTarget | func:r1970_2 | -| ir.cpp:1970:11:1970:30 | ChiPartial | partial:m1970_5 | -| ir.cpp:1970:11:1970:30 | ChiTotal | total:m1968_6 | -| ir.cpp:1970:11:1970:30 | SideEffect | ~m1968_6 | -| ir.cpp:1970:11:1970:30 | StoreValue | r1970_4 | -| ir.cpp:1970:32:1970:33 | Arg(0) | 0:r1970_3 | +| ir.cpp:1939:13:1939:13 | Address | &:r1939_5 | +| ir.cpp:1939:13:1939:13 | Address | &:r1939_5 | +| ir.cpp:1939:13:1939:13 | Address | &:r1939_7 | +| ir.cpp:1939:13:1939:13 | Address | &:r1939_7 | +| ir.cpp:1939:13:1939:13 | Address | &:r1939_10 | +| ir.cpp:1939:13:1939:13 | ChiPartial | partial:m1939_3 | +| ir.cpp:1939:13:1939:13 | ChiTotal | total:m1939_2 | +| ir.cpp:1939:13:1939:13 | Load | m1939_6 | +| ir.cpp:1939:13:1939:13 | Load | m1942_4 | +| ir.cpp:1939:13:1939:13 | SideEffect | m1939_3 | +| ir.cpp:1939:13:1939:13 | SideEffect | m1939_8 | +| ir.cpp:1942:13:1942:21 | Address | &:r1942_1 | +| ir.cpp:1942:20:1942:20 | Address | &:r1942_2 | +| ir.cpp:1942:20:1942:20 | Load | ~m1939_3 | +| ir.cpp:1942:20:1942:20 | StoreValue | r1942_3 | +| ir.cpp:1946:10:1946:14 | ChiPartial | partial:m1946_3 | +| ir.cpp:1946:10:1946:14 | ChiTotal | total:m1946_2 | +| ir.cpp:1946:10:1946:14 | SideEffect | ~m1948_5 | +| ir.cpp:1947:19:1947:19 | Address | &:r1947_1 | +| ir.cpp:1948:9:1948:9 | Address | &:r1948_1 | +| ir.cpp:1948:9:1948:9 | Address | &:r1948_1 | +| ir.cpp:1948:9:1948:9 | Arg(this) | this:r1948_1 | +| ir.cpp:1948:9:1948:9 | ChiPartial | partial:m1948_7 | +| ir.cpp:1948:9:1948:9 | ChiTotal | total:m1947_2 | +| ir.cpp:1948:9:1948:9 | SideEffect | m1947_2 | +| ir.cpp:1948:11:1948:55 | CallTarget | func:r1948_2 | +| ir.cpp:1948:11:1948:55 | ChiPartial | partial:m1948_4 | +| ir.cpp:1948:11:1948:55 | ChiTotal | total:m1946_4 | +| ir.cpp:1948:11:1948:55 | SideEffect | ~m1946_4 | +| ir.cpp:1952:24:1952:24 | Address | &:r1952_3 | +| ir.cpp:1952:24:1952:24 | Address | &:r1952_3 | +| ir.cpp:1952:24:1952:24 | SideEffect | ~m1952_6 | +| ir.cpp:1952:24:1952:24 | SideEffect | ~m1952_6 | +| ir.cpp:1952:42:1952:43 | ChiPartial | partial:m1952_5 | +| ir.cpp:1952:42:1952:43 | ChiPartial | partial:m1952_5 | +| ir.cpp:1952:42:1952:43 | ChiTotal | total:m1952_2 | +| ir.cpp:1952:42:1952:43 | ChiTotal | total:m1952_2 | +| ir.cpp:1952:42:1952:43 | StoreValue | r1952_4 | +| ir.cpp:1952:42:1952:43 | StoreValue | r1952_4 | +| ir.cpp:1954:5:1954:28 | Address | &:r1954_5 | +| ir.cpp:1954:5:1954:28 | ChiPartial | partial:m1954_3 | +| ir.cpp:1954:5:1954:28 | ChiTotal | total:m1954_2 | +| ir.cpp:1954:5:1954:28 | Load | m1957_8 | +| ir.cpp:1954:5:1954:28 | SideEffect | m1954_3 | +| ir.cpp:1955:9:1955:17 | Address | &:r1955_1 | +| ir.cpp:1955:21:1955:40 | Address | &:r1955_2 | +| ir.cpp:1955:21:1955:40 | Load | ~m1954_3 | +| ir.cpp:1955:21:1955:40 | StoreValue | r1955_3 | +| ir.cpp:1956:10:1956:19 | Address | &:r1956_1 | +| ir.cpp:1956:23:1956:43 | Address | &:r1956_2 | +| ir.cpp:1956:23:1956:43 | Load | ~m1954_3 | +| ir.cpp:1956:23:1956:43 | StoreValue | r1956_3 | +| ir.cpp:1957:5:1957:39 | Address | &:r1957_1 | +| ir.cpp:1957:12:1957:20 | Address | &:r1957_2 | +| ir.cpp:1957:12:1957:20 | Left | r1957_3 | +| ir.cpp:1957:12:1957:20 | Load | m1955_4 | +| ir.cpp:1957:12:1957:38 | StoreValue | r1957_7 | +| ir.cpp:1957:24:1957:38 | Right | r1957_6 | +| ir.cpp:1957:29:1957:38 | Address | &:r1957_4 | +| ir.cpp:1957:29:1957:38 | Load | m1956_4 | +| ir.cpp:1957:29:1957:38 | Unary | r1957_5 | +| ir.cpp:1962:5:1962:16 | Address | &:r1962_7 | +| ir.cpp:1962:5:1962:16 | ChiPartial | partial:m1962_3 | +| ir.cpp:1962:5:1962:16 | ChiTotal | total:m1962_2 | +| ir.cpp:1962:5:1962:16 | Load | m1964_4 | +| ir.cpp:1962:5:1962:16 | SideEffect | m1962_3 | +| ir.cpp:1962:22:1962:22 | Address | &:r1962_5 | +| ir.cpp:1963:9:1963:9 | Address | &:r1963_1 | +| ir.cpp:1963:9:1963:9 | Left | r1963_2 | +| ir.cpp:1963:9:1963:9 | Load | m1962_6 | +| ir.cpp:1963:9:1963:14 | Condition | r1963_4 | +| ir.cpp:1963:13:1963:14 | Right | r1963_3 | +| ir.cpp:1964:9:1964:17 | Address | &:r1964_1 | +| ir.cpp:1964:16:1964:16 | Address | &:r1964_2 | +| ir.cpp:1964:16:1964:16 | Load | m1962_6 | +| ir.cpp:1964:16:1964:16 | StoreValue | r1964_3 | +| ir.cpp:1966:9:1966:20 | CallTarget | func:r1966_1 | +| ir.cpp:1966:9:1966:20 | ChiPartial | partial:m1966_3 | +| ir.cpp:1966:9:1966:20 | ChiTotal | total:m1962_4 | +| ir.cpp:1966:9:1966:20 | SideEffect | ~m1962_4 | +| ir.cpp:1970:5:1970:17 | Address | &:r1970_8 | +| ir.cpp:1970:5:1970:17 | ChiPartial | partial:m1970_3 | +| ir.cpp:1970:5:1970:17 | ChiTotal | total:m1970_2 | +| ir.cpp:1970:5:1970:17 | Load | m1974_4 | +| ir.cpp:1970:5:1970:17 | SideEffect | m1970_3 | +| ir.cpp:1970:23:1970:23 | Address | &:r1970_5 | | ir.cpp:1971:9:1971:9 | Address | &:r1971_1 | -| ir.cpp:1972:5:1972:5 | Address | &:r1972_6 | -| ir.cpp:1972:9:1972:31 | CallTarget | func:r1972_1 | -| ir.cpp:1972:9:1972:31 | ChiPartial | partial:m1972_4 | -| ir.cpp:1972:9:1972:31 | ChiTotal | total:m1970_6 | -| ir.cpp:1972:9:1972:31 | SideEffect | ~m1970_6 | -| ir.cpp:1972:9:1972:31 | StoreValue | r1972_3 | -| ir.cpp:1972:33:1972:34 | Arg(0) | 0:r1972_2 | -| ir.cpp:1973:9:1973:9 | Address | &:r1973_1 | -| ir.cpp:1974:5:1974:5 | Address | &:r1974_6 | -| ir.cpp:1974:9:1974:23 | CallTarget | func:r1974_1 | -| ir.cpp:1974:9:1974:23 | ChiPartial | partial:m1974_4 | -| ir.cpp:1974:9:1974:23 | ChiTotal | total:m1972_5 | -| ir.cpp:1974:9:1974:23 | SideEffect | ~m1972_5 | -| ir.cpp:1974:9:1974:23 | StoreValue | r1974_3 | -| ir.cpp:1974:25:1974:26 | Arg(0) | 0:r1974_2 | -| ir.cpp:1975:1:1975:1 | Address | &:r1975_2 | -| ir.cpp:1975:1:1975:1 | Address | &:r1975_2 | -| ir.cpp:1975:1:1975:1 | Arg(this) | this:r1975_2 | -| ir.cpp:1975:1:1975:1 | CallTarget | func:r1975_3 | -| ir.cpp:1975:1:1975:1 | ChiPartial | partial:m1975_5 | -| ir.cpp:1975:1:1975:1 | ChiPartial | partial:m1975_8 | -| ir.cpp:1975:1:1975:1 | ChiTotal | total:m1968_8 | -| ir.cpp:1975:1:1975:1 | ChiTotal | total:m1974_5 | -| ir.cpp:1975:1:1975:1 | SideEffect | m1968_8 | -| ir.cpp:1975:1:1975:1 | SideEffect | ~m1974_5 | -| ir.cpp:1977:6:1977:23 | ChiPartial | partial:m1977_3 | -| ir.cpp:1977:6:1977:23 | ChiTotal | total:m1977_2 | -| ir.cpp:1977:6:1977:23 | SideEffect | m1977_3 | -| ir.cpp:1978:7:1978:7 | Address | &:r1978_1 | -| ir.cpp:1978:10:1978:10 | Address | &:r1978_3 | -| ir.cpp:1979:3:1979:3 | Address | &:r1979_5 | -| ir.cpp:1979:7:1979:7 | Address | &:r1979_2 | -| ir.cpp:1979:7:1979:7 | Address | &:r1979_2 | -| ir.cpp:1979:7:1979:12 | Load | m1979_3 | -| ir.cpp:1979:7:1979:12 | StoreValue | r1979_4 | -| ir.cpp:1979:11:1979:12 | StoreValue | r1979_1 | -| ir.cpp:1982:6:1982:38 | ChiPartial | partial:m1982_3 | -| ir.cpp:1982:6:1982:38 | ChiTotal | total:m1982_2 | -| ir.cpp:1982:6:1982:38 | SideEffect | m1982_3 | -| ir.cpp:1983:7:1983:7 | Address | &:r1983_1 | -| ir.cpp:1983:10:1983:10 | Address | &:r1983_3 | -| ir.cpp:1983:13:1983:14 | StoreValue | r1983_4 | -| ir.cpp:1984:3:1984:3 | Address | &:r1984_7 | -| ir.cpp:1984:8:1984:8 | Address | &:r1984_2 | -| ir.cpp:1984:8:1984:8 | Address | &:r1984_2 | -| ir.cpp:1984:8:1984:8 | Address | &:r1984_2 | -| ir.cpp:1984:8:1984:8 | Left | r1984_3 | -| ir.cpp:1984:8:1984:8 | Load | m1983_5 | -| ir.cpp:1984:8:1984:14 | Load | m1984_5 | -| ir.cpp:1984:8:1984:14 | StoreValue | r1984_4 | -| ir.cpp:1984:8:1984:14 | StoreValue | r1984_6 | -| ir.cpp:1984:13:1984:14 | Right | r1984_1 | -| ir.cpp:1991:15:1991:43 | Address | &:r1991_5 | -| ir.cpp:1991:15:1991:43 | ChiPartial | partial:m1991_3 | -| ir.cpp:1991:15:1991:43 | ChiTotal | total:m1991_2 | -| ir.cpp:1991:15:1991:43 | Load | m1992_4 | -| ir.cpp:1991:15:1991:43 | SideEffect | m1991_3 | -| ir.cpp:1992:9:1992:17 | Address | &:r1992_1 | -| ir.cpp:1992:16:1992:16 | StoreValue | r1992_3 | -| ir.cpp:1992:16:1992:16 | Unary | r1992_2 | -| ir.cpp:1994:14:1994:39 | Address | &:r1994_5 | -| ir.cpp:1994:14:1994:39 | ChiPartial | partial:m1994_3 | -| ir.cpp:1994:14:1994:39 | ChiTotal | total:m1994_2 | -| ir.cpp:1994:14:1994:39 | Load | m1995_4 | -| ir.cpp:1994:14:1994:39 | SideEffect | m1994_3 | -| ir.cpp:1995:9:1995:17 | Address | &:r1995_1 | -| ir.cpp:1995:16:1995:16 | Address | &:r1995_2 | -| ir.cpp:1995:16:1995:16 | Load | ~m1994_3 | -| ir.cpp:1995:16:1995:16 | StoreValue | r1995_3 | -| ir.cpp:1999:6:1999:55 | ChiPartial | partial:m1999_3 | -| ir.cpp:1999:6:1999:55 | ChiTotal | total:m1999_2 | -| ir.cpp:1999:6:1999:55 | SideEffect | ~m2014_4 | -| ir.cpp:2000:7:2000:7 | Address | &:r2000_1 | -| ir.cpp:2002:7:2002:35 | CallTarget | func:r2002_2 | -| ir.cpp:2002:7:2002:35 | ChiPartial | partial:m2002_4 | -| ir.cpp:2002:7:2002:35 | ChiTotal | total:m1999_4 | -| ir.cpp:2002:7:2002:35 | SideEffect | ~m1999_4 | -| ir.cpp:2002:7:2002:35 | Unary | r2002_3 | -| ir.cpp:2003:5:2003:36 | CallTarget | func:r2003_1 | -| ir.cpp:2003:5:2003:36 | ChiPartial | partial:m2003_3 | -| ir.cpp:2003:5:2003:36 | ChiTotal | total:m2002_5 | -| ir.cpp:2003:5:2003:36 | SideEffect | ~m2002_5 | -| ir.cpp:2003:5:2003:36 | Unary | r2003_2 | -| ir.cpp:2004:7:2004:32 | CallTarget | func:r2004_2 | -| ir.cpp:2004:7:2004:32 | ChiPartial | partial:m2004_4 | -| ir.cpp:2004:7:2004:32 | ChiTotal | total:m2003_4 | -| ir.cpp:2004:7:2004:32 | SideEffect | ~m2003_4 | -| ir.cpp:2005:5:2005:33 | CallTarget | func:r2005_1 | -| ir.cpp:2005:5:2005:33 | ChiPartial | partial:m2005_3 | -| ir.cpp:2005:5:2005:33 | ChiTotal | total:m2004_5 | -| ir.cpp:2005:5:2005:33 | SideEffect | ~m2004_5 | -| ir.cpp:2007:7:2007:7 | Address | &:r2007_1 | -| ir.cpp:2008:5:2008:5 | Address | &:r2008_7 | -| ir.cpp:2008:11:2008:39 | Address | &:r2008_3 | -| ir.cpp:2008:11:2008:39 | CallTarget | func:r2008_2 | -| ir.cpp:2008:11:2008:39 | ChiPartial | partial:m2008_4 | -| ir.cpp:2008:11:2008:39 | ChiTotal | total:m2005_4 | -| ir.cpp:2008:11:2008:39 | SideEffect | ~m2005_4 | -| ir.cpp:2008:40:2008:42 | Load | ~m2008_5 | -| ir.cpp:2008:40:2008:42 | StoreValue | r2008_6 | -| ir.cpp:2009:7:2009:7 | Address | &:r2009_1 | -| ir.cpp:2010:5:2010:5 | Address | &:r2010_6 | -| ir.cpp:2010:9:2010:40 | Address | &:r2010_2 | -| ir.cpp:2010:9:2010:40 | CallTarget | func:r2010_1 | -| ir.cpp:2010:9:2010:40 | ChiPartial | partial:m2010_3 | -| ir.cpp:2010:9:2010:40 | ChiTotal | total:m2008_5 | -| ir.cpp:2010:9:2010:40 | SideEffect | ~m2008_5 | -| ir.cpp:2010:41:2010:43 | Load | ~m2010_4 | -| ir.cpp:2010:41:2010:43 | StoreValue | r2010_5 | -| ir.cpp:2011:7:2011:7 | Address | &:r2011_1 | -| ir.cpp:2012:5:2012:5 | Address | &:r2012_6 | -| ir.cpp:2012:11:2012:36 | CallTarget | func:r2012_2 | -| ir.cpp:2012:11:2012:36 | ChiPartial | partial:m2012_4 | -| ir.cpp:2012:11:2012:36 | ChiTotal | total:m2010_4 | -| ir.cpp:2012:11:2012:36 | SideEffect | ~m2010_4 | -| ir.cpp:2012:11:2012:36 | StoreValue | r2012_3 | -| ir.cpp:2013:7:2013:7 | Address | &:r2013_1 | -| ir.cpp:2014:5:2014:5 | Address | &:r2014_5 | -| ir.cpp:2014:9:2014:37 | CallTarget | func:r2014_1 | -| ir.cpp:2014:9:2014:37 | ChiPartial | partial:m2014_3 | -| ir.cpp:2014:9:2014:37 | ChiTotal | total:m2012_5 | -| ir.cpp:2014:9:2014:37 | SideEffect | ~m2012_5 | -| ir.cpp:2014:9:2014:37 | StoreValue | r2014_2 | -| ir.cpp:2017:6:2017:18 | ChiPartial | partial:m2017_3 | -| ir.cpp:2017:6:2017:18 | ChiTotal | total:m2017_2 | -| ir.cpp:2017:6:2017:18 | SideEffect | m2017_3 | -| ir.cpp:2018:18:2018:18 | Address | &:r2018_1 | -| ir.cpp:2019:5:2019:5 | Address | &:r2019_1 | -| ir.cpp:2019:5:2019:5 | Load | m2018_2 | -| ir.cpp:2028:6:2028:24 | ChiPartial | partial:m2028_3 | -| ir.cpp:2028:6:2028:24 | ChiTotal | total:m2028_2 | -| ir.cpp:2028:6:2028:24 | SideEffect | ~m2036_5 | -| ir.cpp:2029:12:2029:12 | Address | &:r2029_1 | -| ir.cpp:2031:5:2031:19 | ChiPartial | partial:m2031_7 | -| ir.cpp:2031:5:2031:19 | ChiTotal | total:m2031_5 | -| ir.cpp:2031:7:2031:12 | CallTarget | func:r2031_2 | -| ir.cpp:2031:7:2031:12 | ChiPartial | partial:m2031_4 | -| ir.cpp:2031:7:2031:12 | ChiTotal | total:m2028_4 | -| ir.cpp:2031:7:2031:12 | SideEffect | ~m2028_4 | -| ir.cpp:2031:7:2031:12 | Unary | r2031_3 | -| ir.cpp:2031:13:2031:16 | Address | &:r2031_6 | -| ir.cpp:2032:5:2032:19 | ChiPartial | partial:m2032_7 | -| ir.cpp:2032:5:2032:19 | ChiTotal | total:m2032_5 | -| ir.cpp:2032:7:2032:12 | CallTarget | func:r2032_2 | -| ir.cpp:2032:7:2032:12 | ChiPartial | partial:m2032_4 | -| ir.cpp:2032:7:2032:12 | ChiTotal | total:m2031_8 | -| ir.cpp:2032:7:2032:12 | SideEffect | ~m2031_8 | -| ir.cpp:2032:7:2032:12 | Unary | r2032_3 | -| ir.cpp:2032:13:2032:16 | Address | &:r2032_6 | -| ir.cpp:2033:5:2033:15 | Address | &:r2033_1 | -| ir.cpp:2033:5:2033:15 | Address | &:r2033_1 | -| ir.cpp:2033:7:2033:13 | CallTarget | func:r2033_3 | -| ir.cpp:2033:7:2033:13 | ChiPartial | partial:m2033_5 | -| ir.cpp:2033:7:2033:13 | ChiTotal | total:m2032_8 | -| ir.cpp:2033:7:2033:13 | SideEffect | ~m2032_8 | -| ir.cpp:2033:7:2033:13 | StoreValue | r2033_4 | -| ir.cpp:2034:5:2034:18 | CallTarget | func:r2034_1 | -| ir.cpp:2034:5:2034:18 | ChiPartial | partial:m2034_3 | -| ir.cpp:2034:5:2034:18 | ChiTotal | total:m2033_6 | -| ir.cpp:2034:5:2034:18 | SideEffect | ~m2033_6 | -| ir.cpp:2034:5:2034:18 | Unary | r2034_2 | -| ir.cpp:2034:5:2034:25 | ChiPartial | partial:m2034_6 | -| ir.cpp:2034:5:2034:25 | ChiTotal | total:m2034_4 | -| ir.cpp:2034:19:2034:22 | Address | &:r2034_5 | -| ir.cpp:2035:5:2035:18 | CallTarget | func:r2035_1 | -| ir.cpp:2035:5:2035:18 | ChiPartial | partial:m2035_3 | -| ir.cpp:2035:5:2035:18 | ChiTotal | total:m2034_7 | -| ir.cpp:2035:5:2035:18 | SideEffect | ~m2034_7 | -| ir.cpp:2035:5:2035:18 | Unary | r2035_2 | -| ir.cpp:2035:5:2035:25 | ChiPartial | partial:m2035_6 | -| ir.cpp:2035:5:2035:25 | ChiTotal | total:m2035_4 | -| ir.cpp:2035:19:2035:22 | Address | &:r2035_5 | -| ir.cpp:2036:5:2036:19 | CallTarget | func:r2036_2 | -| ir.cpp:2036:5:2036:19 | ChiPartial | partial:m2036_4 | -| ir.cpp:2036:5:2036:19 | ChiTotal | total:m2035_7 | -| ir.cpp:2036:5:2036:19 | SideEffect | ~m2035_7 | -| ir.cpp:2036:5:2036:19 | StoreValue | r2036_3 | -| ir.cpp:2036:5:2036:21 | Address | &:r2036_1 | -| ir.cpp:2036:5:2036:21 | Address | &:r2036_1 | -| ir.cpp:2039:6:2039:21 | ChiPartial | partial:m2039_3 | -| ir.cpp:2039:6:2039:21 | ChiTotal | total:m2039_2 | -| ir.cpp:2039:6:2039:21 | SideEffect | ~m2043_6 | -| ir.cpp:2040:7:2040:7 | Address | &:r2040_1 | -| ir.cpp:2040:7:2040:7 | Address | &:r2040_1 | -| ir.cpp:2040:7:2040:7 | Arg(this) | this:r2040_1 | -| ir.cpp:2040:7:2040:7 | CallTarget | func:r2040_3 | -| ir.cpp:2040:7:2040:7 | ChiPartial | partial:m2040_5 | -| ir.cpp:2040:7:2040:7 | ChiPartial | partial:m2040_7 | -| ir.cpp:2040:7:2040:7 | ChiTotal | total:m2039_4 | -| ir.cpp:2040:7:2040:7 | ChiTotal | total:m2040_2 | -| ir.cpp:2040:7:2040:7 | SideEffect | ~m2039_4 | -| ir.cpp:2041:11:2041:13 | Address | &:r2041_1 | -| ir.cpp:2041:23:2041:45 | StoreValue | r2041_2 | -| ir.cpp:2042:5:2042:7 | Address | &:r2042_3 | -| ir.cpp:2042:13:2042:32 | StoreValue | r2042_2 | -| ir.cpp:2043:1:2043:1 | Address | &:r2043_2 | -| ir.cpp:2043:1:2043:1 | Address | &:r2043_2 | -| ir.cpp:2043:1:2043:1 | Arg(this) | this:r2043_2 | -| ir.cpp:2043:1:2043:1 | CallTarget | func:r2043_3 | -| ir.cpp:2043:1:2043:1 | ChiPartial | partial:m2043_5 | -| ir.cpp:2043:1:2043:1 | ChiPartial | partial:m2043_8 | -| ir.cpp:2043:1:2043:1 | ChiTotal | total:m2040_6 | -| ir.cpp:2043:1:2043:1 | ChiTotal | total:m2040_8 | -| ir.cpp:2043:1:2043:1 | SideEffect | m2040_8 | -| ir.cpp:2043:1:2043:1 | SideEffect | ~m2040_6 | -| ir.cpp:2045:6:2045:19 | ChiPartial | partial:m2045_3 | -| ir.cpp:2045:6:2045:19 | ChiTotal | total:m2045_2 | -| ir.cpp:2045:6:2045:19 | SideEffect | ~m2049_9 | -| ir.cpp:2045:26:2045:26 | Address | &:r2045_5 | -| ir.cpp:2045:33:2045:33 | Address | &:r2045_7 | -| ir.cpp:2045:40:2045:40 | Address | &:r2045_9 | -| ir.cpp:2045:47:2045:47 | Address | &:r2045_11 | -| ir.cpp:2046:5:2046:5 | Address | &:r2046_7 | -| ir.cpp:2046:9:2046:9 | Address | &:r2046_1 | -| ir.cpp:2046:9:2046:9 | Condition | r2046_2 | -| ir.cpp:2046:9:2046:9 | Load | m2045_6 | -| ir.cpp:2046:9:2046:17 | Address | &:r2046_5 | -| ir.cpp:2046:9:2046:17 | Address | &:r2046_11 | -| ir.cpp:2046:9:2046:17 | Address | &:r2046_15 | -| ir.cpp:2046:9:2046:17 | Load | m2046_4 | -| ir.cpp:2046:9:2046:17 | Phi | from 2:m2046_12 | -| ir.cpp:2046:9:2046:17 | Phi | from 3:m2046_16 | -| ir.cpp:2046:9:2046:17 | StoreValue | r2046_6 | -| ir.cpp:2046:13:2046:13 | Address | &:r2046_9 | -| ir.cpp:2046:13:2046:13 | Load | m2045_8 | -| ir.cpp:2046:13:2046:13 | StoreValue | r2046_10 | -| ir.cpp:2046:17:2046:17 | Address | &:r2046_13 | -| ir.cpp:2046:17:2046:17 | Load | m2045_10 | -| ir.cpp:2046:17:2046:17 | StoreValue | r2046_14 | -| ir.cpp:2047:5:2047:5 | Address | &:r2047_7 | -| ir.cpp:2047:9:2047:9 | Address | &:r2047_1 | -| ir.cpp:2047:9:2047:9 | Condition | r2047_2 | -| ir.cpp:2047:9:2047:9 | Load | m2045_6 | -| ir.cpp:2047:9:2047:17 | Address | &:r2047_5 | -| ir.cpp:2047:9:2047:17 | Address | &:r2047_11 | -| ir.cpp:2047:9:2047:17 | Address | &:r2047_14 | -| ir.cpp:2047:9:2047:17 | Load | m2047_4 | -| ir.cpp:2047:9:2047:17 | Phi | from 5:m2047_12 | -| ir.cpp:2047:9:2047:17 | Phi | from 6:m2047_15 | -| ir.cpp:2047:9:2047:17 | StoreValue | r2047_6 | -| ir.cpp:2047:13:2047:13 | Address | &:r2047_9 | -| ir.cpp:2047:13:2047:13 | Load | m2045_8 | -| ir.cpp:2047:13:2047:13 | StoreValue | r2047_10 | -| ir.cpp:2047:17:2047:17 | StoreValue | r2047_13 | -| ir.cpp:2048:5:2048:5 | Address | &:r2048_7 | -| ir.cpp:2048:9:2048:9 | Address | &:r2048_1 | -| ir.cpp:2048:9:2048:9 | Condition | r2048_2 | -| ir.cpp:2048:9:2048:9 | Load | m2045_6 | -| ir.cpp:2048:9:2048:17 | Address | &:r2048_5 | -| ir.cpp:2048:9:2048:17 | Address | &:r2048_10 | -| ir.cpp:2048:9:2048:17 | Address | &:r2048_13 | -| ir.cpp:2048:9:2048:17 | Load | m2048_4 | -| ir.cpp:2048:9:2048:17 | Phi | from 8:m2048_11 | -| ir.cpp:2048:9:2048:17 | Phi | from 9:m2048_14 | -| ir.cpp:2048:9:2048:17 | StoreValue | r2048_6 | -| ir.cpp:2048:13:2048:13 | StoreValue | r2048_9 | -| ir.cpp:2048:17:2048:17 | StoreValue | r2048_12 | -| ir.cpp:2049:5:2049:19 | ChiPartial | partial:m2049_8 | -| ir.cpp:2049:5:2049:19 | ChiTotal | total:m2045_4 | -| ir.cpp:2049:6:2049:6 | Address | &:r2049_2 | -| ir.cpp:2049:6:2049:6 | Condition | r2049_3 | -| ir.cpp:2049:6:2049:6 | Load | m2045_6 | -| ir.cpp:2049:6:2049:14 | Address | &:r2049_6 | -| ir.cpp:2049:6:2049:14 | Address | &:r2049_7 | -| ir.cpp:2049:6:2049:14 | Address | &:r2049_11 | -| ir.cpp:2049:6:2049:14 | Address | &:r2049_14 | -| ir.cpp:2049:6:2049:14 | Load | m2049_5 | -| ir.cpp:2049:6:2049:14 | Phi | from 11:m2049_12 | -| ir.cpp:2049:6:2049:14 | Phi | from 12:m2049_15 | -| ir.cpp:2049:10:2049:10 | StoreValue | r2049_10 | -| ir.cpp:2049:14:2049:14 | StoreValue | r2049_13 | -| ir.cpp:2049:19:2049:19 | StoreValue | r2049_1 | -| ir.cpp:2055:6:2055:22 | ChiPartial | partial:m2055_3 | -| ir.cpp:2055:6:2055:22 | ChiTotal | total:m2055_2 | -| ir.cpp:2055:6:2055:22 | SideEffect | m2055_3 | -| ir.cpp:2055:29:2055:29 | Address | &:r2055_5 | -| ir.cpp:2055:46:2055:46 | Address | &:r2055_7 | -| ir.cpp:2055:63:2055:63 | Address | &:r2055_9 | -| ir.cpp:2055:80:2055:80 | Address | &:r2055_11 | -| ir.cpp:2056:5:2056:5 | Address | &:r2056_7 | -| ir.cpp:2056:9:2056:9 | Address | &:r2056_1 | -| ir.cpp:2056:9:2056:9 | Condition | r2056_2 | -| ir.cpp:2056:9:2056:9 | Load | m2055_6 | -| ir.cpp:2056:9:2056:17 | Address | &:r2056_5 | -| ir.cpp:2056:9:2056:17 | Address | &:r2056_11 | -| ir.cpp:2056:9:2056:17 | Address | &:r2056_15 | -| ir.cpp:2056:9:2056:17 | Load | m2056_4 | -| ir.cpp:2056:9:2056:17 | Phi | from 2:m2056_12 | -| ir.cpp:2056:9:2056:17 | Phi | from 3:m2056_16 | -| ir.cpp:2056:9:2056:17 | StoreValue | r2056_6 | -| ir.cpp:2056:13:2056:13 | Address | &:r2056_9 | -| ir.cpp:2056:13:2056:13 | Load | m2055_8 | -| ir.cpp:2056:13:2056:13 | StoreValue | r2056_10 | -| ir.cpp:2056:17:2056:17 | Address | &:r2056_13 | -| ir.cpp:2056:17:2056:17 | Load | m2055_10 | -| ir.cpp:2056:17:2056:17 | StoreValue | r2056_14 | -| ir.cpp:2057:5:2057:5 | Address | &:r2057_10 | -| ir.cpp:2057:9:2057:9 | Address | &:r2057_2 | -| ir.cpp:2057:9:2057:9 | Address | &:r2057_6 | -| ir.cpp:2057:9:2057:9 | Address | &:r2057_17 | -| ir.cpp:2057:9:2057:9 | Address | &:r2057_23 | -| ir.cpp:2057:9:2057:9 | Condition | r2057_3 | -| ir.cpp:2057:9:2057:9 | Load | m2055_6 | -| ir.cpp:2057:9:2057:9 | Load | m2057_5 | -| ir.cpp:2057:9:2057:9 | Phi | from 5:m2057_18 | -| ir.cpp:2057:9:2057:9 | Phi | from 6:m2057_24 | -| ir.cpp:2057:9:2057:9 | StoreValue | r2057_7 | -| ir.cpp:2057:9:2057:31 | Address | &:r2057_1 | -| ir.cpp:2057:9:2057:31 | Address | &:r2057_1 | -| ir.cpp:2057:9:2057:31 | Load | m2057_8 | -| ir.cpp:2057:9:2057:31 | StoreValue | r2057_9 | -| ir.cpp:2057:13:2057:13 | Address | &:r2057_12 | -| ir.cpp:2057:13:2057:13 | Address | &:r2057_12 | -| ir.cpp:2057:13:2057:13 | Address | &:r2057_13 | -| ir.cpp:2057:13:2057:13 | Load | m2055_8 | -| ir.cpp:2057:13:2057:13 | Load | m2057_15 | -| ir.cpp:2057:13:2057:13 | StoreValue | r2057_14 | -| ir.cpp:2057:13:2057:13 | StoreValue | r2057_16 | -| ir.cpp:2057:17:2057:31 | Address | &:r2057_19 | -| ir.cpp:2057:17:2057:31 | Address | &:r2057_19 | -| ir.cpp:2057:17:2057:31 | Load | m2057_21 | -| ir.cpp:2057:17:2057:31 | StoreValue | r2057_20 | -| ir.cpp:2057:17:2057:31 | StoreValue | r2057_22 | -| ir.cpp:2058:5:2058:5 | Address | &:r2058_10 | -| ir.cpp:2058:9:2058:9 | Address | &:r2058_2 | -| ir.cpp:2058:9:2058:9 | Address | &:r2058_6 | -| ir.cpp:2058:9:2058:9 | Address | &:r2058_16 | -| ir.cpp:2058:9:2058:9 | Address | &:r2058_22 | -| ir.cpp:2058:9:2058:9 | Condition | r2058_3 | -| ir.cpp:2058:9:2058:9 | Load | m2055_6 | -| ir.cpp:2058:9:2058:9 | Load | m2058_5 | -| ir.cpp:2058:9:2058:9 | Phi | from 8:m2058_17 | -| ir.cpp:2058:9:2058:9 | Phi | from 9:m2058_23 | -| ir.cpp:2058:9:2058:9 | StoreValue | r2058_7 | -| ir.cpp:2058:9:2058:45 | Address | &:r2058_1 | -| ir.cpp:2058:9:2058:45 | Address | &:r2058_1 | -| ir.cpp:2058:9:2058:45 | Load | m2058_8 | -| ir.cpp:2058:9:2058:45 | StoreValue | r2058_9 | -| ir.cpp:2058:13:2058:27 | Address | &:r2058_12 | -| ir.cpp:2058:13:2058:27 | Address | &:r2058_12 | -| ir.cpp:2058:13:2058:27 | Load | m2058_14 | -| ir.cpp:2058:13:2058:27 | StoreValue | r2058_13 | -| ir.cpp:2058:13:2058:27 | StoreValue | r2058_15 | -| ir.cpp:2058:31:2058:45 | Address | &:r2058_18 | -| ir.cpp:2058:31:2058:45 | Address | &:r2058_18 | -| ir.cpp:2058:31:2058:45 | Load | m2058_20 | -| ir.cpp:2058:31:2058:45 | StoreValue | r2058_19 | -| ir.cpp:2058:31:2058:45 | StoreValue | r2058_21 | -| ir.cpp:2059:6:2059:6 | Address | &:r2059_11 | -| ir.cpp:2059:6:2059:6 | Unary | r2059_11 | -| ir.cpp:2059:6:2059:18 | Address | &:r2059_13 | -| ir.cpp:2059:10:2059:10 | Address | &:r2059_5 | -| ir.cpp:2059:10:2059:10 | Condition | r2059_6 | -| ir.cpp:2059:10:2059:10 | Load | m2055_6 | -| ir.cpp:2059:10:2059:18 | Address | &:r2059_9 | -| ir.cpp:2059:10:2059:18 | Address | &:r2059_17 | -| ir.cpp:2059:10:2059:18 | Address | &:r2059_21 | -| ir.cpp:2059:10:2059:18 | Load | m2059_8 | -| ir.cpp:2059:10:2059:18 | Phi | from 11:m2059_18 | -| ir.cpp:2059:10:2059:18 | Phi | from 12:m2059_22 | -| ir.cpp:2059:10:2059:18 | StoreValue | r2059_10 | -| ir.cpp:2059:14:2059:14 | Address | &:r2059_15 | -| ir.cpp:2059:14:2059:14 | Load | m2055_8 | -| ir.cpp:2059:14:2059:14 | StoreValue | r2059_16 | -| ir.cpp:2059:18:2059:18 | Address | &:r2059_19 | -| ir.cpp:2059:18:2059:18 | Load | m2055_10 | -| ir.cpp:2059:18:2059:18 | StoreValue | r2059_20 | -| ir.cpp:2059:23:2059:37 | Address | &:r2059_1 | -| ir.cpp:2059:23:2059:37 | Address | &:r2059_1 | -| ir.cpp:2059:23:2059:37 | Load | m2059_3 | -| ir.cpp:2059:23:2059:37 | StoreValue | r2059_2 | -| ir.cpp:2059:23:2059:37 | StoreValue | r2059_4 | -| ir.cpp:2062:8:2062:8 | Address | &:r2062_5 | -| ir.cpp:2062:8:2062:8 | Address | &:r2062_5 | -| ir.cpp:2062:8:2062:8 | Address | &:r2062_5 | -| ir.cpp:2062:8:2062:8 | Address | &:r2062_5 | -| ir.cpp:2062:8:2062:8 | Address | &:r2062_5 | -| ir.cpp:2062:8:2062:8 | Address | &:r2062_5 | -| ir.cpp:2062:8:2062:8 | Address | &:r2062_7 | -| ir.cpp:2062:8:2062:8 | Address | &:r2062_7 | -| ir.cpp:2062:8:2062:8 | Address | &:r2062_7 | -| ir.cpp:2062:8:2062:8 | Address | &:r2062_7 | -| ir.cpp:2062:8:2062:8 | Address | &:r2062_7 | -| ir.cpp:2062:8:2062:8 | Address | &:r2062_7 | -| ir.cpp:2062:8:2062:8 | Address | &:r2062_10 | -| ir.cpp:2062:8:2062:8 | ChiPartial | partial:m2062_3 | -| ir.cpp:2062:8:2062:8 | ChiPartial | partial:m2062_3 | -| ir.cpp:2062:8:2062:8 | ChiPartial | partial:m2062_3 | -| ir.cpp:2062:8:2062:8 | ChiTotal | total:m2062_2 | -| ir.cpp:2062:8:2062:8 | ChiTotal | total:m2062_2 | -| ir.cpp:2062:8:2062:8 | ChiTotal | total:m2062_2 | -| ir.cpp:2062:8:2062:8 | Load | m0_10 | -| ir.cpp:2062:8:2062:8 | Load | m2062_6 | -| ir.cpp:2062:8:2062:8 | Load | m2062_6 | -| ir.cpp:2062:8:2062:8 | Load | m2062_6 | -| ir.cpp:2062:8:2062:8 | SideEffect | m2062_3 | -| ir.cpp:2062:8:2062:8 | SideEffect | m2062_3 | -| ir.cpp:2062:8:2062:8 | SideEffect | m2062_3 | -| ir.cpp:2062:8:2062:8 | SideEffect | m2062_8 | -| ir.cpp:2062:8:2062:8 | SideEffect | m2062_8 | -| ir.cpp:2062:8:2062:8 | SideEffect | m2062_8 | -| ir.cpp:2063:13:2063:29 | Address | &:r2063_5 | -| ir.cpp:2063:13:2063:29 | Address | &:r2063_5 | -| ir.cpp:2063:13:2063:29 | Address | &:r2063_7 | -| ir.cpp:2063:13:2063:29 | Address | &:r2063_7 | -| ir.cpp:2063:13:2063:29 | ChiPartial | partial:m2063_3 | -| ir.cpp:2063:13:2063:29 | ChiTotal | total:m2063_2 | -| ir.cpp:2063:13:2063:29 | Load | m2063_6 | -| ir.cpp:2063:13:2063:29 | SideEffect | m2063_3 | -| ir.cpp:2063:13:2063:29 | SideEffect | m2063_8 | -| ir.cpp:2066:6:2066:25 | ChiPartial | partial:m2066_3 | -| ir.cpp:2066:6:2066:25 | ChiTotal | total:m2066_2 | -| ir.cpp:2066:6:2066:25 | SideEffect | ~m2070_32 | -| ir.cpp:2066:32:2066:32 | Address | &:r2066_5 | -| ir.cpp:2066:52:2066:52 | Address | &:r2066_7 | -| ir.cpp:2066:72:2066:72 | Address | &:r2066_9 | -| ir.cpp:2066:92:2066:92 | Address | &:r2066_11 | -| ir.cpp:2067:5:2067:5 | Address | &:r2067_1 | -| ir.cpp:2067:5:2067:5 | Address | &:r2067_1 | -| ir.cpp:2067:5:2067:5 | Arg(this) | this:r2067_1 | -| ir.cpp:2067:5:2067:5 | ChiPartial | partial:m2067_16 | -| ir.cpp:2067:5:2067:5 | ChiTotal | total:m2066_12 | -| ir.cpp:2067:5:2067:5 | SideEffect | m2066_12 | -| ir.cpp:2067:7:2067:7 | CallTarget | func:r2067_2 | -| ir.cpp:2067:7:2067:7 | ChiPartial | partial:m2067_12 | -| ir.cpp:2067:7:2067:7 | ChiTotal | total:m2066_4 | -| ir.cpp:2067:7:2067:7 | SideEffect | ~m2066_4 | -| ir.cpp:2067:7:2067:7 | Unary | r2067_11 | -| ir.cpp:2067:9:2067:9 | Address | &:r2067_3 | -| ir.cpp:2067:9:2067:9 | Condition | r2067_4 | -| ir.cpp:2067:9:2067:9 | Load | m2066_6 | -| ir.cpp:2067:9:2067:17 | Address | &:r2067_7 | -| ir.cpp:2067:9:2067:17 | Address | &:r2067_10 | -| ir.cpp:2067:9:2067:17 | Address | &:r2067_20 | -| ir.cpp:2067:9:2067:17 | Address | &:r2067_23 | -| ir.cpp:2067:9:2067:17 | Arg(0) | 0:r2067_10 | -| ir.cpp:2067:9:2067:17 | Load | m2067_6 | -| ir.cpp:2067:9:2067:17 | Phi | from 2:m2067_21 | -| ir.cpp:2067:9:2067:17 | Phi | from 3:m2067_24 | -| ir.cpp:2067:9:2067:17 | SideEffect | ~m2067_13 | -| ir.cpp:2067:9:2067:17 | Unary | r2067_8 | -| ir.cpp:2067:9:2067:17 | Unary | r2067_9 | -| ir.cpp:2067:13:2067:13 | StoreValue | r2067_19 | -| ir.cpp:2067:17:2067:17 | StoreValue | r2067_22 | -| ir.cpp:2068:5:2068:5 | Address | &:r2068_1 | -| ir.cpp:2068:5:2068:5 | Address | &:r2068_1 | -| ir.cpp:2068:5:2068:5 | Arg(this) | this:r2068_1 | -| ir.cpp:2068:5:2068:5 | ChiPartial | partial:m2068_19 | -| ir.cpp:2068:5:2068:5 | ChiTotal | total:m2067_17 | -| ir.cpp:2068:5:2068:5 | SideEffect | m2067_17 | -| ir.cpp:2068:7:2068:7 | CallTarget | func:r2068_2 | -| ir.cpp:2068:7:2068:7 | ChiPartial | partial:m2068_15 | -| ir.cpp:2068:7:2068:7 | ChiTotal | total:m2068_7 | -| ir.cpp:2068:7:2068:7 | SideEffect | ~m2068_7 | -| ir.cpp:2068:7:2068:7 | Unary | r2068_14 | -| ir.cpp:2068:9:2068:9 | Address | &:r2068_4 | -| ir.cpp:2068:9:2068:9 | Address | &:r2068_9 | -| ir.cpp:2068:9:2068:9 | Address | &:r2068_35 | -| ir.cpp:2068:9:2068:9 | Address | &:r2068_46 | -| ir.cpp:2068:9:2068:9 | Condition | r2068_5 | -| ir.cpp:2068:9:2068:9 | Load | m2066_6 | -| ir.cpp:2068:9:2068:9 | Load | m2068_8 | -| ir.cpp:2068:9:2068:9 | Phi | from 5:m2068_36 | -| ir.cpp:2068:9:2068:9 | Phi | from 5:~m2068_30 | -| ir.cpp:2068:9:2068:9 | Phi | from 6:m2068_47 | -| ir.cpp:2068:9:2068:9 | Phi | from 6:~m2068_42 | -| ir.cpp:2068:9:2068:9 | StoreValue | r2068_10 | -| ir.cpp:2068:9:2068:34 | Address | &:r2068_3 | -| ir.cpp:2068:9:2068:34 | Address | &:r2068_13 | -| ir.cpp:2068:9:2068:34 | Arg(0) | 0:r2068_13 | -| ir.cpp:2068:9:2068:34 | SideEffect | ~m2068_11 | -| ir.cpp:2068:9:2068:34 | Unary | r2068_3 | -| ir.cpp:2068:9:2068:34 | Unary | r2068_12 | -| ir.cpp:2068:13:2068:13 | Address | &:r2068_22 | -| ir.cpp:2068:13:2068:13 | Address | &:r2068_22 | -| ir.cpp:2068:13:2068:13 | Address | &:r2068_22 | -| ir.cpp:2068:13:2068:13 | Address | &:r2068_27 | -| ir.cpp:2068:13:2068:13 | Arg(0) | 0:r2068_27 | -| ir.cpp:2068:13:2068:13 | Arg(this) | this:r2068_22 | -| ir.cpp:2068:13:2068:13 | CallTarget | func:r2068_24 | -| ir.cpp:2068:13:2068:13 | ChiPartial | partial:m2068_29 | -| ir.cpp:2068:13:2068:13 | ChiPartial | partial:m2068_32 | -| ir.cpp:2068:13:2068:13 | ChiTotal | total:m2067_13 | -| ir.cpp:2068:13:2068:13 | ChiTotal | total:m2068_23 | -| ir.cpp:2068:13:2068:13 | Load | m2068_33 | -| ir.cpp:2068:13:2068:13 | SideEffect | ~m2066_8 | -| ir.cpp:2068:13:2068:13 | SideEffect | ~m2067_13 | -| ir.cpp:2068:13:2068:13 | StoreValue | r2068_34 | -| ir.cpp:2068:13:2068:13 | Unary | r2068_25 | -| ir.cpp:2068:13:2068:13 | Unary | r2068_26 | -| ir.cpp:2068:17:2068:34 | Address | &:r2068_37 | -| ir.cpp:2068:17:2068:34 | Address | &:r2068_37 | -| ir.cpp:2068:17:2068:34 | Address | &:r2068_37 | -| ir.cpp:2068:17:2068:34 | Arg(this) | this:r2068_37 | -| ir.cpp:2068:17:2068:34 | CallTarget | func:r2068_39 | -| ir.cpp:2068:17:2068:34 | ChiPartial | partial:m2068_41 | -| ir.cpp:2068:17:2068:34 | ChiPartial | partial:m2068_43 | -| ir.cpp:2068:17:2068:34 | ChiTotal | total:m2067_13 | -| ir.cpp:2068:17:2068:34 | ChiTotal | total:m2068_38 | -| ir.cpp:2068:17:2068:34 | Load | m2068_44 | -| ir.cpp:2068:17:2068:34 | SideEffect | ~m2067_13 | -| ir.cpp:2068:17:2068:34 | StoreValue | r2068_45 | -| ir.cpp:2069:5:2069:5 | Address | &:r2069_1 | -| ir.cpp:2069:5:2069:5 | Address | &:r2069_1 | -| ir.cpp:2069:5:2069:5 | Arg(this) | this:r2069_1 | -| ir.cpp:2069:5:2069:5 | ChiPartial | partial:m2069_19 | -| ir.cpp:2069:5:2069:5 | ChiTotal | total:m2068_20 | -| ir.cpp:2069:5:2069:5 | SideEffect | m2068_20 | -| ir.cpp:2069:7:2069:7 | CallTarget | func:r2069_2 | -| ir.cpp:2069:7:2069:7 | ChiPartial | partial:m2069_15 | -| ir.cpp:2069:7:2069:7 | ChiTotal | total:m2069_7 | -| ir.cpp:2069:7:2069:7 | SideEffect | ~m2069_7 | -| ir.cpp:2069:7:2069:7 | Unary | r2069_14 | -| ir.cpp:2069:9:2069:9 | Address | &:r2069_4 | -| ir.cpp:2069:9:2069:9 | Address | &:r2069_9 | -| ir.cpp:2069:9:2069:9 | Address | &:r2069_31 | -| ir.cpp:2069:9:2069:9 | Address | &:r2069_42 | -| ir.cpp:2069:9:2069:9 | Condition | r2069_5 | -| ir.cpp:2069:9:2069:9 | Load | m2066_6 | -| ir.cpp:2069:9:2069:9 | Load | m2069_8 | -| ir.cpp:2069:9:2069:9 | Phi | from 8:m2069_32 | -| ir.cpp:2069:9:2069:9 | Phi | from 8:~m2069_27 | -| ir.cpp:2069:9:2069:9 | Phi | from 9:m2069_43 | -| ir.cpp:2069:9:2069:9 | Phi | from 9:~m2069_38 | -| ir.cpp:2069:9:2069:9 | StoreValue | r2069_10 | -| ir.cpp:2069:9:2069:51 | Address | &:r2069_3 | -| ir.cpp:2069:9:2069:51 | Address | &:r2069_13 | -| ir.cpp:2069:9:2069:51 | Arg(0) | 0:r2069_13 | -| ir.cpp:2069:9:2069:51 | SideEffect | ~m2069_11 | -| ir.cpp:2069:9:2069:51 | Unary | r2069_3 | -| ir.cpp:2069:9:2069:51 | Unary | r2069_12 | -| ir.cpp:2069:13:2069:30 | Address | &:r2069_22 | -| ir.cpp:2069:13:2069:30 | Address | &:r2069_22 | -| ir.cpp:2069:13:2069:30 | Address | &:r2069_22 | -| ir.cpp:2069:13:2069:30 | Arg(this) | this:r2069_22 | -| ir.cpp:2069:13:2069:30 | CallTarget | func:r2069_24 | -| ir.cpp:2069:13:2069:30 | ChiPartial | partial:m2069_26 | -| ir.cpp:2069:13:2069:30 | ChiPartial | partial:m2069_28 | -| ir.cpp:2069:13:2069:30 | ChiTotal | total:m2068_16 | -| ir.cpp:2069:13:2069:30 | ChiTotal | total:m2069_23 | -| ir.cpp:2069:13:2069:30 | Load | m2069_29 | -| ir.cpp:2069:13:2069:30 | SideEffect | ~m2068_16 | -| ir.cpp:2069:13:2069:30 | StoreValue | r2069_30 | -| ir.cpp:2069:34:2069:51 | Address | &:r2069_33 | -| ir.cpp:2069:34:2069:51 | Address | &:r2069_33 | -| ir.cpp:2069:34:2069:51 | Address | &:r2069_33 | -| ir.cpp:2069:34:2069:51 | Arg(this) | this:r2069_33 | -| ir.cpp:2069:34:2069:51 | CallTarget | func:r2069_35 | -| ir.cpp:2069:34:2069:51 | ChiPartial | partial:m2069_37 | -| ir.cpp:2069:34:2069:51 | ChiPartial | partial:m2069_39 | -| ir.cpp:2069:34:2069:51 | ChiTotal | total:m2068_16 | -| ir.cpp:2069:34:2069:51 | ChiTotal | total:m2069_34 | -| ir.cpp:2069:34:2069:51 | Load | m2069_40 | -| ir.cpp:2069:34:2069:51 | SideEffect | ~m2068_16 | -| ir.cpp:2069:34:2069:51 | StoreValue | r2069_41 | -| ir.cpp:2070:5:2070:19 | ChiPartial | partial:m2070_35 | -| ir.cpp:2070:5:2070:19 | ChiTotal | total:m2070_17 | -| ir.cpp:2070:5:2070:19 | SideEffect | m2070_17 | -| ir.cpp:2070:6:2070:6 | Address | &:r2070_1 | -| ir.cpp:2070:6:2070:6 | Address | &:r2070_1 | -| ir.cpp:2070:6:2070:6 | Arg(this) | this:r2070_1 | -| ir.cpp:2070:6:2070:6 | ChiPartial | partial:m2070_16 | -| ir.cpp:2070:6:2070:6 | ChiTotal | total:m2069_20 | -| ir.cpp:2070:6:2070:6 | SideEffect | m2069_20 | -| ir.cpp:2070:8:2070:8 | CallTarget | func:r2070_2 | -| ir.cpp:2070:8:2070:8 | ChiPartial | partial:m2070_12 | -| ir.cpp:2070:8:2070:8 | ChiTotal | total:m2069_16 | -| ir.cpp:2070:8:2070:8 | SideEffect | ~m2069_16 | -| ir.cpp:2070:8:2070:8 | Unary | r2070_11 | -| ir.cpp:2070:8:2070:19 | Address | &:r2070_18 | -| ir.cpp:2070:8:2070:19 | Address | &:r2070_18 | -| ir.cpp:2070:8:2070:19 | Arg(this) | this:r2070_18 | -| ir.cpp:2070:10:2070:10 | Address | &:r2070_3 | -| ir.cpp:2070:10:2070:10 | Condition | r2070_4 | -| ir.cpp:2070:10:2070:10 | Load | m2066_6 | -| ir.cpp:2070:10:2070:18 | Address | &:r2070_7 | -| ir.cpp:2070:10:2070:18 | Address | &:r2070_10 | -| ir.cpp:2070:10:2070:18 | Address | &:r2070_39 | -| ir.cpp:2070:10:2070:18 | Address | &:r2070_42 | -| ir.cpp:2070:10:2070:18 | Arg(0) | 0:r2070_10 | -| ir.cpp:2070:10:2070:18 | Load | m2070_6 | -| ir.cpp:2070:10:2070:18 | Phi | from 11:m2070_40 | -| ir.cpp:2070:10:2070:18 | Phi | from 12:m2070_43 | -| ir.cpp:2070:10:2070:18 | SideEffect | ~m2070_13 | -| ir.cpp:2070:10:2070:18 | Unary | r2070_8 | -| ir.cpp:2070:10:2070:18 | Unary | r2070_9 | -| ir.cpp:2070:14:2070:14 | StoreValue | r2070_38 | -| ir.cpp:2070:18:2070:18 | StoreValue | r2070_41 | -| ir.cpp:2070:21:2070:21 | CallTarget | func:r2070_19 | -| ir.cpp:2070:21:2070:21 | ChiPartial | partial:m2070_31 | -| ir.cpp:2070:21:2070:21 | ChiTotal | total:m2070_25 | -| ir.cpp:2070:21:2070:21 | SideEffect | ~m2070_25 | -| ir.cpp:2070:21:2070:21 | Unary | r2070_30 | -| ir.cpp:2070:23:2070:40 | Address | &:r2070_20 | -| ir.cpp:2070:23:2070:40 | Address | &:r2070_20 | -| ir.cpp:2070:23:2070:40 | Address | &:r2070_29 | -| ir.cpp:2070:23:2070:40 | Arg(0) | 0:r2070_29 | -| ir.cpp:2070:23:2070:40 | Arg(this) | this:r2070_20 | -| ir.cpp:2070:23:2070:40 | CallTarget | func:r2070_22 | -| ir.cpp:2070:23:2070:40 | ChiPartial | partial:m2070_24 | -| ir.cpp:2070:23:2070:40 | ChiPartial | partial:m2070_26 | -| ir.cpp:2070:23:2070:40 | ChiTotal | total:m2070_13 | -| ir.cpp:2070:23:2070:40 | ChiTotal | total:m2070_21 | -| ir.cpp:2070:23:2070:40 | SideEffect | ~m2070_13 | -| ir.cpp:2070:23:2070:40 | SideEffect | ~m2070_27 | -| ir.cpp:2070:23:2070:40 | Unary | r2070_20 | -| ir.cpp:2070:23:2070:40 | Unary | r2070_28 | -| ir.cpp:2075:14:2075:22 | Address | &:r2075_7 | -| ir.cpp:2075:14:2075:22 | ChiPartial | partial:m2075_3 | -| ir.cpp:2075:14:2075:22 | ChiTotal | total:m2075_2 | -| ir.cpp:2075:14:2075:22 | Load | m2080_2 | -| ir.cpp:2075:14:2075:22 | SideEffect | ~m2077_6 | -| ir.cpp:2075:37:2075:37 | Address | &:r2075_5 | -| ir.cpp:2076:16:2076:16 | Address | &:r2076_1 | -| ir.cpp:2077:3:2077:3 | Address | &:r2077_10 | -| ir.cpp:2077:7:2077:7 | Address | &:r2077_1 | -| ir.cpp:2077:7:2077:7 | Left | r2077_2 | -| ir.cpp:2077:7:2077:7 | Load | m2075_6 | -| ir.cpp:2077:7:2077:13 | Condition | r2077_4 | -| ir.cpp:2077:7:2079:28 | Address | &:r2077_8 | -| ir.cpp:2077:7:2079:28 | Address | &:r2077_12 | -| ir.cpp:2077:7:2079:28 | Address | &:r2077_14 | -| ir.cpp:2077:7:2079:28 | Load | m2077_7 | -| ir.cpp:2077:7:2079:28 | Phi | from 2:m2077_13 | -| ir.cpp:2077:7:2079:28 | Phi | from 2:~m2078_6 | -| ir.cpp:2077:7:2079:28 | Phi | from 3:m2077_15 | -| ir.cpp:2077:7:2079:28 | Phi | from 3:~m2079_6 | -| ir.cpp:2077:7:2079:28 | StoreValue | r2077_9 | -| ir.cpp:2077:11:2077:13 | Right | r2077_3 | -| ir.cpp:2078:6:2078:20 | CallTarget | func:r2078_1 | -| ir.cpp:2078:6:2078:20 | ChiPartial | partial:m2078_5 | -| ir.cpp:2078:6:2078:20 | ChiTotal | total:m2075_4 | -| ir.cpp:2078:6:2078:20 | SideEffect | ~m2075_4 | -| ir.cpp:2078:6:2078:26 | StoreValue | r2078_9 | -| ir.cpp:2078:22:2078:22 | Address | &:r2078_2 | -| ir.cpp:2078:22:2078:22 | Arg(0) | 0:r2078_3 | -| ir.cpp:2078:22:2078:22 | Load | m2075_6 | -| ir.cpp:2078:26:2078:26 | Address | &:r2078_7 | -| ir.cpp:2078:26:2078:26 | Load | m2075_6 | -| ir.cpp:2078:26:2078:26 | Unary | r2078_8 | -| ir.cpp:2079:5:2079:28 | StoreValue | r2079_9 | -| ir.cpp:2079:6:2079:20 | CallTarget | func:r2079_1 | -| ir.cpp:2079:6:2079:20 | ChiPartial | partial:m2079_5 | -| ir.cpp:2079:6:2079:20 | ChiTotal | total:m2075_4 | -| ir.cpp:2079:6:2079:20 | SideEffect | ~m2075_4 | -| ir.cpp:2079:6:2079:27 | Unary | r2079_8 | -| ir.cpp:2079:22:2079:22 | Address | &:r2079_2 | -| ir.cpp:2079:22:2079:22 | Arg(0) | 0:r2079_3 | -| ir.cpp:2079:22:2079:22 | Load | m2075_6 | -| ir.cpp:2079:26:2079:27 | Unary | r2079_7 | -| ir.cpp:2080:1:2080:1 | Address | &:r2080_1 | -| ir.cpp:2082:6:2082:17 | ChiPartial | partial:m2082_3 | -| ir.cpp:2082:6:2082:17 | ChiTotal | total:m2082_2 | -| ir.cpp:2082:6:2082:17 | SideEffect | ~m2085_6 | -| ir.cpp:2083:8:2083:8 | Address | &:r2083_1 | -| ir.cpp:2083:12:2083:18 | Address | &:r2083_4 | -| ir.cpp:2083:12:2083:18 | Arg(0) | 0:r2083_3 | -| ir.cpp:2083:12:2083:18 | CallTarget | func:r2083_2 | -| ir.cpp:2083:12:2083:18 | ChiPartial | partial:m2083_5 | -| ir.cpp:2083:12:2083:18 | ChiTotal | total:m2082_4 | -| ir.cpp:2083:12:2083:18 | SideEffect | ~m2082_4 | -| ir.cpp:2083:12:2083:18 | StoreValue | r2083_8 | -| ir.cpp:2083:12:2083:18 | Unary | r2083_4 | -| ir.cpp:2084:3:2084:4 | Address | &:r2084_4 | -| ir.cpp:2084:3:2084:8 | ChiPartial | partial:m2084_5 | -| ir.cpp:2084:3:2084:8 | ChiTotal | total:m2083_7 | -| ir.cpp:2084:4:2084:4 | Address | &:r2084_2 | -| ir.cpp:2084:4:2084:4 | Load | m2083_9 | -| ir.cpp:2084:4:2084:4 | Unary | r2084_3 | -| ir.cpp:2084:8:2084:8 | StoreValue | r2084_1 | -| ir.cpp:2085:3:2085:10 | CallTarget | func:r2085_1 | -| ir.cpp:2085:3:2085:10 | ChiPartial | partial:m2085_5 | -| ir.cpp:2085:3:2085:10 | ChiTotal | total:m2083_6 | -| ir.cpp:2085:3:2085:10 | SideEffect | ~m2083_6 | -| ir.cpp:2085:10:2085:10 | Address | &:r2085_2 | -| ir.cpp:2085:10:2085:10 | Arg(0) | 0:r2085_3 | -| ir.cpp:2085:10:2085:10 | Load | m2083_9 | -| ir.cpp:2088:7:2088:7 | Address | &:r2088_5 | -| ir.cpp:2088:7:2088:7 | Address | &:r2088_5 | -| ir.cpp:2088:7:2088:7 | Address | &:r2088_7 | -| ir.cpp:2088:7:2088:7 | Address | &:r2088_7 | -| ir.cpp:2088:7:2088:7 | ChiPartial | partial:m2088_3 | -| ir.cpp:2088:7:2088:7 | ChiTotal | total:m2088_2 | -| ir.cpp:2088:7:2088:7 | Load | m2088_6 | -| ir.cpp:2088:7:2088:7 | SideEffect | m2088_3 | -| ir.cpp:2088:7:2088:7 | SideEffect | m2088_8 | -| ir.cpp:2090:10:2090:24 | ChiPartial | partial:m2090_3 | -| ir.cpp:2090:10:2090:24 | ChiTotal | total:m2090_2 | -| ir.cpp:2090:10:2090:24 | SideEffect | m2090_3 | -| ir.cpp:2090:32:2090:32 | Address | &:r2090_5 | -| ir.cpp:2090:32:2090:32 | Address | &:r2090_5 | -| ir.cpp:2090:32:2090:32 | Address | &:r2090_7 | -| ir.cpp:2090:32:2090:32 | Address | &:r2090_7 | -| ir.cpp:2090:32:2090:32 | Load | m2090_6 | -| ir.cpp:2090:32:2090:32 | SideEffect | m2090_8 | -| ir.cpp:2092:13:2092:18 | Address | &:r2092_5 | -| ir.cpp:2092:13:2092:18 | Address | &:r2092_5 | -| ir.cpp:2092:13:2092:18 | Address | &:r2092_7 | -| ir.cpp:2092:13:2092:18 | Address | &:r2092_7 | -| ir.cpp:2092:13:2092:18 | ChiPartial | partial:m2092_3 | -| ir.cpp:2092:13:2092:18 | ChiTotal | total:m2092_2 | -| ir.cpp:2092:13:2092:18 | Load | m2092_6 | -| ir.cpp:2092:13:2092:18 | SideEffect | m2092_3 | -| ir.cpp:2092:13:2092:18 | SideEffect | m2092_8 | -| ir.cpp:2095:7:2095:7 | Address | &:r2095_5 | -| ir.cpp:2095:7:2095:7 | Address | &:r2095_5 | -| ir.cpp:2095:7:2095:7 | Address | &:r2095_7 | -| ir.cpp:2095:7:2095:7 | Address | &:r2095_7 | -| ir.cpp:2095:7:2095:7 | Address | &:r2095_9 | -| ir.cpp:2095:7:2095:7 | Arg(this) | this:r2095_9 | -| ir.cpp:2095:7:2095:7 | CallTarget | func:r2095_10 | -| ir.cpp:2095:7:2095:7 | ChiPartial | partial:m2095_3 | -| ir.cpp:2095:7:2095:7 | ChiPartial | partial:m2095_12 | -| ir.cpp:2095:7:2095:7 | ChiPartial | partial:m2095_14 | -| ir.cpp:2095:7:2095:7 | ChiTotal | total:m2095_2 | -| ir.cpp:2095:7:2095:7 | ChiTotal | total:m2095_4 | -| ir.cpp:2095:7:2095:7 | ChiTotal | total:m2095_8 | -| ir.cpp:2095:7:2095:7 | Load | m2095_6 | -| ir.cpp:2095:7:2095:7 | SideEffect | m2095_15 | -| ir.cpp:2095:7:2095:7 | SideEffect | ~m2095_4 | -| ir.cpp:2095:7:2095:7 | SideEffect | ~m2095_13 | -| ir.cpp:2095:7:2095:7 | Unary | m2095_6 | -| ir.cpp:2098:5:2098:13 | Address | &:r2098_5 | -| ir.cpp:2098:5:2098:13 | Address | &:r2098_5 | -| ir.cpp:2098:5:2098:13 | Address | &:r2098_7 | -| ir.cpp:2098:5:2098:13 | Address | &:r2098_7 | -| ir.cpp:2098:5:2098:13 | ChiPartial | partial:m2098_3 | -| ir.cpp:2098:5:2098:13 | ChiTotal | total:m2098_2 | -| ir.cpp:2098:5:2098:13 | Load | m2098_6 | -| ir.cpp:2098:5:2098:13 | SideEffect | m2098_8 | -| ir.cpp:2098:5:2098:13 | SideEffect | ~m2098_14 | -| ir.cpp:2098:5:2098:13 | Unary | m2098_6 | -| ir.cpp:2098:18:2098:18 | Arg(this) | this:r2098_10 | -| ir.cpp:2098:18:2098:18 | CallTarget | func:r2098_11 | -| ir.cpp:2098:18:2098:18 | ChiPartial | partial:m2098_13 | -| ir.cpp:2098:18:2098:18 | ChiTotal | total:m2098_4 | -| ir.cpp:2098:18:2098:18 | SideEffect | ~m2098_4 | -| ir.cpp:2100:10:2100:24 | ChiPartial | partial:m2100_3 | -| ir.cpp:2100:10:2100:24 | ChiTotal | total:m2100_2 | -| ir.cpp:2100:10:2100:24 | SideEffect | m2100_3 | -| ir.cpp:2100:32:2100:32 | Address | &:r2100_5 | -| ir.cpp:2100:32:2100:32 | Address | &:r2100_5 | -| ir.cpp:2100:32:2100:32 | Address | &:r2100_7 | -| ir.cpp:2100:32:2100:32 | Address | &:r2100_7 | -| ir.cpp:2100:32:2100:32 | Load | m2100_6 | -| ir.cpp:2100:32:2100:32 | SideEffect | m2100_8 | -| ir.cpp:2105:5:2105:18 | Address | &:r2105_5 | -| ir.cpp:2105:5:2105:18 | ChiPartial | partial:m2105_3 | -| ir.cpp:2105:5:2105:18 | ChiTotal | total:m2105_2 | -| ir.cpp:2105:5:2105:18 | Load | m2115_2 | -| ir.cpp:2105:5:2105:18 | SideEffect | ~m2114_6 | -| ir.cpp:2107:12:2107:13 | Address | &:r2107_1 | -| ir.cpp:2107:17:2107:27 | Address | &:r2107_4 | -| ir.cpp:2107:17:2107:27 | Address | &:r2107_8 | -| ir.cpp:2107:17:2107:27 | Arg(0) | 0:r2107_3 | -| ir.cpp:2107:17:2107:27 | Arg(this) | this:r2107_8 | -| ir.cpp:2107:17:2107:27 | CallTarget | func:r2107_2 | -| ir.cpp:2107:17:2107:27 | CallTarget | func:r2107_9 | -| ir.cpp:2107:17:2107:27 | ChiPartial | partial:m2107_5 | -| ir.cpp:2107:17:2107:27 | ChiPartial | partial:m2107_11 | -| ir.cpp:2107:17:2107:27 | ChiPartial | partial:m2107_13 | -| ir.cpp:2107:17:2107:27 | ChiTotal | total:m2105_4 | -| ir.cpp:2107:17:2107:27 | ChiTotal | total:m2107_6 | -| ir.cpp:2107:17:2107:27 | ChiTotal | total:m2107_7 | -| ir.cpp:2107:17:2107:27 | SideEffect | ~m2105_4 | -| ir.cpp:2107:17:2107:27 | SideEffect | ~m2107_6 | -| ir.cpp:2107:17:2107:27 | StoreValue | r2107_8 | -| ir.cpp:2107:17:2107:27 | Unary | r2107_4 | -| ir.cpp:2108:5:2108:13 | CallTarget | func:r2108_1 | -| ir.cpp:2108:5:2108:13 | ChiPartial | partial:m2108_5 | -| ir.cpp:2108:5:2108:13 | ChiTotal | total:m2107_12 | -| ir.cpp:2108:5:2108:13 | SideEffect | ~m2107_12 | -| ir.cpp:2108:12:2108:13 | Address | &:r2108_2 | -| ir.cpp:2108:12:2108:13 | Arg(0) | 0:r2108_3 | -| ir.cpp:2108:12:2108:13 | Load | m2107_15 | -| ir.cpp:2110:12:2110:13 | Address | &:r2110_1 | -| ir.cpp:2110:17:2110:30 | Address | &:r2110_4 | -| ir.cpp:2110:17:2110:30 | Address | &:r2110_8 | -| ir.cpp:2110:17:2110:30 | Arg(0) | 0:r2110_3 | -| ir.cpp:2110:17:2110:30 | Arg(this) | this:r2110_8 | -| ir.cpp:2110:17:2110:30 | CallTarget | func:r2110_2 | -| ir.cpp:2110:17:2110:30 | CallTarget | func:r2110_9 | -| ir.cpp:2110:17:2110:30 | ChiPartial | partial:m2110_5 | -| ir.cpp:2110:17:2110:30 | ChiPartial | partial:m2110_11 | -| ir.cpp:2110:17:2110:30 | ChiPartial | partial:m2110_13 | -| ir.cpp:2110:17:2110:30 | ChiTotal | total:m2108_6 | -| ir.cpp:2110:17:2110:30 | ChiTotal | total:m2110_6 | -| ir.cpp:2110:17:2110:30 | ChiTotal | total:m2110_7 | -| ir.cpp:2110:17:2110:30 | SideEffect | ~m2108_6 | -| ir.cpp:2110:17:2110:30 | SideEffect | ~m2110_6 | -| ir.cpp:2110:17:2110:30 | StoreValue | r2110_15 | -| ir.cpp:2110:17:2110:30 | Unary | r2110_4 | -| ir.cpp:2110:17:2110:30 | Unary | r2110_8 | -| ir.cpp:2111:5:2111:13 | CallTarget | func:r2111_1 | -| ir.cpp:2111:5:2111:13 | ChiPartial | partial:m2111_5 | -| ir.cpp:2111:5:2111:13 | ChiTotal | total:m2110_12 | -| ir.cpp:2111:5:2111:13 | SideEffect | ~m2110_12 | -| ir.cpp:2111:12:2111:13 | Address | &:r2111_2 | -| ir.cpp:2111:12:2111:13 | Arg(0) | 0:r2111_3 | -| ir.cpp:2111:12:2111:13 | Load | m2110_16 | -| ir.cpp:2113:15:2113:15 | Address | &:r2113_1 | -| ir.cpp:2113:19:2113:32 | Address | &:r2113_4 | -| ir.cpp:2113:19:2113:32 | Address | &:r2113_8 | -| ir.cpp:2113:19:2113:32 | Arg(0) | 0:r2113_3 | -| ir.cpp:2113:19:2113:32 | Arg(this) | this:r2113_8 | -| ir.cpp:2113:19:2113:32 | CallTarget | func:r2113_2 | -| ir.cpp:2113:19:2113:32 | CallTarget | func:r2113_9 | -| ir.cpp:2113:19:2113:32 | ChiPartial | partial:m2113_5 | -| ir.cpp:2113:19:2113:32 | ChiPartial | partial:m2113_11 | -| ir.cpp:2113:19:2113:32 | ChiPartial | partial:m2113_13 | -| ir.cpp:2113:19:2113:32 | ChiTotal | total:m2111_6 | -| ir.cpp:2113:19:2113:32 | ChiTotal | total:m2113_6 | -| ir.cpp:2113:19:2113:32 | ChiTotal | total:m2113_7 | -| ir.cpp:2113:19:2113:32 | SideEffect | ~m2111_6 | -| ir.cpp:2113:19:2113:32 | SideEffect | ~m2113_6 | -| ir.cpp:2113:19:2113:32 | StoreValue | r2113_8 | -| ir.cpp:2113:19:2113:32 | Unary | r2113_4 | -| ir.cpp:2114:5:2114:12 | CallTarget | func:r2114_1 | -| ir.cpp:2114:5:2114:12 | ChiPartial | partial:m2114_5 | -| ir.cpp:2114:5:2114:12 | ChiTotal | total:m2113_12 | -| ir.cpp:2114:5:2114:12 | SideEffect | ~m2113_12 | -| ir.cpp:2114:12:2114:12 | Address | &:r2114_2 | -| ir.cpp:2114:12:2114:12 | Arg(0) | 0:r2114_3 | -| ir.cpp:2114:12:2114:12 | Load | m2113_15 | -| ir.cpp:2115:1:2115:1 | Address | &:r2115_1 | -| ir.cpp:2119:6:2119:26 | ChiPartial | partial:m2119_3 | -| ir.cpp:2119:6:2119:26 | ChiTotal | total:m2119_2 | -| ir.cpp:2119:6:2119:26 | SideEffect | ~m2121_5 | -| ir.cpp:2120:13:2120:13 | Address | &:r2120_1 | -| ir.cpp:2120:16:2120:19 | StoreValue | r2120_2 | -| ir.cpp:2121:3:2121:27 | CallTarget | func:r2121_1 | -| ir.cpp:2121:3:2121:27 | ChiPartial | partial:m2121_4 | -| ir.cpp:2121:3:2121:27 | ChiTotal | total:m2119_4 | -| ir.cpp:2121:3:2121:27 | SideEffect | ~m2119_4 | -| ir.cpp:2121:29:2121:29 | Arg(0) | 0:r2121_2 | -| ir.cpp:2126:5:2126:11 | Address | &:r2126_6 | -| ir.cpp:2126:5:2126:11 | ChiPartial | partial:m2126_3 | -| ir.cpp:2126:5:2126:11 | ChiTotal | total:m2126_2 | -| ir.cpp:2126:5:2126:11 | Load | m2131_4 | -| ir.cpp:2126:5:2126:11 | SideEffect | ~m2130_4 | -| ir.cpp:2127:9:2127:9 | Address | &:r2127_1 | -| ir.cpp:2127:13:2127:15 | CallTarget | func:r2127_2 | -| ir.cpp:2127:13:2127:15 | ChiPartial | partial:m2127_6 | -| ir.cpp:2127:13:2127:15 | ChiTotal | total:m2126_4 | -| ir.cpp:2127:13:2127:15 | SideEffect | ~m2126_4 | -| ir.cpp:2127:13:2127:15 | StoreValue | r2127_5 | -| ir.cpp:2127:17:2127:17 | Arg(0) | 0:r2127_3 | -| ir.cpp:2127:19:2127:19 | Arg(1) | 1:r2127_4 | -| ir.cpp:2128:9:2128:9 | Address | &:r2128_1 | -| ir.cpp:2128:9:2128:9 | Left | r2128_2 | -| ir.cpp:2128:9:2128:9 | Load | m2127_8 | -| ir.cpp:2128:9:2128:14 | Condition | r2128_4 | -| ir.cpp:2128:14:2128:14 | Right | r2128_3 | -| ir.cpp:2129:9:2129:12 | CallTarget | func:r2129_1 | -| ir.cpp:2129:9:2129:12 | ChiPartial | partial:m2129_4 | -| ir.cpp:2129:9:2129:12 | ChiTotal | total:m2127_7 | -| ir.cpp:2129:9:2129:12 | SideEffect | ~m2127_7 | -| ir.cpp:2129:14:2129:14 | Arg(0) | 0:r2129_2 | -| ir.cpp:2130:5:2130:12 | CallTarget | func:r2130_1 | -| ir.cpp:2130:5:2130:12 | ChiPartial | partial:m2130_3 | -| ir.cpp:2130:5:2130:12 | ChiTotal | total:m2127_7 | -| ir.cpp:2130:5:2130:12 | SideEffect | ~m2127_7 | -| ir.cpp:2131:5:2131:13 | Address | &:r2131_1 | -| ir.cpp:2131:12:2131:12 | Address | &:r2131_2 | -| ir.cpp:2131:12:2131:12 | Load | m2127_8 | -| ir.cpp:2131:12:2131:12 | StoreValue | r2131_3 | -| ir.cpp:2134:6:2134:17 | ChiPartial | partial:m2134_3 | -| ir.cpp:2134:6:2134:17 | ChiTotal | total:m2134_2 | -| ir.cpp:2135:5:2135:12 | CallTarget | func:r2135_1 | -| ir.cpp:2135:5:2135:12 | ChiPartial | partial:m2135_3 | -| ir.cpp:2135:5:2135:12 | ChiTotal | total:m2134_4 | -| ir.cpp:2135:5:2135:12 | SideEffect | ~m2134_4 | -| ir.cpp:2136:5:2136:8 | CallTarget | func:r2136_1 | -| ir.cpp:2136:5:2136:8 | ChiPartial | partial:m2136_4 | -| ir.cpp:2136:5:2136:8 | ChiTotal | total:m2135_4 | -| ir.cpp:2136:5:2136:8 | SideEffect | ~m2135_4 | -| ir.cpp:2136:10:2136:10 | Arg(0) | 0:r2136_2 | -| ir.cpp:2139:5:2139:16 | Address | &:r2139_6 | -| ir.cpp:2139:5:2139:16 | ChiPartial | partial:m2139_3 | -| ir.cpp:2139:5:2139:16 | ChiTotal | total:m2139_2 | -| ir.cpp:2139:5:2139:16 | Load | m2144_4 | -| ir.cpp:2139:5:2139:16 | SideEffect | ~m2143_4 | -| ir.cpp:2140:9:2140:9 | Address | &:r2140_1 | -| ir.cpp:2140:13:2140:15 | CallTarget | func:r2140_2 | -| ir.cpp:2140:13:2140:15 | ChiPartial | partial:m2140_6 | -| ir.cpp:2140:13:2140:15 | ChiTotal | total:m2139_4 | -| ir.cpp:2140:13:2140:15 | SideEffect | ~m2139_4 | -| ir.cpp:2140:13:2140:15 | StoreValue | r2140_5 | -| ir.cpp:2140:17:2140:17 | Arg(0) | 0:r2140_3 | -| ir.cpp:2140:19:2140:19 | Arg(1) | 1:r2140_4 | +| ir.cpp:1971:9:1971:9 | Left | r1971_2 | +| ir.cpp:1971:9:1971:9 | Load | m1970_6 | +| ir.cpp:1971:9:1971:14 | Condition | r1971_4 | +| ir.cpp:1971:13:1971:14 | Right | r1971_3 | +| ir.cpp:1972:9:1972:20 | CallTarget | func:r1972_1 | +| ir.cpp:1972:9:1972:20 | ChiPartial | partial:m1972_3 | +| ir.cpp:1972:9:1972:20 | ChiTotal | total:m1970_4 | +| ir.cpp:1972:9:1972:20 | SideEffect | ~m1970_4 | +| ir.cpp:1974:5:1974:13 | Address | &:r1974_1 | +| ir.cpp:1974:12:1974:12 | Address | &:r1974_2 | +| ir.cpp:1974:12:1974:12 | Load | m1970_6 | +| ir.cpp:1974:12:1974:12 | StoreValue | r1974_3 | +| ir.cpp:1977:5:1977:19 | Address | &:r1977_7 | +| ir.cpp:1977:5:1977:19 | ChiPartial | partial:m1977_3 | +| ir.cpp:1977:5:1977:19 | ChiTotal | total:m1977_2 | +| ir.cpp:1977:5:1977:19 | Load | m1978_4 | +| ir.cpp:1977:5:1977:19 | SideEffect | m1977_3 | +| ir.cpp:1977:25:1977:25 | Address | &:r1977_5 | +| ir.cpp:1978:5:1978:13 | Address | &:r1978_1 | +| ir.cpp:1978:12:1978:12 | Address | &:r1978_2 | +| ir.cpp:1978:12:1978:12 | Load | m1977_6 | +| ir.cpp:1978:12:1978:12 | StoreValue | r1978_3 | +| ir.cpp:1981:6:1981:43 | ChiPartial | partial:m1981_3 | +| ir.cpp:1981:6:1981:43 | ChiTotal | total:m1981_2 | +| ir.cpp:1981:6:1981:43 | SideEffect | ~m1989_6 | +| ir.cpp:1982:7:1982:7 | Address | &:r1982_1 | +| ir.cpp:1982:7:1982:7 | Address | &:r1982_1 | +| ir.cpp:1982:7:1982:7 | Arg(this) | this:r1982_1 | +| ir.cpp:1982:7:1982:7 | CallTarget | func:r1982_3 | +| ir.cpp:1982:7:1982:7 | ChiPartial | partial:m1982_5 | +| ir.cpp:1982:7:1982:7 | ChiPartial | partial:m1982_7 | +| ir.cpp:1982:7:1982:7 | ChiTotal | total:m1981_4 | +| ir.cpp:1982:7:1982:7 | ChiTotal | total:m1982_2 | +| ir.cpp:1982:7:1982:7 | SideEffect | ~m1981_4 | +| ir.cpp:1983:9:1983:9 | Address | &:r1983_1 | +| ir.cpp:1984:5:1984:5 | Address | &:r1984_7 | +| ir.cpp:1984:11:1984:30 | CallTarget | func:r1984_2 | +| ir.cpp:1984:11:1984:30 | ChiPartial | partial:m1984_5 | +| ir.cpp:1984:11:1984:30 | ChiTotal | total:m1982_6 | +| ir.cpp:1984:11:1984:30 | SideEffect | ~m1982_6 | +| ir.cpp:1984:11:1984:30 | StoreValue | r1984_4 | +| ir.cpp:1984:32:1984:33 | Arg(0) | 0:r1984_3 | +| ir.cpp:1985:9:1985:9 | Address | &:r1985_1 | +| ir.cpp:1986:5:1986:5 | Address | &:r1986_6 | +| ir.cpp:1986:9:1986:31 | CallTarget | func:r1986_1 | +| ir.cpp:1986:9:1986:31 | ChiPartial | partial:m1986_4 | +| ir.cpp:1986:9:1986:31 | ChiTotal | total:m1984_6 | +| ir.cpp:1986:9:1986:31 | SideEffect | ~m1984_6 | +| ir.cpp:1986:9:1986:31 | StoreValue | r1986_3 | +| ir.cpp:1986:33:1986:34 | Arg(0) | 0:r1986_2 | +| ir.cpp:1987:9:1987:9 | Address | &:r1987_1 | +| ir.cpp:1988:5:1988:5 | Address | &:r1988_6 | +| ir.cpp:1988:9:1988:23 | CallTarget | func:r1988_1 | +| ir.cpp:1988:9:1988:23 | ChiPartial | partial:m1988_4 | +| ir.cpp:1988:9:1988:23 | ChiTotal | total:m1986_5 | +| ir.cpp:1988:9:1988:23 | SideEffect | ~m1986_5 | +| ir.cpp:1988:9:1988:23 | StoreValue | r1988_3 | +| ir.cpp:1988:25:1988:26 | Arg(0) | 0:r1988_2 | +| ir.cpp:1989:1:1989:1 | Address | &:r1989_2 | +| ir.cpp:1989:1:1989:1 | Address | &:r1989_2 | +| ir.cpp:1989:1:1989:1 | Arg(this) | this:r1989_2 | +| ir.cpp:1989:1:1989:1 | CallTarget | func:r1989_3 | +| ir.cpp:1989:1:1989:1 | ChiPartial | partial:m1989_5 | +| ir.cpp:1989:1:1989:1 | ChiPartial | partial:m1989_8 | +| ir.cpp:1989:1:1989:1 | ChiTotal | total:m1982_8 | +| ir.cpp:1989:1:1989:1 | ChiTotal | total:m1988_5 | +| ir.cpp:1989:1:1989:1 | SideEffect | m1982_8 | +| ir.cpp:1989:1:1989:1 | SideEffect | ~m1988_5 | +| ir.cpp:1991:6:1991:23 | ChiPartial | partial:m1991_3 | +| ir.cpp:1991:6:1991:23 | ChiTotal | total:m1991_2 | +| ir.cpp:1991:6:1991:23 | SideEffect | m1991_3 | +| ir.cpp:1992:7:1992:7 | Address | &:r1992_1 | +| ir.cpp:1992:10:1992:10 | Address | &:r1992_3 | +| ir.cpp:1993:3:1993:3 | Address | &:r1993_5 | +| ir.cpp:1993:7:1993:7 | Address | &:r1993_2 | +| ir.cpp:1993:7:1993:7 | Address | &:r1993_2 | +| ir.cpp:1993:7:1993:12 | Load | m1993_3 | +| ir.cpp:1993:7:1993:12 | StoreValue | r1993_4 | +| ir.cpp:1993:11:1993:12 | StoreValue | r1993_1 | +| ir.cpp:1996:6:1996:38 | ChiPartial | partial:m1996_3 | +| ir.cpp:1996:6:1996:38 | ChiTotal | total:m1996_2 | +| ir.cpp:1996:6:1996:38 | SideEffect | m1996_3 | +| ir.cpp:1997:7:1997:7 | Address | &:r1997_1 | +| ir.cpp:1997:10:1997:10 | Address | &:r1997_3 | +| ir.cpp:1997:13:1997:14 | StoreValue | r1997_4 | +| ir.cpp:1998:3:1998:3 | Address | &:r1998_7 | +| ir.cpp:1998:8:1998:8 | Address | &:r1998_2 | +| ir.cpp:1998:8:1998:8 | Address | &:r1998_2 | +| ir.cpp:1998:8:1998:8 | Address | &:r1998_2 | +| ir.cpp:1998:8:1998:8 | Left | r1998_3 | +| ir.cpp:1998:8:1998:8 | Load | m1997_5 | +| ir.cpp:1998:8:1998:14 | Load | m1998_5 | +| ir.cpp:1998:8:1998:14 | StoreValue | r1998_4 | +| ir.cpp:1998:8:1998:14 | StoreValue | r1998_6 | +| ir.cpp:1998:13:1998:14 | Right | r1998_1 | +| ir.cpp:2005:15:2005:43 | Address | &:r2005_5 | +| ir.cpp:2005:15:2005:43 | ChiPartial | partial:m2005_3 | +| ir.cpp:2005:15:2005:43 | ChiTotal | total:m2005_2 | +| ir.cpp:2005:15:2005:43 | Load | m2006_4 | +| ir.cpp:2005:15:2005:43 | SideEffect | m2005_3 | +| ir.cpp:2006:9:2006:17 | Address | &:r2006_1 | +| ir.cpp:2006:16:2006:16 | StoreValue | r2006_3 | +| ir.cpp:2006:16:2006:16 | Unary | r2006_2 | +| ir.cpp:2008:14:2008:39 | Address | &:r2008_5 | +| ir.cpp:2008:14:2008:39 | ChiPartial | partial:m2008_3 | +| ir.cpp:2008:14:2008:39 | ChiTotal | total:m2008_2 | +| ir.cpp:2008:14:2008:39 | Load | m2009_4 | +| ir.cpp:2008:14:2008:39 | SideEffect | m2008_3 | +| ir.cpp:2009:9:2009:17 | Address | &:r2009_1 | +| ir.cpp:2009:16:2009:16 | Address | &:r2009_2 | +| ir.cpp:2009:16:2009:16 | Load | ~m2008_3 | +| ir.cpp:2009:16:2009:16 | StoreValue | r2009_3 | +| ir.cpp:2013:6:2013:55 | ChiPartial | partial:m2013_3 | +| ir.cpp:2013:6:2013:55 | ChiTotal | total:m2013_2 | +| ir.cpp:2013:6:2013:55 | SideEffect | ~m2028_4 | +| ir.cpp:2014:7:2014:7 | Address | &:r2014_1 | +| ir.cpp:2016:7:2016:35 | CallTarget | func:r2016_2 | +| ir.cpp:2016:7:2016:35 | ChiPartial | partial:m2016_4 | +| ir.cpp:2016:7:2016:35 | ChiTotal | total:m2013_4 | +| ir.cpp:2016:7:2016:35 | SideEffect | ~m2013_4 | +| ir.cpp:2016:7:2016:35 | Unary | r2016_3 | +| ir.cpp:2017:5:2017:36 | CallTarget | func:r2017_1 | +| ir.cpp:2017:5:2017:36 | ChiPartial | partial:m2017_3 | +| ir.cpp:2017:5:2017:36 | ChiTotal | total:m2016_5 | +| ir.cpp:2017:5:2017:36 | SideEffect | ~m2016_5 | +| ir.cpp:2017:5:2017:36 | Unary | r2017_2 | +| ir.cpp:2018:7:2018:32 | CallTarget | func:r2018_2 | +| ir.cpp:2018:7:2018:32 | ChiPartial | partial:m2018_4 | +| ir.cpp:2018:7:2018:32 | ChiTotal | total:m2017_4 | +| ir.cpp:2018:7:2018:32 | SideEffect | ~m2017_4 | +| ir.cpp:2019:5:2019:33 | CallTarget | func:r2019_1 | +| ir.cpp:2019:5:2019:33 | ChiPartial | partial:m2019_3 | +| ir.cpp:2019:5:2019:33 | ChiTotal | total:m2018_5 | +| ir.cpp:2019:5:2019:33 | SideEffect | ~m2018_5 | +| ir.cpp:2021:7:2021:7 | Address | &:r2021_1 | +| ir.cpp:2022:5:2022:5 | Address | &:r2022_7 | +| ir.cpp:2022:11:2022:39 | Address | &:r2022_3 | +| ir.cpp:2022:11:2022:39 | CallTarget | func:r2022_2 | +| ir.cpp:2022:11:2022:39 | ChiPartial | partial:m2022_4 | +| ir.cpp:2022:11:2022:39 | ChiTotal | total:m2019_4 | +| ir.cpp:2022:11:2022:39 | SideEffect | ~m2019_4 | +| ir.cpp:2022:40:2022:42 | Load | ~m2022_5 | +| ir.cpp:2022:40:2022:42 | StoreValue | r2022_6 | +| ir.cpp:2023:7:2023:7 | Address | &:r2023_1 | +| ir.cpp:2024:5:2024:5 | Address | &:r2024_6 | +| ir.cpp:2024:9:2024:40 | Address | &:r2024_2 | +| ir.cpp:2024:9:2024:40 | CallTarget | func:r2024_1 | +| ir.cpp:2024:9:2024:40 | ChiPartial | partial:m2024_3 | +| ir.cpp:2024:9:2024:40 | ChiTotal | total:m2022_5 | +| ir.cpp:2024:9:2024:40 | SideEffect | ~m2022_5 | +| ir.cpp:2024:41:2024:43 | Load | ~m2024_4 | +| ir.cpp:2024:41:2024:43 | StoreValue | r2024_5 | +| ir.cpp:2025:7:2025:7 | Address | &:r2025_1 | +| ir.cpp:2026:5:2026:5 | Address | &:r2026_6 | +| ir.cpp:2026:11:2026:36 | CallTarget | func:r2026_2 | +| ir.cpp:2026:11:2026:36 | ChiPartial | partial:m2026_4 | +| ir.cpp:2026:11:2026:36 | ChiTotal | total:m2024_4 | +| ir.cpp:2026:11:2026:36 | SideEffect | ~m2024_4 | +| ir.cpp:2026:11:2026:36 | StoreValue | r2026_3 | +| ir.cpp:2027:7:2027:7 | Address | &:r2027_1 | +| ir.cpp:2028:5:2028:5 | Address | &:r2028_5 | +| ir.cpp:2028:9:2028:37 | CallTarget | func:r2028_1 | +| ir.cpp:2028:9:2028:37 | ChiPartial | partial:m2028_3 | +| ir.cpp:2028:9:2028:37 | ChiTotal | total:m2026_5 | +| ir.cpp:2028:9:2028:37 | SideEffect | ~m2026_5 | +| ir.cpp:2028:9:2028:37 | StoreValue | r2028_2 | +| ir.cpp:2031:6:2031:18 | ChiPartial | partial:m2031_3 | +| ir.cpp:2031:6:2031:18 | ChiTotal | total:m2031_2 | +| ir.cpp:2031:6:2031:18 | SideEffect | m2031_3 | +| ir.cpp:2032:18:2032:18 | Address | &:r2032_1 | +| ir.cpp:2033:5:2033:5 | Address | &:r2033_1 | +| ir.cpp:2033:5:2033:5 | Load | m2032_2 | +| ir.cpp:2042:6:2042:24 | ChiPartial | partial:m2042_3 | +| ir.cpp:2042:6:2042:24 | ChiTotal | total:m2042_2 | +| ir.cpp:2042:6:2042:24 | SideEffect | ~m2050_5 | +| ir.cpp:2043:12:2043:12 | Address | &:r2043_1 | +| ir.cpp:2045:5:2045:19 | ChiPartial | partial:m2045_7 | +| ir.cpp:2045:5:2045:19 | ChiTotal | total:m2045_5 | +| ir.cpp:2045:7:2045:12 | CallTarget | func:r2045_2 | +| ir.cpp:2045:7:2045:12 | ChiPartial | partial:m2045_4 | +| ir.cpp:2045:7:2045:12 | ChiTotal | total:m2042_4 | +| ir.cpp:2045:7:2045:12 | SideEffect | ~m2042_4 | +| ir.cpp:2045:7:2045:12 | Unary | r2045_3 | +| ir.cpp:2045:13:2045:16 | Address | &:r2045_6 | +| ir.cpp:2046:5:2046:19 | ChiPartial | partial:m2046_7 | +| ir.cpp:2046:5:2046:19 | ChiTotal | total:m2046_5 | +| ir.cpp:2046:7:2046:12 | CallTarget | func:r2046_2 | +| ir.cpp:2046:7:2046:12 | ChiPartial | partial:m2046_4 | +| ir.cpp:2046:7:2046:12 | ChiTotal | total:m2045_8 | +| ir.cpp:2046:7:2046:12 | SideEffect | ~m2045_8 | +| ir.cpp:2046:7:2046:12 | Unary | r2046_3 | +| ir.cpp:2046:13:2046:16 | Address | &:r2046_6 | +| ir.cpp:2047:5:2047:15 | Address | &:r2047_1 | +| ir.cpp:2047:5:2047:15 | Address | &:r2047_1 | +| ir.cpp:2047:7:2047:13 | CallTarget | func:r2047_3 | +| ir.cpp:2047:7:2047:13 | ChiPartial | partial:m2047_5 | +| ir.cpp:2047:7:2047:13 | ChiTotal | total:m2046_8 | +| ir.cpp:2047:7:2047:13 | SideEffect | ~m2046_8 | +| ir.cpp:2047:7:2047:13 | StoreValue | r2047_4 | +| ir.cpp:2048:5:2048:18 | CallTarget | func:r2048_1 | +| ir.cpp:2048:5:2048:18 | ChiPartial | partial:m2048_3 | +| ir.cpp:2048:5:2048:18 | ChiTotal | total:m2047_6 | +| ir.cpp:2048:5:2048:18 | SideEffect | ~m2047_6 | +| ir.cpp:2048:5:2048:18 | Unary | r2048_2 | +| ir.cpp:2048:5:2048:25 | ChiPartial | partial:m2048_6 | +| ir.cpp:2048:5:2048:25 | ChiTotal | total:m2048_4 | +| ir.cpp:2048:19:2048:22 | Address | &:r2048_5 | +| ir.cpp:2049:5:2049:18 | CallTarget | func:r2049_1 | +| ir.cpp:2049:5:2049:18 | ChiPartial | partial:m2049_3 | +| ir.cpp:2049:5:2049:18 | ChiTotal | total:m2048_7 | +| ir.cpp:2049:5:2049:18 | SideEffect | ~m2048_7 | +| ir.cpp:2049:5:2049:18 | Unary | r2049_2 | +| ir.cpp:2049:5:2049:25 | ChiPartial | partial:m2049_6 | +| ir.cpp:2049:5:2049:25 | ChiTotal | total:m2049_4 | +| ir.cpp:2049:19:2049:22 | Address | &:r2049_5 | +| ir.cpp:2050:5:2050:19 | CallTarget | func:r2050_2 | +| ir.cpp:2050:5:2050:19 | ChiPartial | partial:m2050_4 | +| ir.cpp:2050:5:2050:19 | ChiTotal | total:m2049_7 | +| ir.cpp:2050:5:2050:19 | SideEffect | ~m2049_7 | +| ir.cpp:2050:5:2050:19 | StoreValue | r2050_3 | +| ir.cpp:2050:5:2050:21 | Address | &:r2050_1 | +| ir.cpp:2050:5:2050:21 | Address | &:r2050_1 | +| ir.cpp:2053:6:2053:21 | ChiPartial | partial:m2053_3 | +| ir.cpp:2053:6:2053:21 | ChiTotal | total:m2053_2 | +| ir.cpp:2053:6:2053:21 | SideEffect | ~m2057_6 | +| ir.cpp:2054:7:2054:7 | Address | &:r2054_1 | +| ir.cpp:2054:7:2054:7 | Address | &:r2054_1 | +| ir.cpp:2054:7:2054:7 | Arg(this) | this:r2054_1 | +| ir.cpp:2054:7:2054:7 | CallTarget | func:r2054_3 | +| ir.cpp:2054:7:2054:7 | ChiPartial | partial:m2054_5 | +| ir.cpp:2054:7:2054:7 | ChiPartial | partial:m2054_7 | +| ir.cpp:2054:7:2054:7 | ChiTotal | total:m2053_4 | +| ir.cpp:2054:7:2054:7 | ChiTotal | total:m2054_2 | +| ir.cpp:2054:7:2054:7 | SideEffect | ~m2053_4 | +| ir.cpp:2055:11:2055:13 | Address | &:r2055_1 | +| ir.cpp:2055:23:2055:45 | StoreValue | r2055_2 | +| ir.cpp:2056:5:2056:7 | Address | &:r2056_3 | +| ir.cpp:2056:13:2056:32 | StoreValue | r2056_2 | +| ir.cpp:2057:1:2057:1 | Address | &:r2057_2 | +| ir.cpp:2057:1:2057:1 | Address | &:r2057_2 | +| ir.cpp:2057:1:2057:1 | Arg(this) | this:r2057_2 | +| ir.cpp:2057:1:2057:1 | CallTarget | func:r2057_3 | +| ir.cpp:2057:1:2057:1 | ChiPartial | partial:m2057_5 | +| ir.cpp:2057:1:2057:1 | ChiPartial | partial:m2057_8 | +| ir.cpp:2057:1:2057:1 | ChiTotal | total:m2054_6 | +| ir.cpp:2057:1:2057:1 | ChiTotal | total:m2054_8 | +| ir.cpp:2057:1:2057:1 | SideEffect | m2054_8 | +| ir.cpp:2057:1:2057:1 | SideEffect | ~m2054_6 | +| ir.cpp:2059:6:2059:19 | ChiPartial | partial:m2059_3 | +| ir.cpp:2059:6:2059:19 | ChiTotal | total:m2059_2 | +| ir.cpp:2059:6:2059:19 | SideEffect | ~m2063_9 | +| ir.cpp:2059:26:2059:26 | Address | &:r2059_5 | +| ir.cpp:2059:33:2059:33 | Address | &:r2059_7 | +| ir.cpp:2059:40:2059:40 | Address | &:r2059_9 | +| ir.cpp:2059:47:2059:47 | Address | &:r2059_11 | +| ir.cpp:2060:5:2060:5 | Address | &:r2060_7 | +| ir.cpp:2060:9:2060:9 | Address | &:r2060_1 | +| ir.cpp:2060:9:2060:9 | Condition | r2060_2 | +| ir.cpp:2060:9:2060:9 | Load | m2059_6 | +| ir.cpp:2060:9:2060:17 | Address | &:r2060_5 | +| ir.cpp:2060:9:2060:17 | Address | &:r2060_11 | +| ir.cpp:2060:9:2060:17 | Address | &:r2060_15 | +| ir.cpp:2060:9:2060:17 | Load | m2060_4 | +| ir.cpp:2060:9:2060:17 | Phi | from 2:m2060_12 | +| ir.cpp:2060:9:2060:17 | Phi | from 3:m2060_16 | +| ir.cpp:2060:9:2060:17 | StoreValue | r2060_6 | +| ir.cpp:2060:13:2060:13 | Address | &:r2060_9 | +| ir.cpp:2060:13:2060:13 | Load | m2059_8 | +| ir.cpp:2060:13:2060:13 | StoreValue | r2060_10 | +| ir.cpp:2060:17:2060:17 | Address | &:r2060_13 | +| ir.cpp:2060:17:2060:17 | Load | m2059_10 | +| ir.cpp:2060:17:2060:17 | StoreValue | r2060_14 | +| ir.cpp:2061:5:2061:5 | Address | &:r2061_7 | +| ir.cpp:2061:9:2061:9 | Address | &:r2061_1 | +| ir.cpp:2061:9:2061:9 | Condition | r2061_2 | +| ir.cpp:2061:9:2061:9 | Load | m2059_6 | +| ir.cpp:2061:9:2061:17 | Address | &:r2061_5 | +| ir.cpp:2061:9:2061:17 | Address | &:r2061_11 | +| ir.cpp:2061:9:2061:17 | Address | &:r2061_14 | +| ir.cpp:2061:9:2061:17 | Load | m2061_4 | +| ir.cpp:2061:9:2061:17 | Phi | from 5:m2061_12 | +| ir.cpp:2061:9:2061:17 | Phi | from 6:m2061_15 | +| ir.cpp:2061:9:2061:17 | StoreValue | r2061_6 | +| ir.cpp:2061:13:2061:13 | Address | &:r2061_9 | +| ir.cpp:2061:13:2061:13 | Load | m2059_8 | +| ir.cpp:2061:13:2061:13 | StoreValue | r2061_10 | +| ir.cpp:2061:17:2061:17 | StoreValue | r2061_13 | +| ir.cpp:2062:5:2062:5 | Address | &:r2062_7 | +| ir.cpp:2062:9:2062:9 | Address | &:r2062_1 | +| ir.cpp:2062:9:2062:9 | Condition | r2062_2 | +| ir.cpp:2062:9:2062:9 | Load | m2059_6 | +| ir.cpp:2062:9:2062:17 | Address | &:r2062_5 | +| ir.cpp:2062:9:2062:17 | Address | &:r2062_10 | +| ir.cpp:2062:9:2062:17 | Address | &:r2062_13 | +| ir.cpp:2062:9:2062:17 | Load | m2062_4 | +| ir.cpp:2062:9:2062:17 | Phi | from 8:m2062_11 | +| ir.cpp:2062:9:2062:17 | Phi | from 9:m2062_14 | +| ir.cpp:2062:9:2062:17 | StoreValue | r2062_6 | +| ir.cpp:2062:13:2062:13 | StoreValue | r2062_9 | +| ir.cpp:2062:17:2062:17 | StoreValue | r2062_12 | +| ir.cpp:2063:5:2063:19 | ChiPartial | partial:m2063_8 | +| ir.cpp:2063:5:2063:19 | ChiTotal | total:m2059_4 | +| ir.cpp:2063:6:2063:6 | Address | &:r2063_2 | +| ir.cpp:2063:6:2063:6 | Condition | r2063_3 | +| ir.cpp:2063:6:2063:6 | Load | m2059_6 | +| ir.cpp:2063:6:2063:14 | Address | &:r2063_6 | +| ir.cpp:2063:6:2063:14 | Address | &:r2063_7 | +| ir.cpp:2063:6:2063:14 | Address | &:r2063_11 | +| ir.cpp:2063:6:2063:14 | Address | &:r2063_14 | +| ir.cpp:2063:6:2063:14 | Load | m2063_5 | +| ir.cpp:2063:6:2063:14 | Phi | from 11:m2063_12 | +| ir.cpp:2063:6:2063:14 | Phi | from 12:m2063_15 | +| ir.cpp:2063:10:2063:10 | StoreValue | r2063_10 | +| ir.cpp:2063:14:2063:14 | StoreValue | r2063_13 | +| ir.cpp:2063:19:2063:19 | StoreValue | r2063_1 | +| ir.cpp:2069:6:2069:22 | ChiPartial | partial:m2069_3 | +| ir.cpp:2069:6:2069:22 | ChiTotal | total:m2069_2 | +| ir.cpp:2069:6:2069:22 | SideEffect | m2069_3 | +| ir.cpp:2069:29:2069:29 | Address | &:r2069_5 | +| ir.cpp:2069:46:2069:46 | Address | &:r2069_7 | +| ir.cpp:2069:63:2069:63 | Address | &:r2069_9 | +| ir.cpp:2069:80:2069:80 | Address | &:r2069_11 | +| ir.cpp:2070:5:2070:5 | Address | &:r2070_7 | +| ir.cpp:2070:9:2070:9 | Address | &:r2070_1 | +| ir.cpp:2070:9:2070:9 | Condition | r2070_2 | +| ir.cpp:2070:9:2070:9 | Load | m2069_6 | +| ir.cpp:2070:9:2070:17 | Address | &:r2070_5 | +| ir.cpp:2070:9:2070:17 | Address | &:r2070_11 | +| ir.cpp:2070:9:2070:17 | Address | &:r2070_15 | +| ir.cpp:2070:9:2070:17 | Load | m2070_4 | +| ir.cpp:2070:9:2070:17 | Phi | from 2:m2070_12 | +| ir.cpp:2070:9:2070:17 | Phi | from 3:m2070_16 | +| ir.cpp:2070:9:2070:17 | StoreValue | r2070_6 | +| ir.cpp:2070:13:2070:13 | Address | &:r2070_9 | +| ir.cpp:2070:13:2070:13 | Load | m2069_8 | +| ir.cpp:2070:13:2070:13 | StoreValue | r2070_10 | +| ir.cpp:2070:17:2070:17 | Address | &:r2070_13 | +| ir.cpp:2070:17:2070:17 | Load | m2069_10 | +| ir.cpp:2070:17:2070:17 | StoreValue | r2070_14 | +| ir.cpp:2071:5:2071:5 | Address | &:r2071_10 | +| ir.cpp:2071:9:2071:9 | Address | &:r2071_2 | +| ir.cpp:2071:9:2071:9 | Address | &:r2071_6 | +| ir.cpp:2071:9:2071:9 | Address | &:r2071_17 | +| ir.cpp:2071:9:2071:9 | Address | &:r2071_23 | +| ir.cpp:2071:9:2071:9 | Condition | r2071_3 | +| ir.cpp:2071:9:2071:9 | Load | m2069_6 | +| ir.cpp:2071:9:2071:9 | Load | m2071_5 | +| ir.cpp:2071:9:2071:9 | Phi | from 5:m2071_18 | +| ir.cpp:2071:9:2071:9 | Phi | from 6:m2071_24 | +| ir.cpp:2071:9:2071:9 | StoreValue | r2071_7 | +| ir.cpp:2071:9:2071:31 | Address | &:r2071_1 | +| ir.cpp:2071:9:2071:31 | Address | &:r2071_1 | +| ir.cpp:2071:9:2071:31 | Load | m2071_8 | +| ir.cpp:2071:9:2071:31 | StoreValue | r2071_9 | +| ir.cpp:2071:13:2071:13 | Address | &:r2071_12 | +| ir.cpp:2071:13:2071:13 | Address | &:r2071_12 | +| ir.cpp:2071:13:2071:13 | Address | &:r2071_13 | +| ir.cpp:2071:13:2071:13 | Load | m2069_8 | +| ir.cpp:2071:13:2071:13 | Load | m2071_15 | +| ir.cpp:2071:13:2071:13 | StoreValue | r2071_14 | +| ir.cpp:2071:13:2071:13 | StoreValue | r2071_16 | +| ir.cpp:2071:17:2071:31 | Address | &:r2071_19 | +| ir.cpp:2071:17:2071:31 | Address | &:r2071_19 | +| ir.cpp:2071:17:2071:31 | Load | m2071_21 | +| ir.cpp:2071:17:2071:31 | StoreValue | r2071_20 | +| ir.cpp:2071:17:2071:31 | StoreValue | r2071_22 | +| ir.cpp:2072:5:2072:5 | Address | &:r2072_10 | +| ir.cpp:2072:9:2072:9 | Address | &:r2072_2 | +| ir.cpp:2072:9:2072:9 | Address | &:r2072_6 | +| ir.cpp:2072:9:2072:9 | Address | &:r2072_16 | +| ir.cpp:2072:9:2072:9 | Address | &:r2072_22 | +| ir.cpp:2072:9:2072:9 | Condition | r2072_3 | +| ir.cpp:2072:9:2072:9 | Load | m2069_6 | +| ir.cpp:2072:9:2072:9 | Load | m2072_5 | +| ir.cpp:2072:9:2072:9 | Phi | from 8:m2072_17 | +| ir.cpp:2072:9:2072:9 | Phi | from 9:m2072_23 | +| ir.cpp:2072:9:2072:9 | StoreValue | r2072_7 | +| ir.cpp:2072:9:2072:45 | Address | &:r2072_1 | +| ir.cpp:2072:9:2072:45 | Address | &:r2072_1 | +| ir.cpp:2072:9:2072:45 | Load | m2072_8 | +| ir.cpp:2072:9:2072:45 | StoreValue | r2072_9 | +| ir.cpp:2072:13:2072:27 | Address | &:r2072_12 | +| ir.cpp:2072:13:2072:27 | Address | &:r2072_12 | +| ir.cpp:2072:13:2072:27 | Load | m2072_14 | +| ir.cpp:2072:13:2072:27 | StoreValue | r2072_13 | +| ir.cpp:2072:13:2072:27 | StoreValue | r2072_15 | +| ir.cpp:2072:31:2072:45 | Address | &:r2072_18 | +| ir.cpp:2072:31:2072:45 | Address | &:r2072_18 | +| ir.cpp:2072:31:2072:45 | Load | m2072_20 | +| ir.cpp:2072:31:2072:45 | StoreValue | r2072_19 | +| ir.cpp:2072:31:2072:45 | StoreValue | r2072_21 | +| ir.cpp:2073:6:2073:6 | Address | &:r2073_11 | +| ir.cpp:2073:6:2073:6 | Unary | r2073_11 | +| ir.cpp:2073:6:2073:18 | Address | &:r2073_13 | +| ir.cpp:2073:10:2073:10 | Address | &:r2073_5 | +| ir.cpp:2073:10:2073:10 | Condition | r2073_6 | +| ir.cpp:2073:10:2073:10 | Load | m2069_6 | +| ir.cpp:2073:10:2073:18 | Address | &:r2073_9 | +| ir.cpp:2073:10:2073:18 | Address | &:r2073_17 | +| ir.cpp:2073:10:2073:18 | Address | &:r2073_21 | +| ir.cpp:2073:10:2073:18 | Load | m2073_8 | +| ir.cpp:2073:10:2073:18 | Phi | from 11:m2073_18 | +| ir.cpp:2073:10:2073:18 | Phi | from 12:m2073_22 | +| ir.cpp:2073:10:2073:18 | StoreValue | r2073_10 | +| ir.cpp:2073:14:2073:14 | Address | &:r2073_15 | +| ir.cpp:2073:14:2073:14 | Load | m2069_8 | +| ir.cpp:2073:14:2073:14 | StoreValue | r2073_16 | +| ir.cpp:2073:18:2073:18 | Address | &:r2073_19 | +| ir.cpp:2073:18:2073:18 | Load | m2069_10 | +| ir.cpp:2073:18:2073:18 | StoreValue | r2073_20 | +| ir.cpp:2073:23:2073:37 | Address | &:r2073_1 | +| ir.cpp:2073:23:2073:37 | Address | &:r2073_1 | +| ir.cpp:2073:23:2073:37 | Load | m2073_3 | +| ir.cpp:2073:23:2073:37 | StoreValue | r2073_2 | +| ir.cpp:2073:23:2073:37 | StoreValue | r2073_4 | +| ir.cpp:2076:8:2076:8 | Address | &:r2076_5 | +| ir.cpp:2076:8:2076:8 | Address | &:r2076_5 | +| ir.cpp:2076:8:2076:8 | Address | &:r2076_5 | +| ir.cpp:2076:8:2076:8 | Address | &:r2076_5 | +| ir.cpp:2076:8:2076:8 | Address | &:r2076_5 | +| ir.cpp:2076:8:2076:8 | Address | &:r2076_5 | +| ir.cpp:2076:8:2076:8 | Address | &:r2076_7 | +| ir.cpp:2076:8:2076:8 | Address | &:r2076_7 | +| ir.cpp:2076:8:2076:8 | Address | &:r2076_7 | +| ir.cpp:2076:8:2076:8 | Address | &:r2076_7 | +| ir.cpp:2076:8:2076:8 | Address | &:r2076_7 | +| ir.cpp:2076:8:2076:8 | Address | &:r2076_7 | +| ir.cpp:2076:8:2076:8 | Address | &:r2076_10 | +| ir.cpp:2076:8:2076:8 | ChiPartial | partial:m2076_3 | +| ir.cpp:2076:8:2076:8 | ChiPartial | partial:m2076_3 | +| ir.cpp:2076:8:2076:8 | ChiPartial | partial:m2076_3 | +| ir.cpp:2076:8:2076:8 | ChiTotal | total:m2076_2 | +| ir.cpp:2076:8:2076:8 | ChiTotal | total:m2076_2 | +| ir.cpp:2076:8:2076:8 | ChiTotal | total:m2076_2 | +| ir.cpp:2076:8:2076:8 | Load | m0_10 | +| ir.cpp:2076:8:2076:8 | Load | m2076_6 | +| ir.cpp:2076:8:2076:8 | Load | m2076_6 | +| ir.cpp:2076:8:2076:8 | Load | m2076_6 | +| ir.cpp:2076:8:2076:8 | SideEffect | m2076_3 | +| ir.cpp:2076:8:2076:8 | SideEffect | m2076_3 | +| ir.cpp:2076:8:2076:8 | SideEffect | m2076_3 | +| ir.cpp:2076:8:2076:8 | SideEffect | m2076_8 | +| ir.cpp:2076:8:2076:8 | SideEffect | m2076_8 | +| ir.cpp:2076:8:2076:8 | SideEffect | m2076_8 | +| ir.cpp:2077:13:2077:29 | Address | &:r2077_5 | +| ir.cpp:2077:13:2077:29 | Address | &:r2077_5 | +| ir.cpp:2077:13:2077:29 | Address | &:r2077_7 | +| ir.cpp:2077:13:2077:29 | Address | &:r2077_7 | +| ir.cpp:2077:13:2077:29 | ChiPartial | partial:m2077_3 | +| ir.cpp:2077:13:2077:29 | ChiTotal | total:m2077_2 | +| ir.cpp:2077:13:2077:29 | Load | m2077_6 | +| ir.cpp:2077:13:2077:29 | SideEffect | m2077_3 | +| ir.cpp:2077:13:2077:29 | SideEffect | m2077_8 | +| ir.cpp:2080:6:2080:25 | ChiPartial | partial:m2080_3 | +| ir.cpp:2080:6:2080:25 | ChiTotal | total:m2080_2 | +| ir.cpp:2080:6:2080:25 | SideEffect | ~m2084_32 | +| ir.cpp:2080:32:2080:32 | Address | &:r2080_5 | +| ir.cpp:2080:52:2080:52 | Address | &:r2080_7 | +| ir.cpp:2080:72:2080:72 | Address | &:r2080_9 | +| ir.cpp:2080:92:2080:92 | Address | &:r2080_11 | +| ir.cpp:2081:5:2081:5 | Address | &:r2081_1 | +| ir.cpp:2081:5:2081:5 | Address | &:r2081_1 | +| ir.cpp:2081:5:2081:5 | Arg(this) | this:r2081_1 | +| ir.cpp:2081:5:2081:5 | ChiPartial | partial:m2081_16 | +| ir.cpp:2081:5:2081:5 | ChiTotal | total:m2080_12 | +| ir.cpp:2081:5:2081:5 | SideEffect | m2080_12 | +| ir.cpp:2081:7:2081:7 | CallTarget | func:r2081_2 | +| ir.cpp:2081:7:2081:7 | ChiPartial | partial:m2081_12 | +| ir.cpp:2081:7:2081:7 | ChiTotal | total:m2080_4 | +| ir.cpp:2081:7:2081:7 | SideEffect | ~m2080_4 | +| ir.cpp:2081:7:2081:7 | Unary | r2081_11 | +| ir.cpp:2081:9:2081:9 | Address | &:r2081_3 | +| ir.cpp:2081:9:2081:9 | Condition | r2081_4 | +| ir.cpp:2081:9:2081:9 | Load | m2080_6 | +| ir.cpp:2081:9:2081:17 | Address | &:r2081_7 | +| ir.cpp:2081:9:2081:17 | Address | &:r2081_10 | +| ir.cpp:2081:9:2081:17 | Address | &:r2081_20 | +| ir.cpp:2081:9:2081:17 | Address | &:r2081_23 | +| ir.cpp:2081:9:2081:17 | Arg(0) | 0:r2081_10 | +| ir.cpp:2081:9:2081:17 | Load | m2081_6 | +| ir.cpp:2081:9:2081:17 | Phi | from 2:m2081_21 | +| ir.cpp:2081:9:2081:17 | Phi | from 3:m2081_24 | +| ir.cpp:2081:9:2081:17 | SideEffect | ~m2081_13 | +| ir.cpp:2081:9:2081:17 | Unary | r2081_8 | +| ir.cpp:2081:9:2081:17 | Unary | r2081_9 | +| ir.cpp:2081:13:2081:13 | StoreValue | r2081_19 | +| ir.cpp:2081:17:2081:17 | StoreValue | r2081_22 | +| ir.cpp:2082:5:2082:5 | Address | &:r2082_1 | +| ir.cpp:2082:5:2082:5 | Address | &:r2082_1 | +| ir.cpp:2082:5:2082:5 | Arg(this) | this:r2082_1 | +| ir.cpp:2082:5:2082:5 | ChiPartial | partial:m2082_19 | +| ir.cpp:2082:5:2082:5 | ChiTotal | total:m2081_17 | +| ir.cpp:2082:5:2082:5 | SideEffect | m2081_17 | +| ir.cpp:2082:7:2082:7 | CallTarget | func:r2082_2 | +| ir.cpp:2082:7:2082:7 | ChiPartial | partial:m2082_15 | +| ir.cpp:2082:7:2082:7 | ChiTotal | total:m2082_7 | +| ir.cpp:2082:7:2082:7 | SideEffect | ~m2082_7 | +| ir.cpp:2082:7:2082:7 | Unary | r2082_14 | +| ir.cpp:2082:9:2082:9 | Address | &:r2082_4 | +| ir.cpp:2082:9:2082:9 | Address | &:r2082_9 | +| ir.cpp:2082:9:2082:9 | Address | &:r2082_35 | +| ir.cpp:2082:9:2082:9 | Address | &:r2082_46 | +| ir.cpp:2082:9:2082:9 | Condition | r2082_5 | +| ir.cpp:2082:9:2082:9 | Load | m2080_6 | +| ir.cpp:2082:9:2082:9 | Load | m2082_8 | +| ir.cpp:2082:9:2082:9 | Phi | from 5:m2082_36 | +| ir.cpp:2082:9:2082:9 | Phi | from 5:~m2082_30 | +| ir.cpp:2082:9:2082:9 | Phi | from 6:m2082_47 | +| ir.cpp:2082:9:2082:9 | Phi | from 6:~m2082_42 | +| ir.cpp:2082:9:2082:9 | StoreValue | r2082_10 | +| ir.cpp:2082:9:2082:34 | Address | &:r2082_3 | +| ir.cpp:2082:9:2082:34 | Address | &:r2082_13 | +| ir.cpp:2082:9:2082:34 | Arg(0) | 0:r2082_13 | +| ir.cpp:2082:9:2082:34 | SideEffect | ~m2082_11 | +| ir.cpp:2082:9:2082:34 | Unary | r2082_3 | +| ir.cpp:2082:9:2082:34 | Unary | r2082_12 | +| ir.cpp:2082:13:2082:13 | Address | &:r2082_22 | +| ir.cpp:2082:13:2082:13 | Address | &:r2082_22 | +| ir.cpp:2082:13:2082:13 | Address | &:r2082_22 | +| ir.cpp:2082:13:2082:13 | Address | &:r2082_27 | +| ir.cpp:2082:13:2082:13 | Arg(0) | 0:r2082_27 | +| ir.cpp:2082:13:2082:13 | Arg(this) | this:r2082_22 | +| ir.cpp:2082:13:2082:13 | CallTarget | func:r2082_24 | +| ir.cpp:2082:13:2082:13 | ChiPartial | partial:m2082_29 | +| ir.cpp:2082:13:2082:13 | ChiPartial | partial:m2082_32 | +| ir.cpp:2082:13:2082:13 | ChiTotal | total:m2081_13 | +| ir.cpp:2082:13:2082:13 | ChiTotal | total:m2082_23 | +| ir.cpp:2082:13:2082:13 | Load | m2082_33 | +| ir.cpp:2082:13:2082:13 | SideEffect | ~m2080_8 | +| ir.cpp:2082:13:2082:13 | SideEffect | ~m2081_13 | +| ir.cpp:2082:13:2082:13 | StoreValue | r2082_34 | +| ir.cpp:2082:13:2082:13 | Unary | r2082_25 | +| ir.cpp:2082:13:2082:13 | Unary | r2082_26 | +| ir.cpp:2082:17:2082:34 | Address | &:r2082_37 | +| ir.cpp:2082:17:2082:34 | Address | &:r2082_37 | +| ir.cpp:2082:17:2082:34 | Address | &:r2082_37 | +| ir.cpp:2082:17:2082:34 | Arg(this) | this:r2082_37 | +| ir.cpp:2082:17:2082:34 | CallTarget | func:r2082_39 | +| ir.cpp:2082:17:2082:34 | ChiPartial | partial:m2082_41 | +| ir.cpp:2082:17:2082:34 | ChiPartial | partial:m2082_43 | +| ir.cpp:2082:17:2082:34 | ChiTotal | total:m2081_13 | +| ir.cpp:2082:17:2082:34 | ChiTotal | total:m2082_38 | +| ir.cpp:2082:17:2082:34 | Load | m2082_44 | +| ir.cpp:2082:17:2082:34 | SideEffect | ~m2081_13 | +| ir.cpp:2082:17:2082:34 | StoreValue | r2082_45 | +| ir.cpp:2083:5:2083:5 | Address | &:r2083_1 | +| ir.cpp:2083:5:2083:5 | Address | &:r2083_1 | +| ir.cpp:2083:5:2083:5 | Arg(this) | this:r2083_1 | +| ir.cpp:2083:5:2083:5 | ChiPartial | partial:m2083_19 | +| ir.cpp:2083:5:2083:5 | ChiTotal | total:m2082_20 | +| ir.cpp:2083:5:2083:5 | SideEffect | m2082_20 | +| ir.cpp:2083:7:2083:7 | CallTarget | func:r2083_2 | +| ir.cpp:2083:7:2083:7 | ChiPartial | partial:m2083_15 | +| ir.cpp:2083:7:2083:7 | ChiTotal | total:m2083_7 | +| ir.cpp:2083:7:2083:7 | SideEffect | ~m2083_7 | +| ir.cpp:2083:7:2083:7 | Unary | r2083_14 | +| ir.cpp:2083:9:2083:9 | Address | &:r2083_4 | +| ir.cpp:2083:9:2083:9 | Address | &:r2083_9 | +| ir.cpp:2083:9:2083:9 | Address | &:r2083_31 | +| ir.cpp:2083:9:2083:9 | Address | &:r2083_42 | +| ir.cpp:2083:9:2083:9 | Condition | r2083_5 | +| ir.cpp:2083:9:2083:9 | Load | m2080_6 | +| ir.cpp:2083:9:2083:9 | Load | m2083_8 | +| ir.cpp:2083:9:2083:9 | Phi | from 8:m2083_32 | +| ir.cpp:2083:9:2083:9 | Phi | from 8:~m2083_27 | +| ir.cpp:2083:9:2083:9 | Phi | from 9:m2083_43 | +| ir.cpp:2083:9:2083:9 | Phi | from 9:~m2083_38 | +| ir.cpp:2083:9:2083:9 | StoreValue | r2083_10 | +| ir.cpp:2083:9:2083:51 | Address | &:r2083_3 | +| ir.cpp:2083:9:2083:51 | Address | &:r2083_13 | +| ir.cpp:2083:9:2083:51 | Arg(0) | 0:r2083_13 | +| ir.cpp:2083:9:2083:51 | SideEffect | ~m2083_11 | +| ir.cpp:2083:9:2083:51 | Unary | r2083_3 | +| ir.cpp:2083:9:2083:51 | Unary | r2083_12 | +| ir.cpp:2083:13:2083:30 | Address | &:r2083_22 | +| ir.cpp:2083:13:2083:30 | Address | &:r2083_22 | +| ir.cpp:2083:13:2083:30 | Address | &:r2083_22 | +| ir.cpp:2083:13:2083:30 | Arg(this) | this:r2083_22 | +| ir.cpp:2083:13:2083:30 | CallTarget | func:r2083_24 | +| ir.cpp:2083:13:2083:30 | ChiPartial | partial:m2083_26 | +| ir.cpp:2083:13:2083:30 | ChiPartial | partial:m2083_28 | +| ir.cpp:2083:13:2083:30 | ChiTotal | total:m2082_16 | +| ir.cpp:2083:13:2083:30 | ChiTotal | total:m2083_23 | +| ir.cpp:2083:13:2083:30 | Load | m2083_29 | +| ir.cpp:2083:13:2083:30 | SideEffect | ~m2082_16 | +| ir.cpp:2083:13:2083:30 | StoreValue | r2083_30 | +| ir.cpp:2083:34:2083:51 | Address | &:r2083_33 | +| ir.cpp:2083:34:2083:51 | Address | &:r2083_33 | +| ir.cpp:2083:34:2083:51 | Address | &:r2083_33 | +| ir.cpp:2083:34:2083:51 | Arg(this) | this:r2083_33 | +| ir.cpp:2083:34:2083:51 | CallTarget | func:r2083_35 | +| ir.cpp:2083:34:2083:51 | ChiPartial | partial:m2083_37 | +| ir.cpp:2083:34:2083:51 | ChiPartial | partial:m2083_39 | +| ir.cpp:2083:34:2083:51 | ChiTotal | total:m2082_16 | +| ir.cpp:2083:34:2083:51 | ChiTotal | total:m2083_34 | +| ir.cpp:2083:34:2083:51 | Load | m2083_40 | +| ir.cpp:2083:34:2083:51 | SideEffect | ~m2082_16 | +| ir.cpp:2083:34:2083:51 | StoreValue | r2083_41 | +| ir.cpp:2084:5:2084:19 | ChiPartial | partial:m2084_35 | +| ir.cpp:2084:5:2084:19 | ChiTotal | total:m2084_17 | +| ir.cpp:2084:5:2084:19 | SideEffect | m2084_17 | +| ir.cpp:2084:6:2084:6 | Address | &:r2084_1 | +| ir.cpp:2084:6:2084:6 | Address | &:r2084_1 | +| ir.cpp:2084:6:2084:6 | Arg(this) | this:r2084_1 | +| ir.cpp:2084:6:2084:6 | ChiPartial | partial:m2084_16 | +| ir.cpp:2084:6:2084:6 | ChiTotal | total:m2083_20 | +| ir.cpp:2084:6:2084:6 | SideEffect | m2083_20 | +| ir.cpp:2084:8:2084:8 | CallTarget | func:r2084_2 | +| ir.cpp:2084:8:2084:8 | ChiPartial | partial:m2084_12 | +| ir.cpp:2084:8:2084:8 | ChiTotal | total:m2083_16 | +| ir.cpp:2084:8:2084:8 | SideEffect | ~m2083_16 | +| ir.cpp:2084:8:2084:8 | Unary | r2084_11 | +| ir.cpp:2084:8:2084:19 | Address | &:r2084_18 | +| ir.cpp:2084:8:2084:19 | Address | &:r2084_18 | +| ir.cpp:2084:8:2084:19 | Arg(this) | this:r2084_18 | +| ir.cpp:2084:10:2084:10 | Address | &:r2084_3 | +| ir.cpp:2084:10:2084:10 | Condition | r2084_4 | +| ir.cpp:2084:10:2084:10 | Load | m2080_6 | +| ir.cpp:2084:10:2084:18 | Address | &:r2084_7 | +| ir.cpp:2084:10:2084:18 | Address | &:r2084_10 | +| ir.cpp:2084:10:2084:18 | Address | &:r2084_39 | +| ir.cpp:2084:10:2084:18 | Address | &:r2084_42 | +| ir.cpp:2084:10:2084:18 | Arg(0) | 0:r2084_10 | +| ir.cpp:2084:10:2084:18 | Load | m2084_6 | +| ir.cpp:2084:10:2084:18 | Phi | from 11:m2084_40 | +| ir.cpp:2084:10:2084:18 | Phi | from 12:m2084_43 | +| ir.cpp:2084:10:2084:18 | SideEffect | ~m2084_13 | +| ir.cpp:2084:10:2084:18 | Unary | r2084_8 | +| ir.cpp:2084:10:2084:18 | Unary | r2084_9 | +| ir.cpp:2084:14:2084:14 | StoreValue | r2084_38 | +| ir.cpp:2084:18:2084:18 | StoreValue | r2084_41 | +| ir.cpp:2084:21:2084:21 | CallTarget | func:r2084_19 | +| ir.cpp:2084:21:2084:21 | ChiPartial | partial:m2084_31 | +| ir.cpp:2084:21:2084:21 | ChiTotal | total:m2084_25 | +| ir.cpp:2084:21:2084:21 | SideEffect | ~m2084_25 | +| ir.cpp:2084:21:2084:21 | Unary | r2084_30 | +| ir.cpp:2084:23:2084:40 | Address | &:r2084_20 | +| ir.cpp:2084:23:2084:40 | Address | &:r2084_20 | +| ir.cpp:2084:23:2084:40 | Address | &:r2084_29 | +| ir.cpp:2084:23:2084:40 | Arg(0) | 0:r2084_29 | +| ir.cpp:2084:23:2084:40 | Arg(this) | this:r2084_20 | +| ir.cpp:2084:23:2084:40 | CallTarget | func:r2084_22 | +| ir.cpp:2084:23:2084:40 | ChiPartial | partial:m2084_24 | +| ir.cpp:2084:23:2084:40 | ChiPartial | partial:m2084_26 | +| ir.cpp:2084:23:2084:40 | ChiTotal | total:m2084_13 | +| ir.cpp:2084:23:2084:40 | ChiTotal | total:m2084_21 | +| ir.cpp:2084:23:2084:40 | SideEffect | ~m2084_13 | +| ir.cpp:2084:23:2084:40 | SideEffect | ~m2084_27 | +| ir.cpp:2084:23:2084:40 | Unary | r2084_20 | +| ir.cpp:2084:23:2084:40 | Unary | r2084_28 | +| ir.cpp:2089:14:2089:22 | Address | &:r2089_7 | +| ir.cpp:2089:14:2089:22 | ChiPartial | partial:m2089_3 | +| ir.cpp:2089:14:2089:22 | ChiTotal | total:m2089_2 | +| ir.cpp:2089:14:2089:22 | Load | m2094_2 | +| ir.cpp:2089:14:2089:22 | SideEffect | ~m2091_6 | +| ir.cpp:2089:37:2089:37 | Address | &:r2089_5 | +| ir.cpp:2090:16:2090:16 | Address | &:r2090_1 | +| ir.cpp:2091:3:2091:3 | Address | &:r2091_10 | +| ir.cpp:2091:7:2091:7 | Address | &:r2091_1 | +| ir.cpp:2091:7:2091:7 | Left | r2091_2 | +| ir.cpp:2091:7:2091:7 | Load | m2089_6 | +| ir.cpp:2091:7:2091:13 | Condition | r2091_4 | +| ir.cpp:2091:7:2093:28 | Address | &:r2091_8 | +| ir.cpp:2091:7:2093:28 | Address | &:r2091_12 | +| ir.cpp:2091:7:2093:28 | Address | &:r2091_14 | +| ir.cpp:2091:7:2093:28 | Load | m2091_7 | +| ir.cpp:2091:7:2093:28 | Phi | from 2:m2091_13 | +| ir.cpp:2091:7:2093:28 | Phi | from 2:~m2092_6 | +| ir.cpp:2091:7:2093:28 | Phi | from 3:m2091_15 | +| ir.cpp:2091:7:2093:28 | Phi | from 3:~m2093_6 | +| ir.cpp:2091:7:2093:28 | StoreValue | r2091_9 | +| ir.cpp:2091:11:2091:13 | Right | r2091_3 | +| ir.cpp:2092:6:2092:20 | CallTarget | func:r2092_1 | +| ir.cpp:2092:6:2092:20 | ChiPartial | partial:m2092_5 | +| ir.cpp:2092:6:2092:20 | ChiTotal | total:m2089_4 | +| ir.cpp:2092:6:2092:20 | SideEffect | ~m2089_4 | +| ir.cpp:2092:6:2092:26 | StoreValue | r2092_9 | +| ir.cpp:2092:22:2092:22 | Address | &:r2092_2 | +| ir.cpp:2092:22:2092:22 | Arg(0) | 0:r2092_3 | +| ir.cpp:2092:22:2092:22 | Load | m2089_6 | +| ir.cpp:2092:26:2092:26 | Address | &:r2092_7 | +| ir.cpp:2092:26:2092:26 | Load | m2089_6 | +| ir.cpp:2092:26:2092:26 | Unary | r2092_8 | +| ir.cpp:2093:5:2093:28 | StoreValue | r2093_9 | +| ir.cpp:2093:6:2093:20 | CallTarget | func:r2093_1 | +| ir.cpp:2093:6:2093:20 | ChiPartial | partial:m2093_5 | +| ir.cpp:2093:6:2093:20 | ChiTotal | total:m2089_4 | +| ir.cpp:2093:6:2093:20 | SideEffect | ~m2089_4 | +| ir.cpp:2093:6:2093:27 | Unary | r2093_8 | +| ir.cpp:2093:22:2093:22 | Address | &:r2093_2 | +| ir.cpp:2093:22:2093:22 | Arg(0) | 0:r2093_3 | +| ir.cpp:2093:22:2093:22 | Load | m2089_6 | +| ir.cpp:2093:26:2093:27 | Unary | r2093_7 | +| ir.cpp:2094:1:2094:1 | Address | &:r2094_1 | +| ir.cpp:2096:6:2096:17 | ChiPartial | partial:m2096_3 | +| ir.cpp:2096:6:2096:17 | ChiTotal | total:m2096_2 | +| ir.cpp:2096:6:2096:17 | SideEffect | ~m2099_6 | +| ir.cpp:2097:8:2097:8 | Address | &:r2097_1 | +| ir.cpp:2097:12:2097:18 | Address | &:r2097_4 | +| ir.cpp:2097:12:2097:18 | Arg(0) | 0:r2097_3 | +| ir.cpp:2097:12:2097:18 | CallTarget | func:r2097_2 | +| ir.cpp:2097:12:2097:18 | ChiPartial | partial:m2097_5 | +| ir.cpp:2097:12:2097:18 | ChiTotal | total:m2096_4 | +| ir.cpp:2097:12:2097:18 | SideEffect | ~m2096_4 | +| ir.cpp:2097:12:2097:18 | StoreValue | r2097_8 | +| ir.cpp:2097:12:2097:18 | Unary | r2097_4 | +| ir.cpp:2098:3:2098:4 | Address | &:r2098_4 | +| ir.cpp:2098:3:2098:8 | ChiPartial | partial:m2098_5 | +| ir.cpp:2098:3:2098:8 | ChiTotal | total:m2097_7 | +| ir.cpp:2098:4:2098:4 | Address | &:r2098_2 | +| ir.cpp:2098:4:2098:4 | Load | m2097_9 | +| ir.cpp:2098:4:2098:4 | Unary | r2098_3 | +| ir.cpp:2098:8:2098:8 | StoreValue | r2098_1 | +| ir.cpp:2099:3:2099:10 | CallTarget | func:r2099_1 | +| ir.cpp:2099:3:2099:10 | ChiPartial | partial:m2099_5 | +| ir.cpp:2099:3:2099:10 | ChiTotal | total:m2097_6 | +| ir.cpp:2099:3:2099:10 | SideEffect | ~m2097_6 | +| ir.cpp:2099:10:2099:10 | Address | &:r2099_2 | +| ir.cpp:2099:10:2099:10 | Arg(0) | 0:r2099_3 | +| ir.cpp:2099:10:2099:10 | Load | m2097_9 | +| ir.cpp:2102:7:2102:7 | Address | &:r2102_5 | +| ir.cpp:2102:7:2102:7 | Address | &:r2102_5 | +| ir.cpp:2102:7:2102:7 | Address | &:r2102_7 | +| ir.cpp:2102:7:2102:7 | Address | &:r2102_7 | +| ir.cpp:2102:7:2102:7 | ChiPartial | partial:m2102_3 | +| ir.cpp:2102:7:2102:7 | ChiTotal | total:m2102_2 | +| ir.cpp:2102:7:2102:7 | Load | m2102_6 | +| ir.cpp:2102:7:2102:7 | SideEffect | m2102_3 | +| ir.cpp:2102:7:2102:7 | SideEffect | m2102_8 | +| ir.cpp:2104:10:2104:24 | ChiPartial | partial:m2104_3 | +| ir.cpp:2104:10:2104:24 | ChiTotal | total:m2104_2 | +| ir.cpp:2104:10:2104:24 | SideEffect | m2104_3 | +| ir.cpp:2104:32:2104:32 | Address | &:r2104_5 | +| ir.cpp:2104:32:2104:32 | Address | &:r2104_5 | +| ir.cpp:2104:32:2104:32 | Address | &:r2104_7 | +| ir.cpp:2104:32:2104:32 | Address | &:r2104_7 | +| ir.cpp:2104:32:2104:32 | Load | m2104_6 | +| ir.cpp:2104:32:2104:32 | SideEffect | m2104_8 | +| ir.cpp:2106:13:2106:18 | Address | &:r2106_5 | +| ir.cpp:2106:13:2106:18 | Address | &:r2106_5 | +| ir.cpp:2106:13:2106:18 | Address | &:r2106_7 | +| ir.cpp:2106:13:2106:18 | Address | &:r2106_7 | +| ir.cpp:2106:13:2106:18 | ChiPartial | partial:m2106_3 | +| ir.cpp:2106:13:2106:18 | ChiTotal | total:m2106_2 | +| ir.cpp:2106:13:2106:18 | Load | m2106_6 | +| ir.cpp:2106:13:2106:18 | SideEffect | m2106_3 | +| ir.cpp:2106:13:2106:18 | SideEffect | m2106_8 | +| ir.cpp:2109:7:2109:7 | Address | &:r2109_5 | +| ir.cpp:2109:7:2109:7 | Address | &:r2109_5 | +| ir.cpp:2109:7:2109:7 | Address | &:r2109_7 | +| ir.cpp:2109:7:2109:7 | Address | &:r2109_7 | +| ir.cpp:2109:7:2109:7 | Address | &:r2109_9 | +| ir.cpp:2109:7:2109:7 | Arg(this) | this:r2109_9 | +| ir.cpp:2109:7:2109:7 | CallTarget | func:r2109_10 | +| ir.cpp:2109:7:2109:7 | ChiPartial | partial:m2109_3 | +| ir.cpp:2109:7:2109:7 | ChiPartial | partial:m2109_12 | +| ir.cpp:2109:7:2109:7 | ChiPartial | partial:m2109_14 | +| ir.cpp:2109:7:2109:7 | ChiTotal | total:m2109_2 | +| ir.cpp:2109:7:2109:7 | ChiTotal | total:m2109_4 | +| ir.cpp:2109:7:2109:7 | ChiTotal | total:m2109_8 | +| ir.cpp:2109:7:2109:7 | Load | m2109_6 | +| ir.cpp:2109:7:2109:7 | SideEffect | m2109_15 | +| ir.cpp:2109:7:2109:7 | SideEffect | ~m2109_4 | +| ir.cpp:2109:7:2109:7 | SideEffect | ~m2109_13 | +| ir.cpp:2109:7:2109:7 | Unary | m2109_6 | +| ir.cpp:2112:5:2112:13 | Address | &:r2112_5 | +| ir.cpp:2112:5:2112:13 | Address | &:r2112_5 | +| ir.cpp:2112:5:2112:13 | Address | &:r2112_7 | +| ir.cpp:2112:5:2112:13 | Address | &:r2112_7 | +| ir.cpp:2112:5:2112:13 | ChiPartial | partial:m2112_3 | +| ir.cpp:2112:5:2112:13 | ChiTotal | total:m2112_2 | +| ir.cpp:2112:5:2112:13 | Load | m2112_6 | +| ir.cpp:2112:5:2112:13 | SideEffect | m2112_8 | +| ir.cpp:2112:5:2112:13 | SideEffect | ~m2112_14 | +| ir.cpp:2112:5:2112:13 | Unary | m2112_6 | +| ir.cpp:2112:18:2112:18 | Arg(this) | this:r2112_10 | +| ir.cpp:2112:18:2112:18 | CallTarget | func:r2112_11 | +| ir.cpp:2112:18:2112:18 | ChiPartial | partial:m2112_13 | +| ir.cpp:2112:18:2112:18 | ChiTotal | total:m2112_4 | +| ir.cpp:2112:18:2112:18 | SideEffect | ~m2112_4 | +| ir.cpp:2114:10:2114:24 | ChiPartial | partial:m2114_3 | +| ir.cpp:2114:10:2114:24 | ChiTotal | total:m2114_2 | +| ir.cpp:2114:10:2114:24 | SideEffect | m2114_3 | +| ir.cpp:2114:32:2114:32 | Address | &:r2114_5 | +| ir.cpp:2114:32:2114:32 | Address | &:r2114_5 | +| ir.cpp:2114:32:2114:32 | Address | &:r2114_7 | +| ir.cpp:2114:32:2114:32 | Address | &:r2114_7 | +| ir.cpp:2114:32:2114:32 | Load | m2114_6 | +| ir.cpp:2114:32:2114:32 | SideEffect | m2114_8 | +| ir.cpp:2119:5:2119:18 | Address | &:r2119_5 | +| ir.cpp:2119:5:2119:18 | ChiPartial | partial:m2119_3 | +| ir.cpp:2119:5:2119:18 | ChiTotal | total:m2119_2 | +| ir.cpp:2119:5:2119:18 | Load | m2129_2 | +| ir.cpp:2119:5:2119:18 | SideEffect | ~m2128_14 | +| ir.cpp:2121:12:2121:13 | Address | &:r2121_1 | +| ir.cpp:2121:17:2121:27 | Address | &:r2121_4 | +| ir.cpp:2121:17:2121:27 | Address | &:r2121_8 | +| ir.cpp:2121:17:2121:27 | Arg(0) | 0:r2121_3 | +| ir.cpp:2121:17:2121:27 | Arg(this) | this:r2121_8 | +| ir.cpp:2121:17:2121:27 | CallTarget | func:r2121_2 | +| ir.cpp:2121:17:2121:27 | CallTarget | func:r2121_9 | +| ir.cpp:2121:17:2121:27 | ChiPartial | partial:m2121_5 | +| ir.cpp:2121:17:2121:27 | ChiPartial | partial:m2121_11 | +| ir.cpp:2121:17:2121:27 | ChiPartial | partial:m2121_13 | +| ir.cpp:2121:17:2121:27 | ChiTotal | total:m2119_4 | +| ir.cpp:2121:17:2121:27 | ChiTotal | total:m2121_6 | +| ir.cpp:2121:17:2121:27 | ChiTotal | total:m2121_7 | +| ir.cpp:2121:17:2121:27 | SideEffect | ~m2119_4 | +| ir.cpp:2121:17:2121:27 | SideEffect | ~m2121_6 | +| ir.cpp:2121:17:2121:27 | StoreValue | r2121_8 | +| ir.cpp:2121:17:2121:27 | Unary | r2121_4 | +| ir.cpp:2122:5:2122:13 | CallTarget | func:r2122_3 | +| ir.cpp:2122:5:2122:13 | CallTarget | func:r2122_10 | +| ir.cpp:2122:5:2122:13 | ChiPartial | partial:m2122_5 | +| ir.cpp:2122:5:2122:13 | ChiPartial | partial:m2122_13 | +| ir.cpp:2122:5:2122:13 | ChiTotal | total:m2121_12 | +| ir.cpp:2122:5:2122:13 | ChiTotal | total:m2122_6 | +| ir.cpp:2122:5:2122:13 | SideEffect | ~m2121_12 | +| ir.cpp:2122:5:2122:13 | SideEffect | ~m2122_6 | +| ir.cpp:2122:12:2122:13 | Address | &:r2122_1 | +| ir.cpp:2122:12:2122:13 | Address | &:r2122_2 | +| ir.cpp:2122:12:2122:13 | Address | &:r2122_2 | +| ir.cpp:2122:12:2122:13 | Arg(0) | 0:r2122_11 | +| ir.cpp:2122:12:2122:13 | ChiPartial | partial:m2122_8 | +| ir.cpp:2122:12:2122:13 | ChiTotal | total:m2121_14 | +| ir.cpp:2122:12:2122:13 | Load | m2121_15 | +| ir.cpp:2122:12:2122:13 | SideEffect | ~m2121_14 | +| ir.cpp:2122:12:2122:13 | Unary | r2122_1 | +| ir.cpp:2124:12:2124:13 | Address | &:r2124_1 | +| ir.cpp:2124:17:2124:30 | Address | &:r2124_4 | +| ir.cpp:2124:17:2124:30 | Address | &:r2124_8 | +| ir.cpp:2124:17:2124:30 | Arg(0) | 0:r2124_3 | +| ir.cpp:2124:17:2124:30 | Arg(this) | this:r2124_8 | +| ir.cpp:2124:17:2124:30 | CallTarget | func:r2124_2 | +| ir.cpp:2124:17:2124:30 | CallTarget | func:r2124_9 | +| ir.cpp:2124:17:2124:30 | ChiPartial | partial:m2124_5 | +| ir.cpp:2124:17:2124:30 | ChiPartial | partial:m2124_11 | +| ir.cpp:2124:17:2124:30 | ChiPartial | partial:m2124_13 | +| ir.cpp:2124:17:2124:30 | ChiTotal | total:m2122_14 | +| ir.cpp:2124:17:2124:30 | ChiTotal | total:m2124_6 | +| ir.cpp:2124:17:2124:30 | ChiTotal | total:m2124_7 | +| ir.cpp:2124:17:2124:30 | SideEffect | ~m2122_14 | +| ir.cpp:2124:17:2124:30 | SideEffect | ~m2124_6 | +| ir.cpp:2124:17:2124:30 | StoreValue | r2124_15 | +| ir.cpp:2124:17:2124:30 | Unary | r2124_4 | +| ir.cpp:2124:17:2124:30 | Unary | r2124_8 | +| ir.cpp:2125:5:2125:13 | CallTarget | func:r2125_3 | +| ir.cpp:2125:5:2125:13 | CallTarget | func:r2125_10 | +| ir.cpp:2125:5:2125:13 | ChiPartial | partial:m2125_5 | +| ir.cpp:2125:5:2125:13 | ChiPartial | partial:m2125_13 | +| ir.cpp:2125:5:2125:13 | ChiTotal | total:m2124_12 | +| ir.cpp:2125:5:2125:13 | ChiTotal | total:m2125_6 | +| ir.cpp:2125:5:2125:13 | SideEffect | ~m2124_12 | +| ir.cpp:2125:5:2125:13 | SideEffect | ~m2125_6 | +| ir.cpp:2125:12:2125:13 | Address | &:r2125_1 | +| ir.cpp:2125:12:2125:13 | Address | &:r2125_2 | +| ir.cpp:2125:12:2125:13 | Address | &:r2125_2 | +| ir.cpp:2125:12:2125:13 | Arg(0) | 0:r2125_11 | +| ir.cpp:2125:12:2125:13 | ChiPartial | partial:m2125_8 | +| ir.cpp:2125:12:2125:13 | ChiTotal | total:m2124_14 | +| ir.cpp:2125:12:2125:13 | Load | m2124_16 | +| ir.cpp:2125:12:2125:13 | SideEffect | ~m2124_14 | +| ir.cpp:2125:12:2125:13 | Unary | r2125_1 | +| ir.cpp:2127:15:2127:15 | Address | &:r2127_1 | +| ir.cpp:2127:19:2127:32 | Address | &:r2127_4 | +| ir.cpp:2127:19:2127:32 | Address | &:r2127_8 | +| ir.cpp:2127:19:2127:32 | Arg(0) | 0:r2127_3 | +| ir.cpp:2127:19:2127:32 | Arg(this) | this:r2127_8 | +| ir.cpp:2127:19:2127:32 | CallTarget | func:r2127_2 | +| ir.cpp:2127:19:2127:32 | CallTarget | func:r2127_9 | +| ir.cpp:2127:19:2127:32 | ChiPartial | partial:m2127_5 | +| ir.cpp:2127:19:2127:32 | ChiPartial | partial:m2127_11 | +| ir.cpp:2127:19:2127:32 | ChiPartial | partial:m2127_13 | +| ir.cpp:2127:19:2127:32 | ChiTotal | total:m2125_14 | +| ir.cpp:2127:19:2127:32 | ChiTotal | total:m2127_6 | +| ir.cpp:2127:19:2127:32 | ChiTotal | total:m2127_7 | +| ir.cpp:2127:19:2127:32 | SideEffect | ~m2125_14 | +| ir.cpp:2127:19:2127:32 | SideEffect | ~m2127_6 | +| ir.cpp:2127:19:2127:32 | StoreValue | r2127_8 | +| ir.cpp:2127:19:2127:32 | Unary | r2127_4 | +| ir.cpp:2128:5:2128:12 | CallTarget | func:r2128_3 | +| ir.cpp:2128:5:2128:12 | CallTarget | func:r2128_10 | +| ir.cpp:2128:5:2128:12 | ChiPartial | partial:m2128_5 | +| ir.cpp:2128:5:2128:12 | ChiPartial | partial:m2128_13 | +| ir.cpp:2128:5:2128:12 | ChiTotal | total:m2127_12 | +| ir.cpp:2128:5:2128:12 | ChiTotal | total:m2128_6 | +| ir.cpp:2128:5:2128:12 | SideEffect | ~m2127_12 | +| ir.cpp:2128:5:2128:12 | SideEffect | ~m2128_6 | +| ir.cpp:2128:12:2128:12 | Address | &:r2128_1 | +| ir.cpp:2128:12:2128:12 | Address | &:r2128_2 | +| ir.cpp:2128:12:2128:12 | Address | &:r2128_2 | +| ir.cpp:2128:12:2128:12 | Arg(0) | 0:r2128_11 | +| ir.cpp:2128:12:2128:12 | ChiPartial | partial:m2128_8 | +| ir.cpp:2128:12:2128:12 | ChiTotal | total:m2127_14 | +| ir.cpp:2128:12:2128:12 | Load | m2127_15 | +| ir.cpp:2128:12:2128:12 | SideEffect | ~m2127_14 | +| ir.cpp:2128:12:2128:12 | Unary | r2128_1 | +| ir.cpp:2129:1:2129:1 | Address | &:r2129_1 | +| ir.cpp:2133:6:2133:26 | ChiPartial | partial:m2133_3 | +| ir.cpp:2133:6:2133:26 | ChiTotal | total:m2133_2 | +| ir.cpp:2133:6:2133:26 | SideEffect | ~m2135_5 | +| ir.cpp:2134:13:2134:13 | Address | &:r2134_1 | +| ir.cpp:2134:16:2134:19 | StoreValue | r2134_2 | +| ir.cpp:2135:3:2135:27 | CallTarget | func:r2135_1 | +| ir.cpp:2135:3:2135:27 | ChiPartial | partial:m2135_4 | +| ir.cpp:2135:3:2135:27 | ChiTotal | total:m2133_4 | +| ir.cpp:2135:3:2135:27 | SideEffect | ~m2133_4 | +| ir.cpp:2135:29:2135:29 | Arg(0) | 0:r2135_2 | +| ir.cpp:2140:5:2140:11 | Address | &:r2140_6 | +| ir.cpp:2140:5:2140:11 | ChiPartial | partial:m2140_3 | +| ir.cpp:2140:5:2140:11 | ChiTotal | total:m2140_2 | +| ir.cpp:2140:5:2140:11 | Load | m2145_4 | +| ir.cpp:2140:5:2140:11 | SideEffect | ~m2144_4 | | ir.cpp:2141:9:2141:9 | Address | &:r2141_1 | -| ir.cpp:2141:9:2141:9 | Left | r2141_2 | -| ir.cpp:2141:9:2141:9 | Load | m2140_8 | -| ir.cpp:2141:9:2141:14 | Condition | r2141_4 | -| ir.cpp:2141:14:2141:14 | Right | r2141_3 | -| ir.cpp:2142:9:2142:20 | CallTarget | func:r2142_1 | -| ir.cpp:2143:5:2143:12 | CallTarget | func:r2143_1 | -| ir.cpp:2143:5:2143:12 | ChiPartial | partial:m2143_3 | -| ir.cpp:2143:5:2143:12 | ChiTotal | total:m2140_7 | -| ir.cpp:2143:5:2143:12 | SideEffect | ~m2140_7 | -| ir.cpp:2144:5:2144:13 | Address | &:r2144_1 | -| ir.cpp:2144:12:2144:12 | Address | &:r2144_2 | -| ir.cpp:2144:12:2144:12 | Load | m2140_8 | -| ir.cpp:2144:12:2144:12 | StoreValue | r2144_3 | -| ir.cpp:2147:6:2147:24 | ChiPartial | partial:m2147_3 | -| ir.cpp:2147:6:2147:24 | ChiTotal | total:m2147_2 | -| ir.cpp:2147:6:2147:24 | SideEffect | ~m2153_8 | -| ir.cpp:2147:33:2147:33 | Address | &:r2147_5 | -| ir.cpp:2148:3:2148:12 | Address | &:r2148_6 | -| ir.cpp:2148:3:2148:12 | Arg(0) | 0:r2148_5 | -| ir.cpp:2148:3:2148:12 | CallTarget | func:r2148_1 | -| ir.cpp:2148:3:2148:12 | ChiPartial | partial:m2148_7 | -| ir.cpp:2148:3:2148:12 | ChiTotal | total:m2147_4 | -| ir.cpp:2148:3:2148:12 | Right | r2148_4 | -| ir.cpp:2148:3:2148:12 | SideEffect | ~m2147_4 | -| ir.cpp:2148:3:2148:12 | Unary | r2148_6 | -| ir.cpp:2148:11:2148:11 | Address | &:r2148_2 | -| ir.cpp:2148:11:2148:11 | Left | r2148_3 | -| ir.cpp:2148:11:2148:11 | Load | m2147_6 | -| ir.cpp:2149:3:2149:18 | Address | &:r2149_7 | -| ir.cpp:2149:3:2149:18 | Arg(0) | 0:r2149_5 | -| ir.cpp:2149:3:2149:18 | CallTarget | func:r2149_1 | -| ir.cpp:2149:3:2149:18 | ChiPartial | partial:m2149_8 | -| ir.cpp:2149:3:2149:18 | ChiTotal | total:m2148_8 | -| ir.cpp:2149:3:2149:18 | Right | r2149_4 | -| ir.cpp:2149:3:2149:18 | SideEffect | ~m2148_8 | -| ir.cpp:2149:3:2149:18 | Unary | r2149_7 | -| ir.cpp:2149:7:2149:10 | Arg(1) | 1:r2149_6 | -| ir.cpp:2149:17:2149:17 | Address | &:r2149_2 | -| ir.cpp:2149:17:2149:17 | Left | r2149_3 | -| ir.cpp:2149:17:2149:17 | Load | m2147_6 | -| ir.cpp:2150:3:2150:15 | Address | &:r2150_6 | -| ir.cpp:2150:3:2150:15 | Arg(0) | 0:r2150_5 | -| ir.cpp:2150:3:2150:15 | CallTarget | func:r2150_1 | -| ir.cpp:2150:3:2150:15 | ChiPartial | partial:m2150_7 | -| ir.cpp:2150:3:2150:15 | ChiTotal | total:m2149_9 | -| ir.cpp:2150:3:2150:15 | Right | r2150_4 | -| ir.cpp:2150:3:2150:15 | SideEffect | ~m2149_9 | -| ir.cpp:2150:3:2150:15 | Unary | r2150_6 | -| ir.cpp:2150:14:2150:14 | Address | &:r2150_2 | -| ir.cpp:2150:14:2150:14 | Left | r2150_3 | -| ir.cpp:2150:14:2150:14 | Load | m2147_6 | -| ir.cpp:2151:3:2151:20 | Address | &:r2151_7 | -| ir.cpp:2151:3:2151:20 | Arg(0) | 0:r2151_5 | -| ir.cpp:2151:3:2151:20 | CallTarget | func:r2151_1 | -| ir.cpp:2151:3:2151:20 | ChiPartial | partial:m2151_8 | -| ir.cpp:2151:3:2151:20 | ChiTotal | total:m2150_8 | -| ir.cpp:2151:3:2151:20 | Right | r2151_4 | -| ir.cpp:2151:3:2151:20 | SideEffect | ~m2150_8 | -| ir.cpp:2151:3:2151:20 | Unary | r2151_7 | -| ir.cpp:2151:19:2151:19 | Address | &:r2151_2 | -| ir.cpp:2151:19:2151:19 | Left | r2151_3 | -| ir.cpp:2151:19:2151:19 | Load | m2147_6 | -| ir.cpp:2151:21:2151:21 | Arg(1) | 1:r2151_6 | -| ir.cpp:2152:3:2152:36 | Address | &:r2152_6 | -| ir.cpp:2152:3:2152:36 | Arg(0) | 0:r2152_5 | -| ir.cpp:2152:3:2152:36 | CallTarget | func:r2152_1 | -| ir.cpp:2152:3:2152:36 | ChiPartial | partial:m2152_7 | -| ir.cpp:2152:3:2152:36 | ChiTotal | total:m2151_9 | -| ir.cpp:2152:3:2152:36 | Right | r2152_4 | -| ir.cpp:2152:3:2152:36 | SideEffect | ~m2151_9 | -| ir.cpp:2152:3:2152:36 | Unary | r2152_6 | -| ir.cpp:2152:35:2152:35 | Address | &:r2152_2 | -| ir.cpp:2152:35:2152:35 | Left | r2152_3 | -| ir.cpp:2152:35:2152:35 | Load | m2147_6 | -| ir.cpp:2153:3:2153:24 | Address | &:r2153_6 | -| ir.cpp:2153:3:2153:24 | Arg(0) | 0:r2153_5 | -| ir.cpp:2153:3:2153:24 | CallTarget | func:r2153_1 | -| ir.cpp:2153:3:2153:24 | ChiPartial | partial:m2153_7 | -| ir.cpp:2153:3:2153:24 | ChiTotal | total:m2152_8 | -| ir.cpp:2153:3:2153:24 | Right | r2153_4 | -| ir.cpp:2153:3:2153:24 | SideEffect | ~m2152_8 | -| ir.cpp:2153:3:2153:24 | Unary | r2153_6 | -| ir.cpp:2153:11:2153:11 | Address | &:r2153_2 | -| ir.cpp:2153:11:2153:11 | Left | r2153_3 | -| ir.cpp:2153:11:2153:11 | Load | m2147_6 | -| ir.cpp:2158:7:2158:17 | Address | &:r2158_10 | -| ir.cpp:2158:7:2158:17 | ChiPartial | partial:m2158_3 | -| ir.cpp:2158:7:2158:17 | ChiTotal | total:m2158_2 | -| ir.cpp:2158:7:2158:17 | Load | m2161_4 | -| ir.cpp:2158:7:2158:17 | SideEffect | m2158_3 | -| ir.cpp:2158:25:2158:25 | Address | &:r2158_5 | -| ir.cpp:2158:25:2158:25 | Address | &:r2158_5 | -| ir.cpp:2158:25:2158:25 | Address | &:r2158_7 | -| ir.cpp:2158:25:2158:25 | Address | &:r2158_7 | -| ir.cpp:2158:25:2158:25 | Load | m2158_6 | -| ir.cpp:2158:25:2158:25 | SideEffect | m2158_8 | -| ir.cpp:2159:9:2159:11 | Address | &:r2159_1 | -| ir.cpp:2160:10:2160:10 | Address | &:r2160_1 | -| ir.cpp:2160:14:2160:19 | CallTarget | func:r2160_2 | -| ir.cpp:2160:14:2160:19 | StoreValue | r2160_8 | -| ir.cpp:2160:21:2160:21 | Address | &:r2160_3 | -| ir.cpp:2160:21:2160:21 | Address | &:r2160_5 | -| ir.cpp:2160:21:2160:21 | Arg(0) | 0:r2160_5 | -| ir.cpp:2160:21:2160:21 | Load | m2158_6 | -| ir.cpp:2160:21:2160:21 | SideEffect | ~m2158_8 | -| ir.cpp:2160:21:2160:21 | Unary | r2160_4 | -| ir.cpp:2160:24:2160:27 | Address | &:r2160_7 | -| ir.cpp:2160:24:2160:27 | Arg(1) | 1:r2160_7 | -| ir.cpp:2160:24:2160:27 | ChiPartial | partial:m2160_10 | -| ir.cpp:2160:24:2160:27 | ChiTotal | total:m2159_2 | -| ir.cpp:2160:25:2160:27 | Unary | r2160_6 | -| ir.cpp:2161:3:2161:13 | Address | &:r2161_1 | -| ir.cpp:2161:10:2161:12 | Address | &:r2161_2 | -| ir.cpp:2161:10:2161:12 | Load | m2160_11 | -| ir.cpp:2161:10:2161:12 | StoreValue | r2161_3 | -| ir.cpp:2168:6:2168:39 | ChiPartial | partial:m2168_3 | -| ir.cpp:2168:6:2168:39 | ChiTotal | total:m2168_2 | -| ir.cpp:2168:6:2168:39 | SideEffect | ~m2169_8 | -| ir.cpp:2169:6:2169:42 | Address | &:r2169_1 | -| ir.cpp:2169:6:2169:42 | Condition | r2169_12 | -| ir.cpp:2169:22:2169:22 | Address | &:r2169_4 | -| ir.cpp:2169:22:2169:22 | Address | &:r2169_4 | -| ir.cpp:2169:22:2169:22 | Arg(this) | this:r2169_4 | -| ir.cpp:2169:22:2169:22 | CallTarget | func:r2169_5 | -| ir.cpp:2169:22:2169:22 | ChiPartial | partial:m2169_7 | -| ir.cpp:2169:22:2169:22 | ChiPartial | partial:m2169_10 | -| ir.cpp:2169:22:2169:22 | ChiTotal | total:m2168_4 | -| ir.cpp:2169:22:2169:22 | ChiTotal | total:m2169_3 | -| ir.cpp:2169:22:2169:22 | SideEffect | m2169_3 | -| ir.cpp:2169:22:2169:22 | SideEffect | ~m2168_4 | -| ir.cpp:2169:22:2169:22 | Unary | r2169_6 | -| ir.cpp:2169:25:2169:42 | StoreValue | r2169_2 | -| ir.cpp:2172:7:2172:7 | Address | &:r2172_5 | -| ir.cpp:2172:7:2172:7 | Address | &:r2172_5 | -| ir.cpp:2172:7:2172:7 | Address | &:r2172_7 | -| ir.cpp:2172:7:2172:7 | Address | &:r2172_7 | -| ir.cpp:2172:7:2172:7 | Address | &:r2172_9 | -| ir.cpp:2172:7:2172:7 | Address | &:r2172_10 | -| ir.cpp:2172:7:2172:7 | Address | &:r2172_13 | -| ir.cpp:2172:7:2172:7 | ChiPartial | partial:m2172_3 | -| ir.cpp:2172:7:2172:7 | ChiPartial | partial:m2172_15 | -| ir.cpp:2172:7:2172:7 | ChiTotal | total:m2172_2 | -| ir.cpp:2172:7:2172:7 | ChiTotal | total:m2172_8 | -| ir.cpp:2172:7:2172:7 | Load | m0_2 | -| ir.cpp:2172:7:2172:7 | Load | m2172_6 | -| ir.cpp:2172:7:2172:7 | Load | ~m0_4 | -| ir.cpp:2172:7:2172:7 | SideEffect | m2172_3 | -| ir.cpp:2172:7:2172:7 | SideEffect | m2172_16 | -| ir.cpp:2172:7:2172:7 | StoreValue | r2172_14 | -| ir.cpp:2172:7:2172:7 | Unary | m2172_6 | -| ir.cpp:2172:7:2172:7 | Unary | r2172_11 | -| ir.cpp:2172:7:2172:7 | Unary | r2172_12 | -| ir.cpp:2175:5:2175:23 | Address | &:r2175_5 | -| ir.cpp:2175:5:2175:23 | Address | &:r2175_5 | -| ir.cpp:2175:5:2175:23 | Address | &:r2175_7 | -| ir.cpp:2175:5:2175:23 | Address | &:r2175_7 | -| ir.cpp:2175:5:2175:23 | ChiPartial | partial:m2175_3 | -| ir.cpp:2175:5:2175:23 | ChiTotal | total:m2175_2 | -| ir.cpp:2175:5:2175:23 | Load | m2175_6 | -| ir.cpp:2175:5:2175:23 | SideEffect | m2175_20 | -| ir.cpp:2175:5:2175:23 | SideEffect | ~m2175_13 | -| ir.cpp:2175:29:2175:29 | Address | &:r2175_16 | -| ir.cpp:2175:29:2175:29 | Address | &:r2175_18 | -| ir.cpp:2175:29:2175:29 | Load | m2175_6 | -| ir.cpp:2175:29:2175:29 | Unary | r2175_17 | -| ir.cpp:2175:29:2175:40 | ChiPartial | partial:m2175_19 | -| ir.cpp:2175:29:2175:40 | ChiTotal | total:m2175_8 | -| ir.cpp:2175:33:2175:40 | Address | &:r2175_11 | -| ir.cpp:2175:33:2175:40 | Arg(0) | 0:r2175_10 | -| ir.cpp:2175:33:2175:40 | CallTarget | func:r2175_9 | -| ir.cpp:2175:33:2175:40 | ChiPartial | partial:m2175_12 | -| ir.cpp:2175:33:2175:40 | ChiTotal | total:m2175_4 | -| ir.cpp:2175:33:2175:40 | SideEffect | ~m2175_4 | -| ir.cpp:2175:33:2175:40 | StoreValue | r2175_15 | -| ir.cpp:2175:33:2175:40 | Unary | r2175_11 | -| ir.cpp:2176:5:2176:24 | Address | &:r2176_5 | -| ir.cpp:2176:5:2176:24 | Address | &:r2176_5 | -| ir.cpp:2176:5:2176:24 | Address | &:r2176_7 | -| ir.cpp:2176:5:2176:24 | Address | &:r2176_7 | -| ir.cpp:2176:5:2176:24 | ChiPartial | partial:m2176_3 | -| ir.cpp:2176:5:2176:24 | ChiTotal | total:m2176_2 | -| ir.cpp:2176:5:2176:24 | Load | m2176_6 | -| ir.cpp:2176:5:2176:24 | SideEffect | m2176_8 | -| ir.cpp:2176:5:2176:24 | SideEffect | ~m2176_16 | -| ir.cpp:2176:30:2176:37 | CallTarget | func:r2176_9 | -| ir.cpp:2176:30:2176:37 | ChiPartial | partial:m2176_15 | -| ir.cpp:2176:30:2176:37 | ChiTotal | total:m2176_4 | -| ir.cpp:2176:30:2176:37 | SideEffect | ~m2176_4 | -| ir.cpp:2176:37:2176:37 | Address | &:r2176_10 | -| ir.cpp:2176:37:2176:37 | Address | &:r2176_12 | -| ir.cpp:2176:37:2176:37 | Arg(0) | 0:r2176_13 | -| ir.cpp:2176:37:2176:37 | Load | m2176_6 | -| ir.cpp:2176:37:2176:37 | Load | ~m2176_8 | -| ir.cpp:2176:37:2176:37 | Unary | r2176_11 | -| ir.cpp:2178:10:2178:14 | Address | &:r2178_5 | -| ir.cpp:2178:10:2178:14 | Address | &:r2178_5 | -| ir.cpp:2178:10:2178:14 | Address | &:r2178_7 | -| ir.cpp:2178:10:2178:14 | Address | &:r2178_7 | -| ir.cpp:2178:10:2178:14 | ChiPartial | partial:m2178_3 | -| ir.cpp:2178:10:2178:14 | ChiTotal | total:m2178_2 | -| ir.cpp:2178:10:2178:14 | Load | m2178_6 | -| ir.cpp:2178:10:2178:14 | SideEffect | m2178_8 | -| ir.cpp:2178:10:2178:14 | SideEffect | ~m2178_19 | -| ir.cpp:2178:21:2178:21 | Address | &:r2178_9 | -| ir.cpp:2178:26:2178:27 | Address | &:r2178_17 | -| ir.cpp:2178:26:2178:31 | ChiPartial | partial:m2178_18 | -| ir.cpp:2178:26:2178:31 | ChiTotal | total:m2178_4 | -| ir.cpp:2178:27:2178:27 | Address | &:r2178_13 | -| ir.cpp:2178:27:2178:27 | Address | &:r2178_15 | -| ir.cpp:2178:27:2178:27 | Load | m2178_6 | -| ir.cpp:2178:27:2178:27 | Load | ~m2178_8 | -| ir.cpp:2178:27:2178:27 | Unary | r2178_14 | -| ir.cpp:2178:27:2178:27 | Unary | r2178_16 | -| ir.cpp:2178:31:2178:31 | Address | &:r2178_11 | -| ir.cpp:2178:31:2178:31 | Load | m2178_10 | -| ir.cpp:2178:31:2178:31 | StoreValue | r2178_12 | -| ir.cpp:2179:10:2179:14 | Address | &:r2179_5 | -| ir.cpp:2179:10:2179:14 | Address | &:r2179_5 | -| ir.cpp:2179:10:2179:14 | Address | &:r2179_7 | -| ir.cpp:2179:10:2179:14 | Address | &:r2179_7 | -| ir.cpp:2179:10:2179:14 | Address | &:r2179_17 | -| ir.cpp:2179:10:2179:14 | ChiPartial | partial:m2179_3 | -| ir.cpp:2179:10:2179:14 | ChiTotal | total:m2179_2 | -| ir.cpp:2179:10:2179:14 | Load | m2179_6 | -| ir.cpp:2179:10:2179:14 | Load | m2179_15 | -| ir.cpp:2179:10:2179:14 | SideEffect | m2179_3 | -| ir.cpp:2179:10:2179:14 | SideEffect | m2179_8 | -| ir.cpp:2179:20:2179:29 | Address | &:r2179_9 | -| ir.cpp:2179:27:2179:28 | Load | ~m2179_4 | -| ir.cpp:2179:27:2179:28 | StoreValue | r2179_14 | -| ir.cpp:2179:28:2179:28 | Address | &:r2179_10 | -| ir.cpp:2179:28:2179:28 | Address | &:r2179_12 | -| ir.cpp:2179:28:2179:28 | Address | &:r2179_13 | -| ir.cpp:2179:28:2179:28 | Load | m2179_6 | -| ir.cpp:2179:28:2179:28 | Load | ~m2179_8 | -| ir.cpp:2179:28:2179:28 | Unary | r2179_11 | -| ir.cpp:2182:16:2182:50 | Address | &:r2182_3 | -| ir.cpp:2182:16:2182:50 | SideEffect | ~m2182_6 | -| ir.cpp:2182:54:2182:57 | ChiPartial | partial:m2182_5 | -| ir.cpp:2182:54:2182:57 | ChiTotal | total:m2182_2 | -| ir.cpp:2182:54:2182:57 | StoreValue | r2182_4 | -| ir.cpp:2184:6:2184:35 | ChiPartial | partial:m2184_3 | -| ir.cpp:2184:6:2184:35 | ChiTotal | total:m2184_2 | -| ir.cpp:2184:6:2184:35 | Phi | from 13:~m2219_5 | -| ir.cpp:2184:6:2184:35 | Phi | from 19:~m2219_13 | -| ir.cpp:2184:6:2184:35 | Phi | from 23:~m2219_22 | -| ir.cpp:2184:6:2184:35 | SideEffect | ~m2184_9 | -| ir.cpp:2184:42:2184:42 | Address | &:r2184_5 | -| ir.cpp:2184:50:2184:50 | Address | &:r2184_7 | -| ir.cpp:2185:29:2185:29 | Address | &:r2185_1 | -| ir.cpp:2185:29:2185:29 | Address | &:r2185_1 | -| ir.cpp:2185:29:2185:29 | Arg(this) | this:r2185_1 | -| ir.cpp:2185:29:2185:29 | CallTarget | func:r2185_3 | -| ir.cpp:2185:29:2185:29 | ChiPartial | partial:m2185_5 | -| ir.cpp:2185:29:2185:29 | ChiPartial | partial:m2185_7 | -| ir.cpp:2185:29:2185:29 | ChiTotal | total:m2184_4 | -| ir.cpp:2185:29:2185:29 | ChiTotal | total:m2185_2 | -| ir.cpp:2185:29:2185:29 | SideEffect | ~m2184_4 | -| ir.cpp:2185:32:2185:32 | Address | &:r2185_9 | -| ir.cpp:2185:32:2185:32 | Condition | r2185_10 | -| ir.cpp:2185:32:2185:32 | Load | m2184_6 | -| ir.cpp:2186:9:2186:9 | Address | &:r2186_1 | -| ir.cpp:2186:9:2186:9 | Address | &:r2186_1 | -| ir.cpp:2186:9:2186:9 | Arg(this) | this:r2186_1 | -| ir.cpp:2186:9:2186:9 | ChiPartial | partial:m2186_8 | -| ir.cpp:2186:9:2186:9 | ChiTotal | total:m2185_8 | -| ir.cpp:2186:9:2186:9 | SideEffect | m2185_8 | -| ir.cpp:2186:11:2186:15 | CallTarget | func:r2186_2 | -| ir.cpp:2186:11:2186:15 | ChiPartial | partial:m2186_5 | -| ir.cpp:2186:11:2186:15 | ChiTotal | total:m2185_6 | -| ir.cpp:2186:11:2186:15 | SideEffect | ~m2185_6 | -| ir.cpp:2186:17:2186:19 | Arg(0) | 0:r2186_3 | -| ir.cpp:2186:21:2186:21 | Address | &:r2186_10 | -| ir.cpp:2186:21:2186:21 | Address | &:r2186_10 | -| ir.cpp:2186:21:2186:21 | Arg(this) | this:r2186_10 | -| ir.cpp:2186:21:2186:21 | CallTarget | func:r2186_11 | -| ir.cpp:2186:21:2186:21 | ChiPartial | partial:m2186_13 | -| ir.cpp:2186:21:2186:21 | ChiPartial | partial:m2186_16 | -| ir.cpp:2186:21:2186:21 | ChiTotal | total:m2186_6 | -| ir.cpp:2186:21:2186:21 | ChiTotal | total:m2186_9 | -| ir.cpp:2186:21:2186:21 | SideEffect | m2186_9 | -| ir.cpp:2186:21:2186:21 | SideEffect | ~m2186_6 | -| ir.cpp:2188:39:2188:39 | Address | &:r2188_2 | -| ir.cpp:2188:39:2188:39 | Address | &:r2188_2 | -| ir.cpp:2188:39:2188:39 | Arg(this) | this:r2188_2 | -| ir.cpp:2188:39:2188:39 | CallTarget | func:r2188_4 | -| ir.cpp:2188:39:2188:39 | ChiPartial | partial:m2188_6 | -| ir.cpp:2188:39:2188:39 | ChiPartial | partial:m2188_8 | -| ir.cpp:2188:39:2188:39 | ChiTotal | total:m2188_1 | -| ir.cpp:2188:39:2188:39 | ChiTotal | total:m2188_3 | -| ir.cpp:2188:39:2188:39 | Phi | from 0:~m2185_6 | -| ir.cpp:2188:39:2188:39 | Phi | from 2:~m2186_14 | -| ir.cpp:2188:39:2188:39 | SideEffect | ~m2188_1 | -| ir.cpp:2188:42:2188:76 | Condition | r2188_10 | -| ir.cpp:2189:9:2189:9 | Address | &:r2189_1 | -| ir.cpp:2189:9:2189:9 | Address | &:r2189_1 | -| ir.cpp:2189:9:2189:9 | Arg(this) | this:r2189_1 | -| ir.cpp:2189:9:2189:9 | ChiPartial | partial:m2189_8 | -| ir.cpp:2189:9:2189:9 | ChiTotal | total:m2188_9 | -| ir.cpp:2189:9:2189:9 | SideEffect | m2188_9 | -| ir.cpp:2189:11:2189:15 | CallTarget | func:r2189_2 | -| ir.cpp:2189:11:2189:15 | ChiPartial | partial:m2189_5 | -| ir.cpp:2189:11:2189:15 | ChiTotal | total:m2188_7 | -| ir.cpp:2189:11:2189:15 | SideEffect | ~m2188_7 | -| ir.cpp:2189:17:2189:19 | Arg(0) | 0:r2189_3 | -| ir.cpp:2191:32:2191:32 | Address | &:r2191_1 | -| ir.cpp:2191:32:2191:32 | Address | &:r2191_1 | -| ir.cpp:2191:32:2191:32 | Arg(this) | this:r2191_1 | -| ir.cpp:2191:32:2191:32 | CallTarget | func:r2191_3 | -| ir.cpp:2191:32:2191:32 | ChiPartial | partial:m2191_5 | -| ir.cpp:2191:32:2191:32 | ChiPartial | partial:m2191_7 | -| ir.cpp:2191:32:2191:32 | ChiTotal | total:m2189_6 | -| ir.cpp:2191:32:2191:32 | ChiTotal | total:m2191_2 | -| ir.cpp:2191:32:2191:32 | SideEffect | ~m2189_6 | -| ir.cpp:2191:35:2191:35 | Address | &:r2191_9 | -| ir.cpp:2191:35:2191:35 | Condition | r2191_11 | -| ir.cpp:2191:35:2191:35 | Load | m2184_8 | -| ir.cpp:2191:35:2191:35 | Unary | r2191_10 | -| ir.cpp:2193:11:2193:11 | Address | &:r2193_1 | -| ir.cpp:2193:11:2193:11 | Address | &:r2193_1 | -| ir.cpp:2193:11:2193:11 | Arg(this) | this:r2193_1 | -| ir.cpp:2193:11:2193:11 | ChiPartial | partial:m2193_8 | -| ir.cpp:2193:11:2193:11 | ChiTotal | total:m2191_8 | -| ir.cpp:2193:11:2193:11 | SideEffect | m2191_8 | -| ir.cpp:2193:13:2193:17 | CallTarget | func:r2193_2 | -| ir.cpp:2193:13:2193:17 | ChiPartial | partial:m2193_5 | -| ir.cpp:2193:13:2193:17 | ChiTotal | total:m2191_6 | -| ir.cpp:2193:13:2193:17 | SideEffect | ~m2191_6 | -| ir.cpp:2193:19:2193:21 | Arg(0) | 0:r2193_3 | -| ir.cpp:2196:11:2196:11 | Address | &:r2196_1 | -| ir.cpp:2196:11:2196:11 | Address | &:r2196_1 | -| ir.cpp:2196:11:2196:11 | Arg(this) | this:r2196_1 | -| ir.cpp:2196:11:2196:11 | ChiPartial | partial:m2196_8 | -| ir.cpp:2196:11:2196:11 | ChiTotal | total:m2191_8 | -| ir.cpp:2196:11:2196:11 | SideEffect | m2191_8 | -| ir.cpp:2196:13:2196:17 | CallTarget | func:r2196_2 | -| ir.cpp:2196:13:2196:17 | ChiPartial | partial:m2196_5 | -| ir.cpp:2196:13:2196:17 | ChiTotal | total:m2191_6 | -| ir.cpp:2196:13:2196:17 | SideEffect | ~m2191_6 | -| ir.cpp:2196:19:2196:21 | Arg(0) | 0:r2196_3 | -| ir.cpp:2198:5:2198:5 | Phi | from 5:~m2193_6 | -| ir.cpp:2198:5:2198:5 | Phi | from 6:~m2196_6 | -| ir.cpp:2200:25:2200:25 | Address | &:r2200_1 | -| ir.cpp:2200:25:2200:25 | Address | &:r2200_1 | -| ir.cpp:2200:25:2200:25 | Arg(this) | this:r2200_1 | -| ir.cpp:2200:25:2200:25 | CallTarget | func:r2200_3 | -| ir.cpp:2200:25:2200:25 | ChiPartial | partial:m2200_5 | -| ir.cpp:2200:25:2200:25 | ChiPartial | partial:m2200_7 | -| ir.cpp:2200:25:2200:25 | ChiTotal | total:m2198_1 | -| ir.cpp:2200:25:2200:25 | ChiTotal | total:m2200_2 | -| ir.cpp:2200:25:2200:25 | SideEffect | ~m2198_1 | -| ir.cpp:2201:5:2201:5 | Address | &:r2201_14 | -| ir.cpp:2201:5:2201:5 | Address | &:r2201_18 | -| ir.cpp:2201:5:2201:5 | Address | &:r2201_24 | -| ir.cpp:2201:42:2201:43 | Address | &:r2201_1 | -| ir.cpp:2201:42:2201:43 | Address | &:r2201_1 | -| ir.cpp:2201:42:2201:43 | Arg(this) | this:r2201_1 | -| ir.cpp:2201:45:2201:45 | Address | &:r2201_4 | -| ir.cpp:2201:45:2201:45 | Address | &:r2201_4 | -| ir.cpp:2201:45:2201:45 | Address | &:r2201_5 | -| ir.cpp:2201:45:2201:45 | Arg(0) | 0:r2201_8 | -| ir.cpp:2201:45:2201:45 | Load | m2200_8 | -| ir.cpp:2201:45:2201:45 | Load | m2201_7 | -| ir.cpp:2201:45:2201:45 | StoreValue | r2201_6 | -| ir.cpp:2201:45:2201:46 | CallTarget | func:r2201_3 | -| ir.cpp:2201:45:2201:46 | ChiPartial | partial:m2201_10 | -| ir.cpp:2201:45:2201:46 | ChiPartial | partial:m2201_12 | -| ir.cpp:2201:45:2201:46 | ChiTotal | total:m2200_6 | -| ir.cpp:2201:45:2201:46 | ChiTotal | total:m2201_2 | -| ir.cpp:2201:45:2201:46 | SideEffect | ~m2200_6 | -| ir.cpp:2201:69:2201:69 | Address | &:r2201_45 | -| ir.cpp:2201:69:2201:69 | Address | &:r2201_53 | -| ir.cpp:2201:69:2201:69 | Address | &:r2201_53 | -| ir.cpp:2201:69:2201:69 | Arg(this) | this:r2201_53 | -| ir.cpp:2201:69:2201:69 | CallTarget | func:r2201_54 | -| ir.cpp:2201:69:2201:69 | ChiPartial | partial:m2201_56 | -| ir.cpp:2201:69:2201:69 | ChiPartial | partial:m2201_59 | -| ir.cpp:2201:69:2201:69 | ChiTotal | total:m2202_6 | -| ir.cpp:2201:69:2201:69 | ChiTotal | total:m2202_9 | -| ir.cpp:2201:69:2201:69 | SideEffect | m2202_9 | -| ir.cpp:2201:69:2201:69 | SideEffect | ~m2202_6 | -| ir.cpp:2201:73:2201:73 | Address | &:r2201_19 | -| ir.cpp:2201:73:2201:73 | Address | &:r2201_25 | -| ir.cpp:2201:73:2201:73 | Address | &:r2201_48 | -| ir.cpp:2201:73:2201:73 | Address | &:r2201_61 | -| ir.cpp:2201:73:2201:73 | Address | &:r2201_61 | -| ir.cpp:2201:73:2201:73 | Arg(this) | this:r0_2 | -| ir.cpp:2201:73:2201:73 | Arg(this) | this:r0_5 | -| ir.cpp:2201:73:2201:73 | Arg(this) | this:r0_7 | -| ir.cpp:2201:73:2201:73 | Arg(this) | this:r0_8 | -| ir.cpp:2201:73:2201:73 | Arg(this) | this:r0_15 | -| ir.cpp:2201:73:2201:73 | Arg(this) | this:r2201_61 | -| ir.cpp:2201:73:2201:73 | CallTarget | func:r2201_21 | -| ir.cpp:2201:73:2201:73 | CallTarget | func:r2201_27 | -| ir.cpp:2201:73:2201:73 | CallTarget | func:r2201_33 | -| ir.cpp:2201:73:2201:73 | CallTarget | func:r2201_34 | -| ir.cpp:2201:73:2201:73 | CallTarget | func:r2201_47 | -| ir.cpp:2201:73:2201:73 | CallTarget | func:r2201_62 | -| ir.cpp:2201:73:2201:73 | ChiPartial | partial:m2201_37 | -| ir.cpp:2201:73:2201:73 | ChiPartial | partial:m2201_39 | -| ir.cpp:2201:73:2201:73 | ChiPartial | partial:m2201_42 | -| ir.cpp:2201:73:2201:73 | ChiPartial | partial:m2201_49 | -| ir.cpp:2201:73:2201:73 | ChiPartial | partial:m2201_64 | -| ir.cpp:2201:73:2201:73 | ChiPartial | partial:m2201_67 | -| ir.cpp:2201:73:2201:73 | ChiTotal | total:m0_9 | -| ir.cpp:2201:73:2201:73 | ChiTotal | total:m2201_30 | -| ir.cpp:2201:73:2201:73 | ChiTotal | total:m2201_31 | -| ir.cpp:2201:73:2201:73 | ChiTotal | total:m2201_38 | -| ir.cpp:2201:73:2201:73 | ChiTotal | total:m2201_43 | -| ir.cpp:2201:73:2201:73 | ChiTotal | total:m2201_57 | -| ir.cpp:2201:73:2201:73 | Condition | r2201_41 | -| ir.cpp:2201:73:2201:73 | Load | m2201_17 | -| ir.cpp:2201:73:2201:73 | Load | m2201_17 | -| ir.cpp:2201:73:2201:73 | Phi | from 7:m2201_23 | -| ir.cpp:2201:73:2201:73 | Phi | from 7:~m2201_11 | -| ir.cpp:2201:73:2201:73 | Phi | from 9:m2201_68 | -| ir.cpp:2201:73:2201:73 | Phi | from 9:~m2201_65 | -| ir.cpp:2201:73:2201:73 | SideEffect | m2201_30 | -| ir.cpp:2201:73:2201:73 | SideEffect | ~m2201_31 | -| ir.cpp:2201:73:2201:73 | SideEffect | ~m2201_38 | -| ir.cpp:2201:73:2201:73 | SideEffect | ~m2201_43 | -| ir.cpp:2201:73:2201:73 | SideEffect | ~m2201_57 | -| ir.cpp:2201:73:2201:73 | StoreValue | r2201_22 | -| ir.cpp:2201:73:2201:73 | StoreValue | r2201_28 | -| ir.cpp:2201:73:2201:73 | Unary | r2201_20 | -| ir.cpp:2201:73:2201:73 | Unary | r2201_26 | -| ir.cpp:2201:73:2201:73 | Unary | r2201_32 | -| ir.cpp:2201:73:2201:73 | Unary | r2201_35 | -| ir.cpp:2201:73:2201:73 | Unary | r2201_46 | -| ir.cpp:2201:73:2201:73 | Unary | r2201_63 | -| ir.cpp:2201:73:2201:74 | StoreValue | r2201_16 | -| ir.cpp:2201:73:2201:74 | Unary | r2201_15 | -| ir.cpp:2201:73:2201:75 | Load | ~m2201_50 | -| ir.cpp:2201:73:2201:75 | StoreValue | r2201_51 | -| ir.cpp:2202:7:2202:7 | Address | &:r2202_1 | -| ir.cpp:2202:7:2202:7 | Address | &:r2202_1 | -| ir.cpp:2202:7:2202:7 | Arg(this) | this:r2202_1 | -| ir.cpp:2202:7:2202:7 | ChiPartial | partial:m2202_8 | -| ir.cpp:2202:7:2202:7 | ChiTotal | total:m2201_52 | -| ir.cpp:2202:7:2202:7 | SideEffect | m2201_52 | -| ir.cpp:2202:9:2202:13 | CallTarget | func:r2202_2 | -| ir.cpp:2202:9:2202:13 | ChiPartial | partial:m2202_5 | -| ir.cpp:2202:9:2202:13 | ChiTotal | total:m2201_50 | -| ir.cpp:2202:9:2202:13 | SideEffect | ~m2201_50 | -| ir.cpp:2202:15:2202:17 | Arg(0) | 0:r2202_3 | -| ir.cpp:2204:5:2204:5 | Address | &:r2204_14 | -| ir.cpp:2204:5:2204:5 | Address | &:r2204_18 | -| ir.cpp:2204:5:2204:5 | Address | &:r2204_24 | -| ir.cpp:2204:42:2204:43 | Address | &:r2204_1 | -| ir.cpp:2204:42:2204:43 | Address | &:r2204_1 | -| ir.cpp:2204:42:2204:43 | Address | &:r2204_61 | -| ir.cpp:2204:42:2204:43 | Address | &:r2204_61 | -| ir.cpp:2204:42:2204:43 | Arg(this) | this:r2204_1 | -| ir.cpp:2204:42:2204:43 | Arg(this) | this:r2204_61 | -| ir.cpp:2204:42:2204:43 | CallTarget | func:r2204_62 | -| ir.cpp:2204:42:2204:43 | ChiPartial | partial:m2204_64 | -| ir.cpp:2204:42:2204:43 | ChiPartial | partial:m2204_67 | -| ir.cpp:2204:42:2204:43 | ChiTotal | total:m2204_13 | -| ir.cpp:2204:42:2204:43 | ChiTotal | total:m2204_57 | -| ir.cpp:2204:42:2204:43 | SideEffect | m2204_13 | -| ir.cpp:2204:42:2204:43 | SideEffect | ~m2204_57 | -| ir.cpp:2204:45:2204:45 | Address | &:r2204_4 | -| ir.cpp:2204:45:2204:45 | Address | &:r2204_4 | -| ir.cpp:2204:45:2204:45 | Address | &:r2204_5 | -| ir.cpp:2204:45:2204:45 | Arg(0) | 0:r2204_8 | -| ir.cpp:2204:45:2204:45 | Load | m2200_8 | -| ir.cpp:2204:45:2204:45 | Load | m2204_7 | -| ir.cpp:2204:45:2204:45 | StoreValue | r2204_6 | -| ir.cpp:2204:45:2204:46 | CallTarget | func:r2204_3 | -| ir.cpp:2204:45:2204:46 | ChiPartial | partial:m2204_10 | -| ir.cpp:2204:45:2204:46 | ChiPartial | partial:m2204_12 | -| ir.cpp:2204:45:2204:46 | ChiTotal | total:m2201_43 | -| ir.cpp:2204:45:2204:46 | ChiTotal | total:m2204_2 | -| ir.cpp:2204:45:2204:46 | SideEffect | ~m2201_43 | -| ir.cpp:2204:69:2204:69 | Address | &:r2204_45 | -| ir.cpp:2204:69:2204:69 | Address | &:r2204_53 | -| ir.cpp:2204:69:2204:69 | Address | &:r2204_53 | -| ir.cpp:2204:69:2204:69 | Address | &:r2204_69 | -| ir.cpp:2204:69:2204:69 | Address | &:r2204_69 | -| ir.cpp:2204:69:2204:69 | Arg(this) | this:r2204_53 | -| ir.cpp:2204:69:2204:69 | Arg(this) | this:r2204_69 | -| ir.cpp:2204:69:2204:69 | CallTarget | func:r2204_54 | -| ir.cpp:2204:69:2204:69 | CallTarget | func:r2204_70 | -| ir.cpp:2204:69:2204:69 | ChiPartial | partial:m2204_56 | -| ir.cpp:2204:69:2204:69 | ChiPartial | partial:m2204_59 | -| ir.cpp:2204:69:2204:69 | ChiPartial | partial:m2204_72 | -| ir.cpp:2204:69:2204:69 | ChiPartial | partial:m2204_75 | -| ir.cpp:2204:69:2204:69 | ChiTotal | total:m2206_5 | -| ir.cpp:2204:69:2204:69 | ChiTotal | total:m2206_5 | -| ir.cpp:2204:69:2204:69 | ChiTotal | total:m2206_8 | -| ir.cpp:2204:69:2204:69 | ChiTotal | total:m2206_8 | -| ir.cpp:2204:69:2204:69 | SideEffect | m2206_8 | -| ir.cpp:2204:69:2204:69 | SideEffect | m2206_8 | -| ir.cpp:2204:69:2204:69 | SideEffect | ~m2206_5 | -| ir.cpp:2204:69:2204:69 | SideEffect | ~m2206_5 | -| ir.cpp:2204:73:2204:73 | Address | &:r2204_19 | -| ir.cpp:2204:73:2204:73 | Address | &:r2204_25 | -| ir.cpp:2204:73:2204:73 | Address | &:r2204_48 | -| ir.cpp:2204:73:2204:73 | Address | &:r2204_77 | -| ir.cpp:2204:73:2204:73 | Address | &:r2204_77 | -| ir.cpp:2204:73:2204:73 | Arg(this) | this:r0_18 | -| ir.cpp:2204:73:2204:73 | Arg(this) | this:r0_21 | -| ir.cpp:2204:73:2204:73 | Arg(this) | this:r0_23 | -| ir.cpp:2204:73:2204:73 | Arg(this) | this:r0_24 | -| ir.cpp:2204:73:2204:73 | Arg(this) | this:r0_31 | -| ir.cpp:2204:73:2204:73 | Arg(this) | this:r2204_77 | -| ir.cpp:2204:73:2204:73 | CallTarget | func:r2204_21 | -| ir.cpp:2204:73:2204:73 | CallTarget | func:r2204_27 | -| ir.cpp:2204:73:2204:73 | CallTarget | func:r2204_33 | -| ir.cpp:2204:73:2204:73 | CallTarget | func:r2204_34 | -| ir.cpp:2204:73:2204:73 | CallTarget | func:r2204_47 | -| ir.cpp:2204:73:2204:73 | CallTarget | func:r2204_78 | -| ir.cpp:2204:73:2204:73 | ChiPartial | partial:m2204_37 | -| ir.cpp:2204:73:2204:73 | ChiPartial | partial:m2204_39 | -| ir.cpp:2204:73:2204:73 | ChiPartial | partial:m2204_42 | -| ir.cpp:2204:73:2204:73 | ChiPartial | partial:m2204_49 | -| ir.cpp:2204:73:2204:73 | ChiPartial | partial:m2204_80 | -| ir.cpp:2204:73:2204:73 | ChiPartial | partial:m2204_83 | -| ir.cpp:2204:73:2204:73 | ChiTotal | total:m0_25 | -| ir.cpp:2204:73:2204:73 | ChiTotal | total:m2204_30 | -| ir.cpp:2204:73:2204:73 | ChiTotal | total:m2204_31 | -| ir.cpp:2204:73:2204:73 | ChiTotal | total:m2204_38 | -| ir.cpp:2204:73:2204:73 | ChiTotal | total:m2204_43 | -| ir.cpp:2204:73:2204:73 | ChiTotal | total:m2204_73 | -| ir.cpp:2204:73:2204:73 | Condition | r2204_41 | -| ir.cpp:2204:73:2204:73 | Load | m2204_17 | -| ir.cpp:2204:73:2204:73 | Load | m2204_17 | -| ir.cpp:2204:73:2204:73 | Phi | from 10:m2204_23 | -| ir.cpp:2204:73:2204:73 | Phi | from 10:~m2204_11 | -| ir.cpp:2204:73:2204:73 | Phi | from 14:m2204_84 | -| ir.cpp:2204:73:2204:73 | Phi | from 14:~m2204_81 | -| ir.cpp:2204:73:2204:73 | SideEffect | m2204_30 | -| ir.cpp:2204:73:2204:73 | SideEffect | ~m2204_31 | -| ir.cpp:2204:73:2204:73 | SideEffect | ~m2204_38 | -| ir.cpp:2204:73:2204:73 | SideEffect | ~m2204_43 | -| ir.cpp:2204:73:2204:73 | SideEffect | ~m2204_73 | -| ir.cpp:2204:73:2204:73 | StoreValue | r2204_22 | -| ir.cpp:2204:73:2204:73 | StoreValue | r2204_28 | -| ir.cpp:2204:73:2204:73 | Unary | r2204_20 | -| ir.cpp:2204:73:2204:73 | Unary | r2204_26 | -| ir.cpp:2204:73:2204:73 | Unary | r2204_32 | -| ir.cpp:2204:73:2204:73 | Unary | r2204_35 | -| ir.cpp:2204:73:2204:73 | Unary | r2204_46 | -| ir.cpp:2204:73:2204:73 | Unary | r2204_79 | -| ir.cpp:2204:73:2204:74 | StoreValue | r2204_16 | -| ir.cpp:2204:73:2204:74 | Unary | r2204_15 | -| ir.cpp:2204:73:2204:75 | Load | ~m2204_50 | -| ir.cpp:2204:73:2204:75 | StoreValue | r2204_51 | -| ir.cpp:2205:7:2205:7 | Address | &:r2205_1 | -| ir.cpp:2205:7:2205:7 | Address | &:r2205_1 | -| ir.cpp:2205:7:2205:7 | Arg(this) | this:r2205_1 | -| ir.cpp:2205:7:2205:7 | ChiPartial | partial:m2205_8 | -| ir.cpp:2205:7:2205:7 | ChiTotal | total:m2204_52 | -| ir.cpp:2205:7:2205:7 | SideEffect | m2204_52 | -| ir.cpp:2205:9:2205:13 | CallTarget | func:r2205_2 | -| ir.cpp:2205:9:2205:13 | ChiPartial | partial:m2205_5 | -| ir.cpp:2205:9:2205:13 | ChiTotal | total:m2204_50 | -| ir.cpp:2205:9:2205:13 | SideEffect | ~m2204_50 | -| ir.cpp:2205:15:2205:17 | Arg(0) | 0:r2205_3 | -| ir.cpp:2206:11:2206:11 | Address | &:r2206_1 | -| ir.cpp:2206:11:2206:11 | Address | &:r2206_1 | -| ir.cpp:2206:11:2206:11 | Arg(this) | this:r2206_1 | -| ir.cpp:2206:11:2206:11 | ChiPartial | partial:m2206_7 | -| ir.cpp:2206:11:2206:11 | ChiTotal | total:m2205_9 | -| ir.cpp:2206:11:2206:11 | SideEffect | m2205_9 | -| ir.cpp:2206:11:2206:19 | Left | r2206_9 | -| ir.cpp:2206:11:2206:26 | Condition | r2206_11 | -| ir.cpp:2206:13:2206:17 | CallTarget | func:r2206_2 | -| ir.cpp:2206:13:2206:17 | ChiPartial | partial:m2206_4 | -| ir.cpp:2206:13:2206:17 | ChiTotal | total:m2205_6 | -| ir.cpp:2206:13:2206:17 | SideEffect | ~m2205_6 | -| ir.cpp:2206:13:2206:17 | Unary | r2206_3 | -| ir.cpp:2206:24:2206:26 | Right | r2206_10 | -| ir.cpp:2210:5:2210:5 | Address | &:r2210_10 | -| ir.cpp:2210:5:2210:5 | Address | &:r2210_14 | -| ir.cpp:2210:5:2210:5 | Address | &:r2210_20 | -| ir.cpp:2210:26:2210:27 | Address | &:r2210_1 | -| ir.cpp:2210:26:2210:27 | Address | &:r2210_1 | -| ir.cpp:2210:26:2210:27 | Address | &:r2210_58 | -| ir.cpp:2210:26:2210:27 | Address | &:r2210_58 | -| ir.cpp:2210:26:2210:27 | Arg(this) | this:r2210_1 | -| ir.cpp:2210:26:2210:27 | Arg(this) | this:r2210_58 | -| ir.cpp:2210:26:2210:27 | CallTarget | func:r2210_59 | -| ir.cpp:2210:26:2210:27 | ChiPartial | partial:m2210_61 | -| ir.cpp:2210:26:2210:27 | ChiPartial | partial:m2210_64 | -| ir.cpp:2210:26:2210:27 | ChiTotal | total:m2210_9 | -| ir.cpp:2210:26:2210:27 | ChiTotal | total:m2210_55 | -| ir.cpp:2210:26:2210:27 | SideEffect | m2210_9 | -| ir.cpp:2210:26:2210:27 | SideEffect | ~m2210_55 | -| ir.cpp:2210:29:2210:29 | Arg(0) | 0:r2210_4 | -| ir.cpp:2210:29:2210:30 | CallTarget | func:r2210_3 | -| ir.cpp:2210:29:2210:30 | ChiPartial | partial:m2210_6 | -| ir.cpp:2210:29:2210:30 | ChiPartial | partial:m2210_8 | -| ir.cpp:2210:29:2210:30 | ChiTotal | total:m2204_43 | -| ir.cpp:2210:29:2210:30 | ChiTotal | total:m2210_2 | -| ir.cpp:2210:29:2210:30 | SideEffect | ~m2204_43 | -| ir.cpp:2210:37:2210:37 | Address | &:r2210_50 | -| ir.cpp:2210:41:2210:41 | Address | &:r2210_15 | -| ir.cpp:2210:41:2210:41 | Address | &:r2210_21 | -| ir.cpp:2210:41:2210:41 | Address | &:r2210_41 | -| ir.cpp:2210:41:2210:41 | Address | &:r2210_41 | -| ir.cpp:2210:41:2210:41 | Address | &:r2210_53 | -| ir.cpp:2210:41:2210:41 | Arg(this) | this:r0_34 | -| ir.cpp:2210:41:2210:41 | Arg(this) | this:r0_37 | -| ir.cpp:2210:41:2210:41 | Arg(this) | this:r0_39 | -| ir.cpp:2210:41:2210:41 | Arg(this) | this:r0_40 | -| ir.cpp:2210:41:2210:41 | Arg(this) | this:r0_47 | -| ir.cpp:2210:41:2210:41 | Arg(this) | this:r2210_41 | -| ir.cpp:2210:41:2210:41 | CallTarget | func:r2210_17 | -| ir.cpp:2210:41:2210:41 | CallTarget | func:r2210_23 | -| ir.cpp:2210:41:2210:41 | CallTarget | func:r2210_29 | -| ir.cpp:2210:41:2210:41 | CallTarget | func:r2210_30 | -| ir.cpp:2210:41:2210:41 | CallTarget | func:r2210_42 | -| ir.cpp:2210:41:2210:41 | CallTarget | func:r2210_52 | -| ir.cpp:2210:41:2210:41 | ChiPartial | partial:m2210_33 | -| ir.cpp:2210:41:2210:41 | ChiPartial | partial:m2210_35 | -| ir.cpp:2210:41:2210:41 | ChiPartial | partial:m2210_38 | -| ir.cpp:2210:41:2210:41 | ChiPartial | partial:m2210_44 | -| ir.cpp:2210:41:2210:41 | ChiPartial | partial:m2210_47 | -| ir.cpp:2210:41:2210:41 | ChiPartial | partial:m2210_54 | -| ir.cpp:2210:41:2210:41 | ChiTotal | total:m0_41 | -| ir.cpp:2210:41:2210:41 | ChiTotal | total:m2210_26 | -| ir.cpp:2210:41:2210:41 | ChiTotal | total:m2210_27 | -| ir.cpp:2210:41:2210:41 | ChiTotal | total:m2210_34 | -| ir.cpp:2210:41:2210:41 | ChiTotal | total:m2210_39 | -| ir.cpp:2210:41:2210:41 | ChiTotal | total:m2210_55 | -| ir.cpp:2210:41:2210:41 | Condition | r2210_37 | -| ir.cpp:2210:41:2210:41 | Load | m2210_13 | -| ir.cpp:2210:41:2210:41 | Load | m2210_13 | -| ir.cpp:2210:41:2210:41 | Phi | from 15:m2210_19 | -| ir.cpp:2210:41:2210:41 | Phi | from 15:~m2210_7 | -| ir.cpp:2210:41:2210:41 | Phi | from 17:m2210_48 | -| ir.cpp:2210:41:2210:41 | Phi | from 17:~m2210_45 | -| ir.cpp:2210:41:2210:41 | SideEffect | m2210_26 | -| ir.cpp:2210:41:2210:41 | SideEffect | ~m2210_27 | -| ir.cpp:2210:41:2210:41 | SideEffect | ~m2210_34 | -| ir.cpp:2210:41:2210:41 | SideEffect | ~m2210_39 | -| ir.cpp:2210:41:2210:41 | SideEffect | ~m2210_55 | -| ir.cpp:2210:41:2210:41 | StoreValue | r2210_18 | -| ir.cpp:2210:41:2210:41 | StoreValue | r2210_24 | -| ir.cpp:2210:41:2210:41 | Unary | r2210_16 | -| ir.cpp:2210:41:2210:41 | Unary | r2210_22 | -| ir.cpp:2210:41:2210:41 | Unary | r2210_28 | -| ir.cpp:2210:41:2210:41 | Unary | r2210_31 | -| ir.cpp:2210:41:2210:41 | Unary | r2210_43 | -| ir.cpp:2210:41:2210:41 | Unary | r2210_51 | -| ir.cpp:2210:41:2210:42 | StoreValue | r2210_12 | -| ir.cpp:2210:41:2210:42 | Unary | r2210_11 | -| ir.cpp:2210:41:2210:43 | Load | ~m2210_55 | -| ir.cpp:2210:41:2210:43 | StoreValue | r2210_56 | -| ir.cpp:2211:11:2211:11 | Address | &:r2211_1 | -| ir.cpp:2211:11:2211:11 | Left | r2211_2 | -| ir.cpp:2211:11:2211:11 | Load | m2210_57 | -| ir.cpp:2211:11:2211:16 | Condition | r2211_4 | -| ir.cpp:2211:16:2211:16 | Right | r2211_3 | +| ir.cpp:2141:13:2141:15 | CallTarget | func:r2141_2 | +| ir.cpp:2141:13:2141:15 | ChiPartial | partial:m2141_6 | +| ir.cpp:2141:13:2141:15 | ChiTotal | total:m2140_4 | +| ir.cpp:2141:13:2141:15 | SideEffect | ~m2140_4 | +| ir.cpp:2141:13:2141:15 | StoreValue | r2141_5 | +| ir.cpp:2141:17:2141:17 | Arg(0) | 0:r2141_3 | +| ir.cpp:2141:19:2141:19 | Arg(1) | 1:r2141_4 | +| ir.cpp:2142:9:2142:9 | Address | &:r2142_1 | +| ir.cpp:2142:9:2142:9 | Left | r2142_2 | +| ir.cpp:2142:9:2142:9 | Load | m2141_8 | +| ir.cpp:2142:9:2142:14 | Condition | r2142_4 | +| ir.cpp:2142:14:2142:14 | Right | r2142_3 | +| ir.cpp:2143:9:2143:12 | CallTarget | func:r2143_1 | +| ir.cpp:2143:9:2143:12 | ChiPartial | partial:m2143_4 | +| ir.cpp:2143:9:2143:12 | ChiTotal | total:m2141_7 | +| ir.cpp:2143:9:2143:12 | SideEffect | ~m2141_7 | +| ir.cpp:2143:14:2143:14 | Arg(0) | 0:r2143_2 | +| ir.cpp:2144:5:2144:12 | CallTarget | func:r2144_1 | +| ir.cpp:2144:5:2144:12 | ChiPartial | partial:m2144_3 | +| ir.cpp:2144:5:2144:12 | ChiTotal | total:m2141_7 | +| ir.cpp:2144:5:2144:12 | SideEffect | ~m2141_7 | +| ir.cpp:2145:5:2145:13 | Address | &:r2145_1 | +| ir.cpp:2145:12:2145:12 | Address | &:r2145_2 | +| ir.cpp:2145:12:2145:12 | Load | m2141_8 | +| ir.cpp:2145:12:2145:12 | StoreValue | r2145_3 | +| ir.cpp:2148:6:2148:17 | ChiPartial | partial:m2148_3 | +| ir.cpp:2148:6:2148:17 | ChiTotal | total:m2148_2 | +| ir.cpp:2149:5:2149:12 | CallTarget | func:r2149_1 | +| ir.cpp:2149:5:2149:12 | ChiPartial | partial:m2149_3 | +| ir.cpp:2149:5:2149:12 | ChiTotal | total:m2148_4 | +| ir.cpp:2149:5:2149:12 | SideEffect | ~m2148_4 | +| ir.cpp:2150:5:2150:8 | CallTarget | func:r2150_1 | +| ir.cpp:2150:5:2150:8 | ChiPartial | partial:m2150_4 | +| ir.cpp:2150:5:2150:8 | ChiTotal | total:m2149_4 | +| ir.cpp:2150:5:2150:8 | SideEffect | ~m2149_4 | +| ir.cpp:2150:10:2150:10 | Arg(0) | 0:r2150_2 | +| ir.cpp:2153:5:2153:16 | Address | &:r2153_6 | +| ir.cpp:2153:5:2153:16 | ChiPartial | partial:m2153_3 | +| ir.cpp:2153:5:2153:16 | ChiTotal | total:m2153_2 | +| ir.cpp:2153:5:2153:16 | Load | m2158_4 | +| ir.cpp:2153:5:2153:16 | SideEffect | ~m2157_4 | +| ir.cpp:2154:9:2154:9 | Address | &:r2154_1 | +| ir.cpp:2154:13:2154:15 | CallTarget | func:r2154_2 | +| ir.cpp:2154:13:2154:15 | ChiPartial | partial:m2154_6 | +| ir.cpp:2154:13:2154:15 | ChiTotal | total:m2153_4 | +| ir.cpp:2154:13:2154:15 | SideEffect | ~m2153_4 | +| ir.cpp:2154:13:2154:15 | StoreValue | r2154_5 | +| ir.cpp:2154:17:2154:17 | Arg(0) | 0:r2154_3 | +| ir.cpp:2154:19:2154:19 | Arg(1) | 1:r2154_4 | +| ir.cpp:2155:9:2155:9 | Address | &:r2155_1 | +| ir.cpp:2155:9:2155:9 | Left | r2155_2 | +| ir.cpp:2155:9:2155:9 | Load | m2154_8 | +| ir.cpp:2155:9:2155:14 | Condition | r2155_4 | +| ir.cpp:2155:14:2155:14 | Right | r2155_3 | +| ir.cpp:2156:9:2156:20 | CallTarget | func:r2156_1 | +| ir.cpp:2157:5:2157:12 | CallTarget | func:r2157_1 | +| ir.cpp:2157:5:2157:12 | ChiPartial | partial:m2157_3 | +| ir.cpp:2157:5:2157:12 | ChiTotal | total:m2154_7 | +| ir.cpp:2157:5:2157:12 | SideEffect | ~m2154_7 | +| ir.cpp:2158:5:2158:13 | Address | &:r2158_1 | +| ir.cpp:2158:12:2158:12 | Address | &:r2158_2 | +| ir.cpp:2158:12:2158:12 | Load | m2154_8 | +| ir.cpp:2158:12:2158:12 | StoreValue | r2158_3 | +| ir.cpp:2161:6:2161:24 | ChiPartial | partial:m2161_3 | +| ir.cpp:2161:6:2161:24 | ChiTotal | total:m2161_2 | +| ir.cpp:2161:6:2161:24 | SideEffect | ~m2167_8 | +| ir.cpp:2161:33:2161:33 | Address | &:r2161_5 | +| ir.cpp:2162:3:2162:12 | Address | &:r2162_6 | +| ir.cpp:2162:3:2162:12 | Arg(0) | 0:r2162_5 | +| ir.cpp:2162:3:2162:12 | CallTarget | func:r2162_1 | +| ir.cpp:2162:3:2162:12 | ChiPartial | partial:m2162_7 | +| ir.cpp:2162:3:2162:12 | ChiTotal | total:m2161_4 | +| ir.cpp:2162:3:2162:12 | Right | r2162_4 | +| ir.cpp:2162:3:2162:12 | SideEffect | ~m2161_4 | +| ir.cpp:2162:3:2162:12 | Unary | r2162_6 | +| ir.cpp:2162:11:2162:11 | Address | &:r2162_2 | +| ir.cpp:2162:11:2162:11 | Left | r2162_3 | +| ir.cpp:2162:11:2162:11 | Load | m2161_6 | +| ir.cpp:2163:3:2163:18 | Address | &:r2163_7 | +| ir.cpp:2163:3:2163:18 | Arg(0) | 0:r2163_5 | +| ir.cpp:2163:3:2163:18 | CallTarget | func:r2163_1 | +| ir.cpp:2163:3:2163:18 | ChiPartial | partial:m2163_8 | +| ir.cpp:2163:3:2163:18 | ChiTotal | total:m2162_8 | +| ir.cpp:2163:3:2163:18 | Right | r2163_4 | +| ir.cpp:2163:3:2163:18 | SideEffect | ~m2162_8 | +| ir.cpp:2163:3:2163:18 | Unary | r2163_7 | +| ir.cpp:2163:7:2163:10 | Arg(1) | 1:r2163_6 | +| ir.cpp:2163:17:2163:17 | Address | &:r2163_2 | +| ir.cpp:2163:17:2163:17 | Left | r2163_3 | +| ir.cpp:2163:17:2163:17 | Load | m2161_6 | +| ir.cpp:2164:3:2164:15 | Address | &:r2164_6 | +| ir.cpp:2164:3:2164:15 | Arg(0) | 0:r2164_5 | +| ir.cpp:2164:3:2164:15 | CallTarget | func:r2164_1 | +| ir.cpp:2164:3:2164:15 | ChiPartial | partial:m2164_7 | +| ir.cpp:2164:3:2164:15 | ChiTotal | total:m2163_9 | +| ir.cpp:2164:3:2164:15 | Right | r2164_4 | +| ir.cpp:2164:3:2164:15 | SideEffect | ~m2163_9 | +| ir.cpp:2164:3:2164:15 | Unary | r2164_6 | +| ir.cpp:2164:14:2164:14 | Address | &:r2164_2 | +| ir.cpp:2164:14:2164:14 | Left | r2164_3 | +| ir.cpp:2164:14:2164:14 | Load | m2161_6 | +| ir.cpp:2165:3:2165:20 | Address | &:r2165_7 | +| ir.cpp:2165:3:2165:20 | Arg(0) | 0:r2165_5 | +| ir.cpp:2165:3:2165:20 | CallTarget | func:r2165_1 | +| ir.cpp:2165:3:2165:20 | ChiPartial | partial:m2165_8 | +| ir.cpp:2165:3:2165:20 | ChiTotal | total:m2164_8 | +| ir.cpp:2165:3:2165:20 | Right | r2165_4 | +| ir.cpp:2165:3:2165:20 | SideEffect | ~m2164_8 | +| ir.cpp:2165:3:2165:20 | Unary | r2165_7 | +| ir.cpp:2165:19:2165:19 | Address | &:r2165_2 | +| ir.cpp:2165:19:2165:19 | Left | r2165_3 | +| ir.cpp:2165:19:2165:19 | Load | m2161_6 | +| ir.cpp:2165:21:2165:21 | Arg(1) | 1:r2165_6 | +| ir.cpp:2166:3:2166:36 | Address | &:r2166_6 | +| ir.cpp:2166:3:2166:36 | Arg(0) | 0:r2166_5 | +| ir.cpp:2166:3:2166:36 | CallTarget | func:r2166_1 | +| ir.cpp:2166:3:2166:36 | ChiPartial | partial:m2166_7 | +| ir.cpp:2166:3:2166:36 | ChiTotal | total:m2165_9 | +| ir.cpp:2166:3:2166:36 | Right | r2166_4 | +| ir.cpp:2166:3:2166:36 | SideEffect | ~m2165_9 | +| ir.cpp:2166:3:2166:36 | Unary | r2166_6 | +| ir.cpp:2166:35:2166:35 | Address | &:r2166_2 | +| ir.cpp:2166:35:2166:35 | Left | r2166_3 | +| ir.cpp:2166:35:2166:35 | Load | m2161_6 | +| ir.cpp:2167:3:2167:24 | Address | &:r2167_6 | +| ir.cpp:2167:3:2167:24 | Arg(0) | 0:r2167_5 | +| ir.cpp:2167:3:2167:24 | CallTarget | func:r2167_1 | +| ir.cpp:2167:3:2167:24 | ChiPartial | partial:m2167_7 | +| ir.cpp:2167:3:2167:24 | ChiTotal | total:m2166_8 | +| ir.cpp:2167:3:2167:24 | Right | r2167_4 | +| ir.cpp:2167:3:2167:24 | SideEffect | ~m2166_8 | +| ir.cpp:2167:3:2167:24 | Unary | r2167_6 | +| ir.cpp:2167:11:2167:11 | Address | &:r2167_2 | +| ir.cpp:2167:11:2167:11 | Left | r2167_3 | +| ir.cpp:2167:11:2167:11 | Load | m2161_6 | +| ir.cpp:2172:7:2172:17 | Address | &:r2172_10 | +| ir.cpp:2172:7:2172:17 | ChiPartial | partial:m2172_3 | +| ir.cpp:2172:7:2172:17 | ChiTotal | total:m2172_2 | +| ir.cpp:2172:7:2172:17 | Load | m2175_4 | +| ir.cpp:2172:7:2172:17 | SideEffect | m2172_3 | +| ir.cpp:2172:25:2172:25 | Address | &:r2172_5 | +| ir.cpp:2172:25:2172:25 | Address | &:r2172_5 | +| ir.cpp:2172:25:2172:25 | Address | &:r2172_7 | +| ir.cpp:2172:25:2172:25 | Address | &:r2172_7 | +| ir.cpp:2172:25:2172:25 | Load | m2172_6 | +| ir.cpp:2172:25:2172:25 | SideEffect | m2172_8 | +| ir.cpp:2173:9:2173:11 | Address | &:r2173_1 | +| ir.cpp:2174:10:2174:10 | Address | &:r2174_1 | +| ir.cpp:2174:14:2174:19 | CallTarget | func:r2174_2 | +| ir.cpp:2174:14:2174:19 | StoreValue | r2174_8 | +| ir.cpp:2174:21:2174:21 | Address | &:r2174_3 | +| ir.cpp:2174:21:2174:21 | Address | &:r2174_5 | +| ir.cpp:2174:21:2174:21 | Arg(0) | 0:r2174_5 | +| ir.cpp:2174:21:2174:21 | Load | m2172_6 | +| ir.cpp:2174:21:2174:21 | SideEffect | ~m2172_8 | +| ir.cpp:2174:21:2174:21 | Unary | r2174_4 | +| ir.cpp:2174:24:2174:27 | Address | &:r2174_7 | +| ir.cpp:2174:24:2174:27 | Arg(1) | 1:r2174_7 | +| ir.cpp:2174:24:2174:27 | ChiPartial | partial:m2174_10 | +| ir.cpp:2174:24:2174:27 | ChiTotal | total:m2173_2 | +| ir.cpp:2174:25:2174:27 | Unary | r2174_6 | +| ir.cpp:2175:3:2175:13 | Address | &:r2175_1 | +| ir.cpp:2175:10:2175:12 | Address | &:r2175_2 | +| ir.cpp:2175:10:2175:12 | Load | m2174_11 | +| ir.cpp:2175:10:2175:12 | StoreValue | r2175_3 | +| ir.cpp:2182:6:2182:39 | ChiPartial | partial:m2182_3 | +| ir.cpp:2182:6:2182:39 | ChiTotal | total:m2182_2 | +| ir.cpp:2182:6:2182:39 | SideEffect | ~m2183_8 | +| ir.cpp:2183:6:2183:42 | Address | &:r2183_1 | +| ir.cpp:2183:6:2183:42 | Condition | r2183_12 | +| ir.cpp:2183:22:2183:22 | Address | &:r2183_4 | +| ir.cpp:2183:22:2183:22 | Address | &:r2183_4 | +| ir.cpp:2183:22:2183:22 | Arg(this) | this:r2183_4 | +| ir.cpp:2183:22:2183:22 | CallTarget | func:r2183_5 | +| ir.cpp:2183:22:2183:22 | ChiPartial | partial:m2183_7 | +| ir.cpp:2183:22:2183:22 | ChiPartial | partial:m2183_10 | +| ir.cpp:2183:22:2183:22 | ChiTotal | total:m2182_4 | +| ir.cpp:2183:22:2183:22 | ChiTotal | total:m2183_3 | +| ir.cpp:2183:22:2183:22 | SideEffect | m2183_3 | +| ir.cpp:2183:22:2183:22 | SideEffect | ~m2182_4 | +| ir.cpp:2183:22:2183:22 | Unary | r2183_6 | +| ir.cpp:2183:25:2183:42 | StoreValue | r2183_2 | +| ir.cpp:2186:7:2186:7 | Address | &:r2186_5 | +| ir.cpp:2186:7:2186:7 | Address | &:r2186_5 | +| ir.cpp:2186:7:2186:7 | Address | &:r2186_7 | +| ir.cpp:2186:7:2186:7 | Address | &:r2186_7 | +| ir.cpp:2186:7:2186:7 | Address | &:r2186_9 | +| ir.cpp:2186:7:2186:7 | Address | &:r2186_10 | +| ir.cpp:2186:7:2186:7 | Address | &:r2186_13 | +| ir.cpp:2186:7:2186:7 | ChiPartial | partial:m2186_3 | +| ir.cpp:2186:7:2186:7 | ChiPartial | partial:m2186_15 | +| ir.cpp:2186:7:2186:7 | ChiTotal | total:m2186_2 | +| ir.cpp:2186:7:2186:7 | ChiTotal | total:m2186_8 | +| ir.cpp:2186:7:2186:7 | Load | m0_2 | +| ir.cpp:2186:7:2186:7 | Load | m2186_6 | +| ir.cpp:2186:7:2186:7 | Load | ~m0_4 | +| ir.cpp:2186:7:2186:7 | SideEffect | m2186_3 | +| ir.cpp:2186:7:2186:7 | SideEffect | m2186_16 | +| ir.cpp:2186:7:2186:7 | StoreValue | r2186_14 | +| ir.cpp:2186:7:2186:7 | Unary | m2186_6 | +| ir.cpp:2186:7:2186:7 | Unary | r2186_11 | +| ir.cpp:2186:7:2186:7 | Unary | r2186_12 | +| ir.cpp:2189:5:2189:23 | Address | &:r2189_5 | +| ir.cpp:2189:5:2189:23 | Address | &:r2189_5 | +| ir.cpp:2189:5:2189:23 | Address | &:r2189_7 | +| ir.cpp:2189:5:2189:23 | Address | &:r2189_7 | +| ir.cpp:2189:5:2189:23 | ChiPartial | partial:m2189_3 | +| ir.cpp:2189:5:2189:23 | ChiTotal | total:m2189_2 | +| ir.cpp:2189:5:2189:23 | Load | m2189_6 | +| ir.cpp:2189:5:2189:23 | SideEffect | m2189_20 | +| ir.cpp:2189:5:2189:23 | SideEffect | ~m2189_13 | +| ir.cpp:2189:29:2189:29 | Address | &:r2189_16 | +| ir.cpp:2189:29:2189:29 | Address | &:r2189_18 | +| ir.cpp:2189:29:2189:29 | Load | m2189_6 | +| ir.cpp:2189:29:2189:29 | Unary | r2189_17 | +| ir.cpp:2189:29:2189:40 | ChiPartial | partial:m2189_19 | +| ir.cpp:2189:29:2189:40 | ChiTotal | total:m2189_8 | +| ir.cpp:2189:33:2189:40 | Address | &:r2189_11 | +| ir.cpp:2189:33:2189:40 | Arg(0) | 0:r2189_10 | +| ir.cpp:2189:33:2189:40 | CallTarget | func:r2189_9 | +| ir.cpp:2189:33:2189:40 | ChiPartial | partial:m2189_12 | +| ir.cpp:2189:33:2189:40 | ChiTotal | total:m2189_4 | +| ir.cpp:2189:33:2189:40 | SideEffect | ~m2189_4 | +| ir.cpp:2189:33:2189:40 | StoreValue | r2189_15 | +| ir.cpp:2189:33:2189:40 | Unary | r2189_11 | +| ir.cpp:2190:5:2190:24 | Address | &:r2190_5 | +| ir.cpp:2190:5:2190:24 | Address | &:r2190_5 | +| ir.cpp:2190:5:2190:24 | Address | &:r2190_7 | +| ir.cpp:2190:5:2190:24 | Address | &:r2190_7 | +| ir.cpp:2190:5:2190:24 | ChiPartial | partial:m2190_3 | +| ir.cpp:2190:5:2190:24 | ChiTotal | total:m2190_2 | +| ir.cpp:2190:5:2190:24 | Load | m2190_6 | +| ir.cpp:2190:5:2190:24 | SideEffect | m2190_8 | +| ir.cpp:2190:5:2190:24 | SideEffect | ~m2190_16 | +| ir.cpp:2190:30:2190:37 | CallTarget | func:r2190_9 | +| ir.cpp:2190:30:2190:37 | ChiPartial | partial:m2190_15 | +| ir.cpp:2190:30:2190:37 | ChiTotal | total:m2190_4 | +| ir.cpp:2190:30:2190:37 | SideEffect | ~m2190_4 | +| ir.cpp:2190:37:2190:37 | Address | &:r2190_10 | +| ir.cpp:2190:37:2190:37 | Address | &:r2190_12 | +| ir.cpp:2190:37:2190:37 | Arg(0) | 0:r2190_13 | +| ir.cpp:2190:37:2190:37 | Load | m2190_6 | +| ir.cpp:2190:37:2190:37 | Load | ~m2190_8 | +| ir.cpp:2190:37:2190:37 | Unary | r2190_11 | +| ir.cpp:2192:10:2192:14 | Address | &:r2192_5 | +| ir.cpp:2192:10:2192:14 | Address | &:r2192_5 | +| ir.cpp:2192:10:2192:14 | Address | &:r2192_7 | +| ir.cpp:2192:10:2192:14 | Address | &:r2192_7 | +| ir.cpp:2192:10:2192:14 | ChiPartial | partial:m2192_3 | +| ir.cpp:2192:10:2192:14 | ChiTotal | total:m2192_2 | +| ir.cpp:2192:10:2192:14 | Load | m2192_6 | +| ir.cpp:2192:10:2192:14 | SideEffect | m2192_8 | +| ir.cpp:2192:10:2192:14 | SideEffect | ~m2192_19 | +| ir.cpp:2192:21:2192:21 | Address | &:r2192_9 | +| ir.cpp:2192:26:2192:27 | Address | &:r2192_17 | +| ir.cpp:2192:26:2192:31 | ChiPartial | partial:m2192_18 | +| ir.cpp:2192:26:2192:31 | ChiTotal | total:m2192_4 | +| ir.cpp:2192:27:2192:27 | Address | &:r2192_13 | +| ir.cpp:2192:27:2192:27 | Address | &:r2192_15 | +| ir.cpp:2192:27:2192:27 | Load | m2192_6 | +| ir.cpp:2192:27:2192:27 | Load | ~m2192_8 | +| ir.cpp:2192:27:2192:27 | Unary | r2192_14 | +| ir.cpp:2192:27:2192:27 | Unary | r2192_16 | +| ir.cpp:2192:31:2192:31 | Address | &:r2192_11 | +| ir.cpp:2192:31:2192:31 | Load | m2192_10 | +| ir.cpp:2192:31:2192:31 | StoreValue | r2192_12 | +| ir.cpp:2193:10:2193:14 | Address | &:r2193_5 | +| ir.cpp:2193:10:2193:14 | Address | &:r2193_5 | +| ir.cpp:2193:10:2193:14 | Address | &:r2193_7 | +| ir.cpp:2193:10:2193:14 | Address | &:r2193_7 | +| ir.cpp:2193:10:2193:14 | Address | &:r2193_17 | +| ir.cpp:2193:10:2193:14 | ChiPartial | partial:m2193_3 | +| ir.cpp:2193:10:2193:14 | ChiTotal | total:m2193_2 | +| ir.cpp:2193:10:2193:14 | Load | m2193_6 | +| ir.cpp:2193:10:2193:14 | Load | m2193_15 | +| ir.cpp:2193:10:2193:14 | SideEffect | m2193_3 | +| ir.cpp:2193:10:2193:14 | SideEffect | m2193_8 | +| ir.cpp:2193:20:2193:29 | Address | &:r2193_9 | +| ir.cpp:2193:27:2193:28 | Load | ~m2193_4 | +| ir.cpp:2193:27:2193:28 | StoreValue | r2193_14 | +| ir.cpp:2193:28:2193:28 | Address | &:r2193_10 | +| ir.cpp:2193:28:2193:28 | Address | &:r2193_12 | +| ir.cpp:2193:28:2193:28 | Address | &:r2193_13 | +| ir.cpp:2193:28:2193:28 | Load | m2193_6 | +| ir.cpp:2193:28:2193:28 | Load | ~m2193_8 | +| ir.cpp:2193:28:2193:28 | Unary | r2193_11 | +| ir.cpp:2196:16:2196:50 | Address | &:r2196_3 | +| ir.cpp:2196:16:2196:50 | SideEffect | ~m2196_6 | +| ir.cpp:2196:54:2196:57 | ChiPartial | partial:m2196_5 | +| ir.cpp:2196:54:2196:57 | ChiTotal | total:m2196_2 | +| ir.cpp:2196:54:2196:57 | StoreValue | r2196_4 | +| ir.cpp:2198:6:2198:35 | ChiPartial | partial:m2198_3 | +| ir.cpp:2198:6:2198:35 | ChiTotal | total:m2198_2 | +| ir.cpp:2198:6:2198:35 | Phi | from 13:~m2233_5 | +| ir.cpp:2198:6:2198:35 | Phi | from 19:~m2233_13 | +| ir.cpp:2198:6:2198:35 | Phi | from 23:~m2233_22 | +| ir.cpp:2198:6:2198:35 | SideEffect | ~m2198_9 | +| ir.cpp:2198:42:2198:42 | Address | &:r2198_5 | +| ir.cpp:2198:50:2198:50 | Address | &:r2198_7 | +| ir.cpp:2199:29:2199:29 | Address | &:r2199_1 | +| ir.cpp:2199:29:2199:29 | Address | &:r2199_1 | +| ir.cpp:2199:29:2199:29 | Arg(this) | this:r2199_1 | +| ir.cpp:2199:29:2199:29 | CallTarget | func:r2199_3 | +| ir.cpp:2199:29:2199:29 | ChiPartial | partial:m2199_5 | +| ir.cpp:2199:29:2199:29 | ChiPartial | partial:m2199_7 | +| ir.cpp:2199:29:2199:29 | ChiTotal | total:m2198_4 | +| ir.cpp:2199:29:2199:29 | ChiTotal | total:m2199_2 | +| ir.cpp:2199:29:2199:29 | SideEffect | ~m2198_4 | +| ir.cpp:2199:32:2199:32 | Address | &:r2199_9 | +| ir.cpp:2199:32:2199:32 | Condition | r2199_10 | +| ir.cpp:2199:32:2199:32 | Load | m2198_6 | +| ir.cpp:2200:9:2200:9 | Address | &:r2200_1 | +| ir.cpp:2200:9:2200:9 | Address | &:r2200_1 | +| ir.cpp:2200:9:2200:9 | Arg(this) | this:r2200_1 | +| ir.cpp:2200:9:2200:9 | ChiPartial | partial:m2200_8 | +| ir.cpp:2200:9:2200:9 | ChiTotal | total:m2199_8 | +| ir.cpp:2200:9:2200:9 | SideEffect | m2199_8 | +| ir.cpp:2200:11:2200:15 | CallTarget | func:r2200_2 | +| ir.cpp:2200:11:2200:15 | ChiPartial | partial:m2200_5 | +| ir.cpp:2200:11:2200:15 | ChiTotal | total:m2199_6 | +| ir.cpp:2200:11:2200:15 | SideEffect | ~m2199_6 | +| ir.cpp:2200:17:2200:19 | Arg(0) | 0:r2200_3 | +| ir.cpp:2200:21:2200:21 | Address | &:r2200_10 | +| ir.cpp:2200:21:2200:21 | Address | &:r2200_10 | +| ir.cpp:2200:21:2200:21 | Arg(this) | this:r2200_10 | +| ir.cpp:2200:21:2200:21 | CallTarget | func:r2200_11 | +| ir.cpp:2200:21:2200:21 | ChiPartial | partial:m2200_13 | +| ir.cpp:2200:21:2200:21 | ChiPartial | partial:m2200_16 | +| ir.cpp:2200:21:2200:21 | ChiTotal | total:m2200_6 | +| ir.cpp:2200:21:2200:21 | ChiTotal | total:m2200_9 | +| ir.cpp:2200:21:2200:21 | SideEffect | m2200_9 | +| ir.cpp:2200:21:2200:21 | SideEffect | ~m2200_6 | +| ir.cpp:2202:39:2202:39 | Address | &:r2202_2 | +| ir.cpp:2202:39:2202:39 | Address | &:r2202_2 | +| ir.cpp:2202:39:2202:39 | Arg(this) | this:r2202_2 | +| ir.cpp:2202:39:2202:39 | CallTarget | func:r2202_4 | +| ir.cpp:2202:39:2202:39 | ChiPartial | partial:m2202_6 | +| ir.cpp:2202:39:2202:39 | ChiPartial | partial:m2202_8 | +| ir.cpp:2202:39:2202:39 | ChiTotal | total:m2202_1 | +| ir.cpp:2202:39:2202:39 | ChiTotal | total:m2202_3 | +| ir.cpp:2202:39:2202:39 | Phi | from 0:~m2199_6 | +| ir.cpp:2202:39:2202:39 | Phi | from 2:~m2200_14 | +| ir.cpp:2202:39:2202:39 | SideEffect | ~m2202_1 | +| ir.cpp:2202:42:2202:76 | Condition | r2202_10 | +| ir.cpp:2203:9:2203:9 | Address | &:r2203_1 | +| ir.cpp:2203:9:2203:9 | Address | &:r2203_1 | +| ir.cpp:2203:9:2203:9 | Arg(this) | this:r2203_1 | +| ir.cpp:2203:9:2203:9 | ChiPartial | partial:m2203_8 | +| ir.cpp:2203:9:2203:9 | ChiTotal | total:m2202_9 | +| ir.cpp:2203:9:2203:9 | SideEffect | m2202_9 | +| ir.cpp:2203:11:2203:15 | CallTarget | func:r2203_2 | +| ir.cpp:2203:11:2203:15 | ChiPartial | partial:m2203_5 | +| ir.cpp:2203:11:2203:15 | ChiTotal | total:m2202_7 | +| ir.cpp:2203:11:2203:15 | SideEffect | ~m2202_7 | +| ir.cpp:2203:17:2203:19 | Arg(0) | 0:r2203_3 | +| ir.cpp:2205:32:2205:32 | Address | &:r2205_1 | +| ir.cpp:2205:32:2205:32 | Address | &:r2205_1 | +| ir.cpp:2205:32:2205:32 | Arg(this) | this:r2205_1 | +| ir.cpp:2205:32:2205:32 | CallTarget | func:r2205_3 | +| ir.cpp:2205:32:2205:32 | ChiPartial | partial:m2205_5 | +| ir.cpp:2205:32:2205:32 | ChiPartial | partial:m2205_7 | +| ir.cpp:2205:32:2205:32 | ChiTotal | total:m2203_6 | +| ir.cpp:2205:32:2205:32 | ChiTotal | total:m2205_2 | +| ir.cpp:2205:32:2205:32 | SideEffect | ~m2203_6 | +| ir.cpp:2205:35:2205:35 | Address | &:r2205_9 | +| ir.cpp:2205:35:2205:35 | Condition | r2205_11 | +| ir.cpp:2205:35:2205:35 | Load | m2198_8 | +| ir.cpp:2205:35:2205:35 | Unary | r2205_10 | +| ir.cpp:2207:11:2207:11 | Address | &:r2207_1 | +| ir.cpp:2207:11:2207:11 | Address | &:r2207_1 | +| ir.cpp:2207:11:2207:11 | Arg(this) | this:r2207_1 | +| ir.cpp:2207:11:2207:11 | ChiPartial | partial:m2207_8 | +| ir.cpp:2207:11:2207:11 | ChiTotal | total:m2205_8 | +| ir.cpp:2207:11:2207:11 | SideEffect | m2205_8 | +| ir.cpp:2207:13:2207:17 | CallTarget | func:r2207_2 | +| ir.cpp:2207:13:2207:17 | ChiPartial | partial:m2207_5 | +| ir.cpp:2207:13:2207:17 | ChiTotal | total:m2205_6 | +| ir.cpp:2207:13:2207:17 | SideEffect | ~m2205_6 | +| ir.cpp:2207:19:2207:21 | Arg(0) | 0:r2207_3 | +| ir.cpp:2210:11:2210:11 | Address | &:r2210_1 | +| ir.cpp:2210:11:2210:11 | Address | &:r2210_1 | +| ir.cpp:2210:11:2210:11 | Arg(this) | this:r2210_1 | +| ir.cpp:2210:11:2210:11 | ChiPartial | partial:m2210_8 | +| ir.cpp:2210:11:2210:11 | ChiTotal | total:m2205_8 | +| ir.cpp:2210:11:2210:11 | SideEffect | m2205_8 | +| ir.cpp:2210:13:2210:17 | CallTarget | func:r2210_2 | +| ir.cpp:2210:13:2210:17 | ChiPartial | partial:m2210_5 | +| ir.cpp:2210:13:2210:17 | ChiTotal | total:m2205_6 | +| ir.cpp:2210:13:2210:17 | SideEffect | ~m2205_6 | +| ir.cpp:2210:19:2210:21 | Arg(0) | 0:r2210_3 | +| ir.cpp:2212:5:2212:5 | Phi | from 5:~m2207_6 | +| ir.cpp:2212:5:2212:5 | Phi | from 6:~m2210_6 | +| ir.cpp:2214:25:2214:25 | Address | &:r2214_1 | +| ir.cpp:2214:25:2214:25 | Address | &:r2214_1 | +| ir.cpp:2214:25:2214:25 | Arg(this) | this:r2214_1 | +| ir.cpp:2214:25:2214:25 | CallTarget | func:r2214_3 | +| ir.cpp:2214:25:2214:25 | ChiPartial | partial:m2214_5 | +| ir.cpp:2214:25:2214:25 | ChiPartial | partial:m2214_7 | +| ir.cpp:2214:25:2214:25 | ChiTotal | total:m2212_1 | +| ir.cpp:2214:25:2214:25 | ChiTotal | total:m2214_2 | +| ir.cpp:2214:25:2214:25 | SideEffect | ~m2212_1 | | ir.cpp:2215:5:2215:5 | Address | &:r2215_14 | | ir.cpp:2215:5:2215:5 | Address | &:r2215_18 | | ir.cpp:2215:5:2215:5 | Address | &:r2215_24 | @@ -11363,15 +11221,15 @@ | ir.cpp:2215:45:2215:45 | Address | &:r2215_4 | | ir.cpp:2215:45:2215:45 | Address | &:r2215_5 | | ir.cpp:2215:45:2215:45 | Arg(0) | 0:r2215_8 | -| ir.cpp:2215:45:2215:45 | Load | m2200_8 | +| ir.cpp:2215:45:2215:45 | Load | m2214_8 | | ir.cpp:2215:45:2215:45 | Load | m2215_7 | | ir.cpp:2215:45:2215:45 | StoreValue | r2215_6 | | ir.cpp:2215:45:2215:46 | CallTarget | func:r2215_3 | | ir.cpp:2215:45:2215:46 | ChiPartial | partial:m2215_10 | | ir.cpp:2215:45:2215:46 | ChiPartial | partial:m2215_12 | -| ir.cpp:2215:45:2215:46 | ChiTotal | total:m2210_39 | +| ir.cpp:2215:45:2215:46 | ChiTotal | total:m2214_6 | | ir.cpp:2215:45:2215:46 | ChiTotal | total:m2215_2 | -| ir.cpp:2215:45:2215:46 | SideEffect | ~m2210_39 | +| ir.cpp:2215:45:2215:46 | SideEffect | ~m2214_6 | | ir.cpp:2215:69:2215:69 | Address | &:r2215_45 | | ir.cpp:2215:69:2215:69 | Address | &:r2215_53 | | ir.cpp:2215:69:2215:69 | Address | &:r2215_53 | @@ -11379,20 +11237,20 @@ | ir.cpp:2215:69:2215:69 | CallTarget | func:r2215_54 | | ir.cpp:2215:69:2215:69 | ChiPartial | partial:m2215_56 | | ir.cpp:2215:69:2215:69 | ChiPartial | partial:m2215_59 | -| ir.cpp:2215:69:2215:69 | ChiTotal | total:m2215_52 | -| ir.cpp:2215:69:2215:69 | ChiTotal | total:m2218_13 | -| ir.cpp:2215:69:2215:69 | SideEffect | m2215_52 | -| ir.cpp:2215:69:2215:69 | SideEffect | ~m2218_13 | +| ir.cpp:2215:69:2215:69 | ChiTotal | total:m2216_6 | +| ir.cpp:2215:69:2215:69 | ChiTotal | total:m2216_9 | +| ir.cpp:2215:69:2215:69 | SideEffect | m2216_9 | +| ir.cpp:2215:69:2215:69 | SideEffect | ~m2216_6 | | ir.cpp:2215:73:2215:73 | Address | &:r2215_19 | | ir.cpp:2215:73:2215:73 | Address | &:r2215_25 | | ir.cpp:2215:73:2215:73 | Address | &:r2215_48 | | ir.cpp:2215:73:2215:73 | Address | &:r2215_61 | | ir.cpp:2215:73:2215:73 | Address | &:r2215_61 | -| ir.cpp:2215:73:2215:73 | Arg(this) | this:r0_50 | -| ir.cpp:2215:73:2215:73 | Arg(this) | this:r0_53 | -| ir.cpp:2215:73:2215:73 | Arg(this) | this:r0_55 | -| ir.cpp:2215:73:2215:73 | Arg(this) | this:r0_56 | -| ir.cpp:2215:73:2215:73 | Arg(this) | this:r0_63 | +| ir.cpp:2215:73:2215:73 | Arg(this) | this:r0_2 | +| ir.cpp:2215:73:2215:73 | Arg(this) | this:r0_5 | +| ir.cpp:2215:73:2215:73 | Arg(this) | this:r0_7 | +| ir.cpp:2215:73:2215:73 | Arg(this) | this:r0_8 | +| ir.cpp:2215:73:2215:73 | Arg(this) | this:r0_15 | | ir.cpp:2215:73:2215:73 | Arg(this) | this:r2215_61 | | ir.cpp:2215:73:2215:73 | CallTarget | func:r2215_21 | | ir.cpp:2215:73:2215:73 | CallTarget | func:r2215_27 | @@ -11406,7 +11264,7 @@ | ir.cpp:2215:73:2215:73 | ChiPartial | partial:m2215_49 | | ir.cpp:2215:73:2215:73 | ChiPartial | partial:m2215_64 | | ir.cpp:2215:73:2215:73 | ChiPartial | partial:m2215_67 | -| ir.cpp:2215:73:2215:73 | ChiTotal | total:m0_57 | +| ir.cpp:2215:73:2215:73 | ChiTotal | total:m0_9 | | ir.cpp:2215:73:2215:73 | ChiTotal | total:m2215_30 | | ir.cpp:2215:73:2215:73 | ChiTotal | total:m2215_31 | | ir.cpp:2215:73:2215:73 | ChiTotal | total:m2215_38 | @@ -11415,10 +11273,10 @@ | ir.cpp:2215:73:2215:73 | Condition | r2215_41 | | ir.cpp:2215:73:2215:73 | Load | m2215_17 | | ir.cpp:2215:73:2215:73 | Load | m2215_17 | -| ir.cpp:2215:73:2215:73 | Phi | from 20:m2215_23 | -| ir.cpp:2215:73:2215:73 | Phi | from 20:~m2215_11 | -| ir.cpp:2215:73:2215:73 | Phi | from 22:m2215_68 | -| ir.cpp:2215:73:2215:73 | Phi | from 22:~m2215_65 | +| ir.cpp:2215:73:2215:73 | Phi | from 7:m2215_23 | +| ir.cpp:2215:73:2215:73 | Phi | from 7:~m2215_11 | +| ir.cpp:2215:73:2215:73 | Phi | from 9:m2215_68 | +| ir.cpp:2215:73:2215:73 | Phi | from 9:~m2215_65 | | ir.cpp:2215:73:2215:73 | SideEffect | m2215_30 | | ir.cpp:2215:73:2215:73 | SideEffect | ~m2215_31 | | ir.cpp:2215:73:2215:73 | SideEffect | ~m2215_38 | @@ -11436,688 +11294,749 @@ | ir.cpp:2215:73:2215:74 | Unary | r2215_15 | | ir.cpp:2215:73:2215:75 | Load | ~m2215_50 | | ir.cpp:2215:73:2215:75 | StoreValue | r2215_51 | -| ir.cpp:2216:27:2216:28 | Address | &:r2216_1 | -| ir.cpp:2216:27:2216:28 | Address | &:r2216_1 | -| ir.cpp:2216:27:2216:28 | Arg(this) | this:r2216_1 | -| ir.cpp:2216:27:2216:28 | CallTarget | func:r2216_3 | -| ir.cpp:2216:27:2216:28 | ChiPartial | partial:m2216_5 | -| ir.cpp:2216:27:2216:28 | ChiPartial | partial:m2216_7 | -| ir.cpp:2216:27:2216:28 | ChiTotal | total:m2215_50 | -| ir.cpp:2216:27:2216:28 | ChiTotal | total:m2216_2 | -| ir.cpp:2216:27:2216:28 | SideEffect | ~m2215_50 | -| ir.cpp:2217:27:2217:28 | Address | &:r2217_1 | -| ir.cpp:2217:27:2217:28 | Address | &:r2217_1 | -| ir.cpp:2217:27:2217:28 | Arg(this) | this:r2217_1 | -| ir.cpp:2217:27:2217:28 | CallTarget | func:r2217_3 | -| ir.cpp:2217:27:2217:28 | ChiPartial | partial:m2217_5 | -| ir.cpp:2217:27:2217:28 | ChiPartial | partial:m2217_7 | -| ir.cpp:2217:27:2217:28 | ChiTotal | total:m2216_6 | -| ir.cpp:2217:27:2217:28 | ChiTotal | total:m2217_2 | -| ir.cpp:2217:27:2217:28 | SideEffect | ~m2216_6 | -| ir.cpp:2218:5:2218:5 | Address | &:r2218_1 | -| ir.cpp:2218:5:2218:5 | Address | &:r2218_1 | -| ir.cpp:2218:5:2218:5 | Address | &:r2218_9 | -| ir.cpp:2218:5:2218:5 | Address | &:r2218_9 | -| ir.cpp:2218:5:2218:5 | Arg(this) | this:r2218_1 | -| ir.cpp:2218:5:2218:5 | Arg(this) | this:r2218_9 | -| ir.cpp:2218:5:2218:5 | CallTarget | func:r2218_2 | -| ir.cpp:2218:5:2218:5 | CallTarget | func:r2218_10 | -| ir.cpp:2218:5:2218:5 | ChiPartial | partial:m2218_4 | -| ir.cpp:2218:5:2218:5 | ChiPartial | partial:m2218_7 | -| ir.cpp:2218:5:2218:5 | ChiPartial | partial:m2218_12 | -| ir.cpp:2218:5:2218:5 | ChiPartial | partial:m2218_15 | -| ir.cpp:2218:5:2218:5 | ChiTotal | total:m2216_8 | -| ir.cpp:2218:5:2218:5 | ChiTotal | total:m2217_6 | -| ir.cpp:2218:5:2218:5 | ChiTotal | total:m2217_8 | -| ir.cpp:2218:5:2218:5 | ChiTotal | total:m2218_5 | -| ir.cpp:2218:5:2218:5 | SideEffect | m2216_8 | -| ir.cpp:2218:5:2218:5 | SideEffect | m2217_8 | -| ir.cpp:2218:5:2218:5 | SideEffect | ~m2217_6 | -| ir.cpp:2218:5:2218:5 | SideEffect | ~m2218_5 | -| ir.cpp:2219:1:2219:1 | Address | &:r2219_1 | -| ir.cpp:2219:1:2219:1 | Address | &:r2219_1 | -| ir.cpp:2219:1:2219:1 | Address | &:r2219_9 | -| ir.cpp:2219:1:2219:1 | Address | &:r2219_9 | -| ir.cpp:2219:1:2219:1 | Address | &:r2219_18 | -| ir.cpp:2219:1:2219:1 | Address | &:r2219_18 | -| ir.cpp:2219:1:2219:1 | Arg(this) | this:r2219_1 | -| ir.cpp:2219:1:2219:1 | Arg(this) | this:r2219_9 | -| ir.cpp:2219:1:2219:1 | Arg(this) | this:r2219_18 | -| ir.cpp:2219:1:2219:1 | CallTarget | func:r2219_2 | -| ir.cpp:2219:1:2219:1 | CallTarget | func:r2219_10 | -| ir.cpp:2219:1:2219:1 | CallTarget | func:r2219_19 | -| ir.cpp:2219:1:2219:1 | ChiPartial | partial:m2219_4 | -| ir.cpp:2219:1:2219:1 | ChiPartial | partial:m2219_7 | -| ir.cpp:2219:1:2219:1 | ChiPartial | partial:m2219_12 | -| ir.cpp:2219:1:2219:1 | ChiPartial | partial:m2219_15 | -| ir.cpp:2219:1:2219:1 | ChiPartial | partial:m2219_21 | -| ir.cpp:2219:1:2219:1 | ChiPartial | partial:m2219_24 | -| ir.cpp:2219:1:2219:1 | ChiTotal | total:m2200_8 | -| ir.cpp:2219:1:2219:1 | ChiTotal | total:m2200_8 | -| ir.cpp:2219:1:2219:1 | ChiTotal | total:m2200_8 | -| ir.cpp:2219:1:2219:1 | ChiTotal | total:m2204_65 | -| ir.cpp:2219:1:2219:1 | ChiTotal | total:m2210_62 | -| ir.cpp:2219:1:2219:1 | ChiTotal | total:m2215_43 | -| ir.cpp:2219:1:2219:1 | SideEffect | m2200_8 | -| ir.cpp:2219:1:2219:1 | SideEffect | m2200_8 | -| ir.cpp:2219:1:2219:1 | SideEffect | m2200_8 | -| ir.cpp:2219:1:2219:1 | SideEffect | ~m2204_65 | -| ir.cpp:2219:1:2219:1 | SideEffect | ~m2210_62 | -| ir.cpp:2219:1:2219:1 | SideEffect | ~m2215_43 | -| ir.cpp:2221:6:2221:38 | ChiPartial | partial:m2221_3 | -| ir.cpp:2221:6:2221:38 | ChiTotal | total:m2221_2 | -| ir.cpp:2221:6:2221:38 | SideEffect | ~m2224_7 | -| ir.cpp:2222:25:2222:25 | Address | &:r2222_1 | -| ir.cpp:2222:25:2222:25 | Address | &:r2222_1 | -| ir.cpp:2222:25:2222:25 | Arg(this) | this:r2222_1 | -| ir.cpp:2222:25:2222:25 | CallTarget | func:r2222_3 | -| ir.cpp:2222:25:2222:25 | ChiPartial | partial:m2222_5 | -| ir.cpp:2222:25:2222:25 | ChiPartial | partial:m2222_7 | -| ir.cpp:2222:25:2222:25 | ChiTotal | total:m2221_4 | -| ir.cpp:2222:25:2222:25 | ChiTotal | total:m2222_2 | -| ir.cpp:2222:25:2222:25 | SideEffect | ~m2221_4 | -| ir.cpp:2223:32:2223:32 | Address | &:r2223_1 | -| ir.cpp:2223:32:2223:32 | Address | &:r2223_1 | -| ir.cpp:2223:32:2223:32 | Address | &:r2223_4 | -| ir.cpp:2223:32:2223:32 | Arg(this) | this:r2223_4 | -| ir.cpp:2223:32:2223:32 | ChiPartial | partial:m2223_6 | -| ir.cpp:2223:32:2223:32 | ChiTotal | total:m0_6 | -| ir.cpp:2223:32:2223:32 | Condition | r2223_2 | -| ir.cpp:2223:32:2223:32 | Load | ~m2222_6 | -| ir.cpp:2223:32:2223:32 | StoreValue | r2223_5 | -| ir.cpp:2224:1:2224:1 | Address | &:r2224_3 | -| ir.cpp:2224:1:2224:1 | Address | &:r2224_3 | -| ir.cpp:2224:1:2224:1 | Arg(this) | this:r2224_3 | -| ir.cpp:2224:1:2224:1 | CallTarget | func:r2224_4 | -| ir.cpp:2224:1:2224:1 | ChiPartial | partial:m2224_6 | -| ir.cpp:2224:1:2224:1 | ChiPartial | partial:m2224_9 | -| ir.cpp:2224:1:2224:1 | ChiTotal | total:m2222_8 | -| ir.cpp:2224:1:2224:1 | ChiTotal | total:m2224_1 | -| ir.cpp:2224:1:2224:1 | Phi | from 0:~m2222_6 | -| ir.cpp:2224:1:2224:1 | Phi | from 1:~m2223_7 | -| ir.cpp:2224:1:2224:1 | SideEffect | m2222_8 | -| ir.cpp:2224:1:2224:1 | SideEffect | ~m2224_1 | -| ir.cpp:2226:6:2226:38 | ChiPartial | partial:m2226_3 | -| ir.cpp:2226:6:2226:38 | ChiTotal | total:m2226_2 | -| ir.cpp:2226:6:2226:38 | SideEffect | ~m2229_6 | -| ir.cpp:2227:32:2227:32 | Address | &:r2227_1 | -| ir.cpp:2227:32:2227:32 | Address | &:r2227_1 | -| ir.cpp:2227:32:2227:32 | Address | &:r2227_4 | -| ir.cpp:2227:32:2227:32 | Arg(this) | this:r2227_4 | -| ir.cpp:2227:32:2227:32 | ChiPartial | partial:m2227_6 | -| ir.cpp:2227:32:2227:32 | ChiTotal | total:m0_6 | -| ir.cpp:2227:32:2227:32 | Condition | r2227_2 | -| ir.cpp:2227:32:2227:32 | Load | ~m2226_3 | -| ir.cpp:2227:32:2227:32 | StoreValue | r2227_5 | -| ir.cpp:2228:25:2228:25 | Address | &:r2228_2 | -| ir.cpp:2228:25:2228:25 | Address | &:r2228_2 | -| ir.cpp:2228:25:2228:25 | Arg(this) | this:r2228_2 | -| ir.cpp:2228:25:2228:25 | CallTarget | func:r2228_4 | -| ir.cpp:2228:25:2228:25 | ChiPartial | partial:m2228_6 | -| ir.cpp:2228:25:2228:25 | ChiPartial | partial:m2228_8 | -| ir.cpp:2228:25:2228:25 | ChiTotal | total:m2228_1 | -| ir.cpp:2228:25:2228:25 | ChiTotal | total:m2228_3 | -| ir.cpp:2228:25:2228:25 | Phi | from 0:~m2226_4 | -| ir.cpp:2228:25:2228:25 | Phi | from 1:~m2227_7 | -| ir.cpp:2228:25:2228:25 | SideEffect | ~m2228_1 | -| ir.cpp:2229:1:2229:1 | Address | &:r2229_2 | -| ir.cpp:2229:1:2229:1 | Address | &:r2229_2 | -| ir.cpp:2229:1:2229:1 | Arg(this) | this:r2229_2 | -| ir.cpp:2229:1:2229:1 | CallTarget | func:r2229_3 | -| ir.cpp:2229:1:2229:1 | ChiPartial | partial:m2229_5 | -| ir.cpp:2229:1:2229:1 | ChiPartial | partial:m2229_8 | -| ir.cpp:2229:1:2229:1 | ChiTotal | total:m2228_7 | -| ir.cpp:2229:1:2229:1 | ChiTotal | total:m2228_9 | -| ir.cpp:2229:1:2229:1 | SideEffect | m2228_9 | -| ir.cpp:2229:1:2229:1 | SideEffect | ~m2228_7 | -| ir.cpp:2231:6:2231:38 | ChiPartial | partial:m2231_3 | -| ir.cpp:2231:6:2231:38 | ChiTotal | total:m2231_2 | -| ir.cpp:2231:6:2231:38 | SideEffect | ~m2235_15 | -| ir.cpp:2232:25:2232:25 | Address | &:r2232_1 | -| ir.cpp:2232:25:2232:25 | Address | &:r2232_1 | -| ir.cpp:2232:25:2232:25 | Arg(this) | this:r2232_1 | -| ir.cpp:2232:25:2232:25 | CallTarget | func:r2232_3 | -| ir.cpp:2232:25:2232:25 | ChiPartial | partial:m2232_5 | -| ir.cpp:2232:25:2232:25 | ChiPartial | partial:m2232_7 | -| ir.cpp:2232:25:2232:25 | ChiTotal | total:m2231_4 | -| ir.cpp:2232:25:2232:25 | ChiTotal | total:m2232_2 | -| ir.cpp:2232:25:2232:25 | SideEffect | ~m2231_4 | -| ir.cpp:2233:25:2233:25 | Address | &:r2233_1 | -| ir.cpp:2233:25:2233:25 | Address | &:r2233_1 | -| ir.cpp:2233:25:2233:25 | Arg(this) | this:r2233_1 | -| ir.cpp:2233:25:2233:25 | CallTarget | func:r2233_3 | -| ir.cpp:2233:25:2233:25 | ChiPartial | partial:m2233_5 | -| ir.cpp:2233:25:2233:25 | ChiPartial | partial:m2233_7 | -| ir.cpp:2233:25:2233:25 | ChiTotal | total:m2232_6 | -| ir.cpp:2233:25:2233:25 | ChiTotal | total:m2233_2 | -| ir.cpp:2233:25:2233:25 | SideEffect | ~m2232_6 | -| ir.cpp:2234:32:2234:32 | Address | &:r2234_1 | -| ir.cpp:2234:32:2234:32 | Address | &:r2234_1 | -| ir.cpp:2234:32:2234:32 | Address | &:r2234_4 | -| ir.cpp:2234:32:2234:32 | Arg(this) | this:r2234_4 | -| ir.cpp:2234:32:2234:32 | ChiPartial | partial:m2234_6 | -| ir.cpp:2234:32:2234:32 | ChiTotal | total:m0_6 | -| ir.cpp:2234:32:2234:32 | Condition | r2234_2 | -| ir.cpp:2234:32:2234:32 | Load | ~m2233_6 | -| ir.cpp:2234:32:2234:32 | StoreValue | r2234_5 | -| ir.cpp:2235:1:2235:1 | Address | &:r2235_3 | -| ir.cpp:2235:1:2235:1 | Address | &:r2235_3 | -| ir.cpp:2235:1:2235:1 | Address | &:r2235_11 | -| ir.cpp:2235:1:2235:1 | Address | &:r2235_11 | -| ir.cpp:2235:1:2235:1 | Arg(this) | this:r2235_3 | -| ir.cpp:2235:1:2235:1 | Arg(this) | this:r2235_11 | -| ir.cpp:2235:1:2235:1 | CallTarget | func:r2235_4 | -| ir.cpp:2235:1:2235:1 | CallTarget | func:r2235_12 | -| ir.cpp:2235:1:2235:1 | ChiPartial | partial:m2235_6 | -| ir.cpp:2235:1:2235:1 | ChiPartial | partial:m2235_9 | -| ir.cpp:2235:1:2235:1 | ChiPartial | partial:m2235_14 | -| ir.cpp:2235:1:2235:1 | ChiPartial | partial:m2235_17 | -| ir.cpp:2235:1:2235:1 | ChiTotal | total:m2232_8 | -| ir.cpp:2235:1:2235:1 | ChiTotal | total:m2233_8 | -| ir.cpp:2235:1:2235:1 | ChiTotal | total:m2235_1 | -| ir.cpp:2235:1:2235:1 | ChiTotal | total:m2235_7 | -| ir.cpp:2235:1:2235:1 | Phi | from 0:~m2233_6 | -| ir.cpp:2235:1:2235:1 | Phi | from 1:~m2234_7 | -| ir.cpp:2235:1:2235:1 | SideEffect | m2232_8 | -| ir.cpp:2235:1:2235:1 | SideEffect | m2233_8 | -| ir.cpp:2235:1:2235:1 | SideEffect | ~m2235_1 | -| ir.cpp:2235:1:2235:1 | SideEffect | ~m2235_7 | -| ir.cpp:2237:28:2237:55 | Address | &:r2237_3 | -| ir.cpp:2237:28:2237:55 | Arg(this) | this:r2237_3 | -| ir.cpp:2237:28:2237:55 | CallTarget | func:r2237_4 | -| ir.cpp:2237:28:2237:55 | ChiPartial | partial:m2237_6 | -| ir.cpp:2237:28:2237:55 | ChiPartial | partial:m2237_8 | -| ir.cpp:2237:28:2237:55 | ChiTotal | total:m2237_2 | -| ir.cpp:2237:28:2237:55 | ChiTotal | total:m2237_7 | -| ir.cpp:2237:28:2237:55 | SideEffect | ~m2237_2 | -| ir.cpp:2237:28:2237:55 | SideEffect | ~m2237_9 | -| ir.cpp:2241:8:2241:8 | Address | &:r2241_16 | -| ir.cpp:2241:8:2241:8 | Address | &:r2241_16 | -| ir.cpp:2241:8:2241:8 | ChiPartial | partial:m2241_3 | -| ir.cpp:2241:8:2241:8 | ChiPartial | partial:m2241_3 | -| ir.cpp:2241:8:2241:8 | ChiTotal | total:m2241_2 | -| ir.cpp:2241:8:2241:8 | ChiTotal | total:m2241_2 | -| ir.cpp:2241:8:2241:8 | Load | m2241_14 | -| ir.cpp:2241:8:2241:8 | Load | m2241_14 | -| ir.cpp:2241:8:2241:8 | SideEffect | m2241_3 | -| ir.cpp:2241:8:2241:8 | SideEffect | m2241_3 | -| ir.cpp:2241:15:2241:15 | Address | &:r2241_5 | -| ir.cpp:2241:15:2241:15 | Address | &:r2241_5 | -| ir.cpp:2241:15:2241:15 | Address | &:r2241_5 | -| ir.cpp:2241:15:2241:15 | Address | &:r2241_5 | -| ir.cpp:2241:15:2241:15 | Address | &:r2241_7 | -| ir.cpp:2241:15:2241:15 | Address | &:r2241_7 | -| ir.cpp:2241:15:2241:15 | Address | &:r2241_7 | -| ir.cpp:2241:15:2241:15 | Address | &:r2241_7 | -| ir.cpp:2241:15:2241:15 | Load | m2241_6 | -| ir.cpp:2241:15:2241:15 | Load | m2241_6 | -| ir.cpp:2241:15:2241:15 | SideEffect | m2241_8 | -| ir.cpp:2241:15:2241:15 | SideEffect | m2241_8 | -| ir.cpp:2241:20:2241:28 | Address | &:r2241_9 | -| ir.cpp:2241:20:2241:28 | Address | &:r2241_9 | -| ir.cpp:2241:27:2241:27 | Address | &:r2241_10 | -| ir.cpp:2241:27:2241:27 | Address | &:r2241_10 | -| ir.cpp:2241:27:2241:27 | Load | m2241_6 | -| ir.cpp:2241:27:2241:27 | Load | m2241_6 | -| ir.cpp:2241:27:2241:27 | StoreValue | r2241_13 | -| ir.cpp:2241:27:2241:27 | StoreValue | r2241_13 | -| ir.cpp:2241:27:2241:27 | Unary | r2241_11 | -| ir.cpp:2241:27:2241:27 | Unary | r2241_11 | -| ir.cpp:2241:27:2241:27 | Unary | r2241_12 | -| ir.cpp:2241:27:2241:27 | Unary | r2241_12 | -| ir.cpp:2244:10:2244:10 | ChiPartial | partial:m2244_3 | -| ir.cpp:2244:10:2244:10 | ChiPartial | partial:m2244_3 | -| ir.cpp:2244:10:2244:10 | ChiTotal | total:m2244_2 | -| ir.cpp:2244:10:2244:10 | ChiTotal | total:m2244_2 | -| ir.cpp:2244:10:2244:10 | SideEffect | ~m2245_8 | -| ir.cpp:2244:10:2244:10 | SideEffect | ~m2245_16 | -| ir.cpp:2244:29:2244:29 | Address | &:r2244_5 | -| ir.cpp:2244:29:2244:29 | Address | &:r2244_5 | -| ir.cpp:2244:29:2244:29 | Address | &:r2244_5 | -| ir.cpp:2244:29:2244:29 | Address | &:r2244_5 | -| ir.cpp:2244:29:2244:29 | Address | &:r2244_7 | -| ir.cpp:2244:29:2244:29 | Address | &:r2244_7 | -| ir.cpp:2244:29:2244:29 | Address | &:r2244_7 | -| ir.cpp:2244:29:2244:29 | Address | &:r2244_7 | -| ir.cpp:2244:29:2244:29 | Load | m2244_6 | -| ir.cpp:2244:29:2244:29 | Load | m2244_6 | -| ir.cpp:2244:29:2244:29 | SideEffect | m2245_11 | -| ir.cpp:2244:29:2244:29 | SideEffect | m2245_19 | -| ir.cpp:2245:9:2245:11 | CallTarget | func:r2245_1 | -| ir.cpp:2245:9:2245:11 | CallTarget | func:r2245_1 | -| ir.cpp:2245:9:2245:11 | ChiPartial | partial:m2245_7 | -| ir.cpp:2245:9:2245:11 | ChiPartial | partial:m2245_7 | -| ir.cpp:2245:9:2245:11 | ChiTotal | total:m2244_4 | -| ir.cpp:2245:9:2245:11 | ChiTotal | total:m2244_4 | -| ir.cpp:2245:9:2245:11 | SideEffect | ~m2244_4 | -| ir.cpp:2245:9:2245:11 | SideEffect | ~m2244_4 | -| ir.cpp:2245:9:2245:11 | Unary | r2245_6 | -| ir.cpp:2245:9:2245:11 | Unary | r2245_6 | -| ir.cpp:2245:12:2245:15 | Address | &:r2245_12 | -| ir.cpp:2245:12:2245:15 | Address | &:r2245_12 | -| ir.cpp:2245:12:2245:15 | ChiPartial | partial:m2245_18 | -| ir.cpp:2245:12:2245:15 | ChiTotal | total:m2245_11 | -| ir.cpp:2245:12:2245:15 | SideEffect | ~m2245_11 | -| ir.cpp:2245:13:2245:13 | Address | &:r2245_2 | -| ir.cpp:2245:13:2245:13 | Address | &:r2245_2 | -| ir.cpp:2245:13:2245:13 | Address | &:r2245_5 | -| ir.cpp:2245:13:2245:13 | Address | &:r2245_5 | -| ir.cpp:2245:13:2245:13 | Address | &:r2245_5 | -| ir.cpp:2245:13:2245:13 | Address | &:r2245_5 | -| ir.cpp:2245:13:2245:13 | Arg(0) | 0:r2245_5 | -| ir.cpp:2245:13:2245:13 | Arg(0) | 0:r2245_5 | -| ir.cpp:2245:13:2245:13 | ChiPartial | partial:m2245_10 | -| ir.cpp:2245:13:2245:13 | ChiPartial | partial:m2245_10 | -| ir.cpp:2245:13:2245:13 | ChiTotal | total:m2244_8 | -| ir.cpp:2245:13:2245:13 | ChiTotal | total:m2244_8 | -| ir.cpp:2245:13:2245:13 | Load | m2244_6 | -| ir.cpp:2245:13:2245:13 | Load | m2244_6 | -| ir.cpp:2245:13:2245:13 | SideEffect | ~m2244_8 | -| ir.cpp:2245:13:2245:13 | SideEffect | ~m2244_8 | -| ir.cpp:2245:13:2245:13 | Unary | r2245_3 | -| ir.cpp:2245:13:2245:13 | Unary | r2245_3 | -| ir.cpp:2245:13:2245:13 | Unary | r2245_4 | -| ir.cpp:2245:13:2245:13 | Unary | r2245_4 | -| ir.cpp:2245:16:2245:17 | CallTarget | func:r2245_13 | -| ir.cpp:2245:16:2245:17 | ChiPartial | partial:m2245_15 | -| ir.cpp:2245:16:2245:17 | ChiTotal | total:m2245_8 | -| ir.cpp:2245:16:2245:17 | SideEffect | ~m2245_8 | -| ir.cpp:2248:10:2248:36 | ChiPartial | partial:m2248_3 | -| ir.cpp:2248:10:2248:36 | ChiTotal | total:m2248_2 | -| ir.cpp:2248:10:2248:36 | SideEffect | ~m2251_6 | -| ir.cpp:2249:29:2249:29 | Address | &:r2249_1 | -| ir.cpp:2249:29:2249:29 | Address | &:r2249_1 | -| ir.cpp:2249:29:2249:29 | Arg(this) | this:r2249_1 | -| ir.cpp:2249:29:2249:29 | CallTarget | func:r2249_3 | -| ir.cpp:2249:29:2249:29 | ChiPartial | partial:m2249_5 | -| ir.cpp:2249:29:2249:29 | ChiPartial | partial:m2249_7 | -| ir.cpp:2249:29:2249:29 | ChiTotal | total:m2248_4 | -| ir.cpp:2249:29:2249:29 | ChiTotal | total:m2249_2 | -| ir.cpp:2249:29:2249:29 | SideEffect | ~m2248_4 | -| ir.cpp:2250:9:2250:23 | CallTarget | func:r2250_1 | -| ir.cpp:2250:9:2250:23 | ChiPartial | partial:m2250_5 | -| ir.cpp:2250:9:2250:23 | ChiTotal | total:m2249_6 | -| ir.cpp:2250:9:2250:23 | SideEffect | ~m2249_6 | -| ir.cpp:2250:25:2250:25 | Address | &:r2250_3 | -| ir.cpp:2250:25:2250:25 | Address | &:r2250_3 | -| ir.cpp:2250:25:2250:25 | Arg(0) | 0:r2250_3 | -| ir.cpp:2250:25:2250:25 | ChiPartial | partial:m2250_8 | -| ir.cpp:2250:25:2250:25 | ChiTotal | total:m2249_8 | -| ir.cpp:2250:25:2250:25 | SideEffect | ~m2249_8 | -| ir.cpp:2250:25:2250:25 | Unary | r2250_2 | -| ir.cpp:2251:5:2251:5 | Address | &:r2251_2 | -| ir.cpp:2251:5:2251:5 | Address | &:r2251_2 | -| ir.cpp:2251:5:2251:5 | Arg(this) | this:r2251_2 | -| ir.cpp:2251:5:2251:5 | CallTarget | func:r2251_3 | -| ir.cpp:2251:5:2251:5 | ChiPartial | partial:m2251_5 | -| ir.cpp:2251:5:2251:5 | ChiPartial | partial:m2251_8 | -| ir.cpp:2251:5:2251:5 | ChiTotal | total:m2250_6 | -| ir.cpp:2251:5:2251:5 | ChiTotal | total:m2250_9 | -| ir.cpp:2251:5:2251:5 | SideEffect | m2250_9 | -| ir.cpp:2251:5:2251:5 | SideEffect | ~m2250_6 | -| ir.cpp:2253:10:2253:32 | ChiPartial | partial:m2253_3 | -| ir.cpp:2253:10:2253:32 | ChiTotal | total:m2253_2 | -| ir.cpp:2253:10:2253:32 | SideEffect | ~m2255_6 | -| ir.cpp:2254:13:2254:13 | Address | &:r2254_1 | -| ir.cpp:2255:9:2255:23 | CallTarget | func:r2255_1 | -| ir.cpp:2255:9:2255:23 | ChiPartial | partial:m2255_5 | -| ir.cpp:2255:9:2255:23 | ChiTotal | total:m2253_4 | -| ir.cpp:2255:9:2255:23 | SideEffect | ~m2253_4 | -| ir.cpp:2255:25:2255:25 | Address | &:r2255_3 | -| ir.cpp:2255:25:2255:25 | Address | &:r2255_3 | -| ir.cpp:2255:25:2255:25 | Arg(0) | 0:r2255_3 | -| ir.cpp:2255:25:2255:25 | ChiPartial | partial:m2255_8 | -| ir.cpp:2255:25:2255:25 | ChiTotal | total:m2254_2 | -| ir.cpp:2255:25:2255:25 | SideEffect | ~m2254_2 | -| ir.cpp:2255:25:2255:25 | Unary | r2255_2 | -| ir.cpp:2259:6:2259:24 | ChiPartial | partial:m2259_3 | -| ir.cpp:2259:6:2259:24 | ChiTotal | total:m2259_2 | -| ir.cpp:2259:6:2259:24 | Phi | from 2:~m2259_10 | -| ir.cpp:2259:6:2259:24 | Phi | from 6:~m2268_8 | -| ir.cpp:2259:6:2259:24 | Phi | from 9:~m2261_6 | -| ir.cpp:2259:6:2259:24 | Phi | from 10:~m2275_1 | -| ir.cpp:2259:6:2259:24 | SideEffect | ~m2259_7 | -| ir.cpp:2259:31:2259:31 | Address | &:r2259_5 | -| ir.cpp:2261:12:2261:12 | Address | &:r2261_1 | -| ir.cpp:2261:12:2261:12 | Address | &:r2261_1 | -| ir.cpp:2261:12:2261:12 | Arg(this) | this:r2261_1 | -| ir.cpp:2261:12:2261:12 | CallTarget | func:r2261_3 | -| ir.cpp:2261:12:2261:12 | ChiPartial | partial:m2261_5 | -| ir.cpp:2261:12:2261:12 | ChiPartial | partial:m2261_7 | -| ir.cpp:2261:12:2261:12 | ChiTotal | total:m2259_4 | -| ir.cpp:2261:12:2261:12 | ChiTotal | total:m2261_2 | -| ir.cpp:2261:12:2261:12 | SideEffect | ~m2259_4 | -| ir.cpp:2262:9:2262:9 | Address | &:r2262_1 | -| ir.cpp:2262:9:2262:9 | Condition | r2262_2 | -| ir.cpp:2262:9:2262:9 | Load | m2259_6 | -| ir.cpp:2263:7:2263:28 | Address | &:r2263_1 | -| ir.cpp:2263:7:2263:28 | Address | &:r2263_1 | -| ir.cpp:2263:7:2263:28 | Load | m2263_4 | -| ir.cpp:2263:13:2263:28 | StoreValue | r2263_3 | -| ir.cpp:2263:13:2263:28 | Unary | r2263_2 | -| ir.cpp:2265:12:2265:13 | Address | &:r2265_1 | -| ir.cpp:2265:12:2265:13 | Address | &:r2265_1 | -| ir.cpp:2265:12:2265:13 | Arg(this) | this:r2265_1 | -| ir.cpp:2265:12:2265:13 | CallTarget | func:r2265_3 | -| ir.cpp:2265:12:2265:13 | ChiPartial | partial:m2265_5 | -| ir.cpp:2265:12:2265:13 | ChiPartial | partial:m2265_7 | -| ir.cpp:2265:12:2265:13 | ChiTotal | total:m2261_6 | -| ir.cpp:2265:12:2265:13 | ChiTotal | total:m2265_2 | -| ir.cpp:2265:12:2265:13 | SideEffect | ~m2261_6 | -| ir.cpp:2266:3:2266:3 | Address | &:r2266_1 | -| ir.cpp:2266:3:2266:3 | Address | &:r2266_1 | -| ir.cpp:2266:3:2266:3 | Address | &:r2266_9 | -| ir.cpp:2266:3:2266:3 | Address | &:r2266_9 | -| ir.cpp:2266:3:2266:3 | Arg(this) | this:r2266_1 | -| ir.cpp:2266:3:2266:3 | Arg(this) | this:r2266_9 | -| ir.cpp:2266:3:2266:3 | CallTarget | func:r2266_2 | -| ir.cpp:2266:3:2266:3 | CallTarget | func:r2266_10 | -| ir.cpp:2266:3:2266:3 | ChiPartial | partial:m2266_4 | -| ir.cpp:2266:3:2266:3 | ChiPartial | partial:m2266_7 | -| ir.cpp:2266:3:2266:3 | ChiPartial | partial:m2266_12 | -| ir.cpp:2266:3:2266:3 | ChiPartial | partial:m2266_15 | -| ir.cpp:2266:3:2266:3 | ChiTotal | total:m2261_8 | -| ir.cpp:2266:3:2266:3 | ChiTotal | total:m2265_6 | -| ir.cpp:2266:3:2266:3 | ChiTotal | total:m2265_8 | -| ir.cpp:2266:3:2266:3 | ChiTotal | total:m2266_5 | -| ir.cpp:2266:3:2266:3 | SideEffect | m2261_8 | -| ir.cpp:2266:3:2266:3 | SideEffect | m2265_8 | -| ir.cpp:2266:3:2266:3 | SideEffect | ~m2265_6 | -| ir.cpp:2266:3:2266:3 | SideEffect | ~m2266_5 | -| ir.cpp:2267:22:2267:22 | Address | &:r2267_2 | -| ir.cpp:2267:22:2267:22 | Address | &:r2267_2 | -| ir.cpp:2267:22:2267:22 | Address | &:r2267_4 | -| ir.cpp:2267:22:2267:22 | Load | m2267_3 | -| ir.cpp:2268:5:2268:19 | Address | &:r2268_1 | -| ir.cpp:2268:5:2268:19 | Address | &:r2268_1 | -| ir.cpp:2268:5:2268:19 | Address | &:r2268_1 | -| ir.cpp:2268:5:2268:19 | Arg(this) | this:r2268_1 | -| ir.cpp:2268:5:2268:19 | CallTarget | func:r2268_3 | -| ir.cpp:2268:5:2268:19 | ChiPartial | partial:m2268_7 | -| ir.cpp:2268:5:2268:19 | ChiPartial | partial:m2268_10 | -| ir.cpp:2268:5:2268:19 | ChiTotal | total:m2261_6 | -| ir.cpp:2268:5:2268:19 | ChiTotal | total:m2268_2 | -| ir.cpp:2268:5:2268:19 | Load | m2268_11 | -| ir.cpp:2268:5:2268:19 | SideEffect | ~m2261_6 | -| ir.cpp:2268:18:2268:18 | Address | &:r2268_4 | -| ir.cpp:2268:18:2268:18 | Address | &:r2268_5 | -| ir.cpp:2268:18:2268:18 | Arg(0) | 0:r2268_5 | -| ir.cpp:2268:18:2268:18 | Load | m2267_3 | -| ir.cpp:2268:18:2268:18 | SideEffect | ~m2267_5 | -| ir.cpp:2270:24:2270:24 | Address | &:r2270_2 | -| ir.cpp:2270:24:2270:24 | Address | &:r2270_2 | -| ir.cpp:2270:24:2270:24 | Address | &:r2270_4 | -| ir.cpp:2270:24:2270:24 | Load | m2270_3 | -| ir.cpp:2275:1:2275:1 | Phi | from 4:~m2266_13 | -| ir.cpp:2275:1:2275:1 | Phi | from 8:~m2261_6 | -| ir.cpp:2277:6:2277:18 | ChiPartial | partial:m2277_3 | -| ir.cpp:2277:6:2277:18 | ChiTotal | total:m2277_2 | -| ir.cpp:2277:6:2277:18 | SideEffect | ~m2285_14 | -| ir.cpp:2277:25:2277:25 | Address | &:r2277_5 | -| ir.cpp:2278:12:2278:13 | Address | &:r2278_1 | -| ir.cpp:2278:12:2278:13 | Address | &:r2278_1 | -| ir.cpp:2278:12:2278:13 | Arg(this) | this:r2278_1 | -| ir.cpp:2278:12:2278:13 | CallTarget | func:r2278_3 | -| ir.cpp:2278:12:2278:13 | ChiPartial | partial:m2278_5 | -| ir.cpp:2278:12:2278:13 | ChiPartial | partial:m2278_7 | -| ir.cpp:2278:12:2278:13 | ChiTotal | total:m2277_4 | -| ir.cpp:2278:12:2278:13 | ChiTotal | total:m2278_2 | -| ir.cpp:2278:12:2278:13 | SideEffect | ~m2277_4 | -| ir.cpp:2279:8:2279:8 | Address | &:r2279_1 | -| ir.cpp:2279:8:2279:8 | Condition | r2279_2 | -| ir.cpp:2279:8:2279:8 | Load | m2277_6 | -| ir.cpp:2280:16:2280:17 | Address | &:r2280_1 | -| ir.cpp:2280:16:2280:17 | Address | &:r2280_1 | -| ir.cpp:2280:16:2280:17 | Arg(this) | this:r2280_1 | -| ir.cpp:2280:16:2280:17 | CallTarget | func:r2280_3 | -| ir.cpp:2280:16:2280:17 | ChiPartial | partial:m2280_5 | -| ir.cpp:2280:16:2280:17 | ChiPartial | partial:m2280_7 | -| ir.cpp:2280:16:2280:17 | ChiTotal | total:m2278_6 | -| ir.cpp:2280:16:2280:17 | ChiTotal | total:m2280_2 | -| ir.cpp:2280:16:2280:17 | SideEffect | ~m2278_6 | -| ir.cpp:2281:5:2281:5 | Address | &:r2281_1 | -| ir.cpp:2281:5:2281:5 | Address | &:r2281_1 | -| ir.cpp:2281:5:2281:5 | Arg(this) | this:r2281_1 | -| ir.cpp:2281:5:2281:5 | CallTarget | func:r2281_2 | -| ir.cpp:2281:5:2281:5 | ChiPartial | partial:m2281_4 | -| ir.cpp:2281:5:2281:5 | ChiPartial | partial:m2281_7 | -| ir.cpp:2281:5:2281:5 | ChiTotal | total:m2280_6 | -| ir.cpp:2281:5:2281:5 | ChiTotal | total:m2280_8 | -| ir.cpp:2281:5:2281:5 | SideEffect | m2280_8 | -| ir.cpp:2281:5:2281:5 | SideEffect | ~m2280_6 | -| ir.cpp:2282:16:2282:17 | Address | &:r2282_1 | -| ir.cpp:2282:16:2282:17 | Address | &:r2282_1 | -| ir.cpp:2282:16:2282:17 | Arg(this) | this:r2282_1 | -| ir.cpp:2282:16:2282:17 | CallTarget | func:r2282_3 | -| ir.cpp:2282:16:2282:17 | ChiPartial | partial:m2282_5 | -| ir.cpp:2282:16:2282:17 | ChiPartial | partial:m2282_7 | -| ir.cpp:2282:16:2282:17 | ChiTotal | total:m2278_6 | -| ir.cpp:2282:16:2282:17 | ChiTotal | total:m2282_2 | -| ir.cpp:2282:16:2282:17 | SideEffect | ~m2278_6 | -| ir.cpp:2283:5:2283:5 | Address | &:r2283_1 | -| ir.cpp:2283:5:2283:5 | Address | &:r2283_1 | -| ir.cpp:2283:5:2283:5 | Arg(this) | this:r2283_1 | -| ir.cpp:2283:5:2283:5 | CallTarget | func:r2283_2 | -| ir.cpp:2283:5:2283:5 | ChiPartial | partial:m2283_4 | -| ir.cpp:2283:5:2283:5 | ChiPartial | partial:m2283_7 | -| ir.cpp:2283:5:2283:5 | ChiTotal | total:m2282_6 | -| ir.cpp:2283:5:2283:5 | ChiTotal | total:m2282_8 | -| ir.cpp:2283:5:2283:5 | SideEffect | m2282_8 | -| ir.cpp:2283:5:2283:5 | SideEffect | ~m2282_6 | -| ir.cpp:2284:12:2284:13 | Address | &:r2284_2 | -| ir.cpp:2284:12:2284:13 | Address | &:r2284_2 | -| ir.cpp:2284:12:2284:13 | Arg(this) | this:r2284_2 | -| ir.cpp:2284:12:2284:13 | CallTarget | func:r2284_4 | -| ir.cpp:2284:12:2284:13 | ChiPartial | partial:m2284_6 | -| ir.cpp:2284:12:2284:13 | ChiPartial | partial:m2284_8 | -| ir.cpp:2284:12:2284:13 | ChiTotal | total:m2284_1 | -| ir.cpp:2284:12:2284:13 | ChiTotal | total:m2284_3 | -| ir.cpp:2284:12:2284:13 | Phi | from 1:~m2281_5 | -| ir.cpp:2284:12:2284:13 | Phi | from 2:~m2283_5 | -| ir.cpp:2284:12:2284:13 | SideEffect | ~m2284_1 | -| ir.cpp:2285:1:2285:1 | Address | &:r2285_2 | -| ir.cpp:2285:1:2285:1 | Address | &:r2285_2 | -| ir.cpp:2285:1:2285:1 | Address | &:r2285_10 | -| ir.cpp:2285:1:2285:1 | Address | &:r2285_10 | -| ir.cpp:2285:1:2285:1 | Arg(this) | this:r2285_2 | -| ir.cpp:2285:1:2285:1 | Arg(this) | this:r2285_10 | -| ir.cpp:2285:1:2285:1 | CallTarget | func:r2285_3 | -| ir.cpp:2285:1:2285:1 | CallTarget | func:r2285_11 | -| ir.cpp:2285:1:2285:1 | ChiPartial | partial:m2285_5 | -| ir.cpp:2285:1:2285:1 | ChiPartial | partial:m2285_8 | -| ir.cpp:2285:1:2285:1 | ChiPartial | partial:m2285_13 | -| ir.cpp:2285:1:2285:1 | ChiPartial | partial:m2285_16 | -| ir.cpp:2285:1:2285:1 | ChiTotal | total:m2278_8 | -| ir.cpp:2285:1:2285:1 | ChiTotal | total:m2284_7 | -| ir.cpp:2285:1:2285:1 | ChiTotal | total:m2284_9 | -| ir.cpp:2285:1:2285:1 | ChiTotal | total:m2285_6 | -| ir.cpp:2285:1:2285:1 | SideEffect | m2278_8 | -| ir.cpp:2285:1:2285:1 | SideEffect | m2284_9 | -| ir.cpp:2285:1:2285:1 | SideEffect | ~m2284_7 | -| ir.cpp:2285:1:2285:1 | SideEffect | ~m2285_6 | -| ir.cpp:2287:6:2287:19 | ChiPartial | partial:m2287_3 | -| ir.cpp:2287:6:2287:19 | ChiTotal | total:m2287_2 | -| ir.cpp:2287:6:2287:19 | SideEffect | ~m2297_54 | -| ir.cpp:2288:10:2288:10 | Address | &:r2288_1 | -| ir.cpp:2288:13:2288:16 | StoreValue | r2288_2 | -| ir.cpp:2289:16:2289:16 | Address | &:r2289_1 | -| ir.cpp:2289:16:2289:16 | Address | &:r2289_1 | -| ir.cpp:2289:16:2289:16 | Address | &:r2289_31 | -| ir.cpp:2289:16:2289:16 | Address | &:r2289_31 | -| ir.cpp:2289:16:2289:16 | Arg(this) | this:r2289_1 | -| ir.cpp:2289:16:2289:16 | Arg(this) | this:r2289_31 | -| ir.cpp:2289:16:2289:16 | CallTarget | func:r2289_32 | -| ir.cpp:2289:16:2289:16 | ChiPartial | partial:m2289_34 | -| ir.cpp:2289:16:2289:16 | ChiPartial | partial:m2289_37 | -| ir.cpp:2289:16:2289:16 | ChiTotal | total:m2289_12 | -| ir.cpp:2289:16:2289:16 | ChiTotal | total:m2289_13 | -| ir.cpp:2289:16:2289:16 | SideEffect | m2289_12 | -| ir.cpp:2289:16:2289:16 | SideEffect | ~m2289_13 | -| ir.cpp:2289:18:2289:24 | Address | &:r2289_5 | -| ir.cpp:2289:18:2289:24 | Arg(0) | 0:r2289_5 | -| ir.cpp:2289:18:2289:24 | SideEffect | ~m2287_3 | -| ir.cpp:2289:18:2289:24 | Unary | r2289_4 | -| ir.cpp:2289:18:2289:25 | CallTarget | func:r2289_3 | -| ir.cpp:2289:18:2289:25 | ChiPartial | partial:m2289_7 | -| ir.cpp:2289:18:2289:25 | ChiPartial | partial:m2289_10 | -| ir.cpp:2289:18:2289:25 | ChiTotal | total:m2287_4 | -| ir.cpp:2289:18:2289:25 | ChiTotal | total:m2289_2 | -| ir.cpp:2289:18:2289:25 | SideEffect | ~m2287_4 | -| ir.cpp:2289:28:2289:28 | Address | &:r2289_15 | -| ir.cpp:2289:28:2289:28 | Left | r2289_17 | -| ir.cpp:2289:28:2289:28 | Load | m2289_14 | -| ir.cpp:2289:28:2289:28 | Phi | from 0:m2288_3 | -| ir.cpp:2289:28:2289:28 | Phi | from 0:m2289_11 | -| ir.cpp:2289:28:2289:28 | Phi | from 0:~m2289_8 | -| ir.cpp:2289:28:2289:28 | Phi | from 2:m2289_28 | -| ir.cpp:2289:28:2289:28 | Phi | from 2:m2289_30 | -| ir.cpp:2289:28:2289:28 | Phi | from 2:~m2289_25 | -| ir.cpp:2289:28:2289:28 | Unary | r2289_16 | -| ir.cpp:2289:28:2289:33 | Condition | r2289_19 | -| ir.cpp:2289:33:2289:33 | Right | r2289_18 | -| ir.cpp:2289:36:2289:36 | Address | &:r2289_29 | -| ir.cpp:2289:40:2289:40 | Address | &:r2289_21 | -| ir.cpp:2289:40:2289:40 | Address | &:r2289_21 | -| ir.cpp:2289:40:2289:40 | Arg(this) | this:r2289_21 | -| ir.cpp:2289:40:2289:40 | ChiPartial | partial:m2289_27 | -| ir.cpp:2289:40:2289:40 | ChiTotal | total:m2289_12 | -| ir.cpp:2289:40:2289:40 | SideEffect | m2289_12 | -| ir.cpp:2289:42:2289:49 | CallTarget | func:r2289_22 | -| ir.cpp:2289:42:2289:49 | ChiPartial | partial:m2289_24 | -| ir.cpp:2289:42:2289:49 | ChiTotal | total:m2291_5 | -| ir.cpp:2289:42:2289:49 | SideEffect | ~m2291_5 | -| ir.cpp:2289:42:2289:49 | StoreValue | r2289_23 | -| ir.cpp:2290:16:2290:17 | Address | &:r2290_1 | -| ir.cpp:2290:16:2290:17 | Address | &:r2290_1 | -| ir.cpp:2290:16:2290:17 | Arg(this) | this:r2290_1 | -| ir.cpp:2290:16:2290:17 | CallTarget | func:r2290_3 | -| ir.cpp:2290:16:2290:17 | ChiPartial | partial:m2290_5 | -| ir.cpp:2290:16:2290:17 | ChiPartial | partial:m2290_7 | -| ir.cpp:2290:16:2290:17 | ChiTotal | total:m2289_13 | -| ir.cpp:2290:16:2290:17 | ChiTotal | total:m2290_2 | -| ir.cpp:2290:16:2290:17 | SideEffect | ~m2289_13 | -| ir.cpp:2291:5:2291:5 | Address | &:r2291_1 | -| ir.cpp:2291:5:2291:5 | Address | &:r2291_1 | -| ir.cpp:2291:5:2291:5 | Arg(this) | this:r2291_1 | -| ir.cpp:2291:5:2291:5 | CallTarget | func:r2291_2 | -| ir.cpp:2291:5:2291:5 | ChiPartial | partial:m2291_4 | -| ir.cpp:2291:5:2291:5 | ChiPartial | partial:m2291_7 | -| ir.cpp:2291:5:2291:5 | ChiTotal | total:m2290_6 | -| ir.cpp:2291:5:2291:5 | ChiTotal | total:m2290_8 | -| ir.cpp:2291:5:2291:5 | SideEffect | m2290_8 | -| ir.cpp:2291:5:2291:5 | SideEffect | ~m2290_6 | -| ir.cpp:2293:5:2293:5 | Address | &:r2293_1 | -| ir.cpp:2293:5:2293:5 | Address | &:r2293_24 | -| ir.cpp:2293:5:2293:5 | Address | &:r2293_30 | -| ir.cpp:2293:16:2293:16 | Address | &:r2293_51 | -| ir.cpp:2293:16:2293:16 | Address | &:r2293_51 | -| ir.cpp:2293:16:2293:16 | Address | &:r2293_68 | -| ir.cpp:2293:16:2293:16 | Address | &:r2293_68 | -| ir.cpp:2293:16:2293:16 | Arg(this) | this:r2293_51 | -| ir.cpp:2293:16:2293:16 | Arg(this) | this:r2293_68 | -| ir.cpp:2293:16:2293:16 | CallTarget | func:r2293_53 | -| ir.cpp:2293:16:2293:16 | CallTarget | func:r2293_69 | -| ir.cpp:2293:16:2293:16 | ChiPartial | partial:m2293_63 | -| ir.cpp:2293:16:2293:16 | ChiPartial | partial:m2293_66 | -| ir.cpp:2293:16:2293:16 | ChiPartial | partial:m2293_71 | -| ir.cpp:2293:16:2293:16 | ChiPartial | partial:m2293_74 | -| ir.cpp:2293:16:2293:16 | ChiTotal | total:m2293_52 | -| ir.cpp:2293:16:2293:16 | ChiTotal | total:m2293_58 | -| ir.cpp:2293:16:2293:16 | ChiTotal | total:m2293_67 | -| ir.cpp:2293:16:2293:16 | ChiTotal | total:m2295_5 | -| ir.cpp:2293:16:2293:16 | SideEffect | m2293_67 | -| ir.cpp:2293:16:2293:16 | SideEffect | ~m2293_58 | -| ir.cpp:2293:16:2293:16 | SideEffect | ~m2295_5 | -| ir.cpp:2293:20:2293:20 | Address | &:r2293_25 | -| ir.cpp:2293:20:2293:20 | Address | &:r2293_31 | -| ir.cpp:2293:20:2293:20 | Address | &:r2293_76 | -| ir.cpp:2293:20:2293:20 | Address | &:r2293_76 | -| ir.cpp:2293:20:2293:20 | Arg(this) | this:r0_2 | -| ir.cpp:2293:20:2293:20 | Arg(this) | this:r0_5 | -| ir.cpp:2293:20:2293:20 | Arg(this) | this:r0_7 | -| ir.cpp:2293:20:2293:20 | Arg(this) | this:r0_8 | -| ir.cpp:2293:20:2293:20 | Arg(this) | this:r0_15 | -| ir.cpp:2293:20:2293:20 | Arg(this) | this:r2293_76 | -| ir.cpp:2293:20:2293:20 | CallTarget | func:r2293_27 | -| ir.cpp:2293:20:2293:20 | CallTarget | func:r2293_33 | -| ir.cpp:2293:20:2293:20 | CallTarget | func:r2293_39 | -| ir.cpp:2293:20:2293:20 | CallTarget | func:r2293_40 | -| ir.cpp:2293:20:2293:20 | CallTarget | func:r2293_55 | -| ir.cpp:2293:20:2293:20 | CallTarget | func:r2293_77 | -| ir.cpp:2293:20:2293:20 | ChiPartial | partial:m2293_43 | -| ir.cpp:2293:20:2293:20 | ChiPartial | partial:m2293_45 | -| ir.cpp:2293:20:2293:20 | ChiPartial | partial:m2293_48 | -| ir.cpp:2293:20:2293:20 | ChiPartial | partial:m2293_57 | -| ir.cpp:2293:20:2293:20 | ChiPartial | partial:m2293_79 | -| ir.cpp:2293:20:2293:20 | ChiPartial | partial:m2293_82 | -| ir.cpp:2293:20:2293:20 | ChiTotal | total:m0_9 | -| ir.cpp:2293:20:2293:20 | ChiTotal | total:m2293_36 | -| ir.cpp:2293:20:2293:20 | ChiTotal | total:m2293_37 | -| ir.cpp:2293:20:2293:20 | ChiTotal | total:m2293_44 | -| ir.cpp:2293:20:2293:20 | ChiTotal | total:m2293_49 | -| ir.cpp:2293:20:2293:20 | ChiTotal | total:m2293_72 | -| ir.cpp:2293:20:2293:20 | Condition | r2293_47 | -| ir.cpp:2293:20:2293:20 | Load | m2293_23 | -| ir.cpp:2293:20:2293:20 | Load | m2293_23 | -| ir.cpp:2293:20:2293:20 | Phi | from 3:m2293_29 | -| ir.cpp:2293:20:2293:20 | Phi | from 3:~m2293_19 | -| ir.cpp:2293:20:2293:20 | Phi | from 5:m2293_83 | -| ir.cpp:2293:20:2293:20 | Phi | from 5:~m2293_80 | -| ir.cpp:2293:20:2293:20 | SideEffect | m2293_36 | -| ir.cpp:2293:20:2293:20 | SideEffect | ~m2293_37 | -| ir.cpp:2293:20:2293:20 | SideEffect | ~m2293_44 | -| ir.cpp:2293:20:2293:20 | SideEffect | ~m2293_49 | -| ir.cpp:2293:20:2293:20 | SideEffect | ~m2293_72 | -| ir.cpp:2293:20:2293:20 | StoreValue | r2293_28 | -| ir.cpp:2293:20:2293:20 | StoreValue | r2293_34 | -| ir.cpp:2293:20:2293:20 | Unary | r2293_26 | -| ir.cpp:2293:20:2293:20 | Unary | r2293_32 | -| ir.cpp:2293:20:2293:20 | Unary | r2293_38 | -| ir.cpp:2293:20:2293:20 | Unary | r2293_41 | -| ir.cpp:2293:20:2293:20 | Unary | r2293_54 | -| ir.cpp:2293:20:2293:20 | Unary | r2293_56 | -| ir.cpp:2293:20:2293:20 | Unary | r2293_78 | -| ir.cpp:2293:20:2293:55 | Address | &:r2293_2 | -| ir.cpp:2293:20:2293:55 | Address | &:r2293_2 | -| ir.cpp:2293:20:2293:55 | Arg(this) | this:r2293_2 | -| ir.cpp:2293:20:2293:55 | CallTarget | func:r2293_4 | -| ir.cpp:2293:20:2293:55 | ChiPartial | partial:m2293_18 | -| ir.cpp:2293:20:2293:55 | ChiPartial | partial:m2293_20 | -| ir.cpp:2293:20:2293:55 | ChiTotal | total:m2293_3 | -| ir.cpp:2293:20:2293:55 | ChiTotal | total:m2293_12 | -| ir.cpp:2293:20:2293:55 | SideEffect | ~m2293_12 | -| ir.cpp:2293:20:2293:55 | StoreValue | r2293_22 | -| ir.cpp:2293:20:2293:55 | Unary | r2293_2 | -| ir.cpp:2293:20:2293:56 | Address | &:r2293_61 | -| ir.cpp:2293:20:2293:56 | Arg(0) | 0:r2293_61 | -| ir.cpp:2293:20:2293:56 | SideEffect | ~m2293_64 | -| ir.cpp:2293:20:2293:56 | Unary | r2293_59 | -| ir.cpp:2293:20:2293:56 | Unary | r2293_60 | -| ir.cpp:2293:40:2293:54 | Address | &:r2293_5 | -| ir.cpp:2293:40:2293:54 | Address | &:r2293_5 | -| ir.cpp:2293:40:2293:54 | Address | &:r2293_5 | -| ir.cpp:2293:40:2293:54 | Arg(0) | 0:r2293_16 | -| ir.cpp:2293:40:2293:54 | Arg(this) | this:r2293_5 | -| ir.cpp:2293:40:2293:54 | CallTarget | func:r2293_7 | -| ir.cpp:2293:40:2293:54 | ChiPartial | partial:m2293_11 | -| ir.cpp:2293:40:2293:54 | ChiPartial | partial:m2293_14 | -| ir.cpp:2293:40:2293:54 | ChiTotal | total:m2289_35 | -| ir.cpp:2293:40:2293:54 | ChiTotal | total:m2293_6 | -| ir.cpp:2293:40:2293:54 | Load | m2293_15 | -| ir.cpp:2293:40:2293:54 | SideEffect | ~m2289_35 | -| ir.cpp:2293:47:2293:53 | Address | &:r2293_9 | -| ir.cpp:2293:47:2293:53 | Arg(0) | 0:r2293_9 | -| ir.cpp:2293:47:2293:53 | SideEffect | ~m2287_3 | -| ir.cpp:2293:47:2293:53 | Unary | r2293_8 | +| ir.cpp:2216:7:2216:7 | Address | &:r2216_1 | +| ir.cpp:2216:7:2216:7 | Address | &:r2216_1 | +| ir.cpp:2216:7:2216:7 | Arg(this) | this:r2216_1 | +| ir.cpp:2216:7:2216:7 | ChiPartial | partial:m2216_8 | +| ir.cpp:2216:7:2216:7 | ChiTotal | total:m2215_52 | +| ir.cpp:2216:7:2216:7 | SideEffect | m2215_52 | +| ir.cpp:2216:9:2216:13 | CallTarget | func:r2216_2 | +| ir.cpp:2216:9:2216:13 | ChiPartial | partial:m2216_5 | +| ir.cpp:2216:9:2216:13 | ChiTotal | total:m2215_50 | +| ir.cpp:2216:9:2216:13 | SideEffect | ~m2215_50 | +| ir.cpp:2216:15:2216:17 | Arg(0) | 0:r2216_3 | +| ir.cpp:2218:5:2218:5 | Address | &:r2218_14 | +| ir.cpp:2218:5:2218:5 | Address | &:r2218_18 | +| ir.cpp:2218:5:2218:5 | Address | &:r2218_24 | +| ir.cpp:2218:42:2218:43 | Address | &:r2218_1 | +| ir.cpp:2218:42:2218:43 | Address | &:r2218_1 | +| ir.cpp:2218:42:2218:43 | Address | &:r2218_61 | +| ir.cpp:2218:42:2218:43 | Address | &:r2218_61 | +| ir.cpp:2218:42:2218:43 | Arg(this) | this:r2218_1 | +| ir.cpp:2218:42:2218:43 | Arg(this) | this:r2218_61 | +| ir.cpp:2218:42:2218:43 | CallTarget | func:r2218_62 | +| ir.cpp:2218:42:2218:43 | ChiPartial | partial:m2218_64 | +| ir.cpp:2218:42:2218:43 | ChiPartial | partial:m2218_67 | +| ir.cpp:2218:42:2218:43 | ChiTotal | total:m2218_13 | +| ir.cpp:2218:42:2218:43 | ChiTotal | total:m2218_57 | +| ir.cpp:2218:42:2218:43 | SideEffect | m2218_13 | +| ir.cpp:2218:42:2218:43 | SideEffect | ~m2218_57 | +| ir.cpp:2218:45:2218:45 | Address | &:r2218_4 | +| ir.cpp:2218:45:2218:45 | Address | &:r2218_4 | +| ir.cpp:2218:45:2218:45 | Address | &:r2218_5 | +| ir.cpp:2218:45:2218:45 | Arg(0) | 0:r2218_8 | +| ir.cpp:2218:45:2218:45 | Load | m2214_8 | +| ir.cpp:2218:45:2218:45 | Load | m2218_7 | +| ir.cpp:2218:45:2218:45 | StoreValue | r2218_6 | +| ir.cpp:2218:45:2218:46 | CallTarget | func:r2218_3 | +| ir.cpp:2218:45:2218:46 | ChiPartial | partial:m2218_10 | +| ir.cpp:2218:45:2218:46 | ChiPartial | partial:m2218_12 | +| ir.cpp:2218:45:2218:46 | ChiTotal | total:m2215_43 | +| ir.cpp:2218:45:2218:46 | ChiTotal | total:m2218_2 | +| ir.cpp:2218:45:2218:46 | SideEffect | ~m2215_43 | +| ir.cpp:2218:69:2218:69 | Address | &:r2218_45 | +| ir.cpp:2218:69:2218:69 | Address | &:r2218_53 | +| ir.cpp:2218:69:2218:69 | Address | &:r2218_53 | +| ir.cpp:2218:69:2218:69 | Address | &:r2218_69 | +| ir.cpp:2218:69:2218:69 | Address | &:r2218_69 | +| ir.cpp:2218:69:2218:69 | Arg(this) | this:r2218_53 | +| ir.cpp:2218:69:2218:69 | Arg(this) | this:r2218_69 | +| ir.cpp:2218:69:2218:69 | CallTarget | func:r2218_54 | +| ir.cpp:2218:69:2218:69 | CallTarget | func:r2218_70 | +| ir.cpp:2218:69:2218:69 | ChiPartial | partial:m2218_56 | +| ir.cpp:2218:69:2218:69 | ChiPartial | partial:m2218_59 | +| ir.cpp:2218:69:2218:69 | ChiPartial | partial:m2218_72 | +| ir.cpp:2218:69:2218:69 | ChiPartial | partial:m2218_75 | +| ir.cpp:2218:69:2218:69 | ChiTotal | total:m2220_5 | +| ir.cpp:2218:69:2218:69 | ChiTotal | total:m2220_5 | +| ir.cpp:2218:69:2218:69 | ChiTotal | total:m2220_8 | +| ir.cpp:2218:69:2218:69 | ChiTotal | total:m2220_8 | +| ir.cpp:2218:69:2218:69 | SideEffect | m2220_8 | +| ir.cpp:2218:69:2218:69 | SideEffect | m2220_8 | +| ir.cpp:2218:69:2218:69 | SideEffect | ~m2220_5 | +| ir.cpp:2218:69:2218:69 | SideEffect | ~m2220_5 | +| ir.cpp:2218:73:2218:73 | Address | &:r2218_19 | +| ir.cpp:2218:73:2218:73 | Address | &:r2218_25 | +| ir.cpp:2218:73:2218:73 | Address | &:r2218_48 | +| ir.cpp:2218:73:2218:73 | Address | &:r2218_77 | +| ir.cpp:2218:73:2218:73 | Address | &:r2218_77 | +| ir.cpp:2218:73:2218:73 | Arg(this) | this:r0_18 | +| ir.cpp:2218:73:2218:73 | Arg(this) | this:r0_21 | +| ir.cpp:2218:73:2218:73 | Arg(this) | this:r0_23 | +| ir.cpp:2218:73:2218:73 | Arg(this) | this:r0_24 | +| ir.cpp:2218:73:2218:73 | Arg(this) | this:r0_31 | +| ir.cpp:2218:73:2218:73 | Arg(this) | this:r2218_77 | +| ir.cpp:2218:73:2218:73 | CallTarget | func:r2218_21 | +| ir.cpp:2218:73:2218:73 | CallTarget | func:r2218_27 | +| ir.cpp:2218:73:2218:73 | CallTarget | func:r2218_33 | +| ir.cpp:2218:73:2218:73 | CallTarget | func:r2218_34 | +| ir.cpp:2218:73:2218:73 | CallTarget | func:r2218_47 | +| ir.cpp:2218:73:2218:73 | CallTarget | func:r2218_78 | +| ir.cpp:2218:73:2218:73 | ChiPartial | partial:m2218_37 | +| ir.cpp:2218:73:2218:73 | ChiPartial | partial:m2218_39 | +| ir.cpp:2218:73:2218:73 | ChiPartial | partial:m2218_42 | +| ir.cpp:2218:73:2218:73 | ChiPartial | partial:m2218_49 | +| ir.cpp:2218:73:2218:73 | ChiPartial | partial:m2218_80 | +| ir.cpp:2218:73:2218:73 | ChiPartial | partial:m2218_83 | +| ir.cpp:2218:73:2218:73 | ChiTotal | total:m0_25 | +| ir.cpp:2218:73:2218:73 | ChiTotal | total:m2218_30 | +| ir.cpp:2218:73:2218:73 | ChiTotal | total:m2218_31 | +| ir.cpp:2218:73:2218:73 | ChiTotal | total:m2218_38 | +| ir.cpp:2218:73:2218:73 | ChiTotal | total:m2218_43 | +| ir.cpp:2218:73:2218:73 | ChiTotal | total:m2218_73 | +| ir.cpp:2218:73:2218:73 | Condition | r2218_41 | +| ir.cpp:2218:73:2218:73 | Load | m2218_17 | +| ir.cpp:2218:73:2218:73 | Load | m2218_17 | +| ir.cpp:2218:73:2218:73 | Phi | from 10:m2218_23 | +| ir.cpp:2218:73:2218:73 | Phi | from 10:~m2218_11 | +| ir.cpp:2218:73:2218:73 | Phi | from 14:m2218_84 | +| ir.cpp:2218:73:2218:73 | Phi | from 14:~m2218_81 | +| ir.cpp:2218:73:2218:73 | SideEffect | m2218_30 | +| ir.cpp:2218:73:2218:73 | SideEffect | ~m2218_31 | +| ir.cpp:2218:73:2218:73 | SideEffect | ~m2218_38 | +| ir.cpp:2218:73:2218:73 | SideEffect | ~m2218_43 | +| ir.cpp:2218:73:2218:73 | SideEffect | ~m2218_73 | +| ir.cpp:2218:73:2218:73 | StoreValue | r2218_22 | +| ir.cpp:2218:73:2218:73 | StoreValue | r2218_28 | +| ir.cpp:2218:73:2218:73 | Unary | r2218_20 | +| ir.cpp:2218:73:2218:73 | Unary | r2218_26 | +| ir.cpp:2218:73:2218:73 | Unary | r2218_32 | +| ir.cpp:2218:73:2218:73 | Unary | r2218_35 | +| ir.cpp:2218:73:2218:73 | Unary | r2218_46 | +| ir.cpp:2218:73:2218:73 | Unary | r2218_79 | +| ir.cpp:2218:73:2218:74 | StoreValue | r2218_16 | +| ir.cpp:2218:73:2218:74 | Unary | r2218_15 | +| ir.cpp:2218:73:2218:75 | Load | ~m2218_50 | +| ir.cpp:2218:73:2218:75 | StoreValue | r2218_51 | +| ir.cpp:2219:7:2219:7 | Address | &:r2219_1 | +| ir.cpp:2219:7:2219:7 | Address | &:r2219_1 | +| ir.cpp:2219:7:2219:7 | Arg(this) | this:r2219_1 | +| ir.cpp:2219:7:2219:7 | ChiPartial | partial:m2219_8 | +| ir.cpp:2219:7:2219:7 | ChiTotal | total:m2218_52 | +| ir.cpp:2219:7:2219:7 | SideEffect | m2218_52 | +| ir.cpp:2219:9:2219:13 | CallTarget | func:r2219_2 | +| ir.cpp:2219:9:2219:13 | ChiPartial | partial:m2219_5 | +| ir.cpp:2219:9:2219:13 | ChiTotal | total:m2218_50 | +| ir.cpp:2219:9:2219:13 | SideEffect | ~m2218_50 | +| ir.cpp:2219:15:2219:17 | Arg(0) | 0:r2219_3 | +| ir.cpp:2220:11:2220:11 | Address | &:r2220_1 | +| ir.cpp:2220:11:2220:11 | Address | &:r2220_1 | +| ir.cpp:2220:11:2220:11 | Arg(this) | this:r2220_1 | +| ir.cpp:2220:11:2220:11 | ChiPartial | partial:m2220_7 | +| ir.cpp:2220:11:2220:11 | ChiTotal | total:m2219_9 | +| ir.cpp:2220:11:2220:11 | SideEffect | m2219_9 | +| ir.cpp:2220:11:2220:19 | Left | r2220_9 | +| ir.cpp:2220:11:2220:26 | Condition | r2220_11 | +| ir.cpp:2220:13:2220:17 | CallTarget | func:r2220_2 | +| ir.cpp:2220:13:2220:17 | ChiPartial | partial:m2220_4 | +| ir.cpp:2220:13:2220:17 | ChiTotal | total:m2219_6 | +| ir.cpp:2220:13:2220:17 | SideEffect | ~m2219_6 | +| ir.cpp:2220:13:2220:17 | Unary | r2220_3 | +| ir.cpp:2220:24:2220:26 | Right | r2220_10 | +| ir.cpp:2224:5:2224:5 | Address | &:r2224_10 | +| ir.cpp:2224:5:2224:5 | Address | &:r2224_14 | +| ir.cpp:2224:5:2224:5 | Address | &:r2224_20 | +| ir.cpp:2224:26:2224:27 | Address | &:r2224_1 | +| ir.cpp:2224:26:2224:27 | Address | &:r2224_1 | +| ir.cpp:2224:26:2224:27 | Address | &:r2224_58 | +| ir.cpp:2224:26:2224:27 | Address | &:r2224_58 | +| ir.cpp:2224:26:2224:27 | Arg(this) | this:r2224_1 | +| ir.cpp:2224:26:2224:27 | Arg(this) | this:r2224_58 | +| ir.cpp:2224:26:2224:27 | CallTarget | func:r2224_59 | +| ir.cpp:2224:26:2224:27 | ChiPartial | partial:m2224_61 | +| ir.cpp:2224:26:2224:27 | ChiPartial | partial:m2224_64 | +| ir.cpp:2224:26:2224:27 | ChiTotal | total:m2224_9 | +| ir.cpp:2224:26:2224:27 | ChiTotal | total:m2224_55 | +| ir.cpp:2224:26:2224:27 | SideEffect | m2224_9 | +| ir.cpp:2224:26:2224:27 | SideEffect | ~m2224_55 | +| ir.cpp:2224:29:2224:29 | Arg(0) | 0:r2224_4 | +| ir.cpp:2224:29:2224:30 | CallTarget | func:r2224_3 | +| ir.cpp:2224:29:2224:30 | ChiPartial | partial:m2224_6 | +| ir.cpp:2224:29:2224:30 | ChiPartial | partial:m2224_8 | +| ir.cpp:2224:29:2224:30 | ChiTotal | total:m2218_43 | +| ir.cpp:2224:29:2224:30 | ChiTotal | total:m2224_2 | +| ir.cpp:2224:29:2224:30 | SideEffect | ~m2218_43 | +| ir.cpp:2224:37:2224:37 | Address | &:r2224_50 | +| ir.cpp:2224:41:2224:41 | Address | &:r2224_15 | +| ir.cpp:2224:41:2224:41 | Address | &:r2224_21 | +| ir.cpp:2224:41:2224:41 | Address | &:r2224_41 | +| ir.cpp:2224:41:2224:41 | Address | &:r2224_41 | +| ir.cpp:2224:41:2224:41 | Address | &:r2224_53 | +| ir.cpp:2224:41:2224:41 | Arg(this) | this:r0_34 | +| ir.cpp:2224:41:2224:41 | Arg(this) | this:r0_37 | +| ir.cpp:2224:41:2224:41 | Arg(this) | this:r0_39 | +| ir.cpp:2224:41:2224:41 | Arg(this) | this:r0_40 | +| ir.cpp:2224:41:2224:41 | Arg(this) | this:r0_47 | +| ir.cpp:2224:41:2224:41 | Arg(this) | this:r2224_41 | +| ir.cpp:2224:41:2224:41 | CallTarget | func:r2224_17 | +| ir.cpp:2224:41:2224:41 | CallTarget | func:r2224_23 | +| ir.cpp:2224:41:2224:41 | CallTarget | func:r2224_29 | +| ir.cpp:2224:41:2224:41 | CallTarget | func:r2224_30 | +| ir.cpp:2224:41:2224:41 | CallTarget | func:r2224_42 | +| ir.cpp:2224:41:2224:41 | CallTarget | func:r2224_52 | +| ir.cpp:2224:41:2224:41 | ChiPartial | partial:m2224_33 | +| ir.cpp:2224:41:2224:41 | ChiPartial | partial:m2224_35 | +| ir.cpp:2224:41:2224:41 | ChiPartial | partial:m2224_38 | +| ir.cpp:2224:41:2224:41 | ChiPartial | partial:m2224_44 | +| ir.cpp:2224:41:2224:41 | ChiPartial | partial:m2224_47 | +| ir.cpp:2224:41:2224:41 | ChiPartial | partial:m2224_54 | +| ir.cpp:2224:41:2224:41 | ChiTotal | total:m0_41 | +| ir.cpp:2224:41:2224:41 | ChiTotal | total:m2224_26 | +| ir.cpp:2224:41:2224:41 | ChiTotal | total:m2224_27 | +| ir.cpp:2224:41:2224:41 | ChiTotal | total:m2224_34 | +| ir.cpp:2224:41:2224:41 | ChiTotal | total:m2224_39 | +| ir.cpp:2224:41:2224:41 | ChiTotal | total:m2224_55 | +| ir.cpp:2224:41:2224:41 | Condition | r2224_37 | +| ir.cpp:2224:41:2224:41 | Load | m2224_13 | +| ir.cpp:2224:41:2224:41 | Load | m2224_13 | +| ir.cpp:2224:41:2224:41 | Phi | from 15:m2224_19 | +| ir.cpp:2224:41:2224:41 | Phi | from 15:~m2224_7 | +| ir.cpp:2224:41:2224:41 | Phi | from 17:m2224_48 | +| ir.cpp:2224:41:2224:41 | Phi | from 17:~m2224_45 | +| ir.cpp:2224:41:2224:41 | SideEffect | m2224_26 | +| ir.cpp:2224:41:2224:41 | SideEffect | ~m2224_27 | +| ir.cpp:2224:41:2224:41 | SideEffect | ~m2224_34 | +| ir.cpp:2224:41:2224:41 | SideEffect | ~m2224_39 | +| ir.cpp:2224:41:2224:41 | SideEffect | ~m2224_55 | +| ir.cpp:2224:41:2224:41 | StoreValue | r2224_18 | +| ir.cpp:2224:41:2224:41 | StoreValue | r2224_24 | +| ir.cpp:2224:41:2224:41 | Unary | r2224_16 | +| ir.cpp:2224:41:2224:41 | Unary | r2224_22 | +| ir.cpp:2224:41:2224:41 | Unary | r2224_28 | +| ir.cpp:2224:41:2224:41 | Unary | r2224_31 | +| ir.cpp:2224:41:2224:41 | Unary | r2224_43 | +| ir.cpp:2224:41:2224:41 | Unary | r2224_51 | +| ir.cpp:2224:41:2224:42 | StoreValue | r2224_12 | +| ir.cpp:2224:41:2224:42 | Unary | r2224_11 | +| ir.cpp:2224:41:2224:43 | Load | ~m2224_55 | +| ir.cpp:2224:41:2224:43 | StoreValue | r2224_56 | +| ir.cpp:2225:11:2225:11 | Address | &:r2225_1 | +| ir.cpp:2225:11:2225:11 | Left | r2225_2 | +| ir.cpp:2225:11:2225:11 | Load | m2224_57 | +| ir.cpp:2225:11:2225:16 | Condition | r2225_4 | +| ir.cpp:2225:16:2225:16 | Right | r2225_3 | +| ir.cpp:2229:5:2229:5 | Address | &:r2229_14 | +| ir.cpp:2229:5:2229:5 | Address | &:r2229_18 | +| ir.cpp:2229:5:2229:5 | Address | &:r2229_24 | +| ir.cpp:2229:42:2229:43 | Address | &:r2229_1 | +| ir.cpp:2229:42:2229:43 | Address | &:r2229_1 | +| ir.cpp:2229:42:2229:43 | Arg(this) | this:r2229_1 | +| ir.cpp:2229:45:2229:45 | Address | &:r2229_4 | +| ir.cpp:2229:45:2229:45 | Address | &:r2229_4 | +| ir.cpp:2229:45:2229:45 | Address | &:r2229_5 | +| ir.cpp:2229:45:2229:45 | Arg(0) | 0:r2229_8 | +| ir.cpp:2229:45:2229:45 | Load | m2214_8 | +| ir.cpp:2229:45:2229:45 | Load | m2229_7 | +| ir.cpp:2229:45:2229:45 | StoreValue | r2229_6 | +| ir.cpp:2229:45:2229:46 | CallTarget | func:r2229_3 | +| ir.cpp:2229:45:2229:46 | ChiPartial | partial:m2229_10 | +| ir.cpp:2229:45:2229:46 | ChiPartial | partial:m2229_12 | +| ir.cpp:2229:45:2229:46 | ChiTotal | total:m2224_39 | +| ir.cpp:2229:45:2229:46 | ChiTotal | total:m2229_2 | +| ir.cpp:2229:45:2229:46 | SideEffect | ~m2224_39 | +| ir.cpp:2229:69:2229:69 | Address | &:r2229_45 | +| ir.cpp:2229:69:2229:69 | Address | &:r2229_53 | +| ir.cpp:2229:69:2229:69 | Address | &:r2229_53 | +| ir.cpp:2229:69:2229:69 | Arg(this) | this:r2229_53 | +| ir.cpp:2229:69:2229:69 | CallTarget | func:r2229_54 | +| ir.cpp:2229:69:2229:69 | ChiPartial | partial:m2229_56 | +| ir.cpp:2229:69:2229:69 | ChiPartial | partial:m2229_59 | +| ir.cpp:2229:69:2229:69 | ChiTotal | total:m2229_52 | +| ir.cpp:2229:69:2229:69 | ChiTotal | total:m2232_13 | +| ir.cpp:2229:69:2229:69 | SideEffect | m2229_52 | +| ir.cpp:2229:69:2229:69 | SideEffect | ~m2232_13 | +| ir.cpp:2229:73:2229:73 | Address | &:r2229_19 | +| ir.cpp:2229:73:2229:73 | Address | &:r2229_25 | +| ir.cpp:2229:73:2229:73 | Address | &:r2229_48 | +| ir.cpp:2229:73:2229:73 | Address | &:r2229_61 | +| ir.cpp:2229:73:2229:73 | Address | &:r2229_61 | +| ir.cpp:2229:73:2229:73 | Arg(this) | this:r0_50 | +| ir.cpp:2229:73:2229:73 | Arg(this) | this:r0_53 | +| ir.cpp:2229:73:2229:73 | Arg(this) | this:r0_55 | +| ir.cpp:2229:73:2229:73 | Arg(this) | this:r0_56 | +| ir.cpp:2229:73:2229:73 | Arg(this) | this:r0_63 | +| ir.cpp:2229:73:2229:73 | Arg(this) | this:r2229_61 | +| ir.cpp:2229:73:2229:73 | CallTarget | func:r2229_21 | +| ir.cpp:2229:73:2229:73 | CallTarget | func:r2229_27 | +| ir.cpp:2229:73:2229:73 | CallTarget | func:r2229_33 | +| ir.cpp:2229:73:2229:73 | CallTarget | func:r2229_34 | +| ir.cpp:2229:73:2229:73 | CallTarget | func:r2229_47 | +| ir.cpp:2229:73:2229:73 | CallTarget | func:r2229_62 | +| ir.cpp:2229:73:2229:73 | ChiPartial | partial:m2229_37 | +| ir.cpp:2229:73:2229:73 | ChiPartial | partial:m2229_39 | +| ir.cpp:2229:73:2229:73 | ChiPartial | partial:m2229_42 | +| ir.cpp:2229:73:2229:73 | ChiPartial | partial:m2229_49 | +| ir.cpp:2229:73:2229:73 | ChiPartial | partial:m2229_64 | +| ir.cpp:2229:73:2229:73 | ChiPartial | partial:m2229_67 | +| ir.cpp:2229:73:2229:73 | ChiTotal | total:m0_57 | +| ir.cpp:2229:73:2229:73 | ChiTotal | total:m2229_30 | +| ir.cpp:2229:73:2229:73 | ChiTotal | total:m2229_31 | +| ir.cpp:2229:73:2229:73 | ChiTotal | total:m2229_38 | +| ir.cpp:2229:73:2229:73 | ChiTotal | total:m2229_43 | +| ir.cpp:2229:73:2229:73 | ChiTotal | total:m2229_57 | +| ir.cpp:2229:73:2229:73 | Condition | r2229_41 | +| ir.cpp:2229:73:2229:73 | Load | m2229_17 | +| ir.cpp:2229:73:2229:73 | Load | m2229_17 | +| ir.cpp:2229:73:2229:73 | Phi | from 20:m2229_23 | +| ir.cpp:2229:73:2229:73 | Phi | from 20:~m2229_11 | +| ir.cpp:2229:73:2229:73 | Phi | from 22:m2229_68 | +| ir.cpp:2229:73:2229:73 | Phi | from 22:~m2229_65 | +| ir.cpp:2229:73:2229:73 | SideEffect | m2229_30 | +| ir.cpp:2229:73:2229:73 | SideEffect | ~m2229_31 | +| ir.cpp:2229:73:2229:73 | SideEffect | ~m2229_38 | +| ir.cpp:2229:73:2229:73 | SideEffect | ~m2229_43 | +| ir.cpp:2229:73:2229:73 | SideEffect | ~m2229_57 | +| ir.cpp:2229:73:2229:73 | StoreValue | r2229_22 | +| ir.cpp:2229:73:2229:73 | StoreValue | r2229_28 | +| ir.cpp:2229:73:2229:73 | Unary | r2229_20 | +| ir.cpp:2229:73:2229:73 | Unary | r2229_26 | +| ir.cpp:2229:73:2229:73 | Unary | r2229_32 | +| ir.cpp:2229:73:2229:73 | Unary | r2229_35 | +| ir.cpp:2229:73:2229:73 | Unary | r2229_46 | +| ir.cpp:2229:73:2229:73 | Unary | r2229_63 | +| ir.cpp:2229:73:2229:74 | StoreValue | r2229_16 | +| ir.cpp:2229:73:2229:74 | Unary | r2229_15 | +| ir.cpp:2229:73:2229:75 | Load | ~m2229_50 | +| ir.cpp:2229:73:2229:75 | StoreValue | r2229_51 | +| ir.cpp:2230:27:2230:28 | Address | &:r2230_1 | +| ir.cpp:2230:27:2230:28 | Address | &:r2230_1 | +| ir.cpp:2230:27:2230:28 | Arg(this) | this:r2230_1 | +| ir.cpp:2230:27:2230:28 | CallTarget | func:r2230_3 | +| ir.cpp:2230:27:2230:28 | ChiPartial | partial:m2230_5 | +| ir.cpp:2230:27:2230:28 | ChiPartial | partial:m2230_7 | +| ir.cpp:2230:27:2230:28 | ChiTotal | total:m2229_50 | +| ir.cpp:2230:27:2230:28 | ChiTotal | total:m2230_2 | +| ir.cpp:2230:27:2230:28 | SideEffect | ~m2229_50 | +| ir.cpp:2231:27:2231:28 | Address | &:r2231_1 | +| ir.cpp:2231:27:2231:28 | Address | &:r2231_1 | +| ir.cpp:2231:27:2231:28 | Arg(this) | this:r2231_1 | +| ir.cpp:2231:27:2231:28 | CallTarget | func:r2231_3 | +| ir.cpp:2231:27:2231:28 | ChiPartial | partial:m2231_5 | +| ir.cpp:2231:27:2231:28 | ChiPartial | partial:m2231_7 | +| ir.cpp:2231:27:2231:28 | ChiTotal | total:m2230_6 | +| ir.cpp:2231:27:2231:28 | ChiTotal | total:m2231_2 | +| ir.cpp:2231:27:2231:28 | SideEffect | ~m2230_6 | +| ir.cpp:2232:5:2232:5 | Address | &:r2232_1 | +| ir.cpp:2232:5:2232:5 | Address | &:r2232_1 | +| ir.cpp:2232:5:2232:5 | Address | &:r2232_9 | +| ir.cpp:2232:5:2232:5 | Address | &:r2232_9 | +| ir.cpp:2232:5:2232:5 | Arg(this) | this:r2232_1 | +| ir.cpp:2232:5:2232:5 | Arg(this) | this:r2232_9 | +| ir.cpp:2232:5:2232:5 | CallTarget | func:r2232_2 | +| ir.cpp:2232:5:2232:5 | CallTarget | func:r2232_10 | +| ir.cpp:2232:5:2232:5 | ChiPartial | partial:m2232_4 | +| ir.cpp:2232:5:2232:5 | ChiPartial | partial:m2232_7 | +| ir.cpp:2232:5:2232:5 | ChiPartial | partial:m2232_12 | +| ir.cpp:2232:5:2232:5 | ChiPartial | partial:m2232_15 | +| ir.cpp:2232:5:2232:5 | ChiTotal | total:m2230_8 | +| ir.cpp:2232:5:2232:5 | ChiTotal | total:m2231_6 | +| ir.cpp:2232:5:2232:5 | ChiTotal | total:m2231_8 | +| ir.cpp:2232:5:2232:5 | ChiTotal | total:m2232_5 | +| ir.cpp:2232:5:2232:5 | SideEffect | m2230_8 | +| ir.cpp:2232:5:2232:5 | SideEffect | m2231_8 | +| ir.cpp:2232:5:2232:5 | SideEffect | ~m2231_6 | +| ir.cpp:2232:5:2232:5 | SideEffect | ~m2232_5 | +| ir.cpp:2233:1:2233:1 | Address | &:r2233_1 | +| ir.cpp:2233:1:2233:1 | Address | &:r2233_1 | +| ir.cpp:2233:1:2233:1 | Address | &:r2233_9 | +| ir.cpp:2233:1:2233:1 | Address | &:r2233_9 | +| ir.cpp:2233:1:2233:1 | Address | &:r2233_18 | +| ir.cpp:2233:1:2233:1 | Address | &:r2233_18 | +| ir.cpp:2233:1:2233:1 | Arg(this) | this:r2233_1 | +| ir.cpp:2233:1:2233:1 | Arg(this) | this:r2233_9 | +| ir.cpp:2233:1:2233:1 | Arg(this) | this:r2233_18 | +| ir.cpp:2233:1:2233:1 | CallTarget | func:r2233_2 | +| ir.cpp:2233:1:2233:1 | CallTarget | func:r2233_10 | +| ir.cpp:2233:1:2233:1 | CallTarget | func:r2233_19 | +| ir.cpp:2233:1:2233:1 | ChiPartial | partial:m2233_4 | +| ir.cpp:2233:1:2233:1 | ChiPartial | partial:m2233_7 | +| ir.cpp:2233:1:2233:1 | ChiPartial | partial:m2233_12 | +| ir.cpp:2233:1:2233:1 | ChiPartial | partial:m2233_15 | +| ir.cpp:2233:1:2233:1 | ChiPartial | partial:m2233_21 | +| ir.cpp:2233:1:2233:1 | ChiPartial | partial:m2233_24 | +| ir.cpp:2233:1:2233:1 | ChiTotal | total:m2214_8 | +| ir.cpp:2233:1:2233:1 | ChiTotal | total:m2214_8 | +| ir.cpp:2233:1:2233:1 | ChiTotal | total:m2214_8 | +| ir.cpp:2233:1:2233:1 | ChiTotal | total:m2218_65 | +| ir.cpp:2233:1:2233:1 | ChiTotal | total:m2224_62 | +| ir.cpp:2233:1:2233:1 | ChiTotal | total:m2229_43 | +| ir.cpp:2233:1:2233:1 | SideEffect | m2214_8 | +| ir.cpp:2233:1:2233:1 | SideEffect | m2214_8 | +| ir.cpp:2233:1:2233:1 | SideEffect | m2214_8 | +| ir.cpp:2233:1:2233:1 | SideEffect | ~m2218_65 | +| ir.cpp:2233:1:2233:1 | SideEffect | ~m2224_62 | +| ir.cpp:2233:1:2233:1 | SideEffect | ~m2229_43 | +| ir.cpp:2235:6:2235:38 | ChiPartial | partial:m2235_3 | +| ir.cpp:2235:6:2235:38 | ChiTotal | total:m2235_2 | +| ir.cpp:2235:6:2235:38 | SideEffect | ~m2238_7 | +| ir.cpp:2236:25:2236:25 | Address | &:r2236_1 | +| ir.cpp:2236:25:2236:25 | Address | &:r2236_1 | +| ir.cpp:2236:25:2236:25 | Arg(this) | this:r2236_1 | +| ir.cpp:2236:25:2236:25 | CallTarget | func:r2236_3 | +| ir.cpp:2236:25:2236:25 | ChiPartial | partial:m2236_5 | +| ir.cpp:2236:25:2236:25 | ChiPartial | partial:m2236_7 | +| ir.cpp:2236:25:2236:25 | ChiTotal | total:m2235_4 | +| ir.cpp:2236:25:2236:25 | ChiTotal | total:m2236_2 | +| ir.cpp:2236:25:2236:25 | SideEffect | ~m2235_4 | +| ir.cpp:2237:32:2237:32 | Address | &:r2237_1 | +| ir.cpp:2237:32:2237:32 | Address | &:r2237_1 | +| ir.cpp:2237:32:2237:32 | Address | &:r2237_4 | +| ir.cpp:2237:32:2237:32 | Arg(this) | this:r2237_4 | +| ir.cpp:2237:32:2237:32 | ChiPartial | partial:m2237_6 | +| ir.cpp:2237:32:2237:32 | ChiTotal | total:m0_6 | +| ir.cpp:2237:32:2237:32 | Condition | r2237_2 | +| ir.cpp:2237:32:2237:32 | Load | ~m2236_6 | +| ir.cpp:2237:32:2237:32 | StoreValue | r2237_5 | +| ir.cpp:2238:1:2238:1 | Address | &:r2238_3 | +| ir.cpp:2238:1:2238:1 | Address | &:r2238_3 | +| ir.cpp:2238:1:2238:1 | Arg(this) | this:r2238_3 | +| ir.cpp:2238:1:2238:1 | CallTarget | func:r2238_4 | +| ir.cpp:2238:1:2238:1 | ChiPartial | partial:m2238_6 | +| ir.cpp:2238:1:2238:1 | ChiPartial | partial:m2238_9 | +| ir.cpp:2238:1:2238:1 | ChiTotal | total:m2236_8 | +| ir.cpp:2238:1:2238:1 | ChiTotal | total:m2238_1 | +| ir.cpp:2238:1:2238:1 | Phi | from 0:~m2236_6 | +| ir.cpp:2238:1:2238:1 | Phi | from 1:~m2237_7 | +| ir.cpp:2238:1:2238:1 | SideEffect | m2236_8 | +| ir.cpp:2238:1:2238:1 | SideEffect | ~m2238_1 | +| ir.cpp:2240:6:2240:38 | ChiPartial | partial:m2240_3 | +| ir.cpp:2240:6:2240:38 | ChiTotal | total:m2240_2 | +| ir.cpp:2240:6:2240:38 | SideEffect | ~m2243_6 | +| ir.cpp:2241:32:2241:32 | Address | &:r2241_1 | +| ir.cpp:2241:32:2241:32 | Address | &:r2241_1 | +| ir.cpp:2241:32:2241:32 | Address | &:r2241_4 | +| ir.cpp:2241:32:2241:32 | Arg(this) | this:r2241_4 | +| ir.cpp:2241:32:2241:32 | ChiPartial | partial:m2241_6 | +| ir.cpp:2241:32:2241:32 | ChiTotal | total:m0_6 | +| ir.cpp:2241:32:2241:32 | Condition | r2241_2 | +| ir.cpp:2241:32:2241:32 | Load | ~m2240_3 | +| ir.cpp:2241:32:2241:32 | StoreValue | r2241_5 | +| ir.cpp:2242:25:2242:25 | Address | &:r2242_2 | +| ir.cpp:2242:25:2242:25 | Address | &:r2242_2 | +| ir.cpp:2242:25:2242:25 | Arg(this) | this:r2242_2 | +| ir.cpp:2242:25:2242:25 | CallTarget | func:r2242_4 | +| ir.cpp:2242:25:2242:25 | ChiPartial | partial:m2242_6 | +| ir.cpp:2242:25:2242:25 | ChiPartial | partial:m2242_8 | +| ir.cpp:2242:25:2242:25 | ChiTotal | total:m2242_1 | +| ir.cpp:2242:25:2242:25 | ChiTotal | total:m2242_3 | +| ir.cpp:2242:25:2242:25 | Phi | from 0:~m2240_4 | +| ir.cpp:2242:25:2242:25 | Phi | from 1:~m2241_7 | +| ir.cpp:2242:25:2242:25 | SideEffect | ~m2242_1 | +| ir.cpp:2243:1:2243:1 | Address | &:r2243_2 | +| ir.cpp:2243:1:2243:1 | Address | &:r2243_2 | +| ir.cpp:2243:1:2243:1 | Arg(this) | this:r2243_2 | +| ir.cpp:2243:1:2243:1 | CallTarget | func:r2243_3 | +| ir.cpp:2243:1:2243:1 | ChiPartial | partial:m2243_5 | +| ir.cpp:2243:1:2243:1 | ChiPartial | partial:m2243_8 | +| ir.cpp:2243:1:2243:1 | ChiTotal | total:m2242_7 | +| ir.cpp:2243:1:2243:1 | ChiTotal | total:m2242_9 | +| ir.cpp:2243:1:2243:1 | SideEffect | m2242_9 | +| ir.cpp:2243:1:2243:1 | SideEffect | ~m2242_7 | +| ir.cpp:2245:6:2245:38 | ChiPartial | partial:m2245_3 | +| ir.cpp:2245:6:2245:38 | ChiTotal | total:m2245_2 | +| ir.cpp:2245:6:2245:38 | SideEffect | ~m2249_15 | +| ir.cpp:2246:25:2246:25 | Address | &:r2246_1 | +| ir.cpp:2246:25:2246:25 | Address | &:r2246_1 | +| ir.cpp:2246:25:2246:25 | Arg(this) | this:r2246_1 | +| ir.cpp:2246:25:2246:25 | CallTarget | func:r2246_3 | +| ir.cpp:2246:25:2246:25 | ChiPartial | partial:m2246_5 | +| ir.cpp:2246:25:2246:25 | ChiPartial | partial:m2246_7 | +| ir.cpp:2246:25:2246:25 | ChiTotal | total:m2245_4 | +| ir.cpp:2246:25:2246:25 | ChiTotal | total:m2246_2 | +| ir.cpp:2246:25:2246:25 | SideEffect | ~m2245_4 | +| ir.cpp:2247:25:2247:25 | Address | &:r2247_1 | +| ir.cpp:2247:25:2247:25 | Address | &:r2247_1 | +| ir.cpp:2247:25:2247:25 | Arg(this) | this:r2247_1 | +| ir.cpp:2247:25:2247:25 | CallTarget | func:r2247_3 | +| ir.cpp:2247:25:2247:25 | ChiPartial | partial:m2247_5 | +| ir.cpp:2247:25:2247:25 | ChiPartial | partial:m2247_7 | +| ir.cpp:2247:25:2247:25 | ChiTotal | total:m2246_6 | +| ir.cpp:2247:25:2247:25 | ChiTotal | total:m2247_2 | +| ir.cpp:2247:25:2247:25 | SideEffect | ~m2246_6 | +| ir.cpp:2248:32:2248:32 | Address | &:r2248_1 | +| ir.cpp:2248:32:2248:32 | Address | &:r2248_1 | +| ir.cpp:2248:32:2248:32 | Address | &:r2248_4 | +| ir.cpp:2248:32:2248:32 | Arg(this) | this:r2248_4 | +| ir.cpp:2248:32:2248:32 | ChiPartial | partial:m2248_6 | +| ir.cpp:2248:32:2248:32 | ChiTotal | total:m0_6 | +| ir.cpp:2248:32:2248:32 | Condition | r2248_2 | +| ir.cpp:2248:32:2248:32 | Load | ~m2247_6 | +| ir.cpp:2248:32:2248:32 | StoreValue | r2248_5 | +| ir.cpp:2249:1:2249:1 | Address | &:r2249_3 | +| ir.cpp:2249:1:2249:1 | Address | &:r2249_3 | +| ir.cpp:2249:1:2249:1 | Address | &:r2249_11 | +| ir.cpp:2249:1:2249:1 | Address | &:r2249_11 | +| ir.cpp:2249:1:2249:1 | Arg(this) | this:r2249_3 | +| ir.cpp:2249:1:2249:1 | Arg(this) | this:r2249_11 | +| ir.cpp:2249:1:2249:1 | CallTarget | func:r2249_4 | +| ir.cpp:2249:1:2249:1 | CallTarget | func:r2249_12 | +| ir.cpp:2249:1:2249:1 | ChiPartial | partial:m2249_6 | +| ir.cpp:2249:1:2249:1 | ChiPartial | partial:m2249_9 | +| ir.cpp:2249:1:2249:1 | ChiPartial | partial:m2249_14 | +| ir.cpp:2249:1:2249:1 | ChiPartial | partial:m2249_17 | +| ir.cpp:2249:1:2249:1 | ChiTotal | total:m2246_8 | +| ir.cpp:2249:1:2249:1 | ChiTotal | total:m2247_8 | +| ir.cpp:2249:1:2249:1 | ChiTotal | total:m2249_1 | +| ir.cpp:2249:1:2249:1 | ChiTotal | total:m2249_7 | +| ir.cpp:2249:1:2249:1 | Phi | from 0:~m2247_6 | +| ir.cpp:2249:1:2249:1 | Phi | from 1:~m2248_7 | +| ir.cpp:2249:1:2249:1 | SideEffect | m2246_8 | +| ir.cpp:2249:1:2249:1 | SideEffect | m2247_8 | +| ir.cpp:2249:1:2249:1 | SideEffect | ~m2249_1 | +| ir.cpp:2249:1:2249:1 | SideEffect | ~m2249_7 | +| ir.cpp:2251:28:2251:55 | Address | &:r2251_3 | +| ir.cpp:2251:28:2251:55 | Arg(this) | this:r2251_3 | +| ir.cpp:2251:28:2251:55 | CallTarget | func:r2251_4 | +| ir.cpp:2251:28:2251:55 | ChiPartial | partial:m2251_6 | +| ir.cpp:2251:28:2251:55 | ChiPartial | partial:m2251_8 | +| ir.cpp:2251:28:2251:55 | ChiTotal | total:m2251_2 | +| ir.cpp:2251:28:2251:55 | ChiTotal | total:m2251_7 | +| ir.cpp:2251:28:2251:55 | SideEffect | ~m2251_2 | +| ir.cpp:2251:28:2251:55 | SideEffect | ~m2251_9 | +| ir.cpp:2255:8:2255:8 | Address | &:r2255_16 | +| ir.cpp:2255:8:2255:8 | Address | &:r2255_16 | +| ir.cpp:2255:8:2255:8 | ChiPartial | partial:m2255_3 | +| ir.cpp:2255:8:2255:8 | ChiPartial | partial:m2255_3 | +| ir.cpp:2255:8:2255:8 | ChiTotal | total:m2255_2 | +| ir.cpp:2255:8:2255:8 | ChiTotal | total:m2255_2 | +| ir.cpp:2255:8:2255:8 | Load | m2255_14 | +| ir.cpp:2255:8:2255:8 | Load | m2255_14 | +| ir.cpp:2255:8:2255:8 | SideEffect | m2255_3 | +| ir.cpp:2255:8:2255:8 | SideEffect | m2255_3 | +| ir.cpp:2255:15:2255:15 | Address | &:r2255_5 | +| ir.cpp:2255:15:2255:15 | Address | &:r2255_5 | +| ir.cpp:2255:15:2255:15 | Address | &:r2255_5 | +| ir.cpp:2255:15:2255:15 | Address | &:r2255_5 | +| ir.cpp:2255:15:2255:15 | Address | &:r2255_7 | +| ir.cpp:2255:15:2255:15 | Address | &:r2255_7 | +| ir.cpp:2255:15:2255:15 | Address | &:r2255_7 | +| ir.cpp:2255:15:2255:15 | Address | &:r2255_7 | +| ir.cpp:2255:15:2255:15 | Load | m2255_6 | +| ir.cpp:2255:15:2255:15 | Load | m2255_6 | +| ir.cpp:2255:15:2255:15 | SideEffect | m2255_8 | +| ir.cpp:2255:15:2255:15 | SideEffect | m2255_8 | +| ir.cpp:2255:20:2255:28 | Address | &:r2255_9 | +| ir.cpp:2255:20:2255:28 | Address | &:r2255_9 | +| ir.cpp:2255:27:2255:27 | Address | &:r2255_10 | +| ir.cpp:2255:27:2255:27 | Address | &:r2255_10 | +| ir.cpp:2255:27:2255:27 | Load | m2255_6 | +| ir.cpp:2255:27:2255:27 | Load | m2255_6 | +| ir.cpp:2255:27:2255:27 | StoreValue | r2255_13 | +| ir.cpp:2255:27:2255:27 | StoreValue | r2255_13 | +| ir.cpp:2255:27:2255:27 | Unary | r2255_11 | +| ir.cpp:2255:27:2255:27 | Unary | r2255_11 | +| ir.cpp:2255:27:2255:27 | Unary | r2255_12 | +| ir.cpp:2255:27:2255:27 | Unary | r2255_12 | +| ir.cpp:2258:10:2258:10 | ChiPartial | partial:m2258_3 | +| ir.cpp:2258:10:2258:10 | ChiPartial | partial:m2258_3 | +| ir.cpp:2258:10:2258:10 | ChiTotal | total:m2258_2 | +| ir.cpp:2258:10:2258:10 | ChiTotal | total:m2258_2 | +| ir.cpp:2258:10:2258:10 | SideEffect | ~m2259_8 | +| ir.cpp:2258:10:2258:10 | SideEffect | ~m2259_16 | +| ir.cpp:2258:29:2258:29 | Address | &:r2258_5 | +| ir.cpp:2258:29:2258:29 | Address | &:r2258_5 | +| ir.cpp:2258:29:2258:29 | Address | &:r2258_5 | +| ir.cpp:2258:29:2258:29 | Address | &:r2258_5 | +| ir.cpp:2258:29:2258:29 | Address | &:r2258_7 | +| ir.cpp:2258:29:2258:29 | Address | &:r2258_7 | +| ir.cpp:2258:29:2258:29 | Address | &:r2258_7 | +| ir.cpp:2258:29:2258:29 | Address | &:r2258_7 | +| ir.cpp:2258:29:2258:29 | Load | m2258_6 | +| ir.cpp:2258:29:2258:29 | Load | m2258_6 | +| ir.cpp:2258:29:2258:29 | SideEffect | m2259_11 | +| ir.cpp:2258:29:2258:29 | SideEffect | m2259_19 | +| ir.cpp:2259:9:2259:11 | CallTarget | func:r2259_1 | +| ir.cpp:2259:9:2259:11 | CallTarget | func:r2259_1 | +| ir.cpp:2259:9:2259:11 | ChiPartial | partial:m2259_7 | +| ir.cpp:2259:9:2259:11 | ChiPartial | partial:m2259_7 | +| ir.cpp:2259:9:2259:11 | ChiTotal | total:m2258_4 | +| ir.cpp:2259:9:2259:11 | ChiTotal | total:m2258_4 | +| ir.cpp:2259:9:2259:11 | SideEffect | ~m2258_4 | +| ir.cpp:2259:9:2259:11 | SideEffect | ~m2258_4 | +| ir.cpp:2259:9:2259:11 | Unary | r2259_6 | +| ir.cpp:2259:9:2259:11 | Unary | r2259_6 | +| ir.cpp:2259:12:2259:15 | Address | &:r2259_12 | +| ir.cpp:2259:12:2259:15 | Address | &:r2259_12 | +| ir.cpp:2259:12:2259:15 | ChiPartial | partial:m2259_18 | +| ir.cpp:2259:12:2259:15 | ChiTotal | total:m2259_11 | +| ir.cpp:2259:12:2259:15 | SideEffect | ~m2259_11 | +| ir.cpp:2259:13:2259:13 | Address | &:r2259_2 | +| ir.cpp:2259:13:2259:13 | Address | &:r2259_2 | +| ir.cpp:2259:13:2259:13 | Address | &:r2259_5 | +| ir.cpp:2259:13:2259:13 | Address | &:r2259_5 | +| ir.cpp:2259:13:2259:13 | Address | &:r2259_5 | +| ir.cpp:2259:13:2259:13 | Address | &:r2259_5 | +| ir.cpp:2259:13:2259:13 | Arg(0) | 0:r2259_5 | +| ir.cpp:2259:13:2259:13 | Arg(0) | 0:r2259_5 | +| ir.cpp:2259:13:2259:13 | ChiPartial | partial:m2259_10 | +| ir.cpp:2259:13:2259:13 | ChiPartial | partial:m2259_10 | +| ir.cpp:2259:13:2259:13 | ChiTotal | total:m2258_8 | +| ir.cpp:2259:13:2259:13 | ChiTotal | total:m2258_8 | +| ir.cpp:2259:13:2259:13 | Load | m2258_6 | +| ir.cpp:2259:13:2259:13 | Load | m2258_6 | +| ir.cpp:2259:13:2259:13 | SideEffect | ~m2258_8 | +| ir.cpp:2259:13:2259:13 | SideEffect | ~m2258_8 | +| ir.cpp:2259:13:2259:13 | Unary | r2259_3 | +| ir.cpp:2259:13:2259:13 | Unary | r2259_3 | +| ir.cpp:2259:13:2259:13 | Unary | r2259_4 | +| ir.cpp:2259:13:2259:13 | Unary | r2259_4 | +| ir.cpp:2259:16:2259:17 | CallTarget | func:r2259_13 | +| ir.cpp:2259:16:2259:17 | ChiPartial | partial:m2259_15 | +| ir.cpp:2259:16:2259:17 | ChiTotal | total:m2259_8 | +| ir.cpp:2259:16:2259:17 | SideEffect | ~m2259_8 | +| ir.cpp:2262:10:2262:36 | ChiPartial | partial:m2262_3 | +| ir.cpp:2262:10:2262:36 | ChiTotal | total:m2262_2 | +| ir.cpp:2262:10:2262:36 | SideEffect | ~m2265_6 | +| ir.cpp:2263:29:2263:29 | Address | &:r2263_1 | +| ir.cpp:2263:29:2263:29 | Address | &:r2263_1 | +| ir.cpp:2263:29:2263:29 | Arg(this) | this:r2263_1 | +| ir.cpp:2263:29:2263:29 | CallTarget | func:r2263_3 | +| ir.cpp:2263:29:2263:29 | ChiPartial | partial:m2263_5 | +| ir.cpp:2263:29:2263:29 | ChiPartial | partial:m2263_7 | +| ir.cpp:2263:29:2263:29 | ChiTotal | total:m2262_4 | +| ir.cpp:2263:29:2263:29 | ChiTotal | total:m2263_2 | +| ir.cpp:2263:29:2263:29 | SideEffect | ~m2262_4 | +| ir.cpp:2264:9:2264:23 | CallTarget | func:r2264_1 | +| ir.cpp:2264:9:2264:23 | ChiPartial | partial:m2264_5 | +| ir.cpp:2264:9:2264:23 | ChiTotal | total:m2263_6 | +| ir.cpp:2264:9:2264:23 | SideEffect | ~m2263_6 | +| ir.cpp:2264:25:2264:25 | Address | &:r2264_3 | +| ir.cpp:2264:25:2264:25 | Address | &:r2264_3 | +| ir.cpp:2264:25:2264:25 | Arg(0) | 0:r2264_3 | +| ir.cpp:2264:25:2264:25 | ChiPartial | partial:m2264_8 | +| ir.cpp:2264:25:2264:25 | ChiTotal | total:m2263_8 | +| ir.cpp:2264:25:2264:25 | SideEffect | ~m2263_8 | +| ir.cpp:2264:25:2264:25 | Unary | r2264_2 | +| ir.cpp:2265:5:2265:5 | Address | &:r2265_2 | +| ir.cpp:2265:5:2265:5 | Address | &:r2265_2 | +| ir.cpp:2265:5:2265:5 | Arg(this) | this:r2265_2 | +| ir.cpp:2265:5:2265:5 | CallTarget | func:r2265_3 | +| ir.cpp:2265:5:2265:5 | ChiPartial | partial:m2265_5 | +| ir.cpp:2265:5:2265:5 | ChiPartial | partial:m2265_8 | +| ir.cpp:2265:5:2265:5 | ChiTotal | total:m2264_6 | +| ir.cpp:2265:5:2265:5 | ChiTotal | total:m2264_9 | +| ir.cpp:2265:5:2265:5 | SideEffect | m2264_9 | +| ir.cpp:2265:5:2265:5 | SideEffect | ~m2264_6 | +| ir.cpp:2267:10:2267:32 | ChiPartial | partial:m2267_3 | +| ir.cpp:2267:10:2267:32 | ChiTotal | total:m2267_2 | +| ir.cpp:2267:10:2267:32 | SideEffect | ~m2269_6 | +| ir.cpp:2268:13:2268:13 | Address | &:r2268_1 | +| ir.cpp:2269:9:2269:23 | CallTarget | func:r2269_1 | +| ir.cpp:2269:9:2269:23 | ChiPartial | partial:m2269_5 | +| ir.cpp:2269:9:2269:23 | ChiTotal | total:m2267_4 | +| ir.cpp:2269:9:2269:23 | SideEffect | ~m2267_4 | +| ir.cpp:2269:25:2269:25 | Address | &:r2269_3 | +| ir.cpp:2269:25:2269:25 | Address | &:r2269_3 | +| ir.cpp:2269:25:2269:25 | Arg(0) | 0:r2269_3 | +| ir.cpp:2269:25:2269:25 | ChiPartial | partial:m2269_8 | +| ir.cpp:2269:25:2269:25 | ChiTotal | total:m2268_2 | +| ir.cpp:2269:25:2269:25 | SideEffect | ~m2268_2 | +| ir.cpp:2269:25:2269:25 | Unary | r2269_2 | +| ir.cpp:2273:6:2273:24 | ChiPartial | partial:m2273_3 | +| ir.cpp:2273:6:2273:24 | ChiTotal | total:m2273_2 | +| ir.cpp:2273:6:2273:24 | Phi | from 2:~m2273_10 | +| ir.cpp:2273:6:2273:24 | Phi | from 6:~m2282_8 | +| ir.cpp:2273:6:2273:24 | Phi | from 9:~m2275_6 | +| ir.cpp:2273:6:2273:24 | Phi | from 10:~m2289_1 | +| ir.cpp:2273:6:2273:24 | SideEffect | ~m2273_7 | +| ir.cpp:2273:31:2273:31 | Address | &:r2273_5 | +| ir.cpp:2275:12:2275:12 | Address | &:r2275_1 | +| ir.cpp:2275:12:2275:12 | Address | &:r2275_1 | +| ir.cpp:2275:12:2275:12 | Arg(this) | this:r2275_1 | +| ir.cpp:2275:12:2275:12 | CallTarget | func:r2275_3 | +| ir.cpp:2275:12:2275:12 | ChiPartial | partial:m2275_5 | +| ir.cpp:2275:12:2275:12 | ChiPartial | partial:m2275_7 | +| ir.cpp:2275:12:2275:12 | ChiTotal | total:m2273_4 | +| ir.cpp:2275:12:2275:12 | ChiTotal | total:m2275_2 | +| ir.cpp:2275:12:2275:12 | SideEffect | ~m2273_4 | +| ir.cpp:2276:9:2276:9 | Address | &:r2276_1 | +| ir.cpp:2276:9:2276:9 | Condition | r2276_2 | +| ir.cpp:2276:9:2276:9 | Load | m2273_6 | +| ir.cpp:2277:7:2277:28 | Address | &:r2277_1 | +| ir.cpp:2277:7:2277:28 | Address | &:r2277_1 | +| ir.cpp:2277:7:2277:28 | Load | m2277_4 | +| ir.cpp:2277:13:2277:28 | StoreValue | r2277_3 | +| ir.cpp:2277:13:2277:28 | Unary | r2277_2 | +| ir.cpp:2279:12:2279:13 | Address | &:r2279_1 | +| ir.cpp:2279:12:2279:13 | Address | &:r2279_1 | +| ir.cpp:2279:12:2279:13 | Arg(this) | this:r2279_1 | +| ir.cpp:2279:12:2279:13 | CallTarget | func:r2279_3 | +| ir.cpp:2279:12:2279:13 | ChiPartial | partial:m2279_5 | +| ir.cpp:2279:12:2279:13 | ChiPartial | partial:m2279_7 | +| ir.cpp:2279:12:2279:13 | ChiTotal | total:m2275_6 | +| ir.cpp:2279:12:2279:13 | ChiTotal | total:m2279_2 | +| ir.cpp:2279:12:2279:13 | SideEffect | ~m2275_6 | +| ir.cpp:2280:3:2280:3 | Address | &:r2280_1 | +| ir.cpp:2280:3:2280:3 | Address | &:r2280_1 | +| ir.cpp:2280:3:2280:3 | Address | &:r2280_9 | +| ir.cpp:2280:3:2280:3 | Address | &:r2280_9 | +| ir.cpp:2280:3:2280:3 | Arg(this) | this:r2280_1 | +| ir.cpp:2280:3:2280:3 | Arg(this) | this:r2280_9 | +| ir.cpp:2280:3:2280:3 | CallTarget | func:r2280_2 | +| ir.cpp:2280:3:2280:3 | CallTarget | func:r2280_10 | +| ir.cpp:2280:3:2280:3 | ChiPartial | partial:m2280_4 | +| ir.cpp:2280:3:2280:3 | ChiPartial | partial:m2280_7 | +| ir.cpp:2280:3:2280:3 | ChiPartial | partial:m2280_12 | +| ir.cpp:2280:3:2280:3 | ChiPartial | partial:m2280_15 | +| ir.cpp:2280:3:2280:3 | ChiTotal | total:m2275_8 | +| ir.cpp:2280:3:2280:3 | ChiTotal | total:m2279_6 | +| ir.cpp:2280:3:2280:3 | ChiTotal | total:m2279_8 | +| ir.cpp:2280:3:2280:3 | ChiTotal | total:m2280_5 | +| ir.cpp:2280:3:2280:3 | SideEffect | m2275_8 | +| ir.cpp:2280:3:2280:3 | SideEffect | m2279_8 | +| ir.cpp:2280:3:2280:3 | SideEffect | ~m2279_6 | +| ir.cpp:2280:3:2280:3 | SideEffect | ~m2280_5 | +| ir.cpp:2281:22:2281:22 | Address | &:r2281_2 | +| ir.cpp:2281:22:2281:22 | Address | &:r2281_2 | +| ir.cpp:2281:22:2281:22 | Address | &:r2281_4 | +| ir.cpp:2281:22:2281:22 | Load | m2281_3 | +| ir.cpp:2282:5:2282:19 | Address | &:r2282_1 | +| ir.cpp:2282:5:2282:19 | Address | &:r2282_1 | +| ir.cpp:2282:5:2282:19 | Address | &:r2282_1 | +| ir.cpp:2282:5:2282:19 | Arg(this) | this:r2282_1 | +| ir.cpp:2282:5:2282:19 | CallTarget | func:r2282_3 | +| ir.cpp:2282:5:2282:19 | ChiPartial | partial:m2282_7 | +| ir.cpp:2282:5:2282:19 | ChiPartial | partial:m2282_10 | +| ir.cpp:2282:5:2282:19 | ChiTotal | total:m2275_6 | +| ir.cpp:2282:5:2282:19 | ChiTotal | total:m2282_2 | +| ir.cpp:2282:5:2282:19 | Load | m2282_11 | +| ir.cpp:2282:5:2282:19 | SideEffect | ~m2275_6 | +| ir.cpp:2282:18:2282:18 | Address | &:r2282_4 | +| ir.cpp:2282:18:2282:18 | Address | &:r2282_5 | +| ir.cpp:2282:18:2282:18 | Arg(0) | 0:r2282_5 | +| ir.cpp:2282:18:2282:18 | Load | m2281_3 | +| ir.cpp:2282:18:2282:18 | SideEffect | ~m2281_5 | +| ir.cpp:2284:24:2284:24 | Address | &:r2284_2 | +| ir.cpp:2284:24:2284:24 | Address | &:r2284_2 | +| ir.cpp:2284:24:2284:24 | Address | &:r2284_4 | +| ir.cpp:2284:24:2284:24 | Load | m2284_3 | +| ir.cpp:2289:1:2289:1 | Phi | from 4:~m2280_13 | +| ir.cpp:2289:1:2289:1 | Phi | from 8:~m2275_6 | +| ir.cpp:2291:6:2291:18 | ChiPartial | partial:m2291_3 | +| ir.cpp:2291:6:2291:18 | ChiTotal | total:m2291_2 | +| ir.cpp:2291:6:2291:18 | SideEffect | ~m2299_14 | +| ir.cpp:2291:25:2291:25 | Address | &:r2291_5 | +| ir.cpp:2292:12:2292:13 | Address | &:r2292_1 | +| ir.cpp:2292:12:2292:13 | Address | &:r2292_1 | +| ir.cpp:2292:12:2292:13 | Arg(this) | this:r2292_1 | +| ir.cpp:2292:12:2292:13 | CallTarget | func:r2292_3 | +| ir.cpp:2292:12:2292:13 | ChiPartial | partial:m2292_5 | +| ir.cpp:2292:12:2292:13 | ChiPartial | partial:m2292_7 | +| ir.cpp:2292:12:2292:13 | ChiTotal | total:m2291_4 | +| ir.cpp:2292:12:2292:13 | ChiTotal | total:m2292_2 | +| ir.cpp:2292:12:2292:13 | SideEffect | ~m2291_4 | +| ir.cpp:2293:8:2293:8 | Address | &:r2293_1 | +| ir.cpp:2293:8:2293:8 | Condition | r2293_2 | +| ir.cpp:2293:8:2293:8 | Load | m2291_6 | | ir.cpp:2294:16:2294:17 | Address | &:r2294_1 | | ir.cpp:2294:16:2294:17 | Address | &:r2294_1 | | ir.cpp:2294:16:2294:17 | Arg(this) | this:r2294_1 | | ir.cpp:2294:16:2294:17 | CallTarget | func:r2294_3 | | ir.cpp:2294:16:2294:17 | ChiPartial | partial:m2294_5 | | ir.cpp:2294:16:2294:17 | ChiPartial | partial:m2294_7 | -| ir.cpp:2294:16:2294:17 | ChiTotal | total:m2293_64 | +| ir.cpp:2294:16:2294:17 | ChiTotal | total:m2292_6 | | ir.cpp:2294:16:2294:17 | ChiTotal | total:m2294_2 | -| ir.cpp:2294:16:2294:17 | SideEffect | ~m2293_64 | +| ir.cpp:2294:16:2294:17 | SideEffect | ~m2292_6 | | ir.cpp:2295:5:2295:5 | Address | &:r2295_1 | | ir.cpp:2295:5:2295:5 | Address | &:r2295_1 | | ir.cpp:2295:5:2295:5 | Arg(this) | this:r2295_1 | @@ -12128,408 +12047,958 @@ | ir.cpp:2295:5:2295:5 | ChiTotal | total:m2294_8 | | ir.cpp:2295:5:2295:5 | SideEffect | m2294_8 | | ir.cpp:2295:5:2295:5 | SideEffect | ~m2294_6 | -| ir.cpp:2297:16:2297:16 | Address | &:r2297_1 | -| ir.cpp:2297:16:2297:16 | Address | &:r2297_1 | -| ir.cpp:2297:16:2297:16 | Address | &:r2297_50 | -| ir.cpp:2297:16:2297:16 | Address | &:r2297_50 | -| ir.cpp:2297:16:2297:16 | Arg(this) | this:r2297_1 | -| ir.cpp:2297:16:2297:16 | Arg(this) | this:r2297_50 | -| ir.cpp:2297:16:2297:16 | CallTarget | func:r2297_51 | -| ir.cpp:2297:16:2297:16 | ChiPartial | partial:m2297_53 | -| ir.cpp:2297:16:2297:16 | ChiPartial | partial:m2297_56 | -| ir.cpp:2297:16:2297:16 | ChiTotal | total:m2297_23 | -| ir.cpp:2297:16:2297:16 | ChiTotal | total:m2297_46 | -| ir.cpp:2297:16:2297:16 | SideEffect | m2297_23 | -| ir.cpp:2297:16:2297:16 | SideEffect | ~m2297_46 | -| ir.cpp:2297:18:2297:24 | Address | &:r2297_5 | -| ir.cpp:2297:18:2297:24 | Arg(0) | 0:r2297_5 | -| ir.cpp:2297:18:2297:24 | SideEffect | ~m2287_3 | -| ir.cpp:2297:18:2297:24 | Unary | r2297_4 | -| ir.cpp:2297:18:2297:25 | CallTarget | func:r2297_3 | -| ir.cpp:2297:18:2297:25 | ChiPartial | partial:m2297_7 | -| ir.cpp:2297:18:2297:25 | ChiPartial | partial:m2297_10 | -| ir.cpp:2297:18:2297:25 | ChiTotal | total:m2293_49 | -| ir.cpp:2297:18:2297:25 | ChiTotal | total:m2297_2 | -| ir.cpp:2297:18:2297:25 | SideEffect | ~m2293_49 | -| ir.cpp:2297:28:2297:29 | Address | &:r2297_12 | -| ir.cpp:2297:28:2297:29 | Address | &:r2297_12 | -| ir.cpp:2297:28:2297:29 | Address | &:r2297_42 | -| ir.cpp:2297:28:2297:29 | Address | &:r2297_42 | -| ir.cpp:2297:28:2297:29 | Arg(this) | this:r2297_12 | -| ir.cpp:2297:28:2297:29 | Arg(this) | this:r2297_42 | -| ir.cpp:2297:28:2297:29 | CallTarget | func:r2297_43 | -| ir.cpp:2297:28:2297:29 | ChiPartial | partial:m2297_45 | -| ir.cpp:2297:28:2297:29 | ChiPartial | partial:m2297_48 | -| ir.cpp:2297:28:2297:29 | ChiTotal | total:m2297_22 | -| ir.cpp:2297:28:2297:29 | ChiTotal | total:m2297_24 | -| ir.cpp:2297:28:2297:29 | SideEffect | m2297_22 | -| ir.cpp:2297:28:2297:29 | SideEffect | ~m2297_24 | -| ir.cpp:2297:31:2297:37 | Address | &:r2297_16 | -| ir.cpp:2297:31:2297:37 | Arg(0) | 0:r2297_16 | -| ir.cpp:2297:31:2297:37 | SideEffect | ~m2287_3 | -| ir.cpp:2297:31:2297:37 | Unary | r2297_15 | -| ir.cpp:2297:31:2297:38 | CallTarget | func:r2297_14 | -| ir.cpp:2297:31:2297:38 | ChiPartial | partial:m2297_18 | -| ir.cpp:2297:31:2297:38 | ChiPartial | partial:m2297_21 | -| ir.cpp:2297:31:2297:38 | ChiTotal | total:m2297_8 | -| ir.cpp:2297:31:2297:38 | ChiTotal | total:m2297_13 | -| ir.cpp:2297:31:2297:38 | SideEffect | ~m2297_8 | -| ir.cpp:2297:41:2297:41 | Address | &:r2297_26 | -| ir.cpp:2297:41:2297:41 | Left | r2297_28 | -| ir.cpp:2297:41:2297:41 | Load | m2297_25 | -| ir.cpp:2297:41:2297:41 | Phi | from 6:m2289_14 | -| ir.cpp:2297:41:2297:41 | Phi | from 6:m2297_11 | -| ir.cpp:2297:41:2297:41 | Phi | from 6:~m2297_19 | -| ir.cpp:2297:41:2297:41 | Phi | from 8:m2297_39 | -| ir.cpp:2297:41:2297:41 | Phi | from 8:m2297_41 | -| ir.cpp:2297:41:2297:41 | Phi | from 8:~m2297_36 | -| ir.cpp:2297:41:2297:41 | Unary | r2297_27 | -| ir.cpp:2297:41:2297:46 | Condition | r2297_30 | -| ir.cpp:2297:46:2297:46 | Right | r2297_29 | -| ir.cpp:2297:49:2297:49 | Address | &:r2297_40 | -| ir.cpp:2297:53:2297:53 | Address | &:r2297_32 | -| ir.cpp:2297:53:2297:53 | Address | &:r2297_32 | -| ir.cpp:2297:53:2297:53 | Arg(this) | this:r2297_32 | -| ir.cpp:2297:53:2297:53 | ChiPartial | partial:m2297_38 | -| ir.cpp:2297:53:2297:53 | ChiTotal | total:m2297_23 | -| ir.cpp:2297:53:2297:53 | SideEffect | m2297_23 | -| ir.cpp:2297:55:2297:62 | CallTarget | func:r2297_33 | -| ir.cpp:2297:55:2297:62 | ChiPartial | partial:m2297_35 | -| ir.cpp:2297:55:2297:62 | ChiTotal | total:m2297_24 | -| ir.cpp:2297:55:2297:62 | SideEffect | ~m2297_24 | -| ir.cpp:2297:55:2297:62 | StoreValue | r2297_34 | -| ir.cpp:2298:9:2298:9 | Address | &:r2298_2 | -| ir.cpp:2298:13:2298:13 | StoreValue | r2298_1 | -| ir.cpp:2302:6:2302:19 | ChiPartial | partial:m2302_3 | -| ir.cpp:2302:6:2302:19 | ChiTotal | total:m2302_2 | -| ir.cpp:2302:6:2302:19 | SideEffect | ~m2307_5 | -| ir.cpp:2302:26:2302:26 | Address | &:r2302_5 | -| ir.cpp:2303:15:2303:15 | Address | &:r2303_1 | -| ir.cpp:2303:15:2303:15 | Address | &:r2303_1 | -| ir.cpp:2303:15:2303:15 | Arg(this) | this:r2303_1 | -| ir.cpp:2303:18:2303:33 | CallTarget | func:r2303_3 | -| ir.cpp:2303:18:2303:33 | ChiPartial | partial:m2303_7 | -| ir.cpp:2303:18:2303:33 | ChiPartial | partial:m2303_10 | -| ir.cpp:2303:18:2303:33 | ChiTotal | total:m2302_4 | -| ir.cpp:2303:18:2303:33 | ChiTotal | total:m2303_2 | -| ir.cpp:2303:18:2303:33 | SideEffect | ~m2302_4 | -| ir.cpp:2303:26:2303:32 | Address | &:r2303_5 | -| ir.cpp:2303:26:2303:32 | Arg(0) | 0:r2303_5 | -| ir.cpp:2303:26:2303:32 | SideEffect | ~m2302_3 | -| ir.cpp:2303:26:2303:32 | Unary | r2303_4 | -| ir.cpp:2303:36:2303:36 | Address | &:r2303_12 | -| ir.cpp:2303:36:2303:36 | Condition | r2303_13 | -| ir.cpp:2303:36:2303:36 | Load | m2302_6 | -| ir.cpp:2304:13:2304:13 | Address | &:r2304_1 | -| ir.cpp:2304:16:2304:17 | StoreValue | r2304_2 | -| ir.cpp:2306:13:2306:13 | Address | &:r2306_1 | -| ir.cpp:2306:16:2306:17 | StoreValue | r2306_2 | +| ir.cpp:2296:16:2296:17 | Address | &:r2296_1 | +| ir.cpp:2296:16:2296:17 | Address | &:r2296_1 | +| ir.cpp:2296:16:2296:17 | Arg(this) | this:r2296_1 | +| ir.cpp:2296:16:2296:17 | CallTarget | func:r2296_3 | +| ir.cpp:2296:16:2296:17 | ChiPartial | partial:m2296_5 | +| ir.cpp:2296:16:2296:17 | ChiPartial | partial:m2296_7 | +| ir.cpp:2296:16:2296:17 | ChiTotal | total:m2292_6 | +| ir.cpp:2296:16:2296:17 | ChiTotal | total:m2296_2 | +| ir.cpp:2296:16:2296:17 | SideEffect | ~m2292_6 | +| ir.cpp:2297:5:2297:5 | Address | &:r2297_1 | +| ir.cpp:2297:5:2297:5 | Address | &:r2297_1 | +| ir.cpp:2297:5:2297:5 | Arg(this) | this:r2297_1 | +| ir.cpp:2297:5:2297:5 | CallTarget | func:r2297_2 | +| ir.cpp:2297:5:2297:5 | ChiPartial | partial:m2297_4 | +| ir.cpp:2297:5:2297:5 | ChiPartial | partial:m2297_7 | +| ir.cpp:2297:5:2297:5 | ChiTotal | total:m2296_6 | +| ir.cpp:2297:5:2297:5 | ChiTotal | total:m2296_8 | +| ir.cpp:2297:5:2297:5 | SideEffect | m2296_8 | +| ir.cpp:2297:5:2297:5 | SideEffect | ~m2296_6 | +| ir.cpp:2298:12:2298:13 | Address | &:r2298_2 | +| ir.cpp:2298:12:2298:13 | Address | &:r2298_2 | +| ir.cpp:2298:12:2298:13 | Arg(this) | this:r2298_2 | +| ir.cpp:2298:12:2298:13 | CallTarget | func:r2298_4 | +| ir.cpp:2298:12:2298:13 | ChiPartial | partial:m2298_6 | +| ir.cpp:2298:12:2298:13 | ChiPartial | partial:m2298_8 | +| ir.cpp:2298:12:2298:13 | ChiTotal | total:m2298_1 | +| ir.cpp:2298:12:2298:13 | ChiTotal | total:m2298_3 | +| ir.cpp:2298:12:2298:13 | Phi | from 1:~m2295_5 | +| ir.cpp:2298:12:2298:13 | Phi | from 2:~m2297_5 | +| ir.cpp:2298:12:2298:13 | SideEffect | ~m2298_1 | +| ir.cpp:2299:1:2299:1 | Address | &:r2299_2 | +| ir.cpp:2299:1:2299:1 | Address | &:r2299_2 | +| ir.cpp:2299:1:2299:1 | Address | &:r2299_10 | +| ir.cpp:2299:1:2299:1 | Address | &:r2299_10 | +| ir.cpp:2299:1:2299:1 | Arg(this) | this:r2299_2 | +| ir.cpp:2299:1:2299:1 | Arg(this) | this:r2299_10 | +| ir.cpp:2299:1:2299:1 | CallTarget | func:r2299_3 | +| ir.cpp:2299:1:2299:1 | CallTarget | func:r2299_11 | +| ir.cpp:2299:1:2299:1 | ChiPartial | partial:m2299_5 | +| ir.cpp:2299:1:2299:1 | ChiPartial | partial:m2299_8 | +| ir.cpp:2299:1:2299:1 | ChiPartial | partial:m2299_13 | +| ir.cpp:2299:1:2299:1 | ChiPartial | partial:m2299_16 | +| ir.cpp:2299:1:2299:1 | ChiTotal | total:m2292_8 | +| ir.cpp:2299:1:2299:1 | ChiTotal | total:m2298_7 | +| ir.cpp:2299:1:2299:1 | ChiTotal | total:m2298_9 | +| ir.cpp:2299:1:2299:1 | ChiTotal | total:m2299_6 | +| ir.cpp:2299:1:2299:1 | SideEffect | m2292_8 | +| ir.cpp:2299:1:2299:1 | SideEffect | m2298_9 | +| ir.cpp:2299:1:2299:1 | SideEffect | ~m2298_7 | +| ir.cpp:2299:1:2299:1 | SideEffect | ~m2299_6 | +| ir.cpp:2301:6:2301:19 | ChiPartial | partial:m2301_3 | +| ir.cpp:2301:6:2301:19 | ChiTotal | total:m2301_2 | +| ir.cpp:2301:6:2301:19 | SideEffect | ~m2311_54 | +| ir.cpp:2302:10:2302:10 | Address | &:r2302_1 | +| ir.cpp:2302:13:2302:16 | StoreValue | r2302_2 | +| ir.cpp:2303:16:2303:16 | Address | &:r2303_1 | +| ir.cpp:2303:16:2303:16 | Address | &:r2303_1 | +| ir.cpp:2303:16:2303:16 | Address | &:r2303_31 | +| ir.cpp:2303:16:2303:16 | Address | &:r2303_31 | +| ir.cpp:2303:16:2303:16 | Arg(this) | this:r2303_1 | +| ir.cpp:2303:16:2303:16 | Arg(this) | this:r2303_31 | +| ir.cpp:2303:16:2303:16 | CallTarget | func:r2303_32 | +| ir.cpp:2303:16:2303:16 | ChiPartial | partial:m2303_34 | +| ir.cpp:2303:16:2303:16 | ChiPartial | partial:m2303_37 | +| ir.cpp:2303:16:2303:16 | ChiTotal | total:m2303_12 | +| ir.cpp:2303:16:2303:16 | ChiTotal | total:m2303_13 | +| ir.cpp:2303:16:2303:16 | SideEffect | m2303_12 | +| ir.cpp:2303:16:2303:16 | SideEffect | ~m2303_13 | +| ir.cpp:2303:18:2303:24 | Address | &:r2303_5 | +| ir.cpp:2303:18:2303:24 | Arg(0) | 0:r2303_5 | +| ir.cpp:2303:18:2303:24 | SideEffect | ~m2301_3 | +| ir.cpp:2303:18:2303:24 | Unary | r2303_4 | +| ir.cpp:2303:18:2303:25 | CallTarget | func:r2303_3 | +| ir.cpp:2303:18:2303:25 | ChiPartial | partial:m2303_7 | +| ir.cpp:2303:18:2303:25 | ChiPartial | partial:m2303_10 | +| ir.cpp:2303:18:2303:25 | ChiTotal | total:m2301_4 | +| ir.cpp:2303:18:2303:25 | ChiTotal | total:m2303_2 | +| ir.cpp:2303:18:2303:25 | SideEffect | ~m2301_4 | +| ir.cpp:2303:28:2303:28 | Address | &:r2303_15 | +| ir.cpp:2303:28:2303:28 | Left | r2303_17 | +| ir.cpp:2303:28:2303:28 | Load | m2303_14 | +| ir.cpp:2303:28:2303:28 | Phi | from 0:m2302_3 | +| ir.cpp:2303:28:2303:28 | Phi | from 0:m2303_11 | +| ir.cpp:2303:28:2303:28 | Phi | from 0:~m2303_8 | +| ir.cpp:2303:28:2303:28 | Phi | from 2:m2303_28 | +| ir.cpp:2303:28:2303:28 | Phi | from 2:m2303_30 | +| ir.cpp:2303:28:2303:28 | Phi | from 2:~m2303_25 | +| ir.cpp:2303:28:2303:28 | Unary | r2303_16 | +| ir.cpp:2303:28:2303:33 | Condition | r2303_19 | +| ir.cpp:2303:33:2303:33 | Right | r2303_18 | +| ir.cpp:2303:36:2303:36 | Address | &:r2303_29 | +| ir.cpp:2303:40:2303:40 | Address | &:r2303_21 | +| ir.cpp:2303:40:2303:40 | Address | &:r2303_21 | +| ir.cpp:2303:40:2303:40 | Arg(this) | this:r2303_21 | +| ir.cpp:2303:40:2303:40 | ChiPartial | partial:m2303_27 | +| ir.cpp:2303:40:2303:40 | ChiTotal | total:m2303_12 | +| ir.cpp:2303:40:2303:40 | SideEffect | m2303_12 | +| ir.cpp:2303:42:2303:49 | CallTarget | func:r2303_22 | +| ir.cpp:2303:42:2303:49 | ChiPartial | partial:m2303_24 | +| ir.cpp:2303:42:2303:49 | ChiTotal | total:m2305_5 | +| ir.cpp:2303:42:2303:49 | SideEffect | ~m2305_5 | +| ir.cpp:2303:42:2303:49 | StoreValue | r2303_23 | +| ir.cpp:2304:16:2304:17 | Address | &:r2304_1 | +| ir.cpp:2304:16:2304:17 | Address | &:r2304_1 | +| ir.cpp:2304:16:2304:17 | Arg(this) | this:r2304_1 | +| ir.cpp:2304:16:2304:17 | CallTarget | func:r2304_3 | +| ir.cpp:2304:16:2304:17 | ChiPartial | partial:m2304_5 | +| ir.cpp:2304:16:2304:17 | ChiPartial | partial:m2304_7 | +| ir.cpp:2304:16:2304:17 | ChiTotal | total:m2303_13 | +| ir.cpp:2304:16:2304:17 | ChiTotal | total:m2304_2 | +| ir.cpp:2304:16:2304:17 | SideEffect | ~m2303_13 | +| ir.cpp:2305:5:2305:5 | Address | &:r2305_1 | +| ir.cpp:2305:5:2305:5 | Address | &:r2305_1 | +| ir.cpp:2305:5:2305:5 | Arg(this) | this:r2305_1 | +| ir.cpp:2305:5:2305:5 | CallTarget | func:r2305_2 | +| ir.cpp:2305:5:2305:5 | ChiPartial | partial:m2305_4 | +| ir.cpp:2305:5:2305:5 | ChiPartial | partial:m2305_7 | +| ir.cpp:2305:5:2305:5 | ChiTotal | total:m2304_6 | +| ir.cpp:2305:5:2305:5 | ChiTotal | total:m2304_8 | +| ir.cpp:2305:5:2305:5 | SideEffect | m2304_8 | +| ir.cpp:2305:5:2305:5 | SideEffect | ~m2304_6 | | ir.cpp:2307:5:2307:5 | Address | &:r2307_1 | -| ir.cpp:2307:5:2307:5 | Address | &:r2307_1 | -| ir.cpp:2307:5:2307:5 | Arg(this) | this:r2307_1 | -| ir.cpp:2307:5:2307:5 | CallTarget | func:r2307_2 | -| ir.cpp:2307:5:2307:5 | ChiPartial | partial:m2307_4 | -| ir.cpp:2307:5:2307:5 | ChiPartial | partial:m2307_7 | -| ir.cpp:2307:5:2307:5 | ChiTotal | total:m2303_8 | -| ir.cpp:2307:5:2307:5 | ChiTotal | total:m2303_11 | -| ir.cpp:2307:5:2307:5 | SideEffect | m2303_11 | -| ir.cpp:2307:5:2307:5 | SideEffect | ~m2303_8 | -| ir.cpp:2317:6:2317:19 | ChiPartial | partial:m2317_3 | -| ir.cpp:2317:6:2317:19 | ChiTotal | total:m2317_2 | -| ir.cpp:2317:6:2317:19 | SideEffect | ~m2322_14 | -| ir.cpp:2317:26:2317:26 | Address | &:r2317_5 | -| ir.cpp:2318:8:2318:23 | Address | &:r2318_1 | -| ir.cpp:2318:8:2318:23 | Address | &:r2318_1 | -| ir.cpp:2318:8:2318:23 | Arg(this) | this:r2318_1 | -| ir.cpp:2318:8:2318:23 | Condition | r2318_19 | -| ir.cpp:2318:13:2318:13 | Address | &:r2318_11 | -| ir.cpp:2318:13:2318:13 | Address | &:r2318_11 | -| ir.cpp:2318:13:2318:13 | Arg(this) | this:r2318_11 | -| ir.cpp:2318:13:2318:13 | CallTarget | func:r2318_12 | -| ir.cpp:2318:13:2318:13 | ChiPartial | partial:m2318_14 | -| ir.cpp:2318:13:2318:13 | ChiPartial | partial:m2318_17 | -| ir.cpp:2318:13:2318:13 | ChiTotal | total:m2318_8 | -| ir.cpp:2318:13:2318:13 | ChiTotal | total:m2318_10 | -| ir.cpp:2318:13:2318:13 | SideEffect | m2318_10 | -| ir.cpp:2318:13:2318:13 | SideEffect | ~m2318_8 | -| ir.cpp:2318:13:2318:13 | Unary | r2318_13 | -| ir.cpp:2318:16:2318:23 | CallTarget | func:r2318_3 | -| ir.cpp:2318:16:2318:23 | ChiPartial | partial:m2318_7 | -| ir.cpp:2318:16:2318:23 | ChiPartial | partial:m2318_9 | -| ir.cpp:2318:16:2318:23 | ChiTotal | total:m2317_4 | -| ir.cpp:2318:16:2318:23 | ChiTotal | total:m2318_2 | -| ir.cpp:2318:16:2318:23 | SideEffect | ~m2317_4 | -| ir.cpp:2318:22:2318:22 | Address | &:r2318_4 | -| ir.cpp:2318:22:2318:22 | Arg(0) | 0:r2318_5 | -| ir.cpp:2318:22:2318:22 | Load | m2317_6 | -| ir.cpp:2319:16:2319:17 | Address | &:r2319_1 | -| ir.cpp:2319:16:2319:17 | Address | &:r2319_1 | -| ir.cpp:2319:16:2319:17 | Arg(this) | this:r2319_1 | -| ir.cpp:2319:16:2319:17 | CallTarget | func:r2319_3 | -| ir.cpp:2319:16:2319:17 | ChiPartial | partial:m2319_5 | -| ir.cpp:2319:16:2319:17 | ChiPartial | partial:m2319_7 | -| ir.cpp:2319:16:2319:17 | ChiTotal | total:m2318_15 | -| ir.cpp:2319:16:2319:17 | ChiTotal | total:m2319_2 | -| ir.cpp:2319:16:2319:17 | SideEffect | ~m2318_15 | -| ir.cpp:2320:5:2320:5 | Address | &:r2320_1 | -| ir.cpp:2320:5:2320:5 | Address | &:r2320_1 | -| ir.cpp:2320:5:2320:5 | Arg(this) | this:r2320_1 | -| ir.cpp:2320:5:2320:5 | CallTarget | func:r2320_2 | -| ir.cpp:2320:5:2320:5 | ChiPartial | partial:m2320_4 | -| ir.cpp:2320:5:2320:5 | ChiPartial | partial:m2320_7 | -| ir.cpp:2320:5:2320:5 | ChiTotal | total:m2319_6 | -| ir.cpp:2320:5:2320:5 | ChiTotal | total:m2319_8 | -| ir.cpp:2320:5:2320:5 | SideEffect | m2319_8 | -| ir.cpp:2320:5:2320:5 | SideEffect | ~m2319_6 | -| ir.cpp:2321:16:2321:17 | Address | &:r2321_1 | -| ir.cpp:2321:16:2321:17 | Address | &:r2321_1 | -| ir.cpp:2321:16:2321:17 | Arg(this) | this:r2321_1 | -| ir.cpp:2321:16:2321:17 | CallTarget | func:r2321_3 | -| ir.cpp:2321:16:2321:17 | ChiPartial | partial:m2321_5 | -| ir.cpp:2321:16:2321:17 | ChiPartial | partial:m2321_7 | -| ir.cpp:2321:16:2321:17 | ChiTotal | total:m2318_15 | -| ir.cpp:2321:16:2321:17 | ChiTotal | total:m2321_2 | -| ir.cpp:2321:16:2321:17 | SideEffect | ~m2318_15 | -| ir.cpp:2322:5:2322:5 | Address | &:r2322_1 | -| ir.cpp:2322:5:2322:5 | Address | &:r2322_1 | -| ir.cpp:2322:5:2322:5 | Address | &:r2322_10 | -| ir.cpp:2322:5:2322:5 | Address | &:r2322_10 | -| ir.cpp:2322:5:2322:5 | Arg(this) | this:r2322_1 | -| ir.cpp:2322:5:2322:5 | Arg(this) | this:r2322_10 | -| ir.cpp:2322:5:2322:5 | CallTarget | func:r2322_2 | -| ir.cpp:2322:5:2322:5 | CallTarget | func:r2322_11 | -| ir.cpp:2322:5:2322:5 | ChiPartial | partial:m2322_4 | -| ir.cpp:2322:5:2322:5 | ChiPartial | partial:m2322_7 | -| ir.cpp:2322:5:2322:5 | ChiPartial | partial:m2322_13 | -| ir.cpp:2322:5:2322:5 | ChiPartial | partial:m2322_16 | -| ir.cpp:2322:5:2322:5 | ChiTotal | total:m2318_18 | -| ir.cpp:2322:5:2322:5 | ChiTotal | total:m2321_6 | -| ir.cpp:2322:5:2322:5 | ChiTotal | total:m2321_8 | -| ir.cpp:2322:5:2322:5 | ChiTotal | total:m2322_9 | -| ir.cpp:2322:5:2322:5 | Phi | from 1:~m2320_5 | -| ir.cpp:2322:5:2322:5 | Phi | from 2:~m2322_5 | -| ir.cpp:2322:5:2322:5 | SideEffect | m2318_18 | -| ir.cpp:2322:5:2322:5 | SideEffect | m2321_8 | -| ir.cpp:2322:5:2322:5 | SideEffect | ~m2321_6 | -| ir.cpp:2322:5:2322:5 | SideEffect | ~m2322_9 | -| ir.cpp:2325:6:2325:25 | ChiPartial | partial:m2325_3 | -| ir.cpp:2325:6:2325:25 | ChiTotal | total:m2325_2 | -| ir.cpp:2325:6:2325:25 | SideEffect | ~m2336_13 | -| ir.cpp:2325:32:2325:32 | Address | &:r2325_5 | -| ir.cpp:2327:16:2327:16 | Address | &:r2327_1 | -| ir.cpp:2327:16:2327:16 | Address | &:r2327_1 | -| ir.cpp:2327:16:2327:16 | Arg(this) | this:r2327_1 | -| ir.cpp:2327:16:2327:16 | CallTarget | func:r2327_3 | -| ir.cpp:2327:16:2327:16 | ChiPartial | partial:m2327_5 | -| ir.cpp:2327:16:2327:16 | ChiPartial | partial:m2327_7 | -| ir.cpp:2327:16:2327:16 | ChiTotal | total:m2325_4 | -| ir.cpp:2327:16:2327:16 | ChiTotal | total:m2327_2 | -| ir.cpp:2327:16:2327:16 | SideEffect | ~m2325_4 | -| ir.cpp:2328:15:2328:15 | Address | &:r2328_2 | -| ir.cpp:2328:15:2328:15 | Condition | r2328_3 | -| ir.cpp:2328:15:2328:15 | Load | m2328_1 | -| ir.cpp:2328:15:2328:15 | Phi | from 0:m2325_6 | -| ir.cpp:2328:15:2328:15 | Phi | from 2:m2329_3 | -| ir.cpp:2329:13:2329:13 | Address | &:r2329_2 | -| ir.cpp:2329:17:2329:21 | StoreValue | r2329_1 | -| ir.cpp:2331:5:2331:5 | Address | &:r2331_1 | -| ir.cpp:2331:5:2331:5 | Address | &:r2331_1 | -| ir.cpp:2331:5:2331:5 | Arg(this) | this:r2331_1 | -| ir.cpp:2331:5:2331:5 | CallTarget | func:r2331_2 | -| ir.cpp:2331:5:2331:5 | ChiPartial | partial:m2331_4 | -| ir.cpp:2331:5:2331:5 | ChiPartial | partial:m2331_7 | -| ir.cpp:2331:5:2331:5 | ChiTotal | total:m2327_6 | -| ir.cpp:2331:5:2331:5 | ChiTotal | total:m2327_8 | -| ir.cpp:2331:5:2331:5 | SideEffect | m2327_8 | -| ir.cpp:2331:5:2331:5 | SideEffect | ~m2327_6 | -| ir.cpp:2334:16:2334:31 | Address | &:r2334_3 | -| ir.cpp:2334:16:2334:31 | Address | &:r2334_3 | -| ir.cpp:2334:16:2334:31 | Arg(this) | this:r2334_3 | -| ir.cpp:2334:16:2334:31 | Condition | r2334_21 | -| ir.cpp:2334:16:2334:31 | Phi | from 3:m2328_1 | -| ir.cpp:2334:16:2334:31 | Phi | from 3:~m2331_5 | -| ir.cpp:2334:16:2334:31 | Phi | from 5:m2335_3 | -| ir.cpp:2334:16:2334:31 | Phi | from 5:~m2336_5 | -| ir.cpp:2334:21:2334:21 | Address | &:r2334_13 | -| ir.cpp:2334:21:2334:21 | Address | &:r2334_13 | -| ir.cpp:2334:21:2334:21 | Arg(this) | this:r2334_13 | -| ir.cpp:2334:21:2334:21 | CallTarget | func:r2334_14 | -| ir.cpp:2334:21:2334:21 | ChiPartial | partial:m2334_16 | -| ir.cpp:2334:21:2334:21 | ChiPartial | partial:m2334_19 | -| ir.cpp:2334:21:2334:21 | ChiTotal | total:m2334_10 | -| ir.cpp:2334:21:2334:21 | ChiTotal | total:m2334_12 | -| ir.cpp:2334:21:2334:21 | SideEffect | m2334_12 | -| ir.cpp:2334:21:2334:21 | SideEffect | ~m2334_10 | -| ir.cpp:2334:21:2334:21 | Unary | r2334_15 | -| ir.cpp:2334:24:2334:31 | CallTarget | func:r2334_5 | -| ir.cpp:2334:24:2334:31 | ChiPartial | partial:m2334_9 | -| ir.cpp:2334:24:2334:31 | ChiPartial | partial:m2334_11 | -| ir.cpp:2334:24:2334:31 | ChiTotal | total:m2334_1 | -| ir.cpp:2334:24:2334:31 | ChiTotal | total:m2334_4 | -| ir.cpp:2334:24:2334:31 | SideEffect | ~m2334_1 | -| ir.cpp:2334:30:2334:30 | Address | &:r2334_6 | -| ir.cpp:2334:30:2334:30 | Arg(0) | 0:r2334_7 | -| ir.cpp:2334:30:2334:30 | Load | m2334_2 | -| ir.cpp:2335:13:2335:13 | Address | &:r2335_2 | -| ir.cpp:2335:17:2335:21 | StoreValue | r2335_1 | -| ir.cpp:2336:9:2336:9 | Address | &:r2336_1 | -| ir.cpp:2336:9:2336:9 | Address | &:r2336_1 | -| ir.cpp:2336:9:2336:9 | Address | &:r2336_9 | -| ir.cpp:2336:9:2336:9 | Address | &:r2336_9 | -| ir.cpp:2336:9:2336:9 | Arg(this) | this:r2336_1 | -| ir.cpp:2336:9:2336:9 | Arg(this) | this:r2336_9 | -| ir.cpp:2336:9:2336:9 | CallTarget | func:r2336_2 | -| ir.cpp:2336:9:2336:9 | CallTarget | func:r2336_10 | -| ir.cpp:2336:9:2336:9 | ChiPartial | partial:m2336_4 | -| ir.cpp:2336:9:2336:9 | ChiPartial | partial:m2336_7 | -| ir.cpp:2336:9:2336:9 | ChiPartial | partial:m2336_12 | -| ir.cpp:2336:9:2336:9 | ChiPartial | partial:m2336_15 | -| ir.cpp:2336:9:2336:9 | ChiTotal | total:m2334_17 | -| ir.cpp:2336:9:2336:9 | ChiTotal | total:m2334_17 | -| ir.cpp:2336:9:2336:9 | ChiTotal | total:m2334_20 | -| ir.cpp:2336:9:2336:9 | ChiTotal | total:m2334_20 | -| ir.cpp:2336:9:2336:9 | SideEffect | m2334_20 | -| ir.cpp:2336:9:2336:9 | SideEffect | m2334_20 | -| ir.cpp:2336:9:2336:9 | SideEffect | ~m2334_17 | -| ir.cpp:2336:9:2336:9 | SideEffect | ~m2334_17 | -| ir.cpp:2340:6:2340:13 | ChiPartial | partial:m2340_3 | -| ir.cpp:2340:6:2340:13 | ChiTotal | total:m2340_2 | -| ir.cpp:2340:6:2340:13 | SideEffect | m2340_3 | -| ir.cpp:2342:6:2342:24 | ChiPartial | partial:m2342_3 | -| ir.cpp:2342:6:2342:24 | ChiTotal | total:m2342_2 | -| ir.cpp:2342:6:2342:24 | Phi | from 2:~m2351_5 | -| ir.cpp:2342:6:2342:24 | Phi | from 4:~m2351_13 | -| ir.cpp:2342:6:2342:24 | Phi | from 5:~m2351_22 | -| ir.cpp:2342:6:2342:24 | SideEffect | ~m2342_7 | -| ir.cpp:2342:31:2342:31 | Address | &:r2342_5 | -| ir.cpp:2343:12:2343:12 | Address | &:r2343_1 | -| ir.cpp:2343:12:2343:12 | Address | &:r2343_1 | -| ir.cpp:2343:12:2343:12 | Arg(this) | this:r2343_1 | -| ir.cpp:2343:12:2343:12 | CallTarget | func:r2343_3 | -| ir.cpp:2343:12:2343:12 | ChiPartial | partial:m2343_5 | -| ir.cpp:2343:12:2343:12 | ChiPartial | partial:m2343_7 | -| ir.cpp:2343:12:2343:12 | ChiTotal | total:m2342_4 | -| ir.cpp:2343:12:2343:12 | ChiTotal | total:m2343_2 | -| ir.cpp:2343:12:2343:12 | SideEffect | ~m2342_4 | -| ir.cpp:2344:8:2344:8 | Address | &:r2344_1 | -| ir.cpp:2344:8:2344:8 | Condition | r2344_2 | -| ir.cpp:2344:8:2344:8 | Load | m2342_6 | -| ir.cpp:2347:8:2347:8 | Address | &:r2347_1 | -| ir.cpp:2347:8:2347:8 | Condition | r2347_2 | -| ir.cpp:2347:8:2347:8 | Load | m2342_6 | -| ir.cpp:2348:16:2348:23 | CallTarget | func:r2348_1 | -| ir.cpp:2348:16:2348:23 | ChiPartial | partial:m2348_3 | -| ir.cpp:2348:16:2348:23 | ChiTotal | total:m2343_6 | -| ir.cpp:2348:16:2348:23 | SideEffect | ~m2343_6 | -| ir.cpp:2351:1:2351:1 | Address | &:r2351_1 | -| ir.cpp:2351:1:2351:1 | Address | &:r2351_1 | -| ir.cpp:2351:1:2351:1 | Address | &:r2351_9 | -| ir.cpp:2351:1:2351:1 | Address | &:r2351_9 | -| ir.cpp:2351:1:2351:1 | Address | &:r2351_18 | -| ir.cpp:2351:1:2351:1 | Address | &:r2351_18 | -| ir.cpp:2351:1:2351:1 | Arg(this) | this:r2351_1 | -| ir.cpp:2351:1:2351:1 | Arg(this) | this:r2351_9 | -| ir.cpp:2351:1:2351:1 | Arg(this) | this:r2351_18 | -| ir.cpp:2351:1:2351:1 | CallTarget | func:r2351_2 | -| ir.cpp:2351:1:2351:1 | CallTarget | func:r2351_10 | -| ir.cpp:2351:1:2351:1 | CallTarget | func:r2351_19 | -| ir.cpp:2351:1:2351:1 | ChiPartial | partial:m2351_4 | -| ir.cpp:2351:1:2351:1 | ChiPartial | partial:m2351_7 | -| ir.cpp:2351:1:2351:1 | ChiPartial | partial:m2351_12 | -| ir.cpp:2351:1:2351:1 | ChiPartial | partial:m2351_15 | -| ir.cpp:2351:1:2351:1 | ChiPartial | partial:m2351_21 | -| ir.cpp:2351:1:2351:1 | ChiPartial | partial:m2351_24 | -| ir.cpp:2351:1:2351:1 | ChiTotal | total:m2343_6 | -| ir.cpp:2351:1:2351:1 | ChiTotal | total:m2343_6 | -| ir.cpp:2351:1:2351:1 | ChiTotal | total:m2343_8 | -| ir.cpp:2351:1:2351:1 | ChiTotal | total:m2343_8 | -| ir.cpp:2351:1:2351:1 | ChiTotal | total:m2343_8 | -| ir.cpp:2351:1:2351:1 | ChiTotal | total:m2348_4 | -| ir.cpp:2351:1:2351:1 | SideEffect | m2343_8 | -| ir.cpp:2351:1:2351:1 | SideEffect | m2343_8 | -| ir.cpp:2351:1:2351:1 | SideEffect | m2343_8 | -| ir.cpp:2351:1:2351:1 | SideEffect | ~m2343_6 | -| ir.cpp:2351:1:2351:1 | SideEffect | ~m2343_6 | -| ir.cpp:2351:1:2351:1 | SideEffect | ~m2348_4 | -| ir.cpp:2353:5:2353:24 | Address | &:r2353_9 | -| ir.cpp:2353:5:2353:24 | ChiPartial | partial:m2353_3 | -| ir.cpp:2353:5:2353:24 | ChiTotal | total:m2353_2 | -| ir.cpp:2353:5:2353:24 | Load | m2353_8 | -| ir.cpp:2353:5:2353:24 | Phi | from 2:m2356_3 | -| ir.cpp:2353:5:2353:24 | Phi | from 2:~m2359_5 | -| ir.cpp:2353:5:2353:24 | Phi | from 3:m2358_3 | -| ir.cpp:2353:5:2353:24 | Phi | from 3:~m2359_13 | -| ir.cpp:2353:5:2353:24 | SideEffect | ~m2353_7 | -| ir.cpp:2353:31:2353:31 | Address | &:r2353_5 | -| ir.cpp:2354:12:2354:12 | Address | &:r2354_1 | -| ir.cpp:2354:12:2354:12 | Address | &:r2354_1 | -| ir.cpp:2354:12:2354:12 | Arg(this) | this:r2354_1 | -| ir.cpp:2354:12:2354:12 | CallTarget | func:r2354_3 | -| ir.cpp:2354:12:2354:12 | ChiPartial | partial:m2354_5 | -| ir.cpp:2354:12:2354:12 | ChiPartial | partial:m2354_7 | -| ir.cpp:2354:12:2354:12 | ChiTotal | total:m2353_4 | -| ir.cpp:2354:12:2354:12 | ChiTotal | total:m2354_2 | -| ir.cpp:2354:12:2354:12 | SideEffect | ~m2353_4 | -| ir.cpp:2355:8:2355:8 | Address | &:r2355_1 | -| ir.cpp:2355:8:2355:8 | Condition | r2355_2 | -| ir.cpp:2355:8:2355:8 | Load | m2353_6 | -| ir.cpp:2356:9:2356:17 | Address | &:r2356_1 | -| ir.cpp:2356:16:2356:16 | StoreValue | r2356_2 | -| ir.cpp:2358:5:2358:13 | Address | &:r2358_1 | -| ir.cpp:2358:12:2358:12 | StoreValue | r2358_2 | -| ir.cpp:2359:1:2359:1 | Address | &:r2359_1 | -| ir.cpp:2359:1:2359:1 | Address | &:r2359_1 | -| ir.cpp:2359:1:2359:1 | Address | &:r2359_9 | -| ir.cpp:2359:1:2359:1 | Address | &:r2359_9 | -| ir.cpp:2359:1:2359:1 | Arg(this) | this:r2359_1 | -| ir.cpp:2359:1:2359:1 | Arg(this) | this:r2359_9 | -| ir.cpp:2359:1:2359:1 | CallTarget | func:r2359_2 | -| ir.cpp:2359:1:2359:1 | CallTarget | func:r2359_10 | -| ir.cpp:2359:1:2359:1 | ChiPartial | partial:m2359_4 | -| ir.cpp:2359:1:2359:1 | ChiPartial | partial:m2359_7 | -| ir.cpp:2359:1:2359:1 | ChiPartial | partial:m2359_12 | -| ir.cpp:2359:1:2359:1 | ChiPartial | partial:m2359_15 | -| ir.cpp:2359:1:2359:1 | ChiTotal | total:m2354_6 | -| ir.cpp:2359:1:2359:1 | ChiTotal | total:m2354_6 | -| ir.cpp:2359:1:2359:1 | ChiTotal | total:m2354_8 | -| ir.cpp:2359:1:2359:1 | ChiTotal | total:m2354_8 | -| ir.cpp:2359:1:2359:1 | SideEffect | m2354_8 | -| ir.cpp:2359:1:2359:1 | SideEffect | m2354_8 | -| ir.cpp:2359:1:2359:1 | SideEffect | ~m2354_6 | -| ir.cpp:2359:1:2359:1 | SideEffect | ~m2354_6 | -| ir.cpp:2361:6:2361:26 | ChiPartial | partial:m2361_3 | -| ir.cpp:2361:6:2361:26 | ChiTotal | total:m2361_2 | -| ir.cpp:2361:6:2361:26 | SideEffect | ~m2364_5 | -| ir.cpp:2362:12:2362:12 | Address | &:r2362_1 | -| ir.cpp:2362:12:2362:12 | Address | &:r2362_1 | -| ir.cpp:2362:12:2362:12 | Arg(this) | this:r2362_1 | -| ir.cpp:2362:12:2362:12 | CallTarget | func:r2362_3 | -| ir.cpp:2362:12:2362:12 | ChiPartial | partial:m2362_5 | -| ir.cpp:2362:12:2362:12 | ChiPartial | partial:m2362_7 | -| ir.cpp:2362:12:2362:12 | ChiTotal | total:m2361_4 | -| ir.cpp:2362:12:2362:12 | ChiTotal | total:m2362_2 | -| ir.cpp:2362:12:2362:12 | SideEffect | ~m2361_4 | -| ir.cpp:2363:12:2363:19 | CallTarget | func:r2363_1 | -| ir.cpp:2363:12:2363:19 | ChiPartial | partial:m2363_3 | -| ir.cpp:2363:12:2363:19 | ChiTotal | total:m2362_6 | -| ir.cpp:2363:12:2363:19 | SideEffect | ~m2362_6 | -| ir.cpp:2364:1:2364:1 | Address | &:r2364_1 | -| ir.cpp:2364:1:2364:1 | Address | &:r2364_1 | -| ir.cpp:2364:1:2364:1 | Arg(this) | this:r2364_1 | -| ir.cpp:2364:1:2364:1 | CallTarget | func:r2364_2 | -| ir.cpp:2364:1:2364:1 | ChiPartial | partial:m2364_4 | -| ir.cpp:2364:1:2364:1 | ChiPartial | partial:m2364_7 | -| ir.cpp:2364:1:2364:1 | ChiTotal | total:m2362_8 | -| ir.cpp:2364:1:2364:1 | ChiTotal | total:m2363_4 | -| ir.cpp:2364:1:2364:1 | SideEffect | m2362_8 | -| ir.cpp:2364:1:2364:1 | SideEffect | ~m2363_4 | -| ir.cpp:2374:32:2374:47 | Address | &:r2374_5 | -| ir.cpp:2374:32:2374:47 | ChiPartial | partial:m2374_3 | -| ir.cpp:2374:32:2374:47 | ChiTotal | total:m2374_2 | -| ir.cpp:2374:32:2374:47 | Load | m2376_3 | -| ir.cpp:2374:32:2374:47 | SideEffect | m2374_3 | -| ir.cpp:2376:9:2376:44 | Address | &:r2376_1 | -| ir.cpp:2376:16:2376:43 | StoreValue | r2376_2 | +| ir.cpp:2307:5:2307:5 | Address | &:r2307_24 | +| ir.cpp:2307:5:2307:5 | Address | &:r2307_30 | +| ir.cpp:2307:16:2307:16 | Address | &:r2307_51 | +| ir.cpp:2307:16:2307:16 | Address | &:r2307_51 | +| ir.cpp:2307:16:2307:16 | Address | &:r2307_68 | +| ir.cpp:2307:16:2307:16 | Address | &:r2307_68 | +| ir.cpp:2307:16:2307:16 | Arg(this) | this:r2307_51 | +| ir.cpp:2307:16:2307:16 | Arg(this) | this:r2307_68 | +| ir.cpp:2307:16:2307:16 | CallTarget | func:r2307_53 | +| ir.cpp:2307:16:2307:16 | CallTarget | func:r2307_69 | +| ir.cpp:2307:16:2307:16 | ChiPartial | partial:m2307_63 | +| ir.cpp:2307:16:2307:16 | ChiPartial | partial:m2307_66 | +| ir.cpp:2307:16:2307:16 | ChiPartial | partial:m2307_71 | +| ir.cpp:2307:16:2307:16 | ChiPartial | partial:m2307_74 | +| ir.cpp:2307:16:2307:16 | ChiTotal | total:m2307_52 | +| ir.cpp:2307:16:2307:16 | ChiTotal | total:m2307_58 | +| ir.cpp:2307:16:2307:16 | ChiTotal | total:m2307_67 | +| ir.cpp:2307:16:2307:16 | ChiTotal | total:m2309_5 | +| ir.cpp:2307:16:2307:16 | SideEffect | m2307_67 | +| ir.cpp:2307:16:2307:16 | SideEffect | ~m2307_58 | +| ir.cpp:2307:16:2307:16 | SideEffect | ~m2309_5 | +| ir.cpp:2307:20:2307:20 | Address | &:r2307_25 | +| ir.cpp:2307:20:2307:20 | Address | &:r2307_31 | +| ir.cpp:2307:20:2307:20 | Address | &:r2307_76 | +| ir.cpp:2307:20:2307:20 | Address | &:r2307_76 | +| ir.cpp:2307:20:2307:20 | Arg(this) | this:r0_2 | +| ir.cpp:2307:20:2307:20 | Arg(this) | this:r0_5 | +| ir.cpp:2307:20:2307:20 | Arg(this) | this:r0_7 | +| ir.cpp:2307:20:2307:20 | Arg(this) | this:r0_8 | +| ir.cpp:2307:20:2307:20 | Arg(this) | this:r0_15 | +| ir.cpp:2307:20:2307:20 | Arg(this) | this:r2307_76 | +| ir.cpp:2307:20:2307:20 | CallTarget | func:r2307_27 | +| ir.cpp:2307:20:2307:20 | CallTarget | func:r2307_33 | +| ir.cpp:2307:20:2307:20 | CallTarget | func:r2307_39 | +| ir.cpp:2307:20:2307:20 | CallTarget | func:r2307_40 | +| ir.cpp:2307:20:2307:20 | CallTarget | func:r2307_55 | +| ir.cpp:2307:20:2307:20 | CallTarget | func:r2307_77 | +| ir.cpp:2307:20:2307:20 | ChiPartial | partial:m2307_43 | +| ir.cpp:2307:20:2307:20 | ChiPartial | partial:m2307_45 | +| ir.cpp:2307:20:2307:20 | ChiPartial | partial:m2307_48 | +| ir.cpp:2307:20:2307:20 | ChiPartial | partial:m2307_57 | +| ir.cpp:2307:20:2307:20 | ChiPartial | partial:m2307_79 | +| ir.cpp:2307:20:2307:20 | ChiPartial | partial:m2307_82 | +| ir.cpp:2307:20:2307:20 | ChiTotal | total:m0_9 | +| ir.cpp:2307:20:2307:20 | ChiTotal | total:m2307_36 | +| ir.cpp:2307:20:2307:20 | ChiTotal | total:m2307_37 | +| ir.cpp:2307:20:2307:20 | ChiTotal | total:m2307_44 | +| ir.cpp:2307:20:2307:20 | ChiTotal | total:m2307_49 | +| ir.cpp:2307:20:2307:20 | ChiTotal | total:m2307_72 | +| ir.cpp:2307:20:2307:20 | Condition | r2307_47 | +| ir.cpp:2307:20:2307:20 | Load | m2307_23 | +| ir.cpp:2307:20:2307:20 | Load | m2307_23 | +| ir.cpp:2307:20:2307:20 | Phi | from 3:m2307_29 | +| ir.cpp:2307:20:2307:20 | Phi | from 3:~m2307_19 | +| ir.cpp:2307:20:2307:20 | Phi | from 5:m2307_83 | +| ir.cpp:2307:20:2307:20 | Phi | from 5:~m2307_80 | +| ir.cpp:2307:20:2307:20 | SideEffect | m2307_36 | +| ir.cpp:2307:20:2307:20 | SideEffect | ~m2307_37 | +| ir.cpp:2307:20:2307:20 | SideEffect | ~m2307_44 | +| ir.cpp:2307:20:2307:20 | SideEffect | ~m2307_49 | +| ir.cpp:2307:20:2307:20 | SideEffect | ~m2307_72 | +| ir.cpp:2307:20:2307:20 | StoreValue | r2307_28 | +| ir.cpp:2307:20:2307:20 | StoreValue | r2307_34 | +| ir.cpp:2307:20:2307:20 | Unary | r2307_26 | +| ir.cpp:2307:20:2307:20 | Unary | r2307_32 | +| ir.cpp:2307:20:2307:20 | Unary | r2307_38 | +| ir.cpp:2307:20:2307:20 | Unary | r2307_41 | +| ir.cpp:2307:20:2307:20 | Unary | r2307_54 | +| ir.cpp:2307:20:2307:20 | Unary | r2307_56 | +| ir.cpp:2307:20:2307:20 | Unary | r2307_78 | +| ir.cpp:2307:20:2307:55 | Address | &:r2307_2 | +| ir.cpp:2307:20:2307:55 | Address | &:r2307_2 | +| ir.cpp:2307:20:2307:55 | Arg(this) | this:r2307_2 | +| ir.cpp:2307:20:2307:55 | CallTarget | func:r2307_4 | +| ir.cpp:2307:20:2307:55 | ChiPartial | partial:m2307_18 | +| ir.cpp:2307:20:2307:55 | ChiPartial | partial:m2307_20 | +| ir.cpp:2307:20:2307:55 | ChiTotal | total:m2307_3 | +| ir.cpp:2307:20:2307:55 | ChiTotal | total:m2307_12 | +| ir.cpp:2307:20:2307:55 | SideEffect | ~m2307_12 | +| ir.cpp:2307:20:2307:55 | StoreValue | r2307_22 | +| ir.cpp:2307:20:2307:55 | Unary | r2307_2 | +| ir.cpp:2307:20:2307:56 | Address | &:r2307_61 | +| ir.cpp:2307:20:2307:56 | Arg(0) | 0:r2307_61 | +| ir.cpp:2307:20:2307:56 | SideEffect | ~m2307_64 | +| ir.cpp:2307:20:2307:56 | Unary | r2307_59 | +| ir.cpp:2307:20:2307:56 | Unary | r2307_60 | +| ir.cpp:2307:40:2307:54 | Address | &:r2307_5 | +| ir.cpp:2307:40:2307:54 | Address | &:r2307_5 | +| ir.cpp:2307:40:2307:54 | Address | &:r2307_5 | +| ir.cpp:2307:40:2307:54 | Arg(0) | 0:r2307_16 | +| ir.cpp:2307:40:2307:54 | Arg(this) | this:r2307_5 | +| ir.cpp:2307:40:2307:54 | CallTarget | func:r2307_7 | +| ir.cpp:2307:40:2307:54 | ChiPartial | partial:m2307_11 | +| ir.cpp:2307:40:2307:54 | ChiPartial | partial:m2307_14 | +| ir.cpp:2307:40:2307:54 | ChiTotal | total:m2303_35 | +| ir.cpp:2307:40:2307:54 | ChiTotal | total:m2307_6 | +| ir.cpp:2307:40:2307:54 | Load | m2307_15 | +| ir.cpp:2307:40:2307:54 | SideEffect | ~m2303_35 | +| ir.cpp:2307:47:2307:53 | Address | &:r2307_9 | +| ir.cpp:2307:47:2307:53 | Arg(0) | 0:r2307_9 | +| ir.cpp:2307:47:2307:53 | SideEffect | ~m2301_3 | +| ir.cpp:2307:47:2307:53 | Unary | r2307_8 | +| ir.cpp:2308:16:2308:17 | Address | &:r2308_1 | +| ir.cpp:2308:16:2308:17 | Address | &:r2308_1 | +| ir.cpp:2308:16:2308:17 | Arg(this) | this:r2308_1 | +| ir.cpp:2308:16:2308:17 | CallTarget | func:r2308_3 | +| ir.cpp:2308:16:2308:17 | ChiPartial | partial:m2308_5 | +| ir.cpp:2308:16:2308:17 | ChiPartial | partial:m2308_7 | +| ir.cpp:2308:16:2308:17 | ChiTotal | total:m2307_64 | +| ir.cpp:2308:16:2308:17 | ChiTotal | total:m2308_2 | +| ir.cpp:2308:16:2308:17 | SideEffect | ~m2307_64 | +| ir.cpp:2309:5:2309:5 | Address | &:r2309_1 | +| ir.cpp:2309:5:2309:5 | Address | &:r2309_1 | +| ir.cpp:2309:5:2309:5 | Arg(this) | this:r2309_1 | +| ir.cpp:2309:5:2309:5 | CallTarget | func:r2309_2 | +| ir.cpp:2309:5:2309:5 | ChiPartial | partial:m2309_4 | +| ir.cpp:2309:5:2309:5 | ChiPartial | partial:m2309_7 | +| ir.cpp:2309:5:2309:5 | ChiTotal | total:m2308_6 | +| ir.cpp:2309:5:2309:5 | ChiTotal | total:m2308_8 | +| ir.cpp:2309:5:2309:5 | SideEffect | m2308_8 | +| ir.cpp:2309:5:2309:5 | SideEffect | ~m2308_6 | +| ir.cpp:2311:16:2311:16 | Address | &:r2311_1 | +| ir.cpp:2311:16:2311:16 | Address | &:r2311_1 | +| ir.cpp:2311:16:2311:16 | Address | &:r2311_50 | +| ir.cpp:2311:16:2311:16 | Address | &:r2311_50 | +| ir.cpp:2311:16:2311:16 | Arg(this) | this:r2311_1 | +| ir.cpp:2311:16:2311:16 | Arg(this) | this:r2311_50 | +| ir.cpp:2311:16:2311:16 | CallTarget | func:r2311_51 | +| ir.cpp:2311:16:2311:16 | ChiPartial | partial:m2311_53 | +| ir.cpp:2311:16:2311:16 | ChiPartial | partial:m2311_56 | +| ir.cpp:2311:16:2311:16 | ChiTotal | total:m2311_23 | +| ir.cpp:2311:16:2311:16 | ChiTotal | total:m2311_46 | +| ir.cpp:2311:16:2311:16 | SideEffect | m2311_23 | +| ir.cpp:2311:16:2311:16 | SideEffect | ~m2311_46 | +| ir.cpp:2311:18:2311:24 | Address | &:r2311_5 | +| ir.cpp:2311:18:2311:24 | Arg(0) | 0:r2311_5 | +| ir.cpp:2311:18:2311:24 | SideEffect | ~m2301_3 | +| ir.cpp:2311:18:2311:24 | Unary | r2311_4 | +| ir.cpp:2311:18:2311:25 | CallTarget | func:r2311_3 | +| ir.cpp:2311:18:2311:25 | ChiPartial | partial:m2311_7 | +| ir.cpp:2311:18:2311:25 | ChiPartial | partial:m2311_10 | +| ir.cpp:2311:18:2311:25 | ChiTotal | total:m2307_49 | +| ir.cpp:2311:18:2311:25 | ChiTotal | total:m2311_2 | +| ir.cpp:2311:18:2311:25 | SideEffect | ~m2307_49 | +| ir.cpp:2311:28:2311:29 | Address | &:r2311_12 | +| ir.cpp:2311:28:2311:29 | Address | &:r2311_12 | +| ir.cpp:2311:28:2311:29 | Address | &:r2311_42 | +| ir.cpp:2311:28:2311:29 | Address | &:r2311_42 | +| ir.cpp:2311:28:2311:29 | Arg(this) | this:r2311_12 | +| ir.cpp:2311:28:2311:29 | Arg(this) | this:r2311_42 | +| ir.cpp:2311:28:2311:29 | CallTarget | func:r2311_43 | +| ir.cpp:2311:28:2311:29 | ChiPartial | partial:m2311_45 | +| ir.cpp:2311:28:2311:29 | ChiPartial | partial:m2311_48 | +| ir.cpp:2311:28:2311:29 | ChiTotal | total:m2311_22 | +| ir.cpp:2311:28:2311:29 | ChiTotal | total:m2311_24 | +| ir.cpp:2311:28:2311:29 | SideEffect | m2311_22 | +| ir.cpp:2311:28:2311:29 | SideEffect | ~m2311_24 | +| ir.cpp:2311:31:2311:37 | Address | &:r2311_16 | +| ir.cpp:2311:31:2311:37 | Arg(0) | 0:r2311_16 | +| ir.cpp:2311:31:2311:37 | SideEffect | ~m2301_3 | +| ir.cpp:2311:31:2311:37 | Unary | r2311_15 | +| ir.cpp:2311:31:2311:38 | CallTarget | func:r2311_14 | +| ir.cpp:2311:31:2311:38 | ChiPartial | partial:m2311_18 | +| ir.cpp:2311:31:2311:38 | ChiPartial | partial:m2311_21 | +| ir.cpp:2311:31:2311:38 | ChiTotal | total:m2311_8 | +| ir.cpp:2311:31:2311:38 | ChiTotal | total:m2311_13 | +| ir.cpp:2311:31:2311:38 | SideEffect | ~m2311_8 | +| ir.cpp:2311:41:2311:41 | Address | &:r2311_26 | +| ir.cpp:2311:41:2311:41 | Left | r2311_28 | +| ir.cpp:2311:41:2311:41 | Load | m2311_25 | +| ir.cpp:2311:41:2311:41 | Phi | from 6:m2303_14 | +| ir.cpp:2311:41:2311:41 | Phi | from 6:m2311_11 | +| ir.cpp:2311:41:2311:41 | Phi | from 6:~m2311_19 | +| ir.cpp:2311:41:2311:41 | Phi | from 8:m2311_39 | +| ir.cpp:2311:41:2311:41 | Phi | from 8:m2311_41 | +| ir.cpp:2311:41:2311:41 | Phi | from 8:~m2311_36 | +| ir.cpp:2311:41:2311:41 | Unary | r2311_27 | +| ir.cpp:2311:41:2311:46 | Condition | r2311_30 | +| ir.cpp:2311:46:2311:46 | Right | r2311_29 | +| ir.cpp:2311:49:2311:49 | Address | &:r2311_40 | +| ir.cpp:2311:53:2311:53 | Address | &:r2311_32 | +| ir.cpp:2311:53:2311:53 | Address | &:r2311_32 | +| ir.cpp:2311:53:2311:53 | Arg(this) | this:r2311_32 | +| ir.cpp:2311:53:2311:53 | ChiPartial | partial:m2311_38 | +| ir.cpp:2311:53:2311:53 | ChiTotal | total:m2311_23 | +| ir.cpp:2311:53:2311:53 | SideEffect | m2311_23 | +| ir.cpp:2311:55:2311:62 | CallTarget | func:r2311_33 | +| ir.cpp:2311:55:2311:62 | ChiPartial | partial:m2311_35 | +| ir.cpp:2311:55:2311:62 | ChiTotal | total:m2311_24 | +| ir.cpp:2311:55:2311:62 | SideEffect | ~m2311_24 | +| ir.cpp:2311:55:2311:62 | StoreValue | r2311_34 | +| ir.cpp:2312:9:2312:9 | Address | &:r2312_2 | +| ir.cpp:2312:13:2312:13 | StoreValue | r2312_1 | +| ir.cpp:2316:6:2316:19 | ChiPartial | partial:m2316_3 | +| ir.cpp:2316:6:2316:19 | ChiTotal | total:m2316_2 | +| ir.cpp:2316:6:2316:19 | SideEffect | ~m2321_5 | +| ir.cpp:2316:26:2316:26 | Address | &:r2316_5 | +| ir.cpp:2317:15:2317:15 | Address | &:r2317_1 | +| ir.cpp:2317:15:2317:15 | Address | &:r2317_1 | +| ir.cpp:2317:15:2317:15 | Arg(this) | this:r2317_1 | +| ir.cpp:2317:18:2317:33 | CallTarget | func:r2317_3 | +| ir.cpp:2317:18:2317:33 | ChiPartial | partial:m2317_7 | +| ir.cpp:2317:18:2317:33 | ChiPartial | partial:m2317_10 | +| ir.cpp:2317:18:2317:33 | ChiTotal | total:m2316_4 | +| ir.cpp:2317:18:2317:33 | ChiTotal | total:m2317_2 | +| ir.cpp:2317:18:2317:33 | SideEffect | ~m2316_4 | +| ir.cpp:2317:26:2317:32 | Address | &:r2317_5 | +| ir.cpp:2317:26:2317:32 | Arg(0) | 0:r2317_5 | +| ir.cpp:2317:26:2317:32 | SideEffect | ~m2316_3 | +| ir.cpp:2317:26:2317:32 | Unary | r2317_4 | +| ir.cpp:2317:36:2317:36 | Address | &:r2317_12 | +| ir.cpp:2317:36:2317:36 | Condition | r2317_13 | +| ir.cpp:2317:36:2317:36 | Load | m2316_6 | +| ir.cpp:2318:13:2318:13 | Address | &:r2318_1 | +| ir.cpp:2318:16:2318:17 | StoreValue | r2318_2 | +| ir.cpp:2320:13:2320:13 | Address | &:r2320_1 | +| ir.cpp:2320:16:2320:17 | StoreValue | r2320_2 | +| ir.cpp:2321:5:2321:5 | Address | &:r2321_1 | +| ir.cpp:2321:5:2321:5 | Address | &:r2321_1 | +| ir.cpp:2321:5:2321:5 | Arg(this) | this:r2321_1 | +| ir.cpp:2321:5:2321:5 | CallTarget | func:r2321_2 | +| ir.cpp:2321:5:2321:5 | ChiPartial | partial:m2321_4 | +| ir.cpp:2321:5:2321:5 | ChiPartial | partial:m2321_7 | +| ir.cpp:2321:5:2321:5 | ChiTotal | total:m2317_8 | +| ir.cpp:2321:5:2321:5 | ChiTotal | total:m2317_11 | +| ir.cpp:2321:5:2321:5 | SideEffect | m2317_11 | +| ir.cpp:2321:5:2321:5 | SideEffect | ~m2317_8 | +| ir.cpp:2331:6:2331:19 | ChiPartial | partial:m2331_3 | +| ir.cpp:2331:6:2331:19 | ChiTotal | total:m2331_2 | +| ir.cpp:2331:6:2331:19 | SideEffect | ~m2336_14 | +| ir.cpp:2331:26:2331:26 | Address | &:r2331_5 | +| ir.cpp:2332:8:2332:23 | Address | &:r2332_1 | +| ir.cpp:2332:8:2332:23 | Address | &:r2332_1 | +| ir.cpp:2332:8:2332:23 | Arg(this) | this:r2332_1 | +| ir.cpp:2332:8:2332:23 | Condition | r2332_19 | +| ir.cpp:2332:13:2332:13 | Address | &:r2332_11 | +| ir.cpp:2332:13:2332:13 | Address | &:r2332_11 | +| ir.cpp:2332:13:2332:13 | Arg(this) | this:r2332_11 | +| ir.cpp:2332:13:2332:13 | CallTarget | func:r2332_12 | +| ir.cpp:2332:13:2332:13 | ChiPartial | partial:m2332_14 | +| ir.cpp:2332:13:2332:13 | ChiPartial | partial:m2332_17 | +| ir.cpp:2332:13:2332:13 | ChiTotal | total:m2332_8 | +| ir.cpp:2332:13:2332:13 | ChiTotal | total:m2332_10 | +| ir.cpp:2332:13:2332:13 | SideEffect | m2332_10 | +| ir.cpp:2332:13:2332:13 | SideEffect | ~m2332_8 | +| ir.cpp:2332:13:2332:13 | Unary | r2332_13 | +| ir.cpp:2332:16:2332:23 | CallTarget | func:r2332_3 | +| ir.cpp:2332:16:2332:23 | ChiPartial | partial:m2332_7 | +| ir.cpp:2332:16:2332:23 | ChiPartial | partial:m2332_9 | +| ir.cpp:2332:16:2332:23 | ChiTotal | total:m2331_4 | +| ir.cpp:2332:16:2332:23 | ChiTotal | total:m2332_2 | +| ir.cpp:2332:16:2332:23 | SideEffect | ~m2331_4 | +| ir.cpp:2332:22:2332:22 | Address | &:r2332_4 | +| ir.cpp:2332:22:2332:22 | Arg(0) | 0:r2332_5 | +| ir.cpp:2332:22:2332:22 | Load | m2331_6 | +| ir.cpp:2333:16:2333:17 | Address | &:r2333_1 | +| ir.cpp:2333:16:2333:17 | Address | &:r2333_1 | +| ir.cpp:2333:16:2333:17 | Arg(this) | this:r2333_1 | +| ir.cpp:2333:16:2333:17 | CallTarget | func:r2333_3 | +| ir.cpp:2333:16:2333:17 | ChiPartial | partial:m2333_5 | +| ir.cpp:2333:16:2333:17 | ChiPartial | partial:m2333_7 | +| ir.cpp:2333:16:2333:17 | ChiTotal | total:m2332_15 | +| ir.cpp:2333:16:2333:17 | ChiTotal | total:m2333_2 | +| ir.cpp:2333:16:2333:17 | SideEffect | ~m2332_15 | +| ir.cpp:2334:5:2334:5 | Address | &:r2334_1 | +| ir.cpp:2334:5:2334:5 | Address | &:r2334_1 | +| ir.cpp:2334:5:2334:5 | Arg(this) | this:r2334_1 | +| ir.cpp:2334:5:2334:5 | CallTarget | func:r2334_2 | +| ir.cpp:2334:5:2334:5 | ChiPartial | partial:m2334_4 | +| ir.cpp:2334:5:2334:5 | ChiPartial | partial:m2334_7 | +| ir.cpp:2334:5:2334:5 | ChiTotal | total:m2333_6 | +| ir.cpp:2334:5:2334:5 | ChiTotal | total:m2333_8 | +| ir.cpp:2334:5:2334:5 | SideEffect | m2333_8 | +| ir.cpp:2334:5:2334:5 | SideEffect | ~m2333_6 | +| ir.cpp:2335:16:2335:17 | Address | &:r2335_1 | +| ir.cpp:2335:16:2335:17 | Address | &:r2335_1 | +| ir.cpp:2335:16:2335:17 | Arg(this) | this:r2335_1 | +| ir.cpp:2335:16:2335:17 | CallTarget | func:r2335_3 | +| ir.cpp:2335:16:2335:17 | ChiPartial | partial:m2335_5 | +| ir.cpp:2335:16:2335:17 | ChiPartial | partial:m2335_7 | +| ir.cpp:2335:16:2335:17 | ChiTotal | total:m2332_15 | +| ir.cpp:2335:16:2335:17 | ChiTotal | total:m2335_2 | +| ir.cpp:2335:16:2335:17 | SideEffect | ~m2332_15 | +| ir.cpp:2336:5:2336:5 | Address | &:r2336_1 | +| ir.cpp:2336:5:2336:5 | Address | &:r2336_1 | +| ir.cpp:2336:5:2336:5 | Address | &:r2336_10 | +| ir.cpp:2336:5:2336:5 | Address | &:r2336_10 | +| ir.cpp:2336:5:2336:5 | Arg(this) | this:r2336_1 | +| ir.cpp:2336:5:2336:5 | Arg(this) | this:r2336_10 | +| ir.cpp:2336:5:2336:5 | CallTarget | func:r2336_2 | +| ir.cpp:2336:5:2336:5 | CallTarget | func:r2336_11 | +| ir.cpp:2336:5:2336:5 | ChiPartial | partial:m2336_4 | +| ir.cpp:2336:5:2336:5 | ChiPartial | partial:m2336_7 | +| ir.cpp:2336:5:2336:5 | ChiPartial | partial:m2336_13 | +| ir.cpp:2336:5:2336:5 | ChiPartial | partial:m2336_16 | +| ir.cpp:2336:5:2336:5 | ChiTotal | total:m2332_18 | +| ir.cpp:2336:5:2336:5 | ChiTotal | total:m2335_6 | +| ir.cpp:2336:5:2336:5 | ChiTotal | total:m2335_8 | +| ir.cpp:2336:5:2336:5 | ChiTotal | total:m2336_9 | +| ir.cpp:2336:5:2336:5 | Phi | from 1:~m2334_5 | +| ir.cpp:2336:5:2336:5 | Phi | from 2:~m2336_5 | +| ir.cpp:2336:5:2336:5 | SideEffect | m2332_18 | +| ir.cpp:2336:5:2336:5 | SideEffect | m2335_8 | +| ir.cpp:2336:5:2336:5 | SideEffect | ~m2335_6 | +| ir.cpp:2336:5:2336:5 | SideEffect | ~m2336_9 | +| ir.cpp:2339:6:2339:25 | ChiPartial | partial:m2339_3 | +| ir.cpp:2339:6:2339:25 | ChiTotal | total:m2339_2 | +| ir.cpp:2339:6:2339:25 | SideEffect | ~m2350_13 | +| ir.cpp:2339:32:2339:32 | Address | &:r2339_5 | +| ir.cpp:2341:16:2341:16 | Address | &:r2341_1 | +| ir.cpp:2341:16:2341:16 | Address | &:r2341_1 | +| ir.cpp:2341:16:2341:16 | Arg(this) | this:r2341_1 | +| ir.cpp:2341:16:2341:16 | CallTarget | func:r2341_3 | +| ir.cpp:2341:16:2341:16 | ChiPartial | partial:m2341_5 | +| ir.cpp:2341:16:2341:16 | ChiPartial | partial:m2341_7 | +| ir.cpp:2341:16:2341:16 | ChiTotal | total:m2339_4 | +| ir.cpp:2341:16:2341:16 | ChiTotal | total:m2341_2 | +| ir.cpp:2341:16:2341:16 | SideEffect | ~m2339_4 | +| ir.cpp:2342:15:2342:15 | Address | &:r2342_2 | +| ir.cpp:2342:15:2342:15 | Condition | r2342_3 | +| ir.cpp:2342:15:2342:15 | Load | m2342_1 | +| ir.cpp:2342:15:2342:15 | Phi | from 0:m2339_6 | +| ir.cpp:2342:15:2342:15 | Phi | from 2:m2343_3 | +| ir.cpp:2343:13:2343:13 | Address | &:r2343_2 | +| ir.cpp:2343:17:2343:21 | StoreValue | r2343_1 | +| ir.cpp:2345:5:2345:5 | Address | &:r2345_1 | +| ir.cpp:2345:5:2345:5 | Address | &:r2345_1 | +| ir.cpp:2345:5:2345:5 | Arg(this) | this:r2345_1 | +| ir.cpp:2345:5:2345:5 | CallTarget | func:r2345_2 | +| ir.cpp:2345:5:2345:5 | ChiPartial | partial:m2345_4 | +| ir.cpp:2345:5:2345:5 | ChiPartial | partial:m2345_7 | +| ir.cpp:2345:5:2345:5 | ChiTotal | total:m2341_6 | +| ir.cpp:2345:5:2345:5 | ChiTotal | total:m2341_8 | +| ir.cpp:2345:5:2345:5 | SideEffect | m2341_8 | +| ir.cpp:2345:5:2345:5 | SideEffect | ~m2341_6 | +| ir.cpp:2348:16:2348:31 | Address | &:r2348_3 | +| ir.cpp:2348:16:2348:31 | Address | &:r2348_3 | +| ir.cpp:2348:16:2348:31 | Arg(this) | this:r2348_3 | +| ir.cpp:2348:16:2348:31 | Condition | r2348_21 | +| ir.cpp:2348:16:2348:31 | Phi | from 3:m2342_1 | +| ir.cpp:2348:16:2348:31 | Phi | from 3:~m2345_5 | +| ir.cpp:2348:16:2348:31 | Phi | from 5:m2349_3 | +| ir.cpp:2348:16:2348:31 | Phi | from 5:~m2350_5 | +| ir.cpp:2348:21:2348:21 | Address | &:r2348_13 | +| ir.cpp:2348:21:2348:21 | Address | &:r2348_13 | +| ir.cpp:2348:21:2348:21 | Arg(this) | this:r2348_13 | +| ir.cpp:2348:21:2348:21 | CallTarget | func:r2348_14 | +| ir.cpp:2348:21:2348:21 | ChiPartial | partial:m2348_16 | +| ir.cpp:2348:21:2348:21 | ChiPartial | partial:m2348_19 | +| ir.cpp:2348:21:2348:21 | ChiTotal | total:m2348_10 | +| ir.cpp:2348:21:2348:21 | ChiTotal | total:m2348_12 | +| ir.cpp:2348:21:2348:21 | SideEffect | m2348_12 | +| ir.cpp:2348:21:2348:21 | SideEffect | ~m2348_10 | +| ir.cpp:2348:21:2348:21 | Unary | r2348_15 | +| ir.cpp:2348:24:2348:31 | CallTarget | func:r2348_5 | +| ir.cpp:2348:24:2348:31 | ChiPartial | partial:m2348_9 | +| ir.cpp:2348:24:2348:31 | ChiPartial | partial:m2348_11 | +| ir.cpp:2348:24:2348:31 | ChiTotal | total:m2348_1 | +| ir.cpp:2348:24:2348:31 | ChiTotal | total:m2348_4 | +| ir.cpp:2348:24:2348:31 | SideEffect | ~m2348_1 | +| ir.cpp:2348:30:2348:30 | Address | &:r2348_6 | +| ir.cpp:2348:30:2348:30 | Arg(0) | 0:r2348_7 | +| ir.cpp:2348:30:2348:30 | Load | m2348_2 | +| ir.cpp:2349:13:2349:13 | Address | &:r2349_2 | +| ir.cpp:2349:17:2349:21 | StoreValue | r2349_1 | +| ir.cpp:2350:9:2350:9 | Address | &:r2350_1 | +| ir.cpp:2350:9:2350:9 | Address | &:r2350_1 | +| ir.cpp:2350:9:2350:9 | Address | &:r2350_9 | +| ir.cpp:2350:9:2350:9 | Address | &:r2350_9 | +| ir.cpp:2350:9:2350:9 | Arg(this) | this:r2350_1 | +| ir.cpp:2350:9:2350:9 | Arg(this) | this:r2350_9 | +| ir.cpp:2350:9:2350:9 | CallTarget | func:r2350_2 | +| ir.cpp:2350:9:2350:9 | CallTarget | func:r2350_10 | +| ir.cpp:2350:9:2350:9 | ChiPartial | partial:m2350_4 | +| ir.cpp:2350:9:2350:9 | ChiPartial | partial:m2350_7 | +| ir.cpp:2350:9:2350:9 | ChiPartial | partial:m2350_12 | +| ir.cpp:2350:9:2350:9 | ChiPartial | partial:m2350_15 | +| ir.cpp:2350:9:2350:9 | ChiTotal | total:m2348_17 | +| ir.cpp:2350:9:2350:9 | ChiTotal | total:m2348_17 | +| ir.cpp:2350:9:2350:9 | ChiTotal | total:m2348_20 | +| ir.cpp:2350:9:2350:9 | ChiTotal | total:m2348_20 | +| ir.cpp:2350:9:2350:9 | SideEffect | m2348_20 | +| ir.cpp:2350:9:2350:9 | SideEffect | m2348_20 | +| ir.cpp:2350:9:2350:9 | SideEffect | ~m2348_17 | +| ir.cpp:2350:9:2350:9 | SideEffect | ~m2348_17 | +| ir.cpp:2354:6:2354:13 | ChiPartial | partial:m2354_3 | +| ir.cpp:2354:6:2354:13 | ChiTotal | total:m2354_2 | +| ir.cpp:2354:6:2354:13 | SideEffect | m2354_3 | +| ir.cpp:2356:6:2356:24 | ChiPartial | partial:m2356_3 | +| ir.cpp:2356:6:2356:24 | ChiTotal | total:m2356_2 | +| ir.cpp:2356:6:2356:24 | Phi | from 2:~m2365_5 | +| ir.cpp:2356:6:2356:24 | Phi | from 4:~m2365_13 | +| ir.cpp:2356:6:2356:24 | Phi | from 5:~m2365_22 | +| ir.cpp:2356:6:2356:24 | SideEffect | ~m2356_7 | +| ir.cpp:2356:31:2356:31 | Address | &:r2356_5 | +| ir.cpp:2357:12:2357:12 | Address | &:r2357_1 | +| ir.cpp:2357:12:2357:12 | Address | &:r2357_1 | +| ir.cpp:2357:12:2357:12 | Arg(this) | this:r2357_1 | +| ir.cpp:2357:12:2357:12 | CallTarget | func:r2357_3 | +| ir.cpp:2357:12:2357:12 | ChiPartial | partial:m2357_5 | +| ir.cpp:2357:12:2357:12 | ChiPartial | partial:m2357_7 | +| ir.cpp:2357:12:2357:12 | ChiTotal | total:m2356_4 | +| ir.cpp:2357:12:2357:12 | ChiTotal | total:m2357_2 | +| ir.cpp:2357:12:2357:12 | SideEffect | ~m2356_4 | +| ir.cpp:2358:8:2358:8 | Address | &:r2358_1 | +| ir.cpp:2358:8:2358:8 | Condition | r2358_2 | +| ir.cpp:2358:8:2358:8 | Load | m2356_6 | +| ir.cpp:2361:8:2361:8 | Address | &:r2361_1 | +| ir.cpp:2361:8:2361:8 | Condition | r2361_2 | +| ir.cpp:2361:8:2361:8 | Load | m2356_6 | +| ir.cpp:2362:16:2362:23 | CallTarget | func:r2362_1 | +| ir.cpp:2362:16:2362:23 | ChiPartial | partial:m2362_3 | +| ir.cpp:2362:16:2362:23 | ChiTotal | total:m2357_6 | +| ir.cpp:2362:16:2362:23 | SideEffect | ~m2357_6 | +| ir.cpp:2365:1:2365:1 | Address | &:r2365_1 | +| ir.cpp:2365:1:2365:1 | Address | &:r2365_1 | +| ir.cpp:2365:1:2365:1 | Address | &:r2365_9 | +| ir.cpp:2365:1:2365:1 | Address | &:r2365_9 | +| ir.cpp:2365:1:2365:1 | Address | &:r2365_18 | +| ir.cpp:2365:1:2365:1 | Address | &:r2365_18 | +| ir.cpp:2365:1:2365:1 | Arg(this) | this:r2365_1 | +| ir.cpp:2365:1:2365:1 | Arg(this) | this:r2365_9 | +| ir.cpp:2365:1:2365:1 | Arg(this) | this:r2365_18 | +| ir.cpp:2365:1:2365:1 | CallTarget | func:r2365_2 | +| ir.cpp:2365:1:2365:1 | CallTarget | func:r2365_10 | +| ir.cpp:2365:1:2365:1 | CallTarget | func:r2365_19 | +| ir.cpp:2365:1:2365:1 | ChiPartial | partial:m2365_4 | +| ir.cpp:2365:1:2365:1 | ChiPartial | partial:m2365_7 | +| ir.cpp:2365:1:2365:1 | ChiPartial | partial:m2365_12 | +| ir.cpp:2365:1:2365:1 | ChiPartial | partial:m2365_15 | +| ir.cpp:2365:1:2365:1 | ChiPartial | partial:m2365_21 | +| ir.cpp:2365:1:2365:1 | ChiPartial | partial:m2365_24 | +| ir.cpp:2365:1:2365:1 | ChiTotal | total:m2357_6 | +| ir.cpp:2365:1:2365:1 | ChiTotal | total:m2357_6 | +| ir.cpp:2365:1:2365:1 | ChiTotal | total:m2357_8 | +| ir.cpp:2365:1:2365:1 | ChiTotal | total:m2357_8 | +| ir.cpp:2365:1:2365:1 | ChiTotal | total:m2357_8 | +| ir.cpp:2365:1:2365:1 | ChiTotal | total:m2362_4 | +| ir.cpp:2365:1:2365:1 | SideEffect | m2357_8 | +| ir.cpp:2365:1:2365:1 | SideEffect | m2357_8 | +| ir.cpp:2365:1:2365:1 | SideEffect | m2357_8 | +| ir.cpp:2365:1:2365:1 | SideEffect | ~m2357_6 | +| ir.cpp:2365:1:2365:1 | SideEffect | ~m2357_6 | +| ir.cpp:2365:1:2365:1 | SideEffect | ~m2362_4 | +| ir.cpp:2367:5:2367:24 | Address | &:r2367_9 | +| ir.cpp:2367:5:2367:24 | ChiPartial | partial:m2367_3 | +| ir.cpp:2367:5:2367:24 | ChiTotal | total:m2367_2 | +| ir.cpp:2367:5:2367:24 | Load | m2367_8 | +| ir.cpp:2367:5:2367:24 | Phi | from 2:m2370_3 | +| ir.cpp:2367:5:2367:24 | Phi | from 2:~m2373_5 | +| ir.cpp:2367:5:2367:24 | Phi | from 3:m2372_3 | +| ir.cpp:2367:5:2367:24 | Phi | from 3:~m2373_13 | +| ir.cpp:2367:5:2367:24 | SideEffect | ~m2367_7 | +| ir.cpp:2367:31:2367:31 | Address | &:r2367_5 | +| ir.cpp:2368:12:2368:12 | Address | &:r2368_1 | +| ir.cpp:2368:12:2368:12 | Address | &:r2368_1 | +| ir.cpp:2368:12:2368:12 | Arg(this) | this:r2368_1 | +| ir.cpp:2368:12:2368:12 | CallTarget | func:r2368_3 | +| ir.cpp:2368:12:2368:12 | ChiPartial | partial:m2368_5 | +| ir.cpp:2368:12:2368:12 | ChiPartial | partial:m2368_7 | +| ir.cpp:2368:12:2368:12 | ChiTotal | total:m2367_4 | +| ir.cpp:2368:12:2368:12 | ChiTotal | total:m2368_2 | +| ir.cpp:2368:12:2368:12 | SideEffect | ~m2367_4 | +| ir.cpp:2369:8:2369:8 | Address | &:r2369_1 | +| ir.cpp:2369:8:2369:8 | Condition | r2369_2 | +| ir.cpp:2369:8:2369:8 | Load | m2367_6 | +| ir.cpp:2370:9:2370:17 | Address | &:r2370_1 | +| ir.cpp:2370:16:2370:16 | StoreValue | r2370_2 | +| ir.cpp:2372:5:2372:13 | Address | &:r2372_1 | +| ir.cpp:2372:12:2372:12 | StoreValue | r2372_2 | +| ir.cpp:2373:1:2373:1 | Address | &:r2373_1 | +| ir.cpp:2373:1:2373:1 | Address | &:r2373_1 | +| ir.cpp:2373:1:2373:1 | Address | &:r2373_9 | +| ir.cpp:2373:1:2373:1 | Address | &:r2373_9 | +| ir.cpp:2373:1:2373:1 | Arg(this) | this:r2373_1 | +| ir.cpp:2373:1:2373:1 | Arg(this) | this:r2373_9 | +| ir.cpp:2373:1:2373:1 | CallTarget | func:r2373_2 | +| ir.cpp:2373:1:2373:1 | CallTarget | func:r2373_10 | +| ir.cpp:2373:1:2373:1 | ChiPartial | partial:m2373_4 | +| ir.cpp:2373:1:2373:1 | ChiPartial | partial:m2373_7 | +| ir.cpp:2373:1:2373:1 | ChiPartial | partial:m2373_12 | +| ir.cpp:2373:1:2373:1 | ChiPartial | partial:m2373_15 | +| ir.cpp:2373:1:2373:1 | ChiTotal | total:m2368_6 | +| ir.cpp:2373:1:2373:1 | ChiTotal | total:m2368_6 | +| ir.cpp:2373:1:2373:1 | ChiTotal | total:m2368_8 | +| ir.cpp:2373:1:2373:1 | ChiTotal | total:m2368_8 | +| ir.cpp:2373:1:2373:1 | SideEffect | m2368_8 | +| ir.cpp:2373:1:2373:1 | SideEffect | m2368_8 | +| ir.cpp:2373:1:2373:1 | SideEffect | ~m2368_6 | +| ir.cpp:2373:1:2373:1 | SideEffect | ~m2368_6 | +| ir.cpp:2375:6:2375:26 | ChiPartial | partial:m2375_3 | +| ir.cpp:2375:6:2375:26 | ChiTotal | total:m2375_2 | +| ir.cpp:2375:6:2375:26 | SideEffect | ~m2378_5 | +| ir.cpp:2376:12:2376:12 | Address | &:r2376_1 | +| ir.cpp:2376:12:2376:12 | Address | &:r2376_1 | +| ir.cpp:2376:12:2376:12 | Arg(this) | this:r2376_1 | +| ir.cpp:2376:12:2376:12 | CallTarget | func:r2376_3 | +| ir.cpp:2376:12:2376:12 | ChiPartial | partial:m2376_5 | +| ir.cpp:2376:12:2376:12 | ChiPartial | partial:m2376_7 | +| ir.cpp:2376:12:2376:12 | ChiTotal | total:m2375_4 | +| ir.cpp:2376:12:2376:12 | ChiTotal | total:m2376_2 | +| ir.cpp:2376:12:2376:12 | SideEffect | ~m2375_4 | +| ir.cpp:2377:12:2377:19 | CallTarget | func:r2377_1 | +| ir.cpp:2377:12:2377:19 | ChiPartial | partial:m2377_3 | +| ir.cpp:2377:12:2377:19 | ChiTotal | total:m2376_6 | +| ir.cpp:2377:12:2377:19 | SideEffect | ~m2376_6 | +| ir.cpp:2378:1:2378:1 | Address | &:r2378_1 | +| ir.cpp:2378:1:2378:1 | Address | &:r2378_1 | +| ir.cpp:2378:1:2378:1 | Arg(this) | this:r2378_1 | +| ir.cpp:2378:1:2378:1 | CallTarget | func:r2378_2 | +| ir.cpp:2378:1:2378:1 | ChiPartial | partial:m2378_4 | +| ir.cpp:2378:1:2378:1 | ChiPartial | partial:m2378_7 | +| ir.cpp:2378:1:2378:1 | ChiTotal | total:m2376_8 | +| ir.cpp:2378:1:2378:1 | ChiTotal | total:m2377_4 | +| ir.cpp:2378:1:2378:1 | SideEffect | m2376_8 | +| ir.cpp:2378:1:2378:1 | SideEffect | ~m2377_4 | +| ir.cpp:2388:32:2388:47 | Address | &:r2388_5 | +| ir.cpp:2388:32:2388:47 | ChiPartial | partial:m2388_3 | +| ir.cpp:2388:32:2388:47 | ChiTotal | total:m2388_2 | +| ir.cpp:2388:32:2388:47 | Load | m2390_3 | +| ir.cpp:2388:32:2388:47 | SideEffect | m2388_3 | +| ir.cpp:2390:9:2390:44 | Address | &:r2390_1 | +| ir.cpp:2390:16:2390:43 | StoreValue | r2390_2 | +| ir.cpp:2395:5:2395:49 | Address | &:r2395_5 | +| ir.cpp:2395:5:2395:49 | ChiPartial | partial:m2395_3 | +| ir.cpp:2395:5:2395:49 | ChiTotal | total:m2395_2 | +| ir.cpp:2395:5:2395:49 | Load | m2396_5 | +| ir.cpp:2395:5:2395:49 | SideEffect | m2395_3 | +| ir.cpp:2396:5:2396:17 | Address | &:r2396_1 | +| ir.cpp:2396:12:2396:12 | Left | r2396_2 | +| ir.cpp:2396:12:2396:16 | StoreValue | r2396_4 | +| ir.cpp:2396:16:2396:16 | Right | r2396_3 | +| ir.cpp:2406:5:2406:45 | Address | &:r2406_5 | +| ir.cpp:2406:5:2406:45 | ChiPartial | partial:m2406_3 | +| ir.cpp:2406:5:2406:45 | ChiTotal | total:m2406_2 | +| ir.cpp:2406:5:2406:45 | Load | m2407_3 | +| ir.cpp:2406:5:2406:45 | SideEffect | m2406_3 | +| ir.cpp:2407:5:2407:22 | Address | &:r2407_1 | +| ir.cpp:2407:12:2407:21 | StoreValue | r2407_2 | +| ir.cpp:2410:6:2410:40 | ChiPartial | partial:m2410_3 | +| ir.cpp:2410:6:2410:40 | ChiTotal | total:m2410_2 | +| ir.cpp:2410:6:2410:40 | SideEffect | ~m2430_56 | +| ir.cpp:2411:9:2411:46 | Address | &:r2411_1 | +| ir.cpp:2411:9:2411:46 | Condition | r2411_22 | +| ir.cpp:2411:14:2411:14 | Address | &:r2411_18 | +| ir.cpp:2411:14:2411:14 | Left | r2411_19 | +| ir.cpp:2411:14:2411:14 | Load | m2411_17 | +| ir.cpp:2411:14:2411:14 | Right | r2411_20 | +| ir.cpp:2411:14:2411:14 | Unary | r2411_21 | +| ir.cpp:2411:18:2411:38 | Address | &:r2411_2 | +| ir.cpp:2411:18:2411:38 | Address | &:r2411_2 | +| ir.cpp:2411:18:2411:38 | Address | &:r2411_2 | +| ir.cpp:2411:18:2411:38 | Address | &:r2411_2 | +| ir.cpp:2411:18:2411:38 | Arg(this) | this:r2411_2 | +| ir.cpp:2411:18:2411:38 | Arg(this) | this:r2411_2 | +| ir.cpp:2411:18:2411:38 | CallTarget | func:r2411_4 | +| ir.cpp:2411:18:2411:38 | ChiPartial | partial:m2411_6 | +| ir.cpp:2411:18:2411:38 | ChiPartial | partial:m2411_8 | +| ir.cpp:2411:18:2411:38 | ChiPartial | partial:m2411_15 | +| ir.cpp:2411:18:2411:38 | ChiTotal | total:m2410_4 | +| ir.cpp:2411:18:2411:38 | ChiTotal | total:m2411_3 | +| ir.cpp:2411:18:2411:38 | ChiTotal | total:m2411_9 | +| ir.cpp:2411:18:2411:38 | SideEffect | m2411_9 | +| ir.cpp:2411:18:2411:38 | SideEffect | ~m2410_4 | +| ir.cpp:2411:40:2411:44 | CallTarget | func:r2411_10 | +| ir.cpp:2411:40:2411:44 | ChiPartial | partial:m2411_12 | +| ir.cpp:2411:40:2411:44 | ChiTotal | total:m2411_7 | +| ir.cpp:2411:40:2411:44 | SideEffect | ~m2411_7 | +| ir.cpp:2411:40:2411:44 | StoreValue | r2411_11 | +| ir.cpp:2412:9:2412:9 | Address | &:r2412_1 | +| ir.cpp:2412:9:2412:9 | Address | &:r2412_1 | +| ir.cpp:2412:9:2412:9 | Left | r2412_2 | +| ir.cpp:2412:9:2412:9 | Load | m2411_17 | +| ir.cpp:2412:9:2412:11 | Right | r2412_3 | +| ir.cpp:2412:9:2412:11 | StoreValue | r2412_4 | +| ir.cpp:2414:14:2414:14 | Address | &:r2414_1 | +| ir.cpp:2414:18:2414:38 | Address | &:r2414_2 | +| ir.cpp:2414:18:2414:38 | Address | &:r2414_2 | +| ir.cpp:2414:18:2414:38 | Address | &:r2414_2 | +| ir.cpp:2414:18:2414:38 | Address | &:r2414_2 | +| ir.cpp:2414:18:2414:38 | Arg(this) | this:r2414_2 | +| ir.cpp:2414:18:2414:38 | Arg(this) | this:r2414_2 | +| ir.cpp:2414:18:2414:38 | CallTarget | func:r2414_4 | +| ir.cpp:2414:18:2414:38 | ChiPartial | partial:m2414_6 | +| ir.cpp:2414:18:2414:38 | ChiPartial | partial:m2414_8 | +| ir.cpp:2414:18:2414:38 | ChiPartial | partial:m2414_15 | +| ir.cpp:2414:18:2414:38 | ChiTotal | total:m2411_13 | +| ir.cpp:2414:18:2414:38 | ChiTotal | total:m2414_3 | +| ir.cpp:2414:18:2414:38 | ChiTotal | total:m2414_9 | +| ir.cpp:2414:18:2414:38 | SideEffect | m2414_9 | +| ir.cpp:2414:18:2414:38 | SideEffect | ~m2411_13 | +| ir.cpp:2414:40:2414:44 | CallTarget | func:r2414_10 | +| ir.cpp:2414:40:2414:44 | ChiPartial | partial:m2414_12 | +| ir.cpp:2414:40:2414:44 | ChiTotal | total:m2414_7 | +| ir.cpp:2414:40:2414:44 | SideEffect | ~m2414_7 | +| ir.cpp:2414:40:2414:44 | StoreValue | r2414_11 | +| ir.cpp:2414:49:2414:49 | Address | &:r2414_18 | +| ir.cpp:2414:49:2414:49 | Condition | r2414_21 | +| ir.cpp:2414:49:2414:49 | Left | r2414_19 | +| ir.cpp:2414:49:2414:49 | Load | m2414_17 | +| ir.cpp:2414:49:2414:49 | Right | r2414_20 | +| ir.cpp:2415:9:2415:9 | Address | &:r2415_1 | +| ir.cpp:2415:9:2415:9 | Address | &:r2415_1 | +| ir.cpp:2415:9:2415:9 | Left | r2415_2 | +| ir.cpp:2415:9:2415:9 | Load | m2414_17 | +| ir.cpp:2415:9:2415:11 | Right | r2415_3 | +| ir.cpp:2415:9:2415:11 | StoreValue | r2415_4 | +| ir.cpp:2417:24:2417:24 | Address | &:r2417_1 | +| ir.cpp:2417:28:2417:48 | Address | &:r2417_2 | +| ir.cpp:2417:28:2417:48 | Address | &:r2417_2 | +| ir.cpp:2417:28:2417:48 | Address | &:r2417_2 | +| ir.cpp:2417:28:2417:48 | Address | &:r2417_2 | +| ir.cpp:2417:28:2417:48 | Arg(this) | this:r2417_2 | +| ir.cpp:2417:28:2417:48 | Arg(this) | this:r2417_2 | +| ir.cpp:2417:28:2417:48 | CallTarget | func:r2417_4 | +| ir.cpp:2417:28:2417:48 | ChiPartial | partial:m2417_6 | +| ir.cpp:2417:28:2417:48 | ChiPartial | partial:m2417_8 | +| ir.cpp:2417:28:2417:48 | ChiPartial | partial:m2417_15 | +| ir.cpp:2417:28:2417:48 | ChiTotal | total:m2414_13 | +| ir.cpp:2417:28:2417:48 | ChiTotal | total:m2417_3 | +| ir.cpp:2417:28:2417:48 | ChiTotal | total:m2417_9 | +| ir.cpp:2417:28:2417:48 | SideEffect | m2417_9 | +| ir.cpp:2417:28:2417:48 | SideEffect | ~m2414_13 | +| ir.cpp:2417:50:2417:54 | CallTarget | func:r2417_10 | +| ir.cpp:2417:50:2417:54 | ChiPartial | partial:m2417_12 | +| ir.cpp:2417:50:2417:54 | ChiTotal | total:m2417_7 | +| ir.cpp:2417:50:2417:54 | SideEffect | ~m2417_7 | +| ir.cpp:2417:50:2417:54 | StoreValue | r2417_11 | +| ir.cpp:2417:59:2417:93 | Condition | r2417_18 | +| ir.cpp:2418:9:2418:9 | Address | &:r2418_1 | +| ir.cpp:2418:9:2418:9 | Address | &:r2418_1 | +| ir.cpp:2418:9:2418:9 | Left | r2418_2 | +| ir.cpp:2418:9:2418:9 | Load | m2417_17 | +| ir.cpp:2418:9:2418:11 | Right | r2418_3 | +| ir.cpp:2418:9:2418:11 | StoreValue | r2418_4 | +| ir.cpp:2420:12:2420:49 | Address | &:r2420_1 | +| ir.cpp:2420:12:2420:49 | Condition | r2420_21 | +| ir.cpp:2420:17:2420:17 | Address | &:r2420_18 | +| ir.cpp:2420:17:2420:17 | Load | m2420_17 | +| ir.cpp:2420:17:2420:17 | Unary | r2420_19 | +| ir.cpp:2420:17:2420:17 | Unary | r2420_20 | +| ir.cpp:2420:21:2420:41 | Address | &:r2420_2 | +| ir.cpp:2420:21:2420:41 | Address | &:r2420_2 | +| ir.cpp:2420:21:2420:41 | Address | &:r2420_2 | +| ir.cpp:2420:21:2420:41 | Address | &:r2420_2 | +| ir.cpp:2420:21:2420:41 | Arg(this) | this:r2420_2 | +| ir.cpp:2420:21:2420:41 | Arg(this) | this:r2420_2 | +| ir.cpp:2420:21:2420:41 | CallTarget | func:r2420_4 | +| ir.cpp:2420:21:2420:41 | ChiPartial | partial:m2420_6 | +| ir.cpp:2420:21:2420:41 | ChiPartial | partial:m2420_8 | +| ir.cpp:2420:21:2420:41 | ChiPartial | partial:m2420_15 | +| ir.cpp:2420:21:2420:41 | ChiTotal | total:m2417_13 | +| ir.cpp:2420:21:2420:41 | ChiTotal | total:m2420_3 | +| ir.cpp:2420:21:2420:41 | ChiTotal | total:m2420_9 | +| ir.cpp:2420:21:2420:41 | SideEffect | m2420_9 | +| ir.cpp:2420:21:2420:41 | SideEffect | ~m2417_13 | +| ir.cpp:2420:43:2420:47 | CallTarget | func:r2420_10 | +| ir.cpp:2420:43:2420:47 | ChiPartial | partial:m2420_12 | +| ir.cpp:2420:43:2420:47 | ChiTotal | total:m2420_7 | +| ir.cpp:2420:43:2420:47 | SideEffect | ~m2420_7 | +| ir.cpp:2420:43:2420:47 | StoreValue | r2420_11 | +| ir.cpp:2422:11:2422:11 | Address | &:r2422_1 | +| ir.cpp:2422:11:2422:11 | Address | &:r2422_1 | +| ir.cpp:2422:11:2422:11 | Left | r2422_2 | +| ir.cpp:2422:11:2422:11 | Load | m2420_17 | +| ir.cpp:2422:11:2422:13 | Right | r2422_3 | +| ir.cpp:2422:11:2422:13 | StoreValue | r2422_4 | +| ir.cpp:2425:17:2425:17 | Address | &:r2425_1 | +| ir.cpp:2425:21:2425:41 | Address | &:r2425_2 | +| ir.cpp:2425:21:2425:41 | Address | &:r2425_2 | +| ir.cpp:2425:21:2425:41 | Address | &:r2425_2 | +| ir.cpp:2425:21:2425:41 | Address | &:r2425_2 | +| ir.cpp:2425:21:2425:41 | Arg(this) | this:r2425_2 | +| ir.cpp:2425:21:2425:41 | Arg(this) | this:r2425_2 | +| ir.cpp:2425:21:2425:41 | CallTarget | func:r2425_4 | +| ir.cpp:2425:21:2425:41 | ChiPartial | partial:m2425_6 | +| ir.cpp:2425:21:2425:41 | ChiPartial | partial:m2425_8 | +| ir.cpp:2425:21:2425:41 | ChiPartial | partial:m2425_15 | +| ir.cpp:2425:21:2425:41 | ChiTotal | total:m2420_13 | +| ir.cpp:2425:21:2425:41 | ChiTotal | total:m2425_3 | +| ir.cpp:2425:21:2425:41 | ChiTotal | total:m2425_9 | +| ir.cpp:2425:21:2425:41 | SideEffect | m2425_9 | +| ir.cpp:2425:21:2425:41 | SideEffect | ~m2420_13 | +| ir.cpp:2425:43:2425:47 | CallTarget | func:r2425_10 | +| ir.cpp:2425:43:2425:47 | ChiPartial | partial:m2425_12 | +| ir.cpp:2425:43:2425:47 | ChiTotal | total:m2425_7 | +| ir.cpp:2425:43:2425:47 | SideEffect | ~m2425_7 | +| ir.cpp:2425:43:2425:47 | StoreValue | r2425_11 | +| ir.cpp:2425:52:2425:52 | Address | &:r2425_18 | +| ir.cpp:2425:52:2425:52 | Condition | r2425_20 | +| ir.cpp:2425:52:2425:52 | Load | m2425_17 | +| ir.cpp:2425:52:2425:52 | Unary | r2425_19 | +| ir.cpp:2427:11:2427:11 | Address | &:r2427_1 | +| ir.cpp:2427:11:2427:11 | Address | &:r2427_1 | +| ir.cpp:2427:11:2427:11 | Left | r2427_2 | +| ir.cpp:2427:11:2427:11 | Load | m2425_17 | +| ir.cpp:2427:11:2427:13 | Right | r2427_3 | +| ir.cpp:2427:11:2427:13 | StoreValue | r2427_4 | +| ir.cpp:2430:5:2430:5 | Address | &:r2430_18 | +| ir.cpp:2430:5:2430:5 | Address | &:r2430_31 | +| ir.cpp:2430:5:2430:5 | Address | &:r2430_37 | +| ir.cpp:2430:14:2430:14 | Address | &:r2430_1 | +| ir.cpp:2430:18:2430:38 | Address | &:r2430_2 | +| ir.cpp:2430:18:2430:38 | Address | &:r2430_2 | +| ir.cpp:2430:18:2430:38 | Address | &:r2430_2 | +| ir.cpp:2430:18:2430:38 | Address | &:r2430_2 | +| ir.cpp:2430:18:2430:38 | Arg(this) | this:r2430_2 | +| ir.cpp:2430:18:2430:38 | Arg(this) | this:r2430_2 | +| ir.cpp:2430:18:2430:38 | CallTarget | func:r2430_4 | +| ir.cpp:2430:18:2430:38 | ChiPartial | partial:m2430_6 | +| ir.cpp:2430:18:2430:38 | ChiPartial | partial:m2430_8 | +| ir.cpp:2430:18:2430:38 | ChiPartial | partial:m2430_15 | +| ir.cpp:2430:18:2430:38 | ChiTotal | total:m2425_13 | +| ir.cpp:2430:18:2430:38 | ChiTotal | total:m2430_3 | +| ir.cpp:2430:18:2430:38 | ChiTotal | total:m2430_9 | +| ir.cpp:2430:18:2430:38 | SideEffect | m2430_9 | +| ir.cpp:2430:18:2430:38 | SideEffect | ~m2425_13 | +| ir.cpp:2430:40:2430:44 | CallTarget | func:r2430_10 | +| ir.cpp:2430:40:2430:44 | ChiPartial | partial:m2430_12 | +| ir.cpp:2430:40:2430:44 | ChiTotal | total:m2430_7 | +| ir.cpp:2430:40:2430:44 | SideEffect | ~m2430_7 | +| ir.cpp:2430:40:2430:44 | StoreValue | r2430_11 | +| ir.cpp:2430:54:2430:54 | Address | &:r2430_58 | +| ir.cpp:2430:58:2430:58 | Address | &:r2430_32 | +| ir.cpp:2430:58:2430:58 | Address | &:r2430_38 | +| ir.cpp:2430:58:2430:58 | Address | &:r2430_61 | +| ir.cpp:2430:58:2430:58 | Address | &:r2430_66 | +| ir.cpp:2430:58:2430:58 | Address | &:r2430_66 | +| ir.cpp:2430:58:2430:58 | Arg(this) | this:r0_2 | +| ir.cpp:2430:58:2430:58 | Arg(this) | this:r0_5 | +| ir.cpp:2430:58:2430:58 | Arg(this) | this:r0_7 | +| ir.cpp:2430:58:2430:58 | Arg(this) | this:r0_8 | +| ir.cpp:2430:58:2430:58 | Arg(this) | this:r0_15 | +| ir.cpp:2430:58:2430:58 | Arg(this) | this:r2430_66 | +| ir.cpp:2430:58:2430:58 | CallTarget | func:r2430_34 | +| ir.cpp:2430:58:2430:58 | CallTarget | func:r2430_40 | +| ir.cpp:2430:58:2430:58 | CallTarget | func:r2430_46 | +| ir.cpp:2430:58:2430:58 | CallTarget | func:r2430_47 | +| ir.cpp:2430:58:2430:58 | CallTarget | func:r2430_60 | +| ir.cpp:2430:58:2430:58 | CallTarget | func:r2430_67 | +| ir.cpp:2430:58:2430:58 | ChiPartial | partial:m2430_50 | +| ir.cpp:2430:58:2430:58 | ChiPartial | partial:m2430_52 | +| ir.cpp:2430:58:2430:58 | ChiPartial | partial:m2430_55 | +| ir.cpp:2430:58:2430:58 | ChiPartial | partial:m2430_62 | +| ir.cpp:2430:58:2430:58 | ChiPartial | partial:m2430_69 | +| ir.cpp:2430:58:2430:58 | ChiPartial | partial:m2430_72 | +| ir.cpp:2430:58:2430:58 | ChiTotal | total:m0_9 | +| ir.cpp:2430:58:2430:58 | ChiTotal | total:m2430_43 | +| ir.cpp:2430:58:2430:58 | ChiTotal | total:m2430_44 | +| ir.cpp:2430:58:2430:58 | ChiTotal | total:m2430_51 | +| ir.cpp:2430:58:2430:58 | ChiTotal | total:m2430_56 | +| ir.cpp:2430:58:2430:58 | ChiTotal | total:m2430_63 | +| ir.cpp:2430:58:2430:58 | Condition | r2430_54 | +| ir.cpp:2430:58:2430:58 | Load | m2430_30 | +| ir.cpp:2430:58:2430:58 | Load | m2430_30 | +| ir.cpp:2430:58:2430:58 | Phi | from 9:m2430_36 | +| ir.cpp:2430:58:2430:58 | Phi | from 9:~m2430_26 | +| ir.cpp:2430:58:2430:58 | Phi | from 11:m2430_73 | +| ir.cpp:2430:58:2430:58 | Phi | from 11:~m2430_70 | +| ir.cpp:2430:58:2430:58 | SideEffect | m2430_43 | +| ir.cpp:2430:58:2430:58 | SideEffect | ~m2430_44 | +| ir.cpp:2430:58:2430:58 | SideEffect | ~m2430_51 | +| ir.cpp:2430:58:2430:58 | SideEffect | ~m2430_56 | +| ir.cpp:2430:58:2430:58 | SideEffect | ~m2430_63 | +| ir.cpp:2430:58:2430:58 | StoreValue | r2430_35 | +| ir.cpp:2430:58:2430:58 | StoreValue | r2430_41 | +| ir.cpp:2430:58:2430:58 | Unary | r2430_33 | +| ir.cpp:2430:58:2430:58 | Unary | r2430_39 | +| ir.cpp:2430:58:2430:58 | Unary | r2430_45 | +| ir.cpp:2430:58:2430:58 | Unary | r2430_48 | +| ir.cpp:2430:58:2430:58 | Unary | r2430_59 | +| ir.cpp:2430:58:2430:58 | Unary | r2430_68 | +| ir.cpp:2430:58:2430:77 | Address | &:r2430_19 | +| ir.cpp:2430:58:2430:77 | Address | &:r2430_19 | +| ir.cpp:2430:58:2430:77 | Arg(this) | this:r2430_19 | +| ir.cpp:2430:58:2430:77 | CallTarget | func:r2430_21 | +| ir.cpp:2430:58:2430:77 | ChiPartial | partial:m2430_25 | +| ir.cpp:2430:58:2430:77 | ChiPartial | partial:m2430_27 | +| ir.cpp:2430:58:2430:77 | ChiTotal | total:m2430_13 | +| ir.cpp:2430:58:2430:77 | ChiTotal | total:m2430_20 | +| ir.cpp:2430:58:2430:77 | SideEffect | ~m2430_13 | +| ir.cpp:2430:58:2430:77 | StoreValue | r2430_29 | +| ir.cpp:2430:58:2430:77 | Unary | r2430_19 | +| ir.cpp:2430:58:2430:78 | Load | ~m2430_63 | +| ir.cpp:2430:58:2430:78 | StoreValue | r2430_64 | +| ir.cpp:2430:76:2430:76 | Address | &:r2430_22 | +| ir.cpp:2430:76:2430:76 | Arg(0) | 0:r2430_23 | +| ir.cpp:2430:76:2430:76 | Load | m2430_17 | +| ir.cpp:2431:9:2431:9 | Address | &:r2431_4 | +| ir.cpp:2431:9:2431:9 | Address | &:r2431_4 | +| ir.cpp:2431:9:2431:9 | Load | m2430_65 | +| ir.cpp:2431:9:2431:9 | Unary | r2431_5 | +| ir.cpp:2431:9:2431:14 | Left | r2431_6 | +| ir.cpp:2431:9:2431:14 | StoreValue | r2431_8 | +| ir.cpp:2431:9:2431:14 | Unary | r2431_7 | +| ir.cpp:2431:14:2431:14 | Address | &:r2431_1 | +| ir.cpp:2431:14:2431:14 | Load | m2430_17 | +| ir.cpp:2431:14:2431:14 | Right | r2431_3 | +| ir.cpp:2431:14:2431:14 | Unary | r2431_2 | +| ir.cpp:2434:6:2434:35 | ChiPartial | partial:m2434_3 | +| ir.cpp:2434:6:2434:35 | ChiTotal | total:m2434_2 | +| ir.cpp:2434:6:2434:35 | SideEffect | m2434_3 | +| ir.cpp:2434:57:2434:57 | Address | &:r2434_5 | +| ir.cpp:2438:6:2438:37 | ChiPartial | partial:m2438_3 | +| ir.cpp:2438:6:2438:37 | ChiTotal | total:m2438_2 | +| ir.cpp:2438:6:2438:37 | SideEffect | m2438_3 | +| ir.cpp:2438:60:2438:60 | Address | &:r2438_5 | +| ir.cpp:2438:60:2438:60 | Address | &:r2438_5 | +| ir.cpp:2438:60:2438:60 | Address | &:r2438_7 | +| ir.cpp:2438:60:2438:60 | Address | &:r2438_7 | +| ir.cpp:2438:60:2438:60 | Load | m2438_6 | +| ir.cpp:2438:60:2438:60 | SideEffect | m2438_8 | +| ir.cpp:2442:6:2442:33 | ChiPartial | partial:m2442_3 | +| ir.cpp:2442:6:2442:33 | ChiTotal | total:m2442_2 | +| ir.cpp:2442:6:2442:33 | SideEffect | m2442_3 | +| ir.cpp:2442:56:2442:56 | Address | &:r2442_5 | +| ir.cpp:2442:56:2442:56 | Address | &:r2442_5 | +| ir.cpp:2442:56:2442:56 | Address | &:r2442_7 | +| ir.cpp:2442:56:2442:56 | Address | &:r2442_7 | +| ir.cpp:2442:56:2442:56 | Load | m2442_6 | +| ir.cpp:2442:56:2442:56 | SideEffect | m2442_8 | +| ir.cpp:2446:6:2446:34 | ChiPartial | partial:m2446_3 | +| ir.cpp:2446:6:2446:34 | ChiTotal | total:m2446_2 | +| ir.cpp:2446:6:2446:34 | SideEffect | m2446_3 | +| ir.cpp:2446:58:2446:58 | Address | &:r2446_5 | +| ir.cpp:2446:58:2446:58 | Address | &:r2446_5 | +| ir.cpp:2446:58:2446:58 | Address | &:r2446_7 | +| ir.cpp:2446:58:2446:58 | Address | &:r2446_7 | +| ir.cpp:2446:58:2446:58 | Load | m2446_6 | +| ir.cpp:2446:58:2446:58 | SideEffect | m2446_8 | | 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 0c42f3d2af6..5cd8ff2cd4a 100644 --- a/cpp/ql/test/library-tests/ir/ir/raw_ir.expected +++ b/cpp/ql/test/library-tests/ir/ir/raw_ir.expected @@ -849,22 +849,28 @@ destructors_for_temps.cpp: # 29| void temp_test3() # 29| Block 0 -# 29| v29_1(void) = EnterFunction : -# 29| mu29_2(unknown) = AliasedDefinition : -# 29| mu29_3(unknown) = InitializeNonLocal : -# 30| r30_1(glval) = VariableAddress[rs] : -# 30| r30_2(glval) = VariableAddress[#temp30:38] : -# 30| r30_3(glval) = FunctionAddress[returnValue] : -# 30| r30_4(ClassWithDestructor2) = Call[returnValue] : func:r30_3 -# 30| mu30_5(unknown) = ^CallSideEffect : ~m? -# 30| mu30_6(ClassWithDestructor2) = Store[#temp30:38] : &:r30_2, r30_4 -# 30| r30_7(glval) = Convert : r30_2 -# 30| r30_8(ClassWithDestructor2 &) = CopyValue : r30_7 -# 30| mu30_9(ClassWithDestructor2 &) = Store[rs] : &:r30_1, r30_8 -# 31| v31_1(void) = NoOp : -# 29| v29_4(void) = ReturnVoid : -# 29| v29_5(void) = AliasedUse : ~m? -# 29| v29_6(void) = ExitFunction : +# 29| v29_1(void) = EnterFunction : +# 29| mu29_2(unknown) = AliasedDefinition : +# 29| mu29_3(unknown) = InitializeNonLocal : +# 30| r30_1(glval) = VariableAddress[rs] : +# 30| r30_2(glval) = VariableAddress[#temp30:38] : +# 30| r30_3(glval) = FunctionAddress[returnValue] : +# 30| r30_4(ClassWithDestructor2) = Call[returnValue] : func:r30_3 +# 30| mu30_5(unknown) = ^CallSideEffect : ~m? +# 30| mu30_6(ClassWithDestructor2) = Store[#temp30:38] : &:r30_2, r30_4 +# 30| r30_7(glval) = Convert : r30_2 +# 30| r30_8(ClassWithDestructor2 &) = CopyValue : r30_7 +# 30| mu30_9(ClassWithDestructor2 &) = Store[rs] : &:r30_1, r30_8 +# 31| v31_1(void) = NoOp : +# 31| r31_2(glval) = CopyValue : r30_2 +# 31| r31_3(glval) = FunctionAddress[~ClassWithDestructor2] : +# 31| v31_4(void) = Call[~ClassWithDestructor2] : func:r31_3, this:r31_2 +# 31| mu31_5(unknown) = ^CallSideEffect : ~m? +# 31| v31_6(void) = ^IndirectReadSideEffect[-1] : &:r31_2, ~m? +# 31| mu31_7(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r31_2 +# 29| v29_4(void) = ReturnVoid : +# 29| v29_5(void) = AliasedUse : ~m? +# 29| v29_6(void) = ExitFunction : # 33| void temp_test4() # 33| Block 0 @@ -887,12 +893,18 @@ destructors_for_temps.cpp: # 35| r35_8(ClassWithDestructor2 &) = CopyValue : r35_7 # 35| mu35_9(ClassWithDestructor2 &) = Store[rs2] : &:r35_1, r35_8 # 36| v36_1(void) = NoOp : -# 36| r36_2(glval) = VariableAddress[c] : +# 36| r36_2(glval) = CopyValue : r35_2 # 36| r36_3(glval) = FunctionAddress[~ClassWithDestructor2] : # 36| v36_4(void) = Call[~ClassWithDestructor2] : func:r36_3, this:r36_2 # 36| mu36_5(unknown) = ^CallSideEffect : ~m? # 36| v36_6(void) = ^IndirectReadSideEffect[-1] : &:r36_2, ~m? # 36| mu36_7(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r36_2 +# 36| r36_8(glval) = VariableAddress[c] : +# 36| r36_9(glval) = FunctionAddress[~ClassWithDestructor2] : +# 36| v36_10(void) = Call[~ClassWithDestructor2] : func:r36_9, this:r36_8 +# 36| mu36_11(unknown) = ^CallSideEffect : ~m? +# 36| v36_12(void) = ^IndirectReadSideEffect[-1] : &:r36_8, ~m? +# 36| mu36_13(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r36_8 # 33| v33_4(void) = ReturnVoid : # 33| v33_5(void) = AliasedUse : ~m? # 33| v33_6(void) = ExitFunction : @@ -6214,33 +6226,45 @@ ir.cpp: # 1015| void OperatorDelete() # 1015| Block 0 -# 1015| v1015_1(void) = EnterFunction : -# 1015| mu1015_2(unknown) = AliasedDefinition : -# 1015| mu1015_3(unknown) = InitializeNonLocal : -# 1016| r1016_1(glval) = FunctionAddress[operator delete] : -# 1016| r1016_2(int *) = Constant[0] : -# 1016| v1016_3(void) = Call[operator delete] : func:r1016_1, 0:r1016_2 -# 1016| mu1016_4(unknown) = ^CallSideEffect : ~m? -# 1017| r1017_1(glval) = FunctionAddress[operator delete] : -# 1017| r1017_2(String *) = Constant[0] : -# 1017| v1017_3(void) = Call[operator delete] : func:r1017_1, 0:r1017_2 -# 1017| mu1017_4(unknown) = ^CallSideEffect : ~m? -# 1018| r1018_1(glval) = FunctionAddress[operator delete] : -# 1018| r1018_2(SizedDealloc *) = Constant[0] : -# 1018| v1018_3(void) = Call[operator delete] : func:r1018_1, 0:r1018_2 -# 1018| mu1018_4(unknown) = ^CallSideEffect : ~m? -# 1019| r1019_1(glval) = FunctionAddress[operator delete] : -# 1019| r1019_2(Overaligned *) = Constant[0] : -# 1019| v1019_3(void) = Call[operator delete] : func:r1019_1, 0:r1019_2 -# 1019| mu1019_4(unknown) = ^CallSideEffect : ~m? -# 1020| r1020_1(glval) = VirtualDeleteFunctionAddress : -# 1020| r1020_2(PolymorphicBase *) = Constant[0] : -# 1020| v1020_3(void) = Call[?] : func:r1020_1, 0:r1020_2 -# 1020| mu1020_4(unknown) = ^CallSideEffect : ~m? -# 1021| v1021_1(void) = NoOp : -# 1015| v1015_4(void) = ReturnVoid : -# 1015| v1015_5(void) = AliasedUse : ~m? -# 1015| v1015_6(void) = ExitFunction : +# 1015| v1015_1(void) = EnterFunction : +# 1015| mu1015_2(unknown) = AliasedDefinition : +# 1015| mu1015_3(unknown) = InitializeNonLocal : +# 1016| r1016_1(glval) = FunctionAddress[operator delete] : +# 1016| r1016_2(int *) = Constant[0] : +# 1016| v1016_3(void) = Call[operator delete] : func:r1016_1, 0:r1016_2 +# 1016| mu1016_4(unknown) = ^CallSideEffect : ~m? +# 1017| r1017_1(String *) = Constant[0] : +# 1017| r1017_2(glval) = FunctionAddress[~String] : +# 1017| v1017_3(void) = Call[~String] : func:r1017_2 +# 1017| mu1017_4(unknown) = ^CallSideEffect : ~m? +# 1017| v1017_5(void) = ^IndirectReadSideEffect[-1] : &:r1017_1, ~m? +# 1017| mu1017_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1017_1 +# 1017| r1017_7(glval) = FunctionAddress[operator delete] : +# 1017| r1017_8(String *) = CopyValue : r1017_1 +# 1017| v1017_9(void) = Call[operator delete] : func:r1017_7, 0:r1017_8 +# 1017| mu1017_10(unknown) = ^CallSideEffect : ~m? +# 1018| r1018_1(glval) = FunctionAddress[operator delete] : +# 1018| r1018_2(SizedDealloc *) = Constant[0] : +# 1018| v1018_3(void) = Call[operator delete] : func:r1018_1, 0:r1018_2 +# 1018| mu1018_4(unknown) = ^CallSideEffect : ~m? +# 1019| r1019_1(glval) = FunctionAddress[operator delete] : +# 1019| r1019_2(Overaligned *) = Constant[0] : +# 1019| v1019_3(void) = Call[operator delete] : func:r1019_1, 0:r1019_2 +# 1019| mu1019_4(unknown) = ^CallSideEffect : ~m? +# 1020| r1020_1(PolymorphicBase *) = Constant[0] : +# 1020| r1020_2(glval) = FunctionAddress[~PolymorphicBase] : +# 1020| v1020_3(void) = Call[~PolymorphicBase] : func:r1020_2 +# 1020| mu1020_4(unknown) = ^CallSideEffect : ~m? +# 1020| v1020_5(void) = ^IndirectReadSideEffect[-1] : &:r1020_1, ~m? +# 1020| mu1020_6(PolymorphicBase) = ^IndirectMayWriteSideEffect[-1] : &:r1020_1 +# 1020| r1020_7(glval) = VirtualDeleteFunctionAddress : +# 1020| r1020_8(PolymorphicBase *) = CopyValue : r1020_1 +# 1020| v1020_9(void) = Call[?] : func:r1020_7, 0:r1020_8 +# 1020| mu1020_10(unknown) = ^CallSideEffect : ~m? +# 1021| v1021_1(void) = NoOp : +# 1015| v1015_4(void) = ReturnVoid : +# 1015| v1015_5(void) = AliasedUse : ~m? +# 1015| v1015_6(void) = ExitFunction : # 1024| void OperatorDeleteArray() # 1024| Block 0 @@ -6251,10 +6275,16 @@ ir.cpp: # 1025| r1025_2(int *) = Constant[0] : # 1025| v1025_3(void) = Call[operator delete[]] : func:r1025_1, 0:r1025_2 # 1025| mu1025_4(unknown) = ^CallSideEffect : ~m? -# 1026| r1026_1(glval) = FunctionAddress[operator delete[]] : -# 1026| r1026_2(String *) = Constant[0] : -# 1026| v1026_3(void) = Call[operator delete[]] : func:r1026_1, 0:r1026_2 +# 1026| r1026_1(String *) = Constant[0] : +# 1026| r1026_2(glval) = FunctionAddress[~String] : +# 1026| v1026_3(void) = Call[~String] : func:r1026_2 # 1026| mu1026_4(unknown) = ^CallSideEffect : ~m? +# 1026| v1026_5(void) = ^IndirectReadSideEffect[-1] : &:r1026_1, ~m? +# 1026| mu1026_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1026_1 +# 1026| r1026_7(glval) = FunctionAddress[operator delete[]] : +# 1026| r1026_8(String *) = CopyValue : r1026_1 +# 1026| v1026_9(void) = Call[operator delete[]] : func:r1026_7, 0:r1026_8 +# 1026| mu1026_10(unknown) = ^CallSideEffect : ~m? # 1027| r1027_1(glval) = FunctionAddress[operator delete[]] : # 1027| r1027_2(SizedDealloc *) = Constant[0] : # 1027| v1027_3(void) = Call[operator delete[]] : func:r1027_1, 0:r1027_2 @@ -6263,10 +6293,16 @@ ir.cpp: # 1028| r1028_2(Overaligned *) = Constant[0] : # 1028| v1028_3(void) = Call[operator delete[]] : func:r1028_1, 0:r1028_2 # 1028| mu1028_4(unknown) = ^CallSideEffect : ~m? -# 1029| r1029_1(glval) = FunctionAddress[operator delete[]] : -# 1029| r1029_2(PolymorphicBase *) = Constant[0] : -# 1029| v1029_3(void) = Call[operator delete[]] : func:r1029_1, 0:r1029_2 +# 1029| r1029_1(PolymorphicBase *) = Constant[0] : +# 1029| r1029_2(glval) = FunctionAddress[~PolymorphicBase] : +# 1029| v1029_3(void) = Call[~PolymorphicBase] : func:r1029_2 # 1029| mu1029_4(unknown) = ^CallSideEffect : ~m? +# 1029| v1029_5(void) = ^IndirectReadSideEffect[-1] : &:r1029_1, ~m? +# 1029| mu1029_6(PolymorphicBase) = ^IndirectMayWriteSideEffect[-1] : &:r1029_1 +# 1029| r1029_7(glval) = FunctionAddress[operator delete[]] : +# 1029| r1029_8(PolymorphicBase *) = CopyValue : r1029_1 +# 1029| v1029_9(void) = Call[operator delete[]] : func:r1029_7, 0:r1029_8 +# 1029| mu1029_10(unknown) = ^CallSideEffect : ~m? # 1030| v1030_1(void) = NoOp : # 1024| v1024_4(void) = ReturnVoid : # 1024| v1024_5(void) = AliasedUse : ~m? @@ -8321,12 +8357,18 @@ ir.cpp: # 1425| mu1425_4(unknown) = ^CallSideEffect : ~m? # 1425| mu1425_5(String) = Store[#temp1425:5] : &:r1425_1, r1425_3 # 1426| v1426_1(void) = NoOp : -# 1426| r1426_2(glval) = VariableAddress[s] : +# 1426| r1426_2(glval) = CopyValue : r1416_2 # 1426| r1426_3(glval) = FunctionAddress[~String] : # 1426| v1426_4(void) = Call[~String] : func:r1426_3, this:r1426_2 # 1426| mu1426_5(unknown) = ^CallSideEffect : ~m? # 1426| v1426_6(void) = ^IndirectReadSideEffect[-1] : &:r1426_2, ~m? # 1426| mu1426_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r1426_2 +# 1426| r1426_8(glval) = VariableAddress[s] : +# 1426| r1426_9(glval) = FunctionAddress[~String] : +# 1426| v1426_10(void) = Call[~String] : func:r1426_9, this:r1426_8 +# 1426| mu1426_11(unknown) = ^CallSideEffect : ~m? +# 1426| v1426_12(void) = ^IndirectReadSideEffect[-1] : &:r1426_8, ~m? +# 1426| mu1426_13(String) = ^IndirectMayWriteSideEffect[-1] : &:r1426_8 # 1414| v1414_4(void) = ReturnVoid : # 1414| v1414_5(void) = AliasedUse : ~m? # 1414| v1414_6(void) = ExitFunction : @@ -8397,12 +8439,18 @@ ir.cpp: # 1438| mu1438_5(unknown) = ^CallSideEffect : ~m? # 1438| v1438_6(void) = ^IndirectReadSideEffect[-1] : &:r1438_2, ~m? # 1438| mu1438_7(destructor_only) = ^IndirectMayWriteSideEffect[-1] : &:r1438_2 -# 1438| r1438_8(glval) = VariableAddress[d] : +# 1438| r1438_8(glval) = CopyValue : r1430_2 # 1438| r1438_9(glval) = FunctionAddress[~destructor_only] : # 1438| v1438_10(void) = Call[~destructor_only] : func:r1438_9, this:r1438_8 # 1438| mu1438_11(unknown) = ^CallSideEffect : ~m? # 1438| v1438_12(void) = ^IndirectReadSideEffect[-1] : &:r1438_8, ~m? # 1438| mu1438_13(destructor_only) = ^IndirectMayWriteSideEffect[-1] : &:r1438_8 +# 1438| r1438_14(glval) = VariableAddress[d] : +# 1438| r1438_15(glval) = FunctionAddress[~destructor_only] : +# 1438| v1438_16(void) = Call[~destructor_only] : func:r1438_15, this:r1438_14 +# 1438| mu1438_17(unknown) = ^CallSideEffect : ~m? +# 1438| v1438_18(void) = ^IndirectReadSideEffect[-1] : &:r1438_14, ~m? +# 1438| mu1438_19(destructor_only) = ^IndirectMayWriteSideEffect[-1] : &:r1438_14 # 1428| v1428_4(void) = ReturnVoid : # 1428| v1428_5(void) = AliasedUse : ~m? # 1428| v1428_6(void) = ExitFunction : @@ -10778,687 +10826,724 @@ ir.cpp: # 1932| v1932_5(void) = AliasedUse : ~m? # 1932| v1932_6(void) = ExitFunction : -# 1938| char global_template -# 1938| Block 0 -# 1938| v1938_1(void) = EnterFunction : -# 1938| mu1938_2(unknown) = AliasedDefinition : -# 1938| r1938_3(glval) = VariableAddress[global_template] : -# 1938| r1938_4(char) = Constant[42] : -# 1938| mu1938_5(char) = Store[global_template] : &:r1938_3, r1938_4 -# 1938| v1938_6(void) = ReturnVoid : -# 1938| v1938_7(void) = AliasedUse : ~m? -# 1938| v1938_8(void) = ExitFunction : +# 1939| int missing_declaration_entries::Bar3::two_more_missing_variable_declaration_entries() +# 1939| Block 0 +# 1939| v1939_1(void) = EnterFunction : +# 1939| mu1939_2(unknown) = AliasedDefinition : +# 1939| mu1939_3(unknown) = InitializeNonLocal : +# 1939| r1939_4(glval) = VariableAddress[#this] : +# 1939| mu1939_5(glval>) = InitializeParameter[#this] : &:r1939_4 +# 1939| r1939_6(glval>) = Load[#this] : &:r1939_4, ~m? +# 1939| mu1939_7(Bar3) = InitializeIndirection[#this] : &:r1939_6 +# 1942| r1942_1(glval) = VariableAddress[#return] : +# 1942| r1942_2(glval) = VariableAddress[g] : +# 1942| r1942_3(int) = Load[g] : &:r1942_2, ~m? +# 1942| mu1942_4(int) = Store[#return] : &:r1942_1, r1942_3 +# 1939| v1939_8(void) = ReturnIndirection[#this] : &:r1939_6, ~m? +# 1939| r1939_9(glval) = VariableAddress[#return] : +# 1939| v1939_10(void) = ReturnValue : &:r1939_9, ~m? +# 1939| v1939_11(void) = AliasedUse : ~m? +# 1939| v1939_12(void) = ExitFunction : -# 1938| int global_template -# 1938| Block 0 -# 1938| v1938_1(void) = EnterFunction : -# 1938| mu1938_2(unknown) = AliasedDefinition : -# 1938| r1938_3(glval) = VariableAddress[global_template] : -# 1938| r1938_4(int) = Constant[42] : -# 1938| mu1938_5(int) = Store[global_template] : &:r1938_3, r1938_4 -# 1938| v1938_6(void) = ReturnVoid : -# 1938| v1938_7(void) = AliasedUse : ~m? -# 1938| v1938_8(void) = ExitFunction : +# 1946| void missing_declaration_entries::test3() +# 1946| Block 0 +# 1946| v1946_1(void) = EnterFunction : +# 1946| mu1946_2(unknown) = AliasedDefinition : +# 1946| mu1946_3(unknown) = InitializeNonLocal : +# 1947| r1947_1(glval>) = VariableAddress[b] : +# 1947| mu1947_2(Bar3) = Uninitialized[b] : &:r1947_1 +# 1948| r1948_1(glval>) = VariableAddress[b] : +# 1948| r1948_2(glval) = FunctionAddress[two_more_missing_variable_declaration_entries] : +# 1948| r1948_3(int) = Call[two_more_missing_variable_declaration_entries] : func:r1948_2, this:r1948_1 +# 1948| mu1948_4(unknown) = ^CallSideEffect : ~m? +# 1948| v1948_5(void) = ^IndirectReadSideEffect[-1] : &:r1948_1, ~m? +# 1948| mu1948_6(Bar3) = ^IndirectMayWriteSideEffect[-1] : &:r1948_1 +# 1949| v1949_1(void) = NoOp : +# 1946| v1946_4(void) = ReturnVoid : +# 1946| v1946_5(void) = AliasedUse : ~m? +# 1946| v1946_6(void) = ExitFunction : -# 1940| int test_global_template_int() -# 1940| Block 0 -# 1940| v1940_1(void) = EnterFunction : -# 1940| mu1940_2(unknown) = AliasedDefinition : -# 1940| mu1940_3(unknown) = InitializeNonLocal : -# 1941| r1941_1(glval) = VariableAddress[local_int] : -# 1941| r1941_2(glval) = VariableAddress[global_template] : -# 1941| r1941_3(int) = Load[global_template] : &:r1941_2, ~m? -# 1941| mu1941_4(int) = Store[local_int] : &:r1941_1, r1941_3 -# 1942| r1942_1(glval) = VariableAddress[local_char] : -# 1942| r1942_2(glval) = VariableAddress[global_template] : -# 1942| r1942_3(char) = Load[global_template] : &:r1942_2, ~m? -# 1942| mu1942_4(char) = Store[local_char] : &:r1942_1, r1942_3 -# 1943| r1943_1(glval) = VariableAddress[#return] : -# 1943| r1943_2(glval) = VariableAddress[local_int] : -# 1943| r1943_3(int) = Load[local_int] : &:r1943_2, ~m? -# 1943| r1943_4(glval) = VariableAddress[local_char] : -# 1943| r1943_5(char) = Load[local_char] : &:r1943_4, ~m? -# 1943| r1943_6(int) = Convert : r1943_5 -# 1943| r1943_7(int) = Add : r1943_3, r1943_6 -# 1943| mu1943_8(int) = Store[#return] : &:r1943_1, r1943_7 -# 1940| r1940_4(glval) = VariableAddress[#return] : -# 1940| v1940_5(void) = ReturnValue : &:r1940_4, ~m? -# 1940| v1940_6(void) = AliasedUse : ~m? -# 1940| v1940_7(void) = ExitFunction : +# 1952| char global_template +# 1952| Block 0 +# 1952| v1952_1(void) = EnterFunction : +# 1952| mu1952_2(unknown) = AliasedDefinition : +# 1952| r1952_3(glval) = VariableAddress[global_template] : +# 1952| r1952_4(char) = Constant[42] : +# 1952| mu1952_5(char) = Store[global_template] : &:r1952_3, r1952_4 +# 1952| v1952_6(void) = ReturnVoid : +# 1952| v1952_7(void) = AliasedUse : ~m? +# 1952| v1952_8(void) = ExitFunction : -# 1948| int noreturnTest(int) -# 1948| Block 0 -# 1948| v1948_1(void) = EnterFunction : -# 1948| mu1948_2(unknown) = AliasedDefinition : -# 1948| mu1948_3(unknown) = InitializeNonLocal : -# 1948| r1948_4(glval) = VariableAddress[x] : -# 1948| mu1948_5(int) = InitializeParameter[x] : &:r1948_4 -# 1949| r1949_1(glval) = VariableAddress[x] : -# 1949| r1949_2(int) = Load[x] : &:r1949_1, ~m? -# 1949| r1949_3(int) = Constant[10] : -# 1949| r1949_4(bool) = CompareLT : r1949_2, r1949_3 -# 1949| v1949_5(void) = ConditionalBranch : r1949_4 +# 1952| int global_template +# 1952| Block 0 +# 1952| v1952_1(void) = EnterFunction : +# 1952| mu1952_2(unknown) = AliasedDefinition : +# 1952| r1952_3(glval) = VariableAddress[global_template] : +# 1952| r1952_4(int) = Constant[42] : +# 1952| mu1952_5(int) = Store[global_template] : &:r1952_3, r1952_4 +# 1952| v1952_6(void) = ReturnVoid : +# 1952| v1952_7(void) = AliasedUse : ~m? +# 1952| v1952_8(void) = ExitFunction : + +# 1954| int test_global_template_int() +# 1954| Block 0 +# 1954| v1954_1(void) = EnterFunction : +# 1954| mu1954_2(unknown) = AliasedDefinition : +# 1954| mu1954_3(unknown) = InitializeNonLocal : +# 1955| r1955_1(glval) = VariableAddress[local_int] : +# 1955| r1955_2(glval) = VariableAddress[global_template] : +# 1955| r1955_3(int) = Load[global_template] : &:r1955_2, ~m? +# 1955| mu1955_4(int) = Store[local_int] : &:r1955_1, r1955_3 +# 1956| r1956_1(glval) = VariableAddress[local_char] : +# 1956| r1956_2(glval) = VariableAddress[global_template] : +# 1956| r1956_3(char) = Load[global_template] : &:r1956_2, ~m? +# 1956| mu1956_4(char) = Store[local_char] : &:r1956_1, r1956_3 +# 1957| r1957_1(glval) = VariableAddress[#return] : +# 1957| r1957_2(glval) = VariableAddress[local_int] : +# 1957| r1957_3(int) = Load[local_int] : &:r1957_2, ~m? +# 1957| r1957_4(glval) = VariableAddress[local_char] : +# 1957| r1957_5(char) = Load[local_char] : &:r1957_4, ~m? +# 1957| r1957_6(int) = Convert : r1957_5 +# 1957| r1957_7(int) = Add : r1957_3, r1957_6 +# 1957| mu1957_8(int) = Store[#return] : &:r1957_1, r1957_7 +# 1954| r1954_4(glval) = VariableAddress[#return] : +# 1954| v1954_5(void) = ReturnValue : &:r1954_4, ~m? +# 1954| v1954_6(void) = AliasedUse : ~m? +# 1954| v1954_7(void) = ExitFunction : + +# 1962| int noreturnTest(int) +# 1962| Block 0 +# 1962| v1962_1(void) = EnterFunction : +# 1962| mu1962_2(unknown) = AliasedDefinition : +# 1962| mu1962_3(unknown) = InitializeNonLocal : +# 1962| r1962_4(glval) = VariableAddress[x] : +# 1962| mu1962_5(int) = InitializeParameter[x] : &:r1962_4 +# 1963| r1963_1(glval) = VariableAddress[x] : +# 1963| r1963_2(int) = Load[x] : &:r1963_1, ~m? +# 1963| r1963_3(int) = Constant[10] : +# 1963| r1963_4(bool) = CompareLT : r1963_2, r1963_3 +# 1963| v1963_5(void) = ConditionalBranch : r1963_4 #-----| False -> Block 3 #-----| True -> Block 2 -# 1948| Block 1 -# 1948| r1948_6(glval) = VariableAddress[#return] : -# 1948| v1948_7(void) = ReturnValue : &:r1948_6, ~m? -# 1948| v1948_8(void) = AliasedUse : ~m? -# 1948| v1948_9(void) = ExitFunction : +# 1962| Block 1 +# 1962| r1962_6(glval) = VariableAddress[#return] : +# 1962| v1962_7(void) = ReturnValue : &:r1962_6, ~m? +# 1962| v1962_8(void) = AliasedUse : ~m? +# 1962| v1962_9(void) = ExitFunction : -# 1950| Block 2 -# 1950| r1950_1(glval) = VariableAddress[#return] : -# 1950| r1950_2(glval) = VariableAddress[x] : -# 1950| r1950_3(int) = Load[x] : &:r1950_2, ~m? -# 1950| mu1950_4(int) = Store[#return] : &:r1950_1, r1950_3 -#-----| Goto -> Block 1 - -# 1952| Block 3 -# 1952| r1952_1(glval) = FunctionAddress[noreturnFunc] : -# 1952| v1952_2(void) = Call[noreturnFunc] : func:r1952_1 -# 1952| mu1952_3(unknown) = ^CallSideEffect : ~m? -# 1948| v1948_10(void) = Unreached : - -# 1954| Block 4 -# 1954| r1954_1(glval) = VariableAddress[#return] : -# 1954| mu1954_2(int) = Uninitialized[#return] : &:r1954_1 -#-----| Goto -> Block 1 - -# 1956| int noreturnTest2(int) -# 1956| Block 0 -# 1956| v1956_1(void) = EnterFunction : -# 1956| mu1956_2(unknown) = AliasedDefinition : -# 1956| mu1956_3(unknown) = InitializeNonLocal : -# 1956| r1956_4(glval) = VariableAddress[x] : -# 1956| mu1956_5(int) = InitializeParameter[x] : &:r1956_4 -# 1957| r1957_1(glval) = VariableAddress[x] : -# 1957| r1957_2(int) = Load[x] : &:r1957_1, ~m? -# 1957| r1957_3(int) = Constant[10] : -# 1957| r1957_4(bool) = CompareLT : r1957_2, r1957_3 -# 1957| v1957_5(void) = ConditionalBranch : r1957_4 -#-----| False -> Block 2 -#-----| True -> Block 1 - -# 1958| Block 1 -# 1958| r1958_1(glval) = FunctionAddress[noreturnFunc] : -# 1958| v1958_2(void) = Call[noreturnFunc] : func:r1958_1 -# 1958| mu1958_3(unknown) = ^CallSideEffect : ~m? -# 1956| v1956_6(void) = Unreached : - -# 1960| Block 2 -# 1960| r1960_1(glval) = VariableAddress[#return] : -# 1960| r1960_2(glval) = VariableAddress[x] : -# 1960| r1960_3(int) = Load[x] : &:r1960_2, ~m? -# 1960| mu1960_4(int) = Store[#return] : &:r1960_1, r1960_3 -# 1956| r1956_7(glval) = VariableAddress[#return] : -# 1956| v1956_8(void) = ReturnValue : &:r1956_7, ~m? -# 1956| v1956_9(void) = AliasedUse : ~m? -# 1956| v1956_10(void) = ExitFunction : - -# 1963| int static_function(int) -# 1963| Block 0 -# 1963| v1963_1(void) = EnterFunction : -# 1963| mu1963_2(unknown) = AliasedDefinition : -# 1963| mu1963_3(unknown) = InitializeNonLocal : -# 1963| r1963_4(glval) = VariableAddress[x] : -# 1963| mu1963_5(int) = InitializeParameter[x] : &:r1963_4 +# 1964| Block 2 # 1964| r1964_1(glval) = VariableAddress[#return] : # 1964| r1964_2(glval) = VariableAddress[x] : # 1964| r1964_3(int) = Load[x] : &:r1964_2, ~m? # 1964| mu1964_4(int) = Store[#return] : &:r1964_1, r1964_3 -# 1963| r1963_6(glval) = VariableAddress[#return] : -# 1963| v1963_7(void) = ReturnValue : &:r1963_6, ~m? -# 1963| v1963_8(void) = AliasedUse : ~m? -# 1963| v1963_9(void) = ExitFunction : +#-----| Goto -> Block 1 -# 1967| void test_static_functions_with_assignments() -# 1967| Block 0 -# 1967| v1967_1(void) = EnterFunction : -# 1967| mu1967_2(unknown) = AliasedDefinition : -# 1967| mu1967_3(unknown) = InitializeNonLocal : -# 1968| r1968_1(glval) = VariableAddress[c] : -# 1968| mu1968_2(C) = Uninitialized[c] : &:r1968_1 -# 1968| r1968_3(glval) = FunctionAddress[C] : -# 1968| v1968_4(void) = Call[C] : func:r1968_3, this:r1968_1 -# 1968| mu1968_5(unknown) = ^CallSideEffect : ~m? -# 1968| mu1968_6(C) = ^IndirectMayWriteSideEffect[-1] : &:r1968_1 -# 1969| r1969_1(glval) = VariableAddress[x] : -# 1969| mu1969_2(int) = Uninitialized[x] : &:r1969_1 -# 1970| r1970_1(glval) = VariableAddress[c] : -# 1970| r1970_2(glval) = FunctionAddress[StaticMemberFunction] : -# 1970| r1970_3(int) = Constant[10] : -# 1970| r1970_4(int) = Call[StaticMemberFunction] : func:r1970_2, 0:r1970_3 -# 1970| mu1970_5(unknown) = ^CallSideEffect : ~m? -# 1970| r1970_6(glval) = VariableAddress[x] : -# 1970| mu1970_7(int) = Store[x] : &:r1970_6, r1970_4 -# 1971| r1971_1(glval) = VariableAddress[y] : -# 1971| mu1971_2(int) = Uninitialized[y] : &:r1971_1 -# 1972| r1972_1(glval) = FunctionAddress[StaticMemberFunction] : -# 1972| r1972_2(int) = Constant[10] : -# 1972| r1972_3(int) = Call[StaticMemberFunction] : func:r1972_1, 0:r1972_2 -# 1972| mu1972_4(unknown) = ^CallSideEffect : ~m? -# 1972| r1972_5(glval) = VariableAddress[y] : -# 1972| mu1972_6(int) = Store[y] : &:r1972_5, r1972_3 -# 1973| r1973_1(glval) = VariableAddress[z] : -# 1973| mu1973_2(int) = Uninitialized[z] : &:r1973_1 -# 1974| r1974_1(glval) = FunctionAddress[static_function] : -# 1974| r1974_2(int) = Constant[10] : -# 1974| r1974_3(int) = Call[static_function] : func:r1974_1, 0:r1974_2 -# 1974| mu1974_4(unknown) = ^CallSideEffect : ~m? -# 1974| r1974_5(glval) = VariableAddress[z] : -# 1974| mu1974_6(int) = Store[z] : &:r1974_5, r1974_3 -# 1975| v1975_1(void) = NoOp : -# 1975| r1975_2(glval) = VariableAddress[c] : -# 1975| r1975_3(glval) = FunctionAddress[~C] : -# 1975| v1975_4(void) = Call[~C] : func:r1975_3, this:r1975_2 -# 1975| mu1975_5(unknown) = ^CallSideEffect : ~m? -# 1975| v1975_6(void) = ^IndirectReadSideEffect[-1] : &:r1975_2, ~m? -# 1975| mu1975_7(C) = ^IndirectMayWriteSideEffect[-1] : &:r1975_2 -# 1967| v1967_4(void) = ReturnVoid : -# 1967| v1967_5(void) = AliasedUse : ~m? -# 1967| v1967_6(void) = ExitFunction : +# 1966| Block 3 +# 1966| r1966_1(glval) = FunctionAddress[noreturnFunc] : +# 1966| v1966_2(void) = Call[noreturnFunc] : func:r1966_1 +# 1966| mu1966_3(unknown) = ^CallSideEffect : ~m? +# 1962| v1962_10(void) = Unreached : -# 1977| void test_double_assign() +# 1968| Block 4 +# 1968| r1968_1(glval) = VariableAddress[#return] : +# 1968| mu1968_2(int) = Uninitialized[#return] : &:r1968_1 +#-----| Goto -> Block 1 + +# 1970| int noreturnTest2(int) +# 1970| Block 0 +# 1970| v1970_1(void) = EnterFunction : +# 1970| mu1970_2(unknown) = AliasedDefinition : +# 1970| mu1970_3(unknown) = InitializeNonLocal : +# 1970| r1970_4(glval) = VariableAddress[x] : +# 1970| mu1970_5(int) = InitializeParameter[x] : &:r1970_4 +# 1971| r1971_1(glval) = VariableAddress[x] : +# 1971| r1971_2(int) = Load[x] : &:r1971_1, ~m? +# 1971| r1971_3(int) = Constant[10] : +# 1971| r1971_4(bool) = CompareLT : r1971_2, r1971_3 +# 1971| v1971_5(void) = ConditionalBranch : r1971_4 +#-----| False -> Block 2 +#-----| True -> Block 1 + +# 1972| Block 1 +# 1972| r1972_1(glval) = FunctionAddress[noreturnFunc] : +# 1972| v1972_2(void) = Call[noreturnFunc] : func:r1972_1 +# 1972| mu1972_3(unknown) = ^CallSideEffect : ~m? +# 1970| v1970_6(void) = Unreached : + +# 1974| Block 2 +# 1974| r1974_1(glval) = VariableAddress[#return] : +# 1974| r1974_2(glval) = VariableAddress[x] : +# 1974| r1974_3(int) = Load[x] : &:r1974_2, ~m? +# 1974| mu1974_4(int) = Store[#return] : &:r1974_1, r1974_3 +# 1970| r1970_7(glval) = VariableAddress[#return] : +# 1970| v1970_8(void) = ReturnValue : &:r1970_7, ~m? +# 1970| v1970_9(void) = AliasedUse : ~m? +# 1970| v1970_10(void) = ExitFunction : + +# 1977| int static_function(int) # 1977| Block 0 -# 1977| v1977_1(void) = EnterFunction : -# 1977| mu1977_2(unknown) = AliasedDefinition : -# 1977| mu1977_3(unknown) = InitializeNonLocal : -# 1978| r1978_1(glval) = VariableAddress[i] : -# 1978| mu1978_2(int) = Uninitialized[i] : &:r1978_1 -# 1978| r1978_3(glval) = VariableAddress[j] : -# 1978| mu1978_4(int) = Uninitialized[j] : &:r1978_3 -# 1979| r1979_1(int) = Constant[40] : -# 1979| r1979_2(glval) = VariableAddress[j] : -# 1979| mu1979_3(int) = Store[j] : &:r1979_2, r1979_1 -# 1979| r1979_4(int) = Load[j] : &:r1979_2, ~m? -# 1979| r1979_5(glval) = VariableAddress[i] : -# 1979| mu1979_6(int) = Store[i] : &:r1979_5, r1979_4 -# 1980| v1980_1(void) = NoOp : -# 1977| v1977_4(void) = ReturnVoid : -# 1977| v1977_5(void) = AliasedUse : ~m? -# 1977| v1977_6(void) = ExitFunction : +# 1977| v1977_1(void) = EnterFunction : +# 1977| mu1977_2(unknown) = AliasedDefinition : +# 1977| mu1977_3(unknown) = InitializeNonLocal : +# 1977| r1977_4(glval) = VariableAddress[x] : +# 1977| mu1977_5(int) = InitializeParameter[x] : &:r1977_4 +# 1978| r1978_1(glval) = VariableAddress[#return] : +# 1978| r1978_2(glval) = VariableAddress[x] : +# 1978| r1978_3(int) = Load[x] : &:r1978_2, ~m? +# 1978| mu1978_4(int) = Store[#return] : &:r1978_1, r1978_3 +# 1977| r1977_6(glval) = VariableAddress[#return] : +# 1977| v1977_7(void) = ReturnValue : &:r1977_6, ~m? +# 1977| v1977_8(void) = AliasedUse : ~m? +# 1977| v1977_9(void) = ExitFunction : -# 1982| void test_assign_with_assign_operation() -# 1982| Block 0 -# 1982| v1982_1(void) = EnterFunction : -# 1982| mu1982_2(unknown) = AliasedDefinition : -# 1982| mu1982_3(unknown) = InitializeNonLocal : -# 1983| r1983_1(glval) = VariableAddress[i] : -# 1983| mu1983_2(int) = Uninitialized[i] : &:r1983_1 -# 1983| r1983_3(glval) = VariableAddress[j] : -# 1983| r1983_4(int) = Constant[0] : -# 1983| mu1983_5(int) = Store[j] : &:r1983_3, r1983_4 -# 1984| r1984_1(int) = Constant[40] : -# 1984| r1984_2(glval) = VariableAddress[j] : -# 1984| r1984_3(int) = Load[j] : &:r1984_2, ~m? -# 1984| r1984_4(int) = Add : r1984_3, r1984_1 -# 1984| mu1984_5(int) = Store[j] : &:r1984_2, r1984_4 -# 1984| r1984_6(int) = Load[j] : &:r1984_2, ~m? -# 1984| r1984_7(glval) = VariableAddress[i] : -# 1984| mu1984_8(int) = Store[i] : &:r1984_7, r1984_6 -# 1985| v1985_1(void) = NoOp : -# 1982| v1982_4(void) = ReturnVoid : -# 1982| v1982_5(void) = AliasedUse : ~m? -# 1982| v1982_6(void) = ExitFunction : +# 1981| void test_static_functions_with_assignments() +# 1981| Block 0 +# 1981| v1981_1(void) = EnterFunction : +# 1981| mu1981_2(unknown) = AliasedDefinition : +# 1981| mu1981_3(unknown) = InitializeNonLocal : +# 1982| r1982_1(glval) = VariableAddress[c] : +# 1982| mu1982_2(C) = Uninitialized[c] : &:r1982_1 +# 1982| r1982_3(glval) = FunctionAddress[C] : +# 1982| v1982_4(void) = Call[C] : func:r1982_3, this:r1982_1 +# 1982| mu1982_5(unknown) = ^CallSideEffect : ~m? +# 1982| mu1982_6(C) = ^IndirectMayWriteSideEffect[-1] : &:r1982_1 +# 1983| r1983_1(glval) = VariableAddress[x] : +# 1983| mu1983_2(int) = Uninitialized[x] : &:r1983_1 +# 1984| r1984_1(glval) = VariableAddress[c] : +# 1984| r1984_2(glval) = FunctionAddress[StaticMemberFunction] : +# 1984| r1984_3(int) = Constant[10] : +# 1984| r1984_4(int) = Call[StaticMemberFunction] : func:r1984_2, 0:r1984_3 +# 1984| mu1984_5(unknown) = ^CallSideEffect : ~m? +# 1984| r1984_6(glval) = VariableAddress[x] : +# 1984| mu1984_7(int) = Store[x] : &:r1984_6, r1984_4 +# 1985| r1985_1(glval) = VariableAddress[y] : +# 1985| mu1985_2(int) = Uninitialized[y] : &:r1985_1 +# 1986| r1986_1(glval) = FunctionAddress[StaticMemberFunction] : +# 1986| r1986_2(int) = Constant[10] : +# 1986| r1986_3(int) = Call[StaticMemberFunction] : func:r1986_1, 0:r1986_2 +# 1986| mu1986_4(unknown) = ^CallSideEffect : ~m? +# 1986| r1986_5(glval) = VariableAddress[y] : +# 1986| mu1986_6(int) = Store[y] : &:r1986_5, r1986_3 +# 1987| r1987_1(glval) = VariableAddress[z] : +# 1987| mu1987_2(int) = Uninitialized[z] : &:r1987_1 +# 1988| r1988_1(glval) = FunctionAddress[static_function] : +# 1988| r1988_2(int) = Constant[10] : +# 1988| r1988_3(int) = Call[static_function] : func:r1988_1, 0:r1988_2 +# 1988| mu1988_4(unknown) = ^CallSideEffect : ~m? +# 1988| r1988_5(glval) = VariableAddress[z] : +# 1988| mu1988_6(int) = Store[z] : &:r1988_5, r1988_3 +# 1989| v1989_1(void) = NoOp : +# 1989| r1989_2(glval) = VariableAddress[c] : +# 1989| r1989_3(glval) = FunctionAddress[~C] : +# 1989| v1989_4(void) = Call[~C] : func:r1989_3, this:r1989_2 +# 1989| mu1989_5(unknown) = ^CallSideEffect : ~m? +# 1989| v1989_6(void) = ^IndirectReadSideEffect[-1] : &:r1989_2, ~m? +# 1989| mu1989_7(C) = ^IndirectMayWriteSideEffect[-1] : &:r1989_2 +# 1981| v1981_4(void) = ReturnVoid : +# 1981| v1981_5(void) = AliasedUse : ~m? +# 1981| v1981_6(void) = ExitFunction : -# 1991| D& D::ReferenceStaticMemberFunction() +# 1991| void test_double_assign() # 1991| Block 0 -# 1991| v1991_1(void) = EnterFunction : -# 1991| mu1991_2(unknown) = AliasedDefinition : -# 1991| mu1991_3(unknown) = InitializeNonLocal : -# 1992| r1992_1(glval) = VariableAddress[#return] : -# 1992| r1992_2(glval) = VariableAddress[x] : -# 1992| r1992_3(D &) = CopyValue : r1992_2 -# 1992| mu1992_4(D &) = Store[#return] : &:r1992_1, r1992_3 -# 1991| r1991_4(glval) = VariableAddress[#return] : -# 1991| v1991_5(void) = ReturnValue : &:r1991_4, ~m? -# 1991| v1991_6(void) = AliasedUse : ~m? -# 1991| v1991_7(void) = ExitFunction : +# 1991| v1991_1(void) = EnterFunction : +# 1991| mu1991_2(unknown) = AliasedDefinition : +# 1991| mu1991_3(unknown) = InitializeNonLocal : +# 1992| r1992_1(glval) = VariableAddress[i] : +# 1992| mu1992_2(int) = Uninitialized[i] : &:r1992_1 +# 1992| r1992_3(glval) = VariableAddress[j] : +# 1992| mu1992_4(int) = Uninitialized[j] : &:r1992_3 +# 1993| r1993_1(int) = Constant[40] : +# 1993| r1993_2(glval) = VariableAddress[j] : +# 1993| mu1993_3(int) = Store[j] : &:r1993_2, r1993_1 +# 1993| r1993_4(int) = Load[j] : &:r1993_2, ~m? +# 1993| r1993_5(glval) = VariableAddress[i] : +# 1993| mu1993_6(int) = Store[i] : &:r1993_5, r1993_4 +# 1994| v1994_1(void) = NoOp : +# 1991| v1991_4(void) = ReturnVoid : +# 1991| v1991_5(void) = AliasedUse : ~m? +# 1991| v1991_6(void) = ExitFunction : -# 1994| D D::ObjectStaticMemberFunction() -# 1994| Block 0 -# 1994| v1994_1(void) = EnterFunction : -# 1994| mu1994_2(unknown) = AliasedDefinition : -# 1994| mu1994_3(unknown) = InitializeNonLocal : -# 1995| r1995_1(glval) = VariableAddress[#return] : -# 1995| r1995_2(glval) = VariableAddress[x] : -# 1995| r1995_3(D) = Load[x] : &:r1995_2, ~m? -# 1995| mu1995_4(D) = Store[#return] : &:r1995_1, r1995_3 -# 1994| r1994_4(glval) = VariableAddress[#return] : -# 1994| v1994_5(void) = ReturnValue : &:r1994_4, ~m? -# 1994| v1994_6(void) = AliasedUse : ~m? -# 1994| v1994_7(void) = ExitFunction : +# 1996| void test_assign_with_assign_operation() +# 1996| Block 0 +# 1996| v1996_1(void) = EnterFunction : +# 1996| mu1996_2(unknown) = AliasedDefinition : +# 1996| mu1996_3(unknown) = InitializeNonLocal : +# 1997| r1997_1(glval) = VariableAddress[i] : +# 1997| mu1997_2(int) = Uninitialized[i] : &:r1997_1 +# 1997| r1997_3(glval) = VariableAddress[j] : +# 1997| r1997_4(int) = Constant[0] : +# 1997| mu1997_5(int) = Store[j] : &:r1997_3, r1997_4 +# 1998| r1998_1(int) = Constant[40] : +# 1998| r1998_2(glval) = VariableAddress[j] : +# 1998| r1998_3(int) = Load[j] : &:r1998_2, ~m? +# 1998| r1998_4(int) = Add : r1998_3, r1998_1 +# 1998| mu1998_5(int) = Store[j] : &:r1998_2, r1998_4 +# 1998| r1998_6(int) = Load[j] : &:r1998_2, ~m? +# 1998| r1998_7(glval) = VariableAddress[i] : +# 1998| mu1998_8(int) = Store[i] : &:r1998_7, r1998_6 +# 1999| v1999_1(void) = NoOp : +# 1996| v1996_4(void) = ReturnVoid : +# 1996| v1996_5(void) = AliasedUse : ~m? +# 1996| v1996_6(void) = ExitFunction : -# 1999| void test_static_member_functions_with_reference_return() -# 1999| Block 0 -# 1999| v1999_1(void) = EnterFunction : -# 1999| mu1999_2(unknown) = AliasedDefinition : -# 1999| mu1999_3(unknown) = InitializeNonLocal : -# 2000| r2000_1(glval) = VariableAddress[d] : -# 2000| mu2000_2(D) = Uninitialized[d] : &:r2000_1 -# 2002| r2002_1(glval) = VariableAddress[d] : -# 2002| r2002_2(glval) = FunctionAddress[ReferenceStaticMemberFunction] : -# 2002| r2002_3(D &) = Call[ReferenceStaticMemberFunction] : func:r2002_2 -# 2002| mu2002_4(unknown) = ^CallSideEffect : ~m? -# 2002| r2002_5(glval) = CopyValue : r2002_3 -# 2003| r2003_1(glval) = FunctionAddress[ReferenceStaticMemberFunction] : -# 2003| r2003_2(D &) = Call[ReferenceStaticMemberFunction] : func:r2003_1 -# 2003| mu2003_3(unknown) = ^CallSideEffect : ~m? -# 2003| r2003_4(glval) = CopyValue : r2003_2 -# 2004| r2004_1(glval) = VariableAddress[d] : -# 2004| r2004_2(glval) = FunctionAddress[ObjectStaticMemberFunction] : -# 2004| r2004_3(D) = Call[ObjectStaticMemberFunction] : func:r2004_2 -# 2004| mu2004_4(unknown) = ^CallSideEffect : ~m? -# 2005| r2005_1(glval) = FunctionAddress[ObjectStaticMemberFunction] : -# 2005| r2005_2(D) = Call[ObjectStaticMemberFunction] : func:r2005_1 -# 2005| mu2005_3(unknown) = ^CallSideEffect : ~m? -# 2007| r2007_1(glval) = VariableAddress[x] : -# 2007| mu2007_2(D) = Uninitialized[x] : &:r2007_1 -# 2008| r2008_1(glval) = VariableAddress[d] : -# 2008| r2008_2(glval) = FunctionAddress[ReferenceStaticMemberFunction] : -# 2008| r2008_3(D &) = Call[ReferenceStaticMemberFunction] : func:r2008_2 -# 2008| mu2008_4(unknown) = ^CallSideEffect : ~m? -# 2008| r2008_5(D) = Load[?] : &:r2008_3, ~m? -# 2008| r2008_6(glval) = VariableAddress[x] : -# 2008| mu2008_7(D) = Store[x] : &:r2008_6, r2008_5 -# 2009| r2009_1(glval) = VariableAddress[y] : -# 2009| mu2009_2(D) = Uninitialized[y] : &:r2009_1 -# 2010| r2010_1(glval) = FunctionAddress[ReferenceStaticMemberFunction] : -# 2010| r2010_2(D &) = Call[ReferenceStaticMemberFunction] : func:r2010_1 -# 2010| mu2010_3(unknown) = ^CallSideEffect : ~m? -# 2010| r2010_4(D) = Load[?] : &:r2010_2, ~m? -# 2010| r2010_5(glval) = VariableAddress[y] : -# 2010| mu2010_6(D) = Store[y] : &:r2010_5, r2010_4 -# 2011| r2011_1(glval) = VariableAddress[j] : -# 2011| mu2011_2(D) = Uninitialized[j] : &:r2011_1 -# 2012| r2012_1(glval) = VariableAddress[d] : -# 2012| r2012_2(glval) = FunctionAddress[ObjectStaticMemberFunction] : -# 2012| r2012_3(D) = Call[ObjectStaticMemberFunction] : func:r2012_2 -# 2012| mu2012_4(unknown) = ^CallSideEffect : ~m? -# 2012| r2012_5(glval) = VariableAddress[j] : -# 2012| mu2012_6(D) = Store[j] : &:r2012_5, r2012_3 -# 2013| r2013_1(glval) = VariableAddress[k] : -# 2013| mu2013_2(D) = Uninitialized[k] : &:r2013_1 -# 2014| r2014_1(glval) = FunctionAddress[ObjectStaticMemberFunction] : -# 2014| r2014_2(D) = Call[ObjectStaticMemberFunction] : func:r2014_1 -# 2014| mu2014_3(unknown) = ^CallSideEffect : ~m? -# 2014| r2014_4(glval) = VariableAddress[k] : -# 2014| mu2014_5(D) = Store[k] : &:r2014_4, r2014_2 -# 2015| v2015_1(void) = NoOp : -# 1999| v1999_4(void) = ReturnVoid : -# 1999| v1999_5(void) = AliasedUse : ~m? -# 1999| v1999_6(void) = ExitFunction : +# 2005| D& D::ReferenceStaticMemberFunction() +# 2005| Block 0 +# 2005| v2005_1(void) = EnterFunction : +# 2005| mu2005_2(unknown) = AliasedDefinition : +# 2005| mu2005_3(unknown) = InitializeNonLocal : +# 2006| r2006_1(glval) = VariableAddress[#return] : +# 2006| r2006_2(glval) = VariableAddress[x] : +# 2006| r2006_3(D &) = CopyValue : r2006_2 +# 2006| mu2006_4(D &) = Store[#return] : &:r2006_1, r2006_3 +# 2005| r2005_4(glval) = VariableAddress[#return] : +# 2005| v2005_5(void) = ReturnValue : &:r2005_4, ~m? +# 2005| v2005_6(void) = AliasedUse : ~m? +# 2005| v2005_7(void) = ExitFunction : -# 2017| void test_volatile() -# 2017| Block 0 -# 2017| v2017_1(void) = EnterFunction : -# 2017| mu2017_2(unknown) = AliasedDefinition : -# 2017| mu2017_3(unknown) = InitializeNonLocal : -# 2018| r2018_1(glval) = VariableAddress[x] : -# 2018| mu2018_2(int) = Uninitialized[x] : &:r2018_1 -# 2019| r2019_1(glval) = VariableAddress[x] : -# 2019| r2019_2(int) = Load[x] : &:r2019_1, ~m? -# 2020| v2020_1(void) = NoOp : -# 2017| v2017_4(void) = ReturnVoid : -# 2017| v2017_5(void) = AliasedUse : ~m? -# 2017| v2017_6(void) = ExitFunction : +# 2008| D D::ObjectStaticMemberFunction() +# 2008| Block 0 +# 2008| v2008_1(void) = EnterFunction : +# 2008| mu2008_2(unknown) = AliasedDefinition : +# 2008| mu2008_3(unknown) = InitializeNonLocal : +# 2009| r2009_1(glval) = VariableAddress[#return] : +# 2009| r2009_2(glval) = VariableAddress[x] : +# 2009| r2009_3(D) = Load[x] : &:r2009_2, ~m? +# 2009| mu2009_4(D) = Store[#return] : &:r2009_1, r2009_3 +# 2008| r2008_4(glval) = VariableAddress[#return] : +# 2008| v2008_5(void) = ReturnValue : &:r2008_4, ~m? +# 2008| v2008_6(void) = AliasedUse : ~m? +# 2008| v2008_7(void) = ExitFunction : -# 2028| void value_category_test() -# 2028| Block 0 -# 2028| v2028_1(void) = EnterFunction : -# 2028| mu2028_2(unknown) = AliasedDefinition : -# 2028| mu2028_3(unknown) = InitializeNonLocal : -# 2029| r2029_1(glval) = VariableAddress[c] : -# 2029| mu2029_2(ValCat) = Uninitialized[c] : &:r2029_1 +# 2013| void test_static_member_functions_with_reference_return() +# 2013| Block 0 +# 2013| v2013_1(void) = EnterFunction : +# 2013| mu2013_2(unknown) = AliasedDefinition : +# 2013| mu2013_3(unknown) = InitializeNonLocal : +# 2014| r2014_1(glval) = VariableAddress[d] : +# 2014| mu2014_2(D) = Uninitialized[d] : &:r2014_1 +# 2016| r2016_1(glval) = VariableAddress[d] : +# 2016| r2016_2(glval) = FunctionAddress[ReferenceStaticMemberFunction] : +# 2016| r2016_3(D &) = Call[ReferenceStaticMemberFunction] : func:r2016_2 +# 2016| mu2016_4(unknown) = ^CallSideEffect : ~m? +# 2016| r2016_5(glval) = CopyValue : r2016_3 +# 2017| r2017_1(glval) = FunctionAddress[ReferenceStaticMemberFunction] : +# 2017| r2017_2(D &) = Call[ReferenceStaticMemberFunction] : func:r2017_1 +# 2017| mu2017_3(unknown) = ^CallSideEffect : ~m? +# 2017| r2017_4(glval) = CopyValue : r2017_2 +# 2018| r2018_1(glval) = VariableAddress[d] : +# 2018| r2018_2(glval) = FunctionAddress[ObjectStaticMemberFunction] : +# 2018| r2018_3(D) = Call[ObjectStaticMemberFunction] : func:r2018_2 +# 2018| mu2018_4(unknown) = ^CallSideEffect : ~m? +# 2019| r2019_1(glval) = FunctionAddress[ObjectStaticMemberFunction] : +# 2019| r2019_2(D) = Call[ObjectStaticMemberFunction] : func:r2019_1 +# 2019| mu2019_3(unknown) = ^CallSideEffect : ~m? +# 2021| r2021_1(glval) = VariableAddress[x] : +# 2021| mu2021_2(D) = Uninitialized[x] : &:r2021_1 +# 2022| r2022_1(glval) = VariableAddress[d] : +# 2022| r2022_2(glval) = FunctionAddress[ReferenceStaticMemberFunction] : +# 2022| r2022_3(D &) = Call[ReferenceStaticMemberFunction] : func:r2022_2 +# 2022| mu2022_4(unknown) = ^CallSideEffect : ~m? +# 2022| r2022_5(D) = Load[?] : &:r2022_3, ~m? +# 2022| r2022_6(glval) = VariableAddress[x] : +# 2022| mu2022_7(D) = Store[x] : &:r2022_6, r2022_5 +# 2023| r2023_1(glval) = VariableAddress[y] : +# 2023| mu2023_2(D) = Uninitialized[y] : &:r2023_1 +# 2024| r2024_1(glval) = FunctionAddress[ReferenceStaticMemberFunction] : +# 2024| r2024_2(D &) = Call[ReferenceStaticMemberFunction] : func:r2024_1 +# 2024| mu2024_3(unknown) = ^CallSideEffect : ~m? +# 2024| r2024_4(D) = Load[?] : &:r2024_2, ~m? +# 2024| r2024_5(glval) = VariableAddress[y] : +# 2024| mu2024_6(D) = Store[y] : &:r2024_5, r2024_4 +# 2025| r2025_1(glval) = VariableAddress[j] : +# 2025| mu2025_2(D) = Uninitialized[j] : &:r2025_1 +# 2026| r2026_1(glval) = VariableAddress[d] : +# 2026| r2026_2(glval) = FunctionAddress[ObjectStaticMemberFunction] : +# 2026| r2026_3(D) = Call[ObjectStaticMemberFunction] : func:r2026_2 +# 2026| mu2026_4(unknown) = ^CallSideEffect : ~m? +# 2026| r2026_5(glval) = VariableAddress[j] : +# 2026| mu2026_6(D) = Store[j] : &:r2026_5, r2026_3 +# 2027| r2027_1(glval) = VariableAddress[k] : +# 2027| mu2027_2(D) = Uninitialized[k] : &:r2027_1 +# 2028| r2028_1(glval) = FunctionAddress[ObjectStaticMemberFunction] : +# 2028| r2028_2(D) = Call[ObjectStaticMemberFunction] : func:r2028_1 +# 2028| mu2028_3(unknown) = ^CallSideEffect : ~m? +# 2028| r2028_4(glval) = VariableAddress[k] : +# 2028| mu2028_5(D) = Store[k] : &:r2028_4, r2028_2 +# 2029| v2029_1(void) = NoOp : +# 2013| v2013_4(void) = ReturnVoid : +# 2013| v2013_5(void) = AliasedUse : ~m? +# 2013| v2013_6(void) = ExitFunction : + +# 2031| void test_volatile() +# 2031| Block 0 +# 2031| v2031_1(void) = EnterFunction : +# 2031| mu2031_2(unknown) = AliasedDefinition : +# 2031| mu2031_3(unknown) = InitializeNonLocal : +# 2032| r2032_1(glval) = VariableAddress[x] : +# 2032| mu2032_2(int) = Uninitialized[x] : &:r2032_1 +# 2033| r2033_1(glval) = VariableAddress[x] : +# 2033| r2033_2(int) = Load[x] : &:r2033_1, ~m? +# 2034| v2034_1(void) = NoOp : +# 2031| v2031_4(void) = ReturnVoid : +# 2031| v2031_5(void) = AliasedUse : ~m? +# 2031| v2031_6(void) = ExitFunction : + +# 2042| void value_category_test() +# 2042| Block 0 +# 2042| v2042_1(void) = EnterFunction : +# 2042| mu2042_2(unknown) = AliasedDefinition : +# 2042| mu2042_3(unknown) = InitializeNonLocal : +# 2043| r2043_1(glval) = VariableAddress[c] : +# 2043| mu2043_2(ValCat) = Uninitialized[c] : &:r2043_1 #-----| r0_1(glval) = VariableAddress[#temp0:0] : #-----| mu0_2(ValCat) = Uninitialized[#temp0:0] : &:r0_1 #-----| r0_3(ValCat) = Load[#temp0:0] : &:r0_1, ~m? -# 2031| r2031_1(glval) = VariableAddress[c] : -# 2031| r2031_2(glval) = FunctionAddress[lvalue] : -# 2031| r2031_3(ValCat &) = Call[lvalue] : func:r2031_2 -# 2031| mu2031_4(unknown) = ^CallSideEffect : ~m? -# 2031| r2031_5(glval) = CopyValue : r2031_3 -# 2031| mu2031_6(ValCat) = Store[?] : &:r2031_5, r0_3 +# 2045| r2045_1(glval) = VariableAddress[c] : +# 2045| r2045_2(glval) = FunctionAddress[lvalue] : +# 2045| r2045_3(ValCat &) = Call[lvalue] : func:r2045_2 +# 2045| mu2045_4(unknown) = ^CallSideEffect : ~m? +# 2045| r2045_5(glval) = CopyValue : r2045_3 +# 2045| mu2045_6(ValCat) = Store[?] : &:r2045_5, r0_3 #-----| r0_4(glval) = VariableAddress[#temp0:0] : #-----| mu0_5(ValCat) = Uninitialized[#temp0:0] : &:r0_4 #-----| r0_6(ValCat) = Load[#temp0:0] : &:r0_4, ~m? -# 2032| r2032_1(glval) = VariableAddress[c] : -# 2032| r2032_2(glval) = FunctionAddress[xvalue] : -# 2032| r2032_3(ValCat &&) = Call[xvalue] : func:r2032_2 -# 2032| mu2032_4(unknown) = ^CallSideEffect : ~m? -# 2032| r2032_5(glval) = CopyValue : r2032_3 -# 2032| mu2032_6(ValCat) = Store[?] : &:r2032_5, r0_6 +# 2046| r2046_1(glval) = VariableAddress[c] : +# 2046| r2046_2(glval) = FunctionAddress[xvalue] : +# 2046| r2046_3(ValCat &&) = Call[xvalue] : func:r2046_2 +# 2046| mu2046_4(unknown) = ^CallSideEffect : ~m? +# 2046| r2046_5(glval) = CopyValue : r2046_3 +# 2046| mu2046_6(ValCat) = Store[?] : &:r2046_5, r0_6 #-----| r0_7(glval) = VariableAddress[#temp0:0] : #-----| mu0_8(ValCat) = Uninitialized[#temp0:0] : &:r0_7 #-----| r0_9(ValCat) = Load[#temp0:0] : &:r0_7, ~m? -# 2033| r2033_1(glval) = VariableAddress[#temp2033:5] : -# 2033| r2033_2(glval) = VariableAddress[c] : -# 2033| r2033_3(glval) = FunctionAddress[prvalue] : -# 2033| r2033_4(ValCat) = Call[prvalue] : func:r2033_3 -# 2033| mu2033_5(unknown) = ^CallSideEffect : ~m? -# 2033| mu2033_6(ValCat) = Store[#temp2033:5] : &:r2033_1, r2033_4 -# 2033| mu2033_7(ValCat) = Store[#temp2033:5] : &:r2033_1, r0_9 +# 2047| r2047_1(glval) = VariableAddress[#temp2047:5] : +# 2047| r2047_2(glval) = VariableAddress[c] : +# 2047| r2047_3(glval) = FunctionAddress[prvalue] : +# 2047| r2047_4(ValCat) = Call[prvalue] : func:r2047_3 +# 2047| mu2047_5(unknown) = ^CallSideEffect : ~m? +# 2047| mu2047_6(ValCat) = Store[#temp2047:5] : &:r2047_1, r2047_4 +# 2047| mu2047_7(ValCat) = Store[#temp2047:5] : &:r2047_1, r0_9 #-----| r0_10(glval) = VariableAddress[#temp0:0] : #-----| mu0_11(ValCat) = Uninitialized[#temp0:0] : &:r0_10 #-----| r0_12(ValCat) = Load[#temp0:0] : &:r0_10, ~m? -# 2034| r2034_1(glval) = FunctionAddress[lvalue] : -# 2034| r2034_2(ValCat &) = Call[lvalue] : func:r2034_1 -# 2034| mu2034_3(unknown) = ^CallSideEffect : ~m? -# 2034| r2034_4(glval) = CopyValue : r2034_2 -# 2034| mu2034_5(ValCat) = Store[?] : &:r2034_4, r0_12 +# 2048| r2048_1(glval) = FunctionAddress[lvalue] : +# 2048| r2048_2(ValCat &) = Call[lvalue] : func:r2048_1 +# 2048| mu2048_3(unknown) = ^CallSideEffect : ~m? +# 2048| r2048_4(glval) = CopyValue : r2048_2 +# 2048| mu2048_5(ValCat) = Store[?] : &:r2048_4, r0_12 #-----| r0_13(glval) = VariableAddress[#temp0:0] : #-----| mu0_14(ValCat) = Uninitialized[#temp0:0] : &:r0_13 #-----| r0_15(ValCat) = Load[#temp0:0] : &:r0_13, ~m? -# 2035| r2035_1(glval) = FunctionAddress[xvalue] : -# 2035| r2035_2(ValCat &&) = Call[xvalue] : func:r2035_1 -# 2035| mu2035_3(unknown) = ^CallSideEffect : ~m? -# 2035| r2035_4(glval) = CopyValue : r2035_2 -# 2035| mu2035_5(ValCat) = Store[?] : &:r2035_4, r0_15 +# 2049| r2049_1(glval) = FunctionAddress[xvalue] : +# 2049| r2049_2(ValCat &&) = Call[xvalue] : func:r2049_1 +# 2049| mu2049_3(unknown) = ^CallSideEffect : ~m? +# 2049| r2049_4(glval) = CopyValue : r2049_2 +# 2049| mu2049_5(ValCat) = Store[?] : &:r2049_4, r0_15 #-----| r0_16(glval) = VariableAddress[#temp0:0] : #-----| mu0_17(ValCat) = Uninitialized[#temp0:0] : &:r0_16 #-----| r0_18(ValCat) = Load[#temp0:0] : &:r0_16, ~m? -# 2036| r2036_1(glval) = VariableAddress[#temp2036:5] : -# 2036| r2036_2(glval) = FunctionAddress[prvalue] : -# 2036| r2036_3(ValCat) = Call[prvalue] : func:r2036_2 -# 2036| mu2036_4(unknown) = ^CallSideEffect : ~m? -# 2036| mu2036_5(ValCat) = Store[#temp2036:5] : &:r2036_1, r2036_3 -# 2036| mu2036_6(ValCat) = Store[#temp2036:5] : &:r2036_1, r0_18 -# 2037| v2037_1(void) = NoOp : -# 2028| v2028_4(void) = ReturnVoid : -# 2028| v2028_5(void) = AliasedUse : ~m? -# 2028| v2028_6(void) = ExitFunction : +# 2050| r2050_1(glval) = VariableAddress[#temp2050:5] : +# 2050| r2050_2(glval) = FunctionAddress[prvalue] : +# 2050| r2050_3(ValCat) = Call[prvalue] : func:r2050_2 +# 2050| mu2050_4(unknown) = ^CallSideEffect : ~m? +# 2050| mu2050_5(ValCat) = Store[#temp2050:5] : &:r2050_1, r2050_3 +# 2050| mu2050_6(ValCat) = Store[#temp2050:5] : &:r2050_1, r0_18 +# 2051| v2051_1(void) = NoOp : +# 2042| v2042_4(void) = ReturnVoid : +# 2042| v2042_5(void) = AliasedUse : ~m? +# 2042| v2042_6(void) = ExitFunction : -# 2039| void SetStaticFuncPtr() -# 2039| Block 0 -# 2039| v2039_1(void) = EnterFunction : -# 2039| mu2039_2(unknown) = AliasedDefinition : -# 2039| mu2039_3(unknown) = InitializeNonLocal : -# 2040| r2040_1(glval) = VariableAddress[c] : -# 2040| mu2040_2(C) = Uninitialized[c] : &:r2040_1 -# 2040| r2040_3(glval) = FunctionAddress[C] : -# 2040| v2040_4(void) = Call[C] : func:r2040_3, this:r2040_1 -# 2040| mu2040_5(unknown) = ^CallSideEffect : ~m? -# 2040| mu2040_6(C) = ^IndirectMayWriteSideEffect[-1] : &:r2040_1 -# 2041| r2041_1(glval<..(*)(..)>) = VariableAddress[pfn] : -# 2041| r2041_2(..(*)(..)) = FunctionAddress[StaticMemberFunction] : -# 2041| mu2041_3(..(*)(..)) = Store[pfn] : &:r2041_1, r2041_2 -# 2042| r2042_1(glval) = VariableAddress[c] : -# 2042| r2042_2(..(*)(..)) = FunctionAddress[StaticMemberFunction] : -# 2042| r2042_3(glval<..(*)(..)>) = VariableAddress[pfn] : -# 2042| mu2042_4(..(*)(..)) = Store[pfn] : &:r2042_3, r2042_2 -# 2043| v2043_1(void) = NoOp : -# 2043| r2043_2(glval) = VariableAddress[c] : -# 2043| r2043_3(glval) = FunctionAddress[~C] : -# 2043| v2043_4(void) = Call[~C] : func:r2043_3, this:r2043_2 -# 2043| mu2043_5(unknown) = ^CallSideEffect : ~m? -# 2043| v2043_6(void) = ^IndirectReadSideEffect[-1] : &:r2043_2, ~m? -# 2043| mu2043_7(C) = ^IndirectMayWriteSideEffect[-1] : &:r2043_2 -# 2039| v2039_4(void) = ReturnVoid : -# 2039| v2039_5(void) = AliasedUse : ~m? -# 2039| v2039_6(void) = ExitFunction : +# 2053| void SetStaticFuncPtr() +# 2053| Block 0 +# 2053| v2053_1(void) = EnterFunction : +# 2053| mu2053_2(unknown) = AliasedDefinition : +# 2053| mu2053_3(unknown) = InitializeNonLocal : +# 2054| r2054_1(glval) = VariableAddress[c] : +# 2054| mu2054_2(C) = Uninitialized[c] : &:r2054_1 +# 2054| r2054_3(glval) = FunctionAddress[C] : +# 2054| v2054_4(void) = Call[C] : func:r2054_3, this:r2054_1 +# 2054| mu2054_5(unknown) = ^CallSideEffect : ~m? +# 2054| mu2054_6(C) = ^IndirectMayWriteSideEffect[-1] : &:r2054_1 +# 2055| r2055_1(glval<..(*)(..)>) = VariableAddress[pfn] : +# 2055| r2055_2(..(*)(..)) = FunctionAddress[StaticMemberFunction] : +# 2055| mu2055_3(..(*)(..)) = Store[pfn] : &:r2055_1, r2055_2 +# 2056| r2056_1(glval) = VariableAddress[c] : +# 2056| r2056_2(..(*)(..)) = FunctionAddress[StaticMemberFunction] : +# 2056| r2056_3(glval<..(*)(..)>) = VariableAddress[pfn] : +# 2056| mu2056_4(..(*)(..)) = Store[pfn] : &:r2056_3, r2056_2 +# 2057| v2057_1(void) = NoOp : +# 2057| r2057_2(glval) = VariableAddress[c] : +# 2057| r2057_3(glval) = FunctionAddress[~C] : +# 2057| v2057_4(void) = Call[~C] : func:r2057_3, this:r2057_2 +# 2057| mu2057_5(unknown) = ^CallSideEffect : ~m? +# 2057| v2057_6(void) = ^IndirectReadSideEffect[-1] : &:r2057_2, ~m? +# 2057| mu2057_7(C) = ^IndirectMayWriteSideEffect[-1] : &:r2057_2 +# 2053| v2053_4(void) = ReturnVoid : +# 2053| v2053_5(void) = AliasedUse : ~m? +# 2053| v2053_6(void) = ExitFunction : -# 2045| void TernaryTestInt(bool, int, int, int) -# 2045| Block 0 -# 2045| v2045_1(void) = EnterFunction : -# 2045| mu2045_2(unknown) = AliasedDefinition : -# 2045| mu2045_3(unknown) = InitializeNonLocal : -# 2045| r2045_4(glval) = VariableAddress[a] : -# 2045| mu2045_5(bool) = InitializeParameter[a] : &:r2045_4 -# 2045| r2045_6(glval) = VariableAddress[x] : -# 2045| mu2045_7(int) = InitializeParameter[x] : &:r2045_6 -# 2045| r2045_8(glval) = VariableAddress[y] : -# 2045| mu2045_9(int) = InitializeParameter[y] : &:r2045_8 -# 2045| r2045_10(glval) = VariableAddress[z] : -# 2045| mu2045_11(int) = InitializeParameter[z] : &:r2045_10 -# 2046| r2046_1(glval) = VariableAddress[a] : -# 2046| r2046_2(bool) = Load[a] : &:r2046_1, ~m? -# 2046| v2046_3(void) = ConditionalBranch : r2046_2 +# 2059| void TernaryTestInt(bool, int, int, int) +# 2059| Block 0 +# 2059| v2059_1(void) = EnterFunction : +# 2059| mu2059_2(unknown) = AliasedDefinition : +# 2059| mu2059_3(unknown) = InitializeNonLocal : +# 2059| r2059_4(glval) = VariableAddress[a] : +# 2059| mu2059_5(bool) = InitializeParameter[a] : &:r2059_4 +# 2059| r2059_6(glval) = VariableAddress[x] : +# 2059| mu2059_7(int) = InitializeParameter[x] : &:r2059_6 +# 2059| r2059_8(glval) = VariableAddress[y] : +# 2059| mu2059_9(int) = InitializeParameter[y] : &:r2059_8 +# 2059| r2059_10(glval) = VariableAddress[z] : +# 2059| mu2059_11(int) = InitializeParameter[z] : &:r2059_10 +# 2060| r2060_1(glval) = VariableAddress[a] : +# 2060| r2060_2(bool) = Load[a] : &:r2060_1, ~m? +# 2060| v2060_3(void) = ConditionalBranch : r2060_2 #-----| False -> Block 3 #-----| True -> Block 2 -# 2046| Block 1 -# 2046| r2046_4(glval) = VariableAddress[#temp2046:9] : -# 2046| r2046_5(int) = Load[#temp2046:9] : &:r2046_4, ~m? -# 2046| r2046_6(glval) = VariableAddress[z] : -# 2046| mu2046_7(int) = Store[z] : &:r2046_6, r2046_5 -# 2047| r2047_1(glval) = VariableAddress[a] : -# 2047| r2047_2(bool) = Load[a] : &:r2047_1, ~m? -# 2047| v2047_3(void) = ConditionalBranch : r2047_2 +# 2060| Block 1 +# 2060| r2060_4(glval) = VariableAddress[#temp2060:9] : +# 2060| r2060_5(int) = Load[#temp2060:9] : &:r2060_4, ~m? +# 2060| r2060_6(glval) = VariableAddress[z] : +# 2060| mu2060_7(int) = Store[z] : &:r2060_6, r2060_5 +# 2061| r2061_1(glval) = VariableAddress[a] : +# 2061| r2061_2(bool) = Load[a] : &:r2061_1, ~m? +# 2061| v2061_3(void) = ConditionalBranch : r2061_2 #-----| False -> Block 6 #-----| True -> Block 5 -# 2046| Block 2 -# 2046| r2046_8(glval) = VariableAddress[x] : -# 2046| r2046_9(int) = Load[x] : &:r2046_8, ~m? -# 2046| r2046_10(glval) = VariableAddress[#temp2046:9] : -# 2046| mu2046_11(int) = Store[#temp2046:9] : &:r2046_10, r2046_9 +# 2060| Block 2 +# 2060| r2060_8(glval) = VariableAddress[x] : +# 2060| r2060_9(int) = Load[x] : &:r2060_8, ~m? +# 2060| r2060_10(glval) = VariableAddress[#temp2060:9] : +# 2060| mu2060_11(int) = Store[#temp2060:9] : &:r2060_10, r2060_9 #-----| Goto -> Block 1 -# 2046| Block 3 -# 2046| r2046_12(glval) = VariableAddress[y] : -# 2046| r2046_13(int) = Load[y] : &:r2046_12, ~m? -# 2046| r2046_14(glval) = VariableAddress[#temp2046:9] : -# 2046| mu2046_15(int) = Store[#temp2046:9] : &:r2046_14, r2046_13 +# 2060| Block 3 +# 2060| r2060_12(glval) = VariableAddress[y] : +# 2060| r2060_13(int) = Load[y] : &:r2060_12, ~m? +# 2060| r2060_14(glval) = VariableAddress[#temp2060:9] : +# 2060| mu2060_15(int) = Store[#temp2060:9] : &:r2060_14, r2060_13 #-----| Goto -> Block 1 -# 2047| Block 4 -# 2047| r2047_4(glval) = VariableAddress[#temp2047:9] : -# 2047| r2047_5(int) = Load[#temp2047:9] : &:r2047_4, ~m? -# 2047| r2047_6(glval) = VariableAddress[z] : -# 2047| mu2047_7(int) = Store[z] : &:r2047_6, r2047_5 -# 2048| r2048_1(glval) = VariableAddress[a] : -# 2048| r2048_2(bool) = Load[a] : &:r2048_1, ~m? -# 2048| v2048_3(void) = ConditionalBranch : r2048_2 +# 2061| Block 4 +# 2061| r2061_4(glval) = VariableAddress[#temp2061:9] : +# 2061| r2061_5(int) = Load[#temp2061:9] : &:r2061_4, ~m? +# 2061| r2061_6(glval) = VariableAddress[z] : +# 2061| mu2061_7(int) = Store[z] : &:r2061_6, r2061_5 +# 2062| r2062_1(glval) = VariableAddress[a] : +# 2062| r2062_2(bool) = Load[a] : &:r2062_1, ~m? +# 2062| v2062_3(void) = ConditionalBranch : r2062_2 #-----| False -> Block 9 #-----| True -> Block 8 -# 2047| Block 5 -# 2047| r2047_8(glval) = VariableAddress[x] : -# 2047| r2047_9(int) = Load[x] : &:r2047_8, ~m? -# 2047| r2047_10(glval) = VariableAddress[#temp2047:9] : -# 2047| mu2047_11(int) = Store[#temp2047:9] : &:r2047_10, r2047_9 +# 2061| Block 5 +# 2061| r2061_8(glval) = VariableAddress[x] : +# 2061| r2061_9(int) = Load[x] : &:r2061_8, ~m? +# 2061| r2061_10(glval) = VariableAddress[#temp2061:9] : +# 2061| mu2061_11(int) = Store[#temp2061:9] : &:r2061_10, r2061_9 #-----| Goto -> Block 4 -# 2047| Block 6 -# 2047| r2047_12(int) = Constant[5] : -# 2047| r2047_13(glval) = VariableAddress[#temp2047:9] : -# 2047| mu2047_14(int) = Store[#temp2047:9] : &:r2047_13, r2047_12 +# 2061| Block 6 +# 2061| r2061_12(int) = Constant[5] : +# 2061| r2061_13(glval) = VariableAddress[#temp2061:9] : +# 2061| mu2061_14(int) = Store[#temp2061:9] : &:r2061_13, r2061_12 #-----| Goto -> Block 4 -# 2048| Block 7 -# 2048| r2048_4(glval) = VariableAddress[#temp2048:9] : -# 2048| r2048_5(int) = Load[#temp2048:9] : &:r2048_4, ~m? -# 2048| r2048_6(glval) = VariableAddress[z] : -# 2048| mu2048_7(int) = Store[z] : &:r2048_6, r2048_5 -# 2049| r2049_1(int) = Constant[7] : -# 2049| r2049_2(glval) = VariableAddress[a] : -# 2049| r2049_3(bool) = Load[a] : &:r2049_2, ~m? -# 2049| v2049_4(void) = ConditionalBranch : r2049_3 +# 2062| Block 7 +# 2062| r2062_4(glval) = VariableAddress[#temp2062:9] : +# 2062| r2062_5(int) = Load[#temp2062:9] : &:r2062_4, ~m? +# 2062| r2062_6(glval) = VariableAddress[z] : +# 2062| mu2062_7(int) = Store[z] : &:r2062_6, r2062_5 +# 2063| r2063_1(int) = Constant[7] : +# 2063| r2063_2(glval) = VariableAddress[a] : +# 2063| r2063_3(bool) = Load[a] : &:r2063_2, ~m? +# 2063| v2063_4(void) = ConditionalBranch : r2063_3 #-----| False -> Block 12 #-----| True -> Block 11 -# 2048| Block 8 -# 2048| r2048_8(int) = Constant[3] : -# 2048| r2048_9(glval) = VariableAddress[#temp2048:9] : -# 2048| mu2048_10(int) = Store[#temp2048:9] : &:r2048_9, r2048_8 +# 2062| Block 8 +# 2062| r2062_8(int) = Constant[3] : +# 2062| r2062_9(glval) = VariableAddress[#temp2062:9] : +# 2062| mu2062_10(int) = Store[#temp2062:9] : &:r2062_9, r2062_8 #-----| Goto -> Block 7 -# 2048| Block 9 -# 2048| r2048_11(int) = Constant[5] : -# 2048| r2048_12(glval) = VariableAddress[#temp2048:9] : -# 2048| mu2048_13(int) = Store[#temp2048:9] : &:r2048_12, r2048_11 +# 2062| Block 9 +# 2062| r2062_11(int) = Constant[5] : +# 2062| r2062_12(glval) = VariableAddress[#temp2062:9] : +# 2062| mu2062_13(int) = Store[#temp2062:9] : &:r2062_12, r2062_11 #-----| Goto -> Block 7 -# 2049| Block 10 -# 2049| r2049_5(glval) = VariableAddress[#temp2049:6] : -# 2049| r2049_6(glval) = Load[#temp2049:6] : &:r2049_5, ~m? -# 2049| mu2049_7(int) = Store[?] : &:r2049_6, r2049_1 -# 2050| v2050_1(void) = NoOp : -# 2045| v2045_12(void) = ReturnVoid : -# 2045| v2045_13(void) = AliasedUse : ~m? -# 2045| v2045_14(void) = ExitFunction : +# 2063| Block 10 +# 2063| r2063_5(glval) = VariableAddress[#temp2063:6] : +# 2063| r2063_6(glval) = Load[#temp2063:6] : &:r2063_5, ~m? +# 2063| mu2063_7(int) = Store[?] : &:r2063_6, r2063_1 +# 2064| v2064_1(void) = NoOp : +# 2059| v2059_12(void) = ReturnVoid : +# 2059| v2059_13(void) = AliasedUse : ~m? +# 2059| v2059_14(void) = ExitFunction : -# 2049| Block 11 -# 2049| r2049_8(glval) = VariableAddress[x] : -# 2049| r2049_9(glval) = VariableAddress[#temp2049:6] : -# 2049| mu2049_10(glval) = Store[#temp2049:6] : &:r2049_9, r2049_8 +# 2063| Block 11 +# 2063| r2063_8(glval) = VariableAddress[x] : +# 2063| r2063_9(glval) = VariableAddress[#temp2063:6] : +# 2063| mu2063_10(glval) = Store[#temp2063:6] : &:r2063_9, r2063_8 #-----| Goto -> Block 10 -# 2049| Block 12 -# 2049| r2049_11(glval) = VariableAddress[y] : -# 2049| r2049_12(glval) = VariableAddress[#temp2049:6] : -# 2049| mu2049_13(glval) = Store[#temp2049:6] : &:r2049_12, r2049_11 +# 2063| Block 12 +# 2063| r2063_11(glval) = VariableAddress[y] : +# 2063| r2063_12(glval) = VariableAddress[#temp2063:6] : +# 2063| mu2063_13(glval) = Store[#temp2063:6] : &:r2063_12, r2063_11 #-----| Goto -> Block 10 -# 2055| void TernaryTestPodObj(bool, TernaryPodObj, TernaryPodObj, TernaryPodObj) -# 2055| Block 0 -# 2055| v2055_1(void) = EnterFunction : -# 2055| mu2055_2(unknown) = AliasedDefinition : -# 2055| mu2055_3(unknown) = InitializeNonLocal : -# 2055| r2055_4(glval) = VariableAddress[a] : -# 2055| mu2055_5(bool) = InitializeParameter[a] : &:r2055_4 -# 2055| r2055_6(glval) = VariableAddress[x] : -# 2055| mu2055_7(TernaryPodObj) = InitializeParameter[x] : &:r2055_6 -# 2055| r2055_8(glval) = VariableAddress[y] : -# 2055| mu2055_9(TernaryPodObj) = InitializeParameter[y] : &:r2055_8 -# 2055| r2055_10(glval) = VariableAddress[z] : -# 2055| mu2055_11(TernaryPodObj) = InitializeParameter[z] : &:r2055_10 -# 2056| r2056_1(glval) = VariableAddress[a] : -# 2056| r2056_2(bool) = Load[a] : &:r2056_1, ~m? -# 2056| v2056_3(void) = ConditionalBranch : r2056_2 +# 2069| void TernaryTestPodObj(bool, TernaryPodObj, TernaryPodObj, TernaryPodObj) +# 2069| Block 0 +# 2069| v2069_1(void) = EnterFunction : +# 2069| mu2069_2(unknown) = AliasedDefinition : +# 2069| mu2069_3(unknown) = InitializeNonLocal : +# 2069| r2069_4(glval) = VariableAddress[a] : +# 2069| mu2069_5(bool) = InitializeParameter[a] : &:r2069_4 +# 2069| r2069_6(glval) = VariableAddress[x] : +# 2069| mu2069_7(TernaryPodObj) = InitializeParameter[x] : &:r2069_6 +# 2069| r2069_8(glval) = VariableAddress[y] : +# 2069| mu2069_9(TernaryPodObj) = InitializeParameter[y] : &:r2069_8 +# 2069| r2069_10(glval) = VariableAddress[z] : +# 2069| mu2069_11(TernaryPodObj) = InitializeParameter[z] : &:r2069_10 +# 2070| r2070_1(glval) = VariableAddress[a] : +# 2070| r2070_2(bool) = Load[a] : &:r2070_1, ~m? +# 2070| v2070_3(void) = ConditionalBranch : r2070_2 #-----| False -> Block 3 #-----| True -> Block 2 -# 2056| Block 1 -# 2056| r2056_4(glval) = VariableAddress[#temp2056:9] : -# 2056| r2056_5(TernaryPodObj) = Load[#temp2056:9] : &:r2056_4, ~m? -# 2056| r2056_6(glval) = VariableAddress[z] : -# 2056| mu2056_7(TernaryPodObj) = Store[z] : &:r2056_6, r2056_5 -# 2057| r2057_1(glval) = VariableAddress[#temp2057:9] : -# 2057| r2057_2(glval) = VariableAddress[a] : -# 2057| r2057_3(bool) = Load[a] : &:r2057_2, ~m? -# 2057| v2057_4(void) = ConditionalBranch : r2057_3 +# 2070| Block 1 +# 2070| r2070_4(glval) = VariableAddress[#temp2070:9] : +# 2070| r2070_5(TernaryPodObj) = Load[#temp2070:9] : &:r2070_4, ~m? +# 2070| r2070_6(glval) = VariableAddress[z] : +# 2070| mu2070_7(TernaryPodObj) = Store[z] : &:r2070_6, r2070_5 +# 2071| r2071_1(glval) = VariableAddress[#temp2071:9] : +# 2071| r2071_2(glval) = VariableAddress[a] : +# 2071| r2071_3(bool) = Load[a] : &:r2071_2, ~m? +# 2071| v2071_4(void) = ConditionalBranch : r2071_3 #-----| False -> Block 6 #-----| True -> Block 5 -# 2056| Block 2 -# 2056| r2056_8(glval) = VariableAddress[x] : -# 2056| r2056_9(TernaryPodObj) = Load[x] : &:r2056_8, ~m? -# 2056| r2056_10(glval) = VariableAddress[#temp2056:9] : -# 2056| mu2056_11(TernaryPodObj) = Store[#temp2056:9] : &:r2056_10, r2056_9 +# 2070| Block 2 +# 2070| r2070_8(glval) = VariableAddress[x] : +# 2070| r2070_9(TernaryPodObj) = Load[x] : &:r2070_8, ~m? +# 2070| r2070_10(glval) = VariableAddress[#temp2070:9] : +# 2070| mu2070_11(TernaryPodObj) = Store[#temp2070:9] : &:r2070_10, r2070_9 #-----| Goto -> Block 1 -# 2056| Block 3 -# 2056| r2056_12(glval) = VariableAddress[y] : -# 2056| r2056_13(TernaryPodObj) = Load[y] : &:r2056_12, ~m? -# 2056| r2056_14(glval) = VariableAddress[#temp2056:9] : -# 2056| mu2056_15(TernaryPodObj) = Store[#temp2056:9] : &:r2056_14, r2056_13 +# 2070| Block 3 +# 2070| r2070_12(glval) = VariableAddress[y] : +# 2070| r2070_13(TernaryPodObj) = Load[y] : &:r2070_12, ~m? +# 2070| r2070_14(glval) = VariableAddress[#temp2070:9] : +# 2070| mu2070_15(TernaryPodObj) = Store[#temp2070:9] : &:r2070_14, r2070_13 #-----| Goto -> Block 1 -# 2057| Block 4 -# 2057| r2057_5(glval) = VariableAddress[#temp2057:9] : -# 2057| r2057_6(TernaryPodObj) = Load[#temp2057:9] : &:r2057_5, ~m? -# 2057| mu2057_7(TernaryPodObj) = Store[#temp2057:9] : &:r2057_1, r2057_6 -# 2057| r2057_8(TernaryPodObj) = Load[#temp2057:9] : &:r2057_1, ~m? -# 2057| r2057_9(glval) = VariableAddress[z] : -# 2057| mu2057_10(TernaryPodObj) = Store[z] : &:r2057_9, r2057_8 -# 2058| r2058_1(glval) = VariableAddress[#temp2058:9] : -# 2058| r2058_2(glval) = VariableAddress[a] : -# 2058| r2058_3(bool) = Load[a] : &:r2058_2, ~m? -# 2058| v2058_4(void) = ConditionalBranch : r2058_3 +# 2071| Block 4 +# 2071| r2071_5(glval) = VariableAddress[#temp2071:9] : +# 2071| r2071_6(TernaryPodObj) = Load[#temp2071:9] : &:r2071_5, ~m? +# 2071| mu2071_7(TernaryPodObj) = Store[#temp2071:9] : &:r2071_1, r2071_6 +# 2071| r2071_8(TernaryPodObj) = Load[#temp2071:9] : &:r2071_1, ~m? +# 2071| r2071_9(glval) = VariableAddress[z] : +# 2071| mu2071_10(TernaryPodObj) = Store[z] : &:r2071_9, r2071_8 +# 2072| r2072_1(glval) = VariableAddress[#temp2072:9] : +# 2072| r2072_2(glval) = VariableAddress[a] : +# 2072| r2072_3(bool) = Load[a] : &:r2072_2, ~m? +# 2072| v2072_4(void) = ConditionalBranch : r2072_3 #-----| False -> Block 9 #-----| True -> Block 8 -# 2057| Block 5 -# 2057| r2057_11(glval) = VariableAddress[#temp2057:13] : -# 2057| r2057_12(glval) = VariableAddress[x] : -# 2057| r2057_13(TernaryPodObj) = Load[x] : &:r2057_12, ~m? -# 2057| mu2057_14(TernaryPodObj) = Store[#temp2057:13] : &:r2057_11, r2057_13 -# 2057| r2057_15(TernaryPodObj) = Load[#temp2057:13] : &:r2057_11, ~m? -# 2057| r2057_16(glval) = VariableAddress[#temp2057:9] : -# 2057| mu2057_17(TernaryPodObj) = Store[#temp2057:9] : &:r2057_16, r2057_15 +# 2071| Block 5 +# 2071| r2071_11(glval) = VariableAddress[#temp2071:13] : +# 2071| r2071_12(glval) = VariableAddress[x] : +# 2071| r2071_13(TernaryPodObj) = Load[x] : &:r2071_12, ~m? +# 2071| mu2071_14(TernaryPodObj) = Store[#temp2071:13] : &:r2071_11, r2071_13 +# 2071| r2071_15(TernaryPodObj) = Load[#temp2071:13] : &:r2071_11, ~m? +# 2071| r2071_16(glval) = VariableAddress[#temp2071:9] : +# 2071| mu2071_17(TernaryPodObj) = Store[#temp2071:9] : &:r2071_16, r2071_15 #-----| Goto -> Block 4 -# 2057| Block 6 -# 2057| r2057_18(glval) = VariableAddress[#temp2057:17] : -# 2057| r2057_19(TernaryPodObj) = Constant[0] : -# 2057| mu2057_20(TernaryPodObj) = Store[#temp2057:17] : &:r2057_18, r2057_19 -# 2057| r2057_21(TernaryPodObj) = Load[#temp2057:17] : &:r2057_18, ~m? -# 2057| r2057_22(glval) = VariableAddress[#temp2057:9] : -# 2057| mu2057_23(TernaryPodObj) = Store[#temp2057:9] : &:r2057_22, r2057_21 +# 2071| Block 6 +# 2071| r2071_18(glval) = VariableAddress[#temp2071:17] : +# 2071| r2071_19(TernaryPodObj) = Constant[0] : +# 2071| mu2071_20(TernaryPodObj) = Store[#temp2071:17] : &:r2071_18, r2071_19 +# 2071| r2071_21(TernaryPodObj) = Load[#temp2071:17] : &:r2071_18, ~m? +# 2071| r2071_22(glval) = VariableAddress[#temp2071:9] : +# 2071| mu2071_23(TernaryPodObj) = Store[#temp2071:9] : &:r2071_22, r2071_21 #-----| Goto -> Block 4 -# 2058| Block 7 -# 2058| r2058_5(glval) = VariableAddress[#temp2058:9] : -# 2058| r2058_6(TernaryPodObj) = Load[#temp2058:9] : &:r2058_5, ~m? -# 2058| mu2058_7(TernaryPodObj) = Store[#temp2058:9] : &:r2058_1, r2058_6 -# 2058| r2058_8(TernaryPodObj) = Load[#temp2058:9] : &:r2058_1, ~m? -# 2058| r2058_9(glval) = VariableAddress[z] : -# 2058| mu2058_10(TernaryPodObj) = Store[z] : &:r2058_9, r2058_8 -# 2059| r2059_1(glval) = VariableAddress[#temp2059:23] : -# 2059| r2059_2(TernaryPodObj) = Constant[0] : -# 2059| mu2059_3(TernaryPodObj) = Store[#temp2059:23] : &:r2059_1, r2059_2 -# 2059| r2059_4(TernaryPodObj) = Load[#temp2059:23] : &:r2059_1, ~m? -# 2059| r2059_5(glval) = VariableAddress[a] : -# 2059| r2059_6(bool) = Load[a] : &:r2059_5, ~m? -# 2059| v2059_7(void) = ConditionalBranch : r2059_6 +# 2072| Block 7 +# 2072| r2072_5(glval) = VariableAddress[#temp2072:9] : +# 2072| r2072_6(TernaryPodObj) = Load[#temp2072:9] : &:r2072_5, ~m? +# 2072| mu2072_7(TernaryPodObj) = Store[#temp2072:9] : &:r2072_1, r2072_6 +# 2072| r2072_8(TernaryPodObj) = Load[#temp2072:9] : &:r2072_1, ~m? +# 2072| r2072_9(glval) = VariableAddress[z] : +# 2072| mu2072_10(TernaryPodObj) = Store[z] : &:r2072_9, r2072_8 +# 2073| r2073_1(glval) = VariableAddress[#temp2073:23] : +# 2073| r2073_2(TernaryPodObj) = Constant[0] : +# 2073| mu2073_3(TernaryPodObj) = Store[#temp2073:23] : &:r2073_1, r2073_2 +# 2073| r2073_4(TernaryPodObj) = Load[#temp2073:23] : &:r2073_1, ~m? +# 2073| r2073_5(glval) = VariableAddress[a] : +# 2073| r2073_6(bool) = Load[a] : &:r2073_5, ~m? +# 2073| v2073_7(void) = ConditionalBranch : r2073_6 #-----| False -> Block 12 #-----| True -> Block 11 -# 2058| Block 8 -# 2058| r2058_11(glval) = VariableAddress[#temp2058:13] : -# 2058| r2058_12(TernaryPodObj) = Constant[0] : -# 2058| mu2058_13(TernaryPodObj) = Store[#temp2058:13] : &:r2058_11, r2058_12 -# 2058| r2058_14(TernaryPodObj) = Load[#temp2058:13] : &:r2058_11, ~m? -# 2058| r2058_15(glval) = VariableAddress[#temp2058:9] : -# 2058| mu2058_16(TernaryPodObj) = Store[#temp2058:9] : &:r2058_15, r2058_14 +# 2072| Block 8 +# 2072| r2072_11(glval) = VariableAddress[#temp2072:13] : +# 2072| r2072_12(TernaryPodObj) = Constant[0] : +# 2072| mu2072_13(TernaryPodObj) = Store[#temp2072:13] : &:r2072_11, r2072_12 +# 2072| r2072_14(TernaryPodObj) = Load[#temp2072:13] : &:r2072_11, ~m? +# 2072| r2072_15(glval) = VariableAddress[#temp2072:9] : +# 2072| mu2072_16(TernaryPodObj) = Store[#temp2072:9] : &:r2072_15, r2072_14 #-----| Goto -> Block 7 -# 2058| Block 9 -# 2058| r2058_17(glval) = VariableAddress[#temp2058:31] : -# 2058| r2058_18(TernaryPodObj) = Constant[0] : -# 2058| mu2058_19(TernaryPodObj) = Store[#temp2058:31] : &:r2058_17, r2058_18 -# 2058| r2058_20(TernaryPodObj) = Load[#temp2058:31] : &:r2058_17, ~m? -# 2058| r2058_21(glval) = VariableAddress[#temp2058:9] : -# 2058| mu2058_22(TernaryPodObj) = Store[#temp2058:9] : &:r2058_21, r2058_20 +# 2072| Block 9 +# 2072| r2072_17(glval) = VariableAddress[#temp2072:31] : +# 2072| r2072_18(TernaryPodObj) = Constant[0] : +# 2072| mu2072_19(TernaryPodObj) = Store[#temp2072:31] : &:r2072_17, r2072_18 +# 2072| r2072_20(TernaryPodObj) = Load[#temp2072:31] : &:r2072_17, ~m? +# 2072| r2072_21(glval) = VariableAddress[#temp2072:9] : +# 2072| mu2072_22(TernaryPodObj) = Store[#temp2072:9] : &:r2072_21, r2072_20 #-----| Goto -> Block 7 -# 2059| Block 10 -# 2059| r2059_8(glval) = VariableAddress[#temp2059:10] : -# 2059| r2059_9(TernaryPodObj) = Load[#temp2059:10] : &:r2059_8, ~m? -# 2059| r2059_10(glval) = VariableAddress[z] : -# 2059| mu2059_11(TernaryPodObj) = Store[z] : &:r2059_10, r2059_9 -# 2059| r2059_12(glval) = CopyValue : r2059_10 -# 2059| mu2059_13(TernaryPodObj) = Store[?] : &:r2059_12, r2059_4 -# 2060| v2060_1(void) = NoOp : -# 2055| v2055_12(void) = ReturnVoid : -# 2055| v2055_13(void) = AliasedUse : ~m? -# 2055| v2055_14(void) = ExitFunction : +# 2073| Block 10 +# 2073| r2073_8(glval) = VariableAddress[#temp2073:10] : +# 2073| r2073_9(TernaryPodObj) = Load[#temp2073:10] : &:r2073_8, ~m? +# 2073| r2073_10(glval) = VariableAddress[z] : +# 2073| mu2073_11(TernaryPodObj) = Store[z] : &:r2073_10, r2073_9 +# 2073| r2073_12(glval) = CopyValue : r2073_10 +# 2073| mu2073_13(TernaryPodObj) = Store[?] : &:r2073_12, r2073_4 +# 2074| v2074_1(void) = NoOp : +# 2069| v2069_12(void) = ReturnVoid : +# 2069| v2069_13(void) = AliasedUse : ~m? +# 2069| v2069_14(void) = ExitFunction : -# 2059| Block 11 -# 2059| r2059_14(glval) = VariableAddress[x] : -# 2059| r2059_15(TernaryPodObj) = Load[x] : &:r2059_14, ~m? -# 2059| r2059_16(glval) = VariableAddress[#temp2059:10] : -# 2059| mu2059_17(TernaryPodObj) = Store[#temp2059:10] : &:r2059_16, r2059_15 +# 2073| Block 11 +# 2073| r2073_14(glval) = VariableAddress[x] : +# 2073| r2073_15(TernaryPodObj) = Load[x] : &:r2073_14, ~m? +# 2073| r2073_16(glval) = VariableAddress[#temp2073:10] : +# 2073| mu2073_17(TernaryPodObj) = Store[#temp2073:10] : &:r2073_16, r2073_15 #-----| Goto -> Block 10 -# 2059| Block 12 -# 2059| r2059_18(glval) = VariableAddress[y] : -# 2059| r2059_19(TernaryPodObj) = Load[y] : &:r2059_18, ~m? -# 2059| r2059_20(glval) = VariableAddress[#temp2059:10] : -# 2059| mu2059_21(TernaryPodObj) = Store[#temp2059:10] : &:r2059_20, r2059_19 +# 2073| Block 12 +# 2073| r2073_18(glval) = VariableAddress[y] : +# 2073| r2073_19(TernaryPodObj) = Load[y] : &:r2073_18, ~m? +# 2073| r2073_20(glval) = VariableAddress[#temp2073:10] : +# 2073| mu2073_21(TernaryPodObj) = Store[#temp2073:10] : &:r2073_20, r2073_19 #-----| Goto -> Block 10 -# 2062| TernaryNonPodObj& TernaryNonPodObj::operator=(TernaryNonPodObj const&) -# 2062| Block 0 -# 2062| v2062_1(void) = EnterFunction : -# 2062| mu2062_2(unknown) = AliasedDefinition : -# 2062| mu2062_3(unknown) = InitializeNonLocal : -# 2062| r2062_4(glval) = VariableAddress[#this] : -# 2062| mu2062_5(glval) = InitializeParameter[#this] : &:r2062_4 -# 2062| r2062_6(glval) = Load[#this] : &:r2062_4, ~m? -# 2062| mu2062_7(TernaryNonPodObj) = InitializeIndirection[#this] : &:r2062_6 +# 2076| TernaryNonPodObj& TernaryNonPodObj::operator=(TernaryNonPodObj const&) +# 2076| Block 0 +# 2076| v2076_1(void) = EnterFunction : +# 2076| mu2076_2(unknown) = AliasedDefinition : +# 2076| mu2076_3(unknown) = InitializeNonLocal : +# 2076| r2076_4(glval) = VariableAddress[#this] : +# 2076| mu2076_5(glval) = InitializeParameter[#this] : &:r2076_4 +# 2076| r2076_6(glval) = Load[#this] : &:r2076_4, ~m? +# 2076| mu2076_7(TernaryNonPodObj) = InitializeIndirection[#this] : &:r2076_6 #-----| r0_1(glval) = VariableAddress[(unnamed parameter 0)] : #-----| mu0_2(TernaryNonPodObj &) = InitializeParameter[(unnamed parameter 0)] : &:r0_1 #-----| r0_3(TernaryNonPodObj &) = Load[(unnamed parameter 0)] : &:r0_1, ~m? @@ -11469,1435 +11554,1095 @@ ir.cpp: #-----| r0_8(glval) = CopyValue : r0_7 #-----| r0_9(TernaryNonPodObj &) = CopyValue : r0_8 #-----| mu0_10(TernaryNonPodObj &) = Store[#return] : &:r0_5, r0_9 -# 2062| v2062_8(void) = ReturnIndirection[#this] : &:r2062_6, ~m? +# 2076| v2076_8(void) = ReturnIndirection[#this] : &:r2076_6, ~m? #-----| v0_11(void) = ReturnIndirection[(unnamed parameter 0)] : &:r0_3, ~m? -# 2062| r2062_9(glval) = VariableAddress[#return] : -# 2062| v2062_10(void) = ReturnValue : &:r2062_9, ~m? -# 2062| v2062_11(void) = AliasedUse : ~m? -# 2062| v2062_12(void) = ExitFunction : +# 2076| r2076_9(glval) = VariableAddress[#return] : +# 2076| v2076_10(void) = ReturnValue : &:r2076_9, ~m? +# 2076| v2076_11(void) = AliasedUse : ~m? +# 2076| v2076_12(void) = ExitFunction : -# 2062| void TernaryNonPodObj::TernaryNonPodObj() -# 2062| Block 0 -# 2062| v2062_1(void) = EnterFunction : -# 2062| mu2062_2(unknown) = AliasedDefinition : -# 2062| mu2062_3(unknown) = InitializeNonLocal : -# 2062| r2062_4(glval) = VariableAddress[#this] : -# 2062| mu2062_5(glval) = InitializeParameter[#this] : &:r2062_4 -# 2062| r2062_6(glval) = Load[#this] : &:r2062_4, ~m? -# 2062| mu2062_7(TernaryNonPodObj) = InitializeIndirection[#this] : &:r2062_6 -# 2062| v2062_8(void) = NoOp : -# 2062| v2062_9(void) = ReturnIndirection[#this] : &:r2062_6, ~m? -# 2062| v2062_10(void) = ReturnVoid : -# 2062| v2062_11(void) = AliasedUse : ~m? -# 2062| v2062_12(void) = ExitFunction : +# 2076| void TernaryNonPodObj::TernaryNonPodObj() +# 2076| Block 0 +# 2076| v2076_1(void) = EnterFunction : +# 2076| mu2076_2(unknown) = AliasedDefinition : +# 2076| mu2076_3(unknown) = InitializeNonLocal : +# 2076| r2076_4(glval) = VariableAddress[#this] : +# 2076| mu2076_5(glval) = InitializeParameter[#this] : &:r2076_4 +# 2076| r2076_6(glval) = Load[#this] : &:r2076_4, ~m? +# 2076| mu2076_7(TernaryNonPodObj) = InitializeIndirection[#this] : &:r2076_6 +# 2076| v2076_8(void) = NoOp : +# 2076| v2076_9(void) = ReturnIndirection[#this] : &:r2076_6, ~m? +# 2076| v2076_10(void) = ReturnVoid : +# 2076| v2076_11(void) = AliasedUse : ~m? +# 2076| v2076_12(void) = ExitFunction : -# 2062| void TernaryNonPodObj::TernaryNonPodObj(TernaryNonPodObj const&) -# 2062| Block 0 -# 2062| v2062_1(void) = EnterFunction : -# 2062| mu2062_2(unknown) = AliasedDefinition : -# 2062| mu2062_3(unknown) = InitializeNonLocal : -# 2062| r2062_4(glval) = VariableAddress[#this] : -# 2062| mu2062_5(glval) = InitializeParameter[#this] : &:r2062_4 -# 2062| r2062_6(glval) = Load[#this] : &:r2062_4, ~m? -# 2062| mu2062_7(TernaryNonPodObj) = InitializeIndirection[#this] : &:r2062_6 +# 2076| void TernaryNonPodObj::TernaryNonPodObj(TernaryNonPodObj const&) +# 2076| Block 0 +# 2076| v2076_1(void) = EnterFunction : +# 2076| mu2076_2(unknown) = AliasedDefinition : +# 2076| mu2076_3(unknown) = InitializeNonLocal : +# 2076| r2076_4(glval) = VariableAddress[#this] : +# 2076| mu2076_5(glval) = InitializeParameter[#this] : &:r2076_4 +# 2076| r2076_6(glval) = Load[#this] : &:r2076_4, ~m? +# 2076| mu2076_7(TernaryNonPodObj) = InitializeIndirection[#this] : &:r2076_6 #-----| r0_1(glval) = VariableAddress[(unnamed parameter 0)] : #-----| mu0_2(TernaryNonPodObj &) = InitializeParameter[(unnamed parameter 0)] : &:r0_1 #-----| r0_3(TernaryNonPodObj &) = Load[(unnamed parameter 0)] : &:r0_1, ~m? #-----| mu0_4(unknown) = InitializeIndirection[(unnamed parameter 0)] : &:r0_3 -# 2062| v2062_8(void) = NoOp : -# 2062| v2062_9(void) = ReturnIndirection[#this] : &:r2062_6, ~m? +# 2076| v2076_8(void) = NoOp : +# 2076| v2076_9(void) = ReturnIndirection[#this] : &:r2076_6, ~m? #-----| v0_5(void) = ReturnIndirection[(unnamed parameter 0)] : &:r0_3, ~m? -# 2062| v2062_10(void) = ReturnVoid : -# 2062| v2062_11(void) = AliasedUse : ~m? -# 2062| v2062_12(void) = ExitFunction : +# 2076| v2076_10(void) = ReturnVoid : +# 2076| v2076_11(void) = AliasedUse : ~m? +# 2076| v2076_12(void) = ExitFunction : -# 2063| void TernaryNonPodObj::~TernaryNonPodObj() -# 2063| Block 0 -# 2063| v2063_1(void) = EnterFunction : -# 2063| mu2063_2(unknown) = AliasedDefinition : -# 2063| mu2063_3(unknown) = InitializeNonLocal : -# 2063| r2063_4(glval) = VariableAddress[#this] : -# 2063| mu2063_5(glval) = InitializeParameter[#this] : &:r2063_4 -# 2063| r2063_6(glval) = Load[#this] : &:r2063_4, ~m? -# 2063| mu2063_7(TernaryNonPodObj) = InitializeIndirection[#this] : &:r2063_6 -# 2063| v2063_8(void) = NoOp : -# 2063| v2063_9(void) = ReturnIndirection[#this] : &:r2063_6, ~m? -# 2063| v2063_10(void) = ReturnVoid : -# 2063| v2063_11(void) = AliasedUse : ~m? -# 2063| v2063_12(void) = ExitFunction : +# 2077| void TernaryNonPodObj::~TernaryNonPodObj() +# 2077| Block 0 +# 2077| v2077_1(void) = EnterFunction : +# 2077| mu2077_2(unknown) = AliasedDefinition : +# 2077| mu2077_3(unknown) = InitializeNonLocal : +# 2077| r2077_4(glval) = VariableAddress[#this] : +# 2077| mu2077_5(glval) = InitializeParameter[#this] : &:r2077_4 +# 2077| r2077_6(glval) = Load[#this] : &:r2077_4, ~m? +# 2077| mu2077_7(TernaryNonPodObj) = InitializeIndirection[#this] : &:r2077_6 +# 2077| v2077_8(void) = NoOp : +# 2077| v2077_9(void) = ReturnIndirection[#this] : &:r2077_6, ~m? +# 2077| v2077_10(void) = ReturnVoid : +# 2077| v2077_11(void) = AliasedUse : ~m? +# 2077| v2077_12(void) = ExitFunction : -# 2066| void TernaryTestNonPodObj(bool, TernaryNonPodObj, TernaryNonPodObj, TernaryNonPodObj) -# 2066| Block 0 -# 2066| v2066_1(void) = EnterFunction : -# 2066| mu2066_2(unknown) = AliasedDefinition : -# 2066| mu2066_3(unknown) = InitializeNonLocal : -# 2066| r2066_4(glval) = VariableAddress[a] : -# 2066| mu2066_5(bool) = InitializeParameter[a] : &:r2066_4 -# 2066| r2066_6(glval) = VariableAddress[x] : -# 2066| mu2066_7(TernaryNonPodObj) = InitializeParameter[x] : &:r2066_6 -# 2066| r2066_8(glval) = VariableAddress[y] : -# 2066| mu2066_9(TernaryNonPodObj) = InitializeParameter[y] : &:r2066_8 -# 2066| r2066_10(glval) = VariableAddress[z] : -# 2066| mu2066_11(TernaryNonPodObj) = InitializeParameter[z] : &:r2066_10 -# 2067| r2067_1(glval) = VariableAddress[z] : -# 2067| r2067_2(glval) = FunctionAddress[operator=] : -# 2067| r2067_3(glval) = VariableAddress[a] : -# 2067| r2067_4(bool) = Load[a] : &:r2067_3, ~m? -# 2067| v2067_5(void) = ConditionalBranch : r2067_4 +# 2080| void TernaryTestNonPodObj(bool, TernaryNonPodObj, TernaryNonPodObj, TernaryNonPodObj) +# 2080| Block 0 +# 2080| v2080_1(void) = EnterFunction : +# 2080| mu2080_2(unknown) = AliasedDefinition : +# 2080| mu2080_3(unknown) = InitializeNonLocal : +# 2080| r2080_4(glval) = VariableAddress[a] : +# 2080| mu2080_5(bool) = InitializeParameter[a] : &:r2080_4 +# 2080| r2080_6(glval) = VariableAddress[x] : +# 2080| mu2080_7(TernaryNonPodObj) = InitializeParameter[x] : &:r2080_6 +# 2080| r2080_8(glval) = VariableAddress[y] : +# 2080| mu2080_9(TernaryNonPodObj) = InitializeParameter[y] : &:r2080_8 +# 2080| r2080_10(glval) = VariableAddress[z] : +# 2080| mu2080_11(TernaryNonPodObj) = InitializeParameter[z] : &:r2080_10 +# 2081| r2081_1(glval) = VariableAddress[z] : +# 2081| r2081_2(glval) = FunctionAddress[operator=] : +# 2081| r2081_3(glval) = VariableAddress[a] : +# 2081| r2081_4(bool) = Load[a] : &:r2081_3, ~m? +# 2081| v2081_5(void) = ConditionalBranch : r2081_4 #-----| False -> Block 3 #-----| True -> Block 2 -# 2067| Block 1 -# 2067| r2067_6(glval) = VariableAddress[#temp2067:9] : -# 2067| r2067_7(glval) = Load[#temp2067:9] : &:r2067_6, ~m? -# 2067| r2067_8(glval) = Convert : r2067_7 -# 2067| r2067_9(TernaryNonPodObj &) = CopyValue : r2067_8 -# 2067| r2067_10(TernaryNonPodObj &) = Call[operator=] : func:r2067_2, this:r2067_1, 0:r2067_9 -# 2067| mu2067_11(unknown) = ^CallSideEffect : ~m? -# 2067| v2067_12(void) = ^IndirectReadSideEffect[-1] : &:r2067_1, ~m? -# 2067| v2067_13(void) = ^BufferReadSideEffect[0] : &:r2067_9, ~m? -# 2067| mu2067_14(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2067_1 -# 2067| r2067_15(glval) = CopyValue : r2067_10 -# 2068| r2068_1(glval) = VariableAddress[z] : -# 2068| r2068_2(glval) = FunctionAddress[operator=] : -# 2068| r2068_3(glval) = VariableAddress[#temp2068:9] : -# 2068| r2068_4(glval) = VariableAddress[a] : -# 2068| r2068_5(bool) = Load[a] : &:r2068_4, ~m? -# 2068| v2068_6(void) = ConditionalBranch : r2068_5 +# 2081| Block 1 +# 2081| r2081_6(glval) = VariableAddress[#temp2081:9] : +# 2081| r2081_7(glval) = Load[#temp2081:9] : &:r2081_6, ~m? +# 2081| r2081_8(glval) = Convert : r2081_7 +# 2081| r2081_9(TernaryNonPodObj &) = CopyValue : r2081_8 +# 2081| r2081_10(TernaryNonPodObj &) = Call[operator=] : func:r2081_2, this:r2081_1, 0:r2081_9 +# 2081| mu2081_11(unknown) = ^CallSideEffect : ~m? +# 2081| v2081_12(void) = ^IndirectReadSideEffect[-1] : &:r2081_1, ~m? +# 2081| v2081_13(void) = ^BufferReadSideEffect[0] : &:r2081_9, ~m? +# 2081| mu2081_14(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2081_1 +# 2081| r2081_15(glval) = CopyValue : r2081_10 +# 2082| r2082_1(glval) = VariableAddress[z] : +# 2082| r2082_2(glval) = FunctionAddress[operator=] : +# 2082| r2082_3(glval) = VariableAddress[#temp2082:9] : +# 2082| r2082_4(glval) = VariableAddress[a] : +# 2082| r2082_5(bool) = Load[a] : &:r2082_4, ~m? +# 2082| v2082_6(void) = ConditionalBranch : r2082_5 #-----| False -> Block 6 #-----| True -> Block 5 -# 2067| Block 2 -# 2067| r2067_16(glval) = VariableAddress[x] : -# 2067| r2067_17(glval) = VariableAddress[#temp2067:9] : -# 2067| mu2067_18(glval) = Store[#temp2067:9] : &:r2067_17, r2067_16 +# 2081| Block 2 +# 2081| r2081_16(glval) = VariableAddress[x] : +# 2081| r2081_17(glval) = VariableAddress[#temp2081:9] : +# 2081| mu2081_18(glval) = Store[#temp2081:9] : &:r2081_17, r2081_16 #-----| Goto -> Block 1 -# 2067| Block 3 -# 2067| r2067_19(glval) = VariableAddress[y] : -# 2067| r2067_20(glval) = VariableAddress[#temp2067:9] : -# 2067| mu2067_21(glval) = Store[#temp2067:9] : &:r2067_20, r2067_19 +# 2081| Block 3 +# 2081| r2081_19(glval) = VariableAddress[y] : +# 2081| r2081_20(glval) = VariableAddress[#temp2081:9] : +# 2081| mu2081_21(glval) = Store[#temp2081:9] : &:r2081_20, r2081_19 #-----| Goto -> Block 1 -# 2068| Block 4 -# 2068| r2068_7(glval) = VariableAddress[#temp2068:9] : -# 2068| r2068_8(TernaryNonPodObj) = Load[#temp2068:9] : &:r2068_7, ~m? -# 2068| mu2068_9(TernaryNonPodObj) = Store[#temp2068:9] : &:r2068_3, r2068_8 -# 2068| r2068_10(glval) = Convert : r2068_3 -# 2068| r2068_11(TernaryNonPodObj &) = CopyValue : r2068_10 -# 2068| r2068_12(TernaryNonPodObj &) = Call[operator=] : func:r2068_2, this:r2068_1, 0:r2068_11 -# 2068| mu2068_13(unknown) = ^CallSideEffect : ~m? -# 2068| v2068_14(void) = ^IndirectReadSideEffect[-1] : &:r2068_1, ~m? -# 2068| v2068_15(void) = ^BufferReadSideEffect[0] : &:r2068_11, ~m? -# 2068| mu2068_16(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2068_1 -# 2068| r2068_17(glval) = CopyValue : r2068_12 -# 2069| r2069_1(glval) = VariableAddress[z] : -# 2069| r2069_2(glval) = FunctionAddress[operator=] : -# 2069| r2069_3(glval) = VariableAddress[#temp2069:9] : -# 2069| r2069_4(glval) = VariableAddress[a] : -# 2069| r2069_5(bool) = Load[a] : &:r2069_4, ~m? -# 2069| v2069_6(void) = ConditionalBranch : r2069_5 +# 2082| Block 4 +# 2082| r2082_7(glval) = VariableAddress[#temp2082:9] : +# 2082| r2082_8(TernaryNonPodObj) = Load[#temp2082:9] : &:r2082_7, ~m? +# 2082| mu2082_9(TernaryNonPodObj) = Store[#temp2082:9] : &:r2082_3, r2082_8 +# 2082| r2082_10(glval) = Convert : r2082_3 +# 2082| r2082_11(TernaryNonPodObj &) = CopyValue : r2082_10 +# 2082| r2082_12(TernaryNonPodObj &) = Call[operator=] : func:r2082_2, this:r2082_1, 0:r2082_11 +# 2082| mu2082_13(unknown) = ^CallSideEffect : ~m? +# 2082| v2082_14(void) = ^IndirectReadSideEffect[-1] : &:r2082_1, ~m? +# 2082| v2082_15(void) = ^BufferReadSideEffect[0] : &:r2082_11, ~m? +# 2082| mu2082_16(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2082_1 +# 2082| r2082_17(glval) = CopyValue : r2082_12 +# 2083| r2083_1(glval) = VariableAddress[z] : +# 2083| r2083_2(glval) = FunctionAddress[operator=] : +# 2083| r2083_3(glval) = VariableAddress[#temp2083:9] : +# 2083| r2083_4(glval) = VariableAddress[a] : +# 2083| r2083_5(bool) = Load[a] : &:r2083_4, ~m? +# 2083| v2083_6(void) = ConditionalBranch : r2083_5 #-----| False -> Block 9 #-----| True -> Block 8 -# 2068| Block 5 -# 2068| r2068_18(glval) = VariableAddress[#temp2068:13] : -# 2068| mu2068_19(TernaryNonPodObj) = Uninitialized[#temp2068:13] : &:r2068_18 -# 2068| r2068_20(glval) = FunctionAddress[TernaryNonPodObj] : -# 2068| r2068_21(glval) = VariableAddress[x] : -# 2068| r2068_22(glval) = Convert : r2068_21 -# 2068| r2068_23(TernaryNonPodObj &) = CopyValue : r2068_22 -# 2068| v2068_24(void) = Call[TernaryNonPodObj] : func:r2068_20, this:r2068_18, 0:r2068_23 -# 2068| mu2068_25(unknown) = ^CallSideEffect : ~m? -# 2068| v2068_26(void) = ^BufferReadSideEffect[0] : &:r2068_23, ~m? -# 2068| mu2068_27(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2068_18 -# 2068| r2068_28(TernaryNonPodObj) = Load[#temp2068:13] : &:r2068_18, ~m? -# 2068| r2068_29(glval) = VariableAddress[#temp2068:9] : -# 2068| mu2068_30(TernaryNonPodObj) = Store[#temp2068:9] : &:r2068_29, r2068_28 +# 2082| Block 5 +# 2082| r2082_18(glval) = VariableAddress[#temp2082:13] : +# 2082| mu2082_19(TernaryNonPodObj) = Uninitialized[#temp2082:13] : &:r2082_18 +# 2082| r2082_20(glval) = FunctionAddress[TernaryNonPodObj] : +# 2082| r2082_21(glval) = VariableAddress[x] : +# 2082| r2082_22(glval) = Convert : r2082_21 +# 2082| r2082_23(TernaryNonPodObj &) = CopyValue : r2082_22 +# 2082| v2082_24(void) = Call[TernaryNonPodObj] : func:r2082_20, this:r2082_18, 0:r2082_23 +# 2082| mu2082_25(unknown) = ^CallSideEffect : ~m? +# 2082| v2082_26(void) = ^BufferReadSideEffect[0] : &:r2082_23, ~m? +# 2082| mu2082_27(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2082_18 +# 2082| r2082_28(TernaryNonPodObj) = Load[#temp2082:13] : &:r2082_18, ~m? +# 2082| r2082_29(glval) = VariableAddress[#temp2082:9] : +# 2082| mu2082_30(TernaryNonPodObj) = Store[#temp2082:9] : &:r2082_29, r2082_28 #-----| Goto -> Block 4 -# 2068| Block 6 -# 2068| r2068_31(glval) = VariableAddress[#temp2068:17] : -# 2068| mu2068_32(TernaryNonPodObj) = Uninitialized[#temp2068:17] : &:r2068_31 -# 2068| r2068_33(glval) = FunctionAddress[TernaryNonPodObj] : -# 2068| v2068_34(void) = Call[TernaryNonPodObj] : func:r2068_33, this:r2068_31 -# 2068| mu2068_35(unknown) = ^CallSideEffect : ~m? -# 2068| mu2068_36(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2068_31 -# 2068| r2068_37(TernaryNonPodObj) = Load[#temp2068:17] : &:r2068_31, ~m? -# 2068| r2068_38(glval) = VariableAddress[#temp2068:9] : -# 2068| mu2068_39(TernaryNonPodObj) = Store[#temp2068:9] : &:r2068_38, r2068_37 +# 2082| Block 6 +# 2082| r2082_31(glval) = VariableAddress[#temp2082:17] : +# 2082| mu2082_32(TernaryNonPodObj) = Uninitialized[#temp2082:17] : &:r2082_31 +# 2082| r2082_33(glval) = FunctionAddress[TernaryNonPodObj] : +# 2082| v2082_34(void) = Call[TernaryNonPodObj] : func:r2082_33, this:r2082_31 +# 2082| mu2082_35(unknown) = ^CallSideEffect : ~m? +# 2082| mu2082_36(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2082_31 +# 2082| r2082_37(TernaryNonPodObj) = Load[#temp2082:17] : &:r2082_31, ~m? +# 2082| r2082_38(glval) = VariableAddress[#temp2082:9] : +# 2082| mu2082_39(TernaryNonPodObj) = Store[#temp2082:9] : &:r2082_38, r2082_37 #-----| Goto -> Block 4 -# 2069| Block 7 -# 2069| r2069_7(glval) = VariableAddress[#temp2069:9] : -# 2069| r2069_8(TernaryNonPodObj) = Load[#temp2069:9] : &:r2069_7, ~m? -# 2069| mu2069_9(TernaryNonPodObj) = Store[#temp2069:9] : &:r2069_3, r2069_8 -# 2069| r2069_10(glval) = Convert : r2069_3 -# 2069| r2069_11(TernaryNonPodObj &) = CopyValue : r2069_10 -# 2069| r2069_12(TernaryNonPodObj &) = Call[operator=] : func:r2069_2, this:r2069_1, 0:r2069_11 -# 2069| mu2069_13(unknown) = ^CallSideEffect : ~m? -# 2069| v2069_14(void) = ^IndirectReadSideEffect[-1] : &:r2069_1, ~m? -# 2069| v2069_15(void) = ^BufferReadSideEffect[0] : &:r2069_11, ~m? -# 2069| mu2069_16(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2069_1 -# 2069| r2069_17(glval) = CopyValue : r2069_12 -# 2070| r2070_1(glval) = VariableAddress[z] : -# 2070| r2070_2(glval) = FunctionAddress[operator=] : -# 2070| r2070_3(glval) = VariableAddress[a] : -# 2070| r2070_4(bool) = Load[a] : &:r2070_3, ~m? -# 2070| v2070_5(void) = ConditionalBranch : r2070_4 +# 2083| Block 7 +# 2083| r2083_7(glval) = VariableAddress[#temp2083:9] : +# 2083| r2083_8(TernaryNonPodObj) = Load[#temp2083:9] : &:r2083_7, ~m? +# 2083| mu2083_9(TernaryNonPodObj) = Store[#temp2083:9] : &:r2083_3, r2083_8 +# 2083| r2083_10(glval) = Convert : r2083_3 +# 2083| r2083_11(TernaryNonPodObj &) = CopyValue : r2083_10 +# 2083| r2083_12(TernaryNonPodObj &) = Call[operator=] : func:r2083_2, this:r2083_1, 0:r2083_11 +# 2083| mu2083_13(unknown) = ^CallSideEffect : ~m? +# 2083| v2083_14(void) = ^IndirectReadSideEffect[-1] : &:r2083_1, ~m? +# 2083| v2083_15(void) = ^BufferReadSideEffect[0] : &:r2083_11, ~m? +# 2083| mu2083_16(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2083_1 +# 2083| r2083_17(glval) = CopyValue : r2083_12 +# 2084| r2084_1(glval) = VariableAddress[z] : +# 2084| r2084_2(glval) = FunctionAddress[operator=] : +# 2084| r2084_3(glval) = VariableAddress[a] : +# 2084| r2084_4(bool) = Load[a] : &:r2084_3, ~m? +# 2084| v2084_5(void) = ConditionalBranch : r2084_4 #-----| False -> Block 12 #-----| True -> Block 11 -# 2069| Block 8 -# 2069| r2069_18(glval) = VariableAddress[#temp2069:13] : -# 2069| mu2069_19(TernaryNonPodObj) = Uninitialized[#temp2069:13] : &:r2069_18 -# 2069| r2069_20(glval) = FunctionAddress[TernaryNonPodObj] : -# 2069| v2069_21(void) = Call[TernaryNonPodObj] : func:r2069_20, this:r2069_18 -# 2069| mu2069_22(unknown) = ^CallSideEffect : ~m? -# 2069| mu2069_23(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2069_18 -# 2069| r2069_24(TernaryNonPodObj) = Load[#temp2069:13] : &:r2069_18, ~m? -# 2069| r2069_25(glval) = VariableAddress[#temp2069:9] : -# 2069| mu2069_26(TernaryNonPodObj) = Store[#temp2069:9] : &:r2069_25, r2069_24 +# 2083| Block 8 +# 2083| r2083_18(glval) = VariableAddress[#temp2083:13] : +# 2083| mu2083_19(TernaryNonPodObj) = Uninitialized[#temp2083:13] : &:r2083_18 +# 2083| r2083_20(glval) = FunctionAddress[TernaryNonPodObj] : +# 2083| v2083_21(void) = Call[TernaryNonPodObj] : func:r2083_20, this:r2083_18 +# 2083| mu2083_22(unknown) = ^CallSideEffect : ~m? +# 2083| mu2083_23(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2083_18 +# 2083| r2083_24(TernaryNonPodObj) = Load[#temp2083:13] : &:r2083_18, ~m? +# 2083| r2083_25(glval) = VariableAddress[#temp2083:9] : +# 2083| mu2083_26(TernaryNonPodObj) = Store[#temp2083:9] : &:r2083_25, r2083_24 #-----| Goto -> Block 7 -# 2069| Block 9 -# 2069| r2069_27(glval) = VariableAddress[#temp2069:34] : -# 2069| mu2069_28(TernaryNonPodObj) = Uninitialized[#temp2069:34] : &:r2069_27 -# 2069| r2069_29(glval) = FunctionAddress[TernaryNonPodObj] : -# 2069| v2069_30(void) = Call[TernaryNonPodObj] : func:r2069_29, this:r2069_27 -# 2069| mu2069_31(unknown) = ^CallSideEffect : ~m? -# 2069| mu2069_32(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2069_27 -# 2069| r2069_33(TernaryNonPodObj) = Load[#temp2069:34] : &:r2069_27, ~m? -# 2069| r2069_34(glval) = VariableAddress[#temp2069:9] : -# 2069| mu2069_35(TernaryNonPodObj) = Store[#temp2069:9] : &:r2069_34, r2069_33 +# 2083| Block 9 +# 2083| r2083_27(glval) = VariableAddress[#temp2083:34] : +# 2083| mu2083_28(TernaryNonPodObj) = Uninitialized[#temp2083:34] : &:r2083_27 +# 2083| r2083_29(glval) = FunctionAddress[TernaryNonPodObj] : +# 2083| v2083_30(void) = Call[TernaryNonPodObj] : func:r2083_29, this:r2083_27 +# 2083| mu2083_31(unknown) = ^CallSideEffect : ~m? +# 2083| mu2083_32(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2083_27 +# 2083| r2083_33(TernaryNonPodObj) = Load[#temp2083:34] : &:r2083_27, ~m? +# 2083| r2083_34(glval) = VariableAddress[#temp2083:9] : +# 2083| mu2083_35(TernaryNonPodObj) = Store[#temp2083:9] : &:r2083_34, r2083_33 #-----| Goto -> Block 7 -# 2070| Block 10 -# 2070| r2070_6(glval) = VariableAddress[#temp2070:10] : -# 2070| r2070_7(glval) = Load[#temp2070:10] : &:r2070_6, ~m? -# 2070| r2070_8(glval) = Convert : r2070_7 -# 2070| r2070_9(TernaryNonPodObj &) = CopyValue : r2070_8 -# 2070| r2070_10(TernaryNonPodObj &) = Call[operator=] : func:r2070_2, this:r2070_1, 0:r2070_9 -# 2070| mu2070_11(unknown) = ^CallSideEffect : ~m? -# 2070| v2070_12(void) = ^IndirectReadSideEffect[-1] : &:r2070_1, ~m? -# 2070| v2070_13(void) = ^BufferReadSideEffect[0] : &:r2070_9, ~m? -# 2070| mu2070_14(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2070_1 -# 2070| r2070_15(glval) = CopyValue : r2070_10 -# 2070| r2070_16(glval) = FunctionAddress[operator=] : -# 2070| r2070_17(glval) = VariableAddress[#temp2070:23] : -# 2070| mu2070_18(TernaryNonPodObj) = Uninitialized[#temp2070:23] : &:r2070_17 -# 2070| r2070_19(glval) = FunctionAddress[TernaryNonPodObj] : -# 2070| v2070_20(void) = Call[TernaryNonPodObj] : func:r2070_19, this:r2070_17 -# 2070| mu2070_21(unknown) = ^CallSideEffect : ~m? -# 2070| mu2070_22(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2070_17 -# 2070| r2070_23(glval) = Convert : r2070_17 -# 2070| r2070_24(TernaryNonPodObj &) = CopyValue : r2070_23 -# 2070| r2070_25(TernaryNonPodObj &) = Call[operator=] : func:r2070_16, this:r2070_15, 0:r2070_24 -# 2070| mu2070_26(unknown) = ^CallSideEffect : ~m? -# 2070| v2070_27(void) = ^IndirectReadSideEffect[-1] : &:r2070_15, ~m? -# 2070| v2070_28(void) = ^BufferReadSideEffect[0] : &:r2070_24, ~m? -# 2070| mu2070_29(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2070_15 -# 2070| r2070_30(glval) = CopyValue : r2070_25 -# 2071| v2071_1(void) = NoOp : -# 2066| v2066_12(void) = ReturnVoid : -# 2066| v2066_13(void) = AliasedUse : ~m? -# 2066| v2066_14(void) = ExitFunction : +# 2084| Block 10 +# 2084| r2084_6(glval) = VariableAddress[#temp2084:10] : +# 2084| r2084_7(glval) = Load[#temp2084:10] : &:r2084_6, ~m? +# 2084| r2084_8(glval) = Convert : r2084_7 +# 2084| r2084_9(TernaryNonPodObj &) = CopyValue : r2084_8 +# 2084| r2084_10(TernaryNonPodObj &) = Call[operator=] : func:r2084_2, this:r2084_1, 0:r2084_9 +# 2084| mu2084_11(unknown) = ^CallSideEffect : ~m? +# 2084| v2084_12(void) = ^IndirectReadSideEffect[-1] : &:r2084_1, ~m? +# 2084| v2084_13(void) = ^BufferReadSideEffect[0] : &:r2084_9, ~m? +# 2084| mu2084_14(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2084_1 +# 2084| r2084_15(glval) = CopyValue : r2084_10 +# 2084| r2084_16(glval) = FunctionAddress[operator=] : +# 2084| r2084_17(glval) = VariableAddress[#temp2084:23] : +# 2084| mu2084_18(TernaryNonPodObj) = Uninitialized[#temp2084:23] : &:r2084_17 +# 2084| r2084_19(glval) = FunctionAddress[TernaryNonPodObj] : +# 2084| v2084_20(void) = Call[TernaryNonPodObj] : func:r2084_19, this:r2084_17 +# 2084| mu2084_21(unknown) = ^CallSideEffect : ~m? +# 2084| mu2084_22(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2084_17 +# 2084| r2084_23(glval) = Convert : r2084_17 +# 2084| r2084_24(TernaryNonPodObj &) = CopyValue : r2084_23 +# 2084| r2084_25(TernaryNonPodObj &) = Call[operator=] : func:r2084_16, this:r2084_15, 0:r2084_24 +# 2084| mu2084_26(unknown) = ^CallSideEffect : ~m? +# 2084| v2084_27(void) = ^IndirectReadSideEffect[-1] : &:r2084_15, ~m? +# 2084| v2084_28(void) = ^BufferReadSideEffect[0] : &:r2084_24, ~m? +# 2084| mu2084_29(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2084_15 +# 2084| r2084_30(glval) = CopyValue : r2084_25 +# 2085| v2085_1(void) = NoOp : +# 2080| v2080_12(void) = ReturnVoid : +# 2080| v2080_13(void) = AliasedUse : ~m? +# 2080| v2080_14(void) = ExitFunction : -# 2070| Block 11 -# 2070| r2070_31(glval) = VariableAddress[x] : -# 2070| r2070_32(glval) = VariableAddress[#temp2070:10] : -# 2070| mu2070_33(glval) = Store[#temp2070:10] : &:r2070_32, r2070_31 +# 2084| Block 11 +# 2084| r2084_31(glval) = VariableAddress[x] : +# 2084| r2084_32(glval) = VariableAddress[#temp2084:10] : +# 2084| mu2084_33(glval) = Store[#temp2084:10] : &:r2084_32, r2084_31 #-----| Goto -> Block 10 -# 2070| Block 12 -# 2070| r2070_34(glval) = VariableAddress[y] : -# 2070| r2070_35(glval) = VariableAddress[#temp2070:10] : -# 2070| mu2070_36(glval) = Store[#temp2070:10] : &:r2070_35, r2070_34 +# 2084| Block 12 +# 2084| r2084_34(glval) = VariableAddress[y] : +# 2084| r2084_35(glval) = VariableAddress[#temp2084:10] : +# 2084| mu2084_36(glval) = Store[#temp2084:10] : &:r2084_35, r2084_34 #-----| Goto -> Block 10 -# 2075| unsigned int CommaTest(unsigned int) -# 2075| Block 0 -# 2075| v2075_1(void) = EnterFunction : -# 2075| mu2075_2(unknown) = AliasedDefinition : -# 2075| mu2075_3(unknown) = InitializeNonLocal : -# 2075| r2075_4(glval) = VariableAddress[x] : -# 2075| mu2075_5(unsigned int) = InitializeParameter[x] : &:r2075_4 -# 2076| r2076_1(glval) = VariableAddress[y] : -# 2076| mu2076_2(unsigned int) = Uninitialized[y] : &:r2076_1 -# 2077| r2077_1(glval) = VariableAddress[x] : -# 2077| r2077_2(unsigned int) = Load[x] : &:r2077_1, ~m? -# 2077| r2077_3(unsigned int) = Constant[100] : -# 2077| r2077_4(bool) = CompareLT : r2077_2, r2077_3 -# 2077| v2077_5(void) = ConditionalBranch : r2077_4 +# 2089| unsigned int CommaTest(unsigned int) +# 2089| Block 0 +# 2089| v2089_1(void) = EnterFunction : +# 2089| mu2089_2(unknown) = AliasedDefinition : +# 2089| mu2089_3(unknown) = InitializeNonLocal : +# 2089| r2089_4(glval) = VariableAddress[x] : +# 2089| mu2089_5(unsigned int) = InitializeParameter[x] : &:r2089_4 +# 2090| r2090_1(glval) = VariableAddress[y] : +# 2090| mu2090_2(unsigned int) = Uninitialized[y] : &:r2090_1 +# 2091| r2091_1(glval) = VariableAddress[x] : +# 2091| r2091_2(unsigned int) = Load[x] : &:r2091_1, ~m? +# 2091| r2091_3(unsigned int) = Constant[100] : +# 2091| r2091_4(bool) = CompareLT : r2091_2, r2091_3 +# 2091| v2091_5(void) = ConditionalBranch : r2091_4 #-----| False -> Block 3 #-----| True -> Block 2 -# 2077| Block 1 -# 2077| r2077_6(glval) = VariableAddress[#temp2077:7] : -# 2077| r2077_7(unsigned int) = Load[#temp2077:7] : &:r2077_6, ~m? -# 2077| r2077_8(glval) = VariableAddress[y] : -# 2077| mu2077_9(unsigned int) = Store[y] : &:r2077_8, r2077_7 -# 2080| r2080_1(glval) = VariableAddress[#return] : -# 2080| mu2080_2(unsigned int) = Uninitialized[#return] : &:r2080_1 -# 2075| r2075_6(glval) = VariableAddress[#return] : -# 2075| v2075_7(void) = ReturnValue : &:r2075_6, ~m? -# 2075| v2075_8(void) = AliasedUse : ~m? -# 2075| v2075_9(void) = ExitFunction : +# 2091| Block 1 +# 2091| r2091_6(glval) = VariableAddress[#temp2091:7] : +# 2091| r2091_7(unsigned int) = Load[#temp2091:7] : &:r2091_6, ~m? +# 2091| r2091_8(glval) = VariableAddress[y] : +# 2091| mu2091_9(unsigned int) = Store[y] : &:r2091_8, r2091_7 +# 2094| r2094_1(glval) = VariableAddress[#return] : +# 2094| mu2094_2(unsigned int) = Uninitialized[#return] : &:r2094_1 +# 2089| r2089_6(glval) = VariableAddress[#return] : +# 2089| v2089_7(void) = ReturnValue : &:r2089_6, ~m? +# 2089| v2089_8(void) = AliasedUse : ~m? +# 2089| v2089_9(void) = ExitFunction : -# 2078| Block 2 -# 2078| r2078_1(glval) = FunctionAddress[CommaTestHelper] : -# 2078| r2078_2(glval) = VariableAddress[x] : -# 2078| r2078_3(unsigned int) = Load[x] : &:r2078_2, ~m? -# 2078| v2078_4(void) = Call[CommaTestHelper] : func:r2078_1, 0:r2078_3 -# 2078| mu2078_5(unknown) = ^CallSideEffect : ~m? -# 2078| r2078_6(glval) = VariableAddress[x] : -# 2078| r2078_7(unsigned int) = Load[x] : &:r2078_6, ~m? -# 2078| r2078_8(unsigned int) = CopyValue : r2078_7 -# 2077| r2077_10(glval) = VariableAddress[#temp2077:7] : -# 2077| mu2077_11(unsigned int) = Store[#temp2077:7] : &:r2077_10, r2078_8 +# 2092| Block 2 +# 2092| r2092_1(glval) = FunctionAddress[CommaTestHelper] : +# 2092| r2092_2(glval) = VariableAddress[x] : +# 2092| r2092_3(unsigned int) = Load[x] : &:r2092_2, ~m? +# 2092| v2092_4(void) = Call[CommaTestHelper] : func:r2092_1, 0:r2092_3 +# 2092| mu2092_5(unknown) = ^CallSideEffect : ~m? +# 2092| r2092_6(glval) = VariableAddress[x] : +# 2092| r2092_7(unsigned int) = Load[x] : &:r2092_6, ~m? +# 2092| r2092_8(unsigned int) = CopyValue : r2092_7 +# 2091| r2091_10(glval) = VariableAddress[#temp2091:7] : +# 2091| mu2091_11(unsigned int) = Store[#temp2091:7] : &:r2091_10, r2092_8 #-----| Goto -> Block 1 -# 2079| Block 3 -# 2079| r2079_1(glval) = FunctionAddress[CommaTestHelper] : -# 2079| r2079_2(glval) = VariableAddress[x] : -# 2079| r2079_3(unsigned int) = Load[x] : &:r2079_2, ~m? -# 2079| v2079_4(void) = Call[CommaTestHelper] : func:r2079_1, 0:r2079_3 -# 2079| mu2079_5(unknown) = ^CallSideEffect : ~m? -# 2079| r2079_6(int) = Constant[10] : -# 2079| r2079_7(int) = CopyValue : r2079_6 -# 2079| r2079_8(unsigned int) = Convert : r2079_7 -# 2077| r2077_12(glval) = VariableAddress[#temp2077:7] : -# 2077| mu2077_13(unsigned int) = Store[#temp2077:7] : &:r2077_12, r2079_8 +# 2093| Block 3 +# 2093| r2093_1(glval) = FunctionAddress[CommaTestHelper] : +# 2093| r2093_2(glval) = VariableAddress[x] : +# 2093| r2093_3(unsigned int) = Load[x] : &:r2093_2, ~m? +# 2093| v2093_4(void) = Call[CommaTestHelper] : func:r2093_1, 0:r2093_3 +# 2093| mu2093_5(unknown) = ^CallSideEffect : ~m? +# 2093| r2093_6(int) = Constant[10] : +# 2093| r2093_7(int) = CopyValue : r2093_6 +# 2093| r2093_8(unsigned int) = Convert : r2093_7 +# 2091| r2091_12(glval) = VariableAddress[#temp2091:7] : +# 2091| mu2091_13(unsigned int) = Store[#temp2091:7] : &:r2091_12, r2093_8 #-----| Goto -> Block 1 -# 2082| void NewDeleteMem() -# 2082| Block 0 -# 2082| v2082_1(void) = EnterFunction : -# 2082| mu2082_2(unknown) = AliasedDefinition : -# 2082| mu2082_3(unknown) = InitializeNonLocal : -# 2083| r2083_1(glval) = VariableAddress[x] : -# 2083| r2083_2(glval) = FunctionAddress[operator new] : -# 2083| r2083_3(unsigned long) = Constant[4] : -# 2083| r2083_4(void *) = Call[operator new] : func:r2083_2, 0:r2083_3 -# 2083| mu2083_5(unknown) = ^CallSideEffect : ~m? -# 2083| mu2083_6(unknown) = ^InitializeDynamicAllocation : &:r2083_4 -# 2083| r2083_7(int *) = Convert : r2083_4 -# 2083| mu2083_8(int *) = Store[x] : &:r2083_1, r2083_7 -# 2084| r2084_1(int) = Constant[6] : -# 2084| r2084_2(glval) = VariableAddress[x] : -# 2084| r2084_3(int *) = Load[x] : &:r2084_2, ~m? -# 2084| r2084_4(glval) = CopyValue : r2084_3 -# 2084| mu2084_5(int) = Store[?] : &:r2084_4, r2084_1 -# 2085| r2085_1(glval) = FunctionAddress[operator delete] : -# 2085| r2085_2(glval) = VariableAddress[x] : -# 2085| r2085_3(int *) = Load[x] : &:r2085_2, ~m? -# 2085| v2085_4(void) = Call[operator delete] : func:r2085_1, 0:r2085_3 -# 2085| mu2085_5(unknown) = ^CallSideEffect : ~m? -# 2086| v2086_1(void) = NoOp : -# 2082| v2082_4(void) = ReturnVoid : -# 2082| v2082_5(void) = AliasedUse : ~m? -# 2082| v2082_6(void) = ExitFunction : +# 2096| void NewDeleteMem() +# 2096| Block 0 +# 2096| v2096_1(void) = EnterFunction : +# 2096| mu2096_2(unknown) = AliasedDefinition : +# 2096| mu2096_3(unknown) = InitializeNonLocal : +# 2097| r2097_1(glval) = VariableAddress[x] : +# 2097| r2097_2(glval) = FunctionAddress[operator new] : +# 2097| r2097_3(unsigned long) = Constant[4] : +# 2097| r2097_4(void *) = Call[operator new] : func:r2097_2, 0:r2097_3 +# 2097| mu2097_5(unknown) = ^CallSideEffect : ~m? +# 2097| mu2097_6(unknown) = ^InitializeDynamicAllocation : &:r2097_4 +# 2097| r2097_7(int *) = Convert : r2097_4 +# 2097| mu2097_8(int *) = Store[x] : &:r2097_1, r2097_7 +# 2098| r2098_1(int) = Constant[6] : +# 2098| r2098_2(glval) = VariableAddress[x] : +# 2098| r2098_3(int *) = Load[x] : &:r2098_2, ~m? +# 2098| r2098_4(glval) = CopyValue : r2098_3 +# 2098| mu2098_5(int) = Store[?] : &:r2098_4, r2098_1 +# 2099| r2099_1(glval) = FunctionAddress[operator delete] : +# 2099| r2099_2(glval) = VariableAddress[x] : +# 2099| r2099_3(int *) = Load[x] : &:r2099_2, ~m? +# 2099| v2099_4(void) = Call[operator delete] : func:r2099_1, 0:r2099_3 +# 2099| mu2099_5(unknown) = ^CallSideEffect : ~m? +# 2100| v2100_1(void) = NoOp : +# 2096| v2096_4(void) = ReturnVoid : +# 2096| v2096_5(void) = AliasedUse : ~m? +# 2096| v2096_6(void) = ExitFunction : -# 2088| void Base2::Base2() -# 2088| Block 0 -# 2088| v2088_1(void) = EnterFunction : -# 2088| mu2088_2(unknown) = AliasedDefinition : -# 2088| mu2088_3(unknown) = InitializeNonLocal : -# 2088| r2088_4(glval) = VariableAddress[#this] : -# 2088| mu2088_5(glval) = InitializeParameter[#this] : &:r2088_4 -# 2088| r2088_6(glval) = Load[#this] : &:r2088_4, ~m? -# 2088| mu2088_7(Base2) = InitializeIndirection[#this] : &:r2088_6 -# 2088| v2088_8(void) = NoOp : -# 2088| v2088_9(void) = ReturnIndirection[#this] : &:r2088_6, ~m? -# 2088| v2088_10(void) = ReturnVoid : -# 2088| v2088_11(void) = AliasedUse : ~m? -# 2088| v2088_12(void) = ExitFunction : +# 2102| void Base2::Base2() +# 2102| Block 0 +# 2102| v2102_1(void) = EnterFunction : +# 2102| mu2102_2(unknown) = AliasedDefinition : +# 2102| mu2102_3(unknown) = InitializeNonLocal : +# 2102| r2102_4(glval) = VariableAddress[#this] : +# 2102| mu2102_5(glval) = InitializeParameter[#this] : &:r2102_4 +# 2102| r2102_6(glval) = Load[#this] : &:r2102_4, ~m? +# 2102| mu2102_7(Base2) = InitializeIndirection[#this] : &:r2102_6 +# 2102| v2102_8(void) = NoOp : +# 2102| v2102_9(void) = ReturnIndirection[#this] : &:r2102_6, ~m? +# 2102| v2102_10(void) = ReturnVoid : +# 2102| v2102_11(void) = AliasedUse : ~m? +# 2102| v2102_12(void) = ExitFunction : -# 2090| void Base2::operator delete(void*) -# 2090| Block 0 -# 2090| v2090_1(void) = EnterFunction : -# 2090| mu2090_2(unknown) = AliasedDefinition : -# 2090| mu2090_3(unknown) = InitializeNonLocal : -# 2090| r2090_4(glval) = VariableAddress[p] : -# 2090| mu2090_5(void *) = InitializeParameter[p] : &:r2090_4 -# 2090| r2090_6(void *) = Load[p] : &:r2090_4, ~m? -# 2090| mu2090_7(unknown) = InitializeIndirection[p] : &:r2090_6 -# 2091| v2091_1(void) = NoOp : -# 2090| v2090_8(void) = ReturnIndirection[p] : &:r2090_6, ~m? -# 2090| v2090_9(void) = ReturnVoid : -# 2090| v2090_10(void) = AliasedUse : ~m? -# 2090| v2090_11(void) = ExitFunction : +# 2104| void Base2::operator delete(void*) +# 2104| Block 0 +# 2104| v2104_1(void) = EnterFunction : +# 2104| mu2104_2(unknown) = AliasedDefinition : +# 2104| mu2104_3(unknown) = InitializeNonLocal : +# 2104| r2104_4(glval) = VariableAddress[p] : +# 2104| mu2104_5(void *) = InitializeParameter[p] : &:r2104_4 +# 2104| r2104_6(void *) = Load[p] : &:r2104_4, ~m? +# 2104| mu2104_7(unknown) = InitializeIndirection[p] : &:r2104_6 +# 2105| v2105_1(void) = NoOp : +# 2104| v2104_8(void) = ReturnIndirection[p] : &:r2104_6, ~m? +# 2104| v2104_9(void) = ReturnVoid : +# 2104| v2104_10(void) = AliasedUse : ~m? +# 2104| v2104_11(void) = ExitFunction : -# 2092| void Base2::~Base2() -# 2092| Block 0 -# 2092| v2092_1(void) = EnterFunction : -# 2092| mu2092_2(unknown) = AliasedDefinition : -# 2092| mu2092_3(unknown) = InitializeNonLocal : -# 2092| r2092_4(glval) = VariableAddress[#this] : -# 2092| mu2092_5(glval) = InitializeParameter[#this] : &:r2092_4 -# 2092| r2092_6(glval) = Load[#this] : &:r2092_4, ~m? -# 2092| mu2092_7(Base2) = InitializeIndirection[#this] : &:r2092_6 -# 2092| v2092_8(void) = NoOp : -# 2092| v2092_9(void) = ReturnIndirection[#this] : &:r2092_6, ~m? -# 2092| v2092_10(void) = ReturnVoid : -# 2092| v2092_11(void) = AliasedUse : ~m? -# 2092| v2092_12(void) = ExitFunction : +# 2106| void Base2::~Base2() +# 2106| Block 0 +# 2106| v2106_1(void) = EnterFunction : +# 2106| mu2106_2(unknown) = AliasedDefinition : +# 2106| mu2106_3(unknown) = InitializeNonLocal : +# 2106| r2106_4(glval) = VariableAddress[#this] : +# 2106| mu2106_5(glval) = InitializeParameter[#this] : &:r2106_4 +# 2106| r2106_6(glval) = Load[#this] : &:r2106_4, ~m? +# 2106| mu2106_7(Base2) = InitializeIndirection[#this] : &:r2106_6 +# 2106| v2106_8(void) = NoOp : +# 2106| v2106_9(void) = ReturnIndirection[#this] : &:r2106_6, ~m? +# 2106| v2106_10(void) = ReturnVoid : +# 2106| v2106_11(void) = AliasedUse : ~m? +# 2106| v2106_12(void) = ExitFunction : -# 2095| void Derived2::Derived2() -# 2095| Block 0 -# 2095| v2095_1(void) = EnterFunction : -# 2095| mu2095_2(unknown) = AliasedDefinition : -# 2095| mu2095_3(unknown) = InitializeNonLocal : -# 2095| r2095_4(glval) = VariableAddress[#this] : -# 2095| mu2095_5(glval) = InitializeParameter[#this] : &:r2095_4 -# 2095| r2095_6(glval) = Load[#this] : &:r2095_4, ~m? -# 2095| mu2095_7(Derived2) = InitializeIndirection[#this] : &:r2095_6 -# 2095| r2095_8(glval) = ConvertToNonVirtualBase[Derived2 : Base2] : mu2095_5 -# 2095| r2095_9(glval) = FunctionAddress[Base2] : -# 2095| v2095_10(void) = Call[Base2] : func:r2095_9, this:r2095_8 -# 2095| mu2095_11(unknown) = ^CallSideEffect : ~m? -# 2095| mu2095_12(Base2) = ^IndirectMayWriteSideEffect[-1] : &:r2095_8 -# 2095| v2095_13(void) = NoOp : -# 2095| v2095_14(void) = ReturnIndirection[#this] : &:r2095_6, ~m? -# 2095| v2095_15(void) = ReturnVoid : -# 2095| v2095_16(void) = AliasedUse : ~m? -# 2095| v2095_17(void) = ExitFunction : +# 2109| void Derived2::Derived2() +# 2109| Block 0 +# 2109| v2109_1(void) = EnterFunction : +# 2109| mu2109_2(unknown) = AliasedDefinition : +# 2109| mu2109_3(unknown) = InitializeNonLocal : +# 2109| r2109_4(glval) = VariableAddress[#this] : +# 2109| mu2109_5(glval) = InitializeParameter[#this] : &:r2109_4 +# 2109| r2109_6(glval) = Load[#this] : &:r2109_4, ~m? +# 2109| mu2109_7(Derived2) = InitializeIndirection[#this] : &:r2109_6 +# 2109| r2109_8(glval) = ConvertToNonVirtualBase[Derived2 : Base2] : mu2109_5 +# 2109| r2109_9(glval) = FunctionAddress[Base2] : +# 2109| v2109_10(void) = Call[Base2] : func:r2109_9, this:r2109_8 +# 2109| mu2109_11(unknown) = ^CallSideEffect : ~m? +# 2109| mu2109_12(Base2) = ^IndirectMayWriteSideEffect[-1] : &:r2109_8 +# 2109| v2109_13(void) = NoOp : +# 2109| v2109_14(void) = ReturnIndirection[#this] : &:r2109_6, ~m? +# 2109| v2109_15(void) = ReturnVoid : +# 2109| v2109_16(void) = AliasedUse : ~m? +# 2109| v2109_17(void) = ExitFunction : -# 2098| void Derived2::~Derived2() -# 2098| Block 0 -# 2098| v2098_1(void) = EnterFunction : -# 2098| mu2098_2(unknown) = AliasedDefinition : -# 2098| mu2098_3(unknown) = InitializeNonLocal : -# 2098| r2098_4(glval) = VariableAddress[#this] : -# 2098| mu2098_5(glval) = InitializeParameter[#this] : &:r2098_4 -# 2098| r2098_6(glval) = Load[#this] : &:r2098_4, ~m? -# 2098| mu2098_7(Derived2) = InitializeIndirection[#this] : &:r2098_6 -# 2098| v2098_8(void) = NoOp : -# 2098| r2098_9(glval) = ConvertToNonVirtualBase[Derived2 : Base2] : mu2098_5 -# 2098| r2098_10(glval) = FunctionAddress[~Base2] : -# 2098| v2098_11(void) = Call[~Base2] : func:r2098_10, this:r2098_9 -# 2098| mu2098_12(unknown) = ^CallSideEffect : ~m? -# 2098| v2098_13(void) = ReturnIndirection[#this] : &:r2098_6, ~m? -# 2098| v2098_14(void) = ReturnVoid : -# 2098| v2098_15(void) = AliasedUse : ~m? -# 2098| v2098_16(void) = ExitFunction : +# 2112| void Derived2::~Derived2() +# 2112| Block 0 +# 2112| v2112_1(void) = EnterFunction : +# 2112| mu2112_2(unknown) = AliasedDefinition : +# 2112| mu2112_3(unknown) = InitializeNonLocal : +# 2112| r2112_4(glval) = VariableAddress[#this] : +# 2112| mu2112_5(glval) = InitializeParameter[#this] : &:r2112_4 +# 2112| r2112_6(glval) = Load[#this] : &:r2112_4, ~m? +# 2112| mu2112_7(Derived2) = InitializeIndirection[#this] : &:r2112_6 +# 2112| v2112_8(void) = NoOp : +# 2112| r2112_9(glval) = ConvertToNonVirtualBase[Derived2 : Base2] : mu2112_5 +# 2112| r2112_10(glval) = FunctionAddress[~Base2] : +# 2112| v2112_11(void) = Call[~Base2] : func:r2112_10, this:r2112_9 +# 2112| mu2112_12(unknown) = ^CallSideEffect : ~m? +# 2112| v2112_13(void) = ReturnIndirection[#this] : &:r2112_6, ~m? +# 2112| v2112_14(void) = ReturnVoid : +# 2112| v2112_15(void) = AliasedUse : ~m? +# 2112| v2112_16(void) = ExitFunction : -# 2100| void Derived2::operator delete(void*) -# 2100| Block 0 -# 2100| v2100_1(void) = EnterFunction : -# 2100| mu2100_2(unknown) = AliasedDefinition : -# 2100| mu2100_3(unknown) = InitializeNonLocal : -# 2100| r2100_4(glval) = VariableAddress[p] : -# 2100| mu2100_5(void *) = InitializeParameter[p] : &:r2100_4 -# 2100| r2100_6(void *) = Load[p] : &:r2100_4, ~m? -# 2100| mu2100_7(unknown) = InitializeIndirection[p] : &:r2100_6 -# 2101| v2101_1(void) = NoOp : -# 2100| v2100_8(void) = ReturnIndirection[p] : &:r2100_6, ~m? -# 2100| v2100_9(void) = ReturnVoid : -# 2100| v2100_10(void) = AliasedUse : ~m? -# 2100| v2100_11(void) = ExitFunction : +# 2114| void Derived2::operator delete(void*) +# 2114| Block 0 +# 2114| v2114_1(void) = EnterFunction : +# 2114| mu2114_2(unknown) = AliasedDefinition : +# 2114| mu2114_3(unknown) = InitializeNonLocal : +# 2114| r2114_4(glval) = VariableAddress[p] : +# 2114| mu2114_5(void *) = InitializeParameter[p] : &:r2114_4 +# 2114| r2114_6(void *) = Load[p] : &:r2114_4, ~m? +# 2114| mu2114_7(unknown) = InitializeIndirection[p] : &:r2114_6 +# 2115| v2115_1(void) = NoOp : +# 2114| v2114_8(void) = ReturnIndirection[p] : &:r2114_6, ~m? +# 2114| v2114_9(void) = ReturnVoid : +# 2114| v2114_10(void) = AliasedUse : ~m? +# 2114| v2114_11(void) = ExitFunction : -# 2105| int virtual_delete() -# 2105| Block 0 -# 2105| v2105_1(void) = EnterFunction : -# 2105| mu2105_2(unknown) = AliasedDefinition : -# 2105| mu2105_3(unknown) = InitializeNonLocal : -# 2107| r2107_1(glval) = VariableAddress[b1] : -# 2107| r2107_2(glval) = FunctionAddress[operator new] : -# 2107| r2107_3(unsigned long) = Constant[8] : -# 2107| r2107_4(void *) = Call[operator new] : func:r2107_2, 0:r2107_3 -# 2107| mu2107_5(unknown) = ^CallSideEffect : ~m? -# 2107| mu2107_6(unknown) = ^InitializeDynamicAllocation : &:r2107_4 -# 2107| r2107_7(Base2 *) = Convert : r2107_4 -# 2107| r2107_8(glval) = FunctionAddress[Base2] : -# 2107| v2107_9(void) = Call[Base2] : func:r2107_8, this:r2107_7 -# 2107| mu2107_10(unknown) = ^CallSideEffect : ~m? -# 2107| mu2107_11(Base2) = ^IndirectMayWriteSideEffect[-1] : &:r2107_7 -# 2107| mu2107_12(Base2 *) = Store[b1] : &:r2107_1, r2107_7 -# 2108| r2108_1(glval) = VirtualDeleteFunctionAddress : -# 2108| r2108_2(glval) = VariableAddress[b1] : -# 2108| r2108_3(Base2 *) = Load[b1] : &:r2108_2, ~m? -# 2108| v2108_4(void) = Call[?] : func:r2108_1, 0:r2108_3 -# 2108| mu2108_5(unknown) = ^CallSideEffect : ~m? -# 2110| r2110_1(glval) = VariableAddress[b2] : -# 2110| r2110_2(glval) = FunctionAddress[operator new] : -# 2110| r2110_3(unsigned long) = Constant[16] : -# 2110| r2110_4(void *) = Call[operator new] : func:r2110_2, 0:r2110_3 -# 2110| mu2110_5(unknown) = ^CallSideEffect : ~m? -# 2110| mu2110_6(unknown) = ^InitializeDynamicAllocation : &:r2110_4 -# 2110| r2110_7(Derived2 *) = Convert : r2110_4 -# 2110| r2110_8(glval) = FunctionAddress[Derived2] : -# 2110| v2110_9(void) = Call[Derived2] : func:r2110_8, this:r2110_7 -# 2110| mu2110_10(unknown) = ^CallSideEffect : ~m? -# 2110| mu2110_11(Derived2) = ^IndirectMayWriteSideEffect[-1] : &:r2110_7 -# 2110| r2110_12(Base2 *) = ConvertToNonVirtualBase[Derived2 : Base2] : r2110_7 -# 2110| mu2110_13(Base2 *) = Store[b2] : &:r2110_1, r2110_12 -# 2111| r2111_1(glval) = VirtualDeleteFunctionAddress : -# 2111| r2111_2(glval) = VariableAddress[b2] : -# 2111| r2111_3(Base2 *) = Load[b2] : &:r2111_2, ~m? -# 2111| v2111_4(void) = Call[?] : func:r2111_1, 0:r2111_3 -# 2111| mu2111_5(unknown) = ^CallSideEffect : ~m? -# 2113| r2113_1(glval) = VariableAddress[d] : -# 2113| r2113_2(glval) = FunctionAddress[operator new] : -# 2113| r2113_3(unsigned long) = Constant[16] : -# 2113| r2113_4(void *) = Call[operator new] : func:r2113_2, 0:r2113_3 -# 2113| mu2113_5(unknown) = ^CallSideEffect : ~m? -# 2113| mu2113_6(unknown) = ^InitializeDynamicAllocation : &:r2113_4 -# 2113| r2113_7(Derived2 *) = Convert : r2113_4 -# 2113| r2113_8(glval) = FunctionAddress[Derived2] : -# 2113| v2113_9(void) = Call[Derived2] : func:r2113_8, this:r2113_7 -# 2113| mu2113_10(unknown) = ^CallSideEffect : ~m? -# 2113| mu2113_11(Derived2) = ^IndirectMayWriteSideEffect[-1] : &:r2113_7 -# 2113| mu2113_12(Derived2 *) = Store[d] : &:r2113_1, r2113_7 -# 2114| r2114_1(glval) = VirtualDeleteFunctionAddress : -# 2114| r2114_2(glval) = VariableAddress[d] : -# 2114| r2114_3(Derived2 *) = Load[d] : &:r2114_2, ~m? -# 2114| v2114_4(void) = Call[?] : func:r2114_1, 0:r2114_3 -# 2114| mu2114_5(unknown) = ^CallSideEffect : ~m? -# 2115| r2115_1(glval) = VariableAddress[#return] : -# 2115| mu2115_2(int) = Uninitialized[#return] : &:r2115_1 -# 2105| r2105_4(glval) = VariableAddress[#return] : -# 2105| v2105_5(void) = ReturnValue : &:r2105_4, ~m? -# 2105| v2105_6(void) = AliasedUse : ~m? -# 2105| v2105_7(void) = ExitFunction : - -# 2119| void test_constant_folding() +# 2119| int virtual_delete() # 2119| Block 0 -# 2119| v2119_1(void) = EnterFunction : -# 2119| mu2119_2(unknown) = AliasedDefinition : -# 2119| mu2119_3(unknown) = InitializeNonLocal : -# 2120| r2120_1(glval) = VariableAddress[x] : -# 2120| r2120_2(int) = Constant[116] : -# 2120| mu2120_3(int) = Store[x] : &:r2120_1, r2120_2 -# 2121| r2121_1(glval) = FunctionAddress[test_constant_folding_use] : -# 2121| r2121_2(int) = Constant[116] : -# 2121| v2121_3(void) = Call[test_constant_folding_use] : func:r2121_1, 0:r2121_2 -# 2121| mu2121_4(unknown) = ^CallSideEffect : ~m? -# 2122| v2122_1(void) = NoOp : -# 2119| v2119_4(void) = ReturnVoid : -# 2119| v2119_5(void) = AliasedUse : ~m? -# 2119| v2119_6(void) = ExitFunction : +# 2119| v2119_1(void) = EnterFunction : +# 2119| mu2119_2(unknown) = AliasedDefinition : +# 2119| mu2119_3(unknown) = InitializeNonLocal : +# 2121| r2121_1(glval) = VariableAddress[b1] : +# 2121| r2121_2(glval) = FunctionAddress[operator new] : +# 2121| r2121_3(unsigned long) = Constant[8] : +# 2121| r2121_4(void *) = Call[operator new] : func:r2121_2, 0:r2121_3 +# 2121| mu2121_5(unknown) = ^CallSideEffect : ~m? +# 2121| mu2121_6(unknown) = ^InitializeDynamicAllocation : &:r2121_4 +# 2121| r2121_7(Base2 *) = Convert : r2121_4 +# 2121| r2121_8(glval) = FunctionAddress[Base2] : +# 2121| v2121_9(void) = Call[Base2] : func:r2121_8, this:r2121_7 +# 2121| mu2121_10(unknown) = ^CallSideEffect : ~m? +# 2121| mu2121_11(Base2) = ^IndirectMayWriteSideEffect[-1] : &:r2121_7 +# 2121| mu2121_12(Base2 *) = Store[b1] : &:r2121_1, r2121_7 +# 2122| r2122_1(glval) = VariableAddress[b1] : +# 2122| r2122_2(Base2 *) = Load[b1] : &:r2122_1, ~m? +# 2122| r2122_3(glval) = FunctionAddress[~Base2] : +# 2122| v2122_4(void) = Call[~Base2] : func:r2122_3 +# 2122| mu2122_5(unknown) = ^CallSideEffect : ~m? +# 2122| v2122_6(void) = ^IndirectReadSideEffect[-1] : &:r2122_2, ~m? +# 2122| mu2122_7(Base2) = ^IndirectMayWriteSideEffect[-1] : &:r2122_2 +# 2122| r2122_8(glval) = VirtualDeleteFunctionAddress : +# 2122| r2122_9(Base2 *) = CopyValue : r2122_1 +# 2122| v2122_10(void) = Call[?] : func:r2122_8, 0:r2122_9 +# 2122| mu2122_11(unknown) = ^CallSideEffect : ~m? +# 2124| r2124_1(glval) = VariableAddress[b2] : +# 2124| r2124_2(glval) = FunctionAddress[operator new] : +# 2124| r2124_3(unsigned long) = Constant[16] : +# 2124| r2124_4(void *) = Call[operator new] : func:r2124_2, 0:r2124_3 +# 2124| mu2124_5(unknown) = ^CallSideEffect : ~m? +# 2124| mu2124_6(unknown) = ^InitializeDynamicAllocation : &:r2124_4 +# 2124| r2124_7(Derived2 *) = Convert : r2124_4 +# 2124| r2124_8(glval) = FunctionAddress[Derived2] : +# 2124| v2124_9(void) = Call[Derived2] : func:r2124_8, this:r2124_7 +# 2124| mu2124_10(unknown) = ^CallSideEffect : ~m? +# 2124| mu2124_11(Derived2) = ^IndirectMayWriteSideEffect[-1] : &:r2124_7 +# 2124| r2124_12(Base2 *) = ConvertToNonVirtualBase[Derived2 : Base2] : r2124_7 +# 2124| mu2124_13(Base2 *) = Store[b2] : &:r2124_1, r2124_12 +# 2125| r2125_1(glval) = VariableAddress[b2] : +# 2125| r2125_2(Base2 *) = Load[b2] : &:r2125_1, ~m? +# 2125| r2125_3(glval) = FunctionAddress[~Base2] : +# 2125| v2125_4(void) = Call[~Base2] : func:r2125_3 +# 2125| mu2125_5(unknown) = ^CallSideEffect : ~m? +# 2125| v2125_6(void) = ^IndirectReadSideEffect[-1] : &:r2125_2, ~m? +# 2125| mu2125_7(Base2) = ^IndirectMayWriteSideEffect[-1] : &:r2125_2 +# 2125| r2125_8(glval) = VirtualDeleteFunctionAddress : +# 2125| r2125_9(Base2 *) = CopyValue : r2125_1 +# 2125| v2125_10(void) = Call[?] : func:r2125_8, 0:r2125_9 +# 2125| mu2125_11(unknown) = ^CallSideEffect : ~m? +# 2127| r2127_1(glval) = VariableAddress[d] : +# 2127| r2127_2(glval) = FunctionAddress[operator new] : +# 2127| r2127_3(unsigned long) = Constant[16] : +# 2127| r2127_4(void *) = Call[operator new] : func:r2127_2, 0:r2127_3 +# 2127| mu2127_5(unknown) = ^CallSideEffect : ~m? +# 2127| mu2127_6(unknown) = ^InitializeDynamicAllocation : &:r2127_4 +# 2127| r2127_7(Derived2 *) = Convert : r2127_4 +# 2127| r2127_8(glval) = FunctionAddress[Derived2] : +# 2127| v2127_9(void) = Call[Derived2] : func:r2127_8, this:r2127_7 +# 2127| mu2127_10(unknown) = ^CallSideEffect : ~m? +# 2127| mu2127_11(Derived2) = ^IndirectMayWriteSideEffect[-1] : &:r2127_7 +# 2127| mu2127_12(Derived2 *) = Store[d] : &:r2127_1, r2127_7 +# 2128| r2128_1(glval) = VariableAddress[d] : +# 2128| r2128_2(Derived2 *) = Load[d] : &:r2128_1, ~m? +# 2128| r2128_3(glval) = FunctionAddress[~Derived2] : +# 2128| v2128_4(void) = Call[~Derived2] : func:r2128_3 +# 2128| mu2128_5(unknown) = ^CallSideEffect : ~m? +# 2128| v2128_6(void) = ^IndirectReadSideEffect[-1] : &:r2128_2, ~m? +# 2128| mu2128_7(Derived2) = ^IndirectMayWriteSideEffect[-1] : &:r2128_2 +# 2128| r2128_8(glval) = VirtualDeleteFunctionAddress : +# 2128| r2128_9(Derived2 *) = CopyValue : r2128_1 +# 2128| v2128_10(void) = Call[?] : func:r2128_8, 0:r2128_9 +# 2128| mu2128_11(unknown) = ^CallSideEffect : ~m? +# 2129| r2129_1(glval) = VariableAddress[#return] : +# 2129| mu2129_2(int) = Uninitialized[#return] : &:r2129_1 +# 2119| r2119_4(glval) = VariableAddress[#return] : +# 2119| v2119_5(void) = ReturnValue : &:r2119_4, ~m? +# 2119| v2119_6(void) = AliasedUse : ~m? +# 2119| v2119_7(void) = ExitFunction : -# 2126| int NonExit() -# 2126| Block 0 -# 2126| v2126_1(void) = EnterFunction : -# 2126| mu2126_2(unknown) = AliasedDefinition : -# 2126| mu2126_3(unknown) = InitializeNonLocal : -# 2127| r2127_1(glval) = VariableAddress[x] : -# 2127| r2127_2(glval) = FunctionAddress[Add] : -# 2127| r2127_3(int) = Constant[3] : -# 2127| r2127_4(int) = Constant[4] : -# 2127| r2127_5(int) = Call[Add] : func:r2127_2, 0:r2127_3, 1:r2127_4 -# 2127| mu2127_6(unknown) = ^CallSideEffect : ~m? -# 2127| mu2127_7(int) = Store[x] : &:r2127_1, r2127_5 -# 2128| r2128_1(glval) = VariableAddress[x] : -# 2128| r2128_2(int) = Load[x] : &:r2128_1, ~m? -# 2128| r2128_3(int) = Constant[7] : -# 2128| r2128_4(bool) = CompareEQ : r2128_2, r2128_3 -# 2128| v2128_5(void) = ConditionalBranch : r2128_4 -#-----| False -> Block 2 -#-----| True -> Block 1 +# 2133| void test_constant_folding() +# 2133| Block 0 +# 2133| v2133_1(void) = EnterFunction : +# 2133| mu2133_2(unknown) = AliasedDefinition : +# 2133| mu2133_3(unknown) = InitializeNonLocal : +# 2134| r2134_1(glval) = VariableAddress[x] : +# 2134| r2134_2(int) = Constant[116] : +# 2134| mu2134_3(int) = Store[x] : &:r2134_1, r2134_2 +# 2135| r2135_1(glval) = FunctionAddress[test_constant_folding_use] : +# 2135| r2135_2(int) = Constant[116] : +# 2135| v2135_3(void) = Call[test_constant_folding_use] : func:r2135_1, 0:r2135_2 +# 2135| mu2135_4(unknown) = ^CallSideEffect : ~m? +# 2136| v2136_1(void) = NoOp : +# 2133| v2133_4(void) = ReturnVoid : +# 2133| v2133_5(void) = AliasedUse : ~m? +# 2133| v2133_6(void) = ExitFunction : -# 2129| Block 1 -# 2129| r2129_1(glval) = FunctionAddress[exit] : -# 2129| r2129_2(int) = Constant[3] : -# 2129| v2129_3(void) = Call[exit] : func:r2129_1, 0:r2129_2 -# 2129| mu2129_4(unknown) = ^CallSideEffect : ~m? -# 2126| v2126_4(void) = Unreached : - -# 2130| Block 2 -# 2130| r2130_1(glval) = FunctionAddress[VoidFunc] : -# 2130| v2130_2(void) = Call[VoidFunc] : func:r2130_1 -# 2130| mu2130_3(unknown) = ^CallSideEffect : ~m? -# 2131| r2131_1(glval) = VariableAddress[#return] : -# 2131| r2131_2(glval) = VariableAddress[x] : -# 2131| r2131_3(int) = Load[x] : &:r2131_2, ~m? -# 2131| mu2131_4(int) = Store[#return] : &:r2131_1, r2131_3 -# 2126| r2126_5(glval) = VariableAddress[#return] : -# 2126| v2126_6(void) = ReturnValue : &:r2126_5, ~m? -# 2126| v2126_7(void) = AliasedUse : ~m? -# 2126| v2126_8(void) = ExitFunction : - -# 2134| void CallsNonExit() -# 2134| Block 0 -# 2134| v2134_1(void) = EnterFunction : -# 2134| mu2134_2(unknown) = AliasedDefinition : -# 2134| mu2134_3(unknown) = InitializeNonLocal : -# 2135| r2135_1(glval) = FunctionAddress[VoidFunc] : -# 2135| v2135_2(void) = Call[VoidFunc] : func:r2135_1 -# 2135| mu2135_3(unknown) = ^CallSideEffect : ~m? -# 2136| r2136_1(glval) = FunctionAddress[exit] : -# 2136| r2136_2(int) = Constant[3] : -# 2136| v2136_3(void) = Call[exit] : func:r2136_1, 0:r2136_2 -# 2136| mu2136_4(unknown) = ^CallSideEffect : ~m? -# 2134| v2134_4(void) = Unreached : - -# 2137| Block 1 -# 2137| v2137_1(void) = NoOp : -# 2134| v2134_5(void) = ReturnVoid : -# 2134| v2134_6(void) = AliasedUse : ~m? -# 2134| v2134_7(void) = ExitFunction : - -# 2139| int TransNonExit() -# 2139| Block 0 -# 2139| v2139_1(void) = EnterFunction : -# 2139| mu2139_2(unknown) = AliasedDefinition : -# 2139| mu2139_3(unknown) = InitializeNonLocal : -# 2140| r2140_1(glval) = VariableAddress[x] : -# 2140| r2140_2(glval) = FunctionAddress[Add] : -# 2140| r2140_3(int) = Constant[3] : -# 2140| r2140_4(int) = Constant[4] : -# 2140| r2140_5(int) = Call[Add] : func:r2140_2, 0:r2140_3, 1:r2140_4 -# 2140| mu2140_6(unknown) = ^CallSideEffect : ~m? -# 2140| mu2140_7(int) = Store[x] : &:r2140_1, r2140_5 +# 2140| int NonExit() +# 2140| Block 0 +# 2140| v2140_1(void) = EnterFunction : +# 2140| mu2140_2(unknown) = AliasedDefinition : +# 2140| mu2140_3(unknown) = InitializeNonLocal : # 2141| r2141_1(glval) = VariableAddress[x] : -# 2141| r2141_2(int) = Load[x] : &:r2141_1, ~m? -# 2141| r2141_3(int) = Constant[7] : -# 2141| r2141_4(bool) = CompareEQ : r2141_2, r2141_3 -# 2141| v2141_5(void) = ConditionalBranch : r2141_4 +# 2141| r2141_2(glval) = FunctionAddress[Add] : +# 2141| r2141_3(int) = Constant[3] : +# 2141| r2141_4(int) = Constant[4] : +# 2141| r2141_5(int) = Call[Add] : func:r2141_2, 0:r2141_3, 1:r2141_4 +# 2141| mu2141_6(unknown) = ^CallSideEffect : ~m? +# 2141| mu2141_7(int) = Store[x] : &:r2141_1, r2141_5 +# 2142| r2142_1(glval) = VariableAddress[x] : +# 2142| r2142_2(int) = Load[x] : &:r2142_1, ~m? +# 2142| r2142_3(int) = Constant[7] : +# 2142| r2142_4(bool) = CompareEQ : r2142_2, r2142_3 +# 2142| v2142_5(void) = ConditionalBranch : r2142_4 #-----| False -> Block 2 #-----| True -> Block 1 -# 2142| Block 1 -# 2142| r2142_1(glval) = FunctionAddress[CallsNonExit] : -# 2142| v2142_2(void) = Call[CallsNonExit] : func:r2142_1 -# 2142| mu2142_3(unknown) = ^CallSideEffect : ~m? -#-----| Goto -> Block 2 +# 2143| Block 1 +# 2143| r2143_1(glval) = FunctionAddress[exit] : +# 2143| r2143_2(int) = Constant[3] : +# 2143| v2143_3(void) = Call[exit] : func:r2143_1, 0:r2143_2 +# 2143| mu2143_4(unknown) = ^CallSideEffect : ~m? +# 2140| v2140_4(void) = Unreached : -# 2143| Block 2 -# 2143| r2143_1(glval) = FunctionAddress[VoidFunc] : -# 2143| v2143_2(void) = Call[VoidFunc] : func:r2143_1 -# 2143| mu2143_3(unknown) = ^CallSideEffect : ~m? -# 2144| r2144_1(glval) = VariableAddress[#return] : -# 2144| r2144_2(glval) = VariableAddress[x] : -# 2144| r2144_3(int) = Load[x] : &:r2144_2, ~m? -# 2144| mu2144_4(int) = Store[#return] : &:r2144_1, r2144_3 -# 2139| r2139_4(glval) = VariableAddress[#return] : -# 2139| v2139_5(void) = ReturnValue : &:r2139_4, ~m? -# 2139| v2139_6(void) = AliasedUse : ~m? -# 2139| v2139_7(void) = ExitFunction : +# 2144| Block 2 +# 2144| r2144_1(glval) = FunctionAddress[VoidFunc] : +# 2144| v2144_2(void) = Call[VoidFunc] : func:r2144_1 +# 2144| mu2144_3(unknown) = ^CallSideEffect : ~m? +# 2145| r2145_1(glval) = VariableAddress[#return] : +# 2145| r2145_2(glval) = VariableAddress[x] : +# 2145| r2145_3(int) = Load[x] : &:r2145_2, ~m? +# 2145| mu2145_4(int) = Store[#return] : &:r2145_1, r2145_3 +# 2140| r2140_5(glval) = VariableAddress[#return] : +# 2140| v2140_6(void) = ReturnValue : &:r2140_5, ~m? +# 2140| v2140_7(void) = AliasedUse : ~m? +# 2140| v2140_8(void) = ExitFunction : -# 2147| void newArrayCorrectType(size_t) -# 2147| Block 0 -# 2147| v2147_1(void) = EnterFunction : -# 2147| mu2147_2(unknown) = AliasedDefinition : -# 2147| mu2147_3(unknown) = InitializeNonLocal : -# 2147| r2147_4(glval) = VariableAddress[n] : -# 2147| mu2147_5(unsigned long) = InitializeParameter[n] : &:r2147_4 -# 2148| r2148_1(glval) = FunctionAddress[operator new[]] : -# 2148| r2148_2(glval) = VariableAddress[n] : -# 2148| r2148_3(unsigned long) = Load[n] : &:r2148_2, ~m? -# 2148| r2148_4(unsigned long) = Constant[4] : -# 2148| r2148_5(unsigned long) = Mul : r2148_3, r2148_4 -# 2148| r2148_6(void *) = Call[operator new[]] : func:r2148_1, 0:r2148_5 -# 2148| mu2148_7(unknown) = ^CallSideEffect : ~m? -# 2148| mu2148_8(unknown) = ^InitializeDynamicAllocation : &:r2148_6 -# 2148| r2148_9(int *) = Convert : r2148_6 -# 2149| r2149_1(glval) = FunctionAddress[operator new[]] : -# 2149| r2149_2(glval) = VariableAddress[n] : -# 2149| r2149_3(unsigned long) = Load[n] : &:r2149_2, ~m? -# 2149| r2149_4(unsigned long) = Constant[4] : -# 2149| r2149_5(unsigned long) = Mul : r2149_3, r2149_4 -# 2149| r2149_6(float) = Constant[1.0] : -# 2149| r2149_7(void *) = Call[operator new[]] : func:r2149_1, 0:r2149_5, 1:r2149_6 -# 2149| mu2149_8(unknown) = ^CallSideEffect : ~m? -# 2149| mu2149_9(unknown) = ^InitializeDynamicAllocation : &:r2149_7 -# 2149| r2149_10(int *) = Convert : r2149_7 -# 2150| r2150_1(glval) = FunctionAddress[operator new[]] : -# 2150| r2150_2(glval) = VariableAddress[n] : -# 2150| r2150_3(unsigned long) = Load[n] : &:r2150_2, ~m? -# 2150| r2150_4(unsigned long) = Constant[8] : -# 2150| r2150_5(unsigned long) = Mul : r2150_3, r2150_4 -# 2150| r2150_6(void *) = Call[operator new[]] : func:r2150_1, 0:r2150_5 -# 2150| mu2150_7(unknown) = ^CallSideEffect : ~m? -# 2150| mu2150_8(unknown) = ^InitializeDynamicAllocation : &:r2150_6 -# 2150| r2150_9(String *) = Convert : r2150_6 -# 2151| r2151_1(glval) = FunctionAddress[operator new[]] : -# 2151| r2151_2(glval) = VariableAddress[n] : -# 2151| r2151_3(unsigned long) = Load[n] : &:r2151_2, ~m? -# 2151| r2151_4(unsigned long) = Constant[256] : -# 2151| r2151_5(unsigned long) = Mul : r2151_3, r2151_4 -# 2151| r2151_6(align_val_t) = Constant[128] : -# 2151| r2151_7(void *) = Call[operator new[]] : func:r2151_1, 0:r2151_5, 1:r2151_6 -# 2151| mu2151_8(unknown) = ^CallSideEffect : ~m? -# 2151| mu2151_9(unknown) = ^InitializeDynamicAllocation : &:r2151_7 -# 2151| r2151_10(Overaligned *) = Convert : r2151_7 -# 2152| r2152_1(glval) = FunctionAddress[operator new[]] : -# 2152| r2152_2(glval) = VariableAddress[n] : -# 2152| r2152_3(unsigned long) = Load[n] : &:r2152_2, ~m? -# 2152| r2152_4(unsigned long) = Constant[1] : -# 2152| r2152_5(unsigned long) = Mul : r2152_3, r2152_4 -# 2152| r2152_6(void *) = Call[operator new[]] : func:r2152_1, 0:r2152_5 -# 2152| mu2152_7(unknown) = ^CallSideEffect : ~m? -# 2152| mu2152_8(unknown) = ^InitializeDynamicAllocation : &:r2152_6 -# 2152| r2152_9(DefaultCtorWithDefaultParam *) = Convert : r2152_6 -# 2153| r2153_1(glval) = FunctionAddress[operator new[]] : -# 2153| r2153_2(glval) = VariableAddress[n] : -# 2153| r2153_3(unsigned long) = Load[n] : &:r2153_2, ~m? -# 2153| r2153_4(unsigned long) = Constant[4] : -# 2153| r2153_5(unsigned long) = Mul : r2153_3, r2153_4 -# 2153| r2153_6(void *) = Call[operator new[]] : func:r2153_1, 0:r2153_5 -# 2153| mu2153_7(unknown) = ^CallSideEffect : ~m? -# 2153| mu2153_8(unknown) = ^InitializeDynamicAllocation : &:r2153_6 -# 2153| r2153_9(int *) = Convert : r2153_6 -# 2154| v2154_1(void) = NoOp : -# 2147| v2147_6(void) = ReturnVoid : -# 2147| v2147_7(void) = AliasedUse : ~m? -# 2147| v2147_8(void) = ExitFunction : +# 2148| void CallsNonExit() +# 2148| Block 0 +# 2148| v2148_1(void) = EnterFunction : +# 2148| mu2148_2(unknown) = AliasedDefinition : +# 2148| mu2148_3(unknown) = InitializeNonLocal : +# 2149| r2149_1(glval) = FunctionAddress[VoidFunc] : +# 2149| v2149_2(void) = Call[VoidFunc] : func:r2149_1 +# 2149| mu2149_3(unknown) = ^CallSideEffect : ~m? +# 2150| r2150_1(glval) = FunctionAddress[exit] : +# 2150| r2150_2(int) = Constant[3] : +# 2150| v2150_3(void) = Call[exit] : func:r2150_1, 0:r2150_2 +# 2150| mu2150_4(unknown) = ^CallSideEffect : ~m? +# 2148| v2148_4(void) = Unreached : -# 2158| char* test_strtod(char*) -# 2158| Block 0 -# 2158| v2158_1(void) = EnterFunction : -# 2158| mu2158_2(unknown) = AliasedDefinition : -# 2158| mu2158_3(unknown) = InitializeNonLocal : -# 2158| r2158_4(glval) = VariableAddress[s] : -# 2158| mu2158_5(char *) = InitializeParameter[s] : &:r2158_4 -# 2158| r2158_6(char *) = Load[s] : &:r2158_4, ~m? -# 2158| mu2158_7(unknown) = InitializeIndirection[s] : &:r2158_6 -# 2159| r2159_1(glval) = VariableAddress[end] : -# 2159| mu2159_2(char *) = Uninitialized[end] : &:r2159_1 -# 2160| r2160_1(glval) = VariableAddress[d] : -# 2160| r2160_2(glval) = FunctionAddress[strtod] : -# 2160| r2160_3(glval) = VariableAddress[s] : -# 2160| r2160_4(char *) = Load[s] : &:r2160_3, ~m? -# 2160| r2160_5(char *) = Convert : r2160_4 -# 2160| r2160_6(glval) = VariableAddress[end] : -# 2160| r2160_7(char **) = CopyValue : r2160_6 -# 2160| r2160_8(double) = Call[strtod] : func:r2160_2, 0:r2160_5, 1:r2160_7 -# 2160| v2160_9(void) = ^BufferReadSideEffect[0] : &:r2160_5, ~m? -# 2160| mu2160_10(char *) = ^IndirectMayWriteSideEffect[1] : &:r2160_7 -# 2160| mu2160_11(double) = Store[d] : &:r2160_1, r2160_8 -# 2161| r2161_1(glval) = VariableAddress[#return] : -# 2161| r2161_2(glval) = VariableAddress[end] : -# 2161| r2161_3(char *) = Load[end] : &:r2161_2, ~m? -# 2161| mu2161_4(char *) = Store[#return] : &:r2161_1, r2161_3 -# 2158| v2158_8(void) = ReturnIndirection[s] : &:r2158_6, ~m? -# 2158| r2158_9(glval) = VariableAddress[#return] : -# 2158| v2158_10(void) = ReturnValue : &:r2158_9, ~m? -# 2158| v2158_11(void) = AliasedUse : ~m? -# 2158| v2158_12(void) = ExitFunction : +# 2151| Block 1 +# 2151| v2151_1(void) = NoOp : +# 2148| v2148_5(void) = ReturnVoid : +# 2148| v2148_6(void) = AliasedUse : ~m? +# 2148| v2148_7(void) = ExitFunction : -# 2168| void call_as_child_of_ConditionDeclExpr() -# 2168| Block 0 -# 2168| v2168_1(void) = EnterFunction : -# 2168| mu2168_2(unknown) = AliasedDefinition : -# 2168| mu2168_3(unknown) = InitializeNonLocal : -# 2169| r2169_1(glval) = VariableAddress[b] : -# 2169| r2169_2(HasOperatorBool) = Constant[0] : -# 2169| mu2169_3(HasOperatorBool) = Store[b] : &:r2169_1, r2169_2 -# 2169| r2169_4(glval) = VariableAddress[b] : -# 2169| r2169_5(glval) = FunctionAddress[operator bool] : -# 2169| r2169_6(bool) = Call[operator bool] : func:r2169_5, this:r2169_4 -# 2169| mu2169_7(unknown) = ^CallSideEffect : ~m? -# 2169| v2169_8(void) = ^IndirectReadSideEffect[-1] : &:r2169_4, ~m? -# 2169| mu2169_9(HasOperatorBool) = ^IndirectMayWriteSideEffect[-1] : &:r2169_4 -# 2169| r2169_10(bool) = CopyValue : r2169_6 -# 2169| v2169_11(void) = ConditionalBranch : r2169_10 +# 2153| int TransNonExit() +# 2153| Block 0 +# 2153| v2153_1(void) = EnterFunction : +# 2153| mu2153_2(unknown) = AliasedDefinition : +# 2153| mu2153_3(unknown) = InitializeNonLocal : +# 2154| r2154_1(glval) = VariableAddress[x] : +# 2154| r2154_2(glval) = FunctionAddress[Add] : +# 2154| r2154_3(int) = Constant[3] : +# 2154| r2154_4(int) = Constant[4] : +# 2154| r2154_5(int) = Call[Add] : func:r2154_2, 0:r2154_3, 1:r2154_4 +# 2154| mu2154_6(unknown) = ^CallSideEffect : ~m? +# 2154| mu2154_7(int) = Store[x] : &:r2154_1, r2154_5 +# 2155| r2155_1(glval) = VariableAddress[x] : +# 2155| r2155_2(int) = Load[x] : &:r2155_1, ~m? +# 2155| r2155_3(int) = Constant[7] : +# 2155| r2155_4(bool) = CompareEQ : r2155_2, r2155_3 +# 2155| v2155_5(void) = ConditionalBranch : r2155_4 #-----| False -> Block 2 #-----| True -> Block 1 -# 2169| Block 1 -# 2169| v2169_12(void) = NoOp : +# 2156| Block 1 +# 2156| r2156_1(glval) = FunctionAddress[CallsNonExit] : +# 2156| v2156_2(void) = Call[CallsNonExit] : func:r2156_1 +# 2156| mu2156_3(unknown) = ^CallSideEffect : ~m? #-----| Goto -> Block 2 -# 2170| Block 2 -# 2170| v2170_1(void) = NoOp : -# 2168| v2168_4(void) = ReturnVoid : -# 2168| v2168_5(void) = AliasedUse : ~m? -# 2168| v2168_6(void) = ExitFunction : +# 2157| Block 2 +# 2157| r2157_1(glval) = FunctionAddress[VoidFunc] : +# 2157| v2157_2(void) = Call[VoidFunc] : func:r2157_1 +# 2157| mu2157_3(unknown) = ^CallSideEffect : ~m? +# 2158| r2158_1(glval) = VariableAddress[#return] : +# 2158| r2158_2(glval) = VariableAddress[x] : +# 2158| r2158_3(int) = Load[x] : &:r2158_2, ~m? +# 2158| mu2158_4(int) = Store[#return] : &:r2158_1, r2158_3 +# 2153| r2153_4(glval) = VariableAddress[#return] : +# 2153| v2153_5(void) = ReturnValue : &:r2153_4, ~m? +# 2153| v2153_6(void) = AliasedUse : ~m? +# 2153| v2153_7(void) = ExitFunction : -# 2172| void ClassWithDestructor::ClassWithDestructor(ClassWithDestructor const&) +# 2161| void newArrayCorrectType(size_t) +# 2161| Block 0 +# 2161| v2161_1(void) = EnterFunction : +# 2161| mu2161_2(unknown) = AliasedDefinition : +# 2161| mu2161_3(unknown) = InitializeNonLocal : +# 2161| r2161_4(glval) = VariableAddress[n] : +# 2161| mu2161_5(unsigned long) = InitializeParameter[n] : &:r2161_4 +# 2162| r2162_1(glval) = FunctionAddress[operator new[]] : +# 2162| r2162_2(glval) = VariableAddress[n] : +# 2162| r2162_3(unsigned long) = Load[n] : &:r2162_2, ~m? +# 2162| r2162_4(unsigned long) = Constant[4] : +# 2162| r2162_5(unsigned long) = Mul : r2162_3, r2162_4 +# 2162| r2162_6(void *) = Call[operator new[]] : func:r2162_1, 0:r2162_5 +# 2162| mu2162_7(unknown) = ^CallSideEffect : ~m? +# 2162| mu2162_8(unknown) = ^InitializeDynamicAllocation : &:r2162_6 +# 2162| r2162_9(int *) = Convert : r2162_6 +# 2163| r2163_1(glval) = FunctionAddress[operator new[]] : +# 2163| r2163_2(glval) = VariableAddress[n] : +# 2163| r2163_3(unsigned long) = Load[n] : &:r2163_2, ~m? +# 2163| r2163_4(unsigned long) = Constant[4] : +# 2163| r2163_5(unsigned long) = Mul : r2163_3, r2163_4 +# 2163| r2163_6(float) = Constant[1.0] : +# 2163| r2163_7(void *) = Call[operator new[]] : func:r2163_1, 0:r2163_5, 1:r2163_6 +# 2163| mu2163_8(unknown) = ^CallSideEffect : ~m? +# 2163| mu2163_9(unknown) = ^InitializeDynamicAllocation : &:r2163_7 +# 2163| r2163_10(int *) = Convert : r2163_7 +# 2164| r2164_1(glval) = FunctionAddress[operator new[]] : +# 2164| r2164_2(glval) = VariableAddress[n] : +# 2164| r2164_3(unsigned long) = Load[n] : &:r2164_2, ~m? +# 2164| r2164_4(unsigned long) = Constant[8] : +# 2164| r2164_5(unsigned long) = Mul : r2164_3, r2164_4 +# 2164| r2164_6(void *) = Call[operator new[]] : func:r2164_1, 0:r2164_5 +# 2164| mu2164_7(unknown) = ^CallSideEffect : ~m? +# 2164| mu2164_8(unknown) = ^InitializeDynamicAllocation : &:r2164_6 +# 2164| r2164_9(String *) = Convert : r2164_6 +# 2165| r2165_1(glval) = FunctionAddress[operator new[]] : +# 2165| r2165_2(glval) = VariableAddress[n] : +# 2165| r2165_3(unsigned long) = Load[n] : &:r2165_2, ~m? +# 2165| r2165_4(unsigned long) = Constant[256] : +# 2165| r2165_5(unsigned long) = Mul : r2165_3, r2165_4 +# 2165| r2165_6(align_val_t) = Constant[128] : +# 2165| r2165_7(void *) = Call[operator new[]] : func:r2165_1, 0:r2165_5, 1:r2165_6 +# 2165| mu2165_8(unknown) = ^CallSideEffect : ~m? +# 2165| mu2165_9(unknown) = ^InitializeDynamicAllocation : &:r2165_7 +# 2165| r2165_10(Overaligned *) = Convert : r2165_7 +# 2166| r2166_1(glval) = FunctionAddress[operator new[]] : +# 2166| r2166_2(glval) = VariableAddress[n] : +# 2166| r2166_3(unsigned long) = Load[n] : &:r2166_2, ~m? +# 2166| r2166_4(unsigned long) = Constant[1] : +# 2166| r2166_5(unsigned long) = Mul : r2166_3, r2166_4 +# 2166| r2166_6(void *) = Call[operator new[]] : func:r2166_1, 0:r2166_5 +# 2166| mu2166_7(unknown) = ^CallSideEffect : ~m? +# 2166| mu2166_8(unknown) = ^InitializeDynamicAllocation : &:r2166_6 +# 2166| r2166_9(DefaultCtorWithDefaultParam *) = Convert : r2166_6 +# 2167| r2167_1(glval) = FunctionAddress[operator new[]] : +# 2167| r2167_2(glval) = VariableAddress[n] : +# 2167| r2167_3(unsigned long) = Load[n] : &:r2167_2, ~m? +# 2167| r2167_4(unsigned long) = Constant[4] : +# 2167| r2167_5(unsigned long) = Mul : r2167_3, r2167_4 +# 2167| r2167_6(void *) = Call[operator new[]] : func:r2167_1, 0:r2167_5 +# 2167| mu2167_7(unknown) = ^CallSideEffect : ~m? +# 2167| mu2167_8(unknown) = ^InitializeDynamicAllocation : &:r2167_6 +# 2167| r2167_9(int *) = Convert : r2167_6 +# 2168| v2168_1(void) = NoOp : +# 2161| v2161_6(void) = ReturnVoid : +# 2161| v2161_7(void) = AliasedUse : ~m? +# 2161| v2161_8(void) = ExitFunction : + +# 2172| char* test_strtod(char*) # 2172| Block 0 -# 2172| v2172_1(void) = EnterFunction : -# 2172| mu2172_2(unknown) = AliasedDefinition : -# 2172| mu2172_3(unknown) = InitializeNonLocal : -# 2172| r2172_4(glval) = VariableAddress[#this] : -# 2172| mu2172_5(glval) = InitializeParameter[#this] : &:r2172_4 -# 2172| r2172_6(glval) = Load[#this] : &:r2172_4, ~m? -# 2172| mu2172_7(ClassWithDestructor) = InitializeIndirection[#this] : &:r2172_6 +# 2172| v2172_1(void) = EnterFunction : +# 2172| mu2172_2(unknown) = AliasedDefinition : +# 2172| mu2172_3(unknown) = InitializeNonLocal : +# 2172| r2172_4(glval) = VariableAddress[s] : +# 2172| mu2172_5(char *) = InitializeParameter[s] : &:r2172_4 +# 2172| r2172_6(char *) = Load[s] : &:r2172_4, ~m? +# 2172| mu2172_7(unknown) = InitializeIndirection[s] : &:r2172_6 +# 2173| r2173_1(glval) = VariableAddress[end] : +# 2173| mu2173_2(char *) = Uninitialized[end] : &:r2173_1 +# 2174| r2174_1(glval) = VariableAddress[d] : +# 2174| r2174_2(glval) = FunctionAddress[strtod] : +# 2174| r2174_3(glval) = VariableAddress[s] : +# 2174| r2174_4(char *) = Load[s] : &:r2174_3, ~m? +# 2174| r2174_5(char *) = Convert : r2174_4 +# 2174| r2174_6(glval) = VariableAddress[end] : +# 2174| r2174_7(char **) = CopyValue : r2174_6 +# 2174| r2174_8(double) = Call[strtod] : func:r2174_2, 0:r2174_5, 1:r2174_7 +# 2174| v2174_9(void) = ^BufferReadSideEffect[0] : &:r2174_5, ~m? +# 2174| mu2174_10(char *) = ^IndirectMayWriteSideEffect[1] : &:r2174_7 +# 2174| mu2174_11(double) = Store[d] : &:r2174_1, r2174_8 +# 2175| r2175_1(glval) = VariableAddress[#return] : +# 2175| r2175_2(glval) = VariableAddress[end] : +# 2175| r2175_3(char *) = Load[end] : &:r2175_2, ~m? +# 2175| mu2175_4(char *) = Store[#return] : &:r2175_1, r2175_3 +# 2172| v2172_8(void) = ReturnIndirection[s] : &:r2172_6, ~m? +# 2172| r2172_9(glval) = VariableAddress[#return] : +# 2172| v2172_10(void) = ReturnValue : &:r2172_9, ~m? +# 2172| v2172_11(void) = AliasedUse : ~m? +# 2172| v2172_12(void) = ExitFunction : + +# 2182| void call_as_child_of_ConditionDeclExpr() +# 2182| Block 0 +# 2182| v2182_1(void) = EnterFunction : +# 2182| mu2182_2(unknown) = AliasedDefinition : +# 2182| mu2182_3(unknown) = InitializeNonLocal : +# 2183| r2183_1(glval) = VariableAddress[b] : +# 2183| r2183_2(HasOperatorBool) = Constant[0] : +# 2183| mu2183_3(HasOperatorBool) = Store[b] : &:r2183_1, r2183_2 +# 2183| r2183_4(glval) = VariableAddress[b] : +# 2183| r2183_5(glval) = FunctionAddress[operator bool] : +# 2183| r2183_6(bool) = Call[operator bool] : func:r2183_5, this:r2183_4 +# 2183| mu2183_7(unknown) = ^CallSideEffect : ~m? +# 2183| v2183_8(void) = ^IndirectReadSideEffect[-1] : &:r2183_4, ~m? +# 2183| mu2183_9(HasOperatorBool) = ^IndirectMayWriteSideEffect[-1] : &:r2183_4 +# 2183| r2183_10(bool) = CopyValue : r2183_6 +# 2183| v2183_11(void) = ConditionalBranch : r2183_10 +#-----| False -> Block 2 +#-----| True -> Block 1 + +# 2183| Block 1 +# 2183| v2183_12(void) = NoOp : +#-----| Goto -> Block 2 + +# 2184| Block 2 +# 2184| v2184_1(void) = NoOp : +# 2182| v2182_4(void) = ReturnVoid : +# 2182| v2182_5(void) = AliasedUse : ~m? +# 2182| v2182_6(void) = ExitFunction : + +# 2186| void ClassWithDestructor::ClassWithDestructor(ClassWithDestructor const&) +# 2186| Block 0 +# 2186| v2186_1(void) = EnterFunction : +# 2186| mu2186_2(unknown) = AliasedDefinition : +# 2186| mu2186_3(unknown) = InitializeNonLocal : +# 2186| r2186_4(glval) = VariableAddress[#this] : +# 2186| mu2186_5(glval) = InitializeParameter[#this] : &:r2186_4 +# 2186| r2186_6(glval) = Load[#this] : &:r2186_4, ~m? +# 2186| mu2186_7(ClassWithDestructor) = InitializeIndirection[#this] : &:r2186_6 #-----| r0_1(glval) = VariableAddress[(unnamed parameter 0)] : #-----| mu0_2(ClassWithDestructor &) = InitializeParameter[(unnamed parameter 0)] : &:r0_1 #-----| r0_3(ClassWithDestructor &) = Load[(unnamed parameter 0)] : &:r0_1, ~m? #-----| mu0_4(unknown) = InitializeIndirection[(unnamed parameter 0)] : &:r0_3 -# 2172| r2172_8(glval) = FieldAddress[x] : mu2172_5 -# 2172| r2172_9(glval) = VariableAddress[(unnamed parameter 0)] : -# 2172| r2172_10(ClassWithDestructor &) = Load[(unnamed parameter 0)] : &:r2172_9, ~m? -# 2172| r2172_11(glval) = CopyValue : r2172_10 -# 2172| r2172_12(glval) = FieldAddress[x] : r2172_11 -# 2172| r2172_13(char *) = Load[?] : &:r2172_12, ~m? -# 2172| mu2172_14(char *) = Store[?] : &:r2172_8, r2172_13 -# 2172| v2172_15(void) = NoOp : -# 2172| v2172_16(void) = ReturnIndirection[#this] : &:r2172_6, ~m? +# 2186| r2186_8(glval) = FieldAddress[x] : mu2186_5 +# 2186| r2186_9(glval) = VariableAddress[(unnamed parameter 0)] : +# 2186| r2186_10(ClassWithDestructor &) = Load[(unnamed parameter 0)] : &:r2186_9, ~m? +# 2186| r2186_11(glval) = CopyValue : r2186_10 +# 2186| r2186_12(glval) = FieldAddress[x] : r2186_11 +# 2186| r2186_13(char *) = Load[?] : &:r2186_12, ~m? +# 2186| mu2186_14(char *) = Store[?] : &:r2186_8, r2186_13 +# 2186| v2186_15(void) = NoOp : +# 2186| v2186_16(void) = ReturnIndirection[#this] : &:r2186_6, ~m? #-----| v0_5(void) = ReturnIndirection[(unnamed parameter 0)] : &:r0_3, ~m? -# 2172| v2172_17(void) = ReturnVoid : -# 2172| v2172_18(void) = AliasedUse : ~m? -# 2172| v2172_19(void) = ExitFunction : +# 2186| v2186_17(void) = ReturnVoid : +# 2186| v2186_18(void) = AliasedUse : ~m? +# 2186| v2186_19(void) = ExitFunction : -# 2175| void ClassWithDestructor::ClassWithDestructor() -# 2175| Block 0 -# 2175| v2175_1(void) = EnterFunction : -# 2175| mu2175_2(unknown) = AliasedDefinition : -# 2175| mu2175_3(unknown) = InitializeNonLocal : -# 2175| r2175_4(glval) = VariableAddress[#this] : -# 2175| mu2175_5(glval) = InitializeParameter[#this] : &:r2175_4 -# 2175| r2175_6(glval) = Load[#this] : &:r2175_4, ~m? -# 2175| mu2175_7(ClassWithDestructor) = InitializeIndirection[#this] : &:r2175_6 -# 2175| r2175_8(glval) = FunctionAddress[operator new] : -# 2175| r2175_9(unsigned long) = Constant[1] : -# 2175| r2175_10(void *) = Call[operator new] : func:r2175_8, 0:r2175_9 -# 2175| mu2175_11(unknown) = ^CallSideEffect : ~m? -# 2175| mu2175_12(unknown) = ^InitializeDynamicAllocation : &:r2175_10 -# 2175| r2175_13(char *) = Convert : r2175_10 -# 2175| r2175_14(glval) = VariableAddress[#this] : -# 2175| r2175_15(ClassWithDestructor *) = Load[#this] : &:r2175_14, ~m? -# 2175| r2175_16(glval) = FieldAddress[x] : r2175_15 -# 2175| mu2175_17(char *) = Store[?] : &:r2175_16, r2175_13 -# 2175| v2175_18(void) = NoOp : -# 2175| v2175_19(void) = ReturnIndirection[#this] : &:r2175_6, ~m? -# 2175| v2175_20(void) = ReturnVoid : -# 2175| v2175_21(void) = AliasedUse : ~m? -# 2175| v2175_22(void) = ExitFunction : +# 2189| void ClassWithDestructor::ClassWithDestructor() +# 2189| Block 0 +# 2189| v2189_1(void) = EnterFunction : +# 2189| mu2189_2(unknown) = AliasedDefinition : +# 2189| mu2189_3(unknown) = InitializeNonLocal : +# 2189| r2189_4(glval) = VariableAddress[#this] : +# 2189| mu2189_5(glval) = InitializeParameter[#this] : &:r2189_4 +# 2189| r2189_6(glval) = Load[#this] : &:r2189_4, ~m? +# 2189| mu2189_7(ClassWithDestructor) = InitializeIndirection[#this] : &:r2189_6 +# 2189| r2189_8(glval) = FunctionAddress[operator new] : +# 2189| r2189_9(unsigned long) = Constant[1] : +# 2189| r2189_10(void *) = Call[operator new] : func:r2189_8, 0:r2189_9 +# 2189| mu2189_11(unknown) = ^CallSideEffect : ~m? +# 2189| mu2189_12(unknown) = ^InitializeDynamicAllocation : &:r2189_10 +# 2189| r2189_13(char *) = Convert : r2189_10 +# 2189| r2189_14(glval) = VariableAddress[#this] : +# 2189| r2189_15(ClassWithDestructor *) = Load[#this] : &:r2189_14, ~m? +# 2189| r2189_16(glval) = FieldAddress[x] : r2189_15 +# 2189| mu2189_17(char *) = Store[?] : &:r2189_16, r2189_13 +# 2189| v2189_18(void) = NoOp : +# 2189| v2189_19(void) = ReturnIndirection[#this] : &:r2189_6, ~m? +# 2189| v2189_20(void) = ReturnVoid : +# 2189| v2189_21(void) = AliasedUse : ~m? +# 2189| v2189_22(void) = ExitFunction : -# 2176| void ClassWithDestructor::~ClassWithDestructor() -# 2176| Block 0 -# 2176| v2176_1(void) = EnterFunction : -# 2176| mu2176_2(unknown) = AliasedDefinition : -# 2176| mu2176_3(unknown) = InitializeNonLocal : -# 2176| r2176_4(glval) = VariableAddress[#this] : -# 2176| mu2176_5(glval) = InitializeParameter[#this] : &:r2176_4 -# 2176| r2176_6(glval) = Load[#this] : &:r2176_4, ~m? -# 2176| mu2176_7(ClassWithDestructor) = InitializeIndirection[#this] : &:r2176_6 -# 2176| r2176_8(glval) = FunctionAddress[operator delete] : -# 2176| r2176_9(glval) = VariableAddress[#this] : -# 2176| r2176_10(ClassWithDestructor *) = Load[#this] : &:r2176_9, ~m? -# 2176| r2176_11(glval) = FieldAddress[x] : r2176_10 -# 2176| r2176_12(char *) = Load[?] : &:r2176_11, ~m? -# 2176| v2176_13(void) = Call[operator delete] : func:r2176_8, 0:r2176_12 -# 2176| mu2176_14(unknown) = ^CallSideEffect : ~m? -# 2176| v2176_15(void) = NoOp : -# 2176| v2176_16(void) = ReturnIndirection[#this] : &:r2176_6, ~m? -# 2176| v2176_17(void) = ReturnVoid : -# 2176| v2176_18(void) = AliasedUse : ~m? -# 2176| v2176_19(void) = ExitFunction : +# 2190| void ClassWithDestructor::~ClassWithDestructor() +# 2190| Block 0 +# 2190| v2190_1(void) = EnterFunction : +# 2190| mu2190_2(unknown) = AliasedDefinition : +# 2190| mu2190_3(unknown) = InitializeNonLocal : +# 2190| r2190_4(glval) = VariableAddress[#this] : +# 2190| mu2190_5(glval) = InitializeParameter[#this] : &:r2190_4 +# 2190| r2190_6(glval) = Load[#this] : &:r2190_4, ~m? +# 2190| mu2190_7(ClassWithDestructor) = InitializeIndirection[#this] : &:r2190_6 +# 2190| r2190_8(glval) = FunctionAddress[operator delete] : +# 2190| r2190_9(glval) = VariableAddress[#this] : +# 2190| r2190_10(ClassWithDestructor *) = Load[#this] : &:r2190_9, ~m? +# 2190| r2190_11(glval) = FieldAddress[x] : r2190_10 +# 2190| r2190_12(char *) = Load[?] : &:r2190_11, ~m? +# 2190| v2190_13(void) = Call[operator delete] : func:r2190_8, 0:r2190_12 +# 2190| mu2190_14(unknown) = ^CallSideEffect : ~m? +# 2190| v2190_15(void) = NoOp : +# 2190| v2190_16(void) = ReturnIndirection[#this] : &:r2190_6, ~m? +# 2190| v2190_17(void) = ReturnVoid : +# 2190| v2190_18(void) = AliasedUse : ~m? +# 2190| v2190_19(void) = ExitFunction : -# 2178| void ClassWithDestructor::set_x(char) -# 2178| Block 0 -# 2178| v2178_1(void) = EnterFunction : -# 2178| mu2178_2(unknown) = AliasedDefinition : -# 2178| mu2178_3(unknown) = InitializeNonLocal : -# 2178| r2178_4(glval) = VariableAddress[#this] : -# 2178| mu2178_5(glval) = InitializeParameter[#this] : &:r2178_4 -# 2178| r2178_6(glval) = Load[#this] : &:r2178_4, ~m? -# 2178| mu2178_7(ClassWithDestructor) = InitializeIndirection[#this] : &:r2178_6 -# 2178| r2178_8(glval) = VariableAddress[y] : -# 2178| mu2178_9(char) = InitializeParameter[y] : &:r2178_8 -# 2178| r2178_10(glval) = VariableAddress[y] : -# 2178| r2178_11(char) = Load[y] : &:r2178_10, ~m? -# 2178| r2178_12(glval) = VariableAddress[#this] : -# 2178| r2178_13(ClassWithDestructor *) = Load[#this] : &:r2178_12, ~m? -# 2178| r2178_14(glval) = FieldAddress[x] : r2178_13 -# 2178| r2178_15(char *) = Load[?] : &:r2178_14, ~m? -# 2178| r2178_16(glval) = CopyValue : r2178_15 -# 2178| mu2178_17(char) = Store[?] : &:r2178_16, r2178_11 -# 2178| v2178_18(void) = NoOp : -# 2178| v2178_19(void) = ReturnIndirection[#this] : &:r2178_6, ~m? -# 2178| v2178_20(void) = ReturnVoid : -# 2178| v2178_21(void) = AliasedUse : ~m? -# 2178| v2178_22(void) = ExitFunction : +# 2192| void ClassWithDestructor::set_x(char) +# 2192| Block 0 +# 2192| v2192_1(void) = EnterFunction : +# 2192| mu2192_2(unknown) = AliasedDefinition : +# 2192| mu2192_3(unknown) = InitializeNonLocal : +# 2192| r2192_4(glval) = VariableAddress[#this] : +# 2192| mu2192_5(glval) = InitializeParameter[#this] : &:r2192_4 +# 2192| r2192_6(glval) = Load[#this] : &:r2192_4, ~m? +# 2192| mu2192_7(ClassWithDestructor) = InitializeIndirection[#this] : &:r2192_6 +# 2192| r2192_8(glval) = VariableAddress[y] : +# 2192| mu2192_9(char) = InitializeParameter[y] : &:r2192_8 +# 2192| r2192_10(glval) = VariableAddress[y] : +# 2192| r2192_11(char) = Load[y] : &:r2192_10, ~m? +# 2192| r2192_12(glval) = VariableAddress[#this] : +# 2192| r2192_13(ClassWithDestructor *) = Load[#this] : &:r2192_12, ~m? +# 2192| r2192_14(glval) = FieldAddress[x] : r2192_13 +# 2192| r2192_15(char *) = Load[?] : &:r2192_14, ~m? +# 2192| r2192_16(glval) = CopyValue : r2192_15 +# 2192| mu2192_17(char) = Store[?] : &:r2192_16, r2192_11 +# 2192| v2192_18(void) = NoOp : +# 2192| v2192_19(void) = ReturnIndirection[#this] : &:r2192_6, ~m? +# 2192| v2192_20(void) = ReturnVoid : +# 2192| v2192_21(void) = AliasedUse : ~m? +# 2192| v2192_22(void) = ExitFunction : -# 2179| char ClassWithDestructor::get_x() -# 2179| Block 0 -# 2179| v2179_1(void) = EnterFunction : -# 2179| mu2179_2(unknown) = AliasedDefinition : -# 2179| mu2179_3(unknown) = InitializeNonLocal : -# 2179| r2179_4(glval) = VariableAddress[#this] : -# 2179| mu2179_5(glval) = InitializeParameter[#this] : &:r2179_4 -# 2179| r2179_6(glval) = Load[#this] : &:r2179_4, ~m? -# 2179| mu2179_7(ClassWithDestructor) = InitializeIndirection[#this] : &:r2179_6 -# 2179| r2179_8(glval) = VariableAddress[#return] : -# 2179| r2179_9(glval) = VariableAddress[#this] : -# 2179| r2179_10(ClassWithDestructor *) = Load[#this] : &:r2179_9, ~m? -# 2179| r2179_11(glval) = FieldAddress[x] : r2179_10 -# 2179| r2179_12(char *) = Load[?] : &:r2179_11, ~m? -# 2179| r2179_13(char) = Load[?] : &:r2179_12, ~m? -# 2179| mu2179_14(char) = Store[#return] : &:r2179_8, r2179_13 -# 2179| v2179_15(void) = ReturnIndirection[#this] : &:r2179_6, ~m? -# 2179| r2179_16(glval) = VariableAddress[#return] : -# 2179| v2179_17(void) = ReturnValue : &:r2179_16, ~m? -# 2179| v2179_18(void) = AliasedUse : ~m? -# 2179| v2179_19(void) = ExitFunction : +# 2193| char ClassWithDestructor::get_x() +# 2193| Block 0 +# 2193| v2193_1(void) = EnterFunction : +# 2193| mu2193_2(unknown) = AliasedDefinition : +# 2193| mu2193_3(unknown) = InitializeNonLocal : +# 2193| r2193_4(glval) = VariableAddress[#this] : +# 2193| mu2193_5(glval) = InitializeParameter[#this] : &:r2193_4 +# 2193| r2193_6(glval) = Load[#this] : &:r2193_4, ~m? +# 2193| mu2193_7(ClassWithDestructor) = InitializeIndirection[#this] : &:r2193_6 +# 2193| r2193_8(glval) = VariableAddress[#return] : +# 2193| r2193_9(glval) = VariableAddress[#this] : +# 2193| r2193_10(ClassWithDestructor *) = Load[#this] : &:r2193_9, ~m? +# 2193| r2193_11(glval) = FieldAddress[x] : r2193_10 +# 2193| r2193_12(char *) = Load[?] : &:r2193_11, ~m? +# 2193| r2193_13(char) = Load[?] : &:r2193_12, ~m? +# 2193| mu2193_14(char) = Store[#return] : &:r2193_8, r2193_13 +# 2193| v2193_15(void) = ReturnIndirection[#this] : &:r2193_6, ~m? +# 2193| r2193_16(glval) = VariableAddress[#return] : +# 2193| v2193_17(void) = ReturnValue : &:r2193_16, ~m? +# 2193| v2193_18(void) = AliasedUse : ~m? +# 2193| v2193_19(void) = ExitFunction : -# 2182| bool initialization_with_destructor_bool -# 2182| Block 0 -# 2182| v2182_1(void) = EnterFunction : -# 2182| mu2182_2(unknown) = AliasedDefinition : -# 2182| r2182_3(glval) = VariableAddress[initialization_with_destructor_bool] : -# 2182| r2182_4(bool) = Constant[1] : -# 2182| mu2182_5(bool) = Store[initialization_with_destructor_bool] : &:r2182_3, r2182_4 -# 2182| v2182_6(void) = ReturnVoid : -# 2182| v2182_7(void) = AliasedUse : ~m? -# 2182| v2182_8(void) = ExitFunction : +# 2196| bool initialization_with_destructor_bool +# 2196| Block 0 +# 2196| v2196_1(void) = EnterFunction : +# 2196| mu2196_2(unknown) = AliasedDefinition : +# 2196| r2196_3(glval) = VariableAddress[initialization_with_destructor_bool] : +# 2196| r2196_4(bool) = Constant[1] : +# 2196| mu2196_5(bool) = Store[initialization_with_destructor_bool] : &:r2196_3, r2196_4 +# 2196| v2196_6(void) = ReturnVoid : +# 2196| v2196_7(void) = AliasedUse : ~m? +# 2196| v2196_8(void) = ExitFunction : -# 2184| void initialization_with_destructor(bool, char) -# 2184| Block 0 -# 2184| v2184_1(void) = EnterFunction : -# 2184| mu2184_2(unknown) = AliasedDefinition : -# 2184| mu2184_3(unknown) = InitializeNonLocal : -# 2184| r2184_4(glval) = VariableAddress[b] : -# 2184| mu2184_5(bool) = InitializeParameter[b] : &:r2184_4 -# 2184| r2184_6(glval) = VariableAddress[c] : -# 2184| mu2184_7(char) = InitializeParameter[c] : &:r2184_6 -# 2185| r2185_1(glval) = VariableAddress[x] : -# 2185| mu2185_2(ClassWithDestructor) = Uninitialized[x] : &:r2185_1 -# 2185| r2185_3(glval) = FunctionAddress[ClassWithDestructor] : -# 2185| v2185_4(void) = Call[ClassWithDestructor] : func:r2185_3, this:r2185_1 -# 2185| mu2185_5(unknown) = ^CallSideEffect : ~m? -# 2185| mu2185_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2185_1 -# 2185| r2185_7(glval) = VariableAddress[b] : -# 2185| r2185_8(bool) = Load[b] : &:r2185_7, ~m? -# 2185| v2185_9(void) = ConditionalBranch : r2185_8 +# 2198| void initialization_with_destructor(bool, char) +# 2198| Block 0 +# 2198| v2198_1(void) = EnterFunction : +# 2198| mu2198_2(unknown) = AliasedDefinition : +# 2198| mu2198_3(unknown) = InitializeNonLocal : +# 2198| r2198_4(glval) = VariableAddress[b] : +# 2198| mu2198_5(bool) = InitializeParameter[b] : &:r2198_4 +# 2198| r2198_6(glval) = VariableAddress[c] : +# 2198| mu2198_7(char) = InitializeParameter[c] : &:r2198_6 +# 2199| r2199_1(glval) = VariableAddress[x] : +# 2199| mu2199_2(ClassWithDestructor) = Uninitialized[x] : &:r2199_1 +# 2199| r2199_3(glval) = FunctionAddress[ClassWithDestructor] : +# 2199| v2199_4(void) = Call[ClassWithDestructor] : func:r2199_3, this:r2199_1 +# 2199| mu2199_5(unknown) = ^CallSideEffect : ~m? +# 2199| mu2199_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2199_1 +# 2199| r2199_7(glval) = VariableAddress[b] : +# 2199| r2199_8(bool) = Load[b] : &:r2199_7, ~m? +# 2199| v2199_9(void) = ConditionalBranch : r2199_8 #-----| False -> Block 3 #-----| True -> Block 2 -# 2184| Block 1 -# 2184| v2184_8(void) = ReturnVoid : -# 2184| v2184_9(void) = AliasedUse : ~m? -# 2184| v2184_10(void) = ExitFunction : +# 2198| Block 1 +# 2198| v2198_8(void) = ReturnVoid : +# 2198| v2198_9(void) = AliasedUse : ~m? +# 2198| v2198_10(void) = ExitFunction : -# 2186| Block 2 -# 2186| r2186_1(glval) = VariableAddress[x] : -# 2186| r2186_2(glval) = FunctionAddress[set_x] : -# 2186| r2186_3(char) = Constant[97] : -# 2186| v2186_4(void) = Call[set_x] : func:r2186_2, this:r2186_1, 0:r2186_3 -# 2186| mu2186_5(unknown) = ^CallSideEffect : ~m? -# 2186| v2186_6(void) = ^IndirectReadSideEffect[-1] : &:r2186_1, ~m? -# 2186| mu2186_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2186_1 -# 2186| r2186_8(glval) = VariableAddress[x] : -# 2186| r2186_9(glval) = FunctionAddress[~ClassWithDestructor] : -# 2186| v2186_10(void) = Call[~ClassWithDestructor] : func:r2186_9, this:r2186_8 -# 2186| mu2186_11(unknown) = ^CallSideEffect : ~m? -# 2186| v2186_12(void) = ^IndirectReadSideEffect[-1] : &:r2186_8, ~m? -# 2186| mu2186_13(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2186_8 +# 2200| Block 2 +# 2200| r2200_1(glval) = VariableAddress[x] : +# 2200| r2200_2(glval) = FunctionAddress[set_x] : +# 2200| r2200_3(char) = Constant[97] : +# 2200| v2200_4(void) = Call[set_x] : func:r2200_2, this:r2200_1, 0:r2200_3 +# 2200| mu2200_5(unknown) = ^CallSideEffect : ~m? +# 2200| v2200_6(void) = ^IndirectReadSideEffect[-1] : &:r2200_1, ~m? +# 2200| mu2200_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2200_1 +# 2200| r2200_8(glval) = VariableAddress[x] : +# 2200| r2200_9(glval) = FunctionAddress[~ClassWithDestructor] : +# 2200| v2200_10(void) = Call[~ClassWithDestructor] : func:r2200_9, this:r2200_8 +# 2200| mu2200_11(unknown) = ^CallSideEffect : ~m? +# 2200| v2200_12(void) = ^IndirectReadSideEffect[-1] : &:r2200_8, ~m? +# 2200| mu2200_13(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2200_8 #-----| Goto -> Block 3 -# 2188| Block 3 -# 2188| r2188_1(glval) = VariableAddress[x] : -# 2188| mu2188_2(ClassWithDestructor) = Uninitialized[x] : &:r2188_1 -# 2188| r2188_3(glval) = FunctionAddress[ClassWithDestructor] : -# 2188| v2188_4(void) = Call[ClassWithDestructor] : func:r2188_3, this:r2188_1 -# 2188| mu2188_5(unknown) = ^CallSideEffect : ~m? -# 2188| mu2188_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2188_1 -# 2188| r2188_7(bool) = Constant[1] : -# 2188| v2188_8(void) = ConditionalBranch : r2188_7 +# 2202| Block 3 +# 2202| r2202_1(glval) = VariableAddress[x] : +# 2202| mu2202_2(ClassWithDestructor) = Uninitialized[x] : &:r2202_1 +# 2202| r2202_3(glval) = FunctionAddress[ClassWithDestructor] : +# 2202| v2202_4(void) = Call[ClassWithDestructor] : func:r2202_3, this:r2202_1 +# 2202| mu2202_5(unknown) = ^CallSideEffect : ~m? +# 2202| mu2202_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2202_1 +# 2202| r2202_7(bool) = Constant[1] : +# 2202| v2202_8(void) = ConditionalBranch : r2202_7 #-----| False -> Block 6 #-----| True -> Block 4 -# 2189| Block 4 -# 2189| r2189_1(glval) = VariableAddress[x] : -# 2189| r2189_2(glval) = FunctionAddress[set_x] : -# 2189| r2189_3(char) = Constant[97] : -# 2189| v2189_4(void) = Call[set_x] : func:r2189_2, this:r2189_1, 0:r2189_3 -# 2189| mu2189_5(unknown) = ^CallSideEffect : ~m? -# 2189| v2189_6(void) = ^IndirectReadSideEffect[-1] : &:r2189_1, ~m? -# 2189| mu2189_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2189_1 +# 2203| Block 4 +# 2203| r2203_1(glval) = VariableAddress[x] : +# 2203| r2203_2(glval) = FunctionAddress[set_x] : +# 2203| r2203_3(char) = Constant[97] : +# 2203| v2203_4(void) = Call[set_x] : func:r2203_2, this:r2203_1, 0:r2203_3 +# 2203| mu2203_5(unknown) = ^CallSideEffect : ~m? +# 2203| v2203_6(void) = ^IndirectReadSideEffect[-1] : &:r2203_1, ~m? +# 2203| mu2203_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2203_1 #-----| Goto -> Block 6 -# 2189| Block 5 -# 2189| r2189_8(glval) = VariableAddress[x] : -# 2189| r2189_9(glval) = FunctionAddress[~ClassWithDestructor] : -# 2189| v2189_10(void) = Call[~ClassWithDestructor] : func:r2189_9, this:r2189_8 -# 2189| mu2189_11(unknown) = ^CallSideEffect : ~m? -# 2189| v2189_12(void) = ^IndirectReadSideEffect[-1] : &:r2189_8, ~m? -# 2189| mu2189_13(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2189_8 +# 2203| Block 5 +# 2203| r2203_8(glval) = VariableAddress[x] : +# 2203| r2203_9(glval) = FunctionAddress[~ClassWithDestructor] : +# 2203| v2203_10(void) = Call[~ClassWithDestructor] : func:r2203_9, this:r2203_8 +# 2203| mu2203_11(unknown) = ^CallSideEffect : ~m? +# 2203| v2203_12(void) = ^IndirectReadSideEffect[-1] : &:r2203_8, ~m? +# 2203| mu2203_13(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2203_8 #-----| Goto -> Block 6 -# 2191| Block 6 -# 2191| r2191_1(glval) = VariableAddress[x] : -# 2191| mu2191_2(ClassWithDestructor) = Uninitialized[x] : &:r2191_1 -# 2191| r2191_3(glval) = FunctionAddress[ClassWithDestructor] : -# 2191| v2191_4(void) = Call[ClassWithDestructor] : func:r2191_3, this:r2191_1 -# 2191| mu2191_5(unknown) = ^CallSideEffect : ~m? -# 2191| mu2191_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2191_1 -# 2191| r2191_7(glval) = VariableAddress[c] : -# 2191| r2191_8(char) = Load[c] : &:r2191_7, ~m? -# 2191| r2191_9(int) = Convert : r2191_8 -# 2191| v2191_10(void) = Switch : r2191_9 +# 2205| Block 6 +# 2205| r2205_1(glval) = VariableAddress[x] : +# 2205| mu2205_2(ClassWithDestructor) = Uninitialized[x] : &:r2205_1 +# 2205| r2205_3(glval) = FunctionAddress[ClassWithDestructor] : +# 2205| v2205_4(void) = Call[ClassWithDestructor] : func:r2205_3, this:r2205_1 +# 2205| mu2205_5(unknown) = ^CallSideEffect : ~m? +# 2205| mu2205_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2205_1 +# 2205| r2205_7(glval) = VariableAddress[c] : +# 2205| r2205_8(char) = Load[c] : &:r2205_7, ~m? +# 2205| r2205_9(int) = Convert : r2205_8 +# 2205| v2205_10(void) = Switch : r2205_9 #-----| Case[97] -> Block 7 #-----| Default -> Block 8 -# 2192| Block 7 -# 2192| v2192_1(void) = NoOp : -# 2193| r2193_1(glval) = VariableAddress[x] : -# 2193| r2193_2(glval) = FunctionAddress[set_x] : -# 2193| r2193_3(char) = Constant[97] : -# 2193| v2193_4(void) = Call[set_x] : func:r2193_2, this:r2193_1, 0:r2193_3 -# 2193| mu2193_5(unknown) = ^CallSideEffect : ~m? -# 2193| v2193_6(void) = ^IndirectReadSideEffect[-1] : &:r2193_1, ~m? -# 2193| mu2193_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2193_1 -# 2194| v2194_1(void) = NoOp : +# 2206| Block 7 +# 2206| v2206_1(void) = NoOp : +# 2207| r2207_1(glval) = VariableAddress[x] : +# 2207| r2207_2(glval) = FunctionAddress[set_x] : +# 2207| r2207_3(char) = Constant[97] : +# 2207| v2207_4(void) = Call[set_x] : func:r2207_2, this:r2207_1, 0:r2207_3 +# 2207| mu2207_5(unknown) = ^CallSideEffect : ~m? +# 2207| v2207_6(void) = ^IndirectReadSideEffect[-1] : &:r2207_1, ~m? +# 2207| mu2207_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2207_1 +# 2208| v2208_1(void) = NoOp : #-----| Goto -> Block 10 -# 2195| Block 8 -# 2195| v2195_1(void) = NoOp : -# 2196| r2196_1(glval) = VariableAddress[x] : -# 2196| r2196_2(glval) = FunctionAddress[set_x] : -# 2196| r2196_3(char) = Constant[98] : -# 2196| v2196_4(void) = Call[set_x] : func:r2196_2, this:r2196_1, 0:r2196_3 -# 2196| mu2196_5(unknown) = ^CallSideEffect : ~m? -# 2196| v2196_6(void) = ^IndirectReadSideEffect[-1] : &:r2196_1, ~m? -# 2196| mu2196_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2196_1 -# 2197| v2197_1(void) = NoOp : +# 2209| Block 8 +# 2209| v2209_1(void) = NoOp : +# 2210| r2210_1(glval) = VariableAddress[x] : +# 2210| r2210_2(glval) = FunctionAddress[set_x] : +# 2210| r2210_3(char) = Constant[98] : +# 2210| v2210_4(void) = Call[set_x] : func:r2210_2, this:r2210_1, 0:r2210_3 +# 2210| mu2210_5(unknown) = ^CallSideEffect : ~m? +# 2210| v2210_6(void) = ^IndirectReadSideEffect[-1] : &:r2210_1, ~m? +# 2210| mu2210_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2210_1 +# 2211| v2211_1(void) = NoOp : #-----| Goto -> Block 10 -# 2198| Block 9 -# 2198| r2198_1(glval) = VariableAddress[x] : -# 2198| r2198_2(glval) = FunctionAddress[~ClassWithDestructor] : -# 2198| v2198_3(void) = Call[~ClassWithDestructor] : func:r2198_2, this:r2198_1 -# 2198| mu2198_4(unknown) = ^CallSideEffect : ~m? -# 2198| v2198_5(void) = ^IndirectReadSideEffect[-1] : &:r2198_1, ~m? -# 2198| mu2198_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2198_1 +# 2212| Block 9 +# 2212| r2212_1(glval) = VariableAddress[x] : +# 2212| r2212_2(glval) = FunctionAddress[~ClassWithDestructor] : +# 2212| v2212_3(void) = Call[~ClassWithDestructor] : func:r2212_2, this:r2212_1 +# 2212| mu2212_4(unknown) = ^CallSideEffect : ~m? +# 2212| v2212_5(void) = ^IndirectReadSideEffect[-1] : &:r2212_1, ~m? +# 2212| mu2212_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2212_1 #-----| Goto -> Block 10 -# 2198| Block 10 -# 2198| v2198_7(void) = NoOp : -# 2200| r2200_1(glval) = VariableAddress[x] : -# 2200| mu2200_2(ClassWithDestructor) = Uninitialized[x] : &:r2200_1 -# 2200| r2200_3(glval) = FunctionAddress[ClassWithDestructor] : -# 2200| v2200_4(void) = Call[ClassWithDestructor] : func:r2200_3, this:r2200_1 -# 2200| mu2200_5(unknown) = ^CallSideEffect : ~m? -# 2200| mu2200_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2200_1 -# 2201| r2201_1(glval>) = VariableAddress[ys] : -# 2201| mu2201_2(vector) = Uninitialized[ys] : &:r2201_1 -# 2201| r2201_3(glval) = FunctionAddress[vector] : -# 2201| r2201_4(glval) = VariableAddress[#temp2201:45] : -# 2201| r2201_5(glval) = VariableAddress[x] : -# 2201| r2201_6(ClassWithDestructor) = Load[x] : &:r2201_5, ~m? -# 2201| mu2201_7(ClassWithDestructor) = Store[#temp2201:45] : &:r2201_4, r2201_6 -# 2201| r2201_8(ClassWithDestructor) = Load[#temp2201:45] : &:r2201_4, ~m? -# 2201| v2201_9(void) = Call[vector] : func:r2201_3, this:r2201_1, 0:r2201_8 -# 2201| mu2201_10(unknown) = ^CallSideEffect : ~m? -# 2201| mu2201_11(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2201_1 -# 2201| r2201_12(glval &>) = VariableAddress[(__range)] : -# 2201| r2201_13(glval>) = VariableAddress[ys] : -# 2201| r2201_14(vector &) = CopyValue : r2201_13 -# 2201| mu2201_15(vector &) = Store[(__range)] : &:r2201_12, r2201_14 -# 2201| r2201_16(glval>) = VariableAddress[(__begin)] : -# 2201| r2201_17(glval &>) = VariableAddress[(__range)] : -# 2201| r2201_18(vector &) = Load[(__range)] : &:r2201_17, ~m? -#-----| r0_1(glval>) = CopyValue : r2201_18 +# 2212| Block 10 +# 2212| v2212_7(void) = NoOp : +# 2214| r2214_1(glval) = VariableAddress[x] : +# 2214| mu2214_2(ClassWithDestructor) = Uninitialized[x] : &:r2214_1 +# 2214| r2214_3(glval) = FunctionAddress[ClassWithDestructor] : +# 2214| v2214_4(void) = Call[ClassWithDestructor] : func:r2214_3, this:r2214_1 +# 2214| mu2214_5(unknown) = ^CallSideEffect : ~m? +# 2214| mu2214_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2214_1 +# 2215| r2215_1(glval>) = VariableAddress[ys] : +# 2215| mu2215_2(vector) = Uninitialized[ys] : &:r2215_1 +# 2215| r2215_3(glval) = FunctionAddress[vector] : +# 2215| r2215_4(glval) = VariableAddress[#temp2215:45] : +# 2215| r2215_5(glval) = VariableAddress[x] : +# 2215| r2215_6(ClassWithDestructor) = Load[x] : &:r2215_5, ~m? +# 2215| mu2215_7(ClassWithDestructor) = Store[#temp2215:45] : &:r2215_4, r2215_6 +# 2215| r2215_8(ClassWithDestructor) = Load[#temp2215:45] : &:r2215_4, ~m? +# 2215| v2215_9(void) = Call[vector] : func:r2215_3, this:r2215_1, 0:r2215_8 +# 2215| mu2215_10(unknown) = ^CallSideEffect : ~m? +# 2215| mu2215_11(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2215_1 +# 2215| r2215_12(glval &>) = VariableAddress[(__range)] : +# 2215| r2215_13(glval>) = VariableAddress[ys] : +# 2215| r2215_14(vector &) = CopyValue : r2215_13 +# 2215| mu2215_15(vector &) = Store[(__range)] : &:r2215_12, r2215_14 +# 2215| r2215_16(glval>) = VariableAddress[(__begin)] : +# 2215| r2215_17(glval &>) = VariableAddress[(__range)] : +# 2215| r2215_18(vector &) = Load[(__range)] : &:r2215_17, ~m? +#-----| r0_1(glval>) = CopyValue : r2215_18 #-----| r0_2(glval>) = Convert : r0_1 -# 2201| r2201_19(glval) = FunctionAddress[begin] : -# 2201| r2201_20(iterator) = Call[begin] : func:r2201_19, this:r0_2 +# 2215| r2215_19(glval) = FunctionAddress[begin] : +# 2215| r2215_20(iterator) = Call[begin] : func:r2215_19, this:r0_2 #-----| v0_3(void) = ^IndirectReadSideEffect[-1] : &:r0_2, ~m? -# 2201| mu2201_21(iterator) = Store[(__begin)] : &:r2201_16, r2201_20 -# 2201| r2201_22(glval>) = VariableAddress[(__end)] : -# 2201| r2201_23(glval &>) = VariableAddress[(__range)] : -# 2201| r2201_24(vector &) = Load[(__range)] : &:r2201_23, ~m? -#-----| r0_4(glval>) = CopyValue : r2201_24 +# 2215| mu2215_21(iterator) = Store[(__begin)] : &:r2215_16, r2215_20 +# 2215| r2215_22(glval>) = VariableAddress[(__end)] : +# 2215| r2215_23(glval &>) = VariableAddress[(__range)] : +# 2215| r2215_24(vector &) = Load[(__range)] : &:r2215_23, ~m? +#-----| r0_4(glval>) = CopyValue : r2215_24 #-----| r0_5(glval>) = Convert : r0_4 -# 2201| r2201_25(glval) = FunctionAddress[end] : -# 2201| r2201_26(iterator) = Call[end] : func:r2201_25, this:r0_5 +# 2215| r2215_25(glval) = FunctionAddress[end] : +# 2215| r2215_26(iterator) = Call[end] : func:r2215_25, this:r0_5 #-----| v0_6(void) = ^IndirectReadSideEffect[-1] : &:r0_5, ~m? -# 2201| mu2201_27(iterator) = Store[(__end)] : &:r2201_22, r2201_26 +# 2215| mu2215_27(iterator) = Store[(__end)] : &:r2215_22, r2215_26 #-----| Goto -> Block 11 -# 2201| Block 11 -# 2201| r2201_28(glval>) = VariableAddress[(__begin)] : -#-----| r0_7(glval>) = Convert : r2201_28 -# 2201| r2201_29(glval) = FunctionAddress[operator!=] : +# 2215| Block 11 +# 2215| r2215_28(glval>) = VariableAddress[(__begin)] : +#-----| r0_7(glval>) = Convert : r2215_28 +# 2215| r2215_29(glval) = FunctionAddress[operator!=] : #-----| r0_8(glval>) = VariableAddress[#temp0:0] : #-----| mu0_9(iterator) = Uninitialized[#temp0:0] : &:r0_8 -# 2201| r2201_30(glval) = FunctionAddress[iterator] : -# 2201| r2201_31(glval>) = VariableAddress[(__end)] : -#-----| r0_10(glval>) = Convert : r2201_31 +# 2215| r2215_30(glval) = FunctionAddress[iterator] : +# 2215| r2215_31(glval>) = VariableAddress[(__end)] : +#-----| r0_10(glval>) = Convert : r2215_31 #-----| r0_11(iterator &) = CopyValue : r0_10 -# 2201| v2201_32(void) = Call[iterator] : func:r2201_30, this:r0_8, 0:r0_11 -# 2201| mu2201_33(unknown) = ^CallSideEffect : ~m? +# 2215| v2215_32(void) = Call[iterator] : func:r2215_30, this:r0_8, 0:r0_11 +# 2215| mu2215_33(unknown) = ^CallSideEffect : ~m? #-----| v0_12(void) = ^BufferReadSideEffect[0] : &:r0_11, ~m? -# 2201| mu2201_34(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r0_8 +# 2215| mu2215_34(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r0_8 #-----| r0_13(iterator) = Load[#temp0:0] : &:r0_8, ~m? -# 2201| r2201_35(bool) = Call[operator!=] : func:r2201_29, this:r0_7, 0:r0_13 -# 2201| mu2201_36(unknown) = ^CallSideEffect : ~m? +# 2215| r2215_35(bool) = Call[operator!=] : func:r2215_29, this:r0_7, 0:r0_13 +# 2215| mu2215_36(unknown) = ^CallSideEffect : ~m? #-----| v0_14(void) = ^IndirectReadSideEffect[-1] : &:r0_7, ~m? -# 2201| v2201_37(void) = ConditionalBranch : r2201_35 +# 2215| v2215_37(void) = ConditionalBranch : r2215_35 #-----| False -> Block 14 #-----| True -> Block 12 -# 2201| Block 12 -# 2201| r2201_38(glval) = VariableAddress[y] : -# 2201| r2201_39(glval>) = VariableAddress[(__begin)] : -#-----| r0_15(glval>) = Convert : r2201_39 -# 2201| r2201_40(glval) = FunctionAddress[operator*] : -# 2201| r2201_41(ClassWithDestructor &) = Call[operator*] : func:r2201_40, this:r0_15 -# 2201| mu2201_42(unknown) = ^CallSideEffect : ~m? -#-----| v0_16(void) = ^IndirectReadSideEffect[-1] : &:r0_15, ~m? -# 2201| r2201_43(ClassWithDestructor) = Load[?] : &:r2201_41, ~m? -# 2201| mu2201_44(ClassWithDestructor) = Store[y] : &:r2201_38, r2201_43 -# 2202| r2202_1(glval) = VariableAddress[y] : -# 2202| r2202_2(glval) = FunctionAddress[set_x] : -# 2202| r2202_3(char) = Constant[97] : -# 2202| v2202_4(void) = Call[set_x] : func:r2202_2, this:r2202_1, 0:r2202_3 -# 2202| mu2202_5(unknown) = ^CallSideEffect : ~m? -# 2202| v2202_6(void) = ^IndirectReadSideEffect[-1] : &:r2202_1, ~m? -# 2202| mu2202_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2202_1 -# 2201| r2201_45(glval) = VariableAddress[y] : -# 2201| r2201_46(glval) = FunctionAddress[~ClassWithDestructor] : -# 2201| v2201_47(void) = Call[~ClassWithDestructor] : func:r2201_46, this:r2201_45 -# 2201| mu2201_48(unknown) = ^CallSideEffect : ~m? -# 2201| v2201_49(void) = ^IndirectReadSideEffect[-1] : &:r2201_45, ~m? -# 2201| mu2201_50(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2201_45 -# 2201| r2201_51(glval>) = VariableAddress[(__begin)] : -# 2201| r2201_52(glval) = FunctionAddress[operator++] : -# 2201| r2201_53(iterator &) = Call[operator++] : func:r2201_52, this:r2201_51 -# 2201| mu2201_54(unknown) = ^CallSideEffect : ~m? -# 2201| v2201_55(void) = ^IndirectReadSideEffect[-1] : &:r2201_51, ~m? -# 2201| mu2201_56(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r2201_51 -# 2201| r2201_57(glval>) = CopyValue : r2201_53 -#-----| Goto (back edge) -> Block 11 - -# 2201| Block 13 -# 2201| r2201_58(glval>) = VariableAddress[ys] : -# 2201| r2201_59(glval) = FunctionAddress[~vector] : -# 2201| v2201_60(void) = Call[~vector] : func:r2201_59, this:r2201_58 -# 2201| mu2201_61(unknown) = ^CallSideEffect : ~m? -# 2201| v2201_62(void) = ^IndirectReadSideEffect[-1] : &:r2201_58, ~m? -# 2201| mu2201_63(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2201_58 -#-----| Goto -> Block 14 - -# 2204| Block 14 -# 2204| r2204_1(glval>) = VariableAddress[ys] : -# 2204| mu2204_2(vector) = Uninitialized[ys] : &:r2204_1 -# 2204| r2204_3(glval) = FunctionAddress[vector] : -# 2204| r2204_4(glval) = VariableAddress[#temp2204:45] : -# 2204| r2204_5(glval) = VariableAddress[x] : -# 2204| r2204_6(ClassWithDestructor) = Load[x] : &:r2204_5, ~m? -# 2204| mu2204_7(ClassWithDestructor) = Store[#temp2204:45] : &:r2204_4, r2204_6 -# 2204| r2204_8(ClassWithDestructor) = Load[#temp2204:45] : &:r2204_4, ~m? -# 2204| v2204_9(void) = Call[vector] : func:r2204_3, this:r2204_1, 0:r2204_8 -# 2204| mu2204_10(unknown) = ^CallSideEffect : ~m? -# 2204| mu2204_11(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2204_1 -# 2204| r2204_12(glval &>) = VariableAddress[(__range)] : -# 2204| r2204_13(glval>) = VariableAddress[ys] : -# 2204| r2204_14(vector &) = CopyValue : r2204_13 -# 2204| mu2204_15(vector &) = Store[(__range)] : &:r2204_12, r2204_14 -# 2204| r2204_16(glval>) = VariableAddress[(__begin)] : -# 2204| r2204_17(glval &>) = VariableAddress[(__range)] : -# 2204| r2204_18(vector &) = Load[(__range)] : &:r2204_17, ~m? -#-----| r0_17(glval>) = CopyValue : r2204_18 -#-----| r0_18(glval>) = Convert : r0_17 -# 2204| r2204_19(glval) = FunctionAddress[begin] : -# 2204| r2204_20(iterator) = Call[begin] : func:r2204_19, this:r0_18 -#-----| v0_19(void) = ^IndirectReadSideEffect[-1] : &:r0_18, ~m? -# 2204| mu2204_21(iterator) = Store[(__begin)] : &:r2204_16, r2204_20 -# 2204| r2204_22(glval>) = VariableAddress[(__end)] : -# 2204| r2204_23(glval &>) = VariableAddress[(__range)] : -# 2204| r2204_24(vector &) = Load[(__range)] : &:r2204_23, ~m? -#-----| r0_20(glval>) = CopyValue : r2204_24 -#-----| r0_21(glval>) = Convert : r0_20 -# 2204| r2204_25(glval) = FunctionAddress[end] : -# 2204| r2204_26(iterator) = Call[end] : func:r2204_25, this:r0_21 -#-----| v0_22(void) = ^IndirectReadSideEffect[-1] : &:r0_21, ~m? -# 2204| mu2204_27(iterator) = Store[(__end)] : &:r2204_22, r2204_26 -#-----| Goto -> Block 15 - -# 2204| Block 15 -# 2204| r2204_28(glval>) = VariableAddress[(__begin)] : -#-----| r0_23(glval>) = Convert : r2204_28 -# 2204| r2204_29(glval) = FunctionAddress[operator!=] : -#-----| r0_24(glval>) = VariableAddress[#temp0:0] : -#-----| mu0_25(iterator) = Uninitialized[#temp0:0] : &:r0_24 -# 2204| r2204_30(glval) = FunctionAddress[iterator] : -# 2204| r2204_31(glval>) = VariableAddress[(__end)] : -#-----| r0_26(glval>) = Convert : r2204_31 -#-----| r0_27(iterator &) = CopyValue : r0_26 -# 2204| v2204_32(void) = Call[iterator] : func:r2204_30, this:r0_24, 0:r0_27 -# 2204| mu2204_33(unknown) = ^CallSideEffect : ~m? -#-----| v0_28(void) = ^BufferReadSideEffect[0] : &:r0_27, ~m? -# 2204| mu2204_34(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r0_24 -#-----| r0_29(iterator) = Load[#temp0:0] : &:r0_24, ~m? -# 2204| r2204_35(bool) = Call[operator!=] : func:r2204_29, this:r0_23, 0:r0_29 -# 2204| mu2204_36(unknown) = ^CallSideEffect : ~m? -#-----| v0_30(void) = ^IndirectReadSideEffect[-1] : &:r0_23, ~m? -# 2204| v2204_37(void) = ConditionalBranch : r2204_35 -#-----| False -> Block 20 -#-----| True -> Block 16 - -# 2204| Block 16 -# 2204| r2204_38(glval) = VariableAddress[y] : -# 2204| r2204_39(glval>) = VariableAddress[(__begin)] : -#-----| r0_31(glval>) = Convert : r2204_39 -# 2204| r2204_40(glval) = FunctionAddress[operator*] : -# 2204| r2204_41(ClassWithDestructor &) = Call[operator*] : func:r2204_40, this:r0_31 -# 2204| mu2204_42(unknown) = ^CallSideEffect : ~m? -#-----| v0_32(void) = ^IndirectReadSideEffect[-1] : &:r0_31, ~m? -# 2204| r2204_43(ClassWithDestructor) = Load[?] : &:r2204_41, ~m? -# 2204| mu2204_44(ClassWithDestructor) = Store[y] : &:r2204_38, r2204_43 -# 2205| r2205_1(glval) = VariableAddress[y] : -# 2205| r2205_2(glval) = FunctionAddress[set_x] : -# 2205| r2205_3(char) = Constant[97] : -# 2205| v2205_4(void) = Call[set_x] : func:r2205_2, this:r2205_1, 0:r2205_3 -# 2205| mu2205_5(unknown) = ^CallSideEffect : ~m? -# 2205| v2205_6(void) = ^IndirectReadSideEffect[-1] : &:r2205_1, ~m? -# 2205| mu2205_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2205_1 -# 2206| r2206_1(glval) = VariableAddress[y] : -# 2206| r2206_2(glval) = FunctionAddress[get_x] : -# 2206| r2206_3(char) = Call[get_x] : func:r2206_2, this:r2206_1 -# 2206| mu2206_4(unknown) = ^CallSideEffect : ~m? -# 2206| v2206_5(void) = ^IndirectReadSideEffect[-1] : &:r2206_1, ~m? -# 2206| mu2206_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2206_1 -# 2206| r2206_7(int) = Convert : r2206_3 -# 2206| r2206_8(int) = Constant[98] : -# 2206| r2206_9(bool) = CompareEQ : r2206_7, r2206_8 -# 2206| v2206_10(void) = ConditionalBranch : r2206_9 -#-----| False -> Block 18 -#-----| True -> Block 17 - -# 2207| Block 17 -# 2207| v2207_1(void) = NoOp : -# 2204| r2204_45(glval) = VariableAddress[y] : -# 2204| r2204_46(glval) = FunctionAddress[~ClassWithDestructor] : -# 2204| v2204_47(void) = Call[~ClassWithDestructor] : func:r2204_46, this:r2204_45 -# 2204| mu2204_48(unknown) = ^CallSideEffect : ~m? -# 2204| v2204_49(void) = ^IndirectReadSideEffect[-1] : &:r2204_45, ~m? -# 2204| mu2204_50(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2204_45 -# 2204| r2204_51(glval>) = VariableAddress[ys] : -# 2204| r2204_52(glval) = FunctionAddress[~vector] : -# 2204| v2204_53(void) = Call[~vector] : func:r2204_52, this:r2204_51 -# 2204| mu2204_54(unknown) = ^CallSideEffect : ~m? -# 2204| v2204_55(void) = ^IndirectReadSideEffect[-1] : &:r2204_51, ~m? -# 2204| mu2204_56(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2204_51 -# 2219| r2219_1(glval) = VariableAddress[x] : -# 2219| r2219_2(glval) = FunctionAddress[~ClassWithDestructor] : -# 2219| v2219_3(void) = Call[~ClassWithDestructor] : func:r2219_2, this:r2219_1 -# 2219| mu2219_4(unknown) = ^CallSideEffect : ~m? -# 2219| v2219_5(void) = ^IndirectReadSideEffect[-1] : &:r2219_1, ~m? -# 2219| mu2219_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2219_1 -#-----| Goto -> Block 1 - -# 2204| Block 18 -# 2204| r2204_57(glval) = VariableAddress[y] : -# 2204| r2204_58(glval) = FunctionAddress[~ClassWithDestructor] : -# 2204| v2204_59(void) = Call[~ClassWithDestructor] : func:r2204_58, this:r2204_57 -# 2204| mu2204_60(unknown) = ^CallSideEffect : ~m? -# 2204| v2204_61(void) = ^IndirectReadSideEffect[-1] : &:r2204_57, ~m? -# 2204| mu2204_62(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2204_57 -# 2204| r2204_63(glval>) = VariableAddress[(__begin)] : -# 2204| r2204_64(glval) = FunctionAddress[operator++] : -# 2204| r2204_65(iterator &) = Call[operator++] : func:r2204_64, this:r2204_63 -# 2204| mu2204_66(unknown) = ^CallSideEffect : ~m? -# 2204| v2204_67(void) = ^IndirectReadSideEffect[-1] : &:r2204_63, ~m? -# 2204| mu2204_68(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r2204_63 -# 2204| r2204_69(glval>) = CopyValue : r2204_65 -#-----| Goto (back edge) -> Block 15 - -# 2204| Block 19 -# 2204| r2204_70(glval>) = VariableAddress[ys] : -# 2204| r2204_71(glval) = FunctionAddress[~vector] : -# 2204| v2204_72(void) = Call[~vector] : func:r2204_71, this:r2204_70 -# 2204| mu2204_73(unknown) = ^CallSideEffect : ~m? -# 2204| v2204_74(void) = ^IndirectReadSideEffect[-1] : &:r2204_70, ~m? -# 2204| mu2204_75(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2204_70 -#-----| Goto -> Block 20 - -# 2210| Block 20 -# 2210| r2210_1(glval>) = VariableAddress[ys] : -# 2210| mu2210_2(vector) = Uninitialized[ys] : &:r2210_1 -# 2210| r2210_3(glval) = FunctionAddress[vector] : -# 2210| r2210_4(int) = Constant[1] : -# 2210| v2210_5(void) = Call[vector] : func:r2210_3, this:r2210_1, 0:r2210_4 -# 2210| mu2210_6(unknown) = ^CallSideEffect : ~m? -# 2210| mu2210_7(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2210_1 -# 2210| r2210_8(glval &>) = VariableAddress[(__range)] : -# 2210| r2210_9(glval>) = VariableAddress[ys] : -# 2210| r2210_10(vector &) = CopyValue : r2210_9 -# 2210| mu2210_11(vector &) = Store[(__range)] : &:r2210_8, r2210_10 -# 2210| r2210_12(glval>) = VariableAddress[(__begin)] : -# 2210| r2210_13(glval &>) = VariableAddress[(__range)] : -# 2210| r2210_14(vector &) = Load[(__range)] : &:r2210_13, ~m? -#-----| r0_33(glval>) = CopyValue : r2210_14 -#-----| r0_34(glval>) = Convert : r0_33 -# 2210| r2210_15(glval) = FunctionAddress[begin] : -# 2210| r2210_16(iterator) = Call[begin] : func:r2210_15, this:r0_34 -#-----| v0_35(void) = ^IndirectReadSideEffect[-1] : &:r0_34, ~m? -# 2210| mu2210_17(iterator) = Store[(__begin)] : &:r2210_12, r2210_16 -# 2210| r2210_18(glval>) = VariableAddress[(__end)] : -# 2210| r2210_19(glval &>) = VariableAddress[(__range)] : -# 2210| r2210_20(vector &) = Load[(__range)] : &:r2210_19, ~m? -#-----| r0_36(glval>) = CopyValue : r2210_20 -#-----| r0_37(glval>) = Convert : r0_36 -# 2210| r2210_21(glval) = FunctionAddress[end] : -# 2210| r2210_22(iterator) = Call[end] : func:r2210_21, this:r0_37 -#-----| v0_38(void) = ^IndirectReadSideEffect[-1] : &:r0_37, ~m? -# 2210| mu2210_23(iterator) = Store[(__end)] : &:r2210_18, r2210_22 -#-----| Goto -> Block 21 - -# 2210| Block 21 -# 2210| r2210_24(glval>) = VariableAddress[(__begin)] : -#-----| r0_39(glval>) = Convert : r2210_24 -# 2210| r2210_25(glval) = FunctionAddress[operator!=] : -#-----| r0_40(glval>) = VariableAddress[#temp0:0] : -#-----| mu0_41(iterator) = Uninitialized[#temp0:0] : &:r0_40 -# 2210| r2210_26(glval) = FunctionAddress[iterator] : -# 2210| r2210_27(glval>) = VariableAddress[(__end)] : -#-----| r0_42(glval>) = Convert : r2210_27 -#-----| r0_43(iterator &) = CopyValue : r0_42 -# 2210| v2210_28(void) = Call[iterator] : func:r2210_26, this:r0_40, 0:r0_43 -# 2210| mu2210_29(unknown) = ^CallSideEffect : ~m? -#-----| v0_44(void) = ^BufferReadSideEffect[0] : &:r0_43, ~m? -# 2210| mu2210_30(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r0_40 -#-----| r0_45(iterator) = Load[#temp0:0] : &:r0_40, ~m? -# 2210| r2210_31(bool) = Call[operator!=] : func:r2210_25, this:r0_39, 0:r0_45 -# 2210| mu2210_32(unknown) = ^CallSideEffect : ~m? -#-----| v0_46(void) = ^IndirectReadSideEffect[-1] : &:r0_39, ~m? -# 2210| v2210_33(void) = ConditionalBranch : r2210_31 -#-----| False -> Block 26 -#-----| True -> Block 23 - -# 2210| Block 22 -# 2210| r2210_34(glval>) = VariableAddress[(__begin)] : -# 2210| r2210_35(glval) = FunctionAddress[operator++] : -# 2210| r2210_36(iterator &) = Call[operator++] : func:r2210_35, this:r2210_34 -# 2210| mu2210_37(unknown) = ^CallSideEffect : ~m? -# 2210| v2210_38(void) = ^IndirectReadSideEffect[-1] : &:r2210_34, ~m? -# 2210| mu2210_39(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r2210_34 -# 2210| r2210_40(glval>) = CopyValue : r2210_36 -#-----| Goto (back edge) -> Block 21 - -# 2210| Block 23 -# 2210| r2210_41(glval) = VariableAddress[y] : -# 2210| r2210_42(glval>) = VariableAddress[(__begin)] : -#-----| r0_47(glval>) = Convert : r2210_42 -# 2210| r2210_43(glval) = FunctionAddress[operator*] : -# 2210| r2210_44(int &) = Call[operator*] : func:r2210_43, this:r0_47 -# 2210| mu2210_45(unknown) = ^CallSideEffect : ~m? -#-----| v0_48(void) = ^IndirectReadSideEffect[-1] : &:r0_47, ~m? -# 2210| r2210_46(int) = Load[?] : &:r2210_44, ~m? -# 2210| mu2210_47(int) = Store[y] : &:r2210_41, r2210_46 -# 2211| r2211_1(glval) = VariableAddress[y] : -# 2211| r2211_2(int) = Load[y] : &:r2211_1, ~m? -# 2211| r2211_3(int) = Constant[1] : -# 2211| r2211_4(bool) = CompareEQ : r2211_2, r2211_3 -# 2211| v2211_5(void) = ConditionalBranch : r2211_4 -#-----| False -> Block 22 -#-----| True -> Block 24 - -# 2212| Block 24 -# 2212| v2212_1(void) = NoOp : -# 2210| r2210_48(glval>) = VariableAddress[ys] : -# 2210| r2210_49(glval) = FunctionAddress[~vector] : -# 2210| v2210_50(void) = Call[~vector] : func:r2210_49, this:r2210_48 -# 2210| mu2210_51(unknown) = ^CallSideEffect : ~m? -# 2210| v2210_52(void) = ^IndirectReadSideEffect[-1] : &:r2210_48, ~m? -# 2210| mu2210_53(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2210_48 -# 2219| r2219_7(glval) = VariableAddress[x] : -# 2219| r2219_8(glval) = FunctionAddress[~ClassWithDestructor] : -# 2219| v2219_9(void) = Call[~ClassWithDestructor] : func:r2219_8, this:r2219_7 -# 2219| mu2219_10(unknown) = ^CallSideEffect : ~m? -# 2219| v2219_11(void) = ^IndirectReadSideEffect[-1] : &:r2219_7, ~m? -# 2219| mu2219_12(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2219_7 -#-----| Goto -> Block 1 - -# 2210| Block 25 -# 2210| r2210_54(glval>) = VariableAddress[ys] : -# 2210| r2210_55(glval) = FunctionAddress[~vector] : -# 2210| v2210_56(void) = Call[~vector] : func:r2210_55, this:r2210_54 -# 2210| mu2210_57(unknown) = ^CallSideEffect : ~m? -# 2210| v2210_58(void) = ^IndirectReadSideEffect[-1] : &:r2210_54, ~m? -# 2210| mu2210_59(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2210_54 -#-----| Goto -> Block 26 - -# 2215| Block 26 -# 2215| r2215_1(glval>) = VariableAddress[ys] : -# 2215| mu2215_2(vector) = Uninitialized[ys] : &:r2215_1 -# 2215| r2215_3(glval) = FunctionAddress[vector] : -# 2215| r2215_4(glval) = VariableAddress[#temp2215:45] : -# 2215| r2215_5(glval) = VariableAddress[x] : -# 2215| r2215_6(ClassWithDestructor) = Load[x] : &:r2215_5, ~m? -# 2215| mu2215_7(ClassWithDestructor) = Store[#temp2215:45] : &:r2215_4, r2215_6 -# 2215| r2215_8(ClassWithDestructor) = Load[#temp2215:45] : &:r2215_4, ~m? -# 2215| v2215_9(void) = Call[vector] : func:r2215_3, this:r2215_1, 0:r2215_8 -# 2215| mu2215_10(unknown) = ^CallSideEffect : ~m? -# 2215| mu2215_11(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2215_1 -# 2215| r2215_12(glval &>) = VariableAddress[(__range)] : -# 2215| r2215_13(glval>) = VariableAddress[ys] : -# 2215| r2215_14(vector &) = CopyValue : r2215_13 -# 2215| mu2215_15(vector &) = Store[(__range)] : &:r2215_12, r2215_14 -# 2215| r2215_16(glval>) = VariableAddress[(__begin)] : -# 2215| r2215_17(glval &>) = VariableAddress[(__range)] : -# 2215| r2215_18(vector &) = Load[(__range)] : &:r2215_17, ~m? -#-----| r0_49(glval>) = CopyValue : r2215_18 -#-----| r0_50(glval>) = Convert : r0_49 -# 2215| r2215_19(glval) = FunctionAddress[begin] : -# 2215| r2215_20(iterator) = Call[begin] : func:r2215_19, this:r0_50 -#-----| v0_51(void) = ^IndirectReadSideEffect[-1] : &:r0_50, ~m? -# 2215| mu2215_21(iterator) = Store[(__begin)] : &:r2215_16, r2215_20 -# 2215| r2215_22(glval>) = VariableAddress[(__end)] : -# 2215| r2215_23(glval &>) = VariableAddress[(__range)] : -# 2215| r2215_24(vector &) = Load[(__range)] : &:r2215_23, ~m? -#-----| r0_52(glval>) = CopyValue : r2215_24 -#-----| r0_53(glval>) = Convert : r0_52 -# 2215| r2215_25(glval) = FunctionAddress[end] : -# 2215| r2215_26(iterator) = Call[end] : func:r2215_25, this:r0_53 -#-----| v0_54(void) = ^IndirectReadSideEffect[-1] : &:r0_53, ~m? -# 2215| mu2215_27(iterator) = Store[(__end)] : &:r2215_22, r2215_26 -#-----| Goto -> Block 27 - -# 2215| Block 27 -# 2215| r2215_28(glval>) = VariableAddress[(__begin)] : -#-----| r0_55(glval>) = Convert : r2215_28 -# 2215| r2215_29(glval) = FunctionAddress[operator!=] : -#-----| r0_56(glval>) = VariableAddress[#temp0:0] : -#-----| mu0_57(iterator) = Uninitialized[#temp0:0] : &:r0_56 -# 2215| r2215_30(glval) = FunctionAddress[iterator] : -# 2215| r2215_31(glval>) = VariableAddress[(__end)] : -#-----| r0_58(glval>) = Convert : r2215_31 -#-----| r0_59(iterator &) = CopyValue : r0_58 -# 2215| v2215_32(void) = Call[iterator] : func:r2215_30, this:r0_56, 0:r0_59 -# 2215| mu2215_33(unknown) = ^CallSideEffect : ~m? -#-----| v0_60(void) = ^BufferReadSideEffect[0] : &:r0_59, ~m? -# 2215| mu2215_34(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r0_56 -#-----| r0_61(iterator) = Load[#temp0:0] : &:r0_56, ~m? -# 2215| r2215_35(bool) = Call[operator!=] : func:r2215_29, this:r0_55, 0:r0_61 -# 2215| mu2215_36(unknown) = ^CallSideEffect : ~m? -#-----| v0_62(void) = ^IndirectReadSideEffect[-1] : &:r0_55, ~m? -# 2215| v2215_37(void) = ConditionalBranch : r2215_35 -#-----| False -> Block 30 -#-----| True -> Block 28 - -# 2215| Block 28 +# 2215| Block 12 # 2215| r2215_38(glval) = VariableAddress[y] : # 2215| r2215_39(glval>) = VariableAddress[(__begin)] : -#-----| r0_63(glval>) = Convert : r2215_39 +#-----| r0_15(glval>) = Convert : r2215_39 # 2215| r2215_40(glval) = FunctionAddress[operator*] : -# 2215| r2215_41(ClassWithDestructor &) = Call[operator*] : func:r2215_40, this:r0_63 +# 2215| r2215_41(ClassWithDestructor &) = Call[operator*] : func:r2215_40, this:r0_15 # 2215| mu2215_42(unknown) = ^CallSideEffect : ~m? -#-----| v0_64(void) = ^IndirectReadSideEffect[-1] : &:r0_63, ~m? +#-----| v0_16(void) = ^IndirectReadSideEffect[-1] : &:r0_15, ~m? # 2215| r2215_43(ClassWithDestructor) = Load[?] : &:r2215_41, ~m? # 2215| mu2215_44(ClassWithDestructor) = Store[y] : &:r2215_38, r2215_43 -# 2216| r2216_1(glval) = VariableAddress[z1] : -# 2216| mu2216_2(ClassWithDestructor) = Uninitialized[z1] : &:r2216_1 -# 2216| r2216_3(glval) = FunctionAddress[ClassWithDestructor] : -# 2216| v2216_4(void) = Call[ClassWithDestructor] : func:r2216_3, this:r2216_1 +# 2216| r2216_1(glval) = VariableAddress[y] : +# 2216| r2216_2(glval) = FunctionAddress[set_x] : +# 2216| r2216_3(char) = Constant[97] : +# 2216| v2216_4(void) = Call[set_x] : func:r2216_2, this:r2216_1, 0:r2216_3 # 2216| mu2216_5(unknown) = ^CallSideEffect : ~m? -# 2216| mu2216_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2216_1 -# 2217| r2217_1(glval) = VariableAddress[z2] : -# 2217| mu2217_2(ClassWithDestructor) = Uninitialized[z2] : &:r2217_1 -# 2217| r2217_3(glval) = FunctionAddress[ClassWithDestructor] : -# 2217| v2217_4(void) = Call[ClassWithDestructor] : func:r2217_3, this:r2217_1 -# 2217| mu2217_5(unknown) = ^CallSideEffect : ~m? -# 2217| mu2217_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2217_1 -# 2218| r2218_1(glval) = VariableAddress[z2] : -# 2218| r2218_2(glval) = FunctionAddress[~ClassWithDestructor] : -# 2218| v2218_3(void) = Call[~ClassWithDestructor] : func:r2218_2, this:r2218_1 -# 2218| mu2218_4(unknown) = ^CallSideEffect : ~m? -# 2218| v2218_5(void) = ^IndirectReadSideEffect[-1] : &:r2218_1, ~m? -# 2218| mu2218_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2218_1 -# 2218| r2218_7(glval) = VariableAddress[z1] : -# 2218| r2218_8(glval) = FunctionAddress[~ClassWithDestructor] : -# 2218| v2218_9(void) = Call[~ClassWithDestructor] : func:r2218_8, this:r2218_7 -# 2218| mu2218_10(unknown) = ^CallSideEffect : ~m? -# 2218| v2218_11(void) = ^IndirectReadSideEffect[-1] : &:r2218_7, ~m? -# 2218| mu2218_12(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2218_7 +# 2216| v2216_6(void) = ^IndirectReadSideEffect[-1] : &:r2216_1, ~m? +# 2216| mu2216_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2216_1 # 2215| r2215_45(glval) = VariableAddress[y] : # 2215| r2215_46(glval) = FunctionAddress[~ClassWithDestructor] : # 2215| v2215_47(void) = Call[~ClassWithDestructor] : func:r2215_46, this:r2215_45 @@ -12911,722 +12656,854 @@ ir.cpp: # 2215| v2215_55(void) = ^IndirectReadSideEffect[-1] : &:r2215_51, ~m? # 2215| mu2215_56(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r2215_51 # 2215| r2215_57(glval>) = CopyValue : r2215_53 -#-----| Goto (back edge) -> Block 27 +#-----| Goto (back edge) -> Block 11 -# 2215| Block 29 +# 2215| Block 13 # 2215| r2215_58(glval>) = VariableAddress[ys] : # 2215| r2215_59(glval) = FunctionAddress[~vector] : # 2215| v2215_60(void) = Call[~vector] : func:r2215_59, this:r2215_58 # 2215| mu2215_61(unknown) = ^CallSideEffect : ~m? # 2215| v2215_62(void) = ^IndirectReadSideEffect[-1] : &:r2215_58, ~m? # 2215| mu2215_63(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2215_58 -#-----| Goto -> Block 30 +#-----| Goto -> Block 14 -# 2219| Block 30 -# 2219| v2219_13(void) = NoOp : -# 2219| r2219_14(glval) = VariableAddress[x] : -# 2219| r2219_15(glval) = FunctionAddress[~ClassWithDestructor] : -# 2219| v2219_16(void) = Call[~ClassWithDestructor] : func:r2219_15, this:r2219_14 -# 2219| mu2219_17(unknown) = ^CallSideEffect : ~m? -# 2219| v2219_18(void) = ^IndirectReadSideEffect[-1] : &:r2219_14, ~m? -# 2219| mu2219_19(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2219_14 +# 2218| Block 14 +# 2218| r2218_1(glval>) = VariableAddress[ys] : +# 2218| mu2218_2(vector) = Uninitialized[ys] : &:r2218_1 +# 2218| r2218_3(glval) = FunctionAddress[vector] : +# 2218| r2218_4(glval) = VariableAddress[#temp2218:45] : +# 2218| r2218_5(glval) = VariableAddress[x] : +# 2218| r2218_6(ClassWithDestructor) = Load[x] : &:r2218_5, ~m? +# 2218| mu2218_7(ClassWithDestructor) = Store[#temp2218:45] : &:r2218_4, r2218_6 +# 2218| r2218_8(ClassWithDestructor) = Load[#temp2218:45] : &:r2218_4, ~m? +# 2218| v2218_9(void) = Call[vector] : func:r2218_3, this:r2218_1, 0:r2218_8 +# 2218| mu2218_10(unknown) = ^CallSideEffect : ~m? +# 2218| mu2218_11(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2218_1 +# 2218| r2218_12(glval &>) = VariableAddress[(__range)] : +# 2218| r2218_13(glval>) = VariableAddress[ys] : +# 2218| r2218_14(vector &) = CopyValue : r2218_13 +# 2218| mu2218_15(vector &) = Store[(__range)] : &:r2218_12, r2218_14 +# 2218| r2218_16(glval>) = VariableAddress[(__begin)] : +# 2218| r2218_17(glval &>) = VariableAddress[(__range)] : +# 2218| r2218_18(vector &) = Load[(__range)] : &:r2218_17, ~m? +#-----| r0_17(glval>) = CopyValue : r2218_18 +#-----| r0_18(glval>) = Convert : r0_17 +# 2218| r2218_19(glval) = FunctionAddress[begin] : +# 2218| r2218_20(iterator) = Call[begin] : func:r2218_19, this:r0_18 +#-----| v0_19(void) = ^IndirectReadSideEffect[-1] : &:r0_18, ~m? +# 2218| mu2218_21(iterator) = Store[(__begin)] : &:r2218_16, r2218_20 +# 2218| r2218_22(glval>) = VariableAddress[(__end)] : +# 2218| r2218_23(glval &>) = VariableAddress[(__range)] : +# 2218| r2218_24(vector &) = Load[(__range)] : &:r2218_23, ~m? +#-----| r0_20(glval>) = CopyValue : r2218_24 +#-----| r0_21(glval>) = Convert : r0_20 +# 2218| r2218_25(glval) = FunctionAddress[end] : +# 2218| r2218_26(iterator) = Call[end] : func:r2218_25, this:r0_21 +#-----| v0_22(void) = ^IndirectReadSideEffect[-1] : &:r0_21, ~m? +# 2218| mu2218_27(iterator) = Store[(__end)] : &:r2218_22, r2218_26 +#-----| Goto -> Block 15 + +# 2218| Block 15 +# 2218| r2218_28(glval>) = VariableAddress[(__begin)] : +#-----| r0_23(glval>) = Convert : r2218_28 +# 2218| r2218_29(glval) = FunctionAddress[operator!=] : +#-----| r0_24(glval>) = VariableAddress[#temp0:0] : +#-----| mu0_25(iterator) = Uninitialized[#temp0:0] : &:r0_24 +# 2218| r2218_30(glval) = FunctionAddress[iterator] : +# 2218| r2218_31(glval>) = VariableAddress[(__end)] : +#-----| r0_26(glval>) = Convert : r2218_31 +#-----| r0_27(iterator &) = CopyValue : r0_26 +# 2218| v2218_32(void) = Call[iterator] : func:r2218_30, this:r0_24, 0:r0_27 +# 2218| mu2218_33(unknown) = ^CallSideEffect : ~m? +#-----| v0_28(void) = ^BufferReadSideEffect[0] : &:r0_27, ~m? +# 2218| mu2218_34(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r0_24 +#-----| r0_29(iterator) = Load[#temp0:0] : &:r0_24, ~m? +# 2218| r2218_35(bool) = Call[operator!=] : func:r2218_29, this:r0_23, 0:r0_29 +# 2218| mu2218_36(unknown) = ^CallSideEffect : ~m? +#-----| v0_30(void) = ^IndirectReadSideEffect[-1] : &:r0_23, ~m? +# 2218| v2218_37(void) = ConditionalBranch : r2218_35 +#-----| False -> Block 20 +#-----| True -> Block 16 + +# 2218| Block 16 +# 2218| r2218_38(glval) = VariableAddress[y] : +# 2218| r2218_39(glval>) = VariableAddress[(__begin)] : +#-----| r0_31(glval>) = Convert : r2218_39 +# 2218| r2218_40(glval) = FunctionAddress[operator*] : +# 2218| r2218_41(ClassWithDestructor &) = Call[operator*] : func:r2218_40, this:r0_31 +# 2218| mu2218_42(unknown) = ^CallSideEffect : ~m? +#-----| v0_32(void) = ^IndirectReadSideEffect[-1] : &:r0_31, ~m? +# 2218| r2218_43(ClassWithDestructor) = Load[?] : &:r2218_41, ~m? +# 2218| mu2218_44(ClassWithDestructor) = Store[y] : &:r2218_38, r2218_43 +# 2219| r2219_1(glval) = VariableAddress[y] : +# 2219| r2219_2(glval) = FunctionAddress[set_x] : +# 2219| r2219_3(char) = Constant[97] : +# 2219| v2219_4(void) = Call[set_x] : func:r2219_2, this:r2219_1, 0:r2219_3 +# 2219| mu2219_5(unknown) = ^CallSideEffect : ~m? +# 2219| v2219_6(void) = ^IndirectReadSideEffect[-1] : &:r2219_1, ~m? +# 2219| mu2219_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2219_1 +# 2220| r2220_1(glval) = VariableAddress[y] : +# 2220| r2220_2(glval) = FunctionAddress[get_x] : +# 2220| r2220_3(char) = Call[get_x] : func:r2220_2, this:r2220_1 +# 2220| mu2220_4(unknown) = ^CallSideEffect : ~m? +# 2220| v2220_5(void) = ^IndirectReadSideEffect[-1] : &:r2220_1, ~m? +# 2220| mu2220_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2220_1 +# 2220| r2220_7(int) = Convert : r2220_3 +# 2220| r2220_8(int) = Constant[98] : +# 2220| r2220_9(bool) = CompareEQ : r2220_7, r2220_8 +# 2220| v2220_10(void) = ConditionalBranch : r2220_9 +#-----| False -> Block 18 +#-----| True -> Block 17 + +# 2221| Block 17 +# 2221| v2221_1(void) = NoOp : +# 2218| r2218_45(glval) = VariableAddress[y] : +# 2218| r2218_46(glval) = FunctionAddress[~ClassWithDestructor] : +# 2218| v2218_47(void) = Call[~ClassWithDestructor] : func:r2218_46, this:r2218_45 +# 2218| mu2218_48(unknown) = ^CallSideEffect : ~m? +# 2218| v2218_49(void) = ^IndirectReadSideEffect[-1] : &:r2218_45, ~m? +# 2218| mu2218_50(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2218_45 +# 2218| r2218_51(glval>) = VariableAddress[ys] : +# 2218| r2218_52(glval) = FunctionAddress[~vector] : +# 2218| v2218_53(void) = Call[~vector] : func:r2218_52, this:r2218_51 +# 2218| mu2218_54(unknown) = ^CallSideEffect : ~m? +# 2218| v2218_55(void) = ^IndirectReadSideEffect[-1] : &:r2218_51, ~m? +# 2218| mu2218_56(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2218_51 +# 2233| r2233_1(glval) = VariableAddress[x] : +# 2233| r2233_2(glval) = FunctionAddress[~ClassWithDestructor] : +# 2233| v2233_3(void) = Call[~ClassWithDestructor] : func:r2233_2, this:r2233_1 +# 2233| mu2233_4(unknown) = ^CallSideEffect : ~m? +# 2233| v2233_5(void) = ^IndirectReadSideEffect[-1] : &:r2233_1, ~m? +# 2233| mu2233_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2233_1 #-----| Goto -> Block 1 -# 2221| void static_variable_with_destructor_1() -# 2221| Block 0 -# 2221| v2221_1(void) = EnterFunction : -# 2221| mu2221_2(unknown) = AliasedDefinition : -# 2221| mu2221_3(unknown) = InitializeNonLocal : -# 2222| r2222_1(glval) = VariableAddress[a] : -# 2222| mu2222_2(ClassWithDestructor) = Uninitialized[a] : &:r2222_1 -# 2222| r2222_3(glval) = FunctionAddress[ClassWithDestructor] : -# 2222| v2222_4(void) = Call[ClassWithDestructor] : func:r2222_3, this:r2222_1 -# 2222| mu2222_5(unknown) = ^CallSideEffect : ~m? -# 2222| mu2222_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2222_1 -# 2223| r2223_1(glval) = VariableAddress[b#init] : -# 2223| r2223_2(bool) = Load[b#init] : &:r2223_1, ~m? -# 2223| v2223_3(void) = ConditionalBranch : r2223_2 +# 2218| Block 18 +# 2218| r2218_57(glval) = VariableAddress[y] : +# 2218| r2218_58(glval) = FunctionAddress[~ClassWithDestructor] : +# 2218| v2218_59(void) = Call[~ClassWithDestructor] : func:r2218_58, this:r2218_57 +# 2218| mu2218_60(unknown) = ^CallSideEffect : ~m? +# 2218| v2218_61(void) = ^IndirectReadSideEffect[-1] : &:r2218_57, ~m? +# 2218| mu2218_62(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2218_57 +# 2218| r2218_63(glval>) = VariableAddress[(__begin)] : +# 2218| r2218_64(glval) = FunctionAddress[operator++] : +# 2218| r2218_65(iterator &) = Call[operator++] : func:r2218_64, this:r2218_63 +# 2218| mu2218_66(unknown) = ^CallSideEffect : ~m? +# 2218| v2218_67(void) = ^IndirectReadSideEffect[-1] : &:r2218_63, ~m? +# 2218| mu2218_68(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r2218_63 +# 2218| r2218_69(glval>) = CopyValue : r2218_65 +#-----| Goto (back edge) -> Block 15 + +# 2218| Block 19 +# 2218| r2218_70(glval>) = VariableAddress[ys] : +# 2218| r2218_71(glval) = FunctionAddress[~vector] : +# 2218| v2218_72(void) = Call[~vector] : func:r2218_71, this:r2218_70 +# 2218| mu2218_73(unknown) = ^CallSideEffect : ~m? +# 2218| v2218_74(void) = ^IndirectReadSideEffect[-1] : &:r2218_70, ~m? +# 2218| mu2218_75(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2218_70 +#-----| Goto -> Block 20 + +# 2224| Block 20 +# 2224| r2224_1(glval>) = VariableAddress[ys] : +# 2224| mu2224_2(vector) = Uninitialized[ys] : &:r2224_1 +# 2224| r2224_3(glval) = FunctionAddress[vector] : +# 2224| r2224_4(int) = Constant[1] : +# 2224| v2224_5(void) = Call[vector] : func:r2224_3, this:r2224_1, 0:r2224_4 +# 2224| mu2224_6(unknown) = ^CallSideEffect : ~m? +# 2224| mu2224_7(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2224_1 +# 2224| r2224_8(glval &>) = VariableAddress[(__range)] : +# 2224| r2224_9(glval>) = VariableAddress[ys] : +# 2224| r2224_10(vector &) = CopyValue : r2224_9 +# 2224| mu2224_11(vector &) = Store[(__range)] : &:r2224_8, r2224_10 +# 2224| r2224_12(glval>) = VariableAddress[(__begin)] : +# 2224| r2224_13(glval &>) = VariableAddress[(__range)] : +# 2224| r2224_14(vector &) = Load[(__range)] : &:r2224_13, ~m? +#-----| r0_33(glval>) = CopyValue : r2224_14 +#-----| r0_34(glval>) = Convert : r0_33 +# 2224| r2224_15(glval) = FunctionAddress[begin] : +# 2224| r2224_16(iterator) = Call[begin] : func:r2224_15, this:r0_34 +#-----| v0_35(void) = ^IndirectReadSideEffect[-1] : &:r0_34, ~m? +# 2224| mu2224_17(iterator) = Store[(__begin)] : &:r2224_12, r2224_16 +# 2224| r2224_18(glval>) = VariableAddress[(__end)] : +# 2224| r2224_19(glval &>) = VariableAddress[(__range)] : +# 2224| r2224_20(vector &) = Load[(__range)] : &:r2224_19, ~m? +#-----| r0_36(glval>) = CopyValue : r2224_20 +#-----| r0_37(glval>) = Convert : r0_36 +# 2224| r2224_21(glval) = FunctionAddress[end] : +# 2224| r2224_22(iterator) = Call[end] : func:r2224_21, this:r0_37 +#-----| v0_38(void) = ^IndirectReadSideEffect[-1] : &:r0_37, ~m? +# 2224| mu2224_23(iterator) = Store[(__end)] : &:r2224_18, r2224_22 +#-----| Goto -> Block 21 + +# 2224| Block 21 +# 2224| r2224_24(glval>) = VariableAddress[(__begin)] : +#-----| r0_39(glval>) = Convert : r2224_24 +# 2224| r2224_25(glval) = FunctionAddress[operator!=] : +#-----| r0_40(glval>) = VariableAddress[#temp0:0] : +#-----| mu0_41(iterator) = Uninitialized[#temp0:0] : &:r0_40 +# 2224| r2224_26(glval) = FunctionAddress[iterator] : +# 2224| r2224_27(glval>) = VariableAddress[(__end)] : +#-----| r0_42(glval>) = Convert : r2224_27 +#-----| r0_43(iterator &) = CopyValue : r0_42 +# 2224| v2224_28(void) = Call[iterator] : func:r2224_26, this:r0_40, 0:r0_43 +# 2224| mu2224_29(unknown) = ^CallSideEffect : ~m? +#-----| v0_44(void) = ^BufferReadSideEffect[0] : &:r0_43, ~m? +# 2224| mu2224_30(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r0_40 +#-----| r0_45(iterator) = Load[#temp0:0] : &:r0_40, ~m? +# 2224| r2224_31(bool) = Call[operator!=] : func:r2224_25, this:r0_39, 0:r0_45 +# 2224| mu2224_32(unknown) = ^CallSideEffect : ~m? +#-----| v0_46(void) = ^IndirectReadSideEffect[-1] : &:r0_39, ~m? +# 2224| v2224_33(void) = ConditionalBranch : r2224_31 +#-----| False -> Block 26 +#-----| True -> Block 23 + +# 2224| Block 22 +# 2224| r2224_34(glval>) = VariableAddress[(__begin)] : +# 2224| r2224_35(glval) = FunctionAddress[operator++] : +# 2224| r2224_36(iterator &) = Call[operator++] : func:r2224_35, this:r2224_34 +# 2224| mu2224_37(unknown) = ^CallSideEffect : ~m? +# 2224| v2224_38(void) = ^IndirectReadSideEffect[-1] : &:r2224_34, ~m? +# 2224| mu2224_39(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r2224_34 +# 2224| r2224_40(glval>) = CopyValue : r2224_36 +#-----| Goto (back edge) -> Block 21 + +# 2224| Block 23 +# 2224| r2224_41(glval) = VariableAddress[y] : +# 2224| r2224_42(glval>) = VariableAddress[(__begin)] : +#-----| r0_47(glval>) = Convert : r2224_42 +# 2224| r2224_43(glval) = FunctionAddress[operator*] : +# 2224| r2224_44(int &) = Call[operator*] : func:r2224_43, this:r0_47 +# 2224| mu2224_45(unknown) = ^CallSideEffect : ~m? +#-----| v0_48(void) = ^IndirectReadSideEffect[-1] : &:r0_47, ~m? +# 2224| r2224_46(int) = Load[?] : &:r2224_44, ~m? +# 2224| mu2224_47(int) = Store[y] : &:r2224_41, r2224_46 +# 2225| r2225_1(glval) = VariableAddress[y] : +# 2225| r2225_2(int) = Load[y] : &:r2225_1, ~m? +# 2225| r2225_3(int) = Constant[1] : +# 2225| r2225_4(bool) = CompareEQ : r2225_2, r2225_3 +# 2225| v2225_5(void) = ConditionalBranch : r2225_4 +#-----| False -> Block 22 +#-----| True -> Block 24 + +# 2226| Block 24 +# 2226| v2226_1(void) = NoOp : +# 2224| r2224_48(glval>) = VariableAddress[ys] : +# 2224| r2224_49(glval) = FunctionAddress[~vector] : +# 2224| v2224_50(void) = Call[~vector] : func:r2224_49, this:r2224_48 +# 2224| mu2224_51(unknown) = ^CallSideEffect : ~m? +# 2224| v2224_52(void) = ^IndirectReadSideEffect[-1] : &:r2224_48, ~m? +# 2224| mu2224_53(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2224_48 +# 2233| r2233_7(glval) = VariableAddress[x] : +# 2233| r2233_8(glval) = FunctionAddress[~ClassWithDestructor] : +# 2233| v2233_9(void) = Call[~ClassWithDestructor] : func:r2233_8, this:r2233_7 +# 2233| mu2233_10(unknown) = ^CallSideEffect : ~m? +# 2233| v2233_11(void) = ^IndirectReadSideEffect[-1] : &:r2233_7, ~m? +# 2233| mu2233_12(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2233_7 +#-----| Goto -> Block 1 + +# 2224| Block 25 +# 2224| r2224_54(glval>) = VariableAddress[ys] : +# 2224| r2224_55(glval) = FunctionAddress[~vector] : +# 2224| v2224_56(void) = Call[~vector] : func:r2224_55, this:r2224_54 +# 2224| mu2224_57(unknown) = ^CallSideEffect : ~m? +# 2224| v2224_58(void) = ^IndirectReadSideEffect[-1] : &:r2224_54, ~m? +# 2224| mu2224_59(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2224_54 +#-----| Goto -> Block 26 + +# 2229| Block 26 +# 2229| r2229_1(glval>) = VariableAddress[ys] : +# 2229| mu2229_2(vector) = Uninitialized[ys] : &:r2229_1 +# 2229| r2229_3(glval) = FunctionAddress[vector] : +# 2229| r2229_4(glval) = VariableAddress[#temp2229:45] : +# 2229| r2229_5(glval) = VariableAddress[x] : +# 2229| r2229_6(ClassWithDestructor) = Load[x] : &:r2229_5, ~m? +# 2229| mu2229_7(ClassWithDestructor) = Store[#temp2229:45] : &:r2229_4, r2229_6 +# 2229| r2229_8(ClassWithDestructor) = Load[#temp2229:45] : &:r2229_4, ~m? +# 2229| v2229_9(void) = Call[vector] : func:r2229_3, this:r2229_1, 0:r2229_8 +# 2229| mu2229_10(unknown) = ^CallSideEffect : ~m? +# 2229| mu2229_11(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2229_1 +# 2229| r2229_12(glval &>) = VariableAddress[(__range)] : +# 2229| r2229_13(glval>) = VariableAddress[ys] : +# 2229| r2229_14(vector &) = CopyValue : r2229_13 +# 2229| mu2229_15(vector &) = Store[(__range)] : &:r2229_12, r2229_14 +# 2229| r2229_16(glval>) = VariableAddress[(__begin)] : +# 2229| r2229_17(glval &>) = VariableAddress[(__range)] : +# 2229| r2229_18(vector &) = Load[(__range)] : &:r2229_17, ~m? +#-----| r0_49(glval>) = CopyValue : r2229_18 +#-----| r0_50(glval>) = Convert : r0_49 +# 2229| r2229_19(glval) = FunctionAddress[begin] : +# 2229| r2229_20(iterator) = Call[begin] : func:r2229_19, this:r0_50 +#-----| v0_51(void) = ^IndirectReadSideEffect[-1] : &:r0_50, ~m? +# 2229| mu2229_21(iterator) = Store[(__begin)] : &:r2229_16, r2229_20 +# 2229| r2229_22(glval>) = VariableAddress[(__end)] : +# 2229| r2229_23(glval &>) = VariableAddress[(__range)] : +# 2229| r2229_24(vector &) = Load[(__range)] : &:r2229_23, ~m? +#-----| r0_52(glval>) = CopyValue : r2229_24 +#-----| r0_53(glval>) = Convert : r0_52 +# 2229| r2229_25(glval) = FunctionAddress[end] : +# 2229| r2229_26(iterator) = Call[end] : func:r2229_25, this:r0_53 +#-----| v0_54(void) = ^IndirectReadSideEffect[-1] : &:r0_53, ~m? +# 2229| mu2229_27(iterator) = Store[(__end)] : &:r2229_22, r2229_26 +#-----| Goto -> Block 27 + +# 2229| Block 27 +# 2229| r2229_28(glval>) = VariableAddress[(__begin)] : +#-----| r0_55(glval>) = Convert : r2229_28 +# 2229| r2229_29(glval) = FunctionAddress[operator!=] : +#-----| r0_56(glval>) = VariableAddress[#temp0:0] : +#-----| mu0_57(iterator) = Uninitialized[#temp0:0] : &:r0_56 +# 2229| r2229_30(glval) = FunctionAddress[iterator] : +# 2229| r2229_31(glval>) = VariableAddress[(__end)] : +#-----| r0_58(glval>) = Convert : r2229_31 +#-----| r0_59(iterator &) = CopyValue : r0_58 +# 2229| v2229_32(void) = Call[iterator] : func:r2229_30, this:r0_56, 0:r0_59 +# 2229| mu2229_33(unknown) = ^CallSideEffect : ~m? +#-----| v0_60(void) = ^BufferReadSideEffect[0] : &:r0_59, ~m? +# 2229| mu2229_34(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r0_56 +#-----| r0_61(iterator) = Load[#temp0:0] : &:r0_56, ~m? +# 2229| r2229_35(bool) = Call[operator!=] : func:r2229_29, this:r0_55, 0:r0_61 +# 2229| mu2229_36(unknown) = ^CallSideEffect : ~m? +#-----| v0_62(void) = ^IndirectReadSideEffect[-1] : &:r0_55, ~m? +# 2229| v2229_37(void) = ConditionalBranch : r2229_35 +#-----| False -> Block 30 +#-----| True -> Block 28 + +# 2229| Block 28 +# 2229| r2229_38(glval) = VariableAddress[y] : +# 2229| r2229_39(glval>) = VariableAddress[(__begin)] : +#-----| r0_63(glval>) = Convert : r2229_39 +# 2229| r2229_40(glval) = FunctionAddress[operator*] : +# 2229| r2229_41(ClassWithDestructor &) = Call[operator*] : func:r2229_40, this:r0_63 +# 2229| mu2229_42(unknown) = ^CallSideEffect : ~m? +#-----| v0_64(void) = ^IndirectReadSideEffect[-1] : &:r0_63, ~m? +# 2229| r2229_43(ClassWithDestructor) = Load[?] : &:r2229_41, ~m? +# 2229| mu2229_44(ClassWithDestructor) = Store[y] : &:r2229_38, r2229_43 +# 2230| r2230_1(glval) = VariableAddress[z1] : +# 2230| mu2230_2(ClassWithDestructor) = Uninitialized[z1] : &:r2230_1 +# 2230| r2230_3(glval) = FunctionAddress[ClassWithDestructor] : +# 2230| v2230_4(void) = Call[ClassWithDestructor] : func:r2230_3, this:r2230_1 +# 2230| mu2230_5(unknown) = ^CallSideEffect : ~m? +# 2230| mu2230_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2230_1 +# 2231| r2231_1(glval) = VariableAddress[z2] : +# 2231| mu2231_2(ClassWithDestructor) = Uninitialized[z2] : &:r2231_1 +# 2231| r2231_3(glval) = FunctionAddress[ClassWithDestructor] : +# 2231| v2231_4(void) = Call[ClassWithDestructor] : func:r2231_3, this:r2231_1 +# 2231| mu2231_5(unknown) = ^CallSideEffect : ~m? +# 2231| mu2231_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2231_1 +# 2232| r2232_1(glval) = VariableAddress[z2] : +# 2232| r2232_2(glval) = FunctionAddress[~ClassWithDestructor] : +# 2232| v2232_3(void) = Call[~ClassWithDestructor] : func:r2232_2, this:r2232_1 +# 2232| mu2232_4(unknown) = ^CallSideEffect : ~m? +# 2232| v2232_5(void) = ^IndirectReadSideEffect[-1] : &:r2232_1, ~m? +# 2232| mu2232_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2232_1 +# 2232| r2232_7(glval) = VariableAddress[z1] : +# 2232| r2232_8(glval) = FunctionAddress[~ClassWithDestructor] : +# 2232| v2232_9(void) = Call[~ClassWithDestructor] : func:r2232_8, this:r2232_7 +# 2232| mu2232_10(unknown) = ^CallSideEffect : ~m? +# 2232| v2232_11(void) = ^IndirectReadSideEffect[-1] : &:r2232_7, ~m? +# 2232| mu2232_12(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2232_7 +# 2229| r2229_45(glval) = VariableAddress[y] : +# 2229| r2229_46(glval) = FunctionAddress[~ClassWithDestructor] : +# 2229| v2229_47(void) = Call[~ClassWithDestructor] : func:r2229_46, this:r2229_45 +# 2229| mu2229_48(unknown) = ^CallSideEffect : ~m? +# 2229| v2229_49(void) = ^IndirectReadSideEffect[-1] : &:r2229_45, ~m? +# 2229| mu2229_50(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2229_45 +# 2229| r2229_51(glval>) = VariableAddress[(__begin)] : +# 2229| r2229_52(glval) = FunctionAddress[operator++] : +# 2229| r2229_53(iterator &) = Call[operator++] : func:r2229_52, this:r2229_51 +# 2229| mu2229_54(unknown) = ^CallSideEffect : ~m? +# 2229| v2229_55(void) = ^IndirectReadSideEffect[-1] : &:r2229_51, ~m? +# 2229| mu2229_56(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r2229_51 +# 2229| r2229_57(glval>) = CopyValue : r2229_53 +#-----| Goto (back edge) -> Block 27 + +# 2229| Block 29 +# 2229| r2229_58(glval>) = VariableAddress[ys] : +# 2229| r2229_59(glval) = FunctionAddress[~vector] : +# 2229| v2229_60(void) = Call[~vector] : func:r2229_59, this:r2229_58 +# 2229| mu2229_61(unknown) = ^CallSideEffect : ~m? +# 2229| v2229_62(void) = ^IndirectReadSideEffect[-1] : &:r2229_58, ~m? +# 2229| mu2229_63(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2229_58 +#-----| Goto -> Block 30 + +# 2233| Block 30 +# 2233| v2233_13(void) = NoOp : +# 2233| r2233_14(glval) = VariableAddress[x] : +# 2233| r2233_15(glval) = FunctionAddress[~ClassWithDestructor] : +# 2233| v2233_16(void) = Call[~ClassWithDestructor] : func:r2233_15, this:r2233_14 +# 2233| mu2233_17(unknown) = ^CallSideEffect : ~m? +# 2233| v2233_18(void) = ^IndirectReadSideEffect[-1] : &:r2233_14, ~m? +# 2233| mu2233_19(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2233_14 +#-----| Goto -> Block 1 + +# 2235| void static_variable_with_destructor_1() +# 2235| Block 0 +# 2235| v2235_1(void) = EnterFunction : +# 2235| mu2235_2(unknown) = AliasedDefinition : +# 2235| mu2235_3(unknown) = InitializeNonLocal : +# 2236| r2236_1(glval) = VariableAddress[a] : +# 2236| mu2236_2(ClassWithDestructor) = Uninitialized[a] : &:r2236_1 +# 2236| r2236_3(glval) = FunctionAddress[ClassWithDestructor] : +# 2236| v2236_4(void) = Call[ClassWithDestructor] : func:r2236_3, this:r2236_1 +# 2236| mu2236_5(unknown) = ^CallSideEffect : ~m? +# 2236| mu2236_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2236_1 +# 2237| r2237_1(glval) = VariableAddress[b#init] : +# 2237| r2237_2(bool) = Load[b#init] : &:r2237_1, ~m? +# 2237| v2237_3(void) = ConditionalBranch : r2237_2 #-----| False -> Block 1 #-----| True -> Block 2 -# 2223| Block 1 -# 2223| r2223_4(glval) = VariableAddress[b] : +# 2237| Block 1 +# 2237| r2237_4(glval) = VariableAddress[b] : #-----| r0_1(glval) = FunctionAddress[ClassWithDestructor] : -#-----| v0_2(void) = Call[ClassWithDestructor] : func:r0_1, this:r2223_4 +#-----| v0_2(void) = Call[ClassWithDestructor] : func:r0_1, this:r2237_4 #-----| mu0_3(unknown) = ^CallSideEffect : ~m? -#-----| mu0_4(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2223_4 -# 2223| r2223_5(bool) = Constant[1] : -# 2223| mu2223_6(bool) = Store[b#init] : &:r2223_1, r2223_5 +#-----| mu0_4(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2237_4 +# 2237| r2237_5(bool) = Constant[1] : +# 2237| mu2237_6(bool) = Store[b#init] : &:r2237_1, r2237_5 #-----| Goto -> Block 2 -# 2224| Block 2 -# 2224| v2224_1(void) = NoOp : -# 2224| r2224_2(glval) = VariableAddress[a] : -# 2224| r2224_3(glval) = FunctionAddress[~ClassWithDestructor] : -# 2224| v2224_4(void) = Call[~ClassWithDestructor] : func:r2224_3, this:r2224_2 -# 2224| mu2224_5(unknown) = ^CallSideEffect : ~m? -# 2224| v2224_6(void) = ^IndirectReadSideEffect[-1] : &:r2224_2, ~m? -# 2224| mu2224_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2224_2 -# 2221| v2221_4(void) = ReturnVoid : -# 2221| v2221_5(void) = AliasedUse : ~m? -# 2221| v2221_6(void) = ExitFunction : +# 2238| Block 2 +# 2238| v2238_1(void) = NoOp : +# 2238| r2238_2(glval) = VariableAddress[a] : +# 2238| r2238_3(glval) = FunctionAddress[~ClassWithDestructor] : +# 2238| v2238_4(void) = Call[~ClassWithDestructor] : func:r2238_3, this:r2238_2 +# 2238| mu2238_5(unknown) = ^CallSideEffect : ~m? +# 2238| v2238_6(void) = ^IndirectReadSideEffect[-1] : &:r2238_2, ~m? +# 2238| mu2238_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2238_2 +# 2235| v2235_4(void) = ReturnVoid : +# 2235| v2235_5(void) = AliasedUse : ~m? +# 2235| v2235_6(void) = ExitFunction : -# 2226| void static_variable_with_destructor_2() -# 2226| Block 0 -# 2226| v2226_1(void) = EnterFunction : -# 2226| mu2226_2(unknown) = AliasedDefinition : -# 2226| mu2226_3(unknown) = InitializeNonLocal : -# 2227| r2227_1(glval) = VariableAddress[a#init] : -# 2227| r2227_2(bool) = Load[a#init] : &:r2227_1, ~m? -# 2227| v2227_3(void) = ConditionalBranch : r2227_2 +# 2240| void static_variable_with_destructor_2() +# 2240| Block 0 +# 2240| v2240_1(void) = EnterFunction : +# 2240| mu2240_2(unknown) = AliasedDefinition : +# 2240| mu2240_3(unknown) = InitializeNonLocal : +# 2241| r2241_1(glval) = VariableAddress[a#init] : +# 2241| r2241_2(bool) = Load[a#init] : &:r2241_1, ~m? +# 2241| v2241_3(void) = ConditionalBranch : r2241_2 #-----| False -> Block 1 #-----| True -> Block 2 -# 2227| Block 1 -# 2227| r2227_4(glval) = VariableAddress[a] : +# 2241| Block 1 +# 2241| r2241_4(glval) = VariableAddress[a] : #-----| r0_1(glval) = FunctionAddress[ClassWithDestructor] : -#-----| v0_2(void) = Call[ClassWithDestructor] : func:r0_1, this:r2227_4 +#-----| v0_2(void) = Call[ClassWithDestructor] : func:r0_1, this:r2241_4 #-----| mu0_3(unknown) = ^CallSideEffect : ~m? -#-----| mu0_4(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2227_4 -# 2227| r2227_5(bool) = Constant[1] : -# 2227| mu2227_6(bool) = Store[a#init] : &:r2227_1, r2227_5 +#-----| mu0_4(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2241_4 +# 2241| r2241_5(bool) = Constant[1] : +# 2241| mu2241_6(bool) = Store[a#init] : &:r2241_1, r2241_5 #-----| Goto -> Block 2 -# 2228| Block 2 -# 2228| r2228_1(glval) = VariableAddress[b] : -# 2228| mu2228_2(ClassWithDestructor) = Uninitialized[b] : &:r2228_1 -# 2228| r2228_3(glval) = FunctionAddress[ClassWithDestructor] : -# 2228| v2228_4(void) = Call[ClassWithDestructor] : func:r2228_3, this:r2228_1 -# 2228| mu2228_5(unknown) = ^CallSideEffect : ~m? -# 2228| mu2228_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2228_1 -# 2229| v2229_1(void) = NoOp : -# 2229| r2229_2(glval) = VariableAddress[b] : -# 2229| r2229_3(glval) = FunctionAddress[~ClassWithDestructor] : -# 2229| v2229_4(void) = Call[~ClassWithDestructor] : func:r2229_3, this:r2229_2 -# 2229| mu2229_5(unknown) = ^CallSideEffect : ~m? -# 2229| v2229_6(void) = ^IndirectReadSideEffect[-1] : &:r2229_2, ~m? -# 2229| mu2229_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2229_2 -# 2226| v2226_4(void) = ReturnVoid : -# 2226| v2226_5(void) = AliasedUse : ~m? -# 2226| v2226_6(void) = ExitFunction : +# 2242| Block 2 +# 2242| r2242_1(glval) = VariableAddress[b] : +# 2242| mu2242_2(ClassWithDestructor) = Uninitialized[b] : &:r2242_1 +# 2242| r2242_3(glval) = FunctionAddress[ClassWithDestructor] : +# 2242| v2242_4(void) = Call[ClassWithDestructor] : func:r2242_3, this:r2242_1 +# 2242| mu2242_5(unknown) = ^CallSideEffect : ~m? +# 2242| mu2242_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2242_1 +# 2243| v2243_1(void) = NoOp : +# 2243| r2243_2(glval) = VariableAddress[b] : +# 2243| r2243_3(glval) = FunctionAddress[~ClassWithDestructor] : +# 2243| v2243_4(void) = Call[~ClassWithDestructor] : func:r2243_3, this:r2243_2 +# 2243| mu2243_5(unknown) = ^CallSideEffect : ~m? +# 2243| v2243_6(void) = ^IndirectReadSideEffect[-1] : &:r2243_2, ~m? +# 2243| mu2243_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2243_2 +# 2240| v2240_4(void) = ReturnVoid : +# 2240| v2240_5(void) = AliasedUse : ~m? +# 2240| v2240_6(void) = ExitFunction : -# 2231| void static_variable_with_destructor_3() -# 2231| Block 0 -# 2231| v2231_1(void) = EnterFunction : -# 2231| mu2231_2(unknown) = AliasedDefinition : -# 2231| mu2231_3(unknown) = InitializeNonLocal : -# 2232| r2232_1(glval) = VariableAddress[a] : -# 2232| mu2232_2(ClassWithDestructor) = Uninitialized[a] : &:r2232_1 -# 2232| r2232_3(glval) = FunctionAddress[ClassWithDestructor] : -# 2232| v2232_4(void) = Call[ClassWithDestructor] : func:r2232_3, this:r2232_1 -# 2232| mu2232_5(unknown) = ^CallSideEffect : ~m? -# 2232| mu2232_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2232_1 -# 2233| r2233_1(glval) = VariableAddress[b] : -# 2233| mu2233_2(ClassWithDestructor) = Uninitialized[b] : &:r2233_1 -# 2233| r2233_3(glval) = FunctionAddress[ClassWithDestructor] : -# 2233| v2233_4(void) = Call[ClassWithDestructor] : func:r2233_3, this:r2233_1 -# 2233| mu2233_5(unknown) = ^CallSideEffect : ~m? -# 2233| mu2233_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2233_1 -# 2234| r2234_1(glval) = VariableAddress[c#init] : -# 2234| r2234_2(bool) = Load[c#init] : &:r2234_1, ~m? -# 2234| v2234_3(void) = ConditionalBranch : r2234_2 +# 2245| void static_variable_with_destructor_3() +# 2245| Block 0 +# 2245| v2245_1(void) = EnterFunction : +# 2245| mu2245_2(unknown) = AliasedDefinition : +# 2245| mu2245_3(unknown) = InitializeNonLocal : +# 2246| r2246_1(glval) = VariableAddress[a] : +# 2246| mu2246_2(ClassWithDestructor) = Uninitialized[a] : &:r2246_1 +# 2246| r2246_3(glval) = FunctionAddress[ClassWithDestructor] : +# 2246| v2246_4(void) = Call[ClassWithDestructor] : func:r2246_3, this:r2246_1 +# 2246| mu2246_5(unknown) = ^CallSideEffect : ~m? +# 2246| mu2246_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2246_1 +# 2247| r2247_1(glval) = VariableAddress[b] : +# 2247| mu2247_2(ClassWithDestructor) = Uninitialized[b] : &:r2247_1 +# 2247| r2247_3(glval) = FunctionAddress[ClassWithDestructor] : +# 2247| v2247_4(void) = Call[ClassWithDestructor] : func:r2247_3, this:r2247_1 +# 2247| mu2247_5(unknown) = ^CallSideEffect : ~m? +# 2247| mu2247_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2247_1 +# 2248| r2248_1(glval) = VariableAddress[c#init] : +# 2248| r2248_2(bool) = Load[c#init] : &:r2248_1, ~m? +# 2248| v2248_3(void) = ConditionalBranch : r2248_2 #-----| False -> Block 1 #-----| True -> Block 2 -# 2234| Block 1 -# 2234| r2234_4(glval) = VariableAddress[c] : +# 2248| Block 1 +# 2248| r2248_4(glval) = VariableAddress[c] : #-----| r0_1(glval) = FunctionAddress[ClassWithDestructor] : -#-----| v0_2(void) = Call[ClassWithDestructor] : func:r0_1, this:r2234_4 +#-----| v0_2(void) = Call[ClassWithDestructor] : func:r0_1, this:r2248_4 #-----| mu0_3(unknown) = ^CallSideEffect : ~m? -#-----| mu0_4(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2234_4 -# 2234| r2234_5(bool) = Constant[1] : -# 2234| mu2234_6(bool) = Store[c#init] : &:r2234_1, r2234_5 +#-----| mu0_4(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2248_4 +# 2248| r2248_5(bool) = Constant[1] : +# 2248| mu2248_6(bool) = Store[c#init] : &:r2248_1, r2248_5 #-----| Goto -> Block 2 -# 2235| Block 2 -# 2235| v2235_1(void) = NoOp : -# 2235| r2235_2(glval) = VariableAddress[b] : -# 2235| r2235_3(glval) = FunctionAddress[~ClassWithDestructor] : -# 2235| v2235_4(void) = Call[~ClassWithDestructor] : func:r2235_3, this:r2235_2 -# 2235| mu2235_5(unknown) = ^CallSideEffect : ~m? -# 2235| v2235_6(void) = ^IndirectReadSideEffect[-1] : &:r2235_2, ~m? -# 2235| mu2235_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2235_2 -# 2235| r2235_8(glval) = VariableAddress[a] : -# 2235| r2235_9(glval) = FunctionAddress[~ClassWithDestructor] : -# 2235| v2235_10(void) = Call[~ClassWithDestructor] : func:r2235_9, this:r2235_8 -# 2235| mu2235_11(unknown) = ^CallSideEffect : ~m? -# 2235| v2235_12(void) = ^IndirectReadSideEffect[-1] : &:r2235_8, ~m? -# 2235| mu2235_13(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2235_8 -# 2231| v2231_4(void) = ReturnVoid : -# 2231| v2231_5(void) = AliasedUse : ~m? -# 2231| v2231_6(void) = ExitFunction : - -# 2237| ClassWithDestructor global_class_with_destructor -# 2237| Block 0 -# 2237| v2237_1(void) = EnterFunction : -# 2237| mu2237_2(unknown) = AliasedDefinition : -# 2237| r2237_3(glval) = VariableAddress[global_class_with_destructor] : -# 2237| r2237_4(glval) = FunctionAddress[ClassWithDestructor] : -# 2237| v2237_5(void) = Call[ClassWithDestructor] : func:r2237_4, this:r2237_3 -# 2237| mu2237_6(unknown) = ^CallSideEffect : ~m? -# 2237| mu2237_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2237_3 -# 2237| v2237_8(void) = ReturnVoid : -# 2237| v2237_9(void) = AliasedUse : ~m? -# 2237| v2237_10(void) = ExitFunction : - -# 2241| ClassWithDestructor& vacuous_destructor_call::get(ClassWithDestructor&) -# 2241| Block 0 -# 2241| v2241_1(void) = EnterFunction : -# 2241| mu2241_2(unknown) = AliasedDefinition : -# 2241| mu2241_3(unknown) = InitializeNonLocal : -# 2241| r2241_4(glval) = VariableAddress[t] : -# 2241| mu2241_5(ClassWithDestructor &) = InitializeParameter[t] : &:r2241_4 -# 2241| r2241_6(ClassWithDestructor &) = Load[t] : &:r2241_4, ~m? -# 2241| mu2241_7(unknown) = InitializeIndirection[t] : &:r2241_6 -# 2241| r2241_8(glval) = VariableAddress[#return] : -# 2241| r2241_9(glval) = VariableAddress[t] : -# 2241| r2241_10(ClassWithDestructor &) = Load[t] : &:r2241_9, ~m? -# 2241| r2241_11(glval) = CopyValue : r2241_10 -# 2241| r2241_12(ClassWithDestructor &) = CopyValue : r2241_11 -# 2241| mu2241_13(ClassWithDestructor &) = Store[#return] : &:r2241_8, r2241_12 -# 2241| v2241_14(void) = ReturnIndirection[t] : &:r2241_6, ~m? -# 2241| r2241_15(glval) = VariableAddress[#return] : -# 2241| v2241_16(void) = ReturnValue : &:r2241_15, ~m? -# 2241| v2241_17(void) = AliasedUse : ~m? -# 2241| v2241_18(void) = ExitFunction : - -# 2241| int& vacuous_destructor_call::get(int&) -# 2241| Block 0 -# 2241| v2241_1(void) = EnterFunction : -# 2241| mu2241_2(unknown) = AliasedDefinition : -# 2241| mu2241_3(unknown) = InitializeNonLocal : -# 2241| r2241_4(glval) = VariableAddress[t] : -# 2241| mu2241_5(int &) = InitializeParameter[t] : &:r2241_4 -# 2241| r2241_6(int &) = Load[t] : &:r2241_4, ~m? -# 2241| mu2241_7(unknown) = InitializeIndirection[t] : &:r2241_6 -# 2241| r2241_8(glval) = VariableAddress[#return] : -# 2241| r2241_9(glval) = VariableAddress[t] : -# 2241| r2241_10(int &) = Load[t] : &:r2241_9, ~m? -# 2241| r2241_11(glval) = CopyValue : r2241_10 -# 2241| r2241_12(int &) = CopyValue : r2241_11 -# 2241| mu2241_13(int &) = Store[#return] : &:r2241_8, r2241_12 -# 2241| v2241_14(void) = ReturnIndirection[t] : &:r2241_6, ~m? -# 2241| r2241_15(glval) = VariableAddress[#return] : -# 2241| v2241_16(void) = ReturnValue : &:r2241_15, ~m? -# 2241| v2241_17(void) = AliasedUse : ~m? -# 2241| v2241_18(void) = ExitFunction : - -# 2244| void vacuous_destructor_call::call_destructor(ClassWithDestructor&) -# 2244| Block 0 -# 2244| v2244_1(void) = EnterFunction : -# 2244| mu2244_2(unknown) = AliasedDefinition : -# 2244| mu2244_3(unknown) = InitializeNonLocal : -# 2244| r2244_4(glval) = VariableAddress[t] : -# 2244| mu2244_5(ClassWithDestructor &) = InitializeParameter[t] : &:r2244_4 -# 2244| r2244_6(ClassWithDestructor &) = Load[t] : &:r2244_4, ~m? -# 2244| mu2244_7(unknown) = InitializeIndirection[t] : &:r2244_6 -# 2245| r2245_1(glval) = FunctionAddress[get] : -# 2245| r2245_2(glval) = VariableAddress[t] : -# 2245| r2245_3(ClassWithDestructor &) = Load[t] : &:r2245_2, ~m? -# 2245| r2245_4(glval) = CopyValue : r2245_3 -# 2245| r2245_5(ClassWithDestructor &) = CopyValue : r2245_4 -# 2245| r2245_6(ClassWithDestructor &) = Call[get] : func:r2245_1, 0:r2245_5 -# 2245| mu2245_7(unknown) = ^CallSideEffect : ~m? -# 2245| v2245_8(void) = ^BufferReadSideEffect[0] : &:r2245_5, ~m? -# 2245| mu2245_9(unknown) = ^BufferMayWriteSideEffect[0] : &:r2245_5 -# 2245| r2245_10(glval) = CopyValue : r2245_6 -# 2245| r2245_11(glval) = FunctionAddress[~ClassWithDestructor] : -# 2245| v2245_12(void) = Call[~ClassWithDestructor] : func:r2245_11 -# 2245| mu2245_13(unknown) = ^CallSideEffect : ~m? -# 2245| v2245_14(void) = ^IndirectReadSideEffect[-1] : &:r2245_10, ~m? -# 2245| mu2245_15(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2245_10 -# 2246| v2246_1(void) = NoOp : -# 2244| v2244_8(void) = ReturnIndirection[t] : &:r2244_6, ~m? -# 2244| v2244_9(void) = ReturnVoid : -# 2244| v2244_10(void) = AliasedUse : ~m? -# 2244| v2244_11(void) = ExitFunction : - -# 2244| void vacuous_destructor_call::call_destructor(int&) -# 2244| Block 0 -# 2244| v2244_1(void) = EnterFunction : -# 2244| mu2244_2(unknown) = AliasedDefinition : -# 2244| mu2244_3(unknown) = InitializeNonLocal : -# 2244| r2244_4(glval) = VariableAddress[t] : -# 2244| mu2244_5(int &) = InitializeParameter[t] : &:r2244_4 -# 2244| r2244_6(int &) = Load[t] : &:r2244_4, ~m? -# 2244| mu2244_7(unknown) = InitializeIndirection[t] : &:r2244_6 -# 2245| r2245_1(glval) = FunctionAddress[get] : -# 2245| r2245_2(glval) = VariableAddress[t] : -# 2245| r2245_3(int &) = Load[t] : &:r2245_2, ~m? -# 2245| r2245_4(glval) = CopyValue : r2245_3 -# 2245| r2245_5(int &) = CopyValue : r2245_4 -# 2245| r2245_6(int &) = Call[get] : func:r2245_1, 0:r2245_5 -# 2245| mu2245_7(unknown) = ^CallSideEffect : ~m? -# 2245| v2245_8(void) = ^BufferReadSideEffect[0] : &:r2245_5, ~m? -# 2245| mu2245_9(unknown) = ^BufferMayWriteSideEffect[0] : &:r2245_5 -# 2245| r2245_10(glval) = CopyValue : r2245_6 -# 2246| v2246_1(void) = NoOp : -# 2244| v2244_8(void) = ReturnIndirection[t] : &:r2244_6, ~m? -# 2244| v2244_9(void) = ReturnVoid : -# 2244| v2244_10(void) = AliasedUse : ~m? -# 2244| v2244_11(void) = ExitFunction : - -# 2248| void vacuous_destructor_call::non_vacuous_destructor_call() -# 2248| Block 0 -# 2248| v2248_1(void) = EnterFunction : -# 2248| mu2248_2(unknown) = AliasedDefinition : -# 2248| mu2248_3(unknown) = InitializeNonLocal : -# 2249| r2249_1(glval) = VariableAddress[c] : -# 2249| mu2249_2(ClassWithDestructor) = Uninitialized[c] : &:r2249_1 -# 2249| r2249_3(glval) = FunctionAddress[ClassWithDestructor] : -# 2249| v2249_4(void) = Call[ClassWithDestructor] : func:r2249_3, this:r2249_1 +# 2249| Block 2 +# 2249| v2249_1(void) = NoOp : +# 2249| r2249_2(glval) = VariableAddress[b] : +# 2249| r2249_3(glval) = FunctionAddress[~ClassWithDestructor] : +# 2249| v2249_4(void) = Call[~ClassWithDestructor] : func:r2249_3, this:r2249_2 # 2249| mu2249_5(unknown) = ^CallSideEffect : ~m? -# 2249| mu2249_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2249_1 -# 2250| r2250_1(glval) = FunctionAddress[call_destructor] : -# 2250| r2250_2(glval) = VariableAddress[c] : -# 2250| r2250_3(ClassWithDestructor &) = CopyValue : r2250_2 -# 2250| v2250_4(void) = Call[call_destructor] : func:r2250_1, 0:r2250_3 -# 2250| mu2250_5(unknown) = ^CallSideEffect : ~m? -# 2250| v2250_6(void) = ^BufferReadSideEffect[0] : &:r2250_3, ~m? -# 2250| mu2250_7(unknown) = ^BufferMayWriteSideEffect[0] : &:r2250_3 -# 2251| v2251_1(void) = NoOp : -# 2251| r2251_2(glval) = VariableAddress[c] : -# 2251| r2251_3(glval) = FunctionAddress[~ClassWithDestructor] : -# 2251| v2251_4(void) = Call[~ClassWithDestructor] : func:r2251_3, this:r2251_2 -# 2251| mu2251_5(unknown) = ^CallSideEffect : ~m? -# 2251| v2251_6(void) = ^IndirectReadSideEffect[-1] : &:r2251_2, ~m? -# 2251| mu2251_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2251_2 -# 2248| v2248_4(void) = ReturnVoid : -# 2248| v2248_5(void) = AliasedUse : ~m? -# 2248| v2248_6(void) = ExitFunction : +# 2249| v2249_6(void) = ^IndirectReadSideEffect[-1] : &:r2249_2, ~m? +# 2249| mu2249_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2249_2 +# 2249| r2249_8(glval) = VariableAddress[a] : +# 2249| r2249_9(glval) = FunctionAddress[~ClassWithDestructor] : +# 2249| v2249_10(void) = Call[~ClassWithDestructor] : func:r2249_9, this:r2249_8 +# 2249| mu2249_11(unknown) = ^CallSideEffect : ~m? +# 2249| v2249_12(void) = ^IndirectReadSideEffect[-1] : &:r2249_8, ~m? +# 2249| mu2249_13(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2249_8 +# 2245| v2245_4(void) = ReturnVoid : +# 2245| v2245_5(void) = AliasedUse : ~m? +# 2245| v2245_6(void) = ExitFunction : -# 2253| void vacuous_destructor_call::vacuous_destructor_call() -# 2253| Block 0 -# 2253| v2253_1(void) = EnterFunction : -# 2253| mu2253_2(unknown) = AliasedDefinition : -# 2253| mu2253_3(unknown) = InitializeNonLocal : -# 2254| r2254_1(glval) = VariableAddress[i] : -# 2254| mu2254_2(int) = Uninitialized[i] : &:r2254_1 -# 2255| r2255_1(glval) = FunctionAddress[call_destructor] : -# 2255| r2255_2(glval) = VariableAddress[i] : -# 2255| r2255_3(int &) = CopyValue : r2255_2 -# 2255| v2255_4(void) = Call[call_destructor] : func:r2255_1, 0:r2255_3 -# 2255| mu2255_5(unknown) = ^CallSideEffect : ~m? -# 2255| v2255_6(void) = ^BufferReadSideEffect[0] : &:r2255_3, ~m? -# 2255| mu2255_7(unknown) = ^BufferMayWriteSideEffect[0] : &:r2255_3 -# 2256| v2256_1(void) = NoOp : -# 2253| v2253_4(void) = ReturnVoid : -# 2253| v2253_5(void) = AliasedUse : ~m? -# 2253| v2253_6(void) = ExitFunction : +# 2251| ClassWithDestructor global_class_with_destructor +# 2251| Block 0 +# 2251| v2251_1(void) = EnterFunction : +# 2251| mu2251_2(unknown) = AliasedDefinition : +# 2251| r2251_3(glval) = VariableAddress[global_class_with_destructor] : +# 2251| r2251_4(glval) = FunctionAddress[ClassWithDestructor] : +# 2251| v2251_5(void) = Call[ClassWithDestructor] : func:r2251_4, this:r2251_3 +# 2251| mu2251_6(unknown) = ^CallSideEffect : ~m? +# 2251| mu2251_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2251_3 +# 2251| v2251_8(void) = ReturnVoid : +# 2251| v2251_9(void) = AliasedUse : ~m? +# 2251| v2251_10(void) = ExitFunction : -# 2259| void TryCatchDestructors(bool) -# 2259| Block 0 -# 2259| v2259_1(void) = EnterFunction : -# 2259| mu2259_2(unknown) = AliasedDefinition : -# 2259| mu2259_3(unknown) = InitializeNonLocal : -# 2259| r2259_4(glval) = VariableAddress[b] : -# 2259| mu2259_5(bool) = InitializeParameter[b] : &:r2259_4 -# 2261| r2261_1(glval) = VariableAddress[s] : -# 2261| mu2261_2(String) = Uninitialized[s] : &:r2261_1 -# 2261| r2261_3(glval) = FunctionAddress[String] : -# 2261| v2261_4(void) = Call[String] : func:r2261_3, this:r2261_1 -# 2261| mu2261_5(unknown) = ^CallSideEffect : ~m? -# 2261| mu2261_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2261_1 -# 2262| r2262_1(glval) = VariableAddress[b] : -# 2262| r2262_2(bool) = Load[b] : &:r2262_1, ~m? -# 2262| v2262_3(void) = ConditionalBranch : r2262_2 +# 2255| ClassWithDestructor& vacuous_destructor_call::get(ClassWithDestructor&) +# 2255| Block 0 +# 2255| v2255_1(void) = EnterFunction : +# 2255| mu2255_2(unknown) = AliasedDefinition : +# 2255| mu2255_3(unknown) = InitializeNonLocal : +# 2255| r2255_4(glval) = VariableAddress[t] : +# 2255| mu2255_5(ClassWithDestructor &) = InitializeParameter[t] : &:r2255_4 +# 2255| r2255_6(ClassWithDestructor &) = Load[t] : &:r2255_4, ~m? +# 2255| mu2255_7(unknown) = InitializeIndirection[t] : &:r2255_6 +# 2255| r2255_8(glval) = VariableAddress[#return] : +# 2255| r2255_9(glval) = VariableAddress[t] : +# 2255| r2255_10(ClassWithDestructor &) = Load[t] : &:r2255_9, ~m? +# 2255| r2255_11(glval) = CopyValue : r2255_10 +# 2255| r2255_12(ClassWithDestructor &) = CopyValue : r2255_11 +# 2255| mu2255_13(ClassWithDestructor &) = Store[#return] : &:r2255_8, r2255_12 +# 2255| v2255_14(void) = ReturnIndirection[t] : &:r2255_6, ~m? +# 2255| r2255_15(glval) = VariableAddress[#return] : +# 2255| v2255_16(void) = ReturnValue : &:r2255_15, ~m? +# 2255| v2255_17(void) = AliasedUse : ~m? +# 2255| v2255_18(void) = ExitFunction : + +# 2255| int& vacuous_destructor_call::get(int&) +# 2255| Block 0 +# 2255| v2255_1(void) = EnterFunction : +# 2255| mu2255_2(unknown) = AliasedDefinition : +# 2255| mu2255_3(unknown) = InitializeNonLocal : +# 2255| r2255_4(glval) = VariableAddress[t] : +# 2255| mu2255_5(int &) = InitializeParameter[t] : &:r2255_4 +# 2255| r2255_6(int &) = Load[t] : &:r2255_4, ~m? +# 2255| mu2255_7(unknown) = InitializeIndirection[t] : &:r2255_6 +# 2255| r2255_8(glval) = VariableAddress[#return] : +# 2255| r2255_9(glval) = VariableAddress[t] : +# 2255| r2255_10(int &) = Load[t] : &:r2255_9, ~m? +# 2255| r2255_11(glval) = CopyValue : r2255_10 +# 2255| r2255_12(int &) = CopyValue : r2255_11 +# 2255| mu2255_13(int &) = Store[#return] : &:r2255_8, r2255_12 +# 2255| v2255_14(void) = ReturnIndirection[t] : &:r2255_6, ~m? +# 2255| r2255_15(glval) = VariableAddress[#return] : +# 2255| v2255_16(void) = ReturnValue : &:r2255_15, ~m? +# 2255| v2255_17(void) = AliasedUse : ~m? +# 2255| v2255_18(void) = ExitFunction : + +# 2258| void vacuous_destructor_call::call_destructor(ClassWithDestructor&) +# 2258| Block 0 +# 2258| v2258_1(void) = EnterFunction : +# 2258| mu2258_2(unknown) = AliasedDefinition : +# 2258| mu2258_3(unknown) = InitializeNonLocal : +# 2258| r2258_4(glval) = VariableAddress[t] : +# 2258| mu2258_5(ClassWithDestructor &) = InitializeParameter[t] : &:r2258_4 +# 2258| r2258_6(ClassWithDestructor &) = Load[t] : &:r2258_4, ~m? +# 2258| mu2258_7(unknown) = InitializeIndirection[t] : &:r2258_6 +# 2259| r2259_1(glval) = FunctionAddress[get] : +# 2259| r2259_2(glval) = VariableAddress[t] : +# 2259| r2259_3(ClassWithDestructor &) = Load[t] : &:r2259_2, ~m? +# 2259| r2259_4(glval) = CopyValue : r2259_3 +# 2259| r2259_5(ClassWithDestructor &) = CopyValue : r2259_4 +# 2259| r2259_6(ClassWithDestructor &) = Call[get] : func:r2259_1, 0:r2259_5 +# 2259| mu2259_7(unknown) = ^CallSideEffect : ~m? +# 2259| v2259_8(void) = ^BufferReadSideEffect[0] : &:r2259_5, ~m? +# 2259| mu2259_9(unknown) = ^BufferMayWriteSideEffect[0] : &:r2259_5 +# 2259| r2259_10(glval) = CopyValue : r2259_6 +# 2259| r2259_11(glval) = FunctionAddress[~ClassWithDestructor] : +# 2259| v2259_12(void) = Call[~ClassWithDestructor] : func:r2259_11 +# 2259| mu2259_13(unknown) = ^CallSideEffect : ~m? +# 2259| v2259_14(void) = ^IndirectReadSideEffect[-1] : &:r2259_10, ~m? +# 2259| mu2259_15(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2259_10 +# 2260| v2260_1(void) = NoOp : +# 2258| v2258_8(void) = ReturnIndirection[t] : &:r2258_6, ~m? +# 2258| v2258_9(void) = ReturnVoid : +# 2258| v2258_10(void) = AliasedUse : ~m? +# 2258| v2258_11(void) = ExitFunction : + +# 2258| void vacuous_destructor_call::call_destructor(int&) +# 2258| Block 0 +# 2258| v2258_1(void) = EnterFunction : +# 2258| mu2258_2(unknown) = AliasedDefinition : +# 2258| mu2258_3(unknown) = InitializeNonLocal : +# 2258| r2258_4(glval) = VariableAddress[t] : +# 2258| mu2258_5(int &) = InitializeParameter[t] : &:r2258_4 +# 2258| r2258_6(int &) = Load[t] : &:r2258_4, ~m? +# 2258| mu2258_7(unknown) = InitializeIndirection[t] : &:r2258_6 +# 2259| r2259_1(glval) = FunctionAddress[get] : +# 2259| r2259_2(glval) = VariableAddress[t] : +# 2259| r2259_3(int &) = Load[t] : &:r2259_2, ~m? +# 2259| r2259_4(glval) = CopyValue : r2259_3 +# 2259| r2259_5(int &) = CopyValue : r2259_4 +# 2259| r2259_6(int &) = Call[get] : func:r2259_1, 0:r2259_5 +# 2259| mu2259_7(unknown) = ^CallSideEffect : ~m? +# 2259| v2259_8(void) = ^BufferReadSideEffect[0] : &:r2259_5, ~m? +# 2259| mu2259_9(unknown) = ^BufferMayWriteSideEffect[0] : &:r2259_5 +# 2259| r2259_10(glval) = CopyValue : r2259_6 +# 2260| v2260_1(void) = NoOp : +# 2258| v2258_8(void) = ReturnIndirection[t] : &:r2258_6, ~m? +# 2258| v2258_9(void) = ReturnVoid : +# 2258| v2258_10(void) = AliasedUse : ~m? +# 2258| v2258_11(void) = ExitFunction : + +# 2262| void vacuous_destructor_call::non_vacuous_destructor_call() +# 2262| Block 0 +# 2262| v2262_1(void) = EnterFunction : +# 2262| mu2262_2(unknown) = AliasedDefinition : +# 2262| mu2262_3(unknown) = InitializeNonLocal : +# 2263| r2263_1(glval) = VariableAddress[c] : +# 2263| mu2263_2(ClassWithDestructor) = Uninitialized[c] : &:r2263_1 +# 2263| r2263_3(glval) = FunctionAddress[ClassWithDestructor] : +# 2263| v2263_4(void) = Call[ClassWithDestructor] : func:r2263_3, this:r2263_1 +# 2263| mu2263_5(unknown) = ^CallSideEffect : ~m? +# 2263| mu2263_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2263_1 +# 2264| r2264_1(glval) = FunctionAddress[call_destructor] : +# 2264| r2264_2(glval) = VariableAddress[c] : +# 2264| r2264_3(ClassWithDestructor &) = CopyValue : r2264_2 +# 2264| v2264_4(void) = Call[call_destructor] : func:r2264_1, 0:r2264_3 +# 2264| mu2264_5(unknown) = ^CallSideEffect : ~m? +# 2264| v2264_6(void) = ^BufferReadSideEffect[0] : &:r2264_3, ~m? +# 2264| mu2264_7(unknown) = ^BufferMayWriteSideEffect[0] : &:r2264_3 +# 2265| v2265_1(void) = NoOp : +# 2265| r2265_2(glval) = VariableAddress[c] : +# 2265| r2265_3(glval) = FunctionAddress[~ClassWithDestructor] : +# 2265| v2265_4(void) = Call[~ClassWithDestructor] : func:r2265_3, this:r2265_2 +# 2265| mu2265_5(unknown) = ^CallSideEffect : ~m? +# 2265| v2265_6(void) = ^IndirectReadSideEffect[-1] : &:r2265_2, ~m? +# 2265| mu2265_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2265_2 +# 2262| v2262_4(void) = ReturnVoid : +# 2262| v2262_5(void) = AliasedUse : ~m? +# 2262| v2262_6(void) = ExitFunction : + +# 2267| void vacuous_destructor_call::vacuous_destructor_call() +# 2267| Block 0 +# 2267| v2267_1(void) = EnterFunction : +# 2267| mu2267_2(unknown) = AliasedDefinition : +# 2267| mu2267_3(unknown) = InitializeNonLocal : +# 2268| r2268_1(glval) = VariableAddress[i] : +# 2268| mu2268_2(int) = Uninitialized[i] : &:r2268_1 +# 2269| r2269_1(glval) = FunctionAddress[call_destructor] : +# 2269| r2269_2(glval) = VariableAddress[i] : +# 2269| r2269_3(int &) = CopyValue : r2269_2 +# 2269| v2269_4(void) = Call[call_destructor] : func:r2269_1, 0:r2269_3 +# 2269| mu2269_5(unknown) = ^CallSideEffect : ~m? +# 2269| v2269_6(void) = ^BufferReadSideEffect[0] : &:r2269_3, ~m? +# 2269| mu2269_7(unknown) = ^BufferMayWriteSideEffect[0] : &:r2269_3 +# 2270| v2270_1(void) = NoOp : +# 2267| v2267_4(void) = ReturnVoid : +# 2267| v2267_5(void) = AliasedUse : ~m? +# 2267| v2267_6(void) = ExitFunction : + +# 2273| void TryCatchDestructors(bool) +# 2273| Block 0 +# 2273| v2273_1(void) = EnterFunction : +# 2273| mu2273_2(unknown) = AliasedDefinition : +# 2273| mu2273_3(unknown) = InitializeNonLocal : +# 2273| r2273_4(glval) = VariableAddress[b] : +# 2273| mu2273_5(bool) = InitializeParameter[b] : &:r2273_4 +# 2275| r2275_1(glval) = VariableAddress[s] : +# 2275| mu2275_2(String) = Uninitialized[s] : &:r2275_1 +# 2275| r2275_3(glval) = FunctionAddress[String] : +# 2275| v2275_4(void) = Call[String] : func:r2275_3, this:r2275_1 +# 2275| mu2275_5(unknown) = ^CallSideEffect : ~m? +# 2275| mu2275_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2275_1 +# 2276| r2276_1(glval) = VariableAddress[b] : +# 2276| r2276_2(bool) = Load[b] : &:r2276_1, ~m? +# 2276| v2276_3(void) = ConditionalBranch : r2276_2 #-----| False -> Block 4 #-----| True -> Block 3 -# 2259| Block 1 -# 2259| v2259_6(void) = AliasedUse : ~m? -# 2259| v2259_7(void) = ExitFunction : +# 2273| Block 1 +# 2273| v2273_6(void) = AliasedUse : ~m? +# 2273| v2273_7(void) = ExitFunction : -# 2259| Block 2 -# 2259| v2259_8(void) = Unwind : +# 2273| Block 2 +# 2273| v2273_8(void) = Unwind : #-----| Goto -> Block 1 -# 2263| Block 3 -# 2263| r2263_1(glval) = VariableAddress[#throw2263:7] : -# 2263| r2263_2(glval) = StringConstant["string literal"] : -# 2263| r2263_3(char *) = Convert : r2263_2 -# 2263| mu2263_4(char *) = Store[#throw2263:7] : &:r2263_1, r2263_3 -# 2263| v2263_5(void) = ThrowValue : &:r2263_1, ~m? +# 2277| Block 3 +# 2277| r2277_1(glval) = VariableAddress[#throw2277:7] : +# 2277| r2277_2(glval) = StringConstant["string literal"] : +# 2277| r2277_3(char *) = Convert : r2277_2 +# 2277| mu2277_4(char *) = Store[#throw2277:7] : &:r2277_1, r2277_3 +# 2277| v2277_5(void) = ThrowValue : &:r2277_1, ~m? #-----| Exception -> Block 5 -# 2265| Block 4 -# 2265| r2265_1(glval) = VariableAddress[s2] : -# 2265| mu2265_2(String) = Uninitialized[s2] : &:r2265_1 -# 2265| r2265_3(glval) = FunctionAddress[String] : -# 2265| v2265_4(void) = Call[String] : func:r2265_3, this:r2265_1 -# 2265| mu2265_5(unknown) = ^CallSideEffect : ~m? -# 2265| mu2265_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2265_1 -# 2266| r2266_1(glval) = VariableAddress[s2] : -# 2266| r2266_2(glval) = FunctionAddress[~String] : -# 2266| v2266_3(void) = Call[~String] : func:r2266_2, this:r2266_1 -# 2266| mu2266_4(unknown) = ^CallSideEffect : ~m? -# 2266| v2266_5(void) = ^IndirectReadSideEffect[-1] : &:r2266_1, ~m? -# 2266| mu2266_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2266_1 -# 2266| r2266_7(glval) = VariableAddress[s] : -# 2266| r2266_8(glval) = FunctionAddress[~String] : -# 2266| v2266_9(void) = Call[~String] : func:r2266_8, this:r2266_7 -# 2266| mu2266_10(unknown) = ^CallSideEffect : ~m? -# 2266| v2266_11(void) = ^IndirectReadSideEffect[-1] : &:r2266_7, ~m? -# 2266| mu2266_12(String) = ^IndirectMayWriteSideEffect[-1] : &:r2266_7 +# 2279| Block 4 +# 2279| r2279_1(glval) = VariableAddress[s2] : +# 2279| mu2279_2(String) = Uninitialized[s2] : &:r2279_1 +# 2279| r2279_3(glval) = FunctionAddress[String] : +# 2279| v2279_4(void) = Call[String] : func:r2279_3, this:r2279_1 +# 2279| mu2279_5(unknown) = ^CallSideEffect : ~m? +# 2279| mu2279_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2279_1 +# 2280| r2280_1(glval) = VariableAddress[s2] : +# 2280| r2280_2(glval) = FunctionAddress[~String] : +# 2280| v2280_3(void) = Call[~String] : func:r2280_2, this:r2280_1 +# 2280| mu2280_4(unknown) = ^CallSideEffect : ~m? +# 2280| v2280_5(void) = ^IndirectReadSideEffect[-1] : &:r2280_1, ~m? +# 2280| mu2280_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2280_1 +# 2280| r2280_7(glval) = VariableAddress[s] : +# 2280| r2280_8(glval) = FunctionAddress[~String] : +# 2280| v2280_9(void) = Call[~String] : func:r2280_8, this:r2280_7 +# 2280| mu2280_10(unknown) = ^CallSideEffect : ~m? +# 2280| v2280_11(void) = ^IndirectReadSideEffect[-1] : &:r2280_7, ~m? +# 2280| mu2280_12(String) = ^IndirectMayWriteSideEffect[-1] : &:r2280_7 #-----| Goto -> Block 10 -# 2267| Block 5 -# 2267| v2267_1(void) = CatchByType[const char *] : +# 2281| Block 5 +# 2281| v2281_1(void) = CatchByType[const char *] : #-----| Exception -> Block 7 #-----| Goto -> Block 6 -# 2267| Block 6 -# 2267| r2267_2(glval) = VariableAddress[s] : -# 2267| mu2267_3(char *) = InitializeParameter[s] : &:r2267_2 -# 2267| r2267_4(char *) = Load[s] : &:r2267_2, ~m? -# 2267| mu2267_5(unknown) = InitializeIndirection[s] : &:r2267_4 -# 2268| r2268_1(glval) = VariableAddress[#throw2268:5] : -# 2268| mu2268_2(String) = Uninitialized[#throw2268:5] : &:r2268_1 -# 2268| r2268_3(glval) = FunctionAddress[String] : -# 2268| r2268_4(glval) = VariableAddress[s] : -# 2268| r2268_5(char *) = Load[s] : &:r2268_4, ~m? -# 2268| v2268_6(void) = Call[String] : func:r2268_3, this:r2268_1, 0:r2268_5 -# 2268| mu2268_7(unknown) = ^CallSideEffect : ~m? -# 2268| v2268_8(void) = ^BufferReadSideEffect[0] : &:r2268_5, ~m? -# 2268| mu2268_9(String) = ^IndirectMayWriteSideEffect[-1] : &:r2268_1 -# 2268| v2268_10(void) = ThrowValue : &:r2268_1, ~m? +# 2281| Block 6 +# 2281| r2281_2(glval) = VariableAddress[s] : +# 2281| mu2281_3(char *) = InitializeParameter[s] : &:r2281_2 +# 2281| r2281_4(char *) = Load[s] : &:r2281_2, ~m? +# 2281| mu2281_5(unknown) = InitializeIndirection[s] : &:r2281_4 +# 2282| r2282_1(glval) = VariableAddress[#throw2282:5] : +# 2282| mu2282_2(String) = Uninitialized[#throw2282:5] : &:r2282_1 +# 2282| r2282_3(glval) = FunctionAddress[String] : +# 2282| r2282_4(glval) = VariableAddress[s] : +# 2282| r2282_5(char *) = Load[s] : &:r2282_4, ~m? +# 2282| v2282_6(void) = Call[String] : func:r2282_3, this:r2282_1, 0:r2282_5 +# 2282| mu2282_7(unknown) = ^CallSideEffect : ~m? +# 2282| v2282_8(void) = ^BufferReadSideEffect[0] : &:r2282_5, ~m? +# 2282| mu2282_9(String) = ^IndirectMayWriteSideEffect[-1] : &:r2282_1 +# 2282| v2282_10(void) = ThrowValue : &:r2282_1, ~m? #-----| Exception -> Block 2 -# 2270| Block 7 -# 2270| v2270_1(void) = CatchByType[const String &] : +# 2284| Block 7 +# 2284| v2284_1(void) = CatchByType[const String &] : #-----| Exception -> Block 9 #-----| Goto -> Block 8 -# 2270| Block 8 -# 2270| r2270_2(glval) = VariableAddress[e] : -# 2270| mu2270_3(String &) = InitializeParameter[e] : &:r2270_2 -# 2270| r2270_4(String &) = Load[e] : &:r2270_2, ~m? -# 2270| mu2270_5(unknown) = InitializeIndirection[e] : &:r2270_4 -# 2270| v2270_6(void) = NoOp : +# 2284| Block 8 +# 2284| r2284_2(glval) = VariableAddress[e] : +# 2284| mu2284_3(String &) = InitializeParameter[e] : &:r2284_2 +# 2284| r2284_4(String &) = Load[e] : &:r2284_2, ~m? +# 2284| mu2284_5(unknown) = InitializeIndirection[e] : &:r2284_4 +# 2284| v2284_6(void) = NoOp : #-----| Goto -> Block 10 -# 2272| Block 9 -# 2272| v2272_1(void) = CatchAny : -# 2273| v2273_1(void) = ReThrow : +# 2286| Block 9 +# 2286| v2286_1(void) = CatchAny : +# 2287| v2287_1(void) = ReThrow : #-----| Exception -> Block 2 -# 2275| Block 10 -# 2275| v2275_1(void) = NoOp : -# 2259| v2259_9(void) = ReturnVoid : +# 2289| Block 10 +# 2289| v2289_1(void) = NoOp : +# 2273| v2273_9(void) = ReturnVoid : #-----| Goto -> Block 1 -# 2277| void IfDestructors(bool) -# 2277| Block 0 -# 2277| v2277_1(void) = EnterFunction : -# 2277| mu2277_2(unknown) = AliasedDefinition : -# 2277| mu2277_3(unknown) = InitializeNonLocal : -# 2277| r2277_4(glval) = VariableAddress[b] : -# 2277| mu2277_5(bool) = InitializeParameter[b] : &:r2277_4 -# 2278| r2278_1(glval) = VariableAddress[s1] : -# 2278| mu2278_2(String) = Uninitialized[s1] : &:r2278_1 -# 2278| r2278_3(glval) = FunctionAddress[String] : -# 2278| v2278_4(void) = Call[String] : func:r2278_3, this:r2278_1 -# 2278| mu2278_5(unknown) = ^CallSideEffect : ~m? -# 2278| mu2278_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2278_1 -# 2279| r2279_1(glval) = VariableAddress[b] : -# 2279| r2279_2(bool) = Load[b] : &:r2279_1, ~m? -# 2279| v2279_3(void) = ConditionalBranch : r2279_2 +# 2291| void IfDestructors(bool) +# 2291| Block 0 +# 2291| v2291_1(void) = EnterFunction : +# 2291| mu2291_2(unknown) = AliasedDefinition : +# 2291| mu2291_3(unknown) = InitializeNonLocal : +# 2291| r2291_4(glval) = VariableAddress[b] : +# 2291| mu2291_5(bool) = InitializeParameter[b] : &:r2291_4 +# 2292| r2292_1(glval) = VariableAddress[s1] : +# 2292| mu2292_2(String) = Uninitialized[s1] : &:r2292_1 +# 2292| r2292_3(glval) = FunctionAddress[String] : +# 2292| v2292_4(void) = Call[String] : func:r2292_3, this:r2292_1 +# 2292| mu2292_5(unknown) = ^CallSideEffect : ~m? +# 2292| mu2292_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2292_1 +# 2293| r2293_1(glval) = VariableAddress[b] : +# 2293| r2293_2(bool) = Load[b] : &:r2293_1, ~m? +# 2293| v2293_3(void) = ConditionalBranch : r2293_2 #-----| False -> Block 2 #-----| True -> Block 1 -# 2280| Block 1 -# 2280| r2280_1(glval) = VariableAddress[s2] : -# 2280| mu2280_2(String) = Uninitialized[s2] : &:r2280_1 -# 2280| r2280_3(glval) = FunctionAddress[String] : -# 2280| v2280_4(void) = Call[String] : func:r2280_3, this:r2280_1 -# 2280| mu2280_5(unknown) = ^CallSideEffect : ~m? -# 2280| mu2280_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2280_1 -# 2281| r2281_1(glval) = VariableAddress[s2] : -# 2281| r2281_2(glval) = FunctionAddress[~String] : -# 2281| v2281_3(void) = Call[~String] : func:r2281_2, this:r2281_1 -# 2281| mu2281_4(unknown) = ^CallSideEffect : ~m? -# 2281| v2281_5(void) = ^IndirectReadSideEffect[-1] : &:r2281_1, ~m? -# 2281| mu2281_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2281_1 +# 2294| Block 1 +# 2294| r2294_1(glval) = VariableAddress[s2] : +# 2294| mu2294_2(String) = Uninitialized[s2] : &:r2294_1 +# 2294| r2294_3(glval) = FunctionAddress[String] : +# 2294| v2294_4(void) = Call[String] : func:r2294_3, this:r2294_1 +# 2294| mu2294_5(unknown) = ^CallSideEffect : ~m? +# 2294| mu2294_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2294_1 +# 2295| r2295_1(glval) = VariableAddress[s2] : +# 2295| r2295_2(glval) = FunctionAddress[~String] : +# 2295| v2295_3(void) = Call[~String] : func:r2295_2, this:r2295_1 +# 2295| mu2295_4(unknown) = ^CallSideEffect : ~m? +# 2295| v2295_5(void) = ^IndirectReadSideEffect[-1] : &:r2295_1, ~m? +# 2295| mu2295_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2295_1 #-----| Goto -> Block 3 -# 2282| Block 2 -# 2282| r2282_1(glval) = VariableAddress[s3] : -# 2282| mu2282_2(String) = Uninitialized[s3] : &:r2282_1 -# 2282| r2282_3(glval) = FunctionAddress[String] : -# 2282| v2282_4(void) = Call[String] : func:r2282_3, this:r2282_1 -# 2282| mu2282_5(unknown) = ^CallSideEffect : ~m? -# 2282| mu2282_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2282_1 -# 2283| r2283_1(glval) = VariableAddress[s3] : -# 2283| r2283_2(glval) = FunctionAddress[~String] : -# 2283| v2283_3(void) = Call[~String] : func:r2283_2, this:r2283_1 -# 2283| mu2283_4(unknown) = ^CallSideEffect : ~m? -# 2283| v2283_5(void) = ^IndirectReadSideEffect[-1] : &:r2283_1, ~m? -# 2283| mu2283_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2283_1 +# 2296| Block 2 +# 2296| r2296_1(glval) = VariableAddress[s3] : +# 2296| mu2296_2(String) = Uninitialized[s3] : &:r2296_1 +# 2296| r2296_3(glval) = FunctionAddress[String] : +# 2296| v2296_4(void) = Call[String] : func:r2296_3, this:r2296_1 +# 2296| mu2296_5(unknown) = ^CallSideEffect : ~m? +# 2296| mu2296_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2296_1 +# 2297| r2297_1(glval) = VariableAddress[s3] : +# 2297| r2297_2(glval) = FunctionAddress[~String] : +# 2297| v2297_3(void) = Call[~String] : func:r2297_2, this:r2297_1 +# 2297| mu2297_4(unknown) = ^CallSideEffect : ~m? +# 2297| v2297_5(void) = ^IndirectReadSideEffect[-1] : &:r2297_1, ~m? +# 2297| mu2297_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2297_1 #-----| Goto -> Block 3 -# 2284| Block 3 -# 2284| r2284_1(glval) = VariableAddress[s4] : -# 2284| mu2284_2(String) = Uninitialized[s4] : &:r2284_1 -# 2284| r2284_3(glval) = FunctionAddress[String] : -# 2284| v2284_4(void) = Call[String] : func:r2284_3, this:r2284_1 -# 2284| mu2284_5(unknown) = ^CallSideEffect : ~m? -# 2284| mu2284_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2284_1 -# 2285| v2285_1(void) = NoOp : -# 2285| r2285_2(glval) = VariableAddress[s4] : -# 2285| r2285_3(glval) = FunctionAddress[~String] : -# 2285| v2285_4(void) = Call[~String] : func:r2285_3, this:r2285_2 -# 2285| mu2285_5(unknown) = ^CallSideEffect : ~m? -# 2285| v2285_6(void) = ^IndirectReadSideEffect[-1] : &:r2285_2, ~m? -# 2285| mu2285_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2285_2 -# 2285| r2285_8(glval) = VariableAddress[s1] : -# 2285| r2285_9(glval) = FunctionAddress[~String] : -# 2285| v2285_10(void) = Call[~String] : func:r2285_9, this:r2285_8 -# 2285| mu2285_11(unknown) = ^CallSideEffect : ~m? -# 2285| v2285_12(void) = ^IndirectReadSideEffect[-1] : &:r2285_8, ~m? -# 2285| mu2285_13(String) = ^IndirectMayWriteSideEffect[-1] : &:r2285_8 -# 2277| v2277_6(void) = ReturnVoid : -# 2277| v2277_7(void) = AliasedUse : ~m? -# 2277| v2277_8(void) = ExitFunction : +# 2298| Block 3 +# 2298| r2298_1(glval) = VariableAddress[s4] : +# 2298| mu2298_2(String) = Uninitialized[s4] : &:r2298_1 +# 2298| r2298_3(glval) = FunctionAddress[String] : +# 2298| v2298_4(void) = Call[String] : func:r2298_3, this:r2298_1 +# 2298| mu2298_5(unknown) = ^CallSideEffect : ~m? +# 2298| mu2298_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2298_1 +# 2299| v2299_1(void) = NoOp : +# 2299| r2299_2(glval) = VariableAddress[s4] : +# 2299| r2299_3(glval) = FunctionAddress[~String] : +# 2299| v2299_4(void) = Call[~String] : func:r2299_3, this:r2299_2 +# 2299| mu2299_5(unknown) = ^CallSideEffect : ~m? +# 2299| v2299_6(void) = ^IndirectReadSideEffect[-1] : &:r2299_2, ~m? +# 2299| mu2299_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2299_2 +# 2299| r2299_8(glval) = VariableAddress[s1] : +# 2299| r2299_9(glval) = FunctionAddress[~String] : +# 2299| v2299_10(void) = Call[~String] : func:r2299_9, this:r2299_8 +# 2299| mu2299_11(unknown) = ^CallSideEffect : ~m? +# 2299| v2299_12(void) = ^IndirectReadSideEffect[-1] : &:r2299_8, ~m? +# 2299| mu2299_13(String) = ^IndirectMayWriteSideEffect[-1] : &:r2299_8 +# 2291| v2291_6(void) = ReturnVoid : +# 2291| v2291_7(void) = AliasedUse : ~m? +# 2291| v2291_8(void) = ExitFunction : -# 2287| void ForDestructors() -# 2287| Block 0 -# 2287| v2287_1(void) = EnterFunction : -# 2287| mu2287_2(unknown) = AliasedDefinition : -# 2287| mu2287_3(unknown) = InitializeNonLocal : -# 2288| r2288_1(glval) = VariableAddress[c] : -# 2288| r2288_2(char) = Constant[97] : -# 2288| mu2288_3(char) = Store[c] : &:r2288_1, r2288_2 -# 2289| r2289_1(glval) = VariableAddress[s] : -# 2289| mu2289_2(String) = Uninitialized[s] : &:r2289_1 -# 2289| r2289_3(glval) = FunctionAddress[String] : -# 2289| r2289_4(glval) = StringConstant["hello"] : -# 2289| r2289_5(char *) = Convert : r2289_4 -# 2289| v2289_6(void) = Call[String] : func:r2289_3, this:r2289_1, 0:r2289_5 -# 2289| mu2289_7(unknown) = ^CallSideEffect : ~m? -# 2289| v2289_8(void) = ^BufferReadSideEffect[0] : &:r2289_5, ~m? -# 2289| mu2289_9(String) = ^IndirectMayWriteSideEffect[-1] : &:r2289_1 -#-----| Goto -> Block 1 - -# 2289| Block 1 -# 2289| r2289_10(glval) = VariableAddress[c] : -# 2289| r2289_11(char) = Load[c] : &:r2289_10, ~m? -# 2289| r2289_12(int) = Convert : r2289_11 -# 2289| r2289_13(int) = Constant[0] : -# 2289| r2289_14(bool) = CompareNE : r2289_12, r2289_13 -# 2289| v2289_15(void) = ConditionalBranch : r2289_14 -#-----| False -> Block 3 -#-----| True -> Block 2 - -# 2290| Block 2 -# 2290| r2290_1(glval) = VariableAddress[s2] : -# 2290| mu2290_2(String) = Uninitialized[s2] : &:r2290_1 -# 2290| r2290_3(glval) = FunctionAddress[String] : -# 2290| v2290_4(void) = Call[String] : func:r2290_3, this:r2290_1 -# 2290| mu2290_5(unknown) = ^CallSideEffect : ~m? -# 2290| mu2290_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2290_1 -# 2291| r2291_1(glval) = VariableAddress[s2] : -# 2291| r2291_2(glval) = FunctionAddress[~String] : -# 2291| v2291_3(void) = Call[~String] : func:r2291_2, this:r2291_1 -# 2291| mu2291_4(unknown) = ^CallSideEffect : ~m? -# 2291| v2291_5(void) = ^IndirectReadSideEffect[-1] : &:r2291_1, ~m? -# 2291| mu2291_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2291_1 -# 2289| r2289_16(glval) = VariableAddress[s] : -# 2289| r2289_17(glval) = FunctionAddress[pop_back] : -# 2289| r2289_18(char) = Call[pop_back] : func:r2289_17, this:r2289_16 -# 2289| mu2289_19(unknown) = ^CallSideEffect : ~m? -# 2289| v2289_20(void) = ^IndirectReadSideEffect[-1] : &:r2289_16, ~m? -# 2289| mu2289_21(String) = ^IndirectMayWriteSideEffect[-1] : &:r2289_16 -# 2289| r2289_22(glval) = VariableAddress[c] : -# 2289| mu2289_23(char) = Store[c] : &:r2289_22, r2289_18 -#-----| Goto (back edge) -> Block 1 - -# 2289| Block 3 -# 2289| r2289_24(glval) = VariableAddress[s] : -# 2289| r2289_25(glval) = FunctionAddress[~String] : -# 2289| v2289_26(void) = Call[~String] : func:r2289_25, this:r2289_24 -# 2289| mu2289_27(unknown) = ^CallSideEffect : ~m? -# 2289| v2289_28(void) = ^IndirectReadSideEffect[-1] : &:r2289_24, ~m? -# 2289| mu2289_29(String) = ^IndirectMayWriteSideEffect[-1] : &:r2289_24 -# 2293| r2293_1(glval &&>) = VariableAddress[(__range)] : -# 2293| r2293_2(glval>) = VariableAddress[#temp2293:20] : -# 2293| mu2293_3(vector) = Uninitialized[#temp2293:20] : &:r2293_2 -# 2293| r2293_4(glval) = FunctionAddress[vector] : -# 2293| r2293_5(glval) = VariableAddress[#temp2293:40] : -# 2293| mu2293_6(String) = Uninitialized[#temp2293:40] : &:r2293_5 -# 2293| r2293_7(glval) = FunctionAddress[String] : -# 2293| r2293_8(glval) = StringConstant["hello"] : -# 2293| r2293_9(char *) = Convert : r2293_8 -# 2293| v2293_10(void) = Call[String] : func:r2293_7, this:r2293_5, 0:r2293_9 -# 2293| mu2293_11(unknown) = ^CallSideEffect : ~m? -# 2293| v2293_12(void) = ^BufferReadSideEffect[0] : &:r2293_9, ~m? -# 2293| mu2293_13(String) = ^IndirectMayWriteSideEffect[-1] : &:r2293_5 -# 2293| r2293_14(String) = Load[#temp2293:40] : &:r2293_5, ~m? -# 2293| v2293_15(void) = Call[vector] : func:r2293_4, this:r2293_2, 0:r2293_14 -# 2293| mu2293_16(unknown) = ^CallSideEffect : ~m? -# 2293| mu2293_17(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2293_2 -# 2293| r2293_18(vector &) = CopyValue : r2293_2 -# 2293| mu2293_19(vector &&) = Store[(__range)] : &:r2293_1, r2293_18 -# 2293| r2293_20(glval>) = VariableAddress[(__begin)] : -# 2293| r2293_21(glval &&>) = VariableAddress[(__range)] : -# 2293| r2293_22(vector &&) = Load[(__range)] : &:r2293_21, ~m? -#-----| r0_1(glval>) = CopyValue : r2293_22 -#-----| r0_2(glval>) = Convert : r0_1 -# 2293| r2293_23(glval) = FunctionAddress[begin] : -# 2293| r2293_24(iterator) = Call[begin] : func:r2293_23, this:r0_2 -#-----| v0_3(void) = ^IndirectReadSideEffect[-1] : &:r0_2, ~m? -# 2293| mu2293_25(iterator) = Store[(__begin)] : &:r2293_20, r2293_24 -# 2293| r2293_26(glval>) = VariableAddress[(__end)] : -# 2293| r2293_27(glval &&>) = VariableAddress[(__range)] : -# 2293| r2293_28(vector &&) = Load[(__range)] : &:r2293_27, ~m? -#-----| r0_4(glval>) = CopyValue : r2293_28 -#-----| r0_5(glval>) = Convert : r0_4 -# 2293| r2293_29(glval) = FunctionAddress[end] : -# 2293| r2293_30(iterator) = Call[end] : func:r2293_29, this:r0_5 -#-----| v0_6(void) = ^IndirectReadSideEffect[-1] : &:r0_5, ~m? -# 2293| mu2293_31(iterator) = Store[(__end)] : &:r2293_26, r2293_30 -#-----| Goto -> Block 4 - -# 2293| Block 4 -# 2293| r2293_32(glval>) = VariableAddress[(__begin)] : -#-----| r0_7(glval>) = Convert : r2293_32 -# 2293| r2293_33(glval) = FunctionAddress[operator!=] : -#-----| r0_8(glval>) = VariableAddress[#temp0:0] : -#-----| mu0_9(iterator) = Uninitialized[#temp0:0] : &:r0_8 -# 2293| r2293_34(glval) = FunctionAddress[iterator] : -# 2293| r2293_35(glval>) = VariableAddress[(__end)] : -#-----| r0_10(glval>) = Convert : r2293_35 -#-----| r0_11(iterator &) = CopyValue : r0_10 -# 2293| v2293_36(void) = Call[iterator] : func:r2293_34, this:r0_8, 0:r0_11 -# 2293| mu2293_37(unknown) = ^CallSideEffect : ~m? -#-----| v0_12(void) = ^BufferReadSideEffect[0] : &:r0_11, ~m? -# 2293| mu2293_38(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r0_8 -#-----| r0_13(iterator) = Load[#temp0:0] : &:r0_8, ~m? -# 2293| r2293_39(bool) = Call[operator!=] : func:r2293_33, this:r0_7, 0:r0_13 -# 2293| mu2293_40(unknown) = ^CallSideEffect : ~m? -#-----| v0_14(void) = ^IndirectReadSideEffect[-1] : &:r0_7, ~m? -# 2293| v2293_41(void) = ConditionalBranch : r2293_39 -#-----| False -> Block 6 -#-----| True -> Block 5 - -# 2293| Block 5 -# 2293| r2293_42(glval) = VariableAddress[s] : -# 2293| mu2293_43(String) = Uninitialized[s] : &:r2293_42 -# 2293| r2293_44(glval) = FunctionAddress[String] : -# 2293| r2293_45(glval>) = VariableAddress[(__begin)] : -#-----| r0_15(glval>) = Convert : r2293_45 -# 2293| r2293_46(glval) = FunctionAddress[operator*] : -# 2293| r2293_47(String &) = Call[operator*] : func:r2293_46, this:r0_15 -# 2293| mu2293_48(unknown) = ^CallSideEffect : ~m? -#-----| v0_16(void) = ^IndirectReadSideEffect[-1] : &:r0_15, ~m? -# 2293| r2293_49(glval) = CopyValue : r2293_47 -# 2293| r2293_50(glval) = Convert : r2293_49 -# 2293| r2293_51(String &) = CopyValue : r2293_50 -# 2293| v2293_52(void) = Call[String] : func:r2293_44, this:r2293_42, 0:r2293_51 -# 2293| mu2293_53(unknown) = ^CallSideEffect : ~m? -# 2293| v2293_54(void) = ^BufferReadSideEffect[0] : &:r2293_51, ~m? -# 2293| mu2293_55(String) = ^IndirectMayWriteSideEffect[-1] : &:r2293_42 -# 2294| r2294_1(glval) = VariableAddress[s2] : -# 2294| mu2294_2(String) = Uninitialized[s2] : &:r2294_1 -# 2294| r2294_3(glval) = FunctionAddress[String] : -# 2294| v2294_4(void) = Call[String] : func:r2294_3, this:r2294_1 -# 2294| mu2294_5(unknown) = ^CallSideEffect : ~m? -# 2294| mu2294_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2294_1 -# 2295| r2295_1(glval) = VariableAddress[s2] : -# 2295| r2295_2(glval) = FunctionAddress[~String] : -# 2295| v2295_3(void) = Call[~String] : func:r2295_2, this:r2295_1 -# 2295| mu2295_4(unknown) = ^CallSideEffect : ~m? -# 2295| v2295_5(void) = ^IndirectReadSideEffect[-1] : &:r2295_1, ~m? -# 2295| mu2295_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2295_1 -# 2293| r2293_56(glval) = VariableAddress[s] : -# 2293| r2293_57(glval) = FunctionAddress[~String] : -# 2293| v2293_58(void) = Call[~String] : func:r2293_57, this:r2293_56 -# 2293| mu2293_59(unknown) = ^CallSideEffect : ~m? -# 2293| v2293_60(void) = ^IndirectReadSideEffect[-1] : &:r2293_56, ~m? -# 2293| mu2293_61(String) = ^IndirectMayWriteSideEffect[-1] : &:r2293_56 -# 2293| r2293_62(glval>) = VariableAddress[(__begin)] : -# 2293| r2293_63(glval) = FunctionAddress[operator++] : -# 2293| r2293_64(iterator &) = Call[operator++] : func:r2293_63, this:r2293_62 -# 2293| mu2293_65(unknown) = ^CallSideEffect : ~m? -# 2293| v2293_66(void) = ^IndirectReadSideEffect[-1] : &:r2293_62, ~m? -# 2293| mu2293_67(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r2293_62 -# 2293| r2293_68(glval>) = CopyValue : r2293_64 -#-----| Goto (back edge) -> Block 4 - -# 2297| Block 6 -# 2297| r2297_1(glval) = VariableAddress[s] : -# 2297| mu2297_2(String) = Uninitialized[s] : &:r2297_1 -# 2297| r2297_3(glval) = FunctionAddress[String] : -# 2297| r2297_4(glval) = StringConstant["hello"] : -# 2297| r2297_5(char *) = Convert : r2297_4 -# 2297| v2297_6(void) = Call[String] : func:r2297_3, this:r2297_1, 0:r2297_5 -# 2297| mu2297_7(unknown) = ^CallSideEffect : ~m? -# 2297| v2297_8(void) = ^BufferReadSideEffect[0] : &:r2297_5, ~m? -# 2297| mu2297_9(String) = ^IndirectMayWriteSideEffect[-1] : &:r2297_1 -# 2297| r2297_10(glval) = VariableAddress[s2] : -# 2297| mu2297_11(String) = Uninitialized[s2] : &:r2297_10 -# 2297| r2297_12(glval) = FunctionAddress[String] : -# 2297| r2297_13(glval) = StringConstant["world"] : -# 2297| r2297_14(char *) = Convert : r2297_13 -# 2297| v2297_15(void) = Call[String] : func:r2297_12, this:r2297_10, 0:r2297_14 -# 2297| mu2297_16(unknown) = ^CallSideEffect : ~m? -# 2297| v2297_17(void) = ^BufferReadSideEffect[0] : &:r2297_14, ~m? -# 2297| mu2297_18(String) = ^IndirectMayWriteSideEffect[-1] : &:r2297_10 -#-----| Goto -> Block 7 - -# 2297| Block 7 -# 2297| r2297_19(glval) = VariableAddress[c] : -# 2297| r2297_20(char) = Load[c] : &:r2297_19, ~m? -# 2297| r2297_21(int) = Convert : r2297_20 -# 2297| r2297_22(int) = Constant[0] : -# 2297| r2297_23(bool) = CompareNE : r2297_21, r2297_22 -# 2297| v2297_24(void) = ConditionalBranch : r2297_23 -#-----| False -> Block 9 -#-----| True -> Block 8 - -# 2298| Block 8 -# 2298| r2298_1(char) = Constant[0] : -# 2298| r2298_2(glval) = VariableAddress[c] : -# 2298| mu2298_3(char) = Store[c] : &:r2298_2, r2298_1 -# 2297| r2297_25(glval) = VariableAddress[s] : -# 2297| r2297_26(glval) = FunctionAddress[pop_back] : -# 2297| r2297_27(char) = Call[pop_back] : func:r2297_26, this:r2297_25 -# 2297| mu2297_28(unknown) = ^CallSideEffect : ~m? -# 2297| v2297_29(void) = ^IndirectReadSideEffect[-1] : &:r2297_25, ~m? -# 2297| mu2297_30(String) = ^IndirectMayWriteSideEffect[-1] : &:r2297_25 -# 2297| r2297_31(glval) = VariableAddress[c] : -# 2297| mu2297_32(char) = Store[c] : &:r2297_31, r2297_27 -#-----| Goto (back edge) -> Block 7 - -# 2297| Block 9 -# 2297| r2297_33(glval) = VariableAddress[s2] : -# 2297| r2297_34(glval) = FunctionAddress[~String] : -# 2297| v2297_35(void) = Call[~String] : func:r2297_34, this:r2297_33 -# 2297| mu2297_36(unknown) = ^CallSideEffect : ~m? -# 2297| v2297_37(void) = ^IndirectReadSideEffect[-1] : &:r2297_33, ~m? -# 2297| mu2297_38(String) = ^IndirectMayWriteSideEffect[-1] : &:r2297_33 -# 2297| r2297_39(glval) = VariableAddress[s] : -# 2297| r2297_40(glval) = FunctionAddress[~String] : -# 2297| v2297_41(void) = Call[~String] : func:r2297_40, this:r2297_39 -# 2297| mu2297_42(unknown) = ^CallSideEffect : ~m? -# 2297| v2297_43(void) = ^IndirectReadSideEffect[-1] : &:r2297_39, ~m? -# 2297| mu2297_44(String) = ^IndirectMayWriteSideEffect[-1] : &:r2297_39 -# 2300| v2300_1(void) = NoOp : -# 2287| v2287_4(void) = ReturnVoid : -# 2287| v2287_5(void) = AliasedUse : ~m? -# 2287| v2287_6(void) = ExitFunction : - -# 2302| void IfDestructors2(bool) -# 2302| Block 0 -# 2302| v2302_1(void) = EnterFunction : -# 2302| mu2302_2(unknown) = AliasedDefinition : -# 2302| mu2302_3(unknown) = InitializeNonLocal : -# 2302| r2302_4(glval) = VariableAddress[b] : -# 2302| mu2302_5(bool) = InitializeParameter[b] : &:r2302_4 +# 2301| void ForDestructors() +# 2301| Block 0 +# 2301| v2301_1(void) = EnterFunction : +# 2301| mu2301_2(unknown) = AliasedDefinition : +# 2301| mu2301_3(unknown) = InitializeNonLocal : +# 2302| r2302_1(glval) = VariableAddress[c] : +# 2302| r2302_2(char) = Constant[97] : +# 2302| mu2302_3(char) = Store[c] : &:r2302_1, r2302_2 # 2303| r2303_1(glval) = VariableAddress[s] : # 2303| mu2303_2(String) = Uninitialized[s] : &:r2303_1 # 2303| r2303_3(glval) = FunctionAddress[String] : @@ -13636,346 +13513,911 @@ ir.cpp: # 2303| mu2303_7(unknown) = ^CallSideEffect : ~m? # 2303| v2303_8(void) = ^BufferReadSideEffect[0] : &:r2303_5, ~m? # 2303| mu2303_9(String) = ^IndirectMayWriteSideEffect[-1] : &:r2303_1 -# 2303| r2303_10(glval) = VariableAddress[b] : -# 2303| r2303_11(bool) = Load[b] : &:r2303_10, ~m? -# 2303| v2303_12(void) = ConditionalBranch : r2303_11 -#-----| False -> Block 2 -#-----| True -> Block 1 - -# 2304| Block 1 -# 2304| r2304_1(glval) = VariableAddress[x] : -# 2304| r2304_2(int) = Constant[0] : -# 2304| mu2304_3(int) = Store[x] : &:r2304_1, r2304_2 -#-----| Goto -> Block 3 - -# 2306| Block 2 -# 2306| r2306_1(glval) = VariableAddress[y] : -# 2306| r2306_2(int) = Constant[0] : -# 2306| mu2306_3(int) = Store[y] : &:r2306_1, r2306_2 -#-----| Goto -> Block 3 - -# 2307| Block 3 -# 2307| r2307_1(glval) = VariableAddress[s] : -# 2307| r2307_2(glval) = FunctionAddress[~String] : -# 2307| v2307_3(void) = Call[~String] : func:r2307_2, this:r2307_1 -# 2307| mu2307_4(unknown) = ^CallSideEffect : ~m? -# 2307| v2307_5(void) = ^IndirectReadSideEffect[-1] : &:r2307_1, ~m? -# 2307| mu2307_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2307_1 -# 2308| v2308_1(void) = NoOp : -# 2302| v2302_6(void) = ReturnVoid : -# 2302| v2302_7(void) = AliasedUse : ~m? -# 2302| v2302_8(void) = ExitFunction : - -# 2317| void IfDestructors3(bool) -# 2317| Block 0 -# 2317| v2317_1(void) = EnterFunction : -# 2317| mu2317_2(unknown) = AliasedDefinition : -# 2317| mu2317_3(unknown) = InitializeNonLocal : -# 2317| r2317_4(glval) = VariableAddress[b] : -# 2317| mu2317_5(bool) = InitializeParameter[b] : &:r2317_4 -# 2318| r2318_1(glval) = VariableAddress[B] : -# 2318| mu2318_2(Bool) = Uninitialized[B] : &:r2318_1 -# 2318| r2318_3(glval) = FunctionAddress[Bool] : -# 2318| r2318_4(glval) = VariableAddress[b] : -# 2318| r2318_5(bool) = Load[b] : &:r2318_4, ~m? -# 2318| v2318_6(void) = Call[Bool] : func:r2318_3, this:r2318_1, 0:r2318_5 -# 2318| mu2318_7(unknown) = ^CallSideEffect : ~m? -# 2318| mu2318_8(Bool) = ^IndirectMayWriteSideEffect[-1] : &:r2318_1 -# 2318| r2318_9(glval) = VariableAddress[B] : -# 2318| r2318_10(glval) = FunctionAddress[operator bool] : -# 2318| r2318_11(bool) = Call[operator bool] : func:r2318_10, this:r2318_9 -# 2318| mu2318_12(unknown) = ^CallSideEffect : ~m? -# 2318| v2318_13(void) = ^IndirectReadSideEffect[-1] : &:r2318_9, ~m? -# 2318| mu2318_14(Bool) = ^IndirectMayWriteSideEffect[-1] : &:r2318_9 -# 2318| r2318_15(bool) = CopyValue : r2318_11 -# 2318| v2318_16(void) = ConditionalBranch : r2318_15 -#-----| False -> Block 2 -#-----| True -> Block 1 - -# 2319| Block 1 -# 2319| r2319_1(glval) = VariableAddress[s1] : -# 2319| mu2319_2(String) = Uninitialized[s1] : &:r2319_1 -# 2319| r2319_3(glval) = FunctionAddress[String] : -# 2319| v2319_4(void) = Call[String] : func:r2319_3, this:r2319_1 -# 2319| mu2319_5(unknown) = ^CallSideEffect : ~m? -# 2319| mu2319_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2319_1 -# 2320| r2320_1(glval) = VariableAddress[s1] : -# 2320| r2320_2(glval) = FunctionAddress[~String] : -# 2320| v2320_3(void) = Call[~String] : func:r2320_2, this:r2320_1 -# 2320| mu2320_4(unknown) = ^CallSideEffect : ~m? -# 2320| v2320_5(void) = ^IndirectReadSideEffect[-1] : &:r2320_1, ~m? -# 2320| mu2320_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2320_1 -#-----| Goto -> Block 3 - -# 2321| Block 2 -# 2321| r2321_1(glval) = VariableAddress[s2] : -# 2321| mu2321_2(String) = Uninitialized[s2] : &:r2321_1 -# 2321| r2321_3(glval) = FunctionAddress[String] : -# 2321| v2321_4(void) = Call[String] : func:r2321_3, this:r2321_1 -# 2321| mu2321_5(unknown) = ^CallSideEffect : ~m? -# 2321| mu2321_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2321_1 -# 2322| r2322_1(glval) = VariableAddress[s2] : -# 2322| r2322_2(glval) = FunctionAddress[~String] : -# 2322| v2322_3(void) = Call[~String] : func:r2322_2, this:r2322_1 -# 2322| mu2322_4(unknown) = ^CallSideEffect : ~m? -# 2322| v2322_5(void) = ^IndirectReadSideEffect[-1] : &:r2322_1, ~m? -# 2322| mu2322_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2322_1 -#-----| Goto -> Block 3 - -# 2322| Block 3 -# 2322| r2322_7(glval) = VariableAddress[B] : -# 2322| r2322_8(glval) = FunctionAddress[~Bool] : -# 2322| v2322_9(void) = Call[~Bool] : func:r2322_8, this:r2322_7 -# 2322| mu2322_10(unknown) = ^CallSideEffect : ~m? -# 2322| v2322_11(void) = ^IndirectReadSideEffect[-1] : &:r2322_7, ~m? -# 2322| mu2322_12(Bool) = ^IndirectMayWriteSideEffect[-1] : &:r2322_7 -# 2323| v2323_1(void) = NoOp : -# 2317| v2317_6(void) = ReturnVoid : -# 2317| v2317_7(void) = AliasedUse : ~m? -# 2317| v2317_8(void) = ExitFunction : - -# 2325| void WhileLoopDestructors(bool) -# 2325| Block 0 -# 2325| v2325_1(void) = EnterFunction : -# 2325| mu2325_2(unknown) = AliasedDefinition : -# 2325| mu2325_3(unknown) = InitializeNonLocal : -# 2325| r2325_4(glval) = VariableAddress[b] : -# 2325| mu2325_5(bool) = InitializeParameter[b] : &:r2325_4 -# 2327| r2327_1(glval) = VariableAddress[s] : -# 2327| mu2327_2(String) = Uninitialized[s] : &:r2327_1 -# 2327| r2327_3(glval) = FunctionAddress[String] : -# 2327| v2327_4(void) = Call[String] : func:r2327_3, this:r2327_1 -# 2327| mu2327_5(unknown) = ^CallSideEffect : ~m? -# 2327| mu2327_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2327_1 #-----| Goto -> Block 1 -# 2328| Block 1 -# 2328| r2328_1(glval) = VariableAddress[b] : -# 2328| r2328_2(bool) = Load[b] : &:r2328_1, ~m? -# 2328| v2328_3(void) = ConditionalBranch : r2328_2 +# 2303| Block 1 +# 2303| r2303_10(glval) = VariableAddress[c] : +# 2303| r2303_11(char) = Load[c] : &:r2303_10, ~m? +# 2303| r2303_12(int) = Convert : r2303_11 +# 2303| r2303_13(int) = Constant[0] : +# 2303| r2303_14(bool) = CompareNE : r2303_12, r2303_13 +# 2303| v2303_15(void) = ConditionalBranch : r2303_14 #-----| False -> Block 3 #-----| True -> Block 2 -# 2329| Block 2 -# 2329| r2329_1(bool) = Constant[0] : -# 2329| r2329_2(glval) = VariableAddress[b] : -# 2329| mu2329_3(bool) = Store[b] : &:r2329_2, r2329_1 +# 2304| Block 2 +# 2304| r2304_1(glval) = VariableAddress[s2] : +# 2304| mu2304_2(String) = Uninitialized[s2] : &:r2304_1 +# 2304| r2304_3(glval) = FunctionAddress[String] : +# 2304| v2304_4(void) = Call[String] : func:r2304_3, this:r2304_1 +# 2304| mu2304_5(unknown) = ^CallSideEffect : ~m? +# 2304| mu2304_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2304_1 +# 2305| r2305_1(glval) = VariableAddress[s2] : +# 2305| r2305_2(glval) = FunctionAddress[~String] : +# 2305| v2305_3(void) = Call[~String] : func:r2305_2, this:r2305_1 +# 2305| mu2305_4(unknown) = ^CallSideEffect : ~m? +# 2305| v2305_5(void) = ^IndirectReadSideEffect[-1] : &:r2305_1, ~m? +# 2305| mu2305_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2305_1 +# 2303| r2303_16(glval) = VariableAddress[s] : +# 2303| r2303_17(glval) = FunctionAddress[pop_back] : +# 2303| r2303_18(char) = Call[pop_back] : func:r2303_17, this:r2303_16 +# 2303| mu2303_19(unknown) = ^CallSideEffect : ~m? +# 2303| v2303_20(void) = ^IndirectReadSideEffect[-1] : &:r2303_16, ~m? +# 2303| mu2303_21(String) = ^IndirectMayWriteSideEffect[-1] : &:r2303_16 +# 2303| r2303_22(glval) = VariableAddress[c] : +# 2303| mu2303_23(char) = Store[c] : &:r2303_22, r2303_18 #-----| Goto (back edge) -> Block 1 -# 2331| Block 3 -# 2331| r2331_1(glval) = VariableAddress[s] : -# 2331| r2331_2(glval) = FunctionAddress[~String] : -# 2331| v2331_3(void) = Call[~String] : func:r2331_2, this:r2331_1 -# 2331| mu2331_4(unknown) = ^CallSideEffect : ~m? -# 2331| v2331_5(void) = ^IndirectReadSideEffect[-1] : &:r2331_1, ~m? -# 2331| mu2331_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2331_1 +# 2303| Block 3 +# 2303| r2303_24(glval) = VariableAddress[s] : +# 2303| r2303_25(glval) = FunctionAddress[~String] : +# 2303| v2303_26(void) = Call[~String] : func:r2303_25, this:r2303_24 +# 2303| mu2303_27(unknown) = ^CallSideEffect : ~m? +# 2303| v2303_28(void) = ^IndirectReadSideEffect[-1] : &:r2303_24, ~m? +# 2303| mu2303_29(String) = ^IndirectMayWriteSideEffect[-1] : &:r2303_24 +# 2307| r2307_1(glval &&>) = VariableAddress[(__range)] : +# 2307| r2307_2(glval>) = VariableAddress[#temp2307:20] : +# 2307| mu2307_3(vector) = Uninitialized[#temp2307:20] : &:r2307_2 +# 2307| r2307_4(glval) = FunctionAddress[vector] : +# 2307| r2307_5(glval) = VariableAddress[#temp2307:40] : +# 2307| mu2307_6(String) = Uninitialized[#temp2307:40] : &:r2307_5 +# 2307| r2307_7(glval) = FunctionAddress[String] : +# 2307| r2307_8(glval) = StringConstant["hello"] : +# 2307| r2307_9(char *) = Convert : r2307_8 +# 2307| v2307_10(void) = Call[String] : func:r2307_7, this:r2307_5, 0:r2307_9 +# 2307| mu2307_11(unknown) = ^CallSideEffect : ~m? +# 2307| v2307_12(void) = ^BufferReadSideEffect[0] : &:r2307_9, ~m? +# 2307| mu2307_13(String) = ^IndirectMayWriteSideEffect[-1] : &:r2307_5 +# 2307| r2307_14(String) = Load[#temp2307:40] : &:r2307_5, ~m? +# 2307| v2307_15(void) = Call[vector] : func:r2307_4, this:r2307_2, 0:r2307_14 +# 2307| mu2307_16(unknown) = ^CallSideEffect : ~m? +# 2307| mu2307_17(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2307_2 +# 2307| r2307_18(vector &) = CopyValue : r2307_2 +# 2307| mu2307_19(vector &&) = Store[(__range)] : &:r2307_1, r2307_18 +# 2307| r2307_20(glval>) = VariableAddress[(__begin)] : +# 2307| r2307_21(glval &&>) = VariableAddress[(__range)] : +# 2307| r2307_22(vector &&) = Load[(__range)] : &:r2307_21, ~m? +#-----| r0_1(glval>) = CopyValue : r2307_22 +#-----| r0_2(glval>) = Convert : r0_1 +# 2307| r2307_23(glval) = FunctionAddress[begin] : +# 2307| r2307_24(iterator) = Call[begin] : func:r2307_23, this:r0_2 +#-----| v0_3(void) = ^IndirectReadSideEffect[-1] : &:r0_2, ~m? +# 2307| mu2307_25(iterator) = Store[(__begin)] : &:r2307_20, r2307_24 +# 2307| r2307_26(glval>) = VariableAddress[(__end)] : +# 2307| r2307_27(glval &&>) = VariableAddress[(__range)] : +# 2307| r2307_28(vector &&) = Load[(__range)] : &:r2307_27, ~m? +#-----| r0_4(glval>) = CopyValue : r2307_28 +#-----| r0_5(glval>) = Convert : r0_4 +# 2307| r2307_29(glval) = FunctionAddress[end] : +# 2307| r2307_30(iterator) = Call[end] : func:r2307_29, this:r0_5 +#-----| v0_6(void) = ^IndirectReadSideEffect[-1] : &:r0_5, ~m? +# 2307| mu2307_31(iterator) = Store[(__end)] : &:r2307_26, r2307_30 #-----| Goto -> Block 4 -# 2334| Block 4 -# 2334| r2334_1(glval) = VariableAddress[B] : -# 2334| mu2334_2(Bool) = Uninitialized[B] : &:r2334_1 -# 2334| r2334_3(glval) = FunctionAddress[Bool] : -# 2334| r2334_4(glval) = VariableAddress[b] : -# 2334| r2334_5(bool) = Load[b] : &:r2334_4, ~m? -# 2334| v2334_6(void) = Call[Bool] : func:r2334_3, this:r2334_1, 0:r2334_5 -# 2334| mu2334_7(unknown) = ^CallSideEffect : ~m? -# 2334| mu2334_8(Bool) = ^IndirectMayWriteSideEffect[-1] : &:r2334_1 -# 2334| r2334_9(glval) = VariableAddress[B] : -# 2334| r2334_10(glval) = FunctionAddress[operator bool] : -# 2334| r2334_11(bool) = Call[operator bool] : func:r2334_10, this:r2334_9 -# 2334| mu2334_12(unknown) = ^CallSideEffect : ~m? -# 2334| v2334_13(void) = ^IndirectReadSideEffect[-1] : &:r2334_9, ~m? -# 2334| mu2334_14(Bool) = ^IndirectMayWriteSideEffect[-1] : &:r2334_9 -# 2334| r2334_15(bool) = CopyValue : r2334_11 -# 2334| v2334_16(void) = ConditionalBranch : r2334_15 +# 2307| Block 4 +# 2307| r2307_32(glval>) = VariableAddress[(__begin)] : +#-----| r0_7(glval>) = Convert : r2307_32 +# 2307| r2307_33(glval) = FunctionAddress[operator!=] : +#-----| r0_8(glval>) = VariableAddress[#temp0:0] : +#-----| mu0_9(iterator) = Uninitialized[#temp0:0] : &:r0_8 +# 2307| r2307_34(glval) = FunctionAddress[iterator] : +# 2307| r2307_35(glval>) = VariableAddress[(__end)] : +#-----| r0_10(glval>) = Convert : r2307_35 +#-----| r0_11(iterator &) = CopyValue : r0_10 +# 2307| v2307_36(void) = Call[iterator] : func:r2307_34, this:r0_8, 0:r0_11 +# 2307| mu2307_37(unknown) = ^CallSideEffect : ~m? +#-----| v0_12(void) = ^BufferReadSideEffect[0] : &:r0_11, ~m? +# 2307| mu2307_38(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r0_8 +#-----| r0_13(iterator) = Load[#temp0:0] : &:r0_8, ~m? +# 2307| r2307_39(bool) = Call[operator!=] : func:r2307_33, this:r0_7, 0:r0_13 +# 2307| mu2307_40(unknown) = ^CallSideEffect : ~m? +#-----| v0_14(void) = ^IndirectReadSideEffect[-1] : &:r0_7, ~m? +# 2307| v2307_41(void) = ConditionalBranch : r2307_39 #-----| False -> Block 6 #-----| True -> Block 5 -# 2335| Block 5 -# 2335| r2335_1(bool) = Constant[0] : -# 2335| r2335_2(glval) = VariableAddress[b] : -# 2335| mu2335_3(bool) = Store[b] : &:r2335_2, r2335_1 -# 2336| r2336_1(glval) = VariableAddress[B] : -# 2336| r2336_2(glval) = FunctionAddress[~Bool] : -# 2336| v2336_3(void) = Call[~Bool] : func:r2336_2, this:r2336_1 -# 2336| mu2336_4(unknown) = ^CallSideEffect : ~m? -# 2336| v2336_5(void) = ^IndirectReadSideEffect[-1] : &:r2336_1, ~m? -# 2336| mu2336_6(Bool) = ^IndirectMayWriteSideEffect[-1] : &:r2336_1 +# 2307| Block 5 +# 2307| r2307_42(glval) = VariableAddress[s] : +# 2307| mu2307_43(String) = Uninitialized[s] : &:r2307_42 +# 2307| r2307_44(glval) = FunctionAddress[String] : +# 2307| r2307_45(glval>) = VariableAddress[(__begin)] : +#-----| r0_15(glval>) = Convert : r2307_45 +# 2307| r2307_46(glval) = FunctionAddress[operator*] : +# 2307| r2307_47(String &) = Call[operator*] : func:r2307_46, this:r0_15 +# 2307| mu2307_48(unknown) = ^CallSideEffect : ~m? +#-----| v0_16(void) = ^IndirectReadSideEffect[-1] : &:r0_15, ~m? +# 2307| r2307_49(glval) = CopyValue : r2307_47 +# 2307| r2307_50(glval) = Convert : r2307_49 +# 2307| r2307_51(String &) = CopyValue : r2307_50 +# 2307| v2307_52(void) = Call[String] : func:r2307_44, this:r2307_42, 0:r2307_51 +# 2307| mu2307_53(unknown) = ^CallSideEffect : ~m? +# 2307| v2307_54(void) = ^BufferReadSideEffect[0] : &:r2307_51, ~m? +# 2307| mu2307_55(String) = ^IndirectMayWriteSideEffect[-1] : &:r2307_42 +# 2308| r2308_1(glval) = VariableAddress[s2] : +# 2308| mu2308_2(String) = Uninitialized[s2] : &:r2308_1 +# 2308| r2308_3(glval) = FunctionAddress[String] : +# 2308| v2308_4(void) = Call[String] : func:r2308_3, this:r2308_1 +# 2308| mu2308_5(unknown) = ^CallSideEffect : ~m? +# 2308| mu2308_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2308_1 +# 2309| r2309_1(glval) = VariableAddress[s2] : +# 2309| r2309_2(glval) = FunctionAddress[~String] : +# 2309| v2309_3(void) = Call[~String] : func:r2309_2, this:r2309_1 +# 2309| mu2309_4(unknown) = ^CallSideEffect : ~m? +# 2309| v2309_5(void) = ^IndirectReadSideEffect[-1] : &:r2309_1, ~m? +# 2309| mu2309_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2309_1 +# 2307| r2307_56(glval) = VariableAddress[s] : +# 2307| r2307_57(glval) = FunctionAddress[~String] : +# 2307| v2307_58(void) = Call[~String] : func:r2307_57, this:r2307_56 +# 2307| mu2307_59(unknown) = ^CallSideEffect : ~m? +# 2307| v2307_60(void) = ^IndirectReadSideEffect[-1] : &:r2307_56, ~m? +# 2307| mu2307_61(String) = ^IndirectMayWriteSideEffect[-1] : &:r2307_56 +# 2307| r2307_62(glval>) = VariableAddress[(__begin)] : +# 2307| r2307_63(glval) = FunctionAddress[operator++] : +# 2307| r2307_64(iterator &) = Call[operator++] : func:r2307_63, this:r2307_62 +# 2307| mu2307_65(unknown) = ^CallSideEffect : ~m? +# 2307| v2307_66(void) = ^IndirectReadSideEffect[-1] : &:r2307_62, ~m? +# 2307| mu2307_67(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r2307_62 +# 2307| r2307_68(glval>) = CopyValue : r2307_64 #-----| Goto (back edge) -> Block 4 -# 2336| Block 6 +# 2311| Block 6 +# 2311| r2311_1(glval) = VariableAddress[s] : +# 2311| mu2311_2(String) = Uninitialized[s] : &:r2311_1 +# 2311| r2311_3(glval) = FunctionAddress[String] : +# 2311| r2311_4(glval) = StringConstant["hello"] : +# 2311| r2311_5(char *) = Convert : r2311_4 +# 2311| v2311_6(void) = Call[String] : func:r2311_3, this:r2311_1, 0:r2311_5 +# 2311| mu2311_7(unknown) = ^CallSideEffect : ~m? +# 2311| v2311_8(void) = ^BufferReadSideEffect[0] : &:r2311_5, ~m? +# 2311| mu2311_9(String) = ^IndirectMayWriteSideEffect[-1] : &:r2311_1 +# 2311| r2311_10(glval) = VariableAddress[s2] : +# 2311| mu2311_11(String) = Uninitialized[s2] : &:r2311_10 +# 2311| r2311_12(glval) = FunctionAddress[String] : +# 2311| r2311_13(glval) = StringConstant["world"] : +# 2311| r2311_14(char *) = Convert : r2311_13 +# 2311| v2311_15(void) = Call[String] : func:r2311_12, this:r2311_10, 0:r2311_14 +# 2311| mu2311_16(unknown) = ^CallSideEffect : ~m? +# 2311| v2311_17(void) = ^BufferReadSideEffect[0] : &:r2311_14, ~m? +# 2311| mu2311_18(String) = ^IndirectMayWriteSideEffect[-1] : &:r2311_10 +#-----| Goto -> Block 7 + +# 2311| Block 7 +# 2311| r2311_19(glval) = VariableAddress[c] : +# 2311| r2311_20(char) = Load[c] : &:r2311_19, ~m? +# 2311| r2311_21(int) = Convert : r2311_20 +# 2311| r2311_22(int) = Constant[0] : +# 2311| r2311_23(bool) = CompareNE : r2311_21, r2311_22 +# 2311| v2311_24(void) = ConditionalBranch : r2311_23 +#-----| False -> Block 9 +#-----| True -> Block 8 + +# 2312| Block 8 +# 2312| r2312_1(char) = Constant[0] : +# 2312| r2312_2(glval) = VariableAddress[c] : +# 2312| mu2312_3(char) = Store[c] : &:r2312_2, r2312_1 +# 2311| r2311_25(glval) = VariableAddress[s] : +# 2311| r2311_26(glval) = FunctionAddress[pop_back] : +# 2311| r2311_27(char) = Call[pop_back] : func:r2311_26, this:r2311_25 +# 2311| mu2311_28(unknown) = ^CallSideEffect : ~m? +# 2311| v2311_29(void) = ^IndirectReadSideEffect[-1] : &:r2311_25, ~m? +# 2311| mu2311_30(String) = ^IndirectMayWriteSideEffect[-1] : &:r2311_25 +# 2311| r2311_31(glval) = VariableAddress[c] : +# 2311| mu2311_32(char) = Store[c] : &:r2311_31, r2311_27 +#-----| Goto (back edge) -> Block 7 + +# 2311| Block 9 +# 2311| r2311_33(glval) = VariableAddress[s2] : +# 2311| r2311_34(glval) = FunctionAddress[~String] : +# 2311| v2311_35(void) = Call[~String] : func:r2311_34, this:r2311_33 +# 2311| mu2311_36(unknown) = ^CallSideEffect : ~m? +# 2311| v2311_37(void) = ^IndirectReadSideEffect[-1] : &:r2311_33, ~m? +# 2311| mu2311_38(String) = ^IndirectMayWriteSideEffect[-1] : &:r2311_33 +# 2311| r2311_39(glval) = VariableAddress[s] : +# 2311| r2311_40(glval) = FunctionAddress[~String] : +# 2311| v2311_41(void) = Call[~String] : func:r2311_40, this:r2311_39 +# 2311| mu2311_42(unknown) = ^CallSideEffect : ~m? +# 2311| v2311_43(void) = ^IndirectReadSideEffect[-1] : &:r2311_39, ~m? +# 2311| mu2311_44(String) = ^IndirectMayWriteSideEffect[-1] : &:r2311_39 +# 2314| v2314_1(void) = NoOp : +# 2301| v2301_4(void) = ReturnVoid : +# 2301| v2301_5(void) = AliasedUse : ~m? +# 2301| v2301_6(void) = ExitFunction : + +# 2316| void IfDestructors2(bool) +# 2316| Block 0 +# 2316| v2316_1(void) = EnterFunction : +# 2316| mu2316_2(unknown) = AliasedDefinition : +# 2316| mu2316_3(unknown) = InitializeNonLocal : +# 2316| r2316_4(glval) = VariableAddress[b] : +# 2316| mu2316_5(bool) = InitializeParameter[b] : &:r2316_4 +# 2317| r2317_1(glval) = VariableAddress[s] : +# 2317| mu2317_2(String) = Uninitialized[s] : &:r2317_1 +# 2317| r2317_3(glval) = FunctionAddress[String] : +# 2317| r2317_4(glval) = StringConstant["hello"] : +# 2317| r2317_5(char *) = Convert : r2317_4 +# 2317| v2317_6(void) = Call[String] : func:r2317_3, this:r2317_1, 0:r2317_5 +# 2317| mu2317_7(unknown) = ^CallSideEffect : ~m? +# 2317| v2317_8(void) = ^BufferReadSideEffect[0] : &:r2317_5, ~m? +# 2317| mu2317_9(String) = ^IndirectMayWriteSideEffect[-1] : &:r2317_1 +# 2317| r2317_10(glval) = VariableAddress[b] : +# 2317| r2317_11(bool) = Load[b] : &:r2317_10, ~m? +# 2317| v2317_12(void) = ConditionalBranch : r2317_11 +#-----| False -> Block 2 +#-----| True -> Block 1 + +# 2318| Block 1 +# 2318| r2318_1(glval) = VariableAddress[x] : +# 2318| r2318_2(int) = Constant[0] : +# 2318| mu2318_3(int) = Store[x] : &:r2318_1, r2318_2 +#-----| Goto -> Block 3 + +# 2320| Block 2 +# 2320| r2320_1(glval) = VariableAddress[y] : +# 2320| r2320_2(int) = Constant[0] : +# 2320| mu2320_3(int) = Store[y] : &:r2320_1, r2320_2 +#-----| Goto -> Block 3 + +# 2321| Block 3 +# 2321| r2321_1(glval) = VariableAddress[s] : +# 2321| r2321_2(glval) = FunctionAddress[~String] : +# 2321| v2321_3(void) = Call[~String] : func:r2321_2, this:r2321_1 +# 2321| mu2321_4(unknown) = ^CallSideEffect : ~m? +# 2321| v2321_5(void) = ^IndirectReadSideEffect[-1] : &:r2321_1, ~m? +# 2321| mu2321_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2321_1 +# 2322| v2322_1(void) = NoOp : +# 2316| v2316_6(void) = ReturnVoid : +# 2316| v2316_7(void) = AliasedUse : ~m? +# 2316| v2316_8(void) = ExitFunction : + +# 2331| void IfDestructors3(bool) +# 2331| Block 0 +# 2331| v2331_1(void) = EnterFunction : +# 2331| mu2331_2(unknown) = AliasedDefinition : +# 2331| mu2331_3(unknown) = InitializeNonLocal : +# 2331| r2331_4(glval) = VariableAddress[b] : +# 2331| mu2331_5(bool) = InitializeParameter[b] : &:r2331_4 +# 2332| r2332_1(glval) = VariableAddress[B] : +# 2332| mu2332_2(Bool) = Uninitialized[B] : &:r2332_1 +# 2332| r2332_3(glval) = FunctionAddress[Bool] : +# 2332| r2332_4(glval) = VariableAddress[b] : +# 2332| r2332_5(bool) = Load[b] : &:r2332_4, ~m? +# 2332| v2332_6(void) = Call[Bool] : func:r2332_3, this:r2332_1, 0:r2332_5 +# 2332| mu2332_7(unknown) = ^CallSideEffect : ~m? +# 2332| mu2332_8(Bool) = ^IndirectMayWriteSideEffect[-1] : &:r2332_1 +# 2332| r2332_9(glval) = VariableAddress[B] : +# 2332| r2332_10(glval) = FunctionAddress[operator bool] : +# 2332| r2332_11(bool) = Call[operator bool] : func:r2332_10, this:r2332_9 +# 2332| mu2332_12(unknown) = ^CallSideEffect : ~m? +# 2332| v2332_13(void) = ^IndirectReadSideEffect[-1] : &:r2332_9, ~m? +# 2332| mu2332_14(Bool) = ^IndirectMayWriteSideEffect[-1] : &:r2332_9 +# 2332| r2332_15(bool) = CopyValue : r2332_11 +# 2332| v2332_16(void) = ConditionalBranch : r2332_15 +#-----| False -> Block 2 +#-----| True -> Block 1 + +# 2333| Block 1 +# 2333| r2333_1(glval) = VariableAddress[s1] : +# 2333| mu2333_2(String) = Uninitialized[s1] : &:r2333_1 +# 2333| r2333_3(glval) = FunctionAddress[String] : +# 2333| v2333_4(void) = Call[String] : func:r2333_3, this:r2333_1 +# 2333| mu2333_5(unknown) = ^CallSideEffect : ~m? +# 2333| mu2333_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2333_1 +# 2334| r2334_1(glval) = VariableAddress[s1] : +# 2334| r2334_2(glval) = FunctionAddress[~String] : +# 2334| v2334_3(void) = Call[~String] : func:r2334_2, this:r2334_1 +# 2334| mu2334_4(unknown) = ^CallSideEffect : ~m? +# 2334| v2334_5(void) = ^IndirectReadSideEffect[-1] : &:r2334_1, ~m? +# 2334| mu2334_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2334_1 +#-----| Goto -> Block 3 + +# 2335| Block 2 +# 2335| r2335_1(glval) = VariableAddress[s2] : +# 2335| mu2335_2(String) = Uninitialized[s2] : &:r2335_1 +# 2335| r2335_3(glval) = FunctionAddress[String] : +# 2335| v2335_4(void) = Call[String] : func:r2335_3, this:r2335_1 +# 2335| mu2335_5(unknown) = ^CallSideEffect : ~m? +# 2335| mu2335_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2335_1 +# 2336| r2336_1(glval) = VariableAddress[s2] : +# 2336| r2336_2(glval) = FunctionAddress[~String] : +# 2336| v2336_3(void) = Call[~String] : func:r2336_2, this:r2336_1 +# 2336| mu2336_4(unknown) = ^CallSideEffect : ~m? +# 2336| v2336_5(void) = ^IndirectReadSideEffect[-1] : &:r2336_1, ~m? +# 2336| mu2336_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2336_1 +#-----| Goto -> Block 3 + +# 2336| Block 3 # 2336| r2336_7(glval) = VariableAddress[B] : # 2336| r2336_8(glval) = FunctionAddress[~Bool] : # 2336| v2336_9(void) = Call[~Bool] : func:r2336_8, this:r2336_7 # 2336| mu2336_10(unknown) = ^CallSideEffect : ~m? # 2336| v2336_11(void) = ^IndirectReadSideEffect[-1] : &:r2336_7, ~m? # 2336| mu2336_12(Bool) = ^IndirectMayWriteSideEffect[-1] : &:r2336_7 -# 2338| v2338_1(void) = NoOp : -# 2325| v2325_6(void) = ReturnVoid : -# 2325| v2325_7(void) = AliasedUse : ~m? -# 2325| v2325_8(void) = ExitFunction : +# 2337| v2337_1(void) = NoOp : +# 2331| v2331_6(void) = ReturnVoid : +# 2331| v2331_7(void) = AliasedUse : ~m? +# 2331| v2331_8(void) = ExitFunction : -# 2340| void VoidFunc() -# 2340| Block 0 -# 2340| v2340_1(void) = EnterFunction : -# 2340| mu2340_2(unknown) = AliasedDefinition : -# 2340| mu2340_3(unknown) = InitializeNonLocal : -# 2340| v2340_4(void) = NoOp : -# 2340| v2340_5(void) = ReturnVoid : -# 2340| v2340_6(void) = AliasedUse : ~m? -# 2340| v2340_7(void) = ExitFunction : +# 2339| void WhileLoopDestructors(bool) +# 2339| Block 0 +# 2339| v2339_1(void) = EnterFunction : +# 2339| mu2339_2(unknown) = AliasedDefinition : +# 2339| mu2339_3(unknown) = InitializeNonLocal : +# 2339| r2339_4(glval) = VariableAddress[b] : +# 2339| mu2339_5(bool) = InitializeParameter[b] : &:r2339_4 +# 2341| r2341_1(glval) = VariableAddress[s] : +# 2341| mu2341_2(String) = Uninitialized[s] : &:r2341_1 +# 2341| r2341_3(glval) = FunctionAddress[String] : +# 2341| v2341_4(void) = Call[String] : func:r2341_3, this:r2341_1 +# 2341| mu2341_5(unknown) = ^CallSideEffect : ~m? +# 2341| mu2341_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2341_1 +#-----| Goto -> Block 1 -# 2342| void IfReturnDestructors(bool) -# 2342| Block 0 -# 2342| v2342_1(void) = EnterFunction : -# 2342| mu2342_2(unknown) = AliasedDefinition : -# 2342| mu2342_3(unknown) = InitializeNonLocal : -# 2342| r2342_4(glval) = VariableAddress[b] : -# 2342| mu2342_5(bool) = InitializeParameter[b] : &:r2342_4 -# 2343| r2343_1(glval) = VariableAddress[s] : -# 2343| mu2343_2(String) = Uninitialized[s] : &:r2343_1 -# 2343| r2343_3(glval) = FunctionAddress[String] : -# 2343| v2343_4(void) = Call[String] : func:r2343_3, this:r2343_1 -# 2343| mu2343_5(unknown) = ^CallSideEffect : ~m? -# 2343| mu2343_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2343_1 -# 2344| r2344_1(glval) = VariableAddress[b] : -# 2344| r2344_2(bool) = Load[b] : &:r2344_1, ~m? -# 2344| v2344_3(void) = ConditionalBranch : r2344_2 +# 2342| Block 1 +# 2342| r2342_1(glval) = VariableAddress[b] : +# 2342| r2342_2(bool) = Load[b] : &:r2342_1, ~m? +# 2342| v2342_3(void) = ConditionalBranch : r2342_2 #-----| False -> Block 3 #-----| True -> Block 2 -# 2342| Block 1 -# 2342| v2342_6(void) = ReturnVoid : -# 2342| v2342_7(void) = AliasedUse : ~m? -# 2342| v2342_8(void) = ExitFunction : +# 2343| Block 2 +# 2343| r2343_1(bool) = Constant[0] : +# 2343| r2343_2(glval) = VariableAddress[b] : +# 2343| mu2343_3(bool) = Store[b] : &:r2343_2, r2343_1 +#-----| Goto (back edge) -> Block 1 -# 2345| Block 2 -# 2345| v2345_1(void) = NoOp : -# 2351| r2351_1(glval) = VariableAddress[s] : -# 2351| r2351_2(glval) = FunctionAddress[~String] : -# 2351| v2351_3(void) = Call[~String] : func:r2351_2, this:r2351_1 -# 2351| mu2351_4(unknown) = ^CallSideEffect : ~m? -# 2351| v2351_5(void) = ^IndirectReadSideEffect[-1] : &:r2351_1, ~m? -# 2351| mu2351_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2351_1 +# 2345| Block 3 +# 2345| r2345_1(glval) = VariableAddress[s] : +# 2345| r2345_2(glval) = FunctionAddress[~String] : +# 2345| v2345_3(void) = Call[~String] : func:r2345_2, this:r2345_1 +# 2345| mu2345_4(unknown) = ^CallSideEffect : ~m? +# 2345| v2345_5(void) = ^IndirectReadSideEffect[-1] : &:r2345_1, ~m? +# 2345| mu2345_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2345_1 +#-----| Goto -> Block 4 + +# 2348| Block 4 +# 2348| r2348_1(glval) = VariableAddress[B] : +# 2348| mu2348_2(Bool) = Uninitialized[B] : &:r2348_1 +# 2348| r2348_3(glval) = FunctionAddress[Bool] : +# 2348| r2348_4(glval) = VariableAddress[b] : +# 2348| r2348_5(bool) = Load[b] : &:r2348_4, ~m? +# 2348| v2348_6(void) = Call[Bool] : func:r2348_3, this:r2348_1, 0:r2348_5 +# 2348| mu2348_7(unknown) = ^CallSideEffect : ~m? +# 2348| mu2348_8(Bool) = ^IndirectMayWriteSideEffect[-1] : &:r2348_1 +# 2348| r2348_9(glval) = VariableAddress[B] : +# 2348| r2348_10(glval) = FunctionAddress[operator bool] : +# 2348| r2348_11(bool) = Call[operator bool] : func:r2348_10, this:r2348_9 +# 2348| mu2348_12(unknown) = ^CallSideEffect : ~m? +# 2348| v2348_13(void) = ^IndirectReadSideEffect[-1] : &:r2348_9, ~m? +# 2348| mu2348_14(Bool) = ^IndirectMayWriteSideEffect[-1] : &:r2348_9 +# 2348| r2348_15(bool) = CopyValue : r2348_11 +# 2348| v2348_16(void) = ConditionalBranch : r2348_15 +#-----| False -> Block 6 +#-----| True -> Block 5 + +# 2349| Block 5 +# 2349| r2349_1(bool) = Constant[0] : +# 2349| r2349_2(glval) = VariableAddress[b] : +# 2349| mu2349_3(bool) = Store[b] : &:r2349_2, r2349_1 +# 2350| r2350_1(glval) = VariableAddress[B] : +# 2350| r2350_2(glval) = FunctionAddress[~Bool] : +# 2350| v2350_3(void) = Call[~Bool] : func:r2350_2, this:r2350_1 +# 2350| mu2350_4(unknown) = ^CallSideEffect : ~m? +# 2350| v2350_5(void) = ^IndirectReadSideEffect[-1] : &:r2350_1, ~m? +# 2350| mu2350_6(Bool) = ^IndirectMayWriteSideEffect[-1] : &:r2350_1 +#-----| Goto (back edge) -> Block 4 + +# 2350| Block 6 +# 2350| r2350_7(glval) = VariableAddress[B] : +# 2350| r2350_8(glval) = FunctionAddress[~Bool] : +# 2350| v2350_9(void) = Call[~Bool] : func:r2350_8, this:r2350_7 +# 2350| mu2350_10(unknown) = ^CallSideEffect : ~m? +# 2350| v2350_11(void) = ^IndirectReadSideEffect[-1] : &:r2350_7, ~m? +# 2350| mu2350_12(Bool) = ^IndirectMayWriteSideEffect[-1] : &:r2350_7 +# 2352| v2352_1(void) = NoOp : +# 2339| v2339_6(void) = ReturnVoid : +# 2339| v2339_7(void) = AliasedUse : ~m? +# 2339| v2339_8(void) = ExitFunction : + +# 2354| void VoidFunc() +# 2354| Block 0 +# 2354| v2354_1(void) = EnterFunction : +# 2354| mu2354_2(unknown) = AliasedDefinition : +# 2354| mu2354_3(unknown) = InitializeNonLocal : +# 2354| v2354_4(void) = NoOp : +# 2354| v2354_5(void) = ReturnVoid : +# 2354| v2354_6(void) = AliasedUse : ~m? +# 2354| v2354_7(void) = ExitFunction : + +# 2356| void IfReturnDestructors(bool) +# 2356| Block 0 +# 2356| v2356_1(void) = EnterFunction : +# 2356| mu2356_2(unknown) = AliasedDefinition : +# 2356| mu2356_3(unknown) = InitializeNonLocal : +# 2356| r2356_4(glval) = VariableAddress[b] : +# 2356| mu2356_5(bool) = InitializeParameter[b] : &:r2356_4 +# 2357| r2357_1(glval) = VariableAddress[s] : +# 2357| mu2357_2(String) = Uninitialized[s] : &:r2357_1 +# 2357| r2357_3(glval) = FunctionAddress[String] : +# 2357| v2357_4(void) = Call[String] : func:r2357_3, this:r2357_1 +# 2357| mu2357_5(unknown) = ^CallSideEffect : ~m? +# 2357| mu2357_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2357_1 +# 2358| r2358_1(glval) = VariableAddress[b] : +# 2358| r2358_2(bool) = Load[b] : &:r2358_1, ~m? +# 2358| v2358_3(void) = ConditionalBranch : r2358_2 +#-----| False -> Block 3 +#-----| True -> Block 2 + +# 2356| Block 1 +# 2356| v2356_6(void) = ReturnVoid : +# 2356| v2356_7(void) = AliasedUse : ~m? +# 2356| v2356_8(void) = ExitFunction : + +# 2359| Block 2 +# 2359| v2359_1(void) = NoOp : +# 2365| r2365_1(glval) = VariableAddress[s] : +# 2365| r2365_2(glval) = FunctionAddress[~String] : +# 2365| v2365_3(void) = Call[~String] : func:r2365_2, this:r2365_1 +# 2365| mu2365_4(unknown) = ^CallSideEffect : ~m? +# 2365| v2365_5(void) = ^IndirectReadSideEffect[-1] : &:r2365_1, ~m? +# 2365| mu2365_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2365_1 #-----| Goto -> Block 1 -# 2347| Block 3 -# 2347| r2347_1(glval) = VariableAddress[b] : -# 2347| r2347_2(bool) = Load[b] : &:r2347_1, ~m? -# 2347| v2347_3(void) = ConditionalBranch : r2347_2 +# 2361| Block 3 +# 2361| r2361_1(glval) = VariableAddress[b] : +# 2361| r2361_2(bool) = Load[b] : &:r2361_1, ~m? +# 2361| v2361_3(void) = ConditionalBranch : r2361_2 #-----| False -> Block 5 #-----| True -> Block 4 -# 2348| Block 4 -# 2348| r2348_1(glval) = FunctionAddress[VoidFunc] : -# 2348| v2348_2(void) = Call[VoidFunc] : func:r2348_1 -# 2348| mu2348_3(unknown) = ^CallSideEffect : ~m? -# 2348| v2348_4(void) = NoOp : -# 2351| r2351_7(glval) = VariableAddress[s] : -# 2351| r2351_8(glval) = FunctionAddress[~String] : -# 2351| v2351_9(void) = Call[~String] : func:r2351_8, this:r2351_7 -# 2351| mu2351_10(unknown) = ^CallSideEffect : ~m? -# 2351| v2351_11(void) = ^IndirectReadSideEffect[-1] : &:r2351_7, ~m? -# 2351| mu2351_12(String) = ^IndirectMayWriteSideEffect[-1] : &:r2351_7 +# 2362| Block 4 +# 2362| r2362_1(glval) = FunctionAddress[VoidFunc] : +# 2362| v2362_2(void) = Call[VoidFunc] : func:r2362_1 +# 2362| mu2362_3(unknown) = ^CallSideEffect : ~m? +# 2362| v2362_4(void) = NoOp : +# 2365| r2365_7(glval) = VariableAddress[s] : +# 2365| r2365_8(glval) = FunctionAddress[~String] : +# 2365| v2365_9(void) = Call[~String] : func:r2365_8, this:r2365_7 +# 2365| mu2365_10(unknown) = ^CallSideEffect : ~m? +# 2365| v2365_11(void) = ^IndirectReadSideEffect[-1] : &:r2365_7, ~m? +# 2365| mu2365_12(String) = ^IndirectMayWriteSideEffect[-1] : &:r2365_7 #-----| Goto -> Block 1 -# 2350| Block 5 -# 2350| r2350_1(glval) = VariableAddress[s] : -# 2351| v2351_13(void) = NoOp : -# 2351| r2351_14(glval) = VariableAddress[s] : -# 2351| r2351_15(glval) = FunctionAddress[~String] : -# 2351| v2351_16(void) = Call[~String] : func:r2351_15, this:r2351_14 -# 2351| mu2351_17(unknown) = ^CallSideEffect : ~m? -# 2351| v2351_18(void) = ^IndirectReadSideEffect[-1] : &:r2351_14, ~m? -# 2351| mu2351_19(String) = ^IndirectMayWriteSideEffect[-1] : &:r2351_14 +# 2364| Block 5 +# 2364| r2364_1(glval) = VariableAddress[s] : +# 2365| v2365_13(void) = NoOp : +# 2365| r2365_14(glval) = VariableAddress[s] : +# 2365| r2365_15(glval) = FunctionAddress[~String] : +# 2365| v2365_16(void) = Call[~String] : func:r2365_15, this:r2365_14 +# 2365| mu2365_17(unknown) = ^CallSideEffect : ~m? +# 2365| v2365_18(void) = ^IndirectReadSideEffect[-1] : &:r2365_14, ~m? +# 2365| mu2365_19(String) = ^IndirectMayWriteSideEffect[-1] : &:r2365_14 #-----| Goto -> Block 1 -# 2353| int IfReturnDestructors3(bool) -# 2353| Block 0 -# 2353| v2353_1(void) = EnterFunction : -# 2353| mu2353_2(unknown) = AliasedDefinition : -# 2353| mu2353_3(unknown) = InitializeNonLocal : -# 2353| r2353_4(glval) = VariableAddress[b] : -# 2353| mu2353_5(bool) = InitializeParameter[b] : &:r2353_4 -# 2354| r2354_1(glval) = VariableAddress[s] : -# 2354| mu2354_2(String) = Uninitialized[s] : &:r2354_1 -# 2354| r2354_3(glval) = FunctionAddress[String] : -# 2354| v2354_4(void) = Call[String] : func:r2354_3, this:r2354_1 -# 2354| mu2354_5(unknown) = ^CallSideEffect : ~m? -# 2354| mu2354_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2354_1 -# 2355| r2355_1(glval) = VariableAddress[b] : -# 2355| r2355_2(bool) = Load[b] : &:r2355_1, ~m? -# 2355| v2355_3(void) = ConditionalBranch : r2355_2 +# 2367| int IfReturnDestructors3(bool) +# 2367| Block 0 +# 2367| v2367_1(void) = EnterFunction : +# 2367| mu2367_2(unknown) = AliasedDefinition : +# 2367| mu2367_3(unknown) = InitializeNonLocal : +# 2367| r2367_4(glval) = VariableAddress[b] : +# 2367| mu2367_5(bool) = InitializeParameter[b] : &:r2367_4 +# 2368| r2368_1(glval) = VariableAddress[s] : +# 2368| mu2368_2(String) = Uninitialized[s] : &:r2368_1 +# 2368| r2368_3(glval) = FunctionAddress[String] : +# 2368| v2368_4(void) = Call[String] : func:r2368_3, this:r2368_1 +# 2368| mu2368_5(unknown) = ^CallSideEffect : ~m? +# 2368| mu2368_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2368_1 +# 2369| r2369_1(glval) = VariableAddress[b] : +# 2369| r2369_2(bool) = Load[b] : &:r2369_1, ~m? +# 2369| v2369_3(void) = ConditionalBranch : r2369_2 #-----| False -> Block 3 #-----| True -> Block 2 -# 2353| Block 1 -# 2353| r2353_6(glval) = VariableAddress[#return] : -# 2353| v2353_7(void) = ReturnValue : &:r2353_6, ~m? -# 2353| v2353_8(void) = AliasedUse : ~m? -# 2353| v2353_9(void) = ExitFunction : +# 2367| Block 1 +# 2367| r2367_6(glval) = VariableAddress[#return] : +# 2367| v2367_7(void) = ReturnValue : &:r2367_6, ~m? +# 2367| v2367_8(void) = AliasedUse : ~m? +# 2367| v2367_9(void) = ExitFunction : -# 2356| Block 2 -# 2356| r2356_1(glval) = VariableAddress[#return] : -# 2356| r2356_2(int) = Constant[1] : -# 2356| mu2356_3(int) = Store[#return] : &:r2356_1, r2356_2 -# 2359| r2359_1(glval) = VariableAddress[s] : -# 2359| r2359_2(glval) = FunctionAddress[~String] : -# 2359| v2359_3(void) = Call[~String] : func:r2359_2, this:r2359_1 -# 2359| mu2359_4(unknown) = ^CallSideEffect : ~m? -# 2359| v2359_5(void) = ^IndirectReadSideEffect[-1] : &:r2359_1, ~m? -# 2359| mu2359_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2359_1 +# 2370| Block 2 +# 2370| r2370_1(glval) = VariableAddress[#return] : +# 2370| r2370_2(int) = Constant[1] : +# 2370| mu2370_3(int) = Store[#return] : &:r2370_1, r2370_2 +# 2373| r2373_1(glval) = VariableAddress[s] : +# 2373| r2373_2(glval) = FunctionAddress[~String] : +# 2373| v2373_3(void) = Call[~String] : func:r2373_2, this:r2373_1 +# 2373| mu2373_4(unknown) = ^CallSideEffect : ~m? +# 2373| v2373_5(void) = ^IndirectReadSideEffect[-1] : &:r2373_1, ~m? +# 2373| mu2373_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2373_1 #-----| Goto -> Block 1 -# 2358| Block 3 -# 2358| r2358_1(glval) = VariableAddress[#return] : -# 2358| r2358_2(int) = Constant[0] : -# 2358| mu2358_3(int) = Store[#return] : &:r2358_1, r2358_2 -# 2359| r2359_7(glval) = VariableAddress[s] : -# 2359| r2359_8(glval) = FunctionAddress[~String] : -# 2359| v2359_9(void) = Call[~String] : func:r2359_8, this:r2359_7 -# 2359| mu2359_10(unknown) = ^CallSideEffect : ~m? -# 2359| v2359_11(void) = ^IndirectReadSideEffect[-1] : &:r2359_7, ~m? -# 2359| mu2359_12(String) = ^IndirectMayWriteSideEffect[-1] : &:r2359_7 +# 2372| Block 3 +# 2372| r2372_1(glval) = VariableAddress[#return] : +# 2372| r2372_2(int) = Constant[0] : +# 2372| mu2372_3(int) = Store[#return] : &:r2372_1, r2372_2 +# 2373| r2373_7(glval) = VariableAddress[s] : +# 2373| r2373_8(glval) = FunctionAddress[~String] : +# 2373| v2373_9(void) = Call[~String] : func:r2373_8, this:r2373_7 +# 2373| mu2373_10(unknown) = ^CallSideEffect : ~m? +# 2373| v2373_11(void) = ^IndirectReadSideEffect[-1] : &:r2373_7, ~m? +# 2373| mu2373_12(String) = ^IndirectMayWriteSideEffect[-1] : &:r2373_7 #-----| Goto -> Block 1 -# 2361| void VoidReturnDestructors() -# 2361| Block 0 -# 2361| v2361_1(void) = EnterFunction : -# 2361| mu2361_2(unknown) = AliasedDefinition : -# 2361| mu2361_3(unknown) = InitializeNonLocal : -# 2362| r2362_1(glval) = VariableAddress[s] : -# 2362| mu2362_2(String) = Uninitialized[s] : &:r2362_1 -# 2362| r2362_3(glval) = FunctionAddress[String] : -# 2362| v2362_4(void) = Call[String] : func:r2362_3, this:r2362_1 -# 2362| mu2362_5(unknown) = ^CallSideEffect : ~m? -# 2362| mu2362_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2362_1 -# 2363| r2363_1(glval) = FunctionAddress[VoidFunc] : -# 2363| v2363_2(void) = Call[VoidFunc] : func:r2363_1 -# 2363| mu2363_3(unknown) = ^CallSideEffect : ~m? -# 2363| v2363_4(void) = NoOp : -# 2364| r2364_1(glval) = VariableAddress[s] : -# 2364| r2364_2(glval) = FunctionAddress[~String] : -# 2364| v2364_3(void) = Call[~String] : func:r2364_2, this:r2364_1 -# 2364| mu2364_4(unknown) = ^CallSideEffect : ~m? -# 2364| v2364_5(void) = ^IndirectReadSideEffect[-1] : &:r2364_1, ~m? -# 2364| mu2364_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2364_1 -# 2361| v2361_4(void) = ReturnVoid : -# 2361| v2361_5(void) = AliasedUse : ~m? -# 2361| v2361_6(void) = ExitFunction : +# 2375| void VoidReturnDestructors() +# 2375| Block 0 +# 2375| v2375_1(void) = EnterFunction : +# 2375| mu2375_2(unknown) = AliasedDefinition : +# 2375| mu2375_3(unknown) = InitializeNonLocal : +# 2376| r2376_1(glval) = VariableAddress[s] : +# 2376| mu2376_2(String) = Uninitialized[s] : &:r2376_1 +# 2376| r2376_3(glval) = FunctionAddress[String] : +# 2376| v2376_4(void) = Call[String] : func:r2376_3, this:r2376_1 +# 2376| mu2376_5(unknown) = ^CallSideEffect : ~m? +# 2376| mu2376_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2376_1 +# 2377| r2377_1(glval) = FunctionAddress[VoidFunc] : +# 2377| v2377_2(void) = Call[VoidFunc] : func:r2377_1 +# 2377| mu2377_3(unknown) = ^CallSideEffect : ~m? +# 2377| v2377_4(void) = NoOp : +# 2378| r2378_1(glval) = VariableAddress[s] : +# 2378| r2378_2(glval) = FunctionAddress[~String] : +# 2378| v2378_3(void) = Call[~String] : func:r2378_2, this:r2378_1 +# 2378| mu2378_4(unknown) = ^CallSideEffect : ~m? +# 2378| v2378_5(void) = ^IndirectReadSideEffect[-1] : &:r2378_1, ~m? +# 2378| mu2378_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2378_1 +# 2375| v2375_4(void) = ReturnVoid : +# 2375| v2375_5(void) = AliasedUse : ~m? +# 2375| v2375_6(void) = ExitFunction : -# 2374| return_routine_type::VoidToIntMemberFunc return_routine_type::GetVoidToIntFunc() -# 2374| Block 0 -# 2374| v2374_1(void) = EnterFunction : -# 2374| mu2374_2(unknown) = AliasedDefinition : -# 2374| mu2374_3(unknown) = InitializeNonLocal : -# 2376| r2376_1(glval<..:: *>) = VariableAddress[#return] : -# 2376| r2376_2(..()(..)) = FunctionAddress[VoidToInt] : -# 2376| mu2376_3(..:: *) = Store[#return] : &:r2376_1, r2376_2 -# 2374| r2374_4(glval<..:: *>) = VariableAddress[#return] : -# 2374| v2374_5(void) = ReturnValue : &:r2374_4, ~m? -# 2374| v2374_6(void) = AliasedUse : ~m? -# 2374| v2374_7(void) = ExitFunction : +# 2388| return_routine_type::VoidToIntMemberFunc return_routine_type::GetVoidToIntFunc() +# 2388| Block 0 +# 2388| v2388_1(void) = EnterFunction : +# 2388| mu2388_2(unknown) = AliasedDefinition : +# 2388| mu2388_3(unknown) = InitializeNonLocal : +# 2390| r2390_1(glval<..:: *>) = VariableAddress[#return] : +# 2390| r2390_2(..()(..)) = FunctionAddress[VoidToInt] : +# 2390| mu2390_3(..:: *) = Store[#return] : &:r2390_1, r2390_2 +# 2388| r2388_4(glval<..:: *>) = VariableAddress[#return] : +# 2388| v2388_5(void) = ReturnValue : &:r2388_4, ~m? +# 2388| v2388_6(void) = AliasedUse : ~m? +# 2388| v2388_7(void) = ExitFunction : + +# 2395| int small_operation_should_not_be_constant_folded() +# 2395| Block 0 +# 2395| v2395_1(void) = EnterFunction : +# 2395| mu2395_2(unknown) = AliasedDefinition : +# 2395| mu2395_3(unknown) = InitializeNonLocal : +# 2396| r2396_1(glval) = VariableAddress[#return] : +# 2396| r2396_2(int) = Constant[1] : +# 2396| r2396_3(int) = Constant[2] : +# 2396| r2396_4(int) = BitXor : r2396_2, r2396_3 +# 2396| mu2396_5(int) = Store[#return] : &:r2396_1, r2396_4 +# 2395| r2395_4(glval) = VariableAddress[#return] : +# 2395| v2395_5(void) = ReturnValue : &:r2395_4, ~m? +# 2395| v2395_6(void) = AliasedUse : ~m? +# 2395| v2395_7(void) = ExitFunction : + +# 2406| int large_operation_should_be_constant_folded() +# 2406| Block 0 +# 2406| v2406_1(void) = EnterFunction : +# 2406| mu2406_2(unknown) = AliasedDefinition : +# 2406| mu2406_3(unknown) = InitializeNonLocal : +# 2407| r2407_1(glval) = VariableAddress[#return] : +# 2407| r2407_2(int) = Constant[0] : +# 2407| mu2407_3(int) = Store[#return] : &:r2407_1, r2407_2 +# 2406| r2406_4(glval) = VariableAddress[#return] : +# 2406| v2406_5(void) = ReturnValue : &:r2406_4, ~m? +# 2406| v2406_6(void) = AliasedUse : ~m? +# 2406| v2406_7(void) = ExitFunction : + +# 2410| void initialization_with_temp_destructor() +# 2410| Block 0 +# 2410| v2410_1(void) = EnterFunction : +# 2410| mu2410_2(unknown) = AliasedDefinition : +# 2410| mu2410_3(unknown) = InitializeNonLocal : +# 2411| r2411_1(glval) = VariableAddress[x] : +# 2411| r2411_2(glval) = VariableAddress[#temp2411:18] : +# 2411| mu2411_3(ClassWithDestructor) = Uninitialized[#temp2411:18] : &:r2411_2 +# 2411| r2411_4(glval) = FunctionAddress[ClassWithDestructor] : +# 2411| v2411_5(void) = Call[ClassWithDestructor] : func:r2411_4, this:r2411_2 +# 2411| mu2411_6(unknown) = ^CallSideEffect : ~m? +# 2411| mu2411_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2411_2 +# 2411| r2411_8(glval) = FunctionAddress[get_x] : +# 2411| r2411_9(char) = Call[get_x] : func:r2411_8, this:r2411_2 +# 2411| mu2411_10(unknown) = ^CallSideEffect : ~m? +# 2411| v2411_11(void) = ^IndirectReadSideEffect[-1] : &:r2411_2, ~m? +# 2411| mu2411_12(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2411_2 +# 2411| mu2411_13(char) = Store[x] : &:r2411_1, r2411_9 +# 2411| r2411_14(glval) = VariableAddress[x] : +# 2411| r2411_15(char) = Load[x] : &:r2411_14, ~m? +# 2411| r2411_16(char) = Constant[0] : +# 2411| r2411_17(bool) = CompareNE : r2411_15, r2411_16 +# 2411| r2411_18(bool) = CopyValue : r2411_17 +# 2411| v2411_19(void) = ConditionalBranch : r2411_18 +#-----| False -> Block 2 +#-----| True -> Block 1 + +# 2412| Block 1 +# 2412| r2412_1(glval) = VariableAddress[x] : +# 2412| r2412_2(char) = Load[x] : &:r2412_1, ~m? +# 2412| r2412_3(char) = Constant[1] : +# 2412| r2412_4(char) = Add : r2412_2, r2412_3 +# 2412| mu2412_5(char) = Store[x] : &:r2412_1, r2412_4 +#-----| Goto -> Block 2 + +# 2414| Block 2 +# 2414| r2414_1(glval) = VariableAddress[x] : +# 2414| r2414_2(glval) = VariableAddress[#temp2414:18] : +# 2414| mu2414_3(ClassWithDestructor) = Uninitialized[#temp2414:18] : &:r2414_2 +# 2414| r2414_4(glval) = FunctionAddress[ClassWithDestructor] : +# 2414| v2414_5(void) = Call[ClassWithDestructor] : func:r2414_4, this:r2414_2 +# 2414| mu2414_6(unknown) = ^CallSideEffect : ~m? +# 2414| mu2414_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2414_2 +# 2414| r2414_8(glval) = FunctionAddress[get_x] : +# 2414| r2414_9(char) = Call[get_x] : func:r2414_8, this:r2414_2 +# 2414| mu2414_10(unknown) = ^CallSideEffect : ~m? +# 2414| v2414_11(void) = ^IndirectReadSideEffect[-1] : &:r2414_2, ~m? +# 2414| mu2414_12(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2414_2 +# 2414| mu2414_13(char) = Store[x] : &:r2414_1, r2414_9 +# 2414| r2414_14(glval) = VariableAddress[x] : +# 2414| r2414_15(char) = Load[x] : &:r2414_14, ~m? +# 2414| r2414_16(char) = Constant[0] : +# 2414| r2414_17(bool) = CompareNE : r2414_15, r2414_16 +# 2414| v2414_18(void) = ConditionalBranch : r2414_17 +#-----| False -> Block 4 +#-----| True -> Block 3 + +# 2415| Block 3 +# 2415| r2415_1(glval) = VariableAddress[x] : +# 2415| r2415_2(char) = Load[x] : &:r2415_1, ~m? +# 2415| r2415_3(char) = Constant[1] : +# 2415| r2415_4(char) = Add : r2415_2, r2415_3 +# 2415| mu2415_5(char) = Store[x] : &:r2415_1, r2415_4 +#-----| Goto -> Block 4 + +# 2417| Block 4 +# 2417| r2417_1(glval) = VariableAddress[x] : +# 2417| r2417_2(glval) = VariableAddress[#temp2417:28] : +# 2417| mu2417_3(ClassWithDestructor) = Uninitialized[#temp2417:28] : &:r2417_2 +# 2417| r2417_4(glval) = FunctionAddress[ClassWithDestructor] : +# 2417| v2417_5(void) = Call[ClassWithDestructor] : func:r2417_4, this:r2417_2 +# 2417| mu2417_6(unknown) = ^CallSideEffect : ~m? +# 2417| mu2417_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2417_2 +# 2417| r2417_8(glval) = FunctionAddress[get_x] : +# 2417| r2417_9(char) = Call[get_x] : func:r2417_8, this:r2417_2 +# 2417| mu2417_10(unknown) = ^CallSideEffect : ~m? +# 2417| v2417_11(void) = ^IndirectReadSideEffect[-1] : &:r2417_2, ~m? +# 2417| mu2417_12(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2417_2 +# 2417| mu2417_13(char) = Store[x] : &:r2417_1, r2417_9 +# 2417| r2417_14(bool) = Constant[1] : +# 2417| v2417_15(void) = ConditionalBranch : r2417_14 +#-----| False -> Block 6 +#-----| True -> Block 5 + +# 2418| Block 5 +# 2418| r2418_1(glval) = VariableAddress[x] : +# 2418| r2418_2(char) = Load[x] : &:r2418_1, ~m? +# 2418| r2418_3(char) = Constant[1] : +# 2418| r2418_4(char) = Add : r2418_2, r2418_3 +# 2418| mu2418_5(char) = Store[x] : &:r2418_1, r2418_4 +#-----| Goto -> Block 6 + +# 2420| Block 6 +# 2420| r2420_1(glval) = VariableAddress[x] : +# 2420| r2420_2(glval) = VariableAddress[#temp2420:21] : +# 2420| mu2420_3(ClassWithDestructor) = Uninitialized[#temp2420:21] : &:r2420_2 +# 2420| r2420_4(glval) = FunctionAddress[ClassWithDestructor] : +# 2420| v2420_5(void) = Call[ClassWithDestructor] : func:r2420_4, this:r2420_2 +# 2420| mu2420_6(unknown) = ^CallSideEffect : ~m? +# 2420| mu2420_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2420_2 +# 2420| r2420_8(glval) = FunctionAddress[get_x] : +# 2420| r2420_9(char) = Call[get_x] : func:r2420_8, this:r2420_2 +# 2420| mu2420_10(unknown) = ^CallSideEffect : ~m? +# 2420| v2420_11(void) = ^IndirectReadSideEffect[-1] : &:r2420_2, ~m? +# 2420| mu2420_12(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2420_2 +# 2420| mu2420_13(char) = Store[x] : &:r2420_1, r2420_9 +# 2420| r2420_14(glval) = VariableAddress[x] : +# 2420| r2420_15(char) = Load[x] : &:r2420_14, ~m? +# 2420| r2420_16(int) = Convert : r2420_15 +# 2420| r2420_17(int) = CopyValue : r2420_16 +# 2420| v2420_18(void) = Switch : r2420_17 +#-----| Case[97] -> Block 7 +#-----| Default -> Block 8 + +# 2421| Block 7 +# 2421| v2421_1(void) = NoOp : +# 2422| r2422_1(glval) = VariableAddress[x] : +# 2422| r2422_2(char) = Load[x] : &:r2422_1, ~m? +# 2422| r2422_3(char) = Constant[1] : +# 2422| r2422_4(char) = Add : r2422_2, r2422_3 +# 2422| mu2422_5(char) = Store[x] : &:r2422_1, r2422_4 +#-----| Goto -> Block 8 + +# 2425| Block 8 +# 2425| r2425_1(glval) = VariableAddress[x] : +# 2425| r2425_2(glval) = VariableAddress[#temp2425:21] : +# 2425| mu2425_3(ClassWithDestructor) = Uninitialized[#temp2425:21] : &:r2425_2 +# 2425| r2425_4(glval) = FunctionAddress[ClassWithDestructor] : +# 2425| v2425_5(void) = Call[ClassWithDestructor] : func:r2425_4, this:r2425_2 +# 2425| mu2425_6(unknown) = ^CallSideEffect : ~m? +# 2425| mu2425_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2425_2 +# 2425| r2425_8(glval) = FunctionAddress[get_x] : +# 2425| r2425_9(char) = Call[get_x] : func:r2425_8, this:r2425_2 +# 2425| mu2425_10(unknown) = ^CallSideEffect : ~m? +# 2425| v2425_11(void) = ^IndirectReadSideEffect[-1] : &:r2425_2, ~m? +# 2425| mu2425_12(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2425_2 +# 2425| mu2425_13(char) = Store[x] : &:r2425_1, r2425_9 +# 2425| r2425_14(glval) = VariableAddress[x] : +# 2425| r2425_15(char) = Load[x] : &:r2425_14, ~m? +# 2425| r2425_16(int) = Convert : r2425_15 +# 2425| v2425_17(void) = Switch : r2425_16 +#-----| Case[97] -> Block 9 +#-----| Default -> Block 10 + +# 2426| Block 9 +# 2426| v2426_1(void) = NoOp : +# 2427| r2427_1(glval) = VariableAddress[x] : +# 2427| r2427_2(char) = Load[x] : &:r2427_1, ~m? +# 2427| r2427_3(char) = Constant[1] : +# 2427| r2427_4(char) = Add : r2427_2, r2427_3 +# 2427| mu2427_5(char) = Store[x] : &:r2427_1, r2427_4 +#-----| Goto -> Block 10 + +# 2430| Block 10 +# 2430| r2430_1(glval) = VariableAddress[x] : +# 2430| r2430_2(glval) = VariableAddress[#temp2430:18] : +# 2430| mu2430_3(ClassWithDestructor) = Uninitialized[#temp2430:18] : &:r2430_2 +# 2430| r2430_4(glval) = FunctionAddress[ClassWithDestructor] : +# 2430| v2430_5(void) = Call[ClassWithDestructor] : func:r2430_4, this:r2430_2 +# 2430| mu2430_6(unknown) = ^CallSideEffect : ~m? +# 2430| mu2430_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2430_2 +# 2430| r2430_8(glval) = FunctionAddress[get_x] : +# 2430| r2430_9(char) = Call[get_x] : func:r2430_8, this:r2430_2 +# 2430| mu2430_10(unknown) = ^CallSideEffect : ~m? +# 2430| v2430_11(void) = ^IndirectReadSideEffect[-1] : &:r2430_2, ~m? +# 2430| mu2430_12(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2430_2 +# 2430| mu2430_13(char) = Store[x] : &:r2430_1, r2430_9 +# 2430| r2430_14(glval &&>) = VariableAddress[(__range)] : +# 2430| r2430_15(glval>) = VariableAddress[#temp2430:58] : +# 2430| mu2430_16(vector) = Uninitialized[#temp2430:58] : &:r2430_15 +# 2430| r2430_17(glval) = FunctionAddress[vector] : +# 2430| r2430_18(glval) = VariableAddress[x] : +# 2430| r2430_19(char) = Load[x] : &:r2430_18, ~m? +# 2430| v2430_20(void) = Call[vector] : func:r2430_17, this:r2430_15, 0:r2430_19 +# 2430| mu2430_21(unknown) = ^CallSideEffect : ~m? +# 2430| mu2430_22(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2430_15 +# 2430| r2430_23(vector &) = CopyValue : r2430_15 +# 2430| mu2430_24(vector &&) = Store[(__range)] : &:r2430_14, r2430_23 +# 2430| r2430_25(glval>) = VariableAddress[(__begin)] : +# 2430| r2430_26(glval &&>) = VariableAddress[(__range)] : +# 2430| r2430_27(vector &&) = Load[(__range)] : &:r2430_26, ~m? +#-----| r0_1(glval>) = CopyValue : r2430_27 +#-----| r0_2(glval>) = Convert : r0_1 +# 2430| r2430_28(glval) = FunctionAddress[begin] : +# 2430| r2430_29(iterator) = Call[begin] : func:r2430_28, this:r0_2 +#-----| v0_3(void) = ^IndirectReadSideEffect[-1] : &:r0_2, ~m? +# 2430| mu2430_30(iterator) = Store[(__begin)] : &:r2430_25, r2430_29 +# 2430| r2430_31(glval>) = VariableAddress[(__end)] : +# 2430| r2430_32(glval &&>) = VariableAddress[(__range)] : +# 2430| r2430_33(vector &&) = Load[(__range)] : &:r2430_32, ~m? +#-----| r0_4(glval>) = CopyValue : r2430_33 +#-----| r0_5(glval>) = Convert : r0_4 +# 2430| r2430_34(glval) = FunctionAddress[end] : +# 2430| r2430_35(iterator) = Call[end] : func:r2430_34, this:r0_5 +#-----| v0_6(void) = ^IndirectReadSideEffect[-1] : &:r0_5, ~m? +# 2430| mu2430_36(iterator) = Store[(__end)] : &:r2430_31, r2430_35 +#-----| Goto -> Block 11 + +# 2430| Block 11 +# 2430| r2430_37(glval>) = VariableAddress[(__begin)] : +#-----| r0_7(glval>) = Convert : r2430_37 +# 2430| r2430_38(glval) = FunctionAddress[operator!=] : +#-----| r0_8(glval>) = VariableAddress[#temp0:0] : +#-----| mu0_9(iterator) = Uninitialized[#temp0:0] : &:r0_8 +# 2430| r2430_39(glval) = FunctionAddress[iterator] : +# 2430| r2430_40(glval>) = VariableAddress[(__end)] : +#-----| r0_10(glval>) = Convert : r2430_40 +#-----| r0_11(iterator &) = CopyValue : r0_10 +# 2430| v2430_41(void) = Call[iterator] : func:r2430_39, this:r0_8, 0:r0_11 +# 2430| mu2430_42(unknown) = ^CallSideEffect : ~m? +#-----| v0_12(void) = ^BufferReadSideEffect[0] : &:r0_11, ~m? +# 2430| mu2430_43(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r0_8 +#-----| r0_13(iterator) = Load[#temp0:0] : &:r0_8, ~m? +# 2430| r2430_44(bool) = Call[operator!=] : func:r2430_38, this:r0_7, 0:r0_13 +# 2430| mu2430_45(unknown) = ^CallSideEffect : ~m? +#-----| v0_14(void) = ^IndirectReadSideEffect[-1] : &:r0_7, ~m? +# 2430| v2430_46(void) = ConditionalBranch : r2430_44 +#-----| False -> Block 13 +#-----| True -> Block 12 + +# 2430| Block 12 +# 2430| r2430_47(glval) = VariableAddress[y] : +# 2430| r2430_48(glval>) = VariableAddress[(__begin)] : +#-----| r0_15(glval>) = Convert : r2430_48 +# 2430| r2430_49(glval) = FunctionAddress[operator*] : +# 2430| r2430_50(char &) = Call[operator*] : func:r2430_49, this:r0_15 +# 2430| mu2430_51(unknown) = ^CallSideEffect : ~m? +#-----| v0_16(void) = ^IndirectReadSideEffect[-1] : &:r0_15, ~m? +# 2430| r2430_52(char) = Load[?] : &:r2430_50, ~m? +# 2430| mu2430_53(char) = Store[y] : &:r2430_47, r2430_52 +# 2431| r2431_1(glval) = VariableAddress[x] : +# 2431| r2431_2(char) = Load[x] : &:r2431_1, ~m? +# 2431| r2431_3(int) = Convert : r2431_2 +# 2431| r2431_4(glval) = VariableAddress[y] : +# 2431| r2431_5(char) = Load[y] : &:r2431_4, ~m? +# 2431| r2431_6(int) = Convert : r2431_5 +# 2431| r2431_7(int) = Add : r2431_6, r2431_3 +# 2431| r2431_8(char) = Convert : r2431_7 +# 2431| mu2431_9(char) = Store[y] : &:r2431_4, r2431_8 +# 2430| r2430_54(glval>) = VariableAddress[(__begin)] : +# 2430| r2430_55(glval) = FunctionAddress[operator++] : +# 2430| r2430_56(iterator &) = Call[operator++] : func:r2430_55, this:r2430_54 +# 2430| mu2430_57(unknown) = ^CallSideEffect : ~m? +# 2430| v2430_58(void) = ^IndirectReadSideEffect[-1] : &:r2430_54, ~m? +# 2430| mu2430_59(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r2430_54 +# 2430| r2430_60(glval>) = CopyValue : r2430_56 +#-----| Goto (back edge) -> Block 11 + +# 2432| Block 13 +# 2432| v2432_1(void) = NoOp : +# 2410| v2410_4(void) = ReturnVoid : +# 2410| v2410_5(void) = AliasedUse : ~m? +# 2410| v2410_6(void) = ExitFunction : + +# 2434| void param_with_destructor_by_value(ClassWithDestructor) +# 2434| Block 0 +# 2434| v2434_1(void) = EnterFunction : +# 2434| mu2434_2(unknown) = AliasedDefinition : +# 2434| mu2434_3(unknown) = InitializeNonLocal : +# 2434| r2434_4(glval) = VariableAddress[c] : +# 2434| mu2434_5(ClassWithDestructor) = InitializeParameter[c] : &:r2434_4 +# 2436| v2436_1(void) = NoOp : +# 2434| v2434_6(void) = ReturnVoid : +# 2434| v2434_7(void) = AliasedUse : ~m? +# 2434| v2434_8(void) = ExitFunction : + +# 2438| void param_with_destructor_by_pointer(ClassWithDestructor*) +# 2438| Block 0 +# 2438| v2438_1(void) = EnterFunction : +# 2438| mu2438_2(unknown) = AliasedDefinition : +# 2438| mu2438_3(unknown) = InitializeNonLocal : +# 2438| r2438_4(glval) = VariableAddress[c] : +# 2438| mu2438_5(ClassWithDestructor *) = InitializeParameter[c] : &:r2438_4 +# 2438| r2438_6(ClassWithDestructor *) = Load[c] : &:r2438_4, ~m? +# 2438| mu2438_7(unknown) = InitializeIndirection[c] : &:r2438_6 +# 2440| v2440_1(void) = NoOp : +# 2438| v2438_8(void) = ReturnIndirection[c] : &:r2438_6, ~m? +# 2438| v2438_9(void) = ReturnVoid : +# 2438| v2438_10(void) = AliasedUse : ~m? +# 2438| v2438_11(void) = ExitFunction : + +# 2442| void param_with_destructor_by_ref(ClassWithDestructor&) +# 2442| Block 0 +# 2442| v2442_1(void) = EnterFunction : +# 2442| mu2442_2(unknown) = AliasedDefinition : +# 2442| mu2442_3(unknown) = InitializeNonLocal : +# 2442| r2442_4(glval) = VariableAddress[c] : +# 2442| mu2442_5(ClassWithDestructor &) = InitializeParameter[c] : &:r2442_4 +# 2442| r2442_6(ClassWithDestructor &) = Load[c] : &:r2442_4, ~m? +# 2442| mu2442_7(unknown) = InitializeIndirection[c] : &:r2442_6 +# 2444| v2444_1(void) = NoOp : +# 2442| v2442_8(void) = ReturnIndirection[c] : &:r2442_6, ~m? +# 2442| v2442_9(void) = ReturnVoid : +# 2442| v2442_10(void) = AliasedUse : ~m? +# 2442| v2442_11(void) = ExitFunction : + +# 2446| void param_with_destructor_by_rref(ClassWithDestructor&&) +# 2446| Block 0 +# 2446| v2446_1(void) = EnterFunction : +# 2446| mu2446_2(unknown) = AliasedDefinition : +# 2446| mu2446_3(unknown) = InitializeNonLocal : +# 2446| r2446_4(glval) = VariableAddress[c] : +# 2446| mu2446_5(ClassWithDestructor &&) = InitializeParameter[c] : &:r2446_4 +# 2446| r2446_6(ClassWithDestructor &&) = Load[c] : &:r2446_4, ~m? +# 2446| mu2446_7(unknown) = InitializeIndirection[c] : &:r2446_6 +# 2448| v2448_1(void) = NoOp : +# 2446| v2446_8(void) = ReturnIndirection[c] : &:r2446_6, ~m? +# 2446| v2446_9(void) = ReturnVoid : +# 2446| v2446_10(void) = AliasedUse : ~m? +# 2446| v2446_11(void) = ExitFunction : perf-regression.cpp: # 6| void Big::Big() diff --git a/cpp/ql/test/query-tests/Critical/MemoryFreed/DoubleFree.expected b/cpp/ql/test/query-tests/Critical/MemoryFreed/DoubleFree.expected index bd886810284..893f1c7e79a 100644 --- a/cpp/ql/test/query-tests/Critical/MemoryFreed/DoubleFree.expected +++ b/cpp/ql/test/query-tests/Critical/MemoryFreed/DoubleFree.expected @@ -41,16 +41,16 @@ nodes | test_free.cpp:302:12:302:14 | buf | semmle.label | buf | subpaths #select -| test_free.cpp:14:10:14:10 | a | test_free.cpp:11:10:11:10 | pointer to free output argument | test_free.cpp:14:10:14:10 | a | Memory pointed to by 'a' may already have been freed by $@. | test_free.cpp:11:5:11:8 | call to free | call to free | -| test_free.cpp:31:27:31:27 | a | test_free.cpp:30:10:30:10 | pointer to free output argument | test_free.cpp:31:27:31:27 | a | Memory pointed to by 'a' may already have been freed by $@. | test_free.cpp:30:5:30:8 | call to free | call to free | -| test_free.cpp:37:27:37:27 | a | test_free.cpp:35:10:35:10 | pointer to free output argument | test_free.cpp:37:27:37:27 | a | Memory pointed to by 'a' may already have been freed by $@. | test_free.cpp:35:5:35:8 | call to free | call to free | -| test_free.cpp:46:10:46:10 | a | test_free.cpp:42:27:42:27 | pointer to free output argument | test_free.cpp:46:10:46:10 | a | Memory pointed to by 'a' may already have been freed by $@. | test_free.cpp:42:22:42:25 | call to free | call to free | -| test_free.cpp:46:10:46:10 | a | test_free.cpp:44:27:44:27 | pointer to free output argument | test_free.cpp:46:10:46:10 | a | Memory pointed to by 'a' may already have been freed by $@. | test_free.cpp:44:22:44:25 | call to free | call to free | -| test_free.cpp:51:10:51:10 | a | test_free.cpp:50:27:50:27 | pointer to free output argument | test_free.cpp:51:10:51:10 | a | Memory pointed to by 'a' may already have been freed by $@. | test_free.cpp:50:22:50:25 | call to free | call to free | -| test_free.cpp:72:14:72:14 | a | test_free.cpp:69:10:69:10 | pointer to free output argument | test_free.cpp:72:14:72:14 | a | Memory pointed to by 'a' may already have been freed by $@. | test_free.cpp:69:5:69:8 | call to free | call to free | -| test_free.cpp:85:12:85:12 | a | test_free.cpp:83:12:83:12 | pointer to operator delete output argument | test_free.cpp:85:12:85:12 | a | Memory pointed to by 'a' may already have been freed by $@. | test_free.cpp:83:5:83:13 | delete | delete | -| test_free.cpp:103:10:103:10 | a | test_free.cpp:101:10:101:10 | pointer to free output argument | test_free.cpp:103:10:103:10 | a | Memory pointed to by 'a' may already have been freed by $@. | test_free.cpp:101:5:101:8 | call to free | call to free | -| test_free.cpp:129:10:129:11 | * ... | test_free.cpp:128:10:128:11 | pointer to free output argument | test_free.cpp:129:10:129:11 | * ... | Memory pointed to by '* ...' may already have been freed by $@. | test_free.cpp:128:5:128:8 | call to free | call to free | -| test_free.cpp:154:10:154:10 | a | test_free.cpp:152:27:152:27 | pointer to free output argument | test_free.cpp:154:10:154:10 | a | Memory pointed to by 'a' may already have been freed by $@. | test_free.cpp:152:22:152:25 | call to free | call to free | -| test_free.cpp:209:10:209:10 | a | test_free.cpp:207:10:207:10 | pointer to free output argument | test_free.cpp:209:10:209:10 | a | Memory pointed to by 'a' may already have been freed by $@. | test_free.cpp:207:5:207:8 | call to free | call to free | -| test_free.cpp:302:12:302:14 | buf | test_free.cpp:301:12:301:14 | pointer to g_free output argument | test_free.cpp:302:12:302:14 | buf | Memory pointed to by 'buf' may already have been freed by $@. | test_free.cpp:301:5:301:10 | call to g_free | call to g_free | +| test_free.cpp:14:10:14:10 | a | test_free.cpp:11:10:11:10 | pointer to free output argument | test_free.cpp:14:10:14:10 | a | Memory pointed to by $@ may already have been freed by $@. | test_free.cpp:14:10:14:10 | a | a | test_free.cpp:11:5:11:8 | call to free | call to free | +| test_free.cpp:31:27:31:27 | a | test_free.cpp:30:10:30:10 | pointer to free output argument | test_free.cpp:31:27:31:27 | a | Memory pointed to by $@ may already have been freed by $@. | test_free.cpp:31:27:31:27 | a | a | test_free.cpp:30:5:30:8 | call to free | call to free | +| test_free.cpp:37:27:37:27 | a | test_free.cpp:35:10:35:10 | pointer to free output argument | test_free.cpp:37:27:37:27 | a | Memory pointed to by $@ may already have been freed by $@. | test_free.cpp:37:27:37:27 | a | a | test_free.cpp:35:5:35:8 | call to free | call to free | +| test_free.cpp:46:10:46:10 | a | test_free.cpp:42:27:42:27 | pointer to free output argument | test_free.cpp:46:10:46:10 | a | Memory pointed to by $@ may already have been freed by $@. | test_free.cpp:46:10:46:10 | a | a | test_free.cpp:42:22:42:25 | call to free | call to free | +| test_free.cpp:46:10:46:10 | a | test_free.cpp:44:27:44:27 | pointer to free output argument | test_free.cpp:46:10:46:10 | a | Memory pointed to by $@ may already have been freed by $@. | test_free.cpp:46:10:46:10 | a | a | test_free.cpp:44:22:44:25 | call to free | call to free | +| test_free.cpp:51:10:51:10 | a | test_free.cpp:50:27:50:27 | pointer to free output argument | test_free.cpp:51:10:51:10 | a | Memory pointed to by $@ may already have been freed by $@. | test_free.cpp:51:10:51:10 | a | a | test_free.cpp:50:22:50:25 | call to free | call to free | +| test_free.cpp:72:14:72:14 | a | test_free.cpp:69:10:69:10 | pointer to free output argument | test_free.cpp:72:14:72:14 | a | Memory pointed to by $@ may already have been freed by $@. | test_free.cpp:72:14:72:14 | a | a | test_free.cpp:69:5:69:8 | call to free | call to free | +| test_free.cpp:85:12:85:12 | a | test_free.cpp:83:12:83:12 | pointer to operator delete output argument | test_free.cpp:85:12:85:12 | a | Memory pointed to by $@ may already have been freed by $@. | test_free.cpp:85:12:85:12 | a | a | test_free.cpp:83:5:83:13 | delete | delete | +| test_free.cpp:103:10:103:10 | a | test_free.cpp:101:10:101:10 | pointer to free output argument | test_free.cpp:103:10:103:10 | a | Memory pointed to by $@ may already have been freed by $@. | test_free.cpp:103:10:103:10 | a | a | test_free.cpp:101:5:101:8 | call to free | call to free | +| test_free.cpp:129:10:129:11 | * ... | test_free.cpp:128:10:128:11 | pointer to free output argument | test_free.cpp:129:10:129:11 | * ... | Memory pointed to by $@ may already have been freed by $@. | test_free.cpp:129:10:129:11 | * ... | * ... | test_free.cpp:128:5:128:8 | call to free | call to free | +| test_free.cpp:154:10:154:10 | a | test_free.cpp:152:27:152:27 | pointer to free output argument | test_free.cpp:154:10:154:10 | a | Memory pointed to by $@ may already have been freed by $@. | test_free.cpp:154:10:154:10 | a | a | test_free.cpp:152:22:152:25 | call to free | call to free | +| test_free.cpp:209:10:209:10 | a | test_free.cpp:207:10:207:10 | pointer to free output argument | test_free.cpp:209:10:209:10 | a | Memory pointed to by $@ may already have been freed by $@. | test_free.cpp:209:10:209:10 | a | a | test_free.cpp:207:5:207:8 | call to free | call to free | +| test_free.cpp:302:12:302:14 | buf | test_free.cpp:301:12:301:14 | pointer to g_free output argument | test_free.cpp:302:12:302:14 | buf | Memory pointed to by $@ may already have been freed by $@. | test_free.cpp:302:12:302:14 | buf | buf | test_free.cpp:301:5:301:10 | call to g_free | call to g_free | diff --git a/cpp/ql/test/query-tests/Critical/MissingCheckScanf/MissingCheckScanf.expected b/cpp/ql/test/query-tests/Critical/MissingCheckScanf/MissingCheckScanf.expected index 69f9ab820eb..8bb2c9643a9 100644 --- a/cpp/ql/test/query-tests/Critical/MissingCheckScanf/MissingCheckScanf.expected +++ b/cpp/ql/test/query-tests/Critical/MissingCheckScanf/MissingCheckScanf.expected @@ -1,18 +1,136 @@ -| test.cpp:35:7:35:7 | i | This variable is read, but may not have been written. It should be guarded by a check that the $@ returns at least 1. | test.cpp:34:3:34:7 | call to scanf | call to scanf | -| test.cpp:68:7:68:7 | i | This variable is read, but may not have been written. It should be guarded by a check that the $@ returns at least 1. | test.cpp:67:3:67:7 | call to scanf | call to scanf | -| test.cpp:80:7:80:7 | i | This variable is read, but may not have been written. It should be guarded by a check that the $@ returns at least 1. | test.cpp:79:3:79:7 | call to scanf | call to scanf | -| test.cpp:90:7:90:8 | * ... | This variable is read, but may not have been written. It should be guarded by a check that the $@ returns at least 1. | test.cpp:89:3:89:7 | call to scanf | call to scanf | -| test.cpp:98:7:98:8 | * ... | This variable is read, but may not have been written. It should be guarded by a check that the $@ returns at least 1. | test.cpp:97:3:97:7 | call to scanf | call to scanf | -| test.cpp:108:7:108:7 | i | This variable is read, but may not have been written. It should be guarded by a check that the $@ returns at least 1. | test.cpp:107:3:107:8 | call to fscanf | call to fscanf | -| test.cpp:115:7:115:7 | i | This variable is read, but may not have been written. It should be guarded by a check that the $@ returns at least 1. | test.cpp:114:3:114:8 | call to sscanf | call to sscanf | -| test.cpp:224:8:224:8 | j | This variable is read, but may not have been written. It should be guarded by a check that the $@ returns at least 2. | test.cpp:221:7:221:11 | call to scanf | call to scanf | -| test.cpp:248:9:248:9 | d | This variable is read, but may not have been written. It should be guarded by a check that the $@ returns at least 2. | test.cpp:246:25:246:29 | call to scanf | call to scanf | -| test.cpp:252:9:252:9 | d | This variable is read, but may not have been written. It should be guarded by a check that the $@ returns at least 2. | test.cpp:250:14:250:18 | call to scanf | call to scanf | -| test.cpp:272:7:272:7 | i | This variable is read, but may not have been written. It should be guarded by a check that the $@ returns at least 1. | test.cpp:271:3:271:7 | call to scanf | call to scanf | -| test.cpp:280:7:280:7 | i | This variable is read, but may not have been written. It should be guarded by a check that the $@ returns at least 1. | test.cpp:279:3:279:7 | call to scanf | call to scanf | -| test.cpp:292:7:292:7 | i | This variable is read, but may not have been written. It should be guarded by a check that the $@ returns at least 1. | test.cpp:291:3:291:7 | call to scanf | call to scanf | -| test.cpp:404:25:404:25 | u | This variable is read, but may not have been written. It should be guarded by a check that the $@ returns at least 1. | test.cpp:403:6:403:11 | call to sscanf | call to sscanf | -| test.cpp:416:7:416:7 | i | This variable is read, but may not have been written. It should be guarded by a check that the $@ returns at least 1. | test.cpp:413:7:413:11 | call to scanf | call to scanf | -| test.cpp:423:7:423:7 | i | This variable is read, but may not have been written. It should be guarded by a check that the $@ returns at least 1. | test.cpp:420:7:420:11 | call to scanf | call to scanf | -| test.cpp:460:6:460:10 | value | This variable is read, but may not have been written. It should be guarded by a check that the $@ returns at least 1. | test.cpp:455:12:455:17 | call to sscanf | call to sscanf | -| test.cpp:474:6:474:10 | value | This variable is read, but may not have been written. It should be guarded by a check that the $@ returns at least 1. | test.cpp:467:8:467:12 | call to scanf | call to scanf | +edges +| test.cpp:34:15:34:16 | scanf output argument | test.cpp:35:7:35:7 | i | provenance | | +| test.cpp:41:19:41:20 | scanf output argument | test.cpp:43:8:43:8 | i | provenance | | +| test.cpp:58:19:58:20 | scanf output argument | test.cpp:60:8:60:8 | i | provenance | | +| test.cpp:67:15:67:16 | scanf output argument | test.cpp:68:7:68:7 | i | provenance | | +| test.cpp:70:19:70:20 | scanf output argument | test.cpp:72:8:72:8 | i | provenance | | +| test.cpp:79:15:79:16 | scanf output argument | test.cpp:80:7:80:7 | i | provenance | | +| test.cpp:89:15:89:15 | scanf output argument | test.cpp:90:7:90:8 | * ... | provenance | | +| test.cpp:97:15:97:15 | scanf output argument | test.cpp:98:7:98:8 | * ... | provenance | | +| test.cpp:107:32:107:33 | fscanf output argument | test.cpp:108:7:108:7 | i | provenance | | +| test.cpp:114:32:114:33 | sscanf output argument | test.cpp:115:7:115:7 | i | provenance | | +| test.cpp:121:38:121:39 | _scanf_l output argument | test.cpp:123:8:123:8 | i | provenance | | +| test.cpp:132:19:132:20 | scanf output argument | test.cpp:134:8:134:8 | i | provenance | | +| test.cpp:141:19:141:20 | scanf output argument | test.cpp:143:8:143:8 | i | provenance | | +| test.cpp:150:23:150:24 | scanf output argument | test.cpp:154:9:154:9 | i | provenance | | +| test.cpp:181:19:181:20 | scanf output argument | test.cpp:185:8:185:8 | i | provenance | | +| test.cpp:193:19:193:20 | scanf output argument | test.cpp:197:8:197:8 | i | provenance | | +| test.cpp:211:22:211:23 | scanf output argument | test.cpp:213:8:213:8 | i | provenance | | +| test.cpp:221:22:221:23 | scanf output argument | test.cpp:223:8:223:8 | i | provenance | | +| test.cpp:221:26:221:27 | scanf output argument | test.cpp:224:8:224:8 | j | provenance | | +| test.cpp:231:22:231:23 | scanf output argument | test.cpp:233:8:233:8 | i | provenance | | +| test.cpp:231:26:231:27 | scanf output argument | test.cpp:234:8:234:8 | j | provenance | | +| test.cpp:246:44:246:45 | scanf output argument | test.cpp:248:9:248:9 | d | provenance | | +| test.cpp:250:33:250:34 | scanf output argument | test.cpp:252:9:252:9 | d | provenance | | +| test.cpp:271:15:271:16 | scanf output argument | test.cpp:272:7:272:7 | i | provenance | | +| test.cpp:279:15:279:16 | scanf output argument | test.cpp:280:7:280:7 | i | provenance | | +| test.cpp:291:15:291:16 | scanf output argument | test.cpp:292:7:292:7 | i | provenance | | +| test.cpp:325:34:325:35 | sscanf output argument | test.cpp:327:8:327:8 | i | provenance | | +| test.cpp:325:38:325:39 | sscanf output argument | test.cpp:328:8:328:8 | j | provenance | | +| test.cpp:335:22:335:23 | scanf output argument | test.cpp:337:8:337:8 | i | provenance | | +| test.cpp:344:23:344:24 | scanf output argument | test.cpp:346:8:346:8 | i | provenance | | +| test.cpp:353:26:353:27 | scanf output argument | test.cpp:354:8:354:8 | d | provenance | | +| test.cpp:353:30:353:31 | scanf output argument | test.cpp:355:8:355:8 | n | provenance | | +| test.cpp:362:62:362:63 | sscanf output argument | test.cpp:364:17:364:17 | n | provenance | | +| test.cpp:403:29:403:30 | sscanf output argument | test.cpp:404:18:404:25 | u | provenance | | +| test.cpp:413:19:413:20 | scanf output argument | test.cpp:416:7:416:7 | i | provenance | | +| test.cpp:420:19:420:20 | scanf output argument | test.cpp:423:7:423:7 | i | provenance | | +| test.cpp:455:41:455:46 | sscanf output argument | test.cpp:460:6:460:10 | value | provenance | | +| test.cpp:467:20:467:25 | scanf output argument | test.cpp:474:6:474:10 | value | provenance | | +nodes +| test.cpp:34:15:34:16 | scanf output argument | semmle.label | scanf output argument | +| test.cpp:35:7:35:7 | i | semmle.label | i | +| test.cpp:41:19:41:20 | scanf output argument | semmle.label | scanf output argument | +| test.cpp:43:8:43:8 | i | semmle.label | i | +| test.cpp:58:19:58:20 | scanf output argument | semmle.label | scanf output argument | +| test.cpp:60:8:60:8 | i | semmle.label | i | +| test.cpp:67:15:67:16 | scanf output argument | semmle.label | scanf output argument | +| test.cpp:68:7:68:7 | i | semmle.label | i | +| test.cpp:70:19:70:20 | scanf output argument | semmle.label | scanf output argument | +| test.cpp:72:8:72:8 | i | semmle.label | i | +| test.cpp:79:15:79:16 | scanf output argument | semmle.label | scanf output argument | +| test.cpp:80:7:80:7 | i | semmle.label | i | +| test.cpp:89:15:89:15 | scanf output argument | semmle.label | scanf output argument | +| test.cpp:90:7:90:8 | * ... | semmle.label | * ... | +| test.cpp:97:15:97:15 | scanf output argument | semmle.label | scanf output argument | +| test.cpp:98:7:98:8 | * ... | semmle.label | * ... | +| test.cpp:107:32:107:33 | fscanf output argument | semmle.label | fscanf output argument | +| test.cpp:108:7:108:7 | i | semmle.label | i | +| test.cpp:114:32:114:33 | sscanf output argument | semmle.label | sscanf output argument | +| test.cpp:115:7:115:7 | i | semmle.label | i | +| test.cpp:121:38:121:39 | _scanf_l output argument | semmle.label | _scanf_l output argument | +| test.cpp:123:8:123:8 | i | semmle.label | i | +| test.cpp:132:19:132:20 | scanf output argument | semmle.label | scanf output argument | +| test.cpp:134:8:134:8 | i | semmle.label | i | +| test.cpp:141:19:141:20 | scanf output argument | semmle.label | scanf output argument | +| test.cpp:143:8:143:8 | i | semmle.label | i | +| test.cpp:150:23:150:24 | scanf output argument | semmle.label | scanf output argument | +| test.cpp:154:9:154:9 | i | semmle.label | i | +| test.cpp:181:19:181:20 | scanf output argument | semmle.label | scanf output argument | +| test.cpp:185:8:185:8 | i | semmle.label | i | +| test.cpp:193:19:193:20 | scanf output argument | semmle.label | scanf output argument | +| test.cpp:197:8:197:8 | i | semmle.label | i | +| test.cpp:211:22:211:23 | scanf output argument | semmle.label | scanf output argument | +| test.cpp:213:8:213:8 | i | semmle.label | i | +| test.cpp:221:22:221:23 | scanf output argument | semmle.label | scanf output argument | +| test.cpp:221:26:221:27 | scanf output argument | semmle.label | scanf output argument | +| test.cpp:223:8:223:8 | i | semmle.label | i | +| test.cpp:224:8:224:8 | j | semmle.label | j | +| test.cpp:231:22:231:23 | scanf output argument | semmle.label | scanf output argument | +| test.cpp:231:26:231:27 | scanf output argument | semmle.label | scanf output argument | +| test.cpp:233:8:233:8 | i | semmle.label | i | +| test.cpp:234:8:234:8 | j | semmle.label | j | +| test.cpp:246:44:246:45 | scanf output argument | semmle.label | scanf output argument | +| test.cpp:248:9:248:9 | d | semmle.label | d | +| test.cpp:250:33:250:34 | scanf output argument | semmle.label | scanf output argument | +| test.cpp:252:9:252:9 | d | semmle.label | d | +| test.cpp:271:15:271:16 | scanf output argument | semmle.label | scanf output argument | +| test.cpp:272:7:272:7 | i | semmle.label | i | +| test.cpp:279:15:279:16 | scanf output argument | semmle.label | scanf output argument | +| test.cpp:280:7:280:7 | i | semmle.label | i | +| test.cpp:291:15:291:16 | scanf output argument | semmle.label | scanf output argument | +| test.cpp:292:7:292:7 | i | semmle.label | i | +| test.cpp:325:34:325:35 | sscanf output argument | semmle.label | sscanf output argument | +| test.cpp:325:38:325:39 | sscanf output argument | semmle.label | sscanf output argument | +| test.cpp:327:8:327:8 | i | semmle.label | i | +| test.cpp:328:8:328:8 | j | semmle.label | j | +| test.cpp:335:22:335:23 | scanf output argument | semmle.label | scanf output argument | +| test.cpp:337:8:337:8 | i | semmle.label | i | +| test.cpp:344:23:344:24 | scanf output argument | semmle.label | scanf output argument | +| test.cpp:346:8:346:8 | i | semmle.label | i | +| test.cpp:353:26:353:27 | scanf output argument | semmle.label | scanf output argument | +| test.cpp:353:30:353:31 | scanf output argument | semmle.label | scanf output argument | +| test.cpp:354:8:354:8 | d | semmle.label | d | +| test.cpp:355:8:355:8 | n | semmle.label | n | +| test.cpp:362:62:362:63 | sscanf output argument | semmle.label | sscanf output argument | +| test.cpp:364:17:364:17 | n | semmle.label | n | +| test.cpp:403:29:403:30 | sscanf output argument | semmle.label | sscanf output argument | +| test.cpp:404:18:404:25 | u | semmle.label | u | +| test.cpp:413:19:413:20 | scanf output argument | semmle.label | scanf output argument | +| test.cpp:416:7:416:7 | i | semmle.label | i | +| test.cpp:420:19:420:20 | scanf output argument | semmle.label | scanf output argument | +| test.cpp:423:7:423:7 | i | semmle.label | i | +| test.cpp:455:41:455:46 | sscanf output argument | semmle.label | sscanf output argument | +| test.cpp:460:6:460:10 | value | semmle.label | value | +| test.cpp:467:20:467:25 | scanf output argument | semmle.label | scanf output argument | +| test.cpp:474:6:474:10 | value | semmle.label | value | +subpaths +#select +| test.cpp:35:7:35:7 | i | test.cpp:34:15:34:16 | scanf output argument | test.cpp:35:7:35:7 | i | This variable is read, but may not have been written. It should be guarded by a check that the $@ returns at least 1. | test.cpp:34:3:34:7 | call to scanf | call to scanf | +| test.cpp:68:7:68:7 | i | test.cpp:67:15:67:16 | scanf output argument | test.cpp:68:7:68:7 | i | This variable is read, but may not have been written. It should be guarded by a check that the $@ returns at least 1. | test.cpp:67:3:67:7 | call to scanf | call to scanf | +| test.cpp:80:7:80:7 | i | test.cpp:79:15:79:16 | scanf output argument | test.cpp:80:7:80:7 | i | This variable is read, but may not have been written. It should be guarded by a check that the $@ returns at least 1. | test.cpp:79:3:79:7 | call to scanf | call to scanf | +| test.cpp:90:7:90:8 | * ... | test.cpp:89:15:89:15 | scanf output argument | test.cpp:90:7:90:8 | * ... | This variable is read, but may not have been written. It should be guarded by a check that the $@ returns at least 1. | test.cpp:89:3:89:7 | call to scanf | call to scanf | +| test.cpp:98:7:98:8 | * ... | test.cpp:97:15:97:15 | scanf output argument | test.cpp:98:7:98:8 | * ... | This variable is read, but may not have been written. It should be guarded by a check that the $@ returns at least 1. | test.cpp:97:3:97:7 | call to scanf | call to scanf | +| test.cpp:108:7:108:7 | i | test.cpp:107:32:107:33 | fscanf output argument | test.cpp:108:7:108:7 | i | This variable is read, but may not have been written. It should be guarded by a check that the $@ returns at least 1. | test.cpp:107:3:107:8 | call to fscanf | call to fscanf | +| test.cpp:115:7:115:7 | i | test.cpp:114:32:114:33 | sscanf output argument | test.cpp:115:7:115:7 | i | This variable is read, but may not have been written. It should be guarded by a check that the $@ returns at least 1. | test.cpp:114:3:114:8 | call to sscanf | call to sscanf | +| test.cpp:224:8:224:8 | j | test.cpp:221:26:221:27 | scanf output argument | test.cpp:224:8:224:8 | j | This variable is read, but may not have been written. It should be guarded by a check that the $@ returns at least 2. | test.cpp:221:7:221:11 | call to scanf | call to scanf | +| test.cpp:248:9:248:9 | d | test.cpp:246:44:246:45 | scanf output argument | test.cpp:248:9:248:9 | d | This variable is read, but may not have been written. It should be guarded by a check that the $@ returns at least 2. | test.cpp:246:25:246:29 | call to scanf | call to scanf | +| test.cpp:252:9:252:9 | d | test.cpp:250:33:250:34 | scanf output argument | test.cpp:252:9:252:9 | d | This variable is read, but may not have been written. It should be guarded by a check that the $@ returns at least 2. | test.cpp:250:14:250:18 | call to scanf | call to scanf | +| test.cpp:272:7:272:7 | i | test.cpp:271:15:271:16 | scanf output argument | test.cpp:272:7:272:7 | i | This variable is read, but may not have been written. It should be guarded by a check that the $@ returns at least 1. | test.cpp:271:3:271:7 | call to scanf | call to scanf | +| test.cpp:280:7:280:7 | i | test.cpp:279:15:279:16 | scanf output argument | test.cpp:280:7:280:7 | i | This variable is read, but may not have been written. It should be guarded by a check that the $@ returns at least 1. | test.cpp:279:3:279:7 | call to scanf | call to scanf | +| test.cpp:292:7:292:7 | i | test.cpp:291:15:291:16 | scanf output argument | test.cpp:292:7:292:7 | i | This variable is read, but may not have been written. It should be guarded by a check that the $@ returns at least 1. | test.cpp:291:3:291:7 | call to scanf | call to scanf | +| test.cpp:404:25:404:25 | u | test.cpp:403:29:403:30 | sscanf output argument | test.cpp:404:18:404:25 | u | This variable is read, but may not have been written. It should be guarded by a check that the $@ returns at least 1. | test.cpp:403:6:403:11 | call to sscanf | call to sscanf | +| test.cpp:416:7:416:7 | i | test.cpp:413:19:413:20 | scanf output argument | test.cpp:416:7:416:7 | i | This variable is read, but may not have been written. It should be guarded by a check that the $@ returns at least 1. | test.cpp:413:7:413:11 | call to scanf | call to scanf | +| test.cpp:423:7:423:7 | i | test.cpp:420:19:420:20 | scanf output argument | test.cpp:423:7:423:7 | i | This variable is read, but may not have been written. It should be guarded by a check that the $@ returns at least 1. | test.cpp:420:7:420:11 | call to scanf | call to scanf | +| test.cpp:460:6:460:10 | value | test.cpp:455:41:455:46 | sscanf output argument | test.cpp:460:6:460:10 | value | This variable is read, but may not have been written. It should be guarded by a check that the $@ returns at least 1. | test.cpp:455:12:455:17 | call to sscanf | call to sscanf | +| test.cpp:474:6:474:10 | value | test.cpp:467:20:467:25 | scanf output argument | test.cpp:474:6:474:10 | value | This variable is read, but may not have been written. It should be guarded by a check that the $@ returns at least 1. | test.cpp:467:8:467:12 | call to scanf | call to scanf | diff --git a/cpp/ql/test/query-tests/Likely Bugs/Protocols/TlsSettingsMisconfiguration.expected b/cpp/ql/test/query-tests/Likely Bugs/Protocols/TlsSettingsMisconfiguration.expected index f889cb12a68..b2191d5b544 100644 --- a/cpp/ql/test/query-tests/Likely Bugs/Protocols/TlsSettingsMisconfiguration.expected +++ b/cpp/ql/test/query-tests/Likely Bugs/Protocols/TlsSettingsMisconfiguration.expected @@ -5,12 +5,7 @@ | test2.cpp:31:32:31:65 | call to context | This usage of 'boost::asio::ssl::context::context' with protocol $@ is not configured correctly: The option $@. | test2.cpp:31:32:31:64 | sslv23 | sslv23 | test2.cpp:31:32:31:65 | call to context | no_sslv3 has not been set | | test2.cpp:31:32:31:65 | call to context | This usage of 'boost::asio::ssl::context::context' with protocol $@ is not configured correctly: The option $@. | test2.cpp:31:32:31:64 | sslv23 | sslv23 | test2.cpp:31:32:31:65 | call to context | no_tlsv1 has not been set | | test2.cpp:31:32:31:65 | call to context | This usage of 'boost::asio::ssl::context::context' with protocol $@ is not configured correctly: The option $@. | test2.cpp:31:32:31:64 | sslv23 | sslv23 | test2.cpp:31:32:31:65 | call to context | no_tlsv1_1 has not been set | -| test2.cpp:38:35:38:98 | call to context | This usage of 'boost::asio::ssl::context::context' with protocol $@ is not configured correctly: The option $@. | test2.cpp:38:65:38:97 | sslv23 | sslv23 | test2.cpp:38:35:38:98 | call to context | no_sslv3 has not been set | -| test2.cpp:38:35:38:98 | call to context | This usage of 'boost::asio::ssl::context::context' with protocol $@ is not configured correctly: The option $@. | test2.cpp:38:65:38:97 | sslv23 | sslv23 | test2.cpp:38:35:38:98 | call to context | no_tlsv1 has not been set | -| test2.cpp:38:35:38:98 | call to context | This usage of 'boost::asio::ssl::context::context' with protocol $@ is not configured correctly: The option $@. | test2.cpp:38:65:38:97 | sslv23 | sslv23 | test2.cpp:38:35:38:98 | call to context | no_tlsv1_1 has not been set | | test2.cpp:45:35:45:98 | call to context | This usage of 'boost::asio::ssl::context::context' with protocol $@ is not configured correctly: The option $@. | test2.cpp:45:65:45:97 | sslv23 | sslv23 | test2.cpp:45:35:45:98 | call to context | no_sslv3 has not been set | -| test2.cpp:45:35:45:98 | call to context | This usage of 'boost::asio::ssl::context::context' with protocol $@ is not configured correctly: The option $@. | test2.cpp:45:65:45:97 | sslv23 | sslv23 | test2.cpp:45:35:45:98 | call to context | no_tlsv1 has not been set | -| test2.cpp:45:35:45:98 | call to context | This usage of 'boost::asio::ssl::context::context' with protocol $@ is not configured correctly: The option $@. | test2.cpp:45:65:45:97 | sslv23 | sslv23 | test2.cpp:45:35:45:98 | call to context | no_tlsv1_1 has not been set | | test2.cpp:52:32:52:65 | call to context | This usage of 'boost::asio::ssl::context::context' with protocol $@ is not configured correctly: The option $@. | test2.cpp:52:32:52:64 | sslv23 | sslv23 | test2.cpp:52:32:52:65 | call to context | no_sslv3 has not been set | | test2.cpp:52:32:52:65 | call to context | This usage of 'boost::asio::ssl::context::context' with protocol $@ is not configured correctly: The option $@. | test2.cpp:52:32:52:64 | sslv23 | sslv23 | test2.cpp:52:32:52:65 | call to context | no_tlsv1 has not been set | | test2.cpp:52:32:52:65 | call to context | This usage of 'boost::asio::ssl::context::context' with protocol $@ is not configured correctly: The option $@. | test2.cpp:52:32:52:64 | sslv23 | sslv23 | test2.cpp:52:32:52:65 | call to context | no_tlsv1_1 has not been set | diff --git a/cpp/ql/test/query-tests/Likely Bugs/Protocols/test2.cpp b/cpp/ql/test/query-tests/Likely Bugs/Protocols/test2.cpp index e8c802d6902..5679cee8b0f 100644 --- a/cpp/ql/test/query-tests/Likely Bugs/Protocols/test2.cpp +++ b/cpp/ql/test/query-tests/Likely Bugs/Protocols/test2.cpp @@ -34,7 +34,7 @@ void bad2() void good3() { - // GOOD [FALSE POSITIVE] + // GOOD boost::asio::ssl::context *ctx = new boost::asio::ssl::context(boost::asio::ssl::context::sslv23); ctx->set_options(boost::asio::ssl::context::no_tlsv1 | boost::asio::ssl::context::no_tlsv1_1 | boost::asio::ssl::context::no_sslv3); } diff --git a/cpp/ql/test/query-tests/jsf/4.13 Functions/AV Rule 114/AV Rule 114.expected b/cpp/ql/test/query-tests/jsf/4.13 Functions/AV Rule 114/AV Rule 114.expected index ce056261514..390da977d3f 100644 --- a/cpp/ql/test/query-tests/jsf/4.13 Functions/AV Rule 114/AV Rule 114.expected +++ b/cpp/ql/test/query-tests/jsf/4.13 Functions/AV Rule 114/AV Rule 114.expected @@ -10,3 +10,4 @@ | test.cpp:112:1:112:1 | return ... | Function g14 should return a value of type int but does not return a value here | | test.cpp:134:2:134:36 | ExprStmt | Function g16 should return a value of type int but does not return a value here | | test.cpp:141:3:141:37 | ExprStmt | Function g17 should return a value of type int but does not return a value here | +| test.cpp:189:2:189:16 | ExprStmt | Function g23 should return a value of type int but does not return a value here | diff --git a/cpp/ql/test/query-tests/jsf/4.13 Functions/AV Rule 114/test.cpp b/cpp/ql/test/query-tests/jsf/4.13 Functions/AV Rule 114/test.cpp index c68ad23805c..c19c5de13f9 100644 --- a/cpp/ql/test/query-tests/jsf/4.13 Functions/AV Rule 114/test.cpp +++ b/cpp/ql/test/query-tests/jsf/4.13 Functions/AV Rule 114/test.cpp @@ -170,3 +170,21 @@ int g19(int x) int g21() { g20(); // GOOD } + +class Aborting { +public: + [[noreturn]] + ~Aborting(); + + void a() {}; +}; + +int g22() { + Aborting x; + + x.a(); // GOOD +} + +int g23() { + Aborting().a(); // GOOD [FALSE POSITIVE] +} diff --git a/cpp/ql/test/successor-tests/conditional_destructors/cfg.expected b/cpp/ql/test/successor-tests/conditional_destructors/cfg.expected index a47bcaf6fbf..006ed12e35f 100644 --- a/cpp/ql/test/successor-tests/conditional_destructors/cfg.expected +++ b/cpp/ql/test/successor-tests/conditional_destructors/cfg.expected @@ -1,175 +1,189 @@ -| C1::C1 | false | 237 | 237 | C1 | -| C1::C1 | false | 359 | 359 | C1 | -| C1::C1 | false | 363 | 363 | C1 | -| C1::C1 | false | 398 | 398 | ExprStmt | -| C1::C1 | false | 400 | 400 | this | -| C1::C1 | false | 401 | 401 | val | -| C1::C1 | false | 403 | 403 | x | -| C1::C1 | false | 405 | 405 | ... = ... | -| C1::C1 | false | 407 | 407 | return ... | -| C1::C1 | false | 409 | 409 | { ... } | -| C1::C1 | true | 398 | 403 | | -| C1::C1 | true | 400 | 401 | | -| C1::C1 | true | 401 | 405 | | -| C1::C1 | true | 403 | 400 | | -| C1::C1 | true | 405 | 407 | | -| C1::C1 | true | 407 | 237 | | -| C1::C1 | true | 409 | 398 | | -| C1::operator= | false | 348 | 348 | operator= | -| C1::operator= | false | 355 | 355 | operator= | -| C1::operator== | false | 226 | 226 | operator== | -| C1::operator== | false | 376 | 376 | return ... | -| C1::operator== | false | 378 | 378 | this | -| C1::operator== | false | 379 | 379 | val | -| C1::operator== | false | 382 | 382 | other | -| C1::operator== | false | 384 | 384 | (reference dereference) | -| C1::operator== | false | 385 | 385 | val | -| C1::operator== | false | 387 | 387 | ... == ... | -| C1::operator== | false | 389 | 389 | { ... } | -| C1::operator== | true | 376 | 378 | | -| C1::operator== | true | 378 | 379 | | -| C1::operator== | true | 379 | 382 | | -| C1::operator== | true | 382 | 385 | | -| C1::operator== | true | 385 | 387 | | -| C1::operator== | true | 387 | 226 | | -| C1::operator== | true | 389 | 376 | | -| C2::C2 | false | 170 | 170 | C2 | -| C2::C2 | false | 288 | 288 | C2 | -| C2::C2 | false | 334 | 334 | ExprStmt | -| C2::C2 | false | 336 | 336 | this | -| C2::C2 | false | 337 | 337 | val | -| C2::C2 | false | 339 | 339 | x | -| C2::C2 | false | 341 | 341 | ... = ... | -| C2::C2 | false | 343 | 343 | return ... | -| C2::C2 | false | 345 | 345 | { ... } | -| C2::C2 | true | 334 | 339 | | -| C2::C2 | true | 336 | 337 | | -| C2::C2 | true | 337 | 341 | | -| C2::C2 | true | 339 | 336 | | -| C2::C2 | true | 341 | 343 | | -| C2::C2 | true | 343 | 170 | | -| C2::C2 | true | 345 | 334 | | -| C2::operator= | false | 282 | 282 | operator= | -| C2::operator== | false | 159 | 159 | operator== | -| C2::operator== | false | 301 | 301 | return ... | -| C2::operator== | false | 303 | 303 | this | -| C2::operator== | false | 304 | 304 | val | -| C2::operator== | false | 307 | 307 | other | -| C2::operator== | false | 309 | 309 | (reference dereference) | -| C2::operator== | false | 310 | 310 | val | -| C2::operator== | false | 312 | 312 | ... == ... | -| C2::operator== | false | 314 | 314 | { ... } | -| C2::operator== | true | 301 | 303 | | -| C2::operator== | true | 303 | 304 | | -| C2::operator== | true | 304 | 307 | | -| C2::operator== | true | 307 | 310 | | -| C2::operator== | true | 310 | 312 | | -| C2::operator== | true | 312 | 159 | | -| C2::operator== | true | 314 | 301 | | -| C2::~C2 | false | 316 | 316 | ~C2 | -| C2::~C2 | false | 321 | 321 | ; | -| C2::~C2 | false | 323 | 323 | return ... | -| C2::~C2 | false | 325 | 325 | { ... } | -| C2::~C2 | true | 321 | 323 | | -| C2::~C2 | true | 323 | 316 | | -| C2::~C2 | true | 325 | 321 | | -| __va_list_tag::operator= | false | 57 | 57 | operator= | -| __va_list_tag::operator= | false | 63 | 63 | operator= | -| f1 | false | 215 | 215 | f1 | -| f1 | false | 220 | 220 | if (...) ... | -| f1 | false | 234 | 234 | call to operator== | -| f1 | false | 235 | 235 | call to C1 | -| f1 | false | 240 | 240 | 1 | -| f1 | false | 241 | 241 | temporary object | -| f1 | false | 242 | 242 | (const C1)... | -| f1 | false | 243 | 243 | call to C1 | -| f1 | false | 247 | 247 | 2 | -| f1 | false | 248 | 248 | temporary object | -| f1 | false | 249 | 249 | (const C1)... | -| f1 | false | 250 | 250 | (reference to) | -| f1 | false | 251 | 251 | ; | -| f1 | false | 253 | 253 | { ... } | -| f1 | false | 255 | 255 | if (...) ... | -| f1 | false | 258 | 258 | call to operator== | -| f1 | false | 259 | 259 | call to C1 | -| f1 | false | 263 | 263 | 3 | -| f1 | false | 264 | 264 | temporary object | -| f1 | false | 265 | 265 | (const C1)... | -| f1 | false | 266 | 266 | call to C1 | -| f1 | false | 270 | 270 | 3 | -| f1 | false | 271 | 271 | temporary object | -| f1 | false | 272 | 272 | (const C1)... | -| f1 | false | 273 | 273 | (reference to) | -| f1 | false | 274 | 274 | ; | -| f1 | false | 276 | 276 | { ... } | -| f1 | false | 278 | 278 | return ... | -| f1 | false | 280 | 280 | { ... } | -| f1 | true | 220 | 247 | | -| f1 | true | 234 | 253 | T | -| f1 | true | 234 | 255 | F | -| f1 | true | 235 | 234 | | -| f1 | true | 240 | 235 | | -| f1 | true | 243 | 240 | | -| f1 | true | 247 | 243 | | -| f1 | true | 251 | 255 | | -| f1 | true | 253 | 251 | | -| f1 | true | 255 | 270 | | -| f1 | true | 258 | 276 | T | -| f1 | true | 258 | 278 | F | -| f1 | true | 259 | 258 | | -| f1 | true | 263 | 259 | | -| f1 | true | 266 | 263 | | -| f1 | true | 270 | 266 | | -| f1 | true | 274 | 278 | | -| f1 | true | 276 | 274 | | -| f1 | true | 278 | 215 | | -| f1 | true | 280 | 220 | | -| f2 | false | 148 | 148 | f2 | -| f2 | false | 153 | 153 | if (...) ... | -| f2 | false | 167 | 167 | call to operator== | -| f2 | false | 168 | 168 | call to C2 | -| f2 | false | 173 | 173 | 1 | -| f2 | false | 174 | 174 | temporary object | -| f2 | false | 175 | 175 | (const C2)... | -| f2 | false | 176 | 176 | call to C2 | -| f2 | false | 180 | 180 | 2 | -| f2 | false | 181 | 181 | temporary object | -| f2 | false | 182 | 182 | (const C2)... | -| f2 | false | 183 | 183 | (reference to) | -| f2 | false | 184 | 184 | ; | -| f2 | false | 186 | 186 | { ... } | -| f2 | false | 188 | 188 | if (...) ... | -| f2 | false | 191 | 191 | call to operator== | -| f2 | false | 192 | 192 | call to C2 | -| f2 | false | 196 | 196 | 3 | -| f2 | false | 197 | 197 | temporary object | +| C1::C1 | false | 305 | 305 | C1 | +| C1::C1 | false | 473 | 473 | C1 | +| C1::C1 | false | 477 | 477 | C1 | +| C1::C1 | false | 521 | 521 | ExprStmt | +| C1::C1 | false | 524 | 524 | this | +| C1::C1 | false | 526 | 526 | val | +| C1::C1 | false | 529 | 529 | x | +| C1::C1 | false | 532 | 532 | ... = ... | +| C1::C1 | false | 535 | 535 | return ... | +| C1::C1 | false | 538 | 538 | { ... } | +| C1::C1 | true | 521 | 529 | | +| C1::C1 | true | 524 | 526 | | +| C1::C1 | true | 526 | 532 | | +| C1::C1 | true | 529 | 524 | | +| C1::C1 | true | 532 | 535 | | +| C1::C1 | true | 535 | 305 | | +| C1::C1 | true | 538 | 521 | | +| C1::operator= | false | 462 | 462 | operator= | +| C1::operator= | false | 469 | 469 | operator= | +| C1::operator== | false | 292 | 292 | operator== | +| C1::operator== | false | 491 | 491 | return ... | +| C1::operator== | false | 494 | 494 | this | +| C1::operator== | false | 496 | 496 | val | +| C1::operator== | false | 500 | 500 | other | +| C1::operator== | false | 503 | 503 | (reference dereference) | +| C1::operator== | false | 505 | 505 | val | +| C1::operator== | false | 508 | 508 | ... == ... | +| C1::operator== | false | 511 | 511 | { ... } | +| C1::operator== | true | 491 | 494 | | +| C1::operator== | true | 494 | 496 | | +| C1::operator== | true | 496 | 500 | | +| C1::operator== | true | 500 | 505 | | +| C1::operator== | true | 505 | 508 | | +| C1::operator== | true | 508 | 292 | | +| C1::operator== | true | 511 | 491 | | +| C2::C2 | false | 189 | 189 | C2 | +| C2::C2 | false | 385 | 385 | C2 | +| C2::C2 | false | 442 | 442 | ExprStmt | +| C2::C2 | false | 445 | 445 | this | +| C2::C2 | false | 447 | 447 | val | +| C2::C2 | false | 450 | 450 | x | +| C2::C2 | false | 453 | 453 | ... = ... | +| C2::C2 | false | 456 | 456 | return ... | +| C2::C2 | false | 459 | 459 | { ... } | +| C2::C2 | true | 442 | 450 | | +| C2::C2 | true | 445 | 447 | | +| C2::C2 | true | 447 | 453 | | +| C2::C2 | true | 450 | 445 | | +| C2::C2 | true | 453 | 456 | | +| C2::C2 | true | 456 | 189 | | +| C2::C2 | true | 459 | 442 | | +| C2::operator= | false | 379 | 379 | operator= | +| C2::operator== | false | 176 | 176 | operator== | +| C2::operator== | false | 399 | 399 | return ... | +| C2::operator== | false | 402 | 402 | this | +| C2::operator== | false | 404 | 404 | val | +| C2::operator== | false | 408 | 408 | other | +| C2::operator== | false | 411 | 411 | (reference dereference) | +| C2::operator== | false | 413 | 413 | val | +| C2::operator== | false | 416 | 416 | ... == ... | +| C2::operator== | false | 419 | 419 | { ... } | +| C2::operator== | true | 399 | 402 | | +| C2::operator== | true | 402 | 404 | | +| C2::operator== | true | 404 | 408 | | +| C2::operator== | true | 408 | 413 | | +| C2::operator== | true | 413 | 416 | | +| C2::operator== | true | 416 | 176 | | +| C2::operator== | true | 419 | 399 | | +| C2::~C2 | false | 267 | 267 | ~C2 | +| C2::~C2 | false | 426 | 426 | ; | +| C2::~C2 | false | 429 | 429 | return ... | +| C2::~C2 | false | 432 | 432 | { ... } | +| C2::~C2 | true | 426 | 429 | | +| C2::~C2 | true | 429 | 267 | | +| C2::~C2 | true | 432 | 426 | | +| __va_list_tag::operator= | false | 66 | 66 | operator= | +| __va_list_tag::operator= | false | 72 | 72 | operator= | +| f1 | false | 280 | 280 | f1 | +| f1 | false | 286 | 286 | if (...) ... | +| f1 | false | 301 | 301 | call to operator== | +| f1 | false | 303 | 303 | call to C1 | +| f1 | false | 310 | 310 | 1 | +| f1 | false | 312 | 312 | temporary object | +| f1 | false | 314 | 314 | (const C1)... | +| f1 | false | 316 | 316 | call to C1 | +| f1 | false | 322 | 322 | 2 | +| f1 | false | 324 | 324 | temporary object | +| f1 | false | 326 | 326 | (const C1)... | +| f1 | false | 328 | 328 | (reference to) | +| f1 | false | 330 | 330 | ; | +| f1 | false | 333 | 333 | { ... } | +| f1 | false | 336 | 336 | if (...) ... | +| f1 | false | 340 | 340 | call to operator== | +| f1 | false | 342 | 342 | call to C1 | +| f1 | false | 348 | 348 | 3 | +| f1 | false | 350 | 350 | temporary object | +| f1 | false | 352 | 352 | (const C1)... | +| f1 | false | 354 | 354 | call to C1 | +| f1 | false | 360 | 360 | 3 | +| f1 | false | 362 | 362 | temporary object | +| f1 | false | 364 | 364 | (const C1)... | +| f1 | false | 366 | 366 | (reference to) | +| f1 | false | 368 | 368 | ; | +| f1 | false | 371 | 371 | { ... } | +| f1 | false | 374 | 374 | return ... | +| f1 | false | 377 | 377 | { ... } | +| f1 | true | 286 | 322 | | +| f1 | true | 301 | 333 | T | +| f1 | true | 301 | 336 | F | +| f1 | true | 303 | 301 | | +| f1 | true | 310 | 303 | | +| f1 | true | 316 | 310 | | +| f1 | true | 322 | 316 | | +| f1 | true | 330 | 336 | | +| f1 | true | 333 | 330 | | +| f1 | true | 336 | 360 | | +| f1 | true | 340 | 371 | T | +| f1 | true | 340 | 374 | F | +| f1 | true | 342 | 340 | | +| f1 | true | 348 | 342 | | +| f1 | true | 354 | 348 | | +| f1 | true | 360 | 354 | | +| f1 | true | 368 | 374 | | +| f1 | true | 371 | 368 | | +| f1 | true | 374 | 280 | | +| f1 | true | 377 | 286 | | +| f2 | false | 164 | 164 | f2 | +| f2 | false | 170 | 170 | if (...) ... | +| f2 | false | 185 | 185 | call to operator== | +| f2 | false | 187 | 187 | call to C2 | +| f2 | false | 194 | 194 | 1 | +| f2 | false | 196 | 196 | temporary object | | f2 | false | 198 | 198 | (const C2)... | -| f2 | false | 199 | 199 | call to C2 | -| f2 | false | 203 | 203 | 3 | -| f2 | false | 204 | 204 | temporary object | -| f2 | false | 205 | 205 | (const C2)... | -| f2 | false | 206 | 206 | (reference to) | -| f2 | false | 207 | 207 | ; | -| f2 | false | 209 | 209 | { ... } | -| f2 | false | 211 | 211 | return ... | -| f2 | false | 213 | 213 | { ... } | -| f2 | true | 153 | 180 | | -| f2 | true | 167 | 186 | T | -| f2 | true | 167 | 188 | F | -| f2 | true | 168 | 167 | | -| f2 | true | 173 | 168 | | -| f2 | true | 176 | 173 | | -| f2 | true | 180 | 176 | | -| f2 | true | 184 | 188 | | -| f2 | true | 186 | 184 | | -| f2 | true | 188 | 203 | | -| f2 | true | 191 | 209 | T | -| f2 | true | 191 | 211 | F | -| f2 | true | 192 | 191 | | -| f2 | true | 196 | 192 | | -| f2 | true | 199 | 196 | | -| f2 | true | 203 | 199 | | -| f2 | true | 207 | 211 | | -| f2 | true | 209 | 207 | | -| f2 | true | 211 | 148 | | -| f2 | true | 213 | 153 | | +| f2 | false | 200 | 200 | call to C2 | +| f2 | false | 206 | 206 | 2 | +| f2 | false | 208 | 208 | temporary object | +| f2 | false | 210 | 210 | (const C2)... | +| f2 | false | 212 | 212 | (reference to) | +| f2 | false | 214 | 214 | ; | +| f2 | false | 217 | 217 | { ... } | +| f2 | false | 220 | 220 | if (...) ... | +| f2 | false | 224 | 224 | call to operator== | +| f2 | false | 226 | 226 | call to C2 | +| f2 | false | 232 | 232 | 3 | +| f2 | false | 234 | 234 | temporary object | +| f2 | false | 236 | 236 | (const C2)... | +| f2 | false | 238 | 238 | call to C2 | +| f2 | false | 244 | 244 | 3 | +| f2 | false | 246 | 246 | temporary object | +| f2 | false | 248 | 248 | (const C2)... | +| f2 | false | 250 | 250 | (reference to) | +| f2 | false | 252 | 252 | ; | +| f2 | false | 255 | 255 | { ... } | +| f2 | false | 258 | 258 | return ... | +| f2 | false | 261 | 261 | { ... } | +| f2 | false | 264 | 264 | reuse of temporary object | +| f2 | false | 266 | 266 | call to ~C2 | +| f2 | false | 269 | 269 | reuse of temporary object | +| f2 | false | 271 | 271 | call to ~C2 | +| f2 | false | 273 | 273 | reuse of temporary object | +| f2 | false | 275 | 275 | call to ~C2 | +| f2 | false | 277 | 277 | reuse of temporary object | +| f2 | false | 279 | 279 | call to ~C2 | +| f2 | true | 170 | 206 | | +| f2 | true | 185 | 217 | T | +| f2 | true | 185 | 220 | F | +| f2 | true | 187 | 185 | | +| f2 | true | 194 | 187 | | +| f2 | true | 200 | 194 | | +| f2 | true | 206 | 200 | | +| f2 | true | 214 | 220 | | +| f2 | true | 217 | 214 | | +| f2 | true | 220 | 244 | | +| f2 | true | 224 | 255 | T | +| f2 | true | 224 | 258 | F | +| f2 | true | 226 | 224 | | +| f2 | true | 232 | 226 | | +| f2 | true | 238 | 232 | | +| f2 | true | 244 | 238 | | +| f2 | true | 252 | 258 | | +| f2 | true | 255 | 252 | | +| f2 | true | 258 | 164 | | +| f2 | true | 261 | 170 | | +| f2 | true | 264 | 266 | | +| f2 | true | 269 | 271 | | +| f2 | true | 271 | 264 | | +| f2 | true | 273 | 275 | | +| f2 | true | 277 | 279 | | +| f2 | true | 279 | 273 | | diff --git a/csharp/autobuilder/Semmle.Autobuild.CSharp.Tests/BuildScripts.cs b/csharp/autobuilder/Semmle.Autobuild.CSharp.Tests/BuildScripts.cs index da2e3c36c9b..3288eb5e852 100644 --- a/csharp/autobuilder/Semmle.Autobuild.CSharp.Tests/BuildScripts.cs +++ b/csharp/autobuilder/Semmle.Autobuild.CSharp.Tests/BuildScripts.cs @@ -218,6 +218,8 @@ namespace Semmle.Autobuild.CSharp.Tests public IList Diagnostics { get; } = new List(); public void AddEntry(DiagnosticMessage message) => this.Diagnostics.Add(message); + + public void Dispose() { } } /// @@ -399,10 +401,8 @@ namespace Semmle.Autobuild.CSharp.Tests } private CSharpAutobuilder CreateAutoBuilder(bool isWindows, - string? buildless = null, string? solution = null, string? buildCommand = null, string? ignoreErrors = null, - string? msBuildArguments = null, string? msBuildPlatform = null, string? msBuildConfiguration = null, string? msBuildTarget = null, - string? dotnetArguments = null, string? dotnetVersion = null, string? vsToolsVersion = null, - string? nugetRestore = null, string? allSolutions = null, + string? buildless = null, + string? dotnetVersion = null, string cwd = @"C:\Project") { var codeqlUpperLanguage = Language.CSharp.UpperCaseName; @@ -412,20 +412,9 @@ namespace Semmle.Autobuild.CSharp.Tests actions.GetEnvironmentVariable[$"CODEQL_EXTRACTOR_{codeqlUpperLanguage}_DIAGNOSTIC_DIR"] = ""; actions.GetEnvironmentVariable["CODEQL_JAVA_HOME"] = @"C:\codeql\tools\java"; actions.GetEnvironmentVariable["CODEQL_PLATFORM"] = isWindows ? "win64" : "linux64"; - actions.GetEnvironmentVariable["LGTM_INDEX_VSTOOLS_VERSION"] = vsToolsVersion; - actions.GetEnvironmentVariable["LGTM_INDEX_MSBUILD_ARGUMENTS"] = msBuildArguments; - actions.GetEnvironmentVariable["LGTM_INDEX_MSBUILD_PLATFORM"] = msBuildPlatform; - actions.GetEnvironmentVariable["LGTM_INDEX_MSBUILD_CONFIGURATION"] = msBuildConfiguration; - actions.GetEnvironmentVariable["LGTM_INDEX_MSBUILD_TARGET"] = msBuildTarget; - actions.GetEnvironmentVariable["LGTM_INDEX_DOTNET_ARGUMENTS"] = dotnetArguments; - actions.GetEnvironmentVariable["LGTM_INDEX_DOTNET_VERSION"] = dotnetVersion; - actions.GetEnvironmentVariable["LGTM_INDEX_BUILD_COMMAND"] = buildCommand; - actions.GetEnvironmentVariable["LGTM_INDEX_SOLUTION"] = solution; - actions.GetEnvironmentVariable["LGTM_INDEX_IGNORE_ERRORS"] = ignoreErrors; - actions.GetEnvironmentVariable["LGTM_INDEX_BUILDLESS"] = buildless; actions.GetEnvironmentVariable["CODEQL_EXTRACTOR_CSHARP_OPTION_BUILDLESS"] = buildless; - actions.GetEnvironmentVariable["LGTM_INDEX_ALL_SOLUTIONS"] = allSolutions; - actions.GetEnvironmentVariable["LGTM_INDEX_NUGET_RESTORE"] = nugetRestore; + if (dotnetVersion is not null) + actions.GetEnvironmentVariable["CODEQL_EXTRACTOR_CSHARP_OPTION_DOTNET_VERSION"] = dotnetVersion; actions.GetEnvironmentVariable["ProgramFiles(x86)"] = isWindows ? @"C:\Program Files (x86)" : null; actions.GetCurrentDirectory = cwd; actions.IsWindows = isWindows; @@ -600,15 +589,6 @@ namespace Semmle.Autobuild.CSharp.Tests TestAutobuilderScript(autobuilder, 0, 1); } - private void SkipVsWhere() - { - actions.FileExists[@"C:\Program Files (x86)\Microsoft Visual Studio\Installer\vswhere.exe"] = false; - actions.FileExists[@"C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat"] = false; - actions.FileExists[@"C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\vcvarsall.bat"] = false; - actions.FileExists[@"C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\vcvarsall.bat"] = false; - actions.FileExists[@"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\vcvarsall.bat"] = false; - } - private void TestAutobuilderScript(CSharpAutobuilder autobuilder, int expectedOutput, int commandsRun) { Assert.Equal(expectedOutput, autobuilder.GetBuildScript().Run(actions, StartCallback, EndCallback)); @@ -628,23 +608,6 @@ namespace Semmle.Autobuild.CSharp.Tests } } - [Fact] - public void TestLinuxBuildCommand() - { - actions.RunProcess["./build.sh --skip-tests"] = 0; - actions.FileExists["csharp.log"] = true; - actions.GetEnvironmentVariable["CODEQL_EXTRACTOR_CSHARP_TRAP_DIR"] = ""; - actions.GetEnvironmentVariable["CODEQL_EXTRACTOR_CSHARP_SOURCE_ARCHIVE_DIR"] = ""; - actions.GetEnvironmentVariable["CODEQL_EXTRACTOR_CSHARP_SCRATCH_DIR"] = "scratch"; - actions.EnumerateFiles[@"C:\Project"] = "foo.cs\ntest.sln"; - actions.EnumerateDirectories[@"C:\Project"] = ""; - - SkipVsWhere(); - - var autobuilder = CreateAutoBuilder(false, buildCommand: "./build.sh --skip-tests"); - TestAutobuilderScript(autobuilder, 0, 1); - } - [Fact] public void TestLinuxBuildSh() { @@ -714,177 +677,6 @@ namespace Semmle.Autobuild.CSharp.Tests TestAutobuilderScript(autobuilder, 0, 1); } - [Fact] - public void TestWindowsBuildBatIgnoreErrors() - { - actions.EnumerateFiles[@"C:\Project"] = "foo.cs\nbuild.bat"; - actions.EnumerateDirectories[@"C:\Project"] = ""; - actions.GetEnvironmentVariable["CODEQL_EXTRACTOR_CSHARP_TRAP_DIR"] = ""; - actions.GetEnvironmentVariable["CODEQL_EXTRACTOR_CSHARP_SOURCE_ARCHIVE_DIR"] = ""; - actions.GetEnvironmentVariable["CODEQL_EXTRACTOR_CSHARP_SCRATCH_DIR"] = "scratch"; - actions.RunProcess[@"cmd.exe /C C:\Project\build.bat"] = 1; - actions.RunProcessWorkingDirectory[@"cmd.exe /C C:\Project\build.bat"] = @"C:\Project"; - actions.RunProcess[@"cmd.exe /C C:\codeql\tools\java\bin\java -jar C:\codeql\csharp\tools\extractor-asp.jar ."] = 0; - actions.RunProcess[@"cmd.exe /C C:\codeql\tools\codeql index --xml --extensions config"] = 0; - actions.FileExists["csharp.log"] = true; - - var autobuilder = CreateAutoBuilder(true, ignoreErrors: "true"); - TestAutobuilderScript(autobuilder, 1, 1); - } - - [Fact] - public void TestWindowsCmdIgnoreErrors() - { - actions.RunProcess["cmd.exe /C ^\"build.cmd^ --skip-tests^\""] = 3; - actions.RunProcess[@"cmd.exe /C C:\codeql\tools\java\bin\java -jar C:\codeql\csharp\tools\extractor-asp.jar ."] = 0; - actions.RunProcess[@"cmd.exe /C C:\codeql\tools\codeql index --xml --extensions config"] = 0; - actions.FileExists["csharp.log"] = true; - SkipVsWhere(); - - actions.GetEnvironmentVariable["CODEQL_EXTRACTOR_CSHARP_TRAP_DIR"] = ""; - actions.GetEnvironmentVariable["CODEQL_EXTRACTOR_CSHARP_SOURCE_ARCHIVE_DIR"] = ""; - actions.GetEnvironmentVariable["CODEQL_EXTRACTOR_CSHARP_SCRATCH_DIR"] = "scratch"; - actions.EnumerateFiles[@"C:\Project"] = "foo.cs\ntest.sln"; - actions.EnumerateDirectories[@"C:\Project"] = ""; - - var autobuilder = CreateAutoBuilder(true, buildCommand: "build.cmd --skip-tests", ignoreErrors: "true"); - TestAutobuilderScript(autobuilder, 3, 1); - } - - [Fact] - public void TestWindowCSharpMsBuild() - { - actions.RunProcess[@"cmd.exe /C C:\Project\.nuget\nuget.exe restore C:\Project\test1.sln -DisableParallelProcessing"] = 0; - actions.RunProcess["cmd.exe /C CALL ^\"C:\\Program^ Files^ ^(x86^)\\Microsoft^ Visual^ Studio^ 12.0\\VC\\vcvarsall.bat^\" && set Platform=&& type NUL && msbuild C:\\Project\\test1.sln /t:Windows /p:Platform=\"x86\" /p:Configuration=\"Debug\" /P:Fu=Bar"] = 0; - actions.RunProcess[@"cmd.exe /C C:\Project\.nuget\nuget.exe restore C:\Project\test2.sln -DisableParallelProcessing"] = 0; - actions.RunProcess["cmd.exe /C CALL ^\"C:\\Program^ Files^ ^(x86^)\\Microsoft^ Visual^ Studio^ 12.0\\VC\\vcvarsall.bat^\" && set Platform=&& type NUL && msbuild C:\\Project\\test2.sln /t:Windows /p:Platform=\"x86\" /p:Configuration=\"Debug\" /P:Fu=Bar"] = 0; - actions.FileExists["csharp.log"] = true; - actions.FileExists[@"C:\Program Files (x86)\Microsoft Visual Studio\Installer\vswhere.exe"] = false; - actions.FileExists[@"C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat"] = false; - actions.FileExists[@"C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\vcvarsall.bat"] = true; - actions.FileExists[@"C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\vcvarsall.bat"] = false; - actions.FileExists[@"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\vcvarsall.bat"] = true; - - actions.GetEnvironmentVariable["CODEQL_EXTRACTOR_CSHARP_TRAP_DIR"] = ""; - actions.GetEnvironmentVariable["CODEQL_EXTRACTOR_CSHARP_SOURCE_ARCHIVE_DIR"] = ""; - actions.GetEnvironmentVariable["CODEQL_EXTRACTOR_CSHARP_SCRATCH_DIR"] = "scratch"; - actions.EnumerateFiles[@"C:\Project"] = "foo.cs\ntest1.cs\ntest2.cs"; - actions.EnumerateFiles[@"C:\Project\.nuget"] = "nuget.exe"; - actions.EnumerateDirectories[@"C:\Project"] = @".nuget"; - actions.EnumerateDirectories[@"C:\Project\.nuget"] = ""; - - var autobuilder = CreateAutoBuilder(true, msBuildArguments: "/P:Fu=Bar", msBuildTarget: "Windows", msBuildPlatform: "x86", msBuildConfiguration: "Debug", - vsToolsVersion: "12", allSolutions: "true"); - var testSolution1 = new TestSolution(@"C:\Project\test1.sln"); - var testSolution2 = new TestSolution(@"C:\Project\test2.sln"); - autobuilder.ProjectsOrSolutionsToBuild.Add(testSolution1); - autobuilder.ProjectsOrSolutionsToBuild.Add(testSolution2); - - TestAutobuilderScript(autobuilder, 0, 4); - } - - [Fact] - public void TestWindowCSharpMsBuildMultipleSolutions() - { - actions.RunProcess[@"cmd.exe /C nuget restore C:\Project\test1.csproj -DisableParallelProcessing"] = 0; - actions.RunProcess["cmd.exe /C CALL ^\"C:\\Program^ Files^ ^(x86^)\\Microsoft^ Visual^ Studio^ 12.0\\VC\\vcvarsall.bat^\" && set Platform=&& type NUL && msbuild C:\\Project\\test1.csproj /t:Windows /p:Platform=\"x86\" /p:Configuration=\"Debug\" /P:Fu=Bar"] = 0; - actions.RunProcess[@"cmd.exe /C nuget restore C:\Project\test2.csproj -DisableParallelProcessing"] = 0; - actions.RunProcess["cmd.exe /C CALL ^\"C:\\Program^ Files^ ^(x86^)\\Microsoft^ Visual^ Studio^ 12.0\\VC\\vcvarsall.bat^\" && set Platform=&& type NUL && msbuild C:\\Project\\test2.csproj /t:Windows /p:Platform=\"x86\" /p:Configuration=\"Debug\" /P:Fu=Bar"] = 0; - actions.FileExists["csharp.log"] = true; - actions.FileExists[@"C:\Project\test1.csproj"] = true; - actions.FileExists[@"C:\Project\test2.csproj"] = true; - actions.FileExists[@"C:\Program Files (x86)\Microsoft Visual Studio\Installer\vswhere.exe"] = false; - actions.FileExists[@"C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat"] = false; - actions.FileExists[@"C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\vcvarsall.bat"] = true; - actions.FileExists[@"C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\vcvarsall.bat"] = false; - actions.FileExists[@"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\vcvarsall.bat"] = true; - - actions.GetEnvironmentVariable["CODEQL_EXTRACTOR_CSHARP_TRAP_DIR"] = ""; - actions.GetEnvironmentVariable["CODEQL_EXTRACTOR_CSHARP_SOURCE_ARCHIVE_DIR"] = ""; - actions.GetEnvironmentVariable["CODEQL_EXTRACTOR_CSHARP_SCRATCH_DIR"] = "scratch"; - actions.EnumerateFiles[@"C:\Project"] = "test1.csproj\ntest2.csproj\ntest1.cs\ntest2.cs"; - actions.EnumerateDirectories[@"C:\Project"] = ""; - - var csproj1 = new XmlDocument(); - csproj1.LoadXml(@" - - - - - "); - actions.LoadXml[@"C:\Project\test1.csproj"] = csproj1; - - var csproj2 = new XmlDocument(); - csproj2.LoadXml(@" - - - - - "); - actions.LoadXml[@"C:\Project\test2.csproj"] = csproj2; - - var autobuilder = CreateAutoBuilder(true, msBuildArguments: "/P:Fu=Bar", msBuildTarget: "Windows", msBuildPlatform: "x86", msBuildConfiguration: "Debug", - vsToolsVersion: "12"); - - TestAutobuilderScript(autobuilder, 0, 4); - } - - [Fact] - public void TestWindowCSharpMsBuildFailed() - { - actions.RunProcess[@"cmd.exe /C nuget restore C:\Project\test1.sln -DisableParallelProcessing"] = 0; - actions.RunProcess["cmd.exe /C CALL ^\"C:\\Program^ Files^ ^(x86^)\\Microsoft^ Visual^ Studio^ 12.0\\VC\\vcvarsall.bat^\" && set Platform=&& type NUL && msbuild C:\\Project\\test1.sln /t:Windows /p:Platform=\"x86\" /p:Configuration=\"Debug\" /P:Fu=Bar"] = 1; - actions.FileExists["csharp.log"] = true; - actions.FileExists[@"C:\Program Files (x86)\Microsoft Visual Studio\Installer\vswhere.exe"] = false; - actions.FileExists[@"C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat"] = false; - actions.FileExists[@"C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\vcvarsall.bat"] = true; - actions.FileExists[@"C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\vcvarsall.bat"] = false; - actions.FileExists[@"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\vcvarsall.bat"] = true; - actions.GetEnvironmentVariable["CODEQL_EXTRACTOR_CSHARP_TRAP_DIR"] = ""; - actions.GetEnvironmentVariable["CODEQL_EXTRACTOR_CSHARP_SOURCE_ARCHIVE_DIR"] = ""; - actions.GetEnvironmentVariable["CODEQL_EXTRACTOR_CSHARP_SCRATCH_DIR"] = "scratch"; - actions.EnumerateFiles[@"C:\Project"] = "foo.cs\ntest1.cs\ntest2.cs"; - actions.EnumerateDirectories[@"C:\Project"] = ""; - - var autobuilder = CreateAutoBuilder(true, msBuildArguments: "/P:Fu=Bar", msBuildTarget: "Windows", msBuildPlatform: "x86", msBuildConfiguration: "Debug", - vsToolsVersion: "12", allSolutions: "true"); - var testSolution1 = new TestSolution(@"C:\Project\test1.sln"); - var testSolution2 = new TestSolution(@"C:\Project\test2.sln"); - autobuilder.ProjectsOrSolutionsToBuild.Add(testSolution1); - autobuilder.ProjectsOrSolutionsToBuild.Add(testSolution2); - - TestAutobuilderScript(autobuilder, 1, 2); - } - - - [Fact] - public void TestSkipNugetMsBuild() - { - actions.RunProcess["cmd.exe /C CALL ^\"C:\\Program^ Files^ ^(x86^)\\Microsoft^ Visual^ Studio^ 12.0\\VC\\vcvarsall.bat^\" && set Platform=&& type NUL && msbuild C:\\Project\\test1.sln /t:Windows /p:Platform=\"x86\" /p:Configuration=\"Debug\" /P:Fu=Bar"] = 0; - actions.RunProcess["cmd.exe /C CALL ^\"C:\\Program^ Files^ ^(x86^)\\Microsoft^ Visual^ Studio^ 12.0\\VC\\vcvarsall.bat^\" && set Platform=&& type NUL && msbuild C:\\Project\\test2.sln /t:Windows /p:Platform=\"x86\" /p:Configuration=\"Debug\" /P:Fu=Bar"] = 0; - actions.FileExists["csharp.log"] = true; - actions.FileExists[@"C:\Program Files (x86)\Microsoft Visual Studio\Installer\vswhere.exe"] = false; - actions.FileExists[@"C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat"] = false; - actions.FileExists[@"C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\vcvarsall.bat"] = true; - actions.FileExists[@"C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\vcvarsall.bat"] = false; - actions.FileExists[@"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\vcvarsall.bat"] = true; - actions.GetEnvironmentVariable["CODEQL_EXTRACTOR_CSHARP_TRAP_DIR"] = ""; - actions.GetEnvironmentVariable["CODEQL_EXTRACTOR_CSHARP_SOURCE_ARCHIVE_DIR"] = ""; - actions.GetEnvironmentVariable["CODEQL_EXTRACTOR_CSHARP_SCRATCH_DIR"] = "scratch"; - actions.EnumerateFiles[@"C:\Project"] = "foo.cs\ntest1.cs\ntest2.cs"; - actions.EnumerateDirectories[@"C:\Project"] = ""; - - var autobuilder = CreateAutoBuilder(true, msBuildArguments: "/P:Fu=Bar", msBuildTarget: "Windows", - msBuildPlatform: "x86", msBuildConfiguration: "Debug", vsToolsVersion: "12", - allSolutions: "true", nugetRestore: "false"); - var testSolution1 = new TestSolution(@"C:\Project\test1.sln"); - var testSolution2 = new TestSolution(@"C:\Project\test2.sln"); - autobuilder.ProjectsOrSolutionsToBuild.Add(testSolution1); - autobuilder.ProjectsOrSolutionsToBuild.Add(testSolution2); - - TestAutobuilderScript(autobuilder, 0, 2); - } - [Fact] public void TestSkipNugetBuildless() { @@ -900,35 +692,6 @@ namespace Semmle.Autobuild.CSharp.Tests TestAutobuilderScript(autobuilder, 0, 1); } - - [Fact] - public void TestSkipNugetDotnet() - { - actions.RunProcess["dotnet --info"] = 0; - actions.RunProcess[@"dotnet clean C:\Project/test.csproj"] = 0; - actions.RunProcess[@"dotnet restore C:\Project/test.csproj"] = 0; - actions.RunProcess[@"dotnet build --no-incremental --no-restore C:\Project/test.csproj"] = 0; - actions.FileExists["csharp.log"] = true; - actions.FileExists[@"C:\Project/test.csproj"] = true; - actions.GetEnvironmentVariable["CODEQL_EXTRACTOR_CSHARP_TRAP_DIR"] = ""; - actions.GetEnvironmentVariable["CODEQL_EXTRACTOR_CSHARP_SOURCE_ARCHIVE_DIR"] = ""; - actions.GetEnvironmentVariable["CODEQL_EXTRACTOR_CSHARP_SCRATCH_DIR"] = "scratch"; - actions.EnumerateFiles[@"C:\Project"] = "foo.cs\ntest.cs\ntest.csproj"; - actions.EnumerateDirectories[@"C:\Project"] = ""; - var xml = new XmlDocument(); - xml.LoadXml(@" - - Exe - netcoreapp2.1 - - -"); - actions.LoadXml[@"C:\Project/test.csproj"] = xml; - - var autobuilder = CreateAutoBuilder(false, dotnetArguments: "--no-restore"); // nugetRestore=false does not work for now. - TestAutobuilderScript(autobuilder, 0, 4); - } - [Fact] public void TestDotnetVersionNotInstalled() { @@ -1053,7 +816,7 @@ namespace Semmle.Autobuild.CSharp.Tests { actions.RunProcess[@"cmd.exe /C nuget restore C:\Project\dirs.proj -DisableParallelProcessing"] = 1; actions.RunProcess[@"cmd.exe /C scratch\.nuget\nuget.exe restore C:\Project\dirs.proj -DisableParallelProcessing"] = 0; - actions.RunProcess["cmd.exe /C CALL ^\"C:\\Program^ Files^ ^(x86^)\\Microsoft^ Visual^ Studio^ 12.0\\VC\\vcvarsall.bat^\" && set Platform=&& type NUL && msbuild C:\\Project\\dirs.proj /t:Windows /p:Platform=\"x86\" /p:Configuration=\"Debug\" /P:Fu=Bar"] = 0; + actions.RunProcess["cmd.exe /C CALL ^\"C:\\Program^ Files^ ^(x86^)\\Microsoft^ Visual^ Studio^ 12.0\\VC\\vcvarsall.bat^\" && set Platform=&& type NUL && msbuild C:\\Project\\dirs.proj /t:rebuild"] = 0; actions.FileExists["csharp.log"] = true; actions.FileExists[@"C:\Project\a\test.csproj"] = true; actions.FileExists[@"C:\Project\dirs.proj"] = true; @@ -1088,8 +851,7 @@ namespace Semmle.Autobuild.CSharp.Tests "); actions.LoadXml[@"C:\Project\dirs.proj"] = dirsproj; - var autobuilder = CreateAutoBuilder(true, msBuildArguments: "/P:Fu=Bar", msBuildTarget: "Windows", msBuildPlatform: "x86", msBuildConfiguration: "Debug", - vsToolsVersion: "12", allSolutions: "true"); + var autobuilder = CreateAutoBuilder(true); TestAutobuilderScript(autobuilder, 0, 3); } diff --git a/csharp/autobuilder/Semmle.Autobuild.CSharp/CSharpAutobuilder.cs b/csharp/autobuilder/Semmle.Autobuild.CSharp/CSharpAutobuilder.cs index aad91541064..1b5e219c072 100644 --- a/csharp/autobuilder/Semmle.Autobuild.CSharp/CSharpAutobuilder.cs +++ b/csharp/autobuilder/Semmle.Autobuild.CSharp/CSharpAutobuilder.cs @@ -25,9 +25,11 @@ namespace Semmle.Autobuild.CSharp /// public CSharpAutobuildOptions(IBuildActions actions) : base(actions) { - Buildless = actions.GetEnvironmentVariable(lgtmPrefix + "BUILDLESS").AsBool("buildless", false) || + Buildless = actions.GetEnvironmentVariable(extractorOptionPrefix + "BUILDLESS").AsBool("buildless", false) || actions.GetEnvironmentVariable(buildModeEnvironmentVariable)?.ToLower() == "none"; + + } } @@ -46,18 +48,11 @@ namespace Semmle.Autobuild.CSharp var attempt = BuildScript.Failure; switch (GetCSharpBuildStrategy()) { - case CSharpBuildStrategy.CustomBuildCommand: - attempt = new BuildCommandRule(DotNetRule.WithDotNet).Analyse(this, false) & CheckExtractorRun(true); - break; case CSharpBuildStrategy.Buildless: // No need to check that the extractor has been executed in buildless mode - attempt = new StandaloneBuildRule().Analyse(this, false); - break; - case CSharpBuildStrategy.MSBuild: - attempt = new MsBuildRule().Analyse(this, false) & CheckExtractorRun(true); - break; - case CSharpBuildStrategy.DotNet: - attempt = new DotNetRule().Analyse(this, false) & CheckExtractorRun(true); + attempt = BuildScript.Bind( + AddBuildlessStartedDiagnostic() & new StandaloneBuildRule().Analyse(this, false), + AddBuildlessEndedDiagnostic); break; case CSharpBuildStrategy.Auto: attempt = @@ -86,6 +81,52 @@ namespace Semmle.Autobuild.CSharp return 1; }); + private BuildScript AddBuildlessStartedDiagnostic() + { + return BuildScript.Create(actions => + { + AddDiagnostic(new DiagnosticMessage( + Options.Language, + "buildless/mode-active", + "C# with build-mode set to 'none'", + visibility: new DiagnosticMessage.TspVisibility(statusPage: true, cliSummaryTable: true, telemetry: true), + markdownMessage: "C# with build-mode set to 'none'. This means that all C# source in the working directory will be scanned, with build tools, such as Nuget and Dotnet CLIs, only contributing information about external dependencies.", + severity: DiagnosticMessage.TspSeverity.Note + )); + return 0; + }); + } + + private BuildScript AddBuildlessEndedDiagnostic(int buildResult) + { + return BuildScript.Create(actions => + { + if (buildResult == 0) + { + AddDiagnostic(new DiagnosticMessage( + Options.Language, + "buildless/complete", + "C# analysis with build-mode 'none' completed", + visibility: new DiagnosticMessage.TspVisibility(statusPage: false, cliSummaryTable: true, telemetry: true), + markdownMessage: "C# analysis with build-mode 'none' completed.", + severity: DiagnosticMessage.TspSeverity.Unknown + )); + } + else + { + AddDiagnostic(new DiagnosticMessage( + Options.Language, + "buildless/failed", + "C# analysis with build-mode 'none' failed", + visibility: new DiagnosticMessage.TspVisibility(statusPage: true, cliSummaryTable: true, telemetry: true), + markdownMessage: "C# analysis with build-mode 'none' failed.", + severity: DiagnosticMessage.TspSeverity.Error + )); + } + return buildResult; + }); + } + protected override void AutobuildFailureDiagnostic() { // if `ScriptPath` is not null here, the `BuildCommandAuto` rule was @@ -198,32 +239,15 @@ namespace Semmle.Autobuild.CSharp /// private CSharpBuildStrategy GetCSharpBuildStrategy() { - if (Options.BuildCommand is not null) - return CSharpBuildStrategy.CustomBuildCommand; - if (Options.Buildless) return CSharpBuildStrategy.Buildless; - if (Options.MsBuildArguments is not null - || Options.MsBuildConfiguration is not null - || Options.MsBuildPlatform is not null - || Options.MsBuildTarget is not null) - { - return CSharpBuildStrategy.MSBuild; - } - - if (Options.DotNetArguments is not null || Options.DotNetVersion is not null) - return CSharpBuildStrategy.DotNet; - return CSharpBuildStrategy.Auto; } private enum CSharpBuildStrategy { - CustomBuildCommand, Buildless, - MSBuild, - DotNet, Auto } } diff --git a/csharp/autobuilder/Semmle.Autobuild.CSharp/DotNetRule.cs b/csharp/autobuilder/Semmle.Autobuild.CSharp/DotNetRule.cs index cd25055da1a..1db24880be2 100644 --- a/csharp/autobuilder/Semmle.Autobuild.CSharp/DotNetRule.cs +++ b/csharp/autobuilder/Semmle.Autobuild.CSharp/DotNetRule.cs @@ -32,7 +32,7 @@ namespace Semmle.Autobuild.CSharp if (auto) { NotDotNetProjects = builder.ProjectsOrSolutionsToBuild - .SelectMany(p => Enumerators.Singleton(p).Concat(p.IncludedProjects)) + .SelectMany(p => new[] { p }.Concat(p.IncludedProjects)) .OfType>() .Where(p => !p.DotNetProject); var notDotNetProject = NotDotNetProjects.FirstOrDefault(); @@ -150,8 +150,7 @@ namespace Semmle.Autobuild.CSharp Argument("--no-incremental"); return - script.Argument(builder.Options.DotNetArguments). - QuoteArgument(projOrSln). + script.QuoteArgument(projOrSln). Script; } } diff --git a/csharp/autobuilder/Semmle.Autobuild.CSharp/Program.cs b/csharp/autobuilder/Semmle.Autobuild.CSharp/Program.cs index 71289148916..bec0376eac3 100644 --- a/csharp/autobuilder/Semmle.Autobuild.CSharp/Program.cs +++ b/csharp/autobuilder/Semmle.Autobuild.CSharp/Program.cs @@ -17,7 +17,7 @@ namespace Semmle.Autobuild.CSharp try { Console.WriteLine("CodeQL C# autobuilder"); - var builder = new CSharpAutobuilder(actions, options); + using var builder = new CSharpAutobuilder(actions, options); return builder.AttemptBuild(); } catch (InvalidEnvironmentException ex) diff --git a/csharp/autobuilder/Semmle.Autobuild.Shared/AutobuildOptions.cs b/csharp/autobuilder/Semmle.Autobuild.Shared/AutobuildOptions.cs index b7e3293a0f2..6df297eea37 100644 --- a/csharp/autobuilder/Semmle.Autobuild.Shared/AutobuildOptions.cs +++ b/csharp/autobuilder/Semmle.Autobuild.Shared/AutobuildOptions.cs @@ -11,24 +11,9 @@ namespace Semmle.Autobuild.Shared /// public abstract class AutobuildOptionsShared { - protected const string lgtmPrefix = "LGTM_INDEX_"; - - public int SearchDepth { get; } = 3; public string RootDirectory { get; } - public string? VsToolsVersion { get; } - public string? MsBuildArguments { get; } - public string? MsBuildPlatform { get; } - public string? MsBuildConfiguration { get; } - public string? MsBuildTarget { get; } - public string? DotNetArguments { get; } public string? DotNetVersion { get; } - public string? BuildCommand { get; } - public IEnumerable Solution { get; } - public bool IgnoreErrors { get; } - - public bool AllSolutions { get; } - public bool NugetRestore { get; } public abstract Language Language { get; } /// @@ -38,19 +23,7 @@ namespace Semmle.Autobuild.Shared public AutobuildOptionsShared(IBuildActions actions) { RootDirectory = actions.GetCurrentDirectory(); - VsToolsVersion = actions.GetEnvironmentVariable(lgtmPrefix + "VSTOOLS_VERSION"); - MsBuildArguments = actions.GetEnvironmentVariable(lgtmPrefix + "MSBUILD_ARGUMENTS")?.AsStringWithExpandedEnvVars(actions); - MsBuildPlatform = actions.GetEnvironmentVariable(lgtmPrefix + "MSBUILD_PLATFORM"); - MsBuildConfiguration = actions.GetEnvironmentVariable(lgtmPrefix + "MSBUILD_CONFIGURATION"); - MsBuildTarget = actions.GetEnvironmentVariable(lgtmPrefix + "MSBUILD_TARGET"); - DotNetArguments = actions.GetEnvironmentVariable(lgtmPrefix + "DOTNET_ARGUMENTS")?.AsStringWithExpandedEnvVars(actions); - DotNetVersion = actions.GetEnvironmentVariable(lgtmPrefix + "DOTNET_VERSION"); - BuildCommand = actions.GetEnvironmentVariable(lgtmPrefix + "BUILD_COMMAND"); - Solution = actions.GetEnvironmentVariable(lgtmPrefix + "SOLUTION").AsListWithExpandedEnvVars(actions, Array.Empty()); - - IgnoreErrors = actions.GetEnvironmentVariable(lgtmPrefix + "IGNORE_ERRORS").AsBool("ignore_errors", false); - AllSolutions = actions.GetEnvironmentVariable(lgtmPrefix + "ALL_SOLUTIONS").AsBool("all_solutions", false); - NugetRestore = actions.GetEnvironmentVariable(lgtmPrefix + "NUGET_RESTORE").AsBool("nuget_restore", true); + DotNetVersion = actions.GetEnvironmentVariable("CODEQL_EXTRACTOR_CSHARP_OPTION_DOTNET_VERSION"); } } diff --git a/csharp/autobuilder/Semmle.Autobuild.Shared/Autobuilder.cs b/csharp/autobuilder/Semmle.Autobuild.Shared/Autobuilder.cs index a23d29d2979..2414791ad4c 100644 --- a/csharp/autobuilder/Semmle.Autobuild.Shared/Autobuilder.cs +++ b/csharp/autobuilder/Semmle.Autobuild.Shared/Autobuilder.cs @@ -92,7 +92,7 @@ namespace Semmle.Autobuild.Shared /// The overall design is intended to be extensible so that in theory, /// it should be possible to add new build rules without touching this code. /// - public abstract class Autobuilder : IAutobuilder where TAutobuildOptions : AutobuildOptionsShared + public abstract class Autobuilder : IDisposable, IAutobuilder where TAutobuildOptions : AutobuildOptionsShared { /// /// Full file paths of files found in the project directory, as well as @@ -161,9 +161,6 @@ namespace Semmle.Autobuild.Shared if (matchingFiles.Length == 0) return null; - if (Options.AllSolutions) - return matchingFiles.Select(p => p.ProjectOrSolution); - return matchingFiles .Where(f => f.DistanceFromRoot == matchingFiles[0].DistanceFromRoot) .Select(f => f.ProjectOrSolution); @@ -185,19 +182,6 @@ namespace Semmle.Autobuild.Shared projectsOrSolutionsToBuildLazy = new Lazy>(() => { List? ret; - if (options.Solution.Any()) - { - ret = new List(); - foreach (var solution in options.Solution) - { - if (actions.FileExists(solution)) - ret.Add(new Solution(this, solution, true)); - else - logger.LogError($"The specified project or solution file {solution} was not found"); - } - return ret; - } - // First look for `.proj` files ret = FindFiles(".proj", f => new Project(this, f))?.ToList(); if (ret is not null) @@ -285,9 +269,6 @@ namespace Semmle.Autobuild.Shared var script = GetBuildScript(); - if (Options.IgnoreErrors) - script |= BuildScript.Success; - void startCallback(string s, bool silent) { logger.Log(silent ? Severity.Debug : Severity.Info, $"\nRunning {s}"); @@ -370,6 +351,20 @@ namespace Semmle.Autobuild.Shared } }); + public void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } + + protected virtual void Dispose(bool disposing) + { + if (disposing) + { + diagnostics.Dispose(); + } + } + /// /// Value of CODEQL_EXTRACTOR__ROOT environment variable. /// diff --git a/csharp/autobuilder/Semmle.Autobuild.Shared/BuildCommandAutoRule.cs b/csharp/autobuilder/Semmle.Autobuild.Shared/BuildCommandAutoRule.cs index d754b3c3134..e12652767d1 100644 --- a/csharp/autobuilder/Semmle.Autobuild.Shared/BuildCommandAutoRule.cs +++ b/csharp/autobuilder/Semmle.Autobuild.Shared/BuildCommandAutoRule.cs @@ -82,11 +82,6 @@ namespace Semmle.Autobuild.Shared { var command = new CommandBuilder(builder.Actions, dir, environment); - // A specific Visual Studio version may be required - var vsTools = MsBuildRule.GetVcVarsBatFile(builder); - if (vsTools is not null) - command.CallBatFile(vsTools.Path); - command.RunCommand(this.ScriptPath); return command.Script; }); diff --git a/csharp/autobuilder/Semmle.Autobuild.Shared/BuildCommandRule.cs b/csharp/autobuilder/Semmle.Autobuild.Shared/BuildCommandRule.cs deleted file mode 100644 index 9aaefe1a1da..00000000000 --- a/csharp/autobuilder/Semmle.Autobuild.Shared/BuildCommandRule.cs +++ /dev/null @@ -1,37 +0,0 @@ -using Semmle.Util; - -namespace Semmle.Autobuild.Shared -{ - /// - /// Execute the build_command rule. - /// - public class BuildCommandRule : IBuildRule - { - private readonly WithDotNet withDotNet; - - public BuildCommandRule(WithDotNet withDotNet) - { - this.withDotNet = withDotNet; - } - - public BuildScript Analyse(IAutobuilder builder, bool auto) - { - if (builder.Options.BuildCommand is null) - return BuildScript.Failure; - - // Custom build commands may require a specific .NET Core version - return withDotNet(builder, environment => - { - var command = new CommandBuilder(builder.Actions, null, environment); - - // Custom build commands may require a specific Visual Studio version - var vsTools = MsBuildRule.GetVcVarsBatFile(builder); - if (vsTools is not null) - command.CallBatFile(vsTools.Path); - command.RunCommand(builder.Options.BuildCommand); - - return command.Script; - }); - } - } -} diff --git a/csharp/autobuilder/Semmle.Autobuild.Shared/MsBuildRule.cs b/csharp/autobuilder/Semmle.Autobuild.Shared/MsBuildRule.cs index bff10532abf..83a354e2a81 100644 --- a/csharp/autobuilder/Semmle.Autobuild.Shared/MsBuildRule.cs +++ b/csharp/autobuilder/Semmle.Autobuild.Shared/MsBuildRule.cs @@ -42,9 +42,9 @@ namespace Semmle.Autobuild.Shared if (auto) builder.Logger.LogInfo("Attempting to build using MSBuild"); - var vsTools = GetVcVarsBatFile(builder); + VcVarsBatFile? vsTools = null; - if (vsTools is null && builder.ProjectsOrSolutionsToBuild.Any()) + if (builder.ProjectsOrSolutionsToBuild.Any()) { var firstSolution = builder.ProjectsOrSolutionsToBuild.OfType().FirstOrDefault(); vsTools = firstSolution is not null @@ -67,46 +67,44 @@ namespace Semmle.Autobuild.Shared foreach (var projectOrSolution in builder.ProjectsOrSolutionsToBuild) { - if (builder.Options.NugetRestore) + + BuildScript GetNugetRestoreScript() => + new CommandBuilder(builder.Actions). + RunCommand(nuget). + Argument("restore"). + QuoteArgument(projectOrSolution.FullPath). + Argument("-DisableParallelProcessing"). + Script; + var nugetRestore = GetNugetRestoreScript(); + var msbuildRestoreCommand = new CommandBuilder(builder.Actions). + MsBuildCommand(builder). + Argument("/t:restore"). + QuoteArgument(projectOrSolution.FullPath); + + if (builder.Actions.IsRunningOnAppleSilicon()) { - BuildScript GetNugetRestoreScript() => - new CommandBuilder(builder.Actions). - RunCommand(nuget). - Argument("restore"). - QuoteArgument(projectOrSolution.FullPath). - Argument("-DisableParallelProcessing"). - Script; - var nugetRestore = GetNugetRestoreScript(); - var msbuildRestoreCommand = new CommandBuilder(builder.Actions). - MsBuildCommand(builder). - Argument("/t:restore"). - QuoteArgument(projectOrSolution.FullPath); + // On Apple Silicon, only try package restore with `dotnet msbuild /t:restore` + ret &= BuildScript.Try(msbuildRestoreCommand.Script); + } + else if (nugetDownloaded) + { + ret &= BuildScript.Try(nugetRestore | msbuildRestoreCommand.Script); + } + else + { + // If `nuget restore` fails, and we have not already attempted to download `nuget.exe`, + // download it and reattempt `nuget restore`. + var nugetDownloadAndRestore = + BuildScript.Bind(DownloadNugetExe(builder, nugetDownloadPath), exitCode => + { + nugetDownloaded = true; + if (exitCode != 0) + return BuildScript.Failure; - if (builder.Actions.IsRunningOnAppleSilicon()) - { - // On Apple Silicon, only try package restore with `dotnet msbuild /t:restore` - ret &= BuildScript.Try(msbuildRestoreCommand.Script); - } - else if (nugetDownloaded) - { - ret &= BuildScript.Try(nugetRestore | msbuildRestoreCommand.Script); - } - else - { - // If `nuget restore` fails, and we have not already attempted to download `nuget.exe`, - // download it and reattempt `nuget restore`. - var nugetDownloadAndRestore = - BuildScript.Bind(DownloadNugetExe(builder, nugetDownloadPath), exitCode => - { - nugetDownloaded = true; - if (exitCode != 0) - return BuildScript.Failure; - - nuget = nugetDownloadPath; - return GetNugetRestoreScript(); - }); - ret &= BuildScript.Try(nugetRestore | nugetDownloadAndRestore | msbuildRestoreCommand.Script); - } + nuget = nugetDownloadPath; + return GetNugetRestoreScript(); + }); + ret &= BuildScript.Try(nugetRestore | nugetDownloadAndRestore | msbuildRestoreCommand.Script); } var command = new CommandBuilder(builder.Actions); @@ -124,9 +122,9 @@ namespace Semmle.Autobuild.Shared command.MsBuildCommand(builder); command.QuoteArgument(projectOrSolution.FullPath); - var target = builder.Options.MsBuildTarget ?? "rebuild"; - var platform = builder.Options.MsBuildPlatform ?? (projectOrSolution is ISolution s1 ? s1.DefaultPlatformName : null); - var configuration = builder.Options.MsBuildConfiguration ?? (projectOrSolution is ISolution s2 ? s2.DefaultConfigurationName : null); + var target = "rebuild"; + var platform = projectOrSolution is ISolution s1 ? s1.DefaultPlatformName : null; + var configuration = projectOrSolution is ISolution s2 ? s2.DefaultConfigurationName : null; command.Argument("/t:" + target); if (platform is not null) @@ -134,8 +132,6 @@ namespace Semmle.Autobuild.Shared if (configuration is not null) command.Argument(string.Format("/p:Configuration=\"{0}\"", configuration)); - command.Argument(builder.Options.MsBuildArguments); - // append the build script which invokes msbuild to the overall build script `ret`; // we insert a check that building the current project or solution was successful: // if it was not successful, we add it to `FailedProjectsOrSolutions` @@ -148,41 +144,6 @@ namespace Semmle.Autobuild.Shared return ret; } - /// - /// Gets the BAT file used to initialize the appropriate Visual Studio - /// version/platform, as specified by the `vstools_version` property in - /// lgtm.yml. - /// - /// Returns null when no version is specified. - /// - public static VcVarsBatFile? GetVcVarsBatFile(IAutobuilder builder) where TAutobuildOptions : AutobuildOptionsShared - { - VcVarsBatFile? vsTools = null; - - if (builder.Options.VsToolsVersion is not null) - { - if (int.TryParse(builder.Options.VsToolsVersion, out var msToolsVersion)) - { - foreach (var b in BuildTools.VcVarsAllBatFiles(builder.Actions)) - { - builder.Logger.Log(Severity.Info, "Found {0} version {1}", b.Path, b.ToolsVersion); - } - - vsTools = BuildTools.FindCompatibleVcVars(builder.Actions, msToolsVersion); - if (vsTools is null) - builder.Logger.LogWarning("Could not find build tools matching version {0}", msToolsVersion); - else - builder.Logger.Log(Severity.Info, "Setting Visual Studio tools to {0}", vsTools.Path); - } - else - { - builder.Logger.LogError("The format of vstools_version is incorrect. Please specify an integer."); - } - } - - return vsTools; - } - /// /// Returns a script for downloading `nuget.exe` from nuget.org. /// diff --git a/csharp/documentation/library-coverage/coverage.csv b/csharp/documentation/library-coverage/coverage.csv index 6da4acdabe6..fb0bbc0db2d 100644 --- a/csharp/documentation/library-coverage/coverage.csv +++ b/csharp/documentation/library-coverage/coverage.csv @@ -1,44 +1,44 @@ -package,sink,source,summary,sink:code-injection,sink:encryption-decryptor,sink:encryption-encryptor,sink:encryption-keyprop,sink:encryption-symmetrickey,sink:file-content-store,sink:html-injection,sink:js-injection,sink:log-injection,sink:sql-injection,source:commandargs,source:environment,source:file,source:file-write,source:local,source:remote,source:windows-registry,summary:taint,summary:value -Amazon.Lambda.APIGatewayEvents,,6,,,,,,,,,,,,,,,,,6,,, -Amazon.Lambda.Core,10,,,,,,,,,,,10,,,,,,,,,, -Dapper,55,,,,,,,,,,,,55,,,,,,,,, -ILCompiler,,,81,,,,,,,,,,,,,,,,,,81, -ILLink.RoslynAnalyzer,,,63,,,,,,,,,,,,,,,,,,63, -ILLink.Shared,,,32,,,,,,,,,,,,,,,,,,29,3 -ILLink.Tasks,,,5,,,,,,,,,,,,,,,,,,5, -Internal.IL,,,69,,,,,,,,,,,,,,,,,,67,2 -Internal.Pgo,,,9,,,,,,,,,,,,,,,,,,8,1 -Internal.TypeSystem,,,367,,,,,,,,,,,,,,,,,,331,36 -JsonToItemsTaskFactory,,,7,,,,,,,,,,,,,,,,,,7, -Microsoft.Android.Build,,,14,,,,,,,,,,,,,,,,,,14, -Microsoft.Apple.Build,,,7,,,,,,,,,,,,,,,,,,7, -Microsoft.ApplicationBlocks.Data,28,,,,,,,,,,,,28,,,,,,,,, -Microsoft.CSharp,,,24,,,,,,,,,,,,,,,,,,24, -Microsoft.Diagnostics.Tools.Pgo,,,13,,,,,,,,,,,,,,,,,,13, -Microsoft.EntityFrameworkCore,6,,12,,,,,,,,,,6,,,,,,,,,12 -Microsoft.Extensions.Caching.Distributed,,,15,,,,,,,,,,,,,,,,,,15, -Microsoft.Extensions.Caching.Memory,,,38,,,,,,,,,,,,,,,,,,37,1 -Microsoft.Extensions.Configuration,,2,89,,,,,,,,,,,,2,,,,,,86,3 -Microsoft.Extensions.DependencyInjection,,,120,,,,,,,,,,,,,,,,,,120, -Microsoft.Extensions.DependencyModel,,,12,,,,,,,,,,,,,,,,,,12, -Microsoft.Extensions.Diagnostics.Metrics,,,13,,,,,,,,,,,,,,,,,,13, -Microsoft.Extensions.FileProviders,,,15,,,,,,,,,,,,,,,,,,15, -Microsoft.Extensions.FileSystemGlobbing,,,16,,,,,,,,,,,,,,,,,,14,2 -Microsoft.Extensions.Hosting,,,23,,,,,,,,,,,,,,,,,,22,1 -Microsoft.Extensions.Http,,,10,,,,,,,,,,,,,,,,,,10, -Microsoft.Extensions.Logging,,,60,,,,,,,,,,,,,,,,,,59,1 -Microsoft.Extensions.Options,,,8,,,,,,,,,,,,,,,,,,8, -Microsoft.Extensions.Primitives,,,64,,,,,,,,,,,,,,,,,,64, -Microsoft.Interop,,,78,,,,,,,,,,,,,,,,,,78, -Microsoft.NET.Build.Tasks,,,1,,,,,,,,,,,,,,,,,,1, -Microsoft.NET.WebAssembly.Webcil,,,7,,,,,,,,,,,,,,,,,,7, -Microsoft.VisualBasic,,,10,,,,,,,,,,,,,,,,,,5,5 -Microsoft.WebAssembly.Build.Tasks,,,3,,,,,,,,,,,,,,,,,,3, -Microsoft.Win32,,4,4,,,,,,,,,,,,,,,,,4,4, -Mono.Linker,,,163,,,,,,,,,,,,,,,,,,163, -MySql.Data.MySqlClient,48,,,,,,,,,,,,48,,,,,,,,, -Newtonsoft.Json,,,91,,,,,,,,,,,,,,,,,,73,18 -ServiceStack,194,,7,27,,,,,75,,,,92,,,,,,,,7, -SourceGenerators,,,4,,,,,,,,,,,,,,,,,,4, -System,67,30,11864,,8,8,9,,,4,5,,33,2,3,1,17,3,4,,9898,1966 -Windows.Security.Cryptography.Core,1,,,,,,,1,,,,,,,,,,,,,, +package,sink,source,summary,sink:code-injection,sink:encryption-decryptor,sink:encryption-encryptor,sink:encryption-keyprop,sink:encryption-symmetrickey,sink:file-content-store,sink:html-injection,sink:js-injection,sink:log-injection,sink:sql-injection,source:commandargs,source:database,source:environment,source:file,source:file-write,source:local,source:remote,source:windows-registry,summary:taint,summary:value +Amazon.Lambda.APIGatewayEvents,,6,,,,,,,,,,,,,,,,,,6,,, +Amazon.Lambda.Core,10,,,,,,,,,,,10,,,,,,,,,,, +Dapper,55,42,1,,,,,,,,,,55,,42,,,,,,,,1 +ILCompiler,,,81,,,,,,,,,,,,,,,,,,,81, +ILLink.RoslynAnalyzer,,,63,,,,,,,,,,,,,,,,,,,63, +ILLink.Shared,,,32,,,,,,,,,,,,,,,,,,,29,3 +ILLink.Tasks,,,5,,,,,,,,,,,,,,,,,,,5, +Internal.IL,,,69,,,,,,,,,,,,,,,,,,,67,2 +Internal.Pgo,,,9,,,,,,,,,,,,,,,,,,,8,1 +Internal.TypeSystem,,,367,,,,,,,,,,,,,,,,,,,331,36 +JsonToItemsTaskFactory,,,7,,,,,,,,,,,,,,,,,,,7, +Microsoft.Android.Build,,,14,,,,,,,,,,,,,,,,,,,14, +Microsoft.Apple.Build,,,7,,,,,,,,,,,,,,,,,,,7, +Microsoft.ApplicationBlocks.Data,28,,,,,,,,,,,,28,,,,,,,,,, +Microsoft.CSharp,,,24,,,,,,,,,,,,,,,,,,,24, +Microsoft.Diagnostics.Tools.Pgo,,,13,,,,,,,,,,,,,,,,,,,13, +Microsoft.EntityFrameworkCore,6,,12,,,,,,,,,,6,,,,,,,,,,12 +Microsoft.Extensions.Caching.Distributed,,,15,,,,,,,,,,,,,,,,,,,15, +Microsoft.Extensions.Caching.Memory,,,38,,,,,,,,,,,,,,,,,,,37,1 +Microsoft.Extensions.Configuration,,2,89,,,,,,,,,,,,,2,,,,,,86,3 +Microsoft.Extensions.DependencyInjection,,,120,,,,,,,,,,,,,,,,,,,120, +Microsoft.Extensions.DependencyModel,,,12,,,,,,,,,,,,,,,,,,,12, +Microsoft.Extensions.Diagnostics.Metrics,,,13,,,,,,,,,,,,,,,,,,,13, +Microsoft.Extensions.FileProviders,,,15,,,,,,,,,,,,,,,,,,,15, +Microsoft.Extensions.FileSystemGlobbing,,,16,,,,,,,,,,,,,,,,,,,14,2 +Microsoft.Extensions.Hosting,,,23,,,,,,,,,,,,,,,,,,,22,1 +Microsoft.Extensions.Http,,,10,,,,,,,,,,,,,,,,,,,10, +Microsoft.Extensions.Logging,,,60,,,,,,,,,,,,,,,,,,,59,1 +Microsoft.Extensions.Options,,,8,,,,,,,,,,,,,,,,,,,8, +Microsoft.Extensions.Primitives,,,64,,,,,,,,,,,,,,,,,,,64, +Microsoft.Interop,,,78,,,,,,,,,,,,,,,,,,,78, +Microsoft.NET.Build.Tasks,,,1,,,,,,,,,,,,,,,,,,,1, +Microsoft.NET.WebAssembly.Webcil,,,7,,,,,,,,,,,,,,,,,,,7, +Microsoft.VisualBasic,,,10,,,,,,,,,,,,,,,,,,,5,5 +Microsoft.WebAssembly.Build.Tasks,,,3,,,,,,,,,,,,,,,,,,,3, +Microsoft.Win32,,4,4,,,,,,,,,,,,,,,,,,4,4, +Mono.Linker,,,163,,,,,,,,,,,,,,,,,,,163, +MySql.Data.MySqlClient,48,,,,,,,,,,,,48,,,,,,,,,, +Newtonsoft.Json,,,91,,,,,,,,,,,,,,,,,,,73,18 +ServiceStack,194,,7,27,,,,,75,,,,92,,,,,,,,,7, +SourceGenerators,,,4,,,,,,,,,,,,,,,,,,,4, +System,67,44,11872,,8,8,9,,,4,5,,33,2,,3,15,17,3,4,,9906,1966 +Windows.Security.Cryptography.Core,1,,,,,,,1,,,,,,,,,,,,,,, diff --git a/csharp/documentation/library-coverage/coverage.rst b/csharp/documentation/library-coverage/coverage.rst index 0b11da25d91..3b2123f7ec5 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``",30,11864,67,9 - Others,"``Amazon.Lambda.APIGatewayEvents``, ``Amazon.Lambda.Core``, ``Dapper``, ``ILCompiler``, ``ILLink.RoslynAnalyzer``, ``ILLink.Shared``, ``ILLink.Tasks``, ``Internal.IL``, ``Internal.Pgo``, ``Internal.TypeSystem``, ``JsonToItemsTaskFactory``, ``Microsoft.Android.Build``, ``Microsoft.Apple.Build``, ``Microsoft.ApplicationBlocks.Data``, ``Microsoft.CSharp``, ``Microsoft.Diagnostics.Tools.Pgo``, ``Microsoft.EntityFrameworkCore``, ``Microsoft.Extensions.Caching.Distributed``, ``Microsoft.Extensions.Caching.Memory``, ``Microsoft.Extensions.Configuration``, ``Microsoft.Extensions.DependencyInjection``, ``Microsoft.Extensions.DependencyModel``, ``Microsoft.Extensions.Diagnostics.Metrics``, ``Microsoft.Extensions.FileProviders``, ``Microsoft.Extensions.FileSystemGlobbing``, ``Microsoft.Extensions.Hosting``, ``Microsoft.Extensions.Http``, ``Microsoft.Extensions.Logging``, ``Microsoft.Extensions.Options``, ``Microsoft.Extensions.Primitives``, ``Microsoft.Interop``, ``Microsoft.NET.Build.Tasks``, ``Microsoft.NET.WebAssembly.Webcil``, ``Microsoft.VisualBasic``, ``Microsoft.WebAssembly.Build.Tasks``, ``Microsoft.Win32``, ``Mono.Linker``, ``MySql.Data.MySqlClient``, ``Newtonsoft.Json``, ``SourceGenerators``, ``Windows.Security.Cryptography.Core``",12,1547,148, - Totals,,42,13418,409,9 + System,"``System.*``, ``System``",44,11872,67,9 + Others,"``Amazon.Lambda.APIGatewayEvents``, ``Amazon.Lambda.Core``, ``Dapper``, ``ILCompiler``, ``ILLink.RoslynAnalyzer``, ``ILLink.Shared``, ``ILLink.Tasks``, ``Internal.IL``, ``Internal.Pgo``, ``Internal.TypeSystem``, ``JsonToItemsTaskFactory``, ``Microsoft.Android.Build``, ``Microsoft.Apple.Build``, ``Microsoft.ApplicationBlocks.Data``, ``Microsoft.CSharp``, ``Microsoft.Diagnostics.Tools.Pgo``, ``Microsoft.EntityFrameworkCore``, ``Microsoft.Extensions.Caching.Distributed``, ``Microsoft.Extensions.Caching.Memory``, ``Microsoft.Extensions.Configuration``, ``Microsoft.Extensions.DependencyInjection``, ``Microsoft.Extensions.DependencyModel``, ``Microsoft.Extensions.Diagnostics.Metrics``, ``Microsoft.Extensions.FileProviders``, ``Microsoft.Extensions.FileSystemGlobbing``, ``Microsoft.Extensions.Hosting``, ``Microsoft.Extensions.Http``, ``Microsoft.Extensions.Logging``, ``Microsoft.Extensions.Options``, ``Microsoft.Extensions.Primitives``, ``Microsoft.Interop``, ``Microsoft.NET.Build.Tasks``, ``Microsoft.NET.WebAssembly.Webcil``, ``Microsoft.VisualBasic``, ``Microsoft.WebAssembly.Build.Tasks``, ``Microsoft.Win32``, ``Mono.Linker``, ``MySql.Data.MySqlClient``, ``Newtonsoft.Json``, ``SourceGenerators``, ``Windows.Security.Cryptography.Core``",54,1548,148, + Totals,,98,13427,409,9 diff --git a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DependencyManager.Nuget.cs b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DependencyManager.Nuget.cs new file mode 100644 index 00000000000..1f3f44425d5 --- /dev/null +++ b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DependencyManager.Nuget.cs @@ -0,0 +1,514 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Net.Http; +using System.Text.RegularExpressions; +using System.Threading; +using System.Threading.Tasks; +using Semmle.Util; + +namespace Semmle.Extraction.CSharp.DependencyFetching +{ + public sealed partial class DependencyManager + { + private void RestoreNugetPackages(List allNonBinaryFiles, IEnumerable allProjects, IEnumerable allSolutions, HashSet dllPaths) + { + try + { + var checkNugetFeedResponsiveness = EnvironmentVariables.GetBoolean(EnvironmentVariableNames.CheckNugetFeedResponsiveness); + if (checkNugetFeedResponsiveness && !CheckFeeds(allNonBinaryFiles)) + { + DownloadMissingPackages(allNonBinaryFiles, dllPaths, withNugetConfig: false); + return; + } + + using (var nuget = new NugetPackages(sourceDir.FullName, legacyPackageDirectory, logger)) + { + var count = nuget.InstallPackages(); + + if (nuget.PackageCount > 0) + { + CompilationInfos.Add(("packages.config files", nuget.PackageCount.ToString())); + CompilationInfos.Add(("Successfully restored packages.config files", count.ToString())); + } + } + + var nugetPackageDlls = legacyPackageDirectory.DirInfo.GetFiles("*.dll", new EnumerationOptions { RecurseSubdirectories = true }); + var nugetPackageDllPaths = nugetPackageDlls.Select(f => f.FullName).ToHashSet(); + var excludedPaths = nugetPackageDllPaths + .Where(path => IsPathInSubfolder(path, legacyPackageDirectory.DirInfo.FullName, "tools")) + .ToList(); + + if (nugetPackageDllPaths.Count > 0) + { + logger.LogInfo($"Restored {nugetPackageDllPaths.Count} Nuget DLLs."); + } + if (excludedPaths.Count > 0) + { + logger.LogInfo($"Excluding {excludedPaths.Count} Nuget DLLs."); + } + + foreach (var excludedPath in excludedPaths) + { + logger.LogInfo($"Excluded Nuget DLL: {excludedPath}"); + } + + nugetPackageDllPaths.ExceptWith(excludedPaths); + dllPaths.UnionWith(nugetPackageDllPaths); + } + catch (Exception exc) + { + logger.LogError($"Failed to restore Nuget packages with nuget.exe: {exc.Message}"); + } + + var restoredProjects = RestoreSolutions(allSolutions, out var assets1); + var projects = allProjects.Except(restoredProjects); + RestoreProjects(projects, out var assets2); + + var dependencies = Assets.GetCompilationDependencies(logger, assets1.Union(assets2)); + + var paths = dependencies + .Paths + .Select(d => Path.Combine(packageDirectory.DirInfo.FullName, d)) + .ToList(); + dllPaths.UnionWith(paths); + + LogAllUnusedPackages(dependencies); + DownloadMissingPackages(allNonBinaryFiles, dllPaths); + } + + /// + /// Executes `dotnet restore` on all solution files in solutions. + /// As opposed to RestoreProjects this is not run in parallel using PLINQ + /// as `dotnet restore` on a solution already uses multiple threads for restoring + /// the projects (this can be disabled with the `--disable-parallel` flag). + /// Populates assets with the relative paths to the assets files generated by the restore. + /// Returns a list of projects that are up to date with respect to restore. + /// + /// A list of paths to solution files. + private IEnumerable RestoreSolutions(IEnumerable solutions, out IEnumerable assets) + { + var successCount = 0; + var nugetSourceFailures = 0; + var assetFiles = new List(); + var projects = solutions.SelectMany(solution => + { + logger.LogInfo($"Restoring solution {solution}..."); + var res = dotnet.Restore(new(solution, packageDirectory.DirInfo.FullName, ForceDotnetRefAssemblyFetching: true)); + if (res.Success) + { + successCount++; + } + if (res.HasNugetPackageSourceError) + { + nugetSourceFailures++; + } + assetFiles.AddRange(res.AssetsFilePaths); + return res.RestoredProjects; + }).ToList(); + assets = assetFiles; + CompilationInfos.Add(("Successfully restored solution files", successCount.ToString())); + CompilationInfos.Add(("Failed solution restore with package source error", nugetSourceFailures.ToString())); + CompilationInfos.Add(("Restored projects through solution files", projects.Count.ToString())); + return projects; + } + + /// + /// Executes `dotnet restore` on all projects in projects. + /// This is done in parallel for performance reasons. + /// Populates assets with the relative paths to the assets files generated by the restore. + /// + /// A list of paths to project files. + private void RestoreProjects(IEnumerable projects, out IEnumerable assets) + { + var successCount = 0; + var nugetSourceFailures = 0; + var assetFiles = new List(); + var sync = new object(); + Parallel.ForEach(projects, new ParallelOptions { MaxDegreeOfParallelism = threads }, project => + { + logger.LogInfo($"Restoring project {project}..."); + var res = dotnet.Restore(new(project, packageDirectory.DirInfo.FullName, ForceDotnetRefAssemblyFetching: true)); + lock (sync) + { + if (res.Success) + { + successCount++; + } + if (res.HasNugetPackageSourceError) + { + nugetSourceFailures++; + } + assetFiles.AddRange(res.AssetsFilePaths); + } + }); + assets = assetFiles; + CompilationInfos.Add(("Successfully restored project files", successCount.ToString())); + CompilationInfos.Add(("Failed project restore with package source error", nugetSourceFailures.ToString())); + } + + private void DownloadMissingPackages(List allFiles, ISet dllPaths, bool withNugetConfig = true) + { + var alreadyDownloadedPackages = GetRestoredPackageDirectoryNames(packageDirectory.DirInfo); + var alreadyDownloadedLegacyPackages = GetRestoredLegacyPackageNames(); + + var notYetDownloadedPackages = new HashSet(fileContent.AllPackages); + foreach (var alreadyDownloadedPackage in alreadyDownloadedPackages) + { + notYetDownloadedPackages.Remove(new(alreadyDownloadedPackage, PackageReferenceSource.SdkCsProj)); + } + foreach (var alreadyDownloadedLegacyPackage in alreadyDownloadedLegacyPackages) + { + notYetDownloadedPackages.Remove(new(alreadyDownloadedLegacyPackage, PackageReferenceSource.PackagesConfig)); + } + + if (notYetDownloadedPackages.Count == 0) + { + return; + } + + var multipleVersions = notYetDownloadedPackages + .GroupBy(p => p.Name) + .Where(g => g.Count() > 1) + .Select(g => g.Key) + .ToList(); + + foreach (var package in multipleVersions) + { + logger.LogWarning($"Found multiple not yet restored packages with name '{package}'."); + notYetDownloadedPackages.Remove(new(package, PackageReferenceSource.PackagesConfig)); + } + + logger.LogInfo($"Found {notYetDownloadedPackages.Count} packages that are not yet restored"); + var nugetConfig = withNugetConfig + ? GetNugetConfig(allFiles) + : null; + + CompilationInfos.Add(("Fallback nuget restore", notYetDownloadedPackages.Count.ToString())); + + var successCount = 0; + var sync = new object(); + + Parallel.ForEach(notYetDownloadedPackages, new ParallelOptions { MaxDegreeOfParallelism = threads }, package => + { + var success = TryRestorePackageManually(package.Name, nugetConfig, package.PackageReferenceSource); + if (!success) + { + return; + } + + lock (sync) + { + successCount++; + } + }); + + CompilationInfos.Add(("Successfully ran fallback nuget restore", successCount.ToString())); + + dllPaths.Add(missingPackageDirectory.DirInfo.FullName); + } + + private string[] GetAllNugetConfigs(List allFiles) => allFiles.SelectFileNamesByName("nuget.config").ToArray(); + + private string? GetNugetConfig(List allFiles) + { + var nugetConfigs = GetAllNugetConfigs(allFiles); + string? nugetConfig; + if (nugetConfigs.Length > 1) + { + logger.LogInfo($"Found multiple nuget.config files: {string.Join(", ", nugetConfigs)}."); + nugetConfig = allFiles + .SelectRootFiles(sourceDir) + .SelectFileNamesByName("nuget.config") + .FirstOrDefault(); + if (nugetConfig == null) + { + logger.LogInfo("Could not find a top-level nuget.config file."); + } + } + else + { + nugetConfig = nugetConfigs.FirstOrDefault(); + } + + if (nugetConfig != null) + { + logger.LogInfo($"Using nuget.config file {nugetConfig}."); + } + + return nugetConfig; + } + + private void LogAllUnusedPackages(DependencyContainer dependencies) + { + var allPackageDirectories = GetAllPackageDirectories(); + + logger.LogInfo($"Restored {allPackageDirectories.Count} packages"); + logger.LogInfo($"Found {dependencies.Packages.Count} packages in project.assets.json files"); + + allPackageDirectories + .Where(package => !dependencies.Packages.Contains(package)) + .Order() + .ForEach(package => logger.LogInfo($"Unused package: {package}")); + } + + + private ICollection GetAllPackageDirectories() + { + return new DirectoryInfo(packageDirectory.DirInfo.FullName) + .EnumerateDirectories("*", new EnumerationOptions { MatchCasing = MatchCasing.CaseInsensitive, RecurseSubdirectories = false }) + .Select(d => d.Name) + .ToList(); + } + + private static bool IsPathInSubfolder(string path, string rootFolder, string subFolder) + { + return path.IndexOf( + $"{Path.DirectorySeparatorChar}{subFolder}{Path.DirectorySeparatorChar}", + rootFolder.Length, + StringComparison.InvariantCultureIgnoreCase) >= 0; + } + + private IEnumerable GetRestoredLegacyPackageNames() + { + var oldPackageDirectories = GetRestoredPackageDirectoryNames(legacyPackageDirectory.DirInfo); + foreach (var oldPackageDirectory in oldPackageDirectories) + { + // nuget install restores packages to 'packagename.version' folders (dotnet restore to 'packagename/version' folders) + // typical folder names look like: + // newtonsoft.json.13.0.3 + // there are more complex ones too, such as: + // runtime.tizen.4.0.0-armel.Microsoft.NETCore.DotNetHostResolver.2.0.0-preview2-25407-01 + + var match = LegacyNugetPackage().Match(oldPackageDirectory); + if (!match.Success) + { + logger.LogWarning($"Package directory '{oldPackageDirectory}' doesn't match the expected pattern."); + continue; + } + + yield return match.Groups[1].Value.ToLowerInvariant(); + } + } + + private static IEnumerable GetRestoredPackageDirectoryNames(DirectoryInfo root) + { + return Directory.GetDirectories(root.FullName) + .Select(d => Path.GetFileName(d).ToLowerInvariant()); + } + + private bool TryRestorePackageManually(string package, string? nugetConfig, PackageReferenceSource packageReferenceSource = PackageReferenceSource.SdkCsProj) + { + logger.LogInfo($"Restoring package {package}..."); + using var tempDir = new TemporaryDirectory(ComputeTempDirectory(package, "missingpackages_workingdir")); + var success = dotnet.New(tempDir.DirInfo.FullName); + if (!success) + { + return false; + } + + if (packageReferenceSource == PackageReferenceSource.PackagesConfig) + { + TryChangeTargetFrameworkMoniker(tempDir.DirInfo); + } + + success = dotnet.AddPackage(tempDir.DirInfo.FullName, package); + if (!success) + { + return false; + } + + var res = dotnet.Restore(new(tempDir.DirInfo.FullName, missingPackageDirectory.DirInfo.FullName, ForceDotnetRefAssemblyFetching: false, PathToNugetConfig: nugetConfig)); + if (!res.Success) + { + if (res.HasNugetPackageSourceError && nugetConfig is not null) + { + // Restore could not be completed because the listed source is unavailable. Try without the nuget.config: + res = dotnet.Restore(new(tempDir.DirInfo.FullName, missingPackageDirectory.DirInfo.FullName, ForceDotnetRefAssemblyFetching: false, PathToNugetConfig: null, ForceReevaluation: true)); + } + + // TODO: the restore might fail, we could retry with + // - a prerelease (*-* instead of *) version of the package, + // - a different target framework moniker. + + if (!res.Success) + { + logger.LogInfo($"Failed to restore nuget package {package}"); + return false; + } + } + + return true; + } + + private void TryChangeTargetFrameworkMoniker(DirectoryInfo tempDir) + { + try + { + logger.LogInfo($"Changing the target framework moniker in {tempDir.FullName}..."); + + var csprojs = tempDir.GetFiles("*.csproj", new EnumerationOptions { RecurseSubdirectories = false, MatchCasing = MatchCasing.CaseInsensitive }); + if (csprojs.Length != 1) + { + logger.LogError($"Could not find the .csproj file in {tempDir.FullName}, count = {csprojs.Length}"); + return; + } + + var csproj = csprojs[0]; + var content = File.ReadAllText(csproj.FullName); + var matches = TargetFramework().Matches(content); + if (matches.Count == 0) + { + logger.LogError($"Could not find target framework in {csproj.FullName}"); + } + else + { + content = TargetFramework().Replace(content, $"{FrameworkPackageNames.LatestNetFrameworkMoniker}", 1); + File.WriteAllText(csproj.FullName, content); + } + } + catch (Exception exc) + { + logger.LogError($"Failed to update target framework in {tempDir.FullName}: {exc}"); + } + } + + private static async Task ExecuteGetRequest(string address, HttpClient httpClient, CancellationToken cancellationToken) + { + using var stream = await httpClient.GetStreamAsync(address, cancellationToken); + var buffer = new byte[1024]; + int bytesRead; + while ((bytesRead = stream.Read(buffer, 0, buffer.Length)) > 0) + { + // do nothing + } + } + + private bool IsFeedReachable(string feed) + { + logger.LogInfo($"Checking if Nuget feed '{feed}' is reachable..."); + using HttpClient client = new(); + int timeoutMilliSeconds = int.TryParse(Environment.GetEnvironmentVariable(EnvironmentVariableNames.NugetFeedResponsivenessInitialTimeout), out timeoutMilliSeconds) + ? timeoutMilliSeconds + : 1000; + int tryCount = int.TryParse(Environment.GetEnvironmentVariable(EnvironmentVariableNames.NugetFeedResponsivenessRequestCount), out tryCount) + ? tryCount + : 4; + + for (var i = 0; i < tryCount; i++) + { + using var cts = new CancellationTokenSource(); + cts.CancelAfter(timeoutMilliSeconds); + try + { + ExecuteGetRequest(feed, client, cts.Token).GetAwaiter().GetResult(); + return true; + } + catch (Exception exc) + { + if (exc is TaskCanceledException tce && + tce.CancellationToken == cts.Token && + cts.Token.IsCancellationRequested) + { + logger.LogWarning($"Didn't receive answer from Nuget feed '{feed}' in {timeoutMilliSeconds}ms."); + timeoutMilliSeconds *= 2; + continue; + } + + // We're only interested in timeouts. + logger.LogWarning($"Querying Nuget feed '{feed}' failed: {exc}"); + return true; + } + } + + logger.LogWarning($"Didn't receive answer from Nuget feed '{feed}'. Tried it {tryCount} times."); + return false; + } + + private bool CheckFeeds(List allFiles) + { + logger.LogInfo("Checking Nuget feeds..."); + var feeds = GetAllFeeds(allFiles); + + var excludedFeeds = Environment.GetEnvironmentVariable(EnvironmentVariableNames.ExcludedNugetFeedsFromResponsivenessCheck) + ?.Split(" ", StringSplitOptions.RemoveEmptyEntries) + .ToHashSet() ?? []; + + if (excludedFeeds.Count > 0) + { + logger.LogInfo($"Excluded Nuget feeds from responsiveness check: {string.Join(", ", excludedFeeds.OrderBy(f => f))}"); + } + + var allFeedsReachable = feeds.All(feed => excludedFeeds.Contains(feed) || IsFeedReachable(feed)); + if (!allFeedsReachable) + { + logger.LogWarning("Found unreachable Nuget feed in C# analysis with build-mode 'none'. This may cause missing dependencies in the analysis."); + diagnosticsWriter.AddEntry(new DiagnosticMessage( + Language.CSharp, + "buildless/unreachable-feed", + "Found unreachable Nuget feed in C# analysis with build-mode 'none'", + visibility: new DiagnosticMessage.TspVisibility(statusPage: true, cliSummaryTable: true, telemetry: true), + markdownMessage: "Found unreachable Nuget feed in C# analysis with build-mode 'none'. This may cause missing dependencies in the analysis.", + severity: DiagnosticMessage.TspSeverity.Warning + )); + } + CompilationInfos.Add(("All Nuget feeds reachable", allFeedsReachable ? "1" : "0")); + return allFeedsReachable; + } + + private IEnumerable GetFeeds(string nugetConfig) + { + logger.LogInfo($"Getting Nuget feeds from '{nugetConfig}'..."); + var results = dotnet.GetNugetFeeds(nugetConfig); + var regex = EnabledNugetFeed(); + foreach (var result in results) + { + var match = regex.Match(result); + if (!match.Success) + { + logger.LogError($"Failed to parse feed from '{result}'"); + continue; + } + + var url = match.Groups[1].Value; + if (!url.StartsWith("https://", StringComparison.InvariantCultureIgnoreCase) && + !url.StartsWith("http://", StringComparison.InvariantCultureIgnoreCase)) + { + logger.LogInfo($"Skipping feed '{url}' as it is not a valid URL."); + continue; + } + + yield return url; + } + } + + private HashSet GetAllFeeds(List allFiles) + { + var nugetConfigs = GetAllNugetConfigs(allFiles); + var feeds = nugetConfigs + .SelectMany(GetFeeds) + .Where(str => !string.IsNullOrWhiteSpace(str)) + .ToHashSet(); + + if (feeds.Count > 0) + { + logger.LogInfo($"Found {feeds.Count} Nuget feeds in nuget.config files: {string.Join(", ", feeds.OrderBy(f => f))}"); + } + else + { + logger.LogDebug("No Nuget feeds found in nuget.config files."); + } + return feeds; + } + + [GeneratedRegex(@".*", RegexOptions.IgnoreCase | RegexOptions.Compiled | RegexOptions.Singleline)] + private static partial Regex TargetFramework(); + + [GeneratedRegex(@"^(.+)\.(\d+\.\d+\.\d+(-(.+))?)$", RegexOptions.IgnoreCase | RegexOptions.Compiled | RegexOptions.Singleline)] + private static partial Regex LegacyNugetPackage(); + + [GeneratedRegex(@"^E\s(.*)$", RegexOptions.IgnoreCase | RegexOptions.Compiled | RegexOptions.Singleline)] + private static partial Regex EnabledNugetFeed(); + } +} diff --git a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DependencyManager.cs b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DependencyManager.cs index c4c901a3cc4..8d63d7f42b2 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DependencyManager.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DependencyManager.cs @@ -20,6 +20,7 @@ namespace Semmle.Extraction.CSharp.DependencyFetching { private readonly AssemblyCache assemblyCache; private readonly ILogger logger; + private readonly IDiagnosticsWriter diagnosticsWriter; // Only used as a set, but ConcurrentDictionary is the only concurrent set in .NET. private readonly IDictionary usedReferences = new ConcurrentDictionary(); @@ -52,6 +53,25 @@ namespace Semmle.Extraction.CSharp.DependencyFetching var startTime = DateTime.Now; this.logger = logger; + + var diagDirEnv = Environment.GetEnvironmentVariable(EnvironmentVariableNames.DiagnosticDir); + if (!string.IsNullOrWhiteSpace(diagDirEnv) && + !Directory.Exists(diagDirEnv)) + { + try + { + Directory.CreateDirectory(diagDirEnv); + } + catch (Exception e) + { + logger.LogError($"Failed to create diagnostic directory {diagDirEnv}: {e.Message}"); + diagDirEnv = null; + } + } + + this.diagnosticsWriter = new DiagnosticsStream(Path.Combine( + diagDirEnv ?? "", + $"dependency-manager-{DateTime.UtcNow:yyyyMMddHHmm}-{Environment.ProcessId}.jsonc")); this.sourceDir = new DirectoryInfo(srcDir); packageDirectory = new TemporaryDirectory(ComputeTempDirectory(sourceDir.FullName, "packages")); @@ -177,8 +197,7 @@ namespace Semmle.Extraction.CSharp.DependencyFetching var frameworkLocations = new HashSet(); var frameworkReferences = Environment.GetEnvironmentVariable(EnvironmentVariableNames.DotnetFrameworkReferences); - var frameworkReferencesUseSubfolders = Environment.GetEnvironmentVariable(EnvironmentVariableNames.DotnetFrameworkReferencesUseSubfolders); - _ = bool.TryParse(frameworkReferencesUseSubfolders, out var useSubfolders); + var useSubfolders = EnvironmentVariables.GetBoolean(EnvironmentVariableNames.DotnetFrameworkReferencesUseSubfolders); if (!string.IsNullOrWhiteSpace(frameworkReferences)) { RemoveFrameworkNugetPackages(dllPaths); @@ -230,73 +249,6 @@ namespace Semmle.Extraction.CSharp.DependencyFetching return frameworkLocations; } - private void RestoreNugetPackages(List allNonBinaryFiles, IEnumerable allProjects, IEnumerable allSolutions, HashSet dllPaths) - { - try - { - using (var nuget = new NugetPackages(sourceDir.FullName, legacyPackageDirectory, logger)) - { - var count = nuget.InstallPackages(); - - if (nuget.PackageCount > 0) - { - CompilationInfos.Add(("packages.config files", nuget.PackageCount.ToString())); - CompilationInfos.Add(("Successfully restored packages.config files", count.ToString())); - } - } - - var nugetPackageDlls = legacyPackageDirectory.DirInfo.GetFiles("*.dll", new EnumerationOptions { RecurseSubdirectories = true }); - var nugetPackageDllPaths = nugetPackageDlls.Select(f => f.FullName).ToHashSet(); - var excludedPaths = nugetPackageDllPaths - .Where(path => IsPathInSubfolder(path, legacyPackageDirectory.DirInfo.FullName, "tools")) - .ToList(); - - if (nugetPackageDllPaths.Count > 0) - { - logger.LogInfo($"Restored {nugetPackageDllPaths.Count} Nuget DLLs."); - } - if (excludedPaths.Count > 0) - { - logger.LogInfo($"Excluding {excludedPaths.Count} Nuget DLLs."); - } - - foreach (var excludedPath in excludedPaths) - { - logger.LogInfo($"Excluded Nuget DLL: {excludedPath}"); - } - - nugetPackageDllPaths.ExceptWith(excludedPaths); - dllPaths.UnionWith(nugetPackageDllPaths); - } - catch (Exception exc) - { - logger.LogError($"Failed to restore Nuget packages with nuget.exe: {exc.Message}"); - } - - var restoredProjects = RestoreSolutions(allSolutions, out var assets1); - var projects = allProjects.Except(restoredProjects); - RestoreProjects(projects, out var assets2); - - var dependencies = Assets.GetCompilationDependencies(logger, assets1.Union(assets2)); - - var paths = dependencies - .Paths - .Select(d => Path.Combine(packageDirectory.DirInfo.FullName, d)) - .ToList(); - dllPaths.UnionWith(paths); - - LogAllUnusedPackages(dependencies); - DownloadMissingPackages(allNonBinaryFiles, dllPaths); - } - - private static bool IsPathInSubfolder(string path, string rootFolder, string subFolder) - { - return path.IndexOf( - $"{Path.DirectorySeparatorChar}{subFolder}{Path.DirectorySeparatorChar}", - rootFolder.Length, - StringComparison.InvariantCultureIgnoreCase) >= 0; - } - private void RemoveNugetAnalyzerReferences() { var packageFolder = packageDirectory.DirInfo.FullName.ToLowerInvariant(); @@ -483,27 +435,6 @@ namespace Semmle.Extraction.CSharp.DependencyFetching .FullName; } - private ICollection GetAllPackageDirectories() - { - return new DirectoryInfo(packageDirectory.DirInfo.FullName) - .EnumerateDirectories("*", new EnumerationOptions { MatchCasing = MatchCasing.CaseInsensitive, RecurseSubdirectories = false }) - .Select(d => d.Name) - .ToList(); - } - - private void LogAllUnusedPackages(DependencyContainer dependencies) - { - var allPackageDirectories = GetAllPackageDirectories(); - - logger.LogInfo($"Restored {allPackageDirectories.Count} packages"); - logger.LogInfo($"Found {dependencies.Packages.Count} packages in project.assets.json files"); - - allPackageDirectories - .Where(package => !dependencies.Packages.Contains(package)) - .Order() - .ForEach(package => logger.LogInfo($"Unused package: {package}")); - } - private void GenerateSourceFileFromImplicitUsings() { var usings = new HashSet(); @@ -728,6 +659,11 @@ namespace Semmle.Extraction.CSharp.DependencyFetching /// public IEnumerable GeneratedSourceFiles => generatedSources; + /// + /// All of the non-generated source files in the source directory. + /// + public IEnumerable NonGeneratedSourcesFiles => nonGeneratedSources; + /// /// All of the source files in the source directory. /// @@ -802,269 +738,6 @@ namespace Semmle.Extraction.CSharp.DependencyFetching } } - /// - /// Executes `dotnet restore` on all solution files in solutions. - /// As opposed to RestoreProjects this is not run in parallel using PLINQ - /// as `dotnet restore` on a solution already uses multiple threads for restoring - /// the projects (this can be disabled with the `--disable-parallel` flag). - /// Populates assets with the relative paths to the assets files generated by the restore. - /// Returns a list of projects that are up to date with respect to restore. - /// - /// A list of paths to solution files. - private IEnumerable RestoreSolutions(IEnumerable solutions, out IEnumerable assets) - { - var successCount = 0; - var nugetSourceFailures = 0; - var assetFiles = new List(); - var projects = solutions.SelectMany(solution => - { - logger.LogInfo($"Restoring solution {solution}..."); - var res = dotnet.Restore(new(solution, packageDirectory.DirInfo.FullName, ForceDotnetRefAssemblyFetching: true)); - if (res.Success) - { - successCount++; - } - if (res.HasNugetPackageSourceError) - { - nugetSourceFailures++; - } - assetFiles.AddRange(res.AssetsFilePaths); - return res.RestoredProjects; - }).ToList(); - assets = assetFiles; - CompilationInfos.Add(("Successfully restored solution files", successCount.ToString())); - CompilationInfos.Add(("Failed solution restore with package source error", nugetSourceFailures.ToString())); - CompilationInfos.Add(("Restored projects through solution files", projects.Count.ToString())); - return projects; - } - - /// - /// Executes `dotnet restore` on all projects in projects. - /// This is done in parallel for performance reasons. - /// Populates assets with the relative paths to the assets files generated by the restore. - /// - /// A list of paths to project files. - private void RestoreProjects(IEnumerable projects, out IEnumerable assets) - { - var successCount = 0; - var nugetSourceFailures = 0; - var assetFiles = new List(); - var sync = new object(); - Parallel.ForEach(projects, new ParallelOptions { MaxDegreeOfParallelism = threads }, project => - { - logger.LogInfo($"Restoring project {project}..."); - var res = dotnet.Restore(new(project, packageDirectory.DirInfo.FullName, ForceDotnetRefAssemblyFetching: true)); - lock (sync) - { - if (res.Success) - { - successCount++; - } - if (res.HasNugetPackageSourceError) - { - nugetSourceFailures++; - } - assetFiles.AddRange(res.AssetsFilePaths); - } - }); - assets = assetFiles; - CompilationInfos.Add(("Successfully restored project files", successCount.ToString())); - CompilationInfos.Add(("Failed project restore with package source error", nugetSourceFailures.ToString())); - } - - [GeneratedRegex(@"^(.+)\.(\d+\.\d+\.\d+(-(.+))?)$", RegexOptions.IgnoreCase | RegexOptions.Compiled | RegexOptions.Singleline)] - private static partial Regex LegacyNugetPackage(); - - - private static IEnumerable GetRestoredPackageDirectoryNames(DirectoryInfo root) - { - return Directory.GetDirectories(root.FullName) - .Select(d => Path.GetFileName(d).ToLowerInvariant()); - } - - private IEnumerable GetRestoredLegacyPackageNames() - { - var oldPackageDirectories = GetRestoredPackageDirectoryNames(legacyPackageDirectory.DirInfo); - foreach (var oldPackageDirectory in oldPackageDirectories) - { - // nuget install restores packages to 'packagename.version' folders (dotnet restore to 'packagename/version' folders) - // typical folder names look like: - // newtonsoft.json.13.0.3 - // there are more complex ones too, such as: - // runtime.tizen.4.0.0-armel.Microsoft.NETCore.DotNetHostResolver.2.0.0-preview2-25407-01 - - var match = LegacyNugetPackage().Match(oldPackageDirectory); - if (!match.Success) - { - logger.LogWarning($"Package directory '{oldPackageDirectory}' doesn't match the expected pattern."); - continue; - } - - yield return match.Groups[1].Value.ToLowerInvariant(); - } - } - - private void DownloadMissingPackages(List allFiles, ISet dllPaths) - { - var alreadyDownloadedPackages = GetRestoredPackageDirectoryNames(packageDirectory.DirInfo); - var alreadyDownloadedLegacyPackages = GetRestoredLegacyPackageNames(); - - var notYetDownloadedPackages = new HashSet(fileContent.AllPackages); - foreach (var alreadyDownloadedPackage in alreadyDownloadedPackages) - { - notYetDownloadedPackages.Remove(new(alreadyDownloadedPackage, PackageReferenceSource.SdkCsProj)); - } - foreach (var alreadyDownloadedLegacyPackage in alreadyDownloadedLegacyPackages) - { - notYetDownloadedPackages.Remove(new(alreadyDownloadedLegacyPackage, PackageReferenceSource.PackagesConfig)); - } - - if (notYetDownloadedPackages.Count == 0) - { - return; - } - - var multipleVersions = notYetDownloadedPackages - .GroupBy(p => p.Name) - .Where(g => g.Count() > 1) - .Select(g => g.Key) - .ToList(); - - foreach (var package in multipleVersions) - { - logger.LogWarning($"Found multiple not yet restored packages with name '{package}'."); - notYetDownloadedPackages.Remove(new(package, PackageReferenceSource.PackagesConfig)); - } - - logger.LogInfo($"Found {notYetDownloadedPackages.Count} packages that are not yet restored"); - - var nugetConfigs = allFiles.SelectFileNamesByName("nuget.config").ToArray(); - string? nugetConfig = null; - if (nugetConfigs.Length > 1) - { - logger.LogInfo($"Found multiple nuget.config files: {string.Join(", ", nugetConfigs)}."); - nugetConfig = allFiles - .SelectRootFiles(sourceDir) - .SelectFileNamesByName("nuget.config") - .FirstOrDefault(); - if (nugetConfig == null) - { - logger.LogInfo("Could not find a top-level nuget.config file."); - } - } - else - { - nugetConfig = nugetConfigs.FirstOrDefault(); - } - - if (nugetConfig != null) - { - logger.LogInfo($"Using nuget.config file {nugetConfig}."); - } - - CompilationInfos.Add(("Fallback nuget restore", notYetDownloadedPackages.Count.ToString())); - - var successCount = 0; - var sync = new object(); - - Parallel.ForEach(notYetDownloadedPackages, new ParallelOptions { MaxDegreeOfParallelism = threads }, package => - { - var success = TryRestorePackageManually(package.Name, nugetConfig, package.PackageReferenceSource); - if (!success) - { - return; - } - - lock (sync) - { - successCount++; - } - }); - - CompilationInfos.Add(("Successfully ran fallback nuget restore", successCount.ToString())); - - dllPaths.Add(missingPackageDirectory.DirInfo.FullName); - } - - [GeneratedRegex(@".*", RegexOptions.IgnoreCase | RegexOptions.Compiled | RegexOptions.Singleline)] - private static partial Regex TargetFramework(); - - private bool TryRestorePackageManually(string package, string? nugetConfig, PackageReferenceSource packageReferenceSource = PackageReferenceSource.SdkCsProj) - { - logger.LogInfo($"Restoring package {package}..."); - using var tempDir = new TemporaryDirectory(ComputeTempDirectory(package, "missingpackages_workingdir")); - var success = dotnet.New(tempDir.DirInfo.FullName); - if (!success) - { - return false; - } - - if (packageReferenceSource == PackageReferenceSource.PackagesConfig) - { - TryChangeTargetFrameworkMoniker(tempDir.DirInfo); - } - - success = dotnet.AddPackage(tempDir.DirInfo.FullName, package); - if (!success) - { - return false; - } - - var res = dotnet.Restore(new(tempDir.DirInfo.FullName, missingPackageDirectory.DirInfo.FullName, ForceDotnetRefAssemblyFetching: false, PathToNugetConfig: nugetConfig)); - if (!res.Success) - { - if (res.HasNugetPackageSourceError && nugetConfig is not null) - { - // Restore could not be completed because the listed source is unavailable. Try without the nuget.config: - res = dotnet.Restore(new(tempDir.DirInfo.FullName, missingPackageDirectory.DirInfo.FullName, ForceDotnetRefAssemblyFetching: false, PathToNugetConfig: null, ForceReevaluation: true)); - } - - // TODO: the restore might fail, we could retry with - // - a prerelease (*-* instead of *) version of the package, - // - a different target framework moniker. - - if (!res.Success) - { - logger.LogInfo($"Failed to restore nuget package {package}"); - return false; - } - } - - return true; - } - - private void TryChangeTargetFrameworkMoniker(DirectoryInfo tempDir) - { - try - { - logger.LogInfo($"Changing the target framework moniker in {tempDir.FullName}..."); - - var csprojs = tempDir.GetFiles("*.csproj", new EnumerationOptions { RecurseSubdirectories = false, MatchCasing = MatchCasing.CaseInsensitive }); - if (csprojs.Length != 1) - { - logger.LogError($"Could not find the .csproj file in {tempDir.FullName}, count = {csprojs.Length}"); - return; - } - - var csproj = csprojs[0]; - var content = File.ReadAllText(csproj.FullName); - var matches = TargetFramework().Matches(content); - if (matches.Count == 0) - { - logger.LogError($"Could not find target framework in {csproj.FullName}"); - } - else - { - content = TargetFramework().Replace(content, $"{FrameworkPackageNames.LatestNetFrameworkMoniker}", 1); - File.WriteAllText(csproj.FullName, content); - } - } - catch (Exception exc) - { - logger.LogError($"Failed to update target framework in {tempDir.FullName}: {exc}"); - } - } - public void Dispose(TemporaryDirectory? dir, string name) { try @@ -1086,6 +759,8 @@ namespace Semmle.Extraction.CSharp.DependencyFetching { Dispose(tempWorkingDirectory, "temporary working"); } + + diagnosticsWriter?.Dispose(); } } } diff --git a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DotNet.cs b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DotNet.cs index 41a117ed5d8..c57958845f2 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DotNet.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DotNet.cs @@ -16,12 +16,14 @@ namespace Semmle.Extraction.CSharp.DependencyFetching public partial class DotNet : IDotNet { private readonly IDotNetCliInvoker dotnetCliInvoker; + private readonly ILogger logger; private readonly TemporaryDirectory? tempWorkingDirectory; private DotNet(IDotNetCliInvoker dotnetCliInvoker, ILogger logger, TemporaryDirectory? tempWorkingDirectory = null) { this.tempWorkingDirectory = tempWorkingDirectory; this.dotnetCliInvoker = dotnetCliInvoker; + this.logger = logger; Info(); } @@ -89,17 +91,18 @@ namespace Semmle.Extraction.CSharp.DependencyFetching return dotnetCliInvoker.RunCommand(args); } - public IList GetListedRuntimes() => GetListed("--list-runtimes", "runtime"); + public IList GetListedRuntimes() => GetResultList("--list-runtimes"); - public IList GetListedSdks() => GetListed("--list-sdks", "SDK"); + public IList GetListedSdks() => GetResultList("--list-sdks"); - private IList GetListed(string args, string artifact) + private IList GetResultList(string args) { - if (dotnetCliInvoker.RunCommand(args, out var artifacts)) + if (dotnetCliInvoker.RunCommand(args, out var results)) { - return artifacts; + return results; } - return new List(); + logger.LogWarning($"Running 'dotnet {args}' failed."); + return []; } public bool Exec(string execArgs) @@ -108,6 +111,8 @@ namespace Semmle.Extraction.CSharp.DependencyFetching return dotnetCliInvoker.RunCommand(args); } + public IList GetNugetFeeds(string nugetConfig) => GetResultList($"nuget list source --format Short --configfile \"{nugetConfig}\""); + // The version number should be kept in sync with the version .NET version used for building the application. public const string LatestDotNetSdkVersion = "8.0.101"; diff --git a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/EnvironmentVariableNames.cs b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/EnvironmentVariableNames.cs index 65a4664e83e..9141dc0bf74 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/EnvironmentVariableNames.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/EnvironmentVariableNames.cs @@ -16,5 +16,30 @@ namespace Semmle.Extraction.CSharp.DependencyFetching /// Controls whether to use framework dependencies from subfolders. /// public const string DotnetFrameworkReferencesUseSubfolders = "CODEQL_EXTRACTOR_CSHARP_BUILDLESS_DOTNET_FRAMEWORK_REFERENCES_USE_SUBFOLDERS"; + + /// + /// Controls whether to check the responsiveness of NuGet feeds. + /// + public const string CheckNugetFeedResponsiveness = "CODEQL_EXTRACTOR_CSHARP_BUILDLESS_NUGET_FEEDS_CHECK"; + + /// + /// Specifies the NuGet feeds to exclude from the responsiveness check. The value is a space-separated list of feed URLs. + /// + public const string ExcludedNugetFeedsFromResponsivenessCheck = "CODEQL_EXTRACTOR_CSHARP_BUILDLESS_NUGET_FEEDS_CHECK_EXCLUDED"; + + /// + /// Specifies the timeout (as an integer) in milliseconds for the initial check of NuGet feeds responsiveness. The value is then doubled for each subsequent check. + /// + public const string NugetFeedResponsivenessInitialTimeout = "CODEQL_EXTRACTOR_CSHARP_BUILDLESS_NUGET_FEEDS_CHECK_TIMEOUT"; + + /// + /// Specifies how many requests to make to the NuGet feed to check its responsiveness. + /// + public const string NugetFeedResponsivenessRequestCount = "CODEQL_EXTRACTOR_CSHARP_BUILDLESS_NUGET_FEEDS_CHECK_LIMIT"; + + /// + /// Specifies the location of the diagnostic directory. + /// + public const string DiagnosticDir = "CODEQL_EXTRACTOR_CSHARP_DIAGNOSTIC_DIR"; } } diff --git a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/IDotNet.cs b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/IDotNet.cs index d66135c1644..d97fc7d6441 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/IDotNet.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/IDotNet.cs @@ -13,6 +13,7 @@ namespace Semmle.Extraction.CSharp.DependencyFetching IList GetListedRuntimes(); IList GetListedSdks(); bool Exec(string execArgs); + IList GetNugetFeeds(string nugetConfig); } public record class RestoreSettings(string File, string PackageDirectory, bool ForceDotnetRefAssemblyFetching, string? PathToNugetConfig = null, bool ForceReevaluation = false); diff --git a/csharp/extractor/Semmle.Extraction.CSharp.Standalone/Extractor.cs b/csharp/extractor/Semmle.Extraction.CSharp.Standalone/Extractor.cs index d868768e350..d192811751a 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp.Standalone/Extractor.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp.Standalone/Extractor.cs @@ -143,10 +143,10 @@ namespace Semmle.Extraction.CSharp.Standalone stopwatch.Start(); using var logger = new ConsoleLogger(options.Verbosity, logThreadId: true); - logger.Log(Severity.Info, "Extracting C# in buildless mode"); + logger.Log(Severity.Info, "Extracting C# with build-mode set to 'none'"); using var dependencyManager = new DependencyManager(options.SrcDir, logger); - if (!dependencyManager.AllSourceFiles.Any()) + if (!dependencyManager.NonGeneratedSourcesFiles.Any()) { logger.Log(Severity.Error, "No source files found"); return ExitCode.Errors; diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Compilations/Compilation.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Compilations/Compilation.cs index a194323c9a6..0b575df2b69 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Compilations/Compilation.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Compilations/Compilation.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Concurrent; using System.IO; using System.Linq; using Microsoft.CodeAnalysis; @@ -8,6 +9,8 @@ namespace Semmle.Extraction.CSharp.Entities { internal class Compilation : CachedEntity { + internal readonly ConcurrentDictionary messageCounts = new(); + private static (string Cwd, string[] Args) settings; private static int hashCode; @@ -78,10 +81,11 @@ namespace Semmle.Extraction.CSharp.Entities .ForEach((file, index) => trapFile.compilation_referencing_files(this, index, file)); // Diagnostics - Context.Compilation - .GetDiagnostics() - .Select(d => new Diagnostic(Context, d)) - .ForEach((diag, index) => trapFile.diagnostic_for(diag, this, 0, index)); + var diags = Context.Compilation.GetDiagnostics(); + diags.ForEach((diag, index) => new CompilerDiagnostic(Context, diag, this, index)); + + var diagCounts = diags.GroupBy(diag => diag.Id).ToDictionary(group => group.Key, group => group.Count()); + diagCounts.ForEach(pair => trapFile.compilation_info(this, $"Compiler diagnostic count for {pair.Key}", pair.Value.ToString())); } public void PopulatePerformance(PerformanceMetrics p) diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Compilations/CompilerDiagnostic.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Compilations/CompilerDiagnostic.cs new file mode 100644 index 00000000000..c1227f2ffc0 --- /dev/null +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Compilations/CompilerDiagnostic.cs @@ -0,0 +1,43 @@ +using System.IO; +using Semmle.Util; + +namespace Semmle.Extraction.CSharp.Entities +{ + internal class CompilerDiagnostic : FreshEntity + { + private static readonly int limit = EnvironmentVariables.TryGetExtractorNumberOption("COMPILER_DIAGNOSTIC_LIMIT") ?? 1000; + + private readonly Microsoft.CodeAnalysis.Diagnostic diagnostic; + private readonly Compilation compilation; + private readonly int index; + + public CompilerDiagnostic(Context cx, Microsoft.CodeAnalysis.Diagnostic diag, Compilation compilation, int index) : base(cx) + { + diagnostic = diag; + this.compilation = compilation; + this.index = index; + TryPopulate(); + } + + protected override void Populate(TextWriter trapFile) + { + // The below doesn't limit the extractor messages to the exact limit, but it's good enough. + var key = diagnostic.Id; + var messageCount = compilation.messageCounts.AddOrUpdate(key, 1, (_, c) => c + 1); + if (messageCount > limit) + { + if (messageCount == limit + 1) + { + Context.Extractor.Logger.LogWarning($"Stopped logging {key} compiler diagnostics for the current compilation after reaching {limit}"); + } + + return; + } + + trapFile.diagnostics(this, (int)diagnostic.Severity, key, diagnostic.Descriptor.Title.ToString(), + diagnostic.GetMessage(), Context.CreateLocation(diagnostic.Location)); + + trapFile.diagnostic_for(this, compilation, 0, index); + } + } +} diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Compilations/Diagnostic.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Compilations/Diagnostic.cs deleted file mode 100644 index a53ee5797f2..00000000000 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Compilations/Diagnostic.cs +++ /dev/null @@ -1,21 +0,0 @@ -using System.IO; - -namespace Semmle.Extraction.CSharp.Entities -{ - internal class Diagnostic : FreshEntity - { - private readonly Microsoft.CodeAnalysis.Diagnostic diagnostic; - - public Diagnostic(Context cx, Microsoft.CodeAnalysis.Diagnostic diag) : base(cx) - { - diagnostic = diag; - TryPopulate(); - } - - protected override void Populate(TextWriter trapFile) - { - trapFile.diagnostics(this, (int)diagnostic.Severity, diagnostic.Id, diagnostic.Descriptor.Title.ToString(), - diagnostic.GetMessage(), Context.CreateLocation(diagnostic.Location)); - } - } -} diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expression.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expression.cs index 58b01891add..321cdf3ff83 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expression.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expression.cs @@ -100,8 +100,14 @@ namespace Semmle.Extraction.CSharp.Entities /// The child index. /// A type hint. /// The new expression. - public static Expression Create(Context cx, ExpressionSyntax node, IExpressionParentEntity parent, int child) => - CreateFromNode(new ExpressionNodeInfo(cx, node, parent, child)); + public static Expression Create(Context cx, ExpressionSyntax node, IExpressionParentEntity parent, int child, Boolean isCompilerGenerated = false) + { + var info = new ExpressionNodeInfo(cx, node, parent, child) + { + IsCompilerGenerated = isCompilerGenerated + }; + return CreateFromNode(info); + } public static Expression CreateFromNode(ExpressionNodeInfo info) => Expressions.ImplicitCast.Create(info); diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/ArrayCreation.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/ArrayCreation.cs index 5c8aa8a35d3..302bcaded39 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/ArrayCreation.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/ArrayCreation.cs @@ -97,7 +97,7 @@ namespace Semmle.Extraction.CSharp.Entities.Expressions ExprKind.ARRAY_CREATION, parent, childIndex, - true, + isCompilerGenerated: true, null); var arrayCreation = new Expression(info); diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Assignment.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Assignment.cs index 2494003471b..4de5e460e6d 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Assignment.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Assignment.cs @@ -26,10 +26,10 @@ namespace Semmle.Extraction.CSharp.Entities.Expressions if (operatorKind.HasValue) { // Convert assignment such as `a += b` into `a = a + b`. - var simpleAssignExpr = new Expression(new ExpressionInfo(Context, Type, Location, ExprKind.SIMPLE_ASSIGN, this, 2, false, null)); + var simpleAssignExpr = new Expression(new ExpressionInfo(Context, Type, Location, ExprKind.SIMPLE_ASSIGN, this, 2, isCompilerGenerated: true, null)); Create(Context, Syntax.Left, simpleAssignExpr, 1); - var opexpr = new Expression(new ExpressionInfo(Context, Type, Location, operatorKind.Value, simpleAssignExpr, 0, false, null)); - Create(Context, Syntax.Left, opexpr, 0); + var opexpr = new Expression(new ExpressionInfo(Context, Type, Location, operatorKind.Value, simpleAssignExpr, 0, isCompilerGenerated: true, null)); + Create(Context, Syntax.Left, opexpr, 0, isCompilerGenerated: true); Create(Context, Syntax.Right, opexpr, 1); opexpr.OperatorCall(trapFile, Syntax); } diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Cast.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Cast.cs index fee739af532..62e23e3b66d 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Cast.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Cast.cs @@ -41,7 +41,7 @@ namespace Semmle.Extraction.CSharp.Entities.Expressions ExprKind.CAST, parent, childIndex, - true, + isCompilerGenerated: true, ValueAsString(value)); var ret = new Expression(info); diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Collections/Spread.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Collections/Spread.cs index c9fa8d3512a..a27982f7aad 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Collections/Spread.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Collections/Spread.cs @@ -6,7 +6,7 @@ namespace Semmle.Extraction.CSharp.Entities.Expressions internal class Spread : Expression { public Spread(Context cx, SpreadElementSyntax syntax, IExpressionParentEntity parent, int child) : - base(new ExpressionInfo(cx, null, cx.CreateLocation(syntax.GetLocation()), ExprKind.SPREAD_ELEMENT, parent, child, false, null)) + base(new ExpressionInfo(cx, null, cx.CreateLocation(syntax.GetLocation()), ExprKind.SPREAD_ELEMENT, parent, child, isCompilerGenerated: false, null)) { Create(cx, syntax.Expression, this, 0); } diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Default.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Default.cs index fc3b03aaf98..968f2e8f43b 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Default.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Default.cs @@ -24,7 +24,7 @@ namespace Semmle.Extraction.CSharp.Entities.Expressions ExprKind.DEFAULT, parent, childIndex, - true, + isCompilerGenerated: true, value); return new Expression(info); diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Discard.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Discard.cs index fc53cda191b..33d9eb64b04 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Discard.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Discard.cs @@ -11,7 +11,7 @@ namespace Semmle.Extraction.CSharp.Entities.Expressions } private Discard(Context cx, CSharpSyntaxNode syntax, IExpressionParentEntity parent, int child) : - base(new ExpressionInfo(cx, cx.GetType(syntax), cx.CreateLocation(syntax.GetLocation()), ExprKind.DISCARD, parent, child, false, null)) + base(new ExpressionInfo(cx, cx.GetType(syntax), cx.CreateLocation(syntax.GetLocation()), ExprKind.DISCARD, parent, child, isCompilerGenerated: false, null)) { } diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/ElementAccess.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/ElementAccess.cs index 8129743e04a..34ad6bf2533 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/ElementAccess.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/ElementAccess.cs @@ -22,7 +22,7 @@ namespace Semmle.Extraction.CSharp.Entities.Expressions if (Kind == ExprKind.POINTER_INDIRECTION) { var qualifierInfo = new ExpressionNodeInfo(Context, qualifier, this, 0); - var add = new Expression(new ExpressionInfo(Context, qualifierInfo.Type, Location, ExprKind.ADD, this, 0, false, null)); + var add = new Expression(new ExpressionInfo(Context, qualifierInfo.Type, Location, ExprKind.ADD, this, 0, isCompilerGenerated: false, null)); qualifierInfo.SetParent(add, 0); CreateFromNode(qualifierInfo); PopulateArguments(trapFile, argumentList, 1); diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/ImplicitCast.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/ImplicitCast.cs index 57a37d86360..3e886a9c3ac 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/ImplicitCast.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/ImplicitCast.cs @@ -14,13 +14,13 @@ namespace Semmle.Extraction.CSharp.Entities.Expressions } private ImplicitCast(ExpressionNodeInfo info) - : base(new ExpressionInfo(info.Context, info.ConvertedType, info.Location, ExprKind.CAST, info.Parent, info.Child, true, info.ExprValue)) + : base(new ExpressionInfo(info.Context, info.ConvertedType, info.Location, ExprKind.CAST, info.Parent, info.Child, isCompilerGenerated: true, info.ExprValue)) { Expr = Factory.Create(new ExpressionNodeInfo(Context, info.Node, this, 0)); } private ImplicitCast(ExpressionNodeInfo info, IMethodSymbol method) - : base(new ExpressionInfo(info.Context, info.ConvertedType, info.Location, ExprKind.OPERATOR_INVOCATION, info.Parent, info.Child, true, info.ExprValue)) + : base(new ExpressionInfo(info.Context, info.ConvertedType, info.Location, ExprKind.OPERATOR_INVOCATION, info.Parent, info.Child, isCompilerGenerated: true, info.ExprValue)) { Expr = Factory.Create(info.SetParent(this, 0)); @@ -65,7 +65,7 @@ namespace Semmle.Extraction.CSharp.Entities.Expressions kind, parent, childIndex, - true, + isCompilerGenerated: true, v); var method = GetImplicitConversionMethod(type, value); @@ -93,7 +93,7 @@ namespace Semmle.Extraction.CSharp.Entities.Expressions ExprKind.CAST, parent, childIndex, - true, + isCompilerGenerated: true, ValueAsString(value)); return new Expression(info); diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Initializer.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Initializer.cs index d8289e59a28..cdc2e87798e 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Initializer.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Initializer.cs @@ -45,7 +45,7 @@ namespace Semmle.Extraction.CSharp.Entities.Expressions ExprKind.ARRAY_INIT, parent, index, - true, + isCompilerGenerated: true, null); return new Expression(info); @@ -132,7 +132,7 @@ namespace Semmle.Extraction.CSharp.Entities.Expressions var addMethod = Method.Create(Context, collectionInfo.Symbol as IMethodSymbol); var voidType = AnnotatedTypeSymbol.CreateNotAnnotated(Context.Compilation.GetSpecialType(SpecialType.System_Void)); - var invocation = new Expression(new ExpressionInfo(Context, voidType, Context.CreateLocation(i.GetLocation()), ExprKind.METHOD_INVOCATION, this, child++, false, null)); + var invocation = new Expression(new ExpressionInfo(Context, voidType, Context.CreateLocation(i.GetLocation()), ExprKind.METHOD_INVOCATION, this, child++, isCompilerGenerated: true, null)); if (addMethod is not null) trapFile.expr_call(invocation, addMethod); diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/InterpolatedString.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/InterpolatedString.cs index 1a98f967312..2dfe4976391 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/InterpolatedString.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/InterpolatedString.cs @@ -25,7 +25,7 @@ namespace Semmle.Extraction.CSharp.Entities.Expressions case SyntaxKind.InterpolatedStringText: // Create a string literal var interpolatedText = (InterpolatedStringTextSyntax)c; - new Expression(new ExpressionInfo(Context, Type, Context.CreateLocation(c.GetLocation()), ExprKind.UTF16_STRING_LITERAL, this, child++, false, interpolatedText.TextToken.ValueText)); + new Expression(new ExpressionInfo(Context, Type, Context.CreateLocation(c.GetLocation()), ExprKind.UTF16_STRING_LITERAL, this, child++, isCompilerGenerated: false, interpolatedText.TextToken.ValueText)); break; default: throw new InternalError(c, $"Unhandled interpolation kind {c.Kind()}"); diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Lambda.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Lambda.cs index 37ea7465255..cf9c682eb67 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Lambda.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Lambda.cs @@ -63,7 +63,7 @@ namespace Semmle.Extraction.CSharp.Entities.Expressions public static Lambda Create(ExpressionNodeInfo info, ParenthesizedLambdaExpressionSyntax node) => new Lambda(info, node); private Lambda(ExpressionNodeInfo info, SimpleLambdaExpressionSyntax node) - : this(info.SetKind(ExprKind.LAMBDA), node.Body, Enumerators.Singleton(node.Parameter), null) { } + : this(info.SetKind(ExprKind.LAMBDA), node.Body, [node.Parameter], null) { } public static Lambda Create(ExpressionNodeInfo info, SimpleLambdaExpressionSyntax node) => new Lambda(info, node); diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Literal.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Literal.cs index 3a0158ba1ae..72d54abf6c1 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Literal.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Literal.cs @@ -97,7 +97,7 @@ namespace Semmle.Extraction.CSharp.Entities.Expressions kind, parent, childIndex, - true, + isCompilerGenerated: true, ValueAsString(value)); return new Expression(info); @@ -112,7 +112,7 @@ namespace Semmle.Extraction.CSharp.Entities.Expressions ExprKind.NULL_LITERAL, parent, childIndex, - true, + isCompilerGenerated: true, ValueAsString(null)); return new Expression(info); diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/ObjectCreation/AnonymousObjectCreation.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/ObjectCreation/AnonymousObjectCreation.cs index f1974f1a50b..a6f94f53338 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/ObjectCreation/AnonymousObjectCreation.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/ObjectCreation/AnonymousObjectCreation.cs @@ -30,7 +30,7 @@ namespace Semmle.Extraction.CSharp.Entities.Expressions return; } - var objectInitializer = new Expression(new ExpressionInfo(Context, Type, Location, ExprKind.OBJECT_INIT, this, -1, false, null)); + var objectInitializer = new Expression(new ExpressionInfo(Context, Type, Location, ExprKind.OBJECT_INIT, this, -1, isCompilerGenerated: false, null)); foreach (var init in Syntax.Initializers) { @@ -40,11 +40,11 @@ namespace Semmle.Extraction.CSharp.Entities.Expressions var type = property.GetAnnotatedType(); var loc = Context.CreateLocation(init.GetLocation()); - var assignment = new Expression(new ExpressionInfo(Context, type, loc, ExprKind.SIMPLE_ASSIGN, objectInitializer, child++, false, null)); + var assignment = new Expression(new ExpressionInfo(Context, type, loc, ExprKind.SIMPLE_ASSIGN, objectInitializer, child++, isCompilerGenerated: false, null)); Create(Context, init.Expression, assignment, 0); Property.Create(Context, property); - var access = new Expression(new ExpressionInfo(Context, type, loc, ExprKind.PROPERTY_ACCESS, assignment, 1, false, null)); + var access = new Expression(new ExpressionInfo(Context, type, loc, ExprKind.PROPERTY_ACCESS, assignment, 1, isCompilerGenerated: false, null)); trapFile.expr_access(access, propEntity); } } diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/ObjectCreation/DateTimeObjectCreation.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/ObjectCreation/DateTimeObjectCreation.cs index e9f40b1bc67..012a30d81cc 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/ObjectCreation/DateTimeObjectCreation.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/ObjectCreation/DateTimeObjectCreation.cs @@ -59,7 +59,7 @@ namespace Semmle.Extraction.CSharp.Entities.Expressions ExprKind.OBJECT_CREATION, parent, childIndex, - true, + isCompilerGenerated: true, null)); var longTypeSymbol = constructorSymbol.Parameters[0].Type; diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Patterns/BinaryPattern.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Patterns/BinaryPattern.cs index ec5177c8ce6..3eaf9cc55c3 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Patterns/BinaryPattern.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Patterns/BinaryPattern.cs @@ -8,7 +8,7 @@ namespace Semmle.Extraction.CSharp.Entities.Expressions internal class BinaryPattern : Expression { public BinaryPattern(Context cx, BinaryPatternSyntax syntax, IExpressionParentEntity parent, int child) : - base(new ExpressionInfo(cx, null, cx.CreateLocation(syntax.GetLocation()), GetKind(syntax.OperatorToken, syntax), parent, child, false, null)) + base(new ExpressionInfo(cx, null, cx.CreateLocation(syntax.GetLocation()), GetKind(syntax.OperatorToken, syntax), parent, child, isCompilerGenerated: false, null)) { Pattern.Create(cx, syntax.Left, this, 0); Pattern.Create(cx, syntax.Right, this, 1); diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Patterns/ListPattern.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Patterns/ListPattern.cs index 87aeb84bcb4..492e2bcb1ce 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Patterns/ListPattern.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Patterns/ListPattern.cs @@ -7,7 +7,7 @@ namespace Semmle.Extraction.CSharp.Entities.Expressions internal class ListPattern : Expression { internal ListPattern(Context cx, ListPatternSyntax syntax, IExpressionParentEntity parent, int child) : - base(new ExpressionInfo(cx, null, cx.CreateLocation(syntax.GetLocation()), ExprKind.LIST_PATTERN, parent, child, false, null)) + base(new ExpressionInfo(cx, null, cx.CreateLocation(syntax.GetLocation()), ExprKind.LIST_PATTERN, parent, child, isCompilerGenerated: false, null)) { syntax.Patterns.ForEach((p, i) => Pattern.Create(cx, p, this, i)); } diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Patterns/PositionalPattern.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Patterns/PositionalPattern.cs index aaf2737c114..e6a34fd7030 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Patterns/PositionalPattern.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Patterns/PositionalPattern.cs @@ -7,7 +7,7 @@ namespace Semmle.Extraction.CSharp.Entities.Expressions internal class PositionalPattern : Expression { internal PositionalPattern(Context cx, PositionalPatternClauseSyntax posPc, IExpressionParentEntity parent, int child) : - base(new ExpressionInfo(cx, null, cx.CreateLocation(posPc.GetLocation()), ExprKind.POSITIONAL_PATTERN, parent, child, false, null)) + base(new ExpressionInfo(cx, null, cx.CreateLocation(posPc.GetLocation()), ExprKind.POSITIONAL_PATTERN, parent, child, isCompilerGenerated: false, null)) { posPc.Subpatterns.ForEach((p, i) => Pattern.Create(cx, p.Pattern, this, i)); } diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Patterns/PropertyPattern.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Patterns/PropertyPattern.cs index 30a020702e5..a195d9ffb83 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Patterns/PropertyPattern.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Patterns/PropertyPattern.cs @@ -7,7 +7,7 @@ namespace Semmle.Extraction.CSharp.Entities.Expressions internal class PropertyPattern : Expression { internal PropertyPattern(Context cx, PropertyPatternClauseSyntax pp, IExpressionParentEntity parent, int child) : - base(new ExpressionInfo(cx, null, cx.CreateLocation(pp.GetLocation()), ExprKind.PROPERTY_PATTERN, parent, child, false, null)) + base(new ExpressionInfo(cx, null, cx.CreateLocation(pp.GetLocation()), ExprKind.PROPERTY_PATTERN, parent, child, isCompilerGenerated: false, null)) { child = 0; foreach (var sub in pp.Subpatterns) @@ -56,7 +56,7 @@ namespace Semmle.Extraction.CSharp.Entities.Expressions }; private static Expression CreateSyntheticExp(Context cx, Microsoft.CodeAnalysis.Location location, IExpressionParentEntity parent, int child) => - new Expression(new ExpressionInfo(cx, null, cx.CreateLocation(location), ExprKind.PROPERTY_PATTERN, parent, child, false, null)); + new Expression(new ExpressionInfo(cx, null, cx.CreateLocation(location), ExprKind.PROPERTY_PATTERN, parent, child, isCompilerGenerated: false, null)); private static void MakeExpressions(Context cx, IExpressionParentEntity parent, SubpatternSyntax syntax, int child) { diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Patterns/RecursivePattern.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Patterns/RecursivePattern.cs index 010e48070ad..514867770b6 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Patterns/RecursivePattern.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Patterns/RecursivePattern.cs @@ -15,7 +15,7 @@ namespace Semmle.Extraction.CSharp.Entities.Expressions /// The parent pattern/expression. /// The child index of this pattern. public RecursivePattern(Context cx, RecursivePatternSyntax syntax, IExpressionParentEntity parent, int child) : - base(new ExpressionInfo(cx, null, cx.CreateLocation(syntax.GetLocation()), ExprKind.RECURSIVE_PATTERN, parent, child, false, null)) + base(new ExpressionInfo(cx, null, cx.CreateLocation(syntax.GetLocation()), ExprKind.RECURSIVE_PATTERN, parent, child, isCompilerGenerated: false, null)) { // Extract the type access if (syntax.Type is TypeSyntax t) diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Patterns/RelationalPattern.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Patterns/RelationalPattern.cs index 2af3ceef60a..4f6c2eac11f 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Patterns/RelationalPattern.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Patterns/RelationalPattern.cs @@ -8,7 +8,7 @@ namespace Semmle.Extraction.CSharp.Entities.Expressions internal class RelationalPattern : Expression { public RelationalPattern(Context cx, RelationalPatternSyntax syntax, IExpressionParentEntity parent, int child) : - base(new ExpressionInfo(cx, null, cx.CreateLocation(syntax.GetLocation()), GetKind(syntax.OperatorToken), parent, child, false, null)) + base(new ExpressionInfo(cx, null, cx.CreateLocation(syntax.GetLocation()), GetKind(syntax.OperatorToken), parent, child, isCompilerGenerated: false, null)) { Expression.Create(cx, syntax.Expression, this, 0); } diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Patterns/SlicePattern.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Patterns/SlicePattern.cs index d52af4f54f4..69d7cc878be 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Patterns/SlicePattern.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Patterns/SlicePattern.cs @@ -6,7 +6,7 @@ namespace Semmle.Extraction.CSharp.Entities.Expressions internal class SlicePattern : Expression { public SlicePattern(Context cx, SlicePatternSyntax syntax, IExpressionParentEntity parent, int child) : - base(new ExpressionInfo(cx, null, cx.CreateLocation(syntax.GetLocation()), ExprKind.SLICE_PATTERN, parent, child, false, null)) + base(new ExpressionInfo(cx, null, cx.CreateLocation(syntax.GetLocation()), ExprKind.SLICE_PATTERN, parent, child, isCompilerGenerated: false, null)) { if (syntax.Pattern is not null) { diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Patterns/UnaryPattern.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Patterns/UnaryPattern.cs index 1703211fb3d..64663c7a6e1 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Patterns/UnaryPattern.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Patterns/UnaryPattern.cs @@ -6,7 +6,7 @@ namespace Semmle.Extraction.CSharp.Entities.Expressions internal class UnaryPattern : Expression { public UnaryPattern(Context cx, UnaryPatternSyntax syntax, IExpressionParentEntity parent, int child) : - base(new ExpressionInfo(cx, null, cx.CreateLocation(syntax.GetLocation()), ExprKind.NOT_PATTERN, parent, child, false, null)) + base(new ExpressionInfo(cx, null, cx.CreateLocation(syntax.GetLocation()), ExprKind.NOT_PATTERN, parent, child, isCompilerGenerated: false, null)) { Pattern.Create(cx, syntax.Pattern, this, 0); } diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Query.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Query.cs index 02936916bf4..85a1ceda47c 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Query.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Query.cs @@ -23,7 +23,7 @@ namespace Semmle.Extraction.CSharp.Entities.Expressions public QueryCall(Context cx, IMethodSymbol? method, SyntaxNode clause, IExpressionParentEntity parent, int child) : base(new ExpressionInfo(cx, method?.GetAnnotatedReturnType(), cx.CreateLocation(clause.GetLocation()), - ExprKind.METHOD_INVOCATION, parent, child, false, null)) + ExprKind.METHOD_INVOCATION, parent, child, isCompilerGenerated: false, null)) { if (method is not null) cx.TrapWriter.Writer.expr_call(this, Method.Create(cx, method)); @@ -97,7 +97,7 @@ namespace Semmle.Extraction.CSharp.Entities.Expressions Expression.Create(cx, Expr, decl, 0); var nameLoc = cx.CreateLocation(name.GetLocation()); - var access = new Expression(new ExpressionInfo(cx, type, nameLoc, ExprKind.LOCAL_VARIABLE_ACCESS, decl, 1, false, null)); + var access = new Expression(new ExpressionInfo(cx, type, nameLoc, ExprKind.LOCAL_VARIABLE_ACCESS, decl, 1, isCompilerGenerated: false, null)); cx.TrapWriter.Writer.expr_access(access, LocalVariable.Create(cx, variableSymbol)); return decl; diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Switch.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Switch.cs index 2e161f508aa..26b71a6deb4 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Switch.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Switch.cs @@ -27,7 +27,7 @@ namespace Semmle.Extraction.CSharp.Entities.Expressions internal SwitchCase(Context cx, SwitchExpressionArmSyntax arm, Switch parent, int child) : base(new ExpressionInfo( cx, cx.GetType(arm.Expression), cx.CreateLocation(arm.GetLocation()), - ExprKind.SWITCH_CASE, parent, child, false, null)) + ExprKind.SWITCH_CASE, parent, child, isCompilerGenerated: false, null)) { Expressions.Pattern.Create(cx, arm.Pattern, this, 0); if (arm.WhenClause is WhenClauseSyntax when) diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/This.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/This.cs index a13c2cb95bc..33f2ad9fbc7 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/This.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/This.cs @@ -8,7 +8,7 @@ namespace Semmle.Extraction.CSharp.Entities.Expressions private This(IExpressionInfo info) : base(info) { } public static This CreateImplicit(Context cx, ITypeSymbol @class, Extraction.Entities.Location loc, IExpressionParentEntity parent, int child) => - new This(new ExpressionInfo(cx, AnnotatedTypeSymbol.CreateNotAnnotated(@class), loc, Kinds.ExprKind.THIS_ACCESS, parent, child, true, null)); + new This(new ExpressionInfo(cx, AnnotatedTypeSymbol.CreateNotAnnotated(@class), loc, Kinds.ExprKind.THIS_ACCESS, parent, child, isCompilerGenerated: true, null)); public static This CreateExplicit(ExpressionNodeInfo info) => new This(info.SetKind(ExprKind.THIS_ACCESS)); } diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/TypeAccess.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/TypeAccess.cs index b6eaca72844..b4e678d8ab6 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/TypeAccess.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/TypeAccess.cs @@ -44,7 +44,7 @@ namespace Semmle.Extraction.CSharp.Entities.Expressions ExprKind.TYPE_ACCESS, parent, childIndex, - true, + isCompilerGenerated: true, null); return new Expression(typeAccessInfo); diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/TypeOf.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/TypeOf.cs index c499e405ccb..b36c1e425a0 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/TypeOf.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/TypeOf.cs @@ -26,7 +26,7 @@ namespace Semmle.Extraction.CSharp.Entities.Expressions ExprKind.TYPEOF, parent, childIndex, - true, + isCompilerGenerated: true, null); var ret = new Expression(info); diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/VariableDeclaration.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/VariableDeclaration.cs index e77040fd16c..5931feb070c 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/VariableDeclaration.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/VariableDeclaration.cs @@ -15,7 +15,7 @@ namespace Semmle.Extraction.CSharp.Entities.Expressions public static VariableDeclaration Create(Context cx, ISymbol symbol, AnnotatedTypeSymbol? type, TypeSyntax? optionalSyntax, Extraction.Entities.Location exprLocation, bool isVar, IExpressionParentEntity parent, int child) { - var ret = new VariableDeclaration(new ExpressionInfo(cx, type, exprLocation, ExprKind.LOCAL_VAR_DECL, parent, child, false, null)); + var ret = new VariableDeclaration(new ExpressionInfo(cx, type, exprLocation, ExprKind.LOCAL_VAR_DECL, parent, child, isCompilerGenerated: false, null)); cx.Try(null, null, () => { var l = LocalVariable.Create(cx, symbol); @@ -52,7 +52,7 @@ namespace Semmle.Extraction.CSharp.Entities.Expressions public static Expression CreateParenthesized(Context cx, DeclarationExpressionSyntax node, ParenthesizedVariableDesignationSyntax designation, IExpressionParentEntity parent, int child, INamedTypeSymbol? t) { var type = t is null ? (AnnotatedTypeSymbol?)null : new AnnotatedTypeSymbol(t, t.NullableAnnotation); - var tuple = new Expression(new ExpressionInfo(cx, type, cx.CreateLocation(node.GetLocation()), ExprKind.TUPLE, parent, child, false, null)); + var tuple = new Expression(new ExpressionInfo(cx, type, cx.CreateLocation(node.GetLocation()), ExprKind.TUPLE, parent, child, isCompilerGenerated: false, null)); cx.Try(null, null, () => { @@ -68,7 +68,7 @@ namespace Semmle.Extraction.CSharp.Entities.Expressions public static Expression CreateParenthesized(Context cx, VarPatternSyntax varPattern, ParenthesizedVariableDesignationSyntax designation, IExpressionParentEntity parent, int child) { var tuple = new Expression( - new ExpressionInfo(cx, null, cx.CreateLocation(varPattern.GetLocation()), ExprKind.TUPLE, parent, child, false, null), + new ExpressionInfo(cx, null, cx.CreateLocation(varPattern.GetLocation()), ExprKind.TUPLE, parent, child, isCompilerGenerated: false, null), shouldPopulate: false); var elementTypes = new List(); @@ -148,7 +148,7 @@ namespace Semmle.Extraction.CSharp.Entities.Expressions Create(cx, node, node.Designation, parent, child, cx.GetTypeInfo(node).Type.DisambiguateType() as INamedTypeSymbol); public static VariableDeclaration Create(Context cx, CSharpSyntaxNode c, AnnotatedTypeSymbol? type, IExpressionParentEntity parent, int child) => - new VariableDeclaration(new ExpressionInfo(cx, type, cx.CreateLocation(c.FixedLocation()), ExprKind.LOCAL_VAR_DECL, parent, child, false, null)); + new VariableDeclaration(new ExpressionInfo(cx, type, cx.CreateLocation(c.FixedLocation()), ExprKind.LOCAL_VAR_DECL, parent, child, isCompilerGenerated: false, null)); public static VariableDeclaration Create(Context cx, CatchDeclarationSyntax d, bool isVar, IExpressionParentEntity parent, int child) { @@ -179,7 +179,7 @@ namespace Semmle.Extraction.CSharp.Entities.Expressions Create(cx, d.Initializer.Value, ret, 0); // Create an access - var access = new Expression(new ExpressionInfo(cx, type, localVar.Location, ExprKind.LOCAL_VARIABLE_ACCESS, ret, 1, false, null)); + var access = new Expression(new ExpressionInfo(cx, type, localVar.Location, ExprKind.LOCAL_VARIABLE_ACCESS, ret, 1, isCompilerGenerated: false, null)); cx.TrapWriter.Writer.expr_access(access, localVar); } diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Field.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Field.cs index a65b30af5aa..f423f42dd5c 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Field.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Field.cs @@ -110,9 +110,9 @@ namespace Semmle.Extraction.CSharp.Entities string? constValue, ref int child) { var type = Symbol.GetAnnotatedType(); - var simpleAssignExpr = new Expression(new ExpressionInfo(Context, type, loc, ExprKind.SIMPLE_ASSIGN, this, child++, false, constValue)); + var simpleAssignExpr = new Expression(new ExpressionInfo(Context, type, loc, ExprKind.SIMPLE_ASSIGN, this, child++, isCompilerGenerated: true, constValue)); Expression.CreateFromNode(new ExpressionNodeInfo(Context, initializer, simpleAssignExpr, 0)); - var access = new Expression(new ExpressionInfo(Context, type, Location, ExprKind.FIELD_ACCESS, simpleAssignExpr, 1, false, constValue)); + var access = new Expression(new ExpressionInfo(Context, type, Location, ExprKind.FIELD_ACCESS, simpleAssignExpr, 1, isCompilerGenerated: true, constValue)); trapFile.expr_access(access, this); return access; } diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Property.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Property.cs index 08fa4335452..07e74e82164 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Property.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Property.cs @@ -86,9 +86,9 @@ namespace Semmle.Extraction.CSharp.Entities { var loc = Context.CreateLocation(initializer!.GetLocation()); var annotatedType = AnnotatedTypeSymbol.CreateNotAnnotated(Symbol.Type); - var simpleAssignExpr = new Expression(new ExpressionInfo(Context, annotatedType, loc, ExprKind.SIMPLE_ASSIGN, this, child++, false, null)); + var simpleAssignExpr = new Expression(new ExpressionInfo(Context, annotatedType, loc, ExprKind.SIMPLE_ASSIGN, this, child++, isCompilerGenerated: true, null)); Expression.CreateFromNode(new ExpressionNodeInfo(Context, initializer.Value, simpleAssignExpr, 0)); - var access = new Expression(new ExpressionInfo(Context, annotatedType, Location, ExprKind.PROPERTY_ACCESS, simpleAssignExpr, 1, false, null)); + var access = new Expression(new ExpressionInfo(Context, annotatedType, Location, ExprKind.PROPERTY_ACCESS, simpleAssignExpr, 1, isCompilerGenerated: true, null)); trapFile.expr_access(access, this); if (!Symbol.IsStatic) { diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Extractor/Analyser.cs b/csharp/extractor/Semmle.Extraction.CSharp/Extractor/Analyser.cs index 57ce2f7827c..473741f2c66 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Extractor/Analyser.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Extractor/Analyser.cs @@ -189,7 +189,7 @@ namespace Semmle.Extraction.CSharp // compilation.Clone() is used to allow symbols to be garbage collected. using var trapWriter = transformedSourcePath.CreateTrapWriter(Logger, options.TrapCompression, discardDuplicates: false); - upToDate = options.Fast && FileIsUpToDate(sourcePath, trapWriter.TrapFile); + upToDate = FileIsUpToDate(sourcePath, trapWriter.TrapFile); var currentTaskId = IncrementTaskCount(); ReportProgressTaskStarted(currentTaskId, sourcePath); diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Extractor/Options.cs b/csharp/extractor/Semmle.Extraction.CSharp/Extractor/Options.cs index c2d21d6a16a..4fafffe9833 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Extractor/Options.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Extractor/Options.cs @@ -35,15 +35,7 @@ namespace Semmle.Extraction.CSharp public static Options CreateWithEnvironment(string[] arguments) { var options = new Options(); - var extractionOptions = Environment.GetEnvironmentVariable("LGTM_INDEX_EXTRACTOR"); - var argsList = new List(arguments); - - if (!string.IsNullOrEmpty(extractionOptions)) - { - argsList.AddRange(extractionOptions.Split(' ')); - } - options.ParseArguments(argsList); return options; } diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Tuples.cs b/csharp/extractor/Semmle.Extraction.CSharp/Tuples.cs index 71ed85cb201..9d4f913ff9c 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Tuples.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Tuples.cs @@ -122,10 +122,10 @@ namespace Semmle.Extraction.CSharp internal static void destructors(this TextWriter trapFile, Destructor destructor, string name, Type containingType, Destructor original) => trapFile.WriteTuple("destructors", destructor, name, containingType, original); - internal static void diagnostic_for(this TextWriter trapFile, Diagnostic diag, Compilation comp, int fileNo, int index) => + internal static void diagnostic_for(this TextWriter trapFile, CompilerDiagnostic diag, Compilation comp, int fileNo, int index) => trapFile.WriteTuple("diagnostic_for", diag, comp, fileNo, index); - internal static void diagnostics(this TextWriter trapFile, Diagnostic diag, int severity, string errorTag, string errorMessage, string fullErrorMessage, Location location) => + internal static void diagnostics(this TextWriter trapFile, CompilerDiagnostic diag, int severity, string errorTag, string errorMessage, string fullErrorMessage, Location location) => trapFile.WriteTuple("diagnostics", diag, severity, errorTag, errorMessage, fullErrorMessage, location); internal static void dynamic_member_name(this TextWriter trapFile, Expression e, string name) => diff --git a/csharp/extractor/Semmle.Extraction.Tests/Options.cs b/csharp/extractor/Semmle.Extraction.Tests/Options.cs index a20788cd244..8b18f8cb041 100644 --- a/csharp/extractor/Semmle.Extraction.Tests/Options.cs +++ b/csharp/extractor/Semmle.Extraction.Tests/Options.cs @@ -12,11 +12,6 @@ namespace Semmle.Extraction.Tests private CSharp.Options? options; private CSharp.Standalone.Options? standaloneOptions; - public OptionsTests() - { - Environment.SetEnvironmentVariable("LGTM_INDEX_EXTRACTOR", ""); - } - [Fact] public void DefaultOptions() { @@ -28,7 +23,6 @@ namespace Semmle.Extraction.Tests Assert.True(options.Threads >= 1); Assert.Equal(Verbosity.Info, options.LegacyVerbosity); Assert.False(options.Console); - Assert.False(options.Fast); Assert.Equal(TrapWriter.CompressionMode.Brotli, options.TrapCompression); } @@ -165,14 +159,6 @@ namespace Semmle.Extraction.Tests Assert.True(standaloneOptions.Help); } - [Fact] - public void Fast() - { - Environment.SetEnvironmentVariable("LGTM_INDEX_EXTRACTOR", "--fast"); - options = CSharp.Options.CreateWithEnvironment(Array.Empty()); - Assert.True(options.Fast); - } - [Fact] public void ArchiveArguments() { diff --git a/csharp/extractor/Semmle.Extraction.Tests/Runtime.cs b/csharp/extractor/Semmle.Extraction.Tests/Runtime.cs index 17bc477bde8..2daf8244d97 100644 --- a/csharp/extractor/Semmle.Extraction.Tests/Runtime.cs +++ b/csharp/extractor/Semmle.Extraction.Tests/Runtime.cs @@ -26,6 +26,8 @@ namespace Semmle.Extraction.Tests public IList GetListedSdks() => sdks; public bool Exec(string execArgs) => true; + + public IList GetNugetFeeds(string nugetConfig) => []; } public class RuntimeTests diff --git a/csharp/extractor/Semmle.Extraction/Context.cs b/csharp/extractor/Semmle.Extraction/Context.cs index a6442758daf..6697bfb06fd 100644 --- a/csharp/extractor/Semmle.Extraction/Context.cs +++ b/csharp/extractor/Semmle.Extraction/Context.cs @@ -274,28 +274,36 @@ namespace Semmle.Extraction bool duplicationGuard, deferred; - switch (entity.TrapStackBehaviour) + if (Extractor.Mode is ExtractorMode.Standalone) { - case TrapStackBehaviour.NeedsLabel: - if (!tagStack.Any()) - ExtractionError("TagStack unexpectedly empty", optionalSymbol, entity); - duplicationGuard = false; - deferred = false; - break; - case TrapStackBehaviour.NoLabel: - duplicationGuard = false; - deferred = tagStack.Any(); - break; - case TrapStackBehaviour.OptionalLabel: - duplicationGuard = false; - deferred = false; - break; - case TrapStackBehaviour.PushesLabel: - duplicationGuard = true; - deferred = duplicationGuard && tagStack.Any(); - break; - default: - throw new InternalError("Unexpected TrapStackBehaviour"); + duplicationGuard = false; + deferred = false; + } + else + { + switch (entity.TrapStackBehaviour) + { + case TrapStackBehaviour.NeedsLabel: + if (!tagStack.Any()) + ExtractionError("TagStack unexpectedly empty", optionalSymbol, entity); + duplicationGuard = false; + deferred = false; + break; + case TrapStackBehaviour.NoLabel: + duplicationGuard = false; + deferred = tagStack.Any(); + break; + case TrapStackBehaviour.OptionalLabel: + duplicationGuard = false; + deferred = false; + break; + case TrapStackBehaviour.PushesLabel: + duplicationGuard = true; + deferred = duplicationGuard && tagStack.Any(); + break; + default: + throw new InternalError("Unexpected TrapStackBehaviour"); + } } var a = duplicationGuard && IsEntityDuplicationGuarded(entity, out var loc) diff --git a/csharp/extractor/Semmle.Extraction/Entities/ExtractionError.cs b/csharp/extractor/Semmle.Extraction/Entities/ExtractionError.cs deleted file mode 100644 index 99f17537790..00000000000 --- a/csharp/extractor/Semmle.Extraction/Entities/ExtractionError.cs +++ /dev/null @@ -1,21 +0,0 @@ -using System.IO; - -namespace Semmle.Extraction.Entities -{ - internal class ExtractionMessage : FreshEntity - { - private readonly Message msg; - - public ExtractionMessage(Context cx, Message msg) : base(cx) - { - this.msg = msg; - TryPopulate(); - } - - protected override void Populate(TextWriter trapFile) - { - trapFile.extractor_messages(this, msg.Severity, "C# extractor", msg.Text, msg.EntityText ?? string.Empty, - msg.Location ?? Context.CreateLocation(), msg.StackTrace ?? string.Empty); - } - } -} diff --git a/csharp/extractor/Semmle.Extraction/Entities/ExtractionMessage.cs b/csharp/extractor/Semmle.Extraction/Entities/ExtractionMessage.cs new file mode 100644 index 00000000000..bc6ea5aa27d --- /dev/null +++ b/csharp/extractor/Semmle.Extraction/Entities/ExtractionMessage.cs @@ -0,0 +1,37 @@ +using System.IO; +using System.Threading; +using Semmle.Util; + +namespace Semmle.Extraction.Entities +{ + internal class ExtractionMessage : FreshEntity + { + private static readonly int limit = EnvironmentVariables.TryGetExtractorNumberOption("MESSAGE_LIMIT") ?? 10000; + private static int messageCount = 0; + + private readonly Message msg; + + public ExtractionMessage(Context cx, Message msg) : base(cx) + { + this.msg = msg; + TryPopulate(); + } + + protected override void Populate(TextWriter trapFile) + { + // The below doesn't limit the extractor messages to the exact limit, but it's good enough. + Interlocked.Increment(ref messageCount); + if (messageCount > limit) + { + if (messageCount == limit + 1) + { + Context.Extractor.Logger.LogWarning($"Stopped logging extractor messages after reaching {limit}"); + } + return; + } + + trapFile.extractor_messages(this, msg.Severity, "C# extractor", msg.Text, msg.EntityText ?? string.Empty, + msg.Location ?? Context.CreateLocation(), msg.StackTrace ?? string.Empty); + } + } +} diff --git a/csharp/extractor/Semmle.Extraction/Options.cs b/csharp/extractor/Semmle.Extraction/Options.cs index 3aa704e60c5..ba809e7cfcb 100644 --- a/csharp/extractor/Semmle.Extraction/Options.cs +++ b/csharp/extractor/Semmle.Extraction/Options.cs @@ -60,11 +60,6 @@ namespace Semmle.Extraction /// public bool Cache { get; private set; } = true; - /// - /// Whether "fast extraction mode" has been enabled. - /// - public bool Fast { get; private set; } = false; - /// /// Whether extraction is done using `codeql test run`. /// @@ -115,9 +110,6 @@ namespace Semmle.Extraction case "cache": Cache = value; return true; - case "fast": - Fast = value; - return true; case "qltest": QlTest = value; return true; diff --git a/csharp/extractor/Semmle.Util.Tests/ActionMap.cs b/csharp/extractor/Semmle.Util.Tests/ActionMap.cs deleted file mode 100644 index 8bed44b97a2..00000000000 --- a/csharp/extractor/Semmle.Util.Tests/ActionMap.cs +++ /dev/null @@ -1,54 +0,0 @@ -using Xunit; -using Semmle.Util; - -using Assert = Xunit.Assert; - -namespace SemmleTests.Semmle.Util -{ - - public class ActionMapTests - { - [Fact] - public void TestAddthenOnAdd() - { - var am = new ActionMap(); - am.Add(1, 2); - int value = 0; - am.OnAdd(1, x => value = x); - Assert.Equal(2, value); - } - - [Fact] - public void TestOnAddthenAdd() - { - var am = new ActionMap(); - int value = 0; - am.OnAdd(1, x => value = x); - am.Add(1, 2); - Assert.Equal(2, value); - } - - [Fact] - public void TestNotAdded() - { - var am = new ActionMap(); - int value = 0; - am.OnAdd(1, x => value = x); - am.Add(2, 2); - Assert.Equal(0, value); - } - - [Fact] - public void TestMultipleActions() - { - var am = new ActionMap(); - int value1 = 0, value2 = 0; - am.OnAdd(1, x => value1 = x); - am.OnAdd(1, x => value2 = x); - am.Add(1, 2); - Assert.Equal(2, value1); - Assert.Equal(2, value2); - } - - } -} diff --git a/csharp/extractor/Semmle.Util.Tests/TextTest.cs b/csharp/extractor/Semmle.Util.Tests/TextTest.cs deleted file mode 100644 index 3a21f0b73ed..00000000000 --- a/csharp/extractor/Semmle.Util.Tests/TextTest.cs +++ /dev/null @@ -1,78 +0,0 @@ -using Xunit; -using System; -using Semmle.Util; - -using Assert = Xunit.Assert; - -namespace SemmleTests -{ - public class TextTest - { - //#################### PRIVATE VARIABLES #################### - #region - - /// - /// A shorter way of writing Environment.NewLine (it gets used repeatedly). - /// - private static readonly string NL = Environment.NewLine; - - #endregion - - //#################### TEST METHODS #################### - #region - - [Fact] - public void GetAllTest() - { - var input = new string[] - { - "Said once a young coder from Crewe,", - "'I like to write tests, so I do!", - "They help me confirm", - "That I don't need to squirm -", - "My code might look nice, but works too!'" - }; - - var text = new Text(input); - - Assert.Equal(string.Join(NL, input) + NL, text.GetAll()); - } - - [Fact] - public void GetPortionTest() - { - var input = new string[] - { - "There once was a jolly young tester", - "Who couldn't leave software to fester -", - "He'd prod and he'd poke", - "Until something bad broke,", - "And then he'd find someone to pester." - }; - - var text = new Text(input); - - // A single-line range (to test the special case). - Assert.Equal("jolly" + NL, text.GetPortion(0, 17, 0, 22)); - - // A two-line range. - Assert.Equal("prod and he'd poke" + NL + "Until" + NL, text.GetPortion(2, 5, 3, 5)); - - // A three-line range (to test that the middle line is included in full). - Assert.Equal("poke" + NL + "Until something bad broke," + NL + "And then" + NL, text.GetPortion(2, 19, 4, 8)); - - // An invalid but recoverable range (to test that a best effort is made rather than crashing). - Assert.Equal(NL + "Who couldn't leave software to fester -" + NL, text.GetPortion(0, int.MaxValue, 1, int.MaxValue)); - - // Some quite definitely dodgy ranges (to test that exceptions are thrown). - Assert.Throws(() => text.GetPortion(-1, 0, 0, 0)); - Assert.Throws(() => text.GetPortion(0, -1, 0, 0)); - Assert.Throws(() => text.GetPortion(0, 0, -1, 0)); - Assert.Throws(() => text.GetPortion(0, 0, 0, -1)); - Assert.Throws(() => text.GetPortion(3, 5, 2, 5)); - Assert.Throws(() => text.GetPortion(2, 5, int.MaxValue, 5)); - } - - #endregion - } -} diff --git a/csharp/extractor/Semmle.Util/ActionMap.cs b/csharp/extractor/Semmle.Util/ActionMap.cs deleted file mode 100644 index afcda9bb494..00000000000 --- a/csharp/extractor/Semmle.Util/ActionMap.cs +++ /dev/null @@ -1,45 +0,0 @@ -using System; -using System.Collections.Generic; - -namespace Semmle.Util -{ - /// - /// A dictionary which performs an action when items are added to the dictionary. - /// The order in which keys and actions are added does not matter. - /// - /// - /// - public class ActionMap where TKey : notnull - { - public void Add(TKey key, TValue value) - { - - if (actions.TryGetValue(key, out var a)) - a(value); - values[key] = value; - } - - public void OnAdd(TKey key, Action action) - { - if (actions.TryGetValue(key, out var a)) - { - actions[key] = a + action; - } - else - { - actions.Add(key, action); - } - - if (values.TryGetValue(key, out var val)) - { - action(val); - } - } - - // Action associated with each key. - private readonly Dictionary> actions = new Dictionary>(); - - // Values associated with each key. - private readonly Dictionary values = new Dictionary(); - } -} diff --git a/csharp/extractor/Semmle.Util/Enumerators.cs b/csharp/extractor/Semmle.Util/Enumerators.cs deleted file mode 100644 index 16fad6cfa54..00000000000 --- a/csharp/extractor/Semmle.Util/Enumerators.cs +++ /dev/null @@ -1,19 +0,0 @@ -using System.Collections.Generic; - -namespace Semmle.Util -{ - public static class Enumerators - { - /// - /// Create an enumerable with a single element. - /// - /// - /// The type of the enumerable/element. - /// The element. - /// An enumerable containing a single element. - public static IEnumerable Singleton(T t) - { - yield return t; - } - } -} diff --git a/csharp/extractor/Semmle.Util/EnvironmentVariables.cs b/csharp/extractor/Semmle.Util/EnvironmentVariables.cs index 9dcccf6d878..72ba9224669 100644 --- a/csharp/extractor/Semmle.Util/EnvironmentVariables.cs +++ b/csharp/extractor/Semmle.Util/EnvironmentVariables.cs @@ -1,4 +1,6 @@ using System; +using System.Globalization; +using System.Numerics; namespace Semmle.Util { @@ -7,6 +9,16 @@ namespace Semmle.Util public static string? GetExtractorOption(string name) => Environment.GetEnvironmentVariable($"CODEQL_EXTRACTOR_CSHARP_OPTION_{name.ToUpper()}"); + public static T? TryGetExtractorNumberOption(string name) where T : struct, INumberBase + { + var value = GetExtractorOption(name); + if (T.TryParse(value, NumberStyles.Number, CultureInfo.InvariantCulture, out var result)) + { + return result; + } + return null; + } + public static int GetDefaultNumberOfThreads() { if (!int.TryParse(Environment.GetEnvironmentVariable("CODEQL_THREADS"), out var threads) || threads == -1) @@ -15,5 +27,12 @@ namespace Semmle.Util } return threads; } + + public static bool GetBoolean(string name) + { + var env = Environment.GetEnvironmentVariable(name); + var _ = bool.TryParse(env, out var value); + return value; + } } } diff --git a/csharp/extractor/Semmle.Util/FileRenamer.cs b/csharp/extractor/Semmle.Util/FileRenamer.cs deleted file mode 100644 index 494e46856f8..00000000000 --- a/csharp/extractor/Semmle.Util/FileRenamer.cs +++ /dev/null @@ -1,34 +0,0 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; - -namespace Semmle.Util -{ - /// - /// Utility to temporarily rename a set of files. - /// - public sealed class FileRenamer : IDisposable - { - private readonly string[] files; - private const string suffix = ".codeqlhidden"; - - public FileRenamer(IEnumerable oldFiles) - { - files = oldFiles.Select(f => f.FullName).ToArray(); - - foreach (var file in files) - { - File.Move(file, file + suffix); - } - } - - public void Dispose() - { - foreach (var file in files) - { - File.Move(file + suffix, file); - } - } - } -} diff --git a/csharp/extractor/Semmle.Util/FileUtils.cs b/csharp/extractor/Semmle.Util/FileUtils.cs index 094c4da3338..4a22877e3c1 100644 --- a/csharp/extractor/Semmle.Util/FileUtils.cs +++ b/csharp/extractor/Semmle.Util/FileUtils.cs @@ -102,8 +102,7 @@ namespace Semmle.Util private static async Task DownloadFileAsync(string address, string filename) { using var httpClient = new HttpClient(); - using var request = new HttpRequestMessage(HttpMethod.Get, address); - using var contentStream = await (await httpClient.SendAsync(request)).Content.ReadAsStreamAsync(); + using var contentStream = await httpClient.GetStreamAsync(address); using var stream = new FileStream(filename, FileMode.Create, FileAccess.Write, FileShare.None, 4096, true); await contentStream.CopyToAsync(stream); } @@ -112,7 +111,7 @@ namespace Semmle.Util /// Downloads the file at to . /// public static void DownloadFile(string address, string fileName) => - DownloadFileAsync(address, fileName).Wait(); + DownloadFileAsync(address, fileName).GetAwaiter().GetResult(); public static string NestPaths(ILogger logger, string? outerpath, string innerpath) { diff --git a/csharp/extractor/Semmle.Util/FuzzyDictionary.cs b/csharp/extractor/Semmle.Util/FuzzyDictionary.cs deleted file mode 100644 index 53a84d98a08..00000000000 --- a/csharp/extractor/Semmle.Util/FuzzyDictionary.cs +++ /dev/null @@ -1,165 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace Semmle.Util -{ - /// - /// A dictionary from strings to elements of type T. - /// - /// - /// - /// This data structure is able to locate items based on an "approximate match" - /// of the key. This is used for example when attempting to identify two terms - /// in different trap files which are similar but not identical. - /// - /// The algorithm locates the closest match to a string based on a "distance function". - /// - /// Whilst many distance functions are possible, a bespoke algorithm is used here, - /// for efficiency and suitability for the domain. - /// - /// The distance is defined as the Hamming Distance of the numbers in the string. - /// Each string is split into the base "form" (stripped of numbers) and a vector of - /// numbers. (Numbers are non-negative integers in this context). - /// - /// Strings with a different "form" are considered different and have a distance - /// of infinity. - /// - /// This distance function is reflexive, symmetric and obeys the triangle inequality. - /// - /// E.g. foo(bar,1,2) has form "foo(bar,,)" and integers {1,2} - /// - /// distance(foo(bar,1,2), foo(bar,1,2)) = 0 - /// distance(foo(bar,1,2), foo(bar,1,3)) = 1 - /// distance(foo(bar,2,1), foo(bar,1,2)) = 2 - /// distance(foo(bar,1,2), foo(baz,1,2)) = infinity - /// - /// - /// The value type. - public class FuzzyDictionary where T : class - { - // All data items indexed by the "base string" (stripped of numbers) - private readonly Dictionary>> index = new Dictionary>>(); - - /// - /// Stores a new KeyValuePair in the data structure. - /// - /// The key. - /// The value. - public void Add(string k, T v) - { - var kv = new KeyValuePair(k, v); - - var root = StripDigits(k); - index.AddAnother(root, kv); - } - - /// - /// Computes the Hamming Distance between two sequences of the same length. - /// - /// Vector 1 - /// Vector 2 - /// The Hamming Distance. - private static int HammingDistance(IEnumerable v1, IEnumerable v2) where TElement : notnull - { - return v1.Zip(v2, (x, y) => x.Equals(y) ? 0 : 1).Sum(); - } - - /// - /// Locates the value with the smallest Hamming Distance from the query. - /// - /// The query string. - /// The distance between the query string and the stored string. - /// The best match, or null (default). - public T? FindMatch(string query, out int distance) - { - var root = StripDigits(query); - if (!index.TryGetValue(root, out var list)) - { - distance = 0; - return default(T); - } - - return BestMatch(query, list, (a, b) => HammingDistance(ExtractIntegers(a), ExtractIntegers(b)), out distance); - } - - /// - /// Returns the best match (with the smallest distance) for a query. - /// - /// The query string. - /// The list of candidate matches. - /// The distance function. - /// The distance between the query and the stored string. - /// The stored value. - private static T? BestMatch(string query, IEnumerable> candidates, Func distance, out int bestDistance) - { - var bestMatch = default(T); - bestDistance = 0; - var first = true; - - foreach (var candidate in candidates) - { - var d = distance(query, candidate.Key); - if (d == 0) - return candidate.Value; - - if (first || d < bestDistance) - { - bestDistance = d; - bestMatch = candidate.Value; - first = false; - } - } - - return bestMatch; - } - - /// - /// Removes all digits from a string. - /// - /// The input string. - /// String with digits removed. - private static string StripDigits(string input) - { - var result = new StringBuilder(); - foreach (var c in input.Where(c => !char.IsDigit(c))) - result.Append(c); - return result.ToString(); - } - - /// - /// Extracts and enumerates all non-negative integers in a string. - /// - /// The string to enumerate. - /// The sequence of integers. - private static IEnumerable ExtractIntegers(string input) - { - var inNumber = false; - var value = 0; - foreach (var c in input) - { - if (char.IsDigit(c)) - { - if (inNumber) - { - value = value * 10 + (c - '0'); - } - else - { - inNumber = true; - value = c - '0'; - } - } - else - { - if (inNumber) - { - yield return value; - inNumber = false; - } - } - } - } - } -} diff --git a/csharp/extractor/Semmle.Util/SharedReference.cs b/csharp/extractor/Semmle.Util/SharedReference.cs deleted file mode 100644 index ba87caeefaa..00000000000 --- a/csharp/extractor/Semmle.Util/SharedReference.cs +++ /dev/null @@ -1,18 +0,0 @@ -namespace Semmle.Util -{ - /// - /// An instance of this class maintains a shared reference to an object. - /// This makes it possible for several different parts of the code to - /// share access to an object that can change (that is, they all want - /// to refer to the same object, but the object to which they jointly - /// refer may vary over time). - /// - /// The type of the shared object. - public sealed class SharedReference where T : class - { - /// - /// The shared object to which different parts of the code want to refer. - /// - public T? Obj { get; set; } - } -} diff --git a/csharp/extractor/Semmle.Util/StringBuilder.cs b/csharp/extractor/Semmle.Util/StringBuilderExtensions.cs similarity index 100% rename from csharp/extractor/Semmle.Util/StringBuilder.cs rename to csharp/extractor/Semmle.Util/StringBuilderExtensions.cs diff --git a/csharp/extractor/Semmle.Util/StringExtensions.cs b/csharp/extractor/Semmle.Util/StringExtensions.cs deleted file mode 100644 index e56f106fe1f..00000000000 --- a/csharp/extractor/Semmle.Util/StringExtensions.cs +++ /dev/null @@ -1,41 +0,0 @@ -using System.Collections.Generic; -using System.Linq; - -namespace Semmle.Util -{ - public static class StringExtensions - { - public static (string, string) Split(this string self, int index0) - { - var split = self.Split(new[] { index0 }); - return (split[0], split[1]); - } - - public static (string, string, string) Split(this string self, int index0, int index1) - { - var split = self.Split(new[] { index0, index1 }); - return (split[0], split[1], split[2]); - } - - public static (string, string, string, string) Split(this string self, int index0, int index1, int index2) - { - var split = self.Split(new[] { index0, index1, index2 }); - return (split[0], split[1], split[2], split[3]); - } - - private static List Split(this string self, params int[] indices) - { - var ret = new List(); - var previousIndex = 0; - foreach (var index in indices.OrderBy(i => i)) - { - ret.Add(self.Substring(previousIndex, index - previousIndex)); - previousIndex = index; - } - - ret.Add(self.Substring(previousIndex)); - - return ret; - } - } -} diff --git a/csharp/extractor/Semmle.Util/Text.cs b/csharp/extractor/Semmle.Util/Text.cs deleted file mode 100644 index 38619fc0164..00000000000 --- a/csharp/extractor/Semmle.Util/Text.cs +++ /dev/null @@ -1,105 +0,0 @@ -using System; -using System.IO; - -namespace Semmle.Util -{ - /// - /// An instance of this class represents a piece of text, e.g. the text of a C# source file. - /// - public sealed class Text - { - //#################### PRIVATE VARIABLES #################### - #region - - /// - /// The text, stored line-by-line. - /// - private readonly string[] lines; - - #endregion - - //#################### CONSTRUCTORS #################### - #region - - /// - /// Constructs a text object from an array of lines. - /// - /// The lines of text. - public Text(string[] lines) - { - this.lines = lines; - } - - #endregion - - //#################### PUBLIC METHODS #################### - #region - - /// - /// Gets the whole text. - /// - /// The whole text. - public string GetAll() - { - using var sw = new StringWriter(); - foreach (var s in lines) - { - sw.WriteLine(s); - } - return sw.ToString(); - } - - /// - /// Gets the portion of text that lies in the specified location range. - /// - /// The row at which the portion starts. - /// The column in the start row at which the portion starts. - /// The row at which the portion ends. - /// The column in the end row at which the portion ends. - /// The portion of text that lies in the specified location range. - public string GetPortion(int startRow, int startColumn, int endRow, int endColumn) - { - // Perform some basic validation on the range bounds. - if (startRow < 0 || endRow < 0 || startColumn < 0 || endColumn < 0 || endRow >= lines.Length || startRow > endRow) - { - throw new Exception - ( - string.Format("Bad range ({0},{1}):({2},{3}) in a piece of text with {4} lines", startRow, startColumn, endRow, endColumn, lines.Length) - ); - } - - using var sw = new StringWriter(); - string line; - - for (var i = startRow; i <= endRow; ++i) - { - if (i == startRow && i == endRow) - { - // This is a single-line range, so take the bit between "startColumn" and "endColumn". - line = startColumn <= lines[i].Length ? lines[i].Substring(startColumn, endColumn - startColumn) : ""; - } - else if (i == startRow) - { - // This is the first line of a multi-line range, so take the bit from "startColumn" onwards. - line = startColumn <= lines[i].Length ? lines[i].Substring(startColumn) : ""; - } - else if (i == endRow) - { - // This is the last line of a multi-line range, so take the bit up to "endColumn". - line = endColumn <= lines[i].Length ? lines[i].Substring(0, endColumn) : lines[i]; - } - else - { - // This is a line in the middle of a multi-line range, so take the whole line. - line = lines[i]; - } - - sw.WriteLine(line); - } - - return sw.ToString(); - } - - #endregion - } -} diff --git a/csharp/extractor/Semmle.Util/ToolStatusPage.cs b/csharp/extractor/Semmle.Util/ToolStatusPage/DiagnosticMessage.cs similarity index 77% rename from csharp/extractor/Semmle.Util/ToolStatusPage.cs rename to csharp/extractor/Semmle.Util/ToolStatusPage/DiagnosticMessage.cs index 70999fb98d2..e8b061b29f2 100644 --- a/csharp/extractor/Semmle.Util/ToolStatusPage.cs +++ b/csharp/extractor/Semmle.Util/ToolStatusPage/DiagnosticMessage.cs @@ -1,7 +1,6 @@ using System; using System.Collections.Generic; using System.Globalization; -using System.IO; using Newtonsoft.Json; using Newtonsoft.Json.Converters; using Newtonsoft.Json.Serialization; @@ -46,6 +45,7 @@ namespace Semmle.Util [JsonConverter(typeof(StringEnumConverter), typeof(CamelCaseNamingStrategy))] public enum TspSeverity { + Unknown, Note, Warning, Error @@ -178,64 +178,4 @@ namespace Semmle.Util this.PlaintextMessage = plaintextMessage; } } - - /// - /// Provides the ability to write diagnostic messages to some output. - /// - public interface IDiagnosticsWriter - { - /// - /// Adds as a new diagnostics entry. - /// - /// The diagnostics entry to add. - void AddEntry(DiagnosticMessage message); - } - - /// - /// A wrapper around an underlying which allows - /// objects to be serialized to it. - /// - public sealed class DiagnosticsStream : IDiagnosticsWriter, IDisposable - { - private readonly JsonSerializer serializer; - private readonly StreamWriter writer; - - /// - /// Initialises a new for a file at . - /// - /// The path to the file that should be created. - public DiagnosticsStream(string path) - { - this.writer = File.CreateText(path); - - var contractResolver = new DefaultContractResolver - { - NamingStrategy = new CamelCaseNamingStrategy() - }; - - serializer = new JsonSerializer - { - ContractResolver = contractResolver, - NullValueHandling = NullValueHandling.Ignore - }; - } - - /// - /// Adds as a new diagnostics entry. - /// - /// The diagnostics entry to add. - public void AddEntry(DiagnosticMessage message) - { - serializer.Serialize(writer, message); - writer.Flush(); - } - - /// - /// Releases all resources used by the object. - /// - public void Dispose() - { - writer.Dispose(); - } - } } diff --git a/csharp/extractor/Semmle.Util/ToolStatusPage/DiagnosticsStream.cs b/csharp/extractor/Semmle.Util/ToolStatusPage/DiagnosticsStream.cs new file mode 100644 index 00000000000..1dc320f5f41 --- /dev/null +++ b/csharp/extractor/Semmle.Util/ToolStatusPage/DiagnosticsStream.cs @@ -0,0 +1,55 @@ +using System; +using System.IO; +using Newtonsoft.Json; +using Newtonsoft.Json.Serialization; + +namespace Semmle.Util +{ + /// + /// A wrapper around an underlying which allows + /// objects to be serialized to it. + /// + public sealed class DiagnosticsStream : IDiagnosticsWriter + { + private readonly JsonSerializer serializer; + private readonly StreamWriter writer; + + /// + /// Initialises a new for a file at . + /// + /// The path to the file that should be created. + public DiagnosticsStream(string path) + { + this.writer = File.CreateText(path); + + var contractResolver = new DefaultContractResolver + { + NamingStrategy = new CamelCaseNamingStrategy() + }; + + serializer = new JsonSerializer + { + ContractResolver = contractResolver, + NullValueHandling = NullValueHandling.Ignore + }; + } + + /// + /// Adds as a new diagnostics entry. + /// + /// The diagnostics entry to add. + public void AddEntry(DiagnosticMessage message) + { + serializer.Serialize(writer, message); + writer.Flush(); + } + + /// + /// Releases all resources used by the object. + /// + public void Dispose() + { + writer.Dispose(); + } + } +} diff --git a/csharp/extractor/Semmle.Util/ToolStatusPage/IDiagnosticsWriter.cs b/csharp/extractor/Semmle.Util/ToolStatusPage/IDiagnosticsWriter.cs new file mode 100644 index 00000000000..eda3dbb41d8 --- /dev/null +++ b/csharp/extractor/Semmle.Util/ToolStatusPage/IDiagnosticsWriter.cs @@ -0,0 +1,16 @@ +using System; + +namespace Semmle.Util +{ + /// + /// Provides the ability to write diagnostic messages to some output. + /// + public interface IDiagnosticsWriter : IDisposable + { + /// + /// Adds as a new diagnostics entry. + /// + /// The diagnostics entry to add. + void AddEntry(DiagnosticMessage message); + } +} diff --git a/csharp/extractor/Semmle.Util/Worklist.cs b/csharp/extractor/Semmle.Util/Worklist.cs deleted file mode 100644 index 0a71dbd4381..00000000000 --- a/csharp/extractor/Semmle.Util/Worklist.cs +++ /dev/null @@ -1,57 +0,0 @@ -using System.Collections.Generic; - -namespace Semmle.Util -{ - /// - /// A worklist of items, providing the operations of adding an item, checking - /// whether there are new items and iterating a chunk of unprocessed items. - /// Any one item will only be accepted into the worklist once. - /// - public class Worklist - { - private readonly HashSet internalSet = new HashSet(); - private LinkedList internalList = new LinkedList(); - private bool hasNewElements = false; - - /// - /// Gets a value indicating whether this instance has had any new elements added - /// since the last time GetUnprocessedElements() was called. - /// - /// - /// true if this instance has new elements; otherwise, false. - /// - public bool HasNewElements => hasNewElements; - - /// - /// Add the specified element to the worklist. - /// - /// - /// If set to true element. - /// - public bool Add(T element) - { - if (internalSet.Contains(element)) - return false; - internalSet.Add(element); - internalList.AddLast(element); - hasNewElements = true; - return true; - } - - /// - /// Gets the unprocessed elements that have been accumulated since the last time - /// this method was called. If HasNewElements == true, the resulting list - /// will be non-empty. - /// - /// - /// The unprocessed elements. - /// - public LinkedList GetUnprocessedElements() - { - var result = internalList; - internalList = new LinkedList(); - hasNewElements = false; - return result; - } - } -} diff --git a/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md b/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md index 190b83b0f25..50143af24fb 100644 --- a/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md +++ b/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md @@ -1,3 +1,19 @@ +## 1.7.13 + +No user-facing changes. + +## 1.7.12 + +No user-facing changes. + +## 1.7.11 + +No user-facing changes. + +## 1.7.10 + +No user-facing changes. + ## 1.7.9 No user-facing changes. diff --git a/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.10.md b/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.10.md new file mode 100644 index 00000000000..8e8007d8475 --- /dev/null +++ b/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.10.md @@ -0,0 +1,3 @@ +## 1.7.10 + +No user-facing changes. diff --git a/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.11.md b/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.11.md new file mode 100644 index 00000000000..c2790d68a54 --- /dev/null +++ b/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.11.md @@ -0,0 +1,3 @@ +## 1.7.11 + +No user-facing changes. diff --git a/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.12.md b/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.12.md new file mode 100644 index 00000000000..e13bce621a9 --- /dev/null +++ b/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.12.md @@ -0,0 +1,3 @@ +## 1.7.12 + +No user-facing changes. diff --git a/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.13.md b/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.13.md new file mode 100644 index 00000000000..e2656ce672c --- /dev/null +++ b/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.13.md @@ -0,0 +1,3 @@ +## 1.7.13 + +No user-facing changes. diff --git a/csharp/ql/campaigns/Solorigate/lib/codeql-pack.release.yml b/csharp/ql/campaigns/Solorigate/lib/codeql-pack.release.yml index 678da6bc37e..e5f93542dfc 100644 --- a/csharp/ql/campaigns/Solorigate/lib/codeql-pack.release.yml +++ b/csharp/ql/campaigns/Solorigate/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.7.9 +lastReleaseVersion: 1.7.13 diff --git a/csharp/ql/campaigns/Solorigate/lib/qlpack.yml b/csharp/ql/campaigns/Solorigate/lib/qlpack.yml index 7e643b0fac3..aca41e884d3 100644 --- a/csharp/ql/campaigns/Solorigate/lib/qlpack.yml +++ b/csharp/ql/campaigns/Solorigate/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-solorigate-all -version: 1.7.10-dev +version: 1.7.14-dev groups: - csharp - solorigate diff --git a/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md b/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md index 190b83b0f25..50143af24fb 100644 --- a/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md +++ b/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md @@ -1,3 +1,19 @@ +## 1.7.13 + +No user-facing changes. + +## 1.7.12 + +No user-facing changes. + +## 1.7.11 + +No user-facing changes. + +## 1.7.10 + +No user-facing changes. + ## 1.7.9 No user-facing changes. diff --git a/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.10.md b/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.10.md new file mode 100644 index 00000000000..8e8007d8475 --- /dev/null +++ b/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.10.md @@ -0,0 +1,3 @@ +## 1.7.10 + +No user-facing changes. diff --git a/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.11.md b/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.11.md new file mode 100644 index 00000000000..c2790d68a54 --- /dev/null +++ b/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.11.md @@ -0,0 +1,3 @@ +## 1.7.11 + +No user-facing changes. diff --git a/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.12.md b/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.12.md new file mode 100644 index 00000000000..e13bce621a9 --- /dev/null +++ b/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.12.md @@ -0,0 +1,3 @@ +## 1.7.12 + +No user-facing changes. diff --git a/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.13.md b/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.13.md new file mode 100644 index 00000000000..e2656ce672c --- /dev/null +++ b/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.13.md @@ -0,0 +1,3 @@ +## 1.7.13 + +No user-facing changes. diff --git a/csharp/ql/campaigns/Solorigate/src/codeql-pack.release.yml b/csharp/ql/campaigns/Solorigate/src/codeql-pack.release.yml index 678da6bc37e..e5f93542dfc 100644 --- a/csharp/ql/campaigns/Solorigate/src/codeql-pack.release.yml +++ b/csharp/ql/campaigns/Solorigate/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.7.9 +lastReleaseVersion: 1.7.13 diff --git a/csharp/ql/campaigns/Solorigate/src/qlpack.yml b/csharp/ql/campaigns/Solorigate/src/qlpack.yml index 8654bbfd031..66d7baf4780 100644 --- a/csharp/ql/campaigns/Solorigate/src/qlpack.yml +++ b/csharp/ql/campaigns/Solorigate/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-solorigate-queries -version: 1.7.10-dev +version: 1.7.14-dev groups: - csharp - solorigate diff --git a/csharp/ql/integration-tests/all-platforms/diag_recursive_generics/Types.ql b/csharp/ql/integration-tests/all-platforms/diag_recursive_generics/Types.ql index d59c60ec802..de95e0fcbe7 100644 --- a/csharp/ql/integration-tests/all-platforms/diag_recursive_generics/Types.ql +++ b/csharp/ql/integration-tests/all-platforms/diag_recursive_generics/Types.ql @@ -2,4 +2,4 @@ import csharp from Class c where c.fromSource() -select c, c.getBaseClass().getFullyQualifiedName() +select c, c.getBaseClass().getFullyQualifiedNameDebug() diff --git a/csharp/ql/integration-tests/all-platforms/standalone/Diag.expected b/csharp/ql/integration-tests/all-platforms/standalone/Diag.expected new file mode 100644 index 00000000000..b48630869ee --- /dev/null +++ b/csharp/ql/integration-tests/all-platforms/standalone/Diag.expected @@ -0,0 +1,7 @@ +extractorMessages +| 5 | +compilerDiagnostics +| 4 | +compilationInfo +| Compiler diagnostic count for CS0103 | 3.0 | +| Compiler diagnostic count for CS8019 | 7.0 | diff --git a/csharp/ql/integration-tests/all-platforms/standalone/Diag.ql b/csharp/ql/integration-tests/all-platforms/standalone/Diag.ql new file mode 100644 index 00000000000..e391b345b20 --- /dev/null +++ b/csharp/ql/integration-tests/all-platforms/standalone/Diag.ql @@ -0,0 +1,14 @@ +import csharp +import semmle.code.csharp.commons.Diagnostics + +query predicate extractorMessages(int c) { c = count(ExtractorMessage msg) } + +query predicate compilerDiagnostics(int c) { c = count(Diagnostic diag) } + +query predicate compilationInfo(string key, float value) { + exists(Compilation c, string infoValue | + infoValue = c.getInfo(key) and key.matches("Compiler diagnostic count for%") + | + value = infoValue.toFloat() + ) +} diff --git a/csharp/ql/integration-tests/all-platforms/standalone/Program.cs b/csharp/ql/integration-tests/all-platforms/standalone/Program.cs index 47eee48cc79..371ed98c724 100644 --- a/csharp/ql/integration-tests/all-platforms/standalone/Program.cs +++ b/csharp/ql/integration-tests/all-platforms/standalone/Program.cs @@ -1 +1,2 @@ -var dummy = "dummy"; \ No newline at end of file +var dummy = "dummy"; +dummy = M() + M() + M(); \ No newline at end of file diff --git a/csharp/ql/integration-tests/all-platforms/standalone/diagnostics.expected b/csharp/ql/integration-tests/all-platforms/standalone/diagnostics.expected new file mode 100644 index 00000000000..f5704ce12bb --- /dev/null +++ b/csharp/ql/integration-tests/all-platforms/standalone/diagnostics.expected @@ -0,0 +1,28 @@ +{ + "markdownMessage": "C# analysis with build-mode 'none' completed.", + "severity": "unknown", + "source": { + "extractorName": "csharp", + "id": "csharp/autobuilder/buildless/complete", + "name": "C# analysis with build-mode 'none' completed" + }, + "visibility": { + "cliSummaryTable": true, + "statusPage": false, + "telemetry": true + } +} +{ + "markdownMessage": "C# with build-mode set to 'none'. This means that all C# source in the working directory will be scanned, with build tools, such as Nuget and Dotnet CLIs, only contributing information about external dependencies.", + "severity": "note", + "source": { + "extractorName": "csharp", + "id": "csharp/autobuilder/buildless/mode-active", + "name": "C# with build-mode set to 'none'" + }, + "visibility": { + "cliSummaryTable": true, + "statusPage": true, + "telemetry": true + } +} diff --git a/csharp/ql/integration-tests/all-platforms/standalone/test.py b/csharp/ql/integration-tests/all-platforms/standalone/test.py index a17966e148a..f7797467cf8 100644 --- a/csharp/ql/integration-tests/all-platforms/standalone/test.py +++ b/csharp/ql/integration-tests/all-platforms/standalone/test.py @@ -1,3 +1,9 @@ +import os from create_database_utils import * +from diagnostics_test_utils import * +os.environ['CODEQL_EXTRACTOR_CSHARP_OPTION_COMPILER_DIAGNOSTIC_LIMIT'] = '2' +os.environ['CODEQL_EXTRACTOR_CSHARP_OPTION_MESSAGE_LIMIT'] = '5' run_codeql_database_create([], lang="csharp", extra_args=["--build-mode=none"]) + +check_diagnostics() \ No newline at end of file diff --git a/csharp/ql/integration-tests/all-platforms/standalone_failed/diagnostics.expected b/csharp/ql/integration-tests/all-platforms/standalone_failed/diagnostics.expected new file mode 100644 index 00000000000..65b8c89ce70 --- /dev/null +++ b/csharp/ql/integration-tests/all-platforms/standalone_failed/diagnostics.expected @@ -0,0 +1,28 @@ +{ + "markdownMessage": "C# analysis with build-mode 'none' failed.", + "severity": "error", + "source": { + "extractorName": "csharp", + "id": "csharp/autobuilder/buildless/failed", + "name": "C# analysis with build-mode 'none' failed" + }, + "visibility": { + "cliSummaryTable": true, + "statusPage": true, + "telemetry": true + } +} +{ + "markdownMessage": "C# with build-mode set to 'none'. This means that all C# source in the working directory will be scanned, with build tools, such as Nuget and Dotnet CLIs, only contributing information about external dependencies.", + "severity": "note", + "source": { + "extractorName": "csharp", + "id": "csharp/autobuilder/buildless/mode-active", + "name": "C# with build-mode set to 'none'" + }, + "visibility": { + "cliSummaryTable": true, + "statusPage": true, + "telemetry": true + } +} diff --git a/csharp/ql/integration-tests/all-platforms/standalone_failed/standalone.csproj b/csharp/ql/integration-tests/all-platforms/standalone_failed/standalone.csproj new file mode 100644 index 00000000000..324eba5d4ef --- /dev/null +++ b/csharp/ql/integration-tests/all-platforms/standalone_failed/standalone.csproj @@ -0,0 +1,14 @@ + + + + Exe + net8.0 + enable + enable + + + + + + + diff --git a/csharp/ql/integration-tests/all-platforms/standalone_failed/test.py b/csharp/ql/integration-tests/all-platforms/standalone_failed/test.py new file mode 100644 index 00000000000..403e8efff23 --- /dev/null +++ b/csharp/ql/integration-tests/all-platforms/standalone_failed/test.py @@ -0,0 +1,6 @@ +from create_database_utils import * +from diagnostics_test_utils import * + +run_codeql_database_create([], db=None, lang="csharp", extra_args=["--build-mode=none"], runFunction=runUnsuccessfully) + +check_diagnostics() diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error/CompilationInfo.ql b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error/CompilationInfo.ql index 87a9e20f027..073ffe3b224 100644 --- a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error/CompilationInfo.ql +++ b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error/CompilationInfo.ql @@ -3,6 +3,7 @@ import semmle.code.csharp.commons.Diagnostics query predicate compilationInfo(string key, float value) { key != "Resolved references" and + not key.matches("Compiler diagnostic count for%") and exists(Compilation c, string infoKey, string infoValue | infoValue = c.getInfo(infoKey) | key = infoKey and value = infoValue.toFloat() diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error_timeout/Assemblies.expected b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error_timeout/Assemblies.expected new file mode 100644 index 00000000000..2a530060edb --- /dev/null +++ b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error_timeout/Assemblies.expected @@ -0,0 +1 @@ +| [...]/newtonsoft.json/13.0.3/lib/net6.0/Newtonsoft.Json.dll | diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error_timeout/Assemblies.ql b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error_timeout/Assemblies.ql new file mode 100644 index 00000000000..79cf92de791 --- /dev/null +++ b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error_timeout/Assemblies.ql @@ -0,0 +1,11 @@ +import csharp + +private string getPath(Assembly a) { + not a.getCompilation().getOutputAssembly() = a and + exists(string s | s = a.getFile().getAbsolutePath() | + result = "[...]/" + s.substring(s.indexOf("newtonsoft.json"), s.length()) + ) +} + +from Assembly a +select getPath(a) diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error_timeout/CompilationInfo.expected b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error_timeout/CompilationInfo.expected new file mode 100644 index 00000000000..394fb93a259 --- /dev/null +++ b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error_timeout/CompilationInfo.expected @@ -0,0 +1,13 @@ +| All Nuget feeds reachable | 0.0 | +| Fallback nuget restore | 1.0 | +| Project files on filesystem | 1.0 | +| Resolved assembly conflicts | 7.0 | +| Restored .NET framework variants | 0.0 | +| Solution files on filesystem | 1.0 | +| Source files generated | 0.0 | +| Source files on filesystem | 1.0 | +| Successfully ran fallback nuget restore | 1.0 | +| Unresolved references | 0.0 | +| UseWPF set | 0.0 | +| UseWindowsForms set | 0.0 | +| WebView extraction enabled | 1.0 | diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error_timeout/CompilationInfo.ql b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error_timeout/CompilationInfo.ql new file mode 100644 index 00000000000..073ffe3b224 --- /dev/null +++ b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error_timeout/CompilationInfo.ql @@ -0,0 +1,15 @@ +import csharp +import semmle.code.csharp.commons.Diagnostics + +query predicate compilationInfo(string key, float value) { + key != "Resolved references" and + not key.matches("Compiler diagnostic count for%") and + exists(Compilation c, string infoKey, string infoValue | infoValue = c.getInfo(infoKey) | + key = infoKey and + value = infoValue.toFloat() + or + not exists(infoValue.toFloat()) and + key = infoKey + ": " + infoValue and + value = 1 + ) +} diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error_timeout/diagnostics.expected b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error_timeout/diagnostics.expected new file mode 100644 index 00000000000..5f298cd3a11 --- /dev/null +++ b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error_timeout/diagnostics.expected @@ -0,0 +1,42 @@ +{ + "markdownMessage": "C# analysis with build-mode 'none' completed.", + "severity": "unknown", + "source": { + "extractorName": "csharp", + "id": "csharp/autobuilder/buildless/complete", + "name": "C# analysis with build-mode 'none' completed" + }, + "visibility": { + "cliSummaryTable": true, + "statusPage": false, + "telemetry": true + } +} +{ + "markdownMessage": "C# with build-mode set to 'none'. This means that all C# source in the working directory will be scanned, with build tools, such as Nuget and Dotnet CLIs, only contributing information about external dependencies.", + "severity": "note", + "source": { + "extractorName": "csharp", + "id": "csharp/autobuilder/buildless/mode-active", + "name": "C# with build-mode set to 'none'" + }, + "visibility": { + "cliSummaryTable": true, + "statusPage": true, + "telemetry": true + } +} +{ + "markdownMessage": "Found unreachable Nuget feed in C# analysis with build-mode 'none'. This may cause missing dependencies in the analysis.", + "severity": "warning", + "source": { + "extractorName": "csharp", + "id": "csharp/autobuilder/buildless/unreachable-feed", + "name": "Found unreachable Nuget feed in C# analysis with build-mode 'none'" + }, + "visibility": { + "cliSummaryTable": true, + "statusPage": true, + "telemetry": true + } +} diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error_timeout/proj/Program.cs b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error_timeout/proj/Program.cs new file mode 100644 index 00000000000..39a9e95bb6e --- /dev/null +++ b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error_timeout/proj/Program.cs @@ -0,0 +1,6 @@ +class Program +{ + static void Main(string[] args) + { + } +} \ No newline at end of file diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error_timeout/proj/nuget.config b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error_timeout/proj/nuget.config new file mode 100644 index 00000000000..11d134c7289 --- /dev/null +++ b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error_timeout/proj/nuget.config @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error_timeout/proj/proj.csproj b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error_timeout/proj/proj.csproj new file mode 100644 index 00000000000..cef71796352 --- /dev/null +++ b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error_timeout/proj/proj.csproj @@ -0,0 +1,16 @@ + + + + Exe + net8.0 + + + + + + + + + + + diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error_timeout/standalone.sln b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error_timeout/standalone.sln new file mode 100644 index 00000000000..493ab54b59a --- /dev/null +++ b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error_timeout/standalone.sln @@ -0,0 +1,19 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.5.002.0 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "proj", "proj\proj.csproj", "{6ED00460-7666-4AE9-A405-4B6C8B02279A}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {4ED55A1C-066C-43DF-B32E-7EAA035985EE} + EndGlobalSection +EndGlobal diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error_timeout/test.py b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error_timeout/test.py new file mode 100644 index 00000000000..b48382a66ce --- /dev/null +++ b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error_timeout/test.py @@ -0,0 +1,10 @@ +from create_database_utils import * +from diagnostics_test_utils import * +import os + +os.environ["CODEQL_EXTRACTOR_CSHARP_BUILDLESS_NUGET_FEEDS_CHECK"] = "true" # Enable NuGet feed check +os.environ["CODEQL_EXTRACTOR_CSHARP_BUILDLESS_NUGET_FEEDS_CHECK_TIMEOUT"] = "1" # 1ms, the GET request should fail with such short timeout +os.environ["CODEQL_EXTRACTOR_CSHARP_BUILDLESS_NUGET_FEEDS_CHECK_LIMIT"] = "1" # Limit the count of checks to 1 +os.environ["CODEQL_EXTRACTOR_CSHARP_BUILDLESS_NUGET_FEEDS_CHECK_EXCLUDED"] = "https://abc.de:8000/packages/" # Exclude this feed from check +run_codeql_database_create([], lang="csharp", extra_args=["--build-mode=none"]) +check_diagnostics() \ No newline at end of file diff --git a/csharp/ql/lib/CHANGELOG.md b/csharp/ql/lib/CHANGELOG.md index 95fd64c5270..27133addc5c 100644 --- a/csharp/ql/lib/CHANGELOG.md +++ b/csharp/ql/lib/CHANGELOG.md @@ -1,3 +1,43 @@ +## 0.9.0 + +### Breaking Changes + +* The CIL extractor has been deleted and the corresponding extractor option `cil` has been removed. It is no longer possible to do CIL extraction. +* The QL library C# classes no longer extend their corresponding `DotNet` classes. Furthermore, CIL related data flow functionality has been deleted and all `DotNet` and `CIL` related classes have been deprecated. This effectively means that it no longer has any effect to enable CIL extraction. + +### Minor Analysis Improvements + +* Added new source models for the `Dapper` package. These models can be enabled by enabling the `database` threat model. +* Additional models have been added for `System.IO`. These are primarily source models with the `file` threat model, and summaries related to reading from a file or stream. +* Support for C# 12 / .NET8. +* Added the `windows-registry` source kind and threat model to represent values which come from the registry on Windows. +* The models for `System.Net.Http.HttpRequestMessage` have been modified to better model the flow of tainted URIs. +* The .NET standard libraries APIs for accessing command line arguments and environment variables have been modeled using the `commandargs` and `environment` threat models. +* The `cs/assembly-path-injection` query has been modified so that it's sources rely on `ThreatModelFlowSource`. In order to restore results from command line arguments, you should enable the `commandargs` threat model. +* The models for `System.IO.TextReader` have been modified to better model the flow of tainted text from a `TextReader`. + +## 0.8.12 + +No user-facing changes. + +## 0.8.11 + +No user-facing changes. + +## 0.8.10 + +### Major Analysis Improvements + +* Improved support for flow through captured variables that properly adheres to inter-procedural control flow. +* We no longer make use of CodeQL database stats, which may affect join-orders in custom queries. It is therefore recommended to test performance of custom queries after upgrading to this version. + +### Minor Analysis Improvements + +* C# 12: Add QL library support (`ExperimentalAttribute`) for the experimental attribute. +* C# 12: Add extractor and QL library support for `ref readonly` parameters. +* C#: The table `expr_compiler_generated` has been deleted and its content has been added to `compiler_generated`. +* Data flow via get only properties like `public object Obj { get; }` is now captured by the data flow library. + ## 0.8.9 ### Minor Analysis Improvements diff --git a/csharp/ql/lib/change-notes/2024-02-21-getonly-properties.md b/csharp/ql/lib/change-notes/2024-02-21-getonly-properties.md deleted file mode 100644 index 6bb8e99c71e..00000000000 --- a/csharp/ql/lib/change-notes/2024-02-21-getonly-properties.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Data flow via get only properties like `public object Obj { get; }` is now captured by the data flow library. diff --git a/csharp/ql/lib/change-notes/2024-02-22-no-db-stats.md b/csharp/ql/lib/change-notes/2024-02-22-no-db-stats.md deleted file mode 100644 index d6ffbd523ac..00000000000 --- a/csharp/ql/lib/change-notes/2024-02-22-no-db-stats.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: majorAnalysis ---- -* We no longer make use of CodeQL database stats, which may affect join-orders in custom queries. It is therefore recommended to test performance of custom queries after upgrading to this version. diff --git a/csharp/ql/lib/change-notes/2024-02-23-compiler-generated.md b/csharp/ql/lib/change-notes/2024-02-23-compiler-generated.md deleted file mode 100644 index 9b1739b9b6d..00000000000 --- a/csharp/ql/lib/change-notes/2024-02-23-compiler-generated.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* C#: The table `expr_compiler_generated` has been deleted and its content has been added to `compiler_generated`. diff --git a/csharp/ql/lib/change-notes/2024-02-26-variable-capture-flow.md b/csharp/ql/lib/change-notes/2024-02-26-variable-capture-flow.md deleted file mode 100644 index 66ab65083dc..00000000000 --- a/csharp/ql/lib/change-notes/2024-02-26-variable-capture-flow.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: majorAnalysis ---- -* Improved support for flow through captured variables that properly adheres to inter-procedural control flow. \ No newline at end of file diff --git a/csharp/ql/lib/change-notes/2024-02-28-experimental-attribute.md b/csharp/ql/lib/change-notes/2024-02-28-experimental-attribute.md deleted file mode 100644 index 8749c790954..00000000000 --- a/csharp/ql/lib/change-notes/2024-02-28-experimental-attribute.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* C# 12: Add QL library support (`ExperimentalAttribute`) for the experimental attribute. diff --git a/csharp/ql/lib/change-notes/2024-02-28-refreadonly-parameter.md b/csharp/ql/lib/change-notes/2024-02-28-refreadonly-parameter.md deleted file mode 100644 index 586b5341d29..00000000000 --- a/csharp/ql/lib/change-notes/2024-02-28-refreadonly-parameter.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* C# 12: Add extractor and QL library support for `ref readonly` parameters. diff --git a/csharp/ql/lib/change-notes/2024-03-04-deprecate-dotnet-and-cil.md b/csharp/ql/lib/change-notes/2024-03-04-deprecate-dotnet-and-cil.md deleted file mode 100644 index fea31bb8bbb..00000000000 --- a/csharp/ql/lib/change-notes/2024-03-04-deprecate-dotnet-and-cil.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: breaking ---- -* The QL library C# classes no longer extend their corresponding `DotNet` classes. Furthermore, CIL related data flow functionality has been deleted and all `DotNet` and `CIL` related classes have been deprecated. This effectively means that it no longer has any effect to enable CIL extraction. diff --git a/csharp/ql/lib/change-notes/2024-03-04-fixed-system.io.textreader-models.md b/csharp/ql/lib/change-notes/2024-03-04-fixed-system.io.textreader-models.md deleted file mode 100644 index a32f8a7c22c..00000000000 --- a/csharp/ql/lib/change-notes/2024-03-04-fixed-system.io.textreader-models.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* The models for `System.IO.TextReader` have been modified to better model the flow of tainted text from a `TextReader`. diff --git a/csharp/ql/lib/change-notes/2024-03-05-new-commandargs-and-environment-models.md b/csharp/ql/lib/change-notes/2024-03-05-new-commandargs-and-environment-models.md deleted file mode 100644 index 0bee733157c..00000000000 --- a/csharp/ql/lib/change-notes/2024-03-05-new-commandargs-and-environment-models.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -category: minorAnalysis ---- -* The .NET standard libraries APIs for accessing command line arguments and environment variables have been modeled using the `commandargs` and `environment` threat models. -* The `cs/assembly-path-injection` query has been modified so that it's sources rely on `ThreatModelFlowSource`. In order to restore results from command line arguments, you should enable the `commandargs` threat model. diff --git a/csharp/ql/lib/change-notes/2024-03-07-remove-cil-extractor.md b/csharp/ql/lib/change-notes/2024-03-07-remove-cil-extractor.md deleted file mode 100644 index 36be2372b4e..00000000000 --- a/csharp/ql/lib/change-notes/2024-03-07-remove-cil-extractor.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: breaking ---- -* The CIL extractor has been deleted and the corresponding extractor option `cil` has been removed. It is no longer possible to do CIL extraction. diff --git a/csharp/ql/lib/change-notes/2024-03-07-update-system.net.http.httprequestmessage-models.md b/csharp/ql/lib/change-notes/2024-03-07-update-system.net.http.httprequestmessage-models.md deleted file mode 100644 index 2ac3a1059c6..00000000000 --- a/csharp/ql/lib/change-notes/2024-03-07-update-system.net.http.httprequestmessage-models.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* The models for `System.Net.Http.HttpRequestMessage` have been modified to better model the flow of tainted URIs. \ No newline at end of file diff --git a/csharp/ql/lib/change-notes/2024-03-11-csharp12-dotnet8.md b/csharp/ql/lib/change-notes/2024-03-11-csharp12-dotnet8.md deleted file mode 100644 index 7111e8966d6..00000000000 --- a/csharp/ql/lib/change-notes/2024-03-11-csharp12-dotnet8.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Support for C# 12 / .NET8. diff --git a/csharp/ql/lib/change-notes/2024-03-11-registry-sources.md b/csharp/ql/lib/change-notes/2024-03-11-registry-sources.md deleted file mode 100644 index 1d105049185..00000000000 --- a/csharp/ql/lib/change-notes/2024-03-11-registry-sources.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Added the `windows-registry` source kind and threat model to represent values which come from the registry on Windows. diff --git a/csharp/ql/lib/change-notes/released/0.8.10.md b/csharp/ql/lib/change-notes/released/0.8.10.md new file mode 100644 index 00000000000..f591ddc5b21 --- /dev/null +++ b/csharp/ql/lib/change-notes/released/0.8.10.md @@ -0,0 +1,13 @@ +## 0.8.10 + +### Major Analysis Improvements + +* Improved support for flow through captured variables that properly adheres to inter-procedural control flow. +* We no longer make use of CodeQL database stats, which may affect join-orders in custom queries. It is therefore recommended to test performance of custom queries after upgrading to this version. + +### Minor Analysis Improvements + +* C# 12: Add QL library support (`ExperimentalAttribute`) for the experimental attribute. +* C# 12: Add extractor and QL library support for `ref readonly` parameters. +* C#: The table `expr_compiler_generated` has been deleted and its content has been added to `compiler_generated`. +* Data flow via get only properties like `public object Obj { get; }` is now captured by the data flow library. diff --git a/csharp/ql/lib/change-notes/released/0.8.11.md b/csharp/ql/lib/change-notes/released/0.8.11.md new file mode 100644 index 00000000000..6f504c5c207 --- /dev/null +++ b/csharp/ql/lib/change-notes/released/0.8.11.md @@ -0,0 +1,3 @@ +## 0.8.11 + +No user-facing changes. diff --git a/csharp/ql/lib/change-notes/released/0.8.12.md b/csharp/ql/lib/change-notes/released/0.8.12.md new file mode 100644 index 00000000000..bc91afe9c1e --- /dev/null +++ b/csharp/ql/lib/change-notes/released/0.8.12.md @@ -0,0 +1,3 @@ +## 0.8.12 + +No user-facing changes. diff --git a/csharp/ql/lib/change-notes/released/0.9.0.md b/csharp/ql/lib/change-notes/released/0.9.0.md new file mode 100644 index 00000000000..32e8e35d76d --- /dev/null +++ b/csharp/ql/lib/change-notes/released/0.9.0.md @@ -0,0 +1,17 @@ +## 0.9.0 + +### Breaking Changes + +* The CIL extractor has been deleted and the corresponding extractor option `cil` has been removed. It is no longer possible to do CIL extraction. +* The QL library C# classes no longer extend their corresponding `DotNet` classes. Furthermore, CIL related data flow functionality has been deleted and all `DotNet` and `CIL` related classes have been deprecated. This effectively means that it no longer has any effect to enable CIL extraction. + +### Minor Analysis Improvements + +* Added new source models for the `Dapper` package. These models can be enabled by enabling the `database` threat model. +* Additional models have been added for `System.IO`. These are primarily source models with the `file` threat model, and summaries related to reading from a file or stream. +* Support for C# 12 / .NET8. +* Added the `windows-registry` source kind and threat model to represent values which come from the registry on Windows. +* The models for `System.Net.Http.HttpRequestMessage` have been modified to better model the flow of tainted URIs. +* The .NET standard libraries APIs for accessing command line arguments and environment variables have been modeled using the `commandargs` and `environment` threat models. +* The `cs/assembly-path-injection` query has been modified so that it's sources rely on `ThreatModelFlowSource`. In order to restore results from command line arguments, you should enable the `commandargs` threat model. +* The models for `System.IO.TextReader` have been modified to better model the flow of tainted text from a `TextReader`. diff --git a/csharp/ql/lib/codeql-pack.release.yml b/csharp/ql/lib/codeql-pack.release.yml index 5290c29b7fe..8b9fc185202 100644 --- a/csharp/ql/lib/codeql-pack.release.yml +++ b/csharp/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.8.9 +lastReleaseVersion: 0.9.0 diff --git a/csharp/ql/lib/ext/Dapper.model.yml b/csharp/ql/lib/ext/Dapper.model.yml index 839778e4b7b..d5305af055c 100644 --- a/csharp/ql/lib/ext/Dapper.model.yml +++ b/csharp/ql/lib/ext/Dapper.model.yml @@ -58,3 +58,54 @@ extensions: - ["Dapper", "SqlMapper", False, "QuerySingleOrDefaultAsync", "(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable)", "", "Argument[1]", "sql-injection", "manual"] - ["Dapper", "SqlMapper", False, "QuerySingleOrDefaultAsync", "(System.Data.IDbConnection,System.Type,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable)", "", "Argument[2]", "sql-injection", "manual"] - ["Dapper", "SqlMapper", False, "QuerySingleOrDefaultAsync", "(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable)", "", "Argument[1]", "sql-injection", "manual"] + - addsTo: + pack: codeql/csharp-all + extensible: sourceModel + data: + - ["Dapper", "SqlMapper", False, "ExecuteReader", "", "", "ReturnValue", "database", "manual"] + - ["Dapper", "SqlMapper", False, "ExecuteReaderAsync", "", "", "ReturnValue", "database", "manual"] + - ["Dapper", "SqlMapper", False, "ExecuteScalar", "", "", "ReturnValue", "database", "manual"] + - ["Dapper", "SqlMapper", False, "ExecuteScalar", "", "", "ReturnValue", "database", "manual"] + - ["Dapper", "SqlMapper", False, "ExecuteScalarAsync", "", "", "ReturnValue", "database", "manual"] + - ["Dapper", "SqlMapper", False, "ExecuteScalarAsync", "", "", "ReturnValue", "database", "manual"] + - ["Dapper", "SqlMapper", False, "Query", "", "", "ReturnValue", "database", "manual"] + - ["Dapper", "SqlMapper", False, "Query", "", "", "ReturnValue", "database", "manual"] + - ["Dapper", "SqlMapper", False, "Query", "", "", "ReturnValue", "database", "manual"] + - ["Dapper", "SqlMapper", False, "Query", "", "", "ReturnValue", "database", "manual"] + - ["Dapper", "SqlMapper", False, "Query", "", "", "ReturnValue", "database", "manual"] + - ["Dapper", "SqlMapper", False, "Query", "", "", "ReturnValue", "database", "manual"] + - ["Dapper", "SqlMapper", False, "Query", "", "", "ReturnValue", "database", "manual"] + - ["Dapper", "SqlMapper", False, "Query", "", "", "ReturnValue", "database", "manual"] + - ["Dapper", "SqlMapper", False, "Query", "", "", "ReturnValue", "database", "manual"] + - ["Dapper", "SqlMapper", False, "QueryAsync", "", "", "ReturnValue", "database", "manual"] + - ["Dapper", "SqlMapper", False, "QueryAsync", "", "", "ReturnValue", "database", "manual"] + - ["Dapper", "SqlMapper", False, "QueryAsync", "", "", "ReturnValue", "database", "manual"] + - ["Dapper", "SqlMapper", False, "QueryAsync", "", "", "ReturnValue", "database", "manual"] + - ["Dapper", "SqlMapper", False, "QueryAsync", "", "", "ReturnValue", "database", "manual"] + - ["Dapper", "SqlMapper", False, "QueryAsync", "", "", "ReturnValue", "database", "manual"] + - ["Dapper", "SqlMapper", False, "QueryAsync", "", "", "ReturnValue", "database", "manual"] + - ["Dapper", "SqlMapper", False, "QueryAsync", "", "", "ReturnValue", "database", "manual"] + - ["Dapper", "SqlMapper", False, "QueryAsync", "", "", "ReturnValue", "database", "manual"] + - ["Dapper", "SqlMapper", False, "QueryFirst", "", "", "ReturnValue", "database", "manual"] + - ["Dapper", "SqlMapper", False, "QueryFirst", "", "", "ReturnValue", "database", "manual"] + - ["Dapper", "SqlMapper", False, "QueryFirstAsync", "", "", "ReturnValue", "database", "manual"] + - ["Dapper", "SqlMapper", False, "QueryFirstAsync", "", "", "ReturnValue", "database", "manual"] + - ["Dapper", "SqlMapper", False, "QueryFirstOrDefault", "", "", "ReturnValue", "database", "manual"] + - ["Dapper", "SqlMapper", False, "QueryFirstOrDefault", "", "", "ReturnValue", "database", "manual"] + - ["Dapper", "SqlMapper", False, "QueryFirstOrDefaultAsync", "", "", "ReturnValue", "database", "manual"] + - ["Dapper", "SqlMapper", False, "QueryFirstOrDefaultAsync", "", "", "ReturnValue", "database", "manual"] + - ["Dapper", "SqlMapper", False, "QueryMultiple", "", "", "ReturnValue", "database", "manual"] + - ["Dapper", "SqlMapper", False, "QueryMultipleAsync", "", "", "ReturnValue", "database", "manual"] + - ["Dapper", "SqlMapper", False, "QuerySingle", "", "", "ReturnValue", "database", "manual"] + - ["Dapper", "SqlMapper", False, "QuerySingle", "", "", "ReturnValue", "database", "manual"] + - ["Dapper", "SqlMapper", False, "QuerySingleAsync", "", "", "ReturnValue", "database", "manual"] + - ["Dapper", "SqlMapper", False, "QuerySingleAsync", "", "", "ReturnValue", "database", "manual"] + - ["Dapper", "SqlMapper", False, "QuerySingleOrDefault", "", "", "ReturnValue", "database", "manual"] + - ["Dapper", "SqlMapper", False, "QuerySingleOrDefault", "", "", "ReturnValue", "database", "manual"] + - ["Dapper", "SqlMapper", False, "QuerySingleOrDefaultAsync", "", "", "ReturnValue", "database", "manual"] + - ["Dapper", "SqlMapper", False, "QuerySingleOrDefaultAsync", "", "", "ReturnValue", "database", "manual"] + - addsTo: + pack: codeql/csharp-all + extensible: summaryModel + data: + - ["Dapper", "SqlMapper", False, "AsList", "(System.Collections.Generic.IEnumerable)", "", "Argument[0].Element", "ReturnValue.Element", "value", "manual"] diff --git a/csharp/ql/lib/ext/System.Diagnostics.model.yml b/csharp/ql/lib/ext/System.Diagnostics.model.yml index 5a9eb7ced62..a05de14671f 100644 --- a/csharp/ql/lib/ext/System.Diagnostics.model.yml +++ b/csharp/ql/lib/ext/System.Diagnostics.model.yml @@ -19,3 +19,12 @@ extensions: - ["System.Diagnostics", "TraceListenerCollection", False, "get_Item", "(System.Int32)", "", "Argument[this].Element", "ReturnValue", "value", "manual"] - ["System.Diagnostics", "TraceListenerCollection", False, "get_Item", "(System.String)", "", "Argument[this].Element", "ReturnValue", "value", "manual"] - ["System.Diagnostics", "TraceListenerCollection", False, "set_Item", "(System.Int32,System.Diagnostics.TraceListener)", "", "Argument[1]", "Argument[this].Element", "value", "manual"] + - addsTo: + pack: codeql/csharp-all + extensible: neutralModel + data: + - ["System.Diagnostics", "ProcessStartInfo", "set_Arguments", "(System.String)", "summary", "manual"] + - ["System.Diagnostics", "ProcessStartInfo", "set_FileName", "(System.String)", "summary", "manual"] + - ["System.Diagnostics", "ProcessStartInfo", "set_UserName", "(System.String)", "summary", "manual"] + - ["System.Diagnostics", "ProcessStartInfo", "set_Verb", "(System.String)", "summary", "manual"] + - ["System.Diagnostics", "ProcessStartInfo", "set_WorkingDirectory", "(System.String)", "summary", "manual"] diff --git a/csharp/ql/lib/ext/System.IO.model.yml b/csharp/ql/lib/ext/System.IO.model.yml index e1120d5684e..d78fb8e1e2d 100644 --- a/csharp/ql/lib/ext/System.IO.model.yml +++ b/csharp/ql/lib/ext/System.IO.model.yml @@ -7,11 +7,25 @@ extensions: - ["System.IO", "File", False, "Create", "", "", "ReturnValue", "file-write", "manual"] - ["System.IO", "File", False, "CreateText", "", "", "ReturnValue", "file-write", "manual"] - ["System.IO", "File", False, "Open", "", "", "ReturnValue", "file-write", "manual"] + - ["System.IO", "File", False, "Open", "", "", "ReturnValue", "file", "manual"] + - ["System.IO", "File", False, "OpenRead", "", "", "ReturnValue", "file", "manual"] + - ["System.IO", "File", False, "OpenText", "", "", "ReturnValue", "file", "manual"] - ["System.IO", "File", False, "OpenWrite", "", "", "ReturnValue", "file-write", "manual"] + - ["System.IO", "File", False, "ReadAllBytes", "", "", "ReturnValue", "file", "manual"] + - ["System.IO", "File", False, "ReadAllBytesAsync", "", "", "ReturnValue", "file", "manual"] + - ["System.IO", "File", False, "ReadAllLines", "", "", "ReturnValue", "file", "manual"] + - ["System.IO", "File", False, "ReadAllLinesAsync", "", "", "ReturnValue", "file", "manual"] + - ["System.IO", "File", False, "ReadAllText", "", "", "ReturnValue", "file", "manual"] + - ["System.IO", "File", False, "ReadAllTextAsync", "", "", "ReturnValue", "file", "manual"] + - ["System.IO", "File", False, "ReadLines", "", "", "ReturnValue", "file", "manual"] + - ["System.IO", "File", False, "ReadLinesAsync", "", "", "ReturnValue", "file", "manual"] - ["System.IO", "FileInfo", False, "AppendText", "", "", "ReturnValue", "file-write", "manual"] - ["System.IO", "FileInfo", False, "Create", "", "", "ReturnValue", "file-write", "manual"] - ["System.IO", "FileInfo", False, "CreateText", "", "", "ReturnValue", "file-write", "manual"] - ["System.IO", "FileInfo", False, "Open", "", "", "ReturnValue", "file-write", "manual"] + - ["System.IO", "FileInfo", False, "Open", "", "", "ReturnValue", "file", "manual"] + - ["System.IO", "FileInfo", False, "OpenRead", "", "", "ReturnValue", "file", "manual"] + - ["System.IO", "FileInfo", False, "OpenText", "", "", "ReturnValue", "file", "manual"] - ["System.IO", "FileInfo", False, "OpenWrite", "", "", "ReturnValue", "file-write", "manual"] - ["System.IO", "FileStream", False, "FileStream", "", "", "Argument[this]", "file", "manual"] - ["System.IO", "FileStream", False, "FileStream", "", "", "Argument[this]", "file-write", "manual"] @@ -25,6 +39,8 @@ extensions: pack: codeql/csharp-all extensible: summaryModel data: + - ["System.IO", "BufferedStream", False, "BufferedStream", "(System.IO.Stream)", "", "Argument[0]", "Argument[this]", "taint", "manual"] + - ["System.IO", "BufferedStream", False, "BufferedStream", "(System.IO.Stream,System.Int32)", "", "Argument[0]", "Argument[this]", "taint", "manual"] - ["System.IO", "FileStream", False, "FileStream", "(System.String,System.IO.FileMode)", "", "Argument[0]", "Argument[this]", "taint", "manual"] - ["System.IO", "FileStream", False, "FileStream", "(System.String,System.IO.FileMode,System.IO.FileAccess)", "", "Argument[0]", "Argument[this]", "taint", "manual"] - ["System.IO", "FileStream", False, "FileStream", "(System.String,System.IO.FileMode,System.IO.FileAccess,System.IO.FileShare)", "", "Argument[0]", "Argument[this]", "taint", "manual"] @@ -69,8 +85,16 @@ extensions: - ["System.IO", "Stream", True, "CopyToAsync", "(System.IO.Stream,System.Int32,System.Threading.CancellationToken)", "", "Argument[this]", "Argument[0]", "taint", "manual"] - ["System.IO", "Stream", False, "CopyToAsync", "(System.IO.Stream,System.Threading.CancellationToken)", "", "Argument[this]", "Argument[0]", "taint", "manual"] - ["System.IO", "Stream", True, "Read", "(System.Byte[],System.Int32,System.Int32)", "", "Argument[this]", "Argument[0].Element", "taint", "manual"] + - ["System.IO", "Stream", True, "Read", "(System.Span)", "", "Argument[this]", "Argument[0].Element", "taint", "manual"] - ["System.IO", "Stream", False, "ReadAsync", "(System.Byte[],System.Int32,System.Int32)", "", "Argument[this]", "Argument[0].Element", "taint", "manual"] - ["System.IO", "Stream", True, "ReadAsync", "(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken)", "", "Argument[this]", "Argument[0].Element", "taint", "manual"] + # Post-update nodes for `Memory` are currently unsupported. This model is provided for completeness + - ["System.IO", "Stream", True, "ReadAsync", "(System.Memory,System.Threading.CancellationToken)", "", "Argument[this]", "Argument[0].Element", "taint", "manual"] + - ["System.IO", "Stream", True, "ReadAtLeast", "(System.Span,System.Int32,System.Boolean)", "", "Argument[this]", "Argument[0].Element", "taint", "manual"] + # Post-update nodes for `Memory` are currently unsupported. This model is provided for completeness + - ["System.IO", "Stream", True, "ReadAtLeastAsync", "(System.Memory,System.Int32,System.Boolean,System.Threading.CancellationToken)", "", "Argument[this]", "Argument[0]", "taint", "manual"] + - ["System.IO", "Stream", True, "ReadExactly", "(System.Span)", "", "Argument[this]", "Argument[0].Element", "taint", "manual"] + - ["System.IO", "Stream", True, "ReadExactly", "(System.Byte[],System.Int32,System.Int32)", "", "Argument[this]", "Argument[0].Element", "taint", "manual"] - ["System.IO", "Stream", True, "Write", "(System.Byte[],System.Int32,System.Int32)", "", "Argument[0].Element", "Argument[this]", "taint", "manual"] - ["System.IO", "Stream", False, "WriteAsync", "(System.Byte[],System.Int32,System.Int32)", "", "Argument[0].Element", "Argument[this]", "taint", "manual"] - ["System.IO", "Stream", True, "WriteAsync", "(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken)", "", "Argument[0].Element", "Argument[this]", "taint", "manual"] diff --git a/csharp/ql/lib/qlpack.yml b/csharp/ql/lib/qlpack.yml index d75ea3c6320..a58d2bc71ee 100644 --- a/csharp/ql/lib/qlpack.yml +++ b/csharp/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-all -version: 0.8.10-dev +version: 0.9.1-dev groups: csharp dbscheme: semmlecode.csharp.dbscheme extractor: csharp @@ -13,6 +13,7 @@ dependencies: codeql/threat-models: ${workspace} codeql/tutorial: ${workspace} codeql/util: ${workspace} + codeql/xml: ${workspace} dataExtensions: - ext/*.model.yml - ext/generated/*.model.yml diff --git a/csharp/ql/lib/semmle/code/csharp/Element.qll b/csharp/ql/lib/semmle/code/csharp/Element.qll index 2c69912c993..a48241a1408 100644 --- a/csharp/ql/lib/semmle/code/csharp/Element.qll +++ b/csharp/ql/lib/semmle/code/csharp/Element.qll @@ -102,25 +102,8 @@ class NamedElement extends Element, @named_element { final predicate hasName(string name) { name = this.getName() } /** - * Gets the fully qualified name of this element, for example the - * fully qualified name of `M` on line 3 is `N.C.M` in + * DEPRECATED: Use `hasFullyQualifiedName` instead. * - * ```csharp - * namespace N { - * class C { - * void M(int i, string s) { } - * } - * } - * ``` - */ - cached - deprecated final string getQualifiedName() { - exists(string qualifier, string name | this.hasQualifiedName(qualifier, name) | - if qualifier = "" then result = name else result = qualifier + "." + name - ) - } - - /** * Gets the fully qualified name of this element, for example the * fully qualified name of `M` on line 3 is `N.C.M` in * @@ -135,21 +118,39 @@ class NamedElement extends Element, @named_element { * Unbound generic types, such as `IList`, are represented as * ``System.Collections.Generic.IList`1``. */ - cached - final string getFullyQualifiedName() { + deprecated final string getFullyQualifiedName() { exists(string qualifier, string name | this.hasFullyQualifiedName(qualifier, name) | if qualifier = "" then result = name else result = qualifier + "." + name ) } /** - * DEPRECATED: Use `hasFullyQualifiedName` instead. + * INTERNAL: Do not use. * - * Holds if this element has the qualified name `qualifier`.`name`. + * This is intended for DEBUG ONLY. + * Constructing the fully qualified name for all elements in a large codebase + * puts severe stress on the string pool. + * + * Gets the fully qualified name of this element, for example the + * fully qualified name of `M` on line 3 is `N.C.M` in + * + * ```csharp + * namespace N { + * class C { + * void M(int i, string s) { } + * } + * } + * ``` + * + * Unbound generic types, such as `IList`, are represented as + * ``System.Collections.Generic.IList`1``. */ - cached - deprecated predicate hasQualifiedName(string qualifier, string name) { - qualifier = "" and name = this.getName() + bindingset[this] + pragma[inline_late] + final string getFullyQualifiedNameDebug() { + exists(string qualifier, string name | this.hasFullyQualifiedName(qualifier, name) | + if qualifier = "" then result = name else result = qualifier + "." + name + ) } /** Holds if this element has the fully qualified name `qualifier`.`name`. */ diff --git a/csharp/ql/lib/semmle/code/csharp/Member.qll b/csharp/ql/lib/semmle/code/csharp/Member.qll index 1be091170e3..3427d4ea089 100644 --- a/csharp/ql/lib/semmle/code/csharp/Member.qll +++ b/csharp/ql/lib/semmle/code/csharp/Member.qll @@ -71,17 +71,11 @@ class Declaration extends NamedElement, @declaration { override string toString() { result = this.getName() } - deprecated override predicate hasQualifiedName(string qualifier, string name) { - QualifiedName::hasQualifiedName(this, qualifier, name) - } - override predicate hasFullyQualifiedName(string qualifier, string name) { QualifiedName::hasQualifiedName(this, qualifier, name) } /** - * DEPRECATED: Use `getFullyQualifiedNameWithTypes` instead. - * * Gets the fully qualified name of this declaration, including types, for example * the fully qualified name with types of `M` on line 3 is `N.C.M(int, string)` in * @@ -93,33 +87,13 @@ class Declaration extends NamedElement, @declaration { * } * ``` */ - deprecated string getQualifiedNameWithTypes() { - exists(string qual | - qual = this.getDeclaringType().getQualifiedName() and + deprecated string getFullyQualifiedNameWithTypes() { + exists(string fullqual, string qual, string name | + this.getDeclaringType().hasFullyQualifiedName(qual, name) and + fullqual = getQualifiedName(qual, name) and if this instanceof NestedType - then result = qual + "+" + this.toStringWithTypes() - else result = qual + "." + this.toStringWithTypes() - ) - } - - /** - * Gets the fully qualified name of this declaration, including types, for example - * the fully qualified name with types of `M` on line 3 is `N.C.M(int, string)` in - * - * ```csharp - * namespace N { - * class C { - * void M(int i, string s) { } - * } - * } - * ``` - */ - string getFullyQualifiedNameWithTypes() { - exists(string qual | - qual = this.getDeclaringType().getFullyQualifiedName() and - if this instanceof NestedType - then result = qual + "+" + this.toStringWithTypes() - else result = qual + "." + this.toStringWithTypes() + then result = fullqual + "+" + this.toStringWithTypes() + else result = fullqual + "." + this.toStringWithTypes() ) } @@ -263,17 +237,6 @@ class Member extends Modifiable, @member { /** Gets an access to this member. */ MemberAccess getAnAccess() { result.getTarget() = this } - /** - * DEPRECATED: Use `hasFullyQualifiedName` instead. - * - * Holds if this member has name `name` and is defined in type `type` - * with namespace `namespace`. - */ - cached - deprecated final predicate hasQualifiedName(string namespace, string type, string name) { - QualifiedName::hasQualifiedName(this, namespace, type, name) - } - /** * Holds if this member has name `name` and is defined in type `type` * with namespace `namespace`. diff --git a/csharp/ql/lib/semmle/code/csharp/Namespace.qll b/csharp/ql/lib/semmle/code/csharp/Namespace.qll index 002ce444b3f..383fe8ab2a8 100644 --- a/csharp/ql/lib/semmle/code/csharp/Namespace.qll +++ b/csharp/ql/lib/semmle/code/csharp/Namespace.qll @@ -38,16 +38,6 @@ class Namespace extends TypeContainer, Declaration, @namespace { parent_namespace(result, this) } - /** - * Holds if this namespace has the qualified name `qualifier`.`name`. - * - * For example if the qualified name is `System.Collections.Generic`, then - * `qualifier`=`System.Collections` and `name`=`Generic`. - */ - deprecated override predicate hasQualifiedName(string qualifier, string name) { - namespaceHasQualifiedName(this, qualifier, name) - } - /** * Holds if this namespace has the qualified name `qualifier`.`name`. * diff --git a/csharp/ql/lib/semmle/code/csharp/PrintAst.qll b/csharp/ql/lib/semmle/code/csharp/PrintAst.qll index eb5ca6b4727..281e157975a 100644 --- a/csharp/ql/lib/semmle/code/csharp/PrintAst.qll +++ b/csharp/ql/lib/semmle/code/csharp/PrintAst.qll @@ -32,7 +32,10 @@ private predicate shouldPrint(Element e, Location l) { } private predicate isImplicitExpression(ControlFlowElement element) { - element.(Expr).isImplicit() and not exists(element.getAChild()) + element.(Expr).isImplicit() and + not element instanceof CastExpr and + not element.(OperatorCall).getTarget() instanceof ImplicitConversionOperator and + not element instanceof ElementInitializer } private predicate isFilteredCompilerGenerated(Declaration d) { @@ -291,18 +294,6 @@ class ControlFlowElementNode extends ElementNode { controlFlowElement = element and // Removing implicit expressions not isImplicitExpression(element) and - // Removing extra nodes that are generated for an `AssignOperation` - not exists(AssignOperation ao | - ao.hasExpandedAssignment() and - ( - ao.getExpandedAssignment() = controlFlowElement or - ao.getExpandedAssignment().getRValue() = controlFlowElement or - ao.getExpandedAssignment().getRValue().(BinaryOperation).getLeftOperand() = - controlFlowElement.getParent*() or - ao.getExpandedAssignment().getRValue().(OperatorCall).getChild(0) = - controlFlowElement.getParent*() - ) - ) and not isNotNeeded(element.getParent+()) and // LambdaExpr is both a Callable and a ControlFlowElement, // print it with the more specific CallableNode @@ -429,7 +420,7 @@ final class DeclarationWithAccessorsNode extends ElementNode { result.(ParametersNode).getParameterizable() = declaration or childIndex = 2 and - result.(ElementNode).getElement() = declaration.(Property).getInitializer().getParent() + result.(ElementNode).getElement() = declaration.(Property).getInitializer() or result.(ElementNode).getElement() = rank[childIndex - 2](Element a, string file, int line, int column, string name | @@ -462,12 +453,7 @@ final class FieldNode extends ElementNode { result.(AttributesNode).getAttributable() = field or childIndex = 1 and - field.hasInitializer() and - ( - if field.getDeclaringType() instanceof Enum - then result.(ElementNode).getElement() = field.getInitializer() - else result.(ElementNode).getElement() = field.getInitializer().getParent() - ) + result.(ElementNode).getElement() = field.getInitializer() } } diff --git a/csharp/ql/lib/semmle/code/csharp/Variable.qll b/csharp/ql/lib/semmle/code/csharp/Variable.qll index 4bef47056ef..982b4e4743b 100644 --- a/csharp/ql/lib/semmle/code/csharp/Variable.qll +++ b/csharp/ql/lib/semmle/code/csharp/Variable.qll @@ -408,7 +408,7 @@ class Field extends Variable, AssignableMember, Attributable, TopLevelExprParent * } * ``` */ - override Expr getInitializer() { result = this.getChildExpr(0).getChildExpr(0) } + final override Expr getInitializer() { result = this.getChildExpr(0).getChildExpr(0) } /** * Holds if this field has an initial value. For example, the initial @@ -515,6 +515,4 @@ class EnumConstant extends MemberConstant { * ``` */ predicate hasExplicitValue() { exists(this.getInitializer()) } - - override Expr getInitializer() { result = this.getChildExpr(0) } } diff --git a/csharp/ql/lib/semmle/code/csharp/XML.qll b/csharp/ql/lib/semmle/code/csharp/XML.qll index 65bdd7b7cc1..54157809260 100644 --- a/csharp/ql/lib/semmle/code/csharp/XML.qll +++ b/csharp/ql/lib/semmle/code/csharp/XML.qll @@ -3,305 +3,67 @@ */ import semmle.files.FileSystem +private import codeql.xml.Xml -private class TXmlLocatable = - @xmldtd or @xmlelement or @xmlattribute or @xmlnamespace or @xmlcomment or @xmlcharacters; +private module Input implements InputSig { + class XmlLocatableBase = @xmllocatable or @xmlnamespaceable; -/** An XML element that has a location. */ -class XmlLocatable extends @xmllocatable, TXmlLocatable { - /** Gets the source location for this element. */ - Location getLocation() { xmllocations(this, result) } + predicate xmllocations_(XmlLocatableBase e, Location loc) { xmllocations(e, loc) } - /** - * Holds if this element is at the specified location. - * The location spans column `startcolumn` of line `startline` to - * column `endcolumn` of line `endline` in file `filepath`. - * For more information, see - * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). - */ - predicate hasLocationInfo( - string filepath, int startline, int startcolumn, int endline, int endcolumn + class XmlParentBase = @xmlparent; + + class XmlNamespaceableBase = @xmlnamespaceable; + + class XmlElementBase = @xmlelement; + + class XmlFileBase = File; + + predicate xmlEncoding_(XmlFileBase f, string enc) { xmlEncoding(f, enc) } + + class XmlDtdBase = @xmldtd; + + predicate xmlDTDs_(XmlDtdBase e, string root, string publicId, string systemId, XmlFileBase file) { + xmlDTDs(e, root, publicId, systemId, file) + } + + predicate xmlElements_( + XmlElementBase e, string name, XmlParentBase parent, int idx, XmlFileBase file ) { - exists(File f, Location l | l = this.getLocation() | - locations_default(l, f, startline, startcolumn, endline, endcolumn) and - filepath = f.getAbsolutePath() - ) + xmlElements(e, name, parent, idx, file) } - /** Gets a textual representation of this element. */ - string toString() { none() } // overridden in subclasses -} + class XmlAttributeBase = @xmlattribute; -/** - * 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`; - // the type `@xmlparent` currently also includes non-XML files - this instanceof @xmlelement or xmlEncoding(this, _) + predicate xmlAttrs_( + XmlAttributeBase e, XmlElementBase elementid, string name, string value, int idx, + XmlFileBase file + ) { + xmlAttrs(e, elementid, name, value, idx, file) } - /** - * Gets a printable representation of this XML parent. - * (Intended to be overridden in subclasses.) - */ - string getName() { none() } // overridden in subclasses + class XmlNamespaceBase = @xmlnamespace; - /** Gets the file to which this XML parent belongs. */ - 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, _) } - - /** Gets a child element of this XML parent. */ - 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) } - - /** Gets a comment that is a child of this XML parent. */ - XmlComment getAComment() { xmlComments(result, _, this, _) } - - /** Gets a character sequence that is a child of this XML parent. */ - XmlCharacters getACharactersSet() { xmlChars(result, _, this, _, _, _) } - - /** 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, _, _)) } - - /** Gets the number of places in the body of this XML parent where text occurs. */ - int getNumberOfCharacterSets() { result = count(int pos | xmlChars(_, _, this, pos, _, _)) } - - /** - * Gets the result of appending all the character sequences of this XML parent from - * left to right, separated by a space. - */ - string allCharactersString() { - result = - concat(string chars, int pos | xmlChars(_, chars, this, pos, _, _) | chars, " " order by pos) + predicate xmlNs_(XmlNamespaceBase e, string prefixName, string uri, XmlFileBase file) { + xmlNs(e, prefixName, uri, file) } - /** Gets the text value contained in this XML parent. */ - string getTextValue() { result = this.allCharactersString() } + predicate xmlHasNs_(XmlNamespaceableBase e, XmlNamespaceBase ns, XmlFileBase file) { + xmlHasNs(e, ns, file) + } - /** Gets a printable representation of this XML parent. */ - string toString() { result = this.getName() } -} + class XmlCommentBase = @xmlcomment; -/** An XML file. */ -class XmlFile extends XmlParent, File { - XmlFile() { xmlEncoding(this, _) } + predicate xmlComments_(XmlCommentBase e, string text, XmlParentBase parent, XmlFileBase file) { + xmlComments(e, text, parent, file) + } - /** Gets a printable representation of this XML file. */ - override string toString() { result = this.getName() } + class XmlCharactersBase = @xmlcharacters; - /** Gets the name of this XML file. */ - override string getName() { result = File.super.getAbsolutePath() } - - /** Gets the encoding of this XML file. */ - string getEncoding() { xmlEncoding(this, result) } - - /** Gets the XML file itself. */ - override XmlFile getFile() { result = this } - - /** Gets a top-most element in an XML file. */ - XmlElement getARootElement() { result = this.getAChild() } - - /** Gets a DTD associated with this XML file. */ - XmlDtd getADtd() { xmlDTDs(result, _, _, _, this) } -} - -/** - * An XML document type definition (DTD). - * - * Example: - * - * ``` - * - * - * - * ``` - */ -class XmlDtd extends XmlLocatable, @xmldtd { - /** Gets the name of the root element of this DTD. */ - string getRoot() { xmlDTDs(this, result, _, _, _) } - - /** Gets the public ID of this DTD. */ - string getPublicId() { xmlDTDs(this, _, result, _, _) } - - /** Gets the system ID of this DTD. */ - string getSystemId() { xmlDTDs(this, _, _, result, _) } - - /** Holds if this DTD is public. */ - predicate isPublic() { not xmlDTDs(this, _, "", _, _) } - - /** Gets the parent of this DTD. */ - XmlParent getParent() { xmlDTDs(this, _, _, _, result) } - - override string toString() { - this.isPublic() and - result = this.getRoot() + " PUBLIC '" + this.getPublicId() + "' '" + this.getSystemId() + "'" - or - not this.isPublic() and - result = this.getRoot() + " SYSTEM '" + this.getSystemId() + "'" + predicate xmlChars_( + XmlCharactersBase e, string text, XmlParentBase parent, int idx, int isCDATA, XmlFileBase file + ) { + xmlChars(e, text, parent, idx, isCDATA, file) } } -/** - * An XML element in an XML file. - * - * Example: - * - * ``` - * - * - * ``` - */ -class XmlElement extends @xmlelement, XmlParent, XmlLocatable { - /** Holds if this XML element has the given `name`. */ - predicate hasName(string name) { name = this.getName() } - - /** Gets the name of this XML element. */ - override string getName() { xmlElements(this, result, _, _, _) } - - /** Gets the XML file in which this XML element occurs. */ - override XmlFile getFile() { xmlElements(this, _, _, _, result) } - - /** Gets the parent of this XML element. */ - XmlParent getParent() { xmlElements(this, _, result, _, _) } - - /** Gets the index of this XML element among its parent's children. */ - int getIndex() { xmlElements(this, _, _, result, _) } - - /** Holds if this XML element has a namespace. */ - predicate hasNamespace() { xmlHasNs(this, _, _) } - - /** Gets the namespace of this XML element, if any. */ - XmlNamespace getNamespace() { xmlHasNs(this, result, _) } - - /** Gets the index of this XML element among its parent's children. */ - int getElementPositionIndex() { xmlElements(this, _, _, result, _) } - - /** Gets the depth of this element within the XML file tree structure. */ - override int getDepth() { result = this.getParent().getDepth() + 1 } - - /** Gets an XML attribute of this XML element. */ - 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 } - - /** Holds if this XML element has an attribute with the specified `name`. */ - predicate hasAttribute(string name) { exists(this.getAttribute(name)) } - - /** Gets the value of the attribute with the specified `name`, if any. */ - string getAttributeValue(string name) { result = this.getAttribute(name).getValue() } - - /** Gets a printable representation of this XML element. */ - override string toString() { result = this.getName() } -} - -/** - * An attribute that occurs inside an XML element. - * - * Examples: - * - * ``` - * package="com.example.exampleapp" - * android:versionCode="1" - * ``` - */ -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, _, _, _, _) } - - /** Holds if this attribute has a namespace. */ - predicate hasNamespace() { xmlHasNs(this, _, _) } - - /** Gets the namespace of this attribute, if any. */ - XmlNamespace getNamespace() { xmlHasNs(this, result, _) } - - /** Gets the value of this attribute. */ - string getValue() { xmlAttrs(this, _, _, result, _, _) } - - /** Gets a printable representation of this XML attribute. */ - override string toString() { result = this.getName() + "=" + this.getValue() } -} - -/** - * A namespace used in an XML file. - * - * Example: - * - * ``` - * xmlns:android="http://schemas.android.com/apk/res/android" - * ``` - */ -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, _) } - - /** Holds if this namespace has no prefix. */ - predicate isDefault() { this.getPrefix() = "" } - - override string toString() { - this.isDefault() and result = this.getUri() - or - not this.isDefault() and result = this.getPrefix() + ":" + this.getUri() - } -} - -/** - * A comment in an XML file. - * - * Example: - * - * ``` - * - * ``` - */ -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, _) } - - /** Gets a printable representation of this XML comment. */ - override string toString() { result = this.getText() } -} - -/** - * A sequence of characters that occurs between opening and - * closing tags of an XML element, excluding other elements. - * - * Example: - * - * ``` - * This is a sequence of characters. - * ``` - */ -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, _, _, _) } - - /** Holds if this character sequence is CDATA. */ - predicate isCDATA() { xmlChars(this, _, _, _, 1, _) } - - /** Gets a printable representation of this XML character sequence. */ - override string toString() { result = this.getCharacters() } -} +import Make diff --git a/csharp/ql/lib/semmle/code/csharp/commons/QualifiedName.qll b/csharp/ql/lib/semmle/code/csharp/commons/QualifiedName.qll index eba0fb10c7c..417dc137027 100644 --- a/csharp/ql/lib/semmle/code/csharp/commons/QualifiedName.qll +++ b/csharp/ql/lib/semmle/code/csharp/commons/QualifiedName.qll @@ -219,3 +219,28 @@ predicate splitQualifiedName(string qualifiedName, string qualifier, string name name = qualifiedName ) } + +/** + * INTERNAL: Do not use. + * + * Gets the fully qualified name of this declaration, including types, for example + * the fully qualified name with types of `M` on line 3 is `N.C.M(int, string)` in + * + * ```csharp + * namespace N { + * class C { + * void M(int i, string s) { } + * } + * } + * ``` + */ +bindingset[d] +string getFullyQualifiedNameWithTypes(Declaration d) { + exists(string fullqual, string qual, string name | + d.getDeclaringType().hasFullyQualifiedName(qual, name) and + fullqual = getQualifiedName(qual, name) and + if d instanceof NestedType + then result = fullqual + "+" + d.toStringWithTypes() + else result = fullqual + "." + d.toStringWithTypes() + ) +} diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/SSA.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/SSA.qll index 673bd1a5638..0d79eafdf5c 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/SSA.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/SSA.qll @@ -120,7 +120,7 @@ module Ssa { result = prefix + "." + this.getAssignable() | if f.(Modifiable).isStatic() - then prefix = f.getDeclaringType().getFullyQualifiedName() + then prefix = f.getDeclaringType().getName() else prefix = "this" ) } 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 f4aba4fdfd0..bd63689c8ee 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll @@ -1997,6 +1997,8 @@ class FieldOrProperty extends Assignable, Modifiable { or p.getDeclaringType() instanceof AnonymousClass ) + or + p.fromLibrary() ) } diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/ExternalFlow.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/ExternalFlow.qll index 5c985759b78..3a09ec2e51b 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/ExternalFlow.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/ExternalFlow.qll @@ -47,15 +47,13 @@ * * For sources, an `output` can be either "", "Argument[n]", "Argument[n1..n2]", * "Parameter", "Parameter[n]", "Parameter[n1..n2]", or "ReturnValue": - * - "": Selects a read of a selected field, property, or parameter. + * - "": Selects a read of a selected field or property. * - "Argument[n]": Selects the post-update value of an argument in a call to the * selected element. That is, the value of the argument after the call returns. * The arguments are zero-indexed, and `this` specifies the qualifier. * - "Argument[n1..n2]": Similar to "Argument[n]" but select any argument in * the given range. The range is inclusive at both ends. * - "Parameter": Selects the value of a parameter of the selected element. - * "Parameter" is also allowed in case the selected element is already a - * parameter itself. * - "Parameter[n]": Similar to "Parameter" but restricted to a specific * numbered parameter (zero-indexed, and `this` specifies the value of `this`). * - "Parameter[n1..n2]": Similar to "Parameter[n]" but selects any parameter @@ -395,14 +393,14 @@ Declaration interpretElement( * A callable where there exists a MaD sink model that applies to it. */ class SinkCallable extends Callable { - SinkCallable() { SourceSinkInterpretationInput::sinkElement(this, _, _) } + SinkCallable() { SourceSinkInterpretationInput::sinkElement(this, _, _, _) } } /** * A callable where there exists a MaD source model that applies to it. */ class SourceCallable extends Callable { - SourceCallable() { SourceSinkInterpretationInput::sourceElement(this, _, _) } + SourceCallable() { SourceSinkInterpretationInput::sourceElement(this, _, _, _) } } cached 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 8c76fc3d1a7..82c2a7dcd3d 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/FlowSummaryImpl.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/FlowSummaryImpl.qll @@ -3,6 +3,7 @@ */ private import csharp +private import semmle.code.csharp.commons.QualifiedName private import semmle.code.csharp.frameworks.system.linq.Expressions private import codeql.dataflow.internal.FlowSummaryImpl private import codeql.dataflow.internal.AccessPathSyntax as AccessPath @@ -42,10 +43,18 @@ module Input implements InputSig string encodeContent(ContentSet c, string arg) { c = TElementContent() and result = "Element" and arg = "" or - exists(Field f | c = TFieldContent(f) and result = "Field" and arg = f.getFullyQualifiedName()) + exists(Field f, string qualifier, string name | + c = TFieldContent(f) and + f.hasFullyQualifiedName(qualifier, name) and + arg = getQualifiedName(qualifier, name) and + result = "Field" + ) or - exists(Property p | - c = TPropertyContent(p) and result = "Property" and arg = p.getFullyQualifiedName() + exists(Property p, string qualifier, string name | + c = TPropertyContent(p) and + p.hasFullyQualifiedName(qualifier, name) and + arg = getQualifiedName(qualifier, name) and + result = "Property" ) or exists(SyntheticField f | @@ -160,20 +169,20 @@ module SourceSinkInterpretationInput implements class Element = Cs::Element; - predicate sourceElement(Element e, string output, string kind) { + predicate sourceElement(Element e, string output, string kind, Public::Provenance provenance) { exists( string namespace, string type, boolean subtypes, string name, string signature, string ext | - sourceModel(namespace, type, subtypes, name, signature, ext, output, kind, _) and + sourceModel(namespace, type, subtypes, name, signature, ext, output, kind, provenance) and e = interpretElement(namespace, type, subtypes, name, signature, ext) ) } - predicate sinkElement(Element e, string input, string kind) { + predicate sinkElement(Element e, string input, string kind, Public::Provenance provenance) { exists( string namespace, string type, boolean subtypes, string name, string signature, string ext | - sinkModel(namespace, type, subtypes, name, signature, ext, input, kind, _) and + sinkModel(namespace, type, subtypes, name, signature, ext, input, kind, provenance) and e = interpretElement(namespace, type, subtypes, name, signature, ext) ) } diff --git a/csharp/ql/lib/semmle/code/csharp/exprs/Expr.qll b/csharp/ql/lib/semmle/code/csharp/exprs/Expr.qll index 0cd3f36467c..935162523a1 100644 --- a/csharp/ql/lib/semmle/code/csharp/exprs/Expr.qll +++ b/csharp/ql/lib/semmle/code/csharp/exprs/Expr.qll @@ -67,7 +67,11 @@ class Expr extends ControlFlowElement, @expr { * Holds if this expression is generated by the compiler and does not appear * explicitly in the source code. */ - predicate isImplicit() { compiler_generated(this) } + final predicate isImplicit() { + compiler_generated(this) or + this = + any(AssignOperation op).getExpandedAssignment().getRValue().getChildExpr(0).getAChildExpr+() + } /** * Gets an expression that is the result of stripping (recursively) all diff --git a/csharp/ql/lib/semmle/code/csharp/security/dataflow/ExternalAPIsQuery.qll b/csharp/ql/lib/semmle/code/csharp/security/dataflow/ExternalAPIsQuery.qll index 3075fe53a87..a0d0ada957a 100644 --- a/csharp/ql/lib/semmle/code/csharp/security/dataflow/ExternalAPIsQuery.qll +++ b/csharp/ql/lib/semmle/code/csharp/security/dataflow/ExternalAPIsQuery.qll @@ -139,13 +139,13 @@ class ExternalApiUsedWithUntrustedData extends TExternalApi { /** Gets a textual representation of this element. */ string toString() { - exists(Callable m, int index, string indexString | + exists(Callable m, int index, string indexString, string qualifier, string name | if index = -1 then indexString = "qualifier" else indexString = "param " + index | this = TExternalApiParameter(m, index) and + m.getDeclaringType().hasFullyQualifiedName(qualifier, name) and result = - m.getDeclaringType().getFullyQualifiedName() + "." + m.toStringWithTypes() + " [" + - indexString + "]" + getQualifiedName(qualifier, name) + "." + m.toStringWithTypes() + " [" + indexString + "]" ) } } diff --git a/csharp/ql/src/API Abuse/IncorrectCompareToSignature.ql b/csharp/ql/src/API Abuse/IncorrectCompareToSignature.ql index 9f9eff6f1f6..6f6c17566bf 100644 --- a/csharp/ql/src/API Abuse/IncorrectCompareToSignature.ql +++ b/csharp/ql/src/API Abuse/IncorrectCompareToSignature.ql @@ -33,13 +33,13 @@ predicate compareToMethod(Method m, Type paramType) { paramType = m.getAParameter().getType() } -from Method m, RefType declaringType, Type actualParamType +from Method m, RefType declaringType, Type actualParamType, string paramTypeName where m.isSourceDeclaration() and declaringType = m.getDeclaringType() and compareToMethod(m, actualParamType) and - not implementsIComparable(declaringType, actualParamType) + not implementsIComparable(declaringType, actualParamType) and + paramTypeName = actualParamType.getName() select m, - "The parameter of this 'CompareTo' method is of type $@, but $@ does not implement 'IComparable<$@>'.", - actualParamType, actualParamType.getName(), declaringType, declaringType.getName(), - actualParamType, actualParamType.getName() + "The parameter of this 'CompareTo' method is of type '" + paramTypeName + + "', but the declaring type does not implement 'IComparable<" + paramTypeName + ">'." diff --git a/csharp/ql/src/CHANGELOG.md b/csharp/ql/src/CHANGELOG.md index 9fe1609363f..bbd7f8bc147 100644 --- a/csharp/ql/src/CHANGELOG.md +++ b/csharp/ql/src/CHANGELOG.md @@ -1,3 +1,28 @@ +## 0.8.13 + +### Major Analysis Improvements + +* The `Stored` variants of some queries (`cs/stored-command-line-injection`, `cs/web/stored-xss`, `cs/stored-ldap-injection`, `cs/xml/stored-xpath-injection`, `cs/second-order-sql-injection`) have been removed. If you were using these queries, their results can be restored by enabling the `file` and `database` threat models in your threat model configuration. + +### Minor Analysis Improvements + +* The alert message of `cs/wrong-compareto-signature` has been changed to remove unnecessary element references. +* Data flow queries that track flow from *local* flow sources now use the current *threat model* configuration instead. This may lead to changes in the produced alerts if the threat model configuration only uses *remote* flow sources. The changed queries are `cs/code-injection`, `cs/resource-injection`, `cs/sql-injection`, and `cs/uncontrolled-format-string`. + +## 0.8.12 + +No user-facing changes. + +## 0.8.11 + +No user-facing changes. + +## 0.8.10 + +### Minor Analysis Improvements + +* Most data flow queries that track flow from *remote* flow sources now use the current *threat model* configuration instead. This doesn't lead to any changes in the produced alerts (as the default configuration is *remote* flow sources) unless the threat model configuration is changed. The changed queries are `cs/code-injection`, `cs/command-line-injection`, `cs/user-controlled-bypass`, `cs/count-untrusted-data-external-api`, `cs/untrusted-data-to-external-api`, `cs/ldap-injection`, `cs/log-forging`, `cs/xml/missing-validation`, `cs/redos`, `cs/regex-injection`, `cs/resource-injection`, `cs/sql-injection`, `cs/path-injection`, `cs/unsafe-deserialization-untrusted-input`, `cs/web/unvalidated-url-redirection`, `cs/xml/insecure-dtd-handling`, `cs/xml/xpath-injection`, `cs/web/xss`, and `cs/uncontrolled-format-string`. + ## 0.8.9 ### Minor Analysis Improvements diff --git a/csharp/ql/src/Metrics/Summaries/LinesOfCode.ql b/csharp/ql/src/Metrics/Summaries/LinesOfCode.ql index 2115cd60d2b..ca4da7bd4b9 100644 --- a/csharp/ql/src/Metrics/Summaries/LinesOfCode.ql +++ b/csharp/ql/src/Metrics/Summaries/LinesOfCode.ql @@ -5,6 +5,7 @@ * @kind metric * @tags summary * lines-of-code + * debug */ import csharp diff --git a/csharp/ql/src/Security Features/WeakEncryption.qhelp b/csharp/ql/src/Security Features/WeakEncryption.qhelp index c67583b05e9..1749144ae8b 100644 --- a/csharp/ql/src/Security Features/WeakEncryption.qhelp +++ b/csharp/ql/src/Security Features/WeakEncryption.qhelp @@ -7,7 +7,7 @@ -

You should switch to a more secure encryption algorithm, such as AES (Advanced Encryption Standard) and use a key length which is reasonable for the application for which it is being used.

+

You should switch to a more secure encryption algorithm, such as AES (Advanced Encryption Standard) and use a key length which is reasonable for the application for which it is being used. Do not use the ECB encryption mode since it is vulnerable to replay and other attacks.

diff --git a/csharp/ql/src/Telemetry/ExtractorInformation.ql b/csharp/ql/src/Telemetry/ExtractorInformation.ql index d09e1c9d5d3..8d152c8efa2 100644 --- a/csharp/ql/src/Telemetry/ExtractorInformation.ql +++ b/csharp/ql/src/Telemetry/ExtractorInformation.ql @@ -10,6 +10,7 @@ import csharp import semmle.code.csharp.commons.Diagnostics predicate compilationInfo(string key, float value) { + not key.matches("Compiler diagnostic count for%") and exists(Compilation c, string infoKey, string infoValue | infoValue = c.getInfo(infoKey) | key = infoKey and value = infoValue.toFloat() @@ -86,7 +87,7 @@ predicate extractionIsStandalone(string key, int value) { value = 0 and not extractionIsStandalone() ) and - key = "Is buildless extraction" + key = "Is extracted with build-mode set to 'none'" } signature module StatsSig { diff --git a/csharp/ql/src/change-notes/2024-03-06-remove-default-local-sources.md b/csharp/ql/src/change-notes/2024-03-06-remove-default-local-sources.md deleted file mode 100644 index 19494571ad1..00000000000 --- a/csharp/ql/src/change-notes/2024-03-06-remove-default-local-sources.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -category: minorAnalysis ---- -* Data flow queries that track flow from *local* flow sources now use the current *threat model* configuration instead. This may lead to changes in the produced alerts if the threat model configuration only uses *remote* flow sources. The changed queries are `cs/code-injection`, `cs/resource-injection`, `cs/sql-injection`, and `cs/uncontrolled-format-string`. - diff --git a/csharp/ql/src/change-notes/2024-03-11-remove-stored-query-variants.md b/csharp/ql/src/change-notes/2024-03-11-remove-stored-query-variants.md deleted file mode 100644 index 3ca0b14f7b2..00000000000 --- a/csharp/ql/src/change-notes/2024-03-11-remove-stored-query-variants.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -category: majorAnalysis ---- -* The `Stored` variants of some queries (`cs/stored-command-line-injection`, `cs/web/stored-xss`, `cs/stored-ldap-injection`, `cs/xml/stored-xpath-injection`, `cs/second-order-sql-injection`) have been removed. If you were using these queries, their results can be restored by enabling the `file` and `database` threat models in your threat model configuration. - diff --git a/csharp/ql/src/change-notes/2024-02-06-threat-models.md b/csharp/ql/src/change-notes/released/0.8.10.md similarity index 88% rename from csharp/ql/src/change-notes/2024-02-06-threat-models.md rename to csharp/ql/src/change-notes/released/0.8.10.md index 69ac4e4dc17..702161c3d28 100644 --- a/csharp/ql/src/change-notes/2024-02-06-threat-models.md +++ b/csharp/ql/src/change-notes/released/0.8.10.md @@ -1,4 +1,5 @@ ---- -category: minorAnalysis ---- -* Most data flow queries that track flow from *remote* flow sources now use the current *threat model* configuration instead. This doesn't lead to any changes in the produced alerts (as the default configuration is *remote* flow sources) unless the threat model configuration is changed. The changed queries are `cs/code-injection`, `cs/command-line-injection`, `cs/user-controlled-bypass`, `cs/count-untrusted-data-external-api`, `cs/untrusted-data-to-external-api`, `cs/ldap-injection`, `cs/log-forging`, `cs/xml/missing-validation`, `cs/redos`, `cs/regex-injection`, `cs/resource-injection`, `cs/sql-injection`, `cs/path-injection`, `cs/unsafe-deserialization-untrusted-input`, `cs/web/unvalidated-url-redirection`, `cs/xml/insecure-dtd-handling`, `cs/xml/xpath-injection`, `cs/web/xss`, and `cs/uncontrolled-format-string`. \ No newline at end of file +## 0.8.10 + +### Minor Analysis Improvements + +* Most data flow queries that track flow from *remote* flow sources now use the current *threat model* configuration instead. This doesn't lead to any changes in the produced alerts (as the default configuration is *remote* flow sources) unless the threat model configuration is changed. The changed queries are `cs/code-injection`, `cs/command-line-injection`, `cs/user-controlled-bypass`, `cs/count-untrusted-data-external-api`, `cs/untrusted-data-to-external-api`, `cs/ldap-injection`, `cs/log-forging`, `cs/xml/missing-validation`, `cs/redos`, `cs/regex-injection`, `cs/resource-injection`, `cs/sql-injection`, `cs/path-injection`, `cs/unsafe-deserialization-untrusted-input`, `cs/web/unvalidated-url-redirection`, `cs/xml/insecure-dtd-handling`, `cs/xml/xpath-injection`, `cs/web/xss`, and `cs/uncontrolled-format-string`. diff --git a/csharp/ql/src/change-notes/released/0.8.11.md b/csharp/ql/src/change-notes/released/0.8.11.md new file mode 100644 index 00000000000..6f504c5c207 --- /dev/null +++ b/csharp/ql/src/change-notes/released/0.8.11.md @@ -0,0 +1,3 @@ +## 0.8.11 + +No user-facing changes. diff --git a/csharp/ql/src/change-notes/released/0.8.12.md b/csharp/ql/src/change-notes/released/0.8.12.md new file mode 100644 index 00000000000..bc91afe9c1e --- /dev/null +++ b/csharp/ql/src/change-notes/released/0.8.12.md @@ -0,0 +1,3 @@ +## 0.8.12 + +No user-facing changes. diff --git a/csharp/ql/src/change-notes/released/0.8.13.md b/csharp/ql/src/change-notes/released/0.8.13.md new file mode 100644 index 00000000000..e534c66fc8e --- /dev/null +++ b/csharp/ql/src/change-notes/released/0.8.13.md @@ -0,0 +1,10 @@ +## 0.8.13 + +### Major Analysis Improvements + +* The `Stored` variants of some queries (`cs/stored-command-line-injection`, `cs/web/stored-xss`, `cs/stored-ldap-injection`, `cs/xml/stored-xpath-injection`, `cs/second-order-sql-injection`) have been removed. If you were using these queries, their results can be restored by enabling the `file` and `database` threat models in your threat model configuration. + +### Minor Analysis Improvements + +* The alert message of `cs/wrong-compareto-signature` has been changed to remove unnecessary element references. +* Data flow queries that track flow from *local* flow sources now use the current *threat model* configuration instead. This may lead to changes in the produced alerts if the threat model configuration only uses *remote* flow sources. The changed queries are `cs/code-injection`, `cs/resource-injection`, `cs/sql-injection`, and `cs/uncontrolled-format-string`. diff --git a/csharp/ql/src/codeql-pack.release.yml b/csharp/ql/src/codeql-pack.release.yml index 5290c29b7fe..0fb6f3d786c 100644 --- a/csharp/ql/src/codeql-pack.release.yml +++ b/csharp/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.8.9 +lastReleaseVersion: 0.8.13 diff --git a/csharp/ql/src/qlpack.yml b/csharp/ql/src/qlpack.yml index 9ee23cc7307..98079d4221d 100644 --- a/csharp/ql/src/qlpack.yml +++ b/csharp/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-queries -version: 0.8.10-dev +version: 0.8.14-dev groups: - csharp - queries diff --git a/csharp/ql/test/library-tests/attributes/AttributeElements.ql b/csharp/ql/test/library-tests/attributes/AttributeElements.ql index 17ce2ea3d93..679d7567ea5 100644 --- a/csharp/ql/test/library-tests/attributes/AttributeElements.ql +++ b/csharp/ql/test/library-tests/attributes/AttributeElements.ql @@ -1,9 +1,7 @@ import csharp -import semmle.code.csharp.commons.QualifiedName -from Attributable element, Attribute attribute, string qualifier, string name +from Attributable element, Attribute attribute where attribute = element.getAnAttribute() and - (attribute.fromSource() or element.(Assembly).getName() in ["attributes", "Assembly1"]) and - attribute.getType().hasFullyQualifiedName(qualifier, name) -select element, attribute, getQualifiedName(qualifier, name) + (attribute.fromSource() or element.(Assembly).getName() in ["attributes", "Assembly1"]) +select element, attribute, attribute.getType().getFullyQualifiedNameDebug() diff --git a/csharp/ql/test/library-tests/attributes/PrintAst.expected b/csharp/ql/test/library-tests/attributes/PrintAst.expected index 62106d43664..209aba20ff1 100644 --- a/csharp/ql/test/library-tests/attributes/PrintAst.expected +++ b/csharp/ql/test/library-tests/attributes/PrintAst.expected @@ -163,9 +163,7 @@ attributes.cs: # 67| 4: [BlockStmt] {...} # 70| [Enum] E # 70| 5: [Field] A -# 70| 1: [AssignExpr] ... = ... -# 70| 0: [MemberConstantAccess] access to constant A -# 70| 1: [IntLiteral] 42 +# 70| 1: [IntLiteral] 42 # 72| [Class] ArgsAttribute #-----| 3: (Base types) # 72| 0: [TypeMention] Attribute diff --git a/csharp/ql/test/library-tests/comments/PrintAst.expected b/csharp/ql/test/library-tests/comments/PrintAst.expected index cbbfbc58c8d..68c2c582e37 100644 --- a/csharp/ql/test/library-tests/comments/PrintAst.expected +++ b/csharp/ql/test/library-tests/comments/PrintAst.expected @@ -186,14 +186,10 @@ trivia.cs: # 89| 4: [BlockStmt] {...} # 92| 7: [Field] F1 # 92| -1: [TypeMention] int -# 92| 1: [AssignExpr] ... = ... -# 92| 0: [FieldAccess] access to field F1 -# 94| 1: [IntLiteral] 10 +# 94| 1: [IntLiteral] 10 # 98| 8: [Field] F2 # 98| -1: [TypeMention] int -# 98| 1: [AssignExpr] ... = ... -# 98| 0: [FieldAccess] access to field F2 -# 98| 1: [IntLiteral] 0 +# 98| 1: [IntLiteral] 0 # 100| 9: [Property] P1 # 100| -1: [TypeMention] int # 102| 3: [Getter] get_P1 diff --git a/csharp/ql/test/library-tests/constructors/Destructors1.ql b/csharp/ql/test/library-tests/constructors/Destructors1.ql index 368980a290c..792d50da7bb 100644 --- a/csharp/ql/test/library-tests/constructors/Destructors1.ql +++ b/csharp/ql/test/library-tests/constructors/Destructors1.ql @@ -3,11 +3,10 @@ */ import csharp -import semmle.code.csharp.commons.QualifiedName from Destructor c, string qualifier, string name where c.getDeclaringType().hasFullyQualifiedName(qualifier, name) and qualifier = "Constructors" and name = "Class" -select c, c.getDeclaringType().getFullyQualifiedName() +select c, c.getDeclaringType().getFullyQualifiedNameDebug() diff --git a/csharp/ql/test/library-tests/csharp11/PrintAst.expected b/csharp/ql/test/library-tests/csharp11/PrintAst.expected index 4716334aca0..dc1927360e1 100644 --- a/csharp/ql/test/library-tests/csharp11/PrintAst.expected +++ b/csharp/ql/test/library-tests/csharp11/PrintAst.expected @@ -1111,18 +1111,14 @@ StaticInterfaceMembers.cs: #-----| 3: (Base types) # 28| 4: [Property] Real # 28| -1: [TypeMention] double -# 28| 2: [AssignExpr] ... = ... -# 28| 0: [PropertyCall] access to property Real -# 28| 1: [DoubleLiteral] 0 +# 28| 2: [DoubleLiteral] 0 # 28| 3: [Getter] get_Real # 28| 4: [Setter] set_Real #-----| 2: (Parameters) # 28| 0: [Parameter] value # 29| 5: [Property] Imaginary # 29| -1: [TypeMention] double -# 29| 2: [AssignExpr] ... = ... -# 29| 0: [PropertyCall] access to property Imaginary -# 29| 1: [DoubleLiteral] 0 +# 29| 2: [DoubleLiteral] 0 # 29| 3: [Getter] get_Imaginary # 29| 4: [Setter] set_Imaginary #-----| 2: (Parameters) diff --git a/csharp/ql/test/library-tests/csharp11/fileScoped.ql b/csharp/ql/test/library-tests/csharp11/fileScoped.ql index 3003fc801bf..33697255896 100644 --- a/csharp/ql/test/library-tests/csharp11/fileScoped.ql +++ b/csharp/ql/test/library-tests/csharp11/fileScoped.ql @@ -1,5 +1,4 @@ import csharp -private import semmle.code.csharp.commons.QualifiedName private predicate isInteresting(Type t) { ( @@ -20,10 +19,7 @@ query predicate typemodifiers(Type t, string modifier) { query predicate qualifiedtypes(Type t, string qualifiedName) { isInteresting(t) and - exists(string qualifier, string name | - t.hasFullyQualifiedName(qualifier, name) and - qualifiedName = getQualifiedName(qualifier, name) - ) + qualifiedName = t.getFullyQualifiedNameDebug() } query predicate filetypes(Type t) { diff --git a/csharp/ql/test/library-tests/csharp11/nativeInt.ql b/csharp/ql/test/library-tests/csharp11/nativeInt.ql index 80d7974de56..adbc062baf6 100644 --- a/csharp/ql/test/library-tests/csharp11/nativeInt.ql +++ b/csharp/ql/test/library-tests/csharp11/nativeInt.ql @@ -1,12 +1,10 @@ import csharp -import semmle.code.csharp.commons.QualifiedName -from LocalVariable v1, LocalVariable v2, Type t, string qualifier, string name +from LocalVariable v1, LocalVariable v2, Type t where v1.getFile().getStem() = "NativeInt" and v2.getFile().getStem() = "NativeInt" and t = v1.getType() and t = v2.getType() and - t.hasFullyQualifiedName(qualifier, name) and v1 != v2 -select v1, v2, getQualifiedName(qualifier, name) +select v1, v2, t.getFullyQualifiedNameDebug() diff --git a/csharp/ql/test/library-tests/csharp6/PrintAst.expected b/csharp/ql/test/library-tests/csharp6/PrintAst.expected index 5fe46bf5afa..892ad6dd4b1 100644 --- a/csharp/ql/test/library-tests/csharp6/PrintAst.expected +++ b/csharp/ql/test/library-tests/csharp6/PrintAst.expected @@ -2,9 +2,7 @@ csharp6.cs: # 10| [Class] TestCSharp6 # 12| 6: [Property] Value # 12| -1: [TypeMention] int -# 15| 2: [AssignExpr] ... = ... -# 12| 0: [PropertyCall] access to property Value -# 15| 1: [IntLiteral] 20 +# 15| 2: [IntLiteral] 20 # 14| 3: [Getter] get_Value # 17| 7: [Method] Fn # 17| -1: [TypeMention] Void diff --git a/csharp/ql/test/library-tests/csharp7.2/PrintAst.expected b/csharp/ql/test/library-tests/csharp7.2/PrintAst.expected index 39b7c407b74..31036ced693 100644 --- a/csharp/ql/test/library-tests/csharp7.2/PrintAst.expected +++ b/csharp/ql/test/library-tests/csharp7.2/PrintAst.expected @@ -35,15 +35,11 @@ csharp72.cs: # 44| [Class] NumericLiterals # 46| 5: [Field] binaryValue # 46| -1: [TypeMention] int -# 46| 1: [AssignExpr] ... = ... -# 46| 0: [FieldAccess] access to field binaryValue -# 46| 1: [IntLiteral] 85 +# 46| 1: [IntLiteral] 85 # 49| [Class] PrivateProtected # 51| 5: [Field] X # 51| -1: [TypeMention] int -# 51| 1: [AssignExpr] ... = ... -# 51| 0: [FieldAccess] access to field X -# 51| 1: [IntLiteral] 1 +# 51| 1: [IntLiteral] 1 # 53| 6: [Method] F # 53| -1: [TypeMention] Void # 53| 4: [BlockStmt] {...} diff --git a/csharp/ql/test/library-tests/csharp7/PrintAst.expected b/csharp/ql/test/library-tests/csharp7/PrintAst.expected index 7f8e1d1659a..e5d009e0df6 100644 --- a/csharp/ql/test/library-tests/csharp7/PrintAst.expected +++ b/csharp/ql/test/library-tests/csharp7/PrintAst.expected @@ -2,25 +2,17 @@ CSharp7.cs: # 5| [Class] Literals # 7| 5: [Field] x # 7| -1: [TypeMention] int -# 7| 1: [AssignExpr] ... = ... -# 7| 0: [FieldAccess] access to field x -# 7| 1: [IntLiteral] 11 +# 7| 1: [IntLiteral] 11 # 8| 6: [Field] y # 8| -1: [TypeMention] int -# 8| 1: [AssignExpr] ... = ... -# 8| 0: [FieldAccess] access to field y -# 8| 1: [IntLiteral] 123456 +# 8| 1: [IntLiteral] 123456 # 9| 7: [Field] z # 9| -1: [TypeMention] int -# 9| 1: [AssignExpr] ... = ... -# 9| 0: [FieldAccess] access to field z -# 9| 1: [IntLiteral] 128 +# 9| 1: [IntLiteral] 128 # 12| [Class] ExpressionBodiedMembers # 14| 4: [Field] field # 14| -1: [TypeMention] int -# 14| 1: [AssignExpr] ... = ... -# 14| 0: [FieldAccess] access to field field -# 14| 1: [IntLiteral] 0 +# 14| 1: [IntLiteral] 0 # 15| 5: [Method] Foo # 15| -1: [TypeMention] int # 15| 4: [FieldAccess] access to field field diff --git a/csharp/ql/test/library-tests/csharp8/PrintAst.expected b/csharp/ql/test/library-tests/csharp8/PrintAst.expected index 10dceb400ed..c33374e4761 100644 --- a/csharp/ql/test/library-tests/csharp8/PrintAst.expected +++ b/csharp/ql/test/library-tests/csharp8/PrintAst.expected @@ -2,18 +2,14 @@ AlternateInterpolatedStrings.cs: # 3| [Class] AlternateInterpolatedStrings # 5| 5: [Field] s1 # 5| -1: [TypeMention] string -# 5| 1: [AssignExpr] ... = ... -# 5| 0: [FieldAccess] access to field s1 -# 5| 1: [InterpolatedStringExpr] $"..." -# 5| 0: [StringLiteralUtf16] "C:" -# 5| 1: [IntLiteral] 12 +# 5| 1: [InterpolatedStringExpr] $"..." +# 5| 0: [StringLiteralUtf16] "C:" +# 5| 1: [IntLiteral] 12 # 6| 6: [Field] s2 # 6| -1: [TypeMention] string -# 6| 1: [AssignExpr] ... = ... -# 6| 0: [FieldAccess] access to field s2 -# 6| 1: [InterpolatedStringExpr] $"..." -# 6| 0: [StringLiteralUtf16] "C:" -# 6| 1: [IntLiteral] 12 +# 6| 1: [InterpolatedStringExpr] $"..." +# 6| 0: [StringLiteralUtf16] "C:" +# 6| 1: [IntLiteral] 12 AsyncStreams.cs: # 6| [Class] AsyncStreams # 8| 5: [Method] Items diff --git a/csharp/ql/test/library-tests/csharp9/PrintAst.expected b/csharp/ql/test/library-tests/csharp9/PrintAst.expected index eacbfd8fd45..a1ecbd0a212 100644 --- a/csharp/ql/test/library-tests/csharp9/PrintAst.expected +++ b/csharp/ql/test/library-tests/csharp9/PrintAst.expected @@ -3,10 +3,8 @@ AnonymousObjectCreation.cs: # 7| 5: [Field] l # 7| -1: [TypeMention] List # 7| 1: [TypeMention] AnonObj -# 7| 1: [AssignExpr] ... = ... -# 7| 0: [FieldAccess] access to field l -# 7| 1: [CastExpr] (...) ... -# 7| 1: [ObjectCreation] object creation of type List +# 7| 1: [CastExpr] (...) ... +# 7| 1: [ObjectCreation] object creation of type List # 9| 6: [Property] Prop1 # 9| -1: [TypeMention] int # 9| 3: [Getter] get_Prop1 @@ -294,10 +292,8 @@ FunctionPointer.cs: # 5| 5: [Class] Program # 7| 5: [Field] pointer # 7| -1: [TypeMention] delegate* default -# 7| 1: [AssignExpr] ... = ... -# 7| 0: [FieldAccess] access to field pointer -# 7| 1: [AddressOfExpr] &... -# 7| 0: [MethodAccess] access to method M0 +# 7| 1: [AddressOfExpr] &... +# 7| 0: [MethodAccess] access to method M0 # 9| 6: [Method] M0 # 9| -1: [TypeMention] int # 10| 4: [BlockStmt] {...} diff --git a/csharp/ql/test/library-tests/csharp9/covariantReturn.ql b/csharp/ql/test/library-tests/csharp9/covariantReturn.ql index 6227ed18d6d..b4bab047322 100644 --- a/csharp/ql/test/library-tests/csharp9/covariantReturn.ql +++ b/csharp/ql/test/library-tests/csharp9/covariantReturn.ql @@ -1,13 +1,8 @@ import csharp -import semmle.code.csharp.commons.QualifiedName -from - Method m, Method overrider, string mnamespace, string mtype, string mname, string onamespace, - string otype, string oname +from Method m, Method overrider where m.getAnOverrider() = overrider and - m.getFile().getStem() = "CovariantReturn" and - m.hasFullyQualifiedName(mnamespace, mtype, mname) and - overrider.hasFullyQualifiedName(onamespace, otype, oname) -select getQualifiedName(mnamespace, mtype, mname), m.getReturnType().toString(), - getQualifiedName(onamespace, otype, oname), overrider.getReturnType().toString() + m.getFile().getStem() = "CovariantReturn" +select m.getFullyQualifiedNameDebug(), m.getReturnType().toString(), + overrider.getFullyQualifiedNameDebug(), overrider.getReturnType().toString() diff --git a/csharp/ql/test/library-tests/csharp9/foreach.ql b/csharp/ql/test/library-tests/csharp9/foreach.ql index cf6fcf2514a..343ecc556ab 100644 --- a/csharp/ql/test/library-tests/csharp9/foreach.ql +++ b/csharp/ql/test/library-tests/csharp9/foreach.ql @@ -1,5 +1,4 @@ import csharp -import semmle.code.csharp.commons.QualifiedName private string getLocation(Member m) { if m.fromSource() then result = m.getALocation().(SourceLocation).toString() else result = "-" @@ -9,13 +8,9 @@ private string getIsAsync(ForeachStmt f) { if f.isAsync() then result = "async" else result = "sync" } -from - ForeachStmt f, string qualifier1, string type1, string qualifier2, string type2, - string qualifier3, string type3 -where - f.getGetEnumerator().getDeclaringType().hasFullyQualifiedName(qualifier1, type1) and - f.getCurrent().getDeclaringType().hasFullyQualifiedName(qualifier2, type2) and - f.getMoveNext().getDeclaringType().hasFullyQualifiedName(qualifier3, type3) -select f, f.getElementType().toString(), getIsAsync(f), getQualifiedName(qualifier1, type1), - getLocation(f.getGetEnumerator()), getQualifiedName(qualifier2, type2), - getLocation(f.getCurrent()), getQualifiedName(qualifier3, type3), getLocation(f.getMoveNext()) +from ForeachStmt f +select f, f.getElementType().toString(), getIsAsync(f), + f.getGetEnumerator().getDeclaringType().getFullyQualifiedNameDebug(), + getLocation(f.getGetEnumerator()), f.getCurrent().getDeclaringType().getFullyQualifiedNameDebug(), + getLocation(f.getCurrent()), f.getMoveNext().getDeclaringType().getFullyQualifiedNameDebug(), + getLocation(f.getMoveNext()) diff --git a/csharp/ql/test/library-tests/csharp9/record.ql b/csharp/ql/test/library-tests/csharp9/record.ql index a2a9a9c0786..58cf579bac6 100644 --- a/csharp/ql/test/library-tests/csharp9/record.ql +++ b/csharp/ql/test/library-tests/csharp9/record.ql @@ -7,18 +7,10 @@ query predicate records(RecordClass t, string i, RecordCloneMethod clone) { t.fromSource() } -private string getMemberName(Member m) { - exists(string qualifier, string name | - m.getDeclaringType().hasFullyQualifiedName(qualifier, name) - | - result = getQualifiedName(qualifier, name) + "." + m.toStringWithTypes() - ) -} - query predicate members(RecordClass t, string ms, string l) { t.fromSource() and exists(Member m | t.hasMember(m) | - ms = getMemberName(m) and + ms = getFullyQualifiedNameWithTypes(m) and if m.fromSource() then l = m.getLocation().toString() else l = "no location" ) } diff --git a/csharp/ql/test/library-tests/csharp9/withExpr.ql b/csharp/ql/test/library-tests/csharp9/withExpr.ql index 6683d7c54f6..564cbe529aa 100644 --- a/csharp/ql/test/library-tests/csharp9/withExpr.ql +++ b/csharp/ql/test/library-tests/csharp9/withExpr.ql @@ -1,19 +1,11 @@ import csharp import semmle.code.csharp.commons.QualifiedName -private string getSignature(Method m) { - exists(string qualifier, string name | - m.getDeclaringType().hasFullyQualifiedName(qualifier, name) - | - result = getQualifiedName(qualifier, name) + "." + m.toStringWithTypes() - ) -} - query predicate withExpr(WithExpr with, string type, Expr expr, ObjectInitializer init, string clone) { type = with.getType().toStringWithTypes() and expr = with.getExpr() and init = with.getInitializer() and - clone = getSignature(with.getCloneMethod()) + clone = getFullyQualifiedNameWithTypes(with.getCloneMethod()) } query predicate withTarget(WithExpr with, RecordCloneMethod clone, Constructor ctor) { @@ -25,7 +17,7 @@ query predicate cloneOverrides(string b, string o) { exists(RecordCloneMethod base, RecordCloneMethod overrider | base.getDeclaringType().fromSource() and base.getAnOverrider() = overrider and - b = getSignature(base) and - o = getSignature(overrider) + b = getFullyQualifiedNameWithTypes(base) and + o = getFullyQualifiedNameWithTypes(overrider) ) } diff --git a/swift/integration-tests/osx-only/autobuilder/no-build-system/x.swift b/csharp/ql/test/library-tests/dataflow/flowsources/stored/database/dapper/DatabaseSources.expected similarity index 100% rename from swift/integration-tests/osx-only/autobuilder/no-build-system/x.swift rename to csharp/ql/test/library-tests/dataflow/flowsources/stored/database/dapper/DatabaseSources.expected diff --git a/csharp/ql/test/library-tests/dataflow/flowsources/stored/database/dapper/DatabaseSources.ext.yml b/csharp/ql/test/library-tests/dataflow/flowsources/stored/database/dapper/DatabaseSources.ext.yml new file mode 100644 index 00000000000..06c77c199ce --- /dev/null +++ b/csharp/ql/test/library-tests/dataflow/flowsources/stored/database/dapper/DatabaseSources.ext.yml @@ -0,0 +1,7 @@ +extensions: + + - addsTo: + pack: codeql/threat-models + extensible: threatModelConfiguration + data: + - ["database", true, 0] \ No newline at end of file diff --git a/csharp/ql/test/library-tests/dataflow/flowsources/stored/database/dapper/DatabaseSources.ql b/csharp/ql/test/library-tests/dataflow/flowsources/stored/database/dapper/DatabaseSources.ql new file mode 100644 index 00000000000..aa9372d73d2 --- /dev/null +++ b/csharp/ql/test/library-tests/dataflow/flowsources/stored/database/dapper/DatabaseSources.ql @@ -0,0 +1,12 @@ +import csharp +import semmle.code.csharp.security.dataflow.flowsources.FlowSources +import TestUtilities.InlineFlowTest +import TaintFlowTest + +module DatabaseConfig implements DataFlow::ConfigSig { + predicate isSource(DataFlow::Node source) { source instanceof ThreatModelFlowSource } + + predicate isSink(DataFlow::Node sink) { + exists(MethodCall mc | mc.getTarget().hasName("Sink") | sink.asExpr() = mc.getArgument(0)) + } +} diff --git a/csharp/ql/test/library-tests/dataflow/flowsources/stored/database/dapper/UseDapper.cs b/csharp/ql/test/library-tests/dataflow/flowsources/stored/database/dapper/UseDapper.cs new file mode 100644 index 00000000000..48a86d4fe6b --- /dev/null +++ b/csharp/ql/test/library-tests/dataflow/flowsources/stored/database/dapper/UseDapper.cs @@ -0,0 +1,50 @@ +using System; +using System.Data; +using System.Data.Entity; +using System.Data.SqlClient; +using System.Threading.Tasks; +using Dapper; + +namespace Test +{ + class UseDapper + { + public static void Bad01(string connectionString, string query) + { + using (var connection = new SqlConnection(connectionString)) + { + var result = connection.Query(query); + Sink(result); // $ hasTaintFlow=line:16 + } + } + + public static async Task Bad02(string connectionString, string query) + { + using (var connection = new SqlConnection(connectionString)) + { + var result = await connection.QueryAsync(query); + Sink(result); // $ hasTaintFlow=line:25 + } + } + + public static void Bad03(string connectionString, string query) + { + using (var connection = new SqlConnection(connectionString)) + { + var result = connection.QueryFirst(query); + Sink(result); // $ hasTaintFlow=line:34 + } + } + + public static void Bad04(string connectionString, string query) + { + using (var connection = new SqlConnection(connectionString)) + { + var results = connection.Query(query).AsList(); + Sink(results[0]); // $ hasTaintFlow=line:43 + } + } + + public static void Sink(object o) { } + } +} \ No newline at end of file diff --git a/csharp/ql/test/library-tests/dataflow/flowsources/stored/database/dapper/options b/csharp/ql/test/library-tests/dataflow/flowsources/stored/database/dapper/options new file mode 100644 index 00000000000..fcda6c1b83c --- /dev/null +++ b/csharp/ql/test/library-tests/dataflow/flowsources/stored/database/dapper/options @@ -0,0 +1,5 @@ +semmle-extractor-options: /nostdlib /noconfig +semmle-extractor-options: --load-sources-from-project:${testdir}/../../../../../../resources/stubs/Dapper/2.1.24/Dapper.csproj +semmle-extractor-options: --load-sources-from-project:${testdir}/../../../../../../resources/stubs/System.Data.SqlClient/4.8.5/System.Data.SqlClient.csproj +semmle-extractor-options: --load-sources-from-project:${testdir}/../../../../../../resources/stubs/System.Data.SQLite/1.0.118/System.Data.SQLite.csproj +semmle-extractor-options: ${testdir}/../../../../../../resources/stubs/System.Windows.cs diff --git a/csharp/ql/test/library-tests/dataflow/flowsources/stored/file/Files.cs b/csharp/ql/test/library-tests/dataflow/flowsources/stored/file/Files.cs new file mode 100644 index 00000000000..37e9f2ed8f1 --- /dev/null +++ b/csharp/ql/test/library-tests/dataflow/flowsources/stored/file/Files.cs @@ -0,0 +1,84 @@ +using System.IO; + +namespace Test +{ + class Files + { + public static void ReadAllText(string path) + { + string text = File.ReadAllText(path); + Sink(text); // $ hasTaintFlow=line:9 + } + + public static void ReadAllLines(string path) + { + string[] lines = File.ReadAllLines(path); + Sink(lines); // $ hasTaintFlow=line:15 + } + + public static void ReadAllBytes(string path) + { + byte[] bytes = File.ReadAllBytes(path); + Sink(bytes); // $ hasTaintFlow=line:21 + } + + public static void ReadLines(string path) + { + foreach (string line in File.ReadLines(path)) + { + Sink(line); // $ hasTaintFlow=line:27 + } + } + + public static void BufferedRead(string path) + { + using (FileStream fs = new FileStream(path, FileMode.Open)) + { + using (BufferedStream bs = new BufferedStream(fs)) + { + using (StreamReader sr = new StreamReader(bs)) + { + string line; + while ((line = sr.ReadLine()) != null) + { + Sink(line); // $ hasTaintFlow=line:35 + } + } + } + } + } + + public static void ReadBlocks(string path) + { + using (FileStream fs = File.OpenRead(path)) + { + byte[] buffer = new byte[1024]; + int bytesRead; + while ((bytesRead = fs.Read(buffer, 0, buffer.Length)) > 0) + { + Sink(buffer[0]); // $ hasTaintFlow=line:53 + } + } + } + + public static async void ReadAllTextAsync(string path) + { + string text = await File.ReadAllTextAsync(path); + Sink(text); // $ hasTaintFlow=line:66 + + using (FileStream fs = File.Open(path, FileMode.Open)) + { + using (StreamReader sr = new StreamReader(fs)) + { + string line; + while ((line = await sr.ReadLineAsync()) != null) + { + Sink(line); // $ hasTaintFlow=line:69 + } + } + } + } + + static void Sink(object o) { } + } +} \ No newline at end of file diff --git a/swift/integration-tests/osx-only/autobuilder/no-xcode-with-spm/x.swift b/csharp/ql/test/library-tests/dataflow/flowsources/stored/file/Files.expected similarity index 100% rename from swift/integration-tests/osx-only/autobuilder/no-xcode-with-spm/x.swift rename to csharp/ql/test/library-tests/dataflow/flowsources/stored/file/Files.expected diff --git a/csharp/ql/test/library-tests/dataflow/flowsources/stored/file/Files.ext.yml b/csharp/ql/test/library-tests/dataflow/flowsources/stored/file/Files.ext.yml new file mode 100644 index 00000000000..520203b141f --- /dev/null +++ b/csharp/ql/test/library-tests/dataflow/flowsources/stored/file/Files.ext.yml @@ -0,0 +1,7 @@ +extensions: + + - addsTo: + pack: codeql/threat-models + extensible: threatModelConfiguration + data: + - ["file", true, 0] \ No newline at end of file diff --git a/csharp/ql/test/library-tests/dataflow/flowsources/stored/file/Files.ql b/csharp/ql/test/library-tests/dataflow/flowsources/stored/file/Files.ql new file mode 100644 index 00000000000..1060ea756a2 --- /dev/null +++ b/csharp/ql/test/library-tests/dataflow/flowsources/stored/file/Files.ql @@ -0,0 +1,12 @@ +import csharp +import semmle.code.csharp.security.dataflow.flowsources.FlowSources +import TestUtilities.InlineFlowTest +import TaintFlowTest + +module FilesConfig implements DataFlow::ConfigSig { + predicate isSource(DataFlow::Node source) { source instanceof ThreatModelFlowSource } + + predicate isSink(DataFlow::Node sink) { + exists(MethodCall mc | mc.getTarget().hasName("Sink") | sink.asExpr() = mc.getArgument(0)) + } +} diff --git a/csharp/ql/test/library-tests/dataflow/flowsources/stored/file/options b/csharp/ql/test/library-tests/dataflow/flowsources/stored/file/options new file mode 100644 index 00000000000..13f94236f19 --- /dev/null +++ b/csharp/ql/test/library-tests/dataflow/flowsources/stored/file/options @@ -0,0 +1,3 @@ +semmle-extractor-options: /nostdlib /noconfig +semmle-extractor-options: --load-sources-from-project:${testdir}/../../../../../resources/stubs/_frameworks/Microsoft.AspNetCore.App/Microsoft.AspNetCore.App.csproj +semmle-extractor-options: ${testdir}/../../../../../resources/stubs/System.Web.cs diff --git a/csharp/ql/test/library-tests/dataflow/library/FlowSummaries.expected b/csharp/ql/test/library-tests/dataflow/library/FlowSummaries.expected index fc02c1916a8..caa3e2497b9 100644 --- a/csharp/ql/test/library-tests/dataflow/library/FlowSummaries.expected +++ b/csharp/ql/test/library-tests/dataflow/library/FlowSummaries.expected @@ -1,3 +1,730 @@ +source +| Dapper;SqlMapper;false;ExecuteReader;(System.Data.IDbConnection,Dapper.CommandDefinition);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;ExecuteReader;(System.Data.IDbConnection,Dapper.CommandDefinition,System.Data.CommandBehavior);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;ExecuteReader;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;ExecuteReaderAsync;(System.Data.Common.DbConnection,Dapper.CommandDefinition);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;ExecuteReaderAsync;(System.Data.Common.DbConnection,Dapper.CommandDefinition,System.Data.CommandBehavior);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;ExecuteReaderAsync;(System.Data.Common.DbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;ExecuteReaderAsync;(System.Data.IDbConnection,Dapper.CommandDefinition);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;ExecuteReaderAsync;(System.Data.IDbConnection,Dapper.CommandDefinition,System.Data.CommandBehavior);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;ExecuteReaderAsync;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;ExecuteScalar;(System.Data.IDbConnection,Dapper.CommandDefinition);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;ExecuteScalar;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;ExecuteScalar;(System.Data.IDbConnection,Dapper.CommandDefinition);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;ExecuteScalar;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;ExecuteScalarAsync;(System.Data.IDbConnection,Dapper.CommandDefinition);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;ExecuteScalarAsync;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;ExecuteScalarAsync;(System.Data.IDbConnection,Dapper.CommandDefinition);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;ExecuteScalarAsync;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;Query;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Boolean,System.Nullable,System.Nullable);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;Query;(System.Data.IDbConnection,System.Type,System.String,System.Object,System.Data.IDbTransaction,System.Boolean,System.Nullable,System.Nullable);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;Query;(System.Data.IDbConnection,Dapper.CommandDefinition);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;Query;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Boolean,System.Nullable,System.Nullable);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;Query;(System.Data.IDbConnection,System.String,System.Func,System.Object,System.Data.IDbTransaction,System.Boolean,System.String,System.Nullable,System.Nullable);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;Query;(System.Data.IDbConnection,System.String,System.Func,System.Object,System.Data.IDbTransaction,System.Boolean,System.String,System.Nullable,System.Nullable);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;Query;(System.Data.IDbConnection,System.String,System.Func,System.Object,System.Data.IDbTransaction,System.Boolean,System.String,System.Nullable,System.Nullable);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;Query;(System.Data.IDbConnection,System.String,System.Func,System.Object,System.Data.IDbTransaction,System.Boolean,System.String,System.Nullable,System.Nullable);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;Query;(System.Data.IDbConnection,System.String,System.Func,System.Object,System.Data.IDbTransaction,System.Boolean,System.String,System.Nullable,System.Nullable);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;Query;(System.Data.IDbConnection,System.String,System.Func,System.Object,System.Data.IDbTransaction,System.Boolean,System.String,System.Nullable,System.Nullable);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;Query;(System.Data.IDbConnection,System.String,System.Type[],System.Func,System.Object,System.Data.IDbTransaction,System.Boolean,System.String,System.Nullable,System.Nullable);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;QueryAsync;(System.Data.IDbConnection,Dapper.CommandDefinition);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;QueryAsync;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;QueryAsync;(System.Data.IDbConnection,System.Type,Dapper.CommandDefinition);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;QueryAsync;(System.Data.IDbConnection,System.Type,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;QueryAsync;(System.Data.IDbConnection,Dapper.CommandDefinition);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;QueryAsync;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;QueryAsync;(System.Data.IDbConnection,Dapper.CommandDefinition,System.Func,System.String);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;QueryAsync;(System.Data.IDbConnection,System.String,System.Func,System.Object,System.Data.IDbTransaction,System.Boolean,System.String,System.Nullable,System.Nullable);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;QueryAsync;(System.Data.IDbConnection,Dapper.CommandDefinition,System.Func,System.String);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;QueryAsync;(System.Data.IDbConnection,System.String,System.Func,System.Object,System.Data.IDbTransaction,System.Boolean,System.String,System.Nullable,System.Nullable);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;QueryAsync;(System.Data.IDbConnection,Dapper.CommandDefinition,System.Func,System.String);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;QueryAsync;(System.Data.IDbConnection,System.String,System.Func,System.Object,System.Data.IDbTransaction,System.Boolean,System.String,System.Nullable,System.Nullable);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;QueryAsync;(System.Data.IDbConnection,Dapper.CommandDefinition,System.Func,System.String);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;QueryAsync;(System.Data.IDbConnection,System.String,System.Func,System.Object,System.Data.IDbTransaction,System.Boolean,System.String,System.Nullable,System.Nullable);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;QueryAsync;(System.Data.IDbConnection,Dapper.CommandDefinition,System.Func,System.String);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;QueryAsync;(System.Data.IDbConnection,System.String,System.Func,System.Object,System.Data.IDbTransaction,System.Boolean,System.String,System.Nullable,System.Nullable);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;QueryAsync;(System.Data.IDbConnection,Dapper.CommandDefinition,System.Func,System.String);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;QueryAsync;(System.Data.IDbConnection,System.String,System.Func,System.Object,System.Data.IDbTransaction,System.Boolean,System.String,System.Nullable,System.Nullable);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;QueryAsync;(System.Data.IDbConnection,System.String,System.Type[],System.Func,System.Object,System.Data.IDbTransaction,System.Boolean,System.String,System.Nullable,System.Nullable);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;QueryFirst;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;QueryFirst;(System.Data.IDbConnection,System.Type,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;QueryFirst;(System.Data.IDbConnection,Dapper.CommandDefinition);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;QueryFirst;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;QueryFirstAsync;(System.Data.IDbConnection,Dapper.CommandDefinition);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;QueryFirstAsync;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;QueryFirstAsync;(System.Data.IDbConnection,System.Type,Dapper.CommandDefinition);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;QueryFirstAsync;(System.Data.IDbConnection,System.Type,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;QueryFirstAsync;(System.Data.IDbConnection,Dapper.CommandDefinition);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;QueryFirstAsync;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;QueryFirstOrDefault;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;QueryFirstOrDefault;(System.Data.IDbConnection,System.Type,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;QueryFirstOrDefault;(System.Data.IDbConnection,Dapper.CommandDefinition);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;QueryFirstOrDefault;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;QueryFirstOrDefaultAsync;(System.Data.IDbConnection,Dapper.CommandDefinition);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;QueryFirstOrDefaultAsync;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;QueryFirstOrDefaultAsync;(System.Data.IDbConnection,System.Type,Dapper.CommandDefinition);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;QueryFirstOrDefaultAsync;(System.Data.IDbConnection,System.Type,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;QueryFirstOrDefaultAsync;(System.Data.IDbConnection,Dapper.CommandDefinition);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;QueryFirstOrDefaultAsync;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;QueryMultiple;(System.Data.IDbConnection,Dapper.CommandDefinition);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;QueryMultiple;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;QueryMultipleAsync;(System.Data.IDbConnection,Dapper.CommandDefinition);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;QueryMultipleAsync;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;QuerySingle;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;QuerySingle;(System.Data.IDbConnection,System.Type,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;QuerySingle;(System.Data.IDbConnection,Dapper.CommandDefinition);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;QuerySingle;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;QuerySingleAsync;(System.Data.IDbConnection,Dapper.CommandDefinition);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;QuerySingleAsync;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;QuerySingleAsync;(System.Data.IDbConnection,System.Type,Dapper.CommandDefinition);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;QuerySingleAsync;(System.Data.IDbConnection,System.Type,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;QuerySingleAsync;(System.Data.IDbConnection,Dapper.CommandDefinition);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;QuerySingleAsync;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;QuerySingleOrDefault;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;QuerySingleOrDefault;(System.Data.IDbConnection,System.Type,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;QuerySingleOrDefault;(System.Data.IDbConnection,Dapper.CommandDefinition);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;QuerySingleOrDefault;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;QuerySingleOrDefaultAsync;(System.Data.IDbConnection,Dapper.CommandDefinition);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;QuerySingleOrDefaultAsync;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;QuerySingleOrDefaultAsync;(System.Data.IDbConnection,System.Type,Dapper.CommandDefinition);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;QuerySingleOrDefaultAsync;(System.Data.IDbConnection,System.Type,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;QuerySingleOrDefaultAsync;(System.Data.IDbConnection,Dapper.CommandDefinition);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;QuerySingleOrDefaultAsync;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;ReturnValue;database;manual | +| Microsoft.Extensions.Configuration;EnvironmentVariablesExtensions;false;AddEnvironmentVariables;(Microsoft.Extensions.Configuration.IConfigurationBuilder);;Argument[0];environment;manual | +| Microsoft.Extensions.Configuration;EnvironmentVariablesExtensions;false;AddEnvironmentVariables;(Microsoft.Extensions.Configuration.IConfigurationBuilder);;ReturnValue;environment;manual | +| Microsoft.Extensions.Configuration;EnvironmentVariablesExtensions;false;AddEnvironmentVariables;(Microsoft.Extensions.Configuration.IConfigurationBuilder,System.Action);;Argument[0];environment;manual | +| Microsoft.Extensions.Configuration;EnvironmentVariablesExtensions;false;AddEnvironmentVariables;(Microsoft.Extensions.Configuration.IConfigurationBuilder,System.Action);;ReturnValue;environment;manual | +| Microsoft.Extensions.Configuration;EnvironmentVariablesExtensions;false;AddEnvironmentVariables;(Microsoft.Extensions.Configuration.IConfigurationBuilder,System.String);;Argument[0];environment;manual | +| Microsoft.Extensions.Configuration;EnvironmentVariablesExtensions;false;AddEnvironmentVariables;(Microsoft.Extensions.Configuration.IConfigurationBuilder,System.String);;ReturnValue;environment;manual | +| Microsoft.Win32;Registry;false;GetValue;(System.String,System.String,System.Object);;ReturnValue;windows-registry;manual | +| Microsoft.Win32;RegistryKey;false;GetSubKeyNames;();;ReturnValue;windows-registry;manual | +| Microsoft.Win32;RegistryKey;false;GetValue;(System.String);;ReturnValue;windows-registry;manual | +| Microsoft.Win32;RegistryKey;false;GetValue;(System.String,System.Object);;ReturnValue;windows-registry;manual | +| Microsoft.Win32;RegistryKey;false;GetValue;(System.String,System.Object,Microsoft.Win32.RegistryValueOptions);;ReturnValue;windows-registry;manual | +| Microsoft.Win32;RegistryKey;false;GetValueNames;();;ReturnValue;windows-registry;manual | +| System.IO;File;false;AppendText;(System.String);;ReturnValue;file-write;manual | +| System.IO;File;false;Create;(System.String);;ReturnValue;file-write;manual | +| System.IO;File;false;Create;(System.String,System.Int32);;ReturnValue;file-write;manual | +| System.IO;File;false;Create;(System.String,System.Int32,System.IO.FileOptions);;ReturnValue;file-write;manual | +| System.IO;File;false;CreateText;(System.String);;ReturnValue;file-write;manual | +| System.IO;File;false;Open;(System.String,System.IO.FileMode);;ReturnValue;file-write;manual | +| System.IO;File;false;Open;(System.String,System.IO.FileMode);;ReturnValue;file;manual | +| System.IO;File;false;Open;(System.String,System.IO.FileMode,System.IO.FileAccess);;ReturnValue;file-write;manual | +| System.IO;File;false;Open;(System.String,System.IO.FileMode,System.IO.FileAccess);;ReturnValue;file;manual | +| System.IO;File;false;Open;(System.String,System.IO.FileMode,System.IO.FileAccess,System.IO.FileShare);;ReturnValue;file-write;manual | +| System.IO;File;false;Open;(System.String,System.IO.FileMode,System.IO.FileAccess,System.IO.FileShare);;ReturnValue;file;manual | +| System.IO;File;false;Open;(System.String,System.IO.FileStreamOptions);;ReturnValue;file-write;manual | +| System.IO;File;false;Open;(System.String,System.IO.FileStreamOptions);;ReturnValue;file;manual | +| System.IO;File;false;OpenRead;(System.String);;ReturnValue;file;manual | +| System.IO;File;false;OpenText;(System.String);;ReturnValue;file;manual | +| System.IO;File;false;OpenWrite;(System.String);;ReturnValue;file-write;manual | +| System.IO;File;false;ReadAllBytes;(System.String);;ReturnValue;file;manual | +| System.IO;File;false;ReadAllBytesAsync;(System.String,System.Threading.CancellationToken);;ReturnValue;file;manual | +| System.IO;File;false;ReadAllLines;(System.String);;ReturnValue;file;manual | +| System.IO;File;false;ReadAllLines;(System.String,System.Text.Encoding);;ReturnValue;file;manual | +| System.IO;File;false;ReadAllLinesAsync;(System.String,System.Text.Encoding,System.Threading.CancellationToken);;ReturnValue;file;manual | +| System.IO;File;false;ReadAllLinesAsync;(System.String,System.Threading.CancellationToken);;ReturnValue;file;manual | +| System.IO;File;false;ReadAllText;(System.String);;ReturnValue;file;manual | +| System.IO;File;false;ReadAllText;(System.String,System.Text.Encoding);;ReturnValue;file;manual | +| System.IO;File;false;ReadAllTextAsync;(System.String,System.Text.Encoding,System.Threading.CancellationToken);;ReturnValue;file;manual | +| System.IO;File;false;ReadAllTextAsync;(System.String,System.Threading.CancellationToken);;ReturnValue;file;manual | +| System.IO;File;false;ReadLines;(System.String);;ReturnValue;file;manual | +| System.IO;File;false;ReadLines;(System.String,System.Text.Encoding);;ReturnValue;file;manual | +| System.IO;File;false;ReadLinesAsync;(System.String,System.Text.Encoding,System.Threading.CancellationToken);;ReturnValue;file;manual | +| System.IO;File;false;ReadLinesAsync;(System.String,System.Threading.CancellationToken);;ReturnValue;file;manual | +| System.IO;FileInfo;false;AppendText;();;ReturnValue;file-write;manual | +| System.IO;FileInfo;false;Create;();;ReturnValue;file-write;manual | +| System.IO;FileInfo;false;CreateText;();;ReturnValue;file-write;manual | +| System.IO;FileInfo;false;Open;(System.IO.FileMode);;ReturnValue;file-write;manual | +| System.IO;FileInfo;false;Open;(System.IO.FileMode);;ReturnValue;file;manual | +| System.IO;FileInfo;false;Open;(System.IO.FileMode,System.IO.FileAccess);;ReturnValue;file-write;manual | +| System.IO;FileInfo;false;Open;(System.IO.FileMode,System.IO.FileAccess);;ReturnValue;file;manual | +| System.IO;FileInfo;false;Open;(System.IO.FileMode,System.IO.FileAccess,System.IO.FileShare);;ReturnValue;file-write;manual | +| System.IO;FileInfo;false;Open;(System.IO.FileMode,System.IO.FileAccess,System.IO.FileShare);;ReturnValue;file;manual | +| System.IO;FileInfo;false;Open;(System.IO.FileStreamOptions);;ReturnValue;file-write;manual | +| System.IO;FileInfo;false;Open;(System.IO.FileStreamOptions);;ReturnValue;file;manual | +| System.IO;FileInfo;false;OpenRead;();;ReturnValue;file;manual | +| System.IO;FileInfo;false;OpenText;();;ReturnValue;file;manual | +| System.IO;FileInfo;false;OpenWrite;();;ReturnValue;file-write;manual | +| System.IO;FileStream;false;FileStream;(Microsoft.Win32.SafeHandles.SafeFileHandle,System.IO.FileAccess);;Argument[this];file-write;manual | +| System.IO;FileStream;false;FileStream;(Microsoft.Win32.SafeHandles.SafeFileHandle,System.IO.FileAccess);;Argument[this];file;manual | +| System.IO;FileStream;false;FileStream;(Microsoft.Win32.SafeHandles.SafeFileHandle,System.IO.FileAccess,System.Int32);;Argument[this];file-write;manual | +| System.IO;FileStream;false;FileStream;(Microsoft.Win32.SafeHandles.SafeFileHandle,System.IO.FileAccess,System.Int32);;Argument[this];file;manual | +| System.IO;FileStream;false;FileStream;(Microsoft.Win32.SafeHandles.SafeFileHandle,System.IO.FileAccess,System.Int32,System.Boolean);;Argument[this];file-write;manual | +| System.IO;FileStream;false;FileStream;(Microsoft.Win32.SafeHandles.SafeFileHandle,System.IO.FileAccess,System.Int32,System.Boolean);;Argument[this];file;manual | +| System.IO;FileStream;false;FileStream;(System.IntPtr,System.IO.FileAccess);;Argument[this];file-write;manual | +| System.IO;FileStream;false;FileStream;(System.IntPtr,System.IO.FileAccess);;Argument[this];file;manual | +| System.IO;FileStream;false;FileStream;(System.IntPtr,System.IO.FileAccess,System.Boolean);;Argument[this];file-write;manual | +| System.IO;FileStream;false;FileStream;(System.IntPtr,System.IO.FileAccess,System.Boolean);;Argument[this];file;manual | +| System.IO;FileStream;false;FileStream;(System.IntPtr,System.IO.FileAccess,System.Boolean,System.Int32);;Argument[this];file-write;manual | +| System.IO;FileStream;false;FileStream;(System.IntPtr,System.IO.FileAccess,System.Boolean,System.Int32);;Argument[this];file;manual | +| System.IO;FileStream;false;FileStream;(System.IntPtr,System.IO.FileAccess,System.Boolean,System.Int32,System.Boolean);;Argument[this];file-write;manual | +| System.IO;FileStream;false;FileStream;(System.IntPtr,System.IO.FileAccess,System.Boolean,System.Int32,System.Boolean);;Argument[this];file;manual | +| System.IO;FileStream;false;FileStream;(System.String,System.IO.FileMode);;Argument[this];file-write;manual | +| System.IO;FileStream;false;FileStream;(System.String,System.IO.FileMode);;Argument[this];file;manual | +| System.IO;FileStream;false;FileStream;(System.String,System.IO.FileMode,System.IO.FileAccess);;Argument[this];file-write;manual | +| System.IO;FileStream;false;FileStream;(System.String,System.IO.FileMode,System.IO.FileAccess);;Argument[this];file;manual | +| System.IO;FileStream;false;FileStream;(System.String,System.IO.FileMode,System.IO.FileAccess,System.IO.FileShare);;Argument[this];file-write;manual | +| System.IO;FileStream;false;FileStream;(System.String,System.IO.FileMode,System.IO.FileAccess,System.IO.FileShare);;Argument[this];file;manual | +| System.IO;FileStream;false;FileStream;(System.String,System.IO.FileMode,System.IO.FileAccess,System.IO.FileShare,System.Int32);;Argument[this];file-write;manual | +| System.IO;FileStream;false;FileStream;(System.String,System.IO.FileMode,System.IO.FileAccess,System.IO.FileShare,System.Int32);;Argument[this];file;manual | +| System.IO;FileStream;false;FileStream;(System.String,System.IO.FileMode,System.IO.FileAccess,System.IO.FileShare,System.Int32,System.Boolean);;Argument[this];file-write;manual | +| System.IO;FileStream;false;FileStream;(System.String,System.IO.FileMode,System.IO.FileAccess,System.IO.FileShare,System.Int32,System.Boolean);;Argument[this];file;manual | +| System.IO;FileStream;false;FileStream;(System.String,System.IO.FileMode,System.IO.FileAccess,System.IO.FileShare,System.Int32,System.IO.FileOptions);;Argument[this];file-write;manual | +| System.IO;FileStream;false;FileStream;(System.String,System.IO.FileMode,System.IO.FileAccess,System.IO.FileShare,System.Int32,System.IO.FileOptions);;Argument[this];file;manual | +| System.IO;FileStream;false;FileStream;(System.String,System.IO.FileStreamOptions);;Argument[this];file-write;manual | +| System.IO;FileStream;false;FileStream;(System.String,System.IO.FileStreamOptions);;Argument[this];file;manual | +| System.IO;StreamWriter;false;StreamWriter;(System.String);;Argument[this];file-write;manual | +| System.IO;StreamWriter;false;StreamWriter;(System.String,System.Boolean);;Argument[this];file-write;manual | +| System.IO;StreamWriter;false;StreamWriter;(System.String,System.Boolean,System.Text.Encoding);;Argument[this];file-write;manual | +| System.IO;StreamWriter;false;StreamWriter;(System.String,System.Boolean,System.Text.Encoding,System.Int32);;Argument[this];file-write;manual | +| System.IO;StreamWriter;false;StreamWriter;(System.String,System.IO.FileStreamOptions);;Argument[this];file-write;manual | +| System.IO;StreamWriter;false;StreamWriter;(System.String,System.Text.Encoding,System.IO.FileStreamOptions);;Argument[this];file-write;manual | +| System.Net.Sockets;TcpClient;false;GetStream;();;ReturnValue;remote;manual | +| System;Console;false;Read;();;ReturnValue;local;manual | +| System;Console;false;ReadKey;();;ReturnValue;local;manual | +| System;Console;false;ReadKey;(System.Boolean);;ReturnValue;local;manual | +| System;Console;false;ReadLine;();;ReturnValue;local;manual | +| System;Environment;false;ExpandEnvironmentVariables;(System.String);;ReturnValue;environment;manual | +| System;Environment;false;GetCommandLineArgs;();;ReturnValue;commandargs;manual | +| System;Environment;false;GetEnvironmentVariable;(System.String);;ReturnValue;environment;manual | +| System;Environment;false;GetEnvironmentVariable;(System.String,System.EnvironmentVariableTarget);;ReturnValue;environment;manual | +| System;Environment;false;GetEnvironmentVariables;();;ReturnValue;environment;manual | +| System;Environment;false;GetEnvironmentVariables;(System.EnvironmentVariableTarget);;ReturnValue;environment;manual | +| System;Environment;false;get_CommandLine;();;ReturnValue;commandargs;manual | +sink +| Dapper;SqlMapper;false;Execute;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;Argument[1];sql-injection;manual | +| Dapper;SqlMapper;false;ExecuteAsync;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;Argument[1];sql-injection;manual | +| Dapper;SqlMapper;false;ExecuteReader;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;Argument[1];sql-injection;manual | +| Dapper;SqlMapper;false;ExecuteReaderAsync;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;Argument[1];sql-injection;manual | +| Dapper;SqlMapper;false;ExecuteScalar;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;Argument[1];sql-injection;manual | +| Dapper;SqlMapper;false;ExecuteScalar;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;Argument[1];sql-injection;manual | +| Dapper;SqlMapper;false;ExecuteScalarAsync;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;Argument[1];sql-injection;manual | +| Dapper;SqlMapper;false;ExecuteScalarAsync;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;Argument[1];sql-injection;manual | +| Dapper;SqlMapper;false;Query;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Boolean,System.Nullable,System.Nullable);;Argument[1];sql-injection;manual | +| Dapper;SqlMapper;false;Query;(System.Data.IDbConnection,System.Type,System.String,System.Object,System.Data.IDbTransaction,System.Boolean,System.Nullable,System.Nullable);;Argument[2];sql-injection;manual | +| Dapper;SqlMapper;false;Query;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Boolean,System.Nullable,System.Nullable);;Argument[1];sql-injection;manual | +| Dapper;SqlMapper;false;Query;(System.Data.IDbConnection,System.String,System.Func,System.Object,System.Data.IDbTransaction,System.Boolean,System.String,System.Nullable,System.Nullable);;Argument[1];sql-injection;manual | +| Dapper;SqlMapper;false;Query;(System.Data.IDbConnection,System.String,System.Func,System.Object,System.Data.IDbTransaction,System.Boolean,System.String,System.Nullable,System.Nullable);;Argument[1];sql-injection;manual | +| Dapper;SqlMapper;false;Query;(System.Data.IDbConnection,System.String,System.Func,System.Object,System.Data.IDbTransaction,System.Boolean,System.String,System.Nullable,System.Nullable);;Argument[1];sql-injection;manual | +| Dapper;SqlMapper;false;Query;(System.Data.IDbConnection,System.String,System.Func,System.Object,System.Data.IDbTransaction,System.Boolean,System.String,System.Nullable,System.Nullable);;Argument[1];sql-injection;manual | +| Dapper;SqlMapper;false;Query;(System.Data.IDbConnection,System.String,System.Func,System.Object,System.Data.IDbTransaction,System.Boolean,System.String,System.Nullable,System.Nullable);;Argument[1];sql-injection;manual | +| Dapper;SqlMapper;false;Query;(System.Data.IDbConnection,System.String,System.Func,System.Object,System.Data.IDbTransaction,System.Boolean,System.String,System.Nullable,System.Nullable);;Argument[1];sql-injection;manual | +| Dapper;SqlMapper;false;Query;(System.Data.IDbConnection,System.String,System.Type[],System.Func,System.Object,System.Data.IDbTransaction,System.Boolean,System.String,System.Nullable,System.Nullable);;Argument[1];sql-injection;manual | +| Dapper;SqlMapper;false;QueryAsync;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;Argument[1];sql-injection;manual | +| Dapper;SqlMapper;false;QueryAsync;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;Argument[1];sql-injection;manual | +| Dapper;SqlMapper;false;QueryAsync;(System.Data.IDbConnection,System.String,System.Func,System.Object,System.Data.IDbTransaction,System.Boolean,System.String,System.Nullable,System.Nullable);;Argument[1];sql-injection;manual | +| Dapper;SqlMapper;false;QueryAsync;(System.Data.IDbConnection,System.String,System.Func,System.Object,System.Data.IDbTransaction,System.Boolean,System.String,System.Nullable,System.Nullable);;Argument[1];sql-injection;manual | +| Dapper;SqlMapper;false;QueryAsync;(System.Data.IDbConnection,System.String,System.Func,System.Object,System.Data.IDbTransaction,System.Boolean,System.String,System.Nullable,System.Nullable);;Argument[1];sql-injection;manual | +| Dapper;SqlMapper;false;QueryAsync;(System.Data.IDbConnection,System.String,System.Func,System.Object,System.Data.IDbTransaction,System.Boolean,System.String,System.Nullable,System.Nullable);;Argument[1];sql-injection;manual | +| Dapper;SqlMapper;false;QueryAsync;(System.Data.IDbConnection,System.String,System.Func,System.Object,System.Data.IDbTransaction,System.Boolean,System.String,System.Nullable,System.Nullable);;Argument[1];sql-injection;manual | +| Dapper;SqlMapper;false;QueryAsync;(System.Data.IDbConnection,System.String,System.Func,System.Object,System.Data.IDbTransaction,System.Boolean,System.String,System.Nullable,System.Nullable);;Argument[1];sql-injection;manual | +| Dapper;SqlMapper;false;QueryAsync;(System.Data.IDbConnection,System.String,System.Type[],System.Func,System.Object,System.Data.IDbTransaction,System.Boolean,System.String,System.Nullable,System.Nullable);;Argument[1];sql-injection;manual | +| Dapper;SqlMapper;false;QueryFirst;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;Argument[1];sql-injection;manual | +| Dapper;SqlMapper;false;QueryFirst;(System.Data.IDbConnection,System.Type,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;Argument[2];sql-injection;manual | +| Dapper;SqlMapper;false;QueryFirst;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;Argument[1];sql-injection;manual | +| Dapper;SqlMapper;false;QueryFirstAsync;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;Argument[1];sql-injection;manual | +| Dapper;SqlMapper;false;QueryFirstAsync;(System.Data.IDbConnection,System.Type,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;Argument[2];sql-injection;manual | +| Dapper;SqlMapper;false;QueryFirstAsync;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;Argument[1];sql-injection;manual | +| Dapper;SqlMapper;false;QueryFirstOrDefault;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;Argument[1];sql-injection;manual | +| Dapper;SqlMapper;false;QueryFirstOrDefault;(System.Data.IDbConnection,System.Type,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;Argument[2];sql-injection;manual | +| Dapper;SqlMapper;false;QueryFirstOrDefault;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;Argument[1];sql-injection;manual | +| Dapper;SqlMapper;false;QueryFirstOrDefaultAsync;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;Argument[1];sql-injection;manual | +| Dapper;SqlMapper;false;QueryFirstOrDefaultAsync;(System.Data.IDbConnection,System.Type,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;Argument[2];sql-injection;manual | +| Dapper;SqlMapper;false;QueryFirstOrDefaultAsync;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;Argument[1];sql-injection;manual | +| Dapper;SqlMapper;false;QueryMultiple;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;Argument[1];sql-injection;manual | +| Dapper;SqlMapper;false;QueryMultipleAsync;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;Argument[1];sql-injection;manual | +| Dapper;SqlMapper;false;QuerySingle;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;Argument[1];sql-injection;manual | +| Dapper;SqlMapper;false;QuerySingle;(System.Data.IDbConnection,System.Type,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;Argument[2];sql-injection;manual | +| Dapper;SqlMapper;false;QuerySingle;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;Argument[1];sql-injection;manual | +| Dapper;SqlMapper;false;QuerySingleAsync;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;Argument[1];sql-injection;manual | +| Dapper;SqlMapper;false;QuerySingleAsync;(System.Data.IDbConnection,System.Type,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;Argument[2];sql-injection;manual | +| Dapper;SqlMapper;false;QuerySingleAsync;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;Argument[1];sql-injection;manual | +| Dapper;SqlMapper;false;QuerySingleOrDefault;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;Argument[1];sql-injection;manual | +| Dapper;SqlMapper;false;QuerySingleOrDefault;(System.Data.IDbConnection,System.Type,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;Argument[2];sql-injection;manual | +| Dapper;SqlMapper;false;QuerySingleOrDefault;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;Argument[1];sql-injection;manual | +| Dapper;SqlMapper;false;QuerySingleOrDefaultAsync;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;Argument[1];sql-injection;manual | +| Dapper;SqlMapper;false;QuerySingleOrDefaultAsync;(System.Data.IDbConnection,System.Type,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;Argument[2];sql-injection;manual | +| Dapper;SqlMapper;false;QuerySingleOrDefaultAsync;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;Argument[1];sql-injection;manual | +| Microsoft.EntityFrameworkCore;RelationalDatabaseFacadeExtensions;false;ExecuteSqlRaw;(Microsoft.EntityFrameworkCore.Infrastructure.DatabaseFacade,System.String,System.Collections.Generic.IEnumerable);;Argument[1];sql-injection;manual | +| Microsoft.EntityFrameworkCore;RelationalDatabaseFacadeExtensions;false;ExecuteSqlRaw;(Microsoft.EntityFrameworkCore.Infrastructure.DatabaseFacade,System.String,System.Object[]);;Argument[1];sql-injection;manual | +| Microsoft.EntityFrameworkCore;RelationalDatabaseFacadeExtensions;false;ExecuteSqlRawAsync;(Microsoft.EntityFrameworkCore.Infrastructure.DatabaseFacade,System.String,System.Collections.Generic.IEnumerable,System.Threading.CancellationToken);;Argument[1];sql-injection;manual | +| Microsoft.EntityFrameworkCore;RelationalDatabaseFacadeExtensions;false;ExecuteSqlRawAsync;(Microsoft.EntityFrameworkCore.Infrastructure.DatabaseFacade,System.String,System.Object[]);;Argument[1];sql-injection;manual | +| Microsoft.EntityFrameworkCore;RelationalDatabaseFacadeExtensions;false;ExecuteSqlRawAsync;(Microsoft.EntityFrameworkCore.Infrastructure.DatabaseFacade,System.String,System.Threading.CancellationToken);;Argument[1];sql-injection;manual | +| Microsoft.EntityFrameworkCore;RelationalQueryableExtensions;false;FromSqlRaw;(Microsoft.EntityFrameworkCore.DbSet,System.String,System.Object[]);;Argument[1];sql-injection;manual | +| ServiceStack.Messaging;BackgroundMqClient;false;SendAllOneWay;(System.Collections.Generic.IEnumerable);;Argument[1].Element;file-content-store;manual | +| ServiceStack.Messaging;BackgroundMqClient;false;SendOneWay;(System.Object);;Argument[0];file-content-store;manual | +| ServiceStack.Messaging;BackgroundMqClient;false;SendOneWay;(System.String,System.Object);;Argument[1];file-content-store;manual | +| ServiceStack.Messaging;InMemoryMessageQueueClient;false;SendAllOneWay;(System.Collections.Generic.IEnumerable);;Argument[1].Element;file-content-store;manual | +| ServiceStack.Messaging;InMemoryMessageQueueClient;false;SendOneWay;(System.Object);;Argument[0];file-content-store;manual | +| ServiceStack.Messaging;InMemoryMessageQueueClient;false;SendOneWay;(System.String,System.Object);;Argument[1];file-content-store;manual | +| ServiceStack.Messaging;RedisMessageProducer;false;SendAllOneWay;(System.Collections.Generic.IEnumerable);;Argument[1].Element;file-content-store;manual | +| ServiceStack.Messaging;RedisMessageProducer;false;SendOneWay;(System.Object);;Argument[0];file-content-store;manual | +| ServiceStack.Messaging;RedisMessageProducer;false;SendOneWay;(System.String,System.Object);;Argument[1];file-content-store;manual | +| ServiceStack.Messaging;RedisMessageQueueClient;false;SendAllOneWay;(System.Collections.Generic.IEnumerable);;Argument[1].Element;file-content-store;manual | +| ServiceStack.Messaging;RedisMessageQueueClient;false;SendOneWay;(System.Object);;Argument[0];file-content-store;manual | +| ServiceStack.Messaging;RedisMessageQueueClient;false;SendOneWay;(System.String,System.Object);;Argument[1];file-content-store;manual | +| ServiceStack.OrmLite;IUntypedSqlExpression;true;UnsafeAnd;(System.String,System.Object[]);;Argument[0];sql-injection;manual | +| ServiceStack.OrmLite;IUntypedSqlExpression;true;UnsafeFrom;(System.String);;Argument[0];sql-injection;manual | +| ServiceStack.OrmLite;IUntypedSqlExpression;true;UnsafeOr;(System.String,System.Object[]);;Argument[0];sql-injection;manual | +| ServiceStack.OrmLite;IUntypedSqlExpression;true;UnsafeSelect;(System.String);;Argument[0];sql-injection;manual | +| ServiceStack.OrmLite;IUntypedSqlExpression;true;UnsafeWhere;(System.String,System.Object[]);;Argument[0];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadApi;false;Column;(System.Data.IDbConnection,System.String,System.Collections.Generic.IEnumerable);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadApi;false;Column;(System.Data.IDbConnection,System.String,System.Object);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadApi;false;ColumnDistinct;(System.Data.IDbConnection,System.String,System.Collections.Generic.IEnumerable);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadApi;false;ColumnDistinct;(System.Data.IDbConnection,System.String,System.Object);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadApi;false;ColumnLazy;(System.Data.IDbConnection,System.String,System.Collections.Generic.IEnumerable);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadApi;false;ColumnLazy;(System.Data.IDbConnection,System.String,System.Object);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadApi;false;Dictionary;(System.Data.IDbConnection,System.String,System.Object);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadApi;false;ExecuteNonQuery;(System.Data.IDbConnection,System.String);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadApi;false;ExecuteNonQuery;(System.Data.IDbConnection,System.String,System.Action);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadApi;false;ExecuteNonQuery;(System.Data.IDbConnection,System.String,System.Collections.Generic.Dictionary);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadApi;false;ExecuteNonQuery;(System.Data.IDbConnection,System.String,System.Object);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadApi;false;Exists;(System.Data.IDbConnection,System.String,System.Object);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadApi;false;Lookup;(System.Data.IDbConnection,System.String,System.Collections.Generic.IEnumerable);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadApi;false;Lookup;(System.Data.IDbConnection,System.String,System.Object);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadApi;false;Scalar;(System.Data.IDbConnection,System.String,System.Collections.Generic.IEnumerable);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadApi;false;Scalar;(System.Data.IDbConnection,System.String,System.Object);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadApi;false;Select;(System.Data.IDbConnection,System.String);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadApi;false;Select;(System.Data.IDbConnection,System.String,System.Collections.Generic.Dictionary);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadApi;false;Select;(System.Data.IDbConnection,System.String,System.Collections.Generic.IEnumerable);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadApi;false;Select;(System.Data.IDbConnection,System.String,System.Object);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadApi;false;Select;(System.Data.IDbConnection,System.Type,System.String,System.Object);;Argument[2];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadApi;false;SelectLazy;(System.Data.IDbConnection,System.String,System.Object);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadApi;false;SelectNonDefaults;(System.Data.IDbConnection,System.String,T);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadApi;false;Single;(System.Data.IDbConnection,System.String,System.Collections.Generic.IEnumerable);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadApi;false;Single;(System.Data.IDbConnection,System.String,System.Object);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadApi;false;SqlColumn;(System.Data.IDbConnection,System.String,System.Collections.Generic.Dictionary);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadApi;false;SqlColumn;(System.Data.IDbConnection,System.String,System.Collections.Generic.IEnumerable);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadApi;false;SqlColumn;(System.Data.IDbConnection,System.String,System.Object);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadApi;false;SqlList;(System.Data.IDbConnection,System.String,System.Action);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadApi;false;SqlList;(System.Data.IDbConnection,System.String,System.Collections.Generic.Dictionary);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadApi;false;SqlList;(System.Data.IDbConnection,System.String,System.Collections.Generic.IEnumerable);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadApi;false;SqlList;(System.Data.IDbConnection,System.String,System.Object);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadApi;false;SqlScalar;(System.Data.IDbConnection,System.String,System.Collections.Generic.Dictionary);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadApi;false;SqlScalar;(System.Data.IDbConnection,System.String,System.Collections.Generic.IEnumerable);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadApi;false;SqlScalar;(System.Data.IDbConnection,System.String,System.Object);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadApiAsync;false;ColumnAsync;(System.Data.IDbConnection,System.String,System.Collections.Generic.IEnumerable,System.Threading.CancellationToken);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadApiAsync;false;ColumnAsync;(System.Data.IDbConnection,System.String,System.Object,System.Threading.CancellationToken);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadApiAsync;false;ColumnDistinctAsync;(System.Data.IDbConnection,System.String,System.Collections.Generic.IEnumerable,System.Threading.CancellationToken);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadApiAsync;false;ColumnDistinctAsync;(System.Data.IDbConnection,System.String,System.Object,System.Threading.CancellationToken);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadApiAsync;false;DictionaryAsync;(System.Data.IDbConnection,System.String,System.Object,System.Threading.CancellationToken);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadApiAsync;false;ExecuteNonQueryAsync;(System.Data.IDbConnection,System.String,System.Collections.Generic.Dictionary,System.Threading.CancellationToken);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadApiAsync;false;ExecuteNonQueryAsync;(System.Data.IDbConnection,System.String,System.Object,System.Threading.CancellationToken);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadApiAsync;false;ExecuteNonQueryAsync;(System.Data.IDbConnection,System.String,System.Threading.CancellationToken);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadApiAsync;false;ExistsAsync;(System.Data.IDbConnection,System.String,System.Object,System.Threading.CancellationToken);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadApiAsync;false;KeyValuePairsAsync;(System.Data.IDbConnection,System.String,System.Collections.Generic.IEnumerable,System.Threading.CancellationToken);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadApiAsync;false;KeyValuePairsAsync;(System.Data.IDbConnection,System.String,System.Object,System.Threading.CancellationToken);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadApiAsync;false;LookupAsync;(System.Data.IDbConnection,System.String,System.Collections.Generic.IEnumerable,System.Threading.CancellationToken);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadApiAsync;false;LookupAsync;(System.Data.IDbConnection,System.String,System.Object,System.Threading.CancellationToken);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadApiAsync;false;ScalarAsync;(System.Data.IDbConnection,System.String,System.Collections.Generic.IEnumerable,System.Threading.CancellationToken);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadApiAsync;false;ScalarAsync;(System.Data.IDbConnection,System.String,System.Object,System.Threading.CancellationToken);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadApiAsync;false;SelectAsync;(System.Data.IDbConnection,System.String,System.Collections.Generic.Dictionary,System.Threading.CancellationToken);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadApiAsync;false;SelectAsync;(System.Data.IDbConnection,System.String,System.Collections.Generic.IEnumerable,System.Threading.CancellationToken);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadApiAsync;false;SelectAsync;(System.Data.IDbConnection,System.String,System.Object,System.Threading.CancellationToken);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadApiAsync;false;SelectAsync;(System.Data.IDbConnection,System.String,System.Threading.CancellationToken);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadApiAsync;false;SelectAsync;(System.Data.IDbConnection,System.Type,System.String,System.Object,System.Threading.CancellationToken);;Argument[2];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadApiAsync;false;SelectNonDefaultsAsync;(System.Data.IDbConnection,System.String,T,System.Threading.CancellationToken);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadApiAsync;false;SingleAsync;(System.Data.IDbConnection,System.String,System.Collections.Generic.IEnumerable,System.Threading.CancellationToken);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadApiAsync;false;SingleAsync;(System.Data.IDbConnection,System.String,System.Object,System.Threading.CancellationToken);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadApiAsync;false;SqlColumnAsync;(System.Data.IDbConnection,System.String,System.Collections.Generic.Dictionary,System.Threading.CancellationToken);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadApiAsync;false;SqlColumnAsync;(System.Data.IDbConnection,System.String,System.Collections.Generic.IEnumerable,System.Threading.CancellationToken);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadApiAsync;false;SqlColumnAsync;(System.Data.IDbConnection,System.String,System.Object,System.Threading.CancellationToken);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadApiAsync;false;SqlListAsync;(System.Data.IDbConnection,System.String,System.Action,System.Threading.CancellationToken);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadApiAsync;false;SqlListAsync;(System.Data.IDbConnection,System.String,System.Collections.Generic.Dictionary,System.Threading.CancellationToken);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadApiAsync;false;SqlListAsync;(System.Data.IDbConnection,System.String,System.Collections.Generic.IEnumerable,System.Threading.CancellationToken);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadApiAsync;false;SqlListAsync;(System.Data.IDbConnection,System.String,System.Object,System.Threading.CancellationToken);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadApiAsync;false;SqlScalarAsync;(System.Data.IDbConnection,System.String,System.Collections.Generic.Dictionary,System.Threading.CancellationToken);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadApiAsync;false;SqlScalarAsync;(System.Data.IDbConnection,System.String,System.Collections.Generic.IEnumerable,System.Threading.CancellationToken);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadApiAsync;false;SqlScalarAsync;(System.Data.IDbConnection,System.String,System.Object,System.Threading.CancellationToken);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadExpressionsApi;false;RowCount;(System.Data.IDbConnection,System.String,System.Collections.Generic.IEnumerable);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadExpressionsApi;false;RowCount;(System.Data.IDbConnection,System.String,System.Object);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadExpressionsApiAsync;false;RowCountAsync;(System.Data.IDbConnection,System.String,System.Object,System.Threading.CancellationToken);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteWriteApi;false;ExecuteSql;(System.Data.IDbConnection,System.String);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteWriteApi;false;ExecuteSql;(System.Data.IDbConnection,System.String,System.Collections.Generic.Dictionary);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteWriteApi;false;ExecuteSql;(System.Data.IDbConnection,System.String,System.Object);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteWriteApiAsync;false;ExecuteSqlAsync;(System.Data.IDbConnection,System.String,System.Object,System.Threading.CancellationToken);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteWriteApiAsync;false;ExecuteSqlAsync;(System.Data.IDbConnection,System.String,System.Threading.CancellationToken);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;SqlExpression;true;UnsafeAnd;(System.String,System.Object[]);;Argument[0];sql-injection;manual | +| ServiceStack.OrmLite;SqlExpression;true;UnsafeFrom;(System.String);;Argument[0];sql-injection;manual | +| ServiceStack.OrmLite;SqlExpression;true;UnsafeGroupBy;(System.String);;Argument[0];sql-injection;manual | +| ServiceStack.OrmLite;SqlExpression;true;UnsafeHaving;(System.String,System.Object[]);;Argument[0];sql-injection;manual | +| ServiceStack.OrmLite;SqlExpression;true;UnsafeOr;(System.String,System.Object[]);;Argument[0];sql-injection;manual | +| ServiceStack.OrmLite;SqlExpression;true;UnsafeOrderBy;(System.String);;Argument[0];sql-injection;manual | +| ServiceStack.OrmLite;SqlExpression;true;UnsafeSelect;(System.String);;Argument[0];sql-injection;manual | +| ServiceStack.OrmLite;SqlExpression;true;UnsafeSelect;(System.String,System.Boolean);;Argument[0];sql-injection;manual | +| ServiceStack.OrmLite;SqlExpression;true;UnsafeWhere;(System.String,System.Object[]);;Argument[0];sql-injection;manual | +| ServiceStack.OrmLite;UntypedSqlExpressionProxy;false;UnsafeAnd;(System.String,System.Object[]);;Argument[0];sql-injection;manual | +| ServiceStack.OrmLite;UntypedSqlExpressionProxy;false;UnsafeFrom;(System.String);;Argument[0];sql-injection;manual | +| ServiceStack.OrmLite;UntypedSqlExpressionProxy;false;UnsafeOr;(System.String,System.Object[]);;Argument[0];sql-injection;manual | +| ServiceStack.OrmLite;UntypedSqlExpressionProxy;false;UnsafeSelect;(System.String);;Argument[0];sql-injection;manual | +| ServiceStack.OrmLite;UntypedSqlExpressionProxy;false;UnsafeWhere;(System.String,System.Object[]);;Argument[0];sql-injection;manual | +| ServiceStack.Redis;IRedisClient;true;Custom;(System.Object[]);;Argument[0];code-injection;manual | +| ServiceStack.Redis;IRedisClient;true;ExecLua;(System.String,System.String[]);;Argument[0];code-injection;manual | +| ServiceStack.Redis;IRedisClient;true;ExecLua;(System.String,System.String[],System.String[]);;Argument[0];code-injection;manual | +| ServiceStack.Redis;IRedisClient;true;ExecLuaAsInt;(System.String,System.String[]);;Argument[0];code-injection;manual | +| ServiceStack.Redis;IRedisClient;true;ExecLuaAsInt;(System.String,System.String[],System.String[]);;Argument[0];code-injection;manual | +| ServiceStack.Redis;IRedisClient;true;ExecLuaAsList;(System.String,System.String[]);;Argument[0];code-injection;manual | +| ServiceStack.Redis;IRedisClient;true;ExecLuaAsList;(System.String,System.String[],System.String[]);;Argument[0];code-injection;manual | +| ServiceStack.Redis;IRedisClient;true;ExecLuaAsString;(System.String,System.String[]);;Argument[0];code-injection;manual | +| ServiceStack.Redis;IRedisClient;true;ExecLuaAsString;(System.String,System.String[],System.String[]);;Argument[0];code-injection;manual | +| ServiceStack.Redis;IRedisClient;true;LoadLuaScript;(System.String);;Argument[0];code-injection;manual | +| ServiceStack.Redis;IRedisClientAsync;true;CustomAsync;(System.Object[]);;Argument[0];code-injection;manual | +| ServiceStack.Redis;IRedisClientAsync;true;CustomAsync;(System.Object[],System.Threading.CancellationToken);;Argument[0].Element;code-injection;manual | +| ServiceStack.Redis;IRedisClientAsync;true;ExecLuaAsIntAsync;(System.String,System.String[]);;Argument[0];code-injection;manual | +| ServiceStack.Redis;IRedisClientAsync;true;ExecLuaAsIntAsync;(System.String,System.String[],System.String[],System.Threading.CancellationToken);;Argument[0];code-injection;manual | +| ServiceStack.Redis;IRedisClientAsync;true;ExecLuaAsIntAsync;(System.String,System.String[],System.Threading.CancellationToken);;Argument[0];code-injection;manual | +| ServiceStack.Redis;IRedisClientAsync;true;ExecLuaAsListAsync;(System.String,System.String[]);;Argument[0];code-injection;manual | +| ServiceStack.Redis;IRedisClientAsync;true;ExecLuaAsListAsync;(System.String,System.String[],System.String[],System.Threading.CancellationToken);;Argument[0];code-injection;manual | +| ServiceStack.Redis;IRedisClientAsync;true;ExecLuaAsListAsync;(System.String,System.String[],System.Threading.CancellationToken);;Argument[0];code-injection;manual | +| ServiceStack.Redis;IRedisClientAsync;true;ExecLuaAsStringAsync;(System.String,System.String[]);;Argument[0];code-injection;manual | +| ServiceStack.Redis;IRedisClientAsync;true;ExecLuaAsStringAsync;(System.String,System.String[],System.String[],System.Threading.CancellationToken);;Argument[0];code-injection;manual | +| ServiceStack.Redis;IRedisClientAsync;true;ExecLuaAsStringAsync;(System.String,System.String[],System.Threading.CancellationToken);;Argument[0];code-injection;manual | +| ServiceStack.Redis;IRedisClientAsync;true;ExecLuaAsync;(System.String,System.String[]);;Argument[0];code-injection;manual | +| ServiceStack.Redis;IRedisClientAsync;true;ExecLuaAsync;(System.String,System.String[],System.String[],System.Threading.CancellationToken);;Argument[0];code-injection;manual | +| ServiceStack.Redis;IRedisClientAsync;true;ExecLuaAsync;(System.String,System.String[],System.Threading.CancellationToken);;Argument[0];code-injection;manual | +| ServiceStack.Redis;IRedisClientAsync;true;LoadLuaScriptAsync;(System.String,System.Threading.CancellationToken);;Argument[0];code-injection;manual | +| ServiceStack.Testing;MockRestGateway;false;Delete;(ServiceStack.IReturn);;Argument[0];file-content-store;manual | +| ServiceStack.Testing;MockRestGateway;false;Get;(ServiceStack.IReturn);;Argument[0];file-content-store;manual | +| ServiceStack.Testing;MockRestGateway;false;Post;(ServiceStack.IReturn);;Argument[0];file-content-store;manual | +| ServiceStack.Testing;MockRestGateway;false;Put;(ServiceStack.IReturn);;Argument[0];file-content-store;manual | +| ServiceStack.Testing;MockRestGateway;false;Send;(ServiceStack.IReturn);;Argument[0];file-content-store;manual | +| ServiceStack;CachedServiceClient;false;CustomMethod;(System.String,ServiceStack.IReturnVoid);;Argument[1];file-content-store;manual | +| ServiceStack;CachedServiceClient;false;CustomMethod;(System.String,ServiceStack.IReturn);;Argument[1];file-content-store;manual | +| ServiceStack;CachedServiceClient;false;CustomMethod;(System.String,System.Object);;Argument[1];file-content-store;manual | +| ServiceStack;CachedServiceClient;false;CustomMethodAsync;(System.String,ServiceStack.IReturnVoid,System.Threading.CancellationToken);;Argument[1];file-content-store;manual | +| ServiceStack;CachedServiceClient;false;CustomMethodAsync;(System.String,ServiceStack.IReturn,System.Threading.CancellationToken);;Argument[1];file-content-store;manual | +| ServiceStack;CachedServiceClient;false;CustomMethodAsync;(System.String,System.Object,System.Threading.CancellationToken);;Argument[1];file-content-store;manual | +| ServiceStack;CachedServiceClient;false;Delete;(ServiceStack.IReturnVoid);;Argument[0];file-content-store;manual | +| ServiceStack;CachedServiceClient;false;Delete;(ServiceStack.IReturn);;Argument[0];file-content-store;manual | +| ServiceStack;CachedServiceClient;false;Delete;(System.Object);;Argument[0];file-content-store;manual | +| ServiceStack;CachedServiceClient;false;DeleteAsync;(ServiceStack.IReturnVoid,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;CachedServiceClient;false;DeleteAsync;(ServiceStack.IReturn,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;CachedServiceClient;false;DeleteAsync;(System.Object,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;CachedServiceClient;false;Get;(ServiceStack.IReturnVoid);;Argument[0];file-content-store;manual | +| ServiceStack;CachedServiceClient;false;Get;(ServiceStack.IReturn);;Argument[0];file-content-store;manual | +| ServiceStack;CachedServiceClient;false;Get;(System.Object);;Argument[0];file-content-store;manual | +| ServiceStack;CachedServiceClient;false;GetAsync;(ServiceStack.IReturnVoid,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;CachedServiceClient;false;GetAsync;(ServiceStack.IReturn,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;CachedServiceClient;false;GetAsync;(System.Object,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;CachedServiceClient;false;Patch;(ServiceStack.IReturnVoid);;Argument[0];file-content-store;manual | +| ServiceStack;CachedServiceClient;false;Patch;(ServiceStack.IReturn);;Argument[0];file-content-store;manual | +| ServiceStack;CachedServiceClient;false;Patch;(System.Object);;Argument[0];file-content-store;manual | +| ServiceStack;CachedServiceClient;false;Patch;(System.String,System.Object);;Argument[1];file-content-store;manual | +| ServiceStack;CachedServiceClient;false;PatchAsync;(ServiceStack.IReturnVoid,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;CachedServiceClient;false;PatchAsync;(ServiceStack.IReturn,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;CachedServiceClient;false;PatchAsync;(System.Object,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;CachedServiceClient;false;Post;(ServiceStack.IReturnVoid);;Argument[0];file-content-store;manual | +| ServiceStack;CachedServiceClient;false;Post;(ServiceStack.IReturn);;Argument[0];file-content-store;manual | +| ServiceStack;CachedServiceClient;false;Post;(System.Object);;Argument[0];file-content-store;manual | +| ServiceStack;CachedServiceClient;false;Post;(System.String,System.Object);;Argument[1];file-content-store;manual | +| ServiceStack;CachedServiceClient;false;PostAsync;(ServiceStack.IReturnVoid,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;CachedServiceClient;false;PostAsync;(ServiceStack.IReturn,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;CachedServiceClient;false;PostAsync;(System.Object,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;CachedServiceClient;false;Publish;(System.Object);;Argument[0];file-content-store;manual | +| ServiceStack;CachedServiceClient;false;PublishAll;(System.Collections.Generic.IEnumerable);;Argument[0].Element;file-content-store;manual | +| ServiceStack;CachedServiceClient;false;PublishAllAsync;(System.Collections.Generic.IEnumerable,System.Threading.CancellationToken);;Argument[0].Element;file-content-store;manual | +| ServiceStack;CachedServiceClient;false;PublishAsync;(System.Object,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;CachedServiceClient;false;Put;(ServiceStack.IReturnVoid);;Argument[0];file-content-store;manual | +| ServiceStack;CachedServiceClient;false;Put;(ServiceStack.IReturn);;Argument[0];file-content-store;manual | +| ServiceStack;CachedServiceClient;false;Put;(System.Object);;Argument[0];file-content-store;manual | +| ServiceStack;CachedServiceClient;false;Put;(System.String,System.Object);;Argument[1];file-content-store;manual | +| ServiceStack;CachedServiceClient;false;PutAsync;(ServiceStack.IReturnVoid,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;CachedServiceClient;false;PutAsync;(ServiceStack.IReturn,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;CachedServiceClient;false;PutAsync;(System.Object,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;CachedServiceClient;false;Send;(System.Object);;Argument[0];file-content-store;manual | +| ServiceStack;CachedServiceClient;false;Send;(System.String,System.String,System.Object);;Argument[2];file-content-store;manual | +| ServiceStack;CachedServiceClient;false;SendAll;(System.Collections.Generic.IEnumerable);;Argument[0].Element;file-content-store;manual | +| ServiceStack;CachedServiceClient;false;SendAllAsync;(System.Collections.Generic.IEnumerable,System.Threading.CancellationToken);;Argument[0].Element;file-content-store;manual | +| ServiceStack;CachedServiceClient;false;SendAllOneWay;(System.Collections.Generic.IEnumerable);;Argument[1].Element;file-content-store;manual | +| ServiceStack;CachedServiceClient;false;SendAsync;(System.Object,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;CachedServiceClient;false;SendOneWay;(System.Object);;Argument[0];file-content-store;manual | +| ServiceStack;CachedServiceClient;false;SendOneWay;(System.String,System.Object);;Argument[1];file-content-store;manual | +| ServiceStack;EncryptedServiceClient;false;Publish;(System.Object);;Argument[0];file-content-store;manual | +| ServiceStack;EncryptedServiceClient;false;PublishAll;(System.Collections.Generic.IEnumerable);;Argument[0].Element;file-content-store;manual | +| ServiceStack;EncryptedServiceClient;false;Send;(System.Object);;Argument[0];file-content-store;manual | +| ServiceStack;EncryptedServiceClient;false;SendAll;(System.Collections.Generic.IEnumerable);;Argument[0].Element;file-content-store;manual | +| ServiceStack;IOneWayClient;true;SendAllOneWay;(System.Collections.Generic.IEnumerable);;Argument[1].Element;file-content-store;manual | +| ServiceStack;IOneWayClient;true;SendOneWay;(System.Object);;Argument[0];file-content-store;manual | +| ServiceStack;IOneWayClient;true;SendOneWay;(System.String,System.Object);;Argument[1];file-content-store;manual | +| ServiceStack;IRestClient;true;Patch;(System.String,System.Object);;Argument[1];file-content-store;manual | +| ServiceStack;IRestClient;true;Post;(System.String,System.Object);;Argument[1];file-content-store;manual | +| ServiceStack;IRestClient;true;Put;(System.String,System.Object);;Argument[1];file-content-store;manual | +| ServiceStack;IRestClient;true;Send;(System.String,System.String,System.Object);;Argument[2];file-content-store;manual | +| ServiceStack;IRestClientAsync;true;CustomMethodAsync;(System.String,ServiceStack.IReturnVoid,System.Threading.CancellationToken);;Argument[1];file-content-store;manual | +| ServiceStack;IRestClientAsync;true;CustomMethodAsync;(System.String,ServiceStack.IReturn,System.Threading.CancellationToken);;Argument[1];file-content-store;manual | +| ServiceStack;IRestClientAsync;true;CustomMethodAsync;(System.String,System.Object,System.Threading.CancellationToken);;Argument[1];file-content-store;manual | +| ServiceStack;IRestClientAsync;true;DeleteAsync;(ServiceStack.IReturnVoid,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;IRestClientAsync;true;DeleteAsync;(ServiceStack.IReturn,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;IRestClientAsync;true;DeleteAsync;(System.Object,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;IRestClientAsync;true;GetAsync;(ServiceStack.IReturnVoid,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;IRestClientAsync;true;GetAsync;(ServiceStack.IReturn,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;IRestClientAsync;true;GetAsync;(System.Object,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;IRestClientAsync;true;PatchAsync;(ServiceStack.IReturnVoid,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;IRestClientAsync;true;PatchAsync;(ServiceStack.IReturn,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;IRestClientAsync;true;PatchAsync;(System.Object,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;IRestClientAsync;true;PostAsync;(ServiceStack.IReturnVoid,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;IRestClientAsync;true;PostAsync;(ServiceStack.IReturn,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;IRestClientAsync;true;PostAsync;(System.Object,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;IRestClientAsync;true;PutAsync;(ServiceStack.IReturnVoid,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;IRestClientAsync;true;PutAsync;(ServiceStack.IReturn,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;IRestClientAsync;true;PutAsync;(System.Object,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;IRestClientSync;true;CustomMethod;(System.String,ServiceStack.IReturnVoid);;Argument[1];file-content-store;manual | +| ServiceStack;IRestClientSync;true;CustomMethod;(System.String,ServiceStack.IReturn);;Argument[1];file-content-store;manual | +| ServiceStack;IRestClientSync;true;CustomMethod;(System.String,System.Object);;Argument[1];file-content-store;manual | +| ServiceStack;IRestClientSync;true;Delete;(ServiceStack.IReturnVoid);;Argument[0];file-content-store;manual | +| ServiceStack;IRestClientSync;true;Delete;(ServiceStack.IReturn);;Argument[0];file-content-store;manual | +| ServiceStack;IRestClientSync;true;Delete;(System.Object);;Argument[0];file-content-store;manual | +| ServiceStack;IRestClientSync;true;Get;(ServiceStack.IReturnVoid);;Argument[0];file-content-store;manual | +| ServiceStack;IRestClientSync;true;Get;(ServiceStack.IReturn);;Argument[0];file-content-store;manual | +| ServiceStack;IRestClientSync;true;Get;(System.Object);;Argument[0];file-content-store;manual | +| ServiceStack;IRestClientSync;true;Patch;(ServiceStack.IReturnVoid);;Argument[0];file-content-store;manual | +| ServiceStack;IRestClientSync;true;Patch;(ServiceStack.IReturn);;Argument[0];file-content-store;manual | +| ServiceStack;IRestClientSync;true;Patch;(System.Object);;Argument[0];file-content-store;manual | +| ServiceStack;IRestClientSync;true;Post;(ServiceStack.IReturnVoid);;Argument[0];file-content-store;manual | +| ServiceStack;IRestClientSync;true;Post;(ServiceStack.IReturn);;Argument[0];file-content-store;manual | +| ServiceStack;IRestClientSync;true;Post;(System.Object);;Argument[0];file-content-store;manual | +| ServiceStack;IRestClientSync;true;Put;(ServiceStack.IReturnVoid);;Argument[0];file-content-store;manual | +| ServiceStack;IRestClientSync;true;Put;(ServiceStack.IReturn);;Argument[0];file-content-store;manual | +| ServiceStack;IRestClientSync;true;Put;(System.Object);;Argument[0];file-content-store;manual | +| ServiceStack;IRestGateway;true;Delete;(ServiceStack.IReturn);;Argument[0];file-content-store;manual | +| ServiceStack;IRestGateway;true;Get;(ServiceStack.IReturn);;Argument[0];file-content-store;manual | +| ServiceStack;IRestGateway;true;Post;(ServiceStack.IReturn);;Argument[0];file-content-store;manual | +| ServiceStack;IRestGateway;true;Put;(ServiceStack.IReturn);;Argument[0];file-content-store;manual | +| ServiceStack;IRestGateway;true;Send;(ServiceStack.IReturn);;Argument[0];file-content-store;manual | +| ServiceStack;IRestGatewayAsync;true;DeleteAsync;(ServiceStack.IReturn,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;IRestGatewayAsync;true;GetAsync;(ServiceStack.IReturn,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;IRestGatewayAsync;true;PostAsync;(ServiceStack.IReturn,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;IRestGatewayAsync;true;PutAsync;(ServiceStack.IReturn,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;IRestGatewayAsync;true;SendAsync;(ServiceStack.IReturn,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;IServiceGateway;true;Publish;(System.Object);;Argument[0];file-content-store;manual | +| ServiceStack;IServiceGateway;true;PublishAll;(System.Collections.Generic.IEnumerable);;Argument[0].Element;file-content-store;manual | +| ServiceStack;IServiceGateway;true;Send;(System.Object);;Argument[0];file-content-store;manual | +| ServiceStack;IServiceGateway;true;SendAll;(System.Collections.Generic.IEnumerable);;Argument[0].Element;file-content-store;manual | +| ServiceStack;IServiceGatewayAsync;true;PublishAllAsync;(System.Collections.Generic.IEnumerable,System.Threading.CancellationToken);;Argument[0].Element;file-content-store;manual | +| ServiceStack;IServiceGatewayAsync;true;PublishAsync;(System.Object,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;IServiceGatewayAsync;true;SendAllAsync;(System.Collections.Generic.IEnumerable,System.Threading.CancellationToken);;Argument[0].Element;file-content-store;manual | +| ServiceStack;IServiceGatewayAsync;true;SendAsync;(System.Object,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;InProcessServiceGateway;false;Publish;(System.Object);;Argument[0];file-content-store;manual | +| ServiceStack;InProcessServiceGateway;false;PublishAll;(System.Collections.Generic.IEnumerable);;Argument[0].Element;file-content-store;manual | +| ServiceStack;InProcessServiceGateway;false;PublishAllAsync;(System.Collections.Generic.IEnumerable,System.Threading.CancellationToken);;Argument[0].Element;file-content-store;manual | +| ServiceStack;InProcessServiceGateway;false;PublishAsync;(System.Object,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;InProcessServiceGateway;false;Send;(System.Object);;Argument[0];file-content-store;manual | +| ServiceStack;InProcessServiceGateway;false;SendAll;(System.Collections.Generic.IEnumerable);;Argument[0].Element;file-content-store;manual | +| ServiceStack;InProcessServiceGateway;false;SendAllAsync;(System.Collections.Generic.IEnumerable,System.Threading.CancellationToken);;Argument[0].Element;file-content-store;manual | +| ServiceStack;InProcessServiceGateway;false;SendAsync;(System.Object,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;JsonApiClient;false;CustomMethod;(System.String,ServiceStack.IReturnVoid);;Argument[1];file-content-store;manual | +| ServiceStack;JsonApiClient;false;CustomMethod;(System.String,ServiceStack.IReturn);;Argument[1];file-content-store;manual | +| ServiceStack;JsonApiClient;false;CustomMethod;(System.String,System.Object);;Argument[1];file-content-store;manual | +| ServiceStack;JsonApiClient;false;CustomMethodAsync;(System.String,ServiceStack.IReturnVoid,System.Threading.CancellationToken);;Argument[1];file-content-store;manual | +| ServiceStack;JsonApiClient;false;CustomMethodAsync;(System.String,ServiceStack.IReturn,System.Threading.CancellationToken);;Argument[1];file-content-store;manual | +| ServiceStack;JsonApiClient;false;CustomMethodAsync;(System.String,System.Object,System.Threading.CancellationToken);;Argument[1];file-content-store;manual | +| ServiceStack;JsonApiClient;false;Delete;(ServiceStack.IReturnVoid);;Argument[0];file-content-store;manual | +| ServiceStack;JsonApiClient;false;Delete;(ServiceStack.IReturn);;Argument[0];file-content-store;manual | +| ServiceStack;JsonApiClient;false;Delete;(System.Object);;Argument[0];file-content-store;manual | +| ServiceStack;JsonApiClient;false;DeleteAsync;(ServiceStack.IReturnVoid,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;JsonApiClient;false;DeleteAsync;(ServiceStack.IReturn,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;JsonApiClient;false;DeleteAsync;(System.Object,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;JsonApiClient;false;Get;(ServiceStack.IReturnVoid);;Argument[0];file-content-store;manual | +| ServiceStack;JsonApiClient;false;Get;(ServiceStack.IReturn);;Argument[0];file-content-store;manual | +| ServiceStack;JsonApiClient;false;Get;(System.Object);;Argument[0];file-content-store;manual | +| ServiceStack;JsonApiClient;false;GetAsync;(ServiceStack.IReturnVoid,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;JsonApiClient;false;GetAsync;(ServiceStack.IReturn,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;JsonApiClient;false;GetAsync;(System.Object,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;JsonApiClient;false;Patch;(ServiceStack.IReturnVoid);;Argument[0];file-content-store;manual | +| ServiceStack;JsonApiClient;false;Patch;(ServiceStack.IReturn);;Argument[0];file-content-store;manual | +| ServiceStack;JsonApiClient;false;Patch;(System.Object);;Argument[0];file-content-store;manual | +| ServiceStack;JsonApiClient;false;Patch;(System.String,System.Object);;Argument[1];file-content-store;manual | +| ServiceStack;JsonApiClient;false;PatchAsync;(ServiceStack.IReturnVoid,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;JsonApiClient;false;PatchAsync;(ServiceStack.IReturn,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;JsonApiClient;false;PatchAsync;(System.Object,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;JsonApiClient;false;Post;(ServiceStack.IReturnVoid);;Argument[0];file-content-store;manual | +| ServiceStack;JsonApiClient;false;Post;(ServiceStack.IReturn);;Argument[0];file-content-store;manual | +| ServiceStack;JsonApiClient;false;Post;(System.Object);;Argument[0];file-content-store;manual | +| ServiceStack;JsonApiClient;false;Post;(System.String,System.Object);;Argument[1];file-content-store;manual | +| ServiceStack;JsonApiClient;false;PostAsync;(ServiceStack.IReturnVoid,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;JsonApiClient;false;PostAsync;(ServiceStack.IReturn,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;JsonApiClient;false;PostAsync;(System.Object,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;JsonApiClient;false;Publish;(System.Object);;Argument[0];file-content-store;manual | +| ServiceStack;JsonApiClient;false;PublishAll;(System.Collections.Generic.IEnumerable);;Argument[0].Element;file-content-store;manual | +| ServiceStack;JsonApiClient;false;PublishAllAsync;(System.Collections.Generic.IEnumerable,System.Threading.CancellationToken);;Argument[0].Element;file-content-store;manual | +| ServiceStack;JsonApiClient;false;PublishAsync;(System.Object,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;JsonApiClient;false;Put;(ServiceStack.IReturnVoid);;Argument[0];file-content-store;manual | +| ServiceStack;JsonApiClient;false;Put;(ServiceStack.IReturn);;Argument[0];file-content-store;manual | +| ServiceStack;JsonApiClient;false;Put;(System.Object);;Argument[0];file-content-store;manual | +| ServiceStack;JsonApiClient;false;Put;(System.String,System.Object);;Argument[1];file-content-store;manual | +| ServiceStack;JsonApiClient;false;PutAsync;(ServiceStack.IReturnVoid,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;JsonApiClient;false;PutAsync;(ServiceStack.IReturn,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;JsonApiClient;false;PutAsync;(System.Object,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;JsonApiClient;false;Send;(System.Object);;Argument[0];file-content-store;manual | +| ServiceStack;JsonApiClient;false;Send;(System.String,System.String,System.Object);;Argument[2];file-content-store;manual | +| ServiceStack;JsonApiClient;false;SendAll;(System.Collections.Generic.IEnumerable);;Argument[0].Element;file-content-store;manual | +| ServiceStack;JsonApiClient;false;SendAllAsync;(System.Collections.Generic.IEnumerable,System.Threading.CancellationToken);;Argument[0].Element;file-content-store;manual | +| ServiceStack;JsonApiClient;false;SendAllOneWay;(System.Collections.Generic.IEnumerable);;Argument[1].Element;file-content-store;manual | +| ServiceStack;JsonApiClient;false;SendAsync;(System.Object,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;JsonApiClient;false;SendOneWay;(System.Object);;Argument[0];file-content-store;manual | +| ServiceStack;JsonApiClient;false;SendOneWay;(System.String,System.Object);;Argument[1];file-content-store;manual | +| ServiceStack;ServiceClientBase;false;DownloadBytes;(System.String,System.String,System.Object);;Argument[2];file-content-store;manual | +| ServiceStack;ServiceClientBase;false;DownloadBytesAsync;(System.String,System.String,System.Object);;Argument[2];file-content-store;manual | +| ServiceStack;ServiceClientBase;false;Publish;(ServiceStack.Messaging.IMessage);;Argument[0];file-content-store;manual | +| ServiceStack;ServiceClientBase;false;Publish;(T);;Argument[0];file-content-store;manual | +| ServiceStack;ServiceClientBase;false;PublishAll;(System.Collections.Generic.IEnumerable);;Argument[0].Element;file-content-store;manual | +| ServiceStack;ServiceClientBase;false;PublishAllAsync;(System.Collections.Generic.IEnumerable,System.Threading.CancellationToken);;Argument[0].Element;file-content-store;manual | +| ServiceStack;ServiceClientBase;false;PublishAsync;(System.Object,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;ServiceClientBase;false;SendAllAsync;(System.Collections.Generic.IEnumerable,System.Threading.CancellationToken);;Argument[0].Element;file-content-store;manual | +| ServiceStack;ServiceClientBase;true;CustomMethod;(System.String,ServiceStack.IReturnVoid);;Argument[1];file-content-store;manual | +| ServiceStack;ServiceClientBase;true;CustomMethod;(System.String,System.String,System.Object);;Argument[2];file-content-store;manual | +| ServiceStack;ServiceClientBase;true;CustomMethod;(System.String,ServiceStack.IReturn);;Argument[1];file-content-store;manual | +| ServiceStack;ServiceClientBase;true;CustomMethod;(System.String,System.Object);;Argument[1];file-content-store;manual | +| ServiceStack;ServiceClientBase;true;CustomMethod;(System.String,System.String,System.Object);;Argument[2];file-content-store;manual | +| ServiceStack;ServiceClientBase;true;CustomMethodAsync;(System.String,ServiceStack.IReturnVoid,System.Threading.CancellationToken);;Argument[1];file-content-store;manual | +| ServiceStack;ServiceClientBase;true;CustomMethodAsync;(System.String,ServiceStack.IReturn,System.Threading.CancellationToken);;Argument[1];file-content-store;manual | +| ServiceStack;ServiceClientBase;true;CustomMethodAsync;(System.String,System.Object,System.Threading.CancellationToken);;Argument[1];file-content-store;manual | +| ServiceStack;ServiceClientBase;true;CustomMethodAsync;(System.String,System.String,System.Object,System.Threading.CancellationToken);;Argument[2];file-content-store;manual | +| ServiceStack;ServiceClientBase;true;Delete;(ServiceStack.IReturnVoid);;Argument[0];file-content-store;manual | +| ServiceStack;ServiceClientBase;true;Delete;(System.Object);;Argument[0];file-content-store;manual | +| ServiceStack;ServiceClientBase;true;Delete;(ServiceStack.IReturn);;Argument[0];file-content-store;manual | +| ServiceStack;ServiceClientBase;true;Delete;(System.Object);;Argument[0];file-content-store;manual | +| ServiceStack;ServiceClientBase;true;DeleteAsync;(ServiceStack.IReturnVoid,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;ServiceClientBase;true;DeleteAsync;(ServiceStack.IReturn,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;ServiceClientBase;true;DeleteAsync;(System.Object,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;ServiceClientBase;true;Get;(ServiceStack.IReturnVoid);;Argument[0];file-content-store;manual | +| ServiceStack;ServiceClientBase;true;Get;(System.Object);;Argument[0];file-content-store;manual | +| ServiceStack;ServiceClientBase;true;Get;(ServiceStack.IReturn);;Argument[0];file-content-store;manual | +| ServiceStack;ServiceClientBase;true;Get;(System.Object);;Argument[0];file-content-store;manual | +| ServiceStack;ServiceClientBase;true;GetAsync;(ServiceStack.IReturnVoid,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;ServiceClientBase;true;GetAsync;(ServiceStack.IReturn,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;ServiceClientBase;true;GetAsync;(System.Object,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;ServiceClientBase;true;Head;(ServiceStack.IReturn);;Argument[0];file-content-store;manual | +| ServiceStack;ServiceClientBase;true;Head;(System.Object);;Argument[0];file-content-store;manual | +| ServiceStack;ServiceClientBase;true;Patch;(ServiceStack.IReturnVoid);;Argument[0];file-content-store;manual | +| ServiceStack;ServiceClientBase;true;Patch;(System.Object);;Argument[0];file-content-store;manual | +| ServiceStack;ServiceClientBase;true;Patch;(ServiceStack.IReturn);;Argument[0];file-content-store;manual | +| ServiceStack;ServiceClientBase;true;Patch;(System.Object);;Argument[0];file-content-store;manual | +| ServiceStack;ServiceClientBase;true;Patch;(System.String,System.Object);;Argument[1];file-content-store;manual | +| ServiceStack;ServiceClientBase;true;PatchAsync;(ServiceStack.IReturnVoid,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;ServiceClientBase;true;PatchAsync;(ServiceStack.IReturn,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;ServiceClientBase;true;PatchAsync;(System.Object,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;ServiceClientBase;true;Post;(ServiceStack.IReturnVoid);;Argument[0];file-content-store;manual | +| ServiceStack;ServiceClientBase;true;Post;(System.Object);;Argument[0];file-content-store;manual | +| ServiceStack;ServiceClientBase;true;Post;(ServiceStack.IReturn);;Argument[0];file-content-store;manual | +| ServiceStack;ServiceClientBase;true;Post;(System.Object);;Argument[0];file-content-store;manual | +| ServiceStack;ServiceClientBase;true;Post;(System.String,System.Object);;Argument[1];file-content-store;manual | +| ServiceStack;ServiceClientBase;true;PostAsync;(ServiceStack.IReturnVoid,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;ServiceClientBase;true;PostAsync;(ServiceStack.IReturn,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;ServiceClientBase;true;PostAsync;(System.Object,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;ServiceClientBase;true;Publish;(System.Object);;Argument[0];file-content-store;manual | +| ServiceStack;ServiceClientBase;true;Put;(ServiceStack.IReturnVoid);;Argument[0];file-content-store;manual | +| ServiceStack;ServiceClientBase;true;Put;(System.Object);;Argument[0];file-content-store;manual | +| ServiceStack;ServiceClientBase;true;Put;(ServiceStack.IReturn);;Argument[0];file-content-store;manual | +| ServiceStack;ServiceClientBase;true;Put;(System.Object);;Argument[0];file-content-store;manual | +| ServiceStack;ServiceClientBase;true;Put;(System.String,System.Object);;Argument[1];file-content-store;manual | +| ServiceStack;ServiceClientBase;true;PutAsync;(ServiceStack.IReturnVoid,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;ServiceClientBase;true;PutAsync;(ServiceStack.IReturn,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;ServiceClientBase;true;PutAsync;(System.Object,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;ServiceClientBase;true;Send;(System.Object);;Argument[0];file-content-store;manual | +| ServiceStack;ServiceClientBase;true;Send;(System.String,System.String,System.Object);;Argument[2];file-content-store;manual | +| ServiceStack;ServiceClientBase;true;SendAll;(System.Collections.Generic.IEnumerable);;Argument[0].Element;file-content-store;manual | +| ServiceStack;ServiceClientBase;true;SendAllOneWay;(System.Collections.Generic.IEnumerable);;Argument[1].Element;file-content-store;manual | +| ServiceStack;ServiceClientBase;true;SendAsync;(System.Object,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;ServiceClientBase;true;SendOneWay;(System.Object);;Argument[0];file-content-store;manual | +| ServiceStack;ServiceClientBase;true;SendOneWay;(System.String,System.Object);;Argument[1];file-content-store;manual | +| ServiceStack;ServiceGatewayFactoryBase;false;Publish;(System.Object);;Argument[0];file-content-store;manual | +| ServiceStack;ServiceGatewayFactoryBase;false;PublishAll;(System.Collections.Generic.IEnumerable);;Argument[0].Element;file-content-store;manual | +| ServiceStack;ServiceGatewayFactoryBase;false;PublishAllAsync;(System.Collections.Generic.IEnumerable,System.Threading.CancellationToken);;Argument[0].Element;file-content-store;manual | +| ServiceStack;ServiceGatewayFactoryBase;false;PublishAsync;(System.Object,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;ServiceGatewayFactoryBase;false;Send;(System.Object);;Argument[0];file-content-store;manual | +| ServiceStack;ServiceGatewayFactoryBase;false;SendAll;(System.Collections.Generic.IEnumerable);;Argument[0].Element;file-content-store;manual | +| ServiceStack;ServiceGatewayFactoryBase;false;SendAllAsync;(System.Collections.Generic.IEnumerable,System.Threading.CancellationToken);;Argument[0].Element;file-content-store;manual | +| ServiceStack;ServiceGatewayFactoryBase;false;SendAsync;(System.Object,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| System.Data.Entity;Database;false;ExecuteSqlCommand;(System.Data.Entity.TransactionalBehavior,System.String,System.Object[]);;Argument[1];sql-injection;manual | +| System.Data.Entity;Database;false;ExecuteSqlCommand;(System.String,System.Object[]);;Argument[0];sql-injection;manual | +| System.Data.Entity;Database;false;ExecuteSqlCommandAsync;(System.Data.Entity.TransactionalBehavior,System.String,System.Object[]);;Argument[1];sql-injection;manual | +| System.Data.Entity;Database;false;ExecuteSqlCommandAsync;(System.Data.Entity.TransactionalBehavior,System.String,System.Threading.CancellationToken,System.Object[]);;Argument[1];sql-injection;manual | +| System.Data.Entity;Database;false;ExecuteSqlCommandAsync;(System.String,System.Object[]);;Argument[0];sql-injection;manual | +| System.Data.Entity;Database;false;ExecuteSqlCommandAsync;(System.String,System.Threading.CancellationToken,System.Object[]);;Argument[0];sql-injection;manual | +| System.Data.Entity;Database;false;SqlQuery;(System.Type,System.String,System.Object[]);;Argument[1];sql-injection;manual | +| System.Data.Entity;Database;false;SqlQuery;(System.String,System.Object[]);;Argument[0];sql-injection;manual | +| System.Data.Entity;DbSet;true;SqlQuery;(System.String,System.Object[]);;Argument[0];sql-injection;manual | +| System.Data.SqlClient;SqlCommand;false;SqlCommand;(System.String);;Argument[0];sql-injection;manual | +| System.Data.SqlClient;SqlCommand;false;SqlCommand;(System.String,System.Data.SqlClient.SqlConnection);;Argument[0];sql-injection;manual | +| System.Data.SqlClient;SqlCommand;false;SqlCommand;(System.String,System.Data.SqlClient.SqlConnection,System.Data.SqlClient.SqlTransaction);;Argument[0];sql-injection;manual | +| System.Data.SqlClient;SqlDataAdapter;false;SqlDataAdapter;(System.Data.SqlClient.SqlCommand);;Argument[0];sql-injection;manual | +| System.Data.SqlClient;SqlDataAdapter;false;SqlDataAdapter;(System.String,System.Data.SqlClient.SqlConnection);;Argument[0];sql-injection;manual | +| System.Data.SqlClient;SqlDataAdapter;false;SqlDataAdapter;(System.String,System.String);;Argument[0];sql-injection;manual | +| System.Net.Http;StringContent;false;StringContent;(System.String);;Argument[0];js-injection;df-generated | +| System.Net.Http;StringContent;false;StringContent;(System.String);;Argument[0];js-injection;manual | +| System.Net.Http;StringContent;false;StringContent;(System.String,System.Net.Http.Headers.MediaTypeHeaderValue);;Argument[0];js-injection;df-generated | +| System.Net.Http;StringContent;false;StringContent;(System.String,System.Net.Http.Headers.MediaTypeHeaderValue);;Argument[0];js-injection;manual | +| System.Net.Http;StringContent;false;StringContent;(System.String,System.Text.Encoding);;Argument[0];js-injection;df-generated | +| System.Net.Http;StringContent;false;StringContent;(System.String,System.Text.Encoding);;Argument[0];js-injection;manual | +| System.Net.Http;StringContent;false;StringContent;(System.String,System.Text.Encoding,System.Net.Http.Headers.MediaTypeHeaderValue);;Argument[0];js-injection;manual | +| System.Net.Http;StringContent;false;StringContent;(System.String,System.Text.Encoding,System.String);;Argument[0];js-injection;df-generated | +| System.Net.Http;StringContent;false;StringContent;(System.String,System.Text.Encoding,System.String);;Argument[0];js-injection;manual | +| System.Security.Cryptography;AesCng;false;CreateDecryptor;();;Argument[this];encryption-decryptor;df-generated | +| System.Security.Cryptography;AesCng;false;CreateDecryptor;(System.Byte[],System.Byte[]);;Argument[0];encryption-decryptor;manual | +| System.Security.Cryptography;AesCng;false;CreateEncryptor;();;Argument[this];encryption-encryptor;df-generated | +| System.Security.Cryptography;AesCng;false;CreateEncryptor;(System.Byte[],System.Byte[]);;Argument[0];encryption-encryptor;manual | +| System.Security.Cryptography;AesCng;false;set_Key;(System.Byte[]);;Argument[0];encryption-keyprop;manual | +| System.Security.Cryptography;AesCryptoServiceProvider;false;CreateDecryptor;();;Argument[this];encryption-decryptor;df-generated | +| System.Security.Cryptography;AesCryptoServiceProvider;false;CreateDecryptor;(System.Byte[],System.Byte[]);;Argument[0];encryption-decryptor;df-generated | +| System.Security.Cryptography;AesCryptoServiceProvider;false;CreateDecryptor;(System.Byte[],System.Byte[]);;Argument[0];encryption-decryptor;manual | +| System.Security.Cryptography;AesCryptoServiceProvider;false;CreateEncryptor;();;Argument[this];encryption-encryptor;df-generated | +| System.Security.Cryptography;AesCryptoServiceProvider;false;CreateEncryptor;(System.Byte[],System.Byte[]);;Argument[0];encryption-encryptor;df-generated | +| System.Security.Cryptography;AesCryptoServiceProvider;false;CreateEncryptor;(System.Byte[],System.Byte[]);;Argument[0];encryption-encryptor;manual | +| System.Security.Cryptography;AesCryptoServiceProvider;false;set_Key;(System.Byte[]);;Argument[0];encryption-keyprop;df-generated | +| System.Security.Cryptography;AesCryptoServiceProvider;false;set_Key;(System.Byte[]);;Argument[0];encryption-keyprop;manual | +| System.Security.Cryptography;AesManaged;false;CreateDecryptor;();;Argument[this];encryption-decryptor;df-generated | +| System.Security.Cryptography;AesManaged;false;CreateDecryptor;(System.Byte[],System.Byte[]);;Argument[0];encryption-decryptor;df-generated | +| System.Security.Cryptography;AesManaged;false;CreateDecryptor;(System.Byte[],System.Byte[]);;Argument[0];encryption-decryptor;manual | +| System.Security.Cryptography;AesManaged;false;CreateEncryptor;();;Argument[this];encryption-encryptor;df-generated | +| System.Security.Cryptography;AesManaged;false;CreateEncryptor;(System.Byte[],System.Byte[]);;Argument[0];encryption-encryptor;df-generated | +| System.Security.Cryptography;AesManaged;false;CreateEncryptor;(System.Byte[],System.Byte[]);;Argument[0];encryption-encryptor;manual | +| System.Security.Cryptography;AesManaged;false;set_Key;(System.Byte[]);;Argument[0];encryption-keyprop;df-generated | +| System.Security.Cryptography;AesManaged;false;set_Key;(System.Byte[]);;Argument[0];encryption-keyprop;manual | +| System.Security.Cryptography;DES;false;set_Key;(System.Byte[]);;Argument[0];encryption-keyprop;df-generated | +| System.Security.Cryptography;DES;false;set_Key;(System.Byte[]);;Argument[0];encryption-keyprop;manual | +| System.Security.Cryptography;DESCryptoServiceProvider;false;CreateDecryptor;();;Argument[this];encryption-decryptor;df-generated | +| System.Security.Cryptography;DESCryptoServiceProvider;false;CreateDecryptor;(System.Byte[],System.Byte[]);;Argument[0];encryption-decryptor;df-generated | +| System.Security.Cryptography;DESCryptoServiceProvider;false;CreateDecryptor;(System.Byte[],System.Byte[]);;Argument[0];encryption-decryptor;manual | +| System.Security.Cryptography;DESCryptoServiceProvider;false;CreateEncryptor;();;Argument[this];encryption-encryptor;df-generated | +| System.Security.Cryptography;DESCryptoServiceProvider;false;CreateEncryptor;(System.Byte[],System.Byte[]);;Argument[0];encryption-encryptor;df-generated | +| System.Security.Cryptography;DESCryptoServiceProvider;false;CreateEncryptor;(System.Byte[],System.Byte[]);;Argument[0];encryption-encryptor;manual | +| System.Security.Cryptography;RC2CryptoServiceProvider;false;CreateDecryptor;(System.Byte[],System.Byte[]);;Argument[0];encryption-decryptor;df-generated | +| System.Security.Cryptography;RC2CryptoServiceProvider;false;CreateDecryptor;(System.Byte[],System.Byte[]);;Argument[0];encryption-decryptor;manual | +| System.Security.Cryptography;RC2CryptoServiceProvider;false;CreateEncryptor;(System.Byte[],System.Byte[]);;Argument[0];encryption-encryptor;df-generated | +| System.Security.Cryptography;RC2CryptoServiceProvider;false;CreateEncryptor;(System.Byte[],System.Byte[]);;Argument[0];encryption-encryptor;manual | +| System.Security.Cryptography;RijndaelManaged;false;CreateDecryptor;();;Argument[this];encryption-decryptor;df-generated | +| System.Security.Cryptography;RijndaelManaged;false;CreateDecryptor;(System.Byte[],System.Byte[]);;Argument[0];encryption-decryptor;df-generated | +| System.Security.Cryptography;RijndaelManaged;false;CreateDecryptor;(System.Byte[],System.Byte[]);;Argument[0];encryption-decryptor;manual | +| System.Security.Cryptography;RijndaelManaged;false;CreateEncryptor;();;Argument[this];encryption-encryptor;df-generated | +| System.Security.Cryptography;RijndaelManaged;false;CreateEncryptor;(System.Byte[],System.Byte[]);;Argument[0];encryption-encryptor;df-generated | +| System.Security.Cryptography;RijndaelManaged;false;CreateEncryptor;(System.Byte[],System.Byte[]);;Argument[0];encryption-encryptor;manual | +| System.Security.Cryptography;RijndaelManaged;false;set_Key;(System.Byte[]);;Argument[0];encryption-keyprop;df-generated | +| System.Security.Cryptography;RijndaelManaged;false;set_Key;(System.Byte[]);;Argument[0];encryption-keyprop;manual | +| System.Security.Cryptography;SymmetricAlgorithm;true;CreateDecryptor;();;Argument[this];encryption-decryptor;df-generated | +| System.Security.Cryptography;SymmetricAlgorithm;true;CreateDecryptor;(System.Byte[],System.Byte[]);;Argument[0];encryption-decryptor;manual | +| System.Security.Cryptography;SymmetricAlgorithm;true;CreateEncryptor;();;Argument[this];encryption-encryptor;df-generated | +| System.Security.Cryptography;SymmetricAlgorithm;true;CreateEncryptor;(System.Byte[],System.Byte[]);;Argument[0];encryption-encryptor;manual | +| System.Security.Cryptography;SymmetricAlgorithm;true;set_Key;(System.Byte[]);;Argument[0];encryption-keyprop;manual | +| System.Security.Cryptography;TripleDES;false;set_Key;(System.Byte[]);;Argument[0];encryption-keyprop;df-generated | +| System.Security.Cryptography;TripleDES;false;set_Key;(System.Byte[]);;Argument[0];encryption-keyprop;manual | +| System.Security.Cryptography;TripleDESCng;false;CreateDecryptor;();;Argument[this];encryption-decryptor;df-generated | +| System.Security.Cryptography;TripleDESCng;false;CreateDecryptor;(System.Byte[],System.Byte[]);;Argument[0];encryption-decryptor;manual | +| System.Security.Cryptography;TripleDESCng;false;CreateEncryptor;();;Argument[this];encryption-encryptor;df-generated | +| System.Security.Cryptography;TripleDESCng;false;CreateEncryptor;(System.Byte[],System.Byte[]);;Argument[0];encryption-encryptor;manual | +| System.Security.Cryptography;TripleDESCng;false;set_Key;(System.Byte[]);;Argument[0];encryption-keyprop;manual | +| System.Security.Cryptography;TripleDESCryptoServiceProvider;false;CreateDecryptor;();;Argument[this];encryption-decryptor;df-generated | +| System.Security.Cryptography;TripleDESCryptoServiceProvider;false;CreateDecryptor;(System.Byte[],System.Byte[]);;Argument[0];encryption-decryptor;df-generated | +| System.Security.Cryptography;TripleDESCryptoServiceProvider;false;CreateDecryptor;(System.Byte[],System.Byte[]);;Argument[0];encryption-decryptor;manual | +| System.Security.Cryptography;TripleDESCryptoServiceProvider;false;CreateEncryptor;();;Argument[this];encryption-encryptor;df-generated | +| System.Security.Cryptography;TripleDESCryptoServiceProvider;false;CreateEncryptor;(System.Byte[],System.Byte[]);;Argument[0];encryption-encryptor;df-generated | +| System.Security.Cryptography;TripleDESCryptoServiceProvider;false;CreateEncryptor;(System.Byte[],System.Byte[]);;Argument[0];encryption-encryptor;manual | +| System.Security.Cryptography;TripleDESCryptoServiceProvider;false;set_Key;(System.Byte[]);;Argument[0];encryption-keyprop;df-generated | +| System.Security.Cryptography;TripleDESCryptoServiceProvider;false;set_Key;(System.Byte[]);;Argument[0];encryption-keyprop;manual | +| System.Web;HttpResponse;false;Write;(System.Object);;Argument[0];html-injection;manual | +| System.Web;HttpResponse;false;Write;(System.String);;Argument[0];html-injection;manual | +| System.Web;HttpResponse;false;WriteFile;(System.String);;Argument[0];html-injection;manual | summary | Dapper;CustomPropertyTypeMap;false;CustomPropertyTypeMap;(System.Type,System.Func);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | | Dapper;DynamicParameters;false;Output;(T,System.Linq.Expressions.Expression>,System.Nullable,System.Nullable);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | @@ -9,6 +736,7 @@ summary | Dapper;SqlMapper+GridReader;false;Read;(System.Func,System.String,System.Boolean);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | | Dapper;SqlMapper+GridReader;false;Read;(System.Func,System.String,System.Boolean);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | | Dapper;SqlMapper+GridReader;false;Read;(System.Type[],System.Func,System.String,System.Boolean);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| Dapper;SqlMapper;false;AsList;(System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue.Element;value;manual | | Dapper;SqlMapper;false;Query;(System.Data.IDbConnection,System.String,System.Func,System.Object,System.Data.IDbTransaction,System.Boolean,System.String,System.Nullable,System.Nullable);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | | Dapper;SqlMapper;false;Query;(System.Data.IDbConnection,System.String,System.Func,System.Object,System.Data.IDbTransaction,System.Boolean,System.String,System.Nullable,System.Nullable);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | | Dapper;SqlMapper;false;Query;(System.Data.IDbConnection,System.String,System.Func,System.Object,System.Data.IDbTransaction,System.Boolean,System.String,System.Nullable,System.Nullable);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | @@ -860,7 +1588,7 @@ summary | Microsoft.AspNetCore.WebUtilities;BufferedReadStream;false;FlushAsync;(System.Threading.CancellationToken);;Argument[this];ReturnValue;taint;df-generated | | Microsoft.AspNetCore.WebUtilities;BufferedReadStream;false;Read;(System.Byte[],System.Int32,System.Int32);;Argument[this];Argument[0].Element;taint;manual | | Microsoft.AspNetCore.WebUtilities;BufferedReadStream;false;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);;Argument[this];Argument[0].Element;taint;manual | -| Microsoft.AspNetCore.WebUtilities;BufferedReadStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[this];ReturnValue;taint;df-generated | +| Microsoft.AspNetCore.WebUtilities;BufferedReadStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[this];Argument[0].Element;taint;manual | | Microsoft.AspNetCore.WebUtilities;BufferedReadStream;false;Write;(System.Byte[],System.Int32,System.Int32);;Argument[0].Element;Argument[this];taint;manual | | Microsoft.AspNetCore.WebUtilities;BufferedReadStream;false;WriteAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);;Argument[0].Element;Argument[this];taint;manual | | Microsoft.AspNetCore.WebUtilities;BufferedReadStream;false;WriteAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);;Argument[this];ReturnValue;taint;df-generated | @@ -868,8 +1596,9 @@ summary | Microsoft.AspNetCore.WebUtilities;FileBufferingReadStream;false;FileBufferingReadStream;(System.IO.Stream,System.Int32,System.Nullable,System.Func);;Argument[3];Argument[3].Parameter[delegate-self];value;hq-generated | | Microsoft.AspNetCore.WebUtilities;FileBufferingReadStream;false;FileBufferingReadStream;(System.IO.Stream,System.Int32,System.Nullable,System.Func,System.Buffers.ArrayPool);;Argument[3];Argument[3].Parameter[delegate-self];value;hq-generated | | Microsoft.AspNetCore.WebUtilities;FileBufferingReadStream;false;Read;(System.Byte[],System.Int32,System.Int32);;Argument[this];Argument[0].Element;taint;manual | +| Microsoft.AspNetCore.WebUtilities;FileBufferingReadStream;false;Read;(System.Span);;Argument[this];Argument[0].Element;taint;manual | | Microsoft.AspNetCore.WebUtilities;FileBufferingReadStream;false;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);;Argument[this];Argument[0].Element;taint;manual | -| Microsoft.AspNetCore.WebUtilities;FileBufferingReadStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[this];ReturnValue;taint;df-generated | +| Microsoft.AspNetCore.WebUtilities;FileBufferingReadStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[this];Argument[0].Element;taint;manual | | Microsoft.AspNetCore.WebUtilities;FileBufferingReadStream;false;Write;(System.Byte[],System.Int32,System.Int32);;Argument[0].Element;Argument[this];taint;manual | | Microsoft.AspNetCore.WebUtilities;FileBufferingReadStream;false;WriteAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);;Argument[0].Element;Argument[this];taint;manual | | Microsoft.AspNetCore.WebUtilities;FileBufferingReadStream;false;WriteAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);;Argument[this];ReturnValue;taint;df-generated | @@ -877,7 +1606,7 @@ summary | Microsoft.AspNetCore.WebUtilities;FileBufferingWriteStream;false;FlushAsync;(System.Threading.CancellationToken);;Argument[this];ReturnValue;taint;df-generated | | Microsoft.AspNetCore.WebUtilities;FileBufferingWriteStream;false;Read;(System.Byte[],System.Int32,System.Int32);;Argument[this];Argument[0].Element;taint;manual | | Microsoft.AspNetCore.WebUtilities;FileBufferingWriteStream;false;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);;Argument[this];Argument[0].Element;taint;manual | -| Microsoft.AspNetCore.WebUtilities;FileBufferingWriteStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[this];ReturnValue;taint;df-generated | +| Microsoft.AspNetCore.WebUtilities;FileBufferingWriteStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[this];Argument[0].Element;taint;manual | | Microsoft.AspNetCore.WebUtilities;FileBufferingWriteStream;false;Write;(System.Byte[],System.Int32,System.Int32);;Argument[0].Element;Argument[this];taint;manual | | Microsoft.AspNetCore.WebUtilities;FileBufferingWriteStream;false;WriteAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);;Argument[0].Element;Argument[this];taint;manual | | Microsoft.AspNetCore.WebUtilities;FileBufferingWriteStream;false;WriteAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);;Argument[this];ReturnValue;taint;df-generated | @@ -3457,6 +4186,7 @@ summary | ServiceStack.Text;NetCoreMemory;false;Deserialize;(System.IO.Stream,System.Type,ServiceStack.Text.Common.DeserializeStringSpanDelegate);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | | ServiceStack.Text;NetCoreMemory;false;DeserializeAsync;(System.IO.Stream,System.Type,ServiceStack.Text.Common.DeserializeStringSpanDelegate);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | | ServiceStack.Text;RecyclableMemoryStream;false;Read;(System.Byte[],System.Int32,System.Int32);;Argument[this];Argument[0].Element;taint;manual | +| ServiceStack.Text;RecyclableMemoryStream;false;Read;(System.Span);;Argument[this];Argument[0].Element;taint;manual | | ServiceStack.Text;RecyclableMemoryStream;false;Write;(System.Byte[],System.Int32,System.Int32);;Argument[0].Element;Argument[this];taint;manual | | ServiceStack.Text;RecyclableMemoryStreamManager+EventHandler;false;BeginInvoke;(System.AsyncCallback,System.Object);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | | ServiceStack.Text;RecyclableMemoryStreamManager+LargeBufferDiscardedEventHandler;false;BeginInvoke;(ServiceStack.Text.RecyclableMemoryStreamManager+Events+MemoryStreamDiscardReason,System.AsyncCallback,System.Object);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | @@ -8350,11 +9080,6 @@ summary | System.Diagnostics;ProcessStartInfo;false;get_UserName;();;Argument[this];ReturnValue;taint;df-generated | | System.Diagnostics;ProcessStartInfo;false;get_Verb;();;Argument[this];ReturnValue;taint;df-generated | | System.Diagnostics;ProcessStartInfo;false;get_WorkingDirectory;();;Argument[this];ReturnValue;taint;df-generated | -| System.Diagnostics;ProcessStartInfo;false;set_Arguments;(System.String);;Argument[0];Argument[this];taint;df-generated | -| System.Diagnostics;ProcessStartInfo;false;set_FileName;(System.String);;Argument[0];Argument[this];taint;df-generated | -| System.Diagnostics;ProcessStartInfo;false;set_UserName;(System.String);;Argument[0];Argument[this];taint;df-generated | -| System.Diagnostics;ProcessStartInfo;false;set_Verb;(System.String);;Argument[0];Argument[this];taint;df-generated | -| System.Diagnostics;ProcessStartInfo;false;set_WorkingDirectory;(System.String);;Argument[0];Argument[this];taint;df-generated | | System.Diagnostics;ProcessThreadCollection;false;Add;(System.Diagnostics.ProcessThread);;Argument[0];Argument[this].Element;value;manual | | System.Diagnostics;ProcessThreadCollection;false;CopyTo;(System.Diagnostics.ProcessThread[],System.Int32);;Argument[this].Element;Argument[0].Element;value;manual | | System.Diagnostics;SampleActivity;false;BeginInvoke;(System.Diagnostics.ActivityCreationOptions,System.AsyncCallback,System.Object);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | @@ -8785,8 +9510,9 @@ summary | System.IO.Compression;BrotliStream;false;FlushAsync;(System.Threading.CancellationToken);;Argument[0];ReturnValue;taint;df-generated | | System.IO.Compression;BrotliStream;false;FlushAsync;(System.Threading.CancellationToken);;Argument[this];ReturnValue;taint;df-generated | | System.IO.Compression;BrotliStream;false;Read;(System.Byte[],System.Int32,System.Int32);;Argument[this];Argument[0].Element;taint;manual | +| System.IO.Compression;BrotliStream;false;Read;(System.Span);;Argument[this];Argument[0].Element;taint;manual | | System.IO.Compression;BrotliStream;false;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);;Argument[this];Argument[0].Element;taint;manual | -| System.IO.Compression;BrotliStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[this];ReturnValue;taint;df-generated | +| System.IO.Compression;BrotliStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[this];Argument[0].Element;taint;manual | | System.IO.Compression;BrotliStream;false;Write;(System.Byte[],System.Int32,System.Int32);;Argument[0].Element;Argument[this];taint;manual | | System.IO.Compression;BrotliStream;false;WriteAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);;Argument[0].Element;Argument[this];taint;manual | | System.IO.Compression;BrotliStream;false;WriteAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);;Argument[this];ReturnValue;taint;df-generated | @@ -8804,8 +9530,9 @@ summary | System.IO.Compression;DeflateStream;false;FlushAsync;(System.Threading.CancellationToken);;Argument[0];ReturnValue;taint;df-generated | | System.IO.Compression;DeflateStream;false;FlushAsync;(System.Threading.CancellationToken);;Argument[this];ReturnValue;taint;df-generated | | System.IO.Compression;DeflateStream;false;Read;(System.Byte[],System.Int32,System.Int32);;Argument[this];Argument[0].Element;taint;manual | +| System.IO.Compression;DeflateStream;false;Read;(System.Span);;Argument[this];Argument[0].Element;taint;manual | | System.IO.Compression;DeflateStream;false;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);;Argument[this];Argument[0].Element;taint;manual | -| System.IO.Compression;DeflateStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[this];ReturnValue;taint;df-generated | +| System.IO.Compression;DeflateStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[this];Argument[0].Element;taint;manual | | System.IO.Compression;DeflateStream;false;Write;(System.Byte[],System.Int32,System.Int32);;Argument[0].Element;Argument[this];taint;manual | | System.IO.Compression;DeflateStream;false;WriteAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);;Argument[0].Element;Argument[this];taint;manual | | System.IO.Compression;DeflateStream;false;WriteAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);;Argument[this];ReturnValue;taint;df-generated | @@ -8821,8 +9548,9 @@ summary | System.IO.Compression;GZipStream;false;GZipStream;(System.IO.Stream,System.IO.Compression.CompressionLevel,System.Boolean);;Argument[0];Argument[this];taint;df-generated | | System.IO.Compression;GZipStream;false;GZipStream;(System.IO.Stream,System.IO.Compression.CompressionMode,System.Boolean);;Argument[0];Argument[this];taint;df-generated | | System.IO.Compression;GZipStream;false;Read;(System.Byte[],System.Int32,System.Int32);;Argument[this];Argument[0].Element;taint;manual | +| System.IO.Compression;GZipStream;false;Read;(System.Span);;Argument[this];Argument[0].Element;taint;manual | | System.IO.Compression;GZipStream;false;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);;Argument[this];Argument[0].Element;taint;manual | -| System.IO.Compression;GZipStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[this];ReturnValue;taint;df-generated | +| System.IO.Compression;GZipStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[this];Argument[0].Element;taint;manual | | System.IO.Compression;GZipStream;false;Write;(System.Byte[],System.Int32,System.Int32);;Argument[0].Element;Argument[this];taint;manual | | System.IO.Compression;GZipStream;false;WriteAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);;Argument[0].Element;Argument[this];taint;manual | | System.IO.Compression;GZipStream;false;WriteAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);;Argument[this];ReturnValue;taint;df-generated | @@ -8836,8 +9564,9 @@ summary | System.IO.Compression;ZLibStream;false;FlushAsync;(System.Threading.CancellationToken);;Argument[0];ReturnValue;taint;df-generated | | System.IO.Compression;ZLibStream;false;FlushAsync;(System.Threading.CancellationToken);;Argument[this];ReturnValue;taint;df-generated | | System.IO.Compression;ZLibStream;false;Read;(System.Byte[],System.Int32,System.Int32);;Argument[this];Argument[0].Element;taint;manual | +| System.IO.Compression;ZLibStream;false;Read;(System.Span);;Argument[this];Argument[0].Element;taint;manual | | System.IO.Compression;ZLibStream;false;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);;Argument[this];Argument[0].Element;taint;manual | -| System.IO.Compression;ZLibStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[this];ReturnValue;taint;df-generated | +| System.IO.Compression;ZLibStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[this];Argument[0].Element;taint;manual | | System.IO.Compression;ZLibStream;false;Write;(System.Byte[],System.Int32,System.Int32);;Argument[0].Element;Argument[this];taint;manual | | System.IO.Compression;ZLibStream;false;WriteAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);;Argument[0].Element;Argument[this];taint;manual | | System.IO.Compression;ZLibStream;false;WriteAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);;Argument[this];ReturnValue;taint;df-generated | @@ -8892,9 +9621,9 @@ summary | System.IO.IsolatedStorage;IsolatedStorageFileStream;false;FlushAsync;(System.Threading.CancellationToken);;Argument[0];ReturnValue;taint;df-generated | | System.IO.IsolatedStorage;IsolatedStorageFileStream;false;FlushAsync;(System.Threading.CancellationToken);;Argument[this];ReturnValue;taint;df-generated | | System.IO.IsolatedStorage;IsolatedStorageFileStream;false;Read;(System.Byte[],System.Int32,System.Int32);;Argument[this];Argument[0].Element;taint;manual | +| System.IO.IsolatedStorage;IsolatedStorageFileStream;false;Read;(System.Span);;Argument[this];Argument[0].Element;taint;manual | | System.IO.IsolatedStorage;IsolatedStorageFileStream;false;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);;Argument[this];Argument[0].Element;taint;manual | -| System.IO.IsolatedStorage;IsolatedStorageFileStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[1];ReturnValue;taint;df-generated | -| System.IO.IsolatedStorage;IsolatedStorageFileStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[this];ReturnValue;taint;df-generated | +| System.IO.IsolatedStorage;IsolatedStorageFileStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[this];Argument[0].Element;taint;manual | | System.IO.IsolatedStorage;IsolatedStorageFileStream;false;Write;(System.Byte[],System.Int32,System.Int32);;Argument[0].Element;Argument[this];taint;manual | | System.IO.IsolatedStorage;IsolatedStorageFileStream;false;WriteAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);;Argument[0].Element;Argument[this];taint;manual | | System.IO.IsolatedStorage;IsolatedStorageFileStream;false;WriteAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);;Argument[0];ReturnValue;taint;df-generated | @@ -8952,8 +9681,9 @@ summary | System.IO.Pipes;PipeStream;false;FlushAsync;(System.Threading.CancellationToken);;Argument[this];ReturnValue;taint;df-generated | | System.IO.Pipes;PipeStream;false;InitializeHandle;(Microsoft.Win32.SafeHandles.SafePipeHandle,System.Boolean,System.Boolean);;Argument[0];Argument[this];taint;df-generated | | System.IO.Pipes;PipeStream;false;Read;(System.Byte[],System.Int32,System.Int32);;Argument[this];Argument[0].Element;taint;manual | +| System.IO.Pipes;PipeStream;false;Read;(System.Span);;Argument[this];Argument[0].Element;taint;manual | | System.IO.Pipes;PipeStream;false;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);;Argument[this];Argument[0].Element;taint;manual | -| System.IO.Pipes;PipeStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[this];ReturnValue;taint;df-generated | +| System.IO.Pipes;PipeStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[this];Argument[0].Element;taint;manual | | System.IO.Pipes;PipeStream;false;Write;(System.Byte[],System.Int32,System.Int32);;Argument[0].Element;Argument[this];taint;manual | | System.IO.Pipes;PipeStream;false;WriteAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);;Argument[0].Element;Argument[this];taint;manual | | System.IO.Pipes;PipeStream;false;WriteAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);;Argument[this];ReturnValue;taint;df-generated | @@ -8974,13 +9704,15 @@ summary | System.IO;BufferedStream;false;BeginRead;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);;Argument[this];Argument[0].Element;taint;manual | | System.IO;BufferedStream;false;BeginWrite;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);;Argument[0].Element;Argument[this];taint;manual | | System.IO;BufferedStream;false;BeginWrite;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);;Argument[3];Argument[3].Parameter[delegate-self];value;manual | -| System.IO;BufferedStream;false;BufferedStream;(System.IO.Stream,System.Int32);;Argument[0];Argument[this];taint;df-generated | +| System.IO;BufferedStream;false;BufferedStream;(System.IO.Stream);;Argument[0];Argument[this];taint;manual | +| System.IO;BufferedStream;false;BufferedStream;(System.IO.Stream,System.Int32);;Argument[0];Argument[this];taint;manual | | System.IO;BufferedStream;false;CopyTo;(System.IO.Stream,System.Int32);;Argument[this];Argument[0];taint;manual | | System.IO;BufferedStream;false;CopyToAsync;(System.IO.Stream,System.Int32,System.Threading.CancellationToken);;Argument[this];Argument[0];taint;manual | | System.IO;BufferedStream;false;FlushAsync;(System.Threading.CancellationToken);;Argument[this];ReturnValue;taint;df-generated | | System.IO;BufferedStream;false;Read;(System.Byte[],System.Int32,System.Int32);;Argument[this];Argument[0].Element;taint;manual | +| System.IO;BufferedStream;false;Read;(System.Span);;Argument[this];Argument[0].Element;taint;manual | | System.IO;BufferedStream;false;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);;Argument[this];Argument[0].Element;taint;manual | -| System.IO;BufferedStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[this];ReturnValue;taint;df-generated | +| System.IO;BufferedStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[this];Argument[0].Element;taint;manual | | System.IO;BufferedStream;false;Write;(System.Byte[],System.Int32,System.Int32);;Argument[0].Element;Argument[this];taint;manual | | System.IO;BufferedStream;false;WriteAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);;Argument[0].Element;Argument[this];taint;manual | | System.IO;BufferedStream;false;WriteAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);;Argument[this];ReturnValue;taint;df-generated | @@ -9075,9 +9807,9 @@ summary | System.IO;FileStream;false;FlushAsync;(System.Threading.CancellationToken);;Argument[0];ReturnValue;taint;df-generated | | System.IO;FileStream;false;FlushAsync;(System.Threading.CancellationToken);;Argument[this];ReturnValue;taint;df-generated | | System.IO;FileStream;false;Read;(System.Byte[],System.Int32,System.Int32);;Argument[this];Argument[0].Element;taint;manual | +| System.IO;FileStream;false;Read;(System.Span);;Argument[this];Argument[0].Element;taint;manual | | System.IO;FileStream;false;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);;Argument[this];Argument[0].Element;taint;manual | -| System.IO;FileStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[1];ReturnValue;taint;df-generated | -| System.IO;FileStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[this];ReturnValue;taint;df-generated | +| System.IO;FileStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[this];Argument[0].Element;taint;manual | | System.IO;FileStream;false;Write;(System.Byte[],System.Int32,System.Int32);;Argument[0].Element;Argument[this];taint;manual | | System.IO;FileStream;false;WriteAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);;Argument[0].Element;Argument[this];taint;manual | | System.IO;FileStream;false;WriteAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);;Argument[0];ReturnValue;taint;df-generated | @@ -9130,8 +9862,9 @@ summary | System.IO;MemoryStream;false;MemoryStream;(System.Byte[],System.Int32,System.Int32,System.Boolean);;Argument[0].Element;Argument[this];taint;manual | | System.IO;MemoryStream;false;MemoryStream;(System.Byte[],System.Int32,System.Int32,System.Boolean,System.Boolean);;Argument[0].Element;Argument[this];taint;manual | | System.IO;MemoryStream;false;Read;(System.Byte[],System.Int32,System.Int32);;Argument[this];Argument[0].Element;taint;manual | +| System.IO;MemoryStream;false;Read;(System.Span);;Argument[this];Argument[0].Element;taint;manual | | System.IO;MemoryStream;false;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);;Argument[this];Argument[0].Element;taint;manual | -| System.IO;MemoryStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[this];ReturnValue;taint;df-generated | +| System.IO;MemoryStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[this];Argument[0].Element;taint;manual | | System.IO;MemoryStream;false;ToArray;();;Argument[this];ReturnValue;taint;manual | | System.IO;MemoryStream;false;TryGetBuffer;(System.ArraySegment);;Argument[this];ReturnValue;taint;df-generated | | System.IO;MemoryStream;false;Write;(System.Byte[],System.Int32,System.Int32);;Argument[0].Element;Argument[this];taint;manual | @@ -9204,6 +9937,10 @@ summary | System.IO;Stream;false;CopyToAsync;(System.IO.Stream,System.Threading.CancellationToken);;Argument[this];Argument[0];taint;manual | | System.IO;Stream;false;FlushAsync;();;Argument[this];ReturnValue;taint;df-generated | | System.IO;Stream;false;ReadAsync;(System.Byte[],System.Int32,System.Int32);;Argument[this];Argument[0].Element;taint;manual | +| System.IO;Stream;false;ReadAtLeast;(System.Span,System.Int32,System.Boolean);;Argument[this];Argument[0].Element;taint;manual | +| System.IO;Stream;false;ReadAtLeastAsync;(System.Memory,System.Int32,System.Boolean,System.Threading.CancellationToken);;Argument[this];Argument[0];taint;manual | +| System.IO;Stream;false;ReadExactly;(System.Byte[],System.Int32,System.Int32);;Argument[this];Argument[0].Element;taint;manual | +| System.IO;Stream;false;ReadExactly;(System.Span);;Argument[this];Argument[0].Element;taint;manual | | System.IO;Stream;false;Synchronized;(System.IO.Stream);;Argument[0];ReturnValue;taint;df-generated | | System.IO;Stream;false;WriteAsync;(System.Byte[],System.Int32,System.Int32);;Argument[0].Element;Argument[this];taint;manual | | System.IO;Stream;true;BeginRead;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);;Argument[3];Argument[3].Parameter[delegate-self];value;manual | @@ -9214,8 +9951,9 @@ summary | System.IO;Stream;true;CopyToAsync;(System.IO.Stream,System.Int32,System.Threading.CancellationToken);;Argument[this];Argument[0];taint;manual | | System.IO;Stream;true;FlushAsync;(System.Threading.CancellationToken);;Argument[this];ReturnValue;taint;df-generated | | System.IO;Stream;true;Read;(System.Byte[],System.Int32,System.Int32);;Argument[this];Argument[0].Element;taint;manual | +| System.IO;Stream;true;Read;(System.Span);;Argument[this];Argument[0].Element;taint;manual | | System.IO;Stream;true;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);;Argument[this];Argument[0].Element;taint;manual | -| System.IO;Stream;true;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[this];ReturnValue;taint;df-generated | +| System.IO;Stream;true;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[this];Argument[0].Element;taint;manual | | System.IO;Stream;true;Write;(System.Byte[],System.Int32,System.Int32);;Argument[0].Element;Argument[this];taint;manual | | System.IO;Stream;true;WriteAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);;Argument[0].Element;Argument[this];taint;manual | | System.IO;Stream;true;WriteAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);;Argument[this];ReturnValue;taint;df-generated | @@ -9428,8 +10166,9 @@ summary | System.IO;UnmanagedMemoryStream;false;Initialize;(System.Byte*,System.Int64,System.Int64,System.IO.FileAccess);;Argument[0];Argument[this];taint;df-generated | | System.IO;UnmanagedMemoryStream;false;Initialize;(System.Runtime.InteropServices.SafeBuffer,System.Int64,System.Int64,System.IO.FileAccess);;Argument[0];Argument[this];taint;df-generated | | System.IO;UnmanagedMemoryStream;false;Read;(System.Byte[],System.Int32,System.Int32);;Argument[this];Argument[0].Element;taint;manual | +| System.IO;UnmanagedMemoryStream;false;Read;(System.Span);;Argument[this];Argument[0].Element;taint;manual | | System.IO;UnmanagedMemoryStream;false;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);;Argument[this];Argument[0].Element;taint;manual | -| System.IO;UnmanagedMemoryStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[this];ReturnValue;taint;df-generated | +| System.IO;UnmanagedMemoryStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[this];Argument[0].Element;taint;manual | | System.IO;UnmanagedMemoryStream;false;UnmanagedMemoryStream;(System.Byte*,System.Int64);;Argument[0];Argument[this];taint;df-generated | | System.IO;UnmanagedMemoryStream;false;UnmanagedMemoryStream;(System.Byte*,System.Int64,System.Int64,System.IO.FileAccess);;Argument[0];Argument[this];taint;df-generated | | System.IO;UnmanagedMemoryStream;false;UnmanagedMemoryStream;(System.Runtime.InteropServices.SafeBuffer,System.Int64,System.Int64);;Argument[0];Argument[this];taint;df-generated | @@ -11367,8 +12106,9 @@ summary | System.Net.Quic;QuicStream;false;BeginWrite;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);;Argument[3];Argument[3].Parameter[delegate-self];value;manual | | System.Net.Quic;QuicStream;false;FlushAsync;(System.Threading.CancellationToken);;Argument[this];ReturnValue;taint;df-generated | | System.Net.Quic;QuicStream;false;Read;(System.Byte[],System.Int32,System.Int32);;Argument[this];Argument[0].Element;taint;manual | +| System.Net.Quic;QuicStream;false;Read;(System.Span);;Argument[this];Argument[0].Element;taint;manual | | System.Net.Quic;QuicStream;false;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);;Argument[this];Argument[0].Element;taint;manual | -| System.Net.Quic;QuicStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[this];ReturnValue;taint;df-generated | +| System.Net.Quic;QuicStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[this];Argument[0].Element;taint;manual | | System.Net.Quic;QuicStream;false;Write;(System.Byte[],System.Int32,System.Int32);;Argument[0].Element;Argument[this];taint;manual | | System.Net.Quic;QuicStream;false;WriteAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);;Argument[0].Element;Argument[this];taint;manual | | System.Net.Quic;QuicStream;false;WriteAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);;Argument[this];ReturnValue;taint;df-generated | @@ -11403,9 +12143,7 @@ summary | System.Net.Security;NegotiateStream;false;FlushAsync;(System.Threading.CancellationToken);;Argument[this];ReturnValue;taint;df-generated | | System.Net.Security;NegotiateStream;false;Read;(System.Byte[],System.Int32,System.Int32);;Argument[this];Argument[0].Element;taint;manual | | System.Net.Security;NegotiateStream;false;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);;Argument[this];Argument[0].Element;taint;manual | -| System.Net.Security;NegotiateStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[0];ReturnValue;taint;df-generated | -| System.Net.Security;NegotiateStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[1];ReturnValue;taint;df-generated | -| System.Net.Security;NegotiateStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[this];ReturnValue;taint;df-generated | +| System.Net.Security;NegotiateStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[this];Argument[0].Element;taint;manual | | System.Net.Security;NegotiateStream;false;Write;(System.Byte[],System.Int32,System.Int32);;Argument[0].Element;Argument[this];taint;manual | | System.Net.Security;NegotiateStream;false;WriteAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);;Argument[0].Element;Argument[this];taint;manual | | System.Net.Security;NegotiateStream;false;WriteAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);;Argument[0];ReturnValue;taint;df-generated | @@ -11438,7 +12176,7 @@ summary | System.Net.Security;SslStream;false;FlushAsync;(System.Threading.CancellationToken);;Argument[this];ReturnValue;taint;df-generated | | System.Net.Security;SslStream;false;Read;(System.Byte[],System.Int32,System.Int32);;Argument[this];Argument[0].Element;taint;manual | | System.Net.Security;SslStream;false;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);;Argument[this];Argument[0].Element;taint;manual | -| System.Net.Security;SslStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[this];ReturnValue;taint;df-generated | +| System.Net.Security;SslStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[this];Argument[0].Element;taint;manual | | System.Net.Security;SslStream;false;SslStream;(System.IO.Stream,System.Boolean,System.Net.Security.RemoteCertificateValidationCallback);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | | System.Net.Security;SslStream;false;SslStream;(System.IO.Stream,System.Boolean,System.Net.Security.RemoteCertificateValidationCallback,System.Net.Security.LocalCertificateSelectionCallback);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | | System.Net.Security;SslStream;false;SslStream;(System.IO.Stream,System.Boolean,System.Net.Security.RemoteCertificateValidationCallback,System.Net.Security.LocalCertificateSelectionCallback);;Argument[3];Argument[3].Parameter[delegate-self];value;hq-generated | @@ -11472,10 +12210,9 @@ summary | System.Net.Sockets;NetworkStream;false;FlushAsync;(System.Threading.CancellationToken);;Argument[this];ReturnValue;taint;df-generated | | System.Net.Sockets;NetworkStream;false;NetworkStream;(System.Net.Sockets.Socket,System.IO.FileAccess,System.Boolean);;Argument[0];Argument[this];taint;df-generated | | System.Net.Sockets;NetworkStream;false;Read;(System.Byte[],System.Int32,System.Int32);;Argument[this];Argument[0].Element;taint;manual | +| System.Net.Sockets;NetworkStream;false;Read;(System.Span);;Argument[this];Argument[0].Element;taint;manual | | System.Net.Sockets;NetworkStream;false;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);;Argument[this];Argument[0].Element;taint;manual | -| System.Net.Sockets;NetworkStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[0];ReturnValue;taint;df-generated | -| System.Net.Sockets;NetworkStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[1];ReturnValue;taint;df-generated | -| System.Net.Sockets;NetworkStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[this];ReturnValue;taint;df-generated | +| System.Net.Sockets;NetworkStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[this];Argument[0].Element;taint;manual | | System.Net.Sockets;NetworkStream;false;Write;(System.Byte[],System.Int32,System.Int32);;Argument[0].Element;Argument[this];taint;manual | | System.Net.Sockets;NetworkStream;false;WriteAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);;Argument[0].Element;Argument[this];taint;manual | | System.Net.Sockets;NetworkStream;false;WriteAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);;Argument[1];ReturnValue;taint;df-generated | @@ -13630,7 +14367,7 @@ summary | System.Security.Cryptography;CryptoStream;false;FlushAsync;(System.Threading.CancellationToken);;Argument[this];ReturnValue;taint;df-generated | | System.Security.Cryptography;CryptoStream;false;Read;(System.Byte[],System.Int32,System.Int32);;Argument[this];Argument[0].Element;taint;manual | | System.Security.Cryptography;CryptoStream;false;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);;Argument[this];Argument[0].Element;taint;manual | -| System.Security.Cryptography;CryptoStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[this];ReturnValue;taint;df-generated | +| System.Security.Cryptography;CryptoStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[this];Argument[0].Element;taint;manual | | System.Security.Cryptography;CryptoStream;false;Write;(System.Byte[],System.Int32,System.Int32);;Argument[0].Element;Argument[this];taint;manual | | System.Security.Cryptography;CryptoStream;false;WriteAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);;Argument[0].Element;Argument[this];taint;manual | | System.Security.Cryptography;CryptoStream;false;WriteAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);;Argument[this];ReturnValue;taint;df-generated | @@ -27620,10 +28357,12 @@ neutral | System.Diagnostics;ProcessStartInfo;get_UseShellExecute;();summary;df-generated | | System.Diagnostics;ProcessStartInfo;get_Verbs;();summary;df-generated | | System.Diagnostics;ProcessStartInfo;get_WindowStyle;();summary;df-generated | +| System.Diagnostics;ProcessStartInfo;set_Arguments;(System.String);summary;manual | | System.Diagnostics;ProcessStartInfo;set_CreateNoWindow;(System.Boolean);summary;df-generated | | System.Diagnostics;ProcessStartInfo;set_Domain;(System.String);summary;df-generated | | System.Diagnostics;ProcessStartInfo;set_ErrorDialog;(System.Boolean);summary;df-generated | | System.Diagnostics;ProcessStartInfo;set_ErrorDialogParentHandle;(System.IntPtr);summary;df-generated | +| System.Diagnostics;ProcessStartInfo;set_FileName;(System.String);summary;manual | | System.Diagnostics;ProcessStartInfo;set_LoadUserProfile;(System.Boolean);summary;df-generated | | System.Diagnostics;ProcessStartInfo;set_Password;(System.Security.SecureString);summary;df-generated | | System.Diagnostics;ProcessStartInfo;set_PasswordInClearText;(System.String);summary;df-generated | @@ -27635,7 +28374,10 @@ neutral | System.Diagnostics;ProcessStartInfo;set_StandardOutputEncoding;(System.Text.Encoding);summary;df-generated | | System.Diagnostics;ProcessStartInfo;set_UseCredentialsForNetworkingOnly;(System.Boolean);summary;df-generated | | System.Diagnostics;ProcessStartInfo;set_UseShellExecute;(System.Boolean);summary;df-generated | +| System.Diagnostics;ProcessStartInfo;set_UserName;(System.String);summary;manual | +| System.Diagnostics;ProcessStartInfo;set_Verb;(System.String);summary;manual | | System.Diagnostics;ProcessStartInfo;set_WindowStyle;(System.Diagnostics.ProcessWindowStyle);summary;df-generated | +| System.Diagnostics;ProcessStartInfo;set_WorkingDirectory;(System.String);summary;manual | | System.Diagnostics;ProcessThread;ResetIdealProcessor;();summary;df-generated | | System.Diagnostics;ProcessThread;get_BasePriority;();summary;df-generated | | System.Diagnostics;ProcessThread;get_CurrentPriority;();summary;df-generated | diff --git a/csharp/ql/test/library-tests/dataflow/library/FlowSummaries.ql b/csharp/ql/test/library-tests/dataflow/library/FlowSummaries.ql index ee3ac53742a..6b117c03ac0 100644 --- a/csharp/ql/test/library-tests/dataflow/library/FlowSummaries.ql +++ b/csharp/ql/test/library-tests/dataflow/library/FlowSummaries.ql @@ -1,11 +1,20 @@ import shared.FlowSummaries import semmle.code.csharp.dataflow.internal.ExternalFlow -private class IncludeAllSummarizedCallable extends IncludeSummarizedCallable { - IncludeAllSummarizedCallable() { exists(this) } +final private class NeutralCallableFinal = NeutralCallable; + +class RelevantNeutralCallable extends NeutralCallableFinal { + final string getCallableCsv() { result = asPartialNeutralModel(this) } } -private class IncludeNeutralSummarizedCallable extends RelevantNeutralCallable { - /** Gets a string representing the callable in semi-colon separated format for use in flow summaries. */ - final override string getCallableCsv() { result = asPartialNeutralModel(this) } +class RelevantSourceCallable extends SourceCallable { + string getCallableCsv() { result = asPartialModel(this) } } + +class RelevantSinkCallable extends SinkCallable { + string getCallableCsv() { result = asPartialModel(this) } +} + +import TestSummaryOutput +import TestNeutralOutput +import External::TestSourceSinkOutput diff --git a/csharp/ql/test/library-tests/dataflow/library/FlowSummariesFiltered.expected b/csharp/ql/test/library-tests/dataflow/library/FlowSummariesFiltered.expected index 4dec1bdd7d1..cd541b278d5 100644 --- a/csharp/ql/test/library-tests/dataflow/library/FlowSummariesFiltered.expected +++ b/csharp/ql/test/library-tests/dataflow/library/FlowSummariesFiltered.expected @@ -1,4 +1,3 @@ -summary | Dapper;CustomPropertyTypeMap;false;CustomPropertyTypeMap;(System.Type,System.Func);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | | Dapper;DynamicParameters;false;Output;(T,System.Linq.Expressions.Expression>,System.Nullable,System.Nullable);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | | Dapper;SqlMapper+GridReader;false;GridReader;(System.Data.IDbCommand,System.Data.Common.DbDataReader,Dapper.SqlMapper+Identity,System.Action,System.Object,System.Boolean,System.Threading.CancellationToken);;Argument[3];Argument[3].Parameter[delegate-self];value;hq-generated | @@ -9,6 +8,7 @@ summary | Dapper;SqlMapper+GridReader;false;Read;(System.Func,System.String,System.Boolean);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | | Dapper;SqlMapper+GridReader;false;Read;(System.Func,System.String,System.Boolean);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | | Dapper;SqlMapper+GridReader;false;Read;(System.Type[],System.Func,System.String,System.Boolean);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| Dapper;SqlMapper;false;AsList;(System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue.Element;value;manual | | Dapper;SqlMapper;false;Query;(System.Data.IDbConnection,System.String,System.Func,System.Object,System.Data.IDbTransaction,System.Boolean,System.String,System.Nullable,System.Nullable);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | | Dapper;SqlMapper;false;Query;(System.Data.IDbConnection,System.String,System.Func,System.Object,System.Data.IDbTransaction,System.Boolean,System.String,System.Nullable,System.Nullable);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | | Dapper;SqlMapper;false;Query;(System.Data.IDbConnection,System.String,System.Func,System.Object,System.Data.IDbTransaction,System.Boolean,System.String,System.Nullable,System.Nullable);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | @@ -7031,11 +7031,6 @@ summary | System.Diagnostics;ProcessStartInfo;false;get_UserName;();;Argument[this];ReturnValue;taint;df-generated | | System.Diagnostics;ProcessStartInfo;false;get_Verb;();;Argument[this];ReturnValue;taint;df-generated | | System.Diagnostics;ProcessStartInfo;false;get_WorkingDirectory;();;Argument[this];ReturnValue;taint;df-generated | -| System.Diagnostics;ProcessStartInfo;false;set_Arguments;(System.String);;Argument[0];Argument[this];taint;df-generated | -| System.Diagnostics;ProcessStartInfo;false;set_FileName;(System.String);;Argument[0];Argument[this];taint;df-generated | -| System.Diagnostics;ProcessStartInfo;false;set_UserName;(System.String);;Argument[0];Argument[this];taint;df-generated | -| System.Diagnostics;ProcessStartInfo;false;set_Verb;(System.String);;Argument[0];Argument[this];taint;df-generated | -| System.Diagnostics;ProcessStartInfo;false;set_WorkingDirectory;(System.String);;Argument[0];Argument[this];taint;df-generated | | System.Diagnostics;ProcessThreadCollection;false;Add;(System.Diagnostics.ProcessThread);;Argument[0];Argument[this].Element;value;manual | | System.Diagnostics;ProcessThreadCollection;false;CopyTo;(System.Diagnostics.ProcessThread[],System.Int32);;Argument[this].Element;Argument[0].Element;value;manual | | System.Diagnostics;SampleActivity;false;BeginInvoke;(System.Diagnostics.ActivityCreationOptions,System.AsyncCallback,System.Object);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | @@ -7471,7 +7466,6 @@ summary | System.IO.IsolatedStorage;IsolatedStorage;false;get_AssemblyIdentity;();;Argument[this];ReturnValue;taint;df-generated | | System.IO.IsolatedStorage;IsolatedStorage;false;get_DomainIdentity;();;Argument[this];ReturnValue;taint;df-generated | | System.IO.IsolatedStorage;IsolatedStorageFileStream;false;FlushAsync;(System.Threading.CancellationToken);;Argument[0];ReturnValue;taint;df-generated | -| System.IO.IsolatedStorage;IsolatedStorageFileStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[1];ReturnValue;taint;df-generated | | System.IO.IsolatedStorage;IsolatedStorageFileStream;false;WriteAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);;Argument[0];ReturnValue;taint;df-generated | | System.IO.IsolatedStorage;IsolatedStorageFileStream;false;WriteAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);;Argument[1];ReturnValue;taint;df-generated | | System.IO.MemoryMappedFiles;MemoryMappedFile;false;CreateFromFile;(Microsoft.Win32.SafeHandles.SafeFileHandle,System.String,System.Int64,System.IO.MemoryMappedFiles.MemoryMappedFileAccess,System.IO.HandleInheritability,System.Boolean);;Argument[0];ReturnValue;taint;df-generated | @@ -7533,7 +7527,8 @@ summary | System.IO;BinaryWriter;false;Write;(System.Byte[]);;Argument[0].Element;Argument[this];taint;df-generated | | System.IO;BinaryWriter;false;Write;(System.Byte[],System.Int32,System.Int32);;Argument[0].Element;Argument[this];taint;df-generated | | System.IO;BinaryWriter;false;get_BaseStream;();;Argument[this];ReturnValue;taint;df-generated | -| System.IO;BufferedStream;false;BufferedStream;(System.IO.Stream,System.Int32);;Argument[0];Argument[this];taint;df-generated | +| System.IO;BufferedStream;false;BufferedStream;(System.IO.Stream);;Argument[0];Argument[this];taint;manual | +| System.IO;BufferedStream;false;BufferedStream;(System.IO.Stream,System.Int32);;Argument[0];Argument[this];taint;manual | | System.IO;BufferedStream;false;get_UnderlyingStream;();;Argument[this];ReturnValue;taint;df-generated | | System.IO;Directory;false;CreateDirectory;(System.String);;Argument[0];ReturnValue;taint;df-generated | | System.IO;Directory;false;CreateDirectory;(System.String,System.IO.UnixFileMode);;Argument[0];ReturnValue;taint;df-generated | @@ -7618,7 +7613,6 @@ summary | System.IO;FileStream;false;FileStream;(System.String,System.IO.FileMode,System.IO.FileAccess,System.IO.FileShare,System.Int32,System.Boolean);;Argument[0];Argument[this];taint;manual | | System.IO;FileStream;false;FileStream;(System.String,System.IO.FileMode,System.IO.FileAccess,System.IO.FileShare,System.Int32,System.IO.FileOptions);;Argument[0];Argument[this];taint;manual | | System.IO;FileStream;false;FlushAsync;(System.Threading.CancellationToken);;Argument[0];ReturnValue;taint;df-generated | -| System.IO;FileStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[1];ReturnValue;taint;df-generated | | System.IO;FileStream;false;WriteAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);;Argument[0];ReturnValue;taint;df-generated | | System.IO;FileStream;false;WriteAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);;Argument[1];ReturnValue;taint;df-generated | | System.IO;FileStream;false;get_SafeFileHandle;();;Argument[this];ReturnValue;taint;df-generated | @@ -7729,6 +7723,10 @@ summary | System.IO;Stream;false;CopyToAsync;(System.IO.Stream,System.Threading.CancellationToken);;Argument[this];Argument[0];taint;manual | | System.IO;Stream;false;FlushAsync;();;Argument[this];ReturnValue;taint;df-generated | | System.IO;Stream;false;ReadAsync;(System.Byte[],System.Int32,System.Int32);;Argument[this];Argument[0].Element;taint;manual | +| System.IO;Stream;false;ReadAtLeast;(System.Span,System.Int32,System.Boolean);;Argument[this];Argument[0].Element;taint;manual | +| System.IO;Stream;false;ReadAtLeastAsync;(System.Memory,System.Int32,System.Boolean,System.Threading.CancellationToken);;Argument[this];Argument[0];taint;manual | +| System.IO;Stream;false;ReadExactly;(System.Byte[],System.Int32,System.Int32);;Argument[this];Argument[0].Element;taint;manual | +| System.IO;Stream;false;ReadExactly;(System.Span);;Argument[this];Argument[0].Element;taint;manual | | System.IO;Stream;false;Synchronized;(System.IO.Stream);;Argument[0];ReturnValue;taint;df-generated | | System.IO;Stream;false;WriteAsync;(System.Byte[],System.Int32,System.Int32);;Argument[0].Element;Argument[this];taint;manual | | System.IO;Stream;true;BeginRead;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);;Argument[3];Argument[3].Parameter[delegate-self];value;manual | @@ -7739,8 +7737,9 @@ summary | System.IO;Stream;true;CopyToAsync;(System.IO.Stream,System.Int32,System.Threading.CancellationToken);;Argument[this];Argument[0];taint;manual | | System.IO;Stream;true;FlushAsync;(System.Threading.CancellationToken);;Argument[this];ReturnValue;taint;df-generated | | System.IO;Stream;true;Read;(System.Byte[],System.Int32,System.Int32);;Argument[this];Argument[0].Element;taint;manual | +| System.IO;Stream;true;Read;(System.Span);;Argument[this];Argument[0].Element;taint;manual | | System.IO;Stream;true;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);;Argument[this];Argument[0].Element;taint;manual | -| System.IO;Stream;true;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[this];ReturnValue;taint;df-generated | +| System.IO;Stream;true;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[this];Argument[0].Element;taint;manual | | System.IO;Stream;true;Write;(System.Byte[],System.Int32,System.Int32);;Argument[0].Element;Argument[this];taint;manual | | System.IO;Stream;true;WriteAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);;Argument[0].Element;Argument[this];taint;manual | | System.IO;Stream;true;WriteAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);;Argument[this];ReturnValue;taint;df-generated | @@ -9674,8 +9673,6 @@ summary | System.Net.Security;NegotiateStream;false;BeginAuthenticateAsServer;(System.Net.NetworkCredential,System.Security.Authentication.ExtendedProtection.ExtendedProtectionPolicy,System.Net.Security.ProtectionLevel,System.Security.Principal.TokenImpersonationLevel,System.AsyncCallback,System.Object);;Argument[4];Argument[4].Parameter[delegate-self];value;hq-generated | | System.Net.Security;NegotiateStream;false;BeginAuthenticateAsServer;(System.Security.Authentication.ExtendedProtection.ExtendedProtectionPolicy,System.AsyncCallback,System.Object);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | | System.Net.Security;NegotiateStream;false;FlushAsync;(System.Threading.CancellationToken);;Argument[0];ReturnValue;taint;df-generated | -| System.Net.Security;NegotiateStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[0];ReturnValue;taint;df-generated | -| System.Net.Security;NegotiateStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[1];ReturnValue;taint;df-generated | | System.Net.Security;NegotiateStream;false;WriteAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);;Argument[0];ReturnValue;taint;df-generated | | System.Net.Security;NegotiateStream;false;WriteAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);;Argument[1];ReturnValue;taint;df-generated | | System.Net.Security;NegotiateStream;false;get_RemoteIdentity;();;Argument[this];ReturnValue;taint;df-generated | @@ -9722,8 +9719,6 @@ summary | System.Net.Sockets;MulticastOption;false;set_Group;(System.Net.IPAddress);;Argument[0];Argument[this];taint;df-generated | | System.Net.Sockets;MulticastOption;false;set_LocalAddress;(System.Net.IPAddress);;Argument[0];Argument[this];taint;df-generated | | System.Net.Sockets;NetworkStream;false;NetworkStream;(System.Net.Sockets.Socket,System.IO.FileAccess,System.Boolean);;Argument[0];Argument[this];taint;df-generated | -| System.Net.Sockets;NetworkStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[0];ReturnValue;taint;df-generated | -| System.Net.Sockets;NetworkStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[1];ReturnValue;taint;df-generated | | System.Net.Sockets;NetworkStream;false;WriteAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);;Argument[1];ReturnValue;taint;df-generated | | System.Net.Sockets;NetworkStream;false;get_Socket;();;Argument[this];ReturnValue;taint;df-generated | | System.Net.Sockets;SafeSocketHandle;false;SafeSocketHandle;(System.IntPtr,System.Boolean);;Argument[0];Argument[this];taint;df-generated | @@ -16125,4 +16120,3 @@ summary | System;ValueTuple;false;ToString;();;Argument[this];ReturnValue;taint;df-generated | | System;ValueTuple;false;ValueTuple;(T1);;Argument[0];Argument[this].Field[System.ValueTuple`1.Item1];value;manual | | System;ValueTuple;false;get_Item;(System.Int32);;Argument[this].Field[System.ValueTuple`1.Item1];ReturnValue;value;manual | -neutral diff --git a/csharp/ql/test/library-tests/dataflow/library/FlowSummariesFiltered.ql b/csharp/ql/test/library-tests/dataflow/library/FlowSummariesFiltered.ql index c3584afcbc3..9c19d00cb59 100644 --- a/csharp/ql/test/library-tests/dataflow/library/FlowSummariesFiltered.ql +++ b/csharp/ql/test/library-tests/dataflow/library/FlowSummariesFiltered.ql @@ -2,8 +2,6 @@ import shared.FlowSummaries private import semmle.code.csharp.dataflow.internal.ExternalFlow class IncludeFilteredSummarizedCallable extends IncludeSummarizedCallable { - IncludeFilteredSummarizedCallable() { exists(this) } - /** * Holds if flow is propagated between `input` and `output` and * if there is no summary for a callable in a `base` class or interface @@ -12,7 +10,7 @@ class IncludeFilteredSummarizedCallable extends IncludeSummarizedCallable { override predicate relevantSummary( SummaryComponentStack input, SummaryComponentStack output, boolean preservesValue ) { - super.propagatesFlow(input, output, preservesValue) and + this.propagatesFlow(input, output, preservesValue) and not exists(IncludeSummarizedCallable rsc | isBaseCallableOrPrototype(rsc) and rsc.propagatesFlow(input, output, preservesValue) and @@ -20,3 +18,5 @@ class IncludeFilteredSummarizedCallable extends IncludeSummarizedCallable { ) } } + +import TestSummaryOutput diff --git a/csharp/ql/test/library-tests/definitions/PrintAst.expected b/csharp/ql/test/library-tests/definitions/PrintAst.expected index 2f15f70f447..1ad3ad1a61d 100644 --- a/csharp/ql/test/library-tests/definitions/PrintAst.expected +++ b/csharp/ql/test/library-tests/definitions/PrintAst.expected @@ -12,13 +12,9 @@ definitions.cs: # 9| 4: [BlockStmt] {...} # 13| 2: [Enum] Enumeration # 15| 5: [Field] e1 -# 15| 1: [AssignExpr] ... = ... -# 15| 0: [MemberConstantAccess] access to constant e1 -# 15| 1: [IntLiteral] 1 +# 15| 1: [IntLiteral] 1 # 15| 6: [Field] e2 -# 15| 1: [AssignExpr] ... = ... -# 15| 0: [MemberConstantAccess] access to constant e2 -# 15| 1: [IntLiteral] 2 +# 15| 1: [IntLiteral] 2 # 15| 7: [Field] e3 # 18| 3: [Class] C1 # 20| 4: [InstanceConstructor] C1 @@ -405,14 +401,12 @@ definitions.cs: # 166| -1: [TypeMention] Nested # 166| 1: [TypeMention] C4 # 166| 2: [TypeMention] I4 -# 166| 1: [AssignExpr] ... = ... -# 166| 0: [FieldAccess] access to field f -# 166| 1: [MethodCall] call to method Create -# 166| -1: [TypeAccess] access to type Nested -# 166| -2: [TypeMention] Nested -# 166| 1: [TypeMention] I4 -# 166| -1: [TypeAccess] access to type C4 -# 166| 0: [TypeMention] C4 +# 166| 1: [MethodCall] call to method Create +# 166| -1: [TypeAccess] access to type Nested +# 166| -2: [TypeMention] Nested +# 166| 1: [TypeMention] I4 +# 166| -1: [TypeAccess] access to type C4 +# 166| 0: [TypeMention] C4 # 167| 6: [Field] c1 # 167| -1: [TypeMention] C1 # 169| 7: [Method] M diff --git a/csharp/ql/test/library-tests/dispatch/GetADynamicTarget.ql b/csharp/ql/test/library-tests/dispatch/GetADynamicTarget.ql index cbde2d43ab8..b4c94a0b507 100644 --- a/csharp/ql/test/library-tests/dispatch/GetADynamicTarget.ql +++ b/csharp/ql/test/library-tests/dispatch/GetADynamicTarget.ql @@ -1,8 +1,9 @@ import csharp +import semmle.code.csharp.commons.QualifiedName import semmle.code.csharp.dispatch.Dispatch from DispatchCall call, Callable callable where callable = call.getADynamicTarget() and callable.fromSource() -select call, callable.getFullyQualifiedNameWithTypes() +select call, getFullyQualifiedNameWithTypes(callable) diff --git a/csharp/ql/test/library-tests/enums/Enums3.ql b/csharp/ql/test/library-tests/enums/Enums3.ql index 5cfbdc56193..b01ffb97e18 100644 --- a/csharp/ql/test/library-tests/enums/Enums3.ql +++ b/csharp/ql/test/library-tests/enums/Enums3.ql @@ -3,13 +3,11 @@ */ import csharp -import semmle.code.csharp.commons.QualifiedName -from EnumConstant c, string namespace, string name +from EnumConstant c where c.getName() = "Green" and c.getDeclaringType().hasFullyQualifiedName("Enums", "LongColor") and c.getType() = c.getDeclaringType() and - c.getValue() = "1" and - c.getDeclaringType().getBaseClass().hasFullyQualifiedName(namespace, name) -select c, getQualifiedName(namespace, name) + c.getValue() = "1" +select c, c.getDeclaringType().getBaseClass().getFullyQualifiedNameDebug() diff --git a/csharp/ql/test/library-tests/enums/PrintAst.expected b/csharp/ql/test/library-tests/enums/PrintAst.expected index 6c357704ad1..bb9e5a3a9c9 100644 --- a/csharp/ql/test/library-tests/enums/PrintAst.expected +++ b/csharp/ql/test/library-tests/enums/PrintAst.expected @@ -11,35 +11,25 @@ enums.cs: # 23| 3: [Enum] E # 25| 4: [Enum] ValueColor # 28| 5: [Field] OneRed -# 28| 1: [AssignExpr] ... = ... -# 28| 0: [MemberConstantAccess] access to constant OneRed -# 28| 1: [CastExpr] (...) ... -# 28| 1: [IntLiteral] 1 +# 28| 1: [CastExpr] (...) ... +# 28| 1: [IntLiteral] 1 # 29| 6: [Field] TwoGreen -# 29| 1: [AssignExpr] ... = ... -# 29| 0: [MemberConstantAccess] access to constant TwoGreen -# 29| 1: [CastExpr] (...) ... -# 29| 1: [IntLiteral] 2 +# 29| 1: [CastExpr] (...) ... +# 29| 1: [IntLiteral] 2 # 30| 7: [Field] FourBlue -# 30| 1: [AssignExpr] ... = ... -# 30| 0: [MemberConstantAccess] access to constant FourBlue -# 30| 1: [CastExpr] (...) ... -# 30| 1: [IntLiteral] 4 +# 30| 1: [CastExpr] (...) ... +# 30| 1: [IntLiteral] 4 # 34| 5: [Enum] SparseColor # 37| 5: [Field] Red # 38| 6: [Field] Green -# 38| 1: [AssignExpr] ... = ... -# 38| 0: [MemberConstantAccess] access to constant Green -# 38| 1: [IntLiteral] 10 +# 38| 1: [IntLiteral] 10 # 39| 7: [Field] Blue # 40| 8: [Field] AnotherBlue -# 40| 1: [AssignExpr] ... = ... -# 40| 0: [MemberConstantAccess] access to constant AnotherBlue -# 40| 1: [AddExpr] ... + ... -# 40| 0: [CastExpr] (...) ... -# 40| 1: [MemberConstantAccess] access to constant Blue -# 40| 1: [CastExpr] (...) ... -# 40| 1: [MemberConstantAccess] access to constant Red +# 40| 1: [AddExpr] ... + ... +# 40| 0: [CastExpr] (...) ... +# 40| 1: [MemberConstantAccess] access to constant Blue +# 40| 1: [CastExpr] (...) ... +# 40| 1: [MemberConstantAccess] access to constant Red # 44| 6: [Class] Test # 47| 5: [Method] Main # 47| -1: [TypeMention] Void diff --git a/csharp/ql/test/library-tests/events/PrintAst.expected b/csharp/ql/test/library-tests/events/PrintAst.expected index 7f75cd7b1cb..84825067e42 100644 --- a/csharp/ql/test/library-tests/events/PrintAst.expected +++ b/csharp/ql/test/library-tests/events/PrintAst.expected @@ -87,16 +87,12 @@ events.cs: # 50| 4: [Class] Control # 53| 6: [Field] mouseDownEventKey # 53| -1: [TypeMention] object -# 53| 1: [AssignExpr] ... = ... -# 53| 0: [FieldAccess] access to field mouseDownEventKey -# 53| 1: [ObjectCreation] object creation of type Object -# 53| 0: [TypeMention] object +# 53| 1: [ObjectCreation] object creation of type Object +# 53| 0: [TypeMention] object # 54| 7: [Field] mouseUpEventKey # 54| -1: [TypeMention] object -# 54| 1: [AssignExpr] ... = ... -# 54| 0: [FieldAccess] access to field mouseUpEventKey -# 54| 1: [ObjectCreation] object creation of type Object -# 54| 0: [TypeMention] object +# 54| 1: [ObjectCreation] object creation of type Object +# 54| 0: [TypeMention] object # 57| 8: [Method] GetEventHandler # 57| -1: [TypeMention] Delegate #-----| 2: (Parameters) diff --git a/csharp/ql/test/library-tests/expressions/PrintAst.expected b/csharp/ql/test/library-tests/expressions/PrintAst.expected index e865a36d549..ce25c57b0d9 100644 --- a/csharp/ql/test/library-tests/expressions/PrintAst.expected +++ b/csharp/ql/test/library-tests/expressions/PrintAst.expected @@ -417,12 +417,10 @@ ReducedExpression.cs: # 2| [Class] ReducedClass # 5| 5: [Field] ReducedExpression # 5| -1: [TypeMention] int -# 5| 1: [AssignExpr] ... = ... -# 5| 0: [MemberConstantAccess] access to constant ReducedExpression -# 5| 1: [ConditionalExpr] ... ? ... : ... -# 5| 0: [BoolLiteral] true -# 5| 1: [IntLiteral] 10 -# 5| 2: [IntLiteral] 12 +# 5| 1: [ConditionalExpr] ... ? ... : ... +# 5| 0: [BoolLiteral] true +# 5| 1: [IntLiteral] 10 +# 5| 2: [IntLiteral] 12 expressions.cs: # 5| [NamespaceDeclaration] namespace ... { ... } # 7| 1: [Class] Class @@ -550,14 +548,10 @@ expressions.cs: # 41| 0: [LocalVariableAccess] access to local variable c # 44| 6: [Field] constant # 44| -1: [TypeMention] string -# 44| 1: [AssignExpr] ... = ... -# 44| 0: [MemberConstantAccess] access to constant constant -# 44| 1: [StringLiteralUtf16] "constant" +# 44| 1: [StringLiteralUtf16] "constant" # 45| 7: [Field] f # 45| -1: [TypeMention] int -# 45| 1: [AssignExpr] ... = ... -# 45| 0: [FieldAccess] access to field f -# 45| 1: [IntLiteral] 0 +# 45| 1: [IntLiteral] 0 # 46| 8: [Field] name # 46| -1: [TypeMention] string # 48| 9: [StaticConstructor] Class @@ -1492,16 +1486,12 @@ expressions.cs: # 361| 15: [Class] Rectangle2 # 364| 5: [Field] p1 # 364| -1: [TypeMention] Point -# 364| 1: [AssignExpr] ... = ... -# 364| 0: [FieldAccess] access to field p1 -# 364| 1: [ObjectCreation] object creation of type Point -# 364| 0: [TypeMention] Point +# 364| 1: [ObjectCreation] object creation of type Point +# 364| 0: [TypeMention] Point # 365| 6: [Field] p2 # 365| -1: [TypeMention] Point -# 365| 1: [AssignExpr] ... = ... -# 365| 0: [FieldAccess] access to field p2 -# 365| 1: [ObjectCreation] object creation of type Point -# 365| 0: [TypeMention] Point +# 365| 1: [ObjectCreation] object creation of type Point +# 365| 0: [TypeMention] Point # 367| 7: [Property] P1 # 367| -1: [TypeMention] Point # 367| 3: [Getter] get_P1 @@ -1520,11 +1510,9 @@ expressions.cs: # 376| 6: [Field] phoneNumbers # 376| -1: [TypeMention] List # 376| 1: [TypeMention] string -# 376| 1: [AssignExpr] ... = ... -# 376| 0: [FieldAccess] access to field phoneNumbers -# 376| 1: [ObjectCreation] object creation of type List -# 376| 0: [TypeMention] List -# 376| 1: [TypeMention] string +# 376| 1: [ObjectCreation] object creation of type List +# 376| 0: [TypeMention] List +# 376| 1: [TypeMention] string # 378| 7: [Property] Name # 378| -1: [TypeMention] string # 378| 3: [Getter] get_Name @@ -2194,9 +2182,8 @@ expressions.cs: # 495| 19: [Class] ExpressionDepth # 497| 5: [Field] d # 497| -1: [TypeMention] int -# 497| 1: [AssignExpr] ... = ... -# 497| 0: [MemberConstantAccess] access to constant d -# 497| 1: [AddExpr] ... + ... +# 497| 1: [AddExpr] ... + ... +# 497| 0: [AddExpr] ... + ... # 497| 0: [AddExpr] ... + ... # 497| 0: [AddExpr] ... + ... # 497| 0: [AddExpr] ... + ... @@ -2274,9 +2261,7 @@ expressions.cs: # 497| 0: [AddExpr] ... + ... # 497| 0: [AddExpr] ... + ... # 497| 0: [AddExpr] ... + ... -# 497| 0: [AddExpr] ... + ... -# 497| 0: [IntLiteral] 1 -# 497| 1: [IntLiteral] 1 +# 497| 0: [IntLiteral] 1 # 497| 1: [IntLiteral] 1 # 497| 1: [IntLiteral] 1 # 497| 1: [IntLiteral] 1 @@ -2315,7 +2300,7 @@ expressions.cs: # 497| 1: [IntLiteral] 1 # 497| 1: [IntLiteral] 1 # 497| 1: [IntLiteral] 1 -# 498| 1: [IntLiteral] 1 +# 497| 1: [IntLiteral] 1 # 498| 1: [IntLiteral] 1 # 498| 1: [IntLiteral] 1 # 498| 1: [IntLiteral] 1 @@ -2355,6 +2340,7 @@ expressions.cs: # 498| 1: [IntLiteral] 1 # 498| 1: [IntLiteral] 1 # 498| 1: [IntLiteral] 1 +# 498| 1: [IntLiteral] 1 # 501| 20: [Class] TupleExprs # 503| 5: [Method] Test # 503| -1: [TypeMention] Void diff --git a/csharp/ql/test/library-tests/fields/PrintAst.expected b/csharp/ql/test/library-tests/fields/PrintAst.expected index f6857832791..4f33d662a06 100644 --- a/csharp/ql/test/library-tests/fields/PrintAst.expected +++ b/csharp/ql/test/library-tests/fields/PrintAst.expected @@ -3,37 +3,27 @@ fields.cs: # 7| 1: [Class] A # 10| 6: [Field] X # 10| -1: [TypeMention] int -# 10| 1: [AssignExpr] ... = ... -# 10| 0: [FieldAccess] access to field X -# 10| 1: [IntLiteral] 1 +# 10| 1: [IntLiteral] 1 # 10| 7: [Field] Y # 10| -1: [TypeMention] int # 10| 8: [Field] Z # 10| -1: [TypeMention] int -# 10| 1: [AssignExpr] ... = ... -# 10| 0: [FieldAccess] access to field Z -# 10| 1: [IntLiteral] 100 +# 10| 1: [IntLiteral] 100 # 13| 2: [Class] B # 15| 6: [Field] X # 15| -1: [TypeMention] int -# 15| 1: [AssignExpr] ... = ... -# 15| 0: [FieldAccess] access to field X -# 15| 1: [IntLiteral] 1 +# 15| 1: [IntLiteral] 1 # 16| 7: [Field] Y # 16| -1: [TypeMention] int # 17| 8: [Field] Z # 17| -1: [TypeMention] int -# 17| 1: [AssignExpr] ... = ... -# 17| 0: [FieldAccess] access to field Z -# 17| 1: [IntLiteral] 100 +# 17| 1: [IntLiteral] 100 # 20| 3: [Class] C`1 #-----| 1: (Type parameters) # 20| 0: [TypeParameter] V # 23| 5: [Field] count # 23| -1: [TypeMention] int -# 23| 1: [AssignExpr] ... = ... -# 23| 0: [FieldAccess] access to field count -# 23| 1: [IntLiteral] 0 +# 23| 1: [IntLiteral] 0 # 25| 6: [InstanceConstructor] C # 25| 4: [BlockStmt] {...} # 25| 0: [ExprStmt] ...; @@ -50,22 +40,16 @@ fields.cs: # 34| -1: [TypeMention] bool # 35| 7: [Field] x # 35| -1: [TypeMention] double -# 35| 1: [AssignExpr] ... = ... -# 35| 0: [FieldAccess] access to field x -# 35| 1: [MethodCall] call to method Sqrt -# 35| -1: [TypeAccess] access to type Math -# 35| 0: [TypeMention] Math -# 35| 0: [DoubleLiteral] 2 +# 35| 1: [MethodCall] call to method Sqrt +# 35| -1: [TypeAccess] access to type Math +# 35| 0: [TypeMention] Math +# 35| 0: [DoubleLiteral] 2 # 36| 8: [Field] i # 36| -1: [TypeMention] int -# 36| 1: [AssignExpr] ... = ... -# 36| 0: [FieldAccess] access to field i -# 36| 1: [IntLiteral] 100 +# 36| 1: [IntLiteral] 100 # 37| 9: [Field] s # 37| -1: [TypeMention] string -# 37| 1: [AssignExpr] ... = ... -# 37| 0: [FieldAccess] access to field s -# 37| 1: [StringLiteralUtf16] "Hello" +# 37| 1: [StringLiteralUtf16] "Hello" # 39| 10: [Method] Main # 39| -1: [TypeMention] Void # 40| 4: [BlockStmt] {...} @@ -111,28 +95,24 @@ fields.cs: # 50| 5: [Class] Color # 53| 5: [Field] Black # 53| -1: [TypeMention] Color -# 53| 1: [AssignExpr] ... = ... -# 53| 0: [FieldAccess] access to field Black -# 53| 1: [ObjectCreation] object creation of type Color -# 53| -1: [TypeMention] Color -# 53| 0: [CastExpr] (...) ... -# 53| 1: [IntLiteral] 0 -# 53| 1: [CastExpr] (...) ... -# 53| 1: [IntLiteral] 0 -# 53| 2: [CastExpr] (...) ... -# 53| 1: [IntLiteral] 0 +# 53| 1: [ObjectCreation] object creation of type Color +# 53| -1: [TypeMention] Color +# 53| 0: [CastExpr] (...) ... +# 53| 1: [IntLiteral] 0 +# 53| 1: [CastExpr] (...) ... +# 53| 1: [IntLiteral] 0 +# 53| 2: [CastExpr] (...) ... +# 53| 1: [IntLiteral] 0 # 54| 6: [Field] White # 54| -1: [TypeMention] Color -# 54| 1: [AssignExpr] ... = ... -# 54| 0: [FieldAccess] access to field White -# 54| 1: [ObjectCreation] object creation of type Color -# 54| -1: [TypeMention] Color -# 54| 0: [CastExpr] (...) ... -# 54| 1: [IntLiteral] 255 -# 54| 1: [CastExpr] (...) ... -# 54| 1: [IntLiteral] 255 -# 54| 2: [CastExpr] (...) ... -# 54| 1: [IntLiteral] 255 +# 54| 1: [ObjectCreation] object creation of type Color +# 54| -1: [TypeMention] Color +# 54| 0: [CastExpr] (...) ... +# 54| 1: [IntLiteral] 255 +# 54| 1: [CastExpr] (...) ... +# 54| 1: [IntLiteral] 255 +# 54| 2: [CastExpr] (...) ... +# 54| 1: [IntLiteral] 255 # 56| 7: [InstanceConstructor] Color #-----| 2: (Parameters) # 56| 0: [Parameter] r @@ -145,50 +125,38 @@ fields.cs: # 60| 6: [Class] TestBindings # 63| 6: [Field] a # 63| -1: [TypeMention] int -# 63| 1: [AssignExpr] ... = ... -# 63| 0: [FieldAccess] access to field a -# 63| 1: [AddExpr] ... + ... -# 63| 0: [FieldAccess] access to field b -# 63| 1: [IntLiteral] 1 +# 63| 1: [AddExpr] ... + ... +# 63| 0: [FieldAccess] access to field b +# 63| 1: [IntLiteral] 1 # 64| 7: [Field] b # 64| -1: [TypeMention] int -# 64| 1: [AssignExpr] ... = ... -# 64| 0: [FieldAccess] access to field b -# 64| 1: [AddExpr] ... + ... -# 64| 0: [FieldAccess] access to field a -# 64| 1: [IntLiteral] 1 +# 64| 1: [AddExpr] ... + ... +# 64| 0: [FieldAccess] access to field a +# 64| 1: [IntLiteral] 1 # 70| [NamespaceDeclaration] namespace ... { ... } # 72| 1: [Class] A # 74| 5: [Field] X # 74| -1: [TypeMention] int -# 74| 1: [AssignExpr] ... = ... -# 74| 0: [MemberConstantAccess] access to constant X -# 74| 1: [AddExpr] ... + ... -# 74| 0: [MemberConstantAccess] access to constant Z -# 74| -1: [TypeAccess] access to type B -# 74| 0: [TypeMention] B -# 74| 1: [IntLiteral] 1 +# 74| 1: [AddExpr] ... + ... +# 74| 0: [MemberConstantAccess] access to constant Z +# 74| -1: [TypeAccess] access to type B +# 74| 0: [TypeMention] B +# 74| 1: [IntLiteral] 1 # 75| 6: [Field] Y # 75| -1: [TypeMention] int -# 75| 1: [AssignExpr] ... = ... -# 75| 0: [MemberConstantAccess] access to constant Y -# 75| 1: [IntLiteral] 10 +# 75| 1: [IntLiteral] 10 # 78| 2: [Class] B # 80| 5: [Field] Z # 80| -1: [TypeMention] int -# 80| 1: [AssignExpr] ... = ... -# 80| 0: [MemberConstantAccess] access to constant Z -# 80| 1: [AddExpr] ... + ... -# 80| 0: [MemberConstantAccess] access to constant Y -# 80| -1: [TypeAccess] access to type A -# 80| 0: [TypeMention] A -# 80| 1: [IntLiteral] 1 +# 80| 1: [AddExpr] ... + ... +# 80| 0: [MemberConstantAccess] access to constant Y +# 80| -1: [TypeAccess] access to type A +# 80| 0: [TypeMention] A +# 80| 1: [IntLiteral] 1 # 83| 3: [Class] C # 85| 4: [Field] Foo # 85| -1: [TypeMention] int -# 85| 1: [AssignExpr] ... = ... -# 85| 0: [MemberConstantAccess] access to constant Foo -# 85| 1: [IntLiteral] 1 +# 85| 1: [IntLiteral] 1 # 86| 5: [Field] x # 86| -1: [TypeMention] long? # 86| 1: [TypeMention] long diff --git a/csharp/ql/test/library-tests/frameworks/EntityFramework/FlowSummaries.expected b/csharp/ql/test/library-tests/frameworks/EntityFramework/FlowSummaries.expected index 8522487dff7..db1bacefb33 100644 --- a/csharp/ql/test/library-tests/frameworks/EntityFramework/FlowSummaries.expected +++ b/csharp/ql/test/library-tests/frameworks/EntityFramework/FlowSummaries.expected @@ -170,7 +170,6 @@ summary | System.Data.Entity;DbContext;false;SaveChangesAsync;(System.Threading.CancellationToken);;Argument[this].Property[EFTests.MyContext.Persons].Element.Property[EFTests.Person.Id];SyntheticGlobal[EFTests.MyContext.Persons#ReturnValue.Element.Property[EFTests.Person.Id]];value;manual | | System.Data.Entity;DbContext;false;SaveChangesAsync;(System.Threading.CancellationToken);;Argument[this].Property[EFTests.MyContext.Persons].Element.Property[EFTests.Person.Name];SyntheticGlobal[EFTests.MyContext.PersonAddresses#ReturnValue.Element.Property[EFTests.PersonAddressMap.Person].Property[EFTests.Person.Name]];value;manual | | System.Data.Entity;DbContext;false;SaveChangesAsync;(System.Threading.CancellationToken);;Argument[this].Property[EFTests.MyContext.Persons].Element.Property[EFTests.Person.Name];SyntheticGlobal[EFTests.MyContext.Persons#ReturnValue.Element.Property[EFTests.Person.Name]];value;manual | -neutral sourceNode sinkNode | EntityFrameworkCore.cs:72:36:72:40 | "sql" | sql-injection | diff --git a/csharp/ql/test/library-tests/frameworks/EntityFramework/FlowSummaries.ql b/csharp/ql/test/library-tests/frameworks/EntityFramework/FlowSummaries.ql index bef72ca30a1..55cd03ede10 100644 --- a/csharp/ql/test/library-tests/frameworks/EntityFramework/FlowSummaries.ql +++ b/csharp/ql/test/library-tests/frameworks/EntityFramework/FlowSummaries.ql @@ -3,8 +3,10 @@ import shared.FlowSummaries import semmle.code.csharp.frameworks.EntityFramework::EntityFramework import semmle.code.csharp.dataflow.internal.ExternalFlow as ExternalFlow -private class IncludeEFSummarizedCallable extends IncludeSummarizedCallable instanceof EFSummarizedCallable -{ } +class RelevantSummarizedCallable extends IncludeSummarizedCallable instanceof EFSummarizedCallable { +} + +import TestSummaryOutput query predicate sourceNode(DataFlow::Node node, string kind) { ExternalFlow::sourceNode(node, kind) diff --git a/csharp/ql/test/library-tests/frameworks/system/Dispose/Dispose.ql b/csharp/ql/test/library-tests/frameworks/system/Dispose/Dispose.ql index 943245fa0a2..5fa2f337fcf 100644 --- a/csharp/ql/test/library-tests/frameworks/system/Dispose/Dispose.ql +++ b/csharp/ql/test/library-tests/frameworks/system/Dispose/Dispose.ql @@ -1,4 +1,5 @@ import csharp +import semmle.code.csharp.commons.QualifiedName import semmle.code.csharp.frameworks.System from ValueOrRefType t, Method m, boolean b @@ -6,4 +7,4 @@ where t.fromSource() and m = getInvokedDisposeMethod(t) and if implementsDispose(t) then b = true else b = false -select t, m.getFullyQualifiedNameWithTypes(), b +select t, getFullyQualifiedNameWithTypes(m), b diff --git a/csharp/ql/test/library-tests/frameworks/system/Equals/Equals.ql b/csharp/ql/test/library-tests/frameworks/system/Equals/Equals.ql index 91c04791ef3..e6dc4ae7549 100644 --- a/csharp/ql/test/library-tests/frameworks/system/Equals/Equals.ql +++ b/csharp/ql/test/library-tests/frameworks/system/Equals/Equals.ql @@ -1,4 +1,5 @@ import csharp +import semmle.code.csharp.commons.QualifiedName import semmle.code.csharp.frameworks.System from ValueOrRefType t, Method m, boolean b @@ -6,4 +7,4 @@ where t.fromSource() and m = getInvokedEqualsMethod(t) and if implementsEquals(t) then b = true else b = false -select t, m.getFullyQualifiedNameWithTypes(), b +select t, getFullyQualifiedNameWithTypes(m), b diff --git a/csharp/ql/test/library-tests/generics/Generics.ql b/csharp/ql/test/library-tests/generics/Generics.ql index 2f3aff0fd58..e75f1fdc908 100644 --- a/csharp/ql/test/library-tests/generics/Generics.ql +++ b/csharp/ql/test/library-tests/generics/Generics.ql @@ -231,18 +231,18 @@ query predicate test27(ConstructedType ct, UnboundGenericType ugt, UnboundGeneri query predicate test28(UnboundGeneric ug, string s) { ug.fromSource() and - s = ug.getFullyQualifiedNameWithTypes() + s = getFullyQualifiedNameWithTypes(ug) } query predicate test29(ConstructedGeneric cg, string s) { cg.fromSource() and - s = cg.getFullyQualifiedNameWithTypes() + s = getFullyQualifiedNameWithTypes(cg) } query predicate test30(Declaration d, string s) { d.fromSource() and d instanceof @generic and - s = d.getFullyQualifiedNameWithTypes() and + s = getFullyQualifiedNameWithTypes(d) and d != d.getUnboundDeclaration() and not d instanceof Generic } @@ -263,21 +263,17 @@ query predicate test33(ConstructedMethod cm, string s1, string s2) { exists(string namespace, string type, string name | cm.hasFullyQualifiedName(namespace, type, name) and s1 = getQualifiedName(namespace, type, name) ) and - cm.getFullyQualifiedNameWithTypes() = s2 + getFullyQualifiedNameWithTypes(cm) = s2 } query predicate test34(UnboundGeneric ug, string s1, string s2) { ug.fromSource() and - exists(string qualifier, string name | - ug.hasFullyQualifiedName(qualifier, name) and s1 = getQualifiedName(qualifier, name) - ) and - ug.getFullyQualifiedNameWithTypes() = s2 + s1 = ug.getFullyQualifiedNameDebug() and + s2 = getFullyQualifiedNameWithTypes(ug) } query predicate test35(UnboundGenericMethod gm, string s1, string s2) { gm.fromSource() and - exists(string namespace, string type, string name | - gm.hasFullyQualifiedName(namespace, type, name) and s1 = getQualifiedName(namespace, type, name) - ) and - gm.getFullyQualifiedNameWithTypes() = s2 + s1 = gm.getFullyQualifiedNameDebug() and + s2 = getFullyQualifiedNameWithTypes(gm) } diff --git a/csharp/ql/test/library-tests/generics/PrintAst.expected b/csharp/ql/test/library-tests/generics/PrintAst.expected index 86a199c2ee0..3653b3b7a2d 100644 --- a/csharp/ql/test/library-tests/generics/PrintAst.expected +++ b/csharp/ql/test/library-tests/generics/PrintAst.expected @@ -370,24 +370,18 @@ generics.cs: # 60| 0: [TypeParameter] T # 63| 5: [Field] NumRows # 63| -1: [TypeMention] int -# 63| 1: [AssignExpr] ... = ... -# 63| 0: [MemberConstantAccess] access to constant NumRows -# 63| 1: [IntLiteral] 26 +# 63| 1: [IntLiteral] 26 # 64| 6: [Field] NumCols # 64| -1: [TypeMention] int -# 64| 1: [AssignExpr] ... = ... -# 64| 0: [MemberConstantAccess] access to constant NumCols -# 64| 1: [IntLiteral] 10 +# 64| 1: [IntLiteral] 10 # 66| 7: [Field] cells # 66| -1: [TypeMention] T[,] # 66| 1: [TypeMention] T -# 66| 1: [AssignExpr] ... = ... -# 66| 0: [FieldAccess] access to field cells -# 66| 1: [ArrayCreation] array creation of type T[,] -# 66| -1: [TypeMention] T[,] -# 66| 1: [TypeMention] T -# 66| 0: [MemberConstantAccess] access to constant NumRows -# 66| 1: [MemberConstantAccess] access to constant NumCols +# 66| 1: [ArrayCreation] array creation of type T[,] +# 66| -1: [TypeMention] T[,] +# 66| 1: [TypeMention] T +# 66| 0: [MemberConstantAccess] access to constant NumRows +# 66| 1: [MemberConstantAccess] access to constant NumCols # 68| 8: [Indexer] Item # 68| -1: [TypeMention] int #-----| 1: (Parameters) diff --git a/csharp/ql/test/library-tests/indexers/PrintAst.expected b/csharp/ql/test/library-tests/indexers/PrintAst.expected index 540c1d8255d..6f9fde00e24 100644 --- a/csharp/ql/test/library-tests/indexers/PrintAst.expected +++ b/csharp/ql/test/library-tests/indexers/PrintAst.expected @@ -214,24 +214,18 @@ indexers.cs: # 81| 3: [Class] Grid # 84| 5: [Field] NumRows # 84| -1: [TypeMention] int -# 84| 1: [AssignExpr] ... = ... -# 84| 0: [MemberConstantAccess] access to constant NumRows -# 84| 1: [IntLiteral] 26 +# 84| 1: [IntLiteral] 26 # 85| 6: [Field] NumCols # 85| -1: [TypeMention] int -# 85| 1: [AssignExpr] ... = ... -# 85| 0: [MemberConstantAccess] access to constant NumCols -# 85| 1: [IntLiteral] 10 +# 85| 1: [IntLiteral] 10 # 87| 7: [Field] cells # 87| -1: [TypeMention] Int32[,] # 87| 1: [TypeMention] int -# 87| 1: [AssignExpr] ... = ... -# 87| 0: [FieldAccess] access to field cells -# 87| 1: [ArrayCreation] array creation of type Int32[,] -# 87| -1: [TypeMention] Int32[,] -# 87| 1: [TypeMention] int -# 87| 0: [MemberConstantAccess] access to constant NumRows -# 87| 1: [MemberConstantAccess] access to constant NumCols +# 87| 1: [ArrayCreation] array creation of type Int32[,] +# 87| -1: [TypeMention] Int32[,] +# 87| 1: [TypeMention] int +# 87| 0: [MemberConstantAccess] access to constant NumRows +# 87| 1: [MemberConstantAccess] access to constant NumCols # 89| 8: [Indexer] Item # 89| -1: [TypeMention] int #-----| 1: (Parameters) diff --git a/csharp/ql/test/library-tests/overrides/Overrides22.ql b/csharp/ql/test/library-tests/overrides/Overrides22.ql index d2c5a9e4336..d6300d49ecd 100644 --- a/csharp/ql/test/library-tests/overrides/Overrides22.ql +++ b/csharp/ql/test/library-tests/overrides/Overrides22.ql @@ -1,4 +1,5 @@ import csharp +import semmle.code.csharp.commons.QualifiedName from Overridable v1, Overridable v2, string kind where @@ -9,4 +10,4 @@ where ) and v1.fromSource() and v2.fromSource() -select v1.getFullyQualifiedNameWithTypes(), v2.getFullyQualifiedNameWithTypes(), kind +select getFullyQualifiedNameWithTypes(v1), getFullyQualifiedNameWithTypes(v2), kind diff --git a/csharp/ql/test/library-tests/unification/Unification.ql b/csharp/ql/test/library-tests/unification/Unification.ql index 10c5e520921..f8c6c15377d 100644 --- a/csharp/ql/test/library-tests/unification/Unification.ql +++ b/csharp/ql/test/library-tests/unification/Unification.ql @@ -1,3 +1,4 @@ +import semmle.code.csharp.commons.QualifiedName import semmle.code.csharp.Unification class InterestingType extends @type { @@ -7,9 +8,9 @@ class InterestingType extends @type { } string toString() { - result = this.(Type).getFullyQualifiedNameWithTypes() + result = getFullyQualifiedNameWithTypes(this.(Type)) or - not exists(this.(Type).getFullyQualifiedNameWithTypes()) and + not exists(getFullyQualifiedNameWithTypes(this.(Type))) and result = this.(Type).toStringWithTypes() } diff --git a/csharp/ql/test/query-tests/API Abuse/IncorrectCompareToSignature/IncorrectCompareToSignature.expected b/csharp/ql/test/query-tests/API Abuse/IncorrectCompareToSignature/IncorrectCompareToSignature.expected index 46561c8184d..2b0e89de399 100644 --- a/csharp/ql/test/query-tests/API Abuse/IncorrectCompareToSignature/IncorrectCompareToSignature.expected +++ b/csharp/ql/test/query-tests/API Abuse/IncorrectCompareToSignature/IncorrectCompareToSignature.expected @@ -1,2 +1,2 @@ -| IncorrectCompareToSignature.cs:5:16:5:24 | CompareTo | The parameter of this 'CompareTo' method is of type $@, but $@ does not implement 'IComparable<$@>'. | IncorrectCompareToSignature.cs:3:10:3:10 | T | T | IncorrectCompareToSignature.cs:3:7:3:11 | C1`1 | C1`1 | IncorrectCompareToSignature.cs:3:10:3:10 | T | T | -| IncorrectCompareToSignatureBad.cs:5:16:5:24 | CompareTo | The parameter of this 'CompareTo' method is of type $@, but $@ does not implement 'IComparable<$@>'. | IncorrectCompareToSignatureBad.cs:3:7:3:9 | Bad | Bad | IncorrectCompareToSignatureBad.cs:3:7:3:9 | Bad | Bad | IncorrectCompareToSignatureBad.cs:3:7:3:9 | Bad | Bad | +| IncorrectCompareToSignature.cs:5:16:5:24 | CompareTo | The parameter of this 'CompareTo' method is of type 'T', but the declaring type does not implement 'IComparable'. | +| IncorrectCompareToSignatureBad.cs:5:16:5:24 | CompareTo | The parameter of this 'CompareTo' method is of type 'Bad', but the declaring type does not implement 'IComparable'. | diff --git a/csharp/ql/test/query-tests/Security Features/CWE-078/CommandInjection.expected b/csharp/ql/test/query-tests/Security Features/CWE-078/CommandInjection.expected index fe27701d59d..b5f8eca16eb 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-078/CommandInjection.expected +++ b/csharp/ql/test/query-tests/Security Features/CWE-078/CommandInjection.expected @@ -6,23 +6,14 @@ edges | CommandInjection.cs:27:20:27:28 | access to local variable userInput : String | CommandInjection.cs:30:74:30:82 | access to local variable userInput | provenance | | | CommandInjection.cs:27:20:27:28 | access to local variable userInput : String | CommandInjection.cs:30:74:30:82 | access to local variable userInput : String | provenance | | | CommandInjection.cs:27:20:27:28 | access to local variable userInput : String | CommandInjection.cs:34:39:34:47 | access to local variable userInput | provenance | | -| CommandInjection.cs:27:20:27:28 | access to local variable userInput : String | CommandInjection.cs:34:39:34:47 | access to local variable userInput : String | provenance | | | CommandInjection.cs:27:20:27:28 | access to local variable userInput : String | CommandInjection.cs:35:40:35:48 | access to local variable userInput | provenance | | -| CommandInjection.cs:27:20:27:28 | access to local variable userInput : String | CommandInjection.cs:35:40:35:48 | access to local variable userInput : String | provenance | | | CommandInjection.cs:27:20:27:28 | access to local variable userInput : String | CommandInjection.cs:36:47:36:55 | access to local variable userInput | provenance | | -| CommandInjection.cs:27:20:27:28 | access to local variable userInput : String | CommandInjection.cs:36:47:36:55 | access to local variable userInput : String | provenance | | | CommandInjection.cs:27:32:27:46 | access to field categoryTextBox : TextBox | CommandInjection.cs:27:32:27:51 | access to property Text : String | provenance | | | CommandInjection.cs:27:32:27:51 | access to property Text : String | CommandInjection.cs:27:20:27:28 | access to local variable userInput : String | provenance | | | CommandInjection.cs:30:30:30:38 | access to local variable startInfo : ProcessStartInfo | CommandInjection.cs:31:27:31:35 | access to local variable startInfo | provenance | | | CommandInjection.cs:30:42:30:83 | object creation of type ProcessStartInfo : ProcessStartInfo | CommandInjection.cs:30:30:30:38 | access to local variable startInfo : ProcessStartInfo | provenance | | | CommandInjection.cs:30:63:30:71 | access to local variable userInput : String | CommandInjection.cs:30:42:30:83 | object creation of type ProcessStartInfo : ProcessStartInfo | provenance | | | CommandInjection.cs:30:74:30:82 | access to local variable userInput : String | CommandInjection.cs:30:42:30:83 | object creation of type ProcessStartInfo : ProcessStartInfo | provenance | | -| CommandInjection.cs:34:13:34:26 | [post] access to local variable startInfoProps : ProcessStartInfo | CommandInjection.cs:37:27:37:40 | access to local variable startInfoProps | provenance | | -| CommandInjection.cs:34:39:34:47 | access to local variable userInput : String | CommandInjection.cs:34:13:34:26 | [post] access to local variable startInfoProps : ProcessStartInfo | provenance | | -| CommandInjection.cs:35:13:35:26 | [post] access to local variable startInfoProps : ProcessStartInfo | CommandInjection.cs:37:27:37:40 | access to local variable startInfoProps | provenance | | -| CommandInjection.cs:35:40:35:48 | access to local variable userInput : String | CommandInjection.cs:35:13:35:26 | [post] access to local variable startInfoProps : ProcessStartInfo | provenance | | -| CommandInjection.cs:36:13:36:26 | [post] access to local variable startInfoProps : ProcessStartInfo | CommandInjection.cs:37:27:37:40 | access to local variable startInfoProps | provenance | | -| CommandInjection.cs:36:47:36:55 | access to local variable userInput : String | CommandInjection.cs:36:13:36:26 | [post] access to local variable startInfoProps : ProcessStartInfo | provenance | | | CommandInjection.cs:51:54:51:80 | call to method GetString : String | CommandInjection.cs:51:46:51:80 | ... + ... | provenance | | nodes | CommandInjection.cs:27:20:27:28 | access to local variable userInput : String | semmle.label | access to local variable userInput : String | @@ -37,16 +28,9 @@ nodes | CommandInjection.cs:30:74:30:82 | access to local variable userInput | semmle.label | access to local variable userInput | | CommandInjection.cs:30:74:30:82 | access to local variable userInput : String | semmle.label | access to local variable userInput : String | | CommandInjection.cs:31:27:31:35 | access to local variable startInfo | semmle.label | access to local variable startInfo | -| CommandInjection.cs:34:13:34:26 | [post] access to local variable startInfoProps : ProcessStartInfo | semmle.label | [post] access to local variable startInfoProps : ProcessStartInfo | | CommandInjection.cs:34:39:34:47 | access to local variable userInput | semmle.label | access to local variable userInput | -| CommandInjection.cs:34:39:34:47 | access to local variable userInput : String | semmle.label | access to local variable userInput : String | -| CommandInjection.cs:35:13:35:26 | [post] access to local variable startInfoProps : ProcessStartInfo | semmle.label | [post] access to local variable startInfoProps : ProcessStartInfo | | CommandInjection.cs:35:40:35:48 | access to local variable userInput | semmle.label | access to local variable userInput | -| CommandInjection.cs:35:40:35:48 | access to local variable userInput : String | semmle.label | access to local variable userInput : String | -| CommandInjection.cs:36:13:36:26 | [post] access to local variable startInfoProps : ProcessStartInfo | semmle.label | [post] access to local variable startInfoProps : ProcessStartInfo | | CommandInjection.cs:36:47:36:55 | access to local variable userInput | semmle.label | access to local variable userInput | -| CommandInjection.cs:36:47:36:55 | access to local variable userInput : String | semmle.label | access to local variable userInput : String | -| CommandInjection.cs:37:27:37:40 | access to local variable startInfoProps | semmle.label | access to local variable startInfoProps | | CommandInjection.cs:51:46:51:80 | ... + ... | semmle.label | ... + ... | | CommandInjection.cs:51:54:51:80 | call to method GetString : String | semmle.label | call to method GetString : String | subpaths @@ -59,5 +43,4 @@ subpaths | CommandInjection.cs:34:39:34:47 | access to local variable userInput | CommandInjection.cs:27:32:27:46 | access to field categoryTextBox : TextBox | CommandInjection.cs:34:39:34:47 | access to local variable userInput | This command line depends on a $@. | CommandInjection.cs:27:32:27:46 | access to field categoryTextBox | user-provided value | | CommandInjection.cs:35:40:35:48 | access to local variable userInput | CommandInjection.cs:27:32:27:46 | access to field categoryTextBox : TextBox | CommandInjection.cs:35:40:35:48 | access to local variable userInput | This command line depends on a $@. | CommandInjection.cs:27:32:27:46 | access to field categoryTextBox | user-provided value | | CommandInjection.cs:36:47:36:55 | access to local variable userInput | CommandInjection.cs:27:32:27:46 | access to field categoryTextBox : TextBox | CommandInjection.cs:36:47:36:55 | access to local variable userInput | This command line depends on a $@. | CommandInjection.cs:27:32:27:46 | access to field categoryTextBox | user-provided value | -| CommandInjection.cs:37:27:37:40 | access to local variable startInfoProps | CommandInjection.cs:27:32:27:46 | access to field categoryTextBox : TextBox | CommandInjection.cs:37:27:37:40 | access to local variable startInfoProps | This command line depends on a $@. | CommandInjection.cs:27:32:27:46 | access to field categoryTextBox | user-provided value | | CommandInjection.cs:51:46:51:80 | ... + ... | CommandInjection.cs:51:54:51:80 | call to method GetString : String | CommandInjection.cs:51:46:51:80 | ... + ... | This command line depends on a $@. | CommandInjection.cs:51:54:51:80 | call to method GetString | user-provided value | diff --git a/csharp/ql/test/shared/FlowSummaries.qll b/csharp/ql/test/shared/FlowSummaries.qll index 83a1530b028..2fecea3f62f 100644 --- a/csharp/ql/test/shared/FlowSummaries.qll +++ b/csharp/ql/test/shared/FlowSummaries.qll @@ -1,13 +1,20 @@ import semmle.code.csharp.dataflow.internal.FlowSummaryImpl::Private import semmle.code.csharp.dataflow.internal.FlowSummaryImpl::Public -import semmle.code.csharp.dataflow.internal.FlowSummaryImpl::Private::TestOutput private import semmle.code.csharp.dataflow.internal.ExternalFlow -abstract class IncludeSummarizedCallable extends RelevantSummarizedCallable { +final private class SummarizedCallableImplFinal = SummarizedCallableImpl; + +class IncludeSummarizedCallable extends SummarizedCallableImplFinal { IncludeSummarizedCallable() { [this.(Modifiable), this.(Accessor).getDeclaration()].isEffectivelyPublic() } /** Gets a string representing the callable in semi-colon separated format for use in flow summaries. */ - final override string getCallableCsv() { result = asPartialModel(this) } + final string getCallableCsv() { result = asPartialModel(this) } + + predicate relevantSummary( + SummaryComponentStack input, SummaryComponentStack output, boolean preservesValue + ) { + this.propagatesFlow(input, output, preservesValue) + } } diff --git a/docs/codeql/codeql-language-guides/codeql-for-javascript.rst b/docs/codeql/codeql-language-guides/codeql-for-javascript.rst index 40ecb76ee0a..9c4073bce1b 100644 --- a/docs/codeql/codeql-language-guides/codeql-for-javascript.rst +++ b/docs/codeql/codeql-language-guides/codeql-for-javascript.rst @@ -17,6 +17,7 @@ Experiment and learn how to write effective and efficient queries for CodeQL dat using-type-tracking-for-api-modeling abstract-syntax-tree-classes-for-working-with-javascript-and-typescript-programs data-flow-cheat-sheet-for-javascript + customizing-library-models-for-javascript - :doc:`Basic query for JavaScript and TypeScript code `: Learn to write and run a simple CodeQL query. @@ -33,3 +34,5 @@ Experiment and learn how to write effective and efficient queries for CodeQL dat - :doc:`Abstract syntax tree classes for working with JavaScript and TypeScript programs `: CodeQL has a large selection of classes for representing the abstract syntax tree of JavaScript and TypeScript programs. - :doc:`Data flow cheat sheet for JavaScript `: This article describes parts of the JavaScript libraries commonly used for variant analysis and in data flow queries. + +- :doc:`Customizing library models for JavaScript `: You can model frameworks and libraries that your codebase depends on using data extensions and publish them as CodeQL model packs. diff --git a/docs/codeql/codeql-language-guides/codeql-for-ruby.rst b/docs/codeql/codeql-language-guides/codeql-for-ruby.rst index f36df2496bf..1de2e54d9c6 100644 --- a/docs/codeql/codeql-language-guides/codeql-for-ruby.rst +++ b/docs/codeql/codeql-language-guides/codeql-for-ruby.rst @@ -13,6 +13,7 @@ Experiment and learn how to write effective and efficient queries for CodeQL dat abstract-syntax-tree-classes-for-working-with-ruby-programs analyzing-data-flow-in-ruby using-api-graphs-in-ruby + customizing-library-models-for-ruby - :doc:`Basic query for Ruby code `: Learn to write and run a simple CodeQL query. @@ -23,3 +24,5 @@ Experiment and learn how to write effective and efficient queries for CodeQL dat - :doc:`Using API graphs in Ruby `: API graphs are a uniform interface for referring to functions, classes, and methods defined in external libraries. - :doc:`Abstract syntax tree classes for working with Ruby programs `: CodeQL has a large selection of classes for representing the abstract syntax tree of Ruby programs. + +- :doc:`Customizing library models for Ruby `: You can model frameworks and libraries that your codebase depends on using data extensions and publish them as CodeQL model packs. diff --git a/docs/codeql/codeql-language-guides/customizing-library-models-for-javascript.rst b/docs/codeql/codeql-language-guides/customizing-library-models-for-javascript.rst index 99f6edd055c..b062c66bcca 100644 --- a/docs/codeql/codeql-language-guides/customizing-library-models-for-javascript.rst +++ b/docs/codeql/codeql-language-guides/customizing-library-models-for-javascript.rst @@ -1,8 +1,5 @@ .. _customizing-library-models-for-javascript: -:orphan: -:nosearch: - Customizing Library Models for JavaScript ========================================= @@ -30,8 +27,6 @@ The CodeQL library for JavaScript exposes the following extensible predicates: - **typeModel**\(type1, type2, path) - **summaryModel**\(type, path, input, output, kind) -See the `CLI documentation for how to load and use data extensions in a CodeQL evaluation run `__ (internal access required). - We'll explain how to use these using a few examples, and provide some reference material at the end of this article. Example: Taint sink in the 'execa' package @@ -483,7 +478,7 @@ The following components are supported: - **Element** selects an element of an array, iterator, or set object. - **MapValue** selects a value of a map object. - **Awaited** selects the value of a promise. -- **Instance** selects instances of a class. +- **Instance** selects instances of a class, including instances of its subclasses. - **Fuzzy** selects all values that are derived from the current value through a combination of the other operations described in this list. For example, this can be used to find all values that appear to originate from a particular package. This can be useful for finding method calls from a known package, but where the receiver type is not known or is difficult to model. diff --git a/docs/codeql/codeql-language-guides/customizing-library-models-for-ruby.rst b/docs/codeql/codeql-language-guides/customizing-library-models-for-ruby.rst new file mode 100644 index 00000000000..50a959e14a4 --- /dev/null +++ b/docs/codeql/codeql-language-guides/customizing-library-models-for-ruby.rst @@ -0,0 +1,402 @@ +.. _customizing-library-models-for-ruby: + + +Customizing Library Models for Ruby +=================================== + +.. include:: ../reusables/beta-note-customizing-library-models.rst + +Ruby analysis can be customized by adding library models in data extension files. + +A data extension for Ruby is a YAML file of the form: + +.. code-block:: yaml + + extensions: + - addsTo: + pack: codeql/ruby-all + extensible: + data: + - + - + - ... + +The CodeQL library for Ruby exposes the following extensible predicates: + +- **sourceModel**\(type, path, kind) +- **sinkModel**\(type, path, kind) +- **typeModel**\(type1, type2, path) +- **summaryModel**\(type, path, input, output, kind) + +We'll explain how to use these using a few examples, and provide some reference material at the end of this article. + +Example: Taint sink in the 'tty-command' gem +-------------------------------------------- + +In this example, we'll show how to add the following argument, passed to **tty-command**, as a command-line injection sink: + +.. code-block:: ruby + + tty = TTY::Command.new + tty.run(cmd) # <-- add 'cmd' as a taint sink + +For this example, you can use the following data extension: + +.. code-block:: yaml + + extensions: + - addsTo: + pack: codeql/ruby-all + extensible: sinkModel + data: + - ["TTY::Command", "Method[run].Argument[0]", "command-injection"] + + +- Since we're adding a new sink, we add a tuple to the **sinkModel** extensible predicate. +- The first column, **"TTY::Command"**, identifies a set of values from which to begin the search for the sink. + The string **"TTY::Command""** means we start at the places where the codebase constructs instances of the class **TTY::Command**. +- The second column is an access path that is evaluated from left to right, starting at the values that were identified by the first column. + + - **Method[run]** selects calls to the **run** method of the **TTY::Command** class. + - **Argument[0]** selects the first argument to calls to that member. + +- **command-injection** indicates that this is considered a sink for the command injection query. + +Example: Taint sources from 'sinatra' block parameters +------------------------------------------------------ + +In this example, we'll show how the 'x' parameter below could be marked as a remote flow source: + +.. code-block:: ruby + + class MyApp < Sinatra::Base + get '/' do |x| # <-- add 'x' as a taint source + # ... + end + end + +For this example you could use the following data extension: + +.. code-block:: yaml + + extensions: + - addsTo: + pack: codeql/ruby-all + extensible: sourceModel + data: + - [ + "Sinatra::Base!", + "Method[get].Argument[block].Parameter[0]", + "remote", + ] + +- Since we're adding a new taint source, we add a tuple to the **sourceModel** extensible predicate. +- The first column, **"Sinatra::Base!"**, begins the search at references to the **Sinatra::Base** class. + The **!** suffix indicates that we want to search for references to the class itself, rather than instances of the class. +- **Method[get]** selects calls to the **get** method of the **Sinatra::Base** class. +- **Argument[block]** selects the block argument to the **get** method call. +- **Parameter[0]** selects the first parameter of the block argument (the parameter named **x**). +- Finally, the kind **remote** indicates that this is considered a source of remote flow. + +Example: Using types to add MySQL injection sinks +------------------------------------------------- + +In this example, we'll show how to add the following SQL injection sink: + +.. code-block:: ruby + + def submit(q) + client = Mysql2::Client.new + client.query(q) # <-- add 'q' as a SQL injection sink + end + +We can recognize this using the following extension: + +.. code-block:: yaml + + extensions: + - addsTo: + pack: codeql/ruby-all + extensible: sinkModel + data: + - ["Mysql2::Client", "Method[query].Argument[0]", "sql-injection"] + +- The first column, **"Mysql2::Client"**, begins the search at any instance of the **Mysql2::Client** class. +- **Method[query]** selects any call to the **query** method on that instance. +- **Argument[0]** selects the first argument to the method call. +- **sql-injection** indicates that this is considered a sink for the SQL injection query. + +Continued example: Using type models +------------------------------------ + +Consider this variation on the previous example, the mysql2 EventMachine API is used. +The client is obtained via a call to **Mysql2::EM::Client.new**. + +.. code-block:: ruby + + def submit(client, q) + client = Mysql2::EM::Client.new + client.query(q) + end + +So far we have only one model for **Mysql2::Client**, but in the real world we +may have many models for the various methods available. Because **Mysql2::EM::Client** is a subclass of **Mysql2::Client**, it inherits all of the same methods. +Instead of updating all our models to include both classes, we can add a type +model to indicate that **Mysql2::EM::Client** is a subclass of **Mysql2::Client**: + +.. code-block:: yaml + + extensions: + - addsTo: + pack: codeql/ruby-all + extensible: typeModel + data: + - ["Mysql2::Client", "Mysql2::EM::Client", ""] + +Example: Adding flow through 'URI.decode_uri_component' +------------------------------------------------------- + +In this example, we'll show how to add flow through calls to 'URI.decode_uri_component': + +.. code-block:: ruby + + y = URI.decode_uri_component(x); # add taint flow from 'x' to 'y' + +We can model this using the following data extension: + +.. code-block:: yaml + + extensions: + - addsTo: + pack: codeql/ruby-all + extensible: summaryModel + data: + - [ + "URI!", + "Method[decode_uri_component]", + "Argument[0]", + "ReturnValue", + "taint", + ] + + +- Since we're adding flow through a method call, we add a tuple to the **summaryModel** extensible predicate. +- The first column, **"URI!"**, begins the search for relevant calls at references to the **URI** class. +- The **!** suffix indicates that we are looking for the class itself, rather than instances of the class. +- The second column, **Method[decode_uri_component]**, is a path leading to the method calls we wish to model. + In this case, we select references to the **decode_uri_component** method from the **URI** class. +- The third column, **Argument[0]**, indicates the input of the flow. In this case, the first argument to the method call. +- The fourth column, **ReturnValue**, indicates the output of the flow. In this case, the return value of the method call. +- The last column, **taint**, indicates the kind of flow to add. The value **taint** means the output is not necessarily equal + to the input, but was derived from the input in a taint-preserving way. + +Example: Adding flow through 'File#each' +---------------------------------------- + +In this example, we'll show how to add flow through calls to **File#each** from the standard library, which iterates over the lines of a file: + +.. code-block:: ruby + + f = File.new("example.txt") + f.each { |line| ... } # add taint flow from `f` to `line` + +We can model this using the following data extension: + +.. code-block:: yaml + + extensions: + - addsTo: + pack: codeql/ruby-all + extensible: summaryModel + data: + - [ + "File", + "Method[each]", + "Argument[self]", + "Argument[block].Parameter[0]", + "taint", + ] + + +- Since we're adding flow through a method call, we add a tuple to the **summaryModel** extensible predicate. +- The first column, **"File"**, begins the search for relevant calls at places where the **File** class is used. +- The second column, **Method[each]**, selects references to the **each** method on the **File** class. +- The third column specifies the input of the flow. **Argument[self]** selects the **self** argument of **each**, which is the **File** instance being iterated over. + +- The fourth column specifies the output of the flow: + + - **Argument[block]** selects the block argument of **each** (the block which is executed for each line in the file). + - **Parameter[0]** selects the first parameter of the block (the parameter named **line**). + +- The last column, **taint**, indicates the kind of flow to add. + +Reference material +------------------ + +The following sections provide reference material for extensible predicates, access paths, types, and kinds. + +Extensible predicates +--------------------- + +sourceModel(type, path, kind) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Adds a new taint source. Most taint-tracking queries will use the new source. + +- **type**: Name of a type from which to evaluate **path**. +- **path**: Access path leading to the source. +- **kind**: Kind of source to add. Currently only **remote** is used. + +Example: + +.. code-block:: yaml + + extensions: + - addsTo: + pack: codeql/ruby-all + extensible: sourceModel + data: + - ["User", "Method[name]", "remote"] + +sinkModel(type, path, kind) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Adds a new taint sink. Sinks are query-specific and will typically affect one or two queries. + +- **type**: Name of a type from which to evaluate **path**. +- **path**: Access path leading to the sink. +- **kind**: Kind of sink to add. See the section on sink kinds for a list of supported kinds. + +Example: + +.. code-block:: yaml + + extensions: + - addsTo: + pack: codeql/ruby-all + extensible: sinkModel + data: + - ["ExecuteShell", "Method[run].Argument[0]", "command-injection"] + +summaryModel(type, path, input, output, kind) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Adds flow through a method call. + +- **type**: Name of a type from which to evaluate **path**. +- **path**: Access path leading to a method call. +- **input**: Path relative to the method call that leads to input of the flow. +- **output**: Path relative to the method call leading to the output of the flow. +- **kind**: Kind of summary to add. Can be **taint** for taint-propagating flow, or **value** for value-preserving flow. + +Example: + +.. code-block:: yaml + + extensions: + - addsTo: + pack: codeql/ruby-all + extensible: summaryModel + data: + - [ + "URI", + "Method[decode_uri_component]", + "Argument[0]", + "ReturnValue", + "taint", + ] + +typeModel(type1, type2, path) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Adds a new definition of a type. + +- **type1**: Name of the type to define. +- **type2**: Name of the type from which to evaluate **path**. +- **path**: Access path leading from **type2** to **type1**. + +Example: + +.. code-block:: yaml + + extensions: + - addsTo: + pack: codeql/ruby-all + extensible: typeModel + data: + - [ + "Mysql2::Client", + "MyDbWrapper", + "Method[getConnection].ReturnValue", + ] + +Types +----- + +A type is a string that identifies a set of values. +In each of the extensible predicates mentioned in previous section, the first column is always the name of a type. +A type can be defined by adding **typeModel** tuples for that type. + +Access paths +------------ + +The **path**, **input**, and **output** columns consist of a **.**-separated list of components, which is evaluated from left to right, +with each step selecting a new set of values derived from the previous set of values. + +The following components are supported: + +- **Argument[**\ `number`\ **]** selects the argument at the given index. +- **Argument[**\ `string`:\ **]** selects the keyword argument with the given name. +- **Argument[self]** selects the receiver of a method call. +- **Argument[block]** selects the block argument. +- **Argument[any]** selects any argument, except self or block arguments. +- **Argument[any-named]** selects any keyword argument. +- **Argument[hash-splat]** selects a special argument representing all keyword arguments passed in the method call. +- **Parameter[**\ `number`\ **]** selects the argument at the given index. +- **Parameter[**\ `string`:\ **]** selects the keyword argument with the given name. +- **Parameter[self]** selects the **self** parameter of a method. +- **Parameter[block]** selects the block parameter. +- **Parameter[any]** selects any parameter, except self or block parameters. +- **Parameter[any-named]** selects any keyword parameter. +- **Parameter[hash-splat]** selects the hash splat parameter, often written as **\*\*kwargs**. +- **ReturnValue** selects the return value of a call. +- **Method[**\ `name`\ **]** selects a call to the method with the given name. +- **Element[any]** selects any element of an array or hash. +- **Element[**\ `number`\ **]** selects an array element at the given index. +- **Element[**\ `string`\ **]** selects a hash element at the given key. +- **Field[@**\ `string`\ **]** selects an instance variable with the given name. +- **Fuzzy** selects all values that are derived from the current value through a combination of the other operations described in this list. + For example, this can be used to find all values that appear to originate from a particular class. This can be useful for finding method calls + from a known class, but where the receiver type is not known or is difficult to model. + +Additional notes about the syntax of operands: + +- Multiple operands may be given to a single component, as a shorthand for the union of the operands. For example, **Method[foo,bar]** matches the union of **Method[foo]** and **Method[bar]**. +- Numeric operands to **Argument**, **Parameter**, and **Element** may be given as a lower bound. For example, **Argument[1..]** matches all arguments except 0. + +Kinds +----- + +Source kinds +~~~~~~~~~~~~ + +- **remote**: A generic source of remote flow. Most taint-tracking queries will use such a source. Currently this is the only supported source kind. + +Sink kinds +~~~~~~~~~~ + +Unlike sources, sinks tend to be highly query-specific, rarely affecting more than one or two queries. +Not every query supports customizable sinks. If the following sinks are not suitable for your use case, you should add a new query. + +- **code-injection**: A sink that can be used to inject code, such as in calls to **eval**. +- **command-injection**: A sink that can be used to inject shell commands, such as in calls to **Process.spawn**. +- **path-injection**: A sink that can be used for path injection in a file system access, such as in calls to **File.open**. +- **sql-injection**: A sink that can be used for SQL injection, such as in an ActiveRecord **where** call. +- **url-redirection**: A sink that can be used to redirect the user to a malicious URL. +- **log-injection**: A sink that can be used for log injection, such as in a **Rails.logger** call. + +Summary kinds +~~~~~~~~~~~~~ + +- **taint**: A summary that propagates taint. This means the output is not necessarily equal to the input, but it was derived from the input in an unrestrictive way. An attacker who controls the input will have significant control over the output as well. +- **value**: A summary that preserves the value of the input or creates a copy of the input such that all of its object properties are preserved. diff --git a/docs/codeql/codeql-language-guides/using-the-guards-library-in-cpp.rst b/docs/codeql/codeql-language-guides/using-the-guards-library-in-cpp.rst index 792cbcd4703..1900f1b8e05 100644 --- a/docs/codeql/codeql-language-guides/using-the-guards-library-in-cpp.rst +++ b/docs/codeql/codeql-language-guides/using-the-guards-library-in-cpp.rst @@ -8,7 +8,7 @@ You can use the CodeQL guards library to identify conditional expressions that c About the guards library ------------------------ -The guards library (defined in ``semmle.code.cpp.controlflow.Guards``) provides a class `GuardCondition `__ representing Boolean values that are used to make control flow decisions. +The guards library (defined in ``semmle.code.cpp.controlflow.Guards``) provides a class `GuardCondition `__ representing Boolean values that are used to make control flow decisions. A ``GuardCondition`` is considered to guard a basic block if the block can only be reached if the ``GuardCondition`` is evaluated a certain way. For instance, in the following code, ``x < 10`` is a ``GuardCondition``, and it guards all the code before the return statement. .. code-block:: cpp diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.12.0.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.12.0.rst index b0888bd8bea..a9092f71f18 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.12.0.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.12.0.rst @@ -53,8 +53,7 @@ New Features |link-code-paths-and-code-paths-ignore-configuration-1|_. * In the VS Code extension, recursive calls will be marked with inlay hints. These can be disabled with the global inlay hints setting - (:code:`editor.inlayHints.enabled`). If you just want to disable them for - codeql the settings can be scoped to just codeql files (language id is :code:`ql`). + (:code:`editor.inlayHints.enabled`). If you just want to disable them for codeql the settings can be scoped to just codeql files (language id is :code:`ql`). See `Language Specific Editor Settings `__ in the VS Code documentation for more information. * The CLI now gives a more helpful error message when asked to run queries on a database that has not been finalized. diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.12.6.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.12.6.rst index 8b7feb9e683..aa61cc37f8b 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.12.6.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.12.6.rst @@ -38,12 +38,11 @@ New Features Known Issues ~~~~~~~~~~~~ -* We recommend that customers using the CodeQL CLI in a third party CI system do not upgrade to this release, due to an issue with :code:`codeql github upload-results`. Instead, please use CodeQL 2.12.5, or, when available, CodeQL 2.12.7 or 2.13.1. +* We recommend that customers using the CodeQL CLI in a third party CI system do not upgrade to this release, due to an issue with :code:`codeql github upload-results`. Instead, please use CodeQL 2.12.5, or, when available, CodeQL 2.12.7 or 2.13.1. This issue occurs when uploading certain kinds of diagnostic information and causes the subcommand to fail with "A fatal error occurred: Invalid SARIF.", reporting an :code:`InvalidDefinitionException`. - Customers who wish to use CodeQL 2.12.6 or 2.13.0 can - work around the problem by passing :code:`--no-sarif-include-diagnostics` to any invocations of :code:`codeql database analyze` or :code:`codeql database interpret-results`. + Customers who wish to use CodeQL 2.12.6 or 2.13.0 can work around the problem by passing :code:`--no-sarif-include-diagnostics` to any invocations of :code:`codeql database analyze` or :code:`codeql database interpret-results`. Query Packs ----------- diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.13.0.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.13.0.rst index 032b7a71014..748e2ff3b64 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.13.0.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.13.0.rst @@ -73,7 +73,7 @@ New Features Known Issues ~~~~~~~~~~~~ -* We recommend that customers using the CodeQL CLI in a third party CI system do not upgrade to this release, due to an issue with :code:`codeql github upload-results`. Instead, please use CodeQL 2.12.5, or, when available, CodeQL 2.12.7 or 2.13.1. For more information, see the +* We recommend that customers using the CodeQL CLI in a third party CI system do not upgrade to this release, due to an issue with :code:`codeql github upload-results`. Instead, please use CodeQL 2.12.5, or, when available, CodeQL 2.12.7 or 2.13.1. For more information, see the "Known issues" section for CodeQL 2.12.6. Query Packs diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.13.3.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.13.3.rst index b82d2dd5a5a..d51911d3d69 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.13.3.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.13.3.rst @@ -26,8 +26,7 @@ Bug Fixes * Fixed a bug that could have caused the compiler to incorrectly infer that a class matched a type signature. The bug only affected classes with overriding member predicates that had stronger binding sets than their root definitions. -* Fixed a bug where a query could not be run from VS Code when there were packs nested within sibling directories - of the query. +* Fixed a bug where a query could not be run from VS Code when there were packs nested within sibling directories of the query. New Features ~~~~~~~~~~~~ diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.16.1.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.16.1.rst index e9f1dd20f34..7a1e6b6230b 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.16.1.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.16.1.rst @@ -171,7 +171,7 @@ Python Ruby """" -* Deleted many deprecated predicates and classes with uppercase :code:`HTTP`, :code:`CSRF`, :code:`,` etc. in their names. Use the PascalCased versions instead. +* Deleted many deprecated predicates and classes with uppercase :code:`HTTP`, :code:`CSRF` etc. in their names. Use the PascalCased versions instead. * Deleted the deprecated :code:`getAUse` and :code:`getARhs` predicates from :code:`API::Node`, use :code:`getASource` and :code:`getASink` instead. * Deleted the deprecated :code:`disablesCertificateValidation` predicate from the :code:`Http` module. * Deleted the deprecated :code:`ParamsCall`, :code:`CookiesCall`, and :code:`ActionControllerControllerClass` classes from :code:`ActionController.qll`, use the simarly named classes from :code:`codeql.ruby.frameworks.Rails::Rails` instead. diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.16.3.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.16.3.rst index af699a301c4..af7c4ce84b0 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.16.3.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.16.3.rst @@ -27,14 +27,15 @@ Bug Fixes New Features ~~~~~~~~~~~~ -* A new extractor option has been added to the Python extractor: :code:`python_executable_name`. - You can use this option to override the default process the extractor uses to find and select a Python executable. - Pass one of :code:`--extractor-option python_executable_name=py` or :code:`--extractor-option python_executable_name=python` or :code:`--extractor-option python_executable_name=python3` to commands that run the extractor, for example: :code:`codeql database create`. +* A new extractor option has been added to the Python extractor: + :code:`python_executable_name`. You can use this option to override the default process the extractor uses to find and select a Python executable. Pass one of + :code:`--extractor-option python_executable_name=py` or :code:`--extractor-option python_executable_name=python` or :code:`--extractor-option python_executable_name=python3` to commands that run the extractor, for example: :code:`codeql database create`. - On Windows machines, the Python extractor will expect to find :code:`py.exe` on the system :code:`PATH` by default. - If the Python executable has a different name, you can set the new extractor option to override this value and look for :code:`python.exe` or :code:`python3.exe`. + On Windows machines, the Python extractor will expect to find :code:`py.exe` on the system :code:`PATH` by default. If the Python executable has a different name, you can set the new extractor option to override this value and look for + :code:`python.exe` or :code:`python3.exe`. - For more information about using the extractor option with the CodeQL CLI, see `Extractor options `__. + For more information about using the extractor option with the CodeQL CLI, see + \ `Extractor options `__. Security Updates ~~~~~~~~~~~~~~~~ diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.16.4.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.16.4.rst new file mode 100644 index 00000000000..dccf2ce4796 --- /dev/null +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.16.4.rst @@ -0,0 +1,156 @@ +.. _codeql-cli-2.16.4: + +========================== +CodeQL 2.16.4 (2024-03-11) +========================== + +.. contents:: Contents + :depth: 2 + :local: + :backlinks: none + +This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. + +Security Coverage +----------------- + +CodeQL 2.16.4 runs a total of 409 security queries when configured with the Default suite (covering 160 CWE). The Extended suite enables an additional 132 queries (covering 34 more CWE). 2 security queries have been added with this release. + +CodeQL CLI +---------- + +Potentially Breaking Changes +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +* A number of internal command line options (:code:`--builtin_functions_file`, :code:`--clang_builtin_functions`, + :code:`--disable-objc-default-synthesize-properties`, :code:`--list_builtin_functions`, :code:`--memory-limit-bytes`, + :code:`--mimic_config`, and :code:`--objc`) has been removed from the C/C++ extractor. It has never been possible to pass these options through the CLI itself, but some customers with advanced setups may have been passing them through internal undocumented interfaces. All of the removed options were already no-ops, and will now generate errors. + + The :code:`--verbosity` command line option has also been removed. The option was an alias for + :code:`--codeql-verbosity`, which should be used instead. + +Bug Fixes +~~~~~~~~~ + +* When parsing user-authored YAML files such as :code:`codeql-pack.yml`, + :code:`qlpack.yml`, :code:`codeql-workspace.yml`, and any YAML file defining a data extension, unquoted string values starting with a :code:`*` character are now correctly interpreted as YAML aliases. Previously, they were interpreted as strings, but with the first character skipped. + + If you see a parse error similar to :code:`while scanning an alias... unexpected` :code:`character found *(42)`,it likely means that you need to add quotes around the indicated string value. The most common cause is unquoted glob patterns that start with :code:`*`, such as :code:`include: **/*.yml`, which will need to be quoted as :code:`include: "**/*.yml"`. + +Improvements +~~~~~~~~~~~~ + +* The frontend of the C/C++ extractor has been updated, improving the extractor's reliability and increasing its ability to extract source code. + +Query Packs +----------- + +Minor Analysis Improvements +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +C/C++ +""""" + +* The "non-constant format string" query (:code:`cpp/non-constant-format`) has been converted to a :code:`path-problem` query. +* The new C/C++ dataflow and taint-tracking libraries (:code:`semmle.code.cpp.dataflow.new.DataFlow` and :code:`semmle.code.cpp.dataflow.new.TaintTracking`) now implicitly assume that dataflow and taint modelled via :code:`DataFlowFunction` and :code:`TaintFunction` always fully overwrite their buffers and thus act as flow barriers. As a result, many dataflow and taint-tracking queries now produce fewer false positives. To remove this assumption and go back to the previous behavior for a given model, one can override the new :code:`isPartialWrite` predicate. + +C# +"" + +* Most data flow queries that track flow from *remote* flow sources now use the current *threat model* configuration instead. This doesn't lead to any changes in the produced alerts (as the default configuration is *remote* flow sources) unless the threat model configuration is changed. The changed queries are :code:`cs/code-injection`, :code:`cs/command-line-injection`, :code:`cs/user-controlled-bypass`, :code:`cs/count-untrusted-data-external-api`, :code:`cs/untrusted-data-to-external-api`, :code:`cs/ldap-injection`, :code:`cs/log-forging`, :code:`cs/xml/missing-validation`, :code:`cs/redos`, :code:`cs/regex-injection`, :code:`cs/resource-injection`, :code:`cs/sql-injection`, :code:`cs/path-injection`, :code:`cs/unsafe-deserialization-untrusted-input`, :code:`cs/web/unvalidated-url-redirection`, :code:`cs/xml/insecure-dtd-handling`, :code:`cs/xml/xpath-injection`, :code:`cs/web/xss`, and :code:`cs/uncontrolled-format-string`. + +Java +"""" + +* To reduce the number of false positives in the query "Insertion of sensitive information into log files" (:code:`java/sensitive-log`), variables with names that contain "null" (case-insensitively) are no longer considered sources of sensitive information. + +Ruby +"""" + +* Calls to :code:`Object#method`, :code:`Object#public_method` and :code:`Object#singleton_method` with untrusted data are now recognised as sinks for code injection. +* Added additional request sources for Ruby on Rails. + +New Queries +~~~~~~~~~~~ + +Java +"""" + +* Added a new query :code:`java/android/insecure-local-key-gen` for finding instances of keys generated for biometric authentication in an insecure way. + +Python +"""""" + +* The query :code:`py/nosql-injection` for finding NoSQL injection vulnerabilities is now part of the default security suite. + +Language Libraries +------------------ + +Bug Fixes +~~~~~~~~~ + +Golang +"""""" + +* Fixed dataflow out of a :code:`map` using a :code:`range` statement. + +Java +"""" + +* Fixed the Java autobuilder overriding the version of Maven used by a project when the Maven wrapper :code:`mvnw` is in use and the :code:`maven-wrapper.jar` file is not present in the repository. +* Some flow steps related to :code:`android.text.Editable.toString` that were accidentally disabled have been re-enabled. + +Swift +""""" + +* Fixed an issue where :code:`TypeDecl.getFullName` would get stuck in an loop and fail when minor database inconsistencies are present. + +Major Analysis Improvements +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +C# +"" + +* Improved support for flow through captured variables that properly adheres to inter-procedural control flow. +* We no longer make use of CodeQL database stats, which may affect join-orders in custom queries. It is therefore recommended to test performance of custom queries after upgrading to this version. + +Golang +"""""" + +* We have significantly improved the Go autobuilder to understand a greater range of project layouts, which allows Go source files to be analysed that could previously not be processed. +* Go 1.22 has been included in the range of supported Go versions. + +Minor Analysis Improvements +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +C/C++ +""""" + +* Added destructors for named objects to the intermediate representation. + +C# +"" + +* C# 12: Add QL library support (:code:`ExperimentalAttribute`) for the experimental attribute. +* C# 12: Add extractor and QL library support for :code:`ref readonly` parameters. +* C#: The table :code:`expr_compiler_generated` has been deleted and its content has been added to :code:`compiler_generated`. +* Data flow via get only properties like :code:`public object Obj { get; }` is now captured by the data flow library. + +Java +"""" + +* Java expressions with erroneous types (e.g. the result of a call whose callee couldn't be resolved during extraction) are now given a CodeQL :code:`ErrorType` more often. + +Python +"""""" + +* Fixed missing flow for dictionary updates (:code:`d[] = ...`) when :code:`` is a string constant not used in dictionary literals or as name of keyword-argument. +* Fixed flow for iterable unpacking (:code:`a,b = my_tuple`) when it occurs on top-level (module) scope. + +Ruby +"""" + +* Calls to :code:`I18n.translate` as well as Rails helper translate methods now propagate taint from their keyword arguments. The Rails translate methods are also recognized as XSS sanitizers when using keys marked as html safe. +* Calls to :code:`Arel::Nodes::SqlLiteral.new` are now modeled as instances of the :code:`SqlConstruction` concept, as well as propagating taint from their argument. +* Additional arguments beyond the first of calls to the :code:`ActiveRecord` methods :code:`select`, :code:`reselect`, :code:`order`, :code:`reorder`, :code:`joins`, :code:`group`, and :code:`pluck` are now recognized as sql injection sinks. +* Calls to several methods of :code:`ActiveRecord::Connection`, such as :code:`ActiveRecord::Connection#exec_query`, are now recognized as SQL executions, including those via subclasses. diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.16.5.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.16.5.rst new file mode 100644 index 00000000000..cb602e126d1 --- /dev/null +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.16.5.rst @@ -0,0 +1,25 @@ +.. _codeql-cli-2.16.5: + +========================== +CodeQL 2.16.5 (2024-03-21) +========================== + +.. contents:: Contents + :depth: 2 + :local: + :backlinks: none + +This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. + +Security Coverage +----------------- + +CodeQL 2.16.5 runs a total of 409 security queries when configured with the Default suite (covering 160 CWE). The Extended suite enables an additional 132 queries (covering 34 more CWE). + +CodeQL CLI +---------- + +New Features +~~~~~~~~~~~~ + +* Beta support has been added for analyzing Java codebases without needing a working build. To enable this, pass the :code:`--build-mode none` option to :code:`codeql database create`. diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.16.6.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.16.6.rst new file mode 100644 index 00000000000..dba880ceaae --- /dev/null +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.16.6.rst @@ -0,0 +1,25 @@ +.. _codeql-cli-2.16.6: + +========================== +CodeQL 2.16.6 (2024-03-26) +========================== + +.. contents:: Contents + :depth: 2 + :local: + :backlinks: none + +This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. + +Security Coverage +----------------- + +CodeQL 2.16.6 runs a total of 409 security queries when configured with the Default suite (covering 160 CWE). The Extended suite enables an additional 132 queries (covering 34 more CWE). + +CodeQL CLI +---------- + +Bug Fixes +~~~~~~~~~ + +* Fixes a bug where extractor logs would be output at a lower than expected verbosity level when using the :code:`codeql database create` command. diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.17.0.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.17.0.rst new file mode 100644 index 00000000000..59b331fc154 --- /dev/null +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.17.0.rst @@ -0,0 +1,220 @@ +.. _codeql-cli-2.17.0: + +========================== +CodeQL 2.17.0 (2024-04-04) +========================== + +.. contents:: Contents + :depth: 2 + :local: + :backlinks: none + +This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. + +Security Coverage +----------------- + +CodeQL 2.17.0 runs a total of 410 security queries when configured with the Default suite (covering 160 CWE). The Extended suite enables an additional 130 queries (covering 34 more CWE). + +CodeQL CLI +---------- + +Deprecations +~~~~~~~~~~~~ + +* The :code:`--[no-]analysis-summary-v2` and :code:`--[no-]new-analysis-summary` options that were used to enable (or disable) improved summary information printed at the end of a :code:`codeql database analyze` invocation are no longer supported. + Improved summary information is now enabled for all invocations. +* Support for overwriting default CodeQL SARIF run properties using the + :code:`--sarif-run-property` command line option has been removed. This removes the ability to overwrite the :code:`semmle.formatSpecifier`, :code:`metricResults`, and + :code:`codeqlConfigSummary` properties in the SARIF run file. + +Improvements +~~~~~~~~~~~~ + +* TRAP import (a part of :code:`codeql database create` and :code:`codeql database finalize`) + now performs better in low-memory situations. (Put another way, it now needs less RAM to achieve the same performance as before.) + +* The worst-case performance of transitive closure computation (using the :code:`+` or :code:`*` postfix operators or the :code:`fastTC` higher-order primitive in QL) has been greatly improved. + +Miscellaneous +~~~~~~~~~~~~~ + +* The build of Eclipse Temurin OpenJDK that is used to run the CodeQL CLI has been updated to version 21.0.2. + +Query Packs +----------- + +Major Analysis Improvements +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +C# +"" + +* The :code:`Stored` variants of some queries (:code:`cs/stored-command-line-injection`, :code:`cs/web/stored-xss`, :code:`cs/stored-ldap-injection`, :code:`cs/xml/stored-xpath-injection`, :code:`cs/second-order-sql-injection`) have been removed. If you were using these queries, their results can be restored by enabling the :code:`file` and :code:`database` threat models in your threat model configuration. + +Java +"""" + +* The :code:`java/missing-case-in-switch` query now gives only a single alert for each switch statement, giving some examples of the missing cases as well as a count of how many are missing. + +Minor Analysis Improvements +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +C/C++ +""""" + +* The "Missing return-value check for a 'scanf'-like function" query (:code:`cpp/missing-check-scanf`) has been converted to a :code:`path-problem` query. +* The "Potentially uninitialized local variable" query (:code:`cpp/uninitialized-local`) has been converted to a :code:`path-problem` query. +* Added models for :code:`GLib` allocation and deallocation functions. + +C# +"" + +* The alert message of :code:`cs/wrong-compareto-signature` has been changed to remove unnecessary element references. +* Data flow queries that track flow from *local* flow sources now use the current *threat model* configuration instead. This may lead to changes in the produced alerts if the threat model configuration only uses *remote* flow sources. The changed queries are :code:`cs/code-injection`, :code:`cs/resource-injection`, :code:`cs/sql-injection`, and :code:`cs/uncontrolled-format-string`. + +Golang +"""""" + +* The query :code:`go/hardcoded-credentials` no longer discards string literals based on "weak password" heuristics. +* The query :code:`go/sql-injection` now recognizes more sinks in the package :code:`github.com/Masterminds/squirrel`. + +Java +"""" + +* Variables named :code:`tokenImage` are no longer sources for the :code:`java/sensitive-log` query. This is because this variable name is used in parsing code generated by JavaCC, so it causes a large number of false positive alerts. +* Added sanitizers for relative URLs, :code:`List.contains()`, and checking the host of a URI to the :code:`java/ssrf` and :code:`java/unvalidated-url-redirection` queries. + +JavaScript/TypeScript +""""""""""""""""""""" + +* The call graph has been improved, leading to more alerts for data flow based queries. + +New Queries +~~~~~~~~~~~ + +C/C++ +""""" + +* Added a new query, :code:`cpp/type-confusion`, to detect casts to invalid types. + +Golang +"""""" + +* The query "Slice memory allocation with excessive size value" (:code:`go/uncontrolled-allocation-size`) has been promoted from experimental to the main query pack. Its results will now appear by default. This query was originally `submitted as an experimental query by @Malayke `__. + +Java +"""" + +* The query :code:`java/unsafe-url-forward-dispatch-load` has been promoted from experimental to the main query pack as :code:`java/unvalidated-url-forward`. Its results will now appear by default. This query was originally submitted as an experimental query `by @haby0 `__ and `by @luchua-bc `__. + +Query Metadata Changes +~~~~~~~~~~~~~~~~~~~~~~ + +C/C++ +""""" + +* :code:`@precision medium` metadata was added to the :code:`cpp/boost/tls-settings-misconfiguration` and :code:`cpp/boost/use-of-deprecated-hardcoded-security-protocol` queries, and these queries are now included in the security-extended suite. The :code:`@name` metadata of these queries were also updated. + +JavaScript/TypeScript +""""""""""""""""""""" + +* The :code:`@precision` of the :code:`js/unsafe-external-link` has been reduced to :code:`low` to reflect the fact that modern browsers do not expose the opening window for such links. This mitigates the potential security risk of having a link with :code:`target="_blank"`. + +Language Libraries +------------------ + +Breaking Changes +~~~~~~~~~~~~~~~~ + +C# +"" + +* The CIL extractor has been deleted and the corresponding extractor option :code:`cil` has been removed. It is no longer possible to do CIL extraction. +* The QL library C# classes no longer extend their corresponding :code:`DotNet` classes. Furthermore, CIL related data flow functionality has been deleted and all :code:`DotNet` and :code:`CIL` related classes have been deprecated. This effectively means that it no longer has any effect to enable CIL extraction. + +Java +"""" + +* The Java extractor no longer supports the :code:`ODASA_SNAPSHOT` legacy environment variable. + +Major Analysis Improvements +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +JavaScript/TypeScript +""""""""""""""""""""" + +* Added support for TypeScript 5.4. + +Swift +""""" + +* Upgraded to Swift 5.10 +* New AST node is extracted: :code:`ThenStmt` + +Minor Analysis Improvements +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +C/C++ +""""" + +* Added destructors for temporary objects with extended lifetimes to the intermediate representation. + +C# +"" + +* Added new source models for the :code:`Dapper` package. These models can be enabled by enabling the :code:`database` threat model. +* Additional models have been added for :code:`System.IO`. These are primarily source models with the :code:`file` threat model, and summaries related to reading from a file or stream. +* Support for C# 12 / .NET8. +* Added the :code:`windows-registry` source kind and threat model to represent values which come from the registry on Windows. +* The models for :code:`System.Net.Http.HttpRequestMessage` have been modified to better model the flow of tainted URIs. +* The .NET standard libraries APIs for accessing command line arguments and environment variables have been modeled using the :code:`commandargs` and :code:`environment` threat models. +* The :code:`cs/assembly-path-injection` query has been modified so that it's sources rely on :code:`ThreatModelFlowSource`. In order to restore results from command line arguments, you should enable the :code:`commandargs` threat model. +* The models for :code:`System.IO.TextReader` have been modified to better model the flow of tainted text from a :code:`TextReader`. + +Golang +"""""" + +* The :code:`CODEQL_EXTRACTOR_GO_FAST_PACKAGE_INFO` option, which speeds up retrieval of dependency information, is now on by default. This was originally an external contribution by @xhd2015. +* Added dataflow sources for the package :code:`gopkg.in/macaron.v1`. + +Java +"""" + +* Increased the precision of some dataflow models of the class :code:`java.net.URL` by distinguishing the parts of a URL. +* The Java extractor and QL libraries now support Java 22, including support for anonymous variables, lambda parameters and patterns. +* Pattern cases with multiple patterns and that fall through to or from other pattern cases are now supported. The :code:`PatternCase` class gains the new :code:`getPatternAtIndex` and :code:`getAPattern` predicates, and deprecates :code:`getPattern`. +* Added a :code:`path-injection` sink for the :code:`open` methods of the :code:`android.os.ParcelFileDescriptor` class. + +Ruby +"""" + +* Data flow is now tracked through :code:`ActiveRecord` scopes. +* Modeled instances of :code:`ActionDispatch::Http::UploadedFile` that can be obtained from element reads of :code:`ActionController::Parameters`, with calls to :code:`original_filename`, :code:`content_type`, and :code:`read` now propagating taint from their receiver. +* The second argument, :code:`subquery_name`, of the :code:`ActiveRecord::QueryMethods::from` method, is now recognized as an sql injection sink. +* Calls to :code:`Typhoeus::Request.new` are now considered as instances of the :code:`Http::Client::Request` concept, with the response body being treated as a remote flow source. +* New command injection sinks have been added, including :code:`Process.spawn`, :code:`Process.exec`, :code:`Terrapin::CommandLine` and the :code:`open4` gem. + +New Features +~~~~~~~~~~~~ + +C/C++ +""""" + +* Added a :code:`TaintInheritingContent` class that can be extended to model taint flowing from a qualifier to a field. +* Added a predicate :code:`GuardCondition.comparesEq/4` to query whether an expression is compared to a constant. +* Added a predicate :code:`GuardCondition.ensuresEq/4` to query whether a basic block is guarded by an expression being equal to a constant. +* Added a predicate :code:`GuardCondition.comparesLt/4` to query whether an expression is compared to a constant. +* Added a predicate :code:`GuardCondition.ensuresLt/4` to query whether a basic block is guarded by an expression being less than a constant. +* Added a predicate :code:`GuardCondition.valueControls` to query whether a basic block is guarded by a particular :code:`case` of a :code:`switch` statement. + +Shared Libraries +---------------- + +Minor Analysis Improvements +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Dataflow Analysis +""""""""""""""""" + +* Path explanations now include flow that goes through callbacks passed into library functions. For example, if :code:`map` is a library function, then in :code:`result = map(xs, x => x + 1)` we will now include the step from :code:`x` to :code:`x + 1` in the path explanation, instead of going directly from :code:`xs` to :code:`result`. Note that this change does not affect actual query results, but only how path explanations are computed. diff --git a/docs/codeql/codeql-overview/codeql-changelog/index.rst b/docs/codeql/codeql-overview/codeql-changelog/index.rst index a04f37ad9e4..222e133ed19 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/index.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/index.rst @@ -11,6 +11,10 @@ A list of queries for each suite and language `is available here = 0 { + diagnostics.EmitInvalidToolchainVersion(goModFilePath, modFile.Go.Version) + } } return results @@ -209,7 +221,7 @@ func LoadGoModules(goModFilePaths []string) []*GoModule { // Given a path to a `go.work` file, this function attempts to parse the `go.work` file. If unsuccessful, // we attempt to discover `go.mod` files within subdirectories of the directory containing the `go.work` // file ourselves. -func discoverWorkspace(workFilePath string) GoWorkspace { +func discoverWorkspace(emitDiagnostics bool, workFilePath string) GoWorkspace { log.Printf("Loading %s...\n", workFilePath) baseDir := filepath.Dir(workFilePath) workFileSrc, err := os.ReadFile(workFilePath) @@ -223,7 +235,7 @@ func discoverWorkspace(workFilePath string) GoWorkspace { return GoWorkspace{ BaseDir: baseDir, - Modules: LoadGoModules(goModFilePaths), + Modules: LoadGoModules(emitDiagnostics, goModFilePaths), DepMode: GoGetWithModules, ModMode: getModMode(GoGetWithModules, baseDir), } @@ -240,7 +252,7 @@ func discoverWorkspace(workFilePath string) GoWorkspace { return GoWorkspace{ BaseDir: baseDir, - Modules: LoadGoModules(goModFilePaths), + Modules: LoadGoModules(emitDiagnostics, goModFilePaths), DepMode: GoGetWithModules, ModMode: getModMode(GoGetWithModules, baseDir), } @@ -263,7 +275,7 @@ func discoverWorkspace(workFilePath string) GoWorkspace { return GoWorkspace{ BaseDir: baseDir, WorkspaceFile: workFile, - Modules: LoadGoModules(goModFilePaths), + Modules: LoadGoModules(emitDiagnostics, goModFilePaths), DepMode: GoGetWithModules, ModMode: ModReadonly, // Workspaces only support "readonly" } @@ -286,7 +298,7 @@ func discoverWorkspaces(emitDiagnostics bool) []GoWorkspace { for i, goModFile := range goModFiles { results[i] = GoWorkspace{ BaseDir: filepath.Dir(goModFile), - Modules: LoadGoModules([]string{goModFile}), + Modules: LoadGoModules(emitDiagnostics, []string{goModFile}), DepMode: GoGetWithModules, ModMode: getModMode(GoGetWithModules, filepath.Dir(goModFile)), } @@ -303,7 +315,7 @@ func discoverWorkspaces(emitDiagnostics bool) []GoWorkspace { results := make([]GoWorkspace, len(goWorkFiles)) for i, workFilePath := range goWorkFiles { - results[i] = discoverWorkspace(workFilePath) + results[i] = discoverWorkspace(emitDiagnostics, workFilePath) } // Add all stray `go.mod` files (i.e. those not referenced by `go.work` files) @@ -335,7 +347,7 @@ func discoverWorkspaces(emitDiagnostics bool) []GoWorkspace { log.Printf("Module %s is not referenced by any go.work file; adding it separately.\n", goModFile) results = append(results, GoWorkspace{ BaseDir: filepath.Dir(goModFile), - Modules: LoadGoModules([]string{goModFile}), + Modules: LoadGoModules(emitDiagnostics, []string{goModFile}), DepMode: GoGetWithModules, ModMode: getModMode(GoGetWithModules, filepath.Dir(goModFile)), }) @@ -439,8 +451,9 @@ func getBuildRoots(emitDiagnostics bool) (goWorkspaces []GoWorkspace, totalModul for _, component := range components { path = filepath.Join(path, component) - // Try to initialize a `go.mod` file automatically for the stray source files. - if !slices.Contains(goModDirs, path) { + // Try to initialize a `go.mod` file automatically for the stray source files if + // doing so would not place it in a parent directory of an existing `go.mod` file. + if !startsWithAnyOf(path, goModDirs) { goWorkspaces = append(goWorkspaces, GoWorkspace{ BaseDir: path, DepMode: GoGetNoModules, @@ -477,6 +490,16 @@ func getBuildRoots(emitDiagnostics bool) (goWorkspaces []GoWorkspace, totalModul return } +// Determines whether `str` starts with any of `prefixes`. +func startsWithAnyOf(str string, prefixes []string) bool { + for _, prefix := range prefixes { + if relPath, err := filepath.Rel(str, prefix); err == nil && !strings.HasPrefix(relPath, "..") { + return true + } + } + return false +} + // Finds Go workspaces in the current working directory. func GetWorkspaceInfo(emitDiagnostics bool) []GoWorkspace { bazelPaths := slices.Concat( diff --git a/go/extractor/project/project_test.go b/go/extractor/project/project_test.go new file mode 100644 index 00000000000..f2de420773f --- /dev/null +++ b/go/extractor/project/project_test.go @@ -0,0 +1,27 @@ +package project + +import ( + "path/filepath" + "testing" +) + +func testStartsWithAnyOf(t *testing.T, path string, prefix string, expectation bool) { + result := startsWithAnyOf(path, []string{prefix}) + if result != expectation { + t.Errorf("Expected startsWithAnyOf(%s, %s) to be %t, but it is %t.", path, prefix, expectation, result) + } +} + +func TestStartsWithAnyOf(t *testing.T) { + testStartsWithAnyOf(t, ".", ".", true) + testStartsWithAnyOf(t, ".", "dir", true) + testStartsWithAnyOf(t, ".", filepath.Join("foo", "bar"), true) + testStartsWithAnyOf(t, "dir", "dir", true) + testStartsWithAnyOf(t, "foo", filepath.Join("foo", "bar"), true) + testStartsWithAnyOf(t, filepath.Join("foo", "bar"), filepath.Join("foo", "bar"), true) + testStartsWithAnyOf(t, filepath.Join("foo", "bar"), filepath.Join("foo", "bar", "baz"), true) + + testStartsWithAnyOf(t, filepath.Join("foo", "bar"), "foo", false) + testStartsWithAnyOf(t, filepath.Join("foo", "bar"), "bar", false) + testStartsWithAnyOf(t, filepath.Join("foo", "bar"), filepath.Join("foo", "baz"), false) +} diff --git a/go/extractor/toolchain/toolchain.go b/go/extractor/toolchain/toolchain.go index 38abfd43874..40ab402e11d 100644 --- a/go/extractor/toolchain/toolchain.go +++ b/go/extractor/toolchain/toolchain.go @@ -5,8 +5,10 @@ import ( "log" "os" "os/exec" + "path/filepath" "strings" + "github.com/github/codeql-go/extractor/util" "golang.org/x/mod/semver" ) @@ -16,7 +18,15 @@ func IsInstalled() bool { return err == nil } +// The default Go version that is available on a system and a set of all versions +// that we know are installed on the system. var goVersion = "" +var goVersions = map[string]struct{}{} + +// Adds an entry to the set of installed Go versions for the normalised `version` number. +func addGoVersion(version string) { + goVersions[semver.Canonical("v"+version)] = struct{}{} +} // Returns the current Go version as returned by 'go version', e.g. go1.14.4 func GetEnvGoVersion() string { @@ -25,7 +35,7 @@ func GetEnvGoVersion() string { // download the version of Go specified in there. That may either fail or result in us just // being told what's already in 'go.mod'. Setting 'GOTOOLCHAIN' to 'local' will force it // to use the local Go toolchain instead. - cmd := exec.Command("go", "version") + cmd := Version() cmd.Env = append(os.Environ(), "GOTOOLCHAIN=local") out, err := cmd.CombinedOutput() @@ -34,10 +44,59 @@ func GetEnvGoVersion() string { } goVersion = parseGoVersion(string(out)) + addGoVersion(goVersion[2:]) } return goVersion } +// Determines whether, to our knowledge, `version` is available on the current system. +func HasGoVersion(version string) bool { + _, found := goVersions[semver.Canonical("v"+version)] + return found +} + +// Attempts to install the Go toolchain `version`. +func InstallVersion(workingDir string, version string) bool { + // No need to install it if we know that it is already installed. + if HasGoVersion(version) { + return true + } + + // Construct a command to invoke `go version` with `GOTOOLCHAIN=go1.N.0` to give + // Go a valid toolchain version to download the toolchain we need; subsequent commands + // should then work even with an invalid version that's still in `go.mod` + toolchainArg := "GOTOOLCHAIN=go" + semver.Canonical("v" + version)[1:] + versionCmd := Version() + versionCmd.Dir = workingDir + versionCmd.Env = append(os.Environ(), toolchainArg) + versionCmd.Stdout = os.Stdout + versionCmd.Stderr = os.Stderr + + log.Printf( + "Trying to install Go %s using its canonical representation in `%s`.", + version, + workingDir, + ) + + // Run the command. If something goes wrong, report it to the log and signal failure + // to the caller. + if versionErr := versionCmd.Run(); versionErr != nil { + log.Printf( + "Failed to invoke `%s go version` in %s: %s\n", + toolchainArg, + versionCmd.Dir, + versionErr.Error(), + ) + + return false + } + + // Add the version to the set of versions that we know are installed and signal + // success to the caller. + addGoVersion(version) + return true +} + // Returns the current Go version in semver format, e.g. v1.14.4 func GetEnvGoSemVer() string { goVersion := GetEnvGoVersion() @@ -81,7 +140,20 @@ func TidyModule(path string) *exec.Cmd { // Run `go mod init` in the directory given by `path`. func InitModule(path string) *exec.Cmd { - modInit := exec.Command("go", "mod", "init", "codeql/auto-project") + moduleName := "codeql/auto-project" + + if importpath := util.GetImportPath(); importpath != "" { + // This should be something like `github.com/user/repo` + moduleName = importpath + + // If we are not initialising the new module in the root directory of the workspace, + // append the relative path to the module name. + if relPath, err := filepath.Rel(".", path); err != nil && relPath != "." { + moduleName = moduleName + "/" + relPath + } + } + + modInit := exec.Command("go", "mod", "init", moduleName) modInit.Dir = path return modInit } @@ -92,3 +164,9 @@ func VendorModule(path string) *exec.Cmd { modVendor.Dir = path return modVendor } + +// Constructs a command to run `go version`. +func Version() *exec.Cmd { + version := exec.Command("go", "version") + return version +} diff --git a/go/extractor/toolchain/toolchain_test.go b/go/extractor/toolchain/toolchain_test.go index 66d16f97964..e0f70a283e6 100644 --- a/go/extractor/toolchain/toolchain_test.go +++ b/go/extractor/toolchain/toolchain_test.go @@ -14,3 +14,9 @@ func TestParseGoVersion(t *testing.T) { } } } + +func TestHasGoVersion(t *testing.T) { + if HasGoVersion("1.21") { + t.Error("Expected HasGoVersion(\"1.21\") to be false, but got true") + } +} diff --git a/go/extractor/util/util.go b/go/extractor/util/util.go index b5b28089e78..2ae6a2b0cd2 100644 --- a/go/extractor/util/util.go +++ b/go/extractor/util/util.go @@ -6,9 +6,11 @@ import ( "io" "io/fs" "log" + "net/url" "os" "os/exec" "path/filepath" + "regexp" "runtime" "slices" "strings" @@ -350,3 +352,60 @@ func GetParentDirs(paths []string) []string { } return dirs } + +// Returns the import path of the package being built, or "" if it cannot be determined. +func GetImportPath() (importpath string) { + importpath = os.Getenv("LGTM_INDEX_IMPORT_PATH") + if importpath == "" { + repourl := os.Getenv("SEMMLE_REPO_URL") + if repourl == "" { + githubrepo := os.Getenv("GITHUB_REPOSITORY") + if githubrepo == "" { + log.Printf("Unable to determine import path, as neither LGTM_INDEX_IMPORT_PATH nor GITHUB_REPOSITORY is set\n") + return "" + } else { + importpath = "github.com/" + githubrepo + } + } else { + importpath = getImportPathFromRepoURL(repourl) + if importpath == "" { + log.Printf("Failed to determine import path from SEMMLE_REPO_URL '%s'\n", repourl) + return + } + } + } + log.Printf("Import path is '%s'\n", importpath) + return +} + +// Returns the import path of the package being built from `repourl`, or "" if it cannot be +// determined. +func getImportPathFromRepoURL(repourl string) string { + // check for scp-like URL as in "git@github.com:github/codeql-go.git" + shorturl := regexp.MustCompile(`^([^@]+@)?([^:]+):([^/].*?)(\.git)?$`) + m := shorturl.FindStringSubmatch(repourl) + if m != nil { + return m[2] + "/" + m[3] + } + + // otherwise parse as proper URL + u, err := url.Parse(repourl) + if err != nil { + log.Fatalf("Malformed repository URL '%s'\n", repourl) + } + + if u.Scheme == "file" { + // we can't determine import paths from file paths + return "" + } + + if u.Hostname() == "" || u.Path == "" { + return "" + } + + host := u.Hostname() + path := u.Path + // strip off leading slashes and trailing `.git` if present + path = regexp.MustCompile(`^/+|\.git$`).ReplaceAllString(path, "") + return host + "/" + path +} diff --git a/go/extractor/cli/go-autobuilder/go-autobuilder_test.go b/go/extractor/util/util_test.go similarity index 98% rename from go/extractor/cli/go-autobuilder/go-autobuilder_test.go rename to go/extractor/util/util_test.go index f4e8405fe36..45d32bda3e1 100644 --- a/go/extractor/cli/go-autobuilder/go-autobuilder_test.go +++ b/go/extractor/util/util_test.go @@ -1,4 +1,4 @@ -package main +package util import "testing" diff --git a/go/ql/consistency-queries/CHANGELOG.md b/go/ql/consistency-queries/CHANGELOG.md index fba2a870356..83a42fb0551 100644 --- a/go/ql/consistency-queries/CHANGELOG.md +++ b/go/ql/consistency-queries/CHANGELOG.md @@ -1,3 +1,19 @@ +## 0.0.12 + +No user-facing changes. + +## 0.0.11 + +No user-facing changes. + +## 0.0.10 + +No user-facing changes. + +## 0.0.9 + +No user-facing changes. + ## 0.0.8 No user-facing changes. diff --git a/go/ql/consistency-queries/change-notes/released/0.0.10.md b/go/ql/consistency-queries/change-notes/released/0.0.10.md new file mode 100644 index 00000000000..22391080fd4 --- /dev/null +++ b/go/ql/consistency-queries/change-notes/released/0.0.10.md @@ -0,0 +1,3 @@ +## 0.0.10 + +No user-facing changes. diff --git a/go/ql/consistency-queries/change-notes/released/0.0.11.md b/go/ql/consistency-queries/change-notes/released/0.0.11.md new file mode 100644 index 00000000000..19a2a55bd68 --- /dev/null +++ b/go/ql/consistency-queries/change-notes/released/0.0.11.md @@ -0,0 +1,3 @@ +## 0.0.11 + +No user-facing changes. diff --git a/go/ql/consistency-queries/change-notes/released/0.0.12.md b/go/ql/consistency-queries/change-notes/released/0.0.12.md new file mode 100644 index 00000000000..0e206033bc4 --- /dev/null +++ b/go/ql/consistency-queries/change-notes/released/0.0.12.md @@ -0,0 +1,3 @@ +## 0.0.12 + +No user-facing changes. diff --git a/go/ql/consistency-queries/change-notes/released/0.0.9.md b/go/ql/consistency-queries/change-notes/released/0.0.9.md new file mode 100644 index 00000000000..c9e17c6d6cf --- /dev/null +++ b/go/ql/consistency-queries/change-notes/released/0.0.9.md @@ -0,0 +1,3 @@ +## 0.0.9 + +No user-facing changes. diff --git a/go/ql/consistency-queries/codeql-pack.release.yml b/go/ql/consistency-queries/codeql-pack.release.yml index 58fdc6b45de..997fb8da83c 100644 --- a/go/ql/consistency-queries/codeql-pack.release.yml +++ b/go/ql/consistency-queries/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.0.8 +lastReleaseVersion: 0.0.12 diff --git a/go/ql/consistency-queries/qlpack.yml b/go/ql/consistency-queries/qlpack.yml index b574796b995..394af7249ef 100644 --- a/go/ql/consistency-queries/qlpack.yml +++ b/go/ql/consistency-queries/qlpack.yml @@ -1,5 +1,5 @@ name: codeql-go-consistency-queries -version: 0.0.9-dev +version: 0.0.13-dev groups: - go - queries diff --git a/go/ql/integration-tests/all-platforms/go/diagnostics/invalid-toolchain-version/diagnostics.expected b/go/ql/integration-tests/all-platforms/go/diagnostics/invalid-toolchain-version/diagnostics.expected new file mode 100644 index 00000000000..2e5d732e53e --- /dev/null +++ b/go/ql/integration-tests/all-platforms/go/diagnostics/invalid-toolchain-version/diagnostics.expected @@ -0,0 +1,31 @@ +{ + "location": { + "file": "go.mod" + }, + "markdownMessage": "As of Go 1.21, toolchain versions [must use the 1.N.P syntax](https://go.dev/doc/toolchain#version).\n\n`1.21` in `go.mod` does not match this syntax and there is no additional `toolchain` directive, which may cause some `go` commands to fail.", + "severity": "warning", + "source": { + "extractorName": "go", + "id": "go/autobuilder/invalid-go-toolchain-version", + "name": "Invalid Go toolchain version" + }, + "visibility": { + "cliSummaryTable": true, + "statusPage": true, + "telemetry": true + } +} +{ + "markdownMessage": "A single `go.mod` file was found.\n\n`go.mod`", + "severity": "note", + "source": { + "extractorName": "go", + "id": "go/autobuilder/single-root-go-mod-found", + "name": "A single `go.mod` file was found in the root" + }, + "visibility": { + "cliSummaryTable": false, + "statusPage": false, + "telemetry": true + } +} diff --git a/go/ql/integration-tests/all-platforms/go/diagnostics/invalid-toolchain-version/src/go.mod b/go/ql/integration-tests/all-platforms/go/diagnostics/invalid-toolchain-version/src/go.mod new file mode 100644 index 00000000000..bee3365b899 --- /dev/null +++ b/go/ql/integration-tests/all-platforms/go/diagnostics/invalid-toolchain-version/src/go.mod @@ -0,0 +1,3 @@ +go 1.21 + +module example diff --git a/go/ql/integration-tests/all-platforms/go/diagnostics/invalid-toolchain-version/src/main.go b/go/ql/integration-tests/all-platforms/go/diagnostics/invalid-toolchain-version/src/main.go new file mode 100644 index 00000000000..79058077776 --- /dev/null +++ b/go/ql/integration-tests/all-platforms/go/diagnostics/invalid-toolchain-version/src/main.go @@ -0,0 +1,5 @@ +package main + +func main() { + +} diff --git a/go/ql/integration-tests/all-platforms/go/diagnostics/invalid-toolchain-version/test.py b/go/ql/integration-tests/all-platforms/go/diagnostics/invalid-toolchain-version/test.py new file mode 100644 index 00000000000..2824c219d37 --- /dev/null +++ b/go/ql/integration-tests/all-platforms/go/diagnostics/invalid-toolchain-version/test.py @@ -0,0 +1,19 @@ +import os +import subprocess + +from create_database_utils import * +from diagnostics_test_utils import * + +# Set up a GOPATH relative to this test's root directory; +# we set os.environ instead of using extra_env because we +# need it to be set for the call to "go clean -modcache" later +goPath = os.path.join(os.path.abspath(os.getcwd()), ".go") +os.environ['GOPATH'] = goPath +os.environ['LGTM_INDEX_IMPORT_PATH'] = "test" +run_codeql_database_create([], lang="go", source="src") + +check_diagnostics() + +# Clean up the temporary GOPATH to prevent Bazel failures next +# time the tests are run; see https://github.com/golang/go/issues/27161 +subprocess.call(["go", "clean", "-modcache"]) diff --git a/go/ql/integration-tests/all-platforms/go/go-version-bump/diagnostics.expected b/go/ql/integration-tests/all-platforms/go/go-version-bump/diagnostics.expected new file mode 100644 index 00000000000..2e5d732e53e --- /dev/null +++ b/go/ql/integration-tests/all-platforms/go/go-version-bump/diagnostics.expected @@ -0,0 +1,31 @@ +{ + "location": { + "file": "go.mod" + }, + "markdownMessage": "As of Go 1.21, toolchain versions [must use the 1.N.P syntax](https://go.dev/doc/toolchain#version).\n\n`1.21` in `go.mod` does not match this syntax and there is no additional `toolchain` directive, which may cause some `go` commands to fail.", + "severity": "warning", + "source": { + "extractorName": "go", + "id": "go/autobuilder/invalid-go-toolchain-version", + "name": "Invalid Go toolchain version" + }, + "visibility": { + "cliSummaryTable": true, + "statusPage": true, + "telemetry": true + } +} +{ + "markdownMessage": "A single `go.mod` file was found.\n\n`go.mod`", + "severity": "note", + "source": { + "extractorName": "go", + "id": "go/autobuilder/single-root-go-mod-found", + "name": "A single `go.mod` file was found in the root" + }, + "visibility": { + "cliSummaryTable": false, + "statusPage": false, + "telemetry": true + } +} diff --git a/go/ql/integration-tests/all-platforms/go/go-version-bump/src/go.mod b/go/ql/integration-tests/all-platforms/go/go-version-bump/src/go.mod new file mode 100644 index 00000000000..18793f7e295 --- /dev/null +++ b/go/ql/integration-tests/all-platforms/go/go-version-bump/src/go.mod @@ -0,0 +1,3 @@ +go 1.21 + +module test diff --git a/go/ql/integration-tests/all-platforms/go/go-version-bump/src/main.go b/go/ql/integration-tests/all-platforms/go/go-version-bump/src/main.go new file mode 100644 index 00000000000..38dd16da61a --- /dev/null +++ b/go/ql/integration-tests/all-platforms/go/go-version-bump/src/main.go @@ -0,0 +1,3 @@ +package main + +func main() {} diff --git a/go/ql/integration-tests/all-platforms/go/go-version-bump/test.py b/go/ql/integration-tests/all-platforms/go/go-version-bump/test.py new file mode 100644 index 00000000000..43c7d1b38e8 --- /dev/null +++ b/go/ql/integration-tests/all-platforms/go/go-version-bump/test.py @@ -0,0 +1,18 @@ +import os +import subprocess + +from create_database_utils import * +from diagnostics_test_utils import * + +# Set up a GOPATH relative to this test's root directory; +# we set os.environ instead of using extra_env because we +# need it to be set for the call to "go clean -modcache" later +goPath = os.path.join(os.path.abspath(os.getcwd()), ".go") +os.environ['GOPATH'] = goPath +run_codeql_database_create([], lang="go", source="src") + +check_diagnostics() + +# Clean up the temporary GOPATH to prevent Bazel failures next +# time the tests are run; see https://github.com/golang/go/issues/27161 +subprocess.call(["go", "clean", "-modcache"]) diff --git a/go/ql/integration-tests/all-platforms/go/mixed-layout/diagnostics.expected b/go/ql/integration-tests/all-platforms/go/mixed-layout/diagnostics.expected new file mode 100644 index 00000000000..bbbdd515d68 --- /dev/null +++ b/go/ql/integration-tests/all-platforms/go/mixed-layout/diagnostics.expected @@ -0,0 +1,28 @@ +{ + "markdownMessage": "1 `go.work` file was found:\n\n`workspace/go.work`", + "severity": "note", + "source": { + "extractorName": "go", + "id": "go/autobuilder/go-work-found", + "name": "`go.work` file found" + }, + "visibility": { + "cliSummaryTable": false, + "statusPage": false, + "telemetry": true + } +} +{ + "markdownMessage": "Go files were found outside of the Go modules corresponding to these `go.mod` files.\n\n`workspace/subdir/go.mod`, `module/go.mod`", + "severity": "note", + "source": { + "extractorName": "go", + "id": "go/autobuilder/go-files-outside-go-modules", + "name": "Go files were found outside Go modules" + }, + "visibility": { + "cliSummaryTable": false, + "statusPage": false, + "telemetry": true + } +} diff --git a/go/ql/integration-tests/all-platforms/go/mixed-layout/force_sequential_test_execution b/go/ql/integration-tests/all-platforms/go/mixed-layout/force_sequential_test_execution new file mode 100644 index 00000000000..47ca9929099 --- /dev/null +++ b/go/ql/integration-tests/all-platforms/go/mixed-layout/force_sequential_test_execution @@ -0,0 +1,2 @@ +# go get has been observed to sometimes fail when multiple tests try to simultaneously fetch the same package. +goget diff --git a/go/ql/integration-tests/all-platforms/go/mixed-layout/src/module/go.mod b/go/ql/integration-tests/all-platforms/go/mixed-layout/src/module/go.mod new file mode 100644 index 00000000000..0b8f33b9069 --- /dev/null +++ b/go/ql/integration-tests/all-platforms/go/mixed-layout/src/module/go.mod @@ -0,0 +1,5 @@ +go 1.14 + +require golang.org/x/net v0.0.0-20200505041828-1ed23360d12c + +module module diff --git a/go/ql/integration-tests/all-platforms/go/mixed-layout/src/module/go.sum b/go/ql/integration-tests/all-platforms/go/mixed-layout/src/module/go.sum new file mode 100644 index 00000000000..6c5ffa613d0 --- /dev/null +++ b/go/ql/integration-tests/all-platforms/go/mixed-layout/src/module/go.sum @@ -0,0 +1,7 @@ +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/net v0.0.0-20200505041828-1ed23360d12c h1:zJ0mtu4jCalhKg6Oaukv6iIkb+cOvDrajDH9DH46Q4M= +golang.org/x/net v0.0.0-20200505041828-1ed23360d12c/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd h1:xhmwyvizuTgC2qz7ZlMluP20uW+C3Rm0FD/WLDX8884= +golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= diff --git a/go/ql/integration-tests/all-platforms/go/mixed-layout/src/module/test.go b/go/ql/integration-tests/all-platforms/go/mixed-layout/src/module/test.go new file mode 100644 index 00000000000..afc86ac3a12 --- /dev/null +++ b/go/ql/integration-tests/all-platforms/go/mixed-layout/src/module/test.go @@ -0,0 +1,13 @@ +package subdir + +import ( + "fmt" + + "golang.org/x/net/ipv4" +) + +func test() { + + header := ipv4.Header{} + fmt.Print(header.String()) +} diff --git a/go/ql/integration-tests/all-platforms/go/mixed-layout/src/stray-files/test.go b/go/ql/integration-tests/all-platforms/go/mixed-layout/src/stray-files/test.go new file mode 100644 index 00000000000..afc86ac3a12 --- /dev/null +++ b/go/ql/integration-tests/all-platforms/go/mixed-layout/src/stray-files/test.go @@ -0,0 +1,13 @@ +package subdir + +import ( + "fmt" + + "golang.org/x/net/ipv4" +) + +func test() { + + header := ipv4.Header{} + fmt.Print(header.String()) +} diff --git a/go/ql/integration-tests/all-platforms/go/mixed-layout/src/workspace/go.work b/go/ql/integration-tests/all-platforms/go/mixed-layout/src/workspace/go.work new file mode 100644 index 00000000000..e7e866fbe27 --- /dev/null +++ b/go/ql/integration-tests/all-platforms/go/mixed-layout/src/workspace/go.work @@ -0,0 +1,3 @@ +go 1.22.0 + +use ./subdir diff --git a/go/ql/integration-tests/all-platforms/go/mixed-layout/src/workspace/subdir/go.mod b/go/ql/integration-tests/all-platforms/go/mixed-layout/src/workspace/subdir/go.mod new file mode 100644 index 00000000000..40a3b330c38 --- /dev/null +++ b/go/ql/integration-tests/all-platforms/go/mixed-layout/src/workspace/subdir/go.mod @@ -0,0 +1,5 @@ +go 1.22.0 + +require golang.org/x/net v0.0.0-20200505041828-1ed23360d12c + +module subdir diff --git a/go/ql/integration-tests/all-platforms/go/mixed-layout/src/workspace/subdir/go.sum b/go/ql/integration-tests/all-platforms/go/mixed-layout/src/workspace/subdir/go.sum new file mode 100644 index 00000000000..6c5ffa613d0 --- /dev/null +++ b/go/ql/integration-tests/all-platforms/go/mixed-layout/src/workspace/subdir/go.sum @@ -0,0 +1,7 @@ +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/net v0.0.0-20200505041828-1ed23360d12c h1:zJ0mtu4jCalhKg6Oaukv6iIkb+cOvDrajDH9DH46Q4M= +golang.org/x/net v0.0.0-20200505041828-1ed23360d12c/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd h1:xhmwyvizuTgC2qz7ZlMluP20uW+C3Rm0FD/WLDX8884= +golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= diff --git a/go/ql/integration-tests/all-platforms/go/mixed-layout/src/workspace/subdir/test.go b/go/ql/integration-tests/all-platforms/go/mixed-layout/src/workspace/subdir/test.go new file mode 100644 index 00000000000..afc86ac3a12 --- /dev/null +++ b/go/ql/integration-tests/all-platforms/go/mixed-layout/src/workspace/subdir/test.go @@ -0,0 +1,13 @@ +package subdir + +import ( + "fmt" + + "golang.org/x/net/ipv4" +) + +func test() { + + header := ipv4.Header{} + fmt.Print(header.String()) +} diff --git a/go/ql/integration-tests/all-platforms/go/mixed-layout/test.expected b/go/ql/integration-tests/all-platforms/go/mixed-layout/test.expected new file mode 100644 index 00000000000..ddd1888562f --- /dev/null +++ b/go/ql/integration-tests/all-platforms/go/mixed-layout/test.expected @@ -0,0 +1,8 @@ +extractedFiles +| src/module/go.mod:0:0:0:0 | src/module/go.mod | +| src/module/test.go:0:0:0:0 | src/module/test.go | +| src/stray-files/go.mod:0:0:0:0 | src/stray-files/go.mod | +| src/stray-files/test.go:0:0:0:0 | src/stray-files/test.go | +| src/workspace/subdir/go.mod:0:0:0:0 | src/workspace/subdir/go.mod | +| src/workspace/subdir/test.go:0:0:0:0 | src/workspace/subdir/test.go | +#select diff --git a/go/ql/integration-tests/all-platforms/go/mixed-layout/test.py b/go/ql/integration-tests/all-platforms/go/mixed-layout/test.py new file mode 100644 index 00000000000..43c7d1b38e8 --- /dev/null +++ b/go/ql/integration-tests/all-platforms/go/mixed-layout/test.py @@ -0,0 +1,18 @@ +import os +import subprocess + +from create_database_utils import * +from diagnostics_test_utils import * + +# Set up a GOPATH relative to this test's root directory; +# we set os.environ instead of using extra_env because we +# need it to be set for the call to "go clean -modcache" later +goPath = os.path.join(os.path.abspath(os.getcwd()), ".go") +os.environ['GOPATH'] = goPath +run_codeql_database_create([], lang="go", source="src") + +check_diagnostics() + +# Clean up the temporary GOPATH to prevent Bazel failures next +# time the tests are run; see https://github.com/golang/go/issues/27161 +subprocess.call(["go", "clean", "-modcache"]) diff --git a/go/ql/integration-tests/all-platforms/go/mixed-layout/test.ql b/go/ql/integration-tests/all-platforms/go/mixed-layout/test.ql new file mode 100644 index 00000000000..459a4301560 --- /dev/null +++ b/go/ql/integration-tests/all-platforms/go/mixed-layout/test.ql @@ -0,0 +1,8 @@ +import go +import semmle.go.DiagnosticsReporting + +query predicate extractedFiles(File f) { any() } + +from string msg, int sev +where reportableDiagnostics(_, msg, sev) +select msg, sev diff --git a/go/ql/integration-tests/all-platforms/go/single-go-mod-and-go-files-not-under-it/test.expected b/go/ql/integration-tests/all-platforms/go/single-go-mod-and-go-files-not-under-it/test.expected index 957d2f845a4..66ba3ef588f 100644 --- a/go/ql/integration-tests/all-platforms/go/single-go-mod-and-go-files-not-under-it/test.expected +++ b/go/ql/integration-tests/all-platforms/go/single-go-mod-and-go-files-not-under-it/test.expected @@ -1,6 +1,4 @@ extractedFiles -| src/go.mod:0:0:0:0 | src/go.mod | -| src/main.go:0:0:0:0 | src/main.go | | src/subdir/go.mod:0:0:0:0 | src/subdir/go.mod | | src/subdir/subsubdir/add.go:0:0:0:0 | src/subdir/subsubdir/add.go | | src/subdir/test.go:0:0:0:0 | src/subdir/test.go | diff --git a/go/ql/integration-tests/all-platforms/go/two-go-mods-one-failure/diagnostics.expected b/go/ql/integration-tests/all-platforms/go/two-go-mods-one-failure/diagnostics.expected index 02805a60c99..c37938d5c7c 100644 --- a/go/ql/integration-tests/all-platforms/go/two-go-mods-one-failure/diagnostics.expected +++ b/go/ql/integration-tests/all-platforms/go/two-go-mods-one-failure/diagnostics.expected @@ -18,7 +18,7 @@ "source": { "extractorName": "go", "id": "go/autobuilder/extraction-failed-for-project", - "name": "Unable to extract 1 Go projects" + "name": "Unable to extract some Go projects" }, "visibility": { "cliSummaryTable": true, diff --git a/go/ql/lib/CHANGELOG.md b/go/ql/lib/CHANGELOG.md index 65a2376217b..0fa4dfe0ec8 100644 --- a/go/ql/lib/CHANGELOG.md +++ b/go/ql/lib/CHANGELOG.md @@ -1,3 +1,29 @@ +## 0.7.13 + +### Minor Analysis Improvements + +* The `CODEQL_EXTRACTOR_GO_FAST_PACKAGE_INFO` option, which speeds up retrieval of dependency information, is now on by default. This was originally an external contribution by @xhd2015. +* Added dataflow sources for the package `gopkg.in/macaron.v1`. + +## 0.7.12 + +No user-facing changes. + +## 0.7.11 + +No user-facing changes. + +## 0.7.10 + +### Major Analysis Improvements + +* We have significantly improved the Go autobuilder to understand a greater range of project layouts, which allows Go source files to be analysed that could previously not be processed. +* Go 1.22 has been included in the range of supported Go versions. + +### Bug Fixes + +* Fixed dataflow out of a `map` using a `range` statement. + ## 0.7.9 No user-facing changes. diff --git a/go/ql/lib/change-notes/2024-02-14-range-map-read.md b/go/ql/lib/change-notes/2024-02-14-range-map-read.md deleted file mode 100644 index ea45737a72e..00000000000 --- a/go/ql/lib/change-notes/2024-02-14-range-map-read.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: fix ---- -* Fixed dataflow out of a `map` using a `range` statement. diff --git a/go/ql/lib/change-notes/2024-03-04-macaron-sources.md b/go/ql/lib/change-notes/2024-03-04-macaron-sources.md deleted file mode 100644 index 72ea242510d..00000000000 --- a/go/ql/lib/change-notes/2024-03-04-macaron-sources.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Added dataflow sources for the package `gopkg.in/macaron.v1`. diff --git a/go/ql/lib/change-notes/2024-03-04-autobuilder-changes.md b/go/ql/lib/change-notes/released/0.7.10.md similarity index 68% rename from go/ql/lib/change-notes/2024-03-04-autobuilder-changes.md rename to go/ql/lib/change-notes/released/0.7.10.md index 0442a571029..55954f8a394 100644 --- a/go/ql/lib/change-notes/2024-03-04-autobuilder-changes.md +++ b/go/ql/lib/change-notes/released/0.7.10.md @@ -1,5 +1,10 @@ ---- -category: majorAnalysis ---- +## 0.7.10 + +### Major Analysis Improvements + * We have significantly improved the Go autobuilder to understand a greater range of project layouts, which allows Go source files to be analysed that could previously not be processed. * Go 1.22 has been included in the range of supported Go versions. + +### Bug Fixes + +* Fixed dataflow out of a `map` using a `range` statement. diff --git a/go/ql/lib/change-notes/released/0.7.11.md b/go/ql/lib/change-notes/released/0.7.11.md new file mode 100644 index 00000000000..c4d7e2d3775 --- /dev/null +++ b/go/ql/lib/change-notes/released/0.7.11.md @@ -0,0 +1,3 @@ +## 0.7.11 + +No user-facing changes. diff --git a/go/ql/lib/change-notes/released/0.7.12.md b/go/ql/lib/change-notes/released/0.7.12.md new file mode 100644 index 00000000000..cb88422480b --- /dev/null +++ b/go/ql/lib/change-notes/released/0.7.12.md @@ -0,0 +1,3 @@ +## 0.7.12 + +No user-facing changes. diff --git a/go/ql/lib/change-notes/released/0.7.13.md b/go/ql/lib/change-notes/released/0.7.13.md new file mode 100644 index 00000000000..c6fab4935a1 --- /dev/null +++ b/go/ql/lib/change-notes/released/0.7.13.md @@ -0,0 +1,6 @@ +## 0.7.13 + +### Minor Analysis Improvements + +* The `CODEQL_EXTRACTOR_GO_FAST_PACKAGE_INFO` option, which speeds up retrieval of dependency information, is now on by default. This was originally an external contribution by @xhd2015. +* Added dataflow sources for the package `gopkg.in/macaron.v1`. diff --git a/go/ql/lib/codeql-pack.release.yml b/go/ql/lib/codeql-pack.release.yml index 576395f3405..8a077216acc 100644 --- a/go/ql/lib/codeql-pack.release.yml +++ b/go/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.7.9 +lastReleaseVersion: 0.7.13 diff --git a/go/ql/lib/qlpack.yml b/go/ql/lib/qlpack.yml index f21e478efa6..223333b72f8 100644 --- a/go/ql/lib/qlpack.yml +++ b/go/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/go-all -version: 0.7.10-dev +version: 0.7.14-dev groups: go dbscheme: go.dbscheme extractor: go diff --git a/go/ql/lib/semmle/go/Expr.qll b/go/ql/lib/semmle/go/Expr.qll index 66d79f1d8f4..b1e1a169784 100644 --- a/go/ql/lib/semmle/go/Expr.qll +++ b/go/ql/lib/semmle/go/Expr.qll @@ -754,13 +754,19 @@ class SliceExpr extends @sliceexpr, Expr { * * ```go * x.(T) + * x.(type) * ``` */ class TypeAssertExpr extends @typeassertexpr, Expr { /** Gets the base expression whose type is being asserted. */ Expr getExpr() { result = this.getChildExpr(0) } - /** Gets the expression representing the asserted type. */ + /** + * Gets the expression representing the asserted type. + * + * Note that this is not defined when the type assertion is of the form + * `x.(type)`, as found in type switches. + */ Expr getTypeExpr() { result = this.getChildExpr(1) } override predicate mayHaveOwnSideEffects() { any() } diff --git a/go/ql/lib/semmle/go/Scopes.qll b/go/ql/lib/semmle/go/Scopes.qll index 153ca8d6307..740bb39cfec 100644 --- a/go/ql/lib/semmle/go/Scopes.qll +++ b/go/ql/lib/semmle/go/Scopes.qll @@ -119,7 +119,13 @@ class Entity extends @object { */ Scope getScope() { objectscopes(this, result) } - /** Gets the declaring identifier for this entity. */ + /** + * Gets the declaring identifier for this entity, if any. + * + * Note that type switch statements which define a new variable in the guard + * actually have a new variable (of the right type) implicitly declared at + * the beginning of each case clause, and these do not have a declaration. + */ Ident getDeclaration() { result.declares(this) } /** Gets a reference to this entity. */ diff --git a/go/ql/lib/semmle/go/Stmt.qll b/go/ql/lib/semmle/go/Stmt.qll index b4164398b02..e02d6766657 100644 --- a/go/ql/lib/semmle/go/Stmt.qll +++ b/go/ql/lib/semmle/go/Stmt.qll @@ -747,13 +747,25 @@ class IfStmt extends @ifstmt, Stmt, ScopeNode { * ``` */ class CaseClause extends @caseclause, Stmt, ScopeNode { - /** Gets the `i`th expression of this `case` clause (0-based). */ + /** + * Gets the `i`th expression of this `case` clause (0-based). + * + * Note that the default clause does not have any expressions. + */ Expr getExpr(int i) { result = this.getChildExpr(-(i + 1)) } - /** Gets an expression of this `case` clause. */ + /** + * Gets an expression of this `case` clause, if any. + * + * Note that the default clause does not have any expressions. + */ Expr getAnExpr() { result = this.getAChildExpr() } - /** Gets the number of expressions of this `case` clause. */ + /** + * Gets the number of expressions of this `case` clause. + * + * Note that the default clause does not have any expressions. + */ int getNumExpr() { result = this.getNumChildExpr() } /** Gets the `i`th statement of this `case` clause (0-based). */ diff --git a/go/ql/lib/semmle/go/dataflow/ExternalFlow.qll b/go/ql/lib/semmle/go/dataflow/ExternalFlow.qll index cacad869509..9df20606d27 100644 --- a/go/ql/lib/semmle/go/dataflow/ExternalFlow.qll +++ b/go/ql/lib/semmle/go/dataflow/ExternalFlow.qll @@ -34,15 +34,13 @@ * An `output` can be either "", "Argument[n]", "Argument[n1..n2]", "Parameter", * "Parameter[n]", "Parameter[n1..n2]", , "ReturnValue", "ReturnValue[n]", or * "ReturnValue[n1..n2]": - * - "": Selects a read of a selected field, or a selected parameter. + * - "": Selects a read of a selected field. * - "Argument[n]": Selects the post-update value of an argument in a call to the * selected element. That is, the value of the argument after the call returns. * The arguments are zero-indexed, and `-1` specifies the qualifier. * - "Argument[n1..n2]": Similar to "Argument[n]" but select any argument in * the given range. The range is inclusive at both ends. * - "Parameter": Selects the value of a parameter of the selected element. - * "Parameter" is also allowed in case the selected element is already a - * parameter itself. * - "Parameter[n]": Similar to "Parameter" but restricted to a specific * numbered parameter (zero-indexed, and `-1` specifies the value of `this`). * - "Parameter[n1..n2]": Similar to "Parameter[n]" but selects any parameter @@ -299,8 +297,8 @@ predicate hasExternalSpecification(Function f) { f = any(SummarizedCallable sc).asFunction() or exists(SourceSinkInterpretationInput::SourceOrSinkElement e | f = e.asEntity() | - SourceSinkInterpretationInput::sourceElement(e, _, _) or - SourceSinkInterpretationInput::sinkElement(e, _, _) + SourceSinkInterpretationInput::sourceElement(e, _, _, _) or + SourceSinkInterpretationInput::sinkElement(e, _, _, _) ) } diff --git a/go/ql/lib/semmle/go/dataflow/internal/FlowSummaryImpl.qll b/go/ql/lib/semmle/go/dataflow/internal/FlowSummaryImpl.qll index fb09daa48ff..1a51af5c3fb 100644 --- a/go/ql/lib/semmle/go/dataflow/internal/FlowSummaryImpl.qll +++ b/go/ql/lib/semmle/go/dataflow/internal/FlowSummaryImpl.qll @@ -103,11 +103,13 @@ module SourceSinkInterpretationInput implements * Holds if an external source specification exists for `e` with output specification * `output`, kind `kind`, and provenance `provenance`. */ - predicate sourceElement(SourceOrSinkElement e, string output, string kind) { + predicate sourceElement( + SourceOrSinkElement e, string output, string kind, Public::Provenance provenance + ) { exists( string package, string type, boolean subtypes, string name, string signature, string ext | - sourceModel(package, type, subtypes, name, signature, ext, output, kind, _) and + sourceModel(package, type, subtypes, name, signature, ext, output, kind, provenance) and e = interpretElement(package, type, subtypes, name, signature, ext) ) } @@ -116,11 +118,13 @@ module SourceSinkInterpretationInput implements * Holds if an external sink specification exists for `e` with input specification * `input`, kind `kind` and provenance `provenance`. */ - predicate sinkElement(SourceOrSinkElement e, string input, string kind) { + predicate sinkElement( + SourceOrSinkElement e, string input, string kind, Public::Provenance provenance + ) { exists( string package, string type, boolean subtypes, string name, string signature, string ext | - sinkModel(package, type, subtypes, name, signature, ext, input, kind, _) and + sinkModel(package, type, subtypes, name, signature, ext, input, kind, provenance) and e = interpretElement(package, type, subtypes, name, signature, ext) ) } diff --git a/go/ql/src/CHANGELOG.md b/go/ql/src/CHANGELOG.md index d95165a3a34..2bee579db9c 100644 --- a/go/ql/src/CHANGELOG.md +++ b/go/ql/src/CHANGELOG.md @@ -1,3 +1,26 @@ +## 0.7.13 + +### New Queries + +* The query "Slice memory allocation with excessive size value" (`go/uncontrolled-allocation-size`) has been promoted from experimental to the main query pack. Its results will now appear by default. This query was originally [submitted as an experimental query by @Malayke](https://github.com/github/codeql/pull/15130). + +### Minor Analysis Improvements + +* The query `go/hardcoded-credentials` no longer discards string literals based on "weak password" heuristics. +* The query `go/sql-injection` now recognizes more sinks in the package `github.com/Masterminds/squirrel`. + +## 0.7.12 + +No user-facing changes. + +## 0.7.11 + +No user-facing changes. + +## 0.7.10 + +No user-facing changes. + ## 0.7.9 ### New Queries diff --git a/go/ql/src/Security/CWE-022/TaintedPath.qhelp b/go/ql/src/Security/CWE-022/TaintedPath.qhelp index 061ffbe3471..94edec4e4f4 100644 --- a/go/ql/src/Security/CWE-022/TaintedPath.qhelp +++ b/go/ql/src/Security/CWE-022/TaintedPath.qhelp @@ -9,23 +9,35 @@ Accessing files using paths constructed from user-controlled data can allow an a unexpected resources. This can result in sensitive information being revealed or deleted, or an attacker being able to influence behavior by modifying unexpected files.

+

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

-Validate user input before using it to construct a file path, either using an off-the-shelf library -or by performing custom validation. +Validate user input before using it to construct a file path.

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

+

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

+

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

+

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

-
    -
  • Do not allow more than a single "." character.
  • -
  • Do not allow directory separators such as "/" or "\" (depending on the file system).
  • -
  • Do not rely on simply replacing problematic sequences such as "../". For example, after -applying this filter to ".../...//", the resulting string would still be "../".
  • -
  • Use an allowlist of known good patterns.
  • -
@@ -43,6 +55,27 @@ password file. This file would then be sent back to the user, giving them access information.

+

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

+ +

+Note that this approach is only suitable if the input is expected to be a single file name. +

+

+If the input can be a path with multiple components, you can make it safe by verifying +that the path is within a specific directory that is considered safe. +You can do this by resolving the input with respect to that directory, and then checking +that the resulting path is still within it. +

+ +

+Note that /home/user is just an example, you should replace it with the actual +safe directory in your application. Also, while in this example the path of the safe +directory is absolute, this may not always be the case, and you may need to resolve it +first before checking the input. +

diff --git a/go/ql/src/Security/CWE-022/TaintedPathGood.go b/go/ql/src/Security/CWE-022/TaintedPathGood.go new file mode 100644 index 00000000000..8a46c76b26a --- /dev/null +++ b/go/ql/src/Security/CWE-022/TaintedPathGood.go @@ -0,0 +1,21 @@ +package main + +import ( + "io/ioutil" + "net/http" + "path/filepath" + "strings" +) + +func handler(w http.ResponseWriter, r *http.Request) { + path := r.URL.Query()["path"][0] + + // GOOD: ensure that the filename has no path separators or parent directory references + // (Note that this is only suitable if `path` is expected to have a single component!) + if strings.Contains(path, "/") || strings.Contains(path, "\\") || strings.Contains(path, "..") { + http.Error(w, "Invalid file name", http.StatusBadRequest) + return + } + data, _ := ioutil.ReadFile(filepath.Join("/home/user/", path)) + w.Write(data) +} diff --git a/go/ql/src/Security/CWE-022/TaintedPathGood2.go b/go/ql/src/Security/CWE-022/TaintedPathGood2.go new file mode 100644 index 00000000000..0136adf11dc --- /dev/null +++ b/go/ql/src/Security/CWE-022/TaintedPathGood2.go @@ -0,0 +1,23 @@ +package main + +import ( + "io/ioutil" + "net/http" + "path/filepath" + "strings" +) + +const safeDir = "/home/user/" + +func handler(w http.ResponseWriter, r *http.Request) { + path := r.URL.Query()["path"][0] + + // GOOD: ensure that the resolved path is within the safe directory + absPath, err := filepath.Abs(filepath.Join(safeDir, path)) + if err != nil || !strings.HasPrefix(absPath, safeDir) { + http.Error(w, "Invalid file name", http.StatusBadRequest) + return + } + data, _ := ioutil.ReadFile(absPath) + w.Write(data) +} diff --git a/go/ql/src/Security/CWE-089/StringBreak.qhelp b/go/ql/src/Security/CWE-089/StringBreak.qhelp index 1c4f2863037..399eb8170e4 100644 --- a/go/ql/src/Security/CWE-089/StringBreak.qhelp +++ b/go/ql/src/Security/CWE-089/StringBreak.qhelp @@ -5,19 +5,21 @@

-Code that constructs a string containing a quoted substring needs to ensure that any user-provided -data embedded in between the quotes does not itself contain a quote. Otherwise the embedded data -could (accidentally or intentionally) change the structure of the overall string by terminating -the quoted substring early, with potentially severe consequences. If, for example, the string is -later interpreted as an operating-system command or database query, a malicious attacker may be -able to craft input data that enables a command injection or SQL injection attack. +Code that constructs a quoted string literal containing user-provided data needs to ensure that +this data does not itself contain a quote. Otherwise the embedded data could (accidentally or +intentionally) terminate the string literal early and thereby change the structure of the overall +string, with potentially severe consequences. If, for example, the string is later used as +part of an operating-system command or database query, an attacker may be able to craft input data +that injects a malicious command.

Sanitize the embedded data appropriately to ensure quotes are escaped, or use an API that does -not rely on manually constructing quoted substrings. +not rely on manually constructing quoted substrings. Make sure to use the appropriate escaping +mechanism, for example, double quoting for SQL strings or backslash escaping for shell commands. +When using backslash escaping, the backslash character itself must also be escaped.

@@ -29,17 +31,38 @@ then embeds it into a SQL query built using the Squirrel library.

-Note that while Squirrel provides a structured API for building SQL queries that mitigates against -common causes of SQL injection vulnerabilities, this code is still vulnerable: if the JSON-encoded -representation of version contains a single quote, this will prematurely close the -surrounding string, changing the structure of the SQL expression being constructed. This could be -exploited to mount a SQL injection attack. +Note that JSON encoding does not escape single quotes in any way, so this code is vulnerable: any +single-quote character in version will prematurely close the surrounding string literal, +changing the structure of the SQL expression being constructed. This could be exploited to mount +a SQL injection attack.

-To fix this vulnerability, use Squirrel's placeholder syntax, which avoids the need to explicitly -construct a quoted string. +To fix this vulnerability, use the placeholder syntax from Squirrel's structured API for building +queries, which avoids the need to explicitly construct a quoted string.

+

+In situations where a structured API is not available, make sure that you escape quotes before embedding +user-provided data into a quoted string. For example, this is how you can backslash-escape single +quotes using strings.ReplaceAll: +

+ + quoted := strings.ReplaceAll(raw, `\`, `\\`) + quoted = strings.ReplaceAll(quoted, "'", "\\'") + +

+Note that any existing backslash characters in the string must be escaped first, so that they do +not interfere with the escaping of single quotes. +

+

+In some cases, strconv.Quote is a convenient option for backslash escaping, but note +that it has two limitations: +

+
    +
  1. It only supports double quotes, not single quotes (as in the example).
  2. +
  3. It puts quotes around the entire string, so it can only be used to construct complete string + literals, not parts of larger string literals.
  4. +
diff --git a/go/ql/src/Security/CWE-601/OpenUrlRedirect.qhelp b/go/ql/src/Security/CWE-601/OpenUrlRedirect.qhelp index 11916c484c5..75060ba677c 100644 --- a/go/ql/src/Security/CWE-601/OpenUrlRedirect.qhelp +++ b/go/ql/src/Security/CWE-601/OpenUrlRedirect.qhelp @@ -16,6 +16,10 @@ To guard against untrusted URL redirection, it is advisable to avoid putting use a redirect URL. Instead, maintain a list of authorized redirects on the server; then choose from that list based on the user input provided.

+

+If this is not possible, then the user input should be validated in some other way, +for example, by verifying that the target URL is local and does not redirect to a different host. +

@@ -27,11 +31,17 @@ validating the input, which facilitates phishing attacks:

-One way to remedy the problem is to validate the user input against a known fixed string -before doing the redirection: +One way to remedy the problem is to parse the target URL and check that its hostname is empty, +which means that it is a relative URL:

+ +

+Note that some browsers treat backslashes in URLs as forward slashes. To account for this, +we replace all backslashes with forward slashes before parsing the URL and checking its hostname. +

+
diff --git a/go/ql/src/Security/CWE-601/OpenUrlRedirectGood.go b/go/ql/src/Security/CWE-601/OpenUrlRedirectGood.go index 7aa9e4aef29..3638a8afd2e 100644 --- a/go/ql/src/Security/CWE-601/OpenUrlRedirectGood.go +++ b/go/ql/src/Security/CWE-601/OpenUrlRedirectGood.go @@ -3,21 +3,26 @@ package main import ( "net/http" "net/url" + "strings" ) -func serve() { +func serve1() { http.HandleFunc("/redir", func(w http.ResponseWriter, r *http.Request) { r.ParseForm() - target, err := url.Parse(r.Form.Get("target")) + targetUrl := r.Form.Get("target") + // replace all backslashes with forward slashes before parsing the URL + targetUrl = strings.ReplaceAll(targetUrl, "\\", "/") + + target, err := url.Parse(targetUrl) if err != nil { // ... } - if target.Hostname() == "semmle.com" { - // GOOD: checking hostname + if target.Hostname() == "" { + // GOOD: check that it is a local redirect http.Redirect(w, r, target.String(), 302) } else { - http.WriteHeader(400) + w.WriteHeader(400) } }) } diff --git a/go/ql/src/Summary/LinesOfCode.ql b/go/ql/src/Summary/LinesOfCode.ql index 383d7c5021e..987648f604c 100644 --- a/go/ql/src/Summary/LinesOfCode.ql +++ b/go/ql/src/Summary/LinesOfCode.ql @@ -5,6 +5,7 @@ * @kind metric * @tags summary * lines-of-code + * debug */ import go diff --git a/go/ql/src/change-notes/2024-03-05-squirrel-sqli-sinks.md b/go/ql/src/change-notes/2024-03-05-squirrel-sqli-sinks.md deleted file mode 100644 index 0b6a78df9f9..00000000000 --- a/go/ql/src/change-notes/2024-03-05-squirrel-sqli-sinks.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* The query `go/sql-injection` now recognizes more sinks in the package `github.com/Masterminds/squirrel`. diff --git a/go/ql/src/change-notes/2024-03-14-hardcoded-credentials-more-sources.md b/go/ql/src/change-notes/2024-03-14-hardcoded-credentials-more-sources.md deleted file mode 100644 index ad6f712958e..00000000000 --- a/go/ql/src/change-notes/2024-03-14-hardcoded-credentials-more-sources.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* The query `go/hardcoded-credentials` no longer discards string literals based on "weak password" heuristics. diff --git a/go/ql/src/change-notes/released/0.7.10.md b/go/ql/src/change-notes/released/0.7.10.md new file mode 100644 index 00000000000..989c5b8f682 --- /dev/null +++ b/go/ql/src/change-notes/released/0.7.10.md @@ -0,0 +1,3 @@ +## 0.7.10 + +No user-facing changes. diff --git a/go/ql/src/change-notes/released/0.7.11.md b/go/ql/src/change-notes/released/0.7.11.md new file mode 100644 index 00000000000..c4d7e2d3775 --- /dev/null +++ b/go/ql/src/change-notes/released/0.7.11.md @@ -0,0 +1,3 @@ +## 0.7.11 + +No user-facing changes. diff --git a/go/ql/src/change-notes/released/0.7.12.md b/go/ql/src/change-notes/released/0.7.12.md new file mode 100644 index 00000000000..cb88422480b --- /dev/null +++ b/go/ql/src/change-notes/released/0.7.12.md @@ -0,0 +1,3 @@ +## 0.7.12 + +No user-facing changes. diff --git a/go/ql/src/change-notes/2024-03-07-uncontrolled-allocation-size.md b/go/ql/src/change-notes/released/0.7.13.md similarity index 53% rename from go/ql/src/change-notes/2024-03-07-uncontrolled-allocation-size.md rename to go/ql/src/change-notes/released/0.7.13.md index 663932005eb..e11b3986979 100644 --- a/go/ql/src/change-notes/2024-03-07-uncontrolled-allocation-size.md +++ b/go/ql/src/change-notes/released/0.7.13.md @@ -1,4 +1,10 @@ ---- -category: newQuery ---- +## 0.7.13 + +### New Queries + * The query "Slice memory allocation with excessive size value" (`go/uncontrolled-allocation-size`) has been promoted from experimental to the main query pack. Its results will now appear by default. This query was originally [submitted as an experimental query by @Malayke](https://github.com/github/codeql/pull/15130). + +### Minor Analysis Improvements + +* The query `go/hardcoded-credentials` no longer discards string literals based on "weak password" heuristics. +* The query `go/sql-injection` now recognizes more sinks in the package `github.com/Masterminds/squirrel`. diff --git a/go/ql/src/codeql-pack.release.yml b/go/ql/src/codeql-pack.release.yml index 576395f3405..8a077216acc 100644 --- a/go/ql/src/codeql-pack.release.yml +++ b/go/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.7.9 +lastReleaseVersion: 0.7.13 diff --git a/go/ql/src/qlpack.yml b/go/ql/src/qlpack.yml index d91cab59612..d4c2ffb9813 100644 --- a/go/ql/src/qlpack.yml +++ b/go/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/go-queries -version: 0.7.10-dev +version: 0.7.14-dev groups: - go - queries diff --git a/go/ql/test/query-tests/Security/CWE-601/OpenUrlRedirect/OpenUrlRedirectGood.go b/go/ql/test/query-tests/Security/CWE-601/OpenUrlRedirect/OpenUrlRedirectGood.go index 7ff368636f9..3638a8afd2e 100644 --- a/go/ql/test/query-tests/Security/CWE-601/OpenUrlRedirect/OpenUrlRedirectGood.go +++ b/go/ql/test/query-tests/Security/CWE-601/OpenUrlRedirect/OpenUrlRedirectGood.go @@ -3,17 +3,23 @@ package main import ( "net/http" "net/url" + "strings" ) func serve1() { http.HandleFunc("/redir", func(w http.ResponseWriter, r *http.Request) { r.ParseForm() - target, err := url.Parse(r.Form.Get("target")) + targetUrl := r.Form.Get("target") + // replace all backslashes with forward slashes before parsing the URL + targetUrl = strings.ReplaceAll(targetUrl, "\\", "/") + + target, err := url.Parse(targetUrl) if err != nil { // ... } - if target.Hostname() == "semmle.com" { - // GOOD: checking hostname + + if target.Hostname() == "" { + // GOOD: check that it is a local redirect http.Redirect(w, r, target.String(), 302) } else { w.WriteHeader(400) diff --git a/java/documentation/library-coverage/coverage.csv b/java/documentation/library-coverage/coverage.csv index ad4f7bdd07f..3c7ab6453c5 100644 --- a/java/documentation/library-coverage/coverage.csv +++ b/java/documentation/library-coverage/coverage.csv @@ -1,253 +1,256 @@ -package,sink,source,summary,sink:bean-validation,sink:command-injection,sink:credentials-key,sink:credentials-password,sink:credentials-username,sink:encryption-iv,sink:encryption-salt,sink:environment-injection,sink:file-content-store,sink:fragment-injection,sink:groovy-injection,sink:hostname-verification,sink:html-injection,sink:information-leak,sink:intent-redirection,sink:jexl-injection,sink:jndi-injection,sink:js-injection,sink:ldap-injection,sink:log-injection,sink:mvel-injection,sink:notification,sink:ognl-injection,sink:path-injection,sink:pending-intents,sink:regex-use,sink:regex-use[-1],sink:regex-use[0],sink:regex-use[],sink:regex-use[f-1],sink:regex-use[f1],sink:regex-use[f],sink:request-forgery,sink:response-splitting,sink:sql-injection,sink:template-injection,sink:trust-boundary-violation,sink:url-redirection,sink:xpath-injection,sink:xslt-injection,source:android-external-storage-dir,source:contentprovider,source:database,source:environment,source:file,source:remote,summary:taint,summary:value -actions.osgi,,,6,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6, -android.app,77,,103,,,,,,,,,,11,,,,,7,,,,,,,42,,,17,,,,,,,,,,,,,,,,,,,,,,18,85 -android.content,24,31,154,,,,,,,,,,,,,,,16,,,,,,,,,,,,,,,,,,,,8,,,,,,4,27,,,,,63,91 -android.database,59,,41,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,59,,,,,,,,,,,,41, -android.net,,,60,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,45,15 -android.os,1,2,122,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,2,,,,,,41,81 -android.support.v4.app,11,,,,,,,,,,,,11,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -android.util,6,16,,,,,,,,,,,,,,,,,,,,,6,,,,,,,,,,,,,,,,,,,,,,,,,,16,, -android.webkit,3,2,,,,,,,,,,,,,,2,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,, -android.widget,,1,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,1, -androidx.core.app,47,,95,,,,,,,,,,,,,,,,,,,,,,41,,,6,,,,,,,,,,,,,,,,,,,,,,12,83 -androidx.fragment.app,11,,,,,,,,,,,,11,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -androidx.slice,2,5,88,,,,,,,,,,,,,,,,,,,,,,,,,2,,,,,,,,,,,,,,,,,5,,,,,27,61 -antlr,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1, -ch.ethz.ssh2,2,,,,,,1,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -cn.hutool.core.codec,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1, -com.alibaba.druid.sql,1,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,1, -com.alibaba.fastjson2,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1, -com.amazonaws.auth,2,,,,,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -com.auth0.jwt.algorithms,6,,,,,6,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -com.azure.identity,3,,,,,1,1,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -com.esotericsoftware.kryo.io,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1, -com.esotericsoftware.kryo5.io,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1, -com.fasterxml.jackson.core,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1, -com.fasterxml.jackson.databind,2,,8,,,,,,,,,,,,,,,,,,,,,,,,2,,,,,,,,,,,,,,,,,,,,,,,8, -com.google.common.base,4,,87,,,,,,,,,,,,,,,,,,,,,,,,,,,,3,1,,,,,,,,,,,,,,,,,,63,24 -com.google.common.cache,,,17,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,17 -com.google.common.collect,,,553,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,551 -com.google.common.flogger,29,,,,,,,,,,,,,,,,,,,,,,29,,,,,,,,,,,,,,,,,,,,,,,,,,,, -com.google.common.io,10,,73,,,,,,,,,1,,,,,,,,,,,,,,,9,,,,,,,,,,,,,,,,,,,,,,,72,1 -com.google.gson,,,52,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,38,14 -com.hubspot.jinjava,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,,,,,,,,,,,, -com.jcraft.jsch,5,,1,,,,2,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,1, -com.microsoft.sqlserver.jdbc,4,,,,,,2,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -com.mitchellbosecke.pebble,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,,,,,,,,,,,, -com.mongodb,10,,,,,,4,6,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -com.opensymphony.xwork2,56,,961,,,,,,,,,,,,,,,,,,,,,,,56,,,,,,,,,,,,,,,,,,,,,,,,867,94 -com.rabbitmq.client,,21,7,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,21,7, -com.sshtools.j2ssh.authentication,3,,,,,,1,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -com.sun.crypto.provider,19,,,,,17,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -com.sun.jndi.ldap,4,,,,,,,4,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -com.sun.net.httpserver,3,,,,,,1,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -com.sun.net.ssl,3,,,,,,3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -com.sun.rowset,3,,,,,,2,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -com.sun.security.auth.module,2,,,,,,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -com.sun.security.ntlm,5,,,,,,3,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -com.sun.security.sasl.digest,3,,,,,,2,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -com.thoughtworks.xstream,1,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,, -com.trilead.ssh2,13,,,,,2,4,7,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -com.unboundid.ldap.sdk,17,,,,,,,,,,,,,,,,,,,,,17,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -com.zaxxer.hikari,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,,,,,,,,,,,,,,, -flexjson,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1 -freemarker.cache,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,, -freemarker.template,7,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,7,,,,,,,,,,,, -groovy.lang,26,,,,,,,,,,,,,26,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -groovy.text,1,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -groovy.util,5,,,,,,,,,,,,,5,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -hudson,74,9,2648,,4,,,,,,3,2,,,,4,,,,,,,,,,,55,,,,,,,,,6,,,,,,,,,,,,5,4,2572,76 -io.jsonwebtoken,,2,4,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,4, -io.netty.bootstrap,3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,3,,,,,,,,,,,,,,, -io.netty.buffer,,,207,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,130,77 -io.netty.channel,9,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,9,,,,,,,,,,,,,2,, -io.netty.handler.codec,4,13,259,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,3,,,,,,,,,,,,,13,143,116 -io.netty.handler.ssl,4,,,,,,,,,,,,,,,,,,,,,,,,,,4,,,,,,,,,,,,,,,,,,,,,,,, -io.netty.handler.stream,1,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,, -io.netty.resolver,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1, -io.netty.util,2,,23,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,1,,,,,,,,,,,,,,21,2 -jakarta.activation,2,,2,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,1,,,,,,,,,,,,,,2, -jakarta.faces.context,2,7,,,,,,,,,,,,,,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,7,, -jakarta.json,,,123,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,100,23 -jakarta.persistence,2,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,,,,,,,,,,,,1, -jakarta.ws.rs.client,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,, -jakarta.ws.rs.container,,9,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,9,, -jakarta.ws.rs.core,2,,149,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,,,,,,,,,94,55 -jakarta.xml.bind.attachment,,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,, -java.awt,1,,3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,3 -java.beans,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1, -java.io,51,1,45,,,,,,,,,22,,,,,,,,,,,,,,,29,,,,,,,,,,,,,,,,,,,,,1,,43,2 -java.lang,38,3,101,,13,,,,,,1,,,,,,,,,,,,8,,,,11,,,4,,,1,,,,,,,,,,,,,,3,,,58,43 -java.net,22,3,24,,,,1,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,20,,,,,,,,,,,,,3,24, -java.nio,44,,38,,,,,,,,,5,,,,,,,,,,,,,,,38,,,,,,,,,1,,,,,,,,,,,,,,38, -java.security,21,,,,,11,10,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -java.sql,15,1,2,,,,1,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,4,,9,,,,,,,,1,,,,2, -java.util,47,2,524,,,,,,,,,1,,,,,,,,,,,34,,,,2,,,,5,2,,1,2,,,,,,,,,,,,2,,,46,478 -javafx.scene.web,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,, -javax.activation,2,,7,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,1,,,,,,,,,,,,,,7, -javax.crypto,19,,4,,,12,3,,2,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4, -javax.faces.context,2,7,,,,,,,,,,,,,,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,7,, -javax.imageio.stream,1,,1,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,1, -javax.jms,,9,57,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,9,57, -javax.json,,,123,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,100,23 -javax.management,2,,1,,,,,,,,,,,,,,,,,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1, -javax.naming,7,,1,,,,,,,,,,,,,,,,,6,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,1, -javax.net.ssl,4,,,,,,2,,,,,,,,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -javax.portlet,,,61,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,61, -javax.print.attribute.standard,2,,,,,,,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -javax.script,1,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,, -javax.security.auth.callback,1,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -javax.security.auth.kerberos,6,,,,,4,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -javax.servlet,7,21,3,,,,,,,,,,,,,,1,,,,,,,,,,1,,,,,,,,,,3,,,2,,,,,,,,,21,3, -javax.sql,7,,,,,,4,3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -javax.validation,1,1,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,, -javax.ws.rs.client,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,, -javax.ws.rs.container,,9,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,9,, -javax.ws.rs.core,3,,149,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,2,,,,,,,,,94,55 -javax.xml.bind.attachment,,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,, -javax.xml.transform,2,,6,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,1,,,,,,,6, -javax.xml.xpath,3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,3,,,,,,,,, -jenkins,,,523,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,500,23 -jodd.json,,,10,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,10 -kotlin,16,,1849,,,,,,,,,,,,,,,,,,,,,,,,14,,,,,,,,,2,,,,,,,,,,,,,,1836,13 -liquibase.database.jvm,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,, -liquibase.statement.core,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,, -net.schmizz.sshj,4,,,,,,2,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -net.sf.json,2,,338,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,,,,,,,,,,,,,,321,17 -net.sf.saxon.s9api,5,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,5,,,,,,,, -ognl,6,,,,,,,,,,,,,,,,,,,,,,,,,6,,,,,,,,,,,,,,,,,,,,,,,,, -okhttp3,4,,50,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4,,,,,,,,,,,,,,23,27 -org.acegisecurity,,,49,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,49, -org.antlr.runtime,1,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,, -org.apache.commons.codec,,,6,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6, -org.apache.commons.collections,,,800,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,17,783 -org.apache.commons.collections4,,,800,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,17,783 -org.apache.commons.compress.archivers.tar,,,4,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4, -org.apache.commons.exec,10,,,,6,,,,,,4,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -org.apache.commons.httpclient.util,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1, -org.apache.commons.io,118,,562,,,,,,,,,4,,,,,,,,,,,,,,,99,,,,,,,,,15,,,,,,,,,,,,,,548,14 -org.apache.commons.jelly,6,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6,,,,,,,,,,,,,,, -org.apache.commons.jexl2,15,,,,,,,,,,,,,,,,,,15,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -org.apache.commons.jexl3,15,,,,,,,,,,,,,,,,,,15,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -org.apache.commons.lang,,,767,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,596,171 -org.apache.commons.lang3,6,,425,,,,,,,,,,,,,,,,,,,,,,,,,,6,,,,,,,,,,,,,,,,,,,,,294,131 -org.apache.commons.logging,6,,,,,,,,,,,,,,,,,,,,,,6,,,,,,,,,,,,,,,,,,,,,,,,,,,, -org.apache.commons.net,13,12,,,,,2,2,,,,,,,,,,,,,,,,,,,3,,,,,,,,,6,,,,,,,,,,,,,12,, -org.apache.commons.ognl,6,,,,,,,,,,,,,,,,,,,,,,,,,6,,,,,,,,,,,,,,,,,,,,,,,,, -org.apache.commons.text,,,272,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,220,52 -org.apache.cxf.catalog,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,, -org.apache.cxf.common.classloader,3,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,2,,,,,,,,,,,,,,, -org.apache.cxf.common.jaxb,1,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,, -org.apache.cxf.common.logging,6,,,,,,,,,,,,,,,,,,,,,,6,,,,,,,,,,,,,,,,,,,,,,,,,,,, -org.apache.cxf.configuration.jsse,2,,,,,,,,,,,,,,1,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,, -org.apache.cxf.helpers,10,,,,,,,,,,,,,,,,,,,,,,,,,,5,,,,,,,,,,,,,,,5,,,,,,,,, -org.apache.cxf.resource,9,,,,,,,,,,,,,,,,,,,,,,,,,,4,,,,,,,,,5,,,,,,,,,,,,,,, -org.apache.cxf.staxutils,1,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,, -org.apache.cxf.tools.corba.utils,4,,,,,,,,,,,,,,,,,,,,,,,,,,4,,,,,,,,,,,,,,,,,,,,,,,, -org.apache.cxf.tools.util,10,,,,,,,,,,,,,,,,,,,,,,,,,,10,,,,,,,,,,,,,,,,,,,,,,,, -org.apache.cxf.transform,3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,3,,,,,,,, -org.apache.directory.ldap.client.api,1,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -org.apache.hadoop.fs,3,,11,,,,,,,,,,,,,,,,,,,,,,,,3,,,,,,,,,,,,,,,,,,,,,,,11, -org.apache.hadoop.hive.metastore,3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,3,,,,,,,,,,,,, -org.apache.hadoop.hive.ql.exec,1,,1,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,1, -org.apache.hadoop.hive.ql.metadata,1,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,, -org.apache.hc.client5.http.async.methods,84,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,84,,,,,,,,,,,,,,, -org.apache.hc.client5.http.classic.methods,37,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,37,,,,,,,,,,,,,,, -org.apache.hc.client5.http.fluent,19,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,19,,,,,,,,,,,,,,, -org.apache.hc.core5.benchmark,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,, -org.apache.hc.core5.function,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1, -org.apache.hc.core5.http,73,2,45,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,72,,,,,,,,,,,,,2,45, -org.apache.hc.core5.net,,,18,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,18, -org.apache.hc.core5.util,,,24,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,18,6 -org.apache.hive.hcatalog.templeton,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,, -org.apache.http,48,3,95,,,,,,,,,,,,,2,,,,,,,,,,,,,,,,,,,,46,,,,,,,,,,,,,3,86,9 -org.apache.ibatis.jdbc,6,,57,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6,,,,,,,,,,,,57, -org.apache.ibatis.mapping,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1, -org.apache.log4j,11,,,,,,,,,,,,,,,,,,,,,,11,,,,,,,,,,,,,,,,,,,,,,,,,,,, -org.apache.logging.log4j,359,,8,,,,,,,,,,,,,,,,,,,,359,,,,,,,,,,,,,,,,,,,,,,,,,,,4,4 -org.apache.shiro.codec,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1, -org.apache.shiro.jndi,1,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -org.apache.shiro.mgt,1,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -org.apache.sshd.client.session,3,,,,,,1,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -org.apache.struts.beanvalidation.validation.interceptor,,,4,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4, -org.apache.struts2,14,,3873,,,,,,,,,,,,,,,,,,,,,,,11,,,,,,,,,,,,,,3,,,,,,,,,,3839,34 -org.apache.tools.ant,12,,,,1,,,,,,,,,,,,,,,,,,,,,,11,,,,,,,,,,,,,,,,,,,,,,,, -org.apache.tools.zip,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1, -org.apache.velocity.app,4,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4,,,,,,,,,,,, -org.apache.velocity.runtime,4,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4,,,,,,,,,,,, -org.codehaus.cargo.container.installer,3,,,,,,,,,,,,,,,,,,,,,,,,,,2,,,,,,,,,1,,,,,,,,,,,,,,, -org.codehaus.groovy.control,1,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -org.dom4j,20,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,20,,,,,,,,, -org.eclipse.jetty.client,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,,,,,,,,,,,,,,, -org.fusesource.leveldbjni,1,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,, -org.geogebra.web.full.main,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,, -org.gradle.api.file,,,3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,3, -org.hibernate,7,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,7,,,,,,,,,,,,, -org.influxdb,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,, -org.jboss.logging,324,,,,,,,,,,,,,,,,,,,,,,324,,,,,,,,,,,,,,,,,,,,,,,,,,,, -org.jdbi.v3.core,6,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6,,,,,,,,,,,,,,, -org.jenkins.ui.icon,,,49,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,48,1 -org.jenkins.ui.symbol,,,33,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,25,8 -org.jooq,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,, -org.json,,,236,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,198,38 -org.keycloak.models.map.storage,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,, -org.kohsuke.stapler,20,24,363,,,,,,,,,,,,,2,,,,,,,,,,,9,,,,,,,,,4,,,,,5,,,,,,,,24,352,11 -org.mvel2,16,,,,,,,,,,,,,,,,,,,,,,,16,,,,,,,,,,,,,,,,,,,,,,,,,,, -org.openjdk.jmh.runner.options,1,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,, -org.owasp.esapi,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1, -org.pac4j.jwt.config.encryption,4,,,,,4,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -org.pac4j.jwt.config.signature,4,,,,,4,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -org.scijava.log,13,,,,,,,,,,,,,,,,,,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,, -org.slf4j,55,,6,,,,,,,,,,,,,,,,,,,,55,,,,,,,,,,,,,,,,,,,,,,,,,,,2,4 -org.springframework.beans,,,30,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,30 -org.springframework.boot.jdbc,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,, -org.springframework.cache,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,13 -org.springframework.context,,,3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,3, -org.springframework.core.io,3,,,,,,,,,,,,,,,,,,,,,,,,,,2,,,,,,,,,1,,,,,,,,,,,,,,, -org.springframework.data.repository,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1 -org.springframework.http,14,,77,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,14,,,,,,,,,,,,,,67,10 -org.springframework.jdbc.core,19,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,19,,,,,,,,,,,,, -org.springframework.jdbc.datasource,4,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4,,,,,,,,,,,,,,, -org.springframework.jdbc.object,9,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,9,,,,,,,,,,,,, -org.springframework.jndi,1,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -org.springframework.ldap,47,,,,,,,,,,,,,,,,,,,33,,14,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -org.springframework.security.core.userdetails,2,,,,,,1,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -org.springframework.security.web.savedrequest,,6,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6,, -org.springframework.ui,,,32,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,32 -org.springframework.util,3,,142,,,,,,,,,,,,,,,,,,,,,,,,3,,,,,,,,,,,,,,,,,,,,,,,90,52 -org.springframework.validation,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,13, -org.springframework.web.client,13,3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,13,,,,,,,,,,,,,3,, -org.springframework.web.context.request,,8,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,8,, -org.springframework.web.multipart,,12,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,12,13, -org.springframework.web.reactive.function.client,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,,,,,,,,,,,,,,, -org.springframework.web.util,,9,157,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,9,132,25 -org.thymeleaf,2,,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,,,,,,,,,,,2, -org.xml.sax,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1, -org.xmlpull.v1,,3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,3,, -org.yaml.snakeyaml,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1, -play.libs.ws,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,,,,,,,,,,,,,,, -play.mvc,1,13,24,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,13,24, -ratpack.core.form,,,3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,3, -ratpack.core.handling,,6,4,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6,4, -ratpack.core.http,,10,10,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,10,10, -ratpack.exec,,,48,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,48 -ratpack.form,,,3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,3, -ratpack.func,,,35,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,35 -ratpack.handling,,6,4,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6,4, -ratpack.http,,10,10,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,10,10, -ratpack.util,,,35,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,35 -retrofit2,1,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,1, -sun.jvmstat.perfdata.monitor.protocol.local,3,,,,,,,3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -sun.jvmstat.perfdata.monitor.protocol.rmi,1,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -sun.misc,3,,,,,,,3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -sun.net.ftp,5,,,,,,2,3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -sun.net.www.protocol.http,3,,,,,,2,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -sun.security.acl,1,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -sun.security.jgss.krb5,2,,,,,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -sun.security.krb5,9,,,,,3,6,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -sun.security.pkcs,4,,,,,4,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -sun.security.pkcs11,3,,,,,1,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -sun.security.provider,2,,,,,,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -sun.security.ssl,3,,,,,,3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -sun.security.x509,1,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -sun.tools.jconsole,28,,,,,,13,15,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +package,sink,source,summary,sink:bean-validation,sink:command-injection,sink:credentials-key,sink:credentials-password,sink:credentials-username,sink:encryption-iv,sink:encryption-salt,sink:environment-injection,sink:file-content-store,sink:fragment-injection,sink:groovy-injection,sink:hostname-verification,sink:html-injection,sink:information-leak,sink:intent-redirection,sink:jexl-injection,sink:jndi-injection,sink:js-injection,sink:ldap-injection,sink:log-injection,sink:mvel-injection,sink:notification,sink:ognl-injection,sink:path-injection,sink:pending-intents,sink:regex-use,sink:regex-use[-1],sink:regex-use[0],sink:regex-use[],sink:regex-use[f-1],sink:regex-use[f1],sink:regex-use[f],sink:request-forgery,sink:response-splitting,sink:sql-injection,sink:template-injection,sink:trust-boundary-violation,sink:url-forward,sink:url-redirection,sink:xpath-injection,sink:xslt-injection,source:android-external-storage-dir,source:contentprovider,source:database,source:environment,source:file,source:remote,summary:taint,summary:value +actions.osgi,,,6,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6, +android.app,77,,103,,,,,,,,,,11,,,,,7,,,,,,,42,,,17,,,,,,,,,,,,,,,,,,,,,,,18,85 +android.content,24,31,154,,,,,,,,,,,,,,,16,,,,,,,,,,,,,,,,,,,,8,,,,,,,4,27,,,,,63,91 +android.database,59,,41,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,59,,,,,,,,,,,,,41, +android.net,,,60,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,45,15 +android.os,1,2,122,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,2,,,,,,41,81 +android.support.v4.app,11,,,,,,,,,,,,11,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +android.util,6,16,,,,,,,,,,,,,,,,,,,,,6,,,,,,,,,,,,,,,,,,,,,,,,,,,16,, +android.webkit,3,2,,,,,,,,,,,,,,2,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,, +android.widget,,1,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,1, +androidx.core.app,47,,95,,,,,,,,,,,,,,,,,,,,,,41,,,6,,,,,,,,,,,,,,,,,,,,,,,12,83 +androidx.fragment.app,11,,,,,,,,,,,,11,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +androidx.slice,2,5,88,,,,,,,,,,,,,,,,,,,,,,,,,2,,,,,,,,,,,,,,,,,,5,,,,,27,61 +antlr,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1, +ch.ethz.ssh2,2,,,,,,1,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +cn.hutool.core.codec,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1, +com.alibaba.druid.sql,1,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,1, +com.alibaba.fastjson2,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1, +com.amazonaws.auth,2,,,,,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +com.auth0.jwt.algorithms,6,,,,,6,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +com.azure.identity,3,,,,,1,1,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +com.esotericsoftware.kryo.io,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1, +com.esotericsoftware.kryo5.io,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1, +com.fasterxml.jackson.core,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1, +com.fasterxml.jackson.databind,2,,8,,,,,,,,,,,,,,,,,,,,,,,,2,,,,,,,,,,,,,,,,,,,,,,,,8, +com.google.common.base,4,,87,,,,,,,,,,,,,,,,,,,,,,,,,,,,3,1,,,,,,,,,,,,,,,,,,,63,24 +com.google.common.cache,,,17,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,17 +com.google.common.collect,,,553,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,551 +com.google.common.flogger,29,,,,,,,,,,,,,,,,,,,,,,29,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +com.google.common.io,10,,73,,,,,,,,,1,,,,,,,,,,,,,,,9,,,,,,,,,,,,,,,,,,,,,,,,72,1 +com.google.gson,,,52,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,38,14 +com.hubspot.jinjava,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,,,,,,,,,,,,, +com.jcraft.jsch,5,,1,,,,2,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,1, +com.microsoft.sqlserver.jdbc,4,,,,,,2,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +com.mitchellbosecke.pebble,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,,,,,,,,,,,,, +com.mongodb,10,,,,,,4,6,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +com.opensymphony.xwork2,56,,961,,,,,,,,,,,,,,,,,,,,,,,56,,,,,,,,,,,,,,,,,,,,,,,,,867,94 +com.rabbitmq.client,,21,7,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,21,7, +com.sshtools.j2ssh.authentication,3,,,,,,1,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +com.sun.crypto.provider,19,,,,,17,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +com.sun.jndi.ldap,4,,,,,,,4,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +com.sun.net.httpserver,3,,,,,,1,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +com.sun.net.ssl,3,,,,,,3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +com.sun.rowset,3,,,,,,2,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +com.sun.security.auth.module,2,,,,,,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +com.sun.security.ntlm,5,,,,,,3,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +com.sun.security.sasl.digest,3,,,,,,2,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +com.thoughtworks.xstream,1,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,, +com.trilead.ssh2,13,,,,,2,4,7,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +com.unboundid.ldap.sdk,17,,,,,,,,,,,,,,,,,,,,,17,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +com.zaxxer.hikari,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,,,,,,,,,,,,,,,, +flexjson,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1 +freemarker.cache,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,, +freemarker.template,7,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,7,,,,,,,,,,,,, +groovy.lang,26,,,,,,,,,,,,,26,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +groovy.text,1,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +groovy.util,5,,,,,,,,,,,,,5,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +hudson,74,9,2648,,4,,,,,,3,2,,,,4,,,,,,,,,,,55,,,,,,,,,6,,,,,,,,,,,,,5,4,2572,76 +io.jsonwebtoken,,2,4,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,4, +io.netty.bootstrap,3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,3,,,,,,,,,,,,,,,, +io.netty.buffer,,,207,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,130,77 +io.netty.channel,9,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,9,,,,,,,,,,,,,,2,, +io.netty.handler.codec,4,13,259,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,3,,,,,,,,,,,,,,13,143,116 +io.netty.handler.ssl,4,,,,,,,,,,,,,,,,,,,,,,,,,,4,,,,,,,,,,,,,,,,,,,,,,,,, +io.netty.handler.stream,1,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,, +io.netty.resolver,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1, +io.netty.util,2,,23,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,1,,,,,,,,,,,,,,,21,2 +jakarta.activation,2,,2,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,1,,,,,,,,,,,,,,,2, +jakarta.faces.context,2,7,,,,,,,,,,,,,,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,7,, +jakarta.json,,,123,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,100,23 +jakarta.persistence,2,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,,,,,,,,,,,,,1, +jakarta.servlet,2,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,,,,,,,,,1,, +jakarta.ws.rs.client,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,, +jakarta.ws.rs.container,,9,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,9,, +jakarta.ws.rs.core,2,,149,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,,,,,,,,,94,55 +jakarta.xml.bind.attachment,,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,, +java.awt,1,,3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,3 +java.beans,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1, +java.io,51,1,47,,,,,,,,,22,,,,,,,,,,,,,,,29,,,,,,,,,,,,,,,,,,,,,,1,,45,2 +java.lang,38,3,102,,13,,,,,,1,,,,,,,,,,,,8,,,,11,,,4,,,1,,,,,,,,,,,,,,,3,,,59,43 +java.net,23,3,31,,,,1,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,21,,,,,,,,,,,,,,3,31, +java.nio,44,,38,,,,,,,,,5,,,,,,,,,,,,,,,38,,,,,,,,,1,,,,,,,,,,,,,,,38, +java.security,21,,7,,,11,10,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,3,4 +java.sql,15,1,2,,,,1,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,4,,9,,,,,,,,,1,,,,2, +java.util,47,2,529,,,,,,,,,1,,,,,,,,,,,34,,,,2,,,,5,2,,1,2,,,,,,,,,,,,,2,,,49,480 +javafx.scene.web,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,, +javax.activation,2,,7,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,1,,,,,,,,,,,,,,,7, +javax.crypto,19,,4,,,12,3,,2,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4, +javax.faces.context,2,7,,,,,,,,,,,,,,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,7,, +javax.imageio.stream,1,,1,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,1, +javax.jms,,9,57,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,9,57, +javax.json,,,123,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,100,23 +javax.management,2,,1,,,,,,,,,,,,,,,,,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1, +javax.naming,7,,1,,,,,,,,,,,,,,,,,6,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1, +javax.net.ssl,4,,,,,,2,,,,,,,,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +javax.portlet,1,,61,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,61, +javax.print.attribute.standard,2,,,,,,,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +javax.script,1,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,, +javax.security.auth.callback,1,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +javax.security.auth.kerberos,6,,,,,4,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +javax.servlet,9,22,3,,,,,,,,,,,,,,1,,,,,,,,,,1,,,,,,,,,,3,,,2,2,,,,,,,,,22,3, +javax.sql,7,,,,,,4,3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +javax.validation,1,1,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,, +javax.ws.rs.client,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,, +javax.ws.rs.container,,9,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,9,, +javax.ws.rs.core,3,,149,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,2,,,,,,,,,94,55 +javax.xml.bind.attachment,,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,, +javax.xml.transform,2,,6,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,1,,,,,,,6, +javax.xml.xpath,3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,3,,,,,,,,, +jenkins,,,523,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,500,23 +jodd.json,,,10,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,10 +kotlin,16,,1849,,,,,,,,,,,,,,,,,,,,,,,,14,,,,,,,,,2,,,,,,,,,,,,,,,1836,13 +liquibase.database.jvm,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,, +liquibase.statement.core,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,, +net.schmizz.sshj,4,,,,,,2,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +net.sf.json,2,,338,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,,,,,,,,,,,,,,,321,17 +net.sf.saxon.s9api,5,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,5,,,,,,,, +ognl,6,,,,,,,,,,,,,,,,,,,,,,,,,6,,,,,,,,,,,,,,,,,,,,,,,,,, +okhttp3,4,,50,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4,,,,,,,,,,,,,,,23,27 +org.acegisecurity,,,49,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,49, +org.antlr.runtime,1,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,, +org.apache.commons.codec,,,6,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6, +org.apache.commons.collections,,,800,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,17,783 +org.apache.commons.collections4,,,800,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,17,783 +org.apache.commons.compress.archivers.tar,,,4,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4, +org.apache.commons.exec,10,,,,6,,,,,,4,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +org.apache.commons.httpclient.util,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1, +org.apache.commons.io,118,,562,,,,,,,,,4,,,,,,,,,,,,,,,99,,,,,,,,,15,,,,,,,,,,,,,,,548,14 +org.apache.commons.jelly,6,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6,,,,,,,,,,,,,,,, +org.apache.commons.jexl2,15,,,,,,,,,,,,,,,,,,15,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +org.apache.commons.jexl3,15,,,,,,,,,,,,,,,,,,15,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +org.apache.commons.lang,,,767,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,596,171 +org.apache.commons.lang3,6,,425,,,,,,,,,,,,,,,,,,,,,,,,,,6,,,,,,,,,,,,,,,,,,,,,,294,131 +org.apache.commons.logging,6,,,,,,,,,,,,,,,,,,,,,,6,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +org.apache.commons.net,13,12,,,,,2,2,,,,,,,,,,,,,,,,,,,3,,,,,,,,,6,,,,,,,,,,,,,,12,, +org.apache.commons.ognl,6,,,,,,,,,,,,,,,,,,,,,,,,,6,,,,,,,,,,,,,,,,,,,,,,,,,, +org.apache.commons.text,,,272,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,220,52 +org.apache.cxf.catalog,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,, +org.apache.cxf.common.classloader,3,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,2,,,,,,,,,,,,,,,, +org.apache.cxf.common.jaxb,1,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,, +org.apache.cxf.common.logging,6,,,,,,,,,,,,,,,,,,,,,,6,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +org.apache.cxf.configuration.jsse,2,,,,,,,,,,,,,,1,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,, +org.apache.cxf.helpers,10,,,,,,,,,,,,,,,,,,,,,,,,,,5,,,,,,,,,,,,,,,,5,,,,,,,,, +org.apache.cxf.resource,9,,,,,,,,,,,,,,,,,,,,,,,,,,4,,,,,,,,,5,,,,,,,,,,,,,,,, +org.apache.cxf.staxutils,1,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,, +org.apache.cxf.tools.corba.utils,4,,,,,,,,,,,,,,,,,,,,,,,,,,4,,,,,,,,,,,,,,,,,,,,,,,,, +org.apache.cxf.tools.util,10,,,,,,,,,,,,,,,,,,,,,,,,,,10,,,,,,,,,,,,,,,,,,,,,,,,, +org.apache.cxf.transform,3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,3,,,,,,,, +org.apache.directory.ldap.client.api,1,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +org.apache.hadoop.fs,3,,11,,,,,,,,,,,,,,,,,,,,,,,,3,,,,,,,,,,,,,,,,,,,,,,,,11, +org.apache.hadoop.hive.metastore,3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,3,,,,,,,,,,,,,, +org.apache.hadoop.hive.ql.exec,1,,1,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,1, +org.apache.hadoop.hive.ql.metadata,1,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,, +org.apache.hc.client5.http.async.methods,84,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,84,,,,,,,,,,,,,,,, +org.apache.hc.client5.http.classic.methods,37,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,37,,,,,,,,,,,,,,,, +org.apache.hc.client5.http.fluent,19,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,19,,,,,,,,,,,,,,,, +org.apache.hc.core5.benchmark,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,, +org.apache.hc.core5.function,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1, +org.apache.hc.core5.http,73,2,45,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,72,,,,,,,,,,,,,,2,45, +org.apache.hc.core5.net,,,18,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,18, +org.apache.hc.core5.util,,,24,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,18,6 +org.apache.hive.hcatalog.templeton,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,, +org.apache.http,48,3,95,,,,,,,,,,,,,2,,,,,,,,,,,,,,,,,,,,46,,,,,,,,,,,,,,3,86,9 +org.apache.ibatis.jdbc,6,,57,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6,,,,,,,,,,,,,57, +org.apache.ibatis.mapping,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1, +org.apache.log4j,11,,,,,,,,,,,,,,,,,,,,,,11,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +org.apache.logging.log4j,359,,8,,,,,,,,,,,,,,,,,,,,359,,,,,,,,,,,,,,,,,,,,,,,,,,,,4,4 +org.apache.shiro.codec,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1, +org.apache.shiro.jndi,1,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +org.apache.shiro.mgt,1,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +org.apache.sshd.client.session,3,,,,,,1,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +org.apache.struts.beanvalidation.validation.interceptor,,,4,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4, +org.apache.struts2,14,,3873,,,,,,,,,,,,,,,,,,,,,,,11,,,,,,,,,,,,,,3,,,,,,,,,,,3839,34 +org.apache.tools.ant,12,,,,1,,,,,,,,,,,,,,,,,,,,,,11,,,,,,,,,,,,,,,,,,,,,,,,, +org.apache.tools.zip,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1, +org.apache.velocity.app,4,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4,,,,,,,,,,,,, +org.apache.velocity.runtime,4,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4,,,,,,,,,,,,, +org.codehaus.cargo.container.installer,3,,,,,,,,,,,,,,,,,,,,,,,,,,2,,,,,,,,,1,,,,,,,,,,,,,,,, +org.codehaus.groovy.control,1,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +org.dom4j,20,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,20,,,,,,,,, +org.eclipse.jetty.client,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,,,,,,,,,,,,,,,, +org.fusesource.leveldbjni,1,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,, +org.geogebra.web.full.main,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,, +org.gradle.api.file,,,3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,3, +org.hibernate,7,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,7,,,,,,,,,,,,,, +org.influxdb,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,, +org.jboss.logging,324,,,,,,,,,,,,,,,,,,,,,,324,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +org.jdbi.v3.core,6,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6,,,,,,,,,,,,,,,, +org.jenkins.ui.icon,,,49,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,48,1 +org.jenkins.ui.symbol,,,33,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,25,8 +org.jooq,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,, +org.json,,,236,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,198,38 +org.keycloak.models.map.storage,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,, +org.kohsuke.stapler,20,24,363,,,,,,,,,,,,,2,,,,,,,,,,,9,,,,,,,,,3,,,,,1,5,,,,,,,,24,352,11 +org.mvel2,16,,,,,,,,,,,,,,,,,,,,,,,16,,,,,,,,,,,,,,,,,,,,,,,,,,,, +org.openjdk.jmh.runner.options,1,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,, +org.owasp.esapi,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1, +org.pac4j.jwt.config.encryption,4,,,,,4,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +org.pac4j.jwt.config.signature,4,,,,,4,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +org.scijava.log,13,,,,,,,,,,,,,,,,,,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +org.slf4j,55,,6,,,,,,,,,,,,,,,,,,,,55,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,4 +org.springframework.beans,,,30,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,30 +org.springframework.boot.jdbc,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,, +org.springframework.cache,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,13 +org.springframework.context,,,3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,3, +org.springframework.core.io,3,,,,,,,,,,,,,,,,,,,,,,,,,,2,,,,,,,,,1,,,,,,,,,,,,,,,, +org.springframework.data.repository,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1 +org.springframework.http,14,,77,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,14,,,,,,,,,,,,,,,67,10 +org.springframework.jdbc.core,19,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,19,,,,,,,,,,,,,, +org.springframework.jdbc.datasource,4,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4,,,,,,,,,,,,,,,, +org.springframework.jdbc.object,9,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,9,,,,,,,,,,,,,, +org.springframework.jndi,1,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +org.springframework.ldap,47,,,,,,,,,,,,,,,,,,,33,,14,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +org.springframework.security.core.userdetails,2,,,,,,1,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +org.springframework.security.web.savedrequest,,6,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6,, +org.springframework.ui,,,32,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,32 +org.springframework.util,3,,142,,,,,,,,,,,,,,,,,,,,,,,,3,,,,,,,,,,,,,,,,,,,,,,,,90,52 +org.springframework.validation,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,13, +org.springframework.web.client,13,3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,13,,,,,,,,,,,,,,3,, +org.springframework.web.context.request,,8,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,8,, +org.springframework.web.multipart,,12,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,12,13, +org.springframework.web.portlet,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,,,,,,,,,,, +org.springframework.web.reactive.function.client,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,,,,,,,,,,,,,,,, +org.springframework.web.servlet,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,,,,,,,,,,, +org.springframework.web.util,,9,157,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,9,132,25 +org.thymeleaf,2,,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,,,,,,,,,,,,2, +org.xml.sax,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1, +org.xmlpull.v1,,3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,3,, +org.yaml.snakeyaml,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1, +play.libs.ws,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,,,,,,,,,,,,,,,, +play.mvc,1,13,24,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,13,24, +ratpack.core.form,,,3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,3, +ratpack.core.handling,,6,4,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6,4, +ratpack.core.http,,10,10,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,10,10, +ratpack.exec,,,48,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,48 +ratpack.form,,,3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,3, +ratpack.func,,,35,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,35 +ratpack.handling,,6,4,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6,4, +ratpack.http,,10,10,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,10,10, +ratpack.util,,,35,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,35 +retrofit2,1,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,1, +sun.jvmstat.perfdata.monitor.protocol.local,3,,,,,,,3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +sun.jvmstat.perfdata.monitor.protocol.rmi,1,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +sun.misc,3,,,,,,,3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +sun.net.ftp,5,,,,,,2,3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +sun.net.www.protocol.http,3,,,,,,2,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +sun.security.acl,1,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +sun.security.jgss.krb5,2,,,,,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +sun.security.krb5,9,,,,,3,6,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +sun.security.pkcs,4,,,,,4,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +sun.security.pkcs11,3,,,,,1,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +sun.security.provider,2,,,,,,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +sun.security.ssl,3,,,,,,3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +sun.security.x509,1,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +sun.tools.jconsole,28,,,,,,13,15,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, diff --git a/java/documentation/library-coverage/coverage.rst b/java/documentation/library-coverage/coverage.rst index a37dc0a71ef..7168c29ee3e 100644 --- a/java/documentation/library-coverage/coverage.rst +++ b/java/documentation/library-coverage/coverage.rst @@ -18,10 +18,10 @@ Java framework & library support `Google Guava `_,``com.google.common.*``,,730,43,9,,,,, JBoss Logging,``org.jboss.logging``,,,324,,,,,, `JSON-java `_,``org.json``,,236,,,,,,, - Java Standard Library,``java.*``,10,738,239,80,,9,,,25 - Java extensions,"``javax.*``, ``jakarta.*``",67,688,80,5,4,2,1,1,4 + Java Standard Library,``java.*``,10,760,240,80,,9,,,26 + Java extensions,"``javax.*``, ``jakarta.*``",69,688,85,5,4,2,1,1,4 Kotlin Standard Library,``kotlin*``,,1849,16,14,,,,,2 - `Spring `_,``org.springframework.*``,38,481,118,5,,28,14,,35 - Others,"``actions.osgi``, ``antlr``, ``ch.ethz.ssh2``, ``cn.hutool.core.codec``, ``com.alibaba.druid.sql``, ``com.alibaba.fastjson2``, ``com.amazonaws.auth``, ``com.auth0.jwt.algorithms``, ``com.azure.identity``, ``com.esotericsoftware.kryo.io``, ``com.esotericsoftware.kryo5.io``, ``com.fasterxml.jackson.core``, ``com.fasterxml.jackson.databind``, ``com.google.gson``, ``com.hubspot.jinjava``, ``com.jcraft.jsch``, ``com.microsoft.sqlserver.jdbc``, ``com.mitchellbosecke.pebble``, ``com.mongodb``, ``com.opensymphony.xwork2``, ``com.rabbitmq.client``, ``com.sshtools.j2ssh.authentication``, ``com.sun.crypto.provider``, ``com.sun.jndi.ldap``, ``com.sun.net.httpserver``, ``com.sun.net.ssl``, ``com.sun.rowset``, ``com.sun.security.auth.module``, ``com.sun.security.ntlm``, ``com.sun.security.sasl.digest``, ``com.thoughtworks.xstream``, ``com.trilead.ssh2``, ``com.unboundid.ldap.sdk``, ``com.zaxxer.hikari``, ``flexjson``, ``freemarker.cache``, ``freemarker.template``, ``groovy.lang``, ``groovy.text``, ``groovy.util``, ``hudson``, ``io.jsonwebtoken``, ``io.netty.bootstrap``, ``io.netty.buffer``, ``io.netty.channel``, ``io.netty.handler.codec``, ``io.netty.handler.ssl``, ``io.netty.handler.stream``, ``io.netty.resolver``, ``io.netty.util``, ``javafx.scene.web``, ``jenkins``, ``jodd.json``, ``liquibase.database.jvm``, ``liquibase.statement.core``, ``net.schmizz.sshj``, ``net.sf.json``, ``net.sf.saxon.s9api``, ``ognl``, ``okhttp3``, ``org.acegisecurity``, ``org.antlr.runtime``, ``org.apache.commons.codec``, ``org.apache.commons.compress.archivers.tar``, ``org.apache.commons.exec``, ``org.apache.commons.httpclient.util``, ``org.apache.commons.jelly``, ``org.apache.commons.jexl2``, ``org.apache.commons.jexl3``, ``org.apache.commons.lang``, ``org.apache.commons.logging``, ``org.apache.commons.net``, ``org.apache.commons.ognl``, ``org.apache.cxf.catalog``, ``org.apache.cxf.common.classloader``, ``org.apache.cxf.common.jaxb``, ``org.apache.cxf.common.logging``, ``org.apache.cxf.configuration.jsse``, ``org.apache.cxf.helpers``, ``org.apache.cxf.resource``, ``org.apache.cxf.staxutils``, ``org.apache.cxf.tools.corba.utils``, ``org.apache.cxf.tools.util``, ``org.apache.cxf.transform``, ``org.apache.directory.ldap.client.api``, ``org.apache.hadoop.fs``, ``org.apache.hadoop.hive.metastore``, ``org.apache.hadoop.hive.ql.exec``, ``org.apache.hadoop.hive.ql.metadata``, ``org.apache.hc.client5.http.async.methods``, ``org.apache.hc.client5.http.classic.methods``, ``org.apache.hc.client5.http.fluent``, ``org.apache.hive.hcatalog.templeton``, ``org.apache.ibatis.jdbc``, ``org.apache.ibatis.mapping``, ``org.apache.log4j``, ``org.apache.shiro.codec``, ``org.apache.shiro.jndi``, ``org.apache.shiro.mgt``, ``org.apache.sshd.client.session``, ``org.apache.struts.beanvalidation.validation.interceptor``, ``org.apache.struts2``, ``org.apache.tools.ant``, ``org.apache.tools.zip``, ``org.apache.velocity.app``, ``org.apache.velocity.runtime``, ``org.codehaus.cargo.container.installer``, ``org.codehaus.groovy.control``, ``org.dom4j``, ``org.eclipse.jetty.client``, ``org.fusesource.leveldbjni``, ``org.geogebra.web.full.main``, ``org.gradle.api.file``, ``org.hibernate``, ``org.influxdb``, ``org.jdbi.v3.core``, ``org.jenkins.ui.icon``, ``org.jenkins.ui.symbol``, ``org.jooq``, ``org.keycloak.models.map.storage``, ``org.kohsuke.stapler``, ``org.mvel2``, ``org.openjdk.jmh.runner.options``, ``org.owasp.esapi``, ``org.pac4j.jwt.config.encryption``, ``org.pac4j.jwt.config.signature``, ``org.scijava.log``, ``org.slf4j``, ``org.thymeleaf``, ``org.xml.sax``, ``org.xmlpull.v1``, ``org.yaml.snakeyaml``, ``play.libs.ws``, ``play.mvc``, ``ratpack.core.form``, ``ratpack.core.handling``, ``ratpack.core.http``, ``ratpack.exec``, ``ratpack.form``, ``ratpack.func``, ``ratpack.handling``, ``ratpack.http``, ``ratpack.util``, ``retrofit2``, ``sun.jvmstat.perfdata.monitor.protocol.local``, ``sun.jvmstat.perfdata.monitor.protocol.rmi``, ``sun.misc``, ``sun.net.ftp``, ``sun.net.www.protocol.http``, ``sun.security.acl``, ``sun.security.jgss.krb5``, ``sun.security.krb5``, ``sun.security.pkcs``, ``sun.security.pkcs11``, ``sun.security.provider``, ``sun.security.ssl``, ``sun.security.x509``, ``sun.tools.jconsole``",131,10518,893,125,6,22,18,,209 - Totals,,308,18954,2559,338,16,128,33,1,409 + `Spring `_,``org.springframework.*``,38,481,122,5,,28,14,,35 + Others,"``actions.osgi``, ``antlr``, ``ch.ethz.ssh2``, ``cn.hutool.core.codec``, ``com.alibaba.druid.sql``, ``com.alibaba.fastjson2``, ``com.amazonaws.auth``, ``com.auth0.jwt.algorithms``, ``com.azure.identity``, ``com.esotericsoftware.kryo.io``, ``com.esotericsoftware.kryo5.io``, ``com.fasterxml.jackson.core``, ``com.fasterxml.jackson.databind``, ``com.google.gson``, ``com.hubspot.jinjava``, ``com.jcraft.jsch``, ``com.microsoft.sqlserver.jdbc``, ``com.mitchellbosecke.pebble``, ``com.mongodb``, ``com.opensymphony.xwork2``, ``com.rabbitmq.client``, ``com.sshtools.j2ssh.authentication``, ``com.sun.crypto.provider``, ``com.sun.jndi.ldap``, ``com.sun.net.httpserver``, ``com.sun.net.ssl``, ``com.sun.rowset``, ``com.sun.security.auth.module``, ``com.sun.security.ntlm``, ``com.sun.security.sasl.digest``, ``com.thoughtworks.xstream``, ``com.trilead.ssh2``, ``com.unboundid.ldap.sdk``, ``com.zaxxer.hikari``, ``flexjson``, ``freemarker.cache``, ``freemarker.template``, ``groovy.lang``, ``groovy.text``, ``groovy.util``, ``hudson``, ``io.jsonwebtoken``, ``io.netty.bootstrap``, ``io.netty.buffer``, ``io.netty.channel``, ``io.netty.handler.codec``, ``io.netty.handler.ssl``, ``io.netty.handler.stream``, ``io.netty.resolver``, ``io.netty.util``, ``javafx.scene.web``, ``jenkins``, ``jodd.json``, ``liquibase.database.jvm``, ``liquibase.statement.core``, ``net.schmizz.sshj``, ``net.sf.json``, ``net.sf.saxon.s9api``, ``ognl``, ``okhttp3``, ``org.acegisecurity``, ``org.antlr.runtime``, ``org.apache.commons.codec``, ``org.apache.commons.compress.archivers.tar``, ``org.apache.commons.exec``, ``org.apache.commons.httpclient.util``, ``org.apache.commons.jelly``, ``org.apache.commons.jexl2``, ``org.apache.commons.jexl3``, ``org.apache.commons.lang``, ``org.apache.commons.logging``, ``org.apache.commons.net``, ``org.apache.commons.ognl``, ``org.apache.cxf.catalog``, ``org.apache.cxf.common.classloader``, ``org.apache.cxf.common.jaxb``, ``org.apache.cxf.common.logging``, ``org.apache.cxf.configuration.jsse``, ``org.apache.cxf.helpers``, ``org.apache.cxf.resource``, ``org.apache.cxf.staxutils``, ``org.apache.cxf.tools.corba.utils``, ``org.apache.cxf.tools.util``, ``org.apache.cxf.transform``, ``org.apache.directory.ldap.client.api``, ``org.apache.hadoop.fs``, ``org.apache.hadoop.hive.metastore``, ``org.apache.hadoop.hive.ql.exec``, ``org.apache.hadoop.hive.ql.metadata``, ``org.apache.hc.client5.http.async.methods``, ``org.apache.hc.client5.http.classic.methods``, ``org.apache.hc.client5.http.fluent``, ``org.apache.hive.hcatalog.templeton``, ``org.apache.ibatis.jdbc``, ``org.apache.ibatis.mapping``, ``org.apache.log4j``, ``org.apache.shiro.codec``, ``org.apache.shiro.jndi``, ``org.apache.shiro.mgt``, ``org.apache.sshd.client.session``, ``org.apache.struts.beanvalidation.validation.interceptor``, ``org.apache.struts2``, ``org.apache.tools.ant``, ``org.apache.tools.zip``, ``org.apache.velocity.app``, ``org.apache.velocity.runtime``, ``org.codehaus.cargo.container.installer``, ``org.codehaus.groovy.control``, ``org.dom4j``, ``org.eclipse.jetty.client``, ``org.fusesource.leveldbjni``, ``org.geogebra.web.full.main``, ``org.gradle.api.file``, ``org.hibernate``, ``org.influxdb``, ``org.jdbi.v3.core``, ``org.jenkins.ui.icon``, ``org.jenkins.ui.symbol``, ``org.jooq``, ``org.keycloak.models.map.storage``, ``org.kohsuke.stapler``, ``org.mvel2``, ``org.openjdk.jmh.runner.options``, ``org.owasp.esapi``, ``org.pac4j.jwt.config.encryption``, ``org.pac4j.jwt.config.signature``, ``org.scijava.log``, ``org.slf4j``, ``org.thymeleaf``, ``org.xml.sax``, ``org.xmlpull.v1``, ``org.yaml.snakeyaml``, ``play.libs.ws``, ``play.mvc``, ``ratpack.core.form``, ``ratpack.core.handling``, ``ratpack.core.http``, ``ratpack.exec``, ``ratpack.form``, ``ratpack.func``, ``ratpack.handling``, ``ratpack.http``, ``ratpack.util``, ``retrofit2``, ``sun.jvmstat.perfdata.monitor.protocol.local``, ``sun.jvmstat.perfdata.monitor.protocol.rmi``, ``sun.misc``, ``sun.net.ftp``, ``sun.net.www.protocol.http``, ``sun.security.acl``, ``sun.security.jgss.krb5``, ``sun.security.krb5``, ``sun.security.pkcs``, ``sun.security.pkcs11``, ``sun.security.provider``, ``sun.security.ssl``, ``sun.security.x509``, ``sun.tools.jconsole``",131,10518,893,125,6,22,18,,208 + Totals,,310,18976,2569,338,16,128,33,1,409 diff --git a/java/kotlin-extractor/src/main/java/com/semmle/util/process/Env.java b/java/kotlin-extractor/src/main/java/com/semmle/util/process/Env.java index 2e00bb61b32..0ce3d42c14f 100644 --- a/java/kotlin-extractor/src/main/java/com/semmle/util/process/Env.java +++ b/java/kotlin-extractor/src/main/java/com/semmle/util/process/Env.java @@ -274,8 +274,6 @@ public class Env { /** * The location of the snapshot being built. */ - ODASA_SNAPSHOT, - ODASA_SNAPSHOT_NAME, ODASA_SRC, ODASA_DB, ODASA_BUILD_ERROR_DIR, diff --git a/java/ql/automodel/src/CHANGELOG.md b/java/ql/automodel/src/CHANGELOG.md index 4a3c54adb38..af83bbb0700 100644 --- a/java/ql/automodel/src/CHANGELOG.md +++ b/java/ql/automodel/src/CHANGELOG.md @@ -1,3 +1,19 @@ +## 0.0.20 + +No user-facing changes. + +## 0.0.19 + +No user-facing changes. + +## 0.0.18 + +No user-facing changes. + +## 0.0.17 + +No user-facing changes. + ## 0.0.16 No user-facing changes. diff --git a/java/ql/automodel/src/change-notes/released/0.0.17.md b/java/ql/automodel/src/change-notes/released/0.0.17.md new file mode 100644 index 00000000000..62cc89030a6 --- /dev/null +++ b/java/ql/automodel/src/change-notes/released/0.0.17.md @@ -0,0 +1,3 @@ +## 0.0.17 + +No user-facing changes. diff --git a/java/ql/automodel/src/change-notes/released/0.0.18.md b/java/ql/automodel/src/change-notes/released/0.0.18.md new file mode 100644 index 00000000000..86c60b8abe7 --- /dev/null +++ b/java/ql/automodel/src/change-notes/released/0.0.18.md @@ -0,0 +1,3 @@ +## 0.0.18 + +No user-facing changes. diff --git a/java/ql/automodel/src/change-notes/released/0.0.19.md b/java/ql/automodel/src/change-notes/released/0.0.19.md new file mode 100644 index 00000000000..914e4c9074d --- /dev/null +++ b/java/ql/automodel/src/change-notes/released/0.0.19.md @@ -0,0 +1,3 @@ +## 0.0.19 + +No user-facing changes. diff --git a/java/ql/automodel/src/change-notes/released/0.0.20.md b/java/ql/automodel/src/change-notes/released/0.0.20.md new file mode 100644 index 00000000000..98daf20a59a --- /dev/null +++ b/java/ql/automodel/src/change-notes/released/0.0.20.md @@ -0,0 +1,3 @@ +## 0.0.20 + +No user-facing changes. diff --git a/java/ql/automodel/src/codeql-pack.release.yml b/java/ql/automodel/src/codeql-pack.release.yml index a49f7be4cff..d2e86745bca 100644 --- a/java/ql/automodel/src/codeql-pack.release.yml +++ b/java/ql/automodel/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.0.16 +lastReleaseVersion: 0.0.20 diff --git a/java/ql/automodel/src/qlpack.yml b/java/ql/automodel/src/qlpack.yml index 898239be098..f8e68acb110 100644 --- a/java/ql/automodel/src/qlpack.yml +++ b/java/ql/automodel/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-automodel-queries -version: 0.0.17-dev +version: 0.0.21-dev groups: - java - automodel diff --git a/java/ql/consistency-queries/children.ql b/java/ql/consistency-queries/children.ql index 755c680e790..a79edc909af 100644 --- a/java/ql/consistency-queries/children.ql +++ b/java/ql/consistency-queries/children.ql @@ -49,6 +49,15 @@ predicate gapInChildren(Element e, int i) { not e instanceof Annotation and // Pattern case statements legitimately have a TypeAccess (-2) and a pattern (0) but not a rule (-1) not (i = -1 and e instanceof PatternCase and not e.(PatternCase).isRule()) and + // Pattern case statements can have a gap at -3 when they have more than one pattern but no guard. + not ( + i = -3 and count(e.(PatternCase).getAPattern()) > 1 and not exists(e.(PatternCase).getGuard()) + ) and + // Pattern case statements may have some missing type accesses, depending on the nature of the direct child + not ( + (i = -2 or i < -4) and + e instanceof PatternCase + ) and // Instanceof with a record pattern is not expected to have a type access in position 1 not (i = 1 and e.(InstanceOfExpr).getPattern() instanceof RecordPatternExpr) and // RecordPatternExpr extracts type-accesses only for its LocalVariableDeclExpr children diff --git a/java/ql/integration-tests/all-platforms/java/buildless-erroneous/diagnostics.expected b/java/ql/integration-tests/all-platforms/java/buildless-erroneous/diagnostics.expected index 03978511bb7..90aa56bf3f6 100644 --- a/java/ql/integration-tests/all-platforms/java/buildless-erroneous/diagnostics.expected +++ b/java/ql/integration-tests/all-platforms/java/buildless-erroneous/diagnostics.expected @@ -4,7 +4,7 @@ "source": { "extractorName": "java", "id": "java/autobuilder/buildless/no-build-tool-advice", - "name": "Java buildless mode found no usable build tool" + "name": "Java analysis found no usable build tool" }, "visibility": { "cliSummaryTable": true, @@ -13,26 +13,12 @@ } } { - "markdownMessage": "Java buildless extraction has completed.", - "severity": "unknown", - "source": { - "extractorName": "java", - "id": "java/autobuilder/buildless/complete", - "name": "Java buildless extraction completed" - }, - "visibility": { - "cliSummaryTable": true, - "statusPage": false, - "telemetry": true - } -} -{ - "markdownMessage": "Java buildless mode used the system default JDK.", + "markdownMessage": "Java analysis used the system default JDK.", "severity": "unknown", "source": { "extractorName": "java", "id": "java/autobuilder/buildless/jdk-system-default", - "name": "Java buildless mode used the system default JDK" + "name": "Java analysis used the system default JDK" }, "visibility": { "cliSummaryTable": true, @@ -41,12 +27,26 @@ } } { - "markdownMessage": "Java was extracted in buildless mode. This means that all Java source in the working directory will be scanned, with build tools such as Maven and Gradle only contributing information about external dependencies.", + "markdownMessage": "Java analysis with build-mode 'none' completed.", + "severity": "unknown", + "source": { + "extractorName": "java", + "id": "java/autobuilder/buildless/complete", + "name": "Java analysis with build-mode 'none' completed" + }, + "visibility": { + "cliSummaryTable": true, + "statusPage": false, + "telemetry": true + } +} +{ + "markdownMessage": "Java was extracted with build-mode set to 'none'. This means that all Java source in the working directory will be scanned, with build tools such as Maven and Gradle only contributing information about external dependencies.", "severity": "note", "source": { "extractorName": "java", "id": "java/autobuilder/buildless/mode-active", - "name": "Java was extracted in buildless mode" + "name": "Java was extracted with build-mode set to 'none'" }, "visibility": { "cliSummaryTable": true, diff --git a/java/ql/integration-tests/all-platforms/java/buildless-gradle/diagnostics.expected b/java/ql/integration-tests/all-platforms/java/buildless-gradle/diagnostics.expected index 5d8a00c5578..337fa933808 100644 --- a/java/ql/integration-tests/all-platforms/java/buildless-gradle/diagnostics.expected +++ b/java/ql/integration-tests/all-platforms/java/buildless-gradle/diagnostics.expected @@ -1,24 +1,10 @@ { - "markdownMessage": "Java buildless extraction has completed.", - "severity": "unknown", - "source": { - "extractorName": "java", - "id": "java/autobuilder/buildless/complete", - "name": "Java buildless extraction completed" - }, - "visibility": { - "cliSummaryTable": true, - "statusPage": false, - "telemetry": true - } -} -{ - "markdownMessage": "Java buildless mode used build tool Gradle to pick a JDK version and/or to recommend external dependencies.", + "markdownMessage": "Java analysis used build tool Gradle to pick a JDK version and/or to recommend external dependencies.", "severity": "unknown", "source": { "extractorName": "java", "id": "java/autobuilder/buildless/using-build-tool-advice", - "name": "Java buildless mode used build tool Gradle to pick a JDK version and/or to recommend external dependencies" + "name": "Java analysis used build tool Gradle to pick a JDK version and/or to recommend external dependencies" }, "visibility": { "cliSummaryTable": true, @@ -27,12 +13,12 @@ } } { - "markdownMessage": "Java buildless mode used the system default JDK.", + "markdownMessage": "Java analysis used the system default JDK.", "severity": "unknown", "source": { "extractorName": "java", "id": "java/autobuilder/buildless/jdk-system-default", - "name": "Java buildless mode used the system default JDK" + "name": "Java analysis used the system default JDK" }, "visibility": { "cliSummaryTable": true, @@ -41,12 +27,26 @@ } } { - "markdownMessage": "Java was extracted in buildless mode. This means that all Java source in the working directory will be scanned, with build tools such as Maven and Gradle only contributing information about external dependencies.", + "markdownMessage": "Java analysis with build-mode 'none' completed.", + "severity": "unknown", + "source": { + "extractorName": "java", + "id": "java/autobuilder/buildless/complete", + "name": "Java analysis with build-mode 'none' completed" + }, + "visibility": { + "cliSummaryTable": true, + "statusPage": false, + "telemetry": true + } +} +{ + "markdownMessage": "Java was extracted with build-mode set to 'none'. This means that all Java source in the working directory will be scanned, with build tools such as Maven and Gradle only contributing information about external dependencies.", "severity": "note", "source": { "extractorName": "java", "id": "java/autobuilder/buildless/mode-active", - "name": "Java was extracted in buildless mode" + "name": "Java was extracted with build-mode set to 'none'" }, "visibility": { "cliSummaryTable": true, @@ -60,7 +60,7 @@ "source": { "extractorName": "java", "id": "java/autobuilder/buildless/depgraph-provided-by-gradle", - "name": "Java buildless mode extracted precise dependency graph information from tool Gradle" + "name": "Java analysis extracted precise dependency graph information from tool Gradle" }, "visibility": { "cliSummaryTable": true, diff --git a/java/ql/integration-tests/all-platforms/java/buildless-maven-multimodule/buildless-fetches.expected b/java/ql/integration-tests/all-platforms/java/buildless-maven-multimodule/buildless-fetches.expected index dd0cd5034a0..e4a95afc713 100644 --- a/java/ql/integration-tests/all-platforms/java/buildless-maven-multimodule/buildless-fetches.expected +++ b/java/ql/integration-tests/all-platforms/java/buildless-maven-multimodule/buildless-fetches.expected @@ -9,7 +9,10 @@ https://repo.maven.apache.org/maven2/de/knutwalker/rx-redis-example_2.11/0.1.2/r https://repo.maven.apache.org/maven2/de/knutwalker/rx-redis-java-example_2.11/0.1.2/rx-redis-java-example_2.11-0.1.2.jar https://repo.maven.apache.org/maven2/io/github/scrollsyou/example-spring-boot-starter/1.0.0/example-spring-boot-starter-1.0.0.jar https://repo.maven.apache.org/maven2/io/streamnative/com/example/maven-central-template/server/3.0.0/server-3.0.0.jar +https://repo.maven.apache.org/maven2/junit/junit/4.11/junit-4.11.jar https://repo.maven.apache.org/maven2/no/nav/security/token-validation-ktor-demo/3.1.0/token-validation-ktor-demo-3.1.0.jar +https://repo.maven.apache.org/maven2/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar +https://repo.maven.apache.org/maven2/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3.jar https://repo.maven.apache.org/maven2/org/minijax/minijax-example-fileupload/0.5.10/minijax-example-fileupload-0.5.10.jar https://repo.maven.apache.org/maven2/org/minijax/minijax-example-inject/0.5.10/minijax-example-inject-0.5.10.jar https://repo.maven.apache.org/maven2/org/minijax/minijax-example-json/0.5.10/minijax-example-json-0.5.10.jar @@ -22,6 +25,3 @@ https://repo.maven.apache.org/maven2/org/minijax/minijax-example-websocket/0.5.1 https://repo.maven.apache.org/maven2/org/scalamock/scalamock-examples_2.10/3.6.0/scalamock-examples_2.10-3.6.0.jar https://repo.maven.apache.org/maven2/org/somda/sdc/glue-examples/4.0.0/glue-examples-4.0.0.jar https://repo.maven.apache.org/maven2/us/fatehi/schemacrawler-examplecode/16.20.2/schemacrawler-examplecode-16.20.2.jar -https://repo1.maven.org/maven2/junit/junit/4.11/junit-4.11.jar -https://repo1.maven.org/maven2/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar -https://repo1.maven.org/maven2/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3.jar diff --git a/java/ql/integration-tests/all-platforms/java/buildless-maven-multimodule/diagnostics.expected b/java/ql/integration-tests/all-platforms/java/buildless-maven-multimodule/diagnostics.expected index 77e259ae537..1058e1528f9 100644 --- a/java/ql/integration-tests/all-platforms/java/buildless-maven-multimodule/diagnostics.expected +++ b/java/ql/integration-tests/all-platforms/java/buildless-maven-multimodule/diagnostics.expected @@ -1,24 +1,10 @@ { - "markdownMessage": "Java buildless extraction has completed.", - "severity": "unknown", - "source": { - "extractorName": "java", - "id": "java/autobuilder/buildless/complete", - "name": "Java buildless extraction completed" - }, - "visibility": { - "cliSummaryTable": true, - "statusPage": false, - "telemetry": true - } -} -{ - "markdownMessage": "Java buildless mode used build tool Maven to pick a JDK version and/or to recommend external dependencies.", + "markdownMessage": "Java analysis used build tool Maven to pick a JDK version and/or to recommend external dependencies.", "severity": "unknown", "source": { "extractorName": "java", "id": "java/autobuilder/buildless/using-build-tool-advice", - "name": "Java buildless mode used build tool Maven to pick a JDK version and/or to recommend external dependencies" + "name": "Java analysis used build tool Maven to pick a JDK version and/or to recommend external dependencies" }, "visibility": { "cliSummaryTable": true, @@ -27,12 +13,12 @@ } } { - "markdownMessage": "Java buildless mode used the system default JDK.", + "markdownMessage": "Java analysis used the system default JDK.", "severity": "unknown", "source": { "extractorName": "java", "id": "java/autobuilder/buildless/jdk-system-default", - "name": "Java buildless mode used the system default JDK" + "name": "Java analysis used the system default JDK" }, "visibility": { "cliSummaryTable": true, @@ -41,12 +27,26 @@ } } { - "markdownMessage": "Java was extracted in buildless mode. This means that all Java source in the working directory will be scanned, with build tools such as Maven and Gradle only contributing information about external dependencies.", + "markdownMessage": "Java analysis with build-mode 'none' completed.", + "severity": "unknown", + "source": { + "extractorName": "java", + "id": "java/autobuilder/buildless/complete", + "name": "Java analysis with build-mode 'none' completed" + }, + "visibility": { + "cliSummaryTable": true, + "statusPage": false, + "telemetry": true + } +} +{ + "markdownMessage": "Java was extracted with build-mode set to 'none'. This means that all Java source in the working directory will be scanned, with build tools such as Maven and Gradle only contributing information about external dependencies.", "severity": "note", "source": { "extractorName": "java", "id": "java/autobuilder/buildless/mode-active", - "name": "Java was extracted in buildless mode" + "name": "Java was extracted with build-mode set to 'none'" }, "visibility": { "cliSummaryTable": true, @@ -60,7 +60,7 @@ "source": { "extractorName": "java", "id": "java/autobuilder/buildless/depgraph-provided-by-maven", - "name": "Java buildless mode extracted precise dependency graph information from tool Maven" + "name": "Java analysis extracted precise dependency graph information from tool Maven" }, "visibility": { "cliSummaryTable": true, diff --git a/java/ql/integration-tests/all-platforms/java/buildless-maven/buildless-fetches.expected b/java/ql/integration-tests/all-platforms/java/buildless-maven/buildless-fetches.expected index e3710cc4cb9..49120865e8d 100644 --- a/java/ql/integration-tests/all-platforms/java/buildless-maven/buildless-fetches.expected +++ b/java/ql/integration-tests/all-platforms/java/buildless-maven/buildless-fetches.expected @@ -9,7 +9,9 @@ https://repo.maven.apache.org/maven2/de/knutwalker/rx-redis-example_2.11/0.1.2/r https://repo.maven.apache.org/maven2/de/knutwalker/rx-redis-java-example_2.11/0.1.2/rx-redis-java-example_2.11-0.1.2.jar https://repo.maven.apache.org/maven2/io/github/scrollsyou/example-spring-boot-starter/1.0.0/example-spring-boot-starter-1.0.0.jar https://repo.maven.apache.org/maven2/io/streamnative/com/example/maven-central-template/server/3.0.0/server-3.0.0.jar +https://repo.maven.apache.org/maven2/junit/junit/4.11/junit-4.11.jar https://repo.maven.apache.org/maven2/no/nav/security/token-validation-ktor-demo/3.1.0/token-validation-ktor-demo-3.1.0.jar +https://repo.maven.apache.org/maven2/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3.jar https://repo.maven.apache.org/maven2/org/minijax/minijax-example-fileupload/0.5.10/minijax-example-fileupload-0.5.10.jar https://repo.maven.apache.org/maven2/org/minijax/minijax-example-inject/0.5.10/minijax-example-inject-0.5.10.jar https://repo.maven.apache.org/maven2/org/minijax/minijax-example-json/0.5.10/minijax-example-json-0.5.10.jar @@ -22,5 +24,3 @@ https://repo.maven.apache.org/maven2/org/minijax/minijax-example-websocket/0.5.1 https://repo.maven.apache.org/maven2/org/scalamock/scalamock-examples_2.10/3.6.0/scalamock-examples_2.10-3.6.0.jar https://repo.maven.apache.org/maven2/org/somda/sdc/glue-examples/4.0.0/glue-examples-4.0.0.jar https://repo.maven.apache.org/maven2/us/fatehi/schemacrawler-examplecode/16.20.2/schemacrawler-examplecode-16.20.2.jar -https://repo1.maven.org/maven2/junit/junit/4.11/junit-4.11.jar -https://repo1.maven.org/maven2/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3.jar diff --git a/java/ql/integration-tests/all-platforms/java/buildless-maven/diagnostics.expected b/java/ql/integration-tests/all-platforms/java/buildless-maven/diagnostics.expected index 0228a1165a9..f3c89bb842a 100644 --- a/java/ql/integration-tests/all-platforms/java/buildless-maven/diagnostics.expected +++ b/java/ql/integration-tests/all-platforms/java/buildless-maven/diagnostics.expected @@ -1,24 +1,10 @@ { - "markdownMessage": "Java buildless extraction has completed.", - "severity": "unknown", - "source": { - "extractorName": "java", - "id": "java/autobuilder/buildless/complete", - "name": "Java buildless extraction completed" - }, - "visibility": { - "cliSummaryTable": true, - "statusPage": false, - "telemetry": true - } -} -{ - "markdownMessage": "Java buildless mode used build tool Maven to pick a JDK version and/or to recommend external dependencies.", + "markdownMessage": "Java analysis used build tool Maven to pick a JDK version and/or to recommend external dependencies.", "severity": "unknown", "source": { "extractorName": "java", "id": "java/autobuilder/buildless/using-build-tool-advice", - "name": "Java buildless mode used build tool Maven to pick a JDK version and/or to recommend external dependencies" + "name": "Java analysis used build tool Maven to pick a JDK version and/or to recommend external dependencies" }, "visibility": { "cliSummaryTable": true, @@ -27,12 +13,12 @@ } } { - "markdownMessage": "Java buildless mode used the system default JDK.", + "markdownMessage": "Java analysis used the system default JDK.", "severity": "unknown", "source": { "extractorName": "java", "id": "java/autobuilder/buildless/jdk-system-default", - "name": "Java buildless mode used the system default JDK" + "name": "Java analysis used the system default JDK" }, "visibility": { "cliSummaryTable": true, @@ -41,12 +27,26 @@ } } { - "markdownMessage": "Java was extracted in buildless mode. This means that all Java source in the working directory will be scanned, with build tools such as Maven and Gradle only contributing information about external dependencies.", + "markdownMessage": "Java analysis with build-mode 'none' completed.", + "severity": "unknown", + "source": { + "extractorName": "java", + "id": "java/autobuilder/buildless/complete", + "name": "Java analysis with build-mode 'none' completed" + }, + "visibility": { + "cliSummaryTable": true, + "statusPage": false, + "telemetry": true + } +} +{ + "markdownMessage": "Java was extracted with build-mode set to 'none'. This means that all Java source in the working directory will be scanned, with build tools such as Maven and Gradle only contributing information about external dependencies.", "severity": "note", "source": { "extractorName": "java", "id": "java/autobuilder/buildless/mode-active", - "name": "Java was extracted in buildless mode" + "name": "Java was extracted with build-mode set to 'none'" }, "visibility": { "cliSummaryTable": true, @@ -60,7 +60,7 @@ "source": { "extractorName": "java", "id": "java/autobuilder/buildless/depgraph-provided-by-maven", - "name": "Java buildless mode extracted precise dependency graph information from tool Maven" + "name": "Java analysis extracted precise dependency graph information from tool Maven" }, "visibility": { "cliSummaryTable": true, diff --git a/java/ql/integration-tests/all-platforms/java/buildless-sibling-projects/buildless-fetches.expected b/java/ql/integration-tests/all-platforms/java/buildless-sibling-projects/buildless-fetches.expected index 44842823621..79b12c2919e 100644 --- a/java/ql/integration-tests/all-platforms/java/buildless-sibling-projects/buildless-fetches.expected +++ b/java/ql/integration-tests/all-platforms/java/buildless-sibling-projects/buildless-fetches.expected @@ -12,6 +12,7 @@ https://repo.maven.apache.org/maven2/de/knutwalker/rx-redis-example_2.11/0.1.2/r https://repo.maven.apache.org/maven2/de/knutwalker/rx-redis-java-example_2.11/0.1.2/rx-redis-java-example_2.11-0.1.2.jar https://repo.maven.apache.org/maven2/io/github/scrollsyou/example-spring-boot-starter/1.0.0/example-spring-boot-starter-1.0.0.jar https://repo.maven.apache.org/maven2/io/streamnative/com/example/maven-central-template/server/3.0.0/server-3.0.0.jar +https://repo.maven.apache.org/maven2/junit/junit/4.11/junit-4.11.jar https://repo.maven.apache.org/maven2/no/nav/security/token-validation-ktor-demo/3.1.0/token-validation-ktor-demo-3.1.0.jar https://repo.maven.apache.org/maven2/org/minijax/minijax-example-fileupload/0.5.10/minijax-example-fileupload-0.5.10.jar https://repo.maven.apache.org/maven2/org/minijax/minijax-example-inject/0.5.10/minijax-example-inject-0.5.10.jar @@ -25,4 +26,3 @@ https://repo.maven.apache.org/maven2/org/minijax/minijax-example-websocket/0.5.1 https://repo.maven.apache.org/maven2/org/scalamock/scalamock-examples_2.10/3.6.0/scalamock-examples_2.10-3.6.0.jar https://repo.maven.apache.org/maven2/org/somda/sdc/glue-examples/4.0.0/glue-examples-4.0.0.jar https://repo.maven.apache.org/maven2/us/fatehi/schemacrawler-examplecode/16.20.2/schemacrawler-examplecode-16.20.2.jar -https://repo1.maven.org/maven2/junit/junit/4.11/junit-4.11.jar diff --git a/java/ql/integration-tests/all-platforms/java/buildless-sibling-projects/diagnostics.expected b/java/ql/integration-tests/all-platforms/java/buildless-sibling-projects/diagnostics.expected index c150b2135f3..b3df8a700c3 100644 --- a/java/ql/integration-tests/all-platforms/java/buildless-sibling-projects/diagnostics.expected +++ b/java/ql/integration-tests/all-platforms/java/buildless-sibling-projects/diagnostics.expected @@ -1,24 +1,10 @@ { - "markdownMessage": "Java buildless extraction has completed.", - "severity": "unknown", - "source": { - "extractorName": "java", - "id": "java/autobuilder/buildless/complete", - "name": "Java buildless extraction completed" - }, - "visibility": { - "cliSummaryTable": true, - "statusPage": false, - "telemetry": true - } -} -{ - "markdownMessage": "Java buildless mode dropped the following dependencies because a sibling project depends on a higher version:\n\n* `junit/junit-4.11`", + "markdownMessage": "Java analysis dropped the following dependencies because a sibling project depends on a higher version:\n\n* `junit/junit-4.11`", "severity": "unknown", "source": { "extractorName": "java", "id": "java/autobuilder/buildless/dependencies-disagree", - "name": "Java buildless mode found sibling projects that disagree about some of their direct dependency versions" + "name": "Java analysis found sibling projects that disagree about some of their direct dependency versions" }, "visibility": { "cliSummaryTable": true, @@ -27,12 +13,12 @@ } } { - "markdownMessage": "Java buildless mode used JDK version 11.0.0 as recommended by build tool Gradle", + "markdownMessage": "Java analysis used JDK version 11.0.0 as recommended by build tool Gradle", "severity": "unknown", "source": { "extractorName": "java", "id": "java/autobuilder/buildless/jdk-selected", - "name": "Java buildless mode used JDK version 11.0.0 as recommended by build tool Gradle" + "name": "Java analysis used JDK version 11.0.0 as recommended by build tool Gradle" }, "visibility": { "cliSummaryTable": true, @@ -41,12 +27,12 @@ } } { - "markdownMessage": "Java buildless mode used the highest recommended Java version out of:\n\n* Gradle at `/./gradle-sample` recommends version 8.0.0\n* Gradle at `/./gradle-sample2` recommends version 11.0.0", + "markdownMessage": "Java analysis used the highest recommended Java version out of:\n\n* Gradle at `/./gradle-sample` recommends version 8.0.0\n* Gradle at `/./gradle-sample2` recommends version 11.0.0", "severity": "unknown", "source": { "extractorName": "java", "id": "java/autobuilder/buildless/jdk-version-disagree", - "name": "Java buildless mode found sibling projects that disagree about the needed Java version. The highest recommended version will be used" + "name": "Java analysis found sibling projects that disagree about the needed Java version. The highest recommended version will be used" }, "visibility": { "cliSummaryTable": true, @@ -55,12 +41,12 @@ } } { - "markdownMessage": "Java buildless mode will combine recommended JDK versions and/or external dependency information from:\n\n* Gradle at `/./gradle-sample`\n* Gradle at `/./gradle-sample2`\n* Maven at `/./maven-project-1`\n* Maven at `/./maven-project-2`", + "markdownMessage": "Java analysis will combine recommended JDK versions and/or external dependency information from:\n\n* Gradle at `/./gradle-sample`\n* Gradle at `/./gradle-sample2`\n* Maven at `/./maven-project-1`\n* Maven at `/./maven-project-2`", "severity": "unknown", "source": { "extractorName": "java", "id": "java/autobuilder/buildless/using-build-tool-advice-multiple", - "name": "Java buildless mode found several sibling projects and will combine their recommended JDK versions and/or external dependency information" + "name": "Java analysis found several sibling projects and will combine their recommended JDK versions and/or external dependency information" }, "visibility": { "cliSummaryTable": true, @@ -69,12 +55,26 @@ } } { - "markdownMessage": "Java was extracted in buildless mode. This means that all Java source in the working directory will be scanned, with build tools such as Maven and Gradle only contributing information about external dependencies.", + "markdownMessage": "Java analysis with build-mode 'none' completed.", + "severity": "unknown", + "source": { + "extractorName": "java", + "id": "java/autobuilder/buildless/complete", + "name": "Java analysis with build-mode 'none' completed" + }, + "visibility": { + "cliSummaryTable": true, + "statusPage": false, + "telemetry": true + } +} +{ + "markdownMessage": "Java was extracted with build-mode set to 'none'. This means that all Java source in the working directory will be scanned, with build tools such as Maven and Gradle only contributing information about external dependencies.", "severity": "note", "source": { "extractorName": "java", "id": "java/autobuilder/buildless/mode-active", - "name": "Java was extracted in buildless mode" + "name": "Java was extracted with build-mode set to 'none'" }, "visibility": { "cliSummaryTable": true, @@ -88,7 +88,7 @@ "source": { "extractorName": "java", "id": "java/autobuilder/buildless/depgraph-provided-by-multiple", - "name": "Java buildless mode extracted precise dependency graph information from multiple build tools" + "name": "Java analysis extracted precise dependency graph information from multiple build tools" }, "visibility": { "cliSummaryTable": true, diff --git a/java/ql/integration-tests/all-platforms/java/buildless/diagnostics.expected b/java/ql/integration-tests/all-platforms/java/buildless/diagnostics.expected index 03978511bb7..90aa56bf3f6 100644 --- a/java/ql/integration-tests/all-platforms/java/buildless/diagnostics.expected +++ b/java/ql/integration-tests/all-platforms/java/buildless/diagnostics.expected @@ -4,7 +4,7 @@ "source": { "extractorName": "java", "id": "java/autobuilder/buildless/no-build-tool-advice", - "name": "Java buildless mode found no usable build tool" + "name": "Java analysis found no usable build tool" }, "visibility": { "cliSummaryTable": true, @@ -13,26 +13,12 @@ } } { - "markdownMessage": "Java buildless extraction has completed.", - "severity": "unknown", - "source": { - "extractorName": "java", - "id": "java/autobuilder/buildless/complete", - "name": "Java buildless extraction completed" - }, - "visibility": { - "cliSummaryTable": true, - "statusPage": false, - "telemetry": true - } -} -{ - "markdownMessage": "Java buildless mode used the system default JDK.", + "markdownMessage": "Java analysis used the system default JDK.", "severity": "unknown", "source": { "extractorName": "java", "id": "java/autobuilder/buildless/jdk-system-default", - "name": "Java buildless mode used the system default JDK" + "name": "Java analysis used the system default JDK" }, "visibility": { "cliSummaryTable": true, @@ -41,12 +27,26 @@ } } { - "markdownMessage": "Java was extracted in buildless mode. This means that all Java source in the working directory will be scanned, with build tools such as Maven and Gradle only contributing information about external dependencies.", + "markdownMessage": "Java analysis with build-mode 'none' completed.", + "severity": "unknown", + "source": { + "extractorName": "java", + "id": "java/autobuilder/buildless/complete", + "name": "Java analysis with build-mode 'none' completed" + }, + "visibility": { + "cliSummaryTable": true, + "statusPage": false, + "telemetry": true + } +} +{ + "markdownMessage": "Java was extracted with build-mode set to 'none'. This means that all Java source in the working directory will be scanned, with build tools such as Maven and Gradle only contributing information about external dependencies.", "severity": "note", "source": { "extractorName": "java", "id": "java/autobuilder/buildless/mode-active", - "name": "Java was extracted in buildless mode" + "name": "Java was extracted with build-mode set to 'none'" }, "visibility": { "cliSummaryTable": true, diff --git a/java/ql/integration-tests/all-platforms/kotlin/default-parameter-mad-flow/test.ext.yml b/java/ql/integration-tests/all-platforms/kotlin/default-parameter-mad-flow/test.ext.yml index 1632b5a8080..adca3ff50ba 100644 --- a/java/ql/integration-tests/all-platforms/kotlin/default-parameter-mad-flow/test.ext.yml +++ b/java/ql/integration-tests/all-platforms/kotlin/default-parameter-mad-flow/test.ext.yml @@ -1,6 +1,6 @@ extensions: - addsTo: - pack: integrationtest-default-parameter-mad-flow + pack: codeql/java-all extensible: summaryModel data: - ["", "ConstructorWithDefaults", True, "ConstructorWithDefaults", "(int,int)", "", "Argument[0]", "Argument[this]", "taint", "manual"] @@ -11,14 +11,14 @@ extensions: - ["", "LibClass", True, "multiParameterTest", "(int,int,int,int)", "", "Argument[0..1]", "ReturnValue", "value", "manual"] - ["", "LibClass", True, "multiParameterExtensionTest", "(int,int,int,int)", "", "Argument[0, 1]", "ReturnValue", "value", "manual"] - addsTo: - pack: integrationtest-default-parameter-mad-flow + pack: codeql/java-all extensible: sourceModel data: - ["", "LibKt", True, "topLevelArgSource", "(SomeToken,int)", "", "Argument[0]", "kotlinMadFlowTest", "manual"] - ["", "LibKt", True, "extensionArgSource", "(String,SomeToken,int)", "", "Argument[1]", "kotlinMadFlowTest", "manual"] - ["", "SourceClass", True, "memberArgSource", "(SomeToken,int)", "", "Argument[0]", "kotlinMadFlowTest", "manual"] - addsTo: - pack: integrationtest-default-parameter-mad-flow + pack: codeql/java-all extensible: sinkModel data: - ["", "SinkClass", True, "SinkClass", "(int,int)", "", "Argument[0]", "kotlinMadFlowTest", "manual"] diff --git a/java/ql/lib/CHANGELOG.md b/java/ql/lib/CHANGELOG.md index d369cbdc931..36c5ca2a6a6 100644 --- a/java/ql/lib/CHANGELOG.md +++ b/java/ql/lib/CHANGELOG.md @@ -1,3 +1,35 @@ +## 0.9.0 + +### Breaking Changes + +* The Java extractor no longer supports the `ODASA_SNAPSHOT` legacy environment variable. + +### Minor Analysis Improvements + +* Increased the precision of some dataflow models of the class `java.net.URL` by distinguishing the parts of a URL. +* The Java extractor and QL libraries now support Java 22, including support for anonymous variables, lambda parameters and patterns. +* Pattern cases with multiple patterns and that fall through to or from other pattern cases are now supported. The `PatternCase` class gains the new `getPatternAtIndex` and `getAPattern` predicates, and deprecates `getPattern`. +* Added a `path-injection` sink for the `open` methods of the `android.os.ParcelFileDescriptor` class. + +## 0.8.12 + +No user-facing changes. + +## 0.8.11 + +No user-facing changes. + +## 0.8.10 + +### Minor Analysis Improvements + +* Java expressions with erroneous types (e.g. the result of a call whose callee couldn't be resolved during extraction) are now given a CodeQL `ErrorType` more often. + +### Bug Fixes + +* Fixed the Java autobuilder overriding the version of Maven used by a project when the Maven wrapper `mvnw` is in use and the `maven-wrapper.jar` file is not present in the repository. +* Some flow steps related to `android.text.Editable.toString` that were accidentally disabled have been re-enabled. + ## 0.8.9 ### Deprecated APIs diff --git a/java/ql/lib/change-notes/2024-02-23-widget-flowsteps.md b/java/ql/lib/change-notes/2024-02-23-widget-flowsteps.md deleted file mode 100644 index eb560fba07d..00000000000 --- a/java/ql/lib/change-notes/2024-02-23-widget-flowsteps.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: fix ---- -* Some flow steps related to `android.text.Editable.toString` that were accidentally disabled have been re-enabled. diff --git a/java/ql/lib/change-notes/2024-02-27-error-types.md b/java/ql/lib/change-notes/2024-02-27-error-types.md deleted file mode 100644 index cdc6d7620aa..00000000000 --- a/java/ql/lib/change-notes/2024-02-27-error-types.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Java expressions with erroneous types (e.g. the result of a call whose callee couldn't be resolved during extraction) are now given a CodeQL `ErrorType` more often. diff --git a/java/ql/lib/change-notes/2024-02-27-mvnw-versions.md b/java/ql/lib/change-notes/2024-02-27-mvnw-versions.md deleted file mode 100644 index a0227088ae9..00000000000 --- a/java/ql/lib/change-notes/2024-02-27-mvnw-versions.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: fix ---- -* Fixed the Java autobuilder overriding the version of Maven used by a project when the Maven wrapper `mvnw` is in use and the `maven-wrapper.jar` file is not present in the repository. diff --git a/java/ql/lib/change-notes/2024-03-11-add-parcelfiledescriptor-open-model.md b/java/ql/lib/change-notes/2024-03-11-add-parcelfiledescriptor-open-model.md deleted file mode 100644 index 31f76712828..00000000000 --- a/java/ql/lib/change-notes/2024-03-11-add-parcelfiledescriptor-open-model.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Added a `path-injection` sink for the `open` methods of the `android.os.ParcelFileDescriptor` class. diff --git a/java/ql/lib/change-notes/2024-03-19-many-generated-jdk-models.md b/java/ql/lib/change-notes/2024-03-19-many-generated-jdk-models.md new file mode 100644 index 00000000000..72279ea8983 --- /dev/null +++ b/java/ql/lib/change-notes/2024-03-19-many-generated-jdk-models.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* About 6,700 summary models and 6,800 neutral summary models for the JDK that were generated using data flow have been added. This may lead to new alerts being reported. diff --git a/java/ql/lib/change-notes/released/0.8.10.md b/java/ql/lib/change-notes/released/0.8.10.md new file mode 100644 index 00000000000..b45f14bf347 --- /dev/null +++ b/java/ql/lib/change-notes/released/0.8.10.md @@ -0,0 +1,10 @@ +## 0.8.10 + +### Minor Analysis Improvements + +* Java expressions with erroneous types (e.g. the result of a call whose callee couldn't be resolved during extraction) are now given a CodeQL `ErrorType` more often. + +### Bug Fixes + +* Fixed the Java autobuilder overriding the version of Maven used by a project when the Maven wrapper `mvnw` is in use and the `maven-wrapper.jar` file is not present in the repository. +* Some flow steps related to `android.text.Editable.toString` that were accidentally disabled have been re-enabled. diff --git a/java/ql/lib/change-notes/released/0.8.11.md b/java/ql/lib/change-notes/released/0.8.11.md new file mode 100644 index 00000000000..6f504c5c207 --- /dev/null +++ b/java/ql/lib/change-notes/released/0.8.11.md @@ -0,0 +1,3 @@ +## 0.8.11 + +No user-facing changes. diff --git a/java/ql/lib/change-notes/released/0.8.12.md b/java/ql/lib/change-notes/released/0.8.12.md new file mode 100644 index 00000000000..bc91afe9c1e --- /dev/null +++ b/java/ql/lib/change-notes/released/0.8.12.md @@ -0,0 +1,3 @@ +## 0.8.12 + +No user-facing changes. diff --git a/java/ql/lib/change-notes/released/0.9.0.md b/java/ql/lib/change-notes/released/0.9.0.md new file mode 100644 index 00000000000..ad20fb98cbf --- /dev/null +++ b/java/ql/lib/change-notes/released/0.9.0.md @@ -0,0 +1,12 @@ +## 0.9.0 + +### Breaking Changes + +* The Java extractor no longer supports the `ODASA_SNAPSHOT` legacy environment variable. + +### Minor Analysis Improvements + +* Increased the precision of some dataflow models of the class `java.net.URL` by distinguishing the parts of a URL. +* The Java extractor and QL libraries now support Java 22, including support for anonymous variables, lambda parameters and patterns. +* Pattern cases with multiple patterns and that fall through to or from other pattern cases are now supported. The `PatternCase` class gains the new `getPatternAtIndex` and `getAPattern` predicates, and deprecates `getPattern`. +* Added a `path-injection` sink for the `open` methods of the `android.os.ParcelFileDescriptor` class. diff --git a/java/ql/lib/codeql-pack.release.yml b/java/ql/lib/codeql-pack.release.yml index 5290c29b7fe..8b9fc185202 100644 --- a/java/ql/lib/codeql-pack.release.yml +++ b/java/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.8.9 +lastReleaseVersion: 0.9.0 diff --git a/java/ql/lib/ext/experimental/io.undertow.server.handlers.resource.model.yml b/java/ql/lib/ext/experimental/io.undertow.server.handlers.resource.model.yml deleted file mode 100644 index 5c86c75522c..00000000000 --- a/java/ql/lib/ext/experimental/io.undertow.server.handlers.resource.model.yml +++ /dev/null @@ -1,8 +0,0 @@ -extensions: - - addsTo: - pack: codeql/java-all - extensible: experimentalSummaryModel - data: - - ["io.undertow.server.handlers.resource", "Resource", True, "getFile", "", "", "Argument[this]", "ReturnValue", "taint", "manual", "unsafe-url-forward"] - - ["io.undertow.server.handlers.resource", "Resource", True, "getFilePath", "", "", "Argument[this]", "ReturnValue", "taint", "manual", "unsafe-url-forward"] - - ["io.undertow.server.handlers.resource", "Resource", True, "getPath", "", "", "Argument[this]", "ReturnValue", "taint", "manual", "unsafe-url-forward"] diff --git a/java/ql/lib/ext/experimental/java.nio.file.model.yml b/java/ql/lib/ext/experimental/java.nio.file.model.yml deleted file mode 100644 index 647d72329d0..00000000000 --- a/java/ql/lib/ext/experimental/java.nio.file.model.yml +++ /dev/null @@ -1,10 +0,0 @@ -extensions: - - addsTo: - pack: codeql/java-all - extensible: experimentalSummaryModel - data: - - ["java.nio.file", "Path", True, "normalize", "", "", "Argument[this]", "ReturnValue", "taint", "manual", "unsafe-url-forward"] - - ["java.nio.file", "Path", True, "resolve", "", "", "Argument[this]", "ReturnValue", "taint", "manual", "unsafe-url-forward"] - - ["java.nio.file", "Path", True, "resolve", "", "", "Argument[0]", "ReturnValue", "taint", "manual", "unsafe-url-forward"] - - ["java.nio.file", "Path", True, "toString", "", "", "Argument[this]", "ReturnValue", "taint", "manual", "unsafe-url-forward"] - - ["java.nio.file", "Paths", True, "get", "", "", "Argument[0..1]", "ReturnValue", "taint", "manual", "unsafe-url-forward"] diff --git a/java/ql/lib/ext/experimental/java.util.concurrent.model.yml b/java/ql/lib/ext/experimental/java.util.concurrent.model.yml index 82ff0a00570..9484a5f5eb9 100644 --- a/java/ql/lib/ext/experimental/java.util.concurrent.model.yml +++ b/java/ql/lib/ext/experimental/java.util.concurrent.model.yml @@ -4,4 +4,3 @@ extensions: extensible: experimentalSinkModel data: - ["java.util.concurrent", "TimeUnit", True, "sleep", "", "", "Argument[0]", "thread-pause", "manual", "thread-resource-abuse"] - - ["java.util.concurrent", "TimeUnit", True, "sleep", "", "", "Argument[0]", "thread-pause", "manual", "unsafe-url-forward"] diff --git a/java/ql/lib/ext/experimental/javax.servlet.http.model.yml b/java/ql/lib/ext/experimental/javax.servlet.http.model.yml index db140149a99..04681b300ca 100644 --- a/java/ql/lib/ext/experimental/javax.servlet.http.model.yml +++ b/java/ql/lib/ext/experimental/javax.servlet.http.model.yml @@ -1,9 +1,4 @@ extensions: - - addsTo: - pack: codeql/java-all - extensible: experimentalSourceModel - data: - - ["javax.servlet.http", "HttpServletRequest", True, "getServletPath", "", "", "ReturnValue", "remote", "manual", "unsafe-url-forward"] - addsTo: pack: codeql/java-all extensible: experimentalSourceModel @@ -13,4 +8,3 @@ extensions: - ["javax.servlet.http", "HttpServletRequest", False, "getRequestURI", "()", "", "ReturnValue", "uri-path", "manual", "permissive-dot-regex-query"] - ["javax.servlet.http", "HttpServletRequest", False, "getRequestURL", "()", "", "ReturnValue", "uri-path", "manual", "permissive-dot-regex-query"] - ["javax.servlet.http", "HttpServletRequest", False, "getServletPath", "()", "", "ReturnValue", "uri-path", "manual", "permissive-dot-regex-query"] - diff --git a/java/ql/lib/ext/experimental/org.springframework.core.io.model.yml b/java/ql/lib/ext/experimental/org.springframework.core.io.model.yml deleted file mode 100644 index e929260f21b..00000000000 --- a/java/ql/lib/ext/experimental/org.springframework.core.io.model.yml +++ /dev/null @@ -1,16 +0,0 @@ -extensions: - - addsTo: - pack: codeql/java-all - extensible: experimentalSinkModel - data: - - ["org.springframework.core.io", "ClassPathResource", True, "getFilename", "", "", "Argument[this]", "get-resource", "manual", "unsafe-url-forward"] - - ["org.springframework.core.io", "ClassPathResource", True, "getPath", "", "", "Argument[this]", "get-resource", "manual", "unsafe-url-forward"] - - ["org.springframework.core.io", "ClassPathResource", True, "getURL", "", "", "Argument[this]", "get-resource", "manual", "unsafe-url-forward"] - - ["org.springframework.core.io", "ClassPathResource", True, "resolveURL", "", "", "Argument[this]", "get-resource", "manual", "unsafe-url-forward"] - - addsTo: - pack: codeql/java-all - extensible: experimentalSummaryModel - data: - - ["org.springframework.core.io", "ClassPathResource", False, "ClassPathResource", "", "", "Argument[0]", "Argument[this]", "taint", "manual", "unsafe-url-forward"] - - ["org.springframework.core.io", "Resource", True, "createRelative", "", "", "Argument[0]", "ReturnValue", "taint", "manual", "unsafe-url-forward"] - - ["org.springframework.core.io", "ResourceLoader", True, "getResource", "", "", "Argument[0]", "ReturnValue", "taint", "manual", "unsafe-url-forward"] diff --git a/java/ql/lib/ext/generated/com.sun.jmx.remote.internal.model.yml b/java/ql/lib/ext/generated/com.sun.jmx.remote.internal.model.yml new file mode 100644 index 00000000000..c67869a4253 --- /dev/null +++ b/java/ql/lib/ext/generated/com.sun.jmx.remote.internal.model.yml @@ -0,0 +1,7 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["com.sun.jmx.remote.internal", "ClientCommunicatorAdmin", "gotIOException", "(IOException)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/java.applet.model.yml b/java/ql/lib/ext/generated/java.applet.model.yml new file mode 100644 index 00000000000..adcf20a8c6e --- /dev/null +++ b/java/ql/lib/ext/generated/java.applet.model.yml @@ -0,0 +1,49 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["java.applet", "Applet", True, "getAppletContext", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.applet", "Applet", True, "getCodeBase", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.applet", "Applet", True, "getDocumentBase", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.applet", "Applet", True, "getImage", "(URL)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.applet", "Applet", True, "getImage", "(URL,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.applet", "Applet", True, "getImage", "(URL,String)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.applet", "Applet", True, "setStub", "(AppletStub)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.applet", "AppletContext", True, "getApplets", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.applet", "AppletContext", True, "getImage", "(URL)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.applet", "AppletContext", True, "getImage", "(URL)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.applet", "AppletContext", True, "getImage", "(URL)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.applet", "AppletStub", True, "getAppletContext", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.applet", "AppletStub", True, "getCodeBase", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.applet", "AppletStub", True, "getDocumentBase", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["java.applet", "Applet", "destroy", "()", "summary", "df-generated"] + - ["java.applet", "Applet", "getAppletInfo", "()", "summary", "df-generated"] + - ["java.applet", "Applet", "getAudioClip", "(URL)", "summary", "df-generated"] + - ["java.applet", "Applet", "getAudioClip", "(URL,String)", "summary", "df-generated"] + - ["java.applet", "Applet", "getParameter", "(String)", "summary", "df-generated"] + - ["java.applet", "Applet", "getParameterInfo", "()", "summary", "df-generated"] + - ["java.applet", "Applet", "init", "()", "summary", "df-generated"] + - ["java.applet", "Applet", "isActive", "()", "summary", "df-generated"] + - ["java.applet", "Applet", "newAudioClip", "(URL)", "summary", "df-generated"] + - ["java.applet", "Applet", "play", "(URL)", "summary", "df-generated"] + - ["java.applet", "Applet", "play", "(URL,String)", "summary", "df-generated"] + - ["java.applet", "Applet", "showStatus", "(String)", "summary", "df-generated"] + - ["java.applet", "Applet", "start", "()", "summary", "df-generated"] + - ["java.applet", "Applet", "stop", "()", "summary", "df-generated"] + - ["java.applet", "AppletContext", "getApplet", "(String)", "summary", "df-generated"] + - ["java.applet", "AppletContext", "getAudioClip", "(URL)", "summary", "df-generated"] + - ["java.applet", "AppletContext", "getStream", "(String)", "summary", "df-generated"] + - ["java.applet", "AppletContext", "getStreamKeys", "()", "summary", "df-generated"] + - ["java.applet", "AppletContext", "setStream", "(String,InputStream)", "summary", "df-generated"] + - ["java.applet", "AppletContext", "showDocument", "(URL)", "summary", "df-generated"] + - ["java.applet", "AppletContext", "showDocument", "(URL,String)", "summary", "df-generated"] + - ["java.applet", "AppletContext", "showStatus", "(String)", "summary", "df-generated"] + - ["java.applet", "AppletStub", "appletResize", "(int,int)", "summary", "df-generated"] + - ["java.applet", "AppletStub", "getParameter", "(String)", "summary", "df-generated"] + - ["java.applet", "AppletStub", "isActive", "()", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/java.awt.model.yml b/java/ql/lib/ext/generated/java.awt.model.yml new file mode 100644 index 00000000000..63ac56c4b3a --- /dev/null +++ b/java/ql/lib/ext/generated/java.awt.model.yml @@ -0,0 +1,15 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["java.awt", "Component", True, "getAccessibleContext", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.awt", "Component", True, "getLocale", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["java.awt", "Component", "resize", "(Dimension)", "summary", "df-generated"] + - ["java.awt", "Component", "resize", "(int,int)", "summary", "df-generated"] + - ["java.awt", "Container", "isValidateRoot", "()", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/java.beans.beancontext.model.yml b/java/ql/lib/ext/generated/java.beans.beancontext.model.yml new file mode 100644 index 00000000000..4a096488b80 --- /dev/null +++ b/java/ql/lib/ext/generated/java.beans.beancontext.model.yml @@ -0,0 +1,85 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["java.beans.beancontext", "BeanContext", True, "addBeanContextMembershipListener", "(BeanContextMembershipListener)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.beans.beancontext", "BeanContext", True, "getResource", "(String,BeanContextChild)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.beans.beancontext", "BeanContext", True, "instantiateChild", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.beans.beancontext", "BeanContextChild", True, "getBeanContext", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.beans.beancontext", "BeanContextChild", True, "setBeanContext", "(BeanContext)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["java.beans.beancontext", "BeanContextChildSupport", True, "BeanContextChildSupport", "(BeanContextChild)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.beans.beancontext", "BeanContextChildSupport", True, "getBeanContextChildPeer", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.beans.beancontext", "BeanContextEvent", True, "getBeanContext", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.beans.beancontext", "BeanContextEvent", True, "getPropagatedFrom", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.beans.beancontext", "BeanContextEvent", True, "setPropagatedFrom", "(BeanContext)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["java.beans.beancontext", "BeanContextMembershipEvent", True, "BeanContextMembershipEvent", "(BeanContext,Collection)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["java.beans.beancontext", "BeanContextMembershipEvent", True, "BeanContextMembershipEvent", "(BeanContext,Collection)", "", "Argument[1].Element", "Argument[this]", "taint", "df-generated"] + - ["java.beans.beancontext", "BeanContextMembershipEvent", True, "BeanContextMembershipEvent", "(BeanContext,Object[])", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["java.beans.beancontext", "BeanContextMembershipEvent", True, "BeanContextMembershipEvent", "(BeanContext,Object[])", "", "Argument[1].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["java.beans.beancontext", "BeanContextMembershipEvent", True, "iterator", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.beans.beancontext", "BeanContextMembershipEvent", True, "toArray", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.beans.beancontext", "BeanContextServiceAvailableEvent", True, "BeanContextServiceAvailableEvent", "(BeanContextServices,Class)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["java.beans.beancontext", "BeanContextServiceAvailableEvent", True, "getSourceAsBeanContextServices", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.beans.beancontext", "BeanContextServiceRevokedEvent", True, "BeanContextServiceRevokedEvent", "(BeanContextServices,Class,boolean)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["java.beans.beancontext", "BeanContextServiceRevokedEvent", True, "getSourceAsBeanContextServices", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.beans.beancontext", "BeanContextServices", True, "addBeanContextServicesListener", "(BeanContextServicesListener)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.beans.beancontext", "BeanContextServices", True, "getCurrentServiceClasses", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.beans.beancontext", "BeanContextServicesSupport", True, "BeanContextServicesSupport", "(BeanContextServices)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["java.beans.beancontext", "BeanContextServicesSupport", True, "BeanContextServicesSupport", "(BeanContextServices,Locale)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["java.beans.beancontext", "BeanContextServicesSupport", True, "BeanContextServicesSupport", "(BeanContextServices,Locale)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.beans.beancontext", "BeanContextServicesSupport", True, "BeanContextServicesSupport", "(BeanContextServices,Locale,boolean)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["java.beans.beancontext", "BeanContextServicesSupport", True, "BeanContextServicesSupport", "(BeanContextServices,Locale,boolean)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.beans.beancontext", "BeanContextServicesSupport", True, "BeanContextServicesSupport", "(BeanContextServices,Locale,boolean,boolean)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["java.beans.beancontext", "BeanContextServicesSupport", True, "BeanContextServicesSupport", "(BeanContextServices,Locale,boolean,boolean)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.beans.beancontext", "BeanContextServicesSupport", True, "getBeanContextServicesPeer", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.beans.beancontext", "BeanContextSupport", True, "BeanContextSupport", "(BeanContext)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["java.beans.beancontext", "BeanContextSupport", True, "BeanContextSupport", "(BeanContext,Locale)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["java.beans.beancontext", "BeanContextSupport", True, "BeanContextSupport", "(BeanContext,Locale)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.beans.beancontext", "BeanContextSupport", True, "BeanContextSupport", "(BeanContext,Locale,boolean)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["java.beans.beancontext", "BeanContextSupport", True, "BeanContextSupport", "(BeanContext,Locale,boolean)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.beans.beancontext", "BeanContextSupport", True, "BeanContextSupport", "(BeanContext,Locale,boolean,boolean)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["java.beans.beancontext", "BeanContextSupport", True, "BeanContextSupport", "(BeanContext,Locale,boolean,boolean)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.beans.beancontext", "BeanContextSupport", True, "getBeanContextPeer", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.beans.beancontext", "BeanContextSupport", True, "getLocale", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.beans.beancontext", "BeanContextSupport", True, "readChildren", "(ObjectInputStream)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.beans.beancontext", "BeanContextSupport", True, "setLocale", "(Locale)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.beans.beancontext", "BeanContextSupport", True, "writeChildren", "(ObjectOutputStream)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["java.beans.beancontext", "BeanContext", "getResourceAsStream", "(String,BeanContextChild)", "summary", "df-generated"] + - ["java.beans.beancontext", "BeanContext", "removeBeanContextMembershipListener", "(BeanContextMembershipListener)", "summary", "df-generated"] + - ["java.beans.beancontext", "BeanContextChild", "addPropertyChangeListener", "(String,PropertyChangeListener)", "summary", "df-generated"] + - ["java.beans.beancontext", "BeanContextChild", "addVetoableChangeListener", "(String,VetoableChangeListener)", "summary", "df-generated"] + - ["java.beans.beancontext", "BeanContextChild", "removePropertyChangeListener", "(String,PropertyChangeListener)", "summary", "df-generated"] + - ["java.beans.beancontext", "BeanContextChild", "removeVetoableChangeListener", "(String,VetoableChangeListener)", "summary", "df-generated"] + - ["java.beans.beancontext", "BeanContextChildSupport", "firePropertyChange", "(String,Object,Object)", "summary", "df-generated"] + - ["java.beans.beancontext", "BeanContextChildSupport", "fireVetoableChange", "(String,Object,Object)", "summary", "df-generated"] + - ["java.beans.beancontext", "BeanContextChildSupport", "isDelegated", "()", "summary", "df-generated"] + - ["java.beans.beancontext", "BeanContextChildSupport", "validatePendingSetBeanContext", "(BeanContext)", "summary", "df-generated"] + - ["java.beans.beancontext", "BeanContextEvent", "isPropagated", "()", "summary", "df-generated"] + - ["java.beans.beancontext", "BeanContextMembershipEvent", "contains", "(Object)", "summary", "df-generated"] + - ["java.beans.beancontext", "BeanContextMembershipEvent", "size", "()", "summary", "df-generated"] + - ["java.beans.beancontext", "BeanContextServiceAvailableEvent", "getCurrentServiceSelectors", "()", "summary", "df-generated"] + - ["java.beans.beancontext", "BeanContextServiceAvailableEvent", "getServiceClass", "()", "summary", "df-generated"] + - ["java.beans.beancontext", "BeanContextServiceProvider", "getCurrentServiceSelectors", "(BeanContextServices,Class)", "summary", "df-generated"] + - ["java.beans.beancontext", "BeanContextServiceProvider", "getService", "(BeanContextServices,Object,Class,Object)", "summary", "df-generated"] + - ["java.beans.beancontext", "BeanContextServiceProvider", "releaseService", "(BeanContextServices,Object,Object)", "summary", "df-generated"] + - ["java.beans.beancontext", "BeanContextServiceRevokedEvent", "getServiceClass", "()", "summary", "df-generated"] + - ["java.beans.beancontext", "BeanContextServiceRevokedEvent", "isCurrentServiceInvalidNow", "()", "summary", "df-generated"] + - ["java.beans.beancontext", "BeanContextServiceRevokedEvent", "isServiceClass", "(Class)", "summary", "df-generated"] + - ["java.beans.beancontext", "BeanContextServiceRevokedListener", "serviceRevoked", "(BeanContextServiceRevokedEvent)", "summary", "df-generated"] + - ["java.beans.beancontext", "BeanContextServices", "addService", "(Class,BeanContextServiceProvider)", "summary", "df-generated"] + - ["java.beans.beancontext", "BeanContextServices", "getCurrentServiceSelectors", "(Class)", "summary", "df-generated"] + - ["java.beans.beancontext", "BeanContextServices", "getService", "(BeanContextChild,Object,Class,Object,BeanContextServiceRevokedListener)", "summary", "df-generated"] + - ["java.beans.beancontext", "BeanContextServices", "hasService", "(Class)", "summary", "df-generated"] + - ["java.beans.beancontext", "BeanContextServices", "releaseService", "(BeanContextChild,Object,Object)", "summary", "df-generated"] + - ["java.beans.beancontext", "BeanContextServices", "removeBeanContextServicesListener", "(BeanContextServicesListener)", "summary", "df-generated"] + - ["java.beans.beancontext", "BeanContextServices", "revokeService", "(Class,BeanContextServiceProvider,boolean)", "summary", "df-generated"] + - ["java.beans.beancontext", "BeanContextServicesListener", "serviceAvailable", "(BeanContextServiceAvailableEvent)", "summary", "df-generated"] + - ["java.beans.beancontext", "BeanContextSupport", "containsKey", "(Object)", "summary", "df-generated"] + - ["java.beans.beancontext", "BeanContextSupport", "initialize", "()", "summary", "df-generated"] + - ["java.beans.beancontext", "BeanContextSupport", "isSerializing", "()", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/java.beans.model.yml b/java/ql/lib/ext/generated/java.beans.model.yml new file mode 100644 index 00000000000..2767fb30102 --- /dev/null +++ b/java/ql/lib/ext/generated/java.beans.model.yml @@ -0,0 +1,257 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["java.beans", "BeanInfo", True, "getBeanDescriptor", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.beans", "BeanInfo", True, "getEventSetDescriptors", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.beans", "BeanInfo", True, "getMethodDescriptors", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.beans", "BeanInfo", True, "getPropertyDescriptors", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.beans", "Beans", True, "getInstanceOf", "(Object,Class)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.beans", "Beans", True, "instantiate", "(ClassLoader,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.beans", "Beans", True, "instantiate", "(ClassLoader,String,BeanContext)", "", "Argument[0]", "Argument[2].Element", "taint", "df-generated"] + - ["java.beans", "Beans", True, "instantiate", "(ClassLoader,String,BeanContext)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.beans", "Beans", True, "instantiate", "(ClassLoader,String,BeanContext)", "", "Argument[2].Element", "ReturnValue", "taint", "df-generated"] + - ["java.beans", "Beans", True, "instantiate", "(ClassLoader,String,BeanContext,AppletInitializer)", "", "Argument[0]", "Argument[2].Element", "taint", "df-generated"] + - ["java.beans", "Beans", True, "instantiate", "(ClassLoader,String,BeanContext,AppletInitializer)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.beans", "Beans", True, "instantiate", "(ClassLoader,String,BeanContext,AppletInitializer)", "", "Argument[2].Element", "ReturnValue", "taint", "df-generated"] + - ["java.beans", "DefaultPersistenceDelegate", True, "DefaultPersistenceDelegate", "(String[])", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "Encoder", True, "get", "(Object)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.beans", "Encoder", True, "get", "(Object)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.beans", "Encoder", True, "getExceptionListener", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.beans", "Encoder", True, "getPersistenceDelegate", "(Class)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.beans", "Encoder", True, "remove", "(Object)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.beans", "Encoder", True, "setExceptionListener", "(ExceptionListener)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "Encoder", True, "writeExpression", "(Expression)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "Encoder", True, "writeObject", "(Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "Encoder", True, "writeStatement", "(Statement)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "EventHandler", True, "EventHandler", "(Object,String,String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "EventHandler", True, "EventHandler", "(Object,String,String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "EventHandler", True, "EventHandler", "(Object,String,String,String)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "EventHandler", True, "EventHandler", "(Object,String,String,String)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "EventHandler", True, "getAction", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.beans", "EventHandler", True, "getEventPropertyName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.beans", "EventHandler", True, "getListenerMethodName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.beans", "EventHandler", True, "getTarget", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.beans", "EventSetDescriptor", True, "EventSetDescriptor", "(Class,String,Class,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "EventSetDescriptor", True, "EventSetDescriptor", "(Class,String,Class,String[],String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "EventSetDescriptor", True, "EventSetDescriptor", "(Class,String,Class,String[],String,String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "EventSetDescriptor", True, "EventSetDescriptor", "(String,Class,MethodDescriptor[],Method,Method)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "EventSetDescriptor", True, "EventSetDescriptor", "(String,Class,MethodDescriptor[],Method,Method)", "", "Argument[2].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "EventSetDescriptor", True, "EventSetDescriptor", "(String,Class,MethodDescriptor[],Method,Method)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "EventSetDescriptor", True, "EventSetDescriptor", "(String,Class,MethodDescriptor[],Method,Method)", "", "Argument[4]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "EventSetDescriptor", True, "EventSetDescriptor", "(String,Class,Method[],Method,Method)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "EventSetDescriptor", True, "EventSetDescriptor", "(String,Class,Method[],Method,Method)", "", "Argument[2].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "EventSetDescriptor", True, "EventSetDescriptor", "(String,Class,Method[],Method,Method)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "EventSetDescriptor", True, "EventSetDescriptor", "(String,Class,Method[],Method,Method)", "", "Argument[4]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "EventSetDescriptor", True, "EventSetDescriptor", "(String,Class,Method[],Method,Method,Method)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "EventSetDescriptor", True, "EventSetDescriptor", "(String,Class,Method[],Method,Method,Method)", "", "Argument[2].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "EventSetDescriptor", True, "EventSetDescriptor", "(String,Class,Method[],Method,Method,Method)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "EventSetDescriptor", True, "EventSetDescriptor", "(String,Class,Method[],Method,Method,Method)", "", "Argument[4]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "EventSetDescriptor", True, "EventSetDescriptor", "(String,Class,Method[],Method,Method,Method)", "", "Argument[5]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "EventSetDescriptor", True, "getListenerMethodDescriptors", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.beans", "EventSetDescriptor", True, "getListenerMethods", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.beans", "Expression", True, "Expression", "(Object,Object,String,Object[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "Expression", True, "Expression", "(Object,Object,String,Object[])", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "Expression", True, "Expression", "(Object,Object,String,Object[])", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "Expression", True, "Expression", "(Object,Object,String,Object[])", "", "Argument[3].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "Expression", True, "Expression", "(Object,String,Object[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "Expression", True, "Expression", "(Object,String,Object[])", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "Expression", True, "Expression", "(Object,String,Object[])", "", "Argument[2].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "Expression", True, "getValue", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.beans", "Expression", True, "setValue", "(Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "FeatureDescriptor", True, "attributeNames", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.beans", "FeatureDescriptor", True, "getDisplayName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.beans", "FeatureDescriptor", True, "getName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.beans", "FeatureDescriptor", True, "getShortDescription", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.beans", "FeatureDescriptor", True, "getValue", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.beans", "FeatureDescriptor", True, "setDisplayName", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "FeatureDescriptor", True, "setName", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "FeatureDescriptor", True, "setShortDescription", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "FeatureDescriptor", True, "setValue", "(String,Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "FeatureDescriptor", True, "setValue", "(String,Object)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "IndexedPropertyChangeEvent", True, "IndexedPropertyChangeEvent", "(Object,String,Object,Object,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "IndexedPropertyChangeEvent", True, "IndexedPropertyChangeEvent", "(Object,String,Object,Object,int)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "IndexedPropertyChangeEvent", True, "IndexedPropertyChangeEvent", "(Object,String,Object,Object,int)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "IndexedPropertyChangeEvent", True, "IndexedPropertyChangeEvent", "(Object,String,Object,Object,int)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "IndexedPropertyDescriptor", True, "IndexedPropertyDescriptor", "(String,Class)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "IndexedPropertyDescriptor", True, "IndexedPropertyDescriptor", "(String,Class,String,String,String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "IndexedPropertyDescriptor", True, "IndexedPropertyDescriptor", "(String,Class,String,String,String,String)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "IndexedPropertyDescriptor", True, "IndexedPropertyDescriptor", "(String,Class,String,String,String,String)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "IndexedPropertyDescriptor", True, "IndexedPropertyDescriptor", "(String,Class,String,String,String,String)", "", "Argument[4]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "IndexedPropertyDescriptor", True, "IndexedPropertyDescriptor", "(String,Class,String,String,String,String)", "", "Argument[5]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "IndexedPropertyDescriptor", True, "IndexedPropertyDescriptor", "(String,Method,Method,Method,Method)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "IndexedPropertyDescriptor", True, "IndexedPropertyDescriptor", "(String,Method,Method,Method,Method)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "IndexedPropertyDescriptor", True, "IndexedPropertyDescriptor", "(String,Method,Method,Method,Method)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "IndexedPropertyDescriptor", True, "IndexedPropertyDescriptor", "(String,Method,Method,Method,Method)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "IndexedPropertyDescriptor", True, "IndexedPropertyDescriptor", "(String,Method,Method,Method,Method)", "", "Argument[4]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "IndexedPropertyDescriptor", True, "setIndexedReadMethod", "(Method)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "IndexedPropertyDescriptor", True, "setIndexedWriteMethod", "(Method)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "IntrospectionException", True, "IntrospectionException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "Introspector", True, "decapitalize", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.beans", "MethodDescriptor", True, "MethodDescriptor", "(Method)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "MethodDescriptor", True, "MethodDescriptor", "(Method,ParameterDescriptor[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "MethodDescriptor", True, "MethodDescriptor", "(Method,ParameterDescriptor[])", "", "Argument[1].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "MethodDescriptor", True, "getParameterDescriptors", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.beans", "PersistenceDelegate", True, "writeObject", "(Object,Encoder)", "", "Argument[0]", "Argument[1]", "taint", "df-generated"] + - ["java.beans", "PersistenceDelegate", True, "writeObject", "(Object,Encoder)", "", "Argument[this]", "Argument[1]", "taint", "df-generated"] + - ["java.beans", "PropertyChangeEvent", True, "PropertyChangeEvent", "(Object,String,Object,Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "PropertyChangeEvent", True, "PropertyChangeEvent", "(Object,String,Object,Object)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "PropertyChangeEvent", True, "PropertyChangeEvent", "(Object,String,Object,Object)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "PropertyChangeEvent", True, "PropertyChangeEvent", "(Object,String,Object,Object)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "PropertyChangeEvent", True, "getNewValue", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.beans", "PropertyChangeEvent", True, "getOldValue", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.beans", "PropertyChangeEvent", True, "getPropagationId", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.beans", "PropertyChangeEvent", True, "getPropertyName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.beans", "PropertyChangeEvent", True, "setPropagationId", "(Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "PropertyChangeListener", True, "propertyChange", "(PropertyChangeEvent)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "PropertyChangeListenerProxy", True, "PropertyChangeListenerProxy", "(String,PropertyChangeListener)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "PropertyChangeListenerProxy", True, "PropertyChangeListenerProxy", "(String,PropertyChangeListener)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "PropertyChangeListenerProxy", True, "getPropertyName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.beans", "PropertyChangeSupport", True, "PropertyChangeSupport", "(Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "PropertyChangeSupport", True, "getPropertyChangeListeners", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.beans", "PropertyChangeSupport", True, "getPropertyChangeListeners", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.beans", "PropertyDescriptor", True, "PropertyDescriptor", "(String,Class)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "PropertyDescriptor", True, "PropertyDescriptor", "(String,Class,String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "PropertyDescriptor", True, "PropertyDescriptor", "(String,Class,String,String)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "PropertyDescriptor", True, "PropertyDescriptor", "(String,Class,String,String)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "PropertyDescriptor", True, "PropertyDescriptor", "(String,Method,Method)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "PropertyDescriptor", True, "PropertyDescriptor", "(String,Method,Method)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "PropertyDescriptor", True, "PropertyDescriptor", "(String,Method,Method)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "PropertyDescriptor", True, "setReadMethod", "(Method)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "PropertyDescriptor", True, "setWriteMethod", "(Method)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "PropertyEditor", True, "addPropertyChangeListener", "(PropertyChangeListener)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "PropertyEditorSupport", True, "PropertyEditorSupport", "(Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "PropertyEditorSupport", True, "getSource", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.beans", "PropertyEditorSupport", True, "setSource", "(Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "PropertyVetoException", True, "PropertyVetoException", "(String,PropertyChangeEvent)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "PropertyVetoException", True, "PropertyVetoException", "(String,PropertyChangeEvent)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "PropertyVetoException", True, "getPropertyChangeEvent", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.beans", "SimpleBeanInfo", True, "loadImage", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.beans", "Statement", True, "Statement", "(Object,String,Object[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "Statement", True, "Statement", "(Object,String,Object[])", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "Statement", True, "Statement", "(Object,String,Object[])", "", "Argument[2].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "Statement", True, "getArguments", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.beans", "Statement", True, "getMethodName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.beans", "Statement", True, "getTarget", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.beans", "VetoableChangeListenerProxy", True, "VetoableChangeListenerProxy", "(String,VetoableChangeListener)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "VetoableChangeListenerProxy", True, "VetoableChangeListenerProxy", "(String,VetoableChangeListener)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "VetoableChangeListenerProxy", True, "getPropertyName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.beans", "VetoableChangeSupport", True, "VetoableChangeSupport", "(Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "VetoableChangeSupport", True, "getVetoableChangeListeners", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.beans", "VetoableChangeSupport", True, "getVetoableChangeListeners", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.beans", "XMLDecoder", True, "createHandler", "(Object,ExceptionListener,ClassLoader)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.beans", "XMLDecoder", True, "createHandler", "(Object,ExceptionListener,ClassLoader)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.beans", "XMLDecoder", True, "createHandler", "(Object,ExceptionListener,ClassLoader)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["java.beans", "XMLDecoder", True, "getExceptionListener", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.beans", "XMLDecoder", True, "getOwner", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.beans", "XMLDecoder", True, "readObject", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.beans", "XMLDecoder", True, "setExceptionListener", "(ExceptionListener)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "XMLDecoder", True, "setOwner", "(Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "XMLEncoder", True, "XMLEncoder", "(OutputStream)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "XMLEncoder", True, "XMLEncoder", "(OutputStream,String,boolean,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "XMLEncoder", True, "XMLEncoder", "(OutputStream,String,boolean,int)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "XMLEncoder", True, "getOwner", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.beans", "XMLEncoder", True, "setOwner", "(Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["java.beans", "BeanDescriptor", "BeanDescriptor", "(Class)", "summary", "df-generated"] + - ["java.beans", "BeanDescriptor", "BeanDescriptor", "(Class,Class)", "summary", "df-generated"] + - ["java.beans", "BeanDescriptor", "getBeanClass", "()", "summary", "df-generated"] + - ["java.beans", "BeanDescriptor", "getCustomizerClass", "()", "summary", "df-generated"] + - ["java.beans", "BeanInfo", "getAdditionalBeanInfo", "()", "summary", "df-generated"] + - ["java.beans", "BeanInfo", "getDefaultEventIndex", "()", "summary", "df-generated"] + - ["java.beans", "BeanInfo", "getDefaultPropertyIndex", "()", "summary", "df-generated"] + - ["java.beans", "BeanInfo", "getIcon", "(int)", "summary", "df-generated"] + - ["java.beans", "Beans", "isDesignTime", "()", "summary", "df-generated"] + - ["java.beans", "Beans", "isGuiAvailable", "()", "summary", "df-generated"] + - ["java.beans", "Beans", "isInstanceOf", "(Object,Class)", "summary", "df-generated"] + - ["java.beans", "Beans", "setDesignTime", "(boolean)", "summary", "df-generated"] + - ["java.beans", "Beans", "setGuiAvailable", "(boolean)", "summary", "df-generated"] + - ["java.beans", "DesignMode", "isDesignTime", "()", "summary", "df-generated"] + - ["java.beans", "DesignMode", "setDesignTime", "(boolean)", "summary", "df-generated"] + - ["java.beans", "Encoder", "setPersistenceDelegate", "(Class,PersistenceDelegate)", "summary", "df-generated"] + - ["java.beans", "EventHandler", "create", "(Class,Object,String)", "summary", "df-generated"] + - ["java.beans", "EventHandler", "create", "(Class,Object,String,String)", "summary", "df-generated"] + - ["java.beans", "EventHandler", "create", "(Class,Object,String,String,String)", "summary", "df-generated"] + - ["java.beans", "EventSetDescriptor", "getAddListenerMethod", "()", "summary", "df-generated"] + - ["java.beans", "EventSetDescriptor", "getGetListenerMethod", "()", "summary", "df-generated"] + - ["java.beans", "EventSetDescriptor", "getListenerType", "()", "summary", "df-generated"] + - ["java.beans", "EventSetDescriptor", "getRemoveListenerMethod", "()", "summary", "df-generated"] + - ["java.beans", "EventSetDescriptor", "isInDefaultEventSet", "()", "summary", "df-generated"] + - ["java.beans", "EventSetDescriptor", "isUnicast", "()", "summary", "df-generated"] + - ["java.beans", "EventSetDescriptor", "setInDefaultEventSet", "(boolean)", "summary", "df-generated"] + - ["java.beans", "EventSetDescriptor", "setUnicast", "(boolean)", "summary", "df-generated"] + - ["java.beans", "ExceptionListener", "exceptionThrown", "(Exception)", "summary", "df-generated"] + - ["java.beans", "FeatureDescriptor", "isExpert", "()", "summary", "df-generated"] + - ["java.beans", "FeatureDescriptor", "isHidden", "()", "summary", "df-generated"] + - ["java.beans", "FeatureDescriptor", "isPreferred", "()", "summary", "df-generated"] + - ["java.beans", "FeatureDescriptor", "setExpert", "(boolean)", "summary", "df-generated"] + - ["java.beans", "FeatureDescriptor", "setHidden", "(boolean)", "summary", "df-generated"] + - ["java.beans", "FeatureDescriptor", "setPreferred", "(boolean)", "summary", "df-generated"] + - ["java.beans", "IndexedPropertyChangeEvent", "getIndex", "()", "summary", "df-generated"] + - ["java.beans", "IndexedPropertyDescriptor", "getIndexedPropertyType", "()", "summary", "df-generated"] + - ["java.beans", "IndexedPropertyDescriptor", "getIndexedReadMethod", "()", "summary", "df-generated"] + - ["java.beans", "IndexedPropertyDescriptor", "getIndexedWriteMethod", "()", "summary", "df-generated"] + - ["java.beans", "Introspector", "flushCaches", "()", "summary", "df-generated"] + - ["java.beans", "Introspector", "flushFromCaches", "(Class)", "summary", "df-generated"] + - ["java.beans", "Introspector", "getBeanInfo", "(Class)", "summary", "df-generated"] + - ["java.beans", "Introspector", "getBeanInfo", "(Class,Class)", "summary", "df-generated"] + - ["java.beans", "Introspector", "getBeanInfo", "(Class,Class,int)", "summary", "df-generated"] + - ["java.beans", "Introspector", "getBeanInfo", "(Class,int)", "summary", "df-generated"] + - ["java.beans", "Introspector", "getBeanInfoSearchPath", "()", "summary", "df-generated"] + - ["java.beans", "Introspector", "setBeanInfoSearchPath", "(String[])", "summary", "df-generated"] + - ["java.beans", "MethodDescriptor", "getMethod", "()", "summary", "df-generated"] + - ["java.beans", "PropertyChangeSupport", "addPropertyChangeListener", "(PropertyChangeListener)", "summary", "df-generated"] + - ["java.beans", "PropertyChangeSupport", "addPropertyChangeListener", "(String,PropertyChangeListener)", "summary", "df-generated"] + - ["java.beans", "PropertyChangeSupport", "fireIndexedPropertyChange", "(String,int,Object,Object)", "summary", "df-generated"] + - ["java.beans", "PropertyChangeSupport", "fireIndexedPropertyChange", "(String,int,boolean,boolean)", "summary", "df-generated"] + - ["java.beans", "PropertyChangeSupport", "fireIndexedPropertyChange", "(String,int,int,int)", "summary", "df-generated"] + - ["java.beans", "PropertyChangeSupport", "firePropertyChange", "(PropertyChangeEvent)", "summary", "df-generated"] + - ["java.beans", "PropertyChangeSupport", "firePropertyChange", "(String,Object,Object)", "summary", "df-generated"] + - ["java.beans", "PropertyChangeSupport", "firePropertyChange", "(String,boolean,boolean)", "summary", "df-generated"] + - ["java.beans", "PropertyChangeSupport", "firePropertyChange", "(String,int,int)", "summary", "df-generated"] + - ["java.beans", "PropertyChangeSupport", "hasListeners", "(String)", "summary", "df-generated"] + - ["java.beans", "PropertyChangeSupport", "removePropertyChangeListener", "(PropertyChangeListener)", "summary", "df-generated"] + - ["java.beans", "PropertyChangeSupport", "removePropertyChangeListener", "(String,PropertyChangeListener)", "summary", "df-generated"] + - ["java.beans", "PropertyDescriptor", "createPropertyEditor", "(Object)", "summary", "df-generated"] + - ["java.beans", "PropertyDescriptor", "getPropertyEditorClass", "()", "summary", "df-generated"] + - ["java.beans", "PropertyDescriptor", "getPropertyType", "()", "summary", "df-generated"] + - ["java.beans", "PropertyDescriptor", "getReadMethod", "()", "summary", "df-generated"] + - ["java.beans", "PropertyDescriptor", "getWriteMethod", "()", "summary", "df-generated"] + - ["java.beans", "PropertyDescriptor", "isBound", "()", "summary", "df-generated"] + - ["java.beans", "PropertyDescriptor", "isConstrained", "()", "summary", "df-generated"] + - ["java.beans", "PropertyDescriptor", "setBound", "(boolean)", "summary", "df-generated"] + - ["java.beans", "PropertyDescriptor", "setConstrained", "(boolean)", "summary", "df-generated"] + - ["java.beans", "PropertyDescriptor", "setPropertyEditorClass", "(Class)", "summary", "df-generated"] + - ["java.beans", "PropertyEditor", "getCustomEditor", "()", "summary", "df-generated"] + - ["java.beans", "PropertyEditor", "getJavaInitializationString", "()", "summary", "df-generated"] + - ["java.beans", "PropertyEditor", "getTags", "()", "summary", "df-generated"] + - ["java.beans", "PropertyEditor", "isPaintable", "()", "summary", "df-generated"] + - ["java.beans", "PropertyEditor", "paintValue", "(Graphics,Rectangle)", "summary", "df-generated"] + - ["java.beans", "PropertyEditor", "removePropertyChangeListener", "(PropertyChangeListener)", "summary", "df-generated"] + - ["java.beans", "PropertyEditor", "supportsCustomEditor", "()", "summary", "df-generated"] + - ["java.beans", "PropertyEditorManager", "findEditor", "(Class)", "summary", "df-generated"] + - ["java.beans", "PropertyEditorManager", "getEditorSearchPath", "()", "summary", "df-generated"] + - ["java.beans", "PropertyEditorManager", "registerEditor", "(Class,Class)", "summary", "df-generated"] + - ["java.beans", "PropertyEditorManager", "setEditorSearchPath", "(String[])", "summary", "df-generated"] + - ["java.beans", "PropertyEditorSupport", "firePropertyChange", "()", "summary", "df-generated"] + - ["java.beans", "Statement", "execute", "()", "summary", "df-generated"] + - ["java.beans", "VetoableChangeListener", "vetoableChange", "(PropertyChangeEvent)", "summary", "df-generated"] + - ["java.beans", "VetoableChangeSupport", "addVetoableChangeListener", "(String,VetoableChangeListener)", "summary", "df-generated"] + - ["java.beans", "VetoableChangeSupport", "addVetoableChangeListener", "(VetoableChangeListener)", "summary", "df-generated"] + - ["java.beans", "VetoableChangeSupport", "fireVetoableChange", "(PropertyChangeEvent)", "summary", "df-generated"] + - ["java.beans", "VetoableChangeSupport", "fireVetoableChange", "(String,Object,Object)", "summary", "df-generated"] + - ["java.beans", "VetoableChangeSupport", "fireVetoableChange", "(String,boolean,boolean)", "summary", "df-generated"] + - ["java.beans", "VetoableChangeSupport", "fireVetoableChange", "(String,int,int)", "summary", "df-generated"] + - ["java.beans", "VetoableChangeSupport", "hasListeners", "(String)", "summary", "df-generated"] + - ["java.beans", "VetoableChangeSupport", "removeVetoableChangeListener", "(String,VetoableChangeListener)", "summary", "df-generated"] + - ["java.beans", "VetoableChangeSupport", "removeVetoableChangeListener", "(VetoableChangeListener)", "summary", "df-generated"] + - ["java.beans", "Visibility", "avoidingGui", "()", "summary", "df-generated"] + - ["java.beans", "Visibility", "dontUseGui", "()", "summary", "df-generated"] + - ["java.beans", "Visibility", "needsGui", "()", "summary", "df-generated"] + - ["java.beans", "Visibility", "okToUseGui", "()", "summary", "df-generated"] + - ["java.beans", "XMLEncoder", "flush", "()", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/java.io.model.yml b/java/ql/lib/ext/generated/java.io.model.yml new file mode 100644 index 00000000000..8ecad6c31d6 --- /dev/null +++ b/java/ql/lib/ext/generated/java.io.model.yml @@ -0,0 +1,404 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["java.io", "BufferedOutputStream", True, "BufferedOutputStream", "(OutputStream)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "BufferedOutputStream", True, "BufferedOutputStream", "(OutputStream,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "BufferedWriter", True, "BufferedWriter", "(Writer)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "BufferedWriter", True, "BufferedWriter", "(Writer,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "ByteArrayOutputStream", True, "writeBytes", "(byte[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "CharArrayWriter", True, "writeTo", "(Writer)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] + - ["java.io", "CharConversionException", True, "CharConversionException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "Console", False, "format", "(String,Object[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "Console", False, "format", "(String,Object[])", "", "Argument[1].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["java.io", "Console", False, "format", "(String,Object[])", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.io", "Console", False, "printf", "(String,Object[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "Console", False, "printf", "(String,Object[])", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.io", "Console", False, "printf", "(String,Object[])", "", "Argument[1].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["java.io", "Console", False, "printf", "(String,Object[])", "", "Argument[1].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["java.io", "Console", False, "printf", "(String,Object[])", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.io", "Console", False, "readLine", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.io", "Console", False, "readLine", "(String,Object[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "Console", False, "readLine", "(String,Object[])", "", "Argument[1].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["java.io", "Console", False, "readLine", "(String,Object[])", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.io", "Console", False, "readPassword", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.io", "Console", False, "readPassword", "(String,Object[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "Console", False, "readPassword", "(String,Object[])", "", "Argument[1].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["java.io", "Console", False, "readPassword", "(String,Object[])", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.io", "Console", False, "reader", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.io", "Console", False, "writer", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.io", "DataInputStream", True, "readUTF", "(DataInput)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.io", "DataOutput", True, "write", "(byte[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "DataOutput", True, "writeBytes", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "DataOutput", True, "writeChars", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "DataOutput", True, "writeUTF", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "DataOutputStream", True, "DataOutputStream", "(OutputStream)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "EOFException", True, "EOFException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "Externalizable", True, "readExternal", "(ObjectInput)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "Externalizable", True, "writeExternal", "(ObjectOutput)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] + - ["java.io", "FileInputStream", True, "getChannel", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.io", "FileInputStream", True, "getFD", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.io", "FileNotFoundException", True, "FileNotFoundException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "FileOutputStream", True, "FileOutputStream", "(File)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "FileOutputStream", True, "FileOutputStream", "(File,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "FileOutputStream", True, "FileOutputStream", "(FileDescriptor)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "FileOutputStream", True, "FileOutputStream", "(FileDescriptor)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] + - ["java.io", "FileOutputStream", True, "FileOutputStream", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "FileOutputStream", True, "FileOutputStream", "(String,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "FileOutputStream", True, "getChannel", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.io", "FileOutputStream", True, "getFD", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.io", "FilePermission", False, "FilePermission", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "FileReader", True, "FileReader", "(File)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "FileReader", True, "FileReader", "(File,Charset)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "FileReader", True, "FileReader", "(FileDescriptor)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "FileReader", True, "FileReader", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "FileReader", True, "FileReader", "(String,Charset)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "FileWriter", True, "FileWriter", "(File)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "FileWriter", True, "FileWriter", "(File,Charset)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "FileWriter", True, "FileWriter", "(File,Charset,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "FileWriter", True, "FileWriter", "(File,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "FileWriter", True, "FileWriter", "(FileDescriptor)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "FileWriter", True, "FileWriter", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "FileWriter", True, "FileWriter", "(String,Charset)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "FileWriter", True, "FileWriter", "(String,Charset,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "FileWriter", True, "FileWriter", "(String,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "IOError", True, "IOError", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "IOException", True, "IOException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "IOException", True, "IOException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "IOException", True, "IOException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "InterruptedIOException", True, "InterruptedIOException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "InvalidClassException", True, "InvalidClassException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "InvalidClassException", True, "InvalidClassException", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "InvalidClassException", True, "InvalidClassException", "(String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "InvalidObjectException", True, "InvalidObjectException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "LineNumberInputStream", True, "LineNumberInputStream", "(InputStream)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "LineNumberReader", True, "LineNumberReader", "(Reader)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "LineNumberReader", True, "LineNumberReader", "(Reader,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "NotActiveException", True, "NotActiveException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "NotSerializableException", True, "NotSerializableException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "ObjectInputFilter$Config", False, "createFilter", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.io", "ObjectInputFilter", True, "allowFilter", "(Predicate,ObjectInputFilter$Status)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.io", "ObjectInputFilter", True, "merge", "(ObjectInputFilter,ObjectInputFilter)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.io", "ObjectInputFilter", True, "merge", "(ObjectInputFilter,ObjectInputFilter)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.io", "ObjectInputFilter", True, "rejectFilter", "(Predicate,ObjectInputFilter$Status)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.io", "ObjectInputFilter", True, "rejectUndecidedClass", "(ObjectInputFilter)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.io", "ObjectInputStream$GetField", True, "get", "(String,Object)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.io", "ObjectInputStream$GetField", True, "get", "(String,Object)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.io", "ObjectInputStream$GetField", True, "getObjectStreamClass", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.io", "ObjectInputStream", True, "getObjectInputFilter", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.io", "ObjectInputStream", True, "readFields", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.io", "ObjectInputStream", True, "readUnshared", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.io", "ObjectInputStream", True, "setObjectInputFilter", "(ObjectInputFilter)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "ObjectOutput", True, "writeObject", "(Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "ObjectOutputStream$PutField", True, "put", "(String,Object)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "ObjectOutputStream$PutField", True, "write", "(ObjectOutput)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] + - ["java.io", "ObjectOutputStream", True, "ObjectOutputStream", "(OutputStream)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "ObjectOutputStream", True, "putFields", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.io", "ObjectOutputStream", True, "writeUnshared", "(Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "ObjectStreamClass", True, "getField", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.io", "ObjectStreamClass", True, "getFields", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.io", "ObjectStreamClass", True, "getName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.io", "ObjectStreamField", True, "ObjectStreamField", "(String,Class)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "ObjectStreamField", True, "ObjectStreamField", "(String,Class,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "ObjectStreamField", True, "getName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.io", "ObjectStreamField", True, "getTypeString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.io", "OutputStreamWriter", True, "OutputStreamWriter", "(OutputStream)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "OutputStreamWriter", True, "OutputStreamWriter", "(OutputStream,Charset)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "OutputStreamWriter", True, "OutputStreamWriter", "(OutputStream,CharsetEncoder)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "OutputStreamWriter", True, "OutputStreamWriter", "(OutputStream,CharsetEncoder)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "OutputStreamWriter", True, "OutputStreamWriter", "(OutputStream,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "PipedInputStream", True, "PipedInputStream", "(PipedOutputStream)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] + - ["java.io", "PipedInputStream", True, "PipedInputStream", "(PipedOutputStream,int)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] + - ["java.io", "PipedInputStream", True, "connect", "(PipedOutputStream)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] + - ["java.io", "PipedOutputStream", True, "PipedOutputStream", "(PipedInputStream)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "PipedOutputStream", True, "connect", "(PipedInputStream)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "PipedReader", True, "PipedReader", "(PipedWriter)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] + - ["java.io", "PipedReader", True, "PipedReader", "(PipedWriter,int)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] + - ["java.io", "PipedReader", True, "connect", "(PipedWriter)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] + - ["java.io", "PipedWriter", True, "PipedWriter", "(PipedReader)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "PipedWriter", True, "connect", "(PipedReader)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "PrintStream", True, "PrintStream", "(File)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "PrintStream", True, "PrintStream", "(File,Charset)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "PrintStream", True, "PrintStream", "(File,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "PrintStream", True, "PrintStream", "(OutputStream)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "PrintStream", True, "PrintStream", "(OutputStream,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "PrintStream", True, "PrintStream", "(OutputStream,boolean,Charset)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "PrintStream", True, "PrintStream", "(OutputStream,boolean,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "PrintStream", True, "PrintStream", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "PrintStream", True, "PrintStream", "(String,Charset)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "PrintStream", True, "PrintStream", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "PrintStream", True, "format", "(Locale,String,Object[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "PrintStream", True, "format", "(Locale,String,Object[])", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "PrintStream", True, "format", "(Locale,String,Object[])", "", "Argument[2].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["java.io", "PrintStream", True, "format", "(Locale,String,Object[])", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.io", "PrintStream", True, "format", "(String,Object[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "PrintStream", True, "format", "(String,Object[])", "", "Argument[1].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["java.io", "PrintStream", True, "format", "(String,Object[])", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.io", "PrintStream", True, "print", "(Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "PrintStream", True, "print", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "PrintStream", True, "print", "(char[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "PrintStream", True, "printf", "(Locale,String,Object[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "PrintStream", True, "printf", "(Locale,String,Object[])", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.io", "PrintStream", True, "printf", "(Locale,String,Object[])", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "PrintStream", True, "printf", "(Locale,String,Object[])", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.io", "PrintStream", True, "printf", "(Locale,String,Object[])", "", "Argument[2].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["java.io", "PrintStream", True, "printf", "(Locale,String,Object[])", "", "Argument[2].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["java.io", "PrintStream", True, "printf", "(Locale,String,Object[])", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.io", "PrintStream", True, "printf", "(String,Object[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "PrintStream", True, "printf", "(String,Object[])", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.io", "PrintStream", True, "printf", "(String,Object[])", "", "Argument[1].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["java.io", "PrintStream", True, "printf", "(String,Object[])", "", "Argument[1].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["java.io", "PrintStream", True, "printf", "(String,Object[])", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.io", "PrintStream", True, "println", "(Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "PrintStream", True, "println", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "PrintStream", True, "println", "(char[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "PrintStream", True, "writeBytes", "(byte[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "PrintWriter", True, "PrintWriter", "(OutputStream)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "PrintWriter", True, "PrintWriter", "(OutputStream,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "PrintWriter", True, "PrintWriter", "(OutputStream,boolean,Charset)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "PrintWriter", True, "PrintWriter", "(Writer)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "PrintWriter", True, "PrintWriter", "(Writer,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "PrintWriter", True, "format", "(Locale,String,Object[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "PrintWriter", True, "format", "(Locale,String,Object[])", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "PrintWriter", True, "format", "(Locale,String,Object[])", "", "Argument[2].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["java.io", "PrintWriter", True, "format", "(Locale,String,Object[])", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.io", "PrintWriter", True, "format", "(String,Object[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "PrintWriter", True, "format", "(String,Object[])", "", "Argument[1].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["java.io", "PrintWriter", True, "format", "(String,Object[])", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.io", "PrintWriter", True, "print", "(Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "PrintWriter", True, "print", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "PrintWriter", True, "print", "(char[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "PrintWriter", True, "printf", "(Locale,String,Object[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "PrintWriter", True, "printf", "(Locale,String,Object[])", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.io", "PrintWriter", True, "printf", "(Locale,String,Object[])", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "PrintWriter", True, "printf", "(Locale,String,Object[])", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.io", "PrintWriter", True, "printf", "(Locale,String,Object[])", "", "Argument[2].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["java.io", "PrintWriter", True, "printf", "(Locale,String,Object[])", "", "Argument[2].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["java.io", "PrintWriter", True, "printf", "(Locale,String,Object[])", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.io", "PrintWriter", True, "printf", "(String,Object[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "PrintWriter", True, "printf", "(String,Object[])", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.io", "PrintWriter", True, "printf", "(String,Object[])", "", "Argument[1].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["java.io", "PrintWriter", True, "printf", "(String,Object[])", "", "Argument[1].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["java.io", "PrintWriter", True, "printf", "(String,Object[])", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.io", "PrintWriter", True, "println", "(Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "PrintWriter", True, "println", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "PrintWriter", True, "println", "(char[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "PushbackInputStream", True, "PushbackInputStream", "(InputStream)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "PushbackInputStream", True, "PushbackInputStream", "(InputStream,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "PushbackInputStream", True, "unread", "(byte[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "PushbackInputStream", True, "unread", "(byte[],int,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "PushbackReader", True, "PushbackReader", "(Reader)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "PushbackReader", True, "PushbackReader", "(Reader,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "PushbackReader", True, "unread", "(char[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "PushbackReader", True, "unread", "(char[],int,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "RandomAccessFile", True, "RandomAccessFile", "(File,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "RandomAccessFile", True, "RandomAccessFile", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "RandomAccessFile", True, "getChannel", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.io", "RandomAccessFile", True, "getFD", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.io", "Reader", True, "transferTo", "(Writer)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] + - ["java.io", "SequenceInputStream", True, "SequenceInputStream", "(Enumeration)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["java.io", "SerializablePermission", False, "SerializablePermission", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "SerializablePermission", False, "SerializablePermission", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "StreamCorruptedException", True, "StreamCorruptedException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "StreamTokenizer", True, "StreamTokenizer", "(InputStream)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "StreamTokenizer", True, "StreamTokenizer", "(Reader)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "StringBufferInputStream", True, "StringBufferInputStream", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "StringWriter", True, "getBuffer", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.io", "SyncFailedException", True, "SyncFailedException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "UTFDataFormatException", True, "UTFDataFormatException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "UncheckedIOException", True, "UncheckedIOException", "(String,IOException)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "UncheckedIOException", True, "UncheckedIOException", "(String,IOException)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "UnsupportedEncodingException", True, "UnsupportedEncodingException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "WriteAbortedException", True, "WriteAbortedException", "(String,Exception)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "WriteAbortedException", True, "WriteAbortedException", "(String,Exception)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["java.io", "BufferedReader", "lines", "()", "summary", "df-generated"] + - ["java.io", "BufferedWriter", "newLine", "()", "summary", "df-generated"] + - ["java.io", "ByteArrayOutputStream", "ByteArrayOutputStream", "(int)", "summary", "df-generated"] + - ["java.io", "ByteArrayOutputStream", "reset", "()", "summary", "df-generated"] + - ["java.io", "ByteArrayOutputStream", "size", "()", "summary", "df-generated"] + - ["java.io", "CharArrayWriter", "CharArrayWriter", "(int)", "summary", "df-generated"] + - ["java.io", "CharArrayWriter", "reset", "()", "summary", "df-generated"] + - ["java.io", "CharArrayWriter", "size", "()", "summary", "df-generated"] + - ["java.io", "Console", "charset", "()", "summary", "df-generated"] + - ["java.io", "DataInput", "readBoolean", "()", "summary", "df-generated"] + - ["java.io", "DataInput", "readByte", "()", "summary", "df-generated"] + - ["java.io", "DataInput", "readChar", "()", "summary", "df-generated"] + - ["java.io", "DataInput", "readDouble", "()", "summary", "df-generated"] + - ["java.io", "DataInput", "readFloat", "()", "summary", "df-generated"] + - ["java.io", "DataInput", "readInt", "()", "summary", "df-generated"] + - ["java.io", "DataInput", "readLong", "()", "summary", "df-generated"] + - ["java.io", "DataInput", "readShort", "()", "summary", "df-generated"] + - ["java.io", "DataInput", "readUnsignedByte", "()", "summary", "df-generated"] + - ["java.io", "DataInput", "readUnsignedShort", "()", "summary", "df-generated"] + - ["java.io", "DataInput", "skipBytes", "(int)", "summary", "df-generated"] + - ["java.io", "DataOutput", "write", "(byte[],int,int)", "summary", "df-generated"] + - ["java.io", "DataOutput", "write", "(int)", "summary", "df-generated"] + - ["java.io", "DataOutput", "writeBoolean", "(boolean)", "summary", "df-generated"] + - ["java.io", "DataOutput", "writeByte", "(int)", "summary", "df-generated"] + - ["java.io", "DataOutput", "writeChar", "(int)", "summary", "df-generated"] + - ["java.io", "DataOutput", "writeDouble", "(double)", "summary", "df-generated"] + - ["java.io", "DataOutput", "writeFloat", "(float)", "summary", "df-generated"] + - ["java.io", "DataOutput", "writeInt", "(int)", "summary", "df-generated"] + - ["java.io", "DataOutput", "writeLong", "(long)", "summary", "df-generated"] + - ["java.io", "DataOutput", "writeShort", "(int)", "summary", "df-generated"] + - ["java.io", "DataOutputStream", "size", "()", "summary", "df-generated"] + - ["java.io", "File", "canExecute", "()", "summary", "df-generated"] + - ["java.io", "File", "canRead", "()", "summary", "df-generated"] + - ["java.io", "File", "canWrite", "()", "summary", "df-generated"] + - ["java.io", "File", "createNewFile", "()", "summary", "df-generated"] + - ["java.io", "File", "deleteOnExit", "()", "summary", "df-generated"] + - ["java.io", "File", "getFreeSpace", "()", "summary", "df-generated"] + - ["java.io", "File", "getTotalSpace", "()", "summary", "df-generated"] + - ["java.io", "File", "getUsableSpace", "()", "summary", "df-generated"] + - ["java.io", "File", "isAbsolute", "()", "summary", "df-generated"] + - ["java.io", "File", "isHidden", "()", "summary", "df-generated"] + - ["java.io", "File", "lastModified", "()", "summary", "df-generated"] + - ["java.io", "File", "list", "()", "summary", "df-generated"] + - ["java.io", "File", "list", "(FilenameFilter)", "summary", "df-generated"] + - ["java.io", "File", "listRoots", "()", "summary", "df-generated"] + - ["java.io", "File", "mkdir", "()", "summary", "df-generated"] + - ["java.io", "File", "renameTo", "(File)", "summary", "df-generated"] + - ["java.io", "File", "setExecutable", "(boolean)", "summary", "df-generated"] + - ["java.io", "File", "setExecutable", "(boolean,boolean)", "summary", "df-generated"] + - ["java.io", "File", "setLastModified", "(long)", "summary", "df-generated"] + - ["java.io", "File", "setReadOnly", "()", "summary", "df-generated"] + - ["java.io", "File", "setReadable", "(boolean)", "summary", "df-generated"] + - ["java.io", "File", "setReadable", "(boolean,boolean)", "summary", "df-generated"] + - ["java.io", "File", "setWritable", "(boolean)", "summary", "df-generated"] + - ["java.io", "File", "setWritable", "(boolean,boolean)", "summary", "df-generated"] + - ["java.io", "FileDescriptor", "sync", "()", "summary", "df-generated"] + - ["java.io", "FileDescriptor", "valid", "()", "summary", "df-generated"] + - ["java.io", "Flushable", "flush", "()", "summary", "df-generated"] + - ["java.io", "InputStream", "available", "()", "summary", "df-generated"] + - ["java.io", "InputStream", "mark", "(int)", "summary", "df-generated"] + - ["java.io", "InputStream", "markSupported", "()", "summary", "df-generated"] + - ["java.io", "InputStream", "nullInputStream", "()", "summary", "df-generated"] + - ["java.io", "InputStream", "reset", "()", "summary", "df-generated"] + - ["java.io", "InputStream", "skip", "(long)", "summary", "df-generated"] + - ["java.io", "InputStream", "skipNBytes", "(long)", "summary", "df-generated"] + - ["java.io", "InputStreamReader", "getEncoding", "()", "summary", "df-generated"] + - ["java.io", "LineNumberInputStream", "getLineNumber", "()", "summary", "df-generated"] + - ["java.io", "LineNumberInputStream", "setLineNumber", "(int)", "summary", "df-generated"] + - ["java.io", "LineNumberReader", "getLineNumber", "()", "summary", "df-generated"] + - ["java.io", "LineNumberReader", "setLineNumber", "(int)", "summary", "df-generated"] + - ["java.io", "ObjectInput", "available", "()", "summary", "df-generated"] + - ["java.io", "ObjectInputFilter$Config", "getSerialFilter", "()", "summary", "df-generated"] + - ["java.io", "ObjectInputFilter$Config", "getSerialFilterFactory", "()", "summary", "df-generated"] + - ["java.io", "ObjectInputFilter$Config", "setSerialFilter", "(ObjectInputFilter)", "summary", "df-generated"] + - ["java.io", "ObjectInputFilter$Config", "setSerialFilterFactory", "(BinaryOperator)", "summary", "df-generated"] + - ["java.io", "ObjectInputFilter$FilterInfo", "arrayLength", "()", "summary", "df-generated"] + - ["java.io", "ObjectInputFilter$FilterInfo", "depth", "()", "summary", "df-generated"] + - ["java.io", "ObjectInputFilter$FilterInfo", "references", "()", "summary", "df-generated"] + - ["java.io", "ObjectInputFilter$FilterInfo", "serialClass", "()", "summary", "df-generated"] + - ["java.io", "ObjectInputFilter$FilterInfo", "streamBytes", "()", "summary", "df-generated"] + - ["java.io", "ObjectInputFilter", "checkInput", "(ObjectInputFilter$FilterInfo)", "summary", "df-generated"] + - ["java.io", "ObjectInputStream$GetField", "defaulted", "(String)", "summary", "df-generated"] + - ["java.io", "ObjectInputStream$GetField", "get", "(String,boolean)", "summary", "df-generated"] + - ["java.io", "ObjectInputStream$GetField", "get", "(String,byte)", "summary", "df-generated"] + - ["java.io", "ObjectInputStream$GetField", "get", "(String,char)", "summary", "df-generated"] + - ["java.io", "ObjectInputStream$GetField", "get", "(String,double)", "summary", "df-generated"] + - ["java.io", "ObjectInputStream$GetField", "get", "(String,float)", "summary", "df-generated"] + - ["java.io", "ObjectInputStream$GetField", "get", "(String,int)", "summary", "df-generated"] + - ["java.io", "ObjectInputStream$GetField", "get", "(String,long)", "summary", "df-generated"] + - ["java.io", "ObjectInputStream$GetField", "get", "(String,short)", "summary", "df-generated"] + - ["java.io", "ObjectInputStream", "defaultReadObject", "()", "summary", "df-generated"] + - ["java.io", "ObjectInputStream", "registerValidation", "(ObjectInputValidation,int)", "summary", "df-generated"] + - ["java.io", "ObjectOutput", "flush", "()", "summary", "df-generated"] + - ["java.io", "ObjectOutputStream$PutField", "put", "(String,boolean)", "summary", "df-generated"] + - ["java.io", "ObjectOutputStream$PutField", "put", "(String,byte)", "summary", "df-generated"] + - ["java.io", "ObjectOutputStream$PutField", "put", "(String,char)", "summary", "df-generated"] + - ["java.io", "ObjectOutputStream$PutField", "put", "(String,double)", "summary", "df-generated"] + - ["java.io", "ObjectOutputStream$PutField", "put", "(String,float)", "summary", "df-generated"] + - ["java.io", "ObjectOutputStream$PutField", "put", "(String,int)", "summary", "df-generated"] + - ["java.io", "ObjectOutputStream$PutField", "put", "(String,long)", "summary", "df-generated"] + - ["java.io", "ObjectOutputStream$PutField", "put", "(String,short)", "summary", "df-generated"] + - ["java.io", "ObjectOutputStream", "defaultWriteObject", "()", "summary", "df-generated"] + - ["java.io", "ObjectOutputStream", "reset", "()", "summary", "df-generated"] + - ["java.io", "ObjectOutputStream", "useProtocolVersion", "(int)", "summary", "df-generated"] + - ["java.io", "ObjectOutputStream", "writeFields", "()", "summary", "df-generated"] + - ["java.io", "ObjectStreamClass", "forClass", "()", "summary", "df-generated"] + - ["java.io", "ObjectStreamClass", "getSerialVersionUID", "()", "summary", "df-generated"] + - ["java.io", "ObjectStreamClass", "lookup", "(Class)", "summary", "df-generated"] + - ["java.io", "ObjectStreamClass", "lookupAny", "(Class)", "summary", "df-generated"] + - ["java.io", "ObjectStreamField", "getOffset", "()", "summary", "df-generated"] + - ["java.io", "ObjectStreamField", "getType", "()", "summary", "df-generated"] + - ["java.io", "ObjectStreamField", "getTypeCode", "()", "summary", "df-generated"] + - ["java.io", "ObjectStreamField", "isPrimitive", "()", "summary", "df-generated"] + - ["java.io", "ObjectStreamField", "isUnshared", "()", "summary", "df-generated"] + - ["java.io", "OutputStream", "nullOutputStream", "()", "summary", "df-generated"] + - ["java.io", "OutputStreamWriter", "getEncoding", "()", "summary", "df-generated"] + - ["java.io", "PipedInputStream", "PipedInputStream", "(int)", "summary", "df-generated"] + - ["java.io", "PipedReader", "PipedReader", "(int)", "summary", "df-generated"] + - ["java.io", "PrintStream", "checkError", "()", "summary", "df-generated"] + - ["java.io", "PrintStream", "print", "(boolean)", "summary", "df-generated"] + - ["java.io", "PrintStream", "print", "(char)", "summary", "df-generated"] + - ["java.io", "PrintStream", "print", "(double)", "summary", "df-generated"] + - ["java.io", "PrintStream", "print", "(float)", "summary", "df-generated"] + - ["java.io", "PrintStream", "print", "(int)", "summary", "df-generated"] + - ["java.io", "PrintStream", "print", "(long)", "summary", "df-generated"] + - ["java.io", "PrintStream", "println", "()", "summary", "df-generated"] + - ["java.io", "PrintStream", "println", "(boolean)", "summary", "df-generated"] + - ["java.io", "PrintStream", "println", "(char)", "summary", "df-generated"] + - ["java.io", "PrintStream", "println", "(double)", "summary", "df-generated"] + - ["java.io", "PrintStream", "println", "(float)", "summary", "df-generated"] + - ["java.io", "PrintStream", "println", "(int)", "summary", "df-generated"] + - ["java.io", "PrintStream", "println", "(long)", "summary", "df-generated"] + - ["java.io", "PrintWriter", "PrintWriter", "(File)", "summary", "df-generated"] + - ["java.io", "PrintWriter", "PrintWriter", "(File,Charset)", "summary", "df-generated"] + - ["java.io", "PrintWriter", "PrintWriter", "(File,String)", "summary", "df-generated"] + - ["java.io", "PrintWriter", "PrintWriter", "(String)", "summary", "df-generated"] + - ["java.io", "PrintWriter", "PrintWriter", "(String,Charset)", "summary", "df-generated"] + - ["java.io", "PrintWriter", "PrintWriter", "(String,String)", "summary", "df-generated"] + - ["java.io", "PrintWriter", "checkError", "()", "summary", "df-generated"] + - ["java.io", "PrintWriter", "print", "(boolean)", "summary", "df-generated"] + - ["java.io", "PrintWriter", "print", "(char)", "summary", "df-generated"] + - ["java.io", "PrintWriter", "print", "(double)", "summary", "df-generated"] + - ["java.io", "PrintWriter", "print", "(float)", "summary", "df-generated"] + - ["java.io", "PrintWriter", "print", "(int)", "summary", "df-generated"] + - ["java.io", "PrintWriter", "print", "(long)", "summary", "df-generated"] + - ["java.io", "PrintWriter", "println", "()", "summary", "df-generated"] + - ["java.io", "PrintWriter", "println", "(boolean)", "summary", "df-generated"] + - ["java.io", "PrintWriter", "println", "(char)", "summary", "df-generated"] + - ["java.io", "PrintWriter", "println", "(double)", "summary", "df-generated"] + - ["java.io", "PrintWriter", "println", "(float)", "summary", "df-generated"] + - ["java.io", "PrintWriter", "println", "(int)", "summary", "df-generated"] + - ["java.io", "PrintWriter", "println", "(long)", "summary", "df-generated"] + - ["java.io", "PushbackInputStream", "unread", "(int)", "summary", "df-generated"] + - ["java.io", "PushbackReader", "unread", "(int)", "summary", "df-generated"] + - ["java.io", "RandomAccessFile", "getFilePointer", "()", "summary", "df-generated"] + - ["java.io", "RandomAccessFile", "length", "()", "summary", "df-generated"] + - ["java.io", "RandomAccessFile", "read", "()", "summary", "df-generated"] + - ["java.io", "RandomAccessFile", "read", "(byte[])", "summary", "df-generated"] + - ["java.io", "RandomAccessFile", "read", "(byte[],int,int)", "summary", "df-generated"] + - ["java.io", "RandomAccessFile", "seek", "(long)", "summary", "df-generated"] + - ["java.io", "RandomAccessFile", "setLength", "(long)", "summary", "df-generated"] + - ["java.io", "Reader", "mark", "(int)", "summary", "df-generated"] + - ["java.io", "Reader", "markSupported", "()", "summary", "df-generated"] + - ["java.io", "Reader", "nullReader", "()", "summary", "df-generated"] + - ["java.io", "Reader", "ready", "()", "summary", "df-generated"] + - ["java.io", "Reader", "reset", "()", "summary", "df-generated"] + - ["java.io", "Reader", "skip", "(long)", "summary", "df-generated"] + - ["java.io", "SequenceInputStream", "SequenceInputStream", "(InputStream,InputStream)", "summary", "df-generated"] + - ["java.io", "StreamTokenizer", "commentChar", "(int)", "summary", "df-generated"] + - ["java.io", "StreamTokenizer", "eolIsSignificant", "(boolean)", "summary", "df-generated"] + - ["java.io", "StreamTokenizer", "lineno", "()", "summary", "df-generated"] + - ["java.io", "StreamTokenizer", "lowerCaseMode", "(boolean)", "summary", "df-generated"] + - ["java.io", "StreamTokenizer", "nextToken", "()", "summary", "df-generated"] + - ["java.io", "StreamTokenizer", "ordinaryChar", "(int)", "summary", "df-generated"] + - ["java.io", "StreamTokenizer", "ordinaryChars", "(int,int)", "summary", "df-generated"] + - ["java.io", "StreamTokenizer", "parseNumbers", "()", "summary", "df-generated"] + - ["java.io", "StreamTokenizer", "pushBack", "()", "summary", "df-generated"] + - ["java.io", "StreamTokenizer", "quoteChar", "(int)", "summary", "df-generated"] + - ["java.io", "StreamTokenizer", "resetSyntax", "()", "summary", "df-generated"] + - ["java.io", "StreamTokenizer", "slashSlashComments", "(boolean)", "summary", "df-generated"] + - ["java.io", "StreamTokenizer", "slashStarComments", "(boolean)", "summary", "df-generated"] + - ["java.io", "StreamTokenizer", "whitespaceChars", "(int,int)", "summary", "df-generated"] + - ["java.io", "StreamTokenizer", "wordChars", "(int,int)", "summary", "df-generated"] + - ["java.io", "StringWriter", "StringWriter", "(int)", "summary", "df-generated"] + - ["java.io", "Writer", "nullWriter", "()", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/java.lang.annotation.model.yml b/java/ql/lib/ext/generated/java.lang.annotation.model.yml new file mode 100644 index 00000000000..8417e0d4cee --- /dev/null +++ b/java/ql/lib/ext/generated/java.lang.annotation.model.yml @@ -0,0 +1,21 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["java.lang.annotation", "AnnotationFormatError", True, "AnnotationFormatError", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.annotation", "AnnotationFormatError", True, "AnnotationFormatError", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.annotation", "AnnotationFormatError", True, "AnnotationFormatError", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.annotation", "AnnotationFormatError", True, "AnnotationFormatError", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.annotation", "AnnotationTypeMismatchException", True, "AnnotationTypeMismatchException", "(Method,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.annotation", "AnnotationTypeMismatchException", True, "AnnotationTypeMismatchException", "(Method,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.annotation", "AnnotationTypeMismatchException", True, "element", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.annotation", "AnnotationTypeMismatchException", True, "foundType", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.annotation", "IncompleteAnnotationException", True, "IncompleteAnnotationException", "(Class,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.annotation", "IncompleteAnnotationException", True, "elementName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["java.lang.annotation", "IncompleteAnnotationException", "annotationType", "()", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/java.lang.constant.model.yml b/java/ql/lib/ext/generated/java.lang.constant.model.yml new file mode 100644 index 00000000000..efa0c1a5b8c --- /dev/null +++ b/java/ql/lib/ext/generated/java.lang.constant.model.yml @@ -0,0 +1,94 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["java.lang.constant", "ClassDesc", True, "arrayType", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "ClassDesc", True, "displayName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "ClassDesc", True, "nested", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "ClassDesc", True, "nested", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "ClassDesc", True, "nested", "(String,String[])", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "ClassDesc", True, "nested", "(String,String[])", "", "Argument[1].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "ClassDesc", True, "nested", "(String,String[])", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "ClassDesc", True, "of", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "ClassDesc", True, "of", "(String,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "ClassDesc", True, "of", "(String,String)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "ClassDesc", True, "ofDescriptor", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "ClassDesc", True, "packageName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "Constable", True, "describeConstable", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "ConstantDesc", True, "resolveConstantDesc", "(MethodHandles$Lookup)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "ConstantDesc", True, "resolveConstantDesc", "(MethodHandles$Lookup)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.lang.constant", "ConstantDescs", False, "ofCallsiteBootstrap", "(ClassDesc,String,ClassDesc,ClassDesc[])", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "ConstantDescs", False, "ofCallsiteBootstrap", "(ClassDesc,String,ClassDesc,ClassDesc[])", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "ConstantDescs", False, "ofCallsiteBootstrap", "(ClassDesc,String,ClassDesc,ClassDesc[])", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "ConstantDescs", False, "ofCallsiteBootstrap", "(ClassDesc,String,ClassDesc,ClassDesc[])", "", "Argument[3].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "ConstantDescs", False, "ofConstantBootstrap", "(ClassDesc,String,ClassDesc,ClassDesc[])", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "ConstantDescs", False, "ofConstantBootstrap", "(ClassDesc,String,ClassDesc,ClassDesc[])", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "ConstantDescs", False, "ofConstantBootstrap", "(ClassDesc,String,ClassDesc,ClassDesc[])", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "ConstantDescs", False, "ofConstantBootstrap", "(ClassDesc,String,ClassDesc,ClassDesc[])", "", "Argument[3].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "DirectMethodHandleDesc", True, "lookupDescriptor", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "DirectMethodHandleDesc", True, "methodName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "DirectMethodHandleDesc", True, "owner", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "DynamicCallSiteDesc", True, "bootstrapArgs", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "DynamicCallSiteDesc", True, "bootstrapMethod", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "DynamicCallSiteDesc", True, "invocationName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "DynamicCallSiteDesc", True, "invocationType", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "DynamicCallSiteDesc", True, "of", "(DirectMethodHandleDesc,MethodTypeDesc)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "DynamicCallSiteDesc", True, "of", "(DirectMethodHandleDesc,MethodTypeDesc)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "DynamicCallSiteDesc", True, "of", "(DirectMethodHandleDesc,String,MethodTypeDesc)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "DynamicCallSiteDesc", True, "of", "(DirectMethodHandleDesc,String,MethodTypeDesc)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "DynamicCallSiteDesc", True, "of", "(DirectMethodHandleDesc,String,MethodTypeDesc)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "DynamicCallSiteDesc", True, "of", "(DirectMethodHandleDesc,String,MethodTypeDesc,ConstantDesc[])", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "DynamicCallSiteDesc", True, "of", "(DirectMethodHandleDesc,String,MethodTypeDesc,ConstantDesc[])", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "DynamicCallSiteDesc", True, "of", "(DirectMethodHandleDesc,String,MethodTypeDesc,ConstantDesc[])", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "DynamicCallSiteDesc", True, "of", "(DirectMethodHandleDesc,String,MethodTypeDesc,ConstantDesc[])", "", "Argument[3].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "DynamicCallSiteDesc", True, "withArgs", "(ConstantDesc[])", "", "Argument[0].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "DynamicCallSiteDesc", True, "withArgs", "(ConstantDesc[])", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "DynamicCallSiteDesc", True, "withNameAndType", "(String,MethodTypeDesc)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "DynamicCallSiteDesc", True, "withNameAndType", "(String,MethodTypeDesc)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "DynamicCallSiteDesc", True, "withNameAndType", "(String,MethodTypeDesc)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "DynamicConstantDesc", True, "bootstrapArgs", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "DynamicConstantDesc", True, "bootstrapArgsList", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "DynamicConstantDesc", True, "bootstrapMethod", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "DynamicConstantDesc", True, "constantName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "DynamicConstantDesc", True, "constantType", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "DynamicConstantDesc", True, "of", "(DirectMethodHandleDesc)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "DynamicConstantDesc", True, "of", "(DirectMethodHandleDesc,ConstantDesc[])", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "DynamicConstantDesc", True, "of", "(DirectMethodHandleDesc,ConstantDesc[])", "", "Argument[1].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "DynamicConstantDesc", True, "ofCanonical", "(DirectMethodHandleDesc,String,ClassDesc,ConstantDesc[])", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "DynamicConstantDesc", True, "ofCanonical", "(DirectMethodHandleDesc,String,ClassDesc,ConstantDesc[])", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "DynamicConstantDesc", True, "ofCanonical", "(DirectMethodHandleDesc,String,ClassDesc,ConstantDesc[])", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "DynamicConstantDesc", True, "ofCanonical", "(DirectMethodHandleDesc,String,ClassDesc,ConstantDesc[])", "", "Argument[3].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "DynamicConstantDesc", True, "ofNamed", "(DirectMethodHandleDesc,String,ClassDesc,ConstantDesc[])", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "DynamicConstantDesc", True, "ofNamed", "(DirectMethodHandleDesc,String,ClassDesc,ConstantDesc[])", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "DynamicConstantDesc", True, "ofNamed", "(DirectMethodHandleDesc,String,ClassDesc,ConstantDesc[])", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "DynamicConstantDesc", True, "ofNamed", "(DirectMethodHandleDesc,String,ClassDesc,ConstantDesc[])", "", "Argument[3].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "MethodHandleDesc", True, "asType", "(MethodTypeDesc)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "MethodHandleDesc", True, "asType", "(MethodTypeDesc)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "MethodHandleDesc", True, "invocationType", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "MethodHandleDesc", True, "of", "(DirectMethodHandleDesc$Kind,ClassDesc,String,String)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "MethodHandleDesc", True, "of", "(DirectMethodHandleDesc$Kind,ClassDesc,String,String)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "MethodHandleDesc", True, "ofConstructor", "(ClassDesc,ClassDesc[])", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "MethodHandleDesc", True, "ofConstructor", "(ClassDesc,ClassDesc[])", "", "Argument[1].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "MethodHandleDesc", True, "ofField", "(DirectMethodHandleDesc$Kind,ClassDesc,String,ClassDesc)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "MethodHandleDesc", True, "ofField", "(DirectMethodHandleDesc$Kind,ClassDesc,String,ClassDesc)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "MethodHandleDesc", True, "ofField", "(DirectMethodHandleDesc$Kind,ClassDesc,String,ClassDesc)", "", "Argument[3]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "MethodHandleDesc", True, "ofMethod", "(DirectMethodHandleDesc$Kind,ClassDesc,String,MethodTypeDesc)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "MethodHandleDesc", True, "ofMethod", "(DirectMethodHandleDesc$Kind,ClassDesc,String,MethodTypeDesc)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "MethodHandleDesc", True, "ofMethod", "(DirectMethodHandleDesc$Kind,ClassDesc,String,MethodTypeDesc)", "", "Argument[3]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "MethodTypeDesc", True, "displayDescriptor", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "MethodTypeDesc", True, "of", "(ClassDesc,ClassDesc[])", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "MethodTypeDesc", True, "of", "(ClassDesc,ClassDesc[])", "", "Argument[1].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "MethodTypeDesc", True, "ofDescriptor", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["java.lang.constant", "ClassDesc", "isClassOrInterface", "()", "summary", "df-generated"] + - ["java.lang.constant", "DirectMethodHandleDesc$Kind", "valueOf", "(int)", "summary", "df-generated"] + - ["java.lang.constant", "DirectMethodHandleDesc$Kind", "valueOf", "(int,boolean)", "summary", "df-generated"] + - ["java.lang.constant", "DirectMethodHandleDesc", "isOwnerInterface", "()", "summary", "df-generated"] + - ["java.lang.constant", "DirectMethodHandleDesc", "kind", "()", "summary", "df-generated"] + - ["java.lang.constant", "DirectMethodHandleDesc", "refKind", "()", "summary", "df-generated"] + - ["java.lang.constant", "DynamicCallSiteDesc", "resolveCallSiteDesc", "(MethodHandles$Lookup)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/java.lang.instrument.model.yml b/java/ql/lib/ext/generated/java.lang.instrument.model.yml new file mode 100644 index 00000000000..ed5693a13d4 --- /dev/null +++ b/java/ql/lib/ext/generated/java.lang.instrument.model.yml @@ -0,0 +1,18 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["java.lang.instrument", "ClassDefinition", False, "ClassDefinition", "(Class,byte[])", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.instrument", "ClassDefinition", False, "getDefinitionClassFile", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.instrument", "IllegalClassFormatException", True, "IllegalClassFormatException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.instrument", "UnmodifiableClassException", True, "UnmodifiableClassException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.instrument", "UnmodifiableModuleException", True, "UnmodifiableModuleException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["java.lang.instrument", "ClassDefinition", "getDefinitionClass", "()", "summary", "df-generated"] + - ["java.lang.instrument", "ClassFileTransformer", "transform", "(ClassLoader,String,Class,ProtectionDomain,byte[])", "summary", "df-generated"] + - ["java.lang.instrument", "ClassFileTransformer", "transform", "(Module,ClassLoader,String,Class,ProtectionDomain,byte[])", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/java.lang.invoke.model.yml b/java/ql/lib/ext/generated/java.lang.invoke.model.yml new file mode 100644 index 00000000000..16ba799e924 --- /dev/null +++ b/java/ql/lib/ext/generated/java.lang.invoke.model.yml @@ -0,0 +1,265 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["java.lang.invoke", "CallSite", True, "dynamicInvoker", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "CallSite", True, "getTarget", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "CallSite", True, "type", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "ClassSpecializer$SpeciesData", True, "key", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "ConstantBootstraps", False, "explicitCast", "(MethodHandles$Lookup,String,Class,Object)", "", "Argument[3]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "ConstantCallSite", True, "ConstantCallSite", "(MethodHandle)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.invoke", "LambdaConversionException", True, "LambdaConversionException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.invoke", "LambdaConversionException", True, "LambdaConversionException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.invoke", "LambdaConversionException", True, "LambdaConversionException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.invoke", "LambdaConversionException", True, "LambdaConversionException", "(String,Throwable,boolean,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.invoke", "LambdaConversionException", True, "LambdaConversionException", "(String,Throwable,boolean,boolean)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.invoke", "LambdaConversionException", True, "LambdaConversionException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.invoke", "LambdaMetafactory", False, "altMetafactory", "(MethodHandles$Lookup,String,MethodType,Object[])", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "LambdaMetafactory", False, "metafactory", "(MethodHandles$Lookup,String,MethodType,MethodType,MethodHandle,MethodType)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "MethodHandle", True, "asCollector", "(Class,int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "MethodHandle", True, "asCollector", "(int,Class,int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "MethodHandle", True, "asFixedArity", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "MethodHandle", True, "asFixedArity", "()", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.lang.invoke", "MethodHandle", True, "asSpreader", "(Class,int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "MethodHandle", True, "asSpreader", "(int,Class,int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "MethodHandle", True, "asType", "(MethodType)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.invoke", "MethodHandle", True, "asType", "(MethodType)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.lang.invoke", "MethodHandle", True, "asTypeUncached", "(MethodType)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.invoke", "MethodHandle", True, "asTypeUncached", "(MethodType)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "MethodHandle", True, "asTypeUncached", "(MethodType)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "MethodHandle", True, "asVarargsCollector", "(Class)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.lang.invoke", "MethodHandle", True, "bindTo", "(Object)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "MethodHandle", True, "bindTo", "(Object)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "MethodHandle", True, "type", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "MethodHandle", True, "withVarargs", "(boolean)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.lang.invoke", "MethodHandleInfo", True, "getMethodType", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "MethodHandleInfo", True, "getName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "MethodHandles$Lookup", False, "bind", "(Object,String,MethodType)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "MethodHandles$Lookup", False, "dropLookupMode", "(int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.lang.invoke", "MethodHandles$Lookup", False, "findConstructor", "(Class,MethodType)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "MethodHandles$Lookup", False, "findGetter", "(Class,String,Class)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "MethodHandles$Lookup", False, "findSetter", "(Class,String,Class)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "MethodHandles$Lookup", False, "findSpecial", "(Class,String,MethodType,Class)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "MethodHandles$Lookup", False, "findSpecial", "(Class,String,MethodType,Class)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "MethodHandles$Lookup", False, "findStatic", "(Class,String,MethodType)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "MethodHandles$Lookup", False, "findStatic", "(Class,String,MethodType)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "MethodHandles$Lookup", False, "findStaticGetter", "(Class,String,Class)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "MethodHandles$Lookup", False, "findStaticSetter", "(Class,String,Class)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "MethodHandles$Lookup", False, "findVirtual", "(Class,String,MethodType)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "MethodHandles$Lookup", False, "findVirtual", "(Class,String,MethodType)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "MethodHandles$Lookup", False, "in", "(Class)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.lang.invoke", "MethodHandles$Lookup", False, "revealDirect", "(MethodHandle)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "MethodHandles$Lookup", False, "unreflect", "(Method)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "MethodHandles$Lookup", False, "unreflectConstructor", "(Constructor)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "MethodHandles$Lookup", False, "unreflectGetter", "(Field)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "MethodHandles$Lookup", False, "unreflectSetter", "(Field)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "MethodHandles$Lookup", False, "unreflectSpecial", "(Method,Class)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "MethodHandles", True, "collectArguments", "(MethodHandle,int,MethodHandle)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "MethodHandles", True, "collectArguments", "(MethodHandle,int,MethodHandle)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "MethodHandles", True, "constant", "(Class,Object)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "MethodHandles", True, "dropArguments", "(MethodHandle,int,Class[])", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "MethodHandles", True, "dropArguments", "(MethodHandle,int,List)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "MethodHandles", True, "dropArgumentsToMatch", "(MethodHandle,int,List,int)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "MethodHandles", True, "dropReturn", "(MethodHandle)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "MethodHandles", True, "exactInvoker", "(MethodType)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "MethodHandles", True, "explicitCastArguments", "(MethodHandle,MethodType)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "MethodHandles", True, "explicitCastArguments", "(MethodHandle,MethodType)", "", "Argument[1]", "Argument[0]", "taint", "df-generated"] + - ["java.lang.invoke", "MethodHandles", True, "explicitCastArguments", "(MethodHandle,MethodType)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "MethodHandles", True, "filterArguments", "(MethodHandle,int,MethodHandle[])", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "MethodHandles", True, "filterArguments", "(MethodHandle,int,MethodHandle[])", "", "Argument[2].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "MethodHandles", True, "filterReturnValue", "(MethodHandle,MethodHandle)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "MethodHandles", True, "filterReturnValue", "(MethodHandle,MethodHandle)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "MethodHandles", True, "foldArguments", "(MethodHandle,MethodHandle)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "MethodHandles", True, "foldArguments", "(MethodHandle,MethodHandle)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "MethodHandles", True, "foldArguments", "(MethodHandle,int,MethodHandle)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "MethodHandles", True, "foldArguments", "(MethodHandle,int,MethodHandle)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "MethodHandles", True, "insertArguments", "(MethodHandle,int,Object[])", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "MethodHandles", True, "insertArguments", "(MethodHandle,int,Object[])", "", "Argument[2].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "MethodHandles", True, "invoker", "(MethodType)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "MethodHandles", True, "permuteArguments", "(MethodHandle,MethodType,int[])", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "MethodHandles", True, "permuteArguments", "(MethodHandle,MethodType,int[])", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "MethodHandles", True, "varHandleExactInvoker", "(VarHandle$AccessMode,MethodType)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "MethodHandles", True, "varHandleInvoker", "(VarHandle$AccessMode,MethodType)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "MethodType", False, "appendParameterTypes", "(Class[])", "", "Argument[0].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "MethodType", False, "appendParameterTypes", "(Class[])", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "MethodType", False, "appendParameterTypes", "(List)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "MethodType", False, "appendParameterTypes", "(List)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "MethodType", False, "erase", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "MethodType", False, "insertParameterTypes", "(int,List)", "", "Argument[1].Element", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "MethodType", False, "insertParameterTypes", "(int,List)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "MethodType", False, "methodType", "(Class,Class,Class[])", "", "Argument[2].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "MethodType", False, "methodType", "(Class,Class[])", "", "Argument[1].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "MethodType", False, "methodType", "(Class,List)", "", "Argument[1].Element", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "MethodType", False, "methodType", "(Class,MethodType)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "MethodType", False, "toMethodDescriptorString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "MethodType", False, "unwrap", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "MethodType", False, "wrap", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "MutableCallSite", True, "MutableCallSite", "(MethodHandle)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.invoke", "MutableCallSite", True, "MutableCallSite", "(MethodType)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.invoke", "SerializedLambda", False, "SerializedLambda", "(Class,String,String,String,int,String,String,String,String,Object[])", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.invoke", "SerializedLambda", False, "SerializedLambda", "(Class,String,String,String,int,String,String,String,String,Object[])", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.invoke", "SerializedLambda", False, "SerializedLambda", "(Class,String,String,String,int,String,String,String,String,Object[])", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.invoke", "SerializedLambda", False, "SerializedLambda", "(Class,String,String,String,int,String,String,String,String,Object[])", "", "Argument[5]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.invoke", "SerializedLambda", False, "SerializedLambda", "(Class,String,String,String,int,String,String,String,String,Object[])", "", "Argument[6]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.invoke", "SerializedLambda", False, "SerializedLambda", "(Class,String,String,String,int,String,String,String,String,Object[])", "", "Argument[7]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.invoke", "SerializedLambda", False, "SerializedLambda", "(Class,String,String,String,int,String,String,String,String,Object[])", "", "Argument[8]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.invoke", "SerializedLambda", False, "SerializedLambda", "(Class,String,String,String,int,String,String,String,String,Object[])", "", "Argument[9].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["java.lang.invoke", "SerializedLambda", False, "getCapturedArg", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "SerializedLambda", False, "getFunctionalInterfaceClass", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "SerializedLambda", False, "getFunctionalInterfaceMethodName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "SerializedLambda", False, "getFunctionalInterfaceMethodSignature", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "SerializedLambda", False, "getImplClass", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "SerializedLambda", False, "getImplMethodName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "SerializedLambda", False, "getImplMethodSignature", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "SerializedLambda", False, "getInstantiatedMethodType", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "StringConcatException", True, "StringConcatException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.invoke", "StringConcatException", True, "StringConcatException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.invoke", "StringConcatException", True, "StringConcatException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.invoke", "StringConcatFactory", False, "makeConcat", "(MethodHandles$Lookup,String,MethodType)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "StringConcatFactory", False, "makeConcatWithConstants", "(MethodHandles$Lookup,String,MethodType,String,Object[])", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "SwitchPoint", True, "guardWithTest", "(MethodHandle,MethodHandle)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "TypeDescriptor", True, "descriptorString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "VarHandle$VarHandleDesc", False, "ofArray", "(ClassDesc)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "VarHandle$VarHandleDesc", False, "ofField", "(ClassDesc,String,ClassDesc)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "VarHandle$VarHandleDesc", False, "ofField", "(ClassDesc,String,ClassDesc)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "VarHandle$VarHandleDesc", False, "ofField", "(ClassDesc,String,ClassDesc)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "VarHandle$VarHandleDesc", False, "ofStaticField", "(ClassDesc,String,ClassDesc)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "VarHandle$VarHandleDesc", False, "ofStaticField", "(ClassDesc,String,ClassDesc)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "VarHandle$VarHandleDesc", False, "ofStaticField", "(ClassDesc,String,ClassDesc)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "VarHandle$VarHandleDesc", False, "varType", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "VarHandle", True, "accessModeType", "(VarHandle$AccessMode)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "VarHandle", True, "coordinateTypes", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "VarHandle", True, "toMethodHandle", "(VarHandle$AccessMode)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "VarHandle", True, "withInvokeBehavior", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "VarHandle", True, "withInvokeExactBehavior", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "VolatileCallSite", True, "VolatileCallSite", "(MethodHandle)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.invoke", "VolatileCallSite", True, "VolatileCallSite", "(MethodType)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.invoke", "WrongMethodTypeException", True, "WrongMethodTypeException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["java.lang.invoke", "CallSite", "setTarget", "(MethodHandle)", "summary", "df-generated"] + - ["java.lang.invoke", "ConstantBootstraps", "arrayVarHandle", "(MethodHandles$Lookup,String,Class,Class)", "summary", "df-generated"] + - ["java.lang.invoke", "ConstantBootstraps", "enumConstant", "(MethodHandles$Lookup,String,Class)", "summary", "df-generated"] + - ["java.lang.invoke", "ConstantBootstraps", "fieldVarHandle", "(MethodHandles$Lookup,String,Class,Class,Class)", "summary", "df-generated"] + - ["java.lang.invoke", "ConstantBootstraps", "getStaticFinal", "(MethodHandles$Lookup,String,Class)", "summary", "df-generated"] + - ["java.lang.invoke", "ConstantBootstraps", "getStaticFinal", "(MethodHandles$Lookup,String,Class,Class)", "summary", "df-generated"] + - ["java.lang.invoke", "ConstantBootstraps", "invoke", "(MethodHandles$Lookup,String,Class,MethodHandle,Object[])", "summary", "df-generated"] + - ["java.lang.invoke", "ConstantBootstraps", "nullConstant", "(MethodHandles$Lookup,String,Class)", "summary", "df-generated"] + - ["java.lang.invoke", "ConstantBootstraps", "primitiveClass", "(MethodHandles$Lookup,String,Class)", "summary", "df-generated"] + - ["java.lang.invoke", "ConstantBootstraps", "staticFieldVarHandle", "(MethodHandles$Lookup,String,Class,Class,Class)", "summary", "df-generated"] + - ["java.lang.invoke", "MethodHandle", "invoke", "(Object[])", "summary", "df-generated"] + - ["java.lang.invoke", "MethodHandle", "invokeExact", "(Object[])", "summary", "df-generated"] + - ["java.lang.invoke", "MethodHandle", "invokeWithArguments", "(List)", "summary", "df-generated"] + - ["java.lang.invoke", "MethodHandle", "invokeWithArguments", "(Object[])", "summary", "df-generated"] + - ["java.lang.invoke", "MethodHandle", "isVarargsCollector", "()", "summary", "df-generated"] + - ["java.lang.invoke", "MethodHandleInfo", "getDeclaringClass", "()", "summary", "df-generated"] + - ["java.lang.invoke", "MethodHandleInfo", "getModifiers", "()", "summary", "df-generated"] + - ["java.lang.invoke", "MethodHandleInfo", "getReferenceKind", "()", "summary", "df-generated"] + - ["java.lang.invoke", "MethodHandleInfo", "isVarArgs", "()", "summary", "df-generated"] + - ["java.lang.invoke", "MethodHandleInfo", "referenceKindToString", "(int)", "summary", "df-generated"] + - ["java.lang.invoke", "MethodHandleInfo", "reflectAs", "(Class,MethodHandles$Lookup)", "summary", "df-generated"] + - ["java.lang.invoke", "MethodHandleProxies", "asInterfaceInstance", "(Class,MethodHandle)", "summary", "df-generated"] + - ["java.lang.invoke", "MethodHandleProxies", "isWrapperInstance", "(Object)", "summary", "df-generated"] + - ["java.lang.invoke", "MethodHandleProxies", "wrapperInstanceTarget", "(Object)", "summary", "df-generated"] + - ["java.lang.invoke", "MethodHandleProxies", "wrapperInstanceType", "(Object)", "summary", "df-generated"] + - ["java.lang.invoke", "MethodHandles$Lookup", "accessClass", "(Class)", "summary", "df-generated"] + - ["java.lang.invoke", "MethodHandles$Lookup", "defineClass", "(byte[])", "summary", "df-generated"] + - ["java.lang.invoke", "MethodHandles$Lookup", "defineHiddenClass", "(byte[],boolean,MethodHandles$Lookup$ClassOption[])", "summary", "df-generated"] + - ["java.lang.invoke", "MethodHandles$Lookup", "defineHiddenClassWithClassData", "(byte[],Object,boolean,MethodHandles$Lookup$ClassOption[])", "summary", "df-generated"] + - ["java.lang.invoke", "MethodHandles$Lookup", "ensureInitialized", "(Class)", "summary", "df-generated"] + - ["java.lang.invoke", "MethodHandles$Lookup", "findClass", "(String)", "summary", "df-generated"] + - ["java.lang.invoke", "MethodHandles$Lookup", "findStaticVarHandle", "(Class,String,Class)", "summary", "df-generated"] + - ["java.lang.invoke", "MethodHandles$Lookup", "findVarHandle", "(Class,String,Class)", "summary", "df-generated"] + - ["java.lang.invoke", "MethodHandles$Lookup", "hasFullPrivilegeAccess", "()", "summary", "df-generated"] + - ["java.lang.invoke", "MethodHandles$Lookup", "hasPrivateAccess", "()", "summary", "df-generated"] + - ["java.lang.invoke", "MethodHandles$Lookup", "lookupClass", "()", "summary", "df-generated"] + - ["java.lang.invoke", "MethodHandles$Lookup", "lookupModes", "()", "summary", "df-generated"] + - ["java.lang.invoke", "MethodHandles$Lookup", "previousLookupClass", "()", "summary", "df-generated"] + - ["java.lang.invoke", "MethodHandles$Lookup", "unreflectVarHandle", "(Field)", "summary", "df-generated"] + - ["java.lang.invoke", "MethodHandles", "arrayConstructor", "(Class)", "summary", "df-generated"] + - ["java.lang.invoke", "MethodHandles", "arrayElementGetter", "(Class)", "summary", "df-generated"] + - ["java.lang.invoke", "MethodHandles", "arrayElementSetter", "(Class)", "summary", "df-generated"] + - ["java.lang.invoke", "MethodHandles", "arrayElementVarHandle", "(Class)", "summary", "df-generated"] + - ["java.lang.invoke", "MethodHandles", "arrayLength", "(Class)", "summary", "df-generated"] + - ["java.lang.invoke", "MethodHandles", "byteArrayViewVarHandle", "(Class,ByteOrder)", "summary", "df-generated"] + - ["java.lang.invoke", "MethodHandles", "byteBufferViewVarHandle", "(Class,ByteOrder)", "summary", "df-generated"] + - ["java.lang.invoke", "MethodHandles", "catchException", "(MethodHandle,Class,MethodHandle)", "summary", "df-generated"] + - ["java.lang.invoke", "MethodHandles", "classData", "(MethodHandles$Lookup,String,Class)", "summary", "df-generated"] + - ["java.lang.invoke", "MethodHandles", "classDataAt", "(MethodHandles$Lookup,String,Class,int)", "summary", "df-generated"] + - ["java.lang.invoke", "MethodHandles", "countedLoop", "(MethodHandle,MethodHandle,MethodHandle)", "summary", "df-generated"] + - ["java.lang.invoke", "MethodHandles", "countedLoop", "(MethodHandle,MethodHandle,MethodHandle,MethodHandle)", "summary", "df-generated"] + - ["java.lang.invoke", "MethodHandles", "doWhileLoop", "(MethodHandle,MethodHandle,MethodHandle)", "summary", "df-generated"] + - ["java.lang.invoke", "MethodHandles", "empty", "(MethodType)", "summary", "df-generated"] + - ["java.lang.invoke", "MethodHandles", "guardWithTest", "(MethodHandle,MethodHandle,MethodHandle)", "summary", "df-generated"] + - ["java.lang.invoke", "MethodHandles", "identity", "(Class)", "summary", "df-generated"] + - ["java.lang.invoke", "MethodHandles", "iteratedLoop", "(MethodHandle,MethodHandle,MethodHandle)", "summary", "df-generated"] + - ["java.lang.invoke", "MethodHandles", "loop", "(MethodHandle[][])", "summary", "df-generated"] + - ["java.lang.invoke", "MethodHandles", "privateLookupIn", "(Class,MethodHandles$Lookup)", "summary", "df-generated"] + - ["java.lang.invoke", "MethodHandles", "publicLookup", "()", "summary", "df-generated"] + - ["java.lang.invoke", "MethodHandles", "reflectAs", "(Class,MethodHandle)", "summary", "df-generated"] + - ["java.lang.invoke", "MethodHandles", "spreadInvoker", "(MethodType,int)", "summary", "df-generated"] + - ["java.lang.invoke", "MethodHandles", "tableSwitch", "(MethodHandle,MethodHandle[])", "summary", "df-generated"] + - ["java.lang.invoke", "MethodHandles", "throwException", "(Class,Class)", "summary", "df-generated"] + - ["java.lang.invoke", "MethodHandles", "tryFinally", "(MethodHandle,MethodHandle)", "summary", "df-generated"] + - ["java.lang.invoke", "MethodHandles", "whileLoop", "(MethodHandle,MethodHandle,MethodHandle)", "summary", "df-generated"] + - ["java.lang.invoke", "MethodHandles", "zero", "(Class)", "summary", "df-generated"] + - ["java.lang.invoke", "MethodType", "fromMethodDescriptorString", "(String,ClassLoader)", "summary", "df-generated"] + - ["java.lang.invoke", "MethodType", "generic", "()", "summary", "df-generated"] + - ["java.lang.invoke", "MethodType", "genericMethodType", "(int)", "summary", "df-generated"] + - ["java.lang.invoke", "MethodType", "genericMethodType", "(int,boolean)", "summary", "df-generated"] + - ["java.lang.invoke", "MethodType", "hasPrimitives", "()", "summary", "df-generated"] + - ["java.lang.invoke", "MethodType", "hasWrappers", "()", "summary", "df-generated"] + - ["java.lang.invoke", "MethodType", "lastParameterType", "()", "summary", "df-generated"] + - ["java.lang.invoke", "MethodType", "methodType", "(Class)", "summary", "df-generated"] + - ["java.lang.invoke", "MethodType", "methodType", "(Class,Class)", "summary", "df-generated"] + - ["java.lang.invoke", "MutableCallSite", "syncAll", "(MutableCallSite[])", "summary", "df-generated"] + - ["java.lang.invoke", "SerializedLambda", "getCapturedArgCount", "()", "summary", "df-generated"] + - ["java.lang.invoke", "SerializedLambda", "getCapturingClass", "()", "summary", "df-generated"] + - ["java.lang.invoke", "SerializedLambda", "getImplMethodKind", "()", "summary", "df-generated"] + - ["java.lang.invoke", "SwitchPoint", "hasBeenInvalidated", "()", "summary", "df-generated"] + - ["java.lang.invoke", "SwitchPoint", "invalidateAll", "(SwitchPoint[])", "summary", "df-generated"] + - ["java.lang.invoke", "VarHandle$AccessMode", "methodName", "()", "summary", "df-generated"] + - ["java.lang.invoke", "VarHandle$AccessMode", "valueFromMethodName", "(String)", "summary", "df-generated"] + - ["java.lang.invoke", "VarHandle", "acquireFence", "()", "summary", "df-generated"] + - ["java.lang.invoke", "VarHandle", "compareAndExchange", "(Object[])", "summary", "df-generated"] + - ["java.lang.invoke", "VarHandle", "compareAndExchangeAcquire", "(Object[])", "summary", "df-generated"] + - ["java.lang.invoke", "VarHandle", "compareAndExchangeRelease", "(Object[])", "summary", "df-generated"] + - ["java.lang.invoke", "VarHandle", "compareAndSet", "(Object[])", "summary", "df-generated"] + - ["java.lang.invoke", "VarHandle", "fullFence", "()", "summary", "df-generated"] + - ["java.lang.invoke", "VarHandle", "get", "(Object[])", "summary", "df-generated"] + - ["java.lang.invoke", "VarHandle", "getAcquire", "(Object[])", "summary", "df-generated"] + - ["java.lang.invoke", "VarHandle", "getAndAdd", "(Object[])", "summary", "df-generated"] + - ["java.lang.invoke", "VarHandle", "getAndAddAcquire", "(Object[])", "summary", "df-generated"] + - ["java.lang.invoke", "VarHandle", "getAndAddRelease", "(Object[])", "summary", "df-generated"] + - ["java.lang.invoke", "VarHandle", "getAndBitwiseAnd", "(Object[])", "summary", "df-generated"] + - ["java.lang.invoke", "VarHandle", "getAndBitwiseAndAcquire", "(Object[])", "summary", "df-generated"] + - ["java.lang.invoke", "VarHandle", "getAndBitwiseAndRelease", "(Object[])", "summary", "df-generated"] + - ["java.lang.invoke", "VarHandle", "getAndBitwiseOr", "(Object[])", "summary", "df-generated"] + - ["java.lang.invoke", "VarHandle", "getAndBitwiseOrAcquire", "(Object[])", "summary", "df-generated"] + - ["java.lang.invoke", "VarHandle", "getAndBitwiseOrRelease", "(Object[])", "summary", "df-generated"] + - ["java.lang.invoke", "VarHandle", "getAndBitwiseXor", "(Object[])", "summary", "df-generated"] + - ["java.lang.invoke", "VarHandle", "getAndBitwiseXorAcquire", "(Object[])", "summary", "df-generated"] + - ["java.lang.invoke", "VarHandle", "getAndBitwiseXorRelease", "(Object[])", "summary", "df-generated"] + - ["java.lang.invoke", "VarHandle", "getAndSet", "(Object[])", "summary", "df-generated"] + - ["java.lang.invoke", "VarHandle", "getAndSetAcquire", "(Object[])", "summary", "df-generated"] + - ["java.lang.invoke", "VarHandle", "getAndSetRelease", "(Object[])", "summary", "df-generated"] + - ["java.lang.invoke", "VarHandle", "getOpaque", "(Object[])", "summary", "df-generated"] + - ["java.lang.invoke", "VarHandle", "getVolatile", "(Object[])", "summary", "df-generated"] + - ["java.lang.invoke", "VarHandle", "hasInvokeExactBehavior", "()", "summary", "df-generated"] + - ["java.lang.invoke", "VarHandle", "isAccessModeSupported", "(VarHandle$AccessMode)", "summary", "df-generated"] + - ["java.lang.invoke", "VarHandle", "loadLoadFence", "()", "summary", "df-generated"] + - ["java.lang.invoke", "VarHandle", "releaseFence", "()", "summary", "df-generated"] + - ["java.lang.invoke", "VarHandle", "set", "(Object[])", "summary", "df-generated"] + - ["java.lang.invoke", "VarHandle", "setOpaque", "(Object[])", "summary", "df-generated"] + - ["java.lang.invoke", "VarHandle", "setRelease", "(Object[])", "summary", "df-generated"] + - ["java.lang.invoke", "VarHandle", "setVolatile", "(Object[])", "summary", "df-generated"] + - ["java.lang.invoke", "VarHandle", "storeStoreFence", "()", "summary", "df-generated"] + - ["java.lang.invoke", "VarHandle", "varType", "()", "summary", "df-generated"] + - ["java.lang.invoke", "VarHandle", "weakCompareAndSet", "(Object[])", "summary", "df-generated"] + - ["java.lang.invoke", "VarHandle", "weakCompareAndSetAcquire", "(Object[])", "summary", "df-generated"] + - ["java.lang.invoke", "VarHandle", "weakCompareAndSetPlain", "(Object[])", "summary", "df-generated"] + - ["java.lang.invoke", "VarHandle", "weakCompareAndSetRelease", "(Object[])", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/java.lang.management.model.yml b/java/ql/lib/ext/generated/java.lang.management.model.yml new file mode 100644 index 00000000000..6fd0dea3597 --- /dev/null +++ b/java/ql/lib/ext/generated/java.lang.management.model.yml @@ -0,0 +1,71 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["java.lang.management", "LockInfo", True, "LockInfo", "(String,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.management", "LockInfo", True, "from", "(CompositeData)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.management", "LockInfo", True, "getClassName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.management", "ManagementPermission", False, "ManagementPermission", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.management", "ManagementPermission", False, "ManagementPermission", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.management", "MemoryNotificationInfo", True, "MemoryNotificationInfo", "(String,MemoryUsage,long)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.management", "MemoryNotificationInfo", True, "MemoryNotificationInfo", "(String,MemoryUsage,long)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.management", "MemoryNotificationInfo", True, "from", "(CompositeData)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.management", "MemoryNotificationInfo", True, "getPoolName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.management", "MemoryNotificationInfo", True, "getUsage", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.management", "MemoryUsage", True, "from", "(CompositeData)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.management", "MonitorInfo", True, "MonitorInfo", "(String,int,int,StackTraceElement)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.management", "MonitorInfo", True, "MonitorInfo", "(String,int,int,StackTraceElement)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.management", "MonitorInfo", True, "from", "(CompositeData)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.management", "MonitorInfo", True, "getLockedStackFrame", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.management", "ThreadInfo", True, "from", "(CompositeData)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.management", "ThreadInfo", True, "getLockInfo", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.management", "ThreadInfo", True, "getLockName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.management", "ThreadInfo", True, "getLockOwnerName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.management", "ThreadInfo", True, "getLockedMonitors", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.management", "ThreadInfo", True, "getLockedSynchronizers", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.management", "ThreadInfo", True, "getStackTrace", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.management", "ThreadInfo", True, "getThreadName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["java.lang.management", "LockInfo", "getIdentityHashCode", "()", "summary", "df-generated"] + - ["java.lang.management", "ManagementFactory", "getClassLoadingMXBean", "()", "summary", "df-generated"] + - ["java.lang.management", "ManagementFactory", "getCompilationMXBean", "()", "summary", "df-generated"] + - ["java.lang.management", "ManagementFactory", "getGarbageCollectorMXBeans", "()", "summary", "df-generated"] + - ["java.lang.management", "ManagementFactory", "getMemoryMXBean", "()", "summary", "df-generated"] + - ["java.lang.management", "ManagementFactory", "getMemoryManagerMXBeans", "()", "summary", "df-generated"] + - ["java.lang.management", "ManagementFactory", "getMemoryPoolMXBeans", "()", "summary", "df-generated"] + - ["java.lang.management", "ManagementFactory", "getOperatingSystemMXBean", "()", "summary", "df-generated"] + - ["java.lang.management", "ManagementFactory", "getPlatformMBeanServer", "()", "summary", "df-generated"] + - ["java.lang.management", "ManagementFactory", "getPlatformMXBean", "(Class)", "summary", "df-generated"] + - ["java.lang.management", "ManagementFactory", "getPlatformMXBean", "(MBeanServerConnection,Class)", "summary", "df-generated"] + - ["java.lang.management", "ManagementFactory", "getPlatformMXBeans", "(Class)", "summary", "df-generated"] + - ["java.lang.management", "ManagementFactory", "getPlatformMXBeans", "(MBeanServerConnection,Class)", "summary", "df-generated"] + - ["java.lang.management", "ManagementFactory", "getPlatformManagementInterfaces", "()", "summary", "df-generated"] + - ["java.lang.management", "ManagementFactory", "getRuntimeMXBean", "()", "summary", "df-generated"] + - ["java.lang.management", "ManagementFactory", "getThreadMXBean", "()", "summary", "df-generated"] + - ["java.lang.management", "ManagementFactory", "newPlatformMXBeanProxy", "(MBeanServerConnection,String,Class)", "summary", "df-generated"] + - ["java.lang.management", "MemoryNotificationInfo", "getCount", "()", "summary", "df-generated"] + - ["java.lang.management", "MemoryUsage", "MemoryUsage", "(long,long,long,long)", "summary", "df-generated"] + - ["java.lang.management", "MemoryUsage", "getCommitted", "()", "summary", "df-generated"] + - ["java.lang.management", "MemoryUsage", "getInit", "()", "summary", "df-generated"] + - ["java.lang.management", "MemoryUsage", "getMax", "()", "summary", "df-generated"] + - ["java.lang.management", "MemoryUsage", "getUsed", "()", "summary", "df-generated"] + - ["java.lang.management", "MonitorInfo", "getLockedStackDepth", "()", "summary", "df-generated"] + - ["java.lang.management", "RuntimeMXBean", "getPid", "()", "summary", "df-generated"] + - ["java.lang.management", "ThreadInfo", "getBlockedCount", "()", "summary", "df-generated"] + - ["java.lang.management", "ThreadInfo", "getBlockedTime", "()", "summary", "df-generated"] + - ["java.lang.management", "ThreadInfo", "getLockOwnerId", "()", "summary", "df-generated"] + - ["java.lang.management", "ThreadInfo", "getPriority", "()", "summary", "df-generated"] + - ["java.lang.management", "ThreadInfo", "getThreadId", "()", "summary", "df-generated"] + - ["java.lang.management", "ThreadInfo", "getThreadState", "()", "summary", "df-generated"] + - ["java.lang.management", "ThreadInfo", "getWaitedCount", "()", "summary", "df-generated"] + - ["java.lang.management", "ThreadInfo", "getWaitedTime", "()", "summary", "df-generated"] + - ["java.lang.management", "ThreadInfo", "isDaemon", "()", "summary", "df-generated"] + - ["java.lang.management", "ThreadInfo", "isInNative", "()", "summary", "df-generated"] + - ["java.lang.management", "ThreadInfo", "isSuspended", "()", "summary", "df-generated"] + - ["java.lang.management", "ThreadMXBean", "dumpAllThreads", "(boolean,boolean,int)", "summary", "df-generated"] + - ["java.lang.management", "ThreadMXBean", "getThreadInfo", "(long[],boolean,boolean,int)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/java.lang.model.yml b/java/ql/lib/ext/generated/java.lang.model.yml new file mode 100644 index 00000000000..e9b8c6c85ea --- /dev/null +++ b/java/ql/lib/ext/generated/java.lang.model.yml @@ -0,0 +1,959 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["java.lang", "AbstractMethodError", True, "AbstractMethodError", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "AbstractStringBuilder", True, "appendCodePoint", "(int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.lang", "AbstractStringBuilder", True, "deleteCharAt", "(int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.lang", "ArithmeticException", True, "ArithmeticException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "ArrayIndexOutOfBoundsException", True, "ArrayIndexOutOfBoundsException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "ArrayStoreException", True, "ArrayStoreException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "AssertionError", True, "AssertionError", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "AssertionError", True, "AssertionError", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "BootstrapMethodError", True, "BootstrapMethodError", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "BootstrapMethodError", True, "BootstrapMethodError", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "BootstrapMethodError", True, "BootstrapMethodError", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "BootstrapMethodError", True, "BootstrapMethodError", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "CharSequence", True, "chars", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "CharSequence", True, "codePoints", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "Class", False, "getNestHost", "()", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.lang", "ClassCastException", True, "ClassCastException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "ClassCircularityError", True, "ClassCircularityError", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "ClassFormatError", True, "ClassFormatError", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "ClassNotFoundException", True, "ClassNotFoundException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "ClassNotFoundException", True, "ClassNotFoundException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "ClassNotFoundException", True, "ClassNotFoundException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "ClassNotFoundException", True, "getException", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "ClassValue", True, "get", "(Class)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "CloneNotSupportedException", True, "CloneNotSupportedException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "Enum$EnumDesc", False, "of", "(ClassDesc,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "Enum$EnumDesc", False, "of", "(ClassDesc,String)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "EnumConstantNotPresentException", True, "EnumConstantNotPresentException", "(Class,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "EnumConstantNotPresentException", True, "constantName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "Error", True, "Error", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "Error", True, "Error", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "Error", True, "Error", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "Error", True, "Error", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "ExceptionInInitializerError", True, "ExceptionInInitializerError", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "ExceptionInInitializerError", True, "ExceptionInInitializerError", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "ExceptionInInitializerError", True, "getException", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "IllegalAccessError", True, "IllegalAccessError", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "IllegalAccessException", True, "IllegalAccessException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "IllegalArgumentException", True, "IllegalArgumentException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "IllegalArgumentException", True, "IllegalArgumentException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "IllegalArgumentException", True, "IllegalArgumentException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "IllegalCallerException", True, "IllegalCallerException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "IllegalCallerException", True, "IllegalCallerException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "IllegalCallerException", True, "IllegalCallerException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "IllegalCallerException", True, "IllegalCallerException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "IllegalMonitorStateException", True, "IllegalMonitorStateException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "IllegalStateException", True, "IllegalStateException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "IllegalStateException", True, "IllegalStateException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "IllegalStateException", True, "IllegalStateException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "IllegalThreadStateException", True, "IllegalThreadStateException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "IncompatibleClassChangeError", True, "IncompatibleClassChangeError", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "InstantiationError", True, "InstantiationError", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "InstantiationException", True, "InstantiationException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "InternalError", True, "InternalError", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "InternalError", True, "InternalError", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "InternalError", True, "InternalError", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "InternalError", True, "InternalError", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "InterruptedException", True, "InterruptedException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "LayerInstantiationException", True, "LayerInstantiationException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "LayerInstantiationException", True, "LayerInstantiationException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "LayerInstantiationException", True, "LayerInstantiationException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "LayerInstantiationException", True, "LayerInstantiationException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "LinkageError", True, "LinkageError", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "LinkageError", True, "LinkageError", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "LinkageError", True, "LinkageError", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "Module", False, "addExports", "(String,Module)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.lang", "Module", False, "addOpens", "(String,Module)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.lang", "Module", False, "addReads", "(Module)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.lang", "Module", False, "addUses", "(Class)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.lang", "Module", False, "getClassLoader", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "Module", False, "getDescriptor", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "Module", False, "getLayer", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "Module", False, "getName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "Module", False, "getPackages", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "ModuleLayer$Controller", False, "addExports", "(Module,String,Module)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.lang", "ModuleLayer$Controller", False, "addOpens", "(Module,String,Module)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.lang", "ModuleLayer$Controller", False, "addReads", "(Module,Module)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.lang", "ModuleLayer$Controller", False, "layer", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "ModuleLayer", False, "configuration", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "ModuleLayer", False, "defineModules", "(Configuration,Function)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "ModuleLayer", False, "defineModules", "(Configuration,Function)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "ModuleLayer", False, "defineModules", "(Configuration,List,Function)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "ModuleLayer", False, "defineModules", "(Configuration,List,Function)", "", "Argument[1].Element", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "ModuleLayer", False, "defineModulesWithManyLoaders", "(Configuration,ClassLoader)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "ModuleLayer", False, "defineModulesWithManyLoaders", "(Configuration,ClassLoader)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "ModuleLayer", False, "defineModulesWithManyLoaders", "(Configuration,List,ClassLoader)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "ModuleLayer", False, "defineModulesWithManyLoaders", "(Configuration,List,ClassLoader)", "", "Argument[1].Element", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "ModuleLayer", False, "defineModulesWithOneLoader", "(Configuration,ClassLoader)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "ModuleLayer", False, "defineModulesWithOneLoader", "(Configuration,ClassLoader)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "ModuleLayer", False, "defineModulesWithOneLoader", "(Configuration,List,ClassLoader)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "ModuleLayer", False, "defineModulesWithOneLoader", "(Configuration,List,ClassLoader)", "", "Argument[1].Element", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "ModuleLayer", False, "findLoader", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "ModuleLayer", False, "findModule", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "ModuleLayer", False, "modules", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "ModuleLayer", False, "parents", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "NegativeArraySizeException", True, "NegativeArraySizeException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "NoClassDefFoundError", True, "NoClassDefFoundError", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "NoSuchFieldError", True, "NoSuchFieldError", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "NoSuchFieldException", True, "NoSuchFieldException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "NoSuchMethodError", True, "NoSuchMethodError", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "NoSuchMethodException", True, "NoSuchMethodException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "NumberFormatException", True, "NumberFormatException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "OutOfMemoryError", True, "OutOfMemoryError", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "Package", True, "getImplementationTitle", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "Package", True, "getImplementationVendor", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "Package", True, "getImplementationVersion", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "Package", True, "getName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "Package", True, "getPackage", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "Package", True, "getSpecificationTitle", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "Package", True, "getSpecificationVendor", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "Package", True, "getSpecificationVersion", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "Process", True, "destroyForcibly", "()", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.lang", "Process", True, "errorReader", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "Process", True, "errorReader", "(Charset)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "Process", True, "getErrorStream", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "Process", True, "getInputStream", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "Process", True, "getOutputStream", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "Process", True, "inputReader", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "Process", True, "inputReader", "(Charset)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "Process", True, "outputWriter", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "Process", True, "outputWriter", "(Charset)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "Process", True, "toHandle", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "ProcessBuilder", False, "ProcessBuilder", "(List)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "ProcessBuilder", False, "ProcessBuilder", "(String[])", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "ProcessBuilder", False, "command", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "ProcessBuilder", False, "command", "(List)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "ProcessBuilder", False, "command", "(List)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.lang", "ProcessBuilder", False, "command", "(String[])", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "ProcessBuilder", False, "command", "(String[])", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.lang", "ProcessBuilder", False, "directory", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "ProcessBuilder", False, "directory", "(File)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "ProcessBuilder", False, "directory", "(File)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.lang", "ProcessBuilder", False, "inheritIO", "()", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.lang", "ProcessBuilder", False, "redirectError", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "ProcessBuilder", False, "redirectError", "(File)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "ProcessBuilder", False, "redirectError", "(ProcessBuilder$Redirect)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "ProcessBuilder", False, "redirectError", "(ProcessBuilder$Redirect)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.lang", "ProcessBuilder", False, "redirectErrorStream", "(boolean)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.lang", "ProcessBuilder", False, "redirectInput", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "ProcessBuilder", False, "redirectInput", "(File)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "ProcessBuilder", False, "redirectInput", "(ProcessBuilder$Redirect)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "ProcessBuilder", False, "redirectInput", "(ProcessBuilder$Redirect)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.lang", "ProcessBuilder", False, "redirectOutput", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "ProcessBuilder", False, "redirectOutput", "(File)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "ProcessBuilder", False, "redirectOutput", "(ProcessBuilder$Redirect)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "ProcessBuilder", False, "redirectOutput", "(ProcessBuilder$Redirect)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.lang", "ProcessHandle$Info", True, "arguments", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "ProcessHandle$Info", True, "command", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "ProcessHandle$Info", True, "commandLine", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "ProcessHandle$Info", True, "user", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "ReflectiveOperationException", True, "ReflectiveOperationException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "ReflectiveOperationException", True, "ReflectiveOperationException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "ReflectiveOperationException", True, "ReflectiveOperationException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "ReflectiveOperationException", True, "ReflectiveOperationException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "Runtime$Version", False, "build", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "Runtime$Version", False, "optional", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "Runtime$Version", False, "pre", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "RuntimePermission", False, "RuntimePermission", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "RuntimePermission", False, "RuntimePermission", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "SecurityException", True, "SecurityException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "SecurityException", True, "SecurityException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "SecurityException", True, "SecurityException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "SecurityException", True, "SecurityException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "StackOverflowError", True, "StackOverflowError", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "StackTraceElement", False, "StackTraceElement", "(String,String,String,String,String,String,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "StackTraceElement", False, "StackTraceElement", "(String,String,String,String,String,String,int)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "StackTraceElement", False, "StackTraceElement", "(String,String,String,String,String,String,int)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "StackTraceElement", False, "StackTraceElement", "(String,String,String,String,String,String,int)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "StackTraceElement", False, "StackTraceElement", "(String,String,String,String,String,String,int)", "", "Argument[4]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "StackTraceElement", False, "StackTraceElement", "(String,String,String,String,String,String,int)", "", "Argument[5]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "StackTraceElement", False, "StackTraceElement", "(String,String,String,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "StackTraceElement", False, "StackTraceElement", "(String,String,String,int)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "StackTraceElement", False, "StackTraceElement", "(String,String,String,int)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "StackTraceElement", False, "getClassLoaderName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "StackTraceElement", False, "getClassName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "StackTraceElement", False, "getFileName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "StackTraceElement", False, "getMethodName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "StackTraceElement", False, "getModuleName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "StackTraceElement", False, "getModuleVersion", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "StackWalker$StackFrame", True, "getDescriptor", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "StackWalker$StackFrame", True, "getFileName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "StackWalker$StackFrame", True, "getMethodName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "StackWalker$StackFrame", True, "getMethodType", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "StackWalker$StackFrame", True, "toStackTraceElement", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "StackWalker", False, "getInstance", "(Set)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "StackWalker", False, "getInstance", "(Set,int)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "StringIndexOutOfBoundsException", True, "StringIndexOutOfBoundsException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "System$LoggerFinder", True, "getLocalizedLogger", "(String,ResourceBundle,Module)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "System$LoggerFinder", True, "getLocalizedLogger", "(String,ResourceBundle,Module)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "System", False, "getLogger", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "System", False, "getLogger", "(String,ResourceBundle)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "System", False, "getLogger", "(String,ResourceBundle)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "Thread", True, "Thread", "(Runnable,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "Thread", True, "Thread", "(Runnable,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "Thread", True, "Thread", "(ThreadGroup,Runnable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "Thread", True, "Thread", "(ThreadGroup,Runnable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "Thread", True, "Thread", "(ThreadGroup,Runnable,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "Thread", True, "Thread", "(ThreadGroup,Runnable,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "Thread", True, "Thread", "(ThreadGroup,Runnable,String)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "Thread", True, "Thread", "(ThreadGroup,Runnable,String,long)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "Thread", True, "Thread", "(ThreadGroup,Runnable,String,long)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "Thread", True, "Thread", "(ThreadGroup,Runnable,String,long)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "Thread", True, "Thread", "(ThreadGroup,Runnable,String,long,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "Thread", True, "Thread", "(ThreadGroup,Runnable,String,long,boolean)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "Thread", True, "Thread", "(ThreadGroup,Runnable,String,long,boolean)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "Thread", True, "Thread", "(ThreadGroup,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "Thread", True, "Thread", "(ThreadGroup,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "Thread", True, "getThreadGroup", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "Thread", True, "getUncaughtExceptionHandler", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "Thread", True, "setContextClassLoader", "(ClassLoader)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "Thread", True, "setName", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "Thread", True, "setUncaughtExceptionHandler", "(Thread$UncaughtExceptionHandler)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "ThreadGroup", True, "ThreadGroup", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "ThreadGroup", True, "ThreadGroup", "(ThreadGroup,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "ThreadGroup", True, "ThreadGroup", "(ThreadGroup,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "ThreadGroup", True, "ThreadGroup", "(ThreadGroup,String)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] + - ["java.lang", "ThreadGroup", True, "enumerate", "(ThreadGroup[])", "", "Argument[this]", "Argument[0].ArrayElement", "taint", "df-generated"] + - ["java.lang", "ThreadGroup", True, "enumerate", "(ThreadGroup[],boolean)", "", "Argument[this]", "Argument[0].ArrayElement", "taint", "df-generated"] + - ["java.lang", "ThreadGroup", True, "enumerate", "(Thread[])", "", "Argument[this]", "Argument[0].ArrayElement", "taint", "df-generated"] + - ["java.lang", "ThreadGroup", True, "enumerate", "(Thread[],boolean)", "", "Argument[this]", "Argument[0].ArrayElement", "taint", "df-generated"] + - ["java.lang", "ThreadGroup", True, "getName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "ThreadGroup", True, "getParent", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "TypeNotPresentException", True, "TypeNotPresentException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "TypeNotPresentException", True, "TypeNotPresentException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "TypeNotPresentException", True, "typeName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "UnknownError", True, "UnknownError", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "UnsatisfiedLinkError", True, "UnsatisfiedLinkError", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "UnsupportedClassVersionError", True, "UnsupportedClassVersionError", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "UnsupportedOperationException", True, "UnsupportedOperationException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "UnsupportedOperationException", True, "UnsupportedOperationException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "UnsupportedOperationException", True, "UnsupportedOperationException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "VerifyError", True, "VerifyError", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "VirtualMachineError", True, "VirtualMachineError", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "VirtualMachineError", True, "VirtualMachineError", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "VirtualMachineError", True, "VirtualMachineError", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "VirtualMachineError", True, "VirtualMachineError", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["java.lang", "AbstractStringBuilder", "capacity", "()", "summary", "df-generated"] + - ["java.lang", "AbstractStringBuilder", "codePointAt", "(int)", "summary", "df-generated"] + - ["java.lang", "AbstractStringBuilder", "codePointBefore", "(int)", "summary", "df-generated"] + - ["java.lang", "AbstractStringBuilder", "codePointCount", "(int,int)", "summary", "df-generated"] + - ["java.lang", "AbstractStringBuilder", "ensureCapacity", "(int)", "summary", "df-generated"] + - ["java.lang", "AbstractStringBuilder", "indexOf", "(String)", "summary", "df-generated"] + - ["java.lang", "AbstractStringBuilder", "indexOf", "(String,int)", "summary", "df-generated"] + - ["java.lang", "AbstractStringBuilder", "lastIndexOf", "(String)", "summary", "df-generated"] + - ["java.lang", "AbstractStringBuilder", "lastIndexOf", "(String,int)", "summary", "df-generated"] + - ["java.lang", "AbstractStringBuilder", "offsetByCodePoints", "(int,int)", "summary", "df-generated"] + - ["java.lang", "AbstractStringBuilder", "setCharAt", "(int,char)", "summary", "df-generated"] + - ["java.lang", "AbstractStringBuilder", "setLength", "(int)", "summary", "df-generated"] + - ["java.lang", "AbstractStringBuilder", "trimToSize", "()", "summary", "df-generated"] + - ["java.lang", "ArrayIndexOutOfBoundsException", "ArrayIndexOutOfBoundsException", "(int)", "summary", "df-generated"] + - ["java.lang", "AssertionError", "AssertionError", "(boolean)", "summary", "df-generated"] + - ["java.lang", "AssertionError", "AssertionError", "(char)", "summary", "df-generated"] + - ["java.lang", "AssertionError", "AssertionError", "(double)", "summary", "df-generated"] + - ["java.lang", "AssertionError", "AssertionError", "(float)", "summary", "df-generated"] + - ["java.lang", "AssertionError", "AssertionError", "(int)", "summary", "df-generated"] + - ["java.lang", "AssertionError", "AssertionError", "(long)", "summary", "df-generated"] + - ["java.lang", "AutoCloseable", "close", "()", "summary", "df-generated"] + - ["java.lang", "Boolean", "Boolean", "(String)", "summary", "df-generated"] + - ["java.lang", "Boolean", "Boolean", "(boolean)", "summary", "df-generated"] + - ["java.lang", "Boolean", "compare", "(boolean,boolean)", "summary", "df-generated"] + - ["java.lang", "Boolean", "getBoolean", "(String)", "summary", "df-generated"] + - ["java.lang", "Boolean", "hashCode", "(boolean)", "summary", "df-generated"] + - ["java.lang", "Boolean", "logicalAnd", "(boolean,boolean)", "summary", "df-generated"] + - ["java.lang", "Boolean", "logicalOr", "(boolean,boolean)", "summary", "df-generated"] + - ["java.lang", "Boolean", "logicalXor", "(boolean,boolean)", "summary", "df-generated"] + - ["java.lang", "Boolean", "valueOf", "(String)", "summary", "df-generated"] + - ["java.lang", "Byte", "Byte", "(String)", "summary", "df-generated"] + - ["java.lang", "Byte", "Byte", "(byte)", "summary", "df-generated"] + - ["java.lang", "Byte", "compare", "(byte,byte)", "summary", "df-generated"] + - ["java.lang", "Byte", "compareUnsigned", "(byte,byte)", "summary", "df-generated"] + - ["java.lang", "Byte", "decode", "(String)", "summary", "df-generated"] + - ["java.lang", "Byte", "hashCode", "(byte)", "summary", "df-generated"] + - ["java.lang", "Byte", "parseByte", "(String)", "summary", "df-generated"] + - ["java.lang", "Byte", "parseByte", "(String,int)", "summary", "df-generated"] + - ["java.lang", "Byte", "toUnsignedInt", "(byte)", "summary", "df-generated"] + - ["java.lang", "Byte", "toUnsignedLong", "(byte)", "summary", "df-generated"] + - ["java.lang", "Byte", "valueOf", "(String)", "summary", "df-generated"] + - ["java.lang", "Byte", "valueOf", "(String,int)", "summary", "df-generated"] + - ["java.lang", "Byte", "valueOf", "(byte)", "summary", "df-generated"] + - ["java.lang", "CharSequence", "compare", "(CharSequence,CharSequence)", "summary", "df-generated"] + - ["java.lang", "CharSequence", "isEmpty", "()", "summary", "df-generated"] + - ["java.lang", "CharSequence", "length", "()", "summary", "df-generated"] + - ["java.lang", "Character$UnicodeBlock", "forName", "(String)", "summary", "df-generated"] + - ["java.lang", "Character$UnicodeBlock", "of", "(char)", "summary", "df-generated"] + - ["java.lang", "Character$UnicodeBlock", "of", "(int)", "summary", "df-generated"] + - ["java.lang", "Character$UnicodeScript", "forName", "(String)", "summary", "df-generated"] + - ["java.lang", "Character$UnicodeScript", "of", "(int)", "summary", "df-generated"] + - ["java.lang", "Character", "Character", "(char)", "summary", "df-generated"] + - ["java.lang", "Character", "charCount", "(int)", "summary", "df-generated"] + - ["java.lang", "Character", "charValue", "()", "summary", "df-generated"] + - ["java.lang", "Character", "codePointAt", "(CharSequence,int)", "summary", "df-generated"] + - ["java.lang", "Character", "codePointAt", "(char[],int)", "summary", "df-generated"] + - ["java.lang", "Character", "codePointAt", "(char[],int,int)", "summary", "df-generated"] + - ["java.lang", "Character", "codePointBefore", "(CharSequence,int)", "summary", "df-generated"] + - ["java.lang", "Character", "codePointBefore", "(char[],int)", "summary", "df-generated"] + - ["java.lang", "Character", "codePointBefore", "(char[],int,int)", "summary", "df-generated"] + - ["java.lang", "Character", "codePointCount", "(CharSequence,int,int)", "summary", "df-generated"] + - ["java.lang", "Character", "codePointCount", "(char[],int,int)", "summary", "df-generated"] + - ["java.lang", "Character", "codePointOf", "(String)", "summary", "df-generated"] + - ["java.lang", "Character", "compare", "(char,char)", "summary", "df-generated"] + - ["java.lang", "Character", "digit", "(char,int)", "summary", "df-generated"] + - ["java.lang", "Character", "digit", "(int,int)", "summary", "df-generated"] + - ["java.lang", "Character", "forDigit", "(int,int)", "summary", "df-generated"] + - ["java.lang", "Character", "getDirectionality", "(char)", "summary", "df-generated"] + - ["java.lang", "Character", "getDirectionality", "(int)", "summary", "df-generated"] + - ["java.lang", "Character", "getName", "(int)", "summary", "df-generated"] + - ["java.lang", "Character", "getNumericValue", "(char)", "summary", "df-generated"] + - ["java.lang", "Character", "getNumericValue", "(int)", "summary", "df-generated"] + - ["java.lang", "Character", "getType", "(char)", "summary", "df-generated"] + - ["java.lang", "Character", "getType", "(int)", "summary", "df-generated"] + - ["java.lang", "Character", "hashCode", "(char)", "summary", "df-generated"] + - ["java.lang", "Character", "highSurrogate", "(int)", "summary", "df-generated"] + - ["java.lang", "Character", "isAlphabetic", "(int)", "summary", "df-generated"] + - ["java.lang", "Character", "isBmpCodePoint", "(int)", "summary", "df-generated"] + - ["java.lang", "Character", "isDefined", "(char)", "summary", "df-generated"] + - ["java.lang", "Character", "isDefined", "(int)", "summary", "df-generated"] + - ["java.lang", "Character", "isDigit", "(char)", "summary", "df-generated"] + - ["java.lang", "Character", "isDigit", "(int)", "summary", "df-generated"] + - ["java.lang", "Character", "isHighSurrogate", "(char)", "summary", "df-generated"] + - ["java.lang", "Character", "isISOControl", "(char)", "summary", "df-generated"] + - ["java.lang", "Character", "isISOControl", "(int)", "summary", "df-generated"] + - ["java.lang", "Character", "isIdentifierIgnorable", "(char)", "summary", "df-generated"] + - ["java.lang", "Character", "isIdentifierIgnorable", "(int)", "summary", "df-generated"] + - ["java.lang", "Character", "isIdeographic", "(int)", "summary", "df-generated"] + - ["java.lang", "Character", "isJavaIdentifierPart", "(char)", "summary", "df-generated"] + - ["java.lang", "Character", "isJavaIdentifierPart", "(int)", "summary", "df-generated"] + - ["java.lang", "Character", "isJavaIdentifierStart", "(char)", "summary", "df-generated"] + - ["java.lang", "Character", "isJavaIdentifierStart", "(int)", "summary", "df-generated"] + - ["java.lang", "Character", "isJavaLetter", "(char)", "summary", "df-generated"] + - ["java.lang", "Character", "isJavaLetterOrDigit", "(char)", "summary", "df-generated"] + - ["java.lang", "Character", "isLetter", "(char)", "summary", "df-generated"] + - ["java.lang", "Character", "isLetter", "(int)", "summary", "df-generated"] + - ["java.lang", "Character", "isLetterOrDigit", "(char)", "summary", "df-generated"] + - ["java.lang", "Character", "isLetterOrDigit", "(int)", "summary", "df-generated"] + - ["java.lang", "Character", "isLowSurrogate", "(char)", "summary", "df-generated"] + - ["java.lang", "Character", "isLowerCase", "(char)", "summary", "df-generated"] + - ["java.lang", "Character", "isLowerCase", "(int)", "summary", "df-generated"] + - ["java.lang", "Character", "isMirrored", "(char)", "summary", "df-generated"] + - ["java.lang", "Character", "isMirrored", "(int)", "summary", "df-generated"] + - ["java.lang", "Character", "isSpace", "(char)", "summary", "df-generated"] + - ["java.lang", "Character", "isSpaceChar", "(char)", "summary", "df-generated"] + - ["java.lang", "Character", "isSpaceChar", "(int)", "summary", "df-generated"] + - ["java.lang", "Character", "isSupplementaryCodePoint", "(int)", "summary", "df-generated"] + - ["java.lang", "Character", "isSurrogate", "(char)", "summary", "df-generated"] + - ["java.lang", "Character", "isSurrogatePair", "(char,char)", "summary", "df-generated"] + - ["java.lang", "Character", "isTitleCase", "(char)", "summary", "df-generated"] + - ["java.lang", "Character", "isTitleCase", "(int)", "summary", "df-generated"] + - ["java.lang", "Character", "isUnicodeIdentifierPart", "(char)", "summary", "df-generated"] + - ["java.lang", "Character", "isUnicodeIdentifierPart", "(int)", "summary", "df-generated"] + - ["java.lang", "Character", "isUnicodeIdentifierStart", "(char)", "summary", "df-generated"] + - ["java.lang", "Character", "isUnicodeIdentifierStart", "(int)", "summary", "df-generated"] + - ["java.lang", "Character", "isUpperCase", "(char)", "summary", "df-generated"] + - ["java.lang", "Character", "isUpperCase", "(int)", "summary", "df-generated"] + - ["java.lang", "Character", "isValidCodePoint", "(int)", "summary", "df-generated"] + - ["java.lang", "Character", "isWhitespace", "(char)", "summary", "df-generated"] + - ["java.lang", "Character", "isWhitespace", "(int)", "summary", "df-generated"] + - ["java.lang", "Character", "lowSurrogate", "(int)", "summary", "df-generated"] + - ["java.lang", "Character", "offsetByCodePoints", "(CharSequence,int,int)", "summary", "df-generated"] + - ["java.lang", "Character", "offsetByCodePoints", "(char[],int,int,int,int)", "summary", "df-generated"] + - ["java.lang", "Character", "reverseBytes", "(char)", "summary", "df-generated"] + - ["java.lang", "Character", "toChars", "(int)", "summary", "df-generated"] + - ["java.lang", "Character", "toChars", "(int,char[],int)", "summary", "df-generated"] + - ["java.lang", "Character", "toCodePoint", "(char,char)", "summary", "df-generated"] + - ["java.lang", "Character", "toLowerCase", "(char)", "summary", "df-generated"] + - ["java.lang", "Character", "toLowerCase", "(int)", "summary", "df-generated"] + - ["java.lang", "Character", "toTitleCase", "(char)", "summary", "df-generated"] + - ["java.lang", "Character", "toTitleCase", "(int)", "summary", "df-generated"] + - ["java.lang", "Character", "toUpperCase", "(char)", "summary", "df-generated"] + - ["java.lang", "Character", "toUpperCase", "(int)", "summary", "df-generated"] + - ["java.lang", "Character", "valueOf", "(char)", "summary", "df-generated"] + - ["java.lang", "Class", "asSubclass", "(Class)", "summary", "df-generated"] + - ["java.lang", "Class", "desiredAssertionStatus", "()", "summary", "df-generated"] + - ["java.lang", "Class", "forName", "(Module,String)", "summary", "df-generated"] + - ["java.lang", "Class", "forName", "(String,boolean,ClassLoader)", "summary", "df-generated"] + - ["java.lang", "Class", "getAnnotatedInterfaces", "()", "summary", "df-generated"] + - ["java.lang", "Class", "getAnnotatedSuperclass", "()", "summary", "df-generated"] + - ["java.lang", "Class", "getClasses", "()", "summary", "df-generated"] + - ["java.lang", "Class", "getComponentType", "()", "summary", "df-generated"] + - ["java.lang", "Class", "getConstructor", "(Class[])", "summary", "df-generated"] + - ["java.lang", "Class", "getConstructors", "()", "summary", "df-generated"] + - ["java.lang", "Class", "getDeclaredClasses", "()", "summary", "df-generated"] + - ["java.lang", "Class", "getDeclaredConstructors", "()", "summary", "df-generated"] + - ["java.lang", "Class", "getDeclaredFields", "()", "summary", "df-generated"] + - ["java.lang", "Class", "getDeclaredMethod", "(String,Class[])", "summary", "df-generated"] + - ["java.lang", "Class", "getDeclaredMethods", "()", "summary", "df-generated"] + - ["java.lang", "Class", "getDeclaringClass", "()", "summary", "df-generated"] + - ["java.lang", "Class", "getEnclosingClass", "()", "summary", "df-generated"] + - ["java.lang", "Class", "getEnclosingConstructor", "()", "summary", "df-generated"] + - ["java.lang", "Class", "getEnclosingMethod", "()", "summary", "df-generated"] + - ["java.lang", "Class", "getEnumConstants", "()", "summary", "df-generated"] + - ["java.lang", "Class", "getField", "(String)", "summary", "df-generated"] + - ["java.lang", "Class", "getFields", "()", "summary", "df-generated"] + - ["java.lang", "Class", "getGenericInterfaces", "()", "summary", "df-generated"] + - ["java.lang", "Class", "getGenericSuperclass", "()", "summary", "df-generated"] + - ["java.lang", "Class", "getInterfaces", "()", "summary", "df-generated"] + - ["java.lang", "Class", "getMethods", "()", "summary", "df-generated"] + - ["java.lang", "Class", "getModifiers", "()", "summary", "df-generated"] + - ["java.lang", "Class", "getModule", "()", "summary", "df-generated"] + - ["java.lang", "Class", "getNestMembers", "()", "summary", "df-generated"] + - ["java.lang", "Class", "getPackage", "()", "summary", "df-generated"] + - ["java.lang", "Class", "getPackageName", "()", "summary", "df-generated"] + - ["java.lang", "Class", "getPermittedSubclasses", "()", "summary", "df-generated"] + - ["java.lang", "Class", "getProtectionDomain", "()", "summary", "df-generated"] + - ["java.lang", "Class", "getRecordComponents", "()", "summary", "df-generated"] + - ["java.lang", "Class", "getSigners", "()", "summary", "df-generated"] + - ["java.lang", "Class", "getSuperclass", "()", "summary", "df-generated"] + - ["java.lang", "Class", "isAnnotation", "()", "summary", "df-generated"] + - ["java.lang", "Class", "isAnonymousClass", "()", "summary", "df-generated"] + - ["java.lang", "Class", "isEnum", "()", "summary", "df-generated"] + - ["java.lang", "Class", "isHidden", "()", "summary", "df-generated"] + - ["java.lang", "Class", "isInterface", "()", "summary", "df-generated"] + - ["java.lang", "Class", "isLocalClass", "()", "summary", "df-generated"] + - ["java.lang", "Class", "isMemberClass", "()", "summary", "df-generated"] + - ["java.lang", "Class", "isNestmateOf", "(Class)", "summary", "df-generated"] + - ["java.lang", "Class", "isRecord", "()", "summary", "df-generated"] + - ["java.lang", "Class", "isSealed", "()", "summary", "df-generated"] + - ["java.lang", "Class", "isSynthetic", "()", "summary", "df-generated"] + - ["java.lang", "Class", "newInstance", "()", "summary", "df-generated"] + - ["java.lang", "Class", "toGenericString", "()", "summary", "df-generated"] + - ["java.lang", "ClassLoader", "clearAssertionStatus", "()", "summary", "df-generated"] + - ["java.lang", "ClassLoader", "findResources", "(String)", "summary", "df-generated"] + - ["java.lang", "ClassLoader", "getDefinedPackages", "()", "summary", "df-generated"] + - ["java.lang", "ClassLoader", "getPlatformClassLoader", "()", "summary", "df-generated"] + - ["java.lang", "ClassLoader", "getResourceAsStream", "(String)", "summary", "df-generated"] + - ["java.lang", "ClassLoader", "getResources", "(String)", "summary", "df-generated"] + - ["java.lang", "ClassLoader", "getSystemClassLoader", "()", "summary", "df-generated"] + - ["java.lang", "ClassLoader", "getSystemResourceAsStream", "(String)", "summary", "df-generated"] + - ["java.lang", "ClassLoader", "getSystemResources", "(String)", "summary", "df-generated"] + - ["java.lang", "ClassLoader", "isRegisteredAsParallelCapable", "()", "summary", "df-generated"] + - ["java.lang", "ClassLoader", "resources", "(String)", "summary", "df-generated"] + - ["java.lang", "ClassLoader", "setDefaultAssertionStatus", "(boolean)", "summary", "df-generated"] + - ["java.lang", "ClassValue", "remove", "(Class)", "summary", "df-generated"] + - ["java.lang", "Compiler", "command", "(Object)", "summary", "df-generated"] + - ["java.lang", "Compiler", "compileClass", "(Class)", "summary", "df-generated"] + - ["java.lang", "Compiler", "compileClasses", "(String)", "summary", "df-generated"] + - ["java.lang", "Compiler", "disable", "()", "summary", "df-generated"] + - ["java.lang", "Compiler", "enable", "()", "summary", "df-generated"] + - ["java.lang", "Double", "Double", "(String)", "summary", "df-generated"] + - ["java.lang", "Double", "Double", "(double)", "summary", "df-generated"] + - ["java.lang", "Double", "compare", "(double,double)", "summary", "df-generated"] + - ["java.lang", "Double", "doubleToRawLongBits", "(double)", "summary", "df-generated"] + - ["java.lang", "Double", "hashCode", "(double)", "summary", "df-generated"] + - ["java.lang", "Double", "isFinite", "(double)", "summary", "df-generated"] + - ["java.lang", "Double", "isInfinite", "()", "summary", "df-generated"] + - ["java.lang", "Double", "isInfinite", "(double)", "summary", "df-generated"] + - ["java.lang", "Double", "isNaN", "()", "summary", "df-generated"] + - ["java.lang", "Double", "isNaN", "(double)", "summary", "df-generated"] + - ["java.lang", "Double", "longBitsToDouble", "(long)", "summary", "df-generated"] + - ["java.lang", "Double", "max", "(double,double)", "summary", "df-generated"] + - ["java.lang", "Double", "min", "(double,double)", "summary", "df-generated"] + - ["java.lang", "Double", "sum", "(double,double)", "summary", "df-generated"] + - ["java.lang", "Double", "toHexString", "(double)", "summary", "df-generated"] + - ["java.lang", "Double", "valueOf", "(String)", "summary", "df-generated"] + - ["java.lang", "Enum", "getDeclaringClass", "()", "summary", "df-generated"] + - ["java.lang", "Enum", "valueOf", "(Class,String)", "summary", "df-generated"] + - ["java.lang", "EnumConstantNotPresentException", "enumType", "()", "summary", "df-generated"] + - ["java.lang", "FdLibm$Cbrt", "compute", "(double)", "summary", "df-generated"] + - ["java.lang", "FdLibm$Hypot", "compute", "(double,double)", "summary", "df-generated"] + - ["java.lang", "FdLibm$Pow", "compute", "(double,double)", "summary", "df-generated"] + - ["java.lang", "Float", "Float", "(String)", "summary", "df-generated"] + - ["java.lang", "Float", "Float", "(double)", "summary", "df-generated"] + - ["java.lang", "Float", "Float", "(float)", "summary", "df-generated"] + - ["java.lang", "Float", "compare", "(float,float)", "summary", "df-generated"] + - ["java.lang", "Float", "floatToIntBits", "(float)", "summary", "df-generated"] + - ["java.lang", "Float", "floatToRawIntBits", "(float)", "summary", "df-generated"] + - ["java.lang", "Float", "hashCode", "(float)", "summary", "df-generated"] + - ["java.lang", "Float", "intBitsToFloat", "(int)", "summary", "df-generated"] + - ["java.lang", "Float", "isFinite", "(float)", "summary", "df-generated"] + - ["java.lang", "Float", "isInfinite", "()", "summary", "df-generated"] + - ["java.lang", "Float", "isInfinite", "(float)", "summary", "df-generated"] + - ["java.lang", "Float", "isNaN", "()", "summary", "df-generated"] + - ["java.lang", "Float", "isNaN", "(float)", "summary", "df-generated"] + - ["java.lang", "Float", "max", "(float,float)", "summary", "df-generated"] + - ["java.lang", "Float", "min", "(float,float)", "summary", "df-generated"] + - ["java.lang", "Float", "parseFloat", "(String)", "summary", "df-generated"] + - ["java.lang", "Float", "sum", "(float,float)", "summary", "df-generated"] + - ["java.lang", "Float", "toHexString", "(float)", "summary", "df-generated"] + - ["java.lang", "Float", "valueOf", "(String)", "summary", "df-generated"] + - ["java.lang", "Float", "valueOf", "(float)", "summary", "df-generated"] + - ["java.lang", "IndexOutOfBoundsException", "IndexOutOfBoundsException", "(int)", "summary", "df-generated"] + - ["java.lang", "IndexOutOfBoundsException", "IndexOutOfBoundsException", "(long)", "summary", "df-generated"] + - ["java.lang", "Integer", "Integer", "(String)", "summary", "df-generated"] + - ["java.lang", "Integer", "bitCount", "(int)", "summary", "df-generated"] + - ["java.lang", "Integer", "compare", "(int,int)", "summary", "df-generated"] + - ["java.lang", "Integer", "compareUnsigned", "(int,int)", "summary", "df-generated"] + - ["java.lang", "Integer", "decode", "(String)", "summary", "df-generated"] + - ["java.lang", "Integer", "divideUnsigned", "(int,int)", "summary", "df-generated"] + - ["java.lang", "Integer", "getInteger", "(String)", "summary", "df-generated"] + - ["java.lang", "Integer", "getInteger", "(String,Integer)", "summary", "df-generated"] + - ["java.lang", "Integer", "getInteger", "(String,int)", "summary", "df-generated"] + - ["java.lang", "Integer", "hashCode", "(int)", "summary", "df-generated"] + - ["java.lang", "Integer", "highestOneBit", "(int)", "summary", "df-generated"] + - ["java.lang", "Integer", "lowestOneBit", "(int)", "summary", "df-generated"] + - ["java.lang", "Integer", "max", "(int,int)", "summary", "df-generated"] + - ["java.lang", "Integer", "min", "(int,int)", "summary", "df-generated"] + - ["java.lang", "Integer", "numberOfLeadingZeros", "(int)", "summary", "df-generated"] + - ["java.lang", "Integer", "numberOfTrailingZeros", "(int)", "summary", "df-generated"] + - ["java.lang", "Integer", "parseInt", "(CharSequence,int,int,int)", "summary", "df-generated"] + - ["java.lang", "Integer", "parseInt", "(String,int)", "summary", "df-generated"] + - ["java.lang", "Integer", "parseUnsignedInt", "(CharSequence,int,int,int)", "summary", "df-generated"] + - ["java.lang", "Integer", "parseUnsignedInt", "(String)", "summary", "df-generated"] + - ["java.lang", "Integer", "parseUnsignedInt", "(String,int)", "summary", "df-generated"] + - ["java.lang", "Integer", "remainderUnsigned", "(int,int)", "summary", "df-generated"] + - ["java.lang", "Integer", "reverse", "(int)", "summary", "df-generated"] + - ["java.lang", "Integer", "reverseBytes", "(int)", "summary", "df-generated"] + - ["java.lang", "Integer", "rotateLeft", "(int,int)", "summary", "df-generated"] + - ["java.lang", "Integer", "rotateRight", "(int,int)", "summary", "df-generated"] + - ["java.lang", "Integer", "signum", "(int)", "summary", "df-generated"] + - ["java.lang", "Integer", "sum", "(int,int)", "summary", "df-generated"] + - ["java.lang", "Integer", "toBinaryString", "(int)", "summary", "df-generated"] + - ["java.lang", "Integer", "toOctalString", "(int)", "summary", "df-generated"] + - ["java.lang", "Integer", "toUnsignedLong", "(int)", "summary", "df-generated"] + - ["java.lang", "Integer", "toUnsignedString", "(int)", "summary", "df-generated"] + - ["java.lang", "Integer", "toUnsignedString", "(int,int)", "summary", "df-generated"] + - ["java.lang", "LiveStackFrame$PrimitiveSlot", "intValue", "()", "summary", "df-generated"] + - ["java.lang", "LiveStackFrame$PrimitiveSlot", "longValue", "()", "summary", "df-generated"] + - ["java.lang", "LiveStackFrame$PrimitiveSlot", "size", "()", "summary", "df-generated"] + - ["java.lang", "Long", "Long", "(String)", "summary", "df-generated"] + - ["java.lang", "Long", "bitCount", "(long)", "summary", "df-generated"] + - ["java.lang", "Long", "compare", "(long,long)", "summary", "df-generated"] + - ["java.lang", "Long", "compareUnsigned", "(long,long)", "summary", "df-generated"] + - ["java.lang", "Long", "decode", "(String)", "summary", "df-generated"] + - ["java.lang", "Long", "divideUnsigned", "(long,long)", "summary", "df-generated"] + - ["java.lang", "Long", "getLong", "(String)", "summary", "df-generated"] + - ["java.lang", "Long", "getLong", "(String,Long)", "summary", "df-generated"] + - ["java.lang", "Long", "getLong", "(String,long)", "summary", "df-generated"] + - ["java.lang", "Long", "hashCode", "(long)", "summary", "df-generated"] + - ["java.lang", "Long", "highestOneBit", "(long)", "summary", "df-generated"] + - ["java.lang", "Long", "lowestOneBit", "(long)", "summary", "df-generated"] + - ["java.lang", "Long", "max", "(long,long)", "summary", "df-generated"] + - ["java.lang", "Long", "min", "(long,long)", "summary", "df-generated"] + - ["java.lang", "Long", "numberOfLeadingZeros", "(long)", "summary", "df-generated"] + - ["java.lang", "Long", "numberOfTrailingZeros", "(long)", "summary", "df-generated"] + - ["java.lang", "Long", "parseLong", "(CharSequence,int,int,int)", "summary", "df-generated"] + - ["java.lang", "Long", "parseLong", "(String,int)", "summary", "df-generated"] + - ["java.lang", "Long", "parseUnsignedLong", "(CharSequence,int,int,int)", "summary", "df-generated"] + - ["java.lang", "Long", "parseUnsignedLong", "(String)", "summary", "df-generated"] + - ["java.lang", "Long", "parseUnsignedLong", "(String,int)", "summary", "df-generated"] + - ["java.lang", "Long", "remainderUnsigned", "(long,long)", "summary", "df-generated"] + - ["java.lang", "Long", "reverse", "(long)", "summary", "df-generated"] + - ["java.lang", "Long", "reverseBytes", "(long)", "summary", "df-generated"] + - ["java.lang", "Long", "rotateLeft", "(long,int)", "summary", "df-generated"] + - ["java.lang", "Long", "rotateRight", "(long,int)", "summary", "df-generated"] + - ["java.lang", "Long", "signum", "(long)", "summary", "df-generated"] + - ["java.lang", "Long", "sum", "(long,long)", "summary", "df-generated"] + - ["java.lang", "Long", "toBinaryString", "(long)", "summary", "df-generated"] + - ["java.lang", "Long", "toHexString", "(long)", "summary", "df-generated"] + - ["java.lang", "Long", "toOctalString", "(long)", "summary", "df-generated"] + - ["java.lang", "Long", "toUnsignedString", "(long)", "summary", "df-generated"] + - ["java.lang", "Long", "toUnsignedString", "(long,int)", "summary", "df-generated"] + - ["java.lang", "Math", "IEEEremainder", "(double,double)", "summary", "df-generated"] + - ["java.lang", "Math", "abs", "(double)", "summary", "df-generated"] + - ["java.lang", "Math", "abs", "(float)", "summary", "df-generated"] + - ["java.lang", "Math", "abs", "(int)", "summary", "df-generated"] + - ["java.lang", "Math", "abs", "(long)", "summary", "df-generated"] + - ["java.lang", "Math", "absExact", "(int)", "summary", "df-generated"] + - ["java.lang", "Math", "absExact", "(long)", "summary", "df-generated"] + - ["java.lang", "Math", "acos", "(double)", "summary", "df-generated"] + - ["java.lang", "Math", "addExact", "(int,int)", "summary", "df-generated"] + - ["java.lang", "Math", "addExact", "(long,long)", "summary", "df-generated"] + - ["java.lang", "Math", "asin", "(double)", "summary", "df-generated"] + - ["java.lang", "Math", "atan2", "(double,double)", "summary", "df-generated"] + - ["java.lang", "Math", "atan", "(double)", "summary", "df-generated"] + - ["java.lang", "Math", "cbrt", "(double)", "summary", "df-generated"] + - ["java.lang", "Math", "ceil", "(double)", "summary", "df-generated"] + - ["java.lang", "Math", "copySign", "(double,double)", "summary", "df-generated"] + - ["java.lang", "Math", "copySign", "(float,float)", "summary", "df-generated"] + - ["java.lang", "Math", "cos", "(double)", "summary", "df-generated"] + - ["java.lang", "Math", "cosh", "(double)", "summary", "df-generated"] + - ["java.lang", "Math", "decrementExact", "(int)", "summary", "df-generated"] + - ["java.lang", "Math", "decrementExact", "(long)", "summary", "df-generated"] + - ["java.lang", "Math", "exp", "(double)", "summary", "df-generated"] + - ["java.lang", "Math", "expm1", "(double)", "summary", "df-generated"] + - ["java.lang", "Math", "floor", "(double)", "summary", "df-generated"] + - ["java.lang", "Math", "floorDiv", "(int,int)", "summary", "df-generated"] + - ["java.lang", "Math", "floorDiv", "(long,int)", "summary", "df-generated"] + - ["java.lang", "Math", "floorDiv", "(long,long)", "summary", "df-generated"] + - ["java.lang", "Math", "floorMod", "(int,int)", "summary", "df-generated"] + - ["java.lang", "Math", "floorMod", "(long,int)", "summary", "df-generated"] + - ["java.lang", "Math", "floorMod", "(long,long)", "summary", "df-generated"] + - ["java.lang", "Math", "fma", "(double,double,double)", "summary", "df-generated"] + - ["java.lang", "Math", "fma", "(float,float,float)", "summary", "df-generated"] + - ["java.lang", "Math", "getExponent", "(double)", "summary", "df-generated"] + - ["java.lang", "Math", "getExponent", "(float)", "summary", "df-generated"] + - ["java.lang", "Math", "hypot", "(double,double)", "summary", "df-generated"] + - ["java.lang", "Math", "incrementExact", "(int)", "summary", "df-generated"] + - ["java.lang", "Math", "incrementExact", "(long)", "summary", "df-generated"] + - ["java.lang", "Math", "log10", "(double)", "summary", "df-generated"] + - ["java.lang", "Math", "log1p", "(double)", "summary", "df-generated"] + - ["java.lang", "Math", "log", "(double)", "summary", "df-generated"] + - ["java.lang", "Math", "multiplyExact", "(int,int)", "summary", "df-generated"] + - ["java.lang", "Math", "multiplyExact", "(long,int)", "summary", "df-generated"] + - ["java.lang", "Math", "multiplyExact", "(long,long)", "summary", "df-generated"] + - ["java.lang", "Math", "multiplyFull", "(int,int)", "summary", "df-generated"] + - ["java.lang", "Math", "multiplyHigh", "(long,long)", "summary", "df-generated"] + - ["java.lang", "Math", "negateExact", "(int)", "summary", "df-generated"] + - ["java.lang", "Math", "negateExact", "(long)", "summary", "df-generated"] + - ["java.lang", "Math", "nextAfter", "(double,double)", "summary", "df-generated"] + - ["java.lang", "Math", "nextAfter", "(float,double)", "summary", "df-generated"] + - ["java.lang", "Math", "nextDown", "(double)", "summary", "df-generated"] + - ["java.lang", "Math", "nextDown", "(float)", "summary", "df-generated"] + - ["java.lang", "Math", "nextUp", "(double)", "summary", "df-generated"] + - ["java.lang", "Math", "nextUp", "(float)", "summary", "df-generated"] + - ["java.lang", "Math", "pow", "(double,double)", "summary", "df-generated"] + - ["java.lang", "Math", "random", "()", "summary", "df-generated"] + - ["java.lang", "Math", "rint", "(double)", "summary", "df-generated"] + - ["java.lang", "Math", "round", "(double)", "summary", "df-generated"] + - ["java.lang", "Math", "round", "(float)", "summary", "df-generated"] + - ["java.lang", "Math", "scalb", "(double,int)", "summary", "df-generated"] + - ["java.lang", "Math", "scalb", "(float,int)", "summary", "df-generated"] + - ["java.lang", "Math", "signum", "(double)", "summary", "df-generated"] + - ["java.lang", "Math", "signum", "(float)", "summary", "df-generated"] + - ["java.lang", "Math", "sin", "(double)", "summary", "df-generated"] + - ["java.lang", "Math", "sinh", "(double)", "summary", "df-generated"] + - ["java.lang", "Math", "sqrt", "(double)", "summary", "df-generated"] + - ["java.lang", "Math", "subtractExact", "(int,int)", "summary", "df-generated"] + - ["java.lang", "Math", "subtractExact", "(long,long)", "summary", "df-generated"] + - ["java.lang", "Math", "tan", "(double)", "summary", "df-generated"] + - ["java.lang", "Math", "tanh", "(double)", "summary", "df-generated"] + - ["java.lang", "Math", "toDegrees", "(double)", "summary", "df-generated"] + - ["java.lang", "Math", "toIntExact", "(long)", "summary", "df-generated"] + - ["java.lang", "Math", "toRadians", "(double)", "summary", "df-generated"] + - ["java.lang", "Math", "ulp", "(double)", "summary", "df-generated"] + - ["java.lang", "Math", "ulp", "(float)", "summary", "df-generated"] + - ["java.lang", "Module", "canRead", "(Module)", "summary", "df-generated"] + - ["java.lang", "Module", "canUse", "(Class)", "summary", "df-generated"] + - ["java.lang", "Module", "getResourceAsStream", "(String)", "summary", "df-generated"] + - ["java.lang", "Module", "isExported", "(String)", "summary", "df-generated"] + - ["java.lang", "Module", "isExported", "(String,Module)", "summary", "df-generated"] + - ["java.lang", "Module", "isNamed", "()", "summary", "df-generated"] + - ["java.lang", "Module", "isOpen", "(String)", "summary", "df-generated"] + - ["java.lang", "Module", "isOpen", "(String,Module)", "summary", "df-generated"] + - ["java.lang", "ModuleLayer", "boot", "()", "summary", "df-generated"] + - ["java.lang", "ModuleLayer", "empty", "()", "summary", "df-generated"] + - ["java.lang", "Number", "byteValue", "()", "summary", "df-generated"] + - ["java.lang", "Number", "doubleValue", "()", "summary", "df-generated"] + - ["java.lang", "Number", "floatValue", "()", "summary", "df-generated"] + - ["java.lang", "Number", "intValue", "()", "summary", "df-generated"] + - ["java.lang", "Number", "longValue", "()", "summary", "df-generated"] + - ["java.lang", "Number", "shortValue", "()", "summary", "df-generated"] + - ["java.lang", "Object", "equals", "(Object)", "summary", "df-generated"] + - ["java.lang", "Object", "finalize", "()", "summary", "df-generated"] + - ["java.lang", "Object", "hashCode", "()", "summary", "df-generated"] + - ["java.lang", "Object", "notify", "()", "summary", "df-generated"] + - ["java.lang", "Object", "notifyAll", "()", "summary", "df-generated"] + - ["java.lang", "Object", "wait", "()", "summary", "df-generated"] + - ["java.lang", "Object", "wait", "(long)", "summary", "df-generated"] + - ["java.lang", "Object", "wait", "(long,int)", "summary", "df-generated"] + - ["java.lang", "Package", "getPackages", "()", "summary", "df-generated"] + - ["java.lang", "Package", "isCompatibleWith", "(String)", "summary", "df-generated"] + - ["java.lang", "Package", "isSealed", "()", "summary", "df-generated"] + - ["java.lang", "Package", "isSealed", "(URL)", "summary", "df-generated"] + - ["java.lang", "Process", "children", "()", "summary", "df-generated"] + - ["java.lang", "Process", "descendants", "()", "summary", "df-generated"] + - ["java.lang", "Process", "destroy", "()", "summary", "df-generated"] + - ["java.lang", "Process", "exitValue", "()", "summary", "df-generated"] + - ["java.lang", "Process", "info", "()", "summary", "df-generated"] + - ["java.lang", "Process", "isAlive", "()", "summary", "df-generated"] + - ["java.lang", "Process", "onExit", "()", "summary", "df-generated"] + - ["java.lang", "Process", "pid", "()", "summary", "df-generated"] + - ["java.lang", "Process", "supportsNormalTermination", "()", "summary", "df-generated"] + - ["java.lang", "Process", "waitFor", "()", "summary", "df-generated"] + - ["java.lang", "Process", "waitFor", "(long,TimeUnit)", "summary", "df-generated"] + - ["java.lang", "ProcessBuilder$Redirect", "appendTo", "(File)", "summary", "df-generated"] + - ["java.lang", "ProcessBuilder$Redirect", "file", "()", "summary", "df-generated"] + - ["java.lang", "ProcessBuilder$Redirect", "from", "(File)", "summary", "df-generated"] + - ["java.lang", "ProcessBuilder$Redirect", "to", "(File)", "summary", "df-generated"] + - ["java.lang", "ProcessBuilder$Redirect", "type", "()", "summary", "df-generated"] + - ["java.lang", "ProcessBuilder", "redirectErrorStream", "()", "summary", "df-generated"] + - ["java.lang", "ProcessBuilder", "start", "()", "summary", "df-generated"] + - ["java.lang", "ProcessBuilder", "startPipeline", "(List)", "summary", "df-generated"] + - ["java.lang", "ProcessHandle$Info", "startInstant", "()", "summary", "df-generated"] + - ["java.lang", "ProcessHandle$Info", "totalCpuDuration", "()", "summary", "df-generated"] + - ["java.lang", "ProcessHandle", "allProcesses", "()", "summary", "df-generated"] + - ["java.lang", "ProcessHandle", "children", "()", "summary", "df-generated"] + - ["java.lang", "ProcessHandle", "current", "()", "summary", "df-generated"] + - ["java.lang", "ProcessHandle", "descendants", "()", "summary", "df-generated"] + - ["java.lang", "ProcessHandle", "destroy", "()", "summary", "df-generated"] + - ["java.lang", "ProcessHandle", "destroyForcibly", "()", "summary", "df-generated"] + - ["java.lang", "ProcessHandle", "info", "()", "summary", "df-generated"] + - ["java.lang", "ProcessHandle", "isAlive", "()", "summary", "df-generated"] + - ["java.lang", "ProcessHandle", "of", "(long)", "summary", "df-generated"] + - ["java.lang", "ProcessHandle", "onExit", "()", "summary", "df-generated"] + - ["java.lang", "ProcessHandle", "parent", "()", "summary", "df-generated"] + - ["java.lang", "ProcessHandle", "pid", "()", "summary", "df-generated"] + - ["java.lang", "ProcessHandle", "supportsNormalTermination", "()", "summary", "df-generated"] + - ["java.lang", "Readable", "read", "(CharBuffer)", "summary", "df-generated"] + - ["java.lang", "Runtime$Version", "compareToIgnoreOptional", "(Runtime$Version)", "summary", "df-generated"] + - ["java.lang", "Runtime$Version", "equalsIgnoreOptional", "(Object)", "summary", "df-generated"] + - ["java.lang", "Runtime$Version", "feature", "()", "summary", "df-generated"] + - ["java.lang", "Runtime$Version", "interim", "()", "summary", "df-generated"] + - ["java.lang", "Runtime$Version", "major", "()", "summary", "df-generated"] + - ["java.lang", "Runtime$Version", "minor", "()", "summary", "df-generated"] + - ["java.lang", "Runtime$Version", "parse", "(String)", "summary", "df-generated"] + - ["java.lang", "Runtime$Version", "patch", "()", "summary", "df-generated"] + - ["java.lang", "Runtime$Version", "security", "()", "summary", "df-generated"] + - ["java.lang", "Runtime$Version", "update", "()", "summary", "df-generated"] + - ["java.lang", "Runtime$Version", "version", "()", "summary", "df-generated"] + - ["java.lang", "Runtime", "addShutdownHook", "(Thread)", "summary", "df-generated"] + - ["java.lang", "Runtime", "availableProcessors", "()", "summary", "df-generated"] + - ["java.lang", "Runtime", "exec", "(String)", "summary", "df-generated"] + - ["java.lang", "Runtime", "exec", "(String,String[])", "summary", "df-generated"] + - ["java.lang", "Runtime", "exec", "(String,String[],File)", "summary", "df-generated"] + - ["java.lang", "Runtime", "exec", "(String[])", "summary", "df-generated"] + - ["java.lang", "Runtime", "exec", "(String[],String[])", "summary", "df-generated"] + - ["java.lang", "Runtime", "exec", "(String[],String[],File)", "summary", "df-generated"] + - ["java.lang", "Runtime", "exit", "(int)", "summary", "df-generated"] + - ["java.lang", "Runtime", "freeMemory", "()", "summary", "df-generated"] + - ["java.lang", "Runtime", "gc", "()", "summary", "df-generated"] + - ["java.lang", "Runtime", "halt", "(int)", "summary", "df-generated"] + - ["java.lang", "Runtime", "load", "(String)", "summary", "df-generated"] + - ["java.lang", "Runtime", "loadLibrary", "(String)", "summary", "df-generated"] + - ["java.lang", "Runtime", "maxMemory", "()", "summary", "df-generated"] + - ["java.lang", "Runtime", "removeShutdownHook", "(Thread)", "summary", "df-generated"] + - ["java.lang", "Runtime", "runFinalization", "()", "summary", "df-generated"] + - ["java.lang", "Runtime", "totalMemory", "()", "summary", "df-generated"] + - ["java.lang", "Runtime", "version", "()", "summary", "df-generated"] + - ["java.lang", "SecurityManager", "checkAccept", "(String,int)", "summary", "df-generated"] + - ["java.lang", "SecurityManager", "checkAccess", "(Thread)", "summary", "df-generated"] + - ["java.lang", "SecurityManager", "checkAccess", "(ThreadGroup)", "summary", "df-generated"] + - ["java.lang", "SecurityManager", "checkConnect", "(String,int)", "summary", "df-generated"] + - ["java.lang", "SecurityManager", "checkConnect", "(String,int,Object)", "summary", "df-generated"] + - ["java.lang", "SecurityManager", "checkCreateClassLoader", "()", "summary", "df-generated"] + - ["java.lang", "SecurityManager", "checkDelete", "(String)", "summary", "df-generated"] + - ["java.lang", "SecurityManager", "checkExec", "(String)", "summary", "df-generated"] + - ["java.lang", "SecurityManager", "checkExit", "(int)", "summary", "df-generated"] + - ["java.lang", "SecurityManager", "checkLink", "(String)", "summary", "df-generated"] + - ["java.lang", "SecurityManager", "checkListen", "(int)", "summary", "df-generated"] + - ["java.lang", "SecurityManager", "checkMulticast", "(InetAddress)", "summary", "df-generated"] + - ["java.lang", "SecurityManager", "checkMulticast", "(InetAddress,byte)", "summary", "df-generated"] + - ["java.lang", "SecurityManager", "checkPackageAccess", "(String)", "summary", "df-generated"] + - ["java.lang", "SecurityManager", "checkPackageDefinition", "(String)", "summary", "df-generated"] + - ["java.lang", "SecurityManager", "checkPermission", "(Permission)", "summary", "df-generated"] + - ["java.lang", "SecurityManager", "checkPermission", "(Permission,Object)", "summary", "df-generated"] + - ["java.lang", "SecurityManager", "checkPrintJobAccess", "()", "summary", "df-generated"] + - ["java.lang", "SecurityManager", "checkPropertiesAccess", "()", "summary", "df-generated"] + - ["java.lang", "SecurityManager", "checkPropertyAccess", "(String)", "summary", "df-generated"] + - ["java.lang", "SecurityManager", "checkRead", "(FileDescriptor)", "summary", "df-generated"] + - ["java.lang", "SecurityManager", "checkRead", "(String)", "summary", "df-generated"] + - ["java.lang", "SecurityManager", "checkRead", "(String,Object)", "summary", "df-generated"] + - ["java.lang", "SecurityManager", "checkSecurityAccess", "(String)", "summary", "df-generated"] + - ["java.lang", "SecurityManager", "checkSetFactory", "()", "summary", "df-generated"] + - ["java.lang", "SecurityManager", "checkWrite", "(FileDescriptor)", "summary", "df-generated"] + - ["java.lang", "SecurityManager", "checkWrite", "(String)", "summary", "df-generated"] + - ["java.lang", "SecurityManager", "getSecurityContext", "()", "summary", "df-generated"] + - ["java.lang", "SecurityManager", "getThreadGroup", "()", "summary", "df-generated"] + - ["java.lang", "Short", "Short", "(String)", "summary", "df-generated"] + - ["java.lang", "Short", "Short", "(short)", "summary", "df-generated"] + - ["java.lang", "Short", "compare", "(short,short)", "summary", "df-generated"] + - ["java.lang", "Short", "compareUnsigned", "(short,short)", "summary", "df-generated"] + - ["java.lang", "Short", "decode", "(String)", "summary", "df-generated"] + - ["java.lang", "Short", "hashCode", "(short)", "summary", "df-generated"] + - ["java.lang", "Short", "parseShort", "(String)", "summary", "df-generated"] + - ["java.lang", "Short", "parseShort", "(String,int)", "summary", "df-generated"] + - ["java.lang", "Short", "reverseBytes", "(short)", "summary", "df-generated"] + - ["java.lang", "Short", "toUnsignedInt", "(short)", "summary", "df-generated"] + - ["java.lang", "Short", "toUnsignedLong", "(short)", "summary", "df-generated"] + - ["java.lang", "Short", "valueOf", "(String)", "summary", "df-generated"] + - ["java.lang", "Short", "valueOf", "(String,int)", "summary", "df-generated"] + - ["java.lang", "Short", "valueOf", "(short)", "summary", "df-generated"] + - ["java.lang", "StackTraceElement", "getLineNumber", "()", "summary", "df-generated"] + - ["java.lang", "StackTraceElement", "isNativeMethod", "()", "summary", "df-generated"] + - ["java.lang", "StackWalker$StackFrame", "getByteCodeIndex", "()", "summary", "df-generated"] + - ["java.lang", "StackWalker$StackFrame", "getClassName", "()", "summary", "df-generated"] + - ["java.lang", "StackWalker$StackFrame", "getDeclaringClass", "()", "summary", "df-generated"] + - ["java.lang", "StackWalker$StackFrame", "getLineNumber", "()", "summary", "df-generated"] + - ["java.lang", "StackWalker$StackFrame", "isNativeMethod", "()", "summary", "df-generated"] + - ["java.lang", "StackWalker", "forEach", "(Consumer)", "summary", "df-generated"] + - ["java.lang", "StackWalker", "getCallerClass", "()", "summary", "df-generated"] + - ["java.lang", "StackWalker", "getInstance", "()", "summary", "df-generated"] + - ["java.lang", "StackWalker", "getInstance", "(StackWalker$Option)", "summary", "df-generated"] + - ["java.lang", "StackWalker", "walk", "(Function)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "IEEEremainder", "(double,double)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "abs", "(double)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "abs", "(float)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "abs", "(int)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "abs", "(long)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "absExact", "(int)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "absExact", "(long)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "acos", "(double)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "addExact", "(int,int)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "addExact", "(long,long)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "asin", "(double)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "atan2", "(double,double)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "atan", "(double)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "cbrt", "(double)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "ceil", "(double)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "copySign", "(double,double)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "copySign", "(float,float)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "cos", "(double)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "cosh", "(double)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "decrementExact", "(int)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "decrementExact", "(long)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "exp", "(double)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "expm1", "(double)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "floor", "(double)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "floorDiv", "(int,int)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "floorDiv", "(long,int)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "floorDiv", "(long,long)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "floorMod", "(int,int)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "floorMod", "(long,int)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "floorMod", "(long,long)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "fma", "(double,double,double)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "fma", "(float,float,float)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "getExponent", "(double)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "getExponent", "(float)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "hypot", "(double,double)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "incrementExact", "(int)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "incrementExact", "(long)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "log10", "(double)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "log1p", "(double)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "log", "(double)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "max", "(double,double)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "max", "(float,float)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "max", "(int,int)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "max", "(long,long)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "min", "(double,double)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "min", "(float,float)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "min", "(int,int)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "min", "(long,long)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "multiplyExact", "(int,int)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "multiplyExact", "(long,int)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "multiplyExact", "(long,long)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "multiplyFull", "(int,int)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "multiplyHigh", "(long,long)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "negateExact", "(int)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "negateExact", "(long)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "nextAfter", "(double,double)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "nextAfter", "(float,double)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "nextDown", "(double)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "nextDown", "(float)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "nextUp", "(double)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "nextUp", "(float)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "pow", "(double,double)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "random", "()", "summary", "df-generated"] + - ["java.lang", "StrictMath", "rint", "(double)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "round", "(double)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "round", "(float)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "scalb", "(double,int)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "scalb", "(float,int)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "signum", "(double)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "signum", "(float)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "sin", "(double)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "sinh", "(double)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "sqrt", "(double)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "subtractExact", "(int,int)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "subtractExact", "(long,long)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "tan", "(double)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "tanh", "(double)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "toDegrees", "(double)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "toIntExact", "(long)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "toRadians", "(double)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "ulp", "(double)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "ulp", "(float)", "summary", "df-generated"] + - ["java.lang", "String", "codePointAt", "(int)", "summary", "df-generated"] + - ["java.lang", "String", "codePointBefore", "(int)", "summary", "df-generated"] + - ["java.lang", "String", "codePointCount", "(int,int)", "summary", "df-generated"] + - ["java.lang", "String", "compareToIgnoreCase", "(String)", "summary", "df-generated"] + - ["java.lang", "String", "contentEquals", "(CharSequence)", "summary", "df-generated"] + - ["java.lang", "String", "contentEquals", "(StringBuffer)", "summary", "df-generated"] + - ["java.lang", "String", "indexOf", "(String,int)", "summary", "df-generated"] + - ["java.lang", "String", "indexOf", "(int,int)", "summary", "df-generated"] + - ["java.lang", "String", "isBlank", "()", "summary", "df-generated"] + - ["java.lang", "String", "lastIndexOf", "(String,int)", "summary", "df-generated"] + - ["java.lang", "String", "lastIndexOf", "(int,int)", "summary", "df-generated"] + - ["java.lang", "String", "matches", "(String)", "summary", "df-generated"] + - ["java.lang", "String", "offsetByCodePoints", "(int,int)", "summary", "df-generated"] + - ["java.lang", "String", "regionMatches", "(boolean,int,String,int,int)", "summary", "df-generated"] + - ["java.lang", "String", "regionMatches", "(int,String,int,int)", "summary", "df-generated"] + - ["java.lang", "String", "startsWith", "(String,int)", "summary", "df-generated"] + - ["java.lang", "String", "transform", "(Function)", "summary", "df-generated"] + - ["java.lang", "String", "valueOf", "(double)", "summary", "df-generated"] + - ["java.lang", "String", "valueOf", "(float)", "summary", "df-generated"] + - ["java.lang", "StringBuffer", "StringBuffer", "(int)", "summary", "df-generated"] + - ["java.lang", "StringIndexOutOfBoundsException", "StringIndexOutOfBoundsException", "(int)", "summary", "df-generated"] + - ["java.lang", "System$Logger$Level", "getName", "()", "summary", "df-generated"] + - ["java.lang", "System$Logger$Level", "getSeverity", "()", "summary", "df-generated"] + - ["java.lang", "System$Logger", "log", "(System$Logger$Level,Object)", "summary", "df-generated"] + - ["java.lang", "System$Logger", "log", "(System$Logger$Level,String)", "summary", "df-generated"] + - ["java.lang", "System$Logger", "log", "(System$Logger$Level,String,Object[])", "summary", "df-generated"] + - ["java.lang", "System$Logger", "log", "(System$Logger$Level,String,Throwable)", "summary", "df-generated"] + - ["java.lang", "System$Logger", "log", "(System$Logger$Level,Supplier)", "summary", "df-generated"] + - ["java.lang", "System$Logger", "log", "(System$Logger$Level,Supplier,Throwable)", "summary", "df-generated"] + - ["java.lang", "System$LoggerFinder", "getLogger", "(String,Module)", "summary", "df-generated"] + - ["java.lang", "System$LoggerFinder", "getLoggerFinder", "()", "summary", "df-generated"] + - ["java.lang", "System", "clearProperty", "(String)", "summary", "df-generated"] + - ["java.lang", "System", "console", "()", "summary", "df-generated"] + - ["java.lang", "System", "gc", "()", "summary", "df-generated"] + - ["java.lang", "System", "getProperties", "()", "summary", "df-generated"] + - ["java.lang", "System", "getProperty", "(String)", "summary", "df-generated"] + - ["java.lang", "System", "getSecurityManager", "()", "summary", "df-generated"] + - ["java.lang", "System", "getenv", "()", "summary", "df-generated"] + - ["java.lang", "System", "inheritedChannel", "()", "summary", "df-generated"] + - ["java.lang", "System", "load", "(String)", "summary", "df-generated"] + - ["java.lang", "System", "loadLibrary", "(String)", "summary", "df-generated"] + - ["java.lang", "System", "mapLibraryName", "(String)", "summary", "df-generated"] + - ["java.lang", "System", "runFinalization", "()", "summary", "df-generated"] + - ["java.lang", "System", "setErr", "(PrintStream)", "summary", "df-generated"] + - ["java.lang", "System", "setIn", "(InputStream)", "summary", "df-generated"] + - ["java.lang", "System", "setOut", "(PrintStream)", "summary", "df-generated"] + - ["java.lang", "System", "setProperties", "(Properties)", "summary", "df-generated"] + - ["java.lang", "System", "setSecurityManager", "(SecurityManager)", "summary", "df-generated"] + - ["java.lang", "Thread$UncaughtExceptionHandler", "uncaughtException", "(Thread,Throwable)", "summary", "df-generated"] + - ["java.lang", "Thread", "activeCount", "()", "summary", "df-generated"] + - ["java.lang", "Thread", "checkAccess", "()", "summary", "df-generated"] + - ["java.lang", "Thread", "countStackFrames", "()", "summary", "df-generated"] + - ["java.lang", "Thread", "dumpStack", "()", "summary", "df-generated"] + - ["java.lang", "Thread", "enumerate", "(Thread[])", "summary", "df-generated"] + - ["java.lang", "Thread", "getAllStackTraces", "()", "summary", "df-generated"] + - ["java.lang", "Thread", "getDefaultUncaughtExceptionHandler", "()", "summary", "df-generated"] + - ["java.lang", "Thread", "getId", "()", "summary", "df-generated"] + - ["java.lang", "Thread", "getPriority", "()", "summary", "df-generated"] + - ["java.lang", "Thread", "getStackTrace", "()", "summary", "df-generated"] + - ["java.lang", "Thread", "getState", "()", "summary", "df-generated"] + - ["java.lang", "Thread", "holdsLock", "(Object)", "summary", "df-generated"] + - ["java.lang", "Thread", "interrupted", "()", "summary", "df-generated"] + - ["java.lang", "Thread", "isAlive", "()", "summary", "df-generated"] + - ["java.lang", "Thread", "isDaemon", "()", "summary", "df-generated"] + - ["java.lang", "Thread", "isInterrupted", "()", "summary", "df-generated"] + - ["java.lang", "Thread", "join", "()", "summary", "df-generated"] + - ["java.lang", "Thread", "join", "(long)", "summary", "df-generated"] + - ["java.lang", "Thread", "join", "(long,int)", "summary", "df-generated"] + - ["java.lang", "Thread", "onSpinWait", "()", "summary", "df-generated"] + - ["java.lang", "Thread", "resume", "()", "summary", "df-generated"] + - ["java.lang", "Thread", "setDaemon", "(boolean)", "summary", "df-generated"] + - ["java.lang", "Thread", "setDefaultUncaughtExceptionHandler", "(Thread$UncaughtExceptionHandler)", "summary", "df-generated"] + - ["java.lang", "Thread", "setPriority", "(int)", "summary", "df-generated"] + - ["java.lang", "Thread", "sleep", "(long,int)", "summary", "df-generated"] + - ["java.lang", "Thread", "stop", "()", "summary", "df-generated"] + - ["java.lang", "Thread", "suspend", "()", "summary", "df-generated"] + - ["java.lang", "Thread", "yield", "()", "summary", "df-generated"] + - ["java.lang", "ThreadGroup", "activeCount", "()", "summary", "df-generated"] + - ["java.lang", "ThreadGroup", "activeGroupCount", "()", "summary", "df-generated"] + - ["java.lang", "ThreadGroup", "allowThreadSuspension", "(boolean)", "summary", "df-generated"] + - ["java.lang", "ThreadGroup", "checkAccess", "()", "summary", "df-generated"] + - ["java.lang", "ThreadGroup", "destroy", "()", "summary", "df-generated"] + - ["java.lang", "ThreadGroup", "getMaxPriority", "()", "summary", "df-generated"] + - ["java.lang", "ThreadGroup", "interrupt", "()", "summary", "df-generated"] + - ["java.lang", "ThreadGroup", "isDaemon", "()", "summary", "df-generated"] + - ["java.lang", "ThreadGroup", "isDestroyed", "()", "summary", "df-generated"] + - ["java.lang", "ThreadGroup", "list", "()", "summary", "df-generated"] + - ["java.lang", "ThreadGroup", "parentOf", "(ThreadGroup)", "summary", "df-generated"] + - ["java.lang", "ThreadGroup", "resume", "()", "summary", "df-generated"] + - ["java.lang", "ThreadGroup", "setDaemon", "(boolean)", "summary", "df-generated"] + - ["java.lang", "ThreadGroup", "setMaxPriority", "(int)", "summary", "df-generated"] + - ["java.lang", "ThreadGroup", "stop", "()", "summary", "df-generated"] + - ["java.lang", "ThreadGroup", "suspend", "()", "summary", "df-generated"] + - ["java.lang", "ThreadLocal", "remove", "()", "summary", "df-generated"] + - ["java.lang", "Throwable", "printStackTrace", "()", "summary", "df-generated"] + - ["java.lang", "Throwable", "printStackTrace", "(PrintStream)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/java.lang.module.model.yml b/java/ql/lib/ext/generated/java.lang.module.model.yml new file mode 100644 index 00000000000..99377e90986 --- /dev/null +++ b/java/ql/lib/ext/generated/java.lang.module.model.yml @@ -0,0 +1,130 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["java.lang.module", "Configuration", False, "findModule", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.module", "Configuration", False, "modules", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.module", "Configuration", False, "parents", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.module", "Configuration", False, "resolve", "(ModuleFinder,List,ModuleFinder,Collection)", "", "Argument[1].Element", "ReturnValue", "taint", "df-generated"] + - ["java.lang.module", "Configuration", False, "resolve", "(ModuleFinder,ModuleFinder,Collection)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.module", "Configuration", False, "resolveAndBind", "(ModuleFinder,List,ModuleFinder,Collection)", "", "Argument[1].Element", "ReturnValue", "taint", "df-generated"] + - ["java.lang.module", "Configuration", False, "resolveAndBind", "(ModuleFinder,ModuleFinder,Collection)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.module", "FindException", True, "FindException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.module", "FindException", True, "FindException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.module", "FindException", True, "FindException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.module", "FindException", True, "FindException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.module", "InvalidModuleDescriptorException", True, "InvalidModuleDescriptorException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor$Builder", False, "build", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor$Builder", False, "exports", "(ModuleDescriptor$Exports)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor$Builder", False, "exports", "(ModuleDescriptor$Exports)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.lang.module", "ModuleDescriptor$Builder", False, "exports", "(Set,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor$Builder", False, "exports", "(Set,String)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor$Builder", False, "exports", "(Set,String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor$Builder", False, "exports", "(Set,String,Set)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor$Builder", False, "exports", "(Set,String,Set)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor$Builder", False, "exports", "(Set,String,Set)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor$Builder", False, "exports", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor$Builder", False, "exports", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor$Builder", False, "exports", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor$Builder", False, "exports", "(String,Set)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor$Builder", False, "exports", "(String,Set)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor$Builder", False, "exports", "(String,Set)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor$Builder", False, "mainClass", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor$Builder", False, "mainClass", "(String)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.lang.module", "ModuleDescriptor$Builder", False, "opens", "(ModuleDescriptor$Opens)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor$Builder", False, "opens", "(ModuleDescriptor$Opens)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.lang.module", "ModuleDescriptor$Builder", False, "opens", "(Set,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor$Builder", False, "opens", "(Set,String)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor$Builder", False, "opens", "(Set,String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor$Builder", False, "opens", "(Set,String,Set)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor$Builder", False, "opens", "(Set,String,Set)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor$Builder", False, "opens", "(Set,String,Set)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor$Builder", False, "opens", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor$Builder", False, "opens", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor$Builder", False, "opens", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor$Builder", False, "opens", "(String,Set)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor$Builder", False, "opens", "(String,Set)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor$Builder", False, "opens", "(String,Set)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor$Builder", False, "packages", "(Set)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor$Builder", False, "packages", "(Set)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.lang.module", "ModuleDescriptor$Builder", False, "provides", "(ModuleDescriptor$Provides)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor$Builder", False, "provides", "(ModuleDescriptor$Provides)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.lang.module", "ModuleDescriptor$Builder", False, "provides", "(String,List)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor$Builder", False, "provides", "(String,List)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor$Builder", False, "provides", "(String,List)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor$Builder", False, "requires", "(ModuleDescriptor$Requires)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor$Builder", False, "requires", "(ModuleDescriptor$Requires)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.lang.module", "ModuleDescriptor$Builder", False, "requires", "(Set,String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor$Builder", False, "requires", "(Set,String,ModuleDescriptor$Version)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor$Builder", False, "requires", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor$Builder", False, "uses", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor$Builder", False, "uses", "(String)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.lang.module", "ModuleDescriptor$Builder", False, "version", "(ModuleDescriptor$Version)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor$Builder", False, "version", "(ModuleDescriptor$Version)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.lang.module", "ModuleDescriptor$Builder", False, "version", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor$Builder", False, "version", "(String)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.lang.module", "ModuleDescriptor$Exports", False, "modifiers", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor$Exports", False, "source", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor$Exports", False, "targets", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor$Opens", False, "modifiers", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor$Opens", False, "source", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor$Opens", False, "targets", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor$Provides", False, "providers", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor$Provides", False, "service", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor$Requires", False, "compiledVersion", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor$Requires", False, "modifiers", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor$Requires", False, "name", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor$Requires", False, "rawCompiledVersion", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor$Version", False, "parse", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor", True, "exports", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor", True, "mainClass", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor", True, "modifiers", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor", True, "name", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor", True, "newAutomaticModule", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor", True, "newModule", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor", True, "newModule", "(String,Set)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor", True, "newModule", "(String,Set)", "", "Argument[1].Element", "ReturnValue", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor", True, "newOpenModule", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor", True, "opens", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor", True, "packages", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor", True, "provides", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor", True, "rawVersion", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor", True, "read", "(ByteBuffer,Supplier)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor", True, "read", "(InputStream)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor", True, "read", "(InputStream,Supplier)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor", True, "read", "(InputStream,Supplier)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor", True, "requires", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor", True, "toNameAndVersion", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor", True, "uses", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor", True, "version", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.module", "ModuleFinder", True, "find", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.module", "ModuleFinder", True, "findAll", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.module", "ModuleFinder", True, "of", "(Path[])", "", "Argument[0].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["java.lang.module", "ModuleReader", True, "open", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.module", "ModuleReader", True, "read", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.module", "ModuleReference", True, "descriptor", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.module", "ModuleReference", True, "location", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.module", "ResolutionException", True, "ResolutionException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.module", "ResolutionException", True, "ResolutionException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.module", "ResolutionException", True, "ResolutionException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.module", "ResolutionException", True, "ResolutionException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.module", "ResolvedModule", False, "configuration", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.module", "ResolvedModule", False, "reads", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.module", "ResolvedModule", False, "reference", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["java.lang.module", "Configuration", "empty", "()", "summary", "df-generated"] + - ["java.lang.module", "ModuleDescriptor$Exports", "isQualified", "()", "summary", "df-generated"] + - ["java.lang.module", "ModuleDescriptor$Opens", "isQualified", "()", "summary", "df-generated"] + - ["java.lang.module", "ModuleDescriptor", "isAutomatic", "()", "summary", "df-generated"] + - ["java.lang.module", "ModuleDescriptor", "isOpen", "()", "summary", "df-generated"] + - ["java.lang.module", "ModuleDescriptor", "read", "(ByteBuffer)", "summary", "df-generated"] + - ["java.lang.module", "ModuleFinder", "compose", "(ModuleFinder[])", "summary", "df-generated"] + - ["java.lang.module", "ModuleFinder", "ofSystem", "()", "summary", "df-generated"] + - ["java.lang.module", "ModuleReader", "release", "(ByteBuffer)", "summary", "df-generated"] + - ["java.lang.module", "ModuleReference", "open", "()", "summary", "df-generated"] + - ["java.lang.module", "ResolvedModule", "name", "()", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/java.lang.ref.model.yml b/java/ql/lib/ext/generated/java.lang.ref.model.yml new file mode 100644 index 00000000000..58ae03a832f --- /dev/null +++ b/java/ql/lib/ext/generated/java.lang.ref.model.yml @@ -0,0 +1,32 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["java.lang.ref", "Cleaner", False, "register", "(Object,Runnable)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.ref", "Cleaner", False, "register", "(Object,Runnable)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.ref", "Cleaner", False, "register", "(Object,Runnable)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.ref", "PhantomReference", True, "PhantomReference", "(Object,ReferenceQueue)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.ref", "PhantomReference", True, "PhantomReference", "(Object,ReferenceQueue)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.ref", "Reference", True, "get", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.ref", "ReferenceQueue", True, "poll", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.ref", "ReferenceQueue", True, "remove", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.ref", "ReferenceQueue", True, "remove", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.ref", "SoftReference", True, "SoftReference", "(Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.ref", "SoftReference", True, "SoftReference", "(Object,ReferenceQueue)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.ref", "SoftReference", True, "SoftReference", "(Object,ReferenceQueue)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.ref", "WeakReference", True, "WeakReference", "(Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.ref", "WeakReference", True, "WeakReference", "(Object,ReferenceQueue)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.ref", "WeakReference", True, "WeakReference", "(Object,ReferenceQueue)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["java.lang.ref", "Cleaner", "create", "()", "summary", "df-generated"] + - ["java.lang.ref", "Cleaner", "create", "(ThreadFactory)", "summary", "df-generated"] + - ["java.lang.ref", "Reference", "clear", "()", "summary", "df-generated"] + - ["java.lang.ref", "Reference", "enqueue", "()", "summary", "df-generated"] + - ["java.lang.ref", "Reference", "isEnqueued", "()", "summary", "df-generated"] + - ["java.lang.ref", "Reference", "reachabilityFence", "(Object)", "summary", "df-generated"] + - ["java.lang.ref", "Reference", "refersTo", "(Object)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/java.lang.reflect.model.yml b/java/ql/lib/ext/generated/java.lang.reflect.model.yml new file mode 100644 index 00000000000..b79a4078005 --- /dev/null +++ b/java/ql/lib/ext/generated/java.lang.reflect.model.yml @@ -0,0 +1,145 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["java.lang.reflect", "AnnotatedElement", True, "getAnnotation", "(Class)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.reflect", "AnnotatedElement", True, "getAnnotations", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.reflect", "AnnotatedElement", True, "getAnnotationsByType", "(Class)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.reflect", "AnnotatedElement", True, "getDeclaredAnnotation", "(Class)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.reflect", "AnnotatedElement", True, "getDeclaredAnnotations", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.reflect", "AnnotatedElement", True, "getDeclaredAnnotationsByType", "(Class)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.reflect", "Executable", True, "getAnnotatedExceptionTypes", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.reflect", "Executable", True, "getAnnotatedParameterTypes", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.reflect", "Executable", True, "getAnnotatedReceiverType", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.reflect", "Executable", True, "getAnnotatedReturnType", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.reflect", "Executable", True, "getExceptionTypes", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.reflect", "Executable", True, "getGenericExceptionTypes", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.reflect", "Executable", True, "getGenericParameterTypes", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.reflect", "Executable", True, "getParameterTypes", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.reflect", "Executable", True, "getParameters", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.reflect", "Executable", True, "toGenericString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.reflect", "Field", False, "getAnnotatedType", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.reflect", "Field", False, "getGenericType", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.reflect", "Field", False, "toGenericString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.reflect", "GenericDeclaration", True, "getTypeParameters", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.reflect", "GenericSignatureFormatError", True, "GenericSignatureFormatError", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.reflect", "InaccessibleObjectException", True, "InaccessibleObjectException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.reflect", "InvocationHandler", True, "invoke", "(Object,Method,Object[])", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.reflect", "InvocationTargetException", True, "InvocationTargetException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.reflect", "InvocationTargetException", True, "InvocationTargetException", "(Throwable,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.reflect", "InvocationTargetException", True, "InvocationTargetException", "(Throwable,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.reflect", "InvocationTargetException", True, "getTargetException", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.reflect", "MalformedParameterizedTypeException", True, "MalformedParameterizedTypeException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.reflect", "MalformedParametersException", True, "MalformedParametersException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.reflect", "Member", True, "getName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.reflect", "Method", False, "getGenericReturnType", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.reflect", "Parameter", False, "getAnnotatedType", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.reflect", "Parameter", False, "getDeclaringExecutable", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.reflect", "Parameter", False, "getName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.reflect", "Parameter", False, "getParameterizedType", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.reflect", "Proxy", True, "getInvocationHandler", "(Object)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.reflect", "RecordComponent", False, "getAccessor", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.reflect", "RecordComponent", False, "getAnnotatedType", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.reflect", "RecordComponent", False, "getGenericSignature", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.reflect", "RecordComponent", False, "getGenericType", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.reflect", "RecordComponent", False, "getName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.reflect", "ReflectPermission", False, "ReflectPermission", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.reflect", "ReflectPermission", False, "ReflectPermission", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.reflect", "Type", True, "getTypeName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.reflect", "UndeclaredThrowableException", True, "UndeclaredThrowableException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.reflect", "UndeclaredThrowableException", True, "UndeclaredThrowableException", "(Throwable,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.reflect", "UndeclaredThrowableException", True, "UndeclaredThrowableException", "(Throwable,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.reflect", "UndeclaredThrowableException", True, "getUndeclaredThrowable", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["java.lang.reflect", "AccessibleObject", "canAccess", "(Object)", "summary", "df-generated"] + - ["java.lang.reflect", "AccessibleObject", "isAccessible", "()", "summary", "df-generated"] + - ["java.lang.reflect", "AccessibleObject", "setAccessible", "(AccessibleObject[],boolean)", "summary", "df-generated"] + - ["java.lang.reflect", "AccessibleObject", "setAccessible", "(boolean)", "summary", "df-generated"] + - ["java.lang.reflect", "AccessibleObject", "trySetAccessible", "()", "summary", "df-generated"] + - ["java.lang.reflect", "AnnotatedElement", "isAnnotationPresent", "(Class)", "summary", "df-generated"] + - ["java.lang.reflect", "AnnotatedType", "getAnnotatedOwnerType", "()", "summary", "df-generated"] + - ["java.lang.reflect", "Array", "get", "(Object,int)", "summary", "df-generated"] + - ["java.lang.reflect", "Array", "getBoolean", "(Object,int)", "summary", "df-generated"] + - ["java.lang.reflect", "Array", "getByte", "(Object,int)", "summary", "df-generated"] + - ["java.lang.reflect", "Array", "getChar", "(Object,int)", "summary", "df-generated"] + - ["java.lang.reflect", "Array", "getDouble", "(Object,int)", "summary", "df-generated"] + - ["java.lang.reflect", "Array", "getFloat", "(Object,int)", "summary", "df-generated"] + - ["java.lang.reflect", "Array", "getInt", "(Object,int)", "summary", "df-generated"] + - ["java.lang.reflect", "Array", "getLength", "(Object)", "summary", "df-generated"] + - ["java.lang.reflect", "Array", "getLong", "(Object,int)", "summary", "df-generated"] + - ["java.lang.reflect", "Array", "getShort", "(Object,int)", "summary", "df-generated"] + - ["java.lang.reflect", "Array", "newInstance", "(Class,int)", "summary", "df-generated"] + - ["java.lang.reflect", "Array", "newInstance", "(Class,int[])", "summary", "df-generated"] + - ["java.lang.reflect", "Array", "set", "(Object,int,Object)", "summary", "df-generated"] + - ["java.lang.reflect", "Array", "setBoolean", "(Object,int,boolean)", "summary", "df-generated"] + - ["java.lang.reflect", "Array", "setByte", "(Object,int,byte)", "summary", "df-generated"] + - ["java.lang.reflect", "Array", "setChar", "(Object,int,char)", "summary", "df-generated"] + - ["java.lang.reflect", "Array", "setDouble", "(Object,int,double)", "summary", "df-generated"] + - ["java.lang.reflect", "Array", "setFloat", "(Object,int,float)", "summary", "df-generated"] + - ["java.lang.reflect", "Array", "setInt", "(Object,int,int)", "summary", "df-generated"] + - ["java.lang.reflect", "Array", "setLong", "(Object,int,long)", "summary", "df-generated"] + - ["java.lang.reflect", "Array", "setShort", "(Object,int,short)", "summary", "df-generated"] + - ["java.lang.reflect", "Executable", "getParameterAnnotations", "()", "summary", "df-generated"] + - ["java.lang.reflect", "Executable", "getParameterCount", "()", "summary", "df-generated"] + - ["java.lang.reflect", "Executable", "isVarArgs", "()", "summary", "df-generated"] + - ["java.lang.reflect", "Field", "getBoolean", "(Object)", "summary", "df-generated"] + - ["java.lang.reflect", "Field", "getByte", "(Object)", "summary", "df-generated"] + - ["java.lang.reflect", "Field", "getChar", "(Object)", "summary", "df-generated"] + - ["java.lang.reflect", "Field", "getDouble", "(Object)", "summary", "df-generated"] + - ["java.lang.reflect", "Field", "getFloat", "(Object)", "summary", "df-generated"] + - ["java.lang.reflect", "Field", "getInt", "(Object)", "summary", "df-generated"] + - ["java.lang.reflect", "Field", "getLong", "(Object)", "summary", "df-generated"] + - ["java.lang.reflect", "Field", "getShort", "(Object)", "summary", "df-generated"] + - ["java.lang.reflect", "Field", "getType", "()", "summary", "df-generated"] + - ["java.lang.reflect", "Field", "isEnumConstant", "()", "summary", "df-generated"] + - ["java.lang.reflect", "Field", "set", "(Object,Object)", "summary", "df-generated"] + - ["java.lang.reflect", "Field", "setBoolean", "(Object,boolean)", "summary", "df-generated"] + - ["java.lang.reflect", "Field", "setByte", "(Object,byte)", "summary", "df-generated"] + - ["java.lang.reflect", "Field", "setChar", "(Object,char)", "summary", "df-generated"] + - ["java.lang.reflect", "Field", "setDouble", "(Object,double)", "summary", "df-generated"] + - ["java.lang.reflect", "Field", "setFloat", "(Object,float)", "summary", "df-generated"] + - ["java.lang.reflect", "Field", "setInt", "(Object,int)", "summary", "df-generated"] + - ["java.lang.reflect", "Field", "setLong", "(Object,long)", "summary", "df-generated"] + - ["java.lang.reflect", "Field", "setShort", "(Object,short)", "summary", "df-generated"] + - ["java.lang.reflect", "InvocationHandler", "invokeDefault", "(Object,Method,Object[])", "summary", "df-generated"] + - ["java.lang.reflect", "Member", "getDeclaringClass", "()", "summary", "df-generated"] + - ["java.lang.reflect", "Member", "getModifiers", "()", "summary", "df-generated"] + - ["java.lang.reflect", "Member", "isSynthetic", "()", "summary", "df-generated"] + - ["java.lang.reflect", "Method", "getDefaultValue", "()", "summary", "df-generated"] + - ["java.lang.reflect", "Method", "getReturnType", "()", "summary", "df-generated"] + - ["java.lang.reflect", "Method", "isBridge", "()", "summary", "df-generated"] + - ["java.lang.reflect", "Method", "isDefault", "()", "summary", "df-generated"] + - ["java.lang.reflect", "Modifier", "classModifiers", "()", "summary", "df-generated"] + - ["java.lang.reflect", "Modifier", "constructorModifiers", "()", "summary", "df-generated"] + - ["java.lang.reflect", "Modifier", "fieldModifiers", "()", "summary", "df-generated"] + - ["java.lang.reflect", "Modifier", "interfaceModifiers", "()", "summary", "df-generated"] + - ["java.lang.reflect", "Modifier", "isAbstract", "(int)", "summary", "df-generated"] + - ["java.lang.reflect", "Modifier", "isFinal", "(int)", "summary", "df-generated"] + - ["java.lang.reflect", "Modifier", "isInterface", "(int)", "summary", "df-generated"] + - ["java.lang.reflect", "Modifier", "isNative", "(int)", "summary", "df-generated"] + - ["java.lang.reflect", "Modifier", "isPrivate", "(int)", "summary", "df-generated"] + - ["java.lang.reflect", "Modifier", "isProtected", "(int)", "summary", "df-generated"] + - ["java.lang.reflect", "Modifier", "isPublic", "(int)", "summary", "df-generated"] + - ["java.lang.reflect", "Modifier", "isStatic", "(int)", "summary", "df-generated"] + - ["java.lang.reflect", "Modifier", "isStrict", "(int)", "summary", "df-generated"] + - ["java.lang.reflect", "Modifier", "isSynchronized", "(int)", "summary", "df-generated"] + - ["java.lang.reflect", "Modifier", "isTransient", "(int)", "summary", "df-generated"] + - ["java.lang.reflect", "Modifier", "isVolatile", "(int)", "summary", "df-generated"] + - ["java.lang.reflect", "Modifier", "methodModifiers", "()", "summary", "df-generated"] + - ["java.lang.reflect", "Modifier", "parameterModifiers", "()", "summary", "df-generated"] + - ["java.lang.reflect", "Parameter", "getModifiers", "()", "summary", "df-generated"] + - ["java.lang.reflect", "Parameter", "getType", "()", "summary", "df-generated"] + - ["java.lang.reflect", "Parameter", "isImplicit", "()", "summary", "df-generated"] + - ["java.lang.reflect", "Parameter", "isNamePresent", "()", "summary", "df-generated"] + - ["java.lang.reflect", "Parameter", "isSynthetic", "()", "summary", "df-generated"] + - ["java.lang.reflect", "Parameter", "isVarArgs", "()", "summary", "df-generated"] + - ["java.lang.reflect", "Proxy", "getProxyClass", "(ClassLoader,Class[])", "summary", "df-generated"] + - ["java.lang.reflect", "Proxy", "isProxyClass", "(Class)", "summary", "df-generated"] + - ["java.lang.reflect", "Proxy", "newProxyInstance", "(ClassLoader,Class[],InvocationHandler)", "summary", "df-generated"] + - ["java.lang.reflect", "RecordComponent", "getDeclaringRecord", "()", "summary", "df-generated"] + - ["java.lang.reflect", "RecordComponent", "getType", "()", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/java.lang.runtime.model.yml b/java/ql/lib/ext/generated/java.lang.runtime.model.yml new file mode 100644 index 00000000000..940d246f9b3 --- /dev/null +++ b/java/ql/lib/ext/generated/java.lang.runtime.model.yml @@ -0,0 +1,13 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["java.lang.runtime", "SwitchBootstraps", True, "enumSwitch", "(MethodHandles$Lookup,String,MethodType,Object[])", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.runtime", "SwitchBootstraps", True, "typeSwitch", "(MethodHandles$Lookup,String,MethodType,Object[])", "", "Argument[3].ArrayElement", "ReturnValue", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["java.lang.runtime", "ObjectMethods", "bootstrap", "(MethodHandles$Lookup,String,TypeDescriptor,Class,String,MethodHandle[])", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/java.math.model.yml b/java/ql/lib/ext/generated/java.math.model.yml new file mode 100644 index 00000000000..2f149239f07 --- /dev/null +++ b/java/ql/lib/ext/generated/java.math.model.yml @@ -0,0 +1,107 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["java.math", "BigDecimal", True, "movePointLeft", "(int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.math", "BigDecimal", True, "movePointRight", "(int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.math", "BigDecimal", True, "plus", "()", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.math", "BigDecimal", True, "plus", "(MathContext)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.math", "BigDecimal", True, "setScale", "(int,int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.math", "BigInteger", True, "add", "(BigInteger)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.math", "BigInteger", True, "shiftLeft", "(int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.math", "BigInteger", True, "shiftRight", "(int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.math", "BigInteger", True, "subtract", "(BigInteger)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["java.math", "BigDecimal", "abs", "()", "summary", "df-generated"] + - ["java.math", "BigDecimal", "abs", "(MathContext)", "summary", "df-generated"] + - ["java.math", "BigDecimal", "add", "(BigDecimal,MathContext)", "summary", "df-generated"] + - ["java.math", "BigDecimal", "byteValueExact", "()", "summary", "df-generated"] + - ["java.math", "BigDecimal", "divide", "(BigDecimal)", "summary", "df-generated"] + - ["java.math", "BigDecimal", "divide", "(BigDecimal,MathContext)", "summary", "df-generated"] + - ["java.math", "BigDecimal", "divide", "(BigDecimal,RoundingMode)", "summary", "df-generated"] + - ["java.math", "BigDecimal", "divide", "(BigDecimal,int)", "summary", "df-generated"] + - ["java.math", "BigDecimal", "divide", "(BigDecimal,int,RoundingMode)", "summary", "df-generated"] + - ["java.math", "BigDecimal", "divide", "(BigDecimal,int,int)", "summary", "df-generated"] + - ["java.math", "BigDecimal", "divideAndRemainder", "(BigDecimal)", "summary", "df-generated"] + - ["java.math", "BigDecimal", "divideAndRemainder", "(BigDecimal,MathContext)", "summary", "df-generated"] + - ["java.math", "BigDecimal", "divideToIntegralValue", "(BigDecimal)", "summary", "df-generated"] + - ["java.math", "BigDecimal", "divideToIntegralValue", "(BigDecimal,MathContext)", "summary", "df-generated"] + - ["java.math", "BigDecimal", "intValueExact", "()", "summary", "df-generated"] + - ["java.math", "BigDecimal", "longValueExact", "()", "summary", "df-generated"] + - ["java.math", "BigDecimal", "max", "(BigDecimal)", "summary", "df-generated"] + - ["java.math", "BigDecimal", "min", "(BigDecimal)", "summary", "df-generated"] + - ["java.math", "BigDecimal", "multiply", "(BigDecimal,MathContext)", "summary", "df-generated"] + - ["java.math", "BigDecimal", "negate", "()", "summary", "df-generated"] + - ["java.math", "BigDecimal", "negate", "(MathContext)", "summary", "df-generated"] + - ["java.math", "BigDecimal", "pow", "(int)", "summary", "df-generated"] + - ["java.math", "BigDecimal", "pow", "(int,MathContext)", "summary", "df-generated"] + - ["java.math", "BigDecimal", "precision", "()", "summary", "df-generated"] + - ["java.math", "BigDecimal", "remainder", "(BigDecimal)", "summary", "df-generated"] + - ["java.math", "BigDecimal", "remainder", "(BigDecimal,MathContext)", "summary", "df-generated"] + - ["java.math", "BigDecimal", "round", "(MathContext)", "summary", "df-generated"] + - ["java.math", "BigDecimal", "scale", "()", "summary", "df-generated"] + - ["java.math", "BigDecimal", "scaleByPowerOfTen", "(int)", "summary", "df-generated"] + - ["java.math", "BigDecimal", "setScale", "(int)", "summary", "df-generated"] + - ["java.math", "BigDecimal", "shortValueExact", "()", "summary", "df-generated"] + - ["java.math", "BigDecimal", "signum", "()", "summary", "df-generated"] + - ["java.math", "BigDecimal", "sqrt", "(MathContext)", "summary", "df-generated"] + - ["java.math", "BigDecimal", "stripTrailingZeros", "()", "summary", "df-generated"] + - ["java.math", "BigDecimal", "subtract", "(BigDecimal,MathContext)", "summary", "df-generated"] + - ["java.math", "BigDecimal", "toBigIntegerExact", "()", "summary", "df-generated"] + - ["java.math", "BigDecimal", "toEngineeringString", "()", "summary", "df-generated"] + - ["java.math", "BigDecimal", "toPlainString", "()", "summary", "df-generated"] + - ["java.math", "BigDecimal", "ulp", "()", "summary", "df-generated"] + - ["java.math", "BigDecimal", "unscaledValue", "()", "summary", "df-generated"] + - ["java.math", "BigInteger", "BigInteger", "(String,int)", "summary", "df-generated"] + - ["java.math", "BigInteger", "BigInteger", "(byte[])", "summary", "df-generated"] + - ["java.math", "BigInteger", "BigInteger", "(byte[],int,int)", "summary", "df-generated"] + - ["java.math", "BigInteger", "BigInteger", "(int,Random)", "summary", "df-generated"] + - ["java.math", "BigInteger", "BigInteger", "(int,byte[])", "summary", "df-generated"] + - ["java.math", "BigInteger", "BigInteger", "(int,byte[],int,int)", "summary", "df-generated"] + - ["java.math", "BigInteger", "BigInteger", "(int,int,Random)", "summary", "df-generated"] + - ["java.math", "BigInteger", "abs", "()", "summary", "df-generated"] + - ["java.math", "BigInteger", "and", "(BigInteger)", "summary", "df-generated"] + - ["java.math", "BigInteger", "andNot", "(BigInteger)", "summary", "df-generated"] + - ["java.math", "BigInteger", "bitCount", "()", "summary", "df-generated"] + - ["java.math", "BigInteger", "bitLength", "()", "summary", "df-generated"] + - ["java.math", "BigInteger", "byteValueExact", "()", "summary", "df-generated"] + - ["java.math", "BigInteger", "clearBit", "(int)", "summary", "df-generated"] + - ["java.math", "BigInteger", "divide", "(BigInteger)", "summary", "df-generated"] + - ["java.math", "BigInteger", "divideAndRemainder", "(BigInteger)", "summary", "df-generated"] + - ["java.math", "BigInteger", "flipBit", "(int)", "summary", "df-generated"] + - ["java.math", "BigInteger", "gcd", "(BigInteger)", "summary", "df-generated"] + - ["java.math", "BigInteger", "getLowestSetBit", "()", "summary", "df-generated"] + - ["java.math", "BigInteger", "intValueExact", "()", "summary", "df-generated"] + - ["java.math", "BigInteger", "isProbablePrime", "(int)", "summary", "df-generated"] + - ["java.math", "BigInteger", "longValueExact", "()", "summary", "df-generated"] + - ["java.math", "BigInteger", "max", "(BigInteger)", "summary", "df-generated"] + - ["java.math", "BigInteger", "min", "(BigInteger)", "summary", "df-generated"] + - ["java.math", "BigInteger", "mod", "(BigInteger)", "summary", "df-generated"] + - ["java.math", "BigInteger", "modInverse", "(BigInteger)", "summary", "df-generated"] + - ["java.math", "BigInteger", "modPow", "(BigInteger,BigInteger)", "summary", "df-generated"] + - ["java.math", "BigInteger", "multiply", "(BigInteger)", "summary", "df-generated"] + - ["java.math", "BigInteger", "negate", "()", "summary", "df-generated"] + - ["java.math", "BigInteger", "nextProbablePrime", "()", "summary", "df-generated"] + - ["java.math", "BigInteger", "not", "()", "summary", "df-generated"] + - ["java.math", "BigInteger", "pow", "(int)", "summary", "df-generated"] + - ["java.math", "BigInteger", "probablePrime", "(int,Random)", "summary", "df-generated"] + - ["java.math", "BigInteger", "remainder", "(BigInteger)", "summary", "df-generated"] + - ["java.math", "BigInteger", "setBit", "(int)", "summary", "df-generated"] + - ["java.math", "BigInteger", "shortValueExact", "()", "summary", "df-generated"] + - ["java.math", "BigInteger", "signum", "()", "summary", "df-generated"] + - ["java.math", "BigInteger", "sqrt", "()", "summary", "df-generated"] + - ["java.math", "BigInteger", "sqrtAndRemainder", "()", "summary", "df-generated"] + - ["java.math", "BigInteger", "testBit", "(int)", "summary", "df-generated"] + - ["java.math", "BigInteger", "toByteArray", "()", "summary", "df-generated"] + - ["java.math", "BigInteger", "xor", "(BigInteger)", "summary", "df-generated"] + - ["java.math", "MathContext", "MathContext", "(String)", "summary", "df-generated"] + - ["java.math", "MathContext", "MathContext", "(int)", "summary", "df-generated"] + - ["java.math", "MathContext", "MathContext", "(int,RoundingMode)", "summary", "df-generated"] + - ["java.math", "MathContext", "getPrecision", "()", "summary", "df-generated"] + - ["java.math", "MathContext", "getRoundingMode", "()", "summary", "df-generated"] + - ["java.math", "RoundingMode", "valueOf", "(int)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/java.net.http.model.yml b/java/ql/lib/ext/generated/java.net.http.model.yml new file mode 100644 index 00000000000..6bb3608a437 --- /dev/null +++ b/java/ql/lib/ext/generated/java.net.http.model.yml @@ -0,0 +1,103 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["java.net.http", "HttpConnectTimeoutException", True, "HttpConnectTimeoutException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.net.http", "HttpHeaders", False, "allValues", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net.http", "HttpHeaders", False, "firstValue", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net.http", "HttpHeaders", False, "map", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net.http", "HttpRequest$BodyPublishers", True, "concat", "(HttpRequest$BodyPublisher[])", "", "Argument[0].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["java.net.http", "HttpRequest$BodyPublishers", True, "fromPublisher", "(Flow$Publisher)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.net.http", "HttpRequest$BodyPublishers", True, "fromPublisher", "(Flow$Publisher,long)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.net.http", "HttpRequest$BodyPublishers", True, "ofByteArray", "(byte[])", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.net.http", "HttpRequest$BodyPublishers", True, "ofByteArray", "(byte[],int,int)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.net.http", "HttpRequest$BodyPublishers", True, "ofByteArrays", "(Iterable)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["java.net.http", "HttpRequest$BodyPublishers", True, "ofFile", "(Path)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["java.net.http", "HttpRequest$BodyPublishers", True, "ofInputStream", "(Supplier)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.net.http", "HttpRequest$BodyPublishers", True, "ofString", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.net.http", "HttpRequest$BodyPublishers", True, "ofString", "(String,Charset)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.net.http", "HttpRequest", True, "newBuilder", "(HttpRequest,BiPredicate)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.net.http", "HttpRequest", True, "newBuilder", "(URI)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.net.http", "HttpResponse$BodyHandlers", True, "ofFile", "(Path)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["java.net.http", "HttpResponse$BodyHandlers", True, "ofFile", "(Path,OpenOption[])", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["java.net.http", "HttpResponse$BodyHandlers", True, "ofFile", "(Path,OpenOption[])", "", "Argument[1].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["java.net.http", "HttpResponse$BodyHandlers", True, "ofFileDownload", "(Path,OpenOption[])", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["java.net.http", "HttpResponse$BodyHandlers", True, "ofFileDownload", "(Path,OpenOption[])", "", "Argument[1].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["java.net.http", "HttpResponse$BodySubscribers", True, "buffering", "(HttpResponse$BodySubscriber,int)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.net.http", "HttpResponse$BodySubscribers", True, "fromLineSubscriber", "(Flow$Subscriber)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.net.http", "HttpResponse$BodySubscribers", True, "fromLineSubscriber", "(Flow$Subscriber,Function,Charset,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.net.http", "HttpResponse$BodySubscribers", True, "fromLineSubscriber", "(Flow$Subscriber,Function,Charset,String)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.net.http", "HttpResponse$BodySubscribers", True, "fromLineSubscriber", "(Flow$Subscriber,Function,Charset,String)", "", "Argument[3]", "ReturnValue", "taint", "df-generated"] + - ["java.net.http", "HttpResponse$BodySubscribers", True, "fromSubscriber", "(Flow$Subscriber)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.net.http", "HttpResponse$BodySubscribers", True, "fromSubscriber", "(Flow$Subscriber,Function)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.net.http", "HttpResponse$BodySubscribers", True, "fromSubscriber", "(Flow$Subscriber,Function)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.net.http", "HttpResponse$BodySubscribers", True, "mapping", "(HttpResponse$BodySubscriber,Function)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.net.http", "HttpResponse$BodySubscribers", True, "mapping", "(HttpResponse$BodySubscriber,Function)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.net.http", "HttpResponse$BodySubscribers", True, "ofByteArrayConsumer", "(Consumer)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.net.http", "HttpResponse$BodySubscribers", True, "ofFile", "(Path)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["java.net.http", "HttpResponse$BodySubscribers", True, "ofFile", "(Path,OpenOption[])", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["java.net.http", "HttpResponse$BodySubscribers", True, "replacing", "(Object)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.net.http", "HttpResponse$PushPromiseHandler", True, "of", "(Function,ConcurrentMap)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.net.http", "HttpResponse$PushPromiseHandler", True, "of", "(Function,ConcurrentMap)", "", "Argument[1].Element", "ReturnValue", "taint", "df-generated"] + - ["java.net.http", "HttpTimeoutException", True, "HttpTimeoutException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.net.http", "WebSocketHandshakeException", False, "WebSocketHandshakeException", "(HttpResponse)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.net.http", "WebSocketHandshakeException", False, "getResponse", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["java.net.http", "HttpClient", "authenticator", "()", "summary", "df-generated"] + - ["java.net.http", "HttpClient", "connectTimeout", "()", "summary", "df-generated"] + - ["java.net.http", "HttpClient", "cookieHandler", "()", "summary", "df-generated"] + - ["java.net.http", "HttpClient", "executor", "()", "summary", "df-generated"] + - ["java.net.http", "HttpClient", "followRedirects", "()", "summary", "df-generated"] + - ["java.net.http", "HttpClient", "newBuilder", "()", "summary", "df-generated"] + - ["java.net.http", "HttpClient", "newHttpClient", "()", "summary", "df-generated"] + - ["java.net.http", "HttpClient", "newWebSocketBuilder", "()", "summary", "df-generated"] + - ["java.net.http", "HttpClient", "proxy", "()", "summary", "df-generated"] + - ["java.net.http", "HttpClient", "send", "(HttpRequest,HttpResponse$BodyHandler)", "summary", "df-generated"] + - ["java.net.http", "HttpClient", "sendAsync", "(HttpRequest,HttpResponse$BodyHandler)", "summary", "df-generated"] + - ["java.net.http", "HttpClient", "sendAsync", "(HttpRequest,HttpResponse$BodyHandler,HttpResponse$PushPromiseHandler)", "summary", "df-generated"] + - ["java.net.http", "HttpClient", "sslContext", "()", "summary", "df-generated"] + - ["java.net.http", "HttpClient", "sslParameters", "()", "summary", "df-generated"] + - ["java.net.http", "HttpClient", "version", "()", "summary", "df-generated"] + - ["java.net.http", "HttpHeaders", "firstValueAsLong", "(String)", "summary", "df-generated"] + - ["java.net.http", "HttpHeaders", "of", "(Map,BiPredicate)", "summary", "df-generated"] + - ["java.net.http", "HttpRequest$BodyPublishers", "noBody", "()", "summary", "df-generated"] + - ["java.net.http", "HttpRequest", "bodyPublisher", "()", "summary", "df-generated"] + - ["java.net.http", "HttpRequest", "expectContinue", "()", "summary", "df-generated"] + - ["java.net.http", "HttpRequest", "headers", "()", "summary", "df-generated"] + - ["java.net.http", "HttpRequest", "method", "()", "summary", "df-generated"] + - ["java.net.http", "HttpRequest", "newBuilder", "()", "summary", "df-generated"] + - ["java.net.http", "HttpRequest", "timeout", "()", "summary", "df-generated"] + - ["java.net.http", "HttpRequest", "uri", "()", "summary", "df-generated"] + - ["java.net.http", "HttpRequest", "version", "()", "summary", "df-generated"] + - ["java.net.http", "HttpResponse$BodyHandlers", "buffering", "(HttpResponse$BodyHandler,int)", "summary", "df-generated"] + - ["java.net.http", "HttpResponse$BodyHandlers", "discarding", "()", "summary", "df-generated"] + - ["java.net.http", "HttpResponse$BodyHandlers", "fromLineSubscriber", "(Flow$Subscriber)", "summary", "df-generated"] + - ["java.net.http", "HttpResponse$BodyHandlers", "fromLineSubscriber", "(Flow$Subscriber,Function,String)", "summary", "df-generated"] + - ["java.net.http", "HttpResponse$BodyHandlers", "fromSubscriber", "(Flow$Subscriber)", "summary", "df-generated"] + - ["java.net.http", "HttpResponse$BodyHandlers", "fromSubscriber", "(Flow$Subscriber,Function)", "summary", "df-generated"] + - ["java.net.http", "HttpResponse$BodyHandlers", "ofByteArray", "()", "summary", "df-generated"] + - ["java.net.http", "HttpResponse$BodyHandlers", "ofByteArrayConsumer", "(Consumer)", "summary", "df-generated"] + - ["java.net.http", "HttpResponse$BodyHandlers", "ofInputStream", "()", "summary", "df-generated"] + - ["java.net.http", "HttpResponse$BodyHandlers", "ofLines", "()", "summary", "df-generated"] + - ["java.net.http", "HttpResponse$BodyHandlers", "ofPublisher", "()", "summary", "df-generated"] + - ["java.net.http", "HttpResponse$BodyHandlers", "ofString", "()", "summary", "df-generated"] + - ["java.net.http", "HttpResponse$BodyHandlers", "ofString", "(Charset)", "summary", "df-generated"] + - ["java.net.http", "HttpResponse$BodyHandlers", "replacing", "(Object)", "summary", "df-generated"] + - ["java.net.http", "HttpResponse$BodySubscribers", "discarding", "()", "summary", "df-generated"] + - ["java.net.http", "HttpResponse$BodySubscribers", "ofByteArray", "()", "summary", "df-generated"] + - ["java.net.http", "HttpResponse$BodySubscribers", "ofInputStream", "()", "summary", "df-generated"] + - ["java.net.http", "HttpResponse$BodySubscribers", "ofLines", "(Charset)", "summary", "df-generated"] + - ["java.net.http", "HttpResponse$BodySubscribers", "ofPublisher", "()", "summary", "df-generated"] + - ["java.net.http", "HttpResponse$BodySubscribers", "ofString", "(Charset)", "summary", "df-generated"] + - ["java.net.http", "WebSocket$Listener", "onBinary", "(WebSocket,ByteBuffer,boolean)", "summary", "df-generated"] + - ["java.net.http", "WebSocket$Listener", "onClose", "(WebSocket,int,String)", "summary", "df-generated"] + - ["java.net.http", "WebSocket$Listener", "onError", "(WebSocket,Throwable)", "summary", "df-generated"] + - ["java.net.http", "WebSocket$Listener", "onOpen", "(WebSocket)", "summary", "df-generated"] + - ["java.net.http", "WebSocket$Listener", "onPing", "(WebSocket,ByteBuffer)", "summary", "df-generated"] + - ["java.net.http", "WebSocket$Listener", "onPong", "(WebSocket,ByteBuffer)", "summary", "df-generated"] + - ["java.net.http", "WebSocket$Listener", "onText", "(WebSocket,CharSequence,boolean)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/java.net.model.yml b/java/ql/lib/ext/generated/java.net.model.yml new file mode 100644 index 00000000000..6f0a35897f2 --- /dev/null +++ b/java/ql/lib/ext/generated/java.net.model.yml @@ -0,0 +1,476 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["java.net", "Authenticator", True, "requestPasswordAuthentication", "(Authenticator,String,InetAddress,int,String,String,String,URL,Authenticator$RequestorType)", "", "Argument[1]", "Argument[0]", "taint", "df-generated"] + - ["java.net", "Authenticator", True, "requestPasswordAuthentication", "(Authenticator,String,InetAddress,int,String,String,String,URL,Authenticator$RequestorType)", "", "Argument[2]", "Argument[0]", "taint", "df-generated"] + - ["java.net", "Authenticator", True, "requestPasswordAuthentication", "(Authenticator,String,InetAddress,int,String,String,String,URL,Authenticator$RequestorType)", "", "Argument[4]", "Argument[0]", "taint", "df-generated"] + - ["java.net", "Authenticator", True, "requestPasswordAuthentication", "(Authenticator,String,InetAddress,int,String,String,String,URL,Authenticator$RequestorType)", "", "Argument[5]", "Argument[0]", "taint", "df-generated"] + - ["java.net", "Authenticator", True, "requestPasswordAuthentication", "(Authenticator,String,InetAddress,int,String,String,String,URL,Authenticator$RequestorType)", "", "Argument[6]", "Argument[0]", "taint", "df-generated"] + - ["java.net", "Authenticator", True, "requestPasswordAuthentication", "(Authenticator,String,InetAddress,int,String,String,String,URL,Authenticator$RequestorType)", "", "Argument[7]", "Argument[0]", "taint", "df-generated"] + - ["java.net", "Authenticator", True, "requestPasswordAuthenticationInstance", "(String,InetAddress,int,String,String,String,URL,Authenticator$RequestorType)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "Authenticator", True, "requestPasswordAuthenticationInstance", "(String,InetAddress,int,String,String,String,URL,Authenticator$RequestorType)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "Authenticator", True, "requestPasswordAuthenticationInstance", "(String,InetAddress,int,String,String,String,URL,Authenticator$RequestorType)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "Authenticator", True, "requestPasswordAuthenticationInstance", "(String,InetAddress,int,String,String,String,URL,Authenticator$RequestorType)", "", "Argument[4]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "Authenticator", True, "requestPasswordAuthenticationInstance", "(String,InetAddress,int,String,String,String,URL,Authenticator$RequestorType)", "", "Argument[5]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "Authenticator", True, "requestPasswordAuthenticationInstance", "(String,InetAddress,int,String,String,String,URL,Authenticator$RequestorType)", "", "Argument[6]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "BindException", True, "BindException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "ConnectException", True, "ConnectException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "ContentHandler", True, "getContent", "(URLConnection)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "ContentHandler", True, "getContent", "(URLConnection,Class[])", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "CookieManager", True, "CookieManager", "(CookieStore,CookiePolicy)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "CookieManager", True, "CookieManager", "(CookieStore,CookiePolicy)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "CookieManager", True, "getCookieStore", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "CookieManager", True, "setCookiePolicy", "(CookiePolicy)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "CookieStore", True, "add", "(URI,HttpCookie)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "CookieStore", True, "add", "(URI,HttpCookie)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "CookieStore", True, "get", "(URI)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "CookieStore", True, "getCookies", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "CookieStore", True, "getURIs", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "DatagramPacket", False, "DatagramPacket", "(byte[],int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "DatagramPacket", False, "DatagramPacket", "(byte[],int,InetAddress,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "DatagramPacket", False, "DatagramPacket", "(byte[],int,InetAddress,int)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "DatagramPacket", False, "DatagramPacket", "(byte[],int,SocketAddress)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "DatagramPacket", False, "DatagramPacket", "(byte[],int,SocketAddress)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "DatagramPacket", False, "DatagramPacket", "(byte[],int,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "DatagramPacket", False, "DatagramPacket", "(byte[],int,int,InetAddress,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "DatagramPacket", False, "DatagramPacket", "(byte[],int,int,InetAddress,int)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "DatagramPacket", False, "DatagramPacket", "(byte[],int,int,SocketAddress)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "DatagramPacket", False, "DatagramPacket", "(byte[],int,int,SocketAddress)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "DatagramPacket", False, "getAddress", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "DatagramPacket", False, "getData", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "DatagramPacket", False, "getSocketAddress", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "DatagramPacket", False, "setAddress", "(InetAddress)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "DatagramPacket", False, "setData", "(byte[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "DatagramPacket", False, "setData", "(byte[],int,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "DatagramPacket", False, "setSocketAddress", "(SocketAddress)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "DatagramSocket", True, "connect", "(InetAddress,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "DatagramSocket", True, "connect", "(SocketAddress)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "DatagramSocket", True, "getInetAddress", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "DatagramSocket", True, "getRemoteSocketAddress", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "DatagramSocket", True, "send", "(DatagramPacket)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] + - ["java.net", "DatagramSocket", True, "setOption", "(SocketOption,Object)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.net", "DatagramSocket", True, "supportedOptions", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "HttpCookie", False, "HttpCookie", "(String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "HttpCookie", False, "getComment", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "HttpCookie", False, "getCommentURL", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "HttpCookie", False, "getDomain", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "HttpCookie", False, "getName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "HttpCookie", False, "getPath", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "HttpCookie", False, "getPortlist", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "HttpCookie", False, "getValue", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "HttpCookie", False, "parse", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "HttpCookie", False, "setComment", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "HttpCookie", False, "setCommentURL", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "HttpCookie", False, "setDomain", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "HttpCookie", False, "setPath", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "HttpCookie", False, "setPortlist", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "HttpCookie", False, "setValue", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "HttpRetryException", True, "HttpRetryException", "(String,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "HttpRetryException", True, "HttpRetryException", "(String,int,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "HttpRetryException", True, "HttpRetryException", "(String,int,String)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "HttpRetryException", True, "getLocation", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "HttpRetryException", True, "getReason", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "HttpURLConnection", True, "getRequestMethod", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "HttpURLConnection", True, "getResponseMessage", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "HttpURLConnection", True, "setRequestMethod", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "Inet6Address", False, "getByAddress", "(String,byte[],NetworkInterface)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "Inet6Address", False, "getByAddress", "(String,byte[],NetworkInterface)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "Inet6Address", False, "getByAddress", "(String,byte[],NetworkInterface)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "Inet6Address", False, "getByAddress", "(String,byte[],int)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "Inet6Address", False, "getByAddress", "(String,byte[],int)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "Inet6Address", False, "getScopedInterface", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "InetAddress", True, "getAddress", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "InetAddress", True, "getByAddress", "(String,byte[])", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "InetAddress", True, "getByAddress", "(String,byte[])", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "InetAddress", True, "getCanonicalHostName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "InetAddress", True, "getHostName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "InetSocketAddress", True, "InetSocketAddress", "(InetAddress,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "InetSocketAddress", True, "getAddress", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "InetSocketAddress", True, "getHostName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "InetSocketAddress", True, "getHostString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "InterfaceAddress", True, "getAddress", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "InterfaceAddress", True, "getBroadcast", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "JarURLConnection", True, "getAttributes", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "JarURLConnection", True, "getCertificates", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "JarURLConnection", True, "getEntryName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "JarURLConnection", True, "getJarEntry", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "JarURLConnection", True, "getJarFileURL", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "JarURLConnection", True, "getManifest", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "MalformedURLException", True, "MalformedURLException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "MulticastSocket", True, "getInterface", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "MulticastSocket", True, "send", "(DatagramPacket,byte)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] + - ["java.net", "MulticastSocket", True, "setInterface", "(InetAddress)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "NetPermission", False, "NetPermission", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "NetPermission", False, "NetPermission", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "NetworkInterface", False, "getDisplayName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "NetworkInterface", False, "getInterfaceAddresses", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "NetworkInterface", False, "getName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "NetworkInterface", False, "getParent", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "NetworkInterface", False, "subInterfaces", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "NoRouteToHostException", True, "NoRouteToHostException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "PasswordAuthentication", False, "PasswordAuthentication", "(String,char[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "PasswordAuthentication", False, "PasswordAuthentication", "(String,char[])", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "PasswordAuthentication", False, "getPassword", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "PasswordAuthentication", False, "getUserName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "PortUnreachableException", True, "PortUnreachableException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "ProtocolException", True, "ProtocolException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "Proxy", True, "Proxy", "(Proxy$Type,SocketAddress)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "Proxy", True, "address", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "ProxySelector", True, "select", "(URI)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "ServerSocket", True, "ServerSocket", "(int,int,InetAddress)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "ServerSocket", True, "bind", "(SocketAddress,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "ServerSocket", True, "getInetAddress", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "ServerSocket", True, "getLocalSocketAddress", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "ServerSocket", True, "setOption", "(SocketOption,Object)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.net", "ServerSocket", True, "supportedOptions", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "Socket", True, "Socket", "(InetAddress,int,InetAddress,int)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "Socket", True, "Socket", "(String,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "Socket", True, "Socket", "(String,int,InetAddress,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "Socket", True, "Socket", "(String,int,InetAddress,int)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "Socket", True, "Socket", "(String,int,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "Socket", True, "bind", "(SocketAddress)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "Socket", True, "getInetAddress", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "Socket", True, "getInputStream", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "Socket", True, "getRemoteSocketAddress", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "Socket", True, "setOption", "(SocketOption,Object)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.net", "Socket", True, "supportedOptions", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "SocketException", True, "SocketException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "SocketOptions", True, "setOption", "(int,Object)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "SocketPermission", False, "SocketPermission", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "SocketTimeoutException", True, "SocketTimeoutException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "URI", False, "getAuthority", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "URI", False, "getFragment", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "URI", False, "getHost", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "URI", False, "getPath", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "URI", False, "getQuery", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "URI", False, "getRawAuthority", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "URI", False, "getRawFragment", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "URI", False, "getRawPath", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "URI", False, "getRawQuery", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "URI", False, "getRawSchemeSpecificPart", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "URI", False, "getRawUserInfo", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "URI", False, "getScheme", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "URI", False, "getSchemeSpecificPart", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "URI", False, "getUserInfo", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "URI", False, "normalize", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "URI", False, "parseServerAuthority", "()", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.net", "URI", False, "relativize", "(URI)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "URISyntaxException", True, "URISyntaxException", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "URISyntaxException", True, "URISyntaxException", "(String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "URISyntaxException", True, "URISyntaxException", "(String,String,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "URISyntaxException", True, "URISyntaxException", "(String,String,int)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "URISyntaxException", True, "getInput", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "URISyntaxException", True, "getReason", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "URL", False, "URL", "(String,String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "URL", False, "URL", "(String,String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "URL", False, "URL", "(String,String,String)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "URL", False, "URL", "(String,String,int,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "URL", False, "URL", "(String,String,int,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "URL", False, "URL", "(String,String,int,String)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "URL", False, "URL", "(String,String,int,String,URLStreamHandler)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "URL", False, "URL", "(String,String,int,String,URLStreamHandler)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "URL", False, "URL", "(String,String,int,String,URLStreamHandler)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "URL", False, "URL", "(String,String,int,String,URLStreamHandler)", "", "Argument[4]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "URL", False, "URL", "(URL,String,URLStreamHandler)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "URL", False, "URL", "(URL,String,URLStreamHandler)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "URL", False, "URL", "(URL,String,URLStreamHandler)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "URL", False, "getAuthority", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "URL", False, "getContent", "(Class[])", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "URL", False, "getHost", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "URL", False, "getProtocol", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "URL", False, "getRef", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "URL", False, "getUserInfo", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "URL", False, "openConnection", "(Proxy)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "URL", False, "openConnection", "(Proxy)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "URLClassLoader", True, "URLClassLoader", "(String,URL[],ClassLoader)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "URLClassLoader", True, "URLClassLoader", "(String,URL[],ClassLoader)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "URLClassLoader", True, "URLClassLoader", "(String,URL[],ClassLoader,URLStreamHandlerFactory)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "URLClassLoader", True, "URLClassLoader", "(String,URL[],ClassLoader,URLStreamHandlerFactory)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "URLClassLoader", True, "URLClassLoader", "(URL[],ClassLoader)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "URLClassLoader", True, "URLClassLoader", "(URL[],ClassLoader,URLStreamHandlerFactory)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "URLClassLoader", True, "getURLs", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "URLClassLoader", True, "newInstance", "(URL[],ClassLoader)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "URLConnection", True, "getContent", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "URLConnection", True, "getContent", "(Class[])", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "URLConnection", True, "getContentEncoding", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "URLConnection", True, "getContentType", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "URLConnection", True, "getPermission", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "URLConnection", True, "getRequestProperties", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "URLConnection", True, "getRequestProperty", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "URLConnection", True, "getURL", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "URLEncoder", True, "encode", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "URLEncoder", True, "encode", "(String,Charset)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "URLEncoder", True, "encode", "(String,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "URLPermission", False, "URLPermission", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "URLPermission", False, "URLPermission", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "UnixDomainSocketAddress", False, "getPath", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "UnixDomainSocketAddress", False, "of", "(Path)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["java.net", "UnixDomainSocketAddress", False, "of", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "UnknownHostException", True, "UnknownHostException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "UnknownServiceException", True, "UnknownServiceException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["java.net", "Authenticator", "getDefault", "()", "summary", "df-generated"] + - ["java.net", "Authenticator", "requestPasswordAuthentication", "(InetAddress,int,String,String,String)", "summary", "df-generated"] + - ["java.net", "Authenticator", "requestPasswordAuthentication", "(String,InetAddress,int,String,String,String)", "summary", "df-generated"] + - ["java.net", "Authenticator", "requestPasswordAuthentication", "(String,InetAddress,int,String,String,String,URL,Authenticator$RequestorType)", "summary", "df-generated"] + - ["java.net", "Authenticator", "setDefault", "(Authenticator)", "summary", "df-generated"] + - ["java.net", "CacheRequest", "abort", "()", "summary", "df-generated"] + - ["java.net", "CacheRequest", "getBody", "()", "summary", "df-generated"] + - ["java.net", "CacheResponse", "getBody", "()", "summary", "df-generated"] + - ["java.net", "CacheResponse", "getHeaders", "()", "summary", "df-generated"] + - ["java.net", "CookieHandler", "get", "(URI,Map)", "summary", "df-generated"] + - ["java.net", "CookieHandler", "getDefault", "()", "summary", "df-generated"] + - ["java.net", "CookieHandler", "put", "(URI,Map)", "summary", "df-generated"] + - ["java.net", "CookieHandler", "setDefault", "(CookieHandler)", "summary", "df-generated"] + - ["java.net", "CookiePolicy", "shouldAccept", "(URI,HttpCookie)", "summary", "df-generated"] + - ["java.net", "CookieStore", "remove", "(URI,HttpCookie)", "summary", "df-generated"] + - ["java.net", "CookieStore", "removeAll", "()", "summary", "df-generated"] + - ["java.net", "DatagramPacket", "getLength", "()", "summary", "df-generated"] + - ["java.net", "DatagramPacket", "getOffset", "()", "summary", "df-generated"] + - ["java.net", "DatagramPacket", "getPort", "()", "summary", "df-generated"] + - ["java.net", "DatagramPacket", "setLength", "(int)", "summary", "df-generated"] + - ["java.net", "DatagramPacket", "setPort", "(int)", "summary", "df-generated"] + - ["java.net", "DatagramSocket", "DatagramSocket", "(SocketAddress)", "summary", "df-generated"] + - ["java.net", "DatagramSocket", "DatagramSocket", "(int)", "summary", "df-generated"] + - ["java.net", "DatagramSocket", "DatagramSocket", "(int,InetAddress)", "summary", "df-generated"] + - ["java.net", "DatagramSocket", "bind", "(SocketAddress)", "summary", "df-generated"] + - ["java.net", "DatagramSocket", "disconnect", "()", "summary", "df-generated"] + - ["java.net", "DatagramSocket", "getBroadcast", "()", "summary", "df-generated"] + - ["java.net", "DatagramSocket", "getChannel", "()", "summary", "df-generated"] + - ["java.net", "DatagramSocket", "getLocalAddress", "()", "summary", "df-generated"] + - ["java.net", "DatagramSocket", "getLocalPort", "()", "summary", "df-generated"] + - ["java.net", "DatagramSocket", "getLocalSocketAddress", "()", "summary", "df-generated"] + - ["java.net", "DatagramSocket", "getOption", "(SocketOption)", "summary", "df-generated"] + - ["java.net", "DatagramSocket", "getPort", "()", "summary", "df-generated"] + - ["java.net", "DatagramSocket", "getReceiveBufferSize", "()", "summary", "df-generated"] + - ["java.net", "DatagramSocket", "getReuseAddress", "()", "summary", "df-generated"] + - ["java.net", "DatagramSocket", "getSendBufferSize", "()", "summary", "df-generated"] + - ["java.net", "DatagramSocket", "getSoTimeout", "()", "summary", "df-generated"] + - ["java.net", "DatagramSocket", "getTrafficClass", "()", "summary", "df-generated"] + - ["java.net", "DatagramSocket", "isBound", "()", "summary", "df-generated"] + - ["java.net", "DatagramSocket", "isClosed", "()", "summary", "df-generated"] + - ["java.net", "DatagramSocket", "isConnected", "()", "summary", "df-generated"] + - ["java.net", "DatagramSocket", "joinGroup", "(SocketAddress,NetworkInterface)", "summary", "df-generated"] + - ["java.net", "DatagramSocket", "leaveGroup", "(SocketAddress,NetworkInterface)", "summary", "df-generated"] + - ["java.net", "DatagramSocket", "receive", "(DatagramPacket)", "summary", "df-generated"] + - ["java.net", "DatagramSocket", "setBroadcast", "(boolean)", "summary", "df-generated"] + - ["java.net", "DatagramSocket", "setDatagramSocketImplFactory", "(DatagramSocketImplFactory)", "summary", "df-generated"] + - ["java.net", "DatagramSocket", "setReceiveBufferSize", "(int)", "summary", "df-generated"] + - ["java.net", "DatagramSocket", "setReuseAddress", "(boolean)", "summary", "df-generated"] + - ["java.net", "DatagramSocket", "setSendBufferSize", "(int)", "summary", "df-generated"] + - ["java.net", "DatagramSocket", "setSoTimeout", "(int)", "summary", "df-generated"] + - ["java.net", "DatagramSocket", "setTrafficClass", "(int)", "summary", "df-generated"] + - ["java.net", "FileNameMap", "getContentTypeFor", "(String)", "summary", "df-generated"] + - ["java.net", "HttpCookie", "domainMatches", "(String,String)", "summary", "df-generated"] + - ["java.net", "HttpCookie", "getDiscard", "()", "summary", "df-generated"] + - ["java.net", "HttpCookie", "getMaxAge", "()", "summary", "df-generated"] + - ["java.net", "HttpCookie", "getSecure", "()", "summary", "df-generated"] + - ["java.net", "HttpCookie", "getVersion", "()", "summary", "df-generated"] + - ["java.net", "HttpCookie", "hasExpired", "()", "summary", "df-generated"] + - ["java.net", "HttpCookie", "isHttpOnly", "()", "summary", "df-generated"] + - ["java.net", "HttpCookie", "setDiscard", "(boolean)", "summary", "df-generated"] + - ["java.net", "HttpCookie", "setHttpOnly", "(boolean)", "summary", "df-generated"] + - ["java.net", "HttpCookie", "setMaxAge", "(long)", "summary", "df-generated"] + - ["java.net", "HttpCookie", "setSecure", "(boolean)", "summary", "df-generated"] + - ["java.net", "HttpCookie", "setVersion", "(int)", "summary", "df-generated"] + - ["java.net", "HttpRetryException", "responseCode", "()", "summary", "df-generated"] + - ["java.net", "HttpURLConnection", "disconnect", "()", "summary", "df-generated"] + - ["java.net", "HttpURLConnection", "getErrorStream", "()", "summary", "df-generated"] + - ["java.net", "HttpURLConnection", "getFollowRedirects", "()", "summary", "df-generated"] + - ["java.net", "HttpURLConnection", "getInstanceFollowRedirects", "()", "summary", "df-generated"] + - ["java.net", "HttpURLConnection", "getResponseCode", "()", "summary", "df-generated"] + - ["java.net", "HttpURLConnection", "setAuthenticator", "(Authenticator)", "summary", "df-generated"] + - ["java.net", "HttpURLConnection", "setChunkedStreamingMode", "(int)", "summary", "df-generated"] + - ["java.net", "HttpURLConnection", "setFixedLengthStreamingMode", "(int)", "summary", "df-generated"] + - ["java.net", "HttpURLConnection", "setFixedLengthStreamingMode", "(long)", "summary", "df-generated"] + - ["java.net", "HttpURLConnection", "setFollowRedirects", "(boolean)", "summary", "df-generated"] + - ["java.net", "HttpURLConnection", "setInstanceFollowRedirects", "(boolean)", "summary", "df-generated"] + - ["java.net", "HttpURLConnection", "usingProxy", "()", "summary", "df-generated"] + - ["java.net", "IDN", "toASCII", "(String)", "summary", "df-generated"] + - ["java.net", "IDN", "toASCII", "(String,int)", "summary", "df-generated"] + - ["java.net", "IDN", "toUnicode", "(String)", "summary", "df-generated"] + - ["java.net", "IDN", "toUnicode", "(String,int)", "summary", "df-generated"] + - ["java.net", "Inet6Address", "getScopeId", "()", "summary", "df-generated"] + - ["java.net", "Inet6Address", "isIPv4CompatibleAddress", "()", "summary", "df-generated"] + - ["java.net", "InetAddress", "getHostAddress", "()", "summary", "df-generated"] + - ["java.net", "InetAddress", "getLocalHost", "()", "summary", "df-generated"] + - ["java.net", "InetAddress", "getLoopbackAddress", "()", "summary", "df-generated"] + - ["java.net", "InetAddress", "isAnyLocalAddress", "()", "summary", "df-generated"] + - ["java.net", "InetAddress", "isLinkLocalAddress", "()", "summary", "df-generated"] + - ["java.net", "InetAddress", "isLoopbackAddress", "()", "summary", "df-generated"] + - ["java.net", "InetAddress", "isMCGlobal", "()", "summary", "df-generated"] + - ["java.net", "InetAddress", "isMCLinkLocal", "()", "summary", "df-generated"] + - ["java.net", "InetAddress", "isMCNodeLocal", "()", "summary", "df-generated"] + - ["java.net", "InetAddress", "isMCOrgLocal", "()", "summary", "df-generated"] + - ["java.net", "InetAddress", "isMCSiteLocal", "()", "summary", "df-generated"] + - ["java.net", "InetAddress", "isMulticastAddress", "()", "summary", "df-generated"] + - ["java.net", "InetAddress", "isReachable", "(NetworkInterface,int,int)", "summary", "df-generated"] + - ["java.net", "InetAddress", "isReachable", "(int)", "summary", "df-generated"] + - ["java.net", "InetAddress", "isSiteLocalAddress", "()", "summary", "df-generated"] + - ["java.net", "InetSocketAddress", "InetSocketAddress", "(int)", "summary", "df-generated"] + - ["java.net", "InetSocketAddress", "getPort", "()", "summary", "df-generated"] + - ["java.net", "InetSocketAddress", "isUnresolved", "()", "summary", "df-generated"] + - ["java.net", "InterfaceAddress", "getNetworkPrefixLength", "()", "summary", "df-generated"] + - ["java.net", "JarURLConnection", "getJarFile", "()", "summary", "df-generated"] + - ["java.net", "JarURLConnection", "getMainAttributes", "()", "summary", "df-generated"] + - ["java.net", "MulticastSocket", "MulticastSocket", "(SocketAddress)", "summary", "df-generated"] + - ["java.net", "MulticastSocket", "MulticastSocket", "(int)", "summary", "df-generated"] + - ["java.net", "MulticastSocket", "getLoopbackMode", "()", "summary", "df-generated"] + - ["java.net", "MulticastSocket", "getNetworkInterface", "()", "summary", "df-generated"] + - ["java.net", "MulticastSocket", "getTTL", "()", "summary", "df-generated"] + - ["java.net", "MulticastSocket", "getTimeToLive", "()", "summary", "df-generated"] + - ["java.net", "MulticastSocket", "joinGroup", "(InetAddress)", "summary", "df-generated"] + - ["java.net", "MulticastSocket", "leaveGroup", "(InetAddress)", "summary", "df-generated"] + - ["java.net", "MulticastSocket", "setLoopbackMode", "(boolean)", "summary", "df-generated"] + - ["java.net", "MulticastSocket", "setNetworkInterface", "(NetworkInterface)", "summary", "df-generated"] + - ["java.net", "MulticastSocket", "setTTL", "(byte)", "summary", "df-generated"] + - ["java.net", "MulticastSocket", "setTimeToLive", "(int)", "summary", "df-generated"] + - ["java.net", "NetworkInterface", "getByIndex", "(int)", "summary", "df-generated"] + - ["java.net", "NetworkInterface", "getByInetAddress", "(InetAddress)", "summary", "df-generated"] + - ["java.net", "NetworkInterface", "getByName", "(String)", "summary", "df-generated"] + - ["java.net", "NetworkInterface", "getHardwareAddress", "()", "summary", "df-generated"] + - ["java.net", "NetworkInterface", "getIndex", "()", "summary", "df-generated"] + - ["java.net", "NetworkInterface", "getInetAddresses", "()", "summary", "df-generated"] + - ["java.net", "NetworkInterface", "getMTU", "()", "summary", "df-generated"] + - ["java.net", "NetworkInterface", "getNetworkInterfaces", "()", "summary", "df-generated"] + - ["java.net", "NetworkInterface", "getSubInterfaces", "()", "summary", "df-generated"] + - ["java.net", "NetworkInterface", "inetAddresses", "()", "summary", "df-generated"] + - ["java.net", "NetworkInterface", "isLoopback", "()", "summary", "df-generated"] + - ["java.net", "NetworkInterface", "isPointToPoint", "()", "summary", "df-generated"] + - ["java.net", "NetworkInterface", "isUp", "()", "summary", "df-generated"] + - ["java.net", "NetworkInterface", "isVirtual", "()", "summary", "df-generated"] + - ["java.net", "NetworkInterface", "networkInterfaces", "()", "summary", "df-generated"] + - ["java.net", "NetworkInterface", "supportsMulticast", "()", "summary", "df-generated"] + - ["java.net", "Proxy", "type", "()", "summary", "df-generated"] + - ["java.net", "ProxySelector", "connectFailed", "(URI,SocketAddress,IOException)", "summary", "df-generated"] + - ["java.net", "ProxySelector", "getDefault", "()", "summary", "df-generated"] + - ["java.net", "ProxySelector", "of", "(InetSocketAddress)", "summary", "df-generated"] + - ["java.net", "ProxySelector", "setDefault", "(ProxySelector)", "summary", "df-generated"] + - ["java.net", "ResponseCache", "get", "(URI,String,Map)", "summary", "df-generated"] + - ["java.net", "ResponseCache", "getDefault", "()", "summary", "df-generated"] + - ["java.net", "ResponseCache", "put", "(URI,URLConnection)", "summary", "df-generated"] + - ["java.net", "ResponseCache", "setDefault", "(ResponseCache)", "summary", "df-generated"] + - ["java.net", "SecureCacheResponse", "getCipherSuite", "()", "summary", "df-generated"] + - ["java.net", "SecureCacheResponse", "getLocalCertificateChain", "()", "summary", "df-generated"] + - ["java.net", "SecureCacheResponse", "getLocalPrincipal", "()", "summary", "df-generated"] + - ["java.net", "SecureCacheResponse", "getPeerPrincipal", "()", "summary", "df-generated"] + - ["java.net", "SecureCacheResponse", "getSSLSession", "()", "summary", "df-generated"] + - ["java.net", "SecureCacheResponse", "getServerCertificateChain", "()", "summary", "df-generated"] + - ["java.net", "ServerSocket", "ServerSocket", "(int)", "summary", "df-generated"] + - ["java.net", "ServerSocket", "ServerSocket", "(int,int)", "summary", "df-generated"] + - ["java.net", "ServerSocket", "accept", "()", "summary", "df-generated"] + - ["java.net", "ServerSocket", "bind", "(SocketAddress)", "summary", "df-generated"] + - ["java.net", "ServerSocket", "getChannel", "()", "summary", "df-generated"] + - ["java.net", "ServerSocket", "getLocalPort", "()", "summary", "df-generated"] + - ["java.net", "ServerSocket", "getOption", "(SocketOption)", "summary", "df-generated"] + - ["java.net", "ServerSocket", "getReceiveBufferSize", "()", "summary", "df-generated"] + - ["java.net", "ServerSocket", "getReuseAddress", "()", "summary", "df-generated"] + - ["java.net", "ServerSocket", "getSoTimeout", "()", "summary", "df-generated"] + - ["java.net", "ServerSocket", "isBound", "()", "summary", "df-generated"] + - ["java.net", "ServerSocket", "isClosed", "()", "summary", "df-generated"] + - ["java.net", "ServerSocket", "setPerformancePreferences", "(int,int,int)", "summary", "df-generated"] + - ["java.net", "ServerSocket", "setReceiveBufferSize", "(int)", "summary", "df-generated"] + - ["java.net", "ServerSocket", "setReuseAddress", "(boolean)", "summary", "df-generated"] + - ["java.net", "ServerSocket", "setSoTimeout", "(int)", "summary", "df-generated"] + - ["java.net", "ServerSocket", "setSocketFactory", "(SocketImplFactory)", "summary", "df-generated"] + - ["java.net", "Socket", "Socket", "(InetAddress,int)", "summary", "df-generated"] + - ["java.net", "Socket", "Socket", "(InetAddress,int,boolean)", "summary", "df-generated"] + - ["java.net", "Socket", "Socket", "(Proxy)", "summary", "df-generated"] + - ["java.net", "Socket", "getChannel", "()", "summary", "df-generated"] + - ["java.net", "Socket", "getKeepAlive", "()", "summary", "df-generated"] + - ["java.net", "Socket", "getLocalAddress", "()", "summary", "df-generated"] + - ["java.net", "Socket", "getLocalPort", "()", "summary", "df-generated"] + - ["java.net", "Socket", "getLocalSocketAddress", "()", "summary", "df-generated"] + - ["java.net", "Socket", "getOOBInline", "()", "summary", "df-generated"] + - ["java.net", "Socket", "getOption", "(SocketOption)", "summary", "df-generated"] + - ["java.net", "Socket", "getPort", "()", "summary", "df-generated"] + - ["java.net", "Socket", "getReceiveBufferSize", "()", "summary", "df-generated"] + - ["java.net", "Socket", "getReuseAddress", "()", "summary", "df-generated"] + - ["java.net", "Socket", "getSendBufferSize", "()", "summary", "df-generated"] + - ["java.net", "Socket", "getSoLinger", "()", "summary", "df-generated"] + - ["java.net", "Socket", "getSoTimeout", "()", "summary", "df-generated"] + - ["java.net", "Socket", "getTcpNoDelay", "()", "summary", "df-generated"] + - ["java.net", "Socket", "getTrafficClass", "()", "summary", "df-generated"] + - ["java.net", "Socket", "isBound", "()", "summary", "df-generated"] + - ["java.net", "Socket", "isClosed", "()", "summary", "df-generated"] + - ["java.net", "Socket", "isConnected", "()", "summary", "df-generated"] + - ["java.net", "Socket", "isInputShutdown", "()", "summary", "df-generated"] + - ["java.net", "Socket", "isOutputShutdown", "()", "summary", "df-generated"] + - ["java.net", "Socket", "sendUrgentData", "(int)", "summary", "df-generated"] + - ["java.net", "Socket", "setKeepAlive", "(boolean)", "summary", "df-generated"] + - ["java.net", "Socket", "setOOBInline", "(boolean)", "summary", "df-generated"] + - ["java.net", "Socket", "setPerformancePreferences", "(int,int,int)", "summary", "df-generated"] + - ["java.net", "Socket", "setReceiveBufferSize", "(int)", "summary", "df-generated"] + - ["java.net", "Socket", "setReuseAddress", "(boolean)", "summary", "df-generated"] + - ["java.net", "Socket", "setSendBufferSize", "(int)", "summary", "df-generated"] + - ["java.net", "Socket", "setSoLinger", "(boolean,int)", "summary", "df-generated"] + - ["java.net", "Socket", "setSoTimeout", "(int)", "summary", "df-generated"] + - ["java.net", "Socket", "setSocketImplFactory", "(SocketImplFactory)", "summary", "df-generated"] + - ["java.net", "Socket", "setTcpNoDelay", "(boolean)", "summary", "df-generated"] + - ["java.net", "Socket", "setTrafficClass", "(int)", "summary", "df-generated"] + - ["java.net", "Socket", "shutdownInput", "()", "summary", "df-generated"] + - ["java.net", "Socket", "shutdownOutput", "()", "summary", "df-generated"] + - ["java.net", "SocketOptions", "getOption", "(int)", "summary", "df-generated"] + - ["java.net", "URI", "URI", "(String,String,String)", "summary", "df-generated"] + - ["java.net", "URI", "URI", "(String,String,String,String)", "summary", "df-generated"] + - ["java.net", "URI", "URI", "(String,String,String,String,String)", "summary", "df-generated"] + - ["java.net", "URI", "getPort", "()", "summary", "df-generated"] + - ["java.net", "URI", "isAbsolute", "()", "summary", "df-generated"] + - ["java.net", "URI", "isOpaque", "()", "summary", "df-generated"] + - ["java.net", "URISyntaxException", "getIndex", "()", "summary", "df-generated"] + - ["java.net", "URL", "sameFile", "(URL)", "summary", "df-generated"] + - ["java.net", "URL", "setURLStreamHandlerFactory", "(URLStreamHandlerFactory)", "summary", "df-generated"] + - ["java.net", "URLClassLoader", "URLClassLoader", "(URL[])", "summary", "df-generated"] + - ["java.net", "URLClassLoader", "addURL", "(URL)", "summary", "df-generated"] + - ["java.net", "URLClassLoader", "newInstance", "(URL[])", "summary", "df-generated"] + - ["java.net", "URLConnection", "addRequestProperty", "(String,String)", "summary", "df-generated"] + - ["java.net", "URLConnection", "connect", "()", "summary", "df-generated"] + - ["java.net", "URLConnection", "getAllowUserInteraction", "()", "summary", "df-generated"] + - ["java.net", "URLConnection", "getConnectTimeout", "()", "summary", "df-generated"] + - ["java.net", "URLConnection", "getContentLength", "()", "summary", "df-generated"] + - ["java.net", "URLConnection", "getContentLengthLong", "()", "summary", "df-generated"] + - ["java.net", "URLConnection", "getDate", "()", "summary", "df-generated"] + - ["java.net", "URLConnection", "getDefaultAllowUserInteraction", "()", "summary", "df-generated"] + - ["java.net", "URLConnection", "getDefaultRequestProperty", "(String)", "summary", "df-generated"] + - ["java.net", "URLConnection", "getDefaultUseCaches", "()", "summary", "df-generated"] + - ["java.net", "URLConnection", "getDefaultUseCaches", "(String)", "summary", "df-generated"] + - ["java.net", "URLConnection", "getDoInput", "()", "summary", "df-generated"] + - ["java.net", "URLConnection", "getDoOutput", "()", "summary", "df-generated"] + - ["java.net", "URLConnection", "getExpiration", "()", "summary", "df-generated"] + - ["java.net", "URLConnection", "getFileNameMap", "()", "summary", "df-generated"] + - ["java.net", "URLConnection", "getHeaderField", "(String)", "summary", "df-generated"] + - ["java.net", "URLConnection", "getHeaderField", "(int)", "summary", "df-generated"] + - ["java.net", "URLConnection", "getHeaderFieldDate", "(String,long)", "summary", "df-generated"] + - ["java.net", "URLConnection", "getHeaderFieldInt", "(String,int)", "summary", "df-generated"] + - ["java.net", "URLConnection", "getHeaderFieldKey", "(int)", "summary", "df-generated"] + - ["java.net", "URLConnection", "getHeaderFieldLong", "(String,long)", "summary", "df-generated"] + - ["java.net", "URLConnection", "getHeaderFields", "()", "summary", "df-generated"] + - ["java.net", "URLConnection", "getIfModifiedSince", "()", "summary", "df-generated"] + - ["java.net", "URLConnection", "getInputStream", "()", "summary", "df-generated"] + - ["java.net", "URLConnection", "getLastModified", "()", "summary", "df-generated"] + - ["java.net", "URLConnection", "getOutputStream", "()", "summary", "df-generated"] + - ["java.net", "URLConnection", "getReadTimeout", "()", "summary", "df-generated"] + - ["java.net", "URLConnection", "getUseCaches", "()", "summary", "df-generated"] + - ["java.net", "URLConnection", "guessContentTypeFromName", "(String)", "summary", "df-generated"] + - ["java.net", "URLConnection", "guessContentTypeFromStream", "(InputStream)", "summary", "df-generated"] + - ["java.net", "URLConnection", "setAllowUserInteraction", "(boolean)", "summary", "df-generated"] + - ["java.net", "URLConnection", "setConnectTimeout", "(int)", "summary", "df-generated"] + - ["java.net", "URLConnection", "setContentHandlerFactory", "(ContentHandlerFactory)", "summary", "df-generated"] + - ["java.net", "URLConnection", "setDefaultAllowUserInteraction", "(boolean)", "summary", "df-generated"] + - ["java.net", "URLConnection", "setDefaultRequestProperty", "(String,String)", "summary", "df-generated"] + - ["java.net", "URLConnection", "setDefaultUseCaches", "(String,boolean)", "summary", "df-generated"] + - ["java.net", "URLConnection", "setDefaultUseCaches", "(boolean)", "summary", "df-generated"] + - ["java.net", "URLConnection", "setDoInput", "(boolean)", "summary", "df-generated"] + - ["java.net", "URLConnection", "setDoOutput", "(boolean)", "summary", "df-generated"] + - ["java.net", "URLConnection", "setFileNameMap", "(FileNameMap)", "summary", "df-generated"] + - ["java.net", "URLConnection", "setIfModifiedSince", "(long)", "summary", "df-generated"] + - ["java.net", "URLConnection", "setReadTimeout", "(int)", "summary", "df-generated"] + - ["java.net", "URLConnection", "setRequestProperty", "(String,String)", "summary", "df-generated"] + - ["java.net", "URLConnection", "setUseCaches", "(boolean)", "summary", "df-generated"] + - ["java.net", "URLStreamHandlerFactory", "createURLStreamHandler", "(String)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/java.nio.channels.model.yml b/java/ql/lib/ext/generated/java.nio.channels.model.yml new file mode 100644 index 00000000000..4f682461328 --- /dev/null +++ b/java/ql/lib/ext/generated/java.nio.channels.model.yml @@ -0,0 +1,180 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["java.nio.channels", "AsynchronousByteChannel", True, "read", "(ByteBuffer,Object,CompletionHandler)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.nio.channels", "AsynchronousByteChannel", True, "read", "(ByteBuffer,Object,CompletionHandler)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.nio.channels", "AsynchronousByteChannel", True, "read", "(ByteBuffer,Object,CompletionHandler)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.nio.channels", "AsynchronousByteChannel", True, "write", "(ByteBuffer,Object,CompletionHandler)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.nio.channels", "AsynchronousByteChannel", True, "write", "(ByteBuffer,Object,CompletionHandler)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.nio.channels", "AsynchronousByteChannel", True, "write", "(ByteBuffer,Object,CompletionHandler)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.nio.channels", "AsynchronousChannelGroup", True, "provider", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.channels", "AsynchronousChannelGroup", True, "withCachedThreadPool", "(ExecutorService,int)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.channels", "AsynchronousChannelGroup", True, "withThreadPool", "(ExecutorService)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.channels", "AsynchronousFileChannel", True, "lock", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.channels", "AsynchronousFileChannel", True, "open", "(Path,Set,ExecutorService,FileAttribute[])", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.channels", "AsynchronousFileChannel", True, "tryLock", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.channels", "AsynchronousServerSocketChannel", True, "open", "(AsynchronousChannelGroup)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.channels", "AsynchronousServerSocketChannel", True, "provider", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.channels", "AsynchronousSocketChannel", True, "open", "(AsynchronousChannelGroup)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.channels", "AsynchronousSocketChannel", True, "provider", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.channels", "Channels", False, "newChannel", "(OutputStream)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.channels", "Channels", False, "newInputStream", "(ReadableByteChannel)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.channels", "Channels", False, "newReader", "(ReadableByteChannel,Charset)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.channels", "Channels", False, "newReader", "(ReadableByteChannel,CharsetDecoder,int)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.channels", "Channels", False, "newReader", "(ReadableByteChannel,CharsetDecoder,int)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.channels", "Channels", False, "newReader", "(ReadableByteChannel,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.channels", "Channels", False, "newWriter", "(WritableByteChannel,Charset)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.channels", "Channels", False, "newWriter", "(WritableByteChannel,CharsetEncoder,int)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.channels", "Channels", False, "newWriter", "(WritableByteChannel,CharsetEncoder,int)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.channels", "Channels", False, "newWriter", "(WritableByteChannel,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.channels", "DatagramChannel", True, "open", "(ProtocolFamily)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.channels", "FileChannel", True, "lock", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.channels", "FileChannel", True, "open", "(Path,OpenOption[])", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["java.nio.channels", "FileChannel", True, "open", "(Path,Set,FileAttribute[])", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["java.nio.channels", "FileChannel", True, "tryLock", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.channels", "FileLock", True, "acquiredBy", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.channels", "FileLock", True, "channel", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.channels", "NetworkChannel", True, "bind", "(SocketAddress)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.channels", "SelectableChannel", True, "blockingLock", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.channels", "SelectableChannel", True, "configureBlocking", "(boolean)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio.channels", "SelectableChannel", True, "keyFor", "(Selector)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.channels", "SelectableChannel", True, "provider", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.channels", "SelectableChannel", True, "register", "(Selector,int)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.channels", "SelectableChannel", True, "register", "(Selector,int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.channels", "SelectableChannel", True, "register", "(Selector,int,Object)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.channels", "SelectableChannel", True, "register", "(Selector,int,Object)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.channels", "SelectionKey", True, "attachment", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.channels", "Selector", True, "provider", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.channels", "Selector", True, "select", "(Consumer)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] + - ["java.nio.channels", "ServerSocketChannel", True, "open", "(ProtocolFamily)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.channels", "SocketChannel", True, "open", "(ProtocolFamily)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.channels", "SocketChannel", True, "open", "(SocketAddress)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.channels", "WritableByteChannel", True, "write", "(ByteBuffer)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["java.nio.channels", "AsynchronousByteChannel", "read", "(ByteBuffer)", "summary", "df-generated"] + - ["java.nio.channels", "AsynchronousByteChannel", "write", "(ByteBuffer)", "summary", "df-generated"] + - ["java.nio.channels", "AsynchronousChannelGroup", "awaitTermination", "(long,TimeUnit)", "summary", "df-generated"] + - ["java.nio.channels", "AsynchronousChannelGroup", "isShutdown", "()", "summary", "df-generated"] + - ["java.nio.channels", "AsynchronousChannelGroup", "isTerminated", "()", "summary", "df-generated"] + - ["java.nio.channels", "AsynchronousChannelGroup", "shutdown", "()", "summary", "df-generated"] + - ["java.nio.channels", "AsynchronousChannelGroup", "shutdownNow", "()", "summary", "df-generated"] + - ["java.nio.channels", "AsynchronousChannelGroup", "withFixedThreadPool", "(int,ThreadFactory)", "summary", "df-generated"] + - ["java.nio.channels", "AsynchronousFileChannel", "force", "(boolean)", "summary", "df-generated"] + - ["java.nio.channels", "AsynchronousFileChannel", "lock", "(Object,CompletionHandler)", "summary", "df-generated"] + - ["java.nio.channels", "AsynchronousFileChannel", "lock", "(long,long,boolean)", "summary", "df-generated"] + - ["java.nio.channels", "AsynchronousFileChannel", "lock", "(long,long,boolean,Object,CompletionHandler)", "summary", "df-generated"] + - ["java.nio.channels", "AsynchronousFileChannel", "open", "(Path,OpenOption[])", "summary", "df-generated"] + - ["java.nio.channels", "AsynchronousFileChannel", "read", "(ByteBuffer,long)", "summary", "df-generated"] + - ["java.nio.channels", "AsynchronousFileChannel", "read", "(ByteBuffer,long,Object,CompletionHandler)", "summary", "df-generated"] + - ["java.nio.channels", "AsynchronousFileChannel", "size", "()", "summary", "df-generated"] + - ["java.nio.channels", "AsynchronousFileChannel", "truncate", "(long)", "summary", "df-generated"] + - ["java.nio.channels", "AsynchronousFileChannel", "tryLock", "(long,long,boolean)", "summary", "df-generated"] + - ["java.nio.channels", "AsynchronousFileChannel", "write", "(ByteBuffer,long)", "summary", "df-generated"] + - ["java.nio.channels", "AsynchronousFileChannel", "write", "(ByteBuffer,long,Object,CompletionHandler)", "summary", "df-generated"] + - ["java.nio.channels", "AsynchronousServerSocketChannel", "accept", "()", "summary", "df-generated"] + - ["java.nio.channels", "AsynchronousServerSocketChannel", "accept", "(Object,CompletionHandler)", "summary", "df-generated"] + - ["java.nio.channels", "AsynchronousServerSocketChannel", "bind", "(SocketAddress,int)", "summary", "df-generated"] + - ["java.nio.channels", "AsynchronousServerSocketChannel", "open", "()", "summary", "df-generated"] + - ["java.nio.channels", "AsynchronousSocketChannel", "connect", "(SocketAddress)", "summary", "df-generated"] + - ["java.nio.channels", "AsynchronousSocketChannel", "connect", "(SocketAddress,Object,CompletionHandler)", "summary", "df-generated"] + - ["java.nio.channels", "AsynchronousSocketChannel", "getRemoteAddress", "()", "summary", "df-generated"] + - ["java.nio.channels", "AsynchronousSocketChannel", "open", "()", "summary", "df-generated"] + - ["java.nio.channels", "AsynchronousSocketChannel", "read", "(ByteBuffer,long,TimeUnit,Object,CompletionHandler)", "summary", "df-generated"] + - ["java.nio.channels", "AsynchronousSocketChannel", "read", "(ByteBuffer[],int,int,long,TimeUnit,Object,CompletionHandler)", "summary", "df-generated"] + - ["java.nio.channels", "AsynchronousSocketChannel", "shutdownInput", "()", "summary", "df-generated"] + - ["java.nio.channels", "AsynchronousSocketChannel", "shutdownOutput", "()", "summary", "df-generated"] + - ["java.nio.channels", "AsynchronousSocketChannel", "write", "(ByteBuffer,long,TimeUnit,Object,CompletionHandler)", "summary", "df-generated"] + - ["java.nio.channels", "AsynchronousSocketChannel", "write", "(ByteBuffer[],int,int,long,TimeUnit,Object,CompletionHandler)", "summary", "df-generated"] + - ["java.nio.channels", "Channel", "isOpen", "()", "summary", "df-generated"] + - ["java.nio.channels", "Channels", "newInputStream", "(AsynchronousByteChannel)", "summary", "df-generated"] + - ["java.nio.channels", "Channels", "newOutputStream", "(AsynchronousByteChannel)", "summary", "df-generated"] + - ["java.nio.channels", "Channels", "newOutputStream", "(WritableByteChannel)", "summary", "df-generated"] + - ["java.nio.channels", "DatagramChannel", "connect", "(SocketAddress)", "summary", "df-generated"] + - ["java.nio.channels", "DatagramChannel", "disconnect", "()", "summary", "df-generated"] + - ["java.nio.channels", "DatagramChannel", "getRemoteAddress", "()", "summary", "df-generated"] + - ["java.nio.channels", "DatagramChannel", "isConnected", "()", "summary", "df-generated"] + - ["java.nio.channels", "DatagramChannel", "open", "()", "summary", "df-generated"] + - ["java.nio.channels", "DatagramChannel", "receive", "(ByteBuffer)", "summary", "df-generated"] + - ["java.nio.channels", "DatagramChannel", "send", "(ByteBuffer,SocketAddress)", "summary", "df-generated"] + - ["java.nio.channels", "DatagramChannel", "socket", "()", "summary", "df-generated"] + - ["java.nio.channels", "FileChannel", "force", "(boolean)", "summary", "df-generated"] + - ["java.nio.channels", "FileChannel", "lock", "(long,long,boolean)", "summary", "df-generated"] + - ["java.nio.channels", "FileChannel", "map", "(FileChannel$MapMode,long,long)", "summary", "df-generated"] + - ["java.nio.channels", "FileChannel", "read", "(ByteBuffer,long)", "summary", "df-generated"] + - ["java.nio.channels", "FileChannel", "transferFrom", "(ReadableByteChannel,long,long)", "summary", "df-generated"] + - ["java.nio.channels", "FileChannel", "transferTo", "(long,long,WritableByteChannel)", "summary", "df-generated"] + - ["java.nio.channels", "FileChannel", "tryLock", "(long,long,boolean)", "summary", "df-generated"] + - ["java.nio.channels", "FileChannel", "write", "(ByteBuffer,long)", "summary", "df-generated"] + - ["java.nio.channels", "FileLock", "isShared", "()", "summary", "df-generated"] + - ["java.nio.channels", "FileLock", "isValid", "()", "summary", "df-generated"] + - ["java.nio.channels", "FileLock", "overlaps", "(long,long)", "summary", "df-generated"] + - ["java.nio.channels", "FileLock", "position", "()", "summary", "df-generated"] + - ["java.nio.channels", "FileLock", "release", "()", "summary", "df-generated"] + - ["java.nio.channels", "FileLock", "size", "()", "summary", "df-generated"] + - ["java.nio.channels", "GatheringByteChannel", "write", "(ByteBuffer[])", "summary", "df-generated"] + - ["java.nio.channels", "GatheringByteChannel", "write", "(ByteBuffer[],int,int)", "summary", "df-generated"] + - ["java.nio.channels", "MembershipKey", "block", "(InetAddress)", "summary", "df-generated"] + - ["java.nio.channels", "MembershipKey", "channel", "()", "summary", "df-generated"] + - ["java.nio.channels", "MembershipKey", "drop", "()", "summary", "df-generated"] + - ["java.nio.channels", "MembershipKey", "group", "()", "summary", "df-generated"] + - ["java.nio.channels", "MembershipKey", "isValid", "()", "summary", "df-generated"] + - ["java.nio.channels", "MembershipKey", "networkInterface", "()", "summary", "df-generated"] + - ["java.nio.channels", "MembershipKey", "sourceAddress", "()", "summary", "df-generated"] + - ["java.nio.channels", "MembershipKey", "unblock", "(InetAddress)", "summary", "df-generated"] + - ["java.nio.channels", "NetworkChannel", "getLocalAddress", "()", "summary", "df-generated"] + - ["java.nio.channels", "NetworkChannel", "setOption", "(SocketOption,Object)", "summary", "df-generated"] + - ["java.nio.channels", "Pipe", "open", "()", "summary", "df-generated"] + - ["java.nio.channels", "Pipe", "sink", "()", "summary", "df-generated"] + - ["java.nio.channels", "Pipe", "source", "()", "summary", "df-generated"] + - ["java.nio.channels", "ScatteringByteChannel", "read", "(ByteBuffer[])", "summary", "df-generated"] + - ["java.nio.channels", "ScatteringByteChannel", "read", "(ByteBuffer[],int,int)", "summary", "df-generated"] + - ["java.nio.channels", "SeekableByteChannel", "position", "()", "summary", "df-generated"] + - ["java.nio.channels", "SeekableByteChannel", "position", "(long)", "summary", "df-generated"] + - ["java.nio.channels", "SeekableByteChannel", "size", "()", "summary", "df-generated"] + - ["java.nio.channels", "SeekableByteChannel", "truncate", "(long)", "summary", "df-generated"] + - ["java.nio.channels", "SelectableChannel", "isBlocking", "()", "summary", "df-generated"] + - ["java.nio.channels", "SelectableChannel", "isRegistered", "()", "summary", "df-generated"] + - ["java.nio.channels", "SelectableChannel", "validOps", "()", "summary", "df-generated"] + - ["java.nio.channels", "SelectionKey", "attach", "(Object)", "summary", "df-generated"] + - ["java.nio.channels", "SelectionKey", "cancel", "()", "summary", "df-generated"] + - ["java.nio.channels", "SelectionKey", "channel", "()", "summary", "df-generated"] + - ["java.nio.channels", "SelectionKey", "interestOps", "()", "summary", "df-generated"] + - ["java.nio.channels", "SelectionKey", "interestOps", "(int)", "summary", "df-generated"] + - ["java.nio.channels", "SelectionKey", "interestOpsAnd", "(int)", "summary", "df-generated"] + - ["java.nio.channels", "SelectionKey", "interestOpsOr", "(int)", "summary", "df-generated"] + - ["java.nio.channels", "SelectionKey", "isAcceptable", "()", "summary", "df-generated"] + - ["java.nio.channels", "SelectionKey", "isConnectable", "()", "summary", "df-generated"] + - ["java.nio.channels", "SelectionKey", "isReadable", "()", "summary", "df-generated"] + - ["java.nio.channels", "SelectionKey", "isValid", "()", "summary", "df-generated"] + - ["java.nio.channels", "SelectionKey", "isWritable", "()", "summary", "df-generated"] + - ["java.nio.channels", "SelectionKey", "readyOps", "()", "summary", "df-generated"] + - ["java.nio.channels", "SelectionKey", "selector", "()", "summary", "df-generated"] + - ["java.nio.channels", "Selector", "isOpen", "()", "summary", "df-generated"] + - ["java.nio.channels", "Selector", "keys", "()", "summary", "df-generated"] + - ["java.nio.channels", "Selector", "open", "()", "summary", "df-generated"] + - ["java.nio.channels", "Selector", "select", "()", "summary", "df-generated"] + - ["java.nio.channels", "Selector", "select", "(Consumer,long)", "summary", "df-generated"] + - ["java.nio.channels", "Selector", "select", "(long)", "summary", "df-generated"] + - ["java.nio.channels", "Selector", "selectNow", "()", "summary", "df-generated"] + - ["java.nio.channels", "Selector", "selectNow", "(Consumer)", "summary", "df-generated"] + - ["java.nio.channels", "Selector", "selectedKeys", "()", "summary", "df-generated"] + - ["java.nio.channels", "Selector", "wakeup", "()", "summary", "df-generated"] + - ["java.nio.channels", "ServerSocketChannel", "accept", "()", "summary", "df-generated"] + - ["java.nio.channels", "ServerSocketChannel", "bind", "(SocketAddress,int)", "summary", "df-generated"] + - ["java.nio.channels", "ServerSocketChannel", "open", "()", "summary", "df-generated"] + - ["java.nio.channels", "ServerSocketChannel", "socket", "()", "summary", "df-generated"] + - ["java.nio.channels", "SocketChannel", "connect", "(SocketAddress)", "summary", "df-generated"] + - ["java.nio.channels", "SocketChannel", "finishConnect", "()", "summary", "df-generated"] + - ["java.nio.channels", "SocketChannel", "getRemoteAddress", "()", "summary", "df-generated"] + - ["java.nio.channels", "SocketChannel", "isConnected", "()", "summary", "df-generated"] + - ["java.nio.channels", "SocketChannel", "isConnectionPending", "()", "summary", "df-generated"] + - ["java.nio.channels", "SocketChannel", "open", "()", "summary", "df-generated"] + - ["java.nio.channels", "SocketChannel", "shutdownInput", "()", "summary", "df-generated"] + - ["java.nio.channels", "SocketChannel", "shutdownOutput", "()", "summary", "df-generated"] + - ["java.nio.channels", "SocketChannel", "socket", "()", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/java.nio.channels.spi.model.yml b/java/ql/lib/ext/generated/java.nio.channels.spi.model.yml new file mode 100644 index 00000000000..bb85f0a62ed --- /dev/null +++ b/java/ql/lib/ext/generated/java.nio.channels.spi.model.yml @@ -0,0 +1,21 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["java.nio.channels.spi", "AsynchronousChannelProvider", "openAsynchronousChannelGroup", "(ExecutorService,int)", "summary", "df-generated"] + - ["java.nio.channels.spi", "AsynchronousChannelProvider", "openAsynchronousChannelGroup", "(int,ThreadFactory)", "summary", "df-generated"] + - ["java.nio.channels.spi", "AsynchronousChannelProvider", "openAsynchronousServerSocketChannel", "(AsynchronousChannelGroup)", "summary", "df-generated"] + - ["java.nio.channels.spi", "AsynchronousChannelProvider", "openAsynchronousSocketChannel", "(AsynchronousChannelGroup)", "summary", "df-generated"] + - ["java.nio.channels.spi", "AsynchronousChannelProvider", "provider", "()", "summary", "df-generated"] + - ["java.nio.channels.spi", "SelectorProvider", "inheritedChannel", "()", "summary", "df-generated"] + - ["java.nio.channels.spi", "SelectorProvider", "openDatagramChannel", "()", "summary", "df-generated"] + - ["java.nio.channels.spi", "SelectorProvider", "openDatagramChannel", "(ProtocolFamily)", "summary", "df-generated"] + - ["java.nio.channels.spi", "SelectorProvider", "openPipe", "()", "summary", "df-generated"] + - ["java.nio.channels.spi", "SelectorProvider", "openSelector", "()", "summary", "df-generated"] + - ["java.nio.channels.spi", "SelectorProvider", "openServerSocketChannel", "()", "summary", "df-generated"] + - ["java.nio.channels.spi", "SelectorProvider", "openServerSocketChannel", "(ProtocolFamily)", "summary", "df-generated"] + - ["java.nio.channels.spi", "SelectorProvider", "openSocketChannel", "()", "summary", "df-generated"] + - ["java.nio.channels.spi", "SelectorProvider", "openSocketChannel", "(ProtocolFamily)", "summary", "df-generated"] + - ["java.nio.channels.spi", "SelectorProvider", "provider", "()", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/java.nio.charset.model.yml b/java/ql/lib/ext/generated/java.nio.charset.model.yml new file mode 100644 index 00000000000..488fc3ddecf --- /dev/null +++ b/java/ql/lib/ext/generated/java.nio.charset.model.yml @@ -0,0 +1,82 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["java.nio.charset", "CharsetDecoder", True, "decode", "(ByteBuffer)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.charset", "CharsetDecoder", True, "decode", "(ByteBuffer,CharBuffer,boolean)", "", "Argument[this]", "Argument[1]", "taint", "df-generated"] + - ["java.nio.charset", "CharsetDecoder", True, "malformedInputAction", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.charset", "CharsetDecoder", True, "onMalformedInput", "(CodingErrorAction)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.nio.charset", "CharsetDecoder", True, "onMalformedInput", "(CodingErrorAction)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio.charset", "CharsetDecoder", True, "onUnmappableCharacter", "(CodingErrorAction)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.nio.charset", "CharsetDecoder", True, "onUnmappableCharacter", "(CodingErrorAction)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio.charset", "CharsetDecoder", True, "replaceWith", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.nio.charset", "CharsetDecoder", True, "replaceWith", "(String)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio.charset", "CharsetDecoder", True, "replacement", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.charset", "CharsetDecoder", True, "reset", "()", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio.charset", "CharsetDecoder", True, "unmappableCharacterAction", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.charset", "CharsetEncoder", True, "encode", "(CharBuffer)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.charset", "CharsetEncoder", True, "encode", "(CharBuffer,ByteBuffer,boolean)", "", "Argument[this]", "Argument[1]", "taint", "df-generated"] + - ["java.nio.charset", "CharsetEncoder", True, "encode", "(CharBuffer,ByteBuffer,boolean)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.charset", "CharsetEncoder", True, "malformedInputAction", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.charset", "CharsetEncoder", True, "onMalformedInput", "(CodingErrorAction)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.nio.charset", "CharsetEncoder", True, "onMalformedInput", "(CodingErrorAction)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio.charset", "CharsetEncoder", True, "onUnmappableCharacter", "(CodingErrorAction)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.nio.charset", "CharsetEncoder", True, "onUnmappableCharacter", "(CodingErrorAction)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio.charset", "CharsetEncoder", True, "replaceWith", "(byte[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.nio.charset", "CharsetEncoder", True, "replaceWith", "(byte[])", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio.charset", "CharsetEncoder", True, "replacement", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.charset", "CharsetEncoder", True, "reset", "()", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio.charset", "CharsetEncoder", True, "unmappableCharacterAction", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.charset", "CoderMalfunctionError", True, "CoderMalfunctionError", "(Exception)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.nio.charset", "IllegalCharsetNameException", True, "IllegalCharsetNameException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.nio.charset", "IllegalCharsetNameException", True, "getCharsetName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.charset", "UnsupportedCharsetException", True, "UnsupportedCharsetException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.nio.charset", "UnsupportedCharsetException", True, "getCharsetName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["java.nio.charset", "Charset", "aliases", "()", "summary", "df-generated"] + - ["java.nio.charset", "Charset", "availableCharsets", "()", "summary", "df-generated"] + - ["java.nio.charset", "Charset", "canEncode", "()", "summary", "df-generated"] + - ["java.nio.charset", "Charset", "contains", "(Charset)", "summary", "df-generated"] + - ["java.nio.charset", "Charset", "decode", "(ByteBuffer)", "summary", "df-generated"] + - ["java.nio.charset", "Charset", "defaultCharset", "()", "summary", "df-generated"] + - ["java.nio.charset", "Charset", "displayName", "()", "summary", "df-generated"] + - ["java.nio.charset", "Charset", "displayName", "(Locale)", "summary", "df-generated"] + - ["java.nio.charset", "Charset", "encode", "(CharBuffer)", "summary", "df-generated"] + - ["java.nio.charset", "Charset", "encode", "(String)", "summary", "df-generated"] + - ["java.nio.charset", "Charset", "forName", "(String)", "summary", "df-generated"] + - ["java.nio.charset", "Charset", "isRegistered", "()", "summary", "df-generated"] + - ["java.nio.charset", "Charset", "isSupported", "(String)", "summary", "df-generated"] + - ["java.nio.charset", "Charset", "newDecoder", "()", "summary", "df-generated"] + - ["java.nio.charset", "Charset", "newEncoder", "()", "summary", "df-generated"] + - ["java.nio.charset", "CharsetDecoder", "averageCharsPerByte", "()", "summary", "df-generated"] + - ["java.nio.charset", "CharsetDecoder", "charset", "()", "summary", "df-generated"] + - ["java.nio.charset", "CharsetDecoder", "detectedCharset", "()", "summary", "df-generated"] + - ["java.nio.charset", "CharsetDecoder", "flush", "(CharBuffer)", "summary", "df-generated"] + - ["java.nio.charset", "CharsetDecoder", "isAutoDetecting", "()", "summary", "df-generated"] + - ["java.nio.charset", "CharsetDecoder", "isCharsetDetected", "()", "summary", "df-generated"] + - ["java.nio.charset", "CharsetDecoder", "maxCharsPerByte", "()", "summary", "df-generated"] + - ["java.nio.charset", "CharsetEncoder", "averageBytesPerChar", "()", "summary", "df-generated"] + - ["java.nio.charset", "CharsetEncoder", "canEncode", "(CharSequence)", "summary", "df-generated"] + - ["java.nio.charset", "CharsetEncoder", "canEncode", "(char)", "summary", "df-generated"] + - ["java.nio.charset", "CharsetEncoder", "charset", "()", "summary", "df-generated"] + - ["java.nio.charset", "CharsetEncoder", "flush", "(ByteBuffer)", "summary", "df-generated"] + - ["java.nio.charset", "CharsetEncoder", "isLegalReplacement", "(byte[])", "summary", "df-generated"] + - ["java.nio.charset", "CharsetEncoder", "maxBytesPerChar", "()", "summary", "df-generated"] + - ["java.nio.charset", "CoderResult", "isError", "()", "summary", "df-generated"] + - ["java.nio.charset", "CoderResult", "isMalformed", "()", "summary", "df-generated"] + - ["java.nio.charset", "CoderResult", "isOverflow", "()", "summary", "df-generated"] + - ["java.nio.charset", "CoderResult", "isUnderflow", "()", "summary", "df-generated"] + - ["java.nio.charset", "CoderResult", "isUnmappable", "()", "summary", "df-generated"] + - ["java.nio.charset", "CoderResult", "length", "()", "summary", "df-generated"] + - ["java.nio.charset", "CoderResult", "malformedForLength", "(int)", "summary", "df-generated"] + - ["java.nio.charset", "CoderResult", "throwException", "()", "summary", "df-generated"] + - ["java.nio.charset", "CoderResult", "unmappableForLength", "(int)", "summary", "df-generated"] + - ["java.nio.charset", "MalformedInputException", "MalformedInputException", "(int)", "summary", "df-generated"] + - ["java.nio.charset", "MalformedInputException", "getInputLength", "()", "summary", "df-generated"] + - ["java.nio.charset", "UnmappableCharacterException", "UnmappableCharacterException", "(int)", "summary", "df-generated"] + - ["java.nio.charset", "UnmappableCharacterException", "getInputLength", "()", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/java.nio.charset.spi.model.yml b/java/ql/lib/ext/generated/java.nio.charset.spi.model.yml new file mode 100644 index 00000000000..131afc20afe --- /dev/null +++ b/java/ql/lib/ext/generated/java.nio.charset.spi.model.yml @@ -0,0 +1,8 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["java.nio.charset.spi", "CharsetProvider", "charsetForName", "(String)", "summary", "df-generated"] + - ["java.nio.charset.spi", "CharsetProvider", "charsets", "()", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/java.nio.file.attribute.model.yml b/java/ql/lib/ext/generated/java.nio.file.attribute.model.yml new file mode 100644 index 00000000000..2f0a7c2c02c --- /dev/null +++ b/java/ql/lib/ext/generated/java.nio.file.attribute.model.yml @@ -0,0 +1,38 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["java.nio.file.attribute", "AclEntry$Builder", False, "build", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.file.attribute", "AclEntry$Builder", False, "setFlags", "(AclEntryFlag[])", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio.file.attribute", "AclEntry$Builder", False, "setFlags", "(Set)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["java.nio.file.attribute", "AclEntry$Builder", False, "setFlags", "(Set)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio.file.attribute", "AclEntry$Builder", False, "setPermissions", "(AclEntryPermission[])", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio.file.attribute", "AclEntry$Builder", False, "setPermissions", "(Set)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["java.nio.file.attribute", "AclEntry$Builder", False, "setPermissions", "(Set)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio.file.attribute", "AclEntry$Builder", False, "setPrincipal", "(UserPrincipal)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.nio.file.attribute", "AclEntry$Builder", False, "setPrincipal", "(UserPrincipal)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio.file.attribute", "AclEntry$Builder", False, "setType", "(AclEntryType)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio.file.attribute", "AclEntry", False, "flags", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.file.attribute", "AclEntry", False, "newBuilder", "(AclEntry)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.file.attribute", "AclEntry", False, "permissions", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.file.attribute", "AclEntry", False, "principal", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.file.attribute", "FileTime", False, "from", "(Instant)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.file.attribute", "FileTime", False, "toInstant", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.file.attribute", "UserPrincipalNotFoundException", True, "UserPrincipalNotFoundException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.nio.file.attribute", "UserPrincipalNotFoundException", True, "getName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["java.nio.file.attribute", "AclEntry", "newBuilder", "()", "summary", "df-generated"] + - ["java.nio.file.attribute", "AclEntry", "type", "()", "summary", "df-generated"] + - ["java.nio.file.attribute", "FileTime", "from", "(long,TimeUnit)", "summary", "df-generated"] + - ["java.nio.file.attribute", "FileTime", "fromMillis", "(long)", "summary", "df-generated"] + - ["java.nio.file.attribute", "FileTime", "to", "(TimeUnit)", "summary", "df-generated"] + - ["java.nio.file.attribute", "FileTime", "toMillis", "()", "summary", "df-generated"] + - ["java.nio.file.attribute", "PosixFilePermissions", "asFileAttribute", "(Set)", "summary", "df-generated"] + - ["java.nio.file.attribute", "PosixFilePermissions", "fromString", "(String)", "summary", "df-generated"] + - ["java.nio.file.attribute", "UserPrincipalLookupService", "lookupPrincipalByGroupName", "(String)", "summary", "df-generated"] + - ["java.nio.file.attribute", "UserPrincipalLookupService", "lookupPrincipalByName", "(String)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/java.nio.file.model.yml b/java/ql/lib/ext/generated/java.nio.file.model.yml new file mode 100644 index 00000000000..4c88fbbe5ec --- /dev/null +++ b/java/ql/lib/ext/generated/java.nio.file.model.yml @@ -0,0 +1,119 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["java.nio.file", "AccessDeniedException", True, "AccessDeniedException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.nio.file", "AccessDeniedException", True, "AccessDeniedException", "(String,String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.nio.file", "AccessDeniedException", True, "AccessDeniedException", "(String,String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.nio.file", "AccessDeniedException", True, "AccessDeniedException", "(String,String,String)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.nio.file", "AtomicMoveNotSupportedException", True, "AtomicMoveNotSupportedException", "(String,String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.nio.file", "AtomicMoveNotSupportedException", True, "AtomicMoveNotSupportedException", "(String,String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.nio.file", "AtomicMoveNotSupportedException", True, "AtomicMoveNotSupportedException", "(String,String,String)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.nio.file", "DirectoryIteratorException", False, "DirectoryIteratorException", "(IOException)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.nio.file", "DirectoryNotEmptyException", True, "DirectoryNotEmptyException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.nio.file", "FileAlreadyExistsException", True, "FileAlreadyExistsException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.nio.file", "FileAlreadyExistsException", True, "FileAlreadyExistsException", "(String,String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.nio.file", "FileAlreadyExistsException", True, "FileAlreadyExistsException", "(String,String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.nio.file", "FileAlreadyExistsException", True, "FileAlreadyExistsException", "(String,String,String)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.nio.file", "FileSystemAlreadyExistsException", True, "FileSystemAlreadyExistsException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.nio.file", "FileSystemException", True, "FileSystemException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.nio.file", "FileSystemException", True, "FileSystemException", "(String,String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.nio.file", "FileSystemException", True, "FileSystemException", "(String,String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.nio.file", "FileSystemException", True, "FileSystemException", "(String,String,String)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.nio.file", "FileSystemException", True, "getFile", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.file", "FileSystemException", True, "getOtherFile", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.file", "FileSystemException", True, "getReason", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.file", "FileSystemLoopException", True, "FileSystemLoopException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.nio.file", "FileSystemNotFoundException", True, "FileSystemNotFoundException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.nio.file", "FileSystems", False, "newFileSystem", "(Path)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["java.nio.file", "FileSystems", False, "newFileSystem", "(Path,ClassLoader)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["java.nio.file", "FileSystems", False, "newFileSystem", "(Path,ClassLoader)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.file", "FileSystems", False, "newFileSystem", "(Path,Map)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["java.nio.file", "FileSystems", False, "newFileSystem", "(Path,Map)", "", "Argument[1].Element", "ReturnValue", "taint", "df-generated"] + - ["java.nio.file", "FileSystems", False, "newFileSystem", "(Path,Map,ClassLoader)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["java.nio.file", "FileSystems", False, "newFileSystem", "(Path,Map,ClassLoader)", "", "Argument[1].Element", "ReturnValue", "taint", "df-generated"] + - ["java.nio.file", "FileSystems", False, "newFileSystem", "(Path,Map,ClassLoader)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.file", "FileSystems", False, "newFileSystem", "(URI,Map)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.file", "FileSystems", False, "newFileSystem", "(URI,Map)", "", "Argument[1].Element", "ReturnValue", "taint", "df-generated"] + - ["java.nio.file", "FileSystems", False, "newFileSystem", "(URI,Map,ClassLoader)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.file", "FileSystems", False, "newFileSystem", "(URI,Map,ClassLoader)", "", "Argument[1].Element", "ReturnValue", "taint", "df-generated"] + - ["java.nio.file", "FileSystems", False, "newFileSystem", "(URI,Map,ClassLoader)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.file", "Files", False, "getAttribute", "(Path,String,LinkOption[])", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["java.nio.file", "Files", False, "getAttribute", "(Path,String,LinkOption[])", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.file", "Files", False, "getFileAttributeView", "(Path,Class,LinkOption[])", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["java.nio.file", "Files", False, "getFileAttributeView", "(Path,Class,LinkOption[])", "", "Argument[2].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["java.nio.file", "Files", False, "newDirectoryStream", "(Path,String)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["java.nio.file", "Files", False, "newOutputStream", "(Path,OpenOption[])", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["java.nio.file", "Files", False, "readAttributes", "(Path,Class,LinkOption[])", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["java.nio.file", "Files", False, "readAttributes", "(Path,String,LinkOption[])", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["java.nio.file", "Files", False, "readAttributes", "(Path,String,LinkOption[])", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.file", "Files", False, "setAttribute", "(Path,String,Object,LinkOption[])", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["java.nio.file", "Files", False, "setLastModifiedTime", "(Path,FileTime)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["java.nio.file", "Files", False, "setOwner", "(Path,UserPrincipal)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["java.nio.file", "Files", False, "setPosixFilePermissions", "(Path,Set)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["java.nio.file", "Files", False, "walkFileTree", "(Path,FileVisitor)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["java.nio.file", "Files", False, "walkFileTree", "(Path,Set,int,FileVisitor)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["java.nio.file", "InvalidPathException", True, "InvalidPathException", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.nio.file", "InvalidPathException", True, "InvalidPathException", "(String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.nio.file", "InvalidPathException", True, "InvalidPathException", "(String,String,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.nio.file", "InvalidPathException", True, "InvalidPathException", "(String,String,int)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.nio.file", "InvalidPathException", True, "getInput", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.file", "InvalidPathException", True, "getReason", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.file", "LinkPermission", False, "LinkPermission", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.nio.file", "LinkPermission", False, "LinkPermission", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.nio.file", "NoSuchFileException", True, "NoSuchFileException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.nio.file", "NoSuchFileException", True, "NoSuchFileException", "(String,String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.nio.file", "NoSuchFileException", True, "NoSuchFileException", "(String,String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.nio.file", "NoSuchFileException", True, "NoSuchFileException", "(String,String,String)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.nio.file", "NotDirectoryException", True, "NotDirectoryException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.nio.file", "NotLinkException", True, "NotLinkException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.nio.file", "NotLinkException", True, "NotLinkException", "(String,String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.nio.file", "NotLinkException", True, "NotLinkException", "(String,String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.nio.file", "NotLinkException", True, "NotLinkException", "(String,String,String)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.nio.file", "ProviderMismatchException", True, "ProviderMismatchException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.nio.file", "ProviderNotFoundException", True, "ProviderNotFoundException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["java.nio.file", "FileStore", "getAttribute", "(String)", "summary", "df-generated"] + - ["java.nio.file", "FileStore", "getBlockSize", "()", "summary", "df-generated"] + - ["java.nio.file", "FileStore", "getFileStoreAttributeView", "(Class)", "summary", "df-generated"] + - ["java.nio.file", "FileStore", "getTotalSpace", "()", "summary", "df-generated"] + - ["java.nio.file", "FileStore", "getUnallocatedSpace", "()", "summary", "df-generated"] + - ["java.nio.file", "FileStore", "getUsableSpace", "()", "summary", "df-generated"] + - ["java.nio.file", "FileStore", "isReadOnly", "()", "summary", "df-generated"] + - ["java.nio.file", "FileStore", "name", "()", "summary", "df-generated"] + - ["java.nio.file", "FileStore", "supportsFileAttributeView", "(Class)", "summary", "df-generated"] + - ["java.nio.file", "FileStore", "supportsFileAttributeView", "(String)", "summary", "df-generated"] + - ["java.nio.file", "FileStore", "type", "()", "summary", "df-generated"] + - ["java.nio.file", "FileSystem", "getFileStores", "()", "summary", "df-generated"] + - ["java.nio.file", "FileSystem", "getSeparator", "()", "summary", "df-generated"] + - ["java.nio.file", "FileSystem", "getUserPrincipalLookupService", "()", "summary", "df-generated"] + - ["java.nio.file", "FileSystem", "isOpen", "()", "summary", "df-generated"] + - ["java.nio.file", "FileSystem", "isReadOnly", "()", "summary", "df-generated"] + - ["java.nio.file", "FileSystem", "newWatchService", "()", "summary", "df-generated"] + - ["java.nio.file", "FileSystem", "provider", "()", "summary", "df-generated"] + - ["java.nio.file", "FileSystem", "supportedFileAttributeViews", "()", "summary", "df-generated"] + - ["java.nio.file", "FileSystems", "getDefault", "()", "summary", "df-generated"] + - ["java.nio.file", "FileSystems", "getFileSystem", "(URI)", "summary", "df-generated"] + - ["java.nio.file", "Files", "getLastModifiedTime", "(Path,LinkOption[])", "summary", "df-generated"] + - ["java.nio.file", "Files", "getOwner", "(Path,LinkOption[])", "summary", "df-generated"] + - ["java.nio.file", "Files", "getPosixFilePermissions", "(Path,LinkOption[])", "summary", "df-generated"] + - ["java.nio.file", "Files", "isDirectory", "(Path,LinkOption[])", "summary", "df-generated"] + - ["java.nio.file", "Files", "isExecutable", "(Path)", "summary", "df-generated"] + - ["java.nio.file", "Files", "isHidden", "(Path)", "summary", "df-generated"] + - ["java.nio.file", "Files", "isReadable", "(Path)", "summary", "df-generated"] + - ["java.nio.file", "Files", "isRegularFile", "(Path,LinkOption[])", "summary", "df-generated"] + - ["java.nio.file", "Files", "isSameFile", "(Path,Path)", "summary", "df-generated"] + - ["java.nio.file", "Files", "isSymbolicLink", "(Path)", "summary", "df-generated"] + - ["java.nio.file", "Files", "isWritable", "(Path)", "summary", "df-generated"] + - ["java.nio.file", "Files", "mismatch", "(Path,Path)", "summary", "df-generated"] + - ["java.nio.file", "Files", "size", "(Path)", "summary", "df-generated"] + - ["java.nio.file", "Files", "walk", "(Path,int,FileVisitOption[])", "summary", "df-generated"] + - ["java.nio.file", "InvalidPathException", "getIndex", "()", "summary", "df-generated"] + - ["java.nio.file", "Path", "endsWith", "(String)", "summary", "df-generated"] + - ["java.nio.file", "Path", "startsWith", "(String)", "summary", "df-generated"] + - ["java.nio.file", "Watchable", "register", "(WatchService,WatchEvent$Kind[])", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/java.nio.file.spi.model.yml b/java/ql/lib/ext/generated/java.nio.file.spi.model.yml new file mode 100644 index 00000000000..2e144b26abe --- /dev/null +++ b/java/ql/lib/ext/generated/java.nio.file.spi.model.yml @@ -0,0 +1,39 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["java.nio.file.spi", "FileSystemProvider", True, "newInputStream", "(Path,OpenOption[])", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["java.nio.file.spi", "FileSystemProvider", "checkAccess", "(Path,AccessMode[])", "summary", "df-generated"] + - ["java.nio.file.spi", "FileSystemProvider", "copy", "(Path,Path,CopyOption[])", "summary", "df-generated"] + - ["java.nio.file.spi", "FileSystemProvider", "createDirectory", "(Path,FileAttribute[])", "summary", "df-generated"] + - ["java.nio.file.spi", "FileSystemProvider", "createLink", "(Path,Path)", "summary", "df-generated"] + - ["java.nio.file.spi", "FileSystemProvider", "createSymbolicLink", "(Path,Path,FileAttribute[])", "summary", "df-generated"] + - ["java.nio.file.spi", "FileSystemProvider", "delete", "(Path)", "summary", "df-generated"] + - ["java.nio.file.spi", "FileSystemProvider", "deleteIfExists", "(Path)", "summary", "df-generated"] + - ["java.nio.file.spi", "FileSystemProvider", "getFileAttributeView", "(Path,Class,LinkOption[])", "summary", "df-generated"] + - ["java.nio.file.spi", "FileSystemProvider", "getFileStore", "(Path)", "summary", "df-generated"] + - ["java.nio.file.spi", "FileSystemProvider", "getFileSystem", "(URI)", "summary", "df-generated"] + - ["java.nio.file.spi", "FileSystemProvider", "getPath", "(URI)", "summary", "df-generated"] + - ["java.nio.file.spi", "FileSystemProvider", "getScheme", "()", "summary", "df-generated"] + - ["java.nio.file.spi", "FileSystemProvider", "installedProviders", "()", "summary", "df-generated"] + - ["java.nio.file.spi", "FileSystemProvider", "isHidden", "(Path)", "summary", "df-generated"] + - ["java.nio.file.spi", "FileSystemProvider", "isSameFile", "(Path,Path)", "summary", "df-generated"] + - ["java.nio.file.spi", "FileSystemProvider", "move", "(Path,Path,CopyOption[])", "summary", "df-generated"] + - ["java.nio.file.spi", "FileSystemProvider", "newAsynchronousFileChannel", "(Path,Set,ExecutorService,FileAttribute[])", "summary", "df-generated"] + - ["java.nio.file.spi", "FileSystemProvider", "newByteChannel", "(Path,Set,FileAttribute[])", "summary", "df-generated"] + - ["java.nio.file.spi", "FileSystemProvider", "newDirectoryStream", "(Path,DirectoryStream$Filter)", "summary", "df-generated"] + - ["java.nio.file.spi", "FileSystemProvider", "newFileChannel", "(Path,Set,FileAttribute[])", "summary", "df-generated"] + - ["java.nio.file.spi", "FileSystemProvider", "newFileSystem", "(Path,Map)", "summary", "df-generated"] + - ["java.nio.file.spi", "FileSystemProvider", "newFileSystem", "(URI,Map)", "summary", "df-generated"] + - ["java.nio.file.spi", "FileSystemProvider", "newOutputStream", "(Path,OpenOption[])", "summary", "df-generated"] + - ["java.nio.file.spi", "FileSystemProvider", "readAttributes", "(Path,Class,LinkOption[])", "summary", "df-generated"] + - ["java.nio.file.spi", "FileSystemProvider", "readAttributes", "(Path,String,LinkOption[])", "summary", "df-generated"] + - ["java.nio.file.spi", "FileSystemProvider", "readSymbolicLink", "(Path)", "summary", "df-generated"] + - ["java.nio.file.spi", "FileSystemProvider", "setAttribute", "(Path,String,Object,LinkOption[])", "summary", "df-generated"] + - ["java.nio.file.spi", "FileTypeDetector", "probeContentType", "(Path)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/java.nio.model.yml b/java/ql/lib/ext/generated/java.nio.model.yml new file mode 100644 index 00000000000..bd9bc410cda --- /dev/null +++ b/java/ql/lib/ext/generated/java.nio.model.yml @@ -0,0 +1,234 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["java.nio", "Buffer", True, "array", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio", "Buffer", True, "clear", "()", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "Buffer", True, "duplicate", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio", "Buffer", True, "flip", "()", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "Buffer", True, "limit", "(int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "Buffer", True, "mark", "()", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "Buffer", True, "position", "(int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "Buffer", True, "reset", "()", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "Buffer", True, "rewind", "()", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "Buffer", True, "slice", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio", "Buffer", True, "slice", "(int,int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio", "ByteBuffer", True, "asCharBuffer", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio", "ByteBuffer", True, "asDoubleBuffer", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio", "ByteBuffer", True, "asFloatBuffer", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio", "ByteBuffer", True, "asIntBuffer", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio", "ByteBuffer", True, "asLongBuffer", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio", "ByteBuffer", True, "asReadOnlyBuffer", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio", "ByteBuffer", True, "asShortBuffer", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio", "ByteBuffer", True, "compact", "()", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "ByteBuffer", True, "get", "(byte[],int,int)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] + - ["java.nio", "ByteBuffer", True, "get", "(byte[],int,int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "ByteBuffer", True, "get", "(int,byte[],int,int)", "", "Argument[this]", "Argument[1]", "taint", "df-generated"] + - ["java.nio", "ByteBuffer", True, "get", "(int,byte[],int,int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "ByteBuffer", True, "order", "(ByteOrder)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "ByteBuffer", True, "put", "(ByteBuffer)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "ByteBuffer", True, "put", "(byte)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "ByteBuffer", True, "put", "(byte[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.nio", "ByteBuffer", True, "put", "(byte[])", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.nio", "ByteBuffer", True, "put", "(byte[])", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio", "ByteBuffer", True, "put", "(byte[],int,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.nio", "ByteBuffer", True, "put", "(byte[],int,int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "ByteBuffer", True, "put", "(int,ByteBuffer,int,int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "ByteBuffer", True, "put", "(int,byte)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "ByteBuffer", True, "put", "(int,byte[])", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.nio", "ByteBuffer", True, "put", "(int,byte[])", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.nio", "ByteBuffer", True, "put", "(int,byte[])", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio", "ByteBuffer", True, "put", "(int,byte[],int,int)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.nio", "ByteBuffer", True, "put", "(int,byte[],int,int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "ByteBuffer", True, "putChar", "(char)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "ByteBuffer", True, "putChar", "(int,char)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "ByteBuffer", True, "putDouble", "(double)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "ByteBuffer", True, "putDouble", "(int,double)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "ByteBuffer", True, "putFloat", "(float)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "ByteBuffer", True, "putFloat", "(int,float)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "ByteBuffer", True, "putInt", "(int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "ByteBuffer", True, "putInt", "(int,int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "ByteBuffer", True, "putLong", "(int,long)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "ByteBuffer", True, "putLong", "(long)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "ByteBuffer", True, "putShort", "(int,short)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "ByteBuffer", True, "putShort", "(short)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "ByteBuffer", True, "wrap", "(byte[],int,int)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.nio", "CharBuffer", True, "asReadOnlyBuffer", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio", "CharBuffer", True, "compact", "()", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "CharBuffer", True, "get", "(char[])", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio", "CharBuffer", True, "get", "(char[],int,int)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] + - ["java.nio", "CharBuffer", True, "get", "(char[],int,int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "CharBuffer", True, "get", "(int,char[])", "", "Argument[this]", "Argument[1]", "taint", "df-generated"] + - ["java.nio", "CharBuffer", True, "get", "(int,char[])", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio", "CharBuffer", True, "get", "(int,char[],int,int)", "", "Argument[this]", "Argument[1]", "taint", "df-generated"] + - ["java.nio", "CharBuffer", True, "get", "(int,char[],int,int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "CharBuffer", True, "put", "(CharBuffer)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "CharBuffer", True, "put", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.nio", "CharBuffer", True, "put", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.nio", "CharBuffer", True, "put", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio", "CharBuffer", True, "put", "(String,int,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.nio", "CharBuffer", True, "put", "(String,int,int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "CharBuffer", True, "put", "(char)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "CharBuffer", True, "put", "(char[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.nio", "CharBuffer", True, "put", "(char[])", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.nio", "CharBuffer", True, "put", "(char[])", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio", "CharBuffer", True, "put", "(char[],int,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.nio", "CharBuffer", True, "put", "(char[],int,int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "CharBuffer", True, "put", "(int,CharBuffer,int,int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "CharBuffer", True, "put", "(int,char)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "CharBuffer", True, "put", "(int,char[])", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.nio", "CharBuffer", True, "put", "(int,char[])", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.nio", "CharBuffer", True, "put", "(int,char[])", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio", "CharBuffer", True, "put", "(int,char[],int,int)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.nio", "CharBuffer", True, "put", "(int,char[],int,int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "CharBuffer", True, "wrap", "(CharSequence)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.nio", "CharBuffer", True, "wrap", "(CharSequence,int,int)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.nio", "CharBuffer", True, "wrap", "(char[])", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.nio", "CharBuffer", True, "wrap", "(char[],int,int)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.nio", "DoubleBuffer", True, "asReadOnlyBuffer", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio", "DoubleBuffer", True, "compact", "()", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "DoubleBuffer", True, "get", "(double[])", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio", "DoubleBuffer", True, "get", "(double[],int,int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "DoubleBuffer", True, "get", "(int,double[])", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio", "DoubleBuffer", True, "get", "(int,double[],int,int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "DoubleBuffer", True, "put", "(DoubleBuffer)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "DoubleBuffer", True, "put", "(double)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "DoubleBuffer", True, "put", "(double[])", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio", "DoubleBuffer", True, "put", "(double[],int,int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "DoubleBuffer", True, "put", "(int,DoubleBuffer,int,int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "DoubleBuffer", True, "put", "(int,double)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "DoubleBuffer", True, "put", "(int,double[])", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio", "DoubleBuffer", True, "put", "(int,double[],int,int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "FloatBuffer", True, "asReadOnlyBuffer", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio", "FloatBuffer", True, "compact", "()", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "FloatBuffer", True, "get", "(float[])", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio", "FloatBuffer", True, "get", "(float[],int,int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "FloatBuffer", True, "get", "(int,float[])", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio", "FloatBuffer", True, "get", "(int,float[],int,int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "FloatBuffer", True, "put", "(FloatBuffer)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "FloatBuffer", True, "put", "(float)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "FloatBuffer", True, "put", "(float[])", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio", "FloatBuffer", True, "put", "(float[],int,int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "FloatBuffer", True, "put", "(int,FloatBuffer,int,int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "FloatBuffer", True, "put", "(int,float)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "FloatBuffer", True, "put", "(int,float[])", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio", "FloatBuffer", True, "put", "(int,float[],int,int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "IntBuffer", True, "asReadOnlyBuffer", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio", "IntBuffer", True, "compact", "()", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "IntBuffer", True, "get", "(int,int[])", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio", "IntBuffer", True, "get", "(int,int[],int,int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "IntBuffer", True, "get", "(int[],int,int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "IntBuffer", True, "put", "(IntBuffer)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "IntBuffer", True, "put", "(int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "IntBuffer", True, "put", "(int,IntBuffer,int,int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "IntBuffer", True, "put", "(int,int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "IntBuffer", True, "put", "(int,int[])", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio", "IntBuffer", True, "put", "(int,int[],int,int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "IntBuffer", True, "put", "(int[])", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio", "IntBuffer", True, "put", "(int[],int,int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "LongBuffer", True, "asReadOnlyBuffer", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio", "LongBuffer", True, "compact", "()", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "LongBuffer", True, "get", "(int,long[])", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio", "LongBuffer", True, "get", "(int,long[],int,int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "LongBuffer", True, "get", "(long[])", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio", "LongBuffer", True, "get", "(long[],int,int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "LongBuffer", True, "put", "(LongBuffer)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "LongBuffer", True, "put", "(int,LongBuffer,int,int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "LongBuffer", True, "put", "(int,long)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "LongBuffer", True, "put", "(int,long[])", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio", "LongBuffer", True, "put", "(int,long[],int,int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "LongBuffer", True, "put", "(long)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "LongBuffer", True, "put", "(long[])", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio", "LongBuffer", True, "put", "(long[],int,int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "MappedByteBuffer", True, "force", "()", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "MappedByteBuffer", True, "force", "(int,int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "MappedByteBuffer", True, "load", "()", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "ShortBuffer", True, "asReadOnlyBuffer", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio", "ShortBuffer", True, "compact", "()", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "ShortBuffer", True, "get", "(int,short[])", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio", "ShortBuffer", True, "get", "(int,short[],int,int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "ShortBuffer", True, "get", "(short[])", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio", "ShortBuffer", True, "get", "(short[],int,int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "ShortBuffer", True, "put", "(ShortBuffer)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "ShortBuffer", True, "put", "(int,ShortBuffer,int,int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "ShortBuffer", True, "put", "(int,short)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "ShortBuffer", True, "put", "(int,short[])", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio", "ShortBuffer", True, "put", "(int,short[],int,int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "ShortBuffer", True, "put", "(short)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "ShortBuffer", True, "put", "(short[])", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio", "ShortBuffer", True, "put", "(short[],int,int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["java.nio", "Buffer", "arrayOffset", "()", "summary", "df-generated"] + - ["java.nio", "Buffer", "capacity", "()", "summary", "df-generated"] + - ["java.nio", "Buffer", "hasArray", "()", "summary", "df-generated"] + - ["java.nio", "Buffer", "hasRemaining", "()", "summary", "df-generated"] + - ["java.nio", "Buffer", "isDirect", "()", "summary", "df-generated"] + - ["java.nio", "Buffer", "isReadOnly", "()", "summary", "df-generated"] + - ["java.nio", "Buffer", "limit", "()", "summary", "df-generated"] + - ["java.nio", "ByteBuffer", "alignedSlice", "(int)", "summary", "df-generated"] + - ["java.nio", "ByteBuffer", "alignmentOffset", "(int,int)", "summary", "df-generated"] + - ["java.nio", "ByteBuffer", "allocateDirect", "(int)", "summary", "df-generated"] + - ["java.nio", "ByteBuffer", "get", "()", "summary", "df-generated"] + - ["java.nio", "ByteBuffer", "get", "(int)", "summary", "df-generated"] + - ["java.nio", "ByteBuffer", "getChar", "()", "summary", "df-generated"] + - ["java.nio", "ByteBuffer", "getChar", "(int)", "summary", "df-generated"] + - ["java.nio", "ByteBuffer", "getDouble", "()", "summary", "df-generated"] + - ["java.nio", "ByteBuffer", "getDouble", "(int)", "summary", "df-generated"] + - ["java.nio", "ByteBuffer", "getFloat", "()", "summary", "df-generated"] + - ["java.nio", "ByteBuffer", "getFloat", "(int)", "summary", "df-generated"] + - ["java.nio", "ByteBuffer", "getInt", "()", "summary", "df-generated"] + - ["java.nio", "ByteBuffer", "getInt", "(int)", "summary", "df-generated"] + - ["java.nio", "ByteBuffer", "getLong", "()", "summary", "df-generated"] + - ["java.nio", "ByteBuffer", "getLong", "(int)", "summary", "df-generated"] + - ["java.nio", "ByteBuffer", "getShort", "()", "summary", "df-generated"] + - ["java.nio", "ByteBuffer", "getShort", "(int)", "summary", "df-generated"] + - ["java.nio", "ByteBuffer", "mismatch", "(ByteBuffer)", "summary", "df-generated"] + - ["java.nio", "ByteBuffer", "order", "()", "summary", "df-generated"] + - ["java.nio", "ByteOrder", "nativeOrder", "()", "summary", "df-generated"] + - ["java.nio", "CharBuffer", "allocate", "(int)", "summary", "df-generated"] + - ["java.nio", "CharBuffer", "get", "()", "summary", "df-generated"] + - ["java.nio", "CharBuffer", "get", "(int)", "summary", "df-generated"] + - ["java.nio", "CharBuffer", "mismatch", "(CharBuffer)", "summary", "df-generated"] + - ["java.nio", "CharBuffer", "order", "()", "summary", "df-generated"] + - ["java.nio", "DoubleBuffer", "allocate", "(int)", "summary", "df-generated"] + - ["java.nio", "DoubleBuffer", "get", "()", "summary", "df-generated"] + - ["java.nio", "DoubleBuffer", "get", "(int)", "summary", "df-generated"] + - ["java.nio", "DoubleBuffer", "mismatch", "(DoubleBuffer)", "summary", "df-generated"] + - ["java.nio", "DoubleBuffer", "order", "()", "summary", "df-generated"] + - ["java.nio", "DoubleBuffer", "wrap", "(double[])", "summary", "df-generated"] + - ["java.nio", "DoubleBuffer", "wrap", "(double[],int,int)", "summary", "df-generated"] + - ["java.nio", "FloatBuffer", "allocate", "(int)", "summary", "df-generated"] + - ["java.nio", "FloatBuffer", "get", "()", "summary", "df-generated"] + - ["java.nio", "FloatBuffer", "get", "(int)", "summary", "df-generated"] + - ["java.nio", "FloatBuffer", "mismatch", "(FloatBuffer)", "summary", "df-generated"] + - ["java.nio", "FloatBuffer", "order", "()", "summary", "df-generated"] + - ["java.nio", "FloatBuffer", "wrap", "(float[])", "summary", "df-generated"] + - ["java.nio", "FloatBuffer", "wrap", "(float[],int,int)", "summary", "df-generated"] + - ["java.nio", "IntBuffer", "allocate", "(int)", "summary", "df-generated"] + - ["java.nio", "IntBuffer", "get", "()", "summary", "df-generated"] + - ["java.nio", "IntBuffer", "get", "(int)", "summary", "df-generated"] + - ["java.nio", "IntBuffer", "get", "(int[])", "summary", "df-generated"] + - ["java.nio", "IntBuffer", "mismatch", "(IntBuffer)", "summary", "df-generated"] + - ["java.nio", "IntBuffer", "order", "()", "summary", "df-generated"] + - ["java.nio", "IntBuffer", "wrap", "(int[])", "summary", "df-generated"] + - ["java.nio", "IntBuffer", "wrap", "(int[],int,int)", "summary", "df-generated"] + - ["java.nio", "LongBuffer", "allocate", "(int)", "summary", "df-generated"] + - ["java.nio", "LongBuffer", "get", "()", "summary", "df-generated"] + - ["java.nio", "LongBuffer", "get", "(int)", "summary", "df-generated"] + - ["java.nio", "LongBuffer", "mismatch", "(LongBuffer)", "summary", "df-generated"] + - ["java.nio", "LongBuffer", "order", "()", "summary", "df-generated"] + - ["java.nio", "LongBuffer", "wrap", "(long[])", "summary", "df-generated"] + - ["java.nio", "LongBuffer", "wrap", "(long[],int,int)", "summary", "df-generated"] + - ["java.nio", "MappedByteBuffer", "isLoaded", "()", "summary", "df-generated"] + - ["java.nio", "ShortBuffer", "allocate", "(int)", "summary", "df-generated"] + - ["java.nio", "ShortBuffer", "get", "()", "summary", "df-generated"] + - ["java.nio", "ShortBuffer", "get", "(int)", "summary", "df-generated"] + - ["java.nio", "ShortBuffer", "mismatch", "(ShortBuffer)", "summary", "df-generated"] + - ["java.nio", "ShortBuffer", "order", "()", "summary", "df-generated"] + - ["java.nio", "ShortBuffer", "wrap", "(short[])", "summary", "df-generated"] + - ["java.nio", "ShortBuffer", "wrap", "(short[],int,int)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/java.rmi.dgc.model.yml b/java/ql/lib/ext/generated/java.rmi.dgc.model.yml new file mode 100644 index 00000000000..18040c242d0 --- /dev/null +++ b/java/ql/lib/ext/generated/java.rmi.dgc.model.yml @@ -0,0 +1,14 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["java.rmi.dgc", "Lease", False, "Lease", "(VMID,long)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.rmi.dgc", "Lease", False, "getVMID", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["java.rmi.dgc", "Lease", "getValue", "()", "summary", "df-generated"] + - ["java.rmi.dgc", "VMID", "isUnique", "()", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/java.rmi.model.yml b/java/ql/lib/ext/generated/java.rmi.model.yml new file mode 100644 index 00000000000..0eed9da9bab --- /dev/null +++ b/java/ql/lib/ext/generated/java.rmi.model.yml @@ -0,0 +1,56 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["java.rmi", "AccessException", True, "AccessException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.rmi", "AccessException", True, "AccessException", "(String,Exception)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.rmi", "AccessException", True, "AccessException", "(String,Exception)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.rmi", "AlreadyBoundException", True, "AlreadyBoundException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.rmi", "ConnectException", True, "ConnectException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.rmi", "ConnectException", True, "ConnectException", "(String,Exception)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.rmi", "ConnectException", True, "ConnectException", "(String,Exception)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.rmi", "ConnectIOException", True, "ConnectIOException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.rmi", "ConnectIOException", True, "ConnectIOException", "(String,Exception)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.rmi", "ConnectIOException", True, "ConnectIOException", "(String,Exception)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.rmi", "MarshalException", True, "MarshalException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.rmi", "MarshalException", True, "MarshalException", "(String,Exception)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.rmi", "MarshalException", True, "MarshalException", "(String,Exception)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.rmi", "MarshalledObject", False, "get", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.rmi", "Naming", False, "list", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.rmi", "NoSuchObjectException", True, "NoSuchObjectException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.rmi", "NotBoundException", True, "NotBoundException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.rmi", "RMISecurityException", True, "RMISecurityException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.rmi", "RMISecurityException", True, "RMISecurityException", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.rmi", "RemoteException", True, "RemoteException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.rmi", "RemoteException", True, "RemoteException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.rmi", "RemoteException", True, "RemoteException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.rmi", "ServerError", True, "ServerError", "(String,Error)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.rmi", "ServerError", True, "ServerError", "(String,Error)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.rmi", "ServerException", True, "ServerException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.rmi", "ServerException", True, "ServerException", "(String,Exception)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.rmi", "ServerException", True, "ServerException", "(String,Exception)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.rmi", "ServerRuntimeException", True, "ServerRuntimeException", "(String,Exception)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.rmi", "ServerRuntimeException", True, "ServerRuntimeException", "(String,Exception)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.rmi", "StubNotFoundException", True, "StubNotFoundException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.rmi", "StubNotFoundException", True, "StubNotFoundException", "(String,Exception)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.rmi", "StubNotFoundException", True, "StubNotFoundException", "(String,Exception)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.rmi", "UnexpectedException", True, "UnexpectedException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.rmi", "UnexpectedException", True, "UnexpectedException", "(String,Exception)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.rmi", "UnexpectedException", True, "UnexpectedException", "(String,Exception)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.rmi", "UnknownHostException", True, "UnknownHostException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.rmi", "UnknownHostException", True, "UnknownHostException", "(String,Exception)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.rmi", "UnknownHostException", True, "UnknownHostException", "(String,Exception)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.rmi", "UnmarshalException", True, "UnmarshalException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.rmi", "UnmarshalException", True, "UnmarshalException", "(String,Exception)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.rmi", "UnmarshalException", True, "UnmarshalException", "(String,Exception)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["java.rmi", "MarshalledObject", "MarshalledObject", "(Object)", "summary", "df-generated"] + - ["java.rmi", "Naming", "bind", "(String,Remote)", "summary", "df-generated"] + - ["java.rmi", "Naming", "lookup", "(String)", "summary", "df-generated"] + - ["java.rmi", "Naming", "rebind", "(String,Remote)", "summary", "df-generated"] + - ["java.rmi", "Naming", "unbind", "(String)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/java.rmi.registry.model.yml b/java/ql/lib/ext/generated/java.rmi.registry.model.yml new file mode 100644 index 00000000000..5594ea1dc32 --- /dev/null +++ b/java/ql/lib/ext/generated/java.rmi.registry.model.yml @@ -0,0 +1,13 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["java.rmi.registry", "LocateRegistry", "createRegistry", "(int)", "summary", "df-generated"] + - ["java.rmi.registry", "LocateRegistry", "createRegistry", "(int,RMIClientSocketFactory,RMIServerSocketFactory)", "summary", "df-generated"] + - ["java.rmi.registry", "LocateRegistry", "getRegistry", "()", "summary", "df-generated"] + - ["java.rmi.registry", "LocateRegistry", "getRegistry", "(String)", "summary", "df-generated"] + - ["java.rmi.registry", "LocateRegistry", "getRegistry", "(String,int)", "summary", "df-generated"] + - ["java.rmi.registry", "LocateRegistry", "getRegistry", "(String,int,RMIClientSocketFactory)", "summary", "df-generated"] + - ["java.rmi.registry", "LocateRegistry", "getRegistry", "(int)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/java.rmi.server.model.yml b/java/ql/lib/ext/generated/java.rmi.server.model.yml new file mode 100644 index 00000000000..4fefb533828 --- /dev/null +++ b/java/ql/lib/ext/generated/java.rmi.server.model.yml @@ -0,0 +1,71 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["java.rmi.server", "ExportException", True, "ExportException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.rmi.server", "ExportException", True, "ExportException", "(String,Exception)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.rmi.server", "ExportException", True, "ExportException", "(String,Exception)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.rmi.server", "LogStream", True, "getOutputStream", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.rmi.server", "LogStream", True, "log", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.rmi.server", "LogStream", True, "setOutputStream", "(OutputStream)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.rmi.server", "Operation", True, "Operation", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.rmi.server", "Operation", True, "getOperation", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.rmi.server", "RMIClassLoader", True, "getClassLoader", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.rmi.server", "RMIClassLoader", True, "getSecurityContext", "(ClassLoader)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.rmi.server", "RMIClassLoaderSpi", True, "getClassLoader", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.rmi.server", "RMIClientSocketFactory", True, "createSocket", "(String,int)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.rmi.server", "RemoteObject", True, "getRef", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.rmi.server", "RemoteObject", True, "toStub", "(Remote)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.rmi.server", "RemoteObjectInvocationHandler", True, "RemoteObjectInvocationHandler", "(RemoteRef)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.rmi.server", "ServerCloneException", True, "ServerCloneException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.rmi.server", "ServerCloneException", True, "ServerCloneException", "(String,Exception)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.rmi.server", "ServerCloneException", True, "ServerCloneException", "(String,Exception)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.rmi.server", "ServerNotActiveException", True, "ServerNotActiveException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.rmi.server", "SkeletonMismatchException", True, "SkeletonMismatchException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.rmi.server", "SkeletonNotFoundException", True, "SkeletonNotFoundException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.rmi.server", "SkeletonNotFoundException", True, "SkeletonNotFoundException", "(String,Exception)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.rmi.server", "SkeletonNotFoundException", True, "SkeletonNotFoundException", "(String,Exception)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.rmi.server", "SocketSecurityException", True, "SocketSecurityException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.rmi.server", "SocketSecurityException", True, "SocketSecurityException", "(String,Exception)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.rmi.server", "SocketSecurityException", True, "SocketSecurityException", "(String,Exception)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.rmi.server", "UnicastRemoteObject", True, "exportObject", "(Remote,int,ObjectInputFilter)", "", "Argument[2]", "Argument[0]", "taint", "df-generated"] + - ["java.rmi.server", "UnicastRemoteObject", True, "exportObject", "(Remote,int,RMIClientSocketFactory,RMIServerSocketFactory,ObjectInputFilter)", "", "Argument[4]", "Argument[0]", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["java.rmi.server", "LogStream", "getDefaultStream", "()", "summary", "df-generated"] + - ["java.rmi.server", "LogStream", "parseLevel", "(String)", "summary", "df-generated"] + - ["java.rmi.server", "LogStream", "setDefaultStream", "(PrintStream)", "summary", "df-generated"] + - ["java.rmi.server", "ObjID", "ObjID", "(int)", "summary", "df-generated"] + - ["java.rmi.server", "ObjID", "read", "(ObjectInput)", "summary", "df-generated"] + - ["java.rmi.server", "ObjID", "write", "(ObjectOutput)", "summary", "df-generated"] + - ["java.rmi.server", "RMIClassLoader", "getClassAnnotation", "(Class)", "summary", "df-generated"] + - ["java.rmi.server", "RMIClassLoader", "getDefaultProviderInstance", "()", "summary", "df-generated"] + - ["java.rmi.server", "RMIClassLoader", "loadClass", "(String)", "summary", "df-generated"] + - ["java.rmi.server", "RMIClassLoader", "loadClass", "(String,String)", "summary", "df-generated"] + - ["java.rmi.server", "RMIClassLoader", "loadClass", "(String,String,ClassLoader)", "summary", "df-generated"] + - ["java.rmi.server", "RMIClassLoader", "loadClass", "(URL,String)", "summary", "df-generated"] + - ["java.rmi.server", "RMIClassLoader", "loadProxyClass", "(String,String[],ClassLoader)", "summary", "df-generated"] + - ["java.rmi.server", "RMIClassLoaderSpi", "getClassAnnotation", "(Class)", "summary", "df-generated"] + - ["java.rmi.server", "RMIClassLoaderSpi", "loadClass", "(String,String,ClassLoader)", "summary", "df-generated"] + - ["java.rmi.server", "RMIClassLoaderSpi", "loadProxyClass", "(String,String[],ClassLoader)", "summary", "df-generated"] + - ["java.rmi.server", "RMIServerSocketFactory", "createServerSocket", "(int)", "summary", "df-generated"] + - ["java.rmi.server", "RMISocketFactory", "getDefaultSocketFactory", "()", "summary", "df-generated"] + - ["java.rmi.server", "RMISocketFactory", "getFailureHandler", "()", "summary", "df-generated"] + - ["java.rmi.server", "RMISocketFactory", "getSocketFactory", "()", "summary", "df-generated"] + - ["java.rmi.server", "RMISocketFactory", "setFailureHandler", "(RMIFailureHandler)", "summary", "df-generated"] + - ["java.rmi.server", "RMISocketFactory", "setSocketFactory", "(RMISocketFactory)", "summary", "df-generated"] + - ["java.rmi.server", "RemoteServer", "getClientHost", "()", "summary", "df-generated"] + - ["java.rmi.server", "RemoteServer", "getLog", "()", "summary", "df-generated"] + - ["java.rmi.server", "RemoteServer", "setLog", "(OutputStream)", "summary", "df-generated"] + - ["java.rmi.server", "UID", "UID", "(short)", "summary", "df-generated"] + - ["java.rmi.server", "UID", "read", "(DataInput)", "summary", "df-generated"] + - ["java.rmi.server", "UID", "write", "(DataOutput)", "summary", "df-generated"] + - ["java.rmi.server", "UnicastRemoteObject", "exportObject", "(Remote)", "summary", "df-generated"] + - ["java.rmi.server", "UnicastRemoteObject", "exportObject", "(Remote,int)", "summary", "df-generated"] + - ["java.rmi.server", "UnicastRemoteObject", "exportObject", "(Remote,int,RMIClientSocketFactory,RMIServerSocketFactory)", "summary", "df-generated"] + - ["java.rmi.server", "UnicastRemoteObject", "unexportObject", "(Remote,boolean)", "summary", "df-generated"] + - ["java.rmi.server", "Unreferenced", "unreferenced", "()", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/java.security.cert.model.yml b/java/ql/lib/ext/generated/java.security.cert.model.yml new file mode 100644 index 00000000000..7f08c1a7d20 --- /dev/null +++ b/java/ql/lib/ext/generated/java.security.cert.model.yml @@ -0,0 +1,281 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["java.security.cert", "CRL", True, "getType", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "CRLException", True, "CRLException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "CRLException", True, "CRLException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "CRLException", True, "CRLException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "CRLException", True, "CRLException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "CertPath", True, "getType", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "CertPathBuilder", True, "build", "(CertPathParameters)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "CertPathBuilder", True, "getAlgorithm", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "CertPathBuilder", True, "getInstance", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "CertPathBuilder", True, "getInstance", "(String,Provider)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "CertPathBuilder", True, "getInstance", "(String,Provider)", "", "Argument[1].Element", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "CertPathBuilder", True, "getInstance", "(String,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "CertPathBuilder", True, "getProvider", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "CertPathBuilderException", True, "CertPathBuilderException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "CertPathBuilderException", True, "CertPathBuilderException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "CertPathBuilderException", True, "CertPathBuilderException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "CertPathBuilderException", True, "CertPathBuilderException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "CertPathBuilderResult", True, "getCertPath", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "CertPathValidator", True, "getAlgorithm", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "CertPathValidator", True, "getInstance", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "CertPathValidator", True, "getInstance", "(String,Provider)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "CertPathValidator", True, "getInstance", "(String,Provider)", "", "Argument[1].Element", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "CertPathValidator", True, "getInstance", "(String,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "CertPathValidator", True, "getProvider", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "CertPathValidator", True, "validate", "(CertPath,CertPathParameters)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "CertPathValidatorException", True, "CertPathValidatorException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "CertPathValidatorException", True, "CertPathValidatorException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "CertPathValidatorException", True, "CertPathValidatorException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "CertPathValidatorException", True, "CertPathValidatorException", "(String,Throwable,CertPath,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "CertPathValidatorException", True, "CertPathValidatorException", "(String,Throwable,CertPath,int)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "CertPathValidatorException", True, "CertPathValidatorException", "(String,Throwable,CertPath,int)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "CertPathValidatorException", True, "CertPathValidatorException", "(String,Throwable,CertPath,int,CertPathValidatorException$Reason)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "CertPathValidatorException", True, "CertPathValidatorException", "(String,Throwable,CertPath,int,CertPathValidatorException$Reason)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "CertPathValidatorException", True, "CertPathValidatorException", "(String,Throwable,CertPath,int,CertPathValidatorException$Reason)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "CertPathValidatorException", True, "CertPathValidatorException", "(String,Throwable,CertPath,int,CertPathValidatorException$Reason)", "", "Argument[4]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "CertPathValidatorException", True, "CertPathValidatorException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "CertPathValidatorException", True, "getCertPath", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "CertPathValidatorException", True, "getReason", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "CertStore", True, "getCertStoreParameters", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "CertStoreException", True, "CertStoreException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "CertStoreException", True, "CertStoreException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "CertStoreException", True, "CertStoreException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "CertStoreException", True, "CertStoreException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "Certificate", True, "getType", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "CertificateEncodingException", True, "CertificateEncodingException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "CertificateEncodingException", True, "CertificateEncodingException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "CertificateEncodingException", True, "CertificateEncodingException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "CertificateEncodingException", True, "CertificateEncodingException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "CertificateException", True, "CertificateException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "CertificateException", True, "CertificateException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "CertificateException", True, "CertificateException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "CertificateException", True, "CertificateException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "CertificateExpiredException", True, "CertificateExpiredException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "CertificateNotYetValidException", True, "CertificateNotYetValidException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "CertificateParsingException", True, "CertificateParsingException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "CertificateParsingException", True, "CertificateParsingException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "CertificateParsingException", True, "CertificateParsingException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "CertificateParsingException", True, "CertificateParsingException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "CertificateRevokedException", True, "CertificateRevokedException", "(Date,CRLReason,X500Principal,Map)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "CertificateRevokedException", True, "CertificateRevokedException", "(Date,CRLReason,X500Principal,Map)", "", "Argument[3].Element", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "CertificateRevokedException", True, "getAuthorityName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "CertificateRevokedException", True, "getExtensions", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "CertificateRevokedException", True, "getRevocationDate", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "CollectionCertStoreParameters", True, "CollectionCertStoreParameters", "(Collection)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "CollectionCertStoreParameters", True, "getCollection", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "LDAPCertStoreParameters", True, "LDAPCertStoreParameters", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "LDAPCertStoreParameters", True, "LDAPCertStoreParameters", "(String,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "LDAPCertStoreParameters", True, "getServerName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "PKIXBuilderParameters", True, "PKIXBuilderParameters", "(KeyStore,CertSelector)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "PKIXBuilderParameters", True, "PKIXBuilderParameters", "(Set,CertSelector)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "PKIXBuilderParameters", True, "PKIXBuilderParameters", "(Set,CertSelector)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "PKIXCertPathBuilderResult", True, "PKIXCertPathBuilderResult", "(CertPath,TrustAnchor,PolicyNode,PublicKey)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "PKIXCertPathBuilderResult", True, "PKIXCertPathBuilderResult", "(CertPath,TrustAnchor,PolicyNode,PublicKey)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "PKIXCertPathBuilderResult", True, "PKIXCertPathBuilderResult", "(CertPath,TrustAnchor,PolicyNode,PublicKey)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "PKIXCertPathBuilderResult", True, "PKIXCertPathBuilderResult", "(CertPath,TrustAnchor,PolicyNode,PublicKey)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "PKIXCertPathValidatorResult", True, "PKIXCertPathValidatorResult", "(TrustAnchor,PolicyNode,PublicKey)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "PKIXCertPathValidatorResult", True, "PKIXCertPathValidatorResult", "(TrustAnchor,PolicyNode,PublicKey)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "PKIXCertPathValidatorResult", True, "PKIXCertPathValidatorResult", "(TrustAnchor,PolicyNode,PublicKey)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "PKIXCertPathValidatorResult", True, "getPolicyTree", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "PKIXCertPathValidatorResult", True, "getPublicKey", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "PKIXCertPathValidatorResult", True, "getTrustAnchor", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "PKIXParameters", True, "setInitialPolicies", "(Set)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "PKIXRevocationChecker", True, "getOcspExtensions", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "PKIXRevocationChecker", True, "getOcspResponder", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "PKIXRevocationChecker", True, "getOcspResponderCert", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "PKIXRevocationChecker", True, "getOcspResponses", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "PKIXRevocationChecker", True, "getOptions", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "PKIXRevocationChecker", True, "setOcspExtensions", "(List)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "PKIXRevocationChecker", True, "setOcspResponder", "(URI)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "PKIXRevocationChecker", True, "setOcspResponderCert", "(X509Certificate)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "PKIXRevocationChecker", True, "setOcspResponses", "(Map)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "PKIXRevocationChecker", True, "setOptions", "(Set)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "PolicyQualifierInfo", True, "PolicyQualifierInfo", "(byte[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "PolicyQualifierInfo", True, "getEncoded", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "PolicyQualifierInfo", True, "getPolicyQualifier", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "PolicyQualifierInfo", True, "getPolicyQualifierId", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "TrustAnchor", True, "TrustAnchor", "(String,PublicKey,byte[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "TrustAnchor", True, "TrustAnchor", "(String,PublicKey,byte[])", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "TrustAnchor", True, "TrustAnchor", "(String,PublicKey,byte[])", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "TrustAnchor", True, "TrustAnchor", "(X500Principal,PublicKey,byte[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "TrustAnchor", True, "TrustAnchor", "(X500Principal,PublicKey,byte[])", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "TrustAnchor", True, "TrustAnchor", "(X500Principal,PublicKey,byte[])", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "TrustAnchor", True, "TrustAnchor", "(X509Certificate,byte[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "TrustAnchor", True, "TrustAnchor", "(X509Certificate,byte[])", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "TrustAnchor", True, "getCA", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "TrustAnchor", True, "getCAName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "TrustAnchor", True, "getCAPublicKey", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "TrustAnchor", True, "getNameConstraints", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "TrustAnchor", True, "getTrustedCert", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "URICertStoreParameters", False, "URICertStoreParameters", "(URI)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "URICertStoreParameters", False, "getURI", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "X509CRL", True, "getIssuerX500Principal", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "X509CRL", True, "getRevokedCertificate", "(X509Certificate)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "X509CRLSelector", True, "addIssuer", "(X500Principal)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "X509CRLSelector", True, "addIssuerName", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "X509CRLSelector", True, "addIssuerName", "(byte[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "X509CRLSelector", True, "getCertificateChecking", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "X509CRLSelector", True, "getDateAndTime", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "X509CRLSelector", True, "getIssuerNames", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "X509CRLSelector", True, "getIssuers", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "X509CRLSelector", True, "setCertificateChecking", "(X509Certificate)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "X509CRLSelector", True, "setIssuerNames", "(Collection)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "X509CRLSelector", True, "setIssuers", "(Collection)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "X509CertSelector", True, "getAuthorityKeyIdentifier", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "X509CertSelector", True, "getCertificate", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "X509CertSelector", True, "getCertificateValid", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "X509CertSelector", True, "getExtendedKeyUsage", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "X509CertSelector", True, "getIssuer", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "X509CertSelector", True, "getNameConstraints", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "X509CertSelector", True, "getPathToNames", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "X509CertSelector", True, "getPolicy", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "X509CertSelector", True, "getPrivateKeyValid", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "X509CertSelector", True, "getSubject", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "X509CertSelector", True, "getSubjectAlternativeNames", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "X509CertSelector", True, "getSubjectKeyIdentifier", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "X509CertSelector", True, "getSubjectPublicKey", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "X509CertSelector", True, "getSubjectPublicKeyAlgID", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "X509CertSelector", True, "setAuthorityKeyIdentifier", "(byte[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "X509CertSelector", True, "setCertificate", "(X509Certificate)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "X509CertSelector", True, "setCertificateValid", "(Date)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "X509CertSelector", True, "setExtendedKeyUsage", "(Set)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "X509CertSelector", True, "setIssuer", "(X500Principal)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "X509CertSelector", True, "setNameConstraints", "(byte[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "X509CertSelector", True, "setPolicy", "(Set)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "X509CertSelector", True, "setPrivateKeyValid", "(Date)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "X509CertSelector", True, "setSubject", "(X500Principal)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "X509CertSelector", True, "setSubjectKeyIdentifier", "(byte[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "X509CertSelector", True, "setSubjectPublicKey", "(PublicKey)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "X509CertSelector", True, "setSubjectPublicKey", "(byte[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "X509CertSelector", True, "setSubjectPublicKeyAlgID", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "X509Certificate", True, "getIssuerX500Principal", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "X509Certificate", True, "getSubjectX500Principal", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["java.security.cert", "CRL", "isRevoked", "(Certificate)", "summary", "df-generated"] + - ["java.security.cert", "CRLSelector", "match", "(CRL)", "summary", "df-generated"] + - ["java.security.cert", "CertPath", "getCertificates", "()", "summary", "df-generated"] + - ["java.security.cert", "CertPath", "getEncoded", "()", "summary", "df-generated"] + - ["java.security.cert", "CertPath", "getEncoded", "(String)", "summary", "df-generated"] + - ["java.security.cert", "CertPath", "getEncodings", "()", "summary", "df-generated"] + - ["java.security.cert", "CertPathBuilder", "getDefaultType", "()", "summary", "df-generated"] + - ["java.security.cert", "CertPathBuilder", "getRevocationChecker", "()", "summary", "df-generated"] + - ["java.security.cert", "CertPathBuilderSpi", "engineBuild", "(CertPathParameters)", "summary", "df-generated"] + - ["java.security.cert", "CertPathBuilderSpi", "engineGetRevocationChecker", "()", "summary", "df-generated"] + - ["java.security.cert", "CertPathChecker", "check", "(Certificate)", "summary", "df-generated"] + - ["java.security.cert", "CertPathChecker", "init", "(boolean)", "summary", "df-generated"] + - ["java.security.cert", "CertPathChecker", "isForwardCheckingSupported", "()", "summary", "df-generated"] + - ["java.security.cert", "CertPathValidator", "getDefaultType", "()", "summary", "df-generated"] + - ["java.security.cert", "CertPathValidator", "getRevocationChecker", "()", "summary", "df-generated"] + - ["java.security.cert", "CertPathValidatorException", "getIndex", "()", "summary", "df-generated"] + - ["java.security.cert", "CertPathValidatorSpi", "engineGetRevocationChecker", "()", "summary", "df-generated"] + - ["java.security.cert", "CertPathValidatorSpi", "engineValidate", "(CertPath,CertPathParameters)", "summary", "df-generated"] + - ["java.security.cert", "CertSelector", "match", "(Certificate)", "summary", "df-generated"] + - ["java.security.cert", "CertStoreSpi", "CertStoreSpi", "(CertStoreParameters)", "summary", "df-generated"] + - ["java.security.cert", "CertStoreSpi", "engineGetCRLs", "(CRLSelector)", "summary", "df-generated"] + - ["java.security.cert", "CertStoreSpi", "engineGetCertificates", "(CertSelector)", "summary", "df-generated"] + - ["java.security.cert", "Certificate", "getEncoded", "()", "summary", "df-generated"] + - ["java.security.cert", "Certificate", "getPublicKey", "()", "summary", "df-generated"] + - ["java.security.cert", "Certificate", "verify", "(PublicKey)", "summary", "df-generated"] + - ["java.security.cert", "Certificate", "verify", "(PublicKey,Provider)", "summary", "df-generated"] + - ["java.security.cert", "Certificate", "verify", "(PublicKey,String)", "summary", "df-generated"] + - ["java.security.cert", "CertificateFactorySpi", "engineGenerateCRL", "(InputStream)", "summary", "df-generated"] + - ["java.security.cert", "CertificateFactorySpi", "engineGenerateCRLs", "(InputStream)", "summary", "df-generated"] + - ["java.security.cert", "CertificateFactorySpi", "engineGenerateCertPath", "(InputStream)", "summary", "df-generated"] + - ["java.security.cert", "CertificateFactorySpi", "engineGenerateCertPath", "(InputStream,String)", "summary", "df-generated"] + - ["java.security.cert", "CertificateFactorySpi", "engineGenerateCertPath", "(List)", "summary", "df-generated"] + - ["java.security.cert", "CertificateFactorySpi", "engineGenerateCertificate", "(InputStream)", "summary", "df-generated"] + - ["java.security.cert", "CertificateFactorySpi", "engineGenerateCertificates", "(InputStream)", "summary", "df-generated"] + - ["java.security.cert", "CertificateFactorySpi", "engineGetCertPathEncodings", "()", "summary", "df-generated"] + - ["java.security.cert", "CertificateRevokedException", "getInvalidityDate", "()", "summary", "df-generated"] + - ["java.security.cert", "CertificateRevokedException", "getRevocationReason", "()", "summary", "df-generated"] + - ["java.security.cert", "LDAPCertStoreParameters", "getPort", "()", "summary", "df-generated"] + - ["java.security.cert", "PKIXBuilderParameters", "getMaxPathLength", "()", "summary", "df-generated"] + - ["java.security.cert", "PKIXBuilderParameters", "setMaxPathLength", "(int)", "summary", "df-generated"] + - ["java.security.cert", "PKIXCertPathChecker", "check", "(Certificate,Collection)", "summary", "df-generated"] + - ["java.security.cert", "PKIXCertPathChecker", "getSupportedExtensions", "()", "summary", "df-generated"] + - ["java.security.cert", "PKIXParameters", "isAnyPolicyInhibited", "()", "summary", "df-generated"] + - ["java.security.cert", "PKIXParameters", "isExplicitPolicyRequired", "()", "summary", "df-generated"] + - ["java.security.cert", "PKIXParameters", "isPolicyMappingInhibited", "()", "summary", "df-generated"] + - ["java.security.cert", "PKIXParameters", "isRevocationEnabled", "()", "summary", "df-generated"] + - ["java.security.cert", "PKIXParameters", "setExplicitPolicyRequired", "(boolean)", "summary", "df-generated"] + - ["java.security.cert", "PKIXParameters", "setPolicyMappingInhibited", "(boolean)", "summary", "df-generated"] + - ["java.security.cert", "PKIXParameters", "setPolicyQualifiersRejected", "(boolean)", "summary", "df-generated"] + - ["java.security.cert", "PKIXParameters", "setRevocationEnabled", "(boolean)", "summary", "df-generated"] + - ["java.security.cert", "PKIXRevocationChecker", "getSoftFailExceptions", "()", "summary", "df-generated"] + - ["java.security.cert", "X509CRL", "getEncoded", "()", "summary", "df-generated"] + - ["java.security.cert", "X509CRL", "getIssuerDN", "()", "summary", "df-generated"] + - ["java.security.cert", "X509CRL", "getNextUpdate", "()", "summary", "df-generated"] + - ["java.security.cert", "X509CRL", "getRevokedCertificate", "(BigInteger)", "summary", "df-generated"] + - ["java.security.cert", "X509CRL", "getRevokedCertificates", "()", "summary", "df-generated"] + - ["java.security.cert", "X509CRL", "getSigAlgName", "()", "summary", "df-generated"] + - ["java.security.cert", "X509CRL", "getSigAlgOID", "()", "summary", "df-generated"] + - ["java.security.cert", "X509CRL", "getSigAlgParams", "()", "summary", "df-generated"] + - ["java.security.cert", "X509CRL", "getSignature", "()", "summary", "df-generated"] + - ["java.security.cert", "X509CRL", "getTBSCertList", "()", "summary", "df-generated"] + - ["java.security.cert", "X509CRL", "getThisUpdate", "()", "summary", "df-generated"] + - ["java.security.cert", "X509CRL", "getVersion", "()", "summary", "df-generated"] + - ["java.security.cert", "X509CRL", "verify", "(PublicKey)", "summary", "df-generated"] + - ["java.security.cert", "X509CRL", "verify", "(PublicKey,Provider)", "summary", "df-generated"] + - ["java.security.cert", "X509CRL", "verify", "(PublicKey,String)", "summary", "df-generated"] + - ["java.security.cert", "X509CRLEntry", "getCertificateIssuer", "()", "summary", "df-generated"] + - ["java.security.cert", "X509CRLEntry", "getEncoded", "()", "summary", "df-generated"] + - ["java.security.cert", "X509CRLEntry", "getRevocationDate", "()", "summary", "df-generated"] + - ["java.security.cert", "X509CRLEntry", "getRevocationReason", "()", "summary", "df-generated"] + - ["java.security.cert", "X509CRLEntry", "getSerialNumber", "()", "summary", "df-generated"] + - ["java.security.cert", "X509CRLEntry", "hasExtensions", "()", "summary", "df-generated"] + - ["java.security.cert", "X509CRLSelector", "getMaxCRL", "()", "summary", "df-generated"] + - ["java.security.cert", "X509CRLSelector", "getMinCRL", "()", "summary", "df-generated"] + - ["java.security.cert", "X509CRLSelector", "setDateAndTime", "(Date)", "summary", "df-generated"] + - ["java.security.cert", "X509CRLSelector", "setMaxCRLNumber", "(BigInteger)", "summary", "df-generated"] + - ["java.security.cert", "X509CRLSelector", "setMinCRLNumber", "(BigInteger)", "summary", "df-generated"] + - ["java.security.cert", "X509CertSelector", "addPathToName", "(int,String)", "summary", "df-generated"] + - ["java.security.cert", "X509CertSelector", "addPathToName", "(int,byte[])", "summary", "df-generated"] + - ["java.security.cert", "X509CertSelector", "addSubjectAlternativeName", "(int,String)", "summary", "df-generated"] + - ["java.security.cert", "X509CertSelector", "addSubjectAlternativeName", "(int,byte[])", "summary", "df-generated"] + - ["java.security.cert", "X509CertSelector", "getBasicConstraints", "()", "summary", "df-generated"] + - ["java.security.cert", "X509CertSelector", "getIssuerAsBytes", "()", "summary", "df-generated"] + - ["java.security.cert", "X509CertSelector", "getIssuerAsString", "()", "summary", "df-generated"] + - ["java.security.cert", "X509CertSelector", "getKeyUsage", "()", "summary", "df-generated"] + - ["java.security.cert", "X509CertSelector", "getMatchAllSubjectAltNames", "()", "summary", "df-generated"] + - ["java.security.cert", "X509CertSelector", "getSerialNumber", "()", "summary", "df-generated"] + - ["java.security.cert", "X509CertSelector", "getSubjectAsBytes", "()", "summary", "df-generated"] + - ["java.security.cert", "X509CertSelector", "getSubjectAsString", "()", "summary", "df-generated"] + - ["java.security.cert", "X509CertSelector", "setBasicConstraints", "(int)", "summary", "df-generated"] + - ["java.security.cert", "X509CertSelector", "setIssuer", "(String)", "summary", "df-generated"] + - ["java.security.cert", "X509CertSelector", "setIssuer", "(byte[])", "summary", "df-generated"] + - ["java.security.cert", "X509CertSelector", "setKeyUsage", "(boolean[])", "summary", "df-generated"] + - ["java.security.cert", "X509CertSelector", "setMatchAllSubjectAltNames", "(boolean)", "summary", "df-generated"] + - ["java.security.cert", "X509CertSelector", "setPathToNames", "(Collection)", "summary", "df-generated"] + - ["java.security.cert", "X509CertSelector", "setSerialNumber", "(BigInteger)", "summary", "df-generated"] + - ["java.security.cert", "X509CertSelector", "setSubject", "(String)", "summary", "df-generated"] + - ["java.security.cert", "X509CertSelector", "setSubject", "(byte[])", "summary", "df-generated"] + - ["java.security.cert", "X509CertSelector", "setSubjectAlternativeNames", "(Collection)", "summary", "df-generated"] + - ["java.security.cert", "X509Certificate", "checkValidity", "()", "summary", "df-generated"] + - ["java.security.cert", "X509Certificate", "checkValidity", "(Date)", "summary", "df-generated"] + - ["java.security.cert", "X509Certificate", "getBasicConstraints", "()", "summary", "df-generated"] + - ["java.security.cert", "X509Certificate", "getExtendedKeyUsage", "()", "summary", "df-generated"] + - ["java.security.cert", "X509Certificate", "getIssuerAlternativeNames", "()", "summary", "df-generated"] + - ["java.security.cert", "X509Certificate", "getIssuerDN", "()", "summary", "df-generated"] + - ["java.security.cert", "X509Certificate", "getIssuerUniqueID", "()", "summary", "df-generated"] + - ["java.security.cert", "X509Certificate", "getKeyUsage", "()", "summary", "df-generated"] + - ["java.security.cert", "X509Certificate", "getNotAfter", "()", "summary", "df-generated"] + - ["java.security.cert", "X509Certificate", "getNotBefore", "()", "summary", "df-generated"] + - ["java.security.cert", "X509Certificate", "getSerialNumber", "()", "summary", "df-generated"] + - ["java.security.cert", "X509Certificate", "getSigAlgName", "()", "summary", "df-generated"] + - ["java.security.cert", "X509Certificate", "getSigAlgOID", "()", "summary", "df-generated"] + - ["java.security.cert", "X509Certificate", "getSigAlgParams", "()", "summary", "df-generated"] + - ["java.security.cert", "X509Certificate", "getSignature", "()", "summary", "df-generated"] + - ["java.security.cert", "X509Certificate", "getSubjectAlternativeNames", "()", "summary", "df-generated"] + - ["java.security.cert", "X509Certificate", "getSubjectDN", "()", "summary", "df-generated"] + - ["java.security.cert", "X509Certificate", "getSubjectUniqueID", "()", "summary", "df-generated"] + - ["java.security.cert", "X509Certificate", "getTBSCertificate", "()", "summary", "df-generated"] + - ["java.security.cert", "X509Certificate", "getVersion", "()", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/java.security.interfaces.model.yml b/java/ql/lib/ext/generated/java.security.interfaces.model.yml new file mode 100644 index 00000000000..cced4d3efc9 --- /dev/null +++ b/java/ql/lib/ext/generated/java.security.interfaces.model.yml @@ -0,0 +1,10 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["java.security.interfaces", "DSAParams", "getG", "()", "summary", "df-generated"] + - ["java.security.interfaces", "DSAParams", "getP", "()", "summary", "df-generated"] + - ["java.security.interfaces", "DSAParams", "getQ", "()", "summary", "df-generated"] + - ["java.security.interfaces", "RSAKey", "getParams", "()", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/java.security.model.yml b/java/ql/lib/ext/generated/java.security.model.yml new file mode 100644 index 00000000000..15b410e1fe8 --- /dev/null +++ b/java/ql/lib/ext/generated/java.security.model.yml @@ -0,0 +1,454 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["java.security", "AccessControlContext", False, "AccessControlContext", "(AccessControlContext,DomainCombiner)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "AccessControlContext", False, "AccessControlContext", "(AccessControlContext,DomainCombiner)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "AccessControlContext", False, "AccessControlContext", "(ProtectionDomain[])", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["java.security", "AccessControlContext", False, "getDomainCombiner", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "AccessControlException", True, "AccessControlException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "AccessControlException", True, "AccessControlException", "(String,Permission)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "AccessControlException", True, "AccessControlException", "(String,Permission)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "AccessControlException", True, "getPermission", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "AccessController", False, "doPrivileged", "(PrivilegedAction)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "AccessController", False, "doPrivileged", "(PrivilegedAction,AccessControlContext)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "AccessController", False, "doPrivileged", "(PrivilegedAction,AccessControlContext,Permission[])", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "AccessController", False, "doPrivileged", "(PrivilegedExceptionAction)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "AccessController", False, "doPrivileged", "(PrivilegedExceptionAction,AccessControlContext)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "AccessController", False, "doPrivileged", "(PrivilegedExceptionAction,AccessControlContext,Permission[])", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "AccessController", False, "doPrivilegedWithCombiner", "(PrivilegedAction)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "AccessController", False, "doPrivilegedWithCombiner", "(PrivilegedAction,AccessControlContext,Permission[])", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "AccessController", False, "doPrivilegedWithCombiner", "(PrivilegedExceptionAction)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "AccessController", False, "doPrivilegedWithCombiner", "(PrivilegedExceptionAction,AccessControlContext,Permission[])", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "AlgorithmParameterGenerator", True, "getAlgorithm", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "AlgorithmParameterGenerator", True, "getInstance", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "AlgorithmParameterGenerator", True, "getInstance", "(String,Provider)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "AlgorithmParameterGenerator", True, "getInstance", "(String,Provider)", "", "Argument[1].Element", "ReturnValue", "taint", "df-generated"] + - ["java.security", "AlgorithmParameterGenerator", True, "getInstance", "(String,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "AlgorithmParameterGenerator", True, "getProvider", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "AlgorithmParameterGenerator", True, "init", "(AlgorithmParameterSpec,SecureRandom)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "AlgorithmParameterGenerator", True, "init", "(int,SecureRandom)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "AlgorithmParameters", True, "getAlgorithm", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "AlgorithmParameters", True, "getEncoded", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "AlgorithmParameters", True, "getEncoded", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "AlgorithmParameters", True, "getInstance", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "AlgorithmParameters", True, "getInstance", "(String,Provider)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "AlgorithmParameters", True, "getInstance", "(String,Provider)", "", "Argument[1].Element", "ReturnValue", "taint", "df-generated"] + - ["java.security", "AlgorithmParameters", True, "getInstance", "(String,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "AlgorithmParameters", True, "getParameterSpec", "(Class)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "AlgorithmParameters", True, "getProvider", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "AlgorithmParameters", True, "init", "(AlgorithmParameterSpec)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "AlgorithmParameters", True, "init", "(byte[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "AlgorithmParameters", True, "init", "(byte[],String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "BasicPermission", True, "BasicPermission", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "BasicPermission", True, "BasicPermission", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "CodeSigner", False, "CodeSigner", "(CertPath,Timestamp)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "CodeSigner", False, "CodeSigner", "(CertPath,Timestamp)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "CodeSigner", False, "getSignerCertPath", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "CodeSigner", False, "getTimestamp", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "DigestException", True, "DigestException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "DigestException", True, "DigestException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "DigestException", True, "DigestException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "DigestException", True, "DigestException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "DigestInputStream", True, "DigestInputStream", "(InputStream,MessageDigest)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "DigestInputStream", True, "DigestInputStream", "(InputStream,MessageDigest)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "DigestInputStream", True, "getMessageDigest", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "DigestInputStream", True, "setMessageDigest", "(MessageDigest)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "DigestOutputStream", True, "DigestOutputStream", "(OutputStream,MessageDigest)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "DigestOutputStream", True, "DigestOutputStream", "(OutputStream,MessageDigest)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "DigestOutputStream", True, "getMessageDigest", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "DigestOutputStream", True, "setMessageDigest", "(MessageDigest)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "DomainCombiner", True, "combine", "(ProtectionDomain[],ProtectionDomain[])", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["java.security", "DomainCombiner", True, "combine", "(ProtectionDomain[],ProtectionDomain[])", "", "Argument[0].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["java.security", "DomainCombiner", True, "combine", "(ProtectionDomain[],ProtectionDomain[])", "", "Argument[1].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["java.security", "DomainCombiner", True, "combine", "(ProtectionDomain[],ProtectionDomain[])", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "DomainLoadStoreParameter", False, "DomainLoadStoreParameter", "(URI,Map)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "DomainLoadStoreParameter", False, "DomainLoadStoreParameter", "(URI,Map)", "", "Argument[1].Element", "Argument[this]", "taint", "df-generated"] + - ["java.security", "DomainLoadStoreParameter", False, "getConfiguration", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "DomainLoadStoreParameter", False, "getProtectionParams", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "DrbgParameters$Instantiation", False, "getPersonalizationString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "DrbgParameters$NextBytes", False, "getAdditionalInput", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "DrbgParameters$Reseed", False, "getAdditionalInput", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "DrbgParameters", True, "instantiation", "(int,DrbgParameters$Capability,byte[])", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "DrbgParameters", True, "nextBytes", "(int,boolean,byte[])", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "DrbgParameters", True, "reseed", "(boolean,byte[])", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "GeneralSecurityException", True, "GeneralSecurityException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "GeneralSecurityException", True, "GeneralSecurityException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "GeneralSecurityException", True, "GeneralSecurityException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "GeneralSecurityException", True, "GeneralSecurityException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "GuardedObject", True, "GuardedObject", "(Object,Guard)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "GuardedObject", True, "GuardedObject", "(Object,Guard)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "GuardedObject", True, "getObject", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "Identity", True, "Identity", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "Identity", True, "Identity", "(String,IdentityScope)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "Identity", True, "Identity", "(String,IdentityScope)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "Identity", True, "addCertificate", "(Certificate)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "Identity", True, "certificates", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "Identity", True, "getInfo", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "Identity", True, "getPublicKey", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "Identity", True, "getScope", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "Identity", True, "setInfo", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "Identity", True, "setPublicKey", "(PublicKey)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "IdentityScope", True, "IdentityScope", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "IdentityScope", True, "IdentityScope", "(String,IdentityScope)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "IdentityScope", True, "IdentityScope", "(String,IdentityScope)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "InvalidAlgorithmParameterException", True, "InvalidAlgorithmParameterException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "InvalidAlgorithmParameterException", True, "InvalidAlgorithmParameterException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "InvalidAlgorithmParameterException", True, "InvalidAlgorithmParameterException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "InvalidAlgorithmParameterException", True, "InvalidAlgorithmParameterException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "InvalidKeyException", True, "InvalidKeyException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "InvalidKeyException", True, "InvalidKeyException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "InvalidKeyException", True, "InvalidKeyException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "InvalidKeyException", True, "InvalidKeyException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "InvalidParameterException", True, "InvalidParameterException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "Key", True, "getAlgorithm", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "Key", True, "getEncoded", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "KeyException", True, "KeyException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "KeyException", True, "KeyException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "KeyException", True, "KeyException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "KeyException", True, "KeyException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "KeyFactory", True, "generatePrivate", "(KeySpec)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "KeyFactory", True, "generatePublic", "(KeySpec)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "KeyFactory", True, "getAlgorithm", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "KeyFactory", True, "getInstance", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "KeyFactory", True, "getInstance", "(String,Provider)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "KeyFactory", True, "getInstance", "(String,Provider)", "", "Argument[1].Element", "ReturnValue", "taint", "df-generated"] + - ["java.security", "KeyFactory", True, "getInstance", "(String,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "KeyFactory", True, "getKeySpec", "(Key,Class)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "KeyFactory", True, "getProvider", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "KeyFactory", True, "translateKey", "(Key)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "KeyManagementException", True, "KeyManagementException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "KeyManagementException", True, "KeyManagementException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "KeyManagementException", True, "KeyManagementException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "KeyManagementException", True, "KeyManagementException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "KeyPair", False, "KeyPair", "(PublicKey,PrivateKey)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "KeyPair", False, "KeyPair", "(PublicKey,PrivateKey)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "KeyPair", False, "getPrivate", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "KeyPair", False, "getPublic", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "KeyPairGenerator", True, "genKeyPair", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "KeyPairGenerator", True, "getAlgorithm", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "KeyPairGenerator", True, "getInstance", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "KeyPairGenerator", True, "getInstance", "(String,Provider)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "KeyPairGenerator", True, "getInstance", "(String,Provider)", "", "Argument[1].Element", "ReturnValue", "taint", "df-generated"] + - ["java.security", "KeyPairGenerator", True, "getInstance", "(String,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "KeyPairGenerator", True, "getProvider", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "KeyPairGenerator", True, "initialize", "(AlgorithmParameterSpec)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "KeyPairGeneratorSpi", True, "generateKeyPair", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "KeyPairGeneratorSpi", True, "initialize", "(AlgorithmParameterSpec,SecureRandom)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "KeyPairGeneratorSpi", True, "initialize", "(AlgorithmParameterSpec,SecureRandom)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "KeyPairGeneratorSpi", True, "initialize", "(int,SecureRandom)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "KeyRep", True, "KeyRep", "(KeyRep$Type,String,String,byte[])", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "KeyRep", True, "KeyRep", "(KeyRep$Type,String,String,byte[])", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "KeyRep", True, "KeyRep", "(KeyRep$Type,String,String,byte[])", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "KeyStore$Builder", True, "getKeyStore", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "KeyStore$Builder", True, "getProtectionParameter", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "KeyStore$Builder", True, "newInstance", "(File,KeyStore$ProtectionParameter)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "KeyStore$Builder", True, "newInstance", "(File,KeyStore$ProtectionParameter)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "KeyStore$Builder", True, "newInstance", "(String,Provider,File,KeyStore$ProtectionParameter)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "KeyStore$Builder", True, "newInstance", "(String,Provider,File,KeyStore$ProtectionParameter)", "", "Argument[1].Element", "ReturnValue", "taint", "df-generated"] + - ["java.security", "KeyStore$Builder", True, "newInstance", "(String,Provider,File,KeyStore$ProtectionParameter)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "KeyStore$Builder", True, "newInstance", "(String,Provider,File,KeyStore$ProtectionParameter)", "", "Argument[3]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "KeyStore$CallbackHandlerProtection", True, "CallbackHandlerProtection", "(CallbackHandler)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "KeyStore$CallbackHandlerProtection", True, "getCallbackHandler", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "KeyStore$Entry$Attribute", True, "getName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "KeyStore$Entry$Attribute", True, "getValue", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "KeyStore$Entry", True, "getAttributes", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "KeyStore$LoadStoreParameter", True, "getProtectionParameter", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "KeyStore$PasswordProtection", True, "PasswordProtection", "(char[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "KeyStore$PasswordProtection", True, "PasswordProtection", "(char[],String,AlgorithmParameterSpec)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "KeyStore$PasswordProtection", True, "PasswordProtection", "(char[],String,AlgorithmParameterSpec)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "KeyStore$PasswordProtection", True, "PasswordProtection", "(char[],String,AlgorithmParameterSpec)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "KeyStore$PasswordProtection", True, "getPassword", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "KeyStore$PasswordProtection", True, "getProtectionAlgorithm", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "KeyStore$PasswordProtection", True, "getProtectionParameters", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "KeyStore$PrivateKeyEntry", False, "PrivateKeyEntry", "(PrivateKey,Certificate[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "KeyStore$PrivateKeyEntry", False, "PrivateKeyEntry", "(PrivateKey,Certificate[])", "", "Argument[1].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["java.security", "KeyStore$PrivateKeyEntry", False, "PrivateKeyEntry", "(PrivateKey,Certificate[],Set)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "KeyStore$PrivateKeyEntry", False, "PrivateKeyEntry", "(PrivateKey,Certificate[],Set)", "", "Argument[1].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["java.security", "KeyStore$PrivateKeyEntry", False, "PrivateKeyEntry", "(PrivateKey,Certificate[],Set)", "", "Argument[2].Element", "Argument[this]", "taint", "df-generated"] + - ["java.security", "KeyStore$PrivateKeyEntry", False, "getCertificate", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "KeyStore$PrivateKeyEntry", False, "getCertificateChain", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "KeyStore$PrivateKeyEntry", False, "getPrivateKey", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "KeyStore$SecretKeyEntry", False, "SecretKeyEntry", "(SecretKey)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "KeyStore$SecretKeyEntry", False, "SecretKeyEntry", "(SecretKey,Set)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "KeyStore$SecretKeyEntry", False, "SecretKeyEntry", "(SecretKey,Set)", "", "Argument[1].Element", "Argument[this]", "taint", "df-generated"] + - ["java.security", "KeyStore$SecretKeyEntry", False, "getSecretKey", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "KeyStore$TrustedCertificateEntry", False, "TrustedCertificateEntry", "(Certificate)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "KeyStore$TrustedCertificateEntry", False, "TrustedCertificateEntry", "(Certificate,Set)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "KeyStore$TrustedCertificateEntry", False, "TrustedCertificateEntry", "(Certificate,Set)", "", "Argument[1].Element", "Argument[this]", "taint", "df-generated"] + - ["java.security", "KeyStore$TrustedCertificateEntry", False, "getTrustedCertificate", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "KeyStore", True, "aliases", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "KeyStore", True, "getCertificateAlias", "(Certificate)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "KeyStore", True, "getInstance", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "KeyStore", True, "getInstance", "(String,Provider)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "KeyStore", True, "getInstance", "(String,Provider)", "", "Argument[1].Element", "ReturnValue", "taint", "df-generated"] + - ["java.security", "KeyStore", True, "getInstance", "(String,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "KeyStore", True, "getProvider", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "KeyStore", True, "getType", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "KeyStoreException", True, "KeyStoreException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "KeyStoreException", True, "KeyStoreException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "KeyStoreException", True, "KeyStoreException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "KeyStoreException", True, "KeyStoreException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "KeyStoreSpi", True, "engineGetEntry", "(String,KeyStore$ProtectionParameter)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "KeyStoreSpi", True, "engineSetEntry", "(String,KeyStore$Entry,KeyStore$ProtectionParameter)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "MessageDigest", True, "getAlgorithm", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "MessageDigest", True, "getInstance", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "MessageDigest", True, "getInstance", "(String,Provider)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "MessageDigest", True, "getInstance", "(String,Provider)", "", "Argument[1].Element", "ReturnValue", "taint", "df-generated"] + - ["java.security", "MessageDigest", True, "getInstance", "(String,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "MessageDigest", True, "getProvider", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "MessageDigest", True, "update", "(ByteBuffer)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "MessageDigest", True, "update", "(byte[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "MessageDigest", True, "update", "(byte[],int,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "NoSuchAlgorithmException", True, "NoSuchAlgorithmException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "NoSuchAlgorithmException", True, "NoSuchAlgorithmException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "NoSuchAlgorithmException", True, "NoSuchAlgorithmException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "NoSuchAlgorithmException", True, "NoSuchAlgorithmException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "NoSuchProviderException", True, "NoSuchProviderException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "PKCS12Attribute", False, "PKCS12Attribute", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "PKCS12Attribute", False, "PKCS12Attribute", "(String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "PKCS12Attribute", False, "PKCS12Attribute", "(byte[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "PKCS12Attribute", False, "getEncoded", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "Permission", True, "Permission", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "Permission", True, "getActions", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "Permission", True, "getName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "PermissionCollection", True, "add", "(Permission)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "PermissionCollection", True, "elements", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "Policy", True, "getInstance", "(String,Policy$Parameters)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "Policy", True, "getInstance", "(String,Policy$Parameters)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "Policy", True, "getInstance", "(String,Policy$Parameters,Provider)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "Policy", True, "getInstance", "(String,Policy$Parameters,Provider)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "Policy", True, "getInstance", "(String,Policy$Parameters,Provider)", "", "Argument[2].Element", "ReturnValue", "taint", "df-generated"] + - ["java.security", "Policy", True, "getInstance", "(String,Policy$Parameters,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "Policy", True, "getInstance", "(String,Policy$Parameters,String)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "Policy", True, "getParameters", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "Policy", True, "getProvider", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "Policy", True, "getType", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "Policy", True, "implies", "(ProtectionDomain,Permission)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "Principal", True, "getName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "PrivilegedActionException", True, "PrivilegedActionException", "(Exception)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "PrivilegedActionException", True, "getException", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "ProtectionDomain", True, "ProtectionDomain", "(CodeSource,PermissionCollection)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "ProtectionDomain", True, "ProtectionDomain", "(CodeSource,PermissionCollection)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "ProtectionDomain", True, "ProtectionDomain", "(CodeSource,PermissionCollection,ClassLoader,Principal[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "ProtectionDomain", True, "ProtectionDomain", "(CodeSource,PermissionCollection,ClassLoader,Principal[])", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "ProtectionDomain", True, "ProtectionDomain", "(CodeSource,PermissionCollection,ClassLoader,Principal[])", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "ProtectionDomain", True, "ProtectionDomain", "(CodeSource,PermissionCollection,ClassLoader,Principal[])", "", "Argument[3].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["java.security", "ProtectionDomain", True, "getClassLoader", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "ProtectionDomain", True, "getCodeSource", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "ProtectionDomain", True, "getPermissions", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "ProtectionDomain", True, "getPrincipals", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "Provider$Service", True, "Service", "(Provider,String,String,String,List,Map)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["java.security", "Provider$Service", True, "Service", "(Provider,String,String,String,List,Map)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "Provider$Service", True, "Service", "(Provider,String,String,String,List,Map)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "Provider$Service", True, "Service", "(Provider,String,String,String,List,Map)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "Provider$Service", True, "Service", "(Provider,String,String,String,List,Map)", "", "Argument[4].Element", "Argument[this]", "taint", "df-generated"] + - ["java.security", "Provider$Service", True, "Service", "(Provider,String,String,String,List,Map)", "", "Argument[5].Element", "Argument[this]", "taint", "df-generated"] + - ["java.security", "Provider$Service", True, "getAlgorithm", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "Provider$Service", True, "getAttribute", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "Provider$Service", True, "getClassName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "Provider$Service", True, "getProvider", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "Provider$Service", True, "getType", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "Provider", True, "getInfo", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "Provider", True, "getName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "Provider", True, "getService", "(String,String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "Provider", True, "getServices", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "Provider", True, "getVersionStr", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "ProviderException", True, "ProviderException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "ProviderException", True, "ProviderException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "ProviderException", True, "ProviderException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "ProviderException", True, "ProviderException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "SecureRandom", True, "SecureRandom", "(byte[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "SecureRandom", True, "getAlgorithm", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "SecureRandom", True, "getInstance", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "SecureRandom", True, "getInstance", "(String,Provider)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "SecureRandom", True, "getInstance", "(String,Provider)", "", "Argument[1].Element", "ReturnValue", "taint", "df-generated"] + - ["java.security", "SecureRandom", True, "getInstance", "(String,SecureRandomParameters)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "SecureRandom", True, "getInstance", "(String,SecureRandomParameters,Provider)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "SecureRandom", True, "getInstance", "(String,SecureRandomParameters,Provider)", "", "Argument[2].Element", "ReturnValue", "taint", "df-generated"] + - ["java.security", "SecureRandom", True, "getInstance", "(String,SecureRandomParameters,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "SecureRandom", True, "getInstance", "(String,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "SecureRandom", True, "getProvider", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "SecureRandom", True, "setSeed", "(byte[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "SecurityPermission", False, "SecurityPermission", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "SecurityPermission", False, "SecurityPermission", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "Signature", True, "getAlgorithm", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "Signature", True, "getInstance", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "Signature", True, "getInstance", "(String,Provider)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "Signature", True, "getInstance", "(String,Provider)", "", "Argument[1].Element", "ReturnValue", "taint", "df-generated"] + - ["java.security", "Signature", True, "getInstance", "(String,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "Signature", True, "getParameters", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "Signature", True, "getProvider", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "Signature", True, "initSign", "(PrivateKey)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "Signature", True, "initSign", "(PrivateKey,SecureRandom)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "Signature", True, "initSign", "(PrivateKey,SecureRandom)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "Signature", True, "initVerify", "(PublicKey)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "Signature", True, "setParameter", "(AlgorithmParameterSpec)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "Signature", True, "update", "(byte[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "Signature", True, "update", "(byte[],int,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "SignatureException", True, "SignatureException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "SignatureException", True, "SignatureException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "SignatureException", True, "SignatureException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "SignatureException", True, "SignatureException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "SignedObject", False, "SignedObject", "(Serializable,PrivateKey,Signature)", "", "Argument[0]", "Argument[2]", "taint", "df-generated"] + - ["java.security", "SignedObject", False, "SignedObject", "(Serializable,PrivateKey,Signature)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "SignedObject", False, "SignedObject", "(Serializable,PrivateKey,Signature)", "", "Argument[1]", "Argument[2]", "taint", "df-generated"] + - ["java.security", "SignedObject", False, "SignedObject", "(Serializable,PrivateKey,Signature)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "SignedObject", False, "SignedObject", "(Serializable,PrivateKey,Signature)", "", "Argument[this]", "Argument[2]", "taint", "df-generated"] + - ["java.security", "SignedObject", False, "getAlgorithm", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "SignedObject", False, "getObject", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "SignedObject", False, "getSignature", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "SignedObject", False, "verify", "(PublicKey,Signature)", "", "Argument[0]", "Argument[1]", "taint", "df-generated"] + - ["java.security", "SignedObject", False, "verify", "(PublicKey,Signature)", "", "Argument[this]", "Argument[1]", "taint", "df-generated"] + - ["java.security", "Signer", True, "Signer", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "Signer", True, "Signer", "(String,IdentityScope)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "Signer", True, "Signer", "(String,IdentityScope)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "Signer", True, "getPrivateKey", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "Signer", True, "setKeyPair", "(KeyPair)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "Timestamp", False, "Timestamp", "(Date,CertPath)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "Timestamp", False, "getSignerCertPath", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "URIParameter", True, "URIParameter", "(URI)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "URIParameter", True, "getURI", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "UnrecoverableEntryException", True, "UnrecoverableEntryException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "UnrecoverableKeyException", True, "UnrecoverableKeyException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "UnresolvedPermission", False, "UnresolvedPermission", "(String,String,String,Certificate[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "UnresolvedPermission", False, "UnresolvedPermission", "(String,String,String,Certificate[])", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "UnresolvedPermission", False, "UnresolvedPermission", "(String,String,String,Certificate[])", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "UnresolvedPermission", False, "UnresolvedPermission", "(String,String,String,Certificate[])", "", "Argument[3].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["java.security", "UnresolvedPermission", False, "getUnresolvedActions", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "UnresolvedPermission", False, "getUnresolvedCerts", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "UnresolvedPermission", False, "getUnresolvedName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "UnresolvedPermission", False, "getUnresolvedType", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["java.security", "AccessControlContext", "checkPermission", "(Permission)", "summary", "df-generated"] + - ["java.security", "AccessController", "checkPermission", "(Permission)", "summary", "df-generated"] + - ["java.security", "AccessController", "getContext", "()", "summary", "df-generated"] + - ["java.security", "AlgorithmParameterGenerator", "generateParameters", "()", "summary", "df-generated"] + - ["java.security", "AlgorithmParameterGenerator", "init", "(AlgorithmParameterSpec)", "summary", "df-generated"] + - ["java.security", "AlgorithmParameterGenerator", "init", "(int)", "summary", "df-generated"] + - ["java.security", "AllPermission", "AllPermission", "(String,String)", "summary", "df-generated"] + - ["java.security", "AuthProvider", "login", "(Subject,CallbackHandler)", "summary", "df-generated"] + - ["java.security", "AuthProvider", "logout", "()", "summary", "df-generated"] + - ["java.security", "AuthProvider", "setCallbackHandler", "(CallbackHandler)", "summary", "df-generated"] + - ["java.security", "CodeSource", "implies", "(CodeSource)", "summary", "df-generated"] + - ["java.security", "DigestInputStream", "on", "(boolean)", "summary", "df-generated"] + - ["java.security", "DigestOutputStream", "on", "(boolean)", "summary", "df-generated"] + - ["java.security", "DrbgParameters$Capability", "supportsPredictionResistance", "()", "summary", "df-generated"] + - ["java.security", "DrbgParameters$Capability", "supportsReseeding", "()", "summary", "df-generated"] + - ["java.security", "DrbgParameters$Instantiation", "getCapability", "()", "summary", "df-generated"] + - ["java.security", "DrbgParameters$Instantiation", "getStrength", "()", "summary", "df-generated"] + - ["java.security", "DrbgParameters$NextBytes", "getPredictionResistance", "()", "summary", "df-generated"] + - ["java.security", "DrbgParameters$NextBytes", "getStrength", "()", "summary", "df-generated"] + - ["java.security", "DrbgParameters$Reseed", "getPredictionResistance", "()", "summary", "df-generated"] + - ["java.security", "Guard", "checkGuard", "(Object)", "summary", "df-generated"] + - ["java.security", "Identity", "removeCertificate", "(Certificate)", "summary", "df-generated"] + - ["java.security", "IdentityScope", "addIdentity", "(Identity)", "summary", "df-generated"] + - ["java.security", "IdentityScope", "getIdentity", "(Principal)", "summary", "df-generated"] + - ["java.security", "IdentityScope", "getIdentity", "(PublicKey)", "summary", "df-generated"] + - ["java.security", "IdentityScope", "getIdentity", "(String)", "summary", "df-generated"] + - ["java.security", "IdentityScope", "getSystemScope", "()", "summary", "df-generated"] + - ["java.security", "IdentityScope", "identities", "()", "summary", "df-generated"] + - ["java.security", "IdentityScope", "removeIdentity", "(Identity)", "summary", "df-generated"] + - ["java.security", "IdentityScope", "size", "()", "summary", "df-generated"] + - ["java.security", "Key", "getFormat", "()", "summary", "df-generated"] + - ["java.security", "KeyPairGenerator", "initialize", "(int)", "summary", "df-generated"] + - ["java.security", "KeyStore$Builder", "newInstance", "(KeyStore,KeyStore$ProtectionParameter)", "summary", "df-generated"] + - ["java.security", "KeyStore$Builder", "newInstance", "(String,Provider,KeyStore$ProtectionParameter)", "summary", "df-generated"] + - ["java.security", "KeyStore", "containsAlias", "(String)", "summary", "df-generated"] + - ["java.security", "KeyStore", "deleteEntry", "(String)", "summary", "df-generated"] + - ["java.security", "KeyStore", "entryInstanceOf", "(String,Class)", "summary", "df-generated"] + - ["java.security", "KeyStore", "getCertificate", "(String)", "summary", "df-generated"] + - ["java.security", "KeyStore", "getCertificateChain", "(String)", "summary", "df-generated"] + - ["java.security", "KeyStore", "getCreationDate", "(String)", "summary", "df-generated"] + - ["java.security", "KeyStore", "getDefaultType", "()", "summary", "df-generated"] + - ["java.security", "KeyStore", "getEntry", "(String,KeyStore$ProtectionParameter)", "summary", "df-generated"] + - ["java.security", "KeyStore", "getInstance", "(File,KeyStore$LoadStoreParameter)", "summary", "df-generated"] + - ["java.security", "KeyStore", "getInstance", "(File,char[])", "summary", "df-generated"] + - ["java.security", "KeyStore", "getKey", "(String,char[])", "summary", "df-generated"] + - ["java.security", "KeyStore", "isCertificateEntry", "(String)", "summary", "df-generated"] + - ["java.security", "KeyStore", "isKeyEntry", "(String)", "summary", "df-generated"] + - ["java.security", "KeyStore", "load", "(InputStream,char[])", "summary", "df-generated"] + - ["java.security", "KeyStore", "load", "(KeyStore$LoadStoreParameter)", "summary", "df-generated"] + - ["java.security", "KeyStore", "setCertificateEntry", "(String,Certificate)", "summary", "df-generated"] + - ["java.security", "KeyStore", "setEntry", "(String,KeyStore$Entry,KeyStore$ProtectionParameter)", "summary", "df-generated"] + - ["java.security", "KeyStore", "setKeyEntry", "(String,Key,char[],Certificate[])", "summary", "df-generated"] + - ["java.security", "KeyStore", "setKeyEntry", "(String,byte[],Certificate[])", "summary", "df-generated"] + - ["java.security", "KeyStore", "size", "()", "summary", "df-generated"] + - ["java.security", "KeyStore", "store", "(KeyStore$LoadStoreParameter)", "summary", "df-generated"] + - ["java.security", "KeyStore", "store", "(OutputStream,char[])", "summary", "df-generated"] + - ["java.security", "KeyStoreSpi", "engineAliases", "()", "summary", "df-generated"] + - ["java.security", "KeyStoreSpi", "engineContainsAlias", "(String)", "summary", "df-generated"] + - ["java.security", "KeyStoreSpi", "engineDeleteEntry", "(String)", "summary", "df-generated"] + - ["java.security", "KeyStoreSpi", "engineEntryInstanceOf", "(String,Class)", "summary", "df-generated"] + - ["java.security", "KeyStoreSpi", "engineGetCertificate", "(String)", "summary", "df-generated"] + - ["java.security", "KeyStoreSpi", "engineGetCertificateAlias", "(Certificate)", "summary", "df-generated"] + - ["java.security", "KeyStoreSpi", "engineGetCertificateChain", "(String)", "summary", "df-generated"] + - ["java.security", "KeyStoreSpi", "engineGetCreationDate", "(String)", "summary", "df-generated"] + - ["java.security", "KeyStoreSpi", "engineGetKey", "(String,char[])", "summary", "df-generated"] + - ["java.security", "KeyStoreSpi", "engineIsCertificateEntry", "(String)", "summary", "df-generated"] + - ["java.security", "KeyStoreSpi", "engineIsKeyEntry", "(String)", "summary", "df-generated"] + - ["java.security", "KeyStoreSpi", "engineLoad", "(InputStream,char[])", "summary", "df-generated"] + - ["java.security", "KeyStoreSpi", "engineLoad", "(KeyStore$LoadStoreParameter)", "summary", "df-generated"] + - ["java.security", "KeyStoreSpi", "engineProbe", "(InputStream)", "summary", "df-generated"] + - ["java.security", "KeyStoreSpi", "engineSetCertificateEntry", "(String,Certificate)", "summary", "df-generated"] + - ["java.security", "KeyStoreSpi", "engineSetKeyEntry", "(String,Key,char[],Certificate[])", "summary", "df-generated"] + - ["java.security", "KeyStoreSpi", "engineSetKeyEntry", "(String,byte[],Certificate[])", "summary", "df-generated"] + - ["java.security", "KeyStoreSpi", "engineSize", "()", "summary", "df-generated"] + - ["java.security", "KeyStoreSpi", "engineStore", "(KeyStore$LoadStoreParameter)", "summary", "df-generated"] + - ["java.security", "KeyStoreSpi", "engineStore", "(OutputStream,char[])", "summary", "df-generated"] + - ["java.security", "MessageDigest", "getDigestLength", "()", "summary", "df-generated"] + - ["java.security", "MessageDigest", "isEqual", "(byte[],byte[])", "summary", "df-generated"] + - ["java.security", "MessageDigest", "reset", "()", "summary", "df-generated"] + - ["java.security", "MessageDigest", "update", "(byte)", "summary", "df-generated"] + - ["java.security", "Permission", "implies", "(Permission)", "summary", "df-generated"] + - ["java.security", "Permission", "newPermissionCollection", "()", "summary", "df-generated"] + - ["java.security", "PermissionCollection", "elementsAsStream", "()", "summary", "df-generated"] + - ["java.security", "PermissionCollection", "implies", "(Permission)", "summary", "df-generated"] + - ["java.security", "PermissionCollection", "isReadOnly", "()", "summary", "df-generated"] + - ["java.security", "PermissionCollection", "setReadOnly", "()", "summary", "df-generated"] + - ["java.security", "Policy", "getPermissions", "(CodeSource)", "summary", "df-generated"] + - ["java.security", "Policy", "getPermissions", "(ProtectionDomain)", "summary", "df-generated"] + - ["java.security", "Policy", "getPolicy", "()", "summary", "df-generated"] + - ["java.security", "Policy", "refresh", "()", "summary", "df-generated"] + - ["java.security", "Policy", "setPolicy", "(Policy)", "summary", "df-generated"] + - ["java.security", "Principal", "implies", "(Subject)", "summary", "df-generated"] + - ["java.security", "ProtectionDomain", "implies", "(Permission)", "summary", "df-generated"] + - ["java.security", "ProtectionDomain", "staticPermissionsOnly", "()", "summary", "df-generated"] + - ["java.security", "Provider$Service", "newInstance", "(Object)", "summary", "df-generated"] + - ["java.security", "Provider$Service", "supportsParameter", "(Object)", "summary", "df-generated"] + - ["java.security", "Provider", "configure", "(String)", "summary", "df-generated"] + - ["java.security", "Provider", "getVersion", "()", "summary", "df-generated"] + - ["java.security", "Provider", "isConfigured", "()", "summary", "df-generated"] + - ["java.security", "SecureRandom", "generateSeed", "(int)", "summary", "df-generated"] + - ["java.security", "SecureRandom", "getInstanceStrong", "()", "summary", "df-generated"] + - ["java.security", "SecureRandom", "getParameters", "()", "summary", "df-generated"] + - ["java.security", "SecureRandom", "getSeed", "(int)", "summary", "df-generated"] + - ["java.security", "SecureRandom", "nextBytes", "(byte[],SecureRandomParameters)", "summary", "df-generated"] + - ["java.security", "SecureRandom", "reseed", "()", "summary", "df-generated"] + - ["java.security", "SecureRandom", "reseed", "(SecureRandomParameters)", "summary", "df-generated"] + - ["java.security", "Security", "addProvider", "(Provider)", "summary", "df-generated"] + - ["java.security", "Security", "getAlgorithmProperty", "(String,String)", "summary", "df-generated"] + - ["java.security", "Security", "getAlgorithms", "(String)", "summary", "df-generated"] + - ["java.security", "Security", "getProperty", "(String)", "summary", "df-generated"] + - ["java.security", "Security", "getProvider", "(String)", "summary", "df-generated"] + - ["java.security", "Security", "getProviders", "()", "summary", "df-generated"] + - ["java.security", "Security", "getProviders", "(Map)", "summary", "df-generated"] + - ["java.security", "Security", "getProviders", "(String)", "summary", "df-generated"] + - ["java.security", "Security", "insertProviderAt", "(Provider,int)", "summary", "df-generated"] + - ["java.security", "Security", "removeProvider", "(String)", "summary", "df-generated"] + - ["java.security", "Security", "setProperty", "(String,String)", "summary", "df-generated"] + - ["java.security", "Signature", "getParameter", "(String)", "summary", "df-generated"] + - ["java.security", "Signature", "initVerify", "(Certificate)", "summary", "df-generated"] + - ["java.security", "Signature", "setParameter", "(String,Object)", "summary", "df-generated"] + - ["java.security", "Signature", "sign", "()", "summary", "df-generated"] + - ["java.security", "Signature", "sign", "(byte[],int,int)", "summary", "df-generated"] + - ["java.security", "Signature", "update", "(ByteBuffer)", "summary", "df-generated"] + - ["java.security", "Signature", "update", "(byte)", "summary", "df-generated"] + - ["java.security", "Signature", "verify", "(byte[])", "summary", "df-generated"] + - ["java.security", "Signature", "verify", "(byte[],int,int)", "summary", "df-generated"] + - ["java.security", "Timestamp", "getTimestamp", "()", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/java.security.spec.model.yml b/java/ql/lib/ext/generated/java.security.spec.model.yml new file mode 100644 index 00000000000..ba978ed02fa --- /dev/null +++ b/java/ql/lib/ext/generated/java.security.spec.model.yml @@ -0,0 +1,146 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["java.security.spec", "ECGenParameterSpec", True, "ECGenParameterSpec", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.spec", "ECParameterSpec", True, "ECParameterSpec", "(EllipticCurve,ECPoint,BigInteger,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.spec", "ECParameterSpec", True, "ECParameterSpec", "(EllipticCurve,ECPoint,BigInteger,int)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.security.spec", "ECParameterSpec", True, "getCurve", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.spec", "ECParameterSpec", True, "getGenerator", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.spec", "ECPrivateKeySpec", True, "ECPrivateKeySpec", "(BigInteger,ECParameterSpec)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.security.spec", "ECPrivateKeySpec", True, "getParams", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.spec", "ECPublicKeySpec", True, "ECPublicKeySpec", "(ECPoint,ECParameterSpec)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.spec", "ECPublicKeySpec", True, "ECPublicKeySpec", "(ECPoint,ECParameterSpec)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.security.spec", "ECPublicKeySpec", True, "getParams", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.spec", "ECPublicKeySpec", True, "getW", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.spec", "EdDSAParameterSpec", True, "EdDSAParameterSpec", "(boolean,byte[])", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.security.spec", "EdDSAParameterSpec", True, "getContext", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.spec", "EdECPrivateKeySpec", False, "EdECPrivateKeySpec", "(NamedParameterSpec,byte[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.spec", "EdECPrivateKeySpec", False, "EdECPrivateKeySpec", "(NamedParameterSpec,byte[])", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.security.spec", "EdECPrivateKeySpec", False, "getBytes", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.spec", "EdECPrivateKeySpec", False, "getParams", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.spec", "EdECPublicKeySpec", False, "EdECPublicKeySpec", "(NamedParameterSpec,EdECPoint)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.spec", "EdECPublicKeySpec", False, "EdECPublicKeySpec", "(NamedParameterSpec,EdECPoint)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.security.spec", "EdECPublicKeySpec", False, "getParams", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.spec", "EdECPublicKeySpec", False, "getPoint", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.spec", "EllipticCurve", True, "EllipticCurve", "(ECField,BigInteger,BigInteger)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.spec", "EllipticCurve", True, "EllipticCurve", "(ECField,BigInteger,BigInteger,byte[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.spec", "EllipticCurve", True, "EllipticCurve", "(ECField,BigInteger,BigInteger,byte[])", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["java.security.spec", "EllipticCurve", True, "getField", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.spec", "EllipticCurve", True, "getSeed", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.spec", "EncodedKeySpec", True, "EncodedKeySpec", "(byte[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.spec", "EncodedKeySpec", True, "getAlgorithm", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.spec", "EncodedKeySpec", True, "getEncoded", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.spec", "InvalidKeySpecException", True, "InvalidKeySpecException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.spec", "InvalidKeySpecException", True, "InvalidKeySpecException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.spec", "InvalidKeySpecException", True, "InvalidKeySpecException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.security.spec", "InvalidKeySpecException", True, "InvalidKeySpecException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.spec", "InvalidParameterSpecException", True, "InvalidParameterSpecException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.spec", "MGF1ParameterSpec", True, "MGF1ParameterSpec", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.spec", "MGF1ParameterSpec", True, "getDigestAlgorithm", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.spec", "NamedParameterSpec", True, "NamedParameterSpec", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.spec", "NamedParameterSpec", True, "getName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.spec", "PKCS8EncodedKeySpec", True, "PKCS8EncodedKeySpec", "(byte[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.spec", "PKCS8EncodedKeySpec", True, "PKCS8EncodedKeySpec", "(byte[],String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.spec", "PKCS8EncodedKeySpec", True, "PKCS8EncodedKeySpec", "(byte[],String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.security.spec", "PSSParameterSpec", True, "PSSParameterSpec", "(String,String,AlgorithmParameterSpec,int,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.spec", "PSSParameterSpec", True, "PSSParameterSpec", "(String,String,AlgorithmParameterSpec,int,int)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.security.spec", "PSSParameterSpec", True, "PSSParameterSpec", "(String,String,AlgorithmParameterSpec,int,int)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.security.spec", "PSSParameterSpec", True, "getDigestAlgorithm", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.spec", "PSSParameterSpec", True, "getMGFAlgorithm", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.spec", "PSSParameterSpec", True, "getMGFParameters", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.spec", "RSAKeyGenParameterSpec", True, "RSAKeyGenParameterSpec", "(int,BigInteger,AlgorithmParameterSpec)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.security.spec", "RSAKeyGenParameterSpec", True, "getKeyParams", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.spec", "RSAMultiPrimePrivateCrtKeySpec", True, "RSAMultiPrimePrivateCrtKeySpec", "(BigInteger,BigInteger,BigInteger,BigInteger,BigInteger,BigInteger,BigInteger,BigInteger,RSAOtherPrimeInfo[])", "", "Argument[8].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["java.security.spec", "RSAMultiPrimePrivateCrtKeySpec", True, "RSAMultiPrimePrivateCrtKeySpec", "(BigInteger,BigInteger,BigInteger,BigInteger,BigInteger,BigInteger,BigInteger,BigInteger,RSAOtherPrimeInfo[],AlgorithmParameterSpec)", "", "Argument[8].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["java.security.spec", "RSAMultiPrimePrivateCrtKeySpec", True, "RSAMultiPrimePrivateCrtKeySpec", "(BigInteger,BigInteger,BigInteger,BigInteger,BigInteger,BigInteger,BigInteger,BigInteger,RSAOtherPrimeInfo[],AlgorithmParameterSpec)", "", "Argument[9]", "Argument[this]", "taint", "df-generated"] + - ["java.security.spec", "RSAMultiPrimePrivateCrtKeySpec", True, "getOtherPrimeInfo", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.spec", "RSAPrivateCrtKeySpec", True, "RSAPrivateCrtKeySpec", "(BigInteger,BigInteger,BigInteger,BigInteger,BigInteger,BigInteger,BigInteger,BigInteger,AlgorithmParameterSpec)", "", "Argument[8]", "Argument[this]", "taint", "df-generated"] + - ["java.security.spec", "RSAPrivateKeySpec", True, "RSAPrivateKeySpec", "(BigInteger,BigInteger,AlgorithmParameterSpec)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.security.spec", "RSAPrivateKeySpec", True, "getParams", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.spec", "RSAPublicKeySpec", True, "RSAPublicKeySpec", "(BigInteger,BigInteger,AlgorithmParameterSpec)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.security.spec", "RSAPublicKeySpec", True, "getParams", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.spec", "X509EncodedKeySpec", True, "X509EncodedKeySpec", "(byte[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.spec", "X509EncodedKeySpec", True, "X509EncodedKeySpec", "(byte[],String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.spec", "X509EncodedKeySpec", True, "X509EncodedKeySpec", "(byte[],String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.security.spec", "XECPrivateKeySpec", True, "XECPrivateKeySpec", "(AlgorithmParameterSpec,byte[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.spec", "XECPrivateKeySpec", True, "XECPrivateKeySpec", "(AlgorithmParameterSpec,byte[])", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.security.spec", "XECPrivateKeySpec", True, "getParams", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.spec", "XECPrivateKeySpec", True, "getScalar", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.spec", "XECPublicKeySpec", True, "XECPublicKeySpec", "(AlgorithmParameterSpec,BigInteger)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.spec", "XECPublicKeySpec", True, "getParams", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["java.security.spec", "DSAGenParameterSpec", "DSAGenParameterSpec", "(int,int)", "summary", "df-generated"] + - ["java.security.spec", "DSAGenParameterSpec", "DSAGenParameterSpec", "(int,int,int)", "summary", "df-generated"] + - ["java.security.spec", "DSAGenParameterSpec", "getPrimePLength", "()", "summary", "df-generated"] + - ["java.security.spec", "DSAGenParameterSpec", "getSeedLength", "()", "summary", "df-generated"] + - ["java.security.spec", "DSAGenParameterSpec", "getSubprimeQLength", "()", "summary", "df-generated"] + - ["java.security.spec", "DSAParameterSpec", "DSAParameterSpec", "(BigInteger,BigInteger,BigInteger)", "summary", "df-generated"] + - ["java.security.spec", "DSAPrivateKeySpec", "DSAPrivateKeySpec", "(BigInteger,BigInteger,BigInteger,BigInteger)", "summary", "df-generated"] + - ["java.security.spec", "DSAPrivateKeySpec", "getG", "()", "summary", "df-generated"] + - ["java.security.spec", "DSAPrivateKeySpec", "getP", "()", "summary", "df-generated"] + - ["java.security.spec", "DSAPrivateKeySpec", "getQ", "()", "summary", "df-generated"] + - ["java.security.spec", "DSAPrivateKeySpec", "getX", "()", "summary", "df-generated"] + - ["java.security.spec", "DSAPublicKeySpec", "DSAPublicKeySpec", "(BigInteger,BigInteger,BigInteger,BigInteger)", "summary", "df-generated"] + - ["java.security.spec", "DSAPublicKeySpec", "getG", "()", "summary", "df-generated"] + - ["java.security.spec", "DSAPublicKeySpec", "getP", "()", "summary", "df-generated"] + - ["java.security.spec", "DSAPublicKeySpec", "getQ", "()", "summary", "df-generated"] + - ["java.security.spec", "DSAPublicKeySpec", "getY", "()", "summary", "df-generated"] + - ["java.security.spec", "ECField", "getFieldSize", "()", "summary", "df-generated"] + - ["java.security.spec", "ECFieldF2m", "ECFieldF2m", "(int)", "summary", "df-generated"] + - ["java.security.spec", "ECFieldF2m", "ECFieldF2m", "(int,BigInteger)", "summary", "df-generated"] + - ["java.security.spec", "ECFieldF2m", "ECFieldF2m", "(int,int[])", "summary", "df-generated"] + - ["java.security.spec", "ECFieldF2m", "getM", "()", "summary", "df-generated"] + - ["java.security.spec", "ECFieldF2m", "getMidTermsOfReductionPolynomial", "()", "summary", "df-generated"] + - ["java.security.spec", "ECFieldF2m", "getReductionPolynomial", "()", "summary", "df-generated"] + - ["java.security.spec", "ECFieldFp", "ECFieldFp", "(BigInteger)", "summary", "df-generated"] + - ["java.security.spec", "ECFieldFp", "getP", "()", "summary", "df-generated"] + - ["java.security.spec", "ECParameterSpec", "getCofactor", "()", "summary", "df-generated"] + - ["java.security.spec", "ECParameterSpec", "getOrder", "()", "summary", "df-generated"] + - ["java.security.spec", "ECPoint", "ECPoint", "(BigInteger,BigInteger)", "summary", "df-generated"] + - ["java.security.spec", "ECPoint", "getAffineX", "()", "summary", "df-generated"] + - ["java.security.spec", "ECPoint", "getAffineY", "()", "summary", "df-generated"] + - ["java.security.spec", "ECPrivateKeySpec", "getS", "()", "summary", "df-generated"] + - ["java.security.spec", "EdDSAParameterSpec", "EdDSAParameterSpec", "(boolean)", "summary", "df-generated"] + - ["java.security.spec", "EdDSAParameterSpec", "isPrehash", "()", "summary", "df-generated"] + - ["java.security.spec", "EdECPoint", "EdECPoint", "(boolean,BigInteger)", "summary", "df-generated"] + - ["java.security.spec", "EdECPoint", "getY", "()", "summary", "df-generated"] + - ["java.security.spec", "EdECPoint", "isXOdd", "()", "summary", "df-generated"] + - ["java.security.spec", "EllipticCurve", "getA", "()", "summary", "df-generated"] + - ["java.security.spec", "EllipticCurve", "getB", "()", "summary", "df-generated"] + - ["java.security.spec", "EncodedKeySpec", "getFormat", "()", "summary", "df-generated"] + - ["java.security.spec", "PSSParameterSpec", "PSSParameterSpec", "(int)", "summary", "df-generated"] + - ["java.security.spec", "PSSParameterSpec", "getSaltLength", "()", "summary", "df-generated"] + - ["java.security.spec", "PSSParameterSpec", "getTrailerField", "()", "summary", "df-generated"] + - ["java.security.spec", "RSAKeyGenParameterSpec", "RSAKeyGenParameterSpec", "(int,BigInteger)", "summary", "df-generated"] + - ["java.security.spec", "RSAKeyGenParameterSpec", "getKeysize", "()", "summary", "df-generated"] + - ["java.security.spec", "RSAKeyGenParameterSpec", "getPublicExponent", "()", "summary", "df-generated"] + - ["java.security.spec", "RSAMultiPrimePrivateCrtKeySpec", "getCrtCoefficient", "()", "summary", "df-generated"] + - ["java.security.spec", "RSAMultiPrimePrivateCrtKeySpec", "getPrimeExponentP", "()", "summary", "df-generated"] + - ["java.security.spec", "RSAMultiPrimePrivateCrtKeySpec", "getPrimeExponentQ", "()", "summary", "df-generated"] + - ["java.security.spec", "RSAMultiPrimePrivateCrtKeySpec", "getPrimeP", "()", "summary", "df-generated"] + - ["java.security.spec", "RSAMultiPrimePrivateCrtKeySpec", "getPrimeQ", "()", "summary", "df-generated"] + - ["java.security.spec", "RSAMultiPrimePrivateCrtKeySpec", "getPublicExponent", "()", "summary", "df-generated"] + - ["java.security.spec", "RSAOtherPrimeInfo", "RSAOtherPrimeInfo", "(BigInteger,BigInteger,BigInteger)", "summary", "df-generated"] + - ["java.security.spec", "RSAOtherPrimeInfo", "getCrtCoefficient", "()", "summary", "df-generated"] + - ["java.security.spec", "RSAOtherPrimeInfo", "getExponent", "()", "summary", "df-generated"] + - ["java.security.spec", "RSAOtherPrimeInfo", "getPrime", "()", "summary", "df-generated"] + - ["java.security.spec", "RSAPrivateCrtKeySpec", "RSAPrivateCrtKeySpec", "(BigInteger,BigInteger,BigInteger,BigInteger,BigInteger,BigInteger,BigInteger,BigInteger)", "summary", "df-generated"] + - ["java.security.spec", "RSAPrivateCrtKeySpec", "getCrtCoefficient", "()", "summary", "df-generated"] + - ["java.security.spec", "RSAPrivateCrtKeySpec", "getPrimeExponentP", "()", "summary", "df-generated"] + - ["java.security.spec", "RSAPrivateCrtKeySpec", "getPrimeExponentQ", "()", "summary", "df-generated"] + - ["java.security.spec", "RSAPrivateCrtKeySpec", "getPrimeP", "()", "summary", "df-generated"] + - ["java.security.spec", "RSAPrivateCrtKeySpec", "getPrimeQ", "()", "summary", "df-generated"] + - ["java.security.spec", "RSAPrivateCrtKeySpec", "getPublicExponent", "()", "summary", "df-generated"] + - ["java.security.spec", "RSAPrivateKeySpec", "RSAPrivateKeySpec", "(BigInteger,BigInteger)", "summary", "df-generated"] + - ["java.security.spec", "RSAPrivateKeySpec", "getModulus", "()", "summary", "df-generated"] + - ["java.security.spec", "RSAPrivateKeySpec", "getPrivateExponent", "()", "summary", "df-generated"] + - ["java.security.spec", "RSAPublicKeySpec", "RSAPublicKeySpec", "(BigInteger,BigInteger)", "summary", "df-generated"] + - ["java.security.spec", "RSAPublicKeySpec", "getModulus", "()", "summary", "df-generated"] + - ["java.security.spec", "RSAPublicKeySpec", "getPublicExponent", "()", "summary", "df-generated"] + - ["java.security.spec", "XECPublicKeySpec", "getU", "()", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/java.sql.model.yml b/java/ql/lib/ext/generated/java.sql.model.yml new file mode 100644 index 00000000000..310a430ab75 --- /dev/null +++ b/java/ql/lib/ext/generated/java.sql.model.yml @@ -0,0 +1,465 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["java.sql", "Array", True, "getArray", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.sql", "Array", True, "getArray", "(Map)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.sql", "Array", True, "getArray", "(long,int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.sql", "Array", True, "getArray", "(long,int,Map)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.sql", "Array", True, "getBaseTypeName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.sql", "BatchUpdateException", True, "BatchUpdateException", "(String,String,int,int[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "BatchUpdateException", True, "BatchUpdateException", "(String,String,int,int[])", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "BatchUpdateException", True, "BatchUpdateException", "(String,String,int,int[],Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "BatchUpdateException", True, "BatchUpdateException", "(String,String,int,int[],Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "BatchUpdateException", True, "BatchUpdateException", "(String,String,int,int[],Throwable)", "", "Argument[4]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "BatchUpdateException", True, "BatchUpdateException", "(String,String,int,long[],Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "BatchUpdateException", True, "BatchUpdateException", "(String,String,int,long[],Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "BatchUpdateException", True, "BatchUpdateException", "(String,String,int,long[],Throwable)", "", "Argument[4]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "BatchUpdateException", True, "BatchUpdateException", "(String,String,int[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "BatchUpdateException", True, "BatchUpdateException", "(String,String,int[])", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "BatchUpdateException", True, "BatchUpdateException", "(String,String,int[],Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "BatchUpdateException", True, "BatchUpdateException", "(String,String,int[],Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "BatchUpdateException", True, "BatchUpdateException", "(String,String,int[],Throwable)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "BatchUpdateException", True, "BatchUpdateException", "(String,int[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "BatchUpdateException", True, "BatchUpdateException", "(String,int[],Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "BatchUpdateException", True, "BatchUpdateException", "(String,int[],Throwable)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "BatchUpdateException", True, "BatchUpdateException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "BatchUpdateException", True, "BatchUpdateException", "(int[],Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "Blob", True, "getBinaryStream", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.sql", "Blob", True, "getBinaryStream", "(long,long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.sql", "Clob", True, "getCharacterStream", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.sql", "Clob", True, "getCharacterStream", "(long,long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.sql", "Clob", True, "getSubString", "(long,int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.sql", "DataTruncation", True, "DataTruncation", "(int,boolean,boolean,int,int,Throwable)", "", "Argument[5]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "DriverPropertyInfo", True, "DriverPropertyInfo", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "DriverPropertyInfo", True, "DriverPropertyInfo", "(String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "Ref", True, "getBaseTypeName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.sql", "Ref", True, "getObject", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.sql", "Ref", True, "setObject", "(Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "ResultSetMetaData", True, "getCatalogName", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.sql", "ResultSetMetaData", True, "getColumnLabel", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.sql", "ResultSetMetaData", True, "getColumnName", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.sql", "ResultSetMetaData", True, "getColumnTypeName", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.sql", "ResultSetMetaData", True, "getSchemaName", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.sql", "ResultSetMetaData", True, "getTableName", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.sql", "SQLClientInfoException", True, "SQLClientInfoException", "(Map)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLClientInfoException", True, "SQLClientInfoException", "(Map,Throwable)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLClientInfoException", True, "SQLClientInfoException", "(Map,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLClientInfoException", True, "SQLClientInfoException", "(String,Map)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLClientInfoException", True, "SQLClientInfoException", "(String,Map)", "", "Argument[1].Element", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLClientInfoException", True, "SQLClientInfoException", "(String,Map,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLClientInfoException", True, "SQLClientInfoException", "(String,Map,Throwable)", "", "Argument[1].Element", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLClientInfoException", True, "SQLClientInfoException", "(String,Map,Throwable)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLClientInfoException", True, "SQLClientInfoException", "(String,String,Map)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLClientInfoException", True, "SQLClientInfoException", "(String,String,Map)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLClientInfoException", True, "SQLClientInfoException", "(String,String,Map)", "", "Argument[2].Element", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLClientInfoException", True, "SQLClientInfoException", "(String,String,Map,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLClientInfoException", True, "SQLClientInfoException", "(String,String,Map,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLClientInfoException", True, "SQLClientInfoException", "(String,String,Map,Throwable)", "", "Argument[2].Element", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLClientInfoException", True, "SQLClientInfoException", "(String,String,Map,Throwable)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLClientInfoException", True, "SQLClientInfoException", "(String,String,int,Map)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLClientInfoException", True, "SQLClientInfoException", "(String,String,int,Map)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLClientInfoException", True, "SQLClientInfoException", "(String,String,int,Map)", "", "Argument[3].Element", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLClientInfoException", True, "SQLClientInfoException", "(String,String,int,Map,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLClientInfoException", True, "SQLClientInfoException", "(String,String,int,Map,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLClientInfoException", True, "SQLClientInfoException", "(String,String,int,Map,Throwable)", "", "Argument[3].Element", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLClientInfoException", True, "SQLClientInfoException", "(String,String,int,Map,Throwable)", "", "Argument[4]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLClientInfoException", True, "getFailedProperties", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.sql", "SQLDataException", True, "SQLDataException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLDataException", True, "SQLDataException", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLDataException", True, "SQLDataException", "(String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLDataException", True, "SQLDataException", "(String,String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLDataException", True, "SQLDataException", "(String,String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLDataException", True, "SQLDataException", "(String,String,Throwable)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLDataException", True, "SQLDataException", "(String,String,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLDataException", True, "SQLDataException", "(String,String,int)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLDataException", True, "SQLDataException", "(String,String,int,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLDataException", True, "SQLDataException", "(String,String,int,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLDataException", True, "SQLDataException", "(String,String,int,Throwable)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLDataException", True, "SQLDataException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLDataException", True, "SQLDataException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLDataException", True, "SQLDataException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLException", True, "SQLException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLException", True, "SQLException", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLException", True, "SQLException", "(String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLException", True, "SQLException", "(String,String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLException", True, "SQLException", "(String,String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLException", True, "SQLException", "(String,String,Throwable)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLException", True, "SQLException", "(String,String,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLException", True, "SQLException", "(String,String,int)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLException", True, "SQLException", "(String,String,int,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLException", True, "SQLException", "(String,String,int,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLException", True, "SQLException", "(String,String,int,Throwable)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLException", True, "SQLException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLException", True, "SQLException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLException", True, "SQLException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLException", True, "getNextException", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.sql", "SQLException", True, "getSQLState", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.sql", "SQLFeatureNotSupportedException", True, "SQLFeatureNotSupportedException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLFeatureNotSupportedException", True, "SQLFeatureNotSupportedException", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLFeatureNotSupportedException", True, "SQLFeatureNotSupportedException", "(String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLFeatureNotSupportedException", True, "SQLFeatureNotSupportedException", "(String,String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLFeatureNotSupportedException", True, "SQLFeatureNotSupportedException", "(String,String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLFeatureNotSupportedException", True, "SQLFeatureNotSupportedException", "(String,String,Throwable)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLFeatureNotSupportedException", True, "SQLFeatureNotSupportedException", "(String,String,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLFeatureNotSupportedException", True, "SQLFeatureNotSupportedException", "(String,String,int)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLFeatureNotSupportedException", True, "SQLFeatureNotSupportedException", "(String,String,int,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLFeatureNotSupportedException", True, "SQLFeatureNotSupportedException", "(String,String,int,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLFeatureNotSupportedException", True, "SQLFeatureNotSupportedException", "(String,String,int,Throwable)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLFeatureNotSupportedException", True, "SQLFeatureNotSupportedException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLFeatureNotSupportedException", True, "SQLFeatureNotSupportedException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLFeatureNotSupportedException", True, "SQLFeatureNotSupportedException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLInput", True, "readArray", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.sql", "SQLInput", True, "readAsciiStream", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.sql", "SQLInput", True, "readBinaryStream", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.sql", "SQLInput", True, "readBlob", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.sql", "SQLInput", True, "readBytes", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.sql", "SQLInput", True, "readCharacterStream", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.sql", "SQLInput", True, "readClob", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.sql", "SQLInput", True, "readDate", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.sql", "SQLInput", True, "readNClob", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.sql", "SQLInput", True, "readNString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.sql", "SQLInput", True, "readObject", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.sql", "SQLInput", True, "readRef", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.sql", "SQLInput", True, "readRowId", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.sql", "SQLInput", True, "readSQLXML", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.sql", "SQLInput", True, "readString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.sql", "SQLInput", True, "readTime", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.sql", "SQLInput", True, "readTimestamp", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.sql", "SQLInput", True, "readURL", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.sql", "SQLIntegrityConstraintViolationException", True, "SQLIntegrityConstraintViolationException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLIntegrityConstraintViolationException", True, "SQLIntegrityConstraintViolationException", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLIntegrityConstraintViolationException", True, "SQLIntegrityConstraintViolationException", "(String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLIntegrityConstraintViolationException", True, "SQLIntegrityConstraintViolationException", "(String,String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLIntegrityConstraintViolationException", True, "SQLIntegrityConstraintViolationException", "(String,String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLIntegrityConstraintViolationException", True, "SQLIntegrityConstraintViolationException", "(String,String,Throwable)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLIntegrityConstraintViolationException", True, "SQLIntegrityConstraintViolationException", "(String,String,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLIntegrityConstraintViolationException", True, "SQLIntegrityConstraintViolationException", "(String,String,int)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLIntegrityConstraintViolationException", True, "SQLIntegrityConstraintViolationException", "(String,String,int,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLIntegrityConstraintViolationException", True, "SQLIntegrityConstraintViolationException", "(String,String,int,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLIntegrityConstraintViolationException", True, "SQLIntegrityConstraintViolationException", "(String,String,int,Throwable)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLIntegrityConstraintViolationException", True, "SQLIntegrityConstraintViolationException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLIntegrityConstraintViolationException", True, "SQLIntegrityConstraintViolationException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLIntegrityConstraintViolationException", True, "SQLIntegrityConstraintViolationException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLInvalidAuthorizationSpecException", True, "SQLInvalidAuthorizationSpecException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLInvalidAuthorizationSpecException", True, "SQLInvalidAuthorizationSpecException", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLInvalidAuthorizationSpecException", True, "SQLInvalidAuthorizationSpecException", "(String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLInvalidAuthorizationSpecException", True, "SQLInvalidAuthorizationSpecException", "(String,String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLInvalidAuthorizationSpecException", True, "SQLInvalidAuthorizationSpecException", "(String,String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLInvalidAuthorizationSpecException", True, "SQLInvalidAuthorizationSpecException", "(String,String,Throwable)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLInvalidAuthorizationSpecException", True, "SQLInvalidAuthorizationSpecException", "(String,String,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLInvalidAuthorizationSpecException", True, "SQLInvalidAuthorizationSpecException", "(String,String,int)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLInvalidAuthorizationSpecException", True, "SQLInvalidAuthorizationSpecException", "(String,String,int,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLInvalidAuthorizationSpecException", True, "SQLInvalidAuthorizationSpecException", "(String,String,int,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLInvalidAuthorizationSpecException", True, "SQLInvalidAuthorizationSpecException", "(String,String,int,Throwable)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLInvalidAuthorizationSpecException", True, "SQLInvalidAuthorizationSpecException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLInvalidAuthorizationSpecException", True, "SQLInvalidAuthorizationSpecException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLInvalidAuthorizationSpecException", True, "SQLInvalidAuthorizationSpecException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLNonTransientConnectionException", True, "SQLNonTransientConnectionException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLNonTransientConnectionException", True, "SQLNonTransientConnectionException", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLNonTransientConnectionException", True, "SQLNonTransientConnectionException", "(String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLNonTransientConnectionException", True, "SQLNonTransientConnectionException", "(String,String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLNonTransientConnectionException", True, "SQLNonTransientConnectionException", "(String,String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLNonTransientConnectionException", True, "SQLNonTransientConnectionException", "(String,String,Throwable)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLNonTransientConnectionException", True, "SQLNonTransientConnectionException", "(String,String,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLNonTransientConnectionException", True, "SQLNonTransientConnectionException", "(String,String,int)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLNonTransientConnectionException", True, "SQLNonTransientConnectionException", "(String,String,int,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLNonTransientConnectionException", True, "SQLNonTransientConnectionException", "(String,String,int,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLNonTransientConnectionException", True, "SQLNonTransientConnectionException", "(String,String,int,Throwable)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLNonTransientConnectionException", True, "SQLNonTransientConnectionException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLNonTransientConnectionException", True, "SQLNonTransientConnectionException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLNonTransientConnectionException", True, "SQLNonTransientConnectionException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLNonTransientException", True, "SQLNonTransientException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLNonTransientException", True, "SQLNonTransientException", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLNonTransientException", True, "SQLNonTransientException", "(String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLNonTransientException", True, "SQLNonTransientException", "(String,String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLNonTransientException", True, "SQLNonTransientException", "(String,String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLNonTransientException", True, "SQLNonTransientException", "(String,String,Throwable)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLNonTransientException", True, "SQLNonTransientException", "(String,String,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLNonTransientException", True, "SQLNonTransientException", "(String,String,int)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLNonTransientException", True, "SQLNonTransientException", "(String,String,int,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLNonTransientException", True, "SQLNonTransientException", "(String,String,int,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLNonTransientException", True, "SQLNonTransientException", "(String,String,int,Throwable)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLNonTransientException", True, "SQLNonTransientException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLNonTransientException", True, "SQLNonTransientException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLNonTransientException", True, "SQLNonTransientException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLOutput", True, "writeAsciiStream", "(InputStream)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLOutput", True, "writeBinaryStream", "(InputStream)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLOutput", True, "writeBytes", "(byte[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLOutput", True, "writeCharacterStream", "(Reader)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLOutput", True, "writeDate", "(Date)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLOutput", True, "writeNClob", "(NClob)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLOutput", True, "writeNString", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLOutput", True, "writeRowId", "(RowId)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLOutput", True, "writeSQLXML", "(SQLXML)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLOutput", True, "writeString", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLOutput", True, "writeTime", "(Time)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLOutput", True, "writeTimestamp", "(Timestamp)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLPermission", False, "SQLPermission", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLPermission", False, "SQLPermission", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLRecoverableException", True, "SQLRecoverableException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLRecoverableException", True, "SQLRecoverableException", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLRecoverableException", True, "SQLRecoverableException", "(String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLRecoverableException", True, "SQLRecoverableException", "(String,String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLRecoverableException", True, "SQLRecoverableException", "(String,String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLRecoverableException", True, "SQLRecoverableException", "(String,String,Throwable)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLRecoverableException", True, "SQLRecoverableException", "(String,String,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLRecoverableException", True, "SQLRecoverableException", "(String,String,int)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLRecoverableException", True, "SQLRecoverableException", "(String,String,int,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLRecoverableException", True, "SQLRecoverableException", "(String,String,int,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLRecoverableException", True, "SQLRecoverableException", "(String,String,int,Throwable)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLRecoverableException", True, "SQLRecoverableException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLRecoverableException", True, "SQLRecoverableException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLRecoverableException", True, "SQLRecoverableException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLSyntaxErrorException", True, "SQLSyntaxErrorException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLSyntaxErrorException", True, "SQLSyntaxErrorException", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLSyntaxErrorException", True, "SQLSyntaxErrorException", "(String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLSyntaxErrorException", True, "SQLSyntaxErrorException", "(String,String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLSyntaxErrorException", True, "SQLSyntaxErrorException", "(String,String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLSyntaxErrorException", True, "SQLSyntaxErrorException", "(String,String,Throwable)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLSyntaxErrorException", True, "SQLSyntaxErrorException", "(String,String,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLSyntaxErrorException", True, "SQLSyntaxErrorException", "(String,String,int)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLSyntaxErrorException", True, "SQLSyntaxErrorException", "(String,String,int,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLSyntaxErrorException", True, "SQLSyntaxErrorException", "(String,String,int,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLSyntaxErrorException", True, "SQLSyntaxErrorException", "(String,String,int,Throwable)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLSyntaxErrorException", True, "SQLSyntaxErrorException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLSyntaxErrorException", True, "SQLSyntaxErrorException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLSyntaxErrorException", True, "SQLSyntaxErrorException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLTimeoutException", True, "SQLTimeoutException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLTimeoutException", True, "SQLTimeoutException", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLTimeoutException", True, "SQLTimeoutException", "(String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLTimeoutException", True, "SQLTimeoutException", "(String,String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLTimeoutException", True, "SQLTimeoutException", "(String,String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLTimeoutException", True, "SQLTimeoutException", "(String,String,Throwable)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLTimeoutException", True, "SQLTimeoutException", "(String,String,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLTimeoutException", True, "SQLTimeoutException", "(String,String,int)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLTimeoutException", True, "SQLTimeoutException", "(String,String,int,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLTimeoutException", True, "SQLTimeoutException", "(String,String,int,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLTimeoutException", True, "SQLTimeoutException", "(String,String,int,Throwable)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLTimeoutException", True, "SQLTimeoutException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLTimeoutException", True, "SQLTimeoutException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLTimeoutException", True, "SQLTimeoutException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLTransactionRollbackException", True, "SQLTransactionRollbackException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLTransactionRollbackException", True, "SQLTransactionRollbackException", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLTransactionRollbackException", True, "SQLTransactionRollbackException", "(String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLTransactionRollbackException", True, "SQLTransactionRollbackException", "(String,String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLTransactionRollbackException", True, "SQLTransactionRollbackException", "(String,String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLTransactionRollbackException", True, "SQLTransactionRollbackException", "(String,String,Throwable)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLTransactionRollbackException", True, "SQLTransactionRollbackException", "(String,String,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLTransactionRollbackException", True, "SQLTransactionRollbackException", "(String,String,int)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLTransactionRollbackException", True, "SQLTransactionRollbackException", "(String,String,int,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLTransactionRollbackException", True, "SQLTransactionRollbackException", "(String,String,int,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLTransactionRollbackException", True, "SQLTransactionRollbackException", "(String,String,int,Throwable)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLTransactionRollbackException", True, "SQLTransactionRollbackException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLTransactionRollbackException", True, "SQLTransactionRollbackException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLTransactionRollbackException", True, "SQLTransactionRollbackException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLTransientConnectionException", True, "SQLTransientConnectionException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLTransientConnectionException", True, "SQLTransientConnectionException", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLTransientConnectionException", True, "SQLTransientConnectionException", "(String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLTransientConnectionException", True, "SQLTransientConnectionException", "(String,String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLTransientConnectionException", True, "SQLTransientConnectionException", "(String,String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLTransientConnectionException", True, "SQLTransientConnectionException", "(String,String,Throwable)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLTransientConnectionException", True, "SQLTransientConnectionException", "(String,String,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLTransientConnectionException", True, "SQLTransientConnectionException", "(String,String,int)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLTransientConnectionException", True, "SQLTransientConnectionException", "(String,String,int,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLTransientConnectionException", True, "SQLTransientConnectionException", "(String,String,int,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLTransientConnectionException", True, "SQLTransientConnectionException", "(String,String,int,Throwable)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLTransientConnectionException", True, "SQLTransientConnectionException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLTransientConnectionException", True, "SQLTransientConnectionException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLTransientConnectionException", True, "SQLTransientConnectionException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLTransientException", True, "SQLTransientException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLTransientException", True, "SQLTransientException", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLTransientException", True, "SQLTransientException", "(String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLTransientException", True, "SQLTransientException", "(String,String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLTransientException", True, "SQLTransientException", "(String,String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLTransientException", True, "SQLTransientException", "(String,String,Throwable)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLTransientException", True, "SQLTransientException", "(String,String,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLTransientException", True, "SQLTransientException", "(String,String,int)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLTransientException", True, "SQLTransientException", "(String,String,int,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLTransientException", True, "SQLTransientException", "(String,String,int,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLTransientException", True, "SQLTransientException", "(String,String,int,Throwable)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLTransientException", True, "SQLTransientException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLTransientException", True, "SQLTransientException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLTransientException", True, "SQLTransientException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLWarning", True, "SQLWarning", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLWarning", True, "SQLWarning", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLWarning", True, "SQLWarning", "(String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLWarning", True, "SQLWarning", "(String,String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLWarning", True, "SQLWarning", "(String,String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLWarning", True, "SQLWarning", "(String,String,Throwable)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLWarning", True, "SQLWarning", "(String,String,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLWarning", True, "SQLWarning", "(String,String,int)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLWarning", True, "SQLWarning", "(String,String,int,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLWarning", True, "SQLWarning", "(String,String,int,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLWarning", True, "SQLWarning", "(String,String,int,Throwable)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLWarning", True, "SQLWarning", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLWarning", True, "SQLWarning", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLWarning", True, "SQLWarning", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLWarning", True, "getNextWarning", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.sql", "Statement", True, "enquoteIdentifier", "(String,boolean)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.sql", "Statement", True, "enquoteLiteral", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.sql", "Statement", True, "enquoteNCharLiteral", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.sql", "Struct", True, "getAttributes", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.sql", "Struct", True, "getAttributes", "(Map)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.sql", "Struct", True, "getSQLTypeName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.sql", "Wrapper", True, "unwrap", "(Class)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["java.sql", "Array", "free", "()", "summary", "df-generated"] + - ["java.sql", "Array", "getBaseType", "()", "summary", "df-generated"] + - ["java.sql", "Array", "getResultSet", "()", "summary", "df-generated"] + - ["java.sql", "Array", "getResultSet", "(Map)", "summary", "df-generated"] + - ["java.sql", "Array", "getResultSet", "(long,int)", "summary", "df-generated"] + - ["java.sql", "Array", "getResultSet", "(long,int,Map)", "summary", "df-generated"] + - ["java.sql", "BatchUpdateException", "BatchUpdateException", "(int[])", "summary", "df-generated"] + - ["java.sql", "BatchUpdateException", "getLargeUpdateCounts", "()", "summary", "df-generated"] + - ["java.sql", "BatchUpdateException", "getUpdateCounts", "()", "summary", "df-generated"] + - ["java.sql", "Blob", "free", "()", "summary", "df-generated"] + - ["java.sql", "Blob", "getBytes", "(long,int)", "summary", "df-generated"] + - ["java.sql", "Blob", "length", "()", "summary", "df-generated"] + - ["java.sql", "Blob", "position", "(Blob,long)", "summary", "df-generated"] + - ["java.sql", "Blob", "position", "(byte[],long)", "summary", "df-generated"] + - ["java.sql", "Blob", "setBinaryStream", "(long)", "summary", "df-generated"] + - ["java.sql", "Blob", "setBytes", "(long,byte[])", "summary", "df-generated"] + - ["java.sql", "Blob", "setBytes", "(long,byte[],int,int)", "summary", "df-generated"] + - ["java.sql", "Blob", "truncate", "(long)", "summary", "df-generated"] + - ["java.sql", "CallableStatement", "registerOutParameter", "(String,SQLType)", "summary", "df-generated"] + - ["java.sql", "CallableStatement", "registerOutParameter", "(String,SQLType,String)", "summary", "df-generated"] + - ["java.sql", "CallableStatement", "registerOutParameter", "(String,SQLType,int)", "summary", "df-generated"] + - ["java.sql", "CallableStatement", "registerOutParameter", "(int,SQLType)", "summary", "df-generated"] + - ["java.sql", "CallableStatement", "registerOutParameter", "(int,SQLType,String)", "summary", "df-generated"] + - ["java.sql", "CallableStatement", "registerOutParameter", "(int,SQLType,int)", "summary", "df-generated"] + - ["java.sql", "CallableStatement", "setObject", "(String,Object,SQLType)", "summary", "df-generated"] + - ["java.sql", "CallableStatement", "setObject", "(String,Object,SQLType,int)", "summary", "df-generated"] + - ["java.sql", "Clob", "free", "()", "summary", "df-generated"] + - ["java.sql", "Clob", "getAsciiStream", "()", "summary", "df-generated"] + - ["java.sql", "Clob", "length", "()", "summary", "df-generated"] + - ["java.sql", "Clob", "position", "(Clob,long)", "summary", "df-generated"] + - ["java.sql", "Clob", "position", "(String,long)", "summary", "df-generated"] + - ["java.sql", "Clob", "setAsciiStream", "(long)", "summary", "df-generated"] + - ["java.sql", "Clob", "setCharacterStream", "(long)", "summary", "df-generated"] + - ["java.sql", "Clob", "setString", "(long,String)", "summary", "df-generated"] + - ["java.sql", "Clob", "setString", "(long,String,int,int)", "summary", "df-generated"] + - ["java.sql", "Clob", "truncate", "(long)", "summary", "df-generated"] + - ["java.sql", "Connection", "beginRequest", "()", "summary", "df-generated"] + - ["java.sql", "Connection", "endRequest", "()", "summary", "df-generated"] + - ["java.sql", "Connection", "setShardingKey", "(ShardingKey)", "summary", "df-generated"] + - ["java.sql", "Connection", "setShardingKey", "(ShardingKey,ShardingKey)", "summary", "df-generated"] + - ["java.sql", "Connection", "setShardingKeyIfValid", "(ShardingKey,ShardingKey,int)", "summary", "df-generated"] + - ["java.sql", "Connection", "setShardingKeyIfValid", "(ShardingKey,int)", "summary", "df-generated"] + - ["java.sql", "DataTruncation", "DataTruncation", "(int,boolean,boolean,int,int)", "summary", "df-generated"] + - ["java.sql", "DataTruncation", "getDataSize", "()", "summary", "df-generated"] + - ["java.sql", "DataTruncation", "getIndex", "()", "summary", "df-generated"] + - ["java.sql", "DataTruncation", "getParameter", "()", "summary", "df-generated"] + - ["java.sql", "DataTruncation", "getRead", "()", "summary", "df-generated"] + - ["java.sql", "DataTruncation", "getTransferSize", "()", "summary", "df-generated"] + - ["java.sql", "DatabaseMetaData", "getMaxLogicalLobSize", "()", "summary", "df-generated"] + - ["java.sql", "DatabaseMetaData", "supportsRefCursors", "()", "summary", "df-generated"] + - ["java.sql", "DatabaseMetaData", "supportsSharding", "()", "summary", "df-generated"] + - ["java.sql", "Date", "Date", "(int,int,int)", "summary", "df-generated"] + - ["java.sql", "Date", "Date", "(long)", "summary", "df-generated"] + - ["java.sql", "Date", "toLocalDate", "()", "summary", "df-generated"] + - ["java.sql", "Date", "valueOf", "(LocalDate)", "summary", "df-generated"] + - ["java.sql", "Date", "valueOf", "(String)", "summary", "df-generated"] + - ["java.sql", "DriverManager", "deregisterDriver", "(Driver)", "summary", "df-generated"] + - ["java.sql", "DriverManager", "drivers", "()", "summary", "df-generated"] + - ["java.sql", "DriverManager", "getConnection", "(String)", "summary", "df-generated"] + - ["java.sql", "DriverManager", "getConnection", "(String,Properties)", "summary", "df-generated"] + - ["java.sql", "DriverManager", "getConnection", "(String,String,String)", "summary", "df-generated"] + - ["java.sql", "DriverManager", "getDriver", "(String)", "summary", "df-generated"] + - ["java.sql", "DriverManager", "getDrivers", "()", "summary", "df-generated"] + - ["java.sql", "DriverManager", "getLogStream", "()", "summary", "df-generated"] + - ["java.sql", "DriverManager", "getLogWriter", "()", "summary", "df-generated"] + - ["java.sql", "DriverManager", "getLoginTimeout", "()", "summary", "df-generated"] + - ["java.sql", "DriverManager", "println", "(String)", "summary", "df-generated"] + - ["java.sql", "DriverManager", "registerDriver", "(Driver)", "summary", "df-generated"] + - ["java.sql", "DriverManager", "registerDriver", "(Driver,DriverAction)", "summary", "df-generated"] + - ["java.sql", "DriverManager", "setLogStream", "(PrintStream)", "summary", "df-generated"] + - ["java.sql", "DriverManager", "setLogWriter", "(PrintWriter)", "summary", "df-generated"] + - ["java.sql", "DriverManager", "setLoginTimeout", "(int)", "summary", "df-generated"] + - ["java.sql", "JDBCType", "valueOf", "(int)", "summary", "df-generated"] + - ["java.sql", "PreparedStatement", "executeLargeUpdate", "()", "summary", "df-generated"] + - ["java.sql", "PreparedStatement", "setObject", "(int,Object,SQLType)", "summary", "df-generated"] + - ["java.sql", "PreparedStatement", "setObject", "(int,Object,SQLType,int)", "summary", "df-generated"] + - ["java.sql", "Ref", "getObject", "(Map)", "summary", "df-generated"] + - ["java.sql", "ResultSet", "updateObject", "(String,Object,SQLType)", "summary", "df-generated"] + - ["java.sql", "ResultSet", "updateObject", "(String,Object,SQLType,int)", "summary", "df-generated"] + - ["java.sql", "ResultSet", "updateObject", "(int,Object,SQLType)", "summary", "df-generated"] + - ["java.sql", "ResultSet", "updateObject", "(int,Object,SQLType,int)", "summary", "df-generated"] + - ["java.sql", "ResultSetMetaData", "getColumnClassName", "(int)", "summary", "df-generated"] + - ["java.sql", "ResultSetMetaData", "getColumnCount", "()", "summary", "df-generated"] + - ["java.sql", "ResultSetMetaData", "getColumnDisplaySize", "(int)", "summary", "df-generated"] + - ["java.sql", "ResultSetMetaData", "getColumnType", "(int)", "summary", "df-generated"] + - ["java.sql", "ResultSetMetaData", "getPrecision", "(int)", "summary", "df-generated"] + - ["java.sql", "ResultSetMetaData", "getScale", "(int)", "summary", "df-generated"] + - ["java.sql", "ResultSetMetaData", "isAutoIncrement", "(int)", "summary", "df-generated"] + - ["java.sql", "ResultSetMetaData", "isCaseSensitive", "(int)", "summary", "df-generated"] + - ["java.sql", "ResultSetMetaData", "isCurrency", "(int)", "summary", "df-generated"] + - ["java.sql", "ResultSetMetaData", "isDefinitelyWritable", "(int)", "summary", "df-generated"] + - ["java.sql", "ResultSetMetaData", "isNullable", "(int)", "summary", "df-generated"] + - ["java.sql", "ResultSetMetaData", "isReadOnly", "(int)", "summary", "df-generated"] + - ["java.sql", "ResultSetMetaData", "isSearchable", "(int)", "summary", "df-generated"] + - ["java.sql", "ResultSetMetaData", "isSigned", "(int)", "summary", "df-generated"] + - ["java.sql", "ResultSetMetaData", "isWritable", "(int)", "summary", "df-generated"] + - ["java.sql", "SQLException", "getErrorCode", "()", "summary", "df-generated"] + - ["java.sql", "SQLException", "setNextException", "(SQLException)", "summary", "df-generated"] + - ["java.sql", "SQLInput", "readBigDecimal", "()", "summary", "df-generated"] + - ["java.sql", "SQLInput", "readBoolean", "()", "summary", "df-generated"] + - ["java.sql", "SQLInput", "readByte", "()", "summary", "df-generated"] + - ["java.sql", "SQLInput", "readDouble", "()", "summary", "df-generated"] + - ["java.sql", "SQLInput", "readFloat", "()", "summary", "df-generated"] + - ["java.sql", "SQLInput", "readInt", "()", "summary", "df-generated"] + - ["java.sql", "SQLInput", "readLong", "()", "summary", "df-generated"] + - ["java.sql", "SQLInput", "readObject", "(Class)", "summary", "df-generated"] + - ["java.sql", "SQLInput", "readShort", "()", "summary", "df-generated"] + - ["java.sql", "SQLInput", "wasNull", "()", "summary", "df-generated"] + - ["java.sql", "SQLOutput", "writeArray", "(Array)", "summary", "df-generated"] + - ["java.sql", "SQLOutput", "writeBigDecimal", "(BigDecimal)", "summary", "df-generated"] + - ["java.sql", "SQLOutput", "writeBlob", "(Blob)", "summary", "df-generated"] + - ["java.sql", "SQLOutput", "writeBoolean", "(boolean)", "summary", "df-generated"] + - ["java.sql", "SQLOutput", "writeByte", "(byte)", "summary", "df-generated"] + - ["java.sql", "SQLOutput", "writeClob", "(Clob)", "summary", "df-generated"] + - ["java.sql", "SQLOutput", "writeDouble", "(double)", "summary", "df-generated"] + - ["java.sql", "SQLOutput", "writeFloat", "(float)", "summary", "df-generated"] + - ["java.sql", "SQLOutput", "writeInt", "(int)", "summary", "df-generated"] + - ["java.sql", "SQLOutput", "writeLong", "(long)", "summary", "df-generated"] + - ["java.sql", "SQLOutput", "writeObject", "(Object,SQLType)", "summary", "df-generated"] + - ["java.sql", "SQLOutput", "writeObject", "(SQLData)", "summary", "df-generated"] + - ["java.sql", "SQLOutput", "writeRef", "(Ref)", "summary", "df-generated"] + - ["java.sql", "SQLOutput", "writeShort", "(short)", "summary", "df-generated"] + - ["java.sql", "SQLOutput", "writeStruct", "(Struct)", "summary", "df-generated"] + - ["java.sql", "SQLOutput", "writeURL", "(URL)", "summary", "df-generated"] + - ["java.sql", "SQLType", "getName", "()", "summary", "df-generated"] + - ["java.sql", "SQLType", "getVendor", "()", "summary", "df-generated"] + - ["java.sql", "SQLType", "getVendorTypeNumber", "()", "summary", "df-generated"] + - ["java.sql", "SQLWarning", "setNextWarning", "(SQLWarning)", "summary", "df-generated"] + - ["java.sql", "Statement", "executeLargeBatch", "()", "summary", "df-generated"] + - ["java.sql", "Statement", "executeLargeUpdate", "(String)", "summary", "df-generated"] + - ["java.sql", "Statement", "executeLargeUpdate", "(String,String[])", "summary", "df-generated"] + - ["java.sql", "Statement", "executeLargeUpdate", "(String,int)", "summary", "df-generated"] + - ["java.sql", "Statement", "executeLargeUpdate", "(String,int[])", "summary", "df-generated"] + - ["java.sql", "Statement", "getLargeMaxRows", "()", "summary", "df-generated"] + - ["java.sql", "Statement", "getLargeUpdateCount", "()", "summary", "df-generated"] + - ["java.sql", "Statement", "isSimpleIdentifier", "(String)", "summary", "df-generated"] + - ["java.sql", "Statement", "setLargeMaxRows", "(long)", "summary", "df-generated"] + - ["java.sql", "Time", "Time", "(int,int,int)", "summary", "df-generated"] + - ["java.sql", "Time", "Time", "(long)", "summary", "df-generated"] + - ["java.sql", "Time", "toLocalTime", "()", "summary", "df-generated"] + - ["java.sql", "Time", "valueOf", "(LocalTime)", "summary", "df-generated"] + - ["java.sql", "Time", "valueOf", "(String)", "summary", "df-generated"] + - ["java.sql", "Timestamp", "Timestamp", "(int,int,int,int,int,int,int)", "summary", "df-generated"] + - ["java.sql", "Timestamp", "after", "(Timestamp)", "summary", "df-generated"] + - ["java.sql", "Timestamp", "before", "(Timestamp)", "summary", "df-generated"] + - ["java.sql", "Timestamp", "compareTo", "(Timestamp)", "summary", "df-generated"] + - ["java.sql", "Timestamp", "equals", "(Timestamp)", "summary", "df-generated"] + - ["java.sql", "Timestamp", "from", "(Instant)", "summary", "df-generated"] + - ["java.sql", "Timestamp", "getNanos", "()", "summary", "df-generated"] + - ["java.sql", "Timestamp", "setNanos", "(int)", "summary", "df-generated"] + - ["java.sql", "Timestamp", "toLocalDateTime", "()", "summary", "df-generated"] + - ["java.sql", "Timestamp", "valueOf", "(LocalDateTime)", "summary", "df-generated"] + - ["java.sql", "Timestamp", "valueOf", "(String)", "summary", "df-generated"] + - ["java.sql", "Wrapper", "isWrapperFor", "(Class)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/java.text.model.yml b/java/ql/lib/ext/generated/java.text.model.yml new file mode 100644 index 00000000000..2f384e7c178 --- /dev/null +++ b/java/ql/lib/ext/generated/java.text.model.yml @@ -0,0 +1,326 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["java.text", "Annotation", True, "Annotation", "(Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.text", "Annotation", True, "getValue", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "AttributedString", True, "AttributedString", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.text", "AttributedString", True, "AttributedString", "(String,Map)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.text", "AttributedString", True, "getIterator", "(AttributedCharacterIterator$Attribute[])", "", "Argument[0].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["java.text", "AttributedString", True, "getIterator", "(AttributedCharacterIterator$Attribute[],int,int)", "", "Argument[0].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["java.text", "Bidi", False, "Bidi", "(String,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.text", "Bidi", False, "Bidi", "(char[],int,byte[],int,int,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.text", "BreakIterator", True, "setText", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.text", "ChoiceFormat", True, "ChoiceFormat", "(double[],String[])", "", "Argument[1].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["java.text", "ChoiceFormat", True, "getFormats", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "ChoiceFormat", True, "setChoices", "(double[],String[])", "", "Argument[1].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["java.text", "ChoiceFormat", True, "toPattern", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "CollationKey", True, "getSourceString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "Collator", True, "getCollationKey", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.text", "Collator", True, "getCollationKey", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "Collator", True, "getCollationKey", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "CompactNumberFormat", False, "CompactNumberFormat", "(String,DecimalFormatSymbols,String[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.text", "CompactNumberFormat", False, "CompactNumberFormat", "(String,DecimalFormatSymbols,String[])", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.text", "CompactNumberFormat", False, "CompactNumberFormat", "(String,DecimalFormatSymbols,String[])", "", "Argument[2].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["java.text", "CompactNumberFormat", False, "CompactNumberFormat", "(String,DecimalFormatSymbols,String[],String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.text", "CompactNumberFormat", False, "CompactNumberFormat", "(String,DecimalFormatSymbols,String[],String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.text", "CompactNumberFormat", False, "CompactNumberFormat", "(String,DecimalFormatSymbols,String[],String)", "", "Argument[2].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["java.text", "CompactNumberFormat", False, "CompactNumberFormat", "(String,DecimalFormatSymbols,String[],String)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["java.text", "DateFormat", True, "format", "(Date,StringBuffer,FieldPosition)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "DateFormat", True, "format", "(Date,StringBuffer,FieldPosition)", "", "Argument[this]", "Argument[1]", "taint", "df-generated"] + - ["java.text", "DateFormat", True, "format", "(Date,StringBuffer,FieldPosition)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "DateFormat", True, "getCalendar", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "DateFormat", True, "getDateInstance", "(int,Locale)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "DateFormat", True, "getDateTimeInstance", "(int,int,Locale)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "DateFormat", True, "getNumberFormat", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "DateFormat", True, "getTimeInstance", "(int,Locale)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "DateFormat", True, "getTimeZone", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "DateFormat", True, "setCalendar", "(Calendar)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.text", "DateFormat", True, "setNumberFormat", "(NumberFormat)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.text", "DateFormat", True, "setTimeZone", "(TimeZone)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.text", "DateFormatSymbols", True, "DateFormatSymbols", "(Locale)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.text", "DateFormatSymbols", True, "getAmPmStrings", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "DateFormatSymbols", True, "getEras", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "DateFormatSymbols", True, "getInstance", "(Locale)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "DateFormatSymbols", True, "getLocalPatternChars", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "DateFormatSymbols", True, "getMonths", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "DateFormatSymbols", True, "getShortMonths", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "DateFormatSymbols", True, "getShortWeekdays", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "DateFormatSymbols", True, "getWeekdays", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "DateFormatSymbols", True, "getZoneStrings", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "DateFormatSymbols", True, "setAmPmStrings", "(String[])", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["java.text", "DateFormatSymbols", True, "setEras", "(String[])", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["java.text", "DateFormatSymbols", True, "setLocalPatternChars", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.text", "DateFormatSymbols", True, "setMonths", "(String[])", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["java.text", "DateFormatSymbols", True, "setShortMonths", "(String[])", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["java.text", "DateFormatSymbols", True, "setShortWeekdays", "(String[])", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["java.text", "DateFormatSymbols", True, "setWeekdays", "(String[])", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["java.text", "DateFormatSymbols", True, "setZoneStrings", "(String[][])", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["java.text", "DecimalFormat", True, "DecimalFormat", "(String,DecimalFormatSymbols)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.text", "DecimalFormat", True, "getDecimalFormatSymbols", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "DecimalFormat", True, "getNegativePrefix", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "DecimalFormat", True, "getNegativeSuffix", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "DecimalFormat", True, "getPositivePrefix", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "DecimalFormat", True, "getPositiveSuffix", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "DecimalFormat", True, "setDecimalFormatSymbols", "(DecimalFormatSymbols)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.text", "DecimalFormat", True, "setNegativePrefix", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.text", "DecimalFormat", True, "setNegativeSuffix", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.text", "DecimalFormat", True, "setPositivePrefix", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.text", "DecimalFormat", True, "setPositiveSuffix", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.text", "DecimalFormat", True, "toLocalizedPattern", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "DecimalFormat", True, "toPattern", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "DecimalFormatSymbols", True, "DecimalFormatSymbols", "(Locale)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.text", "DecimalFormatSymbols", True, "getCurrency", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "DecimalFormatSymbols", True, "getCurrencySymbol", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "DecimalFormatSymbols", True, "getExponentSeparator", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "DecimalFormatSymbols", True, "getInfinity", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "DecimalFormatSymbols", True, "getInstance", "(Locale)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "DecimalFormatSymbols", True, "getInternationalCurrencySymbol", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "DecimalFormatSymbols", True, "getNaN", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "DecimalFormatSymbols", True, "setCurrency", "(Currency)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.text", "DecimalFormatSymbols", True, "setCurrencySymbol", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.text", "DecimalFormatSymbols", True, "setExponentSeparator", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.text", "DecimalFormatSymbols", True, "setInfinity", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.text", "DecimalFormatSymbols", True, "setInternationalCurrencySymbol", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.text", "DecimalFormatSymbols", True, "setNaN", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.text", "FieldPosition", True, "FieldPosition", "(Format$Field)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.text", "FieldPosition", True, "FieldPosition", "(Format$Field,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.text", "FieldPosition", True, "getFieldAttribute", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "Format", True, "parseObject", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "Format", True, "parseObject", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "Format", True, "parseObject", "(String,ParsePosition)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "Format", True, "parseObject", "(String,ParsePosition)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "MessageFormat", True, "MessageFormat", "(String,Locale)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.text", "MessageFormat", True, "getFormats", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "MessageFormat", True, "getFormatsByArgumentIndex", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "MessageFormat", True, "getLocale", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "MessageFormat", True, "parse", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "MessageFormat", True, "parse", "(String,ParsePosition)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "MessageFormat", True, "setFormat", "(int,Format)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.text", "MessageFormat", True, "setFormatByArgumentIndex", "(int,Format)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.text", "MessageFormat", True, "setFormats", "(Format[])", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["java.text", "MessageFormat", True, "setFormatsByArgumentIndex", "(Format[])", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["java.text", "MessageFormat", True, "setLocale", "(Locale)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.text", "MessageFormat", True, "toPattern", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "Normalizer", False, "normalize", "(CharSequence,Normalizer$Form)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "NumberFormat", True, "format", "(double,StringBuffer,FieldPosition)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "NumberFormat", True, "format", "(double,StringBuffer,FieldPosition)", "", "Argument[this]", "Argument[1]", "taint", "df-generated"] + - ["java.text", "NumberFormat", True, "format", "(double,StringBuffer,FieldPosition)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "NumberFormat", True, "format", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "NumberFormat", True, "format", "(long,StringBuffer,FieldPosition)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "NumberFormat", True, "format", "(long,StringBuffer,FieldPosition)", "", "Argument[this]", "Argument[1]", "taint", "df-generated"] + - ["java.text", "NumberFormat", True, "format", "(long,StringBuffer,FieldPosition)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "NumberFormat", True, "getCompactNumberInstance", "(Locale,NumberFormat$Style)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "NumberFormat", True, "getCurrency", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "NumberFormat", True, "getCurrencyInstance", "(Locale)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "NumberFormat", True, "getInstance", "(Locale)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "NumberFormat", True, "getIntegerInstance", "(Locale)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "NumberFormat", True, "getNumberInstance", "(Locale)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "NumberFormat", True, "getPercentInstance", "(Locale)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "NumberFormat", True, "setCurrency", "(Currency)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.text", "ParseException", True, "ParseException", "(String,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.text", "RuleBasedCollator", True, "RuleBasedCollator", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.text", "RuleBasedCollator", True, "getCollationElementIterator", "(CharacterIterator)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "RuleBasedCollator", True, "getCollationElementIterator", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "RuleBasedCollator", True, "getRules", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "SimpleDateFormat", True, "SimpleDateFormat", "(String,DateFormatSymbols)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.text", "SimpleDateFormat", True, "SimpleDateFormat", "(String,DateFormatSymbols)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.text", "SimpleDateFormat", True, "SimpleDateFormat", "(String,Locale)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.text", "SimpleDateFormat", True, "SimpleDateFormat", "(String,Locale)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.text", "SimpleDateFormat", True, "applyPattern", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.text", "SimpleDateFormat", True, "get2DigitYearStart", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "SimpleDateFormat", True, "getDateFormatSymbols", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "SimpleDateFormat", True, "setDateFormatSymbols", "(DateFormatSymbols)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.text", "SimpleDateFormat", True, "toPattern", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "StringCharacterIterator", False, "StringCharacterIterator", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.text", "StringCharacterIterator", False, "StringCharacterIterator", "(String,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.text", "StringCharacterIterator", False, "StringCharacterIterator", "(String,int,int,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.text", "StringCharacterIterator", False, "setText", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["java.text", "AttributedCharacterIterator", "getAllAttributeKeys", "()", "summary", "df-generated"] + - ["java.text", "AttributedCharacterIterator", "getAttribute", "(AttributedCharacterIterator$Attribute)", "summary", "df-generated"] + - ["java.text", "AttributedCharacterIterator", "getAttributes", "()", "summary", "df-generated"] + - ["java.text", "AttributedCharacterIterator", "getRunLimit", "()", "summary", "df-generated"] + - ["java.text", "AttributedCharacterIterator", "getRunLimit", "(AttributedCharacterIterator$Attribute)", "summary", "df-generated"] + - ["java.text", "AttributedCharacterIterator", "getRunLimit", "(Set)", "summary", "df-generated"] + - ["java.text", "AttributedCharacterIterator", "getRunStart", "()", "summary", "df-generated"] + - ["java.text", "AttributedCharacterIterator", "getRunStart", "(AttributedCharacterIterator$Attribute)", "summary", "df-generated"] + - ["java.text", "AttributedCharacterIterator", "getRunStart", "(Set)", "summary", "df-generated"] + - ["java.text", "AttributedString", "AttributedString", "(AttributedCharacterIterator)", "summary", "df-generated"] + - ["java.text", "AttributedString", "AttributedString", "(AttributedCharacterIterator,int,int)", "summary", "df-generated"] + - ["java.text", "AttributedString", "AttributedString", "(AttributedCharacterIterator,int,int,AttributedCharacterIterator$Attribute[])", "summary", "df-generated"] + - ["java.text", "AttributedString", "addAttribute", "(AttributedCharacterIterator$Attribute,Object)", "summary", "df-generated"] + - ["java.text", "AttributedString", "addAttribute", "(AttributedCharacterIterator$Attribute,Object,int,int)", "summary", "df-generated"] + - ["java.text", "AttributedString", "addAttributes", "(Map,int,int)", "summary", "df-generated"] + - ["java.text", "AttributedString", "getIterator", "()", "summary", "df-generated"] + - ["java.text", "Bidi", "Bidi", "(AttributedCharacterIterator)", "summary", "df-generated"] + - ["java.text", "Bidi", "baseIsLeftToRight", "()", "summary", "df-generated"] + - ["java.text", "Bidi", "createLineBidi", "(int,int)", "summary", "df-generated"] + - ["java.text", "Bidi", "getBaseLevel", "()", "summary", "df-generated"] + - ["java.text", "Bidi", "getLength", "()", "summary", "df-generated"] + - ["java.text", "Bidi", "getLevelAt", "(int)", "summary", "df-generated"] + - ["java.text", "Bidi", "getRunCount", "()", "summary", "df-generated"] + - ["java.text", "Bidi", "getRunLevel", "(int)", "summary", "df-generated"] + - ["java.text", "Bidi", "getRunLimit", "(int)", "summary", "df-generated"] + - ["java.text", "Bidi", "getRunStart", "(int)", "summary", "df-generated"] + - ["java.text", "Bidi", "isLeftToRight", "()", "summary", "df-generated"] + - ["java.text", "Bidi", "isMixed", "()", "summary", "df-generated"] + - ["java.text", "Bidi", "isRightToLeft", "()", "summary", "df-generated"] + - ["java.text", "Bidi", "reorderVisually", "(byte[],int,Object[],int,int)", "summary", "df-generated"] + - ["java.text", "Bidi", "requiresBidi", "(char[],int,int)", "summary", "df-generated"] + - ["java.text", "BreakIterator", "current", "()", "summary", "df-generated"] + - ["java.text", "BreakIterator", "first", "()", "summary", "df-generated"] + - ["java.text", "BreakIterator", "following", "(int)", "summary", "df-generated"] + - ["java.text", "BreakIterator", "getAvailableLocales", "()", "summary", "df-generated"] + - ["java.text", "BreakIterator", "getCharacterInstance", "()", "summary", "df-generated"] + - ["java.text", "BreakIterator", "getCharacterInstance", "(Locale)", "summary", "df-generated"] + - ["java.text", "BreakIterator", "getLineInstance", "()", "summary", "df-generated"] + - ["java.text", "BreakIterator", "getLineInstance", "(Locale)", "summary", "df-generated"] + - ["java.text", "BreakIterator", "getSentenceInstance", "()", "summary", "df-generated"] + - ["java.text", "BreakIterator", "getSentenceInstance", "(Locale)", "summary", "df-generated"] + - ["java.text", "BreakIterator", "getText", "()", "summary", "df-generated"] + - ["java.text", "BreakIterator", "getWordInstance", "()", "summary", "df-generated"] + - ["java.text", "BreakIterator", "getWordInstance", "(Locale)", "summary", "df-generated"] + - ["java.text", "BreakIterator", "isBoundary", "(int)", "summary", "df-generated"] + - ["java.text", "BreakIterator", "last", "()", "summary", "df-generated"] + - ["java.text", "BreakIterator", "next", "()", "summary", "df-generated"] + - ["java.text", "BreakIterator", "next", "(int)", "summary", "df-generated"] + - ["java.text", "BreakIterator", "preceding", "(int)", "summary", "df-generated"] + - ["java.text", "BreakIterator", "previous", "()", "summary", "df-generated"] + - ["java.text", "BreakIterator", "setText", "(CharacterIterator)", "summary", "df-generated"] + - ["java.text", "CharacterIterator", "current", "()", "summary", "df-generated"] + - ["java.text", "CharacterIterator", "first", "()", "summary", "df-generated"] + - ["java.text", "CharacterIterator", "getBeginIndex", "()", "summary", "df-generated"] + - ["java.text", "CharacterIterator", "getEndIndex", "()", "summary", "df-generated"] + - ["java.text", "CharacterIterator", "getIndex", "()", "summary", "df-generated"] + - ["java.text", "CharacterIterator", "last", "()", "summary", "df-generated"] + - ["java.text", "CharacterIterator", "next", "()", "summary", "df-generated"] + - ["java.text", "CharacterIterator", "previous", "()", "summary", "df-generated"] + - ["java.text", "CharacterIterator", "setIndex", "(int)", "summary", "df-generated"] + - ["java.text", "ChoiceFormat", "ChoiceFormat", "(String)", "summary", "df-generated"] + - ["java.text", "ChoiceFormat", "applyPattern", "(String)", "summary", "df-generated"] + - ["java.text", "ChoiceFormat", "getLimits", "()", "summary", "df-generated"] + - ["java.text", "ChoiceFormat", "nextDouble", "(double)", "summary", "df-generated"] + - ["java.text", "ChoiceFormat", "nextDouble", "(double,boolean)", "summary", "df-generated"] + - ["java.text", "ChoiceFormat", "previousDouble", "(double)", "summary", "df-generated"] + - ["java.text", "CollationElementIterator", "getMaxExpansion", "(int)", "summary", "df-generated"] + - ["java.text", "CollationElementIterator", "getOffset", "()", "summary", "df-generated"] + - ["java.text", "CollationElementIterator", "next", "()", "summary", "df-generated"] + - ["java.text", "CollationElementIterator", "previous", "()", "summary", "df-generated"] + - ["java.text", "CollationElementIterator", "primaryOrder", "(int)", "summary", "df-generated"] + - ["java.text", "CollationElementIterator", "reset", "()", "summary", "df-generated"] + - ["java.text", "CollationElementIterator", "secondaryOrder", "(int)", "summary", "df-generated"] + - ["java.text", "CollationElementIterator", "setOffset", "(int)", "summary", "df-generated"] + - ["java.text", "CollationElementIterator", "setText", "(CharacterIterator)", "summary", "df-generated"] + - ["java.text", "CollationElementIterator", "setText", "(String)", "summary", "df-generated"] + - ["java.text", "CollationElementIterator", "tertiaryOrder", "(int)", "summary", "df-generated"] + - ["java.text", "CollationKey", "toByteArray", "()", "summary", "df-generated"] + - ["java.text", "Collator", "compare", "(String,String)", "summary", "df-generated"] + - ["java.text", "Collator", "equals", "(String,String)", "summary", "df-generated"] + - ["java.text", "Collator", "getAvailableLocales", "()", "summary", "df-generated"] + - ["java.text", "Collator", "getDecomposition", "()", "summary", "df-generated"] + - ["java.text", "Collator", "getInstance", "()", "summary", "df-generated"] + - ["java.text", "Collator", "getInstance", "(Locale)", "summary", "df-generated"] + - ["java.text", "Collator", "getStrength", "()", "summary", "df-generated"] + - ["java.text", "Collator", "setDecomposition", "(int)", "summary", "df-generated"] + - ["java.text", "Collator", "setStrength", "(int)", "summary", "df-generated"] + - ["java.text", "CompactNumberFormat", "getGroupingSize", "()", "summary", "df-generated"] + - ["java.text", "CompactNumberFormat", "isParseBigDecimal", "()", "summary", "df-generated"] + - ["java.text", "CompactNumberFormat", "setGroupingSize", "(int)", "summary", "df-generated"] + - ["java.text", "CompactNumberFormat", "setParseBigDecimal", "(boolean)", "summary", "df-generated"] + - ["java.text", "DateFormat$Field", "getCalendarField", "()", "summary", "df-generated"] + - ["java.text", "DateFormat$Field", "ofCalendarField", "(int)", "summary", "df-generated"] + - ["java.text", "DateFormat", "getAvailableLocales", "()", "summary", "df-generated"] + - ["java.text", "DateFormat", "getDateInstance", "()", "summary", "df-generated"] + - ["java.text", "DateFormat", "getDateInstance", "(int)", "summary", "df-generated"] + - ["java.text", "DateFormat", "getDateTimeInstance", "()", "summary", "df-generated"] + - ["java.text", "DateFormat", "getDateTimeInstance", "(int,int)", "summary", "df-generated"] + - ["java.text", "DateFormat", "getInstance", "()", "summary", "df-generated"] + - ["java.text", "DateFormat", "getTimeInstance", "()", "summary", "df-generated"] + - ["java.text", "DateFormat", "getTimeInstance", "(int)", "summary", "df-generated"] + - ["java.text", "DateFormat", "isLenient", "()", "summary", "df-generated"] + - ["java.text", "DateFormat", "parse", "(String,ParsePosition)", "summary", "df-generated"] + - ["java.text", "DateFormat", "setLenient", "(boolean)", "summary", "df-generated"] + - ["java.text", "DateFormatSymbols", "getAvailableLocales", "()", "summary", "df-generated"] + - ["java.text", "DateFormatSymbols", "getInstance", "()", "summary", "df-generated"] + - ["java.text", "DecimalFormat", "DecimalFormat", "(String)", "summary", "df-generated"] + - ["java.text", "DecimalFormat", "applyLocalizedPattern", "(String)", "summary", "df-generated"] + - ["java.text", "DecimalFormat", "applyPattern", "(String)", "summary", "df-generated"] + - ["java.text", "DecimalFormat", "getGroupingSize", "()", "summary", "df-generated"] + - ["java.text", "DecimalFormat", "getMultiplier", "()", "summary", "df-generated"] + - ["java.text", "DecimalFormat", "isDecimalSeparatorAlwaysShown", "()", "summary", "df-generated"] + - ["java.text", "DecimalFormat", "isParseBigDecimal", "()", "summary", "df-generated"] + - ["java.text", "DecimalFormat", "setDecimalSeparatorAlwaysShown", "(boolean)", "summary", "df-generated"] + - ["java.text", "DecimalFormat", "setGroupingSize", "(int)", "summary", "df-generated"] + - ["java.text", "DecimalFormat", "setMultiplier", "(int)", "summary", "df-generated"] + - ["java.text", "DecimalFormat", "setParseBigDecimal", "(boolean)", "summary", "df-generated"] + - ["java.text", "DecimalFormatSymbols", "getAvailableLocales", "()", "summary", "df-generated"] + - ["java.text", "DecimalFormatSymbols", "getDecimalSeparator", "()", "summary", "df-generated"] + - ["java.text", "DecimalFormatSymbols", "getDigit", "()", "summary", "df-generated"] + - ["java.text", "DecimalFormatSymbols", "getGroupingSeparator", "()", "summary", "df-generated"] + - ["java.text", "DecimalFormatSymbols", "getInstance", "()", "summary", "df-generated"] + - ["java.text", "DecimalFormatSymbols", "getMinusSign", "()", "summary", "df-generated"] + - ["java.text", "DecimalFormatSymbols", "getMonetaryDecimalSeparator", "()", "summary", "df-generated"] + - ["java.text", "DecimalFormatSymbols", "getMonetaryGroupingSeparator", "()", "summary", "df-generated"] + - ["java.text", "DecimalFormatSymbols", "getPatternSeparator", "()", "summary", "df-generated"] + - ["java.text", "DecimalFormatSymbols", "getPerMill", "()", "summary", "df-generated"] + - ["java.text", "DecimalFormatSymbols", "getPercent", "()", "summary", "df-generated"] + - ["java.text", "DecimalFormatSymbols", "getZeroDigit", "()", "summary", "df-generated"] + - ["java.text", "DecimalFormatSymbols", "setDecimalSeparator", "(char)", "summary", "df-generated"] + - ["java.text", "DecimalFormatSymbols", "setDigit", "(char)", "summary", "df-generated"] + - ["java.text", "DecimalFormatSymbols", "setGroupingSeparator", "(char)", "summary", "df-generated"] + - ["java.text", "DecimalFormatSymbols", "setMinusSign", "(char)", "summary", "df-generated"] + - ["java.text", "DecimalFormatSymbols", "setMonetaryDecimalSeparator", "(char)", "summary", "df-generated"] + - ["java.text", "DecimalFormatSymbols", "setMonetaryGroupingSeparator", "(char)", "summary", "df-generated"] + - ["java.text", "DecimalFormatSymbols", "setPatternSeparator", "(char)", "summary", "df-generated"] + - ["java.text", "DecimalFormatSymbols", "setPerMill", "(char)", "summary", "df-generated"] + - ["java.text", "DecimalFormatSymbols", "setPercent", "(char)", "summary", "df-generated"] + - ["java.text", "DecimalFormatSymbols", "setZeroDigit", "(char)", "summary", "df-generated"] + - ["java.text", "FieldPosition", "FieldPosition", "(int)", "summary", "df-generated"] + - ["java.text", "FieldPosition", "getBeginIndex", "()", "summary", "df-generated"] + - ["java.text", "FieldPosition", "getEndIndex", "()", "summary", "df-generated"] + - ["java.text", "FieldPosition", "getField", "()", "summary", "df-generated"] + - ["java.text", "FieldPosition", "setBeginIndex", "(int)", "summary", "df-generated"] + - ["java.text", "FieldPosition", "setEndIndex", "(int)", "summary", "df-generated"] + - ["java.text", "Format", "formatToCharacterIterator", "(Object)", "summary", "df-generated"] + - ["java.text", "MessageFormat", "MessageFormat", "(String)", "summary", "df-generated"] + - ["java.text", "MessageFormat", "applyPattern", "(String)", "summary", "df-generated"] + - ["java.text", "Normalizer", "isNormalized", "(CharSequence,Normalizer$Form)", "summary", "df-generated"] + - ["java.text", "NumberFormat", "format", "(double)", "summary", "df-generated"] + - ["java.text", "NumberFormat", "getAvailableLocales", "()", "summary", "df-generated"] + - ["java.text", "NumberFormat", "getCompactNumberInstance", "()", "summary", "df-generated"] + - ["java.text", "NumberFormat", "getCurrencyInstance", "()", "summary", "df-generated"] + - ["java.text", "NumberFormat", "getInstance", "()", "summary", "df-generated"] + - ["java.text", "NumberFormat", "getIntegerInstance", "()", "summary", "df-generated"] + - ["java.text", "NumberFormat", "getMaximumFractionDigits", "()", "summary", "df-generated"] + - ["java.text", "NumberFormat", "getMaximumIntegerDigits", "()", "summary", "df-generated"] + - ["java.text", "NumberFormat", "getMinimumFractionDigits", "()", "summary", "df-generated"] + - ["java.text", "NumberFormat", "getMinimumIntegerDigits", "()", "summary", "df-generated"] + - ["java.text", "NumberFormat", "getNumberInstance", "()", "summary", "df-generated"] + - ["java.text", "NumberFormat", "getPercentInstance", "()", "summary", "df-generated"] + - ["java.text", "NumberFormat", "getRoundingMode", "()", "summary", "df-generated"] + - ["java.text", "NumberFormat", "isGroupingUsed", "()", "summary", "df-generated"] + - ["java.text", "NumberFormat", "isParseIntegerOnly", "()", "summary", "df-generated"] + - ["java.text", "NumberFormat", "parse", "(String)", "summary", "df-generated"] + - ["java.text", "NumberFormat", "parse", "(String,ParsePosition)", "summary", "df-generated"] + - ["java.text", "NumberFormat", "setGroupingUsed", "(boolean)", "summary", "df-generated"] + - ["java.text", "NumberFormat", "setMaximumFractionDigits", "(int)", "summary", "df-generated"] + - ["java.text", "NumberFormat", "setMaximumIntegerDigits", "(int)", "summary", "df-generated"] + - ["java.text", "NumberFormat", "setMinimumFractionDigits", "(int)", "summary", "df-generated"] + - ["java.text", "NumberFormat", "setMinimumIntegerDigits", "(int)", "summary", "df-generated"] + - ["java.text", "NumberFormat", "setParseIntegerOnly", "(boolean)", "summary", "df-generated"] + - ["java.text", "NumberFormat", "setRoundingMode", "(RoundingMode)", "summary", "df-generated"] + - ["java.text", "ParseException", "getErrorOffset", "()", "summary", "df-generated"] + - ["java.text", "ParsePosition", "ParsePosition", "(int)", "summary", "df-generated"] + - ["java.text", "ParsePosition", "getErrorIndex", "()", "summary", "df-generated"] + - ["java.text", "ParsePosition", "getIndex", "()", "summary", "df-generated"] + - ["java.text", "ParsePosition", "setErrorIndex", "(int)", "summary", "df-generated"] + - ["java.text", "ParsePosition", "setIndex", "(int)", "summary", "df-generated"] + - ["java.text", "SimpleDateFormat", "applyLocalizedPattern", "(String)", "summary", "df-generated"] + - ["java.text", "SimpleDateFormat", "set2DigitYearStart", "(Date)", "summary", "df-generated"] + - ["java.text", "SimpleDateFormat", "toLocalizedPattern", "()", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/java.text.spi.model.yml b/java/ql/lib/ext/generated/java.text.spi.model.yml new file mode 100644 index 00000000000..e802b83640a --- /dev/null +++ b/java/ql/lib/ext/generated/java.text.spi.model.yml @@ -0,0 +1,21 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["java.text.spi", "BreakIteratorProvider", "getCharacterInstance", "(Locale)", "summary", "df-generated"] + - ["java.text.spi", "BreakIteratorProvider", "getLineInstance", "(Locale)", "summary", "df-generated"] + - ["java.text.spi", "BreakIteratorProvider", "getSentenceInstance", "(Locale)", "summary", "df-generated"] + - ["java.text.spi", "BreakIteratorProvider", "getWordInstance", "(Locale)", "summary", "df-generated"] + - ["java.text.spi", "CollatorProvider", "getInstance", "(Locale)", "summary", "df-generated"] + - ["java.text.spi", "DateFormatProvider", "getDateInstance", "(int,Locale)", "summary", "df-generated"] + - ["java.text.spi", "DateFormatProvider", "getDateTimeInstance", "(int,int,Locale)", "summary", "df-generated"] + - ["java.text.spi", "DateFormatProvider", "getTimeInstance", "(int,Locale)", "summary", "df-generated"] + - ["java.text.spi", "DateFormatSymbolsProvider", "getInstance", "(Locale)", "summary", "df-generated"] + - ["java.text.spi", "DecimalFormatSymbolsProvider", "getInstance", "(Locale)", "summary", "df-generated"] + - ["java.text.spi", "NumberFormatProvider", "getCompactNumberInstance", "(Locale,NumberFormat$Style)", "summary", "df-generated"] + - ["java.text.spi", "NumberFormatProvider", "getCurrencyInstance", "(Locale)", "summary", "df-generated"] + - ["java.text.spi", "NumberFormatProvider", "getIntegerInstance", "(Locale)", "summary", "df-generated"] + - ["java.text.spi", "NumberFormatProvider", "getNumberInstance", "(Locale)", "summary", "df-generated"] + - ["java.text.spi", "NumberFormatProvider", "getPercentInstance", "(Locale)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/java.time.chrono.model.yml b/java/ql/lib/ext/generated/java.time.chrono.model.yml new file mode 100644 index 00000000000..00180b2baf6 --- /dev/null +++ b/java/ql/lib/ext/generated/java.time.chrono.model.yml @@ -0,0 +1,118 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["java.time.chrono", "ChronoLocalDate", True, "atTime", "(LocalTime)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time.chrono", "ChronoLocalDate", True, "atTime", "(LocalTime)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.chrono", "ChronoLocalDate", True, "format", "(DateTimeFormatter)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time.chrono", "ChronoLocalDate", True, "format", "(DateTimeFormatter)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.chrono", "ChronoLocalDate", True, "from", "(TemporalAccessor)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time.chrono", "ChronoLocalDate", True, "getChronology", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.chrono", "ChronoLocalDate", True, "getEra", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.chrono", "ChronoLocalDate", True, "until", "(ChronoLocalDate)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.chrono", "ChronoLocalDateTime", True, "format", "(DateTimeFormatter)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time.chrono", "ChronoLocalDateTime", True, "from", "(TemporalAccessor)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time.chrono", "ChronoLocalDateTime", True, "getChronology", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.chrono", "ChronoPeriod", True, "between", "(ChronoLocalDate,ChronoLocalDate)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time.chrono", "ChronoPeriod", True, "getChronology", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.chrono", "ChronoPeriod", True, "minus", "(TemporalAmount)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.chrono", "ChronoPeriod", True, "multipliedBy", "(int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time.chrono", "ChronoPeriod", True, "negated", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.chrono", "ChronoPeriod", True, "normalized", "()", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time.chrono", "ChronoPeriod", True, "plus", "(TemporalAmount)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.chrono", "ChronoZonedDateTime", True, "format", "(DateTimeFormatter)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time.chrono", "ChronoZonedDateTime", True, "format", "(DateTimeFormatter)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.chrono", "ChronoZonedDateTime", True, "from", "(TemporalAccessor)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time.chrono", "ChronoZonedDateTime", True, "toLocalDate", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.chrono", "ChronoZonedDateTime", True, "toLocalTime", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.chrono", "Chronology", True, "date", "(Era,int,int,int)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time.chrono", "Chronology", True, "date", "(Era,int,int,int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.chrono", "Chronology", True, "date", "(TemporalAccessor)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time.chrono", "Chronology", True, "date", "(TemporalAccessor)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.chrono", "Chronology", True, "date", "(int,int,int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.chrono", "Chronology", True, "dateEpochDay", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.chrono", "Chronology", True, "dateNow", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.chrono", "Chronology", True, "dateNow", "(Clock)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.chrono", "Chronology", True, "dateNow", "(ZoneId)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.chrono", "Chronology", True, "dateYearDay", "(Era,int,int)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time.chrono", "Chronology", True, "dateYearDay", "(Era,int,int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.chrono", "Chronology", True, "dateYearDay", "(int,int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.chrono", "Chronology", True, "from", "(TemporalAccessor)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time.chrono", "Chronology", True, "getCalendarType", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.chrono", "Chronology", True, "getDisplayName", "(TextStyle,Locale)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.time.chrono", "Chronology", True, "getId", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.chrono", "Chronology", True, "localDateTime", "(TemporalAccessor)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time.chrono", "Chronology", True, "localDateTime", "(TemporalAccessor)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.chrono", "Chronology", True, "period", "(int,int,int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.chrono", "Chronology", True, "resolveDate", "(Map,ResolverStyle)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.chrono", "Chronology", True, "zonedDateTime", "(Instant,ZoneId)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.time.chrono", "Chronology", True, "zonedDateTime", "(TemporalAccessor)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time.chrono", "Era", True, "getDisplayName", "(TextStyle,Locale)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.time.chrono", "HijrahDate", False, "from", "(TemporalAccessor)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time.chrono", "HijrahDate", False, "withVariant", "(HijrahChronology)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time.chrono", "JapaneseDate", False, "from", "(TemporalAccessor)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time.chrono", "JapaneseDate", False, "of", "(JapaneseEra,int,int,int)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time.chrono", "MinguoDate", False, "from", "(TemporalAccessor)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time.chrono", "ThaiBuddhistDate", False, "from", "(TemporalAccessor)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["java.time.chrono", "ChronoLocalDate", "isAfter", "(ChronoLocalDate)", "summary", "df-generated"] + - ["java.time.chrono", "ChronoLocalDate", "isBefore", "(ChronoLocalDate)", "summary", "df-generated"] + - ["java.time.chrono", "ChronoLocalDate", "isEqual", "(ChronoLocalDate)", "summary", "df-generated"] + - ["java.time.chrono", "ChronoLocalDate", "isLeapYear", "()", "summary", "df-generated"] + - ["java.time.chrono", "ChronoLocalDate", "lengthOfMonth", "()", "summary", "df-generated"] + - ["java.time.chrono", "ChronoLocalDate", "lengthOfYear", "()", "summary", "df-generated"] + - ["java.time.chrono", "ChronoLocalDate", "timeLineOrder", "()", "summary", "df-generated"] + - ["java.time.chrono", "ChronoLocalDate", "toEpochDay", "()", "summary", "df-generated"] + - ["java.time.chrono", "ChronoLocalDateTime", "isAfter", "(ChronoLocalDateTime)", "summary", "df-generated"] + - ["java.time.chrono", "ChronoLocalDateTime", "isBefore", "(ChronoLocalDateTime)", "summary", "df-generated"] + - ["java.time.chrono", "ChronoLocalDateTime", "isEqual", "(ChronoLocalDateTime)", "summary", "df-generated"] + - ["java.time.chrono", "ChronoLocalDateTime", "timeLineOrder", "()", "summary", "df-generated"] + - ["java.time.chrono", "ChronoLocalDateTime", "toEpochSecond", "(ZoneOffset)", "summary", "df-generated"] + - ["java.time.chrono", "ChronoLocalDateTime", "toInstant", "(ZoneOffset)", "summary", "df-generated"] + - ["java.time.chrono", "ChronoPeriod", "isNegative", "()", "summary", "df-generated"] + - ["java.time.chrono", "ChronoPeriod", "isZero", "()", "summary", "df-generated"] + - ["java.time.chrono", "ChronoZonedDateTime", "getChronology", "()", "summary", "df-generated"] + - ["java.time.chrono", "ChronoZonedDateTime", "isAfter", "(ChronoZonedDateTime)", "summary", "df-generated"] + - ["java.time.chrono", "ChronoZonedDateTime", "isBefore", "(ChronoZonedDateTime)", "summary", "df-generated"] + - ["java.time.chrono", "ChronoZonedDateTime", "isEqual", "(ChronoZonedDateTime)", "summary", "df-generated"] + - ["java.time.chrono", "ChronoZonedDateTime", "timeLineOrder", "()", "summary", "df-generated"] + - ["java.time.chrono", "ChronoZonedDateTime", "toEpochSecond", "()", "summary", "df-generated"] + - ["java.time.chrono", "Chronology", "epochSecond", "(Era,int,int,int,int,int,int,ZoneOffset)", "summary", "df-generated"] + - ["java.time.chrono", "Chronology", "epochSecond", "(int,int,int,int,int,int,ZoneOffset)", "summary", "df-generated"] + - ["java.time.chrono", "Chronology", "eraOf", "(int)", "summary", "df-generated"] + - ["java.time.chrono", "Chronology", "eras", "()", "summary", "df-generated"] + - ["java.time.chrono", "Chronology", "getAvailableChronologies", "()", "summary", "df-generated"] + - ["java.time.chrono", "Chronology", "isLeapYear", "(long)", "summary", "df-generated"] + - ["java.time.chrono", "Chronology", "of", "(String)", "summary", "df-generated"] + - ["java.time.chrono", "Chronology", "ofLocale", "(Locale)", "summary", "df-generated"] + - ["java.time.chrono", "Chronology", "prolepticYear", "(Era,int)", "summary", "df-generated"] + - ["java.time.chrono", "Chronology", "range", "(ChronoField)", "summary", "df-generated"] + - ["java.time.chrono", "Era", "getValue", "()", "summary", "df-generated"] + - ["java.time.chrono", "HijrahDate", "now", "()", "summary", "df-generated"] + - ["java.time.chrono", "HijrahDate", "now", "(Clock)", "summary", "df-generated"] + - ["java.time.chrono", "HijrahDate", "now", "(ZoneId)", "summary", "df-generated"] + - ["java.time.chrono", "HijrahDate", "of", "(int,int,int)", "summary", "df-generated"] + - ["java.time.chrono", "HijrahEra", "of", "(int)", "summary", "df-generated"] + - ["java.time.chrono", "IsoEra", "of", "(int)", "summary", "df-generated"] + - ["java.time.chrono", "JapaneseDate", "now", "()", "summary", "df-generated"] + - ["java.time.chrono", "JapaneseDate", "now", "(Clock)", "summary", "df-generated"] + - ["java.time.chrono", "JapaneseDate", "now", "(ZoneId)", "summary", "df-generated"] + - ["java.time.chrono", "JapaneseDate", "of", "(int,int,int)", "summary", "df-generated"] + - ["java.time.chrono", "JapaneseEra", "of", "(int)", "summary", "df-generated"] + - ["java.time.chrono", "JapaneseEra", "valueOf", "(String)", "summary", "df-generated"] + - ["java.time.chrono", "JapaneseEra", "values", "()", "summary", "df-generated"] + - ["java.time.chrono", "MinguoDate", "now", "()", "summary", "df-generated"] + - ["java.time.chrono", "MinguoDate", "now", "(Clock)", "summary", "df-generated"] + - ["java.time.chrono", "MinguoDate", "now", "(ZoneId)", "summary", "df-generated"] + - ["java.time.chrono", "MinguoDate", "of", "(int,int,int)", "summary", "df-generated"] + - ["java.time.chrono", "MinguoEra", "of", "(int)", "summary", "df-generated"] + - ["java.time.chrono", "ThaiBuddhistDate", "now", "()", "summary", "df-generated"] + - ["java.time.chrono", "ThaiBuddhistDate", "now", "(Clock)", "summary", "df-generated"] + - ["java.time.chrono", "ThaiBuddhistDate", "now", "(ZoneId)", "summary", "df-generated"] + - ["java.time.chrono", "ThaiBuddhistDate", "of", "(int,int,int)", "summary", "df-generated"] + - ["java.time.chrono", "ThaiBuddhistEra", "of", "(int)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/java.time.format.model.yml b/java/ql/lib/ext/generated/java.time.format.model.yml new file mode 100644 index 00000000000..f8a7a3955f5 --- /dev/null +++ b/java/ql/lib/ext/generated/java.time.format.model.yml @@ -0,0 +1,104 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["java.time.format", "DateTimeFormatter", False, "formatTo", "(TemporalAccessor,Appendable)", "", "Argument[0]", "Argument[1]", "taint", "df-generated"] + - ["java.time.format", "DateTimeFormatter", False, "formatTo", "(TemporalAccessor,Appendable)", "", "Argument[this]", "Argument[1]", "taint", "df-generated"] + - ["java.time.format", "DateTimeFormatter", False, "getChronology", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.format", "DateTimeFormatter", False, "getDecimalStyle", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.format", "DateTimeFormatter", False, "getLocale", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.format", "DateTimeFormatter", False, "getResolverFields", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.format", "DateTimeFormatter", False, "getZone", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.format", "DateTimeFormatter", False, "localizedBy", "(Locale)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time.format", "DateTimeFormatter", False, "ofPattern", "(String,Locale)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.time.format", "DateTimeFormatter", False, "parse", "(CharSequence)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.format", "DateTimeFormatter", False, "parse", "(CharSequence,ParsePosition)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.format", "DateTimeFormatter", False, "parse", "(CharSequence,TemporalQuery)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.format", "DateTimeFormatter", False, "parseBest", "(CharSequence,TemporalQuery[])", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.format", "DateTimeFormatter", False, "toFormat", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.format", "DateTimeFormatter", False, "toFormat", "(TemporalQuery)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time.format", "DateTimeFormatter", False, "toFormat", "(TemporalQuery)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.format", "DateTimeFormatter", False, "withChronology", "(Chronology)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time.format", "DateTimeFormatter", False, "withDecimalStyle", "(DecimalStyle)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time.format", "DateTimeFormatter", False, "withLocale", "(Locale)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time.format", "DateTimeFormatter", False, "withResolverFields", "(Set)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time.format", "DateTimeFormatter", False, "withResolverFields", "(TemporalField[])", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time.format", "DateTimeFormatter", False, "withResolverStyle", "(ResolverStyle)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time.format", "DateTimeFormatter", False, "withZone", "(ZoneId)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time.format", "DateTimeFormatterBuilder", False, "append", "(DateTimeFormatter)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time.format", "DateTimeFormatterBuilder", False, "appendChronologyId", "()", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time.format", "DateTimeFormatterBuilder", False, "appendChronologyText", "(TextStyle)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time.format", "DateTimeFormatterBuilder", False, "appendDayPeriodText", "(TextStyle)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time.format", "DateTimeFormatterBuilder", False, "appendFraction", "(TemporalField,int,int,boolean)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time.format", "DateTimeFormatterBuilder", False, "appendGenericZoneText", "(TextStyle)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time.format", "DateTimeFormatterBuilder", False, "appendGenericZoneText", "(TextStyle,Set)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time.format", "DateTimeFormatterBuilder", False, "appendInstant", "()", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time.format", "DateTimeFormatterBuilder", False, "appendInstant", "(int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time.format", "DateTimeFormatterBuilder", False, "appendLiteral", "(String)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time.format", "DateTimeFormatterBuilder", False, "appendLiteral", "(char)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time.format", "DateTimeFormatterBuilder", False, "appendLocalized", "(FormatStyle,FormatStyle)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time.format", "DateTimeFormatterBuilder", False, "appendLocalizedOffset", "(TextStyle)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time.format", "DateTimeFormatterBuilder", False, "appendOffset", "(String,String)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time.format", "DateTimeFormatterBuilder", False, "appendOffsetId", "()", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time.format", "DateTimeFormatterBuilder", False, "appendOptional", "(DateTimeFormatter)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time.format", "DateTimeFormatterBuilder", False, "appendPattern", "(String)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time.format", "DateTimeFormatterBuilder", False, "appendText", "(TemporalField)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.format", "DateTimeFormatterBuilder", False, "appendText", "(TemporalField,Map)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time.format", "DateTimeFormatterBuilder", False, "appendText", "(TemporalField,TextStyle)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time.format", "DateTimeFormatterBuilder", False, "appendValue", "(TemporalField)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time.format", "DateTimeFormatterBuilder", False, "appendValue", "(TemporalField,int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time.format", "DateTimeFormatterBuilder", False, "appendValue", "(TemporalField,int,int,SignStyle)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time.format", "DateTimeFormatterBuilder", False, "appendValueReduced", "(TemporalField,int,int,ChronoLocalDate)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time.format", "DateTimeFormatterBuilder", False, "appendValueReduced", "(TemporalField,int,int,int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time.format", "DateTimeFormatterBuilder", False, "appendZoneId", "()", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time.format", "DateTimeFormatterBuilder", False, "appendZoneOrOffsetId", "()", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time.format", "DateTimeFormatterBuilder", False, "appendZoneRegionId", "()", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time.format", "DateTimeFormatterBuilder", False, "appendZoneText", "(TextStyle)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time.format", "DateTimeFormatterBuilder", False, "appendZoneText", "(TextStyle,Set)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time.format", "DateTimeFormatterBuilder", False, "getLocalizedDateTimePattern", "(FormatStyle,FormatStyle,Chronology,Locale)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["java.time.format", "DateTimeFormatterBuilder", False, "optionalEnd", "()", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time.format", "DateTimeFormatterBuilder", False, "optionalStart", "()", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time.format", "DateTimeFormatterBuilder", False, "padNext", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.format", "DateTimeFormatterBuilder", False, "padNext", "(int,char)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time.format", "DateTimeFormatterBuilder", False, "parseCaseInsensitive", "()", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time.format", "DateTimeFormatterBuilder", False, "parseCaseSensitive", "()", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time.format", "DateTimeFormatterBuilder", False, "parseDefaulting", "(TemporalField,long)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time.format", "DateTimeFormatterBuilder", False, "parseLenient", "()", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time.format", "DateTimeFormatterBuilder", False, "parseStrict", "()", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time.format", "DateTimeFormatterBuilder", False, "toFormatter", "(Locale)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time.format", "DateTimeParseException", True, "DateTimeParseException", "(String,CharSequence,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.time.format", "DateTimeParseException", True, "DateTimeParseException", "(String,CharSequence,int)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.time.format", "DateTimeParseException", True, "DateTimeParseException", "(String,CharSequence,int,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.time.format", "DateTimeParseException", True, "DateTimeParseException", "(String,CharSequence,int,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.time.format", "DateTimeParseException", True, "DateTimeParseException", "(String,CharSequence,int,Throwable)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["java.time.format", "DateTimeParseException", True, "getParsedString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.format", "DecimalStyle", False, "of", "(Locale)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time.format", "DecimalStyle", False, "withDecimalSeparator", "(char)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time.format", "DecimalStyle", False, "withNegativeSign", "(char)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time.format", "DecimalStyle", False, "withPositiveSign", "(char)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time.format", "DecimalStyle", False, "withZeroDigit", "(char)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["java.time.format", "DateTimeFormatter", "getResolverStyle", "()", "summary", "df-generated"] + - ["java.time.format", "DateTimeFormatter", "ofLocalizedDate", "(FormatStyle)", "summary", "df-generated"] + - ["java.time.format", "DateTimeFormatter", "ofLocalizedDateTime", "(FormatStyle)", "summary", "df-generated"] + - ["java.time.format", "DateTimeFormatter", "ofLocalizedDateTime", "(FormatStyle,FormatStyle)", "summary", "df-generated"] + - ["java.time.format", "DateTimeFormatter", "ofLocalizedTime", "(FormatStyle)", "summary", "df-generated"] + - ["java.time.format", "DateTimeFormatter", "parseUnresolved", "(CharSequence,ParsePosition)", "summary", "df-generated"] + - ["java.time.format", "DateTimeFormatter", "parsedExcessDays", "()", "summary", "df-generated"] + - ["java.time.format", "DateTimeFormatter", "parsedLeapSecond", "()", "summary", "df-generated"] + - ["java.time.format", "DateTimeFormatterBuilder", "toFormatter", "()", "summary", "df-generated"] + - ["java.time.format", "DateTimeParseException", "getErrorIndex", "()", "summary", "df-generated"] + - ["java.time.format", "DecimalStyle", "getAvailableLocales", "()", "summary", "df-generated"] + - ["java.time.format", "DecimalStyle", "getDecimalSeparator", "()", "summary", "df-generated"] + - ["java.time.format", "DecimalStyle", "getNegativeSign", "()", "summary", "df-generated"] + - ["java.time.format", "DecimalStyle", "getPositiveSign", "()", "summary", "df-generated"] + - ["java.time.format", "DecimalStyle", "getZeroDigit", "()", "summary", "df-generated"] + - ["java.time.format", "DecimalStyle", "ofDefaultLocale", "()", "summary", "df-generated"] + - ["java.time.format", "TextStyle", "asNormal", "()", "summary", "df-generated"] + - ["java.time.format", "TextStyle", "asStandalone", "()", "summary", "df-generated"] + - ["java.time.format", "TextStyle", "isStandalone", "()", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/java.time.model.yml b/java/ql/lib/ext/generated/java.time.model.yml new file mode 100644 index 00000000000..464dbcc2fcd --- /dev/null +++ b/java/ql/lib/ext/generated/java.time.model.yml @@ -0,0 +1,513 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["java.time", "Clock", True, "fixed", "(Instant,ZoneId)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "Clock", True, "fixed", "(Instant,ZoneId)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "Clock", True, "getZone", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "Clock", True, "offset", "(Clock,Duration)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "Clock", True, "offset", "(Clock,Duration)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "Clock", True, "system", "(ZoneId)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "Clock", True, "tick", "(Clock,Duration)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "Clock", True, "tickMillis", "(ZoneId)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "Clock", True, "tickMinutes", "(ZoneId)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "Clock", True, "tickSeconds", "(ZoneId)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "DateTimeException", True, "DateTimeException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.time", "DateTimeException", True, "DateTimeException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.time", "DateTimeException", True, "DateTimeException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.time", "DayOfWeek", False, "getDisplayName", "(TextStyle,Locale)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "Duration", False, "abs", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "Duration", False, "dividedBy", "(long)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time", "Duration", False, "minus", "(Duration)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "Duration", False, "minus", "(long,TemporalUnit)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "Duration", False, "minusDays", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "Duration", False, "minusHours", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "Duration", False, "minusMillis", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "Duration", False, "minusMinutes", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "Duration", False, "minusNanos", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "Duration", False, "minusSeconds", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "Duration", False, "multipliedBy", "(long)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time", "Duration", False, "negated", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "Duration", False, "plus", "(Duration)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "Duration", False, "plus", "(long,TemporalUnit)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time", "Duration", False, "plusDays", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "Duration", False, "plusHours", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "Duration", False, "plusMillis", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "Duration", False, "plusMinutes", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "Duration", False, "plusNanos", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "Duration", False, "plusSeconds", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "Duration", False, "truncatedTo", "(TemporalUnit)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time", "Instant", False, "atOffset", "(ZoneOffset)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "Instant", False, "atZone", "(ZoneId)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "Instant", False, "from", "(TemporalAccessor)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "Instant", False, "minusMillis", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "Instant", False, "minusNanos", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "Instant", False, "minusSeconds", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "Instant", False, "now", "(Clock)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "Instant", False, "plusMillis", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "Instant", False, "plusNanos", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "Instant", False, "plusSeconds", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "Instant", False, "truncatedTo", "(TemporalUnit)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time", "InstantSource", True, "fixed", "(Instant)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "InstantSource", True, "instant", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "InstantSource", True, "offset", "(InstantSource,Duration)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "InstantSource", True, "offset", "(InstantSource,Duration)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "InstantSource", True, "tick", "(InstantSource,Duration)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "InstantSource", True, "withZone", "(ZoneId)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "InstantSource", True, "withZone", "(ZoneId)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "InstantSource", True, "withZone", "(ZoneId)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time", "LocalDate", False, "atStartOfDay", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "LocalDate", False, "atStartOfDay", "(ZoneId)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "LocalDate", False, "atStartOfDay", "(ZoneId)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "LocalDate", False, "atTime", "(OffsetTime)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "LocalDate", False, "atTime", "(OffsetTime)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "LocalDate", False, "atTime", "(int,int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "LocalDate", False, "atTime", "(int,int,int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "LocalDate", False, "atTime", "(int,int,int,int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "LocalDate", False, "from", "(TemporalAccessor)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "LocalDate", False, "minusDays", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "LocalDate", False, "minusMonths", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "LocalDate", False, "minusWeeks", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "LocalDate", False, "minusYears", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "LocalDate", False, "plusMonths", "(long)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time", "LocalDate", False, "plusWeeks", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "LocalDate", False, "plusYears", "(long)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time", "LocalDate", False, "withDayOfMonth", "(int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time", "LocalDate", False, "withDayOfYear", "(int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time", "LocalDate", False, "withMonth", "(int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time", "LocalDate", False, "withYear", "(int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time", "LocalDateTime", False, "atOffset", "(ZoneOffset)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "LocalDateTime", False, "atOffset", "(ZoneOffset)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "LocalDateTime", False, "from", "(TemporalAccessor)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "LocalDateTime", False, "minusDays", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "LocalDateTime", False, "minusHours", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "LocalDateTime", False, "minusMinutes", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "LocalDateTime", False, "minusMonths", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "LocalDateTime", False, "minusNanos", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "LocalDateTime", False, "minusSeconds", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "LocalDateTime", False, "minusWeeks", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "LocalDateTime", False, "minusYears", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "LocalDateTime", False, "of", "(LocalDate,LocalTime)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "LocalDateTime", False, "of", "(LocalDate,LocalTime)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "LocalDateTime", False, "plusDays", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "LocalDateTime", False, "plusHours", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "LocalDateTime", False, "plusMinutes", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "LocalDateTime", False, "plusMonths", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "LocalDateTime", False, "plusNanos", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "LocalDateTime", False, "plusSeconds", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "LocalDateTime", False, "plusWeeks", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "LocalDateTime", False, "plusYears", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "LocalDateTime", False, "truncatedTo", "(TemporalUnit)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "LocalDateTime", False, "withDayOfMonth", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "LocalDateTime", False, "withDayOfYear", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "LocalDateTime", False, "withHour", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "LocalDateTime", False, "withMinute", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "LocalDateTime", False, "withMonth", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "LocalDateTime", False, "withNano", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "LocalDateTime", False, "withSecond", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "LocalDateTime", False, "withYear", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "LocalTime", False, "atDate", "(LocalDate)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "LocalTime", False, "atDate", "(LocalDate)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "LocalTime", False, "atOffset", "(ZoneOffset)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "LocalTime", False, "atOffset", "(ZoneOffset)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "LocalTime", False, "format", "(DateTimeFormatter)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "LocalTime", False, "from", "(TemporalAccessor)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "LocalTime", False, "minusHours", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "LocalTime", False, "minusMinutes", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "LocalTime", False, "minusNanos", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "LocalTime", False, "minusSeconds", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "LocalTime", False, "plusHours", "(long)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time", "LocalTime", False, "plusMinutes", "(long)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time", "LocalTime", False, "plusNanos", "(long)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time", "LocalTime", False, "plusSeconds", "(long)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time", "LocalTime", False, "truncatedTo", "(TemporalUnit)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time", "LocalTime", False, "withHour", "(int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time", "LocalTime", False, "withMinute", "(int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time", "LocalTime", False, "withNano", "(int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time", "LocalTime", False, "withSecond", "(int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time", "Month", False, "getDisplayName", "(TextStyle,Locale)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "MonthDay", False, "format", "(DateTimeFormatter)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "MonthDay", False, "from", "(TemporalAccessor)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "MonthDay", False, "with", "(Month)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time", "MonthDay", False, "withDayOfMonth", "(int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time", "MonthDay", False, "withMonth", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetDateTime", False, "atZoneSameInstant", "(ZoneId)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetDateTime", False, "atZoneSameInstant", "(ZoneId)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetDateTime", False, "atZoneSimilarLocal", "(ZoneId)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetDateTime", False, "atZoneSimilarLocal", "(ZoneId)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetDateTime", False, "format", "(DateTimeFormatter)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetDateTime", False, "format", "(DateTimeFormatter)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetDateTime", False, "from", "(TemporalAccessor)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetDateTime", False, "getOffset", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetDateTime", False, "minusDays", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetDateTime", False, "minusHours", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetDateTime", False, "minusMinutes", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetDateTime", False, "minusMonths", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetDateTime", False, "minusNanos", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetDateTime", False, "minusSeconds", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetDateTime", False, "minusWeeks", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetDateTime", False, "minusYears", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetDateTime", False, "now", "(Clock)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetDateTime", False, "now", "(ZoneId)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetDateTime", False, "of", "(LocalDate,LocalTime,ZoneOffset)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetDateTime", False, "of", "(LocalDate,LocalTime,ZoneOffset)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetDateTime", False, "of", "(LocalDate,LocalTime,ZoneOffset)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetDateTime", False, "of", "(LocalDateTime,ZoneOffset)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetDateTime", False, "of", "(LocalDateTime,ZoneOffset)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetDateTime", False, "of", "(int,int,int,int,int,int,int,ZoneOffset)", "", "Argument[7]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetDateTime", False, "ofInstant", "(Instant,ZoneId)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetDateTime", False, "plusDays", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetDateTime", False, "plusHours", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetDateTime", False, "plusMinutes", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetDateTime", False, "plusMonths", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetDateTime", False, "plusNanos", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetDateTime", False, "plusSeconds", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetDateTime", False, "plusWeeks", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetDateTime", False, "plusYears", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetDateTime", False, "toLocalDate", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetDateTime", False, "toLocalDateTime", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetDateTime", False, "toLocalTime", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetDateTime", False, "toOffsetTime", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetDateTime", False, "toZonedDateTime", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetDateTime", False, "truncatedTo", "(TemporalUnit)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetDateTime", False, "withDayOfMonth", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetDateTime", False, "withDayOfYear", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetDateTime", False, "withHour", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetDateTime", False, "withMinute", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetDateTime", False, "withMonth", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetDateTime", False, "withNano", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetDateTime", False, "withOffsetSameInstant", "(ZoneOffset)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time", "OffsetDateTime", False, "withOffsetSameLocal", "(ZoneOffset)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetDateTime", False, "withOffsetSameLocal", "(ZoneOffset)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetDateTime", False, "withSecond", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetDateTime", False, "withYear", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetTime", False, "atDate", "(LocalDate)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetTime", False, "atDate", "(LocalDate)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetTime", False, "format", "(DateTimeFormatter)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetTime", False, "format", "(DateTimeFormatter)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetTime", False, "from", "(TemporalAccessor)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetTime", False, "getOffset", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetTime", False, "minusHours", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetTime", False, "minusMinutes", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetTime", False, "minusNanos", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetTime", False, "minusSeconds", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetTime", False, "now", "(Clock)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetTime", False, "now", "(ZoneId)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetTime", False, "of", "(LocalTime,ZoneOffset)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetTime", False, "of", "(LocalTime,ZoneOffset)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetTime", False, "of", "(int,int,int,int,ZoneOffset)", "", "Argument[4]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetTime", False, "ofInstant", "(Instant,ZoneId)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetTime", False, "plusHours", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetTime", False, "plusMinutes", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetTime", False, "plusNanos", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetTime", False, "plusSeconds", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetTime", False, "toLocalTime", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetTime", False, "truncatedTo", "(TemporalUnit)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetTime", False, "withHour", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetTime", False, "withMinute", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetTime", False, "withNano", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetTime", False, "withOffsetSameInstant", "(ZoneOffset)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time", "OffsetTime", False, "withOffsetSameLocal", "(ZoneOffset)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetTime", False, "withOffsetSameLocal", "(ZoneOffset)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetTime", False, "withSecond", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "Period", False, "from", "(TemporalAmount)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "Period", False, "minusDays", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "Period", False, "minusMonths", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "Period", False, "minusYears", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "Period", False, "plusDays", "(long)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time", "Period", False, "plusMonths", "(long)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time", "Period", False, "plusYears", "(long)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time", "Period", False, "withDays", "(int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time", "Period", False, "withMonths", "(int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time", "Period", False, "withYears", "(int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time", "Year", False, "format", "(DateTimeFormatter)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "Year", False, "from", "(TemporalAccessor)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "Year", False, "minusYears", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "Year", False, "plusYears", "(long)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time", "YearMonth", False, "format", "(DateTimeFormatter)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "YearMonth", False, "from", "(TemporalAccessor)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "YearMonth", False, "minusMonths", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "YearMonth", False, "minusYears", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "YearMonth", False, "plusMonths", "(long)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time", "YearMonth", False, "plusYears", "(long)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time", "YearMonth", False, "withMonth", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "YearMonth", False, "withYear", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "ZoneId", True, "from", "(TemporalAccessor)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "ZoneId", True, "getDisplayName", "(TextStyle,Locale)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "ZoneId", True, "getId", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "ZoneId", True, "getRules", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "ZoneId", True, "normalized", "()", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time", "ZoneId", True, "of", "(String,Map)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "ZoneId", True, "of", "(String,Map)", "", "Argument[1].Element", "ReturnValue", "taint", "df-generated"] + - ["java.time", "ZoneId", True, "ofOffset", "(String,ZoneOffset)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "ZoneId", True, "ofOffset", "(String,ZoneOffset)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "ZoneOffset", False, "from", "(TemporalAccessor)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "ZonedDateTime", False, "from", "(TemporalAccessor)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "ZonedDateTime", False, "minusDays", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "ZonedDateTime", False, "minusHours", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "ZonedDateTime", False, "minusMinutes", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "ZonedDateTime", False, "minusMonths", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "ZonedDateTime", False, "minusNanos", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "ZonedDateTime", False, "minusSeconds", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "ZonedDateTime", False, "minusWeeks", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "ZonedDateTime", False, "minusYears", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "ZonedDateTime", False, "now", "(Clock)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "ZonedDateTime", False, "now", "(ZoneId)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "ZonedDateTime", False, "of", "(LocalDate,LocalTime,ZoneId)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "ZonedDateTime", False, "of", "(LocalDate,LocalTime,ZoneId)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "ZonedDateTime", False, "of", "(LocalDate,LocalTime,ZoneId)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "ZonedDateTime", False, "of", "(LocalDateTime,ZoneId)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "ZonedDateTime", False, "of", "(LocalDateTime,ZoneId)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "ZonedDateTime", False, "of", "(int,int,int,int,int,int,int,ZoneId)", "", "Argument[7]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "ZonedDateTime", False, "ofInstant", "(Instant,ZoneId)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "ZonedDateTime", False, "ofInstant", "(LocalDateTime,ZoneOffset,ZoneId)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "ZonedDateTime", False, "ofInstant", "(LocalDateTime,ZoneOffset,ZoneId)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "ZonedDateTime", False, "ofInstant", "(LocalDateTime,ZoneOffset,ZoneId)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "ZonedDateTime", False, "ofLocal", "(LocalDateTime,ZoneId,ZoneOffset)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "ZonedDateTime", False, "ofLocal", "(LocalDateTime,ZoneId,ZoneOffset)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "ZonedDateTime", False, "ofLocal", "(LocalDateTime,ZoneId,ZoneOffset)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "ZonedDateTime", False, "ofStrict", "(LocalDateTime,ZoneOffset,ZoneId)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "ZonedDateTime", False, "ofStrict", "(LocalDateTime,ZoneOffset,ZoneId)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "ZonedDateTime", False, "ofStrict", "(LocalDateTime,ZoneOffset,ZoneId)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "ZonedDateTime", False, "plusDays", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "ZonedDateTime", False, "plusHours", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "ZonedDateTime", False, "plusMinutes", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "ZonedDateTime", False, "plusMonths", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "ZonedDateTime", False, "plusNanos", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "ZonedDateTime", False, "plusSeconds", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "ZonedDateTime", False, "plusWeeks", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "ZonedDateTime", False, "plusYears", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "ZonedDateTime", False, "toOffsetDateTime", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "ZonedDateTime", False, "truncatedTo", "(TemporalUnit)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "ZonedDateTime", False, "withDayOfMonth", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "ZonedDateTime", False, "withDayOfYear", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "ZonedDateTime", False, "withFixedOffsetZone", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "ZonedDateTime", False, "withHour", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "ZonedDateTime", False, "withMinute", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "ZonedDateTime", False, "withMonth", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "ZonedDateTime", False, "withNano", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "ZonedDateTime", False, "withSecond", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "ZonedDateTime", False, "withYear", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["java.time", "Clock", "systemDefaultZone", "()", "summary", "df-generated"] + - ["java.time", "Clock", "systemUTC", "()", "summary", "df-generated"] + - ["java.time", "DayOfWeek", "from", "(TemporalAccessor)", "summary", "df-generated"] + - ["java.time", "DayOfWeek", "getValue", "()", "summary", "df-generated"] + - ["java.time", "DayOfWeek", "minus", "(long)", "summary", "df-generated"] + - ["java.time", "DayOfWeek", "of", "(int)", "summary", "df-generated"] + - ["java.time", "DayOfWeek", "plus", "(long)", "summary", "df-generated"] + - ["java.time", "Duration", "between", "(Temporal,Temporal)", "summary", "df-generated"] + - ["java.time", "Duration", "dividedBy", "(Duration)", "summary", "df-generated"] + - ["java.time", "Duration", "from", "(TemporalAmount)", "summary", "df-generated"] + - ["java.time", "Duration", "getNano", "()", "summary", "df-generated"] + - ["java.time", "Duration", "getSeconds", "()", "summary", "df-generated"] + - ["java.time", "Duration", "isNegative", "()", "summary", "df-generated"] + - ["java.time", "Duration", "isZero", "()", "summary", "df-generated"] + - ["java.time", "Duration", "of", "(long,TemporalUnit)", "summary", "df-generated"] + - ["java.time", "Duration", "ofDays", "(long)", "summary", "df-generated"] + - ["java.time", "Duration", "ofHours", "(long)", "summary", "df-generated"] + - ["java.time", "Duration", "ofNanos", "(long)", "summary", "df-generated"] + - ["java.time", "Duration", "ofSeconds", "(long,long)", "summary", "df-generated"] + - ["java.time", "Duration", "parse", "(CharSequence)", "summary", "df-generated"] + - ["java.time", "Duration", "toDays", "()", "summary", "df-generated"] + - ["java.time", "Duration", "toDaysPart", "()", "summary", "df-generated"] + - ["java.time", "Duration", "toHours", "()", "summary", "df-generated"] + - ["java.time", "Duration", "toHoursPart", "()", "summary", "df-generated"] + - ["java.time", "Duration", "toMillisPart", "()", "summary", "df-generated"] + - ["java.time", "Duration", "toMinutes", "()", "summary", "df-generated"] + - ["java.time", "Duration", "toMinutesPart", "()", "summary", "df-generated"] + - ["java.time", "Duration", "toNanos", "()", "summary", "df-generated"] + - ["java.time", "Duration", "toNanosPart", "()", "summary", "df-generated"] + - ["java.time", "Duration", "toSeconds", "()", "summary", "df-generated"] + - ["java.time", "Duration", "toSecondsPart", "()", "summary", "df-generated"] + - ["java.time", "Duration", "withNanos", "(int)", "summary", "df-generated"] + - ["java.time", "Duration", "withSeconds", "(long)", "summary", "df-generated"] + - ["java.time", "Instant", "getEpochSecond", "()", "summary", "df-generated"] + - ["java.time", "Instant", "getNano", "()", "summary", "df-generated"] + - ["java.time", "Instant", "isAfter", "(Instant)", "summary", "df-generated"] + - ["java.time", "Instant", "isBefore", "(Instant)", "summary", "df-generated"] + - ["java.time", "Instant", "ofEpochSecond", "(long)", "summary", "df-generated"] + - ["java.time", "Instant", "ofEpochSecond", "(long,long)", "summary", "df-generated"] + - ["java.time", "InstantSource", "millis", "()", "summary", "df-generated"] + - ["java.time", "InstantSource", "system", "()", "summary", "df-generated"] + - ["java.time", "LocalDate", "datesUntil", "(LocalDate)", "summary", "df-generated"] + - ["java.time", "LocalDate", "datesUntil", "(LocalDate,Period)", "summary", "df-generated"] + - ["java.time", "LocalDate", "getDayOfMonth", "()", "summary", "df-generated"] + - ["java.time", "LocalDate", "getDayOfWeek", "()", "summary", "df-generated"] + - ["java.time", "LocalDate", "getDayOfYear", "()", "summary", "df-generated"] + - ["java.time", "LocalDate", "getMonth", "()", "summary", "df-generated"] + - ["java.time", "LocalDate", "getMonthValue", "()", "summary", "df-generated"] + - ["java.time", "LocalDate", "getYear", "()", "summary", "df-generated"] + - ["java.time", "LocalDate", "now", "(Clock)", "summary", "df-generated"] + - ["java.time", "LocalDate", "now", "(ZoneId)", "summary", "df-generated"] + - ["java.time", "LocalDate", "of", "(int,Month,int)", "summary", "df-generated"] + - ["java.time", "LocalDate", "ofEpochDay", "(long)", "summary", "df-generated"] + - ["java.time", "LocalDate", "ofInstant", "(Instant,ZoneId)", "summary", "df-generated"] + - ["java.time", "LocalDate", "ofYearDay", "(int,int)", "summary", "df-generated"] + - ["java.time", "LocalDate", "parse", "(CharSequence,DateTimeFormatter)", "summary", "df-generated"] + - ["java.time", "LocalDate", "toEpochSecond", "(LocalTime,ZoneOffset)", "summary", "df-generated"] + - ["java.time", "LocalDateTime", "getDayOfMonth", "()", "summary", "df-generated"] + - ["java.time", "LocalDateTime", "getDayOfWeek", "()", "summary", "df-generated"] + - ["java.time", "LocalDateTime", "getDayOfYear", "()", "summary", "df-generated"] + - ["java.time", "LocalDateTime", "getHour", "()", "summary", "df-generated"] + - ["java.time", "LocalDateTime", "getMinute", "()", "summary", "df-generated"] + - ["java.time", "LocalDateTime", "getMonth", "()", "summary", "df-generated"] + - ["java.time", "LocalDateTime", "getMonthValue", "()", "summary", "df-generated"] + - ["java.time", "LocalDateTime", "getNano", "()", "summary", "df-generated"] + - ["java.time", "LocalDateTime", "getSecond", "()", "summary", "df-generated"] + - ["java.time", "LocalDateTime", "getYear", "()", "summary", "df-generated"] + - ["java.time", "LocalDateTime", "now", "(Clock)", "summary", "df-generated"] + - ["java.time", "LocalDateTime", "now", "(ZoneId)", "summary", "df-generated"] + - ["java.time", "LocalDateTime", "of", "(int,Month,int,int,int)", "summary", "df-generated"] + - ["java.time", "LocalDateTime", "of", "(int,Month,int,int,int,int)", "summary", "df-generated"] + - ["java.time", "LocalDateTime", "of", "(int,Month,int,int,int,int,int)", "summary", "df-generated"] + - ["java.time", "LocalDateTime", "of", "(int,int,int,int,int)", "summary", "df-generated"] + - ["java.time", "LocalDateTime", "of", "(int,int,int,int,int,int,int)", "summary", "df-generated"] + - ["java.time", "LocalDateTime", "ofEpochSecond", "(long,int,ZoneOffset)", "summary", "df-generated"] + - ["java.time", "LocalDateTime", "ofInstant", "(Instant,ZoneId)", "summary", "df-generated"] + - ["java.time", "LocalDateTime", "parse", "(CharSequence)", "summary", "df-generated"] + - ["java.time", "LocalDateTime", "parse", "(CharSequence,DateTimeFormatter)", "summary", "df-generated"] + - ["java.time", "LocalTime", "getHour", "()", "summary", "df-generated"] + - ["java.time", "LocalTime", "getMinute", "()", "summary", "df-generated"] + - ["java.time", "LocalTime", "getNano", "()", "summary", "df-generated"] + - ["java.time", "LocalTime", "getSecond", "()", "summary", "df-generated"] + - ["java.time", "LocalTime", "isAfter", "(LocalTime)", "summary", "df-generated"] + - ["java.time", "LocalTime", "isBefore", "(LocalTime)", "summary", "df-generated"] + - ["java.time", "LocalTime", "now", "()", "summary", "df-generated"] + - ["java.time", "LocalTime", "now", "(Clock)", "summary", "df-generated"] + - ["java.time", "LocalTime", "now", "(ZoneId)", "summary", "df-generated"] + - ["java.time", "LocalTime", "of", "(int,int)", "summary", "df-generated"] + - ["java.time", "LocalTime", "of", "(int,int,int)", "summary", "df-generated"] + - ["java.time", "LocalTime", "of", "(int,int,int,int)", "summary", "df-generated"] + - ["java.time", "LocalTime", "ofInstant", "(Instant,ZoneId)", "summary", "df-generated"] + - ["java.time", "LocalTime", "ofNanoOfDay", "(long)", "summary", "df-generated"] + - ["java.time", "LocalTime", "ofSecondOfDay", "(long)", "summary", "df-generated"] + - ["java.time", "LocalTime", "parse", "(CharSequence)", "summary", "df-generated"] + - ["java.time", "LocalTime", "parse", "(CharSequence,DateTimeFormatter)", "summary", "df-generated"] + - ["java.time", "LocalTime", "toEpochSecond", "(LocalDate,ZoneOffset)", "summary", "df-generated"] + - ["java.time", "LocalTime", "toNanoOfDay", "()", "summary", "df-generated"] + - ["java.time", "LocalTime", "toSecondOfDay", "()", "summary", "df-generated"] + - ["java.time", "Month", "firstDayOfYear", "(boolean)", "summary", "df-generated"] + - ["java.time", "Month", "firstMonthOfQuarter", "()", "summary", "df-generated"] + - ["java.time", "Month", "from", "(TemporalAccessor)", "summary", "df-generated"] + - ["java.time", "Month", "getValue", "()", "summary", "df-generated"] + - ["java.time", "Month", "length", "(boolean)", "summary", "df-generated"] + - ["java.time", "Month", "maxLength", "()", "summary", "df-generated"] + - ["java.time", "Month", "minLength", "()", "summary", "df-generated"] + - ["java.time", "Month", "minus", "(long)", "summary", "df-generated"] + - ["java.time", "Month", "of", "(int)", "summary", "df-generated"] + - ["java.time", "Month", "plus", "(long)", "summary", "df-generated"] + - ["java.time", "MonthDay", "atYear", "(int)", "summary", "df-generated"] + - ["java.time", "MonthDay", "getDayOfMonth", "()", "summary", "df-generated"] + - ["java.time", "MonthDay", "getMonth", "()", "summary", "df-generated"] + - ["java.time", "MonthDay", "getMonthValue", "()", "summary", "df-generated"] + - ["java.time", "MonthDay", "isAfter", "(MonthDay)", "summary", "df-generated"] + - ["java.time", "MonthDay", "isBefore", "(MonthDay)", "summary", "df-generated"] + - ["java.time", "MonthDay", "isValidYear", "(int)", "summary", "df-generated"] + - ["java.time", "MonthDay", "now", "()", "summary", "df-generated"] + - ["java.time", "MonthDay", "now", "(Clock)", "summary", "df-generated"] + - ["java.time", "MonthDay", "now", "(ZoneId)", "summary", "df-generated"] + - ["java.time", "MonthDay", "of", "(Month,int)", "summary", "df-generated"] + - ["java.time", "MonthDay", "of", "(int,int)", "summary", "df-generated"] + - ["java.time", "MonthDay", "parse", "(CharSequence)", "summary", "df-generated"] + - ["java.time", "MonthDay", "parse", "(CharSequence,DateTimeFormatter)", "summary", "df-generated"] + - ["java.time", "OffsetDateTime", "getDayOfMonth", "()", "summary", "df-generated"] + - ["java.time", "OffsetDateTime", "getDayOfWeek", "()", "summary", "df-generated"] + - ["java.time", "OffsetDateTime", "getDayOfYear", "()", "summary", "df-generated"] + - ["java.time", "OffsetDateTime", "getHour", "()", "summary", "df-generated"] + - ["java.time", "OffsetDateTime", "getMinute", "()", "summary", "df-generated"] + - ["java.time", "OffsetDateTime", "getMonth", "()", "summary", "df-generated"] + - ["java.time", "OffsetDateTime", "getMonthValue", "()", "summary", "df-generated"] + - ["java.time", "OffsetDateTime", "getNano", "()", "summary", "df-generated"] + - ["java.time", "OffsetDateTime", "getSecond", "()", "summary", "df-generated"] + - ["java.time", "OffsetDateTime", "getYear", "()", "summary", "df-generated"] + - ["java.time", "OffsetDateTime", "isAfter", "(OffsetDateTime)", "summary", "df-generated"] + - ["java.time", "OffsetDateTime", "isBefore", "(OffsetDateTime)", "summary", "df-generated"] + - ["java.time", "OffsetDateTime", "isEqual", "(OffsetDateTime)", "summary", "df-generated"] + - ["java.time", "OffsetDateTime", "now", "()", "summary", "df-generated"] + - ["java.time", "OffsetDateTime", "parse", "(CharSequence)", "summary", "df-generated"] + - ["java.time", "OffsetDateTime", "parse", "(CharSequence,DateTimeFormatter)", "summary", "df-generated"] + - ["java.time", "OffsetDateTime", "timeLineOrder", "()", "summary", "df-generated"] + - ["java.time", "OffsetDateTime", "toEpochSecond", "()", "summary", "df-generated"] + - ["java.time", "OffsetDateTime", "toInstant", "()", "summary", "df-generated"] + - ["java.time", "OffsetTime", "getHour", "()", "summary", "df-generated"] + - ["java.time", "OffsetTime", "getMinute", "()", "summary", "df-generated"] + - ["java.time", "OffsetTime", "getNano", "()", "summary", "df-generated"] + - ["java.time", "OffsetTime", "getSecond", "()", "summary", "df-generated"] + - ["java.time", "OffsetTime", "isAfter", "(OffsetTime)", "summary", "df-generated"] + - ["java.time", "OffsetTime", "isBefore", "(OffsetTime)", "summary", "df-generated"] + - ["java.time", "OffsetTime", "isEqual", "(OffsetTime)", "summary", "df-generated"] + - ["java.time", "OffsetTime", "now", "()", "summary", "df-generated"] + - ["java.time", "OffsetTime", "parse", "(CharSequence)", "summary", "df-generated"] + - ["java.time", "OffsetTime", "parse", "(CharSequence,DateTimeFormatter)", "summary", "df-generated"] + - ["java.time", "OffsetTime", "toEpochSecond", "(LocalDate)", "summary", "df-generated"] + - ["java.time", "Period", "between", "(LocalDate,LocalDate)", "summary", "df-generated"] + - ["java.time", "Period", "getDays", "()", "summary", "df-generated"] + - ["java.time", "Period", "getMonths", "()", "summary", "df-generated"] + - ["java.time", "Period", "getYears", "()", "summary", "df-generated"] + - ["java.time", "Period", "of", "(int,int,int)", "summary", "df-generated"] + - ["java.time", "Period", "ofDays", "(int)", "summary", "df-generated"] + - ["java.time", "Period", "ofMonths", "(int)", "summary", "df-generated"] + - ["java.time", "Period", "ofWeeks", "(int)", "summary", "df-generated"] + - ["java.time", "Period", "ofYears", "(int)", "summary", "df-generated"] + - ["java.time", "Period", "parse", "(CharSequence)", "summary", "df-generated"] + - ["java.time", "Period", "toTotalMonths", "()", "summary", "df-generated"] + - ["java.time", "Year", "atDay", "(int)", "summary", "df-generated"] + - ["java.time", "Year", "atMonth", "(Month)", "summary", "df-generated"] + - ["java.time", "Year", "atMonth", "(int)", "summary", "df-generated"] + - ["java.time", "Year", "atMonthDay", "(MonthDay)", "summary", "df-generated"] + - ["java.time", "Year", "getValue", "()", "summary", "df-generated"] + - ["java.time", "Year", "isAfter", "(Year)", "summary", "df-generated"] + - ["java.time", "Year", "isBefore", "(Year)", "summary", "df-generated"] + - ["java.time", "Year", "isLeap", "()", "summary", "df-generated"] + - ["java.time", "Year", "isLeap", "(long)", "summary", "df-generated"] + - ["java.time", "Year", "isValidMonthDay", "(MonthDay)", "summary", "df-generated"] + - ["java.time", "Year", "length", "()", "summary", "df-generated"] + - ["java.time", "Year", "now", "()", "summary", "df-generated"] + - ["java.time", "Year", "now", "(Clock)", "summary", "df-generated"] + - ["java.time", "Year", "now", "(ZoneId)", "summary", "df-generated"] + - ["java.time", "Year", "of", "(int)", "summary", "df-generated"] + - ["java.time", "Year", "parse", "(CharSequence)", "summary", "df-generated"] + - ["java.time", "Year", "parse", "(CharSequence,DateTimeFormatter)", "summary", "df-generated"] + - ["java.time", "YearMonth", "atDay", "(int)", "summary", "df-generated"] + - ["java.time", "YearMonth", "atEndOfMonth", "()", "summary", "df-generated"] + - ["java.time", "YearMonth", "getMonth", "()", "summary", "df-generated"] + - ["java.time", "YearMonth", "getMonthValue", "()", "summary", "df-generated"] + - ["java.time", "YearMonth", "getYear", "()", "summary", "df-generated"] + - ["java.time", "YearMonth", "isAfter", "(YearMonth)", "summary", "df-generated"] + - ["java.time", "YearMonth", "isBefore", "(YearMonth)", "summary", "df-generated"] + - ["java.time", "YearMonth", "isLeapYear", "()", "summary", "df-generated"] + - ["java.time", "YearMonth", "isValidDay", "(int)", "summary", "df-generated"] + - ["java.time", "YearMonth", "lengthOfMonth", "()", "summary", "df-generated"] + - ["java.time", "YearMonth", "lengthOfYear", "()", "summary", "df-generated"] + - ["java.time", "YearMonth", "now", "()", "summary", "df-generated"] + - ["java.time", "YearMonth", "now", "(Clock)", "summary", "df-generated"] + - ["java.time", "YearMonth", "now", "(ZoneId)", "summary", "df-generated"] + - ["java.time", "YearMonth", "of", "(int,Month)", "summary", "df-generated"] + - ["java.time", "YearMonth", "of", "(int,int)", "summary", "df-generated"] + - ["java.time", "YearMonth", "parse", "(CharSequence)", "summary", "df-generated"] + - ["java.time", "YearMonth", "parse", "(CharSequence,DateTimeFormatter)", "summary", "df-generated"] + - ["java.time", "ZoneId", "getAvailableZoneIds", "()", "summary", "df-generated"] + - ["java.time", "ZoneOffset", "getTotalSeconds", "()", "summary", "df-generated"] + - ["java.time", "ZoneOffset", "of", "(String)", "summary", "df-generated"] + - ["java.time", "ZoneOffset", "ofHours", "(int)", "summary", "df-generated"] + - ["java.time", "ZoneOffset", "ofHoursMinutes", "(int,int)", "summary", "df-generated"] + - ["java.time", "ZoneOffset", "ofHoursMinutesSeconds", "(int,int,int)", "summary", "df-generated"] + - ["java.time", "ZoneOffset", "ofTotalSeconds", "(int)", "summary", "df-generated"] + - ["java.time", "ZonedDateTime", "getDayOfMonth", "()", "summary", "df-generated"] + - ["java.time", "ZonedDateTime", "getDayOfWeek", "()", "summary", "df-generated"] + - ["java.time", "ZonedDateTime", "getDayOfYear", "()", "summary", "df-generated"] + - ["java.time", "ZonedDateTime", "getHour", "()", "summary", "df-generated"] + - ["java.time", "ZonedDateTime", "getMinute", "()", "summary", "df-generated"] + - ["java.time", "ZonedDateTime", "getMonth", "()", "summary", "df-generated"] + - ["java.time", "ZonedDateTime", "getMonthValue", "()", "summary", "df-generated"] + - ["java.time", "ZonedDateTime", "getNano", "()", "summary", "df-generated"] + - ["java.time", "ZonedDateTime", "getSecond", "()", "summary", "df-generated"] + - ["java.time", "ZonedDateTime", "getYear", "()", "summary", "df-generated"] + - ["java.time", "ZonedDateTime", "parse", "(CharSequence)", "summary", "df-generated"] + - ["java.time", "ZonedDateTime", "parse", "(CharSequence,DateTimeFormatter)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/java.time.temporal.model.yml b/java/ql/lib/ext/generated/java.time.temporal.model.yml new file mode 100644 index 00000000000..d0b17982238 --- /dev/null +++ b/java/ql/lib/ext/generated/java.time.temporal.model.yml @@ -0,0 +1,97 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["java.time.temporal", "Temporal", True, "minus", "(TemporalAmount)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.temporal", "Temporal", True, "minus", "(long,TemporalUnit)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.temporal", "Temporal", True, "plus", "(TemporalAmount)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.temporal", "Temporal", True, "plus", "(long,TemporalUnit)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.temporal", "Temporal", True, "with", "(TemporalAdjuster)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time.temporal", "Temporal", True, "with", "(TemporalAdjuster)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.temporal", "Temporal", True, "with", "(TemporalField,long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.temporal", "Temporal", True, "with", "(TemporalField,long)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time.temporal", "TemporalAccessor", True, "query", "(TemporalQuery)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.temporal", "TemporalAccessor", True, "range", "(TemporalField)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time.temporal", "TemporalAdjuster", True, "adjustInto", "(Temporal)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time.temporal", "TemporalAmount", True, "addTo", "(Temporal)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time.temporal", "TemporalAmount", True, "subtractFrom", "(Temporal)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time.temporal", "TemporalField", True, "adjustInto", "(Temporal,long)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time.temporal", "TemporalField", True, "getBaseUnit", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.temporal", "TemporalField", True, "getDisplayName", "(Locale)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time.temporal", "TemporalField", True, "getDisplayName", "(Locale)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.temporal", "TemporalField", True, "getRangeUnit", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.temporal", "TemporalField", True, "range", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.temporal", "TemporalField", True, "rangeRefinedBy", "(TemporalAccessor)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.temporal", "TemporalField", True, "resolve", "(Map,TemporalAccessor,ResolverStyle)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.time.temporal", "TemporalUnit", True, "addTo", "(Temporal,long)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time.temporal", "UnsupportedTemporalTypeException", True, "UnsupportedTemporalTypeException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.time.temporal", "UnsupportedTemporalTypeException", True, "UnsupportedTemporalTypeException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.time.temporal", "UnsupportedTemporalTypeException", True, "UnsupportedTemporalTypeException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.time.temporal", "WeekFields", False, "dayOfWeek", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.temporal", "WeekFields", False, "weekBasedYear", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.temporal", "WeekFields", False, "weekOfMonth", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.temporal", "WeekFields", False, "weekOfWeekBasedYear", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.temporal", "WeekFields", False, "weekOfYear", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["java.time.temporal", "ChronoField", "checkValidIntValue", "(long)", "summary", "df-generated"] + - ["java.time.temporal", "ChronoField", "checkValidValue", "(long)", "summary", "df-generated"] + - ["java.time.temporal", "Temporal", "isSupported", "(TemporalUnit)", "summary", "df-generated"] + - ["java.time.temporal", "Temporal", "until", "(Temporal,TemporalUnit)", "summary", "df-generated"] + - ["java.time.temporal", "TemporalAccessor", "get", "(TemporalField)", "summary", "df-generated"] + - ["java.time.temporal", "TemporalAccessor", "getLong", "(TemporalField)", "summary", "df-generated"] + - ["java.time.temporal", "TemporalAccessor", "isSupported", "(TemporalField)", "summary", "df-generated"] + - ["java.time.temporal", "TemporalAdjusters", "dayOfWeekInMonth", "(int,DayOfWeek)", "summary", "df-generated"] + - ["java.time.temporal", "TemporalAdjusters", "firstDayOfMonth", "()", "summary", "df-generated"] + - ["java.time.temporal", "TemporalAdjusters", "firstDayOfNextMonth", "()", "summary", "df-generated"] + - ["java.time.temporal", "TemporalAdjusters", "firstDayOfNextYear", "()", "summary", "df-generated"] + - ["java.time.temporal", "TemporalAdjusters", "firstDayOfYear", "()", "summary", "df-generated"] + - ["java.time.temporal", "TemporalAdjusters", "firstInMonth", "(DayOfWeek)", "summary", "df-generated"] + - ["java.time.temporal", "TemporalAdjusters", "lastDayOfMonth", "()", "summary", "df-generated"] + - ["java.time.temporal", "TemporalAdjusters", "lastDayOfYear", "()", "summary", "df-generated"] + - ["java.time.temporal", "TemporalAdjusters", "lastInMonth", "(DayOfWeek)", "summary", "df-generated"] + - ["java.time.temporal", "TemporalAdjusters", "next", "(DayOfWeek)", "summary", "df-generated"] + - ["java.time.temporal", "TemporalAdjusters", "nextOrSame", "(DayOfWeek)", "summary", "df-generated"] + - ["java.time.temporal", "TemporalAdjusters", "ofDateAdjuster", "(UnaryOperator)", "summary", "df-generated"] + - ["java.time.temporal", "TemporalAdjusters", "previous", "(DayOfWeek)", "summary", "df-generated"] + - ["java.time.temporal", "TemporalAdjusters", "previousOrSame", "(DayOfWeek)", "summary", "df-generated"] + - ["java.time.temporal", "TemporalAmount", "get", "(TemporalUnit)", "summary", "df-generated"] + - ["java.time.temporal", "TemporalAmount", "getUnits", "()", "summary", "df-generated"] + - ["java.time.temporal", "TemporalField", "getFrom", "(TemporalAccessor)", "summary", "df-generated"] + - ["java.time.temporal", "TemporalField", "isDateBased", "()", "summary", "df-generated"] + - ["java.time.temporal", "TemporalField", "isSupportedBy", "(TemporalAccessor)", "summary", "df-generated"] + - ["java.time.temporal", "TemporalField", "isTimeBased", "()", "summary", "df-generated"] + - ["java.time.temporal", "TemporalQueries", "chronology", "()", "summary", "df-generated"] + - ["java.time.temporal", "TemporalQueries", "localDate", "()", "summary", "df-generated"] + - ["java.time.temporal", "TemporalQueries", "localTime", "()", "summary", "df-generated"] + - ["java.time.temporal", "TemporalQueries", "offset", "()", "summary", "df-generated"] + - ["java.time.temporal", "TemporalQueries", "precision", "()", "summary", "df-generated"] + - ["java.time.temporal", "TemporalQueries", "zone", "()", "summary", "df-generated"] + - ["java.time.temporal", "TemporalQueries", "zoneId", "()", "summary", "df-generated"] + - ["java.time.temporal", "TemporalUnit", "between", "(Temporal,Temporal)", "summary", "df-generated"] + - ["java.time.temporal", "TemporalUnit", "getDuration", "()", "summary", "df-generated"] + - ["java.time.temporal", "TemporalUnit", "isDateBased", "()", "summary", "df-generated"] + - ["java.time.temporal", "TemporalUnit", "isDurationEstimated", "()", "summary", "df-generated"] + - ["java.time.temporal", "TemporalUnit", "isSupportedBy", "(Temporal)", "summary", "df-generated"] + - ["java.time.temporal", "TemporalUnit", "isTimeBased", "()", "summary", "df-generated"] + - ["java.time.temporal", "ValueRange", "checkValidIntValue", "(long,TemporalField)", "summary", "df-generated"] + - ["java.time.temporal", "ValueRange", "checkValidValue", "(long,TemporalField)", "summary", "df-generated"] + - ["java.time.temporal", "ValueRange", "getLargestMinimum", "()", "summary", "df-generated"] + - ["java.time.temporal", "ValueRange", "getMaximum", "()", "summary", "df-generated"] + - ["java.time.temporal", "ValueRange", "getMinimum", "()", "summary", "df-generated"] + - ["java.time.temporal", "ValueRange", "getSmallestMaximum", "()", "summary", "df-generated"] + - ["java.time.temporal", "ValueRange", "isFixed", "()", "summary", "df-generated"] + - ["java.time.temporal", "ValueRange", "isIntValue", "()", "summary", "df-generated"] + - ["java.time.temporal", "ValueRange", "isValidIntValue", "(long)", "summary", "df-generated"] + - ["java.time.temporal", "ValueRange", "isValidValue", "(long)", "summary", "df-generated"] + - ["java.time.temporal", "ValueRange", "of", "(long,long)", "summary", "df-generated"] + - ["java.time.temporal", "ValueRange", "of", "(long,long,long)", "summary", "df-generated"] + - ["java.time.temporal", "ValueRange", "of", "(long,long,long,long)", "summary", "df-generated"] + - ["java.time.temporal", "WeekFields", "getFirstDayOfWeek", "()", "summary", "df-generated"] + - ["java.time.temporal", "WeekFields", "getMinimalDaysInFirstWeek", "()", "summary", "df-generated"] + - ["java.time.temporal", "WeekFields", "of", "(DayOfWeek,int)", "summary", "df-generated"] + - ["java.time.temporal", "WeekFields", "of", "(Locale)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/java.time.zone.model.yml b/java/ql/lib/ext/generated/java.time.zone.model.yml new file mode 100644 index 00000000000..1501f58c140 --- /dev/null +++ b/java/ql/lib/ext/generated/java.time.zone.model.yml @@ -0,0 +1,63 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["java.time.zone", "ZoneOffsetTransition", False, "getDateTimeAfter", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.zone", "ZoneOffsetTransition", False, "getDateTimeBefore", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.zone", "ZoneOffsetTransition", False, "getOffsetAfter", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.zone", "ZoneOffsetTransition", False, "getOffsetBefore", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.zone", "ZoneOffsetTransition", False, "of", "(LocalDateTime,ZoneOffset,ZoneOffset)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time.zone", "ZoneOffsetTransition", False, "of", "(LocalDateTime,ZoneOffset,ZoneOffset)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.time.zone", "ZoneOffsetTransition", False, "of", "(LocalDateTime,ZoneOffset,ZoneOffset)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["java.time.zone", "ZoneOffsetTransitionRule$TimeDefinition", False, "createDateTime", "(LocalDateTime,ZoneOffset,ZoneOffset)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time.zone", "ZoneOffsetTransitionRule", False, "createTransition", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.zone", "ZoneOffsetTransitionRule", False, "getLocalTime", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.zone", "ZoneOffsetTransitionRule", False, "getOffsetAfter", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.zone", "ZoneOffsetTransitionRule", False, "getOffsetBefore", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.zone", "ZoneOffsetTransitionRule", False, "getStandardOffset", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.zone", "ZoneOffsetTransitionRule", False, "of", "(Month,int,DayOfWeek,LocalTime,boolean,ZoneOffsetTransitionRule$TimeDefinition,ZoneOffset,ZoneOffset,ZoneOffset)", "", "Argument[3]", "ReturnValue", "taint", "df-generated"] + - ["java.time.zone", "ZoneOffsetTransitionRule", False, "of", "(Month,int,DayOfWeek,LocalTime,boolean,ZoneOffsetTransitionRule$TimeDefinition,ZoneOffset,ZoneOffset,ZoneOffset)", "", "Argument[6]", "ReturnValue", "taint", "df-generated"] + - ["java.time.zone", "ZoneOffsetTransitionRule", False, "of", "(Month,int,DayOfWeek,LocalTime,boolean,ZoneOffsetTransitionRule$TimeDefinition,ZoneOffset,ZoneOffset,ZoneOffset)", "", "Argument[7]", "ReturnValue", "taint", "df-generated"] + - ["java.time.zone", "ZoneOffsetTransitionRule", False, "of", "(Month,int,DayOfWeek,LocalTime,boolean,ZoneOffsetTransitionRule$TimeDefinition,ZoneOffset,ZoneOffset,ZoneOffset)", "", "Argument[8]", "ReturnValue", "taint", "df-generated"] + - ["java.time.zone", "ZoneRules", False, "getOffset", "(Instant)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.zone", "ZoneRules", False, "getOffset", "(LocalDateTime)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.zone", "ZoneRules", False, "getStandardOffset", "(Instant)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.zone", "ZoneRules", False, "getTransition", "(LocalDateTime)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.zone", "ZoneRules", False, "getTransitionRules", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.zone", "ZoneRules", False, "getTransitions", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.zone", "ZoneRules", False, "getValidOffsets", "(LocalDateTime)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.zone", "ZoneRules", False, "nextTransition", "(Instant)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.zone", "ZoneRules", False, "of", "(ZoneOffset)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time.zone", "ZoneRules", False, "of", "(ZoneOffset,ZoneOffset,List,List,List)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time.zone", "ZoneRules", False, "of", "(ZoneOffset,ZoneOffset,List,List,List)", "", "Argument[2].Element", "ReturnValue", "taint", "df-generated"] + - ["java.time.zone", "ZoneRules", False, "of", "(ZoneOffset,ZoneOffset,List,List,List)", "", "Argument[4].Element", "ReturnValue", "taint", "df-generated"] + - ["java.time.zone", "ZoneRules", False, "previousTransition", "(Instant)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.zone", "ZoneRulesException", True, "ZoneRulesException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.time.zone", "ZoneRulesException", True, "ZoneRulesException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.time.zone", "ZoneRulesException", True, "ZoneRulesException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["java.time.zone", "ZoneOffsetTransition", "getDuration", "()", "summary", "df-generated"] + - ["java.time.zone", "ZoneOffsetTransition", "getInstant", "()", "summary", "df-generated"] + - ["java.time.zone", "ZoneOffsetTransition", "isGap", "()", "summary", "df-generated"] + - ["java.time.zone", "ZoneOffsetTransition", "isOverlap", "()", "summary", "df-generated"] + - ["java.time.zone", "ZoneOffsetTransition", "isValidOffset", "(ZoneOffset)", "summary", "df-generated"] + - ["java.time.zone", "ZoneOffsetTransition", "toEpochSecond", "()", "summary", "df-generated"] + - ["java.time.zone", "ZoneOffsetTransitionRule", "getDayOfMonthIndicator", "()", "summary", "df-generated"] + - ["java.time.zone", "ZoneOffsetTransitionRule", "getDayOfWeek", "()", "summary", "df-generated"] + - ["java.time.zone", "ZoneOffsetTransitionRule", "getMonth", "()", "summary", "df-generated"] + - ["java.time.zone", "ZoneOffsetTransitionRule", "getTimeDefinition", "()", "summary", "df-generated"] + - ["java.time.zone", "ZoneOffsetTransitionRule", "isMidnightEndOfDay", "()", "summary", "df-generated"] + - ["java.time.zone", "ZoneRules", "getDaylightSavings", "(Instant)", "summary", "df-generated"] + - ["java.time.zone", "ZoneRules", "isDaylightSavings", "(Instant)", "summary", "df-generated"] + - ["java.time.zone", "ZoneRules", "isFixedOffset", "()", "summary", "df-generated"] + - ["java.time.zone", "ZoneRules", "isValidOffset", "(LocalDateTime,ZoneOffset)", "summary", "df-generated"] + - ["java.time.zone", "ZoneRulesProvider", "getAvailableZoneIds", "()", "summary", "df-generated"] + - ["java.time.zone", "ZoneRulesProvider", "getRules", "(String,boolean)", "summary", "df-generated"] + - ["java.time.zone", "ZoneRulesProvider", "getVersions", "(String)", "summary", "df-generated"] + - ["java.time.zone", "ZoneRulesProvider", "refresh", "()", "summary", "df-generated"] + - ["java.time.zone", "ZoneRulesProvider", "registerProvider", "(ZoneRulesProvider)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/java.util.concurrent.atomic.model.yml b/java/ql/lib/ext/generated/java.util.concurrent.atomic.model.yml new file mode 100644 index 00000000000..7f40c376f34 --- /dev/null +++ b/java/ql/lib/ext/generated/java.util.concurrent.atomic.model.yml @@ -0,0 +1,271 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["java.util.concurrent.atomic", "AtomicMarkableReference", True, "AtomicMarkableReference", "(Object,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicMarkableReference", True, "get", "(boolean[])", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicMarkableReference", True, "getReference", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicMarkableReference", True, "set", "(Object,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicReference", True, "getAndAccumulate", "(Object,BinaryOperator)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicReference", True, "getAndUpdate", "(UnaryOperator)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicReference", True, "updateAndGet", "(UnaryOperator)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicReferenceArray", True, "AtomicReferenceArray", "(Object[])", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicStampedReference", True, "AtomicStampedReference", "(Object,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicStampedReference", True, "get", "(int[])", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicStampedReference", True, "getReference", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicStampedReference", True, "set", "(Object,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["java.util.concurrent.atomic", "AtomicBoolean", "compareAndExchange", "(boolean,boolean)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicBoolean", "compareAndExchangeAcquire", "(boolean,boolean)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicBoolean", "compareAndExchangeRelease", "(boolean,boolean)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicBoolean", "getAcquire", "()", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicBoolean", "getAndSet", "(boolean)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicBoolean", "getOpaque", "()", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicBoolean", "getPlain", "()", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicBoolean", "lazySet", "(boolean)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicBoolean", "setOpaque", "(boolean)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicBoolean", "setPlain", "(boolean)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicBoolean", "setRelease", "(boolean)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicBoolean", "weakCompareAndSet", "(boolean,boolean)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicBoolean", "weakCompareAndSetAcquire", "(boolean,boolean)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicBoolean", "weakCompareAndSetPlain", "(boolean,boolean)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicBoolean", "weakCompareAndSetRelease", "(boolean,boolean)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicBoolean", "weakCompareAndSetVolatile", "(boolean,boolean)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicInteger", "accumulateAndGet", "(int,IntBinaryOperator)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicInteger", "addAndGet", "(int)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicInteger", "compareAndExchange", "(int,int)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicInteger", "compareAndExchangeAcquire", "(int,int)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicInteger", "compareAndExchangeRelease", "(int,int)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicInteger", "compareAndSet", "(int,int)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicInteger", "decrementAndGet", "()", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicInteger", "getAcquire", "()", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicInteger", "getAndAccumulate", "(int,IntBinaryOperator)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicInteger", "getAndAdd", "(int)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicInteger", "getAndDecrement", "()", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicInteger", "getAndIncrement", "()", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicInteger", "getAndSet", "(int)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicInteger", "getAndUpdate", "(IntUnaryOperator)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicInteger", "getOpaque", "()", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicInteger", "getPlain", "()", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicInteger", "lazySet", "(int)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicInteger", "set", "(int)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicInteger", "setOpaque", "(int)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicInteger", "setPlain", "(int)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicInteger", "setRelease", "(int)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicInteger", "updateAndGet", "(IntUnaryOperator)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicInteger", "weakCompareAndSet", "(int,int)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicInteger", "weakCompareAndSetAcquire", "(int,int)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicInteger", "weakCompareAndSetPlain", "(int,int)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicInteger", "weakCompareAndSetRelease", "(int,int)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicInteger", "weakCompareAndSetVolatile", "(int,int)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicIntegerArray", "AtomicIntegerArray", "(int)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicIntegerArray", "AtomicIntegerArray", "(int[])", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicIntegerArray", "accumulateAndGet", "(int,int,IntBinaryOperator)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicIntegerArray", "addAndGet", "(int,int)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicIntegerArray", "compareAndExchange", "(int,int,int)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicIntegerArray", "compareAndExchangeAcquire", "(int,int,int)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicIntegerArray", "compareAndExchangeRelease", "(int,int,int)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicIntegerArray", "compareAndSet", "(int,int,int)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicIntegerArray", "decrementAndGet", "(int)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicIntegerArray", "get", "(int)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicIntegerArray", "getAcquire", "(int)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicIntegerArray", "getAndAccumulate", "(int,int,IntBinaryOperator)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicIntegerArray", "getAndAdd", "(int,int)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicIntegerArray", "getAndDecrement", "(int)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicIntegerArray", "getAndIncrement", "(int)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicIntegerArray", "getAndSet", "(int,int)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicIntegerArray", "getAndUpdate", "(int,IntUnaryOperator)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicIntegerArray", "getOpaque", "(int)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicIntegerArray", "getPlain", "(int)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicIntegerArray", "incrementAndGet", "(int)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicIntegerArray", "lazySet", "(int,int)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicIntegerArray", "length", "()", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicIntegerArray", "set", "(int,int)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicIntegerArray", "setOpaque", "(int,int)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicIntegerArray", "setPlain", "(int,int)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicIntegerArray", "setRelease", "(int,int)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicIntegerArray", "updateAndGet", "(int,IntUnaryOperator)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicIntegerArray", "weakCompareAndSet", "(int,int,int)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicIntegerArray", "weakCompareAndSetAcquire", "(int,int,int)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicIntegerArray", "weakCompareAndSetPlain", "(int,int,int)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicIntegerArray", "weakCompareAndSetRelease", "(int,int,int)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicIntegerArray", "weakCompareAndSetVolatile", "(int,int,int)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicIntegerFieldUpdater", "accumulateAndGet", "(Object,int,IntBinaryOperator)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicIntegerFieldUpdater", "addAndGet", "(Object,int)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicIntegerFieldUpdater", "compareAndSet", "(Object,int,int)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicIntegerFieldUpdater", "decrementAndGet", "(Object)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicIntegerFieldUpdater", "get", "(Object)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicIntegerFieldUpdater", "getAndAccumulate", "(Object,int,IntBinaryOperator)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicIntegerFieldUpdater", "getAndAdd", "(Object,int)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicIntegerFieldUpdater", "getAndDecrement", "(Object)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicIntegerFieldUpdater", "getAndIncrement", "(Object)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicIntegerFieldUpdater", "getAndSet", "(Object,int)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicIntegerFieldUpdater", "getAndUpdate", "(Object,IntUnaryOperator)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicIntegerFieldUpdater", "incrementAndGet", "(Object)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicIntegerFieldUpdater", "lazySet", "(Object,int)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicIntegerFieldUpdater", "newUpdater", "(Class,String)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicIntegerFieldUpdater", "set", "(Object,int)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicIntegerFieldUpdater", "updateAndGet", "(Object,IntUnaryOperator)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicIntegerFieldUpdater", "weakCompareAndSet", "(Object,int,int)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLong", "accumulateAndGet", "(long,LongBinaryOperator)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLong", "compareAndExchange", "(long,long)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLong", "compareAndExchangeAcquire", "(long,long)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLong", "compareAndExchangeRelease", "(long,long)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLong", "compareAndSet", "(long,long)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLong", "decrementAndGet", "()", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLong", "getAcquire", "()", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLong", "getAndAccumulate", "(long,LongBinaryOperator)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLong", "getAndAdd", "(long)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLong", "getAndDecrement", "()", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLong", "getAndIncrement", "()", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLong", "getAndSet", "(long)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLong", "getAndUpdate", "(LongUnaryOperator)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLong", "getOpaque", "()", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLong", "getPlain", "()", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLong", "lazySet", "(long)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLong", "set", "(long)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLong", "setOpaque", "(long)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLong", "setPlain", "(long)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLong", "setRelease", "(long)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLong", "updateAndGet", "(LongUnaryOperator)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLong", "weakCompareAndSet", "(long,long)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLong", "weakCompareAndSetAcquire", "(long,long)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLong", "weakCompareAndSetPlain", "(long,long)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLong", "weakCompareAndSetRelease", "(long,long)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLong", "weakCompareAndSetVolatile", "(long,long)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLongArray", "AtomicLongArray", "(int)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLongArray", "AtomicLongArray", "(long[])", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLongArray", "accumulateAndGet", "(int,long,LongBinaryOperator)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLongArray", "addAndGet", "(int,long)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLongArray", "compareAndExchange", "(int,long,long)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLongArray", "compareAndExchangeAcquire", "(int,long,long)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLongArray", "compareAndExchangeRelease", "(int,long,long)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLongArray", "compareAndSet", "(int,long,long)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLongArray", "decrementAndGet", "(int)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLongArray", "get", "(int)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLongArray", "getAcquire", "(int)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLongArray", "getAndAccumulate", "(int,long,LongBinaryOperator)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLongArray", "getAndAdd", "(int,long)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLongArray", "getAndDecrement", "(int)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLongArray", "getAndIncrement", "(int)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLongArray", "getAndSet", "(int,long)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLongArray", "getAndUpdate", "(int,LongUnaryOperator)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLongArray", "getOpaque", "(int)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLongArray", "getPlain", "(int)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLongArray", "incrementAndGet", "(int)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLongArray", "lazySet", "(int,long)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLongArray", "length", "()", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLongArray", "set", "(int,long)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLongArray", "setOpaque", "(int,long)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLongArray", "setPlain", "(int,long)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLongArray", "setRelease", "(int,long)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLongArray", "updateAndGet", "(int,LongUnaryOperator)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLongArray", "weakCompareAndSet", "(int,long,long)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLongArray", "weakCompareAndSetAcquire", "(int,long,long)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLongArray", "weakCompareAndSetPlain", "(int,long,long)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLongArray", "weakCompareAndSetRelease", "(int,long,long)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLongArray", "weakCompareAndSetVolatile", "(int,long,long)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLongFieldUpdater", "accumulateAndGet", "(Object,long,LongBinaryOperator)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLongFieldUpdater", "addAndGet", "(Object,long)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLongFieldUpdater", "compareAndSet", "(Object,long,long)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLongFieldUpdater", "decrementAndGet", "(Object)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLongFieldUpdater", "get", "(Object)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLongFieldUpdater", "getAndAccumulate", "(Object,long,LongBinaryOperator)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLongFieldUpdater", "getAndAdd", "(Object,long)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLongFieldUpdater", "getAndDecrement", "(Object)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLongFieldUpdater", "getAndIncrement", "(Object)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLongFieldUpdater", "getAndSet", "(Object,long)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLongFieldUpdater", "getAndUpdate", "(Object,LongUnaryOperator)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLongFieldUpdater", "incrementAndGet", "(Object)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLongFieldUpdater", "lazySet", "(Object,long)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLongFieldUpdater", "newUpdater", "(Class,String)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLongFieldUpdater", "set", "(Object,long)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLongFieldUpdater", "updateAndGet", "(Object,LongUnaryOperator)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLongFieldUpdater", "weakCompareAndSet", "(Object,long,long)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicMarkableReference", "attemptMark", "(Object,boolean)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicMarkableReference", "compareAndSet", "(Object,Object,boolean,boolean)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicMarkableReference", "isMarked", "()", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicMarkableReference", "weakCompareAndSet", "(Object,Object,boolean,boolean)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicReference", "accumulateAndGet", "(Object,BinaryOperator)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicReference", "compareAndExchange", "(Object,Object)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicReference", "compareAndExchangeAcquire", "(Object,Object)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicReference", "compareAndExchangeRelease", "(Object,Object)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicReference", "compareAndSet", "(Object,Object)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicReference", "getAcquire", "()", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicReference", "getAndSet", "(Object)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicReference", "getOpaque", "()", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicReference", "getPlain", "()", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicReference", "lazySet", "(Object)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicReference", "setOpaque", "(Object)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicReference", "setPlain", "(Object)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicReference", "setRelease", "(Object)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicReference", "weakCompareAndSet", "(Object,Object)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicReference", "weakCompareAndSetAcquire", "(Object,Object)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicReference", "weakCompareAndSetPlain", "(Object,Object)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicReference", "weakCompareAndSetRelease", "(Object,Object)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicReference", "weakCompareAndSetVolatile", "(Object,Object)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicReferenceArray", "AtomicReferenceArray", "(int)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicReferenceArray", "accumulateAndGet", "(int,Object,BinaryOperator)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicReferenceArray", "compareAndExchange", "(int,Object,Object)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicReferenceArray", "compareAndExchangeAcquire", "(int,Object,Object)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicReferenceArray", "compareAndExchangeRelease", "(int,Object,Object)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicReferenceArray", "compareAndSet", "(int,Object,Object)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicReferenceArray", "get", "(int)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicReferenceArray", "getAcquire", "(int)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicReferenceArray", "getAndAccumulate", "(int,Object,BinaryOperator)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicReferenceArray", "getAndSet", "(int,Object)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicReferenceArray", "getAndUpdate", "(int,UnaryOperator)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicReferenceArray", "getOpaque", "(int)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicReferenceArray", "getPlain", "(int)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicReferenceArray", "lazySet", "(int,Object)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicReferenceArray", "length", "()", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicReferenceArray", "set", "(int,Object)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicReferenceArray", "setOpaque", "(int,Object)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicReferenceArray", "setPlain", "(int,Object)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicReferenceArray", "setRelease", "(int,Object)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicReferenceArray", "updateAndGet", "(int,UnaryOperator)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicReferenceArray", "weakCompareAndSet", "(int,Object,Object)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicReferenceArray", "weakCompareAndSetAcquire", "(int,Object,Object)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicReferenceArray", "weakCompareAndSetPlain", "(int,Object,Object)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicReferenceArray", "weakCompareAndSetRelease", "(int,Object,Object)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicReferenceArray", "weakCompareAndSetVolatile", "(int,Object,Object)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicReferenceFieldUpdater", "accumulateAndGet", "(Object,Object,BinaryOperator)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicReferenceFieldUpdater", "compareAndSet", "(Object,Object,Object)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicReferenceFieldUpdater", "get", "(Object)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicReferenceFieldUpdater", "getAndAccumulate", "(Object,Object,BinaryOperator)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicReferenceFieldUpdater", "getAndSet", "(Object,Object)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicReferenceFieldUpdater", "getAndUpdate", "(Object,UnaryOperator)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicReferenceFieldUpdater", "lazySet", "(Object,Object)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicReferenceFieldUpdater", "newUpdater", "(Class,Class,String)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicReferenceFieldUpdater", "set", "(Object,Object)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicReferenceFieldUpdater", "updateAndGet", "(Object,UnaryOperator)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicReferenceFieldUpdater", "weakCompareAndSet", "(Object,Object,Object)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicStampedReference", "attemptStamp", "(Object,int)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicStampedReference", "compareAndSet", "(Object,Object,int,int)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicStampedReference", "getStamp", "()", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicStampedReference", "weakCompareAndSet", "(Object,Object,int,int)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "DoubleAccumulator", "DoubleAccumulator", "(DoubleBinaryOperator,double)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "DoubleAccumulator", "accumulate", "(double)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "DoubleAccumulator", "get", "()", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "DoubleAccumulator", "getThenReset", "()", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "DoubleAccumulator", "reset", "()", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "DoubleAdder", "add", "(double)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "DoubleAdder", "reset", "()", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "DoubleAdder", "sum", "()", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "DoubleAdder", "sumThenReset", "()", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "LongAccumulator", "LongAccumulator", "(LongBinaryOperator,long)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "LongAccumulator", "accumulate", "(long)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "LongAccumulator", "get", "()", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "LongAccumulator", "getThenReset", "()", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "LongAccumulator", "reset", "()", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "LongAdder", "add", "(long)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "LongAdder", "decrement", "()", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "LongAdder", "increment", "()", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "LongAdder", "reset", "()", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "LongAdder", "sum", "()", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "LongAdder", "sumThenReset", "()", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/java.util.concurrent.locks.model.yml b/java/ql/lib/ext/generated/java.util.concurrent.locks.model.yml new file mode 100644 index 00000000000..e8f78f593d0 --- /dev/null +++ b/java/ql/lib/ext/generated/java.util.concurrent.locks.model.yml @@ -0,0 +1,128 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["java.util.concurrent.locks", "AbstractQueuedLongSynchronizer", True, "getExclusiveQueuedThreads", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent.locks", "AbstractQueuedLongSynchronizer", True, "getFirstQueuedThread", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent.locks", "AbstractQueuedLongSynchronizer", True, "getQueuedThreads", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent.locks", "AbstractQueuedLongSynchronizer", True, "getSharedQueuedThreads", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent.locks", "AbstractQueuedLongSynchronizer", True, "getWaitingThreads", "(AbstractQueuedLongSynchronizer$ConditionObject)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent.locks", "AbstractQueuedSynchronizer", True, "getExclusiveQueuedThreads", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent.locks", "AbstractQueuedSynchronizer", True, "getFirstQueuedThread", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent.locks", "AbstractQueuedSynchronizer", True, "getQueuedThreads", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent.locks", "AbstractQueuedSynchronizer", True, "getSharedQueuedThreads", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent.locks", "AbstractQueuedSynchronizer", True, "getWaitingThreads", "(AbstractQueuedSynchronizer$ConditionObject)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent.locks", "ReadWriteLock", True, "readLock", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent.locks", "ReadWriteLock", True, "writeLock", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent.locks", "StampedLock", True, "asReadLock", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent.locks", "StampedLock", True, "asReadWriteLock", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent.locks", "StampedLock", True, "asWriteLock", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["java.util.concurrent.locks", "AbstractQueuedLongSynchronizer", "acquire", "(long)", "summary", "df-generated"] + - ["java.util.concurrent.locks", "AbstractQueuedLongSynchronizer", "acquireInterruptibly", "(long)", "summary", "df-generated"] + - ["java.util.concurrent.locks", "AbstractQueuedLongSynchronizer", "acquireShared", "(long)", "summary", "df-generated"] + - ["java.util.concurrent.locks", "AbstractQueuedLongSynchronizer", "acquireSharedInterruptibly", "(long)", "summary", "df-generated"] + - ["java.util.concurrent.locks", "AbstractQueuedLongSynchronizer", "getQueueLength", "()", "summary", "df-generated"] + - ["java.util.concurrent.locks", "AbstractQueuedLongSynchronizer", "getWaitQueueLength", "(AbstractQueuedLongSynchronizer$ConditionObject)", "summary", "df-generated"] + - ["java.util.concurrent.locks", "AbstractQueuedLongSynchronizer", "hasContended", "()", "summary", "df-generated"] + - ["java.util.concurrent.locks", "AbstractQueuedLongSynchronizer", "hasQueuedPredecessors", "()", "summary", "df-generated"] + - ["java.util.concurrent.locks", "AbstractQueuedLongSynchronizer", "hasQueuedThreads", "()", "summary", "df-generated"] + - ["java.util.concurrent.locks", "AbstractQueuedLongSynchronizer", "hasWaiters", "(AbstractQueuedLongSynchronizer$ConditionObject)", "summary", "df-generated"] + - ["java.util.concurrent.locks", "AbstractQueuedLongSynchronizer", "isQueued", "(Thread)", "summary", "df-generated"] + - ["java.util.concurrent.locks", "AbstractQueuedLongSynchronizer", "owns", "(AbstractQueuedLongSynchronizer$ConditionObject)", "summary", "df-generated"] + - ["java.util.concurrent.locks", "AbstractQueuedLongSynchronizer", "release", "(long)", "summary", "df-generated"] + - ["java.util.concurrent.locks", "AbstractQueuedLongSynchronizer", "releaseShared", "(long)", "summary", "df-generated"] + - ["java.util.concurrent.locks", "AbstractQueuedLongSynchronizer", "tryAcquireNanos", "(long,long)", "summary", "df-generated"] + - ["java.util.concurrent.locks", "AbstractQueuedLongSynchronizer", "tryAcquireSharedNanos", "(long,long)", "summary", "df-generated"] + - ["java.util.concurrent.locks", "AbstractQueuedSynchronizer", "acquire", "(int)", "summary", "df-generated"] + - ["java.util.concurrent.locks", "AbstractQueuedSynchronizer", "acquireInterruptibly", "(int)", "summary", "df-generated"] + - ["java.util.concurrent.locks", "AbstractQueuedSynchronizer", "acquireShared", "(int)", "summary", "df-generated"] + - ["java.util.concurrent.locks", "AbstractQueuedSynchronizer", "acquireSharedInterruptibly", "(int)", "summary", "df-generated"] + - ["java.util.concurrent.locks", "AbstractQueuedSynchronizer", "getQueueLength", "()", "summary", "df-generated"] + - ["java.util.concurrent.locks", "AbstractQueuedSynchronizer", "getWaitQueueLength", "(AbstractQueuedSynchronizer$ConditionObject)", "summary", "df-generated"] + - ["java.util.concurrent.locks", "AbstractQueuedSynchronizer", "hasContended", "()", "summary", "df-generated"] + - ["java.util.concurrent.locks", "AbstractQueuedSynchronizer", "hasQueuedPredecessors", "()", "summary", "df-generated"] + - ["java.util.concurrent.locks", "AbstractQueuedSynchronizer", "hasQueuedThreads", "()", "summary", "df-generated"] + - ["java.util.concurrent.locks", "AbstractQueuedSynchronizer", "hasWaiters", "(AbstractQueuedSynchronizer$ConditionObject)", "summary", "df-generated"] + - ["java.util.concurrent.locks", "AbstractQueuedSynchronizer", "isQueued", "(Thread)", "summary", "df-generated"] + - ["java.util.concurrent.locks", "AbstractQueuedSynchronizer", "owns", "(AbstractQueuedSynchronizer$ConditionObject)", "summary", "df-generated"] + - ["java.util.concurrent.locks", "AbstractQueuedSynchronizer", "release", "(int)", "summary", "df-generated"] + - ["java.util.concurrent.locks", "AbstractQueuedSynchronizer", "releaseShared", "(int)", "summary", "df-generated"] + - ["java.util.concurrent.locks", "AbstractQueuedSynchronizer", "tryAcquireNanos", "(int,long)", "summary", "df-generated"] + - ["java.util.concurrent.locks", "AbstractQueuedSynchronizer", "tryAcquireSharedNanos", "(int,long)", "summary", "df-generated"] + - ["java.util.concurrent.locks", "Condition", "await", "()", "summary", "df-generated"] + - ["java.util.concurrent.locks", "Condition", "await", "(long,TimeUnit)", "summary", "df-generated"] + - ["java.util.concurrent.locks", "Condition", "awaitNanos", "(long)", "summary", "df-generated"] + - ["java.util.concurrent.locks", "Condition", "awaitUninterruptibly", "()", "summary", "df-generated"] + - ["java.util.concurrent.locks", "Condition", "awaitUntil", "(Date)", "summary", "df-generated"] + - ["java.util.concurrent.locks", "Condition", "signal", "()", "summary", "df-generated"] + - ["java.util.concurrent.locks", "Condition", "signalAll", "()", "summary", "df-generated"] + - ["java.util.concurrent.locks", "Lock", "lock", "()", "summary", "df-generated"] + - ["java.util.concurrent.locks", "Lock", "lockInterruptibly", "()", "summary", "df-generated"] + - ["java.util.concurrent.locks", "Lock", "newCondition", "()", "summary", "df-generated"] + - ["java.util.concurrent.locks", "Lock", "tryLock", "()", "summary", "df-generated"] + - ["java.util.concurrent.locks", "Lock", "tryLock", "(long,TimeUnit)", "summary", "df-generated"] + - ["java.util.concurrent.locks", "Lock", "unlock", "()", "summary", "df-generated"] + - ["java.util.concurrent.locks", "LockSupport", "getBlocker", "(Thread)", "summary", "df-generated"] + - ["java.util.concurrent.locks", "LockSupport", "park", "()", "summary", "df-generated"] + - ["java.util.concurrent.locks", "LockSupport", "park", "(Object)", "summary", "df-generated"] + - ["java.util.concurrent.locks", "LockSupport", "parkNanos", "(Object,long)", "summary", "df-generated"] + - ["java.util.concurrent.locks", "LockSupport", "parkNanos", "(long)", "summary", "df-generated"] + - ["java.util.concurrent.locks", "LockSupport", "parkUntil", "(Object,long)", "summary", "df-generated"] + - ["java.util.concurrent.locks", "LockSupport", "parkUntil", "(long)", "summary", "df-generated"] + - ["java.util.concurrent.locks", "LockSupport", "setCurrentBlocker", "(Object)", "summary", "df-generated"] + - ["java.util.concurrent.locks", "LockSupport", "unpark", "(Thread)", "summary", "df-generated"] + - ["java.util.concurrent.locks", "ReentrantLock", "ReentrantLock", "(boolean)", "summary", "df-generated"] + - ["java.util.concurrent.locks", "ReentrantLock", "getHoldCount", "()", "summary", "df-generated"] + - ["java.util.concurrent.locks", "ReentrantLock", "getQueueLength", "()", "summary", "df-generated"] + - ["java.util.concurrent.locks", "ReentrantLock", "getWaitQueueLength", "(Condition)", "summary", "df-generated"] + - ["java.util.concurrent.locks", "ReentrantLock", "hasQueuedThread", "(Thread)", "summary", "df-generated"] + - ["java.util.concurrent.locks", "ReentrantLock", "hasQueuedThreads", "()", "summary", "df-generated"] + - ["java.util.concurrent.locks", "ReentrantLock", "hasWaiters", "(Condition)", "summary", "df-generated"] + - ["java.util.concurrent.locks", "ReentrantLock", "isFair", "()", "summary", "df-generated"] + - ["java.util.concurrent.locks", "ReentrantLock", "isHeldByCurrentThread", "()", "summary", "df-generated"] + - ["java.util.concurrent.locks", "ReentrantLock", "isLocked", "()", "summary", "df-generated"] + - ["java.util.concurrent.locks", "ReentrantReadWriteLock$WriteLock", "getHoldCount", "()", "summary", "df-generated"] + - ["java.util.concurrent.locks", "ReentrantReadWriteLock$WriteLock", "isHeldByCurrentThread", "()", "summary", "df-generated"] + - ["java.util.concurrent.locks", "ReentrantReadWriteLock", "ReentrantReadWriteLock", "(boolean)", "summary", "df-generated"] + - ["java.util.concurrent.locks", "ReentrantReadWriteLock", "getQueueLength", "()", "summary", "df-generated"] + - ["java.util.concurrent.locks", "ReentrantReadWriteLock", "getReadHoldCount", "()", "summary", "df-generated"] + - ["java.util.concurrent.locks", "ReentrantReadWriteLock", "getReadLockCount", "()", "summary", "df-generated"] + - ["java.util.concurrent.locks", "ReentrantReadWriteLock", "getWaitQueueLength", "(Condition)", "summary", "df-generated"] + - ["java.util.concurrent.locks", "ReentrantReadWriteLock", "getWriteHoldCount", "()", "summary", "df-generated"] + - ["java.util.concurrent.locks", "ReentrantReadWriteLock", "hasQueuedThread", "(Thread)", "summary", "df-generated"] + - ["java.util.concurrent.locks", "ReentrantReadWriteLock", "hasQueuedThreads", "()", "summary", "df-generated"] + - ["java.util.concurrent.locks", "ReentrantReadWriteLock", "hasWaiters", "(Condition)", "summary", "df-generated"] + - ["java.util.concurrent.locks", "ReentrantReadWriteLock", "isFair", "()", "summary", "df-generated"] + - ["java.util.concurrent.locks", "ReentrantReadWriteLock", "isWriteLocked", "()", "summary", "df-generated"] + - ["java.util.concurrent.locks", "ReentrantReadWriteLock", "isWriteLockedByCurrentThread", "()", "summary", "df-generated"] + - ["java.util.concurrent.locks", "StampedLock", "getReadLockCount", "()", "summary", "df-generated"] + - ["java.util.concurrent.locks", "StampedLock", "isLockStamp", "(long)", "summary", "df-generated"] + - ["java.util.concurrent.locks", "StampedLock", "isOptimisticReadStamp", "(long)", "summary", "df-generated"] + - ["java.util.concurrent.locks", "StampedLock", "isReadLockStamp", "(long)", "summary", "df-generated"] + - ["java.util.concurrent.locks", "StampedLock", "isReadLocked", "()", "summary", "df-generated"] + - ["java.util.concurrent.locks", "StampedLock", "isWriteLockStamp", "(long)", "summary", "df-generated"] + - ["java.util.concurrent.locks", "StampedLock", "isWriteLocked", "()", "summary", "df-generated"] + - ["java.util.concurrent.locks", "StampedLock", "readLock", "()", "summary", "df-generated"] + - ["java.util.concurrent.locks", "StampedLock", "readLockInterruptibly", "()", "summary", "df-generated"] + - ["java.util.concurrent.locks", "StampedLock", "tryConvertToOptimisticRead", "(long)", "summary", "df-generated"] + - ["java.util.concurrent.locks", "StampedLock", "tryConvertToReadLock", "(long)", "summary", "df-generated"] + - ["java.util.concurrent.locks", "StampedLock", "tryConvertToWriteLock", "(long)", "summary", "df-generated"] + - ["java.util.concurrent.locks", "StampedLock", "tryOptimisticRead", "()", "summary", "df-generated"] + - ["java.util.concurrent.locks", "StampedLock", "tryReadLock", "()", "summary", "df-generated"] + - ["java.util.concurrent.locks", "StampedLock", "tryReadLock", "(long,TimeUnit)", "summary", "df-generated"] + - ["java.util.concurrent.locks", "StampedLock", "tryUnlockRead", "()", "summary", "df-generated"] + - ["java.util.concurrent.locks", "StampedLock", "tryUnlockWrite", "()", "summary", "df-generated"] + - ["java.util.concurrent.locks", "StampedLock", "tryWriteLock", "()", "summary", "df-generated"] + - ["java.util.concurrent.locks", "StampedLock", "tryWriteLock", "(long,TimeUnit)", "summary", "df-generated"] + - ["java.util.concurrent.locks", "StampedLock", "unlock", "(long)", "summary", "df-generated"] + - ["java.util.concurrent.locks", "StampedLock", "unlockRead", "(long)", "summary", "df-generated"] + - ["java.util.concurrent.locks", "StampedLock", "unlockWrite", "(long)", "summary", "df-generated"] + - ["java.util.concurrent.locks", "StampedLock", "validate", "(long)", "summary", "df-generated"] + - ["java.util.concurrent.locks", "StampedLock", "writeLock", "()", "summary", "df-generated"] + - ["java.util.concurrent.locks", "StampedLock", "writeLockInterruptibly", "()", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/java.util.concurrent.model.yml b/java/ql/lib/ext/generated/java.util.concurrent.model.yml new file mode 100644 index 00000000000..528a8eb3183 --- /dev/null +++ b/java/ql/lib/ext/generated/java.util.concurrent.model.yml @@ -0,0 +1,374 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["java.util.concurrent", "BrokenBarrierException", True, "BrokenBarrierException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.concurrent", "CancellationException", True, "CancellationException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.concurrent", "CompletableFuture", True, "allOf", "(CompletableFuture[])", "", "Argument[0].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent", "CompletableFuture", True, "anyOf", "(CompletableFuture[])", "", "Argument[0].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent", "CompletableFuture", True, "completeAsync", "(Supplier)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent", "CompletableFuture", True, "completeAsync", "(Supplier,Executor)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.util.concurrent", "CompletableFuture", True, "completeOnTimeout", "(Object,long,TimeUnit)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.util.concurrent", "CompletableFuture", True, "copy", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent", "CompletableFuture", True, "delayedExecutor", "(long,TimeUnit,Executor)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent", "CompletableFuture", True, "getNow", "(Object)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent", "CompletableFuture", True, "getNow", "(Object)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent", "CompletableFuture", True, "obtrudeException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.concurrent", "CompletableFuture", True, "obtrudeValue", "(Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.concurrent", "CompletableFuture", True, "orTimeout", "(long,TimeUnit)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.util.concurrent", "CompletionException", True, "CompletionException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.concurrent", "CompletionException", True, "CompletionException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.util.concurrent", "CompletionException", True, "CompletionException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.concurrent", "CompletionStage", True, "exceptionallyAsync", "(Function)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent", "CompletionStage", True, "exceptionallyAsync", "(Function,Executor)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent", "CompletionStage", True, "exceptionallyCompose", "(Function)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent", "CompletionStage", True, "exceptionallyComposeAsync", "(Function)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent", "CompletionStage", True, "exceptionallyComposeAsync", "(Function,Executor)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent", "ConcurrentHashMap$KeySetView", True, "getMappedValue", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent", "ConcurrentHashMap", True, "ConcurrentHashMap", "(Map)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["java.util.concurrent", "ConcurrentHashMap", True, "keySet", "(Object)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent", "ConcurrentHashMap", True, "keySet", "(Object)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent", "ConcurrentHashMap", True, "keys", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent", "ConcurrentSkipListMap", True, "ConcurrentSkipListMap", "(Comparator)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.concurrent", "ConcurrentSkipListMap", True, "ConcurrentSkipListMap", "(Map)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["java.util.concurrent", "ConcurrentSkipListSet", True, "ConcurrentSkipListSet", "(Collection)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["java.util.concurrent", "ConcurrentSkipListSet", True, "ConcurrentSkipListSet", "(Comparator)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.concurrent", "ConcurrentSkipListSet", True, "ConcurrentSkipListSet", "(SortedSet)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["java.util.concurrent", "CopyOnWriteArrayList", True, "CopyOnWriteArrayList", "(Collection)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["java.util.concurrent", "CopyOnWriteArrayList", True, "CopyOnWriteArrayList", "(Object[])", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["java.util.concurrent", "CopyOnWriteArrayList", True, "addAllAbsent", "(Collection)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["java.util.concurrent", "CopyOnWriteArrayList", True, "addIfAbsent", "(Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.concurrent", "CopyOnWriteArraySet", True, "CopyOnWriteArraySet", "(Collection)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["java.util.concurrent", "CountedCompleter", True, "firstComplete", "()", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.util.concurrent", "CountedCompleter", True, "getCompleter", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent", "CountedCompleter", True, "getRoot", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent", "CountedCompleter", True, "nextComplete", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent", "CyclicBarrier", True, "CyclicBarrier", "(int,Runnable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.util.concurrent", "DelayQueue", True, "DelayQueue", "(Collection)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["java.util.concurrent", "Exchanger", True, "exchange", "(Object)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent", "Exchanger", True, "exchange", "(Object,long,TimeUnit)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent", "ExecutionException", True, "ExecutionException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.concurrent", "ExecutionException", True, "ExecutionException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.util.concurrent", "ExecutionException", True, "ExecutionException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.concurrent", "Executor", True, "execute", "(Runnable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.concurrent", "ExecutorCompletionService", True, "ExecutorCompletionService", "(Executor)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.concurrent", "ExecutorCompletionService", True, "ExecutorCompletionService", "(Executor,BlockingQueue)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.concurrent", "ExecutorCompletionService", True, "ExecutorCompletionService", "(Executor,BlockingQueue)", "", "Argument[1].Element", "Argument[this]", "taint", "df-generated"] + - ["java.util.concurrent", "ExecutorService", True, "invokeAll", "(Collection)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent", "ExecutorService", True, "invokeAll", "(Collection,long,TimeUnit)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent", "ExecutorService", True, "shutdownNow", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent", "ExecutorService", True, "submit", "(Callable)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent", "ExecutorService", True, "submit", "(Runnable,Object)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent", "ExecutorService", True, "submit", "(Runnable,Object)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent", "Executors", True, "callable", "(Runnable)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent", "Executors", True, "callable", "(Runnable,Object)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent", "Executors", True, "callable", "(Runnable,Object)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent", "Executors", True, "newCachedThreadPool", "(ThreadFactory)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent", "Executors", True, "newFixedThreadPool", "(int,ThreadFactory)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent", "Executors", True, "newScheduledThreadPool", "(int,ThreadFactory)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent", "Executors", True, "newSingleThreadExecutor", "(ThreadFactory)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent", "Executors", True, "newSingleThreadScheduledExecutor", "(ThreadFactory)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent", "Executors", True, "privilegedCallable", "(Callable)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent", "Executors", True, "privilegedCallableUsingCurrentClassLoader", "(Callable)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent", "Executors", True, "unconfigurableExecutorService", "(ExecutorService)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent", "Executors", True, "unconfigurableScheduledExecutorService", "(ScheduledExecutorService)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent", "ForkJoinPool$ForkJoinWorkerThreadFactory", True, "newThread", "(ForkJoinPool)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent", "ForkJoinPool", True, "ForkJoinPool", "(int,ForkJoinPool$ForkJoinWorkerThreadFactory,Thread$UncaughtExceptionHandler,boolean)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.util.concurrent", "ForkJoinPool", True, "ForkJoinPool", "(int,ForkJoinPool$ForkJoinWorkerThreadFactory,Thread$UncaughtExceptionHandler,boolean)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.util.concurrent", "ForkJoinPool", True, "ForkJoinPool", "(int,ForkJoinPool$ForkJoinWorkerThreadFactory,Thread$UncaughtExceptionHandler,boolean,int,int,int,Predicate,long,TimeUnit)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.util.concurrent", "ForkJoinPool", True, "ForkJoinPool", "(int,ForkJoinPool$ForkJoinWorkerThreadFactory,Thread$UncaughtExceptionHandler,boolean,int,int,int,Predicate,long,TimeUnit)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.util.concurrent", "ForkJoinPool", True, "ForkJoinPool", "(int,ForkJoinPool$ForkJoinWorkerThreadFactory,Thread$UncaughtExceptionHandler,boolean,int,int,int,Predicate,long,TimeUnit)", "", "Argument[7]", "Argument[this]", "taint", "df-generated"] + - ["java.util.concurrent", "ForkJoinPool", True, "getFactory", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent", "ForkJoinPool", True, "getUncaughtExceptionHandler", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent", "ForkJoinPool", True, "invoke", "(ForkJoinTask)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent", "ForkJoinPool", True, "submit", "(ForkJoinTask)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent", "ForkJoinTask", True, "adapt", "(Callable)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent", "ForkJoinTask", True, "adapt", "(Runnable)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent", "ForkJoinTask", True, "adapt", "(Runnable,Object)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent", "ForkJoinTask", True, "adapt", "(Runnable,Object)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent", "ForkJoinTask", True, "complete", "(Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.concurrent", "ForkJoinTask", True, "fork", "()", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.util.concurrent", "ForkJoinTask", True, "getException", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent", "ForkJoinTask", True, "invoke", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent", "ForkJoinTask", True, "invokeAll", "(Collection)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent", "ForkJoinWorkerThread", True, "getPool", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent", "FutureTask", True, "FutureTask", "(Callable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.concurrent", "FutureTask", True, "FutureTask", "(Runnable,Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.concurrent", "FutureTask", True, "FutureTask", "(Runnable,Object)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.util.concurrent", "LinkedBlockingDeque", True, "LinkedBlockingDeque", "(Collection)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["java.util.concurrent", "LinkedBlockingQueue", True, "LinkedBlockingQueue", "(Collection)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["java.util.concurrent", "Phaser", True, "Phaser", "(Phaser)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.concurrent", "Phaser", True, "Phaser", "(Phaser,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.concurrent", "Phaser", True, "getParent", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent", "Phaser", True, "getRoot", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent", "PriorityBlockingQueue", True, "PriorityBlockingQueue", "(Collection)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["java.util.concurrent", "PriorityBlockingQueue", True, "PriorityBlockingQueue", "(int,Comparator)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.util.concurrent", "PriorityBlockingQueue", True, "comparator", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent", "RejectedExecutionException", True, "RejectedExecutionException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.concurrent", "RejectedExecutionException", True, "RejectedExecutionException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.concurrent", "RejectedExecutionException", True, "RejectedExecutionException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.util.concurrent", "RejectedExecutionException", True, "RejectedExecutionException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.concurrent", "RejectedExecutionHandler", True, "rejectedExecution", "(Runnable,ThreadPoolExecutor)", "", "Argument[0]", "Argument[1]", "taint", "df-generated"] + - ["java.util.concurrent", "ScheduledExecutorService", True, "schedule", "(Callable,long,TimeUnit)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent", "ScheduledExecutorService", True, "schedule", "(Runnable,long,TimeUnit)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent", "ScheduledExecutorService", True, "scheduleAtFixedRate", "(Runnable,long,long,TimeUnit)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent", "ScheduledExecutorService", True, "scheduleWithFixedDelay", "(Runnable,long,long,TimeUnit)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent", "ScheduledThreadPoolExecutor", True, "ScheduledThreadPoolExecutor", "(int,RejectedExecutionHandler)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.util.concurrent", "ScheduledThreadPoolExecutor", True, "ScheduledThreadPoolExecutor", "(int,ThreadFactory)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.util.concurrent", "ScheduledThreadPoolExecutor", True, "ScheduledThreadPoolExecutor", "(int,ThreadFactory,RejectedExecutionHandler)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.util.concurrent", "ScheduledThreadPoolExecutor", True, "ScheduledThreadPoolExecutor", "(int,ThreadFactory,RejectedExecutionHandler)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.util.concurrent", "SubmissionPublisher", True, "SubmissionPublisher", "(Executor,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.concurrent", "SubmissionPublisher", True, "SubmissionPublisher", "(Executor,int,BiConsumer)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.concurrent", "SubmissionPublisher", True, "SubmissionPublisher", "(Executor,int,BiConsumer)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.util.concurrent", "SubmissionPublisher", True, "closeExceptionally", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.concurrent", "SubmissionPublisher", True, "getClosedException", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent", "SubmissionPublisher", True, "getExecutor", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent", "SubmissionPublisher", True, "getSubscribers", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent", "ThreadFactory", True, "newThread", "(Runnable)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent", "ThreadFactory", True, "newThread", "(Runnable)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent", "ThreadPoolExecutor", True, "ThreadPoolExecutor", "(int,int,long,TimeUnit,BlockingQueue)", "", "Argument[4].Element", "Argument[this]", "taint", "df-generated"] + - ["java.util.concurrent", "ThreadPoolExecutor", True, "ThreadPoolExecutor", "(int,int,long,TimeUnit,BlockingQueue,RejectedExecutionHandler)", "", "Argument[4].Element", "Argument[this]", "taint", "df-generated"] + - ["java.util.concurrent", "ThreadPoolExecutor", True, "ThreadPoolExecutor", "(int,int,long,TimeUnit,BlockingQueue,RejectedExecutionHandler)", "", "Argument[5]", "Argument[this]", "taint", "df-generated"] + - ["java.util.concurrent", "ThreadPoolExecutor", True, "ThreadPoolExecutor", "(int,int,long,TimeUnit,BlockingQueue,ThreadFactory)", "", "Argument[4].Element", "Argument[this]", "taint", "df-generated"] + - ["java.util.concurrent", "ThreadPoolExecutor", True, "ThreadPoolExecutor", "(int,int,long,TimeUnit,BlockingQueue,ThreadFactory)", "", "Argument[5]", "Argument[this]", "taint", "df-generated"] + - ["java.util.concurrent", "ThreadPoolExecutor", True, "ThreadPoolExecutor", "(int,int,long,TimeUnit,BlockingQueue,ThreadFactory,RejectedExecutionHandler)", "", "Argument[4].Element", "Argument[this]", "taint", "df-generated"] + - ["java.util.concurrent", "ThreadPoolExecutor", True, "ThreadPoolExecutor", "(int,int,long,TimeUnit,BlockingQueue,ThreadFactory,RejectedExecutionHandler)", "", "Argument[5]", "Argument[this]", "taint", "df-generated"] + - ["java.util.concurrent", "ThreadPoolExecutor", True, "ThreadPoolExecutor", "(int,int,long,TimeUnit,BlockingQueue,ThreadFactory,RejectedExecutionHandler)", "", "Argument[6]", "Argument[this]", "taint", "df-generated"] + - ["java.util.concurrent", "ThreadPoolExecutor", True, "getQueue", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent", "ThreadPoolExecutor", True, "getRejectedExecutionHandler", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent", "ThreadPoolExecutor", True, "getThreadFactory", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent", "ThreadPoolExecutor", True, "setRejectedExecutionHandler", "(RejectedExecutionHandler)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.concurrent", "ThreadPoolExecutor", True, "setThreadFactory", "(ThreadFactory)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.concurrent", "TimeoutException", True, "TimeoutException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["java.util.concurrent", "ArrayBlockingQueue", "ArrayBlockingQueue", "(int)", "summary", "df-generated"] + - ["java.util.concurrent", "ArrayBlockingQueue", "ArrayBlockingQueue", "(int,boolean)", "summary", "df-generated"] + - ["java.util.concurrent", "ArrayBlockingQueue", "ArrayBlockingQueue", "(int,boolean,Collection)", "summary", "df-generated"] + - ["java.util.concurrent", "CompletableFuture", "completedStage", "(Object)", "summary", "df-generated"] + - ["java.util.concurrent", "CompletableFuture", "defaultExecutor", "()", "summary", "df-generated"] + - ["java.util.concurrent", "CompletableFuture", "delayedExecutor", "(long,TimeUnit)", "summary", "df-generated"] + - ["java.util.concurrent", "CompletableFuture", "failedFuture", "(Throwable)", "summary", "df-generated"] + - ["java.util.concurrent", "CompletableFuture", "failedStage", "(Throwable)", "summary", "df-generated"] + - ["java.util.concurrent", "CompletableFuture", "getNumberOfDependents", "()", "summary", "df-generated"] + - ["java.util.concurrent", "CompletableFuture", "isCompletedExceptionally", "()", "summary", "df-generated"] + - ["java.util.concurrent", "CompletableFuture", "minimalCompletionStage", "()", "summary", "df-generated"] + - ["java.util.concurrent", "CompletableFuture", "newIncompleteFuture", "()", "summary", "df-generated"] + - ["java.util.concurrent", "CompletableFuture", "runAsync", "(Runnable)", "summary", "df-generated"] + - ["java.util.concurrent", "CompletableFuture", "runAsync", "(Runnable,Executor)", "summary", "df-generated"] + - ["java.util.concurrent", "CompletableFuture", "supplyAsync", "(Supplier)", "summary", "df-generated"] + - ["java.util.concurrent", "CompletableFuture", "supplyAsync", "(Supplier,Executor)", "summary", "df-generated"] + - ["java.util.concurrent", "ConcurrentHashMap", "ConcurrentHashMap", "(int)", "summary", "df-generated"] + - ["java.util.concurrent", "ConcurrentHashMap", "ConcurrentHashMap", "(int,float)", "summary", "df-generated"] + - ["java.util.concurrent", "ConcurrentHashMap", "ConcurrentHashMap", "(int,float,int)", "summary", "df-generated"] + - ["java.util.concurrent", "ConcurrentHashMap", "contains", "(Object)", "summary", "df-generated"] + - ["java.util.concurrent", "ConcurrentHashMap", "forEach", "(long,BiConsumer)", "summary", "df-generated"] + - ["java.util.concurrent", "ConcurrentHashMap", "forEach", "(long,BiFunction,Consumer)", "summary", "df-generated"] + - ["java.util.concurrent", "ConcurrentHashMap", "forEachEntry", "(long,Consumer)", "summary", "df-generated"] + - ["java.util.concurrent", "ConcurrentHashMap", "forEachEntry", "(long,Function,Consumer)", "summary", "df-generated"] + - ["java.util.concurrent", "ConcurrentHashMap", "forEachKey", "(long,Consumer)", "summary", "df-generated"] + - ["java.util.concurrent", "ConcurrentHashMap", "forEachKey", "(long,Function,Consumer)", "summary", "df-generated"] + - ["java.util.concurrent", "ConcurrentHashMap", "forEachValue", "(long,Consumer)", "summary", "df-generated"] + - ["java.util.concurrent", "ConcurrentHashMap", "forEachValue", "(long,Function,Consumer)", "summary", "df-generated"] + - ["java.util.concurrent", "ConcurrentHashMap", "mappingCount", "()", "summary", "df-generated"] + - ["java.util.concurrent", "ConcurrentHashMap", "newKeySet", "()", "summary", "df-generated"] + - ["java.util.concurrent", "ConcurrentHashMap", "newKeySet", "(int)", "summary", "df-generated"] + - ["java.util.concurrent", "ConcurrentHashMap", "reduce", "(long,BiFunction,BiFunction)", "summary", "df-generated"] + - ["java.util.concurrent", "ConcurrentHashMap", "reduceEntries", "(long,BiFunction)", "summary", "df-generated"] + - ["java.util.concurrent", "ConcurrentHashMap", "reduceEntries", "(long,Function,BiFunction)", "summary", "df-generated"] + - ["java.util.concurrent", "ConcurrentHashMap", "reduceEntriesToDouble", "(long,ToDoubleFunction,double,DoubleBinaryOperator)", "summary", "df-generated"] + - ["java.util.concurrent", "ConcurrentHashMap", "reduceEntriesToInt", "(long,ToIntFunction,int,IntBinaryOperator)", "summary", "df-generated"] + - ["java.util.concurrent", "ConcurrentHashMap", "reduceEntriesToLong", "(long,ToLongFunction,long,LongBinaryOperator)", "summary", "df-generated"] + - ["java.util.concurrent", "ConcurrentHashMap", "reduceKeys", "(long,BiFunction)", "summary", "df-generated"] + - ["java.util.concurrent", "ConcurrentHashMap", "reduceKeys", "(long,Function,BiFunction)", "summary", "df-generated"] + - ["java.util.concurrent", "ConcurrentHashMap", "reduceKeysToDouble", "(long,ToDoubleFunction,double,DoubleBinaryOperator)", "summary", "df-generated"] + - ["java.util.concurrent", "ConcurrentHashMap", "reduceKeysToInt", "(long,ToIntFunction,int,IntBinaryOperator)", "summary", "df-generated"] + - ["java.util.concurrent", "ConcurrentHashMap", "reduceKeysToLong", "(long,ToLongFunction,long,LongBinaryOperator)", "summary", "df-generated"] + - ["java.util.concurrent", "ConcurrentHashMap", "reduceToDouble", "(long,ToDoubleBiFunction,double,DoubleBinaryOperator)", "summary", "df-generated"] + - ["java.util.concurrent", "ConcurrentHashMap", "reduceToInt", "(long,ToIntBiFunction,int,IntBinaryOperator)", "summary", "df-generated"] + - ["java.util.concurrent", "ConcurrentHashMap", "reduceToLong", "(long,ToLongBiFunction,long,LongBinaryOperator)", "summary", "df-generated"] + - ["java.util.concurrent", "ConcurrentHashMap", "reduceValues", "(long,BiFunction)", "summary", "df-generated"] + - ["java.util.concurrent", "ConcurrentHashMap", "reduceValues", "(long,Function,BiFunction)", "summary", "df-generated"] + - ["java.util.concurrent", "ConcurrentHashMap", "reduceValuesToDouble", "(long,ToDoubleFunction,double,DoubleBinaryOperator)", "summary", "df-generated"] + - ["java.util.concurrent", "ConcurrentHashMap", "reduceValuesToInt", "(long,ToIntFunction,int,IntBinaryOperator)", "summary", "df-generated"] + - ["java.util.concurrent", "ConcurrentHashMap", "reduceValuesToLong", "(long,ToLongFunction,long,LongBinaryOperator)", "summary", "df-generated"] + - ["java.util.concurrent", "ConcurrentHashMap", "search", "(long,BiFunction)", "summary", "df-generated"] + - ["java.util.concurrent", "ConcurrentHashMap", "searchEntries", "(long,Function)", "summary", "df-generated"] + - ["java.util.concurrent", "ConcurrentHashMap", "searchKeys", "(long,Function)", "summary", "df-generated"] + - ["java.util.concurrent", "ConcurrentHashMap", "searchValues", "(long,Function)", "summary", "df-generated"] + - ["java.util.concurrent", "ConcurrentLinkedDeque", "ConcurrentLinkedDeque", "(Collection)", "summary", "df-generated"] + - ["java.util.concurrent", "ConcurrentLinkedQueue", "ConcurrentLinkedQueue", "(Collection)", "summary", "df-generated"] + - ["java.util.concurrent", "ConcurrentSkipListMap", "ConcurrentSkipListMap", "(SortedMap)", "summary", "df-generated"] + - ["java.util.concurrent", "CopyOnWriteArrayList", "indexOf", "(Object,int)", "summary", "df-generated"] + - ["java.util.concurrent", "CopyOnWriteArrayList", "lastIndexOf", "(Object,int)", "summary", "df-generated"] + - ["java.util.concurrent", "CountedCompleter", "addToPendingCount", "(int)", "summary", "df-generated"] + - ["java.util.concurrent", "CountedCompleter", "compareAndSetPendingCount", "(int,int)", "summary", "df-generated"] + - ["java.util.concurrent", "CountedCompleter", "compute", "()", "summary", "df-generated"] + - ["java.util.concurrent", "CountedCompleter", "decrementPendingCountUnlessZero", "()", "summary", "df-generated"] + - ["java.util.concurrent", "CountedCompleter", "getPendingCount", "()", "summary", "df-generated"] + - ["java.util.concurrent", "CountedCompleter", "helpComplete", "(int)", "summary", "df-generated"] + - ["java.util.concurrent", "CountedCompleter", "onCompletion", "(CountedCompleter)", "summary", "df-generated"] + - ["java.util.concurrent", "CountedCompleter", "onExceptionalCompletion", "(Throwable,CountedCompleter)", "summary", "df-generated"] + - ["java.util.concurrent", "CountedCompleter", "propagateCompletion", "()", "summary", "df-generated"] + - ["java.util.concurrent", "CountedCompleter", "quietlyCompleteRoot", "()", "summary", "df-generated"] + - ["java.util.concurrent", "CountedCompleter", "setPendingCount", "(int)", "summary", "df-generated"] + - ["java.util.concurrent", "CountedCompleter", "tryComplete", "()", "summary", "df-generated"] + - ["java.util.concurrent", "CyclicBarrier", "CyclicBarrier", "(int)", "summary", "df-generated"] + - ["java.util.concurrent", "CyclicBarrier", "await", "()", "summary", "df-generated"] + - ["java.util.concurrent", "CyclicBarrier", "await", "(long,TimeUnit)", "summary", "df-generated"] + - ["java.util.concurrent", "CyclicBarrier", "getNumberWaiting", "()", "summary", "df-generated"] + - ["java.util.concurrent", "CyclicBarrier", "getParties", "()", "summary", "df-generated"] + - ["java.util.concurrent", "CyclicBarrier", "isBroken", "()", "summary", "df-generated"] + - ["java.util.concurrent", "CyclicBarrier", "reset", "()", "summary", "df-generated"] + - ["java.util.concurrent", "Delayed", "getDelay", "(TimeUnit)", "summary", "df-generated"] + - ["java.util.concurrent", "ExecutorService", "awaitTermination", "(long,TimeUnit)", "summary", "df-generated"] + - ["java.util.concurrent", "ExecutorService", "invokeAny", "(Collection)", "summary", "df-generated"] + - ["java.util.concurrent", "ExecutorService", "invokeAny", "(Collection,long,TimeUnit)", "summary", "df-generated"] + - ["java.util.concurrent", "ExecutorService", "isShutdown", "()", "summary", "df-generated"] + - ["java.util.concurrent", "ExecutorService", "isTerminated", "()", "summary", "df-generated"] + - ["java.util.concurrent", "ExecutorService", "shutdown", "()", "summary", "df-generated"] + - ["java.util.concurrent", "Executors", "callable", "(PrivilegedAction)", "summary", "df-generated"] + - ["java.util.concurrent", "Executors", "callable", "(PrivilegedExceptionAction)", "summary", "df-generated"] + - ["java.util.concurrent", "Executors", "defaultThreadFactory", "()", "summary", "df-generated"] + - ["java.util.concurrent", "Executors", "newCachedThreadPool", "()", "summary", "df-generated"] + - ["java.util.concurrent", "Executors", "newFixedThreadPool", "(int)", "summary", "df-generated"] + - ["java.util.concurrent", "Executors", "newScheduledThreadPool", "(int)", "summary", "df-generated"] + - ["java.util.concurrent", "Executors", "newSingleThreadExecutor", "()", "summary", "df-generated"] + - ["java.util.concurrent", "Executors", "newSingleThreadScheduledExecutor", "()", "summary", "df-generated"] + - ["java.util.concurrent", "Executors", "newWorkStealingPool", "()", "summary", "df-generated"] + - ["java.util.concurrent", "Executors", "newWorkStealingPool", "(int)", "summary", "df-generated"] + - ["java.util.concurrent", "Executors", "privilegedThreadFactory", "()", "summary", "df-generated"] + - ["java.util.concurrent", "Flow$Subscription", "cancel", "()", "summary", "df-generated"] + - ["java.util.concurrent", "Flow$Subscription", "request", "(long)", "summary", "df-generated"] + - ["java.util.concurrent", "Flow", "defaultBufferSize", "()", "summary", "df-generated"] + - ["java.util.concurrent", "ForkJoinPool$ManagedBlocker", "block", "()", "summary", "df-generated"] + - ["java.util.concurrent", "ForkJoinPool$ManagedBlocker", "isReleasable", "()", "summary", "df-generated"] + - ["java.util.concurrent", "ForkJoinPool", "ForkJoinPool", "(int)", "summary", "df-generated"] + - ["java.util.concurrent", "ForkJoinPool", "awaitQuiescence", "(long,TimeUnit)", "summary", "df-generated"] + - ["java.util.concurrent", "ForkJoinPool", "commonPool", "()", "summary", "df-generated"] + - ["java.util.concurrent", "ForkJoinPool", "execute", "(ForkJoinTask)", "summary", "df-generated"] + - ["java.util.concurrent", "ForkJoinPool", "getActiveThreadCount", "()", "summary", "df-generated"] + - ["java.util.concurrent", "ForkJoinPool", "getAsyncMode", "()", "summary", "df-generated"] + - ["java.util.concurrent", "ForkJoinPool", "getCommonPoolParallelism", "()", "summary", "df-generated"] + - ["java.util.concurrent", "ForkJoinPool", "getParallelism", "()", "summary", "df-generated"] + - ["java.util.concurrent", "ForkJoinPool", "getPoolSize", "()", "summary", "df-generated"] + - ["java.util.concurrent", "ForkJoinPool", "getQueuedSubmissionCount", "()", "summary", "df-generated"] + - ["java.util.concurrent", "ForkJoinPool", "getQueuedTaskCount", "()", "summary", "df-generated"] + - ["java.util.concurrent", "ForkJoinPool", "getRunningThreadCount", "()", "summary", "df-generated"] + - ["java.util.concurrent", "ForkJoinPool", "getStealCount", "()", "summary", "df-generated"] + - ["java.util.concurrent", "ForkJoinPool", "hasQueuedSubmissions", "()", "summary", "df-generated"] + - ["java.util.concurrent", "ForkJoinPool", "isQuiescent", "()", "summary", "df-generated"] + - ["java.util.concurrent", "ForkJoinPool", "isTerminating", "()", "summary", "df-generated"] + - ["java.util.concurrent", "ForkJoinPool", "managedBlock", "(ForkJoinPool$ManagedBlocker)", "summary", "df-generated"] + - ["java.util.concurrent", "ForkJoinTask", "compareAndSetForkJoinTaskTag", "(short,short)", "summary", "df-generated"] + - ["java.util.concurrent", "ForkJoinTask", "completeExceptionally", "(Throwable)", "summary", "df-generated"] + - ["java.util.concurrent", "ForkJoinTask", "getForkJoinTaskTag", "()", "summary", "df-generated"] + - ["java.util.concurrent", "ForkJoinTask", "getPool", "()", "summary", "df-generated"] + - ["java.util.concurrent", "ForkJoinTask", "getQueuedTaskCount", "()", "summary", "df-generated"] + - ["java.util.concurrent", "ForkJoinTask", "getRawResult", "()", "summary", "df-generated"] + - ["java.util.concurrent", "ForkJoinTask", "getSurplusQueuedTaskCount", "()", "summary", "df-generated"] + - ["java.util.concurrent", "ForkJoinTask", "helpQuiesce", "()", "summary", "df-generated"] + - ["java.util.concurrent", "ForkJoinTask", "inForkJoinPool", "()", "summary", "df-generated"] + - ["java.util.concurrent", "ForkJoinTask", "invokeAll", "(ForkJoinTask,ForkJoinTask)", "summary", "df-generated"] + - ["java.util.concurrent", "ForkJoinTask", "invokeAll", "(ForkJoinTask[])", "summary", "df-generated"] + - ["java.util.concurrent", "ForkJoinTask", "isCompletedAbnormally", "()", "summary", "df-generated"] + - ["java.util.concurrent", "ForkJoinTask", "isCompletedNormally", "()", "summary", "df-generated"] + - ["java.util.concurrent", "ForkJoinTask", "join", "()", "summary", "df-generated"] + - ["java.util.concurrent", "ForkJoinTask", "quietlyComplete", "()", "summary", "df-generated"] + - ["java.util.concurrent", "ForkJoinTask", "quietlyInvoke", "()", "summary", "df-generated"] + - ["java.util.concurrent", "ForkJoinTask", "quietlyJoin", "()", "summary", "df-generated"] + - ["java.util.concurrent", "ForkJoinTask", "reinitialize", "()", "summary", "df-generated"] + - ["java.util.concurrent", "ForkJoinTask", "setForkJoinTaskTag", "(short)", "summary", "df-generated"] + - ["java.util.concurrent", "ForkJoinTask", "tryUnfork", "()", "summary", "df-generated"] + - ["java.util.concurrent", "ForkJoinWorkerThread", "getPoolIndex", "()", "summary", "df-generated"] + - ["java.util.concurrent", "LinkedBlockingDeque", "LinkedBlockingDeque", "(int)", "summary", "df-generated"] + - ["java.util.concurrent", "LinkedBlockingQueue", "LinkedBlockingQueue", "(int)", "summary", "df-generated"] + - ["java.util.concurrent", "LinkedTransferQueue", "LinkedTransferQueue", "(Collection)", "summary", "df-generated"] + - ["java.util.concurrent", "Phaser", "Phaser", "(int)", "summary", "df-generated"] + - ["java.util.concurrent", "Phaser", "arrive", "()", "summary", "df-generated"] + - ["java.util.concurrent", "Phaser", "arriveAndAwaitAdvance", "()", "summary", "df-generated"] + - ["java.util.concurrent", "Phaser", "arriveAndDeregister", "()", "summary", "df-generated"] + - ["java.util.concurrent", "Phaser", "awaitAdvance", "(int)", "summary", "df-generated"] + - ["java.util.concurrent", "Phaser", "awaitAdvanceInterruptibly", "(int)", "summary", "df-generated"] + - ["java.util.concurrent", "Phaser", "awaitAdvanceInterruptibly", "(int,long,TimeUnit)", "summary", "df-generated"] + - ["java.util.concurrent", "Phaser", "bulkRegister", "(int)", "summary", "df-generated"] + - ["java.util.concurrent", "Phaser", "forceTermination", "()", "summary", "df-generated"] + - ["java.util.concurrent", "Phaser", "getArrivedParties", "()", "summary", "df-generated"] + - ["java.util.concurrent", "Phaser", "getPhase", "()", "summary", "df-generated"] + - ["java.util.concurrent", "Phaser", "getRegisteredParties", "()", "summary", "df-generated"] + - ["java.util.concurrent", "Phaser", "getUnarrivedParties", "()", "summary", "df-generated"] + - ["java.util.concurrent", "Phaser", "isTerminated", "()", "summary", "df-generated"] + - ["java.util.concurrent", "Phaser", "register", "()", "summary", "df-generated"] + - ["java.util.concurrent", "PriorityBlockingQueue", "PriorityBlockingQueue", "(int)", "summary", "df-generated"] + - ["java.util.concurrent", "ScheduledThreadPoolExecutor", "ScheduledThreadPoolExecutor", "(int)", "summary", "df-generated"] + - ["java.util.concurrent", "ScheduledThreadPoolExecutor", "getContinueExistingPeriodicTasksAfterShutdownPolicy", "()", "summary", "df-generated"] + - ["java.util.concurrent", "ScheduledThreadPoolExecutor", "getExecuteExistingDelayedTasksAfterShutdownPolicy", "()", "summary", "df-generated"] + - ["java.util.concurrent", "ScheduledThreadPoolExecutor", "getRemoveOnCancelPolicy", "()", "summary", "df-generated"] + - ["java.util.concurrent", "ScheduledThreadPoolExecutor", "setContinueExistingPeriodicTasksAfterShutdownPolicy", "(boolean)", "summary", "df-generated"] + - ["java.util.concurrent", "ScheduledThreadPoolExecutor", "setExecuteExistingDelayedTasksAfterShutdownPolicy", "(boolean)", "summary", "df-generated"] + - ["java.util.concurrent", "ScheduledThreadPoolExecutor", "setRemoveOnCancelPolicy", "(boolean)", "summary", "df-generated"] + - ["java.util.concurrent", "Semaphore", "Semaphore", "(int)", "summary", "df-generated"] + - ["java.util.concurrent", "Semaphore", "Semaphore", "(int,boolean)", "summary", "df-generated"] + - ["java.util.concurrent", "Semaphore", "acquire", "()", "summary", "df-generated"] + - ["java.util.concurrent", "Semaphore", "acquire", "(int)", "summary", "df-generated"] + - ["java.util.concurrent", "Semaphore", "acquireUninterruptibly", "()", "summary", "df-generated"] + - ["java.util.concurrent", "Semaphore", "acquireUninterruptibly", "(int)", "summary", "df-generated"] + - ["java.util.concurrent", "Semaphore", "availablePermits", "()", "summary", "df-generated"] + - ["java.util.concurrent", "Semaphore", "drainPermits", "()", "summary", "df-generated"] + - ["java.util.concurrent", "Semaphore", "getQueueLength", "()", "summary", "df-generated"] + - ["java.util.concurrent", "Semaphore", "hasQueuedThreads", "()", "summary", "df-generated"] + - ["java.util.concurrent", "Semaphore", "isFair", "()", "summary", "df-generated"] + - ["java.util.concurrent", "Semaphore", "release", "()", "summary", "df-generated"] + - ["java.util.concurrent", "Semaphore", "release", "(int)", "summary", "df-generated"] + - ["java.util.concurrent", "Semaphore", "tryAcquire", "()", "summary", "df-generated"] + - ["java.util.concurrent", "Semaphore", "tryAcquire", "(int)", "summary", "df-generated"] + - ["java.util.concurrent", "Semaphore", "tryAcquire", "(int,long,TimeUnit)", "summary", "df-generated"] + - ["java.util.concurrent", "Semaphore", "tryAcquire", "(long,TimeUnit)", "summary", "df-generated"] + - ["java.util.concurrent", "SubmissionPublisher", "consume", "(Consumer)", "summary", "df-generated"] + - ["java.util.concurrent", "SubmissionPublisher", "estimateMaximumLag", "()", "summary", "df-generated"] + - ["java.util.concurrent", "SubmissionPublisher", "estimateMinimumDemand", "()", "summary", "df-generated"] + - ["java.util.concurrent", "SubmissionPublisher", "getMaxBufferCapacity", "()", "summary", "df-generated"] + - ["java.util.concurrent", "SubmissionPublisher", "getNumberOfSubscribers", "()", "summary", "df-generated"] + - ["java.util.concurrent", "SubmissionPublisher", "hasSubscribers", "()", "summary", "df-generated"] + - ["java.util.concurrent", "SubmissionPublisher", "isClosed", "()", "summary", "df-generated"] + - ["java.util.concurrent", "SubmissionPublisher", "isSubscribed", "(Flow$Subscriber)", "summary", "df-generated"] + - ["java.util.concurrent", "SubmissionPublisher", "offer", "(Object,BiPredicate)", "summary", "df-generated"] + - ["java.util.concurrent", "SubmissionPublisher", "offer", "(Object,long,TimeUnit,BiPredicate)", "summary", "df-generated"] + - ["java.util.concurrent", "SubmissionPublisher", "submit", "(Object)", "summary", "df-generated"] + - ["java.util.concurrent", "SynchronousQueue", "SynchronousQueue", "(boolean)", "summary", "df-generated"] + - ["java.util.concurrent", "ThreadLocalRandom", "current", "()", "summary", "df-generated"] + - ["java.util.concurrent", "ThreadPoolExecutor", "allowCoreThreadTimeOut", "(boolean)", "summary", "df-generated"] + - ["java.util.concurrent", "ThreadPoolExecutor", "allowsCoreThreadTimeOut", "()", "summary", "df-generated"] + - ["java.util.concurrent", "ThreadPoolExecutor", "getActiveCount", "()", "summary", "df-generated"] + - ["java.util.concurrent", "ThreadPoolExecutor", "getCompletedTaskCount", "()", "summary", "df-generated"] + - ["java.util.concurrent", "ThreadPoolExecutor", "getCorePoolSize", "()", "summary", "df-generated"] + - ["java.util.concurrent", "ThreadPoolExecutor", "getKeepAliveTime", "(TimeUnit)", "summary", "df-generated"] + - ["java.util.concurrent", "ThreadPoolExecutor", "getLargestPoolSize", "()", "summary", "df-generated"] + - ["java.util.concurrent", "ThreadPoolExecutor", "getMaximumPoolSize", "()", "summary", "df-generated"] + - ["java.util.concurrent", "ThreadPoolExecutor", "getPoolSize", "()", "summary", "df-generated"] + - ["java.util.concurrent", "ThreadPoolExecutor", "getTaskCount", "()", "summary", "df-generated"] + - ["java.util.concurrent", "ThreadPoolExecutor", "isTerminating", "()", "summary", "df-generated"] + - ["java.util.concurrent", "ThreadPoolExecutor", "prestartAllCoreThreads", "()", "summary", "df-generated"] + - ["java.util.concurrent", "ThreadPoolExecutor", "prestartCoreThread", "()", "summary", "df-generated"] + - ["java.util.concurrent", "ThreadPoolExecutor", "purge", "()", "summary", "df-generated"] + - ["java.util.concurrent", "ThreadPoolExecutor", "remove", "(Runnable)", "summary", "df-generated"] + - ["java.util.concurrent", "ThreadPoolExecutor", "setCorePoolSize", "(int)", "summary", "df-generated"] + - ["java.util.concurrent", "ThreadPoolExecutor", "setKeepAliveTime", "(long,TimeUnit)", "summary", "df-generated"] + - ["java.util.concurrent", "ThreadPoolExecutor", "setMaximumPoolSize", "(int)", "summary", "df-generated"] + - ["java.util.concurrent", "TimeUnit", "convert", "(Duration)", "summary", "df-generated"] + - ["java.util.concurrent", "TimeUnit", "convert", "(long,TimeUnit)", "summary", "df-generated"] + - ["java.util.concurrent", "TimeUnit", "of", "(ChronoUnit)", "summary", "df-generated"] + - ["java.util.concurrent", "TimeUnit", "sleep", "(long)", "summary", "df-generated"] + - ["java.util.concurrent", "TimeUnit", "timedJoin", "(Thread,long)", "summary", "df-generated"] + - ["java.util.concurrent", "TimeUnit", "timedWait", "(Object,long)", "summary", "df-generated"] + - ["java.util.concurrent", "TimeUnit", "toChronoUnit", "()", "summary", "df-generated"] + - ["java.util.concurrent", "TimeUnit", "toDays", "(long)", "summary", "df-generated"] + - ["java.util.concurrent", "TimeUnit", "toHours", "(long)", "summary", "df-generated"] + - ["java.util.concurrent", "TimeUnit", "toMicros", "(long)", "summary", "df-generated"] + - ["java.util.concurrent", "TimeUnit", "toMinutes", "(long)", "summary", "df-generated"] + - ["java.util.concurrent", "TimeUnit", "toNanos", "(long)", "summary", "df-generated"] + - ["java.util.concurrent", "TimeUnit", "toSeconds", "(long)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/java.util.function.model.yml b/java/ql/lib/ext/generated/java.util.function.model.yml new file mode 100644 index 00000000000..5080eeeacc7 --- /dev/null +++ b/java/ql/lib/ext/generated/java.util.function.model.yml @@ -0,0 +1,46 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["java.util.function", "BiConsumer", "andThen", "(BiConsumer)", "summary", "df-generated"] + - ["java.util.function", "BiFunction", "andThen", "(Function)", "summary", "df-generated"] + - ["java.util.function", "BiPredicate", "and", "(BiPredicate)", "summary", "df-generated"] + - ["java.util.function", "BiPredicate", "negate", "()", "summary", "df-generated"] + - ["java.util.function", "BiPredicate", "or", "(BiPredicate)", "summary", "df-generated"] + - ["java.util.function", "BinaryOperator", "maxBy", "(Comparator)", "summary", "df-generated"] + - ["java.util.function", "BinaryOperator", "minBy", "(Comparator)", "summary", "df-generated"] + - ["java.util.function", "Consumer", "andThen", "(Consumer)", "summary", "df-generated"] + - ["java.util.function", "DoubleConsumer", "accept", "(double)", "summary", "df-generated"] + - ["java.util.function", "DoubleConsumer", "andThen", "(DoubleConsumer)", "summary", "df-generated"] + - ["java.util.function", "DoublePredicate", "and", "(DoublePredicate)", "summary", "df-generated"] + - ["java.util.function", "DoublePredicate", "negate", "()", "summary", "df-generated"] + - ["java.util.function", "DoublePredicate", "or", "(DoublePredicate)", "summary", "df-generated"] + - ["java.util.function", "DoubleUnaryOperator", "andThen", "(DoubleUnaryOperator)", "summary", "df-generated"] + - ["java.util.function", "DoubleUnaryOperator", "compose", "(DoubleUnaryOperator)", "summary", "df-generated"] + - ["java.util.function", "DoubleUnaryOperator", "identity", "()", "summary", "df-generated"] + - ["java.util.function", "Function", "andThen", "(Function)", "summary", "df-generated"] + - ["java.util.function", "Function", "compose", "(Function)", "summary", "df-generated"] + - ["java.util.function", "IntConsumer", "accept", "(int)", "summary", "df-generated"] + - ["java.util.function", "IntConsumer", "andThen", "(IntConsumer)", "summary", "df-generated"] + - ["java.util.function", "IntPredicate", "and", "(IntPredicate)", "summary", "df-generated"] + - ["java.util.function", "IntPredicate", "negate", "()", "summary", "df-generated"] + - ["java.util.function", "IntPredicate", "or", "(IntPredicate)", "summary", "df-generated"] + - ["java.util.function", "IntUnaryOperator", "andThen", "(IntUnaryOperator)", "summary", "df-generated"] + - ["java.util.function", "IntUnaryOperator", "compose", "(IntUnaryOperator)", "summary", "df-generated"] + - ["java.util.function", "IntUnaryOperator", "identity", "()", "summary", "df-generated"] + - ["java.util.function", "LongConsumer", "accept", "(long)", "summary", "df-generated"] + - ["java.util.function", "LongConsumer", "andThen", "(LongConsumer)", "summary", "df-generated"] + - ["java.util.function", "LongPredicate", "and", "(LongPredicate)", "summary", "df-generated"] + - ["java.util.function", "LongPredicate", "negate", "()", "summary", "df-generated"] + - ["java.util.function", "LongPredicate", "or", "(LongPredicate)", "summary", "df-generated"] + - ["java.util.function", "LongUnaryOperator", "andThen", "(LongUnaryOperator)", "summary", "df-generated"] + - ["java.util.function", "LongUnaryOperator", "compose", "(LongUnaryOperator)", "summary", "df-generated"] + - ["java.util.function", "LongUnaryOperator", "identity", "()", "summary", "df-generated"] + - ["java.util.function", "Predicate", "and", "(Predicate)", "summary", "df-generated"] + - ["java.util.function", "Predicate", "isEqual", "(Object)", "summary", "df-generated"] + - ["java.util.function", "Predicate", "negate", "()", "summary", "df-generated"] + - ["java.util.function", "Predicate", "not", "(Predicate)", "summary", "df-generated"] + - ["java.util.function", "Predicate", "or", "(Predicate)", "summary", "df-generated"] + - ["java.util.function", "UnaryOperator", "identity", "()", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/java.util.jar.model.yml b/java/ql/lib/ext/generated/java.util.jar.model.yml new file mode 100644 index 00000000000..9b4df579bd0 --- /dev/null +++ b/java/ql/lib/ext/generated/java.util.jar.model.yml @@ -0,0 +1,54 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["java.util.jar", "Attributes$Name", True, "Name", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.jar", "Attributes", True, "Attributes", "(Attributes)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["java.util.jar", "Attributes", True, "getValue", "(Attributes$Name)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.jar", "Attributes", True, "getValue", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.jar", "Attributes", True, "putValue", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.jar", "Attributes", True, "putValue", "(String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.util.jar", "Attributes", True, "putValue", "(String,String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.jar", "JarEntry", True, "JarEntry", "(JarEntry)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.jar", "JarEntry", True, "JarEntry", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.jar", "JarEntry", True, "JarEntry", "(ZipEntry)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.jar", "JarEntry", True, "getAttributes", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.jar", "JarEntry", True, "getCertificates", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.jar", "JarEntry", True, "getCodeSigners", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.jar", "JarEntry", True, "getRealName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.jar", "JarException", True, "JarException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.jar", "JarFile", True, "JarFile", "(File)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.jar", "JarFile", True, "JarFile", "(File,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.jar", "JarFile", True, "JarFile", "(File,boolean,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.jar", "JarFile", True, "JarFile", "(File,boolean,int,Runtime$Version)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.jar", "JarFile", True, "JarFile", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.jar", "JarFile", True, "JarFile", "(String,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.jar", "JarFile", True, "getJarEntry", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.jar", "JarFile", True, "getJarEntry", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util.jar", "JarFile", True, "getManifest", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.jar", "JarFile", True, "getVersion", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.jar", "JarInputStream", True, "JarInputStream", "(InputStream)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.jar", "JarInputStream", True, "JarInputStream", "(InputStream,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.jar", "JarInputStream", True, "getManifest", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.jar", "JarInputStream", True, "getNextJarEntry", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.jar", "JarOutputStream", True, "JarOutputStream", "(OutputStream)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.jar", "JarOutputStream", True, "JarOutputStream", "(OutputStream,Manifest)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.jar", "Manifest", True, "Manifest", "(Manifest)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.jar", "Manifest", True, "getAttributes", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.jar", "Manifest", True, "getEntries", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.jar", "Manifest", True, "getMainAttributes", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["java.util.jar", "Attributes", "Attributes", "(int)", "summary", "df-generated"] + - ["java.util.jar", "JarFile", "baseVersion", "()", "summary", "df-generated"] + - ["java.util.jar", "JarFile", "isMultiRelease", "()", "summary", "df-generated"] + - ["java.util.jar", "JarFile", "runtimeVersion", "()", "summary", "df-generated"] + - ["java.util.jar", "JarFile", "versionedStream", "()", "summary", "df-generated"] + - ["java.util.jar", "Manifest", "Manifest", "(InputStream)", "summary", "df-generated"] + - ["java.util.jar", "Manifest", "clear", "()", "summary", "df-generated"] + - ["java.util.jar", "Manifest", "read", "(InputStream)", "summary", "df-generated"] + - ["java.util.jar", "Manifest", "write", "(OutputStream)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/java.util.logging.model.yml b/java/ql/lib/ext/generated/java.util.logging.model.yml new file mode 100644 index 00000000000..5ca7ed9013a --- /dev/null +++ b/java/ql/lib/ext/generated/java.util.logging.model.yml @@ -0,0 +1,153 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["java.util.logging", "ErrorManager", True, "error", "(String,Exception,int)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.util.logging", "FileHandler", True, "FileHandler", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.logging", "FileHandler", True, "FileHandler", "(String,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.logging", "FileHandler", True, "FileHandler", "(String,int,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.logging", "FileHandler", True, "FileHandler", "(String,int,int,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.logging", "FileHandler", True, "FileHandler", "(String,long,int,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.logging", "Formatter", True, "format", "(LogRecord)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util.logging", "Formatter", True, "format", "(LogRecord)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.logging", "Formatter", True, "formatMessage", "(LogRecord)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util.logging", "Formatter", True, "getHead", "(Handler)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util.logging", "Handler", True, "getEncoding", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.logging", "Handler", True, "getErrorManager", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.logging", "Handler", True, "getFilter", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.logging", "Handler", True, "getFormatter", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.logging", "Handler", True, "getLevel", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.logging", "Handler", True, "publish", "(LogRecord)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.logging", "Handler", True, "setEncoding", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.logging", "Handler", True, "setErrorManager", "(ErrorManager)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.logging", "Handler", True, "setFilter", "(Filter)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.logging", "Handler", True, "setFormatter", "(Formatter)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.logging", "Handler", True, "setLevel", "(Level)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.logging", "Level", True, "getLocalizedName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.logging", "Level", True, "getName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.logging", "Level", True, "getResourceBundleName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.logging", "LogManager", True, "addConfigurationListener", "(Runnable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.logging", "LogManager", True, "addConfigurationListener", "(Runnable)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.util.logging", "LogManager", True, "getLoggerNames", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.logging", "LogManager", True, "getProperty", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.logging", "LogRecord", True, "getInstant", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.logging", "LogRecord", True, "getLevel", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.logging", "LogRecord", True, "getLoggerName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.logging", "LogRecord", True, "getMessage", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.logging", "LogRecord", True, "getParameters", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.logging", "LogRecord", True, "getResourceBundleName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.logging", "LogRecord", True, "getSourceClassName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.logging", "LogRecord", True, "getSourceMethodName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.logging", "LogRecord", True, "getThrown", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.logging", "LogRecord", True, "setInstant", "(Instant)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.logging", "LogRecord", True, "setLevel", "(Level)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.logging", "LogRecord", True, "setLoggerName", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.logging", "LogRecord", True, "setLongThreadID", "(long)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.util.logging", "LogRecord", True, "setMessage", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.logging", "LogRecord", True, "setResourceBundle", "(ResourceBundle)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.logging", "LogRecord", True, "setResourceBundleName", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.logging", "LogRecord", True, "setSourceClassName", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.logging", "LogRecord", True, "setSourceMethodName", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.logging", "LogRecord", True, "setThrown", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.logging", "Logger", True, "getAnonymousLogger", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util.logging", "Logger", True, "getFilter", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.logging", "Logger", True, "getHandlers", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.logging", "Logger", True, "getLevel", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.logging", "Logger", True, "getLogger", "(String,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util.logging", "Logger", True, "getLogger", "(String,String)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.util.logging", "Logger", True, "getParent", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.logging", "Logger", True, "getResourceBundle", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.logging", "Logger", True, "getResourceBundleName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.logging", "Logger", True, "logrb", "(Level,String,String,String,String)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["java.util.logging", "Logger", True, "logrb", "(Level,String,String,String,String,Object)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["java.util.logging", "Logger", True, "logrb", "(Level,String,String,String,String,Object[])", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["java.util.logging", "Logger", True, "logrb", "(Level,String,String,String,String,Throwable)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["java.util.logging", "Logger", True, "setFilter", "(Filter)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.logging", "Logger", True, "setLevel", "(Level)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.logging", "Logger", True, "setParent", "(Logger)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.logging", "Logger", True, "setResourceBundle", "(ResourceBundle)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.logging", "LoggingPermission", False, "LoggingPermission", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.logging", "MemoryHandler", True, "MemoryHandler", "(Handler,int,Level)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.logging", "MemoryHandler", True, "MemoryHandler", "(Handler,int,Level)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.util.logging", "MemoryHandler", True, "getPushLevel", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.logging", "MemoryHandler", True, "setPushLevel", "(Level)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.logging", "SocketHandler", True, "SocketHandler", "(String,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["java.util.logging", "Formatter", "getTail", "(Handler)", "summary", "df-generated"] + - ["java.util.logging", "Handler", "close", "()", "summary", "df-generated"] + - ["java.util.logging", "Handler", "flush", "()", "summary", "df-generated"] + - ["java.util.logging", "Handler", "isLoggable", "(LogRecord)", "summary", "df-generated"] + - ["java.util.logging", "Level", "intValue", "()", "summary", "df-generated"] + - ["java.util.logging", "Level", "parse", "(String)", "summary", "df-generated"] + - ["java.util.logging", "LogManager", "addLogger", "(Logger)", "summary", "df-generated"] + - ["java.util.logging", "LogManager", "checkAccess", "()", "summary", "df-generated"] + - ["java.util.logging", "LogManager", "getLogManager", "()", "summary", "df-generated"] + - ["java.util.logging", "LogManager", "getLogger", "(String)", "summary", "df-generated"] + - ["java.util.logging", "LogManager", "getLoggingMXBean", "()", "summary", "df-generated"] + - ["java.util.logging", "LogManager", "readConfiguration", "()", "summary", "df-generated"] + - ["java.util.logging", "LogManager", "readConfiguration", "(InputStream)", "summary", "df-generated"] + - ["java.util.logging", "LogManager", "removeConfigurationListener", "(Runnable)", "summary", "df-generated"] + - ["java.util.logging", "LogManager", "reset", "()", "summary", "df-generated"] + - ["java.util.logging", "LogManager", "updateConfiguration", "(Function)", "summary", "df-generated"] + - ["java.util.logging", "LogManager", "updateConfiguration", "(InputStream,Function)", "summary", "df-generated"] + - ["java.util.logging", "LogRecord", "getLongThreadID", "()", "summary", "df-generated"] + - ["java.util.logging", "LogRecord", "getMillis", "()", "summary", "df-generated"] + - ["java.util.logging", "LogRecord", "getSequenceNumber", "()", "summary", "df-generated"] + - ["java.util.logging", "LogRecord", "getThreadID", "()", "summary", "df-generated"] + - ["java.util.logging", "LogRecord", "setMillis", "(long)", "summary", "df-generated"] + - ["java.util.logging", "LogRecord", "setSequenceNumber", "(long)", "summary", "df-generated"] + - ["java.util.logging", "LogRecord", "setThreadID", "(int)", "summary", "df-generated"] + - ["java.util.logging", "Logger", "addHandler", "(Handler)", "summary", "df-generated"] + - ["java.util.logging", "Logger", "config", "(String)", "summary", "df-generated"] + - ["java.util.logging", "Logger", "config", "(Supplier)", "summary", "df-generated"] + - ["java.util.logging", "Logger", "entering", "(String,String)", "summary", "df-generated"] + - ["java.util.logging", "Logger", "entering", "(String,String,Object)", "summary", "df-generated"] + - ["java.util.logging", "Logger", "entering", "(String,String,Object[])", "summary", "df-generated"] + - ["java.util.logging", "Logger", "exiting", "(String,String)", "summary", "df-generated"] + - ["java.util.logging", "Logger", "exiting", "(String,String,Object)", "summary", "df-generated"] + - ["java.util.logging", "Logger", "fine", "(String)", "summary", "df-generated"] + - ["java.util.logging", "Logger", "fine", "(Supplier)", "summary", "df-generated"] + - ["java.util.logging", "Logger", "finer", "(String)", "summary", "df-generated"] + - ["java.util.logging", "Logger", "finer", "(Supplier)", "summary", "df-generated"] + - ["java.util.logging", "Logger", "finest", "(String)", "summary", "df-generated"] + - ["java.util.logging", "Logger", "finest", "(Supplier)", "summary", "df-generated"] + - ["java.util.logging", "Logger", "getAnonymousLogger", "()", "summary", "df-generated"] + - ["java.util.logging", "Logger", "getGlobal", "()", "summary", "df-generated"] + - ["java.util.logging", "Logger", "getUseParentHandlers", "()", "summary", "df-generated"] + - ["java.util.logging", "Logger", "info", "(String)", "summary", "df-generated"] + - ["java.util.logging", "Logger", "info", "(Supplier)", "summary", "df-generated"] + - ["java.util.logging", "Logger", "log", "(Level,String)", "summary", "df-generated"] + - ["java.util.logging", "Logger", "log", "(Level,String,Object)", "summary", "df-generated"] + - ["java.util.logging", "Logger", "log", "(Level,String,Object[])", "summary", "df-generated"] + - ["java.util.logging", "Logger", "log", "(Level,String,Throwable)", "summary", "df-generated"] + - ["java.util.logging", "Logger", "log", "(Level,Supplier)", "summary", "df-generated"] + - ["java.util.logging", "Logger", "log", "(Level,Throwable,Supplier)", "summary", "df-generated"] + - ["java.util.logging", "Logger", "log", "(LogRecord)", "summary", "df-generated"] + - ["java.util.logging", "Logger", "logp", "(Level,String,String,String)", "summary", "df-generated"] + - ["java.util.logging", "Logger", "logp", "(Level,String,String,String,Object)", "summary", "df-generated"] + - ["java.util.logging", "Logger", "logp", "(Level,String,String,String,Object[])", "summary", "df-generated"] + - ["java.util.logging", "Logger", "logp", "(Level,String,String,String,Throwable)", "summary", "df-generated"] + - ["java.util.logging", "Logger", "logp", "(Level,String,String,Supplier)", "summary", "df-generated"] + - ["java.util.logging", "Logger", "logp", "(Level,String,String,Throwable,Supplier)", "summary", "df-generated"] + - ["java.util.logging", "Logger", "logrb", "(Level,ResourceBundle,String,Object[])", "summary", "df-generated"] + - ["java.util.logging", "Logger", "logrb", "(Level,ResourceBundle,String,Throwable)", "summary", "df-generated"] + - ["java.util.logging", "Logger", "logrb", "(Level,String,String,ResourceBundle,String,Object[])", "summary", "df-generated"] + - ["java.util.logging", "Logger", "logrb", "(Level,String,String,ResourceBundle,String,Throwable)", "summary", "df-generated"] + - ["java.util.logging", "Logger", "removeHandler", "(Handler)", "summary", "df-generated"] + - ["java.util.logging", "Logger", "setUseParentHandlers", "(boolean)", "summary", "df-generated"] + - ["java.util.logging", "Logger", "severe", "(String)", "summary", "df-generated"] + - ["java.util.logging", "Logger", "severe", "(Supplier)", "summary", "df-generated"] + - ["java.util.logging", "Logger", "throwing", "(String,String,Throwable)", "summary", "df-generated"] + - ["java.util.logging", "Logger", "warning", "(String)", "summary", "df-generated"] + - ["java.util.logging", "Logger", "warning", "(Supplier)", "summary", "df-generated"] + - ["java.util.logging", "LoggingMXBean", "getLoggerLevel", "(String)", "summary", "df-generated"] + - ["java.util.logging", "LoggingMXBean", "getLoggerNames", "()", "summary", "df-generated"] + - ["java.util.logging", "LoggingMXBean", "getParentLoggerName", "(String)", "summary", "df-generated"] + - ["java.util.logging", "LoggingMXBean", "setLoggerLevel", "(String,String)", "summary", "df-generated"] + - ["java.util.logging", "MemoryHandler", "push", "()", "summary", "df-generated"] + - ["java.util.logging", "StreamHandler", "StreamHandler", "(OutputStream,Formatter)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/java.util.model.yml b/java/ql/lib/ext/generated/java.util.model.yml new file mode 100644 index 00000000000..e6170696fba --- /dev/null +++ b/java/ql/lib/ext/generated/java.util.model.yml @@ -0,0 +1,759 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["java.util", "Base64$Encoder", True, "withoutPadding", "()", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.util", "Base64", True, "getMimeEncoder", "(int,byte[])", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "Calendar$Builder", True, "build", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "Calendar$Builder", True, "set", "(int,int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.util", "Calendar$Builder", True, "setCalendarType", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util", "Calendar$Builder", True, "setCalendarType", "(String)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.util", "Calendar$Builder", True, "setDate", "(int,int,int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "Calendar$Builder", True, "setFields", "(int[])", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.util", "Calendar$Builder", True, "setInstant", "(Date)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "Calendar$Builder", True, "setInstant", "(long)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.util", "Calendar$Builder", True, "setLenient", "(boolean)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.util", "Calendar$Builder", True, "setLocale", "(Locale)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util", "Calendar$Builder", True, "setLocale", "(Locale)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.util", "Calendar$Builder", True, "setTimeOfDay", "(int,int,int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "Calendar$Builder", True, "setTimeOfDay", "(int,int,int,int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "Calendar$Builder", True, "setTimeZone", "(TimeZone)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util", "Calendar$Builder", True, "setTimeZone", "(TimeZone)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.util", "Calendar$Builder", True, "setWeekDate", "(int,int,int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.util", "Calendar$Builder", True, "setWeekDefinition", "(int,int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.util", "Calendar", True, "getDisplayName", "(int,int,Locale)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "Calendar", True, "getInstance", "(TimeZone)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "Calendar", True, "getInstance", "(TimeZone,Locale)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "Calendar", True, "getTimeZone", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "Calendar", True, "setTimeZone", "(TimeZone)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util", "Comparator", True, "nullsFirst", "(Comparator)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "Comparator", True, "nullsLast", "(Comparator)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "Comparator", True, "reversed", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "ConcurrentModificationException", True, "ConcurrentModificationException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util", "ConcurrentModificationException", True, "ConcurrentModificationException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util", "ConcurrentModificationException", True, "ConcurrentModificationException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.util", "ConcurrentModificationException", True, "ConcurrentModificationException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util", "Currency", False, "getCurrencyCode", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "Currency", False, "getDisplayName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "Currency", False, "getDisplayName", "(Locale)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "Currency", False, "getDisplayName", "(Locale)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "Currency", False, "getInstance", "(Locale)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "Currency", False, "getInstance", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "Currency", False, "getSymbol", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "Currency", False, "getSymbol", "(Locale)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "Currency", False, "getSymbol", "(Locale)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "DuplicateFormatFlagsException", True, "DuplicateFormatFlagsException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util", "DuplicateFormatFlagsException", True, "getFlags", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "EventListenerProxy", True, "EventListenerProxy", "(EventListener)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util", "EventListenerProxy", True, "getListener", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "FormatFlagsConversionMismatchException", True, "FormatFlagsConversionMismatchException", "(String,char)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util", "FormatFlagsConversionMismatchException", True, "getFlags", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "Formatter", False, "Formatter", "(Appendable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util", "Formatter", False, "Formatter", "(Appendable,Locale)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util", "Formatter", False, "Formatter", "(Appendable,Locale)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.util", "Formatter", False, "Formatter", "(File,Charset,Locale)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.util", "Formatter", False, "Formatter", "(File,String,Locale)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.util", "Formatter", False, "Formatter", "(Locale)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util", "Formatter", False, "Formatter", "(OutputStream,Charset,Locale)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.util", "Formatter", False, "Formatter", "(OutputStream,String,Locale)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.util", "Formatter", False, "Formatter", "(PrintStream)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util", "Formatter", False, "Formatter", "(String,Charset,Locale)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.util", "Formatter", False, "Formatter", "(String,String,Locale)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.util", "Formatter", False, "format", "(Locale,String,Object[])", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.util", "Formatter", False, "format", "(String,Object[])", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "Formatter", False, "format", "(String,Object[])", "", "Argument[1].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["java.util", "Formatter", False, "format", "(String,Object[])", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "Formatter", False, "ioException", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "Formatter", False, "locale", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "Formatter", False, "out", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "GregorianCalendar", True, "GregorianCalendar", "(TimeZone)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util", "GregorianCalendar", True, "GregorianCalendar", "(TimeZone,Locale)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util", "GregorianCalendar", True, "from", "(ZonedDateTime)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "GregorianCalendar", True, "toZonedDateTime", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "HexFormat", False, "delimiter", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "HexFormat", False, "formatHex", "(Appendable,byte[])", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "HexFormat", False, "formatHex", "(Appendable,byte[])", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] + - ["java.util", "HexFormat", False, "formatHex", "(Appendable,byte[])", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "HexFormat", False, "formatHex", "(Appendable,byte[],int,int)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "HexFormat", False, "formatHex", "(Appendable,byte[],int,int)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] + - ["java.util", "HexFormat", False, "formatHex", "(Appendable,byte[],int,int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "HexFormat", False, "formatHex", "(byte[])", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "HexFormat", False, "formatHex", "(byte[],int,int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "HexFormat", False, "ofDelimiter", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "HexFormat", False, "prefix", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "HexFormat", False, "suffix", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "HexFormat", False, "toHexDigits", "(Appendable,byte)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "HexFormat", False, "withDelimiter", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "HexFormat", False, "withDelimiter", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "HexFormat", False, "withLowerCase", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "HexFormat", False, "withPrefix", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "HexFormat", False, "withPrefix", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "HexFormat", False, "withSuffix", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "HexFormat", False, "withSuffix", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "HexFormat", False, "withUpperCase", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "IllegalFormatFlagsException", True, "IllegalFormatFlagsException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util", "IllegalFormatFlagsException", True, "getFlags", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "IllformedLocaleException", True, "IllformedLocaleException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util", "IllformedLocaleException", True, "IllformedLocaleException", "(String,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util", "InputMismatchException", True, "InputMismatchException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util", "InvalidPropertiesFormatException", True, "InvalidPropertiesFormatException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util", "InvalidPropertiesFormatException", True, "InvalidPropertiesFormatException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util", "Map", True, "compute", "(Object,BiFunction)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util", "Map", True, "compute", "(Object,BiFunction)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "Map", True, "computeIfPresent", "(Object,BiFunction)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util", "Map", True, "computeIfPresent", "(Object,BiFunction)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "MissingFormatArgumentException", True, "MissingFormatArgumentException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util", "MissingFormatArgumentException", True, "getFormatSpecifier", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "MissingFormatWidthException", True, "MissingFormatWidthException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util", "MissingFormatWidthException", True, "getFormatSpecifier", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "MissingResourceException", True, "MissingResourceException", "(String,String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util", "MissingResourceException", True, "MissingResourceException", "(String,String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.util", "MissingResourceException", True, "MissingResourceException", "(String,String,String)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.util", "MissingResourceException", True, "getClassName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "MissingResourceException", True, "getKey", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "NoSuchElementException", True, "NoSuchElementException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util", "NoSuchElementException", True, "NoSuchElementException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util", "NoSuchElementException", True, "NoSuchElementException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.util", "NoSuchElementException", True, "NoSuchElementException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util", "Observable", True, "addObserver", "(Observer)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util", "PriorityQueue", True, "PriorityQueue", "(Comparator)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util", "PriorityQueue", True, "PriorityQueue", "(int,Comparator)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.util", "PriorityQueue", True, "comparator", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "Properties", True, "Properties", "(Properties)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["java.util", "Properties", True, "list", "(PrintStream)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] + - ["java.util", "Properties", True, "list", "(PrintWriter)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] + - ["java.util", "Properties", True, "propertyNames", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "Properties", True, "store", "(Writer,String)", "", "Argument[1]", "Argument[0]", "taint", "df-generated"] + - ["java.util", "Properties", True, "stringPropertyNames", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "PropertyPermission", False, "PropertyPermission", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util", "ResourceBundle$Control", True, "getFormats", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "ResourceBundle$Control", True, "newBundle", "(String,Locale,String,ClassLoader,boolean)", "", "Argument[0]", "Argument[3]", "taint", "df-generated"] + - ["java.util", "ResourceBundle$Control", True, "newBundle", "(String,Locale,String,ClassLoader,boolean)", "", "Argument[1]", "Argument[3]", "taint", "df-generated"] + - ["java.util", "ResourceBundle$Control", True, "toBundleName", "(String,Locale)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "ResourceBundle$Control", True, "toBundleName", "(String,Locale)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "ResourceBundle$Control", True, "toResourceName", "(String,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "ResourceBundle$Control", True, "toResourceName", "(String,String)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "ResourceBundle", True, "getBaseBundleName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "ResourceBundle", True, "getKeys", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "ResourceBundle", True, "getLocale", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "ResourceBundle", True, "getObject", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "ResourceBundle", True, "getObject", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "ResourceBundle", True, "getStringArray", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "ResourceBundle", True, "getStringArray", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "ResourceBundle", True, "handleGetObject", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "ResourceBundle", True, "keySet", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "ServiceConfigurationError", True, "ServiceConfigurationError", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util", "ServiceConfigurationError", True, "ServiceConfigurationError", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util", "ServiceConfigurationError", True, "ServiceConfigurationError", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.util", "ServiceLoader", False, "findFirst", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "ServiceLoader", False, "load", "(Class,ClassLoader)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "ServiceLoader", False, "load", "(ModuleLayer,Class)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "ServiceLoader", False, "stream", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "SimpleTimeZone", True, "SimpleTimeZone", "(int,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.util", "SimpleTimeZone", True, "SimpleTimeZone", "(int,String,int,int,int,int,int,int,int,int)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.util", "SimpleTimeZone", True, "SimpleTimeZone", "(int,String,int,int,int,int,int,int,int,int,int)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.util", "SimpleTimeZone", True, "SimpleTimeZone", "(int,String,int,int,int,int,int,int,int,int,int,int,int)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.util", "Spliterator", True, "forEachRemaining", "(Consumer)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util", "Spliterator", True, "forEachRemaining", "(Consumer)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] + - ["java.util", "Spliterators", False, "spliterator", "(Collection,int)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["java.util", "Spliterators", False, "spliterator", "(Iterator,long,int)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["java.util", "Spliterators", False, "spliterator", "(Object[],int)", "", "Argument[0].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["java.util", "Spliterators", False, "spliterator", "(Object[],int,int,int)", "", "Argument[0].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["java.util", "Spliterators", False, "spliterator", "(PrimitiveIterator$OfDouble,long,int)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["java.util", "Spliterators", False, "spliterator", "(PrimitiveIterator$OfInt,long,int)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["java.util", "Spliterators", False, "spliterator", "(PrimitiveIterator$OfLong,long,int)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["java.util", "Spliterators", False, "spliteratorUnknownSize", "(Iterator,int)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["java.util", "Spliterators", False, "spliteratorUnknownSize", "(PrimitiveIterator$OfDouble,int)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["java.util", "Spliterators", False, "spliteratorUnknownSize", "(PrimitiveIterator$OfInt,int)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["java.util", "Spliterators", False, "spliteratorUnknownSize", "(PrimitiveIterator$OfLong,int)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["java.util", "TimeZone", True, "getDisplayName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "TimeZone", True, "getDisplayName", "(Locale)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "TimeZone", True, "getDisplayName", "(Locale)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "TimeZone", True, "getDisplayName", "(boolean,int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "TimeZone", True, "getDisplayName", "(boolean,int,Locale)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "TimeZone", True, "getDisplayName", "(boolean,int,Locale)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "TimeZone", True, "getID", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "TimeZone", True, "getTimeZone", "(ZoneId)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "TimeZone", True, "setID", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util", "TimeZone", True, "toZoneId", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "Timer", True, "Timer", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util", "Timer", True, "Timer", "(String,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util", "TooManyListenersException", True, "TooManyListenersException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util", "UnknownFormatConversionException", True, "UnknownFormatConversionException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util", "UnknownFormatConversionException", True, "getConversion", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "UnknownFormatFlagsException", True, "UnknownFormatFlagsException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util", "UnknownFormatFlagsException", True, "getFlags", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["java.util", "ArrayDeque", "ArrayDeque", "(int)", "summary", "df-generated"] + - ["java.util", "ArrayList", "ensureCapacity", "(int)", "summary", "df-generated"] + - ["java.util", "ArrayList", "trimToSize", "()", "summary", "df-generated"] + - ["java.util", "Arrays", "binarySearch", "(Object[],Object)", "summary", "df-generated"] + - ["java.util", "Arrays", "binarySearch", "(Object[],Object,Comparator)", "summary", "df-generated"] + - ["java.util", "Arrays", "binarySearch", "(Object[],int,int,Object)", "summary", "df-generated"] + - ["java.util", "Arrays", "binarySearch", "(Object[],int,int,Object,Comparator)", "summary", "df-generated"] + - ["java.util", "Arrays", "binarySearch", "(byte[],byte)", "summary", "df-generated"] + - ["java.util", "Arrays", "binarySearch", "(byte[],int,int,byte)", "summary", "df-generated"] + - ["java.util", "Arrays", "binarySearch", "(char[],char)", "summary", "df-generated"] + - ["java.util", "Arrays", "binarySearch", "(char[],int,int,char)", "summary", "df-generated"] + - ["java.util", "Arrays", "binarySearch", "(double[],double)", "summary", "df-generated"] + - ["java.util", "Arrays", "binarySearch", "(double[],int,int,double)", "summary", "df-generated"] + - ["java.util", "Arrays", "binarySearch", "(float[],float)", "summary", "df-generated"] + - ["java.util", "Arrays", "binarySearch", "(float[],int,int,float)", "summary", "df-generated"] + - ["java.util", "Arrays", "binarySearch", "(int[],int)", "summary", "df-generated"] + - ["java.util", "Arrays", "binarySearch", "(int[],int,int,int)", "summary", "df-generated"] + - ["java.util", "Arrays", "binarySearch", "(long[],int,int,long)", "summary", "df-generated"] + - ["java.util", "Arrays", "binarySearch", "(long[],long)", "summary", "df-generated"] + - ["java.util", "Arrays", "binarySearch", "(short[],int,int,short)", "summary", "df-generated"] + - ["java.util", "Arrays", "binarySearch", "(short[],short)", "summary", "df-generated"] + - ["java.util", "Arrays", "compare", "(Comparable[],Comparable[])", "summary", "df-generated"] + - ["java.util", "Arrays", "compare", "(Comparable[],int,int,Comparable[],int,int)", "summary", "df-generated"] + - ["java.util", "Arrays", "compare", "(Object[],Object[],Comparator)", "summary", "df-generated"] + - ["java.util", "Arrays", "compare", "(Object[],int,int,Object[],int,int,Comparator)", "summary", "df-generated"] + - ["java.util", "Arrays", "compare", "(boolean[],boolean[])", "summary", "df-generated"] + - ["java.util", "Arrays", "compare", "(boolean[],int,int,boolean[],int,int)", "summary", "df-generated"] + - ["java.util", "Arrays", "compare", "(byte[],byte[])", "summary", "df-generated"] + - ["java.util", "Arrays", "compare", "(byte[],int,int,byte[],int,int)", "summary", "df-generated"] + - ["java.util", "Arrays", "compare", "(char[],char[])", "summary", "df-generated"] + - ["java.util", "Arrays", "compare", "(char[],int,int,char[],int,int)", "summary", "df-generated"] + - ["java.util", "Arrays", "compare", "(double[],double[])", "summary", "df-generated"] + - ["java.util", "Arrays", "compare", "(double[],int,int,double[],int,int)", "summary", "df-generated"] + - ["java.util", "Arrays", "compare", "(float[],float[])", "summary", "df-generated"] + - ["java.util", "Arrays", "compare", "(float[],int,int,float[],int,int)", "summary", "df-generated"] + - ["java.util", "Arrays", "compare", "(int[],int,int,int[],int,int)", "summary", "df-generated"] + - ["java.util", "Arrays", "compare", "(int[],int[])", "summary", "df-generated"] + - ["java.util", "Arrays", "compare", "(long[],int,int,long[],int,int)", "summary", "df-generated"] + - ["java.util", "Arrays", "compare", "(long[],long[])", "summary", "df-generated"] + - ["java.util", "Arrays", "compare", "(short[],int,int,short[],int,int)", "summary", "df-generated"] + - ["java.util", "Arrays", "compare", "(short[],short[])", "summary", "df-generated"] + - ["java.util", "Arrays", "compareUnsigned", "(byte[],byte[])", "summary", "df-generated"] + - ["java.util", "Arrays", "compareUnsigned", "(byte[],int,int,byte[],int,int)", "summary", "df-generated"] + - ["java.util", "Arrays", "compareUnsigned", "(int[],int,int,int[],int,int)", "summary", "df-generated"] + - ["java.util", "Arrays", "compareUnsigned", "(int[],int[])", "summary", "df-generated"] + - ["java.util", "Arrays", "compareUnsigned", "(long[],int,int,long[],int,int)", "summary", "df-generated"] + - ["java.util", "Arrays", "compareUnsigned", "(long[],long[])", "summary", "df-generated"] + - ["java.util", "Arrays", "compareUnsigned", "(short[],int,int,short[],int,int)", "summary", "df-generated"] + - ["java.util", "Arrays", "compareUnsigned", "(short[],short[])", "summary", "df-generated"] + - ["java.util", "Arrays", "deepEquals", "(Object[],Object[])", "summary", "df-generated"] + - ["java.util", "Arrays", "deepHashCode", "(Object[])", "summary", "df-generated"] + - ["java.util", "Arrays", "equals", "(Object[],Object[])", "summary", "df-generated"] + - ["java.util", "Arrays", "equals", "(Object[],Object[],Comparator)", "summary", "df-generated"] + - ["java.util", "Arrays", "equals", "(Object[],int,int,Object[],int,int)", "summary", "df-generated"] + - ["java.util", "Arrays", "equals", "(Object[],int,int,Object[],int,int,Comparator)", "summary", "df-generated"] + - ["java.util", "Arrays", "equals", "(boolean[],boolean[])", "summary", "df-generated"] + - ["java.util", "Arrays", "equals", "(boolean[],int,int,boolean[],int,int)", "summary", "df-generated"] + - ["java.util", "Arrays", "equals", "(byte[],byte[])", "summary", "df-generated"] + - ["java.util", "Arrays", "equals", "(byte[],int,int,byte[],int,int)", "summary", "df-generated"] + - ["java.util", "Arrays", "equals", "(char[],char[])", "summary", "df-generated"] + - ["java.util", "Arrays", "equals", "(char[],int,int,char[],int,int)", "summary", "df-generated"] + - ["java.util", "Arrays", "equals", "(double[],double[])", "summary", "df-generated"] + - ["java.util", "Arrays", "equals", "(double[],int,int,double[],int,int)", "summary", "df-generated"] + - ["java.util", "Arrays", "equals", "(float[],float[])", "summary", "df-generated"] + - ["java.util", "Arrays", "equals", "(float[],int,int,float[],int,int)", "summary", "df-generated"] + - ["java.util", "Arrays", "equals", "(int[],int,int,int[],int,int)", "summary", "df-generated"] + - ["java.util", "Arrays", "equals", "(int[],int[])", "summary", "df-generated"] + - ["java.util", "Arrays", "equals", "(long[],int,int,long[],int,int)", "summary", "df-generated"] + - ["java.util", "Arrays", "equals", "(long[],long[])", "summary", "df-generated"] + - ["java.util", "Arrays", "equals", "(short[],int,int,short[],int,int)", "summary", "df-generated"] + - ["java.util", "Arrays", "equals", "(short[],short[])", "summary", "df-generated"] + - ["java.util", "Arrays", "hashCode", "(Object[])", "summary", "df-generated"] + - ["java.util", "Arrays", "hashCode", "(boolean[])", "summary", "df-generated"] + - ["java.util", "Arrays", "hashCode", "(byte[])", "summary", "df-generated"] + - ["java.util", "Arrays", "hashCode", "(char[])", "summary", "df-generated"] + - ["java.util", "Arrays", "hashCode", "(double[])", "summary", "df-generated"] + - ["java.util", "Arrays", "hashCode", "(float[])", "summary", "df-generated"] + - ["java.util", "Arrays", "hashCode", "(int[])", "summary", "df-generated"] + - ["java.util", "Arrays", "hashCode", "(long[])", "summary", "df-generated"] + - ["java.util", "Arrays", "hashCode", "(short[])", "summary", "df-generated"] + - ["java.util", "Arrays", "mismatch", "(Object[],Object[])", "summary", "df-generated"] + - ["java.util", "Arrays", "mismatch", "(Object[],Object[],Comparator)", "summary", "df-generated"] + - ["java.util", "Arrays", "mismatch", "(Object[],int,int,Object[],int,int)", "summary", "df-generated"] + - ["java.util", "Arrays", "mismatch", "(Object[],int,int,Object[],int,int,Comparator)", "summary", "df-generated"] + - ["java.util", "Arrays", "mismatch", "(boolean[],boolean[])", "summary", "df-generated"] + - ["java.util", "Arrays", "mismatch", "(boolean[],int,int,boolean[],int,int)", "summary", "df-generated"] + - ["java.util", "Arrays", "mismatch", "(byte[],byte[])", "summary", "df-generated"] + - ["java.util", "Arrays", "mismatch", "(byte[],int,int,byte[],int,int)", "summary", "df-generated"] + - ["java.util", "Arrays", "mismatch", "(char[],char[])", "summary", "df-generated"] + - ["java.util", "Arrays", "mismatch", "(char[],int,int,char[],int,int)", "summary", "df-generated"] + - ["java.util", "Arrays", "mismatch", "(double[],double[])", "summary", "df-generated"] + - ["java.util", "Arrays", "mismatch", "(double[],int,int,double[],int,int)", "summary", "df-generated"] + - ["java.util", "Arrays", "mismatch", "(float[],float[])", "summary", "df-generated"] + - ["java.util", "Arrays", "mismatch", "(float[],int,int,float[],int,int)", "summary", "df-generated"] + - ["java.util", "Arrays", "mismatch", "(int[],int,int,int[],int,int)", "summary", "df-generated"] + - ["java.util", "Arrays", "mismatch", "(int[],int[])", "summary", "df-generated"] + - ["java.util", "Arrays", "mismatch", "(long[],int,int,long[],int,int)", "summary", "df-generated"] + - ["java.util", "Arrays", "mismatch", "(long[],long[])", "summary", "df-generated"] + - ["java.util", "Arrays", "mismatch", "(short[],int,int,short[],int,int)", "summary", "df-generated"] + - ["java.util", "Arrays", "mismatch", "(short[],short[])", "summary", "df-generated"] + - ["java.util", "Arrays", "parallelPrefix", "(Object[],BinaryOperator)", "summary", "df-generated"] + - ["java.util", "Arrays", "parallelPrefix", "(Object[],int,int,BinaryOperator)", "summary", "df-generated"] + - ["java.util", "Arrays", "parallelPrefix", "(double[],DoubleBinaryOperator)", "summary", "df-generated"] + - ["java.util", "Arrays", "parallelPrefix", "(double[],int,int,DoubleBinaryOperator)", "summary", "df-generated"] + - ["java.util", "Arrays", "parallelPrefix", "(int[],IntBinaryOperator)", "summary", "df-generated"] + - ["java.util", "Arrays", "parallelPrefix", "(int[],int,int,IntBinaryOperator)", "summary", "df-generated"] + - ["java.util", "Arrays", "parallelPrefix", "(long[],LongBinaryOperator)", "summary", "df-generated"] + - ["java.util", "Arrays", "parallelPrefix", "(long[],int,int,LongBinaryOperator)", "summary", "df-generated"] + - ["java.util", "Arrays", "parallelSetAll", "(Object[],IntFunction)", "summary", "df-generated"] + - ["java.util", "Arrays", "parallelSetAll", "(double[],IntToDoubleFunction)", "summary", "df-generated"] + - ["java.util", "Arrays", "parallelSetAll", "(int[],IntUnaryOperator)", "summary", "df-generated"] + - ["java.util", "Arrays", "parallelSetAll", "(long[],IntToLongFunction)", "summary", "df-generated"] + - ["java.util", "Arrays", "parallelSort", "(Comparable[])", "summary", "df-generated"] + - ["java.util", "Arrays", "parallelSort", "(Comparable[],int,int)", "summary", "df-generated"] + - ["java.util", "Arrays", "parallelSort", "(Object[],Comparator)", "summary", "df-generated"] + - ["java.util", "Arrays", "parallelSort", "(Object[],int,int,Comparator)", "summary", "df-generated"] + - ["java.util", "Arrays", "parallelSort", "(byte[])", "summary", "df-generated"] + - ["java.util", "Arrays", "parallelSort", "(byte[],int,int)", "summary", "df-generated"] + - ["java.util", "Arrays", "parallelSort", "(char[])", "summary", "df-generated"] + - ["java.util", "Arrays", "parallelSort", "(char[],int,int)", "summary", "df-generated"] + - ["java.util", "Arrays", "parallelSort", "(double[])", "summary", "df-generated"] + - ["java.util", "Arrays", "parallelSort", "(double[],int,int)", "summary", "df-generated"] + - ["java.util", "Arrays", "parallelSort", "(float[])", "summary", "df-generated"] + - ["java.util", "Arrays", "parallelSort", "(float[],int,int)", "summary", "df-generated"] + - ["java.util", "Arrays", "parallelSort", "(int[])", "summary", "df-generated"] + - ["java.util", "Arrays", "parallelSort", "(int[],int,int)", "summary", "df-generated"] + - ["java.util", "Arrays", "parallelSort", "(long[])", "summary", "df-generated"] + - ["java.util", "Arrays", "parallelSort", "(long[],int,int)", "summary", "df-generated"] + - ["java.util", "Arrays", "parallelSort", "(short[])", "summary", "df-generated"] + - ["java.util", "Arrays", "parallelSort", "(short[],int,int)", "summary", "df-generated"] + - ["java.util", "Arrays", "setAll", "(Object[],IntFunction)", "summary", "df-generated"] + - ["java.util", "Arrays", "setAll", "(double[],IntToDoubleFunction)", "summary", "df-generated"] + - ["java.util", "Arrays", "setAll", "(int[],IntUnaryOperator)", "summary", "df-generated"] + - ["java.util", "Arrays", "setAll", "(long[],IntToLongFunction)", "summary", "df-generated"] + - ["java.util", "Arrays", "sort", "(Object[])", "summary", "df-generated"] + - ["java.util", "Arrays", "sort", "(Object[],Comparator)", "summary", "df-generated"] + - ["java.util", "Arrays", "sort", "(Object[],int,int)", "summary", "df-generated"] + - ["java.util", "Arrays", "sort", "(Object[],int,int,Comparator)", "summary", "df-generated"] + - ["java.util", "Arrays", "sort", "(byte[])", "summary", "df-generated"] + - ["java.util", "Arrays", "sort", "(byte[],int,int)", "summary", "df-generated"] + - ["java.util", "Arrays", "sort", "(char[])", "summary", "df-generated"] + - ["java.util", "Arrays", "sort", "(char[],int,int)", "summary", "df-generated"] + - ["java.util", "Arrays", "sort", "(double[])", "summary", "df-generated"] + - ["java.util", "Arrays", "sort", "(double[],int,int)", "summary", "df-generated"] + - ["java.util", "Arrays", "sort", "(float[])", "summary", "df-generated"] + - ["java.util", "Arrays", "sort", "(float[],int,int)", "summary", "df-generated"] + - ["java.util", "Arrays", "sort", "(int[])", "summary", "df-generated"] + - ["java.util", "Arrays", "sort", "(int[],int,int)", "summary", "df-generated"] + - ["java.util", "Arrays", "sort", "(long[])", "summary", "df-generated"] + - ["java.util", "Arrays", "sort", "(long[],int,int)", "summary", "df-generated"] + - ["java.util", "Arrays", "sort", "(short[])", "summary", "df-generated"] + - ["java.util", "Arrays", "sort", "(short[],int,int)", "summary", "df-generated"] + - ["java.util", "Base64$Decoder", "decode", "(byte[],byte[])", "summary", "df-generated"] + - ["java.util", "Base64$Encoder", "encode", "(byte[],byte[])", "summary", "df-generated"] + - ["java.util", "Base64", "getDecoder", "()", "summary", "df-generated"] + - ["java.util", "Base64", "getEncoder", "()", "summary", "df-generated"] + - ["java.util", "Base64", "getMimeDecoder", "()", "summary", "df-generated"] + - ["java.util", "Base64", "getMimeEncoder", "()", "summary", "df-generated"] + - ["java.util", "Base64", "getUrlDecoder", "()", "summary", "df-generated"] + - ["java.util", "Base64", "getUrlEncoder", "()", "summary", "df-generated"] + - ["java.util", "BitSet", "BitSet", "(int)", "summary", "df-generated"] + - ["java.util", "BitSet", "and", "(BitSet)", "summary", "df-generated"] + - ["java.util", "BitSet", "andNot", "(BitSet)", "summary", "df-generated"] + - ["java.util", "BitSet", "cardinality", "()", "summary", "df-generated"] + - ["java.util", "BitSet", "clear", "()", "summary", "df-generated"] + - ["java.util", "BitSet", "clear", "(int)", "summary", "df-generated"] + - ["java.util", "BitSet", "clear", "(int,int)", "summary", "df-generated"] + - ["java.util", "BitSet", "flip", "(int)", "summary", "df-generated"] + - ["java.util", "BitSet", "flip", "(int,int)", "summary", "df-generated"] + - ["java.util", "BitSet", "get", "(int)", "summary", "df-generated"] + - ["java.util", "BitSet", "get", "(int,int)", "summary", "df-generated"] + - ["java.util", "BitSet", "intersects", "(BitSet)", "summary", "df-generated"] + - ["java.util", "BitSet", "isEmpty", "()", "summary", "df-generated"] + - ["java.util", "BitSet", "length", "()", "summary", "df-generated"] + - ["java.util", "BitSet", "nextClearBit", "(int)", "summary", "df-generated"] + - ["java.util", "BitSet", "nextSetBit", "(int)", "summary", "df-generated"] + - ["java.util", "BitSet", "or", "(BitSet)", "summary", "df-generated"] + - ["java.util", "BitSet", "previousClearBit", "(int)", "summary", "df-generated"] + - ["java.util", "BitSet", "previousSetBit", "(int)", "summary", "df-generated"] + - ["java.util", "BitSet", "set", "(int)", "summary", "df-generated"] + - ["java.util", "BitSet", "set", "(int,boolean)", "summary", "df-generated"] + - ["java.util", "BitSet", "set", "(int,int)", "summary", "df-generated"] + - ["java.util", "BitSet", "set", "(int,int,boolean)", "summary", "df-generated"] + - ["java.util", "BitSet", "size", "()", "summary", "df-generated"] + - ["java.util", "BitSet", "stream", "()", "summary", "df-generated"] + - ["java.util", "BitSet", "toByteArray", "()", "summary", "df-generated"] + - ["java.util", "BitSet", "toLongArray", "()", "summary", "df-generated"] + - ["java.util", "BitSet", "valueOf", "(ByteBuffer)", "summary", "df-generated"] + - ["java.util", "BitSet", "valueOf", "(LongBuffer)", "summary", "df-generated"] + - ["java.util", "BitSet", "valueOf", "(byte[])", "summary", "df-generated"] + - ["java.util", "BitSet", "valueOf", "(long[])", "summary", "df-generated"] + - ["java.util", "BitSet", "xor", "(BitSet)", "summary", "df-generated"] + - ["java.util", "Calendar", "add", "(int,int)", "summary", "df-generated"] + - ["java.util", "Calendar", "after", "(Object)", "summary", "df-generated"] + - ["java.util", "Calendar", "before", "(Object)", "summary", "df-generated"] + - ["java.util", "Calendar", "clear", "()", "summary", "df-generated"] + - ["java.util", "Calendar", "clear", "(int)", "summary", "df-generated"] + - ["java.util", "Calendar", "getActualMaximum", "(int)", "summary", "df-generated"] + - ["java.util", "Calendar", "getActualMinimum", "(int)", "summary", "df-generated"] + - ["java.util", "Calendar", "getAvailableCalendarTypes", "()", "summary", "df-generated"] + - ["java.util", "Calendar", "getAvailableLocales", "()", "summary", "df-generated"] + - ["java.util", "Calendar", "getCalendarType", "()", "summary", "df-generated"] + - ["java.util", "Calendar", "getDisplayNames", "(int,int,Locale)", "summary", "df-generated"] + - ["java.util", "Calendar", "getFirstDayOfWeek", "()", "summary", "df-generated"] + - ["java.util", "Calendar", "getGreatestMinimum", "(int)", "summary", "df-generated"] + - ["java.util", "Calendar", "getInstance", "(Locale)", "summary", "df-generated"] + - ["java.util", "Calendar", "getLeastMaximum", "(int)", "summary", "df-generated"] + - ["java.util", "Calendar", "getMaximum", "(int)", "summary", "df-generated"] + - ["java.util", "Calendar", "getMinimalDaysInFirstWeek", "()", "summary", "df-generated"] + - ["java.util", "Calendar", "getMinimum", "(int)", "summary", "df-generated"] + - ["java.util", "Calendar", "getWeekYear", "()", "summary", "df-generated"] + - ["java.util", "Calendar", "getWeeksInWeekYear", "()", "summary", "df-generated"] + - ["java.util", "Calendar", "isLenient", "()", "summary", "df-generated"] + - ["java.util", "Calendar", "isSet", "(int)", "summary", "df-generated"] + - ["java.util", "Calendar", "isWeekDateSupported", "()", "summary", "df-generated"] + - ["java.util", "Calendar", "roll", "(int,boolean)", "summary", "df-generated"] + - ["java.util", "Calendar", "roll", "(int,int)", "summary", "df-generated"] + - ["java.util", "Calendar", "set", "(int,int,int)", "summary", "df-generated"] + - ["java.util", "Calendar", "set", "(int,int,int,int,int)", "summary", "df-generated"] + - ["java.util", "Calendar", "set", "(int,int,int,int,int,int)", "summary", "df-generated"] + - ["java.util", "Calendar", "setFirstDayOfWeek", "(int)", "summary", "df-generated"] + - ["java.util", "Calendar", "setLenient", "(boolean)", "summary", "df-generated"] + - ["java.util", "Calendar", "setMinimalDaysInFirstWeek", "(int)", "summary", "df-generated"] + - ["java.util", "Calendar", "setTimeInMillis", "(long)", "summary", "df-generated"] + - ["java.util", "Calendar", "setWeekDate", "(int,int,int)", "summary", "df-generated"] + - ["java.util", "Calendar", "toInstant", "()", "summary", "df-generated"] + - ["java.util", "Collections", "binarySearch", "(List,Object)", "summary", "df-generated"] + - ["java.util", "Collections", "binarySearch", "(List,Object,Comparator)", "summary", "df-generated"] + - ["java.util", "Collections", "disjoint", "(Collection,Collection)", "summary", "df-generated"] + - ["java.util", "Collections", "emptyEnumeration", "()", "summary", "df-generated"] + - ["java.util", "Collections", "emptyIterator", "()", "summary", "df-generated"] + - ["java.util", "Collections", "emptyListIterator", "()", "summary", "df-generated"] + - ["java.util", "Collections", "emptyNavigableMap", "()", "summary", "df-generated"] + - ["java.util", "Collections", "emptyNavigableSet", "()", "summary", "df-generated"] + - ["java.util", "Collections", "emptySortedMap", "()", "summary", "df-generated"] + - ["java.util", "Collections", "emptySortedSet", "()", "summary", "df-generated"] + - ["java.util", "Collections", "frequency", "(Collection,Object)", "summary", "df-generated"] + - ["java.util", "Collections", "indexOfSubList", "(List,List)", "summary", "df-generated"] + - ["java.util", "Collections", "lastIndexOfSubList", "(List,List)", "summary", "df-generated"] + - ["java.util", "Collections", "reverse", "(List)", "summary", "df-generated"] + - ["java.util", "Collections", "reverseOrder", "()", "summary", "df-generated"] + - ["java.util", "Collections", "rotate", "(List,int)", "summary", "df-generated"] + - ["java.util", "Collections", "shuffle", "(List)", "summary", "df-generated"] + - ["java.util", "Collections", "shuffle", "(List,Random)", "summary", "df-generated"] + - ["java.util", "Collections", "swap", "(List,int,int)", "summary", "df-generated"] + - ["java.util", "Comparator", "comparing", "(Function)", "summary", "df-generated"] + - ["java.util", "Comparator", "comparing", "(Function,Comparator)", "summary", "df-generated"] + - ["java.util", "Comparator", "comparingDouble", "(ToDoubleFunction)", "summary", "df-generated"] + - ["java.util", "Comparator", "comparingInt", "(ToIntFunction)", "summary", "df-generated"] + - ["java.util", "Comparator", "comparingLong", "(ToLongFunction)", "summary", "df-generated"] + - ["java.util", "Comparator", "naturalOrder", "()", "summary", "df-generated"] + - ["java.util", "Comparator", "reverseOrder", "()", "summary", "df-generated"] + - ["java.util", "Comparator", "thenComparing", "(Comparator)", "summary", "df-generated"] + - ["java.util", "Comparator", "thenComparing", "(Function)", "summary", "df-generated"] + - ["java.util", "Comparator", "thenComparing", "(Function,Comparator)", "summary", "df-generated"] + - ["java.util", "Comparator", "thenComparingDouble", "(ToDoubleFunction)", "summary", "df-generated"] + - ["java.util", "Comparator", "thenComparingInt", "(ToIntFunction)", "summary", "df-generated"] + - ["java.util", "Comparator", "thenComparingLong", "(ToLongFunction)", "summary", "df-generated"] + - ["java.util", "Currency", "getAvailableCurrencies", "()", "summary", "df-generated"] + - ["java.util", "Currency", "getDefaultFractionDigits", "()", "summary", "df-generated"] + - ["java.util", "Currency", "getNumericCode", "()", "summary", "df-generated"] + - ["java.util", "Currency", "getNumericCodeAsString", "()", "summary", "df-generated"] + - ["java.util", "Date", "Date", "(String)", "summary", "df-generated"] + - ["java.util", "Date", "Date", "(int,int,int)", "summary", "df-generated"] + - ["java.util", "Date", "Date", "(int,int,int,int,int)", "summary", "df-generated"] + - ["java.util", "Date", "Date", "(int,int,int,int,int,int)", "summary", "df-generated"] + - ["java.util", "Date", "UTC", "(int,int,int,int,int,int)", "summary", "df-generated"] + - ["java.util", "Date", "after", "(Date)", "summary", "df-generated"] + - ["java.util", "Date", "before", "(Date)", "summary", "df-generated"] + - ["java.util", "Date", "getDate", "()", "summary", "df-generated"] + - ["java.util", "Date", "getDay", "()", "summary", "df-generated"] + - ["java.util", "Date", "getHours", "()", "summary", "df-generated"] + - ["java.util", "Date", "getMinutes", "()", "summary", "df-generated"] + - ["java.util", "Date", "getMonth", "()", "summary", "df-generated"] + - ["java.util", "Date", "getSeconds", "()", "summary", "df-generated"] + - ["java.util", "Date", "getTimezoneOffset", "()", "summary", "df-generated"] + - ["java.util", "Date", "getYear", "()", "summary", "df-generated"] + - ["java.util", "Date", "parse", "(String)", "summary", "df-generated"] + - ["java.util", "Date", "setDate", "(int)", "summary", "df-generated"] + - ["java.util", "Date", "setHours", "(int)", "summary", "df-generated"] + - ["java.util", "Date", "setMinutes", "(int)", "summary", "df-generated"] + - ["java.util", "Date", "setMonth", "(int)", "summary", "df-generated"] + - ["java.util", "Date", "setSeconds", "(int)", "summary", "df-generated"] + - ["java.util", "Date", "setTime", "(long)", "summary", "df-generated"] + - ["java.util", "Date", "setYear", "(int)", "summary", "df-generated"] + - ["java.util", "Date", "toGMTString", "()", "summary", "df-generated"] + - ["java.util", "Date", "toInstant", "()", "summary", "df-generated"] + - ["java.util", "Date", "toLocaleString", "()", "summary", "df-generated"] + - ["java.util", "Dictionary", "isEmpty", "()", "summary", "df-generated"] + - ["java.util", "Dictionary", "size", "()", "summary", "df-generated"] + - ["java.util", "DoubleSummaryStatistics", "DoubleSummaryStatistics", "(long,double,double,double)", "summary", "df-generated"] + - ["java.util", "DoubleSummaryStatistics", "combine", "(DoubleSummaryStatistics)", "summary", "df-generated"] + - ["java.util", "DoubleSummaryStatistics", "getAverage", "()", "summary", "df-generated"] + - ["java.util", "DoubleSummaryStatistics", "getCount", "()", "summary", "df-generated"] + - ["java.util", "DoubleSummaryStatistics", "getMax", "()", "summary", "df-generated"] + - ["java.util", "DoubleSummaryStatistics", "getMin", "()", "summary", "df-generated"] + - ["java.util", "DoubleSummaryStatistics", "getSum", "()", "summary", "df-generated"] + - ["java.util", "EnumMap", "EnumMap", "(Class)", "summary", "df-generated"] + - ["java.util", "EnumSet", "range", "(Enum,Enum)", "summary", "df-generated"] + - ["java.util", "FormatFlagsConversionMismatchException", "getConversion", "()", "summary", "df-generated"] + - ["java.util", "Formatter", "Formatter", "(File)", "summary", "df-generated"] + - ["java.util", "Formatter", "Formatter", "(File,String)", "summary", "df-generated"] + - ["java.util", "Formatter", "Formatter", "(OutputStream)", "summary", "df-generated"] + - ["java.util", "Formatter", "Formatter", "(OutputStream,String)", "summary", "df-generated"] + - ["java.util", "Formatter", "Formatter", "(String)", "summary", "df-generated"] + - ["java.util", "Formatter", "Formatter", "(String,String)", "summary", "df-generated"] + - ["java.util", "GregorianCalendar", "GregorianCalendar", "(Locale)", "summary", "df-generated"] + - ["java.util", "GregorianCalendar", "GregorianCalendar", "(int,int,int)", "summary", "df-generated"] + - ["java.util", "GregorianCalendar", "GregorianCalendar", "(int,int,int,int,int)", "summary", "df-generated"] + - ["java.util", "GregorianCalendar", "GregorianCalendar", "(int,int,int,int,int,int)", "summary", "df-generated"] + - ["java.util", "GregorianCalendar", "getGregorianChange", "()", "summary", "df-generated"] + - ["java.util", "GregorianCalendar", "isLeapYear", "(int)", "summary", "df-generated"] + - ["java.util", "GregorianCalendar", "setGregorianChange", "(Date)", "summary", "df-generated"] + - ["java.util", "HashMap", "HashMap", "(int,float)", "summary", "df-generated"] + - ["java.util", "HashSet", "HashSet", "(int,float)", "summary", "df-generated"] + - ["java.util", "Hashtable", "Hashtable", "(int)", "summary", "df-generated"] + - ["java.util", "Hashtable", "Hashtable", "(int,float)", "summary", "df-generated"] + - ["java.util", "Hashtable", "contains", "(Object)", "summary", "df-generated"] + - ["java.util", "HexFormat", "fromHexDigit", "(int)", "summary", "df-generated"] + - ["java.util", "HexFormat", "fromHexDigits", "(CharSequence)", "summary", "df-generated"] + - ["java.util", "HexFormat", "fromHexDigits", "(CharSequence,int,int)", "summary", "df-generated"] + - ["java.util", "HexFormat", "fromHexDigitsToLong", "(CharSequence)", "summary", "df-generated"] + - ["java.util", "HexFormat", "fromHexDigitsToLong", "(CharSequence,int,int)", "summary", "df-generated"] + - ["java.util", "HexFormat", "isHexDigit", "(int)", "summary", "df-generated"] + - ["java.util", "HexFormat", "isUpperCase", "()", "summary", "df-generated"] + - ["java.util", "HexFormat", "of", "()", "summary", "df-generated"] + - ["java.util", "HexFormat", "parseHex", "(CharSequence)", "summary", "df-generated"] + - ["java.util", "HexFormat", "parseHex", "(CharSequence,int,int)", "summary", "df-generated"] + - ["java.util", "HexFormat", "parseHex", "(char[],int,int)", "summary", "df-generated"] + - ["java.util", "HexFormat", "toHexDigits", "(byte)", "summary", "df-generated"] + - ["java.util", "HexFormat", "toHexDigits", "(char)", "summary", "df-generated"] + - ["java.util", "HexFormat", "toHexDigits", "(int)", "summary", "df-generated"] + - ["java.util", "HexFormat", "toHexDigits", "(long)", "summary", "df-generated"] + - ["java.util", "HexFormat", "toHexDigits", "(long,int)", "summary", "df-generated"] + - ["java.util", "HexFormat", "toHexDigits", "(short)", "summary", "df-generated"] + - ["java.util", "HexFormat", "toHighHexDigit", "(int)", "summary", "df-generated"] + - ["java.util", "HexFormat", "toLowHexDigit", "(int)", "summary", "df-generated"] + - ["java.util", "IdentityHashMap", "IdentityHashMap", "(int)", "summary", "df-generated"] + - ["java.util", "IllegalFormatCodePointException", "IllegalFormatCodePointException", "(int)", "summary", "df-generated"] + - ["java.util", "IllegalFormatCodePointException", "getCodePoint", "()", "summary", "df-generated"] + - ["java.util", "IllegalFormatConversionException", "IllegalFormatConversionException", "(char,Class)", "summary", "df-generated"] + - ["java.util", "IllegalFormatConversionException", "getArgumentClass", "()", "summary", "df-generated"] + - ["java.util", "IllegalFormatConversionException", "getConversion", "()", "summary", "df-generated"] + - ["java.util", "IllegalFormatPrecisionException", "IllegalFormatPrecisionException", "(int)", "summary", "df-generated"] + - ["java.util", "IllegalFormatPrecisionException", "getPrecision", "()", "summary", "df-generated"] + - ["java.util", "IllegalFormatWidthException", "IllegalFormatWidthException", "(int)", "summary", "df-generated"] + - ["java.util", "IllegalFormatWidthException", "getWidth", "()", "summary", "df-generated"] + - ["java.util", "IllformedLocaleException", "getErrorIndex", "()", "summary", "df-generated"] + - ["java.util", "IntSummaryStatistics", "IntSummaryStatistics", "(long,int,int,long)", "summary", "df-generated"] + - ["java.util", "IntSummaryStatistics", "combine", "(IntSummaryStatistics)", "summary", "df-generated"] + - ["java.util", "IntSummaryStatistics", "getAverage", "()", "summary", "df-generated"] + - ["java.util", "IntSummaryStatistics", "getCount", "()", "summary", "df-generated"] + - ["java.util", "IntSummaryStatistics", "getMax", "()", "summary", "df-generated"] + - ["java.util", "IntSummaryStatistics", "getMin", "()", "summary", "df-generated"] + - ["java.util", "IntSummaryStatistics", "getSum", "()", "summary", "df-generated"] + - ["java.util", "LinkedHashMap", "LinkedHashMap", "(int)", "summary", "df-generated"] + - ["java.util", "LinkedHashMap", "LinkedHashMap", "(int,float)", "summary", "df-generated"] + - ["java.util", "LinkedHashMap", "LinkedHashMap", "(int,float,boolean)", "summary", "df-generated"] + - ["java.util", "LinkedHashSet", "LinkedHashSet", "(int)", "summary", "df-generated"] + - ["java.util", "LinkedHashSet", "LinkedHashSet", "(int,float)", "summary", "df-generated"] + - ["java.util", "List", "replaceAll", "(UnaryOperator)", "summary", "df-generated"] + - ["java.util", "ListResourceBundle", "getContents", "()", "summary", "df-generated"] + - ["java.util", "Locale$LanguageRange", "getWeight", "()", "summary", "df-generated"] + - ["java.util", "Locale", "filter", "(List,Collection)", "summary", "df-generated"] + - ["java.util", "Locale", "filter", "(List,Collection,Locale$FilteringMode)", "summary", "df-generated"] + - ["java.util", "Locale", "getAvailableLocales", "()", "summary", "df-generated"] + - ["java.util", "Locale", "getDefault", "()", "summary", "df-generated"] + - ["java.util", "Locale", "getDefault", "(Locale$Category)", "summary", "df-generated"] + - ["java.util", "Locale", "getExtension", "(char)", "summary", "df-generated"] + - ["java.util", "Locale", "getISO3Country", "()", "summary", "df-generated"] + - ["java.util", "Locale", "getISOCountries", "()", "summary", "df-generated"] + - ["java.util", "Locale", "getISOCountries", "(Locale$IsoCountryCode)", "summary", "df-generated"] + - ["java.util", "Locale", "getISOLanguages", "()", "summary", "df-generated"] + - ["java.util", "Locale", "getUnicodeLocaleAttributes", "()", "summary", "df-generated"] + - ["java.util", "Locale", "getUnicodeLocaleKeys", "()", "summary", "df-generated"] + - ["java.util", "Locale", "getUnicodeLocaleType", "(String)", "summary", "df-generated"] + - ["java.util", "Locale", "hasExtensions", "()", "summary", "df-generated"] + - ["java.util", "Locale", "lookup", "(List,Collection)", "summary", "df-generated"] + - ["java.util", "Locale", "setDefault", "(Locale$Category,Locale)", "summary", "df-generated"] + - ["java.util", "Locale", "setDefault", "(Locale)", "summary", "df-generated"] + - ["java.util", "LongSummaryStatistics", "LongSummaryStatistics", "(long,long,long,long)", "summary", "df-generated"] + - ["java.util", "LongSummaryStatistics", "combine", "(LongSummaryStatistics)", "summary", "df-generated"] + - ["java.util", "LongSummaryStatistics", "getAverage", "()", "summary", "df-generated"] + - ["java.util", "LongSummaryStatistics", "getCount", "()", "summary", "df-generated"] + - ["java.util", "LongSummaryStatistics", "getMax", "()", "summary", "df-generated"] + - ["java.util", "LongSummaryStatistics", "getMin", "()", "summary", "df-generated"] + - ["java.util", "LongSummaryStatistics", "getSum", "()", "summary", "df-generated"] + - ["java.util", "Map$Entry", "comparingByKey", "()", "summary", "df-generated"] + - ["java.util", "Map$Entry", "comparingByKey", "(Comparator)", "summary", "df-generated"] + - ["java.util", "Map$Entry", "comparingByValue", "()", "summary", "df-generated"] + - ["java.util", "Map$Entry", "comparingByValue", "(Comparator)", "summary", "df-generated"] + - ["java.util", "Map", "remove", "(Object,Object)", "summary", "df-generated"] + - ["java.util", "Map", "replaceAll", "(BiFunction)", "summary", "df-generated"] + - ["java.util", "Objects", "checkFromIndexSize", "(int,int,int)", "summary", "df-generated"] + - ["java.util", "Objects", "checkFromIndexSize", "(long,long,long)", "summary", "df-generated"] + - ["java.util", "Objects", "checkFromToIndex", "(int,int,int)", "summary", "df-generated"] + - ["java.util", "Objects", "checkFromToIndex", "(long,long,long)", "summary", "df-generated"] + - ["java.util", "Objects", "checkIndex", "(int,int)", "summary", "df-generated"] + - ["java.util", "Objects", "checkIndex", "(long,long)", "summary", "df-generated"] + - ["java.util", "Objects", "compare", "(Object,Object,Comparator)", "summary", "df-generated"] + - ["java.util", "Objects", "deepEquals", "(Object,Object)", "summary", "df-generated"] + - ["java.util", "Observable", "countObservers", "()", "summary", "df-generated"] + - ["java.util", "Observable", "deleteObserver", "(Observer)", "summary", "df-generated"] + - ["java.util", "Observable", "deleteObservers", "()", "summary", "df-generated"] + - ["java.util", "Observable", "hasChanged", "()", "summary", "df-generated"] + - ["java.util", "Observable", "notifyObservers", "()", "summary", "df-generated"] + - ["java.util", "Observable", "notifyObservers", "(Object)", "summary", "df-generated"] + - ["java.util", "OptionalDouble", "empty", "()", "summary", "df-generated"] + - ["java.util", "OptionalDouble", "getAsDouble", "()", "summary", "df-generated"] + - ["java.util", "OptionalDouble", "ifPresent", "(DoubleConsumer)", "summary", "df-generated"] + - ["java.util", "OptionalDouble", "ifPresentOrElse", "(DoubleConsumer,Runnable)", "summary", "df-generated"] + - ["java.util", "OptionalDouble", "isEmpty", "()", "summary", "df-generated"] + - ["java.util", "OptionalDouble", "isPresent", "()", "summary", "df-generated"] + - ["java.util", "OptionalDouble", "of", "(double)", "summary", "df-generated"] + - ["java.util", "OptionalDouble", "orElse", "(double)", "summary", "df-generated"] + - ["java.util", "OptionalDouble", "orElseGet", "(DoubleSupplier)", "summary", "df-generated"] + - ["java.util", "OptionalDouble", "orElseThrow", "()", "summary", "df-generated"] + - ["java.util", "OptionalDouble", "orElseThrow", "(Supplier)", "summary", "df-generated"] + - ["java.util", "OptionalDouble", "stream", "()", "summary", "df-generated"] + - ["java.util", "OptionalInt", "empty", "()", "summary", "df-generated"] + - ["java.util", "OptionalInt", "getAsInt", "()", "summary", "df-generated"] + - ["java.util", "OptionalInt", "ifPresent", "(IntConsumer)", "summary", "df-generated"] + - ["java.util", "OptionalInt", "ifPresentOrElse", "(IntConsumer,Runnable)", "summary", "df-generated"] + - ["java.util", "OptionalInt", "isEmpty", "()", "summary", "df-generated"] + - ["java.util", "OptionalInt", "isPresent", "()", "summary", "df-generated"] + - ["java.util", "OptionalInt", "of", "(int)", "summary", "df-generated"] + - ["java.util", "OptionalInt", "orElse", "(int)", "summary", "df-generated"] + - ["java.util", "OptionalInt", "orElseGet", "(IntSupplier)", "summary", "df-generated"] + - ["java.util", "OptionalInt", "orElseThrow", "()", "summary", "df-generated"] + - ["java.util", "OptionalInt", "orElseThrow", "(Supplier)", "summary", "df-generated"] + - ["java.util", "OptionalInt", "stream", "()", "summary", "df-generated"] + - ["java.util", "OptionalLong", "empty", "()", "summary", "df-generated"] + - ["java.util", "OptionalLong", "getAsLong", "()", "summary", "df-generated"] + - ["java.util", "OptionalLong", "ifPresent", "(LongConsumer)", "summary", "df-generated"] + - ["java.util", "OptionalLong", "ifPresentOrElse", "(LongConsumer,Runnable)", "summary", "df-generated"] + - ["java.util", "OptionalLong", "isEmpty", "()", "summary", "df-generated"] + - ["java.util", "OptionalLong", "isPresent", "()", "summary", "df-generated"] + - ["java.util", "OptionalLong", "of", "(long)", "summary", "df-generated"] + - ["java.util", "OptionalLong", "orElse", "(long)", "summary", "df-generated"] + - ["java.util", "OptionalLong", "orElseGet", "(LongSupplier)", "summary", "df-generated"] + - ["java.util", "OptionalLong", "orElseThrow", "()", "summary", "df-generated"] + - ["java.util", "OptionalLong", "orElseThrow", "(Supplier)", "summary", "df-generated"] + - ["java.util", "OptionalLong", "stream", "()", "summary", "df-generated"] + - ["java.util", "PrimitiveIterator$OfDouble", "nextDouble", "()", "summary", "df-generated"] + - ["java.util", "PrimitiveIterator$OfInt", "nextInt", "()", "summary", "df-generated"] + - ["java.util", "PrimitiveIterator$OfLong", "nextLong", "()", "summary", "df-generated"] + - ["java.util", "PriorityQueue", "PriorityQueue", "(int)", "summary", "df-generated"] + - ["java.util", "Properties", "Properties", "(int)", "summary", "df-generated"] + - ["java.util", "Properties", "load", "(InputStream)", "summary", "df-generated"] + - ["java.util", "Properties", "load", "(Reader)", "summary", "df-generated"] + - ["java.util", "Properties", "loadFromXML", "(InputStream)", "summary", "df-generated"] + - ["java.util", "Properties", "save", "(OutputStream,String)", "summary", "df-generated"] + - ["java.util", "Properties", "store", "(OutputStream,String)", "summary", "df-generated"] + - ["java.util", "Properties", "storeToXML", "(OutputStream,String)", "summary", "df-generated"] + - ["java.util", "Properties", "storeToXML", "(OutputStream,String,Charset)", "summary", "df-generated"] + - ["java.util", "Properties", "storeToXML", "(OutputStream,String,String)", "summary", "df-generated"] + - ["java.util", "PropertyResourceBundle", "PropertyResourceBundle", "(InputStream)", "summary", "df-generated"] + - ["java.util", "PropertyResourceBundle", "PropertyResourceBundle", "(Reader)", "summary", "df-generated"] + - ["java.util", "Random", "Random", "(long)", "summary", "df-generated"] + - ["java.util", "Random", "setSeed", "(long)", "summary", "df-generated"] + - ["java.util", "ResourceBundle$Control", "getCandidateLocales", "(String,Locale)", "summary", "df-generated"] + - ["java.util", "ResourceBundle$Control", "getControl", "(List)", "summary", "df-generated"] + - ["java.util", "ResourceBundle$Control", "getFallbackLocale", "(String,Locale)", "summary", "df-generated"] + - ["java.util", "ResourceBundle$Control", "getNoFallbackControl", "(List)", "summary", "df-generated"] + - ["java.util", "ResourceBundle$Control", "getTimeToLive", "(String,Locale)", "summary", "df-generated"] + - ["java.util", "ResourceBundle$Control", "needsReload", "(String,Locale,String,ClassLoader,ResourceBundle,long)", "summary", "df-generated"] + - ["java.util", "ResourceBundle", "clearCache", "()", "summary", "df-generated"] + - ["java.util", "ResourceBundle", "clearCache", "(ClassLoader)", "summary", "df-generated"] + - ["java.util", "ResourceBundle", "containsKey", "(String)", "summary", "df-generated"] + - ["java.util", "Scanner", "hasNextBigDecimal", "()", "summary", "df-generated"] + - ["java.util", "Scanner", "hasNextBigInteger", "()", "summary", "df-generated"] + - ["java.util", "Scanner", "hasNextBigInteger", "(int)", "summary", "df-generated"] + - ["java.util", "Scanner", "hasNextBoolean", "()", "summary", "df-generated"] + - ["java.util", "Scanner", "hasNextByte", "()", "summary", "df-generated"] + - ["java.util", "Scanner", "hasNextByte", "(int)", "summary", "df-generated"] + - ["java.util", "Scanner", "hasNextDouble", "()", "summary", "df-generated"] + - ["java.util", "Scanner", "hasNextFloat", "()", "summary", "df-generated"] + - ["java.util", "Scanner", "hasNextInt", "()", "summary", "df-generated"] + - ["java.util", "Scanner", "hasNextInt", "(int)", "summary", "df-generated"] + - ["java.util", "Scanner", "hasNextLine", "()", "summary", "df-generated"] + - ["java.util", "Scanner", "hasNextLong", "()", "summary", "df-generated"] + - ["java.util", "Scanner", "hasNextLong", "(int)", "summary", "df-generated"] + - ["java.util", "Scanner", "hasNextShort", "()", "summary", "df-generated"] + - ["java.util", "Scanner", "hasNextShort", "(int)", "summary", "df-generated"] + - ["java.util", "Scanner", "radix", "()", "summary", "df-generated"] + - ["java.util", "Scanner", "tokens", "()", "summary", "df-generated"] + - ["java.util", "ServiceLoader", "load", "(Class)", "summary", "df-generated"] + - ["java.util", "ServiceLoader", "loadInstalled", "(Class)", "summary", "df-generated"] + - ["java.util", "ServiceLoader", "reload", "()", "summary", "df-generated"] + - ["java.util", "Set", "of", "()", "summary", "df-generated"] + - ["java.util", "SimpleTimeZone", "setDSTSavings", "(int)", "summary", "df-generated"] + - ["java.util", "SimpleTimeZone", "setEndRule", "(int,int,int)", "summary", "df-generated"] + - ["java.util", "SimpleTimeZone", "setEndRule", "(int,int,int,int)", "summary", "df-generated"] + - ["java.util", "SimpleTimeZone", "setEndRule", "(int,int,int,int,boolean)", "summary", "df-generated"] + - ["java.util", "SimpleTimeZone", "setStartRule", "(int,int,int)", "summary", "df-generated"] + - ["java.util", "SimpleTimeZone", "setStartRule", "(int,int,int,int)", "summary", "df-generated"] + - ["java.util", "SimpleTimeZone", "setStartRule", "(int,int,int,int,boolean)", "summary", "df-generated"] + - ["java.util", "SimpleTimeZone", "setStartYear", "(int)", "summary", "df-generated"] + - ["java.util", "Spliterator$OfPrimitive", "forEachRemaining", "(Object)", "summary", "df-generated"] + - ["java.util", "Spliterator", "getComparator", "()", "summary", "df-generated"] + - ["java.util", "Spliterator", "getExactSizeIfKnown", "()", "summary", "df-generated"] + - ["java.util", "Spliterator", "hasCharacteristics", "(int)", "summary", "df-generated"] + - ["java.util", "Spliterators", "emptyDoubleSpliterator", "()", "summary", "df-generated"] + - ["java.util", "Spliterators", "emptyIntSpliterator", "()", "summary", "df-generated"] + - ["java.util", "Spliterators", "emptyLongSpliterator", "()", "summary", "df-generated"] + - ["java.util", "Spliterators", "emptySpliterator", "()", "summary", "df-generated"] + - ["java.util", "Spliterators", "iterator", "(Spliterator$OfDouble)", "summary", "df-generated"] + - ["java.util", "Spliterators", "iterator", "(Spliterator$OfInt)", "summary", "df-generated"] + - ["java.util", "Spliterators", "iterator", "(Spliterator$OfLong)", "summary", "df-generated"] + - ["java.util", "Spliterators", "iterator", "(Spliterator)", "summary", "df-generated"] + - ["java.util", "Spliterators", "spliterator", "(double[],int)", "summary", "df-generated"] + - ["java.util", "Spliterators", "spliterator", "(double[],int,int,int)", "summary", "df-generated"] + - ["java.util", "Spliterators", "spliterator", "(int[],int)", "summary", "df-generated"] + - ["java.util", "Spliterators", "spliterator", "(int[],int,int,int)", "summary", "df-generated"] + - ["java.util", "Spliterators", "spliterator", "(long[],int)", "summary", "df-generated"] + - ["java.util", "Spliterators", "spliterator", "(long[],int,int,int)", "summary", "df-generated"] + - ["java.util", "SplittableRandom", "SplittableRandom", "(long)", "summary", "df-generated"] + - ["java.util", "Stack", "empty", "()", "summary", "df-generated"] + - ["java.util", "Stack", "search", "(Object)", "summary", "df-generated"] + - ["java.util", "StringJoiner", "length", "()", "summary", "df-generated"] + - ["java.util", "StringTokenizer", "countTokens", "()", "summary", "df-generated"] + - ["java.util", "StringTokenizer", "hasMoreTokens", "()", "summary", "df-generated"] + - ["java.util", "TimeZone", "getAvailableIDs", "()", "summary", "df-generated"] + - ["java.util", "TimeZone", "getAvailableIDs", "(int)", "summary", "df-generated"] + - ["java.util", "TimeZone", "getDSTSavings", "()", "summary", "df-generated"] + - ["java.util", "TimeZone", "getDefault", "()", "summary", "df-generated"] + - ["java.util", "TimeZone", "getOffset", "(int,int,int,int,int,int)", "summary", "df-generated"] + - ["java.util", "TimeZone", "getOffset", "(long)", "summary", "df-generated"] + - ["java.util", "TimeZone", "getRawOffset", "()", "summary", "df-generated"] + - ["java.util", "TimeZone", "hasSameRules", "(TimeZone)", "summary", "df-generated"] + - ["java.util", "TimeZone", "inDaylightTime", "(Date)", "summary", "df-generated"] + - ["java.util", "TimeZone", "observesDaylightTime", "()", "summary", "df-generated"] + - ["java.util", "TimeZone", "setDefault", "(TimeZone)", "summary", "df-generated"] + - ["java.util", "TimeZone", "setRawOffset", "(int)", "summary", "df-generated"] + - ["java.util", "TimeZone", "useDaylightTime", "()", "summary", "df-generated"] + - ["java.util", "Timer", "Timer", "(boolean)", "summary", "df-generated"] + - ["java.util", "Timer", "cancel", "()", "summary", "df-generated"] + - ["java.util", "Timer", "purge", "()", "summary", "df-generated"] + - ["java.util", "Timer", "schedule", "(TimerTask,Date)", "summary", "df-generated"] + - ["java.util", "Timer", "schedule", "(TimerTask,Date,long)", "summary", "df-generated"] + - ["java.util", "Timer", "schedule", "(TimerTask,long)", "summary", "df-generated"] + - ["java.util", "Timer", "schedule", "(TimerTask,long,long)", "summary", "df-generated"] + - ["java.util", "Timer", "scheduleAtFixedRate", "(TimerTask,Date,long)", "summary", "df-generated"] + - ["java.util", "Timer", "scheduleAtFixedRate", "(TimerTask,long,long)", "summary", "df-generated"] + - ["java.util", "TimerTask", "cancel", "()", "summary", "df-generated"] + - ["java.util", "TimerTask", "scheduledExecutionTime", "()", "summary", "df-generated"] + - ["java.util", "UUID", "UUID", "(long,long)", "summary", "df-generated"] + - ["java.util", "UUID", "clockSequence", "()", "summary", "df-generated"] + - ["java.util", "UUID", "getLeastSignificantBits", "()", "summary", "df-generated"] + - ["java.util", "UUID", "getMostSignificantBits", "()", "summary", "df-generated"] + - ["java.util", "UUID", "nameUUIDFromBytes", "(byte[])", "summary", "df-generated"] + - ["java.util", "UUID", "node", "()", "summary", "df-generated"] + - ["java.util", "UUID", "timestamp", "()", "summary", "df-generated"] + - ["java.util", "UUID", "variant", "()", "summary", "df-generated"] + - ["java.util", "UUID", "version", "()", "summary", "df-generated"] + - ["java.util", "Vector", "Vector", "(int)", "summary", "df-generated"] + - ["java.util", "Vector", "Vector", "(int,int)", "summary", "df-generated"] + - ["java.util", "Vector", "capacity", "()", "summary", "df-generated"] + - ["java.util", "Vector", "ensureCapacity", "(int)", "summary", "df-generated"] + - ["java.util", "Vector", "indexOf", "(Object,int)", "summary", "df-generated"] + - ["java.util", "Vector", "lastIndexOf", "(Object,int)", "summary", "df-generated"] + - ["java.util", "Vector", "removeAllElements", "()", "summary", "df-generated"] + - ["java.util", "Vector", "removeElement", "(Object)", "summary", "df-generated"] + - ["java.util", "Vector", "removeElementAt", "(int)", "summary", "df-generated"] + - ["java.util", "Vector", "setSize", "(int)", "summary", "df-generated"] + - ["java.util", "Vector", "trimToSize", "()", "summary", "df-generated"] + - ["java.util", "WeakHashMap", "WeakHashMap", "(int)", "summary", "df-generated"] + - ["java.util", "WeakHashMap", "WeakHashMap", "(int,float)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/java.util.prefs.model.yml b/java/ql/lib/ext/generated/java.util.prefs.model.yml new file mode 100644 index 00000000000..e87f3c13a9a --- /dev/null +++ b/java/ql/lib/ext/generated/java.util.prefs.model.yml @@ -0,0 +1,52 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["java.util.prefs", "BackingStoreException", True, "BackingStoreException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.prefs", "BackingStoreException", True, "BackingStoreException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.prefs", "InvalidPreferencesFormatException", True, "InvalidPreferencesFormatException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.prefs", "InvalidPreferencesFormatException", True, "InvalidPreferencesFormatException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.prefs", "InvalidPreferencesFormatException", True, "InvalidPreferencesFormatException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.util.prefs", "InvalidPreferencesFormatException", True, "InvalidPreferencesFormatException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.prefs", "NodeChangeEvent", True, "NodeChangeEvent", "(Preferences,Preferences)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.prefs", "NodeChangeEvent", True, "NodeChangeEvent", "(Preferences,Preferences)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.util.prefs", "NodeChangeEvent", True, "getChild", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.prefs", "NodeChangeEvent", True, "getParent", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.prefs", "PreferenceChangeEvent", True, "PreferenceChangeEvent", "(Preferences,String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.prefs", "PreferenceChangeEvent", True, "PreferenceChangeEvent", "(Preferences,String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.util.prefs", "PreferenceChangeEvent", True, "PreferenceChangeEvent", "(Preferences,String,String)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.util.prefs", "PreferenceChangeEvent", True, "getKey", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.prefs", "PreferenceChangeEvent", True, "getNewValue", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.prefs", "PreferenceChangeEvent", True, "getNode", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.prefs", "Preferences", True, "absolutePath", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.prefs", "Preferences", True, "addNodeChangeListener", "(NodeChangeListener)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.prefs", "Preferences", True, "addPreferenceChangeListener", "(PreferenceChangeListener)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.prefs", "Preferences", True, "childrenNames", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.prefs", "Preferences", True, "keys", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.prefs", "Preferences", True, "name", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.prefs", "Preferences", True, "node", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.prefs", "Preferences", True, "node", "(String)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.util.prefs", "Preferences", True, "parent", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["java.util.prefs", "Preferences", "clear", "()", "summary", "df-generated"] + - ["java.util.prefs", "Preferences", "exportNode", "(OutputStream)", "summary", "df-generated"] + - ["java.util.prefs", "Preferences", "exportSubtree", "(OutputStream)", "summary", "df-generated"] + - ["java.util.prefs", "Preferences", "flush", "()", "summary", "df-generated"] + - ["java.util.prefs", "Preferences", "importPreferences", "(InputStream)", "summary", "df-generated"] + - ["java.util.prefs", "Preferences", "isUserNode", "()", "summary", "df-generated"] + - ["java.util.prefs", "Preferences", "remove", "(String)", "summary", "df-generated"] + - ["java.util.prefs", "Preferences", "removeNode", "()", "summary", "df-generated"] + - ["java.util.prefs", "Preferences", "removeNodeChangeListener", "(NodeChangeListener)", "summary", "df-generated"] + - ["java.util.prefs", "Preferences", "removePreferenceChangeListener", "(PreferenceChangeListener)", "summary", "df-generated"] + - ["java.util.prefs", "Preferences", "sync", "()", "summary", "df-generated"] + - ["java.util.prefs", "Preferences", "systemNodeForPackage", "(Class)", "summary", "df-generated"] + - ["java.util.prefs", "Preferences", "systemRoot", "()", "summary", "df-generated"] + - ["java.util.prefs", "Preferences", "userNodeForPackage", "(Class)", "summary", "df-generated"] + - ["java.util.prefs", "Preferences", "userRoot", "()", "summary", "df-generated"] + - ["java.util.prefs", "PreferencesFactory", "systemRoot", "()", "summary", "df-generated"] + - ["java.util.prefs", "PreferencesFactory", "userRoot", "()", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/java.util.random.model.yml b/java/ql/lib/ext/generated/java.util.random.model.yml new file mode 100644 index 00000000000..2e543aebe8f --- /dev/null +++ b/java/ql/lib/ext/generated/java.util.random.model.yml @@ -0,0 +1,88 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["java.util.random", "RandomGenerator$SplittableGenerator", True, "splits", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.random", "RandomGenerator$SplittableGenerator", True, "splits", "(RandomGenerator$SplittableGenerator)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util.random", "RandomGenerator$SplittableGenerator", True, "splits", "(RandomGenerator$SplittableGenerator)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.random", "RandomGenerator$SplittableGenerator", True, "splits", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.random", "RandomGenerator$SplittableGenerator", True, "splits", "(long,RandomGenerator$SplittableGenerator)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.util.random", "RandomGenerator$SplittableGenerator", True, "splits", "(long,RandomGenerator$SplittableGenerator)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.random", "RandomGenerator", True, "doubles", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.random", "RandomGenerator", True, "doubles", "(double,double)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.random", "RandomGenerator", True, "doubles", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.random", "RandomGenerator", True, "doubles", "(long,double,double)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.random", "RandomGenerator", True, "ints", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.random", "RandomGenerator", True, "ints", "(int,int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.random", "RandomGenerator", True, "ints", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.random", "RandomGenerator", True, "ints", "(long,int,int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.random", "RandomGenerator", True, "longs", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.random", "RandomGenerator", True, "longs", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.random", "RandomGenerator", True, "longs", "(long,long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.random", "RandomGenerator", True, "longs", "(long,long,long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["java.util.random", "RandomGenerator$ArbitrarilyJumpableGenerator", "copyAndJump", "(double)", "summary", "df-generated"] + - ["java.util.random", "RandomGenerator$ArbitrarilyJumpableGenerator", "jumps", "(double)", "summary", "df-generated"] + - ["java.util.random", "RandomGenerator$ArbitrarilyJumpableGenerator", "jumps", "(long,double)", "summary", "df-generated"] + - ["java.util.random", "RandomGenerator$ArbitrarilyJumpableGenerator", "of", "(String)", "summary", "df-generated"] + - ["java.util.random", "RandomGenerator$JumpableGenerator", "copyAndJump", "()", "summary", "df-generated"] + - ["java.util.random", "RandomGenerator$JumpableGenerator", "jump", "()", "summary", "df-generated"] + - ["java.util.random", "RandomGenerator$JumpableGenerator", "jumps", "()", "summary", "df-generated"] + - ["java.util.random", "RandomGenerator$JumpableGenerator", "jumps", "(long)", "summary", "df-generated"] + - ["java.util.random", "RandomGenerator$JumpableGenerator", "of", "(String)", "summary", "df-generated"] + - ["java.util.random", "RandomGenerator$LeapableGenerator", "copyAndLeap", "()", "summary", "df-generated"] + - ["java.util.random", "RandomGenerator$LeapableGenerator", "leap", "()", "summary", "df-generated"] + - ["java.util.random", "RandomGenerator$LeapableGenerator", "leaps", "()", "summary", "df-generated"] + - ["java.util.random", "RandomGenerator$LeapableGenerator", "leaps", "(long)", "summary", "df-generated"] + - ["java.util.random", "RandomGenerator$LeapableGenerator", "of", "(String)", "summary", "df-generated"] + - ["java.util.random", "RandomGenerator$SplittableGenerator", "of", "(String)", "summary", "df-generated"] + - ["java.util.random", "RandomGenerator$SplittableGenerator", "split", "()", "summary", "df-generated"] + - ["java.util.random", "RandomGenerator$SplittableGenerator", "split", "(RandomGenerator$SplittableGenerator)", "summary", "df-generated"] + - ["java.util.random", "RandomGenerator$StreamableGenerator", "of", "(String)", "summary", "df-generated"] + - ["java.util.random", "RandomGenerator$StreamableGenerator", "rngs", "()", "summary", "df-generated"] + - ["java.util.random", "RandomGenerator$StreamableGenerator", "rngs", "(long)", "summary", "df-generated"] + - ["java.util.random", "RandomGenerator", "getDefault", "()", "summary", "df-generated"] + - ["java.util.random", "RandomGenerator", "isDeprecated", "()", "summary", "df-generated"] + - ["java.util.random", "RandomGenerator", "nextBoolean", "()", "summary", "df-generated"] + - ["java.util.random", "RandomGenerator", "nextBytes", "(byte[])", "summary", "df-generated"] + - ["java.util.random", "RandomGenerator", "nextDouble", "()", "summary", "df-generated"] + - ["java.util.random", "RandomGenerator", "nextDouble", "(double)", "summary", "df-generated"] + - ["java.util.random", "RandomGenerator", "nextDouble", "(double,double)", "summary", "df-generated"] + - ["java.util.random", "RandomGenerator", "nextExponential", "()", "summary", "df-generated"] + - ["java.util.random", "RandomGenerator", "nextFloat", "()", "summary", "df-generated"] + - ["java.util.random", "RandomGenerator", "nextFloat", "(float)", "summary", "df-generated"] + - ["java.util.random", "RandomGenerator", "nextFloat", "(float,float)", "summary", "df-generated"] + - ["java.util.random", "RandomGenerator", "nextGaussian", "()", "summary", "df-generated"] + - ["java.util.random", "RandomGenerator", "nextGaussian", "(double,double)", "summary", "df-generated"] + - ["java.util.random", "RandomGenerator", "nextInt", "()", "summary", "df-generated"] + - ["java.util.random", "RandomGenerator", "nextInt", "(int)", "summary", "df-generated"] + - ["java.util.random", "RandomGenerator", "nextInt", "(int,int)", "summary", "df-generated"] + - ["java.util.random", "RandomGenerator", "nextLong", "()", "summary", "df-generated"] + - ["java.util.random", "RandomGenerator", "nextLong", "(long)", "summary", "df-generated"] + - ["java.util.random", "RandomGenerator", "nextLong", "(long,long)", "summary", "df-generated"] + - ["java.util.random", "RandomGenerator", "of", "(String)", "summary", "df-generated"] + - ["java.util.random", "RandomGeneratorFactory", "all", "()", "summary", "df-generated"] + - ["java.util.random", "RandomGeneratorFactory", "create", "()", "summary", "df-generated"] + - ["java.util.random", "RandomGeneratorFactory", "create", "(byte[])", "summary", "df-generated"] + - ["java.util.random", "RandomGeneratorFactory", "create", "(long)", "summary", "df-generated"] + - ["java.util.random", "RandomGeneratorFactory", "equidistribution", "()", "summary", "df-generated"] + - ["java.util.random", "RandomGeneratorFactory", "getDefault", "()", "summary", "df-generated"] + - ["java.util.random", "RandomGeneratorFactory", "group", "()", "summary", "df-generated"] + - ["java.util.random", "RandomGeneratorFactory", "isArbitrarilyJumpable", "()", "summary", "df-generated"] + - ["java.util.random", "RandomGeneratorFactory", "isDeprecated", "()", "summary", "df-generated"] + - ["java.util.random", "RandomGeneratorFactory", "isHardware", "()", "summary", "df-generated"] + - ["java.util.random", "RandomGeneratorFactory", "isJumpable", "()", "summary", "df-generated"] + - ["java.util.random", "RandomGeneratorFactory", "isLeapable", "()", "summary", "df-generated"] + - ["java.util.random", "RandomGeneratorFactory", "isSplittable", "()", "summary", "df-generated"] + - ["java.util.random", "RandomGeneratorFactory", "isStatistical", "()", "summary", "df-generated"] + - ["java.util.random", "RandomGeneratorFactory", "isStochastic", "()", "summary", "df-generated"] + - ["java.util.random", "RandomGeneratorFactory", "isStreamable", "()", "summary", "df-generated"] + - ["java.util.random", "RandomGeneratorFactory", "name", "()", "summary", "df-generated"] + - ["java.util.random", "RandomGeneratorFactory", "of", "(String)", "summary", "df-generated"] + - ["java.util.random", "RandomGeneratorFactory", "period", "()", "summary", "df-generated"] + - ["java.util.random", "RandomGeneratorFactory", "stateBits", "()", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/java.util.regex.model.yml b/java/ql/lib/ext/generated/java.util.regex.model.yml new file mode 100644 index 00000000000..8b5680b1311 --- /dev/null +++ b/java/ql/lib/ext/generated/java.util.regex.model.yml @@ -0,0 +1,50 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["java.util.regex", "MatchResult", True, "group", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.regex", "MatchResult", True, "group", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.regex", "Matcher", False, "quoteReplacement", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util.regex", "Matcher", False, "region", "(int,int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.util.regex", "Matcher", False, "reset", "()", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.util.regex", "Matcher", False, "reset", "(CharSequence)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.regex", "Matcher", False, "reset", "(CharSequence)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util.regex", "Matcher", False, "reset", "(CharSequence)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.regex", "Matcher", False, "toMatchResult", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.regex", "Matcher", False, "useAnchoringBounds", "(boolean)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.util.regex", "Matcher", False, "usePattern", "(Pattern)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.regex", "Matcher", False, "usePattern", "(Pattern)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.util.regex", "Matcher", False, "useTransparentBounds", "(boolean)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.util.regex", "Pattern", False, "compile", "(String,int)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util.regex", "Pattern", False, "pattern", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.regex", "PatternSyntaxException", True, "PatternSyntaxException", "(String,String,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.regex", "PatternSyntaxException", True, "PatternSyntaxException", "(String,String,int)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.util.regex", "PatternSyntaxException", True, "getDescription", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.regex", "PatternSyntaxException", True, "getPattern", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["java.util.regex", "MatchResult", "end", "()", "summary", "df-generated"] + - ["java.util.regex", "MatchResult", "end", "(int)", "summary", "df-generated"] + - ["java.util.regex", "MatchResult", "groupCount", "()", "summary", "df-generated"] + - ["java.util.regex", "MatchResult", "start", "()", "summary", "df-generated"] + - ["java.util.regex", "MatchResult", "start", "(int)", "summary", "df-generated"] + - ["java.util.regex", "Matcher", "end", "(String)", "summary", "df-generated"] + - ["java.util.regex", "Matcher", "hasAnchoringBounds", "()", "summary", "df-generated"] + - ["java.util.regex", "Matcher", "hasTransparentBounds", "()", "summary", "df-generated"] + - ["java.util.regex", "Matcher", "hitEnd", "()", "summary", "df-generated"] + - ["java.util.regex", "Matcher", "lookingAt", "()", "summary", "df-generated"] + - ["java.util.regex", "Matcher", "regionEnd", "()", "summary", "df-generated"] + - ["java.util.regex", "Matcher", "regionStart", "()", "summary", "df-generated"] + - ["java.util.regex", "Matcher", "requireEnd", "()", "summary", "df-generated"] + - ["java.util.regex", "Matcher", "results", "()", "summary", "df-generated"] + - ["java.util.regex", "Matcher", "start", "(String)", "summary", "df-generated"] + - ["java.util.regex", "Pattern", "asMatchPredicate", "()", "summary", "df-generated"] + - ["java.util.regex", "Pattern", "asPredicate", "()", "summary", "df-generated"] + - ["java.util.regex", "Pattern", "flags", "()", "summary", "df-generated"] + - ["java.util.regex", "Pattern", "matches", "(String,CharSequence)", "summary", "df-generated"] + - ["java.util.regex", "Pattern", "splitAsStream", "(CharSequence)", "summary", "df-generated"] + - ["java.util.regex", "PatternSyntaxException", "getIndex", "()", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/java.util.spi.model.yml b/java/ql/lib/ext/generated/java.util.spi.model.yml new file mode 100644 index 00000000000..b2bdab212b0 --- /dev/null +++ b/java/ql/lib/ext/generated/java.util.spi.model.yml @@ -0,0 +1,25 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["java.util.spi", "CalendarDataProvider", "getFirstDayOfWeek", "(Locale)", "summary", "df-generated"] + - ["java.util.spi", "CalendarDataProvider", "getMinimalDaysInFirstWeek", "(Locale)", "summary", "df-generated"] + - ["java.util.spi", "CalendarNameProvider", "getDisplayName", "(String,int,int,int,Locale)", "summary", "df-generated"] + - ["java.util.spi", "CalendarNameProvider", "getDisplayNames", "(String,int,int,Locale)", "summary", "df-generated"] + - ["java.util.spi", "CurrencyNameProvider", "getDisplayName", "(String,Locale)", "summary", "df-generated"] + - ["java.util.spi", "CurrencyNameProvider", "getSymbol", "(String,Locale)", "summary", "df-generated"] + - ["java.util.spi", "LocaleNameProvider", "getDisplayCountry", "(String,Locale)", "summary", "df-generated"] + - ["java.util.spi", "LocaleNameProvider", "getDisplayLanguage", "(String,Locale)", "summary", "df-generated"] + - ["java.util.spi", "LocaleNameProvider", "getDisplayScript", "(String,Locale)", "summary", "df-generated"] + - ["java.util.spi", "LocaleNameProvider", "getDisplayUnicodeExtensionKey", "(String,Locale)", "summary", "df-generated"] + - ["java.util.spi", "LocaleNameProvider", "getDisplayUnicodeExtensionType", "(String,String,Locale)", "summary", "df-generated"] + - ["java.util.spi", "LocaleNameProvider", "getDisplayVariant", "(String,Locale)", "summary", "df-generated"] + - ["java.util.spi", "LocaleServiceProvider", "getAvailableLocales", "()", "summary", "df-generated"] + - ["java.util.spi", "LocaleServiceProvider", "isSupportedLocale", "(Locale)", "summary", "df-generated"] + - ["java.util.spi", "ResourceBundleProvider", "getBundle", "(String,Locale)", "summary", "df-generated"] + - ["java.util.spi", "TimeZoneNameProvider", "getDisplayName", "(String,boolean,int,Locale)", "summary", "df-generated"] + - ["java.util.spi", "TimeZoneNameProvider", "getGenericDisplayName", "(String,int,Locale)", "summary", "df-generated"] + - ["java.util.spi", "ToolProvider", "findFirst", "(String)", "summary", "df-generated"] + - ["java.util.spi", "ToolProvider", "run", "(PrintStream,PrintStream,String[])", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/java.util.stream.model.yml b/java/ql/lib/ext/generated/java.util.stream.model.yml new file mode 100644 index 00000000000..ce97043b8dd --- /dev/null +++ b/java/ql/lib/ext/generated/java.util.stream.model.yml @@ -0,0 +1,211 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["java.util.stream", "Collector", True, "of", "(Supplier,BiConsumer,BinaryOperator,Collector$Characteristics[])", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "Collector", True, "of", "(Supplier,BiConsumer,BinaryOperator,Collector$Characteristics[])", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "Collector", True, "of", "(Supplier,BiConsumer,BinaryOperator,Collector$Characteristics[])", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "Collector", True, "of", "(Supplier,BiConsumer,BinaryOperator,Function,Collector$Characteristics[])", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "Collector", True, "of", "(Supplier,BiConsumer,BinaryOperator,Function,Collector$Characteristics[])", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "Collector", True, "of", "(Supplier,BiConsumer,BinaryOperator,Function,Collector$Characteristics[])", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "Collector", True, "of", "(Supplier,BiConsumer,BinaryOperator,Function,Collector$Characteristics[])", "", "Argument[3]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "Collectors", False, "collectingAndThen", "(Collector,Function)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "Collectors", False, "filtering", "(Predicate,Collector)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "Collectors", False, "flatMapping", "(Function,Collector)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "Collectors", False, "groupingBy", "(Function,Supplier,Collector)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "Collectors", False, "groupingByConcurrent", "(Function,Supplier,Collector)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "Collectors", False, "mapping", "(Function,Collector)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "Collectors", False, "teeing", "(Collector,Collector,BiFunction)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "Collectors", False, "toCollection", "(Supplier)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "Collectors", False, "toConcurrentMap", "(Function,Function,BinaryOperator,Supplier)", "", "Argument[3]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "Collectors", False, "toMap", "(Function,Function,BinaryOperator,Supplier)", "", "Argument[3]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "DoubleStream$Builder", True, "add", "(double)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.util.stream", "DoubleStream$Builder", True, "build", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "DoubleStream", True, "boxed", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "DoubleStream", True, "concat", "(DoubleStream,DoubleStream)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "DoubleStream", True, "concat", "(DoubleStream,DoubleStream)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "DoubleStream", True, "distinct", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "DoubleStream", True, "dropWhile", "(DoublePredicate)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "DoubleStream", True, "dropWhile", "(DoublePredicate)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "DoubleStream", True, "filter", "(DoublePredicate)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "DoubleStream", True, "flatMap", "(DoubleFunction)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "DoubleStream", True, "generate", "(DoubleSupplier)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "DoubleStream", True, "limit", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "DoubleStream", True, "map", "(DoubleUnaryOperator)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "DoubleStream", True, "mapMulti", "(DoubleStream$DoubleMapMultiConsumer)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "DoubleStream", True, "mapToInt", "(DoubleToIntFunction)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "DoubleStream", True, "mapToLong", "(DoubleToLongFunction)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "DoubleStream", True, "mapToObj", "(DoubleFunction)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "DoubleStream", True, "peek", "(DoubleConsumer)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "DoubleStream", True, "skip", "(long)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.util.stream", "DoubleStream", True, "sorted", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "DoubleStream", True, "takeWhile", "(DoublePredicate)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "DoubleStream", True, "takeWhile", "(DoublePredicate)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "IntStream$Builder", True, "add", "(int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.util.stream", "IntStream$Builder", True, "build", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "IntStream", True, "asDoubleStream", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "IntStream", True, "asLongStream", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "IntStream", True, "boxed", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "IntStream", True, "concat", "(IntStream,IntStream)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "IntStream", True, "concat", "(IntStream,IntStream)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "IntStream", True, "distinct", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "IntStream", True, "dropWhile", "(IntPredicate)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "IntStream", True, "dropWhile", "(IntPredicate)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "IntStream", True, "filter", "(IntPredicate)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "IntStream", True, "flatMap", "(IntFunction)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "IntStream", True, "generate", "(IntSupplier)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "IntStream", True, "limit", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "IntStream", True, "map", "(IntUnaryOperator)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "IntStream", True, "mapMulti", "(IntStream$IntMapMultiConsumer)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "IntStream", True, "mapToDouble", "(IntToDoubleFunction)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "IntStream", True, "mapToLong", "(IntToLongFunction)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "IntStream", True, "mapToObj", "(IntFunction)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "IntStream", True, "peek", "(IntConsumer)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "IntStream", True, "skip", "(long)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.util.stream", "IntStream", True, "sorted", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "IntStream", True, "takeWhile", "(IntPredicate)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "IntStream", True, "takeWhile", "(IntPredicate)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "LongStream$Builder", True, "add", "(long)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.util.stream", "LongStream$Builder", True, "build", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "LongStream", True, "asDoubleStream", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "LongStream", True, "boxed", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "LongStream", True, "concat", "(LongStream,LongStream)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "LongStream", True, "concat", "(LongStream,LongStream)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "LongStream", True, "distinct", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "LongStream", True, "dropWhile", "(LongPredicate)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "LongStream", True, "dropWhile", "(LongPredicate)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "LongStream", True, "filter", "(LongPredicate)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "LongStream", True, "flatMap", "(LongFunction)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "LongStream", True, "generate", "(LongSupplier)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "LongStream", True, "limit", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "LongStream", True, "map", "(LongUnaryOperator)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "LongStream", True, "mapMulti", "(LongStream$LongMapMultiConsumer)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "LongStream", True, "mapToDouble", "(LongToDoubleFunction)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "LongStream", True, "mapToInt", "(LongToIntFunction)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "LongStream", True, "mapToObj", "(LongFunction)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "LongStream", True, "peek", "(LongConsumer)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "LongStream", True, "skip", "(long)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.util.stream", "LongStream", True, "sorted", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "LongStream", True, "takeWhile", "(LongPredicate)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "LongStream", True, "takeWhile", "(LongPredicate)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "Sink$ChainedDouble", True, "ChainedDouble", "(Sink)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.stream", "Sink$ChainedInt", True, "ChainedInt", "(Sink)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.stream", "Sink$ChainedLong", True, "ChainedLong", "(Sink)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.stream", "Sink$ChainedReference", True, "ChainedReference", "(Sink)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.stream", "Stream$Builder", True, "add", "(Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.stream", "Stream$Builder", True, "add", "(Object)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.util.stream", "StreamSupport", False, "doubleStream", "(Spliterator$OfDouble,boolean)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "StreamSupport", False, "doubleStream", "(Supplier,int,boolean)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "StreamSupport", False, "intStream", "(Spliterator$OfInt,boolean)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "StreamSupport", False, "intStream", "(Supplier,int,boolean)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "StreamSupport", False, "longStream", "(Spliterator$OfLong,boolean)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "StreamSupport", False, "longStream", "(Supplier,int,boolean)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "StreamSupport", False, "stream", "(Spliterator,boolean)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "StreamSupport", False, "stream", "(Supplier,int,boolean)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["java.util.stream", "Collectors", "averagingDouble", "(ToDoubleFunction)", "summary", "df-generated"] + - ["java.util.stream", "Collectors", "averagingInt", "(ToIntFunction)", "summary", "df-generated"] + - ["java.util.stream", "Collectors", "averagingLong", "(ToLongFunction)", "summary", "df-generated"] + - ["java.util.stream", "Collectors", "counting", "()", "summary", "df-generated"] + - ["java.util.stream", "Collectors", "groupingBy", "(Function)", "summary", "df-generated"] + - ["java.util.stream", "Collectors", "groupingBy", "(Function,Collector)", "summary", "df-generated"] + - ["java.util.stream", "Collectors", "groupingByConcurrent", "(Function)", "summary", "df-generated"] + - ["java.util.stream", "Collectors", "groupingByConcurrent", "(Function,Collector)", "summary", "df-generated"] + - ["java.util.stream", "Collectors", "maxBy", "(Comparator)", "summary", "df-generated"] + - ["java.util.stream", "Collectors", "minBy", "(Comparator)", "summary", "df-generated"] + - ["java.util.stream", "Collectors", "partitioningBy", "(Predicate)", "summary", "df-generated"] + - ["java.util.stream", "Collectors", "partitioningBy", "(Predicate,Collector)", "summary", "df-generated"] + - ["java.util.stream", "Collectors", "reducing", "(BinaryOperator)", "summary", "df-generated"] + - ["java.util.stream", "Collectors", "reducing", "(Object,BinaryOperator)", "summary", "df-generated"] + - ["java.util.stream", "Collectors", "reducing", "(Object,Function,BinaryOperator)", "summary", "df-generated"] + - ["java.util.stream", "Collectors", "summarizingDouble", "(ToDoubleFunction)", "summary", "df-generated"] + - ["java.util.stream", "Collectors", "summarizingInt", "(ToIntFunction)", "summary", "df-generated"] + - ["java.util.stream", "Collectors", "summarizingLong", "(ToLongFunction)", "summary", "df-generated"] + - ["java.util.stream", "Collectors", "summingDouble", "(ToDoubleFunction)", "summary", "df-generated"] + - ["java.util.stream", "Collectors", "summingInt", "(ToIntFunction)", "summary", "df-generated"] + - ["java.util.stream", "Collectors", "summingLong", "(ToLongFunction)", "summary", "df-generated"] + - ["java.util.stream", "Collectors", "toConcurrentMap", "(Function,Function)", "summary", "df-generated"] + - ["java.util.stream", "Collectors", "toConcurrentMap", "(Function,Function,BinaryOperator)", "summary", "df-generated"] + - ["java.util.stream", "Collectors", "toUnmodifiableList", "()", "summary", "df-generated"] + - ["java.util.stream", "Collectors", "toUnmodifiableMap", "(Function,Function)", "summary", "df-generated"] + - ["java.util.stream", "Collectors", "toUnmodifiableMap", "(Function,Function,BinaryOperator)", "summary", "df-generated"] + - ["java.util.stream", "Collectors", "toUnmodifiableSet", "()", "summary", "df-generated"] + - ["java.util.stream", "DoubleStream", "allMatch", "(DoublePredicate)", "summary", "df-generated"] + - ["java.util.stream", "DoubleStream", "anyMatch", "(DoublePredicate)", "summary", "df-generated"] + - ["java.util.stream", "DoubleStream", "average", "()", "summary", "df-generated"] + - ["java.util.stream", "DoubleStream", "builder", "()", "summary", "df-generated"] + - ["java.util.stream", "DoubleStream", "collect", "(Supplier,ObjDoubleConsumer,BiConsumer)", "summary", "df-generated"] + - ["java.util.stream", "DoubleStream", "count", "()", "summary", "df-generated"] + - ["java.util.stream", "DoubleStream", "empty", "()", "summary", "df-generated"] + - ["java.util.stream", "DoubleStream", "findAny", "()", "summary", "df-generated"] + - ["java.util.stream", "DoubleStream", "findFirst", "()", "summary", "df-generated"] + - ["java.util.stream", "DoubleStream", "forEach", "(DoubleConsumer)", "summary", "df-generated"] + - ["java.util.stream", "DoubleStream", "forEachOrdered", "(DoubleConsumer)", "summary", "df-generated"] + - ["java.util.stream", "DoubleStream", "iterate", "(double,DoublePredicate,DoubleUnaryOperator)", "summary", "df-generated"] + - ["java.util.stream", "DoubleStream", "iterate", "(double,DoubleUnaryOperator)", "summary", "df-generated"] + - ["java.util.stream", "DoubleStream", "max", "()", "summary", "df-generated"] + - ["java.util.stream", "DoubleStream", "min", "()", "summary", "df-generated"] + - ["java.util.stream", "DoubleStream", "noneMatch", "(DoublePredicate)", "summary", "df-generated"] + - ["java.util.stream", "DoubleStream", "of", "(double)", "summary", "df-generated"] + - ["java.util.stream", "DoubleStream", "of", "(double[])", "summary", "df-generated"] + - ["java.util.stream", "DoubleStream", "reduce", "(DoubleBinaryOperator)", "summary", "df-generated"] + - ["java.util.stream", "DoubleStream", "reduce", "(double,DoubleBinaryOperator)", "summary", "df-generated"] + - ["java.util.stream", "DoubleStream", "sum", "()", "summary", "df-generated"] + - ["java.util.stream", "DoubleStream", "summaryStatistics", "()", "summary", "df-generated"] + - ["java.util.stream", "DoubleStream", "toArray", "()", "summary", "df-generated"] + - ["java.util.stream", "IntStream", "allMatch", "(IntPredicate)", "summary", "df-generated"] + - ["java.util.stream", "IntStream", "anyMatch", "(IntPredicate)", "summary", "df-generated"] + - ["java.util.stream", "IntStream", "average", "()", "summary", "df-generated"] + - ["java.util.stream", "IntStream", "builder", "()", "summary", "df-generated"] + - ["java.util.stream", "IntStream", "collect", "(Supplier,ObjIntConsumer,BiConsumer)", "summary", "df-generated"] + - ["java.util.stream", "IntStream", "count", "()", "summary", "df-generated"] + - ["java.util.stream", "IntStream", "empty", "()", "summary", "df-generated"] + - ["java.util.stream", "IntStream", "findAny", "()", "summary", "df-generated"] + - ["java.util.stream", "IntStream", "findFirst", "()", "summary", "df-generated"] + - ["java.util.stream", "IntStream", "forEach", "(IntConsumer)", "summary", "df-generated"] + - ["java.util.stream", "IntStream", "forEachOrdered", "(IntConsumer)", "summary", "df-generated"] + - ["java.util.stream", "IntStream", "iterate", "(int,IntPredicate,IntUnaryOperator)", "summary", "df-generated"] + - ["java.util.stream", "IntStream", "iterate", "(int,IntUnaryOperator)", "summary", "df-generated"] + - ["java.util.stream", "IntStream", "max", "()", "summary", "df-generated"] + - ["java.util.stream", "IntStream", "min", "()", "summary", "df-generated"] + - ["java.util.stream", "IntStream", "noneMatch", "(IntPredicate)", "summary", "df-generated"] + - ["java.util.stream", "IntStream", "of", "(int)", "summary", "df-generated"] + - ["java.util.stream", "IntStream", "of", "(int[])", "summary", "df-generated"] + - ["java.util.stream", "IntStream", "rangeClosed", "(int,int)", "summary", "df-generated"] + - ["java.util.stream", "IntStream", "reduce", "(IntBinaryOperator)", "summary", "df-generated"] + - ["java.util.stream", "IntStream", "reduce", "(int,IntBinaryOperator)", "summary", "df-generated"] + - ["java.util.stream", "IntStream", "sum", "()", "summary", "df-generated"] + - ["java.util.stream", "IntStream", "summaryStatistics", "()", "summary", "df-generated"] + - ["java.util.stream", "IntStream", "toArray", "()", "summary", "df-generated"] + - ["java.util.stream", "LongStream", "allMatch", "(LongPredicate)", "summary", "df-generated"] + - ["java.util.stream", "LongStream", "anyMatch", "(LongPredicate)", "summary", "df-generated"] + - ["java.util.stream", "LongStream", "average", "()", "summary", "df-generated"] + - ["java.util.stream", "LongStream", "builder", "()", "summary", "df-generated"] + - ["java.util.stream", "LongStream", "collect", "(Supplier,ObjLongConsumer,BiConsumer)", "summary", "df-generated"] + - ["java.util.stream", "LongStream", "count", "()", "summary", "df-generated"] + - ["java.util.stream", "LongStream", "empty", "()", "summary", "df-generated"] + - ["java.util.stream", "LongStream", "findAny", "()", "summary", "df-generated"] + - ["java.util.stream", "LongStream", "findFirst", "()", "summary", "df-generated"] + - ["java.util.stream", "LongStream", "forEach", "(LongConsumer)", "summary", "df-generated"] + - ["java.util.stream", "LongStream", "forEachOrdered", "(LongConsumer)", "summary", "df-generated"] + - ["java.util.stream", "LongStream", "iterate", "(long,LongPredicate,LongUnaryOperator)", "summary", "df-generated"] + - ["java.util.stream", "LongStream", "iterate", "(long,LongUnaryOperator)", "summary", "df-generated"] + - ["java.util.stream", "LongStream", "max", "()", "summary", "df-generated"] + - ["java.util.stream", "LongStream", "min", "()", "summary", "df-generated"] + - ["java.util.stream", "LongStream", "noneMatch", "(LongPredicate)", "summary", "df-generated"] + - ["java.util.stream", "LongStream", "of", "(long)", "summary", "df-generated"] + - ["java.util.stream", "LongStream", "of", "(long[])", "summary", "df-generated"] + - ["java.util.stream", "LongStream", "range", "(long,long)", "summary", "df-generated"] + - ["java.util.stream", "LongStream", "rangeClosed", "(long,long)", "summary", "df-generated"] + - ["java.util.stream", "LongStream", "reduce", "(LongBinaryOperator)", "summary", "df-generated"] + - ["java.util.stream", "LongStream", "reduce", "(long,LongBinaryOperator)", "summary", "df-generated"] + - ["java.util.stream", "LongStream", "sum", "()", "summary", "df-generated"] + - ["java.util.stream", "LongStream", "summaryStatistics", "()", "summary", "df-generated"] + - ["java.util.stream", "LongStream", "toArray", "()", "summary", "df-generated"] + - ["java.util.stream", "Stream", "builder", "()", "summary", "df-generated"] + - ["java.util.stream", "Stream", "empty", "()", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/java.util.zip.model.yml b/java/ql/lib/ext/generated/java.util.zip.model.yml new file mode 100644 index 00000000000..8aaf1118ad6 --- /dev/null +++ b/java/ql/lib/ext/generated/java.util.zip.model.yml @@ -0,0 +1,155 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["java.util.zip", "CheckedInputStream", True, "CheckedInputStream", "(InputStream,Checksum)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.zip", "CheckedInputStream", True, "CheckedInputStream", "(InputStream,Checksum)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.util.zip", "CheckedInputStream", True, "getChecksum", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.zip", "CheckedOutputStream", True, "CheckedOutputStream", "(OutputStream,Checksum)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.zip", "CheckedOutputStream", True, "CheckedOutputStream", "(OutputStream,Checksum)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.util.zip", "CheckedOutputStream", True, "getChecksum", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.zip", "DataFormatException", True, "DataFormatException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.zip", "Deflater", True, "setInput", "(ByteBuffer)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.zip", "Deflater", True, "setInput", "(byte[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.zip", "Deflater", True, "setInput", "(byte[],int,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.zip", "DeflaterInputStream", True, "DeflaterInputStream", "(InputStream)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.zip", "DeflaterInputStream", True, "DeflaterInputStream", "(InputStream,Deflater)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.zip", "DeflaterInputStream", True, "DeflaterInputStream", "(InputStream,Deflater)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.util.zip", "DeflaterInputStream", True, "DeflaterInputStream", "(InputStream,Deflater,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.zip", "DeflaterInputStream", True, "DeflaterInputStream", "(InputStream,Deflater,int)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.util.zip", "DeflaterOutputStream", True, "DeflaterOutputStream", "(OutputStream)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.zip", "DeflaterOutputStream", True, "DeflaterOutputStream", "(OutputStream,Deflater)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.zip", "DeflaterOutputStream", True, "DeflaterOutputStream", "(OutputStream,Deflater)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.util.zip", "DeflaterOutputStream", True, "DeflaterOutputStream", "(OutputStream,Deflater,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.zip", "DeflaterOutputStream", True, "DeflaterOutputStream", "(OutputStream,Deflater,boolean)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.util.zip", "DeflaterOutputStream", True, "DeflaterOutputStream", "(OutputStream,Deflater,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.zip", "DeflaterOutputStream", True, "DeflaterOutputStream", "(OutputStream,Deflater,int)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.util.zip", "DeflaterOutputStream", True, "DeflaterOutputStream", "(OutputStream,Deflater,int,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.zip", "DeflaterOutputStream", True, "DeflaterOutputStream", "(OutputStream,Deflater,int,boolean)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.util.zip", "DeflaterOutputStream", True, "DeflaterOutputStream", "(OutputStream,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.zip", "GZIPOutputStream", True, "GZIPOutputStream", "(OutputStream)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.zip", "GZIPOutputStream", True, "GZIPOutputStream", "(OutputStream,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.zip", "GZIPOutputStream", True, "GZIPOutputStream", "(OutputStream,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.zip", "GZIPOutputStream", True, "GZIPOutputStream", "(OutputStream,int,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.zip", "Inflater", True, "setInput", "(ByteBuffer)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.zip", "Inflater", True, "setInput", "(byte[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.zip", "Inflater", True, "setInput", "(byte[],int,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.zip", "InflaterInputStream", True, "InflaterInputStream", "(InputStream)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.zip", "InflaterInputStream", True, "InflaterInputStream", "(InputStream,Inflater)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.zip", "InflaterInputStream", True, "InflaterInputStream", "(InputStream,Inflater)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.util.zip", "InflaterInputStream", True, "InflaterInputStream", "(InputStream,Inflater,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.zip", "InflaterInputStream", True, "InflaterInputStream", "(InputStream,Inflater,int)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.util.zip", "InflaterOutputStream", True, "InflaterOutputStream", "(OutputStream)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.zip", "InflaterOutputStream", True, "InflaterOutputStream", "(OutputStream,Inflater)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.zip", "InflaterOutputStream", True, "InflaterOutputStream", "(OutputStream,Inflater)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.util.zip", "InflaterOutputStream", True, "InflaterOutputStream", "(OutputStream,Inflater,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.zip", "InflaterOutputStream", True, "InflaterOutputStream", "(OutputStream,Inflater,int)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.util.zip", "ZipEntry", True, "ZipEntry", "(ZipEntry)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.zip", "ZipEntry", True, "getComment", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.zip", "ZipEntry", True, "getCreationTime", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.zip", "ZipEntry", True, "getExtra", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.zip", "ZipEntry", True, "getLastAccessTime", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.zip", "ZipEntry", True, "getLastModifiedTime", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.zip", "ZipEntry", True, "getName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.zip", "ZipEntry", True, "setComment", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.zip", "ZipEntry", True, "setCreationTime", "(FileTime)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.zip", "ZipEntry", True, "setCreationTime", "(FileTime)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.util.zip", "ZipEntry", True, "setExtra", "(byte[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.zip", "ZipEntry", True, "setLastAccessTime", "(FileTime)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.zip", "ZipEntry", True, "setLastAccessTime", "(FileTime)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.util.zip", "ZipEntry", True, "setLastModifiedTime", "(FileTime)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.zip", "ZipEntry", True, "setLastModifiedTime", "(FileTime)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.util.zip", "ZipError", True, "ZipError", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.zip", "ZipException", True, "ZipException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.zip", "ZipFile", True, "ZipFile", "(File)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.zip", "ZipFile", True, "ZipFile", "(File,Charset)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.zip", "ZipFile", True, "ZipFile", "(File,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.zip", "ZipFile", True, "ZipFile", "(File,int,Charset)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.zip", "ZipFile", True, "ZipFile", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.zip", "ZipFile", True, "ZipFile", "(String,Charset)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.zip", "ZipFile", True, "getEntry", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.zip", "ZipFile", True, "getEntry", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util.zip", "ZipFile", True, "getInputStream", "(ZipEntry)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.zip", "ZipFile", True, "getInputStream", "(ZipEntry)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util.zip", "ZipFile", True, "getInputStream", "(ZipEntry)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.zip", "ZipFile", True, "getName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.zip", "ZipInputStream", True, "getNextEntry", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.zip", "ZipOutputStream", True, "ZipOutputStream", "(OutputStream)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.zip", "ZipOutputStream", True, "ZipOutputStream", "(OutputStream,Charset)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.zip", "ZipOutputStream", True, "putNextEntry", "(ZipEntry)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.zip", "ZipOutputStream", True, "setComment", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["java.util.zip", "Checksum", "getValue", "()", "summary", "df-generated"] + - ["java.util.zip", "Checksum", "reset", "()", "summary", "df-generated"] + - ["java.util.zip", "Checksum", "update", "(ByteBuffer)", "summary", "df-generated"] + - ["java.util.zip", "Checksum", "update", "(byte[])", "summary", "df-generated"] + - ["java.util.zip", "Checksum", "update", "(byte[],int,int)", "summary", "df-generated"] + - ["java.util.zip", "Checksum", "update", "(int)", "summary", "df-generated"] + - ["java.util.zip", "Deflater", "Deflater", "(int)", "summary", "df-generated"] + - ["java.util.zip", "Deflater", "Deflater", "(int,boolean)", "summary", "df-generated"] + - ["java.util.zip", "Deflater", "deflate", "(ByteBuffer)", "summary", "df-generated"] + - ["java.util.zip", "Deflater", "deflate", "(ByteBuffer,int)", "summary", "df-generated"] + - ["java.util.zip", "Deflater", "deflate", "(byte[])", "summary", "df-generated"] + - ["java.util.zip", "Deflater", "deflate", "(byte[],int,int)", "summary", "df-generated"] + - ["java.util.zip", "Deflater", "deflate", "(byte[],int,int,int)", "summary", "df-generated"] + - ["java.util.zip", "Deflater", "end", "()", "summary", "df-generated"] + - ["java.util.zip", "Deflater", "finish", "()", "summary", "df-generated"] + - ["java.util.zip", "Deflater", "finished", "()", "summary", "df-generated"] + - ["java.util.zip", "Deflater", "getAdler", "()", "summary", "df-generated"] + - ["java.util.zip", "Deflater", "getBytesRead", "()", "summary", "df-generated"] + - ["java.util.zip", "Deflater", "getBytesWritten", "()", "summary", "df-generated"] + - ["java.util.zip", "Deflater", "getTotalIn", "()", "summary", "df-generated"] + - ["java.util.zip", "Deflater", "getTotalOut", "()", "summary", "df-generated"] + - ["java.util.zip", "Deflater", "needsInput", "()", "summary", "df-generated"] + - ["java.util.zip", "Deflater", "reset", "()", "summary", "df-generated"] + - ["java.util.zip", "Deflater", "setDictionary", "(ByteBuffer)", "summary", "df-generated"] + - ["java.util.zip", "Deflater", "setDictionary", "(byte[])", "summary", "df-generated"] + - ["java.util.zip", "Deflater", "setDictionary", "(byte[],int,int)", "summary", "df-generated"] + - ["java.util.zip", "Deflater", "setLevel", "(int)", "summary", "df-generated"] + - ["java.util.zip", "Deflater", "setStrategy", "(int)", "summary", "df-generated"] + - ["java.util.zip", "DeflaterOutputStream", "finish", "()", "summary", "df-generated"] + - ["java.util.zip", "Inflater", "Inflater", "(boolean)", "summary", "df-generated"] + - ["java.util.zip", "Inflater", "end", "()", "summary", "df-generated"] + - ["java.util.zip", "Inflater", "finished", "()", "summary", "df-generated"] + - ["java.util.zip", "Inflater", "getAdler", "()", "summary", "df-generated"] + - ["java.util.zip", "Inflater", "getBytesRead", "()", "summary", "df-generated"] + - ["java.util.zip", "Inflater", "getBytesWritten", "()", "summary", "df-generated"] + - ["java.util.zip", "Inflater", "getRemaining", "()", "summary", "df-generated"] + - ["java.util.zip", "Inflater", "getTotalIn", "()", "summary", "df-generated"] + - ["java.util.zip", "Inflater", "getTotalOut", "()", "summary", "df-generated"] + - ["java.util.zip", "Inflater", "inflate", "(ByteBuffer)", "summary", "df-generated"] + - ["java.util.zip", "Inflater", "inflate", "(byte[])", "summary", "df-generated"] + - ["java.util.zip", "Inflater", "inflate", "(byte[],int,int)", "summary", "df-generated"] + - ["java.util.zip", "Inflater", "needsDictionary", "()", "summary", "df-generated"] + - ["java.util.zip", "Inflater", "needsInput", "()", "summary", "df-generated"] + - ["java.util.zip", "Inflater", "reset", "()", "summary", "df-generated"] + - ["java.util.zip", "Inflater", "setDictionary", "(ByteBuffer)", "summary", "df-generated"] + - ["java.util.zip", "Inflater", "setDictionary", "(byte[])", "summary", "df-generated"] + - ["java.util.zip", "Inflater", "setDictionary", "(byte[],int,int)", "summary", "df-generated"] + - ["java.util.zip", "InflaterOutputStream", "finish", "()", "summary", "df-generated"] + - ["java.util.zip", "ZipEntry", "getCompressedSize", "()", "summary", "df-generated"] + - ["java.util.zip", "ZipEntry", "getCrc", "()", "summary", "df-generated"] + - ["java.util.zip", "ZipEntry", "getMethod", "()", "summary", "df-generated"] + - ["java.util.zip", "ZipEntry", "getSize", "()", "summary", "df-generated"] + - ["java.util.zip", "ZipEntry", "getTime", "()", "summary", "df-generated"] + - ["java.util.zip", "ZipEntry", "getTimeLocal", "()", "summary", "df-generated"] + - ["java.util.zip", "ZipEntry", "isDirectory", "()", "summary", "df-generated"] + - ["java.util.zip", "ZipEntry", "setCompressedSize", "(long)", "summary", "df-generated"] + - ["java.util.zip", "ZipEntry", "setCrc", "(long)", "summary", "df-generated"] + - ["java.util.zip", "ZipEntry", "setMethod", "(int)", "summary", "df-generated"] + - ["java.util.zip", "ZipEntry", "setSize", "(long)", "summary", "df-generated"] + - ["java.util.zip", "ZipEntry", "setTime", "(long)", "summary", "df-generated"] + - ["java.util.zip", "ZipEntry", "setTimeLocal", "(LocalDateTime)", "summary", "df-generated"] + - ["java.util.zip", "ZipFile", "entries", "()", "summary", "df-generated"] + - ["java.util.zip", "ZipFile", "getComment", "()", "summary", "df-generated"] + - ["java.util.zip", "ZipFile", "size", "()", "summary", "df-generated"] + - ["java.util.zip", "ZipFile", "stream", "()", "summary", "df-generated"] + - ["java.util.zip", "ZipInputStream", "closeEntry", "()", "summary", "df-generated"] + - ["java.util.zip", "ZipOutputStream", "closeEntry", "()", "summary", "df-generated"] + - ["java.util.zip", "ZipOutputStream", "setLevel", "(int)", "summary", "df-generated"] + - ["java.util.zip", "ZipOutputStream", "setMethod", "(int)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.accessibility.model.yml b/java/ql/lib/ext/generated/javax.accessibility.model.yml new file mode 100644 index 00000000000..ff17aaf81e1 --- /dev/null +++ b/java/ql/lib/ext/generated/javax.accessibility.model.yml @@ -0,0 +1,75 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.accessibility", "Accessible", True, "getAccessibleContext", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.accessibility", "AccessibleAttributeSequence", True, "AccessibleAttributeSequence", "(int,int,AttributeSet)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.accessibility", "AccessibleBundle", True, "toDisplayString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.accessibility", "AccessibleBundle", True, "toDisplayString", "(Locale)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.accessibility", "AccessibleBundle", True, "toDisplayString", "(Locale)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.accessibility", "AccessibleContext", True, "getAccessibleDescription", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.accessibility", "AccessibleContext", True, "getAccessibleName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.accessibility", "AccessibleContext", True, "getAccessibleParent", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.accessibility", "AccessibleContext", True, "getAccessibleRelationSet", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.accessibility", "AccessibleContext", True, "setAccessibleDescription", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.accessibility", "AccessibleContext", True, "setAccessibleName", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.accessibility", "AccessibleContext", True, "setAccessibleParent", "(Accessible)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.accessibility", "AccessibleRelation", True, "AccessibleRelation", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.accessibility", "AccessibleRelation", True, "AccessibleRelation", "(String,Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.accessibility", "AccessibleRelation", True, "AccessibleRelation", "(String,Object)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.accessibility", "AccessibleRelation", True, "AccessibleRelation", "(String,Object[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.accessibility", "AccessibleRelation", True, "AccessibleRelation", "(String,Object[])", "", "Argument[1].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.accessibility", "AccessibleRelation", True, "getKey", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.accessibility", "AccessibleRelation", True, "getTarget", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.accessibility", "AccessibleRelation", True, "setTarget", "(Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.accessibility", "AccessibleRelation", True, "setTarget", "(Object[])", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.accessibility", "AccessibleRelationSet", True, "AccessibleRelationSet", "(AccessibleRelation[])", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.accessibility", "AccessibleRelationSet", True, "add", "(AccessibleRelation)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.accessibility", "AccessibleRelationSet", True, "addAll", "(AccessibleRelation[])", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.accessibility", "AccessibleRelationSet", True, "get", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.accessibility", "AccessibleRelationSet", True, "toArray", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.accessibility", "AccessibleStateSet", True, "AccessibleStateSet", "(AccessibleState[])", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.accessibility", "AccessibleStateSet", True, "add", "(AccessibleState)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.accessibility", "AccessibleStateSet", True, "addAll", "(AccessibleState[])", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.accessibility", "AccessibleStateSet", True, "toArray", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.accessibility", "AccessibleTextSequence", True, "AccessibleTextSequence", "(int,int,String)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["javax.accessibility", "AccessibilityProvider", "activate", "()", "summary", "df-generated"] + - ["javax.accessibility", "AccessibilityProvider", "getName", "()", "summary", "df-generated"] + - ["javax.accessibility", "AccessibleAction", "doAccessibleAction", "(int)", "summary", "df-generated"] + - ["javax.accessibility", "AccessibleAction", "getAccessibleActionCount", "()", "summary", "df-generated"] + - ["javax.accessibility", "AccessibleAction", "getAccessibleActionDescription", "(int)", "summary", "df-generated"] + - ["javax.accessibility", "AccessibleContext", "addPropertyChangeListener", "(PropertyChangeListener)", "summary", "df-generated"] + - ["javax.accessibility", "AccessibleContext", "firePropertyChange", "(String,Object,Object)", "summary", "df-generated"] + - ["javax.accessibility", "AccessibleContext", "getAccessibleAction", "()", "summary", "df-generated"] + - ["javax.accessibility", "AccessibleContext", "getAccessibleChild", "(int)", "summary", "df-generated"] + - ["javax.accessibility", "AccessibleContext", "getAccessibleChildrenCount", "()", "summary", "df-generated"] + - ["javax.accessibility", "AccessibleContext", "getAccessibleComponent", "()", "summary", "df-generated"] + - ["javax.accessibility", "AccessibleContext", "getAccessibleEditableText", "()", "summary", "df-generated"] + - ["javax.accessibility", "AccessibleContext", "getAccessibleIcon", "()", "summary", "df-generated"] + - ["javax.accessibility", "AccessibleContext", "getAccessibleIndexInParent", "()", "summary", "df-generated"] + - ["javax.accessibility", "AccessibleContext", "getAccessibleRole", "()", "summary", "df-generated"] + - ["javax.accessibility", "AccessibleContext", "getAccessibleSelection", "()", "summary", "df-generated"] + - ["javax.accessibility", "AccessibleContext", "getAccessibleStateSet", "()", "summary", "df-generated"] + - ["javax.accessibility", "AccessibleContext", "getAccessibleTable", "()", "summary", "df-generated"] + - ["javax.accessibility", "AccessibleContext", "getAccessibleText", "()", "summary", "df-generated"] + - ["javax.accessibility", "AccessibleContext", "getAccessibleValue", "()", "summary", "df-generated"] + - ["javax.accessibility", "AccessibleContext", "getLocale", "()", "summary", "df-generated"] + - ["javax.accessibility", "AccessibleContext", "removePropertyChangeListener", "(PropertyChangeListener)", "summary", "df-generated"] + - ["javax.accessibility", "AccessibleHyperlink", "getAccessibleActionAnchor", "(int)", "summary", "df-generated"] + - ["javax.accessibility", "AccessibleHyperlink", "getAccessibleActionObject", "(int)", "summary", "df-generated"] + - ["javax.accessibility", "AccessibleHyperlink", "getEndIndex", "()", "summary", "df-generated"] + - ["javax.accessibility", "AccessibleHyperlink", "getStartIndex", "()", "summary", "df-generated"] + - ["javax.accessibility", "AccessibleHyperlink", "isValid", "()", "summary", "df-generated"] + - ["javax.accessibility", "AccessibleRelationSet", "clear", "()", "summary", "df-generated"] + - ["javax.accessibility", "AccessibleRelationSet", "contains", "(String)", "summary", "df-generated"] + - ["javax.accessibility", "AccessibleRelationSet", "remove", "(AccessibleRelation)", "summary", "df-generated"] + - ["javax.accessibility", "AccessibleRelationSet", "size", "()", "summary", "df-generated"] + - ["javax.accessibility", "AccessibleStateSet", "clear", "()", "summary", "df-generated"] + - ["javax.accessibility", "AccessibleStateSet", "contains", "(AccessibleState)", "summary", "df-generated"] + - ["javax.accessibility", "AccessibleStateSet", "remove", "(AccessibleState)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.annotation.processing.model.yml b/java/ql/lib/ext/generated/javax.annotation.processing.model.yml new file mode 100644 index 00000000000..6f80ce5dce9 --- /dev/null +++ b/java/ql/lib/ext/generated/javax.annotation.processing.model.yml @@ -0,0 +1,25 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.annotation.processing", "Completion", True, "getMessage", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.annotation.processing", "Completion", True, "getValue", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.annotation.processing", "Completions", True, "of", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.annotation.processing", "Completions", True, "of", "(String,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.annotation.processing", "Completions", True, "of", "(String,String)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.annotation.processing", "FilerException", True, "FilerException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.annotation.processing", "Processor", True, "init", "(ProcessingEnvironment)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.annotation.processing", "RoundEnvironment", True, "getElementsAnnotatedWithAny", "(Set)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.annotation.processing", "RoundEnvironment", True, "getElementsAnnotatedWithAny", "(TypeElement[])", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["javax.annotation.processing", "ProcessingEnvironment", "isPreviewEnabled", "()", "summary", "df-generated"] + - ["javax.annotation.processing", "Processor", "getCompletions", "(Element,AnnotationMirror,ExecutableElement,String)", "summary", "df-generated"] + - ["javax.annotation.processing", "Processor", "getSupportedAnnotationTypes", "()", "summary", "df-generated"] + - ["javax.annotation.processing", "Processor", "getSupportedOptions", "()", "summary", "df-generated"] + - ["javax.annotation.processing", "Processor", "getSupportedSourceVersion", "()", "summary", "df-generated"] + - ["javax.annotation.processing", "Processor", "process", "(Set,RoundEnvironment)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.crypto.model.yml b/java/ql/lib/ext/generated/javax.crypto.model.yml new file mode 100644 index 00000000000..727ba26863f --- /dev/null +++ b/java/ql/lib/ext/generated/javax.crypto.model.yml @@ -0,0 +1,119 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.crypto", "AEADBadTagException", True, "AEADBadTagException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.crypto", "BadPaddingException", True, "BadPaddingException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.crypto", "CipherInputStream", True, "CipherInputStream", "(InputStream,Cipher)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.crypto", "CipherInputStream", True, "CipherInputStream", "(InputStream,Cipher)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.crypto", "CipherOutputStream", True, "CipherOutputStream", "(OutputStream,Cipher)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.crypto", "CipherOutputStream", True, "CipherOutputStream", "(OutputStream,Cipher)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.crypto", "EncryptedPrivateKeyInfo", True, "EncryptedPrivateKeyInfo", "(AlgorithmParameters,byte[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.crypto", "EncryptedPrivateKeyInfo", True, "EncryptedPrivateKeyInfo", "(AlgorithmParameters,byte[])", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.crypto", "EncryptedPrivateKeyInfo", True, "EncryptedPrivateKeyInfo", "(String,byte[])", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.crypto", "EncryptedPrivateKeyInfo", True, "EncryptedPrivateKeyInfo", "(byte[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.crypto", "EncryptedPrivateKeyInfo", True, "getAlgParameters", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto", "EncryptedPrivateKeyInfo", True, "getEncoded", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto", "EncryptedPrivateKeyInfo", True, "getEncryptedData", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto", "EncryptedPrivateKeyInfo", True, "getKeySpec", "(Cipher)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto", "EncryptedPrivateKeyInfo", True, "getKeySpec", "(Cipher)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] + - ["javax.crypto", "EncryptedPrivateKeyInfo", True, "getKeySpec", "(Cipher)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto", "EncryptedPrivateKeyInfo", True, "getKeySpec", "(Key)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto", "EncryptedPrivateKeyInfo", True, "getKeySpec", "(Key,Provider)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto", "EncryptedPrivateKeyInfo", True, "getKeySpec", "(Key,String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto", "ExemptionMechanism", True, "getInstance", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto", "ExemptionMechanism", True, "getInstance", "(String,Provider)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto", "ExemptionMechanism", True, "getInstance", "(String,Provider)", "", "Argument[1].Element", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto", "ExemptionMechanism", True, "getInstance", "(String,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto", "ExemptionMechanism", True, "getName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto", "ExemptionMechanism", True, "getProvider", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto", "ExemptionMechanism", True, "init", "(Key)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.crypto", "ExemptionMechanism", True, "init", "(Key,AlgorithmParameterSpec)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.crypto", "ExemptionMechanism", True, "init", "(Key,AlgorithmParameters)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.crypto", "ExemptionMechanismException", True, "ExemptionMechanismException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.crypto", "IllegalBlockSizeException", True, "IllegalBlockSizeException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.crypto", "KeyAgreement", True, "doPhase", "(Key,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.crypto", "KeyAgreement", True, "generateSecret", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto", "KeyAgreement", True, "generateSecret", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto", "KeyAgreement", True, "generateSecret", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto", "KeyAgreement", True, "generateSecret", "(byte[],int)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] + - ["javax.crypto", "KeyAgreement", True, "getAlgorithm", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto", "KeyAgreement", True, "getInstance", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto", "KeyAgreement", True, "getInstance", "(String,Provider)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto", "KeyAgreement", True, "getInstance", "(String,Provider)", "", "Argument[1].Element", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto", "KeyAgreement", True, "getInstance", "(String,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto", "KeyAgreement", True, "getProvider", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto", "KeyAgreement", True, "init", "(Key)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.crypto", "KeyAgreement", True, "init", "(Key,AlgorithmParameterSpec)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.crypto", "KeyAgreement", True, "init", "(Key,AlgorithmParameterSpec,SecureRandom)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.crypto", "KeyAgreement", True, "init", "(Key,SecureRandom)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.crypto", "KeyGenerator", True, "generateKey", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto", "KeyGenerator", True, "getAlgorithm", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto", "KeyGenerator", True, "getInstance", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto", "KeyGenerator", True, "getInstance", "(String,Provider)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto", "KeyGenerator", True, "getInstance", "(String,Provider)", "", "Argument[1].Element", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto", "KeyGenerator", True, "getInstance", "(String,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto", "KeyGenerator", True, "getProvider", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto", "KeyGenerator", True, "init", "(AlgorithmParameterSpec)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.crypto", "KeyGenerator", True, "init", "(AlgorithmParameterSpec,SecureRandom)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.crypto", "KeyGenerator", True, "init", "(AlgorithmParameterSpec,SecureRandom)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.crypto", "KeyGenerator", True, "init", "(SecureRandom)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.crypto", "KeyGenerator", True, "init", "(int,SecureRandom)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.crypto", "Mac", True, "doFinal", "(byte[])", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto", "Mac", True, "doFinal", "(byte[],int)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] + - ["javax.crypto", "Mac", True, "getAlgorithm", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto", "Mac", True, "getInstance", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto", "Mac", True, "getInstance", "(String,Provider)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto", "Mac", True, "getInstance", "(String,Provider)", "", "Argument[1].Element", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto", "Mac", True, "getInstance", "(String,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto", "Mac", True, "getProvider", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto", "Mac", True, "init", "(Key,AlgorithmParameterSpec)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.crypto", "NoSuchPaddingException", True, "NoSuchPaddingException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.crypto", "SealedObject", True, "SealedObject", "(Serializable,Cipher)", "", "Argument[0]", "Argument[1]", "taint", "df-generated"] + - ["javax.crypto", "SealedObject", True, "SealedObject", "(Serializable,Cipher)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.crypto", "SealedObject", True, "SealedObject", "(Serializable,Cipher)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.crypto", "SealedObject", True, "getAlgorithm", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto", "SealedObject", True, "getObject", "(Cipher)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto", "SealedObject", True, "getObject", "(Cipher)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] + - ["javax.crypto", "SealedObject", True, "getObject", "(Cipher)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto", "SealedObject", True, "getObject", "(Key)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto", "SealedObject", True, "getObject", "(Key,String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto", "SecretKeyFactory", True, "generateSecret", "(KeySpec)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto", "SecretKeyFactory", True, "generateSecret", "(KeySpec)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto", "SecretKeyFactory", True, "getAlgorithm", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto", "SecretKeyFactory", True, "getInstance", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto", "SecretKeyFactory", True, "getInstance", "(String,Provider)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto", "SecretKeyFactory", True, "getInstance", "(String,Provider)", "", "Argument[1].Element", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto", "SecretKeyFactory", True, "getInstance", "(String,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto", "SecretKeyFactory", True, "getKeySpec", "(SecretKey,Class)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto", "SecretKeyFactory", True, "getKeySpec", "(SecretKey,Class)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto", "SecretKeyFactory", True, "getProvider", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto", "SecretKeyFactory", True, "translateKey", "(SecretKey)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto", "SecretKeyFactory", True, "translateKey", "(SecretKey)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto", "ShortBufferException", True, "ShortBufferException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["javax.crypto", "Cipher", "getBlockSize", "()", "summary", "df-generated"] + - ["javax.crypto", "Cipher", "getMaxAllowedKeyLength", "(String)", "summary", "df-generated"] + - ["javax.crypto", "Cipher", "getMaxAllowedParameterSpec", "(String)", "summary", "df-generated"] + - ["javax.crypto", "Cipher", "getOutputSize", "(int)", "summary", "df-generated"] + - ["javax.crypto", "Cipher", "init", "(int,Certificate)", "summary", "df-generated"] + - ["javax.crypto", "CipherSpi", "engineSetMode", "(String)", "summary", "df-generated"] + - ["javax.crypto", "CipherSpi", "engineSetPadding", "(String)", "summary", "df-generated"] + - ["javax.crypto", "EncryptedPrivateKeyInfo", "getAlgName", "()", "summary", "df-generated"] + - ["javax.crypto", "ExemptionMechanism", "genExemptionBlob", "()", "summary", "df-generated"] + - ["javax.crypto", "ExemptionMechanism", "genExemptionBlob", "(byte[])", "summary", "df-generated"] + - ["javax.crypto", "ExemptionMechanism", "genExemptionBlob", "(byte[],int)", "summary", "df-generated"] + - ["javax.crypto", "ExemptionMechanism", "getOutputSize", "(int)", "summary", "df-generated"] + - ["javax.crypto", "ExemptionMechanism", "isCryptoAllowed", "(Key)", "summary", "df-generated"] + - ["javax.crypto", "KeyGenerator", "init", "(int)", "summary", "df-generated"] + - ["javax.crypto", "Mac", "getMacLength", "()", "summary", "df-generated"] + - ["javax.crypto", "Mac", "reset", "()", "summary", "df-generated"] + - ["javax.crypto", "Mac", "update", "(ByteBuffer)", "summary", "df-generated"] + - ["javax.crypto", "Mac", "update", "(byte)", "summary", "df-generated"] + - ["javax.crypto", "Mac", "update", "(byte[])", "summary", "df-generated"] + - ["javax.crypto", "Mac", "update", "(byte[],int,int)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.crypto.spec.model.yml b/java/ql/lib/ext/generated/javax.crypto.spec.model.yml new file mode 100644 index 00000000000..9f7408d3e36 --- /dev/null +++ b/java/ql/lib/ext/generated/javax.crypto.spec.model.yml @@ -0,0 +1,74 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.crypto.spec", "ChaCha20ParameterSpec", False, "ChaCha20ParameterSpec", "(byte[],int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.crypto.spec", "ChaCha20ParameterSpec", False, "getNonce", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto.spec", "DESKeySpec", True, "DESKeySpec", "(byte[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.crypto.spec", "DESKeySpec", True, "DESKeySpec", "(byte[],int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.crypto.spec", "DESKeySpec", True, "getKey", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto.spec", "DESedeKeySpec", True, "DESedeKeySpec", "(byte[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.crypto.spec", "DESedeKeySpec", True, "DESedeKeySpec", "(byte[],int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.crypto.spec", "DESedeKeySpec", True, "getKey", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto.spec", "GCMParameterSpec", True, "getIV", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto.spec", "IvParameterSpec", True, "getIV", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto.spec", "OAEPParameterSpec", True, "OAEPParameterSpec", "(String,String,AlgorithmParameterSpec,PSource)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.crypto.spec", "OAEPParameterSpec", True, "OAEPParameterSpec", "(String,String,AlgorithmParameterSpec,PSource)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.crypto.spec", "OAEPParameterSpec", True, "OAEPParameterSpec", "(String,String,AlgorithmParameterSpec,PSource)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.crypto.spec", "OAEPParameterSpec", True, "OAEPParameterSpec", "(String,String,AlgorithmParameterSpec,PSource)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["javax.crypto.spec", "OAEPParameterSpec", True, "getDigestAlgorithm", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto.spec", "OAEPParameterSpec", True, "getMGFAlgorithm", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto.spec", "OAEPParameterSpec", True, "getMGFParameters", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto.spec", "OAEPParameterSpec", True, "getPSource", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto.spec", "PBEKeySpec", True, "PBEKeySpec", "(char[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.crypto.spec", "PBEKeySpec", True, "PBEKeySpec", "(char[],byte[],int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.crypto.spec", "PBEKeySpec", True, "PBEKeySpec", "(char[],byte[],int)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.crypto.spec", "PBEKeySpec", True, "PBEKeySpec", "(char[],byte[],int,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.crypto.spec", "PBEKeySpec", True, "PBEKeySpec", "(char[],byte[],int,int)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.crypto.spec", "PBEKeySpec", True, "getPassword", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto.spec", "PBEKeySpec", True, "getSalt", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto.spec", "PBEParameterSpec", True, "PBEParameterSpec", "(byte[],int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.crypto.spec", "PBEParameterSpec", True, "PBEParameterSpec", "(byte[],int,AlgorithmParameterSpec)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.crypto.spec", "PBEParameterSpec", True, "PBEParameterSpec", "(byte[],int,AlgorithmParameterSpec)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.crypto.spec", "PBEParameterSpec", True, "getParameterSpec", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto.spec", "PBEParameterSpec", True, "getSalt", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto.spec", "PSource$PSpecified", False, "PSpecified", "(byte[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.crypto.spec", "PSource$PSpecified", False, "getValue", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto.spec", "PSource", True, "getAlgorithm", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto.spec", "RC2ParameterSpec", True, "getIV", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto.spec", "RC5ParameterSpec", True, "getIV", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["javax.crypto.spec", "ChaCha20ParameterSpec", "getCounter", "()", "summary", "df-generated"] + - ["javax.crypto.spec", "DESKeySpec", "isParityAdjusted", "(byte[],int)", "summary", "df-generated"] + - ["javax.crypto.spec", "DESKeySpec", "isWeak", "(byte[],int)", "summary", "df-generated"] + - ["javax.crypto.spec", "DESedeKeySpec", "isParityAdjusted", "(byte[],int)", "summary", "df-generated"] + - ["javax.crypto.spec", "DHGenParameterSpec", "DHGenParameterSpec", "(int,int)", "summary", "df-generated"] + - ["javax.crypto.spec", "DHGenParameterSpec", "getExponentSize", "()", "summary", "df-generated"] + - ["javax.crypto.spec", "DHGenParameterSpec", "getPrimeSize", "()", "summary", "df-generated"] + - ["javax.crypto.spec", "DHParameterSpec", "DHParameterSpec", "(BigInteger,BigInteger)", "summary", "df-generated"] + - ["javax.crypto.spec", "DHParameterSpec", "DHParameterSpec", "(BigInteger,BigInteger,int)", "summary", "df-generated"] + - ["javax.crypto.spec", "DHParameterSpec", "getG", "()", "summary", "df-generated"] + - ["javax.crypto.spec", "DHParameterSpec", "getL", "()", "summary", "df-generated"] + - ["javax.crypto.spec", "DHParameterSpec", "getP", "()", "summary", "df-generated"] + - ["javax.crypto.spec", "DHPrivateKeySpec", "DHPrivateKeySpec", "(BigInteger,BigInteger,BigInteger)", "summary", "df-generated"] + - ["javax.crypto.spec", "DHPrivateKeySpec", "getG", "()", "summary", "df-generated"] + - ["javax.crypto.spec", "DHPrivateKeySpec", "getP", "()", "summary", "df-generated"] + - ["javax.crypto.spec", "DHPrivateKeySpec", "getX", "()", "summary", "df-generated"] + - ["javax.crypto.spec", "DHPublicKeySpec", "DHPublicKeySpec", "(BigInteger,BigInteger,BigInteger)", "summary", "df-generated"] + - ["javax.crypto.spec", "DHPublicKeySpec", "getG", "()", "summary", "df-generated"] + - ["javax.crypto.spec", "DHPublicKeySpec", "getP", "()", "summary", "df-generated"] + - ["javax.crypto.spec", "DHPublicKeySpec", "getY", "()", "summary", "df-generated"] + - ["javax.crypto.spec", "GCMParameterSpec", "getTLen", "()", "summary", "df-generated"] + - ["javax.crypto.spec", "PBEKeySpec", "clearPassword", "()", "summary", "df-generated"] + - ["javax.crypto.spec", "PBEKeySpec", "getIterationCount", "()", "summary", "df-generated"] + - ["javax.crypto.spec", "PBEKeySpec", "getKeyLength", "()", "summary", "df-generated"] + - ["javax.crypto.spec", "PBEParameterSpec", "getIterationCount", "()", "summary", "df-generated"] + - ["javax.crypto.spec", "RC2ParameterSpec", "getEffectiveKeyBits", "()", "summary", "df-generated"] + - ["javax.crypto.spec", "RC5ParameterSpec", "getRounds", "()", "summary", "df-generated"] + - ["javax.crypto.spec", "RC5ParameterSpec", "getVersion", "()", "summary", "df-generated"] + - ["javax.crypto.spec", "RC5ParameterSpec", "getWordSize", "()", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.imageio.metadata.model.yml b/java/ql/lib/ext/generated/javax.imageio.metadata.model.yml new file mode 100644 index 00000000000..961bbceb1bd --- /dev/null +++ b/java/ql/lib/ext/generated/javax.imageio.metadata.model.yml @@ -0,0 +1,65 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.imageio.metadata", "IIOInvalidTreeException", True, "IIOInvalidTreeException", "(String,Node)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.metadata", "IIOInvalidTreeException", True, "IIOInvalidTreeException", "(String,Node)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.metadata", "IIOInvalidTreeException", True, "IIOInvalidTreeException", "(String,Throwable,Node)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.metadata", "IIOInvalidTreeException", True, "IIOInvalidTreeException", "(String,Throwable,Node)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.metadata", "IIOInvalidTreeException", True, "IIOInvalidTreeException", "(String,Throwable,Node)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.metadata", "IIOInvalidTreeException", True, "getOffendingNode", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio.metadata", "IIOMetadata", True, "getController", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio.metadata", "IIOMetadata", True, "getDefaultController", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio.metadata", "IIOMetadata", True, "getExtraMetadataFormatNames", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio.metadata", "IIOMetadata", True, "getMetadataFormatNames", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio.metadata", "IIOMetadata", True, "getNativeMetadataFormatName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio.metadata", "IIOMetadata", True, "setController", "(IIOMetadataController)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.metadata", "IIOMetadata", True, "setFromTree", "(String,Node)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.metadata", "IIOMetadataFormat", True, "getAttributeDescription", "(String,String,Locale)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio.metadata", "IIOMetadataFormat", True, "getAttributeDescription", "(String,String,Locale)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio.metadata", "IIOMetadataFormat", True, "getAttributeNames", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio.metadata", "IIOMetadataFormat", True, "getChildNames", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio.metadata", "IIOMetadataFormat", True, "getElementDescription", "(String,Locale)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio.metadata", "IIOMetadataFormat", True, "getElementDescription", "(String,Locale)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio.metadata", "IIOMetadataFormat", True, "getRootName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio.metadata", "IIOMetadataFormatImpl", True, "IIOMetadataFormatImpl", "(String,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.metadata", "IIOMetadataFormatImpl", True, "IIOMetadataFormatImpl", "(String,int,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.metadata", "IIOMetadataNode", True, "IIOMetadataNode", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.metadata", "IIOMetadataNode", True, "getUserObject", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio.metadata", "IIOMetadataNode", True, "setUserObject", "(Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["javax.imageio.metadata", "IIOMetadata", "activateController", "()", "summary", "df-generated"] + - ["javax.imageio.metadata", "IIOMetadata", "getAsTree", "(String)", "summary", "df-generated"] + - ["javax.imageio.metadata", "IIOMetadata", "getMetadataFormat", "(String)", "summary", "df-generated"] + - ["javax.imageio.metadata", "IIOMetadata", "hasController", "()", "summary", "df-generated"] + - ["javax.imageio.metadata", "IIOMetadata", "isReadOnly", "()", "summary", "df-generated"] + - ["javax.imageio.metadata", "IIOMetadata", "isStandardMetadataFormatSupported", "()", "summary", "df-generated"] + - ["javax.imageio.metadata", "IIOMetadata", "mergeTree", "(String,Node)", "summary", "df-generated"] + - ["javax.imageio.metadata", "IIOMetadata", "reset", "()", "summary", "df-generated"] + - ["javax.imageio.metadata", "IIOMetadataFormat", "canNodeAppear", "(String,ImageTypeSpecifier)", "summary", "df-generated"] + - ["javax.imageio.metadata", "IIOMetadataFormat", "getAttributeDataType", "(String,String)", "summary", "df-generated"] + - ["javax.imageio.metadata", "IIOMetadataFormat", "getAttributeDefaultValue", "(String,String)", "summary", "df-generated"] + - ["javax.imageio.metadata", "IIOMetadataFormat", "getAttributeEnumerations", "(String,String)", "summary", "df-generated"] + - ["javax.imageio.metadata", "IIOMetadataFormat", "getAttributeListMaxLength", "(String,String)", "summary", "df-generated"] + - ["javax.imageio.metadata", "IIOMetadataFormat", "getAttributeListMinLength", "(String,String)", "summary", "df-generated"] + - ["javax.imageio.metadata", "IIOMetadataFormat", "getAttributeMaxValue", "(String,String)", "summary", "df-generated"] + - ["javax.imageio.metadata", "IIOMetadataFormat", "getAttributeMinValue", "(String,String)", "summary", "df-generated"] + - ["javax.imageio.metadata", "IIOMetadataFormat", "getAttributeValueType", "(String,String)", "summary", "df-generated"] + - ["javax.imageio.metadata", "IIOMetadataFormat", "getChildPolicy", "(String)", "summary", "df-generated"] + - ["javax.imageio.metadata", "IIOMetadataFormat", "getElementMaxChildren", "(String)", "summary", "df-generated"] + - ["javax.imageio.metadata", "IIOMetadataFormat", "getElementMinChildren", "(String)", "summary", "df-generated"] + - ["javax.imageio.metadata", "IIOMetadataFormat", "getObjectArrayMaxLength", "(String)", "summary", "df-generated"] + - ["javax.imageio.metadata", "IIOMetadataFormat", "getObjectArrayMinLength", "(String)", "summary", "df-generated"] + - ["javax.imageio.metadata", "IIOMetadataFormat", "getObjectClass", "(String)", "summary", "df-generated"] + - ["javax.imageio.metadata", "IIOMetadataFormat", "getObjectDefaultValue", "(String)", "summary", "df-generated"] + - ["javax.imageio.metadata", "IIOMetadataFormat", "getObjectEnumerations", "(String)", "summary", "df-generated"] + - ["javax.imageio.metadata", "IIOMetadataFormat", "getObjectMaxValue", "(String)", "summary", "df-generated"] + - ["javax.imageio.metadata", "IIOMetadataFormat", "getObjectMinValue", "(String)", "summary", "df-generated"] + - ["javax.imageio.metadata", "IIOMetadataFormat", "getObjectValueType", "(String)", "summary", "df-generated"] + - ["javax.imageio.metadata", "IIOMetadataFormat", "isAttributeRequired", "(String,String)", "summary", "df-generated"] + - ["javax.imageio.metadata", "IIOMetadataFormatImpl", "getStandardFormatInstance", "()", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.imageio.model.yml b/java/ql/lib/ext/generated/javax.imageio.model.yml new file mode 100644 index 00000000000..a1be538932d --- /dev/null +++ b/java/ql/lib/ext/generated/javax.imageio.model.yml @@ -0,0 +1,251 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.imageio", "IIOException", True, "IIOException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio", "IIOException", True, "IIOException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio", "IIOException", True, "IIOException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio", "IIOImage", True, "IIOImage", "(Raster,List,IIOMetadata)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio", "IIOImage", True, "IIOImage", "(Raster,List,IIOMetadata)", "", "Argument[1].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio", "IIOImage", True, "IIOImage", "(Raster,List,IIOMetadata)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio", "IIOImage", True, "IIOImage", "(RenderedImage,List,IIOMetadata)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio", "IIOImage", True, "IIOImage", "(RenderedImage,List,IIOMetadata)", "", "Argument[1].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio", "IIOImage", True, "IIOImage", "(RenderedImage,List,IIOMetadata)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio", "IIOImage", True, "getMetadata", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio", "IIOImage", True, "getRaster", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio", "IIOImage", True, "getRenderedImage", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio", "IIOImage", True, "getThumbnail", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio", "IIOImage", True, "getThumbnails", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio", "IIOImage", True, "setMetadata", "(IIOMetadata)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio", "IIOImage", True, "setRaster", "(Raster)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio", "IIOImage", True, "setRenderedImage", "(RenderedImage)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio", "IIOImage", True, "setThumbnails", "(List)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio", "IIOParam", True, "getController", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio", "IIOParam", True, "getDefaultController", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio", "IIOParam", True, "getDestinationOffset", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio", "IIOParam", True, "getDestinationType", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio", "IIOParam", True, "getSourceRegion", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio", "IIOParam", True, "setController", "(IIOParamController)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio", "IIOParam", True, "setDestinationOffset", "(Point)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio", "IIOParam", True, "setDestinationType", "(ImageTypeSpecifier)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio", "IIOParam", True, "setSourceRegion", "(Rectangle)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio", "ImageIO", False, "createImageInputStream", "(Object)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio", "ImageIO", False, "createImageOutputStream", "(Object)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio", "ImageReadParam", True, "getDestination", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio", "ImageReadParam", True, "getSourceRenderSize", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio", "ImageReadParam", True, "setDestination", "(BufferedImage)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio", "ImageReadParam", True, "setSourceRenderSize", "(Dimension)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio", "ImageReader", True, "addIIOReadProgressListener", "(IIOReadProgressListener)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio", "ImageReader", True, "addIIOReadUpdateListener", "(IIOReadUpdateListener)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio", "ImageReader", True, "addIIOReadWarningListener", "(IIOReadWarningListener)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio", "ImageReader", True, "getAvailableLocales", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio", "ImageReader", True, "getFormatName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio", "ImageReader", True, "getImageMetadata", "(int,String,Set)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio", "ImageReader", True, "getInput", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio", "ImageReader", True, "getLocale", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio", "ImageReader", True, "getOriginatingProvider", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio", "ImageReader", True, "getRawImageType", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio", "ImageReader", True, "getStreamMetadata", "(String,Set)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio", "ImageReader", True, "read", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio", "ImageReader", True, "readAll", "(Iterator)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio", "ImageReader", True, "readAll", "(int,ImageReadParam)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio", "ImageReader", True, "readAll", "(int,ImageReadParam)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio", "ImageReader", True, "readAll", "(int,ImageReadParam)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio", "ImageReader", True, "readAsRenderedImage", "(int,ImageReadParam)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio", "ImageReader", True, "readAsRenderedImage", "(int,ImageReadParam)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio", "ImageReader", True, "readAsRenderedImage", "(int,ImageReadParam)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio", "ImageReader", True, "readTile", "(int,int,int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio", "ImageReader", True, "readTileRaster", "(int,int,int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio", "ImageReader", True, "setInput", "(Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio", "ImageReader", True, "setInput", "(Object,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio", "ImageReader", True, "setInput", "(Object,boolean,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio", "ImageReader", True, "setLocale", "(Locale)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio", "ImageTypeSpecifier", True, "ImageTypeSpecifier", "(ColorModel,SampleModel)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio", "ImageTypeSpecifier", True, "ImageTypeSpecifier", "(ColorModel,SampleModel)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio", "ImageTypeSpecifier", True, "ImageTypeSpecifier", "(RenderedImage)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio", "ImageTypeSpecifier", True, "createBanded", "(ColorSpace,int[],int[],int,boolean,boolean)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio", "ImageTypeSpecifier", True, "createBufferedImage", "(int,int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio", "ImageTypeSpecifier", True, "createFromRenderedImage", "(RenderedImage)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio", "ImageTypeSpecifier", True, "createIndexed", "(byte[],byte[],byte[],byte[],int,int)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio", "ImageTypeSpecifier", True, "createIndexed", "(byte[],byte[],byte[],byte[],int,int)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio", "ImageTypeSpecifier", True, "createIndexed", "(byte[],byte[],byte[],byte[],int,int)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio", "ImageTypeSpecifier", True, "createIndexed", "(byte[],byte[],byte[],byte[],int,int)", "", "Argument[3]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio", "ImageTypeSpecifier", True, "createInterleaved", "(ColorSpace,int[],int,boolean,boolean)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio", "ImageTypeSpecifier", True, "createPacked", "(ColorSpace,int,int,int,int,int,boolean)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio", "ImageTypeSpecifier", True, "getColorModel", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio", "ImageTypeSpecifier", True, "getSampleModel", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio", "ImageWriteParam", True, "ImageWriteParam", "(Locale)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio", "ImageWriteParam", True, "getCompressionQualityDescriptions", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio", "ImageWriteParam", True, "getCompressionType", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio", "ImageWriteParam", True, "getCompressionTypes", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio", "ImageWriteParam", True, "getLocale", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio", "ImageWriteParam", True, "getLocalizedCompressionTypeName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio", "ImageWriteParam", True, "setCompressionType", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio", "ImageWriter", True, "addIIOWriteProgressListener", "(IIOWriteProgressListener)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio", "ImageWriter", True, "addIIOWriteWarningListener", "(IIOWriteWarningListener)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio", "ImageWriter", True, "getAvailableLocales", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio", "ImageWriter", True, "getDefaultWriteParam", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio", "ImageWriter", True, "getLocale", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio", "ImageWriter", True, "getOriginatingProvider", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio", "ImageWriter", True, "getOutput", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio", "ImageWriter", True, "setLocale", "(Locale)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio", "ImageWriter", True, "setOutput", "(Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["javax.imageio", "IIOImage", "getNumThumbnails", "()", "summary", "df-generated"] + - ["javax.imageio", "IIOImage", "hasRaster", "()", "summary", "df-generated"] + - ["javax.imageio", "IIOParam", "activateController", "()", "summary", "df-generated"] + - ["javax.imageio", "IIOParam", "getSourceBands", "()", "summary", "df-generated"] + - ["javax.imageio", "IIOParam", "getSourceXSubsampling", "()", "summary", "df-generated"] + - ["javax.imageio", "IIOParam", "getSourceYSubsampling", "()", "summary", "df-generated"] + - ["javax.imageio", "IIOParam", "getSubsamplingXOffset", "()", "summary", "df-generated"] + - ["javax.imageio", "IIOParam", "getSubsamplingYOffset", "()", "summary", "df-generated"] + - ["javax.imageio", "IIOParam", "hasController", "()", "summary", "df-generated"] + - ["javax.imageio", "IIOParam", "setSourceBands", "(int[])", "summary", "df-generated"] + - ["javax.imageio", "IIOParam", "setSourceSubsampling", "(int,int,int,int)", "summary", "df-generated"] + - ["javax.imageio", "ImageIO", "getCacheDirectory", "()", "summary", "df-generated"] + - ["javax.imageio", "ImageIO", "getImageReader", "(ImageWriter)", "summary", "df-generated"] + - ["javax.imageio", "ImageIO", "getImageReaders", "(Object)", "summary", "df-generated"] + - ["javax.imageio", "ImageIO", "getImageReadersByFormatName", "(String)", "summary", "df-generated"] + - ["javax.imageio", "ImageIO", "getImageReadersByMIMEType", "(String)", "summary", "df-generated"] + - ["javax.imageio", "ImageIO", "getImageReadersBySuffix", "(String)", "summary", "df-generated"] + - ["javax.imageio", "ImageIO", "getImageTranscoders", "(ImageReader,ImageWriter)", "summary", "df-generated"] + - ["javax.imageio", "ImageIO", "getImageWriter", "(ImageReader)", "summary", "df-generated"] + - ["javax.imageio", "ImageIO", "getImageWriters", "(ImageTypeSpecifier,String)", "summary", "df-generated"] + - ["javax.imageio", "ImageIO", "getImageWritersByFormatName", "(String)", "summary", "df-generated"] + - ["javax.imageio", "ImageIO", "getImageWritersByMIMEType", "(String)", "summary", "df-generated"] + - ["javax.imageio", "ImageIO", "getImageWritersBySuffix", "(String)", "summary", "df-generated"] + - ["javax.imageio", "ImageIO", "getReaderFileSuffixes", "()", "summary", "df-generated"] + - ["javax.imageio", "ImageIO", "getReaderFormatNames", "()", "summary", "df-generated"] + - ["javax.imageio", "ImageIO", "getReaderMIMETypes", "()", "summary", "df-generated"] + - ["javax.imageio", "ImageIO", "getUseCache", "()", "summary", "df-generated"] + - ["javax.imageio", "ImageIO", "getWriterFileSuffixes", "()", "summary", "df-generated"] + - ["javax.imageio", "ImageIO", "getWriterFormatNames", "()", "summary", "df-generated"] + - ["javax.imageio", "ImageIO", "getWriterMIMETypes", "()", "summary", "df-generated"] + - ["javax.imageio", "ImageIO", "read", "(File)", "summary", "df-generated"] + - ["javax.imageio", "ImageIO", "read", "(ImageInputStream)", "summary", "df-generated"] + - ["javax.imageio", "ImageIO", "read", "(InputStream)", "summary", "df-generated"] + - ["javax.imageio", "ImageIO", "read", "(URL)", "summary", "df-generated"] + - ["javax.imageio", "ImageIO", "scanForPlugins", "()", "summary", "df-generated"] + - ["javax.imageio", "ImageIO", "setCacheDirectory", "(File)", "summary", "df-generated"] + - ["javax.imageio", "ImageIO", "setUseCache", "(boolean)", "summary", "df-generated"] + - ["javax.imageio", "ImageIO", "write", "(RenderedImage,String,File)", "summary", "df-generated"] + - ["javax.imageio", "ImageIO", "write", "(RenderedImage,String,ImageOutputStream)", "summary", "df-generated"] + - ["javax.imageio", "ImageIO", "write", "(RenderedImage,String,OutputStream)", "summary", "df-generated"] + - ["javax.imageio", "ImageReadParam", "canSetSourceRenderSize", "()", "summary", "df-generated"] + - ["javax.imageio", "ImageReadParam", "getDestinationBands", "()", "summary", "df-generated"] + - ["javax.imageio", "ImageReadParam", "getSourceMaxProgressivePass", "()", "summary", "df-generated"] + - ["javax.imageio", "ImageReadParam", "getSourceMinProgressivePass", "()", "summary", "df-generated"] + - ["javax.imageio", "ImageReadParam", "getSourceNumProgressivePasses", "()", "summary", "df-generated"] + - ["javax.imageio", "ImageReadParam", "setDestinationBands", "(int[])", "summary", "df-generated"] + - ["javax.imageio", "ImageReadParam", "setSourceProgressivePasses", "(int,int)", "summary", "df-generated"] + - ["javax.imageio", "ImageReader", "abort", "()", "summary", "df-generated"] + - ["javax.imageio", "ImageReader", "canReadRaster", "()", "summary", "df-generated"] + - ["javax.imageio", "ImageReader", "dispose", "()", "summary", "df-generated"] + - ["javax.imageio", "ImageReader", "getAspectRatio", "(int)", "summary", "df-generated"] + - ["javax.imageio", "ImageReader", "getDefaultReadParam", "()", "summary", "df-generated"] + - ["javax.imageio", "ImageReader", "getHeight", "(int)", "summary", "df-generated"] + - ["javax.imageio", "ImageReader", "getImageMetadata", "(int)", "summary", "df-generated"] + - ["javax.imageio", "ImageReader", "getImageTypes", "(int)", "summary", "df-generated"] + - ["javax.imageio", "ImageReader", "getMinIndex", "()", "summary", "df-generated"] + - ["javax.imageio", "ImageReader", "getNumImages", "(boolean)", "summary", "df-generated"] + - ["javax.imageio", "ImageReader", "getNumThumbnails", "(int)", "summary", "df-generated"] + - ["javax.imageio", "ImageReader", "getStreamMetadata", "()", "summary", "df-generated"] + - ["javax.imageio", "ImageReader", "getThumbnailHeight", "(int,int)", "summary", "df-generated"] + - ["javax.imageio", "ImageReader", "getThumbnailWidth", "(int,int)", "summary", "df-generated"] + - ["javax.imageio", "ImageReader", "getTileGridXOffset", "(int)", "summary", "df-generated"] + - ["javax.imageio", "ImageReader", "getTileGridYOffset", "(int)", "summary", "df-generated"] + - ["javax.imageio", "ImageReader", "getTileHeight", "(int)", "summary", "df-generated"] + - ["javax.imageio", "ImageReader", "getTileWidth", "(int)", "summary", "df-generated"] + - ["javax.imageio", "ImageReader", "getWidth", "(int)", "summary", "df-generated"] + - ["javax.imageio", "ImageReader", "hasThumbnails", "(int)", "summary", "df-generated"] + - ["javax.imageio", "ImageReader", "isIgnoringMetadata", "()", "summary", "df-generated"] + - ["javax.imageio", "ImageReader", "isImageTiled", "(int)", "summary", "df-generated"] + - ["javax.imageio", "ImageReader", "isRandomAccessEasy", "(int)", "summary", "df-generated"] + - ["javax.imageio", "ImageReader", "isSeekForwardOnly", "()", "summary", "df-generated"] + - ["javax.imageio", "ImageReader", "read", "(int,ImageReadParam)", "summary", "df-generated"] + - ["javax.imageio", "ImageReader", "readRaster", "(int,ImageReadParam)", "summary", "df-generated"] + - ["javax.imageio", "ImageReader", "readThumbnail", "(int,int)", "summary", "df-generated"] + - ["javax.imageio", "ImageReader", "readerSupportsThumbnails", "()", "summary", "df-generated"] + - ["javax.imageio", "ImageReader", "removeAllIIOReadProgressListeners", "()", "summary", "df-generated"] + - ["javax.imageio", "ImageReader", "removeAllIIOReadUpdateListeners", "()", "summary", "df-generated"] + - ["javax.imageio", "ImageReader", "removeAllIIOReadWarningListeners", "()", "summary", "df-generated"] + - ["javax.imageio", "ImageReader", "removeIIOReadProgressListener", "(IIOReadProgressListener)", "summary", "df-generated"] + - ["javax.imageio", "ImageReader", "removeIIOReadUpdateListener", "(IIOReadUpdateListener)", "summary", "df-generated"] + - ["javax.imageio", "ImageReader", "removeIIOReadWarningListener", "(IIOReadWarningListener)", "summary", "df-generated"] + - ["javax.imageio", "ImageReader", "reset", "()", "summary", "df-generated"] + - ["javax.imageio", "ImageTranscoder", "convertImageMetadata", "(IIOMetadata,ImageTypeSpecifier,ImageWriteParam)", "summary", "df-generated"] + - ["javax.imageio", "ImageTranscoder", "convertStreamMetadata", "(IIOMetadata,ImageWriteParam)", "summary", "df-generated"] + - ["javax.imageio", "ImageTypeSpecifier", "createFromBufferedImageType", "(int)", "summary", "df-generated"] + - ["javax.imageio", "ImageTypeSpecifier", "createGrayscale", "(int,int,boolean)", "summary", "df-generated"] + - ["javax.imageio", "ImageTypeSpecifier", "createGrayscale", "(int,int,boolean,boolean)", "summary", "df-generated"] + - ["javax.imageio", "ImageTypeSpecifier", "getBitsPerBand", "(int)", "summary", "df-generated"] + - ["javax.imageio", "ImageTypeSpecifier", "getBufferedImageType", "()", "summary", "df-generated"] + - ["javax.imageio", "ImageTypeSpecifier", "getNumBands", "()", "summary", "df-generated"] + - ["javax.imageio", "ImageTypeSpecifier", "getNumComponents", "()", "summary", "df-generated"] + - ["javax.imageio", "ImageTypeSpecifier", "getSampleModel", "(int,int)", "summary", "df-generated"] + - ["javax.imageio", "ImageWriteParam", "canOffsetTiles", "()", "summary", "df-generated"] + - ["javax.imageio", "ImageWriteParam", "canWriteCompressed", "()", "summary", "df-generated"] + - ["javax.imageio", "ImageWriteParam", "canWriteProgressive", "()", "summary", "df-generated"] + - ["javax.imageio", "ImageWriteParam", "canWriteTiles", "()", "summary", "df-generated"] + - ["javax.imageio", "ImageWriteParam", "getBitRate", "(float)", "summary", "df-generated"] + - ["javax.imageio", "ImageWriteParam", "getCompressionMode", "()", "summary", "df-generated"] + - ["javax.imageio", "ImageWriteParam", "getCompressionQuality", "()", "summary", "df-generated"] + - ["javax.imageio", "ImageWriteParam", "getCompressionQualityValues", "()", "summary", "df-generated"] + - ["javax.imageio", "ImageWriteParam", "getPreferredTileSizes", "()", "summary", "df-generated"] + - ["javax.imageio", "ImageWriteParam", "getProgressiveMode", "()", "summary", "df-generated"] + - ["javax.imageio", "ImageWriteParam", "getTileGridXOffset", "()", "summary", "df-generated"] + - ["javax.imageio", "ImageWriteParam", "getTileGridYOffset", "()", "summary", "df-generated"] + - ["javax.imageio", "ImageWriteParam", "getTileHeight", "()", "summary", "df-generated"] + - ["javax.imageio", "ImageWriteParam", "getTileWidth", "()", "summary", "df-generated"] + - ["javax.imageio", "ImageWriteParam", "getTilingMode", "()", "summary", "df-generated"] + - ["javax.imageio", "ImageWriteParam", "isCompressionLossless", "()", "summary", "df-generated"] + - ["javax.imageio", "ImageWriteParam", "setCompressionMode", "(int)", "summary", "df-generated"] + - ["javax.imageio", "ImageWriteParam", "setCompressionQuality", "(float)", "summary", "df-generated"] + - ["javax.imageio", "ImageWriteParam", "setProgressiveMode", "(int)", "summary", "df-generated"] + - ["javax.imageio", "ImageWriteParam", "setTiling", "(int,int,int,int)", "summary", "df-generated"] + - ["javax.imageio", "ImageWriteParam", "setTilingMode", "(int)", "summary", "df-generated"] + - ["javax.imageio", "ImageWriteParam", "unsetCompression", "()", "summary", "df-generated"] + - ["javax.imageio", "ImageWriteParam", "unsetTiling", "()", "summary", "df-generated"] + - ["javax.imageio", "ImageWriter", "abort", "()", "summary", "df-generated"] + - ["javax.imageio", "ImageWriter", "canInsertEmpty", "(int)", "summary", "df-generated"] + - ["javax.imageio", "ImageWriter", "canInsertImage", "(int)", "summary", "df-generated"] + - ["javax.imageio", "ImageWriter", "canRemoveImage", "(int)", "summary", "df-generated"] + - ["javax.imageio", "ImageWriter", "canReplaceImageMetadata", "(int)", "summary", "df-generated"] + - ["javax.imageio", "ImageWriter", "canReplacePixels", "(int)", "summary", "df-generated"] + - ["javax.imageio", "ImageWriter", "canReplaceStreamMetadata", "()", "summary", "df-generated"] + - ["javax.imageio", "ImageWriter", "canWriteEmpty", "()", "summary", "df-generated"] + - ["javax.imageio", "ImageWriter", "canWriteRasters", "()", "summary", "df-generated"] + - ["javax.imageio", "ImageWriter", "canWriteSequence", "()", "summary", "df-generated"] + - ["javax.imageio", "ImageWriter", "dispose", "()", "summary", "df-generated"] + - ["javax.imageio", "ImageWriter", "endInsertEmpty", "()", "summary", "df-generated"] + - ["javax.imageio", "ImageWriter", "endReplacePixels", "()", "summary", "df-generated"] + - ["javax.imageio", "ImageWriter", "endWriteEmpty", "()", "summary", "df-generated"] + - ["javax.imageio", "ImageWriter", "endWriteSequence", "()", "summary", "df-generated"] + - ["javax.imageio", "ImageWriter", "getDefaultImageMetadata", "(ImageTypeSpecifier,ImageWriteParam)", "summary", "df-generated"] + - ["javax.imageio", "ImageWriter", "getDefaultStreamMetadata", "(ImageWriteParam)", "summary", "df-generated"] + - ["javax.imageio", "ImageWriter", "getNumThumbnailsSupported", "(ImageTypeSpecifier,ImageWriteParam,IIOMetadata,IIOMetadata)", "summary", "df-generated"] + - ["javax.imageio", "ImageWriter", "getPreferredThumbnailSizes", "(ImageTypeSpecifier,ImageWriteParam,IIOMetadata,IIOMetadata)", "summary", "df-generated"] + - ["javax.imageio", "ImageWriter", "prepareInsertEmpty", "(int,ImageTypeSpecifier,int,int,IIOMetadata,List,ImageWriteParam)", "summary", "df-generated"] + - ["javax.imageio", "ImageWriter", "prepareReplacePixels", "(int,Rectangle)", "summary", "df-generated"] + - ["javax.imageio", "ImageWriter", "prepareWriteEmpty", "(IIOMetadata,ImageTypeSpecifier,int,int,IIOMetadata,List,ImageWriteParam)", "summary", "df-generated"] + - ["javax.imageio", "ImageWriter", "prepareWriteSequence", "(IIOMetadata)", "summary", "df-generated"] + - ["javax.imageio", "ImageWriter", "removeAllIIOWriteProgressListeners", "()", "summary", "df-generated"] + - ["javax.imageio", "ImageWriter", "removeAllIIOWriteWarningListeners", "()", "summary", "df-generated"] + - ["javax.imageio", "ImageWriter", "removeIIOWriteProgressListener", "(IIOWriteProgressListener)", "summary", "df-generated"] + - ["javax.imageio", "ImageWriter", "removeIIOWriteWarningListener", "(IIOWriteWarningListener)", "summary", "df-generated"] + - ["javax.imageio", "ImageWriter", "removeImage", "(int)", "summary", "df-generated"] + - ["javax.imageio", "ImageWriter", "replaceImageMetadata", "(int,IIOMetadata)", "summary", "df-generated"] + - ["javax.imageio", "ImageWriter", "replacePixels", "(Raster,ImageWriteParam)", "summary", "df-generated"] + - ["javax.imageio", "ImageWriter", "replacePixels", "(RenderedImage,ImageWriteParam)", "summary", "df-generated"] + - ["javax.imageio", "ImageWriter", "replaceStreamMetadata", "(IIOMetadata)", "summary", "df-generated"] + - ["javax.imageio", "ImageWriter", "reset", "()", "summary", "df-generated"] + - ["javax.imageio", "ImageWriter", "write", "(IIOImage)", "summary", "df-generated"] + - ["javax.imageio", "ImageWriter", "write", "(IIOMetadata,IIOImage,ImageWriteParam)", "summary", "df-generated"] + - ["javax.imageio", "ImageWriter", "write", "(RenderedImage)", "summary", "df-generated"] + - ["javax.imageio", "ImageWriter", "writeInsert", "(int,IIOImage,ImageWriteParam)", "summary", "df-generated"] + - ["javax.imageio", "ImageWriter", "writeToSequence", "(IIOImage,ImageWriteParam)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.imageio.plugins.bmp.model.yml b/java/ql/lib/ext/generated/javax.imageio.plugins.bmp.model.yml new file mode 100644 index 00000000000..607766feec1 --- /dev/null +++ b/java/ql/lib/ext/generated/javax.imageio.plugins.bmp.model.yml @@ -0,0 +1,13 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.imageio.plugins.bmp", "BMPImageWriteParam", True, "BMPImageWriteParam", "(Locale)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["javax.imageio.plugins.bmp", "BMPImageWriteParam", "isTopDown", "()", "summary", "df-generated"] + - ["javax.imageio.plugins.bmp", "BMPImageWriteParam", "setTopDown", "(boolean)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.imageio.plugins.jpeg.model.yml b/java/ql/lib/ext/generated/javax.imageio.plugins.jpeg.model.yml new file mode 100644 index 00000000000..00938e459a3 --- /dev/null +++ b/java/ql/lib/ext/generated/javax.imageio.plugins.jpeg.model.yml @@ -0,0 +1,35 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.imageio.plugins.jpeg", "JPEGImageReadParam", True, "getACHuffmanTables", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio.plugins.jpeg", "JPEGImageReadParam", True, "getDCHuffmanTables", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio.plugins.jpeg", "JPEGImageReadParam", True, "getQTables", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio.plugins.jpeg", "JPEGImageReadParam", True, "setDecodeTables", "(JPEGQTable[],JPEGHuffmanTable[],JPEGHuffmanTable[])", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.plugins.jpeg", "JPEGImageReadParam", True, "setDecodeTables", "(JPEGQTable[],JPEGHuffmanTable[],JPEGHuffmanTable[])", "", "Argument[1].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.plugins.jpeg", "JPEGImageReadParam", True, "setDecodeTables", "(JPEGQTable[],JPEGHuffmanTable[],JPEGHuffmanTable[])", "", "Argument[2].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.plugins.jpeg", "JPEGImageWriteParam", True, "JPEGImageWriteParam", "(Locale)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.plugins.jpeg", "JPEGImageWriteParam", True, "getACHuffmanTables", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio.plugins.jpeg", "JPEGImageWriteParam", True, "getDCHuffmanTables", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio.plugins.jpeg", "JPEGImageWriteParam", True, "getQTables", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio.plugins.jpeg", "JPEGImageWriteParam", True, "setEncodeTables", "(JPEGQTable[],JPEGHuffmanTable[],JPEGHuffmanTable[])", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.plugins.jpeg", "JPEGImageWriteParam", True, "setEncodeTables", "(JPEGQTable[],JPEGHuffmanTable[],JPEGHuffmanTable[])", "", "Argument[1].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.plugins.jpeg", "JPEGImageWriteParam", True, "setEncodeTables", "(JPEGQTable[],JPEGHuffmanTable[],JPEGHuffmanTable[])", "", "Argument[2].ArrayElement", "Argument[this]", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["javax.imageio.plugins.jpeg", "JPEGHuffmanTable", "JPEGHuffmanTable", "(short[],short[])", "summary", "df-generated"] + - ["javax.imageio.plugins.jpeg", "JPEGHuffmanTable", "getLengths", "()", "summary", "df-generated"] + - ["javax.imageio.plugins.jpeg", "JPEGHuffmanTable", "getValues", "()", "summary", "df-generated"] + - ["javax.imageio.plugins.jpeg", "JPEGImageReadParam", "areTablesSet", "()", "summary", "df-generated"] + - ["javax.imageio.plugins.jpeg", "JPEGImageReadParam", "unsetDecodeTables", "()", "summary", "df-generated"] + - ["javax.imageio.plugins.jpeg", "JPEGImageWriteParam", "areTablesSet", "()", "summary", "df-generated"] + - ["javax.imageio.plugins.jpeg", "JPEGImageWriteParam", "getOptimizeHuffmanTables", "()", "summary", "df-generated"] + - ["javax.imageio.plugins.jpeg", "JPEGImageWriteParam", "setOptimizeHuffmanTables", "(boolean)", "summary", "df-generated"] + - ["javax.imageio.plugins.jpeg", "JPEGImageWriteParam", "unsetEncodeTables", "()", "summary", "df-generated"] + - ["javax.imageio.plugins.jpeg", "JPEGQTable", "JPEGQTable", "(int[])", "summary", "df-generated"] + - ["javax.imageio.plugins.jpeg", "JPEGQTable", "getScaledInstance", "(float,boolean)", "summary", "df-generated"] + - ["javax.imageio.plugins.jpeg", "JPEGQTable", "getTable", "()", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.imageio.plugins.tiff.model.yml b/java/ql/lib/ext/generated/javax.imageio.plugins.tiff.model.yml new file mode 100644 index 00000000000..56152d0710e --- /dev/null +++ b/java/ql/lib/ext/generated/javax.imageio.plugins.tiff.model.yml @@ -0,0 +1,94 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.imageio.plugins.tiff", "TIFFDirectory", True, "TIFFDirectory", "(TIFFTagSet[],TIFFTag)", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFDirectory", True, "TIFFDirectory", "(TIFFTagSet[],TIFFTag)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFDirectory", True, "addTIFFField", "(TIFFField)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFDirectory", True, "addTagSet", "(TIFFTagSet)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFDirectory", True, "createFromMetadata", "(IIOMetadata)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFDirectory", True, "getAsMetadata", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFDirectory", True, "getParentTag", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFDirectory", True, "getTIFFField", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFDirectory", True, "getTIFFFields", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFDirectory", True, "getTag", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFDirectory", True, "getTagSets", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFField", False, "TIFFField", "(TIFFTag,int,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFField", False, "TIFFField", "(TIFFTag,int,int,Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFField", False, "TIFFField", "(TIFFTag,int,int,Object)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFField", False, "TIFFField", "(TIFFTag,int,long,TIFFDirectory)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFField", False, "TIFFField", "(TIFFTag,int,long,TIFFDirectory)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFField", False, "TIFFField", "(TIFFTag,long)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFField", False, "createFromMetadataNode", "(TIFFTagSet,Node)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFField", False, "getAsBytes", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFField", False, "getAsChars", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFField", False, "getAsNativeNode", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFField", False, "getAsString", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFField", False, "getData", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFField", False, "getDirectory", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFField", False, "getTag", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFField", False, "getValueAsString", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFImageReadParam", False, "addAllowedTagSet", "(TIFFTagSet)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFImageReadParam", False, "getAllowedTagSets", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFTag", True, "TIFFTag", "(String,int,TIFFTagSet)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFTag", True, "TIFFTag", "(String,int,TIFFTagSet)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFTag", True, "TIFFTag", "(String,int,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFTag", True, "TIFFTag", "(String,int,int,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFTag", True, "getName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFTag", True, "getTagSet", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFTag", True, "getValueName", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFTagSet", True, "TIFFTagSet", "(List)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFTagSet", True, "getTag", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFTagSet", True, "getTag", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFTagSet", True, "getTagNames", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["javax.imageio.plugins.tiff", "BaselineTIFFTagSet", "getInstance", "()", "summary", "df-generated"] + - ["javax.imageio.plugins.tiff", "ExifGPSTagSet", "getInstance", "()", "summary", "df-generated"] + - ["javax.imageio.plugins.tiff", "ExifInteroperabilityTagSet", "getInstance", "()", "summary", "df-generated"] + - ["javax.imageio.plugins.tiff", "ExifParentTIFFTagSet", "getInstance", "()", "summary", "df-generated"] + - ["javax.imageio.plugins.tiff", "ExifTIFFTagSet", "getInstance", "()", "summary", "df-generated"] + - ["javax.imageio.plugins.tiff", "FaxTIFFTagSet", "getInstance", "()", "summary", "df-generated"] + - ["javax.imageio.plugins.tiff", "GeoTIFFTagSet", "getInstance", "()", "summary", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFDirectory", "containsTIFFField", "(int)", "summary", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFDirectory", "getNumTIFFFields", "()", "summary", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFDirectory", "removeTIFFField", "(int)", "summary", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFDirectory", "removeTIFFFields", "()", "summary", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFDirectory", "removeTagSet", "(TIFFTagSet)", "summary", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFField", "createArrayForType", "(int,int)", "summary", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFField", "getAsDouble", "(int)", "summary", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFField", "getAsDoubles", "()", "summary", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFField", "getAsFloat", "(int)", "summary", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFField", "getAsFloats", "()", "summary", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFField", "getAsInt", "(int)", "summary", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFField", "getAsInts", "()", "summary", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFField", "getAsLong", "(int)", "summary", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFField", "getAsLongs", "()", "summary", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFField", "getAsRational", "(int)", "summary", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFField", "getAsRationals", "()", "summary", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFField", "getAsSRational", "(int)", "summary", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFField", "getAsSRationals", "()", "summary", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFField", "getAsShorts", "()", "summary", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFField", "getCount", "()", "summary", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFField", "getTagNumber", "()", "summary", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFField", "getType", "()", "summary", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFField", "getTypeByName", "(String)", "summary", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFField", "getTypeName", "(int)", "summary", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFField", "hasDirectory", "()", "summary", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFField", "isIntegral", "()", "summary", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFImageReadParam", "getReadUnknownTags", "()", "summary", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFImageReadParam", "removeAllowedTagSet", "(TIFFTagSet)", "summary", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFImageReadParam", "setReadUnknownTags", "(boolean)", "summary", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFTag", "getCount", "()", "summary", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFTag", "getDataTypes", "()", "summary", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFTag", "getNamedValues", "()", "summary", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFTag", "getNumber", "()", "summary", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFTag", "getSizeOfType", "(int)", "summary", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFTag", "hasValueNames", "()", "summary", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFTag", "isDataTypeOK", "(int)", "summary", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFTag", "isIFDPointer", "()", "summary", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFTagSet", "getTagNumbers", "()", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.imageio.spi.model.yml b/java/ql/lib/ext/generated/javax.imageio.spi.model.yml new file mode 100644 index 00000000000..1550958d1fa --- /dev/null +++ b/java/ql/lib/ext/generated/javax.imageio.spi.model.yml @@ -0,0 +1,129 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.imageio.spi", "IIOServiceProvider", True, "IIOServiceProvider", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.spi", "IIOServiceProvider", True, "IIOServiceProvider", "(String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.spi", "IIOServiceProvider", True, "getVendorName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio.spi", "IIOServiceProvider", True, "getVersion", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio.spi", "ImageInputStreamSpi", True, "ImageInputStreamSpi", "(String,String,Class)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.spi", "ImageInputStreamSpi", True, "ImageInputStreamSpi", "(String,String,Class)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.spi", "ImageInputStreamSpi", True, "createInputStreamInstance", "(Object)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio.spi", "ImageOutputStreamSpi", True, "ImageOutputStreamSpi", "(String,String,Class)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.spi", "ImageOutputStreamSpi", True, "ImageOutputStreamSpi", "(String,String,Class)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.spi", "ImageOutputStreamSpi", True, "createOutputStreamInstance", "(Object)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio.spi", "ImageReaderSpi", True, "ImageReaderSpi", "(String,String,String[],String[],String[],String,Class[],String[],boolean,String,String,String[],String[],boolean,String,String,String[],String[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.spi", "ImageReaderSpi", True, "ImageReaderSpi", "(String,String,String[],String[],String[],String,Class[],String[],boolean,String,String,String[],String[],boolean,String,String,String[],String[])", "", "Argument[10]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.spi", "ImageReaderSpi", True, "ImageReaderSpi", "(String,String,String[],String[],String[],String,Class[],String[],boolean,String,String,String[],String[],boolean,String,String,String[],String[])", "", "Argument[11].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.spi", "ImageReaderSpi", True, "ImageReaderSpi", "(String,String,String[],String[],String[],String,Class[],String[],boolean,String,String,String[],String[],boolean,String,String,String[],String[])", "", "Argument[12].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.spi", "ImageReaderSpi", True, "ImageReaderSpi", "(String,String,String[],String[],String[],String,Class[],String[],boolean,String,String,String[],String[],boolean,String,String,String[],String[])", "", "Argument[14]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.spi", "ImageReaderSpi", True, "ImageReaderSpi", "(String,String,String[],String[],String[],String,Class[],String[],boolean,String,String,String[],String[],boolean,String,String,String[],String[])", "", "Argument[15]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.spi", "ImageReaderSpi", True, "ImageReaderSpi", "(String,String,String[],String[],String[],String,Class[],String[],boolean,String,String,String[],String[],boolean,String,String,String[],String[])", "", "Argument[16].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.spi", "ImageReaderSpi", True, "ImageReaderSpi", "(String,String,String[],String[],String[],String,Class[],String[],boolean,String,String,String[],String[],boolean,String,String,String[],String[])", "", "Argument[17].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.spi", "ImageReaderSpi", True, "ImageReaderSpi", "(String,String,String[],String[],String[],String,Class[],String[],boolean,String,String,String[],String[],boolean,String,String,String[],String[])", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.spi", "ImageReaderSpi", True, "ImageReaderSpi", "(String,String,String[],String[],String[],String,Class[],String[],boolean,String,String,String[],String[],boolean,String,String,String[],String[])", "", "Argument[2].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.spi", "ImageReaderSpi", True, "ImageReaderSpi", "(String,String,String[],String[],String[],String,Class[],String[],boolean,String,String,String[],String[],boolean,String,String,String[],String[])", "", "Argument[3].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.spi", "ImageReaderSpi", True, "ImageReaderSpi", "(String,String,String[],String[],String[],String,Class[],String[],boolean,String,String,String[],String[],boolean,String,String,String[],String[])", "", "Argument[4].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.spi", "ImageReaderSpi", True, "ImageReaderSpi", "(String,String,String[],String[],String[],String,Class[],String[],boolean,String,String,String[],String[],boolean,String,String,String[],String[])", "", "Argument[5]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.spi", "ImageReaderSpi", True, "ImageReaderSpi", "(String,String,String[],String[],String[],String,Class[],String[],boolean,String,String,String[],String[],boolean,String,String,String[],String[])", "", "Argument[6].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.spi", "ImageReaderSpi", True, "ImageReaderSpi", "(String,String,String[],String[],String[],String,Class[],String[],boolean,String,String,String[],String[],boolean,String,String,String[],String[])", "", "Argument[7].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.spi", "ImageReaderSpi", True, "ImageReaderSpi", "(String,String,String[],String[],String[],String,Class[],String[],boolean,String,String,String[],String[],boolean,String,String,String[],String[])", "", "Argument[9]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.spi", "ImageReaderSpi", True, "createReaderInstance", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio.spi", "ImageReaderSpi", True, "getImageWriterSpiNames", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio.spi", "ImageReaderSpi", True, "getInputTypes", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio.spi", "ImageReaderWriterSpi", True, "ImageReaderWriterSpi", "(String,String,String[],String[],String[],String,boolean,String,String,String[],String[],boolean,String,String,String[],String[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.spi", "ImageReaderWriterSpi", True, "ImageReaderWriterSpi", "(String,String,String[],String[],String[],String,boolean,String,String,String[],String[],boolean,String,String,String[],String[])", "", "Argument[10].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.spi", "ImageReaderWriterSpi", True, "ImageReaderWriterSpi", "(String,String,String[],String[],String[],String,boolean,String,String,String[],String[],boolean,String,String,String[],String[])", "", "Argument[12]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.spi", "ImageReaderWriterSpi", True, "ImageReaderWriterSpi", "(String,String,String[],String[],String[],String,boolean,String,String,String[],String[],boolean,String,String,String[],String[])", "", "Argument[13]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.spi", "ImageReaderWriterSpi", True, "ImageReaderWriterSpi", "(String,String,String[],String[],String[],String,boolean,String,String,String[],String[],boolean,String,String,String[],String[])", "", "Argument[14].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.spi", "ImageReaderWriterSpi", True, "ImageReaderWriterSpi", "(String,String,String[],String[],String[],String,boolean,String,String,String[],String[],boolean,String,String,String[],String[])", "", "Argument[15].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.spi", "ImageReaderWriterSpi", True, "ImageReaderWriterSpi", "(String,String,String[],String[],String[],String,boolean,String,String,String[],String[],boolean,String,String,String[],String[])", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.spi", "ImageReaderWriterSpi", True, "ImageReaderWriterSpi", "(String,String,String[],String[],String[],String,boolean,String,String,String[],String[],boolean,String,String,String[],String[])", "", "Argument[2].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.spi", "ImageReaderWriterSpi", True, "ImageReaderWriterSpi", "(String,String,String[],String[],String[],String,boolean,String,String,String[],String[],boolean,String,String,String[],String[])", "", "Argument[3].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.spi", "ImageReaderWriterSpi", True, "ImageReaderWriterSpi", "(String,String,String[],String[],String[],String,boolean,String,String,String[],String[],boolean,String,String,String[],String[])", "", "Argument[4].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.spi", "ImageReaderWriterSpi", True, "ImageReaderWriterSpi", "(String,String,String[],String[],String[],String,boolean,String,String,String[],String[],boolean,String,String,String[],String[])", "", "Argument[5]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.spi", "ImageReaderWriterSpi", True, "ImageReaderWriterSpi", "(String,String,String[],String[],String[],String,boolean,String,String,String[],String[],boolean,String,String,String[],String[])", "", "Argument[7]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.spi", "ImageReaderWriterSpi", True, "ImageReaderWriterSpi", "(String,String,String[],String[],String[],String,boolean,String,String,String[],String[],boolean,String,String,String[],String[])", "", "Argument[8]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.spi", "ImageReaderWriterSpi", True, "ImageReaderWriterSpi", "(String,String,String[],String[],String[],String,boolean,String,String,String[],String[],boolean,String,String,String[],String[])", "", "Argument[9].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.spi", "ImageReaderWriterSpi", True, "getExtraImageMetadataFormatNames", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio.spi", "ImageReaderWriterSpi", True, "getExtraStreamMetadataFormatNames", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio.spi", "ImageReaderWriterSpi", True, "getFileSuffixes", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio.spi", "ImageReaderWriterSpi", True, "getFormatNames", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio.spi", "ImageReaderWriterSpi", True, "getMIMETypes", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio.spi", "ImageReaderWriterSpi", True, "getNativeImageMetadataFormatName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio.spi", "ImageReaderWriterSpi", True, "getNativeStreamMetadataFormatName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio.spi", "ImageReaderWriterSpi", True, "getPluginClassName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio.spi", "ImageTranscoderSpi", True, "ImageTranscoderSpi", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.spi", "ImageTranscoderSpi", True, "ImageTranscoderSpi", "(String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.spi", "ImageWriterSpi", True, "ImageWriterSpi", "(String,String,String[],String[],String[],String,Class[],String[],boolean,String,String,String[],String[],boolean,String,String,String[],String[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.spi", "ImageWriterSpi", True, "ImageWriterSpi", "(String,String,String[],String[],String[],String,Class[],String[],boolean,String,String,String[],String[],boolean,String,String,String[],String[])", "", "Argument[10]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.spi", "ImageWriterSpi", True, "ImageWriterSpi", "(String,String,String[],String[],String[],String,Class[],String[],boolean,String,String,String[],String[],boolean,String,String,String[],String[])", "", "Argument[11].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.spi", "ImageWriterSpi", True, "ImageWriterSpi", "(String,String,String[],String[],String[],String,Class[],String[],boolean,String,String,String[],String[],boolean,String,String,String[],String[])", "", "Argument[12].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.spi", "ImageWriterSpi", True, "ImageWriterSpi", "(String,String,String[],String[],String[],String,Class[],String[],boolean,String,String,String[],String[],boolean,String,String,String[],String[])", "", "Argument[14]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.spi", "ImageWriterSpi", True, "ImageWriterSpi", "(String,String,String[],String[],String[],String,Class[],String[],boolean,String,String,String[],String[],boolean,String,String,String[],String[])", "", "Argument[15]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.spi", "ImageWriterSpi", True, "ImageWriterSpi", "(String,String,String[],String[],String[],String,Class[],String[],boolean,String,String,String[],String[],boolean,String,String,String[],String[])", "", "Argument[16].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.spi", "ImageWriterSpi", True, "ImageWriterSpi", "(String,String,String[],String[],String[],String,Class[],String[],boolean,String,String,String[],String[],boolean,String,String,String[],String[])", "", "Argument[17].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.spi", "ImageWriterSpi", True, "ImageWriterSpi", "(String,String,String[],String[],String[],String,Class[],String[],boolean,String,String,String[],String[],boolean,String,String,String[],String[])", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.spi", "ImageWriterSpi", True, "ImageWriterSpi", "(String,String,String[],String[],String[],String,Class[],String[],boolean,String,String,String[],String[],boolean,String,String,String[],String[])", "", "Argument[2].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.spi", "ImageWriterSpi", True, "ImageWriterSpi", "(String,String,String[],String[],String[],String,Class[],String[],boolean,String,String,String[],String[],boolean,String,String,String[],String[])", "", "Argument[3].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.spi", "ImageWriterSpi", True, "ImageWriterSpi", "(String,String,String[],String[],String[],String,Class[],String[],boolean,String,String,String[],String[],boolean,String,String,String[],String[])", "", "Argument[4].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.spi", "ImageWriterSpi", True, "ImageWriterSpi", "(String,String,String[],String[],String[],String,Class[],String[],boolean,String,String,String[],String[],boolean,String,String,String[],String[])", "", "Argument[5]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.spi", "ImageWriterSpi", True, "ImageWriterSpi", "(String,String,String[],String[],String[],String,Class[],String[],boolean,String,String,String[],String[],boolean,String,String,String[],String[])", "", "Argument[6].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.spi", "ImageWriterSpi", True, "ImageWriterSpi", "(String,String,String[],String[],String[],String,Class[],String[],boolean,String,String,String[],String[],boolean,String,String,String[],String[])", "", "Argument[7].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.spi", "ImageWriterSpi", True, "ImageWriterSpi", "(String,String,String[],String[],String[],String,Class[],String[],boolean,String,String,String[],String[],boolean,String,String,String[],String[])", "", "Argument[9]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.spi", "ImageWriterSpi", True, "createWriterInstance", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio.spi", "ImageWriterSpi", True, "getImageReaderSpiNames", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio.spi", "ImageWriterSpi", True, "getOutputTypes", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio.spi", "ServiceRegistry", True, "getCategories", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio.spi", "ServiceRegistry", True, "getServiceProviderByClass", "(Class)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio.spi", "ServiceRegistry", True, "getServiceProviders", "(Class,ServiceRegistry$Filter,boolean)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio.spi", "ServiceRegistry", True, "getServiceProviders", "(Class,ServiceRegistry$Filter,boolean)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio.spi", "ServiceRegistry", True, "getServiceProviders", "(Class,boolean)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio.spi", "ServiceRegistry", True, "lookupProviders", "(Class,ClassLoader)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["javax.imageio.spi", "IIORegistry", "getDefaultInstance", "()", "summary", "df-generated"] + - ["javax.imageio.spi", "IIORegistry", "registerApplicationClasspathSpis", "()", "summary", "df-generated"] + - ["javax.imageio.spi", "IIOServiceProvider", "getDescription", "(Locale)", "summary", "df-generated"] + - ["javax.imageio.spi", "ImageInputStreamSpi", "canUseCacheFile", "()", "summary", "df-generated"] + - ["javax.imageio.spi", "ImageInputStreamSpi", "createInputStreamInstance", "(Object,boolean,File)", "summary", "df-generated"] + - ["javax.imageio.spi", "ImageInputStreamSpi", "getInputClass", "()", "summary", "df-generated"] + - ["javax.imageio.spi", "ImageInputStreamSpi", "needsCacheFile", "()", "summary", "df-generated"] + - ["javax.imageio.spi", "ImageOutputStreamSpi", "canUseCacheFile", "()", "summary", "df-generated"] + - ["javax.imageio.spi", "ImageOutputStreamSpi", "createOutputStreamInstance", "(Object,boolean,File)", "summary", "df-generated"] + - ["javax.imageio.spi", "ImageOutputStreamSpi", "getOutputClass", "()", "summary", "df-generated"] + - ["javax.imageio.spi", "ImageOutputStreamSpi", "needsCacheFile", "()", "summary", "df-generated"] + - ["javax.imageio.spi", "ImageReaderSpi", "canDecodeInput", "(Object)", "summary", "df-generated"] + - ["javax.imageio.spi", "ImageReaderSpi", "createReaderInstance", "(Object)", "summary", "df-generated"] + - ["javax.imageio.spi", "ImageReaderSpi", "isOwnReader", "(ImageReader)", "summary", "df-generated"] + - ["javax.imageio.spi", "ImageReaderWriterSpi", "getImageMetadataFormat", "(String)", "summary", "df-generated"] + - ["javax.imageio.spi", "ImageReaderWriterSpi", "getStreamMetadataFormat", "(String)", "summary", "df-generated"] + - ["javax.imageio.spi", "ImageReaderWriterSpi", "isStandardImageMetadataFormatSupported", "()", "summary", "df-generated"] + - ["javax.imageio.spi", "ImageReaderWriterSpi", "isStandardStreamMetadataFormatSupported", "()", "summary", "df-generated"] + - ["javax.imageio.spi", "ImageTranscoderSpi", "createTranscoderInstance", "()", "summary", "df-generated"] + - ["javax.imageio.spi", "ImageTranscoderSpi", "getReaderServiceProviderName", "()", "summary", "df-generated"] + - ["javax.imageio.spi", "ImageTranscoderSpi", "getWriterServiceProviderName", "()", "summary", "df-generated"] + - ["javax.imageio.spi", "ImageWriterSpi", "canEncodeImage", "(ImageTypeSpecifier)", "summary", "df-generated"] + - ["javax.imageio.spi", "ImageWriterSpi", "canEncodeImage", "(RenderedImage)", "summary", "df-generated"] + - ["javax.imageio.spi", "ImageWriterSpi", "createWriterInstance", "(Object)", "summary", "df-generated"] + - ["javax.imageio.spi", "ImageWriterSpi", "isFormatLossless", "()", "summary", "df-generated"] + - ["javax.imageio.spi", "ImageWriterSpi", "isOwnWriter", "(ImageWriter)", "summary", "df-generated"] + - ["javax.imageio.spi", "RegisterableService", "onDeregistration", "(ServiceRegistry,Class)", "summary", "df-generated"] + - ["javax.imageio.spi", "RegisterableService", "onRegistration", "(ServiceRegistry,Class)", "summary", "df-generated"] + - ["javax.imageio.spi", "ServiceRegistry$Filter", "filter", "(Object)", "summary", "df-generated"] + - ["javax.imageio.spi", "ServiceRegistry", "ServiceRegistry", "(Iterator)", "summary", "df-generated"] + - ["javax.imageio.spi", "ServiceRegistry", "contains", "(Object)", "summary", "df-generated"] + - ["javax.imageio.spi", "ServiceRegistry", "deregisterAll", "()", "summary", "df-generated"] + - ["javax.imageio.spi", "ServiceRegistry", "deregisterAll", "(Class)", "summary", "df-generated"] + - ["javax.imageio.spi", "ServiceRegistry", "deregisterServiceProvider", "(Object)", "summary", "df-generated"] + - ["javax.imageio.spi", "ServiceRegistry", "deregisterServiceProvider", "(Object,Class)", "summary", "df-generated"] + - ["javax.imageio.spi", "ServiceRegistry", "lookupProviders", "(Class)", "summary", "df-generated"] + - ["javax.imageio.spi", "ServiceRegistry", "registerServiceProvider", "(Object)", "summary", "df-generated"] + - ["javax.imageio.spi", "ServiceRegistry", "registerServiceProvider", "(Object,Class)", "summary", "df-generated"] + - ["javax.imageio.spi", "ServiceRegistry", "registerServiceProviders", "(Iterator)", "summary", "df-generated"] + - ["javax.imageio.spi", "ServiceRegistry", "setOrdering", "(Class,Object,Object)", "summary", "df-generated"] + - ["javax.imageio.spi", "ServiceRegistry", "unsetOrdering", "(Class,Object,Object)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.imageio.stream.model.yml b/java/ql/lib/ext/generated/javax.imageio.stream.model.yml new file mode 100644 index 00000000000..f9dc67c2a67 --- /dev/null +++ b/java/ql/lib/ext/generated/javax.imageio.stream.model.yml @@ -0,0 +1,62 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.imageio.stream", "FileCacheImageOutputStream", True, "FileCacheImageOutputStream", "(OutputStream,File)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.stream", "FileCacheImageOutputStream", True, "FileCacheImageOutputStream", "(OutputStream,File)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.stream", "FileImageInputStream", True, "FileImageInputStream", "(File)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.stream", "FileImageInputStream", True, "FileImageInputStream", "(RandomAccessFile)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.stream", "FileImageOutputStream", True, "FileImageOutputStream", "(File)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.stream", "FileImageOutputStream", True, "FileImageOutputStream", "(RandomAccessFile)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.stream", "IIOByteBuffer", True, "IIOByteBuffer", "(byte[],int,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.stream", "IIOByteBuffer", True, "getData", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio.stream", "IIOByteBuffer", True, "setData", "(byte[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.stream", "ImageInputStream", True, "getByteOrder", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio.stream", "ImageInputStream", True, "read", "(byte[])", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] + - ["javax.imageio.stream", "ImageInputStream", True, "read", "(byte[],int,int)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] + - ["javax.imageio.stream", "ImageInputStream", True, "readBytes", "(IIOByteBuffer,int)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] + - ["javax.imageio.stream", "ImageInputStream", True, "setByteOrder", "(ByteOrder)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.stream", "MemoryCacheImageInputStream", True, "MemoryCacheImageInputStream", "(InputStream)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.stream", "MemoryCacheImageOutputStream", True, "MemoryCacheImageOutputStream", "(OutputStream)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["javax.imageio.stream", "IIOByteBuffer", "getLength", "()", "summary", "df-generated"] + - ["javax.imageio.stream", "IIOByteBuffer", "getOffset", "()", "summary", "df-generated"] + - ["javax.imageio.stream", "IIOByteBuffer", "setLength", "(int)", "summary", "df-generated"] + - ["javax.imageio.stream", "IIOByteBuffer", "setOffset", "(int)", "summary", "df-generated"] + - ["javax.imageio.stream", "ImageInputStream", "flush", "()", "summary", "df-generated"] + - ["javax.imageio.stream", "ImageInputStream", "flushBefore", "(long)", "summary", "df-generated"] + - ["javax.imageio.stream", "ImageInputStream", "getBitOffset", "()", "summary", "df-generated"] + - ["javax.imageio.stream", "ImageInputStream", "getFlushedPosition", "()", "summary", "df-generated"] + - ["javax.imageio.stream", "ImageInputStream", "getStreamPosition", "()", "summary", "df-generated"] + - ["javax.imageio.stream", "ImageInputStream", "isCached", "()", "summary", "df-generated"] + - ["javax.imageio.stream", "ImageInputStream", "isCachedFile", "()", "summary", "df-generated"] + - ["javax.imageio.stream", "ImageInputStream", "isCachedMemory", "()", "summary", "df-generated"] + - ["javax.imageio.stream", "ImageInputStream", "length", "()", "summary", "df-generated"] + - ["javax.imageio.stream", "ImageInputStream", "mark", "()", "summary", "df-generated"] + - ["javax.imageio.stream", "ImageInputStream", "read", "()", "summary", "df-generated"] + - ["javax.imageio.stream", "ImageInputStream", "readBit", "()", "summary", "df-generated"] + - ["javax.imageio.stream", "ImageInputStream", "readBits", "(int)", "summary", "df-generated"] + - ["javax.imageio.stream", "ImageInputStream", "readFully", "(char[],int,int)", "summary", "df-generated"] + - ["javax.imageio.stream", "ImageInputStream", "readFully", "(double[],int,int)", "summary", "df-generated"] + - ["javax.imageio.stream", "ImageInputStream", "readFully", "(float[],int,int)", "summary", "df-generated"] + - ["javax.imageio.stream", "ImageInputStream", "readFully", "(int[],int,int)", "summary", "df-generated"] + - ["javax.imageio.stream", "ImageInputStream", "readFully", "(long[],int,int)", "summary", "df-generated"] + - ["javax.imageio.stream", "ImageInputStream", "readFully", "(short[],int,int)", "summary", "df-generated"] + - ["javax.imageio.stream", "ImageInputStream", "readUnsignedInt", "()", "summary", "df-generated"] + - ["javax.imageio.stream", "ImageInputStream", "reset", "()", "summary", "df-generated"] + - ["javax.imageio.stream", "ImageInputStream", "seek", "(long)", "summary", "df-generated"] + - ["javax.imageio.stream", "ImageInputStream", "setBitOffset", "(int)", "summary", "df-generated"] + - ["javax.imageio.stream", "ImageInputStream", "skipBytes", "(long)", "summary", "df-generated"] + - ["javax.imageio.stream", "ImageOutputStream", "writeBit", "(int)", "summary", "df-generated"] + - ["javax.imageio.stream", "ImageOutputStream", "writeBits", "(long,int)", "summary", "df-generated"] + - ["javax.imageio.stream", "ImageOutputStream", "writeChars", "(char[],int,int)", "summary", "df-generated"] + - ["javax.imageio.stream", "ImageOutputStream", "writeDoubles", "(double[],int,int)", "summary", "df-generated"] + - ["javax.imageio.stream", "ImageOutputStream", "writeFloats", "(float[],int,int)", "summary", "df-generated"] + - ["javax.imageio.stream", "ImageOutputStream", "writeInts", "(int[],int,int)", "summary", "df-generated"] + - ["javax.imageio.stream", "ImageOutputStream", "writeLongs", "(long[],int,int)", "summary", "df-generated"] + - ["javax.imageio.stream", "ImageOutputStream", "writeShorts", "(short[],int,int)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.lang.model.element.model.yml b/java/ql/lib/ext/generated/javax.lang.model.element.model.yml new file mode 100644 index 00000000000..642f6c6315c --- /dev/null +++ b/java/ql/lib/ext/generated/javax.lang.model.element.model.yml @@ -0,0 +1,38 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.lang.model.element", "AnnotationValueVisitor", True, "visit", "(AnnotationValue)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.element", "AnnotationValueVisitor", True, "visit", "(AnnotationValue)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.element", "ElementVisitor", True, "visit", "(Element)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.lang.model.element", "ElementVisitor", True, "visit", "(Element)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.element", "ElementVisitor", True, "visit", "(Element)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.element", "UnknownAnnotationValueException", True, "UnknownAnnotationValueException", "(AnnotationValue,Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.lang.model.element", "UnknownAnnotationValueException", True, "UnknownAnnotationValueException", "(AnnotationValue,Object)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.lang.model.element", "UnknownAnnotationValueException", True, "getArgument", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.element", "UnknownAnnotationValueException", True, "getUnknownAnnotationValue", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.element", "UnknownDirectiveException", True, "UnknownDirectiveException", "(ModuleElement$Directive,Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.lang.model.element", "UnknownDirectiveException", True, "UnknownDirectiveException", "(ModuleElement$Directive,Object)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.lang.model.element", "UnknownDirectiveException", True, "getArgument", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.element", "UnknownDirectiveException", True, "getUnknownDirective", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.element", "UnknownElementException", True, "UnknownElementException", "(Element,Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.lang.model.element", "UnknownElementException", True, "UnknownElementException", "(Element,Object)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.lang.model.element", "UnknownElementException", True, "getArgument", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.element", "UnknownElementException", True, "getUnknownElement", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["javax.lang.model.element", "ElementKind", "isClass", "()", "summary", "df-generated"] + - ["javax.lang.model.element", "ElementKind", "isField", "()", "summary", "df-generated"] + - ["javax.lang.model.element", "ElementKind", "isInterface", "()", "summary", "df-generated"] + - ["javax.lang.model.element", "ElementVisitor", "visitModule", "(ModuleElement,Object)", "summary", "df-generated"] + - ["javax.lang.model.element", "ElementVisitor", "visitRecordComponent", "(RecordComponentElement,Object)", "summary", "df-generated"] + - ["javax.lang.model.element", "ModuleElement$DirectiveVisitor", "visit", "(ModuleElement$Directive)", "summary", "df-generated"] + - ["javax.lang.model.element", "ModuleElement$DirectiveVisitor", "visit", "(ModuleElement$Directive,Object)", "summary", "df-generated"] + - ["javax.lang.model.element", "ModuleElement$DirectiveVisitor", "visitUnknown", "(ModuleElement$Directive,Object)", "summary", "df-generated"] + - ["javax.lang.model.element", "NestingKind", "isNested", "()", "summary", "df-generated"] + - ["javax.lang.model.element", "TypeElement", "getPermittedSubclasses", "()", "summary", "df-generated"] + - ["javax.lang.model.element", "TypeElement", "getRecordComponents", "()", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.lang.model.model.yml b/java/ql/lib/ext/generated/javax.lang.model.model.yml new file mode 100644 index 00000000000..45b57d256bd --- /dev/null +++ b/java/ql/lib/ext/generated/javax.lang.model.model.yml @@ -0,0 +1,13 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["javax.lang.model", "SourceVersion", "isIdentifier", "(CharSequence)", "summary", "df-generated"] + - ["javax.lang.model", "SourceVersion", "isKeyword", "(CharSequence)", "summary", "df-generated"] + - ["javax.lang.model", "SourceVersion", "isKeyword", "(CharSequence,SourceVersion)", "summary", "df-generated"] + - ["javax.lang.model", "SourceVersion", "isName", "(CharSequence)", "summary", "df-generated"] + - ["javax.lang.model", "SourceVersion", "isName", "(CharSequence,SourceVersion)", "summary", "df-generated"] + - ["javax.lang.model", "SourceVersion", "latest", "()", "summary", "df-generated"] + - ["javax.lang.model", "SourceVersion", "latestSupported", "()", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.lang.model.type.model.yml b/java/ql/lib/ext/generated/javax.lang.model.type.model.yml new file mode 100644 index 00000000000..0e9eca5bac8 --- /dev/null +++ b/java/ql/lib/ext/generated/javax.lang.model.type.model.yml @@ -0,0 +1,20 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.lang.model.type", "MirroredTypeException", True, "MirroredTypeException", "(TypeMirror)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.lang.model.type", "MirroredTypeException", True, "getTypeMirror", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.type", "MirroredTypesException", True, "MirroredTypesException", "(List)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.lang.model.type", "MirroredTypesException", True, "getTypeMirrors", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.type", "TypeVisitor", True, "visit", "(TypeMirror)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.lang.model.type", "UnknownTypeException", True, "UnknownTypeException", "(TypeMirror,Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.lang.model.type", "UnknownTypeException", True, "UnknownTypeException", "(TypeMirror,Object)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.lang.model.type", "UnknownTypeException", True, "getArgument", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.type", "UnknownTypeException", True, "getUnknownType", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["javax.lang.model.type", "TypeKind", "isPrimitive", "()", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.lang.model.util.model.yml b/java/ql/lib/ext/generated/javax.lang.model.util.model.yml new file mode 100644 index 00000000000..e57b66161c4 --- /dev/null +++ b/java/ql/lib/ext/generated/javax.lang.model.util.model.yml @@ -0,0 +1,93 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.lang.model.util", "ElementFilter", True, "constructorsIn", "(Iterable)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.util", "ElementFilter", True, "constructorsIn", "(Set)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.util", "ElementFilter", True, "exportsIn", "(Iterable)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.util", "ElementFilter", True, "fieldsIn", "(Iterable)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.util", "ElementFilter", True, "fieldsIn", "(Set)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.util", "ElementFilter", True, "methodsIn", "(Iterable)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.util", "ElementFilter", True, "methodsIn", "(Set)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.util", "ElementFilter", True, "modulesIn", "(Iterable)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.util", "ElementFilter", True, "modulesIn", "(Set)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.util", "ElementFilter", True, "opensIn", "(Iterable)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.util", "ElementFilter", True, "packagesIn", "(Iterable)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.util", "ElementFilter", True, "packagesIn", "(Set)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.util", "ElementFilter", True, "providesIn", "(Iterable)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.util", "ElementFilter", True, "recordComponentsIn", "(Iterable)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.util", "ElementFilter", True, "recordComponentsIn", "(Set)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.util", "ElementFilter", True, "requiresIn", "(Iterable)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.util", "ElementFilter", True, "typesIn", "(Iterable)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.util", "ElementFilter", True, "typesIn", "(Set)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.util", "ElementFilter", True, "usesIn", "(Iterable)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.util", "ElementKindVisitor6", True, "visitExecutableAsConstructor", "(ExecutableElement,Object)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.util", "ElementKindVisitor6", True, "visitExecutableAsInstanceInit", "(ExecutableElement,Object)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.util", "ElementKindVisitor6", True, "visitExecutableAsMethod", "(ExecutableElement,Object)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.util", "ElementKindVisitor6", True, "visitExecutableAsStaticInit", "(ExecutableElement,Object)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.util", "ElementKindVisitor6", True, "visitTypeAsAnnotationType", "(TypeElement,Object)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.util", "ElementKindVisitor6", True, "visitTypeAsClass", "(TypeElement,Object)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.util", "ElementKindVisitor6", True, "visitTypeAsEnum", "(TypeElement,Object)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.util", "ElementKindVisitor6", True, "visitTypeAsInterface", "(TypeElement,Object)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.util", "ElementKindVisitor6", True, "visitVariableAsEnumConstant", "(VariableElement,Object)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.util", "ElementKindVisitor6", True, "visitVariableAsExceptionParameter", "(VariableElement,Object)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.util", "ElementKindVisitor6", True, "visitVariableAsField", "(VariableElement,Object)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.util", "ElementKindVisitor6", True, "visitVariableAsLocalVariable", "(VariableElement,Object)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.util", "ElementKindVisitor6", True, "visitVariableAsParameter", "(VariableElement,Object)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.util", "ElementScanner6", True, "scan", "(Element)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.lang.model.util", "ElementScanner6", True, "scan", "(Element)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.util", "ElementScanner6", True, "scan", "(Element)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.util", "ElementScanner6", True, "scan", "(Element,Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.lang.model.util", "ElementScanner6", True, "scan", "(Element,Object)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.util", "ElementScanner6", True, "scan", "(Element,Object)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.util", "ElementScanner6", True, "scan", "(Element,Object)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.util", "ElementScanner6", True, "scan", "(Iterable,Object)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.lang.model.util", "ElementScanner6", True, "scan", "(Iterable,Object)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.util", "ElementScanner6", True, "scan", "(Iterable,Object)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.util", "ElementScanner6", True, "scan", "(Iterable,Object)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.util", "Elements", True, "getAllPackageElements", "(CharSequence)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.util", "Elements", True, "getAllTypeElements", "(CharSequence)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.util", "Elements", True, "recordComponentFor", "(ExecutableElement)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.util", "TypeKindVisitor6", True, "visitNoTypeAsNone", "(NoType,Object)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.util", "TypeKindVisitor6", True, "visitNoTypeAsNone", "(NoType,Object)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.util", "TypeKindVisitor6", True, "visitNoTypeAsPackage", "(NoType,Object)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.util", "TypeKindVisitor6", True, "visitNoTypeAsPackage", "(NoType,Object)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.util", "TypeKindVisitor6", True, "visitNoTypeAsVoid", "(NoType,Object)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.util", "TypeKindVisitor6", True, "visitNoTypeAsVoid", "(NoType,Object)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.util", "TypeKindVisitor6", True, "visitPrimitiveAsBoolean", "(PrimitiveType,Object)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.util", "TypeKindVisitor6", True, "visitPrimitiveAsBoolean", "(PrimitiveType,Object)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.util", "TypeKindVisitor6", True, "visitPrimitiveAsByte", "(PrimitiveType,Object)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.util", "TypeKindVisitor6", True, "visitPrimitiveAsByte", "(PrimitiveType,Object)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.util", "TypeKindVisitor6", True, "visitPrimitiveAsChar", "(PrimitiveType,Object)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.util", "TypeKindVisitor6", True, "visitPrimitiveAsChar", "(PrimitiveType,Object)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.util", "TypeKindVisitor6", True, "visitPrimitiveAsDouble", "(PrimitiveType,Object)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.util", "TypeKindVisitor6", True, "visitPrimitiveAsDouble", "(PrimitiveType,Object)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.util", "TypeKindVisitor6", True, "visitPrimitiveAsFloat", "(PrimitiveType,Object)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.util", "TypeKindVisitor6", True, "visitPrimitiveAsFloat", "(PrimitiveType,Object)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.util", "TypeKindVisitor6", True, "visitPrimitiveAsInt", "(PrimitiveType,Object)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.util", "TypeKindVisitor6", True, "visitPrimitiveAsInt", "(PrimitiveType,Object)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.util", "TypeKindVisitor6", True, "visitPrimitiveAsLong", "(PrimitiveType,Object)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.util", "TypeKindVisitor6", True, "visitPrimitiveAsLong", "(PrimitiveType,Object)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.util", "TypeKindVisitor6", True, "visitPrimitiveAsShort", "(PrimitiveType,Object)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.util", "TypeKindVisitor6", True, "visitPrimitiveAsShort", "(PrimitiveType,Object)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["javax.lang.model.util", "ElementKindVisitor6", "visitTypeAsRecord", "(TypeElement,Object)", "summary", "df-generated"] + - ["javax.lang.model.util", "ElementKindVisitor6", "visitVariableAsBindingVariable", "(VariableElement,Object)", "summary", "df-generated"] + - ["javax.lang.model.util", "ElementKindVisitor6", "visitVariableAsResourceVariable", "(VariableElement,Object)", "summary", "df-generated"] + - ["javax.lang.model.util", "Elements$Origin", "isDeclared", "()", "summary", "df-generated"] + - ["javax.lang.model.util", "Elements", "getAllModuleElements", "()", "summary", "df-generated"] + - ["javax.lang.model.util", "Elements", "getModuleElement", "(CharSequence)", "summary", "df-generated"] + - ["javax.lang.model.util", "Elements", "getModuleOf", "(Element)", "summary", "df-generated"] + - ["javax.lang.model.util", "Elements", "getOrigin", "(AnnotatedConstruct,AnnotationMirror)", "summary", "df-generated"] + - ["javax.lang.model.util", "Elements", "getOrigin", "(Element)", "summary", "df-generated"] + - ["javax.lang.model.util", "Elements", "getOrigin", "(ModuleElement,ModuleElement$Directive)", "summary", "df-generated"] + - ["javax.lang.model.util", "Elements", "getPackageElement", "(ModuleElement,CharSequence)", "summary", "df-generated"] + - ["javax.lang.model.util", "Elements", "getTypeElement", "(ModuleElement,CharSequence)", "summary", "df-generated"] + - ["javax.lang.model.util", "Elements", "isAutomaticModule", "(ModuleElement)", "summary", "df-generated"] + - ["javax.lang.model.util", "Elements", "isBridge", "(ExecutableElement)", "summary", "df-generated"] + - ["javax.lang.model.util", "TypeKindVisitor6", "visitNoTypeAsModule", "(NoType,Object)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.management.loading.model.yml b/java/ql/lib/ext/generated/javax.management.loading.model.yml new file mode 100644 index 00000000000..ada13786d72 --- /dev/null +++ b/java/ql/lib/ext/generated/javax.management.loading.model.yml @@ -0,0 +1,44 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.management.loading", "MLet", True, "MLet", "(URL[],ClassLoader)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.loading", "MLet", True, "MLet", "(URL[],ClassLoader,URLStreamHandlerFactory)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.loading", "MLet", True, "MLet", "(URL[],ClassLoader,URLStreamHandlerFactory,boolean)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.loading", "MLet", True, "MLet", "(URL[],ClassLoader,boolean)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.loading", "MLet", True, "loadClass", "(String,ClassLoaderRepository)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.loading", "MLet", True, "loadClass", "(String,ClassLoaderRepository)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.loading", "MLetContent", True, "MLetContent", "(URL,Map,List,List)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.loading", "MLetContent", True, "MLetContent", "(URL,Map,List,List)", "", "Argument[1].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.management.loading", "MLetContent", True, "MLetContent", "(URL,Map,List,List)", "", "Argument[2].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.management.loading", "MLetContent", True, "MLetContent", "(URL,Map,List,List)", "", "Argument[3].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.management.loading", "MLetContent", True, "getAttributes", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.loading", "MLetContent", True, "getCode", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.loading", "MLetContent", True, "getCodeBase", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.loading", "MLetContent", True, "getDocumentBase", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.loading", "MLetContent", True, "getJarFiles", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.loading", "MLetContent", True, "getName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.loading", "MLetContent", True, "getParameterTypes", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.loading", "MLetContent", True, "getParameterValues", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.loading", "MLetContent", True, "getSerializedObject", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.loading", "MLetContent", True, "getVersion", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.loading", "MLetMBean", True, "getLibraryDirectory", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.loading", "MLetMBean", True, "getMBeansFromURL", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.loading", "MLetMBean", True, "getMBeansFromURL", "(URL)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.loading", "MLetMBean", True, "getURLs", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.loading", "MLetMBean", True, "setLibraryDirectory", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.loading", "PrivateMLet", True, "PrivateMLet", "(URL[],ClassLoader,URLStreamHandlerFactory,boolean)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.loading", "PrivateMLet", True, "PrivateMLet", "(URL[],ClassLoader,boolean)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["javax.management.loading", "DefaultLoaderRepository", "loadClass", "(String)", "summary", "df-generated"] + - ["javax.management.loading", "DefaultLoaderRepository", "loadClassWithout", "(ClassLoader,String)", "summary", "df-generated"] + - ["javax.management.loading", "MLet", "MLet", "(URL[])", "summary", "df-generated"] + - ["javax.management.loading", "MLet", "MLet", "(URL[],boolean)", "summary", "df-generated"] + - ["javax.management.loading", "MLetMBean", "addURL", "(String)", "summary", "df-generated"] + - ["javax.management.loading", "MLetMBean", "addURL", "(URL)", "summary", "df-generated"] + - ["javax.management.loading", "PrivateMLet", "PrivateMLet", "(URL[],boolean)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.management.model.yml b/java/ql/lib/ext/generated/javax.management.model.yml new file mode 100644 index 00000000000..fbde549df2e --- /dev/null +++ b/java/ql/lib/ext/generated/javax.management.model.yml @@ -0,0 +1,409 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.management", "Attribute", True, "Attribute", "(String,Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "Attribute", True, "Attribute", "(String,Object)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "Attribute", True, "getName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "Attribute", True, "getValue", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "AttributeChangeNotification", True, "AttributeChangeNotification", "(Object,long,long,String,String,String,Object,Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "AttributeChangeNotification", True, "AttributeChangeNotification", "(Object,long,long,String,String,String,Object,Object)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "AttributeChangeNotification", True, "AttributeChangeNotification", "(Object,long,long,String,String,String,Object,Object)", "", "Argument[4]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "AttributeChangeNotification", True, "AttributeChangeNotification", "(Object,long,long,String,String,String,Object,Object)", "", "Argument[5]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "AttributeChangeNotification", True, "AttributeChangeNotification", "(Object,long,long,String,String,String,Object,Object)", "", "Argument[6]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "AttributeChangeNotification", True, "AttributeChangeNotification", "(Object,long,long,String,String,String,Object,Object)", "", "Argument[7]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "AttributeChangeNotification", True, "getAttributeName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "AttributeChangeNotification", True, "getAttributeType", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "AttributeChangeNotification", True, "getNewValue", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "AttributeChangeNotification", True, "getOldValue", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "AttributeChangeNotificationFilter", True, "enableAttribute", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "AttributeChangeNotificationFilter", True, "getEnabledAttributes", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "AttributeList", True, "AttributeList", "(AttributeList)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "AttributeList", True, "AttributeList", "(List)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "AttributeList", True, "add", "(Attribute)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "AttributeList", True, "add", "(int,Attribute)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "AttributeList", True, "addAll", "(AttributeList)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "AttributeList", True, "asList", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "AttributeList", True, "set", "(int,Attribute)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "AttributeNotFoundException", True, "AttributeNotFoundException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "AttributeValueExp", True, "AttributeValueExp", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "AttributeValueExp", True, "getAttributeName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "BadAttributeValueExpException", True, "BadAttributeValueExpException", "(Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "BadBinaryOpValueExpException", True, "BadBinaryOpValueExpException", "(ValueExp)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "BadBinaryOpValueExpException", True, "getExp", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "BadStringOperationException", True, "BadStringOperationException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "Descriptor", True, "getFieldNames", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "Descriptor", True, "getFieldValue", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "Descriptor", True, "getFieldValues", "(String[])", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "Descriptor", True, "getFields", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "Descriptor", True, "setField", "(String,Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "Descriptor", True, "setField", "(String,Object)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "Descriptor", True, "setFields", "(String[],Object[])", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "Descriptor", True, "setFields", "(String[],Object[])", "", "Argument[1].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "DescriptorAccess", True, "setDescriptor", "(Descriptor)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "DescriptorAccess", True, "setDescriptor", "(Descriptor)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] + - ["javax.management", "DescriptorRead", True, "getDescriptor", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "DynamicMBean", True, "getAttributes", "(String[])", "", "Argument[0].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "DynamicMBean", True, "getMBeanInfo", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "DynamicMBean", True, "setAttributes", "(AttributeList)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "ImmutableDescriptor", True, "ImmutableDescriptor", "(Map)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "ImmutableDescriptor", True, "ImmutableDescriptor", "(String[])", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "ImmutableDescriptor", True, "ImmutableDescriptor", "(String[],Object[])", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "ImmutableDescriptor", True, "ImmutableDescriptor", "(String[],Object[])", "", "Argument[1].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "ImmutableDescriptor", True, "union", "(Descriptor[])", "", "Argument[0].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "InstanceAlreadyExistsException", True, "InstanceAlreadyExistsException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "InstanceNotFoundException", True, "InstanceNotFoundException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "IntrospectionException", True, "IntrospectionException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "InvalidApplicationException", True, "InvalidApplicationException", "(Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "InvalidAttributeValueException", True, "InvalidAttributeValueException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "JMException", True, "JMException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "JMRuntimeException", True, "JMRuntimeException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "ListenerNotFoundException", True, "ListenerNotFoundException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanAttributeInfo", True, "MBeanAttributeInfo", "(String,String,Method,Method)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanAttributeInfo", True, "MBeanAttributeInfo", "(String,String,Method,Method)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanAttributeInfo", True, "MBeanAttributeInfo", "(String,String,String,boolean,boolean,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanAttributeInfo", True, "MBeanAttributeInfo", "(String,String,String,boolean,boolean,boolean)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanAttributeInfo", True, "MBeanAttributeInfo", "(String,String,String,boolean,boolean,boolean)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanAttributeInfo", True, "MBeanAttributeInfo", "(String,String,String,boolean,boolean,boolean,Descriptor)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanAttributeInfo", True, "MBeanAttributeInfo", "(String,String,String,boolean,boolean,boolean,Descriptor)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanAttributeInfo", True, "MBeanAttributeInfo", "(String,String,String,boolean,boolean,boolean,Descriptor)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanAttributeInfo", True, "MBeanAttributeInfo", "(String,String,String,boolean,boolean,boolean,Descriptor)", "", "Argument[6]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanAttributeInfo", True, "getType", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "MBeanConstructorInfo", True, "MBeanConstructorInfo", "(String,Constructor)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanConstructorInfo", True, "MBeanConstructorInfo", "(String,String,MBeanParameterInfo[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanConstructorInfo", True, "MBeanConstructorInfo", "(String,String,MBeanParameterInfo[])", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanConstructorInfo", True, "MBeanConstructorInfo", "(String,String,MBeanParameterInfo[])", "", "Argument[2].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanConstructorInfo", True, "MBeanConstructorInfo", "(String,String,MBeanParameterInfo[],Descriptor)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanConstructorInfo", True, "MBeanConstructorInfo", "(String,String,MBeanParameterInfo[],Descriptor)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanConstructorInfo", True, "MBeanConstructorInfo", "(String,String,MBeanParameterInfo[],Descriptor)", "", "Argument[2].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanConstructorInfo", True, "MBeanConstructorInfo", "(String,String,MBeanParameterInfo[],Descriptor)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanConstructorInfo", True, "getSignature", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "MBeanException", True, "MBeanException", "(Exception)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanException", True, "MBeanException", "(Exception,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanException", True, "MBeanException", "(Exception,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanException", True, "getTargetException", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "MBeanFeatureInfo", True, "MBeanFeatureInfo", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanFeatureInfo", True, "MBeanFeatureInfo", "(String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanFeatureInfo", True, "MBeanFeatureInfo", "(String,String,Descriptor)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanFeatureInfo", True, "MBeanFeatureInfo", "(String,String,Descriptor)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanFeatureInfo", True, "MBeanFeatureInfo", "(String,String,Descriptor)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanFeatureInfo", True, "getDescription", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "MBeanFeatureInfo", True, "getName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "MBeanInfo", True, "MBeanInfo", "(String,String,MBeanAttributeInfo[],MBeanConstructorInfo[],MBeanOperationInfo[],MBeanNotificationInfo[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanInfo", True, "MBeanInfo", "(String,String,MBeanAttributeInfo[],MBeanConstructorInfo[],MBeanOperationInfo[],MBeanNotificationInfo[])", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanInfo", True, "MBeanInfo", "(String,String,MBeanAttributeInfo[],MBeanConstructorInfo[],MBeanOperationInfo[],MBeanNotificationInfo[])", "", "Argument[2].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanInfo", True, "MBeanInfo", "(String,String,MBeanAttributeInfo[],MBeanConstructorInfo[],MBeanOperationInfo[],MBeanNotificationInfo[])", "", "Argument[3].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanInfo", True, "MBeanInfo", "(String,String,MBeanAttributeInfo[],MBeanConstructorInfo[],MBeanOperationInfo[],MBeanNotificationInfo[])", "", "Argument[4].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanInfo", True, "MBeanInfo", "(String,String,MBeanAttributeInfo[],MBeanConstructorInfo[],MBeanOperationInfo[],MBeanNotificationInfo[])", "", "Argument[5].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanInfo", True, "MBeanInfo", "(String,String,MBeanAttributeInfo[],MBeanConstructorInfo[],MBeanOperationInfo[],MBeanNotificationInfo[],Descriptor)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanInfo", True, "MBeanInfo", "(String,String,MBeanAttributeInfo[],MBeanConstructorInfo[],MBeanOperationInfo[],MBeanNotificationInfo[],Descriptor)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanInfo", True, "MBeanInfo", "(String,String,MBeanAttributeInfo[],MBeanConstructorInfo[],MBeanOperationInfo[],MBeanNotificationInfo[],Descriptor)", "", "Argument[2].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanInfo", True, "MBeanInfo", "(String,String,MBeanAttributeInfo[],MBeanConstructorInfo[],MBeanOperationInfo[],MBeanNotificationInfo[],Descriptor)", "", "Argument[3].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanInfo", True, "MBeanInfo", "(String,String,MBeanAttributeInfo[],MBeanConstructorInfo[],MBeanOperationInfo[],MBeanNotificationInfo[],Descriptor)", "", "Argument[4].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanInfo", True, "MBeanInfo", "(String,String,MBeanAttributeInfo[],MBeanConstructorInfo[],MBeanOperationInfo[],MBeanNotificationInfo[],Descriptor)", "", "Argument[5].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanInfo", True, "MBeanInfo", "(String,String,MBeanAttributeInfo[],MBeanConstructorInfo[],MBeanOperationInfo[],MBeanNotificationInfo[],Descriptor)", "", "Argument[6]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanInfo", True, "getAttributes", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "MBeanInfo", True, "getClassName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "MBeanInfo", True, "getConstructors", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "MBeanInfo", True, "getDescription", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "MBeanInfo", True, "getNotifications", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "MBeanInfo", True, "getOperations", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "MBeanNotificationInfo", True, "MBeanNotificationInfo", "(String[],String,String)", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanNotificationInfo", True, "MBeanNotificationInfo", "(String[],String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanNotificationInfo", True, "MBeanNotificationInfo", "(String[],String,String)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanNotificationInfo", True, "MBeanNotificationInfo", "(String[],String,String,Descriptor)", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanNotificationInfo", True, "MBeanNotificationInfo", "(String[],String,String,Descriptor)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanNotificationInfo", True, "MBeanNotificationInfo", "(String[],String,String,Descriptor)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanNotificationInfo", True, "MBeanNotificationInfo", "(String[],String,String,Descriptor)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanNotificationInfo", True, "getNotifTypes", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "MBeanOperationInfo", True, "MBeanOperationInfo", "(String,Method)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanOperationInfo", True, "MBeanOperationInfo", "(String,Method)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanOperationInfo", True, "MBeanOperationInfo", "(String,String,MBeanParameterInfo[],String,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanOperationInfo", True, "MBeanOperationInfo", "(String,String,MBeanParameterInfo[],String,int)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanOperationInfo", True, "MBeanOperationInfo", "(String,String,MBeanParameterInfo[],String,int)", "", "Argument[2].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanOperationInfo", True, "MBeanOperationInfo", "(String,String,MBeanParameterInfo[],String,int)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanOperationInfo", True, "MBeanOperationInfo", "(String,String,MBeanParameterInfo[],String,int,Descriptor)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanOperationInfo", True, "MBeanOperationInfo", "(String,String,MBeanParameterInfo[],String,int,Descriptor)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanOperationInfo", True, "MBeanOperationInfo", "(String,String,MBeanParameterInfo[],String,int,Descriptor)", "", "Argument[2].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanOperationInfo", True, "MBeanOperationInfo", "(String,String,MBeanParameterInfo[],String,int,Descriptor)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanOperationInfo", True, "MBeanOperationInfo", "(String,String,MBeanParameterInfo[],String,int,Descriptor)", "", "Argument[5]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanOperationInfo", True, "getReturnType", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "MBeanOperationInfo", True, "getSignature", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "MBeanParameterInfo", True, "MBeanParameterInfo", "(String,String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanParameterInfo", True, "MBeanParameterInfo", "(String,String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanParameterInfo", True, "MBeanParameterInfo", "(String,String,String)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanParameterInfo", True, "MBeanParameterInfo", "(String,String,String,Descriptor)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanParameterInfo", True, "MBeanParameterInfo", "(String,String,String,Descriptor)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanParameterInfo", True, "MBeanParameterInfo", "(String,String,String,Descriptor)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanParameterInfo", True, "MBeanParameterInfo", "(String,String,String,Descriptor)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanParameterInfo", True, "getType", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "MBeanPermission", True, "MBeanPermission", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanPermission", True, "MBeanPermission", "(String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanPermission", True, "MBeanPermission", "(String,String,ObjectName,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanPermission", True, "MBeanPermission", "(String,String,ObjectName,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanPermission", True, "MBeanPermission", "(String,String,ObjectName,String)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanPermission", True, "MBeanPermission", "(String,String,ObjectName,String)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanRegistration", True, "preRegister", "(MBeanServer,ObjectName)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanRegistration", True, "preRegister", "(MBeanServer,ObjectName)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "MBeanRegistration", True, "preRegister", "(MBeanServer,ObjectName)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanRegistration", True, "preRegister", "(MBeanServer,ObjectName)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "MBeanRegistration", True, "preRegister", "(MBeanServer,ObjectName)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "MBeanRegistrationException", True, "MBeanRegistrationException", "(Exception)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanRegistrationException", True, "MBeanRegistrationException", "(Exception,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanRegistrationException", True, "MBeanRegistrationException", "(Exception,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanServerBuilder", True, "newMBeanServer", "(String,MBeanServer,MBeanServerDelegate)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "MBeanServerBuilder", True, "newMBeanServer", "(String,MBeanServer,MBeanServerDelegate)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "MBeanServerBuilder", True, "newMBeanServer", "(String,MBeanServer,MBeanServerDelegate)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "MBeanServerConnection", True, "createMBean", "(String,ObjectName)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "MBeanServerConnection", True, "createMBean", "(String,ObjectName)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "MBeanServerConnection", True, "createMBean", "(String,ObjectName,ObjectName)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "MBeanServerConnection", True, "createMBean", "(String,ObjectName,ObjectName)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "MBeanServerConnection", True, "createMBean", "(String,ObjectName,ObjectName)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "MBeanServerConnection", True, "createMBean", "(String,ObjectName,ObjectName,Object[],String[])", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "MBeanServerConnection", True, "createMBean", "(String,ObjectName,ObjectName,Object[],String[])", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "MBeanServerConnection", True, "createMBean", "(String,ObjectName,ObjectName,Object[],String[])", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "MBeanServerConnection", True, "createMBean", "(String,ObjectName,ObjectName,Object[],String[])", "", "Argument[4].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "MBeanServerConnection", True, "createMBean", "(String,ObjectName,Object[],String[])", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "MBeanServerConnection", True, "createMBean", "(String,ObjectName,Object[],String[])", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "MBeanServerConnection", True, "createMBean", "(String,ObjectName,Object[],String[])", "", "Argument[3].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "MBeanServerConnection", True, "getAttribute", "(ObjectName,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "MBeanServerConnection", True, "getAttribute", "(ObjectName,String)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "MBeanServerConnection", True, "getAttributes", "(ObjectName,String[])", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "MBeanServerConnection", True, "getAttributes", "(ObjectName,String[])", "", "Argument[1].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "MBeanServerConnection", True, "getObjectInstance", "(ObjectName)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "MBeanServerConnection", True, "invoke", "(ObjectName,String,Object[],String[])", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "MBeanServerConnection", True, "invoke", "(ObjectName,String,Object[],String[])", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "MBeanServerConnection", True, "invoke", "(ObjectName,String,Object[],String[])", "", "Argument[3].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "MBeanServerConnection", True, "setAttributes", "(ObjectName,AttributeList)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "MBeanServerDelegateMBean", True, "getMBeanServerId", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "MBeanServerFactory", True, "createMBeanServer", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "MBeanServerFactory", True, "getClassLoaderRepository", "(MBeanServer)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "MBeanServerFactory", True, "newMBeanServer", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "MBeanServerInvocationHandler", True, "MBeanServerInvocationHandler", "(MBeanServerConnection,ObjectName)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanServerInvocationHandler", True, "MBeanServerInvocationHandler", "(MBeanServerConnection,ObjectName)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanServerInvocationHandler", True, "MBeanServerInvocationHandler", "(MBeanServerConnection,ObjectName,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanServerInvocationHandler", True, "MBeanServerInvocationHandler", "(MBeanServerConnection,ObjectName,boolean)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanServerInvocationHandler", True, "getMBeanServerConnection", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "MBeanServerInvocationHandler", True, "getObjectName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "MBeanServerNotification", True, "MBeanServerNotification", "(String,Object,long,ObjectName)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanServerNotification", True, "MBeanServerNotification", "(String,Object,long,ObjectName)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanServerNotification", True, "MBeanServerNotification", "(String,Object,long,ObjectName)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanServerNotification", True, "getMBeanName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "MBeanTrustPermission", True, "MBeanTrustPermission", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanTrustPermission", True, "MBeanTrustPermission", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MalformedObjectNameException", True, "MalformedObjectNameException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "NotCompliantMBeanException", True, "NotCompliantMBeanException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "Notification", True, "Notification", "(String,Object,long)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "Notification", True, "Notification", "(String,Object,long)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "Notification", True, "Notification", "(String,Object,long,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "Notification", True, "Notification", "(String,Object,long,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "Notification", True, "Notification", "(String,Object,long,String)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "Notification", True, "Notification", "(String,Object,long,long)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "Notification", True, "Notification", "(String,Object,long,long)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "Notification", True, "Notification", "(String,Object,long,long,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "Notification", True, "Notification", "(String,Object,long,long,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "Notification", True, "Notification", "(String,Object,long,long,String)", "", "Argument[4]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "Notification", True, "getMessage", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "Notification", True, "getType", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "Notification", True, "getUserData", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "Notification", True, "setSource", "(Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "Notification", True, "setUserData", "(Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "NotificationBroadcaster", True, "getNotificationInfo", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "NotificationBroadcasterSupport", True, "NotificationBroadcasterSupport", "(Executor)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "NotificationBroadcasterSupport", True, "NotificationBroadcasterSupport", "(Executor,MBeanNotificationInfo[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "NotificationBroadcasterSupport", True, "NotificationBroadcasterSupport", "(Executor,MBeanNotificationInfo[])", "", "Argument[1].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "NotificationBroadcasterSupport", True, "NotificationBroadcasterSupport", "(MBeanNotificationInfo[])", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "NotificationFilterSupport", True, "enableType", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "NotificationFilterSupport", True, "getEnabledTypes", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "NotificationListener", True, "handleNotification", "(Notification,Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "ObjectInstance", True, "ObjectInstance", "(ObjectName,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "ObjectInstance", True, "ObjectInstance", "(ObjectName,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "ObjectInstance", True, "ObjectInstance", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "ObjectInstance", True, "ObjectInstance", "(String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "ObjectInstance", True, "getClassName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "ObjectInstance", True, "getObjectName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "ObjectName", True, "ObjectName", "(String,Hashtable)", "", "Argument[1].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "ObjectName", True, "ObjectName", "(String,String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "ObjectName", True, "ObjectName", "(String,String,String)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "ObjectName", True, "getCanonicalKeyPropertyListString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "ObjectName", True, "getCanonicalName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "ObjectName", True, "getDomain", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "ObjectName", True, "getInstance", "(ObjectName)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "ObjectName", True, "getInstance", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "ObjectName", True, "getInstance", "(String,Hashtable)", "", "Argument[1].Element", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "ObjectName", True, "getInstance", "(String,String,String)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "ObjectName", True, "getInstance", "(String,String,String)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "ObjectName", True, "getKeyProperty", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "ObjectName", True, "getKeyPropertyList", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "ObjectName", True, "getKeyPropertyListString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "OperationsException", True, "OperationsException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "Query", True, "and", "(QueryExp,QueryExp)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "Query", True, "and", "(QueryExp,QueryExp)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "Query", True, "anySubString", "(AttributeValueExp,StringValueExp)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "Query", True, "anySubString", "(AttributeValueExp,StringValueExp)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "Query", True, "attr", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "Query", True, "attr", "(String,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "Query", True, "attr", "(String,String)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "Query", True, "between", "(ValueExp,ValueExp,ValueExp)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "Query", True, "between", "(ValueExp,ValueExp,ValueExp)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "Query", True, "between", "(ValueExp,ValueExp,ValueExp)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "Query", True, "div", "(ValueExp,ValueExp)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "Query", True, "div", "(ValueExp,ValueExp)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "Query", True, "eq", "(ValueExp,ValueExp)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "Query", True, "eq", "(ValueExp,ValueExp)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "Query", True, "finalSubString", "(AttributeValueExp,StringValueExp)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "Query", True, "finalSubString", "(AttributeValueExp,StringValueExp)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "Query", True, "geq", "(ValueExp,ValueExp)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "Query", True, "geq", "(ValueExp,ValueExp)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "Query", True, "gt", "(ValueExp,ValueExp)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "Query", True, "gt", "(ValueExp,ValueExp)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "Query", True, "in", "(ValueExp,ValueExp[])", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "Query", True, "in", "(ValueExp,ValueExp[])", "", "Argument[1].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "Query", True, "initialSubString", "(AttributeValueExp,StringValueExp)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "Query", True, "initialSubString", "(AttributeValueExp,StringValueExp)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "Query", True, "isInstanceOf", "(StringValueExp)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "Query", True, "leq", "(ValueExp,ValueExp)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "Query", True, "leq", "(ValueExp,ValueExp)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "Query", True, "lt", "(ValueExp,ValueExp)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "Query", True, "lt", "(ValueExp,ValueExp)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "Query", True, "match", "(AttributeValueExp,StringValueExp)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "Query", True, "match", "(AttributeValueExp,StringValueExp)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "Query", True, "minus", "(ValueExp,ValueExp)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "Query", True, "minus", "(ValueExp,ValueExp)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "Query", True, "not", "(QueryExp)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "Query", True, "or", "(QueryExp,QueryExp)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "Query", True, "or", "(QueryExp,QueryExp)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "Query", True, "plus", "(ValueExp,ValueExp)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "Query", True, "plus", "(ValueExp,ValueExp)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "Query", True, "times", "(ValueExp,ValueExp)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "Query", True, "times", "(ValueExp,ValueExp)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "Query", True, "value", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "ReflectionException", True, "ReflectionException", "(Exception)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "ReflectionException", True, "ReflectionException", "(Exception,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "ReflectionException", True, "ReflectionException", "(Exception,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "ReflectionException", True, "getTargetException", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "RuntimeErrorException", True, "RuntimeErrorException", "(Error)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "RuntimeErrorException", True, "RuntimeErrorException", "(Error,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "RuntimeErrorException", True, "RuntimeErrorException", "(Error,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "RuntimeErrorException", True, "getTargetError", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "RuntimeMBeanException", True, "RuntimeMBeanException", "(RuntimeException)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "RuntimeMBeanException", True, "RuntimeMBeanException", "(RuntimeException,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "RuntimeMBeanException", True, "RuntimeMBeanException", "(RuntimeException,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "RuntimeMBeanException", True, "getTargetException", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "RuntimeOperationsException", True, "RuntimeOperationsException", "(RuntimeException)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "RuntimeOperationsException", True, "RuntimeOperationsException", "(RuntimeException,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "RuntimeOperationsException", True, "RuntimeOperationsException", "(RuntimeException,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "RuntimeOperationsException", True, "getTargetException", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "ServiceNotFoundException", True, "ServiceNotFoundException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "StandardEmitterMBean", True, "StandardEmitterMBean", "(Object,Class,NotificationEmitter)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "StandardEmitterMBean", True, "StandardEmitterMBean", "(Object,Class,NotificationEmitter)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "StandardEmitterMBean", True, "StandardEmitterMBean", "(Object,Class,boolean,NotificationEmitter)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "StandardEmitterMBean", True, "StandardEmitterMBean", "(Object,Class,boolean,NotificationEmitter)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "StandardMBean", True, "StandardMBean", "(Object,Class)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "StandardMBean", True, "StandardMBean", "(Object,Class,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "StandardMBean", True, "getImplementation", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "StandardMBean", True, "setImplementation", "(Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "StringValueExp", True, "StringValueExp", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "StringValueExp", True, "getValue", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "ValueExp", True, "apply", "(ObjectName)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "ValueExp", True, "apply", "(ObjectName)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["javax.management", "AttributeChangeNotificationFilter", "disableAllAttributes", "()", "summary", "df-generated"] + - ["javax.management", "AttributeChangeNotificationFilter", "disableAttribute", "(String)", "summary", "df-generated"] + - ["javax.management", "AttributeList", "AttributeList", "(int)", "summary", "df-generated"] + - ["javax.management", "AttributeList", "addAll", "(int,AttributeList)", "summary", "df-generated"] + - ["javax.management", "DefaultLoaderRepository", "loadClass", "(String)", "summary", "df-generated"] + - ["javax.management", "DefaultLoaderRepository", "loadClassWithout", "(ClassLoader,String)", "summary", "df-generated"] + - ["javax.management", "Descriptor", "isValid", "()", "summary", "df-generated"] + - ["javax.management", "Descriptor", "removeField", "(String)", "summary", "df-generated"] + - ["javax.management", "DynamicMBean", "getAttribute", "(String)", "summary", "df-generated"] + - ["javax.management", "DynamicMBean", "invoke", "(String,Object[],String[])", "summary", "df-generated"] + - ["javax.management", "DynamicMBean", "setAttribute", "(Attribute)", "summary", "df-generated"] + - ["javax.management", "JMX", "isMXBeanInterface", "(Class)", "summary", "df-generated"] + - ["javax.management", "JMX", "newMBeanProxy", "(MBeanServerConnection,ObjectName,Class)", "summary", "df-generated"] + - ["javax.management", "JMX", "newMBeanProxy", "(MBeanServerConnection,ObjectName,Class,boolean)", "summary", "df-generated"] + - ["javax.management", "JMX", "newMXBeanProxy", "(MBeanServerConnection,ObjectName,Class)", "summary", "df-generated"] + - ["javax.management", "JMX", "newMXBeanProxy", "(MBeanServerConnection,ObjectName,Class,boolean)", "summary", "df-generated"] + - ["javax.management", "MBeanAttributeInfo", "isIs", "()", "summary", "df-generated"] + - ["javax.management", "MBeanAttributeInfo", "isReadable", "()", "summary", "df-generated"] + - ["javax.management", "MBeanAttributeInfo", "isWritable", "()", "summary", "df-generated"] + - ["javax.management", "MBeanOperationInfo", "getImpact", "()", "summary", "df-generated"] + - ["javax.management", "MBeanRegistration", "postDeregister", "()", "summary", "df-generated"] + - ["javax.management", "MBeanRegistration", "postRegister", "(Boolean)", "summary", "df-generated"] + - ["javax.management", "MBeanRegistration", "preDeregister", "()", "summary", "df-generated"] + - ["javax.management", "MBeanServer", "deserialize", "(ObjectName,byte[])", "summary", "df-generated"] + - ["javax.management", "MBeanServer", "deserialize", "(String,ObjectName,byte[])", "summary", "df-generated"] + - ["javax.management", "MBeanServer", "deserialize", "(String,byte[])", "summary", "df-generated"] + - ["javax.management", "MBeanServerBuilder", "newMBeanServerDelegate", "()", "summary", "df-generated"] + - ["javax.management", "MBeanServerConnection", "addNotificationListener", "(ObjectName,NotificationListener,NotificationFilter,Object)", "summary", "df-generated"] + - ["javax.management", "MBeanServerConnection", "addNotificationListener", "(ObjectName,ObjectName,NotificationFilter,Object)", "summary", "df-generated"] + - ["javax.management", "MBeanServerConnection", "getDefaultDomain", "()", "summary", "df-generated"] + - ["javax.management", "MBeanServerConnection", "getDomains", "()", "summary", "df-generated"] + - ["javax.management", "MBeanServerConnection", "getMBeanCount", "()", "summary", "df-generated"] + - ["javax.management", "MBeanServerConnection", "getMBeanInfo", "(ObjectName)", "summary", "df-generated"] + - ["javax.management", "MBeanServerConnection", "isInstanceOf", "(ObjectName,String)", "summary", "df-generated"] + - ["javax.management", "MBeanServerConnection", "isRegistered", "(ObjectName)", "summary", "df-generated"] + - ["javax.management", "MBeanServerConnection", "queryMBeans", "(ObjectName,QueryExp)", "summary", "df-generated"] + - ["javax.management", "MBeanServerConnection", "queryNames", "(ObjectName,QueryExp)", "summary", "df-generated"] + - ["javax.management", "MBeanServerConnection", "removeNotificationListener", "(ObjectName,NotificationListener)", "summary", "df-generated"] + - ["javax.management", "MBeanServerConnection", "removeNotificationListener", "(ObjectName,NotificationListener,NotificationFilter,Object)", "summary", "df-generated"] + - ["javax.management", "MBeanServerConnection", "removeNotificationListener", "(ObjectName,ObjectName)", "summary", "df-generated"] + - ["javax.management", "MBeanServerConnection", "removeNotificationListener", "(ObjectName,ObjectName,NotificationFilter,Object)", "summary", "df-generated"] + - ["javax.management", "MBeanServerConnection", "setAttribute", "(ObjectName,Attribute)", "summary", "df-generated"] + - ["javax.management", "MBeanServerConnection", "unregisterMBean", "(ObjectName)", "summary", "df-generated"] + - ["javax.management", "MBeanServerDelegate", "sendNotification", "(Notification)", "summary", "df-generated"] + - ["javax.management", "MBeanServerDelegateMBean", "getImplementationName", "()", "summary", "df-generated"] + - ["javax.management", "MBeanServerDelegateMBean", "getImplementationVendor", "()", "summary", "df-generated"] + - ["javax.management", "MBeanServerDelegateMBean", "getImplementationVersion", "()", "summary", "df-generated"] + - ["javax.management", "MBeanServerDelegateMBean", "getSpecificationName", "()", "summary", "df-generated"] + - ["javax.management", "MBeanServerDelegateMBean", "getSpecificationVendor", "()", "summary", "df-generated"] + - ["javax.management", "MBeanServerDelegateMBean", "getSpecificationVersion", "()", "summary", "df-generated"] + - ["javax.management", "MBeanServerFactory", "createMBeanServer", "()", "summary", "df-generated"] + - ["javax.management", "MBeanServerFactory", "findMBeanServer", "(String)", "summary", "df-generated"] + - ["javax.management", "MBeanServerFactory", "newMBeanServer", "()", "summary", "df-generated"] + - ["javax.management", "MBeanServerFactory", "releaseMBeanServer", "(MBeanServer)", "summary", "df-generated"] + - ["javax.management", "MBeanServerInvocationHandler", "isMXBean", "()", "summary", "df-generated"] + - ["javax.management", "MBeanServerInvocationHandler", "newProxyInstance", "(MBeanServerConnection,ObjectName,Class,boolean)", "summary", "df-generated"] + - ["javax.management", "MBeanServerPermission", "MBeanServerPermission", "(String)", "summary", "df-generated"] + - ["javax.management", "MBeanServerPermission", "MBeanServerPermission", "(String,String)", "summary", "df-generated"] + - ["javax.management", "Notification", "getSequenceNumber", "()", "summary", "df-generated"] + - ["javax.management", "Notification", "getTimeStamp", "()", "summary", "df-generated"] + - ["javax.management", "Notification", "setSequenceNumber", "(long)", "summary", "df-generated"] + - ["javax.management", "Notification", "setTimeStamp", "(long)", "summary", "df-generated"] + - ["javax.management", "NotificationBroadcaster", "addNotificationListener", "(NotificationListener,NotificationFilter,Object)", "summary", "df-generated"] + - ["javax.management", "NotificationBroadcaster", "removeNotificationListener", "(NotificationListener)", "summary", "df-generated"] + - ["javax.management", "NotificationBroadcasterSupport", "sendNotification", "(Notification)", "summary", "df-generated"] + - ["javax.management", "NotificationEmitter", "removeNotificationListener", "(NotificationListener,NotificationFilter,Object)", "summary", "df-generated"] + - ["javax.management", "NotificationFilter", "isNotificationEnabled", "(Notification)", "summary", "df-generated"] + - ["javax.management", "NotificationFilterSupport", "disableAllTypes", "()", "summary", "df-generated"] + - ["javax.management", "NotificationFilterSupport", "disableType", "(String)", "summary", "df-generated"] + - ["javax.management", "ObjectName", "isDomainPattern", "()", "summary", "df-generated"] + - ["javax.management", "ObjectName", "isPattern", "()", "summary", "df-generated"] + - ["javax.management", "ObjectName", "isPropertyListPattern", "()", "summary", "df-generated"] + - ["javax.management", "ObjectName", "isPropertyPattern", "()", "summary", "df-generated"] + - ["javax.management", "ObjectName", "isPropertyValuePattern", "()", "summary", "df-generated"] + - ["javax.management", "ObjectName", "isPropertyValuePattern", "(String)", "summary", "df-generated"] + - ["javax.management", "ObjectName", "quote", "(String)", "summary", "df-generated"] + - ["javax.management", "ObjectName", "unquote", "(String)", "summary", "df-generated"] + - ["javax.management", "PersistentMBean", "load", "()", "summary", "df-generated"] + - ["javax.management", "PersistentMBean", "store", "()", "summary", "df-generated"] + - ["javax.management", "Query", "classattr", "()", "summary", "df-generated"] + - ["javax.management", "Query", "value", "(Number)", "summary", "df-generated"] + - ["javax.management", "Query", "value", "(boolean)", "summary", "df-generated"] + - ["javax.management", "Query", "value", "(double)", "summary", "df-generated"] + - ["javax.management", "Query", "value", "(float)", "summary", "df-generated"] + - ["javax.management", "Query", "value", "(int)", "summary", "df-generated"] + - ["javax.management", "Query", "value", "(long)", "summary", "df-generated"] + - ["javax.management", "QueryEval", "getMBeanServer", "()", "summary", "df-generated"] + - ["javax.management", "QueryEval", "setMBeanServer", "(MBeanServer)", "summary", "df-generated"] + - ["javax.management", "QueryExp", "apply", "(ObjectName)", "summary", "df-generated"] + - ["javax.management", "QueryExp", "setMBeanServer", "(MBeanServer)", "summary", "df-generated"] + - ["javax.management", "StandardEmitterMBean", "sendNotification", "(Notification)", "summary", "df-generated"] + - ["javax.management", "StandardMBean", "getImplementationClass", "()", "summary", "df-generated"] + - ["javax.management", "StandardMBean", "getMBeanInterface", "()", "summary", "df-generated"] + - ["javax.management", "ValueExp", "setMBeanServer", "(MBeanServer)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.management.modelmbean.model.yml b/java/ql/lib/ext/generated/javax.management.modelmbean.model.yml new file mode 100644 index 00000000000..9bf6223b24a --- /dev/null +++ b/java/ql/lib/ext/generated/javax.management.modelmbean.model.yml @@ -0,0 +1,113 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.management.modelmbean", "DescriptorSupport", True, "DescriptorSupport", "(DescriptorSupport)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "DescriptorSupport", True, "DescriptorSupport", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "DescriptorSupport", True, "DescriptorSupport", "(String[])", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "DescriptorSupport", True, "DescriptorSupport", "(String[],Object[])", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "DescriptorSupport", True, "DescriptorSupport", "(String[],Object[])", "", "Argument[1].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "DescriptorSupport", True, "toXMLString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.modelmbean", "InvalidTargetObjectTypeException", True, "InvalidTargetObjectTypeException", "(Exception,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "InvalidTargetObjectTypeException", True, "InvalidTargetObjectTypeException", "(Exception,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "InvalidTargetObjectTypeException", True, "InvalidTargetObjectTypeException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBean", True, "setManagedResource", "(Object,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBean", True, "setModelMBeanInfo", "(ModelMBeanInfo)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanAttributeInfo", True, "ModelMBeanAttributeInfo", "(ModelMBeanAttributeInfo)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanAttributeInfo", True, "ModelMBeanAttributeInfo", "(String,String,Method,Method)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanAttributeInfo", True, "ModelMBeanAttributeInfo", "(String,String,Method,Method)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanAttributeInfo", True, "ModelMBeanAttributeInfo", "(String,String,Method,Method,Descriptor)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanAttributeInfo", True, "ModelMBeanAttributeInfo", "(String,String,Method,Method,Descriptor)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanAttributeInfo", True, "ModelMBeanAttributeInfo", "(String,String,Method,Method,Descriptor)", "", "Argument[4]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanAttributeInfo", True, "ModelMBeanAttributeInfo", "(String,String,Method,Method,Descriptor)", "", "Argument[this]", "Argument[4]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanAttributeInfo", True, "ModelMBeanAttributeInfo", "(String,String,String,boolean,boolean,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanAttributeInfo", True, "ModelMBeanAttributeInfo", "(String,String,String,boolean,boolean,boolean)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanAttributeInfo", True, "ModelMBeanAttributeInfo", "(String,String,String,boolean,boolean,boolean)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanAttributeInfo", True, "ModelMBeanAttributeInfo", "(String,String,String,boolean,boolean,boolean,Descriptor)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanAttributeInfo", True, "ModelMBeanAttributeInfo", "(String,String,String,boolean,boolean,boolean,Descriptor)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanAttributeInfo", True, "ModelMBeanAttributeInfo", "(String,String,String,boolean,boolean,boolean,Descriptor)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanAttributeInfo", True, "ModelMBeanAttributeInfo", "(String,String,String,boolean,boolean,boolean,Descriptor)", "", "Argument[6]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanAttributeInfo", True, "ModelMBeanAttributeInfo", "(String,String,String,boolean,boolean,boolean,Descriptor)", "", "Argument[this]", "Argument[6]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanConstructorInfo", True, "ModelMBeanConstructorInfo", "(String,Constructor)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanConstructorInfo", True, "ModelMBeanConstructorInfo", "(String,Constructor,Descriptor)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanConstructorInfo", True, "ModelMBeanConstructorInfo", "(String,Constructor,Descriptor)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanConstructorInfo", True, "ModelMBeanConstructorInfo", "(String,Constructor,Descriptor)", "", "Argument[this]", "Argument[2]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanConstructorInfo", True, "ModelMBeanConstructorInfo", "(String,String,MBeanParameterInfo[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanConstructorInfo", True, "ModelMBeanConstructorInfo", "(String,String,MBeanParameterInfo[])", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanConstructorInfo", True, "ModelMBeanConstructorInfo", "(String,String,MBeanParameterInfo[])", "", "Argument[2].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanConstructorInfo", True, "ModelMBeanConstructorInfo", "(String,String,MBeanParameterInfo[],Descriptor)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanConstructorInfo", True, "ModelMBeanConstructorInfo", "(String,String,MBeanParameterInfo[],Descriptor)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanConstructorInfo", True, "ModelMBeanConstructorInfo", "(String,String,MBeanParameterInfo[],Descriptor)", "", "Argument[2].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanConstructorInfo", True, "ModelMBeanConstructorInfo", "(String,String,MBeanParameterInfo[],Descriptor)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanConstructorInfo", True, "ModelMBeanConstructorInfo", "(String,String,MBeanParameterInfo[],Descriptor)", "", "Argument[this]", "Argument[3]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanInfo", True, "getAttribute", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanInfo", True, "getDescriptor", "(String,String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanInfo", True, "getDescriptors", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanInfo", True, "getMBeanDescriptor", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanInfo", True, "getNotification", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanInfo", True, "getOperation", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanInfo", True, "setDescriptor", "(Descriptor,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanInfo", True, "setDescriptor", "(Descriptor,String)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanInfo", True, "setDescriptors", "(Descriptor[])", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanInfo", True, "setMBeanDescriptor", "(Descriptor)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanInfo", True, "setMBeanDescriptor", "(Descriptor)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanInfoSupport", True, "ModelMBeanInfoSupport", "(ModelMBeanInfo)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanInfoSupport", True, "ModelMBeanInfoSupport", "(String,String,ModelMBeanAttributeInfo[],ModelMBeanConstructorInfo[],ModelMBeanOperationInfo[],ModelMBeanNotificationInfo[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanInfoSupport", True, "ModelMBeanInfoSupport", "(String,String,ModelMBeanAttributeInfo[],ModelMBeanConstructorInfo[],ModelMBeanOperationInfo[],ModelMBeanNotificationInfo[])", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanInfoSupport", True, "ModelMBeanInfoSupport", "(String,String,ModelMBeanAttributeInfo[],ModelMBeanConstructorInfo[],ModelMBeanOperationInfo[],ModelMBeanNotificationInfo[])", "", "Argument[2].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanInfoSupport", True, "ModelMBeanInfoSupport", "(String,String,ModelMBeanAttributeInfo[],ModelMBeanConstructorInfo[],ModelMBeanOperationInfo[],ModelMBeanNotificationInfo[])", "", "Argument[3].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanInfoSupport", True, "ModelMBeanInfoSupport", "(String,String,ModelMBeanAttributeInfo[],ModelMBeanConstructorInfo[],ModelMBeanOperationInfo[],ModelMBeanNotificationInfo[])", "", "Argument[4].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanInfoSupport", True, "ModelMBeanInfoSupport", "(String,String,ModelMBeanAttributeInfo[],ModelMBeanConstructorInfo[],ModelMBeanOperationInfo[],ModelMBeanNotificationInfo[])", "", "Argument[5].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanInfoSupport", True, "ModelMBeanInfoSupport", "(String,String,ModelMBeanAttributeInfo[],ModelMBeanConstructorInfo[],ModelMBeanOperationInfo[],ModelMBeanNotificationInfo[],Descriptor)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanInfoSupport", True, "ModelMBeanInfoSupport", "(String,String,ModelMBeanAttributeInfo[],ModelMBeanConstructorInfo[],ModelMBeanOperationInfo[],ModelMBeanNotificationInfo[],Descriptor)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanInfoSupport", True, "ModelMBeanInfoSupport", "(String,String,ModelMBeanAttributeInfo[],ModelMBeanConstructorInfo[],ModelMBeanOperationInfo[],ModelMBeanNotificationInfo[],Descriptor)", "", "Argument[2].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanInfoSupport", True, "ModelMBeanInfoSupport", "(String,String,ModelMBeanAttributeInfo[],ModelMBeanConstructorInfo[],ModelMBeanOperationInfo[],ModelMBeanNotificationInfo[],Descriptor)", "", "Argument[3].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanInfoSupport", True, "ModelMBeanInfoSupport", "(String,String,ModelMBeanAttributeInfo[],ModelMBeanConstructorInfo[],ModelMBeanOperationInfo[],ModelMBeanNotificationInfo[],Descriptor)", "", "Argument[4].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanInfoSupport", True, "ModelMBeanInfoSupport", "(String,String,ModelMBeanAttributeInfo[],ModelMBeanConstructorInfo[],ModelMBeanOperationInfo[],ModelMBeanNotificationInfo[],Descriptor)", "", "Argument[5].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanInfoSupport", True, "ModelMBeanInfoSupport", "(String,String,ModelMBeanAttributeInfo[],ModelMBeanConstructorInfo[],ModelMBeanOperationInfo[],ModelMBeanNotificationInfo[],Descriptor)", "", "Argument[6]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanInfoSupport", True, "ModelMBeanInfoSupport", "(String,String,ModelMBeanAttributeInfo[],ModelMBeanConstructorInfo[],ModelMBeanOperationInfo[],ModelMBeanNotificationInfo[],Descriptor)", "", "Argument[this]", "Argument[6]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanInfoSupport", True, "getConstructor", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanInfoSupport", True, "getDescriptor", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanNotificationInfo", True, "ModelMBeanNotificationInfo", "(ModelMBeanNotificationInfo)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanNotificationInfo", True, "ModelMBeanNotificationInfo", "(String[],String,String)", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanNotificationInfo", True, "ModelMBeanNotificationInfo", "(String[],String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanNotificationInfo", True, "ModelMBeanNotificationInfo", "(String[],String,String)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanNotificationInfo", True, "ModelMBeanNotificationInfo", "(String[],String,String,Descriptor)", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanNotificationInfo", True, "ModelMBeanNotificationInfo", "(String[],String,String,Descriptor)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanNotificationInfo", True, "ModelMBeanNotificationInfo", "(String[],String,String,Descriptor)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanNotificationInfo", True, "ModelMBeanNotificationInfo", "(String[],String,String,Descriptor)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanNotificationInfo", True, "ModelMBeanNotificationInfo", "(String[],String,String,Descriptor)", "", "Argument[this]", "Argument[3]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanOperationInfo", True, "ModelMBeanOperationInfo", "(ModelMBeanOperationInfo)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanOperationInfo", True, "ModelMBeanOperationInfo", "(String,Method)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanOperationInfo", True, "ModelMBeanOperationInfo", "(String,Method)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanOperationInfo", True, "ModelMBeanOperationInfo", "(String,Method,Descriptor)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanOperationInfo", True, "ModelMBeanOperationInfo", "(String,Method,Descriptor)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanOperationInfo", True, "ModelMBeanOperationInfo", "(String,Method,Descriptor)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanOperationInfo", True, "ModelMBeanOperationInfo", "(String,Method,Descriptor)", "", "Argument[this]", "Argument[2]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanOperationInfo", True, "ModelMBeanOperationInfo", "(String,String,MBeanParameterInfo[],String,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanOperationInfo", True, "ModelMBeanOperationInfo", "(String,String,MBeanParameterInfo[],String,int)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanOperationInfo", True, "ModelMBeanOperationInfo", "(String,String,MBeanParameterInfo[],String,int)", "", "Argument[2].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanOperationInfo", True, "ModelMBeanOperationInfo", "(String,String,MBeanParameterInfo[],String,int)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanOperationInfo", True, "ModelMBeanOperationInfo", "(String,String,MBeanParameterInfo[],String,int,Descriptor)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanOperationInfo", True, "ModelMBeanOperationInfo", "(String,String,MBeanParameterInfo[],String,int,Descriptor)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanOperationInfo", True, "ModelMBeanOperationInfo", "(String,String,MBeanParameterInfo[],String,int,Descriptor)", "", "Argument[2].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanOperationInfo", True, "ModelMBeanOperationInfo", "(String,String,MBeanParameterInfo[],String,int,Descriptor)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanOperationInfo", True, "ModelMBeanOperationInfo", "(String,String,MBeanParameterInfo[],String,int,Descriptor)", "", "Argument[5]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanOperationInfo", True, "ModelMBeanOperationInfo", "(String,String,MBeanParameterInfo[],String,int,Descriptor)", "", "Argument[this]", "Argument[5]", "taint", "df-generated"] + - ["javax.management.modelmbean", "RequiredModelMBean", True, "RequiredModelMBean", "(ModelMBeanInfo)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "XMLParseException", True, "XMLParseException", "(Exception,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "XMLParseException", True, "XMLParseException", "(Exception,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "XMLParseException", True, "XMLParseException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["javax.management.modelmbean", "DescriptorSupport", "DescriptorSupport", "(int)", "summary", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanNotificationBroadcaster", "addAttributeChangeNotificationListener", "(NotificationListener,String,Object)", "summary", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanNotificationBroadcaster", "removeAttributeChangeNotificationListener", "(NotificationListener,String)", "summary", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanNotificationBroadcaster", "sendAttributeChangeNotification", "(Attribute,Attribute)", "summary", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanNotificationBroadcaster", "sendAttributeChangeNotification", "(AttributeChangeNotification)", "summary", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanNotificationBroadcaster", "sendNotification", "(Notification)", "summary", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanNotificationBroadcaster", "sendNotification", "(String)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.management.monitor.model.yml b/java/ql/lib/ext/generated/javax.management.monitor.model.yml new file mode 100644 index 00000000000..fecd28f766d --- /dev/null +++ b/java/ql/lib/ext/generated/javax.management.monitor.model.yml @@ -0,0 +1,68 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.management.monitor", "Monitor", True, "getDerivedGauge", "(ObjectName)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.monitor", "MonitorMBean", True, "getObservedAttribute", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.monitor", "MonitorMBean", True, "getObservedObject", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.monitor", "MonitorMBean", True, "getObservedObjects", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.monitor", "MonitorMBean", True, "setObservedAttribute", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.monitor", "MonitorNotification", True, "getDerivedGauge", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.monitor", "MonitorNotification", True, "getObservedAttribute", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.monitor", "MonitorNotification", True, "getObservedObject", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.monitor", "MonitorNotification", True, "getTrigger", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.monitor", "MonitorSettingException", True, "MonitorSettingException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.monitor", "StringMonitorMBean", True, "getDerivedGauge", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.monitor", "StringMonitorMBean", True, "getDerivedGauge", "(ObjectName)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.monitor", "StringMonitorMBean", True, "getStringToCompare", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.monitor", "StringMonitorMBean", True, "setStringToCompare", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["javax.management.monitor", "CounterMonitorMBean", "getDerivedGauge", "()", "summary", "df-generated"] + - ["javax.management.monitor", "CounterMonitorMBean", "getDerivedGaugeTimeStamp", "()", "summary", "df-generated"] + - ["javax.management.monitor", "CounterMonitorMBean", "getDerivedGaugeTimeStamp", "(ObjectName)", "summary", "df-generated"] + - ["javax.management.monitor", "CounterMonitorMBean", "getDifferenceMode", "()", "summary", "df-generated"] + - ["javax.management.monitor", "CounterMonitorMBean", "getInitThreshold", "()", "summary", "df-generated"] + - ["javax.management.monitor", "CounterMonitorMBean", "getModulus", "()", "summary", "df-generated"] + - ["javax.management.monitor", "CounterMonitorMBean", "getNotify", "()", "summary", "df-generated"] + - ["javax.management.monitor", "CounterMonitorMBean", "getOffset", "()", "summary", "df-generated"] + - ["javax.management.monitor", "CounterMonitorMBean", "getThreshold", "()", "summary", "df-generated"] + - ["javax.management.monitor", "CounterMonitorMBean", "getThreshold", "(ObjectName)", "summary", "df-generated"] + - ["javax.management.monitor", "CounterMonitorMBean", "setDifferenceMode", "(boolean)", "summary", "df-generated"] + - ["javax.management.monitor", "CounterMonitorMBean", "setInitThreshold", "(Number)", "summary", "df-generated"] + - ["javax.management.monitor", "CounterMonitorMBean", "setModulus", "(Number)", "summary", "df-generated"] + - ["javax.management.monitor", "CounterMonitorMBean", "setNotify", "(boolean)", "summary", "df-generated"] + - ["javax.management.monitor", "CounterMonitorMBean", "setOffset", "(Number)", "summary", "df-generated"] + - ["javax.management.monitor", "CounterMonitorMBean", "setThreshold", "(Number)", "summary", "df-generated"] + - ["javax.management.monitor", "GaugeMonitorMBean", "getDerivedGauge", "()", "summary", "df-generated"] + - ["javax.management.monitor", "GaugeMonitorMBean", "getDerivedGaugeTimeStamp", "()", "summary", "df-generated"] + - ["javax.management.monitor", "GaugeMonitorMBean", "getDerivedGaugeTimeStamp", "(ObjectName)", "summary", "df-generated"] + - ["javax.management.monitor", "GaugeMonitorMBean", "getDifferenceMode", "()", "summary", "df-generated"] + - ["javax.management.monitor", "GaugeMonitorMBean", "getHighThreshold", "()", "summary", "df-generated"] + - ["javax.management.monitor", "GaugeMonitorMBean", "getLowThreshold", "()", "summary", "df-generated"] + - ["javax.management.monitor", "GaugeMonitorMBean", "getNotifyHigh", "()", "summary", "df-generated"] + - ["javax.management.monitor", "GaugeMonitorMBean", "getNotifyLow", "()", "summary", "df-generated"] + - ["javax.management.monitor", "GaugeMonitorMBean", "setDifferenceMode", "(boolean)", "summary", "df-generated"] + - ["javax.management.monitor", "GaugeMonitorMBean", "setNotifyHigh", "(boolean)", "summary", "df-generated"] + - ["javax.management.monitor", "GaugeMonitorMBean", "setNotifyLow", "(boolean)", "summary", "df-generated"] + - ["javax.management.monitor", "GaugeMonitorMBean", "setThresholds", "(Number,Number)", "summary", "df-generated"] + - ["javax.management.monitor", "Monitor", "getDerivedGaugeTimeStamp", "(ObjectName)", "summary", "df-generated"] + - ["javax.management.monitor", "MonitorMBean", "addObservedObject", "(ObjectName)", "summary", "df-generated"] + - ["javax.management.monitor", "MonitorMBean", "containsObservedObject", "(ObjectName)", "summary", "df-generated"] + - ["javax.management.monitor", "MonitorMBean", "getGranularityPeriod", "()", "summary", "df-generated"] + - ["javax.management.monitor", "MonitorMBean", "isActive", "()", "summary", "df-generated"] + - ["javax.management.monitor", "MonitorMBean", "removeObservedObject", "(ObjectName)", "summary", "df-generated"] + - ["javax.management.monitor", "MonitorMBean", "setGranularityPeriod", "(long)", "summary", "df-generated"] + - ["javax.management.monitor", "MonitorMBean", "setObservedObject", "(ObjectName)", "summary", "df-generated"] + - ["javax.management.monitor", "MonitorMBean", "start", "()", "summary", "df-generated"] + - ["javax.management.monitor", "MonitorMBean", "stop", "()", "summary", "df-generated"] + - ["javax.management.monitor", "StringMonitorMBean", "getDerivedGaugeTimeStamp", "()", "summary", "df-generated"] + - ["javax.management.monitor", "StringMonitorMBean", "getDerivedGaugeTimeStamp", "(ObjectName)", "summary", "df-generated"] + - ["javax.management.monitor", "StringMonitorMBean", "getNotifyDiffer", "()", "summary", "df-generated"] + - ["javax.management.monitor", "StringMonitorMBean", "getNotifyMatch", "()", "summary", "df-generated"] + - ["javax.management.monitor", "StringMonitorMBean", "setNotifyDiffer", "(boolean)", "summary", "df-generated"] + - ["javax.management.monitor", "StringMonitorMBean", "setNotifyMatch", "(boolean)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.management.openmbean.model.yml b/java/ql/lib/ext/generated/javax.management.openmbean.model.yml new file mode 100644 index 00000000000..7ad51e1fb4f --- /dev/null +++ b/java/ql/lib/ext/generated/javax.management.openmbean.model.yml @@ -0,0 +1,150 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.management.openmbean", "ArrayType", True, "ArrayType", "(SimpleType,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "ArrayType", True, "ArrayType", "(int,OpenType)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "ArrayType", True, "getArrayType", "(OpenType)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.openmbean", "ArrayType", True, "getElementOpenType", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.openmbean", "CompositeData", True, "get", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.openmbean", "CompositeData", True, "getAll", "(String[])", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.openmbean", "CompositeData", True, "getCompositeType", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.openmbean", "CompositeData", True, "values", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.openmbean", "CompositeDataInvocationHandler", True, "CompositeDataInvocationHandler", "(CompositeData)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "CompositeDataInvocationHandler", True, "getCompositeData", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.openmbean", "CompositeDataSupport", True, "CompositeDataSupport", "(CompositeType,Map)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "CompositeDataSupport", True, "CompositeDataSupport", "(CompositeType,Map)", "", "Argument[1].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "CompositeDataSupport", True, "CompositeDataSupport", "(CompositeType,String[],Object[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "CompositeDataSupport", True, "CompositeDataSupport", "(CompositeType,String[],Object[])", "", "Argument[1].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "CompositeDataSupport", True, "CompositeDataSupport", "(CompositeType,String[],Object[])", "", "Argument[2].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "CompositeType", True, "CompositeType", "(String,String,String[],String[],OpenType[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "CompositeType", True, "CompositeType", "(String,String,String[],String[],OpenType[])", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "CompositeType", True, "CompositeType", "(String,String,String[],String[],OpenType[])", "", "Argument[2].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "CompositeType", True, "CompositeType", "(String,String,String[],String[],OpenType[])", "", "Argument[3].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "CompositeType", True, "CompositeType", "(String,String,String[],String[],OpenType[])", "", "Argument[4].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "CompositeType", True, "getDescription", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.openmbean", "CompositeType", True, "getType", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.openmbean", "CompositeType", True, "keySet", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.openmbean", "InvalidKeyException", True, "InvalidKeyException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "InvalidOpenTypeException", True, "InvalidOpenTypeException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "KeyAlreadyExistsException", True, "KeyAlreadyExistsException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenDataException", True, "OpenDataException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanAttributeInfoSupport", True, "OpenMBeanAttributeInfoSupport", "(String,String,OpenType,boolean,boolean,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanAttributeInfoSupport", True, "OpenMBeanAttributeInfoSupport", "(String,String,OpenType,boolean,boolean,boolean)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanAttributeInfoSupport", True, "OpenMBeanAttributeInfoSupport", "(String,String,OpenType,boolean,boolean,boolean)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanAttributeInfoSupport", True, "OpenMBeanAttributeInfoSupport", "(String,String,OpenType,boolean,boolean,boolean,Descriptor)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanAttributeInfoSupport", True, "OpenMBeanAttributeInfoSupport", "(String,String,OpenType,boolean,boolean,boolean,Descriptor)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanAttributeInfoSupport", True, "OpenMBeanAttributeInfoSupport", "(String,String,OpenType,boolean,boolean,boolean,Descriptor)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanAttributeInfoSupport", True, "OpenMBeanAttributeInfoSupport", "(String,String,OpenType,boolean,boolean,boolean,Descriptor)", "", "Argument[6]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanAttributeInfoSupport", True, "OpenMBeanAttributeInfoSupport", "(String,String,OpenType,boolean,boolean,boolean,Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanAttributeInfoSupport", True, "OpenMBeanAttributeInfoSupport", "(String,String,OpenType,boolean,boolean,boolean,Object)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanAttributeInfoSupport", True, "OpenMBeanAttributeInfoSupport", "(String,String,OpenType,boolean,boolean,boolean,Object)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanAttributeInfoSupport", True, "OpenMBeanAttributeInfoSupport", "(String,String,OpenType,boolean,boolean,boolean,Object)", "", "Argument[6]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanAttributeInfoSupport", True, "OpenMBeanAttributeInfoSupport", "(String,String,OpenType,boolean,boolean,boolean,Object,Comparable,Comparable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanAttributeInfoSupport", True, "OpenMBeanAttributeInfoSupport", "(String,String,OpenType,boolean,boolean,boolean,Object,Comparable,Comparable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanAttributeInfoSupport", True, "OpenMBeanAttributeInfoSupport", "(String,String,OpenType,boolean,boolean,boolean,Object,Comparable,Comparable)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanAttributeInfoSupport", True, "OpenMBeanAttributeInfoSupport", "(String,String,OpenType,boolean,boolean,boolean,Object,Comparable,Comparable)", "", "Argument[6]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanAttributeInfoSupport", True, "OpenMBeanAttributeInfoSupport", "(String,String,OpenType,boolean,boolean,boolean,Object,Comparable,Comparable)", "", "Argument[7]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanAttributeInfoSupport", True, "OpenMBeanAttributeInfoSupport", "(String,String,OpenType,boolean,boolean,boolean,Object,Comparable,Comparable)", "", "Argument[8]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanAttributeInfoSupport", True, "OpenMBeanAttributeInfoSupport", "(String,String,OpenType,boolean,boolean,boolean,Object,Object[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanAttributeInfoSupport", True, "OpenMBeanAttributeInfoSupport", "(String,String,OpenType,boolean,boolean,boolean,Object,Object[])", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanAttributeInfoSupport", True, "OpenMBeanAttributeInfoSupport", "(String,String,OpenType,boolean,boolean,boolean,Object,Object[])", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanAttributeInfoSupport", True, "OpenMBeanAttributeInfoSupport", "(String,String,OpenType,boolean,boolean,boolean,Object,Object[])", "", "Argument[6]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanConstructorInfoSupport", True, "OpenMBeanConstructorInfoSupport", "(String,String,OpenMBeanParameterInfo[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanConstructorInfoSupport", True, "OpenMBeanConstructorInfoSupport", "(String,String,OpenMBeanParameterInfo[])", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanConstructorInfoSupport", True, "OpenMBeanConstructorInfoSupport", "(String,String,OpenMBeanParameterInfo[])", "", "Argument[2].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanConstructorInfoSupport", True, "OpenMBeanConstructorInfoSupport", "(String,String,OpenMBeanParameterInfo[],Descriptor)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanConstructorInfoSupport", True, "OpenMBeanConstructorInfoSupport", "(String,String,OpenMBeanParameterInfo[],Descriptor)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanConstructorInfoSupport", True, "OpenMBeanConstructorInfoSupport", "(String,String,OpenMBeanParameterInfo[],Descriptor)", "", "Argument[2].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanConstructorInfoSupport", True, "OpenMBeanConstructorInfoSupport", "(String,String,OpenMBeanParameterInfo[],Descriptor)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanInfoSupport", True, "OpenMBeanInfoSupport", "(String,String,OpenMBeanAttributeInfo[],OpenMBeanConstructorInfo[],OpenMBeanOperationInfo[],MBeanNotificationInfo[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanInfoSupport", True, "OpenMBeanInfoSupport", "(String,String,OpenMBeanAttributeInfo[],OpenMBeanConstructorInfo[],OpenMBeanOperationInfo[],MBeanNotificationInfo[])", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanInfoSupport", True, "OpenMBeanInfoSupport", "(String,String,OpenMBeanAttributeInfo[],OpenMBeanConstructorInfo[],OpenMBeanOperationInfo[],MBeanNotificationInfo[])", "", "Argument[2].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanInfoSupport", True, "OpenMBeanInfoSupport", "(String,String,OpenMBeanAttributeInfo[],OpenMBeanConstructorInfo[],OpenMBeanOperationInfo[],MBeanNotificationInfo[])", "", "Argument[3].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanInfoSupport", True, "OpenMBeanInfoSupport", "(String,String,OpenMBeanAttributeInfo[],OpenMBeanConstructorInfo[],OpenMBeanOperationInfo[],MBeanNotificationInfo[])", "", "Argument[4].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanInfoSupport", True, "OpenMBeanInfoSupport", "(String,String,OpenMBeanAttributeInfo[],OpenMBeanConstructorInfo[],OpenMBeanOperationInfo[],MBeanNotificationInfo[])", "", "Argument[5].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanInfoSupport", True, "OpenMBeanInfoSupport", "(String,String,OpenMBeanAttributeInfo[],OpenMBeanConstructorInfo[],OpenMBeanOperationInfo[],MBeanNotificationInfo[],Descriptor)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanInfoSupport", True, "OpenMBeanInfoSupport", "(String,String,OpenMBeanAttributeInfo[],OpenMBeanConstructorInfo[],OpenMBeanOperationInfo[],MBeanNotificationInfo[],Descriptor)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanInfoSupport", True, "OpenMBeanInfoSupport", "(String,String,OpenMBeanAttributeInfo[],OpenMBeanConstructorInfo[],OpenMBeanOperationInfo[],MBeanNotificationInfo[],Descriptor)", "", "Argument[2].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanInfoSupport", True, "OpenMBeanInfoSupport", "(String,String,OpenMBeanAttributeInfo[],OpenMBeanConstructorInfo[],OpenMBeanOperationInfo[],MBeanNotificationInfo[],Descriptor)", "", "Argument[3].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanInfoSupport", True, "OpenMBeanInfoSupport", "(String,String,OpenMBeanAttributeInfo[],OpenMBeanConstructorInfo[],OpenMBeanOperationInfo[],MBeanNotificationInfo[],Descriptor)", "", "Argument[4].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanInfoSupport", True, "OpenMBeanInfoSupport", "(String,String,OpenMBeanAttributeInfo[],OpenMBeanConstructorInfo[],OpenMBeanOperationInfo[],MBeanNotificationInfo[],Descriptor)", "", "Argument[5].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanInfoSupport", True, "OpenMBeanInfoSupport", "(String,String,OpenMBeanAttributeInfo[],OpenMBeanConstructorInfo[],OpenMBeanOperationInfo[],MBeanNotificationInfo[],Descriptor)", "", "Argument[6]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanOperationInfo", True, "getReturnOpenType", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanOperationInfoSupport", True, "OpenMBeanOperationInfoSupport", "(String,String,OpenMBeanParameterInfo[],OpenType,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanOperationInfoSupport", True, "OpenMBeanOperationInfoSupport", "(String,String,OpenMBeanParameterInfo[],OpenType,int)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanOperationInfoSupport", True, "OpenMBeanOperationInfoSupport", "(String,String,OpenMBeanParameterInfo[],OpenType,int)", "", "Argument[2].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanOperationInfoSupport", True, "OpenMBeanOperationInfoSupport", "(String,String,OpenMBeanParameterInfo[],OpenType,int)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanOperationInfoSupport", True, "OpenMBeanOperationInfoSupport", "(String,String,OpenMBeanParameterInfo[],OpenType,int,Descriptor)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanOperationInfoSupport", True, "OpenMBeanOperationInfoSupport", "(String,String,OpenMBeanParameterInfo[],OpenType,int,Descriptor)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanOperationInfoSupport", True, "OpenMBeanOperationInfoSupport", "(String,String,OpenMBeanParameterInfo[],OpenType,int,Descriptor)", "", "Argument[2].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanOperationInfoSupport", True, "OpenMBeanOperationInfoSupport", "(String,String,OpenMBeanParameterInfo[],OpenType,int,Descriptor)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanOperationInfoSupport", True, "OpenMBeanOperationInfoSupport", "(String,String,OpenMBeanParameterInfo[],OpenType,int,Descriptor)", "", "Argument[5]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanParameterInfo", True, "getDefaultValue", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanParameterInfo", True, "getLegalValues", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanParameterInfo", True, "getMaxValue", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanParameterInfo", True, "getMinValue", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanParameterInfo", True, "getOpenType", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanParameterInfoSupport", True, "OpenMBeanParameterInfoSupport", "(String,String,OpenType)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanParameterInfoSupport", True, "OpenMBeanParameterInfoSupport", "(String,String,OpenType)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanParameterInfoSupport", True, "OpenMBeanParameterInfoSupport", "(String,String,OpenType)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanParameterInfoSupport", True, "OpenMBeanParameterInfoSupport", "(String,String,OpenType,Descriptor)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanParameterInfoSupport", True, "OpenMBeanParameterInfoSupport", "(String,String,OpenType,Descriptor)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanParameterInfoSupport", True, "OpenMBeanParameterInfoSupport", "(String,String,OpenType,Descriptor)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanParameterInfoSupport", True, "OpenMBeanParameterInfoSupport", "(String,String,OpenType,Descriptor)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanParameterInfoSupport", True, "OpenMBeanParameterInfoSupport", "(String,String,OpenType,Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanParameterInfoSupport", True, "OpenMBeanParameterInfoSupport", "(String,String,OpenType,Object)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanParameterInfoSupport", True, "OpenMBeanParameterInfoSupport", "(String,String,OpenType,Object)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanParameterInfoSupport", True, "OpenMBeanParameterInfoSupport", "(String,String,OpenType,Object)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanParameterInfoSupport", True, "OpenMBeanParameterInfoSupport", "(String,String,OpenType,Object,Comparable,Comparable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanParameterInfoSupport", True, "OpenMBeanParameterInfoSupport", "(String,String,OpenType,Object,Comparable,Comparable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanParameterInfoSupport", True, "OpenMBeanParameterInfoSupport", "(String,String,OpenType,Object,Comparable,Comparable)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanParameterInfoSupport", True, "OpenMBeanParameterInfoSupport", "(String,String,OpenType,Object,Comparable,Comparable)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanParameterInfoSupport", True, "OpenMBeanParameterInfoSupport", "(String,String,OpenType,Object,Comparable,Comparable)", "", "Argument[4]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanParameterInfoSupport", True, "OpenMBeanParameterInfoSupport", "(String,String,OpenType,Object,Comparable,Comparable)", "", "Argument[5]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanParameterInfoSupport", True, "OpenMBeanParameterInfoSupport", "(String,String,OpenType,Object,Object[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanParameterInfoSupport", True, "OpenMBeanParameterInfoSupport", "(String,String,OpenType,Object,Object[])", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanParameterInfoSupport", True, "OpenMBeanParameterInfoSupport", "(String,String,OpenType,Object,Object[])", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanParameterInfoSupport", True, "OpenMBeanParameterInfoSupport", "(String,String,OpenType,Object,Object[])", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenType", True, "getClassName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenType", True, "getDescription", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenType", True, "getTypeName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.openmbean", "TabularData", True, "get", "(Object[])", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.openmbean", "TabularData", True, "getTabularType", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.openmbean", "TabularData", True, "put", "(CompositeData)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "TabularData", True, "putAll", "(CompositeData[])", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "TabularData", True, "remove", "(Object[])", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.openmbean", "TabularDataSupport", True, "TabularDataSupport", "(TabularType)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "TabularDataSupport", True, "TabularDataSupport", "(TabularType,int,float)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "TabularType", True, "TabularType", "(String,String,CompositeType,String[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "TabularType", True, "TabularType", "(String,String,CompositeType,String[])", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "TabularType", True, "TabularType", "(String,String,CompositeType,String[])", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "TabularType", True, "TabularType", "(String,String,CompositeType,String[])", "", "Argument[3].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "TabularType", True, "getIndexNames", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.openmbean", "TabularType", True, "getRowType", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["javax.management.openmbean", "ArrayType", "getDimension", "()", "summary", "df-generated"] + - ["javax.management.openmbean", "ArrayType", "getPrimitiveArrayType", "(Class)", "summary", "df-generated"] + - ["javax.management.openmbean", "ArrayType", "isPrimitiveArray", "()", "summary", "df-generated"] + - ["javax.management.openmbean", "CompositeData", "containsKey", "(String)", "summary", "df-generated"] + - ["javax.management.openmbean", "CompositeData", "containsValue", "(Object)", "summary", "df-generated"] + - ["javax.management.openmbean", "CompositeType", "containsKey", "(String)", "summary", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanParameterInfo", "hasDefaultValue", "()", "summary", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanParameterInfo", "hasLegalValues", "()", "summary", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanParameterInfo", "hasMaxValue", "()", "summary", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanParameterInfo", "hasMinValue", "()", "summary", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanParameterInfo", "isValue", "(Object)", "summary", "df-generated"] + - ["javax.management.openmbean", "OpenType", "isArray", "()", "summary", "df-generated"] + - ["javax.management.openmbean", "OpenType", "isValue", "(Object)", "summary", "df-generated"] + - ["javax.management.openmbean", "SimpleType", "readResolve", "()", "summary", "df-generated"] + - ["javax.management.openmbean", "TabularData", "calculateIndex", "(CompositeData)", "summary", "df-generated"] + - ["javax.management.openmbean", "TabularData", "clear", "()", "summary", "df-generated"] + - ["javax.management.openmbean", "TabularData", "containsKey", "(Object[])", "summary", "df-generated"] + - ["javax.management.openmbean", "TabularData", "containsValue", "(CompositeData)", "summary", "df-generated"] + - ["javax.management.openmbean", "TabularData", "isEmpty", "()", "summary", "df-generated"] + - ["javax.management.openmbean", "TabularData", "size", "()", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.management.relation.model.yml b/java/ql/lib/ext/generated/javax.management.relation.model.yml new file mode 100644 index 00000000000..86b04e58252 --- /dev/null +++ b/java/ql/lib/ext/generated/javax.management.relation.model.yml @@ -0,0 +1,171 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.management.relation", "InvalidRelationIdException", True, "InvalidRelationIdException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "InvalidRelationServiceException", True, "InvalidRelationServiceException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "InvalidRelationTypeException", True, "InvalidRelationTypeException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "InvalidRoleInfoException", True, "InvalidRoleInfoException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "InvalidRoleValueException", True, "InvalidRoleValueException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "MBeanServerNotificationFilter", True, "disableObjectName", "(ObjectName)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "MBeanServerNotificationFilter", True, "enableObjectName", "(ObjectName)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "MBeanServerNotificationFilter", True, "getDisabledObjectNames", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.relation", "MBeanServerNotificationFilter", True, "getEnabledObjectNames", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.relation", "Relation", True, "getReferencedMBeans", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.relation", "Relation", True, "getRelationId", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.relation", "Relation", True, "getRelationServiceName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.relation", "Relation", True, "getRelationTypeName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.relation", "Relation", True, "getRole", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.relation", "Relation", True, "handleMBeanUnregistration", "(ObjectName,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "Relation", True, "retrieveAllRoles", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.relation", "Relation", True, "setRole", "(Role)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "Relation", True, "setRoles", "(RoleList)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "RelationException", True, "RelationException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "RelationNotFoundException", True, "RelationNotFoundException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "RelationNotification", True, "RelationNotification", "(String,Object,long,long,String,String,String,ObjectName,List)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "RelationNotification", True, "RelationNotification", "(String,Object,long,long,String,String,String,ObjectName,List)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "RelationNotification", True, "RelationNotification", "(String,Object,long,long,String,String,String,ObjectName,List)", "", "Argument[4]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "RelationNotification", True, "RelationNotification", "(String,Object,long,long,String,String,String,ObjectName,List)", "", "Argument[5]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "RelationNotification", True, "RelationNotification", "(String,Object,long,long,String,String,String,ObjectName,List)", "", "Argument[6]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "RelationNotification", True, "RelationNotification", "(String,Object,long,long,String,String,String,ObjectName,List)", "", "Argument[7]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "RelationNotification", True, "RelationNotification", "(String,Object,long,long,String,String,String,ObjectName,List)", "", "Argument[8].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "RelationNotification", True, "RelationNotification", "(String,Object,long,long,String,String,String,ObjectName,String,List,List)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "RelationNotification", True, "RelationNotification", "(String,Object,long,long,String,String,String,ObjectName,String,List,List)", "", "Argument[10].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "RelationNotification", True, "RelationNotification", "(String,Object,long,long,String,String,String,ObjectName,String,List,List)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "RelationNotification", True, "RelationNotification", "(String,Object,long,long,String,String,String,ObjectName,String,List,List)", "", "Argument[4]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "RelationNotification", True, "RelationNotification", "(String,Object,long,long,String,String,String,ObjectName,String,List,List)", "", "Argument[5]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "RelationNotification", True, "RelationNotification", "(String,Object,long,long,String,String,String,ObjectName,String,List,List)", "", "Argument[6]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "RelationNotification", True, "RelationNotification", "(String,Object,long,long,String,String,String,ObjectName,String,List,List)", "", "Argument[7]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "RelationNotification", True, "RelationNotification", "(String,Object,long,long,String,String,String,ObjectName,String,List,List)", "", "Argument[8]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "RelationNotification", True, "RelationNotification", "(String,Object,long,long,String,String,String,ObjectName,String,List,List)", "", "Argument[9].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "RelationNotification", True, "getMBeansToUnregister", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.relation", "RelationNotification", True, "getNewRoleValue", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.relation", "RelationNotification", True, "getObjectName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.relation", "RelationNotification", True, "getOldRoleValue", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.relation", "RelationNotification", True, "getRelationId", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.relation", "RelationNotification", True, "getRelationTypeName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.relation", "RelationNotification", True, "getRoleName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.relation", "RelationServiceMBean", True, "addRelation", "(ObjectName)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "RelationServiceMBean", True, "addRelationType", "(RelationType)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "RelationServiceMBean", True, "createRelation", "(String,String,RoleList)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "RelationServiceMBean", True, "createRelation", "(String,String,RoleList)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "RelationServiceMBean", True, "createRelation", "(String,String,RoleList)", "", "Argument[2].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "RelationServiceMBean", True, "createRelationType", "(String,RoleInfo[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "RelationServiceMBean", True, "findReferencingRelations", "(ObjectName,String,String)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.relation", "RelationServiceMBean", True, "findReferencingRelations", "(ObjectName,String,String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.relation", "RelationServiceMBean", True, "findRelationsOfType", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.relation", "RelationServiceMBean", True, "getAllRelationIds", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.relation", "RelationServiceMBean", True, "getAllRelationTypeNames", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.relation", "RelationServiceMBean", True, "getRelationTypeName", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.relation", "RelationServiceMBean", True, "getRoleInfo", "(String,String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.relation", "RelationServiceMBean", True, "getRoleInfos", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.relation", "RelationServiceMBean", True, "isRelation", "(ObjectName)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.relation", "RelationServiceMBean", True, "isRelationMBean", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.relation", "RelationServiceMBean", True, "setRole", "(String,Role)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "RelationServiceMBean", True, "setRoles", "(String,RoleList)", "", "Argument[1].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "RelationServiceMBean", True, "updateRoleMap", "(String,Role,List)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "RelationServiceNotRegisteredException", True, "RelationServiceNotRegisteredException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "RelationSupport", True, "RelationSupport", "(String,ObjectName,MBeanServer,String,RoleList)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "RelationSupport", True, "RelationSupport", "(String,ObjectName,MBeanServer,String,RoleList)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "RelationSupport", True, "RelationSupport", "(String,ObjectName,MBeanServer,String,RoleList)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "RelationSupport", True, "RelationSupport", "(String,ObjectName,MBeanServer,String,RoleList)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "RelationSupport", True, "RelationSupport", "(String,ObjectName,MBeanServer,String,RoleList)", "", "Argument[4].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "RelationSupport", True, "RelationSupport", "(String,ObjectName,String,RoleList)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "RelationSupport", True, "RelationSupport", "(String,ObjectName,String,RoleList)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "RelationSupport", True, "RelationSupport", "(String,ObjectName,String,RoleList)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "RelationSupport", True, "RelationSupport", "(String,ObjectName,String,RoleList)", "", "Argument[3].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "RelationType", True, "getRelationTypeName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.relation", "RelationType", True, "getRoleInfo", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.relation", "RelationType", True, "getRoleInfos", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.relation", "RelationTypeNotFoundException", True, "RelationTypeNotFoundException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "RelationTypeSupport", True, "RelationTypeSupport", "(String,RoleInfo[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "RelationTypeSupport", True, "RelationTypeSupport", "(String,RoleInfo[])", "", "Argument[1].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "Role", True, "Role", "(String,List)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "Role", True, "Role", "(String,List)", "", "Argument[1].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "Role", True, "getRoleName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.relation", "Role", True, "getRoleValue", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.relation", "Role", True, "roleValueToString", "(List)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["javax.management.relation", "Role", True, "setRoleName", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "Role", True, "setRoleValue", "(List)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "RoleInfo", True, "RoleInfo", "(RoleInfo)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "RoleInfo", True, "RoleInfo", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "RoleInfo", True, "RoleInfo", "(String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "RoleInfo", True, "RoleInfo", "(String,String,boolean,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "RoleInfo", True, "RoleInfo", "(String,String,boolean,boolean)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "RoleInfo", True, "RoleInfo", "(String,String,boolean,boolean,int,int,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "RoleInfo", True, "RoleInfo", "(String,String,boolean,boolean,int,int,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "RoleInfo", True, "RoleInfo", "(String,String,boolean,boolean,int,int,String)", "", "Argument[6]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "RoleInfo", True, "getDescription", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.relation", "RoleInfo", True, "getName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.relation", "RoleInfo", True, "getRefMBeanClassName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.relation", "RoleInfoNotFoundException", True, "RoleInfoNotFoundException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "RoleList", True, "RoleList", "(List)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "RoleList", True, "add", "(Role)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "RoleList", True, "add", "(int,Role)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "RoleList", True, "addAll", "(RoleList)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "RoleList", True, "asList", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.relation", "RoleList", True, "set", "(int,Role)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "RoleNotFoundException", True, "RoleNotFoundException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "RoleResult", True, "RoleResult", "(RoleList,RoleUnresolvedList)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "RoleResult", True, "RoleResult", "(RoleList,RoleUnresolvedList)", "", "Argument[1].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "RoleResult", True, "getRoles", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.relation", "RoleResult", True, "getRolesUnresolved", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.relation", "RoleResult", True, "setRoles", "(RoleList)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "RoleResult", True, "setRolesUnresolved", "(RoleUnresolvedList)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "RoleUnresolved", True, "RoleUnresolved", "(String,List,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "RoleUnresolved", True, "RoleUnresolved", "(String,List,int)", "", "Argument[1].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "RoleUnresolved", True, "getRoleName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.relation", "RoleUnresolved", True, "getRoleValue", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.relation", "RoleUnresolved", True, "setRoleName", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "RoleUnresolved", True, "setRoleValue", "(List)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "RoleUnresolvedList", True, "RoleUnresolvedList", "(List)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "RoleUnresolvedList", True, "add", "(RoleUnresolved)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "RoleUnresolvedList", True, "add", "(int,RoleUnresolved)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "RoleUnresolvedList", True, "addAll", "(RoleUnresolvedList)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "RoleUnresolvedList", True, "asList", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.relation", "RoleUnresolvedList", True, "set", "(int,RoleUnresolved)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["javax.management.relation", "MBeanServerNotificationFilter", "disableAllObjectNames", "()", "summary", "df-generated"] + - ["javax.management.relation", "MBeanServerNotificationFilter", "enableAllObjectNames", "()", "summary", "df-generated"] + - ["javax.management.relation", "Relation", "getAllRoles", "()", "summary", "df-generated"] + - ["javax.management.relation", "Relation", "getRoleCardinality", "(String)", "summary", "df-generated"] + - ["javax.management.relation", "Relation", "getRoles", "(String[])", "summary", "df-generated"] + - ["javax.management.relation", "RelationService", "RelationService", "(boolean)", "summary", "df-generated"] + - ["javax.management.relation", "RelationServiceMBean", "checkRoleReading", "(String,String)", "summary", "df-generated"] + - ["javax.management.relation", "RelationServiceMBean", "checkRoleWriting", "(Role,String,Boolean)", "summary", "df-generated"] + - ["javax.management.relation", "RelationServiceMBean", "findAssociatedMBeans", "(ObjectName,String,String)", "summary", "df-generated"] + - ["javax.management.relation", "RelationServiceMBean", "getAllRoles", "(String)", "summary", "df-generated"] + - ["javax.management.relation", "RelationServiceMBean", "getPurgeFlag", "()", "summary", "df-generated"] + - ["javax.management.relation", "RelationServiceMBean", "getReferencedMBeans", "(String)", "summary", "df-generated"] + - ["javax.management.relation", "RelationServiceMBean", "getRole", "(String,String)", "summary", "df-generated"] + - ["javax.management.relation", "RelationServiceMBean", "getRoleCardinality", "(String,String)", "summary", "df-generated"] + - ["javax.management.relation", "RelationServiceMBean", "getRoles", "(String,String[])", "summary", "df-generated"] + - ["javax.management.relation", "RelationServiceMBean", "hasRelation", "(String)", "summary", "df-generated"] + - ["javax.management.relation", "RelationServiceMBean", "isActive", "()", "summary", "df-generated"] + - ["javax.management.relation", "RelationServiceMBean", "purgeRelations", "()", "summary", "df-generated"] + - ["javax.management.relation", "RelationServiceMBean", "removeRelation", "(String)", "summary", "df-generated"] + - ["javax.management.relation", "RelationServiceMBean", "removeRelationType", "(String)", "summary", "df-generated"] + - ["javax.management.relation", "RelationServiceMBean", "sendRelationCreationNotification", "(String)", "summary", "df-generated"] + - ["javax.management.relation", "RelationServiceMBean", "sendRelationRemovalNotification", "(String,List)", "summary", "df-generated"] + - ["javax.management.relation", "RelationServiceMBean", "sendRoleUpdateNotification", "(String,Role,List)", "summary", "df-generated"] + - ["javax.management.relation", "RelationServiceMBean", "setPurgeFlag", "(boolean)", "summary", "df-generated"] + - ["javax.management.relation", "RelationSupportMBean", "isInRelationService", "()", "summary", "df-generated"] + - ["javax.management.relation", "RelationSupportMBean", "setRelationServiceManagementFlag", "(Boolean)", "summary", "df-generated"] + - ["javax.management.relation", "RoleInfo", "checkMaxDegree", "(int)", "summary", "df-generated"] + - ["javax.management.relation", "RoleInfo", "checkMinDegree", "(int)", "summary", "df-generated"] + - ["javax.management.relation", "RoleInfo", "getMaxDegree", "()", "summary", "df-generated"] + - ["javax.management.relation", "RoleInfo", "getMinDegree", "()", "summary", "df-generated"] + - ["javax.management.relation", "RoleInfo", "isReadable", "()", "summary", "df-generated"] + - ["javax.management.relation", "RoleInfo", "isWritable", "()", "summary", "df-generated"] + - ["javax.management.relation", "RoleList", "RoleList", "(int)", "summary", "df-generated"] + - ["javax.management.relation", "RoleList", "addAll", "(int,RoleList)", "summary", "df-generated"] + - ["javax.management.relation", "RoleStatus", "isRoleStatus", "(int)", "summary", "df-generated"] + - ["javax.management.relation", "RoleUnresolved", "getProblemType", "()", "summary", "df-generated"] + - ["javax.management.relation", "RoleUnresolved", "setProblemType", "(int)", "summary", "df-generated"] + - ["javax.management.relation", "RoleUnresolvedList", "RoleUnresolvedList", "(int)", "summary", "df-generated"] + - ["javax.management.relation", "RoleUnresolvedList", "addAll", "(int,RoleUnresolvedList)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.management.remote.model.yml b/java/ql/lib/ext/generated/javax.management.remote.model.yml new file mode 100644 index 00000000000..e06da36da21 --- /dev/null +++ b/java/ql/lib/ext/generated/javax.management.remote.model.yml @@ -0,0 +1,72 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.management.remote", "JMXAddressable", True, "getAddress", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.remote", "JMXConnectionNotification", True, "JMXConnectionNotification", "(String,Object,String,long,String,Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.remote", "JMXConnectionNotification", True, "JMXConnectionNotification", "(String,Object,String,long,String,Object)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.remote", "JMXConnectionNotification", True, "JMXConnectionNotification", "(String,Object,String,long,String,Object)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.remote", "JMXConnectionNotification", True, "JMXConnectionNotification", "(String,Object,String,long,String,Object)", "", "Argument[4]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.remote", "JMXConnectionNotification", True, "JMXConnectionNotification", "(String,Object,String,long,String,Object)", "", "Argument[5]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.remote", "JMXConnectionNotification", True, "getConnectionId", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.remote", "JMXConnector", True, "connect", "(Map)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.management.remote", "JMXConnector", True, "getConnectionId", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.remote", "JMXConnector", True, "getMBeanServerConnection", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.remote", "JMXConnector", True, "getMBeanServerConnection", "(Subject)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.remote", "JMXConnector", True, "getMBeanServerConnection", "(Subject)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.remote", "JMXConnector", True, "getMBeanServerConnection", "(Subject)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.remote", "JMXConnectorFactory", True, "connect", "(JMXServiceURL)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.remote", "JMXConnectorFactory", True, "connect", "(JMXServiceURL,Map)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.remote", "JMXConnectorFactory", True, "connect", "(JMXServiceURL,Map)", "", "Argument[1].Element", "ReturnValue", "taint", "df-generated"] + - ["javax.management.remote", "JMXConnectorFactory", True, "newJMXConnector", "(JMXServiceURL,Map)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.remote", "JMXConnectorFactory", True, "newJMXConnector", "(JMXServiceURL,Map)", "", "Argument[1].Element", "ReturnValue", "taint", "df-generated"] + - ["javax.management.remote", "JMXConnectorServer", True, "JMXConnectorServer", "(MBeanServer)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.remote", "JMXConnectorServer", True, "getMBeanServer", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.remote", "JMXConnectorServerFactory", True, "newJMXConnectorServer", "(JMXServiceURL,Map,MBeanServer)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.remote", "JMXConnectorServerFactory", True, "newJMXConnectorServer", "(JMXServiceURL,Map,MBeanServer)", "", "Argument[1].Element", "ReturnValue", "taint", "df-generated"] + - ["javax.management.remote", "JMXConnectorServerFactory", True, "newJMXConnectorServer", "(JMXServiceURL,Map,MBeanServer)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.remote", "JMXConnectorServerMBean", True, "getAddress", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.remote", "JMXConnectorServerMBean", True, "getAttributes", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.remote", "JMXConnectorServerMBean", True, "getConnectionIds", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.remote", "JMXConnectorServerMBean", True, "setMBeanServerForwarder", "(MBeanServerForwarder)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.remote", "JMXConnectorServerMBean", True, "setMBeanServerForwarder", "(MBeanServerForwarder)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] + - ["javax.management.remote", "JMXConnectorServerMBean", True, "toJMXConnector", "(Map)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["javax.management.remote", "JMXConnectorServerMBean", True, "toJMXConnector", "(Map)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.remote", "JMXPrincipal", True, "JMXPrincipal", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.remote", "JMXProviderException", True, "JMXProviderException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.remote", "JMXProviderException", True, "JMXProviderException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.remote", "JMXProviderException", True, "JMXProviderException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.remote", "JMXServerErrorException", True, "JMXServerErrorException", "(String,Error)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.remote", "JMXServerErrorException", True, "JMXServerErrorException", "(String,Error)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.remote", "JMXServiceURL", True, "JMXServiceURL", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.remote", "JMXServiceURL", True, "JMXServiceURL", "(String,String,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.remote", "JMXServiceURL", True, "JMXServiceURL", "(String,String,int)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.remote", "JMXServiceURL", True, "JMXServiceURL", "(String,String,int,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.remote", "JMXServiceURL", True, "JMXServiceURL", "(String,String,int,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.remote", "JMXServiceURL", True, "JMXServiceURL", "(String,String,int,String)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.remote", "JMXServiceURL", True, "getHost", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.remote", "JMXServiceURL", True, "getProtocol", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.remote", "JMXServiceURL", True, "getURLPath", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.remote", "NotificationResult", True, "NotificationResult", "(long,long,TargetedNotification[])", "", "Argument[2].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.management.remote", "NotificationResult", True, "getTargetedNotifications", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.remote", "SubjectDelegationPermission", False, "SubjectDelegationPermission", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.remote", "SubjectDelegationPermission", False, "SubjectDelegationPermission", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.remote", "TargetedNotification", True, "TargetedNotification", "(Notification,Integer)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.remote", "TargetedNotification", True, "getNotification", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["javax.management.remote", "JMXConnector", "addConnectionNotificationListener", "(NotificationListener,NotificationFilter,Object)", "summary", "df-generated"] + - ["javax.management.remote", "JMXConnector", "connect", "()", "summary", "df-generated"] + - ["javax.management.remote", "JMXConnector", "removeConnectionNotificationListener", "(NotificationListener)", "summary", "df-generated"] + - ["javax.management.remote", "JMXConnector", "removeConnectionNotificationListener", "(NotificationListener,NotificationFilter,Object)", "summary", "df-generated"] + - ["javax.management.remote", "JMXConnectorServerMBean", "isActive", "()", "summary", "df-generated"] + - ["javax.management.remote", "JMXConnectorServerMBean", "start", "()", "summary", "df-generated"] + - ["javax.management.remote", "JMXConnectorServerMBean", "stop", "()", "summary", "df-generated"] + - ["javax.management.remote", "JMXServiceURL", "getPort", "()", "summary", "df-generated"] + - ["javax.management.remote", "NotificationResult", "getEarliestSequenceNumber", "()", "summary", "df-generated"] + - ["javax.management.remote", "NotificationResult", "getNextSequenceNumber", "()", "summary", "df-generated"] + - ["javax.management.remote", "TargetedNotification", "getListenerID", "()", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.management.remote.rmi.model.yml b/java/ql/lib/ext/generated/javax.management.remote.rmi.model.yml new file mode 100644 index 00000000000..2189861fca8 --- /dev/null +++ b/java/ql/lib/ext/generated/javax.management.remote.rmi.model.yml @@ -0,0 +1,84 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.management.remote.rmi", "RMIConnection", True, "createMBean", "(String,ObjectName,MarshalledObject,String[],Subject)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.remote.rmi", "RMIConnection", True, "createMBean", "(String,ObjectName,MarshalledObject,String[],Subject)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.remote.rmi", "RMIConnection", True, "createMBean", "(String,ObjectName,MarshalledObject,String[],Subject)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.remote.rmi", "RMIConnection", True, "createMBean", "(String,ObjectName,MarshalledObject,String[],Subject)", "", "Argument[3].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["javax.management.remote.rmi", "RMIConnection", True, "createMBean", "(String,ObjectName,ObjectName,MarshalledObject,String[],Subject)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.remote.rmi", "RMIConnection", True, "createMBean", "(String,ObjectName,ObjectName,MarshalledObject,String[],Subject)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.remote.rmi", "RMIConnection", True, "createMBean", "(String,ObjectName,ObjectName,MarshalledObject,String[],Subject)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.remote.rmi", "RMIConnection", True, "createMBean", "(String,ObjectName,ObjectName,MarshalledObject,String[],Subject)", "", "Argument[3]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.remote.rmi", "RMIConnection", True, "createMBean", "(String,ObjectName,ObjectName,MarshalledObject,String[],Subject)", "", "Argument[4].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["javax.management.remote.rmi", "RMIConnection", True, "createMBean", "(String,ObjectName,ObjectName,Subject)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.remote.rmi", "RMIConnection", True, "createMBean", "(String,ObjectName,ObjectName,Subject)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.remote.rmi", "RMIConnection", True, "createMBean", "(String,ObjectName,ObjectName,Subject)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.remote.rmi", "RMIConnection", True, "createMBean", "(String,ObjectName,Subject)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.remote.rmi", "RMIConnection", True, "createMBean", "(String,ObjectName,Subject)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.remote.rmi", "RMIConnection", True, "getAttribute", "(ObjectName,String,Subject)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.remote.rmi", "RMIConnection", True, "getAttribute", "(ObjectName,String,Subject)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.remote.rmi", "RMIConnection", True, "getAttributes", "(ObjectName,String[],Subject)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.remote.rmi", "RMIConnection", True, "getAttributes", "(ObjectName,String[],Subject)", "", "Argument[1].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["javax.management.remote.rmi", "RMIConnection", True, "getConnectionId", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.remote.rmi", "RMIConnection", True, "getObjectInstance", "(ObjectName,Subject)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.remote.rmi", "RMIConnection", True, "invoke", "(ObjectName,String,MarshalledObject,String[],Subject)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.remote.rmi", "RMIConnection", True, "invoke", "(ObjectName,String,MarshalledObject,String[],Subject)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.remote.rmi", "RMIConnection", True, "invoke", "(ObjectName,String,MarshalledObject,String[],Subject)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.remote.rmi", "RMIConnection", True, "invoke", "(ObjectName,String,MarshalledObject,String[],Subject)", "", "Argument[3].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["javax.management.remote.rmi", "RMIConnection", True, "setAttributes", "(ObjectName,MarshalledObject,Subject)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.remote.rmi", "RMIConnection", True, "setAttributes", "(ObjectName,MarshalledObject,Subject)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.remote.rmi", "RMIConnectionImpl", True, "RMIConnectionImpl", "(RMIServerImpl,String,ClassLoader,Subject,Map)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.remote.rmi", "RMIConnectionImpl", True, "RMIConnectionImpl", "(RMIServerImpl,String,ClassLoader,Subject,Map)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.remote.rmi", "RMIConnectionImpl", True, "RMIConnectionImpl", "(RMIServerImpl,String,ClassLoader,Subject,Map)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.remote.rmi", "RMIConnectionImpl", True, "RMIConnectionImpl", "(RMIServerImpl,String,ClassLoader,Subject,Map)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.remote.rmi", "RMIConnectionImpl", True, "RMIConnectionImpl", "(RMIServerImpl,String,ClassLoader,Subject,Map)", "", "Argument[4].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.management.remote.rmi", "RMIConnectionImpl_Stub", False, "RMIConnectionImpl_Stub", "(RemoteRef)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.remote.rmi", "RMIConnector", True, "RMIConnector", "(JMXServiceURL,Map)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.remote.rmi", "RMIConnector", True, "RMIConnector", "(JMXServiceURL,Map)", "", "Argument[1].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.management.remote.rmi", "RMIConnector", True, "RMIConnector", "(RMIServer,Map)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.remote.rmi", "RMIConnector", True, "RMIConnector", "(RMIServer,Map)", "", "Argument[1].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.management.remote.rmi", "RMIConnectorServer", True, "RMIConnectorServer", "(JMXServiceURL,Map)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.remote.rmi", "RMIConnectorServer", True, "RMIConnectorServer", "(JMXServiceURL,Map)", "", "Argument[1].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.management.remote.rmi", "RMIConnectorServer", True, "RMIConnectorServer", "(JMXServiceURL,Map,MBeanServer)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.remote.rmi", "RMIConnectorServer", True, "RMIConnectorServer", "(JMXServiceURL,Map,MBeanServer)", "", "Argument[1].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.management.remote.rmi", "RMIConnectorServer", True, "RMIConnectorServer", "(JMXServiceURL,Map,MBeanServer)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.remote.rmi", "RMIConnectorServer", True, "RMIConnectorServer", "(JMXServiceURL,Map,RMIServerImpl,MBeanServer)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.remote.rmi", "RMIConnectorServer", True, "RMIConnectorServer", "(JMXServiceURL,Map,RMIServerImpl,MBeanServer)", "", "Argument[1].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.management.remote.rmi", "RMIConnectorServer", True, "RMIConnectorServer", "(JMXServiceURL,Map,RMIServerImpl,MBeanServer)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.remote.rmi", "RMIConnectorServer", True, "RMIConnectorServer", "(JMXServiceURL,Map,RMIServerImpl,MBeanServer)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.remote.rmi", "RMIIIOPServerImpl", True, "RMIIIOPServerImpl", "(Map)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.management.remote.rmi", "RMIJRMPServerImpl", True, "RMIJRMPServerImpl", "(int,RMIClientSocketFactory,RMIServerSocketFactory,Map)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.remote.rmi", "RMIJRMPServerImpl", True, "RMIJRMPServerImpl", "(int,RMIClientSocketFactory,RMIServerSocketFactory,Map)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.remote.rmi", "RMIJRMPServerImpl", True, "RMIJRMPServerImpl", "(int,RMIClientSocketFactory,RMIServerSocketFactory,Map)", "", "Argument[3].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.management.remote.rmi", "RMIServer", True, "newClient", "(Object)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.remote.rmi", "RMIServerImpl", True, "RMIServerImpl", "(Map)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.management.remote.rmi", "RMIServerImpl", True, "getDefaultClassLoader", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.remote.rmi", "RMIServerImpl", True, "getMBeanServer", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.remote.rmi", "RMIServerImpl", True, "setDefaultClassLoader", "(ClassLoader)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.remote.rmi", "RMIServerImpl", True, "setMBeanServer", "(MBeanServer)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.remote.rmi", "RMIServerImpl", True, "toStub", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.remote.rmi", "RMIServerImpl_Stub", False, "RMIServerImpl_Stub", "(RemoteRef)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["javax.management.remote.rmi", "RMIConnection", "addNotificationListener", "(ObjectName,ObjectName,MarshalledObject,MarshalledObject,Subject)", "summary", "df-generated"] + - ["javax.management.remote.rmi", "RMIConnection", "addNotificationListeners", "(ObjectName[],MarshalledObject[],Subject[])", "summary", "df-generated"] + - ["javax.management.remote.rmi", "RMIConnection", "fetchNotifications", "(long,int,long)", "summary", "df-generated"] + - ["javax.management.remote.rmi", "RMIConnection", "getDefaultDomain", "(Subject)", "summary", "df-generated"] + - ["javax.management.remote.rmi", "RMIConnection", "getDomains", "(Subject)", "summary", "df-generated"] + - ["javax.management.remote.rmi", "RMIConnection", "getMBeanCount", "(Subject)", "summary", "df-generated"] + - ["javax.management.remote.rmi", "RMIConnection", "getMBeanInfo", "(ObjectName,Subject)", "summary", "df-generated"] + - ["javax.management.remote.rmi", "RMIConnection", "isInstanceOf", "(ObjectName,String,Subject)", "summary", "df-generated"] + - ["javax.management.remote.rmi", "RMIConnection", "isRegistered", "(ObjectName,Subject)", "summary", "df-generated"] + - ["javax.management.remote.rmi", "RMIConnection", "queryMBeans", "(ObjectName,MarshalledObject,Subject)", "summary", "df-generated"] + - ["javax.management.remote.rmi", "RMIConnection", "queryNames", "(ObjectName,MarshalledObject,Subject)", "summary", "df-generated"] + - ["javax.management.remote.rmi", "RMIConnection", "removeNotificationListener", "(ObjectName,ObjectName,MarshalledObject,MarshalledObject,Subject)", "summary", "df-generated"] + - ["javax.management.remote.rmi", "RMIConnection", "removeNotificationListener", "(ObjectName,ObjectName,Subject)", "summary", "df-generated"] + - ["javax.management.remote.rmi", "RMIConnection", "removeNotificationListeners", "(ObjectName,Integer[],Subject)", "summary", "df-generated"] + - ["javax.management.remote.rmi", "RMIConnection", "setAttribute", "(ObjectName,MarshalledObject,Subject)", "summary", "df-generated"] + - ["javax.management.remote.rmi", "RMIConnection", "unregisterMBean", "(ObjectName,Subject)", "summary", "df-generated"] + - ["javax.management.remote.rmi", "RMIServer", "getVersion", "()", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.management.timer.model.yml b/java/ql/lib/ext/generated/javax.management.timer.model.yml new file mode 100644 index 00000000000..2dd312e78fc --- /dev/null +++ b/java/ql/lib/ext/generated/javax.management.timer.model.yml @@ -0,0 +1,37 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.management.timer", "TimerMBean", True, "getNotificationMessage", "(Integer)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.timer", "TimerMBean", True, "getNotificationType", "(Integer)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.timer", "TimerMBean", True, "getNotificationUserData", "(Integer)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.timer", "TimerNotification", True, "TimerNotification", "(String,Object,long,long,String,Integer)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.timer", "TimerNotification", True, "TimerNotification", "(String,Object,long,long,String,Integer)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.timer", "TimerNotification", True, "TimerNotification", "(String,Object,long,long,String,Integer)", "", "Argument[4]", "Argument[this]", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["javax.management.timer", "TimerMBean", "addNotification", "(String,String,Object,Date)", "summary", "df-generated"] + - ["javax.management.timer", "TimerMBean", "addNotification", "(String,String,Object,Date,long)", "summary", "df-generated"] + - ["javax.management.timer", "TimerMBean", "addNotification", "(String,String,Object,Date,long,long)", "summary", "df-generated"] + - ["javax.management.timer", "TimerMBean", "addNotification", "(String,String,Object,Date,long,long,boolean)", "summary", "df-generated"] + - ["javax.management.timer", "TimerMBean", "getAllNotificationIDs", "()", "summary", "df-generated"] + - ["javax.management.timer", "TimerMBean", "getDate", "(Integer)", "summary", "df-generated"] + - ["javax.management.timer", "TimerMBean", "getFixedRate", "(Integer)", "summary", "df-generated"] + - ["javax.management.timer", "TimerMBean", "getNbNotifications", "()", "summary", "df-generated"] + - ["javax.management.timer", "TimerMBean", "getNbOccurences", "(Integer)", "summary", "df-generated"] + - ["javax.management.timer", "TimerMBean", "getNotificationIDs", "(String)", "summary", "df-generated"] + - ["javax.management.timer", "TimerMBean", "getPeriod", "(Integer)", "summary", "df-generated"] + - ["javax.management.timer", "TimerMBean", "getSendPastNotifications", "()", "summary", "df-generated"] + - ["javax.management.timer", "TimerMBean", "isActive", "()", "summary", "df-generated"] + - ["javax.management.timer", "TimerMBean", "isEmpty", "()", "summary", "df-generated"] + - ["javax.management.timer", "TimerMBean", "removeAllNotifications", "()", "summary", "df-generated"] + - ["javax.management.timer", "TimerMBean", "removeNotification", "(Integer)", "summary", "df-generated"] + - ["javax.management.timer", "TimerMBean", "removeNotifications", "(String)", "summary", "df-generated"] + - ["javax.management.timer", "TimerMBean", "setSendPastNotifications", "(boolean)", "summary", "df-generated"] + - ["javax.management.timer", "TimerMBean", "start", "()", "summary", "df-generated"] + - ["javax.management.timer", "TimerMBean", "stop", "()", "summary", "df-generated"] + - ["javax.management.timer", "TimerNotification", "getNotificationID", "()", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.naming.directory.model.yml b/java/ql/lib/ext/generated/javax.naming.directory.model.yml new file mode 100644 index 00000000000..21cc4851eef --- /dev/null +++ b/java/ql/lib/ext/generated/javax.naming.directory.model.yml @@ -0,0 +1,137 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.naming.directory", "Attribute", True, "add", "(Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.directory", "Attribute", True, "add", "(int,Object)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.directory", "Attribute", True, "get", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.directory", "Attribute", True, "get", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.directory", "Attribute", True, "getID", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.directory", "Attribute", True, "remove", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.directory", "Attribute", True, "set", "(int,Object)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.directory", "Attribute", True, "set", "(int,Object)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.directory", "AttributeInUseException", True, "AttributeInUseException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.directory", "AttributeModificationException", True, "AttributeModificationException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.directory", "AttributeModificationException", True, "getUnexecutedModifications", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.directory", "AttributeModificationException", True, "setUnexecutedModifications", "(ModificationItem[])", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.directory", "Attributes", True, "get", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.directory", "Attributes", True, "put", "(Attribute)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.directory", "Attributes", True, "put", "(Attribute)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.directory", "Attributes", True, "put", "(String,Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.directory", "Attributes", True, "put", "(String,Object)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.directory", "Attributes", True, "remove", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.directory", "BasicAttribute", True, "BasicAttribute", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.directory", "BasicAttribute", True, "BasicAttribute", "(String,Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.directory", "BasicAttribute", True, "BasicAttribute", "(String,Object)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.directory", "BasicAttribute", True, "BasicAttribute", "(String,Object,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.directory", "BasicAttribute", True, "BasicAttribute", "(String,Object,boolean)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.directory", "BasicAttribute", True, "BasicAttribute", "(String,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.directory", "BasicAttributes", True, "BasicAttributes", "(String,Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.directory", "BasicAttributes", True, "BasicAttributes", "(String,Object,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.directory", "DirContext", True, "createSubcontext", "(Name,Attributes)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.directory", "DirContext", True, "createSubcontext", "(String,Attributes)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.directory", "DirContext", True, "getAttributes", "(Name)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.directory", "DirContext", True, "getAttributes", "(Name,String[])", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.directory", "DirContext", True, "getAttributes", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.directory", "DirContext", True, "getAttributes", "(String,String[])", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.directory", "DirContext", True, "getSchema", "(Name)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.directory", "DirContext", True, "getSchema", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.directory", "DirContext", True, "getSchemaClassDefinition", "(Name)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.directory", "DirContext", True, "getSchemaClassDefinition", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.directory", "DirContext", True, "search", "(Name,Attributes)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.directory", "DirContext", True, "search", "(Name,Attributes)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.directory", "DirContext", True, "search", "(Name,Attributes)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.directory", "DirContext", True, "search", "(Name,Attributes,String[])", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.directory", "DirContext", True, "search", "(Name,Attributes,String[])", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.directory", "DirContext", True, "search", "(Name,Attributes,String[])", "", "Argument[2].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.directory", "DirContext", True, "search", "(Name,Attributes,String[])", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.directory", "DirContext", True, "search", "(Name,String,Object[],SearchControls)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.directory", "DirContext", True, "search", "(Name,String,Object[],SearchControls)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.directory", "DirContext", True, "search", "(Name,String,Object[],SearchControls)", "", "Argument[3]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.directory", "DirContext", True, "search", "(Name,String,Object[],SearchControls)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.directory", "DirContext", True, "search", "(Name,String,SearchControls)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.directory", "DirContext", True, "search", "(Name,String,SearchControls)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.directory", "DirContext", True, "search", "(Name,String,SearchControls)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.directory", "DirContext", True, "search", "(Name,String,SearchControls)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.directory", "DirContext", True, "search", "(String,Attributes)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.directory", "DirContext", True, "search", "(String,Attributes)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.directory", "DirContext", True, "search", "(String,Attributes)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.directory", "DirContext", True, "search", "(String,Attributes,String[])", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.directory", "DirContext", True, "search", "(String,Attributes,String[])", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.directory", "DirContext", True, "search", "(String,Attributes,String[])", "", "Argument[2].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.directory", "DirContext", True, "search", "(String,Attributes,String[])", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.directory", "DirContext", True, "search", "(String,String,Object[],SearchControls)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.directory", "DirContext", True, "search", "(String,String,Object[],SearchControls)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.directory", "DirContext", True, "search", "(String,String,Object[],SearchControls)", "", "Argument[3]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.directory", "DirContext", True, "search", "(String,String,Object[],SearchControls)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.directory", "DirContext", True, "search", "(String,String,SearchControls)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.directory", "DirContext", True, "search", "(String,String,SearchControls)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.directory", "DirContext", True, "search", "(String,String,SearchControls)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.directory", "DirContext", True, "search", "(String,String,SearchControls)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.directory", "InitialDirContext", True, "InitialDirContext", "(Hashtable)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.directory", "InvalidAttributeIdentifierException", True, "InvalidAttributeIdentifierException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.directory", "InvalidAttributeValueException", True, "InvalidAttributeValueException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.directory", "InvalidAttributesException", True, "InvalidAttributesException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.directory", "InvalidSearchControlsException", True, "InvalidSearchControlsException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.directory", "InvalidSearchFilterException", True, "InvalidSearchFilterException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.directory", "ModificationItem", True, "ModificationItem", "(int,Attribute)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.directory", "ModificationItem", True, "getAttribute", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.directory", "NoSuchAttributeException", True, "NoSuchAttributeException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.directory", "SchemaViolationException", True, "SchemaViolationException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.directory", "SearchControls", True, "SearchControls", "(int,long,int,String[],boolean,boolean)", "", "Argument[3].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.directory", "SearchControls", True, "getReturningAttributes", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.directory", "SearchControls", True, "setReturningAttributes", "(String[])", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.directory", "SearchResult", True, "SearchResult", "(String,Object,Attributes)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.directory", "SearchResult", True, "SearchResult", "(String,Object,Attributes)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.directory", "SearchResult", True, "SearchResult", "(String,Object,Attributes)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.directory", "SearchResult", True, "SearchResult", "(String,Object,Attributes,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.directory", "SearchResult", True, "SearchResult", "(String,Object,Attributes,boolean)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.directory", "SearchResult", True, "SearchResult", "(String,Object,Attributes,boolean)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.directory", "SearchResult", True, "SearchResult", "(String,String,Object,Attributes)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.directory", "SearchResult", True, "SearchResult", "(String,String,Object,Attributes)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.directory", "SearchResult", True, "SearchResult", "(String,String,Object,Attributes)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.directory", "SearchResult", True, "SearchResult", "(String,String,Object,Attributes)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.directory", "SearchResult", True, "SearchResult", "(String,String,Object,Attributes,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.directory", "SearchResult", True, "SearchResult", "(String,String,Object,Attributes,boolean)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.directory", "SearchResult", True, "SearchResult", "(String,String,Object,Attributes,boolean)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.directory", "SearchResult", True, "SearchResult", "(String,String,Object,Attributes,boolean)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.directory", "SearchResult", True, "getAttributes", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.directory", "SearchResult", True, "setAttributes", "(Attributes)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["javax.naming.directory", "Attribute", "clear", "()", "summary", "df-generated"] + - ["javax.naming.directory", "Attribute", "contains", "(Object)", "summary", "df-generated"] + - ["javax.naming.directory", "Attribute", "getAll", "()", "summary", "df-generated"] + - ["javax.naming.directory", "Attribute", "getAttributeDefinition", "()", "summary", "df-generated"] + - ["javax.naming.directory", "Attribute", "getAttributeSyntaxDefinition", "()", "summary", "df-generated"] + - ["javax.naming.directory", "Attribute", "isOrdered", "()", "summary", "df-generated"] + - ["javax.naming.directory", "Attribute", "remove", "(Object)", "summary", "df-generated"] + - ["javax.naming.directory", "Attribute", "size", "()", "summary", "df-generated"] + - ["javax.naming.directory", "Attributes", "getAll", "()", "summary", "df-generated"] + - ["javax.naming.directory", "Attributes", "getIDs", "()", "summary", "df-generated"] + - ["javax.naming.directory", "Attributes", "isCaseIgnored", "()", "summary", "df-generated"] + - ["javax.naming.directory", "Attributes", "size", "()", "summary", "df-generated"] + - ["javax.naming.directory", "BasicAttributes", "BasicAttributes", "(boolean)", "summary", "df-generated"] + - ["javax.naming.directory", "DirContext", "bind", "(Name,Object,Attributes)", "summary", "df-generated"] + - ["javax.naming.directory", "DirContext", "bind", "(String,Object,Attributes)", "summary", "df-generated"] + - ["javax.naming.directory", "DirContext", "modifyAttributes", "(Name,ModificationItem[])", "summary", "df-generated"] + - ["javax.naming.directory", "DirContext", "modifyAttributes", "(Name,int,Attributes)", "summary", "df-generated"] + - ["javax.naming.directory", "DirContext", "modifyAttributes", "(String,ModificationItem[])", "summary", "df-generated"] + - ["javax.naming.directory", "DirContext", "modifyAttributes", "(String,int,Attributes)", "summary", "df-generated"] + - ["javax.naming.directory", "DirContext", "rebind", "(Name,Object,Attributes)", "summary", "df-generated"] + - ["javax.naming.directory", "DirContext", "rebind", "(String,Object,Attributes)", "summary", "df-generated"] + - ["javax.naming.directory", "ModificationItem", "getModificationOp", "()", "summary", "df-generated"] + - ["javax.naming.directory", "SearchControls", "getCountLimit", "()", "summary", "df-generated"] + - ["javax.naming.directory", "SearchControls", "getDerefLinkFlag", "()", "summary", "df-generated"] + - ["javax.naming.directory", "SearchControls", "getReturningObjFlag", "()", "summary", "df-generated"] + - ["javax.naming.directory", "SearchControls", "getSearchScope", "()", "summary", "df-generated"] + - ["javax.naming.directory", "SearchControls", "getTimeLimit", "()", "summary", "df-generated"] + - ["javax.naming.directory", "SearchControls", "setCountLimit", "(long)", "summary", "df-generated"] + - ["javax.naming.directory", "SearchControls", "setDerefLinkFlag", "(boolean)", "summary", "df-generated"] + - ["javax.naming.directory", "SearchControls", "setReturningObjFlag", "(boolean)", "summary", "df-generated"] + - ["javax.naming.directory", "SearchControls", "setSearchScope", "(int)", "summary", "df-generated"] + - ["javax.naming.directory", "SearchControls", "setTimeLimit", "(int)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.naming.event.model.yml b/java/ql/lib/ext/generated/javax.naming.event.model.yml new file mode 100644 index 00000000000..2dae0e7370f --- /dev/null +++ b/java/ql/lib/ext/generated/javax.naming.event.model.yml @@ -0,0 +1,25 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.naming.event", "NamingEvent", True, "NamingEvent", "(EventContext,int,Binding,Binding,Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.event", "NamingEvent", True, "NamingEvent", "(EventContext,int,Binding,Binding,Object)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.event", "NamingEvent", True, "NamingEvent", "(EventContext,int,Binding,Binding,Object)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.event", "NamingEvent", True, "NamingEvent", "(EventContext,int,Binding,Binding,Object)", "", "Argument[4]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.event", "NamingEvent", True, "getChangeInfo", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.event", "NamingEvent", True, "getEventContext", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.event", "NamingEvent", True, "getNewBinding", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.event", "NamingEvent", True, "getOldBinding", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.event", "NamingExceptionEvent", True, "NamingExceptionEvent", "(EventContext,NamingException)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.event", "NamingExceptionEvent", True, "NamingExceptionEvent", "(EventContext,NamingException)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.event", "NamingExceptionEvent", True, "getEventContext", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.event", "NamingExceptionEvent", True, "getException", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["javax.naming.event", "NamingEvent", "dispatch", "(NamingListener)", "summary", "df-generated"] + - ["javax.naming.event", "NamingEvent", "getType", "()", "summary", "df-generated"] + - ["javax.naming.event", "NamingExceptionEvent", "dispatch", "(NamingListener)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.naming.ldap.model.yml b/java/ql/lib/ext/generated/javax.naming.ldap.model.yml new file mode 100644 index 00000000000..8597d37da7c --- /dev/null +++ b/java/ql/lib/ext/generated/javax.naming.ldap.model.yml @@ -0,0 +1,91 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.naming.ldap", "BasicControl", True, "BasicControl", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.ldap", "BasicControl", True, "BasicControl", "(String,boolean,byte[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.ldap", "BasicControl", True, "BasicControl", "(String,boolean,byte[])", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.ldap", "Control", True, "getEncodedValue", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.ldap", "Control", True, "getID", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.ldap", "ControlFactory", True, "getControlInstance", "(Control,Context,Hashtable)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.ldap", "InitialLdapContext", True, "InitialLdapContext", "(Hashtable,Control[])", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.ldap", "InitialLdapContext", True, "InitialLdapContext", "(Hashtable,Control[])", "", "Argument[1].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.ldap", "LdapContext", True, "getConnectControls", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.ldap", "LdapContext", True, "getRequestControls", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.ldap", "LdapContext", True, "getResponseControls", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.ldap", "LdapContext", True, "newInstance", "(Control[])", "", "Argument[0].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.ldap", "LdapContext", True, "newInstance", "(Control[])", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.ldap", "LdapContext", True, "reconnect", "(Control[])", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.ldap", "LdapContext", True, "setRequestControls", "(Control[])", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.ldap", "LdapName", True, "LdapName", "(List)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.ldap", "LdapName", True, "LdapName", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.ldap", "LdapName", True, "add", "(Rdn)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.ldap", "LdapName", True, "add", "(Rdn)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.ldap", "LdapName", True, "add", "(Rdn)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.ldap", "LdapName", True, "add", "(int,Rdn)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.ldap", "LdapName", True, "add", "(int,Rdn)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["javax.naming.ldap", "LdapName", True, "addAll", "(List)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.ldap", "LdapName", True, "addAll", "(List)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.ldap", "LdapName", True, "addAll", "(List)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.ldap", "LdapName", True, "addAll", "(int,List)", "", "Argument[1].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.ldap", "LdapName", True, "addAll", "(int,List)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["javax.naming.ldap", "LdapName", True, "getRdn", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.ldap", "LdapName", True, "getRdns", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.ldap", "PagedResultsResponseControl", False, "PagedResultsResponseControl", "(String,boolean,byte[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.ldap", "PagedResultsResponseControl", False, "PagedResultsResponseControl", "(String,boolean,byte[])", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.ldap", "PagedResultsResponseControl", False, "getCookie", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.ldap", "Rdn", True, "Rdn", "(Rdn)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.ldap", "Rdn", True, "getType", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.ldap", "Rdn", True, "getValue", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.ldap", "Rdn", True, "toAttributes", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.ldap", "SortKey", True, "SortKey", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.ldap", "SortKey", True, "SortKey", "(String,boolean,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.ldap", "SortKey", True, "SortKey", "(String,boolean,String)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.ldap", "SortKey", True, "getAttributeID", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.ldap", "SortKey", True, "getMatchingRuleID", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.ldap", "SortResponseControl", False, "SortResponseControl", "(String,boolean,byte[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.ldap", "SortResponseControl", False, "SortResponseControl", "(String,boolean,byte[])", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.ldap", "SortResponseControl", False, "getAttributeID", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.ldap", "UnsolicitedNotificationEvent", True, "UnsolicitedNotificationEvent", "(Object,UnsolicitedNotification)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.ldap", "UnsolicitedNotificationEvent", True, "UnsolicitedNotificationEvent", "(Object,UnsolicitedNotification)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.ldap", "UnsolicitedNotificationEvent", True, "getNotification", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["javax.naming.ldap", "Control", "isCritical", "()", "summary", "df-generated"] + - ["javax.naming.ldap", "ControlFactory", "getControlInstance", "(Control)", "summary", "df-generated"] + - ["javax.naming.ldap", "ExtendedRequest", "createExtendedResponse", "(String,byte[],int,int)", "summary", "df-generated"] + - ["javax.naming.ldap", "ExtendedRequest", "getEncodedValue", "()", "summary", "df-generated"] + - ["javax.naming.ldap", "ExtendedRequest", "getID", "()", "summary", "df-generated"] + - ["javax.naming.ldap", "ExtendedResponse", "getEncodedValue", "()", "summary", "df-generated"] + - ["javax.naming.ldap", "ExtendedResponse", "getID", "()", "summary", "df-generated"] + - ["javax.naming.ldap", "LdapContext", "extendedOperation", "(ExtendedRequest)", "summary", "df-generated"] + - ["javax.naming.ldap", "LdapName", "endsWith", "(List)", "summary", "df-generated"] + - ["javax.naming.ldap", "LdapName", "startsWith", "(List)", "summary", "df-generated"] + - ["javax.naming.ldap", "LdapReferralException", "getReferralContext", "(Hashtable,Control[])", "summary", "df-generated"] + - ["javax.naming.ldap", "ManageReferralControl", "ManageReferralControl", "(boolean)", "summary", "df-generated"] + - ["javax.naming.ldap", "PagedResultsControl", "PagedResultsControl", "(int,boolean)", "summary", "df-generated"] + - ["javax.naming.ldap", "PagedResultsControl", "PagedResultsControl", "(int,byte[],boolean)", "summary", "df-generated"] + - ["javax.naming.ldap", "PagedResultsResponseControl", "getResultSize", "()", "summary", "df-generated"] + - ["javax.naming.ldap", "Rdn", "Rdn", "(Attributes)", "summary", "df-generated"] + - ["javax.naming.ldap", "Rdn", "Rdn", "(String)", "summary", "df-generated"] + - ["javax.naming.ldap", "Rdn", "Rdn", "(String,Object)", "summary", "df-generated"] + - ["javax.naming.ldap", "Rdn", "escapeValue", "(Object)", "summary", "df-generated"] + - ["javax.naming.ldap", "Rdn", "size", "()", "summary", "df-generated"] + - ["javax.naming.ldap", "Rdn", "unescapeValue", "(String)", "summary", "df-generated"] + - ["javax.naming.ldap", "SortControl", "SortControl", "(SortKey[],boolean)", "summary", "df-generated"] + - ["javax.naming.ldap", "SortControl", "SortControl", "(String,boolean)", "summary", "df-generated"] + - ["javax.naming.ldap", "SortControl", "SortControl", "(String[],boolean)", "summary", "df-generated"] + - ["javax.naming.ldap", "SortKey", "isAscending", "()", "summary", "df-generated"] + - ["javax.naming.ldap", "SortResponseControl", "getException", "()", "summary", "df-generated"] + - ["javax.naming.ldap", "SortResponseControl", "getResultCode", "()", "summary", "df-generated"] + - ["javax.naming.ldap", "SortResponseControl", "isSorted", "()", "summary", "df-generated"] + - ["javax.naming.ldap", "StartTlsResponse", "close", "()", "summary", "df-generated"] + - ["javax.naming.ldap", "StartTlsResponse", "negotiate", "()", "summary", "df-generated"] + - ["javax.naming.ldap", "StartTlsResponse", "negotiate", "(SSLSocketFactory)", "summary", "df-generated"] + - ["javax.naming.ldap", "StartTlsResponse", "setEnabledCipherSuites", "(String[])", "summary", "df-generated"] + - ["javax.naming.ldap", "StartTlsResponse", "setHostnameVerifier", "(HostnameVerifier)", "summary", "df-generated"] + - ["javax.naming.ldap", "UnsolicitedNotificationEvent", "dispatch", "(UnsolicitedNotificationListener)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.naming.ldap.spi.model.yml b/java/ql/lib/ext/generated/javax.naming.ldap.spi.model.yml new file mode 100644 index 00000000000..ed57b597119 --- /dev/null +++ b/java/ql/lib/ext/generated/javax.naming.ldap.spi.model.yml @@ -0,0 +1,15 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.naming.ldap.spi", "LdapDnsProviderResult", False, "LdapDnsProviderResult", "(String,List)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.ldap.spi", "LdapDnsProviderResult", False, "LdapDnsProviderResult", "(String,List)", "", "Argument[1].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.ldap.spi", "LdapDnsProviderResult", False, "getDomainName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.ldap.spi", "LdapDnsProviderResult", False, "getEndpoints", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["javax.naming.ldap.spi", "LdapDnsProvider", "lookupEndpoints", "(String,Map)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.naming.model.yml b/java/ql/lib/ext/generated/javax.naming.model.yml new file mode 100644 index 00000000000..86321736e88 --- /dev/null +++ b/java/ql/lib/ext/generated/javax.naming.model.yml @@ -0,0 +1,177 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.naming", "AuthenticationException", True, "AuthenticationException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "AuthenticationNotSupportedException", True, "AuthenticationNotSupportedException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "BinaryRefAddr", True, "BinaryRefAddr", "(String,byte[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "BinaryRefAddr", True, "BinaryRefAddr", "(String,byte[])", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "BinaryRefAddr", True, "BinaryRefAddr", "(String,byte[],int,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "BinaryRefAddr", True, "BinaryRefAddr", "(String,byte[],int,int)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "Binding", True, "Binding", "(String,Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "Binding", True, "Binding", "(String,Object)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "Binding", True, "Binding", "(String,Object,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "Binding", True, "Binding", "(String,Object,boolean)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "Binding", True, "Binding", "(String,String,Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "Binding", True, "Binding", "(String,String,Object)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "Binding", True, "Binding", "(String,String,Object)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "Binding", True, "Binding", "(String,String,Object,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "Binding", True, "Binding", "(String,String,Object,boolean)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "Binding", True, "Binding", "(String,String,Object,boolean)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "Binding", True, "getObject", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming", "Binding", True, "setObject", "(Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "CannotProceedException", True, "CannotProceedException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "CannotProceedException", True, "getAltName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming", "CannotProceedException", True, "getAltNameCtx", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming", "CannotProceedException", True, "getEnvironment", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming", "CannotProceedException", True, "getRemainingNewName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming", "CannotProceedException", True, "setAltName", "(Name)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "CannotProceedException", True, "setAltNameCtx", "(Context)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "CannotProceedException", True, "setEnvironment", "(Hashtable)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "CannotProceedException", True, "setRemainingNewName", "(Name)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "CommunicationException", True, "CommunicationException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "CompoundName", True, "CompoundName", "(String,Properties)", "", "Argument[1].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "ConfigurationException", True, "ConfigurationException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "Context", True, "addToEnvironment", "(String,Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "Context", True, "addToEnvironment", "(String,Object)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "Context", True, "addToEnvironment", "(String,Object)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming", "Context", True, "addToEnvironment", "(String,Object)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming", "Context", True, "composeName", "(Name,Name)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming", "Context", True, "composeName", "(Name,Name)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming", "Context", True, "composeName", "(String,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming", "Context", True, "composeName", "(String,String)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming", "Context", True, "createSubcontext", "(Name)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming", "Context", True, "createSubcontext", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming", "Context", True, "getEnvironment", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming", "Context", True, "getNameInNamespace", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming", "Context", True, "getNameParser", "(Name)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming", "Context", True, "getNameParser", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming", "Context", True, "list", "(Name)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming", "Context", True, "list", "(Name)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming", "Context", True, "list", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming", "Context", True, "listBindings", "(Name)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming", "Context", True, "listBindings", "(Name)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming", "Context", True, "listBindings", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming", "Context", True, "lookup", "(Name)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming", "Context", True, "lookup", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming", "Context", True, "lookupLink", "(Name)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming", "Context", True, "lookupLink", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming", "Context", True, "removeFromEnvironment", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming", "ContextNotEmptyException", True, "ContextNotEmptyException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "InitialContext", True, "InitialContext", "(Hashtable)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "InsufficientResourcesException", True, "InsufficientResourcesException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "InterruptedNamingException", True, "InterruptedNamingException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "InvalidNameException", True, "InvalidNameException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "LimitExceededException", True, "LimitExceededException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "LinkException", True, "LinkException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "LinkException", True, "getLinkExplanation", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming", "LinkException", True, "getLinkRemainingName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming", "LinkException", True, "getLinkResolvedName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming", "LinkException", True, "getLinkResolvedObj", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming", "LinkException", True, "setLinkExplanation", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "LinkException", True, "setLinkRemainingName", "(Name)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "LinkException", True, "setLinkResolvedName", "(Name)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "LinkException", True, "setLinkResolvedObj", "(Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "LinkLoopException", True, "LinkLoopException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "LinkRef", True, "LinkRef", "(Name)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "LinkRef", True, "LinkRef", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "LinkRef", True, "getLinkName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming", "MalformedLinkException", True, "MalformedLinkException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "Name", True, "add", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming", "Name", True, "add", "(String)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["javax.naming", "Name", True, "add", "(int,String)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["javax.naming", "Name", True, "addAll", "(Name)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming", "Name", True, "addAll", "(Name)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["javax.naming", "Name", True, "addAll", "(int,Name)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["javax.naming", "Name", True, "get", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming", "Name", True, "getAll", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming", "Name", True, "getPrefix", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming", "Name", True, "getSuffix", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming", "Name", True, "remove", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming", "NameAlreadyBoundException", True, "NameAlreadyBoundException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "NameClassPair", True, "NameClassPair", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "NameClassPair", True, "NameClassPair", "(String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "NameClassPair", True, "NameClassPair", "(String,String,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "NameClassPair", True, "NameClassPair", "(String,String,boolean)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "NameClassPair", True, "getClassName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming", "NameClassPair", True, "getName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming", "NameClassPair", True, "getNameInNamespace", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming", "NameClassPair", True, "setClassName", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "NameClassPair", True, "setName", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "NameClassPair", True, "setNameInNamespace", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "NameNotFoundException", True, "NameNotFoundException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "NamingException", True, "NamingException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "NamingException", True, "appendRemainingName", "(Name)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "NamingException", True, "getExplanation", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming", "NamingException", True, "getRemainingName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming", "NamingException", True, "getResolvedName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming", "NamingException", True, "getResolvedObj", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming", "NamingException", True, "getRootCause", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming", "NamingException", True, "setRemainingName", "(Name)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "NamingException", True, "setResolvedName", "(Name)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "NamingException", True, "setResolvedObj", "(Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "NamingException", True, "setRootCause", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "NamingSecurityException", True, "NamingSecurityException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "NoInitialContextException", True, "NoInitialContextException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "NoPermissionException", True, "NoPermissionException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "NotContextException", True, "NotContextException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "OperationNotSupportedException", True, "OperationNotSupportedException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "PartialResultException", True, "PartialResultException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "RefAddr", True, "getContent", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming", "RefAddr", True, "getType", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming", "Reference", True, "Reference", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "Reference", True, "Reference", "(String,RefAddr)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "Reference", True, "Reference", "(String,RefAddr)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "Reference", True, "Reference", "(String,RefAddr,String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "Reference", True, "Reference", "(String,RefAddr,String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "Reference", True, "Reference", "(String,RefAddr,String,String)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "Reference", True, "Reference", "(String,RefAddr,String,String)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "Reference", True, "Reference", "(String,String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "Reference", True, "Reference", "(String,String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "Reference", True, "Reference", "(String,String,String)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "Reference", True, "add", "(RefAddr)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "Reference", True, "add", "(int,RefAddr)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "Reference", True, "get", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming", "Reference", True, "get", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming", "Reference", True, "getAll", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming", "Reference", True, "getClassName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming", "Reference", True, "getFactoryClassLocation", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming", "Reference", True, "getFactoryClassName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming", "Reference", True, "remove", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming", "ServiceUnavailableException", True, "ServiceUnavailableException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "SizeLimitExceededException", True, "SizeLimitExceededException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "TimeLimitExceededException", True, "TimeLimitExceededException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["javax.naming", "CompositeName", "CompositeName", "(String)", "summary", "df-generated"] + - ["javax.naming", "Context", "bind", "(Name,Object)", "summary", "df-generated"] + - ["javax.naming", "Context", "bind", "(String,Object)", "summary", "df-generated"] + - ["javax.naming", "Context", "close", "()", "summary", "df-generated"] + - ["javax.naming", "Context", "destroySubcontext", "(Name)", "summary", "df-generated"] + - ["javax.naming", "Context", "destroySubcontext", "(String)", "summary", "df-generated"] + - ["javax.naming", "Context", "rebind", "(Name,Object)", "summary", "df-generated"] + - ["javax.naming", "Context", "rebind", "(String,Object)", "summary", "df-generated"] + - ["javax.naming", "Context", "rename", "(Name,Name)", "summary", "df-generated"] + - ["javax.naming", "Context", "rename", "(String,String)", "summary", "df-generated"] + - ["javax.naming", "Context", "unbind", "(Name)", "summary", "df-generated"] + - ["javax.naming", "Context", "unbind", "(String)", "summary", "df-generated"] + - ["javax.naming", "InitialContext", "doLookup", "(Name)", "summary", "df-generated"] + - ["javax.naming", "InitialContext", "doLookup", "(String)", "summary", "df-generated"] + - ["javax.naming", "Name", "endsWith", "(Name)", "summary", "df-generated"] + - ["javax.naming", "Name", "isEmpty", "()", "summary", "df-generated"] + - ["javax.naming", "Name", "size", "()", "summary", "df-generated"] + - ["javax.naming", "Name", "startsWith", "(Name)", "summary", "df-generated"] + - ["javax.naming", "NameClassPair", "isRelative", "()", "summary", "df-generated"] + - ["javax.naming", "NameClassPair", "setRelative", "(boolean)", "summary", "df-generated"] + - ["javax.naming", "NamingException", "appendRemainingComponent", "(String)", "summary", "df-generated"] + - ["javax.naming", "Reference", "clear", "()", "summary", "df-generated"] + - ["javax.naming", "Reference", "size", "()", "summary", "df-generated"] + - ["javax.naming", "ReferralException", "getReferralContext", "()", "summary", "df-generated"] + - ["javax.naming", "ReferralException", "getReferralContext", "(Hashtable)", "summary", "df-generated"] + - ["javax.naming", "ReferralException", "getReferralInfo", "()", "summary", "df-generated"] + - ["javax.naming", "ReferralException", "retryReferral", "()", "summary", "df-generated"] + - ["javax.naming", "ReferralException", "skipReferral", "()", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.naming.spi.model.yml b/java/ql/lib/ext/generated/javax.naming.spi.model.yml new file mode 100644 index 00000000000..5f36e7d0e73 --- /dev/null +++ b/java/ql/lib/ext/generated/javax.naming.spi.model.yml @@ -0,0 +1,40 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.naming.spi", "DirStateFactory$Result", True, "Result", "(Object,Attributes)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.spi", "DirStateFactory$Result", True, "Result", "(Object,Attributes)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.spi", "DirStateFactory$Result", True, "getAttributes", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.spi", "DirStateFactory$Result", True, "getObject", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.spi", "DirectoryManager", True, "getContinuationDirContext", "(CannotProceedException)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.spi", "DirectoryManager", True, "getObjectInstance", "(Object,Name,Context,Hashtable,Attributes)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.spi", "DirectoryManager", True, "getObjectInstance", "(Object,Name,Context,Hashtable,Attributes)", "", "Argument[3].Element", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.spi", "DirectoryManager", True, "getStateToBind", "(Object,Name,Context,Hashtable,Attributes)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.spi", "DirectoryManager", True, "getStateToBind", "(Object,Name,Context,Hashtable,Attributes)", "", "Argument[4]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.spi", "NamingManager", True, "getContinuationContext", "(CannotProceedException)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.spi", "NamingManager", True, "getInitialContext", "(Hashtable)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.spi", "NamingManager", True, "getObjectInstance", "(Object,Name,Context,Hashtable)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.spi", "NamingManager", True, "getObjectInstance", "(Object,Name,Context,Hashtable)", "", "Argument[3].Element", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.spi", "NamingManager", True, "getStateToBind", "(Object,Name,Context,Hashtable)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.spi", "NamingManager", True, "getURLContext", "(String,Hashtable)", "", "Argument[1].Element", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.spi", "ResolveResult", True, "ResolveResult", "(Object,Name)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.spi", "ResolveResult", True, "ResolveResult", "(Object,Name)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.spi", "ResolveResult", True, "ResolveResult", "(Object,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.spi", "ResolveResult", True, "appendRemainingName", "(Name)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.spi", "ResolveResult", True, "getRemainingName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.spi", "ResolveResult", True, "getResolvedObj", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.spi", "ResolveResult", True, "setRemainingName", "(Name)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.spi", "ResolveResult", True, "setResolvedObj", "(Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.spi", "Resolver", True, "resolveToClass", "(Name,Class)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.spi", "Resolver", True, "resolveToClass", "(Name,Class)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.spi", "Resolver", True, "resolveToClass", "(String,Class)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["javax.naming.spi", "NamingManager", "hasInitialContextFactoryBuilder", "()", "summary", "df-generated"] + - ["javax.naming.spi", "NamingManager", "setInitialContextFactoryBuilder", "(InitialContextFactoryBuilder)", "summary", "df-generated"] + - ["javax.naming.spi", "NamingManager", "setObjectFactoryBuilder", "(ObjectFactoryBuilder)", "summary", "df-generated"] + - ["javax.naming.spi", "ResolveResult", "appendRemainingComponent", "(String)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.net.model.yml b/java/ql/lib/ext/generated/javax.net.model.yml new file mode 100644 index 00000000000..2990ef69c06 --- /dev/null +++ b/java/ql/lib/ext/generated/javax.net.model.yml @@ -0,0 +1,22 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.net", "ServerSocketFactory", True, "createServerSocket", "(int,int,InetAddress)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["javax.net", "SocketFactory", True, "createSocket", "(InetAddress,int,InetAddress,int)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["javax.net", "SocketFactory", True, "createSocket", "(String,int)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.net", "SocketFactory", True, "createSocket", "(String,int,InetAddress,int)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.net", "SocketFactory", True, "createSocket", "(String,int,InetAddress,int)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["javax.net", "ServerSocketFactory", "createServerSocket", "()", "summary", "df-generated"] + - ["javax.net", "ServerSocketFactory", "createServerSocket", "(int)", "summary", "df-generated"] + - ["javax.net", "ServerSocketFactory", "createServerSocket", "(int,int)", "summary", "df-generated"] + - ["javax.net", "ServerSocketFactory", "getDefault", "()", "summary", "df-generated"] + - ["javax.net", "SocketFactory", "createSocket", "()", "summary", "df-generated"] + - ["javax.net", "SocketFactory", "createSocket", "(InetAddress,int)", "summary", "df-generated"] + - ["javax.net", "SocketFactory", "getDefault", "()", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.net.ssl.model.yml b/java/ql/lib/ext/generated/javax.net.ssl.model.yml new file mode 100644 index 00000000000..194be2c2008 --- /dev/null +++ b/java/ql/lib/ext/generated/javax.net.ssl.model.yml @@ -0,0 +1,233 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.net.ssl", "CertPathTrustManagerParameters", True, "CertPathTrustManagerParameters", "(CertPathParameters)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.net.ssl", "CertPathTrustManagerParameters", True, "getParameters", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.net.ssl", "HandshakeCompletedEvent", True, "HandshakeCompletedEvent", "(SSLSocket,SSLSession)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.net.ssl", "HandshakeCompletedEvent", True, "HandshakeCompletedEvent", "(SSLSocket,SSLSession)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.net.ssl", "HandshakeCompletedEvent", True, "getLocalCertificates", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.net.ssl", "HandshakeCompletedEvent", True, "getPeerCertificates", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.net.ssl", "HandshakeCompletedEvent", True, "getSession", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.net.ssl", "HandshakeCompletedEvent", True, "getSocket", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.net.ssl", "HttpsURLConnection", True, "getHostnameVerifier", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.net.ssl", "HttpsURLConnection", True, "getSSLSocketFactory", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.net.ssl", "HttpsURLConnection", True, "setHostnameVerifier", "(HostnameVerifier)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.net.ssl", "HttpsURLConnection", True, "setSSLSocketFactory", "(SSLSocketFactory)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.net.ssl", "KeyManagerFactory", True, "getAlgorithm", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.net.ssl", "KeyManagerFactory", True, "getInstance", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.net.ssl", "KeyManagerFactory", True, "getInstance", "(String,Provider)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.net.ssl", "KeyManagerFactory", True, "getInstance", "(String,Provider)", "", "Argument[1].Element", "ReturnValue", "taint", "df-generated"] + - ["javax.net.ssl", "KeyManagerFactory", True, "getInstance", "(String,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.net.ssl", "KeyManagerFactory", True, "getKeyManagers", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.net.ssl", "KeyManagerFactory", True, "getProvider", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.net.ssl", "KeyStoreBuilderParameters", True, "KeyStoreBuilderParameters", "(KeyStore$Builder)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.net.ssl", "KeyStoreBuilderParameters", True, "KeyStoreBuilderParameters", "(List)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.net.ssl", "KeyStoreBuilderParameters", True, "getParameters", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.net.ssl", "SNIHostName", False, "SNIHostName", "(byte[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.net.ssl", "SNIHostName", False, "createSNIMatcher", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.net.ssl", "SNIHostName", False, "getAsciiName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.net.ssl", "SNIServerName", True, "getEncoded", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.net.ssl", "SSLContext", True, "createSSLEngine", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.net.ssl", "SSLContext", True, "createSSLEngine", "(String,int)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.net.ssl", "SSLContext", True, "createSSLEngine", "(String,int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.net.ssl", "SSLContext", True, "getClientSessionContext", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.net.ssl", "SSLContext", True, "getInstance", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.net.ssl", "SSLContext", True, "getInstance", "(String,Provider)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.net.ssl", "SSLContext", True, "getInstance", "(String,Provider)", "", "Argument[1].Element", "ReturnValue", "taint", "df-generated"] + - ["javax.net.ssl", "SSLContext", True, "getInstance", "(String,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.net.ssl", "SSLContext", True, "getProtocol", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.net.ssl", "SSLContext", True, "getProvider", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.net.ssl", "SSLContext", True, "getServerSessionContext", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.net.ssl", "SSLContext", True, "getServerSocketFactory", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.net.ssl", "SSLContext", True, "getSocketFactory", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.net.ssl", "SSLContext", True, "init", "(KeyManager[],TrustManager[],SecureRandom)", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.net.ssl", "SSLContext", True, "init", "(KeyManager[],TrustManager[],SecureRandom)", "", "Argument[1].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.net.ssl", "SSLContext", True, "init", "(KeyManager[],TrustManager[],SecureRandom)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.net.ssl", "SSLEngine", True, "getPeerHost", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.net.ssl", "SSLException", True, "SSLException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.net.ssl", "SSLException", True, "SSLException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.net.ssl", "SSLException", True, "SSLException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.net.ssl", "SSLException", True, "SSLException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.net.ssl", "SSLHandshakeException", True, "SSLHandshakeException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.net.ssl", "SSLKeyException", True, "SSLKeyException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.net.ssl", "SSLParameters", True, "SSLParameters", "(String[])", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.net.ssl", "SSLParameters", True, "SSLParameters", "(String[],String[])", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.net.ssl", "SSLParameters", True, "SSLParameters", "(String[],String[])", "", "Argument[1].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.net.ssl", "SSLParameters", True, "getAlgorithmConstraints", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.net.ssl", "SSLParameters", True, "getApplicationProtocols", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.net.ssl", "SSLParameters", True, "getCipherSuites", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.net.ssl", "SSLParameters", True, "getEndpointIdentificationAlgorithm", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.net.ssl", "SSLParameters", True, "getProtocols", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.net.ssl", "SSLParameters", True, "getSNIMatchers", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.net.ssl", "SSLParameters", True, "getServerNames", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.net.ssl", "SSLParameters", True, "setAlgorithmConstraints", "(AlgorithmConstraints)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.net.ssl", "SSLParameters", True, "setApplicationProtocols", "(String[])", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.net.ssl", "SSLParameters", True, "setCipherSuites", "(String[])", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.net.ssl", "SSLParameters", True, "setEndpointIdentificationAlgorithm", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.net.ssl", "SSLParameters", True, "setProtocols", "(String[])", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.net.ssl", "SSLParameters", True, "setSNIMatchers", "(Collection)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.net.ssl", "SSLParameters", True, "setServerNames", "(List)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.net.ssl", "SSLPeerUnverifiedException", True, "SSLPeerUnverifiedException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.net.ssl", "SSLPermission", False, "SSLPermission", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.net.ssl", "SSLPermission", False, "SSLPermission", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.net.ssl", "SSLProtocolException", True, "SSLProtocolException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.net.ssl", "SSLSessionBindingEvent", True, "SSLSessionBindingEvent", "(SSLSession,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.net.ssl", "SSLSessionBindingEvent", True, "SSLSessionBindingEvent", "(SSLSession,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.net.ssl", "SSLSessionBindingEvent", True, "getName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.net.ssl", "SSLSessionBindingEvent", True, "getSession", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.net.ssl", "TrustManagerFactory", True, "getAlgorithm", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.net.ssl", "TrustManagerFactory", True, "getInstance", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.net.ssl", "TrustManagerFactory", True, "getInstance", "(String,Provider)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.net.ssl", "TrustManagerFactory", True, "getInstance", "(String,Provider)", "", "Argument[1].Element", "ReturnValue", "taint", "df-generated"] + - ["javax.net.ssl", "TrustManagerFactory", True, "getInstance", "(String,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.net.ssl", "TrustManagerFactory", True, "getProvider", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.net.ssl", "TrustManagerFactory", True, "getTrustManagers", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["javax.net.ssl", "ExtendedSSLSession", "getLocalSupportedSignatureAlgorithms", "()", "summary", "df-generated"] + - ["javax.net.ssl", "ExtendedSSLSession", "getPeerSupportedSignatureAlgorithms", "()", "summary", "df-generated"] + - ["javax.net.ssl", "ExtendedSSLSession", "getRequestedServerNames", "()", "summary", "df-generated"] + - ["javax.net.ssl", "ExtendedSSLSession", "getStatusResponses", "()", "summary", "df-generated"] + - ["javax.net.ssl", "HandshakeCompletedEvent", "getCipherSuite", "()", "summary", "df-generated"] + - ["javax.net.ssl", "HandshakeCompletedEvent", "getLocalPrincipal", "()", "summary", "df-generated"] + - ["javax.net.ssl", "HandshakeCompletedEvent", "getPeerCertificateChain", "()", "summary", "df-generated"] + - ["javax.net.ssl", "HandshakeCompletedEvent", "getPeerPrincipal", "()", "summary", "df-generated"] + - ["javax.net.ssl", "HostnameVerifier", "verify", "(String,SSLSession)", "summary", "df-generated"] + - ["javax.net.ssl", "HttpsURLConnection", "getCipherSuite", "()", "summary", "df-generated"] + - ["javax.net.ssl", "HttpsURLConnection", "getDefaultHostnameVerifier", "()", "summary", "df-generated"] + - ["javax.net.ssl", "HttpsURLConnection", "getDefaultSSLSocketFactory", "()", "summary", "df-generated"] + - ["javax.net.ssl", "HttpsURLConnection", "getLocalCertificates", "()", "summary", "df-generated"] + - ["javax.net.ssl", "HttpsURLConnection", "getLocalPrincipal", "()", "summary", "df-generated"] + - ["javax.net.ssl", "HttpsURLConnection", "getPeerPrincipal", "()", "summary", "df-generated"] + - ["javax.net.ssl", "HttpsURLConnection", "getSSLSession", "()", "summary", "df-generated"] + - ["javax.net.ssl", "HttpsURLConnection", "getServerCertificates", "()", "summary", "df-generated"] + - ["javax.net.ssl", "HttpsURLConnection", "setDefaultHostnameVerifier", "(HostnameVerifier)", "summary", "df-generated"] + - ["javax.net.ssl", "HttpsURLConnection", "setDefaultSSLSocketFactory", "(SSLSocketFactory)", "summary", "df-generated"] + - ["javax.net.ssl", "KeyManagerFactory", "getDefaultAlgorithm", "()", "summary", "df-generated"] + - ["javax.net.ssl", "KeyManagerFactory", "init", "(KeyStore,char[])", "summary", "df-generated"] + - ["javax.net.ssl", "KeyManagerFactory", "init", "(ManagerFactoryParameters)", "summary", "df-generated"] + - ["javax.net.ssl", "SNIHostName", "SNIHostName", "(String)", "summary", "df-generated"] + - ["javax.net.ssl", "SNIMatcher", "getType", "()", "summary", "df-generated"] + - ["javax.net.ssl", "SNIMatcher", "matches", "(SNIServerName)", "summary", "df-generated"] + - ["javax.net.ssl", "SNIServerName", "getType", "()", "summary", "df-generated"] + - ["javax.net.ssl", "SSLContext", "getDefault", "()", "summary", "df-generated"] + - ["javax.net.ssl", "SSLContext", "getDefaultSSLParameters", "()", "summary", "df-generated"] + - ["javax.net.ssl", "SSLContext", "getSupportedSSLParameters", "()", "summary", "df-generated"] + - ["javax.net.ssl", "SSLContext", "setDefault", "(SSLContext)", "summary", "df-generated"] + - ["javax.net.ssl", "SSLEngine", "beginHandshake", "()", "summary", "df-generated"] + - ["javax.net.ssl", "SSLEngine", "closeInbound", "()", "summary", "df-generated"] + - ["javax.net.ssl", "SSLEngine", "closeOutbound", "()", "summary", "df-generated"] + - ["javax.net.ssl", "SSLEngine", "getApplicationProtocol", "()", "summary", "df-generated"] + - ["javax.net.ssl", "SSLEngine", "getDelegatedTask", "()", "summary", "df-generated"] + - ["javax.net.ssl", "SSLEngine", "getEnableSessionCreation", "()", "summary", "df-generated"] + - ["javax.net.ssl", "SSLEngine", "getEnabledCipherSuites", "()", "summary", "df-generated"] + - ["javax.net.ssl", "SSLEngine", "getEnabledProtocols", "()", "summary", "df-generated"] + - ["javax.net.ssl", "SSLEngine", "getHandshakeApplicationProtocol", "()", "summary", "df-generated"] + - ["javax.net.ssl", "SSLEngine", "getHandshakeApplicationProtocolSelector", "()", "summary", "df-generated"] + - ["javax.net.ssl", "SSLEngine", "getHandshakeSession", "()", "summary", "df-generated"] + - ["javax.net.ssl", "SSLEngine", "getHandshakeStatus", "()", "summary", "df-generated"] + - ["javax.net.ssl", "SSLEngine", "getNeedClientAuth", "()", "summary", "df-generated"] + - ["javax.net.ssl", "SSLEngine", "getPeerPort", "()", "summary", "df-generated"] + - ["javax.net.ssl", "SSLEngine", "getSSLParameters", "()", "summary", "df-generated"] + - ["javax.net.ssl", "SSLEngine", "getSession", "()", "summary", "df-generated"] + - ["javax.net.ssl", "SSLEngine", "getSupportedCipherSuites", "()", "summary", "df-generated"] + - ["javax.net.ssl", "SSLEngine", "getSupportedProtocols", "()", "summary", "df-generated"] + - ["javax.net.ssl", "SSLEngine", "getUseClientMode", "()", "summary", "df-generated"] + - ["javax.net.ssl", "SSLEngine", "getWantClientAuth", "()", "summary", "df-generated"] + - ["javax.net.ssl", "SSLEngine", "isInboundDone", "()", "summary", "df-generated"] + - ["javax.net.ssl", "SSLEngine", "isOutboundDone", "()", "summary", "df-generated"] + - ["javax.net.ssl", "SSLEngine", "setEnableSessionCreation", "(boolean)", "summary", "df-generated"] + - ["javax.net.ssl", "SSLEngine", "setEnabledCipherSuites", "(String[])", "summary", "df-generated"] + - ["javax.net.ssl", "SSLEngine", "setEnabledProtocols", "(String[])", "summary", "df-generated"] + - ["javax.net.ssl", "SSLEngine", "setHandshakeApplicationProtocolSelector", "(BiFunction)", "summary", "df-generated"] + - ["javax.net.ssl", "SSLEngine", "setNeedClientAuth", "(boolean)", "summary", "df-generated"] + - ["javax.net.ssl", "SSLEngine", "setSSLParameters", "(SSLParameters)", "summary", "df-generated"] + - ["javax.net.ssl", "SSLEngine", "setUseClientMode", "(boolean)", "summary", "df-generated"] + - ["javax.net.ssl", "SSLEngine", "setWantClientAuth", "(boolean)", "summary", "df-generated"] + - ["javax.net.ssl", "SSLEngine", "unwrap", "(ByteBuffer,ByteBuffer)", "summary", "df-generated"] + - ["javax.net.ssl", "SSLEngine", "unwrap", "(ByteBuffer,ByteBuffer[])", "summary", "df-generated"] + - ["javax.net.ssl", "SSLEngine", "unwrap", "(ByteBuffer,ByteBuffer[],int,int)", "summary", "df-generated"] + - ["javax.net.ssl", "SSLEngine", "wrap", "(ByteBuffer,ByteBuffer)", "summary", "df-generated"] + - ["javax.net.ssl", "SSLEngine", "wrap", "(ByteBuffer[],ByteBuffer)", "summary", "df-generated"] + - ["javax.net.ssl", "SSLEngine", "wrap", "(ByteBuffer[],int,int,ByteBuffer)", "summary", "df-generated"] + - ["javax.net.ssl", "SSLEngineResult", "SSLEngineResult", "(SSLEngineResult$Status,SSLEngineResult$HandshakeStatus,int,int)", "summary", "df-generated"] + - ["javax.net.ssl", "SSLEngineResult", "SSLEngineResult", "(SSLEngineResult$Status,SSLEngineResult$HandshakeStatus,int,int,long)", "summary", "df-generated"] + - ["javax.net.ssl", "SSLEngineResult", "bytesConsumed", "()", "summary", "df-generated"] + - ["javax.net.ssl", "SSLEngineResult", "bytesProduced", "()", "summary", "df-generated"] + - ["javax.net.ssl", "SSLEngineResult", "getHandshakeStatus", "()", "summary", "df-generated"] + - ["javax.net.ssl", "SSLEngineResult", "getStatus", "()", "summary", "df-generated"] + - ["javax.net.ssl", "SSLEngineResult", "sequenceNumber", "()", "summary", "df-generated"] + - ["javax.net.ssl", "SSLParameters", "getEnableRetransmissions", "()", "summary", "df-generated"] + - ["javax.net.ssl", "SSLParameters", "getMaximumPacketSize", "()", "summary", "df-generated"] + - ["javax.net.ssl", "SSLParameters", "getNeedClientAuth", "()", "summary", "df-generated"] + - ["javax.net.ssl", "SSLParameters", "getUseCipherSuitesOrder", "()", "summary", "df-generated"] + - ["javax.net.ssl", "SSLParameters", "getWantClientAuth", "()", "summary", "df-generated"] + - ["javax.net.ssl", "SSLParameters", "setEnableRetransmissions", "(boolean)", "summary", "df-generated"] + - ["javax.net.ssl", "SSLParameters", "setMaximumPacketSize", "(int)", "summary", "df-generated"] + - ["javax.net.ssl", "SSLParameters", "setNeedClientAuth", "(boolean)", "summary", "df-generated"] + - ["javax.net.ssl", "SSLParameters", "setUseCipherSuitesOrder", "(boolean)", "summary", "df-generated"] + - ["javax.net.ssl", "SSLParameters", "setWantClientAuth", "(boolean)", "summary", "df-generated"] + - ["javax.net.ssl", "SSLServerSocket", "getEnableSessionCreation", "()", "summary", "df-generated"] + - ["javax.net.ssl", "SSLServerSocket", "getEnabledCipherSuites", "()", "summary", "df-generated"] + - ["javax.net.ssl", "SSLServerSocket", "getEnabledProtocols", "()", "summary", "df-generated"] + - ["javax.net.ssl", "SSLServerSocket", "getNeedClientAuth", "()", "summary", "df-generated"] + - ["javax.net.ssl", "SSLServerSocket", "getSSLParameters", "()", "summary", "df-generated"] + - ["javax.net.ssl", "SSLServerSocket", "getSupportedCipherSuites", "()", "summary", "df-generated"] + - ["javax.net.ssl", "SSLServerSocket", "getSupportedProtocols", "()", "summary", "df-generated"] + - ["javax.net.ssl", "SSLServerSocket", "getUseClientMode", "()", "summary", "df-generated"] + - ["javax.net.ssl", "SSLServerSocket", "getWantClientAuth", "()", "summary", "df-generated"] + - ["javax.net.ssl", "SSLServerSocket", "setEnableSessionCreation", "(boolean)", "summary", "df-generated"] + - ["javax.net.ssl", "SSLServerSocket", "setEnabledCipherSuites", "(String[])", "summary", "df-generated"] + - ["javax.net.ssl", "SSLServerSocket", "setEnabledProtocols", "(String[])", "summary", "df-generated"] + - ["javax.net.ssl", "SSLServerSocket", "setNeedClientAuth", "(boolean)", "summary", "df-generated"] + - ["javax.net.ssl", "SSLServerSocket", "setSSLParameters", "(SSLParameters)", "summary", "df-generated"] + - ["javax.net.ssl", "SSLServerSocket", "setUseClientMode", "(boolean)", "summary", "df-generated"] + - ["javax.net.ssl", "SSLServerSocket", "setWantClientAuth", "(boolean)", "summary", "df-generated"] + - ["javax.net.ssl", "SSLServerSocketFactory", "getDefault", "()", "summary", "df-generated"] + - ["javax.net.ssl", "SSLServerSocketFactory", "getDefaultCipherSuites", "()", "summary", "df-generated"] + - ["javax.net.ssl", "SSLServerSocketFactory", "getSupportedCipherSuites", "()", "summary", "df-generated"] + - ["javax.net.ssl", "SSLSession", "getPeerCertificateChain", "()", "summary", "df-generated"] + - ["javax.net.ssl", "SSLSocket", "addHandshakeCompletedListener", "(HandshakeCompletedListener)", "summary", "df-generated"] + - ["javax.net.ssl", "SSLSocket", "getApplicationProtocol", "()", "summary", "df-generated"] + - ["javax.net.ssl", "SSLSocket", "getEnableSessionCreation", "()", "summary", "df-generated"] + - ["javax.net.ssl", "SSLSocket", "getEnabledCipherSuites", "()", "summary", "df-generated"] + - ["javax.net.ssl", "SSLSocket", "getEnabledProtocols", "()", "summary", "df-generated"] + - ["javax.net.ssl", "SSLSocket", "getHandshakeApplicationProtocol", "()", "summary", "df-generated"] + - ["javax.net.ssl", "SSLSocket", "getHandshakeApplicationProtocolSelector", "()", "summary", "df-generated"] + - ["javax.net.ssl", "SSLSocket", "getHandshakeSession", "()", "summary", "df-generated"] + - ["javax.net.ssl", "SSLSocket", "getNeedClientAuth", "()", "summary", "df-generated"] + - ["javax.net.ssl", "SSLSocket", "getSSLParameters", "()", "summary", "df-generated"] + - ["javax.net.ssl", "SSLSocket", "getSession", "()", "summary", "df-generated"] + - ["javax.net.ssl", "SSLSocket", "getSupportedCipherSuites", "()", "summary", "df-generated"] + - ["javax.net.ssl", "SSLSocket", "getSupportedProtocols", "()", "summary", "df-generated"] + - ["javax.net.ssl", "SSLSocket", "getUseClientMode", "()", "summary", "df-generated"] + - ["javax.net.ssl", "SSLSocket", "getWantClientAuth", "()", "summary", "df-generated"] + - ["javax.net.ssl", "SSLSocket", "removeHandshakeCompletedListener", "(HandshakeCompletedListener)", "summary", "df-generated"] + - ["javax.net.ssl", "SSLSocket", "setEnableSessionCreation", "(boolean)", "summary", "df-generated"] + - ["javax.net.ssl", "SSLSocket", "setEnabledCipherSuites", "(String[])", "summary", "df-generated"] + - ["javax.net.ssl", "SSLSocket", "setEnabledProtocols", "(String[])", "summary", "df-generated"] + - ["javax.net.ssl", "SSLSocket", "setHandshakeApplicationProtocolSelector", "(BiFunction)", "summary", "df-generated"] + - ["javax.net.ssl", "SSLSocket", "setNeedClientAuth", "(boolean)", "summary", "df-generated"] + - ["javax.net.ssl", "SSLSocket", "setSSLParameters", "(SSLParameters)", "summary", "df-generated"] + - ["javax.net.ssl", "SSLSocket", "setUseClientMode", "(boolean)", "summary", "df-generated"] + - ["javax.net.ssl", "SSLSocket", "setWantClientAuth", "(boolean)", "summary", "df-generated"] + - ["javax.net.ssl", "SSLSocket", "startHandshake", "()", "summary", "df-generated"] + - ["javax.net.ssl", "SSLSocketFactory", "createSocket", "(Socket,InputStream,boolean)", "summary", "df-generated"] + - ["javax.net.ssl", "SSLSocketFactory", "createSocket", "(Socket,String,int,boolean)", "summary", "df-generated"] + - ["javax.net.ssl", "SSLSocketFactory", "getDefault", "()", "summary", "df-generated"] + - ["javax.net.ssl", "SSLSocketFactory", "getDefaultCipherSuites", "()", "summary", "df-generated"] + - ["javax.net.ssl", "SSLSocketFactory", "getSupportedCipherSuites", "()", "summary", "df-generated"] + - ["javax.net.ssl", "TrustManagerFactory", "getDefaultAlgorithm", "()", "summary", "df-generated"] + - ["javax.net.ssl", "TrustManagerFactory", "init", "(KeyStore)", "summary", "df-generated"] + - ["javax.net.ssl", "TrustManagerFactory", "init", "(ManagerFactoryParameters)", "summary", "df-generated"] + - ["javax.net.ssl", "X509ExtendedKeyManager", "chooseEngineClientAlias", "(String[],Principal[],SSLEngine)", "summary", "df-generated"] + - ["javax.net.ssl", "X509ExtendedKeyManager", "chooseEngineServerAlias", "(String,Principal[],SSLEngine)", "summary", "df-generated"] + - ["javax.net.ssl", "X509ExtendedTrustManager", "checkClientTrusted", "(X509Certificate[],String,SSLEngine)", "summary", "df-generated"] + - ["javax.net.ssl", "X509ExtendedTrustManager", "checkClientTrusted", "(X509Certificate[],String,Socket)", "summary", "df-generated"] + - ["javax.net.ssl", "X509ExtendedTrustManager", "checkServerTrusted", "(X509Certificate[],String,SSLEngine)", "summary", "df-generated"] + - ["javax.net.ssl", "X509ExtendedTrustManager", "checkServerTrusted", "(X509Certificate[],String,Socket)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.print.attribute.model.yml b/java/ql/lib/ext/generated/javax.print.attribute.model.yml new file mode 100644 index 00000000000..08866afd480 --- /dev/null +++ b/java/ql/lib/ext/generated/javax.print.attribute.model.yml @@ -0,0 +1,70 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.print.attribute", "AttributeSet", True, "add", "(Attribute)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.print.attribute", "AttributeSet", True, "get", "(Class)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.print.attribute", "AttributeSet", True, "toArray", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.print.attribute", "AttributeSetUtilities", False, "synchronizedView", "(AttributeSet)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.print.attribute", "AttributeSetUtilities", False, "synchronizedView", "(DocAttributeSet)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.print.attribute", "AttributeSetUtilities", False, "synchronizedView", "(PrintJobAttributeSet)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.print.attribute", "AttributeSetUtilities", False, "synchronizedView", "(PrintRequestAttributeSet)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.print.attribute", "AttributeSetUtilities", False, "synchronizedView", "(PrintServiceAttributeSet)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.print.attribute", "AttributeSetUtilities", False, "unmodifiableView", "(AttributeSet)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.print.attribute", "AttributeSetUtilities", False, "unmodifiableView", "(DocAttributeSet)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.print.attribute", "AttributeSetUtilities", False, "unmodifiableView", "(PrintJobAttributeSet)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.print.attribute", "AttributeSetUtilities", False, "unmodifiableView", "(PrintRequestAttributeSet)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.print.attribute", "AttributeSetUtilities", False, "unmodifiableView", "(PrintServiceAttributeSet)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.print.attribute", "AttributeSetUtilities", False, "verifyAttributeValue", "(Object,Class)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.print.attribute", "HashAttributeSet", True, "HashAttributeSet", "(Attribute)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.print.attribute", "HashAttributeSet", True, "HashAttributeSet", "(Attribute[])", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.print.attribute", "HashDocAttributeSet", True, "HashDocAttributeSet", "(DocAttribute)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.print.attribute", "HashDocAttributeSet", True, "HashDocAttributeSet", "(DocAttribute[])", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.print.attribute", "HashPrintJobAttributeSet", True, "HashPrintJobAttributeSet", "(PrintJobAttribute)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.print.attribute", "HashPrintJobAttributeSet", True, "HashPrintJobAttributeSet", "(PrintJobAttribute[])", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.print.attribute", "HashPrintRequestAttributeSet", True, "HashPrintRequestAttributeSet", "(PrintRequestAttribute)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.print.attribute", "HashPrintRequestAttributeSet", True, "HashPrintRequestAttributeSet", "(PrintRequestAttribute[])", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.print.attribute", "HashPrintServiceAttributeSet", True, "HashPrintServiceAttributeSet", "(PrintServiceAttribute)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.print.attribute", "HashPrintServiceAttributeSet", True, "HashPrintServiceAttributeSet", "(PrintServiceAttribute[])", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.print.attribute", "TextSyntax", True, "getLocale", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.print.attribute", "TextSyntax", True, "getValue", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.print.attribute", "URISyntax", True, "getURI", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.print.attribute", "UnmodifiableSetException", True, "UnmodifiableSetException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["javax.print.attribute", "Attribute", "getCategory", "()", "summary", "df-generated"] + - ["javax.print.attribute", "Attribute", "getName", "()", "summary", "df-generated"] + - ["javax.print.attribute", "AttributeSet", "addAll", "(AttributeSet)", "summary", "df-generated"] + - ["javax.print.attribute", "AttributeSet", "clear", "()", "summary", "df-generated"] + - ["javax.print.attribute", "AttributeSet", "containsKey", "(Class)", "summary", "df-generated"] + - ["javax.print.attribute", "AttributeSet", "containsValue", "(Attribute)", "summary", "df-generated"] + - ["javax.print.attribute", "AttributeSet", "isEmpty", "()", "summary", "df-generated"] + - ["javax.print.attribute", "AttributeSet", "remove", "(Attribute)", "summary", "df-generated"] + - ["javax.print.attribute", "AttributeSet", "remove", "(Class)", "summary", "df-generated"] + - ["javax.print.attribute", "AttributeSet", "size", "()", "summary", "df-generated"] + - ["javax.print.attribute", "AttributeSetUtilities", "verifyAttributeCategory", "(Object,Class)", "summary", "df-generated"] + - ["javax.print.attribute", "AttributeSetUtilities", "verifyCategoryForValue", "(Class,Attribute)", "summary", "df-generated"] + - ["javax.print.attribute", "DateTimeSyntax", "getValue", "()", "summary", "df-generated"] + - ["javax.print.attribute", "EnumSyntax", "getValue", "()", "summary", "df-generated"] + - ["javax.print.attribute", "HashAttributeSet", "HashAttributeSet", "(AttributeSet)", "summary", "df-generated"] + - ["javax.print.attribute", "HashDocAttributeSet", "HashDocAttributeSet", "(DocAttributeSet)", "summary", "df-generated"] + - ["javax.print.attribute", "HashPrintJobAttributeSet", "HashPrintJobAttributeSet", "(PrintJobAttributeSet)", "summary", "df-generated"] + - ["javax.print.attribute", "HashPrintRequestAttributeSet", "HashPrintRequestAttributeSet", "(PrintRequestAttributeSet)", "summary", "df-generated"] + - ["javax.print.attribute", "HashPrintServiceAttributeSet", "HashPrintServiceAttributeSet", "(PrintServiceAttributeSet)", "summary", "df-generated"] + - ["javax.print.attribute", "IntegerSyntax", "getValue", "()", "summary", "df-generated"] + - ["javax.print.attribute", "ResolutionSyntax", "ResolutionSyntax", "(int,int,int)", "summary", "df-generated"] + - ["javax.print.attribute", "ResolutionSyntax", "getCrossFeedResolution", "(int)", "summary", "df-generated"] + - ["javax.print.attribute", "ResolutionSyntax", "getFeedResolution", "(int)", "summary", "df-generated"] + - ["javax.print.attribute", "ResolutionSyntax", "getResolution", "(int)", "summary", "df-generated"] + - ["javax.print.attribute", "ResolutionSyntax", "lessThanOrEquals", "(ResolutionSyntax)", "summary", "df-generated"] + - ["javax.print.attribute", "SetOfIntegerSyntax", "contains", "(IntegerSyntax)", "summary", "df-generated"] + - ["javax.print.attribute", "SetOfIntegerSyntax", "contains", "(int)", "summary", "df-generated"] + - ["javax.print.attribute", "SetOfIntegerSyntax", "getMembers", "()", "summary", "df-generated"] + - ["javax.print.attribute", "SetOfIntegerSyntax", "next", "(int)", "summary", "df-generated"] + - ["javax.print.attribute", "Size2DSyntax", "getSize", "(int)", "summary", "df-generated"] + - ["javax.print.attribute", "Size2DSyntax", "getX", "(int)", "summary", "df-generated"] + - ["javax.print.attribute", "Size2DSyntax", "getY", "(int)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.print.attribute.standard.model.yml b/java/ql/lib/ext/generated/javax.print.attribute.standard.model.yml new file mode 100644 index 00000000000..362cdbb4c1e --- /dev/null +++ b/java/ql/lib/ext/generated/javax.print.attribute.standard.model.yml @@ -0,0 +1,92 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.print.attribute.standard", "DateTimeAtCompleted", False, "DateTimeAtCompleted", "(Date)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.print.attribute.standard", "DateTimeAtCreation", False, "DateTimeAtCreation", "(Date)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.print.attribute.standard", "DateTimeAtProcessing", False, "DateTimeAtProcessing", "(Date)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.print.attribute.standard", "Destination", False, "Destination", "(URI)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.print.attribute.standard", "DialogOwner", False, "DialogOwner", "(Window)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.print.attribute.standard", "DialogOwner", False, "getOwner", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.print.attribute.standard", "DocumentName", False, "DocumentName", "(String,Locale)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.print.attribute.standard", "DocumentName", False, "DocumentName", "(String,Locale)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.print.attribute.standard", "JobHoldUntil", False, "JobHoldUntil", "(Date)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.print.attribute.standard", "JobMessageFromOperator", False, "JobMessageFromOperator", "(String,Locale)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.print.attribute.standard", "JobMessageFromOperator", False, "JobMessageFromOperator", "(String,Locale)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.print.attribute.standard", "JobName", False, "JobName", "(String,Locale)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.print.attribute.standard", "JobName", False, "JobName", "(String,Locale)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.print.attribute.standard", "JobOriginatingUserName", False, "JobOriginatingUserName", "(String,Locale)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.print.attribute.standard", "JobOriginatingUserName", False, "JobOriginatingUserName", "(String,Locale)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.print.attribute.standard", "JobStateReasons", False, "JobStateReasons", "(Collection)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.print.attribute.standard", "MediaSize", True, "MediaSize", "(float,float,int,MediaSizeName)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["javax.print.attribute.standard", "MediaSize", True, "MediaSize", "(int,int,int,MediaSizeName)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["javax.print.attribute.standard", "MediaSize", True, "getMediaSizeName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.print.attribute.standard", "OutputDeviceAssigned", False, "OutputDeviceAssigned", "(String,Locale)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.print.attribute.standard", "OutputDeviceAssigned", False, "OutputDeviceAssigned", "(String,Locale)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.print.attribute.standard", "PrinterInfo", False, "PrinterInfo", "(String,Locale)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.print.attribute.standard", "PrinterInfo", False, "PrinterInfo", "(String,Locale)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.print.attribute.standard", "PrinterLocation", False, "PrinterLocation", "(String,Locale)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.print.attribute.standard", "PrinterLocation", False, "PrinterLocation", "(String,Locale)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.print.attribute.standard", "PrinterMakeAndModel", False, "PrinterMakeAndModel", "(String,Locale)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.print.attribute.standard", "PrinterMakeAndModel", False, "PrinterMakeAndModel", "(String,Locale)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.print.attribute.standard", "PrinterMessageFromOperator", False, "PrinterMessageFromOperator", "(String,Locale)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.print.attribute.standard", "PrinterMessageFromOperator", False, "PrinterMessageFromOperator", "(String,Locale)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.print.attribute.standard", "PrinterMoreInfo", False, "PrinterMoreInfo", "(URI)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.print.attribute.standard", "PrinterMoreInfoManufacturer", False, "PrinterMoreInfoManufacturer", "(URI)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.print.attribute.standard", "PrinterName", False, "PrinterName", "(String,Locale)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.print.attribute.standard", "PrinterName", False, "PrinterName", "(String,Locale)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.print.attribute.standard", "PrinterStateReasons", False, "PrinterStateReasons", "(Map)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.print.attribute.standard", "PrinterStateReasons", False, "printerStateReasonSet", "(Severity)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.print.attribute.standard", "PrinterStateReasons", False, "printerStateReasonSet", "(Severity)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.print.attribute.standard", "PrinterURI", False, "PrinterURI", "(URI)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.print.attribute.standard", "RequestingUserName", False, "RequestingUserName", "(String,Locale)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.print.attribute.standard", "RequestingUserName", False, "RequestingUserName", "(String,Locale)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["javax.print.attribute.standard", "Copies", "Copies", "(int)", "summary", "df-generated"] + - ["javax.print.attribute.standard", "CopiesSupported", "CopiesSupported", "(int)", "summary", "df-generated"] + - ["javax.print.attribute.standard", "CopiesSupported", "CopiesSupported", "(int,int)", "summary", "df-generated"] + - ["javax.print.attribute.standard", "JobImpressions", "JobImpressions", "(int)", "summary", "df-generated"] + - ["javax.print.attribute.standard", "JobImpressionsCompleted", "JobImpressionsCompleted", "(int)", "summary", "df-generated"] + - ["javax.print.attribute.standard", "JobImpressionsSupported", "JobImpressionsSupported", "(int,int)", "summary", "df-generated"] + - ["javax.print.attribute.standard", "JobKOctets", "JobKOctets", "(int)", "summary", "df-generated"] + - ["javax.print.attribute.standard", "JobKOctetsProcessed", "JobKOctetsProcessed", "(int)", "summary", "df-generated"] + - ["javax.print.attribute.standard", "JobKOctetsSupported", "JobKOctetsSupported", "(int,int)", "summary", "df-generated"] + - ["javax.print.attribute.standard", "JobMediaSheets", "JobMediaSheets", "(int)", "summary", "df-generated"] + - ["javax.print.attribute.standard", "JobMediaSheetsCompleted", "JobMediaSheetsCompleted", "(int)", "summary", "df-generated"] + - ["javax.print.attribute.standard", "JobMediaSheetsSupported", "JobMediaSheetsSupported", "(int,int)", "summary", "df-generated"] + - ["javax.print.attribute.standard", "JobPriority", "JobPriority", "(int)", "summary", "df-generated"] + - ["javax.print.attribute.standard", "JobPrioritySupported", "JobPrioritySupported", "(int)", "summary", "df-generated"] + - ["javax.print.attribute.standard", "JobStateReasons", "JobStateReasons", "(int)", "summary", "df-generated"] + - ["javax.print.attribute.standard", "JobStateReasons", "JobStateReasons", "(int,float)", "summary", "df-generated"] + - ["javax.print.attribute.standard", "MediaPrintableArea", "MediaPrintableArea", "(float,float,float,float,int)", "summary", "df-generated"] + - ["javax.print.attribute.standard", "MediaPrintableArea", "MediaPrintableArea", "(int,int,int,int,int)", "summary", "df-generated"] + - ["javax.print.attribute.standard", "MediaPrintableArea", "getHeight", "(int)", "summary", "df-generated"] + - ["javax.print.attribute.standard", "MediaPrintableArea", "getPrintableArea", "(int)", "summary", "df-generated"] + - ["javax.print.attribute.standard", "MediaPrintableArea", "getWidth", "(int)", "summary", "df-generated"] + - ["javax.print.attribute.standard", "MediaPrintableArea", "getX", "(int)", "summary", "df-generated"] + - ["javax.print.attribute.standard", "MediaPrintableArea", "getY", "(int)", "summary", "df-generated"] + - ["javax.print.attribute.standard", "MediaSize", "MediaSize", "(float,float,int)", "summary", "df-generated"] + - ["javax.print.attribute.standard", "MediaSize", "MediaSize", "(int,int,int)", "summary", "df-generated"] + - ["javax.print.attribute.standard", "MediaSize", "findMedia", "(float,float,int)", "summary", "df-generated"] + - ["javax.print.attribute.standard", "MediaSize", "getMediaSizeForName", "(MediaSizeName)", "summary", "df-generated"] + - ["javax.print.attribute.standard", "NumberOfDocuments", "NumberOfDocuments", "(int)", "summary", "df-generated"] + - ["javax.print.attribute.standard", "NumberOfInterveningJobs", "NumberOfInterveningJobs", "(int)", "summary", "df-generated"] + - ["javax.print.attribute.standard", "NumberUp", "NumberUp", "(int)", "summary", "df-generated"] + - ["javax.print.attribute.standard", "NumberUpSupported", "NumberUpSupported", "(int)", "summary", "df-generated"] + - ["javax.print.attribute.standard", "NumberUpSupported", "NumberUpSupported", "(int,int)", "summary", "df-generated"] + - ["javax.print.attribute.standard", "NumberUpSupported", "NumberUpSupported", "(int[][])", "summary", "df-generated"] + - ["javax.print.attribute.standard", "PageRanges", "PageRanges", "(String)", "summary", "df-generated"] + - ["javax.print.attribute.standard", "PageRanges", "PageRanges", "(int)", "summary", "df-generated"] + - ["javax.print.attribute.standard", "PageRanges", "PageRanges", "(int,int)", "summary", "df-generated"] + - ["javax.print.attribute.standard", "PageRanges", "PageRanges", "(int[][])", "summary", "df-generated"] + - ["javax.print.attribute.standard", "PagesPerMinute", "PagesPerMinute", "(int)", "summary", "df-generated"] + - ["javax.print.attribute.standard", "PagesPerMinuteColor", "PagesPerMinuteColor", "(int)", "summary", "df-generated"] + - ["javax.print.attribute.standard", "PrinterResolution", "PrinterResolution", "(int,int,int)", "summary", "df-generated"] + - ["javax.print.attribute.standard", "PrinterStateReasons", "PrinterStateReasons", "(int)", "summary", "df-generated"] + - ["javax.print.attribute.standard", "PrinterStateReasons", "PrinterStateReasons", "(int,float)", "summary", "df-generated"] + - ["javax.print.attribute.standard", "QueuedJobCount", "QueuedJobCount", "(int)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.print.event.model.yml b/java/ql/lib/ext/generated/javax.print.event.model.yml new file mode 100644 index 00000000000..91b146ba8b0 --- /dev/null +++ b/java/ql/lib/ext/generated/javax.print.event.model.yml @@ -0,0 +1,28 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.print.event", "PrintEvent", True, "PrintEvent", "(Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.print.event", "PrintJobAttributeEvent", True, "PrintJobAttributeEvent", "(DocPrintJob,PrintJobAttributeSet)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.print.event", "PrintJobAttributeEvent", True, "PrintJobAttributeEvent", "(DocPrintJob,PrintJobAttributeSet)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.print.event", "PrintJobAttributeEvent", True, "getAttributes", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.print.event", "PrintJobAttributeEvent", True, "getPrintJob", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.print.event", "PrintJobEvent", True, "PrintJobEvent", "(DocPrintJob,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.print.event", "PrintJobEvent", True, "getPrintJob", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.print.event", "PrintServiceAttributeEvent", True, "PrintServiceAttributeEvent", "(PrintService,PrintServiceAttributeSet)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.print.event", "PrintServiceAttributeEvent", True, "PrintServiceAttributeEvent", "(PrintService,PrintServiceAttributeSet)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.print.event", "PrintServiceAttributeEvent", True, "getAttributes", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.print.event", "PrintServiceAttributeEvent", True, "getPrintService", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["javax.print.event", "PrintJobEvent", "getPrintEventType", "()", "summary", "df-generated"] + - ["javax.print.event", "PrintJobListener", "printDataTransferCompleted", "(PrintJobEvent)", "summary", "df-generated"] + - ["javax.print.event", "PrintJobListener", "printJobCanceled", "(PrintJobEvent)", "summary", "df-generated"] + - ["javax.print.event", "PrintJobListener", "printJobCompleted", "(PrintJobEvent)", "summary", "df-generated"] + - ["javax.print.event", "PrintJobListener", "printJobFailed", "(PrintJobEvent)", "summary", "df-generated"] + - ["javax.print.event", "PrintJobListener", "printJobNoMoreEvents", "(PrintJobEvent)", "summary", "df-generated"] + - ["javax.print.event", "PrintJobListener", "printJobRequiresAttention", "(PrintJobEvent)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.print.model.yml b/java/ql/lib/ext/generated/javax.print.model.yml new file mode 100644 index 00000000000..bf9267dea96 --- /dev/null +++ b/java/ql/lib/ext/generated/javax.print.model.yml @@ -0,0 +1,56 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.print", "Doc", True, "getAttributes", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.print", "Doc", True, "getDocFlavor", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.print", "Doc", True, "getPrintData", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.print", "Doc", True, "getReaderForText", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.print", "Doc", True, "getStreamForBytes", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.print", "DocFlavor$SERVICE_FORMATTED", True, "SERVICE_FORMATTED", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.print", "DocFlavor", True, "DocFlavor", "(String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.print", "DocFlavor", True, "getMediaSubtype", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.print", "DocFlavor", True, "getMediaType", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.print", "DocFlavor", True, "getMimeType", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.print", "DocFlavor", True, "getParameter", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.print", "DocFlavor", True, "getRepresentationClassName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.print", "PrintException", True, "PrintException", "(Exception)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.print", "PrintException", True, "PrintException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.print", "PrintException", True, "PrintException", "(String,Exception)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.print", "PrintException", True, "PrintException", "(String,Exception)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.print", "ServiceUI", True, "printDialog", "(GraphicsConfiguration,int,int,PrintService[],PrintService,DocFlavor,PrintRequestAttributeSet)", "", "Argument[3].ArrayElement", "Argument[6]", "taint", "df-generated"] + - ["javax.print", "ServiceUI", True, "printDialog", "(GraphicsConfiguration,int,int,PrintService[],PrintService,DocFlavor,PrintRequestAttributeSet)", "", "Argument[3].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["javax.print", "SimpleDoc", False, "SimpleDoc", "(Object,DocFlavor,DocAttributeSet)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.print", "SimpleDoc", False, "SimpleDoc", "(Object,DocFlavor,DocAttributeSet)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.print", "SimpleDoc", False, "SimpleDoc", "(Object,DocFlavor,DocAttributeSet)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.print", "StreamPrintService", True, "getOutputStream", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["javax.print", "DocFlavor$BYTE_ARRAY", "BYTE_ARRAY", "(String)", "summary", "df-generated"] + - ["javax.print", "DocFlavor$CHAR_ARRAY", "CHAR_ARRAY", "(String)", "summary", "df-generated"] + - ["javax.print", "DocFlavor$INPUT_STREAM", "INPUT_STREAM", "(String)", "summary", "df-generated"] + - ["javax.print", "DocFlavor$READER", "READER", "(String)", "summary", "df-generated"] + - ["javax.print", "DocFlavor$STRING", "STRING", "(String)", "summary", "df-generated"] + - ["javax.print", "DocFlavor$URL", "URL", "(String)", "summary", "df-generated"] + - ["javax.print", "PrintServiceLookup", "getDefaultPrintService", "()", "summary", "df-generated"] + - ["javax.print", "PrintServiceLookup", "getMultiDocPrintServices", "(DocFlavor[],AttributeSet)", "summary", "df-generated"] + - ["javax.print", "PrintServiceLookup", "getPrintServices", "()", "summary", "df-generated"] + - ["javax.print", "PrintServiceLookup", "getPrintServices", "(DocFlavor,AttributeSet)", "summary", "df-generated"] + - ["javax.print", "PrintServiceLookup", "lookupDefaultPrintService", "()", "summary", "df-generated"] + - ["javax.print", "PrintServiceLookup", "lookupMultiDocPrintServices", "(DocFlavor[],AttributeSet)", "summary", "df-generated"] + - ["javax.print", "PrintServiceLookup", "lookupPrintServices", "(DocFlavor,AttributeSet)", "summary", "df-generated"] + - ["javax.print", "PrintServiceLookup", "registerService", "(PrintService)", "summary", "df-generated"] + - ["javax.print", "PrintServiceLookup", "registerServiceProvider", "(PrintServiceLookup)", "summary", "df-generated"] + - ["javax.print", "ServiceUIFactory", "getUI", "(int,String)", "summary", "df-generated"] + - ["javax.print", "ServiceUIFactory", "getUIClassNamesForRole", "(int)", "summary", "df-generated"] + - ["javax.print", "StreamPrintService", "dispose", "()", "summary", "df-generated"] + - ["javax.print", "StreamPrintService", "getOutputFormat", "()", "summary", "df-generated"] + - ["javax.print", "StreamPrintService", "isDisposed", "()", "summary", "df-generated"] + - ["javax.print", "StreamPrintServiceFactory", "getOutputFormat", "()", "summary", "df-generated"] + - ["javax.print", "StreamPrintServiceFactory", "getPrintService", "(OutputStream)", "summary", "df-generated"] + - ["javax.print", "StreamPrintServiceFactory", "getSupportedDocFlavors", "()", "summary", "df-generated"] + - ["javax.print", "StreamPrintServiceFactory", "lookupStreamPrintServiceFactories", "(DocFlavor,String)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.rmi.ssl.model.yml b/java/ql/lib/ext/generated/javax.rmi.ssl.model.yml new file mode 100644 index 00000000000..54e1b150eb9 --- /dev/null +++ b/java/ql/lib/ext/generated/javax.rmi.ssl.model.yml @@ -0,0 +1,18 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.rmi.ssl", "SslRMIServerSocketFactory", True, "SslRMIServerSocketFactory", "(SSLContext,String[],String[],boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.rmi.ssl", "SslRMIServerSocketFactory", True, "SslRMIServerSocketFactory", "(SSLContext,String[],String[],boolean)", "", "Argument[1].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.rmi.ssl", "SslRMIServerSocketFactory", True, "SslRMIServerSocketFactory", "(SSLContext,String[],String[],boolean)", "", "Argument[2].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.rmi.ssl", "SslRMIServerSocketFactory", True, "SslRMIServerSocketFactory", "(String[],String[],boolean)", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.rmi.ssl", "SslRMIServerSocketFactory", True, "SslRMIServerSocketFactory", "(String[],String[],boolean)", "", "Argument[1].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.rmi.ssl", "SslRMIServerSocketFactory", True, "getEnabledCipherSuites", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.rmi.ssl", "SslRMIServerSocketFactory", True, "getEnabledProtocols", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["javax.rmi.ssl", "SslRMIServerSocketFactory", "getNeedClientAuth", "()", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.script.model.yml b/java/ql/lib/ext/generated/javax.script.model.yml new file mode 100644 index 00000000000..6350613b8c4 --- /dev/null +++ b/java/ql/lib/ext/generated/javax.script.model.yml @@ -0,0 +1,66 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.script", "AbstractScriptEngine", True, "AbstractScriptEngine", "(Bindings)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.script", "ScriptContext", True, "getAttribute", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.script", "ScriptContext", True, "getAttribute", "(String,int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.script", "ScriptContext", True, "getBindings", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.script", "ScriptContext", True, "getErrorWriter", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.script", "ScriptContext", True, "getReader", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.script", "ScriptContext", True, "getWriter", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.script", "ScriptContext", True, "removeAttribute", "(String,int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.script", "ScriptContext", True, "setAttribute", "(String,Object,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.script", "ScriptContext", True, "setAttribute", "(String,Object,int)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.script", "ScriptContext", True, "setBindings", "(Bindings,int)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.script", "ScriptContext", True, "setErrorWriter", "(Writer)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.script", "ScriptContext", True, "setReader", "(Reader)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.script", "ScriptContext", True, "setWriter", "(Writer)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.script", "ScriptEngine", True, "get", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.script", "ScriptEngine", True, "getBindings", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.script", "ScriptEngine", True, "getContext", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.script", "ScriptEngine", True, "setBindings", "(Bindings,int)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.script", "ScriptEngine", True, "setContext", "(ScriptContext)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.script", "ScriptEngineManager", True, "get", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.script", "ScriptEngineManager", True, "getBindings", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.script", "ScriptEngineManager", True, "getEngineByExtension", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.script", "ScriptEngineManager", True, "getEngineByMimeType", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.script", "ScriptEngineManager", True, "getEngineByName", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.script", "ScriptEngineManager", True, "getEngineFactories", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.script", "ScriptEngineManager", True, "put", "(String,Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.script", "ScriptEngineManager", True, "put", "(String,Object)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.script", "ScriptEngineManager", True, "registerEngineExtension", "(String,ScriptEngineFactory)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.script", "ScriptEngineManager", True, "registerEngineExtension", "(String,ScriptEngineFactory)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.script", "ScriptEngineManager", True, "registerEngineMimeType", "(String,ScriptEngineFactory)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.script", "ScriptEngineManager", True, "registerEngineMimeType", "(String,ScriptEngineFactory)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.script", "ScriptEngineManager", True, "registerEngineName", "(String,ScriptEngineFactory)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.script", "ScriptEngineManager", True, "registerEngineName", "(String,ScriptEngineFactory)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.script", "ScriptEngineManager", True, "setBindings", "(Bindings)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.script", "ScriptException", True, "ScriptException", "(Exception)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.script", "ScriptException", True, "ScriptException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.script", "ScriptException", True, "ScriptException", "(String,String,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.script", "ScriptException", True, "ScriptException", "(String,String,int)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.script", "ScriptException", True, "ScriptException", "(String,String,int,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.script", "ScriptException", True, "ScriptException", "(String,String,int,int)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.script", "ScriptException", True, "getFileName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.script", "SimpleBindings", True, "SimpleBindings", "(Map)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["javax.script", "CompiledScript", "eval", "()", "summary", "df-generated"] + - ["javax.script", "CompiledScript", "eval", "(Bindings)", "summary", "df-generated"] + - ["javax.script", "CompiledScript", "eval", "(ScriptContext)", "summary", "df-generated"] + - ["javax.script", "CompiledScript", "getEngine", "()", "summary", "df-generated"] + - ["javax.script", "ScriptContext", "getAttributesScope", "(String)", "summary", "df-generated"] + - ["javax.script", "ScriptContext", "getScopes", "()", "summary", "df-generated"] + - ["javax.script", "ScriptEngine", "eval", "(Reader)", "summary", "df-generated"] + - ["javax.script", "ScriptEngine", "eval", "(Reader,Bindings)", "summary", "df-generated"] + - ["javax.script", "ScriptEngine", "eval", "(String)", "summary", "df-generated"] + - ["javax.script", "ScriptEngine", "eval", "(String,Bindings)", "summary", "df-generated"] + - ["javax.script", "ScriptEngine", "put", "(String,Object)", "summary", "df-generated"] + - ["javax.script", "ScriptEngineManager", "ScriptEngineManager", "(ClassLoader)", "summary", "df-generated"] + - ["javax.script", "ScriptException", "getColumnNumber", "()", "summary", "df-generated"] + - ["javax.script", "ScriptException", "getLineNumber", "()", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.security.auth.callback.model.yml b/java/ql/lib/ext/generated/javax.security.auth.callback.model.yml new file mode 100644 index 00000000000..ffb0e36d7b1 --- /dev/null +++ b/java/ql/lib/ext/generated/javax.security.auth.callback.model.yml @@ -0,0 +1,61 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.security.auth.callback", "ChoiceCallback", True, "ChoiceCallback", "(String,String[],int,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.auth.callback", "ChoiceCallback", True, "ChoiceCallback", "(String,String[],int,boolean)", "", "Argument[1].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.security.auth.callback", "ChoiceCallback", True, "getChoices", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.auth.callback", "ChoiceCallback", True, "getPrompt", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.auth.callback", "ConfirmationCallback", True, "ConfirmationCallback", "(String,int,String[],int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.auth.callback", "ConfirmationCallback", True, "ConfirmationCallback", "(String,int,String[],int)", "", "Argument[2].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.security.auth.callback", "ConfirmationCallback", True, "ConfirmationCallback", "(String,int,int,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.auth.callback", "ConfirmationCallback", True, "ConfirmationCallback", "(int,String[],int)", "", "Argument[1].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.security.auth.callback", "ConfirmationCallback", True, "getOptions", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.auth.callback", "ConfirmationCallback", True, "getPrompt", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.auth.callback", "LanguageCallback", True, "getLocale", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.auth.callback", "LanguageCallback", True, "setLocale", "(Locale)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.auth.callback", "NameCallback", True, "NameCallback", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.auth.callback", "NameCallback", True, "NameCallback", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.auth.callback", "NameCallback", True, "NameCallback", "(String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.auth.callback", "NameCallback", True, "getDefaultName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.auth.callback", "NameCallback", True, "getName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.auth.callback", "NameCallback", True, "getPrompt", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.auth.callback", "NameCallback", True, "setName", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.auth.callback", "PasswordCallback", True, "PasswordCallback", "(String,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.auth.callback", "PasswordCallback", True, "getPassword", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.auth.callback", "PasswordCallback", True, "getPrompt", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.auth.callback", "PasswordCallback", True, "setPassword", "(char[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.auth.callback", "TextInputCallback", True, "TextInputCallback", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.auth.callback", "TextInputCallback", True, "TextInputCallback", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.auth.callback", "TextInputCallback", True, "TextInputCallback", "(String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.auth.callback", "TextInputCallback", True, "getDefaultText", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.auth.callback", "TextInputCallback", True, "getPrompt", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.auth.callback", "TextInputCallback", True, "getText", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.auth.callback", "TextInputCallback", True, "setText", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.auth.callback", "TextOutputCallback", True, "TextOutputCallback", "(int,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.auth.callback", "TextOutputCallback", True, "getMessage", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.auth.callback", "UnsupportedCallbackException", True, "UnsupportedCallbackException", "(Callback)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.auth.callback", "UnsupportedCallbackException", True, "UnsupportedCallbackException", "(Callback,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.auth.callback", "UnsupportedCallbackException", True, "UnsupportedCallbackException", "(Callback,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.auth.callback", "UnsupportedCallbackException", True, "getCallback", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["javax.security.auth.callback", "CallbackHandler", "handle", "(Callback[])", "summary", "df-generated"] + - ["javax.security.auth.callback", "ChoiceCallback", "allowMultipleSelections", "()", "summary", "df-generated"] + - ["javax.security.auth.callback", "ChoiceCallback", "getDefaultChoice", "()", "summary", "df-generated"] + - ["javax.security.auth.callback", "ChoiceCallback", "getSelectedIndexes", "()", "summary", "df-generated"] + - ["javax.security.auth.callback", "ChoiceCallback", "setSelectedIndex", "(int)", "summary", "df-generated"] + - ["javax.security.auth.callback", "ChoiceCallback", "setSelectedIndexes", "(int[])", "summary", "df-generated"] + - ["javax.security.auth.callback", "ConfirmationCallback", "ConfirmationCallback", "(int,int,int)", "summary", "df-generated"] + - ["javax.security.auth.callback", "ConfirmationCallback", "getDefaultOption", "()", "summary", "df-generated"] + - ["javax.security.auth.callback", "ConfirmationCallback", "getMessageType", "()", "summary", "df-generated"] + - ["javax.security.auth.callback", "ConfirmationCallback", "getOptionType", "()", "summary", "df-generated"] + - ["javax.security.auth.callback", "ConfirmationCallback", "getSelectedIndex", "()", "summary", "df-generated"] + - ["javax.security.auth.callback", "ConfirmationCallback", "setSelectedIndex", "(int)", "summary", "df-generated"] + - ["javax.security.auth.callback", "PasswordCallback", "clearPassword", "()", "summary", "df-generated"] + - ["javax.security.auth.callback", "PasswordCallback", "isEchoOn", "()", "summary", "df-generated"] + - ["javax.security.auth.callback", "TextOutputCallback", "getMessageType", "()", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.security.auth.kerberos.model.yml b/java/ql/lib/ext/generated/javax.security.auth.kerberos.model.yml new file mode 100644 index 00000000000..8be4b007b84 --- /dev/null +++ b/java/ql/lib/ext/generated/javax.security.auth.kerberos.model.yml @@ -0,0 +1,65 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.security.auth.kerberos", "DelegationPermission", False, "DelegationPermission", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.auth.kerberos", "DelegationPermission", False, "DelegationPermission", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.auth.kerberos", "EncryptionKey", False, "EncryptionKey", "(byte[],int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.auth.kerberos", "KerberosCredMessage", False, "KerberosCredMessage", "(KerberosPrincipal,KerberosPrincipal,byte[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.auth.kerberos", "KerberosCredMessage", False, "KerberosCredMessage", "(KerberosPrincipal,KerberosPrincipal,byte[])", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.auth.kerberos", "KerberosCredMessage", False, "KerberosCredMessage", "(KerberosPrincipal,KerberosPrincipal,byte[])", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.auth.kerberos", "KerberosCredMessage", False, "getEncoded", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.auth.kerberos", "KerberosCredMessage", False, "getRecipient", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.auth.kerberos", "KerberosCredMessage", False, "getSender", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.auth.kerberos", "KerberosKey", True, "KerberosKey", "(KerberosPrincipal,byte[],int,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.auth.kerberos", "KerberosKey", True, "KerberosKey", "(KerberosPrincipal,byte[],int,int)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.auth.kerberos", "KerberosKey", True, "KerberosKey", "(KerberosPrincipal,char[],String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.auth.kerberos", "KerberosKey", True, "getPrincipal", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.auth.kerberos", "KerberosPrincipal", False, "KerberosPrincipal", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.auth.kerberos", "KerberosPrincipal", False, "KerberosPrincipal", "(String,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.auth.kerberos", "KerberosPrincipal", False, "getRealm", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.auth.kerberos", "KerberosTicket", True, "KerberosTicket", "(byte[],KerberosPrincipal,KerberosPrincipal,byte[],int,boolean[],Date,Date,Date,Date,InetAddress[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.auth.kerberos", "KerberosTicket", True, "KerberosTicket", "(byte[],KerberosPrincipal,KerberosPrincipal,byte[],int,boolean[],Date,Date,Date,Date,InetAddress[])", "", "Argument[10].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.security.auth.kerberos", "KerberosTicket", True, "KerberosTicket", "(byte[],KerberosPrincipal,KerberosPrincipal,byte[],int,boolean[],Date,Date,Date,Date,InetAddress[])", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.auth.kerberos", "KerberosTicket", True, "KerberosTicket", "(byte[],KerberosPrincipal,KerberosPrincipal,byte[],int,boolean[],Date,Date,Date,Date,InetAddress[])", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.auth.kerberos", "KerberosTicket", True, "KerberosTicket", "(byte[],KerberosPrincipal,KerberosPrincipal,byte[],int,boolean[],Date,Date,Date,Date,InetAddress[])", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.auth.kerberos", "KerberosTicket", True, "getAuthTime", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.auth.kerberos", "KerberosTicket", True, "getClient", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.auth.kerberos", "KerberosTicket", True, "getClientAddresses", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.auth.kerberos", "KerberosTicket", True, "getEncoded", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.auth.kerberos", "KerberosTicket", True, "getEndTime", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.auth.kerberos", "KerberosTicket", True, "getRenewTill", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.auth.kerberos", "KerberosTicket", True, "getServer", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.auth.kerberos", "KerberosTicket", True, "getSessionKey", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.auth.kerberos", "KerberosTicket", True, "getStartTime", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.auth.kerberos", "KeyTab", False, "getInstance", "(File)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.auth.kerberos", "KeyTab", False, "getInstance", "(KerberosPrincipal)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.auth.kerberos", "KeyTab", False, "getInstance", "(KerberosPrincipal,File)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.auth.kerberos", "KeyTab", False, "getInstance", "(KerberosPrincipal,File)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.auth.kerberos", "KeyTab", False, "getKeys", "(KerberosPrincipal)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.auth.kerberos", "KeyTab", False, "getPrincipal", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.auth.kerberos", "KeyTab", False, "getUnboundInstance", "(File)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.auth.kerberos", "ServicePermission", False, "ServicePermission", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["javax.security.auth.kerberos", "EncryptionKey", "getKeyType", "()", "summary", "df-generated"] + - ["javax.security.auth.kerberos", "KerberosKey", "getKeyType", "()", "summary", "df-generated"] + - ["javax.security.auth.kerberos", "KerberosKey", "getVersionNumber", "()", "summary", "df-generated"] + - ["javax.security.auth.kerberos", "KerberosPrincipal", "getNameType", "()", "summary", "df-generated"] + - ["javax.security.auth.kerberos", "KerberosTicket", "getFlags", "()", "summary", "df-generated"] + - ["javax.security.auth.kerberos", "KerberosTicket", "getSessionKeyType", "()", "summary", "df-generated"] + - ["javax.security.auth.kerberos", "KerberosTicket", "isForwardable", "()", "summary", "df-generated"] + - ["javax.security.auth.kerberos", "KerberosTicket", "isForwarded", "()", "summary", "df-generated"] + - ["javax.security.auth.kerberos", "KerberosTicket", "isInitial", "()", "summary", "df-generated"] + - ["javax.security.auth.kerberos", "KerberosTicket", "isPostdated", "()", "summary", "df-generated"] + - ["javax.security.auth.kerberos", "KerberosTicket", "isProxiable", "()", "summary", "df-generated"] + - ["javax.security.auth.kerberos", "KerberosTicket", "isProxy", "()", "summary", "df-generated"] + - ["javax.security.auth.kerberos", "KerberosTicket", "isRenewable", "()", "summary", "df-generated"] + - ["javax.security.auth.kerberos", "KeyTab", "exists", "()", "summary", "df-generated"] + - ["javax.security.auth.kerberos", "KeyTab", "getInstance", "()", "summary", "df-generated"] + - ["javax.security.auth.kerberos", "KeyTab", "getUnboundInstance", "()", "summary", "df-generated"] + - ["javax.security.auth.kerberos", "KeyTab", "isBound", "()", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.security.auth.login.model.yml b/java/ql/lib/ext/generated/javax.security.auth.login.model.yml new file mode 100644 index 00000000000..1779821afbf --- /dev/null +++ b/java/ql/lib/ext/generated/javax.security.auth.login.model.yml @@ -0,0 +1,50 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.security.auth.login", "AccountException", True, "AccountException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.auth.login", "AccountExpiredException", True, "AccountExpiredException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.auth.login", "AccountLockedException", True, "AccountLockedException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.auth.login", "AccountNotFoundException", True, "AccountNotFoundException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.auth.login", "AppConfigurationEntry", True, "AppConfigurationEntry", "(String,AppConfigurationEntry$LoginModuleControlFlag,Map)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.auth.login", "AppConfigurationEntry", True, "AppConfigurationEntry", "(String,AppConfigurationEntry$LoginModuleControlFlag,Map)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.auth.login", "AppConfigurationEntry", True, "AppConfigurationEntry", "(String,AppConfigurationEntry$LoginModuleControlFlag,Map)", "", "Argument[2].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.security.auth.login", "AppConfigurationEntry", True, "getControlFlag", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.auth.login", "AppConfigurationEntry", True, "getLoginModuleName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.auth.login", "AppConfigurationEntry", True, "getOptions", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.auth.login", "Configuration", True, "getInstance", "(String,Configuration$Parameters)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.auth.login", "Configuration", True, "getInstance", "(String,Configuration$Parameters)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.auth.login", "Configuration", True, "getInstance", "(String,Configuration$Parameters,Provider)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.auth.login", "Configuration", True, "getInstance", "(String,Configuration$Parameters,Provider)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.auth.login", "Configuration", True, "getInstance", "(String,Configuration$Parameters,Provider)", "", "Argument[2].Element", "ReturnValue", "taint", "df-generated"] + - ["javax.security.auth.login", "Configuration", True, "getInstance", "(String,Configuration$Parameters,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.auth.login", "Configuration", True, "getInstance", "(String,Configuration$Parameters,String)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.auth.login", "Configuration", True, "getParameters", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.auth.login", "Configuration", True, "getProvider", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.auth.login", "Configuration", True, "getType", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.auth.login", "CredentialException", True, "CredentialException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.auth.login", "CredentialExpiredException", True, "CredentialExpiredException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.auth.login", "CredentialNotFoundException", True, "CredentialNotFoundException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.auth.login", "FailedLoginException", True, "FailedLoginException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.auth.login", "LoginContext", True, "LoginContext", "(String,CallbackHandler)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.auth.login", "LoginContext", True, "LoginContext", "(String,Subject)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.auth.login", "LoginContext", True, "LoginContext", "(String,Subject,CallbackHandler)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.auth.login", "LoginContext", True, "LoginContext", "(String,Subject,CallbackHandler)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.auth.login", "LoginContext", True, "LoginContext", "(String,Subject,CallbackHandler,Configuration)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.auth.login", "LoginContext", True, "LoginContext", "(String,Subject,CallbackHandler,Configuration)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.auth.login", "LoginContext", True, "LoginContext", "(String,Subject,CallbackHandler,Configuration)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.auth.login", "LoginContext", True, "getSubject", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.auth.login", "LoginException", True, "LoginException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["javax.security.auth.login", "Configuration", "getAppConfigurationEntry", "(String)", "summary", "df-generated"] + - ["javax.security.auth.login", "Configuration", "getConfiguration", "()", "summary", "df-generated"] + - ["javax.security.auth.login", "Configuration", "refresh", "()", "summary", "df-generated"] + - ["javax.security.auth.login", "Configuration", "setConfiguration", "(Configuration)", "summary", "df-generated"] + - ["javax.security.auth.login", "LoginContext", "LoginContext", "(String)", "summary", "df-generated"] + - ["javax.security.auth.login", "LoginContext", "login", "()", "summary", "df-generated"] + - ["javax.security.auth.login", "LoginContext", "logout", "()", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.security.auth.model.yml b/java/ql/lib/ext/generated/javax.security.auth.model.yml new file mode 100644 index 00000000000..435da160deb --- /dev/null +++ b/java/ql/lib/ext/generated/javax.security.auth.model.yml @@ -0,0 +1,37 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.security.auth", "AuthPermission", False, "AuthPermission", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.auth", "AuthPermission", False, "AuthPermission", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.auth", "DestroyFailedException", True, "DestroyFailedException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.auth", "PrivateCredentialPermission", False, "PrivateCredentialPermission", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.auth", "PrivateCredentialPermission", False, "getCredentialClass", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.auth", "PrivateCredentialPermission", False, "getPrincipals", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.auth", "RefreshFailedException", True, "RefreshFailedException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.auth", "Subject", False, "doAs", "(Subject,PrivilegedAction)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.auth", "Subject", False, "doAs", "(Subject,PrivilegedExceptionAction)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.auth", "Subject", False, "doAsPrivileged", "(Subject,PrivilegedAction,AccessControlContext)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.auth", "Subject", False, "doAsPrivileged", "(Subject,PrivilegedExceptionAction,AccessControlContext)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.auth", "Subject", False, "getPrincipals", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.auth", "Subject", False, "getPrivateCredentials", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.auth", "Subject", False, "getPublicCredentials", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.auth", "Subject", False, "getSubject", "(AccessControlContext)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.auth", "SubjectDomainCombiner", True, "SubjectDomainCombiner", "(Subject)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.auth", "SubjectDomainCombiner", True, "getSubject", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["javax.security.auth", "Destroyable", "destroy", "()", "summary", "df-generated"] + - ["javax.security.auth", "Destroyable", "isDestroyed", "()", "summary", "df-generated"] + - ["javax.security.auth", "Refreshable", "isCurrent", "()", "summary", "df-generated"] + - ["javax.security.auth", "Refreshable", "refresh", "()", "summary", "df-generated"] + - ["javax.security.auth", "Subject", "Subject", "(boolean,Set,Set,Set)", "summary", "df-generated"] + - ["javax.security.auth", "Subject", "getPrincipals", "(Class)", "summary", "df-generated"] + - ["javax.security.auth", "Subject", "getPrivateCredentials", "(Class)", "summary", "df-generated"] + - ["javax.security.auth", "Subject", "getPublicCredentials", "(Class)", "summary", "df-generated"] + - ["javax.security.auth", "Subject", "isReadOnly", "()", "summary", "df-generated"] + - ["javax.security.auth", "Subject", "setReadOnly", "()", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.security.auth.x500.model.yml b/java/ql/lib/ext/generated/javax.security.auth.x500.model.yml new file mode 100644 index 00000000000..f2c6e64a21a --- /dev/null +++ b/java/ql/lib/ext/generated/javax.security.auth.x500.model.yml @@ -0,0 +1,27 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.security.auth.x500", "X500Principal", False, "getEncoded", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.auth.x500", "X500Principal", False, "getName", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.auth.x500", "X500Principal", False, "getName", "(String,Map)", "", "Argument[1].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.security.auth.x500", "X500Principal", False, "getName", "(String,Map)", "", "Argument[1].Element", "ReturnValue", "taint", "df-generated"] + - ["javax.security.auth.x500", "X500Principal", False, "getName", "(String,Map)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.auth.x500", "X500PrivateCredential", False, "X500PrivateCredential", "(X509Certificate,PrivateKey)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.auth.x500", "X500PrivateCredential", False, "X500PrivateCredential", "(X509Certificate,PrivateKey)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.auth.x500", "X500PrivateCredential", False, "X500PrivateCredential", "(X509Certificate,PrivateKey,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.auth.x500", "X500PrivateCredential", False, "X500PrivateCredential", "(X509Certificate,PrivateKey,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.auth.x500", "X500PrivateCredential", False, "X500PrivateCredential", "(X509Certificate,PrivateKey,String)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.auth.x500", "X500PrivateCredential", False, "getAlias", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.auth.x500", "X500PrivateCredential", False, "getCertificate", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.auth.x500", "X500PrivateCredential", False, "getPrivateKey", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["javax.security.auth.x500", "X500Principal", "X500Principal", "(InputStream)", "summary", "df-generated"] + - ["javax.security.auth.x500", "X500Principal", "X500Principal", "(String)", "summary", "df-generated"] + - ["javax.security.auth.x500", "X500Principal", "X500Principal", "(String,Map)", "summary", "df-generated"] + - ["javax.security.auth.x500", "X500Principal", "X500Principal", "(byte[])", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.security.cert.model.yml b/java/ql/lib/ext/generated/javax.security.cert.model.yml new file mode 100644 index 00000000000..5b06f3904db --- /dev/null +++ b/java/ql/lib/ext/generated/javax.security.cert.model.yml @@ -0,0 +1,32 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.security.cert", "CertificateEncodingException", True, "CertificateEncodingException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.cert", "CertificateException", True, "CertificateException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.cert", "CertificateExpiredException", True, "CertificateExpiredException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.cert", "CertificateNotYetValidException", True, "CertificateNotYetValidException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.cert", "CertificateParsingException", True, "CertificateParsingException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["javax.security.cert", "Certificate", "getEncoded", "()", "summary", "df-generated"] + - ["javax.security.cert", "Certificate", "getPublicKey", "()", "summary", "df-generated"] + - ["javax.security.cert", "Certificate", "verify", "(PublicKey)", "summary", "df-generated"] + - ["javax.security.cert", "Certificate", "verify", "(PublicKey,String)", "summary", "df-generated"] + - ["javax.security.cert", "X509Certificate", "checkValidity", "()", "summary", "df-generated"] + - ["javax.security.cert", "X509Certificate", "checkValidity", "(Date)", "summary", "df-generated"] + - ["javax.security.cert", "X509Certificate", "getInstance", "(InputStream)", "summary", "df-generated"] + - ["javax.security.cert", "X509Certificate", "getInstance", "(byte[])", "summary", "df-generated"] + - ["javax.security.cert", "X509Certificate", "getIssuerDN", "()", "summary", "df-generated"] + - ["javax.security.cert", "X509Certificate", "getNotAfter", "()", "summary", "df-generated"] + - ["javax.security.cert", "X509Certificate", "getNotBefore", "()", "summary", "df-generated"] + - ["javax.security.cert", "X509Certificate", "getSerialNumber", "()", "summary", "df-generated"] + - ["javax.security.cert", "X509Certificate", "getSigAlgName", "()", "summary", "df-generated"] + - ["javax.security.cert", "X509Certificate", "getSigAlgOID", "()", "summary", "df-generated"] + - ["javax.security.cert", "X509Certificate", "getSigAlgParams", "()", "summary", "df-generated"] + - ["javax.security.cert", "X509Certificate", "getSubjectDN", "()", "summary", "df-generated"] + - ["javax.security.cert", "X509Certificate", "getVersion", "()", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.security.sasl.model.yml b/java/ql/lib/ext/generated/javax.security.sasl.model.yml new file mode 100644 index 00000000000..b2b5c3ac25a --- /dev/null +++ b/java/ql/lib/ext/generated/javax.security.sasl.model.yml @@ -0,0 +1,42 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.security.sasl", "AuthenticationException", True, "AuthenticationException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.sasl", "AuthenticationException", True, "AuthenticationException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.sasl", "AuthenticationException", True, "AuthenticationException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.sasl", "AuthorizeCallback", True, "AuthorizeCallback", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.sasl", "AuthorizeCallback", True, "AuthorizeCallback", "(String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.sasl", "AuthorizeCallback", True, "getAuthenticationID", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.sasl", "AuthorizeCallback", True, "getAuthorizationID", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.sasl", "AuthorizeCallback", True, "getAuthorizedID", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.sasl", "AuthorizeCallback", True, "setAuthorizedID", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.sasl", "RealmCallback", True, "RealmCallback", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.sasl", "RealmCallback", True, "RealmCallback", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.sasl", "RealmCallback", True, "RealmCallback", "(String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.sasl", "RealmChoiceCallback", True, "RealmChoiceCallback", "(String,String[],int,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.sasl", "RealmChoiceCallback", True, "RealmChoiceCallback", "(String,String[],int,boolean)", "", "Argument[1].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.security.sasl", "Sasl", True, "createSaslClient", "(String[],String,String,String,Map,CallbackHandler)", "", "Argument[0].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["javax.security.sasl", "Sasl", True, "createSaslClient", "(String[],String,String,String,Map,CallbackHandler)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.sasl", "Sasl", True, "createSaslClient", "(String[],String,String,String,Map,CallbackHandler)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.sasl", "Sasl", True, "createSaslClient", "(String[],String,String,String,Map,CallbackHandler)", "", "Argument[3]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.sasl", "Sasl", True, "createSaslClient", "(String[],String,String,String,Map,CallbackHandler)", "", "Argument[4].Element", "ReturnValue", "taint", "df-generated"] + - ["javax.security.sasl", "Sasl", True, "createSaslClient", "(String[],String,String,String,Map,CallbackHandler)", "", "Argument[5]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.sasl", "Sasl", True, "createSaslServer", "(String,String,String,Map,CallbackHandler)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.sasl", "Sasl", True, "createSaslServer", "(String,String,String,Map,CallbackHandler)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.sasl", "Sasl", True, "createSaslServer", "(String,String,String,Map,CallbackHandler)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.sasl", "Sasl", True, "createSaslServer", "(String,String,String,Map,CallbackHandler)", "", "Argument[3].Element", "ReturnValue", "taint", "df-generated"] + - ["javax.security.sasl", "Sasl", True, "createSaslServer", "(String,String,String,Map,CallbackHandler)", "", "Argument[4]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.sasl", "SaslException", True, "SaslException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.sasl", "SaslException", True, "SaslException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.sasl", "SaslException", True, "SaslException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["javax.security.sasl", "AuthorizeCallback", "isAuthorized", "()", "summary", "df-generated"] + - ["javax.security.sasl", "AuthorizeCallback", "setAuthorized", "(boolean)", "summary", "df-generated"] + - ["javax.security.sasl", "Sasl", "getSaslClientFactories", "()", "summary", "df-generated"] + - ["javax.security.sasl", "Sasl", "getSaslServerFactories", "()", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.smartcardio.model.yml b/java/ql/lib/ext/generated/javax.smartcardio.model.yml new file mode 100644 index 00000000000..232d7c3fc98 --- /dev/null +++ b/java/ql/lib/ext/generated/javax.smartcardio.model.yml @@ -0,0 +1,78 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.smartcardio", "ATR", False, "ATR", "(byte[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.smartcardio", "ATR", False, "getBytes", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.smartcardio", "ATR", False, "getHistoricalBytes", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.smartcardio", "CardException", True, "CardException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.smartcardio", "CardException", True, "CardException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.smartcardio", "CardException", True, "CardException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.smartcardio", "CardException", True, "CardException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.smartcardio", "CardNotPresentException", True, "CardNotPresentException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.smartcardio", "CardNotPresentException", True, "CardNotPresentException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.smartcardio", "CardNotPresentException", True, "CardNotPresentException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.smartcardio", "CardNotPresentException", True, "CardNotPresentException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.smartcardio", "CardPermission", True, "CardPermission", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.smartcardio", "CommandAPDU", False, "CommandAPDU", "(ByteBuffer)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.smartcardio", "CommandAPDU", False, "CommandAPDU", "(byte[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.smartcardio", "CommandAPDU", False, "CommandAPDU", "(byte[],int,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.smartcardio", "CommandAPDU", False, "CommandAPDU", "(int,int,int,int,byte[])", "", "Argument[4]", "Argument[this]", "taint", "df-generated"] + - ["javax.smartcardio", "CommandAPDU", False, "CommandAPDU", "(int,int,int,int,byte[],int)", "", "Argument[4]", "Argument[this]", "taint", "df-generated"] + - ["javax.smartcardio", "CommandAPDU", False, "CommandAPDU", "(int,int,int,int,byte[],int,int)", "", "Argument[4]", "Argument[this]", "taint", "df-generated"] + - ["javax.smartcardio", "CommandAPDU", False, "CommandAPDU", "(int,int,int,int,byte[],int,int,int)", "", "Argument[4]", "Argument[this]", "taint", "df-generated"] + - ["javax.smartcardio", "CommandAPDU", False, "getBytes", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.smartcardio", "CommandAPDU", False, "getData", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.smartcardio", "ResponseAPDU", False, "ResponseAPDU", "(byte[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.smartcardio", "ResponseAPDU", False, "getBytes", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.smartcardio", "ResponseAPDU", False, "getData", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.smartcardio", "TerminalFactory", False, "getInstance", "(String,Object)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.smartcardio", "TerminalFactory", False, "getInstance", "(String,Object,Provider)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.smartcardio", "TerminalFactory", False, "getInstance", "(String,Object,Provider)", "", "Argument[2].Element", "ReturnValue", "taint", "df-generated"] + - ["javax.smartcardio", "TerminalFactory", False, "getInstance", "(String,Object,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.smartcardio", "TerminalFactory", False, "getProvider", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.smartcardio", "TerminalFactory", False, "getType", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["javax.smartcardio", "Card", "beginExclusive", "()", "summary", "df-generated"] + - ["javax.smartcardio", "Card", "disconnect", "(boolean)", "summary", "df-generated"] + - ["javax.smartcardio", "Card", "endExclusive", "()", "summary", "df-generated"] + - ["javax.smartcardio", "Card", "getATR", "()", "summary", "df-generated"] + - ["javax.smartcardio", "Card", "getBasicChannel", "()", "summary", "df-generated"] + - ["javax.smartcardio", "Card", "getProtocol", "()", "summary", "df-generated"] + - ["javax.smartcardio", "Card", "openLogicalChannel", "()", "summary", "df-generated"] + - ["javax.smartcardio", "Card", "transmitControlCommand", "(int,byte[])", "summary", "df-generated"] + - ["javax.smartcardio", "CardChannel", "close", "()", "summary", "df-generated"] + - ["javax.smartcardio", "CardChannel", "getCard", "()", "summary", "df-generated"] + - ["javax.smartcardio", "CardChannel", "getChannelNumber", "()", "summary", "df-generated"] + - ["javax.smartcardio", "CardChannel", "transmit", "(ByteBuffer,ByteBuffer)", "summary", "df-generated"] + - ["javax.smartcardio", "CardChannel", "transmit", "(CommandAPDU)", "summary", "df-generated"] + - ["javax.smartcardio", "CardTerminal", "connect", "(String)", "summary", "df-generated"] + - ["javax.smartcardio", "CardTerminal", "getName", "()", "summary", "df-generated"] + - ["javax.smartcardio", "CardTerminal", "isCardPresent", "()", "summary", "df-generated"] + - ["javax.smartcardio", "CardTerminal", "waitForCardAbsent", "(long)", "summary", "df-generated"] + - ["javax.smartcardio", "CardTerminal", "waitForCardPresent", "(long)", "summary", "df-generated"] + - ["javax.smartcardio", "CardTerminals", "getTerminal", "(String)", "summary", "df-generated"] + - ["javax.smartcardio", "CardTerminals", "list", "()", "summary", "df-generated"] + - ["javax.smartcardio", "CardTerminals", "list", "(CardTerminals$State)", "summary", "df-generated"] + - ["javax.smartcardio", "CardTerminals", "waitForChange", "()", "summary", "df-generated"] + - ["javax.smartcardio", "CardTerminals", "waitForChange", "(long)", "summary", "df-generated"] + - ["javax.smartcardio", "CommandAPDU", "CommandAPDU", "(int,int,int,int)", "summary", "df-generated"] + - ["javax.smartcardio", "CommandAPDU", "CommandAPDU", "(int,int,int,int,int)", "summary", "df-generated"] + - ["javax.smartcardio", "CommandAPDU", "getCLA", "()", "summary", "df-generated"] + - ["javax.smartcardio", "CommandAPDU", "getINS", "()", "summary", "df-generated"] + - ["javax.smartcardio", "CommandAPDU", "getNc", "()", "summary", "df-generated"] + - ["javax.smartcardio", "CommandAPDU", "getNe", "()", "summary", "df-generated"] + - ["javax.smartcardio", "CommandAPDU", "getP1", "()", "summary", "df-generated"] + - ["javax.smartcardio", "CommandAPDU", "getP2", "()", "summary", "df-generated"] + - ["javax.smartcardio", "ResponseAPDU", "getNr", "()", "summary", "df-generated"] + - ["javax.smartcardio", "ResponseAPDU", "getSW1", "()", "summary", "df-generated"] + - ["javax.smartcardio", "ResponseAPDU", "getSW2", "()", "summary", "df-generated"] + - ["javax.smartcardio", "ResponseAPDU", "getSW", "()", "summary", "df-generated"] + - ["javax.smartcardio", "TerminalFactory", "getDefault", "()", "summary", "df-generated"] + - ["javax.smartcardio", "TerminalFactory", "getDefaultType", "()", "summary", "df-generated"] + - ["javax.smartcardio", "TerminalFactory", "terminals", "()", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.sound.midi.model.yml b/java/ql/lib/ext/generated/javax.sound.midi.model.yml new file mode 100644 index 00000000000..a2cb3589795 --- /dev/null +++ b/java/ql/lib/ext/generated/javax.sound.midi.model.yml @@ -0,0 +1,96 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.sound.midi", "Instrument", True, "getPatch", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.sound.midi", "InvalidMidiDataException", True, "InvalidMidiDataException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.sound.midi", "MetaMessage", True, "MetaMessage", "(int,byte[],int)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.sound.midi", "MetaMessage", True, "getData", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.sound.midi", "MetaMessage", True, "setMessage", "(int,byte[],int)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.sound.midi", "MidiDevice$Info", True, "getDescription", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.sound.midi", "MidiDevice$Info", True, "getName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.sound.midi", "MidiDevice$Info", True, "getVendor", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.sound.midi", "MidiDevice$Info", True, "getVersion", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.sound.midi", "MidiEvent", True, "MidiEvent", "(MidiMessage,long)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.sound.midi", "MidiEvent", True, "getMessage", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.sound.midi", "MidiFileFormat", True, "MidiFileFormat", "(int,float,int,int,long,Map)", "", "Argument[5].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.sound.midi", "MidiFileFormat", True, "getProperty", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.sound.midi", "MidiFileFormat", True, "properties", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.sound.midi", "MidiMessage", True, "getMessage", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.sound.midi", "MidiMessage", True, "setMessage", "(byte[],int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.sound.midi", "MidiSystem", True, "getMidiDevice", "(MidiDevice$Info)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.sound.midi", "MidiSystem", True, "getSoundbank", "(File)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.sound.midi", "MidiSystem", True, "getSoundbank", "(InputStream)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.sound.midi", "MidiUnavailableException", True, "MidiUnavailableException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.sound.midi", "Sequence", True, "getTracks", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.sound.midi", "SoundbankResource", True, "getName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.sound.midi", "SoundbankResource", True, "getSoundbank", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.sound.midi", "SysexMessage", True, "SysexMessage", "(byte[],int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.sound.midi", "SysexMessage", True, "SysexMessage", "(int,byte[],int)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.sound.midi", "SysexMessage", True, "getData", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.sound.midi", "SysexMessage", True, "setMessage", "(int,byte[],int)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.sound.midi", "Track", True, "add", "(MidiEvent)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.sound.midi", "Track", True, "get", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["javax.sound.midi", "MetaMessage", "getType", "()", "summary", "df-generated"] + - ["javax.sound.midi", "MidiEvent", "getTick", "()", "summary", "df-generated"] + - ["javax.sound.midi", "MidiEvent", "setTick", "(long)", "summary", "df-generated"] + - ["javax.sound.midi", "MidiFileFormat", "MidiFileFormat", "(int,float,int,int,long)", "summary", "df-generated"] + - ["javax.sound.midi", "MidiFileFormat", "getByteLength", "()", "summary", "df-generated"] + - ["javax.sound.midi", "MidiFileFormat", "getDivisionType", "()", "summary", "df-generated"] + - ["javax.sound.midi", "MidiFileFormat", "getMicrosecondLength", "()", "summary", "df-generated"] + - ["javax.sound.midi", "MidiFileFormat", "getResolution", "()", "summary", "df-generated"] + - ["javax.sound.midi", "MidiFileFormat", "getType", "()", "summary", "df-generated"] + - ["javax.sound.midi", "MidiMessage", "getLength", "()", "summary", "df-generated"] + - ["javax.sound.midi", "MidiMessage", "getStatus", "()", "summary", "df-generated"] + - ["javax.sound.midi", "MidiSystem", "getMidiDeviceInfo", "()", "summary", "df-generated"] + - ["javax.sound.midi", "MidiSystem", "getMidiFileFormat", "(File)", "summary", "df-generated"] + - ["javax.sound.midi", "MidiSystem", "getMidiFileFormat", "(InputStream)", "summary", "df-generated"] + - ["javax.sound.midi", "MidiSystem", "getMidiFileFormat", "(URL)", "summary", "df-generated"] + - ["javax.sound.midi", "MidiSystem", "getMidiFileTypes", "()", "summary", "df-generated"] + - ["javax.sound.midi", "MidiSystem", "getMidiFileTypes", "(Sequence)", "summary", "df-generated"] + - ["javax.sound.midi", "MidiSystem", "getReceiver", "()", "summary", "df-generated"] + - ["javax.sound.midi", "MidiSystem", "getSequence", "(File)", "summary", "df-generated"] + - ["javax.sound.midi", "MidiSystem", "getSequence", "(InputStream)", "summary", "df-generated"] + - ["javax.sound.midi", "MidiSystem", "getSequence", "(URL)", "summary", "df-generated"] + - ["javax.sound.midi", "MidiSystem", "getSequencer", "()", "summary", "df-generated"] + - ["javax.sound.midi", "MidiSystem", "getSequencer", "(boolean)", "summary", "df-generated"] + - ["javax.sound.midi", "MidiSystem", "getSoundbank", "(URL)", "summary", "df-generated"] + - ["javax.sound.midi", "MidiSystem", "getSynthesizer", "()", "summary", "df-generated"] + - ["javax.sound.midi", "MidiSystem", "getTransmitter", "()", "summary", "df-generated"] + - ["javax.sound.midi", "MidiSystem", "isFileTypeSupported", "(int)", "summary", "df-generated"] + - ["javax.sound.midi", "MidiSystem", "isFileTypeSupported", "(int,Sequence)", "summary", "df-generated"] + - ["javax.sound.midi", "MidiSystem", "write", "(Sequence,int,File)", "summary", "df-generated"] + - ["javax.sound.midi", "MidiSystem", "write", "(Sequence,int,OutputStream)", "summary", "df-generated"] + - ["javax.sound.midi", "Patch", "Patch", "(int,int)", "summary", "df-generated"] + - ["javax.sound.midi", "Patch", "getBank", "()", "summary", "df-generated"] + - ["javax.sound.midi", "Patch", "getProgram", "()", "summary", "df-generated"] + - ["javax.sound.midi", "Sequence", "Sequence", "(float,int)", "summary", "df-generated"] + - ["javax.sound.midi", "Sequence", "Sequence", "(float,int,int)", "summary", "df-generated"] + - ["javax.sound.midi", "Sequence", "createTrack", "()", "summary", "df-generated"] + - ["javax.sound.midi", "Sequence", "deleteTrack", "(Track)", "summary", "df-generated"] + - ["javax.sound.midi", "Sequence", "getDivisionType", "()", "summary", "df-generated"] + - ["javax.sound.midi", "Sequence", "getMicrosecondLength", "()", "summary", "df-generated"] + - ["javax.sound.midi", "Sequence", "getPatchList", "()", "summary", "df-generated"] + - ["javax.sound.midi", "Sequence", "getResolution", "()", "summary", "df-generated"] + - ["javax.sound.midi", "Sequence", "getTickLength", "()", "summary", "df-generated"] + - ["javax.sound.midi", "ShortMessage", "ShortMessage", "(int)", "summary", "df-generated"] + - ["javax.sound.midi", "ShortMessage", "ShortMessage", "(int,int,int)", "summary", "df-generated"] + - ["javax.sound.midi", "ShortMessage", "ShortMessage", "(int,int,int,int)", "summary", "df-generated"] + - ["javax.sound.midi", "ShortMessage", "getChannel", "()", "summary", "df-generated"] + - ["javax.sound.midi", "ShortMessage", "getCommand", "()", "summary", "df-generated"] + - ["javax.sound.midi", "ShortMessage", "getData1", "()", "summary", "df-generated"] + - ["javax.sound.midi", "ShortMessage", "getData2", "()", "summary", "df-generated"] + - ["javax.sound.midi", "ShortMessage", "setMessage", "(int)", "summary", "df-generated"] + - ["javax.sound.midi", "ShortMessage", "setMessage", "(int,int,int)", "summary", "df-generated"] + - ["javax.sound.midi", "ShortMessage", "setMessage", "(int,int,int,int)", "summary", "df-generated"] + - ["javax.sound.midi", "SoundbankResource", "getData", "()", "summary", "df-generated"] + - ["javax.sound.midi", "SoundbankResource", "getDataClass", "()", "summary", "df-generated"] + - ["javax.sound.midi", "Track", "remove", "(MidiEvent)", "summary", "df-generated"] + - ["javax.sound.midi", "Track", "size", "()", "summary", "df-generated"] + - ["javax.sound.midi", "Track", "ticks", "()", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.sound.midi.spi.model.yml b/java/ql/lib/ext/generated/javax.sound.midi.spi.model.yml new file mode 100644 index 00000000000..2012851b25d --- /dev/null +++ b/java/ql/lib/ext/generated/javax.sound.midi.spi.model.yml @@ -0,0 +1,24 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["javax.sound.midi.spi", "MidiDeviceProvider", "getDevice", "(MidiDevice$Info)", "summary", "df-generated"] + - ["javax.sound.midi.spi", "MidiDeviceProvider", "getDeviceInfo", "()", "summary", "df-generated"] + - ["javax.sound.midi.spi", "MidiDeviceProvider", "isDeviceSupported", "(MidiDevice$Info)", "summary", "df-generated"] + - ["javax.sound.midi.spi", "MidiFileReader", "getMidiFileFormat", "(File)", "summary", "df-generated"] + - ["javax.sound.midi.spi", "MidiFileReader", "getMidiFileFormat", "(InputStream)", "summary", "df-generated"] + - ["javax.sound.midi.spi", "MidiFileReader", "getMidiFileFormat", "(URL)", "summary", "df-generated"] + - ["javax.sound.midi.spi", "MidiFileReader", "getSequence", "(File)", "summary", "df-generated"] + - ["javax.sound.midi.spi", "MidiFileReader", "getSequence", "(InputStream)", "summary", "df-generated"] + - ["javax.sound.midi.spi", "MidiFileReader", "getSequence", "(URL)", "summary", "df-generated"] + - ["javax.sound.midi.spi", "MidiFileWriter", "getMidiFileTypes", "()", "summary", "df-generated"] + - ["javax.sound.midi.spi", "MidiFileWriter", "getMidiFileTypes", "(Sequence)", "summary", "df-generated"] + - ["javax.sound.midi.spi", "MidiFileWriter", "isFileTypeSupported", "(int)", "summary", "df-generated"] + - ["javax.sound.midi.spi", "MidiFileWriter", "isFileTypeSupported", "(int,Sequence)", "summary", "df-generated"] + - ["javax.sound.midi.spi", "MidiFileWriter", "write", "(Sequence,int,File)", "summary", "df-generated"] + - ["javax.sound.midi.spi", "MidiFileWriter", "write", "(Sequence,int,OutputStream)", "summary", "df-generated"] + - ["javax.sound.midi.spi", "SoundbankReader", "getSoundbank", "(File)", "summary", "df-generated"] + - ["javax.sound.midi.spi", "SoundbankReader", "getSoundbank", "(InputStream)", "summary", "df-generated"] + - ["javax.sound.midi.spi", "SoundbankReader", "getSoundbank", "(URL)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.sound.sampled.model.yml b/java/ql/lib/ext/generated/javax.sound.sampled.model.yml new file mode 100644 index 00000000000..5721eb3dd21 --- /dev/null +++ b/java/ql/lib/ext/generated/javax.sound.sampled.model.yml @@ -0,0 +1,128 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.sound.sampled", "AudioFileFormat$Type", True, "Type", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.sound.sampled", "AudioFileFormat$Type", True, "Type", "(String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.sound.sampled", "AudioFileFormat$Type", True, "getExtension", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.sound.sampled", "AudioFileFormat", True, "AudioFileFormat", "(AudioFileFormat$Type,AudioFormat,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.sound.sampled", "AudioFileFormat", True, "AudioFileFormat", "(AudioFileFormat$Type,AudioFormat,int)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.sound.sampled", "AudioFileFormat", True, "AudioFileFormat", "(AudioFileFormat$Type,AudioFormat,int,Map)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.sound.sampled", "AudioFileFormat", True, "AudioFileFormat", "(AudioFileFormat$Type,AudioFormat,int,Map)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.sound.sampled", "AudioFileFormat", True, "AudioFileFormat", "(AudioFileFormat$Type,AudioFormat,int,Map)", "", "Argument[3].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.sound.sampled", "AudioFileFormat", True, "getFormat", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.sound.sampled", "AudioFileFormat", True, "getProperty", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.sound.sampled", "AudioFileFormat", True, "getType", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.sound.sampled", "AudioFileFormat", True, "properties", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.sound.sampled", "AudioFormat$Encoding", True, "Encoding", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.sound.sampled", "AudioFormat", True, "AudioFormat", "(AudioFormat$Encoding,float,int,int,int,float,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.sound.sampled", "AudioFormat", True, "AudioFormat", "(AudioFormat$Encoding,float,int,int,int,float,boolean,Map)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.sound.sampled", "AudioFormat", True, "AudioFormat", "(AudioFormat$Encoding,float,int,int,int,float,boolean,Map)", "", "Argument[7].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.sound.sampled", "AudioFormat", True, "getEncoding", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.sound.sampled", "AudioFormat", True, "getProperty", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.sound.sampled", "AudioFormat", True, "properties", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.sound.sampled", "AudioInputStream", True, "AudioInputStream", "(InputStream,AudioFormat,long)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.sound.sampled", "AudioInputStream", True, "AudioInputStream", "(InputStream,AudioFormat,long)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.sound.sampled", "AudioInputStream", True, "AudioInputStream", "(TargetDataLine)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.sound.sampled", "AudioInputStream", True, "getFormat", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.sound.sampled", "AudioPermission", True, "AudioPermission", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.sound.sampled", "AudioPermission", True, "AudioPermission", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.sound.sampled", "AudioSystem", True, "getAudioInputStream", "(AudioFormat$Encoding,AudioInputStream)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.sound.sampled", "AudioSystem", True, "getAudioInputStream", "(AudioFormat$Encoding,AudioInputStream)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.sound.sampled", "AudioSystem", True, "getAudioInputStream", "(AudioFormat,AudioInputStream)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.sound.sampled", "AudioSystem", True, "getAudioInputStream", "(AudioFormat,AudioInputStream)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.sound.sampled", "AudioSystem", True, "getAudioInputStream", "(File)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.sound.sampled", "AudioSystem", True, "getAudioInputStream", "(InputStream)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.sound.sampled", "AudioSystem", True, "getLine", "(Line$Info)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.sound.sampled", "AudioSystem", True, "getSourceDataLine", "(AudioFormat)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.sound.sampled", "AudioSystem", True, "getSourceDataLine", "(AudioFormat,Mixer$Info)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.sound.sampled", "AudioSystem", True, "getTargetDataLine", "(AudioFormat)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.sound.sampled", "AudioSystem", True, "getTargetDataLine", "(AudioFormat,Mixer$Info)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.sound.sampled", "AudioSystem", True, "getTargetEncodings", "(AudioFormat$Encoding)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.sound.sampled", "AudioSystem", True, "getTargetEncodings", "(AudioFormat)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.sound.sampled", "AudioSystem", True, "getTargetFormats", "(AudioFormat$Encoding,AudioFormat)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.sound.sampled", "BooleanControl", True, "getStateLabel", "(boolean)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.sound.sampled", "CompoundControl", True, "getMemberControls", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.sound.sampled", "Control", True, "getType", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.sound.sampled", "DataLine$Info", True, "Info", "(Class,AudioFormat)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.sound.sampled", "DataLine$Info", True, "Info", "(Class,AudioFormat,int)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.sound.sampled", "DataLine$Info", True, "Info", "(Class,AudioFormat[],int,int)", "", "Argument[1].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.sound.sampled", "DataLine$Info", True, "getFormats", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.sound.sampled", "EnumControl", True, "getValue", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.sound.sampled", "EnumControl", True, "getValues", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.sound.sampled", "EnumControl", True, "setValue", "(Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.sound.sampled", "FloatControl", True, "getMaxLabel", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.sound.sampled", "FloatControl", True, "getMidLabel", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.sound.sampled", "FloatControl", True, "getMinLabel", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.sound.sampled", "FloatControl", True, "getUnits", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.sound.sampled", "LineEvent", True, "LineEvent", "(Line,LineEvent$Type,long)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.sound.sampled", "LineEvent", True, "LineEvent", "(Line,LineEvent$Type,long)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.sound.sampled", "LineEvent", True, "getLine", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.sound.sampled", "LineEvent", True, "getType", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.sound.sampled", "LineUnavailableException", True, "LineUnavailableException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.sound.sampled", "Mixer$Info", True, "getDescription", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.sound.sampled", "Mixer$Info", True, "getName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.sound.sampled", "Mixer$Info", True, "getVendor", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.sound.sampled", "Mixer$Info", True, "getVersion", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.sound.sampled", "Port$Info", True, "Info", "(Class,String,boolean)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.sound.sampled", "Port$Info", True, "getName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.sound.sampled", "ReverbType", True, "getName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.sound.sampled", "UnsupportedAudioFileException", True, "UnsupportedAudioFileException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["javax.sound.sampled", "AudioFileFormat", "getByteLength", "()", "summary", "df-generated"] + - ["javax.sound.sampled", "AudioFileFormat", "getFrameLength", "()", "summary", "df-generated"] + - ["javax.sound.sampled", "AudioFormat", "AudioFormat", "(float,int,int,boolean,boolean)", "summary", "df-generated"] + - ["javax.sound.sampled", "AudioFormat", "getChannels", "()", "summary", "df-generated"] + - ["javax.sound.sampled", "AudioFormat", "getFrameRate", "()", "summary", "df-generated"] + - ["javax.sound.sampled", "AudioFormat", "getFrameSize", "()", "summary", "df-generated"] + - ["javax.sound.sampled", "AudioFormat", "getSampleRate", "()", "summary", "df-generated"] + - ["javax.sound.sampled", "AudioFormat", "getSampleSizeInBits", "()", "summary", "df-generated"] + - ["javax.sound.sampled", "AudioFormat", "isBigEndian", "()", "summary", "df-generated"] + - ["javax.sound.sampled", "AudioFormat", "matches", "(AudioFormat)", "summary", "df-generated"] + - ["javax.sound.sampled", "AudioInputStream", "getFrameLength", "()", "summary", "df-generated"] + - ["javax.sound.sampled", "AudioSystem", "getAudioFileFormat", "(File)", "summary", "df-generated"] + - ["javax.sound.sampled", "AudioSystem", "getAudioFileFormat", "(InputStream)", "summary", "df-generated"] + - ["javax.sound.sampled", "AudioSystem", "getAudioFileFormat", "(URL)", "summary", "df-generated"] + - ["javax.sound.sampled", "AudioSystem", "getAudioFileTypes", "()", "summary", "df-generated"] + - ["javax.sound.sampled", "AudioSystem", "getAudioFileTypes", "(AudioInputStream)", "summary", "df-generated"] + - ["javax.sound.sampled", "AudioSystem", "getAudioInputStream", "(URL)", "summary", "df-generated"] + - ["javax.sound.sampled", "AudioSystem", "getClip", "()", "summary", "df-generated"] + - ["javax.sound.sampled", "AudioSystem", "getClip", "(Mixer$Info)", "summary", "df-generated"] + - ["javax.sound.sampled", "AudioSystem", "getMixer", "(Mixer$Info)", "summary", "df-generated"] + - ["javax.sound.sampled", "AudioSystem", "getMixerInfo", "()", "summary", "df-generated"] + - ["javax.sound.sampled", "AudioSystem", "getSourceLineInfo", "(Line$Info)", "summary", "df-generated"] + - ["javax.sound.sampled", "AudioSystem", "getTargetLineInfo", "(Line$Info)", "summary", "df-generated"] + - ["javax.sound.sampled", "AudioSystem", "isConversionSupported", "(AudioFormat$Encoding,AudioFormat)", "summary", "df-generated"] + - ["javax.sound.sampled", "AudioSystem", "isConversionSupported", "(AudioFormat,AudioFormat)", "summary", "df-generated"] + - ["javax.sound.sampled", "AudioSystem", "isFileTypeSupported", "(AudioFileFormat$Type)", "summary", "df-generated"] + - ["javax.sound.sampled", "AudioSystem", "isFileTypeSupported", "(AudioFileFormat$Type,AudioInputStream)", "summary", "df-generated"] + - ["javax.sound.sampled", "AudioSystem", "isLineSupported", "(Line$Info)", "summary", "df-generated"] + - ["javax.sound.sampled", "AudioSystem", "write", "(AudioInputStream,AudioFileFormat$Type,File)", "summary", "df-generated"] + - ["javax.sound.sampled", "AudioSystem", "write", "(AudioInputStream,AudioFileFormat$Type,OutputStream)", "summary", "df-generated"] + - ["javax.sound.sampled", "BooleanControl", "getValue", "()", "summary", "df-generated"] + - ["javax.sound.sampled", "BooleanControl", "setValue", "(boolean)", "summary", "df-generated"] + - ["javax.sound.sampled", "DataLine$Info", "getMaxBufferSize", "()", "summary", "df-generated"] + - ["javax.sound.sampled", "DataLine$Info", "getMinBufferSize", "()", "summary", "df-generated"] + - ["javax.sound.sampled", "DataLine$Info", "isFormatSupported", "(AudioFormat)", "summary", "df-generated"] + - ["javax.sound.sampled", "FloatControl", "getMaximum", "()", "summary", "df-generated"] + - ["javax.sound.sampled", "FloatControl", "getMinimum", "()", "summary", "df-generated"] + - ["javax.sound.sampled", "FloatControl", "getPrecision", "()", "summary", "df-generated"] + - ["javax.sound.sampled", "FloatControl", "getUpdatePeriod", "()", "summary", "df-generated"] + - ["javax.sound.sampled", "FloatControl", "getValue", "()", "summary", "df-generated"] + - ["javax.sound.sampled", "FloatControl", "setValue", "(float)", "summary", "df-generated"] + - ["javax.sound.sampled", "FloatControl", "shift", "(float,float,int)", "summary", "df-generated"] + - ["javax.sound.sampled", "Line$Info", "Info", "(Class)", "summary", "df-generated"] + - ["javax.sound.sampled", "Line$Info", "getLineClass", "()", "summary", "df-generated"] + - ["javax.sound.sampled", "Line$Info", "matches", "(Line$Info)", "summary", "df-generated"] + - ["javax.sound.sampled", "LineEvent", "getFramePosition", "()", "summary", "df-generated"] + - ["javax.sound.sampled", "Port$Info", "isSource", "()", "summary", "df-generated"] + - ["javax.sound.sampled", "ReverbType", "getDecayTime", "()", "summary", "df-generated"] + - ["javax.sound.sampled", "ReverbType", "getEarlyReflectionDelay", "()", "summary", "df-generated"] + - ["javax.sound.sampled", "ReverbType", "getEarlyReflectionIntensity", "()", "summary", "df-generated"] + - ["javax.sound.sampled", "ReverbType", "getLateReflectionDelay", "()", "summary", "df-generated"] + - ["javax.sound.sampled", "ReverbType", "getLateReflectionIntensity", "()", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.sound.sampled.spi.model.yml b/java/ql/lib/ext/generated/javax.sound.sampled.spi.model.yml new file mode 100644 index 00000000000..4fc6de066ef --- /dev/null +++ b/java/ql/lib/ext/generated/javax.sound.sampled.spi.model.yml @@ -0,0 +1,31 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["javax.sound.sampled.spi", "AudioFileReader", "getAudioFileFormat", "(File)", "summary", "df-generated"] + - ["javax.sound.sampled.spi", "AudioFileReader", "getAudioFileFormat", "(InputStream)", "summary", "df-generated"] + - ["javax.sound.sampled.spi", "AudioFileReader", "getAudioFileFormat", "(URL)", "summary", "df-generated"] + - ["javax.sound.sampled.spi", "AudioFileReader", "getAudioInputStream", "(File)", "summary", "df-generated"] + - ["javax.sound.sampled.spi", "AudioFileReader", "getAudioInputStream", "(InputStream)", "summary", "df-generated"] + - ["javax.sound.sampled.spi", "AudioFileReader", "getAudioInputStream", "(URL)", "summary", "df-generated"] + - ["javax.sound.sampled.spi", "AudioFileWriter", "getAudioFileTypes", "()", "summary", "df-generated"] + - ["javax.sound.sampled.spi", "AudioFileWriter", "getAudioFileTypes", "(AudioInputStream)", "summary", "df-generated"] + - ["javax.sound.sampled.spi", "AudioFileWriter", "isFileTypeSupported", "(AudioFileFormat$Type)", "summary", "df-generated"] + - ["javax.sound.sampled.spi", "AudioFileWriter", "isFileTypeSupported", "(AudioFileFormat$Type,AudioInputStream)", "summary", "df-generated"] + - ["javax.sound.sampled.spi", "AudioFileWriter", "write", "(AudioInputStream,AudioFileFormat$Type,File)", "summary", "df-generated"] + - ["javax.sound.sampled.spi", "AudioFileWriter", "write", "(AudioInputStream,AudioFileFormat$Type,OutputStream)", "summary", "df-generated"] + - ["javax.sound.sampled.spi", "FormatConversionProvider", "getAudioInputStream", "(AudioFormat$Encoding,AudioInputStream)", "summary", "df-generated"] + - ["javax.sound.sampled.spi", "FormatConversionProvider", "getAudioInputStream", "(AudioFormat,AudioInputStream)", "summary", "df-generated"] + - ["javax.sound.sampled.spi", "FormatConversionProvider", "getSourceEncodings", "()", "summary", "df-generated"] + - ["javax.sound.sampled.spi", "FormatConversionProvider", "getTargetEncodings", "()", "summary", "df-generated"] + - ["javax.sound.sampled.spi", "FormatConversionProvider", "getTargetEncodings", "(AudioFormat)", "summary", "df-generated"] + - ["javax.sound.sampled.spi", "FormatConversionProvider", "getTargetFormats", "(AudioFormat$Encoding,AudioFormat)", "summary", "df-generated"] + - ["javax.sound.sampled.spi", "FormatConversionProvider", "isConversionSupported", "(AudioFormat$Encoding,AudioFormat)", "summary", "df-generated"] + - ["javax.sound.sampled.spi", "FormatConversionProvider", "isConversionSupported", "(AudioFormat,AudioFormat)", "summary", "df-generated"] + - ["javax.sound.sampled.spi", "FormatConversionProvider", "isSourceEncodingSupported", "(AudioFormat$Encoding)", "summary", "df-generated"] + - ["javax.sound.sampled.spi", "FormatConversionProvider", "isTargetEncodingSupported", "(AudioFormat$Encoding)", "summary", "df-generated"] + - ["javax.sound.sampled.spi", "MixerProvider", "getMixer", "(Mixer$Info)", "summary", "df-generated"] + - ["javax.sound.sampled.spi", "MixerProvider", "getMixerInfo", "()", "summary", "df-generated"] + - ["javax.sound.sampled.spi", "MixerProvider", "isMixerSupported", "(Mixer$Info)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.sql.model.yml b/java/ql/lib/ext/generated/javax.sql.model.yml new file mode 100644 index 00000000000..1e285d91311 --- /dev/null +++ b/java/ql/lib/ext/generated/javax.sql.model.yml @@ -0,0 +1,43 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.sql", "ConnectionEvent", True, "ConnectionEvent", "(PooledConnection)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.sql", "ConnectionEvent", True, "ConnectionEvent", "(PooledConnection,SQLException)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.sql", "ConnectionEvent", True, "ConnectionEvent", "(PooledConnection,SQLException)", "", "Argument[1].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.sql", "ConnectionEvent", True, "getSQLException", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.sql", "RowSetEvent", True, "RowSetEvent", "(RowSet)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.sql", "StatementEvent", True, "StatementEvent", "(PooledConnection,PreparedStatement)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.sql", "StatementEvent", True, "StatementEvent", "(PooledConnection,PreparedStatement)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.sql", "StatementEvent", True, "StatementEvent", "(PooledConnection,PreparedStatement,SQLException)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.sql", "StatementEvent", True, "StatementEvent", "(PooledConnection,PreparedStatement,SQLException)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.sql", "StatementEvent", True, "StatementEvent", "(PooledConnection,PreparedStatement,SQLException)", "", "Argument[2].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.sql", "StatementEvent", True, "getSQLException", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.sql", "StatementEvent", True, "getStatement", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["javax.sql", "CommonDataSource", "createShardingKeyBuilder", "()", "summary", "df-generated"] + - ["javax.sql", "ConnectionPoolDataSource", "createPooledConnectionBuilder", "()", "summary", "df-generated"] + - ["javax.sql", "DataSource", "createConnectionBuilder", "()", "summary", "df-generated"] + - ["javax.sql", "RowSetMetaData", "setAutoIncrement", "(int,boolean)", "summary", "df-generated"] + - ["javax.sql", "RowSetMetaData", "setCaseSensitive", "(int,boolean)", "summary", "df-generated"] + - ["javax.sql", "RowSetMetaData", "setCatalogName", "(int,String)", "summary", "df-generated"] + - ["javax.sql", "RowSetMetaData", "setColumnCount", "(int)", "summary", "df-generated"] + - ["javax.sql", "RowSetMetaData", "setColumnDisplaySize", "(int,int)", "summary", "df-generated"] + - ["javax.sql", "RowSetMetaData", "setColumnLabel", "(int,String)", "summary", "df-generated"] + - ["javax.sql", "RowSetMetaData", "setColumnName", "(int,String)", "summary", "df-generated"] + - ["javax.sql", "RowSetMetaData", "setColumnType", "(int,int)", "summary", "df-generated"] + - ["javax.sql", "RowSetMetaData", "setColumnTypeName", "(int,String)", "summary", "df-generated"] + - ["javax.sql", "RowSetMetaData", "setCurrency", "(int,boolean)", "summary", "df-generated"] + - ["javax.sql", "RowSetMetaData", "setNullable", "(int,int)", "summary", "df-generated"] + - ["javax.sql", "RowSetMetaData", "setPrecision", "(int,int)", "summary", "df-generated"] + - ["javax.sql", "RowSetMetaData", "setScale", "(int,int)", "summary", "df-generated"] + - ["javax.sql", "RowSetMetaData", "setSchemaName", "(int,String)", "summary", "df-generated"] + - ["javax.sql", "RowSetMetaData", "setSearchable", "(int,boolean)", "summary", "df-generated"] + - ["javax.sql", "RowSetMetaData", "setSigned", "(int,boolean)", "summary", "df-generated"] + - ["javax.sql", "RowSetMetaData", "setTableName", "(int,String)", "summary", "df-generated"] + - ["javax.sql", "XADataSource", "createXAConnectionBuilder", "()", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.sql.rowset.model.yml b/java/ql/lib/ext/generated/javax.sql.rowset.model.yml new file mode 100644 index 00000000000..3382f5b2cb2 --- /dev/null +++ b/java/ql/lib/ext/generated/javax.sql.rowset.model.yml @@ -0,0 +1,143 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.sql.rowset", "BaseRowSet", True, "addRowSetListener", "(RowSetListener)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", True, "getCommand", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", True, "getDataSourceName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", True, "getParams", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", True, "getPassword", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", True, "getTypeMap", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", True, "getUrl", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", True, "getUsername", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", True, "setBytes", "(int,byte[])", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", True, "setCommand", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", True, "setDataSourceName", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", True, "setDate", "(int,Date)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", True, "setObject", "(int,Object)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", True, "setPassword", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", True, "setString", "(int,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", True, "setTime", "(int,Time)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", True, "setTimestamp", "(int,Timestamp)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", True, "setTypeMap", "(Map)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", True, "setUrl", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", True, "setUsername", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.sql.rowset", "RowSetProvider", True, "newFactory", "(String,ClassLoader)", "", "Argument[0]", "Argument[1]", "taint", "df-generated"] + - ["javax.sql.rowset", "RowSetWarning", True, "RowSetWarning", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.sql.rowset", "RowSetWarning", True, "RowSetWarning", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.sql.rowset", "RowSetWarning", True, "RowSetWarning", "(String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.sql.rowset", "RowSetWarning", True, "RowSetWarning", "(String,String,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.sql.rowset", "RowSetWarning", True, "RowSetWarning", "(String,String,int)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.sql.rowset", "RowSetWarning", True, "getNextWarning", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["javax.sql.rowset", "BaseRowSet", "clearParameters", "()", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "getConcurrency", "()", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "getEscapeProcessing", "()", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "getFetchDirection", "()", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "getFetchSize", "()", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "getMaxFieldSize", "()", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "getMaxRows", "()", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "getQueryTimeout", "()", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "getShowDeleted", "()", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "getTransactionIsolation", "()", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "getType", "()", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "isReadOnly", "()", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "removeRowSetListener", "(RowSetListener)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setArray", "(int,Array)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setAsciiStream", "(String,InputStream)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setAsciiStream", "(String,InputStream,int)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setAsciiStream", "(int,InputStream)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setAsciiStream", "(int,InputStream,int)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setBigDecimal", "(String,BigDecimal)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setBigDecimal", "(int,BigDecimal)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setBinaryStream", "(String,InputStream)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setBinaryStream", "(String,InputStream,int)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setBinaryStream", "(int,InputStream)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setBinaryStream", "(int,InputStream,int)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setBlob", "(String,Blob)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setBlob", "(String,InputStream)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setBlob", "(String,InputStream,long)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setBlob", "(int,Blob)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setBlob", "(int,InputStream)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setBlob", "(int,InputStream,long)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setBoolean", "(String,boolean)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setBoolean", "(int,boolean)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setByte", "(String,byte)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setByte", "(int,byte)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setBytes", "(String,byte[])", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setCharacterStream", "(String,Reader)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setCharacterStream", "(String,Reader,int)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setCharacterStream", "(int,Reader)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setCharacterStream", "(int,Reader,int)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setClob", "(String,Clob)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setClob", "(String,Reader)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setClob", "(String,Reader,long)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setClob", "(int,Clob)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setClob", "(int,Reader)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setClob", "(int,Reader,long)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setConcurrency", "(int)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setDate", "(String,Date)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setDate", "(String,Date,Calendar)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setDate", "(int,Date,Calendar)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setDouble", "(String,double)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setDouble", "(int,double)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setEscapeProcessing", "(boolean)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setFetchDirection", "(int)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setFetchSize", "(int)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setFloat", "(String,float)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setFloat", "(int,float)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setInt", "(String,int)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setInt", "(int,int)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setLong", "(String,long)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setLong", "(int,long)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setMaxFieldSize", "(int)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setMaxRows", "(int)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setNCharacterStream", "(String,Reader)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setNCharacterStream", "(String,Reader,long)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setNCharacterStream", "(int,Reader)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setNCharacterStream", "(int,Reader,long)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setNClob", "(String,NClob)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setNClob", "(String,Reader)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setNClob", "(String,Reader,long)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setNClob", "(int,NClob)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setNClob", "(int,Reader)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setNClob", "(int,Reader,long)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setNString", "(String,String)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setNString", "(int,String)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setNull", "(String,int)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setNull", "(String,int,String)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setNull", "(int,int)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setNull", "(int,int,String)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setObject", "(String,Object)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setObject", "(String,Object,int)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setObject", "(String,Object,int,int)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setObject", "(int,Object,int)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setObject", "(int,Object,int,int)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setQueryTimeout", "(int)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setReadOnly", "(boolean)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setRef", "(int,Ref)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setRowId", "(String,RowId)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setRowId", "(int,RowId)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setSQLXML", "(String,SQLXML)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setSQLXML", "(int,SQLXML)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setShort", "(String,short)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setShort", "(int,short)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setShowDeleted", "(boolean)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setString", "(String,String)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setTime", "(String,Time)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setTime", "(String,Time,Calendar)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setTime", "(int,Time,Calendar)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setTimestamp", "(String,Timestamp)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setTimestamp", "(String,Timestamp,Calendar)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setTimestamp", "(int,Timestamp,Calendar)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setTransactionIsolation", "(int)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setType", "(int)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setURL", "(int,URL)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setUnicodeStream", "(int,InputStream,int)", "summary", "df-generated"] + - ["javax.sql.rowset", "RowSetProvider", "newFactory", "()", "summary", "df-generated"] + - ["javax.sql.rowset", "RowSetWarning", "setNextWarning", "(RowSetWarning)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.sql.rowset.serial.model.yml b/java/ql/lib/ext/generated/javax.sql.rowset.serial.model.yml new file mode 100644 index 00000000000..f460c159312 --- /dev/null +++ b/java/ql/lib/ext/generated/javax.sql.rowset.serial.model.yml @@ -0,0 +1,29 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.sql.rowset.serial", "SQLInputImpl", True, "SQLInputImpl", "(Object[],Map)", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.sql.rowset.serial", "SQLInputImpl", True, "SQLInputImpl", "(Object[],Map)", "", "Argument[1].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.sql.rowset.serial", "SQLOutputImpl", True, "SQLOutputImpl", "(Vector,Map)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.sql.rowset.serial", "SQLOutputImpl", True, "SQLOutputImpl", "(Vector,Map)", "", "Argument[1].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.sql.rowset.serial", "SerialArray", True, "SerialArray", "(Array)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.sql.rowset.serial", "SerialArray", True, "SerialArray", "(Array,Map)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.sql.rowset.serial", "SerialBlob", True, "SerialBlob", "(Blob)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.sql.rowset.serial", "SerialClob", True, "SerialClob", "(Clob)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.sql.rowset.serial", "SerialDatalink", True, "SerialDatalink", "(URL)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.sql.rowset.serial", "SerialDatalink", True, "getDatalink", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.sql.rowset.serial", "SerialException", True, "SerialException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.sql.rowset.serial", "SerialJavaObject", True, "SerialJavaObject", "(Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.sql.rowset.serial", "SerialJavaObject", True, "getObject", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.sql.rowset.serial", "SerialRef", True, "SerialRef", "(Ref)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.sql.rowset.serial", "SerialStruct", True, "SerialStruct", "(Struct,Map)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["javax.sql.rowset.serial", "SerialBlob", "SerialBlob", "(byte[])", "summary", "df-generated"] + - ["javax.sql.rowset.serial", "SerialClob", "SerialClob", "(char[])", "summary", "df-generated"] + - ["javax.sql.rowset.serial", "SerialJavaObject", "getFields", "()", "summary", "df-generated"] + - ["javax.sql.rowset.serial", "SerialStruct", "SerialStruct", "(SQLData,Map)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.sql.rowset.spi.model.yml b/java/ql/lib/ext/generated/javax.sql.rowset.spi.model.yml new file mode 100644 index 00000000000..4750381cd8c --- /dev/null +++ b/java/ql/lib/ext/generated/javax.sql.rowset.spi.model.yml @@ -0,0 +1,33 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.sql.rowset.spi", "SyncFactory", True, "setLogger", "(Logger,Level)", "", "Argument[1]", "Argument[0]", "taint", "df-generated"] + - ["javax.sql.rowset.spi", "SyncFactoryException", True, "SyncFactoryException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.sql.rowset.spi", "SyncProvider", True, "getProviderID", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.sql.rowset.spi", "SyncProvider", True, "getVendor", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.sql.rowset.spi", "SyncProvider", True, "getVersion", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.sql.rowset.spi", "SyncProviderException", True, "SyncProviderException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.sql.rowset.spi", "SyncProviderException", True, "SyncProviderException", "(SyncResolver)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.sql.rowset.spi", "SyncProviderException", True, "getSyncResolver", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.sql.rowset.spi", "SyncProviderException", True, "setSyncResolver", "(SyncResolver)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["javax.sql.rowset.spi", "SyncFactory", "getInstance", "(String)", "summary", "df-generated"] + - ["javax.sql.rowset.spi", "SyncFactory", "getLogger", "()", "summary", "df-generated"] + - ["javax.sql.rowset.spi", "SyncFactory", "getRegisteredProviders", "()", "summary", "df-generated"] + - ["javax.sql.rowset.spi", "SyncFactory", "getSyncFactory", "()", "summary", "df-generated"] + - ["javax.sql.rowset.spi", "SyncFactory", "registerProvider", "(String)", "summary", "df-generated"] + - ["javax.sql.rowset.spi", "SyncFactory", "setJNDIContext", "(Context)", "summary", "df-generated"] + - ["javax.sql.rowset.spi", "SyncFactory", "setLogger", "(Logger)", "summary", "df-generated"] + - ["javax.sql.rowset.spi", "SyncFactory", "unregisterProvider", "(String)", "summary", "df-generated"] + - ["javax.sql.rowset.spi", "SyncProvider", "getDataSourceLock", "()", "summary", "df-generated"] + - ["javax.sql.rowset.spi", "SyncProvider", "getProviderGrade", "()", "summary", "df-generated"] + - ["javax.sql.rowset.spi", "SyncProvider", "getRowSetReader", "()", "summary", "df-generated"] + - ["javax.sql.rowset.spi", "SyncProvider", "getRowSetWriter", "()", "summary", "df-generated"] + - ["javax.sql.rowset.spi", "SyncProvider", "setDataSourceLock", "(int)", "summary", "df-generated"] + - ["javax.sql.rowset.spi", "SyncProvider", "supportsUpdatableView", "()", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.tools.model.yml b/java/ql/lib/ext/generated/javax.tools.model.yml new file mode 100644 index 00000000000..d68f04440e7 --- /dev/null +++ b/java/ql/lib/ext/generated/javax.tools.model.yml @@ -0,0 +1,68 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.tools", "DiagnosticCollector", False, "getDiagnostics", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.tools", "FileObject", True, "getCharContent", "(boolean)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.tools", "FileObject", True, "getName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.tools", "FileObject", True, "openInputStream", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.tools", "FileObject", True, "openOutputStream", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.tools", "FileObject", True, "openReader", "(boolean)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.tools", "FileObject", True, "openWriter", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.tools", "FileObject", True, "toUri", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.tools", "JavaFileManager", True, "getFileForInput", "(JavaFileManager$Location,String,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.tools", "JavaFileManager", True, "getFileForInput", "(JavaFileManager$Location,String,String)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.tools", "JavaFileManager", True, "getFileForInput", "(JavaFileManager$Location,String,String)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["javax.tools", "JavaFileManager", True, "getFileForOutput", "(JavaFileManager$Location,String,String,FileObject)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.tools", "JavaFileManager", True, "getFileForOutput", "(JavaFileManager$Location,String,String,FileObject)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.tools", "JavaFileManager", True, "getFileForOutput", "(JavaFileManager$Location,String,String,FileObject)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["javax.tools", "JavaFileManager", True, "getFileForOutput", "(JavaFileManager$Location,String,String,FileObject)", "", "Argument[3]", "ReturnValue", "taint", "df-generated"] + - ["javax.tools", "JavaFileManager", True, "getFileForOutput", "(JavaFileManager$Location,String,String,FileObject)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.tools", "JavaFileManager", True, "getJavaFileForInput", "(JavaFileManager$Location,String,JavaFileObject$Kind)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.tools", "JavaFileManager", True, "getJavaFileForInput", "(JavaFileManager$Location,String,JavaFileObject$Kind)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.tools", "JavaFileManager", True, "getJavaFileForOutput", "(JavaFileManager$Location,String,JavaFileObject$Kind,FileObject)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.tools", "JavaFileManager", True, "getJavaFileForOutput", "(JavaFileManager$Location,String,JavaFileObject$Kind,FileObject)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.tools", "JavaFileManager", True, "getJavaFileForOutput", "(JavaFileManager$Location,String,JavaFileObject$Kind,FileObject)", "", "Argument[3]", "ReturnValue", "taint", "df-generated"] + - ["javax.tools", "JavaFileManager", True, "getJavaFileForOutput", "(JavaFileManager$Location,String,JavaFileObject$Kind,FileObject)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.tools", "JavaFileManager", True, "getLocationForModule", "(JavaFileManager$Location,String)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.tools", "JavaFileManager", True, "inferBinaryName", "(JavaFileManager$Location,JavaFileObject)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.tools", "JavaFileManager", True, "inferModuleName", "(JavaFileManager$Location)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.tools", "JavaFileManager", True, "list", "(JavaFileManager$Location,String,Set,boolean)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.tools", "StandardJavaFileManager", True, "getJavaFileObjects", "(Path[])", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.tools", "StandardJavaFileManager", True, "getJavaFileObjectsFromPaths", "(Collection)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.tools", "StandardJavaFileManager", True, "getJavaFileObjectsFromPaths", "(Iterable)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["javax.tools", "StandardJavaFileManager", True, "getJavaFileObjectsFromPaths", "(Iterable)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.tools", "StandardLocation", False, "locationFor", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["javax.tools", "FileObject", "delete", "()", "summary", "df-generated"] + - ["javax.tools", "FileObject", "getLastModified", "()", "summary", "df-generated"] + - ["javax.tools", "JavaFileManager$Location", "getName", "()", "summary", "df-generated"] + - ["javax.tools", "JavaFileManager$Location", "isModuleOrientedLocation", "()", "summary", "df-generated"] + - ["javax.tools", "JavaFileManager$Location", "isOutputLocation", "()", "summary", "df-generated"] + - ["javax.tools", "JavaFileManager", "contains", "(JavaFileManager$Location,FileObject)", "summary", "df-generated"] + - ["javax.tools", "JavaFileManager", "getClassLoader", "(JavaFileManager$Location)", "summary", "df-generated"] + - ["javax.tools", "JavaFileManager", "getLocationForModule", "(JavaFileManager$Location,JavaFileObject)", "summary", "df-generated"] + - ["javax.tools", "JavaFileManager", "getServiceLoader", "(JavaFileManager$Location,Class)", "summary", "df-generated"] + - ["javax.tools", "JavaFileManager", "handleOption", "(String,Iterator)", "summary", "df-generated"] + - ["javax.tools", "JavaFileManager", "hasLocation", "(JavaFileManager$Location)", "summary", "df-generated"] + - ["javax.tools", "JavaFileManager", "isSameFile", "(FileObject,FileObject)", "summary", "df-generated"] + - ["javax.tools", "JavaFileManager", "listLocationsForModules", "(JavaFileManager$Location)", "summary", "df-generated"] + - ["javax.tools", "JavaFileObject", "getAccessLevel", "()", "summary", "df-generated"] + - ["javax.tools", "JavaFileObject", "getKind", "()", "summary", "df-generated"] + - ["javax.tools", "JavaFileObject", "getNestingKind", "()", "summary", "df-generated"] + - ["javax.tools", "JavaFileObject", "isNameCompatible", "(String,JavaFileObject$Kind)", "summary", "df-generated"] + - ["javax.tools", "OptionChecker", "isSupportedOption", "(String)", "summary", "df-generated"] + - ["javax.tools", "StandardJavaFileManager", "asPath", "(FileObject)", "summary", "df-generated"] + - ["javax.tools", "StandardJavaFileManager", "getLocationAsPaths", "(JavaFileManager$Location)", "summary", "df-generated"] + - ["javax.tools", "StandardJavaFileManager", "setLocationForModule", "(JavaFileManager$Location,String,Collection)", "summary", "df-generated"] + - ["javax.tools", "StandardJavaFileManager", "setLocationFromPaths", "(JavaFileManager$Location,Collection)", "summary", "df-generated"] + - ["javax.tools", "StandardJavaFileManager", "setPathFactory", "(StandardJavaFileManager$PathFactory)", "summary", "df-generated"] + - ["javax.tools", "Tool", "name", "()", "summary", "df-generated"] + - ["javax.tools", "ToolProvider", "getSystemDocumentationTool", "()", "summary", "df-generated"] + - ["javax.tools", "ToolProvider", "getSystemJavaCompiler", "()", "summary", "df-generated"] + - ["javax.tools", "ToolProvider", "getSystemToolClassLoader", "()", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.transaction.xa.model.yml b/java/ql/lib/ext/generated/javax.transaction.xa.model.yml new file mode 100644 index 00000000000..ce267904e5d --- /dev/null +++ b/java/ql/lib/ext/generated/javax.transaction.xa.model.yml @@ -0,0 +1,12 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.transaction.xa", "XAException", True, "XAException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["javax.transaction.xa", "XAException", "XAException", "(int)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.xml.catalog.model.yml b/java/ql/lib/ext/generated/javax.xml.catalog.model.yml new file mode 100644 index 00000000000..bdce521147c --- /dev/null +++ b/java/ql/lib/ext/generated/javax.xml.catalog.model.yml @@ -0,0 +1,30 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.xml.catalog", "CatalogException", True, "CatalogException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.catalog", "CatalogException", True, "CatalogException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.catalog", "CatalogException", True, "CatalogException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.catalog", "CatalogFeatures$Builder", True, "with", "(CatalogFeatures$Feature,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.catalog", "CatalogFeatures$Builder", True, "with", "(CatalogFeatures$Feature,String)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["javax.xml.catalog", "CatalogFeatures", True, "get", "(CatalogFeatures$Feature)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.catalog", "CatalogManager", False, "catalog", "(CatalogFeatures,URI[])", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.catalog", "CatalogManager", False, "catalog", "(CatalogFeatures,URI[])", "", "Argument[1].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.catalog", "CatalogManager", False, "catalogResolver", "(Catalog)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.catalog", "CatalogManager", False, "catalogResolver", "(CatalogFeatures,URI[])", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.catalog", "CatalogManager", False, "catalogResolver", "(CatalogFeatures,URI[])", "", "Argument[1].ArrayElement", "ReturnValue", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["javax.xml.catalog", "Catalog", "catalogs", "()", "summary", "df-generated"] + - ["javax.xml.catalog", "CatalogFeatures$Builder", "build", "()", "summary", "df-generated"] + - ["javax.xml.catalog", "CatalogFeatures$Feature", "defaultValue", "()", "summary", "df-generated"] + - ["javax.xml.catalog", "CatalogFeatures$Feature", "getPropertyName", "()", "summary", "df-generated"] + - ["javax.xml.catalog", "CatalogFeatures", "builder", "()", "summary", "df-generated"] + - ["javax.xml.catalog", "CatalogFeatures", "defaults", "()", "summary", "df-generated"] + - ["javax.xml.catalog", "GroupEntry$PreferType", "prefer", "(String)", "summary", "df-generated"] + - ["javax.xml.catalog", "GroupEntry$ResolveType", "getType", "(String)", "summary", "df-generated"] + - ["javax.xml.catalog", "GroupEntry$ResolveType", "isType", "(String)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.xml.crypto.dom.model.yml b/java/ql/lib/ext/generated/javax.xml.crypto.dom.model.yml new file mode 100644 index 00000000000..a2933bbf4c2 --- /dev/null +++ b/java/ql/lib/ext/generated/javax.xml.crypto.dom.model.yml @@ -0,0 +1,11 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.xml.crypto.dom", "DOMCryptoContext", True, "getElementById", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.crypto.dom", "DOMCryptoContext", True, "iterator", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.crypto.dom", "DOMCryptoContext", True, "setIdAttributeNS", "(Element,String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.crypto.dom", "DOMStructure", True, "DOMStructure", "(Node)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.crypto.dom", "DOMStructure", True, "getNode", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.xml.crypto.dsig.dom.model.yml b/java/ql/lib/ext/generated/javax.xml.crypto.dsig.dom.model.yml new file mode 100644 index 00000000000..719eccf3822 --- /dev/null +++ b/java/ql/lib/ext/generated/javax.xml.crypto.dsig.dom.model.yml @@ -0,0 +1,26 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.xml.crypto.dsig.dom", "DOMSignContext", True, "DOMSignContext", "(Key,Node)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.crypto.dsig.dom", "DOMSignContext", True, "DOMSignContext", "(Key,Node)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.crypto.dsig.dom", "DOMSignContext", True, "DOMSignContext", "(Key,Node,Node)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.crypto.dsig.dom", "DOMSignContext", True, "DOMSignContext", "(Key,Node,Node)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.crypto.dsig.dom", "DOMSignContext", True, "DOMSignContext", "(Key,Node,Node)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.crypto.dsig.dom", "DOMSignContext", True, "DOMSignContext", "(KeySelector,Node)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.crypto.dsig.dom", "DOMSignContext", True, "DOMSignContext", "(KeySelector,Node)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.crypto.dsig.dom", "DOMSignContext", True, "DOMSignContext", "(KeySelector,Node,Node)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.crypto.dsig.dom", "DOMSignContext", True, "DOMSignContext", "(KeySelector,Node,Node)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.crypto.dsig.dom", "DOMSignContext", True, "DOMSignContext", "(KeySelector,Node,Node)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.crypto.dsig.dom", "DOMSignContext", True, "getNextSibling", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.crypto.dsig.dom", "DOMSignContext", True, "getParent", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.crypto.dsig.dom", "DOMSignContext", True, "setNextSibling", "(Node)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.crypto.dsig.dom", "DOMSignContext", True, "setParent", "(Node)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.crypto.dsig.dom", "DOMValidateContext", True, "DOMValidateContext", "(Key,Node)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.crypto.dsig.dom", "DOMValidateContext", True, "DOMValidateContext", "(Key,Node)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.crypto.dsig.dom", "DOMValidateContext", True, "DOMValidateContext", "(KeySelector,Node)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.crypto.dsig.dom", "DOMValidateContext", True, "DOMValidateContext", "(KeySelector,Node)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.crypto.dsig.dom", "DOMValidateContext", True, "getNode", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.crypto.dsig.dom", "DOMValidateContext", True, "setNode", "(Node)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.xml.crypto.dsig.keyinfo.model.yml b/java/ql/lib/ext/generated/javax.xml.crypto.dsig.keyinfo.model.yml new file mode 100644 index 00000000000..87e2099b5d0 --- /dev/null +++ b/java/ql/lib/ext/generated/javax.xml.crypto.dsig.keyinfo.model.yml @@ -0,0 +1,31 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.xml.crypto.dsig.keyinfo", "KeyInfoFactory", True, "getInstance", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.crypto.dsig.keyinfo", "KeyInfoFactory", True, "getInstance", "(String,Provider)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.crypto.dsig.keyinfo", "KeyInfoFactory", True, "getInstance", "(String,Provider)", "", "Argument[1].Element", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.crypto.dsig.keyinfo", "KeyInfoFactory", True, "getInstance", "(String,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.crypto.dsig.keyinfo", "KeyInfoFactory", True, "getMechanismType", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.crypto.dsig.keyinfo", "KeyInfoFactory", True, "getProvider", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["javax.xml.crypto.dsig.keyinfo", "KeyInfoFactory", "getInstance", "()", "summary", "df-generated"] + - ["javax.xml.crypto.dsig.keyinfo", "KeyInfoFactory", "getURIDereferencer", "()", "summary", "df-generated"] + - ["javax.xml.crypto.dsig.keyinfo", "KeyInfoFactory", "isFeatureSupported", "(String)", "summary", "df-generated"] + - ["javax.xml.crypto.dsig.keyinfo", "KeyInfoFactory", "newKeyInfo", "(List)", "summary", "df-generated"] + - ["javax.xml.crypto.dsig.keyinfo", "KeyInfoFactory", "newKeyInfo", "(List,String)", "summary", "df-generated"] + - ["javax.xml.crypto.dsig.keyinfo", "KeyInfoFactory", "newKeyName", "(String)", "summary", "df-generated"] + - ["javax.xml.crypto.dsig.keyinfo", "KeyInfoFactory", "newKeyValue", "(PublicKey)", "summary", "df-generated"] + - ["javax.xml.crypto.dsig.keyinfo", "KeyInfoFactory", "newPGPData", "(byte[])", "summary", "df-generated"] + - ["javax.xml.crypto.dsig.keyinfo", "KeyInfoFactory", "newPGPData", "(byte[],List)", "summary", "df-generated"] + - ["javax.xml.crypto.dsig.keyinfo", "KeyInfoFactory", "newPGPData", "(byte[],byte[],List)", "summary", "df-generated"] + - ["javax.xml.crypto.dsig.keyinfo", "KeyInfoFactory", "newRetrievalMethod", "(String)", "summary", "df-generated"] + - ["javax.xml.crypto.dsig.keyinfo", "KeyInfoFactory", "newRetrievalMethod", "(String,String,List)", "summary", "df-generated"] + - ["javax.xml.crypto.dsig.keyinfo", "KeyInfoFactory", "newX509Data", "(List)", "summary", "df-generated"] + - ["javax.xml.crypto.dsig.keyinfo", "KeyInfoFactory", "newX509IssuerSerial", "(String,BigInteger)", "summary", "df-generated"] + - ["javax.xml.crypto.dsig.keyinfo", "KeyInfoFactory", "unmarshalKeyInfo", "(XMLStructure)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.xml.crypto.dsig.model.yml b/java/ql/lib/ext/generated/javax.xml.crypto.dsig.model.yml new file mode 100644 index 00000000000..ced7da4a1cc --- /dev/null +++ b/java/ql/lib/ext/generated/javax.xml.crypto.dsig.model.yml @@ -0,0 +1,61 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.xml.crypto.dsig", "TransformException", True, "TransformException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.crypto.dsig", "TransformException", True, "TransformException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.crypto.dsig", "TransformException", True, "TransformException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.crypto.dsig", "TransformException", True, "TransformException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.crypto.dsig", "TransformService", True, "getInstance", "(String,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.crypto.dsig", "TransformService", True, "getInstance", "(String,String)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.crypto.dsig", "TransformService", True, "getInstance", "(String,String,Provider)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.crypto.dsig", "TransformService", True, "getInstance", "(String,String,Provider)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.crypto.dsig", "TransformService", True, "getInstance", "(String,String,Provider)", "", "Argument[2].Element", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.crypto.dsig", "TransformService", True, "getInstance", "(String,String,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.crypto.dsig", "TransformService", True, "getInstance", "(String,String,String)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.crypto.dsig", "TransformService", True, "getMechanismType", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.crypto.dsig", "TransformService", True, "getProvider", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.crypto.dsig", "XMLSignatureException", True, "XMLSignatureException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.crypto.dsig", "XMLSignatureException", True, "XMLSignatureException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.crypto.dsig", "XMLSignatureException", True, "XMLSignatureException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.crypto.dsig", "XMLSignatureException", True, "XMLSignatureException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.crypto.dsig", "XMLSignatureFactory", True, "getInstance", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.crypto.dsig", "XMLSignatureFactory", True, "getInstance", "(String,Provider)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.crypto.dsig", "XMLSignatureFactory", True, "getInstance", "(String,Provider)", "", "Argument[1].Element", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.crypto.dsig", "XMLSignatureFactory", True, "getInstance", "(String,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.crypto.dsig", "XMLSignatureFactory", True, "getKeyInfoFactory", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.crypto.dsig", "XMLSignatureFactory", True, "getMechanismType", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.crypto.dsig", "XMLSignatureFactory", True, "getProvider", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["javax.xml.crypto.dsig", "TransformService", "init", "(TransformParameterSpec)", "summary", "df-generated"] + - ["javax.xml.crypto.dsig", "TransformService", "init", "(XMLStructure,XMLCryptoContext)", "summary", "df-generated"] + - ["javax.xml.crypto.dsig", "TransformService", "marshalParams", "(XMLStructure,XMLCryptoContext)", "summary", "df-generated"] + - ["javax.xml.crypto.dsig", "XMLSignatureFactory", "getInstance", "()", "summary", "df-generated"] + - ["javax.xml.crypto.dsig", "XMLSignatureFactory", "getURIDereferencer", "()", "summary", "df-generated"] + - ["javax.xml.crypto.dsig", "XMLSignatureFactory", "isFeatureSupported", "(String)", "summary", "df-generated"] + - ["javax.xml.crypto.dsig", "XMLSignatureFactory", "newCanonicalizationMethod", "(String,C14NMethodParameterSpec)", "summary", "df-generated"] + - ["javax.xml.crypto.dsig", "XMLSignatureFactory", "newCanonicalizationMethod", "(String,XMLStructure)", "summary", "df-generated"] + - ["javax.xml.crypto.dsig", "XMLSignatureFactory", "newDigestMethod", "(String,DigestMethodParameterSpec)", "summary", "df-generated"] + - ["javax.xml.crypto.dsig", "XMLSignatureFactory", "newManifest", "(List)", "summary", "df-generated"] + - ["javax.xml.crypto.dsig", "XMLSignatureFactory", "newManifest", "(List,String)", "summary", "df-generated"] + - ["javax.xml.crypto.dsig", "XMLSignatureFactory", "newReference", "(String,DigestMethod)", "summary", "df-generated"] + - ["javax.xml.crypto.dsig", "XMLSignatureFactory", "newReference", "(String,DigestMethod,List,Data,List,String,String)", "summary", "df-generated"] + - ["javax.xml.crypto.dsig", "XMLSignatureFactory", "newReference", "(String,DigestMethod,List,String,String)", "summary", "df-generated"] + - ["javax.xml.crypto.dsig", "XMLSignatureFactory", "newReference", "(String,DigestMethod,List,String,String,byte[])", "summary", "df-generated"] + - ["javax.xml.crypto.dsig", "XMLSignatureFactory", "newSignatureMethod", "(String,SignatureMethodParameterSpec)", "summary", "df-generated"] + - ["javax.xml.crypto.dsig", "XMLSignatureFactory", "newSignatureProperties", "(List,String)", "summary", "df-generated"] + - ["javax.xml.crypto.dsig", "XMLSignatureFactory", "newSignatureProperty", "(List,String,String)", "summary", "df-generated"] + - ["javax.xml.crypto.dsig", "XMLSignatureFactory", "newSignedInfo", "(CanonicalizationMethod,SignatureMethod,List)", "summary", "df-generated"] + - ["javax.xml.crypto.dsig", "XMLSignatureFactory", "newSignedInfo", "(CanonicalizationMethod,SignatureMethod,List,String)", "summary", "df-generated"] + - ["javax.xml.crypto.dsig", "XMLSignatureFactory", "newTransform", "(String,TransformParameterSpec)", "summary", "df-generated"] + - ["javax.xml.crypto.dsig", "XMLSignatureFactory", "newTransform", "(String,XMLStructure)", "summary", "df-generated"] + - ["javax.xml.crypto.dsig", "XMLSignatureFactory", "newXMLObject", "(List,String,String,String)", "summary", "df-generated"] + - ["javax.xml.crypto.dsig", "XMLSignatureFactory", "newXMLSignature", "(SignedInfo,KeyInfo)", "summary", "df-generated"] + - ["javax.xml.crypto.dsig", "XMLSignatureFactory", "newXMLSignature", "(SignedInfo,KeyInfo,List,String,String)", "summary", "df-generated"] + - ["javax.xml.crypto.dsig", "XMLSignatureFactory", "unmarshalXMLSignature", "(XMLStructure)", "summary", "df-generated"] + - ["javax.xml.crypto.dsig", "XMLSignatureFactory", "unmarshalXMLSignature", "(XMLValidateContext)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.xml.crypto.dsig.spec.model.yml b/java/ql/lib/ext/generated/javax.xml.crypto.dsig.spec.model.yml new file mode 100644 index 00000000000..c93065e77e3 --- /dev/null +++ b/java/ql/lib/ext/generated/javax.xml.crypto.dsig.spec.model.yml @@ -0,0 +1,33 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.xml.crypto.dsig.spec", "ExcC14NParameterSpec", False, "ExcC14NParameterSpec", "(List)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.crypto.dsig.spec", "ExcC14NParameterSpec", False, "getPrefixList", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.crypto.dsig.spec", "RSAPSSParameterSpec", False, "RSAPSSParameterSpec", "(PSSParameterSpec)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.crypto.dsig.spec", "RSAPSSParameterSpec", False, "getPSSParameterSpec", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.crypto.dsig.spec", "XPathFilter2ParameterSpec", False, "XPathFilter2ParameterSpec", "(List)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.crypto.dsig.spec", "XPathFilter2ParameterSpec", False, "getXPathList", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.crypto.dsig.spec", "XPathFilterParameterSpec", False, "XPathFilterParameterSpec", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.crypto.dsig.spec", "XPathFilterParameterSpec", False, "XPathFilterParameterSpec", "(String,Map)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.crypto.dsig.spec", "XPathFilterParameterSpec", False, "XPathFilterParameterSpec", "(String,Map)", "", "Argument[1].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.crypto.dsig.spec", "XPathFilterParameterSpec", False, "getNamespaceMap", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.crypto.dsig.spec", "XPathFilterParameterSpec", False, "getXPath", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.crypto.dsig.spec", "XPathType", True, "XPathType", "(String,XPathType$Filter)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.crypto.dsig.spec", "XPathType", True, "XPathType", "(String,XPathType$Filter)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.crypto.dsig.spec", "XPathType", True, "XPathType", "(String,XPathType$Filter,Map)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.crypto.dsig.spec", "XPathType", True, "XPathType", "(String,XPathType$Filter,Map)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.crypto.dsig.spec", "XPathType", True, "XPathType", "(String,XPathType$Filter,Map)", "", "Argument[2].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.crypto.dsig.spec", "XPathType", True, "getExpression", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.crypto.dsig.spec", "XPathType", True, "getFilter", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.crypto.dsig.spec", "XPathType", True, "getNamespaceMap", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.crypto.dsig.spec", "XSLTTransformParameterSpec", False, "XSLTTransformParameterSpec", "(XMLStructure)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.crypto.dsig.spec", "XSLTTransformParameterSpec", False, "getStylesheet", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["javax.xml.crypto.dsig.spec", "HMACParameterSpec", "HMACParameterSpec", "(int)", "summary", "df-generated"] + - ["javax.xml.crypto.dsig.spec", "HMACParameterSpec", "getOutputLength", "()", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.xml.crypto.model.yml b/java/ql/lib/ext/generated/javax.xml.crypto.model.yml new file mode 100644 index 00000000000..ec58522b0ab --- /dev/null +++ b/java/ql/lib/ext/generated/javax.xml.crypto.model.yml @@ -0,0 +1,63 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.xml.crypto", "AlgorithmMethod", True, "getAlgorithm", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.crypto", "KeySelector", True, "singletonKeySelector", "(Key)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.crypto", "KeySelectorException", True, "KeySelectorException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.crypto", "KeySelectorException", True, "KeySelectorException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.crypto", "KeySelectorException", True, "KeySelectorException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.crypto", "KeySelectorException", True, "KeySelectorException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.crypto", "MarshalException", True, "MarshalException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.crypto", "MarshalException", True, "MarshalException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.crypto", "MarshalException", True, "MarshalException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.crypto", "MarshalException", True, "MarshalException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.crypto", "NoSuchMechanismException", True, "NoSuchMechanismException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.crypto", "NoSuchMechanismException", True, "NoSuchMechanismException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.crypto", "NoSuchMechanismException", True, "NoSuchMechanismException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.crypto", "NoSuchMechanismException", True, "NoSuchMechanismException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.crypto", "OctetStreamData", True, "OctetStreamData", "(InputStream)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.crypto", "OctetStreamData", True, "OctetStreamData", "(InputStream,String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.crypto", "OctetStreamData", True, "OctetStreamData", "(InputStream,String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.crypto", "OctetStreamData", True, "OctetStreamData", "(InputStream,String,String)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.crypto", "OctetStreamData", True, "getMimeType", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.crypto", "OctetStreamData", True, "getOctetStream", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.crypto", "OctetStreamData", True, "getURI", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.crypto", "URIReferenceException", True, "URIReferenceException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.crypto", "URIReferenceException", True, "URIReferenceException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.crypto", "URIReferenceException", True, "URIReferenceException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.crypto", "URIReferenceException", True, "URIReferenceException", "(String,Throwable,URIReference)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.crypto", "URIReferenceException", True, "URIReferenceException", "(String,Throwable,URIReference)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.crypto", "URIReferenceException", True, "URIReferenceException", "(String,Throwable,URIReference)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.crypto", "URIReferenceException", True, "URIReferenceException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.crypto", "URIReferenceException", True, "getURIReference", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.crypto", "XMLCryptoContext", True, "get", "(Object)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.crypto", "XMLCryptoContext", True, "getBaseURI", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.crypto", "XMLCryptoContext", True, "getDefaultNamespacePrefix", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.crypto", "XMLCryptoContext", True, "getKeySelector", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.crypto", "XMLCryptoContext", True, "getNamespacePrefix", "(String,String)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.crypto", "XMLCryptoContext", True, "getNamespacePrefix", "(String,String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.crypto", "XMLCryptoContext", True, "getProperty", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.crypto", "XMLCryptoContext", True, "getURIDereferencer", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.crypto", "XMLCryptoContext", True, "put", "(Object,Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.crypto", "XMLCryptoContext", True, "put", "(Object,Object)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.crypto", "XMLCryptoContext", True, "put", "(Object,Object)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.crypto", "XMLCryptoContext", True, "putNamespacePrefix", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.crypto", "XMLCryptoContext", True, "putNamespacePrefix", "(String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.crypto", "XMLCryptoContext", True, "putNamespacePrefix", "(String,String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.crypto", "XMLCryptoContext", True, "setBaseURI", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.crypto", "XMLCryptoContext", True, "setDefaultNamespacePrefix", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.crypto", "XMLCryptoContext", True, "setKeySelector", "(KeySelector)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.crypto", "XMLCryptoContext", True, "setProperty", "(String,Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.crypto", "XMLCryptoContext", True, "setProperty", "(String,Object)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.crypto", "XMLCryptoContext", True, "setProperty", "(String,Object)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.crypto", "XMLCryptoContext", True, "setURIDereferencer", "(URIDereferencer)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["javax.xml.crypto", "KeySelector", "select", "(KeyInfo,KeySelector$Purpose,AlgorithmMethod,XMLCryptoContext)", "summary", "df-generated"] + - ["javax.xml.crypto", "KeySelectorResult", "getKey", "()", "summary", "df-generated"] + - ["javax.xml.crypto", "XMLStructure", "isFeatureSupported", "(String)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.xml.datatype.model.yml b/java/ql/lib/ext/generated/javax.xml.datatype.model.yml new file mode 100644 index 00000000000..ea6d6f45c78 --- /dev/null +++ b/java/ql/lib/ext/generated/javax.xml.datatype.model.yml @@ -0,0 +1,97 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.xml.datatype", "DatatypeConfigurationException", True, "DatatypeConfigurationException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.datatype", "DatatypeConfigurationException", True, "DatatypeConfigurationException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.datatype", "DatatypeConfigurationException", True, "DatatypeConfigurationException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.datatype", "DatatypeConfigurationException", True, "DatatypeConfigurationException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["javax.xml.datatype", "DatatypeConstants$Field", "getId", "()", "summary", "df-generated"] + - ["javax.xml.datatype", "DatatypeFactory", "newDefaultInstance", "()", "summary", "df-generated"] + - ["javax.xml.datatype", "DatatypeFactory", "newDuration", "(String)", "summary", "df-generated"] + - ["javax.xml.datatype", "DatatypeFactory", "newDuration", "(boolean,BigInteger,BigInteger,BigInteger,BigInteger,BigInteger,BigDecimal)", "summary", "df-generated"] + - ["javax.xml.datatype", "DatatypeFactory", "newDuration", "(boolean,int,int,int,int,int,int)", "summary", "df-generated"] + - ["javax.xml.datatype", "DatatypeFactory", "newDuration", "(long)", "summary", "df-generated"] + - ["javax.xml.datatype", "DatatypeFactory", "newDurationDayTime", "(String)", "summary", "df-generated"] + - ["javax.xml.datatype", "DatatypeFactory", "newDurationDayTime", "(boolean,BigInteger,BigInteger,BigInteger,BigInteger)", "summary", "df-generated"] + - ["javax.xml.datatype", "DatatypeFactory", "newDurationDayTime", "(boolean,int,int,int,int)", "summary", "df-generated"] + - ["javax.xml.datatype", "DatatypeFactory", "newDurationDayTime", "(long)", "summary", "df-generated"] + - ["javax.xml.datatype", "DatatypeFactory", "newDurationYearMonth", "(String)", "summary", "df-generated"] + - ["javax.xml.datatype", "DatatypeFactory", "newDurationYearMonth", "(boolean,BigInteger,BigInteger)", "summary", "df-generated"] + - ["javax.xml.datatype", "DatatypeFactory", "newDurationYearMonth", "(boolean,int,int)", "summary", "df-generated"] + - ["javax.xml.datatype", "DatatypeFactory", "newDurationYearMonth", "(long)", "summary", "df-generated"] + - ["javax.xml.datatype", "DatatypeFactory", "newInstance", "()", "summary", "df-generated"] + - ["javax.xml.datatype", "DatatypeFactory", "newInstance", "(String,ClassLoader)", "summary", "df-generated"] + - ["javax.xml.datatype", "DatatypeFactory", "newXMLGregorianCalendar", "()", "summary", "df-generated"] + - ["javax.xml.datatype", "DatatypeFactory", "newXMLGregorianCalendar", "(BigInteger,int,int,int,int,int,BigDecimal,int)", "summary", "df-generated"] + - ["javax.xml.datatype", "DatatypeFactory", "newXMLGregorianCalendar", "(GregorianCalendar)", "summary", "df-generated"] + - ["javax.xml.datatype", "DatatypeFactory", "newXMLGregorianCalendar", "(String)", "summary", "df-generated"] + - ["javax.xml.datatype", "DatatypeFactory", "newXMLGregorianCalendar", "(int,int,int,int,int,int,int,int)", "summary", "df-generated"] + - ["javax.xml.datatype", "DatatypeFactory", "newXMLGregorianCalendarDate", "(int,int,int,int)", "summary", "df-generated"] + - ["javax.xml.datatype", "DatatypeFactory", "newXMLGregorianCalendarTime", "(int,int,int,BigDecimal,int)", "summary", "df-generated"] + - ["javax.xml.datatype", "DatatypeFactory", "newXMLGregorianCalendarTime", "(int,int,int,int)", "summary", "df-generated"] + - ["javax.xml.datatype", "DatatypeFactory", "newXMLGregorianCalendarTime", "(int,int,int,int,int)", "summary", "df-generated"] + - ["javax.xml.datatype", "Duration", "add", "(Duration)", "summary", "df-generated"] + - ["javax.xml.datatype", "Duration", "addTo", "(Calendar)", "summary", "df-generated"] + - ["javax.xml.datatype", "Duration", "addTo", "(Date)", "summary", "df-generated"] + - ["javax.xml.datatype", "Duration", "compare", "(Duration)", "summary", "df-generated"] + - ["javax.xml.datatype", "Duration", "getDays", "()", "summary", "df-generated"] + - ["javax.xml.datatype", "Duration", "getField", "(DatatypeConstants$Field)", "summary", "df-generated"] + - ["javax.xml.datatype", "Duration", "getHours", "()", "summary", "df-generated"] + - ["javax.xml.datatype", "Duration", "getMinutes", "()", "summary", "df-generated"] + - ["javax.xml.datatype", "Duration", "getMonths", "()", "summary", "df-generated"] + - ["javax.xml.datatype", "Duration", "getSeconds", "()", "summary", "df-generated"] + - ["javax.xml.datatype", "Duration", "getSign", "()", "summary", "df-generated"] + - ["javax.xml.datatype", "Duration", "getTimeInMillis", "(Calendar)", "summary", "df-generated"] + - ["javax.xml.datatype", "Duration", "getTimeInMillis", "(Date)", "summary", "df-generated"] + - ["javax.xml.datatype", "Duration", "getXMLSchemaType", "()", "summary", "df-generated"] + - ["javax.xml.datatype", "Duration", "getYears", "()", "summary", "df-generated"] + - ["javax.xml.datatype", "Duration", "isLongerThan", "(Duration)", "summary", "df-generated"] + - ["javax.xml.datatype", "Duration", "isSet", "(DatatypeConstants$Field)", "summary", "df-generated"] + - ["javax.xml.datatype", "Duration", "isShorterThan", "(Duration)", "summary", "df-generated"] + - ["javax.xml.datatype", "Duration", "multiply", "(BigDecimal)", "summary", "df-generated"] + - ["javax.xml.datatype", "Duration", "multiply", "(int)", "summary", "df-generated"] + - ["javax.xml.datatype", "Duration", "negate", "()", "summary", "df-generated"] + - ["javax.xml.datatype", "Duration", "normalizeWith", "(Calendar)", "summary", "df-generated"] + - ["javax.xml.datatype", "Duration", "subtract", "(Duration)", "summary", "df-generated"] + - ["javax.xml.datatype", "XMLGregorianCalendar", "add", "(Duration)", "summary", "df-generated"] + - ["javax.xml.datatype", "XMLGregorianCalendar", "clear", "()", "summary", "df-generated"] + - ["javax.xml.datatype", "XMLGregorianCalendar", "compare", "(XMLGregorianCalendar)", "summary", "df-generated"] + - ["javax.xml.datatype", "XMLGregorianCalendar", "getDay", "()", "summary", "df-generated"] + - ["javax.xml.datatype", "XMLGregorianCalendar", "getEon", "()", "summary", "df-generated"] + - ["javax.xml.datatype", "XMLGregorianCalendar", "getEonAndYear", "()", "summary", "df-generated"] + - ["javax.xml.datatype", "XMLGregorianCalendar", "getFractionalSecond", "()", "summary", "df-generated"] + - ["javax.xml.datatype", "XMLGregorianCalendar", "getHour", "()", "summary", "df-generated"] + - ["javax.xml.datatype", "XMLGregorianCalendar", "getMillisecond", "()", "summary", "df-generated"] + - ["javax.xml.datatype", "XMLGregorianCalendar", "getMinute", "()", "summary", "df-generated"] + - ["javax.xml.datatype", "XMLGregorianCalendar", "getMonth", "()", "summary", "df-generated"] + - ["javax.xml.datatype", "XMLGregorianCalendar", "getSecond", "()", "summary", "df-generated"] + - ["javax.xml.datatype", "XMLGregorianCalendar", "getTimeZone", "(int)", "summary", "df-generated"] + - ["javax.xml.datatype", "XMLGregorianCalendar", "getTimezone", "()", "summary", "df-generated"] + - ["javax.xml.datatype", "XMLGregorianCalendar", "getXMLSchemaType", "()", "summary", "df-generated"] + - ["javax.xml.datatype", "XMLGregorianCalendar", "getYear", "()", "summary", "df-generated"] + - ["javax.xml.datatype", "XMLGregorianCalendar", "isValid", "()", "summary", "df-generated"] + - ["javax.xml.datatype", "XMLGregorianCalendar", "normalize", "()", "summary", "df-generated"] + - ["javax.xml.datatype", "XMLGregorianCalendar", "reset", "()", "summary", "df-generated"] + - ["javax.xml.datatype", "XMLGregorianCalendar", "setDay", "(int)", "summary", "df-generated"] + - ["javax.xml.datatype", "XMLGregorianCalendar", "setFractionalSecond", "(BigDecimal)", "summary", "df-generated"] + - ["javax.xml.datatype", "XMLGregorianCalendar", "setHour", "(int)", "summary", "df-generated"] + - ["javax.xml.datatype", "XMLGregorianCalendar", "setMillisecond", "(int)", "summary", "df-generated"] + - ["javax.xml.datatype", "XMLGregorianCalendar", "setMinute", "(int)", "summary", "df-generated"] + - ["javax.xml.datatype", "XMLGregorianCalendar", "setMonth", "(int)", "summary", "df-generated"] + - ["javax.xml.datatype", "XMLGregorianCalendar", "setSecond", "(int)", "summary", "df-generated"] + - ["javax.xml.datatype", "XMLGregorianCalendar", "setTime", "(int,int,int)", "summary", "df-generated"] + - ["javax.xml.datatype", "XMLGregorianCalendar", "setTime", "(int,int,int,BigDecimal)", "summary", "df-generated"] + - ["javax.xml.datatype", "XMLGregorianCalendar", "setTime", "(int,int,int,int)", "summary", "df-generated"] + - ["javax.xml.datatype", "XMLGregorianCalendar", "setTimezone", "(int)", "summary", "df-generated"] + - ["javax.xml.datatype", "XMLGregorianCalendar", "setYear", "(BigInteger)", "summary", "df-generated"] + - ["javax.xml.datatype", "XMLGregorianCalendar", "setYear", "(int)", "summary", "df-generated"] + - ["javax.xml.datatype", "XMLGregorianCalendar", "toGregorianCalendar", "()", "summary", "df-generated"] + - ["javax.xml.datatype", "XMLGregorianCalendar", "toGregorianCalendar", "(TimeZone,Locale,XMLGregorianCalendar)", "summary", "df-generated"] + - ["javax.xml.datatype", "XMLGregorianCalendar", "toXMLFormat", "()", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.xml.namespace.model.yml b/java/ql/lib/ext/generated/javax.xml.namespace.model.yml new file mode 100644 index 00000000000..452e79f45bd --- /dev/null +++ b/java/ql/lib/ext/generated/javax.xml.namespace.model.yml @@ -0,0 +1,16 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.xml.namespace", "QName", True, "QName", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.namespace", "QName", True, "QName", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.namespace", "QName", True, "QName", "(String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.namespace", "QName", True, "QName", "(String,String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.namespace", "QName", True, "QName", "(String,String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.namespace", "QName", True, "QName", "(String,String,String)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.namespace", "QName", True, "getLocalPart", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.namespace", "QName", True, "getNamespaceURI", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.namespace", "QName", True, "getPrefix", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.namespace", "QName", True, "valueOf", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.xml.parsers.model.yml b/java/ql/lib/ext/generated/javax.xml.parsers.model.yml new file mode 100644 index 00000000000..885b668c180 --- /dev/null +++ b/java/ql/lib/ext/generated/javax.xml.parsers.model.yml @@ -0,0 +1,93 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.xml.parsers", "DocumentBuilder", True, "parse", "(File)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.parsers", "DocumentBuilder", True, "parse", "(InputStream)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.parsers", "DocumentBuilder", True, "parse", "(InputStream,String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.parsers", "DocumentBuilder", True, "parse", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.parsers", "FactoryConfigurationError", True, "FactoryConfigurationError", "(Exception)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.parsers", "FactoryConfigurationError", True, "FactoryConfigurationError", "(Exception,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.parsers", "FactoryConfigurationError", True, "FactoryConfigurationError", "(Exception,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.parsers", "FactoryConfigurationError", True, "FactoryConfigurationError", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.parsers", "FactoryConfigurationError", True, "getException", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.parsers", "ParserConfigurationException", True, "ParserConfigurationException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.parsers", "SAXParser", True, "parse", "(File,DefaultHandler)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.parsers", "SAXParser", True, "parse", "(File,HandlerBase)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.parsers", "SAXParser", True, "parse", "(InputStream,DefaultHandler)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.parsers", "SAXParser", True, "parse", "(InputStream,DefaultHandler,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.parsers", "SAXParser", True, "parse", "(InputStream,HandlerBase)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.parsers", "SAXParser", True, "parse", "(InputStream,HandlerBase,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.parsers", "SAXParser", True, "parse", "(String,DefaultHandler)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.parsers", "SAXParser", True, "parse", "(String,HandlerBase)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["javax.xml.parsers", "DocumentBuilder", "getDOMImplementation", "()", "summary", "df-generated"] + - ["javax.xml.parsers", "DocumentBuilder", "getSchema", "()", "summary", "df-generated"] + - ["javax.xml.parsers", "DocumentBuilder", "isNamespaceAware", "()", "summary", "df-generated"] + - ["javax.xml.parsers", "DocumentBuilder", "isValidating", "()", "summary", "df-generated"] + - ["javax.xml.parsers", "DocumentBuilder", "isXIncludeAware", "()", "summary", "df-generated"] + - ["javax.xml.parsers", "DocumentBuilder", "newDocument", "()", "summary", "df-generated"] + - ["javax.xml.parsers", "DocumentBuilder", "parse", "(InputSource)", "summary", "df-generated"] + - ["javax.xml.parsers", "DocumentBuilder", "reset", "()", "summary", "df-generated"] + - ["javax.xml.parsers", "DocumentBuilder", "setEntityResolver", "(EntityResolver)", "summary", "df-generated"] + - ["javax.xml.parsers", "DocumentBuilder", "setErrorHandler", "(ErrorHandler)", "summary", "df-generated"] + - ["javax.xml.parsers", "DocumentBuilderFactory", "getAttribute", "(String)", "summary", "df-generated"] + - ["javax.xml.parsers", "DocumentBuilderFactory", "getFeature", "(String)", "summary", "df-generated"] + - ["javax.xml.parsers", "DocumentBuilderFactory", "getSchema", "()", "summary", "df-generated"] + - ["javax.xml.parsers", "DocumentBuilderFactory", "isCoalescing", "()", "summary", "df-generated"] + - ["javax.xml.parsers", "DocumentBuilderFactory", "isExpandEntityReferences", "()", "summary", "df-generated"] + - ["javax.xml.parsers", "DocumentBuilderFactory", "isIgnoringComments", "()", "summary", "df-generated"] + - ["javax.xml.parsers", "DocumentBuilderFactory", "isIgnoringElementContentWhitespace", "()", "summary", "df-generated"] + - ["javax.xml.parsers", "DocumentBuilderFactory", "isNamespaceAware", "()", "summary", "df-generated"] + - ["javax.xml.parsers", "DocumentBuilderFactory", "isValidating", "()", "summary", "df-generated"] + - ["javax.xml.parsers", "DocumentBuilderFactory", "isXIncludeAware", "()", "summary", "df-generated"] + - ["javax.xml.parsers", "DocumentBuilderFactory", "newDefaultInstance", "()", "summary", "df-generated"] + - ["javax.xml.parsers", "DocumentBuilderFactory", "newDefaultNSInstance", "()", "summary", "df-generated"] + - ["javax.xml.parsers", "DocumentBuilderFactory", "newDocumentBuilder", "()", "summary", "df-generated"] + - ["javax.xml.parsers", "DocumentBuilderFactory", "newInstance", "()", "summary", "df-generated"] + - ["javax.xml.parsers", "DocumentBuilderFactory", "newInstance", "(String,ClassLoader)", "summary", "df-generated"] + - ["javax.xml.parsers", "DocumentBuilderFactory", "newNSInstance", "()", "summary", "df-generated"] + - ["javax.xml.parsers", "DocumentBuilderFactory", "newNSInstance", "(String,ClassLoader)", "summary", "df-generated"] + - ["javax.xml.parsers", "DocumentBuilderFactory", "setAttribute", "(String,Object)", "summary", "df-generated"] + - ["javax.xml.parsers", "DocumentBuilderFactory", "setCoalescing", "(boolean)", "summary", "df-generated"] + - ["javax.xml.parsers", "DocumentBuilderFactory", "setExpandEntityReferences", "(boolean)", "summary", "df-generated"] + - ["javax.xml.parsers", "DocumentBuilderFactory", "setFeature", "(String,boolean)", "summary", "df-generated"] + - ["javax.xml.parsers", "DocumentBuilderFactory", "setIgnoringComments", "(boolean)", "summary", "df-generated"] + - ["javax.xml.parsers", "DocumentBuilderFactory", "setIgnoringElementContentWhitespace", "(boolean)", "summary", "df-generated"] + - ["javax.xml.parsers", "DocumentBuilderFactory", "setNamespaceAware", "(boolean)", "summary", "df-generated"] + - ["javax.xml.parsers", "DocumentBuilderFactory", "setSchema", "(Schema)", "summary", "df-generated"] + - ["javax.xml.parsers", "DocumentBuilderFactory", "setValidating", "(boolean)", "summary", "df-generated"] + - ["javax.xml.parsers", "DocumentBuilderFactory", "setXIncludeAware", "(boolean)", "summary", "df-generated"] + - ["javax.xml.parsers", "SAXParser", "getParser", "()", "summary", "df-generated"] + - ["javax.xml.parsers", "SAXParser", "getProperty", "(String)", "summary", "df-generated"] + - ["javax.xml.parsers", "SAXParser", "getSchema", "()", "summary", "df-generated"] + - ["javax.xml.parsers", "SAXParser", "getXMLReader", "()", "summary", "df-generated"] + - ["javax.xml.parsers", "SAXParser", "isNamespaceAware", "()", "summary", "df-generated"] + - ["javax.xml.parsers", "SAXParser", "isValidating", "()", "summary", "df-generated"] + - ["javax.xml.parsers", "SAXParser", "isXIncludeAware", "()", "summary", "df-generated"] + - ["javax.xml.parsers", "SAXParser", "parse", "(InputSource,DefaultHandler)", "summary", "df-generated"] + - ["javax.xml.parsers", "SAXParser", "parse", "(InputSource,HandlerBase)", "summary", "df-generated"] + - ["javax.xml.parsers", "SAXParser", "reset", "()", "summary", "df-generated"] + - ["javax.xml.parsers", "SAXParser", "setProperty", "(String,Object)", "summary", "df-generated"] + - ["javax.xml.parsers", "SAXParserFactory", "getFeature", "(String)", "summary", "df-generated"] + - ["javax.xml.parsers", "SAXParserFactory", "getSchema", "()", "summary", "df-generated"] + - ["javax.xml.parsers", "SAXParserFactory", "isNamespaceAware", "()", "summary", "df-generated"] + - ["javax.xml.parsers", "SAXParserFactory", "isValidating", "()", "summary", "df-generated"] + - ["javax.xml.parsers", "SAXParserFactory", "isXIncludeAware", "()", "summary", "df-generated"] + - ["javax.xml.parsers", "SAXParserFactory", "newDefaultInstance", "()", "summary", "df-generated"] + - ["javax.xml.parsers", "SAXParserFactory", "newDefaultNSInstance", "()", "summary", "df-generated"] + - ["javax.xml.parsers", "SAXParserFactory", "newInstance", "()", "summary", "df-generated"] + - ["javax.xml.parsers", "SAXParserFactory", "newInstance", "(String,ClassLoader)", "summary", "df-generated"] + - ["javax.xml.parsers", "SAXParserFactory", "newNSInstance", "()", "summary", "df-generated"] + - ["javax.xml.parsers", "SAXParserFactory", "newNSInstance", "(String,ClassLoader)", "summary", "df-generated"] + - ["javax.xml.parsers", "SAXParserFactory", "newSAXParser", "()", "summary", "df-generated"] + - ["javax.xml.parsers", "SAXParserFactory", "setFeature", "(String,boolean)", "summary", "df-generated"] + - ["javax.xml.parsers", "SAXParserFactory", "setNamespaceAware", "(boolean)", "summary", "df-generated"] + - ["javax.xml.parsers", "SAXParserFactory", "setSchema", "(Schema)", "summary", "df-generated"] + - ["javax.xml.parsers", "SAXParserFactory", "setValidating", "(boolean)", "summary", "df-generated"] + - ["javax.xml.parsers", "SAXParserFactory", "setXIncludeAware", "(boolean)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.xml.stream.model.yml b/java/ql/lib/ext/generated/javax.xml.stream.model.yml new file mode 100644 index 00000000000..86ce369cf51 --- /dev/null +++ b/java/ql/lib/ext/generated/javax.xml.stream.model.yml @@ -0,0 +1,156 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.xml.stream", "FactoryConfigurationError", True, "FactoryConfigurationError", "(Exception)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.stream", "FactoryConfigurationError", True, "FactoryConfigurationError", "(Exception,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.stream", "FactoryConfigurationError", True, "FactoryConfigurationError", "(Exception,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.stream", "FactoryConfigurationError", True, "FactoryConfigurationError", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.stream", "FactoryConfigurationError", True, "FactoryConfigurationError", "(String,Exception)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.stream", "FactoryConfigurationError", True, "FactoryConfigurationError", "(String,Exception)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.stream", "FactoryConfigurationError", True, "getException", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.stream", "XMLEventFactory", True, "newFactory", "(String,ClassLoader)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.stream", "XMLEventFactory", True, "newInstance", "(String,ClassLoader)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.stream", "XMLEventReader", True, "nextEvent", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.stream", "XMLEventReader", True, "nextTag", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.stream", "XMLEventReader", True, "peek", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.stream", "XMLInputFactory", True, "newFactory", "(String,ClassLoader)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.stream", "XMLInputFactory", True, "newInstance", "(String,ClassLoader)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.stream", "XMLOutputFactory", True, "newFactory", "(String,ClassLoader)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.stream", "XMLOutputFactory", True, "newInstance", "(String,ClassLoader)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.stream", "XMLStreamException", True, "XMLStreamException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.stream", "XMLStreamException", True, "XMLStreamException", "(String,Location)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.stream", "XMLStreamException", True, "XMLStreamException", "(String,Location)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.stream", "XMLStreamException", True, "XMLStreamException", "(String,Location,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.stream", "XMLStreamException", True, "XMLStreamException", "(String,Location,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.stream", "XMLStreamException", True, "XMLStreamException", "(String,Location,Throwable)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.stream", "XMLStreamException", True, "XMLStreamException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.stream", "XMLStreamException", True, "XMLStreamException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.stream", "XMLStreamException", True, "XMLStreamException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.stream", "XMLStreamException", True, "getLocation", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.stream", "XMLStreamException", True, "getNestedException", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.stream", "XMLStreamReader", True, "getElementText", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.stream", "XMLStreamReader", True, "getNamespaceContext", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.stream", "XMLStreamReader", True, "getText", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["javax.xml.stream", "XMLEventFactory", "createAttribute", "(QName,String)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLEventFactory", "createAttribute", "(String,String)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLEventFactory", "createAttribute", "(String,String,String,String)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLEventFactory", "createCData", "(String)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLEventFactory", "createCharacters", "(String)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLEventFactory", "createComment", "(String)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLEventFactory", "createDTD", "(String)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLEventFactory", "createEndDocument", "()", "summary", "df-generated"] + - ["javax.xml.stream", "XMLEventFactory", "createEndElement", "(QName,Iterator)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLEventFactory", "createEndElement", "(String,String,String)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLEventFactory", "createEndElement", "(String,String,String,Iterator)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLEventFactory", "createEntityReference", "(String,EntityDeclaration)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLEventFactory", "createIgnorableSpace", "(String)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLEventFactory", "createNamespace", "(String)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLEventFactory", "createNamespace", "(String,String)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLEventFactory", "createProcessingInstruction", "(String,String)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLEventFactory", "createSpace", "(String)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLEventFactory", "createStartDocument", "()", "summary", "df-generated"] + - ["javax.xml.stream", "XMLEventFactory", "createStartDocument", "(String)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLEventFactory", "createStartDocument", "(String,String)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLEventFactory", "createStartDocument", "(String,String,boolean)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLEventFactory", "createStartElement", "(QName,Iterator,Iterator)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLEventFactory", "createStartElement", "(String,String,String)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLEventFactory", "createStartElement", "(String,String,String,Iterator,Iterator)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLEventFactory", "createStartElement", "(String,String,String,Iterator,Iterator,NamespaceContext)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLEventFactory", "newDefaultFactory", "()", "summary", "df-generated"] + - ["javax.xml.stream", "XMLEventFactory", "newFactory", "()", "summary", "df-generated"] + - ["javax.xml.stream", "XMLEventFactory", "newInstance", "()", "summary", "df-generated"] + - ["javax.xml.stream", "XMLEventFactory", "setLocation", "(Location)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLEventReader", "close", "()", "summary", "df-generated"] + - ["javax.xml.stream", "XMLEventReader", "getElementText", "()", "summary", "df-generated"] + - ["javax.xml.stream", "XMLEventReader", "getProperty", "(String)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLInputFactory", "createFilteredReader", "(XMLEventReader,EventFilter)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLInputFactory", "createFilteredReader", "(XMLStreamReader,StreamFilter)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLInputFactory", "createXMLEventReader", "(InputStream)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLInputFactory", "createXMLEventReader", "(InputStream,String)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLInputFactory", "createXMLEventReader", "(Reader)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLInputFactory", "createXMLEventReader", "(Source)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLInputFactory", "createXMLEventReader", "(String,InputStream)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLInputFactory", "createXMLEventReader", "(String,Reader)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLInputFactory", "createXMLEventReader", "(XMLStreamReader)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLInputFactory", "createXMLStreamReader", "(InputStream)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLInputFactory", "createXMLStreamReader", "(InputStream,String)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLInputFactory", "createXMLStreamReader", "(Reader)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLInputFactory", "createXMLStreamReader", "(Source)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLInputFactory", "createXMLStreamReader", "(String,InputStream)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLInputFactory", "createXMLStreamReader", "(String,Reader)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLInputFactory", "getEventAllocator", "()", "summary", "df-generated"] + - ["javax.xml.stream", "XMLInputFactory", "getProperty", "(String)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLInputFactory", "getXMLReporter", "()", "summary", "df-generated"] + - ["javax.xml.stream", "XMLInputFactory", "getXMLResolver", "()", "summary", "df-generated"] + - ["javax.xml.stream", "XMLInputFactory", "isPropertySupported", "(String)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLInputFactory", "newDefaultFactory", "()", "summary", "df-generated"] + - ["javax.xml.stream", "XMLInputFactory", "newFactory", "()", "summary", "df-generated"] + - ["javax.xml.stream", "XMLInputFactory", "newInstance", "()", "summary", "df-generated"] + - ["javax.xml.stream", "XMLInputFactory", "setEventAllocator", "(XMLEventAllocator)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLInputFactory", "setProperty", "(String,Object)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLInputFactory", "setXMLReporter", "(XMLReporter)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLInputFactory", "setXMLResolver", "(XMLResolver)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLOutputFactory", "createXMLEventWriter", "(OutputStream)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLOutputFactory", "createXMLEventWriter", "(OutputStream,String)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLOutputFactory", "createXMLEventWriter", "(Result)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLOutputFactory", "createXMLEventWriter", "(Writer)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLOutputFactory", "createXMLStreamWriter", "(OutputStream)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLOutputFactory", "createXMLStreamWriter", "(OutputStream,String)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLOutputFactory", "createXMLStreamWriter", "(Result)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLOutputFactory", "createXMLStreamWriter", "(Writer)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLOutputFactory", "getProperty", "(String)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLOutputFactory", "isPropertySupported", "(String)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLOutputFactory", "newDefaultFactory", "()", "summary", "df-generated"] + - ["javax.xml.stream", "XMLOutputFactory", "newFactory", "()", "summary", "df-generated"] + - ["javax.xml.stream", "XMLOutputFactory", "newInstance", "()", "summary", "df-generated"] + - ["javax.xml.stream", "XMLOutputFactory", "setProperty", "(String,Object)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLResolver", "resolveEntity", "(String,String,String,String)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLStreamReader", "close", "()", "summary", "df-generated"] + - ["javax.xml.stream", "XMLStreamReader", "getAttributeCount", "()", "summary", "df-generated"] + - ["javax.xml.stream", "XMLStreamReader", "getAttributeLocalName", "(int)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLStreamReader", "getAttributeName", "(int)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLStreamReader", "getAttributeNamespace", "(int)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLStreamReader", "getAttributePrefix", "(int)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLStreamReader", "getAttributeType", "(int)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLStreamReader", "getAttributeValue", "(String,String)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLStreamReader", "getAttributeValue", "(int)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLStreamReader", "getCharacterEncodingScheme", "()", "summary", "df-generated"] + - ["javax.xml.stream", "XMLStreamReader", "getEncoding", "()", "summary", "df-generated"] + - ["javax.xml.stream", "XMLStreamReader", "getEventType", "()", "summary", "df-generated"] + - ["javax.xml.stream", "XMLStreamReader", "getLocalName", "()", "summary", "df-generated"] + - ["javax.xml.stream", "XMLStreamReader", "getLocation", "()", "summary", "df-generated"] + - ["javax.xml.stream", "XMLStreamReader", "getName", "()", "summary", "df-generated"] + - ["javax.xml.stream", "XMLStreamReader", "getNamespaceCount", "()", "summary", "df-generated"] + - ["javax.xml.stream", "XMLStreamReader", "getNamespacePrefix", "(int)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLStreamReader", "getNamespaceURI", "()", "summary", "df-generated"] + - ["javax.xml.stream", "XMLStreamReader", "getNamespaceURI", "(String)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLStreamReader", "getNamespaceURI", "(int)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLStreamReader", "getPIData", "()", "summary", "df-generated"] + - ["javax.xml.stream", "XMLStreamReader", "getPITarget", "()", "summary", "df-generated"] + - ["javax.xml.stream", "XMLStreamReader", "getPrefix", "()", "summary", "df-generated"] + - ["javax.xml.stream", "XMLStreamReader", "getProperty", "(String)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLStreamReader", "getTextCharacters", "()", "summary", "df-generated"] + - ["javax.xml.stream", "XMLStreamReader", "getTextCharacters", "(int,char[],int,int)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLStreamReader", "getTextLength", "()", "summary", "df-generated"] + - ["javax.xml.stream", "XMLStreamReader", "getTextStart", "()", "summary", "df-generated"] + - ["javax.xml.stream", "XMLStreamReader", "getVersion", "()", "summary", "df-generated"] + - ["javax.xml.stream", "XMLStreamReader", "hasName", "()", "summary", "df-generated"] + - ["javax.xml.stream", "XMLStreamReader", "hasNext", "()", "summary", "df-generated"] + - ["javax.xml.stream", "XMLStreamReader", "hasText", "()", "summary", "df-generated"] + - ["javax.xml.stream", "XMLStreamReader", "isAttributeSpecified", "(int)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLStreamReader", "isCharacters", "()", "summary", "df-generated"] + - ["javax.xml.stream", "XMLStreamReader", "isEndElement", "()", "summary", "df-generated"] + - ["javax.xml.stream", "XMLStreamReader", "isStandalone", "()", "summary", "df-generated"] + - ["javax.xml.stream", "XMLStreamReader", "isStartElement", "()", "summary", "df-generated"] + - ["javax.xml.stream", "XMLStreamReader", "isWhiteSpace", "()", "summary", "df-generated"] + - ["javax.xml.stream", "XMLStreamReader", "next", "()", "summary", "df-generated"] + - ["javax.xml.stream", "XMLStreamReader", "nextTag", "()", "summary", "df-generated"] + - ["javax.xml.stream", "XMLStreamReader", "require", "(int,String,String)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLStreamReader", "standaloneSet", "()", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.xml.stream.util.model.yml b/java/ql/lib/ext/generated/javax.xml.stream.util.model.yml new file mode 100644 index 00000000000..e4485a47e75 --- /dev/null +++ b/java/ql/lib/ext/generated/javax.xml.stream.util.model.yml @@ -0,0 +1,12 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.xml.stream.util", "EventReaderDelegate", True, "EventReaderDelegate", "(XMLEventReader)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.stream.util", "EventReaderDelegate", True, "getParent", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.stream.util", "EventReaderDelegate", True, "setParent", "(XMLEventReader)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.stream.util", "StreamReaderDelegate", True, "StreamReaderDelegate", "(XMLStreamReader)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.stream.util", "StreamReaderDelegate", True, "getParent", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.stream.util", "StreamReaderDelegate", True, "setParent", "(XMLStreamReader)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.xml.transform.dom.model.yml b/java/ql/lib/ext/generated/javax.xml.transform.dom.model.yml new file mode 100644 index 00000000000..de450418d67 --- /dev/null +++ b/java/ql/lib/ext/generated/javax.xml.transform.dom.model.yml @@ -0,0 +1,23 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.xml.transform.dom", "DOMResult", True, "DOMResult", "(Node)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.transform.dom", "DOMResult", True, "DOMResult", "(Node,Node)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.transform.dom", "DOMResult", True, "DOMResult", "(Node,Node)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.transform.dom", "DOMResult", True, "DOMResult", "(Node,Node,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.transform.dom", "DOMResult", True, "DOMResult", "(Node,Node,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.transform.dom", "DOMResult", True, "DOMResult", "(Node,Node,String)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.transform.dom", "DOMResult", True, "DOMResult", "(Node,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.transform.dom", "DOMResult", True, "DOMResult", "(Node,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.transform.dom", "DOMResult", True, "getNextSibling", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.transform.dom", "DOMResult", True, "getNode", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.transform.dom", "DOMResult", True, "setNextSibling", "(Node)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.transform.dom", "DOMResult", True, "setNode", "(Node)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.transform.dom", "DOMSource", True, "DOMSource", "(Node)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.transform.dom", "DOMSource", True, "DOMSource", "(Node,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.transform.dom", "DOMSource", True, "DOMSource", "(Node,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.transform.dom", "DOMSource", True, "getNode", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.transform.dom", "DOMSource", True, "setNode", "(Node)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.xml.transform.model.yml b/java/ql/lib/ext/generated/javax.xml.transform.model.yml new file mode 100644 index 00000000000..589ccbc1d36 --- /dev/null +++ b/java/ql/lib/ext/generated/javax.xml.transform.model.yml @@ -0,0 +1,74 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.xml.transform", "Result", True, "getSystemId", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.transform", "Result", True, "setSystemId", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.transform", "Source", True, "getSystemId", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.transform", "Source", True, "setSystemId", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.transform", "TransformerConfigurationException", True, "TransformerConfigurationException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.transform", "TransformerConfigurationException", True, "TransformerConfigurationException", "(String,SourceLocator)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.transform", "TransformerConfigurationException", True, "TransformerConfigurationException", "(String,SourceLocator)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.transform", "TransformerConfigurationException", True, "TransformerConfigurationException", "(String,SourceLocator,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.transform", "TransformerConfigurationException", True, "TransformerConfigurationException", "(String,SourceLocator,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.transform", "TransformerConfigurationException", True, "TransformerConfigurationException", "(String,SourceLocator,Throwable)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.transform", "TransformerConfigurationException", True, "TransformerConfigurationException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.transform", "TransformerConfigurationException", True, "TransformerConfigurationException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.transform", "TransformerConfigurationException", True, "TransformerConfigurationException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.transform", "TransformerException", True, "TransformerException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.transform", "TransformerException", True, "TransformerException", "(String,SourceLocator)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.transform", "TransformerException", True, "TransformerException", "(String,SourceLocator)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.transform", "TransformerException", True, "TransformerException", "(String,SourceLocator,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.transform", "TransformerException", True, "TransformerException", "(String,SourceLocator,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.transform", "TransformerException", True, "TransformerException", "(String,SourceLocator,Throwable)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.transform", "TransformerException", True, "TransformerException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.transform", "TransformerException", True, "TransformerException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.transform", "TransformerException", True, "TransformerException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.transform", "TransformerException", True, "getException", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.transform", "TransformerException", True, "getLocationAsString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.transform", "TransformerException", True, "getLocator", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.transform", "TransformerException", True, "getMessageAndLocation", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.transform", "TransformerException", True, "setLocator", "(SourceLocator)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.transform", "TransformerFactoryConfigurationError", True, "TransformerFactoryConfigurationError", "(Exception)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.transform", "TransformerFactoryConfigurationError", True, "TransformerFactoryConfigurationError", "(Exception,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.transform", "TransformerFactoryConfigurationError", True, "TransformerFactoryConfigurationError", "(Exception,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.transform", "TransformerFactoryConfigurationError", True, "TransformerFactoryConfigurationError", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.transform", "TransformerFactoryConfigurationError", True, "getException", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.transform", "URIResolver", True, "resolve", "(String,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.transform", "URIResolver", True, "resolve", "(String,String)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.transform", "URIResolver", True, "resolve", "(String,String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["javax.xml.transform", "Source", "isEmpty", "()", "summary", "df-generated"] + - ["javax.xml.transform", "Transformer", "clearParameters", "()", "summary", "df-generated"] + - ["javax.xml.transform", "Transformer", "getErrorListener", "()", "summary", "df-generated"] + - ["javax.xml.transform", "Transformer", "getOutputProperties", "()", "summary", "df-generated"] + - ["javax.xml.transform", "Transformer", "getOutputProperty", "(String)", "summary", "df-generated"] + - ["javax.xml.transform", "Transformer", "getParameter", "(String)", "summary", "df-generated"] + - ["javax.xml.transform", "Transformer", "getURIResolver", "()", "summary", "df-generated"] + - ["javax.xml.transform", "Transformer", "reset", "()", "summary", "df-generated"] + - ["javax.xml.transform", "Transformer", "setErrorListener", "(ErrorListener)", "summary", "df-generated"] + - ["javax.xml.transform", "Transformer", "setOutputProperties", "(Properties)", "summary", "df-generated"] + - ["javax.xml.transform", "Transformer", "setOutputProperty", "(String,String)", "summary", "df-generated"] + - ["javax.xml.transform", "Transformer", "setParameter", "(String,Object)", "summary", "df-generated"] + - ["javax.xml.transform", "Transformer", "setURIResolver", "(URIResolver)", "summary", "df-generated"] + - ["javax.xml.transform", "Transformer", "transform", "(Source,Result)", "summary", "df-generated"] + - ["javax.xml.transform", "TransformerFactory", "getAssociatedStylesheet", "(Source,String,String,String)", "summary", "df-generated"] + - ["javax.xml.transform", "TransformerFactory", "getAttribute", "(String)", "summary", "df-generated"] + - ["javax.xml.transform", "TransformerFactory", "getErrorListener", "()", "summary", "df-generated"] + - ["javax.xml.transform", "TransformerFactory", "getFeature", "(String)", "summary", "df-generated"] + - ["javax.xml.transform", "TransformerFactory", "getURIResolver", "()", "summary", "df-generated"] + - ["javax.xml.transform", "TransformerFactory", "newDefaultInstance", "()", "summary", "df-generated"] + - ["javax.xml.transform", "TransformerFactory", "newInstance", "()", "summary", "df-generated"] + - ["javax.xml.transform", "TransformerFactory", "newInstance", "(String,ClassLoader)", "summary", "df-generated"] + - ["javax.xml.transform", "TransformerFactory", "newTemplates", "(Source)", "summary", "df-generated"] + - ["javax.xml.transform", "TransformerFactory", "newTransformer", "()", "summary", "df-generated"] + - ["javax.xml.transform", "TransformerFactory", "newTransformer", "(Source)", "summary", "df-generated"] + - ["javax.xml.transform", "TransformerFactory", "setAttribute", "(String,Object)", "summary", "df-generated"] + - ["javax.xml.transform", "TransformerFactory", "setErrorListener", "(ErrorListener)", "summary", "df-generated"] + - ["javax.xml.transform", "TransformerFactory", "setFeature", "(String,boolean)", "summary", "df-generated"] + - ["javax.xml.transform", "TransformerFactory", "setURIResolver", "(URIResolver)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.xml.transform.sax.model.yml b/java/ql/lib/ext/generated/javax.xml.transform.sax.model.yml new file mode 100644 index 00000000000..cd02ad21d93 --- /dev/null +++ b/java/ql/lib/ext/generated/javax.xml.transform.sax.model.yml @@ -0,0 +1,24 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.xml.transform.sax", "SAXResult", True, "SAXResult", "(ContentHandler)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.transform.sax", "SAXResult", True, "getHandler", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.transform.sax", "SAXResult", True, "getLexicalHandler", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.transform.sax", "SAXResult", True, "setHandler", "(ContentHandler)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.transform.sax", "SAXResult", True, "setLexicalHandler", "(LexicalHandler)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.transform.sax", "SAXSource", True, "getXMLReader", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.transform.sax", "SAXSource", True, "setInputSource", "(InputSource)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.transform.sax", "SAXSource", True, "setXMLReader", "(XMLReader)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["javax.xml.transform.sax", "SAXTransformerFactory", "newTemplatesHandler", "()", "summary", "df-generated"] + - ["javax.xml.transform.sax", "SAXTransformerFactory", "newTransformerHandler", "()", "summary", "df-generated"] + - ["javax.xml.transform.sax", "SAXTransformerFactory", "newTransformerHandler", "(Source)", "summary", "df-generated"] + - ["javax.xml.transform.sax", "SAXTransformerFactory", "newTransformerHandler", "(Templates)", "summary", "df-generated"] + - ["javax.xml.transform.sax", "SAXTransformerFactory", "newXMLFilter", "(Source)", "summary", "df-generated"] + - ["javax.xml.transform.sax", "SAXTransformerFactory", "newXMLFilter", "(Templates)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.xml.transform.stax.model.yml b/java/ql/lib/ext/generated/javax.xml.transform.stax.model.yml new file mode 100644 index 00000000000..25ca3d5c8cf --- /dev/null +++ b/java/ql/lib/ext/generated/javax.xml.transform.stax.model.yml @@ -0,0 +1,14 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.xml.transform.stax", "StAXResult", True, "StAXResult", "(XMLEventWriter)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.transform.stax", "StAXResult", True, "StAXResult", "(XMLStreamWriter)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.transform.stax", "StAXResult", True, "getXMLEventWriter", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.transform.stax", "StAXResult", True, "getXMLStreamWriter", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.transform.stax", "StAXSource", True, "StAXSource", "(XMLEventReader)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.transform.stax", "StAXSource", True, "StAXSource", "(XMLStreamReader)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.transform.stax", "StAXSource", True, "getXMLEventReader", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.transform.stax", "StAXSource", True, "getXMLStreamReader", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.xml.transform.stream.model.yml b/java/ql/lib/ext/generated/javax.xml.transform.stream.model.yml new file mode 100644 index 00000000000..c7d28706810 --- /dev/null +++ b/java/ql/lib/ext/generated/javax.xml.transform.stream.model.yml @@ -0,0 +1,21 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.xml.transform.stream", "StreamResult", True, "StreamResult", "(File)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.transform.stream", "StreamResult", True, "StreamResult", "(OutputStream)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.transform.stream", "StreamResult", True, "StreamResult", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.transform.stream", "StreamResult", True, "StreamResult", "(Writer)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.transform.stream", "StreamResult", True, "getOutputStream", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.transform.stream", "StreamResult", True, "getWriter", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.transform.stream", "StreamResult", True, "setOutputStream", "(OutputStream)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.transform.stream", "StreamResult", True, "setSystemId", "(File)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.transform.stream", "StreamResult", True, "setWriter", "(Writer)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.transform.stream", "StreamSource", True, "getPublicId", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.transform.stream", "StreamSource", True, "getReader", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.transform.stream", "StreamSource", True, "setInputStream", "(InputStream)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.transform.stream", "StreamSource", True, "setPublicId", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.transform.stream", "StreamSource", True, "setReader", "(Reader)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.transform.stream", "StreamSource", True, "setSystemId", "(File)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.xml.validation.model.yml b/java/ql/lib/ext/generated/javax.xml.validation.model.yml new file mode 100644 index 00000000000..328462437dc --- /dev/null +++ b/java/ql/lib/ext/generated/javax.xml.validation.model.yml @@ -0,0 +1,60 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.xml.validation", "SchemaFactoryConfigurationError", False, "SchemaFactoryConfigurationError", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.validation", "SchemaFactoryConfigurationError", False, "SchemaFactoryConfigurationError", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.validation", "SchemaFactoryConfigurationError", False, "SchemaFactoryConfigurationError", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.validation", "SchemaFactoryConfigurationError", False, "SchemaFactoryConfigurationError", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.validation", "Validator", True, "validate", "(Source)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["javax.xml.validation", "Schema", "newValidator", "()", "summary", "df-generated"] + - ["javax.xml.validation", "Schema", "newValidatorHandler", "()", "summary", "df-generated"] + - ["javax.xml.validation", "SchemaFactory", "getErrorHandler", "()", "summary", "df-generated"] + - ["javax.xml.validation", "SchemaFactory", "getFeature", "(String)", "summary", "df-generated"] + - ["javax.xml.validation", "SchemaFactory", "getProperty", "(String)", "summary", "df-generated"] + - ["javax.xml.validation", "SchemaFactory", "getResourceResolver", "()", "summary", "df-generated"] + - ["javax.xml.validation", "SchemaFactory", "isSchemaLanguageSupported", "(String)", "summary", "df-generated"] + - ["javax.xml.validation", "SchemaFactory", "newDefaultInstance", "()", "summary", "df-generated"] + - ["javax.xml.validation", "SchemaFactory", "newInstance", "(String)", "summary", "df-generated"] + - ["javax.xml.validation", "SchemaFactory", "newInstance", "(String,String,ClassLoader)", "summary", "df-generated"] + - ["javax.xml.validation", "SchemaFactory", "newSchema", "()", "summary", "df-generated"] + - ["javax.xml.validation", "SchemaFactory", "newSchema", "(File)", "summary", "df-generated"] + - ["javax.xml.validation", "SchemaFactory", "newSchema", "(Source)", "summary", "df-generated"] + - ["javax.xml.validation", "SchemaFactory", "newSchema", "(Source[])", "summary", "df-generated"] + - ["javax.xml.validation", "SchemaFactory", "newSchema", "(URL)", "summary", "df-generated"] + - ["javax.xml.validation", "SchemaFactory", "setErrorHandler", "(ErrorHandler)", "summary", "df-generated"] + - ["javax.xml.validation", "SchemaFactory", "setFeature", "(String,boolean)", "summary", "df-generated"] + - ["javax.xml.validation", "SchemaFactory", "setProperty", "(String,Object)", "summary", "df-generated"] + - ["javax.xml.validation", "SchemaFactory", "setResourceResolver", "(LSResourceResolver)", "summary", "df-generated"] + - ["javax.xml.validation", "SchemaFactoryLoader", "newFactory", "(String)", "summary", "df-generated"] + - ["javax.xml.validation", "TypeInfoProvider", "getAttributeTypeInfo", "(int)", "summary", "df-generated"] + - ["javax.xml.validation", "TypeInfoProvider", "getElementTypeInfo", "()", "summary", "df-generated"] + - ["javax.xml.validation", "TypeInfoProvider", "isIdAttribute", "(int)", "summary", "df-generated"] + - ["javax.xml.validation", "TypeInfoProvider", "isSpecified", "(int)", "summary", "df-generated"] + - ["javax.xml.validation", "Validator", "getErrorHandler", "()", "summary", "df-generated"] + - ["javax.xml.validation", "Validator", "getFeature", "(String)", "summary", "df-generated"] + - ["javax.xml.validation", "Validator", "getProperty", "(String)", "summary", "df-generated"] + - ["javax.xml.validation", "Validator", "getResourceResolver", "()", "summary", "df-generated"] + - ["javax.xml.validation", "Validator", "reset", "()", "summary", "df-generated"] + - ["javax.xml.validation", "Validator", "setErrorHandler", "(ErrorHandler)", "summary", "df-generated"] + - ["javax.xml.validation", "Validator", "setFeature", "(String,boolean)", "summary", "df-generated"] + - ["javax.xml.validation", "Validator", "setProperty", "(String,Object)", "summary", "df-generated"] + - ["javax.xml.validation", "Validator", "setResourceResolver", "(LSResourceResolver)", "summary", "df-generated"] + - ["javax.xml.validation", "Validator", "validate", "(Source,Result)", "summary", "df-generated"] + - ["javax.xml.validation", "ValidatorHandler", "getContentHandler", "()", "summary", "df-generated"] + - ["javax.xml.validation", "ValidatorHandler", "getErrorHandler", "()", "summary", "df-generated"] + - ["javax.xml.validation", "ValidatorHandler", "getFeature", "(String)", "summary", "df-generated"] + - ["javax.xml.validation", "ValidatorHandler", "getProperty", "(String)", "summary", "df-generated"] + - ["javax.xml.validation", "ValidatorHandler", "getResourceResolver", "()", "summary", "df-generated"] + - ["javax.xml.validation", "ValidatorHandler", "getTypeInfoProvider", "()", "summary", "df-generated"] + - ["javax.xml.validation", "ValidatorHandler", "setContentHandler", "(ContentHandler)", "summary", "df-generated"] + - ["javax.xml.validation", "ValidatorHandler", "setErrorHandler", "(ErrorHandler)", "summary", "df-generated"] + - ["javax.xml.validation", "ValidatorHandler", "setFeature", "(String,boolean)", "summary", "df-generated"] + - ["javax.xml.validation", "ValidatorHandler", "setProperty", "(String,Object)", "summary", "df-generated"] + - ["javax.xml.validation", "ValidatorHandler", "setResourceResolver", "(LSResourceResolver)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.xml.xpath.model.yml b/java/ql/lib/ext/generated/javax.xml.xpath.model.yml new file mode 100644 index 00000000000..4cef7e1a19e --- /dev/null +++ b/java/ql/lib/ext/generated/javax.xml.xpath.model.yml @@ -0,0 +1,37 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.xml.xpath", "XPathException", True, "XPathException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.xpath", "XPathException", True, "XPathException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.xpath", "XPathExpression", True, "evaluateExpression", "(InputSource)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.xpath", "XPathExpression", True, "evaluateExpression", "(InputSource,Class)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.xpath", "XPathExpression", True, "evaluateExpression", "(Object)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.xpath", "XPathExpression", True, "evaluateExpression", "(Object,Class)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.xpath", "XPathExpressionException", True, "XPathExpressionException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.xpath", "XPathExpressionException", True, "XPathExpressionException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.xpath", "XPathFactoryConfigurationException", True, "XPathFactoryConfigurationException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.xpath", "XPathFactoryConfigurationException", True, "XPathFactoryConfigurationException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.xpath", "XPathFunctionException", True, "XPathFunctionException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.xpath", "XPathFunctionException", True, "XPathFunctionException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["javax.xml.xpath", "XPath", "evaluateExpression", "(String,InputSource)", "summary", "df-generated"] + - ["javax.xml.xpath", "XPath", "evaluateExpression", "(String,InputSource,Class)", "summary", "df-generated"] + - ["javax.xml.xpath", "XPath", "evaluateExpression", "(String,Object)", "summary", "df-generated"] + - ["javax.xml.xpath", "XPath", "evaluateExpression", "(String,Object,Class)", "summary", "df-generated"] + - ["javax.xml.xpath", "XPathEvaluationResult$XPathResultType", "getQNameType", "(Class)", "summary", "df-generated"] + - ["javax.xml.xpath", "XPathFactory", "getFeature", "(String)", "summary", "df-generated"] + - ["javax.xml.xpath", "XPathFactory", "isObjectModelSupported", "(String)", "summary", "df-generated"] + - ["javax.xml.xpath", "XPathFactory", "newDefaultInstance", "()", "summary", "df-generated"] + - ["javax.xml.xpath", "XPathFactory", "newInstance", "()", "summary", "df-generated"] + - ["javax.xml.xpath", "XPathFactory", "newInstance", "(String)", "summary", "df-generated"] + - ["javax.xml.xpath", "XPathFactory", "newInstance", "(String,String,ClassLoader)", "summary", "df-generated"] + - ["javax.xml.xpath", "XPathFactory", "newXPath", "()", "summary", "df-generated"] + - ["javax.xml.xpath", "XPathFactory", "setFeature", "(String,boolean)", "summary", "df-generated"] + - ["javax.xml.xpath", "XPathFactory", "setXPathFunctionResolver", "(XPathFunctionResolver)", "summary", "df-generated"] + - ["javax.xml.xpath", "XPathFactory", "setXPathVariableResolver", "(XPathVariableResolver)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/jdk.internal.access.foreign.model.yml b/java/ql/lib/ext/generated/jdk.internal.access.foreign.model.yml new file mode 100644 index 00000000000..5cfddbd9303 --- /dev/null +++ b/java/ql/lib/ext/generated/jdk.internal.access.foreign.model.yml @@ -0,0 +1,10 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["jdk.internal.access.foreign", "UnmapperProxy", "address", "()", "summary", "df-generated"] + - ["jdk.internal.access.foreign", "UnmapperProxy", "fileDescriptor", "()", "summary", "df-generated"] + - ["jdk.internal.access.foreign", "UnmapperProxy", "isSync", "()", "summary", "df-generated"] + - ["jdk.internal.access.foreign", "UnmapperProxy", "unmap", "()", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/jdk.internal.access.model.yml b/java/ql/lib/ext/generated/jdk.internal.access.model.yml new file mode 100644 index 00000000000..37d80349303 --- /dev/null +++ b/java/ql/lib/ext/generated/jdk.internal.access.model.yml @@ -0,0 +1,243 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["jdk.internal.access", "JavaIOFileDescriptorAccess", True, "registerCleanup", "(FileDescriptor,PhantomCleanable)", "", "Argument[1]", "Argument[0]", "taint", "df-generated"] + - ["jdk.internal.access", "JavaIOFilePermissionAccess", True, "newPermPlusAltPath", "(FilePermission)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaIOFilePermissionAccess", True, "newPermUsingAltPath", "(FilePermission)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaIORandomAccessFileAccess", True, "openAndDelete", "(File,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangAccess", True, "addEnableNativeAccess", "(Module)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangAccess", True, "addOpensToAllUnnamed", "(Module,Set,Set)", "", "Argument[1].Element", "Argument[0]", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangAccess", True, "addOpensToAllUnnamed", "(Module,Set,Set)", "", "Argument[2].Element", "Argument[0]", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangAccess", True, "createOrGetClassLoaderValueMap", "(ClassLoader)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangAccess", True, "defineModule", "(ClassLoader,ModuleDescriptor,URI)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangAccess", True, "defineModule", "(ClassLoader,ModuleDescriptor,URI)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangAccess", True, "definePackage", "(ClassLoader,String,Module)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangAccess", True, "definePackage", "(ClassLoader,String,Module)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangAccess", True, "defineUnnamedModule", "(ClassLoader)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangAccess", True, "getBytesNoRepl", "(String,Charset)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangAccess", True, "getBytesUTF8NoRepl", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangAccess", True, "getServicesCatalog", "(ModuleLayer)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangAccess", True, "join", "(String,String,String,String[],int)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangAccess", True, "join", "(String,String,String,String[],int)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangAccess", True, "join", "(String,String,String,String[],int)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangAccess", True, "join", "(String,String,String,String[],int)", "", "Argument[3].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangAccess", True, "layers", "(ClassLoader)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangAccess", True, "layers", "(ModuleLayer)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangAccess", True, "newStringNoRepl", "(byte[],Charset)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangAccess", True, "newStringUTF8NoRepl", "(byte[],int,int)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangAccess", True, "newThreadWithAcc", "(Runnable,AccessControlContext)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangAccess", True, "newThreadWithAcc", "(Runnable,AccessControlContext)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangAccess", True, "setCause", "(Throwable,Throwable)", "", "Argument[1]", "Argument[0]", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangAccess", True, "stringConcatHelper", "(String,MethodType)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangAccess", True, "stringConcatHelper", "(String,MethodType)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangInvokeAccess", True, "collectCoordinates", "(VarHandle,int,MethodHandle)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangInvokeAccess", True, "dropCoordinates", "(VarHandle,int,Class[])", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangInvokeAccess", True, "filterCoordinates", "(VarHandle,int,MethodHandle[])", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangInvokeAccess", True, "filterValue", "(VarHandle,MethodHandle,MethodHandle)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangInvokeAccess", True, "getMethodDescriptor", "(Object)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangInvokeAccess", True, "getMethodType", "(Object)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangInvokeAccess", True, "getName", "(Object)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangInvokeAccess", True, "insertCoordinates", "(VarHandle,int,Object[])", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangInvokeAccess", True, "nativeMethodHandle", "(NativeEntryPoint,MethodHandle)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangInvokeAccess", True, "nativeMethodHandle", "(NativeEntryPoint,MethodHandle)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangInvokeAccess", True, "permuteCoordinates", "(VarHandle,List,int[])", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangInvokeAccess", True, "permuteCoordinates", "(VarHandle,List,int[])", "", "Argument[1].Element", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangModuleAccess", True, "newConfiguration", "(ModuleFinder,Map)", "", "Argument[1].Element", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangModuleAccess", True, "newExports", "(Set,String)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangModuleAccess", True, "newExports", "(Set,String)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangModuleAccess", True, "newExports", "(Set,String,Set)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangModuleAccess", True, "newExports", "(Set,String,Set)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangModuleAccess", True, "newExports", "(Set,String,Set)", "", "Argument[2].Element", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangModuleAccess", True, "newModuleBuilder", "(String,boolean,Set)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangModuleAccess", True, "newModuleBuilder", "(String,boolean,Set)", "", "Argument[2].Element", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangModuleAccess", True, "newModuleDescriptor", "(String,ModuleDescriptor$Version,Set,Set,Set,Set,Set,Set,Set,String,int)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangModuleAccess", True, "newModuleDescriptor", "(String,ModuleDescriptor$Version,Set,Set,Set,Set,Set,Set,Set,String,int)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangModuleAccess", True, "newModuleDescriptor", "(String,ModuleDescriptor$Version,Set,Set,Set,Set,Set,Set,Set,String,int)", "", "Argument[2].Element", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangModuleAccess", True, "newModuleDescriptor", "(String,ModuleDescriptor$Version,Set,Set,Set,Set,Set,Set,Set,String,int)", "", "Argument[3].Element", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangModuleAccess", True, "newModuleDescriptor", "(String,ModuleDescriptor$Version,Set,Set,Set,Set,Set,Set,Set,String,int)", "", "Argument[4].Element", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangModuleAccess", True, "newModuleDescriptor", "(String,ModuleDescriptor$Version,Set,Set,Set,Set,Set,Set,Set,String,int)", "", "Argument[5].Element", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangModuleAccess", True, "newModuleDescriptor", "(String,ModuleDescriptor$Version,Set,Set,Set,Set,Set,Set,Set,String,int)", "", "Argument[6].Element", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangModuleAccess", True, "newModuleDescriptor", "(String,ModuleDescriptor$Version,Set,Set,Set,Set,Set,Set,Set,String,int)", "", "Argument[7].Element", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangModuleAccess", True, "newModuleDescriptor", "(String,ModuleDescriptor$Version,Set,Set,Set,Set,Set,Set,Set,String,int)", "", "Argument[8].Element", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangModuleAccess", True, "newModuleDescriptor", "(String,ModuleDescriptor$Version,Set,Set,Set,Set,Set,Set,Set,String,int)", "", "Argument[9]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangModuleAccess", True, "newOpens", "(Set,String)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangModuleAccess", True, "newOpens", "(Set,String)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangModuleAccess", True, "newOpens", "(Set,String,Set)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangModuleAccess", True, "newOpens", "(Set,String,Set)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangModuleAccess", True, "newOpens", "(Set,String,Set)", "", "Argument[2].Element", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangModuleAccess", True, "newProvides", "(String,List)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangModuleAccess", True, "newProvides", "(String,List)", "", "Argument[1].Element", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangModuleAccess", True, "newRequires", "(Set,String,ModuleDescriptor$Version)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangModuleAccess", True, "newRequires", "(Set,String,ModuleDescriptor$Version)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangModuleAccess", True, "newRequires", "(Set,String,ModuleDescriptor$Version)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangModuleAccess", True, "packages", "(ModuleDescriptor$Builder)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangReflectAccess", True, "copyConstructor", "(Constructor)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangReflectAccess", True, "copyField", "(Field)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangReflectAccess", True, "copyMethod", "(Method)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangReflectAccess", True, "getConstructorAccessor", "(Constructor)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangReflectAccess", True, "getConstructorAnnotations", "(Constructor)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangReflectAccess", True, "getConstructorParameterAnnotations", "(Constructor)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangReflectAccess", True, "getConstructorSignature", "(Constructor)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangReflectAccess", True, "getExecutableSharedParameterTypes", "(Executable)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangReflectAccess", True, "getMethodAccessor", "(Method)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangReflectAccess", True, "getRoot", "(AccessibleObject)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangReflectAccess", True, "leafCopyMethod", "(Method)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangReflectAccess", True, "newConstructor", "(Class,Class[],Class[],int,int,String,byte[],byte[])", "", "Argument[1].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangReflectAccess", True, "newConstructor", "(Class,Class[],Class[],int,int,String,byte[],byte[])", "", "Argument[2].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangReflectAccess", True, "newConstructor", "(Class,Class[],Class[],int,int,String,byte[],byte[])", "", "Argument[5]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangReflectAccess", True, "newConstructor", "(Class,Class[],Class[],int,int,String,byte[],byte[])", "", "Argument[6]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangReflectAccess", True, "newConstructor", "(Class,Class[],Class[],int,int,String,byte[],byte[])", "", "Argument[7]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangReflectAccess", True, "setConstructorAccessor", "(Constructor,ConstructorAccessor)", "", "Argument[1]", "Argument[0]", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangReflectAccess", True, "setMethodAccessor", "(Method,MethodAccessor)", "", "Argument[1]", "Argument[0]", "taint", "df-generated"] + - ["jdk.internal.access", "JavaNetHttpCookieAccess", True, "header", "(HttpCookie)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaNetHttpCookieAccess", True, "parse", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaNetInetAddressAccess", True, "addressBytes", "(Inet6Address)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaNetInetAddressAccess", True, "getByName", "(String,InetAddress)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaNetInetAddressAccess", True, "getOriginalHostName", "(InetAddress)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaNetURLAccess", True, "getHandler", "(URL)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaNetUriAccess", True, "create", "(String,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaNetUriAccess", True, "create", "(String,String)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaNioAccess", True, "acquireScope", "(Buffer,boolean)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaNioAccess", True, "bufferSegment", "(Buffer)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaNioAccess", True, "getBufferBase", "(ByteBuffer)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaNioAccess", True, "newDirectByteBuffer", "(long,int,Object,MemorySegmentProxy)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaNioAccess", True, "newDirectByteBuffer", "(long,int,Object,MemorySegmentProxy)", "", "Argument[3]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaNioAccess", True, "newHeapByteBuffer", "(byte[],int,int,MemorySegmentProxy)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaNioAccess", True, "newHeapByteBuffer", "(byte[],int,int,MemorySegmentProxy)", "", "Argument[3]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaNioAccess", True, "newMappedByteBuffer", "(UnmapperProxy,long,int,Object,MemorySegmentProxy)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaNioAccess", True, "newMappedByteBuffer", "(UnmapperProxy,long,int,Object,MemorySegmentProxy)", "", "Argument[3]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaNioAccess", True, "newMappedByteBuffer", "(UnmapperProxy,long,int,Object,MemorySegmentProxy)", "", "Argument[4]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaSecurityAccess$ProtectionDomainCache", True, "get", "(ProtectionDomain)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaSecurityAccess$ProtectionDomainCache", True, "put", "(ProtectionDomain,PermissionCollection)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["jdk.internal.access", "JavaSecurityAccess$ProtectionDomainCache", True, "put", "(ProtectionDomain,PermissionCollection)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["jdk.internal.access", "JavaSecurityAccess", True, "doIntersectionPrivilege", "(PrivilegedAction,AccessControlContext)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaSecurityAccess", True, "doIntersectionPrivilege", "(PrivilegedAction,AccessControlContext,AccessControlContext)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaSecurityAccess", True, "getProtectDomains", "(AccessControlContext)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaSecuritySignatureAccess", True, "initSign", "(Signature,PrivateKey,AlgorithmParameterSpec,SecureRandom)", "", "Argument[1]", "Argument[0]", "taint", "df-generated"] + - ["jdk.internal.access", "JavaSecuritySignatureAccess", True, "initSign", "(Signature,PrivateKey,AlgorithmParameterSpec,SecureRandom)", "", "Argument[2]", "Argument[0]", "taint", "df-generated"] + - ["jdk.internal.access", "JavaSecuritySignatureAccess", True, "initSign", "(Signature,PrivateKey,AlgorithmParameterSpec,SecureRandom)", "", "Argument[3]", "Argument[0]", "taint", "df-generated"] + - ["jdk.internal.access", "JavaSecuritySignatureAccess", True, "initVerify", "(Signature,PublicKey,AlgorithmParameterSpec)", "", "Argument[1]", "Argument[0]", "taint", "df-generated"] + - ["jdk.internal.access", "JavaSecuritySignatureAccess", True, "initVerify", "(Signature,PublicKey,AlgorithmParameterSpec)", "", "Argument[2]", "Argument[0]", "taint", "df-generated"] + - ["jdk.internal.access", "JavaUtilCollectionAccess", True, "listFromTrustedArray", "(Object[])", "", "Argument[0].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaUtilCollectionAccess", True, "listFromTrustedArrayNullsAllowed", "(Object[])", "", "Argument[0].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaUtilJarAccess", True, "entryFor", "(JarFile,String)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaUtilJarAccess", True, "entryNames", "(JarFile,CodeSource[])", "", "Argument[1].ArrayElement", "Argument[0]", "taint", "df-generated"] + - ["jdk.internal.access", "JavaUtilJarAccess", True, "getCodeSource", "(JarFile,URL,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaUtilJarAccess", True, "getCodeSource", "(JarFile,URL,String)", "", "Argument[1]", "Argument[0]", "taint", "df-generated"] + - ["jdk.internal.access", "JavaUtilJarAccess", True, "getCodeSource", "(JarFile,URL,String)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaUtilJarAccess", True, "getCodeSource", "(JarFile,URL,String)", "", "Argument[2]", "Argument[0]", "taint", "df-generated"] + - ["jdk.internal.access", "JavaUtilJarAccess", True, "getCodeSources", "(JarFile,URL)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaUtilJarAccess", True, "getCodeSources", "(JarFile,URL)", "", "Argument[1]", "Argument[0]", "taint", "df-generated"] + - ["jdk.internal.access", "JavaUtilJarAccess", True, "getCodeSources", "(JarFile,URL)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaUtilJarAccess", True, "getManifestDigests", "(JarFile)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaUtilJarAccess", True, "getTrustedAttributes", "(Manifest,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaUtilResourceBundleAccess", True, "getBundle", "(String,Locale,Module)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaUtilResourceBundleAccess", True, "getBundle", "(String,Locale,Module)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaUtilResourceBundleAccess", True, "getParent", "(ResourceBundle)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaUtilResourceBundleAccess", True, "setLocale", "(ResourceBundle,Locale)", "", "Argument[1]", "Argument[0]", "taint", "df-generated"] + - ["jdk.internal.access", "JavaUtilResourceBundleAccess", True, "setName", "(ResourceBundle,String)", "", "Argument[1]", "Argument[0]", "taint", "df-generated"] + - ["jdk.internal.access", "JavaUtilResourceBundleAccess", True, "setParent", "(ResourceBundle,ResourceBundle)", "", "Argument[1]", "Argument[0]", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["jdk.internal.access", "JavaBeansAccess", "getConstructorPropertiesValue", "(Constructor)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaBeansAccess", "getReadMethod", "(Class,String)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaIOAccess", "charset", "()", "summary", "df-generated"] + - ["jdk.internal.access", "JavaIOAccess", "console", "()", "summary", "df-generated"] + - ["jdk.internal.access", "JavaIOFileDescriptorAccess", "close", "(FileDescriptor)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaIOFileDescriptorAccess", "get", "(FileDescriptor)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaIOFileDescriptorAccess", "getAppend", "(FileDescriptor)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaIOFileDescriptorAccess", "getHandle", "(FileDescriptor)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaIOFileDescriptorAccess", "registerCleanup", "(FileDescriptor)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaIOFileDescriptorAccess", "set", "(FileDescriptor,int)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaIOFileDescriptorAccess", "setAppend", "(FileDescriptor,boolean)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaIOFileDescriptorAccess", "setHandle", "(FileDescriptor,long)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaIOFileDescriptorAccess", "unregisterCleanup", "(FileDescriptor)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaLangAccess", "addEnableNativeAccessAllUnnamed", "()", "summary", "df-generated"] + - ["jdk.internal.access", "JavaLangAccess", "addExports", "(Module,String)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaLangAccess", "addExports", "(Module,String,Module)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaLangAccess", "addExportsToAllUnnamed", "(Module,String)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaLangAccess", "addNonExportedPackages", "(ModuleLayer)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaLangAccess", "addOpens", "(Module,String,Module)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaLangAccess", "addOpensToAllUnnamed", "(Module,String)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaLangAccess", "addReads", "(Module,Module)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaLangAccess", "addReadsAllUnnamed", "(Module)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaLangAccess", "addUses", "(Module,Class)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaLangAccess", "bindToLoader", "(ModuleLayer,ClassLoader)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaLangAccess", "blockedOn", "(Interruptible)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaLangAccess", "casAnnotationType", "(Class,AnnotationType,AnnotationType)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaLangAccess", "classData", "(Class)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaLangAccess", "decodeASCII", "(byte[],int,char[],int,int)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaLangAccess", "defineClass", "(ClassLoader,Class,String,byte[],ProtectionDomain,boolean,int,Object)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaLangAccess", "defineClass", "(ClassLoader,String,byte[],ProtectionDomain,String)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaLangAccess", "exit", "(int)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaLangAccess", "fastUUID", "(long,long)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaLangAccess", "findBootstrapClassOrNull", "(String)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaLangAccess", "findNative", "(ClassLoader,String)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaLangAccess", "getAnnotationType", "(Class)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaLangAccess", "getConstantPool", "(Class)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaLangAccess", "getDeclaredAnnotationMap", "(Class)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaLangAccess", "getDeclaredPublicMethods", "(Class,String,Class[])", "summary", "df-generated"] + - ["jdk.internal.access", "JavaLangAccess", "getEnumConstantsShared", "(Class)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaLangAccess", "getRawClassAnnotations", "(Class)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaLangAccess", "getRawClassTypeAnnotations", "(Class)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaLangAccess", "getRawExecutableTypeAnnotations", "(Executable)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaLangAccess", "inflateBytesToChars", "(byte[],int,char[],int,int)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaLangAccess", "invalidatePackageAccessCache", "()", "summary", "df-generated"] + - ["jdk.internal.access", "JavaLangAccess", "invokeFinalize", "(Object)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaLangAccess", "isEnableNativeAccess", "(Module)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaLangAccess", "isReflectivelyExported", "(Module,String,Module)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaLangAccess", "isReflectivelyOpened", "(Module,String,Module)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaLangAccess", "protectionDomain", "(Class)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaLangAccess", "registerShutdownHook", "(int,boolean,Runnable)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaLangAccess", "stringConcatInitialCoder", "()", "summary", "df-generated"] + - ["jdk.internal.access", "JavaLangAccess", "stringConcatMix", "(long,String)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaLangInvokeAccess", "ensureCustomized", "(MethodHandle)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaLangInvokeAccess", "generateHolderClasses", "(Stream)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaLangInvokeAccess", "getDeclaringClass", "(Object)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaLangInvokeAccess", "isNative", "(Object)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaLangInvokeAccess", "memoryAccessVarHandle", "(Class,boolean,long,ByteOrder)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaLangInvokeAccess", "newMemberName", "()", "summary", "df-generated"] + - ["jdk.internal.access", "JavaLangModuleAccess", "requires", "(ModuleDescriptor$Builder,Set,String,String)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaLangModuleAccess", "resolveAndBind", "(ModuleFinder,Collection,PrintStream)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaLangRefAccess", "runFinalization", "()", "summary", "df-generated"] + - ["jdk.internal.access", "JavaLangRefAccess", "waitForReferenceProcessing", "()", "summary", "df-generated"] + - ["jdk.internal.access", "JavaLangReflectAccess", "getConstructorSlot", "(Constructor)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaLangReflectAccess", "getExecutableTypeAnnotationBytes", "(Executable)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaLangReflectAccess", "isTrustedFinalField", "(Field)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaLangReflectAccess", "newInstance", "(Constructor,Object[],Class)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaNetInetAddressAccess", "addressValue", "(Inet4Address)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaNioAccess", "force", "(FileDescriptor,long,boolean,long,long)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaNioAccess", "getBufferAddress", "(ByteBuffer)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaNioAccess", "getDirectBufferPool", "()", "summary", "df-generated"] + - ["jdk.internal.access", "JavaNioAccess", "isLoaded", "(long,boolean,long)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaNioAccess", "load", "(long,boolean,long)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaNioAccess", "pageSize", "()", "summary", "df-generated"] + - ["jdk.internal.access", "JavaNioAccess", "reserveMemory", "(long,long)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaNioAccess", "unload", "(long,boolean,long)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaNioAccess", "unmapper", "(ByteBuffer)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaNioAccess", "unreserveMemory", "(long,long)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaSecurityAccess", "getProtectionDomainCache", "()", "summary", "df-generated"] + - ["jdk.internal.access", "JavaSecuritySignatureAccess", "initVerify", "(Signature,Certificate,AlgorithmParameterSpec)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaSecuritySpecAccess", "clearEncodedKeySpec", "(EncodedKeySpec)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaUtilJarAccess", "ensureInitialization", "(JarFile)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaUtilJarAccess", "entries2", "(JarFile)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaUtilJarAccess", "isInitializing", "()", "summary", "df-generated"] + - ["jdk.internal.access", "JavaUtilJarAccess", "jarFileHasClassPathAttribute", "(JarFile)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaUtilJarAccess", "setEagerValidation", "(JarFile,boolean)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaUtilResourceBundleAccess", "newResourceBundle", "(Class)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaUtilZipFileAccess", "entries", "(ZipFile)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaUtilZipFileAccess", "entryNameStream", "(ZipFile)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaUtilZipFileAccess", "getExtraAttributes", "(ZipEntry)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaUtilZipFileAccess", "getManifestAndSignatureRelatedFiles", "(JarFile)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaUtilZipFileAccess", "getManifestName", "(JarFile,boolean)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaUtilZipFileAccess", "getManifestNum", "(JarFile)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaUtilZipFileAccess", "getMetaInfVersions", "(JarFile)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaUtilZipFileAccess", "setExtraAttributes", "(ZipEntry,int)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaUtilZipFileAccess", "startsWithLocHeader", "(ZipFile)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaUtilZipFileAccess", "stream", "(ZipFile)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaxCryptoSpecAccess", "clearSecretKeySpec", "(SecretKeySpec)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/jdk.internal.misc.model.yml b/java/ql/lib/ext/generated/jdk.internal.misc.model.yml new file mode 100644 index 00000000000..3ab4816a586 --- /dev/null +++ b/java/ql/lib/ext/generated/jdk.internal.misc.model.yml @@ -0,0 +1,11 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["jdk.internal.misc", "Signal$Handler", "handle", "(Signal)", "summary", "df-generated"] + - ["jdk.internal.misc", "VM$BufferPool", "getCount", "()", "summary", "df-generated"] + - ["jdk.internal.misc", "VM$BufferPool", "getMemoryUsed", "()", "summary", "df-generated"] + - ["jdk.internal.misc", "VM$BufferPool", "getName", "()", "summary", "df-generated"] + - ["jdk.internal.misc", "VM$BufferPool", "getTotalCapacity", "()", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/jdk.internal.org.objectweb.asm.model.yml b/java/ql/lib/ext/generated/jdk.internal.org.objectweb.asm.model.yml new file mode 100644 index 00000000000..1121dda6781 --- /dev/null +++ b/java/ql/lib/ext/generated/jdk.internal.org.objectweb.asm.model.yml @@ -0,0 +1,15 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["jdk.internal.org.objectweb.asm", "ClassVisitor", True, "visitAnnotation", "(String,boolean)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.org.objectweb.asm", "ClassVisitor", True, "visitAnnotation", "(String,boolean)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["jdk.internal.org.objectweb.asm", "ClassVisitor", "visit", "(int,int,String,String,String,String[])", "summary", "df-generated"] + - ["jdk.internal.org.objectweb.asm", "ClassVisitor", "visitAttribute", "(Attribute)", "summary", "df-generated"] + - ["jdk.internal.org.objectweb.asm", "ClassVisitor", "visitModule", "(String,int,String)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/org.w3c.dom.ls.model.yml b/java/ql/lib/ext/generated/org.w3c.dom.ls.model.yml new file mode 100644 index 00000000000..ffc38030b8a --- /dev/null +++ b/java/ql/lib/ext/generated/org.w3c.dom.ls.model.yml @@ -0,0 +1,28 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["org.w3c.dom.ls", "LSInput", True, "getSystemId", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.w3c.dom.ls", "LSInput", True, "setSystemId", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.w3c.dom.ls", "LSResourceResolver", True, "resolveResource", "(String,String,String,String,String)", "", "Argument[3]", "ReturnValue", "taint", "df-generated"] + - ["org.w3c.dom.ls", "LSResourceResolver", True, "resolveResource", "(String,String,String,String,String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["org.w3c.dom.ls", "LSInput", "getBaseURI", "()", "summary", "df-generated"] + - ["org.w3c.dom.ls", "LSInput", "getByteStream", "()", "summary", "df-generated"] + - ["org.w3c.dom.ls", "LSInput", "getCertifiedText", "()", "summary", "df-generated"] + - ["org.w3c.dom.ls", "LSInput", "getCharacterStream", "()", "summary", "df-generated"] + - ["org.w3c.dom.ls", "LSInput", "getEncoding", "()", "summary", "df-generated"] + - ["org.w3c.dom.ls", "LSInput", "getPublicId", "()", "summary", "df-generated"] + - ["org.w3c.dom.ls", "LSInput", "getStringData", "()", "summary", "df-generated"] + - ["org.w3c.dom.ls", "LSInput", "setBaseURI", "(String)", "summary", "df-generated"] + - ["org.w3c.dom.ls", "LSInput", "setByteStream", "(InputStream)", "summary", "df-generated"] + - ["org.w3c.dom.ls", "LSInput", "setCertifiedText", "(boolean)", "summary", "df-generated"] + - ["org.w3c.dom.ls", "LSInput", "setCharacterStream", "(Reader)", "summary", "df-generated"] + - ["org.w3c.dom.ls", "LSInput", "setEncoding", "(String)", "summary", "df-generated"] + - ["org.w3c.dom.ls", "LSInput", "setPublicId", "(String)", "summary", "df-generated"] + - ["org.w3c.dom.ls", "LSInput", "setStringData", "(String)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/org.w3c.dom.model.yml b/java/ql/lib/ext/generated/org.w3c.dom.model.yml new file mode 100644 index 00000000000..9c519c9ae73 --- /dev/null +++ b/java/ql/lib/ext/generated/org.w3c.dom.model.yml @@ -0,0 +1,102 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["org.w3c.dom", "Attr", True, "getName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.w3c.dom", "Attr", True, "getOwnerElement", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.w3c.dom", "Attr", True, "getValue", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.w3c.dom", "Attr", True, "setValue", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.w3c.dom", "Element", True, "getAttribute", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.w3c.dom", "Element", True, "getAttributeNS", "(String,String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.w3c.dom", "Element", True, "getAttributeNode", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.w3c.dom", "Element", True, "getAttributeNodeNS", "(String,String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.w3c.dom", "Element", True, "getElementsByTagName", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.w3c.dom", "Element", True, "getElementsByTagNameNS", "(String,String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.w3c.dom", "Element", True, "getTagName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.w3c.dom", "Element", True, "removeAttributeNode", "(Attr)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.w3c.dom", "Element", True, "setAttributeNode", "(Attr)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.w3c.dom", "Element", True, "setAttributeNode", "(Attr)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] + - ["org.w3c.dom", "Element", True, "setAttributeNode", "(Attr)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.w3c.dom", "Element", True, "setAttributeNodeNS", "(Attr)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.w3c.dom", "Element", True, "setAttributeNodeNS", "(Attr)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] + - ["org.w3c.dom", "Element", True, "setAttributeNodeNS", "(Attr)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.w3c.dom", "NamedNodeMap", True, "getNamedItem", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.w3c.dom", "NamedNodeMap", True, "getNamedItemNS", "(String,String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.w3c.dom", "NamedNodeMap", True, "item", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.w3c.dom", "Node", True, "appendChild", "(Node)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.w3c.dom", "Node", True, "appendChild", "(Node)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.w3c.dom", "Node", True, "appendChild", "(Node)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] + - ["org.w3c.dom", "Node", True, "appendChild", "(Node)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.w3c.dom", "Node", True, "cloneNode", "(boolean)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.w3c.dom", "Node", True, "getAttributes", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.w3c.dom", "Node", True, "getChildNodes", "()", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.w3c.dom", "Node", True, "getFirstChild", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.w3c.dom", "Node", True, "getLastChild", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.w3c.dom", "Node", True, "getLocalName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.w3c.dom", "Node", True, "getNextSibling", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.w3c.dom", "Node", True, "getNodeName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.w3c.dom", "Node", True, "getNodeValue", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.w3c.dom", "Node", True, "getParentNode", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.w3c.dom", "Node", True, "getPreviousSibling", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.w3c.dom", "Node", True, "insertBefore", "(Node,Node)", "", "Argument[0]", "Argument[1]", "taint", "df-generated"] + - ["org.w3c.dom", "Node", True, "insertBefore", "(Node,Node)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.w3c.dom", "Node", True, "insertBefore", "(Node,Node)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.w3c.dom", "Node", True, "insertBefore", "(Node,Node)", "", "Argument[1]", "Argument[0]", "taint", "df-generated"] + - ["org.w3c.dom", "Node", True, "insertBefore", "(Node,Node)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["org.w3c.dom", "Node", True, "insertBefore", "(Node,Node)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["org.w3c.dom", "Node", True, "insertBefore", "(Node,Node)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] + - ["org.w3c.dom", "Node", True, "insertBefore", "(Node,Node)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.w3c.dom", "Node", True, "removeChild", "(Node)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.w3c.dom", "Node", True, "removeChild", "(Node)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.w3c.dom", "Node", True, "replaceChild", "(Node,Node)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.w3c.dom", "Node", True, "replaceChild", "(Node,Node)", "", "Argument[1]", "Argument[0]", "taint", "df-generated"] + - ["org.w3c.dom", "Node", True, "replaceChild", "(Node,Node)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["org.w3c.dom", "Node", True, "replaceChild", "(Node,Node)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["org.w3c.dom", "Node", True, "replaceChild", "(Node,Node)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] + - ["org.w3c.dom", "Node", True, "setNodeValue", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.w3c.dom", "NodeList", True, "item", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["org.w3c.dom", "Attr", "getSpecified", "()", "summary", "df-generated"] + - ["org.w3c.dom", "Attr", "isId", "()", "summary", "df-generated"] + - ["org.w3c.dom", "Element", "getSchemaTypeInfo", "()", "summary", "df-generated"] + - ["org.w3c.dom", "Element", "hasAttribute", "(String)", "summary", "df-generated"] + - ["org.w3c.dom", "Element", "hasAttributeNS", "(String,String)", "summary", "df-generated"] + - ["org.w3c.dom", "Element", "removeAttribute", "(String)", "summary", "df-generated"] + - ["org.w3c.dom", "Element", "removeAttributeNS", "(String,String)", "summary", "df-generated"] + - ["org.w3c.dom", "Element", "setAttribute", "(String,String)", "summary", "df-generated"] + - ["org.w3c.dom", "Element", "setAttributeNS", "(String,String,String)", "summary", "df-generated"] + - ["org.w3c.dom", "Element", "setIdAttribute", "(String,boolean)", "summary", "df-generated"] + - ["org.w3c.dom", "Element", "setIdAttributeNS", "(String,String,boolean)", "summary", "df-generated"] + - ["org.w3c.dom", "Element", "setIdAttributeNode", "(Attr,boolean)", "summary", "df-generated"] + - ["org.w3c.dom", "NamedNodeMap", "getLength", "()", "summary", "df-generated"] + - ["org.w3c.dom", "NamedNodeMap", "removeNamedItem", "(String)", "summary", "df-generated"] + - ["org.w3c.dom", "NamedNodeMap", "removeNamedItemNS", "(String,String)", "summary", "df-generated"] + - ["org.w3c.dom", "NamedNodeMap", "setNamedItem", "(Node)", "summary", "df-generated"] + - ["org.w3c.dom", "NamedNodeMap", "setNamedItemNS", "(Node)", "summary", "df-generated"] + - ["org.w3c.dom", "Node", "compareDocumentPosition", "(Node)", "summary", "df-generated"] + - ["org.w3c.dom", "Node", "getBaseURI", "()", "summary", "df-generated"] + - ["org.w3c.dom", "Node", "getFeature", "(String,String)", "summary", "df-generated"] + - ["org.w3c.dom", "Node", "getNamespaceURI", "()", "summary", "df-generated"] + - ["org.w3c.dom", "Node", "getNodeType", "()", "summary", "df-generated"] + - ["org.w3c.dom", "Node", "getOwnerDocument", "()", "summary", "df-generated"] + - ["org.w3c.dom", "Node", "getPrefix", "()", "summary", "df-generated"] + - ["org.w3c.dom", "Node", "getTextContent", "()", "summary", "df-generated"] + - ["org.w3c.dom", "Node", "getUserData", "(String)", "summary", "df-generated"] + - ["org.w3c.dom", "Node", "hasAttributes", "()", "summary", "df-generated"] + - ["org.w3c.dom", "Node", "hasChildNodes", "()", "summary", "df-generated"] + - ["org.w3c.dom", "Node", "isDefaultNamespace", "(String)", "summary", "df-generated"] + - ["org.w3c.dom", "Node", "isEqualNode", "(Node)", "summary", "df-generated"] + - ["org.w3c.dom", "Node", "isSameNode", "(Node)", "summary", "df-generated"] + - ["org.w3c.dom", "Node", "isSupported", "(String,String)", "summary", "df-generated"] + - ["org.w3c.dom", "Node", "lookupNamespaceURI", "(String)", "summary", "df-generated"] + - ["org.w3c.dom", "Node", "lookupPrefix", "(String)", "summary", "df-generated"] + - ["org.w3c.dom", "Node", "normalize", "()", "summary", "df-generated"] + - ["org.w3c.dom", "Node", "setPrefix", "(String)", "summary", "df-generated"] + - ["org.w3c.dom", "Node", "setTextContent", "(String)", "summary", "df-generated"] + - ["org.w3c.dom", "Node", "setUserData", "(String,Object,UserDataHandler)", "summary", "df-generated"] + - ["org.w3c.dom", "NodeList", "getLength", "()", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/org.xml.sax.model.yml b/java/ql/lib/ext/generated/org.xml.sax.model.yml new file mode 100644 index 00000000000..b8377f80341 --- /dev/null +++ b/java/ql/lib/ext/generated/org.xml.sax.model.yml @@ -0,0 +1,17 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["org.xml.sax", "ContentHandler", True, "startElement", "(String,String,String,Attributes)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["org.xml.sax", "EntityResolver", True, "resolveEntity", "(String,String)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["org.xml.sax", "EntityResolver", True, "resolveEntity", "(String,String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["org.xml.sax", "ContentHandler", "endElement", "(String,String,String)", "summary", "df-generated"] + - ["org.xml.sax", "ErrorHandler", "error", "(SAXParseException)", "summary", "df-generated"] + - ["org.xml.sax", "ErrorHandler", "fatalError", "(SAXParseException)", "summary", "df-generated"] + - ["org.xml.sax", "ErrorHandler", "warning", "(SAXParseException)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/sun.awt.model.yml b/java/ql/lib/ext/generated/sun.awt.model.yml new file mode 100644 index 00000000000..42476dac95e --- /dev/null +++ b/java/ql/lib/ext/generated/sun.awt.model.yml @@ -0,0 +1,11 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["sun.awt", "AWTAccessor$AccessibleBundleAccessor", True, "getKey", "(AccessibleBundle)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["sun.awt", "AWTAccessor$AccessibleContextAccessor", True, "getAppContext", "(AccessibleContext)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["sun.awt", "AWTAccessor$AccessibleContextAccessor", True, "getNativeAXResource", "(AccessibleContext)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["sun.awt", "AWTAccessor$AccessibleContextAccessor", True, "setAppContext", "(AccessibleContext,AppContext)", "", "Argument[1]", "Argument[0]", "taint", "df-generated"] + - ["sun.awt", "AWTAccessor$AccessibleContextAccessor", True, "setNativeAXResource", "(AccessibleContext,Object)", "", "Argument[1]", "Argument[0]", "taint", "df-generated"] diff --git a/java/ql/lib/ext/generated/sun.java2d.model.yml b/java/ql/lib/ext/generated/sun.java2d.model.yml new file mode 100644 index 00000000000..4e8c183dbaa --- /dev/null +++ b/java/ql/lib/ext/generated/sun.java2d.model.yml @@ -0,0 +1,7 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["sun.java2d", "DisposerRecord", "dispose", "()", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/sun.management.spi.model.yml b/java/ql/lib/ext/generated/sun.management.spi.model.yml new file mode 100644 index 00000000000..20407d0cdf8 --- /dev/null +++ b/java/ql/lib/ext/generated/sun.management.spi.model.yml @@ -0,0 +1,7 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["sun.management.spi", "PlatformMBeanProvider", True, "getPlatformComponentList", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] diff --git a/java/ql/lib/ext/generated/sun.nio.ch.model.yml b/java/ql/lib/ext/generated/sun.nio.ch.model.yml new file mode 100644 index 00000000000..6bf0c30693e --- /dev/null +++ b/java/ql/lib/ext/generated/sun.nio.ch.model.yml @@ -0,0 +1,14 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["sun.nio.ch", "DirectBuffer", True, "attachment", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["sun.nio.ch", "DirectBuffer", True, "cleaner", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["sun.nio.ch", "DirectBuffer", "address", "()", "summary", "df-generated"] + - ["sun.nio.ch", "Interruptible", "interrupt", "(Thread)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/sun.print.model.yml b/java/ql/lib/ext/generated/sun.print.model.yml new file mode 100644 index 00000000000..b680eb20867 --- /dev/null +++ b/java/ql/lib/ext/generated/sun.print.model.yml @@ -0,0 +1,7 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["sun.print", "DialogOwnerAccessor", "getOwnerID", "(DialogOwner)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/sun.security.krb5.model.yml b/java/ql/lib/ext/generated/sun.security.krb5.model.yml new file mode 100644 index 00000000000..464a5ae3afe --- /dev/null +++ b/java/ql/lib/ext/generated/sun.security.krb5.model.yml @@ -0,0 +1,13 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["sun.security.krb5", "JavaxSecurityAuthKerberosAccess", True, "kerberosTicketGetClientAlias", "(KerberosTicket)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["sun.security.krb5", "JavaxSecurityAuthKerberosAccess", True, "kerberosTicketGetProxy", "(KerberosTicket)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["sun.security.krb5", "JavaxSecurityAuthKerberosAccess", True, "kerberosTicketGetServerAlias", "(KerberosTicket)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["sun.security.krb5", "JavaxSecurityAuthKerberosAccess", True, "kerberosTicketSetClientAlias", "(KerberosTicket,KerberosPrincipal)", "", "Argument[1]", "Argument[0]", "taint", "df-generated"] + - ["sun.security.krb5", "JavaxSecurityAuthKerberosAccess", True, "kerberosTicketSetProxy", "(KerberosTicket,KerberosTicket)", "", "Argument[1]", "Argument[0]", "taint", "df-generated"] + - ["sun.security.krb5", "JavaxSecurityAuthKerberosAccess", True, "kerberosTicketSetServerAlias", "(KerberosTicket,KerberosPrincipal)", "", "Argument[1]", "Argument[0]", "taint", "df-generated"] + - ["sun.security.krb5", "JavaxSecurityAuthKerberosAccess", True, "keyTabTakeSnapshot", "(KeyTab)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] diff --git a/java/ql/lib/ext/generated/sun.security.util.model.yml b/java/ql/lib/ext/generated/sun.security.util.model.yml new file mode 100644 index 00000000000..3f742e5e297 --- /dev/null +++ b/java/ql/lib/ext/generated/sun.security.util.model.yml @@ -0,0 +1,7 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["sun.security.util", "MessageDigestSpi2", "engineUpdate", "(SecretKey)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/sun.util.logging.internal.model.yml b/java/ql/lib/ext/generated/sun.util.logging.internal.model.yml new file mode 100644 index 00000000000..66270c3750b --- /dev/null +++ b/java/ql/lib/ext/generated/sun.util.logging.internal.model.yml @@ -0,0 +1,9 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["sun.util.logging.internal", "LoggingProviderImpl$LogManagerAccess", True, "demandLoggerFor", "(LogManager,String,Module)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["sun.util.logging.internal", "LoggingProviderImpl$LogManagerAccess", True, "demandLoggerFor", "(LogManager,String,Module)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["sun.util.logging.internal", "LoggingProviderImpl$LogManagerAccess", True, "demandLoggerFor", "(LogManager,String,Module)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] diff --git a/java/ql/lib/ext/experimental/jakarta.servlet.http.model.yml b/java/ql/lib/ext/jakarta.servlet.http.model.yml similarity index 50% rename from java/ql/lib/ext/experimental/jakarta.servlet.http.model.yml rename to java/ql/lib/ext/jakarta.servlet.http.model.yml index 9500beba15b..5a83b1ac08d 100644 --- a/java/ql/lib/ext/experimental/jakarta.servlet.http.model.yml +++ b/java/ql/lib/ext/jakarta.servlet.http.model.yml @@ -1,6 +1,6 @@ extensions: - addsTo: pack: codeql/java-all - extensible: experimentalSourceModel + extensible: sourceModel data: - - ["jakarta.servlet.http", "HttpServletRequest", True, "getServletPath", "", "", "ReturnValue", "remote", "manual", "unsafe-url-forward"] + - ["jakarta.servlet.http", "HttpServletRequest", True, "getServletPath", "", "", "ReturnValue", "remote", "manual"] diff --git a/java/ql/lib/ext/jakarta.servlet.model.yml b/java/ql/lib/ext/jakarta.servlet.model.yml new file mode 100644 index 00000000000..be2feeb3c37 --- /dev/null +++ b/java/ql/lib/ext/jakarta.servlet.model.yml @@ -0,0 +1,7 @@ +extensions: + - addsTo: + pack: codeql/java-all + extensible: sinkModel + data: + - ["jakarta.servlet", "ServletContext", True, "getRequestDispatcher", "(String)", "", "Argument[0]", "url-forward", "manual"] + - ["jakarta.servlet", "ServletRequest", True, "getRequestDispatcher", "(String)", "", "Argument[0]", "url-forward", "manual"] diff --git a/java/ql/lib/ext/java.io.model.yml b/java/ql/lib/ext/java.io.model.yml index 3824c588662..1cbbf456779 100644 --- a/java/ql/lib/ext/java.io.model.yml +++ b/java/ql/lib/ext/java.io.model.yml @@ -78,11 +78,13 @@ extensions: - ["java.io", "File", True, "getCanonicalFile", "", "", "Argument[this]", "ReturnValue", "taint", "manual"] - ["java.io", "File", True, "getCanonicalPath", "", "", "Argument[this]", "ReturnValue", "taint", "manual"] - ["java.io", "File", True, "getName", "()", "", "Argument[this]", "ReturnValue", "taint", "manual"] + - ["java.io", "File", True, "getParent", "()", "", "Argument[this]", "ReturnValue", "taint", "df-manual"] - ["java.io", "File", True, "getParentFile", "()", "", "Argument[this]", "ReturnValue", "taint", "manual"] - ["java.io", "File", True, "getPath", "()", "", "Argument[this]", "ReturnValue", "taint", "manual"] - ["java.io", "File", True, "toPath", "", "", "Argument[this]", "ReturnValue", "taint", "manual"] - ["java.io", "File", True, "toString", "", "", "Argument[this]", "ReturnValue", "taint", "manual"] - ["java.io", "File", True, "toURI", "", "", "Argument[this]", "ReturnValue", "taint", "manual"] + - ["java.io", "File", True, "toURL", "()", "", "Argument[this]", "ReturnValue", "taint", "df-manual"] - ["java.io", "FilterOutputStream", True, "FilterOutputStream", "(OutputStream)", "", "Argument[0]", "Argument[this]", "taint", "manual"] - ["java.io", "InputStream", True, "read", "()", "", "Argument[this]", "ReturnValue", "taint", "manual"] - ["java.io", "InputStream", True, "read", "(byte[])", "", "Argument[this]", "Argument[0]", "taint", "manual"] @@ -118,6 +120,7 @@ extensions: - ["java.io", "File", "listFiles", "", "summary", "df-manual"] - ["java.io", "File", "mkdirs", "()", "summary", "manual"] - ["java.io", "FileInputStream", "FileInputStream", "(File)", "summary", "manual"] + - ["java.io", "FileInputStream", "FileInputStream", "(FileDescriptor)", "summary", "df-manual"] - ["java.io", "FileInputStream", "FileInputStream", "(String)", "summary", "df-manual"] - ["java.io", "InputStream", "close", "()", "summary", "manual"] - ["java.io", "ObjectInput", "readObject", "()", "summary", "df-manual"] # this is a deserialization sink modeled in regular CodeQL diff --git a/java/ql/lib/ext/java.lang.model.yml b/java/ql/lib/ext/java.lang.model.yml index 9012f7c981f..2be5585d82f 100644 --- a/java/ql/lib/ext/java.lang.model.yml +++ b/java/ql/lib/ext/java.lang.model.yml @@ -114,6 +114,7 @@ extensions: - ["java.lang", "String", False, "indent", "", "", "Argument[this]", "ReturnValue", "taint", "manual"] - ["java.lang", "String", False, "intern", "", "", "Argument[this]", "ReturnValue", "taint", "manual"] - ["java.lang", "String", False, "join", "", "", "Argument[0..1]", "ReturnValue", "taint", "manual"] + - ["java.lang", "String", False, "lines", "()", "", "Argument[this]", "ReturnValue.Element", "taint", "df-manual"] - ["java.lang", "String", False, "repeat", "(int)", "", "Argument[this]", "ReturnValue", "taint", "manual"] - ["java.lang", "String", False, "replace", "", "", "Argument[this]", "ReturnValue", "taint", "manual"] - ["java.lang", "String", False, "replace", "", "", "Argument[1]", "ReturnValue", "taint", "manual"] @@ -185,8 +186,19 @@ extensions: - ["java.lang", "Class", "isAssignableFrom", "(Class)", "summary", "manual"] - ["java.lang", "Class", "isInstance", "(Object)", "summary", "manual"] - ["java.lang", "Class", "toString", "()", "summary", "manual"] + - ["java.lang", "ClassLoader", "findResource", "(String)", "summary", "df-manual"] + - ["java.lang", "ClassLoader", "getDefinedPackage", "(String)", "summary", "df-manual"] + - ["java.lang", "ClassLoader", "getDefinedPackage", "(String)", "summary", "df-manual"] + - ["java.lang", "ClassLoader", "getName", "()", "summary", "df-manual"] + - ["java.lang", "ClassLoader", "getParent", "()", "summary", "df-manual"] - ["java.lang", "ClassLoader", "getResource", "(String)", "summary", "manual"] - ["java.lang", "ClassLoader", "getResourceAsStream", "(String)", "summary", "manual"] + - ["java.lang", "ClassLoader", "getSystemResource", "(String)", "summary", "df-manual"] + - ["java.lang", "ClassLoader", "getUnnamedModule", "()", "summary", "df-manual"] + - ["java.lang", "ClassLoader", "loadClass", "(String)", "summary", "df-manual"] + - ["java.lang", "ClassLoader", "loadClass", "(String,boolean)", "summary", "df-manual"] + - ["java.lang", "ClassLoader", "setClassAssertionStatus", "(String,boolean)", "summary", "df-manual"] + - ["java.lang", "ClassLoader", "setPackageAssertionStatus", "(String,boolean)", "summary", "df-manual"] - ["java.lang", "Enum", "Enum", "(String,int)", "summary", "manual"] - ["java.lang", "Enum", "equals", "(Object)", "summary", "manual"] - ["java.lang", "Enum", "hashCode", "()", "summary", "manual"] @@ -228,14 +240,14 @@ extensions: - ["java.lang", "Thread", "interrupt", "()", "summary", "manual"] - ["java.lang", "Thread", "sleep", "(long)", "summary", "manual"] - ["java.lang", "Thread", "start", "()", "summary", "manual"] - - ["java.lang", "Throwable", "addSuppressed", "(Throwable)", "summary", "manual"] - - ["java.lang", "Throwable", "fillInStackTrace", "()", "summary", "manual"] - - ["java.lang", "Throwable", "getStackTrace", "()", "summary", "manual"] - - ["java.lang", "Throwable", "getSuppressed", "()", "summary", "manual"] - - ["java.lang", "Throwable", "printStackTrace", "()", "summary", "manual"] - - ["java.lang", "Throwable", "printStackTrace", "(PrintStream)", "summary", "manual"] - - ["java.lang", "Throwable", "printStackTrace", "(PrintWriter)", "summary", "manual"] - - ["java.lang", "Throwable", "setStackTrace", "(StackTraceElement[])", "summary", "manual"] + - ["java.lang", "Throwable", "addSuppressed", "(Throwable)", "summary", "df-manual"] + - ["java.lang", "Throwable", "fillInStackTrace", "()", "summary", "df-manual"] + - ["java.lang", "Throwable", "getStackTrace", "()", "summary", "df-manual"] + - ["java.lang", "Throwable", "getSuppressed", "()", "summary", "df-manual"] + - ["java.lang", "Throwable", "printStackTrace", "()", "summary", "df-manual"] + - ["java.lang", "Throwable", "printStackTrace", "(PrintStream)", "summary", "df-manual"] + - ["java.lang", "Throwable", "printStackTrace", "(PrintWriter)", "summary", "df-manual"] + - ["java.lang", "Throwable", "setStackTrace", "(StackTraceElement[])", "summary", "df-manual"] # The below APIs have numeric flow and are currently being stored as neutral models. # These may be changed to summary models with kinds "value-numeric" and "taint-numeric" (or similar) in the future. - ["java.lang", "Double", "doubleToLongBits", "(double)", "summary", "manual"] # taint-numeric diff --git a/java/ql/lib/ext/java.net.model.yml b/java/ql/lib/ext/java.net.model.yml index 19044ec7a40..f48acbeace1 100644 --- a/java/ql/lib/ext/java.net.model.yml +++ b/java/ql/lib/ext/java.net.model.yml @@ -18,6 +18,7 @@ extensions: - ["java.net", "DatagramSocket", True, "connect", "(SocketAddress)", "", "Argument[0]", "request-forgery", "ai-manual"] - ["java.net", "PasswordAuthentication", False, "PasswordAuthentication", "(String,char[])", "", "Argument[1]", "credentials-password", "hq-generated"] - ["java.net", "Socket", True, "Socket", "(String,int)", "", "Argument[0]", "request-forgery", "ai-manual"] + - ["java.net", "URL", False, "getContent", "", "", "Argument[this]", "request-forgery", "manual"] - ["java.net", "URL", False, "openConnection", "", "", "Argument[this]", "request-forgery", "manual"] - ["java.net", "URL", False, "openConnection", "(Proxy)", "", "Argument[0]", "request-forgery", "ai-manual"] - ["java.net", "URL", False, "openStream", "", "", "Argument[this]", "request-forgery", "manual"] @@ -52,9 +53,16 @@ extensions: - ["java.net", "URI", False, "toASCIIString", "", "", "Argument[this]", "ReturnValue", "taint", "manual"] - ["java.net", "URI", False, "toString", "", "", "Argument[this]", "ReturnValue", "taint", "manual"] - ["java.net", "URI", False, "toURL", "", "", "Argument[this]", "ReturnValue", "taint", "manual"] - - ["java.net", "URL", False, "getFile", "()", "", "Argument[this]", "ReturnValue", "taint", "ai-manual"] - - ["java.net", "URL", False, "getPath", "()", "", "Argument[this]", "ReturnValue", "taint", "ai-manual"] + - ["java.net", "URL", False, "getFile", "()", "", "Argument[this].SyntheticField[java.net.URL.path]", "ReturnValue", "taint", "ai-manual"] + - ["java.net", "URL", False, "getPath", "()", "", "Argument[this].SyntheticField[java.net.URL.path]", "ReturnValue", "taint", "ai-manual"] + - ["java.net", "URL", False, "getQuery", "()", "", "Argument[this].SyntheticField[java.net.URL.path]", "ReturnValue", "taint", "df-manual"] # query is part of the path - ["java.net", "URL", False, "URL", "(String)", "", "Argument[0]", "Argument[this]", "taint", "manual"] + - ["java.net", "URL", False, "URL", "(String,String,int,String)", "", "Argument[1]", "Argument[this]", "taint", "df-manual"] + - ["java.net", "URL", False, "URL", "(String,String,int,String)", "", "Argument[3]", "Argument[this].SyntheticField[java.net.URL.path]", "taint", "df-manual"] + - ["java.net", "URL", False, "URL", "(String,String,int,String,URLStreamHandler)", "", "Argument[1]", "Argument[this]", "taint", "df-manual"] + - ["java.net", "URL", False, "URL", "(String,String,int,String,URLStreamHandler)", "", "Argument[3]", "Argument[this].SyntheticField[java.net.URL.path]", "taint", "df-manual"] + - ["java.net", "URL", False, "URL", "(String,String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-manual"] + - ["java.net", "URL", False, "URL", "(String,String,String)", "", "Argument[2]", "Argument[this].SyntheticField[java.net.URL.path]", "taint", "df-manual"] - ["java.net", "URL", False, "URL", "(URL,String)", "", "Argument[0]", "Argument[this]", "taint", "ai-manual"] - ["java.net", "URL", False, "URL", "(URL,String)", "", "Argument[1]", "Argument[this]", "taint", "ai-manual"] - ["java.net", "URL", False, "toExternalForm", "", "", "Argument[this]", "ReturnValue", "taint", "manual"] @@ -67,4 +75,11 @@ extensions: data: # summary neutrals - ["java.net", "Socket", "getOutputStream", "()", "summary", "df-manual"] + - ["java.net", "Socket", "connect", "(SocketAddress)", "summary", "df-manual"] - ["java.net", "Socket", "connect", "(SocketAddress,int)", "summary", "df-manual"] + - ["java.net", "URL", "getContent", "()", "summary", "df-manual"] + - ["java.net", "URL", "getDefaultPort", "()", "summary", "df-manual"] + - ["java.net", "URL", "getPort", "()", "summary", "df-manual"] + - ["java.net", "URL", "getProtocol", "()", "summary", "df-manual"] + - ["java.net", "URL", "openConnection", "()", "summary", "df-manual"] + - ["java.net", "URL", "openStream", "()", "summary", "df-manual"] diff --git a/java/ql/lib/ext/java.nio.file.model.yml b/java/ql/lib/ext/java.nio.file.model.yml index fc0648c85aa..8d7db676e53 100644 --- a/java/ql/lib/ext/java.nio.file.model.yml +++ b/java/ql/lib/ext/java.nio.file.model.yml @@ -90,8 +90,31 @@ extensions: extensible: neutralModel data: # summary neutrals - - ["java.nio.file", "Files", "exists", "(Path,LinkOption[])", "summary", "manual"] - - ["java.nio.file", "Files", "newInputStream", "(Path,LinkOption[])", "summary", "df-manual"] + - ["java.nio.file", "Files", "copy", "", "summary", "df-manual"] + - ["java.nio.file", "Files", "createDirectories", "", "summary", "df-manual"] + - ["java.nio.file", "Files", "createDirectory", "", "summary", "df-manual"] + - ["java.nio.file", "Files", "createFile", "", "summary", "df-manual"] + - ["java.nio.file", "Files", "createLink", "", "summary", "df-manual"] + - ["java.nio.file", "Files", "createSymbolicLink", "", "summary", "df-manual"] + - ["java.nio.file", "Files", "createTempDirectory", "", "summary", "df-manual"] + - ["java.nio.file", "Files", "createTempFile", "", "summary", "df-manual"] + - ["java.nio.file", "Files", "delete", "", "summary", "df-manual"] + - ["java.nio.file", "Files", "deleteIfExists", "", "summary", "df-manual"] + - ["java.nio.file", "Files", "getFileStore", "", "summary", "df-manual"] + - ["java.nio.file", "Files", "exists", "", "summary", "df-manual"] + - ["java.nio.file", "Files", "lines", "", "summary", "df-manual"] + - ["java.nio.file", "Files", "move", "", summary, "df-manual"] + - ["java.nio.file", "Files", "newBufferedReader", "", "summary", "df-manual"] + - ["java.nio.file", "Files", "newBufferedWriter", "", summary, "df-manual"] + - ["java.nio.file", "Files", "newInputStream", "", "summary", "df-manual"] + - ["java.nio.file", "Files", "newOutputStream", "", summary, "df-manual"] + - ["java.nio.file", "Files", "notExists", "", "summary", "df-manual"] + - ["java.nio.file", "Files", "probeContentType", "", "summary", "df-manual"] + - ["java.nio.file", "Files", "readAllBytes", "", "summary", "df-manual"] + - ["java.nio.file", "Files", "readAllLines", "", "summary", "df-manual"] + - ["java.nio.file", "Files", "readString", "", "summary", "df-manual"] + - ["java.nio.file", "Files", "write", "", summary, "df-manual"] + - ["java.nio.file", "Files", "writeString", "", summary, "df-manual"] # sink neutrals - ["java.nio.file", "Files", "getLastModifiedTime", "", "sink", "hq-manual"] - ["java.nio.file", "Files", "getOwner", "", "sink", "hq-manual"] diff --git a/java/ql/lib/ext/java.security.cert.model.yml b/java/ql/lib/ext/java.security.cert.model.yml index e8316807883..503ad06cabf 100644 --- a/java/ql/lib/ext/java.security.cert.model.yml +++ b/java/ql/lib/ext/java.security.cert.model.yml @@ -4,3 +4,43 @@ extensions: extensible: sinkModel data: - ["java.security.cert", "X509CertSelector", False, "setSubjectPublicKey", "(byte[])", "", "Argument[0]", "credentials-key", "hq-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["java.security.cert", "CertificateFactory", "CertificateFactory", "(CertificateFactorySpi,Provider,String)", "summary", "df-manual"] + - ["java.security.cert", "CertificateFactory", "generateCertificate", "(InputStream)", "summary", "df-manual"] + - ["java.security.cert", "CertificateFactory", "generateCertificates", "(InputStream)", "summary", "df-manual"] + - ["java.security.cert", "CertificateFactory", "generateCertPath", "", "summary", "df-manual"] + - ["java.security.cert", "CertificateFactory", "generateCRL", "(InputStream)", "summary", "df-manual"] + - ["java.security.cert", "CertificateFactory", "generateCRLs", "(InputStream)", "summary", "df-manual"] + - ["java.security.cert", "CertificateFactory", "getCertPathEncodings", "()", "summary", "df-manual"] + - ["java.security.cert", "CertificateFactory", "getInstance", "", "summary", "df-manual"] + - ["java.security.cert", "CertificateFactory", "getProvider", "()", "summary", "df-manual"] + - ["java.security.cert", "CertificateFactory", "getType", "()", "summary", "df-manual"] + - ["java.security.cert", "CertStore", "CertStore", "(CertStoreSpi,Provider,String,CertStoreParameters)", "summary", "df-manual"] + - ["java.security.cert", "CertStore", "getCertificates", "(CertSelector)", "summary", "df-manual"] + - ["java.security.cert", "CertStore", "getCertStoreCertificates", "()", "summary", "df-manual"] + - ["java.security.cert", "CertStore", "getCRLs", "(CRLSelector)", "summary", "df-manual"] + - ["java.security.cert", "CertStore", "getDefaultType", "()", "summary", "df-manual"] + - ["java.security.cert", "CertStore", "getInstance", "", "summary", "df-manual"] + - ["java.security.cert", "CertStore", "getProvider", "()", "summary", "df-manual"] + - ["java.security.cert", "CertStore", "getType", "()", "summary", "df-manual"] + - ["java.security.cert", "PKIXParameters", "PKIXParameters", "", "summary", "df-manual"] + - ["java.security.cert", "PKIXParameters", "addCertPathChecker", "(PKIXCertPathChecker)", "summary", "df-manual"] + - ["java.security.cert", "PKIXParameters", "addCertStore", "(CertStore)", "summary", "df-manual"] + - ["java.security.cert", "PKIXParameters", "getCertPathCheckers", "()", "summary", "df-manual"] + - ["java.security.cert", "PKIXParameters", "getCertStores", "()", "summary", "df-manual"] + - ["java.security.cert", "PKIXParameters", "getDate", "()", "summary", "df-manual"] + - ["java.security.cert", "PKIXParameters", "getInitialPolicies", "()", "summary", "df-manual"] + - ["java.security.cert", "PKIXParameters", "getPolicyQualifiersRejected", "()", "summary", "df-manual"] + - ["java.security.cert", "PKIXParameters", "getSigProvider", "()", "summary", "df-manual"] + - ["java.security.cert", "PKIXParameters", "getTargetCertConstraints", "()", "summary", "df-manual"] + - ["java.security.cert", "PKIXParameters", "getTrustAnchors", "()", "summary", "df-manual"] + - ["java.security.cert", "PKIXParameters", "setAnyPolicyInhibited", "(boolean)", "summary", "df-manual"] + - ["java.security.cert", "PKIXParameters", "setCertPathCheckers", "(List)", "summary", "df-manual"] + - ["java.security.cert", "PKIXParameters", "setCertStores", "(List)", "summary", "df-manual"] + - ["java.security.cert", "PKIXParameters", "setDate", "(Date)", "summary", "df-manual"] + - ["java.security.cert", "PKIXParameters", "setSigProvider", "(String)", "summary", "df-manual"] + - ["java.security.cert", "PKIXParameters", "setTargetConstraints", "(CertSelector)", "summary", "df-manual"] + - ["java.security.cert", "PKIXParameters", "setTrustAnchors", "(Set)", "summary", "df-manual"] diff --git a/java/ql/lib/ext/java.security.model.yml b/java/ql/lib/ext/java.security.model.yml index a50c0b1d3fa..6157c635fe6 100644 --- a/java/ql/lib/ext/java.security.model.yml +++ b/java/ql/lib/ext/java.security.model.yml @@ -15,6 +15,17 @@ extensions: - ["java.security", "KeyStoreSpi", True, "engineSetKeyEntry", "(String,Key,char[],Certificate[])", "", "Argument[2]", "credentials-password", "hq-generated"] - ["java.security", "KeyStoreSpi", True, "engineStore", "(OutputStream,char[])", "", "Argument[1]", "credentials-password", "hq-generated"] - ["java.security", "KeyStoreSpi", True, "engineSetKeyEntry", "(String,byte[],Certificate[])", "", "Argument[1]", "credentials-key", "hq-generated"] + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["java.security", "CodeSource", False, "CodeSource", "(URL,Certificate[])", "", "Argument[0]", "Argument[this]", "taint", "df-manual"] + - ["java.security", "CodeSource", False, "CodeSource", "(URL,Certificate[])", "", "Argument[1].ArrayElement", "Argument[this].SyntheticField[java.security.CodeSource.certificates].ArrayElement", "value", "df-manual"] + - ["java.security", "CodeSource", False, "CodeSource", "(URL,CodeSigner[])", "", "Argument[0]", "Argument[this]", "taint", "df-manual"] + - ["java.security", "CodeSource", False, "CodeSource", "(URL,CodeSigner[])", "", "Argument[1].ArrayElement", "Argument[this].SyntheticField[java.security.CodeSource.codeSigners].ArrayElement", "value", "df-manual"] + - ["java.security", "CodeSource", False, "getCertificates", "()", "", "Argument[this].SyntheticField[java.security.CodeSource.certificates].ArrayElement", "ReturnValue.ArrayElement", "value", "df-manual"] + - ["java.security", "CodeSource", False, "getCodeSigners", "()", "", "Argument[this].SyntheticField[java.security.CodeSource.codeSigners].ArrayElement", "ReturnValue.ArrayElement", "value", "df-manual"] + - ["java.security", "CodeSource", False, "getLocation", "()", "", "Argument[this]", "ReturnValue", "taint", "df-manual"] - addsTo: pack: codeql/java-all extensible: neutralModel diff --git a/java/ql/lib/ext/java.util.model.yml b/java/ql/lib/ext/java.util.model.yml index 7ab6780b8f8..e2617815008 100644 --- a/java/ql/lib/ext/java.util.model.yml +++ b/java/ql/lib/ext/java.util.model.yml @@ -58,6 +58,7 @@ extensions: - ["java.util", "Collection", True, "toArray", "", "", "Argument[this].Element", "Argument[0].ArrayElement", "value", "manual"] - ["java.util", "Collection", True, "toArray", "", "", "Argument[this].Element", "ReturnValue.ArrayElement", "value", "manual"] - ["java.util", "Collections", False, "addAll", "(Collection,Object[])", "", "Argument[1].ArrayElement", "Argument[0].Element", "value", "manual"] + - ["java.util", "Collections", False, "asLifoQueue", "(Deque)", "", "Argument[0].Element", "ReturnValue.Element", "value", "df-manual"] - ["java.util", "Collections", False, "checkedCollection", "(Collection,Class)", "", "Argument[0].Element", "ReturnValue.Element", "value", "manual"] - ["java.util", "Collections", False, "checkedList", "(List,Class)", "", "Argument[0].Element", "ReturnValue.Element", "value", "manual"] - ["java.util", "Collections", False, "checkedMap", "(Map,Class,Class)", "", "Argument[0].MapKey", "ReturnValue.MapKey", "value", "manual"] @@ -65,6 +66,7 @@ extensions: - ["java.util", "Collections", False, "checkedNavigableMap", "(NavigableMap,Class,Class)", "", "Argument[0].MapKey", "ReturnValue.MapKey", "value", "manual"] - ["java.util", "Collections", False, "checkedNavigableMap", "(NavigableMap,Class,Class)", "", "Argument[0].MapValue", "ReturnValue.MapValue", "value", "manual"] - ["java.util", "Collections", False, "checkedNavigableSet", "(NavigableSet,Class)", "", "Argument[0].Element", "ReturnValue.Element", "value", "manual"] + - ["java.util", "Collections", False, "checkedQueue", "(Queue,Class)", "", "Argument[0].Element", "ReturnValue.Element", "value", "df-manual"] - ["java.util", "Collections", False, "checkedSet", "(Set,Class)", "", "Argument[0].Element", "ReturnValue.Element", "value", "manual"] - ["java.util", "Collections", False, "checkedSortedMap", "(SortedMap,Class,Class)", "", "Argument[0].MapKey", "ReturnValue.MapKey", "value", "manual"] - ["java.util", "Collections", False, "checkedSortedMap", "(SortedMap,Class,Class)", "", "Argument[0].MapValue", "ReturnValue.MapValue", "value", "manual"] @@ -309,6 +311,9 @@ extensions: - ["java.util", "Queue", True, "poll", "()", "", "Argument[this].Element", "ReturnValue", "value", "manual"] - ["java.util", "Queue", True, "remove", "()", "", "Argument[this].Element", "ReturnValue", "value", "manual"] - ["java.util", "ResourceBundle", True, "getString", "(String)", "", "Argument[this].MapValue", "ReturnValue", "value", "manual"] + - ["java.util", "Scanner", True, "findAll", "(Pattern)", "", "Argument[this]", "ReturnValue.Element", "taint", "df-manual"] + - ["java.util", "Scanner", True, "findAll", "(String)", "", "Argument[this]", "ReturnValue.Element", "taint", "df-manual"] + - ["java.util", "Scanner", True, "match", "()", "", "Argument[this]", "ReturnValue", "taint", "df-manual"] - ["java.util", "Scanner", True, "Scanner", "", "", "Argument[0]", "Argument[this]", "taint", "manual"] - ["java.util", "Scanner", True, "findInLine", "", "", "Argument[this]", "ReturnValue", "taint", "manual"] - ["java.util", "Scanner", True, "findWithinHorizon", "", "", "Argument[this]", "ReturnValue", "taint", "manual"] @@ -428,6 +433,8 @@ extensions: - ["java.util", "Collections", "emptyList", "()", "summary", "manual"] - ["java.util", "Collections", "emptyMap", "()", "summary", "manual"] - ["java.util", "Collections", "emptySet", "()", "summary", "manual"] + - ["java.util", "Collections", "newSetFromMap", "", "summary", "df-manual"] + - ["java.util", "Collections", "reverseOrder", "", "summary", "df-manual"] - ["java.util", "Collections", "sort", "", "summary", "manual"] - ["java.util", "Enumeration", "hasMoreElements", "()", "summary", "manual"] - ["java.util", "EnumSet", "allOf", "(Class)", "summary", "df-manual"] @@ -451,7 +458,62 @@ extensions: - ["java.util", "List", "of", "()", "summary", "manual"] - ["java.util", "List", "sort", "(Comparator)", "summary", "manual"] - ["java.util", "List", "size", "()", "summary", "manual"] + - ["java.util", "Locale$Builder", "addUnicodeLocaleAttribute", "(String)", "summary", "df-manual"] + - ["java.util", "Locale$Builder", "build", "()", "summary", "df-manual"] + - ["java.util", "Locale$Builder", "clear", "()", "summary", "df-manual"] + - ["java.util", "Locale$Builder", "clearExtensions", "()", "summary", "df-manual"] + - ["java.util", "Locale$Builder", "removeUnicodeLocaleAttribute", "(String)", "summary", "df-manual"] + - ["java.util", "Locale$Builder", "setExtension", "(char,String)", "summary", "df-manual"] + - ["java.util", "Locale$Builder", "setLanguage", "(String)", "summary", "df-manual"] + - ["java.util", "Locale$Builder", "setLanguageTag", "(String)", "summary", "df-manual"] + - ["java.util", "Locale$Builder", "setLocale", "(Locale)", "summary", "df-manual"] + - ["java.util", "Locale$Builder", "setLocale", "(Locale)", "summary", "df-manual"] + - ["java.util", "Locale$Builder", "setRegion", "(String)", "summary", "df-manual"] + - ["java.util", "Locale$Builder", "setScript", "(String)", "summary", "df-manual"] + - ["java.util", "Locale$Builder", "setUnicodeLocaleKeyword", "(String,String)", "summary", "df-manual"] + - ["java.util", "Locale$Builder", "setVariant", "(String)", "summary", "df-manual"] + - ["java.util", "Locale$Builder", "setVariant", "(String)", "summary", "df-manual"] + - ["java.util", "Locale$LanguageRange", "LanguageRange", "(String)", "summary", "df-manual"] + - ["java.util", "Locale$LanguageRange", "LanguageRange", "(String,double)", "summary", "df-manual"] + - ["java.util", "Locale$LanguageRange", "getRange", "()", "summary", "df-manual"] + - ["java.util", "Locale$LanguageRange", "mapEquivalents", "(List,Map)", "summary", "df-manual"] + - ["java.util", "Locale$LanguageRange", "mapEquivalents", "(List,Map)", "summary", "df-manual"] + - ["java.util", "Locale$LanguageRange", "parse", "(String)", "summary", "df-manual"] + - ["java.util", "Locale$LanguageRange", "parse", "(String,Map)", "summary", "df-manual"] + - ["java.util", "Locale$LanguageRange", "parse", "(String,Map)", "summary", "df-manual"] + - ["java.util", "Locale", "Locale", "(String)", "summary", "df-manual"] + - ["java.util", "Locale", "Locale", "(String,String)", "summary", "df-manual"] + - ["java.util", "Locale", "Locale", "(String,String)", "summary", "df-manual"] + - ["java.util", "Locale", "Locale", "(String,String,String)", "summary", "df-manual"] + - ["java.util", "Locale", "Locale", "(String,String,String)", "summary", "df-manual"] + - ["java.util", "Locale", "Locale", "(String,String,String)", "summary", "df-manual"] + - ["java.util", "Locale", "filterTags", "(List,Collection)", "summary", "df-manual"] + - ["java.util", "Locale", "filterTags", "(List,Collection,Locale$FilteringMode)", "summary", "df-manual"] - ["java.util", "Locale", "forLanguageTag", "(String)", "summary", "manual"] + - ["java.util", "Locale", "getCountry", "()", "summary", "df-manual"] + - ["java.util", "Locale", "getDisplayCountry", "()", "summary", "df-manual"] + - ["java.util", "Locale", "getDisplayCountry", "(Locale)", "summary", "df-manual"] + - ["java.util", "Locale", "getDisplayCountry", "(Locale)", "summary", "df-manual"] + - ["java.util", "Locale", "getDisplayLanguage", "()", "summary", "df-manual"] + - ["java.util", "Locale", "getDisplayLanguage", "(Locale)", "summary", "df-manual"] + - ["java.util", "Locale", "getDisplayLanguage", "(Locale)", "summary", "df-manual"] + - ["java.util", "Locale", "getDisplayName", "()", "summary", "df-manual"] + - ["java.util", "Locale", "getDisplayName", "(Locale)", "summary", "df-manual"] + - ["java.util", "Locale", "getDisplayName", "(Locale)", "summary", "df-manual"] + - ["java.util", "Locale", "getDisplayScript", "()", "summary", "df-manual"] + - ["java.util", "Locale", "getDisplayScript", "(Locale)", "summary", "df-manual"] + - ["java.util", "Locale", "getDisplayScript", "(Locale)", "summary", "df-manual"] + - ["java.util", "Locale", "getDisplayVariant", "()", "summary", "df-manual"] + - ["java.util", "Locale", "getDisplayVariant", "(Locale)", "summary", "df-manual"] + - ["java.util", "Locale", "getDisplayVariant", "(Locale)", "summary", "df-manual"] + - ["java.util", "Locale", "getExtensionKeys", "()", "summary", "df-manual"] + - ["java.util", "Locale", "getISO3Language", "()", "summary", "df-manual"] + - ["java.util", "Locale", "getLanguage", "()", "summary", "df-manual"] + - ["java.util", "Locale", "getScript", "()", "summary", "df-manual"] + - ["java.util", "Locale", "getVariant", "()", "summary", "df-manual"] + - ["java.util", "Locale", "lookupTag", "(List,Collection)", "summary", "df-manual"] + - ["java.util", "Locale", "stripExtensions", "()", "summary", "df-manual"] + - ["java.util", "Locale", "toLanguageTag", "()", "summary", "df-manual"] - ["java.util", "Map", "containsKey", "(Object)", "summary", "manual"] - ["java.util", "Map", "isEmpty", "()", "summary", "manual"] - ["java.util", "Map", "size", "()", "summary", "manual"] @@ -465,6 +527,11 @@ extensions: - ["java.util", "Optional", "isPresent", "()", "summary", "manual"] - ["java.util", "Random", "nextInt", "(int)", "summary", "manual"] - ["java.util", "ResourceBundle", "getBundle", "", "summary", "df-manual"] + - ["java.util", "Scanner", "delimiter", "()", "summary", "df-manual"] + - ["java.util", "Scanner", "hasNext", "(Pattern)", "summary", "df-manual"] + - ["java.util", "Scanner", "hasNext", "(String)", "summary", "df-manual"] + - ["java.util", "Scanner", "ioException", "()", "summary", "df-manual"] + - ["java.util", "Scanner", "locale", "()", "summary", "df-manual"] - ["java.util", "Set", "contains", "(Object)", "summary", "manual"] - ["java.util", "Set", "isEmpty", "()", "summary", "manual"] - ["java.util", "Set", "size", "()", "summary", "manual"] diff --git a/java/ql/lib/ext/javax.crypto.spec.model.yml b/java/ql/lib/ext/javax.crypto.spec.model.yml index 2a88b6275fd..d2b7dbc99b8 100644 --- a/java/ql/lib/ext/javax.crypto.spec.model.yml +++ b/java/ql/lib/ext/javax.crypto.spec.model.yml @@ -31,3 +31,4 @@ extensions: extensible: neutralModel data: - ["javax.crypto.spec", "SecretKeySpec", "SecretKeySpec", "(byte[],String)", "summary", "df-manual"] + - ["javax.crypto.spec", "SecretKeySpec", "SecretKeySpec", "(byte[],int,int,String)", "summary", "df-manual"] diff --git a/java/ql/lib/ext/javax.portlet.model.yml b/java/ql/lib/ext/javax.portlet.model.yml new file mode 100644 index 00000000000..15d10886624 --- /dev/null +++ b/java/ql/lib/ext/javax.portlet.model.yml @@ -0,0 +1,6 @@ +extensions: + - addsTo: + pack: codeql/java-all + extensible: sinkModel + data: + - ["javax.portlet", "PortletContext", True, "getRequestDispatcher", "(String)", "", "Argument[0]", "url-forward", "manual"] diff --git a/java/ql/lib/ext/javax.servlet.http.model.yml b/java/ql/lib/ext/javax.servlet.http.model.yml index afac25e4bc8..ec35445d199 100644 --- a/java/ql/lib/ext/javax.servlet.http.model.yml +++ b/java/ql/lib/ext/javax.servlet.http.model.yml @@ -18,6 +18,8 @@ extensions: - ["javax.servlet.http", "HttpServletRequest", False, "getRemoteUser", "()", "", "ReturnValue", "remote", "manual"] - ["javax.servlet.http", "HttpServletRequest", False, "getRequestURI", "()", "", "ReturnValue", "remote", "manual"] - ["javax.servlet.http", "HttpServletRequest", False, "getRequestURL", "()", "", "ReturnValue", "remote", "manual"] + - ["javax.servlet.http", "HttpServletRequest", False, "getServletPath", "()", "", "ReturnValue", "remote", "manual"] + - addsTo: pack: codeql/java-all extensible: sinkModel diff --git a/java/ql/lib/ext/javax.servlet.model.yml b/java/ql/lib/ext/javax.servlet.model.yml index 581863c74f7..d27011c6e12 100644 --- a/java/ql/lib/ext/javax.servlet.model.yml +++ b/java/ql/lib/ext/javax.servlet.model.yml @@ -14,6 +14,8 @@ extensions: extensible: sinkModel data: - ["javax.servlet", "ServletContext", True, "getResourceAsStream", "(String)", "", "Argument[0]", "path-injection", "ai-manual"] + - ["javax.servlet", "ServletContext", True, "getRequestDispatcher", "(String)", "", "Argument[0]", "url-forward", "manual"] + - ["javax.servlet", "ServletRequest", True, "getRequestDispatcher", "(String)", "", "Argument[0]", "url-forward", "manual"] - addsTo: pack: codeql/java-all extensible: summaryModel diff --git a/java/ql/lib/ext/org.kohsuke.stapler.model.yml b/java/ql/lib/ext/org.kohsuke.stapler.model.yml index 63bbdbfd52a..ca9f08ba78c 100644 --- a/java/ql/lib/ext/org.kohsuke.stapler.model.yml +++ b/java/ql/lib/ext/org.kohsuke.stapler.model.yml @@ -9,7 +9,7 @@ extensions: - ["org.kohsuke.stapler", "HttpResponses", True, "staticResource", "(URL,long)", "", "Argument[0]", "request-forgery", "manual"] - ["org.kohsuke.stapler", "HttpResponses", True, "html", "(String)", "", "Argument[0]", "html-injection", "manual"] - ["org.kohsuke.stapler", "HttpResponses", True, "literalHtml", "(String)", "", "Argument[0]", "html-injection", "manual"] - - ["org.kohsuke.stapler", "StaplerResponse", True, "forward", "(Object,String,StaplerRequest)", "", "Argument[1]", "request-forgery", "manual"] + - ["org.kohsuke.stapler", "StaplerResponse", True, "forward", "(Object,String,StaplerRequest)", "", "Argument[1]", "url-forward", "manual"] - ["org.kohsuke.stapler", "StaplerResponse", True, "sendRedirect2", "(String)", "", "Argument[0]", "url-redirection", "manual"] - ["org.kohsuke.stapler", "StaplerResponse", True, "sendRedirect", "(int,String)", "", "Argument[1]", "url-redirection", "manual"] - ["org.kohsuke.stapler", "StaplerResponse", True, "sendRedirect", "(String)", "", "Argument[0]", "url-redirection", "manual"] diff --git a/java/ql/lib/ext/org.springframework.web.portlet.model.yml b/java/ql/lib/ext/org.springframework.web.portlet.model.yml new file mode 100644 index 00000000000..ba90b531c33 --- /dev/null +++ b/java/ql/lib/ext/org.springframework.web.portlet.model.yml @@ -0,0 +1,7 @@ +extensions: + - addsTo: + pack: codeql/java-all + extensible: sinkModel + data: + - ["org.springframework.web.portlet", "ModelAndView", False, "ModelAndView", "", "", "Argument[0]", "url-forward", "manual"] + - ["org.springframework.web.portlet", "ModelAndView", False, "setViewName", "", "", "Argument[0]", "url-forward", "manual"] diff --git a/java/ql/lib/ext/org.springframework.web.servlet.model.yml b/java/ql/lib/ext/org.springframework.web.servlet.model.yml new file mode 100644 index 00000000000..acdda3d569f --- /dev/null +++ b/java/ql/lib/ext/org.springframework.web.servlet.model.yml @@ -0,0 +1,7 @@ +extensions: + - addsTo: + pack: codeql/java-all + extensible: sinkModel + data: + - ["org.springframework.web.servlet", "ModelAndView", False, "ModelAndView", "", "", "Argument[0]", "url-forward", "manual"] + - ["org.springframework.web.servlet", "ModelAndView", False, "setViewName", "", "", "Argument[0]", "url-forward", "manual"] diff --git a/java/ql/lib/qlpack.yml b/java/ql/lib/qlpack.yml index 15b4982d41e..bf25e7e3a6d 100644 --- a/java/ql/lib/qlpack.yml +++ b/java/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-all -version: 0.8.10-dev +version: 0.9.1-dev groups: java dbscheme: config/semmlecode.dbscheme extractor: java @@ -13,7 +13,9 @@ dependencies: codeql/threat-models: ${workspace} codeql/tutorial: ${workspace} codeql/typetracking: ${workspace} + codeql/typeflow: ${workspace} codeql/util: ${workspace} + codeql/xml: ${workspace} dataExtensions: - ext/*.model.yml - ext/generated/*.model.yml diff --git a/java/ql/lib/semmle/code/java/ControlFlowGraph.qll b/java/ql/lib/semmle/code/java/ControlFlowGraph.qll index 24a506f21ce..f8e94dc7684 100644 --- a/java/ql/lib/semmle/code/java/ControlFlowGraph.qll +++ b/java/ql/lib/semmle/code/java/ControlFlowGraph.qll @@ -489,14 +489,14 @@ private module ControlFlowGraphImpl { private Stmt getSwitchStatement(SwitchBlock switch, int i) { result.isNthChildOf(switch, i) } /** - * Holds if `last` is the last node in a pattern case `pc`'s succeeding bind-and-test operation, + * Holds if `last` is the last node in any of pattern case `pc`'s succeeding bind-and-test operations, * immediately before either falling through to execute successor statements or execute a rule body * if present. `completion` is the completion kind of the last operation. */ private predicate lastPatternCaseMatchingOp( PatternCase pc, ControlFlowNode last, Completion completion ) { - last(pc.getPattern(), last, completion) and + last(pc.getAPattern(), last, completion) and completion = NormalCompletion() and not exists(pc.getGuard()) or @@ -776,6 +776,18 @@ private module ControlFlowGraphImpl { last(try.getFinally(), last, NormalCompletion()) } + private predicate isNextNormalSwitchStmt(SwitchBlock switch, Stmt pred, Stmt succ) { + exists(int i, Stmt immediateSucc | + getSwitchStatement(switch, i) = pred and + getSwitchStatement(switch, i + 1) = immediateSucc and + ( + if immediateSucc instanceof PatternCase + then isNextNormalSwitchStmt(switch, immediateSucc, succ) + else succ = immediateSucc + ) + ) + } + /** * Bind `last` to a cfg node nested inside `n` (or, indeed, `n` itself) such * that `last` may be the last node during an execution of `n` and finish @@ -927,9 +939,15 @@ private module ControlFlowGraphImpl { completion != anonymousBreakCompletion() and not completion instanceof NormalOrBooleanCompletion or - // if the last case completes normally, then so does the switch - last(switch.getStmt(strictcount(switch.getAStmt()) - 1), last, NormalCompletion()) and - completion = NormalCompletion() + // if a statement without a non-pattern-case successor completes normally (or for a pattern case + // the guard succeeds) then the switch completes normally. + exists(Stmt lastNormalStmt, Completion stmtCompletion | + lastNormalStmt = getSwitchStatement(switch, _) and + not isNextNormalSwitchStmt(switch, lastNormalStmt, _) and + last(lastNormalStmt, last, stmtCompletion) and + (stmtCompletion = NormalCompletion() or stmtCompletion = BooleanCompletion(true, _)) and + completion = NormalCompletion() + ) or // if no default case exists, then normal completion of the expression may terminate the switch // Note this can't happen if there are pattern cases or a null literal, as @@ -973,9 +991,9 @@ private module ControlFlowGraphImpl { ) or // A pattern case statement can complete: - // * On failure of its type test (boolean false) + // * On failure of its final type test (boolean false) // * On failure of its guard test if any (boolean false) - // * On completion of its variable declarations, if it is not a rule and has no guard (normal completion) + // * On completion of one of its pattern variable declarations, if it is not a rule and has no guard (normal completion) // * On success of its guard test, if it is not a rule (boolean true) // (the latter two cases are accounted for by lastPatternCaseMatchingOp) exists(PatternCase pc | n = pc | @@ -1315,9 +1333,13 @@ private module ControlFlowGraphImpl { // Note this includes non-rule case statements and the successful pattern match successor // of a non-rule pattern case statement. Rule case statements do not complete normally // (they always break or yield). - exists(int i | - last(getSwitchStatement(switch, i), n, completion) and - result = first(getSwitchStatement(switch, i + 1)) and + // Exception: falling through into a pattern case statement (which necessarily does not + // declare any named variables) must skip one or more such statements, otherwise we would + // incorrectly apply their type test and/or guard. + exists(Stmt pred, Stmt succ | + isNextNormalSwitchStmt(switch, pred, succ) and + last(pred, n, completion) and + result = first(succ) and (completion = NormalCompletion() or completion = BooleanCompletion(true, _)) ) or @@ -1328,16 +1350,19 @@ private module ControlFlowGraphImpl { ) or // Pattern cases have internal edges: - // * Type test success -true-> variable declarations + // * Type test success -true-> one of the possible sets of variable declarations + // n.b. for unnamed patterns (e.g. case A _, B _) this means that *one* of the + // type tests has succeeded. There aren't enough nodes in the AST to describe + // a sequential test in detail, so CFG consumers have to watch out for this case. // * Variable declarations -normal-> guard evaluation // * Variable declarations -normal-> rule execution (when there is no guard) // * Guard success -true-> rule execution exists(PatternCase pc | n = pc and completion = basicBooleanCompletion(true) and - result = first(pc.getPattern()) + result = first(pc.getAPattern()) or - last(pc.getPattern(), n, completion) and + last(pc.getAPattern(), n, completion) and completion = NormalCompletion() and result = first(pc.getGuard()) or diff --git a/java/ql/lib/semmle/code/java/Dependency.qll b/java/ql/lib/semmle/code/java/Dependency.qll index 1bdf0140079..29dc81a1960 100644 --- a/java/ql/lib/semmle/code/java/Dependency.qll +++ b/java/ql/lib/semmle/code/java/Dependency.qll @@ -84,7 +84,7 @@ predicate depends(RefType t, RefType dep) { or // A type accessed in a pattern-switch case statement in `t`. exists(PatternCase pc | t = pc.getEnclosingCallable().getDeclaringType() | - usesType(pc.getPattern().getAChildExpr*().getType(), dep) + usesType(pc.getAPattern().getAChildExpr*().getType(), dep) ) ) } diff --git a/java/ql/lib/semmle/code/java/DependencyCounts.qll b/java/ql/lib/semmle/code/java/DependencyCounts.qll index ca0acdedcde..464f8847188 100644 --- a/java/ql/lib/semmle/code/java/DependencyCounts.qll +++ b/java/ql/lib/semmle/code/java/DependencyCounts.qll @@ -107,7 +107,7 @@ predicate numDepends(RefType t, RefType dep, int value) { or // the type accessed in a pattern-switch case statement in `t`. exists(PatternCase pc | elem = pc and t = pc.getEnclosingCallable().getDeclaringType() | - usesType(pc.getPattern().getAChildExpr*().getType(), dep) + usesType(pc.getAPattern().getAChildExpr*().getType(), dep) ) ) } diff --git a/java/ql/lib/semmle/code/java/Expr.qll b/java/ql/lib/semmle/code/java/Expr.qll index 3442855a91a..e0208b4df9e 100644 --- a/java/ql/lib/semmle/code/java/Expr.qll +++ b/java/ql/lib/semmle/code/java/Expr.qll @@ -1590,7 +1590,9 @@ class InstanceOfExpr extends Expr, @instanceofexpr { * Note that this won't get anything when record pattern matching is used-- for more general patterns, * use `getPattern`. */ - LocalVariableDeclExpr getLocalVariableDeclExpr() { result = this.getPattern().asBindingPattern() } + LocalVariableDeclExpr getLocalVariableDeclExpr() { + result = this.getPattern().asBindingOrUnnamedPattern() + } /** * Gets the access to the type on the right-hand side of the `instanceof` operator. @@ -1681,7 +1683,10 @@ class LocalVariableDeclExpr extends Expr, @localvariabledeclexpr { or exists(InstanceOfExpr ioe | this.getParent() = ioe | result.isNthChildOf(ioe, 1)) or - exists(PatternCase pc | this.getParent() = pc | result.isNthChildOf(pc, -2)) + exists(PatternCase pc, int index, int typeAccessIdx | this.isNthChildOf(pc, index) | + (if index = 0 then typeAccessIdx = -2 else typeAccessIdx = (-3 - index)) and + result.isNthChildOf(pc, typeAccessIdx) + ) or exists(RecordPatternExpr rpe, int index | this.isNthChildOf(rpe, index) and result.isNthChildOf(rpe, -(index + 1)) @@ -1691,6 +1696,9 @@ class LocalVariableDeclExpr extends Expr, @localvariabledeclexpr { /** Gets the name of the variable declared by this local variable declaration expression. */ string getName() { result = this.getVariable().getName() } + /** Holds if this is an anonymous local variable, `_` */ + predicate isAnonymous() { this.getName() = "" } + /** * Gets the switch statement or expression whose pattern declares this identifier, if any. */ @@ -1700,7 +1708,7 @@ class LocalVariableDeclExpr extends Expr, @localvariabledeclexpr { or pc = result.(SwitchExpr).getAPatternCase() | - this = pc.getPattern().getAChildExpr*() + this = pc.getAPattern().getAChildExpr*() ) } @@ -1739,17 +1747,17 @@ class LocalVariableDeclExpr extends Expr, @localvariabledeclexpr { or exists(SwitchStmt switch | result = switch.getExpr() and - this = switch.getAPatternCase().getPattern().asBindingPattern() + this = switch.getAPatternCase().getAPattern().asBindingOrUnnamedPattern() ) or exists(SwitchExpr switch | result = switch.getExpr() and - this = switch.getAPatternCase().getPattern().asBindingPattern() + this = switch.getAPatternCase().getAPattern().asBindingOrUnnamedPattern() ) or exists(InstanceOfExpr ioe | result = ioe.getExpr() and - this = ioe.getPattern().asBindingPattern() + this = ioe.getPattern().asBindingOrUnnamedPattern() ) } @@ -1763,7 +1771,9 @@ class LocalVariableDeclExpr extends Expr, @localvariabledeclexpr { } /** Gets a printable representation of this expression. */ - override string toString() { result = this.getName() } + override string toString() { + if this.getName() = "" then result = "" else result = this.getName() + } override string getAPrimaryQlClass() { result = "LocalVariableDeclExpr" } } @@ -2671,9 +2681,9 @@ class NotNullExpr extends UnaryExpr, @notnullexpr { } /** - * A binding or record pattern. + * A binding, unnamed or record pattern. * - * Note binding patterns are represented as `LocalVariableDeclExpr`s. + * Note binding and unnamed patterns are represented as `LocalVariableDeclExpr`s. */ class PatternExpr extends Expr { PatternExpr() { @@ -2686,9 +2696,14 @@ class PatternExpr extends Expr { } /** - * Gets this pattern cast to a binding pattern. + * Gets this pattern cast to a binding or unnamed pattern. */ - LocalVariableDeclExpr asBindingPattern() { result = this } + LocalVariableDeclExpr asBindingOrUnnamedPattern() { result = this } + + /** + * DEPRECATED: alias for `asBindingOrUnnamedPattern`. + */ + deprecated LocalVariableDeclExpr asBindingPattern() { result = this.asBindingOrUnnamedPattern() } /** * Gets this pattern cast to a record pattern. @@ -2724,4 +2739,14 @@ class RecordPatternExpr extends Expr, @recordpatternexpr { ) ) } + + /** + * Holds if this record pattern declares any identifiers (i.e., at least one leaf declaration is named). + */ + predicate declaresAnyIdentifiers() { + exists(PatternExpr subPattern | subPattern = this.getSubPattern(_) | + subPattern.asRecordPattern().declaresAnyIdentifiers() or + not subPattern.asBindingOrUnnamedPattern().isAnonymous() + ) + } } diff --git a/java/ql/lib/semmle/code/java/JDK.qll b/java/ql/lib/semmle/code/java/JDK.qll index 7623cc87393..55d420dbcae 100644 --- a/java/ql/lib/semmle/code/java/JDK.qll +++ b/java/ql/lib/semmle/code/java/JDK.qll @@ -38,6 +38,13 @@ class StringLengthMethod extends Method { StringLengthMethod() { this.hasName("length") and this.getDeclaringType() instanceof TypeString } } +/** The `contains()` method of the class `java.lang.String`. */ +class StringContainsMethod extends Method { + StringContainsMethod() { + this.hasName("contains") and this.getDeclaringType() instanceof TypeString + } +} + /** * The methods on the class `java.lang.String` that are used to perform partial matches with a specified substring or char. */ diff --git a/java/ql/lib/semmle/code/java/PrettyPrintAst.qll b/java/ql/lib/semmle/code/java/PrettyPrintAst.qll index 6a5e5aa698b..de1bf3100a3 100644 --- a/java/ql/lib/semmle/code/java/PrettyPrintAst.qll +++ b/java/ql/lib/semmle/code/java/PrettyPrintAst.qll @@ -386,7 +386,7 @@ private class PpInstanceOfExpr extends PpAst, InstanceOfExpr { i = 3 and result = " " and this.getPattern() instanceof LocalVariableDeclExpr or i = 4 and - result = this.getPattern().asBindingPattern().getName() + result = this.getPattern().asBindingOrUnnamedPattern().getName() } override PpAst getChild(int i) { @@ -400,7 +400,8 @@ private class PpInstanceOfExpr extends PpAst, InstanceOfExpr { private class PpLocalVariableDeclExpr extends PpAst, LocalVariableDeclExpr { override string getPart(int i) { - i = 0 and result = this.getName() + i = 0 and + (if this.isAnonymous() then result = "_" else result = this.getName()) or i = 1 and result = " = " and exists(this.getInit()) } @@ -782,28 +783,54 @@ private class PpSwitchCase extends PpAst, SwitchCase { } private class PpPatternCase extends PpAst, PatternCase { + private predicate isAnonymousPattern(int n) { + this.getPattern(n).asBindingOrUnnamedPattern().isAnonymous() + } + override string getPart(int i) { - i = 0 and result = "case " + exists(int n, int base | exists(this.getPattern(n)) and base = n * 4 | + i = base and + (if n = 0 then result = "case " else result = ", ") + or + i = base + 2 and + this.getPattern(n) instanceof LocalVariableDeclExpr and + ( + exists(this.getPattern(n).asBindingOrUnnamedPattern().getTypeAccess()) + or + not this.isAnonymousPattern(n) + ) and + result = " " + or + i = base + 3 and + ( + if this.isAnonymousPattern(n) + then result = "_" + else result = this.getPattern(n).asBindingOrUnnamedPattern().getName() + ) + ) or - i = 2 and this.getPattern() instanceof LocalVariableDeclExpr and result = " " - or - i = 3 and result = this.getPattern().asBindingPattern().getName() - or - i = 4 and result = ":" and not this.isRule() - or - i = 4 and result = " -> " and this.isRule() - or - i = 6 and result = ";" and exists(this.getRuleExpression()) + exists(int base | base = (max(int n | exists(this.getPattern(n))) + 1) * 4 | + i = base and result = ":" and not this.isRule() + or + i = base and result = " -> " and this.isRule() + or + i = base + 2 and result = ";" and exists(this.getRuleExpression()) + ) } override PpAst getChild(int i) { - i = 1 and result = this.getPattern().asBindingPattern().getTypeAccess() + exists(int n, int base | exists(this.getPattern(n)) and base = n * 4 | + i = base + 1 and + result = this.getPattern(n).asBindingOrUnnamedPattern().getTypeAccess() + or + i = base + 1 and result = this.getPattern(n).asRecordPattern() + ) or - i = 1 and result = this.getPattern().asRecordPattern() - or - i = 5 and result = this.getRuleExpression() - or - i = 5 and result = this.getRuleStatement() + exists(int base | base = (max(int n | exists(this.getPattern(n))) + 1) * 4 | + i = base + 1 and result = this.getRuleExpression() + or + i = base + 1 and result = this.getRuleStatement() + ) } } diff --git a/java/ql/lib/semmle/code/java/PrintAst.qll b/java/ql/lib/semmle/code/java/PrintAst.qll index 4315e66ec06..0af012234bb 100644 --- a/java/ql/lib/semmle/code/java/PrintAst.qll +++ b/java/ql/lib/semmle/code/java/PrintAst.qll @@ -117,7 +117,11 @@ private newtype TPrintAstNode = TElementNode(Element el) { shouldPrint(el, _) } or TForInitNode(ForStmt fs) { shouldPrint(fs, _) and exists(fs.getAnInit()) } or TLocalVarDeclNode(LocalVariableDeclExpr lvde) { - shouldPrint(lvde, _) and lvde.getParent() instanceof SingleLocalVarDeclParent + shouldPrint(lvde, _) and + ( + lvde.getParent() instanceof SingleLocalVarDeclParent or + lvde.getParent() instanceof PatternCase + ) } or TAnnotationsNode(Annotatable ann) { shouldPrint(ann, _) and @@ -415,6 +419,23 @@ final class ForStmtNode extends ExprStmtNode { } } +/** + * A node representing a `PatternCase`. + */ +final class PatternCaseNode extends ExprStmtNode { + PatternCase pc; + + PatternCaseNode() { pc = element } + + override PrintAstNode getChild(int childIndex) { + result = super.getChild(childIndex) and + not result.(ElementNode).getElement() instanceof LocalVariableDeclExpr and + not result.(ElementNode).getElement() instanceof TypeAccess + or + result = TLocalVarDeclNode(pc.getPattern(childIndex)) + } +} + /** * An element that can be the parent of up to one `LocalVariableDeclExpr` for which we want * to use a synthetic node to hold the variable declaration and its `TypeAccess`. @@ -423,8 +444,7 @@ private class SingleLocalVarDeclParent extends ExprOrStmt { SingleLocalVarDeclParent() { this instanceof EnhancedForStmt or this instanceof CatchClause or - this.(InstanceOfExpr).isPattern() or - this instanceof PatternCase + this.(InstanceOfExpr).isPattern() } /** Gets the variable declaration that this element contains */ @@ -439,7 +459,7 @@ private class SingleLocalVarDeclParent extends ExprOrStmt { * want to use a synthetic node to variable declaration and its type access. * * Excludes `LocalVariableDeclStmt` and `ForStmt`, as they can hold multiple declarations. - * For these cases, either a synthetic node is not necassary or a different synthetic node is used. + * For these cases, either a synthetic node is not necessary or a different synthetic node is used. */ final class SingleLocalVarDeclParentNode extends ExprStmtNode { SingleLocalVarDeclParent lvdp; @@ -643,7 +663,11 @@ final class LocalVarDeclSynthNode extends PrintAstNode, TLocalVarDeclNode { LocalVarDeclSynthNode() { this = TLocalVarDeclNode(lvde) } - override string toString() { result = "(Single Local Variable Declaration)" } + override string toString() { + if lvde.getParent() instanceof PatternCase + then result = "(Pattern case declaration)" + else result = "(Single Local Variable Declaration)" + } override ElementNode getChild(int childIndex) { childIndex = 0 and diff --git a/java/ql/lib/semmle/code/java/Statement.qll b/java/ql/lib/semmle/code/java/Statement.qll index 05d105e4de3..f4eafd39e9f 100644 --- a/java/ql/lib/semmle/code/java/Statement.qll +++ b/java/ql/lib/semmle/code/java/Statement.qll @@ -539,12 +539,27 @@ class ConstCase extends SwitchCase { /** A pattern case of a `switch` statement */ class PatternCase extends SwitchCase { - PatternExpr pattern; + PatternCase() { exists(PatternExpr pe | pe.isNthChildOf(this, _)) } - PatternCase() { pattern.isNthChildOf(this, 0) } + /** + * DEPRECATED: alias for getPattern(0) + */ + deprecated PatternExpr getPattern() { result = this.getPattern(0) } - /** Gets this case's pattern. */ - PatternExpr getPattern() { result = pattern } + /** + * Gets this case's `n`th pattern. + */ + PatternExpr getPattern(int n) { result.isNthChildOf(this, n) } + + /** + * Gets any of this case's patterns. + */ + PatternExpr getAPattern() { result = this.getPattern(_) } + + /** + * Gets this case's sole pattern, if there is exactly one. + */ + PatternExpr getUniquePattern() { result = unique(PatternExpr pe | pe = this.getAPattern()) } /** Gets the guard applicable to this pattern case, if any. */ Expr getGuard() { result.isNthChildOf(this, -3) } diff --git a/java/ql/lib/semmle/code/java/Variable.qll b/java/ql/lib/semmle/code/java/Variable.qll index 8ed650d5f16..a4cf09df055 100644 --- a/java/ql/lib/semmle/code/java/Variable.qll +++ b/java/ql/lib/semmle/code/java/Variable.qll @@ -58,7 +58,13 @@ class LocalVariableDecl extends @localvar, LocalScopeVariable { /** Gets the callable in which this declaration occurs. */ Callable getEnclosingCallable() { result = this.getCallable() } - override string toString() { result = this.getType().getName() + " " + this.getName() } + override string toString() { + exists(string sourceName | + if this.getName() = "" then sourceName = "_" else sourceName = this.getName() + | + result = this.getType().getName() + " " + sourceName + ) + } /** Gets the initializer expression of this local variable declaration. */ override Expr getInitializer() { result = this.getDeclExpr().getInit() } @@ -117,4 +123,11 @@ class Parameter extends Element, @param, LocalScopeVariable { } override string getAPrimaryQlClass() { result = "Parameter" } + + override string toString() { + if this.getName() = "" then result = "" else result = super.toString() + } + + /** Holds if this is an anonymous parameter, `_` */ + predicate isAnonymous() { this.getName() = "" } } diff --git a/java/ql/lib/semmle/code/java/controlflow/Guards.qll b/java/ql/lib/semmle/code/java/controlflow/Guards.qll index a97cf1f8f57..0d0ecd5b2ea 100644 --- a/java/ql/lib/semmle/code/java/controlflow/Guards.qll +++ b/java/ql/lib/semmle/code/java/controlflow/Guards.qll @@ -115,8 +115,24 @@ private predicate isNonFallThroughPredecessor(SwitchCase sc, ControlFlowNode pre ( pred.(Expr).getParent*() = sc.getSelectorExpr() or - pred.(Expr).getParent*() = getClosestPrecedingPatternCase(sc).getGuard() + // Ambiguous: in the case of `case String _ when x: case "SomeConstant":`, the guard `x` + // passing edge will fall through into the constant case, and the guard failing edge + // will test if the selector equals `"SomeConstant"` and if so branch to the same + // case statement. Therefore don't label this a non-fall-through predecessor. + exists(PatternCase previousPatternCase | + previousPatternCase = getClosestPrecedingPatternCase(sc) + | + pred.(Expr).getParent*() = previousPatternCase.getGuard() and + // Check there is any statement in between the previous pattern case and this one, + // or the case is a rule, so there is no chance of a fall-through. + ( + previousPatternCase.isRule() or + not previousPatternCase.getIndex() = sc.getIndex() - 1 + ) + ) or + // Unambigious: on the test-passing edge there must be at least one intervening + // declaration node, including anonymous `_` declarations. pred = getClosestPrecedingPatternCase(sc) ) } @@ -201,13 +217,13 @@ class Guard extends ExprParent { or exists(PatternCase pc | this = pc | pc.getSelectorExpr() = testedExpr and - testedType = pc.getPattern().getType() + testedType = pc.getUniquePattern().getType() ) ) and ( if exists(RecordPatternExpr rpe | - rpe = [this.(InstanceOfExpr).getPattern(), this.(PatternCase).getPattern()] + rpe = [this.(InstanceOfExpr).getPattern(), this.(PatternCase).getAPattern()] | not rpe.isUnrestricted() ) diff --git a/java/ql/lib/semmle/code/java/dataflow/TypeFlow.qll b/java/ql/lib/semmle/code/java/dataflow/TypeFlow.qll index ea0df55d60f..9dfe44ad5b5 100644 --- a/java/ql/lib/semmle/code/java/dataflow/TypeFlow.qll +++ b/java/ql/lib/semmle/code/java/dataflow/TypeFlow.qll @@ -8,747 +8,349 @@ * explicit or implicit cast that lost type information. */ -import java +import java as J private import semmle.code.java.dispatch.VirtualDispatch private import semmle.code.java.dataflow.internal.BaseSSA private import semmle.code.java.controlflow.Guards +private import codeql.typeflow.TypeFlow -private newtype TTypeFlowNode = - TField(Field f) { not f.getType() instanceof PrimitiveType } or - TSsa(BaseSsaVariable ssa) { not ssa.getSourceVariable().getType() instanceof PrimitiveType } or - TExpr(Expr e) or - TMethod(Method m) { not m.getReturnType() instanceof PrimitiveType } +private module Input implements TypeFlowInput { + private newtype TTypeFlowNode = + TField(Field f) { not f.getType() instanceof PrimitiveType } or + TSsa(BaseSsaVariable ssa) { not ssa.getSourceVariable().getType() instanceof PrimitiveType } or + TExpr(Expr e) or + TMethod(Method m) { not m.getReturnType() instanceof PrimitiveType } -/** - * A `Field`, `BaseSsaVariable`, `Expr`, or `Method`. - */ -private class TypeFlowNode extends TTypeFlowNode { - string toString() { - result = this.asField().toString() or - result = this.asSsa().toString() or - result = this.asExpr().toString() or - result = this.asMethod().toString() - } - - Location getLocation() { - result = this.asField().getLocation() or - result = this.asSsa().getLocation() or - result = this.asExpr().getLocation() or - result = this.asMethod().getLocation() - } - - Field asField() { this = TField(result) } - - BaseSsaVariable asSsa() { this = TSsa(result) } - - Expr asExpr() { this = TExpr(result) } - - Method asMethod() { this = TMethod(result) } - - RefType getType() { - result = this.asField().getType() or - result = this.asSsa().getSourceVariable().getType() or - result = boxIfNeeded(this.asExpr().getType()) or - result = this.asMethod().getReturnType() - } -} - -/** Gets `t` if it is a `RefType` or the boxed type if `t` is a primitive type. */ -private RefType boxIfNeeded(Type t) { - t.(PrimitiveType).getBoxedType() = result or - result = t -} - -/** - * Holds if `arg` is an argument for the parameter `p` in a private callable. - */ -private predicate privateParamArg(Parameter p, Argument arg) { - p.getAnArgument() = arg and - p.getCallable().isPrivate() -} - -/** - * Holds if data can flow from `n1` to `n2` in one step, and `n1` is not - * necessarily functionally determined by `n2`. - */ -private predicate joinStep0(TypeFlowNode n1, TypeFlowNode n2) { - n2.asExpr().(ChooseExpr).getAResultExpr() = n1.asExpr() - or - exists(Field f, Expr e | - f = n2.asField() and - f.getAnAssignedValue() = e and - e = n1.asExpr() and - not e.(FieldAccess).getField() = f - ) - or - n2.asSsa().(BaseSsaPhiNode).getAnUltimateLocalDefinition() = n1.asSsa() - or - exists(ReturnStmt ret | - n2.asMethod() = ret.getEnclosingCallable() and ret.getResult() = n1.asExpr() - ) - or - viableImpl_v1(n2.asExpr()) = n1.asMethod() - or - exists(Argument arg, Parameter p | - privateParamArg(p, arg) and - n1.asExpr() = arg and - n2.asSsa().(BaseSsaImplicitInit).isParameterDefinition(p) and - // skip trivial recursion - not arg = n2.asSsa().getAUse() - ) -} - -/** - * Holds if data can flow from `n1` to `n2` in one step, and `n1` is - * functionally determined by `n2`. - */ -private predicate step(TypeFlowNode n1, TypeFlowNode n2) { - n2.asExpr() = n1.asField().getAnAccess() - or - n2.asExpr() = n1.asSsa().getAUse() - or - n2.asExpr().(CastingExpr).getExpr() = n1.asExpr() and - not n2.asExpr().getType() instanceof PrimitiveType - or - n2.asExpr().(AssignExpr).getSource() = n1.asExpr() and - not n2.asExpr().getType() instanceof PrimitiveType - or - n2.asSsa().(BaseSsaUpdate).getDefiningExpr().(VariableAssign).getSource() = n1.asExpr() - or - n2.asSsa().(BaseSsaImplicitInit).captures(n1.asSsa()) -} - -/** - * Holds if `null` is the only value that flows to `n`. - */ -private predicate isNull(TypeFlowNode n) { - n.asExpr() instanceof NullLiteral - or - exists(LocalVariableDeclExpr decl | - n.asSsa().(BaseSsaUpdate).getDefiningExpr() = decl and - not decl.hasImplicitInit() and - not exists(decl.getInit()) - ) - or - exists(TypeFlowNode mid | isNull(mid) and step(mid, n)) - or - forex(TypeFlowNode mid | joinStep0(mid, n) | isNull(mid)) and - // Fields that are never assigned a non-null value are probably set by - // reflection and are thus not always null. - not exists(n.asField()) -} - -/** - * Holds if data can flow from `n1` to `n2` in one step, `n1` is not necessarily - * functionally determined by `n2`, and `n1` might take a non-null value. - */ -private predicate joinStep(TypeFlowNode n1, TypeFlowNode n2) { - joinStep0(n1, n2) and not isNull(n1) -} - -private predicate anyStep(TypeFlowNode n1, TypeFlowNode n2) { joinStep(n1, n2) or step(n1, n2) } - -private predicate sccEdge(TypeFlowNode n1, TypeFlowNode n2) { anyStep(n1, n2) and anyStep+(n2, n1) } - -private module Scc = QlBuiltins::EquivalenceRelation; - -private class TypeFlowScc = Scc::EquivalenceClass; - -/** Holds if `n` is part of an SCC of size 2 or more represented by `scc`. */ -private predicate sccRepr(TypeFlowNode n, TypeFlowScc scc) { scc = Scc::getEquivalenceClass(n) } - -private predicate sccJoinStep(TypeFlowNode n, TypeFlowScc scc) { - exists(TypeFlowNode mid | - joinStep(n, mid) and - sccRepr(mid, scc) and - not sccRepr(n, scc) - ) -} - -private signature class NodeSig; - -private signature module Edge { - class Node; - - predicate edge(TypeFlowNode n1, Node n2); -} - -private signature module RankedEdge { - predicate edgeRank(int r, TypeFlowNode n1, Node n2); - - int lastRank(Node n); -} - -private module RankEdge implements RankedEdge { - private import E - - /** - * Holds if `r` is a ranking of the incoming edges `(n1,n2)` to `n2`. The used - * ordering is not necessarily total, so the ranking may have gaps. - */ - private predicate edgeRank1(int r, TypeFlowNode n1, Node n2) { - n1 = - rank[r](TypeFlowNode n | - edge(n, n2) - | - n order by n.getLocation().getStartLine(), n.getLocation().getStartColumn() - ) + /** Gets `t` if it is a `RefType` or the boxed type if `t` is a primitive type. */ + private RefType boxIfNeeded(J::Type t) { + t.(PrimitiveType).getBoxedType() = result or + result = t } /** - * Holds if `r2` is a ranking of the ranks from `edgeRank1`. This removes the - * gaps from the ranking. + * A `Field`, `BaseSsaVariable`, `Expr`, or `Method`. */ - private predicate edgeRank2(int r2, int r1, Node n) { - r1 = rank[r2](int r | edgeRank1(r, _, n) | r) + class TypeFlowNode extends TTypeFlowNode { + string toString() { + result = this.asField().toString() or + result = this.asSsa().toString() or + result = this.asExpr().toString() or + result = this.asMethod().toString() + } + + Location getLocation() { + result = this.asField().getLocation() or + result = this.asSsa().getLocation() or + result = this.asExpr().getLocation() or + result = this.asMethod().getLocation() + } + + Field asField() { this = TField(result) } + + BaseSsaVariable asSsa() { this = TSsa(result) } + + Expr asExpr() { this = TExpr(result) } + + Method asMethod() { this = TMethod(result) } + + RefType getType() { + result = this.asField().getType() or + result = this.asSsa().getSourceVariable().getType() or + result = boxIfNeeded(this.asExpr().getType()) or + result = this.asMethod().getReturnType() + } } - /** Holds if `r` is a ranking of the incoming edges `(n1,n2)` to `n2`. */ - predicate edgeRank(int r, TypeFlowNode n1, Node n2) { - exists(int r1 | - edgeRank1(r1, n1, n2) and - edgeRank2(r, r1, n2) + class Type = RefType; + + /** + * Holds if `arg` is an argument for the parameter `p` in a private callable. + */ + private predicate privateParamArg(Parameter p, Argument arg) { + p.getAnArgument() = arg and + p.getCallable().isPrivate() + } + + /** + * Holds if data can flow from `n1` to `n2` in one step, and `n1` is not + * necessarily functionally determined by `n2`. + */ + predicate joinStep(TypeFlowNode n1, TypeFlowNode n2) { + n2.asExpr().(ChooseExpr).getAResultExpr() = n1.asExpr() + or + exists(Field f, Expr e | + f = n2.asField() and + f.getAnAssignedValue() = e and + e = n1.asExpr() and + not e.(FieldAccess).getField() = f + ) + or + n2.asSsa().(BaseSsaPhiNode).getAnUltimateLocalDefinition() = n1.asSsa() + or + exists(ReturnStmt ret | + n2.asMethod() = ret.getEnclosingCallable() and ret.getResult() = n1.asExpr() + ) + or + viableImpl_v1(n2.asExpr()) = n1.asMethod() + or + exists(Argument arg, Parameter p | + privateParamArg(p, arg) and + n1.asExpr() = arg and + n2.asSsa().(BaseSsaImplicitInit).isParameterDefinition(p) and + // skip trivial recursion + not arg = n2.asSsa().getAUse() ) } - int lastRank(Node n) { result = max(int r | edgeRank(r, _, n)) } -} - -private signature module TypePropagation { - class Typ; - - predicate candType(TypeFlowNode n, Typ t); - - bindingset[t] - predicate supportsType(TypeFlowNode n, Typ t); -} - -/** Implements recursion through `forall` by way of edge ranking. */ -private module ForAll E, TypePropagation T> { /** - * Holds if `t` is a bound that holds on one of the incoming edges to `n` and - * thus is a candidate bound for `n`. + * Holds if data can flow from `n1` to `n2` in one step, and `n1` is + * functionally determined by `n2`. + */ + predicate step(TypeFlowNode n1, TypeFlowNode n2) { + n2.asExpr() = n1.asField().getAnAccess() + or + n2.asExpr() = n1.asSsa().getAUse() + or + n2.asExpr().(CastingExpr).getExpr() = n1.asExpr() and + not n2.asExpr().getType() instanceof PrimitiveType + or + n2.asExpr().(AssignExpr).getSource() = n1.asExpr() and + not n2.asExpr().getType() instanceof PrimitiveType + or + n2.asSsa().(BaseSsaUpdate).getDefiningExpr().(VariableAssign).getSource() = n1.asExpr() + or + n2.asSsa().(BaseSsaImplicitInit).captures(n1.asSsa()) + } + + /** + * Holds if `null` is the only value that flows to `n`. + */ + predicate isNullValue(TypeFlowNode n) { + n.asExpr() instanceof NullLiteral + or + exists(LocalVariableDeclExpr decl | + n.asSsa().(BaseSsaUpdate).getDefiningExpr() = decl and + not decl.hasImplicitInit() and + not exists(decl.getInit()) + ) + } + + predicate isExcludedFromNullAnalysis(TypeFlowNode n) { + // Fields that are never assigned a non-null value are probably set by + // reflection and are thus not always null. + exists(n.asField()) + } + + predicate exactTypeBase(TypeFlowNode n, RefType t) { + exists(ClassInstanceExpr e | + n.asExpr() = e and + e.getType() = t and + not e instanceof FunctionalExpr and + exists(SrcRefType sub | sub.getASourceSupertype() = t.getSourceDeclaration()) + ) + } + + /** + * Holds if `n` occurs in a position where type information might be discarded; + * `t1` is the type of `n`, `t1e` is the erasure of `t1`, `t2` is the type of + * the implicit or explicit cast, and `t2e` is the erasure of `t2`. */ pragma[nomagic] - private predicate candJoinType(Node n, T::Typ t) { - exists(TypeFlowNode mid | - T::candType(mid, t) and - E::edgeRank(_, mid, n) + private predicate upcastCand(TypeFlowNode n, RefType t1, RefType t1e, RefType t2, RefType t2e) { + exists(TypeFlowNode next | step(n, next) or joinStep(n, next) | + n.getType() = t1 and + next.getType() = t2 and + t1.getErasure() = t1e and + t2.getErasure() = t2e and + t1 != t2 ) } - /** - * Holds if `t` is a candidate bound for `n` that is also valid for data coming - * through the edges into `n` ranked from `1` to `r`. - */ - private predicate flowJoin(int r, Node n, T::Typ t) { - ( - r = 1 and candJoinType(n, t) + /** Holds if `n` occurs in a position where type information is discarded. */ + private predicate upcast(TypeFlowNode n, RefType t1) { + exists(RefType t1e, RefType t2, RefType t2e | upcastCand(n, t1, t1e, t2, t2e) | + t1e.getASourceSupertype+() = t2e or - flowJoin(r - 1, n, t) and E::edgeRank(r, _, n) - ) and - forall(TypeFlowNode mid | E::edgeRank(r, mid, n) | T::supportsType(mid, t)) + t1e = t2e and + unbound(t2) and + not unbound(t1) + ) + } + + /** Gets the element type of an array or subtype of `Iterable`. */ + private J::Type elementType(RefType t) { + result = t.(Array).getComponentType() + or + exists(ParameterizedType it | + it.getSourceDeclaration().hasQualifiedName("java.lang", "Iterable") and + result = it.getATypeArgument() and + t.extendsOrImplements*(it) + ) + } + + private predicate upcastEnhancedForStmtAux(BaseSsaUpdate v, RefType t, RefType t1, RefType t2) { + exists(EnhancedForStmt for | + for.getVariable() = v.getDefiningExpr() and + v.getSourceVariable().getType().getErasure() = t2 and + t = boxIfNeeded(elementType(for.getExpr().getType())) and + t.getErasure() = t1 + ) } /** - * Holds if `t` is a candidate bound for `n` that is also valid for data - * coming through all the incoming edges, and therefore is a valid bound for - * `n`. + * Holds if `v` is the iteration variable of an enhanced for statement, `t` is + * the type of the elements being iterated over, and this type is more precise + * than the type of `v`. */ - predicate flowJoin(Node n, T::Typ t) { flowJoin(E::lastRank(n), n, t) } -} + private predicate upcastEnhancedForStmt(BaseSsaUpdate v, RefType t) { + exists(RefType t1, RefType t2 | + upcastEnhancedForStmtAux(v, t, t1, t2) and + t1.getASourceSupertype+() = t2 + ) + } -private module JoinStep implements Edge { - class Node = TypeFlowNode; + private predicate downcastSuccessorAux( + CastingExpr cast, BaseSsaVariable v, RefType t, RefType t1, RefType t2 + ) { + cast.getExpr() = v.getAUse() and + t = cast.getType() and + t1 = t.getErasure() and + t2 = v.getSourceVariable().getType().getErasure() + } - predicate edge = joinStep/2; -} + /** + * Holds if `va` is an access to a value that has previously been downcast to `t`. + */ + private predicate downcastSuccessor(VarAccess va, RefType t) { + exists(CastingExpr cast, BaseSsaVariable v, RefType t1, RefType t2 | + downcastSuccessorAux(pragma[only_bind_into](cast), v, t, t1, t2) and + t1.getASourceSupertype+() = t2 and + va = v.getAUse() and + dominates(cast, va) and + dominates(cast.(ControlFlowNode).getANormalSuccessor(), va) + ) + } -private module SccJoinStep implements Edge { - class Node = TypeFlowScc; + /** + * Holds if `va` is an access to a value that is guarded by `instanceof t` or `case e t`. + */ + private predicate typeTestGuarded(VarAccess va, RefType t) { + exists(Guard typeTest, BaseSsaVariable v | + typeTest.appliesTypeTest(v.getAUse(), t, _) and + va = v.getAUse() and + guardControls_v1(typeTest, va.getBasicBlock(), true) + ) + } - predicate edge = sccJoinStep/2; -} + /** + * Holds if `aa` is an access to a value that is guarded by `instanceof t` or `case e t`. + */ + private predicate arrayTypeTestGuarded(ArrayAccess aa, RefType t) { + exists(Guard typeTest, BaseSsaVariable v1, BaseSsaVariable v2, ArrayAccess aa1 | + typeTest.appliesTypeTest(aa1, t, _) and + aa1.getArray() = v1.getAUse() and + aa1.getIndexExpr() = v2.getAUse() and + aa.getArray() = v1.getAUse() and + aa.getIndexExpr() = v2.getAUse() and + guardControls_v1(typeTest, aa.getBasicBlock(), true) + ) + } -private module RankedJoinStep = RankEdge; - -private module RankedSccJoinStep = RankEdge; - -private predicate exactTypeBase(TypeFlowNode n, RefType t) { - exists(ClassInstanceExpr e | - n.asExpr() = e and - e.getType() = t and - not e instanceof FunctionalExpr and - exists(SrcRefType sub | sub.getASourceSupertype() = t.getSourceDeclaration()) - ) -} - -private module ExactTypePropagation implements TypePropagation { - class Typ = RefType; - - predicate candType = exactType/2; - - predicate supportsType = exactType/2; -} - -/** - * Holds if the runtime type of `n` is exactly `t` and if this bound is a - * non-trivial lower bound, that is, `t` has a subtype. - */ -private predicate exactType(TypeFlowNode n, RefType t) { - exactTypeBase(n, t) - or - exists(TypeFlowNode mid | exactType(mid, t) and step(mid, n)) - or - // The following is an optimized version of - // `forex(TypeFlowNode mid | joinStep(mid, n) | exactType(mid, t))` - ForAll::flowJoin(n, t) - or - exists(TypeFlowScc scc | - sccRepr(n, scc) and - // Optimized version of - // `forex(TypeFlowNode mid | sccJoinStep(mid, scc) | exactType(mid, t))` - ForAll::flowJoin(scc, t) - ) -} - -/** - * Holds if `n` occurs in a position where type information might be discarded; - * `t1` is the type of `n`, `t1e` is the erasure of `t1`, `t2` is the type of - * the implicit or explicit cast, and `t2e` is the erasure of `t2`. - */ -pragma[nomagic] -private predicate upcastCand(TypeFlowNode n, RefType t1, RefType t1e, RefType t2, RefType t2e) { - exists(TypeFlowNode next | step(n, next) or joinStep(n, next) | - n.getType() = t1 and - next.getType() = t2 and - t1.getErasure() = t1e and - t2.getErasure() = t2e and - t1 != t2 - ) -} - -private predicate unconstrained(BoundedType t) { - t.(Wildcard).isUnconstrained() - or - t.getUpperBoundType() instanceof TypeObject and - not t.(Wildcard).hasLowerBound() - or - unconstrained(t.getUpperBoundType()) - or - unconstrained(t.(Wildcard).getLowerBoundType()) -} - -/** Holds if `t` is a raw type or parameterised type with unrestricted type arguments. */ -private predicate unbound(RefType t) { - t instanceof RawType - or - exists(ParameterizedType pt | pt = t | - forex(RefType arg | arg = pt.getATypeArgument() | unconstrained(arg)) - ) -} - -/** Holds if `n` occurs in a position where type information is discarded. */ -private predicate upcast(TypeFlowNode n, RefType t1) { - exists(RefType t1e, RefType t2, RefType t2e | upcastCand(n, t1, t1e, t2, t2e) | - t1e.getASourceSupertype+() = t2e + /** + * Holds if `t` is the type of the `this` value corresponding to the the + * `SuperAccess`. As the `SuperAccess` expression has the type of the supertype, + * the type `t` is a stronger type bound. + */ + private predicate superAccess(SuperAccess sup, RefType t) { + sup.isEnclosingInstanceAccess(t) or - t1e = t2e and - unbound(t2) and - not unbound(t1) - ) -} + sup.isOwnInstanceAccess() and + t = sup.getEnclosingCallable().getDeclaringType() + } -/** Gets the element type of an array or subtype of `Iterable`. */ -private Type elementType(RefType t) { - result = t.(Array).getComponentType() - or - exists(ParameterizedType it | - it.getSourceDeclaration().hasQualifiedName("java.lang", "Iterable") and - result = it.getATypeArgument() and - t.extendsOrImplements*(it) - ) -} - -private predicate upcastEnhancedForStmtAux(BaseSsaUpdate v, RefType t, RefType t1, RefType t2) { - exists(EnhancedForStmt for | - for.getVariable() = v.getDefiningExpr() and - v.getSourceVariable().getType().getErasure() = t2 and - t = boxIfNeeded(elementType(for.getExpr().getType())) and - t.getErasure() = t1 - ) -} - -/** - * Holds if `v` is the iteration variable of an enhanced for statement, `t` is - * the type of the elements being iterated over, and this type is more precise - * than the type of `v`. - */ -private predicate upcastEnhancedForStmt(BaseSsaUpdate v, RefType t) { - exists(RefType t1, RefType t2 | - upcastEnhancedForStmtAux(v, t, t1, t2) and - t1.getASourceSupertype+() = t2 - ) -} - -private predicate downcastSuccessorAux( - CastingExpr cast, BaseSsaVariable v, RefType t, RefType t1, RefType t2 -) { - cast.getExpr() = v.getAUse() and - t = cast.getType() and - t1 = t.getErasure() and - t2 = v.getSourceVariable().getType().getErasure() -} - -/** - * Holds if `va` is an access to a value that has previously been downcast to `t`. - */ -private predicate downcastSuccessor(VarAccess va, RefType t) { - exists(CastingExpr cast, BaseSsaVariable v, RefType t1, RefType t2 | - downcastSuccessorAux(pragma[only_bind_into](cast), v, t, t1, t2) and - t1.getASourceSupertype+() = t2 and - va = v.getAUse() and - dominates(cast, va) and - dominates(cast.(ControlFlowNode).getANormalSuccessor(), va) - ) -} - -/** - * Holds if `va` is an access to a value that is guarded by `instanceof t` or `case e t`. - */ -private predicate typeTestGuarded(VarAccess va, RefType t) { - exists(Guard typeTest, BaseSsaVariable v | - typeTest.appliesTypeTest(v.getAUse(), t, _) and - va = v.getAUse() and - guardControls_v1(typeTest, va.getBasicBlock(), true) - ) -} - -/** - * Holds if `aa` is an access to a value that is guarded by `instanceof t` or `case e t`. - */ -predicate arrayTypeTestGuarded(ArrayAccess aa, RefType t) { - exists(Guard typeTest, BaseSsaVariable v1, BaseSsaVariable v2, ArrayAccess aa1 | - typeTest.appliesTypeTest(aa1, t, _) and - aa1.getArray() = v1.getAUse() and - aa1.getIndexExpr() = v2.getAUse() and - aa.getArray() = v1.getAUse() and - aa.getIndexExpr() = v2.getAUse() and - guardControls_v1(typeTest, aa.getBasicBlock(), true) - ) -} - -/** - * Holds if `t` is the type of the `this` value corresponding to the the - * `SuperAccess`. As the `SuperAccess` expression has the type of the supertype, - * the type `t` is a stronger type bound. - */ -private predicate superAccess(SuperAccess sup, RefType t) { - sup.isEnclosingInstanceAccess(t) - or - sup.isOwnInstanceAccess() and - t = sup.getEnclosingCallable().getDeclaringType() -} - -/** - * Holds if `n` has type `t` and this information is discarded, such that `t` - * might be a better type bound for nodes where `n` flows to. This might include - * multiple bounds for a single node. - */ -private predicate typeFlowBaseCand(TypeFlowNode n, RefType t) { - exists(RefType srctype | - upcast(n, srctype) or - upcastEnhancedForStmt(n.asSsa(), srctype) or - downcastSuccessor(n.asExpr(), srctype) or - typeTestGuarded(n.asExpr(), srctype) or - arrayTypeTestGuarded(n.asExpr(), srctype) or - n.asExpr().(FunctionalExpr).getConstructedType() = srctype or - superAccess(n.asExpr(), srctype) - | - t = srctype.(BoundedType).getAnUltimateUpperBoundType() - or - t = srctype and not srctype instanceof BoundedType - ) -} - -/** - * Holds if `n` has type `t` and this information is discarded, such that `t` - * might be a better type bound for nodes where `n` flows to. This only includes - * the best such bound for each node. - */ -private predicate typeFlowBase(TypeFlowNode n, RefType t) { - exists(RefType te | - typeFlowBaseCand(n, t) and - te = t.getErasure() and - not exists(RefType better | - typeFlowBaseCand(n, better) and - better != t and - not t.getASupertype+() = better + /** + * Holds if `n` has type `t` and this information is discarded, such that `t` + * might be a better type bound for nodes where `n` flows to. This might include + * multiple bounds for a single node. + */ + predicate typeFlowBaseCand(TypeFlowNode n, RefType t) { + exists(RefType srctype | + upcast(n, srctype) or + upcastEnhancedForStmt(n.asSsa(), srctype) or + downcastSuccessor(n.asExpr(), srctype) or + typeTestGuarded(n.asExpr(), srctype) or + arrayTypeTestGuarded(n.asExpr(), srctype) or + n.asExpr().(FunctionalExpr).getConstructedType() = srctype or + superAccess(n.asExpr(), srctype) | - better.getASupertype+() = t or - better.getErasure().(RefType).getASourceSupertype+() = te - ) - ) -} - -private module TypeFlowPropagation implements TypePropagation { - class Typ = RefType; - - predicate candType = typeFlow/2; - - bindingset[t] - predicate supportsType(TypeFlowNode mid, RefType t) { - exists(RefType midtyp | exactType(mid, midtyp) or typeFlow(mid, midtyp) | - pragma[only_bind_out](midtyp).getAnAncestor() = t + t = srctype.(BoundedType).getAnUltimateUpperBoundType() + or + t = srctype and not srctype instanceof BoundedType ) } -} -/** - * Holds if the runtime type of `n` is bounded by `t` and if this bound is - * likely to be better than the static type of `n`. - */ -private predicate typeFlow(TypeFlowNode n, RefType t) { - typeFlowBase(n, t) - or - exists(TypeFlowNode mid | typeFlow(mid, t) and step(mid, n)) - or - ForAll::flowJoin(n, t) - or - exists(TypeFlowScc scc | - sccRepr(n, scc) and - ForAll::flowJoin(scc, t) - ) -} - -pragma[nomagic] -private predicate erasedTypeBound(RefType t) { - exists(RefType t0 | typeFlow(_, t0) and t = t0.getErasure()) -} - -pragma[nomagic] -private predicate typeBound(RefType t) { typeFlow(_, t) } - -/** - * Holds if we have a bound for `n` that is better than `t`, taking only erased - * types into account. - */ -pragma[nomagic] -private predicate irrelevantErasedBound(TypeFlowNode n, RefType t) { - exists(RefType bound | - typeFlow(n, bound) - or - n.getType() = bound and typeFlow(n, _) - | - t = bound.getErasure().(RefType).getASourceSupertype+() and - erasedTypeBound(t) - ) -} - -/** - * Holds if we have a bound for `n` that is better than `t`. - */ -pragma[nomagic] -private predicate irrelevantBound(TypeFlowNode n, RefType t) { - exists(RefType bound | - typeFlow(n, bound) and - t = bound.getAStrictAncestor() and - typeBound(t) and - typeFlow(n, pragma[only_bind_into](t)) and - not t.getAnAncestor() = bound - or - n.getType() = pragma[only_bind_into](bound) and - typeFlow(n, t) and - t = bound.getAnAncestor() - ) -} - -/** - * Holds if the runtime type of `n` is bounded by `t`, if this bound is likely - * to be better than the static type of `n`, and if this the best such bound. - */ -private predicate bestTypeFlow(TypeFlowNode n, RefType t) { - typeFlow(n, t) and - not irrelevantErasedBound(n, t.getErasure()) and - not irrelevantBound(n, t) -} - -private predicate bestTypeFlow(TypeFlowNode n, RefType t, boolean exact) { - exactType(n, t) and exact = true - or - not exactType(n, _) and bestTypeFlow(n, t) and exact = false -} - -private predicate bestTypeFlowOrTypeFlowBase(TypeFlowNode n, RefType t, boolean exact) { - bestTypeFlow(n, t, exact) - or - typeFlowBase(n, t) and - exact = false and - not bestTypeFlow(n, _, _) -} - -/** - * Holds if `n` has type `t` and this information is not propagated as a - * universal bound to a subsequent node, such that `t` might form the basis for - * a union type bound for that node. - */ -private predicate unionTypeFlowBaseCand(TypeFlowNode n, RefType t, boolean exact) { - exists(TypeFlowNode next | - joinStep(n, next) and - bestTypeFlowOrTypeFlowBase(n, t, exact) and - not bestTypeFlowOrTypeFlowBase(next, t, exact) and - not exactType(next, _) - ) -} - -/** - * Holds if `ioe` checks `v`, its true-successor is `bb`, and `bb` has multiple - * predecessors. - */ -private predicate instanceofDisjunct(InstanceOfExpr ioe, BasicBlock bb, BaseSsaVariable v) { - ioe.getExpr() = v.getAUse() and - strictcount(bb.getABBPredecessor()) > 1 and - exists(ConditionBlock cb | cb.getCondition() = ioe and cb.getTestSuccessor(true) = bb) -} - -/** Holds if `bb` is disjunctively guarded by multiple `instanceof` tests on `v`. */ -private predicate instanceofDisjunction(BasicBlock bb, BaseSsaVariable v) { - strictcount(InstanceOfExpr ioe | instanceofDisjunct(ioe, bb, v)) = - strictcount(bb.getABBPredecessor()) -} - -/** - * Holds if `n` is a value that is guarded by a disjunction of - * `instanceof t_i` where `t` is one of those `t_i`. - */ -private predicate instanceofDisjunctionGuarded(TypeFlowNode n, RefType t) { - exists(BasicBlock bb, InstanceOfExpr ioe, BaseSsaVariable v, VarAccess va | - instanceofDisjunction(bb, v) and - bb.bbDominates(va.getBasicBlock()) and - va = v.getAUse() and - instanceofDisjunct(ioe, bb, v) and - t = ioe.getSyntacticCheckedType() and - n.asExpr() = va - ) -} - -private module HasUnionTypePropagation implements TypePropagation { - class Typ = Unit; - - predicate candType(TypeFlowNode mid, Unit unit) { - exists(unit) and - (unionTypeFlowBaseCand(mid, _, _) or hasUnionTypeFlow(mid)) + /** + * Holds if `ioe` checks `v`, its true-successor is `bb`, and `bb` has multiple + * predecessors. + */ + private predicate instanceofDisjunct(InstanceOfExpr ioe, BasicBlock bb, BaseSsaVariable v) { + ioe.getExpr() = v.getAUse() and + strictcount(bb.getABBPredecessor()) > 1 and + exists(ConditionBlock cb | cb.getCondition() = ioe and cb.getTestSuccessor(true) = bb) } - predicate supportsType = candType/2; -} + /** Holds if `bb` is disjunctively guarded by multiple `instanceof` tests on `v`. */ + private predicate instanceofDisjunction(BasicBlock bb, BaseSsaVariable v) { + strictcount(InstanceOfExpr ioe | instanceofDisjunct(ioe, bb, v)) = + strictcount(bb.getABBPredecessor()) + } -/** - * Holds if all incoming type flow can be traced back to a - * `unionTypeFlowBaseCand`, such that we can compute a union type bound for `n`. - * Disregards nodes for which we have an exact bound. - */ -private predicate hasUnionTypeFlow(TypeFlowNode n) { - not exactType(n, _) and - ( - // Optimized version of - // `forex(TypeFlowNode mid | joinStep(mid, n) | unionTypeFlowBaseCand(mid, _, _) or hasUnionTypeFlow(mid))` - ForAll::flowJoin(n, _) - or - exists(TypeFlowScc scc | - sccRepr(n, scc) and - // Optimized version of - // `forex(TypeFlowNode mid | sccJoinStep(mid, scc) | unionTypeFlowBaseCand(mid, _, _) or hasUnionTypeFlow(mid))` - ForAll::flowJoin(scc, _) + /** + * Holds if `n` is a value that is guarded by a disjunction of + * `instanceof t_i` where `t` is one of those `t_i`. + */ + predicate instanceofDisjunctionGuarded(TypeFlowNode n, RefType t) { + exists(BasicBlock bb, InstanceOfExpr ioe, BaseSsaVariable v, VarAccess va | + instanceofDisjunction(bb, v) and + bb.bbDominates(va.getBasicBlock()) and + va = v.getAUse() and + instanceofDisjunct(ioe, bb, v) and + t = ioe.getSyntacticCheckedType() and + n.asExpr() = va ) - or - exists(TypeFlowNode mid | step(mid, n) and hasUnionTypeFlow(mid)) - or - instanceofDisjunctionGuarded(n, _) - ) -} + } -pragma[nomagic] -private RefType getTypeBound(TypeFlowNode n) { - bestTypeFlow(n, result) - or - not bestTypeFlow(n, _) and result = n.getType() -} + private predicate unconstrained(BoundedType t) { + t.(Wildcard).isUnconstrained() + or + t.getUpperBoundType() instanceof TypeObject and + not t.(Wildcard).hasLowerBound() + or + unconstrained(t.getUpperBoundType()) + or + unconstrained(t.(Wildcard).getLowerBoundType()) + } -pragma[nomagic] -private predicate unionTypeFlow0(TypeFlowNode n, RefType t, boolean exact) { - hasUnionTypeFlow(n) and - ( - exists(TypeFlowNode mid | anyStep(mid, n) | - unionTypeFlowBaseCand(mid, t, exact) or unionTypeFlow(mid, t, exact) + /** Holds if `t` is a raw type or parameterised type with unrestricted type arguments. */ + predicate unbound(RefType t) { + t instanceof RawType + or + exists(ParameterizedType pt | pt = t | + forex(RefType arg | arg = pt.getATypeArgument() | unconstrained(arg)) ) - or - instanceofDisjunctionGuarded(n, t) and exact = false - ) -} + } -/** Holds if we have a union type bound for `n` and `t` is one of its parts. */ -private predicate unionTypeFlow(TypeFlowNode n, RefType t, boolean exact) { - unionTypeFlow0(n, t, exact) and - // filter impossible union parts: - exists(RefType tErased, RefType boundErased | - pragma[only_bind_into](tErased) = t.getErasure() and - pragma[only_bind_into](boundErased) = getTypeBound(n).getErasure() - | - if exact = true - then tErased.getASourceSupertype*() = boundErased - else erasedHaveIntersection(tErased, boundErased) - ) -} + Type getErasure(Type t) { result = t.getErasure() } -/** - * Holds if the inferred union type bound for `n` contains the best universal - * bound and thus is irrelevant. - */ -private predicate irrelevantUnionType(TypeFlowNode n) { - exists(RefType t, RefType nt, RefType te, RefType nte | - unionTypeFlow(n, t, false) and - nt = getTypeBound(n) and - te = t.getErasure() and - nte = nt.getErasure() - | - nt.getASupertype*() = t - or - nte.getASourceSupertype+() = te - or - nte = te and unbound(t) - ) -} + Type getAnAncestor(Type sub) { result = sub.getAnAncestor() } -/** - * Holds if `t` is an irrelevant part of the union type bound for `n` due to - * being contained in another part of the union type bound. - */ -private predicate irrelevantUnionTypePart(TypeFlowNode n, RefType t, boolean exact) { - unionTypeFlow(n, t, exact) and - not irrelevantUnionType(n) and - exists(RefType weaker | - unionTypeFlow(n, weaker, false) and - t.getASupertype*() = weaker - | - exact = true or not weaker.getASupertype*() = t - ) -} - -/** - * Holds if the runtime type of `n` is bounded by a union type and if this - * bound is likely to be better than the static type of `n`. The union type is - * made up of the types `t` related to `n` by this predicate, and the flag - * `exact` indicates whether `t` is an exact bound or merely an upper bound. - */ -private predicate bestUnionType(TypeFlowNode n, RefType t, boolean exact) { - unionTypeFlow(n, t, exact) and - not irrelevantUnionType(n) and - not irrelevantUnionTypePart(n, t, exact) + RefType getSourceDeclaration(Type t) { result = t.getSourceDeclaration() } } cached private module TypeFlowBounds { + private module TypeFlow = Make; + /** * Holds if the runtime type of `f` is bounded by `t` and if this bound is * likely to be better than the static type of `f`. The flag `exact` indicates @@ -756,9 +358,9 @@ private module TypeFlowBounds { */ cached predicate fieldTypeFlow(Field f, RefType t, boolean exact) { - exists(TypeFlowNode n | + exists(Input::TypeFlowNode n | n.asField() = f and - bestTypeFlow(n, t, exact) + TypeFlow::bestTypeFlow(n, t, exact) ) } @@ -769,9 +371,9 @@ private module TypeFlowBounds { */ cached predicate exprTypeFlow(Expr e, RefType t, boolean exact) { - exists(TypeFlowNode n | + exists(Input::TypeFlowNode n | n.asExpr() = e and - bestTypeFlow(n, t, exact) + TypeFlow::bestTypeFlow(n, t, exact) ) } @@ -783,9 +385,9 @@ private module TypeFlowBounds { */ cached predicate exprUnionTypeFlow(Expr e, RefType t, boolean exact) { - exists(TypeFlowNode n | + exists(Input::TypeFlowNode n | n.asExpr() = e and - bestUnionType(n, t, exact) + TypeFlow::bestUnionType(n, t, exact) ) } } diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowUtil.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowUtil.qll index 723b7784b1e..c40520c3500 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowUtil.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowUtil.qll @@ -194,12 +194,17 @@ predicate simpleAstFlowStep(Expr e1, Expr e2) { // In the following three cases only record patterns need this flow edge, leading from the bound instanceof // or switch tested expression to a record pattern that will read its fields. Simple binding patterns are // handled via VariableAssign.getSource instead. - exists(SwitchExpr se | - e1 = se.getExpr() and e2 = se.getACase().(PatternCase).getPattern().asRecordPattern() + // We only consider patterns that declare any identifiers + exists(SwitchExpr se, RecordPatternExpr recordPattern | recordPattern = e2 | + e1 = se.getExpr() and + recordPattern = se.getACase().(PatternCase).getAPattern() and + recordPattern.declaresAnyIdentifiers() ) or - exists(SwitchStmt ss | - e1 = ss.getExpr() and e2 = ss.getACase().(PatternCase).getPattern().asRecordPattern() + exists(SwitchStmt ss, RecordPatternExpr recordPattern | recordPattern = e2 | + e1 = ss.getExpr() and + recordPattern = ss.getACase().(PatternCase).getAPattern() and + recordPattern.declaresAnyIdentifiers() ) or exists(InstanceOfExpr ioe | e1 = ioe.getExpr() and e2 = ioe.getPattern().asRecordPattern()) diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/FlowSummaryImpl.qll b/java/ql/lib/semmle/code/java/dataflow/internal/FlowSummaryImpl.qll index 0960497dd8c..5c77ab2c09a 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/FlowSummaryImpl.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/FlowSummaryImpl.qll @@ -192,12 +192,12 @@ module SourceSinkInterpretationInput implements class Element = J::Element; - predicate sourceElement(Element e, string output, string kind) { + predicate sourceElement(Element e, string output, string kind, Public::Provenance provenance) { exists( string namespace, string type, boolean subtypes, string name, string signature, string ext, SourceOrSinkElement baseSource, string originalOutput | - sourceModel(namespace, type, subtypes, name, signature, ext, originalOutput, kind, _) and + sourceModel(namespace, type, subtypes, name, signature, ext, originalOutput, kind, provenance) and baseSource = interpretElement(namespace, type, subtypes, name, signature, ext) and ( e = baseSource and output = originalOutput @@ -207,12 +207,12 @@ module SourceSinkInterpretationInput implements ) } - predicate sinkElement(Element e, string input, string kind) { + predicate sinkElement(Element e, string input, string kind, Public::Provenance provenance) { exists( string namespace, string type, boolean subtypes, string name, string signature, string ext, SourceOrSinkElement baseSink, string originalInput | - sinkModel(namespace, type, subtypes, name, signature, ext, originalInput, kind, _) and + sinkModel(namespace, type, subtypes, name, signature, ext, originalInput, kind, provenance) and baseSink = interpretElement(namespace, type, subtypes, name, signature, ext) and ( e = baseSink and originalInput = input diff --git a/java/ql/lib/semmle/code/java/frameworks/Networking.qll b/java/ql/lib/semmle/code/java/frameworks/Networking.qll index c473cc9fc09..f86cecd5b4e 100644 --- a/java/ql/lib/semmle/code/java/frameworks/Networking.qll +++ b/java/ql/lib/semmle/code/java/frameworks/Networking.qll @@ -24,6 +24,11 @@ class TypeUrl extends RefType { TypeUrl() { this.hasQualifiedName("java.net", "URL") } } +/** The type `java.net.URLDecoder`. */ +class TypeUrlDecoder extends RefType { + TypeUrlDecoder() { this.hasQualifiedName("java.net", "URLDecoder") } +} + /** The type `java.net.URI`. */ class TypeUri extends RefType { TypeUri() { this.hasQualifiedName("java.net", "URI") } @@ -157,6 +162,14 @@ class UrlOpenConnectionMethod extends Method { } } +/** The method `java.net.URLDecoder::decode`. */ +class UrlDecodeMethod extends Method { + UrlDecodeMethod() { + this.getDeclaringType() instanceof TypeUrlDecoder and + this.getName() = "decode" + } +} + /** The method `javax.net.SocketFactory::createSocket`. */ class CreateSocketMethod extends Method { CreateSocketMethod() { diff --git a/java/ql/lib/semmle/code/java/frameworks/spring/SpringBean.qll b/java/ql/lib/semmle/code/java/frameworks/spring/SpringBean.qll index bbb6adf72f3..a53cbf67090 100644 --- a/java/ql/lib/semmle/code/java/frameworks/spring/SpringBean.qll +++ b/java/ql/lib/semmle/code/java/frameworks/spring/SpringBean.qll @@ -19,7 +19,8 @@ class SpringBean extends SpringXmlElement { not this.getNamespace().getUri() = "http://camel.apache.org/schema/spring" } - override string toString() { result = this.getBeanIdentifier() } + /** Gets a printable representation of this XML element. */ + string toString() { result = this.getBeanIdentifier() } /** * Holds if this element is a top-level bean definition. diff --git a/java/ql/lib/semmle/code/java/frameworks/spring/SpringProperty.qll b/java/ql/lib/semmle/code/java/frameworks/spring/SpringProperty.qll index 06d5daefaa1..a83eeed13fa 100644 --- a/java/ql/lib/semmle/code/java/frameworks/spring/SpringProperty.qll +++ b/java/ql/lib/semmle/code/java/frameworks/spring/SpringProperty.qll @@ -9,7 +9,8 @@ import semmle.code.java.frameworks.spring.SpringValue class SpringProperty extends SpringXmlElement { SpringProperty() { this.getName() = "property" } - override string toString() { result = this.getPropertyName() } + /** Gets a printable representation of this XML element. */ + string toString() { result = this.getPropertyName() } /** Gets the value of the `name` attribute. */ string getPropertyName() { result = this.getAttributeValue("name") } diff --git a/java/ql/lib/semmle/code/java/security/PathSanitizer.qll b/java/ql/lib/semmle/code/java/security/PathSanitizer.qll index 4ca08f5becc..77803e3e27d 100644 --- a/java/ql/lib/semmle/code/java/security/PathSanitizer.qll +++ b/java/ql/lib/semmle/code/java/security/PathSanitizer.qll @@ -64,7 +64,11 @@ private predicate exactPathMatchGuard(Guard g, Expr e, boolean branch) { ) } -private class ExactPathMatchSanitizer extends PathInjectionSanitizer { +/** + * A sanitizer that protects against path injection vulnerabilities + * by checking for a matching path. + */ +class ExactPathMatchSanitizer extends PathInjectionSanitizer { ExactPathMatchSanitizer() { this = DataFlow::BarrierGuard::getABarrierNode() or diff --git a/java/ql/lib/semmle/code/java/security/SensitiveLoggingQuery.qll b/java/ql/lib/semmle/code/java/security/SensitiveLoggingQuery.qll index c599756a81c..d46d35ab0cc 100644 --- a/java/ql/lib/semmle/code/java/security/SensitiveLoggingQuery.qll +++ b/java/ql/lib/semmle/code/java/security/SensitiveLoggingQuery.qll @@ -12,7 +12,8 @@ class VariableWithSensitiveName extends Variable { VariableWithSensitiveName() { exists(string name | name = this.getName() | name.regexpMatch(getCommonSensitiveInfoRegex()) and - not name.regexpMatch("(?i).*null.*") + not name.regexpMatch("(?i).*null.*") and + name != "tokenImage" // appears in parser code generated by JavaCC ) } } diff --git a/java/ql/lib/semmle/code/java/security/UrlForwardQuery.qll b/java/ql/lib/semmle/code/java/security/UrlForwardQuery.qll new file mode 100644 index 00000000000..2ca38d69551 --- /dev/null +++ b/java/ql/lib/semmle/code/java/security/UrlForwardQuery.qll @@ -0,0 +1,203 @@ +/** Provides classes and a taint-tracking configuration to reason about unsafe URL forwarding. */ + +import java +private import semmle.code.java.dataflow.ExternalFlow +private import semmle.code.java.dataflow.FlowSources +private import semmle.code.java.dataflow.StringPrefixes +private import semmle.code.java.security.PathSanitizer +private import semmle.code.java.controlflow.Guards +private import semmle.code.java.security.Sanitizers + +/** A URL forward sink. */ +abstract class UrlForwardSink extends DataFlow::Node { } + +/** + * A default sink representing methods susceptible to URL + * forwarding attacks. + */ +private class DefaultUrlForwardSink extends UrlForwardSink { + DefaultUrlForwardSink() { sinkNode(this, "url-forward") } +} + +/** + * An expression appended (perhaps indirectly) to `"forward:"` + * and reachable from a Spring entry point. + */ +private class SpringUrlForwardPrefixSink extends UrlForwardSink { + SpringUrlForwardPrefixSink() { + any(SpringRequestMappingMethod srmm).polyCalls*(this.getEnclosingCallable()) and + appendedToForwardPrefix(this) + } +} + +pragma[nomagic] +private predicate appendedToForwardPrefix(DataFlow::ExprNode exprNode) { + exists(ForwardPrefix fp | exprNode.asExpr() = fp.getAnAppendedExpression()) +} + +private class ForwardPrefix extends InterestingPrefix { + ForwardPrefix() { this.getStringValue() = "forward:" } + + override int getOffset() { result = 0 } +} + +/** A URL forward barrier. */ +abstract class UrlForwardBarrier extends DataFlow::Node { } + +private class PrimitiveBarrier extends UrlForwardBarrier instanceof SimpleTypeSanitizer { } + +/** + * A barrier for values appended to a "redirect:" prefix. + * These results are excluded because they should be handled + * by the `java/unvalidated-url-redirection` query instead. + */ +private class RedirectPrefixBarrier extends UrlForwardBarrier { + RedirectPrefixBarrier() { this.asExpr() = any(RedirectPrefix fp).getAnAppendedExpression() } +} + +private class RedirectPrefix extends InterestingPrefix { + RedirectPrefix() { this.getStringValue() = "redirect:" } + + override int getOffset() { result = 0 } +} + +/** + * A value that is the result of prepending a string that prevents + * any value from controlling the path of a URL. + */ +private class FollowsBarrierPrefix extends UrlForwardBarrier { + FollowsBarrierPrefix() { this.asExpr() = any(BarrierPrefix fp).getAnAppendedExpression() } +} + +private class BarrierPrefix extends InterestingPrefix { + int offset; + + BarrierPrefix() { + // Matches strings that look like when prepended to untrusted input, they will restrict + // the path of a URL: for example, anything containing `?` or `#`. + exists(this.getStringValue().regexpFind("[?#]", 0, offset)) + or + this.(CharacterLiteral).getValue() = ["?", "#"] and offset = 0 + } + + override int getOffset() { result = offset } +} + +/** + * A barrier that protects against path injection vulnerabilities + * while accounting for URL encoding. + */ +private class UrlPathBarrier extends UrlForwardBarrier instanceof PathInjectionSanitizer { + UrlPathBarrier() { + this instanceof ExactPathMatchSanitizer or + this instanceof NoUrlEncodingBarrier or + this instanceof FullyDecodesUrlBarrier + } +} + +/** A call to a method that decodes a URL. */ +abstract class UrlDecodeCall extends MethodCall { } + +private class DefaultUrlDecodeCall extends UrlDecodeCall { + DefaultUrlDecodeCall() { + this.getMethod() instanceof UrlDecodeMethod or + this.getMethod().hasQualifiedName("org.eclipse.jetty.util.URIUtil", "URIUtil", "decodePath") + } +} + +/** A repeated call to a method that decodes a URL. */ +abstract class RepeatedUrlDecodeCall extends MethodCall { } + +private class DefaultRepeatedUrlDecodeCall extends RepeatedUrlDecodeCall instanceof UrlDecodeCall { + DefaultRepeatedUrlDecodeCall() { this.getAnEnclosingStmt() instanceof LoopStmt } +} + +/** A method call that checks a string for URL encoding. */ +abstract class CheckUrlEncodingCall extends MethodCall { } + +private class DefaultCheckUrlEncodingCall extends CheckUrlEncodingCall { + DefaultCheckUrlEncodingCall() { + this.getMethod() instanceof StringContainsMethod and + this.getArgument(0).(CompileTimeConstantExpr).getStringValue() = "%" + } +} + +/** A guard that looks for a method call that checks for URL encoding. */ +private class CheckUrlEncodingGuard extends Guard instanceof CheckUrlEncodingCall { + Expr getCheckedExpr() { result = this.(MethodCall).getQualifier() } +} + +/** Holds if `g` is guard for a URL that does not contain URL encoding. */ +private predicate noUrlEncodingGuard(Guard g, Expr e, boolean branch) { + e = g.(CheckUrlEncodingGuard).getCheckedExpr() and + branch = false + or + branch = false and + g.(Expr).getType() instanceof BooleanType and + ( + exists(CheckUrlEncodingCall call, AssignExpr ae | + ae.getSource() = call and + e = call.getQualifier() and + g = ae.getDest() + ) + or + exists(CheckUrlEncodingCall call, LocalVariableDeclExpr vde | + vde.getInitOrPatternSource() = call and + e = call.getQualifier() and + g = vde.getAnAccess() + ) + ) +} + +/** A barrier for URLs that do not contain URL encoding. */ +private class NoUrlEncodingBarrier extends DataFlow::Node { + NoUrlEncodingBarrier() { this = DataFlow::BarrierGuard::getABarrierNode() } +} + +/** Holds if `g` is guard for a URL that is fully decoded. */ +private predicate fullyDecodesUrlGuard(Expr e) { + exists(CheckUrlEncodingGuard g, RepeatedUrlDecodeCall decodeCall | + e = g.getCheckedExpr() and + g.controls(decodeCall.getBasicBlock(), true) + ) +} + +/** A barrier for URLs that are fully decoded. */ +private class FullyDecodesUrlBarrier extends DataFlow::Node { + FullyDecodesUrlBarrier() { + exists(Variable v, Expr e | this.asExpr() = v.getAnAccess() | + fullyDecodesUrlGuard(e) and + e = v.getAnAccess() and + e.getBasicBlock().bbDominates(this.asExpr().getBasicBlock()) + ) + } +} + +/** + * A taint-tracking configuration for reasoning about URL forwarding. + */ +module UrlForwardFlowConfig implements DataFlow::ConfigSig { + predicate isSource(DataFlow::Node source) { + source instanceof ThreatModelFlowSource and + // excluded due to FPs + not exists(MethodCall mc, Method m | + m instanceof HttpServletRequestGetRequestUriMethod or + m instanceof HttpServletRequestGetRequestUrlMethod or + m instanceof HttpServletRequestGetPathMethod + | + mc.getMethod() = m and + mc = source.asExpr() + ) + } + + predicate isSink(DataFlow::Node sink) { sink instanceof UrlForwardSink } + + predicate isBarrier(DataFlow::Node node) { node instanceof UrlForwardBarrier } + + DataFlow::FlowFeature getAFeature() { result instanceof DataFlow::FeatureHasSourceCallContext } +} + +/** + * Taint-tracking flow for URL forwarding. + */ +module UrlForwardFlow = TaintTracking::Global; diff --git a/java/ql/lib/semmle/code/xml/Ant.qll b/java/ql/lib/semmle/code/xml/Ant.qll index 8d4737620a4..59cd2889096 100644 --- a/java/ql/lib/semmle/code/xml/Ant.qll +++ b/java/ql/lib/semmle/code/xml/Ant.qll @@ -9,7 +9,7 @@ class AntTarget extends XmlElement { AntTarget() { super.getName() = "target" } /** Gets the name of this Ant target. */ - override string getName() { result = this.getAttributeValue("name") } + string getName() { result = this.getAttributeValue("name") } /** * Gets a string containing the dependencies of this Ant target, diff --git a/java/ql/lib/semmle/code/xml/XML.qll b/java/ql/lib/semmle/code/xml/XML.qll index 65bdd7b7cc1..54157809260 100644 --- a/java/ql/lib/semmle/code/xml/XML.qll +++ b/java/ql/lib/semmle/code/xml/XML.qll @@ -3,305 +3,67 @@ */ import semmle.files.FileSystem +private import codeql.xml.Xml -private class TXmlLocatable = - @xmldtd or @xmlelement or @xmlattribute or @xmlnamespace or @xmlcomment or @xmlcharacters; +private module Input implements InputSig { + class XmlLocatableBase = @xmllocatable or @xmlnamespaceable; -/** An XML element that has a location. */ -class XmlLocatable extends @xmllocatable, TXmlLocatable { - /** Gets the source location for this element. */ - Location getLocation() { xmllocations(this, result) } + predicate xmllocations_(XmlLocatableBase e, Location loc) { xmllocations(e, loc) } - /** - * Holds if this element is at the specified location. - * The location spans column `startcolumn` of line `startline` to - * column `endcolumn` of line `endline` in file `filepath`. - * For more information, see - * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). - */ - predicate hasLocationInfo( - string filepath, int startline, int startcolumn, int endline, int endcolumn + class XmlParentBase = @xmlparent; + + class XmlNamespaceableBase = @xmlnamespaceable; + + class XmlElementBase = @xmlelement; + + class XmlFileBase = File; + + predicate xmlEncoding_(XmlFileBase f, string enc) { xmlEncoding(f, enc) } + + class XmlDtdBase = @xmldtd; + + predicate xmlDTDs_(XmlDtdBase e, string root, string publicId, string systemId, XmlFileBase file) { + xmlDTDs(e, root, publicId, systemId, file) + } + + predicate xmlElements_( + XmlElementBase e, string name, XmlParentBase parent, int idx, XmlFileBase file ) { - exists(File f, Location l | l = this.getLocation() | - locations_default(l, f, startline, startcolumn, endline, endcolumn) and - filepath = f.getAbsolutePath() - ) + xmlElements(e, name, parent, idx, file) } - /** Gets a textual representation of this element. */ - string toString() { none() } // overridden in subclasses -} + class XmlAttributeBase = @xmlattribute; -/** - * 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`; - // the type `@xmlparent` currently also includes non-XML files - this instanceof @xmlelement or xmlEncoding(this, _) + predicate xmlAttrs_( + XmlAttributeBase e, XmlElementBase elementid, string name, string value, int idx, + XmlFileBase file + ) { + xmlAttrs(e, elementid, name, value, idx, file) } - /** - * Gets a printable representation of this XML parent. - * (Intended to be overridden in subclasses.) - */ - string getName() { none() } // overridden in subclasses + class XmlNamespaceBase = @xmlnamespace; - /** Gets the file to which this XML parent belongs. */ - 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, _) } - - /** Gets a child element of this XML parent. */ - 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) } - - /** Gets a comment that is a child of this XML parent. */ - XmlComment getAComment() { xmlComments(result, _, this, _) } - - /** Gets a character sequence that is a child of this XML parent. */ - XmlCharacters getACharactersSet() { xmlChars(result, _, this, _, _, _) } - - /** 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, _, _)) } - - /** Gets the number of places in the body of this XML parent where text occurs. */ - int getNumberOfCharacterSets() { result = count(int pos | xmlChars(_, _, this, pos, _, _)) } - - /** - * Gets the result of appending all the character sequences of this XML parent from - * left to right, separated by a space. - */ - string allCharactersString() { - result = - concat(string chars, int pos | xmlChars(_, chars, this, pos, _, _) | chars, " " order by pos) + predicate xmlNs_(XmlNamespaceBase e, string prefixName, string uri, XmlFileBase file) { + xmlNs(e, prefixName, uri, file) } - /** Gets the text value contained in this XML parent. */ - string getTextValue() { result = this.allCharactersString() } + predicate xmlHasNs_(XmlNamespaceableBase e, XmlNamespaceBase ns, XmlFileBase file) { + xmlHasNs(e, ns, file) + } - /** Gets a printable representation of this XML parent. */ - string toString() { result = this.getName() } -} + class XmlCommentBase = @xmlcomment; -/** An XML file. */ -class XmlFile extends XmlParent, File { - XmlFile() { xmlEncoding(this, _) } + predicate xmlComments_(XmlCommentBase e, string text, XmlParentBase parent, XmlFileBase file) { + xmlComments(e, text, parent, file) + } - /** Gets a printable representation of this XML file. */ - override string toString() { result = this.getName() } + class XmlCharactersBase = @xmlcharacters; - /** Gets the name of this XML file. */ - override string getName() { result = File.super.getAbsolutePath() } - - /** Gets the encoding of this XML file. */ - string getEncoding() { xmlEncoding(this, result) } - - /** Gets the XML file itself. */ - override XmlFile getFile() { result = this } - - /** Gets a top-most element in an XML file. */ - XmlElement getARootElement() { result = this.getAChild() } - - /** Gets a DTD associated with this XML file. */ - XmlDtd getADtd() { xmlDTDs(result, _, _, _, this) } -} - -/** - * An XML document type definition (DTD). - * - * Example: - * - * ``` - * - * - * - * ``` - */ -class XmlDtd extends XmlLocatable, @xmldtd { - /** Gets the name of the root element of this DTD. */ - string getRoot() { xmlDTDs(this, result, _, _, _) } - - /** Gets the public ID of this DTD. */ - string getPublicId() { xmlDTDs(this, _, result, _, _) } - - /** Gets the system ID of this DTD. */ - string getSystemId() { xmlDTDs(this, _, _, result, _) } - - /** Holds if this DTD is public. */ - predicate isPublic() { not xmlDTDs(this, _, "", _, _) } - - /** Gets the parent of this DTD. */ - XmlParent getParent() { xmlDTDs(this, _, _, _, result) } - - override string toString() { - this.isPublic() and - result = this.getRoot() + " PUBLIC '" + this.getPublicId() + "' '" + this.getSystemId() + "'" - or - not this.isPublic() and - result = this.getRoot() + " SYSTEM '" + this.getSystemId() + "'" + predicate xmlChars_( + XmlCharactersBase e, string text, XmlParentBase parent, int idx, int isCDATA, XmlFileBase file + ) { + xmlChars(e, text, parent, idx, isCDATA, file) } } -/** - * An XML element in an XML file. - * - * Example: - * - * ``` - * - * - * ``` - */ -class XmlElement extends @xmlelement, XmlParent, XmlLocatable { - /** Holds if this XML element has the given `name`. */ - predicate hasName(string name) { name = this.getName() } - - /** Gets the name of this XML element. */ - override string getName() { xmlElements(this, result, _, _, _) } - - /** Gets the XML file in which this XML element occurs. */ - override XmlFile getFile() { xmlElements(this, _, _, _, result) } - - /** Gets the parent of this XML element. */ - XmlParent getParent() { xmlElements(this, _, result, _, _) } - - /** Gets the index of this XML element among its parent's children. */ - int getIndex() { xmlElements(this, _, _, result, _) } - - /** Holds if this XML element has a namespace. */ - predicate hasNamespace() { xmlHasNs(this, _, _) } - - /** Gets the namespace of this XML element, if any. */ - XmlNamespace getNamespace() { xmlHasNs(this, result, _) } - - /** Gets the index of this XML element among its parent's children. */ - int getElementPositionIndex() { xmlElements(this, _, _, result, _) } - - /** Gets the depth of this element within the XML file tree structure. */ - override int getDepth() { result = this.getParent().getDepth() + 1 } - - /** Gets an XML attribute of this XML element. */ - 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 } - - /** Holds if this XML element has an attribute with the specified `name`. */ - predicate hasAttribute(string name) { exists(this.getAttribute(name)) } - - /** Gets the value of the attribute with the specified `name`, if any. */ - string getAttributeValue(string name) { result = this.getAttribute(name).getValue() } - - /** Gets a printable representation of this XML element. */ - override string toString() { result = this.getName() } -} - -/** - * An attribute that occurs inside an XML element. - * - * Examples: - * - * ``` - * package="com.example.exampleapp" - * android:versionCode="1" - * ``` - */ -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, _, _, _, _) } - - /** Holds if this attribute has a namespace. */ - predicate hasNamespace() { xmlHasNs(this, _, _) } - - /** Gets the namespace of this attribute, if any. */ - XmlNamespace getNamespace() { xmlHasNs(this, result, _) } - - /** Gets the value of this attribute. */ - string getValue() { xmlAttrs(this, _, _, result, _, _) } - - /** Gets a printable representation of this XML attribute. */ - override string toString() { result = this.getName() + "=" + this.getValue() } -} - -/** - * A namespace used in an XML file. - * - * Example: - * - * ``` - * xmlns:android="http://schemas.android.com/apk/res/android" - * ``` - */ -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, _) } - - /** Holds if this namespace has no prefix. */ - predicate isDefault() { this.getPrefix() = "" } - - override string toString() { - this.isDefault() and result = this.getUri() - or - not this.isDefault() and result = this.getPrefix() + ":" + this.getUri() - } -} - -/** - * A comment in an XML file. - * - * Example: - * - * ``` - * - * ``` - */ -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, _) } - - /** Gets a printable representation of this XML comment. */ - override string toString() { result = this.getText() } -} - -/** - * A sequence of characters that occurs between opening and - * closing tags of an XML element, excluding other elements. - * - * Example: - * - * ``` - * This is a sequence of characters. - * ``` - */ -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, _, _, _) } - - /** Holds if this character sequence is CDATA. */ - predicate isCDATA() { xmlChars(this, _, _, _, 1, _) } - - /** Gets a printable representation of this XML character sequence. */ - override string toString() { result = this.getCharacters() } -} +import Make diff --git a/java/ql/src/CHANGELOG.md b/java/ql/src/CHANGELOG.md index 5d835351453..4b758396b91 100644 --- a/java/ql/src/CHANGELOG.md +++ b/java/ql/src/CHANGELOG.md @@ -1,3 +1,36 @@ +## 0.8.13 + +### New Queries + +* The query `java/unsafe-url-forward-dispatch-load` has been promoted from experimental to the main query pack as `java/unvalidated-url-forward`. Its results will now appear by default. This query was originally submitted as an experimental query [by @haby0](https://github.com/github/codeql/pull/6240) and [by @luchua-bc](https://github.com/github/codeql/pull/7286). + +### Major Analysis Improvements + +* The `java/missing-case-in-switch` query now gives only a single alert for each switch statement, giving some examples of the missing cases as well as a count of how many are missing. + +### Minor Analysis Improvements + +* Variables named `tokenImage` are no longer sources for the `java/sensitive-log` query. This is because this variable name is used in parsing code generated by JavaCC, so it causes a large number of false positive alerts. +* Added sanitizers for relative URLs, `List.contains()`, and checking the host of a URI to the `java/ssrf` and `java/unvalidated-url-redirection` queries. + +## 0.8.12 + +No user-facing changes. + +## 0.8.11 + +No user-facing changes. + +## 0.8.10 + +### New Queries + +* Added a new query `java/android/insecure-local-key-gen` for finding instances of keys generated for biometric authentication in an insecure way. + +### Minor Analysis Improvements + +* To reduce the number of false positives in the query "Insertion of sensitive information into log files" (`java/sensitive-log`), variables with names that contain "null" (case-insensitively) are no longer considered sources of sensitive information. + ## 0.8.9 ### New Queries diff --git a/java/ql/src/Likely Bugs/Arithmetic/InformationLoss.ql b/java/ql/src/Likely Bugs/Arithmetic/InformationLoss.ql index d2ff4c24060..7d97af12b71 100644 --- a/java/ql/src/Likely Bugs/Arithmetic/InformationLoss.ql +++ b/java/ql/src/Likely Bugs/Arithmetic/InformationLoss.ql @@ -27,10 +27,23 @@ class DangerousAssignOpExpr extends AssignOp { predicate problematicCasting(Type t, Expr e) { e.getType().(NumType).widerThan(t) } -from DangerousAssignOpExpr a, Expr e +Variable getVariable(Expr dest) { + result = dest.(VarAccess).getVariable() + or + result = dest.(ArrayAccess).getArray().(VarAccess).getVariable() +} + +from DangerousAssignOpExpr a, Expr e, Top v where e = a.getSource() and - problematicCasting(a.getDest().getType(), e) + problematicCasting(a.getDest().getType(), e) and + ( + v = getVariable(a.getDest()) + or + // fallback, in case we can't easily determine the variable + not exists(getVariable(a.getDest())) and + v = a.getDest() + ) select a, - "Implicit cast of source type " + e.getType().getName() + " to narrower destination type " + - a.getDest().getType().getName() + "." + "Implicit cast of source type " + e.getType().getName() + " to narrower destination type $@.", v, + a.getDest().getType().getName() diff --git a/java/ql/src/Likely Bugs/Statements/MissingEnumInSwitch.ql b/java/ql/src/Likely Bugs/Statements/MissingEnumInSwitch.ql index dfea3ad72d9..d1cdb8bdfbb 100644 --- a/java/ql/src/Likely Bugs/Statements/MissingEnumInSwitch.ql +++ b/java/ql/src/Likely Bugs/Statements/MissingEnumInSwitch.ql @@ -13,10 +13,51 @@ import java -from SwitchStmt switch, EnumType enum, EnumConstant missing -where - switch.getExpr().getType() = enum and - missing.getDeclaringType() = enum and +EnumConstant nthMissing(SwitchStmt switch, int index) { not exists(switch.getDefaultCase()) and - not switch.getAConstCase().getValue() = missing.getAnAccess() -select switch, "Switch statement does not have a case for $@.", missing, missing.getName() + exists(EnumType enum | + switch.getExpr().getType() = enum and + result = + rank[index](EnumConstant ec | + ec.getDeclaringType() = enum and + not switch.getAConstCase().getValue() = ec.getAnAccess() + | + ec order by ec.getName() + ) + ) +} + +predicate first3(string msg, SwitchStmt switch, EnumConstant e1, EnumConstant e2, EnumConstant e3) { + exists(int n | n = strictcount(nthMissing(switch, _)) | + if n > 3 + then msg = "Switch statement does not have a case for $@, $@, $@, or " + (n - 3) + " more." + else msg = "Switch statement does not have a case for $@, $@, or $@." + ) and + e1 = nthMissing(switch, 1) and + e2 = nthMissing(switch, 2) and + e3 = nthMissing(switch, 3) +} + +predicate only2(string msg, SwitchStmt switch, EnumConstant e1, EnumConstant e2) { + msg = "Switch statement does not have a case for $@ or $@." and + e1 = nthMissing(switch, 1) and + e2 = nthMissing(switch, 2) +} + +predicate only1(string msg, SwitchStmt switch, EnumConstant e) { + msg = "Switch statement does not have a case for $@." and + e = nthMissing(switch, 1) +} + +from string msg, SwitchStmt switch, EnumConstant e1, EnumConstant e2, EnumConstant e3 +where + if first3(_, switch, _, _, _) + then first3(msg, switch, e1, e2, e3) + else + if only2(_, switch, _, _) + then ( + only2(msg, switch, e1, e2) and e1 = e3 + ) else ( + only1(msg, switch, e1) and e1 = e2 and e1 = e3 + ) +select switch, msg, e1, e1.getName(), e2, e2.getName(), e3, e3.getName() diff --git a/java/ql/src/Metrics/Summaries/LinesOfCode.ql b/java/ql/src/Metrics/Summaries/LinesOfCode.ql index 769a3476ed2..e2e83b35631 100644 --- a/java/ql/src/Metrics/Summaries/LinesOfCode.ql +++ b/java/ql/src/Metrics/Summaries/LinesOfCode.ql @@ -7,6 +7,7 @@ * @kind metric * @tags summary * lines-of-code + * debug */ import java diff --git a/java/ql/src/Security/CWE/CWE-552/UrlForward.java b/java/ql/src/Security/CWE/CWE-552/UrlForward.java new file mode 100644 index 00000000000..db701fbcd9a --- /dev/null +++ b/java/ql/src/Security/CWE/CWE-552/UrlForward.java @@ -0,0 +1,17 @@ +public class UrlForward extends HttpServlet { + private static final String VALID_FORWARD = "https://cwe.mitre.org/data/definitions/552.html"; + + protected void doGet(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + ServletConfig cfg = getServletConfig(); + ServletContext sc = cfg.getServletContext(); + + // BAD: a request parameter is incorporated without validation into a URL forward + sc.getRequestDispatcher(request.getParameter("target")).forward(request, response); + + // GOOD: the request parameter is validated against a known fixed string + if (VALID_FORWARD.equals(request.getParameter("target"))) { + sc.getRequestDispatcher(VALID_FORWARD).forward(request, response); + } + } +} diff --git a/java/ql/src/Security/CWE/CWE-552/UrlForward.qhelp b/java/ql/src/Security/CWE/CWE-552/UrlForward.qhelp new file mode 100644 index 00000000000..71316385335 --- /dev/null +++ b/java/ql/src/Security/CWE/CWE-552/UrlForward.qhelp @@ -0,0 +1,36 @@ + + + + + +

Directly incorporating user input into a URL forward request without validating the input +can cause file information disclosure by allowing an attacker to access unauthorized URLs.

+ +
+ + +

To guard against untrusted URL forwarding, you should avoid putting user input +directly into a forwarded URL. Instead, you should maintain a list of authorized +URLs on the server, then choose from that list based on the user input provided.

+ +
+ + +

The following example shows an HTTP request parameter being used directly in a URL forward +without validating the input, which may cause file information disclosure. +It also shows how to remedy the problem by validating the user input against a known fixed string. +

+ + + +
+ + +
  • OWASP: + Unvalidated Redirects and Forwards Cheat Sheet. +
  • + +
    +
    diff --git a/java/ql/src/Security/CWE/CWE-552/UrlForward.ql b/java/ql/src/Security/CWE/CWE-552/UrlForward.ql new file mode 100644 index 00000000000..91e244a8152 --- /dev/null +++ b/java/ql/src/Security/CWE/CWE-552/UrlForward.ql @@ -0,0 +1,21 @@ +/** + * @name URL forward from a remote source + * @description URL forward based on unvalidated user input + * may cause file information disclosure. + * @kind path-problem + * @problem.severity error + * @security-severity 7.5 + * @precision high + * @id java/unvalidated-url-forward + * @tags security + * external/cwe/cwe-552 + */ + +import java +import semmle.code.java.security.UrlForwardQuery +import UrlForwardFlow::PathGraph + +from UrlForwardFlow::PathNode source, UrlForwardFlow::PathNode sink +where UrlForwardFlow::flowPath(source, sink) +select sink.getNode(), source, sink, "Untrusted URL forward depends on a $@.", source.getNode(), + "user-provided value" diff --git a/java/ql/src/change-notes/2024-02-12-android-insecure-keys.md b/java/ql/src/change-notes/2024-02-12-android-insecure-keys.md deleted file mode 100644 index 1de07727796..00000000000 --- a/java/ql/src/change-notes/2024-02-12-android-insecure-keys.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: newQuery ---- -* Added a new query `java/android/insecure-local-key-gen` for finding instances of keys generated for biometric authentication in an insecure way. \ No newline at end of file diff --git a/java/ql/src/change-notes/2024-03-12-request-sanitizers.md b/java/ql/src/change-notes/2024-03-12-request-sanitizers.md deleted file mode 100644 index 08229d6d7d0..00000000000 --- a/java/ql/src/change-notes/2024-03-12-request-sanitizers.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Added sanitizers for relative URLs, `List.contains()`, and checking the host of a URI to the `java/ssrf` and `java/unvalidated-url-redirection` queries. \ No newline at end of file diff --git a/java/ql/src/change-notes/2024-03-04-sensitive-log-remove-null-from-sources.md b/java/ql/src/change-notes/released/0.8.10.md similarity index 54% rename from java/ql/src/change-notes/2024-03-04-sensitive-log-remove-null-from-sources.md rename to java/ql/src/change-notes/released/0.8.10.md index 0bb4f18f2bd..c5d18ae3379 100644 --- a/java/ql/src/change-notes/2024-03-04-sensitive-log-remove-null-from-sources.md +++ b/java/ql/src/change-notes/released/0.8.10.md @@ -1,4 +1,9 @@ ---- -category: minorAnalysis ---- +## 0.8.10 + +### New Queries + +* Added a new query `java/android/insecure-local-key-gen` for finding instances of keys generated for biometric authentication in an insecure way. + +### Minor Analysis Improvements + * To reduce the number of false positives in the query "Insertion of sensitive information into log files" (`java/sensitive-log`), variables with names that contain "null" (case-insensitively) are no longer considered sources of sensitive information. diff --git a/java/ql/src/change-notes/released/0.8.11.md b/java/ql/src/change-notes/released/0.8.11.md new file mode 100644 index 00000000000..6f504c5c207 --- /dev/null +++ b/java/ql/src/change-notes/released/0.8.11.md @@ -0,0 +1,3 @@ +## 0.8.11 + +No user-facing changes. diff --git a/java/ql/src/change-notes/released/0.8.12.md b/java/ql/src/change-notes/released/0.8.12.md new file mode 100644 index 00000000000..bc91afe9c1e --- /dev/null +++ b/java/ql/src/change-notes/released/0.8.12.md @@ -0,0 +1,3 @@ +## 0.8.12 + +No user-facing changes. diff --git a/java/ql/src/change-notes/released/0.8.13.md b/java/ql/src/change-notes/released/0.8.13.md new file mode 100644 index 00000000000..22dba4fa4fa --- /dev/null +++ b/java/ql/src/change-notes/released/0.8.13.md @@ -0,0 +1,14 @@ +## 0.8.13 + +### New Queries + +* The query `java/unsafe-url-forward-dispatch-load` has been promoted from experimental to the main query pack as `java/unvalidated-url-forward`. Its results will now appear by default. This query was originally submitted as an experimental query [by @haby0](https://github.com/github/codeql/pull/6240) and [by @luchua-bc](https://github.com/github/codeql/pull/7286). + +### Major Analysis Improvements + +* The `java/missing-case-in-switch` query now gives only a single alert for each switch statement, giving some examples of the missing cases as well as a count of how many are missing. + +### Minor Analysis Improvements + +* Variables named `tokenImage` are no longer sources for the `java/sensitive-log` query. This is because this variable name is used in parsing code generated by JavaCC, so it causes a large number of false positive alerts. +* Added sanitizers for relative URLs, `List.contains()`, and checking the host of a URI to the `java/ssrf` and `java/unvalidated-url-redirection` queries. diff --git a/java/ql/src/codeql-pack.release.yml b/java/ql/src/codeql-pack.release.yml index 5290c29b7fe..0fb6f3d786c 100644 --- a/java/ql/src/codeql-pack.release.yml +++ b/java/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.8.9 +lastReleaseVersion: 0.8.13 diff --git a/java/ql/src/experimental/Security/CWE/CWE-552/UnsafeLoadSpringResource.java b/java/ql/src/experimental/Security/CWE/CWE-552/UnsafeLoadSpringResource.java deleted file mode 100644 index ce462fe490e..00000000000 --- a/java/ql/src/experimental/Security/CWE/CWE-552/UnsafeLoadSpringResource.java +++ /dev/null @@ -1,21 +0,0 @@ -//BAD: no path validation in Spring resource loading -@GetMapping("/file") -public String getFileContent(@RequestParam(name="fileName") String fileName) { - ClassPathResource clr = new ClassPathResource(fileName); - - File file = ResourceUtils.getFile(fileName); - - Resource resource = resourceLoader.getResource(fileName); -} - -//GOOD: check for a trusted prefix, ensuring path traversal is not used to erase that prefix in Spring resource loading: -@GetMapping("/file") -public String getFileContent(@RequestParam(name="fileName") String fileName) { - if (!fileName.contains("..") && fileName.hasPrefix("/public-content")) { - ClassPathResource clr = new ClassPathResource(fileName); - - File file = ResourceUtils.getFile(fileName); - - Resource resource = resourceLoader.getResource(fileName); - } -} diff --git a/java/ql/src/experimental/Security/CWE/CWE-552/UnsafeResourceGet.java b/java/ql/src/experimental/Security/CWE/CWE-552/UnsafeResourceGet.java deleted file mode 100644 index 8b3583bf59e..00000000000 --- a/java/ql/src/experimental/Security/CWE/CWE-552/UnsafeResourceGet.java +++ /dev/null @@ -1,18 +0,0 @@ -// BAD: no URI validation -URL url = request.getServletContext().getResource(requestUrl); -url = getClass().getResource(requestUrl); -InputStream in = url.openStream(); - -InputStream in = request.getServletContext().getResourceAsStream(requestPath); -in = getClass().getClassLoader().getResourceAsStream(requestPath); - -// GOOD: check for a trusted prefix, ensuring path traversal is not used to erase that prefix: -// (alternatively use `Path.normalize` instead of checking for `..`) -if (!requestPath.contains("..") && requestPath.startsWith("/trusted")) { - InputStream in = request.getServletContext().getResourceAsStream(requestPath); -} - -Path path = Paths.get(requestUrl).normalize().toRealPath(); -if (path.startsWith("/trusted")) { - URL url = request.getServletContext().getResource(path.toString()); -} diff --git a/java/ql/src/experimental/Security/CWE/CWE-552/UnsafeServletRequestDispatch.java b/java/ql/src/experimental/Security/CWE/CWE-552/UnsafeServletRequestDispatch.java deleted file mode 100644 index 88a794ab9c6..00000000000 --- a/java/ql/src/experimental/Security/CWE/CWE-552/UnsafeServletRequestDispatch.java +++ /dev/null @@ -1,11 +0,0 @@ -// BAD: no URI validation -String returnURL = request.getParameter("returnURL"); -RequestDispatcher rd = sc.getRequestDispatcher(returnURL); -rd.forward(request, response); - -// GOOD: check for a trusted prefix, ensuring path traversal is not used to erase that prefix: -// (alternatively use `Path.normalize` instead of checking for `..`) -if (!returnURL.contains("..") && returnURL.hasPrefix("/pages")) { ... } -// Also GOOD: check for a forbidden prefix, ensuring URL-encoding is not used to evade the check: -// (alternatively use `URLDecoder.decode` before `hasPrefix`) -if (returnURL.hasPrefix("/internal") && !returnURL.contains("%")) { ... } \ No newline at end of file diff --git a/java/ql/src/experimental/Security/CWE/CWE-552/UnsafeUrlForward.java b/java/ql/src/experimental/Security/CWE/CWE-552/UnsafeUrlForward.java deleted file mode 100644 index d159c405736..00000000000 --- a/java/ql/src/experimental/Security/CWE/CWE-552/UnsafeUrlForward.java +++ /dev/null @@ -1,38 +0,0 @@ -import java.io.IOException; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.servlet.ModelAndView; - -@Controller -public class UnsafeUrlForward { - - @GetMapping("/bad1") - public ModelAndView bad1(String url) { - return new ModelAndView(url); - } - - @GetMapping("/bad2") - public void bad2(String url, HttpServletRequest request, HttpServletResponse response) { - try { - request.getRequestDispatcher("/WEB-INF/jsp/" + url + ".jsp").include(request, response); - } catch (ServletException e) { - e.printStackTrace(); - } catch (IOException e) { - e.printStackTrace(); - } - } - - @GetMapping("/good1") - public void good1(String url, HttpServletRequest request, HttpServletResponse response) { - try { - request.getRequestDispatcher("/index.jsp?token=" + url).forward(request, response); - } catch (ServletException e) { - e.printStackTrace(); - } catch (IOException e) { - e.printStackTrace(); - } - } -} diff --git a/java/ql/src/experimental/Security/CWE/CWE-552/UnsafeUrlForward.qhelp b/java/ql/src/experimental/Security/CWE/CWE-552/UnsafeUrlForward.qhelp deleted file mode 100644 index 2e425952edc..00000000000 --- a/java/ql/src/experimental/Security/CWE/CWE-552/UnsafeUrlForward.qhelp +++ /dev/null @@ -1,70 +0,0 @@ - - - - - -

    Constructing a server-side redirect path with user input could allow an attacker to download application binaries -(including application classes or jar files) or view arbitrary files within protected directories.

    - -
    - - -

    Unsanitized user provided data must not be used to construct the path for URL forwarding. In order to prevent -untrusted URL forwarding, it is recommended to avoid concatenating user input directly into the forwarding URL. -Instead, user input should be checked against allowed (e.g., must come within user_content/) or disallowed -(e.g. must not come within /internal) paths, ensuring that neither path traversal using ../ -or URL encoding are used to evade these checks. -

    - -
    - - -

    The following examples show the bad case and the good case respectively. -The bad methods show an HTTP request parameter being used directly in a URL forward -without validating the input, which may cause file leakage. In the good1 method, -ordinary forwarding requests are shown, which will not cause file leakage. -

    - - - -

    The following examples show an HTTP request parameter or request path being used directly in a -request dispatcher of Java EE without validating the input, which allows sensitive file exposure -attacks. It also shows how to remedy the problem by validating the user input. -

    - - - -

    The following examples show an HTTP request parameter or request path being used directly to -retrieve a resource of a Java EE application without validating the input, which allows sensitive -file exposure attacks. It also shows how to remedy the problem by validating the user input. -

    - - - -

    The following examples show an HTTP request parameter being used directly to retrieve a resource - of a Java Spring application without validating the input, which allows sensitive file exposure - attacks. It also shows how to remedy the problem by validating the user input. -

    - - -
    - -
  • File Disclosure: - Unsafe Url Forward. -
  • -
  • Jakarta Javadoc: - Security vulnerability with unsafe usage of RequestDispatcher. -
  • -
  • Micro Focus: - File Disclosure: J2EE -
  • -
  • CVE-2015-5174: - Apache Tomcat 6.0/7.0/8.0/9.0 Servletcontext getResource/getResourceAsStream/getResourcePaths Path Traversal -
  • -
  • CVE-2019-3799: - CVE-2019-3799 - Spring-Cloud-Config-Server Directory Traversal < 2.1.2, 2.0.4, 1.4.6 -
  • -
    -
    diff --git a/java/ql/src/experimental/Security/CWE/CWE-552/UnsafeUrlForward.ql b/java/ql/src/experimental/Security/CWE/CWE-552/UnsafeUrlForward.ql deleted file mode 100644 index 15dd04a0a76..00000000000 --- a/java/ql/src/experimental/Security/CWE/CWE-552/UnsafeUrlForward.ql +++ /dev/null @@ -1,64 +0,0 @@ -/** - * @name Unsafe URL forward, dispatch, or load from remote source - * @description URL forward, dispatch, or load based on unvalidated user-input - * may cause file information disclosure. - * @kind path-problem - * @problem.severity error - * @precision high - * @id java/unsafe-url-forward-dispatch-load - * @tags security - * experimental - * external/cwe/cwe-552 - */ - -import java -import UnsafeUrlForward -import semmle.code.java.dataflow.FlowSources -import semmle.code.java.dataflow.TaintTracking -import experimental.semmle.code.java.frameworks.Jsf -import semmle.code.java.security.PathSanitizer -import UnsafeUrlForwardFlow::PathGraph - -module UnsafeUrlForwardFlowConfig implements DataFlow::ConfigSig { - predicate isSource(DataFlow::Node source) { - source instanceof ThreatModelFlowSource and - not exists(MethodCall ma, Method m | ma.getMethod() = m | - ( - m instanceof HttpServletRequestGetRequestUriMethod or - m instanceof HttpServletRequestGetRequestUrlMethod or - m instanceof HttpServletRequestGetPathMethod - ) and - ma = source.asExpr() - ) - } - - predicate isSink(DataFlow::Node sink) { sink instanceof UnsafeUrlForwardSink } - - predicate isBarrier(DataFlow::Node node) { - node instanceof UnsafeUrlForwardSanitizer or - node instanceof PathInjectionSanitizer - } - - DataFlow::FlowFeature getAFeature() { result instanceof DataFlow::FeatureHasSourceCallContext } - - predicate isAdditionalFlowStep(DataFlow::Node prev, DataFlow::Node succ) { - exists(MethodCall ma | - ( - ma.getMethod() instanceof GetServletResourceMethod or - ma.getMethod() instanceof GetFacesResourceMethod or - ma.getMethod() instanceof GetClassResourceMethod or - ma.getMethod() instanceof GetClassLoaderResourceMethod or - ma.getMethod() instanceof GetWildflyResourceMethod - ) and - ma.getArgument(0) = prev.asExpr() and - ma = succ.asExpr() - ) - } -} - -module UnsafeUrlForwardFlow = TaintTracking::Global; - -from UnsafeUrlForwardFlow::PathNode source, UnsafeUrlForwardFlow::PathNode sink -where UnsafeUrlForwardFlow::flowPath(source, sink) -select sink.getNode(), source, sink, "Potentially untrusted URL forward due to $@.", - source.getNode(), "user-provided value" diff --git a/java/ql/src/experimental/Security/CWE/CWE-552/UnsafeUrlForward.qll b/java/ql/src/experimental/Security/CWE/CWE-552/UnsafeUrlForward.qll deleted file mode 100644 index 1baec2dd1fa..00000000000 --- a/java/ql/src/experimental/Security/CWE/CWE-552/UnsafeUrlForward.qll +++ /dev/null @@ -1,163 +0,0 @@ -import java -private import experimental.semmle.code.java.frameworks.Jsf -private import semmle.code.java.dataflow.ExternalFlow -private import semmle.code.java.dataflow.FlowSources -private import semmle.code.java.dataflow.StringPrefixes -private import semmle.code.java.frameworks.javaee.ejb.EJBRestrictions -private import experimental.semmle.code.java.frameworks.SpringResource -private import semmle.code.java.security.Sanitizers - -private class ActiveModels extends ActiveExperimentalModels { - ActiveModels() { this = "unsafe-url-forward" } -} - -/** A sink for unsafe URL forward vulnerabilities. */ -abstract class UnsafeUrlForwardSink extends DataFlow::Node { } - -/** A sanitizer for unsafe URL forward vulnerabilities. */ -abstract class UnsafeUrlForwardSanitizer extends DataFlow::Node { } - -/** An argument to `getRequestDispatcher`. */ -private class RequestDispatcherSink extends UnsafeUrlForwardSink { - RequestDispatcherSink() { - exists(MethodCall ma | - ma.getMethod() instanceof GetRequestDispatcherMethod and - ma.getArgument(0) = this.asExpr() - ) - } -} - -/** The `getResource` method of `Class`. */ -class GetClassResourceMethod extends Method { - GetClassResourceMethod() { - this.getDeclaringType() instanceof TypeClass and - this.hasName("getResource") - } -} - -/** The `getResourceAsStream` method of `Class`. */ -class GetClassResourceAsStreamMethod extends Method { - GetClassResourceAsStreamMethod() { - this.getDeclaringType() instanceof TypeClass and - this.hasName("getResourceAsStream") - } -} - -/** The `getResource` method of `ClassLoader`. */ -class GetClassLoaderResourceMethod extends Method { - GetClassLoaderResourceMethod() { - this.getDeclaringType() instanceof ClassLoaderClass and - this.hasName("getResource") - } -} - -/** The `getResourceAsStream` method of `ClassLoader`. */ -class GetClassLoaderResourceAsStreamMethod extends Method { - GetClassLoaderResourceAsStreamMethod() { - this.getDeclaringType() instanceof ClassLoaderClass and - this.hasName("getResourceAsStream") - } -} - -/** The JBoss class `FileResourceManager`. */ -class FileResourceManager extends RefType { - FileResourceManager() { - this.hasQualifiedName("io.undertow.server.handlers.resource", "FileResourceManager") - } -} - -/** The JBoss method `getResource` of `FileResourceManager`. */ -class GetWildflyResourceMethod extends Method { - GetWildflyResourceMethod() { - this.getDeclaringType().getASupertype*() instanceof FileResourceManager and - this.hasName("getResource") - } -} - -/** The JBoss class `VirtualFile`. */ -class VirtualFile extends RefType { - VirtualFile() { this.hasQualifiedName("org.jboss.vfs", "VirtualFile") } -} - -/** The JBoss method `getChild` of `FileResourceManager`. */ -class GetVirtualFileChildMethod extends Method { - GetVirtualFileChildMethod() { - this.getDeclaringType().getASupertype*() instanceof VirtualFile and - this.hasName("getChild") - } -} - -/** An argument to `getResource()` or `getResourceAsStream()`. */ -private class GetResourceSink extends UnsafeUrlForwardSink { - GetResourceSink() { - sinkNode(this, "request-forgery") - or - sinkNode(this, "get-resource") - or - exists(MethodCall ma | - ( - ma.getMethod() instanceof GetServletResourceAsStreamMethod or - ma.getMethod() instanceof GetFacesResourceAsStreamMethod or - ma.getMethod() instanceof GetClassResourceAsStreamMethod or - ma.getMethod() instanceof GetClassLoaderResourceAsStreamMethod or - ma.getMethod() instanceof GetVirtualFileChildMethod - ) and - ma.getArgument(0) = this.asExpr() - ) - } -} - -/** A sink for methods that load Spring resources. */ -private class SpringResourceSink extends UnsafeUrlForwardSink { - SpringResourceSink() { - exists(MethodCall ma | - ma.getMethod() instanceof GetResourceUtilsMethod and - ma.getArgument(0) = this.asExpr() - ) - } -} - -/** An argument to `new ModelAndView` or `ModelAndView.setViewName`. */ -private class SpringModelAndViewSink extends UnsafeUrlForwardSink { - SpringModelAndViewSink() { - exists(ClassInstanceExpr cie | - cie.getConstructedType() instanceof ModelAndView and - cie.getArgument(0) = this.asExpr() - ) - or - exists(SpringModelAndViewSetViewNameCall smavsvnc | smavsvnc.getArgument(0) = this.asExpr()) - } -} - -private class PrimitiveSanitizer extends UnsafeUrlForwardSanitizer instanceof SimpleTypeSanitizer { -} - -private class SanitizingPrefix extends InterestingPrefix { - SanitizingPrefix() { - not this.getStringValue().matches("/WEB-INF/%") and - not this.getStringValue() = "forward:" - } - - override int getOffset() { result = 0 } -} - -private class FollowsSanitizingPrefix extends UnsafeUrlForwardSanitizer { - FollowsSanitizingPrefix() { this.asExpr() = any(SanitizingPrefix fp).getAnAppendedExpression() } -} - -private class ForwardPrefix extends InterestingPrefix { - ForwardPrefix() { this.getStringValue() = "forward:" } - - override int getOffset() { result = 0 } -} - -/** - * An expression appended (perhaps indirectly) to `"forward:"`, and which - * is reachable from a Spring entry point. - */ -private class SpringUrlForwardSink extends UnsafeUrlForwardSink { - SpringUrlForwardSink() { - any(SpringRequestMappingMethod sqmm).polyCalls*(this.getEnclosingCallable()) and - this.asExpr() = any(ForwardPrefix fp).getAnAppendedExpression() - } -} diff --git a/java/ql/src/qlpack.yml b/java/ql/src/qlpack.yml index 8f4de528e21..a65abf369a2 100644 --- a/java/ql/src/qlpack.yml +++ b/java/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-queries -version: 0.8.10-dev +version: 0.8.14-dev groups: - java - queries diff --git a/java/ql/src/utils/modeleditor/FrameworkModeEndpointsQuery.qll b/java/ql/src/utils/modeleditor/FrameworkModeEndpointsQuery.qll index d8af480c6d3..76c727a4bf5 100644 --- a/java/ql/src/utils/modeleditor/FrameworkModeEndpointsQuery.qll +++ b/java/ql/src/utils/modeleditor/FrameworkModeEndpointsQuery.qll @@ -8,7 +8,7 @@ private import ModelEditor * A class of effectively public callables from source code. */ class PublicEndpointFromSource extends Endpoint, ModelApi { - override predicate isSource() { SourceSinkInterpretationInput::sourceElement(this, _, _) } + override predicate isSource() { SourceSinkInterpretationInput::sourceElement(this, _, _, _) } - override predicate isSink() { SourceSinkInterpretationInput::sinkElement(this, _, _) } + override predicate isSink() { SourceSinkInterpretationInput::sinkElement(this, _, _, _) } } diff --git a/java/ql/test-kotlin1/library-tests/java-kotlin-collection-type-generic-methods/test.expected b/java/ql/test-kotlin1/library-tests/java-kotlin-collection-type-generic-methods/test.expected index 9ad4eeeadc8..7768a1d28bd 100644 --- a/java/ql/test-kotlin1/library-tests/java-kotlin-collection-type-generic-methods/test.expected +++ b/java/ql/test-kotlin1/library-tests/java-kotlin-collection-type-generic-methods/test.expected @@ -32,6 +32,14 @@ methodWithDuplicate | AbstractCollection | removeAll | Collection | | AbstractCollection | retainAll | Collection | | AbstractCollection | toArray | T[] | +| AbstractCollection | add | T | +| AbstractCollection | addAll | Collection | +| AbstractCollection | contains | Object | +| AbstractCollection | containsAll | Collection | +| AbstractCollection | remove | Object | +| AbstractCollection | removeAll | Collection | +| AbstractCollection | retainAll | Collection | +| AbstractCollection | toArray | T[] | | AbstractList | add | E | | AbstractList | add | int | | AbstractList | addAll | Collection | @@ -169,6 +177,17 @@ methodWithDuplicate | Collection | retainAll | Collection | | Collection | toArray | IntFunction | | Collection | toArray | T[] | +| Collection | add | T | +| Collection | addAll | Collection | +| Collection | contains | Object | +| Collection | containsAll | Collection | +| Collection | equals | Object | +| Collection | remove | Object | +| Collection | removeAll | Collection | +| Collection | removeIf | Predicate | +| Collection | retainAll | Collection | +| Collection | toArray | IntFunction | +| Collection | toArray | T[] | | Collection | add | V | | Collection | addAll | Collection | | Collection | contains | Object | diff --git a/java/ql/test-kotlin2/library-tests/exprs/exprs.expected b/java/ql/test-kotlin2/library-tests/exprs/exprs.expected index 13dfc71b6c3..43440a18374 100644 --- a/java/ql/test-kotlin2/library-tests/exprs/exprs.expected +++ b/java/ql/test-kotlin2/library-tests/exprs/exprs.expected @@ -68,16 +68,16 @@ | delegatedProperties.kt:18:12:18:33 | Map | file://:0:0:0:0 | | TypeAccess | | delegatedProperties.kt:18:12:18:33 | Object | file://:0:0:0:0 | | TypeAccess | | delegatedProperties.kt:18:12:18:33 | String | file://:0:0:0:0 | | TypeAccess | -| delegatedProperties.kt:19:34:19:51 | ...::... | delegatedProperties.kt:19:34:19:51 | | PropertyRefExpr | -| delegatedProperties.kt:19:34:19:51 | ...::... | delegatedProperties.kt:19:34:19:51 | | PropertyRefExpr | +| delegatedProperties.kt:19:34:19:51 | ...::... | delegatedProperties.kt:19:9:19:51 | | PropertyRefExpr | +| delegatedProperties.kt:19:34:19:51 | ...::... | delegatedProperties.kt:19:9:19:51 | | PropertyRefExpr | | delegatedProperties.kt:19:34:19:51 | (...) | delegatedProperties.kt:19:34:19:51 | get | MethodCall | | delegatedProperties.kt:19:34:19:51 | (...) | delegatedProperties.kt:19:34:19:51 | get | MethodCall | | delegatedProperties.kt:19:34:19:51 | (...) | delegatedProperties.kt:19:34:19:51 | set | MethodCall | | delegatedProperties.kt:19:34:19:51 | (...) | delegatedProperties.kt:19:34:19:51 | set | MethodCall | -| delegatedProperties.kt:19:34:19:51 | Integer | delegatedProperties.kt:19:34:19:51 | | TypeAccess | -| delegatedProperties.kt:19:34:19:51 | Integer | delegatedProperties.kt:19:34:19:51 | | TypeAccess | -| delegatedProperties.kt:19:34:19:51 | KMutableProperty0 | delegatedProperties.kt:19:34:19:51 | | TypeAccess | -| delegatedProperties.kt:19:34:19:51 | KMutableProperty0 | delegatedProperties.kt:19:34:19:51 | | TypeAccess | +| delegatedProperties.kt:19:34:19:51 | Integer | delegatedProperties.kt:19:9:19:51 | | TypeAccess | +| delegatedProperties.kt:19:34:19:51 | Integer | delegatedProperties.kt:19:9:19:51 | | TypeAccess | +| delegatedProperties.kt:19:34:19:51 | KMutableProperty0 | delegatedProperties.kt:19:9:19:51 | | TypeAccess | +| delegatedProperties.kt:19:34:19:51 | KMutableProperty0 | delegatedProperties.kt:19:9:19:51 | | TypeAccess | | delegatedProperties.kt:19:34:19:51 | Object | delegatedProperties.kt:19:34:19:51 | get | TypeAccess | | delegatedProperties.kt:19:34:19:51 | Object | delegatedProperties.kt:19:34:19:51 | get | TypeAccess | | delegatedProperties.kt:19:34:19:51 | Object | delegatedProperties.kt:19:34:19:51 | set | TypeAccess | @@ -87,19 +87,19 @@ | delegatedProperties.kt:19:34:19:51 | a0 | delegatedProperties.kt:19:34:19:51 | set | VarAccess | | delegatedProperties.kt:19:34:19:51 | get(...) | delegatedProperties.kt:19:34:19:51 | invoke | MethodCall | | delegatedProperties.kt:19:34:19:51 | get(...) | delegatedProperties.kt:19:34:19:51 | invoke | MethodCall | -| delegatedProperties.kt:19:34:19:51 | getValue(...) | delegatedProperties.kt:19:34:19:51 | | MethodCall | +| delegatedProperties.kt:19:34:19:51 | getValue(...) | delegatedProperties.kt:19:9:19:51 | | MethodCall | | delegatedProperties.kt:19:34:19:51 | int | file://:0:0:0:0 | | TypeAccess | | delegatedProperties.kt:19:34:19:51 | int | file://:0:0:0:0 | | TypeAccess | | delegatedProperties.kt:19:34:19:51 | new (...) | delegatedProperties.kt:19:34:19:51 | get | ClassInstanceExpr | | delegatedProperties.kt:19:34:19:51 | new (...) | delegatedProperties.kt:19:34:19:51 | get | ClassInstanceExpr | | delegatedProperties.kt:19:34:19:51 | new (...) | delegatedProperties.kt:19:34:19:51 | set | ClassInstanceExpr | | delegatedProperties.kt:19:34:19:51 | new (...) | delegatedProperties.kt:19:34:19:51 | set | ClassInstanceExpr | -| delegatedProperties.kt:19:34:19:51 | setValue(...) | delegatedProperties.kt:19:34:19:51 | | MethodCall | +| delegatedProperties.kt:19:34:19:51 | setValue(...) | delegatedProperties.kt:19:9:19:51 | | MethodCall | | delegatedProperties.kt:19:34:19:51 | this | delegatedProperties.kt:19:34:19:51 | invoke | ThisAccess | | delegatedProperties.kt:19:34:19:51 | this | delegatedProperties.kt:19:34:19:51 | invoke | ThisAccess | | delegatedProperties.kt:19:34:19:51 | varResource1$delegate | delegatedProperties.kt:18:5:40:5 | fn | LocalVariableDeclExpr | -| delegatedProperties.kt:19:34:19:51 | varResource1$delegate | delegatedProperties.kt:19:34:19:51 | | VarAccess | -| delegatedProperties.kt:19:34:19:51 | varResource1$delegate | delegatedProperties.kt:19:34:19:51 | | VarAccess | +| delegatedProperties.kt:19:34:19:51 | varResource1$delegate | delegatedProperties.kt:19:9:19:51 | | VarAccess | +| delegatedProperties.kt:19:34:19:51 | varResource1$delegate | delegatedProperties.kt:19:9:19:51 | | VarAccess | | delegatedProperties.kt:19:34:19:51 | ResourceDelegate | delegatedProperties.kt:18:5:40:5 | fn | TypeAccess | | delegatedProperties.kt:19:34:19:51 | new ResourceDelegate(...) | delegatedProperties.kt:18:5:40:5 | fn | ClassInstanceExpr | | delegatedProperties.kt:19:34:19:51 | value | delegatedProperties.kt:19:34:19:51 | | VarAccess | @@ -112,19 +112,19 @@ | delegatedProperties.kt:21:9:21:24 | Object | delegatedProperties.kt:18:5:40:5 | fn | TypeAccess | | delegatedProperties.kt:21:9:21:24 | new (...) | delegatedProperties.kt:18:5:40:5 | fn | ClassInstanceExpr | | delegatedProperties.kt:21:24:21:24 | 2 | delegatedProperties.kt:18:5:40:5 | fn | IntegerLiteral | -| delegatedProperties.kt:23:29:23:31 | ...::... | delegatedProperties.kt:23:29:23:31 | | PropertyRefExpr | +| delegatedProperties.kt:23:29:23:31 | ...::... | delegatedProperties.kt:23:9:23:31 | | PropertyRefExpr | | delegatedProperties.kt:23:29:23:31 | (...) | delegatedProperties.kt:23:29:23:31 | get | MethodCall | -| delegatedProperties.kt:23:29:23:31 | KProperty0 | delegatedProperties.kt:23:29:23:31 | | TypeAccess | -| delegatedProperties.kt:23:29:23:31 | MapAccessorsKt | delegatedProperties.kt:23:29:23:31 | | TypeAccess | -| delegatedProperties.kt:23:29:23:31 | Object | delegatedProperties.kt:23:29:23:31 | | TypeAccess | +| delegatedProperties.kt:23:29:23:31 | KProperty0 | delegatedProperties.kt:23:9:23:31 | | TypeAccess | +| delegatedProperties.kt:23:29:23:31 | MapAccessorsKt | delegatedProperties.kt:23:9:23:31 | | TypeAccess | +| delegatedProperties.kt:23:29:23:31 | Object | delegatedProperties.kt:23:9:23:31 | | TypeAccess | | delegatedProperties.kt:23:29:23:31 | Object | delegatedProperties.kt:23:29:23:31 | get | TypeAccess | -| delegatedProperties.kt:23:29:23:31 | String | delegatedProperties.kt:23:29:23:31 | | TypeAccess | -| delegatedProperties.kt:23:29:23:31 | String | delegatedProperties.kt:23:29:23:31 | | TypeAccess | +| delegatedProperties.kt:23:29:23:31 | String | delegatedProperties.kt:23:9:23:31 | | TypeAccess | +| delegatedProperties.kt:23:29:23:31 | String | delegatedProperties.kt:23:9:23:31 | | TypeAccess | | delegatedProperties.kt:23:29:23:31 | String | file://:0:0:0:0 | | TypeAccess | | delegatedProperties.kt:23:29:23:31 | get(...) | delegatedProperties.kt:23:29:23:31 | invoke | MethodCall | -| delegatedProperties.kt:23:29:23:31 | getValue(...) | delegatedProperties.kt:23:29:23:31 | | MethodCall | +| delegatedProperties.kt:23:29:23:31 | getValue(...) | delegatedProperties.kt:23:9:23:31 | | MethodCall | | delegatedProperties.kt:23:29:23:31 | name$delegate | delegatedProperties.kt:18:5:40:5 | fn | LocalVariableDeclExpr | -| delegatedProperties.kt:23:29:23:31 | name$delegate | delegatedProperties.kt:23:29:23:31 | | VarAccess | +| delegatedProperties.kt:23:29:23:31 | name$delegate | delegatedProperties.kt:23:9:23:31 | | VarAccess | | delegatedProperties.kt:23:29:23:31 | new (...) | delegatedProperties.kt:23:29:23:31 | get | ClassInstanceExpr | | delegatedProperties.kt:23:29:23:31 | this | delegatedProperties.kt:23:29:23:31 | invoke | ThisAccess | | delegatedProperties.kt:23:29:23:31 | map | delegatedProperties.kt:18:5:40:5 | fn | VarAccess | @@ -158,13 +158,13 @@ | delegatedProperties.kt:28:50:28:71 | ? ... | file://:0:0:0:0 | | WildcardTypeAccess | | delegatedProperties.kt:28:50:28:71 | KProperty | file://:0:0:0:0 | | TypeAccess | | delegatedProperties.kt:28:74:28:83 | int | file://:0:0:0:0 | | TypeAccess | -| delegatedProperties.kt:29:17:29:24 | setCurValue(...) | delegatedProperties.kt:28:22:30:13 | setValue | MethodCall | -| delegatedProperties.kt:29:17:29:24 | this | delegatedProperties.kt:28:22:30:13 | setValue | ThisAccess | -| delegatedProperties.kt:29:28:29:32 | value | delegatedProperties.kt:28:22:30:13 | setValue | VarAccess | -| delegatedProperties.kt:33:30:33:47 | ...::... | delegatedProperties.kt:33:30:33:47 | | PropertyRefExpr | +| delegatedProperties.kt:29:17:29:32 | setCurValue(...) | delegatedProperties.kt:28:13:30:13 | setValue | MethodCall | +| delegatedProperties.kt:29:17:29:32 | this | delegatedProperties.kt:28:13:30:13 | setValue | ThisAccess | +| delegatedProperties.kt:29:28:29:32 | value | delegatedProperties.kt:28:13:30:13 | setValue | VarAccess | +| delegatedProperties.kt:33:30:33:47 | ...::... | delegatedProperties.kt:33:9:33:47 | | PropertyRefExpr | | delegatedProperties.kt:33:30:33:47 | (...) | delegatedProperties.kt:33:30:33:47 | get | MethodCall | -| delegatedProperties.kt:33:30:33:47 | Integer | delegatedProperties.kt:33:30:33:47 | | TypeAccess | -| delegatedProperties.kt:33:30:33:47 | KProperty0 | delegatedProperties.kt:33:30:33:47 | | TypeAccess | +| delegatedProperties.kt:33:30:33:47 | Integer | delegatedProperties.kt:33:9:33:47 | | TypeAccess | +| delegatedProperties.kt:33:30:33:47 | KProperty0 | delegatedProperties.kt:33:9:33:47 | | TypeAccess | | delegatedProperties.kt:33:30:33:47 | Object | delegatedProperties.kt:33:30:33:47 | get | TypeAccess | | delegatedProperties.kt:33:30:33:47 | get(...) | delegatedProperties.kt:33:30:33:47 | invoke | MethodCall | | delegatedProperties.kt:33:30:33:47 | getValue(...) | delegatedProperties.kt:33:30:33:47 | | MethodCall | @@ -176,16 +176,16 @@ | delegatedProperties.kt:33:30:33:47 | Object | delegatedProperties.kt:18:5:40:5 | fn | TypeAccess | | delegatedProperties.kt:33:30:33:47 | new (...) | delegatedProperties.kt:18:5:40:5 | fn | ClassInstanceExpr | | delegatedProperties.kt:33:30:33:47 | resourceDelegate(...) | delegatedProperties.kt:18:5:40:5 | fn | MethodCall | -| delegatedProperties.kt:34:31:34:48 | ...::... | delegatedProperties.kt:34:31:34:48 | | PropertyRefExpr | -| delegatedProperties.kt:34:31:34:48 | ...::... | delegatedProperties.kt:34:31:34:48 | | PropertyRefExpr | +| delegatedProperties.kt:34:31:34:48 | ...::... | delegatedProperties.kt:34:9:34:48 | | PropertyRefExpr | +| delegatedProperties.kt:34:31:34:48 | ...::... | delegatedProperties.kt:34:9:34:48 | | PropertyRefExpr | | delegatedProperties.kt:34:31:34:48 | (...) | delegatedProperties.kt:34:31:34:48 | get | MethodCall | | delegatedProperties.kt:34:31:34:48 | (...) | delegatedProperties.kt:34:31:34:48 | get | MethodCall | | delegatedProperties.kt:34:31:34:48 | (...) | delegatedProperties.kt:34:31:34:48 | set | MethodCall | | delegatedProperties.kt:34:31:34:48 | (...) | delegatedProperties.kt:34:31:34:48 | set | MethodCall | -| delegatedProperties.kt:34:31:34:48 | Integer | delegatedProperties.kt:34:31:34:48 | | TypeAccess | -| delegatedProperties.kt:34:31:34:48 | Integer | delegatedProperties.kt:34:31:34:48 | | TypeAccess | -| delegatedProperties.kt:34:31:34:48 | KMutableProperty0 | delegatedProperties.kt:34:31:34:48 | | TypeAccess | -| delegatedProperties.kt:34:31:34:48 | KMutableProperty0 | delegatedProperties.kt:34:31:34:48 | | TypeAccess | +| delegatedProperties.kt:34:31:34:48 | Integer | delegatedProperties.kt:34:9:34:48 | | TypeAccess | +| delegatedProperties.kt:34:31:34:48 | Integer | delegatedProperties.kt:34:9:34:48 | | TypeAccess | +| delegatedProperties.kt:34:31:34:48 | KMutableProperty0 | delegatedProperties.kt:34:9:34:48 | | TypeAccess | +| delegatedProperties.kt:34:31:34:48 | KMutableProperty0 | delegatedProperties.kt:34:9:34:48 | | TypeAccess | | delegatedProperties.kt:34:31:34:48 | Object | delegatedProperties.kt:34:31:34:48 | get | TypeAccess | | delegatedProperties.kt:34:31:34:48 | Object | delegatedProperties.kt:34:31:34:48 | get | TypeAccess | | delegatedProperties.kt:34:31:34:48 | Object | delegatedProperties.kt:34:31:34:48 | set | TypeAccess | @@ -195,7 +195,7 @@ | delegatedProperties.kt:34:31:34:48 | a0 | delegatedProperties.kt:34:31:34:48 | set | VarAccess | | delegatedProperties.kt:34:31:34:48 | get(...) | delegatedProperties.kt:34:31:34:48 | invoke | MethodCall | | delegatedProperties.kt:34:31:34:48 | get(...) | delegatedProperties.kt:34:31:34:48 | invoke | MethodCall | -| delegatedProperties.kt:34:31:34:48 | getValue(...) | delegatedProperties.kt:34:31:34:48 | | MethodCall | +| delegatedProperties.kt:34:31:34:48 | getValue(...) | delegatedProperties.kt:34:9:34:48 | | MethodCall | | delegatedProperties.kt:34:31:34:48 | int | file://:0:0:0:0 | | TypeAccess | | delegatedProperties.kt:34:31:34:48 | int | file://:0:0:0:0 | | TypeAccess | | delegatedProperties.kt:34:31:34:48 | new (...) | delegatedProperties.kt:34:31:34:48 | get | ClassInstanceExpr | @@ -205,7 +205,7 @@ | delegatedProperties.kt:34:31:34:48 | readWrite$delegate | delegatedProperties.kt:18:5:40:5 | fn | LocalVariableDeclExpr | | delegatedProperties.kt:34:31:34:48 | readWrite$delegate | delegatedProperties.kt:34:31:34:48 | | VarAccess | | delegatedProperties.kt:34:31:34:48 | readWrite$delegate | delegatedProperties.kt:34:31:34:48 | | VarAccess | -| delegatedProperties.kt:34:31:34:48 | setValue(...) | delegatedProperties.kt:34:31:34:48 | | MethodCall | +| delegatedProperties.kt:34:31:34:48 | setValue(...) | delegatedProperties.kt:34:9:34:48 | | MethodCall | | delegatedProperties.kt:34:31:34:48 | this | delegatedProperties.kt:34:31:34:48 | invoke | ThisAccess | | delegatedProperties.kt:34:31:34:48 | this | delegatedProperties.kt:34:31:34:48 | invoke | ThisAccess | | delegatedProperties.kt:34:31:34:48 | Object | delegatedProperties.kt:18:5:40:5 | fn | TypeAccess | @@ -220,18 +220,18 @@ | delegatedProperties.kt:37:9:37:24 | this | delegatedProperties.kt:18:5:40:5 | fn | ThisAccess | | delegatedProperties.kt:37:24:37:24 | 3 | delegatedProperties.kt:18:5:40:5 | fn | IntegerLiteral | | delegatedProperties.kt:39:34:39:51 | ...::... | delegatedProperties.kt:18:5:40:5 | fn | PropertyRefExpr | -| delegatedProperties.kt:39:34:39:51 | ...::... | delegatedProperties.kt:39:34:39:51 | | PropertyRefExpr | +| delegatedProperties.kt:39:34:39:51 | ...::... | delegatedProperties.kt:39:9:39:51 | | PropertyRefExpr | | delegatedProperties.kt:39:34:39:51 | (...) | delegatedProperties.kt:39:34:39:51 | get | MethodCall | | delegatedProperties.kt:39:34:39:51 | (...) | delegatedProperties.kt:39:34:39:51 | get | MethodCall | | delegatedProperties.kt:39:34:39:51 | Integer | delegatedProperties.kt:18:5:40:5 | fn | TypeAccess | -| delegatedProperties.kt:39:34:39:51 | Integer | delegatedProperties.kt:39:34:39:51 | | TypeAccess | +| delegatedProperties.kt:39:34:39:51 | Integer | delegatedProperties.kt:39:9:39:51 | | TypeAccess | | delegatedProperties.kt:39:34:39:51 | KProperty0 | delegatedProperties.kt:18:5:40:5 | fn | TypeAccess | -| delegatedProperties.kt:39:34:39:51 | KProperty0 | delegatedProperties.kt:39:34:39:51 | | TypeAccess | +| delegatedProperties.kt:39:34:39:51 | KProperty0 | delegatedProperties.kt:39:9:39:51 | | TypeAccess | | delegatedProperties.kt:39:34:39:51 | Object | delegatedProperties.kt:39:34:39:51 | get | TypeAccess | | delegatedProperties.kt:39:34:39:51 | Object | delegatedProperties.kt:39:34:39:51 | get | TypeAccess | | delegatedProperties.kt:39:34:39:51 | get(...) | delegatedProperties.kt:39:34:39:51 | invoke | MethodCall | | delegatedProperties.kt:39:34:39:51 | get(...) | delegatedProperties.kt:39:34:39:51 | invoke | MethodCall | -| delegatedProperties.kt:39:34:39:51 | getValue(...) | delegatedProperties.kt:39:34:39:51 | | MethodCall | +| delegatedProperties.kt:39:34:39:51 | getValue(...) | delegatedProperties.kt:39:9:39:51 | | MethodCall | | delegatedProperties.kt:39:34:39:51 | int | file://:0:0:0:0 | | TypeAccess | | delegatedProperties.kt:39:34:39:51 | new (...) | delegatedProperties.kt:39:34:39:51 | get | ClassInstanceExpr | | delegatedProperties.kt:39:34:39:51 | new (...) | delegatedProperties.kt:39:34:39:51 | get | ClassInstanceExpr | @@ -239,7 +239,7 @@ | delegatedProperties.kt:39:34:39:51 | this | delegatedProperties.kt:39:34:39:51 | invoke | ThisAccess | | delegatedProperties.kt:39:34:39:51 | this | delegatedProperties.kt:39:34:39:51 | invoke | ThisAccess | | delegatedProperties.kt:39:34:39:51 | varResource2$delegate | delegatedProperties.kt:18:5:40:5 | fn | LocalVariableDeclExpr | -| delegatedProperties.kt:39:34:39:51 | varResource2$delegate | delegatedProperties.kt:39:34:39:51 | | VarAccess | +| delegatedProperties.kt:39:34:39:51 | varResource2$delegate | delegatedProperties.kt:39:9:39:51 | | VarAccess | | delegatedProperties.kt:39:34:39:51 | DelegateProvider | delegatedProperties.kt:18:5:40:5 | fn | TypeAccess | | delegatedProperties.kt:39:34:39:51 | new DelegateProvider(...) | delegatedProperties.kt:18:5:40:5 | fn | ClassInstanceExpr | | delegatedProperties.kt:42:30:42:47 | ...::... | delegatedProperties.kt:42:30:42:47 | getVarResource0 | PropertyRefExpr | @@ -247,8 +247,8 @@ | delegatedProperties.kt:42:30:42:47 | ...=... | delegatedProperties.kt:17:1:43:1 | Owner | KtInitializerAssignExpr | | delegatedProperties.kt:42:30:42:47 | Integer | delegatedProperties.kt:42:30:42:47 | getVarResource0 | TypeAccess | | delegatedProperties.kt:42:30:42:47 | Integer | delegatedProperties.kt:42:30:42:47 | setVarResource0 | TypeAccess | +| delegatedProperties.kt:42:30:42:47 | KMutableProperty1 | delegatedProperties.kt:42:5:42:47 | setVarResource0 | TypeAccess | | delegatedProperties.kt:42:30:42:47 | KMutableProperty1 | delegatedProperties.kt:42:30:42:47 | getVarResource0 | TypeAccess | -| delegatedProperties.kt:42:30:42:47 | KMutableProperty1 | delegatedProperties.kt:42:30:42:47 | setVarResource0 | TypeAccess | | delegatedProperties.kt:42:30:42:47 | Owner | delegatedProperties.kt:42:30:42:47 | getVarResource0 | TypeAccess | | delegatedProperties.kt:42:30:42:47 | Owner | delegatedProperties.kt:42:30:42:47 | setVarResource0 | TypeAccess | | delegatedProperties.kt:42:30:42:47 | ResourceDelegate | file://:0:0:0:0 | | TypeAccess | @@ -275,13 +275,13 @@ | delegatedProperties.kt:42:30:42:47 | this | delegatedProperties.kt:42:30:42:47 | invoke | ThisAccess | | delegatedProperties.kt:42:30:42:47 | this | delegatedProperties.kt:42:30:42:47 | invoke | ThisAccess | | delegatedProperties.kt:42:30:42:47 | this | delegatedProperties.kt:42:30:42:47 | setVarResource0 | ThisAccess | +| delegatedProperties.kt:42:30:42:47 | this.varResource0$delegate | delegatedProperties.kt:42:5:42:47 | setVarResource0 | VarAccess | | delegatedProperties.kt:42:30:42:47 | this.varResource0$delegate | delegatedProperties.kt:42:30:42:47 | getVarResource0 | VarAccess | -| delegatedProperties.kt:42:30:42:47 | this.varResource0$delegate | delegatedProperties.kt:42:30:42:47 | setVarResource0 | VarAccess | | delegatedProperties.kt:42:30:42:47 | varResource0$delegate | delegatedProperties.kt:17:1:43:1 | Owner | VarAccess | | delegatedProperties.kt:42:30:42:47 | | delegatedProperties.kt:42:30:42:47 | setVarResource0 | VarAccess | | delegatedProperties.kt:42:30:42:47 | ResourceDelegate | delegatedProperties.kt:17:1:43:1 | Owner | TypeAccess | | delegatedProperties.kt:42:30:42:47 | new ResourceDelegate(...) | delegatedProperties.kt:17:1:43:1 | Owner | ClassInstanceExpr | -| delegatedProperties.kt:46:14:48:5 | int | file://:0:0:0:0 | | TypeAccess | +| delegatedProperties.kt:46:5:48:5 | int | file://:0:0:0:0 | | TypeAccess | | delegatedProperties.kt:46:27:46:41 | Owner | file://:0:0:0:0 | | TypeAccess | | delegatedProperties.kt:46:44:46:65 | ? ... | file://:0:0:0:0 | | WildcardTypeAccess | | delegatedProperties.kt:46:44:46:65 | KProperty | file://:0:0:0:0 | | TypeAccess | @@ -350,8 +350,8 @@ | delegatedProperties.kt:65:35:65:77 | this | delegatedProperties.kt:65:35:65:77 | getAnotherClassInstance | ThisAccess | | delegatedProperties.kt:65:35:65:77 | this.anotherClassInstance | delegatedProperties.kt:65:35:65:77 | getAnotherClassInstance | VarAccess | | delegatedProperties.kt:65:87:65:95 | memberInt | delegatedProperties.kt:65:14:65:78 | MyClass | VarAccess | +| delegatedProperties.kt:66:36:66:50 | ...::... | delegatedProperties.kt:66:5:66:50 | setDelegatedToMember1 | PropertyRefExpr | | delegatedProperties.kt:66:36:66:50 | ...::... | delegatedProperties.kt:66:36:66:50 | getDelegatedToMember1 | PropertyRefExpr | -| delegatedProperties.kt:66:36:66:50 | ...::... | delegatedProperties.kt:66:36:66:50 | setDelegatedToMember1 | PropertyRefExpr | | delegatedProperties.kt:66:36:66:50 | ...=... | delegatedProperties.kt:65:14:65:78 | MyClass | KtInitializerAssignExpr | | delegatedProperties.kt:66:36:66:50 | Integer | delegatedProperties.kt:66:36:66:50 | getDelegatedToMember1 | TypeAccess | | delegatedProperties.kt:66:36:66:50 | Integer | delegatedProperties.kt:66:36:66:50 | getDelegatedToMember1 | TypeAccess | @@ -363,8 +363,8 @@ | delegatedProperties.kt:66:36:66:50 | KMutableProperty1 | delegatedProperties.kt:66:36:66:50 | setDelegatedToMember1 | TypeAccess | | delegatedProperties.kt:66:36:66:50 | MyClass | delegatedProperties.kt:66:36:66:50 | getDelegatedToMember1 | TypeAccess | | delegatedProperties.kt:66:36:66:50 | MyClass | delegatedProperties.kt:66:36:66:50 | setDelegatedToMember1 | TypeAccess | +| delegatedProperties.kt:66:36:66:50 | PropertyReferenceDelegatesKt | delegatedProperties.kt:66:5:66:50 | setDelegatedToMember1 | TypeAccess | | delegatedProperties.kt:66:36:66:50 | PropertyReferenceDelegatesKt | delegatedProperties.kt:66:36:66:50 | getDelegatedToMember1 | TypeAccess | -| delegatedProperties.kt:66:36:66:50 | PropertyReferenceDelegatesKt | delegatedProperties.kt:66:36:66:50 | setDelegatedToMember1 | TypeAccess | | delegatedProperties.kt:66:36:66:50 | Unit | file://:0:0:0:0 | | TypeAccess | | delegatedProperties.kt:66:36:66:50 | a0 | delegatedProperties.kt:66:36:66:50 | get | VarAccess | | delegatedProperties.kt:66:36:66:50 | a0 | delegatedProperties.kt:66:36:66:50 | get | VarAccess | @@ -411,24 +411,24 @@ | delegatedProperties.kt:66:36:66:50 | this. | delegatedProperties.kt:66:36:66:50 | | VarAccess | | delegatedProperties.kt:66:36:66:50 | this. | delegatedProperties.kt:66:36:66:50 | get | VarAccess | | delegatedProperties.kt:66:36:66:50 | this. | delegatedProperties.kt:66:36:66:50 | set | VarAccess | +| delegatedProperties.kt:67:36:67:53 | ...::... | delegatedProperties.kt:67:5:67:53 | setDelegatedToMember2 | PropertyRefExpr | | delegatedProperties.kt:67:36:67:53 | ...::... | delegatedProperties.kt:67:36:67:53 | getDelegatedToMember2 | PropertyRefExpr | -| delegatedProperties.kt:67:36:67:53 | ...::... | delegatedProperties.kt:67:36:67:53 | setDelegatedToMember2 | PropertyRefExpr | | delegatedProperties.kt:67:36:67:53 | ...=... | delegatedProperties.kt:65:14:65:78 | MyClass | KtInitializerAssignExpr | +| delegatedProperties.kt:67:36:67:53 | Integer | delegatedProperties.kt:67:5:67:53 | setDelegatedToMember2 | TypeAccess | +| delegatedProperties.kt:67:36:67:53 | Integer | delegatedProperties.kt:67:5:67:53 | setDelegatedToMember2 | TypeAccess | | delegatedProperties.kt:67:36:67:53 | Integer | delegatedProperties.kt:67:36:67:53 | getDelegatedToMember2 | TypeAccess | | delegatedProperties.kt:67:36:67:53 | Integer | delegatedProperties.kt:67:36:67:53 | getDelegatedToMember2 | TypeAccess | -| delegatedProperties.kt:67:36:67:53 | Integer | delegatedProperties.kt:67:36:67:53 | setDelegatedToMember2 | TypeAccess | -| delegatedProperties.kt:67:36:67:53 | Integer | delegatedProperties.kt:67:36:67:53 | setDelegatedToMember2 | TypeAccess | | delegatedProperties.kt:67:36:67:53 | Integer | file://:0:0:0:0 | | TypeAccess | | delegatedProperties.kt:67:36:67:53 | KMutableProperty1 | delegatedProperties.kt:67:36:67:53 | getDelegatedToMember2 | TypeAccess | | delegatedProperties.kt:67:36:67:53 | KMutableProperty1 | delegatedProperties.kt:67:36:67:53 | setDelegatedToMember2 | TypeAccess | | delegatedProperties.kt:67:36:67:53 | KMutableProperty1 | file://:0:0:0:0 | | TypeAccess | +| delegatedProperties.kt:67:36:67:53 | MyClass | delegatedProperties.kt:67:5:67:53 | setDelegatedToMember2 | TypeAccess | +| delegatedProperties.kt:67:36:67:53 | MyClass | delegatedProperties.kt:67:5:67:53 | setDelegatedToMember2 | TypeAccess | | delegatedProperties.kt:67:36:67:53 | MyClass | delegatedProperties.kt:67:36:67:53 | getDelegatedToMember2 | TypeAccess | | delegatedProperties.kt:67:36:67:53 | MyClass | delegatedProperties.kt:67:36:67:53 | getDelegatedToMember2 | TypeAccess | -| delegatedProperties.kt:67:36:67:53 | MyClass | delegatedProperties.kt:67:36:67:53 | setDelegatedToMember2 | TypeAccess | -| delegatedProperties.kt:67:36:67:53 | MyClass | delegatedProperties.kt:67:36:67:53 | setDelegatedToMember2 | TypeAccess | | delegatedProperties.kt:67:36:67:53 | MyClass | file://:0:0:0:0 | | TypeAccess | +| delegatedProperties.kt:67:36:67:53 | PropertyReferenceDelegatesKt | delegatedProperties.kt:67:5:67:53 | setDelegatedToMember2 | TypeAccess | | delegatedProperties.kt:67:36:67:53 | PropertyReferenceDelegatesKt | delegatedProperties.kt:67:36:67:53 | getDelegatedToMember2 | TypeAccess | -| delegatedProperties.kt:67:36:67:53 | PropertyReferenceDelegatesKt | delegatedProperties.kt:67:36:67:53 | setDelegatedToMember2 | TypeAccess | | delegatedProperties.kt:67:36:67:53 | Unit | file://:0:0:0:0 | | TypeAccess | | delegatedProperties.kt:67:36:67:53 | a0 | delegatedProperties.kt:67:36:67:53 | get | VarAccess | | delegatedProperties.kt:67:36:67:53 | a0 | delegatedProperties.kt:67:36:67:53 | get | VarAccess | @@ -448,11 +448,11 @@ | delegatedProperties.kt:67:36:67:53 | int | file://:0:0:0:0 | | TypeAccess | | delegatedProperties.kt:67:36:67:53 | setDelegatedToMember2(...) | delegatedProperties.kt:67:36:67:53 | set | MethodCall | | delegatedProperties.kt:67:36:67:53 | setDelegatedToMember2(...) | delegatedProperties.kt:67:36:67:53 | set | MethodCall | -| delegatedProperties.kt:67:36:67:53 | setValue(...) | delegatedProperties.kt:67:36:67:53 | setDelegatedToMember2 | MethodCall | +| delegatedProperties.kt:67:36:67:53 | setValue(...) | delegatedProperties.kt:67:5:67:53 | setDelegatedToMember2 | MethodCall | +| delegatedProperties.kt:67:36:67:53 | this | delegatedProperties.kt:67:5:67:53 | setDelegatedToMember2 | ThisAccess | | delegatedProperties.kt:67:36:67:53 | this | delegatedProperties.kt:67:36:67:53 | getDelegatedToMember2 | ThisAccess | | delegatedProperties.kt:67:36:67:53 | this | delegatedProperties.kt:67:36:67:53 | invoke | ThisAccess | | delegatedProperties.kt:67:36:67:53 | this | delegatedProperties.kt:67:36:67:53 | invoke | ThisAccess | -| delegatedProperties.kt:67:36:67:53 | this | delegatedProperties.kt:67:36:67:53 | setDelegatedToMember2 | ThisAccess | | delegatedProperties.kt:67:36:67:53 | this.delegatedToMember2$delegate | delegatedProperties.kt:67:36:67:53 | getDelegatedToMember2 | VarAccess | | delegatedProperties.kt:67:36:67:53 | this.delegatedToMember2$delegate | delegatedProperties.kt:67:36:67:53 | setDelegatedToMember2 | VarAccess | | delegatedProperties.kt:67:36:67:53 | ...::... | delegatedProperties.kt:65:14:65:78 | MyClass | PropertyRefExpr | @@ -468,21 +468,21 @@ | delegatedProperties.kt:67:36:67:53 | getMemberInt(...) | delegatedProperties.kt:67:36:67:53 | get | MethodCall | | delegatedProperties.kt:67:36:67:53 | setMemberInt(...) | delegatedProperties.kt:67:36:67:53 | set | MethodCall | | delegatedProperties.kt:67:36:67:53 | this | delegatedProperties.kt:67:36:67:53 | invoke | ThisAccess | +| delegatedProperties.kt:69:39:69:56 | ...::... | delegatedProperties.kt:69:5:69:56 | setDelegatedToExtMember1 | PropertyRefExpr | | delegatedProperties.kt:69:39:69:56 | ...::... | delegatedProperties.kt:69:39:69:56 | getDelegatedToExtMember1 | PropertyRefExpr | -| delegatedProperties.kt:69:39:69:56 | ...::... | delegatedProperties.kt:69:39:69:56 | setDelegatedToExtMember1 | PropertyRefExpr | | delegatedProperties.kt:69:39:69:56 | ...=... | delegatedProperties.kt:65:14:65:78 | MyClass | KtInitializerAssignExpr | +| delegatedProperties.kt:69:39:69:56 | Integer | delegatedProperties.kt:69:5:69:56 | setDelegatedToExtMember1 | TypeAccess | +| delegatedProperties.kt:69:39:69:56 | Integer | delegatedProperties.kt:69:5:69:56 | setDelegatedToExtMember1 | TypeAccess | | delegatedProperties.kt:69:39:69:56 | Integer | delegatedProperties.kt:69:39:69:56 | getDelegatedToExtMember1 | TypeAccess | | delegatedProperties.kt:69:39:69:56 | Integer | delegatedProperties.kt:69:39:69:56 | getDelegatedToExtMember1 | TypeAccess | -| delegatedProperties.kt:69:39:69:56 | Integer | delegatedProperties.kt:69:39:69:56 | setDelegatedToExtMember1 | TypeAccess | -| delegatedProperties.kt:69:39:69:56 | Integer | delegatedProperties.kt:69:39:69:56 | setDelegatedToExtMember1 | TypeAccess | | delegatedProperties.kt:69:39:69:56 | Integer | file://:0:0:0:0 | | TypeAccess | | delegatedProperties.kt:69:39:69:56 | KMutableProperty0 | file://:0:0:0:0 | | TypeAccess | +| delegatedProperties.kt:69:39:69:56 | KMutableProperty1 | delegatedProperties.kt:69:5:69:56 | setDelegatedToExtMember1 | TypeAccess | | delegatedProperties.kt:69:39:69:56 | KMutableProperty1 | delegatedProperties.kt:69:39:69:56 | getDelegatedToExtMember1 | TypeAccess | -| delegatedProperties.kt:69:39:69:56 | KMutableProperty1 | delegatedProperties.kt:69:39:69:56 | setDelegatedToExtMember1 | TypeAccess | +| delegatedProperties.kt:69:39:69:56 | MyClass | delegatedProperties.kt:69:5:69:56 | setDelegatedToExtMember1 | TypeAccess | | delegatedProperties.kt:69:39:69:56 | MyClass | delegatedProperties.kt:69:39:69:56 | getDelegatedToExtMember1 | TypeAccess | -| delegatedProperties.kt:69:39:69:56 | MyClass | delegatedProperties.kt:69:39:69:56 | setDelegatedToExtMember1 | TypeAccess | +| delegatedProperties.kt:69:39:69:56 | PropertyReferenceDelegatesKt | delegatedProperties.kt:69:5:69:56 | setDelegatedToExtMember1 | TypeAccess | | delegatedProperties.kt:69:39:69:56 | PropertyReferenceDelegatesKt | delegatedProperties.kt:69:39:69:56 | getDelegatedToExtMember1 | TypeAccess | -| delegatedProperties.kt:69:39:69:56 | PropertyReferenceDelegatesKt | delegatedProperties.kt:69:39:69:56 | setDelegatedToExtMember1 | TypeAccess | | delegatedProperties.kt:69:39:69:56 | Unit | file://:0:0:0:0 | | TypeAccess | | delegatedProperties.kt:69:39:69:56 | a0 | delegatedProperties.kt:69:39:69:56 | get | VarAccess | | delegatedProperties.kt:69:39:69:56 | a0 | delegatedProperties.kt:69:39:69:56 | get | VarAccess | @@ -531,24 +531,24 @@ | delegatedProperties.kt:69:39:69:56 | this. | delegatedProperties.kt:69:39:69:56 | | VarAccess | | delegatedProperties.kt:69:39:69:56 | this. | delegatedProperties.kt:69:39:69:56 | get | VarAccess | | delegatedProperties.kt:69:39:69:56 | this. | delegatedProperties.kt:69:39:69:56 | set | VarAccess | +| delegatedProperties.kt:70:39:70:59 | ...::... | delegatedProperties.kt:70:5:70:59 | setDelegatedToExtMember2 | PropertyRefExpr | | delegatedProperties.kt:70:39:70:59 | ...::... | delegatedProperties.kt:70:39:70:59 | getDelegatedToExtMember2 | PropertyRefExpr | -| delegatedProperties.kt:70:39:70:59 | ...::... | delegatedProperties.kt:70:39:70:59 | setDelegatedToExtMember2 | PropertyRefExpr | | delegatedProperties.kt:70:39:70:59 | ...=... | delegatedProperties.kt:65:14:65:78 | MyClass | KtInitializerAssignExpr | +| delegatedProperties.kt:70:39:70:59 | Integer | delegatedProperties.kt:70:5:70:59 | setDelegatedToExtMember2 | TypeAccess | +| delegatedProperties.kt:70:39:70:59 | Integer | delegatedProperties.kt:70:5:70:59 | setDelegatedToExtMember2 | TypeAccess | | delegatedProperties.kt:70:39:70:59 | Integer | delegatedProperties.kt:70:39:70:59 | getDelegatedToExtMember2 | TypeAccess | | delegatedProperties.kt:70:39:70:59 | Integer | delegatedProperties.kt:70:39:70:59 | getDelegatedToExtMember2 | TypeAccess | -| delegatedProperties.kt:70:39:70:59 | Integer | delegatedProperties.kt:70:39:70:59 | setDelegatedToExtMember2 | TypeAccess | -| delegatedProperties.kt:70:39:70:59 | Integer | delegatedProperties.kt:70:39:70:59 | setDelegatedToExtMember2 | TypeAccess | | delegatedProperties.kt:70:39:70:59 | Integer | file://:0:0:0:0 | | TypeAccess | +| delegatedProperties.kt:70:39:70:59 | KMutableProperty1 | delegatedProperties.kt:70:5:70:59 | setDelegatedToExtMember2 | TypeAccess | | delegatedProperties.kt:70:39:70:59 | KMutableProperty1 | delegatedProperties.kt:70:39:70:59 | getDelegatedToExtMember2 | TypeAccess | -| delegatedProperties.kt:70:39:70:59 | KMutableProperty1 | delegatedProperties.kt:70:39:70:59 | setDelegatedToExtMember2 | TypeAccess | | delegatedProperties.kt:70:39:70:59 | KMutableProperty1 | file://:0:0:0:0 | | TypeAccess | +| delegatedProperties.kt:70:39:70:59 | MyClass | delegatedProperties.kt:70:5:70:59 | setDelegatedToExtMember2 | TypeAccess | +| delegatedProperties.kt:70:39:70:59 | MyClass | delegatedProperties.kt:70:5:70:59 | setDelegatedToExtMember2 | TypeAccess | | delegatedProperties.kt:70:39:70:59 | MyClass | delegatedProperties.kt:70:39:70:59 | getDelegatedToExtMember2 | TypeAccess | | delegatedProperties.kt:70:39:70:59 | MyClass | delegatedProperties.kt:70:39:70:59 | getDelegatedToExtMember2 | TypeAccess | -| delegatedProperties.kt:70:39:70:59 | MyClass | delegatedProperties.kt:70:39:70:59 | setDelegatedToExtMember2 | TypeAccess | -| delegatedProperties.kt:70:39:70:59 | MyClass | delegatedProperties.kt:70:39:70:59 | setDelegatedToExtMember2 | TypeAccess | | delegatedProperties.kt:70:39:70:59 | MyClass | file://:0:0:0:0 | | TypeAccess | +| delegatedProperties.kt:70:39:70:59 | PropertyReferenceDelegatesKt | delegatedProperties.kt:70:5:70:59 | setDelegatedToExtMember2 | TypeAccess | | delegatedProperties.kt:70:39:70:59 | PropertyReferenceDelegatesKt | delegatedProperties.kt:70:39:70:59 | getDelegatedToExtMember2 | TypeAccess | -| delegatedProperties.kt:70:39:70:59 | PropertyReferenceDelegatesKt | delegatedProperties.kt:70:39:70:59 | setDelegatedToExtMember2 | TypeAccess | | delegatedProperties.kt:70:39:70:59 | Unit | file://:0:0:0:0 | | TypeAccess | | delegatedProperties.kt:70:39:70:59 | a0 | delegatedProperties.kt:70:39:70:59 | get | VarAccess | | delegatedProperties.kt:70:39:70:59 | a0 | delegatedProperties.kt:70:39:70:59 | get | VarAccess | @@ -568,7 +568,7 @@ | delegatedProperties.kt:70:39:70:59 | int | file://:0:0:0:0 | | TypeAccess | | delegatedProperties.kt:70:39:70:59 | setDelegatedToExtMember2(...) | delegatedProperties.kt:70:39:70:59 | set | MethodCall | | delegatedProperties.kt:70:39:70:59 | setDelegatedToExtMember2(...) | delegatedProperties.kt:70:39:70:59 | set | MethodCall | -| delegatedProperties.kt:70:39:70:59 | setValue(...) | delegatedProperties.kt:70:39:70:59 | setDelegatedToExtMember2 | MethodCall | +| delegatedProperties.kt:70:39:70:59 | setValue(...) | delegatedProperties.kt:70:5:70:59 | setDelegatedToExtMember2 | MethodCall | | delegatedProperties.kt:70:39:70:59 | this | delegatedProperties.kt:70:39:70:59 | getDelegatedToExtMember2 | ThisAccess | | delegatedProperties.kt:70:39:70:59 | this | delegatedProperties.kt:70:39:70:59 | invoke | ThisAccess | | delegatedProperties.kt:70:39:70:59 | this | delegatedProperties.kt:70:39:70:59 | invoke | ThisAccess | @@ -1379,20 +1379,20 @@ | exprs.kt:137:12:137:23 | ... > ... | exprs.kt:4:1:142:1 | topLevelMethod | GTExpr | | exprs.kt:137:23:137:23 | 0 | exprs.kt:4:1:142:1 | topLevelMethod | IntegerLiteral | | exprs.kt:138:9:138:16 | variable | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:138:9:138:16 | variable | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:138:9:138:18 | ...=... | exprs.kt:4:1:142:1 | topLevelMethod | AssignExpr | | exprs.kt:138:9:138:18 | | exprs.kt:4:1:142:1 | topLevelMethod | StmtExpr | | exprs.kt:138:9:138:18 | | exprs.kt:4:1:142:1 | topLevelMethod | ImplicitCoercionToUnitExpr | +| exprs.kt:138:9:138:18 | | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:138:9:138:18 | | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | +| exprs.kt:138:9:138:18 | | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:138:9:138:18 | Unit | exprs.kt:4:1:142:1 | topLevelMethod | TypeAccess | | exprs.kt:138:9:138:18 | dec(...) | exprs.kt:4:1:142:1 | topLevelMethod | MethodCall | -| exprs.kt:138:9:138:18 | tmp0 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | -| exprs.kt:138:9:138:18 | tmp0 | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:138:9:138:18 | tmp0 | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | +| exprs.kt:138:9:138:18 | variable | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:141:12:141:14 | 123 | exprs.kt:4:1:142:1 | topLevelMethod | IntegerLiteral | | exprs.kt:141:12:141:20 | ... + ... | exprs.kt:4:1:142:1 | topLevelMethod | AddExpr | | exprs.kt:141:18:141:20 | 456 | exprs.kt:4:1:142:1 | topLevelMethod | IntegerLiteral | | exprs.kt:144:1:146:1 | Unit | file://:0:0:0:0 | | TypeAccess | -| exprs.kt:145:9:145:9 | d | exprs.kt:144:1:146:1 | getClass | LocalVariableDeclExpr | +| exprs.kt:145:5:145:23 | d | exprs.kt:144:1:146:1 | getClass | LocalVariableDeclExpr | | exprs.kt:145:13:145:16 | true | exprs.kt:144:1:146:1 | getClass | BooleanLiteral | | exprs.kt:145:13:145:23 | ::class | exprs.kt:144:1:146:1 | getClass | ClassExpr | | exprs.kt:148:9:148:18 | ...=... | exprs.kt:148:8:148:19 | C | KtInitializerAssignExpr | @@ -1419,28 +1419,27 @@ | exprs.kt:158:29:158:29 | Subclass1 | exprs.kt:156:1:163:1 | typeTests | TypeAccess | | exprs.kt:158:29:158:29 | x | exprs.kt:156:1:163:1 | typeTests | VarAccess | | exprs.kt:160:5:160:60 | y1 | exprs.kt:156:1:163:1 | typeTests | LocalVariableDeclExpr | -| exprs.kt:160:25:160:60 | true | exprs.kt:156:1:163:1 | typeTests | BooleanLiteral | | exprs.kt:160:25:160:60 | when ... | exprs.kt:156:1:163:1 | typeTests | WhenExpr | | exprs.kt:160:29:160:29 | x | exprs.kt:156:1:163:1 | typeTests | VarAccess | | exprs.kt:160:29:160:42 | ...instanceof... | exprs.kt:156:1:163:1 | typeTests | InstanceOfExpr | | exprs.kt:160:29:160:42 | Subclass1 | exprs.kt:156:1:163:1 | typeTests | TypeAccess | -| exprs.kt:160:45:160:49 | | exprs.kt:156:1:163:1 | typeTests | StmtExpr | | exprs.kt:160:47:160:47 | | exprs.kt:156:1:163:1 | typeTests | ImplicitCastExpr | | exprs.kt:160:47:160:47 | Subclass1 | exprs.kt:156:1:163:1 | typeTests | TypeAccess | | exprs.kt:160:47:160:47 | x | exprs.kt:156:1:163:1 | typeTests | VarAccess | +| exprs.kt:160:56:160:60 | true | exprs.kt:156:1:163:1 | typeTests | BooleanLiteral | | exprs.kt:160:58:160:58 | y | exprs.kt:156:1:163:1 | typeTests | VarAccess | | exprs.kt:161:5:161:13 | q | exprs.kt:156:1:163:1 | typeTests | LocalVariableDeclExpr | | exprs.kt:161:13:161:13 | 1 | exprs.kt:156:1:163:1 | typeTests | IntegerLiteral | -| exprs.kt:162:5:162:48 | true | exprs.kt:156:1:163:1 | typeTests | BooleanLiteral | | exprs.kt:162:5:162:48 | when ... | exprs.kt:156:1:163:1 | typeTests | WhenExpr | | exprs.kt:162:9:162:9 | x | exprs.kt:156:1:163:1 | typeTests | VarAccess | | exprs.kt:162:9:162:22 | ...instanceof... | exprs.kt:156:1:163:1 | typeTests | InstanceOfExpr | | exprs.kt:162:9:162:22 | Subclass1 | exprs.kt:156:1:163:1 | typeTests | TypeAccess | -| exprs.kt:162:27:162:31 | q | exprs.kt:156:1:163:1 | typeTests | VarAccess | | exprs.kt:162:27:162:31 | ...=... | exprs.kt:156:1:163:1 | typeTests | AssignExpr | +| exprs.kt:162:27:162:31 | q | exprs.kt:156:1:163:1 | typeTests | VarAccess | | exprs.kt:162:31:162:31 | 2 | exprs.kt:156:1:163:1 | typeTests | IntegerLiteral | -| exprs.kt:162:42:162:42 | q | exprs.kt:156:1:163:1 | typeTests | VarAccess | +| exprs.kt:162:40:162:48 | true | exprs.kt:156:1:163:1 | typeTests | BooleanLiteral | | exprs.kt:162:42:162:46 | ...=... | exprs.kt:156:1:163:1 | typeTests | AssignExpr | +| exprs.kt:162:42:162:46 | q | exprs.kt:156:1:163:1 | typeTests | VarAccess | | exprs.kt:162:46:162:46 | 3 | exprs.kt:156:1:163:1 | typeTests | IntegerLiteral | | exprs.kt:165:1:172:1 | Unit | file://:0:0:0:0 | | TypeAccess | | exprs.kt:165:9:165:18 | Polygon | file://:0:0:0:0 | | TypeAccess | @@ -1452,15 +1451,13 @@ | exprs.kt:167:8:167:16 | ... (value not-equals) ... | exprs.kt:165:1:172:1 | foo | ValueNEExpr | | exprs.kt:167:13:167:16 | null | exprs.kt:165:1:172:1 | foo | NullLiteral | | exprs.kt:168:9:168:29 | r2 | exprs.kt:165:1:172:1 | foo | LocalVariableDeclExpr | -| exprs.kt:168:29:168:29 | | exprs.kt:165:1:172:1 | foo | ImplicitNotNullExpr | -| exprs.kt:168:29:168:29 | Rectangle | exprs.kt:165:1:172:1 | foo | TypeAccess | | exprs.kt:168:29:168:29 | r | exprs.kt:165:1:172:1 | foo | VarAccess | | exprs.kt:169:9:169:30 | height | exprs.kt:165:1:172:1 | foo | LocalVariableDeclExpr | | exprs.kt:169:22:169:23 | r2 | exprs.kt:165:1:172:1 | foo | VarAccess | | exprs.kt:169:25:169:30 | r2.height | exprs.kt:165:1:172:1 | foo | VarAccess | | exprs.kt:170:9:170:10 | r2 | exprs.kt:165:1:172:1 | foo | VarAccess | -| exprs.kt:170:12:170:21 | r2.height | exprs.kt:165:1:172:1 | foo | VarAccess | | exprs.kt:170:12:170:21 | ...=... | exprs.kt:165:1:172:1 | foo | AssignExpr | +| exprs.kt:170:12:170:21 | r2.height | exprs.kt:165:1:172:1 | foo | VarAccess | | exprs.kt:170:21:170:21 | 3 | exprs.kt:165:1:172:1 | foo | IntegerLiteral | | exprs.kt:174:1:176:1 | 0 | exprs.kt:174:1:176:1 | Direction | IntegerLiteral | | exprs.kt:174:1:176:1 | Direction | exprs.kt:174:1:176:1 | Direction | TypeAccess | @@ -1497,44 +1494,44 @@ | exprs.kt:175:25:175:28 | Direction | file://:0:0:0:0 | | TypeAccess | | exprs.kt:175:25:175:28 | Direction.EAST | exprs.kt:0:0:0:0 | | VarAccess | | exprs.kt:175:25:175:28 | new Direction(...) | exprs.kt:0:0:0:0 | | ClassInstanceExpr | -| exprs.kt:178:1:182:1 | 0 | exprs.kt:178:6:182:1 | Color | IntegerLiteral | -| exprs.kt:178:1:182:1 | Color | exprs.kt:178:6:182:1 | Color | TypeAccess | | exprs.kt:178:1:182:1 | Color | file://:0:0:0:0 | | TypeAccess | | exprs.kt:178:1:182:1 | Color | file://:0:0:0:0 | | TypeAccess | | exprs.kt:178:1:182:1 | Color | file://:0:0:0:0 | | TypeAccess | | exprs.kt:178:1:182:1 | Color[] | file://:0:0:0:0 | | TypeAccess | -| exprs.kt:178:1:182:1 | Enum | exprs.kt:178:6:182:1 | Color | TypeAccess | | exprs.kt:178:1:182:1 | EnumEntries | file://:0:0:0:0 | | TypeAccess | | exprs.kt:178:1:182:1 | String | file://:0:0:0:0 | | TypeAccess | -| exprs.kt:178:1:182:1 | new Enum(...) | exprs.kt:178:6:182:1 | Color | ClassInstanceExpr | -| exprs.kt:178:1:182:1 | null | exprs.kt:178:6:182:1 | Color | NullLiteral | -| exprs.kt:178:18:178:29 | ...=... | exprs.kt:178:6:182:1 | Color | KtInitializerAssignExpr | +| exprs.kt:178:17:178:30 | 0 | exprs.kt:178:17:178:30 | Color | IntegerLiteral | +| exprs.kt:178:17:178:30 | Color | exprs.kt:178:17:178:30 | Color | TypeAccess | +| exprs.kt:178:17:178:30 | Enum | exprs.kt:178:17:178:30 | Color | TypeAccess | +| exprs.kt:178:17:178:30 | new Enum(...) | exprs.kt:178:17:178:30 | Color | ClassInstanceExpr | +| exprs.kt:178:17:178:30 | null | exprs.kt:178:17:178:30 | Color | NullLiteral | +| exprs.kt:178:18:178:29 | ...=... | exprs.kt:178:17:178:30 | Color | KtInitializerAssignExpr | | exprs.kt:178:18:178:29 | int | file://:0:0:0:0 | | TypeAccess | | exprs.kt:178:18:178:29 | int | file://:0:0:0:0 | | TypeAccess | | exprs.kt:178:18:178:29 | int | file://:0:0:0:0 | | TypeAccess | -| exprs.kt:178:18:178:29 | rgb | exprs.kt:178:6:182:1 | Color | VarAccess | -| exprs.kt:178:18:178:29 | rgb | exprs.kt:178:6:182:1 | Color | VarAccess | +| exprs.kt:178:18:178:29 | rgb | exprs.kt:178:17:178:30 | Color | VarAccess | +| exprs.kt:178:18:178:29 | rgb | exprs.kt:178:17:178:30 | Color | VarAccess | | exprs.kt:178:18:178:29 | this | exprs.kt:178:18:178:29 | getRgb | ThisAccess | | exprs.kt:178:18:178:29 | this.rgb | exprs.kt:178:18:178:29 | getRgb | VarAccess | | exprs.kt:179:5:179:18 | ...=... | exprs.kt:0:0:0:0 | | KtInitializerAssignExpr | | exprs.kt:179:5:179:18 | Color | exprs.kt:0:0:0:0 | | TypeAccess | -| exprs.kt:179:5:179:18 | Color | exprs.kt:0:0:0:0 | | TypeAccess | | exprs.kt:179:5:179:18 | Color | file://:0:0:0:0 | | TypeAccess | | exprs.kt:179:5:179:18 | Color.RED | exprs.kt:0:0:0:0 | | VarAccess | +| exprs.kt:179:8:179:17 | Color | exprs.kt:0:0:0:0 | | TypeAccess | | exprs.kt:179:8:179:17 | new Color(...) | exprs.kt:0:0:0:0 | | ClassInstanceExpr | | exprs.kt:179:9:179:16 | 16711680 | exprs.kt:0:0:0:0 | | IntegerLiteral | | exprs.kt:180:5:180:20 | ...=... | exprs.kt:0:0:0:0 | | KtInitializerAssignExpr | | exprs.kt:180:5:180:20 | Color | exprs.kt:0:0:0:0 | | TypeAccess | -| exprs.kt:180:5:180:20 | Color | exprs.kt:0:0:0:0 | | TypeAccess | | exprs.kt:180:5:180:20 | Color | file://:0:0:0:0 | | TypeAccess | | exprs.kt:180:5:180:20 | Color.GREEN | exprs.kt:0:0:0:0 | | VarAccess | +| exprs.kt:180:10:180:19 | Color | exprs.kt:0:0:0:0 | | TypeAccess | | exprs.kt:180:10:180:19 | new Color(...) | exprs.kt:0:0:0:0 | | ClassInstanceExpr | | exprs.kt:180:11:180:18 | 65280 | exprs.kt:0:0:0:0 | | IntegerLiteral | | exprs.kt:181:5:181:18 | ...=... | exprs.kt:0:0:0:0 | | KtInitializerAssignExpr | | exprs.kt:181:5:181:18 | Color | exprs.kt:0:0:0:0 | | TypeAccess | -| exprs.kt:181:5:181:18 | Color | exprs.kt:0:0:0:0 | | TypeAccess | | exprs.kt:181:5:181:18 | Color | file://:0:0:0:0 | | TypeAccess | | exprs.kt:181:5:181:18 | Color.BLUE | exprs.kt:0:0:0:0 | | VarAccess | +| exprs.kt:181:9:181:18 | Color | exprs.kt:0:0:0:0 | | TypeAccess | | exprs.kt:181:9:181:18 | new Color(...) | exprs.kt:0:0:0:0 | | ClassInstanceExpr | | exprs.kt:181:10:181:17 | 255 | exprs.kt:0:0:0:0 | | IntegerLiteral | | exprs.kt:184:1:187:1 | Unit | file://:0:0:0:0 | | TypeAccess | @@ -1551,12 +1548,12 @@ | exprs.kt:192:5:192:14 | this | exprs.kt:192:5:192:14 | getA1 | ThisAccess | | exprs.kt:192:5:192:14 | this.a1 | exprs.kt:192:5:192:14 | getA1 | VarAccess | | exprs.kt:192:14:192:14 | 1 | exprs.kt:191:1:199:1 | Class1 | IntegerLiteral | -| exprs.kt:193:13:198:5 | Object | file://:0:0:0:0 | | TypeAccess | -| exprs.kt:194:13:194:14 | a2 | exprs.kt:193:13:198:5 | getObject | LocalVariableDeclExpr | -| exprs.kt:194:18:194:18 | 2 | exprs.kt:193:13:198:5 | getObject | IntegerLiteral | -| exprs.kt:195:16:197:9 | | exprs.kt:193:13:198:5 | getObject | StmtExpr | -| exprs.kt:195:16:197:9 | Interface1 | exprs.kt:193:13:198:5 | getObject | TypeAccess | -| exprs.kt:195:16:197:9 | new (...) | exprs.kt:193:13:198:5 | getObject | ClassInstanceExpr | +| exprs.kt:193:5:198:5 | Object | file://:0:0:0:0 | | TypeAccess | +| exprs.kt:194:9:194:18 | a2 | exprs.kt:193:5:198:5 | getObject | LocalVariableDeclExpr | +| exprs.kt:194:18:194:18 | 2 | exprs.kt:193:5:198:5 | getObject | IntegerLiteral | +| exprs.kt:195:16:197:9 | | exprs.kt:193:5:198:5 | getObject | StmtExpr | +| exprs.kt:195:16:197:9 | Interface1 | exprs.kt:193:5:198:5 | getObject | TypeAccess | +| exprs.kt:195:16:197:9 | new (...) | exprs.kt:193:5:198:5 | getObject | ClassInstanceExpr | | exprs.kt:196:13:196:49 | ...=... | exprs.kt:195:16:197:9 | | KtInitializerAssignExpr | | exprs.kt:196:13:196:49 | String | file://:0:0:0:0 | | TypeAccess | | exprs.kt:196:13:196:49 | String | file://:0:0:0:0 | | TypeAccess | @@ -1570,47 +1567,47 @@ | exprs.kt:196:36:196:37 | a2 | exprs.kt:195:16:197:9 | | VarAccess | | exprs.kt:201:1:203:1 | Unit | file://:0:0:0:0 | | TypeAccess | | exprs.kt:201:22:201:28 | Object | file://:0:0:0:0 | | TypeAccess | -| exprs.kt:202:9:202:9 | y | exprs.kt:201:1:203:1 | notNullAssertion | LocalVariableDeclExpr | +| exprs.kt:202:5:202:20 | y | exprs.kt:201:1:203:1 | notNullAssertion | LocalVariableDeclExpr | | exprs.kt:202:18:202:18 | x | exprs.kt:201:1:203:1 | notNullAssertion | VarAccess | -| exprs.kt:202:19:202:20 | ...!! | exprs.kt:201:1:203:1 | notNullAssertion | NotNullExpr | +| exprs.kt:202:18:202:20 | ...!! | exprs.kt:201:1:203:1 | notNullAssertion | NotNullExpr | | exprs.kt:206:5:217:5 | Unit | file://:0:0:0:0 | | TypeAccess | | exprs.kt:206:11:206:18 | Object | file://:0:0:0:0 | | TypeAccess | | exprs.kt:206:21:206:30 | String | file://:0:0:0:0 | | TypeAccess | -| exprs.kt:208:13:208:13 | a | exprs.kt:206:5:217:5 | x | LocalVariableDeclExpr | +| exprs.kt:208:9:208:29 | a | exprs.kt:206:5:217:5 | x | LocalVariableDeclExpr | | exprs.kt:208:17:208:18 | aa | exprs.kt:206:5:217:5 | x | VarAccess | | exprs.kt:208:17:208:29 | String | exprs.kt:206:5:217:5 | x | TypeAccess | | exprs.kt:208:17:208:29 | valueOf(...) | exprs.kt:206:5:217:5 | x | MethodCall | -| exprs.kt:209:13:209:14 | b0 | exprs.kt:206:5:217:5 | x | LocalVariableDeclExpr | +| exprs.kt:209:9:209:27 | b0 | exprs.kt:206:5:217:5 | x | LocalVariableDeclExpr | | exprs.kt:209:19:209:19 | s | exprs.kt:206:5:217:5 | x | VarAccess | | exprs.kt:209:19:209:27 | Intrinsics | exprs.kt:206:5:217:5 | x | TypeAccess | | exprs.kt:209:19:209:27 | stringPlus(...) | exprs.kt:206:5:217:5 | x | MethodCall | | exprs.kt:209:26:209:26 | 5 | exprs.kt:206:5:217:5 | x | IntegerLiteral | -| exprs.kt:210:13:210:14 | b1 | exprs.kt:206:5:217:5 | x | LocalVariableDeclExpr | +| exprs.kt:210:9:210:23 | b1 | exprs.kt:206:5:217:5 | x | LocalVariableDeclExpr | | exprs.kt:210:19:210:19 | s | exprs.kt:206:5:217:5 | x | VarAccess | | exprs.kt:210:19:210:23 | Intrinsics | exprs.kt:206:5:217:5 | x | TypeAccess | | exprs.kt:210:19:210:23 | stringPlus(...) | exprs.kt:206:5:217:5 | x | MethodCall | | exprs.kt:210:23:210:23 | 5 | exprs.kt:206:5:217:5 | x | IntegerLiteral | -| exprs.kt:211:13:211:14 | b2 | exprs.kt:206:5:217:5 | x | LocalVariableDeclExpr | +| exprs.kt:211:9:211:29 | b2 | exprs.kt:206:5:217:5 | x | LocalVariableDeclExpr | | exprs.kt:211:19:211:19 | s | exprs.kt:206:5:217:5 | x | VarAccess | -| exprs.kt:211:20:211:21 | ...!! | exprs.kt:206:5:217:5 | x | NotNullExpr | -| exprs.kt:211:20:211:29 | ... + ... | exprs.kt:206:5:217:5 | x | AddExpr | +| exprs.kt:211:19:211:21 | ...!! | exprs.kt:206:5:217:5 | x | NotNullExpr | +| exprs.kt:211:19:211:29 | ... + ... | exprs.kt:206:5:217:5 | x | AddExpr | | exprs.kt:211:28:211:28 | 5 | exprs.kt:206:5:217:5 | x | IntegerLiteral | -| exprs.kt:212:13:212:14 | b3 | exprs.kt:206:5:217:5 | x | LocalVariableDeclExpr | +| exprs.kt:212:9:212:25 | b3 | exprs.kt:206:5:217:5 | x | LocalVariableDeclExpr | | exprs.kt:212:19:212:19 | s | exprs.kt:206:5:217:5 | x | VarAccess | +| exprs.kt:212:19:212:21 | ...!! | exprs.kt:206:5:217:5 | x | NotNullExpr | | exprs.kt:212:19:212:25 | ... + ... | exprs.kt:206:5:217:5 | x | AddExpr | -| exprs.kt:212:20:212:21 | ...!! | exprs.kt:206:5:217:5 | x | NotNullExpr | | exprs.kt:212:25:212:25 | 5 | exprs.kt:206:5:217:5 | x | IntegerLiteral | -| exprs.kt:213:13:213:14 | c0 | exprs.kt:206:5:217:5 | x | LocalVariableDeclExpr | +| exprs.kt:213:9:213:36 | c0 | exprs.kt:206:5:217:5 | x | LocalVariableDeclExpr | | exprs.kt:213:18:213:36 | Color | exprs.kt:206:5:217:5 | x | TypeAccess | | exprs.kt:213:18:213:36 | values(...) | exprs.kt:206:5:217:5 | x | MethodCall | -| exprs.kt:214:13:214:14 | c1 | exprs.kt:206:5:217:5 | x | LocalVariableDeclExpr | +| exprs.kt:214:9:214:31 | c1 | exprs.kt:206:5:217:5 | x | LocalVariableDeclExpr | | exprs.kt:214:24:214:31 | Color | exprs.kt:206:5:217:5 | x | TypeAccess | | exprs.kt:214:24:214:31 | values(...) | exprs.kt:206:5:217:5 | x | MethodCall | -| exprs.kt:215:13:215:14 | d0 | exprs.kt:206:5:217:5 | x | LocalVariableDeclExpr | +| exprs.kt:215:9:215:44 | d0 | exprs.kt:206:5:217:5 | x | LocalVariableDeclExpr | | exprs.kt:215:18:215:44 | Color | exprs.kt:206:5:217:5 | x | TypeAccess | | exprs.kt:215:18:215:44 | valueOf(...) | exprs.kt:206:5:217:5 | x | MethodCall | | exprs.kt:215:37:215:43 | "GREEN" | exprs.kt:206:5:217:5 | x | StringLiteral | -| exprs.kt:216:13:216:14 | d1 | exprs.kt:206:5:217:5 | x | LocalVariableDeclExpr | +| exprs.kt:216:9:216:39 | d1 | exprs.kt:206:5:217:5 | x | LocalVariableDeclExpr | | exprs.kt:216:24:216:39 | Color | exprs.kt:206:5:217:5 | x | TypeAccess | | exprs.kt:216:24:216:39 | valueOf(...) | exprs.kt:206:5:217:5 | x | MethodCall | | exprs.kt:216:32:216:38 | "GREEN" | exprs.kt:206:5:217:5 | x | StringLiteral | @@ -1740,7 +1737,7 @@ | exprs.kt:263:11:263:17 | ... * ... | exprs.kt:252:1:265:1 | mulOperators | MulExpr | | exprs.kt:263:16:263:17 | fy | exprs.kt:252:1:265:1 | mulOperators | VarAccess | | exprs.kt:267:1:276:1 | Unit | file://:0:0:0:0 | | TypeAccess | -| exprs.kt:269:7:269:13 | updated | exprs.kt:267:1:276:1 | inPlaceOperators | LocalVariableDeclExpr | +| exprs.kt:269:3:269:17 | updated | exprs.kt:267:1:276:1 | inPlaceOperators | LocalVariableDeclExpr | | exprs.kt:269:17:269:17 | 0 | exprs.kt:267:1:276:1 | inPlaceOperators | IntegerLiteral | | exprs.kt:270:3:270:9 | updated | exprs.kt:267:1:276:1 | inPlaceOperators | VarAccess | | exprs.kt:270:3:270:14 | ...+=... | exprs.kt:267:1:276:1 | inPlaceOperators | AssignAddExpr | diff --git a/java/ql/test/experimental/query-tests/security/CWE-552/UnsafeLoadSpringResource.java b/java/ql/test/experimental/query-tests/security/CWE-552/UnsafeLoadSpringResource.java deleted file mode 100644 index c7e114aede3..00000000000 --- a/java/ql/test/experimental/query-tests/security/CWE-552/UnsafeLoadSpringResource.java +++ /dev/null @@ -1,155 +0,0 @@ -package com.example; - -import java.io.File; -import java.io.FileReader; -import java.io.InputStreamReader; -import java.io.IOException; -import java.io.Reader; -import java.io.UnsupportedEncodingException; -import java.net.URLDecoder; -import java.nio.file.Files; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.core.io.ClassPathResource; -import org.springframework.core.io.Resource; -import org.springframework.core.io.ResourceLoader; -import org.springframework.util.ResourceUtils; -import org.springframework.util.StringUtils; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; - -/** Sample class of Spring RestController */ -@RestController -public class UnsafeLoadSpringResource { - @GetMapping("/file1") - //BAD: Get resource from ClassPathResource without input validation - public String getFileContent1(@RequestParam(name="fileName") String fileName) { - // A request such as the following can disclose source code and application configuration - // fileName=/../../WEB-INF/views/page.jsp - // fileName=/com/example/package/SampleController.class - ClassPathResource clr = new ClassPathResource(fileName); - char[] buffer = new char[4096]; - StringBuilder out = new StringBuilder(); - try { - Reader in = new FileReader(clr.getFilename()); - for (int numRead; (numRead = in.read(buffer, 0, buffer.length)) > 0; ) { - out.append(buffer, 0, numRead); - } - } catch (IOException ie) { - ie.printStackTrace(); - } - return out.toString(); - } - - @GetMapping("/file1a") - //GOOD: Get resource from ClassPathResource with input path validation - public String getFileContent1a(@RequestParam(name="fileName") String fileName) { - String result = null; - if (fileName.startsWith("/safe_dir") && !fileName.contains("..")) { - ClassPathResource clr = new ClassPathResource(fileName); - char[] buffer = new char[4096]; - StringBuilder out = new StringBuilder(); - try { - Reader in = new InputStreamReader(clr.getInputStream(), "UTF-8"); - for (int numRead; (numRead = in.read(buffer, 0, buffer.length)) > 0; ) { - out.append(buffer, 0, numRead); - } - } catch (IOException ie) { - ie.printStackTrace(); - } - result = out.toString(); - } - return result; - } - - @GetMapping("/file2") - //BAD: Get resource from ResourceUtils without input validation - public String getFileContent2(@RequestParam(name="fileName") String fileName) { - String content = null; - - try { - // A request such as the following can disclose source code and system configuration - // fileName=/etc/hosts - // fileName=file:/etc/hosts - // fileName=/opt/appdir/WEB-INF/views/page.jsp - File file = ResourceUtils.getFile(fileName); - //Read File Content - content = new String(Files.readAllBytes(file.toPath())); - } catch (IOException ie) { - ie.printStackTrace(); - } - return content; - } - - @GetMapping("/file2a") - //GOOD: Get resource from ResourceUtils with input path validation - public String getFileContent2a(@RequestParam(name="fileName") String fileName) { - String content = null; - - if (fileName.startsWith("/safe_dir") && !fileName.contains("..")) { - try { - File file = ResourceUtils.getFile(fileName); - //Read File Content - content = new String(Files.readAllBytes(file.toPath())); - } catch (IOException ie) { - ie.printStackTrace(); - } - } - return content; - } - - @Autowired - ResourceLoader resourceLoader; - - @GetMapping("/file3") - //BAD: Get resource from ResourceLoader (same as application context) without input validation - // Note it is not detected without the generic `resource.getInputStream()` check - public String getFileContent3(@RequestParam(name="fileName") String fileName) { - String content = null; - - try { - // A request such as the following can disclose source code and system configuration - // fileName=/WEB-INF/views/page.jsp - // fileName=/WEB-INF/classes/com/example/package/SampleController.class - // fileName=file:/etc/hosts - Resource resource = resourceLoader.getResource(fileName); - - char[] buffer = new char[4096]; - StringBuilder out = new StringBuilder(); - - Reader in = new InputStreamReader(resource.getInputStream(), "UTF-8"); - for (int numRead; (numRead = in.read(buffer, 0, buffer.length)) > 0; ) { - out.append(buffer, 0, numRead); - } - content = out.toString(); - } catch (IOException ie) { - ie.printStackTrace(); - } - return content; - } - - @GetMapping("/file3a") - //GOOD: Get resource from ResourceLoader (same as application context) with input path validation - public String getFileContent3a(@RequestParam(name="fileName") String fileName) { - String content = null; - - if (fileName.startsWith("/safe_dir") && !fileName.contains("..")) { - try { - Resource resource = resourceLoader.getResource(fileName); - - char[] buffer = new char[4096]; - StringBuilder out = new StringBuilder(); - - Reader in = new InputStreamReader(resource.getInputStream(), "UTF-8"); - for (int numRead; (numRead = in.read(buffer, 0, buffer.length)) > 0; ) { - out.append(buffer, 0, numRead); - } - content = out.toString(); - } catch (IOException ie) { - ie.printStackTrace(); - } - } - return content; - } -} diff --git a/java/ql/test/experimental/query-tests/security/CWE-552/UnsafeRequestPath.java b/java/ql/test/experimental/query-tests/security/CWE-552/UnsafeRequestPath.java deleted file mode 100644 index 2de0cae0d3c..00000000000 --- a/java/ql/test/experimental/query-tests/security/CWE-552/UnsafeRequestPath.java +++ /dev/null @@ -1,52 +0,0 @@ -import java.io.IOException; - -import javax.servlet.Filter; -import javax.servlet.FilterChain; -import javax.servlet.FilterConfig; -import javax.servlet.ServletException; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -// @WebFilter("/*") -public class UnsafeRequestPath implements Filter { - private static final String BASE_PATH = "/pages"; - - @Override - // BAD: Request dispatcher from servlet path without check - public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) - throws IOException, ServletException { - String path = ((HttpServletRequest) request).getServletPath(); - // A sample payload "/%57EB-INF/web.xml" can bypass this `startsWith` check - if (path != null && !path.startsWith("/WEB-INF")) { - request.getRequestDispatcher(path).forward(request, response); - } else { - chain.doFilter(request, response); - } - } - - // GOOD: Request dispatcher from servlet path with check - public void doFilter2(ServletRequest request, ServletResponse response, FilterChain chain) - throws IOException, ServletException { - String path = ((HttpServletRequest) request).getServletPath(); - - if (path.startsWith(BASE_PATH) && !path.contains("..")) { - request.getRequestDispatcher(path).forward(request, response); - } else { - chain.doFilter(request, response); - } - } - - // GOOD: Request dispatcher from servlet path with whitelisted string comparison - public void doFilter3(ServletRequest request, ServletResponse response, FilterChain chain) - throws IOException, ServletException { - String path = ((HttpServletRequest) request).getServletPath(); - - if (path.equals("/comaction")) { - request.getRequestDispatcher(path).forward(request, response); - } else { - chain.doFilter(request, response); - } - } -} diff --git a/java/ql/test/experimental/query-tests/security/CWE-552/UnsafeResourceGet.java b/java/ql/test/experimental/query-tests/security/CWE-552/UnsafeResourceGet.java deleted file mode 100644 index 64c23334f18..00000000000 --- a/java/ql/test/experimental/query-tests/security/CWE-552/UnsafeResourceGet.java +++ /dev/null @@ -1,270 +0,0 @@ -package com.example; - -import java.io.InputStream; -import java.io.IOException; -import java.io.PrintWriter; -import java.nio.file.Path; -import java.nio.file.Paths; -import java.net.URI; -import java.net.URL; -import java.net.URISyntaxException; - -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.ServletOutputStream; -import javax.servlet.ServletException; -import javax.servlet.ServletConfig; -import javax.servlet.ServletContext; - -import io.undertow.server.handlers.resource.FileResourceManager; -import io.undertow.server.handlers.resource.Resource; -import org.jboss.vfs.VFS; -import org.jboss.vfs.VirtualFile; - -public class UnsafeResourceGet extends HttpServlet { - private static final String BASE_PATH = "/pages"; - - @Override - // BAD: getResource constructed from `ServletContext` without input validation - protected void doGet(HttpServletRequest request, HttpServletResponse response) - throws ServletException, IOException { - String requestUrl = request.getParameter("requestURL"); - ServletOutputStream out = response.getOutputStream(); - - ServletConfig cfg = getServletConfig(); - ServletContext sc = cfg.getServletContext(); - - // A sample request /fake.jsp/../WEB-INF/web.xml can load the web.xml file - URL url = sc.getResource(requestUrl); - - InputStream in = url.openStream(); - byte[] buf = new byte[4 * 1024]; // 4K buffer - int bytesRead; - while ((bytesRead = in.read(buf)) != -1) { - out.write(buf, 0, bytesRead); - } - } - - // GOOD: getResource constructed from `ServletContext` with input validation - protected void doGetGood(HttpServletRequest request, HttpServletResponse response) - throws ServletException, IOException { - String requestUrl = request.getParameter("requestURL"); - ServletOutputStream out = response.getOutputStream(); - - ServletConfig cfg = getServletConfig(); - ServletContext sc = cfg.getServletContext(); - - Path path = Paths.get(requestUrl).normalize().toRealPath(); - if (path.startsWith(BASE_PATH)) { - URL url = sc.getResource(path.toString()); - - InputStream in = url.openStream(); - byte[] buf = new byte[4 * 1024]; // 4K buffer - int bytesRead; - while ((bytesRead = in.read(buf)) != -1) { - out.write(buf, 0, bytesRead); - } - } - } - - // GOOD: getResource constructed from `ServletContext` with null check only - protected void doGetGood2(HttpServletRequest request, HttpServletResponse response) - throws ServletException, IOException { - String requestUrl = request.getParameter("requestURL"); - PrintWriter writer = response.getWriter(); - - ServletConfig cfg = getServletConfig(); - ServletContext sc = cfg.getServletContext(); - - // A sample request /fake.jsp/../WEB-INF/web.xml can load the web.xml file - URL url = sc.getResource(requestUrl); - if (url == null) { - writer.println("Requested source not found"); - } - } - - // GOOD: getResource constructed from `ServletContext` with `equals` check - protected void doGetGood3(HttpServletRequest request, HttpServletResponse response) - throws ServletException, IOException { - String requestUrl = request.getParameter("requestURL"); - ServletOutputStream out = response.getOutputStream(); - - ServletContext sc = request.getServletContext(); - - if (requestUrl.equals("/public/crossdomain.xml")) { - URL url = sc.getResource(requestUrl); - - InputStream in = url.openStream(); - byte[] buf = new byte[4 * 1024]; // 4K buffer - int bytesRead; - while ((bytesRead = in.read(buf)) != -1) { - out.write(buf, 0, bytesRead); - } - } - } - - @Override - // BAD: getResourceAsStream constructed from `ServletContext` without input validation - protected void doPost(HttpServletRequest request, HttpServletResponse response) - throws ServletException, IOException { - String requestPath = request.getParameter("requestPath"); - ServletOutputStream out = response.getOutputStream(); - - // A sample request /fake.jsp/../WEB-INF/web.xml can load the web.xml file - InputStream in = request.getServletContext().getResourceAsStream(requestPath); - byte[] buf = new byte[4 * 1024]; // 4K buffer - int bytesRead; - while ((bytesRead = in.read(buf)) != -1) { - out.write(buf, 0, bytesRead); - } - } - - // GOOD: getResourceAsStream constructed from `ServletContext` with input validation - protected void doPostGood(HttpServletRequest request, HttpServletResponse response) - throws ServletException, IOException { - String requestPath = request.getParameter("requestPath"); - ServletOutputStream out = response.getOutputStream(); - - if (!requestPath.contains("..") && requestPath.startsWith("/trusted")) { - InputStream in = request.getServletContext().getResourceAsStream(requestPath); - byte[] buf = new byte[4 * 1024]; // 4K buffer - int bytesRead; - while ((bytesRead = in.read(buf)) != -1) { - out.write(buf, 0, bytesRead); - } - } - } - - @Override - // BAD: getResource constructed from `Class` without input validation - protected void doHead(HttpServletRequest request, HttpServletResponse response) - throws ServletException, IOException { - String requestUrl = request.getParameter("requestURL"); - ServletOutputStream out = response.getOutputStream(); - - // A sample request /fake.jsp/../../../WEB-INF/web.xml can load the web.xml file - // Note the class is in two levels of subpackages and `Class.getResource` starts from its own directory - URL url = getClass().getResource(requestUrl); - - InputStream in = url.openStream(); - byte[] buf = new byte[4 * 1024]; // 4K buffer - int bytesRead; - while ((bytesRead = in.read(buf)) != -1) { - out.write(buf, 0, bytesRead); - } - } - - // GOOD: getResource constructed from `Class` with input validation - protected void doHeadGood(HttpServletRequest request, HttpServletResponse response) - throws ServletException, IOException { - String requestUrl = request.getParameter("requestURL"); - ServletOutputStream out = response.getOutputStream(); - - Path path = Paths.get(requestUrl).normalize().toRealPath(); - if (path.startsWith(BASE_PATH)) { - URL url = getClass().getResource(path.toString()); - - InputStream in = url.openStream(); - byte[] buf = new byte[4 * 1024]; // 4K buffer - int bytesRead; - while ((bytesRead = in.read(buf)) != -1) { - out.write(buf, 0, bytesRead); - } - } - } - - @Override - // BAD: getResourceAsStream constructed from `ClassLoader` without input validation - protected void doPut(HttpServletRequest request, HttpServletResponse response) - throws ServletException, IOException { - String requestPath = request.getParameter("requestPath"); - ServletOutputStream out = response.getOutputStream(); - - ServletConfig cfg = getServletConfig(); - ServletContext sc = cfg.getServletContext(); - - // A sample request /fake.jsp/../../../WEB-INF/web.xml can load the web.xml file - // Note the class is in two levels of subpackages and `ClassLoader.getResourceAsStream` starts from its own directory - InputStream in = getClass().getClassLoader().getResourceAsStream(requestPath); - byte[] buf = new byte[4 * 1024]; // 4K buffer - int bytesRead; - while ((bytesRead = in.read(buf)) != -1) { - out.write(buf, 0, bytesRead); - } - } - - // GOOD: getResourceAsStream constructed from `ClassLoader` with input validation - protected void doPutGood(HttpServletRequest request, HttpServletResponse response) - throws ServletException, IOException { - String requestPath = request.getParameter("requestPath"); - ServletOutputStream out = response.getOutputStream(); - - ServletConfig cfg = getServletConfig(); - ServletContext sc = cfg.getServletContext(); - - if (!requestPath.contains("..") && requestPath.startsWith("/trusted")) { - InputStream in = getClass().getClassLoader().getResourceAsStream(requestPath); - byte[] buf = new byte[4 * 1024]; // 4K buffer - int bytesRead; - while ((bytesRead = in.read(buf)) != -1) { - out.write(buf, 0, bytesRead); - } - } - } - - // BAD: getResource constructed from `ClassLoader` without input validation - protected void doPutBad(HttpServletRequest request, HttpServletResponse response) - throws ServletException, IOException { - String requestUrl = request.getParameter("requestURL"); - ServletOutputStream out = response.getOutputStream(); - - // A sample request /fake.jsp/../../../WEB-INF/web.xml can load the web.xml file - // Note the class is in two levels of subpackages and `ClassLoader.getResource` starts from its own directory - URL url = getClass().getClassLoader().getResource(requestUrl); - - InputStream in = url.openStream(); - byte[] buf = new byte[4 * 1024]; // 4K buffer - int bytesRead; - while ((bytesRead = in.read(buf)) != -1) { - out.write(buf, 0, bytesRead); - } - } - - // BAD: getResource constructed using Undertow IO without input validation - protected void doPutBad2(HttpServletRequest request, HttpServletResponse response) - throws ServletException, IOException { - String requestPath = request.getParameter("requestPath"); - - try { - FileResourceManager rm = new FileResourceManager(VFS.getChild(new URI("/usr/share")).getPhysicalFile()); - Resource rs = rm.getResource(requestPath); - - VirtualFile overlay = VFS.getChild(new URI("EAP_HOME/modules/")); - // Do file operations - overlay.getChild(rs.getPath()); - } catch (URISyntaxException ue) { - throw new IOException("Cannot parse the URI"); - } - } - - // GOOD: getResource constructed using Undertow IO with input validation - protected void doPutGood2(HttpServletRequest request, HttpServletResponse response) - throws ServletException, IOException { - String requestPath = request.getParameter("requestPath"); - - try { - FileResourceManager rm = new FileResourceManager(VFS.getChild(new URI("/usr/share")).getPhysicalFile()); - Resource rs = rm.getResource(requestPath); - - VirtualFile overlay = VFS.getChild(new URI("EAP_HOME/modules/")); - String path = rs.getPath(); - if (path.startsWith("/trusted_path") && !path.contains("..")) { - // Do file operations - overlay.getChild(path); - } - } catch (URISyntaxException ue) { - throw new IOException("Cannot parse the URI"); - } - } -} diff --git a/java/ql/test/experimental/query-tests/security/CWE-552/UnsafeResourceGet2.java b/java/ql/test/experimental/query-tests/security/CWE-552/UnsafeResourceGet2.java deleted file mode 100644 index b3d041d024c..00000000000 --- a/java/ql/test/experimental/query-tests/security/CWE-552/UnsafeResourceGet2.java +++ /dev/null @@ -1,58 +0,0 @@ -package com.example; - -import javax.faces.context.FacesContext; -import java.io.BufferedReader; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.io.IOException; -import java.net.URL; -import java.util.Map; - -/** Sample class of JSF managed bean */ -public class UnsafeResourceGet2 { - // BAD: getResourceAsStream constructed from `ExternalContext` without input validation - public String parameterActionBad1() throws IOException { - FacesContext fc = FacesContext.getCurrentInstance(); - Map params = fc.getExternalContext().getRequestParameterMap(); - String loadUrl = params.get("loadUrl"); - - InputStreamReader isr = new InputStreamReader(fc.getExternalContext().getResourceAsStream(loadUrl)); - BufferedReader br = new BufferedReader(isr); - if(br.ready()) { - //Do Stuff - return "result"; - } - - return "home"; - } - - // BAD: getResource constructed from `ExternalContext` without input validation - public String parameterActionBad2() throws IOException { - FacesContext fc = FacesContext.getCurrentInstance(); - Map params = fc.getExternalContext().getRequestParameterMap(); - String loadUrl = params.get("loadUrl"); - - URL url = fc.getExternalContext().getResource(loadUrl); - - InputStream in = url.openStream(); - //Do Stuff - return "result"; - } - - // GOOD: getResource constructed from `ExternalContext` with input validation - public String parameterActionGood1() throws IOException { - FacesContext fc = FacesContext.getCurrentInstance(); - Map params = fc.getExternalContext().getRequestParameterMap(); - String loadUrl = params.get("loadUrl"); - - if (loadUrl.equals("/public/crossdomain.xml")) { - URL url = fc.getExternalContext().getResource(loadUrl); - - InputStream in = url.openStream(); - //Do Stuff - return "result"; - } - - return "home"; - } -} diff --git a/java/ql/test/experimental/query-tests/security/CWE-552/UnsafeServletRequestDispatch.java b/java/ql/test/experimental/query-tests/security/CWE-552/UnsafeServletRequestDispatch.java deleted file mode 100644 index ee63939b209..00000000000 --- a/java/ql/test/experimental/query-tests/security/CWE-552/UnsafeServletRequestDispatch.java +++ /dev/null @@ -1,131 +0,0 @@ -import java.io.IOException; -import java.net.URLDecoder; -import java.io.File; -import java.nio.file.Path; -import java.nio.file.Paths; - -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.RequestDispatcher; -import javax.servlet.ServletException; -import javax.servlet.ServletConfig; -import javax.servlet.ServletContext; - -public class UnsafeServletRequestDispatch extends HttpServlet { - private static final String BASE_PATH = "/pages"; - - @Override - // BAD: Request dispatcher constructed from `ServletContext` without input validation - protected void doGet(HttpServletRequest request, HttpServletResponse response) - throws ServletException, IOException { - String action = request.getParameter("action"); - String returnURL = request.getParameter("returnURL"); - - ServletConfig cfg = getServletConfig(); - if (action.equals("Login")) { - ServletContext sc = cfg.getServletContext(); - RequestDispatcher rd = sc.getRequestDispatcher("/Login.jsp"); - rd.forward(request, response); - } else { - ServletContext sc = cfg.getServletContext(); - RequestDispatcher rd = sc.getRequestDispatcher(returnURL); - rd.forward(request, response); - } - } - - @Override - // BAD: Request dispatcher constructed from `HttpServletRequest` without input validation - protected void doPost(HttpServletRequest request, HttpServletResponse response) - throws ServletException, IOException { - String action = request.getParameter("action"); - String returnURL = request.getParameter("returnURL"); - - if (action.equals("Login")) { - RequestDispatcher rd = request.getRequestDispatcher("/Login.jsp"); - rd.forward(request, response); - } else { - RequestDispatcher rd = request.getRequestDispatcher(returnURL); - rd.forward(request, response); - } - } - - @Override - // GOOD: Request dispatcher with a whitelisted URI - protected void doPut(HttpServletRequest request, HttpServletResponse response) - throws ServletException, IOException { - String action = request.getParameter("action"); - - if (action.equals("Login")) { - RequestDispatcher rd = request.getRequestDispatcher("/Login.jsp"); - rd.forward(request, response); - } else if (action.equals("Register")) { - RequestDispatcher rd = request.getRequestDispatcher("/Register.jsp"); - rd.forward(request, response); - } - } - - // BAD: Request dispatcher without path traversal check - protected void doHead2(HttpServletRequest request, HttpServletResponse response) - throws ServletException, IOException { - String path = request.getParameter("path"); - - // A sample payload "/pages/welcome.jsp/../WEB-INF/web.xml" can bypass the `startsWith` check - // The payload "/pages/welcome.jsp/../../%57EB-INF/web.xml" can bypass the check as well since RequestDispatcher will decode `%57` as `W` - if (path.startsWith(BASE_PATH)) { - request.getServletContext().getRequestDispatcher(path).include(request, response); - } - } - - // GOOD: Request dispatcher with path traversal check - protected void doHead3(HttpServletRequest request, HttpServletResponse response) - throws ServletException, IOException { - String path = request.getParameter("path"); - - if (path.startsWith(BASE_PATH) && !path.contains("..")) { - request.getServletContext().getRequestDispatcher(path).include(request, response); - } - } - - // GOOD: Request dispatcher with path normalization and comparison - protected void doHead4(HttpServletRequest request, HttpServletResponse response) - throws ServletException, IOException { - String path = request.getParameter("path"); - Path requestedPath = Paths.get(BASE_PATH).resolve(path).normalize(); - - // /pages/welcome.jsp/../../WEB-INF/web.xml becomes /WEB-INF/web.xml - // /pages/welcome.jsp/../../%57EB-INF/web.xml becomes /%57EB-INF/web.xml - if (requestedPath.startsWith(BASE_PATH)) { - request.getServletContext().getRequestDispatcher(requestedPath.toString()).forward(request, response); - } - } - - // FN: Request dispatcher with negation check and path normalization, but without URL decoding - // When promoting this query, consider using FlowStates to make `getRequestDispatcher` a sink - // only if a URL-decoding step has NOT been crossed (i.e. make URLDecoder.decode change the - // state to a different value than the one required at the sink). - protected void doHead5(HttpServletRequest request, HttpServletResponse response) - throws ServletException, IOException { - String path = request.getParameter("path"); - Path requestedPath = Paths.get(BASE_PATH).resolve(path).normalize(); - - if (!requestedPath.startsWith("/WEB-INF") && !requestedPath.startsWith("/META-INF")) { - request.getServletContext().getRequestDispatcher(requestedPath.toString()).forward(request, response); - } - } - - // GOOD: Request dispatcher with path traversal check and URL decoding - protected void doHead6(HttpServletRequest request, HttpServletResponse response) - throws ServletException, IOException { - String path = request.getParameter("path"); - boolean hasEncoding = path.contains("%"); - while (hasEncoding) { - path = URLDecoder.decode(path, "UTF-8"); - hasEncoding = path.contains("%"); - } - - if (!path.startsWith("/WEB-INF/") && !path.contains("..")) { - request.getServletContext().getRequestDispatcher(path).include(request, response); - } - } -} diff --git a/java/ql/test/experimental/query-tests/security/CWE-552/UnsafeUrlForward.expected b/java/ql/test/experimental/query-tests/security/CWE-552/UnsafeUrlForward.expected deleted file mode 100644 index 545471868e7..00000000000 --- a/java/ql/test/experimental/query-tests/security/CWE-552/UnsafeUrlForward.expected +++ /dev/null @@ -1,129 +0,0 @@ -edges -| UnsafeLoadSpringResource.java:27:32:27:77 | fileName : String | UnsafeLoadSpringResource.java:31:49:31:56 | fileName : String | provenance | | -| UnsafeLoadSpringResource.java:31:27:31:57 | new ClassPathResource(...) : ClassPathResource | UnsafeLoadSpringResource.java:35:31:35:33 | clr | provenance | | -| UnsafeLoadSpringResource.java:31:49:31:56 | fileName : String | UnsafeLoadSpringResource.java:31:27:31:57 | new ClassPathResource(...) : ClassPathResource | provenance | | -| UnsafeLoadSpringResource.java:68:32:68:77 | fileName : String | UnsafeLoadSpringResource.java:76:38:76:45 | fileName | provenance | | -| UnsafeLoadSpringResource.java:108:32:108:77 | fileName : String | UnsafeLoadSpringResource.java:116:51:116:58 | fileName | provenance | | -| UnsafeRequestPath.java:20:17:20:63 | getServletPath(...) : String | UnsafeRequestPath.java:23:33:23:36 | path | provenance | | -| UnsafeResourceGet2.java:16:32:16:79 | getRequestParameterMap(...) : Map | UnsafeResourceGet2.java:17:20:17:25 | params : Map | provenance | | -| UnsafeResourceGet2.java:17:20:17:25 | params : Map | UnsafeResourceGet2.java:17:20:17:40 | get(...) : String | provenance | | -| UnsafeResourceGet2.java:17:20:17:40 | get(...) : String | UnsafeResourceGet2.java:19:93:19:99 | loadUrl | provenance | | -| UnsafeResourceGet2.java:32:32:32:79 | getRequestParameterMap(...) : Map | UnsafeResourceGet2.java:33:20:33:25 | params : Map | provenance | | -| UnsafeResourceGet2.java:33:20:33:25 | params : Map | UnsafeResourceGet2.java:33:20:33:40 | get(...) : String | provenance | | -| UnsafeResourceGet2.java:33:20:33:40 | get(...) : String | UnsafeResourceGet2.java:35:49:35:55 | loadUrl : String | provenance | | -| UnsafeResourceGet2.java:35:13:35:56 | getResource(...) : URL | UnsafeResourceGet2.java:37:20:37:22 | url | provenance | | -| UnsafeResourceGet2.java:35:49:35:55 | loadUrl : String | UnsafeResourceGet2.java:35:13:35:56 | getResource(...) : URL | provenance | | -| UnsafeResourceGet.java:32:23:32:56 | getParameter(...) : String | UnsafeResourceGet.java:39:28:39:37 | requestUrl : String | provenance | | -| UnsafeResourceGet.java:39:13:39:38 | getResource(...) : URL | UnsafeResourceGet.java:41:20:41:22 | url | provenance | | -| UnsafeResourceGet.java:39:28:39:37 | requestUrl : String | UnsafeResourceGet.java:39:13:39:38 | getResource(...) : URL | provenance | | -| UnsafeResourceGet.java:111:24:111:58 | getParameter(...) : String | UnsafeResourceGet.java:115:68:115:78 | requestPath | provenance | | -| UnsafeResourceGet.java:143:23:143:56 | getParameter(...) : String | UnsafeResourceGet.java:148:36:148:45 | requestUrl : String | provenance | | -| UnsafeResourceGet.java:148:13:148:46 | getResource(...) : URL | UnsafeResourceGet.java:150:20:150:22 | url | provenance | | -| UnsafeResourceGet.java:148:36:148:45 | requestUrl : String | UnsafeResourceGet.java:148:13:148:46 | getResource(...) : URL | provenance | | -| UnsafeResourceGet.java:181:24:181:58 | getParameter(...) : String | UnsafeResourceGet.java:189:68:189:78 | requestPath | provenance | | -| UnsafeResourceGet.java:219:23:219:56 | getParameter(...) : String | UnsafeResourceGet.java:224:53:224:62 | requestUrl : String | provenance | | -| UnsafeResourceGet.java:224:13:224:63 | getResource(...) : URL | UnsafeResourceGet.java:226:20:226:22 | url | provenance | | -| UnsafeResourceGet.java:224:53:224:62 | requestUrl : String | UnsafeResourceGet.java:224:13:224:63 | getResource(...) : URL | provenance | | -| UnsafeResourceGet.java:237:24:237:58 | getParameter(...) : String | UnsafeResourceGet.java:241:33:241:43 | requestPath : String | provenance | | -| UnsafeResourceGet.java:241:18:241:44 | getResource(...) : Resource | UnsafeResourceGet.java:245:21:245:22 | rs : Resource | provenance | | -| UnsafeResourceGet.java:241:33:241:43 | requestPath : String | UnsafeResourceGet.java:241:18:241:44 | getResource(...) : Resource | provenance | | -| UnsafeResourceGet.java:245:21:245:22 | rs : Resource | UnsafeResourceGet.java:245:21:245:32 | getPath(...) | provenance | | -| UnsafeServletRequestDispatch.java:23:22:23:54 | getParameter(...) : String | UnsafeServletRequestDispatch.java:32:51:32:59 | returnURL | provenance | | -| UnsafeServletRequestDispatch.java:42:22:42:54 | getParameter(...) : String | UnsafeServletRequestDispatch.java:48:56:48:64 | returnURL | provenance | | -| UnsafeServletRequestDispatch.java:71:17:71:44 | getParameter(...) : String | UnsafeServletRequestDispatch.java:76:53:76:56 | path | provenance | | -| UnsafeUrlForward.java:13:27:13:36 | url : String | UnsafeUrlForward.java:14:27:14:29 | url | provenance | | -| UnsafeUrlForward.java:18:27:18:36 | url : String | UnsafeUrlForward.java:20:28:20:30 | url | provenance | | -| UnsafeUrlForward.java:25:21:25:30 | url : String | UnsafeUrlForward.java:26:23:26:25 | url | provenance | | -| UnsafeUrlForward.java:30:27:30:36 | url : String | UnsafeUrlForward.java:31:48:31:63 | ... + ... | provenance | | -| UnsafeUrlForward.java:30:27:30:36 | url : String | UnsafeUrlForward.java:31:61:31:63 | url | provenance | | -| UnsafeUrlForward.java:36:19:36:28 | url : String | UnsafeUrlForward.java:38:33:38:35 | url | provenance | | -| UnsafeUrlForward.java:47:19:47:28 | url : String | UnsafeUrlForward.java:49:33:49:62 | ... + ... | provenance | | -| UnsafeUrlForward.java:58:19:58:28 | url : String | UnsafeUrlForward.java:60:33:60:62 | ... + ... | provenance | | -nodes -| UnsafeLoadSpringResource.java:27:32:27:77 | fileName : String | semmle.label | fileName : String | -| UnsafeLoadSpringResource.java:31:27:31:57 | new ClassPathResource(...) : ClassPathResource | semmle.label | new ClassPathResource(...) : ClassPathResource | -| UnsafeLoadSpringResource.java:31:49:31:56 | fileName : String | semmle.label | fileName : String | -| UnsafeLoadSpringResource.java:35:31:35:33 | clr | semmle.label | clr | -| UnsafeLoadSpringResource.java:68:32:68:77 | fileName : String | semmle.label | fileName : String | -| UnsafeLoadSpringResource.java:76:38:76:45 | fileName | semmle.label | fileName | -| UnsafeLoadSpringResource.java:108:32:108:77 | fileName : String | semmle.label | fileName : String | -| UnsafeLoadSpringResource.java:116:51:116:58 | fileName | semmle.label | fileName | -| UnsafeRequestPath.java:20:17:20:63 | getServletPath(...) : String | semmle.label | getServletPath(...) : String | -| UnsafeRequestPath.java:23:33:23:36 | path | semmle.label | path | -| UnsafeResourceGet2.java:16:32:16:79 | getRequestParameterMap(...) : Map | semmle.label | getRequestParameterMap(...) : Map | -| UnsafeResourceGet2.java:17:20:17:25 | params : Map | semmle.label | params : Map | -| UnsafeResourceGet2.java:17:20:17:40 | get(...) : String | semmle.label | get(...) : String | -| UnsafeResourceGet2.java:19:93:19:99 | loadUrl | semmle.label | loadUrl | -| UnsafeResourceGet2.java:32:32:32:79 | getRequestParameterMap(...) : Map | semmle.label | getRequestParameterMap(...) : Map | -| UnsafeResourceGet2.java:33:20:33:25 | params : Map | semmle.label | params : Map | -| UnsafeResourceGet2.java:33:20:33:40 | get(...) : String | semmle.label | get(...) : String | -| UnsafeResourceGet2.java:35:13:35:56 | getResource(...) : URL | semmle.label | getResource(...) : URL | -| UnsafeResourceGet2.java:35:49:35:55 | loadUrl : String | semmle.label | loadUrl : String | -| UnsafeResourceGet2.java:37:20:37:22 | url | semmle.label | url | -| UnsafeResourceGet.java:32:23:32:56 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| UnsafeResourceGet.java:39:13:39:38 | getResource(...) : URL | semmle.label | getResource(...) : URL | -| UnsafeResourceGet.java:39:28:39:37 | requestUrl : String | semmle.label | requestUrl : String | -| UnsafeResourceGet.java:41:20:41:22 | url | semmle.label | url | -| UnsafeResourceGet.java:111:24:111:58 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| UnsafeResourceGet.java:115:68:115:78 | requestPath | semmle.label | requestPath | -| UnsafeResourceGet.java:143:23:143:56 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| UnsafeResourceGet.java:148:13:148:46 | getResource(...) : URL | semmle.label | getResource(...) : URL | -| UnsafeResourceGet.java:148:36:148:45 | requestUrl : String | semmle.label | requestUrl : String | -| UnsafeResourceGet.java:150:20:150:22 | url | semmle.label | url | -| UnsafeResourceGet.java:181:24:181:58 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| UnsafeResourceGet.java:189:68:189:78 | requestPath | semmle.label | requestPath | -| UnsafeResourceGet.java:219:23:219:56 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| UnsafeResourceGet.java:224:13:224:63 | getResource(...) : URL | semmle.label | getResource(...) : URL | -| UnsafeResourceGet.java:224:53:224:62 | requestUrl : String | semmle.label | requestUrl : String | -| UnsafeResourceGet.java:226:20:226:22 | url | semmle.label | url | -| UnsafeResourceGet.java:237:24:237:58 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| UnsafeResourceGet.java:241:18:241:44 | getResource(...) : Resource | semmle.label | getResource(...) : Resource | -| UnsafeResourceGet.java:241:33:241:43 | requestPath : String | semmle.label | requestPath : String | -| UnsafeResourceGet.java:245:21:245:22 | rs : Resource | semmle.label | rs : Resource | -| UnsafeResourceGet.java:245:21:245:32 | getPath(...) | semmle.label | getPath(...) | -| UnsafeServletRequestDispatch.java:23:22:23:54 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| UnsafeServletRequestDispatch.java:32:51:32:59 | returnURL | semmle.label | returnURL | -| UnsafeServletRequestDispatch.java:42:22:42:54 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| UnsafeServletRequestDispatch.java:48:56:48:64 | returnURL | semmle.label | returnURL | -| UnsafeServletRequestDispatch.java:71:17:71:44 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| UnsafeServletRequestDispatch.java:76:53:76:56 | path | semmle.label | path | -| UnsafeUrlForward.java:13:27:13:36 | url : String | semmle.label | url : String | -| UnsafeUrlForward.java:14:27:14:29 | url | semmle.label | url | -| UnsafeUrlForward.java:18:27:18:36 | url : String | semmle.label | url : String | -| UnsafeUrlForward.java:20:28:20:30 | url | semmle.label | url | -| UnsafeUrlForward.java:25:21:25:30 | url : String | semmle.label | url : String | -| UnsafeUrlForward.java:26:23:26:25 | url | semmle.label | url | -| UnsafeUrlForward.java:30:27:30:36 | url : String | semmle.label | url : String | -| UnsafeUrlForward.java:31:48:31:63 | ... + ... | semmle.label | ... + ... | -| UnsafeUrlForward.java:31:61:31:63 | url | semmle.label | url | -| UnsafeUrlForward.java:36:19:36:28 | url : String | semmle.label | url : String | -| UnsafeUrlForward.java:38:33:38:35 | url | semmle.label | url | -| UnsafeUrlForward.java:47:19:47:28 | url : String | semmle.label | url : String | -| UnsafeUrlForward.java:49:33:49:62 | ... + ... | semmle.label | ... + ... | -| UnsafeUrlForward.java:58:19:58:28 | url : String | semmle.label | url : String | -| UnsafeUrlForward.java:60:33:60:62 | ... + ... | semmle.label | ... + ... | -subpaths -#select -| UnsafeLoadSpringResource.java:35:31:35:33 | clr | UnsafeLoadSpringResource.java:27:32:27:77 | fileName : String | UnsafeLoadSpringResource.java:35:31:35:33 | clr | Potentially untrusted URL forward due to $@. | UnsafeLoadSpringResource.java:27:32:27:77 | fileName | user-provided value | -| UnsafeLoadSpringResource.java:76:38:76:45 | fileName | UnsafeLoadSpringResource.java:68:32:68:77 | fileName : String | UnsafeLoadSpringResource.java:76:38:76:45 | fileName | Potentially untrusted URL forward due to $@. | UnsafeLoadSpringResource.java:68:32:68:77 | fileName | user-provided value | -| UnsafeLoadSpringResource.java:116:51:116:58 | fileName | UnsafeLoadSpringResource.java:108:32:108:77 | fileName : String | UnsafeLoadSpringResource.java:116:51:116:58 | fileName | Potentially untrusted URL forward due to $@. | UnsafeLoadSpringResource.java:108:32:108:77 | fileName | user-provided value | -| UnsafeRequestPath.java:23:33:23:36 | path | UnsafeRequestPath.java:20:17:20:63 | getServletPath(...) : String | UnsafeRequestPath.java:23:33:23:36 | path | Potentially untrusted URL forward due to $@. | UnsafeRequestPath.java:20:17:20:63 | getServletPath(...) | user-provided value | -| UnsafeResourceGet2.java:19:93:19:99 | loadUrl | UnsafeResourceGet2.java:16:32:16:79 | getRequestParameterMap(...) : Map | UnsafeResourceGet2.java:19:93:19:99 | loadUrl | Potentially untrusted URL forward due to $@. | UnsafeResourceGet2.java:16:32:16:79 | getRequestParameterMap(...) | user-provided value | -| UnsafeResourceGet2.java:37:20:37:22 | url | UnsafeResourceGet2.java:32:32:32:79 | getRequestParameterMap(...) : Map | UnsafeResourceGet2.java:37:20:37:22 | url | Potentially untrusted URL forward due to $@. | UnsafeResourceGet2.java:32:32:32:79 | getRequestParameterMap(...) | user-provided value | -| UnsafeResourceGet.java:41:20:41:22 | url | UnsafeResourceGet.java:32:23:32:56 | getParameter(...) : String | UnsafeResourceGet.java:41:20:41:22 | url | Potentially untrusted URL forward due to $@. | UnsafeResourceGet.java:32:23:32:56 | getParameter(...) | user-provided value | -| UnsafeResourceGet.java:115:68:115:78 | requestPath | UnsafeResourceGet.java:111:24:111:58 | getParameter(...) : String | UnsafeResourceGet.java:115:68:115:78 | requestPath | Potentially untrusted URL forward due to $@. | UnsafeResourceGet.java:111:24:111:58 | getParameter(...) | user-provided value | -| UnsafeResourceGet.java:150:20:150:22 | url | UnsafeResourceGet.java:143:23:143:56 | getParameter(...) : String | UnsafeResourceGet.java:150:20:150:22 | url | Potentially untrusted URL forward due to $@. | UnsafeResourceGet.java:143:23:143:56 | getParameter(...) | user-provided value | -| UnsafeResourceGet.java:189:68:189:78 | requestPath | UnsafeResourceGet.java:181:24:181:58 | getParameter(...) : String | UnsafeResourceGet.java:189:68:189:78 | requestPath | Potentially untrusted URL forward due to $@. | UnsafeResourceGet.java:181:24:181:58 | getParameter(...) | user-provided value | -| UnsafeResourceGet.java:226:20:226:22 | url | UnsafeResourceGet.java:219:23:219:56 | getParameter(...) : String | UnsafeResourceGet.java:226:20:226:22 | url | Potentially untrusted URL forward due to $@. | UnsafeResourceGet.java:219:23:219:56 | getParameter(...) | user-provided value | -| UnsafeResourceGet.java:245:21:245:32 | getPath(...) | UnsafeResourceGet.java:237:24:237:58 | getParameter(...) : String | UnsafeResourceGet.java:245:21:245:32 | getPath(...) | Potentially untrusted URL forward due to $@. | UnsafeResourceGet.java:237:24:237:58 | getParameter(...) | user-provided value | -| UnsafeServletRequestDispatch.java:32:51:32:59 | returnURL | UnsafeServletRequestDispatch.java:23:22:23:54 | getParameter(...) : String | UnsafeServletRequestDispatch.java:32:51:32:59 | returnURL | Potentially untrusted URL forward due to $@. | UnsafeServletRequestDispatch.java:23:22:23:54 | getParameter(...) | user-provided value | -| UnsafeServletRequestDispatch.java:48:56:48:64 | returnURL | UnsafeServletRequestDispatch.java:42:22:42:54 | getParameter(...) : String | UnsafeServletRequestDispatch.java:48:56:48:64 | returnURL | Potentially untrusted URL forward due to $@. | UnsafeServletRequestDispatch.java:42:22:42:54 | getParameter(...) | user-provided value | -| UnsafeServletRequestDispatch.java:76:53:76:56 | path | UnsafeServletRequestDispatch.java:71:17:71:44 | getParameter(...) : String | UnsafeServletRequestDispatch.java:76:53:76:56 | path | Potentially untrusted URL forward due to $@. | UnsafeServletRequestDispatch.java:71:17:71:44 | getParameter(...) | user-provided value | -| UnsafeUrlForward.java:14:27:14:29 | url | UnsafeUrlForward.java:13:27:13:36 | url : String | UnsafeUrlForward.java:14:27:14:29 | url | Potentially untrusted URL forward due to $@. | UnsafeUrlForward.java:13:27:13:36 | url | user-provided value | -| UnsafeUrlForward.java:20:28:20:30 | url | UnsafeUrlForward.java:18:27:18:36 | url : String | UnsafeUrlForward.java:20:28:20:30 | url | Potentially untrusted URL forward due to $@. | UnsafeUrlForward.java:18:27:18:36 | url | user-provided value | -| UnsafeUrlForward.java:26:23:26:25 | url | UnsafeUrlForward.java:25:21:25:30 | url : String | UnsafeUrlForward.java:26:23:26:25 | url | Potentially untrusted URL forward due to $@. | UnsafeUrlForward.java:25:21:25:30 | url | user-provided value | -| UnsafeUrlForward.java:31:48:31:63 | ... + ... | UnsafeUrlForward.java:30:27:30:36 | url : String | UnsafeUrlForward.java:31:48:31:63 | ... + ... | Potentially untrusted URL forward due to $@. | UnsafeUrlForward.java:30:27:30:36 | url | user-provided value | -| UnsafeUrlForward.java:31:61:31:63 | url | UnsafeUrlForward.java:30:27:30:36 | url : String | UnsafeUrlForward.java:31:61:31:63 | url | Potentially untrusted URL forward due to $@. | UnsafeUrlForward.java:30:27:30:36 | url | user-provided value | -| UnsafeUrlForward.java:38:33:38:35 | url | UnsafeUrlForward.java:36:19:36:28 | url : String | UnsafeUrlForward.java:38:33:38:35 | url | Potentially untrusted URL forward due to $@. | UnsafeUrlForward.java:36:19:36:28 | url | user-provided value | -| UnsafeUrlForward.java:49:33:49:62 | ... + ... | UnsafeUrlForward.java:47:19:47:28 | url : String | UnsafeUrlForward.java:49:33:49:62 | ... + ... | Potentially untrusted URL forward due to $@. | UnsafeUrlForward.java:47:19:47:28 | url | user-provided value | -| UnsafeUrlForward.java:60:33:60:62 | ... + ... | UnsafeUrlForward.java:58:19:58:28 | url : String | UnsafeUrlForward.java:60:33:60:62 | ... + ... | Potentially untrusted URL forward due to $@. | UnsafeUrlForward.java:58:19:58:28 | url | user-provided value | diff --git a/java/ql/test/experimental/query-tests/security/CWE-552/UnsafeUrlForward.java b/java/ql/test/experimental/query-tests/security/CWE-552/UnsafeUrlForward.java deleted file mode 100644 index 4018ed28948..00000000000 --- a/java/ql/test/experimental/query-tests/security/CWE-552/UnsafeUrlForward.java +++ /dev/null @@ -1,78 +0,0 @@ -import java.io.IOException; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.servlet.ModelAndView; - -@Controller -public class UnsafeUrlForward { - - @GetMapping("/bad1") - public ModelAndView bad1(String url) { - return new ModelAndView(url); - } - - @GetMapping("/bad2") - public ModelAndView bad2(String url) { - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName(url); - return modelAndView; - } - - @GetMapping("/bad3") - public String bad3(String url) { - return "forward:" + url + "/swagger-ui/index.html"; - } - - @GetMapping("/bad4") - public ModelAndView bad4(String url) { - ModelAndView modelAndView = new ModelAndView("forward:" + url); - return modelAndView; - } - - @GetMapping("/bad5") - public void bad5(String url, HttpServletRequest request, HttpServletResponse response) { - try { - request.getRequestDispatcher(url).include(request, response); - } catch (ServletException e) { - e.printStackTrace(); - } catch (IOException e) { - e.printStackTrace(); - } - } - - @GetMapping("/bad6") - public void bad6(String url, HttpServletRequest request, HttpServletResponse response) { - try { - request.getRequestDispatcher("/WEB-INF/jsp/" + url + ".jsp").include(request, response); - } catch (ServletException e) { - e.printStackTrace(); - } catch (IOException e) { - e.printStackTrace(); - } - } - - @GetMapping("/bad7") - public void bad7(String url, HttpServletRequest request, HttpServletResponse response) { - try { - request.getRequestDispatcher("/WEB-INF/jsp/" + url + ".jsp").forward(request, response); - } catch (ServletException e) { - e.printStackTrace(); - } catch (IOException e) { - e.printStackTrace(); - } - } - - @GetMapping("/good1") - public void good1(String url, HttpServletRequest request, HttpServletResponse response) { - try { - request.getRequestDispatcher("/index.jsp?token=" + url).forward(request, response); - } catch (ServletException e) { - e.printStackTrace(); - } catch (IOException e) { - e.printStackTrace(); - } - } -} diff --git a/java/ql/test/experimental/query-tests/security/CWE-552/UnsafeUrlForward.qlref b/java/ql/test/experimental/query-tests/security/CWE-552/UnsafeUrlForward.qlref deleted file mode 100644 index 2e4cb5e726a..00000000000 --- a/java/ql/test/experimental/query-tests/security/CWE-552/UnsafeUrlForward.qlref +++ /dev/null @@ -1 +0,0 @@ -experimental/Security/CWE/CWE-552/UnsafeUrlForward.ql \ No newline at end of file diff --git a/java/ql/test/experimental/query-tests/security/CWE-552/options b/java/ql/test/experimental/query-tests/security/CWE-552/options deleted file mode 100644 index 8fbf23e17df..00000000000 --- a/java/ql/test/experimental/query-tests/security/CWE-552/options +++ /dev/null @@ -1 +0,0 @@ -//semmle-extractor-options: --javac-args -cp ${testdir}/../../../../stubs/servlet-api-2.4:${testdir}/../../../../stubs/springframework-5.3.8/:${testdir}/../../../../stubs/javax-faces-2.3/:${testdir}/../../../../stubs/undertow-io-2.2/:${testdir}/../../../../stubs/jboss-vfs-3.2/:${testdir}/../../../../stubs/springframework-5.3.8/ diff --git a/java/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest1.ext.yml b/java/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest1.ext.yml index 4cd172bd5f4..4f0b690d19a 100644 --- a/java/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest1.ext.yml +++ b/java/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest1.ext.yml @@ -1,10 +1,5 @@ extensions: - - addsTo: - pack: codeql/java-all - extensible: supportedThreatModels - data: [] - - addsTo: pack: codeql/java-all extensible: sourceModel diff --git a/java/ql/test/library-tests/dependency/PrintAst.expected b/java/ql/test/library-tests/dependency/PrintAst.expected index ab71b03fe55..5caf6bb4d5b 100644 --- a/java/ql/test/library-tests/dependency/PrintAst.expected +++ b/java/ql/test/library-tests/dependency/PrintAst.expected @@ -63,7 +63,7 @@ dependency/A.java: # 31| 1: [SwitchStmt] switch (...) # 31| -1: [VarAccess] o # 32| 0: [PatternCase] case -#-----| 0: (Single Local Variable Declaration) +#-----| 0: (Pattern case declaration) # 32| 0: [TypeAccess] Used2 # 32| 1: [LocalVariableDeclExpr] u2 # 32| 1: [BreakStmt] break @@ -74,7 +74,7 @@ dependency/A.java: # 35| 0: [SwitchExpr] switch (...) # 35| -1: [VarAccess] o # 36| 0: [PatternCase] case -#-----| 0: (Single Local Variable Declaration) +#-----| 0: (Pattern case declaration) # 36| 0: [TypeAccess] Used3 # 36| 1: [LocalVariableDeclExpr] u3 # 36| 1: [YieldStmt] yield ... diff --git a/java/ql/test/library-tests/frameworks/apache-commons-lang3/StrBuilderTest.java b/java/ql/test/library-tests/frameworks/apache-commons-lang3/StrBuilderTest.java index 35a118f8048..fe197b4f264 100644 --- a/java/ql/test/library-tests/frameworks/apache-commons-lang3/StrBuilderTest.java +++ b/java/ql/test/library-tests/frameworks/apache-commons-lang3/StrBuilderTest.java @@ -18,8 +18,8 @@ class StrBuilderTest { StrBuilder sb1 = new StrBuilder(); sb1.append(taint().toCharArray()); sink(sb1.toString()); // $hasTaintFlow StrBuilder sb2 = new StrBuilder(); sb2.append(taint().toCharArray(), 0, 0); sink(sb2.toString()); // $hasTaintFlow - StrBuilder sb3 = new StrBuilder(); sb3.append(CharBuffer.wrap(taint().toCharArray())); sink(sb3.toString()); // $ MISSING: hasTaintFlow - StrBuilder sb4 = new StrBuilder(); sb4.append(CharBuffer.wrap(taint().toCharArray()), 0, 0); sink(sb4.toString()); // $ MISSING: hasTaintFlow + StrBuilder sb3 = new StrBuilder(); sb3.append(CharBuffer.wrap(taint().toCharArray())); sink(sb3.toString()); // $ hasTaintFlow + StrBuilder sb4 = new StrBuilder(); sb4.append(CharBuffer.wrap(taint().toCharArray()), 0, 0); sink(sb4.toString()); // $ hasTaintFlow StrBuilder sb5 = new StrBuilder(); sb5.append((CharSequence)taint()); sink(sb5.toString()); // $hasTaintFlow StrBuilder sb6 = new StrBuilder(); sb6.append((CharSequence)taint(), 0, 0); sink(sb6.toString()); // $hasTaintFlow StrBuilder sb7 = new StrBuilder(); sb7.append((Object)taint()); sink(sb7.toString()); // $hasTaintFlow @@ -206,4 +206,4 @@ class StrBuilderTest { sink(fluentAllMethodsTest2); // $hasTaintFlow } -} \ No newline at end of file +} diff --git a/java/ql/test/library-tests/frameworks/apache-commons-lang3/StrBuilderTextTest.java b/java/ql/test/library-tests/frameworks/apache-commons-lang3/StrBuilderTextTest.java index 43171647004..b3aa3ed9997 100644 --- a/java/ql/test/library-tests/frameworks/apache-commons-lang3/StrBuilderTextTest.java +++ b/java/ql/test/library-tests/frameworks/apache-commons-lang3/StrBuilderTextTest.java @@ -18,8 +18,8 @@ class StrBuilderTextTest { StrBuilder sb1 = new StrBuilder(); sb1.append(taint().toCharArray()); sink(sb1.toString()); // $hasTaintFlow StrBuilder sb2 = new StrBuilder(); sb2.append(taint().toCharArray(), 0, 0); sink(sb2.toString()); // $hasTaintFlow - StrBuilder sb3 = new StrBuilder(); sb3.append(CharBuffer.wrap(taint().toCharArray())); sink(sb3.toString()); // $ MISSING: hasTaintFlow - StrBuilder sb4 = new StrBuilder(); sb4.append(CharBuffer.wrap(taint().toCharArray()), 0, 0); sink(sb4.toString()); // $ MISSING: hasTaintFlow + StrBuilder sb3 = new StrBuilder(); sb3.append(CharBuffer.wrap(taint().toCharArray())); sink(sb3.toString()); // $ hasTaintFlow + StrBuilder sb4 = new StrBuilder(); sb4.append(CharBuffer.wrap(taint().toCharArray()), 0, 0); sink(sb4.toString()); // $ hasTaintFlow StrBuilder sb5 = new StrBuilder(); sb5.append((CharSequence)taint()); sink(sb5.toString()); // $hasTaintFlow StrBuilder sb6 = new StrBuilder(); sb6.append((CharSequence)taint(), 0, 0); sink(sb6.toString()); // $hasTaintFlow StrBuilder sb7 = new StrBuilder(); sb7.append((Object)taint()); sink(sb7.toString()); // $hasTaintFlow @@ -206,4 +206,4 @@ class StrBuilderTextTest { sink(fluentAllMethodsTest2); // $hasTaintFlow } -} \ No newline at end of file +} diff --git a/java/ql/test/library-tests/frameworks/apache-commons-lang3/TextStringBuilderTest.java b/java/ql/test/library-tests/frameworks/apache-commons-lang3/TextStringBuilderTest.java index 41941cca223..5a7c66c7526 100644 --- a/java/ql/test/library-tests/frameworks/apache-commons-lang3/TextStringBuilderTest.java +++ b/java/ql/test/library-tests/frameworks/apache-commons-lang3/TextStringBuilderTest.java @@ -19,8 +19,8 @@ class TextStringBuilderTest { TextStringBuilder sb1 = new TextStringBuilder(); sb1.append(taint().toCharArray()); sink(sb1.toString()); // $hasTaintFlow TextStringBuilder sb2 = new TextStringBuilder(); sb2.append(taint().toCharArray(), 0, 0); sink(sb2.toString()); // $hasTaintFlow - TextStringBuilder sb3 = new TextStringBuilder(); sb3.append(CharBuffer.wrap(taint().toCharArray())); sink(sb3.toString()); // $ MISSING: hasTaintFlow - TextStringBuilder sb4 = new TextStringBuilder(); sb4.append(CharBuffer.wrap(taint().toCharArray()), 0, 0); sink(sb4.toString()); // $ MISSING: hasTaintFlow + TextStringBuilder sb3 = new TextStringBuilder(); sb3.append(CharBuffer.wrap(taint().toCharArray())); sink(sb3.toString()); // $ hasTaintFlow + TextStringBuilder sb4 = new TextStringBuilder(); sb4.append(CharBuffer.wrap(taint().toCharArray()), 0, 0); sink(sb4.toString()); // $ hasTaintFlow TextStringBuilder sb5 = new TextStringBuilder(); sb5.append((CharSequence)taint()); sink(sb5.toString()); // $hasTaintFlow TextStringBuilder sb6 = new TextStringBuilder(); sb6.append((CharSequence)taint(), 0, 0); sink(sb6.toString()); // $hasTaintFlow TextStringBuilder sb7 = new TextStringBuilder(); sb7.append((Object)taint()); sink(sb7.toString()); // $hasTaintFlow @@ -207,4 +207,4 @@ class TextStringBuilderTest { sink(fluentAllMethodsTest2); // $hasTaintFlow } -} \ No newline at end of file +} diff --git a/java/ql/test/library-tests/guards12/PrintAst.expected b/java/ql/test/library-tests/guards12/PrintAst.expected index 86a8ed3b778..8920252fb29 100644 --- a/java/ql/test/library-tests/guards12/PrintAst.expected +++ b/java/ql/test/library-tests/guards12/PrintAst.expected @@ -52,9 +52,9 @@ Test.java: # 17| 0: [VarAccess] len # 17| 1: [IntegerLiteral] 4 # 17| -1: [BlockStmt] { ... } -#-----| 0: (Single Local Variable Declaration) +#-----| 0: (Pattern case declaration) # 17| 0: [TypeAccess] String -# 17| 1: [LocalVariableDeclExpr] s2 +# 17| 1: [LocalVariableDeclExpr] # 18| 1: [ConstCase] case ... # 18| -1: [BlockStmt] { ... } # 18| 0: [StringLiteral] "e" @@ -74,7 +74,7 @@ Test.java: # 23| 0: [VarAccess] len # 23| 1: [IntegerLiteral] 4 # 23| -1: [BlockStmt] { ... } -#-----| 0: (Single Local Variable Declaration) +#-----| 0: (Pattern case declaration) # 23| 0: [TypeAccess] String # 23| 1: [LocalVariableDeclExpr] s2 # 24| 2: [ConstCase] case ... @@ -82,3 +82,23 @@ Test.java: # 24| 0: [StringLiteral] "g" # 25| 3: [DefaultCase] default # 25| -1: [BlockStmt] { ... } +# 27| 5: [SwitchStmt] switch (...) +# 27| -1: [VarAccess] s +# 28| 0: [ConstCase] case ... +# 28| 0: [StringLiteral] "h" +# 29| 1: [PatternCase] case +# 29| -3: [EQExpr] ... == ... +# 29| 0: [VarAccess] len +# 29| 1: [IntegerLiteral] 4 +#-----| 0: (Pattern case declaration) +# 29| 0: [TypeAccess] String +# 29| 1: [LocalVariableDeclExpr] +# 30| 2: [ConstCase] case ... +# 30| 0: [StringLiteral] "i" +# 31| 3: [LocalVariableDeclStmt] var ...; +# 31| 0: [TypeAccess] String +# 31| 1: [LocalVariableDeclExpr] target +# 31| 0: [StringLiteral] "Shouldn't be controlled by any of those tests" +# 32| 4: [BreakStmt] break +# 33| 5: [DefaultCase] default +# 34| 6: [BreakStmt] break diff --git a/java/ql/test/library-tests/guards12/Test.java b/java/ql/test/library-tests/guards12/Test.java index ee80e17df8d..2c777467d4a 100644 --- a/java/ql/test/library-tests/guards12/Test.java +++ b/java/ql/test/library-tests/guards12/Test.java @@ -14,7 +14,7 @@ class Test { } int len = s.length(); switch (s) { - case String s2 when len == 4 -> { } + case String _ when len == 4 -> { } case "e" -> { } default -> { } } @@ -24,5 +24,14 @@ class Test { case "g" -> { } default -> { } } + switch (s) { + case "h": + case String _ when len == 4: + case "i": + String target = "Shouldn't be controlled by any of those tests"; + break; + default: + break; + } } } diff --git a/java/ql/test/library-tests/guards12/guard.expected b/java/ql/test/library-tests/guards12/guard.expected index 29ca4cafb41..0980e891d84 100644 --- a/java/ql/test/library-tests/guards12/guard.expected +++ b/java/ql/test/library-tests/guards12/guard.expected @@ -1,22 +1,22 @@ hasBranchEdge -| Test.java:4:7:4:22 | case ... | Test.java:2:39:27:3 | { ... } | Test.java:4:7:4:22 | case ... | true | -| Test.java:5:7:5:17 | case ... | Test.java:2:39:27:3 | { ... } | Test.java:5:7:5:17 | case ... | true | -| Test.java:6:7:6:17 | case ... | Test.java:2:39:27:3 | { ... } | Test.java:6:7:6:17 | case ... | true | -| Test.java:7:7:7:16 | default | Test.java:2:39:27:3 | { ... } | Test.java:7:7:7:16 | default | true | +| Test.java:4:7:4:22 | case ... | Test.java:2:39:36:3 | { ... } | Test.java:4:7:4:22 | case ... | true | +| Test.java:5:7:5:17 | case ... | Test.java:2:39:36:3 | { ... } | Test.java:5:7:5:17 | case ... | true | +| Test.java:6:7:6:17 | case ... | Test.java:2:39:36:3 | { ... } | Test.java:6:7:6:17 | case ... | true | +| Test.java:7:7:7:16 | default | Test.java:2:39:36:3 | { ... } | Test.java:7:7:7:16 | default | true | | Test.java:10:7:10:22 | case ... | Test.java:3:9:3:21 | x | Test.java:10:7:10:22 | case ... | true | | Test.java:11:7:11:17 | case ... | Test.java:3:9:3:21 | x | Test.java:11:7:11:17 | case ... | true | | Test.java:12:7:12:17 | case ... | Test.java:3:9:3:21 | x | Test.java:12:7:12:17 | case ... | true | | Test.java:13:7:13:16 | default | Test.java:3:9:3:21 | x | Test.java:13:7:13:16 | default | true | -| Test.java:17:7:17:37 | case | Test.java:15:5:15:25 | var ...; | Test.java:17:19:17:20 | s2 | true | -| Test.java:17:7:17:37 | case | Test.java:15:5:15:25 | var ...; | Test.java:18:7:18:17 | case ... | false | -| Test.java:17:7:17:37 | case | Test.java:15:5:15:25 | var ...; | Test.java:19:7:19:16 | default | false | -| Test.java:17:27:17:34 | ... == ... | Test.java:17:19:17:20 | s2 | Test.java:17:39:17:41 | { ... } | true | -| Test.java:17:27:17:34 | ... == ... | Test.java:17:19:17:20 | s2 | Test.java:18:7:18:17 | case ... | false | -| Test.java:17:27:17:34 | ... == ... | Test.java:17:19:17:20 | s2 | Test.java:19:7:19:16 | default | false | +| Test.java:17:7:17:36 | case | Test.java:15:5:15:25 | var ...; | Test.java:17:19:17:19 | | true | +| Test.java:17:7:17:36 | case | Test.java:15:5:15:25 | var ...; | Test.java:18:7:18:17 | case ... | false | +| Test.java:17:7:17:36 | case | Test.java:15:5:15:25 | var ...; | Test.java:19:7:19:16 | default | false | +| Test.java:17:26:17:33 | ... == ... | Test.java:17:19:17:19 | | Test.java:17:38:17:40 | { ... } | true | +| Test.java:17:26:17:33 | ... == ... | Test.java:17:19:17:19 | | Test.java:18:7:18:17 | case ... | false | +| Test.java:17:26:17:33 | ... == ... | Test.java:17:19:17:19 | | Test.java:19:7:19:16 | default | false | | Test.java:18:7:18:17 | case ... | Test.java:15:5:15:25 | var ...; | Test.java:18:7:18:17 | case ... | true | -| Test.java:18:7:18:17 | case ... | Test.java:17:19:17:20 | s2 | Test.java:18:7:18:17 | case ... | true | +| Test.java:18:7:18:17 | case ... | Test.java:17:19:17:19 | | Test.java:18:7:18:17 | case ... | true | | Test.java:19:7:19:16 | default | Test.java:15:5:15:25 | var ...; | Test.java:19:7:19:16 | default | true | -| Test.java:19:7:19:16 | default | Test.java:17:19:17:20 | s2 | Test.java:19:7:19:16 | default | true | +| Test.java:19:7:19:16 | default | Test.java:17:19:17:19 | | Test.java:19:7:19:16 | default | true | | Test.java:21:13:21:19 | unknown | Test.java:21:5:21:42 | switch (...) | Test.java:21:23:21:23 | s | true | | Test.java:21:13:21:19 | unknown | Test.java:21:5:21:42 | switch (...) | Test.java:21:27:21:27 | s | false | | Test.java:22:7:22:17 | case ... | Test.java:21:23:21:23 | s | Test.java:22:7:22:17 | case ... | true | @@ -31,6 +31,16 @@ hasBranchEdge | Test.java:24:7:24:17 | case ... | Test.java:23:19:23:20 | s2 | Test.java:24:7:24:17 | case ... | true | | Test.java:25:7:25:16 | default | Test.java:23:7:23:37 | case | Test.java:25:7:25:16 | default | true | | Test.java:25:7:25:16 | default | Test.java:23:19:23:20 | s2 | Test.java:25:7:25:16 | default | true | +| Test.java:28:7:28:15 | case ... | Test.java:27:5:27:14 | switch (...) | Test.java:28:7:28:15 | case ... | true | +| Test.java:29:7:29:34 | case | Test.java:29:7:29:34 | case | Test.java:29:19:29:19 | | true | +| Test.java:29:7:29:34 | case | Test.java:29:7:29:34 | case | Test.java:30:7:30:15 | case ... | false | +| Test.java:29:7:29:34 | case | Test.java:29:7:29:34 | case | Test.java:33:7:33:14 | default | false | +| Test.java:29:26:29:33 | ... == ... | Test.java:29:19:29:19 | | Test.java:30:7:30:15 | case ... | false | +| Test.java:29:26:29:33 | ... == ... | Test.java:29:19:29:19 | | Test.java:30:7:30:15 | case ... | true | +| Test.java:29:26:29:33 | ... == ... | Test.java:29:19:29:19 | | Test.java:33:7:33:14 | default | false | +| Test.java:30:7:30:15 | case ... | Test.java:29:7:29:34 | case | Test.java:30:7:30:15 | case ... | true | +| Test.java:33:7:33:14 | default | Test.java:29:7:29:34 | case | Test.java:33:7:33:14 | default | true | +| Test.java:33:7:33:14 | default | Test.java:29:19:29:19 | | Test.java:33:7:33:14 | default | true | #select | Test.java:5:7:5:17 | case ... | Test.java:3:20:3:20 | s | Test.java:5:12:5:14 | "c" | true | false | Test.java:7:7:7:16 | default | | Test.java:5:7:5:17 | case ... | Test.java:3:20:3:20 | s | Test.java:5:12:5:14 | "c" | true | true | Test.java:5:7:5:17 | case ... | @@ -40,7 +50,7 @@ hasBranchEdge | Test.java:11:7:11:17 | case ... | Test.java:9:13:9:13 | s | Test.java:11:12:11:14 | "c" | true | true | Test.java:11:7:11:17 | case ... | | Test.java:12:7:12:17 | case ... | Test.java:9:13:9:13 | s | Test.java:12:12:12:14 | "d" | true | false | Test.java:13:7:13:16 | default | | Test.java:12:7:12:17 | case ... | Test.java:9:13:9:13 | s | Test.java:12:12:12:14 | "d" | true | true | Test.java:12:7:12:17 | case ... | -| Test.java:17:27:17:34 | ... == ... | Test.java:17:27:17:29 | len | Test.java:17:34:17:34 | 4 | true | true | Test.java:17:39:17:41 | { ... } | +| Test.java:17:26:17:33 | ... == ... | Test.java:17:26:17:28 | len | Test.java:17:33:17:33 | 4 | true | true | Test.java:17:38:17:40 | { ... } | | Test.java:18:7:18:17 | case ... | Test.java:16:13:16:13 | s | Test.java:18:12:18:14 | "e" | true | false | Test.java:19:7:19:16 | default | | Test.java:18:7:18:17 | case ... | Test.java:16:13:16:13 | s | Test.java:18:12:18:14 | "e" | true | true | Test.java:18:7:18:17 | case ... | | Test.java:22:7:22:17 | case ... | Test.java:21:13:21:41 | ...?...:... | Test.java:22:12:22:14 | "f" | true | false | Test.java:25:7:25:16 | default | @@ -48,3 +58,6 @@ hasBranchEdge | Test.java:23:27:23:34 | ... == ... | Test.java:23:27:23:29 | len | Test.java:23:34:23:34 | 4 | true | true | Test.java:23:39:23:41 | { ... } | | Test.java:24:7:24:17 | case ... | Test.java:21:13:21:41 | ...?...:... | Test.java:24:12:24:14 | "g" | true | false | Test.java:25:7:25:16 | default | | Test.java:24:7:24:17 | case ... | Test.java:21:13:21:41 | ...?...:... | Test.java:24:12:24:14 | "g" | true | true | Test.java:24:7:24:17 | case ... | +| Test.java:28:7:28:15 | case ... | Test.java:27:13:27:13 | s | Test.java:28:12:28:14 | "h" | true | false | Test.java:33:7:33:14 | default | +| Test.java:28:7:28:15 | case ... | Test.java:27:13:27:13 | s | Test.java:28:12:28:14 | "h" | true | true | Test.java:28:7:28:15 | case ... | +| Test.java:30:7:30:15 | case ... | Test.java:27:13:27:13 | s | Test.java:30:12:30:14 | "i" | true | false | Test.java:33:7:33:14 | default | diff --git a/java/ql/test/library-tests/guards12/options b/java/ql/test/library-tests/guards12/options index a0d1b7e7002..5011824a5d7 100644 --- a/java/ql/test/library-tests/guards12/options +++ b/java/ql/test/library-tests/guards12/options @@ -1 +1 @@ -//semmle-extractor-options: --javac-args --release 21 +//semmle-extractor-options: --javac-args --release 22 diff --git a/java/ql/test/library-tests/pattern-switch/cfg/Exhaustive.java b/java/ql/test/library-tests/pattern-switch/cfg/Exhaustive.java index c438b8253a2..d344ceda022 100644 --- a/java/ql/test/library-tests/pattern-switch/cfg/Exhaustive.java +++ b/java/ql/test/library-tests/pattern-switch/cfg/Exhaustive.java @@ -26,6 +26,12 @@ public class Exhaustive { case Y y -> { } } + // Test the case where a pattern case falls directly out of a block: + switch (i) { + case X _: + case Y _: + } + } } diff --git a/java/ql/test/library-tests/pattern-switch/cfg/Test.java b/java/ql/test/library-tests/pattern-switch/cfg/Test.java index 9894d7fd197..fb6b314999b 100644 --- a/java/ql/test/library-tests/pattern-switch/cfg/Test.java +++ b/java/ql/test/library-tests/pattern-switch/cfg/Test.java @@ -98,6 +98,39 @@ public class Test { break; } + switch(thing) { + case B(_, _): + case Integer _, String _, A(_, _) when thing.toString().equals("abc"): + case Float _: + break; + default: + break; + } + + var result = switch(thing) { + case B(_, _): + case Integer _, String _, A(_, _) when thing.toString().equals("abc"): + case Float _: + yield 1; + default: + yield 2; + }; + + switch ((String)thing) { + case "a": + case String _ when ((String)thing).length() == 5: + case "b": + break; + default: + break; + } + + // Test the case where a case falls out of a switch block without a break: + switch(thing) { + case String _: + default: + } + } } diff --git a/java/ql/test/library-tests/pattern-switch/cfg/options b/java/ql/test/library-tests/pattern-switch/cfg/options index a0d1b7e7002..5011824a5d7 100644 --- a/java/ql/test/library-tests/pattern-switch/cfg/options +++ b/java/ql/test/library-tests/pattern-switch/cfg/options @@ -1 +1 @@ -//semmle-extractor-options: --javac-args --release 21 +//semmle-extractor-options: --javac-args --release 22 diff --git a/java/ql/test/library-tests/pattern-switch/cfg/test.expected b/java/ql/test/library-tests/pattern-switch/cfg/test.expected index 31605711281..a63aa788668 100644 --- a/java/ql/test/library-tests/pattern-switch/cfg/test.expected +++ b/java/ql/test/library-tests/pattern-switch/cfg/test.expected @@ -16,7 +16,7 @@ | Exhaustive.java:5:15:5:15 | { ... } | Exhaustive.java:5:15:5:15 | super(...) | | Exhaustive.java:6:15:6:15 | super(...) | Exhaustive.java:6:15:6:15 | Y | | Exhaustive.java:6:15:6:15 | { ... } | Exhaustive.java:6:15:6:15 | super(...) | -| Exhaustive.java:8:47:29:3 | { ... } | Exhaustive.java:11:5:11:14 | switch (...) | +| Exhaustive.java:8:47:35:3 | { ... } | Exhaustive.java:11:5:11:14 | switch (...) | | Exhaustive.java:11:5:11:14 | switch (...) | Exhaustive.java:11:13:11:13 | o | | Exhaustive.java:11:13:11:13 | o | Exhaustive.java:12:7:12:22 | case | | Exhaustive.java:12:7:12:22 | case | Exhaustive.java:12:19:12:19 | s | @@ -42,13 +42,20 @@ | Exhaustive.java:25:7:25:17 | case | Exhaustive.java:25:14:25:14 | x | | Exhaustive.java:25:7:25:17 | case | Exhaustive.java:26:7:26:17 | case | | Exhaustive.java:25:14:25:14 | x | Exhaustive.java:25:19:25:21 | { ... } | -| Exhaustive.java:25:19:25:21 | { ... } | Exhaustive.java:8:22:8:25 | test | +| Exhaustive.java:25:19:25:21 | { ... } | Exhaustive.java:30:5:30:14 | switch (...) | | Exhaustive.java:26:7:26:17 | case | Exhaustive.java:26:14:26:14 | y | | Exhaustive.java:26:14:26:14 | y | Exhaustive.java:26:19:26:21 | { ... } | -| Exhaustive.java:26:19:26:21 | { ... } | Exhaustive.java:8:22:8:25 | test | +| Exhaustive.java:26:19:26:21 | { ... } | Exhaustive.java:30:5:30:14 | switch (...) | +| Exhaustive.java:30:5:30:14 | switch (...) | Exhaustive.java:30:13:30:13 | i | +| Exhaustive.java:30:13:30:13 | i | Exhaustive.java:31:7:31:15 | case | +| Exhaustive.java:31:7:31:15 | case | Exhaustive.java:31:14:31:14 | | +| Exhaustive.java:31:7:31:15 | case | Exhaustive.java:32:7:32:15 | case | +| Exhaustive.java:31:14:31:14 | | Exhaustive.java:8:22:8:25 | test | +| Exhaustive.java:32:7:32:15 | case | Exhaustive.java:32:14:32:14 | | +| Exhaustive.java:32:14:32:14 | | Exhaustive.java:8:22:8:25 | test | | Test.java:1:14:1:17 | super(...) | Test.java:1:14:1:17 | Test | | Test.java:1:14:1:17 | { ... } | Test.java:1:14:1:17 | super(...) | -| Test.java:3:41:101:3 | { ... } | Test.java:5:6:5:19 | switch (...) | +| Test.java:3:41:134:3 | { ... } | Test.java:5:6:5:19 | switch (...) | | Test.java:5:6:5:19 | switch (...) | Test.java:5:14:5:18 | thing | | Test.java:5:14:5:18 | thing | Test.java:6:8:6:23 | case | | Test.java:6:8:6:23 | case | Test.java:6:20:6:20 | s | @@ -288,26 +295,109 @@ | Test.java:95:21:95:21 | x | Test.java:95:28:95:28 | y | | Test.java:95:28:95:28 | y | Test.java:95:15:95:29 | B(...) | | Test.java:95:36:95:36 | z | Test.java:95:13:95:37 | A(...) | -| Test.java:96:10:96:15 | break | Test.java:3:22:3:25 | test | +| Test.java:96:10:96:15 | break | Test.java:101:6:101:18 | switch (...) | | Test.java:97:8:97:15 | default | Test.java:98:10:98:15 | break | -| Test.java:98:10:98:15 | break | Test.java:3:22:3:25 | test | -| Test.java:105:8:105:8 | ...=... | Test.java:105:8:105:8 | ; | -| Test.java:105:8:105:8 | ...=... | Test.java:105:8:105:8 | A | -| Test.java:105:8:105:8 | ; | Test.java:105:8:105:8 | this | -| Test.java:105:8:105:8 | ; | Test.java:105:8:105:8 | this | -| Test.java:105:8:105:8 | b | Test.java:105:8:105:8 | ...=... | -| Test.java:105:8:105:8 | field3 | Test.java:105:8:105:8 | ...=... | -| Test.java:105:8:105:8 | super(...) | Test.java:105:8:105:8 | ; | -| Test.java:105:8:105:8 | this | Test.java:105:8:105:8 | b | -| Test.java:105:8:105:8 | this | Test.java:105:8:105:8 | field3 | -| Test.java:105:8:105:8 | { ... } | Test.java:105:8:105:8 | super(...) | -| Test.java:106:8:106:8 | ...=... | Test.java:106:8:106:8 | ; | -| Test.java:106:8:106:8 | ...=... | Test.java:106:8:106:8 | B | -| Test.java:106:8:106:8 | ; | Test.java:106:8:106:8 | this | -| Test.java:106:8:106:8 | ; | Test.java:106:8:106:8 | this | -| Test.java:106:8:106:8 | field1 | Test.java:106:8:106:8 | ...=... | -| Test.java:106:8:106:8 | field2 | Test.java:106:8:106:8 | ...=... | -| Test.java:106:8:106:8 | super(...) | Test.java:106:8:106:8 | ; | -| Test.java:106:8:106:8 | this | Test.java:106:8:106:8 | field1 | -| Test.java:106:8:106:8 | this | Test.java:106:8:106:8 | field2 | -| Test.java:106:8:106:8 | { ... } | Test.java:106:8:106:8 | super(...) | +| Test.java:98:10:98:15 | break | Test.java:101:6:101:18 | switch (...) | +| Test.java:101:6:101:18 | switch (...) | Test.java:101:13:101:17 | thing | +| Test.java:101:13:101:17 | thing | Test.java:102:8:102:20 | case | +| Test.java:102:8:102:20 | case | Test.java:102:15:102:15 | | +| Test.java:102:8:102:20 | case | Test.java:103:8:103:77 | case | +| Test.java:102:13:102:19 | B(...) | Test.java:105:10:105:15 | break | +| Test.java:102:15:102:15 | | Test.java:102:18:102:18 | | +| Test.java:102:18:102:18 | | Test.java:102:13:102:19 | B(...) | +| Test.java:103:8:103:77 | case | Test.java:103:21:103:21 | | +| Test.java:103:8:103:77 | case | Test.java:103:31:103:31 | | +| Test.java:103:8:103:77 | case | Test.java:103:36:103:36 | | +| Test.java:103:8:103:77 | case | Test.java:104:8:104:20 | case | +| Test.java:103:21:103:21 | | Test.java:103:47:103:51 | thing | +| Test.java:103:31:103:31 | | Test.java:103:47:103:51 | thing | +| Test.java:103:34:103:40 | A(...) | Test.java:103:47:103:51 | thing | +| Test.java:103:36:103:36 | | Test.java:103:39:103:39 | | +| Test.java:103:39:103:39 | | Test.java:103:34:103:40 | A(...) | +| Test.java:103:47:103:51 | thing | Test.java:103:47:103:62 | toString(...) | +| Test.java:103:47:103:62 | toString(...) | Test.java:103:71:103:75 | "abc" | +| Test.java:103:47:103:76 | equals(...) | Test.java:104:8:104:20 | case | +| Test.java:103:47:103:76 | equals(...) | Test.java:105:10:105:15 | break | +| Test.java:103:71:103:75 | "abc" | Test.java:103:47:103:76 | equals(...) | +| Test.java:104:8:104:20 | case | Test.java:104:19:104:19 | | +| Test.java:104:8:104:20 | case | Test.java:106:8:106:15 | default | +| Test.java:104:19:104:19 | | Test.java:105:10:105:15 | break | +| Test.java:105:10:105:15 | break | Test.java:110:6:117:7 | var ...; | +| Test.java:106:8:106:15 | default | Test.java:107:10:107:15 | break | +| Test.java:107:10:107:15 | break | Test.java:110:6:117:7 | var ...; | +| Test.java:110:6:117:7 | var ...; | Test.java:110:19:110:31 | switch (...) | +| Test.java:110:10:110:31 | result | Test.java:119:6:119:27 | switch (...) | +| Test.java:110:19:110:31 | switch (...) | Test.java:110:26:110:30 | thing | +| Test.java:110:26:110:30 | thing | Test.java:111:8:111:20 | case | +| Test.java:111:8:111:20 | case | Test.java:111:15:111:15 | | +| Test.java:111:8:111:20 | case | Test.java:112:8:112:77 | case | +| Test.java:111:13:111:19 | B(...) | Test.java:114:10:114:17 | yield ... | +| Test.java:111:15:111:15 | | Test.java:111:18:111:18 | | +| Test.java:111:18:111:18 | | Test.java:111:13:111:19 | B(...) | +| Test.java:112:8:112:77 | case | Test.java:112:21:112:21 | | +| Test.java:112:8:112:77 | case | Test.java:112:31:112:31 | | +| Test.java:112:8:112:77 | case | Test.java:112:36:112:36 | | +| Test.java:112:8:112:77 | case | Test.java:113:8:113:20 | case | +| Test.java:112:21:112:21 | | Test.java:112:47:112:51 | thing | +| Test.java:112:31:112:31 | | Test.java:112:47:112:51 | thing | +| Test.java:112:34:112:40 | A(...) | Test.java:112:47:112:51 | thing | +| Test.java:112:36:112:36 | | Test.java:112:39:112:39 | | +| Test.java:112:39:112:39 | | Test.java:112:34:112:40 | A(...) | +| Test.java:112:47:112:51 | thing | Test.java:112:47:112:62 | toString(...) | +| Test.java:112:47:112:62 | toString(...) | Test.java:112:71:112:75 | "abc" | +| Test.java:112:47:112:76 | equals(...) | Test.java:113:8:113:20 | case | +| Test.java:112:47:112:76 | equals(...) | Test.java:114:10:114:17 | yield ... | +| Test.java:112:71:112:75 | "abc" | Test.java:112:47:112:76 | equals(...) | +| Test.java:113:8:113:20 | case | Test.java:113:19:113:19 | | +| Test.java:113:8:113:20 | case | Test.java:115:8:115:15 | default | +| Test.java:113:19:113:19 | | Test.java:114:10:114:17 | yield ... | +| Test.java:114:10:114:17 | yield ... | Test.java:114:16:114:16 | 1 | +| Test.java:114:16:114:16 | 1 | Test.java:110:10:110:31 | result | +| Test.java:115:8:115:15 | default | Test.java:116:10:116:17 | yield ... | +| Test.java:116:10:116:17 | yield ... | Test.java:116:16:116:16 | 2 | +| Test.java:116:16:116:16 | 2 | Test.java:110:10:110:31 | result | +| Test.java:119:6:119:27 | switch (...) | Test.java:119:22:119:26 | thing | +| Test.java:119:14:119:26 | (...)... | Test.java:120:8:120:16 | case ... | +| Test.java:119:14:119:26 | (...)... | Test.java:121:8:121:56 | case | +| Test.java:119:22:119:26 | thing | Test.java:119:14:119:26 | (...)... | +| Test.java:120:8:120:16 | case ... | Test.java:122:8:122:16 | case ... | +| Test.java:121:8:121:56 | case | Test.java:121:20:121:20 | | +| Test.java:121:8:121:56 | case | Test.java:122:8:122:16 | case ... | +| Test.java:121:8:121:56 | case | Test.java:124:8:124:15 | default | +| Test.java:121:20:121:20 | | Test.java:121:36:121:40 | thing | +| Test.java:121:27:121:50 | length(...) | Test.java:121:55:121:55 | 5 | +| Test.java:121:27:121:55 | ... == ... | Test.java:122:8:122:16 | case ... | +| Test.java:121:27:121:55 | ... == ... | Test.java:124:8:124:15 | default | +| Test.java:121:28:121:40 | (...)... | Test.java:121:27:121:50 | length(...) | +| Test.java:121:36:121:40 | thing | Test.java:121:28:121:40 | (...)... | +| Test.java:121:55:121:55 | 5 | Test.java:121:27:121:55 | ... == ... | +| Test.java:122:8:122:16 | case ... | Test.java:123:10:123:15 | break | +| Test.java:123:10:123:15 | break | Test.java:129:6:129:18 | switch (...) | +| Test.java:124:8:124:15 | default | Test.java:125:10:125:15 | break | +| Test.java:125:10:125:15 | break | Test.java:129:6:129:18 | switch (...) | +| Test.java:129:6:129:18 | switch (...) | Test.java:129:13:129:17 | thing | +| Test.java:129:13:129:17 | thing | Test.java:130:8:130:21 | case | +| Test.java:130:8:130:21 | case | Test.java:130:20:130:20 | | +| Test.java:130:8:130:21 | case | Test.java:131:8:131:15 | default | +| Test.java:130:20:130:20 | | Test.java:131:8:131:15 | default | +| Test.java:131:8:131:15 | default | Test.java:3:22:3:25 | test | +| Test.java:138:8:138:8 | ...=... | Test.java:138:8:138:8 | ; | +| Test.java:138:8:138:8 | ...=... | Test.java:138:8:138:8 | A | +| Test.java:138:8:138:8 | ; | Test.java:138:8:138:8 | this | +| Test.java:138:8:138:8 | ; | Test.java:138:8:138:8 | this | +| Test.java:138:8:138:8 | b | Test.java:138:8:138:8 | ...=... | +| Test.java:138:8:138:8 | field3 | Test.java:138:8:138:8 | ...=... | +| Test.java:138:8:138:8 | super(...) | Test.java:138:8:138:8 | ; | +| Test.java:138:8:138:8 | this | Test.java:138:8:138:8 | b | +| Test.java:138:8:138:8 | this | Test.java:138:8:138:8 | field3 | +| Test.java:138:8:138:8 | { ... } | Test.java:138:8:138:8 | super(...) | +| Test.java:139:8:139:8 | ...=... | Test.java:139:8:139:8 | ; | +| Test.java:139:8:139:8 | ...=... | Test.java:139:8:139:8 | B | +| Test.java:139:8:139:8 | ; | Test.java:139:8:139:8 | this | +| Test.java:139:8:139:8 | ; | Test.java:139:8:139:8 | this | +| Test.java:139:8:139:8 | field1 | Test.java:139:8:139:8 | ...=... | +| Test.java:139:8:139:8 | field2 | Test.java:139:8:139:8 | ...=... | +| Test.java:139:8:139:8 | super(...) | Test.java:139:8:139:8 | ; | +| Test.java:139:8:139:8 | this | Test.java:139:8:139:8 | field1 | +| Test.java:139:8:139:8 | this | Test.java:139:8:139:8 | field2 | +| Test.java:139:8:139:8 | { ... } | Test.java:139:8:139:8 | super(...) | diff --git a/java/ql/test/library-tests/prettyprint/Test.java b/java/ql/test/library-tests/prettyprint/Test.java index c643955751e..1ffb1671459 100644 --- a/java/ql/test/library-tests/prettyprint/Test.java +++ b/java/ql/test/library-tests/prettyprint/Test.java @@ -45,6 +45,13 @@ public class Test { if (o instanceof R(S(var x), var y)) { } + switch(o) { + case String _, Integer _: + case R(S(_), _): + default: + break; + } + } } diff --git a/java/ql/test/library-tests/prettyprint/options b/java/ql/test/library-tests/prettyprint/options index a0d1b7e7002..5011824a5d7 100644 --- a/java/ql/test/library-tests/prettyprint/options +++ b/java/ql/test/library-tests/prettyprint/options @@ -1 +1 @@ -//semmle-extractor-options: --javac-args --release 21 +//semmle-extractor-options: --javac-args --release 22 diff --git a/java/ql/test/library-tests/prettyprint/pp.expected b/java/ql/test/library-tests/prettyprint/pp.expected index eb4fbaf0633..fb9608f8f41 100644 --- a/java/ql/test/library-tests/prettyprint/pp.expected +++ b/java/ql/test/library-tests/prettyprint/pp.expected @@ -84,5 +84,11 @@ | Test.java:1:14:1:17 | Test | 83 | } | | Test.java:1:14:1:17 | Test | 84 | if (o instanceof R(S(var x), var y)) { | | Test.java:1:14:1:17 | Test | 85 | } | -| Test.java:1:14:1:17 | Test | 86 | } | -| Test.java:1:14:1:17 | Test | 87 | } | +| Test.java:1:14:1:17 | Test | 86 | switch (o) { | +| Test.java:1:14:1:17 | Test | 87 | case String _, Integer _: | +| Test.java:1:14:1:17 | Test | 88 | case R(S(var _), var _): | +| Test.java:1:14:1:17 | Test | 89 | default: | +| Test.java:1:14:1:17 | Test | 90 | break; | +| Test.java:1:14:1:17 | Test | 91 | } | +| Test.java:1:14:1:17 | Test | 92 | } | +| Test.java:1:14:1:17 | Test | 93 | } | diff --git a/java/ql/test/library-tests/printAst/AnonDecls.java b/java/ql/test/library-tests/printAst/AnonDecls.java new file mode 100644 index 00000000000..45000050386 --- /dev/null +++ b/java/ql/test/library-tests/printAst/AnonDecls.java @@ -0,0 +1,181 @@ +import java.io.Closeable; +import java.util.List; +import java.util.function.BiFunction; + +record SubRecord(int z) { } +record MyRecord(int x, SubRecord y) { } + +public class AnonDecls { + + public static void test(List ss, Object o) { + + // Note each construct is repeated to ensure this doesn't produce database inconsistencies + + int _ = 1; + int _ = 2; + + try (Closeable _ = null) { } catch (Exception _) { } + try (Closeable _ = null) { } catch (Exception _) { } + + int x = 0; + + for (int _ = 1; x < 10; x++) { } + for (int _ = 2; x > 0; x--) { } + + for (var _ : ss) { } + for (var _ : ss) { } + + BiFunction f1 = (_, _) -> 1; + BiFunction f2 = (_, _) -> 2; + + switch (o) { + case SubRecord _: + case MyRecord _: + default: + } + + switch (o) { + case SubRecord _: + case MyRecord (int _, SubRecord _): + default: + } + + switch (o) { + case SubRecord _: + case MyRecord (int _, SubRecord (int _)): + default: + } + + switch (o) { + case SubRecord _: + case MyRecord (_, _): + default: + } + + switch (o) { + case MyRecord (_, _), SubRecord(_): + default: + } + + switch (o) { + case MyRecord (_, _), SubRecord(_) when ss != null: + default: + } + + switch (o) { + // Note use of binding patterns, not records with unnamed patterns as above + case MyRecord _, SubRecord _: + default: + } + + switch (o) { + case SubRecord _ -> { } + case MyRecord _ -> { } + default -> { } + } + + switch (o) { + case SubRecord _ -> { } + case MyRecord (int _, SubRecord _) -> { } + default -> { } + } + + switch (o) { + case SubRecord _ -> { } + case MyRecord (int _, SubRecord (int _)) -> { } + default -> { } + } + + switch (o) { + case SubRecord _ -> { } + case MyRecord (_, _) -> { } + default -> { } + } + + switch (o) { + case MyRecord (_, _), SubRecord(_) -> { } + default -> { } + } + + switch (o) { + case MyRecord (_, _), SubRecord(_) when ss != null -> { } + default -> { } + } + + var x1 = switch (o) { + case SubRecord _: + case MyRecord _: + default: + yield 1; + }; + + var x2 = switch (o) { + case SubRecord _: + case MyRecord (int _, SubRecord _): + default: + yield 1; + }; + + var x3 = switch (o) { + case SubRecord _: + case MyRecord (int _, SubRecord (int _)): + default: + yield 1; + }; + + var x4 = switch (o) { + case SubRecord _: + case MyRecord (_, _): + default: + yield 1; + }; + + var x5 = switch (o) { + case MyRecord (_, _), SubRecord(_): + default: + yield 1; + }; + + var x6 = switch (o) { + case MyRecord (_, _), SubRecord(_) when ss != null: + default: + yield 1; + }; + + var x7 = switch (o) { + case SubRecord _ -> 1; + case MyRecord _ -> 2; + default -> 3; + }; + + var x8 = switch (o) { + case SubRecord _ -> 1; + case MyRecord (int _, SubRecord _) -> 2; + default -> 3; + }; + + var x9 = switch (o) { + case SubRecord _ -> 1; + case MyRecord (int _, SubRecord (int _)) -> 2; + default -> 3; + }; + + var x10 = switch (o) { + case SubRecord _ -> 1; + case MyRecord (_, _) -> 2; + default -> 3; + }; + + var x11 = switch (o) { + case MyRecord (_, _), SubRecord(_) -> 1; + default -> 2; + }; + + var x12 = switch (o) { + case MyRecord (_, _), SubRecord(_) when ss != null -> 1; + default -> 2; + }; + + } + +} diff --git a/java/ql/test/library-tests/printAst/PrintAst.expected b/java/ql/test/library-tests/printAst/PrintAst.expected index be523390620..0192c0f2272 100644 --- a/java/ql/test/library-tests/printAst/PrintAst.expected +++ b/java/ql/test/library-tests/printAst/PrintAst.expected @@ -127,7 +127,7 @@ A.java: # 54| -1: [VarAccess] System.out # 54| -1: [TypeAccess] System # 54| 0: [VarAccess] s -#-----| 0: (Single Local Variable Declaration) +#-----| 0: (Pattern case declaration) # 54| 0: [TypeAccess] String # 54| 1: [LocalVariableDeclExpr] s # 55| 1: [PatternCase] case @@ -138,7 +138,7 @@ A.java: # 55| 0: [AddExpr] ... + ... # 55| 0: [StringLiteral] "An integer: " # 55| 1: [VarAccess] i -#-----| 0: (Single Local Variable Declaration) +#-----| 0: (Pattern case declaration) # 55| 0: [TypeAccess] Integer # 55| 1: [LocalVariableDeclExpr] i # 56| 2: [DefaultCase] default @@ -146,7 +146,7 @@ A.java: # 58| 3: [SwitchStmt] switch (...) # 58| -1: [VarAccess] thing # 59| 0: [PatternCase] case -#-----| 0: (Single Local Variable Declaration) +#-----| 0: (Pattern case declaration) # 59| 0: [TypeAccess] String # 59| 1: [LocalVariableDeclExpr] s # 60| 1: [ExprStmt] ; @@ -156,7 +156,7 @@ A.java: # 60| 0: [VarAccess] s # 61| 2: [BreakStmt] break # 62| 3: [PatternCase] case -#-----| 0: (Single Local Variable Declaration) +#-----| 0: (Pattern case declaration) # 62| 0: [TypeAccess] Integer # 62| 1: [LocalVariableDeclExpr] i # 63| 4: [ExprStmt] ; @@ -175,14 +175,14 @@ A.java: # 68| -1: [VarAccess] thing # 69| 0: [PatternCase] case # 69| -1: [VarAccess] s -#-----| 0: (Single Local Variable Declaration) +#-----| 0: (Pattern case declaration) # 69| 0: [TypeAccess] String # 69| 1: [LocalVariableDeclExpr] s # 70| 1: [PatternCase] case # 70| -1: [AddExpr] ... + ... # 70| 0: [StringLiteral] "An integer: " # 70| 1: [VarAccess] i -#-----| 0: (Single Local Variable Declaration) +#-----| 0: (Pattern case declaration) # 70| 0: [TypeAccess] Integer # 70| 1: [LocalVariableDeclExpr] i # 71| 2: [DefaultCase] default @@ -192,13 +192,13 @@ A.java: # 73| 0: [SwitchExpr] switch (...) # 73| -1: [VarAccess] thing # 74| 0: [PatternCase] case -#-----| 0: (Single Local Variable Declaration) +#-----| 0: (Pattern case declaration) # 74| 0: [TypeAccess] String # 74| 1: [LocalVariableDeclExpr] s # 75| 1: [YieldStmt] yield ... # 75| 0: [VarAccess] s # 76| 2: [PatternCase] case -#-----| 0: (Single Local Variable Declaration) +#-----| 0: (Pattern case declaration) # 76| 0: [TypeAccess] Integer # 76| 1: [LocalVariableDeclExpr] i # 77| 3: [YieldStmt] yield ... @@ -232,7 +232,7 @@ A.java: # 87| -1: [VarAccess] s # 87| 1: [IntegerLiteral] 3 # 87| -1: [StringLiteral] "It's 3 letters long" -#-----| 0: (Single Local Variable Declaration) +#-----| 0: (Pattern case declaration) # 87| 0: [TypeAccess] String # 87| 1: [LocalVariableDeclExpr] s # 88| 2: [PatternCase] case @@ -241,7 +241,7 @@ A.java: # 88| -1: [VarAccess] s # 88| 1: [IntegerLiteral] 5 # 88| -1: [StringLiteral] "it's 5 letters long" -#-----| 0: (Single Local Variable Declaration) +#-----| 0: (Pattern case declaration) # 88| 0: [TypeAccess] String # 88| 1: [LocalVariableDeclExpr] s # 89| 3: [DefaultCase] default @@ -252,7 +252,7 @@ A.java: # 91| -1: [VarAccess] thing # 92| 0: [PatternCase] case # 92| -1: [StringLiteral] "It's a string" -#-----| 0: (Single Local Variable Declaration) +#-----| 0: (Pattern case declaration) # 92| 0: [TypeAccess] String # 92| 1: [LocalVariableDeclExpr] s # 93| 1: [NullDefaultCase] case null, default @@ -332,3 +332,486 @@ A.java: # 130| 2: [FieldDeclaration] String field; # 131| 3: [Class] Middle # 131| 2: [FieldDeclaration] Inner inner; +AnonDecls.java: +# 0| [CompilationUnit] AnonDecls +#-----| -1: (Imports) +# 1| 1: [ImportType] import Closeable +# 2| 2: [ImportType] import List +# 3| 3: [ImportType] import BiFunction +# 5| 1: [Class] SubRecord +# 5| 2: [FieldDeclaration] int z; +# 6| 2: [Class] MyRecord +# 6| 2: [FieldDeclaration] int x; +# 6| 3: [FieldDeclaration] SubRecord y; +# 8| 3: [Class] AnonDecls +# 10| 2: [Method] test +# 10| 3: [TypeAccess] void +#-----| 4: (Parameters) +# 10| 0: [Parameter] ss +# 10| 0: [TypeAccess] List +# 10| 0: [TypeAccess] String +# 10| 1: [Parameter] o +# 10| 0: [TypeAccess] Object +# 10| 5: [BlockStmt] { ... } +# 14| 0: [LocalVariableDeclStmt] var ...; +# 14| 0: [TypeAccess] int +# 14| 1: [LocalVariableDeclExpr] +# 14| 0: [IntegerLiteral] 1 +# 15| 1: [LocalVariableDeclStmt] var ...; +# 15| 0: [TypeAccess] int +# 15| 1: [LocalVariableDeclExpr] +# 15| 0: [IntegerLiteral] 2 +# 17| 2: [TryStmt] try ... +# 17| -3: [LocalVariableDeclStmt] var ...; +# 17| 0: [TypeAccess] Closeable +# 17| 1: [LocalVariableDeclExpr] +# 17| 0: [NullLiteral] null +# 17| -1: [BlockStmt] { ... } +# 17| 0: [CatchClause] catch (...) +#-----| 0: (Single Local Variable Declaration) +# 17| 0: [TypeAccess] Exception +# 17| 1: [LocalVariableDeclExpr] +# 17| 1: [BlockStmt] { ... } +# 18| 3: [TryStmt] try ... +# 18| -3: [LocalVariableDeclStmt] var ...; +# 18| 0: [TypeAccess] Closeable +# 18| 1: [LocalVariableDeclExpr] +# 18| 0: [NullLiteral] null +# 18| -1: [BlockStmt] { ... } +# 18| 0: [CatchClause] catch (...) +#-----| 0: (Single Local Variable Declaration) +# 18| 0: [TypeAccess] Exception +# 18| 1: [LocalVariableDeclExpr] +# 18| 1: [BlockStmt] { ... } +# 20| 4: [LocalVariableDeclStmt] var ...; +# 20| 0: [TypeAccess] int +# 20| 1: [LocalVariableDeclExpr] x +# 20| 0: [IntegerLiteral] 0 +# 22| 5: [ForStmt] for (...;...;...) +#-----| 0: (For Initializers) +# 22| 0: [TypeAccess] int +# 22| 1: [LocalVariableDeclExpr] +# 22| 0: [IntegerLiteral] 1 +# 22| 1: [LTExpr] ... < ... +# 22| 0: [VarAccess] x +# 22| 1: [IntegerLiteral] 10 +# 22| 2: [BlockStmt] { ... } +# 22| 3: [PostIncExpr] ...++ +# 22| 0: [VarAccess] x +# 23| 6: [ForStmt] for (...;...;...) +#-----| 0: (For Initializers) +# 23| 0: [TypeAccess] int +# 23| 1: [LocalVariableDeclExpr] +# 23| 0: [IntegerLiteral] 2 +# 23| 1: [GTExpr] ... > ... +# 23| 0: [VarAccess] x +# 23| 1: [IntegerLiteral] 0 +# 23| 2: [BlockStmt] { ... } +# 23| 3: [PostDecExpr] ...-- +# 23| 0: [VarAccess] x +# 25| 7: [EnhancedForStmt] for (... : ...) +#-----| 0: (Single Local Variable Declaration) +# 25| 1: [LocalVariableDeclExpr] +# 25| 1: [VarAccess] ss +# 25| 2: [BlockStmt] { ... } +# 26| 8: [EnhancedForStmt] for (... : ...) +#-----| 0: (Single Local Variable Declaration) +# 26| 1: [LocalVariableDeclExpr] +# 26| 1: [VarAccess] ss +# 26| 2: [BlockStmt] { ... } +# 28| 9: [LocalVariableDeclStmt] var ...; +# 28| 0: [TypeAccess] BiFunction +# 28| 0: [TypeAccess] Integer +# 28| 1: [TypeAccess] Integer +# 28| 2: [TypeAccess] Integer +# 28| 1: [LocalVariableDeclExpr] f1 +# 28| 0: [LambdaExpr] ...->... +# 28| -4: [AnonymousClass] new BiFunction(...) { ... } +# 28| 2: [Method] apply +#-----| 4: (Parameters) +# 28| 0: [Parameter] +# 28| 1: [Parameter] +# 28| 5: [BlockStmt] { ... } +# 28| 0: [ReturnStmt] return ... +# 28| 0: [IntegerLiteral] 1 +# 28| -3: [TypeAccess] BiFunction +# 28| 0: [TypeAccess] Integer +# 28| 1: [TypeAccess] Integer +# 28| 2: [TypeAccess] Integer +# 29| 10: [LocalVariableDeclStmt] var ...; +# 29| 0: [TypeAccess] BiFunction +# 29| 0: [TypeAccess] Integer +# 29| 1: [TypeAccess] Integer +# 29| 2: [TypeAccess] Integer +# 29| 1: [LocalVariableDeclExpr] f2 +# 29| 0: [LambdaExpr] ...->... +# 29| -4: [AnonymousClass] new BiFunction(...) { ... } +# 29| 2: [Method] apply +#-----| 4: (Parameters) +# 29| 0: [Parameter] +# 29| 1: [Parameter] +# 29| 5: [BlockStmt] { ... } +# 29| 0: [ReturnStmt] return ... +# 29| 0: [IntegerLiteral] 2 +# 29| -3: [TypeAccess] BiFunction +# 29| 0: [TypeAccess] Integer +# 29| 1: [TypeAccess] Integer +# 29| 2: [TypeAccess] Integer +# 31| 11: [SwitchStmt] switch (...) +# 31| -1: [VarAccess] o +# 32| 0: [PatternCase] case +#-----| 0: (Pattern case declaration) +# 32| 0: [TypeAccess] SubRecord +# 32| 1: [LocalVariableDeclExpr] +# 33| 1: [PatternCase] case +#-----| 0: (Pattern case declaration) +# 33| 0: [TypeAccess] MyRecord +# 33| 1: [LocalVariableDeclExpr] +# 34| 2: [DefaultCase] default +# 37| 12: [SwitchStmt] switch (...) +# 37| -1: [VarAccess] o +# 38| 0: [PatternCase] case +#-----| 0: (Pattern case declaration) +# 38| 0: [TypeAccess] SubRecord +# 38| 1: [LocalVariableDeclExpr] +# 39| 1: [PatternCase] case +# 39| 0: [RecordPatternExpr] MyRecord(...) +# 39| -2: [TypeAccess] SubRecord +# 39| -1: [TypeAccess] int +# 39| 0: [LocalVariableDeclExpr] +# 39| 1: [LocalVariableDeclExpr] +# 40| 2: [DefaultCase] default +# 43| 13: [SwitchStmt] switch (...) +# 43| -1: [VarAccess] o +# 44| 0: [PatternCase] case +#-----| 0: (Pattern case declaration) +# 44| 0: [TypeAccess] SubRecord +# 44| 1: [LocalVariableDeclExpr] +# 45| 1: [PatternCase] case +# 45| 0: [RecordPatternExpr] MyRecord(...) +# 45| -1: [TypeAccess] int +# 45| 0: [LocalVariableDeclExpr] +# 45| 1: [RecordPatternExpr] SubRecord(...) +# 45| -1: [TypeAccess] int +# 45| 0: [LocalVariableDeclExpr] +# 46| 2: [DefaultCase] default +# 49| 14: [SwitchStmt] switch (...) +# 49| -1: [VarAccess] o +# 50| 0: [PatternCase] case +#-----| 0: (Pattern case declaration) +# 50| 0: [TypeAccess] SubRecord +# 50| 1: [LocalVariableDeclExpr] +# 51| 1: [PatternCase] case +# 51| 0: [RecordPatternExpr] MyRecord(...) +# 51| 0: [LocalVariableDeclExpr] +# 51| 1: [LocalVariableDeclExpr] +# 52| 2: [DefaultCase] default +# 55| 15: [SwitchStmt] switch (...) +# 55| -1: [VarAccess] o +# 56| 0: [PatternCase] case +# 56| 0: [RecordPatternExpr] MyRecord(...) +# 56| 0: [LocalVariableDeclExpr] +# 56| 1: [LocalVariableDeclExpr] +# 56| 1: [RecordPatternExpr] SubRecord(...) +# 56| 0: [LocalVariableDeclExpr] +# 57| 1: [DefaultCase] default +# 60| 16: [SwitchStmt] switch (...) +# 60| -1: [VarAccess] o +# 61| 0: [PatternCase] case +# 61| -3: [NEExpr] ... != ... +# 61| 0: [VarAccess] ss +# 61| 1: [NullLiteral] null +# 61| 0: [RecordPatternExpr] MyRecord(...) +# 61| 0: [LocalVariableDeclExpr] +# 61| 1: [LocalVariableDeclExpr] +# 61| 1: [RecordPatternExpr] SubRecord(...) +# 61| 0: [LocalVariableDeclExpr] +# 62| 1: [DefaultCase] default +# 65| 17: [SwitchStmt] switch (...) +# 65| -1: [VarAccess] o +# 67| 0: [PatternCase] case +#-----| 0: (Pattern case declaration) +# 67| 0: [TypeAccess] MyRecord +# 67| 1: [LocalVariableDeclExpr] +#-----| 1: (Pattern case declaration) +# 67| 0: [TypeAccess] SubRecord +# 67| 1: [LocalVariableDeclExpr] +# 68| 1: [DefaultCase] default +# 71| 18: [SwitchStmt] switch (...) +# 71| -1: [VarAccess] o +# 72| 0: [PatternCase] case +# 72| -1: [BlockStmt] { ... } +#-----| 0: (Pattern case declaration) +# 72| 0: [TypeAccess] SubRecord +# 72| 1: [LocalVariableDeclExpr] +# 73| 1: [PatternCase] case +# 73| -1: [BlockStmt] { ... } +#-----| 0: (Pattern case declaration) +# 73| 0: [TypeAccess] MyRecord +# 73| 1: [LocalVariableDeclExpr] +# 74| 2: [DefaultCase] default +# 74| -1: [BlockStmt] { ... } +# 77| 19: [SwitchStmt] switch (...) +# 77| -1: [VarAccess] o +# 78| 0: [PatternCase] case +# 78| -1: [BlockStmt] { ... } +#-----| 0: (Pattern case declaration) +# 78| 0: [TypeAccess] SubRecord +# 78| 1: [LocalVariableDeclExpr] +# 79| 1: [PatternCase] case +# 79| -1: [BlockStmt] { ... } +# 79| 0: [RecordPatternExpr] MyRecord(...) +# 79| -2: [TypeAccess] SubRecord +# 79| -1: [TypeAccess] int +# 79| 0: [LocalVariableDeclExpr] +# 79| 1: [LocalVariableDeclExpr] +# 80| 2: [DefaultCase] default +# 80| -1: [BlockStmt] { ... } +# 83| 20: [SwitchStmt] switch (...) +# 83| -1: [VarAccess] o +# 84| 0: [PatternCase] case +# 84| -1: [BlockStmt] { ... } +#-----| 0: (Pattern case declaration) +# 84| 0: [TypeAccess] SubRecord +# 84| 1: [LocalVariableDeclExpr] +# 85| 1: [PatternCase] case +# 85| -1: [BlockStmt] { ... } +# 85| 0: [RecordPatternExpr] MyRecord(...) +# 85| -1: [TypeAccess] int +# 85| 0: [LocalVariableDeclExpr] +# 85| 1: [RecordPatternExpr] SubRecord(...) +# 85| -1: [TypeAccess] int +# 85| 0: [LocalVariableDeclExpr] +# 86| 2: [DefaultCase] default +# 86| -1: [BlockStmt] { ... } +# 89| 21: [SwitchStmt] switch (...) +# 89| -1: [VarAccess] o +# 90| 0: [PatternCase] case +# 90| -1: [BlockStmt] { ... } +#-----| 0: (Pattern case declaration) +# 90| 0: [TypeAccess] SubRecord +# 90| 1: [LocalVariableDeclExpr] +# 91| 1: [PatternCase] case +# 91| -1: [BlockStmt] { ... } +# 91| 0: [RecordPatternExpr] MyRecord(...) +# 91| 0: [LocalVariableDeclExpr] +# 91| 1: [LocalVariableDeclExpr] +# 92| 2: [DefaultCase] default +# 92| -1: [BlockStmt] { ... } +# 95| 22: [SwitchStmt] switch (...) +# 95| -1: [VarAccess] o +# 96| 0: [PatternCase] case +# 96| -1: [BlockStmt] { ... } +# 96| 0: [RecordPatternExpr] MyRecord(...) +# 96| 0: [LocalVariableDeclExpr] +# 96| 1: [LocalVariableDeclExpr] +# 96| 1: [RecordPatternExpr] SubRecord(...) +# 96| 0: [LocalVariableDeclExpr] +# 97| 1: [DefaultCase] default +# 97| -1: [BlockStmt] { ... } +# 100| 23: [SwitchStmt] switch (...) +# 100| -1: [VarAccess] o +# 101| 0: [PatternCase] case +# 101| -3: [NEExpr] ... != ... +# 101| 0: [VarAccess] ss +# 101| 1: [NullLiteral] null +# 101| -1: [BlockStmt] { ... } +# 101| 0: [RecordPatternExpr] MyRecord(...) +# 101| 0: [LocalVariableDeclExpr] +# 101| 1: [LocalVariableDeclExpr] +# 101| 1: [RecordPatternExpr] SubRecord(...) +# 101| 0: [LocalVariableDeclExpr] +# 102| 1: [DefaultCase] default +# 102| -1: [BlockStmt] { ... } +# 105| 24: [LocalVariableDeclStmt] var ...; +# 105| 1: [LocalVariableDeclExpr] x1 +# 105| 0: [SwitchExpr] switch (...) +# 105| -1: [VarAccess] o +# 106| 0: [PatternCase] case +#-----| 0: (Pattern case declaration) +# 106| 0: [TypeAccess] SubRecord +# 106| 1: [LocalVariableDeclExpr] +# 107| 1: [PatternCase] case +#-----| 0: (Pattern case declaration) +# 107| 0: [TypeAccess] MyRecord +# 107| 1: [LocalVariableDeclExpr] +# 108| 2: [DefaultCase] default +# 109| 3: [YieldStmt] yield ... +# 109| 0: [IntegerLiteral] 1 +# 112| 25: [LocalVariableDeclStmt] var ...; +# 112| 1: [LocalVariableDeclExpr] x2 +# 112| 0: [SwitchExpr] switch (...) +# 112| -1: [VarAccess] o +# 113| 0: [PatternCase] case +#-----| 0: (Pattern case declaration) +# 113| 0: [TypeAccess] SubRecord +# 113| 1: [LocalVariableDeclExpr] +# 114| 1: [PatternCase] case +# 114| 0: [RecordPatternExpr] MyRecord(...) +# 114| -2: [TypeAccess] SubRecord +# 114| -1: [TypeAccess] int +# 114| 0: [LocalVariableDeclExpr] +# 114| 1: [LocalVariableDeclExpr] +# 115| 2: [DefaultCase] default +# 116| 3: [YieldStmt] yield ... +# 116| 0: [IntegerLiteral] 1 +# 119| 26: [LocalVariableDeclStmt] var ...; +# 119| 1: [LocalVariableDeclExpr] x3 +# 119| 0: [SwitchExpr] switch (...) +# 119| -1: [VarAccess] o +# 120| 0: [PatternCase] case +#-----| 0: (Pattern case declaration) +# 120| 0: [TypeAccess] SubRecord +# 120| 1: [LocalVariableDeclExpr] +# 121| 1: [PatternCase] case +# 121| 0: [RecordPatternExpr] MyRecord(...) +# 121| -1: [TypeAccess] int +# 121| 0: [LocalVariableDeclExpr] +# 121| 1: [RecordPatternExpr] SubRecord(...) +# 121| -1: [TypeAccess] int +# 121| 0: [LocalVariableDeclExpr] +# 122| 2: [DefaultCase] default +# 123| 3: [YieldStmt] yield ... +# 123| 0: [IntegerLiteral] 1 +# 126| 27: [LocalVariableDeclStmt] var ...; +# 126| 1: [LocalVariableDeclExpr] x4 +# 126| 0: [SwitchExpr] switch (...) +# 126| -1: [VarAccess] o +# 127| 0: [PatternCase] case +#-----| 0: (Pattern case declaration) +# 127| 0: [TypeAccess] SubRecord +# 127| 1: [LocalVariableDeclExpr] +# 128| 1: [PatternCase] case +# 128| 0: [RecordPatternExpr] MyRecord(...) +# 128| 0: [LocalVariableDeclExpr] +# 128| 1: [LocalVariableDeclExpr] +# 129| 2: [DefaultCase] default +# 130| 3: [YieldStmt] yield ... +# 130| 0: [IntegerLiteral] 1 +# 133| 28: [LocalVariableDeclStmt] var ...; +# 133| 1: [LocalVariableDeclExpr] x5 +# 133| 0: [SwitchExpr] switch (...) +# 133| -1: [VarAccess] o +# 134| 0: [PatternCase] case +# 134| 0: [RecordPatternExpr] MyRecord(...) +# 134| 0: [LocalVariableDeclExpr] +# 134| 1: [LocalVariableDeclExpr] +# 134| 1: [RecordPatternExpr] SubRecord(...) +# 134| 0: [LocalVariableDeclExpr] +# 135| 1: [DefaultCase] default +# 136| 2: [YieldStmt] yield ... +# 136| 0: [IntegerLiteral] 1 +# 139| 29: [LocalVariableDeclStmt] var ...; +# 139| 1: [LocalVariableDeclExpr] x6 +# 139| 0: [SwitchExpr] switch (...) +# 139| -1: [VarAccess] o +# 140| 0: [PatternCase] case +# 140| -3: [NEExpr] ... != ... +# 140| 0: [VarAccess] ss +# 140| 1: [NullLiteral] null +# 140| 0: [RecordPatternExpr] MyRecord(...) +# 140| 0: [LocalVariableDeclExpr] +# 140| 1: [LocalVariableDeclExpr] +# 140| 1: [RecordPatternExpr] SubRecord(...) +# 140| 0: [LocalVariableDeclExpr] +# 141| 1: [DefaultCase] default +# 142| 2: [YieldStmt] yield ... +# 142| 0: [IntegerLiteral] 1 +# 145| 30: [LocalVariableDeclStmt] var ...; +# 145| 1: [LocalVariableDeclExpr] x7 +# 145| 0: [SwitchExpr] switch (...) +# 145| -1: [VarAccess] o +# 146| 0: [PatternCase] case +# 146| -1: [IntegerLiteral] 1 +#-----| 0: (Pattern case declaration) +# 146| 0: [TypeAccess] SubRecord +# 146| 1: [LocalVariableDeclExpr] +# 147| 1: [PatternCase] case +# 147| -1: [IntegerLiteral] 2 +#-----| 0: (Pattern case declaration) +# 147| 0: [TypeAccess] MyRecord +# 147| 1: [LocalVariableDeclExpr] +# 148| 2: [DefaultCase] default +# 148| -1: [IntegerLiteral] 3 +# 151| 31: [LocalVariableDeclStmt] var ...; +# 151| 1: [LocalVariableDeclExpr] x8 +# 151| 0: [SwitchExpr] switch (...) +# 151| -1: [VarAccess] o +# 152| 0: [PatternCase] case +# 152| -1: [IntegerLiteral] 1 +#-----| 0: (Pattern case declaration) +# 152| 0: [TypeAccess] SubRecord +# 152| 1: [LocalVariableDeclExpr] +# 153| 1: [PatternCase] case +# 153| -1: [IntegerLiteral] 2 +# 153| 0: [RecordPatternExpr] MyRecord(...) +# 153| -2: [TypeAccess] SubRecord +# 153| -1: [TypeAccess] int +# 153| 0: [LocalVariableDeclExpr] +# 153| 1: [LocalVariableDeclExpr] +# 154| 2: [DefaultCase] default +# 154| -1: [IntegerLiteral] 3 +# 157| 32: [LocalVariableDeclStmt] var ...; +# 157| 1: [LocalVariableDeclExpr] x9 +# 157| 0: [SwitchExpr] switch (...) +# 157| -1: [VarAccess] o +# 158| 0: [PatternCase] case +# 158| -1: [IntegerLiteral] 1 +#-----| 0: (Pattern case declaration) +# 158| 0: [TypeAccess] SubRecord +# 158| 1: [LocalVariableDeclExpr] +# 159| 1: [PatternCase] case +# 159| -1: [IntegerLiteral] 2 +# 159| 0: [RecordPatternExpr] MyRecord(...) +# 159| -1: [TypeAccess] int +# 159| 0: [LocalVariableDeclExpr] +# 159| 1: [RecordPatternExpr] SubRecord(...) +# 159| -1: [TypeAccess] int +# 159| 0: [LocalVariableDeclExpr] +# 160| 2: [DefaultCase] default +# 160| -1: [IntegerLiteral] 3 +# 163| 33: [LocalVariableDeclStmt] var ...; +# 163| 1: [LocalVariableDeclExpr] x10 +# 163| 0: [SwitchExpr] switch (...) +# 163| -1: [VarAccess] o +# 164| 0: [PatternCase] case +# 164| -1: [IntegerLiteral] 1 +#-----| 0: (Pattern case declaration) +# 164| 0: [TypeAccess] SubRecord +# 164| 1: [LocalVariableDeclExpr] +# 165| 1: [PatternCase] case +# 165| -1: [IntegerLiteral] 2 +# 165| 0: [RecordPatternExpr] MyRecord(...) +# 165| 0: [LocalVariableDeclExpr] +# 165| 1: [LocalVariableDeclExpr] +# 166| 2: [DefaultCase] default +# 166| -1: [IntegerLiteral] 3 +# 169| 34: [LocalVariableDeclStmt] var ...; +# 169| 1: [LocalVariableDeclExpr] x11 +# 169| 0: [SwitchExpr] switch (...) +# 169| -1: [VarAccess] o +# 170| 0: [PatternCase] case +# 170| -1: [IntegerLiteral] 1 +# 170| 0: [RecordPatternExpr] MyRecord(...) +# 170| 0: [LocalVariableDeclExpr] +# 170| 1: [LocalVariableDeclExpr] +# 170| 1: [RecordPatternExpr] SubRecord(...) +# 170| 0: [LocalVariableDeclExpr] +# 171| 1: [DefaultCase] default +# 171| -1: [IntegerLiteral] 2 +# 174| 35: [LocalVariableDeclStmt] var ...; +# 174| 1: [LocalVariableDeclExpr] x12 +# 174| 0: [SwitchExpr] switch (...) +# 174| -1: [VarAccess] o +# 175| 0: [PatternCase] case +# 175| -3: [NEExpr] ... != ... +# 175| 0: [VarAccess] ss +# 175| 1: [NullLiteral] null +# 175| -1: [IntegerLiteral] 1 +# 175| 0: [RecordPatternExpr] MyRecord(...) +# 175| 0: [LocalVariableDeclExpr] +# 175| 1: [LocalVariableDeclExpr] +# 175| 1: [RecordPatternExpr] SubRecord(...) +# 175| 0: [LocalVariableDeclExpr] +# 176| 1: [DefaultCase] default +# 176| -1: [IntegerLiteral] 2 diff --git a/java/ql/test/library-tests/printAst/options b/java/ql/test/library-tests/printAst/options index a0d1b7e7002..5011824a5d7 100644 --- a/java/ql/test/library-tests/printAst/options +++ b/java/ql/test/library-tests/printAst/options @@ -1 +1 @@ -//semmle-extractor-options: --javac-args --release 21 +//semmle-extractor-options: --javac-args --release 22 diff --git a/java/ql/test/library-tests/switch-default-impossible-dispatch/Test.java b/java/ql/test/library-tests/switch-default-impossible-dispatch/Test.java index cf6e67e5847..9e0a0443131 100644 --- a/java/ql/test/library-tests/switch-default-impossible-dispatch/Test.java +++ b/java/ql/test/library-tests/switch-default-impossible-dispatch/Test.java @@ -58,6 +58,31 @@ public class Test { case null: default: i.take(source()); // Can't call C1.take (but we don't currently notice) } + switch(i) { + case C1 _, C2 _: + i.take(source()); // Must be either C1.take or C2.take (but we don't currently notice, because neither dominates) + break; + default: + i.take(source()); // Can't call C1.take or C2.take (but we don't currently notice, because a multi-pattern case isn't understood as a type test) + } + + switch(i) { + case C1 _, C2 _ when i.toString().equals("abc"): + i.take(source()); // Must be either C1.take or C2.take (but we don't currently notice, because neither dominates) + break; + default: + i.take(source()); // Can't call C1.take or C2.take (but we don't currently notice, because a multi-pattern case isn't understood as a type test) + } + + switch(i) { + case C1 _: + case C2 _: + i.take(source()); // Must be either C1.take or C2.take (but we don't currently notice, because neither dominates) + break; + default: + i.take(source()); // Can't call C1.take or C2.take + } + } } diff --git a/java/ql/test/library-tests/switch-default-impossible-dispatch/options b/java/ql/test/library-tests/switch-default-impossible-dispatch/options index a0d1b7e7002..5011824a5d7 100644 --- a/java/ql/test/library-tests/switch-default-impossible-dispatch/options +++ b/java/ql/test/library-tests/switch-default-impossible-dispatch/options @@ -1 +1 @@ -//semmle-extractor-options: --javac-args --release 21 +//semmle-extractor-options: --javac-args --release 22 diff --git a/java/ql/test/library-tests/switch-default-impossible-dispatch/test.expected b/java/ql/test/library-tests/switch-default-impossible-dispatch/test.expected index 17d478d4298..14329ea1089 100644 --- a/java/ql/test/library-tests/switch-default-impossible-dispatch/test.expected +++ b/java/ql/test/library-tests/switch-default-impossible-dispatch/test.expected @@ -30,3 +30,25 @@ | Test.java:58:34:58:41 | source(...) | Test.java:8:65:8:65 | x | | Test.java:58:34:58:41 | source(...) | Test.java:9:74:9:74 | x | | Test.java:58:34:58:41 | source(...) | Test.java:10:82:10:82 | x | +| Test.java:63:16:63:23 | source(...) | Test.java:7:65:7:65 | x | +| Test.java:63:16:63:23 | source(...) | Test.java:8:65:8:65 | x | +| Test.java:63:16:63:23 | source(...) | Test.java:9:74:9:74 | x | +| Test.java:63:16:63:23 | source(...) | Test.java:10:82:10:82 | x | +| Test.java:66:16:66:23 | source(...) | Test.java:7:65:7:65 | x | +| Test.java:66:16:66:23 | source(...) | Test.java:8:65:8:65 | x | +| Test.java:66:16:66:23 | source(...) | Test.java:9:74:9:74 | x | +| Test.java:66:16:66:23 | source(...) | Test.java:10:82:10:82 | x | +| Test.java:71:16:71:23 | source(...) | Test.java:7:65:7:65 | x | +| Test.java:71:16:71:23 | source(...) | Test.java:8:65:8:65 | x | +| Test.java:71:16:71:23 | source(...) | Test.java:9:74:9:74 | x | +| Test.java:71:16:71:23 | source(...) | Test.java:10:82:10:82 | x | +| Test.java:74:16:74:23 | source(...) | Test.java:7:65:7:65 | x | +| Test.java:74:16:74:23 | source(...) | Test.java:8:65:8:65 | x | +| Test.java:74:16:74:23 | source(...) | Test.java:9:74:9:74 | x | +| Test.java:74:16:74:23 | source(...) | Test.java:10:82:10:82 | x | +| Test.java:80:16:80:23 | source(...) | Test.java:7:65:7:65 | x | +| Test.java:80:16:80:23 | source(...) | Test.java:8:65:8:65 | x | +| Test.java:80:16:80:23 | source(...) | Test.java:9:74:9:74 | x | +| Test.java:80:16:80:23 | source(...) | Test.java:10:82:10:82 | x | +| Test.java:83:16:83:23 | source(...) | Test.java:9:74:9:74 | x | +| Test.java:83:16:83:23 | source(...) | Test.java:10:82:10:82 | x | diff --git a/java/ql/test/query-tests/Likely Bugs/Statements/MissingEnumInSwitch/MissingEnumInSwitch.expected b/java/ql/test/query-tests/Likely Bugs/Statements/MissingEnumInSwitch/MissingEnumInSwitch.expected new file mode 100644 index 00000000000..deea6bde730 --- /dev/null +++ b/java/ql/test/query-tests/Likely Bugs/Statements/MissingEnumInSwitch/MissingEnumInSwitch.expected @@ -0,0 +1,10 @@ +| Test.java:8:5:8:13 | switch (...) | Switch statement does not have a case for $@, $@, $@, or 22 more. | Test.java:4:27:4:27 | B | B | Test.java:4:25:4:25 | C | C | Test.java:4:45:4:45 | D | D | +| Test.java:11:5:11:13 | switch (...) | Switch statement does not have a case for $@, $@, $@, or 21 more. | Test.java:4:25:4:25 | C | C | Test.java:4:45:4:45 | D | D | Test.java:4:15:4:15 | E | E | +| Test.java:15:5:15:13 | switch (...) | Switch statement does not have a case for $@, $@, $@, or 20 more. | Test.java:4:45:4:45 | D | D | Test.java:4:15:4:15 | E | E | Test.java:4:43:4:43 | F | F | +| Test.java:20:5:20:13 | switch (...) | Switch statement does not have a case for $@, $@, $@, or 19 more. | Test.java:4:15:4:15 | E | E | Test.java:4:43:4:43 | F | F | Test.java:4:49:4:49 | G | G | +| Test.java:26:5:26:13 | switch (...) | Switch statement does not have a case for $@, $@, $@, or 18 more. | Test.java:4:43:4:43 | F | F | Test.java:4:49:4:49 | G | G | Test.java:4:35:4:35 | H | H | +| Test.java:33:5:33:13 | switch (...) | Switch statement does not have a case for $@, $@, $@, or 2 more. | Test.java:4:21:4:21 | V | V | Test.java:4:13:4:13 | W | W | Test.java:4:23:4:23 | X | X | +| Test.java:56:5:56:13 | switch (...) | Switch statement does not have a case for $@, $@, $@, or 1 more. | Test.java:4:13:4:13 | W | W | Test.java:4:23:4:23 | X | X | Test.java:4:11:4:11 | Y | Y | +| Test.java:80:5:80:13 | switch (...) | Switch statement does not have a case for $@, $@, or $@. | Test.java:4:23:4:23 | X | X | Test.java:4:11:4:11 | Y | Y | Test.java:4:33:4:33 | Z | Z | +| Test.java:105:5:105:13 | switch (...) | Switch statement does not have a case for $@ or $@. | Test.java:4:11:4:11 | Y | Y | Test.java:4:33:4:33 | Z | Z | Test.java:4:11:4:11 | Y | Y | +| Test.java:131:5:131:13 | switch (...) | Switch statement does not have a case for $@. | Test.java:4:33:4:33 | Z | Z | Test.java:4:33:4:33 | Z | Z | Test.java:4:33:4:33 | Z | Z | diff --git a/java/ql/test/query-tests/Likely Bugs/Statements/MissingEnumInSwitch/MissingEnumInSwitch.qlref b/java/ql/test/query-tests/Likely Bugs/Statements/MissingEnumInSwitch/MissingEnumInSwitch.qlref new file mode 100644 index 00000000000..10f1b3e8be2 --- /dev/null +++ b/java/ql/test/query-tests/Likely Bugs/Statements/MissingEnumInSwitch/MissingEnumInSwitch.qlref @@ -0,0 +1 @@ +Likely Bugs/Statements/MissingEnumInSwitch.ql diff --git a/java/ql/test/query-tests/Likely Bugs/Statements/MissingEnumInSwitch/Test.java b/java/ql/test/query-tests/Likely Bugs/Statements/MissingEnumInSwitch/Test.java new file mode 100644 index 00000000000..2f39918ead4 --- /dev/null +++ b/java/ql/test/query-tests/Likely Bugs/Statements/MissingEnumInSwitch/Test.java @@ -0,0 +1,187 @@ +public class Test { + private enum MyEnum { + // A..Z in random order + N,R,S,Y,W,E,K,I,V,X,C,B,O,J,Z,H,T,P,A,F,D,M,G,U,L,Q + } + + public void use(MyEnum e) { + switch(e) { + case A: break; + } + switch(e) { + case A: break; + case B: break; + } + switch(e) { + case A: break; + case B: break; + case C: break; + } + switch(e) { + case A: break; + case B: break; + case C: break; + case D: break; + } + switch(e) { + case A: break; + case B: break; + case C: break; + case D: break; + case E: break; + } + switch(e) { + case A: break; + case B: break; + case C: break; + case D: break; + case E: break; + case F: break; + case G: break; + case H: break; + case I: break; + case J: break; + case K: break; + case L: break; + case M: break; + case N: break; + case O: break; + case P: break; + case Q: break; + case R: break; + case S: break; + case T: break; + case U: break; + } + switch(e) { + case A: break; + case B: break; + case C: break; + case D: break; + case E: break; + case F: break; + case G: break; + case H: break; + case I: break; + case J: break; + case K: break; + case L: break; + case M: break; + case N: break; + case O: break; + case P: break; + case Q: break; + case R: break; + case S: break; + case T: break; + case U: break; + case V: break; + } + switch(e) { + case A: break; + case B: break; + case C: break; + case D: break; + case E: break; + case F: break; + case G: break; + case H: break; + case I: break; + case J: break; + case K: break; + case L: break; + case M: break; + case N: break; + case O: break; + case P: break; + case Q: break; + case R: break; + case S: break; + case T: break; + case U: break; + case V: break; + case W: break; + } + switch(e) { + case A: break; + case B: break; + case C: break; + case D: break; + case E: break; + case F: break; + case G: break; + case H: break; + case I: break; + case J: break; + case K: break; + case L: break; + case M: break; + case N: break; + case O: break; + case P: break; + case Q: break; + case R: break; + case S: break; + case T: break; + case U: break; + case V: break; + case W: break; + case X: break; + } + switch(e) { + case A: break; + case B: break; + case C: break; + case D: break; + case E: break; + case F: break; + case G: break; + case H: break; + case I: break; + case J: break; + case K: break; + case L: break; + case M: break; + case N: break; + case O: break; + case P: break; + case Q: break; + case R: break; + case S: break; + case T: break; + case U: break; + case V: break; + case W: break; + case X: break; + case Y: break; + } + switch(e) { + case A: break; + case B: break; + case C: break; + case D: break; + case E: break; + case F: break; + case G: break; + case H: break; + case I: break; + case J: break; + case K: break; + case L: break; + case M: break; + case N: break; + case O: break; + case P: break; + case Q: break; + case R: break; + case S: break; + case T: break; + case U: break; + case V: break; + case W: break; + case X: break; + case Y: break; + case Z: break; + } + } +} diff --git a/java/ql/test/query-tests/Metrics/GeneratedVsManualCoverage/TopJdkApisTest/TopJdkApisTest.expected b/java/ql/test/query-tests/Metrics/GeneratedVsManualCoverage/TopJdkApisTest/TopJdkApisTest.expected index 64748f77765..d5176a7a4de 100644 --- a/java/ql/test/query-tests/Metrics/GeneratedVsManualCoverage/TopJdkApisTest/TopJdkApisTest.expected +++ b/java/ql/test/query-tests/Metrics/GeneratedVsManualCoverage/TopJdkApisTest/TopJdkApisTest.expected @@ -14,10 +14,10 @@ | java.time.chrono | 0 | 0 | 0 | 1 | 1 | 0.0 | 0.0 | 0.0 | NaN | NaN | 1.0 | | java.time.format | 0 | 0 | 0 | 2 | 2 | 0.0 | 0.0 | 0.0 | NaN | NaN | 1.0 | | java.util | 0 | 0 | 86 | 64 | 150 | 0.5733333333333334 | 0.0 | 0.5733333333333334 | 0.0 | NaN | 0.4266666666666667 | -| java.util.concurrent | 0 | 0 | 9 | 9 | 18 | 0.5 | 0.0 | 0.5 | 0.0 | NaN | 0.5 | +| java.util.concurrent | 1 | 0 | 9 | 8 | 18 | 0.5555555555555556 | 0.05555555555555555 | 0.5 | 0.0 | 0.0 | 0.4444444444444444 | | java.util.concurrent.atomic | 0 | 0 | 2 | 11 | 13 | 0.15384615384615385 | 0.0 | 0.15384615384615385 | 0.0 | NaN | 0.8461538461538461 | | java.util.concurrent.locks | 0 | 0 | 0 | 2 | 2 | 0.0 | 0.0 | 0.0 | NaN | NaN | 1.0 | | java.util.function | 0 | 0 | 0 | 1 | 1 | 0.0 | 0.0 | 0.0 | NaN | NaN | 1.0 | | java.util.logging | 0 | 0 | 1 | 1 | 2 | 0.5 | 0.0 | 0.5 | 0.0 | NaN | 0.5 | | java.util.regex | 0 | 0 | 3 | 1 | 4 | 0.75 | 0.0 | 0.75 | 0.0 | NaN | 0.25 | -| java.util.stream | 0 | 0 | 18 | 8 | 26 | 0.6923076923076923 | 0.0 | 0.6923076923076923 | 0.0 | NaN | 0.3076923076923077 | +| java.util.stream | 1 | 0 | 18 | 7 | 26 | 0.7307692307692307 | 0.038461538461538464 | 0.6923076923076923 | 0.0 | 0.0 | 0.2692307692307692 | diff --git a/java/ql/test/query-tests/security/CWE-090/LdapInjection.expected b/java/ql/test/query-tests/security/CWE-090/LdapInjection.expected index 69c97ca8487..caf00094074 100644 --- a/java/ql/test/query-tests/security/CWE-090/LdapInjection.expected +++ b/java/ql/test/query-tests/security/CWE-090/LdapInjection.expected @@ -8,14 +8,20 @@ edges | LdapInjection.java:63:28:63:59 | jBadInitial : String | LdapInjection.java:65:29:65:55 | ... + ... | provenance | | | LdapInjection.java:69:28:69:52 | jBad : String | LdapInjection.java:71:84:71:103 | ... + ... | provenance | | | LdapInjection.java:69:55:69:88 | jBadDNNameAdd : String | LdapInjection.java:71:53:71:79 | ... + ... : String | provenance | | +| LdapInjection.java:71:16:71:31 | new LdapName(...) : LdapName | LdapInjection.java:71:16:71:81 | addAll(...) | provenance | | +| LdapInjection.java:71:40:71:80 | new LdapName(...) : LdapName | LdapInjection.java:71:16:71:31 | new LdapName(...) : LdapName | provenance | | | LdapInjection.java:71:40:71:80 | new LdapName(...) : LdapName | LdapInjection.java:71:16:71:81 | addAll(...) | provenance | | | LdapInjection.java:71:53:71:79 | ... + ... : String | LdapInjection.java:71:40:71:80 | new LdapName(...) : LdapName | provenance | | | LdapInjection.java:75:28:75:52 | jBad : String | LdapInjection.java:79:47:79:66 | ... + ... | provenance | | | LdapInjection.java:75:55:75:89 | jBadDNNameAdd2 : String | LdapInjection.java:78:30:78:57 | ... + ... : String | provenance | | | LdapInjection.java:78:5:78:8 | name : LdapName | LdapInjection.java:79:40:79:43 | name : LdapName | provenance | | +| LdapInjection.java:78:5:78:8 | name [post update] : LdapName | LdapInjection.java:79:40:79:43 | name : LdapName | provenance | | | LdapInjection.java:78:17:78:58 | new LdapName(...) : LdapName | LdapInjection.java:78:17:78:68 | getRdns(...) : List | provenance | | | LdapInjection.java:78:17:78:68 | getRdns(...) : List | LdapInjection.java:78:5:78:8 | name : LdapName | provenance | | +| LdapInjection.java:78:17:78:68 | getRdns(...) : List | LdapInjection.java:78:5:78:8 | name [post update] : LdapName | provenance | | | LdapInjection.java:78:30:78:57 | ... + ... : String | LdapInjection.java:78:17:78:58 | new LdapName(...) : LdapName | provenance | | +| LdapInjection.java:79:16:79:31 | new LdapName(...) : LdapName | LdapInjection.java:79:16:79:44 | addAll(...) | provenance | | +| LdapInjection.java:79:40:79:43 | name : LdapName | LdapInjection.java:79:16:79:31 | new LdapName(...) : LdapName | provenance | | | LdapInjection.java:79:40:79:43 | name : LdapName | LdapInjection.java:79:16:79:44 | addAll(...) | provenance | | | LdapInjection.java:83:28:83:52 | jBad : String | LdapInjection.java:85:75:85:94 | ... + ... | provenance | | | LdapInjection.java:83:55:83:93 | jBadDNNameToString : String | LdapInjection.java:85:29:85:60 | ... + ... : String | provenance | | @@ -26,6 +32,8 @@ edges | LdapInjection.java:91:23:91:65 | new LdapName(...) : LdapName | LdapInjection.java:91:23:91:73 | clone(...) : Object | provenance | | | LdapInjection.java:91:23:91:73 | clone(...) : Object | LdapInjection.java:91:16:91:73 | (...)... | provenance | | | LdapInjection.java:91:36:91:64 | ... + ... : String | LdapInjection.java:91:23:91:65 | new LdapName(...) : LdapName | provenance | | +| LdapInjection.java:100:27:100:59 | jOkAttribute : String | LdapInjection.java:101:49:101:60 | jOkAttribute : String | provenance | | +| LdapInjection.java:101:49:101:60 | jOkAttribute : String | LdapInjection.java:101:29:101:75 | new BasicAttributes(...) | provenance | | | LdapInjection.java:106:31:106:55 | uBad : String | LdapInjection.java:108:67:108:86 | ... + ... | provenance | | | LdapInjection.java:106:58:106:84 | uBadDN : String | LdapInjection.java:108:20:108:39 | ... + ... | provenance | | | LdapInjection.java:112:31:112:67 | uBadFilterCreate : String | LdapInjection.java:113:72:113:87 | uBadFilterCreate : String | provenance | | @@ -154,6 +162,7 @@ nodes | LdapInjection.java:65:29:65:55 | ... + ... | semmle.label | ... + ... | | LdapInjection.java:69:28:69:52 | jBad : String | semmle.label | jBad : String | | LdapInjection.java:69:55:69:88 | jBadDNNameAdd : String | semmle.label | jBadDNNameAdd : String | +| LdapInjection.java:71:16:71:31 | new LdapName(...) : LdapName | semmle.label | new LdapName(...) : LdapName | | LdapInjection.java:71:16:71:81 | addAll(...) | semmle.label | addAll(...) | | LdapInjection.java:71:40:71:80 | new LdapName(...) : LdapName | semmle.label | new LdapName(...) : LdapName | | LdapInjection.java:71:53:71:79 | ... + ... : String | semmle.label | ... + ... : String | @@ -161,9 +170,11 @@ nodes | LdapInjection.java:75:28:75:52 | jBad : String | semmle.label | jBad : String | | LdapInjection.java:75:55:75:89 | jBadDNNameAdd2 : String | semmle.label | jBadDNNameAdd2 : String | | LdapInjection.java:78:5:78:8 | name : LdapName | semmle.label | name : LdapName | +| LdapInjection.java:78:5:78:8 | name [post update] : LdapName | semmle.label | name [post update] : LdapName | | LdapInjection.java:78:17:78:58 | new LdapName(...) : LdapName | semmle.label | new LdapName(...) : LdapName | | LdapInjection.java:78:17:78:68 | getRdns(...) : List | semmle.label | getRdns(...) : List | | LdapInjection.java:78:30:78:57 | ... + ... : String | semmle.label | ... + ... : String | +| LdapInjection.java:79:16:79:31 | new LdapName(...) : LdapName | semmle.label | new LdapName(...) : LdapName | | LdapInjection.java:79:16:79:44 | addAll(...) | semmle.label | addAll(...) | | LdapInjection.java:79:40:79:43 | name : LdapName | semmle.label | name : LdapName | | LdapInjection.java:79:47:79:66 | ... + ... | semmle.label | ... + ... | @@ -180,6 +191,9 @@ nodes | LdapInjection.java:91:23:91:73 | clone(...) : Object | semmle.label | clone(...) : Object | | LdapInjection.java:91:36:91:64 | ... + ... : String | semmle.label | ... + ... : String | | LdapInjection.java:91:76:91:95 | ... + ... | semmle.label | ... + ... | +| LdapInjection.java:100:27:100:59 | jOkAttribute : String | semmle.label | jOkAttribute : String | +| LdapInjection.java:101:29:101:75 | new BasicAttributes(...) | semmle.label | new BasicAttributes(...) | +| LdapInjection.java:101:49:101:60 | jOkAttribute : String | semmle.label | jOkAttribute : String | | LdapInjection.java:106:31:106:55 | uBad : String | semmle.label | uBad : String | | LdapInjection.java:106:58:106:84 | uBadDN : String | semmle.label | uBadDN : String | | LdapInjection.java:108:20:108:39 | ... + ... | semmle.label | ... + ... | @@ -348,6 +362,7 @@ subpaths | LdapInjection.java:85:75:85:94 | ... + ... | LdapInjection.java:83:28:83:52 | jBad : String | LdapInjection.java:85:75:85:94 | ... + ... | This LDAP query depends on a $@. | LdapInjection.java:83:28:83:52 | jBad | user-provided value | | LdapInjection.java:91:16:91:73 | (...)... | LdapInjection.java:89:55:89:90 | jBadDNNameClone : String | LdapInjection.java:91:16:91:73 | (...)... | This LDAP query depends on a $@. | LdapInjection.java:89:55:89:90 | jBadDNNameClone | user-provided value | | LdapInjection.java:91:76:91:95 | ... + ... | LdapInjection.java:89:28:89:52 | jBad : String | LdapInjection.java:91:76:91:95 | ... + ... | This LDAP query depends on a $@. | LdapInjection.java:89:28:89:52 | jBad | user-provided value | +| LdapInjection.java:101:29:101:75 | new BasicAttributes(...) | LdapInjection.java:100:27:100:59 | jOkAttribute : String | LdapInjection.java:101:29:101:75 | new BasicAttributes(...) | This LDAP query depends on a $@. | LdapInjection.java:100:27:100:59 | jOkAttribute | user-provided value | | LdapInjection.java:108:20:108:39 | ... + ... | LdapInjection.java:106:58:106:84 | uBadDN : String | LdapInjection.java:108:20:108:39 | ... + ... | This LDAP query depends on a $@. | LdapInjection.java:106:58:106:84 | uBadDN | user-provided value | | LdapInjection.java:108:67:108:86 | ... + ... | LdapInjection.java:106:31:106:55 | uBad : String | LdapInjection.java:108:67:108:86 | ... + ... | This LDAP query depends on a $@. | LdapInjection.java:106:31:106:55 | uBad | user-provided value | | LdapInjection.java:113:58:113:88 | create(...) | LdapInjection.java:112:31:112:67 | uBadFilterCreate : String | LdapInjection.java:113:58:113:88 | create(...) | This LDAP query depends on a $@. | LdapInjection.java:112:31:112:67 | uBadFilterCreate | user-provided value | diff --git a/java/ql/test/query-tests/security/CWE-190/semmle/tests/InformationLoss.expected b/java/ql/test/query-tests/security/CWE-190/semmle/tests/InformationLoss.expected index 1c4ed46e136..e317375c199 100644 --- a/java/ql/test/query-tests/security/CWE-190/semmle/tests/InformationLoss.expected +++ b/java/ql/test/query-tests/security/CWE-190/semmle/tests/InformationLoss.expected @@ -1,2 +1,4 @@ -| Test.java:68:5:68:25 | ...+=... | Implicit cast of source type long to narrower destination type int. | -| Test.java:87:4:87:9 | ...+=... | Implicit cast of source type long to narrower destination type int. | +| Test.java:68:5:68:25 | ...+=... | Implicit cast of source type long to narrower destination type $@. | Test.java:64:4:64:13 | int i | int | +| Test.java:87:4:87:9 | ...+=... | Implicit cast of source type long to narrower destination type $@. | Test.java:81:4:81:13 | int i | int | +| Test.java:289:5:289:30 | ...+=... | Implicit cast of source type long to narrower destination type $@. | Test.java:285:4:285:27 | int[] arr | int | +| Test.java:293:7:293:44 | ...+=... | Implicit cast of source type long to narrower destination type $@. | Test.java:293:7:293:24 | ...[...] | int | diff --git a/java/ql/test/query-tests/security/CWE-190/semmle/tests/Test.java b/java/ql/test/query-tests/security/CWE-190/semmle/tests/Test.java index 2935368dccb..f24d16a236c 100644 --- a/java/ql/test/query-tests/security/CWE-190/semmle/tests/Test.java +++ b/java/ql/test/query-tests/security/CWE-190/semmle/tests/Test.java @@ -279,12 +279,29 @@ class Test { // subsequently cast to narrower type int int widenedThenNarrowed = (int) (data2 + 10L); } + + // InformationLoss + { + int[] arr = new int[10]; + while (arr[2] < 1000000) { + // BAD: getLargeNumber is implicitly narrowed to an integer + // which will result in overflows if it is large + arr[2] += getLargeNumber(); + } + + // BAD. + getAnIntArray()[0] += getLargeNumber(); + } } public static long getLargeNumber() { return Long.MAX_VALUE / 2; } + public static int[] getAnIntArray() { + return new int[10]; + } + public static boolean properlyBounded(int i) { return i < Integer.MAX_VALUE; } diff --git a/java/ql/test/query-tests/security/CWE-532/TokenSequenceParserTest.java b/java/ql/test/query-tests/security/CWE-532/TokenSequenceParserTest.java new file mode 100644 index 00000000000..0a24c32f26a --- /dev/null +++ b/java/ql/test/query-tests/security/CWE-532/TokenSequenceParserTest.java @@ -0,0 +1,27 @@ +import org.apache.logging.log4j.Logger; + +interface TokenSequenceParserConstants { + /** Literal token values. */ + String[] tokenImage = { + "", + }; +} + +public class TokenSequenceParserTest implements TokenSequenceParserConstants { + void test(String password) { + Logger logger = null; + + logger.info("When parsing found this: " + tokenImage[0]); // Safe + } + +} + +class ParseExceptionTest extends Exception { + String[] tokenImage; + + void test() { + Logger logger = null; + + logger.info("When parsing found this: " + tokenImage[0]); // Safe + } +} diff --git a/swift/integration-tests/osx-only/canonical-case/MiXeDcAsE.swifT b/java/ql/test/query-tests/security/CWE-552/UrlForwardTest.expected similarity index 100% rename from swift/integration-tests/osx-only/canonical-case/MiXeDcAsE.swifT rename to java/ql/test/query-tests/security/CWE-552/UrlForwardTest.expected diff --git a/java/ql/test/query-tests/security/CWE-552/UrlForwardTest.java b/java/ql/test/query-tests/security/CWE-552/UrlForwardTest.java new file mode 100644 index 00000000000..a1437a692a2 --- /dev/null +++ b/java/ql/test/query-tests/security/CWE-552/UrlForwardTest.java @@ -0,0 +1,411 @@ +import java.io.IOException; +import java.net.URLDecoder; +import java.nio.file.Path; +import java.nio.file.Paths; + +import javax.servlet.Filter; +import javax.servlet.FilterChain; +import javax.servlet.RequestDispatcher; +import javax.servlet.ServletConfig; +import javax.servlet.ServletContext; +import javax.servlet.ServletException; +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.servlet.ModelAndView; +import org.kohsuke.stapler.StaplerRequest; +import org.kohsuke.stapler.StaplerResponse; + +@Controller +public class UrlForwardTest extends HttpServlet implements Filter { + + // Spring `ModelAndView` test cases + @GetMapping("/bad1") + public ModelAndView bad1(String url) { + return new ModelAndView(url); // $ hasTaintFlow + } + + @GetMapping("/bad2") + public ModelAndView bad2(String url) { + ModelAndView modelAndView = new ModelAndView(); + modelAndView.setViewName(url); // $ hasTaintFlow + return modelAndView; + } + + // Spring `"forward:"` prefix test cases + @GetMapping("/bad3") + public String bad3(String url) { + return "forward:" + url + "/swagger-ui/index.html"; // $ hasTaintFlow + } + + @GetMapping("/bad4") + public ModelAndView bad4(String url) { + ModelAndView modelAndView = new ModelAndView("forward:" + url); // $ hasTaintFlow + return modelAndView; + } + + // Not relevant for this query since redirecting instead of forwarding + // This result should be found by the `java/unvalidated-url-redirection` query instead. + @GetMapping("/redirect") + public ModelAndView redirect(String url) { + ModelAndView modelAndView = new ModelAndView("redirect:" + url); + return modelAndView; + } + + // `RequestDispatcher` test cases from a Spring `GetMapping` entry point + @GetMapping("/bad5") + public void bad5(String url, HttpServletRequest request, HttpServletResponse response) { + try { + request.getRequestDispatcher(url).include(request, response); // $ hasTaintFlow + } catch (ServletException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + } + + @GetMapping("/bad6") + public void bad6(String url, HttpServletRequest request, HttpServletResponse response) { + try { + request.getRequestDispatcher("/WEB-INF/jsp/" + url + ".jsp").include(request, response); // $ hasTaintFlow + } catch (ServletException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + } + + @GetMapping("/bad7") + public void bad7(String url, HttpServletRequest request, HttpServletResponse response) { + try { + request.getRequestDispatcher("/WEB-INF/jsp/" + url + ".jsp").forward(request, response); // $ hasTaintFlow + } catch (ServletException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + } + + @GetMapping("/good1") + public void good1(String url, HttpServletRequest request, HttpServletResponse response) { + try { + request.getRequestDispatcher("/index.jsp?token=" + url).forward(request, response); + } catch (ServletException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + } + + // BAD: appended to a prefix without path sanitization + @GetMapping("/bad8") + public void bad8(String urlPath, HttpServletRequest request, HttpServletResponse response) { + try { + String url = "/pages" + urlPath; + request.getRequestDispatcher(url).forward(request, response); // $ hasTaintFlow + } catch (ServletException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + } + + // GOOD: appended to a prefix with path sanitization + @GetMapping("/good2") + public void good2(String urlPath, HttpServletRequest request, HttpServletResponse response) { + try { + while (urlPath.contains("%")) { + urlPath = URLDecoder.decode(urlPath, "UTF-8"); + } + + if (!urlPath.contains("..") && !urlPath.startsWith("/WEB-INF")) { + // Note: path injection sanitizer does not account for string concatenation instead of a `startswith` check + String url = "/pages" + urlPath; + request.getRequestDispatcher(url).forward(request, response); + } + + } catch (ServletException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + } + + // `RequestDispatcher` test cases from non-Spring entry points + private static final String BASE_PATH = "/pages"; + + @Override + // BAD: Request dispatcher from servlet path without check + public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) + throws IOException, ServletException { + String path = ((HttpServletRequest) request).getServletPath(); + // A sample payload "/%57EB-INF/web.xml" can bypass this `startsWith` check + if (path != null && !path.startsWith("/WEB-INF")) { + request.getRequestDispatcher(path).forward(request, response); // $ hasTaintFlow + } else { + chain.doFilter(request, response); + } + } + + // BAD: Request dispatcher from servlet path with check that does not decode + // the user-supplied path; could bypass check with ".." encoded as "%2e%2e". + public void doFilter2(ServletRequest request, ServletResponse response, FilterChain chain) + throws IOException, ServletException { + String path = ((HttpServletRequest) request).getServletPath(); + + if (path.startsWith(BASE_PATH) && !path.contains("..")) { + request.getRequestDispatcher(path).forward(request, response); // $ hasTaintFlow + } else { + chain.doFilter(request, response); + } + } + + // GOOD: Request dispatcher from servlet path with whitelisted string comparison + public void doFilter3(ServletRequest request, ServletResponse response, FilterChain chain) + throws IOException, ServletException { + String path = ((HttpServletRequest) request).getServletPath(); + + if (path.equals("/comaction")) { + request.getRequestDispatcher(path).forward(request, response); + } else { + chain.doFilter(request, response); + } + } + + @Override + // BAD: Request dispatcher constructed from `ServletContext` without input validation + protected void doGet(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + String action = request.getParameter("action"); + String returnURL = request.getParameter("returnURL"); + + ServletConfig cfg = getServletConfig(); + if (action.equals("Login")) { + ServletContext sc = cfg.getServletContext(); + RequestDispatcher rd = sc.getRequestDispatcher("/Login.jsp"); + rd.forward(request, response); + } else { + ServletContext sc = cfg.getServletContext(); + RequestDispatcher rd = sc.getRequestDispatcher(returnURL); // $ hasTaintFlow + rd.forward(request, response); + } + } + + @Override + // BAD: Request dispatcher constructed from `HttpServletRequest` without input validation + protected void doPost(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + String action = request.getParameter("action"); + String returnURL = request.getParameter("returnURL"); + + if (action.equals("Login")) { + RequestDispatcher rd = request.getRequestDispatcher("/Login.jsp"); + rd.forward(request, response); + } else { + RequestDispatcher rd = request.getRequestDispatcher(returnURL); // $ hasTaintFlow + rd.forward(request, response); + } + } + + @Override + // GOOD: Request dispatcher with a whitelisted URI + protected void doPut(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + String action = request.getParameter("action"); + + if (action.equals("Login")) { + RequestDispatcher rd = request.getRequestDispatcher("/Login.jsp"); + rd.forward(request, response); + } else if (action.equals("Register")) { + RequestDispatcher rd = request.getRequestDispatcher("/Register.jsp"); + rd.forward(request, response); + } + } + + // BAD: Request dispatcher without path traversal check + protected void doHead1(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + String path = request.getParameter("path"); + + // A sample payload "/pages/welcome.jsp/../WEB-INF/web.xml" can bypass the `startsWith` check + if (path.startsWith(BASE_PATH)) { + request.getServletContext().getRequestDispatcher(path).include(request, response); // $ hasTaintFlow + } + } + + // BAD: Request dispatcher with path traversal check that does not decode + // the user-supplied path; could bypass check with ".." encoded as "%2e%2e". + protected void doHead2(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + String path = request.getParameter("path"); + + if (path.startsWith(BASE_PATH) && !path.contains("..")) { + request.getServletContext().getRequestDispatcher(path).include(request, response); // $ hasTaintFlow + } + } + + // BAD: Request dispatcher with path normalization and comparison, but + // does not decode before normalization. + protected void doHead3(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + String path = request.getParameter("path"); + + // Since not decoded before normalization, "%2e%2e" can remain in the path + Path requestedPath = Paths.get(BASE_PATH).resolve(path).normalize(); + + if (requestedPath.startsWith(BASE_PATH)) { + request.getServletContext().getRequestDispatcher(requestedPath.toString()).forward(request, response); // $ hasTaintFlow + } + } + + // BAD: Request dispatcher with negation check and path normalization, but without URL decoding. + protected void doHead4(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + String path = request.getParameter("path"); + // Since not decoded before normalization, "/%57EB-INF" can remain in the path and pass the `startsWith` check. + Path requestedPath = Paths.get(BASE_PATH).resolve(path).normalize(); + + if (!requestedPath.startsWith("/WEB-INF") && !requestedPath.startsWith("/META-INF")) { + request.getServletContext().getRequestDispatcher(requestedPath.toString()).forward(request, response); // $ hasTaintFlow + } + } + + // BAD: Request dispatcher with path traversal check and single URL decoding; may be vulnerable to double-encoding + protected void doHead5(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + String path = request.getParameter("path"); + path = URLDecoder.decode(path, "UTF-8"); + + if (!path.startsWith("/WEB-INF/") && !path.contains("..")) { + request.getServletContext().getRequestDispatcher(path).include(request, response); // $ hasTaintFlow + } + } + + // GOOD: Request dispatcher with path traversal check and URL decoding in a loop to avoid double-encoding bypass + protected void doHead6(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + String path = request.getParameter("path"); + + if (path.contains("%")){ + while (path.contains("%")) { + path = URLDecoder.decode(path, "UTF-8"); + } + } + + if (!path.startsWith("/WEB-INF/") && !path.contains("..")) { + request.getServletContext().getRequestDispatcher(path).include(request, response); + } + } + + // GOOD: Request dispatcher with URL encoding check and path traversal check + protected void doHead7(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + String path = request.getParameter("path"); + + if (!path.contains("%")){ + if (!path.startsWith("/WEB-INF/") && !path.contains("..")) { + request.getServletContext().getRequestDispatcher(path).include(request, response); + } + } + } + + // BAD: Request dispatcher without URL decoding before WEB-INF and path traversal checks + protected void doHead8(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + String path = request.getParameter("path"); + if (path.contains("%")){ // incorrect check + if (!path.startsWith("/WEB-INF/") && !path.contains("..")) { + request.getServletContext().getRequestDispatcher(path).include(request, response); // $ hasTaintFlow + } + } + } + + // GOOD: Request dispatcher with WEB-INF, path traversal, and URL encoding checks + protected void doHead9(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + String path = request.getParameter("path"); + + if (!path.startsWith("/WEB-INF/") && !path.contains("..")) { + if (!path.contains("%")){ // correct check + request.getServletContext().getRequestDispatcher(path).include(request, response); + } + } + } + + // GOOD: Request dispatcher with path traversal check and URL decoding in a loop to avoid double-encoding bypass + protected void doHead10(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + String path = request.getParameter("path"); + while (path.contains("%")) { + path = URLDecoder.decode(path, "UTF-8"); + } + + if (!path.startsWith("/WEB-INF/") && !path.contains("..")) { + request.getServletContext().getRequestDispatcher(path).include(request, response); + } + } + + // GOOD: Request dispatcher with path traversal check and URL decoding in a loop to avoid double-encoding bypass + protected void doHead11(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + String path = request.getParameter("path"); + // FP: we don't currently handle the scenario where the + // `path.contains("%")` check is stored in a variable. + boolean hasEncoding = path.contains("%"); + while (hasEncoding) { + path = URLDecoder.decode(path, "UTF-8"); + hasEncoding = path.contains("%"); + } + + if (!path.startsWith("/WEB-INF/") && !path.contains("..")) { + request.getServletContext().getRequestDispatcher(path).include(request, response); // $ SPURIOUS: hasTaintFlow + } + } + + // BAD: `StaplerResponse.forward` without any checks + public void generateResponse(StaplerRequest req, StaplerResponse rsp, Object obj) throws IOException, ServletException { + String url = req.getParameter("target"); + rsp.forward(obj, url, req); // $ hasTaintFlow + } + + // QHelp example + private static final String VALID_FORWARD = "https://cwe.mitre.org/data/definitions/552.html"; + + protected void doGet2(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + ServletConfig cfg = getServletConfig(); + ServletContext sc = cfg.getServletContext(); + + // BAD: a request parameter is incorporated without validation into a URL forward + sc.getRequestDispatcher(request.getParameter("target")).forward(request, response); // $ hasTaintFlow + + // GOOD: the request parameter is validated against a known fixed string + if (VALID_FORWARD.equals(request.getParameter("target"))) { + sc.getRequestDispatcher(VALID_FORWARD).forward(request, response); + } + } + + // GOOD: char `?` appended before the user input + private static final String LOGIN_URL = "/UI/Login"; + + public void doPost2(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + StringBuilder forwardUrl = new StringBuilder(200); + forwardUrl.append(LOGIN_URL); + + String queryString = request.getQueryString(); + + forwardUrl.append('?').append(queryString); + + String fUrl = forwardUrl.toString(); + + ServletConfig config = getServletConfig(); + + RequestDispatcher dispatcher = config.getServletContext().getRequestDispatcher(fUrl); + dispatcher.forward(request, response); + } +} diff --git a/java/ql/test/query-tests/security/CWE-552/UrlForwardTest.ql b/java/ql/test/query-tests/security/CWE-552/UrlForwardTest.ql new file mode 100644 index 00000000000..34841885bc3 --- /dev/null +++ b/java/ql/test/query-tests/security/CWE-552/UrlForwardTest.ql @@ -0,0 +1,4 @@ +import java +import TestUtilities.InlineFlowTest +import semmle.code.java.security.UrlForwardQuery +import TaintFlowTest diff --git a/java/ql/test/query-tests/security/CWE-552/options b/java/ql/test/query-tests/security/CWE-552/options new file mode 100644 index 00000000000..bda9516fb58 --- /dev/null +++ b/java/ql/test/query-tests/security/CWE-552/options @@ -0,0 +1 @@ +//semmle-extractor-options: --javac-args -cp ${testdir}/../../../stubs/servlet-api-2.4:${testdir}/../../../stubs/springframework-5.3.8/:${testdir}/../../../stubs/javax-faces-2.3/:${testdir}/../../../stubs/undertow-io-2.2/:${testdir}/../../../stubs/jboss-vfs-3.2/:${testdir}/../../../stubs/stapler-1.263/:${testdir}/../../../stubs/apache-commons-fileupload-1.4/:${testdir}/../../../stubs/apache-commons-beanutils/:${testdir}/../../../stubs/saxon-xqj-9.x/:${testdir}/../../../stubs/apache-commons-lang/:${testdir}/../../../stubs/javax-servlet-2.5/ diff --git a/java/ql/test/utils/modeleditor/ApplicationModeEndpoints.expected b/java/ql/test/utils/modeleditor/ApplicationModeEndpoints.expected index 4d32cb7e922..d6ee3584afd 100644 --- a/java/ql/test/utils/modeleditor/ApplicationModeEndpoints.expected +++ b/java/ql/test/utils/modeleditor/ApplicationModeEndpoints.expected @@ -1,13 +1,23 @@ | com/github/codeql/test/NonPublicClass.java:5:5:5:28 | println(...) | java.io | PrintStream | println | (String) | true | rt.jar | | sink | source | +| com/github/codeql/test/NonPublicClass.java:5:5:5:28 | println(...) | java.io | PrintStream | println | (String) | true | rt.jar | | summary | source | | com/github/codeql/test/PublicClass.java:8:5:8:27 | println(...) | java.io | PrintStream | println | (String) | true | rt.jar | | sink | source | +| com/github/codeql/test/PublicClass.java:8:5:8:27 | println(...) | java.io | PrintStream | println | (String) | true | rt.jar | | summary | source | | com/github/codeql/test/PublicClass.java:12:5:12:27 | println(...) | java.io | PrintStream | println | (String) | true | rt.jar | | sink | source | +| com/github/codeql/test/PublicClass.java:12:5:12:27 | println(...) | java.io | PrintStream | println | (String) | true | rt.jar | | summary | source | | com/github/codeql/test/PublicClass.java:16:5:16:45 | println(...) | java.io | PrintStream | println | (Object) | true | rt.jar | | sink | source | +| com/github/codeql/test/PublicClass.java:16:5:16:45 | println(...) | java.io | PrintStream | println | (Object) | true | rt.jar | | summary | source | | com/github/codeql/test/PublicClass.java:16:24:16:44 | get(...) | java.nio.file | Paths | get | (String,String[]) | true | rt.jar | | summary | source | | com/github/codeql/test/PublicClass.java:20:5:20:68 | println(...) | java.io | PrintStream | println | (Object) | true | rt.jar | | sink | source | -| com/github/codeql/test/PublicClass.java:20:24:20:47 | getDefault(...) | java.nio.file | FileSystems | getDefault | () | false | rt.jar | | | source | +| com/github/codeql/test/PublicClass.java:20:5:20:68 | println(...) | java.io | PrintStream | println | (Object) | true | rt.jar | | summary | source | +| com/github/codeql/test/PublicClass.java:20:24:20:47 | getDefault(...) | java.nio.file | FileSystems | getDefault | () | true | rt.jar | | neutral | source | | com/github/codeql/test/PublicClass.java:20:24:20:67 | getPath(...) | java.nio.file | FileSystem | getPath | (String,String[]) | true | rt.jar | | summary | source | | com/github/codeql/test/PublicClass.java:24:5:24:27 | println(...) | java.io | PrintStream | println | (String) | true | rt.jar | | sink | source | +| com/github/codeql/test/PublicClass.java:24:5:24:27 | println(...) | java.io | PrintStream | println | (String) | true | rt.jar | | summary | source | | com/github/codeql/test/PublicGenericClass.java:7:5:7:27 | println(...) | java.io | PrintStream | println | (Object) | true | rt.jar | | sink | source | +| com/github/codeql/test/PublicGenericClass.java:7:5:7:27 | println(...) | java.io | PrintStream | println | (Object) | true | rt.jar | | summary | source | | com/github/codeql/test/PublicGenericClass.java:11:5:11:27 | println(...) | java.io | PrintStream | println | (Object) | true | rt.jar | | sink | source | +| com/github/codeql/test/PublicGenericClass.java:11:5:11:27 | println(...) | java.io | PrintStream | println | (Object) | true | rt.jar | | summary | source | | com/github/codeql/test/PublicGenericInterface.java:8:7:8:29 | println(...) | java.io | PrintStream | println | (String) | true | rt.jar | | sink | source | +| com/github/codeql/test/PublicGenericInterface.java:8:7:8:29 | println(...) | java.io | PrintStream | println | (String) | true | rt.jar | | summary | source | | com/github/codeql/test/PublicInterface.java:7:7:7:29 | println(...) | java.io | PrintStream | println | (String) | true | rt.jar | | sink | source | +| com/github/codeql/test/PublicInterface.java:7:7:7:29 | println(...) | java.io | PrintStream | println | (String) | true | rt.jar | | summary | source | diff --git a/java/ql/test/utils/modelgenerator/dataflow/CaptureNeutralModels.expected b/java/ql/test/utils/modelgenerator/dataflow/CaptureNeutralModels.expected index 5ae6398fb6f..df6a7bfc854 100644 --- a/java/ql/test/utils/modelgenerator/dataflow/CaptureNeutralModels.expected +++ b/java/ql/test/utils/modelgenerator/dataflow/CaptureNeutralModels.expected @@ -14,7 +14,6 @@ | p;Pojo;getFloatArray;();summary;df-generated | | p;Pojo;getIntValue;();summary;df-generated | | p;Pojo;getPrimitiveArray;();summary;df-generated | -| p;PrivateFlowViaPublicInterface$SPI;openStream;();summary;df-generated | | p;PrivateFlowViaPublicInterface$SPI;openStreamNone;();summary;df-generated | | p;PrivateFlowViaPublicInterface;createAnSPIWithoutTrackingFile;(File);summary;df-generated | | p;Sinks;copyFileToDirectory;(Path,Path,CopyOption[]);summary;df-generated | diff --git a/java/ql/test/utils/modelgenerator/dataflow/CaptureSummaryModels.expected b/java/ql/test/utils/modelgenerator/dataflow/CaptureSummaryModels.expected index 2654c4d94d6..50536e850d9 100644 --- a/java/ql/test/utils/modelgenerator/dataflow/CaptureSummaryModels.expected +++ b/java/ql/test/utils/modelgenerator/dataflow/CaptureSummaryModels.expected @@ -43,4 +43,5 @@ | p;Pojo;false;getCharArray;();;Argument[this];ReturnValue;taint;df-generated | | p;Pojo;false;getValue;();;Argument[this];ReturnValue;taint;df-generated | | p;Pojo;false;setValue;(String);;Argument[0];Argument[this];taint;df-generated | +| p;PrivateFlowViaPublicInterface$SPI;true;openStream;();;Argument[this];ReturnValue;taint;df-generated | | p;PrivateFlowViaPublicInterface;true;createAnSPI;(File);;Argument[0];ReturnValue;taint;df-generated | diff --git a/javascript/ql/lib/CHANGELOG.md b/javascript/ql/lib/CHANGELOG.md index 5b97ebbb22b..4d66cfc9f6c 100644 --- a/javascript/ql/lib/CHANGELOG.md +++ b/javascript/ql/lib/CHANGELOG.md @@ -1,3 +1,21 @@ +## 0.8.13 + +### Major Analysis Improvements + +* Added support for TypeScript 5.4. + +## 0.8.12 + +No user-facing changes. + +## 0.8.11 + +No user-facing changes. + +## 0.8.10 + +No user-facing changes. + ## 0.8.9 ### Minor Analysis Improvements diff --git a/javascript/ql/lib/change-notes/2024-02-02-typescript-5-4.md b/javascript/ql/lib/change-notes/2024-02-02-typescript-5-4.md deleted file mode 100644 index 836719b5d6b..00000000000 --- a/javascript/ql/lib/change-notes/2024-02-02-typescript-5-4.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: majorAnalysis ---- -* Added support for TypeScript 5.4. \ No newline at end of file diff --git a/javascript/ql/lib/change-notes/released/0.8.10.md b/javascript/ql/lib/change-notes/released/0.8.10.md new file mode 100644 index 00000000000..777bbd2fded --- /dev/null +++ b/javascript/ql/lib/change-notes/released/0.8.10.md @@ -0,0 +1,3 @@ +## 0.8.10 + +No user-facing changes. diff --git a/javascript/ql/lib/change-notes/released/0.8.11.md b/javascript/ql/lib/change-notes/released/0.8.11.md new file mode 100644 index 00000000000..6f504c5c207 --- /dev/null +++ b/javascript/ql/lib/change-notes/released/0.8.11.md @@ -0,0 +1,3 @@ +## 0.8.11 + +No user-facing changes. diff --git a/javascript/ql/lib/change-notes/released/0.8.12.md b/javascript/ql/lib/change-notes/released/0.8.12.md new file mode 100644 index 00000000000..bc91afe9c1e --- /dev/null +++ b/javascript/ql/lib/change-notes/released/0.8.12.md @@ -0,0 +1,3 @@ +## 0.8.12 + +No user-facing changes. diff --git a/javascript/ql/lib/change-notes/released/0.8.13.md b/javascript/ql/lib/change-notes/released/0.8.13.md new file mode 100644 index 00000000000..bfa4a62d5ae --- /dev/null +++ b/javascript/ql/lib/change-notes/released/0.8.13.md @@ -0,0 +1,5 @@ +## 0.8.13 + +### Major Analysis Improvements + +* Added support for TypeScript 5.4. diff --git a/javascript/ql/lib/codeql-pack.release.yml b/javascript/ql/lib/codeql-pack.release.yml index 5290c29b7fe..0fb6f3d786c 100644 --- a/javascript/ql/lib/codeql-pack.release.yml +++ b/javascript/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.8.9 +lastReleaseVersion: 0.8.13 diff --git a/javascript/ql/lib/qlpack.yml b/javascript/ql/lib/qlpack.yml index ef3ca7521ac..1153f3872af 100644 --- a/javascript/ql/lib/qlpack.yml +++ b/javascript/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/javascript-all -version: 0.8.10-dev +version: 0.8.14-dev groups: javascript dbscheme: semmlecode.javascript.dbscheme extractor: javascript @@ -11,6 +11,7 @@ dependencies: codeql/regex: ${workspace} codeql/tutorial: ${workspace} codeql/util: ${workspace} + codeql/xml: ${workspace} codeql/yaml: ${workspace} dataExtensions: - semmle/javascript/frameworks/**/model.yml diff --git a/javascript/ql/lib/semmle/javascript/AST.qll b/javascript/ql/lib/semmle/javascript/AST.qll index 412f2036280..90b8494d166 100644 --- a/javascript/ql/lib/semmle/javascript/AST.qll +++ b/javascript/ql/lib/semmle/javascript/AST.qll @@ -245,7 +245,7 @@ class TopLevel extends @toplevel, StmtContainer { /** Gets the number of lines containing comments in this toplevel. */ int getNumberOfLinesOfComments() { numlines(this, _, _, result) } - override predicate isStrict() { this.getAStmt() instanceof StrictModeDecl } + override predicate isStrict() { this.getAStmt() instanceof Directive::StrictModeDecl } override ControlFlowNode getFirstControlFlowNode() { result = this.getEntry() } diff --git a/javascript/ql/lib/semmle/javascript/ApiGraphs.qll b/javascript/ql/lib/semmle/javascript/ApiGraphs.qll index 0bd79dd2029..ded107e7b19 100644 --- a/javascript/ql/lib/semmle/javascript/ApiGraphs.qll +++ b/javascript/ql/lib/semmle/javascript/ApiGraphs.qll @@ -241,15 +241,23 @@ module API { } /** - * Gets a node representing an instance of this API component, that is, an object whose - * constructor is the function represented by this node. + * Gets a node representing an instance of the class represented by this node. + * This includes instances of subclasses. * - * For example, if this node represents a use of some class `A`, then there might be a node - * representing instances of `A`, typically corresponding to expressions `new A()` at the - * source level. + * For example: + * ```js + * import { C } from "foo"; * - * This predicate may have multiple results when there are multiple constructor calls invoking this API component. - * Consider using `getAnInstantiation()` if there is a need to distinguish between individual constructor calls. + * new C(); // API::moduleImport("foo").getMember("C").getInstance() + * + * class D extends C { + * m() { + * this; // API::moduleImport("foo").getMember("C").getInstance() + * } + * } + * + * new D(); // API::moduleImport("foo").getMember("C").getInstance() + * ``` */ cached Node getInstance() { @@ -493,16 +501,25 @@ module API { } /** + * Gets the location of this API node, if it corresponds to a program element with a source location. + */ + final Location getLocation() { result = this.getInducingNode().getLocation() } + + /** + * DEPRECATED: Use `getLocation().hasLocationInfo()` instead. + * * Holds if this node is located in file `path` between line `startline`, column `startcol`, * and line `endline`, column `endcol`. * * For nodes that do not have a meaningful location, `path` is the empty string and all other * parameters are zero. */ - predicate hasLocationInfo(string path, int startline, int startcol, int endline, int endcol) { - this.getInducingNode().hasLocationInfo(path, startline, startcol, endline, endcol) + deprecated predicate hasLocationInfo( + string path, int startline, int startcol, int endline, int endcol + ) { + this.getLocation().hasLocationInfo(path, startline, startcol, endline, endcol) or - not exists(this.getInducingNode()) and + not exists(this.getLocation()) and path = "" and startline = 0 and startcol = 0 and @@ -688,14 +705,7 @@ module API { or any(Type t).hasUnderlyingType(m, _) } or - MkClassInstance(DataFlow::ClassNode cls) { - hasSemantics(cls) and - ( - cls = trackDefNode(_) - or - cls.getAnInstanceReference() = trackDefNode(_) - ) - } or + MkClassInstance(DataFlow::ClassNode cls) { needsDefNode(cls) } or MkDef(DataFlow::Node nd) { rhs(_, _, nd) } or MkUse(DataFlow::Node nd) { use(_, _, nd) } or /** A use of a TypeScript type. */ @@ -708,6 +718,17 @@ module API { trackUseNode(src, true, bound, "").flowsTo(nd.getCalleeNode()) } + private predicate needsDefNode(DataFlow::ClassNode cls) { + hasSemantics(cls) and + ( + cls = trackDefNode(_) + or + cls.getAnInstanceReference() = trackDefNode(_) + or + needsDefNode(cls.getADirectSubClass()) + ) + } + class TDef = MkModuleDef or TNonModuleDef; class TNonModuleDef = MkModuleExport or MkClassInstance or MkDef or MkSyntheticCallbackArg; @@ -891,6 +912,17 @@ module API { (propDesc = Promises::errorProp() or propDesc = "") } + pragma[nomagic] + private DataFlow::ClassNode getALocalSubclass(DataFlow::SourceNode node) { + result.getASuperClassNode().getALocalSource() = node + } + + bindingset[node] + pragma[inline_late] + private DataFlow::ClassNode getALocalSubclassFwd(DataFlow::SourceNode node) { + result = getALocalSubclass(node) + } + /** * Holds if `ref` is a use of a node that should have an incoming edge from `base` labeled * `lbl` in the API graph. @@ -927,6 +959,15 @@ module API { or lbl = Label::forwardingFunction() and DataFlow::functionForwardingStep(pred.getALocalUse(), ref) + or + exists(DataFlow::ClassNode cls | + lbl = Label::instance() and + cls = getALocalSubclassFwd(pred).getADirectSubClass*() + | + ref = cls.getAReceiverNode() + or + ref = cls.getAClassReference().getAnInstantiation() + ) ) or exists(DataFlow::Node def, DataFlow::FunctionNode fn | diff --git a/javascript/ql/lib/semmle/javascript/Functions.qll b/javascript/ql/lib/semmle/javascript/Functions.qll index 88adc7b838a..150dbea3f01 100644 --- a/javascript/ql/lib/semmle/javascript/Functions.qll +++ b/javascript/ql/lib/semmle/javascript/Functions.qll @@ -237,7 +237,7 @@ class Function extends @function, Parameterized, TypeParameterized, StmtContaine override predicate isStrict() { // check for explicit strict mode directive - exists(StrictModeDecl smd | this = smd.getContainer()) or + exists(Directive::StrictModeDecl smd | this = smd.getContainer()) or // check for enclosing strict function StmtContainer.super.isStrict() or // all parts of a class definition are strict code diff --git a/javascript/ql/lib/semmle/javascript/Stmt.qll b/javascript/ql/lib/semmle/javascript/Stmt.qll index c4217b09356..9adfece36a0 100644 --- a/javascript/ql/lib/semmle/javascript/Stmt.qll +++ b/javascript/ql/lib/semmle/javascript/Stmt.qll @@ -259,149 +259,210 @@ class Directive extends MaybeDirective { } /** - * A known directive, such as a strict mode declaration. - * - * Example: - * - * ``` - * "use strict"; - * ``` + * Module containing subclasses of the `Directive` class. */ -abstract class KnownDirective extends Directive { } +module Directive { + /** + * A known directive, such as a strict mode declaration. + * + * Example: + * + * ``` + * "use strict"; + * ``` + */ + abstract class KnownDirective extends Directive { } -/** - * A strict mode declaration. - * - * Example: - * - * ``` - * "use strict"; - * ``` - */ -class StrictModeDecl extends KnownDirective { - StrictModeDecl() { this.getDirectiveText() = "use strict" } -} + /** + * A strict mode declaration. + * + * Example: + * + * ``` + * "use strict"; + * ``` + */ + class StrictModeDecl extends KnownDirective { + StrictModeDecl() { this.getDirectiveText() = "use strict" } + } -/** - * An asm.js directive. - * - * Example: - * - * ``` - * "use asm"; - * ``` - */ -class AsmJSDirective extends KnownDirective { - AsmJSDirective() { this.getDirectiveText() = "use asm" } -} + /** + * An asm.js directive. + * + * Example: + * + * ``` + * "use asm"; + * ``` + */ + class AsmJSDirective extends KnownDirective { + AsmJSDirective() { this.getDirectiveText() = "use asm" } + } -/** - * A Babel directive. - * - * Example: - * - * ``` - * "use babel"; - * ``` - */ -class BabelDirective extends KnownDirective { - BabelDirective() { this.getDirectiveText() = "use babel" } -} + /** + * A Babel directive. + * + * Example: + * + * ``` + * "use babel"; + * ``` + */ + class BabelDirective extends KnownDirective { + BabelDirective() { this.getDirectiveText() = "use babel" } + } -/** - * A legacy 6to5 directive. - * - * Example: - * - * ``` - * "use 6to5"; - * ``` - */ -class SixToFiveDirective extends KnownDirective { - SixToFiveDirective() { this.getDirectiveText() = "use 6to5" } -} + /** + * A legacy 6to5 directive. + * + * Example: + * + * ``` + * "use 6to5"; + * ``` + */ + class SixToFiveDirective extends KnownDirective { + SixToFiveDirective() { this.getDirectiveText() = "use 6to5" } + } -/** - * A SystemJS `format` directive. - * - * Example: - * - * ``` - * "format global"; - * ``` - */ -class SystemJSFormatDirective extends KnownDirective { - SystemJSFormatDirective() { - this.getDirectiveText().regexpMatch("format (cjs|esm|global|register)") + /** + * A SystemJS `format` directive. + * + * Example: + * + * ``` + * "format global"; + * ``` + */ + class SystemJSFormatDirective extends KnownDirective { + SystemJSFormatDirective() { + this.getDirectiveText().regexpMatch("format (cjs|esm|global|register)") + } + } + + /** + * A SystemJS `format register` directive. + * + * Example: + * + * ``` + * "format register"; + * ``` + */ + class FormatRegisterDirective extends SystemJSFormatDirective { + FormatRegisterDirective() { this.getDirectiveText() = "format register" } + } + + /** + * A `ngInject` or `ngNoInject` directive. + * + * Example: + * + * ``` + * "ngInject"; + * ``` + */ + class NgInjectDirective extends KnownDirective { + NgInjectDirective() { this.getDirectiveText().regexpMatch("ng(No)?Inject") } + } + + /** + * A YUI compressor directive. + * + * Example: + * + * ``` + * "console:nomunge"; + * ``` + */ + class YuiDirective extends KnownDirective { + YuiDirective() { + this.getDirectiveText().regexpMatch("([a-z0-9_]+:nomunge, ?)*([a-z0-9_]+:nomunge)") + } + } + + /** + * A SystemJS `deps` directive. + * + * Example: + * + * ``` + * "deps fs"; + * ``` + */ + class SystemJSDepsDirective extends KnownDirective { + SystemJSDepsDirective() { this.getDirectiveText().regexpMatch("deps [^ ]+") } + } + + /** + * A `bundle` directive. + * + * Example: + * + * ``` + * "bundle"; + * ``` + */ + class BundleDirective extends KnownDirective { + BundleDirective() { this.getDirectiveText() = "bundle" } + } + + /** + * A `use server` directive. + * + * Example: + * + * ``` + * "use server"; + * ``` + */ + class UseServerDirective extends KnownDirective { + UseServerDirective() { this.getDirectiveText() = "use server" } + } + + /** + * A `use client` directive. + * + * Example: + * + * ``` + * "use client"; + * ``` + */ + class UseClientDirective extends KnownDirective { + UseClientDirective() { this.getDirectiveText() = "use client" } } } -/** - * A SystemJS `format register` directive. - * - * Example: - * - * ``` - * "format register"; - * ``` - */ -class FormatRegisterDirective extends SystemJSFormatDirective { - FormatRegisterDirective() { this.getDirectiveText() = "format register" } -} +/** DEPRECATED. Use `Directive::KnownDirective` instead. */ +deprecated class KnownDirective = Directive::KnownDirective; -/** - * A `ngInject` or `ngNoInject` directive. - * - * Example: - * - * ``` - * "ngInject"; - * ``` - */ -class NgInjectDirective extends KnownDirective { - NgInjectDirective() { this.getDirectiveText().regexpMatch("ng(No)?Inject") } -} +/** DEPRECATED. Use `Directive::StrictModeDecl` instead. */ +deprecated class StrictModeDecl = Directive::StrictModeDecl; -/** - * A YUI compressor directive. - * - * Example: - * - * ``` - * "console:nomunge"; - * ``` - */ -class YuiDirective extends KnownDirective { - YuiDirective() { - this.getDirectiveText().regexpMatch("([a-z0-9_]+:nomunge, ?)*([a-z0-9_]+:nomunge)") - } -} +/** DEPRECATED. Use `Directive::AsmJSDirective` instead. */ +deprecated class AsmJSDirective = Directive::AsmJSDirective; -/** - * A SystemJS `deps` directive. - * - * Example: - * - * ``` - * "deps fs"; - * ``` - */ -class SystemJSDepsDirective extends KnownDirective { - SystemJSDepsDirective() { this.getDirectiveText().regexpMatch("deps [^ ]+") } -} +/** DEPRECATED. Use `Directive::BabelDirective` instead. */ +deprecated class BabelDirective = Directive::BabelDirective; -/** - * A `bundle` directive. - * - * Example: - * - * ``` - * "bundle"; - * ``` - */ -class BundleDirective extends KnownDirective { - BundleDirective() { this.getDirectiveText() = "bundle" } -} +/** DEPRECATED. Use `Directive::SixToFiveDirective` instead. */ +deprecated class SixToFiveDirective = Directive::SixToFiveDirective; + +/** DEPRECATED. Use `Directive::SystemJSFormatDirective` instead. */ +deprecated class SystemJSFormatDirective = Directive::SystemJSFormatDirective; + +/** DEPRECATED. Use `Directive::NgInjectDirective` instead. */ +deprecated class NgInjectDirective = Directive::NgInjectDirective; + +/** DEPRECATED. Use `Directive::YuiDirective` instead. */ +deprecated class YuiDirective = Directive::YuiDirective; + +/** DEPRECATED. Use `Directive::SystemJSDepsDirective` instead. */ +deprecated class SystemJSDepsDirective = Directive::SystemJSDepsDirective; + +/** DEPRECATED. Use `Directive::BundleDirective` instead. */ +deprecated class BundleDirective = Directive::BundleDirective; /** * An `if` statement. diff --git a/javascript/ql/lib/semmle/javascript/XML.qll b/javascript/ql/lib/semmle/javascript/XML.qll index 1a27c9a1ef3..2a351016fd1 100644 --- a/javascript/ql/lib/semmle/javascript/XML.qll +++ b/javascript/ql/lib/semmle/javascript/XML.qll @@ -4,302 +4,67 @@ import semmle.files.FileSystem private import semmle.javascript.internal.Locations +private import codeql.xml.Xml -private class TXmlLocatable = - @xmldtd or @xmlelement or @xmlattribute or @xmlnamespace or @xmlcomment or @xmlcharacters; +private module Input implements InputSig { + class XmlLocatableBase = @xmllocatable or @xmlnamespaceable; -/** An XML element that has a location. */ -class XmlLocatable extends @xmllocatable, TXmlLocatable { - /** Gets the source location for this element. */ - DbLocation getLocation() { result = getLocatableLocation(this) } + predicate xmllocations_(XmlLocatableBase e, DbLocation loc) { loc = getLocatableLocation(e) } - /** - * Holds if this element is at the specified location. - * The location spans column `startcolumn` of line `startline` to - * column `endcolumn` of line `endline` in file `filepath`. - * For more information, see - * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). - */ - predicate hasLocationInfo( - string filepath, int startline, int startcolumn, int endline, int endcolumn + class XmlParentBase = @xmlparent; + + class XmlNamespaceableBase = @xmlnamespaceable; + + class XmlElementBase = @xmlelement; + + class XmlFileBase = File; + + predicate xmlEncoding_(XmlFileBase f, string enc) { xmlEncoding(f, enc) } + + class XmlDtdBase = @xmldtd; + + predicate xmlDTDs_(XmlDtdBase e, string root, string publicId, string systemId, XmlFileBase file) { + xmlDTDs(e, root, publicId, systemId, file) + } + + predicate xmlElements_( + XmlElementBase e, string name, XmlParentBase parent, int idx, XmlFileBase file ) { - this.getLocation().hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) + xmlElements(e, name, parent, idx, file) } - /** Gets a textual representation of this element. */ - string toString() { none() } // overridden in subclasses -} + class XmlAttributeBase = @xmlattribute; -/** - * 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`; - // the type `@xmlparent` currently also includes non-XML files - this instanceof @xmlelement or xmlEncoding(this, _) + predicate xmlAttrs_( + XmlAttributeBase e, XmlElementBase elementid, string name, string value, int idx, + XmlFileBase file + ) { + xmlAttrs(e, elementid, name, value, idx, file) } - /** - * Gets a printable representation of this XML parent. - * (Intended to be overridden in subclasses.) - */ - string getName() { none() } // overridden in subclasses + class XmlNamespaceBase = @xmlnamespace; - /** Gets the file to which this XML parent belongs. */ - 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, _) } - - /** Gets a child element of this XML parent. */ - 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) } - - /** Gets a comment that is a child of this XML parent. */ - XmlComment getAComment() { xmlComments(result, _, this, _) } - - /** Gets a character sequence that is a child of this XML parent. */ - XmlCharacters getACharactersSet() { xmlChars(result, _, this, _, _, _) } - - /** 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, _, _)) } - - /** Gets the number of places in the body of this XML parent where text occurs. */ - int getNumberOfCharacterSets() { result = count(int pos | xmlChars(_, _, this, pos, _, _)) } - - /** - * Gets the result of appending all the character sequences of this XML parent from - * left to right, separated by a space. - */ - string allCharactersString() { - result = - concat(string chars, int pos | xmlChars(_, chars, this, pos, _, _) | chars, " " order by pos) + predicate xmlNs_(XmlNamespaceBase e, string prefixName, string uri, XmlFileBase file) { + xmlNs(e, prefixName, uri, file) } - /** Gets the text value contained in this XML parent. */ - string getTextValue() { result = this.allCharactersString() } + predicate xmlHasNs_(XmlNamespaceableBase e, XmlNamespaceBase ns, XmlFileBase file) { + xmlHasNs(e, ns, file) + } - /** Gets a printable representation of this XML parent. */ - string toString() { result = this.getName() } -} + class XmlCommentBase = @xmlcomment; -/** An XML file. */ -class XmlFile extends XmlParent, File { - XmlFile() { xmlEncoding(this, _) } + predicate xmlComments_(XmlCommentBase e, string text, XmlParentBase parent, XmlFileBase file) { + xmlComments(e, text, parent, file) + } - /** Gets a printable representation of this XML file. */ - override string toString() { result = this.getName() } + class XmlCharactersBase = @xmlcharacters; - /** Gets the name of this XML file. */ - override string getName() { result = File.super.getAbsolutePath() } - - /** Gets the encoding of this XML file. */ - string getEncoding() { xmlEncoding(this, result) } - - /** Gets the XML file itself. */ - override XmlFile getFile() { result = this } - - /** Gets a top-most element in an XML file. */ - XmlElement getARootElement() { result = this.getAChild() } - - /** Gets a DTD associated with this XML file. */ - XmlDtd getADtd() { xmlDTDs(result, _, _, _, this) } -} - -/** - * An XML document type definition (DTD). - * - * Example: - * - * ``` - * - * - * - * ``` - */ -class XmlDtd extends XmlLocatable, @xmldtd { - /** Gets the name of the root element of this DTD. */ - string getRoot() { xmlDTDs(this, result, _, _, _) } - - /** Gets the public ID of this DTD. */ - string getPublicId() { xmlDTDs(this, _, result, _, _) } - - /** Gets the system ID of this DTD. */ - string getSystemId() { xmlDTDs(this, _, _, result, _) } - - /** Holds if this DTD is public. */ - predicate isPublic() { not xmlDTDs(this, _, "", _, _) } - - /** Gets the parent of this DTD. */ - XmlParent getParent() { xmlDTDs(this, _, _, _, result) } - - override string toString() { - this.isPublic() and - result = this.getRoot() + " PUBLIC '" + this.getPublicId() + "' '" + this.getSystemId() + "'" - or - not this.isPublic() and - result = this.getRoot() + " SYSTEM '" + this.getSystemId() + "'" + predicate xmlChars_( + XmlCharactersBase e, string text, XmlParentBase parent, int idx, int isCDATA, XmlFileBase file + ) { + xmlChars(e, text, parent, idx, isCDATA, file) } } -/** - * An XML element in an XML file. - * - * Example: - * - * ``` - * - * - * ``` - */ -class XmlElement extends @xmlelement, XmlParent, XmlLocatable { - /** Holds if this XML element has the given `name`. */ - predicate hasName(string name) { name = this.getName() } - - /** Gets the name of this XML element. */ - override string getName() { xmlElements(this, result, _, _, _) } - - /** Gets the XML file in which this XML element occurs. */ - override XmlFile getFile() { xmlElements(this, _, _, _, result) } - - /** Gets the parent of this XML element. */ - XmlParent getParent() { xmlElements(this, _, result, _, _) } - - /** Gets the index of this XML element among its parent's children. */ - int getIndex() { xmlElements(this, _, _, result, _) } - - /** Holds if this XML element has a namespace. */ - predicate hasNamespace() { xmlHasNs(this, _, _) } - - /** Gets the namespace of this XML element, if any. */ - XmlNamespace getNamespace() { xmlHasNs(this, result, _) } - - /** Gets the index of this XML element among its parent's children. */ - int getElementPositionIndex() { xmlElements(this, _, _, result, _) } - - /** Gets the depth of this element within the XML file tree structure. */ - override int getDepth() { result = this.getParent().getDepth() + 1 } - - /** Gets an XML attribute of this XML element. */ - 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 } - - /** Holds if this XML element has an attribute with the specified `name`. */ - predicate hasAttribute(string name) { exists(this.getAttribute(name)) } - - /** Gets the value of the attribute with the specified `name`, if any. */ - string getAttributeValue(string name) { result = this.getAttribute(name).getValue() } - - /** Gets a printable representation of this XML element. */ - override string toString() { result = this.getName() } -} - -/** - * An attribute that occurs inside an XML element. - * - * Examples: - * - * ``` - * package="com.example.exampleapp" - * android:versionCode="1" - * ``` - */ -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, _, _, _, _) } - - /** Holds if this attribute has a namespace. */ - predicate hasNamespace() { xmlHasNs(this, _, _) } - - /** Gets the namespace of this attribute, if any. */ - XmlNamespace getNamespace() { xmlHasNs(this, result, _) } - - /** Gets the value of this attribute. */ - string getValue() { xmlAttrs(this, _, _, result, _, _) } - - /** Gets a printable representation of this XML attribute. */ - override string toString() { result = this.getName() + "=" + this.getValue() } -} - -/** - * A namespace used in an XML file. - * - * Example: - * - * ``` - * xmlns:android="http://schemas.android.com/apk/res/android" - * ``` - */ -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, _) } - - /** Holds if this namespace has no prefix. */ - predicate isDefault() { this.getPrefix() = "" } - - override string toString() { - this.isDefault() and result = this.getUri() - or - not this.isDefault() and result = this.getPrefix() + ":" + this.getUri() - } -} - -/** - * A comment in an XML file. - * - * Example: - * - * ``` - * - * ``` - */ -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, _) } - - /** Gets a printable representation of this XML comment. */ - override string toString() { result = this.getText() } -} - -/** - * A sequence of characters that occurs between opening and - * closing tags of an XML element, excluding other elements. - * - * Example: - * - * ``` - * This is a sequence of characters. - * ``` - */ -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, _, _, _) } - - /** Holds if this character sequence is CDATA. */ - predicate isCDATA() { xmlChars(this, _, _, _, 1, _) } - - /** Gets a printable representation of this XML character sequence. */ - override string toString() { result = this.getCharacters() } -} +import Make diff --git a/javascript/ql/lib/semmle/javascript/endpoints/EndpointNaming.qll b/javascript/ql/lib/semmle/javascript/endpoints/EndpointNaming.qll index 639b55a1acf..6856dca39a6 100644 --- a/javascript/ql/lib/semmle/javascript/endpoints/EndpointNaming.qll +++ b/javascript/ql/lib/semmle/javascript/endpoints/EndpointNaming.qll @@ -151,7 +151,11 @@ private predicate isPrivateAssignment(DataFlow::Node node) { ) } -private predicate isPrivateLike(API::Node node) { isPrivateAssignment(node.asSink()) } +/** + * Holds if `node` is the sink node corresponding to the right-hand side of a private declaration, + * like a private field (`#field`) or class member with the `private` modifier. + */ +predicate isPrivateLike(API::Node node) { isPrivateAssignment(node.asSink()) } bindingset[name] private int getNameBadness(string name) { diff --git a/javascript/ql/lib/semmle/javascript/frameworks/Bundling.qll b/javascript/ql/lib/semmle/javascript/frameworks/Bundling.qll index ce95fa7f1de..314a6343c9f 100644 --- a/javascript/ql/lib/semmle/javascript/frameworks/Bundling.qll +++ b/javascript/ql/lib/semmle/javascript/frameworks/Bundling.qll @@ -242,7 +242,9 @@ predicate isMultiLicenseBundle(TopLevel tl) { /** * Holds if this is a bundle with a "bundle" directive. */ -predicate isDirectiveBundle(TopLevel tl) { exists(BundleDirective d | d.getTopLevel() = tl) } +predicate isDirectiveBundle(TopLevel tl) { + exists(Directive::BundleDirective d | d.getTopLevel() = tl) +} /** * Holds if toplevel `tl` contains code that looks like the output of a module bundler. diff --git a/javascript/ql/lib/semmle/javascript/frameworks/ServerLess.qll b/javascript/ql/lib/semmle/javascript/frameworks/ServerLess.qll index a88a78fd033..140797dd5db 100644 --- a/javascript/ql/lib/semmle/javascript/frameworks/ServerLess.qll +++ b/javascript/ql/lib/semmle/javascript/frameworks/ServerLess.qll @@ -5,7 +5,7 @@ */ import javascript -import codeql.serverless.ServerLess +private import codeql.serverless.ServerLess private module YamlImpl implements Input { import semmle.javascript.Files diff --git a/javascript/ql/lib/semmle/javascript/frameworks/data/ModelsAsData.qll b/javascript/ql/lib/semmle/javascript/frameworks/data/ModelsAsData.qll index 7fb674dfdba..a109d2b4ead 100644 --- a/javascript/ql/lib/semmle/javascript/frameworks/data/ModelsAsData.qll +++ b/javascript/ql/lib/semmle/javascript/frameworks/data/ModelsAsData.qll @@ -19,6 +19,7 @@ private import javascript private import internal.ApiGraphModels as Shared private import internal.ApiGraphModelsSpecific as Specific +private import semmle.javascript.endpoints.EndpointNaming as EndpointNaming import Shared::ModelInput as ModelInput import Shared::ModelOutput as ModelOutput @@ -55,3 +56,106 @@ private class TaintStepFromSummary extends TaintTracking::SharedTaintStep { summaryStepNodes(pred, succ, "taint") } } + +/** + * Specifies which parts of the API graph to export in `ModelExport`. + */ +signature module ModelExportSig { + /** + * Holds if the exported model should contain `node`, if it is publicly accessible. + * + * This ensures that all ways to access `node` will be exported in type models. + */ + predicate shouldContain(API::Node node); + + /** + * Holds if a named must be generated for `node` if it is to be included in the exported graph. + */ + default predicate mustBeNamed(API::Node node) { none() } + + /** + * Holds if the exported model should preserve all paths leading to an instance of `type`, + * including partial ones. It does not need to be closed transitively, `ModelExport` will + * extend this to include type models from which `type` can be derived. + */ + default predicate shouldContainType(string type) { none() } +} + +/** + * Module for exporting type models for a given set of nodes in the API graph. + */ +module ModelExport { + private import codeql.mad.dynamic.GraphExport + private import internal.ApiGraphModelsExport + + private module GraphExportConfig implements GraphExportSig { + predicate edge = Specific::apiGraphHasEdge/3; + + predicate shouldContain = S::shouldContain/1; + + predicate shouldNotContain(API::Node node) { + EndpointNaming::isPrivateLike(node) + or + node instanceof API::Use + } + + predicate mustBeNamed(API::Node node) { + node.getAValueReachingSink() instanceof DataFlow::ClassNode + or + node = API::Internal::getClassInstance(_) + or + S::mustBeNamed(node) + } + + predicate exposedName(API::Node node, string type, string path) { + node = API::moduleExport(type) and path = "" + } + + predicate suggestedName(API::Node node, string type) { + exists(string package, string name | + ( + EndpointNaming::sinkHasPrimaryName(node, package, name) and + not EndpointNaming::aliasDefinition(_, _, _, _, node) + or + EndpointNaming::aliasDefinition(_, _, package, name, node) + ) and + type = EndpointNaming::renderName(package, name) + ) + } + + bindingset[host] + predicate hasTypeSummary(API::Node host, string path) { + exists(string methodName | + functionReturnsReceiver(host.getMember(methodName).getAValueReachingSink()) and + path = "Member[" + methodName + "].ReturnValue" + ) + } + + pragma[nomagic] + private predicate functionReturnsReceiver(DataFlow::FunctionNode func) { + getAReceiverRef(func).flowsTo(func.getReturnNode()) + } + + pragma[nomagic] + private DataFlow::MethodCallNode getAReceiverCall(DataFlow::FunctionNode func) { + result = getAReceiverRef(func).getAMethodCall() + } + + pragma[nomagic] + private predicate callReturnsReceiver(DataFlow::MethodCallNode call) { + functionReturnsReceiver(call.getACallee().flow()) + } + + pragma[nomagic] + private DataFlow::SourceNode getAReceiverRef(DataFlow::FunctionNode func) { + result = func.getReceiver() + or + result = getAReceiverCall(func) and + callReturnsReceiver(result) + } + } + + private module ExportedGraph = TypeGraphExport; + + import ExportedGraph +} diff --git a/javascript/ql/lib/semmle/javascript/frameworks/data/internal/ApiGraphModels.qll b/javascript/ql/lib/semmle/javascript/frameworks/data/internal/ApiGraphModels.qll index dd433152751..8dea3d67bd8 100644 --- a/javascript/ql/lib/semmle/javascript/frameworks/data/internal/ApiGraphModels.qll +++ b/javascript/ql/lib/semmle/javascript/frameworks/data/internal/ApiGraphModels.qll @@ -267,7 +267,7 @@ private predicate summaryModel(string type, string path, string input, string ou } /** Holds if a type model exists for the given parameters. */ -private predicate typeModel(string type1, string type2, string path) { +predicate typeModel(string type1, string type2, string path) { exists(string row | typeModel(row) and row.splitAt(";", 0) = type1 and @@ -435,7 +435,7 @@ private API::Node getNodeFromType(string type) { * Gets the API node identified by the first `n` tokens of `path` in the given `(type, path)` tuple. */ pragma[nomagic] -private API::Node getNodeFromPath(string type, AccessPath path, int n) { +API::Node getNodeFromPath(string type, AccessPath path, int n) { isRelevantFullPath(type, path) and ( n = 0 and diff --git a/javascript/ql/lib/semmle/javascript/frameworks/data/internal/ApiGraphModelsExport.qll b/javascript/ql/lib/semmle/javascript/frameworks/data/internal/ApiGraphModelsExport.qll new file mode 100644 index 00000000000..477c0a5d267 --- /dev/null +++ b/javascript/ql/lib/semmle/javascript/frameworks/data/internal/ApiGraphModelsExport.qll @@ -0,0 +1,124 @@ +/** + * Contains an extension of `GraphExport` that relies on API graph specific functionality. + */ + +private import ApiGraphModels as Shared +private import codeql.mad.dynamic.GraphExport +private import ApiGraphModelsSpecific as Specific + +private module API = Specific::API; + +private import Shared + +/** + * Holds if some proper prefix of `(type, path)` evaluated to `node`, where `remainingPath` + * is bound to the suffix of `path` that was not evaluated yet. + */ +bindingset[type, path] +predicate partiallyEvaluatedModel(string type, string path, API::Node node, string remainingPath) { + exists(int n, AccessPath accessPath | + accessPath = path and + getNodeFromPath(type, accessPath, n) = node and + n > 0 and + // Note that `n < accessPath.getNumToken()` is implied by the use of strictconcat() + remainingPath = + strictconcat(int k | + k = [n .. accessPath.getNumToken() - 1] + | + accessPath.getToken(k), "." order by k + ) + ) +} + +/** + * Holds if `type` and all types leading to `type` should be re-exported. + */ +signature predicate shouldContainTypeSig(string type); + +/** + * Wrapper around `GraphExport` that also exports information about re-exported types. + * + * ### JavaScript example 1 + * For example, suppose `shouldContainType("foo")` holds, and the following is the entry point for a package `bar`: + * ```js + * // bar.js + * module.exports.xxx = require('foo'); + * ``` + * then this would generate the following type model: + * ``` + * foo; bar; Member[xxx] + * ``` + * + * ### JavaScript example 2 + * For a more complex case, suppose the following type model exists: + * ``` + * foo.XYZ; foo; Member[x].Member[y].Member[z] + * ``` + * And the package exports something that matches a prefix of the access path above: + * ```js + * module.exports.blah = require('foo').x.y; + * ``` + * This would result in the following type model: + * ``` + * foo.XYZ; bar; Member[blah].Member[z] + * ``` + * Notice that the access path `Member[blah].Member[z]` consists of an access path generated from the API + * graph, with pieces of the access path from the original type model appended to it. + */ +module TypeGraphExport< + GraphExportSig S, shouldContainTypeSig/1 shouldContainType> +{ + /** Like `shouldContainType` but includes types that lead to `type` via type models. */ + private predicate shouldContainTypeEx(string type) { + shouldContainType(type) + or + exists(string prevType | + shouldContainType(prevType) and + Shared::typeModel(prevType, type, _) + ) + } + + private module Config implements GraphExportSig { + import S + + predicate shouldContain(API::Node node) { + S::shouldContain(node) + or + exists(string type1 | shouldContainTypeEx(type1) | + ModelOutput::getATypeNode(type1).getAValueReachableFromSource() = node.asSink() + or + exists(string type2, string path | + Shared::typeModel(type1, type2, path) and + getNodeFromPath(type2, path, _).getAValueReachableFromSource() = node.asSink() + ) + ) + } + } + + private module ExportedGraph = GraphExport; + + import ExportedGraph + + /** + * Holds if `type1, type2, path` should be emitted as a type model, that is `(type2, path)` leads to an instance of `type1`. + */ + predicate typeModel(string type1, string type2, string path) { + ExportedGraph::typeModel(type1, type2, path) + or + shouldContainTypeEx(type1) and + exists(API::Node node | + // A relevant type is exported directly + Specific::sourceFlowsToSink(ModelOutput::getATypeNode(type1), node) and + ExportedGraph::pathToNode(type2, path, node) + or + // Something that leads to a relevant type, but didn't finish its access path, is exported + exists(string midType, string midPath, string remainingPath, string prefix, API::Node source | + Shared::typeModel(type1, midType, midPath) and + partiallyEvaluatedModel(midType, midPath, source, remainingPath) and + Specific::sourceFlowsToSink(source, node) and + ExportedGraph::pathToNode(type2, prefix, node) and + path = join(prefix, remainingPath) + ) + ) + } +} diff --git a/javascript/ql/lib/semmle/javascript/frameworks/data/internal/ApiGraphModelsSpecific.qll b/javascript/ql/lib/semmle/javascript/frameworks/data/internal/ApiGraphModelsSpecific.qll index 664c040d57e..8f8f06225ea 100644 --- a/javascript/ql/lib/semmle/javascript/frameworks/data/internal/ApiGraphModelsSpecific.qll +++ b/javascript/ql/lib/semmle/javascript/frameworks/data/internal/ApiGraphModelsSpecific.qll @@ -27,6 +27,8 @@ module API = JS::API; import JS::DataFlow as DataFlow +class Location = JS::Location; + /** * Holds if `rawType` represents the JavaScript type `qualifiedName` from the given NPM `package`. * @@ -353,3 +355,54 @@ module ModelOutputSpecific { ) } } + +/** + * Holds if the edge `pred -> succ` labelled with `path` exists in the API graph. + */ +bindingset[pred] +predicate apiGraphHasEdge(API::Node pred, string path, API::Node succ) { + exists(string name | succ = pred.getMember(name) and path = "Member[" + name + "]") + or + succ = pred.getUnknownMember() and path = "AnyMember" + or + succ = pred.getInstance() and path = "Instance" + or + succ = pred.getReturn() and path = "ReturnValue" + or + exists(int n | succ = pred.getParameter(n) | + if pred instanceof API::Use then path = "Argument[" + n + "]" else path = "Parameter[" + n + "]" + ) + or + succ = pred.getPromised() and path = "Awaited" + or + exists(DataFlow::ClassNode cls | + pred = API::Internal::getClassInstance(cls.getADirectSubClass()) and + succ = API::Internal::getClassInstance(cls) and + path = "" + ) +} + +/** + * Holds if the value of `source` is exposed at `sink`. + */ +bindingset[source] +predicate sourceFlowsToSink(API::Node source, API::Node sink) { + source.getAValueReachableFromSource() = sink.asSink() + or + // Handle the case of an upstream class being the base class of an exposed own class + // + // class Foo extends external.BaseClass {} + // + // Here we want to ensure that `Instance(Foo)` is seen as subtype of `Instance(external.BaseClass)`. + // + // Although we have a dedicated sink node for `Instance(Foo)` we don't have dedicate source node for `Instance(external.BaseClass)`. + // + // However, there is always an `Instance` edge from the base class expression (`external.BaseClass`) + // to the receiver node in subclass constructor (the implicit constructor of `Foo`), which always exists. + // So we use the constructor receiver as the representative for `Instance(external.BaseClass)`. + // (This will get simplified when migrating to Ruby-style API graphs, as both sides will have explicit API nodes). + exists(DataFlow::ClassNode cls | + source.asSource() = cls.getConstructor().getReceiver() and + sink = API::Internal::getClassInstance(cls) + ) +} diff --git a/javascript/ql/src/CHANGELOG.md b/javascript/ql/src/CHANGELOG.md index 85516e3625d..2ae12bca484 100644 --- a/javascript/ql/src/CHANGELOG.md +++ b/javascript/ql/src/CHANGELOG.md @@ -1,3 +1,25 @@ +## 0.8.13 + +### Query Metadata Changes + +* The `@precision` of the `js/unsafe-external-link` has been reduced to `low` to reflect the fact that modern browsers do not expose the opening window for such links. This mitigates the potential security risk of having a link with `target="_blank"`. + +### Minor Analysis Improvements + +* The call graph has been improved, leading to more alerts for data flow based queries. + +## 0.8.12 + +No user-facing changes. + +## 0.8.11 + +No user-facing changes. + +## 0.8.10 + +No user-facing changes. + ## 0.8.9 ### Bug Fixes diff --git a/javascript/ql/src/DOM/TargetBlank.qhelp b/javascript/ql/src/DOM/TargetBlank.qhelp index f0e7ca37500..e1b1fd8e7f2 100644 --- a/javascript/ql/src/DOM/TargetBlank.qhelp +++ b/javascript/ql/src/DOM/TargetBlank.qhelp @@ -9,6 +9,14 @@ of the origin page using window.opener unless link type noope or noreferrer is specified. This is a potential security risk.

    +

    +Note that only older browsers, where target="_blank" does not imply rel="noopener", +are affected by this vulnerability. Modern browsers implicitly add rel="noopener" to +target="_blank" links. +Refer to the browser compatibility section +on the anchor element for details on which browsers implicitly add rel="noopener" to target="_blank" links. +

    + diff --git a/javascript/ql/src/DOM/TargetBlank.ql b/javascript/ql/src/DOM/TargetBlank.ql index fb63737f678..dc7f1d65e79 100644 --- a/javascript/ql/src/DOM/TargetBlank.ql +++ b/javascript/ql/src/DOM/TargetBlank.ql @@ -10,7 +10,7 @@ * security * external/cwe/cwe-200 * external/cwe/cwe-1022 - * @precision very-high + * @precision low */ import javascript diff --git a/javascript/ql/src/Expressions/UnknownDirective.ql b/javascript/ql/src/Expressions/UnknownDirective.ql index fc0ef67aa61..331b61cafda 100644 --- a/javascript/ql/src/Expressions/UnknownDirective.ql +++ b/javascript/ql/src/Expressions/UnknownDirective.ql @@ -12,7 +12,7 @@ import javascript from Directive d where - not d instanceof KnownDirective and + not d instanceof Directive::KnownDirective and // ignore ":" pseudo-directive sometimes seen in dual-use shell/node.js scripts not d.getExpr().getStringValue() = ":" and // but exclude attribute top-levels: `` diff --git a/javascript/ql/src/Summary/LinesOfUserCode.ql b/javascript/ql/src/Summary/LinesOfUserCode.ql index 61ad13519cb..1f8f2b9fef7 100644 --- a/javascript/ql/src/Summary/LinesOfUserCode.ql +++ b/javascript/ql/src/Summary/LinesOfUserCode.ql @@ -6,6 +6,7 @@ * @kind metric * @tags summary * lines-of-code + * debug * @id js/summary/lines-of-user-code */ diff --git a/javascript/ql/src/change-notes/2024-03-07-lift-cg-restriction.md b/javascript/ql/src/change-notes/2024-03-07-lift-cg-restriction.md deleted file mode 100644 index 4d591aaf9a2..00000000000 --- a/javascript/ql/src/change-notes/2024-03-07-lift-cg-restriction.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* The call graph has been improved, leading to more alerts for data flow based queries. diff --git a/javascript/ql/src/change-notes/2024-04-08-instance-to-subclasses.md b/javascript/ql/src/change-notes/2024-04-08-instance-to-subclasses.md new file mode 100644 index 00000000000..cae4bea6ab3 --- /dev/null +++ b/javascript/ql/src/change-notes/2024-04-08-instance-to-subclasses.md @@ -0,0 +1,5 @@ +--- +category: minorAnalysis +--- +* `API::Node#getInstance()` now includes instances of subclasses, include transitive subclasses. + The same changes applies to uses of the `Instance` token in data extensions. diff --git a/javascript/ql/src/change-notes/released/0.8.10.md b/javascript/ql/src/change-notes/released/0.8.10.md new file mode 100644 index 00000000000..777bbd2fded --- /dev/null +++ b/javascript/ql/src/change-notes/released/0.8.10.md @@ -0,0 +1,3 @@ +## 0.8.10 + +No user-facing changes. diff --git a/javascript/ql/src/change-notes/released/0.8.11.md b/javascript/ql/src/change-notes/released/0.8.11.md new file mode 100644 index 00000000000..6f504c5c207 --- /dev/null +++ b/javascript/ql/src/change-notes/released/0.8.11.md @@ -0,0 +1,3 @@ +## 0.8.11 + +No user-facing changes. diff --git a/javascript/ql/src/change-notes/released/0.8.12.md b/javascript/ql/src/change-notes/released/0.8.12.md new file mode 100644 index 00000000000..bc91afe9c1e --- /dev/null +++ b/javascript/ql/src/change-notes/released/0.8.12.md @@ -0,0 +1,3 @@ +## 0.8.12 + +No user-facing changes. diff --git a/javascript/ql/src/change-notes/released/0.8.13.md b/javascript/ql/src/change-notes/released/0.8.13.md new file mode 100644 index 00000000000..282e759a49e --- /dev/null +++ b/javascript/ql/src/change-notes/released/0.8.13.md @@ -0,0 +1,9 @@ +## 0.8.13 + +### Query Metadata Changes + +* The `@precision` of the `js/unsafe-external-link` has been reduced to `low` to reflect the fact that modern browsers do not expose the opening window for such links. This mitigates the potential security risk of having a link with `target="_blank"`. + +### Minor Analysis Improvements + +* The call graph has been improved, leading to more alerts for data flow based queries. diff --git a/javascript/ql/src/codeql-pack.release.yml b/javascript/ql/src/codeql-pack.release.yml index 5290c29b7fe..0fb6f3d786c 100644 --- a/javascript/ql/src/codeql-pack.release.yml +++ b/javascript/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.8.9 +lastReleaseVersion: 0.8.13 diff --git a/javascript/ql/src/qlpack.yml b/javascript/ql/src/qlpack.yml index b6181aa30e9..ffae5cff5fc 100644 --- a/javascript/ql/src/qlpack.yml +++ b/javascript/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/javascript-queries -version: 0.8.10-dev +version: 0.8.14-dev groups: - javascript - queries diff --git a/javascript/ql/test/library-tests/Directives/KnownDirective.ql b/javascript/ql/test/library-tests/Directives/KnownDirective.ql index e1119b38654..f9d1ee32664 100644 --- a/javascript/ql/test/library-tests/Directives/KnownDirective.ql +++ b/javascript/ql/test/library-tests/Directives/KnownDirective.ql @@ -1,4 +1,4 @@ import javascript -from KnownDirective d +from Directive::KnownDirective d select d, d.getDirectiveText() diff --git a/javascript/ql/test/library-tests/ModelGeneration/ModelGeneration.expected b/javascript/ql/test/library-tests/ModelGeneration/ModelGeneration.expected new file mode 100644 index 00000000000..e6c93a1a0e8 --- /dev/null +++ b/javascript/ql/test/library-tests/ModelGeneration/ModelGeneration.expected @@ -0,0 +1,65 @@ +typeModel +| (aliases).Alias1 | aliases | Member[Alias1] | +| (aliases).Alias1 | aliases | Member[Alias2] | +| (aliases).Alias1 | aliases | Member[Alias3].Member[x] | +| (aliases).Alias1 | aliases | Member[Alias4].Member[x].Member[x] | +| (aliases).Alias1 | aliases | Member[AliasedClass] | +| (aliases).Alias1.prototype | (aliases).Alias1 | Instance | +| (aliases).Alias1.prototype.foo | (aliases).Alias1.prototype | Member[foo] | +| (long-access-path).a.shortcut.d | long-access-path | Member[a].Member[b].Member[c].Member[d] | +| (long-access-path).a.shortcut.d | long-access-path | Member[a].Member[shortcut].Member[d] | +| (long-access-path).a.shortcut.d.e | (long-access-path).a.shortcut.d | Member[e] | +| (reexport).func | reexport | Member[func] | +| (return-this).FluentInterface | return-this | Member[FluentInterface] | +| (return-this).FluentInterface.prototype | (return-this).FluentInterface | Instance | +| (return-this).FluentInterface.prototype | (return-this).FluentInterface.prototype.bar | ReturnValue | +| (return-this).FluentInterface.prototype | (return-this).FluentInterface.prototype.baz | ReturnValue | +| (return-this).FluentInterface.prototype.bar | (return-this).FluentInterface.prototype | Member[bar] | +| (return-this).FluentInterface.prototype.baz | (return-this).FluentInterface.prototype | Member[baz] | +| (return-this).FluentInterface.prototype.foo | (return-this).FluentInterface.prototype | Member[foo] | +| (return-this).FluentInterface.prototype.notFluent | (return-this).FluentInterface.prototype | Member[notFluent] | +| (return-this).FluentInterface.prototype.notFluent2 | (return-this).FluentInterface.prototype | Member[notFluent2] | +| (root-function).PublicClass | root-function | Member[PublicClass] | +| (root-function).PublicClass.prototype | (root-function).PublicClass | Instance | +| (root-function).PublicClass.prototype | root-function | ReturnValue | +| (root-function).PublicClass.prototype.method | (root-function).PublicClass.prototype | Member[method] | +| (semi-internal-class).PublicClass | semi-internal-class | Member[PublicClass] | +| (semi-internal-class).PublicClass.prototype | (semi-internal-class).PublicClass | Instance | +| (semi-internal-class).PublicClass.prototype | (semi-internal-class).SemiInternalClass.prototype.method | ReturnValue | +| (semi-internal-class).PublicClass.prototype | (semi-internal-class).getAnonymous~expr2 | ReturnValue | +| (semi-internal-class).PublicClass.prototype.publicMethod | (semi-internal-class).PublicClass.prototype | Member[publicMethod] | +| (semi-internal-class).SemiInternalClass.prototype | (semi-internal-class).get | ReturnValue | +| (semi-internal-class).SemiInternalClass.prototype.method | (semi-internal-class).SemiInternalClass.prototype | Member[method] | +| (semi-internal-class).get | semi-internal-class | Member[get] | +| (semi-internal-class).getAnonymous | semi-internal-class | Member[getAnonymous] | +| (semi-internal-class).getAnonymous~expr1 | (semi-internal-class).getAnonymous | ReturnValue | +| (semi-internal-class).getAnonymous~expr2 | (semi-internal-class).getAnonymous~expr1 | Member[method] | +| (subclass).A | subclass | Member[A] | +| (subclass).A.prototype | (subclass).A | Instance | +| (subclass).A.prototype | (subclass).B.prototype | | +| (subclass).A.prototype | (subclass).ExposedMidSubClass.prototype~expr1 | | +| (subclass).A.prototype.a | (subclass).A.prototype | Member[a] | +| (subclass).B | subclass | Member[B] | +| (subclass).B.prototype | (subclass).B | Instance | +| (subclass).B.prototype | (subclass).C.prototype | | +| (subclass).B.prototype.b | (subclass).B.prototype | Member[b] | +| (subclass).C | subclass | Member[C] | +| (subclass).C.prototype | (subclass).C | Instance | +| (subclass).C.prototype.c | (subclass).C.prototype | Member[c] | +| (subclass).D | subclass | Member[D] | +| (subclass).D.prototype | (subclass).D | Instance | +| (subclass).D.prototype.d | (subclass).D.prototype | Member[d] | +| (subclass).ExposedMidSubClass | subclass | Member[ExposedMidSubClass] | +| (subclass).ExposedMidSubClass.prototype | (subclass).ExposedMidSubClass | Instance | +| (subclass).ExposedMidSubClass.prototype.m | (subclass).ExposedMidSubClass.prototype | Member[m] | +| (subclass).ExposedMidSubClass.prototype~expr1 | (subclass).ExposedMidSubClass.prototype | | +| upstream-lib | (reexport).func | ReturnValue | +| upstream-lib | reexport | Member[lib] | +| upstream-lib.Type | (subclass).D.prototype | | +| upstream-lib.XYZ | reexport | Member[x].Member[y].Member[z] | +| upstream-lib.XYZ | reexport | Member[xy].Member[z] | +summaryModel +| (aliases).Alias1.prototype | | | Member[foo].ReturnValue | type | +| (return-this).FluentInterface.prototype | | | Member[bar].ReturnValue | type | +| (return-this).FluentInterface.prototype | | | Member[baz].ReturnValue | type | +| (return-this).FluentInterface.prototype | | | Member[foo].ReturnValue | type | diff --git a/javascript/ql/test/library-tests/ModelGeneration/ModelGeneration.ext.yml b/javascript/ql/test/library-tests/ModelGeneration/ModelGeneration.ext.yml new file mode 100644 index 00000000000..22113126a9c --- /dev/null +++ b/javascript/ql/test/library-tests/ModelGeneration/ModelGeneration.ext.yml @@ -0,0 +1,7 @@ +extensions: + - addsTo: + pack: codeql/javascript-all + extensible: typeModel + data: + - ["upstream-lib.XYZ", "upstream-lib", "Member[x].Member[y].Member[z]"] + - ["upstream-lib.Type", "upstream-lib", "Member[Type].Instance"] diff --git a/javascript/ql/test/library-tests/ModelGeneration/ModelGeneration.ql b/javascript/ql/test/library-tests/ModelGeneration/ModelGeneration.ql new file mode 100644 index 00000000000..2d5ac3eb423 --- /dev/null +++ b/javascript/ql/test/library-tests/ModelGeneration/ModelGeneration.ql @@ -0,0 +1,19 @@ +private import javascript +private import semmle.javascript.endpoints.EndpointNaming as EndpointNaming +private import semmle.javascript.frameworks.data.internal.ApiGraphModels as Shared + +module ModelExportConfig implements ModelExportSig { + predicate shouldContain(API::Node node) { + node.getAValueReachingSink() instanceof DataFlow::FunctionNode + } + + predicate mustBeNamed(API::Node node) { shouldContain(node) } + + predicate shouldContainType(string type) { Shared::isRelevantType(type) } +} + +module Exported = ModelExport; + +query predicate typeModel = Exported::typeModel/3; + +query predicate summaryModel = Exported::summaryModel/5; diff --git a/javascript/ql/test/library-tests/ModelGeneration/aliases/aliases.js b/javascript/ql/test/library-tests/ModelGeneration/aliases/aliases.js new file mode 100644 index 00000000000..a9874a88744 --- /dev/null +++ b/javascript/ql/test/library-tests/ModelGeneration/aliases/aliases.js @@ -0,0 +1,9 @@ +export class AliasedClass { + foo() { return this; } +} + +export const Alias1 = AliasedClass; +export const Alias2 = AliasedClass; + +export const Alias3 = { x: AliasedClass }; +export const Alias4 = { x: Alias3 }; diff --git a/javascript/ql/test/library-tests/ModelGeneration/aliases/package.json b/javascript/ql/test/library-tests/ModelGeneration/aliases/package.json new file mode 100644 index 00000000000..2356a50733f --- /dev/null +++ b/javascript/ql/test/library-tests/ModelGeneration/aliases/package.json @@ -0,0 +1,4 @@ +{ + "name": "aliases", + "main": "aliases.js" +} diff --git a/javascript/ql/test/library-tests/ModelGeneration/long-access-path/long-access-path.js b/javascript/ql/test/library-tests/ModelGeneration/long-access-path/long-access-path.js new file mode 100644 index 00000000000..e596ca26ea3 --- /dev/null +++ b/javascript/ql/test/library-tests/ModelGeneration/long-access-path/long-access-path.js @@ -0,0 +1,11 @@ +export const a = { + b: { + c: { + d: { + e: function() {} + } + } + } +}; + +a.shortcut = a.b.c; diff --git a/javascript/ql/test/library-tests/ModelGeneration/long-access-path/package.json b/javascript/ql/test/library-tests/ModelGeneration/long-access-path/package.json new file mode 100644 index 00000000000..7b45f4d3899 --- /dev/null +++ b/javascript/ql/test/library-tests/ModelGeneration/long-access-path/package.json @@ -0,0 +1,4 @@ +{ + "name": "long-access-path", + "main": "long-access-path.js" +} diff --git a/javascript/ql/test/library-tests/ModelGeneration/reexport/package.json b/javascript/ql/test/library-tests/ModelGeneration/reexport/package.json new file mode 100644 index 00000000000..85258b89fa9 --- /dev/null +++ b/javascript/ql/test/library-tests/ModelGeneration/reexport/package.json @@ -0,0 +1,4 @@ +{ + "name": "reexport", + "main": "reexport.js" +} diff --git a/javascript/ql/test/library-tests/ModelGeneration/reexport/reexport.js b/javascript/ql/test/library-tests/ModelGeneration/reexport/reexport.js new file mode 100644 index 00000000000..86b43f5820a --- /dev/null +++ b/javascript/ql/test/library-tests/ModelGeneration/reexport/reexport.js @@ -0,0 +1,10 @@ +import * as lib from "upstream-lib"; + +export { lib }; + +export const x = lib.x; +export const xy = lib.x.y; + +export function func() { + return lib; +} diff --git a/javascript/ql/test/library-tests/ModelGeneration/return-this/package.json b/javascript/ql/test/library-tests/ModelGeneration/return-this/package.json new file mode 100644 index 00000000000..34b1e65149f --- /dev/null +++ b/javascript/ql/test/library-tests/ModelGeneration/return-this/package.json @@ -0,0 +1,4 @@ +{ + "name": "return-this", + "main": "return-this.js" +} diff --git a/javascript/ql/test/library-tests/ModelGeneration/return-this/return-this.js b/javascript/ql/test/library-tests/ModelGeneration/return-this/return-this.js new file mode 100644 index 00000000000..6ad6004511a --- /dev/null +++ b/javascript/ql/test/library-tests/ModelGeneration/return-this/return-this.js @@ -0,0 +1,17 @@ +export class FluentInterface { + foo() { + return this; + } + bar() { + return this.foo(); + } + baz() { + return this.foo().bar().bar().foo(); + } + notFluent() { + this.foo(); + } + notFluent2() { + return this.notFluent2(); + } +} diff --git a/javascript/ql/test/library-tests/ModelGeneration/root-function/package.json b/javascript/ql/test/library-tests/ModelGeneration/root-function/package.json new file mode 100644 index 00000000000..46b6d4e2bda --- /dev/null +++ b/javascript/ql/test/library-tests/ModelGeneration/root-function/package.json @@ -0,0 +1,4 @@ +{ + "name": "root-function", + "main": "root-function.js" +} diff --git a/javascript/ql/test/library-tests/ModelGeneration/root-function/root-function.js b/javascript/ql/test/library-tests/ModelGeneration/root-function/root-function.js new file mode 100644 index 00000000000..0d33f553681 --- /dev/null +++ b/javascript/ql/test/library-tests/ModelGeneration/root-function/root-function.js @@ -0,0 +1,9 @@ +class C { + method() {} +} + +module.exports = function() { + return new C(); +} + +module.exports.PublicClass = C; diff --git a/javascript/ql/test/library-tests/ModelGeneration/semi-internal-class/package.json b/javascript/ql/test/library-tests/ModelGeneration/semi-internal-class/package.json new file mode 100644 index 00000000000..18a689163b5 --- /dev/null +++ b/javascript/ql/test/library-tests/ModelGeneration/semi-internal-class/package.json @@ -0,0 +1,4 @@ +{ + "name": "semi-internal-class", + "main": "semi-internal-class.js" +} diff --git a/javascript/ql/test/library-tests/ModelGeneration/semi-internal-class/semi-internal-class.js b/javascript/ql/test/library-tests/ModelGeneration/semi-internal-class/semi-internal-class.js new file mode 100644 index 00000000000..962f1933032 --- /dev/null +++ b/javascript/ql/test/library-tests/ModelGeneration/semi-internal-class/semi-internal-class.js @@ -0,0 +1,21 @@ +export class PublicClass { + publicMethod() {} +} + +class SemiInternalClass { + method() { + return new PublicClass(); + } +} + +export function get() { + return new SemiInternalClass(); +} + +export function getAnonymous() { + return new (class { + method() { + return new PublicClass(); + } + }); +} diff --git a/javascript/ql/test/library-tests/ModelGeneration/subclass/package.json b/javascript/ql/test/library-tests/ModelGeneration/subclass/package.json new file mode 100644 index 00000000000..0764886a0db --- /dev/null +++ b/javascript/ql/test/library-tests/ModelGeneration/subclass/package.json @@ -0,0 +1,4 @@ +{ + "name": "subclass", + "main": "subclass.js" +} diff --git a/javascript/ql/test/library-tests/ModelGeneration/subclass/subclass.js b/javascript/ql/test/library-tests/ModelGeneration/subclass/subclass.js new file mode 100644 index 00000000000..6cbfbabad0e --- /dev/null +++ b/javascript/ql/test/library-tests/ModelGeneration/subclass/subclass.js @@ -0,0 +1,24 @@ +export class A { + a() {} +} + +export class B extends A { + b() {} +} + +export class C extends B { + c() {} +} + +import * as upstream from "upstream-lib"; + +export class D extends upstream.Type { + d() {} +} + +// Test case where subclass chain goes through an internal class +class InternalMidClass extends A {} + +export class ExposedMidSubClass extends InternalMidClass { + m() {} +} diff --git a/javascript/ql/test/library-tests/frameworks/data/test.expected b/javascript/ql/test/library-tests/frameworks/data/test.expected index 28d7229789d..843b1f32d5b 100644 --- a/javascript/ql/test/library-tests/frameworks/data/test.expected +++ b/javascript/ql/test/library-tests/frameworks/data/test.expected @@ -74,6 +74,10 @@ taintFlow | test.js:249:28:249:35 | source() | test.js:249:28:249:35 | source() | | test.js:252:15:252:22 | source() | test.js:252:15:252:22 | source() | | test.js:254:32:254:39 | source() | test.js:254:32:254:39 | source() | +| test.js:262:10:262:31 | this.ba ... ource() | test.js:262:10:262:31 | this.ba ... ource() | +| test.js:265:6:265:39 | new MyS ... ource() | test.js:265:6:265:39 | new MyS ... ource() | +| test.js:269:10:269:31 | this.ba ... ource() | test.js:269:10:269:31 | this.ba ... ource() | +| test.js:272:6:272:40 | new MyS ... ource() | test.js:272:6:272:40 | new MyS ... ource() | isSink | test.js:54:18:54:25 | source() | test-sink | | test.js:55:22:55:29 | source() | test-sink | diff --git a/javascript/ql/test/library-tests/frameworks/data/test.js b/javascript/ql/test/library-tests/frameworks/data/test.js index ac702b82a8c..bbcb10418a1 100644 --- a/javascript/ql/test/library-tests/frameworks/data/test.js +++ b/javascript/ql/test/library-tests/frameworks/data/test.js @@ -256,3 +256,17 @@ function fuzzy() { fuzzyCall(source()); // OK - does not come from 'testlib' require('blah').fuzzyCall(source()); // OK - does not come from 'testlib' } + +class MySubclass extends testlib.BaseClass { + foo() { + sink(this.baseclassSource()); // NOT OK + } +} +sink(new MySubclass().baseclassSource()); // NOT OK + +class MySubclass2 extends MySubclass { + foo2() { + sink(this.baseclassSource()); // NOT OK + } +} +sink(new MySubclass2().baseclassSource()); // NOT OK diff --git a/javascript/ql/test/library-tests/frameworks/data/test.ql b/javascript/ql/test/library-tests/frameworks/data/test.ql index 039a0aa3920..6af176f4bf3 100644 --- a/javascript/ql/test/library-tests/frameworks/data/test.ql +++ b/javascript/ql/test/library-tests/frameworks/data/test.ql @@ -80,6 +80,7 @@ class Sources extends ModelInput::SourceModelCsv { "testlib;Member[ParamDecoratorSource].DecoratedParameter;test-source", "testlib;Member[MethodDecorator].DecoratedMember.Parameter[0];test-source", "testlib;Member[MethodDecoratorWithArgs].ReturnValue.DecoratedMember.Parameter[0];test-source", + "testlib;Member[BaseClass].Instance.Member[baseclassSource].ReturnValue;test-source", ] } } diff --git a/javascript/ql/test/query-tests/Expressions/UnknownDirective/UnknownDirective.expected b/javascript/ql/test/query-tests/Expressions/UnknownDirective/UnknownDirective.expected index 4968baa31ee..87922ff82a2 100644 --- a/javascript/ql/test/query-tests/Expressions/UnknownDirective/UnknownDirective.expected +++ b/javascript/ql/test/query-tests/Expressions/UnknownDirective/UnknownDirective.expected @@ -11,7 +11,7 @@ | UnknownDirective.js:12:5:12:17 | "use struct;" | Unknown directive: 'use struct;'. | | UnknownDirective.js:13:5:13:17 | "Use Strict"; | Unknown directive: 'Use Strict'. | | UnknownDirective.js:14:5:14:14 | "use bar"; | Unknown directive: 'use bar'. | -| UnknownDirective.js:38:5:38:17 | "[0, 0, 0];"; | Unknown directive: '[0, 0, 0];'. | -| UnknownDirective.js:39:5:39:65 | "[0, 0, ... , 0];"; | Unknown directive: '[0, 0, 0, 0, 0, 0, 0 ... (truncated)'. | -| UnknownDirective.js:45:5:45:15 | ":nomunge"; | Unknown directive: ':nomunge'. | -| UnknownDirective.js:46:5:46:30 | "foo(), ... munge"; | Unknown directive: 'foo(), bar, baz:nomu ... (truncated)'. | +| UnknownDirective.js:40:5:40:17 | "[0, 0, 0];"; | Unknown directive: '[0, 0, 0];'. | +| UnknownDirective.js:41:5:41:65 | "[0, 0, ... , 0];"; | Unknown directive: '[0, 0, 0, 0, 0, 0, 0 ... (truncated)'. | +| UnknownDirective.js:47:5:47:15 | ":nomunge"; | Unknown directive: ':nomunge'. | +| UnknownDirective.js:48:5:48:30 | "foo(), ... munge"; | Unknown directive: 'foo(), bar, baz:nomu ... (truncated)'. | diff --git a/javascript/ql/test/query-tests/Expressions/UnknownDirective/UnknownDirective.js b/javascript/ql/test/query-tests/Expressions/UnknownDirective/UnknownDirective.js index c7ced70ea30..0645f8821a1 100644 --- a/javascript/ql/test/query-tests/Expressions/UnknownDirective/UnknownDirective.js +++ b/javascript/ql/test/query-tests/Expressions/UnknownDirective/UnknownDirective.js @@ -32,6 +32,8 @@ function good() { "ngNoInject"; // OK "deps foo"; // OK "deps bar"; // OK + "use server"; // OK + "use client"; // OK } function data() { @@ -46,6 +48,6 @@ function yui() { "foo(), bar, baz:nomunge"; // NOT OK } -function babel_typeof(obj) { +function babel_typeof(obj) { "@babel/helpers - typeof" -} \ No newline at end of file +} diff --git a/misc/suite-helpers/CHANGELOG.md b/misc/suite-helpers/CHANGELOG.md index 3c06dd69b0f..3b1863cfbf1 100644 --- a/misc/suite-helpers/CHANGELOG.md +++ b/misc/suite-helpers/CHANGELOG.md @@ -1,3 +1,19 @@ +## 0.7.13 + +No user-facing changes. + +## 0.7.12 + +No user-facing changes. + +## 0.7.11 + +No user-facing changes. + +## 0.7.10 + +No user-facing changes. + ## 0.7.9 No user-facing changes. diff --git a/misc/suite-helpers/change-notes/released/0.7.10.md b/misc/suite-helpers/change-notes/released/0.7.10.md new file mode 100644 index 00000000000..989c5b8f682 --- /dev/null +++ b/misc/suite-helpers/change-notes/released/0.7.10.md @@ -0,0 +1,3 @@ +## 0.7.10 + +No user-facing changes. diff --git a/misc/suite-helpers/change-notes/released/0.7.11.md b/misc/suite-helpers/change-notes/released/0.7.11.md new file mode 100644 index 00000000000..c4d7e2d3775 --- /dev/null +++ b/misc/suite-helpers/change-notes/released/0.7.11.md @@ -0,0 +1,3 @@ +## 0.7.11 + +No user-facing changes. diff --git a/misc/suite-helpers/change-notes/released/0.7.12.md b/misc/suite-helpers/change-notes/released/0.7.12.md new file mode 100644 index 00000000000..cb88422480b --- /dev/null +++ b/misc/suite-helpers/change-notes/released/0.7.12.md @@ -0,0 +1,3 @@ +## 0.7.12 + +No user-facing changes. diff --git a/misc/suite-helpers/change-notes/released/0.7.13.md b/misc/suite-helpers/change-notes/released/0.7.13.md new file mode 100644 index 00000000000..fac5f02103f --- /dev/null +++ b/misc/suite-helpers/change-notes/released/0.7.13.md @@ -0,0 +1,3 @@ +## 0.7.13 + +No user-facing changes. diff --git a/misc/suite-helpers/codeql-pack.release.yml b/misc/suite-helpers/codeql-pack.release.yml index 576395f3405..8a077216acc 100644 --- a/misc/suite-helpers/codeql-pack.release.yml +++ b/misc/suite-helpers/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.7.9 +lastReleaseVersion: 0.7.13 diff --git a/misc/suite-helpers/qlpack.yml b/misc/suite-helpers/qlpack.yml index 49b7a6bda4c..b97bfa5c48e 100644 --- a/misc/suite-helpers/qlpack.yml +++ b/misc/suite-helpers/qlpack.yml @@ -1,4 +1,4 @@ name: codeql/suite-helpers -version: 0.7.10-dev +version: 0.7.14-dev groups: shared warnOnImplicitThis: true diff --git a/python/BUILD.bazel b/python/BUILD.bazel index e6d1387e4c2..481dbbd0dd8 100644 --- a/python/BUILD.bazel +++ b/python/BUILD.bazel @@ -1,4 +1,6 @@ -load("@rules_pkg//:mappings.bzl", "pkg_filegroup", "pkg_files") +load("@rules_pkg//pkg:mappings.bzl", "pkg_filegroup", "pkg_files") +load("@semmle_code//:dist.bzl", "dist", "pack_zip") +load("//:defs.bzl", "codeql_platform") package(default_visibility = ["//visibility:public"]) @@ -28,3 +30,32 @@ pkg_filegroup( "//python/downgrades", ], ) + +pkg_files( + name = "codeql-extractor-yml", + srcs = ["codeql-extractor.yml"], + strip_prefix = None, +) + +dist( + name = "extractor-generic", + srcs = [ + ":codeql-extractor-yml", + ":dbscheme-group", + "//python/downgrades", + "//python/extractor", + "//python/tools", + ], + prefix = "python", + visibility = ["//visibility:public"], +) + +pack_zip( + name = "extractor-arch", + srcs = [ + "//python/extractor/tsg-python", + ], + package_file_name = "extractor-" + codeql_platform + ".zip", + prefix = "python/tools/" + codeql_platform, + visibility = ["//visibility:public"], +) diff --git a/python/codeql-extractor.yml b/python/codeql-extractor.yml new file mode 100644 index 00000000000..97a9e1f2cf2 --- /dev/null +++ b/python/codeql-extractor.yml @@ -0,0 +1,46 @@ +name: "python" +display_name: "Python" +version: 1.22.1 +column_kind: utf32 +build_modes: + - none +github_api_languages: + - Python +scc_languages: + - Python +file_types: + - name: python + display_name: Python sources + extensions: + - .py +legacy_qltest_extraction: true +options: + logging: + title: Options pertaining to logging. + type: object + properties: + verbosity: + title: Python extractor logging verbosity level. + description: > + Controls the level of verbosity of the CodeQL Python extractor. + + The supported levels are (in order of increasing verbosity): + + - off + - errors + - warnings + - info or progress + - debug or progress+ + - trace or progress++ + - progress+++ + type: string + pattern: "^(off|errors|warnings|(info|progress)|(debug|progress\\+)|(trace|progress\\+\\+)|progress\\+\\+\\+)$" + python_executable_name: + title: Controls the name of the Python executable used by the Python extractor. + description: > + The Python extractor uses platform-dependent heuristics to determine the name of the Python executable to use. + Specifying a value for this option overrides the name of the Python executable used by the extractor. + Accepted values are py, python and python3. + Use this setting with caution, the Python extractor requires Python 3 to run. + type: string + pattern: "^(py|python|python3)$" diff --git a/python/extractor/BUILD.bazel b/python/extractor/BUILD.bazel index 4e93f539bde..3b5a5b3a617 100644 --- a/python/extractor/BUILD.bazel +++ b/python/extractor/BUILD.bazel @@ -1,4 +1,4 @@ -load("//:dist.bzl", "pack_zip") +load("@semmle_code//:dist.bzl", "pack_zip") py_binary( name = "make-zips-py", @@ -33,7 +33,7 @@ genrule( ) pack_zip( - name = "extractor-python", + name = "extractor", srcs = [ "LICENSE-PSF.md", # because we distribute imp.py "convert_setup.py", diff --git a/python/extractor/buildtools/index.py b/python/extractor/buildtools/index.py index 10521868313..ec6f45d62c7 100644 --- a/python/extractor/buildtools/index.py +++ b/python/extractor/buildtools/index.py @@ -76,28 +76,11 @@ def get_filter_options(): return [] def get_path_options(version): - # We want to stop extracting libraries, and only extract the code that is in the - # repo. While in the transition period for stopping to install dependencies in the - # codeql-action, we will need to be able to support both old and new behavior. - # - # Like PYTHONUNBUFFERED for Python, we treat any non-empty string as meaning the - # flag is enabled. - # https://docs.python.org/3/using/cmdline.html#envvar-PYTHONUNBUFFERED - if os.environ.get("CODEQL_EXTRACTOR_PYTHON_DISABLE_LIBRARY_EXTRACTION"): - return [] + # Before 2.17.1 it was possible to extract installed libraries + # where this function would return ["-p", "/path/to/library"]. + # However, from 2.17.1 onwards, this is no longer supported. - # Not extracting dependencies will be default in CodeQL CLI release 2.16.0. Until - # 2.17.0, we provide an escape hatch to get the old behavior. - force_enable_envvar_name = "CODEQL_EXTRACTOR_PYTHON_FORCE_ENABLE_LIBRARY_EXTRACTION_UNTIL_2_17_0" - if os.environ.get(force_enable_envvar_name): - print("WARNING: We plan to remove the availability of the {} option in CodeQL CLI release 2.17.0 and beyond. Please let us know by submitting an issue to https://github.com/github/codeql why you needed to re-enable dependency extraction.".format(force_enable_envvar_name)) - path_option = [ "-p", install.get_library(version)] - if PATH_TAG in os.environ: - path_option = split_into_options(os.environ[PATH_TAG], "-p") + path_option - return path_option - else: - print("INFO: The Python extractor has recently (from 2.16.0 CodeQL CLI release) stopped extracting dependencies by default, and therefore stopped analyzing the source code of dependencies by default. We plan to remove this entirely in CodeQL CLI release 2.17.0. If you encounter problems, please let us know by submitting an issue to https://github.com/github/codeql, so we can consider adjusting our plans. It is possible to re-enable dependency extraction by exporting '{}=1'.".format(force_enable_envvar_name)) - return [] + return [] def get_stdlib(): return os.path.dirname(os.__file__) diff --git a/python/extractor/cli-integration-test/force-enable-library-extraction/test.sh b/python/extractor/cli-integration-test/force-enable-library-extraction/disabled-test.sh similarity index 100% rename from python/extractor/cli-integration-test/force-enable-library-extraction/test.sh rename to python/extractor/cli-integration-test/force-enable-library-extraction/disabled-test.sh diff --git a/python/extractor/cli-integration-test/ignore-venv/test.sh b/python/extractor/cli-integration-test/ignore-venv/disabled-test.sh similarity index 100% rename from python/extractor/cli-integration-test/ignore-venv/test.sh rename to python/extractor/cli-integration-test/ignore-venv/disabled-test.sh diff --git a/python/extractor/cli-integration-test/writing-diagnostics/test_diagnostics_output.py b/python/extractor/cli-integration-test/writing-diagnostics/test_diagnostics_output.py index 39982596fc5..0dce022a0f9 100644 --- a/python/extractor/cli-integration-test/writing-diagnostics/test_diagnostics_output.py +++ b/python/extractor/cli-integration-test/writing-diagnostics/test_diagnostics_output.py @@ -1,6 +1,6 @@ import os import sys -sys.path.append(os.path.join(os.path.dirname(__file__), "..", "..", "..", "integration-tests")) +sys.path.append(os.path.join(os.path.dirname(__file__), "..", "..", "..", "..", "..", "integration-tests")) import diagnostics_test_utils test_db = "db" diff --git a/python/extractor/qlpack.yml b/python/extractor/qlpack.yml index 783c301abbb..88164c64ee8 100644 --- a/python/extractor/qlpack.yml +++ b/python/extractor/qlpack.yml @@ -1,6 +1,6 @@ name: extractor-python dependencies: - codeql/python-all: "*" - codeql/python-queries: "*" + codeql/python-all: ${workspace} + codeql/python-queries: ${workspace} extractor: python warnOnImplicitThis: true diff --git a/python/extractor/tests/test_patterns.py b/python/extractor/tests/test_patterns.py index f218e7a4907..eb05d91c1a5 100644 --- a/python/extractor/tests/test_patterns.py +++ b/python/extractor/tests/test_patterns.py @@ -12,7 +12,7 @@ class ExtractorPatternsTest(test_utils.ExtractorTest): def test(self): repo_dir = subprocess.Popen(["git", "rev-parse", "--show-toplevel"], stdout=subprocess.PIPE).communicate()[0].rstrip().decode("utf-8") - test_file_path = os.path.abspath(os.path.join(repo_dir, "unit-tests", "files", "pattern-matching", "patterns.json")) + test_file_path = os.path.abspath(os.path.join(repo_dir, "..", "unit-tests", "files", "pattern-matching", "patterns.json")) with open(test_file_path) as test_file: test_patterns = json.load(test_file) for test_pattern in test_patterns: diff --git a/python/extractor/tsg-python/BUILD.bazel b/python/extractor/tsg-python/BUILD.bazel index 8e1425e3f3e..204bd89475a 100644 --- a/python/extractor/tsg-python/BUILD.bazel +++ b/python/extractor/tsg-python/BUILD.bazel @@ -1,5 +1,5 @@ -load("@tsg_python_crate_index//:defs.bzl", "aliases", "all_crate_deps") -load("//:common.bzl", "codeql_rust_binary") +load("@py_deps//:defs.bzl", "aliases", "all_crate_deps") +load("@semmle_code//:common.bzl", "codeql_rust_binary") codeql_rust_binary( name = "tsg-python", @@ -12,5 +12,5 @@ codeql_rust_binary( visibility = ["//visibility:public"], deps = all_crate_deps( normal = True, - ) + ["//extractor-python/tsg-python/tree-sitter-python"], + ) + ["//python/extractor/tsg-python/tsp"], ) diff --git a/python/extractor/tsg-python/Cargo.Bazel.lock b/python/extractor/tsg-python/Cargo.Bazel.lock index fbbd661c9e4..e3b5a249e4f 100644 --- a/python/extractor/tsg-python/Cargo.Bazel.lock +++ b/python/extractor/tsg-python/Cargo.Bazel.lock @@ -1,5 +1,5 @@ { - "checksum": "54f1095f5a2e74da736682bc8d355b3dbce47558983feba04faba84cf3abfaca", + "checksum": "35a1ce4b6c4f997c496c11d3a8fcfaadc5833dfd41bebb022941687d73dde159", "crates": { "ahash 0.4.7": { "name": "ahash", @@ -7,7 +7,7 @@ "package_url": "https://github.com/tkaitchuck/ahash", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/ahash/0.4.7/download", + "url": "https://static.crates.io/crates/ahash/0.4.7/download", "sha256": "739f4a8db6605981345c5654f3a85b056ce52f37a39d34da03f25bf2151ea16e" } }, @@ -43,7 +43,7 @@ "package_url": "https://github.com/BurntSushi/aho-corasick", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/aho-corasick/0.7.18/download", + "url": "https://static.crates.io/crates/aho-corasick/0.7.18/download", "sha256": "1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f" } }, @@ -95,7 +95,7 @@ "package_url": "https://github.com/ogham/rust-ansi-term", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/ansi_term/0.11.0/download", + "url": "https://static.crates.io/crates/ansi_term/0.11.0/download", "sha256": "ee49baf6cb617b853aa8d93bf420db2383fab46d314482ca2803b40d5fde979b" } }, @@ -141,7 +141,7 @@ "package_url": "https://github.com/dtolnay/anyhow", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/anyhow/1.0.44/download", + "url": "https://static.crates.io/crates/anyhow/1.0.44/download", "sha256": "61604a8f862e1d5c3229fdd78f8b02c68dcf73a4c4b05fd636d12240aaa242c1" } }, @@ -207,7 +207,7 @@ "package_url": "https://github.com/softprops/atty", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/atty/0.2.14/download", + "url": "https://static.crates.io/crates/atty/0.2.14/download", "sha256": "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" } }, @@ -265,7 +265,7 @@ "package_url": "https://github.com/bitflags/bitflags", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/bitflags/1.3.2/download", + "url": "https://static.crates.io/crates/bitflags/1.3.2/download", "sha256": "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" } }, @@ -307,7 +307,7 @@ "package_url": "https://github.com/alexcrichton/cc-rs", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/cc/1.0.70/download", + "url": "https://static.crates.io/crates/cc/1.0.70/download", "sha256": "d26a6ce4b6a484fa3edb70f7efa6fc430fd2b87285fe8b84304fd0936faa0dc0" } }, @@ -343,7 +343,7 @@ "package_url": "https://github.com/alexcrichton/cfg-if", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/cfg-if/1.0.0/download", + "url": "https://static.crates.io/crates/cfg-if/1.0.0/download", "sha256": "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" } }, @@ -379,7 +379,7 @@ "package_url": "https://github.com/clap-rs/clap", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/clap/2.33.3/download", + "url": "https://static.crates.io/crates/clap/2.33.3/download", "sha256": "37e58ac78573c40708d45522f0d80fa2f01cc4f9b4e2bf749807255454312002" } }, @@ -462,7 +462,7 @@ "package_url": "https://github.com/rust-lang/hashbrown", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/hashbrown/0.9.1/download", + "url": "https://static.crates.io/crates/hashbrown/0.9.1/download", "sha256": "d7afe4a420e3fe79967a00898cc1f4db7c8a49a9333a29f8a4bd76a253d5cd04" } }, @@ -514,7 +514,7 @@ "package_url": "https://github.com/hermitcore/libhermit-rs", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/hermit-abi/0.1.19/download", + "url": "https://static.crates.io/crates/hermit-abi/0.1.19/download", "sha256": "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" } }, @@ -559,7 +559,7 @@ "package_url": "https://github.com/dtolnay/itoa", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/itoa/1.0.1/download", + "url": "https://static.crates.io/crates/itoa/1.0.1/download", "sha256": "1aab8fc367588b89dcee83ab0fd66b72b50b72fa1904d7095045ace2b0c81c35" } }, @@ -595,7 +595,7 @@ "package_url": "https://github.com/rust-lang/libc", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/libc/0.2.101/download", + "url": "https://static.crates.io/crates/libc/0.2.101/download", "sha256": "3cb00336871be5ed2c8ed44b60ae9959dc5b9f08539422ed43f09e34ecaeba21" } }, @@ -654,7 +654,7 @@ "package_url": "https://github.com/rust-lang/log", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/log/0.4.14/download", + "url": "https://static.crates.io/crates/log/0.4.14/download", "sha256": "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710" } }, @@ -717,7 +717,7 @@ "package_url": "https://github.com/BurntSushi/memchr", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/memchr/2.4.1/download", + "url": "https://static.crates.io/crates/memchr/2.4.1/download", "sha256": "308cc39be01b73d0d18f82a0e7b2a3df85245f84af96fdddc5d202d27e47b86a" } }, @@ -783,7 +783,7 @@ "package_url": "https://github.com/alexcrichton/proc-macro2", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/proc-macro2/1.0.29/download", + "url": "https://static.crates.io/crates/proc-macro2/1.0.29/download", "sha256": "b9f5105d4fdaab20335ca9565e106a5d9b82b6219b5ba735731124ac6711d23d" } }, @@ -853,7 +853,7 @@ "package_url": "https://github.com/dtolnay/quote", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/quote/1.0.9/download", + "url": "https://static.crates.io/crates/quote/1.0.9/download", "sha256": "c3d0b9745dc2debf507c8422de05d7226cc1f0644216dfdfead988f9b1ab32a7" } }, @@ -905,7 +905,7 @@ "package_url": "https://github.com/rust-lang/regex", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/regex/1.5.5/download", + "url": "https://static.crates.io/crates/regex/1.5.5/download", "sha256": "1a11647b6b25ff05a515cb92c365cec08801e83423a235b51e231e1808747286" } }, @@ -980,7 +980,7 @@ "package_url": "https://github.com/rust-lang/regex", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/regex-syntax/0.6.25/download", + "url": "https://static.crates.io/crates/regex-syntax/0.6.25/download", "sha256": "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b" } }, @@ -1030,7 +1030,7 @@ "package_url": "https://github.com/dtolnay/ryu", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/ryu/1.0.9/download", + "url": "https://static.crates.io/crates/ryu/1.0.9/download", "sha256": "73b4b750c782965c211b42f022f59af1fbceabdd026623714f104152f1ec149f" } }, @@ -1066,7 +1066,7 @@ "package_url": "https://github.com/serde-rs/serde", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/serde/1.0.136/download", + "url": "https://static.crates.io/crates/serde/1.0.136/download", "sha256": "ce31e24b01e1e524df96f1c2fdd054405f8d7376249a5110886fb4b658484789" } }, @@ -1132,7 +1132,7 @@ "package_url": "https://github.com/serde-rs/json", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/serde_json/1.0.79/download", + "url": "https://static.crates.io/crates/serde_json/1.0.79/download", "sha256": "8e8d9fa5c3b304765ce1fd9c4c8a3de2c8db365a5b91be52f186efc675681d95" } }, @@ -1210,7 +1210,7 @@ "package_url": "https://github.com/servo/rust-smallvec", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/smallvec/1.6.1/download", + "url": "https://static.crates.io/crates/smallvec/1.6.1/download", "sha256": "fe0f37c9e8f3c5a4a66ad655a93c74daac4ad00c441533bf5c6e7990bb42604e" } }, @@ -1252,7 +1252,7 @@ "package_url": "https://github.com/robbepop/string-interner", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/string-interner/0.12.2/download", + "url": "https://static.crates.io/crates/string-interner/0.12.2/download", "sha256": "383196d1876517ee6f9f0864d1fc1070331b803335d3c6daaa04bbcccd823c08" } }, @@ -1309,7 +1309,7 @@ "package_url": "https://github.com/dguo/strsim-rs", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/strsim/0.8.0/download", + "url": "https://static.crates.io/crates/strsim/0.8.0/download", "sha256": "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a" } }, @@ -1344,7 +1344,7 @@ "package_url": "https://github.com/dtolnay/syn", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/syn/1.0.76/download", + "url": "https://static.crates.io/crates/syn/1.0.76/download", "sha256": "c6f107db402c2c2055242dbf4d2af0e69197202e9faacbef9571bbe47f5a1b84" } }, @@ -1427,7 +1427,7 @@ "package_url": "https://github.com/mgeisler/textwrap", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/textwrap/0.11.0/download", + "url": "https://static.crates.io/crates/textwrap/0.11.0/download", "sha256": "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060" } }, @@ -1471,7 +1471,7 @@ "package_url": "https://github.com/dtolnay/thiserror", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/thiserror/1.0.29/download", + "url": "https://static.crates.io/crates/thiserror/1.0.29/download", "sha256": "602eca064b2d83369e2b2f34b09c70b605402801927c65c11071ac911d299b88" } }, @@ -1516,7 +1516,7 @@ "package_url": "https://github.com/dtolnay/thiserror", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/thiserror-impl/1.0.29/download", + "url": "https://static.crates.io/crates/thiserror-impl/1.0.29/download", "sha256": "bad553cc2c78e8de258400763a647e80e6d1b31ee237275d756f6836d204494c" } }, @@ -1569,7 +1569,7 @@ "package_url": "https://github.com/tree-sitter/tree-sitter", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/tree-sitter/0.20.4/download", + "url": "https://static.crates.io/crates/tree-sitter/0.20.4/download", "sha256": "4e34327f8eac545e3f037382471b2b19367725a242bba7bc45edb9efb49fe39a" } }, @@ -1640,7 +1640,7 @@ "package_url": "https://github.com/tree-sitter/tree-sitter-graph/", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/tree-sitter-graph/0.7.0/download", + "url": "https://static.crates.io/crates/tree-sitter-graph/0.7.0/download", "sha256": "639d21e886f581d293de5f5081f09af003c54607ff3fa85efa159b243ba1f97a" } }, @@ -1707,72 +1707,6 @@ ], "license_file": null }, - "tree-sitter-python 0.19.0": { - "name": "tree-sitter-python", - "version": "0.19.0", - "package_url": "https://github.com/tree-sitter/tree-sitter-python", - "repository": null, - "targets": [ - { - "Library": { - "crate_name": "tree_sitter_python", - "crate_root": "bindings/rust/lib.rs", - "srcs": [ - "**/*.rs" - ] - } - }, - { - "BuildScript": { - "crate_name": "build_script_build", - "crate_root": "bindings/rust/build.rs", - "srcs": [ - "**/*.rs" - ] - } - } - ], - "library_target_name": "tree_sitter_python", - "common_attrs": { - "compile_data_glob": [ - "**" - ], - "deps": { - "common": [ - { - "id": "tree-sitter 0.20.4", - "target": "tree_sitter" - }, - { - "id": "tree-sitter-python 0.19.0", - "target": "build_script_build" - } - ], - "selects": {} - }, - "edition": "2018", - "version": "0.19.0" - }, - "build_script_attrs": { - "data_glob": [ - "**" - ], - "deps": { - "common": [ - { - "id": "cc 1.0.70", - "target": "cc" - } - ], - "selects": {} - } - }, - "license": "MIT", - "license_ids": [ - "MIT" - ], - "license_file": null - }, "tsg-python 0.1.0": { "name": "tsg-python", "version": "0.1.0", @@ -1828,13 +1762,79 @@ "license_ids": [], "license_file": null }, + "tsp 0.19.0": { + "name": "tsp", + "version": "0.19.0", + "package_url": "https://github.com/tree-sitter/tree-sitter-python", + "repository": null, + "targets": [ + { + "Library": { + "crate_name": "tsp", + "crate_root": "bindings/rust/lib.rs", + "srcs": [ + "**/*.rs" + ] + } + }, + { + "BuildScript": { + "crate_name": "build_script_build", + "crate_root": "bindings/rust/build.rs", + "srcs": [ + "**/*.rs" + ] + } + } + ], + "library_target_name": "tsp", + "common_attrs": { + "compile_data_glob": [ + "**" + ], + "deps": { + "common": [ + { + "id": "tree-sitter 0.20.4", + "target": "tree_sitter" + }, + { + "id": "tsp 0.19.0", + "target": "build_script_build" + } + ], + "selects": {} + }, + "edition": "2018", + "version": "0.19.0" + }, + "build_script_attrs": { + "data_glob": [ + "**" + ], + "deps": { + "common": [ + { + "id": "cc 1.0.70", + "target": "cc" + } + ], + "selects": {} + } + }, + "license": "MIT", + "license_ids": [ + "MIT" + ], + "license_file": null + }, "unicode-width 0.1.8": { "name": "unicode-width", "version": "0.1.8", "package_url": "https://github.com/unicode-rs/unicode-width", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/unicode-width/0.1.8/download", + "url": "https://static.crates.io/crates/unicode-width/0.1.8/download", "sha256": "9337591893a19b88d8d87f2cec1e73fad5cdfd10e5a6f349f498ad6ea2ffb1e3" } }, @@ -1876,7 +1876,7 @@ "package_url": "https://github.com/unicode-rs/unicode-xid", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/unicode-xid/0.2.2/download", + "url": "https://static.crates.io/crates/unicode-xid/0.2.2/download", "sha256": "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3" } }, @@ -1918,7 +1918,7 @@ "package_url": "https://github.com/contain-rs/vec-map", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/vec_map/0.8.2/download", + "url": "https://static.crates.io/crates/vec_map/0.8.2/download", "sha256": "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191" } }, @@ -1954,7 +1954,7 @@ "package_url": "https://github.com/retep998/winapi-rs", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/winapi/0.3.9/download", + "url": "https://static.crates.io/crates/winapi/0.3.9/download", "sha256": "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" } }, @@ -2037,7 +2037,7 @@ "package_url": "https://github.com/retep998/winapi-rs", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/winapi-i686-pc-windows-gnu/0.4.0/download", + "url": "https://static.crates.io/crates/winapi-i686-pc-windows-gnu/0.4.0/download", "sha256": "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" } }, @@ -2096,7 +2096,7 @@ "package_url": "https://github.com/retep998/winapi-rs", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/winapi-x86_64-pc-windows-gnu/0.4.0/download", + "url": "https://static.crates.io/crates/winapi-x86_64-pc-windows-gnu/0.4.0/download", "sha256": "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" } }, @@ -2152,8 +2152,8 @@ }, "binary_crates": [], "workspace_members": { - "tree-sitter-python 0.19.0": "extractor-python/tsg-python/tree-sitter-python", - "tsg-python 0.1.0": "extractor-python/tsg-python" + "tsg-python 0.1.0": "python/extractor/tsg-python", + "tsp 0.19.0": "python/extractor/tsg-python/tsp" }, "conditions": { "aarch64-apple-darwin": [ diff --git a/python/extractor/tsg-python/Cargo.lock b/python/extractor/tsg-python/Cargo.lock index 9ee8840bde1..c179dd3036f 100644 --- a/python/extractor/tsg-python/Cargo.lock +++ b/python/extractor/tsg-python/Cargo.lock @@ -267,14 +267,6 @@ dependencies = [ "tree-sitter", ] -[[package]] -name = "tree-sitter-python" -version = "0.19.0" -dependencies = [ - "cc", - "tree-sitter", -] - [[package]] name = "tsg-python" version = "0.1.0" @@ -287,7 +279,15 @@ dependencies = [ "thiserror", "tree-sitter", "tree-sitter-graph", - "tree-sitter-python", + "tsp", +] + +[[package]] +name = "tsp" +version = "0.19.0" +dependencies = [ + "cc", + "tree-sitter", ] [[package]] diff --git a/python/extractor/tsg-python/Cargo.toml b/python/extractor/tsg-python/Cargo.toml index b88adbc42d9..feecd254159 100644 --- a/python/extractor/tsg-python/Cargo.toml +++ b/python/extractor/tsg-python/Cargo.toml @@ -8,7 +8,7 @@ edition = "2018" # When changing/updating these, the `Cargo.Bazel.lock` file has to be regenerated. # Check out the documentation at https://bazelbuild.github.io/rules_rust/crate_universe.html#repinning--updating-dependencies -# for how to do so. The bazel repository for the tsg-python project is called `tsg_python_crate_index`, +# for how to do so. The bazel repository for the tsg-python project is called `py_deps`, # and instead of calling `bazel sync`, `./build --bazel sync` should be used instead, to always use the correct bazel version. [dependencies] anyhow = "1.0" @@ -17,7 +17,7 @@ smallvec = { version="1.6", features=["union"] } thiserror = "1.0" tree-sitter = "0.20.4" tree-sitter-graph = "0.7.0" -tree-sitter-python = {path = "tree-sitter-python"} +tsp = {path = "tsp"} clap = "2.32" [dependencies.string-interner] diff --git a/python/extractor/tsg-python/src/main.rs b/python/extractor/tsg-python/src/main.rs index fa528d8138d..ebfcd01a74e 100644 --- a/python/extractor/tsg-python/src/main.rs +++ b/python/extractor/tsg-python/src/main.rs @@ -488,7 +488,7 @@ fn main() -> Result<()> { "bundled `python.tsg`".to_owned() }; let source_path = Path::new(matches.value_of("source").unwrap()); - let language = tree_sitter_python::language(); + let language = tsp::language(); let mut parser = Parser::new(); parser.set_language(language)?; // Statically include `python.tsg`: diff --git a/python/extractor/tsg-python/tree-sitter-python/.gitignore b/python/extractor/tsg-python/tsp/.gitignore similarity index 100% rename from python/extractor/tsg-python/tree-sitter-python/.gitignore rename to python/extractor/tsg-python/tsp/.gitignore diff --git a/python/extractor/tsg-python/tree-sitter-python/.npmignore b/python/extractor/tsg-python/tsp/.npmignore similarity index 100% rename from python/extractor/tsg-python/tree-sitter-python/.npmignore rename to python/extractor/tsg-python/tsp/.npmignore diff --git a/python/extractor/tsg-python/tree-sitter-python/BUILD.bazel b/python/extractor/tsg-python/tsp/BUILD.bazel similarity index 79% rename from python/extractor/tsg-python/tree-sitter-python/BUILD.bazel rename to python/extractor/tsg-python/tsp/BUILD.bazel index 98b636c0d79..71319e894f6 100644 --- a/python/extractor/tsg-python/tree-sitter-python/BUILD.bazel +++ b/python/extractor/tsg-python/tsp/BUILD.bazel @@ -1,13 +1,13 @@ load("@rules_rust//cargo:defs.bzl", "cargo_build_script") load("@rules_rust//rust:defs.bzl", "rust_library") -load("@tsg_python_crate_index//:defs.bzl", "aliases", "all_crate_deps") +load("@py_deps//:defs.bzl", "aliases", "all_crate_deps") package(default_visibility = ["//visibility:public"]) # This will run the build script from the root of the workspace, and # collect the outputs. cargo_build_script( - name = "tsg-build-script", + name = "tsg-build", srcs = ["bindings/rust/build.rs"], data = glob([ "src/**", @@ -18,7 +18,7 @@ cargo_build_script( ) rust_library( - name = "tree-sitter-python", + name = "tsp", srcs = [ "bindings/rust/lib.rs", ], @@ -32,7 +32,7 @@ rust_library( proc_macro_deps = all_crate_deps( proc_macro = True, ), - deps = [":tsg-build-script"] + all_crate_deps( + deps = [":tsg-build"] + all_crate_deps( normal = True, ), ) diff --git a/python/extractor/tsg-python/tree-sitter-python/Cargo.toml b/python/extractor/tsg-python/tsp/Cargo.toml similarity index 95% rename from python/extractor/tsg-python/tree-sitter-python/Cargo.toml rename to python/extractor/tsg-python/tsp/Cargo.toml index 4c863753b93..995f39a3bd9 100644 --- a/python/extractor/tsg-python/tree-sitter-python/Cargo.toml +++ b/python/extractor/tsg-python/tsp/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "tree-sitter-python" +name = "tsp" description = "Python grammar for the tree-sitter parsing library" version = "0.19.0" authors = [ diff --git a/python/extractor/tsg-python/tree-sitter-python/LICENSE b/python/extractor/tsg-python/tsp/LICENSE similarity index 100% rename from python/extractor/tsg-python/tree-sitter-python/LICENSE rename to python/extractor/tsg-python/tsp/LICENSE diff --git a/python/extractor/tsg-python/tree-sitter-python/README.md b/python/extractor/tsg-python/tsp/README.md similarity index 100% rename from python/extractor/tsg-python/tree-sitter-python/README.md rename to python/extractor/tsg-python/tsp/README.md diff --git a/python/extractor/tsg-python/tree-sitter-python/binding.gyp b/python/extractor/tsg-python/tsp/binding.gyp similarity index 100% rename from python/extractor/tsg-python/tree-sitter-python/binding.gyp rename to python/extractor/tsg-python/tsp/binding.gyp diff --git a/python/extractor/tsg-python/tree-sitter-python/bindings/node/binding.cc b/python/extractor/tsg-python/tsp/bindings/node/binding.cc similarity index 100% rename from python/extractor/tsg-python/tree-sitter-python/bindings/node/binding.cc rename to python/extractor/tsg-python/tsp/bindings/node/binding.cc diff --git a/python/extractor/tsg-python/tree-sitter-python/bindings/node/index.js b/python/extractor/tsg-python/tsp/bindings/node/index.js similarity index 100% rename from python/extractor/tsg-python/tree-sitter-python/bindings/node/index.js rename to python/extractor/tsg-python/tsp/bindings/node/index.js diff --git a/python/extractor/tsg-python/tree-sitter-python/bindings/rust/README.md b/python/extractor/tsg-python/tsp/bindings/rust/README.md similarity index 100% rename from python/extractor/tsg-python/tree-sitter-python/bindings/rust/README.md rename to python/extractor/tsg-python/tsp/bindings/rust/README.md diff --git a/python/extractor/tsg-python/tree-sitter-python/bindings/rust/build.rs b/python/extractor/tsg-python/tsp/bindings/rust/build.rs similarity index 100% rename from python/extractor/tsg-python/tree-sitter-python/bindings/rust/build.rs rename to python/extractor/tsg-python/tsp/bindings/rust/build.rs diff --git a/python/extractor/tsg-python/tree-sitter-python/bindings/rust/lib.rs b/python/extractor/tsg-python/tsp/bindings/rust/lib.rs similarity index 100% rename from python/extractor/tsg-python/tree-sitter-python/bindings/rust/lib.rs rename to python/extractor/tsg-python/tsp/bindings/rust/lib.rs diff --git a/python/extractor/tsg-python/tree-sitter-python/grammar.js b/python/extractor/tsg-python/tsp/grammar.js similarity index 100% rename from python/extractor/tsg-python/tree-sitter-python/grammar.js rename to python/extractor/tsg-python/tsp/grammar.js diff --git a/python/extractor/tsg-python/tree-sitter-python/log.html b/python/extractor/tsg-python/tsp/log.html similarity index 100% rename from python/extractor/tsg-python/tree-sitter-python/log.html rename to python/extractor/tsg-python/tsp/log.html diff --git a/python/extractor/tsg-python/tree-sitter-python/package.json b/python/extractor/tsg-python/tsp/package.json similarity index 100% rename from python/extractor/tsg-python/tree-sitter-python/package.json rename to python/extractor/tsg-python/tsp/package.json diff --git a/python/extractor/tsg-python/tree-sitter-python/queries/highlights.scm b/python/extractor/tsg-python/tsp/queries/highlights.scm similarity index 100% rename from python/extractor/tsg-python/tree-sitter-python/queries/highlights.scm rename to python/extractor/tsg-python/tsp/queries/highlights.scm diff --git a/python/extractor/tsg-python/tree-sitter-python/queries/tags.scm b/python/extractor/tsg-python/tsp/queries/tags.scm similarity index 100% rename from python/extractor/tsg-python/tree-sitter-python/queries/tags.scm rename to python/extractor/tsg-python/tsp/queries/tags.scm diff --git a/python/extractor/tsg-python/tree-sitter-python/src/grammar.json b/python/extractor/tsg-python/tsp/src/grammar.json similarity index 100% rename from python/extractor/tsg-python/tree-sitter-python/src/grammar.json rename to python/extractor/tsg-python/tsp/src/grammar.json diff --git a/python/extractor/tsg-python/tree-sitter-python/src/node-types.json b/python/extractor/tsg-python/tsp/src/node-types.json similarity index 100% rename from python/extractor/tsg-python/tree-sitter-python/src/node-types.json rename to python/extractor/tsg-python/tsp/src/node-types.json diff --git a/python/extractor/tsg-python/tree-sitter-python/src/parser.c b/python/extractor/tsg-python/tsp/src/parser.c similarity index 100% rename from python/extractor/tsg-python/tree-sitter-python/src/parser.c rename to python/extractor/tsg-python/tsp/src/parser.c diff --git a/python/extractor/tsg-python/tree-sitter-python/src/scanner.cc b/python/extractor/tsg-python/tsp/src/scanner.cc similarity index 100% rename from python/extractor/tsg-python/tree-sitter-python/src/scanner.cc rename to python/extractor/tsg-python/tsp/src/scanner.cc diff --git a/python/extractor/tsg-python/tree-sitter-python/src/tree_sitter/parser.h b/python/extractor/tsg-python/tsp/src/tree_sitter/parser.h similarity index 100% rename from python/extractor/tsg-python/tree-sitter-python/src/tree_sitter/parser.h rename to python/extractor/tsg-python/tsp/src/tree_sitter/parser.h diff --git a/python/ql/consistency-queries/TypeTrackingConsistency.ql b/python/ql/consistency-queries/TypeTrackingConsistency.ql index 15083229002..645bdef5219 100644 --- a/python/ql/consistency-queries/TypeTrackingConsistency.ql +++ b/python/ql/consistency-queries/TypeTrackingConsistency.ql @@ -27,15 +27,18 @@ private module ConsistencyChecksInput implements ConsistencyChecksInputSig { TypeTrackingInput::simpleLocalSmallStep*(m, n) ) or - // TODO: when adding support for proper content, handle iterable unpacking better - // such as `for k,v in items:`, or `a, (b,c) = ...` - n instanceof DataFlow::IterableSequenceNode - or // We have missing use-use flow in // https://github.com/python/cpython/blob/0fb18b02c8ad56299d6a2910be0bab8ad601ef24/Lib/socketserver.py#L276-L303 // which I couldn't just fix. We ignore the problems here, and instead rely on the // test-case added in https://github.com/github/codeql/pull/15841 n.getLocation().getFile().getAbsolutePath().matches("%/socketserver.py") + or + // for iterable unpacking like `a,b = some_list`, we currently don't want to allow + // type-tracking... however, in the future when we allow tracking list indexes + // precisely (that is, move away from ListElementContent), we should ensure we have + // proper flow to the synthetic `IterableElementNode`. + exists(DataFlow::ListElementContent c) and + n instanceof DataFlow::IterableElementNode } } diff --git a/python/ql/lib/CHANGELOG.md b/python/ql/lib/CHANGELOG.md index e6f318c51ea..645b686ac8c 100644 --- a/python/ql/lib/CHANGELOG.md +++ b/python/ql/lib/CHANGELOG.md @@ -1,3 +1,22 @@ +## 0.11.13 + +No user-facing changes. + +## 0.11.12 + +No user-facing changes. + +## 0.11.11 + +No user-facing changes. + +## 0.11.10 + +### Minor Analysis Improvements + +* Fixed missing flow for dictionary updates (`d[] = ...`) when `` is a string constant not used in dictionary literals or as name of keyword-argument. +* Fixed flow for iterable unpacking (`a,b = my_tuple`) when it occurs on top-level (module) scope. + ## 0.11.9 ### Minor Analysis Improvements diff --git a/python/ql/lib/change-notes/2024-02-28-iterable-unpacking-module-scope.md b/python/ql/lib/change-notes/2024-02-28-iterable-unpacking-module-scope.md deleted file mode 100644 index 3c47c6ba866..00000000000 --- a/python/ql/lib/change-notes/2024-02-28-iterable-unpacking-module-scope.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Fixed flow for iterable unpacking (`a,b = my_tuple`) when it occurs on top-level (module) scope. diff --git a/python/ql/lib/change-notes/2024-03-12-typetracking-content.md b/python/ql/lib/change-notes/2024-03-12-typetracking-content.md new file mode 100644 index 00000000000..5ad93a657ae --- /dev/null +++ b/python/ql/lib/change-notes/2024-03-12-typetracking-content.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* Improved the type-tracking capabilities (and therefore also API graphs) to allow tracking items in tuples and dictionaries. diff --git a/python/ql/lib/change-notes/2024-03-01-dict-update-content.md b/python/ql/lib/change-notes/released/0.11.10.md similarity index 52% rename from python/ql/lib/change-notes/2024-03-01-dict-update-content.md rename to python/ql/lib/change-notes/released/0.11.10.md index dfb8d247fff..ed873724e4f 100644 --- a/python/ql/lib/change-notes/2024-03-01-dict-update-content.md +++ b/python/ql/lib/change-notes/released/0.11.10.md @@ -1,4 +1,6 @@ ---- -category: minorAnalysis ---- +## 0.11.10 + +### Minor Analysis Improvements + * Fixed missing flow for dictionary updates (`d[] = ...`) when `` is a string constant not used in dictionary literals or as name of keyword-argument. +* Fixed flow for iterable unpacking (`a,b = my_tuple`) when it occurs on top-level (module) scope. diff --git a/python/ql/lib/change-notes/released/0.11.11.md b/python/ql/lib/change-notes/released/0.11.11.md new file mode 100644 index 00000000000..d4837264b86 --- /dev/null +++ b/python/ql/lib/change-notes/released/0.11.11.md @@ -0,0 +1,3 @@ +## 0.11.11 + +No user-facing changes. diff --git a/python/ql/lib/change-notes/released/0.11.12.md b/python/ql/lib/change-notes/released/0.11.12.md new file mode 100644 index 00000000000..5f431e89f8f --- /dev/null +++ b/python/ql/lib/change-notes/released/0.11.12.md @@ -0,0 +1,3 @@ +## 0.11.12 + +No user-facing changes. diff --git a/python/ql/lib/change-notes/released/0.11.13.md b/python/ql/lib/change-notes/released/0.11.13.md new file mode 100644 index 00000000000..e8bde4caf9f --- /dev/null +++ b/python/ql/lib/change-notes/released/0.11.13.md @@ -0,0 +1,3 @@ +## 0.11.13 + +No user-facing changes. diff --git a/python/ql/lib/codeql-pack.release.yml b/python/ql/lib/codeql-pack.release.yml index b064d1778a1..387883efdfb 100644 --- a/python/ql/lib/codeql-pack.release.yml +++ b/python/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.11.9 +lastReleaseVersion: 0.11.13 diff --git a/python/ql/lib/qlpack.yml b/python/ql/lib/qlpack.yml index e9f66e205f2..fbe7c179fd2 100644 --- a/python/ql/lib/qlpack.yml +++ b/python/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/python-all -version: 0.11.10-dev +version: 0.11.14-dev groups: python dbscheme: semmlecode.python.dbscheme extractor: python @@ -11,6 +11,7 @@ dependencies: codeql/regex: ${workspace} codeql/tutorial: ${workspace} codeql/util: ${workspace} + codeql/xml: ${workspace} codeql/yaml: ${workspace} dataExtensions: - semmle/python/frameworks/**/*.model.yml diff --git a/python/ql/lib/semmle/python/dataflow/new/TypeTracking.qll b/python/ql/lib/semmle/python/dataflow/new/TypeTracking.qll index 4f1810f059e..8d1c691915b 100644 --- a/python/ql/lib/semmle/python/dataflow/new/TypeTracking.qll +++ b/python/ql/lib/semmle/python/dataflow/new/TypeTracking.qll @@ -5,9 +5,14 @@ private import internal.TypeTrackingImpl as Impl import Impl::Shared::TypeTracking +private import semmle.python.dataflow.new.internal.DataFlowPublic as DataFlowPublic -/** A string that may appear as the name of an attribute or access path. */ -class AttributeName = Impl::TypeTrackingInput::Content; +/** + * DEPRECATED. + * + * A string that may appear as the name of an attribute or access path. + */ +deprecated class AttributeName = Impl::TypeTrackingInput::Content; /** * A summary of the steps needed to track a value to a given dataflow node. @@ -40,7 +45,11 @@ class TypeTracker extends Impl::TypeTracker { * Holds if this is the starting point of type tracking, and the value starts in the attribute named `attrName`. * The type tracking only ends after the attribute has been loaded. */ - predicate startInAttr(string attrName) { this.startInContent(attrName) } + predicate startInAttr(string attrName) { + exists(DataFlowPublic::AttributeContent content | content.getAttribute() = attrName | + this.startInContent(content) + ) + } /** * INTERNAL. DO NOT USE. @@ -48,9 +57,8 @@ class TypeTracker extends Impl::TypeTracker { * Gets the attribute associated with this type tracker. */ string getAttr() { - result = this.getContent().asSome() - or - this.getContent().isNone() and - result = "" + if this.getContent().asSome() instanceof DataFlowPublic::AttributeContent + then result = this.getContent().asSome().(DataFlowPublic::AttributeContent).getAttribute() + else result = "" } } diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowDispatch.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowDispatch.qll index b869bdda521..ec8e2148e05 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowDispatch.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowDispatch.qll @@ -876,7 +876,7 @@ private module TrackAttrReadInput implements CallGraphConstruction::Simple::Inpu predicate start(Node start, AttrRead attr) { start = attr and - attr.getObject() in [ + pragma[only_bind_into](attr.getObject()) in [ classTracker(_), classInstanceTracker(_), selfTracker(_), clsArgumentTracker(_), superCallNoArgumentTracker(_), superCallTwoArgumentTracker(_, _) ] @@ -1302,9 +1302,7 @@ predicate getCallArg(CallNode call, Function target, CallType type, Node arg, Ar // // call_func(my_obj.some_method) // ``` - exists(CfgNode cfgNode | cfgNode.getNode() = call | - cfgNode.getEnclosingCallable() = arg.getEnclosingCallable() - ) + exists(CfgNode cfgNode | cfgNode.getNode() = call | sameEnclosingCallable(cfgNode, arg)) or // cls argument for classmethod calls -- see note above about bound methods type instanceof CallTypeClassMethod and @@ -1312,9 +1310,7 @@ predicate getCallArg(CallNode call, Function target, CallType type, Node arg, Ar resolveMethodCall(call, target, type, arg) and (arg = classTracker(_) or arg = clsArgumentTracker(_)) and // dataflow lib has requirement that arguments and calls are in same enclosing callable. - exists(CfgNode cfgNode | cfgNode.getNode() = call | - cfgNode.getEnclosingCallable() = arg.getEnclosingCallable() - ) + exists(CfgNode cfgNode | cfgNode.getNode() = call | sameEnclosingCallable(cfgNode, arg)) or // normal arguments for method calls ( @@ -1365,6 +1361,16 @@ predicate getCallArg(CallNode call, Function target, CallType type, Node arg, Ar ) } +/** + * join-order helper for getCallArg, since otherwise we would do cartesian product of + * the enclosing callables + */ +bindingset[node1, node2] +pragma[inline_late] +private predicate sameEnclosingCallable(Node node1, Node node2) { + node1.getEnclosingCallable() = node2.getEnclosingCallable() +} + // ============================================================================= // DataFlowCall // ============================================================================= diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImplSpecific.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImplSpecific.qll index 2d18c789732..48199dac9f5 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImplSpecific.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImplSpecific.qll @@ -22,4 +22,6 @@ module PythonDataFlow implements InputSig { predicate neverSkipInPathGraph = Private::neverSkipInPathGraph/1; Node exprNode(DataFlowExpr e) { result = Public::exprNode(e) } + + predicate ignoreFieldFlowBranchLimit(DataFlowCallable c) { exists(c.asLibraryCallable()) } } diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll index 47f41d0cd05..1ad6d0f7e6e 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll @@ -642,23 +642,37 @@ predicate jumpStepNotSharedWithTypeTracker(Node nodeFrom, Node nodeTo) { // Field flow //-------- /** - * Holds if data can flow from `nodeFrom` to `nodeTo` via an assignment to - * content `c`. + * Subset of `storeStep` that should be shared with type-tracking. + * + * NOTE: This does not include attributeStoreStep right now, since it has its' own + * modeling in the type-tracking library (which is slightly different due to + * PostUpdateNodes). + * + * As of 2024-04-02 the type-tracking library only supports precise content, so there is + * no reason to include steps for list content right now. */ -predicate storeStep(Node nodeFrom, ContentSet c, Node nodeTo) { - listStoreStep(nodeFrom, c, nodeTo) - or - setStoreStep(nodeFrom, c, nodeTo) - or +predicate storeStepCommon(Node nodeFrom, ContentSet c, Node nodeTo) { tupleStoreStep(nodeFrom, c, nodeTo) or dictStoreStep(nodeFrom, c, nodeTo) or moreDictStoreSteps(nodeFrom, c, nodeTo) or - comprehensionStoreStep(nodeFrom, c, nodeTo) - or iterableUnpackingStoreStep(nodeFrom, c, nodeTo) +} + +/** + * Holds if data can flow from `nodeFrom` to `nodeTo` via an assignment to + * content `c`. + */ +predicate storeStep(Node nodeFrom, ContentSet c, Node nodeTo) { + storeStepCommon(nodeFrom, c, nodeTo) + or + listStoreStep(nodeFrom, c, nodeTo) + or + setStoreStep(nodeFrom, c, nodeTo) + or + comprehensionStoreStep(nodeFrom, c, nodeTo) or attributeStoreStep(nodeFrom, c, nodeTo) or @@ -892,12 +906,19 @@ predicate attributeStoreStep(Node nodeFrom, AttributeContent c, Node nodeTo) { } /** - * Holds if data can flow from `nodeFrom` to `nodeTo` via a read of content `c`. + * Subset of `readStep` that should be shared with type-tracking. */ -predicate readStep(Node nodeFrom, ContentSet c, Node nodeTo) { +predicate readStepCommon(Node nodeFrom, ContentSet c, Node nodeTo) { subscriptReadStep(nodeFrom, c, nodeTo) or iterableUnpackingReadStep(nodeFrom, c, nodeTo) +} + +/** + * Holds if data can flow from `nodeFrom` to `nodeTo` via a read of content `c`. + */ +predicate readStep(Node nodeFrom, ContentSet c, Node nodeTo) { + readStepCommon(nodeFrom, c, nodeTo) or matchReadStep(nodeFrom, c, nodeTo) or diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/TypeTracker.qll b/python/ql/lib/semmle/python/dataflow/new/internal/TypeTracker.qll index 0f6ff8bd3bd..01c881b2316 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/TypeTracker.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/TypeTracker.qll @@ -1,6 +1,7 @@ /** Step Summaries and Type Tracking */ private import TypeTrackerSpecific +private import semmle.python.dataflow.new.internal.DataFlowPublic as DataFlowPublic cached private module Cached { @@ -12,10 +13,22 @@ private module Cached { LevelStep() or CallStep() or ReturnStep() or - deprecated StoreStep(TypeTrackerContent content) { basicStoreStep(_, _, content) } or - deprecated LoadStep(TypeTrackerContent content) { basicLoadStep(_, _, content) } or + deprecated StoreStep(TypeTrackerContent content) { + exists(DataFlowPublic::AttributeContent dfc | dfc.getAttribute() = content | + basicStoreStep(_, _, dfc) + ) + } or + deprecated LoadStep(TypeTrackerContent content) { + exists(DataFlowPublic::AttributeContent dfc | dfc.getAttribute() = content | + basicLoadStep(_, _, dfc) + ) + } or deprecated LoadStoreStep(TypeTrackerContent load, TypeTrackerContent store) { - basicLoadStoreStep(_, _, load, store) + exists(DataFlowPublic::AttributeContent dfcLoad, DataFlowPublic::AttributeContent dfcStore | + dfcLoad.getAttribute() = load and dfcStore.getAttribute() = store + | + basicLoadStoreStep(_, _, dfcLoad, dfcStore) + ) } or deprecated WithContent(ContentFilter filter) { basicWithContentStep(_, _, filter) } or deprecated WithoutContent(ContentFilter filter) { basicWithoutContentStep(_, _, filter) } or @@ -29,13 +42,13 @@ private module Cached { // Restrict `content` to those that might eventually match a load. // We can't rely on `basicStoreStep` since `startInContent` might be used with // a content that has no corresponding store. - exists(TypeTrackerContent loadContents | + exists(DataFlowPublic::AttributeContent loadContents | ( basicLoadStep(_, _, loadContents) or basicLoadStoreStep(_, _, loadContents, _) ) and - compatibleContents(content, loadContents) + compatibleContents(content, loadContents.getAttribute()) ) } @@ -45,13 +58,13 @@ private module Cached { content = noContent() or // As in MkTypeTracker, restrict `content` to those that might eventually match a store. - exists(TypeTrackerContent storeContent | + exists(DataFlowPublic::AttributeContent storeContent | ( basicStoreStep(_, _, storeContent) or basicLoadStoreStep(_, _, _, storeContent) ) and - compatibleContents(storeContent, content) + compatibleContents(storeContent.getAttribute(), content) ) } @@ -198,7 +211,10 @@ private module Cached { flowsToStoreStep(nodeFrom, nodeTo, content) and summary = StoreStep(content) or - basicLoadStep(nodeFrom, nodeTo, content) and summary = LoadStep(content) + exists(DataFlowPublic::AttributeContent dfc | dfc.getAttribute() = content | + basicLoadStep(nodeFrom, nodeTo, dfc) + ) and + summary = LoadStep(content) ) or exists(TypeTrackerContent loadContent, TypeTrackerContent storeContent | @@ -281,7 +297,12 @@ deprecated private predicate smallstepProj(Node nodeFrom, StepSummary summary) { deprecated private predicate flowsToStoreStep( Node nodeFrom, TypeTrackingNode nodeTo, TypeTrackerContent content ) { - exists(Node obj | nodeTo.flowsTo(obj) and basicStoreStep(nodeFrom, obj, content)) + exists(Node obj | + nodeTo.flowsTo(obj) and + exists(DataFlowPublic::AttributeContent dfc | dfc.getAttribute() = content | + basicStoreStep(nodeFrom, obj, dfc) + ) + ) } /** @@ -292,7 +313,12 @@ deprecated private predicate flowsToLoadStoreStep( TypeTrackerContent storeContent ) { exists(Node obj | - nodeTo.flowsTo(obj) and basicLoadStoreStep(nodeFrom, obj, loadContent, storeContent) + nodeTo.flowsTo(obj) and + exists(DataFlowPublic::AttributeContent loadDfc, DataFlowPublic::AttributeContent storeDfc | + loadDfc.getAttribute() = loadContent and storeDfc.getAttribute() = storeContent + | + basicLoadStoreStep(nodeFrom, obj, loadDfc, storeDfc) + ) ) } diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/TypeTrackerSpecific.qll b/python/ql/lib/semmle/python/dataflow/new/internal/TypeTrackerSpecific.qll index c31cfeb5331..11cce1446f7 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/TypeTrackerSpecific.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/TypeTrackerSpecific.qll @@ -15,7 +15,7 @@ deprecated class OptionalTypeTrackerContent extends string { OptionalTypeTrackerContent() { this = "" or - this instanceof TypeTrackingImpl::TypeTrackingInput::Content + this = any(DataFlowPublic::AttributeContent dfc).getAttribute() } } diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/TypeTrackingImpl.qll b/python/ql/lib/semmle/python/dataflow/new/internal/TypeTrackingImpl.qll index 1a9bdb5202e..42ce5cdd237 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/TypeTrackingImpl.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/TypeTrackingImpl.qll @@ -8,6 +8,7 @@ private import semmle.python.dataflow.new.internal.DataFlowPrivate as DataFlowPr private import codeql.typetracking.internal.SummaryTypeTracker as SummaryTypeTracker private import semmle.python.dataflow.new.internal.FlowSummaryImpl as FlowSummaryImpl private import semmle.python.dataflow.new.internal.DataFlowDispatch as DataFlowDispatch +private import semmle.python.dataflow.new.internal.IterableUnpacking as IterableUnpacking private module SummaryTypeTrackerInput implements SummaryTypeTracker::Input { // Dataflow nodes @@ -97,24 +98,25 @@ private module SummaryTypeTrackerInput implements SummaryTypeTracker::Input { private module TypeTrackerSummaryFlow = SummaryTypeTracker::SummaryFlow; -/** - * Gets the name of a possible piece of content. For Python, this is currently only attribute names, - * using the name of the attribute for the corresponding content. - */ -private string getPossibleContentName() { - Stages::TypeTracking::ref() and // the TypeTracking::append() etc. predicates that we want to cache depend on this predicate, so we can place the `ref()` call here to get around identical files. - result = any(DataFlowPublic::AttrRef a).getAttributeName() -} - module TypeTrackingInput implements Shared::TypeTrackingInput { class Node = DataFlowPublic::Node; class LocalSourceNode = DataFlowPublic::LocalSourceNode; - class Content instanceof string { - Content() { this = getPossibleContentName() } - - string toString() { result = this } + class Content extends DataFlowPublic::Content { + Content() { + // TODO: for now, it's not 100% clear if should support non-precise content in + // type-tracking, or if it will lead to bad results. We start with only allowing + // precise content, which should always be a good improvement! It also simplifies + // the process of examining new results from non-precise content steps in the + // future, since you will _only_ have to look over the results from the new + // non-precise steps. + this instanceof DataFlowPublic::AttributeContent + or + this instanceof DataFlowPublic::DictionaryElementContent + or + this instanceof DataFlowPublic::TupleElementContent + } } /** @@ -134,7 +136,27 @@ module TypeTrackingInput implements Shared::TypeTrackingInput { } /** Holds if there is a simple local flow step from `nodeFrom` to `nodeTo` */ - predicate simpleLocalSmallStep = DataFlowPrivate::simpleLocalFlowStepForTypetracking/2; + predicate simpleLocalSmallStep(Node nodeFrom, Node nodeTo) { + DataFlowPrivate::simpleLocalFlowStepForTypetracking(nodeFrom, nodeTo) and + // for `for k,v in foo` no need to do local flow step from the synthetic sequence + // node for `k,v` to the tuple `k,v` -- since type-tracking only supports one level + // of content tracking, and there is one read-step from `foo` the synthetic sequence + // node required, we can skip the flow step from the synthetic sequence node to the + // tuple itself, since the read-step from the tuple to the tuple elements will not + // matter. + not ( + IterableUnpacking::iterableUnpackingForReadStep(_, _, nodeFrom) and + IterableUnpacking::iterableUnpackingTupleFlowStep(nodeFrom, nodeTo) + ) and + // for nested iterable unpacking, such as `[[a]] = foo` or `((a,b),) = bar`, we can + // ignore the flow steps from the synthetic sequence node to the real sequence node, + // since we only support one level of content in type-trackers, and the nested + // structure requires two levels at least to be useful. + not exists(SequenceNode outer | + outer.getAnElement() = nodeTo.asCfgNode() and + IterableUnpacking::iterableUnpackingTupleFlowStep(nodeFrom, nodeTo) + ) + } /** Holds if there is a level step from `nodeFrom` to `nodeTo`, which may depend on the call graph. */ predicate levelStepCall(Node nodeFrom, LocalSourceNode nodeTo) { none() } @@ -181,46 +203,68 @@ module TypeTrackingInput implements Shared::TypeTrackingInput { * Holds if `nodeFrom` is being written to the `content` content of the object in `nodeTo`. */ predicate storeStep(Node nodeFrom, Node nodeTo, Content content) { - exists(DataFlowPublic::AttrWrite a | - a.mayHaveAttributeName(content) and + exists(DataFlowPublic::AttrWrite a, string attrName | + content.(DataFlowPublic::AttributeContent).getAttribute() = attrName and + a.mayHaveAttributeName(attrName) and nodeFrom = a.getValue() and nodeTo = a.getObject() ) or - exists(DataFlowPublic::ContentSet contents | - contents.(DataFlowPublic::AttributeContent).getAttribute() = content + // type-tracking doesn't really handle PostUpdateNodes, so for some assignment steps + // like `my_dict["foo"] = foo` the data-flow step targets the PostUpdateNode for + // `my_dict`, where we want to translate that into a type-tracking step that targets + // the normal/non-PostUpdateNode for `my_dict`. + exists(DataFlowPublic::Node storeTarget | + DataFlowPrivate::storeStepCommon(nodeFrom, content, storeTarget) | - TypeTrackerSummaryFlow::basicStoreStep(nodeFrom, nodeTo, contents) - ) + not storeTarget instanceof DataFlowPrivate::SyntheticPostUpdateNode and + nodeTo = storeTarget + or + nodeTo = storeTarget.(DataFlowPrivate::SyntheticPostUpdateNode).getPreUpdateNode() + ) and + // when only supporting precise content, no need for IterableElementNode (since it + // is only fed set/list content) + not nodeFrom instanceof DataFlowPublic::IterableElementNode + or + TypeTrackerSummaryFlow::basicStoreStep(nodeFrom, nodeTo, content) } /** * Holds if `nodeTo` is the result of accessing the `content` content of `nodeFrom`. */ predicate loadStep(Node nodeFrom, LocalSourceNode nodeTo, Content content) { - exists(DataFlowPublic::AttrRead a | - a.mayHaveAttributeName(content) and + exists(DataFlowPublic::AttrRead a, string attrName | + content.(DataFlowPublic::AttributeContent).getAttribute() = attrName and + a.mayHaveAttributeName(attrName) and nodeFrom = a.getObject() and nodeTo = a ) or - exists(DataFlowPublic::ContentSet contents | - contents.(DataFlowPublic::AttributeContent).getAttribute() = content - | - TypeTrackerSummaryFlow::basicLoadStep(nodeFrom, nodeTo, contents) + DataFlowPrivate::readStepCommon(nodeFrom, content, nodeTo) and + // Since we only support one level of content in type-trackers we don't actually + // support `(aa, ab), (ba, bb) = ...`. Therefore we exclude the read-step from `(aa, + // ab)` to `aa` (since it is not needed). + not exists(SequenceNode outer | + outer.getAnElement() = nodeFrom.asCfgNode() and + IterableUnpacking::iterableUnpackingTupleFlowStep(_, nodeFrom) + ) and + // Again, due to only supporting one level deep, for `for (k,v) in ...` we exclude read-step from + // the tuple to `k` and `v`. + not exists(DataFlowPublic::IterableSequenceNode seq, DataFlowPublic::IterableElementNode elem | + IterableUnpacking::iterableUnpackingForReadStep(_, _, seq) and + IterableUnpacking::iterableUnpackingConvertingReadStep(seq, _, elem) and + IterableUnpacking::iterableUnpackingConvertingStoreStep(elem, _, nodeFrom) and + nodeFrom.asCfgNode() instanceof SequenceNode ) + or + TypeTrackerSummaryFlow::basicLoadStep(nodeFrom, nodeTo, content) } /** * Holds if the `loadContent` of `nodeFrom` is stored in the `storeContent` of `nodeTo`. */ predicate loadStoreStep(Node nodeFrom, Node nodeTo, Content loadContent, Content storeContent) { - exists(DataFlowPublic::ContentSet loadContents, DataFlowPublic::ContentSet storeContents | - loadContents.(DataFlowPublic::AttributeContent).getAttribute() = loadContent and - storeContents.(DataFlowPublic::AttributeContent).getAttribute() = storeContent - | - TypeTrackerSummaryFlow::basicLoadStoreStep(nodeFrom, nodeTo, loadContents, storeContents) - ) + TypeTrackerSummaryFlow::basicLoadStoreStep(nodeFrom, nodeTo, loadContent, storeContent) } /** diff --git a/python/ql/lib/semmle/python/frameworks/ServerLess.qll b/python/ql/lib/semmle/python/frameworks/ServerLess.qll index a7d2508b32b..36a4e977c7f 100644 --- a/python/ql/lib/semmle/python/frameworks/ServerLess.qll +++ b/python/ql/lib/semmle/python/frameworks/ServerLess.qll @@ -8,7 +8,7 @@ */ import python -import codeql.serverless.ServerLess +private import codeql.serverless.ServerLess import semmle.python.dataflow.new.DataFlow import semmle.python.dataflow.new.RemoteFlowSources diff --git a/python/ql/lib/semmle/python/frameworks/SqlAlchemy.qll b/python/ql/lib/semmle/python/frameworks/SqlAlchemy.qll index adeec0390fb..fb747a4cabc 100644 --- a/python/ql/lib/semmle/python/frameworks/SqlAlchemy.qll +++ b/python/ql/lib/semmle/python/frameworks/SqlAlchemy.qll @@ -113,15 +113,25 @@ module SqlAlchemy { */ abstract class InstanceSource extends DataFlow::LocalSourceNode { } + /** + * join-ordering helper for ConnectionConstruction char-pred -- without this would + * start with _all_ `CallCfgNode` and join those with `MethodCallNode` .. which is + * silly + */ + pragma[noinline] + private DataFlow::MethodCallNode connectionConstruction_helper() { + result.calls(Engine::instance(), ["begin", "connect"]) + or + result.calls(instance(), ["connect", "execution_options"]) + } + private class ConnectionConstruction extends InstanceSource, DataFlow::CallCfgNode { ConnectionConstruction() { - this = classRef().getACall() + // without the `pragma[only_bind_out]` we would start with joining + // `API::Node.getACall` with `CallCfgNode` which is not optimal + this = pragma[only_bind_out](classRef()).getACall() or - this.(DataFlow::MethodCallNode).calls(Engine::instance(), ["begin", "connect"]) - or - this.(DataFlow::MethodCallNode).calls(instance(), "connect") - or - this.(DataFlow::MethodCallNode).calls(instance(), "execution_options") + this = connectionConstruction_helper() } } diff --git a/python/ql/lib/semmle/python/frameworks/data/internal/ApiGraphModels.qll b/python/ql/lib/semmle/python/frameworks/data/internal/ApiGraphModels.qll index dd433152751..8dea3d67bd8 100644 --- a/python/ql/lib/semmle/python/frameworks/data/internal/ApiGraphModels.qll +++ b/python/ql/lib/semmle/python/frameworks/data/internal/ApiGraphModels.qll @@ -267,7 +267,7 @@ private predicate summaryModel(string type, string path, string input, string ou } /** Holds if a type model exists for the given parameters. */ -private predicate typeModel(string type1, string type2, string path) { +predicate typeModel(string type1, string type2, string path) { exists(string row | typeModel(row) and row.splitAt(";", 0) = type1 and @@ -435,7 +435,7 @@ private API::Node getNodeFromType(string type) { * Gets the API node identified by the first `n` tokens of `path` in the given `(type, path)` tuple. */ pragma[nomagic] -private API::Node getNodeFromPath(string type, AccessPath path, int n) { +API::Node getNodeFromPath(string type, AccessPath path, int n) { isRelevantFullPath(type, path) and ( n = 0 and diff --git a/python/ql/lib/semmle/python/xml/XML.qll b/python/ql/lib/semmle/python/xml/XML.qll index 65bdd7b7cc1..54157809260 100644 --- a/python/ql/lib/semmle/python/xml/XML.qll +++ b/python/ql/lib/semmle/python/xml/XML.qll @@ -3,305 +3,67 @@ */ import semmle.files.FileSystem +private import codeql.xml.Xml -private class TXmlLocatable = - @xmldtd or @xmlelement or @xmlattribute or @xmlnamespace or @xmlcomment or @xmlcharacters; +private module Input implements InputSig { + class XmlLocatableBase = @xmllocatable or @xmlnamespaceable; -/** An XML element that has a location. */ -class XmlLocatable extends @xmllocatable, TXmlLocatable { - /** Gets the source location for this element. */ - Location getLocation() { xmllocations(this, result) } + predicate xmllocations_(XmlLocatableBase e, Location loc) { xmllocations(e, loc) } - /** - * Holds if this element is at the specified location. - * The location spans column `startcolumn` of line `startline` to - * column `endcolumn` of line `endline` in file `filepath`. - * For more information, see - * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). - */ - predicate hasLocationInfo( - string filepath, int startline, int startcolumn, int endline, int endcolumn + class XmlParentBase = @xmlparent; + + class XmlNamespaceableBase = @xmlnamespaceable; + + class XmlElementBase = @xmlelement; + + class XmlFileBase = File; + + predicate xmlEncoding_(XmlFileBase f, string enc) { xmlEncoding(f, enc) } + + class XmlDtdBase = @xmldtd; + + predicate xmlDTDs_(XmlDtdBase e, string root, string publicId, string systemId, XmlFileBase file) { + xmlDTDs(e, root, publicId, systemId, file) + } + + predicate xmlElements_( + XmlElementBase e, string name, XmlParentBase parent, int idx, XmlFileBase file ) { - exists(File f, Location l | l = this.getLocation() | - locations_default(l, f, startline, startcolumn, endline, endcolumn) and - filepath = f.getAbsolutePath() - ) + xmlElements(e, name, parent, idx, file) } - /** Gets a textual representation of this element. */ - string toString() { none() } // overridden in subclasses -} + class XmlAttributeBase = @xmlattribute; -/** - * 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`; - // the type `@xmlparent` currently also includes non-XML files - this instanceof @xmlelement or xmlEncoding(this, _) + predicate xmlAttrs_( + XmlAttributeBase e, XmlElementBase elementid, string name, string value, int idx, + XmlFileBase file + ) { + xmlAttrs(e, elementid, name, value, idx, file) } - /** - * Gets a printable representation of this XML parent. - * (Intended to be overridden in subclasses.) - */ - string getName() { none() } // overridden in subclasses + class XmlNamespaceBase = @xmlnamespace; - /** Gets the file to which this XML parent belongs. */ - 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, _) } - - /** Gets a child element of this XML parent. */ - 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) } - - /** Gets a comment that is a child of this XML parent. */ - XmlComment getAComment() { xmlComments(result, _, this, _) } - - /** Gets a character sequence that is a child of this XML parent. */ - XmlCharacters getACharactersSet() { xmlChars(result, _, this, _, _, _) } - - /** 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, _, _)) } - - /** Gets the number of places in the body of this XML parent where text occurs. */ - int getNumberOfCharacterSets() { result = count(int pos | xmlChars(_, _, this, pos, _, _)) } - - /** - * Gets the result of appending all the character sequences of this XML parent from - * left to right, separated by a space. - */ - string allCharactersString() { - result = - concat(string chars, int pos | xmlChars(_, chars, this, pos, _, _) | chars, " " order by pos) + predicate xmlNs_(XmlNamespaceBase e, string prefixName, string uri, XmlFileBase file) { + xmlNs(e, prefixName, uri, file) } - /** Gets the text value contained in this XML parent. */ - string getTextValue() { result = this.allCharactersString() } + predicate xmlHasNs_(XmlNamespaceableBase e, XmlNamespaceBase ns, XmlFileBase file) { + xmlHasNs(e, ns, file) + } - /** Gets a printable representation of this XML parent. */ - string toString() { result = this.getName() } -} + class XmlCommentBase = @xmlcomment; -/** An XML file. */ -class XmlFile extends XmlParent, File { - XmlFile() { xmlEncoding(this, _) } + predicate xmlComments_(XmlCommentBase e, string text, XmlParentBase parent, XmlFileBase file) { + xmlComments(e, text, parent, file) + } - /** Gets a printable representation of this XML file. */ - override string toString() { result = this.getName() } + class XmlCharactersBase = @xmlcharacters; - /** Gets the name of this XML file. */ - override string getName() { result = File.super.getAbsolutePath() } - - /** Gets the encoding of this XML file. */ - string getEncoding() { xmlEncoding(this, result) } - - /** Gets the XML file itself. */ - override XmlFile getFile() { result = this } - - /** Gets a top-most element in an XML file. */ - XmlElement getARootElement() { result = this.getAChild() } - - /** Gets a DTD associated with this XML file. */ - XmlDtd getADtd() { xmlDTDs(result, _, _, _, this) } -} - -/** - * An XML document type definition (DTD). - * - * Example: - * - * ``` - * - * - * - * ``` - */ -class XmlDtd extends XmlLocatable, @xmldtd { - /** Gets the name of the root element of this DTD. */ - string getRoot() { xmlDTDs(this, result, _, _, _) } - - /** Gets the public ID of this DTD. */ - string getPublicId() { xmlDTDs(this, _, result, _, _) } - - /** Gets the system ID of this DTD. */ - string getSystemId() { xmlDTDs(this, _, _, result, _) } - - /** Holds if this DTD is public. */ - predicate isPublic() { not xmlDTDs(this, _, "", _, _) } - - /** Gets the parent of this DTD. */ - XmlParent getParent() { xmlDTDs(this, _, _, _, result) } - - override string toString() { - this.isPublic() and - result = this.getRoot() + " PUBLIC '" + this.getPublicId() + "' '" + this.getSystemId() + "'" - or - not this.isPublic() and - result = this.getRoot() + " SYSTEM '" + this.getSystemId() + "'" + predicate xmlChars_( + XmlCharactersBase e, string text, XmlParentBase parent, int idx, int isCDATA, XmlFileBase file + ) { + xmlChars(e, text, parent, idx, isCDATA, file) } } -/** - * An XML element in an XML file. - * - * Example: - * - * ``` - * - * - * ``` - */ -class XmlElement extends @xmlelement, XmlParent, XmlLocatable { - /** Holds if this XML element has the given `name`. */ - predicate hasName(string name) { name = this.getName() } - - /** Gets the name of this XML element. */ - override string getName() { xmlElements(this, result, _, _, _) } - - /** Gets the XML file in which this XML element occurs. */ - override XmlFile getFile() { xmlElements(this, _, _, _, result) } - - /** Gets the parent of this XML element. */ - XmlParent getParent() { xmlElements(this, _, result, _, _) } - - /** Gets the index of this XML element among its parent's children. */ - int getIndex() { xmlElements(this, _, _, result, _) } - - /** Holds if this XML element has a namespace. */ - predicate hasNamespace() { xmlHasNs(this, _, _) } - - /** Gets the namespace of this XML element, if any. */ - XmlNamespace getNamespace() { xmlHasNs(this, result, _) } - - /** Gets the index of this XML element among its parent's children. */ - int getElementPositionIndex() { xmlElements(this, _, _, result, _) } - - /** Gets the depth of this element within the XML file tree structure. */ - override int getDepth() { result = this.getParent().getDepth() + 1 } - - /** Gets an XML attribute of this XML element. */ - 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 } - - /** Holds if this XML element has an attribute with the specified `name`. */ - predicate hasAttribute(string name) { exists(this.getAttribute(name)) } - - /** Gets the value of the attribute with the specified `name`, if any. */ - string getAttributeValue(string name) { result = this.getAttribute(name).getValue() } - - /** Gets a printable representation of this XML element. */ - override string toString() { result = this.getName() } -} - -/** - * An attribute that occurs inside an XML element. - * - * Examples: - * - * ``` - * package="com.example.exampleapp" - * android:versionCode="1" - * ``` - */ -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, _, _, _, _) } - - /** Holds if this attribute has a namespace. */ - predicate hasNamespace() { xmlHasNs(this, _, _) } - - /** Gets the namespace of this attribute, if any. */ - XmlNamespace getNamespace() { xmlHasNs(this, result, _) } - - /** Gets the value of this attribute. */ - string getValue() { xmlAttrs(this, _, _, result, _, _) } - - /** Gets a printable representation of this XML attribute. */ - override string toString() { result = this.getName() + "=" + this.getValue() } -} - -/** - * A namespace used in an XML file. - * - * Example: - * - * ``` - * xmlns:android="http://schemas.android.com/apk/res/android" - * ``` - */ -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, _) } - - /** Holds if this namespace has no prefix. */ - predicate isDefault() { this.getPrefix() = "" } - - override string toString() { - this.isDefault() and result = this.getUri() - or - not this.isDefault() and result = this.getPrefix() + ":" + this.getUri() - } -} - -/** - * A comment in an XML file. - * - * Example: - * - * ``` - * - * ``` - */ -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, _) } - - /** Gets a printable representation of this XML comment. */ - override string toString() { result = this.getText() } -} - -/** - * A sequence of characters that occurs between opening and - * closing tags of an XML element, excluding other elements. - * - * Example: - * - * ``` - * This is a sequence of characters. - * ``` - */ -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, _, _, _) } - - /** Holds if this character sequence is CDATA. */ - predicate isCDATA() { xmlChars(this, _, _, _, 1, _) } - - /** Gets a printable representation of this XML character sequence. */ - override string toString() { result = this.getCharacters() } -} +import Make diff --git a/python/ql/src/CHANGELOG.md b/python/ql/src/CHANGELOG.md index 50762bcbf34..53ed161fecb 100644 --- a/python/ql/src/CHANGELOG.md +++ b/python/ql/src/CHANGELOG.md @@ -1,3 +1,21 @@ +## 0.9.13 + +No user-facing changes. + +## 0.9.12 + +No user-facing changes. + +## 0.9.11 + +No user-facing changes. + +## 0.9.10 + +### New Queries + +* The query `py/nosql-injection` for finding NoSQL injection vulnerabilities is now part of the default security suite. + ## 0.9.9 No user-facing changes. diff --git a/python/ql/src/Summary/LinesOfUserCode.ql b/python/ql/src/Summary/LinesOfUserCode.ql index 528ae948cd7..f6d6f25872f 100644 --- a/python/ql/src/Summary/LinesOfUserCode.ql +++ b/python/ql/src/Summary/LinesOfUserCode.ql @@ -8,6 +8,7 @@ * @kind metric * @tags summary * lines-of-code + * debug * @id py/summary/lines-of-user-code */ diff --git a/python/ql/src/change-notes/2024-03-04-nosql-injection.md b/python/ql/src/change-notes/released/0.9.10.md similarity index 81% rename from python/ql/src/change-notes/2024-03-04-nosql-injection.md rename to python/ql/src/change-notes/released/0.9.10.md index 6e98540c757..4cbb221b789 100644 --- a/python/ql/src/change-notes/2024-03-04-nosql-injection.md +++ b/python/ql/src/change-notes/released/0.9.10.md @@ -1,4 +1,5 @@ ---- -category: newQuery ---- +## 0.9.10 + +### New Queries + * The query `py/nosql-injection` for finding NoSQL injection vulnerabilities is now part of the default security suite. diff --git a/python/ql/src/change-notes/released/0.9.11.md b/python/ql/src/change-notes/released/0.9.11.md new file mode 100644 index 00000000000..5f0f5649db6 --- /dev/null +++ b/python/ql/src/change-notes/released/0.9.11.md @@ -0,0 +1,3 @@ +## 0.9.11 + +No user-facing changes. diff --git a/python/ql/src/change-notes/released/0.9.12.md b/python/ql/src/change-notes/released/0.9.12.md new file mode 100644 index 00000000000..7ba46fb4a91 --- /dev/null +++ b/python/ql/src/change-notes/released/0.9.12.md @@ -0,0 +1,3 @@ +## 0.9.12 + +No user-facing changes. diff --git a/python/ql/src/change-notes/released/0.9.13.md b/python/ql/src/change-notes/released/0.9.13.md new file mode 100644 index 00000000000..e188021618c --- /dev/null +++ b/python/ql/src/change-notes/released/0.9.13.md @@ -0,0 +1,3 @@ +## 0.9.13 + +No user-facing changes. diff --git a/python/ql/src/codeql-pack.release.yml b/python/ql/src/codeql-pack.release.yml index aabed7c396b..74bee36d150 100644 --- a/python/ql/src/codeql-pack.release.yml +++ b/python/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.9.9 +lastReleaseVersion: 0.9.13 diff --git a/python/ql/src/qlpack.yml b/python/ql/src/qlpack.yml index aa18f2d8707..d51237e1530 100644 --- a/python/ql/src/qlpack.yml +++ b/python/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/python-queries -version: 0.9.10-dev +version: 0.9.14-dev groups: - python - queries diff --git a/python/ql/test/experimental/dataflow/model-summaries/InlineTaintTest.ext.yml b/python/ql/test/experimental/dataflow/model-summaries/InlineTaintTest.ext.yml index e3a7e059401..10fbd6df744 100644 --- a/python/ql/test/experimental/dataflow/model-summaries/InlineTaintTest.ext.yml +++ b/python/ql/test/experimental/dataflow/model-summaries/InlineTaintTest.ext.yml @@ -3,7 +3,7 @@ extensions: pack: codeql/python-all extensible: summaryModel data: - - ["foo", "Member[MS_identity]", "Argument[0]", "ReturnValue", "value"] + - ["foo", "Member[MS_identity]", "Argument[0,x:]", "ReturnValue", "value"] - ["foo", "Member[MS_apply_lambda]", "Argument[1]", "Argument[0].Parameter[0]", "value"] - ["foo", "Member[MS_apply_lambda]", "Argument[0].ReturnValue", "ReturnValue", "value"] - ["foo", "Member[MS_reversed]", "Argument[0].ListElement", "ReturnValue.ListElement", "value"] @@ -17,4 +17,5 @@ extensions: - ["foo", "Member[MS_append_to_list]", "Argument[1]", "ReturnValue", "taint"] - ["foo", "Member[MS_spread]", "Argument[0]", "ReturnValue.TupleElement[0]", "value"] - ["foo", "Member[MS_spread]", "Argument[1]", "ReturnValue.TupleElement[1]", "value"] + - ["foo", "Member[MS_spread_all]", "Argument[0]", "ReturnValue.TupleElement[0,1]", "value"] - ["json", "Member[MS_loads]", "Argument[0]", "ReturnValue", "taint"] diff --git a/python/ql/test/experimental/dataflow/model-summaries/NormalDataflowTest.ext.yml b/python/ql/test/experimental/dataflow/model-summaries/NormalDataflowTest.ext.yml index e3a7e059401..10fbd6df744 100644 --- a/python/ql/test/experimental/dataflow/model-summaries/NormalDataflowTest.ext.yml +++ b/python/ql/test/experimental/dataflow/model-summaries/NormalDataflowTest.ext.yml @@ -3,7 +3,7 @@ extensions: pack: codeql/python-all extensible: summaryModel data: - - ["foo", "Member[MS_identity]", "Argument[0]", "ReturnValue", "value"] + - ["foo", "Member[MS_identity]", "Argument[0,x:]", "ReturnValue", "value"] - ["foo", "Member[MS_apply_lambda]", "Argument[1]", "Argument[0].Parameter[0]", "value"] - ["foo", "Member[MS_apply_lambda]", "Argument[0].ReturnValue", "ReturnValue", "value"] - ["foo", "Member[MS_reversed]", "Argument[0].ListElement", "ReturnValue.ListElement", "value"] @@ -17,4 +17,5 @@ extensions: - ["foo", "Member[MS_append_to_list]", "Argument[1]", "ReturnValue", "taint"] - ["foo", "Member[MS_spread]", "Argument[0]", "ReturnValue.TupleElement[0]", "value"] - ["foo", "Member[MS_spread]", "Argument[1]", "ReturnValue.TupleElement[1]", "value"] + - ["foo", "Member[MS_spread_all]", "Argument[0]", "ReturnValue.TupleElement[0,1]", "value"] - ["json", "Member[MS_loads]", "Argument[0]", "ReturnValue", "taint"] diff --git a/python/ql/test/experimental/dataflow/model-summaries/model_summaries.py b/python/ql/test/experimental/dataflow/model-summaries/model_summaries.py index c8c5ac0a888..17f831f6ed1 100644 --- a/python/ql/test/experimental/dataflow/model-summaries/model_summaries.py +++ b/python/ql/test/experimental/dataflow/model-summaries/model_summaries.py @@ -30,12 +30,16 @@ def SINK_F(x): ensure_tainted = ensure_not_tainted = print TAINTED_STRING = "TAINTED_STRING" -from foo import MS_identity, MS_apply_lambda, MS_reversed, MS_list_map, MS_append_to_list, MS_spread +from foo import MS_identity, MS_apply_lambda, MS_reversed, MS_list_map, MS_append_to_list, MS_spread, MS_spread_all # Simple summary via_identity = MS_identity(SOURCE) SINK(via_identity) # $ flow="SOURCE, l:-1 -> via_identity" +# Simple summary keyword +via_identity_kw = MS_identity(x = SOURCE) +SINK(via_identity_kw) # $ flow="SOURCE, l:-1 -> via_identity_kw" + # Lambda summary via_lambda = MS_apply_lambda(lambda x: [x], SOURCE) SINK(via_lambda[0]) # $ flow="SOURCE, l:-1 -> via_lambda[0]" @@ -114,6 +118,10 @@ x, y = MS_spread(NONSOURCE, SOURCE) SINK_F(x) SINK(y) # $ flow="SOURCE, l:-2 -> y" +a, b = MS_spread_all(SOURCE) +SINK(a) # $ flow="SOURCE, l:-1 -> a" +SINK(b) # $ flow="SOURCE, l:-2 -> b" + # Modeled flow-summary is not value preserving from json import MS_loads as json_loads diff --git a/python/ql/test/experimental/dataflow/summaries/InlineTaintTest.expected b/python/ql/test/experimental/dataflow/summaries/InlineTaintTest.expected new file mode 100644 index 00000000000..366de37b867 --- /dev/null +++ b/python/ql/test/experimental/dataflow/summaries/InlineTaintTest.expected @@ -0,0 +1,4 @@ +argumentToEnsureNotTaintedNotMarkedAsSpurious +untaintedArgumentToEnsureTaintedNotMarkedAsMissing +testFailures +failures diff --git a/python/ql/test/experimental/dataflow/summaries/InlineTaintTest.ql b/python/ql/test/experimental/dataflow/summaries/InlineTaintTest.ql new file mode 100644 index 00000000000..96cc5c3e31f --- /dev/null +++ b/python/ql/test/experimental/dataflow/summaries/InlineTaintTest.ql @@ -0,0 +1,4 @@ +import python +import experimental.meta.InlineTaintTest +import MakeInlineTaintTest +import TestSummaries diff --git a/python/ql/test/experimental/dataflow/summaries/TestSummaries.qll b/python/ql/test/experimental/dataflow/summaries/TestSummaries.qll index b2e29e9999e..534fac62491 100644 --- a/python/ql/test/experimental/dataflow/summaries/TestSummaries.qll +++ b/python/ql/test/experimental/dataflow/summaries/TestSummaries.qll @@ -136,3 +136,108 @@ private class SummarizedCallableJsonLoads extends SummarizedCallable { preservesValue = true } } + +// Repeated summaries +private class SummarizedCallableWithSubpath extends SummarizedCallable { + SummarizedCallableWithSubpath() { this = "extracted_package.functions.with_subpath" } + + override DataFlow::CallCfgNode getACall() { + result = + API::moduleImport("extracted_package") + .getMember("functions") + .getMember("with_subpath") + .getACall() + } + + override DataFlow::ArgumentNode getACallback() { + result = + API::moduleImport("extracted_package") + .getMember("functions") + .getMember("with_subpath") + .getAValueReachableFromSource() + } + + override predicate propagatesFlow(string input, string output, boolean preservesValue) { + input = "Argument[0]" and + output = "ReturnValue" and + preservesValue = false + } +} + +private class SummarizedCallableWithSubpathAgain extends SummarizedCallable { + SummarizedCallableWithSubpathAgain() { this = "extracted_package.functions.with_subpathII" } + + override DataFlow::CallCfgNode getACall() { + result = + API::moduleImport("extracted_package") + .getMember("functions") + .getMember("with_subpath") + .getACall() + } + + override DataFlow::ArgumentNode getACallback() { + result = + API::moduleImport("extracted_package") + .getMember("functions") + .getMember("with_subpath") + .getAValueReachableFromSource() + } + + override predicate propagatesFlow(string input, string output, boolean preservesValue) { + input = "Argument[0]" and + output = "ReturnValue.Attribute[pattern]" and + preservesValue = true + } +} + +private class SummarizedCallableWithoutSubpath extends SummarizedCallable { + SummarizedCallableWithoutSubpath() { this = "extracted_package.functions.without_subpath" } + + override DataFlow::CallCfgNode getACall() { + result = + API::moduleImport("extracted_package") + .getMember("functions") + .getMember("without_subpath") + .getACall() + } + + override DataFlow::ArgumentNode getACallback() { + result = + API::moduleImport("extracted_package") + .getMember("functions") + .getMember("without_subpath") + .getAValueReachableFromSource() + } + + override predicate propagatesFlow(string input, string output, boolean preservesValue) { + input = "Argument[0]" and + output = "ReturnValue" and + preservesValue = false + } +} + +private class SummarizedCallableWithoutSubpathAgain extends SummarizedCallable { + SummarizedCallableWithoutSubpathAgain() { this = "extracted_package.functions.without_subpathII" } + + override DataFlow::CallCfgNode getACall() { + result = + API::moduleImport("extracted_package") + .getMember("functions") + .getMember("without_subpath") + .getACall() + } + + override DataFlow::ArgumentNode getACallback() { + result = + API::moduleImport("extracted_package") + .getMember("functions") + .getMember("without_subpath") + .getAValueReachableFromSource() + } + + override predicate propagatesFlow(string input, string output, boolean preservesValue) { + input = "Argument[0]" and + output = "ReturnValue.Attribute[pattern]" and + preservesValue = true + } +} diff --git a/python/ql/test/experimental/dataflow/summaries/conflicting_summaries.py b/python/ql/test/experimental/dataflow/summaries/conflicting_summaries.py new file mode 100644 index 00000000000..7b031f37a9f --- /dev/null +++ b/python/ql/test/experimental/dataflow/summaries/conflicting_summaries.py @@ -0,0 +1,18 @@ +# Bad interaction of two summaries for the same function +ts = TAINTED_STRING + +from extracted_package.functions import with_subpath, without_subpath + +# For the function `with_subpath`, flow from the first argument to the return value +# can be concluded from its definition. This seems to discard all summaries, including +# the one with flow to `ReturnValue.Attribute[pattern]`. +ensure_tainted( + with_subpath(ts).pattern, # $ tainted + with_subpath(ts), # $ tainted + with_subpath(ts), # $ tainted +) +ensure_tainted( + without_subpath(ts).pattern, # $ tainted + without_subpath(ts), # $ tainted + without_subpath(ts), # $ tainted +) \ No newline at end of file diff --git a/swift/integration-tests/posix-only/frontend-invocations/A.swift b/python/ql/test/experimental/dataflow/summaries/extracted_package/__init__.py similarity index 100% rename from swift/integration-tests/posix-only/frontend-invocations/A.swift rename to python/ql/test/experimental/dataflow/summaries/extracted_package/__init__.py diff --git a/python/ql/test/experimental/dataflow/summaries/extracted_package/functions.py b/python/ql/test/experimental/dataflow/summaries/extracted_package/functions.py new file mode 100644 index 00000000000..f4780be20a3 --- /dev/null +++ b/python/ql/test/experimental/dataflow/summaries/extracted_package/functions.py @@ -0,0 +1,5 @@ +def with_subpath(x): + return x + +def without_subpath(x): + pass \ No newline at end of file diff --git a/python/ql/test/experimental/dataflow/typetracking/content_test.py b/python/ql/test/experimental/dataflow/typetracking/content_test.py new file mode 100644 index 00000000000..1c52d659582 --- /dev/null +++ b/python/ql/test/experimental/dataflow/typetracking/content_test.py @@ -0,0 +1,100 @@ +# test of other content types than attributes + +def test_tuple(index_arg): + tup = (tracked, other) # $tracked + + tup[0] # $ tracked + tup[1] + + a,b = tup # $tracked + a # $ tracked + b + + # non-precise access is not supported right now (and it's not 100% clear if we want + # to support it, or if it will lead to bad results) + tup[index_arg] + + for x in tup: + print(x) + + for i in range(len(tup)): + print(tup[i]) + + + # nested tuples + nested_tuples = ((tracked, other), (other, tracked)) # $tracked + + nested_tuples[0][0] # $ MISSING: tracked + nested_tuples[0][1] + nested_tuples[1][0] + nested_tuples[1][1] # $ MISSING: tracked + + (aa, ab), (ba, bb) = nested_tuples + aa # $ MISSING: tracked + ab + ba + bb # $ MISSING: tracked + + + # non-precise access is not supported right now (and it's not 100% clear if we want + # to support it, or if it will lead to bad results) + for (x, y) in nested_tuples: + x + y + + +def test_dict(key_arg): + d1 = {"t": tracked, "o": other} # $tracked + d1["t"] # $ tracked + d1.get("t") # $ MISSING: tracked + d1.setdefault("t") # $ MISSING: tracked + + d1["o"] + d1.get("o") + d1.setdefault("o") + + + # non-precise access is not supported right now (and it's not 100% clear if we want + # to support it, or if it will lead to bad results) + d1[key_arg] + + for k in d1: + d1[k] + + for v in d1.values(): + v + + for k, v in d1.items(): + v + + + # construction with inline updates + d2 = dict() + d2["t"] = tracked # $ tracked + d2["o"] = other + + d2["t"] # $ tracked + d2["o"] + + # notice that time-travel is also possible (just as with attributes) + d3 = dict() + d3["t"] # $ SPURIOUS: tracked + d3["t"] = tracked # $ tracked + d3["t"] # $ tracked + + +def test_list(index_arg): + l = [tracked, other] # $tracked + + l[0] # $ MISSING: tracked + l[1] + + # non-precise access is not supported right now (and it's not 100% clear if we want + # to support it, or if it will lead to bad results) + l[index_arg] + + for x in l: + print(x) + + for i in range(len(l)): + print(l[i]) diff --git a/python/ql/test/experimental/dataflow/typetracking/tracked.ql b/python/ql/test/experimental/dataflow/typetracking/tracked.ql index ca893688256..8bad0e33ead 100644 --- a/python/ql/test/experimental/dataflow/typetracking/tracked.ql +++ b/python/ql/test/experimental/dataflow/typetracking/tracked.ql @@ -30,6 +30,14 @@ module TrackedTest implements TestSig { not e instanceof DataFlow::ScopeEntryDefinitionNode and // ...same for `SynthCaptureNode`s not e instanceof DP::SynthCaptureNode and + // after starting to track all kinds of content, we generally just want to show + // annotations after reading the tracked data out again. (we keep the old + // attribute logic to not rewrite all our tests) + ( + t.getContent().isNone() + or + t.getContent().asSome() instanceof DataFlow::AttributeContent + ) and tag = "tracked" and location = e.getLocation() and value = t.getAttr() and diff --git a/python/ql/test/experimental/library-tests/CallGraph/InlineCallGraphTest.expected b/python/ql/test/experimental/library-tests/CallGraph/InlineCallGraphTest.expected index 55774486be0..ef82a9ad20c 100644 --- a/python/ql/test/experimental/library-tests/CallGraph/InlineCallGraphTest.expected +++ b/python/ql/test/experimental/library-tests/CallGraph/InlineCallGraphTest.expected @@ -16,7 +16,6 @@ pointsTo_found_typeTracker_notFound | code/func_defined_outside_class.py:42:1:42:7 | ControlFlowNode for Attribute() | B._gen.func | | code/func_defined_outside_class.py:43:1:43:7 | ControlFlowNode for Attribute() | B._gen.func | | code/funky_regression.py:15:9:15:17 | ControlFlowNode for Attribute() | Wat.f2 | -| code/tuple_function_return.py:15:1:15:4 | ControlFlowNode for f2() | func | | code/type_tracking_limitation.py:8:1:8:3 | ControlFlowNode for x() | my_func | typeTracker_found_pointsTo_notFound | code/callable_as_argument.py:29:5:29:12 | ControlFlowNode for Attribute() | test_class.InsideTestFunc.sm | @@ -38,6 +37,10 @@ typeTracker_found_pointsTo_notFound | code/class_super.py:101:1:101:7 | ControlFlowNode for Attribute() | Z.foo | | code/class_super.py:108:1:108:8 | ControlFlowNode for Attribute() | Z.foo | | code/def_in_function.py:22:5:22:11 | ControlFlowNode for Attribute() | test.A.foo | +| code/func_ref_in_content.py:32:1:32:4 | ControlFlowNode for f4() | func | +| code/func_ref_in_content.py:46:1:46:4 | ControlFlowNode for f5() | func | +| code/func_ref_in_content.py:48:1:48:15 | ControlFlowNode for Subscript() | func2 | +| code/func_ref_in_content.py:50:1:50:19 | ControlFlowNode for Subscript() | func2 | | code/isinstance.py:9:13:9:22 | ControlFlowNode for Attribute() | A.foo | | code/isinstance.py:9:13:9:22 | ControlFlowNode for Attribute() | ASub.foo | | code/isinstance.py:14:13:14:22 | ControlFlowNode for Attribute() | A.foo | diff --git a/python/ql/test/experimental/library-tests/CallGraph/code/func_ref_in_content.py b/python/ql/test/experimental/library-tests/CallGraph/code/func_ref_in_content.py new file mode 100644 index 00000000000..eee8f29778b --- /dev/null +++ b/python/ql/test/experimental/library-tests/CallGraph/code/func_ref_in_content.py @@ -0,0 +1,74 @@ +def func(): + print("func()") + +def func2(): + print("func2()") + +def return_func(): + return func + +f1 = return_func() # $ pt,tt=return_func +f1() # $ pt,tt=func + + +def return_func_in_tuple(): + return (func, 42) + +tup = return_func_in_tuple() # $ pt,tt=return_func_in_tuple + +f2, _ = tup +f2() # $ pt,tt=func + +f3 = tup[0] +f3() # $ tt,pt=func + + +def return_func_in_dict(): + return {'func': func, 'val': 42} + +dct = return_func_in_dict() # $ pt,tt=return_func_in_dict + +f4 = dct['func'] +f4() # $ tt=func + + +def return_func_in_dict_update(): + d = {} + d["func"] = func + d["func2"] = func2 + d["contested"] = func + d["contested"] = func2 + return d + +dct2 = return_func_in_dict_update() # $ pt,tt=return_func_in_dict_update + +f5 = dct2['func'] +f5() # $ tt=func + +dct2['func2']() # $ tt=func2 + +dct2['contested']() # $ tt=func2 SPURIOUS: tt=func + + +## non-precise access is not supported right now +for k in dct2: + dct2[k]() # $ MISSING: tt=func tt=func2 + +for v in dct2.values(): + v() # $ MISSING: tt=func tt=func2 + +for k, v in dct2.items(): + v() # $ MISSING: tt=func tt=func2 + + +def return_func_in_list(): + return [func, 42] + +lst = return_func_in_list() # $ pt,tt=return_func_in_list + +f6 = lst[0] +f6() # $ MISSING: pt,tt=func + +if eval("False"): # don't run this, but fool analysis to still consider it (doesn't wok if you just to `if False:`) + f7 = lst[1] + f7() diff --git a/python/ql/test/experimental/library-tests/CallGraph/code/tuple_function_return.py b/python/ql/test/experimental/library-tests/CallGraph/code/tuple_function_return.py deleted file mode 100644 index f87b1aa23e8..00000000000 --- a/python/ql/test/experimental/library-tests/CallGraph/code/tuple_function_return.py +++ /dev/null @@ -1,15 +0,0 @@ -def func(): - print("func()") - -def return_func(): - return func - -def return_func_in_tuple(): - return (func, 42) - -f1 = return_func() # $ pt,tt=return_func -f1() # $ pt,tt=func - - -f2, _ = return_func_in_tuple() # $ pt,tt=return_func_in_tuple -f2() # $ pt=func MISSING: tt diff --git a/python/ql/test/library-tests/essa/ssa-compute/CONSISTENCY/TypeTrackingConsistency.expected b/python/ql/test/library-tests/essa/ssa-compute/CONSISTENCY/TypeTrackingConsistency.expected index 81d19f3f20d..0e829fd207f 100644 --- a/python/ql/test/library-tests/essa/ssa-compute/CONSISTENCY/TypeTrackingConsistency.expected +++ b/python/ql/test/library-tests/essa/ssa-compute/CONSISTENCY/TypeTrackingConsistency.expected @@ -1,6 +1,6 @@ unreachableNode -| test2.py:16:17:16:17 | ControlFlowNode for y | Unreachable node in step of kind load bar. | -| test2.py:25:23:25:23 | ControlFlowNode for x | Unreachable node in step of kind load attribute. | +| test2.py:16:17:16:17 | ControlFlowNode for y | Unreachable node in step of kind load Attribute bar. | +| test2.py:25:23:25:23 | ControlFlowNode for x | Unreachable node in step of kind load Attribute attribute. | | test2.py:25:23:25:23 | ControlFlowNode for x | Unreachable node in step of kind simpleLocalSmallStep. | -| test2.py:26:17:26:17 | ControlFlowNode for y | Unreachable node in step of kind load bar. | +| test2.py:26:17:26:17 | ControlFlowNode for y | Unreachable node in step of kind load Attribute bar. | | test2.py:27:23:27:23 | ControlFlowNode for x | Unreachable node in step of kind simpleLocalSmallStep. | diff --git a/python/tools/BUILD.bazel b/python/tools/BUILD.bazel new file mode 100644 index 00000000000..81762c150fb --- /dev/null +++ b/python/tools/BUILD.bazel @@ -0,0 +1,11 @@ +load("@semmle_code//:dist.bzl", "pack_zip") + +pack_zip( + name = "tools", + srcs = glob(["**/*"]), + excludes = [ + "BUILD.bazel", + ] + glob(["recorded-call-graph-metrics/**"]), + prefix = "tools", + visibility = ["//visibility:public"], +) diff --git a/python/tools/autobuild.cmd b/python/tools/autobuild.cmd new file mode 100644 index 00000000000..051d119f9ec --- /dev/null +++ b/python/tools/autobuild.cmd @@ -0,0 +1,8 @@ +@echo off + +rem Legacy environment variables for the autobuild infrastructure. +set LGTM_SRC=%CD% +set LGTM_WORKSPACE=%CODEQL_EXTRACTOR_PYTHON_SCRATCH_DIR% + +type NUL && python "%CODEQL_EXTRACTOR_PYTHON_ROOT%\tools\index.py" +exit /b %ERRORLEVEL% diff --git a/python/tools/autobuild.sh b/python/tools/autobuild.sh new file mode 100755 index 00000000000..88134d120fd --- /dev/null +++ b/python/tools/autobuild.sh @@ -0,0 +1,18 @@ +#!/bin/sh + +set -eu + +# Legacy environment variables for the autobuild infrastructure. +LGTM_SRC="$(pwd)" +LGTM_WORKSPACE="$CODEQL_EXTRACTOR_PYTHON_SCRATCH_DIR" +export LGTM_SRC +export LGTM_WORKSPACE + +if which python3 >/dev/null; then + exec python3 "$CODEQL_EXTRACTOR_PYTHON_ROOT/tools/index.py" +elif which python >/dev/null; then + exec python "$CODEQL_EXTRACTOR_PYTHON_ROOT/tools/index.py" +else + echo "ERROR: Could not find a valid Python distribution. It should be available when running 'which python' or 'which python3' in your shell. Python 2 is no longer supported." + exit 1 +fi diff --git a/python/tools/lgtm-scripts/index.cmd b/python/tools/lgtm-scripts/index.cmd new file mode 100644 index 00000000000..254f4472262 --- /dev/null +++ b/python/tools/lgtm-scripts/index.cmd @@ -0,0 +1,3 @@ +@echo off + +py "%CODEQL_EXTRACTOR_PYTHON_ROOT%\tools\index.py" diff --git a/python/tools/lgtm-scripts/index.sh b/python/tools/lgtm-scripts/index.sh new file mode 100755 index 00000000000..f57637260b0 --- /dev/null +++ b/python/tools/lgtm-scripts/index.sh @@ -0,0 +1,5 @@ +#! /bin/bash + +set -eu + +python "${CODEQL_EXTRACTOR_PYTHON_ROOT}/tools/index.py" diff --git a/python/tools/lgtm-scripts/python_setup.cmd b/python/tools/lgtm-scripts/python_setup.cmd new file mode 100644 index 00000000000..0abc4c21dcf --- /dev/null +++ b/python/tools/lgtm-scripts/python_setup.cmd @@ -0,0 +1,3 @@ +@echo off + +py "%CODEQL_EXTRACTOR_PYTHON_ROOT%\tools\setup.py" || EXIT /B 0 diff --git a/python/tools/lgtm-scripts/python_setup.sh b/python/tools/lgtm-scripts/python_setup.sh new file mode 100755 index 00000000000..9e398d11bd3 --- /dev/null +++ b/python/tools/lgtm-scripts/python_setup.sh @@ -0,0 +1,5 @@ +#! /bin/bash + +set -eu + +python "${CODEQL_EXTRACTOR_PYTHON_ROOT}/tools/setup.py" || true diff --git a/python/tools/pre-finalize.cmd b/python/tools/pre-finalize.cmd new file mode 100644 index 00000000000..07454671062 --- /dev/null +++ b/python/tools/pre-finalize.cmd @@ -0,0 +1,11 @@ +@echo off + +type NUL && "%CODEQL_DIST%\codeql" database index-files ^ + --include-extension=.yaml ^ + --include-extension=.yml ^ + --size-limit=5m ^ + --language yaml ^ + -- ^ + "%CODEQL_EXTRACTOR_PYTHON_WIP_DATABASE%" + +exit /b %ERRORLEVEL% diff --git a/python/tools/pre-finalize.sh b/python/tools/pre-finalize.sh new file mode 100755 index 00000000000..9fe5200a38f --- /dev/null +++ b/python/tools/pre-finalize.sh @@ -0,0 +1,11 @@ +#!/bin/bash + +set -eu + +"$CODEQL_DIST/codeql" database index-files \ + --include-extension=.yaml \ + --include-extension=.yml \ + --size-limit=5m \ + --language yaml \ + -- \ + "$CODEQL_EXTRACTOR_PYTHON_WIP_DATABASE" diff --git a/ql/Cargo.lock b/ql/Cargo.lock index 557cf673d59..0db453809c9 100644 Binary files a/ql/Cargo.lock and b/ql/Cargo.lock differ diff --git a/ql/buramu/Cargo.toml b/ql/buramu/Cargo.toml index c072903b82a..741a9bc4337 100644 --- a/ql/buramu/Cargo.toml +++ b/ql/buramu/Cargo.toml @@ -7,6 +7,6 @@ edition = "2018" [dependencies] lazy_static = "1.4.0" -chrono = "0.4.35" +chrono = "0.4.37" rayon = "1.9.0" -regex = "1.10.3" +regex = "1.10.4" diff --git a/ql/extractor/Cargo.toml b/ql/extractor/Cargo.toml index bc8de165e65..1155cc3c698 100644 --- a/ql/extractor/Cargo.toml +++ b/ql/extractor/Cargo.toml @@ -16,5 +16,5 @@ clap = { version = "4.2", features = ["derive"] } tracing = "0.1" tracing-subscriber = { version = "0.3.18", features = ["env-filter"] } rayon = "1.9.0" -regex = "1.10.3" +regex = "1.10.4" codeql-extractor = { path = "../../shared/tree-sitter-extractor" } diff --git a/ql/ql/src/codeql-suites/ql-code-scanning.qls b/ql/ql/src/codeql-suites/ql-code-scanning.qls index 4595d66f2ae..1ee4ba8084d 100644 --- a/ql/ql/src/codeql-suites/ql-code-scanning.qls +++ b/ql/ql/src/codeql-suites/ql-code-scanning.qls @@ -14,6 +14,14 @@ - error - warning - recommendation +- include: + kind: + - diagnostic +- include: + kind: + - metric + tags contain: + - summary - exclude: deprecated: // - exclude: diff --git a/ql/ql/src/codeql_ql/ast/internal/TreeSitter.qll b/ql/ql/src/codeql_ql/ast/internal/TreeSitter.qll index 76e96979cfd..877f676e396 100644 --- a/ql/ql/src/codeql_ql/ast/internal/TreeSitter.qll +++ b/ql/ql/src/codeql_ql/ast/internal/TreeSitter.qll @@ -12,13 +12,13 @@ module QL { string toString() { result = this.getAPrimaryQlClass() } /** Gets the location of this element. */ - final L::Location getLocation() { ql_ast_node_info(this, _, _, result) } + final L::Location getLocation() { ql_ast_node_location(this, result) } /** Gets the parent of this element. */ - final AstNode getParent() { ql_ast_node_info(this, result, _, _) } + final AstNode getParent() { ql_ast_node_parent(this, result, _) } /** Gets the index of this node among the children of its parent. */ - final int getParentIndex() { ql_ast_node_info(this, _, result, _) } + final int getParentIndex() { ql_ast_node_parent(this, _, result) } /** Gets a field or child node of this node. */ AstNode getAFieldOrChild() { none() } @@ -1282,13 +1282,13 @@ module Dbscheme { string toString() { result = this.getAPrimaryQlClass() } /** Gets the location of this element. */ - final L::Location getLocation() { dbscheme_ast_node_info(this, _, _, result) } + final L::Location getLocation() { dbscheme_ast_node_location(this, result) } /** Gets the parent of this element. */ - final AstNode getParent() { dbscheme_ast_node_info(this, result, _, _) } + final AstNode getParent() { dbscheme_ast_node_parent(this, result, _) } /** Gets the index of this node among the children of its parent. */ - final int getParentIndex() { dbscheme_ast_node_info(this, _, result, _) } + final int getParentIndex() { dbscheme_ast_node_parent(this, _, result) } /** Gets a field or child node of this node. */ AstNode getAFieldOrChild() { none() } @@ -1618,13 +1618,13 @@ module Blame { string toString() { result = this.getAPrimaryQlClass() } /** Gets the location of this element. */ - final L::Location getLocation() { blame_ast_node_info(this, _, _, result) } + final L::Location getLocation() { blame_ast_node_location(this, result) } /** Gets the parent of this element. */ - final AstNode getParent() { blame_ast_node_info(this, result, _, _) } + final AstNode getParent() { blame_ast_node_parent(this, result, _) } /** Gets the index of this node among the children of its parent. */ - final int getParentIndex() { blame_ast_node_info(this, _, result, _) } + final int getParentIndex() { blame_ast_node_parent(this, _, result) } /** Gets a field or child node of this node. */ AstNode getAFieldOrChild() { none() } @@ -1731,13 +1731,13 @@ module JSON { string toString() { result = this.getAPrimaryQlClass() } /** Gets the location of this element. */ - final L::Location getLocation() { json_ast_node_info(this, _, _, result) } + final L::Location getLocation() { json_ast_node_location(this, result) } /** Gets the parent of this element. */ - final AstNode getParent() { json_ast_node_info(this, result, _, _) } + final AstNode getParent() { json_ast_node_parent(this, result, _) } /** Gets the index of this node among the children of its parent. */ - final int getParentIndex() { json_ast_node_info(this, _, result, _) } + final int getParentIndex() { json_ast_node_parent(this, _, result) } /** Gets a field or child node of this node. */ AstNode getAFieldOrChild() { none() } diff --git a/ql/ql/src/ql.dbscheme b/ql/ql/src/ql.dbscheme index 97aa35b9ef5..21aebc3b431 100644 --- a/ql/ql/src/ql.dbscheme +++ b/ql/ql/src/ql.dbscheme @@ -972,14 +972,16 @@ case @ql_token.kind of @ql_ast_node = @ql_add_expr | @ql_aggregate | @ql_annot_arg | @ql_annotation | @ql_arityless_predicate_expr | @ql_as_expr | @ql_as_exprs | @ql_body | @ql_bool | @ql_call_body | @ql_call_or_unqual_agg_expr | @ql_charpred | @ql_class_member | @ql_classless_predicate | @ql_comp_term | @ql_conjunction | @ql_dataclass | @ql_datatype | @ql_datatype_branch | @ql_datatype_branches | @ql_disjunction | @ql_expr_aggregate_body | @ql_expr_annotation | @ql_field | @ql_full_aggregate_body | @ql_higher_order_term | @ql_if_term | @ql_implication | @ql_import_directive | @ql_import_module_expr | @ql_in_expr | @ql_instance_of | @ql_literal | @ql_member_predicate | @ql_module | @ql_module_alias_body | @ql_module_expr | @ql_module_instantiation | @ql_module_member | @ql_module_name | @ql_module_param | @ql_mul_expr | @ql_negation | @ql_order_by | @ql_order_bys | @ql_par_expr | @ql_predicate_alias_body | @ql_predicate_expr | @ql_prefix_cast | @ql_ql | @ql_qualified_expr | @ql_qualified_rhs | @ql_quantified | @ql_range | @ql_select | @ql_set_literal | @ql_signature_expr | @ql_special_call | @ql_super_ref | @ql_token | @ql_type_alias_body | @ql_type_expr | @ql_type_union_body | @ql_unary_expr | @ql_unqual_agg_body | @ql_var_decl | @ql_var_name | @ql_variable -@ql_ast_node_parent = @file | @ql_ast_node +ql_ast_node_location( + unique int node: @ql_ast_node ref, + int loc: @location_default ref +); #keyset[parent, parent_index] -ql_ast_node_info( +ql_ast_node_parent( unique int node: @ql_ast_node ref, - int parent: @ql_ast_node_parent ref, - int parent_index: int ref, - int loc: @location_default ref + int parent: @ql_ast_node ref, + int parent_index: int ref ); /*- Dbscheme dbscheme -*/ @@ -1159,14 +1161,16 @@ case @dbscheme_token.kind of @dbscheme_ast_node = @dbscheme_annotation | @dbscheme_args_annotation | @dbscheme_branch | @dbscheme_case_decl | @dbscheme_col_type | @dbscheme_column | @dbscheme_dbscheme | @dbscheme_entry | @dbscheme_repr_type | @dbscheme_table | @dbscheme_table_name | @dbscheme_token | @dbscheme_union_decl -@dbscheme_ast_node_parent = @dbscheme_ast_node | @file +dbscheme_ast_node_location( + unique int node: @dbscheme_ast_node ref, + int loc: @location_default ref +); #keyset[parent, parent_index] -dbscheme_ast_node_info( +dbscheme_ast_node_parent( unique int node: @dbscheme_ast_node ref, - int parent: @dbscheme_ast_node_parent ref, - int parent_index: int ref, - int loc: @location_default ref + int parent: @dbscheme_ast_node ref, + int parent_index: int ref ); /*- Blame dbscheme -*/ @@ -1222,14 +1226,16 @@ case @blame_token.kind of @blame_ast_node = @blame_blame_entry | @blame_blame_info | @blame_file_entry | @blame_token -@blame_ast_node_parent = @blame_ast_node | @file +blame_ast_node_location( + unique int node: @blame_ast_node ref, + int loc: @location_default ref +); #keyset[parent, parent_index] -blame_ast_node_info( +blame_ast_node_parent( unique int node: @blame_ast_node ref, - int parent: @blame_ast_node_parent ref, - int parent_index: int ref, - int loc: @location_default ref + int parent: @blame_ast_node ref, + int parent_index: int ref ); /*- JSON dbscheme -*/ @@ -1304,13 +1310,15 @@ case @json_token.kind of @json_ast_node = @json_array | @json_document | @json_object | @json_pair | @json_string__ | @json_token -@json_ast_node_parent = @file | @json_ast_node - -#keyset[parent, parent_index] -json_ast_node_info( +json_ast_node_location( unique int node: @json_ast_node ref, - int parent: @json_ast_node_parent ref, - int parent_index: int ref, int loc: @location_default ref ); +#keyset[parent, parent_index] +json_ast_node_parent( + unique int node: @json_ast_node ref, + int parent: @json_ast_node ref, + int parent_index: int ref +); + diff --git a/ql/ql/src/ql.dbscheme.stats b/ql/ql/src/ql.dbscheme.stats index 61923351ee9..1e992f7d7a4 100644 --- a/ql/ql/src/ql.dbscheme.stats +++ b/ql/ql/src/ql.dbscheme.stats @@ -29,115 +29,115 @@ @dbscheme_annotation - 20670 + 30564 @dbscheme_args_annotation - 20661 + 30555 @dbscheme_branch - 116911 + 151025 @dbscheme_case_decl - 4372 + 5423 @dbscheme_col_type - 252564 + 341399 @dbscheme_column - 252564 + 341399 @dbscheme_dbscheme - 532 + 686 @dbscheme_entry - 169630 + 230044 @dbscheme_repr_type - 252564 + 341399 @dbscheme_reserved_word - 1309648 + 1756569 @dbscheme_table - 105934 + 146537 @dbscheme_table_name - 105934 + 146537 @dbscheme_token_annot_name - 20670 + 30564 @dbscheme_token_block_comment - 17513 + 22060 @dbscheme_token_boolean - 1440 + 2146 @dbscheme_token_date - 1042 + 1170 @dbscheme_token_dbtype - 565153 + 750840 @dbscheme_token_float - 2354 + 2962 @dbscheme_token_int - 258872 + 350777 @dbscheme_token_integer - 124608 + 158986 @dbscheme_token_line_comment - 37863 + 62355 @dbscheme_token_qldoc - 8004 + 10956 @dbscheme_token_ref - 210468 + 281648 @dbscheme_token_simple_id - 397838 + 543204 @dbscheme_token_string - 51435 + 67865 @dbscheme_token_unique - 75701 + 102289 @dbscheme_token_varchar - 7697 + 7961 @dbscheme_union_decl - 51790 + 67798 @diagnostic_debug @@ -157,255 +157,255 @@ @file - 11682 + 12283 @folder - 3982 + 4402 @json_array - 481 + 2026 @json_document - 272 + 324 @json_object - 787 + 5034 @json_pair - 2223 + 12461 @json_reserved_word - 19369 + 82515 @json_string__ - 5469 + 22176 @json_token_comment - 18 + 19 @json_token_false - 259 + 607 @json_token_null - 106 + 248 @json_token_number - 27 + 71 @json_token_string_content - 5465 + 22171 @json_token_true - 246 + 978 @location_default - 8479546 + 9617371 @ql_add_expr - 14857 + 13786 @ql_aggregate - 9694 + 9053 @ql_annot_arg - 6094 + 4043 @ql_annotation - 72771 + 65278 @ql_arityless_predicate_expr - 67354 + 58107 @ql_as_expr - 19448 + 20508 @ql_as_exprs - 8242 + 8493 @ql_body - 70726 + 65826 @ql_bool - 5039 + 4274 @ql_call_body - 66692 + 57368 @ql_call_or_unqual_agg_expr - 66692 + 57368 @ql_charpred - 12588 + 12088 @ql_class_member - 84646 + 79133 @ql_classless_predicate - 24640 + 23253 @ql_comp_term - 138784 + 140334 @ql_conjunction - 80925 + 76308 @ql_dataclass - 23834 + 22563 @ql_datatype - 809 + 548 @ql_datatype_branch - 3437 + 2719 @ql_datatype_branches - 809 + 548 @ql_disjunction - 40259 + 44890 @ql_expr_aggregate_body - 1293 + 1216 @ql_expr_annotation - 1328 + 601 @ql_field - 4149 + 3721 @ql_full_aggregate_body - 6714 + 6356 @ql_higher_order_term - 105 + 77 @ql_if_term - 3226 + 2953 @ql_implication - 87 + 101 @ql_import_directive - 24818 + 25764 @ql_import_module_expr - 24818 + 25764 @ql_in_expr - 1003 + 1037 @ql_instance_of - 17128 + 15913 @ql_literal - 98847 + 109390 @ql_member_predicate - 47549 + 43952 @ql_module - 3916 + 4567 @ql_module_alias_body - 725 + 917 @ql_module_expr - 72503 + 76399 @ql_module_instantiation - 1043 + 1740 @ql_module_member - 119591 + 118178 @ql_module_name - 6324 + 7606 @ql_module_param - 299 + 266 @ql_mul_expr - 631 + 585 @ql_negation - 12010 + 11727 @ql_order_by - 1098 + 1067 @ql_order_bys - 674 + 661 @ql_par_expr - 6038 + 5799 @ql_predicate_alias_body - 329 + 372 @ql_predicate_expr - 662 + 739 @ql_prefix_cast @@ -413,183 +413,183 @@ @ql_ql - 10785 + 11167 @ql_qualified_expr - 168511 + 165157 @ql_qualified_rhs - 168511 + 165157 @ql_quantified - 26111 + 24227 @ql_range - 417 + 365 @ql_reserved_word - 1966059 + 1875319 @ql_select - 5640 + 5989 @ql_set_literal - 3557 + 4014 @ql_signature_expr - 2248 + 3709 @ql_special_call - 4863 + 4424 @ql_super_ref - 2444 + 2901 @ql_token_addop - 14857 + 13786 @ql_token_agg_id - 9694 + 9053 @ql_token_annot_name - 75427 + 66480 @ql_token_block_comment - 1061 + 992 @ql_token_class_name - 224655 + 204253 @ql_token_closure - 2123 + 2234 @ql_token_compop - 138784 + 140334 @ql_token_dbtype - 3604 + 3766 @ql_token_direction - 200 + 205 @ql_token_empty - 2683 + 2344 @ql_token_false - 2391 + 1973 @ql_token_float - 296 + 305 @ql_token_integer - 20738 + 21612 @ql_token_line_comment - 20706 + 20888 @ql_token_literal_id - 67459 + 58184 @ql_token_mulop - 631 + 585 @ql_token_predicate - 28901 + 26200 @ql_token_predicate_name - 229368 + 221079 @ql_token_primitive_type - 49384 + 47956 @ql_token_qldoc - 56786 + 55406 @ql_token_quantifier - 26111 + 24227 @ql_token_result - 55181 + 52493 @ql_token_simple_id - 542286 + 512064 @ql_token_special_id - 4863 + 4424 @ql_token_string - 73436 + 83938 @ql_token_super - 2444 + 2901 @ql_token_this - 53091 + 50826 @ql_token_true - 2648 + 2301 @ql_token_underscore - 20351 + 17184 @ql_token_unop - 1171 + 1158 @ql_type_alias_body - 1245 + 817 @ql_type_expr - 236975 + 218057 @ql_type_union_body - 249 + 253 @ql_unary_expr - 1171 + 1158 @ql_unqual_agg_body @@ -597,15 +597,15 @@ @ql_var_decl - 129441 + 114137 @ql_var_name - 415356 + 380908 @ql_variable - 393587 + 369462 @yaml_alias_node @@ -617,19 +617,61 @@ @yaml_mapping_node - 160 + 186 @yaml_scalar_node - 1136 + 1481 @yaml_sequence_node - 52 + 59 - blame_ast_node_info + blame_ast_node_location + 0 + + + node + 0 + + + loc + 0 + + + + + node + loc + + + 12 + + + 1 + 2 + 1 + + + + + + + loc + node + + + 12 + + + + + + + + blame_ast_node_parent 0 @@ -644,10 +686,6 @@ parent_index 0 - - loc - 0 - @@ -682,22 +720,6 @@ - - node - loc - - - 12 - - - 1 - 2 - 1 - - - - - parent node @@ -718,16 +740,6 @@ - - parent - loc - - - 12 - - - - parent_index node @@ -748,46 +760,6 @@ - - parent_index - loc - - - 12 - - - - - - loc - node - - - 12 - - - - - - loc - parent - - - 12 - - - - - - loc - parent_index - - - 12 - - - - @@ -1286,15 +1258,15 @@ containerparent - 15662 + 16683 parent - 3982 + 4402 child - 15662 + 16683 @@ -1308,32 +1280,32 @@ 1 2 - 1880 + 2157 2 3 - 882 + 978 3 4 - 354 + 375 4 6 - 334 + 348 6 - 14 - 312 + 15 + 339 - 14 - 240 - 220 + 15 + 255 + 205 @@ -1349,7 +1321,7 @@ 1 2 - 15662 + 16683 @@ -1359,15 +1331,15 @@ dbscheme_annotation_args_annotation - 20661 + 30555 dbscheme_annotation - 20661 + 30555 args_annotation - 20661 + 30555 @@ -1381,7 +1353,7 @@ 1 2 - 20661 + 30555 @@ -1397,7 +1369,7 @@ 1 2 - 20661 + 30555 @@ -1407,11 +1379,11 @@ dbscheme_annotation_def - 20670 + 30564 id - 20670 + 30564 @@ -1466,11 +1438,11 @@ dbscheme_args_annotation_child - 34968 + 49845 dbscheme_args_annotation - 20661 + 30555 index @@ -1478,7 +1450,7 @@ child - 34968 + 49845 @@ -1492,17 +1464,17 @@ 1 2 - 7137 + 12292 2 3 - 12741 + 17236 3 4 - 783 + 1027 @@ -1518,17 +1490,17 @@ 1 2 - 7137 + 12292 2 3 - 12741 + 17236 3 4 - 783 + 1027 @@ -1542,18 +1514,18 @@ 12 - 783 - 784 + 1027 + 1028 1 - 13524 - 13525 + 18263 + 18264 1 - 20661 - 20662 + 30555 + 30556 1 @@ -1568,18 +1540,18 @@ 12 - 783 - 784 + 1027 + 1028 1 - 13524 - 13525 + 18263 + 18264 1 - 20661 - 20662 + 30555 + 30556 1 @@ -1596,7 +1568,7 @@ 1 2 - 34968 + 49845 @@ -1612,7 +1584,7 @@ 1 2 - 34968 + 49845 @@ -1622,15 +1594,15 @@ dbscheme_args_annotation_def - 20661 + 30555 id - 20661 + 30555 name - 20661 + 30555 @@ -1644,7 +1616,7 @@ 1 2 - 20661 + 30555 @@ -1660,7 +1632,7 @@ 1 2 - 20661 + 30555 @@ -1669,24 +1641,73 @@ - dbscheme_ast_node_info - 4444432 + dbscheme_ast_node_location + 5985718 node - 4444432 - - - parent - 1354658 - - - parent_index - 476 + 5985718 loc - 3650776 + 4903745 + + + + + node + loc + + + 12 + + + 1 + 2 + 5985718 + + + + + + + loc + node + + + 12 + + + 1 + 2 + 3821772 + + + 2 + 3 + 1081973 + + + + + + + + + dbscheme_ast_node_parent + 5900617 + + + node + 5900617 + + + parent + 1833365 + + + parent_index + 501 @@ -1700,7 +1721,7 @@ 1 2 - 4444432 + 5900617 @@ -1716,23 +1737,7 @@ 1 2 - 4444432 - - - - - - - node - loc - - - 12 - - - 1 - 2 - 4444432 + 5900617 @@ -1748,32 +1753,32 @@ 1 2 - 793673 + 1081973 2 4 - 117079 + 151168 4 5 - 11481 + 13080 5 6 - 247420 + 341594 6 8 - 112901 + 149771 8 - 477 - 72104 + 502 + 95779 @@ -1789,73 +1794,32 @@ 1 2 - 793673 + 1081973 2 4 - 117079 + 151168 4 5 - 11481 + 13080 5 6 - 247420 + 341594 6 8 - 112901 + 149771 8 - 477 - 72104 - - - - - - - parent - loc - - - 12 - - - 1 - 2 - 793673 - - - 2 - 4 - 117079 - - - 4 - 5 - 11481 - - - 5 - 6 - 247420 - - - 6 - 8 - 112901 - - - 8 - 477 - 72104 + 502 + 95779 @@ -1869,69 +1833,69 @@ 12 - 7 - 257 - 39 - - - 258 - 307 + 3 + 140 38 - 321 - 338 + 147 + 386 + 38 + + + 387 + 491 + 31 + + + 491 + 492 + 49 + + + 499 + 712 + 38 + + + 717 + 841 42 - 345 - 508 - 37 + 842 + 1054 + 38 - 508 - 652 - 37 + 1055 + 1190 + 44 - 661 - 763 - 36 + 1192 + 1357 + 41 - 769 - 930 - 36 + 1362 + 1575 + 39 - 936 - 1034 - 36 + 1582 + 2577 + 38 - 1047 - 1122 - 36 + 2626 + 5260 + 38 - 1122 - 1375 - 36 - - - 1381 - 1960 - 36 - - - 2174 - 3839 - 36 - - - 3932 - 1354659 - 31 + 5283 + 1833366 + 27 @@ -1945,208 +1909,69 @@ 12 - 7 - 257 - 39 - - - 258 - 307 + 3 + 140 38 - 321 - 338 - 42 - - - 345 - 508 - 37 - - - 508 - 652 - 37 - - - 661 - 763 - 36 - - - 769 - 930 - 36 - - - 936 - 1034 - 36 - - - 1047 - 1122 - 36 - - - 1122 - 1375 - 36 - - - 1381 - 1960 - 36 - - - 2174 - 3839 - 36 - - - 3932 - 1354659 - 31 - - - - - - - parent_index - loc - - - 12 - - - 7 - 257 - 39 - - - 258 - 307 + 147 + 386 38 - 321 - 338 + 387 + 491 + 31 + + + 491 + 492 + 49 + + + 499 + 712 + 38 + + + 717 + 841 42 - 345 - 508 - 37 + 842 + 1054 + 38 - 508 - 652 - 37 + 1055 + 1190 + 44 - 661 - 763 - 36 + 1192 + 1357 + 41 - 769 - 930 - 36 + 1362 + 1575 + 39 - 936 - 1034 - 36 + 1582 + 2577 + 38 - 1047 - 1122 - 36 + 2626 + 5260 + 38 - 1122 - 1375 - 36 - - - 1381 - 1960 - 36 - - - 2174 - 3839 - 36 - - - 3932 - 1079008 - 31 - - - - - - - loc - node - - - 12 - - - 1 - 2 - 2857120 - - - 2 - 3 - 793656 - - - - - - - loc - parent - - - 12 - - - 1 - 2 - 2857120 - - - 2 - 3 - 793656 - - - - - - - loc - parent_index - - - 12 - - - 1 - 2 - 3132771 - - - 2 - 3 - 518005 + 5283 + 1833366 + 27 @@ -2156,11 +1981,11 @@ dbscheme_branch_child - 233822 + 302050 dbscheme_branch - 116911 + 151025 index @@ -2168,7 +1993,7 @@ child - 233822 + 302050 @@ -2182,7 +2007,7 @@ 2 3 - 116911 + 151025 @@ -2198,7 +2023,7 @@ 2 3 - 116911 + 151025 @@ -2212,8 +2037,8 @@ 12 - 116911 - 116912 + 151025 + 151026 2 @@ -2228,8 +2053,8 @@ 12 - 116911 - 116912 + 151025 + 151026 2 @@ -2246,7 +2071,7 @@ 1 2 - 233822 + 302050 @@ -2262,7 +2087,7 @@ 1 2 - 233822 + 302050 @@ -2272,11 +2097,11 @@ dbscheme_branch_def - 116911 + 151025 id - 116911 + 151025 @@ -2331,11 +2156,11 @@ dbscheme_case_decl_child - 116911 + 151025 dbscheme_case_decl - 4372 + 5423 index @@ -2343,7 +2168,7 @@ child - 116911 + 151025 @@ -2362,57 +2187,57 @@ 2 3 - 661 + 841 3 4 - 486 + 605 4 5 - 595 + 691 5 6 - 335 + 456 6 8 - 187 + 218 9 - 12 - 335 + 11 + 408 - 12 + 11 18 - 347 + 438 21 29 - 395 + 467 29 38 - 360 + 436 38 - 116 - 335 + 117 + 407 - 116 + 118 219 - 335 + 455 @@ -2433,57 +2258,57 @@ 2 3 - 661 + 841 3 4 - 486 + 605 4 5 - 595 + 691 5 6 - 335 + 456 6 8 - 187 + 218 9 - 12 - 335 + 11 + 408 - 12 + 11 18 - 347 + 438 21 29 - 395 + 467 29 38 - 360 + 436 38 - 116 - 335 + 117 + 407 - 116 + 118 219 - 335 + 455 @@ -2497,63 +2322,73 @@ 12 - 120 - 121 - 21 - - - 135 - 136 - 27 - - - 143 - 210 - 11 - - - 227 - 228 - 34 - - - 238 - 404 - 17 - - - 405 - 421 + 156 + 157 20 - 449 - 452 + 159 + 160 + 1 + + + 219 + 220 + 27 + + + 227 + 294 + 11 + + + 311 + 312 + 32 + + + 330 + 494 + 17 + + + 521 + 544 + 13 + + + 544 + 548 + 9 + + + 581 + 584 15 - 466 - 469 + 598 + 601 17 - 472 - 607 + 643 + 795 17 - 614 - 1424 + 802 + 1764 17 - 1424 - 2295 + 1764 + 2830 17 - 2629 - 4373 + 3285 + 5424 5 @@ -2568,63 +2403,73 @@ 12 - 120 - 121 - 21 - - - 135 - 136 - 27 - - - 143 - 210 - 11 - - - 227 - 228 - 34 - - - 238 - 404 - 17 - - - 405 - 421 + 156 + 157 20 - 449 - 452 + 159 + 160 + 1 + + + 219 + 220 + 27 + + + 227 + 294 + 11 + + + 311 + 312 + 32 + + + 330 + 494 + 17 + + + 521 + 544 + 13 + + + 544 + 548 + 9 + + + 581 + 584 15 - 466 - 469 + 598 + 601 17 - 472 - 607 + 643 + 795 17 - 614 - 1424 + 802 + 1764 17 - 1424 - 2295 + 1764 + 2830 17 - 2629 - 4373 + 3285 + 5424 5 @@ -2641,7 +2486,7 @@ 1 2 - 116911 + 151025 @@ -2657,7 +2502,7 @@ 1 2 - 116911 + 151025 @@ -2667,19 +2512,19 @@ dbscheme_case_decl_def - 4372 + 5423 id - 4372 + 5423 base - 4372 + 5423 discriminator - 4372 + 5423 @@ -2693,7 +2538,7 @@ 1 2 - 4372 + 5423 @@ -2709,7 +2554,7 @@ 1 2 - 4372 + 5423 @@ -2725,7 +2570,7 @@ 1 2 - 4372 + 5423 @@ -2741,7 +2586,7 @@ 1 2 - 4372 + 5423 @@ -2757,7 +2602,7 @@ 1 2 - 4372 + 5423 @@ -2773,7 +2618,7 @@ 1 2 - 4372 + 5423 @@ -2783,15 +2628,15 @@ dbscheme_col_type_def - 252564 + 341399 id - 252564 + 341399 child - 252564 + 341399 @@ -2805,7 +2650,7 @@ 1 2 - 252564 + 341399 @@ -2821,7 +2666,7 @@ 1 2 - 252564 + 341399 @@ -2831,23 +2676,23 @@ dbscheme_column_def - 252564 + 341399 id - 252564 + 341399 col_name - 252564 + 341399 col_type - 252564 + 341399 repr_type - 252564 + 341399 @@ -2861,7 +2706,7 @@ 1 2 - 252564 + 341399 @@ -2877,7 +2722,7 @@ 1 2 - 252564 + 341399 @@ -2893,7 +2738,7 @@ 1 2 - 252564 + 341399 @@ -2909,7 +2754,7 @@ 1 2 - 252564 + 341399 @@ -2925,7 +2770,7 @@ 1 2 - 252564 + 341399 @@ -2941,7 +2786,7 @@ 1 2 - 252564 + 341399 @@ -2957,7 +2802,7 @@ 1 2 - 252564 + 341399 @@ -2973,7 +2818,7 @@ 1 2 - 252564 + 341399 @@ -2989,7 +2834,7 @@ 1 2 - 252564 + 341399 @@ -3005,7 +2850,7 @@ 1 2 - 252564 + 341399 @@ -3021,7 +2866,7 @@ 1 2 - 252564 + 341399 @@ -3037,7 +2882,7 @@ 1 2 - 252564 + 341399 @@ -3047,15 +2892,15 @@ dbscheme_column_is_ref - 210468 + 281648 dbscheme_column - 210468 + 281648 is_ref - 210468 + 281648 @@ -3069,7 +2914,7 @@ 1 2 - 210468 + 281648 @@ -3085,7 +2930,7 @@ 1 2 - 210468 + 281648 @@ -3095,15 +2940,15 @@ dbscheme_column_is_unique - 75701 + 102289 dbscheme_column - 75701 + 102289 is_unique - 75701 + 102289 @@ -3117,7 +2962,7 @@ 1 2 - 75701 + 102289 @@ -3133,7 +2978,7 @@ 1 2 - 75701 + 102289 @@ -3143,15 +2988,15 @@ dbscheme_column_qldoc - 470 + 670 dbscheme_column - 470 + 670 qldoc - 470 + 670 @@ -3165,7 +3010,7 @@ 1 2 - 470 + 670 @@ -3181,7 +3026,7 @@ 1 2 - 470 + 670 @@ -3191,19 +3036,19 @@ dbscheme_dbscheme_child - 169630 + 230044 dbscheme_dbscheme - 532 + 685 index - 476 + 501 child - 169630 + 230044 @@ -3216,68 +3061,68 @@ 2 - 142 - 43 + 147 + 56 - 142 - 200 - 40 + 148 + 205 + 55 - 200 - 259 - 41 + 205 + 275 + 54 - 260 - 278 - 41 + 275 + 287 + 52 - 278 - 288 - 38 + 287 + 306 + 62 - 290 - 305 - 46 + 307 + 312 + 52 - 305 - 310 - 42 + 313 + 320 + 56 - 310 - 315 - 40 - - - 316 + 320 418 - 43 + 55 418 - 457 + 460 + 58 + + + 460 + 464 46 - 457 - 462 - 28 + 465 + 469 + 59 - 462 - 466 - 45 + 470 + 478 + 57 - 466 - 477 - 39 + 478 + 502 + 23 @@ -3292,68 +3137,68 @@ 2 - 142 - 43 + 147 + 56 - 142 - 200 - 40 + 148 + 205 + 55 - 200 - 259 - 41 + 205 + 275 + 54 - 260 - 278 - 41 + 275 + 287 + 52 - 278 - 288 - 38 + 287 + 306 + 62 - 290 - 305 - 46 + 307 + 312 + 52 - 305 - 310 - 42 + 313 + 320 + 56 - 310 - 315 - 40 - - - 316 + 320 418 - 43 + 55 418 - 457 + 460 + 58 + + + 460 + 464 46 - 457 - 462 - 28 + 465 + 469 + 59 - 462 - 466 - 45 + 470 + 478 + 57 - 466 - 477 - 39 + 478 + 502 + 23 @@ -3367,58 +3212,63 @@ 12 - 7 - 137 - 39 + 3 + 140 + 38 - 138 - 187 - 43 + 147 + 230 + 38 - 187 - 188 + 231 + 272 + 31 + + + 272 + 273 70 - 190 - 330 + 279 + 469 + 38 + + + 470 + 561 37 - 331 - 418 - 36 - - - 419 - 422 - 42 - - - 422 - 452 + 562 + 563 40 - 452 - 502 - 36 + 563 + 601 + 40 - 510 - 529 - 32 + 601 + 664 + 41 - 529 - 530 + 664 + 682 + 27 + + + 682 + 683 76 - 530 - 533 + 683 + 686 25 @@ -3433,58 +3283,63 @@ 12 - 7 - 137 - 39 + 3 + 140 + 38 - 138 - 187 - 43 + 147 + 230 + 38 - 187 - 188 + 231 + 272 + 31 + + + 272 + 273 70 - 190 - 330 + 279 + 469 + 38 + + + 470 + 561 37 - 331 - 418 - 36 - - - 419 - 422 - 42 - - - 422 - 452 + 562 + 563 40 - 452 - 502 - 36 + 563 + 601 + 40 - 510 - 529 - 32 + 601 + 664 + 41 - 529 - 530 + 664 + 682 + 27 + + + 682 + 683 76 - 530 - 533 + 683 + 686 25 @@ -3501,7 +3356,7 @@ 1 2 - 169630 + 230044 @@ -3517,7 +3372,7 @@ 1 2 - 169630 + 230044 @@ -3527,26 +3382,26 @@ dbscheme_dbscheme_def - 532 + 686 id - 532 + 686 dbscheme_entry_def - 169630 + 230044 id - 169630 + 230044 child - 169630 + 230044 @@ -3560,7 +3415,7 @@ 1 2 - 169630 + 230044 @@ -3576,7 +3431,7 @@ 1 2 - 169630 + 230044 @@ -3586,11 +3441,11 @@ dbscheme_repr_type_child - 260261 + 349360 dbscheme_repr_type - 252564 + 341399 index @@ -3598,7 +3453,7 @@ child - 260261 + 349360 @@ -3612,12 +3467,12 @@ 1 2 - 244867 + 333438 2 3 - 7697 + 7961 @@ -3633,12 +3488,12 @@ 1 2 - 244867 + 333438 2 3 - 7697 + 7961 @@ -3652,13 +3507,13 @@ 12 - 7697 - 7698 + 7961 + 7962 1 - 252564 - 252565 + 341399 + 341400 1 @@ -3673,13 +3528,13 @@ 12 - 7697 - 7698 + 7961 + 7962 1 - 252564 - 252565 + 341399 + 341400 1 @@ -3696,7 +3551,7 @@ 1 2 - 260261 + 349360 @@ -3712,7 +3567,7 @@ 1 2 - 260261 + 349360 @@ -3722,22 +3577,22 @@ dbscheme_repr_type_def - 252564 + 341399 id - 252564 + 341399 dbscheme_table_child - 273234 + 371963 dbscheme_table - 105934 + 146537 index @@ -3745,7 +3600,7 @@ child - 273234 + 371963 @@ -3759,32 +3614,32 @@ 1 2 - 22414 + 32738 2 3 - 41141 + 55828 3 4 - 16585 + 24047 4 5 - 16007 + 21522 5 7 - 9023 + 11405 7 11 - 764 + 997 @@ -3800,32 +3655,32 @@ 1 2 - 22414 + 32738 2 3 - 41141 + 55828 3 4 - 16585 + 24047 4 5 - 16007 + 21522 5 7 - 9023 + 11405 7 11 - 764 + 997 @@ -3844,48 +3699,48 @@ 1 - 145 - 146 + 181 + 182 1 - 265 - 266 + 337 + 338 1 - 764 - 765 + 997 + 998 1 - 4621 - 4622 + 5790 + 5791 1 - 9787 - 9788 + 12402 + 12403 1 - 25794 - 25795 + 33924 + 33925 1 - 42379 - 42380 + 57971 + 57972 1 - 83520 - 83521 + 113799 + 113800 1 - 105934 - 105935 + 146537 + 146538 1 @@ -3905,48 +3760,48 @@ 1 - 145 - 146 + 181 + 182 1 - 265 - 266 + 337 + 338 1 - 764 - 765 + 997 + 998 1 - 4621 - 4622 + 5790 + 5791 1 - 9787 - 9788 + 12402 + 12403 1 - 25794 - 25795 + 33924 + 33925 1 - 42379 - 42380 + 57971 + 57972 1 - 83520 - 83521 + 113799 + 113800 1 - 105934 - 105935 + 146537 + 146538 1 @@ -3963,7 +3818,7 @@ 1 2 - 273234 + 371963 @@ -3979,7 +3834,7 @@ 1 2 - 273234 + 371963 @@ -3989,15 +3844,15 @@ dbscheme_table_def - 105934 + 146537 id - 105934 + 146537 table_name - 105934 + 146537 @@ -4011,7 +3866,7 @@ 1 2 - 105934 + 146537 @@ -4027,7 +3882,7 @@ 1 2 - 105934 + 146537 @@ -4037,15 +3892,15 @@ dbscheme_table_name_def - 105934 + 146537 id - 105934 + 146537 child - 105934 + 146537 @@ -4059,7 +3914,7 @@ 1 2 - 105934 + 146537 @@ -4075,7 +3930,7 @@ 1 2 - 105934 + 146537 @@ -4085,11 +3940,11 @@ dbscheme_tokeninfo - 3090306 + 4152352 id - 3090306 + 4152352 kind @@ -4097,7 +3952,7 @@ value - 7109 + 7232 @@ -4111,7 +3966,7 @@ 1 2 - 3090306 + 4152352 @@ -4127,7 +3982,7 @@ 1 2 - 3090306 + 4152352 @@ -4141,83 +3996,83 @@ 12 - 1042 - 1043 + 1170 + 1171 1 - 1440 - 1441 + 2146 + 2147 1 - 2354 - 2355 + 2962 + 2963 1 - 7697 - 7698 + 7961 + 7962 1 - 8004 - 8005 + 10956 + 10957 1 - 17513 - 17514 + 22060 + 22061 1 - 20670 - 20671 + 30564 + 30565 1 - 37863 - 37864 + 62355 + 62356 1 - 51435 - 51436 + 67865 + 67866 1 - 75701 - 75702 + 102289 + 102290 1 - 124608 - 124609 + 158986 + 158987 1 - 210468 - 210469 + 281648 + 281649 1 - 258872 - 258873 + 350777 + 350778 1 - 397838 - 397839 + 543204 + 543205 1 - 565153 - 565154 + 750840 + 750841 1 - 1309648 - 1309649 + 1756569 + 1756570 1 @@ -4247,33 +4102,33 @@ 1 - 99 - 100 + 100 + 101 1 - 197 - 198 + 207 + 208 1 - 302 - 303 + 303 + 304 1 - 595 - 596 + 616 + 617 1 - 2601 - 2602 + 2655 + 2656 1 - 3292 - 3293 + 3328 + 3329 1 @@ -4294,68 +4149,68 @@ 3 - 9 - 534 + 13 + 575 - 9 - 25 + 13 + 29 + 422 + + + 29 + 38 + 546 + + + 38 + 56 + 638 + + + 56 + 77 + 597 + + + 77 + 116 + 541 + + + 116 + 149 543 - 25 - 32 + 149 + 156 + 481 + + + 156 + 199 544 - 32 - 51 - 471 + 202 + 312 + 540 - 51 - 67 - 534 + 312 + 416 + 543 - 67 - 73 - 567 + 416 + 1685 + 543 - 73 - 107 - 611 - - - 107 - 121 - 590 - - - 121 - 157 - 534 - - - 158 - 235 - 412 - - - 240 - 322 - 544 - - - 324 - 1897 - 534 - - - 2000 - 270542 - 72 + 1697 + 354482 + 100 @@ -4371,7 +4226,7 @@ 1 2 - 7109 + 7232 @@ -4381,11 +4236,11 @@ dbscheme_union_decl_child - 209792 + 276677 dbscheme_union_decl - 51790 + 67798 index @@ -4393,7 +4248,7 @@ child - 209792 + 276677 @@ -4407,37 +4262,42 @@ 1 2 - 2156 + 2870 2 3 - 25065 + 33104 3 4 - 7795 + 10107 4 5 - 4896 + 6309 5 6 - 3506 + 4592 6 9 - 4492 + 5609 9 + 69 + 5085 + + + 85 106 - 3880 + 122 @@ -4453,37 +4313,42 @@ 1 2 - 2156 + 2870 2 3 - 25065 + 33104 3 4 - 7795 + 10107 4 5 - 4896 + 6309 5 6 - 3506 + 4592 6 9 - 4492 + 5609 9 + 69 + 5085 + + + 85 106 - 3880 + 122 @@ -4497,63 +4362,68 @@ 12 - 7 - 40 + 11 + 44 7 - 41 - 42 + 45 + 46 11 - 55 - 56 + 59 + 103 2 - 70 - 71 + 122 + 123 17 - 71 - 72 - 10 + 123 + 124 + 6 - 98 - 147 - 9 - - - 213 - 223 - 9 - - - 223 - 399 + 126 + 166 8 - 453 - 477 + 173 + 319 + 6 + + + 327 + 328 8 - 505 - 1059 + 328 + 544 8 - 1142 - 3881 + 647 + 671 8 - 4790 - 51791 + 699 + 1414 + 8 + + + 1501 + 5208 + 8 + + + 6334 + 67799 8 @@ -4568,63 +4438,68 @@ 12 - 7 - 40 + 11 + 44 7 - 41 - 42 + 45 + 46 11 - 55 - 56 + 59 + 103 2 - 70 - 71 + 122 + 123 17 - 71 - 72 - 10 + 123 + 124 + 6 - 98 - 147 - 9 - - - 213 - 223 - 9 - - - 223 - 399 + 126 + 166 8 - 453 - 477 + 173 + 319 + 6 + + + 327 + 328 8 - 505 - 1059 + 328 + 544 8 - 1142 - 3881 + 647 + 671 8 - 4790 - 51791 + 699 + 1414 + 8 + + + 1501 + 5208 + 8 + + + 6334 + 67799 8 @@ -4641,7 +4516,7 @@ 1 2 - 209792 + 276677 @@ -4657,7 +4532,7 @@ 1 2 - 209792 + 276677 @@ -4667,15 +4542,15 @@ dbscheme_union_decl_def - 51790 + 67798 id - 51790 + 67798 base - 51790 + 67798 @@ -4689,7 +4564,7 @@ 1 2 - 51790 + 67798 @@ -4705,7 +4580,7 @@ 1 2 - 51790 + 67798 @@ -5242,15 +5117,15 @@ files - 11682 + 12283 id - 11682 + 12283 name - 11682 + 12283 @@ -5264,7 +5139,7 @@ 1 2 - 11682 + 12283 @@ -5280,7 +5155,7 @@ 1 2 - 11682 + 12283 @@ -5290,15 +5165,15 @@ folders - 3982 + 4402 id - 3982 + 4402 name - 3982 + 4402 @@ -5312,7 +5187,7 @@ 1 2 - 3982 + 4402 @@ -5328,7 +5203,7 @@ 1 2 - 3982 + 4402 @@ -5338,11 +5213,11 @@ json_array_child - 2660 + 5897 json_array - 450 + 1962 index @@ -5350,7 +5225,7 @@ child - 2660 + 5897 @@ -5364,32 +5239,27 @@ 1 2 - 129 + 935 2 3 - 136 + 623 3 4 - 78 + 179 4 - 5 - 37 - - - 5 7 - 41 + 149 7 612 - 29 + 76 @@ -5405,32 +5275,27 @@ 1 2 - 129 + 935 2 3 - 136 + 623 3 4 - 78 + 179 4 - 5 - 37 - - - 5 7 - 41 + 149 7 612 - 29 + 76 @@ -5451,26 +5316,31 @@ 2 3 - 84 + 26 3 4 - 61 + 58 4 - 7 + 5 + 61 + + + 5 + 8 48 - 7 - 22 + 8 + 61 46 - 26 - 451 + 69 + 1963 8 @@ -5492,26 +5362,31 @@ 2 3 - 84 + 26 3 4 - 61 + 58 4 - 7 + 5 + 61 + + + 5 + 8 48 - 7 - 22 + 8 + 61 46 - 26 - 451 + 69 + 1963 8 @@ -5528,7 +5403,7 @@ 1 2 - 2660 + 5897 @@ -5544,7 +5419,7 @@ 1 2 - 2660 + 5897 @@ -5554,35 +5429,84 @@ json_array_def - 481 + 2026 id - 481 + 2026 - json_ast_node_info - 34722 + json_ast_node_location + 148630 node - 34722 + 148630 + + + loc + 148504 + + + + + node + loc + + + 12 + + + 1 + 2 + 148630 + + + + + + + loc + node + + + 12 + + + 1 + 2 + 148378 + + + 2 + 3 + 126 + + + + + + + + + json_ast_node_parent + 148287 + + + node + 148287 parent - 9501 + 42018 parent_index 1223 - - loc - 34603 - @@ -5595,7 +5519,7 @@ 1 2 - 34722 + 148287 @@ -5611,23 +5535,7 @@ 1 2 - 34722 - - - - - - - node - loc - - - 12 - - - 1 - 2 - 34722 + 148287 @@ -5643,22 +5551,22 @@ 1 3 - 597 + 608 3 4 - 8027 + 36317 4 - 12 - 718 + 6 + 3406 - 13 + 7 1224 - 159 + 1687 @@ -5674,53 +5582,22 @@ 1 3 - 597 + 608 3 4 - 8027 + 36317 4 - 12 - 718 + 6 + 3406 - 13 + 7 1224 - 159 - - - - - - - parent - loc - - - 12 - - - 1 - 3 - 597 - - - 3 - 4 - 8027 - - - 4 - 12 - 718 - - - 13 - 1224 - 159 + 1687 @@ -5741,27 +5618,37 @@ 2 3 - 168 + 52 3 4 - 106 + 116 4 + 6 + 54 + + + 6 7 - 96 + 68 7 - 22 - 94 + 12 + 96 - 22 - 9502 - 31 + 12 + 213 + 92 + + + 226 + 42019 + 17 @@ -5782,131 +5669,37 @@ 2 3 - 168 + 52 3 4 - 106 + 116 4 + 6 + 54 + + + 6 7 - 96 + 68 7 - 22 - 94 - - - 22 - 9502 - 31 - - - - - - - parent_index - loc - - - 12 - - - 1 - 2 - 728 - - - 2 - 3 - 168 - - - 3 - 4 - 106 - - - 4 - 7 + 12 96 - 7 - 22 - 94 + 12 + 213 + 92 - 22 - 9385 - 31 - - - - - - - loc - node - - - 12 - - - 1 - 2 - 34484 - - - 2 - 3 - 119 - - - - - - - loc - parent - - - 12 - - - 1 - 2 - 34484 - - - 2 - 3 - 119 - - - - - - - loc - parent_index - - - 12 - - - 1 - 2 - 34601 - - - 2 - 3 - 2 + 226 + 42019 + 17 @@ -5916,11 +5709,11 @@ json_document_child - 269 + 321 json_document - 269 + 321 index @@ -5928,7 +5721,7 @@ child - 269 + 321 @@ -5942,7 +5735,7 @@ 1 2 - 269 + 321 @@ -5958,7 +5751,7 @@ 1 2 - 269 + 321 @@ -5972,8 +5765,8 @@ 12 - 269 - 270 + 321 + 322 1 @@ -5988,8 +5781,8 @@ 12 - 269 - 270 + 321 + 322 1 @@ -6006,7 +5799,7 @@ 1 2 - 269 + 321 @@ -6022,7 +5815,7 @@ 1 2 - 269 + 321 @@ -6032,30 +5825,30 @@ json_document_def - 272 + 324 id - 272 + 324 json_object_child - 2223 + 12461 json_object - 763 + 4817 index - 110 + 159 child - 2223 + 12461 @@ -6069,32 +5862,27 @@ 1 2 - 211 + 754 2 3 - 322 + 2780 3 4 - 65 + 781 4 - 6 - 44 + 11 + 445 - 6 - 7 - 102 - - - 7 - 111 - 19 + 11 + 160 + 57 @@ -6110,32 +5898,27 @@ 1 2 - 211 + 754 2 3 - 322 + 2780 3 4 - 65 + 781 4 - 6 - 44 + 11 + 445 - 6 - 7 - 102 - - - 7 - 111 - 19 + 11 + 160 + 57 @@ -6151,37 +5934,42 @@ 1 2 - 61 + 23 2 3 - 11 + 65 3 4 - 10 + 2 4 5 - 2 + 20 5 6 + 11 + + + 6 + 9 + 12 + + + 9 + 10 14 - 7 - 166 - 9 - - - 230 - 764 - 3 + 13 + 4818 + 12 @@ -6197,37 +5985,42 @@ 1 2 - 61 + 23 2 3 - 11 + 65 3 4 - 10 + 2 4 5 - 2 + 20 5 6 + 11 + + + 6 + 9 + 12 + + + 9 + 10 14 - 7 - 166 - 9 - - - 230 - 764 - 3 + 13 + 4818 + 12 @@ -6243,7 +6036,7 @@ 1 2 - 2223 + 12461 @@ -6259,7 +6052,7 @@ 1 2 - 2223 + 12461 @@ -6269,30 +6062,30 @@ json_object_def - 787 + 5034 id - 787 + 5034 json_pair_def - 2223 + 12461 id - 2223 + 12461 key__ - 2223 + 12461 value - 2223 + 12461 @@ -6306,7 +6099,7 @@ 1 2 - 2223 + 12461 @@ -6322,7 +6115,7 @@ 1 2 - 2223 + 12461 @@ -6338,7 +6131,7 @@ 1 2 - 2223 + 12461 @@ -6354,7 +6147,7 @@ 1 2 - 2223 + 12461 @@ -6370,7 +6163,7 @@ 1 2 - 2223 + 12461 @@ -6386,7 +6179,7 @@ 1 2 - 2223 + 12461 @@ -6396,15 +6189,15 @@ json_string_child - 5465 + 22171 json_string__ - 5465 + 22171 child - 5465 + 22171 @@ -6418,7 +6211,7 @@ 1 2 - 5465 + 22171 @@ -6434,7 +6227,7 @@ 1 2 - 5465 + 22171 @@ -6444,22 +6237,22 @@ json_string_def - 5469 + 22176 id - 5469 + 22176 json_tokeninfo - 25490 + 106609 id - 25490 + 106609 kind @@ -6467,7 +6260,7 @@ value - 3153 + 4324 @@ -6481,7 +6274,7 @@ 1 2 - 25490 + 106609 @@ -6497,7 +6290,7 @@ 1 2 - 25490 + 106609 @@ -6511,38 +6304,38 @@ 12 - 18 - 19 + 19 + 20 1 - 27 - 28 + 71 + 72 1 - 106 - 107 + 248 + 249 1 - 246 - 247 + 607 + 608 1 - 259 - 260 + 978 + 979 1 - 5465 - 5466 + 22171 + 22172 1 - 19369 - 19370 + 82515 + 82516 1 @@ -6567,18 +6360,18 @@ 1 - 14 - 15 + 16 + 17 1 - 18 - 19 + 29 + 30 1 - 3111 - 3112 + 4277 + 4278 1 @@ -6595,17 +6388,27 @@ 1 2 - 2832 + 3160 2 - 7 - 246 + 3 + 406 - 7 - 10939 - 75 + 3 + 5 + 365 + + + 5 + 62 + 326 + + + 71 + 44353 + 67 @@ -6621,7 +6424,12 @@ 1 2 - 3153 + 4316 + + + 2 + 3 + 8 @@ -6631,31 +6439,31 @@ locations_default - 8479546 + 9617371 id - 8479546 + 9617371 file - 11682 + 12283 beginLine - 9036 + 11293 beginColumn - 1371 + 1385 endLine - 9036 + 11293 endColumn - 1376 + 1389 @@ -6669,7 +6477,7 @@ 1 2 - 8479546 + 9617371 @@ -6685,7 +6493,7 @@ 1 2 - 8479546 + 9617371 @@ -6701,7 +6509,7 @@ 1 2 - 8479546 + 9617371 @@ -6717,7 +6525,7 @@ 1 2 - 8479546 + 9617371 @@ -6733,7 +6541,7 @@ 1 2 - 8479546 + 9617371 @@ -6749,72 +6557,72 @@ 1 21 - 906 + 930 21 32 - 909 + 950 32 40 - 959 + 1024 40 54 - 882 + 930 54 - 70 - 903 + 72 + 952 - 70 - 88 - 878 + 72 + 89 + 965 - 88 - 117 - 880 + 89 + 119 + 929 - 117 - 160 - 879 + 119 + 164 + 934 - 160 - 236 - 880 + 164 + 243 + 923 - 236 - 377 - 877 + 243 + 392 + 923 - 377 - 709 - 878 + 392 + 748 + 923 - 709 - 2101 - 877 + 748 + 2678 + 922 - 2102 - 9785 - 880 + 2683 + 9950 + 923 - 9805 + 9962 54160 - 94 + 55 @@ -6830,72 +6638,72 @@ 1 3 - 511 + 434 3 4 - 1068 + 775 4 5 - 961 + 1146 5 6 - 680 + 995 6 7 - 632 + 691 7 9 - 946 + 988 9 11 - 969 + 919 11 - 16 - 1044 + 15 + 992 - 16 - 23 - 907 + 15 + 22 + 1018 - 23 - 36 - 906 + 22 + 34 + 975 - 36 - 65 - 885 + 34 + 61 + 935 - 65 - 158 - 879 + 61 + 143 + 922 - 158 - 1002 - 877 + 143 + 975 + 923 - 1002 - 9027 - 417 + 977 + 11284 + 570 @@ -6911,67 +6719,67 @@ 1 11 - 997 + 1028 11 17 - 858 + 920 17 21 - 876 + 913 21 26 - 967 + 1027 26 32 - 939 + 987 32 39 - 976 + 994 39 47 - 938 + 1014 47 - 56 - 928 + 57 + 1003 - 56 + 57 66 - 908 + 957 66 77 - 925 + 1001 77 87 - 897 + 934 87 - 98 - 929 + 99 + 1024 - 98 + 99 512 - 544 + 481 @@ -6987,72 +6795,72 @@ 1 3 - 510 + 434 3 4 - 1068 + 774 4 5 - 962 + 1147 5 6 - 680 + 995 6 7 - 632 + 690 7 9 - 946 + 989 9 11 - 969 + 919 11 - 16 - 1044 + 15 + 992 - 16 - 23 - 907 + 15 + 22 + 1018 - 23 - 36 - 906 + 22 + 34 + 975 - 36 - 65 - 885 + 34 + 61 + 935 - 65 - 158 - 879 + 61 + 143 + 922 - 158 - 1002 - 877 + 143 + 975 + 923 - 1002 - 9027 - 417 + 977 + 11284 + 570 @@ -7068,67 +6876,67 @@ 1 14 - 962 + 1008 14 - 20 - 888 + 21 + 1081 - 20 - 24 - 908 + 21 + 25 + 958 - 24 - 29 - 942 + 25 + 30 + 950 - 29 - 36 - 942 + 30 + 37 + 999 - 36 - 43 - 953 + 37 + 44 + 1031 - 43 - 51 - 914 + 44 + 52 + 923 - 51 - 61 - 930 + 52 + 62 + 946 - 61 - 72 - 954 + 62 + 73 + 1042 - 72 - 82 - 911 + 73 + 83 + 1006 - 82 - 92 - 914 + 83 + 93 + 934 - 92 - 102 - 933 + 93 + 104 + 945 - 102 + 104 523 - 531 + 460 @@ -7144,62 +6952,67 @@ 1 2 - 1328 + 1130 - 2 - 10 - 621 + 4 + 5 + 1128 - 10 + 5 11 - 1424 + 801 11 - 20 - 819 + 16 + 994 - 20 - 38 - 679 + 16 + 22 + 854 - 38 + 22 + 30 + 890 + + + 30 + 41 + 877 + + + 41 + 56 + 860 + + + 56 92 - 685 + 854 92 - 170 - 680 + 1472 + 847 - 170 - 595 - 678 + 1499 + 2520 + 847 - 596 - 1692 - 679 + 2527 + 5340 + 847 - 1692 - 3137 - 679 - - - 3137 - 12009 - 678 - - - 12114 - 51821 - 86 + 5348 + 46386 + 364 @@ -7215,52 +7028,62 @@ 1 2 - 2644 + 2258 2 3 - 1456 + 654 3 + 4 + 1191 + + + 4 + 5 + 1015 + + + 5 + 6 + 658 + + + 6 + 7 + 532 + + + 7 + 8 + 712 + + + 8 10 - 685 + 1014 10 - 11 - 354 + 109 + 852 - 11 - 12 - 565 + 109 + 400 + 847 - 12 - 18 - 691 + 400 + 626 + 849 - 18 - 206 - 680 - - - 206 - 332 - 684 - - - 332 - 542 - 679 - - - 542 - 11511 - 598 + 626 + 12065 + 711 @@ -7276,57 +7099,62 @@ 1 2 - 1516 + 1130 - 2 - 7 - 524 + 3 + 4 + 1454 - 7 + 4 8 - 1697 + 977 8 - 13 - 674 + 11 + 746 - 13 - 18 - 834 + 11 + 15 + 1029 - 18 - 28 - 695 + 15 + 20 + 966 - 28 - 46 - 696 + 20 + 27 + 942 - 46 - 76 - 685 + 27 + 37 + 854 - 76 - 92 - 692 + 37 + 57 + 853 - 92 - 105 - 687 + 57 + 84 + 882 - 105 - 387 - 336 + 84 + 101 + 895 + + + 101 + 397 + 565 @@ -7342,42 +7170,42 @@ 1 2 - 4164 + 4809 2 3 - 1304 + 1797 3 4 - 500 + 961 4 6 - 624 + 940 6 - 9 - 648 + 10 + 986 - 9 - 14 - 756 + 10 + 16 + 862 - 14 - 26 - 678 + 16 + 45 + 848 - 26 - 4558 - 362 + 45 + 5676 + 90 @@ -7393,57 +7221,67 @@ 1 2 - 1328 + 1130 - 2 - 7 - 666 + 3 + 4 + 1128 - 7 + 4 8 - 1472 + 710 8 - 13 - 824 + 10 + 808 - 13 - 18 - 712 + 10 + 14 + 1024 - 18 + 14 + 19 + 1007 + + + 19 26 - 679 + 963 26 - 42 - 690 + 34 + 848 - 42 - 73 - 701 + 34 + 49 + 857 - 73 - 91 - 697 + 49 + 77 + 860 - 91 - 105 - 721 + 77 + 97 + 895 - 105 - 391 - 546 + 97 + 118 + 857 + + + 118 + 400 + 206 @@ -7459,7 +7297,7 @@ 1 4 - 92 + 102 4 @@ -7469,658 +7307,13 @@ 5 8 + 65 + + + 8 + 9 122 - - 8 - 9 - 123 - - - 9 - 11 - 117 - - - 11 - 12 - 40 - - - 12 - 13 - 109 - - - 13 - 17 - 118 - - - 17 - 22 - 108 - - - 22 - 33 - 106 - - - 33 - 75 - 103 - - - 75 - 739 - 103 - - - 740 - 195640 - 103 - - - 213807 - 865889 - 6 - - - - - - - beginColumn - file - - - 12 - - - 1 - 3 - 120 - - - 4 - 5 - 120 - - - 5 - 7 - 71 - - - 7 - 8 - 62 - - - 8 - 9 - 119 - - - 9 - 11 - 109 - - - 11 - 12 - 40 - - - 12 - 13 - 112 - - - 13 - 17 - 125 - - - 17 - 23 - 105 - - - 23 - 34 - 106 - - - 34 - 79 - 103 - - - 80 - 3436 - 103 - - - 3468 - 11682 - 76 - - - - - - - beginColumn - beginLine - - - 12 - - - 1 - 2 - 215 - - - 2 - 3 - 318 - - - 3 - 4 - 126 - - - 4 - 5 - 141 - - - 5 - 6 - 75 - - - 6 - 8 - 103 - - - 8 - 13 - 117 - - - 13 - 32 - 104 - - - 32 - 2080 - 103 - - - 2093 - 9035 - 69 - - - - - - - beginColumn - endLine - - - 12 - - - 1 - 2 - 215 - - - 2 - 3 - 318 - - - 3 - 4 - 126 - - - 4 - 5 - 141 - - - 5 - 6 - 75 - - - 6 - 8 - 103 - - - 8 - 13 - 117 - - - 13 - 32 - 104 - - - 32 - 2112 - 103 - - - 2123 - 9035 - 69 - - - - - - - beginColumn - endColumn - - - 12 - - - 1 - 2 - 693 - - - 2 - 3 - 314 - - - 3 - 4 - 112 - - - 4 - 7 - 114 - - - 7 - 84 - 103 - - - 84 - 263 - 35 - - - - - - - endLine - id - - - 12 - - - 1 - 2 - 1323 - - - 2 - 11 - 675 - - - 11 - 12 - 1420 - - - 12 - 22 - 806 - - - 22 - 44 - 680 - - - 44 - 95 - 683 - - - 95 - 173 - 685 - - - 173 - 808 - 678 - - - 823 - 1711 - 678 - - - 1711 - 3189 - 678 - - - 3189 - 16909 - 678 - - - 17178 - 52390 - 52 - - - - - - - endLine - file - - - 12 - - - 1 - 2 - 2641 - - - 2 - 3 - 1465 - - - 3 - 10 - 673 - - - 10 - 11 - 361 - - - 11 - 12 - 555 - - - 12 - 18 - 699 - - - 18 - 206 - 680 - - - 206 - 330 - 682 - - - 330 - 541 - 680 - - - 541 - 6341 - 600 - - - - - - - endLine - beginLine - - - 12 - - - 1 - 2 - 2018 - - - 2 - 3 - 2354 - - - 3 - 4 - 1144 - - - 4 - 5 - 627 - - - 5 - 8 - 797 - - - 8 - 12 - 693 - - - 12 - 20 - 679 - - - 20 - 50 - 682 - - - 50 - 64 - 42 - - - - - - - endLine - beginColumn - - - 12 - - - 1 - 2 - 1468 - - - 2 - 7 - 555 - - - 7 - 8 - 1644 - - - 8 - 13 - 721 - - - 13 - 18 - 825 - - - 18 - 28 - 709 - - - 28 - 45 - 682 - - - 45 - 76 - 699 - - - 76 - 92 - 694 - - - 92 - 105 - 695 - - - 105 - 388 - 344 - - - - - - - endLine - endColumn - - - 12 - - - 1 - 2 - 1323 - - - 2 - 7 - 691 - - - 7 - 8 - 1491 - - - 8 - 12 - 718 - - - 12 - 17 - 669 - - - 17 - 24 - 732 - - - 24 - 40 - 707 - - - 40 - 70 - 691 - - - 70 - 90 - 732 - - - 90 - 104 - 704 - - - 104 - 391 - 578 - - - - - - - endColumn - id - - - 12 - - - 1 - 4 - 87 - - - 4 - 5 - 120 - - - 5 - 8 - 120 - - - 8 - 9 - 123 - 9 11 @@ -8129,47 +7322,737 @@ 11 12 - 41 + 73 12 13 - 108 + 114 13 - 17 - 121 + 18 + 106 - 17 - 22 + 18 + 21 + 115 + + + 21 + 32 + 118 + + + 32 + 61 + 104 + + + 61 + 255 + 104 + + + 261 + 113805 + 104 + + + 114086 + 1069778 + 27 + + + + + + + beginColumn + file + + + 12 + + + 1 + 3 + 118 + + + 3 + 4 + 13 + + + 4 + 5 + 119 + + + 5 + 8 + 75 + + + 8 + 9 + 119 + + + 9 + 11 105 + + 11 + 12 + 73 + + + 12 + 13 + 111 + + + 13 + 19 + 122 + + + 19 + 22 + 111 + 22 33 - 107 + 108 33 - 73 + 66 + 107 + + + 68 + 683 104 - 73 - 547 + 732 + 12283 + 100 + + + + + + + beginColumn + beginLine + + + 12 + + + 1 + 2 + 223 + + + 2 + 3 + 307 + + + 3 + 4 + 135 + + + 4 + 5 + 140 + + + 5 + 6 + 78 + + + 6 + 8 + 101 + + + 8 + 13 + 120 + + + 13 + 32 104 - 571 - 148376 + 32 + 2144 104 - 149850 - 309769 - 22 + 2186 + 11292 + 73 + + + + + + + beginColumn + endLine + + + 12 + + + 1 + 2 + 223 + + + 2 + 3 + 307 + + + 3 + 4 + 135 + + + 4 + 5 + 140 + + + 5 + 6 + 78 + + + 6 + 8 + 100 + + + 8 + 13 + 121 + + + 13 + 32 + 104 + + + 32 + 2158 + 104 + + + 2226 + 11292 + 73 + + + + + + + beginColumn + endColumn + + + 12 + + + 1 + 2 + 689 + + + 2 + 3 + 323 + + + 3 + 4 + 118 + + + 4 + 7 + 117 + + + 7 + 88 + 104 + + + 88 + 266 + 34 + + + + + + + endLine + id + + + 12 + + + 1 + 2 + 1129 + + + 4 + 5 + 1 + + + 5 + 6 + 1128 + + + 6 + 12 + 762 + + + 12 + 17 + 961 + + + 17 + 23 + 922 + + + 23 + 31 + 919 + + + 31 + 43 + 899 + + + 43 + 58 + 879 + + + 58 + 100 + 855 + + + 100 + 1721 + 847 + + + 1722 + 2799 + 847 + + + 2805 + 6136 + 847 + + + 6136 + 46393 + 297 + + + + + + + endLine + file + + + 12 + + + 1 + 2 + 2258 + + + 2 + 3 + 654 + + + 3 + 4 + 1191 + + + 4 + 5 + 1017 + + + 5 + 6 + 652 + + + 6 + 7 + 522 + + + 7 + 8 + 735 + + + 8 + 10 + 1005 + + + 10 + 109 + 850 + + + 109 + 400 + 850 + + + 400 + 626 + 849 + + + 626 + 6687 + 710 + + + + + + + endLine + beginLine + + + 12 + + + 1 + 2 + 1130 + + + 2 + 3 + 3437 + + + 3 + 4 + 1709 + + + 4 + 5 + 1095 + + + 5 + 6 + 700 + + + 6 + 9 + 918 + + + 9 + 14 + 918 + + + 14 + 25 + 868 + + + 25 + 60 + 518 + + + + + + + endLine + beginColumn + + + 12 + + + 1 + 2 + 1129 + + + 2 + 3 + 1 + + + 3 + 4 + 1454 + + + 4 + 8 + 926 + + + 8 + 11 + 708 + + + 11 + 15 + 1045 + + + 15 + 20 + 968 + + + 20 + 27 + 954 + + + 27 + 37 + 880 + + + 37 + 57 + 867 + + + 57 + 84 + 872 + + + 84 + 100 + 847 + + + 100 + 397 + 642 + + + + + + + endLine + endColumn + + + 12 + + + 1 + 2 + 1129 + + + 2 + 3 + 1 + + + 3 + 4 + 1128 + + + 4 + 8 + 718 + + + 8 + 10 + 801 + + + 10 + 13 + 814 + + + 13 + 17 + 919 + + + 17 + 23 + 965 + + + 23 + 31 + 959 + + + 31 + 44 + 879 + + + 44 + 70 + 851 + + + 70 + 93 + 878 + + + 93 + 109 + 849 + + + 109 + 400 + 402 + + + + + + + endColumn + id + + + 12 + + + 1 + 4 + 95 + + + 4 + 5 + 120 + + + 5 + 8 + 64 + + + 8 + 9 + 120 + + + 9 + 11 + 105 + + + 11 + 12 + 76 + + + 12 + 13 + 113 + + + 13 + 18 + 109 + + + 18 + 21 + 111 + + + 21 + 31 + 106 + + + 31 + 55 + 106 + + + 55 + 191 + 105 + + + 192 + 56899 + 105 + + + 58047 + 407640 + 54 @@ -8185,72 +8068,72 @@ 1 3 - 113 + 110 3 + 4 + 15 + + + 4 5 - 122 + 119 5 - 7 - 70 - - - 7 8 - 63 + 74 8 9 - 117 + 116 9 11 - 108 + 104 11 12 - 38 + 73 12 13 - 112 + 114 13 - 17 - 124 + 19 + 126 - 17 + 19 23 - 105 + 115 23 - 33 - 106 + 34 + 114 - 33 - 71 - 104 + 34 + 72 + 105 - 71 - 2586 - 104 + 72 + 1551 + 105 - 2841 - 10750 - 90 + 1727 + 11266 + 99 @@ -8266,52 +8149,52 @@ 1 2 - 213 + 219 2 3 - 316 + 306 3 4 - 126 + 134 4 5 - 141 + 142 5 6 - 71 + 74 6 8 - 102 + 103 8 - 12 - 106 + 13 + 120 - 12 - 28 - 106 + 13 + 33 + 108 - 28 - 1632 - 104 + 33 + 2296 + 105 - 1663 - 6417 - 91 + 2325 + 10163 + 78 @@ -8327,31 +8210,31 @@ 1 2 - 683 + 676 2 3 - 268 + 276 3 4 - 116 + 124 4 7 - 109 + 112 7 - 34 - 104 + 36 + 105 - 34 - 102 + 36 + 105 96 @@ -8368,52 +8251,52 @@ 1 2 - 213 + 219 2 3 - 316 + 306 3 4 - 126 + 134 4 5 - 141 + 142 5 6 - 71 + 74 6 8 - 102 + 103 8 - 12 + 13 + 121 + + + 13 + 33 107 - 12 - 28 - 107 + 33 + 2249 + 105 - 28 - 1640 - 104 - - - 1670 - 6384 - 89 + 2292 + 10163 + 78 @@ -8423,23 +8306,23 @@ ql_add_expr_def - 14857 + 13786 id - 14857 + 13786 left - 14857 + 13786 right - 14857 + 13786 child - 14857 + 13786 @@ -8453,7 +8336,7 @@ 1 2 - 14857 + 13786 @@ -8469,7 +8352,7 @@ 1 2 - 14857 + 13786 @@ -8485,7 +8368,7 @@ 1 2 - 14857 + 13786 @@ -8501,7 +8384,7 @@ 1 2 - 14857 + 13786 @@ -8517,7 +8400,7 @@ 1 2 - 14857 + 13786 @@ -8533,7 +8416,7 @@ 1 2 - 14857 + 13786 @@ -8549,7 +8432,7 @@ 1 2 - 14857 + 13786 @@ -8565,7 +8448,7 @@ 1 2 - 14857 + 13786 @@ -8581,7 +8464,7 @@ 1 2 - 14857 + 13786 @@ -8597,7 +8480,7 @@ 1 2 - 14857 + 13786 @@ -8613,7 +8496,7 @@ 1 2 - 14857 + 13786 @@ -8629,7 +8512,7 @@ 1 2 - 14857 + 13786 @@ -8639,11 +8522,11 @@ ql_aggregate_child - 17934 + 16852 ql_aggregate - 9694 + 9053 index @@ -8651,7 +8534,7 @@ child - 17934 + 16852 @@ -8665,17 +8548,17 @@ 1 2 - 1687 + 1481 2 3 - 7774 + 7345 3 4 - 233 + 227 @@ -8691,17 +8574,17 @@ 1 2 - 1687 + 1481 2 3 - 7774 + 7345 3 4 - 233 + 227 @@ -8715,18 +8598,18 @@ 12 - 233 - 234 + 227 + 228 1 - 8007 - 8008 + 7572 + 7573 1 - 9694 - 9695 + 9053 + 9054 1 @@ -8741,18 +8624,18 @@ 12 - 233 - 234 + 227 + 228 1 - 8007 - 8008 + 7572 + 7573 1 - 9694 - 9695 + 9053 + 9054 1 @@ -8769,7 +8652,7 @@ 1 2 - 17934 + 16852 @@ -8785,7 +8668,7 @@ 1 2 - 17934 + 16852 @@ -8795,26 +8678,26 @@ ql_aggregate_def - 9694 + 9053 id - 9694 + 9053 ql_annot_arg_def - 6094 + 4043 id - 6094 + 4043 child - 6094 + 4043 @@ -8828,7 +8711,7 @@ 1 2 - 6094 + 4043 @@ -8844,7 +8727,7 @@ 1 2 - 6094 + 4043 @@ -8854,11 +8737,11 @@ ql_annotation_args - 6862 + 4365 ql_annotation - 5326 + 3721 index @@ -8866,7 +8749,7 @@ args - 6862 + 4365 @@ -8880,17 +8763,12 @@ 1 2 - 4776 + 3448 3 - 4 - 382 - - - 5 10 - 168 + 273 @@ -8906,17 +8784,12 @@ 1 2 - 4776 + 3448 3 - 4 - 382 - - - 5 10 - 168 + 273 @@ -8930,28 +8803,28 @@ 12 - 2 - 3 + 1 + 2 2 - 48 - 49 + 15 + 16 2 - 168 - 169 + 33 + 34 2 - 550 - 551 + 273 + 274 2 - 5326 - 5327 + 3721 + 3722 1 @@ -8966,28 +8839,28 @@ 12 - 2 - 3 + 1 + 2 2 - 48 - 49 + 15 + 16 2 - 168 - 169 + 33 + 34 2 - 550 - 551 + 273 + 274 2 - 5326 - 5327 + 3721 + 3722 1 @@ -9004,7 +8877,7 @@ 1 2 - 6862 + 4365 @@ -9020,7 +8893,7 @@ 1 2 - 6862 + 4365 @@ -9030,15 +8903,15 @@ ql_annotation_def - 72771 + 65278 id - 72771 + 65278 name - 72771 + 65278 @@ -9052,7 +8925,7 @@ 1 2 - 72771 + 65278 @@ -9068,7 +8941,7 @@ 1 2 - 72771 + 65278 @@ -9078,15 +8951,15 @@ ql_arityless_predicate_expr_def - 67354 + 58107 id - 67354 + 58107 name - 67354 + 58107 @@ -9100,7 +8973,7 @@ 1 2 - 67354 + 58107 @@ -9116,7 +8989,7 @@ 1 2 - 67354 + 58107 @@ -9126,15 +8999,15 @@ ql_arityless_predicate_expr_qualifier - 10179 + 10163 ql_arityless_predicate_expr - 10179 + 10163 qualifier - 10179 + 10163 @@ -9148,7 +9021,7 @@ 1 2 - 10179 + 10163 @@ -9164,7 +9037,7 @@ 1 2 - 10179 + 10163 @@ -9174,11 +9047,11 @@ ql_as_expr_child - 19682 + 20772 ql_as_expr - 19448 + 20508 index @@ -9186,7 +9059,7 @@ child - 19682 + 20772 @@ -9200,12 +9073,12 @@ 1 2 - 19214 + 20244 2 3 - 234 + 264 @@ -9221,12 +9094,12 @@ 1 2 - 19214 + 20244 2 3 - 234 + 264 @@ -9240,13 +9113,13 @@ 12 - 234 - 235 + 264 + 265 1 - 19448 - 19449 + 20508 + 20509 1 @@ -9261,13 +9134,13 @@ 12 - 234 - 235 + 264 + 265 1 - 19448 - 19449 + 20508 + 20509 1 @@ -9284,7 +9157,7 @@ 1 2 - 19682 + 20772 @@ -9300,7 +9173,7 @@ 1 2 - 19682 + 20772 @@ -9310,22 +9183,22 @@ ql_as_expr_def - 19448 + 20508 id - 19448 + 20508 ql_as_exprs_child - 19448 + 20508 ql_as_exprs - 8242 + 8493 index @@ -9333,7 +9206,7 @@ child - 19448 + 20508 @@ -9347,32 +9220,32 @@ 1 2 - 3031 + 2998 2 3 - 2962 + 3100 3 4 - 672 + 714 4 5 - 702 + 739 5 7 - 678 + 714 7 36 - 197 + 228 @@ -9388,32 +9261,32 @@ 1 2 - 3031 + 2998 2 3 - 2962 + 3100 3 4 - 672 + 714 4 5 - 702 + 739 5 7 - 678 + 714 7 36 - 197 + 228 @@ -9438,47 +9311,52 @@ 3 - 4 - 4 - - - 4 5 - 6 + 3 - 6 - 10 + 7 + 9 2 10 + 11 + 5 + + + 12 13 - 3 + 2 13 - 19 + 17 3 - 26 - 55 + 17 + 23 3 - 123 - 720 + 35 + 67 3 - 875 - 2250 + 145 + 770 3 - 5211 - 8243 + 942 + 2396 + 3 + + + 5495 + 8494 2 @@ -9504,47 +9382,52 @@ 3 - 4 - 4 - - - 4 5 - 6 + 3 - 6 - 10 + 7 + 9 2 10 + 11 + 5 + + + 12 13 - 3 + 2 13 - 19 + 17 3 - 26 - 55 + 17 + 23 3 - 123 - 720 + 35 + 67 3 - 875 - 2250 + 145 + 770 3 - 5211 - 8243 + 942 + 2396 + 3 + + + 5495 + 8494 2 @@ -9561,7 +9444,7 @@ 1 2 - 19448 + 20508 @@ -9577,7 +9460,7 @@ 1 2 - 19448 + 20508 @@ -9587,35 +9470,89 @@ ql_as_exprs_def - 8242 + 8493 id - 8242 + 8493 - ql_ast_node_info - 6543748 + ql_ast_node_location + 6230328 node - 6543748 + 6230328 + + + loc + 4563391 + + + + + node + loc + + + 12 + + + 1 + 2 + 6230328 + + + + + + + loc + node + + + 12 + + + 1 + 2 + 3246688 + + + 2 + 3 + 979956 + + + 3 + 6 + 336747 + + + + + + + + + ql_ast_node_parent + 6197281 + + + node + 6197281 parent - 3102776 + 2947735 parent_index 2057 - - loc - 4792814 - @@ -9628,7 +9565,7 @@ 1 2 - 6543748 + 6197281 @@ -9644,23 +9581,7 @@ 1 2 - 6543748 - - - - - - - node - loc - - - 12 - - - 1 - 2 - 6543748 + 6197281 @@ -9676,27 +9597,27 @@ 1 2 - 1758472 + 1667033 2 3 - 308336 + 276121 3 4 - 770593 + 754976 4 11 - 240390 + 228408 11 2058 - 24985 + 21197 @@ -9712,63 +9633,27 @@ 1 2 - 1758472 + 1667033 2 3 - 308336 + 276121 3 4 - 770593 + 754976 4 11 - 240390 + 228408 11 2058 - 24985 - - - - - - - parent - loc - - - 12 - - - 1 - 2 - 1758472 - - - 2 - 3 - 308336 - - - 3 - 4 - 770593 - - - 4 - 11 - 240390 - - - 11 - 2058 - 24985 + 21197 @@ -9784,12 +9669,12 @@ 1 2 - 805 + 739 2 3 - 251 + 317 3 @@ -9798,23 +9683,28 @@ 4 - 9 - 188 + 8 + 126 - 9 - 24 - 161 + 8 + 15 + 162 - 24 - 119 + 15 + 47 + 158 + + + 48 + 11121 155 - 120 - 3102777 - 109 + 16033 + 2947736 + 12 @@ -9830,12 +9720,12 @@ 1 2 - 805 + 739 2 3 - 251 + 317 3 @@ -9844,142 +9734,28 @@ 4 - 9 - 188 + 8 + 126 - 9 - 24 - 161 + 8 + 15 + 162 - 24 - 119 + 15 + 47 + 158 + + + 48 + 11121 155 - 120 - 3102777 - 109 - - - - - - - parent_index - loc - - - 12 - - - 1 - 2 - 805 - - - 2 - 3 - 251 - - - 3 - 4 - 388 - - - 4 - 9 - 188 - - - 9 - 24 - 161 - - - 24 - 119 - 155 - - - 120 - 2116191 - 109 - - - - - - - loc - node - - - 12 - - - 1 - 2 - 3411160 - - - 2 - 3 - 1025095 - - - 3 - 6 - 356559 - - - - - - - loc - parent - - - 12 - - - 1 - 2 - 3411160 - - - 2 - 3 - 1025095 - - - 3 - 6 - 356559 - - - - - - - loc - parent_index - - - 12 - - - 1 - 2 - 4028466 - - - 2 - 3 - 764348 + 16033 + 2947736 + 12 @@ -9989,15 +9765,15 @@ ql_body_def - 70726 + 65826 id - 70726 + 65826 child - 70726 + 65826 @@ -10011,7 +9787,7 @@ 1 2 - 70726 + 65826 @@ -10027,7 +9803,7 @@ 1 2 - 70726 + 65826 @@ -10037,15 +9813,15 @@ ql_bool_def - 5039 + 4274 id - 5039 + 4274 child - 5039 + 4274 @@ -10059,7 +9835,7 @@ 1 2 - 5039 + 4274 @@ -10075,7 +9851,7 @@ 1 2 - 5039 + 4274 @@ -10085,11 +9861,11 @@ ql_call_body_child - 122556 + 99620 ql_call_body - 57429 + 49469 index @@ -10097,7 +9873,7 @@ child - 122556 + 99620 @@ -10111,27 +9887,27 @@ 1 2 - 25731 + 23173 2 3 - 15265 + 13151 3 4 - 8568 + 7473 4 - 5 - 3857 + 6 + 4432 - 5 + 6 16 - 4008 + 1240 @@ -10147,27 +9923,27 @@ 1 2 - 25731 + 23173 2 3 - 15265 + 13151 3 4 - 8568 + 7473 4 - 5 - 3857 + 6 + 4432 - 5 + 6 16 - 4008 + 1240 @@ -10181,73 +9957,78 @@ 12 - 16 - 17 - 2 - - - 18 - 19 + 2 + 3 1 - 42 - 43 + 4 + 5 1 - 91 - 92 + 10 + 11 1 - 184 - 185 + 17 + 18 1 - 450 - 451 + 46 + 47 1 - 760 - 761 + 103 + 104 1 - 1254 - 1255 + 237 + 238 1 - 2292 - 2293 + 342 + 343 1 - 4008 - 4009 + 559 + 560 1 - 7865 - 7866 + 1240 + 1241 1 - 16433 - 16434 + 2478 + 2479 1 - 31698 - 31699 + 5672 + 5673 1 - 57429 - 57430 + 13145 + 13146 + 1 + + + 26296 + 26297 + 1 + + + 49469 + 49470 1 @@ -10262,73 +10043,78 @@ 12 - 16 - 17 - 2 - - - 18 - 19 + 2 + 3 1 - 42 - 43 + 4 + 5 1 - 91 - 92 + 10 + 11 1 - 184 - 185 + 17 + 18 1 - 450 - 451 + 46 + 47 1 - 760 - 761 + 103 + 104 1 - 1254 - 1255 + 237 + 238 1 - 2292 - 2293 + 342 + 343 1 - 4008 - 4009 + 559 + 560 1 - 7865 - 7866 + 1240 + 1241 1 - 16433 - 16434 + 2478 + 2479 1 - 31698 - 31699 + 5672 + 5673 1 - 57429 - 57430 + 13145 + 13146 + 1 + + + 26296 + 26297 + 1 + + + 49469 + 49470 1 @@ -10345,7 +10131,7 @@ 1 2 - 122556 + 99620 @@ -10361,7 +10147,7 @@ 1 2 - 122556 + 99620 @@ -10371,22 +10157,22 @@ ql_call_body_def - 66692 + 57368 id - 66692 + 57368 ql_call_or_unqual_agg_expr_child - 133679 + 115036 ql_call_or_unqual_agg_expr - 66692 + 57368 index @@ -10394,7 +10180,7 @@ child - 133679 + 115036 @@ -10408,12 +10194,12 @@ 2 3 - 66397 + 57068 3 4 - 295 + 300 @@ -10429,12 +10215,12 @@ 2 3 - 66397 + 57068 3 4 - 295 + 300 @@ -10448,13 +10234,13 @@ 12 - 295 - 296 + 300 + 301 1 - 66692 - 66693 + 57368 + 57369 2 @@ -10469,13 +10255,13 @@ 12 - 295 - 296 + 300 + 301 1 - 66692 - 66693 + 57368 + 57369 2 @@ -10492,7 +10278,7 @@ 1 2 - 133679 + 115036 @@ -10508,7 +10294,7 @@ 1 2 - 133679 + 115036 @@ -10518,30 +10304,30 @@ ql_call_or_unqual_agg_expr_def - 66692 + 57368 id - 66692 + 57368 ql_charpred_def - 12588 + 12088 id - 12588 + 12088 body - 12588 + 12088 child - 12588 + 12088 @@ -10555,7 +10341,7 @@ 1 2 - 12588 + 12088 @@ -10571,7 +10357,7 @@ 1 2 - 12588 + 12088 @@ -10587,7 +10373,7 @@ 1 2 - 12588 + 12088 @@ -10603,7 +10389,7 @@ 1 2 - 12588 + 12088 @@ -10619,7 +10405,7 @@ 1 2 - 12588 + 12088 @@ -10635,7 +10421,7 @@ 1 2 - 12588 + 12088 @@ -10645,19 +10431,19 @@ ql_class_member_child - 121852 + 112375 ql_class_member - 84646 + 79133 index - 4 + 5 child - 121852 + 112375 @@ -10671,17 +10457,17 @@ 1 2 - 51616 + 49462 2 3 - 28924 + 26160 3 - 5 - 4106 + 6 + 3511 @@ -10697,17 +10483,17 @@ 1 2 - 51616 + 49462 2 3 - 28924 + 26160 3 - 5 - 4106 + 6 + 3511 @@ -10721,23 +10507,28 @@ 12 - 70 - 71 + 8 + 9 1 - 4106 - 4107 + 52 + 53 1 - 33030 - 33031 + 3511 + 3512 1 - 84646 - 84647 + 29671 + 29672 + 1 + + + 79133 + 79134 1 @@ -10752,23 +10543,28 @@ 12 - 70 - 71 + 8 + 9 1 - 4106 - 4107 + 52 + 53 1 - 33030 - 33031 + 3511 + 3512 1 - 84646 - 84647 + 29671 + 29672 + 1 + + + 79133 + 79134 1 @@ -10785,7 +10581,7 @@ 1 2 - 121852 + 112375 @@ -10801,7 +10597,7 @@ 1 2 - 121852 + 112375 @@ -10811,22 +10607,22 @@ ql_class_member_def - 84646 + 79133 id - 84646 + 79133 ql_classless_predicate_child - 72035 + 63161 ql_classless_predicate - 24640 + 23253 index @@ -10834,7 +10630,7 @@ child - 72035 + 63161 @@ -10848,32 +10644,32 @@ 1 2 - 2612 + 2872 2 3 - 9441 + 9678 3 4 - 6254 + 5651 4 5 - 3291 + 2828 5 7 - 2183 + 1868 7 17 - 859 + 356 @@ -10889,32 +10685,32 @@ 1 2 - 2612 + 2872 2 3 - 9441 + 9678 3 4 - 6254 + 5651 4 5 - 3291 + 2828 5 7 - 2183 + 1868 7 17 - 859 + 356 @@ -10928,9 +10724,19 @@ 12 - 8 - 9 - 2 + 1 + 2 + 1 + + + 2 + 3 + 1 + + + 5 + 6 + 1 9 @@ -10938,68 +10744,63 @@ 1 - 25 - 26 + 22 + 23 1 - 43 - 44 + 37 + 38 1 - 83 - 84 + 63 + 64 1 - 164 - 165 + 103 + 104 1 - 269 - 270 + 177 + 178 1 - 491 - 492 + 356 + 357 1 - 859 - 860 + 773 + 774 1 - 1446 - 1447 + 2224 + 2225 1 - 3042 - 3043 + 5052 + 5053 1 - 6333 - 6334 + 10703 + 10704 1 - 12587 - 12588 + 20381 + 20382 1 - 22028 - 22029 - 1 - - - 24640 - 24641 + 23253 + 23254 1 @@ -11014,9 +10815,19 @@ 12 - 8 - 9 - 2 + 1 + 2 + 1 + + + 2 + 3 + 1 + + + 5 + 6 + 1 9 @@ -11024,68 +10835,63 @@ 1 - 25 - 26 + 22 + 23 1 - 43 - 44 + 37 + 38 1 - 83 - 84 + 63 + 64 1 - 164 - 165 + 103 + 104 1 - 269 - 270 + 177 + 178 1 - 491 - 492 + 356 + 357 1 - 859 - 860 + 773 + 774 1 - 1446 - 1447 + 2224 + 2225 1 - 3042 - 3043 + 5052 + 5053 1 - 6333 - 6334 + 10703 + 10704 1 - 12587 - 12588 + 20381 + 20382 1 - 22028 - 22029 - 1 - - - 24640 - 24641 + 23253 + 23254 1 @@ -11102,7 +10908,7 @@ 1 2 - 72035 + 63161 @@ -11118,7 +10924,7 @@ 1 2 - 72035 + 63161 @@ -11128,19 +10934,19 @@ ql_classless_predicate_def - 24640 + 23253 id - 24640 + 23253 name - 24640 + 23253 return_type - 24640 + 23253 @@ -11154,7 +10960,7 @@ 1 2 - 24640 + 23253 @@ -11170,7 +10976,7 @@ 1 2 - 24640 + 23253 @@ -11186,7 +10992,7 @@ 1 2 - 24640 + 23253 @@ -11202,7 +11008,7 @@ 1 2 - 24640 + 23253 @@ -11218,7 +11024,7 @@ 1 2 - 24640 + 23253 @@ -11234,7 +11040,7 @@ 1 2 - 24640 + 23253 @@ -11244,23 +11050,23 @@ ql_comp_term_def - 138784 + 140334 id - 138784 + 140334 left - 138784 + 140334 right - 138784 + 140334 child - 138784 + 140334 @@ -11274,7 +11080,7 @@ 1 2 - 138784 + 140334 @@ -11290,7 +11096,7 @@ 1 2 - 138784 + 140334 @@ -11306,7 +11112,7 @@ 1 2 - 138784 + 140334 @@ -11322,7 +11128,7 @@ 1 2 - 138784 + 140334 @@ -11338,7 +11144,7 @@ 1 2 - 138784 + 140334 @@ -11354,7 +11160,7 @@ 1 2 - 138784 + 140334 @@ -11370,7 +11176,7 @@ 1 2 - 138784 + 140334 @@ -11386,7 +11192,7 @@ 1 2 - 138784 + 140334 @@ -11402,7 +11208,7 @@ 1 2 - 138784 + 140334 @@ -11418,7 +11224,7 @@ 1 2 - 138784 + 140334 @@ -11434,7 +11240,7 @@ 1 2 - 138784 + 140334 @@ -11450,7 +11256,7 @@ 1 2 - 138784 + 140334 @@ -11460,19 +11266,19 @@ ql_conjunction_def - 80925 + 76308 id - 80925 + 76308 left - 80925 + 76308 right - 80925 + 76308 @@ -11486,7 +11292,7 @@ 1 2 - 80925 + 76308 @@ -11502,7 +11308,7 @@ 1 2 - 80925 + 76308 @@ -11518,7 +11324,7 @@ 1 2 - 80925 + 76308 @@ -11534,7 +11340,7 @@ 1 2 - 80925 + 76308 @@ -11550,7 +11356,7 @@ 1 2 - 80925 + 76308 @@ -11566,7 +11372,7 @@ 1 2 - 80925 + 76308 @@ -11576,19 +11382,19 @@ ql_dataclass_child - 86140 + 80203 ql_dataclass - 21914 + 20603 index - 148 + 160 child - 86140 + 80203 @@ -11602,42 +11408,42 @@ 1 2 - 8719 + 8138 2 3 - 3611 + 3631 3 4 - 2551 + 2206 4 5 - 1653 + 1665 5 6 - 1289 + 1187 6 9 - 1952 + 1851 9 - 20 - 1644 + 22 + 1562 - 20 - 149 - 495 + 22 + 161 + 363 @@ -11653,42 +11459,42 @@ 1 2 - 8719 + 8138 2 3 - 3611 + 3631 3 4 - 2551 + 2206 4 5 - 1653 + 1665 5 6 - 1289 + 1187 6 9 - 1952 + 1851 9 - 20 - 1644 + 22 + 1562 - 20 - 149 - 495 + 22 + 161 + 363 @@ -11703,68 +11509,73 @@ 1 - 4 - 8 + 3 + 12 4 5 - 14 - - - 5 - 7 8 - 7 + 5 + 6 + 17 + + + 6 8 - 21 + 2 8 - 12 - 7 + 9 + 20 - 12 - 18 + 9 + 13 12 - 19 - 25 + 13 + 20 12 - 25 + 20 + 27 + 12 + + + 28 36 12 - 37 - 96 + 38 + 98 12 - 101 - 188 + 102 + 193 12 - 198 - 538 + 203 + 541 12 - 592 - 3240 + 596 + 3777 12 - 4091 - 21915 - 6 + 4963 + 20604 + 5 @@ -11779,68 +11590,73 @@ 1 - 4 - 8 + 3 + 12 4 5 - 14 - - - 5 - 7 8 - 7 + 5 + 6 + 17 + + + 6 8 - 21 + 2 8 - 12 - 7 + 9 + 20 - 12 - 18 + 9 + 13 12 - 19 - 25 + 13 + 20 12 - 25 + 20 + 27 + 12 + + + 28 36 12 - 37 - 96 + 38 + 98 12 - 101 - 188 + 102 + 193 12 - 198 - 538 + 203 + 541 12 - 592 - 3240 + 596 + 3777 12 - 4091 - 21915 - 6 + 4963 + 20604 + 5 @@ -11856,7 +11672,7 @@ 1 2 - 86140 + 80203 @@ -11872,7 +11688,7 @@ 1 2 - 86140 + 80203 @@ -11882,15 +11698,15 @@ ql_dataclass_def - 23834 + 22563 id - 23834 + 22563 name - 23834 + 22563 @@ -11904,7 +11720,7 @@ 1 2 - 23834 + 22563 @@ -11920,7 +11736,7 @@ 1 2 - 23834 + 22563 @@ -11930,11 +11746,11 @@ ql_dataclass_extends - 59928 + 57708 ql_dataclass - 22062 + 21309 index @@ -11942,7 +11758,7 @@ extends - 59928 + 57708 @@ -11956,17 +11772,17 @@ 2 3 - 14722 + 14280 4 5 - 6891 + 6614 6 17 - 449 + 415 @@ -11982,17 +11798,17 @@ 2 3 - 14722 + 14280 4 5 - 6891 + 6614 6 17 - 449 + 415 @@ -12011,38 +11827,38 @@ 2 - 4 - 5 + 3 + 4 2 - 9 - 10 + 6 + 7 2 - 19 - 20 + 15 + 16 2 - 80 - 81 + 76 + 77 2 - 449 - 450 + 415 + 416 2 - 7340 - 7341 + 7029 + 7030 2 - 22062 - 22063 + 21309 + 21310 2 @@ -12062,38 +11878,38 @@ 2 - 4 - 5 + 3 + 4 2 - 9 - 10 + 6 + 7 2 - 19 - 20 + 15 + 16 2 - 80 - 81 + 76 + 77 2 - 449 - 450 + 415 + 416 2 - 7340 - 7341 + 7029 + 7030 2 - 22062 - 22063 + 21309 + 21310 2 @@ -12110,7 +11926,7 @@ 1 2 - 59928 + 57708 @@ -12126,7 +11942,7 @@ 1 2 - 59928 + 57708 @@ -12136,11 +11952,11 @@ ql_dataclass_instanceof - 1584 + 1896 ql_dataclass - 791 + 942 index @@ -12148,7 +11964,7 @@ instanceof - 1584 + 1896 @@ -12162,12 +11978,12 @@ 2 3 - 790 + 936 4 5 - 1 + 6 @@ -12183,12 +11999,12 @@ 2 3 - 790 + 936 4 5 - 1 + 6 @@ -12202,13 +12018,13 @@ 12 - 1 - 2 + 6 + 7 2 - 791 - 792 + 942 + 943 2 @@ -12223,13 +12039,13 @@ 12 - 1 - 2 + 6 + 7 2 - 791 - 792 + 942 + 943 2 @@ -12246,7 +12062,7 @@ 1 2 - 1584 + 1896 @@ -12262,7 +12078,7 @@ 1 2 - 1584 + 1896 @@ -12272,11 +12088,11 @@ ql_datatype_branch_child - 5604 + 4787 ql_datatype_branch - 2323 + 1984 index @@ -12284,7 +12100,7 @@ child - 5604 + 4787 @@ -12298,27 +12114,27 @@ 1 2 - 629 + 517 2 3 - 706 + 600 3 4 - 664 + 563 4 5 - 161 + 180 5 11 - 163 + 124 @@ -12334,27 +12150,27 @@ 1 2 - 629 + 517 2 3 - 706 + 600 3 4 - 664 + 563 4 5 - 161 + 180 5 11 - 163 + 124 @@ -12367,49 +12183,44 @@ 12 + + 2 + 3 + 3 + 8 9 - 2 - - - 16 - 17 1 - 30 - 31 + 27 + 28 1 - 50 - 51 + 124 + 125 1 - 163 - 164 + 304 + 305 1 - 324 - 325 + 867 + 868 1 - 988 - 989 + 1467 + 1468 1 - 1694 - 1695 - 1 - - - 2323 - 2324 + 1984 + 1985 1 @@ -12423,49 +12234,44 @@ 12 + + 2 + 3 + 3 + 8 9 - 2 - - - 16 - 17 1 - 30 - 31 + 27 + 28 1 - 50 - 51 + 124 + 125 1 - 163 - 164 + 304 + 305 1 - 324 - 325 + 867 + 868 1 - 988 - 989 + 1467 + 1468 1 - 1694 - 1695 - 1 - - - 2323 - 2324 + 1984 + 1985 1 @@ -12482,7 +12288,7 @@ 1 2 - 5604 + 4787 @@ -12498,7 +12304,7 @@ 1 2 - 5604 + 4787 @@ -12508,15 +12314,15 @@ ql_datatype_branch_def - 3437 + 2719 id - 3437 + 2719 name - 3437 + 2719 @@ -12530,7 +12336,7 @@ 1 2 - 3437 + 2719 @@ -12546,7 +12352,7 @@ 1 2 - 3437 + 2719 @@ -12556,19 +12362,19 @@ ql_datatype_branches_child - 3437 + 2719 ql_datatype_branches - 809 + 548 index - 231 + 246 child - 3437 + 2719 @@ -12582,37 +12388,37 @@ 1 2 - 163 + 132 2 3 - 348 + 182 3 4 - 104 + 81 4 - 5 - 63 + 6 + 49 - 5 + 6 9 - 65 + 43 9 - 61 - 61 + 15 + 42 - 82 - 232 - 5 + 15 + 247 + 19 @@ -12628,37 +12434,37 @@ 1 2 - 163 + 132 2 3 - 348 + 182 3 4 - 104 + 81 4 - 5 - 63 + 6 + 49 - 5 + 6 9 - 65 + 43 9 - 61 - 61 + 15 + 42 - 82 - 232 - 5 + 15 + 247 + 19 @@ -12674,42 +12480,37 @@ 1 2 - 38 + 51 2 3 - 110 + 111 + + + 3 + 4 + 1 4 5 - 1 + 32 5 - 6 - 22 - - - 6 - 8 - 21 - - - 8 - 14 - 15 - - - 14 - 91 + 11 18 - 109 - 810 - 6 + 11 + 20 + 19 + + + 21 + 549 + 14 @@ -12725,42 +12526,37 @@ 1 2 - 38 + 51 2 3 - 110 + 111 + + + 3 + 4 + 1 4 5 - 1 + 32 5 - 6 - 22 - - - 6 - 8 - 21 - - - 8 - 14 - 15 - - - 14 - 91 + 11 18 - 109 - 810 - 6 + 11 + 20 + 19 + + + 21 + 549 + 14 @@ -12776,7 +12572,7 @@ 1 2 - 3437 + 2719 @@ -12792,7 +12588,7 @@ 1 2 - 3437 + 2719 @@ -12802,30 +12598,30 @@ ql_datatype_branches_def - 809 + 548 id - 809 + 548 ql_datatype_def - 809 + 548 id - 809 + 548 name - 809 + 548 child - 809 + 548 @@ -12839,7 +12635,7 @@ 1 2 - 809 + 548 @@ -12855,7 +12651,7 @@ 1 2 - 809 + 548 @@ -12871,7 +12667,7 @@ 1 2 - 809 + 548 @@ -12887,7 +12683,7 @@ 1 2 - 809 + 548 @@ -12903,7 +12699,7 @@ 1 2 - 809 + 548 @@ -12919,7 +12715,7 @@ 1 2 - 809 + 548 @@ -12929,19 +12725,19 @@ ql_disjunction_def - 40259 + 44890 id - 40259 + 44890 left - 40259 + 44890 right - 40259 + 44890 @@ -12955,7 +12751,7 @@ 1 2 - 40259 + 44890 @@ -12971,7 +12767,7 @@ 1 2 - 40259 + 44890 @@ -12987,7 +12783,7 @@ 1 2 - 40259 + 44890 @@ -13003,7 +12799,7 @@ 1 2 - 40259 + 44890 @@ -13019,7 +12815,7 @@ 1 2 - 40259 + 44890 @@ -13035,7 +12831,7 @@ 1 2 - 40259 + 44890 @@ -13045,15 +12841,15 @@ ql_expr_aggregate_body_def - 1293 + 1216 id - 1293 + 1216 as_exprs - 1293 + 1216 @@ -13067,7 +12863,7 @@ 1 2 - 1293 + 1216 @@ -13083,7 +12879,7 @@ 1 2 - 1293 + 1216 @@ -13141,23 +12937,23 @@ ql_expr_annotation_def - 1328 + 601 id - 1328 + 601 annot_arg - 1328 + 601 name - 1328 + 601 child - 1328 + 601 @@ -13171,7 +12967,7 @@ 1 2 - 1328 + 601 @@ -13187,7 +12983,7 @@ 1 2 - 1328 + 601 @@ -13203,7 +12999,7 @@ 1 2 - 1328 + 601 @@ -13219,7 +13015,7 @@ 1 2 - 1328 + 601 @@ -13235,7 +13031,7 @@ 1 2 - 1328 + 601 @@ -13251,7 +13047,7 @@ 1 2 - 1328 + 601 @@ -13267,7 +13063,7 @@ 1 2 - 1328 + 601 @@ -13283,7 +13079,7 @@ 1 2 - 1328 + 601 @@ -13299,7 +13095,7 @@ 1 2 - 1328 + 601 @@ -13315,7 +13111,7 @@ 1 2 - 1328 + 601 @@ -13331,7 +13127,7 @@ 1 2 - 1328 + 601 @@ -13347,7 +13143,7 @@ 1 2 - 1328 + 601 @@ -13357,15 +13153,15 @@ ql_field_def - 4149 + 3721 id - 4149 + 3721 child - 4149 + 3721 @@ -13379,7 +13175,7 @@ 1 2 - 4149 + 3721 @@ -13395,7 +13191,7 @@ 1 2 - 4149 + 3721 @@ -13405,15 +13201,15 @@ ql_full_aggregate_body_as_exprs - 1309 + 1288 ql_full_aggregate_body - 1309 + 1288 as_exprs - 1309 + 1288 @@ -13427,7 +13223,7 @@ 1 2 - 1309 + 1288 @@ -13443,7 +13239,7 @@ 1 2 - 1309 + 1288 @@ -13453,11 +13249,11 @@ ql_full_aggregate_body_child - 7577 + 7058 ql_full_aggregate_body - 6655 + 6301 index @@ -13465,7 +13261,7 @@ child - 7577 + 7058 @@ -13479,17 +13275,17 @@ 1 2 - 6061 + 5788 2 - 4 - 527 + 5 + 480 - 4 + 5 10 - 67 + 33 @@ -13505,17 +13301,17 @@ 1 2 - 6061 + 5788 2 - 4 - 527 + 5 + 480 - 4 + 5 10 - 67 + 33 @@ -13534,38 +13330,43 @@ 1 - 20 - 21 - 2 - - - 22 - 23 + 13 + 14 1 - 48 - 49 + 14 + 15 1 - 67 - 68 + 18 + 19 1 - 147 - 148 + 33 + 34 1 - 594 - 595 + 51 + 52 1 - 6655 - 6656 + 111 + 112 + 1 + + + 513 + 514 + 1 + + + 6301 + 6302 1 @@ -13585,38 +13386,43 @@ 1 - 20 - 21 - 2 - - - 22 - 23 + 13 + 14 1 - 48 - 49 + 14 + 15 1 - 67 - 68 + 18 + 19 1 - 147 - 148 + 33 + 34 1 - 594 - 595 + 51 + 52 1 - 6655 - 6656 + 111 + 112 + 1 + + + 513 + 514 + 1 + + + 6301 + 6302 1 @@ -13633,7 +13439,7 @@ 1 2 - 7577 + 7058 @@ -13649,7 +13455,7 @@ 1 2 - 7577 + 7058 @@ -13659,26 +13465,26 @@ ql_full_aggregate_body_def - 6714 + 6356 id - 6714 + 6356 ql_full_aggregate_body_guard - 3739 + 3549 ql_full_aggregate_body - 3739 + 3549 guard - 3739 + 3549 @@ -13692,7 +13498,7 @@ 1 2 - 3739 + 3549 @@ -13708,7 +13514,7 @@ 1 2 - 3739 + 3549 @@ -13718,15 +13524,15 @@ ql_full_aggregate_body_order_bys - 449 + 429 ql_full_aggregate_body - 449 + 429 order_bys - 449 + 429 @@ -13740,7 +13546,7 @@ 1 2 - 449 + 429 @@ -13756,7 +13562,7 @@ 1 2 - 449 + 429 @@ -13766,11 +13572,11 @@ ql_higher_order_term_child - 469 + 343 ql_higher_order_term - 105 + 77 index @@ -13778,7 +13584,7 @@ child - 469 + 343 @@ -13792,12 +13598,12 @@ 3 4 - 31 + 24 5 6 - 72 + 51 8 @@ -13818,12 +13624,12 @@ 3 4 - 31 + 24 5 6 - 72 + 51 8 @@ -13847,13 +13653,13 @@ 3 - 74 - 75 + 53 + 54 2 - 105 - 106 + 77 + 78 3 @@ -13873,13 +13679,13 @@ 3 - 74 - 75 + 53 + 54 2 - 105 - 106 + 77 + 78 3 @@ -13896,7 +13702,7 @@ 1 2 - 469 + 343 @@ -13912,7 +13718,7 @@ 1 2 - 469 + 343 @@ -13922,15 +13728,15 @@ ql_higher_order_term_def - 105 + 77 id - 105 + 77 name - 105 + 77 @@ -13944,7 +13750,7 @@ 1 2 - 105 + 77 @@ -13960,7 +13766,7 @@ 1 2 - 105 + 77 @@ -13970,23 +13776,23 @@ ql_if_term_def - 3226 + 2953 id - 3226 + 2953 cond - 3226 + 2953 first - 3226 + 2953 second - 3226 + 2953 @@ -14000,7 +13806,7 @@ 1 2 - 3226 + 2953 @@ -14016,7 +13822,7 @@ 1 2 - 3226 + 2953 @@ -14032,7 +13838,7 @@ 1 2 - 3226 + 2953 @@ -14048,7 +13854,7 @@ 1 2 - 3226 + 2953 @@ -14064,7 +13870,7 @@ 1 2 - 3226 + 2953 @@ -14080,7 +13886,7 @@ 1 2 - 3226 + 2953 @@ -14096,7 +13902,7 @@ 1 2 - 3226 + 2953 @@ -14112,7 +13918,7 @@ 1 2 - 3226 + 2953 @@ -14128,7 +13934,7 @@ 1 2 - 3226 + 2953 @@ -14144,7 +13950,7 @@ 1 2 - 3226 + 2953 @@ -14160,7 +13966,7 @@ 1 2 - 3226 + 2953 @@ -14176,7 +13982,7 @@ 1 2 - 3226 + 2953 @@ -14186,19 +13992,19 @@ ql_implication_def - 87 + 101 id - 87 + 101 left - 87 + 101 right - 87 + 101 @@ -14212,7 +14018,7 @@ 1 2 - 87 + 101 @@ -14228,7 +14034,7 @@ 1 2 - 87 + 101 @@ -14244,7 +14050,7 @@ 1 2 - 87 + 101 @@ -14260,7 +14066,7 @@ 1 2 - 87 + 101 @@ -14276,7 +14082,7 @@ 1 2 - 87 + 101 @@ -14292,7 +14098,7 @@ 1 2 - 87 + 101 @@ -14302,11 +14108,11 @@ ql_import_directive_child - 26183 + 27063 ql_import_directive - 24818 + 25764 index @@ -14314,7 +14120,7 @@ child - 26183 + 27063 @@ -14328,12 +14134,12 @@ 1 2 - 23453 + 24465 2 3 - 1365 + 1299 @@ -14349,12 +14155,12 @@ 1 2 - 23453 + 24465 2 3 - 1365 + 1299 @@ -14368,13 +14174,13 @@ 12 - 1365 - 1366 + 1299 + 1300 1 - 24818 - 24819 + 25764 + 25765 1 @@ -14389,13 +14195,13 @@ 12 - 1365 - 1366 + 1299 + 1300 1 - 24818 - 24819 + 25764 + 25765 1 @@ -14412,7 +14218,7 @@ 1 2 - 26183 + 27063 @@ -14428,7 +14234,7 @@ 1 2 - 26183 + 27063 @@ -14438,26 +14244,26 @@ ql_import_directive_def - 24818 + 25764 id - 24818 + 25764 ql_import_module_expr_def - 24818 + 25764 id - 24818 + 25764 child - 24818 + 25764 @@ -14471,7 +14277,7 @@ 1 2 - 24818 + 25764 @@ -14487,7 +14293,7 @@ 1 2 - 24818 + 25764 @@ -14497,11 +14303,11 @@ ql_import_module_expr_qual_name - 43119 + 44946 ql_import_module_expr - 12715 + 13345 index @@ -14509,7 +14315,7 @@ qual_name - 43119 + 44946 @@ -14523,32 +14329,32 @@ 1 2 - 969 + 972 2 3 - 1837 + 2220 3 4 - 3420 + 3431 4 5 - 4818 + 4933 5 6 - 1222 + 1355 6 9 - 449 + 434 @@ -14564,32 +14370,32 @@ 1 2 - 969 + 972 2 3 - 1837 + 2220 3 4 - 3420 + 3431 4 5 - 4818 + 4933 5 6 - 1222 + 1355 6 9 - 449 + 434 @@ -14603,43 +14409,43 @@ 12 - 30 - 31 + 25 + 26 1 - 110 - 111 + 105 + 106 1 - 449 - 450 + 434 + 435 1 - 1671 - 1672 + 1789 + 1790 1 - 6489 - 6490 + 6722 + 6723 1 - 9909 - 9910 + 10153 + 10154 1 - 11746 - 11747 + 12373 + 12374 1 - 12715 - 12716 + 13345 + 13346 1 @@ -14654,43 +14460,43 @@ 12 - 30 - 31 + 25 + 26 1 - 110 - 111 + 105 + 106 1 - 449 - 450 + 434 + 435 1 - 1671 - 1672 + 1789 + 1790 1 - 6489 - 6490 + 6722 + 6723 1 - 9909 - 9910 + 10153 + 10154 1 - 11746 - 11747 + 12373 + 12374 1 - 12715 - 12716 + 13345 + 13346 1 @@ -14707,7 +14513,7 @@ 1 2 - 43119 + 44946 @@ -14723,7 +14529,7 @@ 1 2 - 43119 + 44946 @@ -14733,19 +14539,19 @@ ql_in_expr_def - 1003 + 1037 id - 1003 + 1037 left - 1003 + 1037 right - 1003 + 1037 @@ -14759,7 +14565,7 @@ 1 2 - 1003 + 1037 @@ -14775,7 +14581,7 @@ 1 2 - 1003 + 1037 @@ -14791,7 +14597,7 @@ 1 2 - 1003 + 1037 @@ -14807,7 +14613,7 @@ 1 2 - 1003 + 1037 @@ -14823,7 +14629,7 @@ 1 2 - 1003 + 1037 @@ -14839,7 +14645,7 @@ 1 2 - 1003 + 1037 @@ -14849,11 +14655,11 @@ ql_instance_of_child - 34256 + 31826 ql_instance_of - 17128 + 15913 index @@ -14861,7 +14667,7 @@ child - 34256 + 31826 @@ -14875,7 +14681,7 @@ 2 3 - 17128 + 15913 @@ -14891,7 +14697,7 @@ 2 3 - 17128 + 15913 @@ -14905,8 +14711,8 @@ 12 - 17128 - 17129 + 15913 + 15914 2 @@ -14921,8 +14727,8 @@ 12 - 17128 - 17129 + 15913 + 15914 2 @@ -14939,7 +14745,7 @@ 1 2 - 34256 + 31826 @@ -14955,7 +14761,7 @@ 1 2 - 34256 + 31826 @@ -14965,26 +14771,26 @@ ql_instance_of_def - 17128 + 15913 id - 17128 + 15913 ql_literal_def - 98847 + 109390 id - 98847 + 109390 child - 98847 + 109390 @@ -14998,7 +14804,7 @@ 1 2 - 98847 + 109390 @@ -15014,7 +14820,7 @@ 1 2 - 98847 + 109390 @@ -15024,19 +14830,19 @@ ql_member_predicate_child - 70661 + 63378 ql_member_predicate - 47549 + 43952 index - 11 + 12 child - 70661 + 63378 @@ -15050,22 +14856,22 @@ 1 2 - 34294 + 32505 2 3 - 7406 + 6417 3 4 - 3503 + 3219 4 - 12 - 2346 + 13 + 1811 @@ -15081,22 +14887,22 @@ 1 2 - 34294 + 32505 2 3 - 7406 + 6417 3 4 - 3503 + 3219 4 - 12 - 2346 + 13 + 1811 @@ -15110,8 +14916,8 @@ 12 - 1 - 2 + 2 + 3 1 @@ -15120,8 +14926,13 @@ 1 - 4 - 5 + 5 + 6 + 1 + + + 6 + 7 1 @@ -15130,38 +14941,38 @@ 1 - 40 - 41 + 39 + 40 1 - 588 - 589 + 420 + 421 1 - 1017 - 1018 + 654 + 655 1 - 2346 - 2347 + 1811 + 1812 1 - 5849 - 5850 + 5030 + 5031 1 - 13255 - 13256 + 11447 + 11448 1 - 47549 - 47550 + 43952 + 43953 1 @@ -15176,8 +14987,8 @@ 12 - 1 - 2 + 2 + 3 1 @@ -15186,8 +14997,13 @@ 1 - 4 - 5 + 5 + 6 + 1 + + + 6 + 7 1 @@ -15196,38 +15012,38 @@ 1 - 40 - 41 + 39 + 40 1 - 588 - 589 + 420 + 421 1 - 1017 - 1018 + 654 + 655 1 - 2346 - 2347 + 1811 + 1812 1 - 5849 - 5850 + 5030 + 5031 1 - 13255 - 13256 + 11447 + 11448 1 - 47549 - 47550 + 43952 + 43953 1 @@ -15244,7 +15060,7 @@ 1 2 - 70661 + 63378 @@ -15260,7 +15076,7 @@ 1 2 - 70661 + 63378 @@ -15270,19 +15086,19 @@ ql_member_predicate_def - 47549 + 43952 id - 47549 + 43952 name - 47549 + 43952 return_type - 47549 + 43952 @@ -15296,7 +15112,7 @@ 1 2 - 47549 + 43952 @@ -15312,7 +15128,7 @@ 1 2 - 47549 + 43952 @@ -15328,7 +15144,7 @@ 1 2 - 47549 + 43952 @@ -15344,7 +15160,7 @@ 1 2 - 47549 + 43952 @@ -15360,7 +15176,7 @@ 1 2 - 47549 + 43952 @@ -15376,7 +15192,7 @@ 1 2 - 47549 + 43952 @@ -15386,15 +15202,15 @@ ql_module_alias_body_def - 725 + 917 id - 725 + 917 child - 725 + 917 @@ -15408,7 +15224,7 @@ 1 2 - 725 + 917 @@ -15424,7 +15240,7 @@ 1 2 - 725 + 917 @@ -15434,19 +15250,19 @@ ql_module_child - 35070 + 33181 ql_module - 3910 + 4556 index - 1248 + 1314 child - 35070 + 33181 @@ -15460,47 +15276,42 @@ 1 2 - 1257 + 1138 2 3 - 624 + 1239 3 4 - 294 + 385 4 5 - 294 + 392 5 8 - 324 + 383 8 - 12 - 311 + 13 + 407 - 12 - 17 - 322 + 13 + 23 + 351 - 17 - 34 - 295 - - - 34 - 1249 - 189 + 23 + 1315 + 261 @@ -15516,47 +15327,42 @@ 1 2 - 1257 + 1138 2 3 - 624 + 1239 3 4 - 294 + 385 4 5 - 294 + 392 5 8 - 324 + 383 8 - 12 - 311 + 13 + 407 - 12 - 17 - 322 + 13 + 23 + 351 - 17 - 34 - 295 - - - 34 - 1249 - 189 + 23 + 1315 + 261 @@ -15572,33 +15378,33 @@ 1 2 - 684 + 718 2 3 - 144 + 180 3 - 4 - 131 + 5 + 114 - 4 - 8 - 109 + 5 + 7 + 102 - 15 - 30 + 7 + 17 + 106 + + + 17 + 4557 94 - - 31 - 3911 - 86 - @@ -15613,33 +15419,33 @@ 1 2 - 684 + 718 2 3 - 144 + 180 3 - 4 - 131 + 5 + 114 - 4 - 8 - 109 + 5 + 7 + 102 - 15 - 30 + 7 + 17 + 106 + + + 17 + 4557 94 - - 31 - 3911 - 86 - @@ -15654,7 +15460,7 @@ 1 2 - 35070 + 33181 @@ -15670,7 +15476,7 @@ 1 2 - 35070 + 33181 @@ -15680,15 +15486,15 @@ ql_module_def - 3916 + 4567 id - 3916 + 4567 name - 3916 + 4567 @@ -15702,7 +15508,7 @@ 1 2 - 3916 + 4567 @@ -15718,7 +15524,7 @@ 1 2 - 3916 + 4567 @@ -15728,15 +15534,15 @@ ql_module_expr_def - 72503 + 76399 id - 72503 + 76399 child - 72503 + 76399 @@ -15750,7 +15556,7 @@ 1 2 - 72503 + 76399 @@ -15766,7 +15572,7 @@ 1 2 - 72503 + 76399 @@ -15776,15 +15582,15 @@ ql_module_expr_name - 4091 + 4773 ql_module_expr - 4091 + 4773 name - 4091 + 4773 @@ -15798,7 +15604,7 @@ 1 2 - 4091 + 4773 @@ -15814,7 +15620,7 @@ 1 2 - 4091 + 4773 @@ -15824,11 +15630,11 @@ ql_module_implements - 759 + 1251 ql_module - 759 + 1251 index @@ -15836,7 +15642,7 @@ implements - 759 + 1251 @@ -15850,7 +15656,7 @@ 1 2 - 759 + 1251 @@ -15866,7 +15672,7 @@ 1 2 - 759 + 1251 @@ -15880,8 +15686,8 @@ 12 - 759 - 760 + 1251 + 1252 1 @@ -15896,8 +15702,8 @@ 12 - 759 - 760 + 1251 + 1252 1 @@ -15914,7 +15720,7 @@ 1 2 - 759 + 1251 @@ -15930,7 +15736,7 @@ 1 2 - 759 + 1251 @@ -15940,19 +15746,19 @@ ql_module_instantiation_child - 1190 + 2192 ql_module_instantiation - 1043 + 1740 index - 6 + 8 child - 1190 + 2192 @@ -15966,12 +15772,17 @@ 1 2 - 966 + 1473 2 - 7 - 77 + 3 + 172 + + + 3 + 9 + 95 @@ -15987,12 +15798,17 @@ 1 2 - 966 + 1473 2 - 7 - 77 + 3 + 172 + + + 3 + 9 + 95 @@ -16008,31 +15824,36 @@ 3 4 + 2 + + + 8 + 9 1 - 5 - 6 + 20 + 21 1 - 26 - 27 + 56 + 57 1 - 36 - 37 + 95 + 96 1 - 77 - 78 + 267 + 268 1 - 1043 - 1044 + 1740 + 1741 1 @@ -16049,31 +15870,36 @@ 3 4 + 2 + + + 8 + 9 1 - 5 - 6 + 20 + 21 1 - 26 - 27 + 56 + 57 1 - 36 - 37 + 95 + 96 1 - 77 - 78 + 267 + 268 1 - 1043 - 1044 + 1740 + 1741 1 @@ -16090,7 +15916,7 @@ 1 2 - 1190 + 2192 @@ -16106,7 +15932,7 @@ 1 2 - 1190 + 2192 @@ -16116,15 +15942,15 @@ ql_module_instantiation_def - 1043 + 1740 id - 1043 + 1740 name - 1043 + 1740 @@ -16138,7 +15964,7 @@ 1 2 - 1043 + 1740 @@ -16154,7 +15980,7 @@ 1 2 - 1043 + 1740 @@ -16164,19 +15990,19 @@ ql_module_member_child - 155140 + 150156 ql_module_member - 119591 + 118178 index - 5 + 6 child - 155140 + 150156 @@ -16190,17 +16016,17 @@ 1 2 - 87424 + 88793 2 3 - 28864 + 26917 3 - 6 - 3303 + 7 + 2468 @@ -16216,17 +16042,17 @@ 1 2 - 87424 + 88793 2 3 - 28864 + 26917 3 - 6 - 3303 + 7 + 2468 @@ -16240,28 +16066,33 @@ 12 - 4 - 5 + 2 + 3 1 - 75 - 76 + 10 + 11 1 - 3303 - 3304 + 113 + 114 1 - 32167 - 32168 + 2468 + 2469 1 - 119591 - 119592 + 29385 + 29386 + 1 + + + 118178 + 118179 1 @@ -16276,28 +16107,33 @@ 12 - 4 - 5 + 2 + 3 1 - 75 - 76 + 10 + 11 1 - 3303 - 3304 + 113 + 114 1 - 32167 - 32168 + 2468 + 2469 1 - 119591 - 119592 + 29385 + 29386 + 1 + + + 118178 + 118179 1 @@ -16314,7 +16150,7 @@ 1 2 - 155140 + 150156 @@ -16330,7 +16166,7 @@ 1 2 - 155140 + 150156 @@ -16340,26 +16176,26 @@ ql_module_member_def - 119591 + 118178 id - 119591 + 118178 ql_module_name_def - 6324 + 7606 id - 6324 + 7606 child - 6324 + 7606 @@ -16373,7 +16209,7 @@ 1 2 - 6324 + 7606 @@ -16389,7 +16225,7 @@ 1 2 - 6324 + 7606 @@ -16399,19 +16235,19 @@ ql_module_param_def - 299 + 266 id - 299 + 266 parameter - 299 + 266 signature - 299 + 266 @@ -16425,7 +16261,7 @@ 1 2 - 299 + 266 @@ -16441,7 +16277,7 @@ 1 2 - 299 + 266 @@ -16457,7 +16293,7 @@ 1 2 - 299 + 266 @@ -16473,7 +16309,7 @@ 1 2 - 299 + 266 @@ -16489,7 +16325,7 @@ 1 2 - 299 + 266 @@ -16505,7 +16341,7 @@ 1 2 - 299 + 266 @@ -16515,19 +16351,19 @@ ql_module_parameter - 299 + 266 ql_module - 214 + 185 index - 6 + 8 parameter - 299 + 266 @@ -16541,17 +16377,22 @@ 1 2 - 183 + 138 2 - 4 - 14 + 3 + 30 - 4 - 7 - 17 + 3 + 6 + 15 + + + 6 + 9 + 2 @@ -16567,17 +16408,22 @@ 1 2 - 183 + 138 2 - 4 - 14 + 3 + 30 - 4 - 7 - 17 + 3 + 6 + 15 + + + 6 + 9 + 2 @@ -16591,8 +16437,18 @@ 12 - 8 - 9 + 1 + 2 + 2 + + + 2 + 3 + 1 + + + 4 + 5 1 @@ -16606,18 +16462,13 @@ 1 - 20 - 21 + 47 + 48 1 - 31 - 32 - 1 - - - 214 - 215 + 185 + 186 1 @@ -16632,8 +16483,18 @@ 12 - 8 - 9 + 1 + 2 + 2 + + + 2 + 3 + 1 + + + 4 + 5 1 @@ -16647,18 +16508,13 @@ 1 - 20 - 21 + 47 + 48 1 - 31 - 32 - 1 - - - 214 - 215 + 185 + 186 1 @@ -16675,7 +16531,7 @@ 1 2 - 299 + 266 @@ -16691,7 +16547,7 @@ 1 2 - 299 + 266 @@ -16701,23 +16557,23 @@ ql_mul_expr_def - 631 + 585 id - 631 + 585 left - 631 + 585 right - 631 + 585 child - 631 + 585 @@ -16731,7 +16587,7 @@ 1 2 - 631 + 585 @@ -16747,7 +16603,7 @@ 1 2 - 631 + 585 @@ -16763,7 +16619,7 @@ 1 2 - 631 + 585 @@ -16779,7 +16635,7 @@ 1 2 - 631 + 585 @@ -16795,7 +16651,7 @@ 1 2 - 631 + 585 @@ -16811,7 +16667,7 @@ 1 2 - 631 + 585 @@ -16827,7 +16683,7 @@ 1 2 - 631 + 585 @@ -16843,7 +16699,7 @@ 1 2 - 631 + 585 @@ -16859,7 +16715,7 @@ 1 2 - 631 + 585 @@ -16875,7 +16731,7 @@ 1 2 - 631 + 585 @@ -16891,7 +16747,7 @@ 1 2 - 631 + 585 @@ -16907,7 +16763,7 @@ 1 2 - 631 + 585 @@ -16917,15 +16773,15 @@ ql_negation_def - 12010 + 11727 id - 12010 + 11727 child - 12010 + 11727 @@ -16939,7 +16795,7 @@ 1 2 - 12010 + 11727 @@ -16955,7 +16811,7 @@ 1 2 - 12010 + 11727 @@ -16965,11 +16821,11 @@ ql_order_by_child - 1298 + 1272 ql_order_by - 1098 + 1067 index @@ -16977,7 +16833,7 @@ child - 1298 + 1272 @@ -16991,12 +16847,12 @@ 1 2 - 898 + 862 2 3 - 200 + 205 @@ -17012,12 +16868,12 @@ 1 2 - 898 + 862 2 3 - 200 + 205 @@ -17031,13 +16887,13 @@ 12 - 200 - 201 + 205 + 206 1 - 1098 - 1099 + 1067 + 1068 1 @@ -17052,13 +16908,13 @@ 12 - 200 - 201 + 205 + 206 1 - 1098 - 1099 + 1067 + 1068 1 @@ -17075,7 +16931,7 @@ 1 2 - 1298 + 1272 @@ -17091,7 +16947,7 @@ 1 2 - 1298 + 1272 @@ -17101,30 +16957,30 @@ ql_order_by_def - 1098 + 1067 id - 1098 + 1067 ql_order_bys_child - 1098 + 1067 ql_order_bys - 674 + 661 index - 9 + 8 child - 1098 + 1067 @@ -17138,22 +16994,22 @@ 1 2 - 488 + 477 2 3 - 100 + 101 3 5 - 43 + 41 5 - 10 - 43 + 9 + 42 @@ -17169,22 +17025,22 @@ 1 2 - 488 + 477 2 3 - 100 + 101 3 5 - 43 + 41 5 - 10 - 43 + 9 + 42 @@ -17198,28 +17054,23 @@ 12 - 3 - 4 + 1 + 2 1 - 6 - 7 + 12 + 13 1 - 15 - 16 + 21 + 22 1 - 22 - 23 - 1 - - - 43 - 44 + 42 + 43 1 @@ -17228,18 +17079,18 @@ 1 - 86 - 87 + 83 + 84 1 - 186 - 187 + 184 + 185 1 - 674 - 675 + 661 + 662 1 @@ -17254,28 +17105,23 @@ 12 - 3 - 4 + 1 + 2 1 - 6 - 7 + 12 + 13 1 - 15 - 16 + 21 + 22 1 - 22 - 23 - 1 - - - 43 - 44 + 42 + 43 1 @@ -17284,18 +17130,18 @@ 1 - 86 - 87 + 83 + 84 1 - 186 - 187 + 184 + 185 1 - 674 - 675 + 661 + 662 1 @@ -17312,7 +17158,7 @@ 1 2 - 1098 + 1067 @@ -17328,7 +17174,7 @@ 1 2 - 1098 + 1067 @@ -17338,26 +17184,26 @@ ql_order_bys_def - 674 + 661 id - 674 + 661 ql_par_expr_def - 6038 + 5799 id - 6038 + 5799 child - 6038 + 5799 @@ -17371,7 +17217,7 @@ 1 2 - 6038 + 5799 @@ -17387,7 +17233,7 @@ 1 2 - 6038 + 5799 @@ -17397,15 +17243,15 @@ ql_predicate_alias_body_def - 329 + 372 id - 329 + 372 child - 329 + 372 @@ -17419,7 +17265,7 @@ 1 2 - 329 + 372 @@ -17435,7 +17281,7 @@ 1 2 - 329 + 372 @@ -17445,11 +17291,11 @@ ql_predicate_expr_child - 1324 + 1478 ql_predicate_expr - 662 + 739 index @@ -17457,7 +17303,7 @@ child - 1324 + 1478 @@ -17471,7 +17317,7 @@ 2 3 - 662 + 739 @@ -17487,7 +17333,7 @@ 2 3 - 662 + 739 @@ -17501,8 +17347,8 @@ 12 - 662 - 663 + 739 + 740 2 @@ -17517,8 +17363,8 @@ 12 - 662 - 663 + 739 + 740 2 @@ -17535,7 +17381,7 @@ 1 2 - 1324 + 1478 @@ -17551,7 +17397,7 @@ 1 2 - 1324 + 1478 @@ -17561,11 +17407,11 @@ ql_predicate_expr_def - 662 + 739 id - 662 + 739 @@ -17675,19 +17521,19 @@ ql_ql_child - 85246 + 85914 ql_ql - 10779 + 11162 index - 326 + 340 child - 85246 + 85914 @@ -17701,47 +17547,52 @@ 1 2 - 134 + 96 2 3 - 2560 + 2238 3 4 - 2291 + 2551 4 5 - 1380 + 1524 5 6 - 1013 + 1041 6 - 8 - 949 + 7 + 730 - 8 - 12 - 954 + 7 + 9 + 829 - 12 - 24 - 827 + 9 + 14 + 913 - 24 - 327 - 671 + 14 + 31 + 844 + + + 31 + 341 + 396 @@ -17757,47 +17608,52 @@ 1 2 - 134 + 96 2 3 - 2560 + 2238 3 4 - 2291 + 2551 4 5 - 1380 + 1524 5 6 - 1013 + 1041 6 - 8 - 949 + 7 + 730 - 8 - 12 - 954 + 7 + 9 + 829 - 12 - 24 - 827 + 9 + 14 + 913 - 24 - 327 - 671 + 14 + 31 + 844 + + + 31 + 341 + 396 @@ -17813,68 +17669,63 @@ 1 2 - 45 + 42 2 - 5 - 17 + 4 + 25 - 5 - 11 - 26 - - - 11 - 13 - 24 - - - 13 - 15 - 30 - - - 15 - 23 - 26 - - - 23 - 30 - 27 - - - 30 - 47 + 4 + 6 28 + + 6 + 10 + 31 + + + 10 + 13 + 28 + + + 13 + 22 + 30 + + + 22 + 29 + 26 + + + 29 + 46 + 27 + 48 - 94 - 25 + 83 + 26 - 96 - 185 - 25 + 84 + 176 + 26 - 187 - 519 - 25 + 179 + 553 + 26 - 548 - 5795 + 584 + 11163 25 - - 8085 - 10780 - 3 - @@ -17889,68 +17740,63 @@ 1 2 - 45 + 42 2 - 5 - 17 + 4 + 25 - 5 - 11 - 26 - - - 11 - 13 - 24 - - - 13 - 15 - 30 - - - 15 - 23 - 26 - - - 23 - 30 - 27 - - - 30 - 47 + 4 + 6 28 + + 6 + 10 + 31 + + + 10 + 13 + 28 + + + 13 + 22 + 30 + + + 22 + 29 + 26 + + + 29 + 46 + 27 + 48 - 94 - 25 + 83 + 26 - 96 - 185 - 25 + 84 + 176 + 26 - 187 - 519 - 25 + 179 + 553 + 26 - 548 - 5795 + 584 + 11163 25 - - 8085 - 10780 - 3 - @@ -17965,7 +17811,7 @@ 1 2 - 85246 + 85914 @@ -17981,7 +17827,7 @@ 1 2 - 85246 + 85914 @@ -17991,22 +17837,22 @@ ql_ql_def - 10785 + 11167 id - 10785 + 11167 ql_qualified_expr_child - 337022 + 330314 ql_qualified_expr - 168511 + 165157 index @@ -18014,7 +17860,7 @@ child - 337022 + 330314 @@ -18028,7 +17874,7 @@ 2 3 - 168511 + 165157 @@ -18044,7 +17890,7 @@ 2 3 - 168511 + 165157 @@ -18058,8 +17904,8 @@ 12 - 168511 - 168512 + 165157 + 165158 2 @@ -18074,8 +17920,8 @@ 12 - 168511 - 168512 + 165157 + 165158 2 @@ -18092,7 +17938,7 @@ 1 2 - 337022 + 330314 @@ -18108,7 +17954,7 @@ 1 2 - 337022 + 330314 @@ -18118,30 +17964,30 @@ ql_qualified_expr_def - 168511 + 165157 id - 168511 + 165157 ql_qualified_rhs_child - 68675 + 68095 ql_qualified_rhs - 52287 + 52354 index - 10 + 11 child - 68675 + 68095 @@ -18155,17 +18001,17 @@ 1 2 - 41503 + 41965 2 3 - 7598 + 7314 3 - 11 - 3186 + 12 + 3075 @@ -18181,17 +18027,17 @@ 1 2 - 41503 + 41965 2 3 - 7598 + 7314 3 - 11 - 3186 + 12 + 3075 @@ -18205,18 +18051,18 @@ 12 - 1 - 2 + 8 + 9 1 - 3 - 4 + 9 + 10 1 - 12 - 13 + 11 + 12 1 @@ -18225,33 +18071,38 @@ 1 - 60 - 61 + 25 + 26 1 - 905 - 906 + 66 + 67 1 - 1417 - 1418 + 802 + 803 1 - 3186 - 3187 + 1336 + 1337 1 - 10784 - 10785 + 3075 + 3076 1 - 52287 - 52288 + 10389 + 10390 + 1 + + + 52354 + 52355 1 @@ -18266,18 +18117,18 @@ 12 - 1 - 2 + 8 + 9 1 - 3 - 4 + 9 + 10 1 - 12 - 13 + 11 + 12 1 @@ -18286,33 +18137,38 @@ 1 - 60 - 61 + 25 + 26 1 - 905 - 906 + 66 + 67 1 - 1417 - 1418 + 802 + 803 1 - 3186 - 3187 + 1336 + 1337 1 - 10784 - 10785 + 3075 + 3076 1 - 52287 - 52288 + 10389 + 10390 + 1 + + + 52354 + 52355 1 @@ -18329,7 +18185,7 @@ 1 2 - 68675 + 68095 @@ -18345,7 +18201,7 @@ 1 2 - 68675 + 68095 @@ -18355,26 +18211,26 @@ ql_qualified_rhs_def - 168511 + 165157 id - 168511 + 165157 ql_qualified_rhs_name - 157179 + 153874 ql_qualified_rhs - 157179 + 153874 name - 157179 + 153874 @@ -18388,7 +18244,7 @@ 1 2 - 157179 + 153874 @@ -18404,7 +18260,7 @@ 1 2 - 157179 + 153874 @@ -18414,11 +18270,11 @@ ql_quantified_child - 57793 + 52811 ql_quantified - 26111 + 24227 index @@ -18426,7 +18282,7 @@ child - 57793 + 52811 @@ -18440,27 +18296,27 @@ 1 2 - 4431 + 4452 2 3 - 15291 + 14178 3 4 - 4044 + 3526 4 6 - 2065 + 1823 6 23 - 280 + 248 @@ -18476,27 +18332,27 @@ 1 2 - 4431 + 4452 2 3 - 15291 + 14178 3 4 - 4044 + 3526 4 6 - 2065 + 1823 6 23 - 280 + 248 @@ -18515,33 +18371,33 @@ 11 - 4 - 12 + 3 + 9 2 - 22 - 47 + 19 + 45 2 - 110 - 281 + 102 + 249 2 - 784 - 2346 + 706 + 2072 2 - 6389 - 21681 + 5597 + 19776 2 - 26111 - 26112 + 24227 + 24228 1 @@ -18561,33 +18417,33 @@ 11 - 4 - 12 + 3 + 9 2 - 22 - 47 + 19 + 45 2 - 110 - 281 + 102 + 249 2 - 784 - 2346 + 706 + 2072 2 - 6389 - 21681 + 5597 + 19776 2 - 26111 - 26112 + 24227 + 24228 1 @@ -18604,7 +18460,7 @@ 1 2 - 57793 + 52811 @@ -18620,7 +18476,7 @@ 1 2 - 57793 + 52811 @@ -18630,26 +18486,26 @@ ql_quantified_def - 26111 + 24227 id - 26111 + 24227 ql_quantified_expr - 4431 + 4452 ql_quantified - 4431 + 4452 expr - 4431 + 4452 @@ -18663,7 +18519,7 @@ 1 2 - 4431 + 4452 @@ -18679,7 +18535,7 @@ 1 2 - 4431 + 4452 @@ -18689,15 +18545,15 @@ ql_quantified_formula - 7682 + 7476 ql_quantified - 7682 + 7476 formula - 7682 + 7476 @@ -18711,7 +18567,7 @@ 1 2 - 7682 + 7476 @@ -18727,7 +18583,7 @@ 1 2 - 7682 + 7476 @@ -18737,15 +18593,15 @@ ql_quantified_range - 21641 + 19737 ql_quantified - 21641 + 19737 range - 21641 + 19737 @@ -18759,7 +18615,7 @@ 1 2 - 21641 + 19737 @@ -18775,7 +18631,7 @@ 1 2 - 21641 + 19737 @@ -18785,19 +18641,19 @@ ql_range_def - 417 + 365 id - 417 + 365 lower - 417 + 365 upper - 417 + 365 @@ -18811,7 +18667,7 @@ 1 2 - 417 + 365 @@ -18827,7 +18683,7 @@ 1 2 - 417 + 365 @@ -18843,7 +18699,7 @@ 1 2 - 417 + 365 @@ -18859,7 +18715,7 @@ 1 2 - 417 + 365 @@ -18875,7 +18731,7 @@ 1 2 - 417 + 365 @@ -18891,7 +18747,7 @@ 1 2 - 417 + 365 @@ -18901,11 +18757,11 @@ ql_select_child - 22594 + 23801 ql_select - 5640 + 5989 index @@ -18913,7 +18769,7 @@ child - 22594 + 23801 @@ -18927,37 +18783,37 @@ 1 2 - 137 + 149 2 3 - 787 + 854 3 4 - 1249 + 1341 4 5 - 1613 + 1821 5 6 - 1087 + 1028 6 7 - 453 + 465 7 21 - 314 + 331 @@ -18973,37 +18829,37 @@ 1 2 - 137 + 149 2 3 - 787 + 854 3 4 - 1249 + 1341 4 5 - 1613 + 1821 5 6 - 1087 + 1028 6 7 - 453 + 465 7 21 - 314 + 331 @@ -19027,18 +18883,23 @@ 2 - 3 - 4 - 2 + 4 + 5 + 1 - 7 - 8 - 2 + 6 + 7 + 1 - 12 - 13 + 11 + 12 + 1 + + + 13 + 14 1 @@ -19047,58 +18908,63 @@ 1 - 25 - 26 + 27 + 28 1 - 37 - 38 + 29 + 30 1 - 64 - 65 + 44 + 45 1 - 150 - 151 + 71 + 72 1 - 314 - 315 + 160 + 161 1 - 767 - 768 + 331 + 332 1 - 1854 - 1855 + 796 + 797 1 - 3467 - 3468 + 1824 + 1825 1 - 4716 - 4717 + 3645 + 3646 1 - 5503 - 5504 + 4986 + 4987 1 - 5640 - 5641 + 5840 + 5841 + 1 + + + 5989 + 5990 1 @@ -19123,18 +18989,23 @@ 2 - 3 - 4 - 2 + 4 + 5 + 1 - 7 - 8 - 2 + 6 + 7 + 1 - 12 - 13 + 11 + 12 + 1 + + + 13 + 14 1 @@ -19143,58 +19014,63 @@ 1 - 25 - 26 + 27 + 28 1 - 37 - 38 + 29 + 30 1 - 64 - 65 + 44 + 45 1 - 150 - 151 + 71 + 72 1 - 314 - 315 + 160 + 161 1 - 767 - 768 + 331 + 332 1 - 1854 - 1855 + 796 + 797 1 - 3467 - 3468 + 1824 + 1825 1 - 4716 - 4717 + 3645 + 3646 1 - 5503 - 5504 + 4986 + 4987 1 - 5640 - 5641 + 5840 + 5841 + 1 + + + 5989 + 5990 1 @@ -19211,7 +19087,7 @@ 1 2 - 22594 + 23801 @@ -19227,7 +19103,7 @@ 1 2 - 22594 + 23801 @@ -19237,22 +19113,22 @@ ql_select_def - 5640 + 5989 id - 5640 + 5989 ql_set_literal_child - 18133 + 20149 ql_set_literal - 3557 + 4014 index @@ -19260,7 +19136,7 @@ child - 18133 + 20149 @@ -19274,37 +19150,37 @@ 1 2 - 5 + 9 2 3 - 2131 + 2354 3 4 - 426 + 506 4 5 - 309 + 351 5 7 - 258 + 291 7 - 14 - 276 + 13 + 315 - 14 + 13 1029 - 152 + 188 @@ -19320,37 +19196,37 @@ 1 2 - 5 + 9 2 3 - 2131 + 2354 3 4 - 426 + 506 4 5 - 309 + 351 5 7 - 258 + 291 7 - 14 - 276 + 13 + 315 - 14 + 13 1029 - 152 + 188 @@ -19375,23 +19251,23 @@ 3 - 6 - 94 + 5 + 63 - 6 - 11 - 84 + 5 + 9 + 90 - 11 - 31 - 79 + 9 + 19 + 83 - 31 - 3558 - 49 + 19 + 4015 + 70 @@ -19416,23 +19292,23 @@ 3 - 6 - 94 + 5 + 63 - 6 - 11 - 84 + 5 + 9 + 90 - 11 - 31 - 79 + 9 + 19 + 83 - 31 - 3558 - 49 + 19 + 4015 + 70 @@ -19448,7 +19324,7 @@ 1 2 - 18133 + 20149 @@ -19464,7 +19340,7 @@ 1 2 - 18133 + 20149 @@ -19474,37 +19350,37 @@ ql_set_literal_def - 3557 + 4014 id - 3557 + 4014 ql_signature_expr_def - 2248 + 3709 id - 2248 + 3709 ql_signature_expr_mod_expr - 92 + 180 ql_signature_expr - 92 + 180 mod_expr - 92 + 180 @@ -19518,7 +19394,7 @@ 1 2 - 92 + 180 @@ -19534,7 +19410,7 @@ 1 2 - 92 + 180 @@ -19544,15 +19420,15 @@ ql_signature_expr_predicate - 149 + 232 ql_signature_expr - 149 + 232 predicate - 149 + 232 @@ -19566,7 +19442,7 @@ 1 2 - 149 + 232 @@ -19582,7 +19458,7 @@ 1 2 - 149 + 232 @@ -19592,15 +19468,15 @@ ql_signature_expr_type_expr - 2007 + 3297 ql_signature_expr - 2007 + 3297 type_expr - 2007 + 3297 @@ -19614,7 +19490,7 @@ 1 2 - 2007 + 3297 @@ -19630,7 +19506,7 @@ 1 2 - 2007 + 3297 @@ -19640,15 +19516,15 @@ ql_special_call_def - 4863 + 4424 id - 4863 + 4424 child - 4863 + 4424 @@ -19662,7 +19538,7 @@ 1 2 - 4863 + 4424 @@ -19678,7 +19554,7 @@ 1 2 - 4863 + 4424 @@ -19688,11 +19564,11 @@ ql_super_ref_child - 3070 + 3530 ql_super_ref - 2444 + 2901 index @@ -19700,7 +19576,7 @@ child - 3070 + 3530 @@ -19714,12 +19590,12 @@ 1 2 - 1818 + 2272 2 3 - 626 + 629 @@ -19735,12 +19611,12 @@ 1 2 - 1818 + 2272 2 3 - 626 + 629 @@ -19754,13 +19630,13 @@ 12 - 626 - 627 + 629 + 630 1 - 2444 - 2445 + 2901 + 2902 1 @@ -19775,13 +19651,13 @@ 12 - 626 - 627 + 629 + 630 1 - 2444 - 2445 + 2901 + 2902 1 @@ -19798,7 +19674,7 @@ 1 2 - 3070 + 3530 @@ -19814,7 +19690,7 @@ 1 2 - 3070 + 3530 @@ -19824,22 +19700,22 @@ ql_super_ref_def - 2444 + 2901 id - 2444 + 2901 ql_tokeninfo - 3697389 + 3524470 id - 3697389 + 3524470 kind @@ -19847,7 +19723,7 @@ value - 145712 + 159352 @@ -19861,7 +19737,7 @@ 1 2 - 3697389 + 3524470 @@ -19877,7 +19753,7 @@ 1 2 - 3697389 + 3524470 @@ -19891,83 +19767,83 @@ 12 - 200 - 297 + 205 + 306 2 - 631 - 1062 + 585 + 993 2 - 1171 - 2124 + 1158 + 1974 2 - 2391 - 2445 + 2234 + 2302 2 - 2648 - 2684 + 2344 + 2902 2 - 3604 - 4864 + 3766 + 4425 2 - 9694 - 14858 + 9053 + 13787 2 - 20351 - 20707 + 17184 + 20889 2 - 20738 - 26112 + 21612 + 24228 2 - 28901 - 49385 + 26200 + 47957 2 - 53091 - 55182 + 50826 + 52494 2 - 56786 - 67460 + 55406 + 58185 2 - 73436 - 75428 + 66480 + 83939 2 - 138784 - 224656 + 140334 + 204254 2 - 229368 - 542287 + 221079 + 512065 2 - 1966059 - 1966060 + 1875319 + 1875320 1 @@ -20003,7 +19879,7 @@ 12 - 19 + 18 2 @@ -20012,28 +19888,28 @@ 2 - 173 - 883 + 635 + 858 2 - 2434 - 11721 + 2472 + 12791 2 - 14851 - 14868 + 15738 + 15845 2 - 18243 - 20539 + 18782 + 21406 2 - 35688 - 41928 + 42941 + 44802 2 @@ -20050,32 +19926,32 @@ 1 2 - 85140 + 96196 2 3 - 21743 + 23735 3 4 - 10555 + 11475 4 7 - 13169 + 13411 7 - 27 - 11024 + 41 + 12004 - 27 - 371333 - 4081 + 41 + 348424 + 2531 @@ -20091,17 +19967,17 @@ 1 2 - 130386 + 142727 2 3 - 14775 + 16072 3 5 - 551 + 553 @@ -20111,15 +19987,15 @@ ql_type_alias_body_def - 1245 + 817 id - 1245 + 817 child - 1245 + 817 @@ -20133,7 +20009,7 @@ 1 2 - 1245 + 817 @@ -20149,7 +20025,7 @@ 1 2 - 1245 + 817 @@ -20159,15 +20035,15 @@ ql_type_expr_child - 52988 + 51722 ql_type_expr - 52988 + 51722 child - 52988 + 51722 @@ -20181,7 +20057,7 @@ 1 2 - 52988 + 51722 @@ -20197,7 +20073,7 @@ 1 2 - 52988 + 51722 @@ -20207,26 +20083,26 @@ ql_type_expr_def - 236975 + 218057 id - 236975 + 218057 ql_type_expr_name - 183987 + 166335 ql_type_expr - 183987 + 166335 name - 183987 + 166335 @@ -20240,7 +20116,7 @@ 1 2 - 183987 + 166335 @@ -20256,7 +20132,7 @@ 1 2 - 183987 + 166335 @@ -20266,15 +20142,15 @@ ql_type_expr_qualifier - 32598 + 34602 ql_type_expr - 32598 + 34602 qualifier - 32598 + 34602 @@ -20288,7 +20164,7 @@ 1 2 - 32598 + 34602 @@ -20304,7 +20180,7 @@ 1 2 - 32598 + 34602 @@ -20314,11 +20190,11 @@ ql_type_union_body_child - 1152 + 1174 ql_type_union_body - 249 + 253 index @@ -20326,7 +20202,7 @@ child - 1152 + 1174 @@ -20340,7 +20216,7 @@ 2 3 - 117 + 121 3 @@ -20350,12 +20226,12 @@ 4 5 - 35 + 32 5 6 - 14 + 17 6 @@ -20381,7 +20257,7 @@ 2 3 - 117 + 121 3 @@ -20391,12 +20267,12 @@ 4 5 - 35 + 32 5 6 - 14 + 17 6 @@ -20422,32 +20298,27 @@ 1 2 - 104 + 98 2 3 - 15 + 21 3 - 4 - 2 - - - 4 5 13 5 - 21 + 18 12 - 23 - 250 - 7 + 19 + 254 + 9 @@ -20463,32 +20334,27 @@ 1 2 - 104 + 98 2 3 - 15 + 21 3 - 4 - 2 - - - 4 5 13 5 - 21 + 18 12 - 23 - 250 - 7 + 19 + 254 + 9 @@ -20504,7 +20370,7 @@ 1 2 - 1152 + 1174 @@ -20520,7 +20386,7 @@ 1 2 - 1152 + 1174 @@ -20530,22 +20396,22 @@ ql_type_union_body_def - 249 + 253 id - 249 + 253 ql_unary_expr_child - 2342 + 2316 ql_unary_expr - 1171 + 1158 index @@ -20553,7 +20419,7 @@ child - 2342 + 2316 @@ -20567,7 +20433,7 @@ 2 3 - 1171 + 1158 @@ -20583,7 +20449,7 @@ 2 3 - 1171 + 1158 @@ -20597,8 +20463,8 @@ 12 - 1171 - 1172 + 1158 + 1159 2 @@ -20613,8 +20479,8 @@ 12 - 1171 - 1172 + 1158 + 1159 2 @@ -20631,7 +20497,7 @@ 1 2 - 2342 + 2316 @@ -20647,7 +20513,7 @@ 1 2 - 2342 + 2316 @@ -20657,11 +20523,11 @@ ql_unary_expr_def - 1171 + 1158 id - 1171 + 1158 @@ -20911,11 +20777,11 @@ ql_var_decl_child - 258882 + 228274 ql_var_decl - 129441 + 114137 index @@ -20923,7 +20789,7 @@ child - 258882 + 228274 @@ -20937,7 +20803,7 @@ 2 3 - 129441 + 114137 @@ -20953,7 +20819,7 @@ 2 3 - 129441 + 114137 @@ -20967,8 +20833,8 @@ 12 - 129441 - 129442 + 114137 + 114138 2 @@ -20983,8 +20849,8 @@ 12 - 129441 - 129442 + 114137 + 114138 2 @@ -21001,7 +20867,7 @@ 1 2 - 258882 + 228274 @@ -21017,7 +20883,7 @@ 1 2 - 258882 + 228274 @@ -21027,26 +20893,26 @@ ql_var_decl_def - 129441 + 114137 id - 129441 + 114137 ql_var_name_def - 415356 + 380908 id - 415356 + 380908 child - 415356 + 380908 @@ -21060,7 +20926,7 @@ 1 2 - 415356 + 380908 @@ -21076,7 +20942,7 @@ 1 2 - 415356 + 380908 @@ -21086,15 +20952,15 @@ ql_variable_def - 393587 + 369462 id - 393587 + 369462 child - 393587 + 369462 @@ -21108,7 +20974,7 @@ 1 2 - 393587 + 369462 @@ -21124,7 +20990,7 @@ 1 2 - 393587 + 369462 @@ -21145,11 +21011,11 @@ yaml - 1348 + 1726 id - 1348 + 1726 kind @@ -21157,7 +21023,7 @@ parent - 304 + 350 idx @@ -21169,7 +21035,7 @@ tostring - 236 + 263 @@ -21183,7 +21049,7 @@ 1 2 - 1348 + 1726 @@ -21199,7 +21065,7 @@ 1 2 - 1348 + 1726 @@ -21215,7 +21081,7 @@ 1 2 - 1348 + 1726 @@ -21231,7 +21097,7 @@ 1 2 - 1348 + 1726 @@ -21247,7 +21113,7 @@ 1 2 - 1348 + 1726 @@ -21261,18 +21127,18 @@ 12 - 52 - 53 + 59 + 60 1 - 160 - 161 + 186 + 187 1 - 1136 - 1137 + 1481 + 1482 1 @@ -21287,18 +21153,18 @@ 12 - 49 - 50 + 56 + 57 1 - 160 - 161 + 186 + 187 1 - 212 - 213 + 245 + 246 1 @@ -21360,18 +21226,18 @@ 12 - 32 - 33 + 33 + 34 1 - 59 - 60 + 68 + 69 1 - 145 - 146 + 162 + 163 1 @@ -21388,37 +21254,47 @@ 1 2 - 104 + 118 2 3 - 68 + 71 3 + 4 + 8 + + + 4 5 - 25 + 26 6 7 - 47 + 26 8 9 - 18 + 30 10 - 15 - 25 + 11 + 16 - 16 + 12 + 13 + 30 + + + 14 21 - 17 + 25 @@ -21434,17 +21310,17 @@ 1 2 - 230 + 262 2 3 - 31 + 39 3 4 - 43 + 49 @@ -21460,37 +21336,47 @@ 1 2 - 104 + 118 2 3 - 68 + 71 3 + 4 + 8 + + + 4 5 - 25 + 26 6 7 - 47 + 26 8 9 - 18 + 30 10 - 15 - 25 + 11 + 16 - 16 + 12 + 13 + 30 + + + 14 21 - 17 + 25 @@ -21506,22 +21392,22 @@ 1 2 - 215 + 245 2 3 - 40 + 15 3 4 - 24 + 41 4 5 - 25 + 49 @@ -21537,47 +21423,47 @@ 1 2 - 104 + 118 2 3 - 68 + 71 3 4 - 19 + 22 4 5 - 29 + 35 5 - 6 - 5 - - - 6 - 7 - 25 + 8 + 10 8 - 11 - 23 + 9 + 29 - 11 + 9 + 12 + 27 + + + 12 17 - 23 + 29 17 19 - 8 + 9 @@ -21596,63 +21482,63 @@ 2 - 10 - 11 + 11 + 12 2 - 17 - 18 + 19 + 20 2 - 20 - 21 + 25 + 26 2 - 31 - 32 + 55 + 56 2 - 42 - 43 + 71 + 72 2 - 60 - 61 + 101 + 102 2 - 107 - 108 + 127 + 128 2 - 126 - 127 + 153 + 154 1 - 132 - 133 + 161 + 162 1 - 144 - 145 + 164 + 165 1 - 160 - 161 + 186 + 187 1 - 200 - 201 + 232 + 233 1 @@ -21698,63 +21584,63 @@ 2 - 10 - 11 + 11 + 12 2 - 17 - 18 + 19 + 20 2 - 20 - 21 + 25 + 26 2 - 31 - 32 + 55 + 56 2 - 42 - 43 + 71 + 72 2 - 60 - 61 + 101 + 102 2 - 107 - 108 + 127 + 128 2 - 126 - 127 + 153 + 154 1 - 132 - 133 + 161 + 162 1 - 144 - 145 + 164 + 165 1 - 160 - 161 + 186 + 187 1 - 200 - 201 + 232 + 233 1 @@ -21778,15 +21664,10 @@ 3 3 - - 3 - 4 - 2 - 4 5 - 4 + 6 5 @@ -21814,20 +21695,10 @@ 3 1 - - 3 - 4 - 2 - 4 5 - 1 - - - 6 - 7 - 1 + 3 7 @@ -21835,8 +21706,8 @@ 1 - 8 - 9 + 9 + 10 2 @@ -21845,18 +21716,18 @@ 1 - 12 - 13 + 14 + 15 1 - 17 - 18 + 16 + 17 1 - 19 - 20 + 20 + 21 1 @@ -21865,8 +21736,13 @@ 2 - 28 - 29 + 27 + 28 + 1 + + + 29 + 30 1 @@ -21875,18 +21751,18 @@ 1 - 49 - 50 + 59 + 60 1 - 71 - 72 + 80 + 81 1 - 72 - 73 + 81 + 82 1 @@ -21905,24 +21781,24 @@ 3 1 - - 52 - 53 - 1 - 59 60 1 - 160 - 161 + 137 + 138 1 - 1075 - 1076 + 186 + 187 + 1 + + + 1342 + 1343 1 @@ -21958,23 +21834,23 @@ 1 - 44 - 45 + 56 + 57 1 - 49 - 50 + 105 + 106 1 - 160 - 161 + 186 + 187 1 - 212 - 213 + 245 + 246 1 @@ -21996,16 +21872,16 @@ 8 9 - 2 + 1 9 10 - 1 + 2 - 18 - 19 + 19 + 20 1 @@ -22030,18 +21906,18 @@ 1 - 32 - 33 + 33 + 34 1 - 59 - 60 + 68 + 69 1 - 142 - 143 + 159 + 160 1 @@ -22058,37 +21934,37 @@ 1 2 - 123 + 141 2 3 - 29 + 28 3 - 5 - 21 + 4 + 16 - 5 - 8 - 15 + 4 + 7 + 22 - 8 + 7 10 - 15 + 18 10 17 - 20 + 21 18 - 104 - 13 + 145 + 17 @@ -22104,7 +21980,7 @@ 1 2 - 236 + 263 @@ -22120,37 +21996,37 @@ 1 2 - 123 + 142 2 3 - 29 + 27 3 - 5 + 4 + 16 + + + 4 + 7 + 22 + + + 7 + 10 21 - 5 - 8 - 19 - - - 8 - 11 + 10 + 19 21 - 11 - 45 - 18 - - - 49 - 84 - 5 + 19 + 106 + 14 @@ -22166,7 +22042,7 @@ 1 2 - 159 + 179 2 @@ -22176,7 +22052,7 @@ 3 4 - 20 + 24 4 @@ -22185,8 +22061,8 @@ 8 - 9 - 2 + 10 + 5 @@ -22202,7 +22078,7 @@ 1 2 - 236 + 263 @@ -22338,15 +22214,15 @@ yaml_locations - 1348 + 1726 locatable - 1348 + 1726 location - 1348 + 1726 @@ -22360,7 +22236,7 @@ 1 2 - 1348 + 1726 @@ -22376,7 +22252,7 @@ 1 2 - 1348 + 1726 @@ -22386,11 +22262,11 @@ yaml_scalars - 1136 + 1481 scalar - 1136 + 1481 style @@ -22398,7 +22274,7 @@ value - 176 + 195 @@ -22412,7 +22288,7 @@ 1 2 - 1136 + 1481 @@ -22428,7 +22304,7 @@ 1 2 - 1136 + 1481 @@ -22442,18 +22318,18 @@ 12 - 3 - 4 + 5 + 6 1 - 40 - 41 + 41 + 42 1 - 1093 - 1094 + 1435 + 1436 1 @@ -22473,13 +22349,13 @@ 1 - 2 - 3 + 3 + 4 1 - 173 - 174 + 192 + 193 1 @@ -22496,37 +22372,42 @@ 1 2 - 89 + 101 2 3 - 17 + 16 3 4 - 13 + 17 4 - 7 - 15 + 8 + 17 - 7 + 8 10 - 14 + 12 10 - 17 - 16 + 15 + 15 - 18 - 104 - 12 + 15 + 106 + 15 + + + 136 + 145 + 2 @@ -22542,7 +22423,12 @@ 1 2 - 176 + 194 + + + 2 + 3 + 1 diff --git a/ql/ql/src/queries/summary/LinesOfCode.ql b/ql/ql/src/queries/summary/LinesOfCode.ql index cb5ef617476..7a552137cf3 100644 --- a/ql/ql/src/queries/summary/LinesOfCode.ql +++ b/ql/ql/src/queries/summary/LinesOfCode.ql @@ -8,6 +8,7 @@ * @kind metric * @tags summary * lines-of-code + * debug */ import ql diff --git a/ql/ql/src/queries/summary/LinesOfUserCode.ql b/ql/ql/src/queries/summary/LinesOfUserCode.ql index 1701af1a5c9..b1d8481a564 100644 --- a/ql/ql/src/queries/summary/LinesOfUserCode.ql +++ b/ql/ql/src/queries/summary/LinesOfUserCode.ql @@ -6,6 +6,7 @@ * query counts the lines of code, excluding whitespace or comments. * @kind metric * @tags summary + * debug */ import ql diff --git a/ruby/downgrades/440de75c71e9206ce16eed49a22c76e7889b5fc3/erb_ast_node_info.ql b/ruby/downgrades/440de75c71e9206ce16eed49a22c76e7889b5fc3/erb_ast_node_info.ql new file mode 100644 index 00000000000..ed8cf128f1d --- /dev/null +++ b/ruby/downgrades/440de75c71e9206ce16eed49a22c76e7889b5fc3/erb_ast_node_info.ql @@ -0,0 +1,44 @@ +class TAstNodeParent = @file or @erb_ast_node; + +abstract class AstNodeParent extends TAstNodeParent { + string toString() { none() } +} + +class AstNode extends AstNodeParent, @erb_ast_node { } + +class File extends AstNodeParent, @file { } + +class Location extends @location_default { + string toString() { none() } +} + +pragma[nomagic] +predicate hasFileParent( + AstNode n, File f, int startline, int startcolumn, int endline, int endcolumn +) { + exists(Location loc | + not erb_ast_node_parent(n, _, _) and + erb_ast_node_location(n, loc) and + locations_default(loc, f, startline, startcolumn, endline, endcolumn) + ) +} + +pragma[nomagic] +predicate hasFileParent(AstNode n, File f, int i) { + n = + rank[i + 1](AstNode n0, int startline, int startcolumn, int endline, int endcolumn | + hasFileParent(n0, f, startline, startcolumn, endline, endcolumn) + | + n0 order by startline, startcolumn, endline, endcolumn + ) +} + +from AstNode n, AstNodeParent parent, int i, Location location +where + erb_ast_node_location(n, location) and + ( + erb_ast_node_parent(n, parent, i) + or + hasFileParent(n, parent, i) + ) +select n, parent, i, location diff --git a/ruby/downgrades/440de75c71e9206ce16eed49a22c76e7889b5fc3/old.dbscheme b/ruby/downgrades/440de75c71e9206ce16eed49a22c76e7889b5fc3/old.dbscheme new file mode 100644 index 00000000000..440de75c71e --- /dev/null +++ b/ruby/downgrades/440de75c71e9206ce16eed49a22c76e7889b5fc3/old.dbscheme @@ -0,0 +1,1513 @@ +// CodeQL database schema for Ruby +// Automatically generated from the tree-sitter grammar; do not edit + +/*- Files and folders -*/ + +/** + * The location of an element. + * 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( + unique int id: @location_default, + int file: @file ref, + int beginLine: int ref, + int beginColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +files( + unique int id: @file, + string name: string ref +); + +folders( + unique int id: @folder, + string name: string ref +); + +@container = @file | @folder + +containerparent( + int parent: @container ref, + unique int child: @container ref +); + +/*- Source location prefix -*/ + +/** + * The source location of the snapshot. + */ +sourceLocationPrefix(string prefix : string ref); + +/*- Diagnostic messages -*/ + +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 +); + +/*- Diagnostic messages: severity -*/ + +case @diagnostic.severity of + 10 = @diagnostic_debug +| 20 = @diagnostic_info +| 30 = @diagnostic_warning +| 40 = @diagnostic_error +; + +/*- YAML -*/ + +#keyset[parent, idx] +yaml (unique int id: @yaml_node, + int kind: int ref, + int parent: @yaml_node_parent ref, + int idx: int ref, + string tag: string ref, + string tostring: string ref); + +case @yaml_node.kind of + 0 = @yaml_scalar_node +| 1 = @yaml_mapping_node +| 2 = @yaml_sequence_node +| 3 = @yaml_alias_node +; + +@yaml_collection_node = @yaml_mapping_node | @yaml_sequence_node; + +@yaml_node_parent = @yaml_collection_node | @file; + +yaml_anchors (unique int node: @yaml_node ref, + string anchor: string ref); + +yaml_aliases (unique int alias: @yaml_alias_node ref, + string target: string ref); + +yaml_scalars (unique int scalar: @yaml_scalar_node ref, + int style: int ref, + string value: string ref); + +yaml_errors (unique int id: @yaml_error, + string message: string ref); + +yaml_locations(unique int locatable: @yaml_locatable ref, + int location: @location_default ref); + +@yaml_locatable = @yaml_node | @yaml_error; + +/*- Ruby dbscheme -*/ +@ruby_underscore_arg = @ruby_assignment | @ruby_binary | @ruby_conditional | @ruby_operator_assignment | @ruby_range | @ruby_unary | @ruby_underscore_primary + +@ruby_underscore_call_operator = @ruby_reserved_word + +@ruby_underscore_expression = @ruby_assignment | @ruby_binary | @ruby_break | @ruby_call | @ruby_match_pattern | @ruby_next | @ruby_operator_assignment | @ruby_return | @ruby_test_pattern | @ruby_unary | @ruby_underscore_arg | @ruby_yield + +@ruby_underscore_lhs = @ruby_call | @ruby_element_reference | @ruby_scope_resolution | @ruby_token_false | @ruby_token_nil | @ruby_token_true | @ruby_underscore_variable + +@ruby_underscore_method_name = @ruby_delimited_symbol | @ruby_setter | @ruby_token_constant | @ruby_token_identifier | @ruby_token_operator | @ruby_token_simple_symbol | @ruby_underscore_nonlocal_variable + +@ruby_underscore_nonlocal_variable = @ruby_token_class_variable | @ruby_token_global_variable | @ruby_token_instance_variable + +@ruby_underscore_pattern_constant = @ruby_scope_resolution | @ruby_token_constant + +@ruby_underscore_pattern_expr = @ruby_alternative_pattern | @ruby_as_pattern | @ruby_underscore_pattern_expr_basic + +@ruby_underscore_pattern_expr_basic = @ruby_array_pattern | @ruby_expression_reference_pattern | @ruby_find_pattern | @ruby_hash_pattern | @ruby_parenthesized_pattern | @ruby_range | @ruby_token_identifier | @ruby_underscore_pattern_constant | @ruby_underscore_pattern_primitive | @ruby_variable_reference_pattern + +@ruby_underscore_pattern_primitive = @ruby_delimited_symbol | @ruby_lambda | @ruby_regex | @ruby_string__ | @ruby_string_array | @ruby_subshell | @ruby_symbol_array | @ruby_token_encoding | @ruby_token_false | @ruby_token_file | @ruby_token_heredoc_beginning | @ruby_token_line | @ruby_token_nil | @ruby_token_self | @ruby_token_simple_symbol | @ruby_token_true | @ruby_unary | @ruby_underscore_simple_numeric + +@ruby_underscore_pattern_top_expr_body = @ruby_array_pattern | @ruby_find_pattern | @ruby_hash_pattern | @ruby_underscore_pattern_expr + +@ruby_underscore_primary = @ruby_array | @ruby_begin | @ruby_break | @ruby_call | @ruby_case__ | @ruby_case_match | @ruby_chained_string | @ruby_class | @ruby_delimited_symbol | @ruby_for | @ruby_hash | @ruby_if | @ruby_lambda | @ruby_method | @ruby_module | @ruby_next | @ruby_parenthesized_statements | @ruby_redo | @ruby_regex | @ruby_retry | @ruby_return | @ruby_singleton_class | @ruby_singleton_method | @ruby_string__ | @ruby_string_array | @ruby_subshell | @ruby_symbol_array | @ruby_token_character | @ruby_token_heredoc_beginning | @ruby_token_simple_symbol | @ruby_unary | @ruby_underscore_lhs | @ruby_underscore_simple_numeric | @ruby_unless | @ruby_until | @ruby_while | @ruby_yield + +@ruby_underscore_simple_numeric = @ruby_complex | @ruby_rational | @ruby_token_float | @ruby_token_integer + +@ruby_underscore_statement = @ruby_alias | @ruby_begin_block | @ruby_end_block | @ruby_if_modifier | @ruby_rescue_modifier | @ruby_undef | @ruby_underscore_expression | @ruby_unless_modifier | @ruby_until_modifier | @ruby_while_modifier + +@ruby_underscore_variable = @ruby_token_constant | @ruby_token_identifier | @ruby_token_self | @ruby_token_super | @ruby_underscore_nonlocal_variable + +ruby_alias_def( + unique int id: @ruby_alias, + int alias: @ruby_underscore_method_name ref, + int name: @ruby_underscore_method_name ref +); + +#keyset[ruby_alternative_pattern, index] +ruby_alternative_pattern_alternatives( + int ruby_alternative_pattern: @ruby_alternative_pattern ref, + int index: int ref, + unique int alternatives: @ruby_underscore_pattern_expr_basic ref +); + +ruby_alternative_pattern_def( + unique int id: @ruby_alternative_pattern +); + +@ruby_argument_list_child_type = @ruby_block_argument | @ruby_hash_splat_argument | @ruby_pair | @ruby_splat_argument | @ruby_token_forward_argument | @ruby_underscore_expression + +#keyset[ruby_argument_list, index] +ruby_argument_list_child( + int ruby_argument_list: @ruby_argument_list ref, + int index: int ref, + unique int child: @ruby_argument_list_child_type ref +); + +ruby_argument_list_def( + unique int id: @ruby_argument_list +); + +@ruby_array_child_type = @ruby_block_argument | @ruby_hash_splat_argument | @ruby_pair | @ruby_splat_argument | @ruby_token_forward_argument | @ruby_underscore_expression + +#keyset[ruby_array, index] +ruby_array_child( + int ruby_array: @ruby_array ref, + int index: int ref, + unique int child: @ruby_array_child_type ref +); + +ruby_array_def( + unique int id: @ruby_array +); + +ruby_array_pattern_class( + unique int ruby_array_pattern: @ruby_array_pattern ref, + unique int class: @ruby_underscore_pattern_constant ref +); + +@ruby_array_pattern_child_type = @ruby_splat_parameter | @ruby_underscore_pattern_expr + +#keyset[ruby_array_pattern, index] +ruby_array_pattern_child( + int ruby_array_pattern: @ruby_array_pattern ref, + int index: int ref, + unique int child: @ruby_array_pattern_child_type ref +); + +ruby_array_pattern_def( + unique int id: @ruby_array_pattern +); + +ruby_as_pattern_def( + unique int id: @ruby_as_pattern, + int name: @ruby_token_identifier ref, + int value: @ruby_underscore_pattern_expr ref +); + +@ruby_assignment_left_type = @ruby_left_assignment_list | @ruby_underscore_lhs + +@ruby_assignment_right_type = @ruby_rescue_modifier | @ruby_right_assignment_list | @ruby_splat_argument | @ruby_underscore_expression + +ruby_assignment_def( + unique int id: @ruby_assignment, + int left: @ruby_assignment_left_type ref, + int right: @ruby_assignment_right_type ref +); + +@ruby_bare_string_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content + +#keyset[ruby_bare_string, index] +ruby_bare_string_child( + int ruby_bare_string: @ruby_bare_string ref, + int index: int ref, + unique int child: @ruby_bare_string_child_type ref +); + +ruby_bare_string_def( + unique int id: @ruby_bare_string +); + +@ruby_bare_symbol_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content + +#keyset[ruby_bare_symbol, index] +ruby_bare_symbol_child( + int ruby_bare_symbol: @ruby_bare_symbol ref, + int index: int ref, + unique int child: @ruby_bare_symbol_child_type ref +); + +ruby_bare_symbol_def( + unique int id: @ruby_bare_symbol +); + +@ruby_begin_child_type = @ruby_else | @ruby_ensure | @ruby_rescue | @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_begin, index] +ruby_begin_child( + int ruby_begin: @ruby_begin ref, + int index: int ref, + unique int child: @ruby_begin_child_type ref +); + +ruby_begin_def( + unique int id: @ruby_begin +); + +@ruby_begin_block_child_type = @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_begin_block, index] +ruby_begin_block_child( + int ruby_begin_block: @ruby_begin_block ref, + int index: int ref, + unique int child: @ruby_begin_block_child_type ref +); + +ruby_begin_block_def( + unique int id: @ruby_begin_block +); + +@ruby_binary_left_type = @ruby_underscore_expression | @ruby_underscore_simple_numeric + +case @ruby_binary.operator of + 0 = @ruby_binary_bangequal +| 1 = @ruby_binary_bangtilde +| 2 = @ruby_binary_percent +| 3 = @ruby_binary_ampersand +| 4 = @ruby_binary_ampersandampersand +| 5 = @ruby_binary_star +| 6 = @ruby_binary_starstar +| 7 = @ruby_binary_plus +| 8 = @ruby_binary_minus +| 9 = @ruby_binary_slash +| 10 = @ruby_binary_langle +| 11 = @ruby_binary_langlelangle +| 12 = @ruby_binary_langleequal +| 13 = @ruby_binary_langleequalrangle +| 14 = @ruby_binary_equalequal +| 15 = @ruby_binary_equalequalequal +| 16 = @ruby_binary_equaltilde +| 17 = @ruby_binary_rangle +| 18 = @ruby_binary_rangleequal +| 19 = @ruby_binary_ranglerangle +| 20 = @ruby_binary_caret +| 21 = @ruby_binary_and +| 22 = @ruby_binary_or +| 23 = @ruby_binary_pipe +| 24 = @ruby_binary_pipepipe +; + + +ruby_binary_def( + unique int id: @ruby_binary, + int left: @ruby_binary_left_type ref, + int operator: int ref, + int right: @ruby_underscore_expression ref +); + +ruby_block_body( + unique int ruby_block: @ruby_block ref, + unique int body: @ruby_block_body ref +); + +ruby_block_parameters( + unique int ruby_block: @ruby_block ref, + unique int parameters: @ruby_block_parameters ref +); + +ruby_block_def( + unique int id: @ruby_block +); + +ruby_block_argument_child( + unique int ruby_block_argument: @ruby_block_argument ref, + unique int child: @ruby_underscore_arg ref +); + +ruby_block_argument_def( + unique int id: @ruby_block_argument +); + +@ruby_block_body_child_type = @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_block_body, index] +ruby_block_body_child( + int ruby_block_body: @ruby_block_body ref, + int index: int ref, + unique int child: @ruby_block_body_child_type ref +); + +ruby_block_body_def( + unique int id: @ruby_block_body +); + +ruby_block_parameter_name( + unique int ruby_block_parameter: @ruby_block_parameter ref, + unique int name: @ruby_token_identifier ref +); + +ruby_block_parameter_def( + unique int id: @ruby_block_parameter +); + +#keyset[ruby_block_parameters, index] +ruby_block_parameters_locals( + int ruby_block_parameters: @ruby_block_parameters ref, + int index: int ref, + unique int locals: @ruby_token_identifier ref +); + +@ruby_block_parameters_child_type = @ruby_block_parameter | @ruby_destructured_parameter | @ruby_hash_splat_parameter | @ruby_keyword_parameter | @ruby_optional_parameter | @ruby_splat_parameter | @ruby_token_forward_parameter | @ruby_token_hash_splat_nil | @ruby_token_identifier + +#keyset[ruby_block_parameters, index] +ruby_block_parameters_child( + int ruby_block_parameters: @ruby_block_parameters ref, + int index: int ref, + unique int child: @ruby_block_parameters_child_type ref +); + +ruby_block_parameters_def( + unique int id: @ruby_block_parameters +); + +@ruby_body_statement_child_type = @ruby_else | @ruby_ensure | @ruby_rescue | @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_body_statement, index] +ruby_body_statement_child( + int ruby_body_statement: @ruby_body_statement ref, + int index: int ref, + unique int child: @ruby_body_statement_child_type ref +); + +ruby_body_statement_def( + unique int id: @ruby_body_statement +); + +ruby_break_child( + unique int ruby_break: @ruby_break ref, + unique int child: @ruby_argument_list ref +); + +ruby_break_def( + unique int id: @ruby_break +); + +ruby_call_arguments( + unique int ruby_call: @ruby_call ref, + unique int arguments: @ruby_argument_list ref +); + +@ruby_call_block_type = @ruby_block | @ruby_do_block + +ruby_call_block( + unique int ruby_call: @ruby_call ref, + unique int block: @ruby_call_block_type ref +); + +@ruby_call_method_type = @ruby_token_operator | @ruby_underscore_variable + +ruby_call_method( + unique int ruby_call: @ruby_call ref, + unique int method: @ruby_call_method_type ref +); + +ruby_call_operator( + unique int ruby_call: @ruby_call ref, + unique int operator: @ruby_underscore_call_operator ref +); + +ruby_call_receiver( + unique int ruby_call: @ruby_call ref, + unique int receiver: @ruby_underscore_primary ref +); + +ruby_call_def( + unique int id: @ruby_call +); + +ruby_case_value( + unique int ruby_case__: @ruby_case__ ref, + unique int value: @ruby_underscore_statement ref +); + +@ruby_case_child_type = @ruby_else | @ruby_when + +#keyset[ruby_case__, index] +ruby_case_child( + int ruby_case__: @ruby_case__ ref, + int index: int ref, + unique int child: @ruby_case_child_type ref +); + +ruby_case_def( + unique int id: @ruby_case__ +); + +#keyset[ruby_case_match, index] +ruby_case_match_clauses( + int ruby_case_match: @ruby_case_match ref, + int index: int ref, + unique int clauses: @ruby_in_clause ref +); + +ruby_case_match_else( + unique int ruby_case_match: @ruby_case_match ref, + unique int else: @ruby_else ref +); + +ruby_case_match_def( + unique int id: @ruby_case_match, + int value: @ruby_underscore_statement ref +); + +#keyset[ruby_chained_string, index] +ruby_chained_string_child( + int ruby_chained_string: @ruby_chained_string ref, + int index: int ref, + unique int child: @ruby_string__ ref +); + +ruby_chained_string_def( + unique int id: @ruby_chained_string +); + +ruby_class_body( + unique int ruby_class: @ruby_class ref, + unique int body: @ruby_body_statement ref +); + +@ruby_class_name_type = @ruby_scope_resolution | @ruby_token_constant + +ruby_class_superclass( + unique int ruby_class: @ruby_class ref, + unique int superclass: @ruby_superclass ref +); + +ruby_class_def( + unique int id: @ruby_class, + int name: @ruby_class_name_type ref +); + +@ruby_complex_child_type = @ruby_rational | @ruby_token_float | @ruby_token_integer + +ruby_complex_def( + unique int id: @ruby_complex, + int child: @ruby_complex_child_type ref +); + +ruby_conditional_def( + unique int id: @ruby_conditional, + int alternative: @ruby_underscore_arg ref, + int condition: @ruby_underscore_arg ref, + int consequence: @ruby_underscore_arg ref +); + +@ruby_delimited_symbol_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content + +#keyset[ruby_delimited_symbol, index] +ruby_delimited_symbol_child( + int ruby_delimited_symbol: @ruby_delimited_symbol ref, + int index: int ref, + unique int child: @ruby_delimited_symbol_child_type ref +); + +ruby_delimited_symbol_def( + unique int id: @ruby_delimited_symbol +); + +@ruby_destructured_left_assignment_child_type = @ruby_destructured_left_assignment | @ruby_rest_assignment | @ruby_underscore_lhs + +#keyset[ruby_destructured_left_assignment, index] +ruby_destructured_left_assignment_child( + int ruby_destructured_left_assignment: @ruby_destructured_left_assignment ref, + int index: int ref, + unique int child: @ruby_destructured_left_assignment_child_type ref +); + +ruby_destructured_left_assignment_def( + unique int id: @ruby_destructured_left_assignment +); + +@ruby_destructured_parameter_child_type = @ruby_block_parameter | @ruby_destructured_parameter | @ruby_hash_splat_parameter | @ruby_keyword_parameter | @ruby_optional_parameter | @ruby_splat_parameter | @ruby_token_forward_parameter | @ruby_token_hash_splat_nil | @ruby_token_identifier + +#keyset[ruby_destructured_parameter, index] +ruby_destructured_parameter_child( + int ruby_destructured_parameter: @ruby_destructured_parameter ref, + int index: int ref, + unique int child: @ruby_destructured_parameter_child_type ref +); + +ruby_destructured_parameter_def( + unique int id: @ruby_destructured_parameter +); + +@ruby_do_child_type = @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_do, index] +ruby_do_child( + int ruby_do: @ruby_do ref, + int index: int ref, + unique int child: @ruby_do_child_type ref +); + +ruby_do_def( + unique int id: @ruby_do +); + +ruby_do_block_body( + unique int ruby_do_block: @ruby_do_block ref, + unique int body: @ruby_body_statement ref +); + +ruby_do_block_parameters( + unique int ruby_do_block: @ruby_do_block ref, + unique int parameters: @ruby_block_parameters ref +); + +ruby_do_block_def( + unique int id: @ruby_do_block +); + +@ruby_element_reference_child_type = @ruby_block_argument | @ruby_hash_splat_argument | @ruby_pair | @ruby_splat_argument | @ruby_token_forward_argument | @ruby_underscore_expression + +#keyset[ruby_element_reference, index] +ruby_element_reference_child( + int ruby_element_reference: @ruby_element_reference ref, + int index: int ref, + unique int child: @ruby_element_reference_child_type ref +); + +ruby_element_reference_def( + unique int id: @ruby_element_reference, + int object: @ruby_underscore_primary ref +); + +@ruby_else_child_type = @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_else, index] +ruby_else_child( + int ruby_else: @ruby_else ref, + int index: int ref, + unique int child: @ruby_else_child_type ref +); + +ruby_else_def( + unique int id: @ruby_else +); + +@ruby_elsif_alternative_type = @ruby_else | @ruby_elsif + +ruby_elsif_alternative( + unique int ruby_elsif: @ruby_elsif ref, + unique int alternative: @ruby_elsif_alternative_type ref +); + +ruby_elsif_consequence( + unique int ruby_elsif: @ruby_elsif ref, + unique int consequence: @ruby_then ref +); + +ruby_elsif_def( + unique int id: @ruby_elsif, + int condition: @ruby_underscore_statement ref +); + +@ruby_end_block_child_type = @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_end_block, index] +ruby_end_block_child( + int ruby_end_block: @ruby_end_block ref, + int index: int ref, + unique int child: @ruby_end_block_child_type ref +); + +ruby_end_block_def( + unique int id: @ruby_end_block +); + +@ruby_ensure_child_type = @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_ensure, index] +ruby_ensure_child( + int ruby_ensure: @ruby_ensure ref, + int index: int ref, + unique int child: @ruby_ensure_child_type ref +); + +ruby_ensure_def( + unique int id: @ruby_ensure +); + +ruby_exception_variable_def( + unique int id: @ruby_exception_variable, + int child: @ruby_underscore_lhs ref +); + +@ruby_exceptions_child_type = @ruby_splat_argument | @ruby_underscore_arg + +#keyset[ruby_exceptions, index] +ruby_exceptions_child( + int ruby_exceptions: @ruby_exceptions ref, + int index: int ref, + unique int child: @ruby_exceptions_child_type ref +); + +ruby_exceptions_def( + unique int id: @ruby_exceptions +); + +ruby_expression_reference_pattern_def( + unique int id: @ruby_expression_reference_pattern, + int value: @ruby_underscore_expression ref +); + +ruby_find_pattern_class( + unique int ruby_find_pattern: @ruby_find_pattern ref, + unique int class: @ruby_underscore_pattern_constant ref +); + +@ruby_find_pattern_child_type = @ruby_splat_parameter | @ruby_underscore_pattern_expr + +#keyset[ruby_find_pattern, index] +ruby_find_pattern_child( + int ruby_find_pattern: @ruby_find_pattern ref, + int index: int ref, + unique int child: @ruby_find_pattern_child_type ref +); + +ruby_find_pattern_def( + unique int id: @ruby_find_pattern +); + +@ruby_for_pattern_type = @ruby_left_assignment_list | @ruby_underscore_lhs + +ruby_for_def( + unique int id: @ruby_for, + int body: @ruby_do ref, + int pattern: @ruby_for_pattern_type ref, + int value: @ruby_in ref +); + +@ruby_hash_child_type = @ruby_hash_splat_argument | @ruby_pair + +#keyset[ruby_hash, index] +ruby_hash_child( + int ruby_hash: @ruby_hash ref, + int index: int ref, + unique int child: @ruby_hash_child_type ref +); + +ruby_hash_def( + unique int id: @ruby_hash +); + +ruby_hash_pattern_class( + unique int ruby_hash_pattern: @ruby_hash_pattern ref, + unique int class: @ruby_underscore_pattern_constant ref +); + +@ruby_hash_pattern_child_type = @ruby_hash_splat_parameter | @ruby_keyword_pattern | @ruby_token_hash_splat_nil + +#keyset[ruby_hash_pattern, index] +ruby_hash_pattern_child( + int ruby_hash_pattern: @ruby_hash_pattern ref, + int index: int ref, + unique int child: @ruby_hash_pattern_child_type ref +); + +ruby_hash_pattern_def( + unique int id: @ruby_hash_pattern +); + +ruby_hash_splat_argument_child( + unique int ruby_hash_splat_argument: @ruby_hash_splat_argument ref, + unique int child: @ruby_underscore_arg ref +); + +ruby_hash_splat_argument_def( + unique int id: @ruby_hash_splat_argument +); + +ruby_hash_splat_parameter_name( + unique int ruby_hash_splat_parameter: @ruby_hash_splat_parameter ref, + unique int name: @ruby_token_identifier ref +); + +ruby_hash_splat_parameter_def( + unique int id: @ruby_hash_splat_parameter +); + +@ruby_heredoc_body_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_heredoc_content | @ruby_token_heredoc_end + +#keyset[ruby_heredoc_body, index] +ruby_heredoc_body_child( + int ruby_heredoc_body: @ruby_heredoc_body ref, + int index: int ref, + unique int child: @ruby_heredoc_body_child_type ref +); + +ruby_heredoc_body_def( + unique int id: @ruby_heredoc_body +); + +@ruby_if_alternative_type = @ruby_else | @ruby_elsif + +ruby_if_alternative( + unique int ruby_if: @ruby_if ref, + unique int alternative: @ruby_if_alternative_type ref +); + +ruby_if_consequence( + unique int ruby_if: @ruby_if ref, + unique int consequence: @ruby_then ref +); + +ruby_if_def( + unique int id: @ruby_if, + int condition: @ruby_underscore_statement ref +); + +ruby_if_guard_def( + unique int id: @ruby_if_guard, + int condition: @ruby_underscore_expression ref +); + +ruby_if_modifier_def( + unique int id: @ruby_if_modifier, + int body: @ruby_underscore_statement ref, + int condition: @ruby_underscore_expression ref +); + +ruby_in_def( + unique int id: @ruby_in, + int child: @ruby_underscore_arg ref +); + +ruby_in_clause_body( + unique int ruby_in_clause: @ruby_in_clause ref, + unique int body: @ruby_then ref +); + +@ruby_in_clause_guard_type = @ruby_if_guard | @ruby_unless_guard + +ruby_in_clause_guard( + unique int ruby_in_clause: @ruby_in_clause ref, + unique int guard: @ruby_in_clause_guard_type ref +); + +ruby_in_clause_def( + unique int id: @ruby_in_clause, + int pattern: @ruby_underscore_pattern_top_expr_body ref +); + +@ruby_interpolation_child_type = @ruby_token_empty_statement | @ruby_underscore_nonlocal_variable | @ruby_underscore_statement + +#keyset[ruby_interpolation, index] +ruby_interpolation_child( + int ruby_interpolation: @ruby_interpolation ref, + int index: int ref, + unique int child: @ruby_interpolation_child_type ref +); + +ruby_interpolation_def( + unique int id: @ruby_interpolation +); + +ruby_keyword_parameter_value( + unique int ruby_keyword_parameter: @ruby_keyword_parameter ref, + unique int value: @ruby_underscore_arg ref +); + +ruby_keyword_parameter_def( + unique int id: @ruby_keyword_parameter, + int name: @ruby_token_identifier ref +); + +@ruby_keyword_pattern_key_type = @ruby_string__ | @ruby_token_hash_key_symbol + +ruby_keyword_pattern_value( + unique int ruby_keyword_pattern: @ruby_keyword_pattern ref, + unique int value: @ruby_underscore_pattern_expr ref +); + +ruby_keyword_pattern_def( + unique int id: @ruby_keyword_pattern, + int key__: @ruby_keyword_pattern_key_type ref +); + +@ruby_lambda_body_type = @ruby_block | @ruby_do_block + +ruby_lambda_parameters( + unique int ruby_lambda: @ruby_lambda ref, + unique int parameters: @ruby_lambda_parameters ref +); + +ruby_lambda_def( + unique int id: @ruby_lambda, + int body: @ruby_lambda_body_type ref +); + +@ruby_lambda_parameters_child_type = @ruby_block_parameter | @ruby_destructured_parameter | @ruby_hash_splat_parameter | @ruby_keyword_parameter | @ruby_optional_parameter | @ruby_splat_parameter | @ruby_token_forward_parameter | @ruby_token_hash_splat_nil | @ruby_token_identifier + +#keyset[ruby_lambda_parameters, index] +ruby_lambda_parameters_child( + int ruby_lambda_parameters: @ruby_lambda_parameters ref, + int index: int ref, + unique int child: @ruby_lambda_parameters_child_type ref +); + +ruby_lambda_parameters_def( + unique int id: @ruby_lambda_parameters +); + +@ruby_left_assignment_list_child_type = @ruby_destructured_left_assignment | @ruby_rest_assignment | @ruby_underscore_lhs + +#keyset[ruby_left_assignment_list, index] +ruby_left_assignment_list_child( + int ruby_left_assignment_list: @ruby_left_assignment_list ref, + int index: int ref, + unique int child: @ruby_left_assignment_list_child_type ref +); + +ruby_left_assignment_list_def( + unique int id: @ruby_left_assignment_list +); + +ruby_match_pattern_def( + unique int id: @ruby_match_pattern, + int pattern: @ruby_underscore_pattern_top_expr_body ref, + int value: @ruby_underscore_arg ref +); + +@ruby_method_body_type = @ruby_body_statement | @ruby_rescue_modifier | @ruby_underscore_arg + +ruby_method_body( + unique int ruby_method: @ruby_method ref, + unique int body: @ruby_method_body_type ref +); + +ruby_method_parameters( + unique int ruby_method: @ruby_method ref, + unique int parameters: @ruby_method_parameters ref +); + +ruby_method_def( + unique int id: @ruby_method, + int name: @ruby_underscore_method_name ref +); + +@ruby_method_parameters_child_type = @ruby_block_parameter | @ruby_destructured_parameter | @ruby_hash_splat_parameter | @ruby_keyword_parameter | @ruby_optional_parameter | @ruby_splat_parameter | @ruby_token_forward_parameter | @ruby_token_hash_splat_nil | @ruby_token_identifier + +#keyset[ruby_method_parameters, index] +ruby_method_parameters_child( + int ruby_method_parameters: @ruby_method_parameters ref, + int index: int ref, + unique int child: @ruby_method_parameters_child_type ref +); + +ruby_method_parameters_def( + unique int id: @ruby_method_parameters +); + +ruby_module_body( + unique int ruby_module: @ruby_module ref, + unique int body: @ruby_body_statement ref +); + +@ruby_module_name_type = @ruby_scope_resolution | @ruby_token_constant + +ruby_module_def( + unique int id: @ruby_module, + int name: @ruby_module_name_type ref +); + +ruby_next_child( + unique int ruby_next: @ruby_next ref, + unique int child: @ruby_argument_list ref +); + +ruby_next_def( + unique int id: @ruby_next +); + +case @ruby_operator_assignment.operator of + 0 = @ruby_operator_assignment_percentequal +| 1 = @ruby_operator_assignment_ampersandampersandequal +| 2 = @ruby_operator_assignment_ampersandequal +| 3 = @ruby_operator_assignment_starstarequal +| 4 = @ruby_operator_assignment_starequal +| 5 = @ruby_operator_assignment_plusequal +| 6 = @ruby_operator_assignment_minusequal +| 7 = @ruby_operator_assignment_slashequal +| 8 = @ruby_operator_assignment_langlelangleequal +| 9 = @ruby_operator_assignment_ranglerangleequal +| 10 = @ruby_operator_assignment_caretequal +| 11 = @ruby_operator_assignment_pipeequal +| 12 = @ruby_operator_assignment_pipepipeequal +; + + +@ruby_operator_assignment_right_type = @ruby_rescue_modifier | @ruby_underscore_expression + +ruby_operator_assignment_def( + unique int id: @ruby_operator_assignment, + int left: @ruby_underscore_lhs ref, + int operator: int ref, + int right: @ruby_operator_assignment_right_type ref +); + +ruby_optional_parameter_def( + unique int id: @ruby_optional_parameter, + int name: @ruby_token_identifier ref, + int value: @ruby_underscore_arg ref +); + +@ruby_pair_key_type = @ruby_string__ | @ruby_token_hash_key_symbol | @ruby_underscore_arg + +ruby_pair_value( + unique int ruby_pair: @ruby_pair ref, + unique int value: @ruby_underscore_arg ref +); + +ruby_pair_def( + unique int id: @ruby_pair, + int key__: @ruby_pair_key_type ref +); + +ruby_parenthesized_pattern_def( + unique int id: @ruby_parenthesized_pattern, + int child: @ruby_underscore_pattern_expr ref +); + +@ruby_parenthesized_statements_child_type = @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_parenthesized_statements, index] +ruby_parenthesized_statements_child( + int ruby_parenthesized_statements: @ruby_parenthesized_statements ref, + int index: int ref, + unique int child: @ruby_parenthesized_statements_child_type ref +); + +ruby_parenthesized_statements_def( + unique int id: @ruby_parenthesized_statements +); + +@ruby_pattern_child_type = @ruby_splat_argument | @ruby_underscore_arg + +ruby_pattern_def( + unique int id: @ruby_pattern, + int child: @ruby_pattern_child_type ref +); + +@ruby_program_child_type = @ruby_token_empty_statement | @ruby_token_uninterpreted | @ruby_underscore_statement + +#keyset[ruby_program, index] +ruby_program_child( + int ruby_program: @ruby_program ref, + int index: int ref, + unique int child: @ruby_program_child_type ref +); + +ruby_program_def( + unique int id: @ruby_program +); + +@ruby_range_begin_type = @ruby_underscore_arg | @ruby_underscore_pattern_primitive + +ruby_range_begin( + unique int ruby_range: @ruby_range ref, + unique int begin: @ruby_range_begin_type ref +); + +@ruby_range_end_type = @ruby_underscore_arg | @ruby_underscore_pattern_primitive + +ruby_range_end( + unique int ruby_range: @ruby_range ref, + unique int end: @ruby_range_end_type ref +); + +case @ruby_range.operator of + 0 = @ruby_range_dotdot +| 1 = @ruby_range_dotdotdot +; + + +ruby_range_def( + unique int id: @ruby_range, + int operator: int ref +); + +@ruby_rational_child_type = @ruby_token_float | @ruby_token_integer + +ruby_rational_def( + unique int id: @ruby_rational, + int child: @ruby_rational_child_type ref +); + +ruby_redo_child( + unique int ruby_redo: @ruby_redo ref, + unique int child: @ruby_argument_list ref +); + +ruby_redo_def( + unique int id: @ruby_redo +); + +@ruby_regex_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content + +#keyset[ruby_regex, index] +ruby_regex_child( + int ruby_regex: @ruby_regex ref, + int index: int ref, + unique int child: @ruby_regex_child_type ref +); + +ruby_regex_def( + unique int id: @ruby_regex +); + +ruby_rescue_body( + unique int ruby_rescue: @ruby_rescue ref, + unique int body: @ruby_then ref +); + +ruby_rescue_exceptions( + unique int ruby_rescue: @ruby_rescue ref, + unique int exceptions: @ruby_exceptions ref +); + +ruby_rescue_variable( + unique int ruby_rescue: @ruby_rescue ref, + unique int variable: @ruby_exception_variable ref +); + +ruby_rescue_def( + unique int id: @ruby_rescue +); + +@ruby_rescue_modifier_body_type = @ruby_underscore_arg | @ruby_underscore_statement + +ruby_rescue_modifier_def( + unique int id: @ruby_rescue_modifier, + int body: @ruby_rescue_modifier_body_type ref, + int handler: @ruby_underscore_expression ref +); + +ruby_rest_assignment_child( + unique int ruby_rest_assignment: @ruby_rest_assignment ref, + unique int child: @ruby_underscore_lhs ref +); + +ruby_rest_assignment_def( + unique int id: @ruby_rest_assignment +); + +ruby_retry_child( + unique int ruby_retry: @ruby_retry ref, + unique int child: @ruby_argument_list ref +); + +ruby_retry_def( + unique int id: @ruby_retry +); + +ruby_return_child( + unique int ruby_return: @ruby_return ref, + unique int child: @ruby_argument_list ref +); + +ruby_return_def( + unique int id: @ruby_return +); + +@ruby_right_assignment_list_child_type = @ruby_splat_argument | @ruby_underscore_arg + +#keyset[ruby_right_assignment_list, index] +ruby_right_assignment_list_child( + int ruby_right_assignment_list: @ruby_right_assignment_list ref, + int index: int ref, + unique int child: @ruby_right_assignment_list_child_type ref +); + +ruby_right_assignment_list_def( + unique int id: @ruby_right_assignment_list +); + +@ruby_scope_resolution_scope_type = @ruby_underscore_pattern_constant | @ruby_underscore_primary + +ruby_scope_resolution_scope( + unique int ruby_scope_resolution: @ruby_scope_resolution ref, + unique int scope: @ruby_scope_resolution_scope_type ref +); + +ruby_scope_resolution_def( + unique int id: @ruby_scope_resolution, + int name: @ruby_token_constant ref +); + +ruby_setter_def( + unique int id: @ruby_setter, + int name: @ruby_token_identifier ref +); + +ruby_singleton_class_body( + unique int ruby_singleton_class: @ruby_singleton_class ref, + unique int body: @ruby_body_statement ref +); + +ruby_singleton_class_def( + unique int id: @ruby_singleton_class, + int value: @ruby_underscore_arg ref +); + +@ruby_singleton_method_body_type = @ruby_body_statement | @ruby_rescue_modifier | @ruby_underscore_arg + +ruby_singleton_method_body( + unique int ruby_singleton_method: @ruby_singleton_method ref, + unique int body: @ruby_singleton_method_body_type ref +); + +@ruby_singleton_method_object_type = @ruby_underscore_arg | @ruby_underscore_variable + +ruby_singleton_method_parameters( + unique int ruby_singleton_method: @ruby_singleton_method ref, + unique int parameters: @ruby_method_parameters ref +); + +ruby_singleton_method_def( + unique int id: @ruby_singleton_method, + int name: @ruby_underscore_method_name ref, + int object: @ruby_singleton_method_object_type ref +); + +ruby_splat_argument_child( + unique int ruby_splat_argument: @ruby_splat_argument ref, + unique int child: @ruby_underscore_arg ref +); + +ruby_splat_argument_def( + unique int id: @ruby_splat_argument +); + +ruby_splat_parameter_name( + unique int ruby_splat_parameter: @ruby_splat_parameter ref, + unique int name: @ruby_token_identifier ref +); + +ruby_splat_parameter_def( + unique int id: @ruby_splat_parameter +); + +@ruby_string_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content + +#keyset[ruby_string__, index] +ruby_string_child( + int ruby_string__: @ruby_string__ ref, + int index: int ref, + unique int child: @ruby_string_child_type ref +); + +ruby_string_def( + unique int id: @ruby_string__ +); + +#keyset[ruby_string_array, index] +ruby_string_array_child( + int ruby_string_array: @ruby_string_array ref, + int index: int ref, + unique int child: @ruby_bare_string ref +); + +ruby_string_array_def( + unique int id: @ruby_string_array +); + +@ruby_subshell_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content + +#keyset[ruby_subshell, index] +ruby_subshell_child( + int ruby_subshell: @ruby_subshell ref, + int index: int ref, + unique int child: @ruby_subshell_child_type ref +); + +ruby_subshell_def( + unique int id: @ruby_subshell +); + +ruby_superclass_def( + unique int id: @ruby_superclass, + int child: @ruby_underscore_expression ref +); + +#keyset[ruby_symbol_array, index] +ruby_symbol_array_child( + int ruby_symbol_array: @ruby_symbol_array ref, + int index: int ref, + unique int child: @ruby_bare_symbol ref +); + +ruby_symbol_array_def( + unique int id: @ruby_symbol_array +); + +ruby_test_pattern_def( + unique int id: @ruby_test_pattern, + int pattern: @ruby_underscore_pattern_top_expr_body ref, + int value: @ruby_underscore_arg ref +); + +@ruby_then_child_type = @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_then, index] +ruby_then_child( + int ruby_then: @ruby_then ref, + int index: int ref, + unique int child: @ruby_then_child_type ref +); + +ruby_then_def( + unique int id: @ruby_then +); + +@ruby_unary_operand_type = @ruby_parenthesized_statements | @ruby_underscore_expression | @ruby_underscore_simple_numeric + +case @ruby_unary.operator of + 0 = @ruby_unary_bang +| 1 = @ruby_unary_plus +| 2 = @ruby_unary_minus +| 3 = @ruby_unary_definedquestion +| 4 = @ruby_unary_not +| 5 = @ruby_unary_tilde +; + + +ruby_unary_def( + unique int id: @ruby_unary, + int operand: @ruby_unary_operand_type ref, + int operator: int ref +); + +#keyset[ruby_undef, index] +ruby_undef_child( + int ruby_undef: @ruby_undef ref, + int index: int ref, + unique int child: @ruby_underscore_method_name ref +); + +ruby_undef_def( + unique int id: @ruby_undef +); + +@ruby_unless_alternative_type = @ruby_else | @ruby_elsif + +ruby_unless_alternative( + unique int ruby_unless: @ruby_unless ref, + unique int alternative: @ruby_unless_alternative_type ref +); + +ruby_unless_consequence( + unique int ruby_unless: @ruby_unless ref, + unique int consequence: @ruby_then ref +); + +ruby_unless_def( + unique int id: @ruby_unless, + int condition: @ruby_underscore_statement ref +); + +ruby_unless_guard_def( + unique int id: @ruby_unless_guard, + int condition: @ruby_underscore_expression ref +); + +ruby_unless_modifier_def( + unique int id: @ruby_unless_modifier, + int body: @ruby_underscore_statement ref, + int condition: @ruby_underscore_expression ref +); + +ruby_until_def( + unique int id: @ruby_until, + int body: @ruby_do ref, + int condition: @ruby_underscore_statement ref +); + +ruby_until_modifier_def( + unique int id: @ruby_until_modifier, + int body: @ruby_underscore_statement ref, + int condition: @ruby_underscore_expression ref +); + +@ruby_variable_reference_pattern_name_type = @ruby_token_identifier | @ruby_underscore_nonlocal_variable + +ruby_variable_reference_pattern_def( + unique int id: @ruby_variable_reference_pattern, + int name: @ruby_variable_reference_pattern_name_type ref +); + +ruby_when_body( + unique int ruby_when: @ruby_when ref, + unique int body: @ruby_then ref +); + +#keyset[ruby_when, index] +ruby_when_pattern( + int ruby_when: @ruby_when ref, + int index: int ref, + unique int pattern: @ruby_pattern ref +); + +ruby_when_def( + unique int id: @ruby_when +); + +ruby_while_def( + unique int id: @ruby_while, + int body: @ruby_do ref, + int condition: @ruby_underscore_statement ref +); + +ruby_while_modifier_def( + unique int id: @ruby_while_modifier, + int body: @ruby_underscore_statement ref, + int condition: @ruby_underscore_expression ref +); + +ruby_yield_child( + unique int ruby_yield: @ruby_yield ref, + unique int child: @ruby_argument_list ref +); + +ruby_yield_def( + unique int id: @ruby_yield +); + +ruby_tokeninfo( + unique int id: @ruby_token, + int kind: int ref, + string value: string ref +); + +case @ruby_token.kind of + 0 = @ruby_reserved_word +| 1 = @ruby_token_character +| 2 = @ruby_token_class_variable +| 3 = @ruby_token_comment +| 4 = @ruby_token_constant +| 5 = @ruby_token_empty_statement +| 6 = @ruby_token_encoding +| 7 = @ruby_token_escape_sequence +| 8 = @ruby_token_false +| 9 = @ruby_token_file +| 10 = @ruby_token_float +| 11 = @ruby_token_forward_argument +| 12 = @ruby_token_forward_parameter +| 13 = @ruby_token_global_variable +| 14 = @ruby_token_hash_key_symbol +| 15 = @ruby_token_hash_splat_nil +| 16 = @ruby_token_heredoc_beginning +| 17 = @ruby_token_heredoc_content +| 18 = @ruby_token_heredoc_end +| 19 = @ruby_token_identifier +| 20 = @ruby_token_instance_variable +| 21 = @ruby_token_integer +| 22 = @ruby_token_line +| 23 = @ruby_token_nil +| 24 = @ruby_token_operator +| 25 = @ruby_token_self +| 26 = @ruby_token_simple_symbol +| 27 = @ruby_token_string_content +| 28 = @ruby_token_super +| 29 = @ruby_token_true +| 30 = @ruby_token_uninterpreted +; + + +@ruby_ast_node = @ruby_alias | @ruby_alternative_pattern | @ruby_argument_list | @ruby_array | @ruby_array_pattern | @ruby_as_pattern | @ruby_assignment | @ruby_bare_string | @ruby_bare_symbol | @ruby_begin | @ruby_begin_block | @ruby_binary | @ruby_block | @ruby_block_argument | @ruby_block_body | @ruby_block_parameter | @ruby_block_parameters | @ruby_body_statement | @ruby_break | @ruby_call | @ruby_case__ | @ruby_case_match | @ruby_chained_string | @ruby_class | @ruby_complex | @ruby_conditional | @ruby_delimited_symbol | @ruby_destructured_left_assignment | @ruby_destructured_parameter | @ruby_do | @ruby_do_block | @ruby_element_reference | @ruby_else | @ruby_elsif | @ruby_end_block | @ruby_ensure | @ruby_exception_variable | @ruby_exceptions | @ruby_expression_reference_pattern | @ruby_find_pattern | @ruby_for | @ruby_hash | @ruby_hash_pattern | @ruby_hash_splat_argument | @ruby_hash_splat_parameter | @ruby_heredoc_body | @ruby_if | @ruby_if_guard | @ruby_if_modifier | @ruby_in | @ruby_in_clause | @ruby_interpolation | @ruby_keyword_parameter | @ruby_keyword_pattern | @ruby_lambda | @ruby_lambda_parameters | @ruby_left_assignment_list | @ruby_match_pattern | @ruby_method | @ruby_method_parameters | @ruby_module | @ruby_next | @ruby_operator_assignment | @ruby_optional_parameter | @ruby_pair | @ruby_parenthesized_pattern | @ruby_parenthesized_statements | @ruby_pattern | @ruby_program | @ruby_range | @ruby_rational | @ruby_redo | @ruby_regex | @ruby_rescue | @ruby_rescue_modifier | @ruby_rest_assignment | @ruby_retry | @ruby_return | @ruby_right_assignment_list | @ruby_scope_resolution | @ruby_setter | @ruby_singleton_class | @ruby_singleton_method | @ruby_splat_argument | @ruby_splat_parameter | @ruby_string__ | @ruby_string_array | @ruby_subshell | @ruby_superclass | @ruby_symbol_array | @ruby_test_pattern | @ruby_then | @ruby_token | @ruby_unary | @ruby_undef | @ruby_unless | @ruby_unless_guard | @ruby_unless_modifier | @ruby_until | @ruby_until_modifier | @ruby_variable_reference_pattern | @ruby_when | @ruby_while | @ruby_while_modifier | @ruby_yield + +ruby_ast_node_location( + unique int node: @ruby_ast_node ref, + int loc: @location_default ref +); + +#keyset[parent, parent_index] +ruby_ast_node_parent( + unique int node: @ruby_ast_node ref, + int parent: @ruby_ast_node ref, + int parent_index: int ref +); + +/*- Erb dbscheme -*/ +erb_comment_directive_child( + unique int erb_comment_directive: @erb_comment_directive ref, + unique int child: @erb_token_comment ref +); + +erb_comment_directive_def( + unique int id: @erb_comment_directive +); + +erb_directive_child( + unique int erb_directive: @erb_directive ref, + unique int child: @erb_token_code ref +); + +erb_directive_def( + unique int id: @erb_directive +); + +erb_graphql_directive_child( + unique int erb_graphql_directive: @erb_graphql_directive ref, + unique int child: @erb_token_code ref +); + +erb_graphql_directive_def( + unique int id: @erb_graphql_directive +); + +erb_output_directive_child( + unique int erb_output_directive: @erb_output_directive ref, + unique int child: @erb_token_code ref +); + +erb_output_directive_def( + unique int id: @erb_output_directive +); + +@erb_template_child_type = @erb_comment_directive | @erb_directive | @erb_graphql_directive | @erb_output_directive | @erb_token_content + +#keyset[erb_template, index] +erb_template_child( + int erb_template: @erb_template ref, + int index: int ref, + unique int child: @erb_template_child_type ref +); + +erb_template_def( + unique int id: @erb_template +); + +erb_tokeninfo( + unique int id: @erb_token, + int kind: int ref, + string value: string ref +); + +case @erb_token.kind of + 0 = @erb_reserved_word +| 1 = @erb_token_code +| 2 = @erb_token_comment +| 3 = @erb_token_content +; + + +@erb_ast_node = @erb_comment_directive | @erb_directive | @erb_graphql_directive | @erb_output_directive | @erb_template | @erb_token + +erb_ast_node_location( + unique int node: @erb_ast_node ref, + int loc: @location_default ref +); + +#keyset[parent, parent_index] +erb_ast_node_parent( + unique int node: @erb_ast_node ref, + int parent: @erb_ast_node ref, + int parent_index: int ref +); + diff --git a/ruby/downgrades/440de75c71e9206ce16eed49a22c76e7889b5fc3/ruby.dbscheme b/ruby/downgrades/440de75c71e9206ce16eed49a22c76e7889b5fc3/ruby.dbscheme new file mode 100644 index 00000000000..f9f0f4023e4 --- /dev/null +++ b/ruby/downgrades/440de75c71e9206ce16eed49a22c76e7889b5fc3/ruby.dbscheme @@ -0,0 +1,1509 @@ +// CodeQL database schema for Ruby +// Automatically generated from the tree-sitter grammar; do not edit + +/*- Files and folders -*/ + +/** + * The location of an element. + * 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( + unique int id: @location_default, + int file: @file ref, + int beginLine: int ref, + int beginColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +files( + unique int id: @file, + string name: string ref +); + +folders( + unique int id: @folder, + string name: string ref +); + +@container = @file | @folder + +containerparent( + int parent: @container ref, + unique int child: @container ref +); + +/*- Source location prefix -*/ + +/** + * The source location of the snapshot. + */ +sourceLocationPrefix(string prefix : string ref); + +/*- Diagnostic messages -*/ + +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 +); + +/*- Diagnostic messages: severity -*/ + +case @diagnostic.severity of + 10 = @diagnostic_debug +| 20 = @diagnostic_info +| 30 = @diagnostic_warning +| 40 = @diagnostic_error +; + +/*- YAML -*/ + +#keyset[parent, idx] +yaml (unique int id: @yaml_node, + int kind: int ref, + int parent: @yaml_node_parent ref, + int idx: int ref, + string tag: string ref, + string tostring: string ref); + +case @yaml_node.kind of + 0 = @yaml_scalar_node +| 1 = @yaml_mapping_node +| 2 = @yaml_sequence_node +| 3 = @yaml_alias_node +; + +@yaml_collection_node = @yaml_mapping_node | @yaml_sequence_node; + +@yaml_node_parent = @yaml_collection_node | @file; + +yaml_anchors (unique int node: @yaml_node ref, + string anchor: string ref); + +yaml_aliases (unique int alias: @yaml_alias_node ref, + string target: string ref); + +yaml_scalars (unique int scalar: @yaml_scalar_node ref, + int style: int ref, + string value: string ref); + +yaml_errors (unique int id: @yaml_error, + string message: string ref); + +yaml_locations(unique int locatable: @yaml_locatable ref, + int location: @location_default ref); + +@yaml_locatable = @yaml_node | @yaml_error; + +/*- Ruby dbscheme -*/ +@ruby_underscore_arg = @ruby_assignment | @ruby_binary | @ruby_conditional | @ruby_operator_assignment | @ruby_range | @ruby_unary | @ruby_underscore_primary + +@ruby_underscore_call_operator = @ruby_reserved_word + +@ruby_underscore_expression = @ruby_assignment | @ruby_binary | @ruby_break | @ruby_call | @ruby_match_pattern | @ruby_next | @ruby_operator_assignment | @ruby_return | @ruby_test_pattern | @ruby_unary | @ruby_underscore_arg | @ruby_yield + +@ruby_underscore_lhs = @ruby_call | @ruby_element_reference | @ruby_scope_resolution | @ruby_token_false | @ruby_token_nil | @ruby_token_true | @ruby_underscore_variable + +@ruby_underscore_method_name = @ruby_delimited_symbol | @ruby_setter | @ruby_token_constant | @ruby_token_identifier | @ruby_token_operator | @ruby_token_simple_symbol | @ruby_underscore_nonlocal_variable + +@ruby_underscore_nonlocal_variable = @ruby_token_class_variable | @ruby_token_global_variable | @ruby_token_instance_variable + +@ruby_underscore_pattern_constant = @ruby_scope_resolution | @ruby_token_constant + +@ruby_underscore_pattern_expr = @ruby_alternative_pattern | @ruby_as_pattern | @ruby_underscore_pattern_expr_basic + +@ruby_underscore_pattern_expr_basic = @ruby_array_pattern | @ruby_expression_reference_pattern | @ruby_find_pattern | @ruby_hash_pattern | @ruby_parenthesized_pattern | @ruby_range | @ruby_token_identifier | @ruby_underscore_pattern_constant | @ruby_underscore_pattern_primitive | @ruby_variable_reference_pattern + +@ruby_underscore_pattern_primitive = @ruby_delimited_symbol | @ruby_lambda | @ruby_regex | @ruby_string__ | @ruby_string_array | @ruby_subshell | @ruby_symbol_array | @ruby_token_encoding | @ruby_token_false | @ruby_token_file | @ruby_token_heredoc_beginning | @ruby_token_line | @ruby_token_nil | @ruby_token_self | @ruby_token_simple_symbol | @ruby_token_true | @ruby_unary | @ruby_underscore_simple_numeric + +@ruby_underscore_pattern_top_expr_body = @ruby_array_pattern | @ruby_find_pattern | @ruby_hash_pattern | @ruby_underscore_pattern_expr + +@ruby_underscore_primary = @ruby_array | @ruby_begin | @ruby_break | @ruby_call | @ruby_case__ | @ruby_case_match | @ruby_chained_string | @ruby_class | @ruby_delimited_symbol | @ruby_for | @ruby_hash | @ruby_if | @ruby_lambda | @ruby_method | @ruby_module | @ruby_next | @ruby_parenthesized_statements | @ruby_redo | @ruby_regex | @ruby_retry | @ruby_return | @ruby_singleton_class | @ruby_singleton_method | @ruby_string__ | @ruby_string_array | @ruby_subshell | @ruby_symbol_array | @ruby_token_character | @ruby_token_heredoc_beginning | @ruby_token_simple_symbol | @ruby_unary | @ruby_underscore_lhs | @ruby_underscore_simple_numeric | @ruby_unless | @ruby_until | @ruby_while | @ruby_yield + +@ruby_underscore_simple_numeric = @ruby_complex | @ruby_rational | @ruby_token_float | @ruby_token_integer + +@ruby_underscore_statement = @ruby_alias | @ruby_begin_block | @ruby_end_block | @ruby_if_modifier | @ruby_rescue_modifier | @ruby_undef | @ruby_underscore_expression | @ruby_unless_modifier | @ruby_until_modifier | @ruby_while_modifier + +@ruby_underscore_variable = @ruby_token_constant | @ruby_token_identifier | @ruby_token_self | @ruby_token_super | @ruby_underscore_nonlocal_variable + +ruby_alias_def( + unique int id: @ruby_alias, + int alias: @ruby_underscore_method_name ref, + int name: @ruby_underscore_method_name ref +); + +#keyset[ruby_alternative_pattern, index] +ruby_alternative_pattern_alternatives( + int ruby_alternative_pattern: @ruby_alternative_pattern ref, + int index: int ref, + unique int alternatives: @ruby_underscore_pattern_expr_basic ref +); + +ruby_alternative_pattern_def( + unique int id: @ruby_alternative_pattern +); + +@ruby_argument_list_child_type = @ruby_block_argument | @ruby_hash_splat_argument | @ruby_pair | @ruby_splat_argument | @ruby_token_forward_argument | @ruby_underscore_expression + +#keyset[ruby_argument_list, index] +ruby_argument_list_child( + int ruby_argument_list: @ruby_argument_list ref, + int index: int ref, + unique int child: @ruby_argument_list_child_type ref +); + +ruby_argument_list_def( + unique int id: @ruby_argument_list +); + +@ruby_array_child_type = @ruby_block_argument | @ruby_hash_splat_argument | @ruby_pair | @ruby_splat_argument | @ruby_token_forward_argument | @ruby_underscore_expression + +#keyset[ruby_array, index] +ruby_array_child( + int ruby_array: @ruby_array ref, + int index: int ref, + unique int child: @ruby_array_child_type ref +); + +ruby_array_def( + unique int id: @ruby_array +); + +ruby_array_pattern_class( + unique int ruby_array_pattern: @ruby_array_pattern ref, + unique int class: @ruby_underscore_pattern_constant ref +); + +@ruby_array_pattern_child_type = @ruby_splat_parameter | @ruby_underscore_pattern_expr + +#keyset[ruby_array_pattern, index] +ruby_array_pattern_child( + int ruby_array_pattern: @ruby_array_pattern ref, + int index: int ref, + unique int child: @ruby_array_pattern_child_type ref +); + +ruby_array_pattern_def( + unique int id: @ruby_array_pattern +); + +ruby_as_pattern_def( + unique int id: @ruby_as_pattern, + int name: @ruby_token_identifier ref, + int value: @ruby_underscore_pattern_expr ref +); + +@ruby_assignment_left_type = @ruby_left_assignment_list | @ruby_underscore_lhs + +@ruby_assignment_right_type = @ruby_rescue_modifier | @ruby_right_assignment_list | @ruby_splat_argument | @ruby_underscore_expression + +ruby_assignment_def( + unique int id: @ruby_assignment, + int left: @ruby_assignment_left_type ref, + int right: @ruby_assignment_right_type ref +); + +@ruby_bare_string_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content + +#keyset[ruby_bare_string, index] +ruby_bare_string_child( + int ruby_bare_string: @ruby_bare_string ref, + int index: int ref, + unique int child: @ruby_bare_string_child_type ref +); + +ruby_bare_string_def( + unique int id: @ruby_bare_string +); + +@ruby_bare_symbol_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content + +#keyset[ruby_bare_symbol, index] +ruby_bare_symbol_child( + int ruby_bare_symbol: @ruby_bare_symbol ref, + int index: int ref, + unique int child: @ruby_bare_symbol_child_type ref +); + +ruby_bare_symbol_def( + unique int id: @ruby_bare_symbol +); + +@ruby_begin_child_type = @ruby_else | @ruby_ensure | @ruby_rescue | @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_begin, index] +ruby_begin_child( + int ruby_begin: @ruby_begin ref, + int index: int ref, + unique int child: @ruby_begin_child_type ref +); + +ruby_begin_def( + unique int id: @ruby_begin +); + +@ruby_begin_block_child_type = @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_begin_block, index] +ruby_begin_block_child( + int ruby_begin_block: @ruby_begin_block ref, + int index: int ref, + unique int child: @ruby_begin_block_child_type ref +); + +ruby_begin_block_def( + unique int id: @ruby_begin_block +); + +@ruby_binary_left_type = @ruby_underscore_expression | @ruby_underscore_simple_numeric + +case @ruby_binary.operator of + 0 = @ruby_binary_bangequal +| 1 = @ruby_binary_bangtilde +| 2 = @ruby_binary_percent +| 3 = @ruby_binary_ampersand +| 4 = @ruby_binary_ampersandampersand +| 5 = @ruby_binary_star +| 6 = @ruby_binary_starstar +| 7 = @ruby_binary_plus +| 8 = @ruby_binary_minus +| 9 = @ruby_binary_slash +| 10 = @ruby_binary_langle +| 11 = @ruby_binary_langlelangle +| 12 = @ruby_binary_langleequal +| 13 = @ruby_binary_langleequalrangle +| 14 = @ruby_binary_equalequal +| 15 = @ruby_binary_equalequalequal +| 16 = @ruby_binary_equaltilde +| 17 = @ruby_binary_rangle +| 18 = @ruby_binary_rangleequal +| 19 = @ruby_binary_ranglerangle +| 20 = @ruby_binary_caret +| 21 = @ruby_binary_and +| 22 = @ruby_binary_or +| 23 = @ruby_binary_pipe +| 24 = @ruby_binary_pipepipe +; + + +ruby_binary_def( + unique int id: @ruby_binary, + int left: @ruby_binary_left_type ref, + int operator: int ref, + int right: @ruby_underscore_expression ref +); + +ruby_block_body( + unique int ruby_block: @ruby_block ref, + unique int body: @ruby_block_body ref +); + +ruby_block_parameters( + unique int ruby_block: @ruby_block ref, + unique int parameters: @ruby_block_parameters ref +); + +ruby_block_def( + unique int id: @ruby_block +); + +ruby_block_argument_child( + unique int ruby_block_argument: @ruby_block_argument ref, + unique int child: @ruby_underscore_arg ref +); + +ruby_block_argument_def( + unique int id: @ruby_block_argument +); + +@ruby_block_body_child_type = @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_block_body, index] +ruby_block_body_child( + int ruby_block_body: @ruby_block_body ref, + int index: int ref, + unique int child: @ruby_block_body_child_type ref +); + +ruby_block_body_def( + unique int id: @ruby_block_body +); + +ruby_block_parameter_name( + unique int ruby_block_parameter: @ruby_block_parameter ref, + unique int name: @ruby_token_identifier ref +); + +ruby_block_parameter_def( + unique int id: @ruby_block_parameter +); + +#keyset[ruby_block_parameters, index] +ruby_block_parameters_locals( + int ruby_block_parameters: @ruby_block_parameters ref, + int index: int ref, + unique int locals: @ruby_token_identifier ref +); + +@ruby_block_parameters_child_type = @ruby_block_parameter | @ruby_destructured_parameter | @ruby_hash_splat_parameter | @ruby_keyword_parameter | @ruby_optional_parameter | @ruby_splat_parameter | @ruby_token_forward_parameter | @ruby_token_hash_splat_nil | @ruby_token_identifier + +#keyset[ruby_block_parameters, index] +ruby_block_parameters_child( + int ruby_block_parameters: @ruby_block_parameters ref, + int index: int ref, + unique int child: @ruby_block_parameters_child_type ref +); + +ruby_block_parameters_def( + unique int id: @ruby_block_parameters +); + +@ruby_body_statement_child_type = @ruby_else | @ruby_ensure | @ruby_rescue | @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_body_statement, index] +ruby_body_statement_child( + int ruby_body_statement: @ruby_body_statement ref, + int index: int ref, + unique int child: @ruby_body_statement_child_type ref +); + +ruby_body_statement_def( + unique int id: @ruby_body_statement +); + +ruby_break_child( + unique int ruby_break: @ruby_break ref, + unique int child: @ruby_argument_list ref +); + +ruby_break_def( + unique int id: @ruby_break +); + +ruby_call_arguments( + unique int ruby_call: @ruby_call ref, + unique int arguments: @ruby_argument_list ref +); + +@ruby_call_block_type = @ruby_block | @ruby_do_block + +ruby_call_block( + unique int ruby_call: @ruby_call ref, + unique int block: @ruby_call_block_type ref +); + +@ruby_call_method_type = @ruby_token_operator | @ruby_underscore_variable + +ruby_call_method( + unique int ruby_call: @ruby_call ref, + unique int method: @ruby_call_method_type ref +); + +ruby_call_operator( + unique int ruby_call: @ruby_call ref, + unique int operator: @ruby_underscore_call_operator ref +); + +ruby_call_receiver( + unique int ruby_call: @ruby_call ref, + unique int receiver: @ruby_underscore_primary ref +); + +ruby_call_def( + unique int id: @ruby_call +); + +ruby_case_value( + unique int ruby_case__: @ruby_case__ ref, + unique int value: @ruby_underscore_statement ref +); + +@ruby_case_child_type = @ruby_else | @ruby_when + +#keyset[ruby_case__, index] +ruby_case_child( + int ruby_case__: @ruby_case__ ref, + int index: int ref, + unique int child: @ruby_case_child_type ref +); + +ruby_case_def( + unique int id: @ruby_case__ +); + +#keyset[ruby_case_match, index] +ruby_case_match_clauses( + int ruby_case_match: @ruby_case_match ref, + int index: int ref, + unique int clauses: @ruby_in_clause ref +); + +ruby_case_match_else( + unique int ruby_case_match: @ruby_case_match ref, + unique int else: @ruby_else ref +); + +ruby_case_match_def( + unique int id: @ruby_case_match, + int value: @ruby_underscore_statement ref +); + +#keyset[ruby_chained_string, index] +ruby_chained_string_child( + int ruby_chained_string: @ruby_chained_string ref, + int index: int ref, + unique int child: @ruby_string__ ref +); + +ruby_chained_string_def( + unique int id: @ruby_chained_string +); + +ruby_class_body( + unique int ruby_class: @ruby_class ref, + unique int body: @ruby_body_statement ref +); + +@ruby_class_name_type = @ruby_scope_resolution | @ruby_token_constant + +ruby_class_superclass( + unique int ruby_class: @ruby_class ref, + unique int superclass: @ruby_superclass ref +); + +ruby_class_def( + unique int id: @ruby_class, + int name: @ruby_class_name_type ref +); + +@ruby_complex_child_type = @ruby_rational | @ruby_token_float | @ruby_token_integer + +ruby_complex_def( + unique int id: @ruby_complex, + int child: @ruby_complex_child_type ref +); + +ruby_conditional_def( + unique int id: @ruby_conditional, + int alternative: @ruby_underscore_arg ref, + int condition: @ruby_underscore_arg ref, + int consequence: @ruby_underscore_arg ref +); + +@ruby_delimited_symbol_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content + +#keyset[ruby_delimited_symbol, index] +ruby_delimited_symbol_child( + int ruby_delimited_symbol: @ruby_delimited_symbol ref, + int index: int ref, + unique int child: @ruby_delimited_symbol_child_type ref +); + +ruby_delimited_symbol_def( + unique int id: @ruby_delimited_symbol +); + +@ruby_destructured_left_assignment_child_type = @ruby_destructured_left_assignment | @ruby_rest_assignment | @ruby_underscore_lhs + +#keyset[ruby_destructured_left_assignment, index] +ruby_destructured_left_assignment_child( + int ruby_destructured_left_assignment: @ruby_destructured_left_assignment ref, + int index: int ref, + unique int child: @ruby_destructured_left_assignment_child_type ref +); + +ruby_destructured_left_assignment_def( + unique int id: @ruby_destructured_left_assignment +); + +@ruby_destructured_parameter_child_type = @ruby_block_parameter | @ruby_destructured_parameter | @ruby_hash_splat_parameter | @ruby_keyword_parameter | @ruby_optional_parameter | @ruby_splat_parameter | @ruby_token_forward_parameter | @ruby_token_hash_splat_nil | @ruby_token_identifier + +#keyset[ruby_destructured_parameter, index] +ruby_destructured_parameter_child( + int ruby_destructured_parameter: @ruby_destructured_parameter ref, + int index: int ref, + unique int child: @ruby_destructured_parameter_child_type ref +); + +ruby_destructured_parameter_def( + unique int id: @ruby_destructured_parameter +); + +@ruby_do_child_type = @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_do, index] +ruby_do_child( + int ruby_do: @ruby_do ref, + int index: int ref, + unique int child: @ruby_do_child_type ref +); + +ruby_do_def( + unique int id: @ruby_do +); + +ruby_do_block_body( + unique int ruby_do_block: @ruby_do_block ref, + unique int body: @ruby_body_statement ref +); + +ruby_do_block_parameters( + unique int ruby_do_block: @ruby_do_block ref, + unique int parameters: @ruby_block_parameters ref +); + +ruby_do_block_def( + unique int id: @ruby_do_block +); + +@ruby_element_reference_child_type = @ruby_block_argument | @ruby_hash_splat_argument | @ruby_pair | @ruby_splat_argument | @ruby_token_forward_argument | @ruby_underscore_expression + +#keyset[ruby_element_reference, index] +ruby_element_reference_child( + int ruby_element_reference: @ruby_element_reference ref, + int index: int ref, + unique int child: @ruby_element_reference_child_type ref +); + +ruby_element_reference_def( + unique int id: @ruby_element_reference, + int object: @ruby_underscore_primary ref +); + +@ruby_else_child_type = @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_else, index] +ruby_else_child( + int ruby_else: @ruby_else ref, + int index: int ref, + unique int child: @ruby_else_child_type ref +); + +ruby_else_def( + unique int id: @ruby_else +); + +@ruby_elsif_alternative_type = @ruby_else | @ruby_elsif + +ruby_elsif_alternative( + unique int ruby_elsif: @ruby_elsif ref, + unique int alternative: @ruby_elsif_alternative_type ref +); + +ruby_elsif_consequence( + unique int ruby_elsif: @ruby_elsif ref, + unique int consequence: @ruby_then ref +); + +ruby_elsif_def( + unique int id: @ruby_elsif, + int condition: @ruby_underscore_statement ref +); + +@ruby_end_block_child_type = @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_end_block, index] +ruby_end_block_child( + int ruby_end_block: @ruby_end_block ref, + int index: int ref, + unique int child: @ruby_end_block_child_type ref +); + +ruby_end_block_def( + unique int id: @ruby_end_block +); + +@ruby_ensure_child_type = @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_ensure, index] +ruby_ensure_child( + int ruby_ensure: @ruby_ensure ref, + int index: int ref, + unique int child: @ruby_ensure_child_type ref +); + +ruby_ensure_def( + unique int id: @ruby_ensure +); + +ruby_exception_variable_def( + unique int id: @ruby_exception_variable, + int child: @ruby_underscore_lhs ref +); + +@ruby_exceptions_child_type = @ruby_splat_argument | @ruby_underscore_arg + +#keyset[ruby_exceptions, index] +ruby_exceptions_child( + int ruby_exceptions: @ruby_exceptions ref, + int index: int ref, + unique int child: @ruby_exceptions_child_type ref +); + +ruby_exceptions_def( + unique int id: @ruby_exceptions +); + +ruby_expression_reference_pattern_def( + unique int id: @ruby_expression_reference_pattern, + int value: @ruby_underscore_expression ref +); + +ruby_find_pattern_class( + unique int ruby_find_pattern: @ruby_find_pattern ref, + unique int class: @ruby_underscore_pattern_constant ref +); + +@ruby_find_pattern_child_type = @ruby_splat_parameter | @ruby_underscore_pattern_expr + +#keyset[ruby_find_pattern, index] +ruby_find_pattern_child( + int ruby_find_pattern: @ruby_find_pattern ref, + int index: int ref, + unique int child: @ruby_find_pattern_child_type ref +); + +ruby_find_pattern_def( + unique int id: @ruby_find_pattern +); + +@ruby_for_pattern_type = @ruby_left_assignment_list | @ruby_underscore_lhs + +ruby_for_def( + unique int id: @ruby_for, + int body: @ruby_do ref, + int pattern: @ruby_for_pattern_type ref, + int value: @ruby_in ref +); + +@ruby_hash_child_type = @ruby_hash_splat_argument | @ruby_pair + +#keyset[ruby_hash, index] +ruby_hash_child( + int ruby_hash: @ruby_hash ref, + int index: int ref, + unique int child: @ruby_hash_child_type ref +); + +ruby_hash_def( + unique int id: @ruby_hash +); + +ruby_hash_pattern_class( + unique int ruby_hash_pattern: @ruby_hash_pattern ref, + unique int class: @ruby_underscore_pattern_constant ref +); + +@ruby_hash_pattern_child_type = @ruby_hash_splat_parameter | @ruby_keyword_pattern | @ruby_token_hash_splat_nil + +#keyset[ruby_hash_pattern, index] +ruby_hash_pattern_child( + int ruby_hash_pattern: @ruby_hash_pattern ref, + int index: int ref, + unique int child: @ruby_hash_pattern_child_type ref +); + +ruby_hash_pattern_def( + unique int id: @ruby_hash_pattern +); + +ruby_hash_splat_argument_child( + unique int ruby_hash_splat_argument: @ruby_hash_splat_argument ref, + unique int child: @ruby_underscore_arg ref +); + +ruby_hash_splat_argument_def( + unique int id: @ruby_hash_splat_argument +); + +ruby_hash_splat_parameter_name( + unique int ruby_hash_splat_parameter: @ruby_hash_splat_parameter ref, + unique int name: @ruby_token_identifier ref +); + +ruby_hash_splat_parameter_def( + unique int id: @ruby_hash_splat_parameter +); + +@ruby_heredoc_body_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_heredoc_content | @ruby_token_heredoc_end + +#keyset[ruby_heredoc_body, index] +ruby_heredoc_body_child( + int ruby_heredoc_body: @ruby_heredoc_body ref, + int index: int ref, + unique int child: @ruby_heredoc_body_child_type ref +); + +ruby_heredoc_body_def( + unique int id: @ruby_heredoc_body +); + +@ruby_if_alternative_type = @ruby_else | @ruby_elsif + +ruby_if_alternative( + unique int ruby_if: @ruby_if ref, + unique int alternative: @ruby_if_alternative_type ref +); + +ruby_if_consequence( + unique int ruby_if: @ruby_if ref, + unique int consequence: @ruby_then ref +); + +ruby_if_def( + unique int id: @ruby_if, + int condition: @ruby_underscore_statement ref +); + +ruby_if_guard_def( + unique int id: @ruby_if_guard, + int condition: @ruby_underscore_expression ref +); + +ruby_if_modifier_def( + unique int id: @ruby_if_modifier, + int body: @ruby_underscore_statement ref, + int condition: @ruby_underscore_expression ref +); + +ruby_in_def( + unique int id: @ruby_in, + int child: @ruby_underscore_arg ref +); + +ruby_in_clause_body( + unique int ruby_in_clause: @ruby_in_clause ref, + unique int body: @ruby_then ref +); + +@ruby_in_clause_guard_type = @ruby_if_guard | @ruby_unless_guard + +ruby_in_clause_guard( + unique int ruby_in_clause: @ruby_in_clause ref, + unique int guard: @ruby_in_clause_guard_type ref +); + +ruby_in_clause_def( + unique int id: @ruby_in_clause, + int pattern: @ruby_underscore_pattern_top_expr_body ref +); + +@ruby_interpolation_child_type = @ruby_token_empty_statement | @ruby_underscore_nonlocal_variable | @ruby_underscore_statement + +#keyset[ruby_interpolation, index] +ruby_interpolation_child( + int ruby_interpolation: @ruby_interpolation ref, + int index: int ref, + unique int child: @ruby_interpolation_child_type ref +); + +ruby_interpolation_def( + unique int id: @ruby_interpolation +); + +ruby_keyword_parameter_value( + unique int ruby_keyword_parameter: @ruby_keyword_parameter ref, + unique int value: @ruby_underscore_arg ref +); + +ruby_keyword_parameter_def( + unique int id: @ruby_keyword_parameter, + int name: @ruby_token_identifier ref +); + +@ruby_keyword_pattern_key_type = @ruby_string__ | @ruby_token_hash_key_symbol + +ruby_keyword_pattern_value( + unique int ruby_keyword_pattern: @ruby_keyword_pattern ref, + unique int value: @ruby_underscore_pattern_expr ref +); + +ruby_keyword_pattern_def( + unique int id: @ruby_keyword_pattern, + int key__: @ruby_keyword_pattern_key_type ref +); + +@ruby_lambda_body_type = @ruby_block | @ruby_do_block + +ruby_lambda_parameters( + unique int ruby_lambda: @ruby_lambda ref, + unique int parameters: @ruby_lambda_parameters ref +); + +ruby_lambda_def( + unique int id: @ruby_lambda, + int body: @ruby_lambda_body_type ref +); + +@ruby_lambda_parameters_child_type = @ruby_block_parameter | @ruby_destructured_parameter | @ruby_hash_splat_parameter | @ruby_keyword_parameter | @ruby_optional_parameter | @ruby_splat_parameter | @ruby_token_forward_parameter | @ruby_token_hash_splat_nil | @ruby_token_identifier + +#keyset[ruby_lambda_parameters, index] +ruby_lambda_parameters_child( + int ruby_lambda_parameters: @ruby_lambda_parameters ref, + int index: int ref, + unique int child: @ruby_lambda_parameters_child_type ref +); + +ruby_lambda_parameters_def( + unique int id: @ruby_lambda_parameters +); + +@ruby_left_assignment_list_child_type = @ruby_destructured_left_assignment | @ruby_rest_assignment | @ruby_underscore_lhs + +#keyset[ruby_left_assignment_list, index] +ruby_left_assignment_list_child( + int ruby_left_assignment_list: @ruby_left_assignment_list ref, + int index: int ref, + unique int child: @ruby_left_assignment_list_child_type ref +); + +ruby_left_assignment_list_def( + unique int id: @ruby_left_assignment_list +); + +ruby_match_pattern_def( + unique int id: @ruby_match_pattern, + int pattern: @ruby_underscore_pattern_top_expr_body ref, + int value: @ruby_underscore_arg ref +); + +@ruby_method_body_type = @ruby_body_statement | @ruby_rescue_modifier | @ruby_underscore_arg + +ruby_method_body( + unique int ruby_method: @ruby_method ref, + unique int body: @ruby_method_body_type ref +); + +ruby_method_parameters( + unique int ruby_method: @ruby_method ref, + unique int parameters: @ruby_method_parameters ref +); + +ruby_method_def( + unique int id: @ruby_method, + int name: @ruby_underscore_method_name ref +); + +@ruby_method_parameters_child_type = @ruby_block_parameter | @ruby_destructured_parameter | @ruby_hash_splat_parameter | @ruby_keyword_parameter | @ruby_optional_parameter | @ruby_splat_parameter | @ruby_token_forward_parameter | @ruby_token_hash_splat_nil | @ruby_token_identifier + +#keyset[ruby_method_parameters, index] +ruby_method_parameters_child( + int ruby_method_parameters: @ruby_method_parameters ref, + int index: int ref, + unique int child: @ruby_method_parameters_child_type ref +); + +ruby_method_parameters_def( + unique int id: @ruby_method_parameters +); + +ruby_module_body( + unique int ruby_module: @ruby_module ref, + unique int body: @ruby_body_statement ref +); + +@ruby_module_name_type = @ruby_scope_resolution | @ruby_token_constant + +ruby_module_def( + unique int id: @ruby_module, + int name: @ruby_module_name_type ref +); + +ruby_next_child( + unique int ruby_next: @ruby_next ref, + unique int child: @ruby_argument_list ref +); + +ruby_next_def( + unique int id: @ruby_next +); + +case @ruby_operator_assignment.operator of + 0 = @ruby_operator_assignment_percentequal +| 1 = @ruby_operator_assignment_ampersandampersandequal +| 2 = @ruby_operator_assignment_ampersandequal +| 3 = @ruby_operator_assignment_starstarequal +| 4 = @ruby_operator_assignment_starequal +| 5 = @ruby_operator_assignment_plusequal +| 6 = @ruby_operator_assignment_minusequal +| 7 = @ruby_operator_assignment_slashequal +| 8 = @ruby_operator_assignment_langlelangleequal +| 9 = @ruby_operator_assignment_ranglerangleequal +| 10 = @ruby_operator_assignment_caretequal +| 11 = @ruby_operator_assignment_pipeequal +| 12 = @ruby_operator_assignment_pipepipeequal +; + + +@ruby_operator_assignment_right_type = @ruby_rescue_modifier | @ruby_underscore_expression + +ruby_operator_assignment_def( + unique int id: @ruby_operator_assignment, + int left: @ruby_underscore_lhs ref, + int operator: int ref, + int right: @ruby_operator_assignment_right_type ref +); + +ruby_optional_parameter_def( + unique int id: @ruby_optional_parameter, + int name: @ruby_token_identifier ref, + int value: @ruby_underscore_arg ref +); + +@ruby_pair_key_type = @ruby_string__ | @ruby_token_hash_key_symbol | @ruby_underscore_arg + +ruby_pair_value( + unique int ruby_pair: @ruby_pair ref, + unique int value: @ruby_underscore_arg ref +); + +ruby_pair_def( + unique int id: @ruby_pair, + int key__: @ruby_pair_key_type ref +); + +ruby_parenthesized_pattern_def( + unique int id: @ruby_parenthesized_pattern, + int child: @ruby_underscore_pattern_expr ref +); + +@ruby_parenthesized_statements_child_type = @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_parenthesized_statements, index] +ruby_parenthesized_statements_child( + int ruby_parenthesized_statements: @ruby_parenthesized_statements ref, + int index: int ref, + unique int child: @ruby_parenthesized_statements_child_type ref +); + +ruby_parenthesized_statements_def( + unique int id: @ruby_parenthesized_statements +); + +@ruby_pattern_child_type = @ruby_splat_argument | @ruby_underscore_arg + +ruby_pattern_def( + unique int id: @ruby_pattern, + int child: @ruby_pattern_child_type ref +); + +@ruby_program_child_type = @ruby_token_empty_statement | @ruby_token_uninterpreted | @ruby_underscore_statement + +#keyset[ruby_program, index] +ruby_program_child( + int ruby_program: @ruby_program ref, + int index: int ref, + unique int child: @ruby_program_child_type ref +); + +ruby_program_def( + unique int id: @ruby_program +); + +@ruby_range_begin_type = @ruby_underscore_arg | @ruby_underscore_pattern_primitive + +ruby_range_begin( + unique int ruby_range: @ruby_range ref, + unique int begin: @ruby_range_begin_type ref +); + +@ruby_range_end_type = @ruby_underscore_arg | @ruby_underscore_pattern_primitive + +ruby_range_end( + unique int ruby_range: @ruby_range ref, + unique int end: @ruby_range_end_type ref +); + +case @ruby_range.operator of + 0 = @ruby_range_dotdot +| 1 = @ruby_range_dotdotdot +; + + +ruby_range_def( + unique int id: @ruby_range, + int operator: int ref +); + +@ruby_rational_child_type = @ruby_token_float | @ruby_token_integer + +ruby_rational_def( + unique int id: @ruby_rational, + int child: @ruby_rational_child_type ref +); + +ruby_redo_child( + unique int ruby_redo: @ruby_redo ref, + unique int child: @ruby_argument_list ref +); + +ruby_redo_def( + unique int id: @ruby_redo +); + +@ruby_regex_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content + +#keyset[ruby_regex, index] +ruby_regex_child( + int ruby_regex: @ruby_regex ref, + int index: int ref, + unique int child: @ruby_regex_child_type ref +); + +ruby_regex_def( + unique int id: @ruby_regex +); + +ruby_rescue_body( + unique int ruby_rescue: @ruby_rescue ref, + unique int body: @ruby_then ref +); + +ruby_rescue_exceptions( + unique int ruby_rescue: @ruby_rescue ref, + unique int exceptions: @ruby_exceptions ref +); + +ruby_rescue_variable( + unique int ruby_rescue: @ruby_rescue ref, + unique int variable: @ruby_exception_variable ref +); + +ruby_rescue_def( + unique int id: @ruby_rescue +); + +@ruby_rescue_modifier_body_type = @ruby_underscore_arg | @ruby_underscore_statement + +ruby_rescue_modifier_def( + unique int id: @ruby_rescue_modifier, + int body: @ruby_rescue_modifier_body_type ref, + int handler: @ruby_underscore_expression ref +); + +ruby_rest_assignment_child( + unique int ruby_rest_assignment: @ruby_rest_assignment ref, + unique int child: @ruby_underscore_lhs ref +); + +ruby_rest_assignment_def( + unique int id: @ruby_rest_assignment +); + +ruby_retry_child( + unique int ruby_retry: @ruby_retry ref, + unique int child: @ruby_argument_list ref +); + +ruby_retry_def( + unique int id: @ruby_retry +); + +ruby_return_child( + unique int ruby_return: @ruby_return ref, + unique int child: @ruby_argument_list ref +); + +ruby_return_def( + unique int id: @ruby_return +); + +@ruby_right_assignment_list_child_type = @ruby_splat_argument | @ruby_underscore_arg + +#keyset[ruby_right_assignment_list, index] +ruby_right_assignment_list_child( + int ruby_right_assignment_list: @ruby_right_assignment_list ref, + int index: int ref, + unique int child: @ruby_right_assignment_list_child_type ref +); + +ruby_right_assignment_list_def( + unique int id: @ruby_right_assignment_list +); + +@ruby_scope_resolution_scope_type = @ruby_underscore_pattern_constant | @ruby_underscore_primary + +ruby_scope_resolution_scope( + unique int ruby_scope_resolution: @ruby_scope_resolution ref, + unique int scope: @ruby_scope_resolution_scope_type ref +); + +ruby_scope_resolution_def( + unique int id: @ruby_scope_resolution, + int name: @ruby_token_constant ref +); + +ruby_setter_def( + unique int id: @ruby_setter, + int name: @ruby_token_identifier ref +); + +ruby_singleton_class_body( + unique int ruby_singleton_class: @ruby_singleton_class ref, + unique int body: @ruby_body_statement ref +); + +ruby_singleton_class_def( + unique int id: @ruby_singleton_class, + int value: @ruby_underscore_arg ref +); + +@ruby_singleton_method_body_type = @ruby_body_statement | @ruby_rescue_modifier | @ruby_underscore_arg + +ruby_singleton_method_body( + unique int ruby_singleton_method: @ruby_singleton_method ref, + unique int body: @ruby_singleton_method_body_type ref +); + +@ruby_singleton_method_object_type = @ruby_underscore_arg | @ruby_underscore_variable + +ruby_singleton_method_parameters( + unique int ruby_singleton_method: @ruby_singleton_method ref, + unique int parameters: @ruby_method_parameters ref +); + +ruby_singleton_method_def( + unique int id: @ruby_singleton_method, + int name: @ruby_underscore_method_name ref, + int object: @ruby_singleton_method_object_type ref +); + +ruby_splat_argument_child( + unique int ruby_splat_argument: @ruby_splat_argument ref, + unique int child: @ruby_underscore_arg ref +); + +ruby_splat_argument_def( + unique int id: @ruby_splat_argument +); + +ruby_splat_parameter_name( + unique int ruby_splat_parameter: @ruby_splat_parameter ref, + unique int name: @ruby_token_identifier ref +); + +ruby_splat_parameter_def( + unique int id: @ruby_splat_parameter +); + +@ruby_string_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content + +#keyset[ruby_string__, index] +ruby_string_child( + int ruby_string__: @ruby_string__ ref, + int index: int ref, + unique int child: @ruby_string_child_type ref +); + +ruby_string_def( + unique int id: @ruby_string__ +); + +#keyset[ruby_string_array, index] +ruby_string_array_child( + int ruby_string_array: @ruby_string_array ref, + int index: int ref, + unique int child: @ruby_bare_string ref +); + +ruby_string_array_def( + unique int id: @ruby_string_array +); + +@ruby_subshell_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content + +#keyset[ruby_subshell, index] +ruby_subshell_child( + int ruby_subshell: @ruby_subshell ref, + int index: int ref, + unique int child: @ruby_subshell_child_type ref +); + +ruby_subshell_def( + unique int id: @ruby_subshell +); + +ruby_superclass_def( + unique int id: @ruby_superclass, + int child: @ruby_underscore_expression ref +); + +#keyset[ruby_symbol_array, index] +ruby_symbol_array_child( + int ruby_symbol_array: @ruby_symbol_array ref, + int index: int ref, + unique int child: @ruby_bare_symbol ref +); + +ruby_symbol_array_def( + unique int id: @ruby_symbol_array +); + +ruby_test_pattern_def( + unique int id: @ruby_test_pattern, + int pattern: @ruby_underscore_pattern_top_expr_body ref, + int value: @ruby_underscore_arg ref +); + +@ruby_then_child_type = @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_then, index] +ruby_then_child( + int ruby_then: @ruby_then ref, + int index: int ref, + unique int child: @ruby_then_child_type ref +); + +ruby_then_def( + unique int id: @ruby_then +); + +@ruby_unary_operand_type = @ruby_parenthesized_statements | @ruby_underscore_expression | @ruby_underscore_simple_numeric + +case @ruby_unary.operator of + 0 = @ruby_unary_bang +| 1 = @ruby_unary_plus +| 2 = @ruby_unary_minus +| 3 = @ruby_unary_definedquestion +| 4 = @ruby_unary_not +| 5 = @ruby_unary_tilde +; + + +ruby_unary_def( + unique int id: @ruby_unary, + int operand: @ruby_unary_operand_type ref, + int operator: int ref +); + +#keyset[ruby_undef, index] +ruby_undef_child( + int ruby_undef: @ruby_undef ref, + int index: int ref, + unique int child: @ruby_underscore_method_name ref +); + +ruby_undef_def( + unique int id: @ruby_undef +); + +@ruby_unless_alternative_type = @ruby_else | @ruby_elsif + +ruby_unless_alternative( + unique int ruby_unless: @ruby_unless ref, + unique int alternative: @ruby_unless_alternative_type ref +); + +ruby_unless_consequence( + unique int ruby_unless: @ruby_unless ref, + unique int consequence: @ruby_then ref +); + +ruby_unless_def( + unique int id: @ruby_unless, + int condition: @ruby_underscore_statement ref +); + +ruby_unless_guard_def( + unique int id: @ruby_unless_guard, + int condition: @ruby_underscore_expression ref +); + +ruby_unless_modifier_def( + unique int id: @ruby_unless_modifier, + int body: @ruby_underscore_statement ref, + int condition: @ruby_underscore_expression ref +); + +ruby_until_def( + unique int id: @ruby_until, + int body: @ruby_do ref, + int condition: @ruby_underscore_statement ref +); + +ruby_until_modifier_def( + unique int id: @ruby_until_modifier, + int body: @ruby_underscore_statement ref, + int condition: @ruby_underscore_expression ref +); + +@ruby_variable_reference_pattern_name_type = @ruby_token_identifier | @ruby_underscore_nonlocal_variable + +ruby_variable_reference_pattern_def( + unique int id: @ruby_variable_reference_pattern, + int name: @ruby_variable_reference_pattern_name_type ref +); + +ruby_when_body( + unique int ruby_when: @ruby_when ref, + unique int body: @ruby_then ref +); + +#keyset[ruby_when, index] +ruby_when_pattern( + int ruby_when: @ruby_when ref, + int index: int ref, + unique int pattern: @ruby_pattern ref +); + +ruby_when_def( + unique int id: @ruby_when +); + +ruby_while_def( + unique int id: @ruby_while, + int body: @ruby_do ref, + int condition: @ruby_underscore_statement ref +); + +ruby_while_modifier_def( + unique int id: @ruby_while_modifier, + int body: @ruby_underscore_statement ref, + int condition: @ruby_underscore_expression ref +); + +ruby_yield_child( + unique int ruby_yield: @ruby_yield ref, + unique int child: @ruby_argument_list ref +); + +ruby_yield_def( + unique int id: @ruby_yield +); + +ruby_tokeninfo( + unique int id: @ruby_token, + int kind: int ref, + string value: string ref +); + +case @ruby_token.kind of + 0 = @ruby_reserved_word +| 1 = @ruby_token_character +| 2 = @ruby_token_class_variable +| 3 = @ruby_token_comment +| 4 = @ruby_token_constant +| 5 = @ruby_token_empty_statement +| 6 = @ruby_token_encoding +| 7 = @ruby_token_escape_sequence +| 8 = @ruby_token_false +| 9 = @ruby_token_file +| 10 = @ruby_token_float +| 11 = @ruby_token_forward_argument +| 12 = @ruby_token_forward_parameter +| 13 = @ruby_token_global_variable +| 14 = @ruby_token_hash_key_symbol +| 15 = @ruby_token_hash_splat_nil +| 16 = @ruby_token_heredoc_beginning +| 17 = @ruby_token_heredoc_content +| 18 = @ruby_token_heredoc_end +| 19 = @ruby_token_identifier +| 20 = @ruby_token_instance_variable +| 21 = @ruby_token_integer +| 22 = @ruby_token_line +| 23 = @ruby_token_nil +| 24 = @ruby_token_operator +| 25 = @ruby_token_self +| 26 = @ruby_token_simple_symbol +| 27 = @ruby_token_string_content +| 28 = @ruby_token_super +| 29 = @ruby_token_true +| 30 = @ruby_token_uninterpreted +; + + +@ruby_ast_node = @ruby_alias | @ruby_alternative_pattern | @ruby_argument_list | @ruby_array | @ruby_array_pattern | @ruby_as_pattern | @ruby_assignment | @ruby_bare_string | @ruby_bare_symbol | @ruby_begin | @ruby_begin_block | @ruby_binary | @ruby_block | @ruby_block_argument | @ruby_block_body | @ruby_block_parameter | @ruby_block_parameters | @ruby_body_statement | @ruby_break | @ruby_call | @ruby_case__ | @ruby_case_match | @ruby_chained_string | @ruby_class | @ruby_complex | @ruby_conditional | @ruby_delimited_symbol | @ruby_destructured_left_assignment | @ruby_destructured_parameter | @ruby_do | @ruby_do_block | @ruby_element_reference | @ruby_else | @ruby_elsif | @ruby_end_block | @ruby_ensure | @ruby_exception_variable | @ruby_exceptions | @ruby_expression_reference_pattern | @ruby_find_pattern | @ruby_for | @ruby_hash | @ruby_hash_pattern | @ruby_hash_splat_argument | @ruby_hash_splat_parameter | @ruby_heredoc_body | @ruby_if | @ruby_if_guard | @ruby_if_modifier | @ruby_in | @ruby_in_clause | @ruby_interpolation | @ruby_keyword_parameter | @ruby_keyword_pattern | @ruby_lambda | @ruby_lambda_parameters | @ruby_left_assignment_list | @ruby_match_pattern | @ruby_method | @ruby_method_parameters | @ruby_module | @ruby_next | @ruby_operator_assignment | @ruby_optional_parameter | @ruby_pair | @ruby_parenthesized_pattern | @ruby_parenthesized_statements | @ruby_pattern | @ruby_program | @ruby_range | @ruby_rational | @ruby_redo | @ruby_regex | @ruby_rescue | @ruby_rescue_modifier | @ruby_rest_assignment | @ruby_retry | @ruby_return | @ruby_right_assignment_list | @ruby_scope_resolution | @ruby_setter | @ruby_singleton_class | @ruby_singleton_method | @ruby_splat_argument | @ruby_splat_parameter | @ruby_string__ | @ruby_string_array | @ruby_subshell | @ruby_superclass | @ruby_symbol_array | @ruby_test_pattern | @ruby_then | @ruby_token | @ruby_unary | @ruby_undef | @ruby_unless | @ruby_unless_guard | @ruby_unless_modifier | @ruby_until | @ruby_until_modifier | @ruby_variable_reference_pattern | @ruby_when | @ruby_while | @ruby_while_modifier | @ruby_yield + +@ruby_ast_node_parent = @file | @ruby_ast_node + +#keyset[parent, parent_index] +ruby_ast_node_info( + unique int node: @ruby_ast_node ref, + int parent: @ruby_ast_node_parent ref, + int parent_index: int ref, + int loc: @location_default ref +); + +/*- Erb dbscheme -*/ +erb_comment_directive_child( + unique int erb_comment_directive: @erb_comment_directive ref, + unique int child: @erb_token_comment ref +); + +erb_comment_directive_def( + unique int id: @erb_comment_directive +); + +erb_directive_child( + unique int erb_directive: @erb_directive ref, + unique int child: @erb_token_code ref +); + +erb_directive_def( + unique int id: @erb_directive +); + +erb_graphql_directive_child( + unique int erb_graphql_directive: @erb_graphql_directive ref, + unique int child: @erb_token_code ref +); + +erb_graphql_directive_def( + unique int id: @erb_graphql_directive +); + +erb_output_directive_child( + unique int erb_output_directive: @erb_output_directive ref, + unique int child: @erb_token_code ref +); + +erb_output_directive_def( + unique int id: @erb_output_directive +); + +@erb_template_child_type = @erb_comment_directive | @erb_directive | @erb_graphql_directive | @erb_output_directive | @erb_token_content + +#keyset[erb_template, index] +erb_template_child( + int erb_template: @erb_template ref, + int index: int ref, + unique int child: @erb_template_child_type ref +); + +erb_template_def( + unique int id: @erb_template +); + +erb_tokeninfo( + unique int id: @erb_token, + int kind: int ref, + string value: string ref +); + +case @erb_token.kind of + 0 = @erb_reserved_word +| 1 = @erb_token_code +| 2 = @erb_token_comment +| 3 = @erb_token_content +; + + +@erb_ast_node = @erb_comment_directive | @erb_directive | @erb_graphql_directive | @erb_output_directive | @erb_template | @erb_token + +@erb_ast_node_parent = @erb_ast_node | @file + +#keyset[parent, parent_index] +erb_ast_node_info( + unique int node: @erb_ast_node ref, + int parent: @erb_ast_node_parent ref, + int parent_index: int ref, + int loc: @location_default ref +); + diff --git a/ruby/downgrades/440de75c71e9206ce16eed49a22c76e7889b5fc3/ruby_ast_node_info.ql b/ruby/downgrades/440de75c71e9206ce16eed49a22c76e7889b5fc3/ruby_ast_node_info.ql new file mode 100644 index 00000000000..06551527942 --- /dev/null +++ b/ruby/downgrades/440de75c71e9206ce16eed49a22c76e7889b5fc3/ruby_ast_node_info.ql @@ -0,0 +1,44 @@ +class TAstNodeParent = @file or @ruby_ast_node; + +abstract class AstNodeParent extends TAstNodeParent { + string toString() { none() } +} + +class AstNode extends AstNodeParent, @ruby_ast_node { } + +class File extends AstNodeParent, @file { } + +class Location extends @location_default { + string toString() { none() } +} + +pragma[nomagic] +predicate hasFileParent( + AstNode n, File f, int startline, int startcolumn, int endline, int endcolumn +) { + exists(Location loc | + not ruby_ast_node_parent(n, _, _) and + ruby_ast_node_location(n, loc) and + locations_default(loc, f, startline, startcolumn, endline, endcolumn) + ) +} + +pragma[nomagic] +predicate hasFileParent(AstNode n, File f, int i) { + n = + rank[i + 1](AstNode n0, int startline, int startcolumn, int endline, int endcolumn | + hasFileParent(n0, f, startline, startcolumn, endline, endcolumn) + | + n0 order by startline, startcolumn, endline, endcolumn + ) +} + +from AstNode n, AstNodeParent parent, int i, Location location +where + ruby_ast_node_location(n, location) and + ( + ruby_ast_node_parent(n, parent, i) + or + hasFileParent(n, parent, i) + ) +select n, parent, i, location diff --git a/ruby/downgrades/440de75c71e9206ce16eed49a22c76e7889b5fc3/upgrade.properties b/ruby/downgrades/440de75c71e9206ce16eed49a22c76e7889b5fc3/upgrade.properties new file mode 100644 index 00000000000..b75ccdefc20 --- /dev/null +++ b/ruby/downgrades/440de75c71e9206ce16eed49a22c76e7889b5fc3/upgrade.properties @@ -0,0 +1,8 @@ +description: Merge `ruby_ast_node_location` and `ruby_ast_node_parent` into `ruby_ast_node_info` (and same for `erb`) +compatibility: backwards +erb_ast_node_info.rel: run erb_ast_node_info.qlo +erb_ast_node_location.rel: delete +erb_ast_node_parent.rel: delete +ruby_ast_node_info.rel: run ruby_ast_node_info.qlo +ruby_ast_node_location.rel: delete +ruby_ast_node_parent.rel: delete diff --git a/ruby/extractor/Cargo.lock b/ruby/extractor/Cargo.lock index d5e8f132f24..750d630402b 100644 Binary files a/ruby/extractor/Cargo.lock and b/ruby/extractor/Cargo.lock differ diff --git a/ruby/extractor/Cargo.toml b/ruby/extractor/Cargo.toml index 8bb8cd96dce..87a9f9f7a80 100644 --- a/ruby/extractor/Cargo.toml +++ b/ruby/extractor/Cargo.toml @@ -34,4 +34,4 @@ lazy_static = "1.4.0" # of lock-file update time, but `rules_rust` pins generates a bazel rule that unconditionally downloads `main`, which # breaks build hermeticity. So, rev-pinning it is. # See also https://github.com/bazelbuild/rules_rust/issues/2502. -codeql-extractor = { git = "https://github.com/github/codeql.git", rev = "514a92d5bd1e24e4b7367d64430762ffd1ffbe7f" } +codeql-extractor = { git = "https://github.com/github/codeql.git", rev = "cee6f003fd58c64916c629f7d8b27b870d6f78c5" } diff --git a/ruby/extractor/cargo-bazel-lock.json b/ruby/extractor/cargo-bazel-lock.json index 76a63d4376d..15b86880665 100644 --- a/ruby/extractor/cargo-bazel-lock.json +++ b/ruby/extractor/cargo-bazel-lock.json @@ -1,5 +1,5 @@ { - "checksum": "1c460a0aa044e422d51b182416888e0a45d131996cc1821a0fedbab3cd2b07bf", + "checksum": "76aa7a86db3d70a3b257062c5c6b87da62e07258e6f16a487d8c42aa561c0224", "crates": { "adler 1.0.2": { "name": "adler", @@ -7,7 +7,7 @@ "package_url": "https://github.com/jonas-schievink/adler.git", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/adler/1.0.2/download", + "url": "https://static.crates.io/crates/adler/1.0.2/download", "sha256": "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" } }, @@ -44,7 +44,7 @@ "package_url": "https://github.com/BurntSushi/aho-corasick", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/aho-corasick/0.7.20/download", + "url": "https://static.crates.io/crates/aho-corasick/0.7.20/download", "sha256": "cc936419f96fa211c1b9166887b38e5e40b19958e5b895be7c1f93adec7071ac" } }, @@ -96,7 +96,7 @@ "package_url": "https://github.com/BurntSushi/aho-corasick", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/aho-corasick/1.1.2/download", + "url": "https://static.crates.io/crates/aho-corasick/1.1.2/download", "sha256": "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0" } }, @@ -149,7 +149,7 @@ "package_url": "https://github.com/nical/android_system_properties", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/android_system_properties/0.1.5/download", + "url": "https://static.crates.io/crates/android_system_properties/0.1.5/download", "sha256": "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" } }, @@ -194,7 +194,7 @@ "package_url": "https://github.com/rust-cli/anstyle.git", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/anstream/0.2.6/download", + "url": "https://static.crates.io/crates/anstream/0.2.6/download", "sha256": "342258dd14006105c2b75ab1bd7543a03bdf0cfc94383303ac212a04939dff6f" } }, @@ -274,7 +274,7 @@ "package_url": "https://github.com/rust-cli/anstyle.git", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/anstyle/0.3.5/download", + "url": "https://static.crates.io/crates/anstyle/0.3.5/download", "sha256": "23ea9e81bd02e310c216d080f6223c179012256e5151c41db88d12c88a1684d2" } }, @@ -317,7 +317,7 @@ "package_url": "https://github.com/rust-cli/anstyle.git", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/anstyle-parse/0.1.1/download", + "url": "https://static.crates.io/crates/anstyle-parse/0.1.1/download", "sha256": "a7d1bb534e9efed14f3e5f44e7dd1a4f709384023a4165199a4241e18dff0116" } }, @@ -369,7 +369,7 @@ "package_url": "https://github.com/rust-cli/anstyle.git", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/anstyle-wincon/0.2.0/download", + "url": "https://static.crates.io/crates/anstyle-wincon/0.2.0/download", "sha256": "c3127af6145b149f3287bb9a0d10ad9c5692dba8c53ad48285e5bec4063834fa" } }, @@ -421,7 +421,7 @@ "package_url": "https://github.com/cuviper/autocfg", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/autocfg/1.1.0/download", + "url": "https://static.crates.io/crates/autocfg/1.1.0/download", "sha256": "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" } }, @@ -457,7 +457,7 @@ "package_url": "https://github.com/bitflags/bitflags", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/bitflags/1.3.2/download", + "url": "https://static.crates.io/crates/bitflags/1.3.2/download", "sha256": "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" } }, @@ -499,7 +499,7 @@ "package_url": "https://github.com/BurntSushi/bstr", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/bstr/1.9.0/download", + "url": "https://static.crates.io/crates/bstr/1.9.0/download", "sha256": "c48f0051a4b4c5e0b6d365cd04af53aeaa209e3cc15ec2cdb69e73cc87fbd0dc" } }, @@ -551,7 +551,7 @@ "package_url": "https://github.com/fitzgen/bumpalo", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/bumpalo/3.12.0/download", + "url": "https://static.crates.io/crates/bumpalo/3.12.0/download", "sha256": "0d261e256854913907f67ed06efbc3338dfe6179796deefc1ff763fc1aee5535" } }, @@ -593,7 +593,7 @@ "package_url": "https://github.com/rust-lang/cc-rs", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/cc/1.0.79/download", + "url": "https://static.crates.io/crates/cc/1.0.79/download", "sha256": "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f" } }, @@ -629,7 +629,7 @@ "package_url": "https://github.com/alexcrichton/cfg-if", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/cfg-if/1.0.0/download", + "url": "https://static.crates.io/crates/cfg-if/1.0.0/download", "sha256": "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" } }, @@ -665,7 +665,7 @@ "package_url": "https://github.com/chronotope/chrono", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/chrono/0.4.24/download", + "url": "https://static.crates.io/crates/chrono/0.4.24/download", "sha256": "4e3c5919066adf22df73762e50cffcde3a758f2a848b113b586d1f86728b673b" } }, @@ -761,7 +761,7 @@ "package_url": "https://github.com/clap-rs/clap", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/clap/4.2.1/download", + "url": "https://static.crates.io/crates/clap/4.2.1/download", "sha256": "046ae530c528f252094e4a77886ee1374437744b2bff1497aa898bbddbbb29b3" } }, @@ -832,7 +832,7 @@ "package_url": "https://github.com/clap-rs/clap", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/clap_builder/4.2.1/download", + "url": "https://static.crates.io/crates/clap_builder/4.2.1/download", "sha256": "223163f58c9a40c3b0a43e1c4b50a9ce09f007ea2cb1ec258a687945b4b7929f" } }, @@ -904,7 +904,7 @@ "package_url": "https://github.com/clap-rs/clap/tree/master/clap_derive", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/clap_derive/4.2.0/download", + "url": "https://static.crates.io/crates/clap_derive/4.2.0/download", "sha256": "3f9644cd56d6b87dbe899ef8b053e331c0637664e9e21a33dfcdc36093f5c5c4" } }, @@ -967,7 +967,7 @@ "package_url": "https://github.com/clap-rs/clap/tree/master/clap_lex", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/clap_lex/0.4.1/download", + "url": "https://static.crates.io/crates/clap_lex/0.4.1/download", "sha256": "8a2dd5a6fe8c6e3502f568a6353e5273bbb15193ad9a89e457b9970798efbea1" } }, @@ -1005,7 +1005,7 @@ "Git": { "remote": "https://github.com/github/codeql.git", "commitish": { - "Rev": "514a92d5bd1e24e4b7367d64430762ffd1ffbe7f" + "Rev": "cee6f003fd58c64916c629f7d8b27b870d6f78c5" }, "strip_prefix": "shared/tree-sitter-extractor" } @@ -1159,7 +1159,7 @@ "package_url": "https://github.com/brendanzab/codespan", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/codespan-reporting/0.11.1/download", + "url": "https://static.crates.io/crates/codespan-reporting/0.11.1/download", "sha256": "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e" } }, @@ -1207,7 +1207,7 @@ "package_url": "https://github.com/rust-cli/concolor", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/concolor-override/1.0.0/download", + "url": "https://static.crates.io/crates/concolor-override/1.0.0/download", "sha256": "a855d4a1978dc52fb0536a04d384c2c0c1aa273597f08b77c8c4d3b2eec6037f" } }, @@ -1243,7 +1243,7 @@ "package_url": "https://github.com/rust-cli/concolor", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/concolor-query/0.3.3/download", + "url": "https://static.crates.io/crates/concolor-query/0.3.3/download", "sha256": "88d11d52c3d7ca2e6d0040212be9e4dbbcd78b6447f535b6b561f449427944cf" } }, @@ -1290,7 +1290,7 @@ "package_url": "https://github.com/servo/core-foundation-rs", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/core-foundation-sys/0.8.4/download", + "url": "https://static.crates.io/crates/core-foundation-sys/0.8.4/download", "sha256": "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa" } }, @@ -1326,7 +1326,7 @@ "package_url": "https://github.com/srijs/rust-crc32fast", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/crc32fast/1.3.2/download", + "url": "https://static.crates.io/crates/crc32fast/1.3.2/download", "sha256": "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" } }, @@ -1396,7 +1396,7 @@ "package_url": "https://github.com/crossbeam-rs/crossbeam", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/crossbeam-channel/0.5.7/download", + "url": "https://static.crates.io/crates/crossbeam-channel/0.5.7/download", "sha256": "cf2b3e8478797446514c91ef04bafcb59faba183e621ad488df88983cc14128c" } }, @@ -1453,7 +1453,7 @@ "package_url": "https://github.com/crossbeam-rs/crossbeam", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/crossbeam-deque/0.8.3/download", + "url": "https://static.crates.io/crates/crossbeam-deque/0.8.3/download", "sha256": "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef" } }, @@ -1515,7 +1515,7 @@ "package_url": "https://github.com/crossbeam-rs/crossbeam", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/crossbeam-epoch/0.9.14/download", + "url": "https://static.crates.io/crates/crossbeam-epoch/0.9.14/download", "sha256": "46bd5f3f85273295a9d14aedfb86f6aadbff6d8f5295c4a9edb08e819dcf5695" } }, @@ -1606,7 +1606,7 @@ "package_url": "https://github.com/crossbeam-rs/crossbeam", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/crossbeam-utils/0.8.15/download", + "url": "https://static.crates.io/crates/crossbeam-utils/0.8.15/download", "sha256": "3c063cd8cc95f5c377ed0d4b49a4b21f632396ff690e8470c29b3359b346984b" } }, @@ -1676,7 +1676,7 @@ "package_url": "https://github.com/dtolnay/cxx", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/cxx/1.0.94/download", + "url": "https://static.crates.io/crates/cxx/1.0.94/download", "sha256": "f61f1b6389c3fe1c316bf8a4dccc90a38208354b330925bce1f74a6c4756eb93" } }, @@ -1771,7 +1771,7 @@ "package_url": "https://github.com/dtolnay/cxx", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/cxx-build/1.0.94/download", + "url": "https://static.crates.io/crates/cxx-build/1.0.94/download", "sha256": "12cee708e8962df2aeb38f594aae5d827c022b6460ac71a7a3e2c3c2aae5a07b" } }, @@ -1840,7 +1840,7 @@ "package_url": "https://github.com/dtolnay/cxx", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/cxxbridge-flags/1.0.94/download", + "url": "https://static.crates.io/crates/cxxbridge-flags/1.0.94/download", "sha256": "7944172ae7e4068c533afbb984114a56c46e9ccddda550499caa222902c7f7bb" } }, @@ -1876,7 +1876,7 @@ "package_url": "https://github.com/dtolnay/cxx", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/cxxbridge-macro/1.0.94/download", + "url": "https://static.crates.io/crates/cxxbridge-macro/1.0.94/download", "sha256": "2345488264226bf682893e25de0769f3360aac9957980ec49361b083ddaa5bc5" } }, @@ -1929,7 +1929,7 @@ "package_url": "https://github.com/bluss/either", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/either/1.8.1/download", + "url": "https://static.crates.io/crates/either/1.8.1/download", "sha256": "7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91" } }, @@ -1965,7 +1965,7 @@ "package_url": "https://github.com/lifthrasiir/rust-encoding", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/encoding/0.2.33/download", + "url": "https://static.crates.io/crates/encoding/0.2.33/download", "sha256": "6b0d943856b990d12d3b55b359144ff341533e516d94098b1d3fc1ac666d36ec" } }, @@ -2025,7 +2025,7 @@ "package_url": "https://github.com/lifthrasiir/rust-encoding", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/encoding-index-japanese/1.20141219.5/download", + "url": "https://static.crates.io/crates/encoding-index-japanese/1.20141219.5/download", "sha256": "04e8b2ff42e9a05335dbf8b5c6f7567e5591d0d916ccef4e0b1710d32a0d0c91" } }, @@ -2069,7 +2069,7 @@ "package_url": "https://github.com/lifthrasiir/rust-encoding", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/encoding-index-korean/1.20141219.5/download", + "url": "https://static.crates.io/crates/encoding-index-korean/1.20141219.5/download", "sha256": "4dc33fb8e6bcba213fe2f14275f0963fd16f0a02c878e3095ecfdf5bee529d81" } }, @@ -2113,7 +2113,7 @@ "package_url": "https://github.com/lifthrasiir/rust-encoding", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/encoding-index-simpchinese/1.20141219.5/download", + "url": "https://static.crates.io/crates/encoding-index-simpchinese/1.20141219.5/download", "sha256": "d87a7194909b9118fc707194baa434a4e3b0fb6a5a757c73c3adb07aa25031f7" } }, @@ -2157,7 +2157,7 @@ "package_url": "https://github.com/lifthrasiir/rust-encoding", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/encoding-index-singlebyte/1.20141219.5/download", + "url": "https://static.crates.io/crates/encoding-index-singlebyte/1.20141219.5/download", "sha256": "3351d5acffb224af9ca265f435b859c7c01537c0849754d3db3fdf2bfe2ae84a" } }, @@ -2201,7 +2201,7 @@ "package_url": "https://github.com/lifthrasiir/rust-encoding", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/encoding-index-tradchinese/1.20141219.5/download", + "url": "https://static.crates.io/crates/encoding-index-tradchinese/1.20141219.5/download", "sha256": "fd0e20d5688ce3cab59eb3ef3a2083a5c77bf496cb798dc6fcdb75f323890c18" } }, @@ -2245,7 +2245,7 @@ "package_url": "https://github.com/lifthrasiir/rust-encoding", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/encoding_index_tests/0.1.4/download", + "url": "https://static.crates.io/crates/encoding_index_tests/0.1.4/download", "sha256": "a246d82be1c9d791c5dfde9a2bd045fc3cbba3fa2b11ad558f27d01712f00569" } }, @@ -2280,7 +2280,7 @@ "package_url": "https://github.com/lambda-fairy/rust-errno", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/errno/0.3.0/download", + "url": "https://static.crates.io/crates/errno/0.3.0/download", "sha256": "50d6a0976c999d473fe89ad888d5a284e55366d9dc9038b1ba2aa15128c4afa0" } }, @@ -2351,7 +2351,7 @@ "package_url": "https://github.com/mneumann/errno-dragonfly-rs", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/errno-dragonfly/0.1.2/download", + "url": "https://static.crates.io/crates/errno-dragonfly/0.1.2/download", "sha256": "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf" } }, @@ -2422,7 +2422,7 @@ "package_url": "https://github.com/rust-lang/flate2-rs", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/flate2/1.0.25/download", + "url": "https://static.crates.io/crates/flate2/1.0.25/download", "sha256": "a8a2db397cb1c8772f31494cb8917e48cd1e64f0fa7efac59fbd741a0a8ce841" } }, @@ -2479,7 +2479,7 @@ "package_url": "https://github.com/BurntSushi/ripgrep/tree/master/crates/globset", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/globset/0.4.14/download", + "url": "https://static.crates.io/crates/globset/0.4.14/download", "sha256": "57da3b9b5b85bd66f31093f8c408b90a74431672542466497dcbdfdc02034be1" } }, @@ -2547,7 +2547,7 @@ "package_url": "https://github.com/withoutboats/heck", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/heck/0.4.1/download", + "url": "https://static.crates.io/crates/heck/0.4.1/download", "sha256": "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" } }, @@ -2589,7 +2589,7 @@ "package_url": "https://github.com/hermitcore/rusty-hermit", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/hermit-abi/0.2.6/download", + "url": "https://static.crates.io/crates/hermit-abi/0.2.6/download", "sha256": "ee512640fe35acbfb4bb779db6f0d80704c2cacfa2e39b601ef3e3f47d1ae4c7" } }, @@ -2634,7 +2634,7 @@ "package_url": "https://github.com/hermitcore/rusty-hermit", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/hermit-abi/0.3.1/download", + "url": "https://static.crates.io/crates/hermit-abi/0.3.1/download", "sha256": "fed44880c466736ef9a5c5b5facefb5ed0785676d0c02d612db14e54f0d84286" } }, @@ -2670,7 +2670,7 @@ "package_url": "https://github.com/strawlab/iana-time-zone", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/iana-time-zone/0.1.56/download", + "url": "https://static.crates.io/crates/iana-time-zone/0.1.56/download", "sha256": "0722cd7114b7de04316e7ea5456a0bbb20e4adb46fd27a3697adb812cff0f37c" } }, @@ -2751,7 +2751,7 @@ "package_url": "https://github.com/strawlab/iana-time-zone", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/iana-time-zone-haiku/0.1.1/download", + "url": "https://static.crates.io/crates/iana-time-zone-haiku/0.1.1/download", "sha256": "0703ae284fc167426161c2e3f1da3ea71d94b21bedbcc9494e92b28e334e3dca" } }, @@ -2832,7 +2832,7 @@ "package_url": "https://github.com/sunfishcode/io-lifetimes", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/io-lifetimes/1.0.10/download", + "url": "https://static.crates.io/crates/io-lifetimes/1.0.10/download", "sha256": "9c66c74d2ae7e79a5a8f7ac924adbe38ee42a859c6539ad869eb51f0b52dc220" } }, @@ -2920,7 +2920,7 @@ "package_url": "https://github.com/sunfishcode/is-terminal", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/is-terminal/0.4.6/download", + "url": "https://static.crates.io/crates/is-terminal/0.4.6/download", "sha256": "256017f749ab3117e93acb91063009e1f1bb56d03965b14c2c8df4eb02c524d8" } }, @@ -2983,7 +2983,7 @@ "package_url": "https://github.com/dtolnay/itoa", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/itoa/1.0.6/download", + "url": "https://static.crates.io/crates/itoa/1.0.6/download", "sha256": "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6" } }, @@ -3019,7 +3019,7 @@ "package_url": "https://github.com/rustwasm/wasm-bindgen/tree/master/crates/js-sys", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/js-sys/0.3.61/download", + "url": "https://static.crates.io/crates/js-sys/0.3.61/download", "sha256": "445dde2150c55e483f3d8416706b97ec8e8237c307e5b7b4b8dd15e6af2a0730" } }, @@ -3064,7 +3064,7 @@ "package_url": "https://github.com/rust-lang-nursery/lazy-static.rs", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/lazy_static/1.4.0/download", + "url": "https://static.crates.io/crates/lazy_static/1.4.0/download", "sha256": "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" } }, @@ -3100,7 +3100,7 @@ "package_url": "https://github.com/rust-lang/libc", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/libc/0.2.141/download", + "url": "https://static.crates.io/crates/libc/0.2.141/download", "sha256": "3304a64d199bb964be99741b7a14d26972741915b3649639149b2479bb46f4b5" } }, @@ -3257,7 +3257,7 @@ "package_url": "https://github.com/dtolnay/link-cplusplus", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/link-cplusplus/1.0.8/download", + "url": "https://static.crates.io/crates/link-cplusplus/1.0.8/download", "sha256": "ecd207c9c713c34f95a097a5b029ac2ce6010530c7b49d7fea24d977dede04f5" } }, @@ -3326,7 +3326,7 @@ "package_url": "https://github.com/sunfishcode/linux-raw-sys", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/linux-raw-sys/0.3.1/download", + "url": "https://static.crates.io/crates/linux-raw-sys/0.3.1/download", "sha256": "d59d8c75012853d2e872fb56bc8a2e53718e2cafe1a4c823143141c6d90c322f" } }, @@ -3398,7 +3398,7 @@ "package_url": "https://github.com/rust-lang/log", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/log/0.4.20/download", + "url": "https://static.crates.io/crates/log/0.4.20/download", "sha256": "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" } }, @@ -3440,7 +3440,7 @@ "package_url": "https://github.com/hawkw/matchers", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/matchers/0.1.0/download", + "url": "https://static.crates.io/crates/matchers/0.1.0/download", "sha256": "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" } }, @@ -3484,7 +3484,7 @@ "package_url": "https://github.com/BurntSushi/memchr", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/memchr/2.7.1/download", + "url": "https://static.crates.io/crates/memchr/2.7.1/download", "sha256": "523dc4f511e55ab87b694dc30d0f820d60906ef06413f93d4d7a1385599cc149" } }, @@ -3528,7 +3528,7 @@ "package_url": "https://github.com/Gilnaa/memoffset", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/memoffset/0.8.0/download", + "url": "https://static.crates.io/crates/memoffset/0.8.0/download", "sha256": "d61c719bcfbcf5d62b3a09efa6088de8c54bc0bfcd3ea7ae39fcc186108b8de1" } }, @@ -3601,7 +3601,7 @@ "package_url": "https://github.com/Frommi/miniz_oxide/tree/master/miniz_oxide", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/miniz_oxide/0.6.2/download", + "url": "https://static.crates.io/crates/miniz_oxide/0.6.2/download", "sha256": "b275950c28b37e794e8c55d88aeb5e139d0ce23fdbbeda68f8d7174abdf9e8fa" } }, @@ -3653,7 +3653,7 @@ "package_url": "https://github.com/nushell/nu-ansi-term", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/nu-ansi-term/0.46.0/download", + "url": "https://static.crates.io/crates/nu-ansi-term/0.46.0/download", "sha256": "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" } }, @@ -3704,7 +3704,7 @@ "package_url": "https://github.com/rust-num/num-integer", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/num-integer/0.1.45/download", + "url": "https://static.crates.io/crates/num-integer/0.1.45/download", "sha256": "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" } }, @@ -3776,7 +3776,7 @@ "package_url": "https://github.com/rust-num/num-traits", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/num-traits/0.2.15/download", + "url": "https://static.crates.io/crates/num-traits/0.2.15/download", "sha256": "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" } }, @@ -3844,7 +3844,7 @@ "package_url": "https://github.com/seanmonstar/num_cpus", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/num_cpus/1.15.0/download", + "url": "https://static.crates.io/crates/num_cpus/1.15.0/download", "sha256": "0fac9e2da13b5eb447a6ce3d392f23a29d8694bff781bf03a16cd9ac8697593b" } }, @@ -3897,7 +3897,7 @@ "package_url": "https://github.com/matklad/once_cell", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/once_cell/1.17.1/download", + "url": "https://static.crates.io/crates/once_cell/1.17.1/download", "sha256": "b7e5500299e16ebb147ae15a00a942af264cf3688f47923b8fc2cd5858f23ad3" } }, @@ -3942,7 +3942,7 @@ "package_url": "https://github.com/danaugrs/overload", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/overload/0.1.1/download", + "url": "https://static.crates.io/crates/overload/0.1.1/download", "sha256": "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" } }, @@ -3977,7 +3977,7 @@ "package_url": "https://github.com/taiki-e/pin-project-lite", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/pin-project-lite/0.2.9/download", + "url": "https://static.crates.io/crates/pin-project-lite/0.2.9/download", "sha256": "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116" } }, @@ -4013,7 +4013,7 @@ "package_url": "https://github.com/dtolnay/proc-macro2", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/proc-macro2/1.0.56/download", + "url": "https://static.crates.io/crates/proc-macro2/1.0.56/download", "sha256": "2b63bdb0cd06f1f4dedf69b254734f9b45af66e4a031e42a7480257d9898b435" } }, @@ -4083,7 +4083,7 @@ "package_url": "https://github.com/dtolnay/quote", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/quote/1.0.26/download", + "url": "https://static.crates.io/crates/quote/1.0.26/download", "sha256": "4424af4bf778aae2051a77b60283332f386554255d722233d09fbfc7e30da2fc" } }, @@ -4153,7 +4153,7 @@ "package_url": "https://github.com/rayon-rs/rayon", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/rayon/1.7.0/download", + "url": "https://static.crates.io/crates/rayon/1.7.0/download", "sha256": "1d2df5196e37bcc87abebc0053e20787d73847bb33134a69841207dd0a47f03b" } }, @@ -4202,7 +4202,7 @@ "package_url": "https://github.com/rayon-rs/rayon", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/rayon-core/1.11.0/download", + "url": "https://static.crates.io/crates/rayon-core/1.11.0/download", "sha256": "4b8f95bd6966f5c87776639160a66bd8ab9895d9d4ab01ddba9fc60661aebe8d" } }, @@ -4278,7 +4278,7 @@ "package_url": "https://github.com/rust-lang/regex", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/regex/1.7.3/download", + "url": "https://static.crates.io/crates/regex/1.7.3/download", "sha256": "8b1f693b24f6ac912f4893ef08244d70b6067480d2f1a46e950c9691e6749d1d" } }, @@ -4353,7 +4353,7 @@ "package_url": "https://github.com/BurntSushi/regex-automata", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/regex-automata/0.1.10/download", + "url": "https://static.crates.io/crates/regex-automata/0.1.10/download", "sha256": "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" } }, @@ -4406,7 +4406,7 @@ "package_url": "https://github.com/rust-lang/regex/tree/master/regex-automata", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/regex-automata/0.4.3/download", + "url": "https://static.crates.io/crates/regex-automata/0.4.3/download", "sha256": "5f804c7828047e88b2d32e2d7fe5a105da8ee3264f01902f796c8e067dc2483f" } }, @@ -4478,7 +4478,7 @@ "package_url": "https://github.com/rust-lang/regex", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/regex-syntax/0.6.29/download", + "url": "https://static.crates.io/crates/regex-syntax/0.6.29/download", "sha256": "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" } }, @@ -4528,7 +4528,7 @@ "package_url": "https://github.com/rust-lang/regex/tree/master/regex-syntax", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/regex-syntax/0.8.2/download", + "url": "https://static.crates.io/crates/regex-syntax/0.8.2/download", "sha256": "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f" } }, @@ -4570,7 +4570,7 @@ "package_url": "https://github.com/bytecodealliance/rustix", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/rustix/0.37.7/download", + "url": "https://static.crates.io/crates/rustix/0.37.7/download", "sha256": "2aae838e49b3d63e9274e1c01833cc8139d3fec468c3b84688c628f44b1ae11d" } }, @@ -4682,7 +4682,7 @@ "package_url": "https://github.com/dtolnay/ryu", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/ryu/1.0.13/download", + "url": "https://static.crates.io/crates/ryu/1.0.13/download", "sha256": "f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041" } }, @@ -4718,7 +4718,7 @@ "package_url": "https://github.com/bluss/scopeguard", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/scopeguard/1.1.0/download", + "url": "https://static.crates.io/crates/scopeguard/1.1.0/download", "sha256": "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" } }, @@ -4754,7 +4754,7 @@ "package_url": "https://github.com/dtolnay/scratch", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/scratch/1.0.5/download", + "url": "https://static.crates.io/crates/scratch/1.0.5/download", "sha256": "1792db035ce95be60c3f8853017b3999209281c24e2ba5bc8e59bf97a0c590c1" } }, @@ -4813,7 +4813,7 @@ "package_url": "https://github.com/serde-rs/serde", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/serde/1.0.159/download", + "url": "https://static.crates.io/crates/serde/1.0.159/download", "sha256": "3c04e8343c3daeec41f58990b9d77068df31209f2af111e059e9fe9646693065" } }, @@ -4890,7 +4890,7 @@ "package_url": "https://github.com/serde-rs/serde", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/serde_derive/1.0.159/download", + "url": "https://static.crates.io/crates/serde_derive/1.0.159/download", "sha256": "4c614d17805b093df4b147b51339e7e44bf05ef59fba1e45d83500bcfb4d8585" } }, @@ -4967,7 +4967,7 @@ "package_url": "https://github.com/serde-rs/json", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/serde_json/1.0.95/download", + "url": "https://static.crates.io/crates/serde_json/1.0.95/download", "sha256": "d721eca97ac802aa7777b701877c8004d950fc142651367300d21c1cc0194744" } }, @@ -5045,7 +5045,7 @@ "package_url": "https://github.com/hawkw/sharded-slab", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/sharded-slab/0.1.4/download", + "url": "https://static.crates.io/crates/sharded-slab/0.1.4/download", "sha256": "900fba806f70c630b0a382d0d825e17a0f19fcd059a2ade1ff237bcddf446b31" } }, @@ -5089,7 +5089,7 @@ "package_url": "https://github.com/servo/rust-smallvec", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/smallvec/1.10.0/download", + "url": "https://static.crates.io/crates/smallvec/1.10.0/download", "sha256": "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0" } }, @@ -5125,7 +5125,7 @@ "package_url": "https://github.com/dguo/strsim-rs", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/strsim/0.10.0/download", + "url": "https://static.crates.io/crates/strsim/0.10.0/download", "sha256": "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" } }, @@ -5160,7 +5160,7 @@ "package_url": "https://github.com/dtolnay/syn", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/syn/1.0.109/download", + "url": "https://static.crates.io/crates/syn/1.0.109/download", "sha256": "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" } }, @@ -5250,7 +5250,7 @@ "package_url": "https://github.com/dtolnay/syn", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/syn/2.0.13/download", + "url": "https://static.crates.io/crates/syn/2.0.13/download", "sha256": "4c9da457c5285ac1f936ebd076af6dac17a61cfe7826f2076b4d015cf47bc8ec" } }, @@ -5316,7 +5316,7 @@ "package_url": "https://github.com/BurntSushi/termcolor", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/termcolor/1.2.0/download", + "url": "https://static.crates.io/crates/termcolor/1.2.0/download", "sha256": "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6" } }, @@ -5363,7 +5363,7 @@ "package_url": "https://github.com/Amanieu/thread_local-rs", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/thread_local/1.1.7/download", + "url": "https://static.crates.io/crates/thread_local/1.1.7/download", "sha256": "3fdd6f064ccff2d6567adcb3873ca630700f00b5ad3f060c25b5dcfd9a4ce152" } }, @@ -5412,7 +5412,7 @@ "package_url": "https://github.com/time-rs/time", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/time/0.1.45/download", + "url": "https://static.crates.io/crates/time/0.1.45/download", "sha256": "1b797afad3f312d1c66a56d11d0316f916356d11bd158fbc6ca6389ff6bf805a" } }, @@ -5470,7 +5470,7 @@ "package_url": "https://github.com/tokio-rs/tracing", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/tracing/0.1.37/download", + "url": "https://static.crates.io/crates/tracing/0.1.37/download", "sha256": "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8" } }, @@ -5540,7 +5540,7 @@ "package_url": "https://github.com/tokio-rs/tracing", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/tracing-attributes/0.1.23/download", + "url": "https://static.crates.io/crates/tracing-attributes/0.1.23/download", "sha256": "4017f8f45139870ca7e672686113917c71c7a6e02d4924eda67186083c03081a" } }, @@ -5592,7 +5592,7 @@ "package_url": "https://github.com/tokio-rs/tracing", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/tracing-core/0.1.30/download", + "url": "https://static.crates.io/crates/tracing-core/0.1.30/download", "sha256": "24eb03ba0eab1fd845050058ce5e616558e8f8d8fca633e6b163fe25c797213a" } }, @@ -5651,7 +5651,7 @@ "package_url": "https://github.com/tokio-rs/tracing", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/tracing-log/0.1.3/download", + "url": "https://static.crates.io/crates/tracing-log/0.1.3/download", "sha256": "78ddad33d2d10b1ed7eb9d1f518a5674713876e97e5bb9b7345a7984fbb4f922" } }, @@ -5710,7 +5710,7 @@ "package_url": "https://github.com/tokio-rs/tracing", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/tracing-subscriber/0.3.16/download", + "url": "https://static.crates.io/crates/tracing-subscriber/0.3.16/download", "sha256": "a6176eae26dd70d0c919749377897b54a9276bd7061339665dd68777926b5a70" } }, @@ -5811,7 +5811,7 @@ "package_url": "https://github.com/tree-sitter/tree-sitter", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/tree-sitter/0.20.10/download", + "url": "https://static.crates.io/crates/tree-sitter/0.20.10/download", "sha256": "e747b1f9b7b931ed39a548c1fae149101497de3c1fc8d9e18c62c1a66c683d3d" } }, @@ -6028,7 +6028,7 @@ "package_url": "https://github.com/dtolnay/unicode-ident", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/unicode-ident/1.0.8/download", + "url": "https://static.crates.io/crates/unicode-ident/1.0.8/download", "sha256": "e5464a87b239f13a63a501f2701565754bae92d243d4bb7eb12f6d57d2269bf4" } }, @@ -6065,7 +6065,7 @@ "package_url": "https://github.com/unicode-rs/unicode-width", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/unicode-width/0.1.10/download", + "url": "https://static.crates.io/crates/unicode-width/0.1.10/download", "sha256": "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b" } }, @@ -6101,7 +6101,7 @@ "package_url": "https://github.com/alacritty/vte", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/utf8parse/0.2.1/download", + "url": "https://static.crates.io/crates/utf8parse/0.2.1/download", "sha256": "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a" } }, @@ -6143,7 +6143,7 @@ "package_url": "https://github.com/tokio-rs/valuable", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/valuable/0.1.0/download", + "url": "https://static.crates.io/crates/valuable/0.1.0/download", "sha256": "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" } }, @@ -6201,7 +6201,7 @@ "package_url": "https://github.com/bytecodealliance/wasi", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/wasi/0.10.0+wasi-snapshot-preview1/download", + "url": "https://static.crates.io/crates/wasi/0.10.0+wasi-snapshot-preview1/download", "sha256": "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f" } }, @@ -6244,7 +6244,7 @@ "package_url": "https://github.com/rustwasm/wasm-bindgen", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/wasm-bindgen/0.2.84/download", + "url": "https://static.crates.io/crates/wasm-bindgen/0.2.84/download", "sha256": "31f8dcbc21f30d9b8f2ea926ecb58f6b91192c17e9d33594b3df58b2007ca53b" } }, @@ -6324,7 +6324,7 @@ "package_url": "https://github.com/rustwasm/wasm-bindgen/tree/master/crates/backend", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/wasm-bindgen-backend/0.2.84/download", + "url": "https://static.crates.io/crates/wasm-bindgen-backend/0.2.84/download", "sha256": "95ce90fd5bcc06af55a641a86428ee4229e44e07033963a2290a8e241607ccb9" } }, @@ -6399,7 +6399,7 @@ "package_url": "https://github.com/rustwasm/wasm-bindgen/tree/master/crates/macro", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/wasm-bindgen-macro/0.2.84/download", + "url": "https://static.crates.io/crates/wasm-bindgen-macro/0.2.84/download", "sha256": "4c21f77c0bedc37fd5dc21f897894a5ca01e7bb159884559461862ae90c0b4c5" } }, @@ -6454,7 +6454,7 @@ "package_url": "https://github.com/rustwasm/wasm-bindgen/tree/master/crates/macro-support", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/wasm-bindgen-macro-support/0.2.84/download", + "url": "https://static.crates.io/crates/wasm-bindgen-macro-support/0.2.84/download", "sha256": "2aff81306fcac3c7515ad4e177f521b5c9a15f2b08f4e32d823066102f35a5f6" } }, @@ -6521,7 +6521,7 @@ "package_url": "https://github.com/rustwasm/wasm-bindgen/tree/master/crates/shared", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/wasm-bindgen-shared/0.2.84/download", + "url": "https://static.crates.io/crates/wasm-bindgen-shared/0.2.84/download", "sha256": "0046fef7e28c3804e5e38bfa31ea2a0f73905319b677e57ebe37e49358989b5d" } }, @@ -6581,7 +6581,7 @@ "package_url": "https://github.com/retep998/winapi-rs", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/winapi/0.3.9/download", + "url": "https://static.crates.io/crates/winapi/0.3.9/download", "sha256": "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" } }, @@ -6670,7 +6670,7 @@ "package_url": "https://github.com/retep998/winapi-rs", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/winapi-i686-pc-windows-gnu/0.4.0/download", + "url": "https://static.crates.io/crates/winapi-i686-pc-windows-gnu/0.4.0/download", "sha256": "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" } }, @@ -6729,7 +6729,7 @@ "package_url": "https://github.com/BurntSushi/winapi-util", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/winapi-util/0.1.5/download", + "url": "https://static.crates.io/crates/winapi-util/0.1.5/download", "sha256": "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" } }, @@ -6776,7 +6776,7 @@ "package_url": "https://github.com/retep998/winapi-rs", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/winapi-x86_64-pc-windows-gnu/0.4.0/download", + "url": "https://static.crates.io/crates/winapi-x86_64-pc-windows-gnu/0.4.0/download", "sha256": "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" } }, @@ -6835,7 +6835,7 @@ "package_url": "https://github.com/microsoft/windows-rs", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/windows/0.48.0/download", + "url": "https://static.crates.io/crates/windows/0.48.0/download", "sha256": "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f" } }, @@ -6880,7 +6880,7 @@ "package_url": "https://github.com/microsoft/windows-rs", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/windows-sys/0.45.0/download", + "url": "https://static.crates.io/crates/windows-sys/0.45.0/download", "sha256": "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" } }, @@ -6939,7 +6939,7 @@ "package_url": "https://github.com/microsoft/windows-rs", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/windows-sys/0.48.0/download", + "url": "https://static.crates.io/crates/windows-sys/0.48.0/download", "sha256": "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" } }, @@ -7000,7 +7000,7 @@ "package_url": "https://github.com/microsoft/windows-rs", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/windows-targets/0.42.2/download", + "url": "https://static.crates.io/crates/windows-targets/0.42.2/download", "sha256": "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" } }, @@ -7113,7 +7113,7 @@ "package_url": "https://github.com/microsoft/windows-rs", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/windows-targets/0.48.0/download", + "url": "https://static.crates.io/crates/windows-targets/0.48.0/download", "sha256": "7b1eb6f0cd7c80c79759c929114ef071b87354ce476d9d94271031c0497adfd5" } }, @@ -7196,7 +7196,7 @@ "package_url": "https://github.com/microsoft/windows-rs", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/windows_aarch64_gnullvm/0.42.2/download", + "url": "https://static.crates.io/crates/windows_aarch64_gnullvm/0.42.2/download", "sha256": "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" } }, @@ -7255,7 +7255,7 @@ "package_url": "https://github.com/microsoft/windows-rs", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/windows_aarch64_gnullvm/0.48.0/download", + "url": "https://static.crates.io/crates/windows_aarch64_gnullvm/0.48.0/download", "sha256": "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc" } }, @@ -7314,7 +7314,7 @@ "package_url": "https://github.com/microsoft/windows-rs", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/windows_aarch64_msvc/0.42.2/download", + "url": "https://static.crates.io/crates/windows_aarch64_msvc/0.42.2/download", "sha256": "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" } }, @@ -7373,7 +7373,7 @@ "package_url": "https://github.com/microsoft/windows-rs", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/windows_aarch64_msvc/0.48.0/download", + "url": "https://static.crates.io/crates/windows_aarch64_msvc/0.48.0/download", "sha256": "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3" } }, @@ -7432,7 +7432,7 @@ "package_url": "https://github.com/microsoft/windows-rs", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/windows_i686_gnu/0.42.2/download", + "url": "https://static.crates.io/crates/windows_i686_gnu/0.42.2/download", "sha256": "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" } }, @@ -7491,7 +7491,7 @@ "package_url": "https://github.com/microsoft/windows-rs", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/windows_i686_gnu/0.48.0/download", + "url": "https://static.crates.io/crates/windows_i686_gnu/0.48.0/download", "sha256": "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241" } }, @@ -7550,7 +7550,7 @@ "package_url": "https://github.com/microsoft/windows-rs", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/windows_i686_msvc/0.42.2/download", + "url": "https://static.crates.io/crates/windows_i686_msvc/0.42.2/download", "sha256": "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" } }, @@ -7609,7 +7609,7 @@ "package_url": "https://github.com/microsoft/windows-rs", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/windows_i686_msvc/0.48.0/download", + "url": "https://static.crates.io/crates/windows_i686_msvc/0.48.0/download", "sha256": "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00" } }, @@ -7668,7 +7668,7 @@ "package_url": "https://github.com/microsoft/windows-rs", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/windows_x86_64_gnu/0.42.2/download", + "url": "https://static.crates.io/crates/windows_x86_64_gnu/0.42.2/download", "sha256": "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" } }, @@ -7727,7 +7727,7 @@ "package_url": "https://github.com/microsoft/windows-rs", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/windows_x86_64_gnu/0.48.0/download", + "url": "https://static.crates.io/crates/windows_x86_64_gnu/0.48.0/download", "sha256": "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1" } }, @@ -7786,7 +7786,7 @@ "package_url": "https://github.com/microsoft/windows-rs", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/windows_x86_64_gnullvm/0.42.2/download", + "url": "https://static.crates.io/crates/windows_x86_64_gnullvm/0.42.2/download", "sha256": "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" } }, @@ -7845,7 +7845,7 @@ "package_url": "https://github.com/microsoft/windows-rs", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/windows_x86_64_gnullvm/0.48.0/download", + "url": "https://static.crates.io/crates/windows_x86_64_gnullvm/0.48.0/download", "sha256": "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953" } }, @@ -7904,7 +7904,7 @@ "package_url": "https://github.com/microsoft/windows-rs", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/windows_x86_64_msvc/0.42.2/download", + "url": "https://static.crates.io/crates/windows_x86_64_msvc/0.42.2/download", "sha256": "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" } }, @@ -7963,7 +7963,7 @@ "package_url": "https://github.com/microsoft/windows-rs", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/windows_x86_64_msvc/0.48.0/download", + "url": "https://static.crates.io/crates/windows_x86_64_msvc/0.48.0/download", "sha256": "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a" } }, diff --git a/ruby/ql/lib/CHANGELOG.md b/ruby/ql/lib/CHANGELOG.md index a623a151e89..a3305576053 100644 --- a/ruby/ql/lib/CHANGELOG.md +++ b/ruby/ql/lib/CHANGELOG.md @@ -1,3 +1,30 @@ +## 0.8.13 + +### Minor Analysis Improvements + +* Data flow is now tracked through `ActiveRecord` scopes. +* Modeled instances of `ActionDispatch::Http::UploadedFile` that can be obtained from element reads of `ActionController::Parameters`, with calls to `original_filename`, `content_type`, and `read` now propagating taint from their receiver. +* The second argument, `subquery_name`, of the `ActiveRecord::QueryMethods::from` method, is now recognized as an sql injection sink. +* Calls to `Typhoeus::Request.new` are now considered as instances of the `Http::Client::Request` concept, with the response body being treated as a remote flow source. +* New command injection sinks have been added, including `Process.spawn`, `Process.exec`, `Terrapin::CommandLine` and the `open4` gem. + +## 0.8.12 + +No user-facing changes. + +## 0.8.11 + +No user-facing changes. + +## 0.8.10 + +### Minor Analysis Improvements + +* Calls to `I18n.translate` as well as Rails helper translate methods now propagate taint from their keyword arguments. The Rails translate methods are also recognized as XSS sanitizers when using keys marked as html safe. +* Calls to `Arel::Nodes::SqlLiteral.new` are now modeled as instances of the `SqlConstruction` concept, as well as propagating taint from their argument. +* Additional arguments beyond the first of calls to the `ActiveRecord` methods `select`, `reselect`, `order`, `reorder`, `joins`, `group`, and `pluck` are now recognized as sql injection sinks. +* Calls to several methods of `ActiveRecord::Connection`, such as `ActiveRecord::Connection#exec_query`, are now recognized as SQL executions, including those via subclasses. + ## 0.8.9 ### Minor Analysis Improvements diff --git a/ruby/ql/lib/change-notes/2024-02-15-activerecord_connection_sql_sinks.md b/ruby/ql/lib/change-notes/2024-02-15-activerecord_connection_sql_sinks.md deleted file mode 100644 index c2276f284a8..00000000000 --- a/ruby/ql/lib/change-notes/2024-02-15-activerecord_connection_sql_sinks.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Calls to several methods of `ActiveRecord::Connection`, such as `ActiveRecord::Connection#exec_query`, are now recognized as SQL executions, including those via subclasses. \ No newline at end of file diff --git a/ruby/ql/lib/change-notes/2024-02-20-activerecord-sql-sink-arguments.md b/ruby/ql/lib/change-notes/2024-02-20-activerecord-sql-sink-arguments.md deleted file mode 100644 index 1486c7a472d..00000000000 --- a/ruby/ql/lib/change-notes/2024-02-20-activerecord-sql-sink-arguments.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Additional arguments beyond the first of calls to the `ActiveRecord` methods `select`, `reselect`, `order`, `reorder`, `joins`, `group`, and `pluck` are now recognized as sql injection sinks. \ No newline at end of file diff --git a/ruby/ql/lib/change-notes/2024-02-26-arel-sqlliteral.md b/ruby/ql/lib/change-notes/2024-02-26-arel-sqlliteral.md deleted file mode 100644 index 66a82dd3d3f..00000000000 --- a/ruby/ql/lib/change-notes/2024-02-26-arel-sqlliteral.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Calls to `Arel::Nodes::SqlLiteral.new` are now modeled as instances of the `SqlConstruction` concept, as well as propagating taint from their argument. diff --git a/ruby/ql/lib/change-notes/2024-02-27-process-spawn.md b/ruby/ql/lib/change-notes/2024-02-27-process-spawn.md deleted file mode 100644 index 9c20f05d865..00000000000 --- a/ruby/ql/lib/change-notes/2024-02-27-process-spawn.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* New command injection sinks have been added, including `Process.spawn`, `Process.exec`, `Terrapin::CommandLine` and the `open4` gem. \ No newline at end of file diff --git a/ruby/ql/lib/change-notes/2024-02-29-i18n-translate.md b/ruby/ql/lib/change-notes/2024-02-29-i18n-translate.md deleted file mode 100644 index 42275fcee7d..00000000000 --- a/ruby/ql/lib/change-notes/2024-02-29-i18n-translate.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Calls to `I18n.translate` as well as Rails helper translate methods now propagate taint from their keyword arguments. The Rails translate methods are also recognized as XSS sanitizers when using keys marked as html safe. diff --git a/ruby/ql/lib/change-notes/2024-03-01-typhoeus-request.md b/ruby/ql/lib/change-notes/2024-03-01-typhoeus-request.md deleted file mode 100644 index f008869fbcd..00000000000 --- a/ruby/ql/lib/change-notes/2024-03-01-typhoeus-request.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Calls to `Typhoeus::Request.new` are now considered as instances of the `Http::Client::Request` concept, with the response body being treated as a remote flow source. \ No newline at end of file diff --git a/ruby/ql/lib/change-notes/2024-03-08-activerecord-from.md b/ruby/ql/lib/change-notes/2024-03-08-activerecord-from.md deleted file mode 100644 index 704a4f27a61..00000000000 --- a/ruby/ql/lib/change-notes/2024-03-08-activerecord-from.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* The second argument, `subquery_name`, of the `ActiveRecord::QueryMethods::from` method, is now recognized as an sql injection sink. \ No newline at end of file diff --git a/ruby/ql/lib/change-notes/2024-03-14-actiondispatch-uploadedfile.md b/ruby/ql/lib/change-notes/2024-03-14-actiondispatch-uploadedfile.md deleted file mode 100644 index a02ca0d00a2..00000000000 --- a/ruby/ql/lib/change-notes/2024-03-14-actiondispatch-uploadedfile.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Modeled instances of `ActionDispatch::Http::UploadedFile` that can be obtained from element reads of `ActionController::Parameters`, with calls to `original_filename`, `content_type`, and `read` now propagating taint from their receiver. \ No newline at end of file diff --git a/ruby/ql/lib/change-notes/released/0.8.10.md b/ruby/ql/lib/change-notes/released/0.8.10.md new file mode 100644 index 00000000000..666e28f840e --- /dev/null +++ b/ruby/ql/lib/change-notes/released/0.8.10.md @@ -0,0 +1,8 @@ +## 0.8.10 + +### Minor Analysis Improvements + +* Calls to `I18n.translate` as well as Rails helper translate methods now propagate taint from their keyword arguments. The Rails translate methods are also recognized as XSS sanitizers when using keys marked as html safe. +* Calls to `Arel::Nodes::SqlLiteral.new` are now modeled as instances of the `SqlConstruction` concept, as well as propagating taint from their argument. +* Additional arguments beyond the first of calls to the `ActiveRecord` methods `select`, `reselect`, `order`, `reorder`, `joins`, `group`, and `pluck` are now recognized as sql injection sinks. +* Calls to several methods of `ActiveRecord::Connection`, such as `ActiveRecord::Connection#exec_query`, are now recognized as SQL executions, including those via subclasses. diff --git a/ruby/ql/lib/change-notes/released/0.8.11.md b/ruby/ql/lib/change-notes/released/0.8.11.md new file mode 100644 index 00000000000..6f504c5c207 --- /dev/null +++ b/ruby/ql/lib/change-notes/released/0.8.11.md @@ -0,0 +1,3 @@ +## 0.8.11 + +No user-facing changes. diff --git a/ruby/ql/lib/change-notes/released/0.8.12.md b/ruby/ql/lib/change-notes/released/0.8.12.md new file mode 100644 index 00000000000..bc91afe9c1e --- /dev/null +++ b/ruby/ql/lib/change-notes/released/0.8.12.md @@ -0,0 +1,3 @@ +## 0.8.12 + +No user-facing changes. diff --git a/ruby/ql/lib/change-notes/released/0.8.13.md b/ruby/ql/lib/change-notes/released/0.8.13.md new file mode 100644 index 00000000000..cc844ffc764 --- /dev/null +++ b/ruby/ql/lib/change-notes/released/0.8.13.md @@ -0,0 +1,9 @@ +## 0.8.13 + +### Minor Analysis Improvements + +* Data flow is now tracked through `ActiveRecord` scopes. +* Modeled instances of `ActionDispatch::Http::UploadedFile` that can be obtained from element reads of `ActionController::Parameters`, with calls to `original_filename`, `content_type`, and `read` now propagating taint from their receiver. +* The second argument, `subquery_name`, of the `ActiveRecord::QueryMethods::from` method, is now recognized as an sql injection sink. +* Calls to `Typhoeus::Request.new` are now considered as instances of the `Http::Client::Request` concept, with the response body being treated as a remote flow source. +* New command injection sinks have been added, including `Process.spawn`, `Process.exec`, `Terrapin::CommandLine` and the `open4` gem. diff --git a/ruby/ql/lib/codeql-pack.release.yml b/ruby/ql/lib/codeql-pack.release.yml index 5290c29b7fe..0fb6f3d786c 100644 --- a/ruby/ql/lib/codeql-pack.release.yml +++ b/ruby/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.8.9 +lastReleaseVersion: 0.8.13 diff --git a/ruby/ql/lib/codeql/ruby/AST.qll b/ruby/ql/lib/codeql/ruby/AST.qll index d517c8f4d44..e8dc28692c0 100644 --- a/ruby/ql/lib/codeql/ruby/AST.qll +++ b/ruby/ql/lib/codeql/ruby/AST.qll @@ -137,7 +137,12 @@ class AstNode extends TAstNode { /** A Ruby source file */ class RubyFile extends File { - RubyFile() { ruby_ast_node_info(_, this, _, _) } + RubyFile() { + exists(Location loc | + ruby_ast_node_location(_, loc) and + this = loc.getFile() + ) + } /** Gets a token in this file. */ private Ruby::Token getAToken() { result.getLocation().getFile() = this } diff --git a/ruby/ql/lib/codeql/ruby/ast/internal/TreeSitter.qll b/ruby/ql/lib/codeql/ruby/ast/internal/TreeSitter.qll index ef268f69ded..441f4ffefcc 100644 --- a/ruby/ql/lib/codeql/ruby/ast/internal/TreeSitter.qll +++ b/ruby/ql/lib/codeql/ruby/ast/internal/TreeSitter.qll @@ -12,13 +12,13 @@ module Ruby { string toString() { result = this.getAPrimaryQlClass() } /** Gets the location of this element. */ - final L::Location getLocation() { ruby_ast_node_info(this, _, _, result) } + final L::Location getLocation() { ruby_ast_node_location(this, result) } /** Gets the parent of this element. */ - final AstNode getParent() { ruby_ast_node_info(this, result, _, _) } + final AstNode getParent() { ruby_ast_node_parent(this, result, _) } /** Gets the index of this node among the children of its parent. */ - final int getParentIndex() { ruby_ast_node_info(this, _, result, _) } + final int getParentIndex() { ruby_ast_node_parent(this, _, result) } /** Gets a field or child node of this node. */ AstNode getAFieldOrChild() { none() } @@ -1929,13 +1929,13 @@ module Erb { string toString() { result = this.getAPrimaryQlClass() } /** Gets the location of this element. */ - final L::Location getLocation() { erb_ast_node_info(this, _, _, result) } + final L::Location getLocation() { erb_ast_node_location(this, result) } /** Gets the parent of this element. */ - final AstNode getParent() { erb_ast_node_info(this, result, _, _) } + final AstNode getParent() { erb_ast_node_parent(this, result, _) } /** Gets the index of this node among the children of its parent. */ - final int getParentIndex() { erb_ast_node_info(this, _, result, _) } + final int getParentIndex() { erb_ast_node_parent(this, _, result) } /** Gets a field or child node of this node. */ AstNode getAFieldOrChild() { none() } diff --git a/ruby/ql/lib/codeql/ruby/controlflow/internal/Completion.qll b/ruby/ql/lib/codeql/ruby/controlflow/internal/Completion.qll index 39fefcbeae1..83ea11e9d23 100644 --- a/ruby/ql/lib/codeql/ruby/controlflow/internal/Completion.qll +++ b/ruby/ql/lib/codeql/ruby/controlflow/internal/Completion.qll @@ -90,9 +90,7 @@ private predicate mayRaise(Call c) { c = getARescuableBodyChild() } /** A completion of a statement or an expression. */ abstract class Completion extends TCompletion { - private predicate isValidForSpecific(AstNode n) { - exists(AstNode other | n = other.getDesugared() and this.isValidForSpecific(other)) - or + private predicate isValidForSpecific0(AstNode n) { this = n.(NonReturningCall).getACompletion() or completionIsValidForStmt(n, this) @@ -110,12 +108,19 @@ abstract class Completion extends TCompletion { or n = any(RescueModifierExpr parent).getBody() and this = [TSimpleCompletion().(TCompletion), TRaiseCompletion()] + } + + private predicate isValidForSpecific(AstNode n) { + this.isValidForSpecific0(n) + or + exists(AstNode other | n = other.getDesugared() and this.isValidForSpecific(other)) or mayRaise(n) and ( this = TRaiseCompletion() or - this = TSimpleCompletion() and not n instanceof NonReturningCall + not any(Completion c).isValidForSpecific0(n) and + this = TSimpleCompletion() ) } diff --git a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowDispatch.qll b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowDispatch.qll index e7898a1ec4f..4ac9031f05c 100644 --- a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowDispatch.qll +++ b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowDispatch.qll @@ -429,7 +429,20 @@ private Callable viableSourceCallableInit(RelevantCall call) { result = getIniti /** Holds if `call` may resolve to the returned source-code method. */ private DataFlowCallable viableSourceCallable(DataFlowCall call) { result = viableSourceCallableNonInit(call) or - result.asCfgScope() = viableSourceCallableInit(call.asCall()) + result.asCfgScope() = viableSourceCallableInit(call.asCall()) or + result = any(AdditionalCallTarget t).viableTarget(call.asCall()) +} + +/** + * A unit class for adding additional call steps. + * + * Extend this class to add additional call steps to the data flow graph. + */ +class AdditionalCallTarget extends Unit { + /** + * Gets a viable target for `call`. + */ + abstract DataFlowCallable viableTarget(CfgNodes::ExprNodes::CallCfgNode call); } /** Holds if `call` may resolve to the returned summarized library method. */ diff --git a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPrivate.qll b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPrivate.qll index 3b97ebcf4c8..0aa58d7d18a 100644 --- a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPrivate.qll +++ b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPrivate.qll @@ -72,47 +72,51 @@ CfgNodes::ExprCfgNode getAPostUpdateNodeForArg(Argument arg) { not exists(getALastEvalNode(result)) } -/** Provides predicates related to local data flow. */ -module LocalFlow { - private import codeql.ruby.dataflow.internal.SsaImpl - - /** An SSA definition into which another SSA definition may flow. */ - private class SsaInputDefinitionExtNode extends SsaDefinitionExtNode { - SsaInputDefinitionExtNode() { - def instanceof Ssa::PhiNode - or - def instanceof SsaImpl::PhiReadNode - } +/** An SSA definition into which another SSA definition may flow. */ +class SsaInputDefinitionExt extends SsaImpl::DefinitionExt { + SsaInputDefinitionExt() { + this instanceof Ssa::PhiNode + or + this instanceof SsaImpl::PhiReadNode } + predicate hasInputFromBlock(SsaImpl::DefinitionExt def, BasicBlock bb, int i, BasicBlock input) { + SsaImpl::lastRefBeforeRedefExt(def, bb, i, input, this) + } +} + +/** Provides predicates related to local data flow. */ +module LocalFlow { /** * Holds if `nodeFrom` is a node for SSA definition `def`, which can reach `next`. */ pragma[nomagic] private predicate localFlowSsaInputFromDef( - SsaDefinitionExtNode nodeFrom, SsaImpl::DefinitionExt def, SsaInputDefinitionExtNode next + SsaDefinitionExtNode nodeFrom, SsaImpl::DefinitionExt def, SsaInputNode nodeTo ) { - exists(BasicBlock bb, int i | - lastRefBeforeRedefExt(def, bb, i, next.getDefinitionExt()) and + exists(BasicBlock bb, int i, BasicBlock input, SsaInputDefinitionExt next | + next.hasInputFromBlock(def, bb, i, input) and def = nodeFrom.getDefinitionExt() and def.definesAt(_, bb, i, _) and - nodeFrom != next + nodeTo = TSsaInputNode(next, input) ) } /** * Holds if `nodeFrom` is a last read of SSA definition `def`, which - * can reach `next`. + * can reach `nodeTo`. */ pragma[nomagic] - predicate localFlowSsaInputFromRead( - SsaImpl::DefinitionExt def, Node nodeFrom, SsaInputDefinitionExtNode next - ) { - exists(BasicBlock bb, int i, CfgNodes::ExprCfgNode exprFrom | - SsaImpl::lastRefBeforeRedefExt(def, bb, i, next.getDefinitionExt()) and + predicate localFlowSsaInputFromRead(SsaImpl::DefinitionExt def, Node nodeFrom, SsaInputNode nodeTo) { + exists( + BasicBlock bb, int i, CfgNodes::ExprCfgNode exprFrom, BasicBlock input, + SsaInputDefinitionExt next + | + next.hasInputFromBlock(def, bb, i, input) and exprFrom = bb.getNode(i) and exprFrom.getExpr() instanceof VariableReadAccess and - exprFrom = [nodeFrom.asExpr(), nodeFrom.(PostUpdateNodeImpl).getPreUpdateNode().asExpr()] + exprFrom = [nodeFrom.asExpr(), nodeFrom.(PostUpdateNodeImpl).getPreUpdateNode().asExpr()] and + nodeTo = TSsaInputNode(next, input) ) } @@ -181,7 +185,7 @@ module LocalFlow { or // Flow from SSA definition to first read def = nodeFrom.(SsaDefinitionExtNode).getDefinitionExt() and - firstReadExt(def, nodeTo.asExpr()) + SsaImpl::firstReadExt(def, nodeTo.asExpr()) or // Flow from post-update read to next read localSsaFlowStepUseUse(def, nodeFrom.(PostUpdateNodeImpl).getPreUpdateNode(), nodeTo) @@ -189,6 +193,9 @@ module LocalFlow { // Flow into phi (read) SSA definition node from def localFlowSsaInputFromDef(nodeFrom, def, nodeTo) or + nodeTo.(SsaDefinitionExtNode).getDefinitionExt() = def and + def = nodeFrom.(SsaInputNode).getDefinitionExt() + or localFlowSsaParamInput(nodeFrom, nodeTo) and def = nodeTo.(SsaDefinitionExtNode).getDefinitionExt() } @@ -530,6 +537,9 @@ private module Cached { TExprNode(CfgNodes::ExprCfgNode n) or TReturningNode(CfgNodes::ReturningCfgNode n) { exists(n.getReturnedValueNode()) } or TSsaDefinitionExtNode(SsaImpl::DefinitionExt def) or + TSsaInputNode(SsaInputDefinitionExt def, BasicBlock input) { + def.hasInputFromBlock(_, _, _, input) + } or TCapturedVariableNode(VariableCapture::CapturedVariable v) or TNormalParameterNode(Parameter p) { p instanceof SimpleParameter or @@ -802,6 +812,8 @@ import Cached predicate nodeIsHidden(Node n) { n.(SsaDefinitionExtNode).isHidden() or + n instanceof SsaInputNode + or n = LocalFlow::getParameterDefNode(_) or exists(AstNode desug | @@ -863,6 +875,57 @@ class SsaDefinitionExtNode extends NodeImpl, TSsaDefinitionExtNode { override string toStringImpl() { result = def.toString() } } +/** + * A node that represents an input to an SSA phi (read) definition. + * + * This allows for barrier guards to filter input to phi nodes. For example, in + * + * ```rb + * x = taint + * if x != "safe" then + * x = "safe" + * end + * sink x + * ``` + * + * the `false` edge out of `x != "safe"` guards the input from `x = taint` into the + * `phi` node after the condition. + * + * It is also relevant to filter input into phi read nodes: + * + * ```rb + * x = taint + * if b then + * if x != "safe1" then + * return + * end + * else + * if x != "safe2" then + * return + * end + * end + * + * sink x + * ``` + * + * both inputs into the phi read node after the outer condition are guarded. + */ +class SsaInputNode extends NodeImpl, TSsaInputNode { + SsaImpl::DefinitionExt def; + BasicBlock input; + + SsaInputNode() { this = TSsaInputNode(def, input) } + + /** Gets the underlying SSA definition. */ + SsaImpl::DefinitionExt getDefinitionExt() { result = def } + + override CfgScope getCfgScope() { result = input.getScope() } + + override Location getLocationImpl() { result = input.getLastNode().getLocation() } + + override string toStringImpl() { result = "[input] " + def } +} + /** An SSA definition for a `self` variable. */ class SsaSelfDefinitionNode extends SsaDefinitionExtNode { private SelfVariable self; diff --git a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPublic.qll b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPublic.qll index c1c625a2316..7443f24f038 100644 --- a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPublic.qll +++ b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPublic.qll @@ -856,24 +856,52 @@ private predicate sameSourceVariable(Ssa::Definition def1, Ssa::Definition def2) * in data flow and taint tracking. */ module BarrierGuard { + private import SsaImpl as SsaImpl + pragma[nomagic] private predicate guardChecksSsaDef(CfgNodes::AstCfgNode g, boolean branch, Ssa::Definition def) { guardChecks(g, def.getARead(), branch) } pragma[nomagic] - private predicate guardControlsSsaDef( + private predicate guardControlsSsaRead( CfgNodes::AstCfgNode g, boolean branch, Ssa::Definition def, Node n ) { def.getARead() = n.asExpr() and guardControlsBlock(g, n.asExpr().getBasicBlock(), branch) } + pragma[nomagic] + private predicate guardControlsPhiInput( + CfgNodes::AstCfgNode g, boolean branch, Ssa::Definition def, BasicBlock input, + SsaInputDefinitionExt phi + ) { + phi.hasInputFromBlock(def, _, _, input) and + ( + guardControlsBlock(g, input, branch) + or + exists(SuccessorTypes::ConditionalSuccessor s | + g = input.getLastNode() and + s.getValue() = branch and + input.getASuccessor(s) = phi.getBasicBlock() + ) + ) + } + /** Gets a node that is safely guarded by the given guard check. */ Node getABarrierNode() { exists(CfgNodes::AstCfgNode g, boolean branch, Ssa::Definition def | guardChecksSsaDef(g, branch, def) and - guardControlsSsaDef(g, branch, def, result) + guardControlsSsaRead(g, branch, def, result) + ) + or + exists( + CfgNodes::AstCfgNode g, boolean branch, Ssa::Definition def, BasicBlock input, + SsaInputDefinitionExt phi + | + guardChecksSsaDef(g, branch, def) and + guardControlsPhiInput(g, branch, def, input, phi) and + result = TSsaInputNode(phi, input) ) or result.asExpr() = getAMaybeGuardedCapturedDef().getARead() diff --git a/ruby/ql/lib/codeql/ruby/dataflow/internal/SsaImpl.qll b/ruby/ql/lib/codeql/ruby/dataflow/internal/SsaImpl.qll index 8839c30b949..1490a8c7ca3 100644 --- a/ruby/ql/lib/codeql/ruby/dataflow/internal/SsaImpl.qll +++ b/ruby/ql/lib/codeql/ruby/dataflow/internal/SsaImpl.qll @@ -459,14 +459,16 @@ private module Cached { * The reference is either a read of `def` or `def` itself. */ cached - predicate lastRefBeforeRedefExt(DefinitionExt def, Cfg::BasicBlock bb, int i, DefinitionExt next) { + predicate lastRefBeforeRedefExt( + DefinitionExt def, Cfg::BasicBlock bb, int i, Cfg::BasicBlock input, DefinitionExt next + ) { exists(LocalVariable v | - Impl::lastRefRedefExt(def, v, bb, i, next) and + Impl::lastRefRedefExt(def, v, bb, i, input, next) and not SsaInput::variableRead(bb, i, v, false) ) or exists(SsaInput::BasicBlock bb0, int i0 | - Impl::lastRefRedefExt(def, _, bb0, i0, next) and + Impl::lastRefRedefExt(def, _, bb0, i0, input, next) and adjacentDefReachesUncertainReadExt(def, bb, i, bb0, i0) ) } diff --git a/ruby/ql/lib/codeql/ruby/frameworks/ActionController.qll b/ruby/ql/lib/codeql/ruby/frameworks/ActionController.qll index 3fcb3eda5f8..5a1cf3f5318 100644 --- a/ruby/ql/lib/codeql/ruby/frameworks/ActionController.qll +++ b/ruby/ql/lib/codeql/ruby/frameworks/ActionController.qll @@ -22,6 +22,35 @@ private import codeql.ruby.dataflow.internal.DataFlowDispatch module ActionController { // TODO: move the rest of this file inside this module. import codeql.ruby.frameworks.actioncontroller.Filters + + /** + * An ActionController class which sits at the top of the class hierarchy. + * In other words, it does not subclass any other class in source code. + */ + class RootController extends ActionControllerClass { + RootController() { + not exists(ActionControllerClass parent | this != parent and this = parent.getADescendent()) + } + } + + /** + * A call to `protect_from_forgery`. + */ + class ProtectFromForgeryCall extends CsrfProtectionSetting::Range, DataFlow::CallNode { + ProtectFromForgeryCall() { + this = actionControllerInstance().getAMethodCall("protect_from_forgery") + } + + private string getWithValueText() { + result = this.getKeywordArgument("with").getConstantValue().getSymbol() + } + + // Calls without `with: :exception` can allow for bypassing CSRF protection + // in some scenarios. + override boolean getVerificationSetting() { + if this.getWithValueText() = "exception" then result = true else result = false + } + } } /** @@ -39,18 +68,12 @@ module ActionController { */ class ActionControllerClass extends DataFlow::ClassNode { ActionControllerClass() { - this = - [ - DataFlow::getConstant("ActionController").getConstant("Base"), - // In Rails applications `ApplicationController` typically extends `ActionController::Base`, but we - // treat it separately in case the `ApplicationController` definition is not in the database. - DataFlow::getConstant("ApplicationController"), - // ActionController::Metal technically doesn't contain all of the - // methods available in Base, such as those for rendering views. - // However we prefer to be over-sensitive in this case in order to find - // more results. - DataFlow::getConstant("ActionController").getConstant("Metal") - ].getADescendentModule() + // In Rails applications `ApplicationController` typically extends `ActionController::Base`, but we + // treat it separately in case the `ApplicationController` definition is not in the database. + this = DataFlow::getConstant("ApplicationController").getADescendentModule() + or + this = actionControllerBaseClass().getADescendentModule() and + not exists(DataFlow::ModuleNode m | m = actionControllerBaseClass().asModule() | this = m) } /** @@ -74,6 +97,18 @@ class ActionControllerClass extends DataFlow::ClassNode { } } +private DataFlow::ConstRef actionControllerBaseClass() { + result = + [ + DataFlow::getConstant("ActionController").getConstant("Base"), + // ActionController::Metal and ActionController::API technically don't contain all of the + // methods available in Base, such as those for rendering views. + // However we prefer to be over-sensitive in this case in order to find more results. + DataFlow::getConstant("ActionController").getConstant("Metal"), + DataFlow::getConstant("ActionController").getConstant("API") + ] +} + private API::Node actionControllerInstance() { result = any(ActionControllerClass cls).getSelf().track() } @@ -407,27 +442,6 @@ class ActionControllerSkipForgeryProtectionCall extends CsrfProtectionSetting::R override boolean getVerificationSetting() { result = false } } -/** - * A call to `protect_from_forgery`. - */ -private class ActionControllerProtectFromForgeryCall extends CsrfProtectionSetting::Range, - DataFlow::CallNode -{ - ActionControllerProtectFromForgeryCall() { - this = actionControllerInstance().getAMethodCall("protect_from_forgery") - } - - private string getWithValueText() { - result = this.getKeywordArgument("with").getConstantValue().getSymbol() - } - - // Calls without `with: :exception` can allow for bypassing CSRF protection - // in some scenarios. - override boolean getVerificationSetting() { - if this.getWithValueText() = "exception" then result = true else result = false - } -} - /** * A call to `send_file`, which sends the file at the given path to the client. */ diff --git a/ruby/ql/lib/codeql/ruby/frameworks/ActiveRecord.qll b/ruby/ql/lib/codeql/ruby/frameworks/ActiveRecord.qll index 7573e099c19..0f30f2146df 100644 --- a/ruby/ql/lib/codeql/ruby/frameworks/ActiveRecord.qll +++ b/ruby/ql/lib/codeql/ruby/frameworks/ActiveRecord.qll @@ -765,3 +765,30 @@ private class ActiveRecordCollectionProxyModelInstantiation extends ActiveRecord result = this.(ActiveRecordCollectionProxyMethodCall).getAssociation().getTargetClass() } } + +/** + * An additional call step for calls to ActiveRecord scopes. For example, in the following code: + * + * ```rb + * class User < ActiveRecord::Base + * scope :with_role, ->(role) { where(role: role) } + * end + * + * User.with_role(r) + * ``` + * + * the call to `with_role` targets the lambda, and argument `r` flows to the parameter `role`. + */ +class ActiveRecordScopeCallTarget extends AdditionalCallTarget { + override DataFlowCallable viableTarget(ExprNodes::CallCfgNode scopeCall) { + exists(DataFlow::ModuleNode model, string scopeName | + model = activeRecordBaseClass().getADescendentModule() and + exists(DataFlow::CallNode scope | + scope = model.getAModuleLevelCall("scope") and + scope.getArgument(0).getConstantValue().isStringlikeValue(scopeName) and + scope.getArgument(1).asCallable().asCallableAstNode() = result.asCfgScope() + ) and + scopeCall = model.getAnImmediateReference().getAMethodCall(scopeName).asExpr() + ) + } +} diff --git a/ruby/ql/lib/codeql/ruby/frameworks/Gemfile.qll b/ruby/ql/lib/codeql/ruby/frameworks/Gemfile.qll new file mode 100644 index 00000000000..83ebc27100a --- /dev/null +++ b/ruby/ql/lib/codeql/ruby/frameworks/Gemfile.qll @@ -0,0 +1,254 @@ +/** + * Provides classes and predicates for Gemfiles, including version constraint logic. + */ + +private import codeql.ruby.AST + +/** + * Provides classes and predicates for Gemfiles, including version constraint logic. + */ +module Gemfile { + private File getGemfile() { result.getBaseName() = "Gemfile" } + + /** + * A call to `gem` inside a gemfile. This defines a dependency. For example: + * + * ```rb + * gem "actionpack", "~> 7.0.0" + * ``` + * + * This call defines a dependency on the `actionpack` gem, with version constraint `~> 7.0.0`. + * For detail on version constraints, see the `VersionConstraint` class. + */ + class Gem extends MethodCall { + Gem() { this.getMethodName() = "gem" and this.getFile() = getGemfile() } + + /** + * Gets the name of the gem in this version constraint. + */ + string getName() { result = this.getArgument(0).getConstantValue().getStringlikeValue() } + + /** + * Gets the `i`th version string for this gem. A single `gem` call may have multiple version constraints, for example: + * + * ```rb + * gem "json", "3.4.0", ">= 3.0" + * ``` + */ + string getVersionString(int i) { + result = this.getArgument(i + 1).getConstantValue().getStringlikeValue() + } + + /** + * Gets a version constraint defined by this call. + */ + VersionConstraint getAVersionConstraint() { result = this.getVersionString(_) } + } + + private newtype TComparator = + TEq() or + TNeq() or + TGt() or + TLt() or + TGeq() or + TLeq() or + TPGeq() + + /** + * A comparison operator in a version constraint. + */ + private class Comparator extends TComparator { + string toString() { result = this.toSourceString() } + + /** + * Gets the representation of the comparator in source code. + * This is defined separately so that we can change the `toString` implementation without breaking `parseConstraint`. + */ + string toSourceString() { + this = TEq() and result = "=" + or + this = TNeq() and result = "!=" + or + this = TGt() and result = ">" + or + this = TLt() and result = "<" + or + this = TGeq() and result = ">=" + or + this = TLeq() and result = "<=" + or + this = TPGeq() and result = "~>" + } + } + + bindingset[s] + private predicate parseExactVersion(string s, string version) { + version = s.regexpCapture("\\s*(\\d+\\.\\d+\\.\\d+)\\s*", 1) + } + + bindingset[s] + private predicate parseConstraint(string s, Comparator c, string version) { + exists(string pattern | pattern = "(=|!=|>=?|<=?|~>)\\s+(.+)" | + c.toSourceString() = s.regexpCapture(pattern, 1) and version = s.regexpCapture(pattern, 2) + ) + } + + /** + * A version constraint in a `gem` call. This consists of a version number and an optional comparator, for example + * `>= 1.2.3`. + */ + class VersionConstraint extends string { + Comparator comp; + string versionString; + + VersionConstraint() { + this = any(Gem g).getVersionString(_) and + ( + parseConstraint(this, comp, versionString) + or + parseExactVersion(this, versionString) and comp = TEq() + ) + } + + /** + * Gets the string defining the version number used in this constraint. + */ + string getVersionString() { result = versionString } + + /** + * Gets the `Version` used in this constraint. + */ + Version getVersion() { result = this.getVersionString() } + + /** + * Holds if `other` is a version which is strictly greater than the range described by this version constraint. + */ + bindingset[other] + predicate before(string other) { + comp = TEq() and this.getVersion().before(other) + or + comp = TLt() and + (this.getVersion().before(other) or this.getVersion().equal(other)) + or + comp = TLeq() and this.getVersion().before(other) + or + // ~> x.y.z <=> >= x.y.z && < x.(y+1).0 + // ~> x.y <=> >= x.y && < (x+1).0 + comp = TPGeq() and + exists(int thisMajor, int thisMinor, int otherMajor, int otherMinor | + thisMajor = this.getVersion().getMajor() and + thisMinor = this.getVersion().getMinor() and + exists(string maj, string mi | normalizeSemver(other, _, maj, mi, _) | + otherMajor = maj.toInt() and otherMinor = mi.toInt() + ) + | + exists(this.getVersion().getPatch()) and + ( + thisMajor < otherMajor + or + thisMajor = otherMajor and + thisMinor < otherMinor + ) + or + not exists(this.getVersion().getPatch()) and + thisMajor < otherMajor + ) + // if the comparator is > or >=, it has no upper bound and therefore isn't guaranteed to be before any other version. + } + } + + /** + * A version number in a version constraint. For example, in the following code + * + * ```rb + * gem "json", ">= 3.4.5" + * ``` + * + * The version is `3.4.5`. + */ + private class Version extends string { + string normalized; + + Version() { + this = any(Gem c).getAVersionConstraint().getVersionString() and + normalized = normalizeSemver(this) + } + + /** + * Holds if this version is strictly before the version defined by `other`. + */ + bindingset[other] + predicate before(string other) { normalized < normalizeSemver(other) } + + /** + * Holds if this versino is equal to the version defined by `other`. + */ + bindingset[other] + predicate equal(string other) { normalized = normalizeSemver(other) } + + /** + * Holds if this version is strictly after the version defined by `other`. + */ + bindingset[other] + predicate after(string other) { normalized > normalizeSemver(other) } + + /** + * Holds if this version defines a patch number. + */ + predicate hasPatch() { exists(getPatch(this)) } + + /** + * Gets the major number of this version. + */ + int getMajor() { result = getMajor(normalized).toInt() } + + /** + * Gets the minor number of this version, if it exists. + */ + int getMinor() { result = getMinor(normalized).toInt() } + + /** + * Gets the patch number of this version, if it exists. + */ + int getPatch() { result = getPatch(normalized).toInt() } + } + + /** + * Normalizes a SemVer string such that the lexicographical ordering + * of two normalized strings is consistent with the SemVer ordering. + * + * Pre-release information and build metadata is not supported. + */ + bindingset[orig] + private predicate normalizeSemver( + string orig, string normalized, string major, string minor, string patch + ) { + major = getMajor(orig) and + ( + minor = getMinor(orig) + or + not exists(getMinor(orig)) and minor = "0" + ) and + ( + patch = getPatch(orig) + or + not exists(getPatch(orig)) and patch = "0" + ) and + normalized = leftPad(major) + "." + leftPad(minor) + "." + leftPad(patch) + } + + bindingset[orig] + private string normalizeSemver(string orig) { normalizeSemver(orig, result, _, _, _) } + + bindingset[s] + private string getMajor(string s) { result = s.regexpCapture("(\\d+).*", 1) } + + bindingset[s] + private string getMinor(string s) { result = s.regexpCapture("(\\d+)\\.(\\d+).*", 2) } + + bindingset[s] + private string getPatch(string s) { result = s.regexpCapture("(\\d+)\\.(\\d+)\\.(\\d+).*", 3) } + + bindingset[str] + private string leftPad(string str) { result = ("000" + str).suffix(str.length()) } +} diff --git a/ruby/ql/lib/codeql/ruby/frameworks/core/Array.qll b/ruby/ql/lib/codeql/ruby/frameworks/core/Array.qll index b2a30beafc3..2da521e54a1 100644 --- a/ruby/ql/lib/codeql/ruby/frameworks/core/Array.qll +++ b/ruby/ql/lib/codeql/ruby/frameworks/core/Array.qll @@ -1855,7 +1855,8 @@ module Enumerable { override predicate propagatesFlow(string input, string output, boolean preservesValue) { input = "Argument[self].Element[any]" and - output = "Argument[block].Parameter[0]" and + // For `Hash#map`, the value flows to parameter 1 + output = "Argument[block].Parameter[0, 1]" and preservesValue = true or input = "Argument[block].ReturnValue" and diff --git a/ruby/ql/lib/codeql/ruby/frameworks/core/Hash.qll b/ruby/ql/lib/codeql/ruby/frameworks/core/Hash.qll index 4871d8d9924..38a9a70f0d3 100644 --- a/ruby/ql/lib/codeql/ruby/frameworks/core/Hash.qll +++ b/ruby/ql/lib/codeql/ruby/frameworks/core/Hash.qll @@ -523,3 +523,15 @@ private class ValuesSummary extends SimpleSummarizedCallable { preservesValue = true } } + +// We don't (yet) track data flow through hash keys, but this is still useful in cases where a +// whole hash(like) object is tainted, such as `ActionController#params`. +private class KeysSummary extends SimpleSummarizedCallable { + KeysSummary() { this = "keys" } + + override predicate propagatesFlow(string input, string output, boolean preservesValue) { + input = "Argument[self]" and + output = "ReturnValue.Element[?]" and + preservesValue = false + } +} diff --git a/ruby/ql/lib/codeql/ruby/frameworks/data/internal/ApiGraphModels.qll b/ruby/ql/lib/codeql/ruby/frameworks/data/internal/ApiGraphModels.qll index dd433152751..8dea3d67bd8 100644 --- a/ruby/ql/lib/codeql/ruby/frameworks/data/internal/ApiGraphModels.qll +++ b/ruby/ql/lib/codeql/ruby/frameworks/data/internal/ApiGraphModels.qll @@ -267,7 +267,7 @@ private predicate summaryModel(string type, string path, string input, string ou } /** Holds if a type model exists for the given parameters. */ -private predicate typeModel(string type1, string type2, string path) { +predicate typeModel(string type1, string type2, string path) { exists(string row | typeModel(row) and row.splitAt(";", 0) = type1 and @@ -435,7 +435,7 @@ private API::Node getNodeFromType(string type) { * Gets the API node identified by the first `n` tokens of `path` in the given `(type, path)` tuple. */ pragma[nomagic] -private API::Node getNodeFromPath(string type, AccessPath path, int n) { +API::Node getNodeFromPath(string type, AccessPath path, int n) { isRelevantFullPath(type, path) and ( n = 0 and diff --git a/ruby/ql/lib/codeql/ruby/security/UnsafeHtmlConstructionCustomizations.qll b/ruby/ql/lib/codeql/ruby/security/UnsafeHtmlConstructionCustomizations.qll index 45a1c00befe..6fd15647ee3 100644 --- a/ruby/ql/lib/codeql/ruby/security/UnsafeHtmlConstructionCustomizations.qll +++ b/ruby/ql/lib/codeql/ruby/security/UnsafeHtmlConstructionCustomizations.qll @@ -7,6 +7,7 @@ private import ruby private import codeql.ruby.ApiGraphs private import codeql.ruby.frameworks.core.Gem::Gem as Gem +private import codeql.ruby.security.XSS::ReflectedXss as ReflectedXss private import codeql.ruby.typetracking.TypeTracking /** @@ -34,7 +35,11 @@ module UnsafeHtmlConstruction { abstract string getSinkType(); } - private import codeql.ruby.security.XSS::ReflectedXss as ReflectedXss + /** A sanitizer for HTML constructed from library input vulnerabilities. */ + abstract class Sanitizer extends DataFlow::Node { } + + /** A sanitizer from the reflected-xss query, which is also a sanitizer for unsafe HTML construction. */ + private class ReflectedXssSanitizers extends Sanitizer instanceof ReflectedXss::Sanitizer { } /** Gets a node that eventually ends up in the XSS `sink`. */ private DataFlow::Node getANodeThatEndsInXssSink(ReflectedXss::Sink sink) { diff --git a/ruby/ql/lib/codeql/ruby/security/UnsafeHtmlConstructionQuery.qll b/ruby/ql/lib/codeql/ruby/security/UnsafeHtmlConstructionQuery.qll index 71e7b5d33db..9d655a6d16a 100644 --- a/ruby/ql/lib/codeql/ruby/security/UnsafeHtmlConstructionQuery.qll +++ b/ruby/ql/lib/codeql/ruby/security/UnsafeHtmlConstructionQuery.qll @@ -23,10 +23,7 @@ deprecated class Configuration extends TaintTracking::Configuration { override predicate isSink(DataFlow::Node sink) { sink instanceof Sink } - override predicate isSanitizer(DataFlow::Node node) { - node instanceof StringConstCompareBarrier or - node instanceof StringConstArrayInclusionCallBarrier - } + override predicate isSanitizer(DataFlow::Node node) { node instanceof Sanitizer } // override to require the path doesn't have unmatched return steps override DataFlow::FlowFeature getAFeature() { @@ -39,10 +36,7 @@ private module UnsafeHtmlConstructionConfig implements DataFlow::ConfigSig { predicate isSink(DataFlow::Node sink) { sink instanceof Sink } - predicate isBarrier(DataFlow::Node node) { - node instanceof StringConstCompareBarrier or - node instanceof StringConstArrayInclusionCallBarrier - } + predicate isBarrier(DataFlow::Node node) { node instanceof Sanitizer } // override to require the path doesn't have unmatched return steps DataFlow::FlowFeature getAFeature() { result instanceof DataFlow::FeatureHasSourceCallContext } diff --git a/ruby/ql/lib/codeql/ruby/security/XSS.qll b/ruby/ql/lib/codeql/ruby/security/XSS.qll index e5cf48bd0ef..e8d50aabc1e 100644 --- a/ruby/ql/lib/codeql/ruby/security/XSS.qll +++ b/ruby/ql/lib/codeql/ruby/security/XSS.qll @@ -248,6 +248,19 @@ private module Shared { or isFlowFromHelperMethod(node1, node2) } + + private predicate htmlSafeGuard(CfgNodes::AstCfgNode guard, CfgNode testedNode, boolean branch) { + exists(DataFlow::CallNode html_safe_call | html_safe_call.getMethodName() = "html_safe?" | + guard = html_safe_call.asExpr() and + testedNode = html_safe_call.getReceiver().asExpr() and + branch = true + ) + } + + /** A guard that calls `.html_safe?` to check whether the string is already HTML-safe. */ + private class HtmlSafeGuard extends Sanitizer { + HtmlSafeGuard() { this = DataFlow::BarrierGuard::getABarrierNode() } + } } /** diff --git a/ruby/ql/lib/qlpack.yml b/ruby/ql/lib/qlpack.yml index 7d409b83adb..ad8045b2c74 100644 --- a/ruby/ql/lib/qlpack.yml +++ b/ruby/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ruby-all -version: 0.8.10-dev +version: 0.8.14-dev groups: ruby extractor: ruby dbscheme: ruby.dbscheme diff --git a/ruby/ql/lib/ruby.dbscheme b/ruby/ql/lib/ruby.dbscheme index f9f0f4023e4..440de75c71e 100644 --- a/ruby/ql/lib/ruby.dbscheme +++ b/ruby/ql/lib/ruby.dbscheme @@ -1421,14 +1421,16 @@ case @ruby_token.kind of @ruby_ast_node = @ruby_alias | @ruby_alternative_pattern | @ruby_argument_list | @ruby_array | @ruby_array_pattern | @ruby_as_pattern | @ruby_assignment | @ruby_bare_string | @ruby_bare_symbol | @ruby_begin | @ruby_begin_block | @ruby_binary | @ruby_block | @ruby_block_argument | @ruby_block_body | @ruby_block_parameter | @ruby_block_parameters | @ruby_body_statement | @ruby_break | @ruby_call | @ruby_case__ | @ruby_case_match | @ruby_chained_string | @ruby_class | @ruby_complex | @ruby_conditional | @ruby_delimited_symbol | @ruby_destructured_left_assignment | @ruby_destructured_parameter | @ruby_do | @ruby_do_block | @ruby_element_reference | @ruby_else | @ruby_elsif | @ruby_end_block | @ruby_ensure | @ruby_exception_variable | @ruby_exceptions | @ruby_expression_reference_pattern | @ruby_find_pattern | @ruby_for | @ruby_hash | @ruby_hash_pattern | @ruby_hash_splat_argument | @ruby_hash_splat_parameter | @ruby_heredoc_body | @ruby_if | @ruby_if_guard | @ruby_if_modifier | @ruby_in | @ruby_in_clause | @ruby_interpolation | @ruby_keyword_parameter | @ruby_keyword_pattern | @ruby_lambda | @ruby_lambda_parameters | @ruby_left_assignment_list | @ruby_match_pattern | @ruby_method | @ruby_method_parameters | @ruby_module | @ruby_next | @ruby_operator_assignment | @ruby_optional_parameter | @ruby_pair | @ruby_parenthesized_pattern | @ruby_parenthesized_statements | @ruby_pattern | @ruby_program | @ruby_range | @ruby_rational | @ruby_redo | @ruby_regex | @ruby_rescue | @ruby_rescue_modifier | @ruby_rest_assignment | @ruby_retry | @ruby_return | @ruby_right_assignment_list | @ruby_scope_resolution | @ruby_setter | @ruby_singleton_class | @ruby_singleton_method | @ruby_splat_argument | @ruby_splat_parameter | @ruby_string__ | @ruby_string_array | @ruby_subshell | @ruby_superclass | @ruby_symbol_array | @ruby_test_pattern | @ruby_then | @ruby_token | @ruby_unary | @ruby_undef | @ruby_unless | @ruby_unless_guard | @ruby_unless_modifier | @ruby_until | @ruby_until_modifier | @ruby_variable_reference_pattern | @ruby_when | @ruby_while | @ruby_while_modifier | @ruby_yield -@ruby_ast_node_parent = @file | @ruby_ast_node +ruby_ast_node_location( + unique int node: @ruby_ast_node ref, + int loc: @location_default ref +); #keyset[parent, parent_index] -ruby_ast_node_info( +ruby_ast_node_parent( unique int node: @ruby_ast_node ref, - int parent: @ruby_ast_node_parent ref, - int parent_index: int ref, - int loc: @location_default ref + int parent: @ruby_ast_node ref, + int parent_index: int ref ); /*- Erb dbscheme -*/ @@ -1497,13 +1499,15 @@ case @erb_token.kind of @erb_ast_node = @erb_comment_directive | @erb_directive | @erb_graphql_directive | @erb_output_directive | @erb_template | @erb_token -@erb_ast_node_parent = @erb_ast_node | @file - -#keyset[parent, parent_index] -erb_ast_node_info( +erb_ast_node_location( unique int node: @erb_ast_node ref, - int parent: @erb_ast_node_parent ref, - int parent_index: int ref, int loc: @location_default ref ); +#keyset[parent, parent_index] +erb_ast_node_parent( + unique int node: @erb_ast_node ref, + int parent: @erb_ast_node ref, + int parent_index: int ref +); + diff --git a/ruby/ql/lib/ruby.dbscheme.stats b/ruby/ql/lib/ruby.dbscheme.stats index e7d7f5e27eb..fd8850293b4 100644 --- a/ruby/ql/lib/ruby.dbscheme.stats +++ b/ruby/ql/lib/ruby.dbscheme.stats @@ -5,7 +5,7 @@ @diagnostic_error - 156 + 0 @diagnostic_info @@ -13,15 +13,15 @@ @diagnostic_warning - 0 + 188 @erb_comment_directive - 40 + 26 @erb_directive - 1225 + 1108 @erb_graphql_directive @@ -29,43 +29,43 @@ @erb_output_directive - 3555 + 3270 @erb_reserved_word - 9567 + 8756 @erb_template - 1531 + 1508 @erb_token_code - 4781 + 4378 @erb_token_comment - 27 + 26 @erb_token_content - 4977 + 4555 @file - 18245 + 18724 @folder - 5002 + 5165 @location_default - 9022418 + 9223392 @ruby_alias - 1307 + 1289 @ruby_alternative_pattern @@ -73,35 +73,35 @@ @ruby_argument_list - 691738 + 706474 @ruby_array - 248289 + 249320 @ruby_array_pattern - 178 + 179 @ruby_as_pattern - 153 + 156 @ruby_assignment - 137583 + 141202 @ruby_bare_string - 12799 + 13136 @ruby_bare_symbol - 7967 + 8435 @ruby_begin - 2590 + 2610 @ruby_begin_block @@ -109,143 +109,143 @@ @ruby_binary_ampersand - 570 + 630 @ruby_binary_ampersandampersand - 8179 + 8142 @ruby_binary_and - 1233 + 1189 @ruby_binary_bangequal - 1459 + 1434 @ruby_binary_bangtilde - 168 + 176 @ruby_binary_caret - 160 + 153 @ruby_binary_equalequal - 32934 + 33761 @ruby_binary_equalequalequal - 656 + 689 @ruby_binary_equaltilde - 1800 + 1823 @ruby_binary_langle - 1181 + 1101 @ruby_binary_langleequal - 407 + 431 @ruby_binary_langleequalrangle - 778 + 764 @ruby_binary_langlelangle - 10731 + 10779 @ruby_binary_minus - 2691 + 2747 @ruby_binary_or - 635 + 647 @ruby_binary_percent - 979 + 986 @ruby_binary_pipe - 1000 + 1058 @ruby_binary_pipepipe - 7430 + 7336 @ruby_binary_plus - 6453 + 6593 @ruby_binary_rangle - 2129 + 2114 @ruby_binary_rangleequal - 595 + 597 @ruby_binary_ranglerangle - 234 + 259 @ruby_binary_slash - 1269 + 1169 @ruby_binary_star - 3560 + 3490 @ruby_binary_starstar - 1358 + 1227 @ruby_block - 101695 + 104143 @ruby_block_argument - 6477 + 6547 @ruby_block_body - 101379 + 103820 @ruby_block_parameter - 2569 + 2543 @ruby_block_parameters - 24941 + 25884 @ruby_body_statement - 208998 + 213896 @ruby_break - 3434 + 3414 @ruby_call - 1006605 + 1027501 @ruby_case__ - 1289 + 1319 @ruby_case_match - 234 + 232 @ruby_chained_string @@ -253,47 +253,47 @@ @ruby_class - 17258 + 17441 @ruby_complex - 66 + 72 @ruby_conditional - 2954 + 2896 @ruby_delimited_symbol - 1258 + 1247 @ruby_destructured_left_assignment - 107 + 108 @ruby_destructured_parameter - 194 + 208 @ruby_do - 1681 + 1675 @ruby_do_block - 142452 + 145534 @ruby_element_reference - 80778 + 82606 @ruby_else - 7505 + 7681 @ruby_elsif - 1510 + 1583 @ruby_end_block @@ -301,15 +301,15 @@ @ruby_ensure - 3981 + 4106 @ruby_exception_variable - 924 + 935 @ruby_exceptions - 1938 + 1904 @ruby_expression_reference_pattern @@ -321,31 +321,31 @@ @ruby_for - 158 + 136 @ruby_hash - 40888 + 41915 @ruby_hash_pattern - 75 + 73 @ruby_hash_splat_argument - 1902 + 1989 @ruby_hash_splat_parameter - 1596 + 1574 @ruby_heredoc_body - 6178 + 6934 @ruby_if - 16391 + 16164 @ruby_if_guard @@ -353,39 +353,39 @@ @ruby_if_modifier - 14611 + 14541 @ruby_in - 158 + 136 @ruby_in_clause - 385 + 381 @ruby_interpolation - 38305 + 38493 @ruby_keyword_parameter - 4144 + 4763 @ruby_keyword_pattern - 80 + 77 @ruby_lambda - 7948 + 8187 @ruby_lambda_parameters - 1762 + 1811 @ruby_left_assignment_list - 2994 + 3100 @ruby_match_pattern @@ -393,39 +393,39 @@ @ruby_method - 102124 + 103532 @ruby_method_parameters - 30832 + 31208 @ruby_module - 22353 + 22962 @ruby_next - 1902 + 2020 @ruby_operator_assignment_ampersandampersandequal - 90 + 118 @ruby_operator_assignment_ampersandequal - 18 + 17 @ruby_operator_assignment_caretequal - 5 + 6 @ruby_operator_assignment_langlelangleequal - 26 + 19 @ruby_operator_assignment_minusequal - 300 + 305 @ruby_operator_assignment_percentequal @@ -433,19 +433,19 @@ @ruby_operator_assignment_pipeequal - 156 + 164 @ruby_operator_assignment_pipepipeequal - 4190 + 4272 @ruby_operator_assignment_plusequal - 1647 + 1732 @ruby_operator_assignment_ranglerangleequal - 10 + 11 @ruby_operator_assignment_slashequal @@ -453,7 +453,7 @@ @ruby_operator_assignment_starequal - 52 + 42 @ruby_operator_assignment_starstarequal @@ -461,11 +461,11 @@ @ruby_optional_parameter - 6636 + 6556 @ruby_pair - 248347 + 254198 @ruby_parenthesized_pattern @@ -473,27 +473,27 @@ @ruby_parenthesized_statements - 10912 + 11296 @ruby_pattern - 4153 + 4745 @ruby_program - 18219 + 18697 @ruby_range_dotdot - 3136 + 3690 @ruby_range_dotdotdot - 1634 + 1376 @ruby_rational - 138 + 166 @ruby_redo @@ -501,107 +501,107 @@ @ruby_regex - 13350 + 13680 @ruby_rescue - 2346 + 2299 @ruby_rescue_modifier - 448 + 458 @ruby_reserved_word - 3820965 + 3894800 @ruby_rest_assignment - 401 + 414 @ruby_retry - 60 + 58 @ruby_return - 8197 + 7979 @ruby_right_assignment_list - 1224 + 1280 @ruby_scope_resolution - 84884 + 87113 @ruby_setter - 653 + 656 @ruby_singleton_class - 663 + 677 @ruby_singleton_method - 6459 + 6325 @ruby_splat_argument - 3454 + 3606 @ruby_splat_parameter - 3192 + 3014 @ruby_string__ - 485218 + 490602 @ruby_string_array - 4213 + 4287 @ruby_subshell - 365 + 359 @ruby_superclass - 13666 + 13806 @ruby_symbol_array - 2170 + 2240 @ruby_test_pattern - 4 + 5 @ruby_then - 22451 + 22229 @ruby_token_character - 432 + 440 @ruby_token_class_variable - 868 + 887 @ruby_token_comment - 190672 + 194426 @ruby_token_constant - 294731 + 302373 @ruby_token_empty_statement - 55 + 58 @ruby_token_encoding @@ -609,11 +609,11 @@ @ruby_token_escape_sequence - 77855 + 80835 @ruby_token_false - 17433 + 17355 @ruby_token_file @@ -621,51 +621,51 @@ @ruby_token_float - 8491 + 8689 @ruby_token_forward_argument - 79 + 194 @ruby_token_forward_parameter - 144 + 287 @ruby_token_global_variable - 7342 + 7165 @ruby_token_hash_key_symbol - 241330 + 246826 @ruby_token_hash_splat_nil - 11 + 14 @ruby_token_heredoc_beginning - 6177 + 6933 @ruby_token_heredoc_content - 12929 + 12986 @ruby_token_heredoc_end - 6178 + 6934 @ruby_token_identifier - 1551542 + 1590836 @ruby_token_instance_variable - 87122 + 89852 @ruby_token_integer - 306586 + 310358 @ruby_token_line @@ -673,59 +673,59 @@ @ruby_token_nil - 18636 + 19333 @ruby_token_operator - 849 + 878 @ruby_token_self - 13755 + 14094 @ruby_token_simple_symbol - 261524 + 267609 @ruby_token_string_content - 502063 + 510164 @ruby_token_super - 5313 + 5329 @ruby_token_true - 24277 + 25065 @ruby_token_uninterpreted 11 - + @ruby_unary_bang - 5952 + 5909 @ruby_unary_definedquestion - 1301 + 1369 @ruby_unary_minus - 9633 + 9830 @ruby_unary_not - 190 + 172 @ruby_unary_plus - 1427 + 1394 @ruby_unary_tilde - 98 + 97 @ruby_undef @@ -733,7 +733,7 @@ @ruby_unless - 2663 + 2723 @ruby_unless_guard @@ -741,15 +741,15 @@ @ruby_unless_modifier - 3505 + 3416 @ruby_until - 123 + 126 @ruby_until_modifier - 234 + 238 @ruby_variable_reference_pattern @@ -757,19 +757,19 @@ @ruby_when - 3392 + 3882 @ruby_while - 1400 + 1413 @ruby_while_modifier - 194 + 198 @ruby_yield - 2477 + 2450 @yaml_alias_node @@ -794,15 +794,15 @@ containerparent - 23222 + 23863 parent - 5002 + 5165 child - 23222 + 23863 @@ -816,37 +816,37 @@ 1 2 - 2290 + 2394 2 3 - 934 + 968 3 4 - 421 + 417 4 5 - 315 + 295 5 7 - 408 + 443 7 14 - 408 + 403 14 126 - 223 + 242 @@ -862,7 +862,7 @@ 1 2 - 23222 + 23863 @@ -872,11 +872,11 @@ diagnostics - 157 + 188 id - 157 + 188 severity @@ -888,15 +888,15 @@ error_message - 26 + 53 full_error_message - 118 + 161 location - 157 + 174 @@ -910,7 +910,7 @@ 1 2 - 157 + 188 @@ -926,7 +926,7 @@ 1 2 - 157 + 188 @@ -942,7 +942,7 @@ 1 2 - 157 + 188 @@ -958,7 +958,7 @@ 1 2 - 157 + 188 @@ -974,7 +974,7 @@ 1 2 - 157 + 188 @@ -988,8 +988,8 @@ 12 - 12 - 13 + 14 + 15 13 @@ -1020,8 +1020,8 @@ 12 - 2 - 3 + 4 + 5 13 @@ -1036,8 +1036,8 @@ 12 - 9 - 10 + 12 + 13 13 @@ -1052,8 +1052,8 @@ 12 - 12 - 13 + 13 + 14 13 @@ -1068,8 +1068,8 @@ 12 - 12 - 13 + 14 + 15 13 @@ -1100,8 +1100,8 @@ 12 - 2 - 3 + 4 + 5 13 @@ -1116,8 +1116,8 @@ 12 - 9 - 10 + 12 + 13 13 @@ -1132,8 +1132,8 @@ 12 - 12 - 13 + 13 + 14 13 @@ -1150,11 +1150,16 @@ 1 2 + 26 + + + 2 + 3 13 - 11 - 12 + 10 + 11 13 @@ -1171,7 +1176,7 @@ 1 2 - 26 + 53 @@ -1187,7 +1192,7 @@ 1 2 - 26 + 53 @@ -1203,6 +1208,11 @@ 1 2 + 26 + + + 2 + 3 13 @@ -1224,11 +1234,16 @@ 1 2 + 26 + + + 2 + 3 13 - 11 - 12 + 10 + 11 13 @@ -1245,12 +1260,12 @@ 1 2 - 78 + 134 2 3 - 39 + 26 @@ -1266,7 +1281,7 @@ 1 2 - 118 + 161 @@ -1282,7 +1297,7 @@ 1 2 - 118 + 161 @@ -1298,7 +1313,7 @@ 1 2 - 118 + 161 @@ -1314,12 +1329,12 @@ 1 2 - 78 + 134 2 3 - 39 + 26 @@ -1335,7 +1350,12 @@ 1 2 - 157 + 161 + + + 2 + 3 + 13 @@ -1351,7 +1371,7 @@ 1 2 - 157 + 174 @@ -1367,7 +1387,7 @@ 1 2 - 157 + 174 @@ -1383,7 +1403,12 @@ 1 2 - 157 + 161 + + + 2 + 3 + 13 @@ -1399,7 +1424,12 @@ 1 2 - 157 + 161 + + + 2 + 3 + 13 @@ -1408,24 +1438,73 @@ - erb_ast_node_info - 24486 + erb_ast_node_location + 22409 node - 24486 - - - parent - 5532 - - - parent_index - 608 + 22409 loc - 24484 + 22407 + + + + + node + loc + + + 12 + + + 1 + 2 + 22409 + + + + + + + loc + node + + + 12 + + + 1 + 2 + 22404 + + + 2 + 3 + 2 + + + + + + + + + erb_ast_node_parent + 22069 + + + node + 22069 + + + parent + 4718 + + + parent_index + 564 @@ -1439,7 +1518,7 @@ 1 2 - 24486 + 22069 @@ -1455,23 +1534,7 @@ 1 2 - 24486 - - - - - - - node - loc - - - 12 - - - 1 - 2 - 24486 + 22069 @@ -1487,17 +1550,17 @@ 1 3 - 384 + 9 3 4 - 4908 + 4494 4 240 - 239 + 215 @@ -1513,43 +1576,17 @@ 1 3 - 384 + 9 3 4 - 4908 + 4494 4 240 - 239 - - - - - - - parent - loc - - - 12 - - - 1 - 3 - 384 - - - 3 - 4 - 4908 - - - 4 - 240 - 239 + 215 @@ -1565,62 +1602,57 @@ 1 2 - 33 + 25 2 3 - 84 + 33 3 4 - 12 + 33 4 5 - 101 + 122 5 6 - 53 + 96 6 - 7 - 50 - - - 7 8 - 43 + 40 8 - 14 - 50 + 13 + 42 - 14 - 23 - 53 + 13 + 20 + 44 - 24 - 39 - 45 + 21 + 31 + 42 - 41 - 62 - 45 + 35 + 55 + 44 - 65 - 2173 - 33 + 55 + 1998 + 37 @@ -1636,191 +1668,57 @@ 1 2 - 33 + 25 2 3 - 84 + 33 3 4 - 12 + 33 4 5 - 101 + 122 5 6 - 53 + 96 6 - 7 - 50 - - - 7 8 - 43 + 40 8 - 14 - 50 + 13 + 42 - 14 - 23 - 53 + 13 + 20 + 44 - 24 - 39 - 45 + 21 + 31 + 42 - 41 - 62 - 45 + 35 + 55 + 44 - 65 - 2173 - 33 - - - - - - - parent_index - loc - - - 12 - - - 1 - 2 - 33 - - - 2 - 3 - 84 - - - 3 - 4 - 12 - - - 4 - 5 - 101 - - - 5 - 6 - 53 - - - 6 - 7 - 50 - - - 7 - 8 - 43 - - - 8 - 14 - 50 - - - 14 - 23 - 53 - - - 24 - 39 - 45 - - - 41 - 62 - 45 - - - 65 - 2172 - 33 - - - - - - - loc - node - - - 12 - - - 1 - 2 - 24481 - - - 2 - 3 - 2 - - - - - - - loc - parent - - - 12 - - - 1 - 2 - 24481 - - - 2 - 3 - 2 - - - - - - - loc - parent_index - - - 12 - - - 1 - 2 - 24484 + 55 + 1998 + 37 @@ -1830,15 +1728,15 @@ erb_comment_directive_child - 27 + 26 erb_comment_directive - 27 + 26 child - 27 + 26 @@ -1852,7 +1750,7 @@ 1 2 - 27 + 26 @@ -1868,7 +1766,7 @@ 1 2 - 27 + 26 @@ -1878,26 +1776,26 @@ erb_comment_directive_def - 27 + 26 id - 27 + 26 erb_directive_child - 1225 + 1108 erb_directive - 1225 + 1108 child - 1225 + 1108 @@ -1911,7 +1809,7 @@ 1 2 - 1225 + 1108 @@ -1927,7 +1825,7 @@ 1 2 - 1225 + 1108 @@ -1937,11 +1835,11 @@ erb_directive_def - 1225 + 1108 id - 1225 + 1108 @@ -2007,15 +1905,15 @@ erb_output_directive_child - 3555 + 3270 erb_output_directive - 3555 + 3270 child - 3555 + 3270 @@ -2029,7 +1927,7 @@ 1 2 - 3555 + 3270 @@ -2045,7 +1943,7 @@ 1 2 - 3555 + 3270 @@ -2055,30 +1953,30 @@ erb_output_directive_def - 3555 + 3270 id - 3555 + 3270 erb_template_child - 9761 + 8934 erb_template - 374 + 340 index - 608 + 564 child - 9761 + 8934 @@ -2092,53 +1990,58 @@ 1 3 - 10 + 9 3 4 - 124 + 115 4 7 - 25 + 21 7 - 11 - 30 - - - 11 - 15 - 33 - - - 15 - 26 - 30 - - - 27 - 35 - 30 - - - 35 - 50 - 33 - - - 53 - 78 - 30 - - - 82 - 240 + 10 25 + + 10 + 14 + 28 + + + 14 + 24 + 25 + + + 24 + 33 + 25 + + + 33 + 44 + 25 + + + 45 + 64 + 25 + + + 67 + 149 + 25 + + + 200 + 240 + 9 + @@ -2153,53 +2056,58 @@ 1 3 - 10 + 9 3 4 - 124 + 115 4 7 - 25 + 21 7 - 11 - 30 - - - 11 - 15 - 33 - - - 15 - 26 - 30 - - - 27 - 35 - 30 - - - 35 - 50 - 33 - - - 53 - 78 - 30 - - - 82 - 240 + 10 25 + + 10 + 14 + 28 + + + 14 + 24 + 25 + + + 24 + 33 + 25 + + + 33 + 44 + 25 + + + 45 + 64 + 25 + + + 67 + 149 + 25 + + + 200 + 240 + 9 + @@ -2214,62 +2122,57 @@ 1 2 - 33 + 25 2 3 - 84 + 33 3 4 - 12 + 33 4 5 - 101 + 122 5 6 - 53 + 96 6 - 7 - 50 - - - 7 8 - 43 + 40 8 - 14 - 50 + 13 + 42 - 14 - 23 - 53 + 13 + 20 + 44 - 24 - 39 - 45 + 21 + 31 + 42 - 41 - 62 - 45 + 35 + 55 + 44 - 65 - 148 - 33 + 55 + 145 + 37 @@ -2285,62 +2188,57 @@ 1 2 - 33 + 25 2 3 - 84 + 33 3 4 - 12 + 33 4 5 - 101 + 122 5 6 - 53 + 96 6 - 7 - 50 - - - 7 8 - 43 + 40 8 - 14 - 50 + 13 + 42 - 14 - 23 - 53 + 13 + 20 + 44 - 24 - 39 - 45 + 21 + 31 + 42 - 41 - 62 - 45 + 35 + 55 + 44 - 65 - 148 - 33 + 55 + 145 + 37 @@ -2356,7 +2254,7 @@ 1 2 - 9761 + 8934 @@ -2372,7 +2270,7 @@ 1 2 - 9761 + 8934 @@ -2382,30 +2280,30 @@ erb_template_def - 1531 + 1508 id - 1531 + 1508 erb_tokeninfo - 19328 + 17690 id - 19328 + 17690 kind - 10 + 7 value - 5305 + 4822 @@ -2419,7 +2317,7 @@ 1 2 - 19328 + 17690 @@ -2435,7 +2333,7 @@ 1 2 - 19328 + 17690 @@ -2449,23 +2347,18 @@ 12 - 1 - 2 + 1853 + 1854 2 - 1877 - 1878 + 1928 + 1929 2 - 1954 - 1955 - 2 - - - 3756 - 3757 + 3706 + 3707 2 @@ -2480,23 +2373,18 @@ 12 - 1 - 2 + 5 + 6 2 - 6 - 7 + 984 + 985 2 - 992 - 993 - 2 - - - 1084 - 1085 + 1052 + 1053 2 @@ -2513,17 +2401,17 @@ 1 2 - 4289 + 3879 2 3 - 636 + 600 3 - 1811 - 379 + 1786 + 342 @@ -2539,7 +2427,7 @@ 1 2 - 5305 + 4822 @@ -2549,15 +2437,15 @@ files - 18245 + 18724 id - 18245 + 18724 name - 18245 + 18724 @@ -2571,7 +2459,7 @@ 1 2 - 18245 + 18724 @@ -2587,7 +2475,7 @@ 1 2 - 18245 + 18724 @@ -2597,15 +2485,15 @@ folders - 5002 + 5165 id - 5002 + 5165 name - 5002 + 5165 @@ -2619,7 +2507,7 @@ 1 2 - 5002 + 5165 @@ -2635,7 +2523,7 @@ 1 2 - 5002 + 5165 @@ -2645,31 +2533,31 @@ locations_default - 9022418 + 9223392 id - 9022418 + 9223392 file - 18245 + 18724 beginLine - 31147 + 31826 beginColumn - 5186 + 5300 endLine - 31147 + 31826 endColumn - 5292 + 5407 @@ -2683,7 +2571,7 @@ 1 2 - 9022418 + 9223392 @@ -2699,7 +2587,7 @@ 1 2 - 9022418 + 9223392 @@ -2715,7 +2603,7 @@ 1 2 - 9022418 + 9223392 @@ -2731,7 +2619,7 @@ 1 2 - 9022418 + 9223392 @@ -2747,7 +2635,7 @@ 1 2 - 9022418 + 9223392 @@ -2763,72 +2651,72 @@ 1 32 - 1434 + 1479 32 47 - 1382 + 1412 47 - 70 - 1369 + 71 + 1452 - 70 - 91 - 1369 + 71 + 94 + 1439 - 91 - 117 - 1369 + 94 + 119 + 1412 - 117 - 159 - 1395 + 119 + 161 + 1412 - 159 - 208 - 1408 + 161 + 209 + 1466 - 208 - 256 - 1369 + 209 + 260 + 1439 - 256 - 326 - 1408 + 260 + 333 + 1412 - 327 - 444 - 1382 + 336 + 445 + 1425 - 444 - 671 - 1369 + 445 + 679 + 1412 - 671 - 1185 - 1369 + 684 + 1221 + 1412 - 1186 - 4592 - 1369 + 1228 + 5812 + 1412 - 4636 + 7145 22841 - 250 + 134 @@ -2844,67 +2732,67 @@ 1 7 - 1342 + 1398 7 10 - 1632 + 1641 10 13 - 1434 + 1479 13 16 - 1592 + 1668 16 20 - 1579 + 1600 20 - 24 - 1369 + 25 + 1587 - 24 - 30 - 1448 + 25 + 31 + 1573 - 30 - 37 - 1487 + 31 + 38 + 1506 - 37 - 47 - 1395 + 38 + 49 + 1506 - 47 - 64 - 1382 + 49 + 69 + 1425 - 64 - 99 - 1382 + 69 + 117 + 1425 - 100 - 207 - 1382 + 119 + 275 + 1412 - 207 + 276 2339 - 816 + 497 @@ -2920,67 +2808,67 @@ 1 16 - 1487 + 1533 16 - 23 - 1395 + 24 + 1493 - 23 - 30 - 1382 + 24 + 31 + 1412 - 30 - 39 - 1369 + 31 + 40 + 1573 - 39 - 45 - 1527 + 40 + 46 + 1452 - 45 + 46 52 - 1566 + 1533 52 - 59 - 1369 + 60 + 1587 - 59 - 67 - 1566 + 60 + 68 + 1721 - 67 - 73 - 1448 + 68 + 76 + 1533 - 73 - 82 - 1408 + 76 + 85 + 1452 - 82 - 94 - 1448 + 85 + 98 + 1412 - 94 - 114 - 1395 + 98 + 122 + 1412 - 114 + 122 357 - 882 + 605 @@ -2996,67 +2884,67 @@ 1 7 - 1342 + 1398 7 10 - 1592 + 1600 10 13 - 1461 + 1506 13 16 - 1566 + 1641 16 20 - 1592 + 1614 20 - 24 - 1382 + 25 + 1600 - 24 - 30 - 1461 + 25 + 31 + 1587 - 30 - 37 - 1487 + 31 + 38 + 1506 - 37 - 47 - 1395 + 38 + 49 + 1506 - 47 - 64 - 1382 + 49 + 69 + 1425 - 64 - 99 - 1382 + 69 + 117 + 1425 - 100 - 207 - 1382 + 119 + 275 + 1412 - 207 + 276 2339 - 816 + 497 @@ -3071,68 +2959,68 @@ 1 - 20 - 1632 + 19 + 1412 - 20 - 28 - 1395 + 19 + 27 + 1587 - 28 - 36 - 1513 + 27 + 35 + 1425 - 36 - 45 - 1434 + 35 + 44 + 1452 - 45 - 51 - 1487 + 44 + 50 + 1600 - 51 - 58 - 1513 + 50 + 57 + 1533 - 58 - 66 - 1500 + 57 + 64 + 1439 - 66 - 73 - 1500 + 64 + 71 + 1412 - 73 - 80 - 1448 + 71 + 78 + 1533 - 80 - 89 - 1421 + 78 + 87 + 1520 - 89 - 102 - 1474 + 87 + 99 + 1493 - 102 - 128 - 1369 + 99 + 118 + 1425 - 128 + 118 367 - 552 + 887 @@ -3148,72 +3036,72 @@ 1 2 - 1566 + 1600 2 5 - 1592 + 1627 5 6 - 3409 + 3484 6 10 - 2646 + 2676 10 17 - 2804 + 2878 17 24 - 2409 + 2421 24 43 - 2382 + 2448 43 78 - 2369 + 2394 78 - 118 - 2395 + 117 + 2394 - 118 - 174 - 2343 + 117 + 168 + 2407 - 174 - 268 - 2356 + 169 + 262 + 2421 - 271 - 751 - 2343 + 262 + 703 + 2394 - 757 - 7072 - 2343 + 708 + 5999 + 2394 - 7434 - 10856 - 184 + 6159 + 10971 + 282 @@ -3229,47 +3117,47 @@ 1 2 - 10083 + 10304 2 3 - 5555 + 5609 3 - 6 - 2343 + 7 + 2838 - 6 - 9 - 2330 + 7 + 10 + 2663 - 9 - 14 - 2501 + 10 + 15 + 2407 - 14 - 21 - 2356 + 15 + 23 + 2394 - 21 - 44 - 2356 + 23 + 58 + 2407 - 44 - 179 - 2356 + 58 + 287 + 2394 - 180 - 1386 - 1263 + 296 + 1392 + 807 @@ -3285,72 +3173,72 @@ 1 2 - 1566 + 1600 2 3 - 1474 + 1520 3 4 - 2356 + 2394 4 6 - 2606 + 2650 6 8 - 1777 + 1775 8 13 - 2711 + 2811 13 18 - 2474 + 2448 18 29 - 2540 + 2582 29 44 - 2343 + 2475 44 56 - 2422 + 2582 56 - 68 - 2409 + 69 + 2475 - 68 - 85 - 2448 + 69 + 86 + 2461 - 85 - 112 - 2369 + 86 + 113 + 2407 - 112 + 113 205 - 1645 + 1641 @@ -3366,42 +3254,42 @@ 1 2 - 11123 + 11299 2 3 - 6411 + 6591 3 4 - 2369 + 2380 4 5 - 1685 + 1815 5 7 - 2553 + 2623 7 - 11 - 2856 + 10 + 2367 - 11 - 19 - 2488 + 10 + 17 + 2461 - 19 - 242 - 1658 + 17 + 240 + 2286 @@ -3417,72 +3305,72 @@ 1 2 - 1566 + 1600 2 4 - 1592 + 1627 4 5 - 3462 + 3537 5 7 - 2119 + 2152 7 11 - 2698 + 2744 11 15 - 2409 + 2461 15 24 - 2395 + 2394 24 39 - 2369 + 2421 39 52 - 2409 + 2448 52 65 - 2369 + 2542 65 - 79 - 2474 + 80 + 2555 - 79 - 101 - 2395 + 80 + 102 + 2434 - 101 - 135 - 2356 + 102 + 136 + 2421 - 135 - 208 - 526 + 136 + 209 + 484 @@ -3498,88 +3386,7 @@ 1 2 - 473 - - - 2 - 3 - 592 - - - 3 - 4 - 250 - - - 4 - 5 - 276 - - - 5 - 6 - 315 - - - 6 - 9 - 460 - - - 9 - 16 - 408 - - - 16 - 44 - 394 - - - 45 - 177 - 394 - - - 180 - 796 - 394 - - - 816 - 3017 - 394 - - - 3017 - 8160 - 394 - - - 8349 - 25541 - 394 - - - 28440 - 38986 - 39 - - - - - - - beginColumn - file - - - 12 - - - 1 - 2 - 1434 + 484 2 @@ -3589,42 +3396,123 @@ 3 4 - 473 + 255 + + + 4 + 5 + 269 + + + 5 + 6 + 336 + + + 6 + 9 + 457 + + + 9 + 16 + 430 + + + 16 + 43 + 403 + + + 46 + 182 + 403 + + + 184 + 794 + 403 + + + 811 + 3014 + 403 + + + 3015 + 8230 + 403 + + + 8347 + 25670 + 403 + + + 28494 + 38951 + 40 + + + + + + + beginColumn + file + + + 12 + + + 1 + 2 + 1466 + + + 2 + 3 + 605 + + + 3 + 4 + 484 4 9 - 394 + 417 9 37 - 394 + 403 37 - 120 - 394 + 118 + 403 - 126 - 378 - 394 + 124 + 381 + 403 - 379 - 730 - 394 + 381 + 728 + 403 - 755 - 982 - 394 + 754 + 985 + 403 - 992 - 1386 - 302 + 996 + 1392 + 309 @@ -3640,62 +3528,67 @@ 1 2 - 539 + 551 2 3 - 697 + 712 3 4 - 315 + 322 4 5 - 368 + 363 5 - 8 - 473 + 7 + 363 - 8 - 15 - 421 + 7 + 13 + 457 - 15 - 45 - 394 + 13 + 35 + 403 - 45 - 125 - 394 + 35 + 103 + 403 - 132 - 341 - 394 + 109 + 281 + 403 - 342 - 667 - 394 + 286 + 583 + 403 - 682 - 1002 - 394 + 591 + 927 + 403 - 1003 - 1403 - 394 + 935 + 1163 + 403 + + + 1198 + 1405 + 107 @@ -3711,62 +3604,67 @@ 1 2 - 539 + 551 2 3 - 697 + 712 3 4 - 315 + 322 4 5 - 368 + 363 5 - 8 - 473 + 7 + 363 - 8 - 15 - 421 + 7 + 13 + 457 - 15 - 45 - 394 + 13 + 35 + 403 - 48 - 125 - 394 + 35 + 105 + 403 - 133 - 345 - 394 + 108 + 282 + 403 - 346 - 687 - 394 + 287 + 596 + 403 - 694 - 1029 - 408 + 596 + 945 + 403 - 1029 - 1409 - 381 + 956 + 1202 + 403 + + + 1223 + 1412 + 107 @@ -3782,52 +3680,52 @@ 1 2 - 1290 + 1318 2 3 - 697 + 712 3 4 - 513 + 524 4 6 - 434 + 443 6 15 - 394 + 403 15 37 - 394 + 403 37 66 - 394 + 403 66 98 - 394 + 403 100 - 126 - 394 + 127 + 403 - 126 + 128 180 - 276 + 282 @@ -3843,72 +3741,72 @@ 1 3 - 315 + 322 3 4 - 3435 + 3510 4 6 - 2474 + 2528 6 9 - 2356 + 2394 9 13 - 2448 + 2488 13 20 - 2395 + 2407 20 - 32 - 2369 + 33 + 2461 - 32 - 61 - 2356 + 33 + 64 + 2421 - 61 - 102 - 2356 + 64 + 103 + 2421 - 102 - 145 - 2395 + 103 + 143 + 2448 - 145 - 219 - 2356 + 143 + 220 + 2394 - 219 - 436 - 2343 + 220 + 446 + 2394 - 443 - 1758 - 2343 + 446 + 1691 + 2394 - 1798 - 10208 - 1197 + 1717 + 10278 + 1237 @@ -3924,47 +3822,47 @@ 1 2 - 10083 + 10304 2 3 - 5555 + 5609 3 - 6 - 2343 + 7 + 2838 - 6 - 9 - 2330 + 7 + 10 + 2663 - 9 - 14 - 2501 + 10 + 15 + 2407 - 14 - 21 - 2343 + 15 + 23 + 2394 - 21 - 44 - 2369 + 23 + 58 + 2407 - 44 - 179 - 2356 + 58 + 287 + 2394 - 180 - 1370 - 1263 + 296 + 1376 + 807 @@ -3980,42 +3878,47 @@ 1 2 - 11202 + 11420 2 3 - 5871 + 5959 3 4 - 2553 + 2636 4 5 - 1658 + 1654 5 7 - 2527 + 2650 7 - 11 - 2830 + 10 + 2407 - 11 - 20 - 2422 + 10 + 17 + 2394 - 20 + 17 + 34 + 2434 + + + 34 43 - 2079 + 269 @@ -4031,67 +3934,67 @@ 1 3 - 1579 + 1614 3 4 - 3422 + 3497 4 6 - 2764 + 2824 6 8 - 1671 + 1694 8 12 - 2488 + 2502 12 17 - 2711 + 2771 17 28 - 2448 + 2421 28 - 43 - 2435 + 42 + 2448 - 43 + 42 55 - 2409 + 2650 55 67 - 2343 + 2407 67 82 - 2382 + 2434 82 - 107 - 2409 + 108 + 2461 - 107 + 108 204 - 2079 + 2098 @@ -4107,72 +4010,72 @@ 1 2 - 1553 + 1587 2 3 - 1474 + 1520 3 4 - 2382 + 2421 4 6 - 2606 + 2650 6 8 - 1737 + 1748 8 13 - 2777 + 2851 13 18 - 2435 + 2448 18 30 - 2514 + 2488 30 - 46 - 2567 + 45 + 2448 - 46 - 59 - 2409 + 45 + 58 + 2542 - 59 - 72 - 2369 + 58 + 71 + 2421 - 72 - 89 - 2409 + 71 + 86 + 2407 - 89 - 117 - 2435 + 86 + 113 + 2394 - 117 - 208 - 1474 + 113 + 209 + 1896 @@ -4188,72 +4091,72 @@ 1 2 - 408 + 417 2 3 - 473 + 484 3 5 - 447 + 457 5 6 - 171 + 174 6 8 - 460 + 470 8 12 - 408 + 417 12 24 - 408 + 417 24 72 - 408 + 417 76 - 275 - 408 + 277 + 417 - 277 - 1197 - 408 + 278 + 1206 + 417 1227 - 3883 - 408 + 3859 + 417 - 3987 - 8621 - 408 + 3977 + 8618 + 417 - 9003 - 11196 - 408 + 9094 + 11251 + 417 - 11489 - 19733 - 65 + 11548 + 19740 + 67 @@ -4269,52 +4172,52 @@ 1 2 - 1448 + 1479 2 3 - 566 + 578 3 4 - 552 + 538 4 - 9 - 447 + 8 + 417 - 9 - 46 - 408 + 8 + 29 + 417 - 46 - 152 - 408 + 35 + 115 + 417 - 159 - 442 - 408 + 115 + 399 + 417 - 454 - 851 - 408 + 427 + 798 + 417 - 868 - 1055 - 408 + 805 + 1038 + 417 - 1055 - 1353 - 236 + 1039 + 1359 + 309 @@ -4330,149 +4233,7 @@ 1 2 - 579 - - - 2 - 3 - 631 - - - 3 - 4 - 329 - - - 4 - 6 - 460 - - - 6 - 9 - 473 - - - 9 - 17 - 421 - - - 17 - 45 - 408 - - - 49 - 149 - 408 - - - 150 - 385 - 421 - - - 389 - 729 - 408 - - - 736 - 1057 - 408 - - - 1060 - 1397 - 342 - - - - - - - endColumn - beginColumn - - - 12 - - - 1 - 2 - 908 - - - 2 - 3 - 381 - - - 3 - 4 - 487 - - - 4 - 5 - 355 - - - 5 - 7 - 368 - - - 7 - 14 - 434 - - - 15 - 33 - 447 - - - 33 - 49 - 408 - - - 49 - 64 - 434 - - - 64 - 82 - 421 - - - 83 - 96 - 421 - - - 97 - 108 - 223 - - - - - - - endColumn - endLine - - - 12 - - - 1 - 2 - 579 + 591 2 @@ -4482,52 +4243,194 @@ 3 4 - 329 + 336 4 6 - 447 + 470 6 9 - 473 + 470 9 17 - 447 + 443 17 - 55 - 408 + 47 + 417 - 55 - 162 - 408 + 51 + 153 + 417 - 171 - 382 - 408 + 153 + 387 + 417 - 396 - 729 - 408 + 390 + 717 + 417 - 767 - 1048 - 408 + 730 + 1059 + 417 - 1056 - 1390 - 329 + 1062 + 1404 + 363 + + + + + + + endColumn + beginColumn + + + 12 + + + 1 + 2 + 928 + + + 2 + 3 + 390 + + + 3 + 4 + 497 + + + 4 + 5 + 363 + + + 5 + 7 + 363 + + + 7 + 14 + 443 + + + 15 + 33 + 470 + + + 33 + 49 + 417 + + + 49 + 64 + 430 + + + 65 + 81 + 417 + + + 81 + 96 + 457 + + + 97 + 109 + 228 + + + + + + + endColumn + endLine + + + 12 + + + 1 + 2 + 591 + + + 2 + 3 + 659 + + + 3 + 4 + 336 + + + 4 + 6 + 457 + + + 6 + 9 + 470 + + + 9 + 16 + 417 + + + 16 + 43 + 430 + + + 45 + 151 + 430 + + + 161 + 379 + 417 + + + 384 + 712 + 417 + + + 729 + 1046 + 417 + + + 1049 + 1397 + 363 @@ -4537,19 +4440,19 @@ ruby_alias_def - 1307 + 1289 id - 1307 + 1289 alias - 1307 + 1289 name - 1307 + 1289 @@ -4563,7 +4466,7 @@ 1 2 - 1307 + 1289 @@ -4579,7 +4482,7 @@ 1 2 - 1307 + 1289 @@ -4595,7 +4498,7 @@ 1 2 - 1307 + 1289 @@ -4611,7 +4514,7 @@ 1 2 - 1307 + 1289 @@ -4627,7 +4530,7 @@ 1 2 - 1307 + 1289 @@ -4643,7 +4546,7 @@ 1 2 - 1307 + 1289 @@ -4820,19 +4723,19 @@ ruby_argument_list_child - 861033 + 879410 ruby_argument_list - 691475 + 706205 index - 434 + 443 child - 861033 + 879410 @@ -4846,17 +4749,17 @@ 1 2 - 584369 + 596855 2 3 - 67125 + 68483 3 34 - 39980 + 40866 @@ -4872,17 +4775,17 @@ 1 2 - 584369 + 596855 2 3 - 67125 + 68483 3 34 - 39980 + 40866 @@ -4898,46 +4801,46 @@ 1 2 - 144 + 147 2 3 - 39 + 40 3 7 - 39 + 40 7 11 - 39 + 40 11 21 - 39 + 40 23 45 - 39 + 40 56 - 386 - 39 + 385 + 40 - 960 - 8137 - 39 + 963 + 8130 + 40 - 52526 - 52527 + 52499 + 52500 13 @@ -4954,46 +4857,46 @@ 1 2 - 144 + 147 2 3 - 39 + 40 3 7 - 39 + 40 7 11 - 39 + 40 11 21 - 39 + 40 23 45 - 39 + 40 56 - 386 - 39 + 385 + 40 - 960 - 8137 - 39 + 963 + 8130 + 40 - 52526 - 52527 + 52499 + 52500 13 @@ -5010,7 +4913,7 @@ 1 2 - 861033 + 879410 @@ -5026,7 +4929,7 @@ 1 2 - 861033 + 879410 @@ -5036,22 +4939,22 @@ ruby_argument_list_def - 691738 + 706474 id - 691738 + 706474 ruby_array_child - 704712 + 708919 ruby_array - 239714 + 240456 index @@ -5059,7 +4962,7 @@ child - 704712 + 708919 @@ -5073,17 +4976,17 @@ 1 2 - 12460 + 12708 2 3 - 213368 + 213730 3 63361 - 13886 + 14018 @@ -5099,17 +5002,17 @@ 1 2 - 12460 + 12708 2 3 - 213368 + 213730 3 63361 - 13886 + 14018 @@ -5149,7 +5052,7 @@ 11 - 239715 + 240457 1294 @@ -5190,7 +5093,7 @@ 11 - 239715 + 240457 1294 @@ -5207,7 +5110,7 @@ 1 2 - 704712 + 708919 @@ -5223,7 +5126,7 @@ 1 2 - 704712 + 708919 @@ -5233,22 +5136,22 @@ ruby_array_def - 248289 + 249320 id - 248289 + 249320 ruby_array_pattern_child - 334 + 336 ruby_array_pattern - 167 + 168 index @@ -5256,7 +5159,7 @@ child - 334 + 336 @@ -5275,7 +5178,7 @@ 2 3 - 96 + 97 3 @@ -5306,7 +5209,7 @@ 2 3 - 96 + 97 3 @@ -5355,13 +5258,13 @@ 1 - 116 - 117 + 117 + 118 1 - 167 - 168 + 168 + 169 1 @@ -5401,13 +5304,13 @@ 1 - 116 - 117 + 117 + 118 1 - 167 - 168 + 168 + 169 1 @@ -5424,7 +5327,7 @@ 1 2 - 334 + 336 @@ -5440,7 +5343,7 @@ 1 2 - 334 + 336 @@ -5450,15 +5353,15 @@ ruby_array_pattern_class - 50 + 51 ruby_array_pattern - 50 + 51 class - 50 + 51 @@ -5472,7 +5375,7 @@ 1 2 - 50 + 51 @@ -5488,7 +5391,7 @@ 1 2 - 50 + 51 @@ -5498,30 +5401,30 @@ ruby_array_pattern_def - 178 + 179 id - 178 + 179 ruby_as_pattern_def - 153 + 156 id - 153 + 156 name - 153 + 156 value - 153 + 156 @@ -5535,7 +5438,7 @@ 1 2 - 153 + 156 @@ -5551,7 +5454,7 @@ 1 2 - 153 + 156 @@ -5567,7 +5470,7 @@ 1 2 - 153 + 156 @@ -5583,7 +5486,7 @@ 1 2 - 153 + 156 @@ -5599,7 +5502,7 @@ 1 2 - 153 + 156 @@ -5615,7 +5518,7 @@ 1 2 - 153 + 156 @@ -5625,19 +5528,19 @@ ruby_assignment_def - 137583 + 141202 id - 137583 + 141202 left - 137583 + 141202 right - 137583 + 141202 @@ -5651,7 +5554,7 @@ 1 2 - 137583 + 141202 @@ -5667,7 +5570,7 @@ 1 2 - 137583 + 141202 @@ -5683,7 +5586,7 @@ 1 2 - 137583 + 141202 @@ -5699,7 +5602,7 @@ 1 2 - 137583 + 141202 @@ -5715,7 +5618,7 @@ 1 2 - 137583 + 141202 @@ -5731,7 +5634,7 @@ 1 2 - 137583 + 141202 @@ -5740,24 +5643,73 @@ - ruby_ast_node_info - 9511543 + ruby_ast_node_location + 9723503 node - 9511543 - - - parent - 3325876 - - - parent_index - 2830 + 9723503 loc - 9008872 + 9209550 + + + + + node + loc + + + 12 + + + 1 + 2 + 9723503 + + + + + + + loc + node + + + 12 + + + 1 + 2 + 8697279 + + + 2 + 4 + 512270 + + + + + + + + + ruby_ast_node_parent + 9674605 + + + node + 9674605 + + + parent + 3381025 + + + parent_index + 2892 @@ -5771,7 +5723,7 @@ 1 2 - 9511543 + 9674605 @@ -5787,23 +5739,7 @@ 1 2 - 9511543 - - - - - - - node - loc - - - 12 - - - 1 - 2 - 9511543 + 9674605 @@ -5819,27 +5755,27 @@ 1 2 - 535595 + 533793 2 3 - 457056 + 465418 3 4 - 1793325 + 1832321 4 5 - 352556 + 359620 5 216 - 187343 + 189871 @@ -5855,63 +5791,27 @@ 1 2 - 535595 + 533793 2 3 - 457056 + 465418 3 4 - 1793325 + 1832321 4 5 - 352556 + 359620 5 216 - 187343 - - - - - - - parent - loc - - - 12 - - - 1 - 2 - 535595 - - - 2 - 3 - 457056 - - - 3 - 4 - 1793325 - - - 4 - 5 - 352556 - - - 5 - 216 - 187343 + 189871 @@ -5927,57 +5827,52 @@ 1 2 - 460 + 470 2 3 - 236 + 242 3 4 - 355 + 363 4 6 - 157 + 161 6 7 - 315 + 484 7 - 11 - 250 + 17 + 255 - 11 - 21 - 197 + 17 + 29 + 228 - 21 - 42 - 223 + 33 + 71 + 228 - 43 - 94 - 223 + 72 + 298 + 228 - 98 - 498 - 223 - - - 533 - 252642 - 184 + 358 + 251345 + 228 @@ -5993,186 +5888,52 @@ 1 2 - 460 + 470 2 3 - 236 + 242 3 4 - 355 + 363 4 6 - 157 + 161 6 7 - 315 + 484 7 - 11 - 250 + 17 + 255 - 11 - 21 - 197 + 17 + 29 + 228 - 21 - 42 - 223 + 33 + 71 + 228 - 43 - 94 - 223 + 72 + 298 + 228 - 98 - 498 - 223 - - - 533 - 252642 - 184 - - - - - - - parent_index - loc - - - 12 - - - 1 - 2 - 460 - - - 2 - 3 - 236 - - - 3 - 4 - 355 - - - 4 - 6 - 157 - - - 6 - 7 - 315 - - - 7 - 11 - 250 - - - 11 - 21 - 197 - - - 21 - 42 - 223 - - - 43 - 94 - 223 - - - 98 - 498 - 223 - - - 533 - 252273 - 184 - - - - - - - loc - node - - - 12 - - - 1 - 2 - 8507847 - - - 2 - 4 - 501025 - - - - - - - loc - parent - - - 12 - - - 1 - 2 - 8507847 - - - 2 - 4 - 501025 - - - - - - - loc - parent_index - - - 12 - - - 1 - 2 - 8511059 - - - 2 - 3 - 497813 + 358 + 251345 + 228 @@ -6182,11 +5943,11 @@ ruby_bare_string_child - 16385 + 16784 ruby_bare_string - 12799 + 13136 index @@ -6194,7 +5955,7 @@ child - 16385 + 16784 @@ -6208,12 +5969,12 @@ 1 2 - 12434 + 12728 2 2310 - 365 + 408 @@ -6229,12 +5990,12 @@ 1 2 - 12434 + 12728 2 2310 - 365 + 408 @@ -6264,7 +6025,7 @@ 4 - 12800 + 13137 19 @@ -6295,7 +6056,7 @@ 4 - 12800 + 13137 19 @@ -6312,7 +6073,7 @@ 1 2 - 16385 + 16784 @@ -6328,7 +6089,7 @@ 1 2 - 16385 + 16784 @@ -6338,22 +6099,22 @@ ruby_bare_string_def - 12799 + 13136 id - 12799 + 13136 ruby_bare_symbol_child - 7967 + 8435 ruby_bare_symbol - 7967 + 8435 index @@ -6361,7 +6122,7 @@ child - 7967 + 8435 @@ -6375,7 +6136,7 @@ 1 2 - 7967 + 8435 @@ -6391,7 +6152,7 @@ 1 2 - 7967 + 8435 @@ -6405,8 +6166,8 @@ 12 - 3128 - 3129 + 3570 + 3571 2 @@ -6421,8 +6182,8 @@ 12 - 3128 - 3129 + 3570 + 3571 2 @@ -6439,7 +6200,7 @@ 1 2 - 7967 + 8435 @@ -6455,7 +6216,7 @@ 1 2 - 7967 + 8435 @@ -6465,18 +6226,18 @@ ruby_bare_symbol_def - 7967 + 8435 id - 7967 + 8435 ruby_begin_block_child - 33 + 39 ruby_begin_block @@ -6488,7 +6249,7 @@ child - 33 + 39 @@ -6502,7 +6263,7 @@ 1 2 - 4 + 3 2 @@ -6512,17 +6273,12 @@ 3 4 - 1 - - - 5 - 6 2 7 8 - 2 + 4 @@ -6538,7 +6294,7 @@ 1 2 - 4 + 3 2 @@ -6548,17 +6304,12 @@ 3 4 - 1 - - - 5 - 6 2 7 8 - 2 + 4 @@ -6571,26 +6322,21 @@ 12 - - 2 - 3 - 2 - 4 5 - 2 - - - 5 - 6 - 1 + 4 6 7 1 + + 7 + 8 + 1 + 10 11 @@ -6607,26 +6353,21 @@ 12 - - 2 - 3 - 2 - 4 5 - 2 - - - 5 - 6 - 1 + 4 6 7 1 + + 7 + 8 + 1 + 10 11 @@ -6646,7 +6387,7 @@ 1 2 - 33 + 39 @@ -6662,7 +6403,7 @@ 1 2 - 33 + 39 @@ -6683,11 +6424,11 @@ ruby_begin_child - 7613 + 7606 ruby_begin - 2590 + 2610 index @@ -6695,7 +6436,7 @@ child - 7613 + 7606 @@ -6709,32 +6450,32 @@ 1 2 - 163 + 161 2 3 - 1398 + 1414 3 4 - 512 + 537 4 5 - 211 + 200 5 8 - 226 + 221 8 40 - 80 + 77 @@ -6750,32 +6491,32 @@ 1 2 - 163 + 161 2 3 - 1398 + 1414 3 4 - 512 + 537 4 5 - 211 + 200 5 8 - 226 + 221 8 40 - 80 + 77 @@ -6824,23 +6565,23 @@ 3 - 39 - 62 + 37 + 59 3 - 80 - 175 + 77 + 166 3 - 306 - 1030 + 298 + 1036 3 - 2427 - 2591 + 2449 + 2611 2 @@ -6890,23 +6631,23 @@ 3 - 39 - 62 + 37 + 59 3 - 80 - 175 + 77 + 166 3 - 306 - 1030 + 298 + 1036 3 - 2427 - 2591 + 2449 + 2611 2 @@ -6923,7 +6664,7 @@ 1 2 - 7613 + 7606 @@ -6939,7 +6680,7 @@ 1 2 - 7613 + 7606 @@ -6949,26 +6690,26 @@ ruby_begin_def - 2590 + 2610 id - 2590 + 2610 ruby_binary_def - 71864 + 73665 id - 71864 + 73665 left - 71864 + 73665 operator @@ -6976,7 +6717,7 @@ right - 71864 + 73665 @@ -6990,7 +6731,7 @@ 1 2 - 71864 + 73665 @@ -7006,7 +6747,7 @@ 1 2 - 71864 + 73665 @@ -7022,7 +6763,7 @@ 1 2 - 71864 + 73665 @@ -7038,7 +6779,7 @@ 1 2 - 71864 + 73665 @@ -7054,7 +6795,7 @@ 1 2 - 71864 + 73665 @@ -7070,7 +6811,7 @@ 1 2 - 71864 + 73665 @@ -7084,68 +6825,68 @@ 12 - 160 - 169 + 153 + 177 2 - 234 - 408 + 259 + 432 2 - 570 - 596 + 597 + 631 2 - 635 - 657 + 647 + 690 2 - 778 - 974 + 764 + 987 2 - 979 - 1001 + 1026 + 1033 2 - 1014 - 1071 + 1058 + 1073 2 - 1233 - 1270 + 1169 + 1190 2 - 1358 - 1801 + 1227 + 1824 2 - 1837 - 2322 + 2079 + 2661 2 - 2691 - 3561 + 2747 + 3491 2 - 6453 - 7170 + 6593 + 7408 2 - 32934 - 32935 + 33761 + 33762 1 @@ -7160,68 +6901,68 @@ 12 - 160 - 169 + 153 + 177 2 - 234 - 408 + 259 + 432 2 - 570 - 596 + 597 + 631 2 - 635 - 657 + 647 + 690 2 - 778 - 974 + 764 + 987 2 - 979 - 1001 + 1026 + 1033 2 - 1014 - 1071 + 1058 + 1073 2 - 1233 - 1270 + 1169 + 1190 2 - 1358 - 1801 + 1227 + 1824 2 - 1837 - 2322 + 2079 + 2661 2 - 2691 - 3561 + 2747 + 3491 2 - 6453 - 7170 + 6593 + 7408 2 - 32934 - 32935 + 33761 + 33762 1 @@ -7236,68 +6977,68 @@ 12 - 160 - 169 + 153 + 177 2 - 234 - 408 + 259 + 432 2 - 570 - 596 + 597 + 631 2 - 635 - 657 + 647 + 690 2 - 778 - 974 + 764 + 987 2 - 979 - 1001 + 1026 + 1033 2 - 1014 - 1071 + 1058 + 1073 2 - 1233 - 1270 + 1169 + 1190 2 - 1358 - 1801 + 1227 + 1824 2 - 1837 - 2322 + 2079 + 2661 2 - 2691 - 3561 + 2747 + 3491 2 - 6453 - 7170 + 6593 + 7408 2 - 32934 - 32935 + 33761 + 33762 1 @@ -7314,7 +7055,7 @@ 1 2 - 71864 + 73665 @@ -7330,7 +7071,7 @@ 1 2 - 71864 + 73665 @@ -7346,7 +7087,7 @@ 1 2 - 71864 + 73665 @@ -7356,15 +7097,15 @@ ruby_block_argument_child - 6477 + 6541 ruby_block_argument - 6477 + 6541 child - 6477 + 6541 @@ -7378,7 +7119,7 @@ 1 2 - 6477 + 6541 @@ -7394,7 +7135,7 @@ 1 2 - 6477 + 6541 @@ -7404,26 +7145,26 @@ ruby_block_argument_def - 6477 + 6547 id - 6477 + 6547 ruby_block_body - 101379 + 103820 ruby_block - 101379 + 103820 body - 101379 + 103820 @@ -7437,7 +7178,7 @@ 1 2 - 101379 + 103820 @@ -7453,7 +7194,7 @@ 1 2 - 101379 + 103820 @@ -7463,19 +7204,19 @@ ruby_block_body_child - 101550 + 103995 ruby_block_body - 101379 + 103820 index - 52 + 53 child - 101550 + 103995 @@ -7489,12 +7230,12 @@ 1 2 - 101260 + 103699 2 5 - 118 + 121 @@ -7510,12 +7251,12 @@ 1 2 - 101260 + 103699 2 5 - 118 + 121 @@ -7539,8 +7280,8 @@ 13 - 7701 - 7702 + 7718 + 7719 13 @@ -7565,8 +7306,8 @@ 13 - 7701 - 7702 + 7718 + 7719 13 @@ -7583,7 +7324,7 @@ 1 2 - 101550 + 103995 @@ -7599,7 +7340,7 @@ 1 2 - 101550 + 103995 @@ -7609,48 +7350,48 @@ ruby_block_body_def - 101379 + 103820 id - 101379 + 103820 ruby_block_def - 101695 + 104143 id - 101695 + 104143 ruby_block_parameter_def - 2569 + 2543 id - 2569 + 2543 ruby_block_parameter_name - 2569 + 2537 ruby_block_parameter - 2569 + 2537 name - 2569 + 2537 @@ -7664,7 +7405,7 @@ 1 2 - 2569 + 2537 @@ -7680,7 +7421,7 @@ 1 2 - 2569 + 2537 @@ -7690,15 +7431,15 @@ ruby_block_parameters - 10585 + 10767 ruby_block - 10585 + 10767 parameters - 10585 + 10767 @@ -7712,7 +7453,7 @@ 1 2 - 10585 + 10767 @@ -7728,7 +7469,7 @@ 1 2 - 10585 + 10767 @@ -7738,19 +7479,19 @@ ruby_block_parameters_child - 28929 + 30131 ruby_block_parameters - 24941 + 25884 index - 15 + 14 child - 28929 + 30131 @@ -7764,17 +7505,17 @@ 1 2 - 21362 + 22189 2 3 - 3263 + 3329 3 6 - 316 + 365 @@ -7790,17 +7531,17 @@ 1 2 - 21362 + 22189 2 3 - 3263 + 3329 3 6 - 316 + 365 @@ -7814,29 +7555,29 @@ 12 - 11 - 12 - 3 + 27 + 28 + 2 - 19 - 20 - 3 + 35 + 36 + 2 - 103 - 104 - 3 + 122 + 123 + 2 - 1166 - 1167 - 3 + 1232 + 1233 + 2 - 8125 - 8126 - 3 + 8630 + 8631 + 2 @@ -7850,29 +7591,29 @@ 12 - 11 - 12 - 3 + 27 + 28 + 2 - 19 - 20 - 3 + 35 + 36 + 2 - 103 - 104 - 3 + 122 + 123 + 2 - 1166 - 1167 - 3 + 1232 + 1233 + 2 - 8125 - 8126 - 3 + 8630 + 8631 + 2 @@ -7888,7 +7629,7 @@ 1 2 - 28929 + 30131 @@ -7904,7 +7645,7 @@ 1 2 - 28929 + 30131 @@ -7914,11 +7655,11 @@ ruby_block_parameters_def - 24941 + 25884 id - 24941 + 25884 @@ -8061,19 +7802,19 @@ ruby_body_statement_child - 627527 + 641142 ruby_body_statement - 202481 + 206879 index - 1135 + 1187 child - 627527 + 641142 @@ -8087,37 +7828,37 @@ 1 2 - 93050 + 95107 2 3 - 37058 + 37693 3 4 - 24051 + 24510 4 5 - 15391 + 15881 5 7 - 15925 + 16388 7 23 - 15269 + 15560 23 - 371 - 1734 + 397 + 1736 @@ -8133,37 +7874,37 @@ 1 2 - 93050 + 95107 2 3 - 37058 + 37693 3 4 - 24051 + 24510 4 5 - 15391 + 15881 5 7 - 15925 + 16388 7 23 - 15269 + 15560 23 - 371 - 1734 + 397 + 1736 @@ -8179,67 +7920,67 @@ 1 2 - 79 + 140 2 3 - 119 + 122 3 4 - 76 + 77 4 5 - 85 + 62 5 7 - 79 - - - 7 - 10 98 + + 8 + 10 + 86 + 10 - 14 + 12 + 89 + + + 12 + 26 + 95 + + + 26 + 42 92 - 14 - 23 + 42 + 77 89 - 24 - 39 - 85 - - - 39 - 69 + 80 + 179 89 - 69 - 144 - 85 + 184 + 1016 + 89 - 144 - 566 - 85 - - - 623 - 65961 - 67 + 1134 + 68975 + 47 @@ -8255,67 +7996,67 @@ 1 2 - 79 + 140 2 3 - 119 + 122 3 4 - 76 + 77 4 5 - 85 + 62 5 7 - 79 - - - 7 - 10 98 + + 8 + 10 + 86 + 10 - 14 + 12 + 89 + + + 12 + 26 + 95 + + + 26 + 42 92 - 14 - 23 + 42 + 77 89 - 24 - 39 - 85 - - - 39 - 69 + 80 + 179 89 - 69 - 144 - 85 + 184 + 1016 + 89 - 144 - 566 - 85 - - - 623 - 65961 - 67 + 1134 + 68975 + 47 @@ -8331,7 +8072,7 @@ 1 2 - 627527 + 641142 @@ -8347,7 +8088,7 @@ 1 2 - 627527 + 641142 @@ -8357,26 +8098,26 @@ ruby_body_statement_def - 208998 + 213896 id - 208998 + 213896 ruby_break_child - 399 + 394 ruby_break - 399 + 394 child - 399 + 394 @@ -8390,7 +8131,7 @@ 1 2 - 399 + 394 @@ -8406,7 +8147,7 @@ 1 2 - 399 + 394 @@ -8416,26 +8157,26 @@ ruby_break_def - 3434 + 3414 id - 3434 + 3414 ruby_call_arguments - 688552 + 703178 ruby_call - 688552 + 703178 arguments - 688552 + 703178 @@ -8449,7 +8190,7 @@ 1 2 - 688552 + 703178 @@ -8465,7 +8206,7 @@ 1 2 - 688552 + 703178 @@ -8475,15 +8216,15 @@ ruby_call_block - 240751 + 246208 ruby_call - 240751 + 246208 block - 240751 + 246208 @@ -8497,7 +8238,7 @@ 1 2 - 240751 + 246208 @@ -8513,7 +8254,7 @@ 1 2 - 240751 + 246208 @@ -8523,26 +8264,26 @@ ruby_call_def - 1006605 + 1027501 id - 1006605 + 1027501 ruby_call_method - 1006605 + 1027501 ruby_call - 1006605 + 1027501 method - 1006605 + 1027501 @@ -8556,7 +8297,7 @@ 1 2 - 1006605 + 1027501 @@ -8572,7 +8313,7 @@ 1 2 - 1006605 + 1027501 @@ -8582,15 +8323,15 @@ ruby_call_operator - 562262 + 571632 ruby_call - 562262 + 571632 operator - 562262 + 571632 @@ -8604,7 +8345,7 @@ 1 2 - 562262 + 571632 @@ -8620,7 +8361,7 @@ 1 2 - 562262 + 571632 @@ -8630,15 +8371,15 @@ ruby_call_receiver - 562262 + 571632 ruby_call - 562262 + 571632 receiver - 562262 + 571632 @@ -8652,7 +8393,7 @@ 1 2 - 562262 + 571632 @@ -8668,7 +8409,7 @@ 1 2 - 562262 + 571632 @@ -8678,19 +8419,19 @@ ruby_case_child - 4349 + 4685 ruby_case__ - 1289 + 1267 index - 67 + 86 child - 4349 + 4685 @@ -8704,32 +8445,37 @@ 1 2 - 36 + 69 2 3 - 328 + 405 3 4 - 546 + 399 4 5 - 202 + 166 5 - 7 - 110 + 6 + 89 - 7 - 23 - 64 + 6 + 12 + 100 + + + 12 + 87 + 39 @@ -8745,32 +8491,37 @@ 1 2 - 36 + 69 2 3 - 328 + 405 3 4 - 546 + 399 4 5 - 202 + 166 5 - 7 - 110 + 6 + 89 - 7 - 23 - 64 + 6 + 12 + 100 + + + 12 + 87 + 39 @@ -8786,42 +8537,37 @@ 1 2 - 21 + 42 2 3 - 9 + 12 - 4 + 3 6 6 - 8 - 11 - 6 + 6 + 9 + 7 - 14 - 22 - 6 + 9 + 31 + 7 - 33 - 58 - 6 + 39 + 140 + 7 - 123 - 302 - 6 - - - 408 - 421 - 6 + 228 + 1268 + 5 @@ -8837,42 +8583,37 @@ 1 2 - 21 + 42 2 3 - 9 + 12 - 4 + 3 6 6 - 8 - 11 - 6 + 6 + 9 + 7 - 14 - 22 - 6 + 9 + 31 + 7 - 33 - 58 - 6 + 39 + 140 + 7 - 123 - 302 - 6 - - - 408 - 421 - 6 + 228 + 1268 + 5 @@ -8888,7 +8629,7 @@ 1 2 - 4349 + 4685 @@ -8904,7 +8645,7 @@ 1 2 - 4349 + 4685 @@ -8914,22 +8655,22 @@ ruby_case_def - 1289 + 1319 id - 1289 + 1319 ruby_case_match_clauses - 385 + 381 ruby_case_match - 234 + 232 index @@ -8937,7 +8678,7 @@ clauses - 385 + 381 @@ -8951,12 +8692,12 @@ 1 2 - 161 + 160 2 3 - 41 + 40 3 @@ -8982,12 +8723,12 @@ 1 2 - 161 + 160 2 3 - 41 + 40 3 @@ -9013,17 +8754,12 @@ 1 2 - 3 + 2 2 3 - 1 - - - 4 - 5 - 1 + 3 5 @@ -9051,13 +8787,13 @@ 1 - 73 - 74 + 72 + 73 1 - 234 - 235 + 232 + 233 1 @@ -9074,17 +8810,12 @@ 1 2 - 3 + 2 2 3 - 1 - - - 4 - 5 - 1 + 3 5 @@ -9112,13 +8843,13 @@ 1 - 73 - 74 + 72 + 73 1 - 234 - 235 + 232 + 233 1 @@ -9135,7 +8866,7 @@ 1 2 - 385 + 381 @@ -9151,7 +8882,7 @@ 1 2 - 385 + 381 @@ -9161,15 +8892,15 @@ ruby_case_match_def - 234 + 232 id - 234 + 232 value - 234 + 232 @@ -9183,7 +8914,7 @@ 1 2 - 234 + 232 @@ -9199,7 +8930,7 @@ 1 2 - 234 + 232 @@ -9257,15 +8988,15 @@ ruby_case_value - 1246 + 1277 ruby_case__ - 1246 + 1277 value - 1246 + 1277 @@ -9279,7 +9010,7 @@ 1 2 - 1246 + 1277 @@ -9295,7 +9026,7 @@ 1 2 - 1246 + 1277 @@ -9305,7 +9036,7 @@ ruby_chained_string_child - 3346 + 3320 ruby_chained_string @@ -9313,11 +9044,11 @@ index - 36 + 35 child - 3346 + 3320 @@ -9331,32 +9062,32 @@ 2 3 - 297 + 296 3 4 - 202 + 215 4 5 - 131 + 128 5 6 - 122 + 116 6 8 - 67 + 65 8 13 - 61 + 59 @@ -9372,32 +9103,32 @@ 2 3 - 297 + 296 3 4 - 202 + 215 4 5 - 131 + 128 5 6 - 122 + 116 6 8 - 67 + 65 8 13 - 61 + 59 @@ -9413,57 +9144,57 @@ 2 3 - 3 + 2 4 5 - 3 + 2 7 8 - 3 + 2 8 9 - 3 + 2 20 21 - 3 + 2 33 34 - 3 + 2 42 43 - 3 + 2 - 82 - 83 - 3 + 81 + 82 + 2 - 125 - 126 - 3 + 124 + 125 + 2 - 191 - 192 - 3 + 196 + 197 + 2 - 288 - 289 - 6 + 295 + 296 + 5 @@ -9479,57 +9210,57 @@ 2 3 - 3 + 2 4 5 - 3 + 2 7 8 - 3 + 2 8 9 - 3 + 2 20 21 - 3 + 2 33 34 - 3 + 2 42 43 - 3 + 2 - 82 - 83 - 3 + 81 + 82 + 2 - 125 - 126 - 3 + 124 + 125 + 2 - 191 - 192 - 3 + 196 + 197 + 2 - 288 - 289 - 6 + 295 + 296 + 5 @@ -9545,7 +9276,7 @@ 1 2 - 3346 + 3320 @@ -9561,7 +9292,7 @@ 1 2 - 3346 + 3320 @@ -9582,15 +9313,15 @@ ruby_class_body - 15560 + 15734 ruby_class - 15560 + 15734 body - 15560 + 15734 @@ -9604,7 +9335,7 @@ 1 2 - 15560 + 15734 @@ -9620,7 +9351,7 @@ 1 2 - 15560 + 15734 @@ -9630,15 +9361,15 @@ ruby_class_def - 17258 + 17441 id - 17258 + 17441 name - 17258 + 17441 @@ -9652,7 +9383,7 @@ 1 2 - 17258 + 17441 @@ -9668,7 +9399,7 @@ 1 2 - 17258 + 17441 @@ -9678,15 +9409,15 @@ ruby_class_superclass - 13666 + 13806 ruby_class - 13666 + 13806 superclass - 13666 + 13806 @@ -9700,7 +9431,7 @@ 1 2 - 13666 + 13806 @@ -9716,7 +9447,7 @@ 1 2 - 13666 + 13806 @@ -9726,15 +9457,15 @@ ruby_complex_def - 66 + 72 id - 66 + 72 child - 66 + 72 @@ -9748,7 +9479,7 @@ 1 2 - 66 + 72 @@ -9764,7 +9495,7 @@ 1 2 - 66 + 72 @@ -9774,23 +9505,23 @@ ruby_conditional_def - 2954 + 2896 id - 2954 + 2896 alternative - 2954 + 2896 condition - 2954 + 2896 consequence - 2954 + 2896 @@ -9804,7 +9535,7 @@ 1 2 - 2954 + 2896 @@ -9820,7 +9551,7 @@ 1 2 - 2954 + 2896 @@ -9836,7 +9567,7 @@ 1 2 - 2954 + 2896 @@ -9852,7 +9583,7 @@ 1 2 - 2954 + 2896 @@ -9868,7 +9599,7 @@ 1 2 - 2954 + 2896 @@ -9884,7 +9615,7 @@ 1 2 - 2954 + 2896 @@ -9900,7 +9631,7 @@ 1 2 - 2954 + 2896 @@ -9916,7 +9647,7 @@ 1 2 - 2954 + 2896 @@ -9932,7 +9663,7 @@ 1 2 - 2954 + 2896 @@ -9948,7 +9679,7 @@ 1 2 - 2954 + 2896 @@ -9964,7 +9695,7 @@ 1 2 - 2954 + 2896 @@ -9980,7 +9711,7 @@ 1 2 - 2954 + 2896 @@ -9990,19 +9721,19 @@ ruby_delimited_symbol_child - 1749 + 1742 ruby_delimited_symbol - 1258 + 1247 index - 24 + 23 child - 1749 + 1742 @@ -10016,7 +9747,7 @@ 1 2 - 930 + 920 2 @@ -10026,7 +9757,7 @@ 3 9 - 73 + 71 @@ -10042,7 +9773,7 @@ 1 2 - 930 + 920 2 @@ -10052,7 +9783,7 @@ 3 9 - 73 + 71 @@ -10068,42 +9799,42 @@ 1 2 - 3 + 2 3 4 - 3 + 2 - 5 - 6 - 3 + 6 + 7 + 2 - 8 - 9 - 3 + 9 + 10 + 2 - 12 - 13 - 3 + 13 + 14 + 2 24 25 - 3 + 2 - 107 - 108 - 3 + 109 + 110 + 2 - 410 - 411 - 3 + 416 + 417 + 2 @@ -10119,42 +9850,42 @@ 1 2 - 3 + 2 3 4 - 3 + 2 - 5 - 6 - 3 + 6 + 7 + 2 - 8 - 9 - 3 + 9 + 10 + 2 - 12 - 13 - 3 + 13 + 14 + 2 24 25 - 3 + 2 - 107 - 108 - 3 + 109 + 110 + 2 - 410 - 411 - 3 + 416 + 417 + 2 @@ -10170,7 +9901,7 @@ 1 2 - 1749 + 1742 @@ -10186,7 +9917,7 @@ 1 2 - 1749 + 1742 @@ -10196,22 +9927,22 @@ ruby_delimited_symbol_def - 1258 + 1247 id - 1258 + 1247 ruby_destructured_left_assignment_child - 222 + 226 ruby_destructured_left_assignment - 107 + 108 index @@ -10219,7 +9950,7 @@ child - 222 + 226 @@ -10248,7 +9979,7 @@ 4 5 - 4 + 5 @@ -10279,7 +10010,7 @@ 4 5 - 4 + 5 @@ -10293,23 +10024,23 @@ 12 - 4 - 5 + 5 + 6 1 - 16 - 17 + 17 + 18 1 - 95 - 96 + 96 + 97 1 - 107 - 108 + 108 + 109 1 @@ -10324,23 +10055,23 @@ 12 - 4 - 5 + 5 + 6 1 - 16 - 17 + 17 + 18 1 - 95 - 96 + 96 + 97 1 - 107 - 108 + 108 + 109 1 @@ -10357,7 +10088,7 @@ 1 2 - 222 + 226 @@ -10373,7 +10104,7 @@ 1 2 - 222 + 226 @@ -10383,22 +10114,22 @@ ruby_destructured_left_assignment_def - 107 + 108 id - 107 + 108 ruby_destructured_parameter_child - 424 + 463 ruby_destructured_parameter - 194 + 208 index @@ -10406,7 +10137,7 @@ child - 424 + 463 @@ -10425,7 +10156,7 @@ 2 3 - 150 + 162 3 @@ -10435,7 +10166,7 @@ 4 12 - 9 + 11 @@ -10456,7 +10187,7 @@ 2 3 - 150 + 162 3 @@ -10466,7 +10197,7 @@ 4 12 - 9 + 11 @@ -10480,38 +10211,38 @@ 12 - 1 - 2 + 2 + 3 1 - 2 - 3 + 3 + 4 5 - 4 - 5 + 5 + 6 1 - 9 - 10 + 11 + 12 1 - 28 - 29 + 30 + 31 1 - 178 - 179 + 192 + 193 1 - 194 - 195 + 208 + 209 1 @@ -10526,38 +10257,38 @@ 12 - 1 - 2 + 2 + 3 1 - 2 - 3 + 3 + 4 5 - 4 - 5 + 5 + 6 1 - 9 - 10 + 11 + 12 1 - 28 - 29 + 30 + 31 1 - 178 - 179 + 192 + 193 1 - 194 - 195 + 208 + 209 1 @@ -10574,7 +10305,7 @@ 1 2 - 424 + 463 @@ -10590,7 +10321,7 @@ 1 2 - 424 + 463 @@ -10600,26 +10331,26 @@ ruby_destructured_parameter_def - 194 + 208 id - 194 + 208 ruby_do_block_body - 142294 + 145373 ruby_do_block - 142294 + 145373 body - 142294 + 145373 @@ -10633,7 +10364,7 @@ 1 2 - 142294 + 145373 @@ -10649,7 +10380,7 @@ 1 2 - 142294 + 145373 @@ -10659,26 +10390,26 @@ ruby_do_block_def - 142452 + 145534 id - 142452 + 145534 ruby_do_block_parameters - 16036 + 16724 ruby_do_block - 16036 + 16724 parameters - 16036 + 16724 @@ -10692,7 +10423,7 @@ 1 2 - 16036 + 16724 @@ -10708,7 +10439,7 @@ 1 2 - 16036 + 16724 @@ -10718,11 +10449,11 @@ ruby_do_child - 9374 + 9352 ruby_do - 1655 + 1651 index @@ -10730,7 +10461,7 @@ child - 9374 + 9352 @@ -10744,37 +10475,37 @@ 1 2 - 350 + 347 2 3 - 296 + 300 3 4 - 200 + 204 4 - 5 - 77 + 6 + 149 - 5 + 6 7 - 106 + 25 7 8 - 140 + 137 8 9 - 206 + 209 9 @@ -10805,37 +10536,37 @@ 1 2 - 350 + 347 2 3 - 296 + 300 3 4 - 200 + 204 4 - 5 - 77 + 6 + 149 - 5 + 6 7 - 106 + 25 7 8 - 140 + 137 8 9 - 206 + 209 9 @@ -10890,7 +10621,7 @@ 116 - 1656 + 1652 15 @@ -10931,7 +10662,7 @@ 116 - 1656 + 1652 15 @@ -10948,7 +10679,7 @@ 1 2 - 9374 + 9352 @@ -10964,7 +10695,7 @@ 1 2 - 9374 + 9352 @@ -10974,30 +10705,30 @@ ruby_do_def - 1681 + 1675 id - 1681 + 1675 ruby_element_reference_child - 80931 + 82748 ruby_element_reference - 80773 + 82601 index - 5 + 4 child - 80931 + 82748 @@ -11011,12 +10742,12 @@ 1 2 - 80615 + 82455 2 3 - 157 + 146 @@ -11032,12 +10763,12 @@ 1 2 - 80615 + 82455 2 3 - 157 + 146 @@ -11056,8 +10787,8 @@ 2 - 31710 - 31711 + 34958 + 34959 2 @@ -11077,8 +10808,8 @@ 2 - 31710 - 31711 + 34958 + 34959 2 @@ -11095,7 +10826,7 @@ 1 2 - 80931 + 82748 @@ -11111,7 +10842,7 @@ 1 2 - 80931 + 82748 @@ -11121,15 +10852,15 @@ ruby_element_reference_def - 80778 + 82606 id - 80778 + 82606 object - 80778 + 82606 @@ -11143,7 +10874,7 @@ 1 2 - 80778 + 82606 @@ -11159,7 +10890,7 @@ 1 2 - 80778 + 82606 @@ -11169,19 +10900,19 @@ ruby_else_child - 9507 + 9730 ruby_else - 7493 + 7669 index - 33 + 32 child - 9507 + 9730 @@ -11195,17 +10926,17 @@ 1 2 - 6305 + 6454 2 3 - 742 + 758 3 12 - 445 + 455 @@ -11221,17 +10952,17 @@ 1 2 - 6305 + 6454 2 3 - 742 + 758 3 12 - 445 + 455 @@ -11247,57 +10978,57 @@ 1 2 - 3 - - - 3 - 4 - 3 + 2 4 5 - 3 + 2 5 6 - 3 + 2 + + + 6 + 7 + 2 9 10 - 3 + 2 15 16 - 3 + 2 26 27 - 3 + 2 - 61 - 62 - 3 + 64 + 65 + 2 - 145 - 146 - 3 + 152 + 153 + 2 - 387 - 388 - 3 + 405 + 406 + 2 - 2441 - 2442 - 3 + 2557 + 2558 + 2 @@ -11313,57 +11044,57 @@ 1 2 - 3 - - - 3 - 4 - 3 + 2 4 5 - 3 + 2 5 6 - 3 + 2 + + + 6 + 7 + 2 9 10 - 3 + 2 15 16 - 3 + 2 26 27 - 3 + 2 - 61 - 62 - 3 + 64 + 65 + 2 - 145 - 146 - 3 + 152 + 153 + 2 - 387 - 388 - 3 + 405 + 406 + 2 - 2441 - 2442 - 3 + 2557 + 2558 + 2 @@ -11379,7 +11110,7 @@ 1 2 - 9507 + 9730 @@ -11395,7 +11126,7 @@ 1 2 - 9507 + 9730 @@ -11405,26 +11136,26 @@ ruby_else_def - 7505 + 7681 id - 7505 + 7681 ruby_elsif_alternative - 982 + 1058 ruby_elsif - 982 + 1058 alternative - 982 + 1058 @@ -11438,7 +11169,7 @@ 1 2 - 982 + 1058 @@ -11454,7 +11185,7 @@ 1 2 - 982 + 1058 @@ -11464,15 +11195,15 @@ ruby_elsif_consequence - 1505 + 1571 ruby_elsif - 1505 + 1571 consequence - 1505 + 1571 @@ -11486,7 +11217,7 @@ 1 2 - 1505 + 1571 @@ -11502,7 +11233,7 @@ 1 2 - 1505 + 1571 @@ -11512,15 +11243,15 @@ ruby_elsif_def - 1510 + 1583 id - 1510 + 1583 condition - 1510 + 1583 @@ -11534,7 +11265,7 @@ 1 2 - 1510 + 1583 @@ -11550,7 +11281,7 @@ 1 2 - 1510 + 1583 @@ -11568,7 +11299,7 @@ index - 9 + 10 child @@ -11586,12 +11317,12 @@ 1 2 - 7 + 8 2 3 - 4 + 3 3 @@ -11599,8 +11330,8 @@ 1 - 9 - 10 + 10 + 11 1 @@ -11617,12 +11348,12 @@ 1 2 - 7 + 8 2 3 - 4 + 3 3 @@ -11630,8 +11361,8 @@ 1 - 9 - 10 + 10 + 11 1 @@ -11648,7 +11379,7 @@ 1 2 - 6 + 7 2 @@ -11656,8 +11387,8 @@ 1 - 6 - 7 + 5 + 6 1 @@ -11679,7 +11410,7 @@ 1 2 - 6 + 7 2 @@ -11687,8 +11418,8 @@ 1 - 6 - 7 + 5 + 6 1 @@ -11747,19 +11478,19 @@ ruby_ensure_child - 5114 + 5236 ruby_ensure - 3981 + 4106 index - 49 + 47 child - 5114 + 5236 @@ -11773,17 +11504,17 @@ 1 2 - 3204 + 3323 2 3 - 543 + 554 3 17 - 233 + 227 @@ -11799,17 +11530,17 @@ 1 2 - 3204 + 3323 2 3 - 543 + 554 3 17 - 233 + 227 @@ -11825,42 +11556,42 @@ 1 2 - 24 + 23 3 4 - 6 + 5 4 5 - 3 + 2 5 6 - 3 + 2 17 18 - 3 + 2 76 77 - 3 + 2 - 253 - 254 - 3 + 261 + 262 + 2 - 1297 - 1298 - 3 + 1369 + 1370 + 2 @@ -11876,42 +11607,42 @@ 1 2 - 24 + 23 3 4 - 6 + 5 4 5 - 3 + 2 5 6 - 3 + 2 17 18 - 3 + 2 76 77 - 3 + 2 - 253 - 254 - 3 + 261 + 262 + 2 - 1297 - 1298 - 3 + 1369 + 1370 + 2 @@ -11927,7 +11658,7 @@ 1 2 - 5114 + 5236 @@ -11943,7 +11674,7 @@ 1 2 - 5114 + 5236 @@ -11953,26 +11684,26 @@ ruby_ensure_def - 3981 + 4106 id - 3981 + 4106 ruby_exception_variable_def - 924 + 935 id - 924 + 935 child - 924 + 935 @@ -11986,7 +11717,7 @@ 1 2 - 924 + 935 @@ -12002,7 +11733,7 @@ 1 2 - 924 + 935 @@ -12012,19 +11743,19 @@ ruby_exceptions_child - 2188 + 2128 ruby_exceptions - 1938 + 1904 index - 20 + 11 child - 2188 + 2128 @@ -12038,17 +11769,17 @@ 1 2 - 1770 + 1748 2 - 4 - 152 + 5 + 153 - 4 - 9 - 15 + 5 + 6 + 2 @@ -12064,17 +11795,17 @@ 1 2 - 1770 + 1748 2 - 4 - 152 + 5 + 153 - 4 - 9 - 15 + 5 + 6 + 2 @@ -12090,11 +11821,6 @@ 1 2 - 7 - - - 2 - 3 2 @@ -12103,8 +11829,8 @@ 2 - 21 - 22 + 22 + 23 2 @@ -12113,8 +11839,8 @@ 2 - 761 - 762 + 806 + 807 2 @@ -12131,11 +11857,6 @@ 1 2 - 7 - - - 2 - 3 2 @@ -12144,8 +11865,8 @@ 2 - 21 - 22 + 22 + 23 2 @@ -12154,8 +11875,8 @@ 2 - 761 - 762 + 806 + 807 2 @@ -12172,7 +11893,7 @@ 1 2 - 2188 + 2128 @@ -12188,7 +11909,7 @@ 1 2 - 2188 + 2128 @@ -12198,11 +11919,11 @@ ruby_exceptions_def - 1938 + 1904 id - 1938 + 1904 @@ -12452,23 +12173,23 @@ ruby_for_def - 158 + 136 id - 158 + 136 body - 158 + 136 pattern - 158 + 136 value - 158 + 136 @@ -12482,7 +12203,7 @@ 1 2 - 158 + 136 @@ -12498,7 +12219,7 @@ 1 2 - 158 + 136 @@ -12514,7 +12235,7 @@ 1 2 - 158 + 136 @@ -12530,7 +12251,7 @@ 1 2 - 158 + 136 @@ -12546,7 +12267,7 @@ 1 2 - 158 + 136 @@ -12562,7 +12283,7 @@ 1 2 - 158 + 136 @@ -12578,7 +12299,7 @@ 1 2 - 158 + 136 @@ -12594,7 +12315,7 @@ 1 2 - 158 + 136 @@ -12610,7 +12331,7 @@ 1 2 - 158 + 136 @@ -12626,7 +12347,7 @@ 1 2 - 158 + 136 @@ -12642,7 +12363,7 @@ 1 2 - 158 + 136 @@ -12658,7 +12379,7 @@ 1 2 - 158 + 136 @@ -12668,19 +12389,19 @@ ruby_hash_child - 93915 + 96207 ruby_hash - 37005 + 37893 index - 1408 + 1439 child - 93915 + 96207 @@ -12694,32 +12415,32 @@ 1 2 - 15244 + 15577 2 3 - 10347 + 10573 3 4 - 4146 + 4318 4 5 - 4291 + 4385 5 20 - 2817 + 2878 20 108 - 157 + 161 @@ -12735,32 +12456,32 @@ 1 2 - 15244 + 15577 2 3 - 10347 + 10573 3 4 - 4146 + 4318 4 5 - 4291 + 4385 5 20 - 2817 + 2878 20 108 - 157 + 161 @@ -12776,41 +12497,41 @@ 1 2 - 355 + 363 2 3 - 250 + 255 3 4 - 329 + 336 5 6 - 105 + 107 7 13 - 118 + 121 16 55 - 118 + 121 59 - 1654 - 118 + 1660 + 121 - 2811 - 2812 + 2817 + 2818 13 @@ -12827,41 +12548,41 @@ 1 2 - 355 + 363 2 3 - 250 + 255 3 4 - 329 + 336 5 6 - 105 + 107 7 13 - 118 + 121 16 55 - 118 + 121 59 - 1654 - 118 + 1660 + 121 - 2811 - 2812 + 2817 + 2818 13 @@ -12878,7 +12599,7 @@ 1 2 - 93915 + 96207 @@ -12894,7 +12615,7 @@ 1 2 - 93915 + 96207 @@ -12904,22 +12625,22 @@ ruby_hash_def - 40888 + 41915 id - 40888 + 41915 ruby_hash_pattern_child - 98 + 94 ruby_hash_pattern - 70 + 68 index @@ -12927,7 +12648,7 @@ child - 98 + 94 @@ -12946,7 +12667,7 @@ 2 3 - 14 + 12 3 @@ -12972,7 +12693,7 @@ 2 3 - 14 + 12 3 @@ -13001,13 +12722,13 @@ 1 - 20 - 21 + 18 + 19 1 - 70 - 71 + 68 + 69 1 @@ -13032,13 +12753,13 @@ 1 - 20 - 21 + 18 + 19 1 - 70 - 71 + 68 + 69 1 @@ -13055,7 +12776,7 @@ 1 2 - 98 + 94 @@ -13071,7 +12792,7 @@ 1 2 - 98 + 94 @@ -13081,15 +12802,15 @@ ruby_hash_pattern_class - 9 + 32 ruby_hash_pattern - 9 + 32 class - 9 + 32 @@ -13103,7 +12824,7 @@ 1 2 - 9 + 32 @@ -13119,7 +12840,7 @@ 1 2 - 9 + 32 @@ -13129,26 +12850,26 @@ ruby_hash_pattern_def - 75 + 73 id - 75 + 73 ruby_hash_splat_argument_child - 1902 + 1988 ruby_hash_splat_argument - 1902 + 1988 child - 1902 + 1988 @@ -13162,7 +12883,7 @@ 1 2 - 1902 + 1988 @@ -13178,7 +12899,7 @@ 1 2 - 1902 + 1988 @@ -13188,37 +12909,37 @@ ruby_hash_splat_argument_def - 1902 + 1989 id - 1902 + 1989 ruby_hash_splat_parameter_def - 1596 + 1574 id - 1596 + 1574 ruby_hash_splat_parameter_name - 1366 + 1352 ruby_hash_splat_parameter - 1366 + 1352 name - 1366 + 1352 @@ -13232,7 +12953,7 @@ 1 2 - 1366 + 1352 @@ -13248,7 +12969,7 @@ 1 2 - 1366 + 1352 @@ -13258,19 +12979,19 @@ ruby_heredoc_body_child - 26162 + 26244 ruby_heredoc_body - 5519 + 5817 index - 552 + 512 child - 26162 + 26244 @@ -13284,12 +13005,12 @@ 2 3 - 3156 + 3504 4 5 - 692 + 701 5 @@ -13299,7 +13020,7 @@ 6 7 - 720 + 675 7 @@ -13308,13 +13029,13 @@ 10 - 15 - 415 + 17 + 467 - 16 + 17 218 - 203 + 137 @@ -13330,12 +13051,12 @@ 2 3 - 3156 + 3504 4 5 - 692 + 701 5 @@ -13345,7 +13066,7 @@ 6 7 - 720 + 675 7 @@ -13354,13 +13075,13 @@ 10 - 15 - 415 + 17 + 467 - 16 + 17 218 - 203 + 137 @@ -13376,32 +13097,32 @@ 1 2 - 326 + 302 2 3 - 43 + 40 3 5 - 50 + 47 5 - 11 - 43 + 13 + 40 - 11 - 46 - 43 + 13 + 43 + 40 - 57 - 2168 - 45 + 56 + 2463 + 42 @@ -13417,32 +13138,32 @@ 1 2 - 326 + 302 2 3 - 43 + 40 3 5 - 50 + 47 5 - 11 - 43 + 13 + 40 - 11 - 46 - 43 + 13 + 43 + 40 - 57 - 2168 - 45 + 56 + 2463 + 42 @@ -13458,7 +13179,7 @@ 1 2 - 26162 + 26244 @@ -13474,7 +13195,7 @@ 1 2 - 26162 + 26244 @@ -13484,26 +13205,26 @@ ruby_heredoc_body_def - 6178 + 6934 id - 6178 + 6934 ruby_if_alternative - 7005 + 7192 ruby_if - 7005 + 7192 alternative - 7005 + 7192 @@ -13517,7 +13238,7 @@ 1 2 - 7005 + 7192 @@ -13533,7 +13254,7 @@ 1 2 - 7005 + 7192 @@ -13543,15 +13264,15 @@ ruby_if_consequence - 16338 + 16117 ruby_if - 16338 + 16117 consequence - 16338 + 16117 @@ -13565,7 +13286,7 @@ 1 2 - 16338 + 16117 @@ -13581,7 +13302,7 @@ 1 2 - 16338 + 16117 @@ -13591,15 +13312,15 @@ ruby_if_def - 16391 + 16164 id - 16391 + 16164 condition - 16391 + 16164 @@ -13613,7 +13334,7 @@ 1 2 - 16391 + 16164 @@ -13629,7 +13350,7 @@ 1 2 - 16391 + 16164 @@ -13687,19 +13408,19 @@ ruby_if_modifier_def - 14611 + 14541 id - 14611 + 14541 body - 14611 + 14541 condition - 14611 + 14541 @@ -13713,7 +13434,7 @@ 1 2 - 14611 + 14541 @@ -13729,7 +13450,7 @@ 1 2 - 14611 + 14541 @@ -13745,7 +13466,7 @@ 1 2 - 14611 + 14541 @@ -13761,7 +13482,7 @@ 1 2 - 14611 + 14541 @@ -13777,7 +13498,7 @@ 1 2 - 14611 + 14541 @@ -13793,7 +13514,7 @@ 1 2 - 14611 + 14541 @@ -13803,15 +13524,15 @@ ruby_in_clause_body - 345 + 341 ruby_in_clause - 345 + 341 body - 345 + 341 @@ -13825,7 +13546,7 @@ 1 2 - 345 + 341 @@ -13841,7 +13562,7 @@ 1 2 - 345 + 341 @@ -13851,15 +13572,15 @@ ruby_in_clause_def - 385 + 381 id - 385 + 381 pattern - 385 + 381 @@ -13873,7 +13594,7 @@ 1 2 - 385 + 381 @@ -13889,7 +13610,7 @@ 1 2 - 385 + 381 @@ -13947,15 +13668,15 @@ ruby_in_def - 158 + 136 id - 158 + 136 child - 158 + 136 @@ -13969,7 +13690,7 @@ 1 2 - 158 + 136 @@ -13985,7 +13706,7 @@ 1 2 - 158 + 136 @@ -13995,11 +13716,11 @@ ruby_interpolation_child - 38305 + 38493 ruby_interpolation - 38305 + 38493 index @@ -14007,7 +13728,7 @@ child - 38305 + 38493 @@ -14021,7 +13742,7 @@ 1 2 - 38305 + 38493 @@ -14037,7 +13758,7 @@ 1 2 - 38305 + 38493 @@ -14051,8 +13772,8 @@ 12 - 15038 - 15039 + 16291 + 16292 2 @@ -14067,8 +13788,8 @@ 12 - 15038 - 15039 + 16291 + 16292 2 @@ -14085,7 +13806,7 @@ 1 2 - 38305 + 38493 @@ -14101,7 +13822,7 @@ 1 2 - 38305 + 38493 @@ -14111,26 +13832,26 @@ ruby_interpolation_def - 38305 + 38493 id - 38305 + 38493 ruby_keyword_parameter_def - 4144 + 4763 id - 4144 + 4763 name - 4144 + 4763 @@ -14144,7 +13865,7 @@ 1 2 - 4144 + 4763 @@ -14160,7 +13881,7 @@ 1 2 - 4144 + 4763 @@ -14170,15 +13891,15 @@ ruby_keyword_parameter_value - 3100 + 3293 ruby_keyword_parameter - 3100 + 3293 value - 3100 + 3293 @@ -14192,7 +13913,7 @@ 1 2 - 3100 + 3293 @@ -14208,7 +13929,7 @@ 1 2 - 3100 + 3293 @@ -14218,15 +13939,15 @@ ruby_keyword_pattern_def - 80 + 77 id - 80 + 77 key__ - 80 + 77 @@ -14240,7 +13961,7 @@ 1 2 - 80 + 77 @@ -14256,7 +13977,7 @@ 1 2 - 80 + 77 @@ -14266,15 +13987,15 @@ ruby_keyword_pattern_value - 40 + 56 ruby_keyword_pattern - 40 + 56 value - 40 + 56 @@ -14288,7 +14009,7 @@ 1 2 - 40 + 56 @@ -14304,7 +14025,7 @@ 1 2 - 40 + 56 @@ -14314,15 +14035,15 @@ ruby_lambda_def - 7948 + 8187 id - 7948 + 8187 body - 7948 + 8187 @@ -14336,7 +14057,7 @@ 1 2 - 7948 + 8187 @@ -14352,7 +14073,7 @@ 1 2 - 7948 + 8187 @@ -14362,15 +14083,15 @@ ruby_lambda_parameters - 1762 + 1811 ruby_lambda - 1762 + 1811 parameters - 1762 + 1811 @@ -14384,7 +14105,7 @@ 1 2 - 1762 + 1811 @@ -14400,7 +14121,7 @@ 1 2 - 1762 + 1811 @@ -14410,11 +14131,11 @@ ruby_lambda_parameters_child - 2109 + 2197 ruby_lambda_parameters - 1752 + 1801 index @@ -14422,7 +14143,7 @@ child - 2109 + 2197 @@ -14436,17 +14157,17 @@ 1 2 - 1514 + 1545 2 3 - 167 + 164 3 9 - 71 + 92 @@ -14462,17 +14183,17 @@ 1 2 - 1514 + 1545 2 3 - 167 + 164 3 9 - 71 + 92 @@ -14511,18 +14232,18 @@ 1 - 71 - 72 + 92 + 93 1 - 238 - 239 + 256 + 257 1 - 1752 - 1753 + 1801 + 1802 1 @@ -14562,18 +14283,18 @@ 1 - 71 - 72 + 92 + 93 1 - 238 - 239 + 256 + 257 1 - 1752 - 1753 + 1801 + 1802 1 @@ -14590,7 +14311,7 @@ 1 2 - 2109 + 2197 @@ -14606,7 +14327,7 @@ 1 2 - 2109 + 2197 @@ -14616,22 +14337,22 @@ ruby_lambda_parameters_def - 1762 + 1811 id - 1762 + 1811 ruby_left_assignment_list_child - 6610 + 6934 ruby_left_assignment_list - 2994 + 3100 index @@ -14639,7 +14360,7 @@ child - 6610 + 6934 @@ -14653,22 +14374,22 @@ 1 2 - 372 + 382 2 3 - 1951 + 2002 3 4 - 505 + 531 4 16 - 166 + 185 @@ -14684,22 +14405,22 @@ 1 2 - 372 + 382 2 3 - 1951 + 2002 3 4 - 505 + 531 4 16 - 166 + 185 @@ -14713,63 +14434,63 @@ 12 - 2 - 3 + 3 + 4 1 - - 4 - 5 - 2 - 6 7 - 3 + 2 10 11 + 3 + + + 15 + 16 1 - 14 - 15 + 20 + 21 1 - 16 - 17 + 22 + 23 1 - 30 - 31 + 41 + 42 1 - 59 - 60 + 72 + 73 1 - 166 - 167 + 185 + 186 1 - 671 - 672 + 716 + 717 1 - 2622 - 2623 + 2718 + 2719 1 - 2994 - 2995 + 3100 + 3101 1 @@ -14784,63 +14505,63 @@ 12 - 2 - 3 + 3 + 4 1 - - 4 - 5 - 2 - 6 7 - 3 + 2 10 11 + 3 + + + 15 + 16 1 - 14 - 15 + 20 + 21 1 - 16 - 17 + 22 + 23 1 - 30 - 31 + 41 + 42 1 - 59 - 60 + 72 + 73 1 - 166 - 167 + 185 + 186 1 - 671 - 672 + 716 + 717 1 - 2622 - 2623 + 2718 + 2719 1 - 2994 - 2995 + 3100 + 3101 1 @@ -14857,7 +14578,7 @@ 1 2 - 6610 + 6934 @@ -14873,7 +14594,7 @@ 1 2 - 6610 + 6934 @@ -14883,11 +14604,11 @@ ruby_left_assignment_list_def - 2994 + 3100 id - 2994 + 3100 @@ -15010,15 +14731,15 @@ ruby_method_body - 101013 + 102401 ruby_method - 101013 + 102401 body - 101013 + 102401 @@ -15032,7 +14753,7 @@ 1 2 - 101013 + 102401 @@ -15048,7 +14769,7 @@ 1 2 - 101013 + 102401 @@ -15058,15 +14779,15 @@ ruby_method_def - 102124 + 103532 id - 102124 + 103532 name - 102124 + 103532 @@ -15080,7 +14801,7 @@ 1 2 - 102124 + 103532 @@ -15096,7 +14817,7 @@ 1 2 - 102124 + 103532 @@ -15106,15 +14827,15 @@ ruby_method_parameters - 29141 + 29519 ruby_method - 29141 + 29519 parameters - 29141 + 29519 @@ -15128,7 +14849,7 @@ 1 2 - 29141 + 29519 @@ -15144,7 +14865,7 @@ 1 2 - 29141 + 29519 @@ -15154,19 +14875,19 @@ ruby_method_parameters_child - 50543 + 51112 ruby_method_parameters - 30620 + 31001 index - 39 + 41 child - 50543 + 51112 @@ -15180,22 +14901,22 @@ 1 2 - 18615 + 18836 2 3 - 7339 + 7543 3 4 - 2903 + 2840 4 - 14 - 1762 + 15 + 1781 @@ -15211,22 +14932,22 @@ 1 2 - 18615 + 18836 2 3 - 7339 + 7543 3 4 - 2903 + 2840 4 - 14 - 1762 + 15 + 1781 @@ -15242,62 +14963,62 @@ 1 2 - 6 + 8 4 5 - 3 + 2 - 5 - 6 - 3 + 7 + 8 + 2 - 11 - 12 - 3 + 13 + 14 + 2 - 29 - 30 - 3 + 37 + 38 + 2 - 54 - 55 - 3 + 59 + 60 + 2 - 125 - 126 - 3 + 129 + 130 + 2 - 255 - 256 - 3 + 262 + 263 + 2 - 574 - 575 - 3 + 594 + 595 + 2 - 1520 - 1521 - 3 + 1541 + 1542 + 2 - 3911 - 3912 - 3 + 4056 + 4057 + 2 - 9975 - 9976 - 3 + 10336 + 10337 + 2 @@ -15313,62 +15034,62 @@ 1 2 - 6 + 8 4 5 - 3 + 2 - 5 - 6 - 3 + 7 + 8 + 2 - 11 - 12 - 3 + 13 + 14 + 2 - 29 - 30 - 3 + 37 + 38 + 2 - 54 - 55 - 3 + 59 + 60 + 2 - 125 - 126 - 3 + 129 + 130 + 2 - 255 - 256 - 3 + 262 + 263 + 2 - 574 - 575 - 3 + 594 + 595 + 2 - 1520 - 1521 - 3 + 1541 + 1542 + 2 - 3911 - 3912 - 3 + 4056 + 4057 + 2 - 9975 - 9976 - 3 + 10336 + 10337 + 2 @@ -15384,7 +15105,7 @@ 1 2 - 50543 + 51112 @@ -15400,7 +15121,7 @@ 1 2 - 50543 + 51112 @@ -15410,26 +15131,26 @@ ruby_method_parameters_def - 30832 + 31208 id - 30832 + 31208 ruby_module_body - 22274 + 22881 ruby_module - 22274 + 22881 body - 22274 + 22881 @@ -15443,7 +15164,7 @@ 1 2 - 22274 + 22881 @@ -15459,7 +15180,7 @@ 1 2 - 22274 + 22881 @@ -15469,15 +15190,15 @@ ruby_module_def - 22353 + 22962 id - 22353 + 22962 name - 22353 + 22962 @@ -15491,7 +15212,7 @@ 1 2 - 22353 + 22962 @@ -15507,7 +15228,7 @@ 1 2 - 22353 + 22962 @@ -15517,15 +15238,15 @@ ruby_next_child - 241 + 256 ruby_next - 241 + 256 child - 241 + 256 @@ -15539,7 +15260,7 @@ 1 2 - 241 + 256 @@ -15555,7 +15276,7 @@ 1 2 - 241 + 256 @@ -15565,34 +15286,34 @@ ruby_next_def - 1902 + 2020 id - 1902 + 2020 ruby_operator_assignment_def - 6006 + 6160 id - 6006 + 6160 left - 6006 + 6160 operator - 17 + 16 right - 6006 + 6160 @@ -15606,7 +15327,7 @@ 1 2 - 6006 + 6160 @@ -15622,7 +15343,7 @@ 1 2 - 6006 + 6160 @@ -15638,7 +15359,7 @@ 1 2 - 6006 + 6160 @@ -15654,7 +15375,7 @@ 1 2 - 6006 + 6160 @@ -15670,7 +15391,7 @@ 1 2 - 6006 + 6160 @@ -15686,7 +15407,7 @@ 1 2 - 6006 + 6160 @@ -15700,8 +15421,8 @@ 12 - 2 - 3 + 3 + 4 2 @@ -15710,28 +15431,28 @@ 2 - 8 - 9 + 10 + 11 2 - 9 - 10 + 11 + 12 2 - 60 - 61 + 64 + 65 2 - 630 - 631 + 707 + 708 2 - 1645 - 1646 + 1808 + 1809 2 @@ -15746,8 +15467,8 @@ 12 - 2 - 3 + 3 + 4 2 @@ -15756,28 +15477,28 @@ 2 - 8 - 9 + 10 + 11 2 - 9 - 10 + 11 + 12 2 - 60 - 61 + 64 + 65 2 - 630 - 631 + 707 + 708 2 - 1645 - 1646 + 1808 + 1809 2 @@ -15792,8 +15513,8 @@ 12 - 2 - 3 + 3 + 4 2 @@ -15802,28 +15523,28 @@ 2 - 8 - 9 + 10 + 11 2 - 9 - 10 + 11 + 12 2 - 60 - 61 + 64 + 65 2 - 630 - 631 + 707 + 708 2 - 1645 - 1646 + 1808 + 1809 2 @@ -15840,7 +15561,7 @@ 1 2 - 6006 + 6160 @@ -15856,7 +15577,7 @@ 1 2 - 6006 + 6160 @@ -15872,7 +15593,7 @@ 1 2 - 6006 + 6160 @@ -15882,19 +15603,19 @@ ruby_optional_parameter_def - 6636 + 6556 id - 6636 + 6556 name - 6636 + 6556 value - 6636 + 6556 @@ -15908,7 +15629,7 @@ 1 2 - 6636 + 6556 @@ -15924,7 +15645,7 @@ 1 2 - 6636 + 6556 @@ -15940,7 +15661,7 @@ 1 2 - 6636 + 6556 @@ -15956,7 +15677,7 @@ 1 2 - 6636 + 6556 @@ -15972,7 +15693,7 @@ 1 2 - 6636 + 6556 @@ -15988,7 +15709,7 @@ 1 2 - 6636 + 6556 @@ -15998,15 +15719,15 @@ ruby_pair_def - 248347 + 254198 id - 248347 + 254198 key__ - 248347 + 254198 @@ -16020,7 +15741,7 @@ 1 2 - 248347 + 254198 @@ -16036,7 +15757,7 @@ 1 2 - 248347 + 254198 @@ -16046,15 +15767,15 @@ ruby_pair_value - 248347 + 254198 ruby_pair - 248347 + 254198 value - 248347 + 254198 @@ -16068,7 +15789,7 @@ 1 2 - 248347 + 254198 @@ -16084,7 +15805,7 @@ 1 2 - 248347 + 254198 @@ -16142,11 +15863,11 @@ ruby_parenthesized_statements_child - 10948 + 11347 ruby_parenthesized_statements - 10874 + 11258 index @@ -16154,7 +15875,7 @@ child - 10948 + 11347 @@ -16168,12 +15889,12 @@ 1 2 - 10810 + 11179 2 5 - 64 + 79 @@ -16189,12 +15910,12 @@ 1 2 - 10810 + 11179 2 5 - 64 + 79 @@ -16218,13 +15939,13 @@ 1 - 64 - 65 + 79 + 80 1 - 10874 - 10875 + 11258 + 11259 1 @@ -16249,13 +15970,13 @@ 1 - 64 - 65 + 79 + 80 1 - 10874 - 10875 + 11258 + 11259 1 @@ -16272,7 +15993,7 @@ 1 2 - 10948 + 11347 @@ -16288,7 +16009,7 @@ 1 2 - 10948 + 11347 @@ -16298,26 +16019,26 @@ ruby_parenthesized_statements_def - 10912 + 11296 id - 10912 + 11296 ruby_pattern_def - 4153 + 4745 id - 4153 + 4745 child - 4153 + 4745 @@ -16331,7 +16052,7 @@ 1 2 - 4153 + 4745 @@ -16347,7 +16068,7 @@ 1 2 - 4153 + 4745 @@ -16357,11 +16078,11 @@ ruby_program_child - 33982 + 33893 ruby_program - 10658 + 10674 index @@ -16369,7 +16090,7 @@ child - 33982 + 33893 @@ -16383,32 +16104,32 @@ 1 2 - 3932 + 3956 2 3 - 2514 + 2531 3 4 - 1758 + 1772 4 5 - 801 + 794 5 8 - 917 + 902 8 - 79 - 733 + 81 + 716 @@ -16424,32 +16145,32 @@ 1 2 - 3932 + 3956 2 3 - 2514 + 2531 3 4 - 1758 + 1772 4 5 - 801 + 794 5 8 - 917 + 902 8 - 79 - 733 + 81 + 716 @@ -16465,57 +16186,57 @@ 1 2 - 46 + 50 2 3 - 36 + 29 - 4 - 9 - 21 + 3 + 7 + 17 - 9 - 12 - 18 + 8 + 11 + 17 - 13 - 17 - 18 + 11 + 15 + 17 - 17 - 28 - 18 + 16 + 23 + 17 - 29 - 44 - 18 + 26 + 36 + 17 - 45 - 80 - 18 + 38 + 60 + 17 - 89 - 190 - 18 + 67 + 129 + 17 - 239 - 1373 - 18 + 145 + 397 + 17 - 2191 - 3473 - 6 + 540 + 3560 + 14 @@ -16531,57 +16252,57 @@ 1 2 - 46 + 50 2 3 - 36 + 29 - 4 - 9 - 21 + 3 + 7 + 17 - 9 - 12 - 18 + 8 + 11 + 17 - 13 - 17 - 18 + 11 + 15 + 17 - 17 - 28 - 18 + 16 + 23 + 17 - 29 - 44 - 18 + 26 + 36 + 17 - 45 - 80 - 18 + 38 + 60 + 17 - 89 - 190 - 18 + 67 + 129 + 17 - 239 - 1373 - 18 + 145 + 397 + 17 - 2191 - 3473 - 6 + 540 + 3560 + 14 @@ -16597,7 +16318,7 @@ 1 2 - 33982 + 33893 @@ -16613,7 +16334,7 @@ 1 2 - 33982 + 33893 @@ -16623,26 +16344,26 @@ ruby_program_def - 18219 + 18697 id - 18219 + 18697 ruby_range_begin - 4491 + 4748 ruby_range - 4491 + 4748 begin - 4491 + 4748 @@ -16656,7 +16377,7 @@ 1 2 - 4491 + 4748 @@ -16672,7 +16393,7 @@ 1 2 - 4491 + 4748 @@ -16682,11 +16403,11 @@ ruby_range_def - 4770 + 5066 id - 4770 + 5066 operator @@ -16704,7 +16425,7 @@ 1 2 - 4770 + 5066 @@ -16718,13 +16439,13 @@ 12 - 1634 - 1635 + 1376 + 1377 1 - 3136 - 3137 + 3690 + 3691 1 @@ -16735,15 +16456,15 @@ ruby_range_end - 4576 + 4818 ruby_range - 4576 + 4818 end - 4576 + 4818 @@ -16757,7 +16478,7 @@ 1 2 - 4576 + 4818 @@ -16773,7 +16494,7 @@ 1 2 - 4576 + 4818 @@ -16783,15 +16504,15 @@ ruby_rational_def - 138 + 166 id - 138 + 166 child - 138 + 166 @@ -16805,7 +16526,7 @@ 1 2 - 138 + 166 @@ -16821,7 +16542,7 @@ 1 2 - 138 + 166 @@ -16890,19 +16611,19 @@ ruby_regex_child - 44658 + 45368 ruby_regex - 13335 + 13665 index - 150 + 146 child - 44658 + 45368 @@ -16916,42 +16637,42 @@ 1 2 - 6808 + 7006 2 3 - 752 + 800 3 4 - 1826 + 1868 4 5 - 506 + 500 5 6 - 1108 + 1124 6 8 - 1034 + 1031 8 16 - 1055 + 1094 16 50 - 242 + 236 @@ -16967,42 +16688,42 @@ 1 2 - 6808 + 7006 2 3 - 752 + 800 3 4 - 1826 + 1868 4 5 - 506 + 500 5 6 - 1108 + 1124 6 8 - 1034 + 1031 8 16 - 1055 + 1094 16 50 - 242 + 236 @@ -17018,67 +16739,67 @@ 1 2 - 18 + 17 4 5 - 12 + 11 6 7 - 3 + 2 7 8 - 12 + 11 8 15 - 12 + 11 15 - 19 - 12 + 18 + 8 - 19 - 23 - 9 + 18 + 21 + 11 - 23 + 21 31 - 12 + 11 32 80 - 12 + 11 103 - 175 - 12 + 184 + 11 - 239 - 424 - 12 + 249 + 445 + 11 - 671 - 1287 - 12 + 696 + 1331 + 11 - 1881 - 4345 - 9 + 1953 + 4557 + 8 @@ -17094,67 +16815,67 @@ 1 2 - 18 + 17 4 5 - 12 + 11 6 7 - 3 + 2 7 8 - 12 + 11 8 15 - 12 + 11 15 - 19 - 12 + 18 + 8 - 19 - 23 - 9 + 18 + 21 + 11 - 23 + 21 31 - 12 + 11 32 80 - 12 + 11 103 - 175 - 12 + 184 + 11 - 239 - 424 - 12 + 249 + 445 + 11 - 671 - 1287 - 12 + 696 + 1331 + 11 - 1881 - 4345 - 9 + 1953 + 4557 + 8 @@ -17170,7 +16891,7 @@ 1 2 - 44658 + 45368 @@ -17186,7 +16907,7 @@ 1 2 - 44658 + 45368 @@ -17196,26 +16917,26 @@ ruby_regex_def - 13350 + 13680 id - 13350 + 13680 ruby_rescue_body - 2083 + 2050 ruby_rescue - 2083 + 2050 body - 2083 + 2050 @@ -17229,7 +16950,7 @@ 1 2 - 2083 + 2050 @@ -17245,7 +16966,7 @@ 1 2 - 2083 + 2050 @@ -17255,26 +16976,26 @@ ruby_rescue_def - 2346 + 2299 id - 2346 + 2299 ruby_rescue_exceptions - 1938 + 1904 ruby_rescue - 1938 + 1904 exceptions - 1938 + 1904 @@ -17288,7 +17009,7 @@ 1 2 - 1938 + 1904 @@ -17304,7 +17025,7 @@ 1 2 - 1938 + 1904 @@ -17314,19 +17035,19 @@ ruby_rescue_modifier_def - 448 + 458 id - 448 + 458 body - 448 + 458 handler - 448 + 458 @@ -17340,7 +17061,7 @@ 1 2 - 448 + 458 @@ -17356,7 +17077,7 @@ 1 2 - 448 + 458 @@ -17372,7 +17093,7 @@ 1 2 - 448 + 458 @@ -17388,7 +17109,7 @@ 1 2 - 448 + 458 @@ -17404,7 +17125,7 @@ 1 2 - 448 + 458 @@ -17420,7 +17141,7 @@ 1 2 - 448 + 458 @@ -17430,15 +17151,15 @@ ruby_rescue_variable - 924 + 935 ruby_rescue - 924 + 935 variable - 924 + 935 @@ -17452,7 +17173,7 @@ 1 2 - 924 + 935 @@ -17468,7 +17189,7 @@ 1 2 - 924 + 935 @@ -17478,15 +17199,15 @@ ruby_rest_assignment_child - 383 + 392 ruby_rest_assignment - 383 + 392 child - 383 + 392 @@ -17500,7 +17221,7 @@ 1 2 - 383 + 392 @@ -17516,7 +17237,7 @@ 1 2 - 383 + 392 @@ -17526,11 +17247,11 @@ ruby_rest_assignment_def - 401 + 414 id - 401 + 414 @@ -17585,26 +17306,26 @@ ruby_retry_def - 60 + 58 id - 60 + 58 ruby_return_child - 5084 + 4938 ruby_return - 5084 + 4938 child - 5084 + 4938 @@ -17618,7 +17339,7 @@ 1 2 - 5084 + 4938 @@ -17634,7 +17355,7 @@ 1 2 - 5084 + 4938 @@ -17644,30 +17365,30 @@ ruby_return_def - 8197 + 7979 id - 8197 + 7979 ruby_right_assignment_list_child - 2600 + 2741 ruby_right_assignment_list - 1224 + 1280 index - 15 + 14 child - 2600 + 2741 @@ -17681,17 +17402,17 @@ 2 3 - 1098 + 1136 3 4 - 104 + 113 4 6 - 21 + 29 @@ -17707,17 +17428,17 @@ 2 3 - 1098 + 1136 3 4 - 104 + 113 4 6 - 21 + 29 @@ -17731,24 +17452,24 @@ 12 - 1 - 2 - 3 + 2 + 3 + 2 - 7 - 8 - 3 + 10 + 11 + 2 - 41 - 42 - 3 + 48 + 49 + 2 - 399 - 400 - 6 + 427 + 428 + 5 @@ -17762,24 +17483,24 @@ 12 - 1 - 2 - 3 + 2 + 3 + 2 - 7 - 8 - 3 + 10 + 11 + 2 - 41 - 42 - 3 + 48 + 49 + 2 - 399 - 400 - 6 + 427 + 428 + 5 @@ -17795,7 +17516,7 @@ 1 2 - 2600 + 2741 @@ -17811,7 +17532,7 @@ 1 2 - 2600 + 2741 @@ -17821,26 +17542,26 @@ ruby_right_assignment_list_def - 1224 + 1280 id - 1224 + 1280 ruby_scope_resolution_def - 84884 + 87113 id - 84884 + 87113 name - 84884 + 87113 @@ -17854,7 +17575,7 @@ 1 2 - 84884 + 87113 @@ -17870,7 +17591,7 @@ 1 2 - 84884 + 87113 @@ -17880,15 +17601,15 @@ ruby_scope_resolution_scope - 83028 + 85203 ruby_scope_resolution - 83028 + 85203 scope - 83028 + 85203 @@ -17902,7 +17623,7 @@ 1 2 - 83028 + 85203 @@ -17918,7 +17639,7 @@ 1 2 - 83028 + 85203 @@ -17928,15 +17649,15 @@ ruby_setter_def - 653 + 656 id - 653 + 656 name - 653 + 656 @@ -17950,7 +17671,7 @@ 1 2 - 653 + 656 @@ -17966,7 +17687,7 @@ 1 2 - 653 + 656 @@ -17976,15 +17697,15 @@ ruby_singleton_class_body - 663 + 677 ruby_singleton_class - 663 + 677 body - 663 + 677 @@ -17998,7 +17719,7 @@ 1 2 - 663 + 677 @@ -18014,7 +17735,7 @@ 1 2 - 663 + 677 @@ -18024,15 +17745,15 @@ ruby_singleton_class_def - 663 + 677 id - 663 + 677 value - 663 + 677 @@ -18046,7 +17767,7 @@ 1 2 - 663 + 677 @@ -18062,7 +17783,7 @@ 1 2 - 663 + 677 @@ -18072,15 +17793,15 @@ ruby_singleton_method_body - 6447 + 6313 ruby_singleton_method - 6447 + 6313 body - 6447 + 6313 @@ -18094,7 +17815,7 @@ 1 2 - 6447 + 6313 @@ -18110,7 +17831,7 @@ 1 2 - 6447 + 6313 @@ -18120,19 +17841,19 @@ ruby_singleton_method_def - 6459 + 6325 id - 6459 + 6325 name - 6459 + 6325 object - 6459 + 6325 @@ -18146,7 +17867,7 @@ 1 2 - 6459 + 6325 @@ -18162,7 +17883,7 @@ 1 2 - 6459 + 6325 @@ -18178,7 +17899,7 @@ 1 2 - 6459 + 6325 @@ -18194,7 +17915,7 @@ 1 2 - 6459 + 6325 @@ -18210,7 +17931,7 @@ 1 2 - 6459 + 6325 @@ -18226,7 +17947,7 @@ 1 2 - 6459 + 6325 @@ -18236,15 +17957,15 @@ ruby_singleton_method_parameters - 4073 + 3929 ruby_singleton_method - 4073 + 3929 parameters - 4073 + 3929 @@ -18258,7 +17979,7 @@ 1 2 - 4073 + 3929 @@ -18274,7 +17995,7 @@ 1 2 - 4073 + 3929 @@ -18284,15 +18005,15 @@ ruby_splat_argument_child - 3454 + 3605 ruby_splat_argument - 3454 + 3605 child - 3454 + 3605 @@ -18306,7 +18027,7 @@ 1 2 - 3454 + 3605 @@ -18322,7 +18043,7 @@ 1 2 - 3454 + 3605 @@ -18332,37 +18053,37 @@ ruby_splat_argument_def - 3454 + 3606 id - 3454 + 3606 ruby_splat_parameter_def - 3192 + 3014 id - 3192 + 3014 ruby_splat_parameter_name - 2514 + 2297 ruby_splat_parameter - 2514 + 2297 name - 2514 + 2297 @@ -18376,7 +18097,7 @@ 1 2 - 2514 + 2297 @@ -18392,7 +18113,7 @@ 1 2 - 2514 + 2297 @@ -18402,19 +18123,19 @@ ruby_string_array_child - 12799 + 13136 ruby_string_array - 4062 + 4120 index - 536 + 606 child - 12799 + 13136 @@ -18428,32 +18149,32 @@ 1 2 - 1313 + 1350 2 3 - 1310 + 1304 3 4 - 625 + 630 4 5 - 349 + 356 5 10 - 325 + 332 10 - 537 - 140 + 607 + 148 @@ -18469,32 +18190,32 @@ 1 2 - 1313 + 1350 2 3 - 1310 + 1304 3 4 - 625 + 630 4 5 - 349 + 356 5 10 - 325 + 332 10 - 537 - 140 + 607 + 148 @@ -18510,22 +18231,22 @@ 1 2 - 432 + 506 2 - 7 - 42 + 10 + 48 - 7 - 47 - 41 + 11 + 266 + 46 - 49 - 4063 - 21 + 344 + 4121 + 6 @@ -18541,22 +18262,22 @@ 1 2 - 432 + 506 2 - 7 - 42 + 10 + 48 - 7 - 47 - 41 + 11 + 266 + 46 - 49 - 4063 - 21 + 344 + 4121 + 6 @@ -18572,7 +18293,7 @@ 1 2 - 12799 + 13136 @@ -18588,7 +18309,7 @@ 1 2 - 12799 + 13136 @@ -18598,22 +18319,22 @@ ruby_string_array_def - 4213 + 4287 id - 4213 + 4287 ruby_string_child - 549106 + 559228 ruby_string__ - 477859 + 483542 index @@ -18621,7 +18342,7 @@ child - 549106 + 559228 @@ -18635,12 +18356,12 @@ 1 2 - 449884 + 454555 2 282 - 27975 + 28987 @@ -18656,12 +18377,12 @@ 1 2 - 449884 + 454555 2 282 - 27975 + 28987 @@ -18677,31 +18398,36 @@ 1 2 - 129 + 95 - 4 - 5 - 64 + 2 + 3 + 34 5 - 7 + 6 + 64 + + + 6 + 9 22 - 7 - 27 + 9 + 37 22 - 28 - 83 + 37 + 108 22 - 104 - 477860 + 129 + 483543 22 @@ -18718,31 +18444,36 @@ 1 2 - 129 + 95 - 4 - 5 - 64 + 2 + 3 + 34 5 - 7 + 6 + 64 + + + 6 + 9 22 - 7 - 27 + 9 + 37 22 - 28 - 83 + 37 + 108 22 - 104 - 477860 + 129 + 483543 22 @@ -18759,7 +18490,7 @@ 1 2 - 549106 + 559228 @@ -18775,7 +18506,7 @@ 1 2 - 549106 + 559228 @@ -18785,30 +18516,30 @@ ruby_string_def - 485218 + 490602 id - 485218 + 490602 ruby_subshell_child - 561 + 551 ruby_subshell - 365 + 359 index - 33 + 32 child - 561 + 551 @@ -18827,17 +18558,17 @@ 2 3 - 58 + 53 3 5 - 33 + 32 5 12 - 9 + 8 @@ -18858,17 +18589,17 @@ 2 3 - 58 + 53 3 5 - 33 + 32 5 12 - 9 + 8 @@ -18884,37 +18615,37 @@ 1 2 - 12 + 11 2 3 - 6 + 5 3 4 - 3 + 2 - 6 - 7 - 3 + 7 + 8 + 2 14 15 - 3 + 2 - 33 - 34 - 3 + 32 + 33 + 2 - 119 - 120 - 3 + 120 + 121 + 2 @@ -18930,37 +18661,37 @@ 1 2 - 12 + 11 2 3 - 6 + 5 3 4 - 3 + 2 - 6 - 7 - 3 + 7 + 8 + 2 14 15 - 3 + 2 - 33 - 34 - 3 + 32 + 33 + 2 - 119 - 120 - 3 + 120 + 121 + 2 @@ -18976,7 +18707,7 @@ 1 2 - 561 + 551 @@ -18992,7 +18723,7 @@ 1 2 - 561 + 551 @@ -19002,26 +18733,26 @@ ruby_subshell_def - 365 + 359 id - 365 + 359 ruby_superclass_def - 13666 + 13806 id - 13666 + 13806 child - 13666 + 13806 @@ -19035,7 +18766,7 @@ 1 2 - 13666 + 13806 @@ -19051,7 +18782,7 @@ 1 2 - 13666 + 13806 @@ -19061,19 +18792,19 @@ ruby_symbol_array_child - 7967 + 8435 ruby_symbol_array - 2170 + 2240 index - 241 + 233 child - 7967 + 8435 @@ -19087,37 +18818,37 @@ 1 2 - 178 + 219 2 3 - 1161 + 1129 3 4 - 354 + 347 4 5 - 127 + 160 5 8 - 183 + 189 8 - 94 - 163 + 24 + 170 - 95 - 96 - 2 + 24 + 100 + 23 @@ -19133,37 +18864,37 @@ 1 2 - 178 + 219 2 3 - 1161 + 1129 3 4 - 354 + 347 4 5 - 127 + 160 5 8 - 183 + 189 8 - 94 - 163 + 24 + 170 - 95 - 96 - 2 + 24 + 100 + 23 @@ -19179,37 +18910,37 @@ 1 2 - 5 + 9 2 3 - 152 + 139 4 - 9 - 20 + 8 + 18 - 9 - 20 - 20 + 8 + 17 + 18 - 23 - 47 - 20 + 19 + 41 + 18 - 55 - 783 - 20 + 44 + 163 + 18 - 852 - 853 - 2 + 230 + 949 + 9 @@ -19225,37 +18956,37 @@ 1 2 - 5 + 9 2 3 - 152 + 139 4 - 9 - 20 + 8 + 18 - 9 - 20 - 20 + 8 + 17 + 18 - 23 - 47 - 20 + 19 + 41 + 18 - 55 - 783 - 20 + 44 + 163 + 18 - 852 - 853 - 2 + 230 + 949 + 9 @@ -19271,7 +19002,7 @@ 1 2 - 7967 + 8435 @@ -19287,7 +19018,7 @@ 1 2 - 7967 + 8435 @@ -19297,30 +19028,30 @@ ruby_symbol_array_def - 2170 + 2240 id - 2170 + 2240 ruby_test_pattern_def - 4 + 5 id - 4 + 5 pattern - 4 + 5 value - 4 + 5 @@ -19334,7 +19065,7 @@ 1 2 - 4 + 5 @@ -19350,7 +19081,7 @@ 1 2 - 4 + 5 @@ -19366,7 +19097,7 @@ 1 2 - 4 + 5 @@ -19382,7 +19113,7 @@ 1 2 - 4 + 5 @@ -19398,7 +19129,7 @@ 1 2 - 4 + 5 @@ -19414,7 +19145,7 @@ 1 2 - 4 + 5 @@ -19424,19 +19155,19 @@ ruby_then_child - 37566 + 37016 ruby_then - 22451 + 22229 index - 91 + 85 child - 37566 + 37016 @@ -19450,22 +19181,22 @@ 1 2 - 14093 + 13943 2 3 - 5076 + 5070 3 4 - 1811 + 1817 4 37 - 1469 + 1398 @@ -19481,22 +19212,22 @@ 1 2 - 14093 + 13943 2 3 - 5076 + 5070 3 4 - 1811 + 1817 4 37 - 1469 + 1398 @@ -19512,51 +19243,51 @@ 1 2 - 35 + 30 - 3 + 2 4 - 2 + 4 4 5 - 10 + 9 - 5 + 6 8 - 5 + 4 - 9 - 10 - 5 + 8 + 9 + 4 10 - 18 + 19 7 - 29 - 60 + 30 + 61 7 - 95 - 309 + 98 + 310 7 - 577 - 3282 + 592 + 3508 7 - 8814 - 8815 + 9408 + 9409 2 @@ -19573,51 +19304,51 @@ 1 2 - 35 + 30 - 3 + 2 4 - 2 + 4 4 5 - 10 + 9 - 5 + 6 8 - 5 + 4 - 9 - 10 - 5 + 8 + 9 + 4 10 - 18 + 19 7 - 29 - 60 + 30 + 61 7 - 95 - 309 + 98 + 310 7 - 577 - 3282 + 592 + 3508 7 - 8814 - 8815 + 9408 + 9409 2 @@ -19634,7 +19365,7 @@ 1 2 - 37566 + 37016 @@ -19650,7 +19381,7 @@ 1 2 - 37566 + 37016 @@ -19660,22 +19391,22 @@ ruby_then_def - 22451 + 22229 id - 22451 + 22229 ruby_tokeninfo - 6212759 + 6351611 id - 6212759 + 6351611 kind @@ -19683,7 +19414,7 @@ value - 272576 + 275925 @@ -19697,7 +19428,7 @@ 1 2 - 6212759 + 6351611 @@ -19713,7 +19444,7 @@ 1 2 - 6212759 + 6351611 @@ -19727,63 +19458,68 @@ 12 - 42 + 1 + 2 + 4 + + + 49 160 - 5 + 4 - 262 - 428 - 5 + 291 + 443 + 4 - 1906 - 1907 + 2054 + 2055 2 - 2167 - 2168 - 5 + 2462 + 2463 + 4 - 4685 - 4919 - 5 + 5047 + 5260 + 4 - 5076 - 6845 - 5 + 5496 + 7346 + 4 - 9531 - 10121 - 5 + 10365 + 10609 + 4 - 14916 - 20953 - 5 + 15376 + 22709 + 4 - 28887 - 64458 - 5 + 31415 + 70704 + 4 - 69189 - 98135 - 5 + 77014 + 106932 + 4 - 117445 - 609106 - 5 + 129596 + 673263 + 4 - 1367617 - 1367618 + 1509036 + 1509037 2 @@ -19800,51 +19536,51 @@ 1 2 - 12 + 16 - 5 + 6 26 - 5 + 4 - 30 - 41 - 5 + 36 + 48 + 4 - 70 - 122 - 5 + 68 + 121 + 4 - 135 - 172 - 5 + 151 + 181 + 4 - 1500 - 1951 - 5 + 1509 + 2060 + 4 - 3612 - 4307 - 5 + 3983 + 4628 + 4 - 5291 - 8590 - 5 + 5781 + 9380 + 4 - 12176 - 21807 - 5 + 13063 + 24102 + 4 - 53746 - 53747 + 58689 + 58690 2 @@ -19861,32 +19597,32 @@ 1 2 - 162402 + 164156 2 3 - 39879 + 41140 3 4 - 19155 + 19333 4 7 - 22724 + 22761 7 29 - 20693 + 20750 29 - 222217 - 7720 + 243390 + 7783 @@ -19902,12 +19638,12 @@ 1 2 - 259340 + 262839 2 5 - 13235 + 13085 @@ -19917,15 +19653,15 @@ ruby_unary_def - 13726 + 14535 id - 13726 + 14535 operand - 13726 + 14535 operator @@ -19943,7 +19679,7 @@ 1 2 - 13726 + 14535 @@ -19959,7 +19695,7 @@ 1 2 - 13726 + 14535 @@ -19975,7 +19711,7 @@ 1 2 - 13726 + 14535 @@ -19991,7 +19727,7 @@ 1 2 - 13726 + 14535 @@ -20005,33 +19741,33 @@ 12 - 98 - 99 + 97 + 98 1 - 190 - 191 + 172 + 173 1 - 566 - 567 + 947 + 948 1 - 1301 - 1302 + 1369 + 1370 1 - 1938 - 1939 + 2120 + 2121 1 - 9633 - 9634 + 9830 + 9831 1 @@ -20046,33 +19782,33 @@ 12 - 98 - 99 + 97 + 98 1 - 190 - 191 + 172 + 173 1 - 566 - 567 + 947 + 948 1 - 1301 - 1302 + 1369 + 1370 1 - 1938 - 1939 + 2120 + 2121 1 - 9633 - 9634 + 9830 + 9831 1 @@ -20230,15 +19966,15 @@ ruby_unless_alternative - 42 + 43 ruby_unless - 42 + 43 alternative - 42 + 43 @@ -20252,7 +19988,7 @@ 1 2 - 42 + 43 @@ -20268,7 +20004,7 @@ 1 2 - 42 + 43 @@ -20278,15 +20014,15 @@ ruby_unless_consequence - 2662 + 2721 ruby_unless - 2662 + 2721 consequence - 2662 + 2721 @@ -20300,7 +20036,7 @@ 1 2 - 2662 + 2721 @@ -20316,7 +20052,7 @@ 1 2 - 2662 + 2721 @@ -20326,15 +20062,15 @@ ruby_unless_def - 2663 + 2723 id - 2663 + 2723 condition - 2663 + 2723 @@ -20348,7 +20084,7 @@ 1 2 - 2663 + 2723 @@ -20364,7 +20100,7 @@ 1 2 - 2663 + 2723 @@ -20422,19 +20158,19 @@ ruby_unless_modifier_def - 3505 + 3416 id - 3505 + 3416 body - 3505 + 3416 condition - 3505 + 3416 @@ -20448,7 +20184,7 @@ 1 2 - 3505 + 3416 @@ -20464,7 +20200,7 @@ 1 2 - 3505 + 3416 @@ -20480,7 +20216,7 @@ 1 2 - 3505 + 3416 @@ -20496,7 +20232,7 @@ 1 2 - 3505 + 3416 @@ -20512,7 +20248,7 @@ 1 2 - 3505 + 3416 @@ -20528,7 +20264,7 @@ 1 2 - 3505 + 3416 @@ -20538,19 +20274,19 @@ ruby_until_def - 123 + 126 id - 123 + 126 body - 123 + 126 condition - 123 + 126 @@ -20564,7 +20300,7 @@ 1 2 - 123 + 126 @@ -20580,7 +20316,7 @@ 1 2 - 123 + 126 @@ -20596,7 +20332,7 @@ 1 2 - 123 + 126 @@ -20612,7 +20348,7 @@ 1 2 - 123 + 126 @@ -20628,7 +20364,7 @@ 1 2 - 123 + 126 @@ -20644,7 +20380,7 @@ 1 2 - 123 + 126 @@ -20654,19 +20390,19 @@ ruby_until_modifier_def - 234 + 238 id - 234 + 238 body - 234 + 238 condition - 234 + 238 @@ -20680,7 +20416,7 @@ 1 2 - 234 + 238 @@ -20696,7 +20432,7 @@ 1 2 - 234 + 238 @@ -20712,7 +20448,7 @@ 1 2 - 234 + 238 @@ -20728,7 +20464,7 @@ 1 2 - 234 + 238 @@ -20744,7 +20480,7 @@ 1 2 - 234 + 238 @@ -20760,7 +20496,7 @@ 1 2 - 234 + 238 @@ -20818,15 +20554,15 @@ ruby_when_body - 3358 + 3790 ruby_when - 3358 + 3790 body - 3358 + 3790 @@ -20840,7 +20576,7 @@ 1 2 - 3358 + 3790 @@ -20856,7 +20592,7 @@ 1 2 - 3358 + 3790 @@ -20866,22 +20602,22 @@ ruby_when_def - 3392 + 3882 id - 3392 + 3882 ruby_when_pattern - 4153 + 4745 ruby_when - 3377 + 3882 index @@ -20889,7 +20625,7 @@ pattern - 4153 + 4745 @@ -20903,17 +20639,17 @@ 1 2 - 2934 + 3393 2 3 - 293 + 330 3 16 - 150 + 159 @@ -20929,17 +20665,17 @@ 1 2 - 2934 + 3393 2 3 - 293 + 330 3 16 - 150 + 159 @@ -20960,51 +20696,56 @@ 3 4 - 4 + 2 4 5 + 2 + + + 5 + 6 1 - 6 - 7 + 10 + 11 1 - 14 - 15 + 19 + 20 1 - 25 - 26 + 31 + 32 1 - 35 - 36 + 44 + 45 1 - 85 - 86 + 90 + 91 1 - 150 - 151 + 159 + 160 1 - 443 - 444 + 489 + 490 1 - 3377 - 3378 + 3882 + 3883 1 @@ -21026,51 +20767,56 @@ 3 4 - 4 + 2 4 5 + 2 + + + 5 + 6 1 - 6 - 7 + 10 + 11 1 - 14 - 15 + 19 + 20 1 - 25 - 26 + 31 + 32 1 - 35 - 36 + 44 + 45 1 - 85 - 86 + 90 + 91 1 - 150 - 151 + 159 + 160 1 - 443 - 444 + 489 + 490 1 - 3377 - 3378 + 3882 + 3883 1 @@ -21087,7 +20833,7 @@ 1 2 - 4153 + 4745 @@ -21103,7 +20849,7 @@ 1 2 - 4153 + 4745 @@ -21113,19 +20859,19 @@ ruby_while_def - 1400 + 1413 id - 1400 + 1413 body - 1400 + 1413 condition - 1400 + 1413 @@ -21139,7 +20885,7 @@ 1 2 - 1400 + 1413 @@ -21155,7 +20901,7 @@ 1 2 - 1400 + 1413 @@ -21171,7 +20917,7 @@ 1 2 - 1400 + 1413 @@ -21187,7 +20933,7 @@ 1 2 - 1400 + 1413 @@ -21203,7 +20949,7 @@ 1 2 - 1400 + 1413 @@ -21219,7 +20965,7 @@ 1 2 - 1400 + 1413 @@ -21229,19 +20975,19 @@ ruby_while_modifier_def - 194 + 198 id - 194 + 198 body - 194 + 198 condition - 194 + 198 @@ -21255,7 +21001,7 @@ 1 2 - 194 + 198 @@ -21271,7 +21017,7 @@ 1 2 - 194 + 198 @@ -21287,7 +21033,7 @@ 1 2 - 194 + 198 @@ -21303,7 +21049,7 @@ 1 2 - 194 + 198 @@ -21319,7 +21065,7 @@ 1 2 - 194 + 198 @@ -21335,7 +21081,7 @@ 1 2 - 194 + 198 @@ -21345,15 +21091,15 @@ ruby_yield_child - 1111 + 1103 ruby_yield - 1111 + 1103 child - 1111 + 1103 @@ -21367,7 +21113,7 @@ 1 2 - 1111 + 1103 @@ -21383,7 +21129,7 @@ 1 2 - 1111 + 1103 @@ -21393,11 +21139,11 @@ ruby_yield_def - 2477 + 2450 id - 2477 + 2450 diff --git a/ruby/ql/lib/upgrades/f9f0f4023e433184fda76f595247bf448b782135/erb_ast_node_location.ql b/ruby/ql/lib/upgrades/f9f0f4023e433184fda76f595247bf448b782135/erb_ast_node_location.ql new file mode 100644 index 00000000000..add4e3d655c --- /dev/null +++ b/ruby/ql/lib/upgrades/f9f0f4023e433184fda76f595247bf448b782135/erb_ast_node_location.ql @@ -0,0 +1,11 @@ +class AstNode extends @erb_ast_node { + string toString() { none() } +} + +class Location extends @location_default { + string toString() { none() } +} + +from AstNode n, Location location +where erb_ast_node_info(n, _, _, location) +select n, location diff --git a/ruby/ql/lib/upgrades/f9f0f4023e433184fda76f595247bf448b782135/erb_ast_node_parent.ql b/ruby/ql/lib/upgrades/f9f0f4023e433184fda76f595247bf448b782135/erb_ast_node_parent.ql new file mode 100644 index 00000000000..2a7b6b2ff78 --- /dev/null +++ b/ruby/ql/lib/upgrades/f9f0f4023e433184fda76f595247bf448b782135/erb_ast_node_parent.ql @@ -0,0 +1,7 @@ +class AstNode extends @erb_ast_node { + string toString() { none() } +} + +from AstNode n, int i, AstNode parent +where erb_ast_node_info(n, parent, i, _) +select n, parent, i diff --git a/ruby/ql/lib/upgrades/f9f0f4023e433184fda76f595247bf448b782135/old.dbscheme b/ruby/ql/lib/upgrades/f9f0f4023e433184fda76f595247bf448b782135/old.dbscheme new file mode 100644 index 00000000000..f9f0f4023e4 --- /dev/null +++ b/ruby/ql/lib/upgrades/f9f0f4023e433184fda76f595247bf448b782135/old.dbscheme @@ -0,0 +1,1509 @@ +// CodeQL database schema for Ruby +// Automatically generated from the tree-sitter grammar; do not edit + +/*- Files and folders -*/ + +/** + * The location of an element. + * 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( + unique int id: @location_default, + int file: @file ref, + int beginLine: int ref, + int beginColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +files( + unique int id: @file, + string name: string ref +); + +folders( + unique int id: @folder, + string name: string ref +); + +@container = @file | @folder + +containerparent( + int parent: @container ref, + unique int child: @container ref +); + +/*- Source location prefix -*/ + +/** + * The source location of the snapshot. + */ +sourceLocationPrefix(string prefix : string ref); + +/*- Diagnostic messages -*/ + +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 +); + +/*- Diagnostic messages: severity -*/ + +case @diagnostic.severity of + 10 = @diagnostic_debug +| 20 = @diagnostic_info +| 30 = @diagnostic_warning +| 40 = @diagnostic_error +; + +/*- YAML -*/ + +#keyset[parent, idx] +yaml (unique int id: @yaml_node, + int kind: int ref, + int parent: @yaml_node_parent ref, + int idx: int ref, + string tag: string ref, + string tostring: string ref); + +case @yaml_node.kind of + 0 = @yaml_scalar_node +| 1 = @yaml_mapping_node +| 2 = @yaml_sequence_node +| 3 = @yaml_alias_node +; + +@yaml_collection_node = @yaml_mapping_node | @yaml_sequence_node; + +@yaml_node_parent = @yaml_collection_node | @file; + +yaml_anchors (unique int node: @yaml_node ref, + string anchor: string ref); + +yaml_aliases (unique int alias: @yaml_alias_node ref, + string target: string ref); + +yaml_scalars (unique int scalar: @yaml_scalar_node ref, + int style: int ref, + string value: string ref); + +yaml_errors (unique int id: @yaml_error, + string message: string ref); + +yaml_locations(unique int locatable: @yaml_locatable ref, + int location: @location_default ref); + +@yaml_locatable = @yaml_node | @yaml_error; + +/*- Ruby dbscheme -*/ +@ruby_underscore_arg = @ruby_assignment | @ruby_binary | @ruby_conditional | @ruby_operator_assignment | @ruby_range | @ruby_unary | @ruby_underscore_primary + +@ruby_underscore_call_operator = @ruby_reserved_word + +@ruby_underscore_expression = @ruby_assignment | @ruby_binary | @ruby_break | @ruby_call | @ruby_match_pattern | @ruby_next | @ruby_operator_assignment | @ruby_return | @ruby_test_pattern | @ruby_unary | @ruby_underscore_arg | @ruby_yield + +@ruby_underscore_lhs = @ruby_call | @ruby_element_reference | @ruby_scope_resolution | @ruby_token_false | @ruby_token_nil | @ruby_token_true | @ruby_underscore_variable + +@ruby_underscore_method_name = @ruby_delimited_symbol | @ruby_setter | @ruby_token_constant | @ruby_token_identifier | @ruby_token_operator | @ruby_token_simple_symbol | @ruby_underscore_nonlocal_variable + +@ruby_underscore_nonlocal_variable = @ruby_token_class_variable | @ruby_token_global_variable | @ruby_token_instance_variable + +@ruby_underscore_pattern_constant = @ruby_scope_resolution | @ruby_token_constant + +@ruby_underscore_pattern_expr = @ruby_alternative_pattern | @ruby_as_pattern | @ruby_underscore_pattern_expr_basic + +@ruby_underscore_pattern_expr_basic = @ruby_array_pattern | @ruby_expression_reference_pattern | @ruby_find_pattern | @ruby_hash_pattern | @ruby_parenthesized_pattern | @ruby_range | @ruby_token_identifier | @ruby_underscore_pattern_constant | @ruby_underscore_pattern_primitive | @ruby_variable_reference_pattern + +@ruby_underscore_pattern_primitive = @ruby_delimited_symbol | @ruby_lambda | @ruby_regex | @ruby_string__ | @ruby_string_array | @ruby_subshell | @ruby_symbol_array | @ruby_token_encoding | @ruby_token_false | @ruby_token_file | @ruby_token_heredoc_beginning | @ruby_token_line | @ruby_token_nil | @ruby_token_self | @ruby_token_simple_symbol | @ruby_token_true | @ruby_unary | @ruby_underscore_simple_numeric + +@ruby_underscore_pattern_top_expr_body = @ruby_array_pattern | @ruby_find_pattern | @ruby_hash_pattern | @ruby_underscore_pattern_expr + +@ruby_underscore_primary = @ruby_array | @ruby_begin | @ruby_break | @ruby_call | @ruby_case__ | @ruby_case_match | @ruby_chained_string | @ruby_class | @ruby_delimited_symbol | @ruby_for | @ruby_hash | @ruby_if | @ruby_lambda | @ruby_method | @ruby_module | @ruby_next | @ruby_parenthesized_statements | @ruby_redo | @ruby_regex | @ruby_retry | @ruby_return | @ruby_singleton_class | @ruby_singleton_method | @ruby_string__ | @ruby_string_array | @ruby_subshell | @ruby_symbol_array | @ruby_token_character | @ruby_token_heredoc_beginning | @ruby_token_simple_symbol | @ruby_unary | @ruby_underscore_lhs | @ruby_underscore_simple_numeric | @ruby_unless | @ruby_until | @ruby_while | @ruby_yield + +@ruby_underscore_simple_numeric = @ruby_complex | @ruby_rational | @ruby_token_float | @ruby_token_integer + +@ruby_underscore_statement = @ruby_alias | @ruby_begin_block | @ruby_end_block | @ruby_if_modifier | @ruby_rescue_modifier | @ruby_undef | @ruby_underscore_expression | @ruby_unless_modifier | @ruby_until_modifier | @ruby_while_modifier + +@ruby_underscore_variable = @ruby_token_constant | @ruby_token_identifier | @ruby_token_self | @ruby_token_super | @ruby_underscore_nonlocal_variable + +ruby_alias_def( + unique int id: @ruby_alias, + int alias: @ruby_underscore_method_name ref, + int name: @ruby_underscore_method_name ref +); + +#keyset[ruby_alternative_pattern, index] +ruby_alternative_pattern_alternatives( + int ruby_alternative_pattern: @ruby_alternative_pattern ref, + int index: int ref, + unique int alternatives: @ruby_underscore_pattern_expr_basic ref +); + +ruby_alternative_pattern_def( + unique int id: @ruby_alternative_pattern +); + +@ruby_argument_list_child_type = @ruby_block_argument | @ruby_hash_splat_argument | @ruby_pair | @ruby_splat_argument | @ruby_token_forward_argument | @ruby_underscore_expression + +#keyset[ruby_argument_list, index] +ruby_argument_list_child( + int ruby_argument_list: @ruby_argument_list ref, + int index: int ref, + unique int child: @ruby_argument_list_child_type ref +); + +ruby_argument_list_def( + unique int id: @ruby_argument_list +); + +@ruby_array_child_type = @ruby_block_argument | @ruby_hash_splat_argument | @ruby_pair | @ruby_splat_argument | @ruby_token_forward_argument | @ruby_underscore_expression + +#keyset[ruby_array, index] +ruby_array_child( + int ruby_array: @ruby_array ref, + int index: int ref, + unique int child: @ruby_array_child_type ref +); + +ruby_array_def( + unique int id: @ruby_array +); + +ruby_array_pattern_class( + unique int ruby_array_pattern: @ruby_array_pattern ref, + unique int class: @ruby_underscore_pattern_constant ref +); + +@ruby_array_pattern_child_type = @ruby_splat_parameter | @ruby_underscore_pattern_expr + +#keyset[ruby_array_pattern, index] +ruby_array_pattern_child( + int ruby_array_pattern: @ruby_array_pattern ref, + int index: int ref, + unique int child: @ruby_array_pattern_child_type ref +); + +ruby_array_pattern_def( + unique int id: @ruby_array_pattern +); + +ruby_as_pattern_def( + unique int id: @ruby_as_pattern, + int name: @ruby_token_identifier ref, + int value: @ruby_underscore_pattern_expr ref +); + +@ruby_assignment_left_type = @ruby_left_assignment_list | @ruby_underscore_lhs + +@ruby_assignment_right_type = @ruby_rescue_modifier | @ruby_right_assignment_list | @ruby_splat_argument | @ruby_underscore_expression + +ruby_assignment_def( + unique int id: @ruby_assignment, + int left: @ruby_assignment_left_type ref, + int right: @ruby_assignment_right_type ref +); + +@ruby_bare_string_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content + +#keyset[ruby_bare_string, index] +ruby_bare_string_child( + int ruby_bare_string: @ruby_bare_string ref, + int index: int ref, + unique int child: @ruby_bare_string_child_type ref +); + +ruby_bare_string_def( + unique int id: @ruby_bare_string +); + +@ruby_bare_symbol_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content + +#keyset[ruby_bare_symbol, index] +ruby_bare_symbol_child( + int ruby_bare_symbol: @ruby_bare_symbol ref, + int index: int ref, + unique int child: @ruby_bare_symbol_child_type ref +); + +ruby_bare_symbol_def( + unique int id: @ruby_bare_symbol +); + +@ruby_begin_child_type = @ruby_else | @ruby_ensure | @ruby_rescue | @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_begin, index] +ruby_begin_child( + int ruby_begin: @ruby_begin ref, + int index: int ref, + unique int child: @ruby_begin_child_type ref +); + +ruby_begin_def( + unique int id: @ruby_begin +); + +@ruby_begin_block_child_type = @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_begin_block, index] +ruby_begin_block_child( + int ruby_begin_block: @ruby_begin_block ref, + int index: int ref, + unique int child: @ruby_begin_block_child_type ref +); + +ruby_begin_block_def( + unique int id: @ruby_begin_block +); + +@ruby_binary_left_type = @ruby_underscore_expression | @ruby_underscore_simple_numeric + +case @ruby_binary.operator of + 0 = @ruby_binary_bangequal +| 1 = @ruby_binary_bangtilde +| 2 = @ruby_binary_percent +| 3 = @ruby_binary_ampersand +| 4 = @ruby_binary_ampersandampersand +| 5 = @ruby_binary_star +| 6 = @ruby_binary_starstar +| 7 = @ruby_binary_plus +| 8 = @ruby_binary_minus +| 9 = @ruby_binary_slash +| 10 = @ruby_binary_langle +| 11 = @ruby_binary_langlelangle +| 12 = @ruby_binary_langleequal +| 13 = @ruby_binary_langleequalrangle +| 14 = @ruby_binary_equalequal +| 15 = @ruby_binary_equalequalequal +| 16 = @ruby_binary_equaltilde +| 17 = @ruby_binary_rangle +| 18 = @ruby_binary_rangleequal +| 19 = @ruby_binary_ranglerangle +| 20 = @ruby_binary_caret +| 21 = @ruby_binary_and +| 22 = @ruby_binary_or +| 23 = @ruby_binary_pipe +| 24 = @ruby_binary_pipepipe +; + + +ruby_binary_def( + unique int id: @ruby_binary, + int left: @ruby_binary_left_type ref, + int operator: int ref, + int right: @ruby_underscore_expression ref +); + +ruby_block_body( + unique int ruby_block: @ruby_block ref, + unique int body: @ruby_block_body ref +); + +ruby_block_parameters( + unique int ruby_block: @ruby_block ref, + unique int parameters: @ruby_block_parameters ref +); + +ruby_block_def( + unique int id: @ruby_block +); + +ruby_block_argument_child( + unique int ruby_block_argument: @ruby_block_argument ref, + unique int child: @ruby_underscore_arg ref +); + +ruby_block_argument_def( + unique int id: @ruby_block_argument +); + +@ruby_block_body_child_type = @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_block_body, index] +ruby_block_body_child( + int ruby_block_body: @ruby_block_body ref, + int index: int ref, + unique int child: @ruby_block_body_child_type ref +); + +ruby_block_body_def( + unique int id: @ruby_block_body +); + +ruby_block_parameter_name( + unique int ruby_block_parameter: @ruby_block_parameter ref, + unique int name: @ruby_token_identifier ref +); + +ruby_block_parameter_def( + unique int id: @ruby_block_parameter +); + +#keyset[ruby_block_parameters, index] +ruby_block_parameters_locals( + int ruby_block_parameters: @ruby_block_parameters ref, + int index: int ref, + unique int locals: @ruby_token_identifier ref +); + +@ruby_block_parameters_child_type = @ruby_block_parameter | @ruby_destructured_parameter | @ruby_hash_splat_parameter | @ruby_keyword_parameter | @ruby_optional_parameter | @ruby_splat_parameter | @ruby_token_forward_parameter | @ruby_token_hash_splat_nil | @ruby_token_identifier + +#keyset[ruby_block_parameters, index] +ruby_block_parameters_child( + int ruby_block_parameters: @ruby_block_parameters ref, + int index: int ref, + unique int child: @ruby_block_parameters_child_type ref +); + +ruby_block_parameters_def( + unique int id: @ruby_block_parameters +); + +@ruby_body_statement_child_type = @ruby_else | @ruby_ensure | @ruby_rescue | @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_body_statement, index] +ruby_body_statement_child( + int ruby_body_statement: @ruby_body_statement ref, + int index: int ref, + unique int child: @ruby_body_statement_child_type ref +); + +ruby_body_statement_def( + unique int id: @ruby_body_statement +); + +ruby_break_child( + unique int ruby_break: @ruby_break ref, + unique int child: @ruby_argument_list ref +); + +ruby_break_def( + unique int id: @ruby_break +); + +ruby_call_arguments( + unique int ruby_call: @ruby_call ref, + unique int arguments: @ruby_argument_list ref +); + +@ruby_call_block_type = @ruby_block | @ruby_do_block + +ruby_call_block( + unique int ruby_call: @ruby_call ref, + unique int block: @ruby_call_block_type ref +); + +@ruby_call_method_type = @ruby_token_operator | @ruby_underscore_variable + +ruby_call_method( + unique int ruby_call: @ruby_call ref, + unique int method: @ruby_call_method_type ref +); + +ruby_call_operator( + unique int ruby_call: @ruby_call ref, + unique int operator: @ruby_underscore_call_operator ref +); + +ruby_call_receiver( + unique int ruby_call: @ruby_call ref, + unique int receiver: @ruby_underscore_primary ref +); + +ruby_call_def( + unique int id: @ruby_call +); + +ruby_case_value( + unique int ruby_case__: @ruby_case__ ref, + unique int value: @ruby_underscore_statement ref +); + +@ruby_case_child_type = @ruby_else | @ruby_when + +#keyset[ruby_case__, index] +ruby_case_child( + int ruby_case__: @ruby_case__ ref, + int index: int ref, + unique int child: @ruby_case_child_type ref +); + +ruby_case_def( + unique int id: @ruby_case__ +); + +#keyset[ruby_case_match, index] +ruby_case_match_clauses( + int ruby_case_match: @ruby_case_match ref, + int index: int ref, + unique int clauses: @ruby_in_clause ref +); + +ruby_case_match_else( + unique int ruby_case_match: @ruby_case_match ref, + unique int else: @ruby_else ref +); + +ruby_case_match_def( + unique int id: @ruby_case_match, + int value: @ruby_underscore_statement ref +); + +#keyset[ruby_chained_string, index] +ruby_chained_string_child( + int ruby_chained_string: @ruby_chained_string ref, + int index: int ref, + unique int child: @ruby_string__ ref +); + +ruby_chained_string_def( + unique int id: @ruby_chained_string +); + +ruby_class_body( + unique int ruby_class: @ruby_class ref, + unique int body: @ruby_body_statement ref +); + +@ruby_class_name_type = @ruby_scope_resolution | @ruby_token_constant + +ruby_class_superclass( + unique int ruby_class: @ruby_class ref, + unique int superclass: @ruby_superclass ref +); + +ruby_class_def( + unique int id: @ruby_class, + int name: @ruby_class_name_type ref +); + +@ruby_complex_child_type = @ruby_rational | @ruby_token_float | @ruby_token_integer + +ruby_complex_def( + unique int id: @ruby_complex, + int child: @ruby_complex_child_type ref +); + +ruby_conditional_def( + unique int id: @ruby_conditional, + int alternative: @ruby_underscore_arg ref, + int condition: @ruby_underscore_arg ref, + int consequence: @ruby_underscore_arg ref +); + +@ruby_delimited_symbol_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content + +#keyset[ruby_delimited_symbol, index] +ruby_delimited_symbol_child( + int ruby_delimited_symbol: @ruby_delimited_symbol ref, + int index: int ref, + unique int child: @ruby_delimited_symbol_child_type ref +); + +ruby_delimited_symbol_def( + unique int id: @ruby_delimited_symbol +); + +@ruby_destructured_left_assignment_child_type = @ruby_destructured_left_assignment | @ruby_rest_assignment | @ruby_underscore_lhs + +#keyset[ruby_destructured_left_assignment, index] +ruby_destructured_left_assignment_child( + int ruby_destructured_left_assignment: @ruby_destructured_left_assignment ref, + int index: int ref, + unique int child: @ruby_destructured_left_assignment_child_type ref +); + +ruby_destructured_left_assignment_def( + unique int id: @ruby_destructured_left_assignment +); + +@ruby_destructured_parameter_child_type = @ruby_block_parameter | @ruby_destructured_parameter | @ruby_hash_splat_parameter | @ruby_keyword_parameter | @ruby_optional_parameter | @ruby_splat_parameter | @ruby_token_forward_parameter | @ruby_token_hash_splat_nil | @ruby_token_identifier + +#keyset[ruby_destructured_parameter, index] +ruby_destructured_parameter_child( + int ruby_destructured_parameter: @ruby_destructured_parameter ref, + int index: int ref, + unique int child: @ruby_destructured_parameter_child_type ref +); + +ruby_destructured_parameter_def( + unique int id: @ruby_destructured_parameter +); + +@ruby_do_child_type = @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_do, index] +ruby_do_child( + int ruby_do: @ruby_do ref, + int index: int ref, + unique int child: @ruby_do_child_type ref +); + +ruby_do_def( + unique int id: @ruby_do +); + +ruby_do_block_body( + unique int ruby_do_block: @ruby_do_block ref, + unique int body: @ruby_body_statement ref +); + +ruby_do_block_parameters( + unique int ruby_do_block: @ruby_do_block ref, + unique int parameters: @ruby_block_parameters ref +); + +ruby_do_block_def( + unique int id: @ruby_do_block +); + +@ruby_element_reference_child_type = @ruby_block_argument | @ruby_hash_splat_argument | @ruby_pair | @ruby_splat_argument | @ruby_token_forward_argument | @ruby_underscore_expression + +#keyset[ruby_element_reference, index] +ruby_element_reference_child( + int ruby_element_reference: @ruby_element_reference ref, + int index: int ref, + unique int child: @ruby_element_reference_child_type ref +); + +ruby_element_reference_def( + unique int id: @ruby_element_reference, + int object: @ruby_underscore_primary ref +); + +@ruby_else_child_type = @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_else, index] +ruby_else_child( + int ruby_else: @ruby_else ref, + int index: int ref, + unique int child: @ruby_else_child_type ref +); + +ruby_else_def( + unique int id: @ruby_else +); + +@ruby_elsif_alternative_type = @ruby_else | @ruby_elsif + +ruby_elsif_alternative( + unique int ruby_elsif: @ruby_elsif ref, + unique int alternative: @ruby_elsif_alternative_type ref +); + +ruby_elsif_consequence( + unique int ruby_elsif: @ruby_elsif ref, + unique int consequence: @ruby_then ref +); + +ruby_elsif_def( + unique int id: @ruby_elsif, + int condition: @ruby_underscore_statement ref +); + +@ruby_end_block_child_type = @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_end_block, index] +ruby_end_block_child( + int ruby_end_block: @ruby_end_block ref, + int index: int ref, + unique int child: @ruby_end_block_child_type ref +); + +ruby_end_block_def( + unique int id: @ruby_end_block +); + +@ruby_ensure_child_type = @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_ensure, index] +ruby_ensure_child( + int ruby_ensure: @ruby_ensure ref, + int index: int ref, + unique int child: @ruby_ensure_child_type ref +); + +ruby_ensure_def( + unique int id: @ruby_ensure +); + +ruby_exception_variable_def( + unique int id: @ruby_exception_variable, + int child: @ruby_underscore_lhs ref +); + +@ruby_exceptions_child_type = @ruby_splat_argument | @ruby_underscore_arg + +#keyset[ruby_exceptions, index] +ruby_exceptions_child( + int ruby_exceptions: @ruby_exceptions ref, + int index: int ref, + unique int child: @ruby_exceptions_child_type ref +); + +ruby_exceptions_def( + unique int id: @ruby_exceptions +); + +ruby_expression_reference_pattern_def( + unique int id: @ruby_expression_reference_pattern, + int value: @ruby_underscore_expression ref +); + +ruby_find_pattern_class( + unique int ruby_find_pattern: @ruby_find_pattern ref, + unique int class: @ruby_underscore_pattern_constant ref +); + +@ruby_find_pattern_child_type = @ruby_splat_parameter | @ruby_underscore_pattern_expr + +#keyset[ruby_find_pattern, index] +ruby_find_pattern_child( + int ruby_find_pattern: @ruby_find_pattern ref, + int index: int ref, + unique int child: @ruby_find_pattern_child_type ref +); + +ruby_find_pattern_def( + unique int id: @ruby_find_pattern +); + +@ruby_for_pattern_type = @ruby_left_assignment_list | @ruby_underscore_lhs + +ruby_for_def( + unique int id: @ruby_for, + int body: @ruby_do ref, + int pattern: @ruby_for_pattern_type ref, + int value: @ruby_in ref +); + +@ruby_hash_child_type = @ruby_hash_splat_argument | @ruby_pair + +#keyset[ruby_hash, index] +ruby_hash_child( + int ruby_hash: @ruby_hash ref, + int index: int ref, + unique int child: @ruby_hash_child_type ref +); + +ruby_hash_def( + unique int id: @ruby_hash +); + +ruby_hash_pattern_class( + unique int ruby_hash_pattern: @ruby_hash_pattern ref, + unique int class: @ruby_underscore_pattern_constant ref +); + +@ruby_hash_pattern_child_type = @ruby_hash_splat_parameter | @ruby_keyword_pattern | @ruby_token_hash_splat_nil + +#keyset[ruby_hash_pattern, index] +ruby_hash_pattern_child( + int ruby_hash_pattern: @ruby_hash_pattern ref, + int index: int ref, + unique int child: @ruby_hash_pattern_child_type ref +); + +ruby_hash_pattern_def( + unique int id: @ruby_hash_pattern +); + +ruby_hash_splat_argument_child( + unique int ruby_hash_splat_argument: @ruby_hash_splat_argument ref, + unique int child: @ruby_underscore_arg ref +); + +ruby_hash_splat_argument_def( + unique int id: @ruby_hash_splat_argument +); + +ruby_hash_splat_parameter_name( + unique int ruby_hash_splat_parameter: @ruby_hash_splat_parameter ref, + unique int name: @ruby_token_identifier ref +); + +ruby_hash_splat_parameter_def( + unique int id: @ruby_hash_splat_parameter +); + +@ruby_heredoc_body_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_heredoc_content | @ruby_token_heredoc_end + +#keyset[ruby_heredoc_body, index] +ruby_heredoc_body_child( + int ruby_heredoc_body: @ruby_heredoc_body ref, + int index: int ref, + unique int child: @ruby_heredoc_body_child_type ref +); + +ruby_heredoc_body_def( + unique int id: @ruby_heredoc_body +); + +@ruby_if_alternative_type = @ruby_else | @ruby_elsif + +ruby_if_alternative( + unique int ruby_if: @ruby_if ref, + unique int alternative: @ruby_if_alternative_type ref +); + +ruby_if_consequence( + unique int ruby_if: @ruby_if ref, + unique int consequence: @ruby_then ref +); + +ruby_if_def( + unique int id: @ruby_if, + int condition: @ruby_underscore_statement ref +); + +ruby_if_guard_def( + unique int id: @ruby_if_guard, + int condition: @ruby_underscore_expression ref +); + +ruby_if_modifier_def( + unique int id: @ruby_if_modifier, + int body: @ruby_underscore_statement ref, + int condition: @ruby_underscore_expression ref +); + +ruby_in_def( + unique int id: @ruby_in, + int child: @ruby_underscore_arg ref +); + +ruby_in_clause_body( + unique int ruby_in_clause: @ruby_in_clause ref, + unique int body: @ruby_then ref +); + +@ruby_in_clause_guard_type = @ruby_if_guard | @ruby_unless_guard + +ruby_in_clause_guard( + unique int ruby_in_clause: @ruby_in_clause ref, + unique int guard: @ruby_in_clause_guard_type ref +); + +ruby_in_clause_def( + unique int id: @ruby_in_clause, + int pattern: @ruby_underscore_pattern_top_expr_body ref +); + +@ruby_interpolation_child_type = @ruby_token_empty_statement | @ruby_underscore_nonlocal_variable | @ruby_underscore_statement + +#keyset[ruby_interpolation, index] +ruby_interpolation_child( + int ruby_interpolation: @ruby_interpolation ref, + int index: int ref, + unique int child: @ruby_interpolation_child_type ref +); + +ruby_interpolation_def( + unique int id: @ruby_interpolation +); + +ruby_keyword_parameter_value( + unique int ruby_keyword_parameter: @ruby_keyword_parameter ref, + unique int value: @ruby_underscore_arg ref +); + +ruby_keyword_parameter_def( + unique int id: @ruby_keyword_parameter, + int name: @ruby_token_identifier ref +); + +@ruby_keyword_pattern_key_type = @ruby_string__ | @ruby_token_hash_key_symbol + +ruby_keyword_pattern_value( + unique int ruby_keyword_pattern: @ruby_keyword_pattern ref, + unique int value: @ruby_underscore_pattern_expr ref +); + +ruby_keyword_pattern_def( + unique int id: @ruby_keyword_pattern, + int key__: @ruby_keyword_pattern_key_type ref +); + +@ruby_lambda_body_type = @ruby_block | @ruby_do_block + +ruby_lambda_parameters( + unique int ruby_lambda: @ruby_lambda ref, + unique int parameters: @ruby_lambda_parameters ref +); + +ruby_lambda_def( + unique int id: @ruby_lambda, + int body: @ruby_lambda_body_type ref +); + +@ruby_lambda_parameters_child_type = @ruby_block_parameter | @ruby_destructured_parameter | @ruby_hash_splat_parameter | @ruby_keyword_parameter | @ruby_optional_parameter | @ruby_splat_parameter | @ruby_token_forward_parameter | @ruby_token_hash_splat_nil | @ruby_token_identifier + +#keyset[ruby_lambda_parameters, index] +ruby_lambda_parameters_child( + int ruby_lambda_parameters: @ruby_lambda_parameters ref, + int index: int ref, + unique int child: @ruby_lambda_parameters_child_type ref +); + +ruby_lambda_parameters_def( + unique int id: @ruby_lambda_parameters +); + +@ruby_left_assignment_list_child_type = @ruby_destructured_left_assignment | @ruby_rest_assignment | @ruby_underscore_lhs + +#keyset[ruby_left_assignment_list, index] +ruby_left_assignment_list_child( + int ruby_left_assignment_list: @ruby_left_assignment_list ref, + int index: int ref, + unique int child: @ruby_left_assignment_list_child_type ref +); + +ruby_left_assignment_list_def( + unique int id: @ruby_left_assignment_list +); + +ruby_match_pattern_def( + unique int id: @ruby_match_pattern, + int pattern: @ruby_underscore_pattern_top_expr_body ref, + int value: @ruby_underscore_arg ref +); + +@ruby_method_body_type = @ruby_body_statement | @ruby_rescue_modifier | @ruby_underscore_arg + +ruby_method_body( + unique int ruby_method: @ruby_method ref, + unique int body: @ruby_method_body_type ref +); + +ruby_method_parameters( + unique int ruby_method: @ruby_method ref, + unique int parameters: @ruby_method_parameters ref +); + +ruby_method_def( + unique int id: @ruby_method, + int name: @ruby_underscore_method_name ref +); + +@ruby_method_parameters_child_type = @ruby_block_parameter | @ruby_destructured_parameter | @ruby_hash_splat_parameter | @ruby_keyword_parameter | @ruby_optional_parameter | @ruby_splat_parameter | @ruby_token_forward_parameter | @ruby_token_hash_splat_nil | @ruby_token_identifier + +#keyset[ruby_method_parameters, index] +ruby_method_parameters_child( + int ruby_method_parameters: @ruby_method_parameters ref, + int index: int ref, + unique int child: @ruby_method_parameters_child_type ref +); + +ruby_method_parameters_def( + unique int id: @ruby_method_parameters +); + +ruby_module_body( + unique int ruby_module: @ruby_module ref, + unique int body: @ruby_body_statement ref +); + +@ruby_module_name_type = @ruby_scope_resolution | @ruby_token_constant + +ruby_module_def( + unique int id: @ruby_module, + int name: @ruby_module_name_type ref +); + +ruby_next_child( + unique int ruby_next: @ruby_next ref, + unique int child: @ruby_argument_list ref +); + +ruby_next_def( + unique int id: @ruby_next +); + +case @ruby_operator_assignment.operator of + 0 = @ruby_operator_assignment_percentequal +| 1 = @ruby_operator_assignment_ampersandampersandequal +| 2 = @ruby_operator_assignment_ampersandequal +| 3 = @ruby_operator_assignment_starstarequal +| 4 = @ruby_operator_assignment_starequal +| 5 = @ruby_operator_assignment_plusequal +| 6 = @ruby_operator_assignment_minusequal +| 7 = @ruby_operator_assignment_slashequal +| 8 = @ruby_operator_assignment_langlelangleequal +| 9 = @ruby_operator_assignment_ranglerangleequal +| 10 = @ruby_operator_assignment_caretequal +| 11 = @ruby_operator_assignment_pipeequal +| 12 = @ruby_operator_assignment_pipepipeequal +; + + +@ruby_operator_assignment_right_type = @ruby_rescue_modifier | @ruby_underscore_expression + +ruby_operator_assignment_def( + unique int id: @ruby_operator_assignment, + int left: @ruby_underscore_lhs ref, + int operator: int ref, + int right: @ruby_operator_assignment_right_type ref +); + +ruby_optional_parameter_def( + unique int id: @ruby_optional_parameter, + int name: @ruby_token_identifier ref, + int value: @ruby_underscore_arg ref +); + +@ruby_pair_key_type = @ruby_string__ | @ruby_token_hash_key_symbol | @ruby_underscore_arg + +ruby_pair_value( + unique int ruby_pair: @ruby_pair ref, + unique int value: @ruby_underscore_arg ref +); + +ruby_pair_def( + unique int id: @ruby_pair, + int key__: @ruby_pair_key_type ref +); + +ruby_parenthesized_pattern_def( + unique int id: @ruby_parenthesized_pattern, + int child: @ruby_underscore_pattern_expr ref +); + +@ruby_parenthesized_statements_child_type = @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_parenthesized_statements, index] +ruby_parenthesized_statements_child( + int ruby_parenthesized_statements: @ruby_parenthesized_statements ref, + int index: int ref, + unique int child: @ruby_parenthesized_statements_child_type ref +); + +ruby_parenthesized_statements_def( + unique int id: @ruby_parenthesized_statements +); + +@ruby_pattern_child_type = @ruby_splat_argument | @ruby_underscore_arg + +ruby_pattern_def( + unique int id: @ruby_pattern, + int child: @ruby_pattern_child_type ref +); + +@ruby_program_child_type = @ruby_token_empty_statement | @ruby_token_uninterpreted | @ruby_underscore_statement + +#keyset[ruby_program, index] +ruby_program_child( + int ruby_program: @ruby_program ref, + int index: int ref, + unique int child: @ruby_program_child_type ref +); + +ruby_program_def( + unique int id: @ruby_program +); + +@ruby_range_begin_type = @ruby_underscore_arg | @ruby_underscore_pattern_primitive + +ruby_range_begin( + unique int ruby_range: @ruby_range ref, + unique int begin: @ruby_range_begin_type ref +); + +@ruby_range_end_type = @ruby_underscore_arg | @ruby_underscore_pattern_primitive + +ruby_range_end( + unique int ruby_range: @ruby_range ref, + unique int end: @ruby_range_end_type ref +); + +case @ruby_range.operator of + 0 = @ruby_range_dotdot +| 1 = @ruby_range_dotdotdot +; + + +ruby_range_def( + unique int id: @ruby_range, + int operator: int ref +); + +@ruby_rational_child_type = @ruby_token_float | @ruby_token_integer + +ruby_rational_def( + unique int id: @ruby_rational, + int child: @ruby_rational_child_type ref +); + +ruby_redo_child( + unique int ruby_redo: @ruby_redo ref, + unique int child: @ruby_argument_list ref +); + +ruby_redo_def( + unique int id: @ruby_redo +); + +@ruby_regex_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content + +#keyset[ruby_regex, index] +ruby_regex_child( + int ruby_regex: @ruby_regex ref, + int index: int ref, + unique int child: @ruby_regex_child_type ref +); + +ruby_regex_def( + unique int id: @ruby_regex +); + +ruby_rescue_body( + unique int ruby_rescue: @ruby_rescue ref, + unique int body: @ruby_then ref +); + +ruby_rescue_exceptions( + unique int ruby_rescue: @ruby_rescue ref, + unique int exceptions: @ruby_exceptions ref +); + +ruby_rescue_variable( + unique int ruby_rescue: @ruby_rescue ref, + unique int variable: @ruby_exception_variable ref +); + +ruby_rescue_def( + unique int id: @ruby_rescue +); + +@ruby_rescue_modifier_body_type = @ruby_underscore_arg | @ruby_underscore_statement + +ruby_rescue_modifier_def( + unique int id: @ruby_rescue_modifier, + int body: @ruby_rescue_modifier_body_type ref, + int handler: @ruby_underscore_expression ref +); + +ruby_rest_assignment_child( + unique int ruby_rest_assignment: @ruby_rest_assignment ref, + unique int child: @ruby_underscore_lhs ref +); + +ruby_rest_assignment_def( + unique int id: @ruby_rest_assignment +); + +ruby_retry_child( + unique int ruby_retry: @ruby_retry ref, + unique int child: @ruby_argument_list ref +); + +ruby_retry_def( + unique int id: @ruby_retry +); + +ruby_return_child( + unique int ruby_return: @ruby_return ref, + unique int child: @ruby_argument_list ref +); + +ruby_return_def( + unique int id: @ruby_return +); + +@ruby_right_assignment_list_child_type = @ruby_splat_argument | @ruby_underscore_arg + +#keyset[ruby_right_assignment_list, index] +ruby_right_assignment_list_child( + int ruby_right_assignment_list: @ruby_right_assignment_list ref, + int index: int ref, + unique int child: @ruby_right_assignment_list_child_type ref +); + +ruby_right_assignment_list_def( + unique int id: @ruby_right_assignment_list +); + +@ruby_scope_resolution_scope_type = @ruby_underscore_pattern_constant | @ruby_underscore_primary + +ruby_scope_resolution_scope( + unique int ruby_scope_resolution: @ruby_scope_resolution ref, + unique int scope: @ruby_scope_resolution_scope_type ref +); + +ruby_scope_resolution_def( + unique int id: @ruby_scope_resolution, + int name: @ruby_token_constant ref +); + +ruby_setter_def( + unique int id: @ruby_setter, + int name: @ruby_token_identifier ref +); + +ruby_singleton_class_body( + unique int ruby_singleton_class: @ruby_singleton_class ref, + unique int body: @ruby_body_statement ref +); + +ruby_singleton_class_def( + unique int id: @ruby_singleton_class, + int value: @ruby_underscore_arg ref +); + +@ruby_singleton_method_body_type = @ruby_body_statement | @ruby_rescue_modifier | @ruby_underscore_arg + +ruby_singleton_method_body( + unique int ruby_singleton_method: @ruby_singleton_method ref, + unique int body: @ruby_singleton_method_body_type ref +); + +@ruby_singleton_method_object_type = @ruby_underscore_arg | @ruby_underscore_variable + +ruby_singleton_method_parameters( + unique int ruby_singleton_method: @ruby_singleton_method ref, + unique int parameters: @ruby_method_parameters ref +); + +ruby_singleton_method_def( + unique int id: @ruby_singleton_method, + int name: @ruby_underscore_method_name ref, + int object: @ruby_singleton_method_object_type ref +); + +ruby_splat_argument_child( + unique int ruby_splat_argument: @ruby_splat_argument ref, + unique int child: @ruby_underscore_arg ref +); + +ruby_splat_argument_def( + unique int id: @ruby_splat_argument +); + +ruby_splat_parameter_name( + unique int ruby_splat_parameter: @ruby_splat_parameter ref, + unique int name: @ruby_token_identifier ref +); + +ruby_splat_parameter_def( + unique int id: @ruby_splat_parameter +); + +@ruby_string_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content + +#keyset[ruby_string__, index] +ruby_string_child( + int ruby_string__: @ruby_string__ ref, + int index: int ref, + unique int child: @ruby_string_child_type ref +); + +ruby_string_def( + unique int id: @ruby_string__ +); + +#keyset[ruby_string_array, index] +ruby_string_array_child( + int ruby_string_array: @ruby_string_array ref, + int index: int ref, + unique int child: @ruby_bare_string ref +); + +ruby_string_array_def( + unique int id: @ruby_string_array +); + +@ruby_subshell_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content + +#keyset[ruby_subshell, index] +ruby_subshell_child( + int ruby_subshell: @ruby_subshell ref, + int index: int ref, + unique int child: @ruby_subshell_child_type ref +); + +ruby_subshell_def( + unique int id: @ruby_subshell +); + +ruby_superclass_def( + unique int id: @ruby_superclass, + int child: @ruby_underscore_expression ref +); + +#keyset[ruby_symbol_array, index] +ruby_symbol_array_child( + int ruby_symbol_array: @ruby_symbol_array ref, + int index: int ref, + unique int child: @ruby_bare_symbol ref +); + +ruby_symbol_array_def( + unique int id: @ruby_symbol_array +); + +ruby_test_pattern_def( + unique int id: @ruby_test_pattern, + int pattern: @ruby_underscore_pattern_top_expr_body ref, + int value: @ruby_underscore_arg ref +); + +@ruby_then_child_type = @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_then, index] +ruby_then_child( + int ruby_then: @ruby_then ref, + int index: int ref, + unique int child: @ruby_then_child_type ref +); + +ruby_then_def( + unique int id: @ruby_then +); + +@ruby_unary_operand_type = @ruby_parenthesized_statements | @ruby_underscore_expression | @ruby_underscore_simple_numeric + +case @ruby_unary.operator of + 0 = @ruby_unary_bang +| 1 = @ruby_unary_plus +| 2 = @ruby_unary_minus +| 3 = @ruby_unary_definedquestion +| 4 = @ruby_unary_not +| 5 = @ruby_unary_tilde +; + + +ruby_unary_def( + unique int id: @ruby_unary, + int operand: @ruby_unary_operand_type ref, + int operator: int ref +); + +#keyset[ruby_undef, index] +ruby_undef_child( + int ruby_undef: @ruby_undef ref, + int index: int ref, + unique int child: @ruby_underscore_method_name ref +); + +ruby_undef_def( + unique int id: @ruby_undef +); + +@ruby_unless_alternative_type = @ruby_else | @ruby_elsif + +ruby_unless_alternative( + unique int ruby_unless: @ruby_unless ref, + unique int alternative: @ruby_unless_alternative_type ref +); + +ruby_unless_consequence( + unique int ruby_unless: @ruby_unless ref, + unique int consequence: @ruby_then ref +); + +ruby_unless_def( + unique int id: @ruby_unless, + int condition: @ruby_underscore_statement ref +); + +ruby_unless_guard_def( + unique int id: @ruby_unless_guard, + int condition: @ruby_underscore_expression ref +); + +ruby_unless_modifier_def( + unique int id: @ruby_unless_modifier, + int body: @ruby_underscore_statement ref, + int condition: @ruby_underscore_expression ref +); + +ruby_until_def( + unique int id: @ruby_until, + int body: @ruby_do ref, + int condition: @ruby_underscore_statement ref +); + +ruby_until_modifier_def( + unique int id: @ruby_until_modifier, + int body: @ruby_underscore_statement ref, + int condition: @ruby_underscore_expression ref +); + +@ruby_variable_reference_pattern_name_type = @ruby_token_identifier | @ruby_underscore_nonlocal_variable + +ruby_variable_reference_pattern_def( + unique int id: @ruby_variable_reference_pattern, + int name: @ruby_variable_reference_pattern_name_type ref +); + +ruby_when_body( + unique int ruby_when: @ruby_when ref, + unique int body: @ruby_then ref +); + +#keyset[ruby_when, index] +ruby_when_pattern( + int ruby_when: @ruby_when ref, + int index: int ref, + unique int pattern: @ruby_pattern ref +); + +ruby_when_def( + unique int id: @ruby_when +); + +ruby_while_def( + unique int id: @ruby_while, + int body: @ruby_do ref, + int condition: @ruby_underscore_statement ref +); + +ruby_while_modifier_def( + unique int id: @ruby_while_modifier, + int body: @ruby_underscore_statement ref, + int condition: @ruby_underscore_expression ref +); + +ruby_yield_child( + unique int ruby_yield: @ruby_yield ref, + unique int child: @ruby_argument_list ref +); + +ruby_yield_def( + unique int id: @ruby_yield +); + +ruby_tokeninfo( + unique int id: @ruby_token, + int kind: int ref, + string value: string ref +); + +case @ruby_token.kind of + 0 = @ruby_reserved_word +| 1 = @ruby_token_character +| 2 = @ruby_token_class_variable +| 3 = @ruby_token_comment +| 4 = @ruby_token_constant +| 5 = @ruby_token_empty_statement +| 6 = @ruby_token_encoding +| 7 = @ruby_token_escape_sequence +| 8 = @ruby_token_false +| 9 = @ruby_token_file +| 10 = @ruby_token_float +| 11 = @ruby_token_forward_argument +| 12 = @ruby_token_forward_parameter +| 13 = @ruby_token_global_variable +| 14 = @ruby_token_hash_key_symbol +| 15 = @ruby_token_hash_splat_nil +| 16 = @ruby_token_heredoc_beginning +| 17 = @ruby_token_heredoc_content +| 18 = @ruby_token_heredoc_end +| 19 = @ruby_token_identifier +| 20 = @ruby_token_instance_variable +| 21 = @ruby_token_integer +| 22 = @ruby_token_line +| 23 = @ruby_token_nil +| 24 = @ruby_token_operator +| 25 = @ruby_token_self +| 26 = @ruby_token_simple_symbol +| 27 = @ruby_token_string_content +| 28 = @ruby_token_super +| 29 = @ruby_token_true +| 30 = @ruby_token_uninterpreted +; + + +@ruby_ast_node = @ruby_alias | @ruby_alternative_pattern | @ruby_argument_list | @ruby_array | @ruby_array_pattern | @ruby_as_pattern | @ruby_assignment | @ruby_bare_string | @ruby_bare_symbol | @ruby_begin | @ruby_begin_block | @ruby_binary | @ruby_block | @ruby_block_argument | @ruby_block_body | @ruby_block_parameter | @ruby_block_parameters | @ruby_body_statement | @ruby_break | @ruby_call | @ruby_case__ | @ruby_case_match | @ruby_chained_string | @ruby_class | @ruby_complex | @ruby_conditional | @ruby_delimited_symbol | @ruby_destructured_left_assignment | @ruby_destructured_parameter | @ruby_do | @ruby_do_block | @ruby_element_reference | @ruby_else | @ruby_elsif | @ruby_end_block | @ruby_ensure | @ruby_exception_variable | @ruby_exceptions | @ruby_expression_reference_pattern | @ruby_find_pattern | @ruby_for | @ruby_hash | @ruby_hash_pattern | @ruby_hash_splat_argument | @ruby_hash_splat_parameter | @ruby_heredoc_body | @ruby_if | @ruby_if_guard | @ruby_if_modifier | @ruby_in | @ruby_in_clause | @ruby_interpolation | @ruby_keyword_parameter | @ruby_keyword_pattern | @ruby_lambda | @ruby_lambda_parameters | @ruby_left_assignment_list | @ruby_match_pattern | @ruby_method | @ruby_method_parameters | @ruby_module | @ruby_next | @ruby_operator_assignment | @ruby_optional_parameter | @ruby_pair | @ruby_parenthesized_pattern | @ruby_parenthesized_statements | @ruby_pattern | @ruby_program | @ruby_range | @ruby_rational | @ruby_redo | @ruby_regex | @ruby_rescue | @ruby_rescue_modifier | @ruby_rest_assignment | @ruby_retry | @ruby_return | @ruby_right_assignment_list | @ruby_scope_resolution | @ruby_setter | @ruby_singleton_class | @ruby_singleton_method | @ruby_splat_argument | @ruby_splat_parameter | @ruby_string__ | @ruby_string_array | @ruby_subshell | @ruby_superclass | @ruby_symbol_array | @ruby_test_pattern | @ruby_then | @ruby_token | @ruby_unary | @ruby_undef | @ruby_unless | @ruby_unless_guard | @ruby_unless_modifier | @ruby_until | @ruby_until_modifier | @ruby_variable_reference_pattern | @ruby_when | @ruby_while | @ruby_while_modifier | @ruby_yield + +@ruby_ast_node_parent = @file | @ruby_ast_node + +#keyset[parent, parent_index] +ruby_ast_node_info( + unique int node: @ruby_ast_node ref, + int parent: @ruby_ast_node_parent ref, + int parent_index: int ref, + int loc: @location_default ref +); + +/*- Erb dbscheme -*/ +erb_comment_directive_child( + unique int erb_comment_directive: @erb_comment_directive ref, + unique int child: @erb_token_comment ref +); + +erb_comment_directive_def( + unique int id: @erb_comment_directive +); + +erb_directive_child( + unique int erb_directive: @erb_directive ref, + unique int child: @erb_token_code ref +); + +erb_directive_def( + unique int id: @erb_directive +); + +erb_graphql_directive_child( + unique int erb_graphql_directive: @erb_graphql_directive ref, + unique int child: @erb_token_code ref +); + +erb_graphql_directive_def( + unique int id: @erb_graphql_directive +); + +erb_output_directive_child( + unique int erb_output_directive: @erb_output_directive ref, + unique int child: @erb_token_code ref +); + +erb_output_directive_def( + unique int id: @erb_output_directive +); + +@erb_template_child_type = @erb_comment_directive | @erb_directive | @erb_graphql_directive | @erb_output_directive | @erb_token_content + +#keyset[erb_template, index] +erb_template_child( + int erb_template: @erb_template ref, + int index: int ref, + unique int child: @erb_template_child_type ref +); + +erb_template_def( + unique int id: @erb_template +); + +erb_tokeninfo( + unique int id: @erb_token, + int kind: int ref, + string value: string ref +); + +case @erb_token.kind of + 0 = @erb_reserved_word +| 1 = @erb_token_code +| 2 = @erb_token_comment +| 3 = @erb_token_content +; + + +@erb_ast_node = @erb_comment_directive | @erb_directive | @erb_graphql_directive | @erb_output_directive | @erb_template | @erb_token + +@erb_ast_node_parent = @erb_ast_node | @file + +#keyset[parent, parent_index] +erb_ast_node_info( + unique int node: @erb_ast_node ref, + int parent: @erb_ast_node_parent ref, + int parent_index: int ref, + int loc: @location_default ref +); + diff --git a/ruby/ql/lib/upgrades/f9f0f4023e433184fda76f595247bf448b782135/ruby.dbscheme b/ruby/ql/lib/upgrades/f9f0f4023e433184fda76f595247bf448b782135/ruby.dbscheme new file mode 100644 index 00000000000..440de75c71e --- /dev/null +++ b/ruby/ql/lib/upgrades/f9f0f4023e433184fda76f595247bf448b782135/ruby.dbscheme @@ -0,0 +1,1513 @@ +// CodeQL database schema for Ruby +// Automatically generated from the tree-sitter grammar; do not edit + +/*- Files and folders -*/ + +/** + * The location of an element. + * 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( + unique int id: @location_default, + int file: @file ref, + int beginLine: int ref, + int beginColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +files( + unique int id: @file, + string name: string ref +); + +folders( + unique int id: @folder, + string name: string ref +); + +@container = @file | @folder + +containerparent( + int parent: @container ref, + unique int child: @container ref +); + +/*- Source location prefix -*/ + +/** + * The source location of the snapshot. + */ +sourceLocationPrefix(string prefix : string ref); + +/*- Diagnostic messages -*/ + +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 +); + +/*- Diagnostic messages: severity -*/ + +case @diagnostic.severity of + 10 = @diagnostic_debug +| 20 = @diagnostic_info +| 30 = @diagnostic_warning +| 40 = @diagnostic_error +; + +/*- YAML -*/ + +#keyset[parent, idx] +yaml (unique int id: @yaml_node, + int kind: int ref, + int parent: @yaml_node_parent ref, + int idx: int ref, + string tag: string ref, + string tostring: string ref); + +case @yaml_node.kind of + 0 = @yaml_scalar_node +| 1 = @yaml_mapping_node +| 2 = @yaml_sequence_node +| 3 = @yaml_alias_node +; + +@yaml_collection_node = @yaml_mapping_node | @yaml_sequence_node; + +@yaml_node_parent = @yaml_collection_node | @file; + +yaml_anchors (unique int node: @yaml_node ref, + string anchor: string ref); + +yaml_aliases (unique int alias: @yaml_alias_node ref, + string target: string ref); + +yaml_scalars (unique int scalar: @yaml_scalar_node ref, + int style: int ref, + string value: string ref); + +yaml_errors (unique int id: @yaml_error, + string message: string ref); + +yaml_locations(unique int locatable: @yaml_locatable ref, + int location: @location_default ref); + +@yaml_locatable = @yaml_node | @yaml_error; + +/*- Ruby dbscheme -*/ +@ruby_underscore_arg = @ruby_assignment | @ruby_binary | @ruby_conditional | @ruby_operator_assignment | @ruby_range | @ruby_unary | @ruby_underscore_primary + +@ruby_underscore_call_operator = @ruby_reserved_word + +@ruby_underscore_expression = @ruby_assignment | @ruby_binary | @ruby_break | @ruby_call | @ruby_match_pattern | @ruby_next | @ruby_operator_assignment | @ruby_return | @ruby_test_pattern | @ruby_unary | @ruby_underscore_arg | @ruby_yield + +@ruby_underscore_lhs = @ruby_call | @ruby_element_reference | @ruby_scope_resolution | @ruby_token_false | @ruby_token_nil | @ruby_token_true | @ruby_underscore_variable + +@ruby_underscore_method_name = @ruby_delimited_symbol | @ruby_setter | @ruby_token_constant | @ruby_token_identifier | @ruby_token_operator | @ruby_token_simple_symbol | @ruby_underscore_nonlocal_variable + +@ruby_underscore_nonlocal_variable = @ruby_token_class_variable | @ruby_token_global_variable | @ruby_token_instance_variable + +@ruby_underscore_pattern_constant = @ruby_scope_resolution | @ruby_token_constant + +@ruby_underscore_pattern_expr = @ruby_alternative_pattern | @ruby_as_pattern | @ruby_underscore_pattern_expr_basic + +@ruby_underscore_pattern_expr_basic = @ruby_array_pattern | @ruby_expression_reference_pattern | @ruby_find_pattern | @ruby_hash_pattern | @ruby_parenthesized_pattern | @ruby_range | @ruby_token_identifier | @ruby_underscore_pattern_constant | @ruby_underscore_pattern_primitive | @ruby_variable_reference_pattern + +@ruby_underscore_pattern_primitive = @ruby_delimited_symbol | @ruby_lambda | @ruby_regex | @ruby_string__ | @ruby_string_array | @ruby_subshell | @ruby_symbol_array | @ruby_token_encoding | @ruby_token_false | @ruby_token_file | @ruby_token_heredoc_beginning | @ruby_token_line | @ruby_token_nil | @ruby_token_self | @ruby_token_simple_symbol | @ruby_token_true | @ruby_unary | @ruby_underscore_simple_numeric + +@ruby_underscore_pattern_top_expr_body = @ruby_array_pattern | @ruby_find_pattern | @ruby_hash_pattern | @ruby_underscore_pattern_expr + +@ruby_underscore_primary = @ruby_array | @ruby_begin | @ruby_break | @ruby_call | @ruby_case__ | @ruby_case_match | @ruby_chained_string | @ruby_class | @ruby_delimited_symbol | @ruby_for | @ruby_hash | @ruby_if | @ruby_lambda | @ruby_method | @ruby_module | @ruby_next | @ruby_parenthesized_statements | @ruby_redo | @ruby_regex | @ruby_retry | @ruby_return | @ruby_singleton_class | @ruby_singleton_method | @ruby_string__ | @ruby_string_array | @ruby_subshell | @ruby_symbol_array | @ruby_token_character | @ruby_token_heredoc_beginning | @ruby_token_simple_symbol | @ruby_unary | @ruby_underscore_lhs | @ruby_underscore_simple_numeric | @ruby_unless | @ruby_until | @ruby_while | @ruby_yield + +@ruby_underscore_simple_numeric = @ruby_complex | @ruby_rational | @ruby_token_float | @ruby_token_integer + +@ruby_underscore_statement = @ruby_alias | @ruby_begin_block | @ruby_end_block | @ruby_if_modifier | @ruby_rescue_modifier | @ruby_undef | @ruby_underscore_expression | @ruby_unless_modifier | @ruby_until_modifier | @ruby_while_modifier + +@ruby_underscore_variable = @ruby_token_constant | @ruby_token_identifier | @ruby_token_self | @ruby_token_super | @ruby_underscore_nonlocal_variable + +ruby_alias_def( + unique int id: @ruby_alias, + int alias: @ruby_underscore_method_name ref, + int name: @ruby_underscore_method_name ref +); + +#keyset[ruby_alternative_pattern, index] +ruby_alternative_pattern_alternatives( + int ruby_alternative_pattern: @ruby_alternative_pattern ref, + int index: int ref, + unique int alternatives: @ruby_underscore_pattern_expr_basic ref +); + +ruby_alternative_pattern_def( + unique int id: @ruby_alternative_pattern +); + +@ruby_argument_list_child_type = @ruby_block_argument | @ruby_hash_splat_argument | @ruby_pair | @ruby_splat_argument | @ruby_token_forward_argument | @ruby_underscore_expression + +#keyset[ruby_argument_list, index] +ruby_argument_list_child( + int ruby_argument_list: @ruby_argument_list ref, + int index: int ref, + unique int child: @ruby_argument_list_child_type ref +); + +ruby_argument_list_def( + unique int id: @ruby_argument_list +); + +@ruby_array_child_type = @ruby_block_argument | @ruby_hash_splat_argument | @ruby_pair | @ruby_splat_argument | @ruby_token_forward_argument | @ruby_underscore_expression + +#keyset[ruby_array, index] +ruby_array_child( + int ruby_array: @ruby_array ref, + int index: int ref, + unique int child: @ruby_array_child_type ref +); + +ruby_array_def( + unique int id: @ruby_array +); + +ruby_array_pattern_class( + unique int ruby_array_pattern: @ruby_array_pattern ref, + unique int class: @ruby_underscore_pattern_constant ref +); + +@ruby_array_pattern_child_type = @ruby_splat_parameter | @ruby_underscore_pattern_expr + +#keyset[ruby_array_pattern, index] +ruby_array_pattern_child( + int ruby_array_pattern: @ruby_array_pattern ref, + int index: int ref, + unique int child: @ruby_array_pattern_child_type ref +); + +ruby_array_pattern_def( + unique int id: @ruby_array_pattern +); + +ruby_as_pattern_def( + unique int id: @ruby_as_pattern, + int name: @ruby_token_identifier ref, + int value: @ruby_underscore_pattern_expr ref +); + +@ruby_assignment_left_type = @ruby_left_assignment_list | @ruby_underscore_lhs + +@ruby_assignment_right_type = @ruby_rescue_modifier | @ruby_right_assignment_list | @ruby_splat_argument | @ruby_underscore_expression + +ruby_assignment_def( + unique int id: @ruby_assignment, + int left: @ruby_assignment_left_type ref, + int right: @ruby_assignment_right_type ref +); + +@ruby_bare_string_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content + +#keyset[ruby_bare_string, index] +ruby_bare_string_child( + int ruby_bare_string: @ruby_bare_string ref, + int index: int ref, + unique int child: @ruby_bare_string_child_type ref +); + +ruby_bare_string_def( + unique int id: @ruby_bare_string +); + +@ruby_bare_symbol_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content + +#keyset[ruby_bare_symbol, index] +ruby_bare_symbol_child( + int ruby_bare_symbol: @ruby_bare_symbol ref, + int index: int ref, + unique int child: @ruby_bare_symbol_child_type ref +); + +ruby_bare_symbol_def( + unique int id: @ruby_bare_symbol +); + +@ruby_begin_child_type = @ruby_else | @ruby_ensure | @ruby_rescue | @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_begin, index] +ruby_begin_child( + int ruby_begin: @ruby_begin ref, + int index: int ref, + unique int child: @ruby_begin_child_type ref +); + +ruby_begin_def( + unique int id: @ruby_begin +); + +@ruby_begin_block_child_type = @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_begin_block, index] +ruby_begin_block_child( + int ruby_begin_block: @ruby_begin_block ref, + int index: int ref, + unique int child: @ruby_begin_block_child_type ref +); + +ruby_begin_block_def( + unique int id: @ruby_begin_block +); + +@ruby_binary_left_type = @ruby_underscore_expression | @ruby_underscore_simple_numeric + +case @ruby_binary.operator of + 0 = @ruby_binary_bangequal +| 1 = @ruby_binary_bangtilde +| 2 = @ruby_binary_percent +| 3 = @ruby_binary_ampersand +| 4 = @ruby_binary_ampersandampersand +| 5 = @ruby_binary_star +| 6 = @ruby_binary_starstar +| 7 = @ruby_binary_plus +| 8 = @ruby_binary_minus +| 9 = @ruby_binary_slash +| 10 = @ruby_binary_langle +| 11 = @ruby_binary_langlelangle +| 12 = @ruby_binary_langleequal +| 13 = @ruby_binary_langleequalrangle +| 14 = @ruby_binary_equalequal +| 15 = @ruby_binary_equalequalequal +| 16 = @ruby_binary_equaltilde +| 17 = @ruby_binary_rangle +| 18 = @ruby_binary_rangleequal +| 19 = @ruby_binary_ranglerangle +| 20 = @ruby_binary_caret +| 21 = @ruby_binary_and +| 22 = @ruby_binary_or +| 23 = @ruby_binary_pipe +| 24 = @ruby_binary_pipepipe +; + + +ruby_binary_def( + unique int id: @ruby_binary, + int left: @ruby_binary_left_type ref, + int operator: int ref, + int right: @ruby_underscore_expression ref +); + +ruby_block_body( + unique int ruby_block: @ruby_block ref, + unique int body: @ruby_block_body ref +); + +ruby_block_parameters( + unique int ruby_block: @ruby_block ref, + unique int parameters: @ruby_block_parameters ref +); + +ruby_block_def( + unique int id: @ruby_block +); + +ruby_block_argument_child( + unique int ruby_block_argument: @ruby_block_argument ref, + unique int child: @ruby_underscore_arg ref +); + +ruby_block_argument_def( + unique int id: @ruby_block_argument +); + +@ruby_block_body_child_type = @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_block_body, index] +ruby_block_body_child( + int ruby_block_body: @ruby_block_body ref, + int index: int ref, + unique int child: @ruby_block_body_child_type ref +); + +ruby_block_body_def( + unique int id: @ruby_block_body +); + +ruby_block_parameter_name( + unique int ruby_block_parameter: @ruby_block_parameter ref, + unique int name: @ruby_token_identifier ref +); + +ruby_block_parameter_def( + unique int id: @ruby_block_parameter +); + +#keyset[ruby_block_parameters, index] +ruby_block_parameters_locals( + int ruby_block_parameters: @ruby_block_parameters ref, + int index: int ref, + unique int locals: @ruby_token_identifier ref +); + +@ruby_block_parameters_child_type = @ruby_block_parameter | @ruby_destructured_parameter | @ruby_hash_splat_parameter | @ruby_keyword_parameter | @ruby_optional_parameter | @ruby_splat_parameter | @ruby_token_forward_parameter | @ruby_token_hash_splat_nil | @ruby_token_identifier + +#keyset[ruby_block_parameters, index] +ruby_block_parameters_child( + int ruby_block_parameters: @ruby_block_parameters ref, + int index: int ref, + unique int child: @ruby_block_parameters_child_type ref +); + +ruby_block_parameters_def( + unique int id: @ruby_block_parameters +); + +@ruby_body_statement_child_type = @ruby_else | @ruby_ensure | @ruby_rescue | @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_body_statement, index] +ruby_body_statement_child( + int ruby_body_statement: @ruby_body_statement ref, + int index: int ref, + unique int child: @ruby_body_statement_child_type ref +); + +ruby_body_statement_def( + unique int id: @ruby_body_statement +); + +ruby_break_child( + unique int ruby_break: @ruby_break ref, + unique int child: @ruby_argument_list ref +); + +ruby_break_def( + unique int id: @ruby_break +); + +ruby_call_arguments( + unique int ruby_call: @ruby_call ref, + unique int arguments: @ruby_argument_list ref +); + +@ruby_call_block_type = @ruby_block | @ruby_do_block + +ruby_call_block( + unique int ruby_call: @ruby_call ref, + unique int block: @ruby_call_block_type ref +); + +@ruby_call_method_type = @ruby_token_operator | @ruby_underscore_variable + +ruby_call_method( + unique int ruby_call: @ruby_call ref, + unique int method: @ruby_call_method_type ref +); + +ruby_call_operator( + unique int ruby_call: @ruby_call ref, + unique int operator: @ruby_underscore_call_operator ref +); + +ruby_call_receiver( + unique int ruby_call: @ruby_call ref, + unique int receiver: @ruby_underscore_primary ref +); + +ruby_call_def( + unique int id: @ruby_call +); + +ruby_case_value( + unique int ruby_case__: @ruby_case__ ref, + unique int value: @ruby_underscore_statement ref +); + +@ruby_case_child_type = @ruby_else | @ruby_when + +#keyset[ruby_case__, index] +ruby_case_child( + int ruby_case__: @ruby_case__ ref, + int index: int ref, + unique int child: @ruby_case_child_type ref +); + +ruby_case_def( + unique int id: @ruby_case__ +); + +#keyset[ruby_case_match, index] +ruby_case_match_clauses( + int ruby_case_match: @ruby_case_match ref, + int index: int ref, + unique int clauses: @ruby_in_clause ref +); + +ruby_case_match_else( + unique int ruby_case_match: @ruby_case_match ref, + unique int else: @ruby_else ref +); + +ruby_case_match_def( + unique int id: @ruby_case_match, + int value: @ruby_underscore_statement ref +); + +#keyset[ruby_chained_string, index] +ruby_chained_string_child( + int ruby_chained_string: @ruby_chained_string ref, + int index: int ref, + unique int child: @ruby_string__ ref +); + +ruby_chained_string_def( + unique int id: @ruby_chained_string +); + +ruby_class_body( + unique int ruby_class: @ruby_class ref, + unique int body: @ruby_body_statement ref +); + +@ruby_class_name_type = @ruby_scope_resolution | @ruby_token_constant + +ruby_class_superclass( + unique int ruby_class: @ruby_class ref, + unique int superclass: @ruby_superclass ref +); + +ruby_class_def( + unique int id: @ruby_class, + int name: @ruby_class_name_type ref +); + +@ruby_complex_child_type = @ruby_rational | @ruby_token_float | @ruby_token_integer + +ruby_complex_def( + unique int id: @ruby_complex, + int child: @ruby_complex_child_type ref +); + +ruby_conditional_def( + unique int id: @ruby_conditional, + int alternative: @ruby_underscore_arg ref, + int condition: @ruby_underscore_arg ref, + int consequence: @ruby_underscore_arg ref +); + +@ruby_delimited_symbol_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content + +#keyset[ruby_delimited_symbol, index] +ruby_delimited_symbol_child( + int ruby_delimited_symbol: @ruby_delimited_symbol ref, + int index: int ref, + unique int child: @ruby_delimited_symbol_child_type ref +); + +ruby_delimited_symbol_def( + unique int id: @ruby_delimited_symbol +); + +@ruby_destructured_left_assignment_child_type = @ruby_destructured_left_assignment | @ruby_rest_assignment | @ruby_underscore_lhs + +#keyset[ruby_destructured_left_assignment, index] +ruby_destructured_left_assignment_child( + int ruby_destructured_left_assignment: @ruby_destructured_left_assignment ref, + int index: int ref, + unique int child: @ruby_destructured_left_assignment_child_type ref +); + +ruby_destructured_left_assignment_def( + unique int id: @ruby_destructured_left_assignment +); + +@ruby_destructured_parameter_child_type = @ruby_block_parameter | @ruby_destructured_parameter | @ruby_hash_splat_parameter | @ruby_keyword_parameter | @ruby_optional_parameter | @ruby_splat_parameter | @ruby_token_forward_parameter | @ruby_token_hash_splat_nil | @ruby_token_identifier + +#keyset[ruby_destructured_parameter, index] +ruby_destructured_parameter_child( + int ruby_destructured_parameter: @ruby_destructured_parameter ref, + int index: int ref, + unique int child: @ruby_destructured_parameter_child_type ref +); + +ruby_destructured_parameter_def( + unique int id: @ruby_destructured_parameter +); + +@ruby_do_child_type = @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_do, index] +ruby_do_child( + int ruby_do: @ruby_do ref, + int index: int ref, + unique int child: @ruby_do_child_type ref +); + +ruby_do_def( + unique int id: @ruby_do +); + +ruby_do_block_body( + unique int ruby_do_block: @ruby_do_block ref, + unique int body: @ruby_body_statement ref +); + +ruby_do_block_parameters( + unique int ruby_do_block: @ruby_do_block ref, + unique int parameters: @ruby_block_parameters ref +); + +ruby_do_block_def( + unique int id: @ruby_do_block +); + +@ruby_element_reference_child_type = @ruby_block_argument | @ruby_hash_splat_argument | @ruby_pair | @ruby_splat_argument | @ruby_token_forward_argument | @ruby_underscore_expression + +#keyset[ruby_element_reference, index] +ruby_element_reference_child( + int ruby_element_reference: @ruby_element_reference ref, + int index: int ref, + unique int child: @ruby_element_reference_child_type ref +); + +ruby_element_reference_def( + unique int id: @ruby_element_reference, + int object: @ruby_underscore_primary ref +); + +@ruby_else_child_type = @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_else, index] +ruby_else_child( + int ruby_else: @ruby_else ref, + int index: int ref, + unique int child: @ruby_else_child_type ref +); + +ruby_else_def( + unique int id: @ruby_else +); + +@ruby_elsif_alternative_type = @ruby_else | @ruby_elsif + +ruby_elsif_alternative( + unique int ruby_elsif: @ruby_elsif ref, + unique int alternative: @ruby_elsif_alternative_type ref +); + +ruby_elsif_consequence( + unique int ruby_elsif: @ruby_elsif ref, + unique int consequence: @ruby_then ref +); + +ruby_elsif_def( + unique int id: @ruby_elsif, + int condition: @ruby_underscore_statement ref +); + +@ruby_end_block_child_type = @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_end_block, index] +ruby_end_block_child( + int ruby_end_block: @ruby_end_block ref, + int index: int ref, + unique int child: @ruby_end_block_child_type ref +); + +ruby_end_block_def( + unique int id: @ruby_end_block +); + +@ruby_ensure_child_type = @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_ensure, index] +ruby_ensure_child( + int ruby_ensure: @ruby_ensure ref, + int index: int ref, + unique int child: @ruby_ensure_child_type ref +); + +ruby_ensure_def( + unique int id: @ruby_ensure +); + +ruby_exception_variable_def( + unique int id: @ruby_exception_variable, + int child: @ruby_underscore_lhs ref +); + +@ruby_exceptions_child_type = @ruby_splat_argument | @ruby_underscore_arg + +#keyset[ruby_exceptions, index] +ruby_exceptions_child( + int ruby_exceptions: @ruby_exceptions ref, + int index: int ref, + unique int child: @ruby_exceptions_child_type ref +); + +ruby_exceptions_def( + unique int id: @ruby_exceptions +); + +ruby_expression_reference_pattern_def( + unique int id: @ruby_expression_reference_pattern, + int value: @ruby_underscore_expression ref +); + +ruby_find_pattern_class( + unique int ruby_find_pattern: @ruby_find_pattern ref, + unique int class: @ruby_underscore_pattern_constant ref +); + +@ruby_find_pattern_child_type = @ruby_splat_parameter | @ruby_underscore_pattern_expr + +#keyset[ruby_find_pattern, index] +ruby_find_pattern_child( + int ruby_find_pattern: @ruby_find_pattern ref, + int index: int ref, + unique int child: @ruby_find_pattern_child_type ref +); + +ruby_find_pattern_def( + unique int id: @ruby_find_pattern +); + +@ruby_for_pattern_type = @ruby_left_assignment_list | @ruby_underscore_lhs + +ruby_for_def( + unique int id: @ruby_for, + int body: @ruby_do ref, + int pattern: @ruby_for_pattern_type ref, + int value: @ruby_in ref +); + +@ruby_hash_child_type = @ruby_hash_splat_argument | @ruby_pair + +#keyset[ruby_hash, index] +ruby_hash_child( + int ruby_hash: @ruby_hash ref, + int index: int ref, + unique int child: @ruby_hash_child_type ref +); + +ruby_hash_def( + unique int id: @ruby_hash +); + +ruby_hash_pattern_class( + unique int ruby_hash_pattern: @ruby_hash_pattern ref, + unique int class: @ruby_underscore_pattern_constant ref +); + +@ruby_hash_pattern_child_type = @ruby_hash_splat_parameter | @ruby_keyword_pattern | @ruby_token_hash_splat_nil + +#keyset[ruby_hash_pattern, index] +ruby_hash_pattern_child( + int ruby_hash_pattern: @ruby_hash_pattern ref, + int index: int ref, + unique int child: @ruby_hash_pattern_child_type ref +); + +ruby_hash_pattern_def( + unique int id: @ruby_hash_pattern +); + +ruby_hash_splat_argument_child( + unique int ruby_hash_splat_argument: @ruby_hash_splat_argument ref, + unique int child: @ruby_underscore_arg ref +); + +ruby_hash_splat_argument_def( + unique int id: @ruby_hash_splat_argument +); + +ruby_hash_splat_parameter_name( + unique int ruby_hash_splat_parameter: @ruby_hash_splat_parameter ref, + unique int name: @ruby_token_identifier ref +); + +ruby_hash_splat_parameter_def( + unique int id: @ruby_hash_splat_parameter +); + +@ruby_heredoc_body_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_heredoc_content | @ruby_token_heredoc_end + +#keyset[ruby_heredoc_body, index] +ruby_heredoc_body_child( + int ruby_heredoc_body: @ruby_heredoc_body ref, + int index: int ref, + unique int child: @ruby_heredoc_body_child_type ref +); + +ruby_heredoc_body_def( + unique int id: @ruby_heredoc_body +); + +@ruby_if_alternative_type = @ruby_else | @ruby_elsif + +ruby_if_alternative( + unique int ruby_if: @ruby_if ref, + unique int alternative: @ruby_if_alternative_type ref +); + +ruby_if_consequence( + unique int ruby_if: @ruby_if ref, + unique int consequence: @ruby_then ref +); + +ruby_if_def( + unique int id: @ruby_if, + int condition: @ruby_underscore_statement ref +); + +ruby_if_guard_def( + unique int id: @ruby_if_guard, + int condition: @ruby_underscore_expression ref +); + +ruby_if_modifier_def( + unique int id: @ruby_if_modifier, + int body: @ruby_underscore_statement ref, + int condition: @ruby_underscore_expression ref +); + +ruby_in_def( + unique int id: @ruby_in, + int child: @ruby_underscore_arg ref +); + +ruby_in_clause_body( + unique int ruby_in_clause: @ruby_in_clause ref, + unique int body: @ruby_then ref +); + +@ruby_in_clause_guard_type = @ruby_if_guard | @ruby_unless_guard + +ruby_in_clause_guard( + unique int ruby_in_clause: @ruby_in_clause ref, + unique int guard: @ruby_in_clause_guard_type ref +); + +ruby_in_clause_def( + unique int id: @ruby_in_clause, + int pattern: @ruby_underscore_pattern_top_expr_body ref +); + +@ruby_interpolation_child_type = @ruby_token_empty_statement | @ruby_underscore_nonlocal_variable | @ruby_underscore_statement + +#keyset[ruby_interpolation, index] +ruby_interpolation_child( + int ruby_interpolation: @ruby_interpolation ref, + int index: int ref, + unique int child: @ruby_interpolation_child_type ref +); + +ruby_interpolation_def( + unique int id: @ruby_interpolation +); + +ruby_keyword_parameter_value( + unique int ruby_keyword_parameter: @ruby_keyword_parameter ref, + unique int value: @ruby_underscore_arg ref +); + +ruby_keyword_parameter_def( + unique int id: @ruby_keyword_parameter, + int name: @ruby_token_identifier ref +); + +@ruby_keyword_pattern_key_type = @ruby_string__ | @ruby_token_hash_key_symbol + +ruby_keyword_pattern_value( + unique int ruby_keyword_pattern: @ruby_keyword_pattern ref, + unique int value: @ruby_underscore_pattern_expr ref +); + +ruby_keyword_pattern_def( + unique int id: @ruby_keyword_pattern, + int key__: @ruby_keyword_pattern_key_type ref +); + +@ruby_lambda_body_type = @ruby_block | @ruby_do_block + +ruby_lambda_parameters( + unique int ruby_lambda: @ruby_lambda ref, + unique int parameters: @ruby_lambda_parameters ref +); + +ruby_lambda_def( + unique int id: @ruby_lambda, + int body: @ruby_lambda_body_type ref +); + +@ruby_lambda_parameters_child_type = @ruby_block_parameter | @ruby_destructured_parameter | @ruby_hash_splat_parameter | @ruby_keyword_parameter | @ruby_optional_parameter | @ruby_splat_parameter | @ruby_token_forward_parameter | @ruby_token_hash_splat_nil | @ruby_token_identifier + +#keyset[ruby_lambda_parameters, index] +ruby_lambda_parameters_child( + int ruby_lambda_parameters: @ruby_lambda_parameters ref, + int index: int ref, + unique int child: @ruby_lambda_parameters_child_type ref +); + +ruby_lambda_parameters_def( + unique int id: @ruby_lambda_parameters +); + +@ruby_left_assignment_list_child_type = @ruby_destructured_left_assignment | @ruby_rest_assignment | @ruby_underscore_lhs + +#keyset[ruby_left_assignment_list, index] +ruby_left_assignment_list_child( + int ruby_left_assignment_list: @ruby_left_assignment_list ref, + int index: int ref, + unique int child: @ruby_left_assignment_list_child_type ref +); + +ruby_left_assignment_list_def( + unique int id: @ruby_left_assignment_list +); + +ruby_match_pattern_def( + unique int id: @ruby_match_pattern, + int pattern: @ruby_underscore_pattern_top_expr_body ref, + int value: @ruby_underscore_arg ref +); + +@ruby_method_body_type = @ruby_body_statement | @ruby_rescue_modifier | @ruby_underscore_arg + +ruby_method_body( + unique int ruby_method: @ruby_method ref, + unique int body: @ruby_method_body_type ref +); + +ruby_method_parameters( + unique int ruby_method: @ruby_method ref, + unique int parameters: @ruby_method_parameters ref +); + +ruby_method_def( + unique int id: @ruby_method, + int name: @ruby_underscore_method_name ref +); + +@ruby_method_parameters_child_type = @ruby_block_parameter | @ruby_destructured_parameter | @ruby_hash_splat_parameter | @ruby_keyword_parameter | @ruby_optional_parameter | @ruby_splat_parameter | @ruby_token_forward_parameter | @ruby_token_hash_splat_nil | @ruby_token_identifier + +#keyset[ruby_method_parameters, index] +ruby_method_parameters_child( + int ruby_method_parameters: @ruby_method_parameters ref, + int index: int ref, + unique int child: @ruby_method_parameters_child_type ref +); + +ruby_method_parameters_def( + unique int id: @ruby_method_parameters +); + +ruby_module_body( + unique int ruby_module: @ruby_module ref, + unique int body: @ruby_body_statement ref +); + +@ruby_module_name_type = @ruby_scope_resolution | @ruby_token_constant + +ruby_module_def( + unique int id: @ruby_module, + int name: @ruby_module_name_type ref +); + +ruby_next_child( + unique int ruby_next: @ruby_next ref, + unique int child: @ruby_argument_list ref +); + +ruby_next_def( + unique int id: @ruby_next +); + +case @ruby_operator_assignment.operator of + 0 = @ruby_operator_assignment_percentequal +| 1 = @ruby_operator_assignment_ampersandampersandequal +| 2 = @ruby_operator_assignment_ampersandequal +| 3 = @ruby_operator_assignment_starstarequal +| 4 = @ruby_operator_assignment_starequal +| 5 = @ruby_operator_assignment_plusequal +| 6 = @ruby_operator_assignment_minusequal +| 7 = @ruby_operator_assignment_slashequal +| 8 = @ruby_operator_assignment_langlelangleequal +| 9 = @ruby_operator_assignment_ranglerangleequal +| 10 = @ruby_operator_assignment_caretequal +| 11 = @ruby_operator_assignment_pipeequal +| 12 = @ruby_operator_assignment_pipepipeequal +; + + +@ruby_operator_assignment_right_type = @ruby_rescue_modifier | @ruby_underscore_expression + +ruby_operator_assignment_def( + unique int id: @ruby_operator_assignment, + int left: @ruby_underscore_lhs ref, + int operator: int ref, + int right: @ruby_operator_assignment_right_type ref +); + +ruby_optional_parameter_def( + unique int id: @ruby_optional_parameter, + int name: @ruby_token_identifier ref, + int value: @ruby_underscore_arg ref +); + +@ruby_pair_key_type = @ruby_string__ | @ruby_token_hash_key_symbol | @ruby_underscore_arg + +ruby_pair_value( + unique int ruby_pair: @ruby_pair ref, + unique int value: @ruby_underscore_arg ref +); + +ruby_pair_def( + unique int id: @ruby_pair, + int key__: @ruby_pair_key_type ref +); + +ruby_parenthesized_pattern_def( + unique int id: @ruby_parenthesized_pattern, + int child: @ruby_underscore_pattern_expr ref +); + +@ruby_parenthesized_statements_child_type = @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_parenthesized_statements, index] +ruby_parenthesized_statements_child( + int ruby_parenthesized_statements: @ruby_parenthesized_statements ref, + int index: int ref, + unique int child: @ruby_parenthesized_statements_child_type ref +); + +ruby_parenthesized_statements_def( + unique int id: @ruby_parenthesized_statements +); + +@ruby_pattern_child_type = @ruby_splat_argument | @ruby_underscore_arg + +ruby_pattern_def( + unique int id: @ruby_pattern, + int child: @ruby_pattern_child_type ref +); + +@ruby_program_child_type = @ruby_token_empty_statement | @ruby_token_uninterpreted | @ruby_underscore_statement + +#keyset[ruby_program, index] +ruby_program_child( + int ruby_program: @ruby_program ref, + int index: int ref, + unique int child: @ruby_program_child_type ref +); + +ruby_program_def( + unique int id: @ruby_program +); + +@ruby_range_begin_type = @ruby_underscore_arg | @ruby_underscore_pattern_primitive + +ruby_range_begin( + unique int ruby_range: @ruby_range ref, + unique int begin: @ruby_range_begin_type ref +); + +@ruby_range_end_type = @ruby_underscore_arg | @ruby_underscore_pattern_primitive + +ruby_range_end( + unique int ruby_range: @ruby_range ref, + unique int end: @ruby_range_end_type ref +); + +case @ruby_range.operator of + 0 = @ruby_range_dotdot +| 1 = @ruby_range_dotdotdot +; + + +ruby_range_def( + unique int id: @ruby_range, + int operator: int ref +); + +@ruby_rational_child_type = @ruby_token_float | @ruby_token_integer + +ruby_rational_def( + unique int id: @ruby_rational, + int child: @ruby_rational_child_type ref +); + +ruby_redo_child( + unique int ruby_redo: @ruby_redo ref, + unique int child: @ruby_argument_list ref +); + +ruby_redo_def( + unique int id: @ruby_redo +); + +@ruby_regex_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content + +#keyset[ruby_regex, index] +ruby_regex_child( + int ruby_regex: @ruby_regex ref, + int index: int ref, + unique int child: @ruby_regex_child_type ref +); + +ruby_regex_def( + unique int id: @ruby_regex +); + +ruby_rescue_body( + unique int ruby_rescue: @ruby_rescue ref, + unique int body: @ruby_then ref +); + +ruby_rescue_exceptions( + unique int ruby_rescue: @ruby_rescue ref, + unique int exceptions: @ruby_exceptions ref +); + +ruby_rescue_variable( + unique int ruby_rescue: @ruby_rescue ref, + unique int variable: @ruby_exception_variable ref +); + +ruby_rescue_def( + unique int id: @ruby_rescue +); + +@ruby_rescue_modifier_body_type = @ruby_underscore_arg | @ruby_underscore_statement + +ruby_rescue_modifier_def( + unique int id: @ruby_rescue_modifier, + int body: @ruby_rescue_modifier_body_type ref, + int handler: @ruby_underscore_expression ref +); + +ruby_rest_assignment_child( + unique int ruby_rest_assignment: @ruby_rest_assignment ref, + unique int child: @ruby_underscore_lhs ref +); + +ruby_rest_assignment_def( + unique int id: @ruby_rest_assignment +); + +ruby_retry_child( + unique int ruby_retry: @ruby_retry ref, + unique int child: @ruby_argument_list ref +); + +ruby_retry_def( + unique int id: @ruby_retry +); + +ruby_return_child( + unique int ruby_return: @ruby_return ref, + unique int child: @ruby_argument_list ref +); + +ruby_return_def( + unique int id: @ruby_return +); + +@ruby_right_assignment_list_child_type = @ruby_splat_argument | @ruby_underscore_arg + +#keyset[ruby_right_assignment_list, index] +ruby_right_assignment_list_child( + int ruby_right_assignment_list: @ruby_right_assignment_list ref, + int index: int ref, + unique int child: @ruby_right_assignment_list_child_type ref +); + +ruby_right_assignment_list_def( + unique int id: @ruby_right_assignment_list +); + +@ruby_scope_resolution_scope_type = @ruby_underscore_pattern_constant | @ruby_underscore_primary + +ruby_scope_resolution_scope( + unique int ruby_scope_resolution: @ruby_scope_resolution ref, + unique int scope: @ruby_scope_resolution_scope_type ref +); + +ruby_scope_resolution_def( + unique int id: @ruby_scope_resolution, + int name: @ruby_token_constant ref +); + +ruby_setter_def( + unique int id: @ruby_setter, + int name: @ruby_token_identifier ref +); + +ruby_singleton_class_body( + unique int ruby_singleton_class: @ruby_singleton_class ref, + unique int body: @ruby_body_statement ref +); + +ruby_singleton_class_def( + unique int id: @ruby_singleton_class, + int value: @ruby_underscore_arg ref +); + +@ruby_singleton_method_body_type = @ruby_body_statement | @ruby_rescue_modifier | @ruby_underscore_arg + +ruby_singleton_method_body( + unique int ruby_singleton_method: @ruby_singleton_method ref, + unique int body: @ruby_singleton_method_body_type ref +); + +@ruby_singleton_method_object_type = @ruby_underscore_arg | @ruby_underscore_variable + +ruby_singleton_method_parameters( + unique int ruby_singleton_method: @ruby_singleton_method ref, + unique int parameters: @ruby_method_parameters ref +); + +ruby_singleton_method_def( + unique int id: @ruby_singleton_method, + int name: @ruby_underscore_method_name ref, + int object: @ruby_singleton_method_object_type ref +); + +ruby_splat_argument_child( + unique int ruby_splat_argument: @ruby_splat_argument ref, + unique int child: @ruby_underscore_arg ref +); + +ruby_splat_argument_def( + unique int id: @ruby_splat_argument +); + +ruby_splat_parameter_name( + unique int ruby_splat_parameter: @ruby_splat_parameter ref, + unique int name: @ruby_token_identifier ref +); + +ruby_splat_parameter_def( + unique int id: @ruby_splat_parameter +); + +@ruby_string_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content + +#keyset[ruby_string__, index] +ruby_string_child( + int ruby_string__: @ruby_string__ ref, + int index: int ref, + unique int child: @ruby_string_child_type ref +); + +ruby_string_def( + unique int id: @ruby_string__ +); + +#keyset[ruby_string_array, index] +ruby_string_array_child( + int ruby_string_array: @ruby_string_array ref, + int index: int ref, + unique int child: @ruby_bare_string ref +); + +ruby_string_array_def( + unique int id: @ruby_string_array +); + +@ruby_subshell_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content + +#keyset[ruby_subshell, index] +ruby_subshell_child( + int ruby_subshell: @ruby_subshell ref, + int index: int ref, + unique int child: @ruby_subshell_child_type ref +); + +ruby_subshell_def( + unique int id: @ruby_subshell +); + +ruby_superclass_def( + unique int id: @ruby_superclass, + int child: @ruby_underscore_expression ref +); + +#keyset[ruby_symbol_array, index] +ruby_symbol_array_child( + int ruby_symbol_array: @ruby_symbol_array ref, + int index: int ref, + unique int child: @ruby_bare_symbol ref +); + +ruby_symbol_array_def( + unique int id: @ruby_symbol_array +); + +ruby_test_pattern_def( + unique int id: @ruby_test_pattern, + int pattern: @ruby_underscore_pattern_top_expr_body ref, + int value: @ruby_underscore_arg ref +); + +@ruby_then_child_type = @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_then, index] +ruby_then_child( + int ruby_then: @ruby_then ref, + int index: int ref, + unique int child: @ruby_then_child_type ref +); + +ruby_then_def( + unique int id: @ruby_then +); + +@ruby_unary_operand_type = @ruby_parenthesized_statements | @ruby_underscore_expression | @ruby_underscore_simple_numeric + +case @ruby_unary.operator of + 0 = @ruby_unary_bang +| 1 = @ruby_unary_plus +| 2 = @ruby_unary_minus +| 3 = @ruby_unary_definedquestion +| 4 = @ruby_unary_not +| 5 = @ruby_unary_tilde +; + + +ruby_unary_def( + unique int id: @ruby_unary, + int operand: @ruby_unary_operand_type ref, + int operator: int ref +); + +#keyset[ruby_undef, index] +ruby_undef_child( + int ruby_undef: @ruby_undef ref, + int index: int ref, + unique int child: @ruby_underscore_method_name ref +); + +ruby_undef_def( + unique int id: @ruby_undef +); + +@ruby_unless_alternative_type = @ruby_else | @ruby_elsif + +ruby_unless_alternative( + unique int ruby_unless: @ruby_unless ref, + unique int alternative: @ruby_unless_alternative_type ref +); + +ruby_unless_consequence( + unique int ruby_unless: @ruby_unless ref, + unique int consequence: @ruby_then ref +); + +ruby_unless_def( + unique int id: @ruby_unless, + int condition: @ruby_underscore_statement ref +); + +ruby_unless_guard_def( + unique int id: @ruby_unless_guard, + int condition: @ruby_underscore_expression ref +); + +ruby_unless_modifier_def( + unique int id: @ruby_unless_modifier, + int body: @ruby_underscore_statement ref, + int condition: @ruby_underscore_expression ref +); + +ruby_until_def( + unique int id: @ruby_until, + int body: @ruby_do ref, + int condition: @ruby_underscore_statement ref +); + +ruby_until_modifier_def( + unique int id: @ruby_until_modifier, + int body: @ruby_underscore_statement ref, + int condition: @ruby_underscore_expression ref +); + +@ruby_variable_reference_pattern_name_type = @ruby_token_identifier | @ruby_underscore_nonlocal_variable + +ruby_variable_reference_pattern_def( + unique int id: @ruby_variable_reference_pattern, + int name: @ruby_variable_reference_pattern_name_type ref +); + +ruby_when_body( + unique int ruby_when: @ruby_when ref, + unique int body: @ruby_then ref +); + +#keyset[ruby_when, index] +ruby_when_pattern( + int ruby_when: @ruby_when ref, + int index: int ref, + unique int pattern: @ruby_pattern ref +); + +ruby_when_def( + unique int id: @ruby_when +); + +ruby_while_def( + unique int id: @ruby_while, + int body: @ruby_do ref, + int condition: @ruby_underscore_statement ref +); + +ruby_while_modifier_def( + unique int id: @ruby_while_modifier, + int body: @ruby_underscore_statement ref, + int condition: @ruby_underscore_expression ref +); + +ruby_yield_child( + unique int ruby_yield: @ruby_yield ref, + unique int child: @ruby_argument_list ref +); + +ruby_yield_def( + unique int id: @ruby_yield +); + +ruby_tokeninfo( + unique int id: @ruby_token, + int kind: int ref, + string value: string ref +); + +case @ruby_token.kind of + 0 = @ruby_reserved_word +| 1 = @ruby_token_character +| 2 = @ruby_token_class_variable +| 3 = @ruby_token_comment +| 4 = @ruby_token_constant +| 5 = @ruby_token_empty_statement +| 6 = @ruby_token_encoding +| 7 = @ruby_token_escape_sequence +| 8 = @ruby_token_false +| 9 = @ruby_token_file +| 10 = @ruby_token_float +| 11 = @ruby_token_forward_argument +| 12 = @ruby_token_forward_parameter +| 13 = @ruby_token_global_variable +| 14 = @ruby_token_hash_key_symbol +| 15 = @ruby_token_hash_splat_nil +| 16 = @ruby_token_heredoc_beginning +| 17 = @ruby_token_heredoc_content +| 18 = @ruby_token_heredoc_end +| 19 = @ruby_token_identifier +| 20 = @ruby_token_instance_variable +| 21 = @ruby_token_integer +| 22 = @ruby_token_line +| 23 = @ruby_token_nil +| 24 = @ruby_token_operator +| 25 = @ruby_token_self +| 26 = @ruby_token_simple_symbol +| 27 = @ruby_token_string_content +| 28 = @ruby_token_super +| 29 = @ruby_token_true +| 30 = @ruby_token_uninterpreted +; + + +@ruby_ast_node = @ruby_alias | @ruby_alternative_pattern | @ruby_argument_list | @ruby_array | @ruby_array_pattern | @ruby_as_pattern | @ruby_assignment | @ruby_bare_string | @ruby_bare_symbol | @ruby_begin | @ruby_begin_block | @ruby_binary | @ruby_block | @ruby_block_argument | @ruby_block_body | @ruby_block_parameter | @ruby_block_parameters | @ruby_body_statement | @ruby_break | @ruby_call | @ruby_case__ | @ruby_case_match | @ruby_chained_string | @ruby_class | @ruby_complex | @ruby_conditional | @ruby_delimited_symbol | @ruby_destructured_left_assignment | @ruby_destructured_parameter | @ruby_do | @ruby_do_block | @ruby_element_reference | @ruby_else | @ruby_elsif | @ruby_end_block | @ruby_ensure | @ruby_exception_variable | @ruby_exceptions | @ruby_expression_reference_pattern | @ruby_find_pattern | @ruby_for | @ruby_hash | @ruby_hash_pattern | @ruby_hash_splat_argument | @ruby_hash_splat_parameter | @ruby_heredoc_body | @ruby_if | @ruby_if_guard | @ruby_if_modifier | @ruby_in | @ruby_in_clause | @ruby_interpolation | @ruby_keyword_parameter | @ruby_keyword_pattern | @ruby_lambda | @ruby_lambda_parameters | @ruby_left_assignment_list | @ruby_match_pattern | @ruby_method | @ruby_method_parameters | @ruby_module | @ruby_next | @ruby_operator_assignment | @ruby_optional_parameter | @ruby_pair | @ruby_parenthesized_pattern | @ruby_parenthesized_statements | @ruby_pattern | @ruby_program | @ruby_range | @ruby_rational | @ruby_redo | @ruby_regex | @ruby_rescue | @ruby_rescue_modifier | @ruby_rest_assignment | @ruby_retry | @ruby_return | @ruby_right_assignment_list | @ruby_scope_resolution | @ruby_setter | @ruby_singleton_class | @ruby_singleton_method | @ruby_splat_argument | @ruby_splat_parameter | @ruby_string__ | @ruby_string_array | @ruby_subshell | @ruby_superclass | @ruby_symbol_array | @ruby_test_pattern | @ruby_then | @ruby_token | @ruby_unary | @ruby_undef | @ruby_unless | @ruby_unless_guard | @ruby_unless_modifier | @ruby_until | @ruby_until_modifier | @ruby_variable_reference_pattern | @ruby_when | @ruby_while | @ruby_while_modifier | @ruby_yield + +ruby_ast_node_location( + unique int node: @ruby_ast_node ref, + int loc: @location_default ref +); + +#keyset[parent, parent_index] +ruby_ast_node_parent( + unique int node: @ruby_ast_node ref, + int parent: @ruby_ast_node ref, + int parent_index: int ref +); + +/*- Erb dbscheme -*/ +erb_comment_directive_child( + unique int erb_comment_directive: @erb_comment_directive ref, + unique int child: @erb_token_comment ref +); + +erb_comment_directive_def( + unique int id: @erb_comment_directive +); + +erb_directive_child( + unique int erb_directive: @erb_directive ref, + unique int child: @erb_token_code ref +); + +erb_directive_def( + unique int id: @erb_directive +); + +erb_graphql_directive_child( + unique int erb_graphql_directive: @erb_graphql_directive ref, + unique int child: @erb_token_code ref +); + +erb_graphql_directive_def( + unique int id: @erb_graphql_directive +); + +erb_output_directive_child( + unique int erb_output_directive: @erb_output_directive ref, + unique int child: @erb_token_code ref +); + +erb_output_directive_def( + unique int id: @erb_output_directive +); + +@erb_template_child_type = @erb_comment_directive | @erb_directive | @erb_graphql_directive | @erb_output_directive | @erb_token_content + +#keyset[erb_template, index] +erb_template_child( + int erb_template: @erb_template ref, + int index: int ref, + unique int child: @erb_template_child_type ref +); + +erb_template_def( + unique int id: @erb_template +); + +erb_tokeninfo( + unique int id: @erb_token, + int kind: int ref, + string value: string ref +); + +case @erb_token.kind of + 0 = @erb_reserved_word +| 1 = @erb_token_code +| 2 = @erb_token_comment +| 3 = @erb_token_content +; + + +@erb_ast_node = @erb_comment_directive | @erb_directive | @erb_graphql_directive | @erb_output_directive | @erb_template | @erb_token + +erb_ast_node_location( + unique int node: @erb_ast_node ref, + int loc: @location_default ref +); + +#keyset[parent, parent_index] +erb_ast_node_parent( + unique int node: @erb_ast_node ref, + int parent: @erb_ast_node ref, + int parent_index: int ref +); + diff --git a/ruby/ql/lib/upgrades/f9f0f4023e433184fda76f595247bf448b782135/ruby_ast_node_location.ql b/ruby/ql/lib/upgrades/f9f0f4023e433184fda76f595247bf448b782135/ruby_ast_node_location.ql new file mode 100644 index 00000000000..09f30acf973 --- /dev/null +++ b/ruby/ql/lib/upgrades/f9f0f4023e433184fda76f595247bf448b782135/ruby_ast_node_location.ql @@ -0,0 +1,11 @@ +class AstNode extends @ruby_ast_node { + string toString() { none() } +} + +class Location extends @location_default { + string toString() { none() } +} + +from AstNode n, Location location +where ruby_ast_node_info(n, _, _, location) +select n, location diff --git a/ruby/ql/lib/upgrades/f9f0f4023e433184fda76f595247bf448b782135/ruby_ast_node_parent.ql b/ruby/ql/lib/upgrades/f9f0f4023e433184fda76f595247bf448b782135/ruby_ast_node_parent.ql new file mode 100644 index 00000000000..024ed9ee6b7 --- /dev/null +++ b/ruby/ql/lib/upgrades/f9f0f4023e433184fda76f595247bf448b782135/ruby_ast_node_parent.ql @@ -0,0 +1,7 @@ +class AstNode extends @ruby_ast_node { + string toString() { none() } +} + +from AstNode n, int i, AstNode parent +where ruby_ast_node_info(n, parent, i, _) +select n, parent, i diff --git a/ruby/ql/lib/upgrades/f9f0f4023e433184fda76f595247bf448b782135/upgrade.properties b/ruby/ql/lib/upgrades/f9f0f4023e433184fda76f595247bf448b782135/upgrade.properties new file mode 100644 index 00000000000..ddac0258abe --- /dev/null +++ b/ruby/ql/lib/upgrades/f9f0f4023e433184fda76f595247bf448b782135/upgrade.properties @@ -0,0 +1,8 @@ +description: Split up `ruby_ast_node_info` into `ruby_ast_node_location` and `ruby_ast_node_parent` (and same for `erb`) +compatibility: backwards +erb_ast_node_location.rel: run erb_ast_node_location.qlo +erb_ast_node_parent.rel: run erb_ast_node_parent.qlo +erb_ast_node_info.rel: delete +ruby_ast_node_location.rel: run ruby_ast_node_location.qlo +ruby_ast_node_parent.rel: run ruby_ast_node_parent.qlo +ruby_ast_node_info.rel: delete diff --git a/ruby/ql/src/CHANGELOG.md b/ruby/ql/src/CHANGELOG.md index 4149c728eff..508fa71de4a 100644 --- a/ruby/ql/src/CHANGELOG.md +++ b/ruby/ql/src/CHANGELOG.md @@ -1,3 +1,22 @@ +## 0.8.13 + +No user-facing changes. + +## 0.8.12 + +No user-facing changes. + +## 0.8.11 + +No user-facing changes. + +## 0.8.10 + +### Minor Analysis Improvements + +* Calls to `Object#method`, `Object#public_method` and `Object#singleton_method` with untrusted data are now recognised as sinks for code injection. +* Added additional request sources for Ruby on Rails. + ## 0.8.9 No user-facing changes. diff --git a/ruby/ql/src/change-notes/2023-09-25-csrf-protection-not-enabled.md b/ruby/ql/src/change-notes/2023-09-25-csrf-protection-not-enabled.md new file mode 100644 index 00000000000..c84492291a3 --- /dev/null +++ b/ruby/ql/src/change-notes/2023-09-25-csrf-protection-not-enabled.md @@ -0,0 +1,4 @@ +--- +category: newQuery +--- +* Added a new query, `rb/csrf-protection-not-enabled`, to detect cases where Cross-Site Request Forgery protection is not enabled in Ruby on Rails controllers. diff --git a/ruby/ql/src/change-notes/2024-02-13-rails-more-request-sources.md b/ruby/ql/src/change-notes/2024-02-13-rails-more-request-sources.md deleted file mode 100644 index 84ea696dfef..00000000000 --- a/ruby/ql/src/change-notes/2024-02-13-rails-more-request-sources.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Added additional request sources for Ruby on Rails. \ No newline at end of file diff --git a/ruby/ql/src/change-notes/2024-03-01-method-code-injection-sinks.md b/ruby/ql/src/change-notes/released/0.8.10.md similarity index 51% rename from ruby/ql/src/change-notes/2024-03-01-method-code-injection-sinks.md rename to ruby/ql/src/change-notes/released/0.8.10.md index 43e40d3fd53..985cdf8d22e 100644 --- a/ruby/ql/src/change-notes/2024-03-01-method-code-injection-sinks.md +++ b/ruby/ql/src/change-notes/released/0.8.10.md @@ -1,4 +1,6 @@ ---- -category: minorAnalysis ---- -* Calls to `Object#method`, `Object#public_method` and `Object#singleton_method` with untrusted data are now recognised as sinks for code injection. \ No newline at end of file +## 0.8.10 + +### Minor Analysis Improvements + +* Calls to `Object#method`, `Object#public_method` and `Object#singleton_method` with untrusted data are now recognised as sinks for code injection. +* Added additional request sources for Ruby on Rails. diff --git a/ruby/ql/src/change-notes/released/0.8.11.md b/ruby/ql/src/change-notes/released/0.8.11.md new file mode 100644 index 00000000000..6f504c5c207 --- /dev/null +++ b/ruby/ql/src/change-notes/released/0.8.11.md @@ -0,0 +1,3 @@ +## 0.8.11 + +No user-facing changes. diff --git a/ruby/ql/src/change-notes/released/0.8.12.md b/ruby/ql/src/change-notes/released/0.8.12.md new file mode 100644 index 00000000000..bc91afe9c1e --- /dev/null +++ b/ruby/ql/src/change-notes/released/0.8.12.md @@ -0,0 +1,3 @@ +## 0.8.12 + +No user-facing changes. diff --git a/ruby/ql/src/change-notes/released/0.8.13.md b/ruby/ql/src/change-notes/released/0.8.13.md new file mode 100644 index 00000000000..4f7ef70cec5 --- /dev/null +++ b/ruby/ql/src/change-notes/released/0.8.13.md @@ -0,0 +1,3 @@ +## 0.8.13 + +No user-facing changes. diff --git a/ruby/ql/src/codeql-pack.release.yml b/ruby/ql/src/codeql-pack.release.yml index 5290c29b7fe..0fb6f3d786c 100644 --- a/ruby/ql/src/codeql-pack.release.yml +++ b/ruby/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.8.9 +lastReleaseVersion: 0.8.13 diff --git a/ruby/ql/src/qlpack.yml b/ruby/ql/src/qlpack.yml index 8af7f9fd797..4eac4d7e8c3 100644 --- a/ruby/ql/src/qlpack.yml +++ b/ruby/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ruby-queries -version: 0.8.10-dev +version: 0.8.14-dev groups: - ruby - queries diff --git a/ruby/ql/src/queries/security/cwe-116/IncompleteMultiCharacterSanitization.qhelp b/ruby/ql/src/queries/security/cwe-116/IncompleteMultiCharacterSanitization.qhelp index 5afb23e1ec2..8d203058644 100644 --- a/ruby/ql/src/queries/security/cwe-116/IncompleteMultiCharacterSanitization.qhelp +++ b/ruby/ql/src/queries/security/cwe-116/IncompleteMultiCharacterSanitization.qhelp @@ -90,7 +90,7 @@ end Another potential fix is to use the popular sanitize gem. It keeps most of the safe HTML tags while removing all unsafe tags and attributes.

    - + require 'sanitize' def sanitize_html(input) diff --git a/ruby/ql/src/queries/security/cwe-117/examples/log_injection_good.rb b/ruby/ql/src/queries/security/cwe-117/examples/log_injection_good.rb index 71b0b8b4604..9ee33804b9f 100644 --- a/ruby/ql/src/queries/security/cwe-117/examples/log_injection_good.rb +++ b/ruby/ql/src/queries/security/cwe-117/examples/log_injection_good.rb @@ -5,9 +5,8 @@ class UsersController < ApplicationController logger = Logger.new STDOUT username = params[:username] - # GOOD: log message constructed with unsanitized user input - sanitized_username = username.gsub("\n", "") - logger.info "attempting to login user: " + sanitized_username + # GOOD: log message constructed with sanitized user input + logger.info "attempting to login user: " + sanitized_username.gsub("\n", "") # ... login logic ... end diff --git a/ruby/ql/src/queries/security/cwe-352/CSRFProtectionNotEnabled.qhelp b/ruby/ql/src/queries/security/cwe-352/CSRFProtectionNotEnabled.qhelp new file mode 100644 index 00000000000..9b8944b1d65 --- /dev/null +++ b/ruby/ql/src/queries/security/cwe-352/CSRFProtectionNotEnabled.qhelp @@ -0,0 +1,65 @@ + + + + +

    + Cross-site request forgery (CSRF) is a type of vulnerability in which an + attacker is able to force a user to carry out an action that the user did + not intend. +

    + +

    + The attacker tricks an authenticated user into submitting a request to the + web application. Typically this request will result in a state change on + the server, such as changing the user's password. The request can be + initiated when the user visits a site controlled by the attacker. If the + web application relies only on cookies for authentication, or on other + credentials that are automatically included in the request, then this + request will appear as legitimate to the server. +

    + +

    + A common countermeasure for CSRF is to generate a unique token to be + included in the HTML sent from the server to a user. This token can be + used as a hidden field to be sent back with requests to the server, where + the server can then check that the token is valid and associated with the + relevant user session. +

    +
    + + +

    + In the Rails web framework, CSRF protection is enabled by the adding a call to + the protect_from_forgery method inside an + ActionController class. Typically this is done in the + ApplicationController class, or an equivalent class from which + other controller classes are subclassed. + + The default behaviour of this method is to null the session when an invalid + CSRF token is provided. This may not be sufficient to avoid a CSRF + vulnerability - for example if parts of the session are memoized. Calling + protect_from_forgery with: :exception can help to avoid this + by raising an exception on an invalid CSRF token instead. +

    +
    + + +

    + The following example shows a case where CSRF protection is enabled with + a secure request handling strategy of :exception. +

    + + + +
    + + +
  • Wikipedia: Cross-site request forgery
  • +
  • OWASP: Cross-site request forgery
  • +
  • Securing Rails Applications: Cross-Site Request Forgery (CSRF)
  • +
  • Veracode: When Rails' protect_from_forgery Fails.
  • +
    + +
    diff --git a/ruby/ql/src/queries/security/cwe-352/CSRFProtectionNotEnabled.ql b/ruby/ql/src/queries/security/cwe-352/CSRFProtectionNotEnabled.ql new file mode 100644 index 00000000000..bef764a6104 --- /dev/null +++ b/ruby/ql/src/queries/security/cwe-352/CSRFProtectionNotEnabled.ql @@ -0,0 +1,68 @@ +/** + * @name CSRF protection not enabled + * @description Not enabling CSRF protection may make the application + * vulnerable to a Cross-Site Request Forgery (CSRF) attack. + * @kind problem + * @problem.severity warning + * @security-severity 8.8 + * @precision high + * @id rb/csrf-protection-not-enabled + * @tags security + * external/cwe/cwe-352 + */ + +import codeql.ruby.AST +import codeql.ruby.Concepts +import codeql.ruby.frameworks.ActionController +import codeql.ruby.frameworks.Gemfile +import codeql.ruby.DataFlow + +/** + * Holds if a call to `protect_from_forgery` is made in the controller class `definedIn`, + * which is inherited by the controller class `child`. These classes may be the same. + */ +private predicate protectFromForgeryCall( + ActionControllerClass definedIn, ActionControllerClass child, + ActionController::ProtectFromForgeryCall call +) { + definedIn.getSelf().flowsTo(call.getReceiver()) and child = definedIn.getADescendent() +} + +/** + * Holds if the Gemfile for this application specifies a version of "rails" or "actionpack" < 5.2. + * Rails versions prior to 5.2 do not enable CSRF protection by default. + */ +private predicate railsPreVersion5_2() { + exists(Gemfile::Gem g | + g.getName() = ["rails", "actionpack"] and g.getAVersionConstraint().before("5.2") + ) +} + +private float getRailsConfigDefaultVersion() { + exists(DataFlow::CallNode config, DataFlow::CallNode loadDefaultsCall | + DataFlow::getConstant("Rails") + .getConstant("Application") + .getADescendentModule() + .getAnImmediateReference() + .flowsTo(config.getReceiver()) and + config.getMethodName() = "config" and + loadDefaultsCall.getReceiver() = config and + loadDefaultsCall.getMethodName() = "load_defaults" and + result = loadDefaultsCall.getArgument(0).getConstantValue().getFloat() + ) +} + +from ActionControllerClass c +where + not protectFromForgeryCall(_, c, _) and + ( + // Rails versions prior to 5.2 require CSRF protection to be explicitly enabled. + railsPreVersion5_2() + or + // For Rails >= 5.2, CSRF protection is enabled by default if there is a `load_defaults` call in the root application class + // which specifies a version >= 5.2. + not getRailsConfigDefaultVersion() >= 5.2 + ) and + // Only generate alerts for the topmost controller in the tree. + not exists(ActionControllerClass parent | c = parent.getAnImmediateDescendent()) +select c, "Potential CSRF vulnerability due to forgery protection not being enabled." diff --git a/ruby/ql/src/queries/security/cwe-352/examples/ProtectFromForgeryGood.rb b/ruby/ql/src/queries/security/cwe-352/examples/ProtectFromForgeryGood.rb new file mode 100644 index 00000000000..ecab2c8ea45 --- /dev/null +++ b/ruby/ql/src/queries/security/cwe-352/examples/ProtectFromForgeryGood.rb @@ -0,0 +1,4 @@ +class ApplicationController < ActionController::Base + protect_from_forgery with: :exception +end + \ No newline at end of file diff --git a/ruby/ql/src/queries/summary/LinesOfCode.ql b/ruby/ql/src/queries/summary/LinesOfCode.ql index 74994d77347..f90cf34d046 100644 --- a/ruby/ql/src/queries/summary/LinesOfCode.ql +++ b/ruby/ql/src/queries/summary/LinesOfCode.ql @@ -8,6 +8,7 @@ * @kind metric * @tags summary * lines-of-code + * debug */ import codeql.ruby.AST diff --git a/ruby/ql/src/queries/summary/LinesOfUserCode.ql b/ruby/ql/src/queries/summary/LinesOfUserCode.ql index d8025088ceb..91471c417ee 100644 --- a/ruby/ql/src/queries/summary/LinesOfUserCode.ql +++ b/ruby/ql/src/queries/summary/LinesOfUserCode.ql @@ -6,6 +6,7 @@ * query counts the lines of code, excluding whitespace or comments. * @kind metric * @tags summary + * debug */ import codeql.ruby.AST diff --git a/ruby/ql/test/library-tests/controlflow/graph/Cfg.expected b/ruby/ql/test/library-tests/controlflow/graph/Cfg.expected index e3b0e01adfe..dfb5c8dfee4 100644 --- a/ruby/ql/test/library-tests/controlflow/graph/Cfg.expected +++ b/ruby/ql/test/library-tests/controlflow/graph/Cfg.expected @@ -2397,18 +2397,9 @@ cfg.rb: # 90| ... #-----| -> $global -# 90| ... = ... -#-----| -> if ... - # 90| ... = ... #-----| -> x -# 90| [false] ! ... -#-----| false -> if ... - -# 90| [true] ! ... -#-----| true -> x - # 90| __synth__0__1 #-----| -> x @@ -2418,10 +2409,6 @@ cfg.rb: # 90| call to each #-----| -> ... -# 90| defined? ... -#-----| false -> [true] ! ... -#-----| true -> [false] ! ... - # 90| enter { ... } #-----| -> __synth__0__1 @@ -2430,6 +2417,22 @@ cfg.rb: # 90| exit { ... } (normal) #-----| -> exit { ... } +# 90| { ... } +#-----| -> call to each + +# 90| ... = ... +#-----| -> if ... + +# 90| [false] ! ... +#-----| false -> if ... + +# 90| [true] ! ... +#-----| true -> x + +# 90| defined? ... +#-----| false -> [true] ! ... +#-----| true -> [false] ! ... + # 90| if ... #-----| -> Array @@ -2442,9 +2445,6 @@ cfg.rb: # 90| x #-----| -> defined? ... -# 90| { ... } -#-----| -> call to each - # 90| x #-----| -> __synth__0__1 @@ -6915,7 +6915,7 @@ raise.rb: #-----| -> exit m # 167| m -#-----| -> exit raise.rb (normal) +#-----| -> m16 # 167| self #-----| -> m @@ -6928,3 +6928,68 @@ raise.rb: # 168| "" #-----| -> call to raise + +# 172| enter m16 +#-----| -> b1 + +# 172| exit m16 + +# 172| exit m16 (abnormal) +#-----| -> exit m16 + +# 172| exit m16 (normal) +#-----| -> exit m16 + +# 172| m16 +#-----| -> exit raise.rb (normal) + +# 172| b1 +#-----| -> b2 + +# 172| b2 +#-----| -> b1 + +# 174| b1 +#-----| true -> [true] ... || ... +#-----| false -> b2 + +# 174| [false] ... || ... +#-----| false -> 2 +#-----| raise -> ExceptionA + +# 174| [true] ... || ... +#-----| true -> 1 +#-----| raise -> ExceptionA + +# 174| b2 +#-----| -> true + +# 174| ... == ... +#-----| false -> [false] ... || ... +#-----| true -> [true] ... || ... +#-----| raise -> ExceptionA + +# 174| true +#-----| -> ... == ... + +# 175| return +#-----| return -> exit m16 (normal) + +# 175| 1 +#-----| -> return + +# 177| return +#-----| return -> exit m16 (normal) + +# 177| 2 +#-----| -> return + +# 179| ExceptionA +#-----| raise -> exit m16 (abnormal) +#-----| match -> 3 + +# 180| return +#-----| return -> exit m16 (normal) + +# 180| 3 +#-----| -> return diff --git a/ruby/ql/test/library-tests/controlflow/graph/Nodes.expected b/ruby/ql/test/library-tests/controlflow/graph/Nodes.expected index f7bc8a1b1e7..2bc683f894e 100644 --- a/ruby/ql/test/library-tests/controlflow/graph/Nodes.expected +++ b/ruby/ql/test/library-tests/controlflow/graph/Nodes.expected @@ -367,6 +367,9 @@ positionalArguments | raise.rb:160:5:162:7 | call to bar | raise.rb:160:9:162:7 | -> { ... } | | raise.rb:161:7:161:14 | call to raise | raise.rb:161:13:161:14 | "" | | raise.rb:168:5:168:12 | call to raise | raise.rb:168:11:168:12 | "" | +| raise.rb:174:8:174:23 | [false] ... \|\| ... | raise.rb:174:14:174:23 | ... == ... | +| raise.rb:174:8:174:23 | [true] ... \|\| ... | raise.rb:174:14:174:23 | ... == ... | +| raise.rb:174:14:174:23 | ... == ... | raise.rb:174:20:174:23 | true | keywordArguments | cfg.html.erb:6:9:6:58 | call to stylesheet_link_tag | media | cfg.html.erb:6:54:6:58 | "all" | | cfg.html.erb:12:11:12:33 | call to link_to | id | cfg.html.erb:12:31:12:33 | "a" | diff --git a/ruby/ql/test/library-tests/controlflow/graph/ifs.rb b/ruby/ql/test/library-tests/controlflow/graph/ifs.rb index 0e66c0da8cb..f081095051f 100644 --- a/ruby/ql/test/library-tests/controlflow/graph/ifs.rb +++ b/ruby/ql/test/library-tests/controlflow/graph/ifs.rb @@ -55,4 +55,4 @@ def disjunct (b1, b2) if (b1 || b2) then puts "b1 or b2" end -end \ No newline at end of file +end diff --git a/ruby/ql/test/library-tests/controlflow/graph/raise.rb b/ruby/ql/test/library-tests/controlflow/graph/raise.rb index e5f0c0e50f5..3caf234ab14 100644 --- a/ruby/ql/test/library-tests/controlflow/graph/raise.rb +++ b/ruby/ql/test/library-tests/controlflow/graph/raise.rb @@ -168,3 +168,15 @@ class C raise "" end end + +def m16(b1, b2) + begin + if b1 || b2 == true + return 1 + else + return 2 + end + rescue ExceptionA + return 3 + end +end diff --git a/ruby/ql/test/library-tests/dataflow/barrier-guards/barrier-flow.expected b/ruby/ql/test/library-tests/dataflow/barrier-guards/barrier-flow.expected new file mode 100644 index 00000000000..4a1732c3612 --- /dev/null +++ b/ruby/ql/test/library-tests/dataflow/barrier-guards/barrier-flow.expected @@ -0,0 +1,23 @@ +testFailures +edges +| barrier_flow.rb:2:5:2:5 | x | barrier_flow.rb:4:10:4:10 | x | provenance | | +| barrier_flow.rb:2:9:2:17 | call to source | barrier_flow.rb:2:5:2:5 | x | provenance | | +| barrier_flow.rb:8:5:8:5 | x | barrier_flow.rb:11:14:11:14 | x | provenance | | +| barrier_flow.rb:8:9:8:17 | call to source | barrier_flow.rb:8:5:8:5 | x | provenance | | +| barrier_flow.rb:24:5:24:5 | x | barrier_flow.rb:26:10:26:10 | x | provenance | | +| barrier_flow.rb:24:9:24:17 | call to source | barrier_flow.rb:24:5:24:5 | x | provenance | | +nodes +| barrier_flow.rb:2:5:2:5 | x | semmle.label | x | +| barrier_flow.rb:2:9:2:17 | call to source | semmle.label | call to source | +| barrier_flow.rb:4:10:4:10 | x | semmle.label | x | +| barrier_flow.rb:8:5:8:5 | x | semmle.label | x | +| barrier_flow.rb:8:9:8:17 | call to source | semmle.label | call to source | +| barrier_flow.rb:11:14:11:14 | x | semmle.label | x | +| barrier_flow.rb:24:5:24:5 | x | semmle.label | x | +| barrier_flow.rb:24:9:24:17 | call to source | semmle.label | call to source | +| barrier_flow.rb:26:10:26:10 | x | semmle.label | x | +subpaths +#select +| barrier_flow.rb:4:10:4:10 | x | barrier_flow.rb:2:9:2:17 | call to source | barrier_flow.rb:4:10:4:10 | x | $@ | barrier_flow.rb:2:9:2:17 | call to source | call to source | +| barrier_flow.rb:11:14:11:14 | x | barrier_flow.rb:8:9:8:17 | call to source | barrier_flow.rb:11:14:11:14 | x | $@ | barrier_flow.rb:8:9:8:17 | call to source | call to source | +| barrier_flow.rb:26:10:26:10 | x | barrier_flow.rb:24:9:24:17 | call to source | barrier_flow.rb:26:10:26:10 | x | $@ | barrier_flow.rb:24:9:24:17 | call to source | call to source | diff --git a/ruby/ql/test/library-tests/dataflow/barrier-guards/barrier-flow.ql b/ruby/ql/test/library-tests/dataflow/barrier-guards/barrier-flow.ql new file mode 100644 index 00000000000..55bc8c9e529 --- /dev/null +++ b/ruby/ql/test/library-tests/dataflow/barrier-guards/barrier-flow.ql @@ -0,0 +1,23 @@ +/** + * @kind path-problem + */ + +import codeql.ruby.AST +import codeql.ruby.CFG +import TestUtilities.InlineFlowTest +import codeql.ruby.dataflow.BarrierGuards +import PathGraph + +module FlowConfig implements DataFlow::ConfigSig { + predicate isSource = DefaultFlowConfig::isSource/1; + + predicate isSink = DefaultFlowConfig::isSink/1; + + predicate isBarrier(DataFlow::Node n) { n instanceof StringConstCompareBarrier } +} + +import ValueFlowTest + +from PathNode source, PathNode sink +where flowPath(source, sink) +select sink, source, sink, "$@", source, source.toString() diff --git a/ruby/ql/test/library-tests/dataflow/barrier-guards/barrier-guards.expected b/ruby/ql/test/library-tests/dataflow/barrier-guards/barrier-guards.expected index 798f7c3e3a3..21d697c86e9 100644 --- a/ruby/ql/test/library-tests/dataflow/barrier-guards/barrier-guards.expected +++ b/ruby/ql/test/library-tests/dataflow/barrier-guards/barrier-guards.expected @@ -1,6 +1,7 @@ testFailures failures newStyleBarrierGuards +| barrier-guards.rb:3:16:4:19 | [input] SSA phi read(foo) | | barrier-guards.rb:4:5:4:7 | foo | | barrier-guards.rb:10:5:10:7 | foo | | barrier-guards.rb:18:5:18:7 | foo | @@ -8,6 +9,7 @@ newStyleBarrierGuards | barrier-guards.rb:28:5:28:7 | foo | | barrier-guards.rb:38:5:38:7 | foo | | barrier-guards.rb:45:9:45:11 | foo | +| barrier-guards.rb:70:22:71:19 | [input] SSA phi read(foo) | | barrier-guards.rb:71:5:71:7 | foo | | barrier-guards.rb:83:5:83:7 | foo | | barrier-guards.rb:91:5:91:7 | foo | @@ -36,6 +38,14 @@ newStyleBarrierGuards | barrier-guards.rb:276:5:276:7 | foo | | barrier-guards.rb:282:5:282:7 | foo | | barrier-guards.rb:292:5:292:7 | foo | +| barrier_flow.rb:19:14:19:14 | x | +| barrier_flow.rb:32:10:32:10 | x | +| barrier_flow.rb:38:8:38:18 | [input] phi | +| barrier_flow.rb:48:23:48:33 | [input] phi | +| barrier_flow.rb:56:10:57:34 | [input] SSA phi read(x) | +| barrier_flow.rb:58:5:59:34 | [input] SSA phi read(x) | +| barrier_flow.rb:68:10:71:11 | [input] SSA phi read(x) | +| barrier_flow.rb:72:5:75:11 | [input] SSA phi read(x) | controls | barrier-guards.rb:3:4:3:15 | ... == ... | barrier-guards.rb:4:5:4:7 | foo | true | | barrier-guards.rb:3:4:3:15 | ... == ... | barrier-guards.rb:6:5:6:7 | foo | false | @@ -331,3 +341,29 @@ controls | barrier-guards.rb:291:6:291:6 | g | barrier-guards.rb:291:1:292:19 | [no-match] when ... | no-match | | barrier-guards.rb:291:6:291:6 | g | barrier-guards.rb:292:5:292:7 | foo | match | | barrier-guards.rb:291:6:291:6 | g | barrier-guards.rb:294:5:294:7 | foo | no-match | +| barrier_flow.rb:10:8:10:18 | ... != ... | barrier_flow.rb:11:9:11:14 | self | true | +| barrier_flow.rb:18:8:18:18 | ... == ... | barrier_flow.rb:19:9:19:14 | self | true | +| barrier_flow.rb:26:19:26:29 | ... == ... | barrier_flow.rb:26:5:26:10 | self | false | +| barrier_flow.rb:32:19:32:29 | ... != ... | barrier_flow.rb:32:5:32:10 | self | false | +| barrier_flow.rb:38:8:38:18 | ... != ... | barrier_flow.rb:39:9:39:9 | x | true | +| barrier_flow.rb:48:23:48:33 | ... == ... | barrier_flow.rb:48:5:48:5 | x | false | +| barrier_flow.rb:56:8:56:8 | b | barrier_flow.rb:57:9:57:14 | return | true | +| barrier_flow.rb:56:8:56:8 | b | barrier_flow.rb:57:9:57:34 | ... unless ... | true | +| barrier_flow.rb:56:8:56:8 | b | barrier_flow.rb:57:23:57:23 | x | true | +| barrier_flow.rb:56:8:56:8 | b | barrier_flow.rb:59:9:59:14 | return | false | +| barrier_flow.rb:56:8:56:8 | b | barrier_flow.rb:59:9:59:34 | ... unless ... | false | +| barrier_flow.rb:56:8:56:8 | b | barrier_flow.rb:59:23:59:23 | x | false | +| barrier_flow.rb:57:23:57:34 | ... == ... | barrier_flow.rb:57:9:57:14 | return | false | +| barrier_flow.rb:57:23:57:34 | ... == ... | barrier_flow.rb:57:9:57:34 | ... unless ... | true | +| barrier_flow.rb:59:23:59:34 | ... == ... | barrier_flow.rb:59:9:59:14 | return | false | +| barrier_flow.rb:59:23:59:34 | ... == ... | barrier_flow.rb:59:9:59:34 | ... unless ... | true | +| barrier_flow.rb:68:8:68:8 | b | barrier_flow.rb:69:9:71:11 | if ... | true | +| barrier_flow.rb:68:8:68:8 | b | barrier_flow.rb:69:12:69:12 | x | true | +| barrier_flow.rb:68:8:68:8 | b | barrier_flow.rb:70:13:70:18 | return | true | +| barrier_flow.rb:68:8:68:8 | b | barrier_flow.rb:73:9:75:11 | if ... | false | +| barrier_flow.rb:68:8:68:8 | b | barrier_flow.rb:73:12:73:12 | x | false | +| barrier_flow.rb:68:8:68:8 | b | barrier_flow.rb:74:13:74:18 | return | false | +| barrier_flow.rb:69:12:69:23 | ... != ... | barrier_flow.rb:69:9:71:11 | if ... | false | +| barrier_flow.rb:69:12:69:23 | ... != ... | barrier_flow.rb:70:13:70:18 | return | true | +| barrier_flow.rb:73:12:73:23 | ... != ... | barrier_flow.rb:73:9:75:11 | if ... | false | +| barrier_flow.rb:73:12:73:23 | ... != ... | barrier_flow.rb:74:13:74:18 | return | true | diff --git a/ruby/ql/test/library-tests/dataflow/barrier-guards/barrier-guards.ql b/ruby/ql/test/library-tests/dataflow/barrier-guards/barrier-guards.ql index f872dd89aee..4bcb358acfd 100644 --- a/ruby/ql/test/library-tests/dataflow/barrier-guards/barrier-guards.ql +++ b/ruby/ql/test/library-tests/dataflow/barrier-guards/barrier-guards.ql @@ -1,3 +1,4 @@ +import codeql.ruby.dataflow.internal.DataFlowPrivate import codeql.ruby.dataflow.internal.DataFlowPublic import codeql.ruby.dataflow.BarrierGuards import codeql.ruby.controlflow.CfgNodes @@ -25,6 +26,7 @@ module BarrierGuardTest implements TestSig { tag = "guarded" and exists(DataFlow::Node n | newStyleBarrierGuards(n) and + not n instanceof SsaInputNode and location = n.getLocation() and element = n.toString() and value = "" diff --git a/ruby/ql/test/library-tests/dataflow/barrier-guards/barrier_flow.rb b/ruby/ql/test/library-tests/dataflow/barrier-guards/barrier_flow.rb new file mode 100644 index 00000000000..d4c2d49eb36 --- /dev/null +++ b/ruby/ql/test/library-tests/dataflow/barrier-guards/barrier_flow.rb @@ -0,0 +1,79 @@ +def m1 + x = source(1) + + sink x # $ hasValueFlow=1 +end + +def m2 + x = source(2) + + if x != "safe" then + sink x # $ hasValueFlow=2 + end +end + +def m3 + x = source(3) + + if x == "safe" then + sink x # $ guarded + end +end + +def m4 + x = source(4) + + sink x unless x == "safe" # $ hasValueFlow=4 +end + +def m5 + x = source(5) + + sink x unless x != "safe" # $ guarded +end + +def m6 + x = source(6) + + if x != "safe" then + x = "safe" + end + + sink x +end + +def m7 + x = source(7) + + x = "safe" unless x == "safe" + + sink x +end + +def m8(b) + x = source(8) + + if b then + return unless x == "safe1" + else + return unless x == "safe2" + end + + sink x +end + +def m9(b) + x = source(9) + + if b then + if x != "safe1" then + return + end + else + if x != "safe2" then + return + end + end + + sink x +end diff --git a/ruby/ql/test/library-tests/dataflow/hash-flow/hash-flow.expected b/ruby/ql/test/library-tests/dataflow/hash-flow/hash-flow.expected index d2da8837a56..68cb5a53dc2 100644 --- a/ruby/ql/test/library-tests/dataflow/hash-flow/hash-flow.expected +++ b/ruby/ql/test/library-tests/dataflow/hash-flow/hash-flow.expected @@ -1089,6 +1089,13 @@ edges | hash_flow.rb:994:30:994:40 | call to taint | hash_flow.rb:994:14:994:47 | ...[...] [element :b] | provenance | | | hash_flow.rb:996:14:996:15 | h2 [element :b] | hash_flow.rb:996:14:996:19 | ...[...] | provenance | | | hash_flow.rb:998:14:998:15 | h2 [element :b] | hash_flow.rb:998:14:998:18 | ...[...] | provenance | | +| hash_flow.rb:1011:5:1011:5 | h [element :a] | hash_flow.rb:1012:5:1012:5 | h [element :a] | provenance | | +| hash_flow.rb:1011:9:1011:45 | call to [] [element :a] | hash_flow.rb:1011:5:1011:5 | h [element :a] | provenance | | +| hash_flow.rb:1011:14:1011:24 | call to taint | hash_flow.rb:1011:9:1011:45 | call to [] [element :a] | provenance | | +| hash_flow.rb:1012:5:1012:5 | h [element :a] | hash_flow.rb:1012:15:1012:15 | k | provenance | | +| hash_flow.rb:1012:5:1012:5 | h [element :a] | hash_flow.rb:1012:18:1012:18 | v | provenance | | +| hash_flow.rb:1012:15:1012:15 | k | hash_flow.rb:1014:14:1014:14 | k | provenance | | +| hash_flow.rb:1012:18:1012:18 | v | hash_flow.rb:1013:14:1013:14 | v | provenance | | nodes | hash_flow.rb:10:5:10:8 | hash [element 0] | semmle.label | hash [element 0] | | hash_flow.rb:10:5:10:8 | hash [element :a] | semmle.label | hash [element :a] | @@ -2251,6 +2258,14 @@ nodes | hash_flow.rb:996:14:996:19 | ...[...] | semmle.label | ...[...] | | hash_flow.rb:998:14:998:15 | h2 [element :b] | semmle.label | h2 [element :b] | | hash_flow.rb:998:14:998:18 | ...[...] | semmle.label | ...[...] | +| hash_flow.rb:1011:5:1011:5 | h [element :a] | semmle.label | h [element :a] | +| hash_flow.rb:1011:9:1011:45 | call to [] [element :a] | semmle.label | call to [] [element :a] | +| hash_flow.rb:1011:14:1011:24 | call to taint | semmle.label | call to taint | +| hash_flow.rb:1012:5:1012:5 | h [element :a] | semmle.label | h [element :a] | +| hash_flow.rb:1012:15:1012:15 | k | semmle.label | k | +| hash_flow.rb:1012:18:1012:18 | v | semmle.label | v | +| hash_flow.rb:1013:14:1013:14 | v | semmle.label | v | +| hash_flow.rb:1014:14:1014:14 | k | semmle.label | k | subpaths hashLiteral | hash_flow.rb:10:12:21:5 | call to [] | @@ -2324,6 +2339,7 @@ hashLiteral | hash_flow.rb:946:13:950:5 | call to [] | | hash_flow.rb:971:9:971:38 | ...[...] | | hash_flow.rb:994:14:994:47 | ...[...] | +| hash_flow.rb:1011:9:1011:45 | call to [] | #select | hash_flow.rb:22:10:22:17 | ...[...] | hash_flow.rb:11:15:11:24 | call to taint | hash_flow.rb:22:10:22:17 | ...[...] | $@ | hash_flow.rb:11:15:11:24 | call to taint | call to taint | | hash_flow.rb:24:10:24:17 | ...[...] | hash_flow.rb:13:12:13:21 | call to taint | hash_flow.rb:24:10:24:17 | ...[...] | $@ | hash_flow.rb:13:12:13:21 | call to taint | call to taint | @@ -2569,3 +2585,5 @@ hashLiteral | hash_flow.rb:975:10:975:13 | ...[...] | hash_flow.rb:971:23:971:31 | call to taint | hash_flow.rb:975:10:975:13 | ...[...] | $@ | hash_flow.rb:971:23:971:31 | call to taint | call to taint | | hash_flow.rb:996:14:996:19 | ...[...] | hash_flow.rb:994:30:994:40 | call to taint | hash_flow.rb:996:14:996:19 | ...[...] | $@ | hash_flow.rb:994:30:994:40 | call to taint | call to taint | | hash_flow.rb:998:14:998:18 | ...[...] | hash_flow.rb:994:30:994:40 | call to taint | hash_flow.rb:998:14:998:18 | ...[...] | $@ | hash_flow.rb:994:30:994:40 | call to taint | call to taint | +| hash_flow.rb:1013:14:1013:14 | v | hash_flow.rb:1011:14:1011:24 | call to taint | hash_flow.rb:1013:14:1013:14 | v | $@ | hash_flow.rb:1011:14:1011:24 | call to taint | call to taint | +| hash_flow.rb:1014:14:1014:14 | k | hash_flow.rb:1011:14:1011:24 | call to taint | hash_flow.rb:1014:14:1014:14 | k | $@ | hash_flow.rb:1011:14:1011:24 | call to taint | call to taint | diff --git a/ruby/ql/test/library-tests/dataflow/hash-flow/hash-flow.ql b/ruby/ql/test/library-tests/dataflow/hash-flow/hash-flow.ql index e3b694d3e75..5ec8ec0a0d6 100644 --- a/ruby/ql/test/library-tests/dataflow/hash-flow/hash-flow.ql +++ b/ruby/ql/test/library-tests/dataflow/hash-flow/hash-flow.ql @@ -5,7 +5,7 @@ import codeql.ruby.AST import codeql.ruby.CFG import TestUtilities.InlineFlowTest -import ValueFlowTest +import DefaultFlowTest import ValueFlow::PathGraph query predicate hashLiteral(CfgNodes::ExprNodes::HashLiteralCfgNode n) { any() } diff --git a/ruby/ql/test/library-tests/dataflow/hash-flow/hash_flow.rb b/ruby/ql/test/library-tests/dataflow/hash-flow/hash_flow.rb index 14c2504f959..edc1e325b09 100644 --- a/ruby/ql/test/library-tests/dataflow/hash-flow/hash_flow.rb +++ b/ruby/ql/test/library-tests/dataflow/hash-flow/hash_flow.rb @@ -59,7 +59,7 @@ def m3() x = {a: taint(3.2), b: 1} hash2 = Hash[x] sink(hash2[:a]) # $ hasValueFlow=3.2 - sink(hash2[:b]) + sink(hash2[:b]) # $ hasTaintFlow=3.2 hash3 = Hash[[[:a, taint(3.3)], [:b, 1]]] sink(hash3[:a]) # $ hasValueFlow=3.3 @@ -75,7 +75,7 @@ def m3() hash6 = Hash[{"a" => taint(3.6), "b" => 1}] sink(hash6["a"]) # $ hasValueFlow=3.6 - sink(hash6["b"]) + sink(hash6["b"]) # $ hasTaintFlow=3.6 end m3() @@ -1000,3 +1000,17 @@ class M54 end M54.new.m54(:b) + +def m55 + h = taint(55.1) + keys = h.keys + sink(keys[f()]) # $ hasTaintFlow=55.1 +end + +def m56 + h = { a: taint(56.1), taint(56.2) => :b } + h.map do |k, v| + sink(v) # $ hasValueFlow=56.1 + sink(k) # $ MISSING: hasValueFlow=56.2 SPURIOUS: hasValueFlow=56.1 + end +end diff --git a/ruby/ql/test/library-tests/dataflow/local/DataflowStep.expected b/ruby/ql/test/library-tests/dataflow/local/DataflowStep.expected index 1f773f7d1a4..904e48d397c 100644 --- a/ruby/ql/test/library-tests/dataflow/local/DataflowStep.expected +++ b/ruby/ql/test/library-tests/dataflow/local/DataflowStep.expected @@ -1,6 +1,6 @@ | UseUseExplosion.rb:18:5:22:7 | self (m) | UseUseExplosion.rb:20:13:20:17 | self | | UseUseExplosion.rb:18:5:22:7 | self in m | UseUseExplosion.rb:18:5:22:7 | self (m) | -| UseUseExplosion.rb:19:9:19:9 | x | UseUseExplosion.rb:20:2081:20:2116 | SSA phi read(x) | +| UseUseExplosion.rb:19:9:19:9 | x | UseUseExplosion.rb:20:2096:20:2099 | [input] SSA phi read(x) | | UseUseExplosion.rb:19:9:19:9 | x | UseUseExplosion.rb:20:2111:20:2111 | x | | UseUseExplosion.rb:19:9:19:9 | x | UseUseExplosion.rb:20:2127:20:2127 | x | | UseUseExplosion.rb:19:9:19:9 | x | UseUseExplosion.rb:20:2143:20:2143 | x | @@ -210,9 +210,11 @@ | UseUseExplosion.rb:20:13:20:17 | self | UseUseExplosion.rb:20:3691:20:3696 | self | | UseUseExplosion.rb:20:13:20:23 | ... > ... | UseUseExplosion.rb:20:12:20:24 | [false] ( ... ) | | UseUseExplosion.rb:20:13:20:23 | ... > ... | UseUseExplosion.rb:20:12:20:24 | [true] ( ... ) | +| UseUseExplosion.rb:20:26:20:3684 | [input] SSA phi read(self) | UseUseExplosion.rb:20:9:20:3700 | SSA phi read(self) | +| UseUseExplosion.rb:20:26:20:3684 | [input] SSA phi read(x) | UseUseExplosion.rb:20:9:20:3700 | SSA phi read(x) | | UseUseExplosion.rb:20:26:20:3684 | then ... | UseUseExplosion.rb:20:9:20:3700 | if ... | -| UseUseExplosion.rb:20:31:20:3684 | SSA phi read(self) | UseUseExplosion.rb:20:9:20:3700 | SSA phi read(self) | -| UseUseExplosion.rb:20:31:20:3684 | SSA phi read(x) | UseUseExplosion.rb:20:9:20:3700 | SSA phi read(x) | +| UseUseExplosion.rb:20:31:20:3684 | SSA phi read(self) | UseUseExplosion.rb:20:26:20:3684 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:31:20:3684 | SSA phi read(x) | UseUseExplosion.rb:20:26:20:3684 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:31:20:3684 | if ... | UseUseExplosion.rb:20:26:20:3684 | then ... | | UseUseExplosion.rb:20:35:20:39 | [post] self | UseUseExplosion.rb:20:56:20:60 | self | | UseUseExplosion.rb:20:35:20:39 | [post] self | UseUseExplosion.rb:20:3675:20:3680 | self | @@ -220,9 +222,11 @@ | UseUseExplosion.rb:20:35:20:39 | self | UseUseExplosion.rb:20:3675:20:3680 | self | | UseUseExplosion.rb:20:35:20:44 | ... > ... | UseUseExplosion.rb:20:34:20:45 | [false] ( ... ) | | UseUseExplosion.rb:20:35:20:44 | ... > ... | UseUseExplosion.rb:20:34:20:45 | [true] ( ... ) | +| UseUseExplosion.rb:20:47:20:3668 | [input] SSA phi read(self) | UseUseExplosion.rb:20:31:20:3684 | SSA phi read(self) | +| UseUseExplosion.rb:20:47:20:3668 | [input] SSA phi read(x) | UseUseExplosion.rb:20:31:20:3684 | SSA phi read(x) | | UseUseExplosion.rb:20:47:20:3668 | then ... | UseUseExplosion.rb:20:31:20:3684 | if ... | -| UseUseExplosion.rb:20:52:20:3668 | SSA phi read(self) | UseUseExplosion.rb:20:31:20:3684 | SSA phi read(self) | -| UseUseExplosion.rb:20:52:20:3668 | SSA phi read(x) | UseUseExplosion.rb:20:31:20:3684 | SSA phi read(x) | +| UseUseExplosion.rb:20:52:20:3668 | SSA phi read(self) | UseUseExplosion.rb:20:47:20:3668 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:52:20:3668 | SSA phi read(x) | UseUseExplosion.rb:20:47:20:3668 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:52:20:3668 | if ... | UseUseExplosion.rb:20:47:20:3668 | then ... | | UseUseExplosion.rb:20:56:20:60 | [post] self | UseUseExplosion.rb:20:77:20:81 | self | | UseUseExplosion.rb:20:56:20:60 | [post] self | UseUseExplosion.rb:20:3659:20:3664 | self | @@ -230,9 +234,11 @@ | UseUseExplosion.rb:20:56:20:60 | self | UseUseExplosion.rb:20:3659:20:3664 | self | | UseUseExplosion.rb:20:56:20:65 | ... > ... | UseUseExplosion.rb:20:55:20:66 | [false] ( ... ) | | UseUseExplosion.rb:20:56:20:65 | ... > ... | UseUseExplosion.rb:20:55:20:66 | [true] ( ... ) | +| UseUseExplosion.rb:20:68:20:3652 | [input] SSA phi read(self) | UseUseExplosion.rb:20:52:20:3668 | SSA phi read(self) | +| UseUseExplosion.rb:20:68:20:3652 | [input] SSA phi read(x) | UseUseExplosion.rb:20:52:20:3668 | SSA phi read(x) | | UseUseExplosion.rb:20:68:20:3652 | then ... | UseUseExplosion.rb:20:52:20:3668 | if ... | -| UseUseExplosion.rb:20:73:20:3652 | SSA phi read(self) | UseUseExplosion.rb:20:52:20:3668 | SSA phi read(self) | -| UseUseExplosion.rb:20:73:20:3652 | SSA phi read(x) | UseUseExplosion.rb:20:52:20:3668 | SSA phi read(x) | +| UseUseExplosion.rb:20:73:20:3652 | SSA phi read(self) | UseUseExplosion.rb:20:68:20:3652 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:73:20:3652 | SSA phi read(x) | UseUseExplosion.rb:20:68:20:3652 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:73:20:3652 | if ... | UseUseExplosion.rb:20:68:20:3652 | then ... | | UseUseExplosion.rb:20:77:20:81 | [post] self | UseUseExplosion.rb:20:98:20:102 | self | | UseUseExplosion.rb:20:77:20:81 | [post] self | UseUseExplosion.rb:20:3643:20:3648 | self | @@ -240,9 +246,11 @@ | UseUseExplosion.rb:20:77:20:81 | self | UseUseExplosion.rb:20:3643:20:3648 | self | | UseUseExplosion.rb:20:77:20:86 | ... > ... | UseUseExplosion.rb:20:76:20:87 | [false] ( ... ) | | UseUseExplosion.rb:20:77:20:86 | ... > ... | UseUseExplosion.rb:20:76:20:87 | [true] ( ... ) | +| UseUseExplosion.rb:20:89:20:3636 | [input] SSA phi read(self) | UseUseExplosion.rb:20:73:20:3652 | SSA phi read(self) | +| UseUseExplosion.rb:20:89:20:3636 | [input] SSA phi read(x) | UseUseExplosion.rb:20:73:20:3652 | SSA phi read(x) | | UseUseExplosion.rb:20:89:20:3636 | then ... | UseUseExplosion.rb:20:73:20:3652 | if ... | -| UseUseExplosion.rb:20:94:20:3636 | SSA phi read(self) | UseUseExplosion.rb:20:73:20:3652 | SSA phi read(self) | -| UseUseExplosion.rb:20:94:20:3636 | SSA phi read(x) | UseUseExplosion.rb:20:73:20:3652 | SSA phi read(x) | +| UseUseExplosion.rb:20:94:20:3636 | SSA phi read(self) | UseUseExplosion.rb:20:89:20:3636 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:94:20:3636 | SSA phi read(x) | UseUseExplosion.rb:20:89:20:3636 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:94:20:3636 | if ... | UseUseExplosion.rb:20:89:20:3636 | then ... | | UseUseExplosion.rb:20:98:20:102 | [post] self | UseUseExplosion.rb:20:119:20:123 | self | | UseUseExplosion.rb:20:98:20:102 | [post] self | UseUseExplosion.rb:20:3627:20:3632 | self | @@ -250,9 +258,11 @@ | UseUseExplosion.rb:20:98:20:102 | self | UseUseExplosion.rb:20:3627:20:3632 | self | | UseUseExplosion.rb:20:98:20:107 | ... > ... | UseUseExplosion.rb:20:97:20:108 | [false] ( ... ) | | UseUseExplosion.rb:20:98:20:107 | ... > ... | UseUseExplosion.rb:20:97:20:108 | [true] ( ... ) | +| UseUseExplosion.rb:20:110:20:3620 | [input] SSA phi read(self) | UseUseExplosion.rb:20:94:20:3636 | SSA phi read(self) | +| UseUseExplosion.rb:20:110:20:3620 | [input] SSA phi read(x) | UseUseExplosion.rb:20:94:20:3636 | SSA phi read(x) | | UseUseExplosion.rb:20:110:20:3620 | then ... | UseUseExplosion.rb:20:94:20:3636 | if ... | -| UseUseExplosion.rb:20:115:20:3620 | SSA phi read(self) | UseUseExplosion.rb:20:94:20:3636 | SSA phi read(self) | -| UseUseExplosion.rb:20:115:20:3620 | SSA phi read(x) | UseUseExplosion.rb:20:94:20:3636 | SSA phi read(x) | +| UseUseExplosion.rb:20:115:20:3620 | SSA phi read(self) | UseUseExplosion.rb:20:110:20:3620 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:115:20:3620 | SSA phi read(x) | UseUseExplosion.rb:20:110:20:3620 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:115:20:3620 | if ... | UseUseExplosion.rb:20:110:20:3620 | then ... | | UseUseExplosion.rb:20:119:20:123 | [post] self | UseUseExplosion.rb:20:140:20:144 | self | | UseUseExplosion.rb:20:119:20:123 | [post] self | UseUseExplosion.rb:20:3611:20:3616 | self | @@ -260,9 +270,11 @@ | UseUseExplosion.rb:20:119:20:123 | self | UseUseExplosion.rb:20:3611:20:3616 | self | | UseUseExplosion.rb:20:119:20:128 | ... > ... | UseUseExplosion.rb:20:118:20:129 | [false] ( ... ) | | UseUseExplosion.rb:20:119:20:128 | ... > ... | UseUseExplosion.rb:20:118:20:129 | [true] ( ... ) | +| UseUseExplosion.rb:20:131:20:3604 | [input] SSA phi read(self) | UseUseExplosion.rb:20:115:20:3620 | SSA phi read(self) | +| UseUseExplosion.rb:20:131:20:3604 | [input] SSA phi read(x) | UseUseExplosion.rb:20:115:20:3620 | SSA phi read(x) | | UseUseExplosion.rb:20:131:20:3604 | then ... | UseUseExplosion.rb:20:115:20:3620 | if ... | -| UseUseExplosion.rb:20:136:20:3604 | SSA phi read(self) | UseUseExplosion.rb:20:115:20:3620 | SSA phi read(self) | -| UseUseExplosion.rb:20:136:20:3604 | SSA phi read(x) | UseUseExplosion.rb:20:115:20:3620 | SSA phi read(x) | +| UseUseExplosion.rb:20:136:20:3604 | SSA phi read(self) | UseUseExplosion.rb:20:131:20:3604 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:136:20:3604 | SSA phi read(x) | UseUseExplosion.rb:20:131:20:3604 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:136:20:3604 | if ... | UseUseExplosion.rb:20:131:20:3604 | then ... | | UseUseExplosion.rb:20:140:20:144 | [post] self | UseUseExplosion.rb:20:161:20:165 | self | | UseUseExplosion.rb:20:140:20:144 | [post] self | UseUseExplosion.rb:20:3595:20:3600 | self | @@ -270,9 +282,11 @@ | UseUseExplosion.rb:20:140:20:144 | self | UseUseExplosion.rb:20:3595:20:3600 | self | | UseUseExplosion.rb:20:140:20:149 | ... > ... | UseUseExplosion.rb:20:139:20:150 | [false] ( ... ) | | UseUseExplosion.rb:20:140:20:149 | ... > ... | UseUseExplosion.rb:20:139:20:150 | [true] ( ... ) | +| UseUseExplosion.rb:20:152:20:3588 | [input] SSA phi read(self) | UseUseExplosion.rb:20:136:20:3604 | SSA phi read(self) | +| UseUseExplosion.rb:20:152:20:3588 | [input] SSA phi read(x) | UseUseExplosion.rb:20:136:20:3604 | SSA phi read(x) | | UseUseExplosion.rb:20:152:20:3588 | then ... | UseUseExplosion.rb:20:136:20:3604 | if ... | -| UseUseExplosion.rb:20:157:20:3588 | SSA phi read(self) | UseUseExplosion.rb:20:136:20:3604 | SSA phi read(self) | -| UseUseExplosion.rb:20:157:20:3588 | SSA phi read(x) | UseUseExplosion.rb:20:136:20:3604 | SSA phi read(x) | +| UseUseExplosion.rb:20:157:20:3588 | SSA phi read(self) | UseUseExplosion.rb:20:152:20:3588 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:157:20:3588 | SSA phi read(x) | UseUseExplosion.rb:20:152:20:3588 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:157:20:3588 | if ... | UseUseExplosion.rb:20:152:20:3588 | then ... | | UseUseExplosion.rb:20:161:20:165 | [post] self | UseUseExplosion.rb:20:182:20:186 | self | | UseUseExplosion.rb:20:161:20:165 | [post] self | UseUseExplosion.rb:20:3579:20:3584 | self | @@ -280,9 +294,11 @@ | UseUseExplosion.rb:20:161:20:165 | self | UseUseExplosion.rb:20:3579:20:3584 | self | | UseUseExplosion.rb:20:161:20:170 | ... > ... | UseUseExplosion.rb:20:160:20:171 | [false] ( ... ) | | UseUseExplosion.rb:20:161:20:170 | ... > ... | UseUseExplosion.rb:20:160:20:171 | [true] ( ... ) | +| UseUseExplosion.rb:20:173:20:3572 | [input] SSA phi read(self) | UseUseExplosion.rb:20:157:20:3588 | SSA phi read(self) | +| UseUseExplosion.rb:20:173:20:3572 | [input] SSA phi read(x) | UseUseExplosion.rb:20:157:20:3588 | SSA phi read(x) | | UseUseExplosion.rb:20:173:20:3572 | then ... | UseUseExplosion.rb:20:157:20:3588 | if ... | -| UseUseExplosion.rb:20:178:20:3572 | SSA phi read(self) | UseUseExplosion.rb:20:157:20:3588 | SSA phi read(self) | -| UseUseExplosion.rb:20:178:20:3572 | SSA phi read(x) | UseUseExplosion.rb:20:157:20:3588 | SSA phi read(x) | +| UseUseExplosion.rb:20:178:20:3572 | SSA phi read(self) | UseUseExplosion.rb:20:173:20:3572 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:178:20:3572 | SSA phi read(x) | UseUseExplosion.rb:20:173:20:3572 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:178:20:3572 | if ... | UseUseExplosion.rb:20:173:20:3572 | then ... | | UseUseExplosion.rb:20:182:20:186 | [post] self | UseUseExplosion.rb:20:203:20:207 | self | | UseUseExplosion.rb:20:182:20:186 | [post] self | UseUseExplosion.rb:20:3563:20:3568 | self | @@ -290,9 +306,11 @@ | UseUseExplosion.rb:20:182:20:186 | self | UseUseExplosion.rb:20:3563:20:3568 | self | | UseUseExplosion.rb:20:182:20:191 | ... > ... | UseUseExplosion.rb:20:181:20:192 | [false] ( ... ) | | UseUseExplosion.rb:20:182:20:191 | ... > ... | UseUseExplosion.rb:20:181:20:192 | [true] ( ... ) | +| UseUseExplosion.rb:20:194:20:3556 | [input] SSA phi read(self) | UseUseExplosion.rb:20:178:20:3572 | SSA phi read(self) | +| UseUseExplosion.rb:20:194:20:3556 | [input] SSA phi read(x) | UseUseExplosion.rb:20:178:20:3572 | SSA phi read(x) | | UseUseExplosion.rb:20:194:20:3556 | then ... | UseUseExplosion.rb:20:178:20:3572 | if ... | -| UseUseExplosion.rb:20:199:20:3556 | SSA phi read(self) | UseUseExplosion.rb:20:178:20:3572 | SSA phi read(self) | -| UseUseExplosion.rb:20:199:20:3556 | SSA phi read(x) | UseUseExplosion.rb:20:178:20:3572 | SSA phi read(x) | +| UseUseExplosion.rb:20:199:20:3556 | SSA phi read(self) | UseUseExplosion.rb:20:194:20:3556 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:199:20:3556 | SSA phi read(x) | UseUseExplosion.rb:20:194:20:3556 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:199:20:3556 | if ... | UseUseExplosion.rb:20:194:20:3556 | then ... | | UseUseExplosion.rb:20:203:20:207 | [post] self | UseUseExplosion.rb:20:224:20:228 | self | | UseUseExplosion.rb:20:203:20:207 | [post] self | UseUseExplosion.rb:20:3547:20:3552 | self | @@ -300,9 +318,11 @@ | UseUseExplosion.rb:20:203:20:207 | self | UseUseExplosion.rb:20:3547:20:3552 | self | | UseUseExplosion.rb:20:203:20:212 | ... > ... | UseUseExplosion.rb:20:202:20:213 | [false] ( ... ) | | UseUseExplosion.rb:20:203:20:212 | ... > ... | UseUseExplosion.rb:20:202:20:213 | [true] ( ... ) | +| UseUseExplosion.rb:20:215:20:3540 | [input] SSA phi read(self) | UseUseExplosion.rb:20:199:20:3556 | SSA phi read(self) | +| UseUseExplosion.rb:20:215:20:3540 | [input] SSA phi read(x) | UseUseExplosion.rb:20:199:20:3556 | SSA phi read(x) | | UseUseExplosion.rb:20:215:20:3540 | then ... | UseUseExplosion.rb:20:199:20:3556 | if ... | -| UseUseExplosion.rb:20:220:20:3540 | SSA phi read(self) | UseUseExplosion.rb:20:199:20:3556 | SSA phi read(self) | -| UseUseExplosion.rb:20:220:20:3540 | SSA phi read(x) | UseUseExplosion.rb:20:199:20:3556 | SSA phi read(x) | +| UseUseExplosion.rb:20:220:20:3540 | SSA phi read(self) | UseUseExplosion.rb:20:215:20:3540 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:220:20:3540 | SSA phi read(x) | UseUseExplosion.rb:20:215:20:3540 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:220:20:3540 | if ... | UseUseExplosion.rb:20:215:20:3540 | then ... | | UseUseExplosion.rb:20:224:20:228 | [post] self | UseUseExplosion.rb:20:245:20:249 | self | | UseUseExplosion.rb:20:224:20:228 | [post] self | UseUseExplosion.rb:20:3531:20:3536 | self | @@ -310,9 +330,11 @@ | UseUseExplosion.rb:20:224:20:228 | self | UseUseExplosion.rb:20:3531:20:3536 | self | | UseUseExplosion.rb:20:224:20:233 | ... > ... | UseUseExplosion.rb:20:223:20:234 | [false] ( ... ) | | UseUseExplosion.rb:20:224:20:233 | ... > ... | UseUseExplosion.rb:20:223:20:234 | [true] ( ... ) | +| UseUseExplosion.rb:20:236:20:3524 | [input] SSA phi read(self) | UseUseExplosion.rb:20:220:20:3540 | SSA phi read(self) | +| UseUseExplosion.rb:20:236:20:3524 | [input] SSA phi read(x) | UseUseExplosion.rb:20:220:20:3540 | SSA phi read(x) | | UseUseExplosion.rb:20:236:20:3524 | then ... | UseUseExplosion.rb:20:220:20:3540 | if ... | -| UseUseExplosion.rb:20:241:20:3524 | SSA phi read(self) | UseUseExplosion.rb:20:220:20:3540 | SSA phi read(self) | -| UseUseExplosion.rb:20:241:20:3524 | SSA phi read(x) | UseUseExplosion.rb:20:220:20:3540 | SSA phi read(x) | +| UseUseExplosion.rb:20:241:20:3524 | SSA phi read(self) | UseUseExplosion.rb:20:236:20:3524 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:241:20:3524 | SSA phi read(x) | UseUseExplosion.rb:20:236:20:3524 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:241:20:3524 | if ... | UseUseExplosion.rb:20:236:20:3524 | then ... | | UseUseExplosion.rb:20:245:20:249 | [post] self | UseUseExplosion.rb:20:266:20:270 | self | | UseUseExplosion.rb:20:245:20:249 | [post] self | UseUseExplosion.rb:20:3515:20:3520 | self | @@ -320,9 +342,11 @@ | UseUseExplosion.rb:20:245:20:249 | self | UseUseExplosion.rb:20:3515:20:3520 | self | | UseUseExplosion.rb:20:245:20:254 | ... > ... | UseUseExplosion.rb:20:244:20:255 | [false] ( ... ) | | UseUseExplosion.rb:20:245:20:254 | ... > ... | UseUseExplosion.rb:20:244:20:255 | [true] ( ... ) | +| UseUseExplosion.rb:20:257:20:3508 | [input] SSA phi read(self) | UseUseExplosion.rb:20:241:20:3524 | SSA phi read(self) | +| UseUseExplosion.rb:20:257:20:3508 | [input] SSA phi read(x) | UseUseExplosion.rb:20:241:20:3524 | SSA phi read(x) | | UseUseExplosion.rb:20:257:20:3508 | then ... | UseUseExplosion.rb:20:241:20:3524 | if ... | -| UseUseExplosion.rb:20:262:20:3508 | SSA phi read(self) | UseUseExplosion.rb:20:241:20:3524 | SSA phi read(self) | -| UseUseExplosion.rb:20:262:20:3508 | SSA phi read(x) | UseUseExplosion.rb:20:241:20:3524 | SSA phi read(x) | +| UseUseExplosion.rb:20:262:20:3508 | SSA phi read(self) | UseUseExplosion.rb:20:257:20:3508 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:262:20:3508 | SSA phi read(x) | UseUseExplosion.rb:20:257:20:3508 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:262:20:3508 | if ... | UseUseExplosion.rb:20:257:20:3508 | then ... | | UseUseExplosion.rb:20:266:20:270 | [post] self | UseUseExplosion.rb:20:287:20:291 | self | | UseUseExplosion.rb:20:266:20:270 | [post] self | UseUseExplosion.rb:20:3499:20:3504 | self | @@ -330,9 +354,11 @@ | UseUseExplosion.rb:20:266:20:270 | self | UseUseExplosion.rb:20:3499:20:3504 | self | | UseUseExplosion.rb:20:266:20:275 | ... > ... | UseUseExplosion.rb:20:265:20:276 | [false] ( ... ) | | UseUseExplosion.rb:20:266:20:275 | ... > ... | UseUseExplosion.rb:20:265:20:276 | [true] ( ... ) | +| UseUseExplosion.rb:20:278:20:3492 | [input] SSA phi read(self) | UseUseExplosion.rb:20:262:20:3508 | SSA phi read(self) | +| UseUseExplosion.rb:20:278:20:3492 | [input] SSA phi read(x) | UseUseExplosion.rb:20:262:20:3508 | SSA phi read(x) | | UseUseExplosion.rb:20:278:20:3492 | then ... | UseUseExplosion.rb:20:262:20:3508 | if ... | -| UseUseExplosion.rb:20:283:20:3492 | SSA phi read(self) | UseUseExplosion.rb:20:262:20:3508 | SSA phi read(self) | -| UseUseExplosion.rb:20:283:20:3492 | SSA phi read(x) | UseUseExplosion.rb:20:262:20:3508 | SSA phi read(x) | +| UseUseExplosion.rb:20:283:20:3492 | SSA phi read(self) | UseUseExplosion.rb:20:278:20:3492 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:283:20:3492 | SSA phi read(x) | UseUseExplosion.rb:20:278:20:3492 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:283:20:3492 | if ... | UseUseExplosion.rb:20:278:20:3492 | then ... | | UseUseExplosion.rb:20:287:20:291 | [post] self | UseUseExplosion.rb:20:308:20:312 | self | | UseUseExplosion.rb:20:287:20:291 | [post] self | UseUseExplosion.rb:20:3483:20:3488 | self | @@ -340,9 +366,11 @@ | UseUseExplosion.rb:20:287:20:291 | self | UseUseExplosion.rb:20:3483:20:3488 | self | | UseUseExplosion.rb:20:287:20:296 | ... > ... | UseUseExplosion.rb:20:286:20:297 | [false] ( ... ) | | UseUseExplosion.rb:20:287:20:296 | ... > ... | UseUseExplosion.rb:20:286:20:297 | [true] ( ... ) | +| UseUseExplosion.rb:20:299:20:3476 | [input] SSA phi read(self) | UseUseExplosion.rb:20:283:20:3492 | SSA phi read(self) | +| UseUseExplosion.rb:20:299:20:3476 | [input] SSA phi read(x) | UseUseExplosion.rb:20:283:20:3492 | SSA phi read(x) | | UseUseExplosion.rb:20:299:20:3476 | then ... | UseUseExplosion.rb:20:283:20:3492 | if ... | -| UseUseExplosion.rb:20:304:20:3476 | SSA phi read(self) | UseUseExplosion.rb:20:283:20:3492 | SSA phi read(self) | -| UseUseExplosion.rb:20:304:20:3476 | SSA phi read(x) | UseUseExplosion.rb:20:283:20:3492 | SSA phi read(x) | +| UseUseExplosion.rb:20:304:20:3476 | SSA phi read(self) | UseUseExplosion.rb:20:299:20:3476 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:304:20:3476 | SSA phi read(x) | UseUseExplosion.rb:20:299:20:3476 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:304:20:3476 | if ... | UseUseExplosion.rb:20:299:20:3476 | then ... | | UseUseExplosion.rb:20:308:20:312 | [post] self | UseUseExplosion.rb:20:329:20:333 | self | | UseUseExplosion.rb:20:308:20:312 | [post] self | UseUseExplosion.rb:20:3467:20:3472 | self | @@ -350,9 +378,11 @@ | UseUseExplosion.rb:20:308:20:312 | self | UseUseExplosion.rb:20:3467:20:3472 | self | | UseUseExplosion.rb:20:308:20:317 | ... > ... | UseUseExplosion.rb:20:307:20:318 | [false] ( ... ) | | UseUseExplosion.rb:20:308:20:317 | ... > ... | UseUseExplosion.rb:20:307:20:318 | [true] ( ... ) | +| UseUseExplosion.rb:20:320:20:3460 | [input] SSA phi read(self) | UseUseExplosion.rb:20:304:20:3476 | SSA phi read(self) | +| UseUseExplosion.rb:20:320:20:3460 | [input] SSA phi read(x) | UseUseExplosion.rb:20:304:20:3476 | SSA phi read(x) | | UseUseExplosion.rb:20:320:20:3460 | then ... | UseUseExplosion.rb:20:304:20:3476 | if ... | -| UseUseExplosion.rb:20:325:20:3460 | SSA phi read(self) | UseUseExplosion.rb:20:304:20:3476 | SSA phi read(self) | -| UseUseExplosion.rb:20:325:20:3460 | SSA phi read(x) | UseUseExplosion.rb:20:304:20:3476 | SSA phi read(x) | +| UseUseExplosion.rb:20:325:20:3460 | SSA phi read(self) | UseUseExplosion.rb:20:320:20:3460 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:325:20:3460 | SSA phi read(x) | UseUseExplosion.rb:20:320:20:3460 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:325:20:3460 | if ... | UseUseExplosion.rb:20:320:20:3460 | then ... | | UseUseExplosion.rb:20:329:20:333 | [post] self | UseUseExplosion.rb:20:350:20:354 | self | | UseUseExplosion.rb:20:329:20:333 | [post] self | UseUseExplosion.rb:20:3451:20:3456 | self | @@ -360,9 +390,11 @@ | UseUseExplosion.rb:20:329:20:333 | self | UseUseExplosion.rb:20:3451:20:3456 | self | | UseUseExplosion.rb:20:329:20:338 | ... > ... | UseUseExplosion.rb:20:328:20:339 | [false] ( ... ) | | UseUseExplosion.rb:20:329:20:338 | ... > ... | UseUseExplosion.rb:20:328:20:339 | [true] ( ... ) | +| UseUseExplosion.rb:20:341:20:3444 | [input] SSA phi read(self) | UseUseExplosion.rb:20:325:20:3460 | SSA phi read(self) | +| UseUseExplosion.rb:20:341:20:3444 | [input] SSA phi read(x) | UseUseExplosion.rb:20:325:20:3460 | SSA phi read(x) | | UseUseExplosion.rb:20:341:20:3444 | then ... | UseUseExplosion.rb:20:325:20:3460 | if ... | -| UseUseExplosion.rb:20:346:20:3444 | SSA phi read(self) | UseUseExplosion.rb:20:325:20:3460 | SSA phi read(self) | -| UseUseExplosion.rb:20:346:20:3444 | SSA phi read(x) | UseUseExplosion.rb:20:325:20:3460 | SSA phi read(x) | +| UseUseExplosion.rb:20:346:20:3444 | SSA phi read(self) | UseUseExplosion.rb:20:341:20:3444 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:346:20:3444 | SSA phi read(x) | UseUseExplosion.rb:20:341:20:3444 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:346:20:3444 | if ... | UseUseExplosion.rb:20:341:20:3444 | then ... | | UseUseExplosion.rb:20:350:20:354 | [post] self | UseUseExplosion.rb:20:371:20:375 | self | | UseUseExplosion.rb:20:350:20:354 | [post] self | UseUseExplosion.rb:20:3435:20:3440 | self | @@ -370,9 +402,11 @@ | UseUseExplosion.rb:20:350:20:354 | self | UseUseExplosion.rb:20:3435:20:3440 | self | | UseUseExplosion.rb:20:350:20:359 | ... > ... | UseUseExplosion.rb:20:349:20:360 | [false] ( ... ) | | UseUseExplosion.rb:20:350:20:359 | ... > ... | UseUseExplosion.rb:20:349:20:360 | [true] ( ... ) | +| UseUseExplosion.rb:20:362:20:3428 | [input] SSA phi read(self) | UseUseExplosion.rb:20:346:20:3444 | SSA phi read(self) | +| UseUseExplosion.rb:20:362:20:3428 | [input] SSA phi read(x) | UseUseExplosion.rb:20:346:20:3444 | SSA phi read(x) | | UseUseExplosion.rb:20:362:20:3428 | then ... | UseUseExplosion.rb:20:346:20:3444 | if ... | -| UseUseExplosion.rb:20:367:20:3428 | SSA phi read(self) | UseUseExplosion.rb:20:346:20:3444 | SSA phi read(self) | -| UseUseExplosion.rb:20:367:20:3428 | SSA phi read(x) | UseUseExplosion.rb:20:346:20:3444 | SSA phi read(x) | +| UseUseExplosion.rb:20:367:20:3428 | SSA phi read(self) | UseUseExplosion.rb:20:362:20:3428 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:367:20:3428 | SSA phi read(x) | UseUseExplosion.rb:20:362:20:3428 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:367:20:3428 | if ... | UseUseExplosion.rb:20:362:20:3428 | then ... | | UseUseExplosion.rb:20:371:20:375 | [post] self | UseUseExplosion.rb:20:392:20:396 | self | | UseUseExplosion.rb:20:371:20:375 | [post] self | UseUseExplosion.rb:20:3419:20:3424 | self | @@ -380,9 +414,11 @@ | UseUseExplosion.rb:20:371:20:375 | self | UseUseExplosion.rb:20:3419:20:3424 | self | | UseUseExplosion.rb:20:371:20:380 | ... > ... | UseUseExplosion.rb:20:370:20:381 | [false] ( ... ) | | UseUseExplosion.rb:20:371:20:380 | ... > ... | UseUseExplosion.rb:20:370:20:381 | [true] ( ... ) | +| UseUseExplosion.rb:20:383:20:3412 | [input] SSA phi read(self) | UseUseExplosion.rb:20:367:20:3428 | SSA phi read(self) | +| UseUseExplosion.rb:20:383:20:3412 | [input] SSA phi read(x) | UseUseExplosion.rb:20:367:20:3428 | SSA phi read(x) | | UseUseExplosion.rb:20:383:20:3412 | then ... | UseUseExplosion.rb:20:367:20:3428 | if ... | -| UseUseExplosion.rb:20:388:20:3412 | SSA phi read(self) | UseUseExplosion.rb:20:367:20:3428 | SSA phi read(self) | -| UseUseExplosion.rb:20:388:20:3412 | SSA phi read(x) | UseUseExplosion.rb:20:367:20:3428 | SSA phi read(x) | +| UseUseExplosion.rb:20:388:20:3412 | SSA phi read(self) | UseUseExplosion.rb:20:383:20:3412 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:388:20:3412 | SSA phi read(x) | UseUseExplosion.rb:20:383:20:3412 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:388:20:3412 | if ... | UseUseExplosion.rb:20:383:20:3412 | then ... | | UseUseExplosion.rb:20:392:20:396 | [post] self | UseUseExplosion.rb:20:413:20:417 | self | | UseUseExplosion.rb:20:392:20:396 | [post] self | UseUseExplosion.rb:20:3403:20:3408 | self | @@ -390,9 +426,11 @@ | UseUseExplosion.rb:20:392:20:396 | self | UseUseExplosion.rb:20:3403:20:3408 | self | | UseUseExplosion.rb:20:392:20:401 | ... > ... | UseUseExplosion.rb:20:391:20:402 | [false] ( ... ) | | UseUseExplosion.rb:20:392:20:401 | ... > ... | UseUseExplosion.rb:20:391:20:402 | [true] ( ... ) | +| UseUseExplosion.rb:20:404:20:3396 | [input] SSA phi read(self) | UseUseExplosion.rb:20:388:20:3412 | SSA phi read(self) | +| UseUseExplosion.rb:20:404:20:3396 | [input] SSA phi read(x) | UseUseExplosion.rb:20:388:20:3412 | SSA phi read(x) | | UseUseExplosion.rb:20:404:20:3396 | then ... | UseUseExplosion.rb:20:388:20:3412 | if ... | -| UseUseExplosion.rb:20:409:20:3396 | SSA phi read(self) | UseUseExplosion.rb:20:388:20:3412 | SSA phi read(self) | -| UseUseExplosion.rb:20:409:20:3396 | SSA phi read(x) | UseUseExplosion.rb:20:388:20:3412 | SSA phi read(x) | +| UseUseExplosion.rb:20:409:20:3396 | SSA phi read(self) | UseUseExplosion.rb:20:404:20:3396 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:409:20:3396 | SSA phi read(x) | UseUseExplosion.rb:20:404:20:3396 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:409:20:3396 | if ... | UseUseExplosion.rb:20:404:20:3396 | then ... | | UseUseExplosion.rb:20:413:20:417 | [post] self | UseUseExplosion.rb:20:434:20:438 | self | | UseUseExplosion.rb:20:413:20:417 | [post] self | UseUseExplosion.rb:20:3387:20:3392 | self | @@ -400,9 +438,11 @@ | UseUseExplosion.rb:20:413:20:417 | self | UseUseExplosion.rb:20:3387:20:3392 | self | | UseUseExplosion.rb:20:413:20:422 | ... > ... | UseUseExplosion.rb:20:412:20:423 | [false] ( ... ) | | UseUseExplosion.rb:20:413:20:422 | ... > ... | UseUseExplosion.rb:20:412:20:423 | [true] ( ... ) | +| UseUseExplosion.rb:20:425:20:3380 | [input] SSA phi read(self) | UseUseExplosion.rb:20:409:20:3396 | SSA phi read(self) | +| UseUseExplosion.rb:20:425:20:3380 | [input] SSA phi read(x) | UseUseExplosion.rb:20:409:20:3396 | SSA phi read(x) | | UseUseExplosion.rb:20:425:20:3380 | then ... | UseUseExplosion.rb:20:409:20:3396 | if ... | -| UseUseExplosion.rb:20:430:20:3380 | SSA phi read(self) | UseUseExplosion.rb:20:409:20:3396 | SSA phi read(self) | -| UseUseExplosion.rb:20:430:20:3380 | SSA phi read(x) | UseUseExplosion.rb:20:409:20:3396 | SSA phi read(x) | +| UseUseExplosion.rb:20:430:20:3380 | SSA phi read(self) | UseUseExplosion.rb:20:425:20:3380 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:430:20:3380 | SSA phi read(x) | UseUseExplosion.rb:20:425:20:3380 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:430:20:3380 | if ... | UseUseExplosion.rb:20:425:20:3380 | then ... | | UseUseExplosion.rb:20:434:20:438 | [post] self | UseUseExplosion.rb:20:455:20:459 | self | | UseUseExplosion.rb:20:434:20:438 | [post] self | UseUseExplosion.rb:20:3371:20:3376 | self | @@ -410,9 +450,11 @@ | UseUseExplosion.rb:20:434:20:438 | self | UseUseExplosion.rb:20:3371:20:3376 | self | | UseUseExplosion.rb:20:434:20:443 | ... > ... | UseUseExplosion.rb:20:433:20:444 | [false] ( ... ) | | UseUseExplosion.rb:20:434:20:443 | ... > ... | UseUseExplosion.rb:20:433:20:444 | [true] ( ... ) | +| UseUseExplosion.rb:20:446:20:3364 | [input] SSA phi read(self) | UseUseExplosion.rb:20:430:20:3380 | SSA phi read(self) | +| UseUseExplosion.rb:20:446:20:3364 | [input] SSA phi read(x) | UseUseExplosion.rb:20:430:20:3380 | SSA phi read(x) | | UseUseExplosion.rb:20:446:20:3364 | then ... | UseUseExplosion.rb:20:430:20:3380 | if ... | -| UseUseExplosion.rb:20:451:20:3364 | SSA phi read(self) | UseUseExplosion.rb:20:430:20:3380 | SSA phi read(self) | -| UseUseExplosion.rb:20:451:20:3364 | SSA phi read(x) | UseUseExplosion.rb:20:430:20:3380 | SSA phi read(x) | +| UseUseExplosion.rb:20:451:20:3364 | SSA phi read(self) | UseUseExplosion.rb:20:446:20:3364 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:451:20:3364 | SSA phi read(x) | UseUseExplosion.rb:20:446:20:3364 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:451:20:3364 | if ... | UseUseExplosion.rb:20:446:20:3364 | then ... | | UseUseExplosion.rb:20:455:20:459 | [post] self | UseUseExplosion.rb:20:476:20:480 | self | | UseUseExplosion.rb:20:455:20:459 | [post] self | UseUseExplosion.rb:20:3355:20:3360 | self | @@ -420,9 +462,11 @@ | UseUseExplosion.rb:20:455:20:459 | self | UseUseExplosion.rb:20:3355:20:3360 | self | | UseUseExplosion.rb:20:455:20:464 | ... > ... | UseUseExplosion.rb:20:454:20:465 | [false] ( ... ) | | UseUseExplosion.rb:20:455:20:464 | ... > ... | UseUseExplosion.rb:20:454:20:465 | [true] ( ... ) | +| UseUseExplosion.rb:20:467:20:3348 | [input] SSA phi read(self) | UseUseExplosion.rb:20:451:20:3364 | SSA phi read(self) | +| UseUseExplosion.rb:20:467:20:3348 | [input] SSA phi read(x) | UseUseExplosion.rb:20:451:20:3364 | SSA phi read(x) | | UseUseExplosion.rb:20:467:20:3348 | then ... | UseUseExplosion.rb:20:451:20:3364 | if ... | -| UseUseExplosion.rb:20:472:20:3348 | SSA phi read(self) | UseUseExplosion.rb:20:451:20:3364 | SSA phi read(self) | -| UseUseExplosion.rb:20:472:20:3348 | SSA phi read(x) | UseUseExplosion.rb:20:451:20:3364 | SSA phi read(x) | +| UseUseExplosion.rb:20:472:20:3348 | SSA phi read(self) | UseUseExplosion.rb:20:467:20:3348 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:472:20:3348 | SSA phi read(x) | UseUseExplosion.rb:20:467:20:3348 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:472:20:3348 | if ... | UseUseExplosion.rb:20:467:20:3348 | then ... | | UseUseExplosion.rb:20:476:20:480 | [post] self | UseUseExplosion.rb:20:497:20:501 | self | | UseUseExplosion.rb:20:476:20:480 | [post] self | UseUseExplosion.rb:20:3339:20:3344 | self | @@ -430,9 +474,11 @@ | UseUseExplosion.rb:20:476:20:480 | self | UseUseExplosion.rb:20:3339:20:3344 | self | | UseUseExplosion.rb:20:476:20:485 | ... > ... | UseUseExplosion.rb:20:475:20:486 | [false] ( ... ) | | UseUseExplosion.rb:20:476:20:485 | ... > ... | UseUseExplosion.rb:20:475:20:486 | [true] ( ... ) | +| UseUseExplosion.rb:20:488:20:3332 | [input] SSA phi read(self) | UseUseExplosion.rb:20:472:20:3348 | SSA phi read(self) | +| UseUseExplosion.rb:20:488:20:3332 | [input] SSA phi read(x) | UseUseExplosion.rb:20:472:20:3348 | SSA phi read(x) | | UseUseExplosion.rb:20:488:20:3332 | then ... | UseUseExplosion.rb:20:472:20:3348 | if ... | -| UseUseExplosion.rb:20:493:20:3332 | SSA phi read(self) | UseUseExplosion.rb:20:472:20:3348 | SSA phi read(self) | -| UseUseExplosion.rb:20:493:20:3332 | SSA phi read(x) | UseUseExplosion.rb:20:472:20:3348 | SSA phi read(x) | +| UseUseExplosion.rb:20:493:20:3332 | SSA phi read(self) | UseUseExplosion.rb:20:488:20:3332 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:493:20:3332 | SSA phi read(x) | UseUseExplosion.rb:20:488:20:3332 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:493:20:3332 | if ... | UseUseExplosion.rb:20:488:20:3332 | then ... | | UseUseExplosion.rb:20:497:20:501 | [post] self | UseUseExplosion.rb:20:518:20:522 | self | | UseUseExplosion.rb:20:497:20:501 | [post] self | UseUseExplosion.rb:20:3323:20:3328 | self | @@ -440,9 +486,11 @@ | UseUseExplosion.rb:20:497:20:501 | self | UseUseExplosion.rb:20:3323:20:3328 | self | | UseUseExplosion.rb:20:497:20:506 | ... > ... | UseUseExplosion.rb:20:496:20:507 | [false] ( ... ) | | UseUseExplosion.rb:20:497:20:506 | ... > ... | UseUseExplosion.rb:20:496:20:507 | [true] ( ... ) | +| UseUseExplosion.rb:20:509:20:3316 | [input] SSA phi read(self) | UseUseExplosion.rb:20:493:20:3332 | SSA phi read(self) | +| UseUseExplosion.rb:20:509:20:3316 | [input] SSA phi read(x) | UseUseExplosion.rb:20:493:20:3332 | SSA phi read(x) | | UseUseExplosion.rb:20:509:20:3316 | then ... | UseUseExplosion.rb:20:493:20:3332 | if ... | -| UseUseExplosion.rb:20:514:20:3316 | SSA phi read(self) | UseUseExplosion.rb:20:493:20:3332 | SSA phi read(self) | -| UseUseExplosion.rb:20:514:20:3316 | SSA phi read(x) | UseUseExplosion.rb:20:493:20:3332 | SSA phi read(x) | +| UseUseExplosion.rb:20:514:20:3316 | SSA phi read(self) | UseUseExplosion.rb:20:509:20:3316 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:514:20:3316 | SSA phi read(x) | UseUseExplosion.rb:20:509:20:3316 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:514:20:3316 | if ... | UseUseExplosion.rb:20:509:20:3316 | then ... | | UseUseExplosion.rb:20:518:20:522 | [post] self | UseUseExplosion.rb:20:539:20:543 | self | | UseUseExplosion.rb:20:518:20:522 | [post] self | UseUseExplosion.rb:20:3307:20:3312 | self | @@ -450,9 +498,11 @@ | UseUseExplosion.rb:20:518:20:522 | self | UseUseExplosion.rb:20:3307:20:3312 | self | | UseUseExplosion.rb:20:518:20:527 | ... > ... | UseUseExplosion.rb:20:517:20:528 | [false] ( ... ) | | UseUseExplosion.rb:20:518:20:527 | ... > ... | UseUseExplosion.rb:20:517:20:528 | [true] ( ... ) | +| UseUseExplosion.rb:20:530:20:3300 | [input] SSA phi read(self) | UseUseExplosion.rb:20:514:20:3316 | SSA phi read(self) | +| UseUseExplosion.rb:20:530:20:3300 | [input] SSA phi read(x) | UseUseExplosion.rb:20:514:20:3316 | SSA phi read(x) | | UseUseExplosion.rb:20:530:20:3300 | then ... | UseUseExplosion.rb:20:514:20:3316 | if ... | -| UseUseExplosion.rb:20:535:20:3300 | SSA phi read(self) | UseUseExplosion.rb:20:514:20:3316 | SSA phi read(self) | -| UseUseExplosion.rb:20:535:20:3300 | SSA phi read(x) | UseUseExplosion.rb:20:514:20:3316 | SSA phi read(x) | +| UseUseExplosion.rb:20:535:20:3300 | SSA phi read(self) | UseUseExplosion.rb:20:530:20:3300 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:535:20:3300 | SSA phi read(x) | UseUseExplosion.rb:20:530:20:3300 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:535:20:3300 | if ... | UseUseExplosion.rb:20:530:20:3300 | then ... | | UseUseExplosion.rb:20:539:20:543 | [post] self | UseUseExplosion.rb:20:560:20:564 | self | | UseUseExplosion.rb:20:539:20:543 | [post] self | UseUseExplosion.rb:20:3291:20:3296 | self | @@ -460,9 +510,11 @@ | UseUseExplosion.rb:20:539:20:543 | self | UseUseExplosion.rb:20:3291:20:3296 | self | | UseUseExplosion.rb:20:539:20:548 | ... > ... | UseUseExplosion.rb:20:538:20:549 | [false] ( ... ) | | UseUseExplosion.rb:20:539:20:548 | ... > ... | UseUseExplosion.rb:20:538:20:549 | [true] ( ... ) | +| UseUseExplosion.rb:20:551:20:3284 | [input] SSA phi read(self) | UseUseExplosion.rb:20:535:20:3300 | SSA phi read(self) | +| UseUseExplosion.rb:20:551:20:3284 | [input] SSA phi read(x) | UseUseExplosion.rb:20:535:20:3300 | SSA phi read(x) | | UseUseExplosion.rb:20:551:20:3284 | then ... | UseUseExplosion.rb:20:535:20:3300 | if ... | -| UseUseExplosion.rb:20:556:20:3284 | SSA phi read(self) | UseUseExplosion.rb:20:535:20:3300 | SSA phi read(self) | -| UseUseExplosion.rb:20:556:20:3284 | SSA phi read(x) | UseUseExplosion.rb:20:535:20:3300 | SSA phi read(x) | +| UseUseExplosion.rb:20:556:20:3284 | SSA phi read(self) | UseUseExplosion.rb:20:551:20:3284 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:556:20:3284 | SSA phi read(x) | UseUseExplosion.rb:20:551:20:3284 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:556:20:3284 | if ... | UseUseExplosion.rb:20:551:20:3284 | then ... | | UseUseExplosion.rb:20:560:20:564 | [post] self | UseUseExplosion.rb:20:581:20:585 | self | | UseUseExplosion.rb:20:560:20:564 | [post] self | UseUseExplosion.rb:20:3275:20:3280 | self | @@ -470,9 +522,11 @@ | UseUseExplosion.rb:20:560:20:564 | self | UseUseExplosion.rb:20:3275:20:3280 | self | | UseUseExplosion.rb:20:560:20:569 | ... > ... | UseUseExplosion.rb:20:559:20:570 | [false] ( ... ) | | UseUseExplosion.rb:20:560:20:569 | ... > ... | UseUseExplosion.rb:20:559:20:570 | [true] ( ... ) | +| UseUseExplosion.rb:20:572:20:3268 | [input] SSA phi read(self) | UseUseExplosion.rb:20:556:20:3284 | SSA phi read(self) | +| UseUseExplosion.rb:20:572:20:3268 | [input] SSA phi read(x) | UseUseExplosion.rb:20:556:20:3284 | SSA phi read(x) | | UseUseExplosion.rb:20:572:20:3268 | then ... | UseUseExplosion.rb:20:556:20:3284 | if ... | -| UseUseExplosion.rb:20:577:20:3268 | SSA phi read(self) | UseUseExplosion.rb:20:556:20:3284 | SSA phi read(self) | -| UseUseExplosion.rb:20:577:20:3268 | SSA phi read(x) | UseUseExplosion.rb:20:556:20:3284 | SSA phi read(x) | +| UseUseExplosion.rb:20:577:20:3268 | SSA phi read(self) | UseUseExplosion.rb:20:572:20:3268 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:577:20:3268 | SSA phi read(x) | UseUseExplosion.rb:20:572:20:3268 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:577:20:3268 | if ... | UseUseExplosion.rb:20:572:20:3268 | then ... | | UseUseExplosion.rb:20:581:20:585 | [post] self | UseUseExplosion.rb:20:602:20:606 | self | | UseUseExplosion.rb:20:581:20:585 | [post] self | UseUseExplosion.rb:20:3259:20:3264 | self | @@ -480,9 +534,11 @@ | UseUseExplosion.rb:20:581:20:585 | self | UseUseExplosion.rb:20:3259:20:3264 | self | | UseUseExplosion.rb:20:581:20:590 | ... > ... | UseUseExplosion.rb:20:580:20:591 | [false] ( ... ) | | UseUseExplosion.rb:20:581:20:590 | ... > ... | UseUseExplosion.rb:20:580:20:591 | [true] ( ... ) | +| UseUseExplosion.rb:20:593:20:3252 | [input] SSA phi read(self) | UseUseExplosion.rb:20:577:20:3268 | SSA phi read(self) | +| UseUseExplosion.rb:20:593:20:3252 | [input] SSA phi read(x) | UseUseExplosion.rb:20:577:20:3268 | SSA phi read(x) | | UseUseExplosion.rb:20:593:20:3252 | then ... | UseUseExplosion.rb:20:577:20:3268 | if ... | -| UseUseExplosion.rb:20:598:20:3252 | SSA phi read(self) | UseUseExplosion.rb:20:577:20:3268 | SSA phi read(self) | -| UseUseExplosion.rb:20:598:20:3252 | SSA phi read(x) | UseUseExplosion.rb:20:577:20:3268 | SSA phi read(x) | +| UseUseExplosion.rb:20:598:20:3252 | SSA phi read(self) | UseUseExplosion.rb:20:593:20:3252 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:598:20:3252 | SSA phi read(x) | UseUseExplosion.rb:20:593:20:3252 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:598:20:3252 | if ... | UseUseExplosion.rb:20:593:20:3252 | then ... | | UseUseExplosion.rb:20:602:20:606 | [post] self | UseUseExplosion.rb:20:623:20:627 | self | | UseUseExplosion.rb:20:602:20:606 | [post] self | UseUseExplosion.rb:20:3243:20:3248 | self | @@ -490,9 +546,11 @@ | UseUseExplosion.rb:20:602:20:606 | self | UseUseExplosion.rb:20:3243:20:3248 | self | | UseUseExplosion.rb:20:602:20:611 | ... > ... | UseUseExplosion.rb:20:601:20:612 | [false] ( ... ) | | UseUseExplosion.rb:20:602:20:611 | ... > ... | UseUseExplosion.rb:20:601:20:612 | [true] ( ... ) | +| UseUseExplosion.rb:20:614:20:3236 | [input] SSA phi read(self) | UseUseExplosion.rb:20:598:20:3252 | SSA phi read(self) | +| UseUseExplosion.rb:20:614:20:3236 | [input] SSA phi read(x) | UseUseExplosion.rb:20:598:20:3252 | SSA phi read(x) | | UseUseExplosion.rb:20:614:20:3236 | then ... | UseUseExplosion.rb:20:598:20:3252 | if ... | -| UseUseExplosion.rb:20:619:20:3236 | SSA phi read(self) | UseUseExplosion.rb:20:598:20:3252 | SSA phi read(self) | -| UseUseExplosion.rb:20:619:20:3236 | SSA phi read(x) | UseUseExplosion.rb:20:598:20:3252 | SSA phi read(x) | +| UseUseExplosion.rb:20:619:20:3236 | SSA phi read(self) | UseUseExplosion.rb:20:614:20:3236 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:619:20:3236 | SSA phi read(x) | UseUseExplosion.rb:20:614:20:3236 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:619:20:3236 | if ... | UseUseExplosion.rb:20:614:20:3236 | then ... | | UseUseExplosion.rb:20:623:20:627 | [post] self | UseUseExplosion.rb:20:644:20:648 | self | | UseUseExplosion.rb:20:623:20:627 | [post] self | UseUseExplosion.rb:20:3227:20:3232 | self | @@ -500,9 +558,11 @@ | UseUseExplosion.rb:20:623:20:627 | self | UseUseExplosion.rb:20:3227:20:3232 | self | | UseUseExplosion.rb:20:623:20:632 | ... > ... | UseUseExplosion.rb:20:622:20:633 | [false] ( ... ) | | UseUseExplosion.rb:20:623:20:632 | ... > ... | UseUseExplosion.rb:20:622:20:633 | [true] ( ... ) | +| UseUseExplosion.rb:20:635:20:3220 | [input] SSA phi read(self) | UseUseExplosion.rb:20:619:20:3236 | SSA phi read(self) | +| UseUseExplosion.rb:20:635:20:3220 | [input] SSA phi read(x) | UseUseExplosion.rb:20:619:20:3236 | SSA phi read(x) | | UseUseExplosion.rb:20:635:20:3220 | then ... | UseUseExplosion.rb:20:619:20:3236 | if ... | -| UseUseExplosion.rb:20:640:20:3220 | SSA phi read(self) | UseUseExplosion.rb:20:619:20:3236 | SSA phi read(self) | -| UseUseExplosion.rb:20:640:20:3220 | SSA phi read(x) | UseUseExplosion.rb:20:619:20:3236 | SSA phi read(x) | +| UseUseExplosion.rb:20:640:20:3220 | SSA phi read(self) | UseUseExplosion.rb:20:635:20:3220 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:640:20:3220 | SSA phi read(x) | UseUseExplosion.rb:20:635:20:3220 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:640:20:3220 | if ... | UseUseExplosion.rb:20:635:20:3220 | then ... | | UseUseExplosion.rb:20:644:20:648 | [post] self | UseUseExplosion.rb:20:665:20:669 | self | | UseUseExplosion.rb:20:644:20:648 | [post] self | UseUseExplosion.rb:20:3211:20:3216 | self | @@ -510,9 +570,11 @@ | UseUseExplosion.rb:20:644:20:648 | self | UseUseExplosion.rb:20:3211:20:3216 | self | | UseUseExplosion.rb:20:644:20:653 | ... > ... | UseUseExplosion.rb:20:643:20:654 | [false] ( ... ) | | UseUseExplosion.rb:20:644:20:653 | ... > ... | UseUseExplosion.rb:20:643:20:654 | [true] ( ... ) | +| UseUseExplosion.rb:20:656:20:3204 | [input] SSA phi read(self) | UseUseExplosion.rb:20:640:20:3220 | SSA phi read(self) | +| UseUseExplosion.rb:20:656:20:3204 | [input] SSA phi read(x) | UseUseExplosion.rb:20:640:20:3220 | SSA phi read(x) | | UseUseExplosion.rb:20:656:20:3204 | then ... | UseUseExplosion.rb:20:640:20:3220 | if ... | -| UseUseExplosion.rb:20:661:20:3204 | SSA phi read(self) | UseUseExplosion.rb:20:640:20:3220 | SSA phi read(self) | -| UseUseExplosion.rb:20:661:20:3204 | SSA phi read(x) | UseUseExplosion.rb:20:640:20:3220 | SSA phi read(x) | +| UseUseExplosion.rb:20:661:20:3204 | SSA phi read(self) | UseUseExplosion.rb:20:656:20:3204 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:661:20:3204 | SSA phi read(x) | UseUseExplosion.rb:20:656:20:3204 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:661:20:3204 | if ... | UseUseExplosion.rb:20:656:20:3204 | then ... | | UseUseExplosion.rb:20:665:20:669 | [post] self | UseUseExplosion.rb:20:686:20:690 | self | | UseUseExplosion.rb:20:665:20:669 | [post] self | UseUseExplosion.rb:20:3195:20:3200 | self | @@ -520,9 +582,11 @@ | UseUseExplosion.rb:20:665:20:669 | self | UseUseExplosion.rb:20:3195:20:3200 | self | | UseUseExplosion.rb:20:665:20:674 | ... > ... | UseUseExplosion.rb:20:664:20:675 | [false] ( ... ) | | UseUseExplosion.rb:20:665:20:674 | ... > ... | UseUseExplosion.rb:20:664:20:675 | [true] ( ... ) | +| UseUseExplosion.rb:20:677:20:3188 | [input] SSA phi read(self) | UseUseExplosion.rb:20:661:20:3204 | SSA phi read(self) | +| UseUseExplosion.rb:20:677:20:3188 | [input] SSA phi read(x) | UseUseExplosion.rb:20:661:20:3204 | SSA phi read(x) | | UseUseExplosion.rb:20:677:20:3188 | then ... | UseUseExplosion.rb:20:661:20:3204 | if ... | -| UseUseExplosion.rb:20:682:20:3188 | SSA phi read(self) | UseUseExplosion.rb:20:661:20:3204 | SSA phi read(self) | -| UseUseExplosion.rb:20:682:20:3188 | SSA phi read(x) | UseUseExplosion.rb:20:661:20:3204 | SSA phi read(x) | +| UseUseExplosion.rb:20:682:20:3188 | SSA phi read(self) | UseUseExplosion.rb:20:677:20:3188 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:682:20:3188 | SSA phi read(x) | UseUseExplosion.rb:20:677:20:3188 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:682:20:3188 | if ... | UseUseExplosion.rb:20:677:20:3188 | then ... | | UseUseExplosion.rb:20:686:20:690 | [post] self | UseUseExplosion.rb:20:707:20:711 | self | | UseUseExplosion.rb:20:686:20:690 | [post] self | UseUseExplosion.rb:20:3179:20:3184 | self | @@ -530,9 +594,11 @@ | UseUseExplosion.rb:20:686:20:690 | self | UseUseExplosion.rb:20:3179:20:3184 | self | | UseUseExplosion.rb:20:686:20:695 | ... > ... | UseUseExplosion.rb:20:685:20:696 | [false] ( ... ) | | UseUseExplosion.rb:20:686:20:695 | ... > ... | UseUseExplosion.rb:20:685:20:696 | [true] ( ... ) | +| UseUseExplosion.rb:20:698:20:3172 | [input] SSA phi read(self) | UseUseExplosion.rb:20:682:20:3188 | SSA phi read(self) | +| UseUseExplosion.rb:20:698:20:3172 | [input] SSA phi read(x) | UseUseExplosion.rb:20:682:20:3188 | SSA phi read(x) | | UseUseExplosion.rb:20:698:20:3172 | then ... | UseUseExplosion.rb:20:682:20:3188 | if ... | -| UseUseExplosion.rb:20:703:20:3172 | SSA phi read(self) | UseUseExplosion.rb:20:682:20:3188 | SSA phi read(self) | -| UseUseExplosion.rb:20:703:20:3172 | SSA phi read(x) | UseUseExplosion.rb:20:682:20:3188 | SSA phi read(x) | +| UseUseExplosion.rb:20:703:20:3172 | SSA phi read(self) | UseUseExplosion.rb:20:698:20:3172 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:703:20:3172 | SSA phi read(x) | UseUseExplosion.rb:20:698:20:3172 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:703:20:3172 | if ... | UseUseExplosion.rb:20:698:20:3172 | then ... | | UseUseExplosion.rb:20:707:20:711 | [post] self | UseUseExplosion.rb:20:728:20:732 | self | | UseUseExplosion.rb:20:707:20:711 | [post] self | UseUseExplosion.rb:20:3163:20:3168 | self | @@ -540,9 +606,11 @@ | UseUseExplosion.rb:20:707:20:711 | self | UseUseExplosion.rb:20:3163:20:3168 | self | | UseUseExplosion.rb:20:707:20:716 | ... > ... | UseUseExplosion.rb:20:706:20:717 | [false] ( ... ) | | UseUseExplosion.rb:20:707:20:716 | ... > ... | UseUseExplosion.rb:20:706:20:717 | [true] ( ... ) | +| UseUseExplosion.rb:20:719:20:3156 | [input] SSA phi read(self) | UseUseExplosion.rb:20:703:20:3172 | SSA phi read(self) | +| UseUseExplosion.rb:20:719:20:3156 | [input] SSA phi read(x) | UseUseExplosion.rb:20:703:20:3172 | SSA phi read(x) | | UseUseExplosion.rb:20:719:20:3156 | then ... | UseUseExplosion.rb:20:703:20:3172 | if ... | -| UseUseExplosion.rb:20:724:20:3156 | SSA phi read(self) | UseUseExplosion.rb:20:703:20:3172 | SSA phi read(self) | -| UseUseExplosion.rb:20:724:20:3156 | SSA phi read(x) | UseUseExplosion.rb:20:703:20:3172 | SSA phi read(x) | +| UseUseExplosion.rb:20:724:20:3156 | SSA phi read(self) | UseUseExplosion.rb:20:719:20:3156 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:724:20:3156 | SSA phi read(x) | UseUseExplosion.rb:20:719:20:3156 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:724:20:3156 | if ... | UseUseExplosion.rb:20:719:20:3156 | then ... | | UseUseExplosion.rb:20:728:20:732 | [post] self | UseUseExplosion.rb:20:749:20:753 | self | | UseUseExplosion.rb:20:728:20:732 | [post] self | UseUseExplosion.rb:20:3147:20:3152 | self | @@ -550,9 +618,11 @@ | UseUseExplosion.rb:20:728:20:732 | self | UseUseExplosion.rb:20:3147:20:3152 | self | | UseUseExplosion.rb:20:728:20:737 | ... > ... | UseUseExplosion.rb:20:727:20:738 | [false] ( ... ) | | UseUseExplosion.rb:20:728:20:737 | ... > ... | UseUseExplosion.rb:20:727:20:738 | [true] ( ... ) | +| UseUseExplosion.rb:20:740:20:3140 | [input] SSA phi read(self) | UseUseExplosion.rb:20:724:20:3156 | SSA phi read(self) | +| UseUseExplosion.rb:20:740:20:3140 | [input] SSA phi read(x) | UseUseExplosion.rb:20:724:20:3156 | SSA phi read(x) | | UseUseExplosion.rb:20:740:20:3140 | then ... | UseUseExplosion.rb:20:724:20:3156 | if ... | -| UseUseExplosion.rb:20:745:20:3140 | SSA phi read(self) | UseUseExplosion.rb:20:724:20:3156 | SSA phi read(self) | -| UseUseExplosion.rb:20:745:20:3140 | SSA phi read(x) | UseUseExplosion.rb:20:724:20:3156 | SSA phi read(x) | +| UseUseExplosion.rb:20:745:20:3140 | SSA phi read(self) | UseUseExplosion.rb:20:740:20:3140 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:745:20:3140 | SSA phi read(x) | UseUseExplosion.rb:20:740:20:3140 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:745:20:3140 | if ... | UseUseExplosion.rb:20:740:20:3140 | then ... | | UseUseExplosion.rb:20:749:20:753 | [post] self | UseUseExplosion.rb:20:770:20:774 | self | | UseUseExplosion.rb:20:749:20:753 | [post] self | UseUseExplosion.rb:20:3131:20:3136 | self | @@ -560,9 +630,11 @@ | UseUseExplosion.rb:20:749:20:753 | self | UseUseExplosion.rb:20:3131:20:3136 | self | | UseUseExplosion.rb:20:749:20:758 | ... > ... | UseUseExplosion.rb:20:748:20:759 | [false] ( ... ) | | UseUseExplosion.rb:20:749:20:758 | ... > ... | UseUseExplosion.rb:20:748:20:759 | [true] ( ... ) | +| UseUseExplosion.rb:20:761:20:3124 | [input] SSA phi read(self) | UseUseExplosion.rb:20:745:20:3140 | SSA phi read(self) | +| UseUseExplosion.rb:20:761:20:3124 | [input] SSA phi read(x) | UseUseExplosion.rb:20:745:20:3140 | SSA phi read(x) | | UseUseExplosion.rb:20:761:20:3124 | then ... | UseUseExplosion.rb:20:745:20:3140 | if ... | -| UseUseExplosion.rb:20:766:20:3124 | SSA phi read(self) | UseUseExplosion.rb:20:745:20:3140 | SSA phi read(self) | -| UseUseExplosion.rb:20:766:20:3124 | SSA phi read(x) | UseUseExplosion.rb:20:745:20:3140 | SSA phi read(x) | +| UseUseExplosion.rb:20:766:20:3124 | SSA phi read(self) | UseUseExplosion.rb:20:761:20:3124 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:766:20:3124 | SSA phi read(x) | UseUseExplosion.rb:20:761:20:3124 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:766:20:3124 | if ... | UseUseExplosion.rb:20:761:20:3124 | then ... | | UseUseExplosion.rb:20:770:20:774 | [post] self | UseUseExplosion.rb:20:791:20:795 | self | | UseUseExplosion.rb:20:770:20:774 | [post] self | UseUseExplosion.rb:20:3115:20:3120 | self | @@ -570,9 +642,11 @@ | UseUseExplosion.rb:20:770:20:774 | self | UseUseExplosion.rb:20:3115:20:3120 | self | | UseUseExplosion.rb:20:770:20:779 | ... > ... | UseUseExplosion.rb:20:769:20:780 | [false] ( ... ) | | UseUseExplosion.rb:20:770:20:779 | ... > ... | UseUseExplosion.rb:20:769:20:780 | [true] ( ... ) | +| UseUseExplosion.rb:20:782:20:3108 | [input] SSA phi read(self) | UseUseExplosion.rb:20:766:20:3124 | SSA phi read(self) | +| UseUseExplosion.rb:20:782:20:3108 | [input] SSA phi read(x) | UseUseExplosion.rb:20:766:20:3124 | SSA phi read(x) | | UseUseExplosion.rb:20:782:20:3108 | then ... | UseUseExplosion.rb:20:766:20:3124 | if ... | -| UseUseExplosion.rb:20:787:20:3108 | SSA phi read(self) | UseUseExplosion.rb:20:766:20:3124 | SSA phi read(self) | -| UseUseExplosion.rb:20:787:20:3108 | SSA phi read(x) | UseUseExplosion.rb:20:766:20:3124 | SSA phi read(x) | +| UseUseExplosion.rb:20:787:20:3108 | SSA phi read(self) | UseUseExplosion.rb:20:782:20:3108 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:787:20:3108 | SSA phi read(x) | UseUseExplosion.rb:20:782:20:3108 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:787:20:3108 | if ... | UseUseExplosion.rb:20:782:20:3108 | then ... | | UseUseExplosion.rb:20:791:20:795 | [post] self | UseUseExplosion.rb:20:812:20:816 | self | | UseUseExplosion.rb:20:791:20:795 | [post] self | UseUseExplosion.rb:20:3099:20:3104 | self | @@ -580,9 +654,11 @@ | UseUseExplosion.rb:20:791:20:795 | self | UseUseExplosion.rb:20:3099:20:3104 | self | | UseUseExplosion.rb:20:791:20:800 | ... > ... | UseUseExplosion.rb:20:790:20:801 | [false] ( ... ) | | UseUseExplosion.rb:20:791:20:800 | ... > ... | UseUseExplosion.rb:20:790:20:801 | [true] ( ... ) | +| UseUseExplosion.rb:20:803:20:3092 | [input] SSA phi read(self) | UseUseExplosion.rb:20:787:20:3108 | SSA phi read(self) | +| UseUseExplosion.rb:20:803:20:3092 | [input] SSA phi read(x) | UseUseExplosion.rb:20:787:20:3108 | SSA phi read(x) | | UseUseExplosion.rb:20:803:20:3092 | then ... | UseUseExplosion.rb:20:787:20:3108 | if ... | -| UseUseExplosion.rb:20:808:20:3092 | SSA phi read(self) | UseUseExplosion.rb:20:787:20:3108 | SSA phi read(self) | -| UseUseExplosion.rb:20:808:20:3092 | SSA phi read(x) | UseUseExplosion.rb:20:787:20:3108 | SSA phi read(x) | +| UseUseExplosion.rb:20:808:20:3092 | SSA phi read(self) | UseUseExplosion.rb:20:803:20:3092 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:808:20:3092 | SSA phi read(x) | UseUseExplosion.rb:20:803:20:3092 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:808:20:3092 | if ... | UseUseExplosion.rb:20:803:20:3092 | then ... | | UseUseExplosion.rb:20:812:20:816 | [post] self | UseUseExplosion.rb:20:833:20:837 | self | | UseUseExplosion.rb:20:812:20:816 | [post] self | UseUseExplosion.rb:20:3083:20:3088 | self | @@ -590,9 +666,11 @@ | UseUseExplosion.rb:20:812:20:816 | self | UseUseExplosion.rb:20:3083:20:3088 | self | | UseUseExplosion.rb:20:812:20:821 | ... > ... | UseUseExplosion.rb:20:811:20:822 | [false] ( ... ) | | UseUseExplosion.rb:20:812:20:821 | ... > ... | UseUseExplosion.rb:20:811:20:822 | [true] ( ... ) | +| UseUseExplosion.rb:20:824:20:3076 | [input] SSA phi read(self) | UseUseExplosion.rb:20:808:20:3092 | SSA phi read(self) | +| UseUseExplosion.rb:20:824:20:3076 | [input] SSA phi read(x) | UseUseExplosion.rb:20:808:20:3092 | SSA phi read(x) | | UseUseExplosion.rb:20:824:20:3076 | then ... | UseUseExplosion.rb:20:808:20:3092 | if ... | -| UseUseExplosion.rb:20:829:20:3076 | SSA phi read(self) | UseUseExplosion.rb:20:808:20:3092 | SSA phi read(self) | -| UseUseExplosion.rb:20:829:20:3076 | SSA phi read(x) | UseUseExplosion.rb:20:808:20:3092 | SSA phi read(x) | +| UseUseExplosion.rb:20:829:20:3076 | SSA phi read(self) | UseUseExplosion.rb:20:824:20:3076 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:829:20:3076 | SSA phi read(x) | UseUseExplosion.rb:20:824:20:3076 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:829:20:3076 | if ... | UseUseExplosion.rb:20:824:20:3076 | then ... | | UseUseExplosion.rb:20:833:20:837 | [post] self | UseUseExplosion.rb:20:854:20:858 | self | | UseUseExplosion.rb:20:833:20:837 | [post] self | UseUseExplosion.rb:20:3067:20:3072 | self | @@ -600,9 +678,11 @@ | UseUseExplosion.rb:20:833:20:837 | self | UseUseExplosion.rb:20:3067:20:3072 | self | | UseUseExplosion.rb:20:833:20:842 | ... > ... | UseUseExplosion.rb:20:832:20:843 | [false] ( ... ) | | UseUseExplosion.rb:20:833:20:842 | ... > ... | UseUseExplosion.rb:20:832:20:843 | [true] ( ... ) | +| UseUseExplosion.rb:20:845:20:3060 | [input] SSA phi read(self) | UseUseExplosion.rb:20:829:20:3076 | SSA phi read(self) | +| UseUseExplosion.rb:20:845:20:3060 | [input] SSA phi read(x) | UseUseExplosion.rb:20:829:20:3076 | SSA phi read(x) | | UseUseExplosion.rb:20:845:20:3060 | then ... | UseUseExplosion.rb:20:829:20:3076 | if ... | -| UseUseExplosion.rb:20:850:20:3060 | SSA phi read(self) | UseUseExplosion.rb:20:829:20:3076 | SSA phi read(self) | -| UseUseExplosion.rb:20:850:20:3060 | SSA phi read(x) | UseUseExplosion.rb:20:829:20:3076 | SSA phi read(x) | +| UseUseExplosion.rb:20:850:20:3060 | SSA phi read(self) | UseUseExplosion.rb:20:845:20:3060 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:850:20:3060 | SSA phi read(x) | UseUseExplosion.rb:20:845:20:3060 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:850:20:3060 | if ... | UseUseExplosion.rb:20:845:20:3060 | then ... | | UseUseExplosion.rb:20:854:20:858 | [post] self | UseUseExplosion.rb:20:875:20:879 | self | | UseUseExplosion.rb:20:854:20:858 | [post] self | UseUseExplosion.rb:20:3051:20:3056 | self | @@ -610,9 +690,11 @@ | UseUseExplosion.rb:20:854:20:858 | self | UseUseExplosion.rb:20:3051:20:3056 | self | | UseUseExplosion.rb:20:854:20:863 | ... > ... | UseUseExplosion.rb:20:853:20:864 | [false] ( ... ) | | UseUseExplosion.rb:20:854:20:863 | ... > ... | UseUseExplosion.rb:20:853:20:864 | [true] ( ... ) | +| UseUseExplosion.rb:20:866:20:3044 | [input] SSA phi read(self) | UseUseExplosion.rb:20:850:20:3060 | SSA phi read(self) | +| UseUseExplosion.rb:20:866:20:3044 | [input] SSA phi read(x) | UseUseExplosion.rb:20:850:20:3060 | SSA phi read(x) | | UseUseExplosion.rb:20:866:20:3044 | then ... | UseUseExplosion.rb:20:850:20:3060 | if ... | -| UseUseExplosion.rb:20:871:20:3044 | SSA phi read(self) | UseUseExplosion.rb:20:850:20:3060 | SSA phi read(self) | -| UseUseExplosion.rb:20:871:20:3044 | SSA phi read(x) | UseUseExplosion.rb:20:850:20:3060 | SSA phi read(x) | +| UseUseExplosion.rb:20:871:20:3044 | SSA phi read(self) | UseUseExplosion.rb:20:866:20:3044 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:871:20:3044 | SSA phi read(x) | UseUseExplosion.rb:20:866:20:3044 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:871:20:3044 | if ... | UseUseExplosion.rb:20:866:20:3044 | then ... | | UseUseExplosion.rb:20:875:20:879 | [post] self | UseUseExplosion.rb:20:896:20:900 | self | | UseUseExplosion.rb:20:875:20:879 | [post] self | UseUseExplosion.rb:20:3035:20:3040 | self | @@ -620,9 +702,11 @@ | UseUseExplosion.rb:20:875:20:879 | self | UseUseExplosion.rb:20:3035:20:3040 | self | | UseUseExplosion.rb:20:875:20:884 | ... > ... | UseUseExplosion.rb:20:874:20:885 | [false] ( ... ) | | UseUseExplosion.rb:20:875:20:884 | ... > ... | UseUseExplosion.rb:20:874:20:885 | [true] ( ... ) | +| UseUseExplosion.rb:20:887:20:3028 | [input] SSA phi read(self) | UseUseExplosion.rb:20:871:20:3044 | SSA phi read(self) | +| UseUseExplosion.rb:20:887:20:3028 | [input] SSA phi read(x) | UseUseExplosion.rb:20:871:20:3044 | SSA phi read(x) | | UseUseExplosion.rb:20:887:20:3028 | then ... | UseUseExplosion.rb:20:871:20:3044 | if ... | -| UseUseExplosion.rb:20:892:20:3028 | SSA phi read(self) | UseUseExplosion.rb:20:871:20:3044 | SSA phi read(self) | -| UseUseExplosion.rb:20:892:20:3028 | SSA phi read(x) | UseUseExplosion.rb:20:871:20:3044 | SSA phi read(x) | +| UseUseExplosion.rb:20:892:20:3028 | SSA phi read(self) | UseUseExplosion.rb:20:887:20:3028 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:892:20:3028 | SSA phi read(x) | UseUseExplosion.rb:20:887:20:3028 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:892:20:3028 | if ... | UseUseExplosion.rb:20:887:20:3028 | then ... | | UseUseExplosion.rb:20:896:20:900 | [post] self | UseUseExplosion.rb:20:917:20:921 | self | | UseUseExplosion.rb:20:896:20:900 | [post] self | UseUseExplosion.rb:20:3019:20:3024 | self | @@ -630,9 +714,11 @@ | UseUseExplosion.rb:20:896:20:900 | self | UseUseExplosion.rb:20:3019:20:3024 | self | | UseUseExplosion.rb:20:896:20:905 | ... > ... | UseUseExplosion.rb:20:895:20:906 | [false] ( ... ) | | UseUseExplosion.rb:20:896:20:905 | ... > ... | UseUseExplosion.rb:20:895:20:906 | [true] ( ... ) | +| UseUseExplosion.rb:20:908:20:3012 | [input] SSA phi read(self) | UseUseExplosion.rb:20:892:20:3028 | SSA phi read(self) | +| UseUseExplosion.rb:20:908:20:3012 | [input] SSA phi read(x) | UseUseExplosion.rb:20:892:20:3028 | SSA phi read(x) | | UseUseExplosion.rb:20:908:20:3012 | then ... | UseUseExplosion.rb:20:892:20:3028 | if ... | -| UseUseExplosion.rb:20:913:20:3012 | SSA phi read(self) | UseUseExplosion.rb:20:892:20:3028 | SSA phi read(self) | -| UseUseExplosion.rb:20:913:20:3012 | SSA phi read(x) | UseUseExplosion.rb:20:892:20:3028 | SSA phi read(x) | +| UseUseExplosion.rb:20:913:20:3012 | SSA phi read(self) | UseUseExplosion.rb:20:908:20:3012 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:913:20:3012 | SSA phi read(x) | UseUseExplosion.rb:20:908:20:3012 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:913:20:3012 | if ... | UseUseExplosion.rb:20:908:20:3012 | then ... | | UseUseExplosion.rb:20:917:20:921 | [post] self | UseUseExplosion.rb:20:938:20:942 | self | | UseUseExplosion.rb:20:917:20:921 | [post] self | UseUseExplosion.rb:20:3003:20:3008 | self | @@ -640,9 +726,11 @@ | UseUseExplosion.rb:20:917:20:921 | self | UseUseExplosion.rb:20:3003:20:3008 | self | | UseUseExplosion.rb:20:917:20:926 | ... > ... | UseUseExplosion.rb:20:916:20:927 | [false] ( ... ) | | UseUseExplosion.rb:20:917:20:926 | ... > ... | UseUseExplosion.rb:20:916:20:927 | [true] ( ... ) | +| UseUseExplosion.rb:20:929:20:2996 | [input] SSA phi read(self) | UseUseExplosion.rb:20:913:20:3012 | SSA phi read(self) | +| UseUseExplosion.rb:20:929:20:2996 | [input] SSA phi read(x) | UseUseExplosion.rb:20:913:20:3012 | SSA phi read(x) | | UseUseExplosion.rb:20:929:20:2996 | then ... | UseUseExplosion.rb:20:913:20:3012 | if ... | -| UseUseExplosion.rb:20:934:20:2996 | SSA phi read(self) | UseUseExplosion.rb:20:913:20:3012 | SSA phi read(self) | -| UseUseExplosion.rb:20:934:20:2996 | SSA phi read(x) | UseUseExplosion.rb:20:913:20:3012 | SSA phi read(x) | +| UseUseExplosion.rb:20:934:20:2996 | SSA phi read(self) | UseUseExplosion.rb:20:929:20:2996 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:934:20:2996 | SSA phi read(x) | UseUseExplosion.rb:20:929:20:2996 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:934:20:2996 | if ... | UseUseExplosion.rb:20:929:20:2996 | then ... | | UseUseExplosion.rb:20:938:20:942 | [post] self | UseUseExplosion.rb:20:959:20:963 | self | | UseUseExplosion.rb:20:938:20:942 | [post] self | UseUseExplosion.rb:20:2987:20:2992 | self | @@ -650,9 +738,11 @@ | UseUseExplosion.rb:20:938:20:942 | self | UseUseExplosion.rb:20:2987:20:2992 | self | | UseUseExplosion.rb:20:938:20:947 | ... > ... | UseUseExplosion.rb:20:937:20:948 | [false] ( ... ) | | UseUseExplosion.rb:20:938:20:947 | ... > ... | UseUseExplosion.rb:20:937:20:948 | [true] ( ... ) | +| UseUseExplosion.rb:20:950:20:2980 | [input] SSA phi read(self) | UseUseExplosion.rb:20:934:20:2996 | SSA phi read(self) | +| UseUseExplosion.rb:20:950:20:2980 | [input] SSA phi read(x) | UseUseExplosion.rb:20:934:20:2996 | SSA phi read(x) | | UseUseExplosion.rb:20:950:20:2980 | then ... | UseUseExplosion.rb:20:934:20:2996 | if ... | -| UseUseExplosion.rb:20:955:20:2980 | SSA phi read(self) | UseUseExplosion.rb:20:934:20:2996 | SSA phi read(self) | -| UseUseExplosion.rb:20:955:20:2980 | SSA phi read(x) | UseUseExplosion.rb:20:934:20:2996 | SSA phi read(x) | +| UseUseExplosion.rb:20:955:20:2980 | SSA phi read(self) | UseUseExplosion.rb:20:950:20:2980 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:955:20:2980 | SSA phi read(x) | UseUseExplosion.rb:20:950:20:2980 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:955:20:2980 | if ... | UseUseExplosion.rb:20:950:20:2980 | then ... | | UseUseExplosion.rb:20:959:20:963 | [post] self | UseUseExplosion.rb:20:980:20:984 | self | | UseUseExplosion.rb:20:959:20:963 | [post] self | UseUseExplosion.rb:20:2971:20:2976 | self | @@ -660,9 +750,11 @@ | UseUseExplosion.rb:20:959:20:963 | self | UseUseExplosion.rb:20:2971:20:2976 | self | | UseUseExplosion.rb:20:959:20:968 | ... > ... | UseUseExplosion.rb:20:958:20:969 | [false] ( ... ) | | UseUseExplosion.rb:20:959:20:968 | ... > ... | UseUseExplosion.rb:20:958:20:969 | [true] ( ... ) | +| UseUseExplosion.rb:20:971:20:2964 | [input] SSA phi read(self) | UseUseExplosion.rb:20:955:20:2980 | SSA phi read(self) | +| UseUseExplosion.rb:20:971:20:2964 | [input] SSA phi read(x) | UseUseExplosion.rb:20:955:20:2980 | SSA phi read(x) | | UseUseExplosion.rb:20:971:20:2964 | then ... | UseUseExplosion.rb:20:955:20:2980 | if ... | -| UseUseExplosion.rb:20:976:20:2964 | SSA phi read(self) | UseUseExplosion.rb:20:955:20:2980 | SSA phi read(self) | -| UseUseExplosion.rb:20:976:20:2964 | SSA phi read(x) | UseUseExplosion.rb:20:955:20:2980 | SSA phi read(x) | +| UseUseExplosion.rb:20:976:20:2964 | SSA phi read(self) | UseUseExplosion.rb:20:971:20:2964 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:976:20:2964 | SSA phi read(x) | UseUseExplosion.rb:20:971:20:2964 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:976:20:2964 | if ... | UseUseExplosion.rb:20:971:20:2964 | then ... | | UseUseExplosion.rb:20:980:20:984 | [post] self | UseUseExplosion.rb:20:1001:20:1005 | self | | UseUseExplosion.rb:20:980:20:984 | [post] self | UseUseExplosion.rb:20:2955:20:2960 | self | @@ -670,9 +762,11 @@ | UseUseExplosion.rb:20:980:20:984 | self | UseUseExplosion.rb:20:2955:20:2960 | self | | UseUseExplosion.rb:20:980:20:989 | ... > ... | UseUseExplosion.rb:20:979:20:990 | [false] ( ... ) | | UseUseExplosion.rb:20:980:20:989 | ... > ... | UseUseExplosion.rb:20:979:20:990 | [true] ( ... ) | +| UseUseExplosion.rb:20:992:20:2948 | [input] SSA phi read(self) | UseUseExplosion.rb:20:976:20:2964 | SSA phi read(self) | +| UseUseExplosion.rb:20:992:20:2948 | [input] SSA phi read(x) | UseUseExplosion.rb:20:976:20:2964 | SSA phi read(x) | | UseUseExplosion.rb:20:992:20:2948 | then ... | UseUseExplosion.rb:20:976:20:2964 | if ... | -| UseUseExplosion.rb:20:997:20:2948 | SSA phi read(self) | UseUseExplosion.rb:20:976:20:2964 | SSA phi read(self) | -| UseUseExplosion.rb:20:997:20:2948 | SSA phi read(x) | UseUseExplosion.rb:20:976:20:2964 | SSA phi read(x) | +| UseUseExplosion.rb:20:997:20:2948 | SSA phi read(self) | UseUseExplosion.rb:20:992:20:2948 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:997:20:2948 | SSA phi read(x) | UseUseExplosion.rb:20:992:20:2948 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:997:20:2948 | if ... | UseUseExplosion.rb:20:992:20:2948 | then ... | | UseUseExplosion.rb:20:1001:20:1005 | [post] self | UseUseExplosion.rb:20:1022:20:1026 | self | | UseUseExplosion.rb:20:1001:20:1005 | [post] self | UseUseExplosion.rb:20:2939:20:2944 | self | @@ -680,9 +774,11 @@ | UseUseExplosion.rb:20:1001:20:1005 | self | UseUseExplosion.rb:20:2939:20:2944 | self | | UseUseExplosion.rb:20:1001:20:1010 | ... > ... | UseUseExplosion.rb:20:1000:20:1011 | [false] ( ... ) | | UseUseExplosion.rb:20:1001:20:1010 | ... > ... | UseUseExplosion.rb:20:1000:20:1011 | [true] ( ... ) | +| UseUseExplosion.rb:20:1013:20:2932 | [input] SSA phi read(self) | UseUseExplosion.rb:20:997:20:2948 | SSA phi read(self) | +| UseUseExplosion.rb:20:1013:20:2932 | [input] SSA phi read(x) | UseUseExplosion.rb:20:997:20:2948 | SSA phi read(x) | | UseUseExplosion.rb:20:1013:20:2932 | then ... | UseUseExplosion.rb:20:997:20:2948 | if ... | -| UseUseExplosion.rb:20:1018:20:2932 | SSA phi read(self) | UseUseExplosion.rb:20:997:20:2948 | SSA phi read(self) | -| UseUseExplosion.rb:20:1018:20:2932 | SSA phi read(x) | UseUseExplosion.rb:20:997:20:2948 | SSA phi read(x) | +| UseUseExplosion.rb:20:1018:20:2932 | SSA phi read(self) | UseUseExplosion.rb:20:1013:20:2932 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1018:20:2932 | SSA phi read(x) | UseUseExplosion.rb:20:1013:20:2932 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1018:20:2932 | if ... | UseUseExplosion.rb:20:1013:20:2932 | then ... | | UseUseExplosion.rb:20:1022:20:1026 | [post] self | UseUseExplosion.rb:20:1043:20:1047 | self | | UseUseExplosion.rb:20:1022:20:1026 | [post] self | UseUseExplosion.rb:20:2923:20:2928 | self | @@ -690,9 +786,11 @@ | UseUseExplosion.rb:20:1022:20:1026 | self | UseUseExplosion.rb:20:2923:20:2928 | self | | UseUseExplosion.rb:20:1022:20:1031 | ... > ... | UseUseExplosion.rb:20:1021:20:1032 | [false] ( ... ) | | UseUseExplosion.rb:20:1022:20:1031 | ... > ... | UseUseExplosion.rb:20:1021:20:1032 | [true] ( ... ) | +| UseUseExplosion.rb:20:1034:20:2916 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1018:20:2932 | SSA phi read(self) | +| UseUseExplosion.rb:20:1034:20:2916 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1018:20:2932 | SSA phi read(x) | | UseUseExplosion.rb:20:1034:20:2916 | then ... | UseUseExplosion.rb:20:1018:20:2932 | if ... | -| UseUseExplosion.rb:20:1039:20:2916 | SSA phi read(self) | UseUseExplosion.rb:20:1018:20:2932 | SSA phi read(self) | -| UseUseExplosion.rb:20:1039:20:2916 | SSA phi read(x) | UseUseExplosion.rb:20:1018:20:2932 | SSA phi read(x) | +| UseUseExplosion.rb:20:1039:20:2916 | SSA phi read(self) | UseUseExplosion.rb:20:1034:20:2916 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1039:20:2916 | SSA phi read(x) | UseUseExplosion.rb:20:1034:20:2916 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1039:20:2916 | if ... | UseUseExplosion.rb:20:1034:20:2916 | then ... | | UseUseExplosion.rb:20:1043:20:1047 | [post] self | UseUseExplosion.rb:20:1064:20:1068 | self | | UseUseExplosion.rb:20:1043:20:1047 | [post] self | UseUseExplosion.rb:20:2907:20:2912 | self | @@ -700,9 +798,11 @@ | UseUseExplosion.rb:20:1043:20:1047 | self | UseUseExplosion.rb:20:2907:20:2912 | self | | UseUseExplosion.rb:20:1043:20:1052 | ... > ... | UseUseExplosion.rb:20:1042:20:1053 | [false] ( ... ) | | UseUseExplosion.rb:20:1043:20:1052 | ... > ... | UseUseExplosion.rb:20:1042:20:1053 | [true] ( ... ) | +| UseUseExplosion.rb:20:1055:20:2900 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1039:20:2916 | SSA phi read(self) | +| UseUseExplosion.rb:20:1055:20:2900 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1039:20:2916 | SSA phi read(x) | | UseUseExplosion.rb:20:1055:20:2900 | then ... | UseUseExplosion.rb:20:1039:20:2916 | if ... | -| UseUseExplosion.rb:20:1060:20:2900 | SSA phi read(self) | UseUseExplosion.rb:20:1039:20:2916 | SSA phi read(self) | -| UseUseExplosion.rb:20:1060:20:2900 | SSA phi read(x) | UseUseExplosion.rb:20:1039:20:2916 | SSA phi read(x) | +| UseUseExplosion.rb:20:1060:20:2900 | SSA phi read(self) | UseUseExplosion.rb:20:1055:20:2900 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1060:20:2900 | SSA phi read(x) | UseUseExplosion.rb:20:1055:20:2900 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1060:20:2900 | if ... | UseUseExplosion.rb:20:1055:20:2900 | then ... | | UseUseExplosion.rb:20:1064:20:1068 | [post] self | UseUseExplosion.rb:20:1085:20:1089 | self | | UseUseExplosion.rb:20:1064:20:1068 | [post] self | UseUseExplosion.rb:20:2891:20:2896 | self | @@ -710,9 +810,11 @@ | UseUseExplosion.rb:20:1064:20:1068 | self | UseUseExplosion.rb:20:2891:20:2896 | self | | UseUseExplosion.rb:20:1064:20:1073 | ... > ... | UseUseExplosion.rb:20:1063:20:1074 | [false] ( ... ) | | UseUseExplosion.rb:20:1064:20:1073 | ... > ... | UseUseExplosion.rb:20:1063:20:1074 | [true] ( ... ) | +| UseUseExplosion.rb:20:1076:20:2884 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1060:20:2900 | SSA phi read(self) | +| UseUseExplosion.rb:20:1076:20:2884 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1060:20:2900 | SSA phi read(x) | | UseUseExplosion.rb:20:1076:20:2884 | then ... | UseUseExplosion.rb:20:1060:20:2900 | if ... | -| UseUseExplosion.rb:20:1081:20:2884 | SSA phi read(self) | UseUseExplosion.rb:20:1060:20:2900 | SSA phi read(self) | -| UseUseExplosion.rb:20:1081:20:2884 | SSA phi read(x) | UseUseExplosion.rb:20:1060:20:2900 | SSA phi read(x) | +| UseUseExplosion.rb:20:1081:20:2884 | SSA phi read(self) | UseUseExplosion.rb:20:1076:20:2884 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1081:20:2884 | SSA phi read(x) | UseUseExplosion.rb:20:1076:20:2884 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1081:20:2884 | if ... | UseUseExplosion.rb:20:1076:20:2884 | then ... | | UseUseExplosion.rb:20:1085:20:1089 | [post] self | UseUseExplosion.rb:20:1106:20:1110 | self | | UseUseExplosion.rb:20:1085:20:1089 | [post] self | UseUseExplosion.rb:20:2875:20:2880 | self | @@ -720,9 +822,11 @@ | UseUseExplosion.rb:20:1085:20:1089 | self | UseUseExplosion.rb:20:2875:20:2880 | self | | UseUseExplosion.rb:20:1085:20:1094 | ... > ... | UseUseExplosion.rb:20:1084:20:1095 | [false] ( ... ) | | UseUseExplosion.rb:20:1085:20:1094 | ... > ... | UseUseExplosion.rb:20:1084:20:1095 | [true] ( ... ) | +| UseUseExplosion.rb:20:1097:20:2868 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1081:20:2884 | SSA phi read(self) | +| UseUseExplosion.rb:20:1097:20:2868 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1081:20:2884 | SSA phi read(x) | | UseUseExplosion.rb:20:1097:20:2868 | then ... | UseUseExplosion.rb:20:1081:20:2884 | if ... | -| UseUseExplosion.rb:20:1102:20:2868 | SSA phi read(self) | UseUseExplosion.rb:20:1081:20:2884 | SSA phi read(self) | -| UseUseExplosion.rb:20:1102:20:2868 | SSA phi read(x) | UseUseExplosion.rb:20:1081:20:2884 | SSA phi read(x) | +| UseUseExplosion.rb:20:1102:20:2868 | SSA phi read(self) | UseUseExplosion.rb:20:1097:20:2868 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1102:20:2868 | SSA phi read(x) | UseUseExplosion.rb:20:1097:20:2868 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1102:20:2868 | if ... | UseUseExplosion.rb:20:1097:20:2868 | then ... | | UseUseExplosion.rb:20:1106:20:1110 | [post] self | UseUseExplosion.rb:20:1127:20:1131 | self | | UseUseExplosion.rb:20:1106:20:1110 | [post] self | UseUseExplosion.rb:20:2859:20:2864 | self | @@ -730,9 +834,11 @@ | UseUseExplosion.rb:20:1106:20:1110 | self | UseUseExplosion.rb:20:2859:20:2864 | self | | UseUseExplosion.rb:20:1106:20:1115 | ... > ... | UseUseExplosion.rb:20:1105:20:1116 | [false] ( ... ) | | UseUseExplosion.rb:20:1106:20:1115 | ... > ... | UseUseExplosion.rb:20:1105:20:1116 | [true] ( ... ) | +| UseUseExplosion.rb:20:1118:20:2852 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1102:20:2868 | SSA phi read(self) | +| UseUseExplosion.rb:20:1118:20:2852 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1102:20:2868 | SSA phi read(x) | | UseUseExplosion.rb:20:1118:20:2852 | then ... | UseUseExplosion.rb:20:1102:20:2868 | if ... | -| UseUseExplosion.rb:20:1123:20:2852 | SSA phi read(self) | UseUseExplosion.rb:20:1102:20:2868 | SSA phi read(self) | -| UseUseExplosion.rb:20:1123:20:2852 | SSA phi read(x) | UseUseExplosion.rb:20:1102:20:2868 | SSA phi read(x) | +| UseUseExplosion.rb:20:1123:20:2852 | SSA phi read(self) | UseUseExplosion.rb:20:1118:20:2852 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1123:20:2852 | SSA phi read(x) | UseUseExplosion.rb:20:1118:20:2852 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1123:20:2852 | if ... | UseUseExplosion.rb:20:1118:20:2852 | then ... | | UseUseExplosion.rb:20:1127:20:1131 | [post] self | UseUseExplosion.rb:20:1148:20:1152 | self | | UseUseExplosion.rb:20:1127:20:1131 | [post] self | UseUseExplosion.rb:20:2843:20:2848 | self | @@ -740,9 +846,11 @@ | UseUseExplosion.rb:20:1127:20:1131 | self | UseUseExplosion.rb:20:2843:20:2848 | self | | UseUseExplosion.rb:20:1127:20:1136 | ... > ... | UseUseExplosion.rb:20:1126:20:1137 | [false] ( ... ) | | UseUseExplosion.rb:20:1127:20:1136 | ... > ... | UseUseExplosion.rb:20:1126:20:1137 | [true] ( ... ) | +| UseUseExplosion.rb:20:1139:20:2836 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1123:20:2852 | SSA phi read(self) | +| UseUseExplosion.rb:20:1139:20:2836 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1123:20:2852 | SSA phi read(x) | | UseUseExplosion.rb:20:1139:20:2836 | then ... | UseUseExplosion.rb:20:1123:20:2852 | if ... | -| UseUseExplosion.rb:20:1144:20:2836 | SSA phi read(self) | UseUseExplosion.rb:20:1123:20:2852 | SSA phi read(self) | -| UseUseExplosion.rb:20:1144:20:2836 | SSA phi read(x) | UseUseExplosion.rb:20:1123:20:2852 | SSA phi read(x) | +| UseUseExplosion.rb:20:1144:20:2836 | SSA phi read(self) | UseUseExplosion.rb:20:1139:20:2836 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1144:20:2836 | SSA phi read(x) | UseUseExplosion.rb:20:1139:20:2836 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1144:20:2836 | if ... | UseUseExplosion.rb:20:1139:20:2836 | then ... | | UseUseExplosion.rb:20:1148:20:1152 | [post] self | UseUseExplosion.rb:20:1169:20:1173 | self | | UseUseExplosion.rb:20:1148:20:1152 | [post] self | UseUseExplosion.rb:20:2827:20:2832 | self | @@ -750,9 +858,11 @@ | UseUseExplosion.rb:20:1148:20:1152 | self | UseUseExplosion.rb:20:2827:20:2832 | self | | UseUseExplosion.rb:20:1148:20:1157 | ... > ... | UseUseExplosion.rb:20:1147:20:1158 | [false] ( ... ) | | UseUseExplosion.rb:20:1148:20:1157 | ... > ... | UseUseExplosion.rb:20:1147:20:1158 | [true] ( ... ) | +| UseUseExplosion.rb:20:1160:20:2820 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1144:20:2836 | SSA phi read(self) | +| UseUseExplosion.rb:20:1160:20:2820 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1144:20:2836 | SSA phi read(x) | | UseUseExplosion.rb:20:1160:20:2820 | then ... | UseUseExplosion.rb:20:1144:20:2836 | if ... | -| UseUseExplosion.rb:20:1165:20:2820 | SSA phi read(self) | UseUseExplosion.rb:20:1144:20:2836 | SSA phi read(self) | -| UseUseExplosion.rb:20:1165:20:2820 | SSA phi read(x) | UseUseExplosion.rb:20:1144:20:2836 | SSA phi read(x) | +| UseUseExplosion.rb:20:1165:20:2820 | SSA phi read(self) | UseUseExplosion.rb:20:1160:20:2820 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1165:20:2820 | SSA phi read(x) | UseUseExplosion.rb:20:1160:20:2820 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1165:20:2820 | if ... | UseUseExplosion.rb:20:1160:20:2820 | then ... | | UseUseExplosion.rb:20:1169:20:1173 | [post] self | UseUseExplosion.rb:20:1190:20:1194 | self | | UseUseExplosion.rb:20:1169:20:1173 | [post] self | UseUseExplosion.rb:20:2811:20:2816 | self | @@ -760,9 +870,11 @@ | UseUseExplosion.rb:20:1169:20:1173 | self | UseUseExplosion.rb:20:2811:20:2816 | self | | UseUseExplosion.rb:20:1169:20:1178 | ... > ... | UseUseExplosion.rb:20:1168:20:1179 | [false] ( ... ) | | UseUseExplosion.rb:20:1169:20:1178 | ... > ... | UseUseExplosion.rb:20:1168:20:1179 | [true] ( ... ) | +| UseUseExplosion.rb:20:1181:20:2804 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1165:20:2820 | SSA phi read(self) | +| UseUseExplosion.rb:20:1181:20:2804 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1165:20:2820 | SSA phi read(x) | | UseUseExplosion.rb:20:1181:20:2804 | then ... | UseUseExplosion.rb:20:1165:20:2820 | if ... | -| UseUseExplosion.rb:20:1186:20:2804 | SSA phi read(self) | UseUseExplosion.rb:20:1165:20:2820 | SSA phi read(self) | -| UseUseExplosion.rb:20:1186:20:2804 | SSA phi read(x) | UseUseExplosion.rb:20:1165:20:2820 | SSA phi read(x) | +| UseUseExplosion.rb:20:1186:20:2804 | SSA phi read(self) | UseUseExplosion.rb:20:1181:20:2804 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1186:20:2804 | SSA phi read(x) | UseUseExplosion.rb:20:1181:20:2804 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1186:20:2804 | if ... | UseUseExplosion.rb:20:1181:20:2804 | then ... | | UseUseExplosion.rb:20:1190:20:1194 | [post] self | UseUseExplosion.rb:20:1211:20:1215 | self | | UseUseExplosion.rb:20:1190:20:1194 | [post] self | UseUseExplosion.rb:20:2795:20:2800 | self | @@ -770,9 +882,11 @@ | UseUseExplosion.rb:20:1190:20:1194 | self | UseUseExplosion.rb:20:2795:20:2800 | self | | UseUseExplosion.rb:20:1190:20:1199 | ... > ... | UseUseExplosion.rb:20:1189:20:1200 | [false] ( ... ) | | UseUseExplosion.rb:20:1190:20:1199 | ... > ... | UseUseExplosion.rb:20:1189:20:1200 | [true] ( ... ) | +| UseUseExplosion.rb:20:1202:20:2788 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1186:20:2804 | SSA phi read(self) | +| UseUseExplosion.rb:20:1202:20:2788 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1186:20:2804 | SSA phi read(x) | | UseUseExplosion.rb:20:1202:20:2788 | then ... | UseUseExplosion.rb:20:1186:20:2804 | if ... | -| UseUseExplosion.rb:20:1207:20:2788 | SSA phi read(self) | UseUseExplosion.rb:20:1186:20:2804 | SSA phi read(self) | -| UseUseExplosion.rb:20:1207:20:2788 | SSA phi read(x) | UseUseExplosion.rb:20:1186:20:2804 | SSA phi read(x) | +| UseUseExplosion.rb:20:1207:20:2788 | SSA phi read(self) | UseUseExplosion.rb:20:1202:20:2788 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1207:20:2788 | SSA phi read(x) | UseUseExplosion.rb:20:1202:20:2788 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1207:20:2788 | if ... | UseUseExplosion.rb:20:1202:20:2788 | then ... | | UseUseExplosion.rb:20:1211:20:1215 | [post] self | UseUseExplosion.rb:20:1232:20:1236 | self | | UseUseExplosion.rb:20:1211:20:1215 | [post] self | UseUseExplosion.rb:20:2779:20:2784 | self | @@ -780,9 +894,11 @@ | UseUseExplosion.rb:20:1211:20:1215 | self | UseUseExplosion.rb:20:2779:20:2784 | self | | UseUseExplosion.rb:20:1211:20:1220 | ... > ... | UseUseExplosion.rb:20:1210:20:1221 | [false] ( ... ) | | UseUseExplosion.rb:20:1211:20:1220 | ... > ... | UseUseExplosion.rb:20:1210:20:1221 | [true] ( ... ) | +| UseUseExplosion.rb:20:1223:20:2772 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1207:20:2788 | SSA phi read(self) | +| UseUseExplosion.rb:20:1223:20:2772 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1207:20:2788 | SSA phi read(x) | | UseUseExplosion.rb:20:1223:20:2772 | then ... | UseUseExplosion.rb:20:1207:20:2788 | if ... | -| UseUseExplosion.rb:20:1228:20:2772 | SSA phi read(self) | UseUseExplosion.rb:20:1207:20:2788 | SSA phi read(self) | -| UseUseExplosion.rb:20:1228:20:2772 | SSA phi read(x) | UseUseExplosion.rb:20:1207:20:2788 | SSA phi read(x) | +| UseUseExplosion.rb:20:1228:20:2772 | SSA phi read(self) | UseUseExplosion.rb:20:1223:20:2772 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1228:20:2772 | SSA phi read(x) | UseUseExplosion.rb:20:1223:20:2772 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1228:20:2772 | if ... | UseUseExplosion.rb:20:1223:20:2772 | then ... | | UseUseExplosion.rb:20:1232:20:1236 | [post] self | UseUseExplosion.rb:20:1253:20:1257 | self | | UseUseExplosion.rb:20:1232:20:1236 | [post] self | UseUseExplosion.rb:20:2763:20:2768 | self | @@ -790,9 +906,11 @@ | UseUseExplosion.rb:20:1232:20:1236 | self | UseUseExplosion.rb:20:2763:20:2768 | self | | UseUseExplosion.rb:20:1232:20:1241 | ... > ... | UseUseExplosion.rb:20:1231:20:1242 | [false] ( ... ) | | UseUseExplosion.rb:20:1232:20:1241 | ... > ... | UseUseExplosion.rb:20:1231:20:1242 | [true] ( ... ) | +| UseUseExplosion.rb:20:1244:20:2756 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1228:20:2772 | SSA phi read(self) | +| UseUseExplosion.rb:20:1244:20:2756 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1228:20:2772 | SSA phi read(x) | | UseUseExplosion.rb:20:1244:20:2756 | then ... | UseUseExplosion.rb:20:1228:20:2772 | if ... | -| UseUseExplosion.rb:20:1249:20:2756 | SSA phi read(self) | UseUseExplosion.rb:20:1228:20:2772 | SSA phi read(self) | -| UseUseExplosion.rb:20:1249:20:2756 | SSA phi read(x) | UseUseExplosion.rb:20:1228:20:2772 | SSA phi read(x) | +| UseUseExplosion.rb:20:1249:20:2756 | SSA phi read(self) | UseUseExplosion.rb:20:1244:20:2756 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1249:20:2756 | SSA phi read(x) | UseUseExplosion.rb:20:1244:20:2756 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1249:20:2756 | if ... | UseUseExplosion.rb:20:1244:20:2756 | then ... | | UseUseExplosion.rb:20:1253:20:1257 | [post] self | UseUseExplosion.rb:20:1274:20:1278 | self | | UseUseExplosion.rb:20:1253:20:1257 | [post] self | UseUseExplosion.rb:20:2747:20:2752 | self | @@ -800,9 +918,11 @@ | UseUseExplosion.rb:20:1253:20:1257 | self | UseUseExplosion.rb:20:2747:20:2752 | self | | UseUseExplosion.rb:20:1253:20:1262 | ... > ... | UseUseExplosion.rb:20:1252:20:1263 | [false] ( ... ) | | UseUseExplosion.rb:20:1253:20:1262 | ... > ... | UseUseExplosion.rb:20:1252:20:1263 | [true] ( ... ) | +| UseUseExplosion.rb:20:1265:20:2740 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1249:20:2756 | SSA phi read(self) | +| UseUseExplosion.rb:20:1265:20:2740 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1249:20:2756 | SSA phi read(x) | | UseUseExplosion.rb:20:1265:20:2740 | then ... | UseUseExplosion.rb:20:1249:20:2756 | if ... | -| UseUseExplosion.rb:20:1270:20:2740 | SSA phi read(self) | UseUseExplosion.rb:20:1249:20:2756 | SSA phi read(self) | -| UseUseExplosion.rb:20:1270:20:2740 | SSA phi read(x) | UseUseExplosion.rb:20:1249:20:2756 | SSA phi read(x) | +| UseUseExplosion.rb:20:1270:20:2740 | SSA phi read(self) | UseUseExplosion.rb:20:1265:20:2740 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1270:20:2740 | SSA phi read(x) | UseUseExplosion.rb:20:1265:20:2740 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1270:20:2740 | if ... | UseUseExplosion.rb:20:1265:20:2740 | then ... | | UseUseExplosion.rb:20:1274:20:1278 | [post] self | UseUseExplosion.rb:20:1295:20:1299 | self | | UseUseExplosion.rb:20:1274:20:1278 | [post] self | UseUseExplosion.rb:20:2731:20:2736 | self | @@ -810,9 +930,11 @@ | UseUseExplosion.rb:20:1274:20:1278 | self | UseUseExplosion.rb:20:2731:20:2736 | self | | UseUseExplosion.rb:20:1274:20:1283 | ... > ... | UseUseExplosion.rb:20:1273:20:1284 | [false] ( ... ) | | UseUseExplosion.rb:20:1274:20:1283 | ... > ... | UseUseExplosion.rb:20:1273:20:1284 | [true] ( ... ) | +| UseUseExplosion.rb:20:1286:20:2724 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1270:20:2740 | SSA phi read(self) | +| UseUseExplosion.rb:20:1286:20:2724 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1270:20:2740 | SSA phi read(x) | | UseUseExplosion.rb:20:1286:20:2724 | then ... | UseUseExplosion.rb:20:1270:20:2740 | if ... | -| UseUseExplosion.rb:20:1291:20:2724 | SSA phi read(self) | UseUseExplosion.rb:20:1270:20:2740 | SSA phi read(self) | -| UseUseExplosion.rb:20:1291:20:2724 | SSA phi read(x) | UseUseExplosion.rb:20:1270:20:2740 | SSA phi read(x) | +| UseUseExplosion.rb:20:1291:20:2724 | SSA phi read(self) | UseUseExplosion.rb:20:1286:20:2724 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1291:20:2724 | SSA phi read(x) | UseUseExplosion.rb:20:1286:20:2724 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1291:20:2724 | if ... | UseUseExplosion.rb:20:1286:20:2724 | then ... | | UseUseExplosion.rb:20:1295:20:1299 | [post] self | UseUseExplosion.rb:20:1316:20:1320 | self | | UseUseExplosion.rb:20:1295:20:1299 | [post] self | UseUseExplosion.rb:20:2715:20:2720 | self | @@ -820,9 +942,11 @@ | UseUseExplosion.rb:20:1295:20:1299 | self | UseUseExplosion.rb:20:2715:20:2720 | self | | UseUseExplosion.rb:20:1295:20:1304 | ... > ... | UseUseExplosion.rb:20:1294:20:1305 | [false] ( ... ) | | UseUseExplosion.rb:20:1295:20:1304 | ... > ... | UseUseExplosion.rb:20:1294:20:1305 | [true] ( ... ) | +| UseUseExplosion.rb:20:1307:20:2708 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1291:20:2724 | SSA phi read(self) | +| UseUseExplosion.rb:20:1307:20:2708 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1291:20:2724 | SSA phi read(x) | | UseUseExplosion.rb:20:1307:20:2708 | then ... | UseUseExplosion.rb:20:1291:20:2724 | if ... | -| UseUseExplosion.rb:20:1312:20:2708 | SSA phi read(self) | UseUseExplosion.rb:20:1291:20:2724 | SSA phi read(self) | -| UseUseExplosion.rb:20:1312:20:2708 | SSA phi read(x) | UseUseExplosion.rb:20:1291:20:2724 | SSA phi read(x) | +| UseUseExplosion.rb:20:1312:20:2708 | SSA phi read(self) | UseUseExplosion.rb:20:1307:20:2708 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1312:20:2708 | SSA phi read(x) | UseUseExplosion.rb:20:1307:20:2708 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1312:20:2708 | if ... | UseUseExplosion.rb:20:1307:20:2708 | then ... | | UseUseExplosion.rb:20:1316:20:1320 | [post] self | UseUseExplosion.rb:20:1337:20:1341 | self | | UseUseExplosion.rb:20:1316:20:1320 | [post] self | UseUseExplosion.rb:20:2699:20:2704 | self | @@ -830,9 +954,11 @@ | UseUseExplosion.rb:20:1316:20:1320 | self | UseUseExplosion.rb:20:2699:20:2704 | self | | UseUseExplosion.rb:20:1316:20:1325 | ... > ... | UseUseExplosion.rb:20:1315:20:1326 | [false] ( ... ) | | UseUseExplosion.rb:20:1316:20:1325 | ... > ... | UseUseExplosion.rb:20:1315:20:1326 | [true] ( ... ) | +| UseUseExplosion.rb:20:1328:20:2692 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1312:20:2708 | SSA phi read(self) | +| UseUseExplosion.rb:20:1328:20:2692 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1312:20:2708 | SSA phi read(x) | | UseUseExplosion.rb:20:1328:20:2692 | then ... | UseUseExplosion.rb:20:1312:20:2708 | if ... | -| UseUseExplosion.rb:20:1333:20:2692 | SSA phi read(self) | UseUseExplosion.rb:20:1312:20:2708 | SSA phi read(self) | -| UseUseExplosion.rb:20:1333:20:2692 | SSA phi read(x) | UseUseExplosion.rb:20:1312:20:2708 | SSA phi read(x) | +| UseUseExplosion.rb:20:1333:20:2692 | SSA phi read(self) | UseUseExplosion.rb:20:1328:20:2692 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1333:20:2692 | SSA phi read(x) | UseUseExplosion.rb:20:1328:20:2692 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1333:20:2692 | if ... | UseUseExplosion.rb:20:1328:20:2692 | then ... | | UseUseExplosion.rb:20:1337:20:1341 | [post] self | UseUseExplosion.rb:20:1358:20:1362 | self | | UseUseExplosion.rb:20:1337:20:1341 | [post] self | UseUseExplosion.rb:20:2683:20:2688 | self | @@ -840,9 +966,11 @@ | UseUseExplosion.rb:20:1337:20:1341 | self | UseUseExplosion.rb:20:2683:20:2688 | self | | UseUseExplosion.rb:20:1337:20:1346 | ... > ... | UseUseExplosion.rb:20:1336:20:1347 | [false] ( ... ) | | UseUseExplosion.rb:20:1337:20:1346 | ... > ... | UseUseExplosion.rb:20:1336:20:1347 | [true] ( ... ) | +| UseUseExplosion.rb:20:1349:20:2676 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1333:20:2692 | SSA phi read(self) | +| UseUseExplosion.rb:20:1349:20:2676 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1333:20:2692 | SSA phi read(x) | | UseUseExplosion.rb:20:1349:20:2676 | then ... | UseUseExplosion.rb:20:1333:20:2692 | if ... | -| UseUseExplosion.rb:20:1354:20:2676 | SSA phi read(self) | UseUseExplosion.rb:20:1333:20:2692 | SSA phi read(self) | -| UseUseExplosion.rb:20:1354:20:2676 | SSA phi read(x) | UseUseExplosion.rb:20:1333:20:2692 | SSA phi read(x) | +| UseUseExplosion.rb:20:1354:20:2676 | SSA phi read(self) | UseUseExplosion.rb:20:1349:20:2676 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1354:20:2676 | SSA phi read(x) | UseUseExplosion.rb:20:1349:20:2676 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1354:20:2676 | if ... | UseUseExplosion.rb:20:1349:20:2676 | then ... | | UseUseExplosion.rb:20:1358:20:1362 | [post] self | UseUseExplosion.rb:20:1379:20:1383 | self | | UseUseExplosion.rb:20:1358:20:1362 | [post] self | UseUseExplosion.rb:20:2667:20:2672 | self | @@ -850,9 +978,11 @@ | UseUseExplosion.rb:20:1358:20:1362 | self | UseUseExplosion.rb:20:2667:20:2672 | self | | UseUseExplosion.rb:20:1358:20:1367 | ... > ... | UseUseExplosion.rb:20:1357:20:1368 | [false] ( ... ) | | UseUseExplosion.rb:20:1358:20:1367 | ... > ... | UseUseExplosion.rb:20:1357:20:1368 | [true] ( ... ) | +| UseUseExplosion.rb:20:1370:20:2660 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1354:20:2676 | SSA phi read(self) | +| UseUseExplosion.rb:20:1370:20:2660 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1354:20:2676 | SSA phi read(x) | | UseUseExplosion.rb:20:1370:20:2660 | then ... | UseUseExplosion.rb:20:1354:20:2676 | if ... | -| UseUseExplosion.rb:20:1375:20:2660 | SSA phi read(self) | UseUseExplosion.rb:20:1354:20:2676 | SSA phi read(self) | -| UseUseExplosion.rb:20:1375:20:2660 | SSA phi read(x) | UseUseExplosion.rb:20:1354:20:2676 | SSA phi read(x) | +| UseUseExplosion.rb:20:1375:20:2660 | SSA phi read(self) | UseUseExplosion.rb:20:1370:20:2660 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1375:20:2660 | SSA phi read(x) | UseUseExplosion.rb:20:1370:20:2660 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1375:20:2660 | if ... | UseUseExplosion.rb:20:1370:20:2660 | then ... | | UseUseExplosion.rb:20:1379:20:1383 | [post] self | UseUseExplosion.rb:20:1400:20:1404 | self | | UseUseExplosion.rb:20:1379:20:1383 | [post] self | UseUseExplosion.rb:20:2651:20:2656 | self | @@ -860,9 +990,11 @@ | UseUseExplosion.rb:20:1379:20:1383 | self | UseUseExplosion.rb:20:2651:20:2656 | self | | UseUseExplosion.rb:20:1379:20:1388 | ... > ... | UseUseExplosion.rb:20:1378:20:1389 | [false] ( ... ) | | UseUseExplosion.rb:20:1379:20:1388 | ... > ... | UseUseExplosion.rb:20:1378:20:1389 | [true] ( ... ) | +| UseUseExplosion.rb:20:1391:20:2644 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1375:20:2660 | SSA phi read(self) | +| UseUseExplosion.rb:20:1391:20:2644 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1375:20:2660 | SSA phi read(x) | | UseUseExplosion.rb:20:1391:20:2644 | then ... | UseUseExplosion.rb:20:1375:20:2660 | if ... | -| UseUseExplosion.rb:20:1396:20:2644 | SSA phi read(self) | UseUseExplosion.rb:20:1375:20:2660 | SSA phi read(self) | -| UseUseExplosion.rb:20:1396:20:2644 | SSA phi read(x) | UseUseExplosion.rb:20:1375:20:2660 | SSA phi read(x) | +| UseUseExplosion.rb:20:1396:20:2644 | SSA phi read(self) | UseUseExplosion.rb:20:1391:20:2644 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1396:20:2644 | SSA phi read(x) | UseUseExplosion.rb:20:1391:20:2644 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1396:20:2644 | if ... | UseUseExplosion.rb:20:1391:20:2644 | then ... | | UseUseExplosion.rb:20:1400:20:1404 | [post] self | UseUseExplosion.rb:20:1421:20:1425 | self | | UseUseExplosion.rb:20:1400:20:1404 | [post] self | UseUseExplosion.rb:20:2635:20:2640 | self | @@ -870,9 +1002,11 @@ | UseUseExplosion.rb:20:1400:20:1404 | self | UseUseExplosion.rb:20:2635:20:2640 | self | | UseUseExplosion.rb:20:1400:20:1409 | ... > ... | UseUseExplosion.rb:20:1399:20:1410 | [false] ( ... ) | | UseUseExplosion.rb:20:1400:20:1409 | ... > ... | UseUseExplosion.rb:20:1399:20:1410 | [true] ( ... ) | +| UseUseExplosion.rb:20:1412:20:2628 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1396:20:2644 | SSA phi read(self) | +| UseUseExplosion.rb:20:1412:20:2628 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1396:20:2644 | SSA phi read(x) | | UseUseExplosion.rb:20:1412:20:2628 | then ... | UseUseExplosion.rb:20:1396:20:2644 | if ... | -| UseUseExplosion.rb:20:1417:20:2628 | SSA phi read(self) | UseUseExplosion.rb:20:1396:20:2644 | SSA phi read(self) | -| UseUseExplosion.rb:20:1417:20:2628 | SSA phi read(x) | UseUseExplosion.rb:20:1396:20:2644 | SSA phi read(x) | +| UseUseExplosion.rb:20:1417:20:2628 | SSA phi read(self) | UseUseExplosion.rb:20:1412:20:2628 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1417:20:2628 | SSA phi read(x) | UseUseExplosion.rb:20:1412:20:2628 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1417:20:2628 | if ... | UseUseExplosion.rb:20:1412:20:2628 | then ... | | UseUseExplosion.rb:20:1421:20:1425 | [post] self | UseUseExplosion.rb:20:1442:20:1446 | self | | UseUseExplosion.rb:20:1421:20:1425 | [post] self | UseUseExplosion.rb:20:2619:20:2624 | self | @@ -880,9 +1014,11 @@ | UseUseExplosion.rb:20:1421:20:1425 | self | UseUseExplosion.rb:20:2619:20:2624 | self | | UseUseExplosion.rb:20:1421:20:1430 | ... > ... | UseUseExplosion.rb:20:1420:20:1431 | [false] ( ... ) | | UseUseExplosion.rb:20:1421:20:1430 | ... > ... | UseUseExplosion.rb:20:1420:20:1431 | [true] ( ... ) | +| UseUseExplosion.rb:20:1433:20:2612 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1417:20:2628 | SSA phi read(self) | +| UseUseExplosion.rb:20:1433:20:2612 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1417:20:2628 | SSA phi read(x) | | UseUseExplosion.rb:20:1433:20:2612 | then ... | UseUseExplosion.rb:20:1417:20:2628 | if ... | -| UseUseExplosion.rb:20:1438:20:2612 | SSA phi read(self) | UseUseExplosion.rb:20:1417:20:2628 | SSA phi read(self) | -| UseUseExplosion.rb:20:1438:20:2612 | SSA phi read(x) | UseUseExplosion.rb:20:1417:20:2628 | SSA phi read(x) | +| UseUseExplosion.rb:20:1438:20:2612 | SSA phi read(self) | UseUseExplosion.rb:20:1433:20:2612 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1438:20:2612 | SSA phi read(x) | UseUseExplosion.rb:20:1433:20:2612 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1438:20:2612 | if ... | UseUseExplosion.rb:20:1433:20:2612 | then ... | | UseUseExplosion.rb:20:1442:20:1446 | [post] self | UseUseExplosion.rb:20:1463:20:1467 | self | | UseUseExplosion.rb:20:1442:20:1446 | [post] self | UseUseExplosion.rb:20:2603:20:2608 | self | @@ -890,9 +1026,11 @@ | UseUseExplosion.rb:20:1442:20:1446 | self | UseUseExplosion.rb:20:2603:20:2608 | self | | UseUseExplosion.rb:20:1442:20:1451 | ... > ... | UseUseExplosion.rb:20:1441:20:1452 | [false] ( ... ) | | UseUseExplosion.rb:20:1442:20:1451 | ... > ... | UseUseExplosion.rb:20:1441:20:1452 | [true] ( ... ) | +| UseUseExplosion.rb:20:1454:20:2596 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1438:20:2612 | SSA phi read(self) | +| UseUseExplosion.rb:20:1454:20:2596 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1438:20:2612 | SSA phi read(x) | | UseUseExplosion.rb:20:1454:20:2596 | then ... | UseUseExplosion.rb:20:1438:20:2612 | if ... | -| UseUseExplosion.rb:20:1459:20:2596 | SSA phi read(self) | UseUseExplosion.rb:20:1438:20:2612 | SSA phi read(self) | -| UseUseExplosion.rb:20:1459:20:2596 | SSA phi read(x) | UseUseExplosion.rb:20:1438:20:2612 | SSA phi read(x) | +| UseUseExplosion.rb:20:1459:20:2596 | SSA phi read(self) | UseUseExplosion.rb:20:1454:20:2596 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1459:20:2596 | SSA phi read(x) | UseUseExplosion.rb:20:1454:20:2596 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1459:20:2596 | if ... | UseUseExplosion.rb:20:1454:20:2596 | then ... | | UseUseExplosion.rb:20:1463:20:1467 | [post] self | UseUseExplosion.rb:20:1484:20:1488 | self | | UseUseExplosion.rb:20:1463:20:1467 | [post] self | UseUseExplosion.rb:20:2587:20:2592 | self | @@ -900,9 +1038,11 @@ | UseUseExplosion.rb:20:1463:20:1467 | self | UseUseExplosion.rb:20:2587:20:2592 | self | | UseUseExplosion.rb:20:1463:20:1472 | ... > ... | UseUseExplosion.rb:20:1462:20:1473 | [false] ( ... ) | | UseUseExplosion.rb:20:1463:20:1472 | ... > ... | UseUseExplosion.rb:20:1462:20:1473 | [true] ( ... ) | +| UseUseExplosion.rb:20:1475:20:2580 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1459:20:2596 | SSA phi read(self) | +| UseUseExplosion.rb:20:1475:20:2580 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1459:20:2596 | SSA phi read(x) | | UseUseExplosion.rb:20:1475:20:2580 | then ... | UseUseExplosion.rb:20:1459:20:2596 | if ... | -| UseUseExplosion.rb:20:1480:20:2580 | SSA phi read(self) | UseUseExplosion.rb:20:1459:20:2596 | SSA phi read(self) | -| UseUseExplosion.rb:20:1480:20:2580 | SSA phi read(x) | UseUseExplosion.rb:20:1459:20:2596 | SSA phi read(x) | +| UseUseExplosion.rb:20:1480:20:2580 | SSA phi read(self) | UseUseExplosion.rb:20:1475:20:2580 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1480:20:2580 | SSA phi read(x) | UseUseExplosion.rb:20:1475:20:2580 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1480:20:2580 | if ... | UseUseExplosion.rb:20:1475:20:2580 | then ... | | UseUseExplosion.rb:20:1484:20:1488 | [post] self | UseUseExplosion.rb:20:1505:20:1509 | self | | UseUseExplosion.rb:20:1484:20:1488 | [post] self | UseUseExplosion.rb:20:2571:20:2576 | self | @@ -910,9 +1050,11 @@ | UseUseExplosion.rb:20:1484:20:1488 | self | UseUseExplosion.rb:20:2571:20:2576 | self | | UseUseExplosion.rb:20:1484:20:1493 | ... > ... | UseUseExplosion.rb:20:1483:20:1494 | [false] ( ... ) | | UseUseExplosion.rb:20:1484:20:1493 | ... > ... | UseUseExplosion.rb:20:1483:20:1494 | [true] ( ... ) | +| UseUseExplosion.rb:20:1496:20:2564 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1480:20:2580 | SSA phi read(self) | +| UseUseExplosion.rb:20:1496:20:2564 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1480:20:2580 | SSA phi read(x) | | UseUseExplosion.rb:20:1496:20:2564 | then ... | UseUseExplosion.rb:20:1480:20:2580 | if ... | -| UseUseExplosion.rb:20:1501:20:2564 | SSA phi read(self) | UseUseExplosion.rb:20:1480:20:2580 | SSA phi read(self) | -| UseUseExplosion.rb:20:1501:20:2564 | SSA phi read(x) | UseUseExplosion.rb:20:1480:20:2580 | SSA phi read(x) | +| UseUseExplosion.rb:20:1501:20:2564 | SSA phi read(self) | UseUseExplosion.rb:20:1496:20:2564 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1501:20:2564 | SSA phi read(x) | UseUseExplosion.rb:20:1496:20:2564 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1501:20:2564 | if ... | UseUseExplosion.rb:20:1496:20:2564 | then ... | | UseUseExplosion.rb:20:1505:20:1509 | [post] self | UseUseExplosion.rb:20:1526:20:1530 | self | | UseUseExplosion.rb:20:1505:20:1509 | [post] self | UseUseExplosion.rb:20:2555:20:2560 | self | @@ -920,9 +1062,11 @@ | UseUseExplosion.rb:20:1505:20:1509 | self | UseUseExplosion.rb:20:2555:20:2560 | self | | UseUseExplosion.rb:20:1505:20:1514 | ... > ... | UseUseExplosion.rb:20:1504:20:1515 | [false] ( ... ) | | UseUseExplosion.rb:20:1505:20:1514 | ... > ... | UseUseExplosion.rb:20:1504:20:1515 | [true] ( ... ) | +| UseUseExplosion.rb:20:1517:20:2548 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1501:20:2564 | SSA phi read(self) | +| UseUseExplosion.rb:20:1517:20:2548 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1501:20:2564 | SSA phi read(x) | | UseUseExplosion.rb:20:1517:20:2548 | then ... | UseUseExplosion.rb:20:1501:20:2564 | if ... | -| UseUseExplosion.rb:20:1522:20:2548 | SSA phi read(self) | UseUseExplosion.rb:20:1501:20:2564 | SSA phi read(self) | -| UseUseExplosion.rb:20:1522:20:2548 | SSA phi read(x) | UseUseExplosion.rb:20:1501:20:2564 | SSA phi read(x) | +| UseUseExplosion.rb:20:1522:20:2548 | SSA phi read(self) | UseUseExplosion.rb:20:1517:20:2548 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1522:20:2548 | SSA phi read(x) | UseUseExplosion.rb:20:1517:20:2548 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1522:20:2548 | if ... | UseUseExplosion.rb:20:1517:20:2548 | then ... | | UseUseExplosion.rb:20:1526:20:1530 | [post] self | UseUseExplosion.rb:20:1547:20:1551 | self | | UseUseExplosion.rb:20:1526:20:1530 | [post] self | UseUseExplosion.rb:20:2539:20:2544 | self | @@ -930,9 +1074,11 @@ | UseUseExplosion.rb:20:1526:20:1530 | self | UseUseExplosion.rb:20:2539:20:2544 | self | | UseUseExplosion.rb:20:1526:20:1535 | ... > ... | UseUseExplosion.rb:20:1525:20:1536 | [false] ( ... ) | | UseUseExplosion.rb:20:1526:20:1535 | ... > ... | UseUseExplosion.rb:20:1525:20:1536 | [true] ( ... ) | +| UseUseExplosion.rb:20:1538:20:2532 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1522:20:2548 | SSA phi read(self) | +| UseUseExplosion.rb:20:1538:20:2532 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1522:20:2548 | SSA phi read(x) | | UseUseExplosion.rb:20:1538:20:2532 | then ... | UseUseExplosion.rb:20:1522:20:2548 | if ... | -| UseUseExplosion.rb:20:1543:20:2532 | SSA phi read(self) | UseUseExplosion.rb:20:1522:20:2548 | SSA phi read(self) | -| UseUseExplosion.rb:20:1543:20:2532 | SSA phi read(x) | UseUseExplosion.rb:20:1522:20:2548 | SSA phi read(x) | +| UseUseExplosion.rb:20:1543:20:2532 | SSA phi read(self) | UseUseExplosion.rb:20:1538:20:2532 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1543:20:2532 | SSA phi read(x) | UseUseExplosion.rb:20:1538:20:2532 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1543:20:2532 | if ... | UseUseExplosion.rb:20:1538:20:2532 | then ... | | UseUseExplosion.rb:20:1547:20:1551 | [post] self | UseUseExplosion.rb:20:1568:20:1572 | self | | UseUseExplosion.rb:20:1547:20:1551 | [post] self | UseUseExplosion.rb:20:2523:20:2528 | self | @@ -940,9 +1086,11 @@ | UseUseExplosion.rb:20:1547:20:1551 | self | UseUseExplosion.rb:20:2523:20:2528 | self | | UseUseExplosion.rb:20:1547:20:1556 | ... > ... | UseUseExplosion.rb:20:1546:20:1557 | [false] ( ... ) | | UseUseExplosion.rb:20:1547:20:1556 | ... > ... | UseUseExplosion.rb:20:1546:20:1557 | [true] ( ... ) | +| UseUseExplosion.rb:20:1559:20:2516 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1543:20:2532 | SSA phi read(self) | +| UseUseExplosion.rb:20:1559:20:2516 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1543:20:2532 | SSA phi read(x) | | UseUseExplosion.rb:20:1559:20:2516 | then ... | UseUseExplosion.rb:20:1543:20:2532 | if ... | -| UseUseExplosion.rb:20:1564:20:2516 | SSA phi read(self) | UseUseExplosion.rb:20:1543:20:2532 | SSA phi read(self) | -| UseUseExplosion.rb:20:1564:20:2516 | SSA phi read(x) | UseUseExplosion.rb:20:1543:20:2532 | SSA phi read(x) | +| UseUseExplosion.rb:20:1564:20:2516 | SSA phi read(self) | UseUseExplosion.rb:20:1559:20:2516 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1564:20:2516 | SSA phi read(x) | UseUseExplosion.rb:20:1559:20:2516 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1564:20:2516 | if ... | UseUseExplosion.rb:20:1559:20:2516 | then ... | | UseUseExplosion.rb:20:1568:20:1572 | [post] self | UseUseExplosion.rb:20:1589:20:1593 | self | | UseUseExplosion.rb:20:1568:20:1572 | [post] self | UseUseExplosion.rb:20:2507:20:2512 | self | @@ -950,9 +1098,11 @@ | UseUseExplosion.rb:20:1568:20:1572 | self | UseUseExplosion.rb:20:2507:20:2512 | self | | UseUseExplosion.rb:20:1568:20:1577 | ... > ... | UseUseExplosion.rb:20:1567:20:1578 | [false] ( ... ) | | UseUseExplosion.rb:20:1568:20:1577 | ... > ... | UseUseExplosion.rb:20:1567:20:1578 | [true] ( ... ) | +| UseUseExplosion.rb:20:1580:20:2500 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1564:20:2516 | SSA phi read(self) | +| UseUseExplosion.rb:20:1580:20:2500 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1564:20:2516 | SSA phi read(x) | | UseUseExplosion.rb:20:1580:20:2500 | then ... | UseUseExplosion.rb:20:1564:20:2516 | if ... | -| UseUseExplosion.rb:20:1585:20:2500 | SSA phi read(self) | UseUseExplosion.rb:20:1564:20:2516 | SSA phi read(self) | -| UseUseExplosion.rb:20:1585:20:2500 | SSA phi read(x) | UseUseExplosion.rb:20:1564:20:2516 | SSA phi read(x) | +| UseUseExplosion.rb:20:1585:20:2500 | SSA phi read(self) | UseUseExplosion.rb:20:1580:20:2500 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1585:20:2500 | SSA phi read(x) | UseUseExplosion.rb:20:1580:20:2500 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1585:20:2500 | if ... | UseUseExplosion.rb:20:1580:20:2500 | then ... | | UseUseExplosion.rb:20:1589:20:1593 | [post] self | UseUseExplosion.rb:20:1610:20:1614 | self | | UseUseExplosion.rb:20:1589:20:1593 | [post] self | UseUseExplosion.rb:20:2491:20:2496 | self | @@ -960,9 +1110,11 @@ | UseUseExplosion.rb:20:1589:20:1593 | self | UseUseExplosion.rb:20:2491:20:2496 | self | | UseUseExplosion.rb:20:1589:20:1598 | ... > ... | UseUseExplosion.rb:20:1588:20:1599 | [false] ( ... ) | | UseUseExplosion.rb:20:1589:20:1598 | ... > ... | UseUseExplosion.rb:20:1588:20:1599 | [true] ( ... ) | +| UseUseExplosion.rb:20:1601:20:2484 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1585:20:2500 | SSA phi read(self) | +| UseUseExplosion.rb:20:1601:20:2484 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1585:20:2500 | SSA phi read(x) | | UseUseExplosion.rb:20:1601:20:2484 | then ... | UseUseExplosion.rb:20:1585:20:2500 | if ... | -| UseUseExplosion.rb:20:1606:20:2484 | SSA phi read(self) | UseUseExplosion.rb:20:1585:20:2500 | SSA phi read(self) | -| UseUseExplosion.rb:20:1606:20:2484 | SSA phi read(x) | UseUseExplosion.rb:20:1585:20:2500 | SSA phi read(x) | +| UseUseExplosion.rb:20:1606:20:2484 | SSA phi read(self) | UseUseExplosion.rb:20:1601:20:2484 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1606:20:2484 | SSA phi read(x) | UseUseExplosion.rb:20:1601:20:2484 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1606:20:2484 | if ... | UseUseExplosion.rb:20:1601:20:2484 | then ... | | UseUseExplosion.rb:20:1610:20:1614 | [post] self | UseUseExplosion.rb:20:1631:20:1635 | self | | UseUseExplosion.rb:20:1610:20:1614 | [post] self | UseUseExplosion.rb:20:2475:20:2480 | self | @@ -970,9 +1122,11 @@ | UseUseExplosion.rb:20:1610:20:1614 | self | UseUseExplosion.rb:20:2475:20:2480 | self | | UseUseExplosion.rb:20:1610:20:1619 | ... > ... | UseUseExplosion.rb:20:1609:20:1620 | [false] ( ... ) | | UseUseExplosion.rb:20:1610:20:1619 | ... > ... | UseUseExplosion.rb:20:1609:20:1620 | [true] ( ... ) | +| UseUseExplosion.rb:20:1622:20:2468 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1606:20:2484 | SSA phi read(self) | +| UseUseExplosion.rb:20:1622:20:2468 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1606:20:2484 | SSA phi read(x) | | UseUseExplosion.rb:20:1622:20:2468 | then ... | UseUseExplosion.rb:20:1606:20:2484 | if ... | -| UseUseExplosion.rb:20:1627:20:2468 | SSA phi read(self) | UseUseExplosion.rb:20:1606:20:2484 | SSA phi read(self) | -| UseUseExplosion.rb:20:1627:20:2468 | SSA phi read(x) | UseUseExplosion.rb:20:1606:20:2484 | SSA phi read(x) | +| UseUseExplosion.rb:20:1627:20:2468 | SSA phi read(self) | UseUseExplosion.rb:20:1622:20:2468 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1627:20:2468 | SSA phi read(x) | UseUseExplosion.rb:20:1622:20:2468 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1627:20:2468 | if ... | UseUseExplosion.rb:20:1622:20:2468 | then ... | | UseUseExplosion.rb:20:1631:20:1635 | [post] self | UseUseExplosion.rb:20:1652:20:1656 | self | | UseUseExplosion.rb:20:1631:20:1635 | [post] self | UseUseExplosion.rb:20:2459:20:2464 | self | @@ -980,9 +1134,11 @@ | UseUseExplosion.rb:20:1631:20:1635 | self | UseUseExplosion.rb:20:2459:20:2464 | self | | UseUseExplosion.rb:20:1631:20:1640 | ... > ... | UseUseExplosion.rb:20:1630:20:1641 | [false] ( ... ) | | UseUseExplosion.rb:20:1631:20:1640 | ... > ... | UseUseExplosion.rb:20:1630:20:1641 | [true] ( ... ) | +| UseUseExplosion.rb:20:1643:20:2452 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1627:20:2468 | SSA phi read(self) | +| UseUseExplosion.rb:20:1643:20:2452 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1627:20:2468 | SSA phi read(x) | | UseUseExplosion.rb:20:1643:20:2452 | then ... | UseUseExplosion.rb:20:1627:20:2468 | if ... | -| UseUseExplosion.rb:20:1648:20:2452 | SSA phi read(self) | UseUseExplosion.rb:20:1627:20:2468 | SSA phi read(self) | -| UseUseExplosion.rb:20:1648:20:2452 | SSA phi read(x) | UseUseExplosion.rb:20:1627:20:2468 | SSA phi read(x) | +| UseUseExplosion.rb:20:1648:20:2452 | SSA phi read(self) | UseUseExplosion.rb:20:1643:20:2452 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1648:20:2452 | SSA phi read(x) | UseUseExplosion.rb:20:1643:20:2452 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1648:20:2452 | if ... | UseUseExplosion.rb:20:1643:20:2452 | then ... | | UseUseExplosion.rb:20:1652:20:1656 | [post] self | UseUseExplosion.rb:20:1673:20:1677 | self | | UseUseExplosion.rb:20:1652:20:1656 | [post] self | UseUseExplosion.rb:20:2443:20:2448 | self | @@ -990,9 +1146,11 @@ | UseUseExplosion.rb:20:1652:20:1656 | self | UseUseExplosion.rb:20:2443:20:2448 | self | | UseUseExplosion.rb:20:1652:20:1661 | ... > ... | UseUseExplosion.rb:20:1651:20:1662 | [false] ( ... ) | | UseUseExplosion.rb:20:1652:20:1661 | ... > ... | UseUseExplosion.rb:20:1651:20:1662 | [true] ( ... ) | +| UseUseExplosion.rb:20:1664:20:2436 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1648:20:2452 | SSA phi read(self) | +| UseUseExplosion.rb:20:1664:20:2436 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1648:20:2452 | SSA phi read(x) | | UseUseExplosion.rb:20:1664:20:2436 | then ... | UseUseExplosion.rb:20:1648:20:2452 | if ... | -| UseUseExplosion.rb:20:1669:20:2436 | SSA phi read(self) | UseUseExplosion.rb:20:1648:20:2452 | SSA phi read(self) | -| UseUseExplosion.rb:20:1669:20:2436 | SSA phi read(x) | UseUseExplosion.rb:20:1648:20:2452 | SSA phi read(x) | +| UseUseExplosion.rb:20:1669:20:2436 | SSA phi read(self) | UseUseExplosion.rb:20:1664:20:2436 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1669:20:2436 | SSA phi read(x) | UseUseExplosion.rb:20:1664:20:2436 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1669:20:2436 | if ... | UseUseExplosion.rb:20:1664:20:2436 | then ... | | UseUseExplosion.rb:20:1673:20:1677 | [post] self | UseUseExplosion.rb:20:1694:20:1698 | self | | UseUseExplosion.rb:20:1673:20:1677 | [post] self | UseUseExplosion.rb:20:2427:20:2432 | self | @@ -1000,9 +1158,11 @@ | UseUseExplosion.rb:20:1673:20:1677 | self | UseUseExplosion.rb:20:2427:20:2432 | self | | UseUseExplosion.rb:20:1673:20:1682 | ... > ... | UseUseExplosion.rb:20:1672:20:1683 | [false] ( ... ) | | UseUseExplosion.rb:20:1673:20:1682 | ... > ... | UseUseExplosion.rb:20:1672:20:1683 | [true] ( ... ) | +| UseUseExplosion.rb:20:1685:20:2420 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1669:20:2436 | SSA phi read(self) | +| UseUseExplosion.rb:20:1685:20:2420 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1669:20:2436 | SSA phi read(x) | | UseUseExplosion.rb:20:1685:20:2420 | then ... | UseUseExplosion.rb:20:1669:20:2436 | if ... | -| UseUseExplosion.rb:20:1690:20:2420 | SSA phi read(self) | UseUseExplosion.rb:20:1669:20:2436 | SSA phi read(self) | -| UseUseExplosion.rb:20:1690:20:2420 | SSA phi read(x) | UseUseExplosion.rb:20:1669:20:2436 | SSA phi read(x) | +| UseUseExplosion.rb:20:1690:20:2420 | SSA phi read(self) | UseUseExplosion.rb:20:1685:20:2420 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1690:20:2420 | SSA phi read(x) | UseUseExplosion.rb:20:1685:20:2420 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1690:20:2420 | if ... | UseUseExplosion.rb:20:1685:20:2420 | then ... | | UseUseExplosion.rb:20:1694:20:1698 | [post] self | UseUseExplosion.rb:20:1715:20:1719 | self | | UseUseExplosion.rb:20:1694:20:1698 | [post] self | UseUseExplosion.rb:20:2411:20:2416 | self | @@ -1010,9 +1170,11 @@ | UseUseExplosion.rb:20:1694:20:1698 | self | UseUseExplosion.rb:20:2411:20:2416 | self | | UseUseExplosion.rb:20:1694:20:1703 | ... > ... | UseUseExplosion.rb:20:1693:20:1704 | [false] ( ... ) | | UseUseExplosion.rb:20:1694:20:1703 | ... > ... | UseUseExplosion.rb:20:1693:20:1704 | [true] ( ... ) | +| UseUseExplosion.rb:20:1706:20:2404 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1690:20:2420 | SSA phi read(self) | +| UseUseExplosion.rb:20:1706:20:2404 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1690:20:2420 | SSA phi read(x) | | UseUseExplosion.rb:20:1706:20:2404 | then ... | UseUseExplosion.rb:20:1690:20:2420 | if ... | -| UseUseExplosion.rb:20:1711:20:2404 | SSA phi read(self) | UseUseExplosion.rb:20:1690:20:2420 | SSA phi read(self) | -| UseUseExplosion.rb:20:1711:20:2404 | SSA phi read(x) | UseUseExplosion.rb:20:1690:20:2420 | SSA phi read(x) | +| UseUseExplosion.rb:20:1711:20:2404 | SSA phi read(self) | UseUseExplosion.rb:20:1706:20:2404 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1711:20:2404 | SSA phi read(x) | UseUseExplosion.rb:20:1706:20:2404 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1711:20:2404 | if ... | UseUseExplosion.rb:20:1706:20:2404 | then ... | | UseUseExplosion.rb:20:1715:20:1719 | [post] self | UseUseExplosion.rb:20:1736:20:1740 | self | | UseUseExplosion.rb:20:1715:20:1719 | [post] self | UseUseExplosion.rb:20:2395:20:2400 | self | @@ -1020,9 +1182,11 @@ | UseUseExplosion.rb:20:1715:20:1719 | self | UseUseExplosion.rb:20:2395:20:2400 | self | | UseUseExplosion.rb:20:1715:20:1724 | ... > ... | UseUseExplosion.rb:20:1714:20:1725 | [false] ( ... ) | | UseUseExplosion.rb:20:1715:20:1724 | ... > ... | UseUseExplosion.rb:20:1714:20:1725 | [true] ( ... ) | +| UseUseExplosion.rb:20:1727:20:2388 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1711:20:2404 | SSA phi read(self) | +| UseUseExplosion.rb:20:1727:20:2388 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1711:20:2404 | SSA phi read(x) | | UseUseExplosion.rb:20:1727:20:2388 | then ... | UseUseExplosion.rb:20:1711:20:2404 | if ... | -| UseUseExplosion.rb:20:1732:20:2388 | SSA phi read(self) | UseUseExplosion.rb:20:1711:20:2404 | SSA phi read(self) | -| UseUseExplosion.rb:20:1732:20:2388 | SSA phi read(x) | UseUseExplosion.rb:20:1711:20:2404 | SSA phi read(x) | +| UseUseExplosion.rb:20:1732:20:2388 | SSA phi read(self) | UseUseExplosion.rb:20:1727:20:2388 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1732:20:2388 | SSA phi read(x) | UseUseExplosion.rb:20:1727:20:2388 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1732:20:2388 | if ... | UseUseExplosion.rb:20:1727:20:2388 | then ... | | UseUseExplosion.rb:20:1736:20:1740 | [post] self | UseUseExplosion.rb:20:1757:20:1761 | self | | UseUseExplosion.rb:20:1736:20:1740 | [post] self | UseUseExplosion.rb:20:2379:20:2384 | self | @@ -1030,9 +1194,11 @@ | UseUseExplosion.rb:20:1736:20:1740 | self | UseUseExplosion.rb:20:2379:20:2384 | self | | UseUseExplosion.rb:20:1736:20:1745 | ... > ... | UseUseExplosion.rb:20:1735:20:1746 | [false] ( ... ) | | UseUseExplosion.rb:20:1736:20:1745 | ... > ... | UseUseExplosion.rb:20:1735:20:1746 | [true] ( ... ) | +| UseUseExplosion.rb:20:1748:20:2372 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1732:20:2388 | SSA phi read(self) | +| UseUseExplosion.rb:20:1748:20:2372 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1732:20:2388 | SSA phi read(x) | | UseUseExplosion.rb:20:1748:20:2372 | then ... | UseUseExplosion.rb:20:1732:20:2388 | if ... | -| UseUseExplosion.rb:20:1753:20:2372 | SSA phi read(self) | UseUseExplosion.rb:20:1732:20:2388 | SSA phi read(self) | -| UseUseExplosion.rb:20:1753:20:2372 | SSA phi read(x) | UseUseExplosion.rb:20:1732:20:2388 | SSA phi read(x) | +| UseUseExplosion.rb:20:1753:20:2372 | SSA phi read(self) | UseUseExplosion.rb:20:1748:20:2372 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1753:20:2372 | SSA phi read(x) | UseUseExplosion.rb:20:1748:20:2372 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1753:20:2372 | if ... | UseUseExplosion.rb:20:1748:20:2372 | then ... | | UseUseExplosion.rb:20:1757:20:1761 | [post] self | UseUseExplosion.rb:20:1778:20:1782 | self | | UseUseExplosion.rb:20:1757:20:1761 | [post] self | UseUseExplosion.rb:20:2363:20:2368 | self | @@ -1040,9 +1206,11 @@ | UseUseExplosion.rb:20:1757:20:1761 | self | UseUseExplosion.rb:20:2363:20:2368 | self | | UseUseExplosion.rb:20:1757:20:1766 | ... > ... | UseUseExplosion.rb:20:1756:20:1767 | [false] ( ... ) | | UseUseExplosion.rb:20:1757:20:1766 | ... > ... | UseUseExplosion.rb:20:1756:20:1767 | [true] ( ... ) | +| UseUseExplosion.rb:20:1769:20:2356 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1753:20:2372 | SSA phi read(self) | +| UseUseExplosion.rb:20:1769:20:2356 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1753:20:2372 | SSA phi read(x) | | UseUseExplosion.rb:20:1769:20:2356 | then ... | UseUseExplosion.rb:20:1753:20:2372 | if ... | -| UseUseExplosion.rb:20:1774:20:2356 | SSA phi read(self) | UseUseExplosion.rb:20:1753:20:2372 | SSA phi read(self) | -| UseUseExplosion.rb:20:1774:20:2356 | SSA phi read(x) | UseUseExplosion.rb:20:1753:20:2372 | SSA phi read(x) | +| UseUseExplosion.rb:20:1774:20:2356 | SSA phi read(self) | UseUseExplosion.rb:20:1769:20:2356 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1774:20:2356 | SSA phi read(x) | UseUseExplosion.rb:20:1769:20:2356 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1774:20:2356 | if ... | UseUseExplosion.rb:20:1769:20:2356 | then ... | | UseUseExplosion.rb:20:1778:20:1782 | [post] self | UseUseExplosion.rb:20:1799:20:1803 | self | | UseUseExplosion.rb:20:1778:20:1782 | [post] self | UseUseExplosion.rb:20:2347:20:2352 | self | @@ -1050,9 +1218,11 @@ | UseUseExplosion.rb:20:1778:20:1782 | self | UseUseExplosion.rb:20:2347:20:2352 | self | | UseUseExplosion.rb:20:1778:20:1787 | ... > ... | UseUseExplosion.rb:20:1777:20:1788 | [false] ( ... ) | | UseUseExplosion.rb:20:1778:20:1787 | ... > ... | UseUseExplosion.rb:20:1777:20:1788 | [true] ( ... ) | +| UseUseExplosion.rb:20:1790:20:2340 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1774:20:2356 | SSA phi read(self) | +| UseUseExplosion.rb:20:1790:20:2340 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1774:20:2356 | SSA phi read(x) | | UseUseExplosion.rb:20:1790:20:2340 | then ... | UseUseExplosion.rb:20:1774:20:2356 | if ... | -| UseUseExplosion.rb:20:1795:20:2340 | SSA phi read(self) | UseUseExplosion.rb:20:1774:20:2356 | SSA phi read(self) | -| UseUseExplosion.rb:20:1795:20:2340 | SSA phi read(x) | UseUseExplosion.rb:20:1774:20:2356 | SSA phi read(x) | +| UseUseExplosion.rb:20:1795:20:2340 | SSA phi read(self) | UseUseExplosion.rb:20:1790:20:2340 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1795:20:2340 | SSA phi read(x) | UseUseExplosion.rb:20:1790:20:2340 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1795:20:2340 | if ... | UseUseExplosion.rb:20:1790:20:2340 | then ... | | UseUseExplosion.rb:20:1799:20:1803 | [post] self | UseUseExplosion.rb:20:1820:20:1824 | self | | UseUseExplosion.rb:20:1799:20:1803 | [post] self | UseUseExplosion.rb:20:2331:20:2336 | self | @@ -1060,9 +1230,11 @@ | UseUseExplosion.rb:20:1799:20:1803 | self | UseUseExplosion.rb:20:2331:20:2336 | self | | UseUseExplosion.rb:20:1799:20:1808 | ... > ... | UseUseExplosion.rb:20:1798:20:1809 | [false] ( ... ) | | UseUseExplosion.rb:20:1799:20:1808 | ... > ... | UseUseExplosion.rb:20:1798:20:1809 | [true] ( ... ) | +| UseUseExplosion.rb:20:1811:20:2324 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1795:20:2340 | SSA phi read(self) | +| UseUseExplosion.rb:20:1811:20:2324 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1795:20:2340 | SSA phi read(x) | | UseUseExplosion.rb:20:1811:20:2324 | then ... | UseUseExplosion.rb:20:1795:20:2340 | if ... | -| UseUseExplosion.rb:20:1816:20:2324 | SSA phi read(self) | UseUseExplosion.rb:20:1795:20:2340 | SSA phi read(self) | -| UseUseExplosion.rb:20:1816:20:2324 | SSA phi read(x) | UseUseExplosion.rb:20:1795:20:2340 | SSA phi read(x) | +| UseUseExplosion.rb:20:1816:20:2324 | SSA phi read(self) | UseUseExplosion.rb:20:1811:20:2324 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1816:20:2324 | SSA phi read(x) | UseUseExplosion.rb:20:1811:20:2324 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1816:20:2324 | if ... | UseUseExplosion.rb:20:1811:20:2324 | then ... | | UseUseExplosion.rb:20:1820:20:1824 | [post] self | UseUseExplosion.rb:20:1841:20:1845 | self | | UseUseExplosion.rb:20:1820:20:1824 | [post] self | UseUseExplosion.rb:20:2315:20:2320 | self | @@ -1070,9 +1242,11 @@ | UseUseExplosion.rb:20:1820:20:1824 | self | UseUseExplosion.rb:20:2315:20:2320 | self | | UseUseExplosion.rb:20:1820:20:1829 | ... > ... | UseUseExplosion.rb:20:1819:20:1830 | [false] ( ... ) | | UseUseExplosion.rb:20:1820:20:1829 | ... > ... | UseUseExplosion.rb:20:1819:20:1830 | [true] ( ... ) | +| UseUseExplosion.rb:20:1832:20:2308 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1816:20:2324 | SSA phi read(self) | +| UseUseExplosion.rb:20:1832:20:2308 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1816:20:2324 | SSA phi read(x) | | UseUseExplosion.rb:20:1832:20:2308 | then ... | UseUseExplosion.rb:20:1816:20:2324 | if ... | -| UseUseExplosion.rb:20:1837:20:2308 | SSA phi read(self) | UseUseExplosion.rb:20:1816:20:2324 | SSA phi read(self) | -| UseUseExplosion.rb:20:1837:20:2308 | SSA phi read(x) | UseUseExplosion.rb:20:1816:20:2324 | SSA phi read(x) | +| UseUseExplosion.rb:20:1837:20:2308 | SSA phi read(self) | UseUseExplosion.rb:20:1832:20:2308 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1837:20:2308 | SSA phi read(x) | UseUseExplosion.rb:20:1832:20:2308 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1837:20:2308 | if ... | UseUseExplosion.rb:20:1832:20:2308 | then ... | | UseUseExplosion.rb:20:1841:20:1845 | [post] self | UseUseExplosion.rb:20:1862:20:1866 | self | | UseUseExplosion.rb:20:1841:20:1845 | [post] self | UseUseExplosion.rb:20:2299:20:2304 | self | @@ -1080,9 +1254,11 @@ | UseUseExplosion.rb:20:1841:20:1845 | self | UseUseExplosion.rb:20:2299:20:2304 | self | | UseUseExplosion.rb:20:1841:20:1850 | ... > ... | UseUseExplosion.rb:20:1840:20:1851 | [false] ( ... ) | | UseUseExplosion.rb:20:1841:20:1850 | ... > ... | UseUseExplosion.rb:20:1840:20:1851 | [true] ( ... ) | +| UseUseExplosion.rb:20:1853:20:2292 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1837:20:2308 | SSA phi read(self) | +| UseUseExplosion.rb:20:1853:20:2292 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1837:20:2308 | SSA phi read(x) | | UseUseExplosion.rb:20:1853:20:2292 | then ... | UseUseExplosion.rb:20:1837:20:2308 | if ... | -| UseUseExplosion.rb:20:1858:20:2292 | SSA phi read(self) | UseUseExplosion.rb:20:1837:20:2308 | SSA phi read(self) | -| UseUseExplosion.rb:20:1858:20:2292 | SSA phi read(x) | UseUseExplosion.rb:20:1837:20:2308 | SSA phi read(x) | +| UseUseExplosion.rb:20:1858:20:2292 | SSA phi read(self) | UseUseExplosion.rb:20:1853:20:2292 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1858:20:2292 | SSA phi read(x) | UseUseExplosion.rb:20:1853:20:2292 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1858:20:2292 | if ... | UseUseExplosion.rb:20:1853:20:2292 | then ... | | UseUseExplosion.rb:20:1862:20:1866 | [post] self | UseUseExplosion.rb:20:1883:20:1887 | self | | UseUseExplosion.rb:20:1862:20:1866 | [post] self | UseUseExplosion.rb:20:2283:20:2288 | self | @@ -1090,9 +1266,11 @@ | UseUseExplosion.rb:20:1862:20:1866 | self | UseUseExplosion.rb:20:2283:20:2288 | self | | UseUseExplosion.rb:20:1862:20:1871 | ... > ... | UseUseExplosion.rb:20:1861:20:1872 | [false] ( ... ) | | UseUseExplosion.rb:20:1862:20:1871 | ... > ... | UseUseExplosion.rb:20:1861:20:1872 | [true] ( ... ) | +| UseUseExplosion.rb:20:1874:20:2276 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1858:20:2292 | SSA phi read(self) | +| UseUseExplosion.rb:20:1874:20:2276 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1858:20:2292 | SSA phi read(x) | | UseUseExplosion.rb:20:1874:20:2276 | then ... | UseUseExplosion.rb:20:1858:20:2292 | if ... | -| UseUseExplosion.rb:20:1879:20:2276 | SSA phi read(self) | UseUseExplosion.rb:20:1858:20:2292 | SSA phi read(self) | -| UseUseExplosion.rb:20:1879:20:2276 | SSA phi read(x) | UseUseExplosion.rb:20:1858:20:2292 | SSA phi read(x) | +| UseUseExplosion.rb:20:1879:20:2276 | SSA phi read(self) | UseUseExplosion.rb:20:1874:20:2276 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1879:20:2276 | SSA phi read(x) | UseUseExplosion.rb:20:1874:20:2276 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1879:20:2276 | if ... | UseUseExplosion.rb:20:1874:20:2276 | then ... | | UseUseExplosion.rb:20:1883:20:1887 | [post] self | UseUseExplosion.rb:20:1904:20:1908 | self | | UseUseExplosion.rb:20:1883:20:1887 | [post] self | UseUseExplosion.rb:20:2267:20:2272 | self | @@ -1100,9 +1278,11 @@ | UseUseExplosion.rb:20:1883:20:1887 | self | UseUseExplosion.rb:20:2267:20:2272 | self | | UseUseExplosion.rb:20:1883:20:1892 | ... > ... | UseUseExplosion.rb:20:1882:20:1893 | [false] ( ... ) | | UseUseExplosion.rb:20:1883:20:1892 | ... > ... | UseUseExplosion.rb:20:1882:20:1893 | [true] ( ... ) | +| UseUseExplosion.rb:20:1895:20:2260 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1879:20:2276 | SSA phi read(self) | +| UseUseExplosion.rb:20:1895:20:2260 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1879:20:2276 | SSA phi read(x) | | UseUseExplosion.rb:20:1895:20:2260 | then ... | UseUseExplosion.rb:20:1879:20:2276 | if ... | -| UseUseExplosion.rb:20:1900:20:2260 | SSA phi read(self) | UseUseExplosion.rb:20:1879:20:2276 | SSA phi read(self) | -| UseUseExplosion.rb:20:1900:20:2260 | SSA phi read(x) | UseUseExplosion.rb:20:1879:20:2276 | SSA phi read(x) | +| UseUseExplosion.rb:20:1900:20:2260 | SSA phi read(self) | UseUseExplosion.rb:20:1895:20:2260 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1900:20:2260 | SSA phi read(x) | UseUseExplosion.rb:20:1895:20:2260 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1900:20:2260 | if ... | UseUseExplosion.rb:20:1895:20:2260 | then ... | | UseUseExplosion.rb:20:1904:20:1908 | [post] self | UseUseExplosion.rb:20:1925:20:1929 | self | | UseUseExplosion.rb:20:1904:20:1908 | [post] self | UseUseExplosion.rb:20:2251:20:2256 | self | @@ -1110,9 +1290,11 @@ | UseUseExplosion.rb:20:1904:20:1908 | self | UseUseExplosion.rb:20:2251:20:2256 | self | | UseUseExplosion.rb:20:1904:20:1913 | ... > ... | UseUseExplosion.rb:20:1903:20:1914 | [false] ( ... ) | | UseUseExplosion.rb:20:1904:20:1913 | ... > ... | UseUseExplosion.rb:20:1903:20:1914 | [true] ( ... ) | +| UseUseExplosion.rb:20:1916:20:2244 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1900:20:2260 | SSA phi read(self) | +| UseUseExplosion.rb:20:1916:20:2244 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1900:20:2260 | SSA phi read(x) | | UseUseExplosion.rb:20:1916:20:2244 | then ... | UseUseExplosion.rb:20:1900:20:2260 | if ... | -| UseUseExplosion.rb:20:1921:20:2244 | SSA phi read(self) | UseUseExplosion.rb:20:1900:20:2260 | SSA phi read(self) | -| UseUseExplosion.rb:20:1921:20:2244 | SSA phi read(x) | UseUseExplosion.rb:20:1900:20:2260 | SSA phi read(x) | +| UseUseExplosion.rb:20:1921:20:2244 | SSA phi read(self) | UseUseExplosion.rb:20:1916:20:2244 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1921:20:2244 | SSA phi read(x) | UseUseExplosion.rb:20:1916:20:2244 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1921:20:2244 | if ... | UseUseExplosion.rb:20:1916:20:2244 | then ... | | UseUseExplosion.rb:20:1925:20:1929 | [post] self | UseUseExplosion.rb:20:1945:20:1949 | self | | UseUseExplosion.rb:20:1925:20:1929 | [post] self | UseUseExplosion.rb:20:2235:20:2240 | self | @@ -1120,9 +1302,11 @@ | UseUseExplosion.rb:20:1925:20:1929 | self | UseUseExplosion.rb:20:2235:20:2240 | self | | UseUseExplosion.rb:20:1925:20:1933 | ... > ... | UseUseExplosion.rb:20:1924:20:1934 | [false] ( ... ) | | UseUseExplosion.rb:20:1925:20:1933 | ... > ... | UseUseExplosion.rb:20:1924:20:1934 | [true] ( ... ) | +| UseUseExplosion.rb:20:1936:20:2228 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1921:20:2244 | SSA phi read(self) | +| UseUseExplosion.rb:20:1936:20:2228 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1921:20:2244 | SSA phi read(x) | | UseUseExplosion.rb:20:1936:20:2228 | then ... | UseUseExplosion.rb:20:1921:20:2244 | if ... | -| UseUseExplosion.rb:20:1941:20:2228 | SSA phi read(self) | UseUseExplosion.rb:20:1921:20:2244 | SSA phi read(self) | -| UseUseExplosion.rb:20:1941:20:2228 | SSA phi read(x) | UseUseExplosion.rb:20:1921:20:2244 | SSA phi read(x) | +| UseUseExplosion.rb:20:1941:20:2228 | SSA phi read(self) | UseUseExplosion.rb:20:1936:20:2228 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1941:20:2228 | SSA phi read(x) | UseUseExplosion.rb:20:1936:20:2228 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1941:20:2228 | if ... | UseUseExplosion.rb:20:1936:20:2228 | then ... | | UseUseExplosion.rb:20:1945:20:1949 | [post] self | UseUseExplosion.rb:20:1965:20:1969 | self | | UseUseExplosion.rb:20:1945:20:1949 | [post] self | UseUseExplosion.rb:20:2219:20:2224 | self | @@ -1130,9 +1314,11 @@ | UseUseExplosion.rb:20:1945:20:1949 | self | UseUseExplosion.rb:20:2219:20:2224 | self | | UseUseExplosion.rb:20:1945:20:1953 | ... > ... | UseUseExplosion.rb:20:1944:20:1954 | [false] ( ... ) | | UseUseExplosion.rb:20:1945:20:1953 | ... > ... | UseUseExplosion.rb:20:1944:20:1954 | [true] ( ... ) | +| UseUseExplosion.rb:20:1956:20:2212 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1941:20:2228 | SSA phi read(self) | +| UseUseExplosion.rb:20:1956:20:2212 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1941:20:2228 | SSA phi read(x) | | UseUseExplosion.rb:20:1956:20:2212 | then ... | UseUseExplosion.rb:20:1941:20:2228 | if ... | -| UseUseExplosion.rb:20:1961:20:2212 | SSA phi read(self) | UseUseExplosion.rb:20:1941:20:2228 | SSA phi read(self) | -| UseUseExplosion.rb:20:1961:20:2212 | SSA phi read(x) | UseUseExplosion.rb:20:1941:20:2228 | SSA phi read(x) | +| UseUseExplosion.rb:20:1961:20:2212 | SSA phi read(self) | UseUseExplosion.rb:20:1956:20:2212 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1961:20:2212 | SSA phi read(x) | UseUseExplosion.rb:20:1956:20:2212 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1961:20:2212 | if ... | UseUseExplosion.rb:20:1956:20:2212 | then ... | | UseUseExplosion.rb:20:1965:20:1969 | [post] self | UseUseExplosion.rb:20:1985:20:1989 | self | | UseUseExplosion.rb:20:1965:20:1969 | [post] self | UseUseExplosion.rb:20:2203:20:2208 | self | @@ -1140,9 +1326,11 @@ | UseUseExplosion.rb:20:1965:20:1969 | self | UseUseExplosion.rb:20:2203:20:2208 | self | | UseUseExplosion.rb:20:1965:20:1973 | ... > ... | UseUseExplosion.rb:20:1964:20:1974 | [false] ( ... ) | | UseUseExplosion.rb:20:1965:20:1973 | ... > ... | UseUseExplosion.rb:20:1964:20:1974 | [true] ( ... ) | +| UseUseExplosion.rb:20:1976:20:2196 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1961:20:2212 | SSA phi read(self) | +| UseUseExplosion.rb:20:1976:20:2196 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1961:20:2212 | SSA phi read(x) | | UseUseExplosion.rb:20:1976:20:2196 | then ... | UseUseExplosion.rb:20:1961:20:2212 | if ... | -| UseUseExplosion.rb:20:1981:20:2196 | SSA phi read(self) | UseUseExplosion.rb:20:1961:20:2212 | SSA phi read(self) | -| UseUseExplosion.rb:20:1981:20:2196 | SSA phi read(x) | UseUseExplosion.rb:20:1961:20:2212 | SSA phi read(x) | +| UseUseExplosion.rb:20:1981:20:2196 | SSA phi read(self) | UseUseExplosion.rb:20:1976:20:2196 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1981:20:2196 | SSA phi read(x) | UseUseExplosion.rb:20:1976:20:2196 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1981:20:2196 | if ... | UseUseExplosion.rb:20:1976:20:2196 | then ... | | UseUseExplosion.rb:20:1985:20:1989 | [post] self | UseUseExplosion.rb:20:2005:20:2009 | self | | UseUseExplosion.rb:20:1985:20:1989 | [post] self | UseUseExplosion.rb:20:2187:20:2192 | self | @@ -1150,9 +1338,11 @@ | UseUseExplosion.rb:20:1985:20:1989 | self | UseUseExplosion.rb:20:2187:20:2192 | self | | UseUseExplosion.rb:20:1985:20:1993 | ... > ... | UseUseExplosion.rb:20:1984:20:1994 | [false] ( ... ) | | UseUseExplosion.rb:20:1985:20:1993 | ... > ... | UseUseExplosion.rb:20:1984:20:1994 | [true] ( ... ) | +| UseUseExplosion.rb:20:1996:20:2180 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1981:20:2196 | SSA phi read(self) | +| UseUseExplosion.rb:20:1996:20:2180 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1981:20:2196 | SSA phi read(x) | | UseUseExplosion.rb:20:1996:20:2180 | then ... | UseUseExplosion.rb:20:1981:20:2196 | if ... | -| UseUseExplosion.rb:20:2001:20:2180 | SSA phi read(self) | UseUseExplosion.rb:20:1981:20:2196 | SSA phi read(self) | -| UseUseExplosion.rb:20:2001:20:2180 | SSA phi read(x) | UseUseExplosion.rb:20:1981:20:2196 | SSA phi read(x) | +| UseUseExplosion.rb:20:2001:20:2180 | SSA phi read(self) | UseUseExplosion.rb:20:1996:20:2180 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:2001:20:2180 | SSA phi read(x) | UseUseExplosion.rb:20:1996:20:2180 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:2001:20:2180 | if ... | UseUseExplosion.rb:20:1996:20:2180 | then ... | | UseUseExplosion.rb:20:2005:20:2009 | [post] self | UseUseExplosion.rb:20:2025:20:2029 | self | | UseUseExplosion.rb:20:2005:20:2009 | [post] self | UseUseExplosion.rb:20:2171:20:2176 | self | @@ -1160,9 +1350,11 @@ | UseUseExplosion.rb:20:2005:20:2009 | self | UseUseExplosion.rb:20:2171:20:2176 | self | | UseUseExplosion.rb:20:2005:20:2013 | ... > ... | UseUseExplosion.rb:20:2004:20:2014 | [false] ( ... ) | | UseUseExplosion.rb:20:2005:20:2013 | ... > ... | UseUseExplosion.rb:20:2004:20:2014 | [true] ( ... ) | +| UseUseExplosion.rb:20:2016:20:2164 | [input] SSA phi read(self) | UseUseExplosion.rb:20:2001:20:2180 | SSA phi read(self) | +| UseUseExplosion.rb:20:2016:20:2164 | [input] SSA phi read(x) | UseUseExplosion.rb:20:2001:20:2180 | SSA phi read(x) | | UseUseExplosion.rb:20:2016:20:2164 | then ... | UseUseExplosion.rb:20:2001:20:2180 | if ... | -| UseUseExplosion.rb:20:2021:20:2164 | SSA phi read(self) | UseUseExplosion.rb:20:2001:20:2180 | SSA phi read(self) | -| UseUseExplosion.rb:20:2021:20:2164 | SSA phi read(x) | UseUseExplosion.rb:20:2001:20:2180 | SSA phi read(x) | +| UseUseExplosion.rb:20:2021:20:2164 | SSA phi read(self) | UseUseExplosion.rb:20:2016:20:2164 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:2021:20:2164 | SSA phi read(x) | UseUseExplosion.rb:20:2016:20:2164 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:2021:20:2164 | if ... | UseUseExplosion.rb:20:2016:20:2164 | then ... | | UseUseExplosion.rb:20:2025:20:2029 | [post] self | UseUseExplosion.rb:20:2045:20:2049 | self | | UseUseExplosion.rb:20:2025:20:2029 | [post] self | UseUseExplosion.rb:20:2155:20:2160 | self | @@ -1170,9 +1362,11 @@ | UseUseExplosion.rb:20:2025:20:2029 | self | UseUseExplosion.rb:20:2155:20:2160 | self | | UseUseExplosion.rb:20:2025:20:2033 | ... > ... | UseUseExplosion.rb:20:2024:20:2034 | [false] ( ... ) | | UseUseExplosion.rb:20:2025:20:2033 | ... > ... | UseUseExplosion.rb:20:2024:20:2034 | [true] ( ... ) | +| UseUseExplosion.rb:20:2036:20:2148 | [input] SSA phi read(self) | UseUseExplosion.rb:20:2021:20:2164 | SSA phi read(self) | +| UseUseExplosion.rb:20:2036:20:2148 | [input] SSA phi read(x) | UseUseExplosion.rb:20:2021:20:2164 | SSA phi read(x) | | UseUseExplosion.rb:20:2036:20:2148 | then ... | UseUseExplosion.rb:20:2021:20:2164 | if ... | -| UseUseExplosion.rb:20:2041:20:2148 | SSA phi read(self) | UseUseExplosion.rb:20:2021:20:2164 | SSA phi read(self) | -| UseUseExplosion.rb:20:2041:20:2148 | SSA phi read(x) | UseUseExplosion.rb:20:2021:20:2164 | SSA phi read(x) | +| UseUseExplosion.rb:20:2041:20:2148 | SSA phi read(self) | UseUseExplosion.rb:20:2036:20:2148 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:2041:20:2148 | SSA phi read(x) | UseUseExplosion.rb:20:2036:20:2148 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:2041:20:2148 | if ... | UseUseExplosion.rb:20:2036:20:2148 | then ... | | UseUseExplosion.rb:20:2045:20:2049 | [post] self | UseUseExplosion.rb:20:2065:20:2069 | self | | UseUseExplosion.rb:20:2045:20:2049 | [post] self | UseUseExplosion.rb:20:2139:20:2144 | self | @@ -1180,9 +1374,11 @@ | UseUseExplosion.rb:20:2045:20:2049 | self | UseUseExplosion.rb:20:2139:20:2144 | self | | UseUseExplosion.rb:20:2045:20:2053 | ... > ... | UseUseExplosion.rb:20:2044:20:2054 | [false] ( ... ) | | UseUseExplosion.rb:20:2045:20:2053 | ... > ... | UseUseExplosion.rb:20:2044:20:2054 | [true] ( ... ) | +| UseUseExplosion.rb:20:2056:20:2132 | [input] SSA phi read(self) | UseUseExplosion.rb:20:2041:20:2148 | SSA phi read(self) | +| UseUseExplosion.rb:20:2056:20:2132 | [input] SSA phi read(x) | UseUseExplosion.rb:20:2041:20:2148 | SSA phi read(x) | | UseUseExplosion.rb:20:2056:20:2132 | then ... | UseUseExplosion.rb:20:2041:20:2148 | if ... | -| UseUseExplosion.rb:20:2061:20:2132 | SSA phi read(self) | UseUseExplosion.rb:20:2041:20:2148 | SSA phi read(self) | -| UseUseExplosion.rb:20:2061:20:2132 | SSA phi read(x) | UseUseExplosion.rb:20:2041:20:2148 | SSA phi read(x) | +| UseUseExplosion.rb:20:2061:20:2132 | SSA phi read(self) | UseUseExplosion.rb:20:2056:20:2132 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:2061:20:2132 | SSA phi read(x) | UseUseExplosion.rb:20:2056:20:2132 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:2061:20:2132 | if ... | UseUseExplosion.rb:20:2056:20:2132 | then ... | | UseUseExplosion.rb:20:2065:20:2069 | [post] self | UseUseExplosion.rb:20:2085:20:2089 | self | | UseUseExplosion.rb:20:2065:20:2069 | [post] self | UseUseExplosion.rb:20:2123:20:2128 | self | @@ -1190,213 +1386,417 @@ | UseUseExplosion.rb:20:2065:20:2069 | self | UseUseExplosion.rb:20:2123:20:2128 | self | | UseUseExplosion.rb:20:2065:20:2073 | ... > ... | UseUseExplosion.rb:20:2064:20:2074 | [false] ( ... ) | | UseUseExplosion.rb:20:2065:20:2073 | ... > ... | UseUseExplosion.rb:20:2064:20:2074 | [true] ( ... ) | +| UseUseExplosion.rb:20:2076:20:2116 | [input] SSA phi read(self) | UseUseExplosion.rb:20:2061:20:2132 | SSA phi read(self) | +| UseUseExplosion.rb:20:2076:20:2116 | [input] SSA phi read(x) | UseUseExplosion.rb:20:2061:20:2132 | SSA phi read(x) | | UseUseExplosion.rb:20:2076:20:2116 | then ... | UseUseExplosion.rb:20:2061:20:2132 | if ... | -| UseUseExplosion.rb:20:2081:20:2116 | SSA phi read(self) | UseUseExplosion.rb:20:2061:20:2132 | SSA phi read(self) | -| UseUseExplosion.rb:20:2081:20:2116 | SSA phi read(x) | UseUseExplosion.rb:20:2061:20:2132 | SSA phi read(x) | +| UseUseExplosion.rb:20:2081:20:2116 | SSA phi read(self) | UseUseExplosion.rb:20:2076:20:2116 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:2081:20:2116 | SSA phi read(x) | UseUseExplosion.rb:20:2076:20:2116 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:2081:20:2116 | if ... | UseUseExplosion.rb:20:2076:20:2116 | then ... | | UseUseExplosion.rb:20:2085:20:2089 | [post] self | UseUseExplosion.rb:20:2107:20:2112 | self | | UseUseExplosion.rb:20:2085:20:2089 | self | UseUseExplosion.rb:20:2107:20:2112 | self | | UseUseExplosion.rb:20:2085:20:2093 | ... > ... | UseUseExplosion.rb:20:2084:20:2094 | [false] ( ... ) | | UseUseExplosion.rb:20:2085:20:2093 | ... > ... | UseUseExplosion.rb:20:2084:20:2094 | [true] ( ... ) | +| UseUseExplosion.rb:20:2096:20:2099 | [input] SSA phi read(self) | UseUseExplosion.rb:20:2081:20:2116 | SSA phi read(self) | +| UseUseExplosion.rb:20:2096:20:2099 | [input] SSA phi read(x) | UseUseExplosion.rb:20:2081:20:2116 | SSA phi read(x) | | UseUseExplosion.rb:20:2096:20:2099 | then ... | UseUseExplosion.rb:20:2081:20:2116 | if ... | +| UseUseExplosion.rb:20:2102:20:2112 | [input] SSA phi read(self) | UseUseExplosion.rb:20:2081:20:2116 | SSA phi read(self) | +| UseUseExplosion.rb:20:2102:20:2112 | [input] SSA phi read(x) | UseUseExplosion.rb:20:2081:20:2116 | SSA phi read(x) | | UseUseExplosion.rb:20:2102:20:2112 | else ... | UseUseExplosion.rb:20:2081:20:2116 | if ... | | UseUseExplosion.rb:20:2107:20:2112 | call to use | UseUseExplosion.rb:20:2102:20:2112 | else ... | +| UseUseExplosion.rb:20:2118:20:2128 | [input] SSA phi read(self) | UseUseExplosion.rb:20:2061:20:2132 | SSA phi read(self) | +| UseUseExplosion.rb:20:2118:20:2128 | [input] SSA phi read(x) | UseUseExplosion.rb:20:2061:20:2132 | SSA phi read(x) | | UseUseExplosion.rb:20:2118:20:2128 | else ... | UseUseExplosion.rb:20:2061:20:2132 | if ... | | UseUseExplosion.rb:20:2123:20:2128 | call to use | UseUseExplosion.rb:20:2118:20:2128 | else ... | +| UseUseExplosion.rb:20:2134:20:2144 | [input] SSA phi read(self) | UseUseExplosion.rb:20:2041:20:2148 | SSA phi read(self) | +| UseUseExplosion.rb:20:2134:20:2144 | [input] SSA phi read(x) | UseUseExplosion.rb:20:2041:20:2148 | SSA phi read(x) | | UseUseExplosion.rb:20:2134:20:2144 | else ... | UseUseExplosion.rb:20:2041:20:2148 | if ... | | UseUseExplosion.rb:20:2139:20:2144 | call to use | UseUseExplosion.rb:20:2134:20:2144 | else ... | +| UseUseExplosion.rb:20:2150:20:2160 | [input] SSA phi read(self) | UseUseExplosion.rb:20:2021:20:2164 | SSA phi read(self) | +| UseUseExplosion.rb:20:2150:20:2160 | [input] SSA phi read(x) | UseUseExplosion.rb:20:2021:20:2164 | SSA phi read(x) | | UseUseExplosion.rb:20:2150:20:2160 | else ... | UseUseExplosion.rb:20:2021:20:2164 | if ... | | UseUseExplosion.rb:20:2155:20:2160 | call to use | UseUseExplosion.rb:20:2150:20:2160 | else ... | +| UseUseExplosion.rb:20:2166:20:2176 | [input] SSA phi read(self) | UseUseExplosion.rb:20:2001:20:2180 | SSA phi read(self) | +| UseUseExplosion.rb:20:2166:20:2176 | [input] SSA phi read(x) | UseUseExplosion.rb:20:2001:20:2180 | SSA phi read(x) | | UseUseExplosion.rb:20:2166:20:2176 | else ... | UseUseExplosion.rb:20:2001:20:2180 | if ... | | UseUseExplosion.rb:20:2171:20:2176 | call to use | UseUseExplosion.rb:20:2166:20:2176 | else ... | +| UseUseExplosion.rb:20:2182:20:2192 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1981:20:2196 | SSA phi read(self) | +| UseUseExplosion.rb:20:2182:20:2192 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1981:20:2196 | SSA phi read(x) | | UseUseExplosion.rb:20:2182:20:2192 | else ... | UseUseExplosion.rb:20:1981:20:2196 | if ... | | UseUseExplosion.rb:20:2187:20:2192 | call to use | UseUseExplosion.rb:20:2182:20:2192 | else ... | +| UseUseExplosion.rb:20:2198:20:2208 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1961:20:2212 | SSA phi read(self) | +| UseUseExplosion.rb:20:2198:20:2208 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1961:20:2212 | SSA phi read(x) | | UseUseExplosion.rb:20:2198:20:2208 | else ... | UseUseExplosion.rb:20:1961:20:2212 | if ... | | UseUseExplosion.rb:20:2203:20:2208 | call to use | UseUseExplosion.rb:20:2198:20:2208 | else ... | +| UseUseExplosion.rb:20:2214:20:2224 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1941:20:2228 | SSA phi read(self) | +| UseUseExplosion.rb:20:2214:20:2224 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1941:20:2228 | SSA phi read(x) | | UseUseExplosion.rb:20:2214:20:2224 | else ... | UseUseExplosion.rb:20:1941:20:2228 | if ... | | UseUseExplosion.rb:20:2219:20:2224 | call to use | UseUseExplosion.rb:20:2214:20:2224 | else ... | +| UseUseExplosion.rb:20:2230:20:2240 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1921:20:2244 | SSA phi read(self) | +| UseUseExplosion.rb:20:2230:20:2240 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1921:20:2244 | SSA phi read(x) | | UseUseExplosion.rb:20:2230:20:2240 | else ... | UseUseExplosion.rb:20:1921:20:2244 | if ... | | UseUseExplosion.rb:20:2235:20:2240 | call to use | UseUseExplosion.rb:20:2230:20:2240 | else ... | +| UseUseExplosion.rb:20:2246:20:2256 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1900:20:2260 | SSA phi read(self) | +| UseUseExplosion.rb:20:2246:20:2256 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1900:20:2260 | SSA phi read(x) | | UseUseExplosion.rb:20:2246:20:2256 | else ... | UseUseExplosion.rb:20:1900:20:2260 | if ... | | UseUseExplosion.rb:20:2251:20:2256 | call to use | UseUseExplosion.rb:20:2246:20:2256 | else ... | +| UseUseExplosion.rb:20:2262:20:2272 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1879:20:2276 | SSA phi read(self) | +| UseUseExplosion.rb:20:2262:20:2272 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1879:20:2276 | SSA phi read(x) | | UseUseExplosion.rb:20:2262:20:2272 | else ... | UseUseExplosion.rb:20:1879:20:2276 | if ... | | UseUseExplosion.rb:20:2267:20:2272 | call to use | UseUseExplosion.rb:20:2262:20:2272 | else ... | +| UseUseExplosion.rb:20:2278:20:2288 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1858:20:2292 | SSA phi read(self) | +| UseUseExplosion.rb:20:2278:20:2288 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1858:20:2292 | SSA phi read(x) | | UseUseExplosion.rb:20:2278:20:2288 | else ... | UseUseExplosion.rb:20:1858:20:2292 | if ... | | UseUseExplosion.rb:20:2283:20:2288 | call to use | UseUseExplosion.rb:20:2278:20:2288 | else ... | +| UseUseExplosion.rb:20:2294:20:2304 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1837:20:2308 | SSA phi read(self) | +| UseUseExplosion.rb:20:2294:20:2304 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1837:20:2308 | SSA phi read(x) | | UseUseExplosion.rb:20:2294:20:2304 | else ... | UseUseExplosion.rb:20:1837:20:2308 | if ... | | UseUseExplosion.rb:20:2299:20:2304 | call to use | UseUseExplosion.rb:20:2294:20:2304 | else ... | +| UseUseExplosion.rb:20:2310:20:2320 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1816:20:2324 | SSA phi read(self) | +| UseUseExplosion.rb:20:2310:20:2320 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1816:20:2324 | SSA phi read(x) | | UseUseExplosion.rb:20:2310:20:2320 | else ... | UseUseExplosion.rb:20:1816:20:2324 | if ... | | UseUseExplosion.rb:20:2315:20:2320 | call to use | UseUseExplosion.rb:20:2310:20:2320 | else ... | +| UseUseExplosion.rb:20:2326:20:2336 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1795:20:2340 | SSA phi read(self) | +| UseUseExplosion.rb:20:2326:20:2336 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1795:20:2340 | SSA phi read(x) | | UseUseExplosion.rb:20:2326:20:2336 | else ... | UseUseExplosion.rb:20:1795:20:2340 | if ... | | UseUseExplosion.rb:20:2331:20:2336 | call to use | UseUseExplosion.rb:20:2326:20:2336 | else ... | +| UseUseExplosion.rb:20:2342:20:2352 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1774:20:2356 | SSA phi read(self) | +| UseUseExplosion.rb:20:2342:20:2352 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1774:20:2356 | SSA phi read(x) | | UseUseExplosion.rb:20:2342:20:2352 | else ... | UseUseExplosion.rb:20:1774:20:2356 | if ... | | UseUseExplosion.rb:20:2347:20:2352 | call to use | UseUseExplosion.rb:20:2342:20:2352 | else ... | +| UseUseExplosion.rb:20:2358:20:2368 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1753:20:2372 | SSA phi read(self) | +| UseUseExplosion.rb:20:2358:20:2368 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1753:20:2372 | SSA phi read(x) | | UseUseExplosion.rb:20:2358:20:2368 | else ... | UseUseExplosion.rb:20:1753:20:2372 | if ... | | UseUseExplosion.rb:20:2363:20:2368 | call to use | UseUseExplosion.rb:20:2358:20:2368 | else ... | +| UseUseExplosion.rb:20:2374:20:2384 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1732:20:2388 | SSA phi read(self) | +| UseUseExplosion.rb:20:2374:20:2384 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1732:20:2388 | SSA phi read(x) | | UseUseExplosion.rb:20:2374:20:2384 | else ... | UseUseExplosion.rb:20:1732:20:2388 | if ... | | UseUseExplosion.rb:20:2379:20:2384 | call to use | UseUseExplosion.rb:20:2374:20:2384 | else ... | +| UseUseExplosion.rb:20:2390:20:2400 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1711:20:2404 | SSA phi read(self) | +| UseUseExplosion.rb:20:2390:20:2400 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1711:20:2404 | SSA phi read(x) | | UseUseExplosion.rb:20:2390:20:2400 | else ... | UseUseExplosion.rb:20:1711:20:2404 | if ... | | UseUseExplosion.rb:20:2395:20:2400 | call to use | UseUseExplosion.rb:20:2390:20:2400 | else ... | +| UseUseExplosion.rb:20:2406:20:2416 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1690:20:2420 | SSA phi read(self) | +| UseUseExplosion.rb:20:2406:20:2416 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1690:20:2420 | SSA phi read(x) | | UseUseExplosion.rb:20:2406:20:2416 | else ... | UseUseExplosion.rb:20:1690:20:2420 | if ... | | UseUseExplosion.rb:20:2411:20:2416 | call to use | UseUseExplosion.rb:20:2406:20:2416 | else ... | +| UseUseExplosion.rb:20:2422:20:2432 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1669:20:2436 | SSA phi read(self) | +| UseUseExplosion.rb:20:2422:20:2432 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1669:20:2436 | SSA phi read(x) | | UseUseExplosion.rb:20:2422:20:2432 | else ... | UseUseExplosion.rb:20:1669:20:2436 | if ... | | UseUseExplosion.rb:20:2427:20:2432 | call to use | UseUseExplosion.rb:20:2422:20:2432 | else ... | +| UseUseExplosion.rb:20:2438:20:2448 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1648:20:2452 | SSA phi read(self) | +| UseUseExplosion.rb:20:2438:20:2448 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1648:20:2452 | SSA phi read(x) | | UseUseExplosion.rb:20:2438:20:2448 | else ... | UseUseExplosion.rb:20:1648:20:2452 | if ... | | UseUseExplosion.rb:20:2443:20:2448 | call to use | UseUseExplosion.rb:20:2438:20:2448 | else ... | +| UseUseExplosion.rb:20:2454:20:2464 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1627:20:2468 | SSA phi read(self) | +| UseUseExplosion.rb:20:2454:20:2464 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1627:20:2468 | SSA phi read(x) | | UseUseExplosion.rb:20:2454:20:2464 | else ... | UseUseExplosion.rb:20:1627:20:2468 | if ... | | UseUseExplosion.rb:20:2459:20:2464 | call to use | UseUseExplosion.rb:20:2454:20:2464 | else ... | +| UseUseExplosion.rb:20:2470:20:2480 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1606:20:2484 | SSA phi read(self) | +| UseUseExplosion.rb:20:2470:20:2480 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1606:20:2484 | SSA phi read(x) | | UseUseExplosion.rb:20:2470:20:2480 | else ... | UseUseExplosion.rb:20:1606:20:2484 | if ... | | UseUseExplosion.rb:20:2475:20:2480 | call to use | UseUseExplosion.rb:20:2470:20:2480 | else ... | +| UseUseExplosion.rb:20:2486:20:2496 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1585:20:2500 | SSA phi read(self) | +| UseUseExplosion.rb:20:2486:20:2496 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1585:20:2500 | SSA phi read(x) | | UseUseExplosion.rb:20:2486:20:2496 | else ... | UseUseExplosion.rb:20:1585:20:2500 | if ... | | UseUseExplosion.rb:20:2491:20:2496 | call to use | UseUseExplosion.rb:20:2486:20:2496 | else ... | +| UseUseExplosion.rb:20:2502:20:2512 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1564:20:2516 | SSA phi read(self) | +| UseUseExplosion.rb:20:2502:20:2512 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1564:20:2516 | SSA phi read(x) | | UseUseExplosion.rb:20:2502:20:2512 | else ... | UseUseExplosion.rb:20:1564:20:2516 | if ... | | UseUseExplosion.rb:20:2507:20:2512 | call to use | UseUseExplosion.rb:20:2502:20:2512 | else ... | +| UseUseExplosion.rb:20:2518:20:2528 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1543:20:2532 | SSA phi read(self) | +| UseUseExplosion.rb:20:2518:20:2528 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1543:20:2532 | SSA phi read(x) | | UseUseExplosion.rb:20:2518:20:2528 | else ... | UseUseExplosion.rb:20:1543:20:2532 | if ... | | UseUseExplosion.rb:20:2523:20:2528 | call to use | UseUseExplosion.rb:20:2518:20:2528 | else ... | +| UseUseExplosion.rb:20:2534:20:2544 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1522:20:2548 | SSA phi read(self) | +| UseUseExplosion.rb:20:2534:20:2544 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1522:20:2548 | SSA phi read(x) | | UseUseExplosion.rb:20:2534:20:2544 | else ... | UseUseExplosion.rb:20:1522:20:2548 | if ... | | UseUseExplosion.rb:20:2539:20:2544 | call to use | UseUseExplosion.rb:20:2534:20:2544 | else ... | +| UseUseExplosion.rb:20:2550:20:2560 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1501:20:2564 | SSA phi read(self) | +| UseUseExplosion.rb:20:2550:20:2560 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1501:20:2564 | SSA phi read(x) | | UseUseExplosion.rb:20:2550:20:2560 | else ... | UseUseExplosion.rb:20:1501:20:2564 | if ... | | UseUseExplosion.rb:20:2555:20:2560 | call to use | UseUseExplosion.rb:20:2550:20:2560 | else ... | +| UseUseExplosion.rb:20:2566:20:2576 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1480:20:2580 | SSA phi read(self) | +| UseUseExplosion.rb:20:2566:20:2576 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1480:20:2580 | SSA phi read(x) | | UseUseExplosion.rb:20:2566:20:2576 | else ... | UseUseExplosion.rb:20:1480:20:2580 | if ... | | UseUseExplosion.rb:20:2571:20:2576 | call to use | UseUseExplosion.rb:20:2566:20:2576 | else ... | +| UseUseExplosion.rb:20:2582:20:2592 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1459:20:2596 | SSA phi read(self) | +| UseUseExplosion.rb:20:2582:20:2592 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1459:20:2596 | SSA phi read(x) | | UseUseExplosion.rb:20:2582:20:2592 | else ... | UseUseExplosion.rb:20:1459:20:2596 | if ... | | UseUseExplosion.rb:20:2587:20:2592 | call to use | UseUseExplosion.rb:20:2582:20:2592 | else ... | +| UseUseExplosion.rb:20:2598:20:2608 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1438:20:2612 | SSA phi read(self) | +| UseUseExplosion.rb:20:2598:20:2608 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1438:20:2612 | SSA phi read(x) | | UseUseExplosion.rb:20:2598:20:2608 | else ... | UseUseExplosion.rb:20:1438:20:2612 | if ... | | UseUseExplosion.rb:20:2603:20:2608 | call to use | UseUseExplosion.rb:20:2598:20:2608 | else ... | +| UseUseExplosion.rb:20:2614:20:2624 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1417:20:2628 | SSA phi read(self) | +| UseUseExplosion.rb:20:2614:20:2624 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1417:20:2628 | SSA phi read(x) | | UseUseExplosion.rb:20:2614:20:2624 | else ... | UseUseExplosion.rb:20:1417:20:2628 | if ... | | UseUseExplosion.rb:20:2619:20:2624 | call to use | UseUseExplosion.rb:20:2614:20:2624 | else ... | +| UseUseExplosion.rb:20:2630:20:2640 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1396:20:2644 | SSA phi read(self) | +| UseUseExplosion.rb:20:2630:20:2640 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1396:20:2644 | SSA phi read(x) | | UseUseExplosion.rb:20:2630:20:2640 | else ... | UseUseExplosion.rb:20:1396:20:2644 | if ... | | UseUseExplosion.rb:20:2635:20:2640 | call to use | UseUseExplosion.rb:20:2630:20:2640 | else ... | +| UseUseExplosion.rb:20:2646:20:2656 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1375:20:2660 | SSA phi read(self) | +| UseUseExplosion.rb:20:2646:20:2656 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1375:20:2660 | SSA phi read(x) | | UseUseExplosion.rb:20:2646:20:2656 | else ... | UseUseExplosion.rb:20:1375:20:2660 | if ... | | UseUseExplosion.rb:20:2651:20:2656 | call to use | UseUseExplosion.rb:20:2646:20:2656 | else ... | +| UseUseExplosion.rb:20:2662:20:2672 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1354:20:2676 | SSA phi read(self) | +| UseUseExplosion.rb:20:2662:20:2672 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1354:20:2676 | SSA phi read(x) | | UseUseExplosion.rb:20:2662:20:2672 | else ... | UseUseExplosion.rb:20:1354:20:2676 | if ... | | UseUseExplosion.rb:20:2667:20:2672 | call to use | UseUseExplosion.rb:20:2662:20:2672 | else ... | +| UseUseExplosion.rb:20:2678:20:2688 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1333:20:2692 | SSA phi read(self) | +| UseUseExplosion.rb:20:2678:20:2688 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1333:20:2692 | SSA phi read(x) | | UseUseExplosion.rb:20:2678:20:2688 | else ... | UseUseExplosion.rb:20:1333:20:2692 | if ... | | UseUseExplosion.rb:20:2683:20:2688 | call to use | UseUseExplosion.rb:20:2678:20:2688 | else ... | +| UseUseExplosion.rb:20:2694:20:2704 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1312:20:2708 | SSA phi read(self) | +| UseUseExplosion.rb:20:2694:20:2704 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1312:20:2708 | SSA phi read(x) | | UseUseExplosion.rb:20:2694:20:2704 | else ... | UseUseExplosion.rb:20:1312:20:2708 | if ... | | UseUseExplosion.rb:20:2699:20:2704 | call to use | UseUseExplosion.rb:20:2694:20:2704 | else ... | +| UseUseExplosion.rb:20:2710:20:2720 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1291:20:2724 | SSA phi read(self) | +| UseUseExplosion.rb:20:2710:20:2720 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1291:20:2724 | SSA phi read(x) | | UseUseExplosion.rb:20:2710:20:2720 | else ... | UseUseExplosion.rb:20:1291:20:2724 | if ... | | UseUseExplosion.rb:20:2715:20:2720 | call to use | UseUseExplosion.rb:20:2710:20:2720 | else ... | +| UseUseExplosion.rb:20:2726:20:2736 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1270:20:2740 | SSA phi read(self) | +| UseUseExplosion.rb:20:2726:20:2736 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1270:20:2740 | SSA phi read(x) | | UseUseExplosion.rb:20:2726:20:2736 | else ... | UseUseExplosion.rb:20:1270:20:2740 | if ... | | UseUseExplosion.rb:20:2731:20:2736 | call to use | UseUseExplosion.rb:20:2726:20:2736 | else ... | +| UseUseExplosion.rb:20:2742:20:2752 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1249:20:2756 | SSA phi read(self) | +| UseUseExplosion.rb:20:2742:20:2752 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1249:20:2756 | SSA phi read(x) | | UseUseExplosion.rb:20:2742:20:2752 | else ... | UseUseExplosion.rb:20:1249:20:2756 | if ... | | UseUseExplosion.rb:20:2747:20:2752 | call to use | UseUseExplosion.rb:20:2742:20:2752 | else ... | +| UseUseExplosion.rb:20:2758:20:2768 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1228:20:2772 | SSA phi read(self) | +| UseUseExplosion.rb:20:2758:20:2768 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1228:20:2772 | SSA phi read(x) | | UseUseExplosion.rb:20:2758:20:2768 | else ... | UseUseExplosion.rb:20:1228:20:2772 | if ... | | UseUseExplosion.rb:20:2763:20:2768 | call to use | UseUseExplosion.rb:20:2758:20:2768 | else ... | +| UseUseExplosion.rb:20:2774:20:2784 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1207:20:2788 | SSA phi read(self) | +| UseUseExplosion.rb:20:2774:20:2784 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1207:20:2788 | SSA phi read(x) | | UseUseExplosion.rb:20:2774:20:2784 | else ... | UseUseExplosion.rb:20:1207:20:2788 | if ... | | UseUseExplosion.rb:20:2779:20:2784 | call to use | UseUseExplosion.rb:20:2774:20:2784 | else ... | +| UseUseExplosion.rb:20:2790:20:2800 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1186:20:2804 | SSA phi read(self) | +| UseUseExplosion.rb:20:2790:20:2800 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1186:20:2804 | SSA phi read(x) | | UseUseExplosion.rb:20:2790:20:2800 | else ... | UseUseExplosion.rb:20:1186:20:2804 | if ... | | UseUseExplosion.rb:20:2795:20:2800 | call to use | UseUseExplosion.rb:20:2790:20:2800 | else ... | +| UseUseExplosion.rb:20:2806:20:2816 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1165:20:2820 | SSA phi read(self) | +| UseUseExplosion.rb:20:2806:20:2816 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1165:20:2820 | SSA phi read(x) | | UseUseExplosion.rb:20:2806:20:2816 | else ... | UseUseExplosion.rb:20:1165:20:2820 | if ... | | UseUseExplosion.rb:20:2811:20:2816 | call to use | UseUseExplosion.rb:20:2806:20:2816 | else ... | +| UseUseExplosion.rb:20:2822:20:2832 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1144:20:2836 | SSA phi read(self) | +| UseUseExplosion.rb:20:2822:20:2832 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1144:20:2836 | SSA phi read(x) | | UseUseExplosion.rb:20:2822:20:2832 | else ... | UseUseExplosion.rb:20:1144:20:2836 | if ... | | UseUseExplosion.rb:20:2827:20:2832 | call to use | UseUseExplosion.rb:20:2822:20:2832 | else ... | +| UseUseExplosion.rb:20:2838:20:2848 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1123:20:2852 | SSA phi read(self) | +| UseUseExplosion.rb:20:2838:20:2848 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1123:20:2852 | SSA phi read(x) | | UseUseExplosion.rb:20:2838:20:2848 | else ... | UseUseExplosion.rb:20:1123:20:2852 | if ... | | UseUseExplosion.rb:20:2843:20:2848 | call to use | UseUseExplosion.rb:20:2838:20:2848 | else ... | +| UseUseExplosion.rb:20:2854:20:2864 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1102:20:2868 | SSA phi read(self) | +| UseUseExplosion.rb:20:2854:20:2864 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1102:20:2868 | SSA phi read(x) | | UseUseExplosion.rb:20:2854:20:2864 | else ... | UseUseExplosion.rb:20:1102:20:2868 | if ... | | UseUseExplosion.rb:20:2859:20:2864 | call to use | UseUseExplosion.rb:20:2854:20:2864 | else ... | +| UseUseExplosion.rb:20:2870:20:2880 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1081:20:2884 | SSA phi read(self) | +| UseUseExplosion.rb:20:2870:20:2880 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1081:20:2884 | SSA phi read(x) | | UseUseExplosion.rb:20:2870:20:2880 | else ... | UseUseExplosion.rb:20:1081:20:2884 | if ... | | UseUseExplosion.rb:20:2875:20:2880 | call to use | UseUseExplosion.rb:20:2870:20:2880 | else ... | +| UseUseExplosion.rb:20:2886:20:2896 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1060:20:2900 | SSA phi read(self) | +| UseUseExplosion.rb:20:2886:20:2896 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1060:20:2900 | SSA phi read(x) | | UseUseExplosion.rb:20:2886:20:2896 | else ... | UseUseExplosion.rb:20:1060:20:2900 | if ... | | UseUseExplosion.rb:20:2891:20:2896 | call to use | UseUseExplosion.rb:20:2886:20:2896 | else ... | +| UseUseExplosion.rb:20:2902:20:2912 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1039:20:2916 | SSA phi read(self) | +| UseUseExplosion.rb:20:2902:20:2912 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1039:20:2916 | SSA phi read(x) | | UseUseExplosion.rb:20:2902:20:2912 | else ... | UseUseExplosion.rb:20:1039:20:2916 | if ... | | UseUseExplosion.rb:20:2907:20:2912 | call to use | UseUseExplosion.rb:20:2902:20:2912 | else ... | +| UseUseExplosion.rb:20:2918:20:2928 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1018:20:2932 | SSA phi read(self) | +| UseUseExplosion.rb:20:2918:20:2928 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1018:20:2932 | SSA phi read(x) | | UseUseExplosion.rb:20:2918:20:2928 | else ... | UseUseExplosion.rb:20:1018:20:2932 | if ... | | UseUseExplosion.rb:20:2923:20:2928 | call to use | UseUseExplosion.rb:20:2918:20:2928 | else ... | +| UseUseExplosion.rb:20:2934:20:2944 | [input] SSA phi read(self) | UseUseExplosion.rb:20:997:20:2948 | SSA phi read(self) | +| UseUseExplosion.rb:20:2934:20:2944 | [input] SSA phi read(x) | UseUseExplosion.rb:20:997:20:2948 | SSA phi read(x) | | UseUseExplosion.rb:20:2934:20:2944 | else ... | UseUseExplosion.rb:20:997:20:2948 | if ... | | UseUseExplosion.rb:20:2939:20:2944 | call to use | UseUseExplosion.rb:20:2934:20:2944 | else ... | +| UseUseExplosion.rb:20:2950:20:2960 | [input] SSA phi read(self) | UseUseExplosion.rb:20:976:20:2964 | SSA phi read(self) | +| UseUseExplosion.rb:20:2950:20:2960 | [input] SSA phi read(x) | UseUseExplosion.rb:20:976:20:2964 | SSA phi read(x) | | UseUseExplosion.rb:20:2950:20:2960 | else ... | UseUseExplosion.rb:20:976:20:2964 | if ... | | UseUseExplosion.rb:20:2955:20:2960 | call to use | UseUseExplosion.rb:20:2950:20:2960 | else ... | +| UseUseExplosion.rb:20:2966:20:2976 | [input] SSA phi read(self) | UseUseExplosion.rb:20:955:20:2980 | SSA phi read(self) | +| UseUseExplosion.rb:20:2966:20:2976 | [input] SSA phi read(x) | UseUseExplosion.rb:20:955:20:2980 | SSA phi read(x) | | UseUseExplosion.rb:20:2966:20:2976 | else ... | UseUseExplosion.rb:20:955:20:2980 | if ... | | UseUseExplosion.rb:20:2971:20:2976 | call to use | UseUseExplosion.rb:20:2966:20:2976 | else ... | +| UseUseExplosion.rb:20:2982:20:2992 | [input] SSA phi read(self) | UseUseExplosion.rb:20:934:20:2996 | SSA phi read(self) | +| UseUseExplosion.rb:20:2982:20:2992 | [input] SSA phi read(x) | UseUseExplosion.rb:20:934:20:2996 | SSA phi read(x) | | UseUseExplosion.rb:20:2982:20:2992 | else ... | UseUseExplosion.rb:20:934:20:2996 | if ... | | UseUseExplosion.rb:20:2987:20:2992 | call to use | UseUseExplosion.rb:20:2982:20:2992 | else ... | +| UseUseExplosion.rb:20:2998:20:3008 | [input] SSA phi read(self) | UseUseExplosion.rb:20:913:20:3012 | SSA phi read(self) | +| UseUseExplosion.rb:20:2998:20:3008 | [input] SSA phi read(x) | UseUseExplosion.rb:20:913:20:3012 | SSA phi read(x) | | UseUseExplosion.rb:20:2998:20:3008 | else ... | UseUseExplosion.rb:20:913:20:3012 | if ... | | UseUseExplosion.rb:20:3003:20:3008 | call to use | UseUseExplosion.rb:20:2998:20:3008 | else ... | +| UseUseExplosion.rb:20:3014:20:3024 | [input] SSA phi read(self) | UseUseExplosion.rb:20:892:20:3028 | SSA phi read(self) | +| UseUseExplosion.rb:20:3014:20:3024 | [input] SSA phi read(x) | UseUseExplosion.rb:20:892:20:3028 | SSA phi read(x) | | UseUseExplosion.rb:20:3014:20:3024 | else ... | UseUseExplosion.rb:20:892:20:3028 | if ... | | UseUseExplosion.rb:20:3019:20:3024 | call to use | UseUseExplosion.rb:20:3014:20:3024 | else ... | +| UseUseExplosion.rb:20:3030:20:3040 | [input] SSA phi read(self) | UseUseExplosion.rb:20:871:20:3044 | SSA phi read(self) | +| UseUseExplosion.rb:20:3030:20:3040 | [input] SSA phi read(x) | UseUseExplosion.rb:20:871:20:3044 | SSA phi read(x) | | UseUseExplosion.rb:20:3030:20:3040 | else ... | UseUseExplosion.rb:20:871:20:3044 | if ... | | UseUseExplosion.rb:20:3035:20:3040 | call to use | UseUseExplosion.rb:20:3030:20:3040 | else ... | +| UseUseExplosion.rb:20:3046:20:3056 | [input] SSA phi read(self) | UseUseExplosion.rb:20:850:20:3060 | SSA phi read(self) | +| UseUseExplosion.rb:20:3046:20:3056 | [input] SSA phi read(x) | UseUseExplosion.rb:20:850:20:3060 | SSA phi read(x) | | UseUseExplosion.rb:20:3046:20:3056 | else ... | UseUseExplosion.rb:20:850:20:3060 | if ... | | UseUseExplosion.rb:20:3051:20:3056 | call to use | UseUseExplosion.rb:20:3046:20:3056 | else ... | +| UseUseExplosion.rb:20:3062:20:3072 | [input] SSA phi read(self) | UseUseExplosion.rb:20:829:20:3076 | SSA phi read(self) | +| UseUseExplosion.rb:20:3062:20:3072 | [input] SSA phi read(x) | UseUseExplosion.rb:20:829:20:3076 | SSA phi read(x) | | UseUseExplosion.rb:20:3062:20:3072 | else ... | UseUseExplosion.rb:20:829:20:3076 | if ... | | UseUseExplosion.rb:20:3067:20:3072 | call to use | UseUseExplosion.rb:20:3062:20:3072 | else ... | +| UseUseExplosion.rb:20:3078:20:3088 | [input] SSA phi read(self) | UseUseExplosion.rb:20:808:20:3092 | SSA phi read(self) | +| UseUseExplosion.rb:20:3078:20:3088 | [input] SSA phi read(x) | UseUseExplosion.rb:20:808:20:3092 | SSA phi read(x) | | UseUseExplosion.rb:20:3078:20:3088 | else ... | UseUseExplosion.rb:20:808:20:3092 | if ... | | UseUseExplosion.rb:20:3083:20:3088 | call to use | UseUseExplosion.rb:20:3078:20:3088 | else ... | +| UseUseExplosion.rb:20:3094:20:3104 | [input] SSA phi read(self) | UseUseExplosion.rb:20:787:20:3108 | SSA phi read(self) | +| UseUseExplosion.rb:20:3094:20:3104 | [input] SSA phi read(x) | UseUseExplosion.rb:20:787:20:3108 | SSA phi read(x) | | UseUseExplosion.rb:20:3094:20:3104 | else ... | UseUseExplosion.rb:20:787:20:3108 | if ... | | UseUseExplosion.rb:20:3099:20:3104 | call to use | UseUseExplosion.rb:20:3094:20:3104 | else ... | +| UseUseExplosion.rb:20:3110:20:3120 | [input] SSA phi read(self) | UseUseExplosion.rb:20:766:20:3124 | SSA phi read(self) | +| UseUseExplosion.rb:20:3110:20:3120 | [input] SSA phi read(x) | UseUseExplosion.rb:20:766:20:3124 | SSA phi read(x) | | UseUseExplosion.rb:20:3110:20:3120 | else ... | UseUseExplosion.rb:20:766:20:3124 | if ... | | UseUseExplosion.rb:20:3115:20:3120 | call to use | UseUseExplosion.rb:20:3110:20:3120 | else ... | +| UseUseExplosion.rb:20:3126:20:3136 | [input] SSA phi read(self) | UseUseExplosion.rb:20:745:20:3140 | SSA phi read(self) | +| UseUseExplosion.rb:20:3126:20:3136 | [input] SSA phi read(x) | UseUseExplosion.rb:20:745:20:3140 | SSA phi read(x) | | UseUseExplosion.rb:20:3126:20:3136 | else ... | UseUseExplosion.rb:20:745:20:3140 | if ... | | UseUseExplosion.rb:20:3131:20:3136 | call to use | UseUseExplosion.rb:20:3126:20:3136 | else ... | +| UseUseExplosion.rb:20:3142:20:3152 | [input] SSA phi read(self) | UseUseExplosion.rb:20:724:20:3156 | SSA phi read(self) | +| UseUseExplosion.rb:20:3142:20:3152 | [input] SSA phi read(x) | UseUseExplosion.rb:20:724:20:3156 | SSA phi read(x) | | UseUseExplosion.rb:20:3142:20:3152 | else ... | UseUseExplosion.rb:20:724:20:3156 | if ... | | UseUseExplosion.rb:20:3147:20:3152 | call to use | UseUseExplosion.rb:20:3142:20:3152 | else ... | +| UseUseExplosion.rb:20:3158:20:3168 | [input] SSA phi read(self) | UseUseExplosion.rb:20:703:20:3172 | SSA phi read(self) | +| UseUseExplosion.rb:20:3158:20:3168 | [input] SSA phi read(x) | UseUseExplosion.rb:20:703:20:3172 | SSA phi read(x) | | UseUseExplosion.rb:20:3158:20:3168 | else ... | UseUseExplosion.rb:20:703:20:3172 | if ... | | UseUseExplosion.rb:20:3163:20:3168 | call to use | UseUseExplosion.rb:20:3158:20:3168 | else ... | +| UseUseExplosion.rb:20:3174:20:3184 | [input] SSA phi read(self) | UseUseExplosion.rb:20:682:20:3188 | SSA phi read(self) | +| UseUseExplosion.rb:20:3174:20:3184 | [input] SSA phi read(x) | UseUseExplosion.rb:20:682:20:3188 | SSA phi read(x) | | UseUseExplosion.rb:20:3174:20:3184 | else ... | UseUseExplosion.rb:20:682:20:3188 | if ... | | UseUseExplosion.rb:20:3179:20:3184 | call to use | UseUseExplosion.rb:20:3174:20:3184 | else ... | +| UseUseExplosion.rb:20:3190:20:3200 | [input] SSA phi read(self) | UseUseExplosion.rb:20:661:20:3204 | SSA phi read(self) | +| UseUseExplosion.rb:20:3190:20:3200 | [input] SSA phi read(x) | UseUseExplosion.rb:20:661:20:3204 | SSA phi read(x) | | UseUseExplosion.rb:20:3190:20:3200 | else ... | UseUseExplosion.rb:20:661:20:3204 | if ... | | UseUseExplosion.rb:20:3195:20:3200 | call to use | UseUseExplosion.rb:20:3190:20:3200 | else ... | +| UseUseExplosion.rb:20:3206:20:3216 | [input] SSA phi read(self) | UseUseExplosion.rb:20:640:20:3220 | SSA phi read(self) | +| UseUseExplosion.rb:20:3206:20:3216 | [input] SSA phi read(x) | UseUseExplosion.rb:20:640:20:3220 | SSA phi read(x) | | UseUseExplosion.rb:20:3206:20:3216 | else ... | UseUseExplosion.rb:20:640:20:3220 | if ... | | UseUseExplosion.rb:20:3211:20:3216 | call to use | UseUseExplosion.rb:20:3206:20:3216 | else ... | +| UseUseExplosion.rb:20:3222:20:3232 | [input] SSA phi read(self) | UseUseExplosion.rb:20:619:20:3236 | SSA phi read(self) | +| UseUseExplosion.rb:20:3222:20:3232 | [input] SSA phi read(x) | UseUseExplosion.rb:20:619:20:3236 | SSA phi read(x) | | UseUseExplosion.rb:20:3222:20:3232 | else ... | UseUseExplosion.rb:20:619:20:3236 | if ... | | UseUseExplosion.rb:20:3227:20:3232 | call to use | UseUseExplosion.rb:20:3222:20:3232 | else ... | +| UseUseExplosion.rb:20:3238:20:3248 | [input] SSA phi read(self) | UseUseExplosion.rb:20:598:20:3252 | SSA phi read(self) | +| UseUseExplosion.rb:20:3238:20:3248 | [input] SSA phi read(x) | UseUseExplosion.rb:20:598:20:3252 | SSA phi read(x) | | UseUseExplosion.rb:20:3238:20:3248 | else ... | UseUseExplosion.rb:20:598:20:3252 | if ... | | UseUseExplosion.rb:20:3243:20:3248 | call to use | UseUseExplosion.rb:20:3238:20:3248 | else ... | +| UseUseExplosion.rb:20:3254:20:3264 | [input] SSA phi read(self) | UseUseExplosion.rb:20:577:20:3268 | SSA phi read(self) | +| UseUseExplosion.rb:20:3254:20:3264 | [input] SSA phi read(x) | UseUseExplosion.rb:20:577:20:3268 | SSA phi read(x) | | UseUseExplosion.rb:20:3254:20:3264 | else ... | UseUseExplosion.rb:20:577:20:3268 | if ... | | UseUseExplosion.rb:20:3259:20:3264 | call to use | UseUseExplosion.rb:20:3254:20:3264 | else ... | +| UseUseExplosion.rb:20:3270:20:3280 | [input] SSA phi read(self) | UseUseExplosion.rb:20:556:20:3284 | SSA phi read(self) | +| UseUseExplosion.rb:20:3270:20:3280 | [input] SSA phi read(x) | UseUseExplosion.rb:20:556:20:3284 | SSA phi read(x) | | UseUseExplosion.rb:20:3270:20:3280 | else ... | UseUseExplosion.rb:20:556:20:3284 | if ... | | UseUseExplosion.rb:20:3275:20:3280 | call to use | UseUseExplosion.rb:20:3270:20:3280 | else ... | +| UseUseExplosion.rb:20:3286:20:3296 | [input] SSA phi read(self) | UseUseExplosion.rb:20:535:20:3300 | SSA phi read(self) | +| UseUseExplosion.rb:20:3286:20:3296 | [input] SSA phi read(x) | UseUseExplosion.rb:20:535:20:3300 | SSA phi read(x) | | UseUseExplosion.rb:20:3286:20:3296 | else ... | UseUseExplosion.rb:20:535:20:3300 | if ... | | UseUseExplosion.rb:20:3291:20:3296 | call to use | UseUseExplosion.rb:20:3286:20:3296 | else ... | +| UseUseExplosion.rb:20:3302:20:3312 | [input] SSA phi read(self) | UseUseExplosion.rb:20:514:20:3316 | SSA phi read(self) | +| UseUseExplosion.rb:20:3302:20:3312 | [input] SSA phi read(x) | UseUseExplosion.rb:20:514:20:3316 | SSA phi read(x) | | UseUseExplosion.rb:20:3302:20:3312 | else ... | UseUseExplosion.rb:20:514:20:3316 | if ... | | UseUseExplosion.rb:20:3307:20:3312 | call to use | UseUseExplosion.rb:20:3302:20:3312 | else ... | +| UseUseExplosion.rb:20:3318:20:3328 | [input] SSA phi read(self) | UseUseExplosion.rb:20:493:20:3332 | SSA phi read(self) | +| UseUseExplosion.rb:20:3318:20:3328 | [input] SSA phi read(x) | UseUseExplosion.rb:20:493:20:3332 | SSA phi read(x) | | UseUseExplosion.rb:20:3318:20:3328 | else ... | UseUseExplosion.rb:20:493:20:3332 | if ... | | UseUseExplosion.rb:20:3323:20:3328 | call to use | UseUseExplosion.rb:20:3318:20:3328 | else ... | +| UseUseExplosion.rb:20:3334:20:3344 | [input] SSA phi read(self) | UseUseExplosion.rb:20:472:20:3348 | SSA phi read(self) | +| UseUseExplosion.rb:20:3334:20:3344 | [input] SSA phi read(x) | UseUseExplosion.rb:20:472:20:3348 | SSA phi read(x) | | UseUseExplosion.rb:20:3334:20:3344 | else ... | UseUseExplosion.rb:20:472:20:3348 | if ... | | UseUseExplosion.rb:20:3339:20:3344 | call to use | UseUseExplosion.rb:20:3334:20:3344 | else ... | +| UseUseExplosion.rb:20:3350:20:3360 | [input] SSA phi read(self) | UseUseExplosion.rb:20:451:20:3364 | SSA phi read(self) | +| UseUseExplosion.rb:20:3350:20:3360 | [input] SSA phi read(x) | UseUseExplosion.rb:20:451:20:3364 | SSA phi read(x) | | UseUseExplosion.rb:20:3350:20:3360 | else ... | UseUseExplosion.rb:20:451:20:3364 | if ... | | UseUseExplosion.rb:20:3355:20:3360 | call to use | UseUseExplosion.rb:20:3350:20:3360 | else ... | +| UseUseExplosion.rb:20:3366:20:3376 | [input] SSA phi read(self) | UseUseExplosion.rb:20:430:20:3380 | SSA phi read(self) | +| UseUseExplosion.rb:20:3366:20:3376 | [input] SSA phi read(x) | UseUseExplosion.rb:20:430:20:3380 | SSA phi read(x) | | UseUseExplosion.rb:20:3366:20:3376 | else ... | UseUseExplosion.rb:20:430:20:3380 | if ... | | UseUseExplosion.rb:20:3371:20:3376 | call to use | UseUseExplosion.rb:20:3366:20:3376 | else ... | +| UseUseExplosion.rb:20:3382:20:3392 | [input] SSA phi read(self) | UseUseExplosion.rb:20:409:20:3396 | SSA phi read(self) | +| UseUseExplosion.rb:20:3382:20:3392 | [input] SSA phi read(x) | UseUseExplosion.rb:20:409:20:3396 | SSA phi read(x) | | UseUseExplosion.rb:20:3382:20:3392 | else ... | UseUseExplosion.rb:20:409:20:3396 | if ... | | UseUseExplosion.rb:20:3387:20:3392 | call to use | UseUseExplosion.rb:20:3382:20:3392 | else ... | +| UseUseExplosion.rb:20:3398:20:3408 | [input] SSA phi read(self) | UseUseExplosion.rb:20:388:20:3412 | SSA phi read(self) | +| UseUseExplosion.rb:20:3398:20:3408 | [input] SSA phi read(x) | UseUseExplosion.rb:20:388:20:3412 | SSA phi read(x) | | UseUseExplosion.rb:20:3398:20:3408 | else ... | UseUseExplosion.rb:20:388:20:3412 | if ... | | UseUseExplosion.rb:20:3403:20:3408 | call to use | UseUseExplosion.rb:20:3398:20:3408 | else ... | +| UseUseExplosion.rb:20:3414:20:3424 | [input] SSA phi read(self) | UseUseExplosion.rb:20:367:20:3428 | SSA phi read(self) | +| UseUseExplosion.rb:20:3414:20:3424 | [input] SSA phi read(x) | UseUseExplosion.rb:20:367:20:3428 | SSA phi read(x) | | UseUseExplosion.rb:20:3414:20:3424 | else ... | UseUseExplosion.rb:20:367:20:3428 | if ... | | UseUseExplosion.rb:20:3419:20:3424 | call to use | UseUseExplosion.rb:20:3414:20:3424 | else ... | +| UseUseExplosion.rb:20:3430:20:3440 | [input] SSA phi read(self) | UseUseExplosion.rb:20:346:20:3444 | SSA phi read(self) | +| UseUseExplosion.rb:20:3430:20:3440 | [input] SSA phi read(x) | UseUseExplosion.rb:20:346:20:3444 | SSA phi read(x) | | UseUseExplosion.rb:20:3430:20:3440 | else ... | UseUseExplosion.rb:20:346:20:3444 | if ... | | UseUseExplosion.rb:20:3435:20:3440 | call to use | UseUseExplosion.rb:20:3430:20:3440 | else ... | +| UseUseExplosion.rb:20:3446:20:3456 | [input] SSA phi read(self) | UseUseExplosion.rb:20:325:20:3460 | SSA phi read(self) | +| UseUseExplosion.rb:20:3446:20:3456 | [input] SSA phi read(x) | UseUseExplosion.rb:20:325:20:3460 | SSA phi read(x) | | UseUseExplosion.rb:20:3446:20:3456 | else ... | UseUseExplosion.rb:20:325:20:3460 | if ... | | UseUseExplosion.rb:20:3451:20:3456 | call to use | UseUseExplosion.rb:20:3446:20:3456 | else ... | +| UseUseExplosion.rb:20:3462:20:3472 | [input] SSA phi read(self) | UseUseExplosion.rb:20:304:20:3476 | SSA phi read(self) | +| UseUseExplosion.rb:20:3462:20:3472 | [input] SSA phi read(x) | UseUseExplosion.rb:20:304:20:3476 | SSA phi read(x) | | UseUseExplosion.rb:20:3462:20:3472 | else ... | UseUseExplosion.rb:20:304:20:3476 | if ... | | UseUseExplosion.rb:20:3467:20:3472 | call to use | UseUseExplosion.rb:20:3462:20:3472 | else ... | +| UseUseExplosion.rb:20:3478:20:3488 | [input] SSA phi read(self) | UseUseExplosion.rb:20:283:20:3492 | SSA phi read(self) | +| UseUseExplosion.rb:20:3478:20:3488 | [input] SSA phi read(x) | UseUseExplosion.rb:20:283:20:3492 | SSA phi read(x) | | UseUseExplosion.rb:20:3478:20:3488 | else ... | UseUseExplosion.rb:20:283:20:3492 | if ... | | UseUseExplosion.rb:20:3483:20:3488 | call to use | UseUseExplosion.rb:20:3478:20:3488 | else ... | +| UseUseExplosion.rb:20:3494:20:3504 | [input] SSA phi read(self) | UseUseExplosion.rb:20:262:20:3508 | SSA phi read(self) | +| UseUseExplosion.rb:20:3494:20:3504 | [input] SSA phi read(x) | UseUseExplosion.rb:20:262:20:3508 | SSA phi read(x) | | UseUseExplosion.rb:20:3494:20:3504 | else ... | UseUseExplosion.rb:20:262:20:3508 | if ... | | UseUseExplosion.rb:20:3499:20:3504 | call to use | UseUseExplosion.rb:20:3494:20:3504 | else ... | +| UseUseExplosion.rb:20:3510:20:3520 | [input] SSA phi read(self) | UseUseExplosion.rb:20:241:20:3524 | SSA phi read(self) | +| UseUseExplosion.rb:20:3510:20:3520 | [input] SSA phi read(x) | UseUseExplosion.rb:20:241:20:3524 | SSA phi read(x) | | UseUseExplosion.rb:20:3510:20:3520 | else ... | UseUseExplosion.rb:20:241:20:3524 | if ... | | UseUseExplosion.rb:20:3515:20:3520 | call to use | UseUseExplosion.rb:20:3510:20:3520 | else ... | +| UseUseExplosion.rb:20:3526:20:3536 | [input] SSA phi read(self) | UseUseExplosion.rb:20:220:20:3540 | SSA phi read(self) | +| UseUseExplosion.rb:20:3526:20:3536 | [input] SSA phi read(x) | UseUseExplosion.rb:20:220:20:3540 | SSA phi read(x) | | UseUseExplosion.rb:20:3526:20:3536 | else ... | UseUseExplosion.rb:20:220:20:3540 | if ... | | UseUseExplosion.rb:20:3531:20:3536 | call to use | UseUseExplosion.rb:20:3526:20:3536 | else ... | +| UseUseExplosion.rb:20:3542:20:3552 | [input] SSA phi read(self) | UseUseExplosion.rb:20:199:20:3556 | SSA phi read(self) | +| UseUseExplosion.rb:20:3542:20:3552 | [input] SSA phi read(x) | UseUseExplosion.rb:20:199:20:3556 | SSA phi read(x) | | UseUseExplosion.rb:20:3542:20:3552 | else ... | UseUseExplosion.rb:20:199:20:3556 | if ... | | UseUseExplosion.rb:20:3547:20:3552 | call to use | UseUseExplosion.rb:20:3542:20:3552 | else ... | +| UseUseExplosion.rb:20:3558:20:3568 | [input] SSA phi read(self) | UseUseExplosion.rb:20:178:20:3572 | SSA phi read(self) | +| UseUseExplosion.rb:20:3558:20:3568 | [input] SSA phi read(x) | UseUseExplosion.rb:20:178:20:3572 | SSA phi read(x) | | UseUseExplosion.rb:20:3558:20:3568 | else ... | UseUseExplosion.rb:20:178:20:3572 | if ... | | UseUseExplosion.rb:20:3563:20:3568 | call to use | UseUseExplosion.rb:20:3558:20:3568 | else ... | +| UseUseExplosion.rb:20:3574:20:3584 | [input] SSA phi read(self) | UseUseExplosion.rb:20:157:20:3588 | SSA phi read(self) | +| UseUseExplosion.rb:20:3574:20:3584 | [input] SSA phi read(x) | UseUseExplosion.rb:20:157:20:3588 | SSA phi read(x) | | UseUseExplosion.rb:20:3574:20:3584 | else ... | UseUseExplosion.rb:20:157:20:3588 | if ... | | UseUseExplosion.rb:20:3579:20:3584 | call to use | UseUseExplosion.rb:20:3574:20:3584 | else ... | +| UseUseExplosion.rb:20:3590:20:3600 | [input] SSA phi read(self) | UseUseExplosion.rb:20:136:20:3604 | SSA phi read(self) | +| UseUseExplosion.rb:20:3590:20:3600 | [input] SSA phi read(x) | UseUseExplosion.rb:20:136:20:3604 | SSA phi read(x) | | UseUseExplosion.rb:20:3590:20:3600 | else ... | UseUseExplosion.rb:20:136:20:3604 | if ... | | UseUseExplosion.rb:20:3595:20:3600 | call to use | UseUseExplosion.rb:20:3590:20:3600 | else ... | +| UseUseExplosion.rb:20:3606:20:3616 | [input] SSA phi read(self) | UseUseExplosion.rb:20:115:20:3620 | SSA phi read(self) | +| UseUseExplosion.rb:20:3606:20:3616 | [input] SSA phi read(x) | UseUseExplosion.rb:20:115:20:3620 | SSA phi read(x) | | UseUseExplosion.rb:20:3606:20:3616 | else ... | UseUseExplosion.rb:20:115:20:3620 | if ... | | UseUseExplosion.rb:20:3611:20:3616 | call to use | UseUseExplosion.rb:20:3606:20:3616 | else ... | +| UseUseExplosion.rb:20:3622:20:3632 | [input] SSA phi read(self) | UseUseExplosion.rb:20:94:20:3636 | SSA phi read(self) | +| UseUseExplosion.rb:20:3622:20:3632 | [input] SSA phi read(x) | UseUseExplosion.rb:20:94:20:3636 | SSA phi read(x) | | UseUseExplosion.rb:20:3622:20:3632 | else ... | UseUseExplosion.rb:20:94:20:3636 | if ... | | UseUseExplosion.rb:20:3627:20:3632 | call to use | UseUseExplosion.rb:20:3622:20:3632 | else ... | +| UseUseExplosion.rb:20:3638:20:3648 | [input] SSA phi read(self) | UseUseExplosion.rb:20:73:20:3652 | SSA phi read(self) | +| UseUseExplosion.rb:20:3638:20:3648 | [input] SSA phi read(x) | UseUseExplosion.rb:20:73:20:3652 | SSA phi read(x) | | UseUseExplosion.rb:20:3638:20:3648 | else ... | UseUseExplosion.rb:20:73:20:3652 | if ... | | UseUseExplosion.rb:20:3643:20:3648 | call to use | UseUseExplosion.rb:20:3638:20:3648 | else ... | +| UseUseExplosion.rb:20:3654:20:3664 | [input] SSA phi read(self) | UseUseExplosion.rb:20:52:20:3668 | SSA phi read(self) | +| UseUseExplosion.rb:20:3654:20:3664 | [input] SSA phi read(x) | UseUseExplosion.rb:20:52:20:3668 | SSA phi read(x) | | UseUseExplosion.rb:20:3654:20:3664 | else ... | UseUseExplosion.rb:20:52:20:3668 | if ... | | UseUseExplosion.rb:20:3659:20:3664 | call to use | UseUseExplosion.rb:20:3654:20:3664 | else ... | +| UseUseExplosion.rb:20:3670:20:3680 | [input] SSA phi read(self) | UseUseExplosion.rb:20:31:20:3684 | SSA phi read(self) | +| UseUseExplosion.rb:20:3670:20:3680 | [input] SSA phi read(x) | UseUseExplosion.rb:20:31:20:3684 | SSA phi read(x) | | UseUseExplosion.rb:20:3670:20:3680 | else ... | UseUseExplosion.rb:20:31:20:3684 | if ... | | UseUseExplosion.rb:20:3675:20:3680 | call to use | UseUseExplosion.rb:20:3670:20:3680 | else ... | +| UseUseExplosion.rb:20:3686:20:3696 | [input] SSA phi read(self) | UseUseExplosion.rb:20:9:20:3700 | SSA phi read(self) | +| UseUseExplosion.rb:20:3686:20:3696 | [input] SSA phi read(x) | UseUseExplosion.rb:20:9:20:3700 | SSA phi read(x) | | UseUseExplosion.rb:20:3686:20:3696 | else ... | UseUseExplosion.rb:20:9:20:3700 | if ... | | UseUseExplosion.rb:20:3691:20:3696 | call to use | UseUseExplosion.rb:20:3686:20:3696 | else ... | | UseUseExplosion.rb:21:13:21:17 | [post] self | UseUseExplosion.rb:21:35:21:39 | self | @@ -2436,9 +2836,11 @@ | local_dataflow.rb:10:5:13:3 | __synth__0__1 | local_dataflow.rb:10:9:10:9 | x | | local_dataflow.rb:10:5:13:3 | call to each | local_dataflow.rb:10:5:13:3 | ... | | local_dataflow.rb:10:9:10:9 | ... = ... | local_dataflow.rb:10:9:10:9 | if ... | +| local_dataflow.rb:10:9:10:9 | [input] phi | local_dataflow.rb:10:9:10:9 | phi | +| local_dataflow.rb:10:9:10:9 | [input] phi | local_dataflow.rb:10:9:10:9 | phi | | local_dataflow.rb:10:9:10:9 | nil | local_dataflow.rb:10:9:10:9 | ... = ... | | local_dataflow.rb:10:9:10:9 | nil | local_dataflow.rb:10:9:10:9 | x | -| local_dataflow.rb:10:9:10:9 | x | local_dataflow.rb:10:9:10:9 | phi | +| local_dataflow.rb:10:9:10:9 | x | local_dataflow.rb:10:9:10:9 | [input] phi | | local_dataflow.rb:10:9:10:9 | x | local_dataflow.rb:12:5:12:5 | x | | local_dataflow.rb:10:14:10:18 | [post] array | local_dataflow.rb:15:10:15:14 | array | | local_dataflow.rb:10:14:10:18 | array | local_dataflow.rb:15:10:15:14 | array | @@ -2451,9 +2853,11 @@ | local_dataflow.rb:15:1:17:3 | __synth__0__1 | local_dataflow.rb:15:5:15:5 | x | | local_dataflow.rb:15:1:17:3 | call to each | local_dataflow.rb:15:1:17:3 | ... | | local_dataflow.rb:15:5:15:5 | ... = ... | local_dataflow.rb:15:5:15:5 | if ... | +| local_dataflow.rb:15:5:15:5 | [input] phi | local_dataflow.rb:15:5:15:5 | phi | +| local_dataflow.rb:15:5:15:5 | [input] phi | local_dataflow.rb:15:5:15:5 | phi | | local_dataflow.rb:15:5:15:5 | nil | local_dataflow.rb:15:5:15:5 | ... = ... | | local_dataflow.rb:15:5:15:5 | nil | local_dataflow.rb:15:5:15:5 | x | -| local_dataflow.rb:15:5:15:5 | x | local_dataflow.rb:15:5:15:5 | phi | +| local_dataflow.rb:15:5:15:5 | x | local_dataflow.rb:15:5:15:5 | [input] phi | | local_dataflow.rb:15:10:15:14 | [post] array | local_dataflow.rb:19:10:19:14 | array | | local_dataflow.rb:15:10:15:14 | array | local_dataflow.rb:19:10:19:14 | array | | local_dataflow.rb:16:9:16:10 | 10 | local_dataflow.rb:16:3:16:10 | break | @@ -2463,9 +2867,11 @@ | local_dataflow.rb:19:1:21:3 | __synth__0__1 | local_dataflow.rb:19:5:19:5 | x | | local_dataflow.rb:19:1:21:3 | call to each | local_dataflow.rb:19:1:21:3 | ... | | local_dataflow.rb:19:5:19:5 | ... = ... | local_dataflow.rb:19:5:19:5 | if ... | +| local_dataflow.rb:19:5:19:5 | [input] phi | local_dataflow.rb:19:5:19:5 | phi | +| local_dataflow.rb:19:5:19:5 | [input] phi | local_dataflow.rb:19:5:19:5 | phi | | local_dataflow.rb:19:5:19:5 | nil | local_dataflow.rb:19:5:19:5 | ... = ... | | local_dataflow.rb:19:5:19:5 | nil | local_dataflow.rb:19:5:19:5 | x | -| local_dataflow.rb:19:5:19:5 | x | local_dataflow.rb:19:5:19:5 | phi | +| local_dataflow.rb:19:5:19:5 | x | local_dataflow.rb:19:5:19:5 | [input] phi | | local_dataflow.rb:19:5:19:5 | x | local_dataflow.rb:20:6:20:6 | x | | local_dataflow.rb:24:2:24:8 | break | local_dataflow.rb:23:1:25:3 | while ... | | local_dataflow.rb:24:8:24:8 | 5 | local_dataflow.rb:24:2:24:8 | break | @@ -2499,12 +2905,16 @@ | local_dataflow.rb:61:12:61:12 | x | local_dataflow.rb:63:15:63:15 | x | | local_dataflow.rb:61:12:61:12 | x | local_dataflow.rb:65:6:65:6 | x | | local_dataflow.rb:61:12:61:12 | x | local_dataflow.rb:67:5:67:5 | x | +| local_dataflow.rb:62:10:62:15 | [input] SSA phi read(x) | local_dataflow.rb:61:7:68:5 | SSA phi read(x) | | local_dataflow.rb:62:10:62:15 | then ... | local_dataflow.rb:61:7:68:5 | case ... | | local_dataflow.rb:62:15:62:15 | 3 | local_dataflow.rb:62:10:62:15 | then ... | +| local_dataflow.rb:63:10:63:15 | [input] SSA phi read(x) | local_dataflow.rb:61:7:68:5 | SSA phi read(x) | | local_dataflow.rb:63:10:63:15 | then ... | local_dataflow.rb:61:7:68:5 | case ... | | local_dataflow.rb:63:15:63:15 | x | local_dataflow.rb:63:10:63:15 | then ... | +| local_dataflow.rb:64:9:65:6 | [input] SSA phi read(x) | local_dataflow.rb:61:7:68:5 | SSA phi read(x) | | local_dataflow.rb:64:9:65:6 | then ... | local_dataflow.rb:61:7:68:5 | case ... | | local_dataflow.rb:65:6:65:6 | x | local_dataflow.rb:64:9:65:6 | then ... | +| local_dataflow.rb:66:3:67:5 | [input] SSA phi read(x) | local_dataflow.rb:61:7:68:5 | SSA phi read(x) | | local_dataflow.rb:66:3:67:5 | else ... | local_dataflow.rb:61:7:68:5 | case ... | | local_dataflow.rb:67:5:67:5 | x | local_dataflow.rb:66:3:67:5 | else ... | | local_dataflow.rb:69:7:76:5 | case ... | local_dataflow.rb:69:3:76:5 | ... = ... | @@ -2538,16 +2948,19 @@ | local_dataflow.rb:78:12:78:20 | self | local_dataflow.rb:86:28:86:34 | self | | local_dataflow.rb:78:12:78:20 | self | local_dataflow.rb:87:20:87:26 | self | | local_dataflow.rb:79:13:79:13 | b | local_dataflow.rb:79:25:79:25 | b | +| local_dataflow.rb:79:15:79:45 | [input] SSA phi read(self) | local_dataflow.rb:78:7:88:5 | SSA phi read(self) | | local_dataflow.rb:79:15:79:45 | then ... | local_dataflow.rb:78:7:88:5 | case ... | | local_dataflow.rb:79:20:79:26 | call to sink | local_dataflow.rb:79:15:79:45 | then ... | | local_dataflow.rb:80:8:80:8 | a | local_dataflow.rb:80:13:80:13 | a | | local_dataflow.rb:80:13:80:13 | [post] a | local_dataflow.rb:80:29:80:29 | a | | local_dataflow.rb:80:13:80:13 | a | local_dataflow.rb:80:29:80:29 | a | +| local_dataflow.rb:80:19:80:49 | [input] SSA phi read(self) | local_dataflow.rb:78:7:88:5 | SSA phi read(self) | | local_dataflow.rb:80:19:80:49 | then ... | local_dataflow.rb:78:7:88:5 | case ... | | local_dataflow.rb:80:24:80:30 | call to sink | local_dataflow.rb:80:19:80:49 | then ... | | local_dataflow.rb:81:9:81:9 | c | local_dataflow.rb:82:12:82:12 | c | | local_dataflow.rb:81:13:81:13 | d | local_dataflow.rb:83:12:83:12 | d | | local_dataflow.rb:81:16:81:16 | e | local_dataflow.rb:84:12:84:12 | e | +| local_dataflow.rb:81:20:84:33 | [input] SSA phi read(self) | local_dataflow.rb:78:7:88:5 | SSA phi read(self) | | local_dataflow.rb:81:20:84:33 | then ... | local_dataflow.rb:78:7:88:5 | case ... | | local_dataflow.rb:81:25:84:14 | call to [] | local_dataflow.rb:81:20:84:33 | then ... | | local_dataflow.rb:81:25:84:14 | synthetic splat argument | local_dataflow.rb:81:25:84:14 | call to [] | @@ -2556,12 +2969,15 @@ | local_dataflow.rb:83:7:83:13 | [post] self | local_dataflow.rb:84:7:84:13 | self | | local_dataflow.rb:83:7:83:13 | self | local_dataflow.rb:84:7:84:13 | self | | local_dataflow.rb:85:13:85:13 | f | local_dataflow.rb:85:27:85:27 | f | +| local_dataflow.rb:85:17:85:47 | [input] SSA phi read(self) | local_dataflow.rb:78:7:88:5 | SSA phi read(self) | | local_dataflow.rb:85:17:85:47 | then ... | local_dataflow.rb:78:7:88:5 | case ... | | local_dataflow.rb:85:22:85:28 | call to sink | local_dataflow.rb:85:17:85:47 | then ... | | local_dataflow.rb:86:18:86:18 | g | local_dataflow.rb:86:33:86:33 | g | +| local_dataflow.rb:86:23:86:53 | [input] SSA phi read(self) | local_dataflow.rb:78:7:88:5 | SSA phi read(self) | | local_dataflow.rb:86:23:86:53 | then ... | local_dataflow.rb:78:7:88:5 | case ... | | local_dataflow.rb:86:28:86:34 | call to sink | local_dataflow.rb:86:23:86:53 | then ... | | local_dataflow.rb:87:10:87:10 | x | local_dataflow.rb:87:25:87:25 | x | +| local_dataflow.rb:87:15:87:48 | [input] SSA phi read(self) | local_dataflow.rb:78:7:88:5 | SSA phi read(self) | | local_dataflow.rb:87:15:87:48 | then ... | local_dataflow.rb:78:7:88:5 | case ... | | local_dataflow.rb:87:25:87:25 | [post] x | local_dataflow.rb:87:29:87:29 | x | | local_dataflow.rb:87:25:87:25 | x | local_dataflow.rb:87:29:87:29 | x | @@ -2569,42 +2985,50 @@ | local_dataflow.rb:92:1:109:3 | self (and_or) | local_dataflow.rb:93:7:93:15 | self | | local_dataflow.rb:92:1:109:3 | self in and_or | local_dataflow.rb:92:1:109:3 | self (and_or) | | local_dataflow.rb:93:3:93:3 | a | local_dataflow.rb:94:8:94:8 | a | +| local_dataflow.rb:93:7:93:15 | [input] SSA phi read(self) | local_dataflow.rb:93:7:93:28 | SSA phi read(self) | | local_dataflow.rb:93:7:93:15 | [post] self | local_dataflow.rb:93:20:93:28 | self | | local_dataflow.rb:93:7:93:15 | call to source | local_dataflow.rb:93:7:93:28 | ... \|\| ... | | local_dataflow.rb:93:7:93:15 | self | local_dataflow.rb:93:20:93:28 | self | | local_dataflow.rb:93:7:93:28 | ... \|\| ... | local_dataflow.rb:93:3:93:3 | a | | local_dataflow.rb:93:7:93:28 | ... \|\| ... | local_dataflow.rb:93:3:93:28 | ... = ... | | local_dataflow.rb:93:7:93:28 | SSA phi read(self) | local_dataflow.rb:94:3:94:9 | self | +| local_dataflow.rb:93:20:93:28 | [input] SSA phi read(self) | local_dataflow.rb:93:7:93:28 | SSA phi read(self) | | local_dataflow.rb:93:20:93:28 | call to source | local_dataflow.rb:93:7:93:28 | ... \|\| ... | | local_dataflow.rb:94:3:94:9 | [post] self | local_dataflow.rb:95:8:95:16 | self | | local_dataflow.rb:94:3:94:9 | self | local_dataflow.rb:95:8:95:16 | self | | local_dataflow.rb:95:3:95:3 | b | local_dataflow.rb:96:8:96:8 | b | | local_dataflow.rb:95:7:95:30 | ( ... ) | local_dataflow.rb:95:3:95:3 | b | | local_dataflow.rb:95:7:95:30 | ( ... ) | local_dataflow.rb:95:3:95:30 | ... = ... | +| local_dataflow.rb:95:8:95:16 | [input] SSA phi read(self) | local_dataflow.rb:95:8:95:29 | SSA phi read(self) | | local_dataflow.rb:95:8:95:16 | [post] self | local_dataflow.rb:95:21:95:29 | self | | local_dataflow.rb:95:8:95:16 | call to source | local_dataflow.rb:95:8:95:29 | ... or ... | | local_dataflow.rb:95:8:95:16 | self | local_dataflow.rb:95:21:95:29 | self | | local_dataflow.rb:95:8:95:29 | ... or ... | local_dataflow.rb:95:7:95:30 | ( ... ) | | local_dataflow.rb:95:8:95:29 | SSA phi read(self) | local_dataflow.rb:96:3:96:9 | self | +| local_dataflow.rb:95:21:95:29 | [input] SSA phi read(self) | local_dataflow.rb:95:8:95:29 | SSA phi read(self) | | local_dataflow.rb:95:21:95:29 | call to source | local_dataflow.rb:95:8:95:29 | ... or ... | | local_dataflow.rb:96:3:96:9 | [post] self | local_dataflow.rb:98:7:98:15 | self | | local_dataflow.rb:96:3:96:9 | self | local_dataflow.rb:98:7:98:15 | self | | local_dataflow.rb:98:3:98:3 | a | local_dataflow.rb:99:8:99:8 | a | +| local_dataflow.rb:98:7:98:15 | [input] SSA phi read(self) | local_dataflow.rb:98:7:98:28 | SSA phi read(self) | | local_dataflow.rb:98:7:98:15 | [post] self | local_dataflow.rb:98:20:98:28 | self | | local_dataflow.rb:98:7:98:15 | self | local_dataflow.rb:98:20:98:28 | self | | local_dataflow.rb:98:7:98:28 | ... && ... | local_dataflow.rb:98:3:98:3 | a | | local_dataflow.rb:98:7:98:28 | ... && ... | local_dataflow.rb:98:3:98:28 | ... = ... | | local_dataflow.rb:98:7:98:28 | SSA phi read(self) | local_dataflow.rb:99:3:99:9 | self | +| local_dataflow.rb:98:20:98:28 | [input] SSA phi read(self) | local_dataflow.rb:98:7:98:28 | SSA phi read(self) | | local_dataflow.rb:98:20:98:28 | call to source | local_dataflow.rb:98:7:98:28 | ... && ... | | local_dataflow.rb:99:3:99:9 | [post] self | local_dataflow.rb:100:8:100:16 | self | | local_dataflow.rb:99:3:99:9 | self | local_dataflow.rb:100:8:100:16 | self | | local_dataflow.rb:100:3:100:3 | b | local_dataflow.rb:101:8:101:8 | b | | local_dataflow.rb:100:7:100:31 | ( ... ) | local_dataflow.rb:100:3:100:3 | b | | local_dataflow.rb:100:7:100:31 | ( ... ) | local_dataflow.rb:100:3:100:31 | ... = ... | +| local_dataflow.rb:100:8:100:16 | [input] SSA phi read(self) | local_dataflow.rb:100:8:100:30 | SSA phi read(self) | | local_dataflow.rb:100:8:100:16 | [post] self | local_dataflow.rb:100:22:100:30 | self | | local_dataflow.rb:100:8:100:16 | self | local_dataflow.rb:100:22:100:30 | self | | local_dataflow.rb:100:8:100:30 | ... and ... | local_dataflow.rb:100:7:100:31 | ( ... ) | | local_dataflow.rb:100:8:100:30 | SSA phi read(self) | local_dataflow.rb:101:3:101:9 | self | +| local_dataflow.rb:100:22:100:30 | [input] SSA phi read(self) | local_dataflow.rb:100:8:100:30 | SSA phi read(self) | | local_dataflow.rb:100:22:100:30 | call to source | local_dataflow.rb:100:8:100:30 | ... and ... | | local_dataflow.rb:101:3:101:9 | [post] self | local_dataflow.rb:103:7:103:15 | self | | local_dataflow.rb:101:3:101:9 | self | local_dataflow.rb:103:7:103:15 | self | @@ -2613,11 +3037,13 @@ | local_dataflow.rb:103:7:103:15 | call to source | local_dataflow.rb:103:3:103:3 | a | | local_dataflow.rb:103:7:103:15 | call to source | local_dataflow.rb:103:3:103:15 | ... = ... | | local_dataflow.rb:103:7:103:15 | self | local_dataflow.rb:104:9:104:17 | self | +| local_dataflow.rb:104:3:104:3 | [input] SSA phi read(self) | local_dataflow.rb:104:5:104:7 | SSA phi read(self) | | local_dataflow.rb:104:3:104:3 | a | local_dataflow.rb:104:5:104:7 | ... \|\| ... | | local_dataflow.rb:104:3:104:3 | a | local_dataflow.rb:105:8:105:8 | a | | local_dataflow.rb:104:5:104:7 | ... \|\| ... | local_dataflow.rb:104:3:104:3 | a | | local_dataflow.rb:104:5:104:7 | ... \|\| ... | local_dataflow.rb:104:3:104:17 | ... = ... | | local_dataflow.rb:104:5:104:7 | SSA phi read(self) | local_dataflow.rb:105:3:105:9 | self | +| local_dataflow.rb:104:9:104:17 | [input] SSA phi read(self) | local_dataflow.rb:104:5:104:7 | SSA phi read(self) | | local_dataflow.rb:104:9:104:17 | call to source | local_dataflow.rb:104:5:104:7 | ... \|\| ... | | local_dataflow.rb:105:3:105:9 | [post] self | local_dataflow.rb:106:7:106:15 | self | | local_dataflow.rb:105:3:105:9 | self | local_dataflow.rb:106:7:106:15 | self | @@ -2626,10 +3052,12 @@ | local_dataflow.rb:106:7:106:15 | call to source | local_dataflow.rb:106:3:106:3 | b | | local_dataflow.rb:106:7:106:15 | call to source | local_dataflow.rb:106:3:106:15 | ... = ... | | local_dataflow.rb:106:7:106:15 | self | local_dataflow.rb:107:9:107:17 | self | +| local_dataflow.rb:107:3:107:3 | [input] SSA phi read(self) | local_dataflow.rb:107:5:107:7 | SSA phi read(self) | | local_dataflow.rb:107:3:107:3 | b | local_dataflow.rb:108:8:108:8 | b | | local_dataflow.rb:107:5:107:7 | ... && ... | local_dataflow.rb:107:3:107:3 | b | | local_dataflow.rb:107:5:107:7 | ... && ... | local_dataflow.rb:107:3:107:17 | ... = ... | | local_dataflow.rb:107:5:107:7 | SSA phi read(self) | local_dataflow.rb:108:3:108:9 | self | +| local_dataflow.rb:107:9:107:17 | [input] SSA phi read(self) | local_dataflow.rb:107:5:107:7 | SSA phi read(self) | | local_dataflow.rb:107:9:107:17 | call to source | local_dataflow.rb:107:5:107:7 | ... && ... | | local_dataflow.rb:111:1:114:3 | self (object_dup) | local_dataflow.rb:112:3:112:21 | self | | local_dataflow.rb:111:1:114:3 | self in object_dup | local_dataflow.rb:111:1:114:3 | self (object_dup) | @@ -2681,6 +3109,8 @@ | local_dataflow.rb:132:12:148:10 | then ... | local_dataflow.rb:132:3:149:5 | if ... | | local_dataflow.rb:133:5:139:7 | SSA phi read(self) | local_dataflow.rb:141:9:141:14 | self | | local_dataflow.rb:133:5:139:7 | SSA phi read(x) | local_dataflow.rb:141:13:141:13 | x | +| local_dataflow.rb:133:8:133:13 | [input] SSA phi read(self) | local_dataflow.rb:133:8:133:23 | SSA phi read(self) | +| local_dataflow.rb:133:8:133:13 | [input] SSA phi read(x) | local_dataflow.rb:133:8:133:23 | SSA phi read(x) | | local_dataflow.rb:133:8:133:13 | [post] self | local_dataflow.rb:133:18:133:23 | self | | local_dataflow.rb:133:8:133:13 | call to use | local_dataflow.rb:133:8:133:23 | [false] ... \|\| ... | | local_dataflow.rb:133:8:133:13 | call to use | local_dataflow.rb:133:8:133:23 | [true] ... \|\| ... | @@ -2689,43 +3119,63 @@ | local_dataflow.rb:133:8:133:23 | SSA phi read(x) | local_dataflow.rb:134:11:134:11 | x | | local_dataflow.rb:133:12:133:12 | [post] x | local_dataflow.rb:133:22:133:22 | x | | local_dataflow.rb:133:12:133:12 | x | local_dataflow.rb:133:22:133:22 | x | +| local_dataflow.rb:133:18:133:23 | [input] SSA phi read(self) | local_dataflow.rb:133:8:133:23 | SSA phi read(self) | +| local_dataflow.rb:133:18:133:23 | [input] SSA phi read(x) | local_dataflow.rb:133:8:133:23 | SSA phi read(x) | | local_dataflow.rb:133:18:133:23 | [post] self | local_dataflow.rb:136:7:136:12 | self | | local_dataflow.rb:133:18:133:23 | call to use | local_dataflow.rb:133:8:133:23 | [false] ... \|\| ... | | local_dataflow.rb:133:18:133:23 | call to use | local_dataflow.rb:133:8:133:23 | [true] ... \|\| ... | | local_dataflow.rb:133:18:133:23 | self | local_dataflow.rb:136:7:136:12 | self | | local_dataflow.rb:133:22:133:22 | [post] x | local_dataflow.rb:136:11:136:11 | x | | local_dataflow.rb:133:22:133:22 | x | local_dataflow.rb:136:11:136:11 | x | +| local_dataflow.rb:133:24:134:12 | [input] SSA phi read(self) | local_dataflow.rb:133:5:139:7 | SSA phi read(self) | +| local_dataflow.rb:133:24:134:12 | [input] SSA phi read(x) | local_dataflow.rb:133:5:139:7 | SSA phi read(x) | | local_dataflow.rb:133:24:134:12 | then ... | local_dataflow.rb:133:5:139:7 | if ... | | local_dataflow.rb:134:7:134:12 | call to use | local_dataflow.rb:133:24:134:12 | then ... | +| local_dataflow.rb:135:5:138:9 | [input] SSA phi read(self) | local_dataflow.rb:133:5:139:7 | SSA phi read(self) | +| local_dataflow.rb:135:5:138:9 | [input] SSA phi read(x) | local_dataflow.rb:133:5:139:7 | SSA phi read(x) | | local_dataflow.rb:135:5:138:9 | else ... | local_dataflow.rb:133:5:139:7 | if ... | | local_dataflow.rb:136:7:136:12 | [post] self | local_dataflow.rb:137:10:137:15 | self | | local_dataflow.rb:136:7:136:12 | self | local_dataflow.rb:137:10:137:15 | self | | local_dataflow.rb:136:11:136:11 | [post] x | local_dataflow.rb:137:14:137:14 | x | | local_dataflow.rb:136:11:136:11 | x | local_dataflow.rb:137:14:137:14 | x | -| local_dataflow.rb:137:7:138:9 | SSA phi read(self) | local_dataflow.rb:133:5:139:7 | SSA phi read(self) | -| local_dataflow.rb:137:7:138:9 | SSA phi read(x) | local_dataflow.rb:133:5:139:7 | SSA phi read(x) | +| local_dataflow.rb:137:7:138:9 | SSA phi read(self) | local_dataflow.rb:135:5:138:9 | [input] SSA phi read(self) | +| local_dataflow.rb:137:7:138:9 | SSA phi read(x) | local_dataflow.rb:135:5:138:9 | [input] SSA phi read(x) | | local_dataflow.rb:137:7:138:9 | if ... | local_dataflow.rb:135:5:138:9 | else ... | +| local_dataflow.rb:137:10:137:15 | [input] SSA phi read(self) | local_dataflow.rb:137:10:137:26 | SSA phi read(self) | +| local_dataflow.rb:137:10:137:15 | [input] SSA phi read(x) | local_dataflow.rb:137:10:137:26 | SSA phi read(x) | | local_dataflow.rb:137:10:137:15 | [post] self | local_dataflow.rb:137:21:137:26 | self | | local_dataflow.rb:137:10:137:15 | self | local_dataflow.rb:137:21:137:26 | self | -| local_dataflow.rb:137:10:137:26 | SSA phi read(self) | local_dataflow.rb:137:7:138:9 | SSA phi read(self) | -| local_dataflow.rb:137:10:137:26 | SSA phi read(x) | local_dataflow.rb:137:7:138:9 | SSA phi read(x) | +| local_dataflow.rb:137:10:137:26 | SSA phi read(self) | local_dataflow.rb:137:10:137:26 | [input] SSA phi read(self) | +| local_dataflow.rb:137:10:137:26 | SSA phi read(x) | local_dataflow.rb:137:10:137:26 | [input] SSA phi read(x) | +| local_dataflow.rb:137:10:137:26 | [input] SSA phi read(self) | local_dataflow.rb:137:7:138:9 | SSA phi read(self) | +| local_dataflow.rb:137:10:137:26 | [input] SSA phi read(self) | local_dataflow.rb:137:7:138:9 | SSA phi read(self) | +| local_dataflow.rb:137:10:137:26 | [input] SSA phi read(x) | local_dataflow.rb:137:7:138:9 | SSA phi read(x) | +| local_dataflow.rb:137:10:137:26 | [input] SSA phi read(x) | local_dataflow.rb:137:7:138:9 | SSA phi read(x) | | local_dataflow.rb:137:14:137:14 | [post] x | local_dataflow.rb:137:25:137:25 | x | | local_dataflow.rb:137:14:137:14 | x | local_dataflow.rb:137:25:137:25 | x | | local_dataflow.rb:137:20:137:26 | [false] ! ... | local_dataflow.rb:137:10:137:26 | [false] ... && ... | +| local_dataflow.rb:137:20:137:26 | [input] SSA phi read(self) | local_dataflow.rb:137:10:137:26 | SSA phi read(self) | +| local_dataflow.rb:137:20:137:26 | [input] SSA phi read(x) | local_dataflow.rb:137:10:137:26 | SSA phi read(x) | | local_dataflow.rb:137:20:137:26 | [true] ! ... | local_dataflow.rb:137:10:137:26 | [true] ... && ... | | local_dataflow.rb:141:5:145:7 | SSA phi read(self) | local_dataflow.rb:147:5:147:10 | self | | local_dataflow.rb:141:5:145:7 | SSA phi read(x) | local_dataflow.rb:147:9:147:9 | x | | local_dataflow.rb:141:8:141:14 | [false] ! ... | local_dataflow.rb:141:8:141:37 | [false] ... \|\| ... | | local_dataflow.rb:141:8:141:14 | [false] ! ... | local_dataflow.rb:141:8:141:37 | [true] ... \|\| ... | +| local_dataflow.rb:141:8:141:14 | [input] SSA phi read(self) | local_dataflow.rb:141:8:141:37 | SSA phi read(self) | +| local_dataflow.rb:141:8:141:14 | [input] SSA phi read(x) | local_dataflow.rb:141:8:141:37 | SSA phi read(x) | | local_dataflow.rb:141:8:141:14 | [true] ! ... | local_dataflow.rb:141:8:141:37 | [true] ... \|\| ... | -| local_dataflow.rb:141:8:141:37 | SSA phi read(self) | local_dataflow.rb:141:5:145:7 | SSA phi read(self) | -| local_dataflow.rb:141:8:141:37 | SSA phi read(x) | local_dataflow.rb:141:5:145:7 | SSA phi read(x) | +| local_dataflow.rb:141:8:141:37 | SSA phi read(self) | local_dataflow.rb:141:38:142:9 | [input] SSA phi read(self) | +| local_dataflow.rb:141:8:141:37 | SSA phi read(x) | local_dataflow.rb:141:38:142:9 | [input] SSA phi read(x) | | local_dataflow.rb:141:9:141:14 | [post] self | local_dataflow.rb:141:20:141:25 | self | | local_dataflow.rb:141:9:141:14 | self | local_dataflow.rb:141:20:141:25 | self | | local_dataflow.rb:141:13:141:13 | [post] x | local_dataflow.rb:141:24:141:24 | x | | local_dataflow.rb:141:13:141:13 | x | local_dataflow.rb:141:24:141:24 | x | | local_dataflow.rb:141:19:141:37 | [false] ( ... ) | local_dataflow.rb:141:8:141:37 | [false] ... \|\| ... | +| local_dataflow.rb:141:19:141:37 | [input] SSA phi read(self) | local_dataflow.rb:141:8:141:37 | SSA phi read(self) | +| local_dataflow.rb:141:19:141:37 | [input] SSA phi read(x) | local_dataflow.rb:141:8:141:37 | SSA phi read(x) | | local_dataflow.rb:141:19:141:37 | [true] ( ... ) | local_dataflow.rb:141:8:141:37 | [true] ... \|\| ... | +| local_dataflow.rb:141:20:141:25 | [input] SSA phi read(self) | local_dataflow.rb:141:20:141:36 | SSA phi read(self) | +| local_dataflow.rb:141:20:141:25 | [input] SSA phi read(x) | local_dataflow.rb:141:20:141:36 | SSA phi read(x) | | local_dataflow.rb:141:20:141:25 | [post] self | local_dataflow.rb:141:31:141:36 | self | | local_dataflow.rb:141:20:141:25 | self | local_dataflow.rb:141:31:141:36 | self | | local_dataflow.rb:141:20:141:36 | SSA phi read(self) | local_dataflow.rb:143:11:143:16 | self | @@ -2735,22 +3185,36 @@ | local_dataflow.rb:141:24:141:24 | [post] x | local_dataflow.rb:141:35:141:35 | x | | local_dataflow.rb:141:24:141:24 | x | local_dataflow.rb:141:35:141:35 | x | | local_dataflow.rb:141:30:141:36 | [false] ! ... | local_dataflow.rb:141:20:141:36 | [false] ... && ... | +| local_dataflow.rb:141:30:141:36 | [input] SSA phi read(self) | local_dataflow.rb:141:20:141:36 | SSA phi read(self) | +| local_dataflow.rb:141:30:141:36 | [input] SSA phi read(x) | local_dataflow.rb:141:20:141:36 | SSA phi read(x) | | local_dataflow.rb:141:30:141:36 | [true] ! ... | local_dataflow.rb:141:20:141:36 | [true] ... && ... | +| local_dataflow.rb:141:38:142:9 | [input] SSA phi read(self) | local_dataflow.rb:141:5:145:7 | SSA phi read(self) | +| local_dataflow.rb:141:38:142:9 | [input] SSA phi read(x) | local_dataflow.rb:141:5:145:7 | SSA phi read(x) | | local_dataflow.rb:141:38:142:9 | then ... | local_dataflow.rb:141:5:145:7 | if ... | | local_dataflow.rb:142:7:142:9 | nil | local_dataflow.rb:141:38:142:9 | then ... | -| local_dataflow.rb:143:5:144:16 | SSA phi read(self) | local_dataflow.rb:141:5:145:7 | SSA phi read(self) | -| local_dataflow.rb:143:5:144:16 | SSA phi read(x) | local_dataflow.rb:141:5:145:7 | SSA phi read(x) | +| local_dataflow.rb:143:5:144:16 | SSA phi read(self) | local_dataflow.rb:143:5:144:16 | [input] SSA phi read(self) | +| local_dataflow.rb:143:5:144:16 | SSA phi read(x) | local_dataflow.rb:143:5:144:16 | [input] SSA phi read(x) | +| local_dataflow.rb:143:5:144:16 | [input] SSA phi read(self) | local_dataflow.rb:141:5:145:7 | SSA phi read(self) | +| local_dataflow.rb:143:5:144:16 | [input] SSA phi read(x) | local_dataflow.rb:141:5:145:7 | SSA phi read(x) | | local_dataflow.rb:143:5:144:16 | elsif ... | local_dataflow.rb:141:5:145:7 | if ... | +| local_dataflow.rb:143:11:143:16 | [input] SSA phi read(self) | local_dataflow.rb:143:11:143:26 | SSA phi read(self) | +| local_dataflow.rb:143:11:143:16 | [input] SSA phi read(x) | local_dataflow.rb:143:11:143:26 | SSA phi read(x) | | local_dataflow.rb:143:11:143:16 | [post] self | local_dataflow.rb:143:21:143:26 | self | | local_dataflow.rb:143:11:143:16 | call to use | local_dataflow.rb:143:11:143:26 | [false] ... \|\| ... | | local_dataflow.rb:143:11:143:16 | call to use | local_dataflow.rb:143:11:143:26 | [true] ... \|\| ... | | local_dataflow.rb:143:11:143:16 | self | local_dataflow.rb:143:21:143:26 | self | | local_dataflow.rb:143:11:143:26 | SSA phi read(self) | local_dataflow.rb:144:11:144:16 | self | | local_dataflow.rb:143:11:143:26 | SSA phi read(x) | local_dataflow.rb:144:15:144:15 | x | +| local_dataflow.rb:143:11:143:26 | [input] SSA phi read(self) | local_dataflow.rb:143:5:144:16 | SSA phi read(self) | +| local_dataflow.rb:143:11:143:26 | [input] SSA phi read(x) | local_dataflow.rb:143:5:144:16 | SSA phi read(x) | | local_dataflow.rb:143:15:143:15 | [post] x | local_dataflow.rb:143:25:143:25 | x | | local_dataflow.rb:143:15:143:15 | x | local_dataflow.rb:143:25:143:25 | x | +| local_dataflow.rb:143:21:143:26 | [input] SSA phi read(self) | local_dataflow.rb:143:11:143:26 | SSA phi read(self) | +| local_dataflow.rb:143:21:143:26 | [input] SSA phi read(x) | local_dataflow.rb:143:11:143:26 | SSA phi read(x) | | local_dataflow.rb:143:21:143:26 | call to use | local_dataflow.rb:143:11:143:26 | [false] ... \|\| ... | | local_dataflow.rb:143:21:143:26 | call to use | local_dataflow.rb:143:11:143:26 | [true] ... \|\| ... | +| local_dataflow.rb:143:27:144:16 | [input] SSA phi read(self) | local_dataflow.rb:143:5:144:16 | SSA phi read(self) | +| local_dataflow.rb:143:27:144:16 | [input] SSA phi read(x) | local_dataflow.rb:143:5:144:16 | SSA phi read(x) | | local_dataflow.rb:143:27:144:16 | then ... | local_dataflow.rb:143:5:144:16 | elsif ... | | local_dataflow.rb:144:11:144:16 | call to use | local_dataflow.rb:143:27:144:16 | then ... | | local_dataflow.rb:147:5:147:10 | [post] self | local_dataflow.rb:148:5:148:10 | self | diff --git a/ruby/ql/test/library-tests/dataflow/local/TaintStep.expected b/ruby/ql/test/library-tests/dataflow/local/TaintStep.expected index a462aebeba9..2c189c76939 100644 --- a/ruby/ql/test/library-tests/dataflow/local/TaintStep.expected +++ b/ruby/ql/test/library-tests/dataflow/local/TaintStep.expected @@ -1,6 +1,6 @@ | UseUseExplosion.rb:18:5:22:7 | self (m) | UseUseExplosion.rb:20:13:20:17 | self | | UseUseExplosion.rb:18:5:22:7 | self in m | UseUseExplosion.rb:18:5:22:7 | self (m) | -| UseUseExplosion.rb:19:9:19:9 | x | UseUseExplosion.rb:20:2081:20:2116 | SSA phi read(x) | +| UseUseExplosion.rb:19:9:19:9 | x | UseUseExplosion.rb:20:2096:20:2099 | [input] SSA phi read(x) | | UseUseExplosion.rb:19:9:19:9 | x | UseUseExplosion.rb:20:2111:20:2111 | x | | UseUseExplosion.rb:19:9:19:9 | x | UseUseExplosion.rb:20:2127:20:2127 | x | | UseUseExplosion.rb:19:9:19:9 | x | UseUseExplosion.rb:20:2143:20:2143 | x | @@ -212,9 +212,11 @@ | UseUseExplosion.rb:20:13:20:23 | ... > ... | UseUseExplosion.rb:20:12:20:24 | [false] ( ... ) | | UseUseExplosion.rb:20:13:20:23 | ... > ... | UseUseExplosion.rb:20:12:20:24 | [true] ( ... ) | | UseUseExplosion.rb:20:21:20:23 | 100 | UseUseExplosion.rb:20:13:20:23 | ... > ... | +| UseUseExplosion.rb:20:26:20:3684 | [input] SSA phi read(self) | UseUseExplosion.rb:20:9:20:3700 | SSA phi read(self) | +| UseUseExplosion.rb:20:26:20:3684 | [input] SSA phi read(x) | UseUseExplosion.rb:20:9:20:3700 | SSA phi read(x) | | UseUseExplosion.rb:20:26:20:3684 | then ... | UseUseExplosion.rb:20:9:20:3700 | if ... | -| UseUseExplosion.rb:20:31:20:3684 | SSA phi read(self) | UseUseExplosion.rb:20:9:20:3700 | SSA phi read(self) | -| UseUseExplosion.rb:20:31:20:3684 | SSA phi read(x) | UseUseExplosion.rb:20:9:20:3700 | SSA phi read(x) | +| UseUseExplosion.rb:20:31:20:3684 | SSA phi read(self) | UseUseExplosion.rb:20:26:20:3684 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:31:20:3684 | SSA phi read(x) | UseUseExplosion.rb:20:26:20:3684 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:31:20:3684 | if ... | UseUseExplosion.rb:20:26:20:3684 | then ... | | UseUseExplosion.rb:20:35:20:39 | @prop | UseUseExplosion.rb:20:35:20:44 | ... > ... | | UseUseExplosion.rb:20:35:20:39 | [post] self | UseUseExplosion.rb:20:56:20:60 | self | @@ -224,9 +226,11 @@ | UseUseExplosion.rb:20:35:20:44 | ... > ... | UseUseExplosion.rb:20:34:20:45 | [false] ( ... ) | | UseUseExplosion.rb:20:35:20:44 | ... > ... | UseUseExplosion.rb:20:34:20:45 | [true] ( ... ) | | UseUseExplosion.rb:20:43:20:44 | 99 | UseUseExplosion.rb:20:35:20:44 | ... > ... | +| UseUseExplosion.rb:20:47:20:3668 | [input] SSA phi read(self) | UseUseExplosion.rb:20:31:20:3684 | SSA phi read(self) | +| UseUseExplosion.rb:20:47:20:3668 | [input] SSA phi read(x) | UseUseExplosion.rb:20:31:20:3684 | SSA phi read(x) | | UseUseExplosion.rb:20:47:20:3668 | then ... | UseUseExplosion.rb:20:31:20:3684 | if ... | -| UseUseExplosion.rb:20:52:20:3668 | SSA phi read(self) | UseUseExplosion.rb:20:31:20:3684 | SSA phi read(self) | -| UseUseExplosion.rb:20:52:20:3668 | SSA phi read(x) | UseUseExplosion.rb:20:31:20:3684 | SSA phi read(x) | +| UseUseExplosion.rb:20:52:20:3668 | SSA phi read(self) | UseUseExplosion.rb:20:47:20:3668 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:52:20:3668 | SSA phi read(x) | UseUseExplosion.rb:20:47:20:3668 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:52:20:3668 | if ... | UseUseExplosion.rb:20:47:20:3668 | then ... | | UseUseExplosion.rb:20:56:20:60 | @prop | UseUseExplosion.rb:20:56:20:65 | ... > ... | | UseUseExplosion.rb:20:56:20:60 | [post] self | UseUseExplosion.rb:20:77:20:81 | self | @@ -236,9 +240,11 @@ | UseUseExplosion.rb:20:56:20:65 | ... > ... | UseUseExplosion.rb:20:55:20:66 | [false] ( ... ) | | UseUseExplosion.rb:20:56:20:65 | ... > ... | UseUseExplosion.rb:20:55:20:66 | [true] ( ... ) | | UseUseExplosion.rb:20:64:20:65 | 98 | UseUseExplosion.rb:20:56:20:65 | ... > ... | +| UseUseExplosion.rb:20:68:20:3652 | [input] SSA phi read(self) | UseUseExplosion.rb:20:52:20:3668 | SSA phi read(self) | +| UseUseExplosion.rb:20:68:20:3652 | [input] SSA phi read(x) | UseUseExplosion.rb:20:52:20:3668 | SSA phi read(x) | | UseUseExplosion.rb:20:68:20:3652 | then ... | UseUseExplosion.rb:20:52:20:3668 | if ... | -| UseUseExplosion.rb:20:73:20:3652 | SSA phi read(self) | UseUseExplosion.rb:20:52:20:3668 | SSA phi read(self) | -| UseUseExplosion.rb:20:73:20:3652 | SSA phi read(x) | UseUseExplosion.rb:20:52:20:3668 | SSA phi read(x) | +| UseUseExplosion.rb:20:73:20:3652 | SSA phi read(self) | UseUseExplosion.rb:20:68:20:3652 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:73:20:3652 | SSA phi read(x) | UseUseExplosion.rb:20:68:20:3652 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:73:20:3652 | if ... | UseUseExplosion.rb:20:68:20:3652 | then ... | | UseUseExplosion.rb:20:77:20:81 | @prop | UseUseExplosion.rb:20:77:20:86 | ... > ... | | UseUseExplosion.rb:20:77:20:81 | [post] self | UseUseExplosion.rb:20:98:20:102 | self | @@ -248,9 +254,11 @@ | UseUseExplosion.rb:20:77:20:86 | ... > ... | UseUseExplosion.rb:20:76:20:87 | [false] ( ... ) | | UseUseExplosion.rb:20:77:20:86 | ... > ... | UseUseExplosion.rb:20:76:20:87 | [true] ( ... ) | | UseUseExplosion.rb:20:85:20:86 | 97 | UseUseExplosion.rb:20:77:20:86 | ... > ... | +| UseUseExplosion.rb:20:89:20:3636 | [input] SSA phi read(self) | UseUseExplosion.rb:20:73:20:3652 | SSA phi read(self) | +| UseUseExplosion.rb:20:89:20:3636 | [input] SSA phi read(x) | UseUseExplosion.rb:20:73:20:3652 | SSA phi read(x) | | UseUseExplosion.rb:20:89:20:3636 | then ... | UseUseExplosion.rb:20:73:20:3652 | if ... | -| UseUseExplosion.rb:20:94:20:3636 | SSA phi read(self) | UseUseExplosion.rb:20:73:20:3652 | SSA phi read(self) | -| UseUseExplosion.rb:20:94:20:3636 | SSA phi read(x) | UseUseExplosion.rb:20:73:20:3652 | SSA phi read(x) | +| UseUseExplosion.rb:20:94:20:3636 | SSA phi read(self) | UseUseExplosion.rb:20:89:20:3636 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:94:20:3636 | SSA phi read(x) | UseUseExplosion.rb:20:89:20:3636 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:94:20:3636 | if ... | UseUseExplosion.rb:20:89:20:3636 | then ... | | UseUseExplosion.rb:20:98:20:102 | @prop | UseUseExplosion.rb:20:98:20:107 | ... > ... | | UseUseExplosion.rb:20:98:20:102 | [post] self | UseUseExplosion.rb:20:119:20:123 | self | @@ -260,9 +268,11 @@ | UseUseExplosion.rb:20:98:20:107 | ... > ... | UseUseExplosion.rb:20:97:20:108 | [false] ( ... ) | | UseUseExplosion.rb:20:98:20:107 | ... > ... | UseUseExplosion.rb:20:97:20:108 | [true] ( ... ) | | UseUseExplosion.rb:20:106:20:107 | 96 | UseUseExplosion.rb:20:98:20:107 | ... > ... | +| UseUseExplosion.rb:20:110:20:3620 | [input] SSA phi read(self) | UseUseExplosion.rb:20:94:20:3636 | SSA phi read(self) | +| UseUseExplosion.rb:20:110:20:3620 | [input] SSA phi read(x) | UseUseExplosion.rb:20:94:20:3636 | SSA phi read(x) | | UseUseExplosion.rb:20:110:20:3620 | then ... | UseUseExplosion.rb:20:94:20:3636 | if ... | -| UseUseExplosion.rb:20:115:20:3620 | SSA phi read(self) | UseUseExplosion.rb:20:94:20:3636 | SSA phi read(self) | -| UseUseExplosion.rb:20:115:20:3620 | SSA phi read(x) | UseUseExplosion.rb:20:94:20:3636 | SSA phi read(x) | +| UseUseExplosion.rb:20:115:20:3620 | SSA phi read(self) | UseUseExplosion.rb:20:110:20:3620 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:115:20:3620 | SSA phi read(x) | UseUseExplosion.rb:20:110:20:3620 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:115:20:3620 | if ... | UseUseExplosion.rb:20:110:20:3620 | then ... | | UseUseExplosion.rb:20:119:20:123 | @prop | UseUseExplosion.rb:20:119:20:128 | ... > ... | | UseUseExplosion.rb:20:119:20:123 | [post] self | UseUseExplosion.rb:20:140:20:144 | self | @@ -272,9 +282,11 @@ | UseUseExplosion.rb:20:119:20:128 | ... > ... | UseUseExplosion.rb:20:118:20:129 | [false] ( ... ) | | UseUseExplosion.rb:20:119:20:128 | ... > ... | UseUseExplosion.rb:20:118:20:129 | [true] ( ... ) | | UseUseExplosion.rb:20:127:20:128 | 95 | UseUseExplosion.rb:20:119:20:128 | ... > ... | +| UseUseExplosion.rb:20:131:20:3604 | [input] SSA phi read(self) | UseUseExplosion.rb:20:115:20:3620 | SSA phi read(self) | +| UseUseExplosion.rb:20:131:20:3604 | [input] SSA phi read(x) | UseUseExplosion.rb:20:115:20:3620 | SSA phi read(x) | | UseUseExplosion.rb:20:131:20:3604 | then ... | UseUseExplosion.rb:20:115:20:3620 | if ... | -| UseUseExplosion.rb:20:136:20:3604 | SSA phi read(self) | UseUseExplosion.rb:20:115:20:3620 | SSA phi read(self) | -| UseUseExplosion.rb:20:136:20:3604 | SSA phi read(x) | UseUseExplosion.rb:20:115:20:3620 | SSA phi read(x) | +| UseUseExplosion.rb:20:136:20:3604 | SSA phi read(self) | UseUseExplosion.rb:20:131:20:3604 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:136:20:3604 | SSA phi read(x) | UseUseExplosion.rb:20:131:20:3604 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:136:20:3604 | if ... | UseUseExplosion.rb:20:131:20:3604 | then ... | | UseUseExplosion.rb:20:140:20:144 | @prop | UseUseExplosion.rb:20:140:20:149 | ... > ... | | UseUseExplosion.rb:20:140:20:144 | [post] self | UseUseExplosion.rb:20:161:20:165 | self | @@ -284,9 +296,11 @@ | UseUseExplosion.rb:20:140:20:149 | ... > ... | UseUseExplosion.rb:20:139:20:150 | [false] ( ... ) | | UseUseExplosion.rb:20:140:20:149 | ... > ... | UseUseExplosion.rb:20:139:20:150 | [true] ( ... ) | | UseUseExplosion.rb:20:148:20:149 | 94 | UseUseExplosion.rb:20:140:20:149 | ... > ... | +| UseUseExplosion.rb:20:152:20:3588 | [input] SSA phi read(self) | UseUseExplosion.rb:20:136:20:3604 | SSA phi read(self) | +| UseUseExplosion.rb:20:152:20:3588 | [input] SSA phi read(x) | UseUseExplosion.rb:20:136:20:3604 | SSA phi read(x) | | UseUseExplosion.rb:20:152:20:3588 | then ... | UseUseExplosion.rb:20:136:20:3604 | if ... | -| UseUseExplosion.rb:20:157:20:3588 | SSA phi read(self) | UseUseExplosion.rb:20:136:20:3604 | SSA phi read(self) | -| UseUseExplosion.rb:20:157:20:3588 | SSA phi read(x) | UseUseExplosion.rb:20:136:20:3604 | SSA phi read(x) | +| UseUseExplosion.rb:20:157:20:3588 | SSA phi read(self) | UseUseExplosion.rb:20:152:20:3588 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:157:20:3588 | SSA phi read(x) | UseUseExplosion.rb:20:152:20:3588 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:157:20:3588 | if ... | UseUseExplosion.rb:20:152:20:3588 | then ... | | UseUseExplosion.rb:20:161:20:165 | @prop | UseUseExplosion.rb:20:161:20:170 | ... > ... | | UseUseExplosion.rb:20:161:20:165 | [post] self | UseUseExplosion.rb:20:182:20:186 | self | @@ -296,9 +310,11 @@ | UseUseExplosion.rb:20:161:20:170 | ... > ... | UseUseExplosion.rb:20:160:20:171 | [false] ( ... ) | | UseUseExplosion.rb:20:161:20:170 | ... > ... | UseUseExplosion.rb:20:160:20:171 | [true] ( ... ) | | UseUseExplosion.rb:20:169:20:170 | 93 | UseUseExplosion.rb:20:161:20:170 | ... > ... | +| UseUseExplosion.rb:20:173:20:3572 | [input] SSA phi read(self) | UseUseExplosion.rb:20:157:20:3588 | SSA phi read(self) | +| UseUseExplosion.rb:20:173:20:3572 | [input] SSA phi read(x) | UseUseExplosion.rb:20:157:20:3588 | SSA phi read(x) | | UseUseExplosion.rb:20:173:20:3572 | then ... | UseUseExplosion.rb:20:157:20:3588 | if ... | -| UseUseExplosion.rb:20:178:20:3572 | SSA phi read(self) | UseUseExplosion.rb:20:157:20:3588 | SSA phi read(self) | -| UseUseExplosion.rb:20:178:20:3572 | SSA phi read(x) | UseUseExplosion.rb:20:157:20:3588 | SSA phi read(x) | +| UseUseExplosion.rb:20:178:20:3572 | SSA phi read(self) | UseUseExplosion.rb:20:173:20:3572 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:178:20:3572 | SSA phi read(x) | UseUseExplosion.rb:20:173:20:3572 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:178:20:3572 | if ... | UseUseExplosion.rb:20:173:20:3572 | then ... | | UseUseExplosion.rb:20:182:20:186 | @prop | UseUseExplosion.rb:20:182:20:191 | ... > ... | | UseUseExplosion.rb:20:182:20:186 | [post] self | UseUseExplosion.rb:20:203:20:207 | self | @@ -308,9 +324,11 @@ | UseUseExplosion.rb:20:182:20:191 | ... > ... | UseUseExplosion.rb:20:181:20:192 | [false] ( ... ) | | UseUseExplosion.rb:20:182:20:191 | ... > ... | UseUseExplosion.rb:20:181:20:192 | [true] ( ... ) | | UseUseExplosion.rb:20:190:20:191 | 92 | UseUseExplosion.rb:20:182:20:191 | ... > ... | +| UseUseExplosion.rb:20:194:20:3556 | [input] SSA phi read(self) | UseUseExplosion.rb:20:178:20:3572 | SSA phi read(self) | +| UseUseExplosion.rb:20:194:20:3556 | [input] SSA phi read(x) | UseUseExplosion.rb:20:178:20:3572 | SSA phi read(x) | | UseUseExplosion.rb:20:194:20:3556 | then ... | UseUseExplosion.rb:20:178:20:3572 | if ... | -| UseUseExplosion.rb:20:199:20:3556 | SSA phi read(self) | UseUseExplosion.rb:20:178:20:3572 | SSA phi read(self) | -| UseUseExplosion.rb:20:199:20:3556 | SSA phi read(x) | UseUseExplosion.rb:20:178:20:3572 | SSA phi read(x) | +| UseUseExplosion.rb:20:199:20:3556 | SSA phi read(self) | UseUseExplosion.rb:20:194:20:3556 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:199:20:3556 | SSA phi read(x) | UseUseExplosion.rb:20:194:20:3556 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:199:20:3556 | if ... | UseUseExplosion.rb:20:194:20:3556 | then ... | | UseUseExplosion.rb:20:203:20:207 | @prop | UseUseExplosion.rb:20:203:20:212 | ... > ... | | UseUseExplosion.rb:20:203:20:207 | [post] self | UseUseExplosion.rb:20:224:20:228 | self | @@ -320,9 +338,11 @@ | UseUseExplosion.rb:20:203:20:212 | ... > ... | UseUseExplosion.rb:20:202:20:213 | [false] ( ... ) | | UseUseExplosion.rb:20:203:20:212 | ... > ... | UseUseExplosion.rb:20:202:20:213 | [true] ( ... ) | | UseUseExplosion.rb:20:211:20:212 | 91 | UseUseExplosion.rb:20:203:20:212 | ... > ... | +| UseUseExplosion.rb:20:215:20:3540 | [input] SSA phi read(self) | UseUseExplosion.rb:20:199:20:3556 | SSA phi read(self) | +| UseUseExplosion.rb:20:215:20:3540 | [input] SSA phi read(x) | UseUseExplosion.rb:20:199:20:3556 | SSA phi read(x) | | UseUseExplosion.rb:20:215:20:3540 | then ... | UseUseExplosion.rb:20:199:20:3556 | if ... | -| UseUseExplosion.rb:20:220:20:3540 | SSA phi read(self) | UseUseExplosion.rb:20:199:20:3556 | SSA phi read(self) | -| UseUseExplosion.rb:20:220:20:3540 | SSA phi read(x) | UseUseExplosion.rb:20:199:20:3556 | SSA phi read(x) | +| UseUseExplosion.rb:20:220:20:3540 | SSA phi read(self) | UseUseExplosion.rb:20:215:20:3540 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:220:20:3540 | SSA phi read(x) | UseUseExplosion.rb:20:215:20:3540 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:220:20:3540 | if ... | UseUseExplosion.rb:20:215:20:3540 | then ... | | UseUseExplosion.rb:20:224:20:228 | @prop | UseUseExplosion.rb:20:224:20:233 | ... > ... | | UseUseExplosion.rb:20:224:20:228 | [post] self | UseUseExplosion.rb:20:245:20:249 | self | @@ -332,9 +352,11 @@ | UseUseExplosion.rb:20:224:20:233 | ... > ... | UseUseExplosion.rb:20:223:20:234 | [false] ( ... ) | | UseUseExplosion.rb:20:224:20:233 | ... > ... | UseUseExplosion.rb:20:223:20:234 | [true] ( ... ) | | UseUseExplosion.rb:20:232:20:233 | 90 | UseUseExplosion.rb:20:224:20:233 | ... > ... | +| UseUseExplosion.rb:20:236:20:3524 | [input] SSA phi read(self) | UseUseExplosion.rb:20:220:20:3540 | SSA phi read(self) | +| UseUseExplosion.rb:20:236:20:3524 | [input] SSA phi read(x) | UseUseExplosion.rb:20:220:20:3540 | SSA phi read(x) | | UseUseExplosion.rb:20:236:20:3524 | then ... | UseUseExplosion.rb:20:220:20:3540 | if ... | -| UseUseExplosion.rb:20:241:20:3524 | SSA phi read(self) | UseUseExplosion.rb:20:220:20:3540 | SSA phi read(self) | -| UseUseExplosion.rb:20:241:20:3524 | SSA phi read(x) | UseUseExplosion.rb:20:220:20:3540 | SSA phi read(x) | +| UseUseExplosion.rb:20:241:20:3524 | SSA phi read(self) | UseUseExplosion.rb:20:236:20:3524 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:241:20:3524 | SSA phi read(x) | UseUseExplosion.rb:20:236:20:3524 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:241:20:3524 | if ... | UseUseExplosion.rb:20:236:20:3524 | then ... | | UseUseExplosion.rb:20:245:20:249 | @prop | UseUseExplosion.rb:20:245:20:254 | ... > ... | | UseUseExplosion.rb:20:245:20:249 | [post] self | UseUseExplosion.rb:20:266:20:270 | self | @@ -344,9 +366,11 @@ | UseUseExplosion.rb:20:245:20:254 | ... > ... | UseUseExplosion.rb:20:244:20:255 | [false] ( ... ) | | UseUseExplosion.rb:20:245:20:254 | ... > ... | UseUseExplosion.rb:20:244:20:255 | [true] ( ... ) | | UseUseExplosion.rb:20:253:20:254 | 89 | UseUseExplosion.rb:20:245:20:254 | ... > ... | +| UseUseExplosion.rb:20:257:20:3508 | [input] SSA phi read(self) | UseUseExplosion.rb:20:241:20:3524 | SSA phi read(self) | +| UseUseExplosion.rb:20:257:20:3508 | [input] SSA phi read(x) | UseUseExplosion.rb:20:241:20:3524 | SSA phi read(x) | | UseUseExplosion.rb:20:257:20:3508 | then ... | UseUseExplosion.rb:20:241:20:3524 | if ... | -| UseUseExplosion.rb:20:262:20:3508 | SSA phi read(self) | UseUseExplosion.rb:20:241:20:3524 | SSA phi read(self) | -| UseUseExplosion.rb:20:262:20:3508 | SSA phi read(x) | UseUseExplosion.rb:20:241:20:3524 | SSA phi read(x) | +| UseUseExplosion.rb:20:262:20:3508 | SSA phi read(self) | UseUseExplosion.rb:20:257:20:3508 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:262:20:3508 | SSA phi read(x) | UseUseExplosion.rb:20:257:20:3508 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:262:20:3508 | if ... | UseUseExplosion.rb:20:257:20:3508 | then ... | | UseUseExplosion.rb:20:266:20:270 | @prop | UseUseExplosion.rb:20:266:20:275 | ... > ... | | UseUseExplosion.rb:20:266:20:270 | [post] self | UseUseExplosion.rb:20:287:20:291 | self | @@ -356,9 +380,11 @@ | UseUseExplosion.rb:20:266:20:275 | ... > ... | UseUseExplosion.rb:20:265:20:276 | [false] ( ... ) | | UseUseExplosion.rb:20:266:20:275 | ... > ... | UseUseExplosion.rb:20:265:20:276 | [true] ( ... ) | | UseUseExplosion.rb:20:274:20:275 | 88 | UseUseExplosion.rb:20:266:20:275 | ... > ... | +| UseUseExplosion.rb:20:278:20:3492 | [input] SSA phi read(self) | UseUseExplosion.rb:20:262:20:3508 | SSA phi read(self) | +| UseUseExplosion.rb:20:278:20:3492 | [input] SSA phi read(x) | UseUseExplosion.rb:20:262:20:3508 | SSA phi read(x) | | UseUseExplosion.rb:20:278:20:3492 | then ... | UseUseExplosion.rb:20:262:20:3508 | if ... | -| UseUseExplosion.rb:20:283:20:3492 | SSA phi read(self) | UseUseExplosion.rb:20:262:20:3508 | SSA phi read(self) | -| UseUseExplosion.rb:20:283:20:3492 | SSA phi read(x) | UseUseExplosion.rb:20:262:20:3508 | SSA phi read(x) | +| UseUseExplosion.rb:20:283:20:3492 | SSA phi read(self) | UseUseExplosion.rb:20:278:20:3492 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:283:20:3492 | SSA phi read(x) | UseUseExplosion.rb:20:278:20:3492 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:283:20:3492 | if ... | UseUseExplosion.rb:20:278:20:3492 | then ... | | UseUseExplosion.rb:20:287:20:291 | @prop | UseUseExplosion.rb:20:287:20:296 | ... > ... | | UseUseExplosion.rb:20:287:20:291 | [post] self | UseUseExplosion.rb:20:308:20:312 | self | @@ -368,9 +394,11 @@ | UseUseExplosion.rb:20:287:20:296 | ... > ... | UseUseExplosion.rb:20:286:20:297 | [false] ( ... ) | | UseUseExplosion.rb:20:287:20:296 | ... > ... | UseUseExplosion.rb:20:286:20:297 | [true] ( ... ) | | UseUseExplosion.rb:20:295:20:296 | 87 | UseUseExplosion.rb:20:287:20:296 | ... > ... | +| UseUseExplosion.rb:20:299:20:3476 | [input] SSA phi read(self) | UseUseExplosion.rb:20:283:20:3492 | SSA phi read(self) | +| UseUseExplosion.rb:20:299:20:3476 | [input] SSA phi read(x) | UseUseExplosion.rb:20:283:20:3492 | SSA phi read(x) | | UseUseExplosion.rb:20:299:20:3476 | then ... | UseUseExplosion.rb:20:283:20:3492 | if ... | -| UseUseExplosion.rb:20:304:20:3476 | SSA phi read(self) | UseUseExplosion.rb:20:283:20:3492 | SSA phi read(self) | -| UseUseExplosion.rb:20:304:20:3476 | SSA phi read(x) | UseUseExplosion.rb:20:283:20:3492 | SSA phi read(x) | +| UseUseExplosion.rb:20:304:20:3476 | SSA phi read(self) | UseUseExplosion.rb:20:299:20:3476 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:304:20:3476 | SSA phi read(x) | UseUseExplosion.rb:20:299:20:3476 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:304:20:3476 | if ... | UseUseExplosion.rb:20:299:20:3476 | then ... | | UseUseExplosion.rb:20:308:20:312 | @prop | UseUseExplosion.rb:20:308:20:317 | ... > ... | | UseUseExplosion.rb:20:308:20:312 | [post] self | UseUseExplosion.rb:20:329:20:333 | self | @@ -380,9 +408,11 @@ | UseUseExplosion.rb:20:308:20:317 | ... > ... | UseUseExplosion.rb:20:307:20:318 | [false] ( ... ) | | UseUseExplosion.rb:20:308:20:317 | ... > ... | UseUseExplosion.rb:20:307:20:318 | [true] ( ... ) | | UseUseExplosion.rb:20:316:20:317 | 86 | UseUseExplosion.rb:20:308:20:317 | ... > ... | +| UseUseExplosion.rb:20:320:20:3460 | [input] SSA phi read(self) | UseUseExplosion.rb:20:304:20:3476 | SSA phi read(self) | +| UseUseExplosion.rb:20:320:20:3460 | [input] SSA phi read(x) | UseUseExplosion.rb:20:304:20:3476 | SSA phi read(x) | | UseUseExplosion.rb:20:320:20:3460 | then ... | UseUseExplosion.rb:20:304:20:3476 | if ... | -| UseUseExplosion.rb:20:325:20:3460 | SSA phi read(self) | UseUseExplosion.rb:20:304:20:3476 | SSA phi read(self) | -| UseUseExplosion.rb:20:325:20:3460 | SSA phi read(x) | UseUseExplosion.rb:20:304:20:3476 | SSA phi read(x) | +| UseUseExplosion.rb:20:325:20:3460 | SSA phi read(self) | UseUseExplosion.rb:20:320:20:3460 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:325:20:3460 | SSA phi read(x) | UseUseExplosion.rb:20:320:20:3460 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:325:20:3460 | if ... | UseUseExplosion.rb:20:320:20:3460 | then ... | | UseUseExplosion.rb:20:329:20:333 | @prop | UseUseExplosion.rb:20:329:20:338 | ... > ... | | UseUseExplosion.rb:20:329:20:333 | [post] self | UseUseExplosion.rb:20:350:20:354 | self | @@ -392,9 +422,11 @@ | UseUseExplosion.rb:20:329:20:338 | ... > ... | UseUseExplosion.rb:20:328:20:339 | [false] ( ... ) | | UseUseExplosion.rb:20:329:20:338 | ... > ... | UseUseExplosion.rb:20:328:20:339 | [true] ( ... ) | | UseUseExplosion.rb:20:337:20:338 | 85 | UseUseExplosion.rb:20:329:20:338 | ... > ... | +| UseUseExplosion.rb:20:341:20:3444 | [input] SSA phi read(self) | UseUseExplosion.rb:20:325:20:3460 | SSA phi read(self) | +| UseUseExplosion.rb:20:341:20:3444 | [input] SSA phi read(x) | UseUseExplosion.rb:20:325:20:3460 | SSA phi read(x) | | UseUseExplosion.rb:20:341:20:3444 | then ... | UseUseExplosion.rb:20:325:20:3460 | if ... | -| UseUseExplosion.rb:20:346:20:3444 | SSA phi read(self) | UseUseExplosion.rb:20:325:20:3460 | SSA phi read(self) | -| UseUseExplosion.rb:20:346:20:3444 | SSA phi read(x) | UseUseExplosion.rb:20:325:20:3460 | SSA phi read(x) | +| UseUseExplosion.rb:20:346:20:3444 | SSA phi read(self) | UseUseExplosion.rb:20:341:20:3444 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:346:20:3444 | SSA phi read(x) | UseUseExplosion.rb:20:341:20:3444 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:346:20:3444 | if ... | UseUseExplosion.rb:20:341:20:3444 | then ... | | UseUseExplosion.rb:20:350:20:354 | @prop | UseUseExplosion.rb:20:350:20:359 | ... > ... | | UseUseExplosion.rb:20:350:20:354 | [post] self | UseUseExplosion.rb:20:371:20:375 | self | @@ -404,9 +436,11 @@ | UseUseExplosion.rb:20:350:20:359 | ... > ... | UseUseExplosion.rb:20:349:20:360 | [false] ( ... ) | | UseUseExplosion.rb:20:350:20:359 | ... > ... | UseUseExplosion.rb:20:349:20:360 | [true] ( ... ) | | UseUseExplosion.rb:20:358:20:359 | 84 | UseUseExplosion.rb:20:350:20:359 | ... > ... | +| UseUseExplosion.rb:20:362:20:3428 | [input] SSA phi read(self) | UseUseExplosion.rb:20:346:20:3444 | SSA phi read(self) | +| UseUseExplosion.rb:20:362:20:3428 | [input] SSA phi read(x) | UseUseExplosion.rb:20:346:20:3444 | SSA phi read(x) | | UseUseExplosion.rb:20:362:20:3428 | then ... | UseUseExplosion.rb:20:346:20:3444 | if ... | -| UseUseExplosion.rb:20:367:20:3428 | SSA phi read(self) | UseUseExplosion.rb:20:346:20:3444 | SSA phi read(self) | -| UseUseExplosion.rb:20:367:20:3428 | SSA phi read(x) | UseUseExplosion.rb:20:346:20:3444 | SSA phi read(x) | +| UseUseExplosion.rb:20:367:20:3428 | SSA phi read(self) | UseUseExplosion.rb:20:362:20:3428 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:367:20:3428 | SSA phi read(x) | UseUseExplosion.rb:20:362:20:3428 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:367:20:3428 | if ... | UseUseExplosion.rb:20:362:20:3428 | then ... | | UseUseExplosion.rb:20:371:20:375 | @prop | UseUseExplosion.rb:20:371:20:380 | ... > ... | | UseUseExplosion.rb:20:371:20:375 | [post] self | UseUseExplosion.rb:20:392:20:396 | self | @@ -416,9 +450,11 @@ | UseUseExplosion.rb:20:371:20:380 | ... > ... | UseUseExplosion.rb:20:370:20:381 | [false] ( ... ) | | UseUseExplosion.rb:20:371:20:380 | ... > ... | UseUseExplosion.rb:20:370:20:381 | [true] ( ... ) | | UseUseExplosion.rb:20:379:20:380 | 83 | UseUseExplosion.rb:20:371:20:380 | ... > ... | +| UseUseExplosion.rb:20:383:20:3412 | [input] SSA phi read(self) | UseUseExplosion.rb:20:367:20:3428 | SSA phi read(self) | +| UseUseExplosion.rb:20:383:20:3412 | [input] SSA phi read(x) | UseUseExplosion.rb:20:367:20:3428 | SSA phi read(x) | | UseUseExplosion.rb:20:383:20:3412 | then ... | UseUseExplosion.rb:20:367:20:3428 | if ... | -| UseUseExplosion.rb:20:388:20:3412 | SSA phi read(self) | UseUseExplosion.rb:20:367:20:3428 | SSA phi read(self) | -| UseUseExplosion.rb:20:388:20:3412 | SSA phi read(x) | UseUseExplosion.rb:20:367:20:3428 | SSA phi read(x) | +| UseUseExplosion.rb:20:388:20:3412 | SSA phi read(self) | UseUseExplosion.rb:20:383:20:3412 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:388:20:3412 | SSA phi read(x) | UseUseExplosion.rb:20:383:20:3412 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:388:20:3412 | if ... | UseUseExplosion.rb:20:383:20:3412 | then ... | | UseUseExplosion.rb:20:392:20:396 | @prop | UseUseExplosion.rb:20:392:20:401 | ... > ... | | UseUseExplosion.rb:20:392:20:396 | [post] self | UseUseExplosion.rb:20:413:20:417 | self | @@ -428,9 +464,11 @@ | UseUseExplosion.rb:20:392:20:401 | ... > ... | UseUseExplosion.rb:20:391:20:402 | [false] ( ... ) | | UseUseExplosion.rb:20:392:20:401 | ... > ... | UseUseExplosion.rb:20:391:20:402 | [true] ( ... ) | | UseUseExplosion.rb:20:400:20:401 | 82 | UseUseExplosion.rb:20:392:20:401 | ... > ... | +| UseUseExplosion.rb:20:404:20:3396 | [input] SSA phi read(self) | UseUseExplosion.rb:20:388:20:3412 | SSA phi read(self) | +| UseUseExplosion.rb:20:404:20:3396 | [input] SSA phi read(x) | UseUseExplosion.rb:20:388:20:3412 | SSA phi read(x) | | UseUseExplosion.rb:20:404:20:3396 | then ... | UseUseExplosion.rb:20:388:20:3412 | if ... | -| UseUseExplosion.rb:20:409:20:3396 | SSA phi read(self) | UseUseExplosion.rb:20:388:20:3412 | SSA phi read(self) | -| UseUseExplosion.rb:20:409:20:3396 | SSA phi read(x) | UseUseExplosion.rb:20:388:20:3412 | SSA phi read(x) | +| UseUseExplosion.rb:20:409:20:3396 | SSA phi read(self) | UseUseExplosion.rb:20:404:20:3396 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:409:20:3396 | SSA phi read(x) | UseUseExplosion.rb:20:404:20:3396 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:409:20:3396 | if ... | UseUseExplosion.rb:20:404:20:3396 | then ... | | UseUseExplosion.rb:20:413:20:417 | @prop | UseUseExplosion.rb:20:413:20:422 | ... > ... | | UseUseExplosion.rb:20:413:20:417 | [post] self | UseUseExplosion.rb:20:434:20:438 | self | @@ -440,9 +478,11 @@ | UseUseExplosion.rb:20:413:20:422 | ... > ... | UseUseExplosion.rb:20:412:20:423 | [false] ( ... ) | | UseUseExplosion.rb:20:413:20:422 | ... > ... | UseUseExplosion.rb:20:412:20:423 | [true] ( ... ) | | UseUseExplosion.rb:20:421:20:422 | 81 | UseUseExplosion.rb:20:413:20:422 | ... > ... | +| UseUseExplosion.rb:20:425:20:3380 | [input] SSA phi read(self) | UseUseExplosion.rb:20:409:20:3396 | SSA phi read(self) | +| UseUseExplosion.rb:20:425:20:3380 | [input] SSA phi read(x) | UseUseExplosion.rb:20:409:20:3396 | SSA phi read(x) | | UseUseExplosion.rb:20:425:20:3380 | then ... | UseUseExplosion.rb:20:409:20:3396 | if ... | -| UseUseExplosion.rb:20:430:20:3380 | SSA phi read(self) | UseUseExplosion.rb:20:409:20:3396 | SSA phi read(self) | -| UseUseExplosion.rb:20:430:20:3380 | SSA phi read(x) | UseUseExplosion.rb:20:409:20:3396 | SSA phi read(x) | +| UseUseExplosion.rb:20:430:20:3380 | SSA phi read(self) | UseUseExplosion.rb:20:425:20:3380 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:430:20:3380 | SSA phi read(x) | UseUseExplosion.rb:20:425:20:3380 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:430:20:3380 | if ... | UseUseExplosion.rb:20:425:20:3380 | then ... | | UseUseExplosion.rb:20:434:20:438 | @prop | UseUseExplosion.rb:20:434:20:443 | ... > ... | | UseUseExplosion.rb:20:434:20:438 | [post] self | UseUseExplosion.rb:20:455:20:459 | self | @@ -452,9 +492,11 @@ | UseUseExplosion.rb:20:434:20:443 | ... > ... | UseUseExplosion.rb:20:433:20:444 | [false] ( ... ) | | UseUseExplosion.rb:20:434:20:443 | ... > ... | UseUseExplosion.rb:20:433:20:444 | [true] ( ... ) | | UseUseExplosion.rb:20:442:20:443 | 80 | UseUseExplosion.rb:20:434:20:443 | ... > ... | +| UseUseExplosion.rb:20:446:20:3364 | [input] SSA phi read(self) | UseUseExplosion.rb:20:430:20:3380 | SSA phi read(self) | +| UseUseExplosion.rb:20:446:20:3364 | [input] SSA phi read(x) | UseUseExplosion.rb:20:430:20:3380 | SSA phi read(x) | | UseUseExplosion.rb:20:446:20:3364 | then ... | UseUseExplosion.rb:20:430:20:3380 | if ... | -| UseUseExplosion.rb:20:451:20:3364 | SSA phi read(self) | UseUseExplosion.rb:20:430:20:3380 | SSA phi read(self) | -| UseUseExplosion.rb:20:451:20:3364 | SSA phi read(x) | UseUseExplosion.rb:20:430:20:3380 | SSA phi read(x) | +| UseUseExplosion.rb:20:451:20:3364 | SSA phi read(self) | UseUseExplosion.rb:20:446:20:3364 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:451:20:3364 | SSA phi read(x) | UseUseExplosion.rb:20:446:20:3364 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:451:20:3364 | if ... | UseUseExplosion.rb:20:446:20:3364 | then ... | | UseUseExplosion.rb:20:455:20:459 | @prop | UseUseExplosion.rb:20:455:20:464 | ... > ... | | UseUseExplosion.rb:20:455:20:459 | [post] self | UseUseExplosion.rb:20:476:20:480 | self | @@ -464,9 +506,11 @@ | UseUseExplosion.rb:20:455:20:464 | ... > ... | UseUseExplosion.rb:20:454:20:465 | [false] ( ... ) | | UseUseExplosion.rb:20:455:20:464 | ... > ... | UseUseExplosion.rb:20:454:20:465 | [true] ( ... ) | | UseUseExplosion.rb:20:463:20:464 | 79 | UseUseExplosion.rb:20:455:20:464 | ... > ... | +| UseUseExplosion.rb:20:467:20:3348 | [input] SSA phi read(self) | UseUseExplosion.rb:20:451:20:3364 | SSA phi read(self) | +| UseUseExplosion.rb:20:467:20:3348 | [input] SSA phi read(x) | UseUseExplosion.rb:20:451:20:3364 | SSA phi read(x) | | UseUseExplosion.rb:20:467:20:3348 | then ... | UseUseExplosion.rb:20:451:20:3364 | if ... | -| UseUseExplosion.rb:20:472:20:3348 | SSA phi read(self) | UseUseExplosion.rb:20:451:20:3364 | SSA phi read(self) | -| UseUseExplosion.rb:20:472:20:3348 | SSA phi read(x) | UseUseExplosion.rb:20:451:20:3364 | SSA phi read(x) | +| UseUseExplosion.rb:20:472:20:3348 | SSA phi read(self) | UseUseExplosion.rb:20:467:20:3348 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:472:20:3348 | SSA phi read(x) | UseUseExplosion.rb:20:467:20:3348 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:472:20:3348 | if ... | UseUseExplosion.rb:20:467:20:3348 | then ... | | UseUseExplosion.rb:20:476:20:480 | @prop | UseUseExplosion.rb:20:476:20:485 | ... > ... | | UseUseExplosion.rb:20:476:20:480 | [post] self | UseUseExplosion.rb:20:497:20:501 | self | @@ -476,9 +520,11 @@ | UseUseExplosion.rb:20:476:20:485 | ... > ... | UseUseExplosion.rb:20:475:20:486 | [false] ( ... ) | | UseUseExplosion.rb:20:476:20:485 | ... > ... | UseUseExplosion.rb:20:475:20:486 | [true] ( ... ) | | UseUseExplosion.rb:20:484:20:485 | 78 | UseUseExplosion.rb:20:476:20:485 | ... > ... | +| UseUseExplosion.rb:20:488:20:3332 | [input] SSA phi read(self) | UseUseExplosion.rb:20:472:20:3348 | SSA phi read(self) | +| UseUseExplosion.rb:20:488:20:3332 | [input] SSA phi read(x) | UseUseExplosion.rb:20:472:20:3348 | SSA phi read(x) | | UseUseExplosion.rb:20:488:20:3332 | then ... | UseUseExplosion.rb:20:472:20:3348 | if ... | -| UseUseExplosion.rb:20:493:20:3332 | SSA phi read(self) | UseUseExplosion.rb:20:472:20:3348 | SSA phi read(self) | -| UseUseExplosion.rb:20:493:20:3332 | SSA phi read(x) | UseUseExplosion.rb:20:472:20:3348 | SSA phi read(x) | +| UseUseExplosion.rb:20:493:20:3332 | SSA phi read(self) | UseUseExplosion.rb:20:488:20:3332 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:493:20:3332 | SSA phi read(x) | UseUseExplosion.rb:20:488:20:3332 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:493:20:3332 | if ... | UseUseExplosion.rb:20:488:20:3332 | then ... | | UseUseExplosion.rb:20:497:20:501 | @prop | UseUseExplosion.rb:20:497:20:506 | ... > ... | | UseUseExplosion.rb:20:497:20:501 | [post] self | UseUseExplosion.rb:20:518:20:522 | self | @@ -488,9 +534,11 @@ | UseUseExplosion.rb:20:497:20:506 | ... > ... | UseUseExplosion.rb:20:496:20:507 | [false] ( ... ) | | UseUseExplosion.rb:20:497:20:506 | ... > ... | UseUseExplosion.rb:20:496:20:507 | [true] ( ... ) | | UseUseExplosion.rb:20:505:20:506 | 77 | UseUseExplosion.rb:20:497:20:506 | ... > ... | +| UseUseExplosion.rb:20:509:20:3316 | [input] SSA phi read(self) | UseUseExplosion.rb:20:493:20:3332 | SSA phi read(self) | +| UseUseExplosion.rb:20:509:20:3316 | [input] SSA phi read(x) | UseUseExplosion.rb:20:493:20:3332 | SSA phi read(x) | | UseUseExplosion.rb:20:509:20:3316 | then ... | UseUseExplosion.rb:20:493:20:3332 | if ... | -| UseUseExplosion.rb:20:514:20:3316 | SSA phi read(self) | UseUseExplosion.rb:20:493:20:3332 | SSA phi read(self) | -| UseUseExplosion.rb:20:514:20:3316 | SSA phi read(x) | UseUseExplosion.rb:20:493:20:3332 | SSA phi read(x) | +| UseUseExplosion.rb:20:514:20:3316 | SSA phi read(self) | UseUseExplosion.rb:20:509:20:3316 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:514:20:3316 | SSA phi read(x) | UseUseExplosion.rb:20:509:20:3316 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:514:20:3316 | if ... | UseUseExplosion.rb:20:509:20:3316 | then ... | | UseUseExplosion.rb:20:518:20:522 | @prop | UseUseExplosion.rb:20:518:20:527 | ... > ... | | UseUseExplosion.rb:20:518:20:522 | [post] self | UseUseExplosion.rb:20:539:20:543 | self | @@ -500,9 +548,11 @@ | UseUseExplosion.rb:20:518:20:527 | ... > ... | UseUseExplosion.rb:20:517:20:528 | [false] ( ... ) | | UseUseExplosion.rb:20:518:20:527 | ... > ... | UseUseExplosion.rb:20:517:20:528 | [true] ( ... ) | | UseUseExplosion.rb:20:526:20:527 | 76 | UseUseExplosion.rb:20:518:20:527 | ... > ... | +| UseUseExplosion.rb:20:530:20:3300 | [input] SSA phi read(self) | UseUseExplosion.rb:20:514:20:3316 | SSA phi read(self) | +| UseUseExplosion.rb:20:530:20:3300 | [input] SSA phi read(x) | UseUseExplosion.rb:20:514:20:3316 | SSA phi read(x) | | UseUseExplosion.rb:20:530:20:3300 | then ... | UseUseExplosion.rb:20:514:20:3316 | if ... | -| UseUseExplosion.rb:20:535:20:3300 | SSA phi read(self) | UseUseExplosion.rb:20:514:20:3316 | SSA phi read(self) | -| UseUseExplosion.rb:20:535:20:3300 | SSA phi read(x) | UseUseExplosion.rb:20:514:20:3316 | SSA phi read(x) | +| UseUseExplosion.rb:20:535:20:3300 | SSA phi read(self) | UseUseExplosion.rb:20:530:20:3300 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:535:20:3300 | SSA phi read(x) | UseUseExplosion.rb:20:530:20:3300 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:535:20:3300 | if ... | UseUseExplosion.rb:20:530:20:3300 | then ... | | UseUseExplosion.rb:20:539:20:543 | @prop | UseUseExplosion.rb:20:539:20:548 | ... > ... | | UseUseExplosion.rb:20:539:20:543 | [post] self | UseUseExplosion.rb:20:560:20:564 | self | @@ -512,9 +562,11 @@ | UseUseExplosion.rb:20:539:20:548 | ... > ... | UseUseExplosion.rb:20:538:20:549 | [false] ( ... ) | | UseUseExplosion.rb:20:539:20:548 | ... > ... | UseUseExplosion.rb:20:538:20:549 | [true] ( ... ) | | UseUseExplosion.rb:20:547:20:548 | 75 | UseUseExplosion.rb:20:539:20:548 | ... > ... | +| UseUseExplosion.rb:20:551:20:3284 | [input] SSA phi read(self) | UseUseExplosion.rb:20:535:20:3300 | SSA phi read(self) | +| UseUseExplosion.rb:20:551:20:3284 | [input] SSA phi read(x) | UseUseExplosion.rb:20:535:20:3300 | SSA phi read(x) | | UseUseExplosion.rb:20:551:20:3284 | then ... | UseUseExplosion.rb:20:535:20:3300 | if ... | -| UseUseExplosion.rb:20:556:20:3284 | SSA phi read(self) | UseUseExplosion.rb:20:535:20:3300 | SSA phi read(self) | -| UseUseExplosion.rb:20:556:20:3284 | SSA phi read(x) | UseUseExplosion.rb:20:535:20:3300 | SSA phi read(x) | +| UseUseExplosion.rb:20:556:20:3284 | SSA phi read(self) | UseUseExplosion.rb:20:551:20:3284 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:556:20:3284 | SSA phi read(x) | UseUseExplosion.rb:20:551:20:3284 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:556:20:3284 | if ... | UseUseExplosion.rb:20:551:20:3284 | then ... | | UseUseExplosion.rb:20:560:20:564 | @prop | UseUseExplosion.rb:20:560:20:569 | ... > ... | | UseUseExplosion.rb:20:560:20:564 | [post] self | UseUseExplosion.rb:20:581:20:585 | self | @@ -524,9 +576,11 @@ | UseUseExplosion.rb:20:560:20:569 | ... > ... | UseUseExplosion.rb:20:559:20:570 | [false] ( ... ) | | UseUseExplosion.rb:20:560:20:569 | ... > ... | UseUseExplosion.rb:20:559:20:570 | [true] ( ... ) | | UseUseExplosion.rb:20:568:20:569 | 74 | UseUseExplosion.rb:20:560:20:569 | ... > ... | +| UseUseExplosion.rb:20:572:20:3268 | [input] SSA phi read(self) | UseUseExplosion.rb:20:556:20:3284 | SSA phi read(self) | +| UseUseExplosion.rb:20:572:20:3268 | [input] SSA phi read(x) | UseUseExplosion.rb:20:556:20:3284 | SSA phi read(x) | | UseUseExplosion.rb:20:572:20:3268 | then ... | UseUseExplosion.rb:20:556:20:3284 | if ... | -| UseUseExplosion.rb:20:577:20:3268 | SSA phi read(self) | UseUseExplosion.rb:20:556:20:3284 | SSA phi read(self) | -| UseUseExplosion.rb:20:577:20:3268 | SSA phi read(x) | UseUseExplosion.rb:20:556:20:3284 | SSA phi read(x) | +| UseUseExplosion.rb:20:577:20:3268 | SSA phi read(self) | UseUseExplosion.rb:20:572:20:3268 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:577:20:3268 | SSA phi read(x) | UseUseExplosion.rb:20:572:20:3268 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:577:20:3268 | if ... | UseUseExplosion.rb:20:572:20:3268 | then ... | | UseUseExplosion.rb:20:581:20:585 | @prop | UseUseExplosion.rb:20:581:20:590 | ... > ... | | UseUseExplosion.rb:20:581:20:585 | [post] self | UseUseExplosion.rb:20:602:20:606 | self | @@ -536,9 +590,11 @@ | UseUseExplosion.rb:20:581:20:590 | ... > ... | UseUseExplosion.rb:20:580:20:591 | [false] ( ... ) | | UseUseExplosion.rb:20:581:20:590 | ... > ... | UseUseExplosion.rb:20:580:20:591 | [true] ( ... ) | | UseUseExplosion.rb:20:589:20:590 | 73 | UseUseExplosion.rb:20:581:20:590 | ... > ... | +| UseUseExplosion.rb:20:593:20:3252 | [input] SSA phi read(self) | UseUseExplosion.rb:20:577:20:3268 | SSA phi read(self) | +| UseUseExplosion.rb:20:593:20:3252 | [input] SSA phi read(x) | UseUseExplosion.rb:20:577:20:3268 | SSA phi read(x) | | UseUseExplosion.rb:20:593:20:3252 | then ... | UseUseExplosion.rb:20:577:20:3268 | if ... | -| UseUseExplosion.rb:20:598:20:3252 | SSA phi read(self) | UseUseExplosion.rb:20:577:20:3268 | SSA phi read(self) | -| UseUseExplosion.rb:20:598:20:3252 | SSA phi read(x) | UseUseExplosion.rb:20:577:20:3268 | SSA phi read(x) | +| UseUseExplosion.rb:20:598:20:3252 | SSA phi read(self) | UseUseExplosion.rb:20:593:20:3252 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:598:20:3252 | SSA phi read(x) | UseUseExplosion.rb:20:593:20:3252 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:598:20:3252 | if ... | UseUseExplosion.rb:20:593:20:3252 | then ... | | UseUseExplosion.rb:20:602:20:606 | @prop | UseUseExplosion.rb:20:602:20:611 | ... > ... | | UseUseExplosion.rb:20:602:20:606 | [post] self | UseUseExplosion.rb:20:623:20:627 | self | @@ -548,9 +604,11 @@ | UseUseExplosion.rb:20:602:20:611 | ... > ... | UseUseExplosion.rb:20:601:20:612 | [false] ( ... ) | | UseUseExplosion.rb:20:602:20:611 | ... > ... | UseUseExplosion.rb:20:601:20:612 | [true] ( ... ) | | UseUseExplosion.rb:20:610:20:611 | 72 | UseUseExplosion.rb:20:602:20:611 | ... > ... | +| UseUseExplosion.rb:20:614:20:3236 | [input] SSA phi read(self) | UseUseExplosion.rb:20:598:20:3252 | SSA phi read(self) | +| UseUseExplosion.rb:20:614:20:3236 | [input] SSA phi read(x) | UseUseExplosion.rb:20:598:20:3252 | SSA phi read(x) | | UseUseExplosion.rb:20:614:20:3236 | then ... | UseUseExplosion.rb:20:598:20:3252 | if ... | -| UseUseExplosion.rb:20:619:20:3236 | SSA phi read(self) | UseUseExplosion.rb:20:598:20:3252 | SSA phi read(self) | -| UseUseExplosion.rb:20:619:20:3236 | SSA phi read(x) | UseUseExplosion.rb:20:598:20:3252 | SSA phi read(x) | +| UseUseExplosion.rb:20:619:20:3236 | SSA phi read(self) | UseUseExplosion.rb:20:614:20:3236 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:619:20:3236 | SSA phi read(x) | UseUseExplosion.rb:20:614:20:3236 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:619:20:3236 | if ... | UseUseExplosion.rb:20:614:20:3236 | then ... | | UseUseExplosion.rb:20:623:20:627 | @prop | UseUseExplosion.rb:20:623:20:632 | ... > ... | | UseUseExplosion.rb:20:623:20:627 | [post] self | UseUseExplosion.rb:20:644:20:648 | self | @@ -560,9 +618,11 @@ | UseUseExplosion.rb:20:623:20:632 | ... > ... | UseUseExplosion.rb:20:622:20:633 | [false] ( ... ) | | UseUseExplosion.rb:20:623:20:632 | ... > ... | UseUseExplosion.rb:20:622:20:633 | [true] ( ... ) | | UseUseExplosion.rb:20:631:20:632 | 71 | UseUseExplosion.rb:20:623:20:632 | ... > ... | +| UseUseExplosion.rb:20:635:20:3220 | [input] SSA phi read(self) | UseUseExplosion.rb:20:619:20:3236 | SSA phi read(self) | +| UseUseExplosion.rb:20:635:20:3220 | [input] SSA phi read(x) | UseUseExplosion.rb:20:619:20:3236 | SSA phi read(x) | | UseUseExplosion.rb:20:635:20:3220 | then ... | UseUseExplosion.rb:20:619:20:3236 | if ... | -| UseUseExplosion.rb:20:640:20:3220 | SSA phi read(self) | UseUseExplosion.rb:20:619:20:3236 | SSA phi read(self) | -| UseUseExplosion.rb:20:640:20:3220 | SSA phi read(x) | UseUseExplosion.rb:20:619:20:3236 | SSA phi read(x) | +| UseUseExplosion.rb:20:640:20:3220 | SSA phi read(self) | UseUseExplosion.rb:20:635:20:3220 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:640:20:3220 | SSA phi read(x) | UseUseExplosion.rb:20:635:20:3220 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:640:20:3220 | if ... | UseUseExplosion.rb:20:635:20:3220 | then ... | | UseUseExplosion.rb:20:644:20:648 | @prop | UseUseExplosion.rb:20:644:20:653 | ... > ... | | UseUseExplosion.rb:20:644:20:648 | [post] self | UseUseExplosion.rb:20:665:20:669 | self | @@ -572,9 +632,11 @@ | UseUseExplosion.rb:20:644:20:653 | ... > ... | UseUseExplosion.rb:20:643:20:654 | [false] ( ... ) | | UseUseExplosion.rb:20:644:20:653 | ... > ... | UseUseExplosion.rb:20:643:20:654 | [true] ( ... ) | | UseUseExplosion.rb:20:652:20:653 | 70 | UseUseExplosion.rb:20:644:20:653 | ... > ... | +| UseUseExplosion.rb:20:656:20:3204 | [input] SSA phi read(self) | UseUseExplosion.rb:20:640:20:3220 | SSA phi read(self) | +| UseUseExplosion.rb:20:656:20:3204 | [input] SSA phi read(x) | UseUseExplosion.rb:20:640:20:3220 | SSA phi read(x) | | UseUseExplosion.rb:20:656:20:3204 | then ... | UseUseExplosion.rb:20:640:20:3220 | if ... | -| UseUseExplosion.rb:20:661:20:3204 | SSA phi read(self) | UseUseExplosion.rb:20:640:20:3220 | SSA phi read(self) | -| UseUseExplosion.rb:20:661:20:3204 | SSA phi read(x) | UseUseExplosion.rb:20:640:20:3220 | SSA phi read(x) | +| UseUseExplosion.rb:20:661:20:3204 | SSA phi read(self) | UseUseExplosion.rb:20:656:20:3204 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:661:20:3204 | SSA phi read(x) | UseUseExplosion.rb:20:656:20:3204 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:661:20:3204 | if ... | UseUseExplosion.rb:20:656:20:3204 | then ... | | UseUseExplosion.rb:20:665:20:669 | @prop | UseUseExplosion.rb:20:665:20:674 | ... > ... | | UseUseExplosion.rb:20:665:20:669 | [post] self | UseUseExplosion.rb:20:686:20:690 | self | @@ -584,9 +646,11 @@ | UseUseExplosion.rb:20:665:20:674 | ... > ... | UseUseExplosion.rb:20:664:20:675 | [false] ( ... ) | | UseUseExplosion.rb:20:665:20:674 | ... > ... | UseUseExplosion.rb:20:664:20:675 | [true] ( ... ) | | UseUseExplosion.rb:20:673:20:674 | 69 | UseUseExplosion.rb:20:665:20:674 | ... > ... | +| UseUseExplosion.rb:20:677:20:3188 | [input] SSA phi read(self) | UseUseExplosion.rb:20:661:20:3204 | SSA phi read(self) | +| UseUseExplosion.rb:20:677:20:3188 | [input] SSA phi read(x) | UseUseExplosion.rb:20:661:20:3204 | SSA phi read(x) | | UseUseExplosion.rb:20:677:20:3188 | then ... | UseUseExplosion.rb:20:661:20:3204 | if ... | -| UseUseExplosion.rb:20:682:20:3188 | SSA phi read(self) | UseUseExplosion.rb:20:661:20:3204 | SSA phi read(self) | -| UseUseExplosion.rb:20:682:20:3188 | SSA phi read(x) | UseUseExplosion.rb:20:661:20:3204 | SSA phi read(x) | +| UseUseExplosion.rb:20:682:20:3188 | SSA phi read(self) | UseUseExplosion.rb:20:677:20:3188 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:682:20:3188 | SSA phi read(x) | UseUseExplosion.rb:20:677:20:3188 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:682:20:3188 | if ... | UseUseExplosion.rb:20:677:20:3188 | then ... | | UseUseExplosion.rb:20:686:20:690 | @prop | UseUseExplosion.rb:20:686:20:695 | ... > ... | | UseUseExplosion.rb:20:686:20:690 | [post] self | UseUseExplosion.rb:20:707:20:711 | self | @@ -596,9 +660,11 @@ | UseUseExplosion.rb:20:686:20:695 | ... > ... | UseUseExplosion.rb:20:685:20:696 | [false] ( ... ) | | UseUseExplosion.rb:20:686:20:695 | ... > ... | UseUseExplosion.rb:20:685:20:696 | [true] ( ... ) | | UseUseExplosion.rb:20:694:20:695 | 68 | UseUseExplosion.rb:20:686:20:695 | ... > ... | +| UseUseExplosion.rb:20:698:20:3172 | [input] SSA phi read(self) | UseUseExplosion.rb:20:682:20:3188 | SSA phi read(self) | +| UseUseExplosion.rb:20:698:20:3172 | [input] SSA phi read(x) | UseUseExplosion.rb:20:682:20:3188 | SSA phi read(x) | | UseUseExplosion.rb:20:698:20:3172 | then ... | UseUseExplosion.rb:20:682:20:3188 | if ... | -| UseUseExplosion.rb:20:703:20:3172 | SSA phi read(self) | UseUseExplosion.rb:20:682:20:3188 | SSA phi read(self) | -| UseUseExplosion.rb:20:703:20:3172 | SSA phi read(x) | UseUseExplosion.rb:20:682:20:3188 | SSA phi read(x) | +| UseUseExplosion.rb:20:703:20:3172 | SSA phi read(self) | UseUseExplosion.rb:20:698:20:3172 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:703:20:3172 | SSA phi read(x) | UseUseExplosion.rb:20:698:20:3172 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:703:20:3172 | if ... | UseUseExplosion.rb:20:698:20:3172 | then ... | | UseUseExplosion.rb:20:707:20:711 | @prop | UseUseExplosion.rb:20:707:20:716 | ... > ... | | UseUseExplosion.rb:20:707:20:711 | [post] self | UseUseExplosion.rb:20:728:20:732 | self | @@ -608,9 +674,11 @@ | UseUseExplosion.rb:20:707:20:716 | ... > ... | UseUseExplosion.rb:20:706:20:717 | [false] ( ... ) | | UseUseExplosion.rb:20:707:20:716 | ... > ... | UseUseExplosion.rb:20:706:20:717 | [true] ( ... ) | | UseUseExplosion.rb:20:715:20:716 | 67 | UseUseExplosion.rb:20:707:20:716 | ... > ... | +| UseUseExplosion.rb:20:719:20:3156 | [input] SSA phi read(self) | UseUseExplosion.rb:20:703:20:3172 | SSA phi read(self) | +| UseUseExplosion.rb:20:719:20:3156 | [input] SSA phi read(x) | UseUseExplosion.rb:20:703:20:3172 | SSA phi read(x) | | UseUseExplosion.rb:20:719:20:3156 | then ... | UseUseExplosion.rb:20:703:20:3172 | if ... | -| UseUseExplosion.rb:20:724:20:3156 | SSA phi read(self) | UseUseExplosion.rb:20:703:20:3172 | SSA phi read(self) | -| UseUseExplosion.rb:20:724:20:3156 | SSA phi read(x) | UseUseExplosion.rb:20:703:20:3172 | SSA phi read(x) | +| UseUseExplosion.rb:20:724:20:3156 | SSA phi read(self) | UseUseExplosion.rb:20:719:20:3156 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:724:20:3156 | SSA phi read(x) | UseUseExplosion.rb:20:719:20:3156 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:724:20:3156 | if ... | UseUseExplosion.rb:20:719:20:3156 | then ... | | UseUseExplosion.rb:20:728:20:732 | @prop | UseUseExplosion.rb:20:728:20:737 | ... > ... | | UseUseExplosion.rb:20:728:20:732 | [post] self | UseUseExplosion.rb:20:749:20:753 | self | @@ -620,9 +688,11 @@ | UseUseExplosion.rb:20:728:20:737 | ... > ... | UseUseExplosion.rb:20:727:20:738 | [false] ( ... ) | | UseUseExplosion.rb:20:728:20:737 | ... > ... | UseUseExplosion.rb:20:727:20:738 | [true] ( ... ) | | UseUseExplosion.rb:20:736:20:737 | 66 | UseUseExplosion.rb:20:728:20:737 | ... > ... | +| UseUseExplosion.rb:20:740:20:3140 | [input] SSA phi read(self) | UseUseExplosion.rb:20:724:20:3156 | SSA phi read(self) | +| UseUseExplosion.rb:20:740:20:3140 | [input] SSA phi read(x) | UseUseExplosion.rb:20:724:20:3156 | SSA phi read(x) | | UseUseExplosion.rb:20:740:20:3140 | then ... | UseUseExplosion.rb:20:724:20:3156 | if ... | -| UseUseExplosion.rb:20:745:20:3140 | SSA phi read(self) | UseUseExplosion.rb:20:724:20:3156 | SSA phi read(self) | -| UseUseExplosion.rb:20:745:20:3140 | SSA phi read(x) | UseUseExplosion.rb:20:724:20:3156 | SSA phi read(x) | +| UseUseExplosion.rb:20:745:20:3140 | SSA phi read(self) | UseUseExplosion.rb:20:740:20:3140 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:745:20:3140 | SSA phi read(x) | UseUseExplosion.rb:20:740:20:3140 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:745:20:3140 | if ... | UseUseExplosion.rb:20:740:20:3140 | then ... | | UseUseExplosion.rb:20:749:20:753 | @prop | UseUseExplosion.rb:20:749:20:758 | ... > ... | | UseUseExplosion.rb:20:749:20:753 | [post] self | UseUseExplosion.rb:20:770:20:774 | self | @@ -632,9 +702,11 @@ | UseUseExplosion.rb:20:749:20:758 | ... > ... | UseUseExplosion.rb:20:748:20:759 | [false] ( ... ) | | UseUseExplosion.rb:20:749:20:758 | ... > ... | UseUseExplosion.rb:20:748:20:759 | [true] ( ... ) | | UseUseExplosion.rb:20:757:20:758 | 65 | UseUseExplosion.rb:20:749:20:758 | ... > ... | +| UseUseExplosion.rb:20:761:20:3124 | [input] SSA phi read(self) | UseUseExplosion.rb:20:745:20:3140 | SSA phi read(self) | +| UseUseExplosion.rb:20:761:20:3124 | [input] SSA phi read(x) | UseUseExplosion.rb:20:745:20:3140 | SSA phi read(x) | | UseUseExplosion.rb:20:761:20:3124 | then ... | UseUseExplosion.rb:20:745:20:3140 | if ... | -| UseUseExplosion.rb:20:766:20:3124 | SSA phi read(self) | UseUseExplosion.rb:20:745:20:3140 | SSA phi read(self) | -| UseUseExplosion.rb:20:766:20:3124 | SSA phi read(x) | UseUseExplosion.rb:20:745:20:3140 | SSA phi read(x) | +| UseUseExplosion.rb:20:766:20:3124 | SSA phi read(self) | UseUseExplosion.rb:20:761:20:3124 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:766:20:3124 | SSA phi read(x) | UseUseExplosion.rb:20:761:20:3124 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:766:20:3124 | if ... | UseUseExplosion.rb:20:761:20:3124 | then ... | | UseUseExplosion.rb:20:770:20:774 | @prop | UseUseExplosion.rb:20:770:20:779 | ... > ... | | UseUseExplosion.rb:20:770:20:774 | [post] self | UseUseExplosion.rb:20:791:20:795 | self | @@ -644,9 +716,11 @@ | UseUseExplosion.rb:20:770:20:779 | ... > ... | UseUseExplosion.rb:20:769:20:780 | [false] ( ... ) | | UseUseExplosion.rb:20:770:20:779 | ... > ... | UseUseExplosion.rb:20:769:20:780 | [true] ( ... ) | | UseUseExplosion.rb:20:778:20:779 | 64 | UseUseExplosion.rb:20:770:20:779 | ... > ... | +| UseUseExplosion.rb:20:782:20:3108 | [input] SSA phi read(self) | UseUseExplosion.rb:20:766:20:3124 | SSA phi read(self) | +| UseUseExplosion.rb:20:782:20:3108 | [input] SSA phi read(x) | UseUseExplosion.rb:20:766:20:3124 | SSA phi read(x) | | UseUseExplosion.rb:20:782:20:3108 | then ... | UseUseExplosion.rb:20:766:20:3124 | if ... | -| UseUseExplosion.rb:20:787:20:3108 | SSA phi read(self) | UseUseExplosion.rb:20:766:20:3124 | SSA phi read(self) | -| UseUseExplosion.rb:20:787:20:3108 | SSA phi read(x) | UseUseExplosion.rb:20:766:20:3124 | SSA phi read(x) | +| UseUseExplosion.rb:20:787:20:3108 | SSA phi read(self) | UseUseExplosion.rb:20:782:20:3108 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:787:20:3108 | SSA phi read(x) | UseUseExplosion.rb:20:782:20:3108 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:787:20:3108 | if ... | UseUseExplosion.rb:20:782:20:3108 | then ... | | UseUseExplosion.rb:20:791:20:795 | @prop | UseUseExplosion.rb:20:791:20:800 | ... > ... | | UseUseExplosion.rb:20:791:20:795 | [post] self | UseUseExplosion.rb:20:812:20:816 | self | @@ -656,9 +730,11 @@ | UseUseExplosion.rb:20:791:20:800 | ... > ... | UseUseExplosion.rb:20:790:20:801 | [false] ( ... ) | | UseUseExplosion.rb:20:791:20:800 | ... > ... | UseUseExplosion.rb:20:790:20:801 | [true] ( ... ) | | UseUseExplosion.rb:20:799:20:800 | 63 | UseUseExplosion.rb:20:791:20:800 | ... > ... | +| UseUseExplosion.rb:20:803:20:3092 | [input] SSA phi read(self) | UseUseExplosion.rb:20:787:20:3108 | SSA phi read(self) | +| UseUseExplosion.rb:20:803:20:3092 | [input] SSA phi read(x) | UseUseExplosion.rb:20:787:20:3108 | SSA phi read(x) | | UseUseExplosion.rb:20:803:20:3092 | then ... | UseUseExplosion.rb:20:787:20:3108 | if ... | -| UseUseExplosion.rb:20:808:20:3092 | SSA phi read(self) | UseUseExplosion.rb:20:787:20:3108 | SSA phi read(self) | -| UseUseExplosion.rb:20:808:20:3092 | SSA phi read(x) | UseUseExplosion.rb:20:787:20:3108 | SSA phi read(x) | +| UseUseExplosion.rb:20:808:20:3092 | SSA phi read(self) | UseUseExplosion.rb:20:803:20:3092 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:808:20:3092 | SSA phi read(x) | UseUseExplosion.rb:20:803:20:3092 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:808:20:3092 | if ... | UseUseExplosion.rb:20:803:20:3092 | then ... | | UseUseExplosion.rb:20:812:20:816 | @prop | UseUseExplosion.rb:20:812:20:821 | ... > ... | | UseUseExplosion.rb:20:812:20:816 | [post] self | UseUseExplosion.rb:20:833:20:837 | self | @@ -668,9 +744,11 @@ | UseUseExplosion.rb:20:812:20:821 | ... > ... | UseUseExplosion.rb:20:811:20:822 | [false] ( ... ) | | UseUseExplosion.rb:20:812:20:821 | ... > ... | UseUseExplosion.rb:20:811:20:822 | [true] ( ... ) | | UseUseExplosion.rb:20:820:20:821 | 62 | UseUseExplosion.rb:20:812:20:821 | ... > ... | +| UseUseExplosion.rb:20:824:20:3076 | [input] SSA phi read(self) | UseUseExplosion.rb:20:808:20:3092 | SSA phi read(self) | +| UseUseExplosion.rb:20:824:20:3076 | [input] SSA phi read(x) | UseUseExplosion.rb:20:808:20:3092 | SSA phi read(x) | | UseUseExplosion.rb:20:824:20:3076 | then ... | UseUseExplosion.rb:20:808:20:3092 | if ... | -| UseUseExplosion.rb:20:829:20:3076 | SSA phi read(self) | UseUseExplosion.rb:20:808:20:3092 | SSA phi read(self) | -| UseUseExplosion.rb:20:829:20:3076 | SSA phi read(x) | UseUseExplosion.rb:20:808:20:3092 | SSA phi read(x) | +| UseUseExplosion.rb:20:829:20:3076 | SSA phi read(self) | UseUseExplosion.rb:20:824:20:3076 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:829:20:3076 | SSA phi read(x) | UseUseExplosion.rb:20:824:20:3076 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:829:20:3076 | if ... | UseUseExplosion.rb:20:824:20:3076 | then ... | | UseUseExplosion.rb:20:833:20:837 | @prop | UseUseExplosion.rb:20:833:20:842 | ... > ... | | UseUseExplosion.rb:20:833:20:837 | [post] self | UseUseExplosion.rb:20:854:20:858 | self | @@ -680,9 +758,11 @@ | UseUseExplosion.rb:20:833:20:842 | ... > ... | UseUseExplosion.rb:20:832:20:843 | [false] ( ... ) | | UseUseExplosion.rb:20:833:20:842 | ... > ... | UseUseExplosion.rb:20:832:20:843 | [true] ( ... ) | | UseUseExplosion.rb:20:841:20:842 | 61 | UseUseExplosion.rb:20:833:20:842 | ... > ... | +| UseUseExplosion.rb:20:845:20:3060 | [input] SSA phi read(self) | UseUseExplosion.rb:20:829:20:3076 | SSA phi read(self) | +| UseUseExplosion.rb:20:845:20:3060 | [input] SSA phi read(x) | UseUseExplosion.rb:20:829:20:3076 | SSA phi read(x) | | UseUseExplosion.rb:20:845:20:3060 | then ... | UseUseExplosion.rb:20:829:20:3076 | if ... | -| UseUseExplosion.rb:20:850:20:3060 | SSA phi read(self) | UseUseExplosion.rb:20:829:20:3076 | SSA phi read(self) | -| UseUseExplosion.rb:20:850:20:3060 | SSA phi read(x) | UseUseExplosion.rb:20:829:20:3076 | SSA phi read(x) | +| UseUseExplosion.rb:20:850:20:3060 | SSA phi read(self) | UseUseExplosion.rb:20:845:20:3060 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:850:20:3060 | SSA phi read(x) | UseUseExplosion.rb:20:845:20:3060 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:850:20:3060 | if ... | UseUseExplosion.rb:20:845:20:3060 | then ... | | UseUseExplosion.rb:20:854:20:858 | @prop | UseUseExplosion.rb:20:854:20:863 | ... > ... | | UseUseExplosion.rb:20:854:20:858 | [post] self | UseUseExplosion.rb:20:875:20:879 | self | @@ -692,9 +772,11 @@ | UseUseExplosion.rb:20:854:20:863 | ... > ... | UseUseExplosion.rb:20:853:20:864 | [false] ( ... ) | | UseUseExplosion.rb:20:854:20:863 | ... > ... | UseUseExplosion.rb:20:853:20:864 | [true] ( ... ) | | UseUseExplosion.rb:20:862:20:863 | 60 | UseUseExplosion.rb:20:854:20:863 | ... > ... | +| UseUseExplosion.rb:20:866:20:3044 | [input] SSA phi read(self) | UseUseExplosion.rb:20:850:20:3060 | SSA phi read(self) | +| UseUseExplosion.rb:20:866:20:3044 | [input] SSA phi read(x) | UseUseExplosion.rb:20:850:20:3060 | SSA phi read(x) | | UseUseExplosion.rb:20:866:20:3044 | then ... | UseUseExplosion.rb:20:850:20:3060 | if ... | -| UseUseExplosion.rb:20:871:20:3044 | SSA phi read(self) | UseUseExplosion.rb:20:850:20:3060 | SSA phi read(self) | -| UseUseExplosion.rb:20:871:20:3044 | SSA phi read(x) | UseUseExplosion.rb:20:850:20:3060 | SSA phi read(x) | +| UseUseExplosion.rb:20:871:20:3044 | SSA phi read(self) | UseUseExplosion.rb:20:866:20:3044 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:871:20:3044 | SSA phi read(x) | UseUseExplosion.rb:20:866:20:3044 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:871:20:3044 | if ... | UseUseExplosion.rb:20:866:20:3044 | then ... | | UseUseExplosion.rb:20:875:20:879 | @prop | UseUseExplosion.rb:20:875:20:884 | ... > ... | | UseUseExplosion.rb:20:875:20:879 | [post] self | UseUseExplosion.rb:20:896:20:900 | self | @@ -704,9 +786,11 @@ | UseUseExplosion.rb:20:875:20:884 | ... > ... | UseUseExplosion.rb:20:874:20:885 | [false] ( ... ) | | UseUseExplosion.rb:20:875:20:884 | ... > ... | UseUseExplosion.rb:20:874:20:885 | [true] ( ... ) | | UseUseExplosion.rb:20:883:20:884 | 59 | UseUseExplosion.rb:20:875:20:884 | ... > ... | +| UseUseExplosion.rb:20:887:20:3028 | [input] SSA phi read(self) | UseUseExplosion.rb:20:871:20:3044 | SSA phi read(self) | +| UseUseExplosion.rb:20:887:20:3028 | [input] SSA phi read(x) | UseUseExplosion.rb:20:871:20:3044 | SSA phi read(x) | | UseUseExplosion.rb:20:887:20:3028 | then ... | UseUseExplosion.rb:20:871:20:3044 | if ... | -| UseUseExplosion.rb:20:892:20:3028 | SSA phi read(self) | UseUseExplosion.rb:20:871:20:3044 | SSA phi read(self) | -| UseUseExplosion.rb:20:892:20:3028 | SSA phi read(x) | UseUseExplosion.rb:20:871:20:3044 | SSA phi read(x) | +| UseUseExplosion.rb:20:892:20:3028 | SSA phi read(self) | UseUseExplosion.rb:20:887:20:3028 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:892:20:3028 | SSA phi read(x) | UseUseExplosion.rb:20:887:20:3028 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:892:20:3028 | if ... | UseUseExplosion.rb:20:887:20:3028 | then ... | | UseUseExplosion.rb:20:896:20:900 | @prop | UseUseExplosion.rb:20:896:20:905 | ... > ... | | UseUseExplosion.rb:20:896:20:900 | [post] self | UseUseExplosion.rb:20:917:20:921 | self | @@ -716,9 +800,11 @@ | UseUseExplosion.rb:20:896:20:905 | ... > ... | UseUseExplosion.rb:20:895:20:906 | [false] ( ... ) | | UseUseExplosion.rb:20:896:20:905 | ... > ... | UseUseExplosion.rb:20:895:20:906 | [true] ( ... ) | | UseUseExplosion.rb:20:904:20:905 | 58 | UseUseExplosion.rb:20:896:20:905 | ... > ... | +| UseUseExplosion.rb:20:908:20:3012 | [input] SSA phi read(self) | UseUseExplosion.rb:20:892:20:3028 | SSA phi read(self) | +| UseUseExplosion.rb:20:908:20:3012 | [input] SSA phi read(x) | UseUseExplosion.rb:20:892:20:3028 | SSA phi read(x) | | UseUseExplosion.rb:20:908:20:3012 | then ... | UseUseExplosion.rb:20:892:20:3028 | if ... | -| UseUseExplosion.rb:20:913:20:3012 | SSA phi read(self) | UseUseExplosion.rb:20:892:20:3028 | SSA phi read(self) | -| UseUseExplosion.rb:20:913:20:3012 | SSA phi read(x) | UseUseExplosion.rb:20:892:20:3028 | SSA phi read(x) | +| UseUseExplosion.rb:20:913:20:3012 | SSA phi read(self) | UseUseExplosion.rb:20:908:20:3012 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:913:20:3012 | SSA phi read(x) | UseUseExplosion.rb:20:908:20:3012 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:913:20:3012 | if ... | UseUseExplosion.rb:20:908:20:3012 | then ... | | UseUseExplosion.rb:20:917:20:921 | @prop | UseUseExplosion.rb:20:917:20:926 | ... > ... | | UseUseExplosion.rb:20:917:20:921 | [post] self | UseUseExplosion.rb:20:938:20:942 | self | @@ -728,9 +814,11 @@ | UseUseExplosion.rb:20:917:20:926 | ... > ... | UseUseExplosion.rb:20:916:20:927 | [false] ( ... ) | | UseUseExplosion.rb:20:917:20:926 | ... > ... | UseUseExplosion.rb:20:916:20:927 | [true] ( ... ) | | UseUseExplosion.rb:20:925:20:926 | 57 | UseUseExplosion.rb:20:917:20:926 | ... > ... | +| UseUseExplosion.rb:20:929:20:2996 | [input] SSA phi read(self) | UseUseExplosion.rb:20:913:20:3012 | SSA phi read(self) | +| UseUseExplosion.rb:20:929:20:2996 | [input] SSA phi read(x) | UseUseExplosion.rb:20:913:20:3012 | SSA phi read(x) | | UseUseExplosion.rb:20:929:20:2996 | then ... | UseUseExplosion.rb:20:913:20:3012 | if ... | -| UseUseExplosion.rb:20:934:20:2996 | SSA phi read(self) | UseUseExplosion.rb:20:913:20:3012 | SSA phi read(self) | -| UseUseExplosion.rb:20:934:20:2996 | SSA phi read(x) | UseUseExplosion.rb:20:913:20:3012 | SSA phi read(x) | +| UseUseExplosion.rb:20:934:20:2996 | SSA phi read(self) | UseUseExplosion.rb:20:929:20:2996 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:934:20:2996 | SSA phi read(x) | UseUseExplosion.rb:20:929:20:2996 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:934:20:2996 | if ... | UseUseExplosion.rb:20:929:20:2996 | then ... | | UseUseExplosion.rb:20:938:20:942 | @prop | UseUseExplosion.rb:20:938:20:947 | ... > ... | | UseUseExplosion.rb:20:938:20:942 | [post] self | UseUseExplosion.rb:20:959:20:963 | self | @@ -740,9 +828,11 @@ | UseUseExplosion.rb:20:938:20:947 | ... > ... | UseUseExplosion.rb:20:937:20:948 | [false] ( ... ) | | UseUseExplosion.rb:20:938:20:947 | ... > ... | UseUseExplosion.rb:20:937:20:948 | [true] ( ... ) | | UseUseExplosion.rb:20:946:20:947 | 56 | UseUseExplosion.rb:20:938:20:947 | ... > ... | +| UseUseExplosion.rb:20:950:20:2980 | [input] SSA phi read(self) | UseUseExplosion.rb:20:934:20:2996 | SSA phi read(self) | +| UseUseExplosion.rb:20:950:20:2980 | [input] SSA phi read(x) | UseUseExplosion.rb:20:934:20:2996 | SSA phi read(x) | | UseUseExplosion.rb:20:950:20:2980 | then ... | UseUseExplosion.rb:20:934:20:2996 | if ... | -| UseUseExplosion.rb:20:955:20:2980 | SSA phi read(self) | UseUseExplosion.rb:20:934:20:2996 | SSA phi read(self) | -| UseUseExplosion.rb:20:955:20:2980 | SSA phi read(x) | UseUseExplosion.rb:20:934:20:2996 | SSA phi read(x) | +| UseUseExplosion.rb:20:955:20:2980 | SSA phi read(self) | UseUseExplosion.rb:20:950:20:2980 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:955:20:2980 | SSA phi read(x) | UseUseExplosion.rb:20:950:20:2980 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:955:20:2980 | if ... | UseUseExplosion.rb:20:950:20:2980 | then ... | | UseUseExplosion.rb:20:959:20:963 | @prop | UseUseExplosion.rb:20:959:20:968 | ... > ... | | UseUseExplosion.rb:20:959:20:963 | [post] self | UseUseExplosion.rb:20:980:20:984 | self | @@ -752,9 +842,11 @@ | UseUseExplosion.rb:20:959:20:968 | ... > ... | UseUseExplosion.rb:20:958:20:969 | [false] ( ... ) | | UseUseExplosion.rb:20:959:20:968 | ... > ... | UseUseExplosion.rb:20:958:20:969 | [true] ( ... ) | | UseUseExplosion.rb:20:967:20:968 | 55 | UseUseExplosion.rb:20:959:20:968 | ... > ... | +| UseUseExplosion.rb:20:971:20:2964 | [input] SSA phi read(self) | UseUseExplosion.rb:20:955:20:2980 | SSA phi read(self) | +| UseUseExplosion.rb:20:971:20:2964 | [input] SSA phi read(x) | UseUseExplosion.rb:20:955:20:2980 | SSA phi read(x) | | UseUseExplosion.rb:20:971:20:2964 | then ... | UseUseExplosion.rb:20:955:20:2980 | if ... | -| UseUseExplosion.rb:20:976:20:2964 | SSA phi read(self) | UseUseExplosion.rb:20:955:20:2980 | SSA phi read(self) | -| UseUseExplosion.rb:20:976:20:2964 | SSA phi read(x) | UseUseExplosion.rb:20:955:20:2980 | SSA phi read(x) | +| UseUseExplosion.rb:20:976:20:2964 | SSA phi read(self) | UseUseExplosion.rb:20:971:20:2964 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:976:20:2964 | SSA phi read(x) | UseUseExplosion.rb:20:971:20:2964 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:976:20:2964 | if ... | UseUseExplosion.rb:20:971:20:2964 | then ... | | UseUseExplosion.rb:20:980:20:984 | @prop | UseUseExplosion.rb:20:980:20:989 | ... > ... | | UseUseExplosion.rb:20:980:20:984 | [post] self | UseUseExplosion.rb:20:1001:20:1005 | self | @@ -764,9 +856,11 @@ | UseUseExplosion.rb:20:980:20:989 | ... > ... | UseUseExplosion.rb:20:979:20:990 | [false] ( ... ) | | UseUseExplosion.rb:20:980:20:989 | ... > ... | UseUseExplosion.rb:20:979:20:990 | [true] ( ... ) | | UseUseExplosion.rb:20:988:20:989 | 54 | UseUseExplosion.rb:20:980:20:989 | ... > ... | +| UseUseExplosion.rb:20:992:20:2948 | [input] SSA phi read(self) | UseUseExplosion.rb:20:976:20:2964 | SSA phi read(self) | +| UseUseExplosion.rb:20:992:20:2948 | [input] SSA phi read(x) | UseUseExplosion.rb:20:976:20:2964 | SSA phi read(x) | | UseUseExplosion.rb:20:992:20:2948 | then ... | UseUseExplosion.rb:20:976:20:2964 | if ... | -| UseUseExplosion.rb:20:997:20:2948 | SSA phi read(self) | UseUseExplosion.rb:20:976:20:2964 | SSA phi read(self) | -| UseUseExplosion.rb:20:997:20:2948 | SSA phi read(x) | UseUseExplosion.rb:20:976:20:2964 | SSA phi read(x) | +| UseUseExplosion.rb:20:997:20:2948 | SSA phi read(self) | UseUseExplosion.rb:20:992:20:2948 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:997:20:2948 | SSA phi read(x) | UseUseExplosion.rb:20:992:20:2948 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:997:20:2948 | if ... | UseUseExplosion.rb:20:992:20:2948 | then ... | | UseUseExplosion.rb:20:1001:20:1005 | @prop | UseUseExplosion.rb:20:1001:20:1010 | ... > ... | | UseUseExplosion.rb:20:1001:20:1005 | [post] self | UseUseExplosion.rb:20:1022:20:1026 | self | @@ -776,9 +870,11 @@ | UseUseExplosion.rb:20:1001:20:1010 | ... > ... | UseUseExplosion.rb:20:1000:20:1011 | [false] ( ... ) | | UseUseExplosion.rb:20:1001:20:1010 | ... > ... | UseUseExplosion.rb:20:1000:20:1011 | [true] ( ... ) | | UseUseExplosion.rb:20:1009:20:1010 | 53 | UseUseExplosion.rb:20:1001:20:1010 | ... > ... | +| UseUseExplosion.rb:20:1013:20:2932 | [input] SSA phi read(self) | UseUseExplosion.rb:20:997:20:2948 | SSA phi read(self) | +| UseUseExplosion.rb:20:1013:20:2932 | [input] SSA phi read(x) | UseUseExplosion.rb:20:997:20:2948 | SSA phi read(x) | | UseUseExplosion.rb:20:1013:20:2932 | then ... | UseUseExplosion.rb:20:997:20:2948 | if ... | -| UseUseExplosion.rb:20:1018:20:2932 | SSA phi read(self) | UseUseExplosion.rb:20:997:20:2948 | SSA phi read(self) | -| UseUseExplosion.rb:20:1018:20:2932 | SSA phi read(x) | UseUseExplosion.rb:20:997:20:2948 | SSA phi read(x) | +| UseUseExplosion.rb:20:1018:20:2932 | SSA phi read(self) | UseUseExplosion.rb:20:1013:20:2932 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1018:20:2932 | SSA phi read(x) | UseUseExplosion.rb:20:1013:20:2932 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1018:20:2932 | if ... | UseUseExplosion.rb:20:1013:20:2932 | then ... | | UseUseExplosion.rb:20:1022:20:1026 | @prop | UseUseExplosion.rb:20:1022:20:1031 | ... > ... | | UseUseExplosion.rb:20:1022:20:1026 | [post] self | UseUseExplosion.rb:20:1043:20:1047 | self | @@ -788,9 +884,11 @@ | UseUseExplosion.rb:20:1022:20:1031 | ... > ... | UseUseExplosion.rb:20:1021:20:1032 | [false] ( ... ) | | UseUseExplosion.rb:20:1022:20:1031 | ... > ... | UseUseExplosion.rb:20:1021:20:1032 | [true] ( ... ) | | UseUseExplosion.rb:20:1030:20:1031 | 52 | UseUseExplosion.rb:20:1022:20:1031 | ... > ... | +| UseUseExplosion.rb:20:1034:20:2916 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1018:20:2932 | SSA phi read(self) | +| UseUseExplosion.rb:20:1034:20:2916 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1018:20:2932 | SSA phi read(x) | | UseUseExplosion.rb:20:1034:20:2916 | then ... | UseUseExplosion.rb:20:1018:20:2932 | if ... | -| UseUseExplosion.rb:20:1039:20:2916 | SSA phi read(self) | UseUseExplosion.rb:20:1018:20:2932 | SSA phi read(self) | -| UseUseExplosion.rb:20:1039:20:2916 | SSA phi read(x) | UseUseExplosion.rb:20:1018:20:2932 | SSA phi read(x) | +| UseUseExplosion.rb:20:1039:20:2916 | SSA phi read(self) | UseUseExplosion.rb:20:1034:20:2916 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1039:20:2916 | SSA phi read(x) | UseUseExplosion.rb:20:1034:20:2916 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1039:20:2916 | if ... | UseUseExplosion.rb:20:1034:20:2916 | then ... | | UseUseExplosion.rb:20:1043:20:1047 | @prop | UseUseExplosion.rb:20:1043:20:1052 | ... > ... | | UseUseExplosion.rb:20:1043:20:1047 | [post] self | UseUseExplosion.rb:20:1064:20:1068 | self | @@ -800,9 +898,11 @@ | UseUseExplosion.rb:20:1043:20:1052 | ... > ... | UseUseExplosion.rb:20:1042:20:1053 | [false] ( ... ) | | UseUseExplosion.rb:20:1043:20:1052 | ... > ... | UseUseExplosion.rb:20:1042:20:1053 | [true] ( ... ) | | UseUseExplosion.rb:20:1051:20:1052 | 51 | UseUseExplosion.rb:20:1043:20:1052 | ... > ... | +| UseUseExplosion.rb:20:1055:20:2900 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1039:20:2916 | SSA phi read(self) | +| UseUseExplosion.rb:20:1055:20:2900 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1039:20:2916 | SSA phi read(x) | | UseUseExplosion.rb:20:1055:20:2900 | then ... | UseUseExplosion.rb:20:1039:20:2916 | if ... | -| UseUseExplosion.rb:20:1060:20:2900 | SSA phi read(self) | UseUseExplosion.rb:20:1039:20:2916 | SSA phi read(self) | -| UseUseExplosion.rb:20:1060:20:2900 | SSA phi read(x) | UseUseExplosion.rb:20:1039:20:2916 | SSA phi read(x) | +| UseUseExplosion.rb:20:1060:20:2900 | SSA phi read(self) | UseUseExplosion.rb:20:1055:20:2900 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1060:20:2900 | SSA phi read(x) | UseUseExplosion.rb:20:1055:20:2900 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1060:20:2900 | if ... | UseUseExplosion.rb:20:1055:20:2900 | then ... | | UseUseExplosion.rb:20:1064:20:1068 | @prop | UseUseExplosion.rb:20:1064:20:1073 | ... > ... | | UseUseExplosion.rb:20:1064:20:1068 | [post] self | UseUseExplosion.rb:20:1085:20:1089 | self | @@ -812,9 +912,11 @@ | UseUseExplosion.rb:20:1064:20:1073 | ... > ... | UseUseExplosion.rb:20:1063:20:1074 | [false] ( ... ) | | UseUseExplosion.rb:20:1064:20:1073 | ... > ... | UseUseExplosion.rb:20:1063:20:1074 | [true] ( ... ) | | UseUseExplosion.rb:20:1072:20:1073 | 50 | UseUseExplosion.rb:20:1064:20:1073 | ... > ... | +| UseUseExplosion.rb:20:1076:20:2884 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1060:20:2900 | SSA phi read(self) | +| UseUseExplosion.rb:20:1076:20:2884 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1060:20:2900 | SSA phi read(x) | | UseUseExplosion.rb:20:1076:20:2884 | then ... | UseUseExplosion.rb:20:1060:20:2900 | if ... | -| UseUseExplosion.rb:20:1081:20:2884 | SSA phi read(self) | UseUseExplosion.rb:20:1060:20:2900 | SSA phi read(self) | -| UseUseExplosion.rb:20:1081:20:2884 | SSA phi read(x) | UseUseExplosion.rb:20:1060:20:2900 | SSA phi read(x) | +| UseUseExplosion.rb:20:1081:20:2884 | SSA phi read(self) | UseUseExplosion.rb:20:1076:20:2884 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1081:20:2884 | SSA phi read(x) | UseUseExplosion.rb:20:1076:20:2884 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1081:20:2884 | if ... | UseUseExplosion.rb:20:1076:20:2884 | then ... | | UseUseExplosion.rb:20:1085:20:1089 | @prop | UseUseExplosion.rb:20:1085:20:1094 | ... > ... | | UseUseExplosion.rb:20:1085:20:1089 | [post] self | UseUseExplosion.rb:20:1106:20:1110 | self | @@ -824,9 +926,11 @@ | UseUseExplosion.rb:20:1085:20:1094 | ... > ... | UseUseExplosion.rb:20:1084:20:1095 | [false] ( ... ) | | UseUseExplosion.rb:20:1085:20:1094 | ... > ... | UseUseExplosion.rb:20:1084:20:1095 | [true] ( ... ) | | UseUseExplosion.rb:20:1093:20:1094 | 49 | UseUseExplosion.rb:20:1085:20:1094 | ... > ... | +| UseUseExplosion.rb:20:1097:20:2868 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1081:20:2884 | SSA phi read(self) | +| UseUseExplosion.rb:20:1097:20:2868 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1081:20:2884 | SSA phi read(x) | | UseUseExplosion.rb:20:1097:20:2868 | then ... | UseUseExplosion.rb:20:1081:20:2884 | if ... | -| UseUseExplosion.rb:20:1102:20:2868 | SSA phi read(self) | UseUseExplosion.rb:20:1081:20:2884 | SSA phi read(self) | -| UseUseExplosion.rb:20:1102:20:2868 | SSA phi read(x) | UseUseExplosion.rb:20:1081:20:2884 | SSA phi read(x) | +| UseUseExplosion.rb:20:1102:20:2868 | SSA phi read(self) | UseUseExplosion.rb:20:1097:20:2868 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1102:20:2868 | SSA phi read(x) | UseUseExplosion.rb:20:1097:20:2868 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1102:20:2868 | if ... | UseUseExplosion.rb:20:1097:20:2868 | then ... | | UseUseExplosion.rb:20:1106:20:1110 | @prop | UseUseExplosion.rb:20:1106:20:1115 | ... > ... | | UseUseExplosion.rb:20:1106:20:1110 | [post] self | UseUseExplosion.rb:20:1127:20:1131 | self | @@ -836,9 +940,11 @@ | UseUseExplosion.rb:20:1106:20:1115 | ... > ... | UseUseExplosion.rb:20:1105:20:1116 | [false] ( ... ) | | UseUseExplosion.rb:20:1106:20:1115 | ... > ... | UseUseExplosion.rb:20:1105:20:1116 | [true] ( ... ) | | UseUseExplosion.rb:20:1114:20:1115 | 48 | UseUseExplosion.rb:20:1106:20:1115 | ... > ... | +| UseUseExplosion.rb:20:1118:20:2852 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1102:20:2868 | SSA phi read(self) | +| UseUseExplosion.rb:20:1118:20:2852 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1102:20:2868 | SSA phi read(x) | | UseUseExplosion.rb:20:1118:20:2852 | then ... | UseUseExplosion.rb:20:1102:20:2868 | if ... | -| UseUseExplosion.rb:20:1123:20:2852 | SSA phi read(self) | UseUseExplosion.rb:20:1102:20:2868 | SSA phi read(self) | -| UseUseExplosion.rb:20:1123:20:2852 | SSA phi read(x) | UseUseExplosion.rb:20:1102:20:2868 | SSA phi read(x) | +| UseUseExplosion.rb:20:1123:20:2852 | SSA phi read(self) | UseUseExplosion.rb:20:1118:20:2852 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1123:20:2852 | SSA phi read(x) | UseUseExplosion.rb:20:1118:20:2852 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1123:20:2852 | if ... | UseUseExplosion.rb:20:1118:20:2852 | then ... | | UseUseExplosion.rb:20:1127:20:1131 | @prop | UseUseExplosion.rb:20:1127:20:1136 | ... > ... | | UseUseExplosion.rb:20:1127:20:1131 | [post] self | UseUseExplosion.rb:20:1148:20:1152 | self | @@ -848,9 +954,11 @@ | UseUseExplosion.rb:20:1127:20:1136 | ... > ... | UseUseExplosion.rb:20:1126:20:1137 | [false] ( ... ) | | UseUseExplosion.rb:20:1127:20:1136 | ... > ... | UseUseExplosion.rb:20:1126:20:1137 | [true] ( ... ) | | UseUseExplosion.rb:20:1135:20:1136 | 47 | UseUseExplosion.rb:20:1127:20:1136 | ... > ... | +| UseUseExplosion.rb:20:1139:20:2836 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1123:20:2852 | SSA phi read(self) | +| UseUseExplosion.rb:20:1139:20:2836 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1123:20:2852 | SSA phi read(x) | | UseUseExplosion.rb:20:1139:20:2836 | then ... | UseUseExplosion.rb:20:1123:20:2852 | if ... | -| UseUseExplosion.rb:20:1144:20:2836 | SSA phi read(self) | UseUseExplosion.rb:20:1123:20:2852 | SSA phi read(self) | -| UseUseExplosion.rb:20:1144:20:2836 | SSA phi read(x) | UseUseExplosion.rb:20:1123:20:2852 | SSA phi read(x) | +| UseUseExplosion.rb:20:1144:20:2836 | SSA phi read(self) | UseUseExplosion.rb:20:1139:20:2836 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1144:20:2836 | SSA phi read(x) | UseUseExplosion.rb:20:1139:20:2836 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1144:20:2836 | if ... | UseUseExplosion.rb:20:1139:20:2836 | then ... | | UseUseExplosion.rb:20:1148:20:1152 | @prop | UseUseExplosion.rb:20:1148:20:1157 | ... > ... | | UseUseExplosion.rb:20:1148:20:1152 | [post] self | UseUseExplosion.rb:20:1169:20:1173 | self | @@ -860,9 +968,11 @@ | UseUseExplosion.rb:20:1148:20:1157 | ... > ... | UseUseExplosion.rb:20:1147:20:1158 | [false] ( ... ) | | UseUseExplosion.rb:20:1148:20:1157 | ... > ... | UseUseExplosion.rb:20:1147:20:1158 | [true] ( ... ) | | UseUseExplosion.rb:20:1156:20:1157 | 46 | UseUseExplosion.rb:20:1148:20:1157 | ... > ... | +| UseUseExplosion.rb:20:1160:20:2820 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1144:20:2836 | SSA phi read(self) | +| UseUseExplosion.rb:20:1160:20:2820 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1144:20:2836 | SSA phi read(x) | | UseUseExplosion.rb:20:1160:20:2820 | then ... | UseUseExplosion.rb:20:1144:20:2836 | if ... | -| UseUseExplosion.rb:20:1165:20:2820 | SSA phi read(self) | UseUseExplosion.rb:20:1144:20:2836 | SSA phi read(self) | -| UseUseExplosion.rb:20:1165:20:2820 | SSA phi read(x) | UseUseExplosion.rb:20:1144:20:2836 | SSA phi read(x) | +| UseUseExplosion.rb:20:1165:20:2820 | SSA phi read(self) | UseUseExplosion.rb:20:1160:20:2820 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1165:20:2820 | SSA phi read(x) | UseUseExplosion.rb:20:1160:20:2820 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1165:20:2820 | if ... | UseUseExplosion.rb:20:1160:20:2820 | then ... | | UseUseExplosion.rb:20:1169:20:1173 | @prop | UseUseExplosion.rb:20:1169:20:1178 | ... > ... | | UseUseExplosion.rb:20:1169:20:1173 | [post] self | UseUseExplosion.rb:20:1190:20:1194 | self | @@ -872,9 +982,11 @@ | UseUseExplosion.rb:20:1169:20:1178 | ... > ... | UseUseExplosion.rb:20:1168:20:1179 | [false] ( ... ) | | UseUseExplosion.rb:20:1169:20:1178 | ... > ... | UseUseExplosion.rb:20:1168:20:1179 | [true] ( ... ) | | UseUseExplosion.rb:20:1177:20:1178 | 45 | UseUseExplosion.rb:20:1169:20:1178 | ... > ... | +| UseUseExplosion.rb:20:1181:20:2804 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1165:20:2820 | SSA phi read(self) | +| UseUseExplosion.rb:20:1181:20:2804 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1165:20:2820 | SSA phi read(x) | | UseUseExplosion.rb:20:1181:20:2804 | then ... | UseUseExplosion.rb:20:1165:20:2820 | if ... | -| UseUseExplosion.rb:20:1186:20:2804 | SSA phi read(self) | UseUseExplosion.rb:20:1165:20:2820 | SSA phi read(self) | -| UseUseExplosion.rb:20:1186:20:2804 | SSA phi read(x) | UseUseExplosion.rb:20:1165:20:2820 | SSA phi read(x) | +| UseUseExplosion.rb:20:1186:20:2804 | SSA phi read(self) | UseUseExplosion.rb:20:1181:20:2804 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1186:20:2804 | SSA phi read(x) | UseUseExplosion.rb:20:1181:20:2804 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1186:20:2804 | if ... | UseUseExplosion.rb:20:1181:20:2804 | then ... | | UseUseExplosion.rb:20:1190:20:1194 | @prop | UseUseExplosion.rb:20:1190:20:1199 | ... > ... | | UseUseExplosion.rb:20:1190:20:1194 | [post] self | UseUseExplosion.rb:20:1211:20:1215 | self | @@ -884,9 +996,11 @@ | UseUseExplosion.rb:20:1190:20:1199 | ... > ... | UseUseExplosion.rb:20:1189:20:1200 | [false] ( ... ) | | UseUseExplosion.rb:20:1190:20:1199 | ... > ... | UseUseExplosion.rb:20:1189:20:1200 | [true] ( ... ) | | UseUseExplosion.rb:20:1198:20:1199 | 44 | UseUseExplosion.rb:20:1190:20:1199 | ... > ... | +| UseUseExplosion.rb:20:1202:20:2788 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1186:20:2804 | SSA phi read(self) | +| UseUseExplosion.rb:20:1202:20:2788 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1186:20:2804 | SSA phi read(x) | | UseUseExplosion.rb:20:1202:20:2788 | then ... | UseUseExplosion.rb:20:1186:20:2804 | if ... | -| UseUseExplosion.rb:20:1207:20:2788 | SSA phi read(self) | UseUseExplosion.rb:20:1186:20:2804 | SSA phi read(self) | -| UseUseExplosion.rb:20:1207:20:2788 | SSA phi read(x) | UseUseExplosion.rb:20:1186:20:2804 | SSA phi read(x) | +| UseUseExplosion.rb:20:1207:20:2788 | SSA phi read(self) | UseUseExplosion.rb:20:1202:20:2788 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1207:20:2788 | SSA phi read(x) | UseUseExplosion.rb:20:1202:20:2788 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1207:20:2788 | if ... | UseUseExplosion.rb:20:1202:20:2788 | then ... | | UseUseExplosion.rb:20:1211:20:1215 | @prop | UseUseExplosion.rb:20:1211:20:1220 | ... > ... | | UseUseExplosion.rb:20:1211:20:1215 | [post] self | UseUseExplosion.rb:20:1232:20:1236 | self | @@ -896,9 +1010,11 @@ | UseUseExplosion.rb:20:1211:20:1220 | ... > ... | UseUseExplosion.rb:20:1210:20:1221 | [false] ( ... ) | | UseUseExplosion.rb:20:1211:20:1220 | ... > ... | UseUseExplosion.rb:20:1210:20:1221 | [true] ( ... ) | | UseUseExplosion.rb:20:1219:20:1220 | 43 | UseUseExplosion.rb:20:1211:20:1220 | ... > ... | +| UseUseExplosion.rb:20:1223:20:2772 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1207:20:2788 | SSA phi read(self) | +| UseUseExplosion.rb:20:1223:20:2772 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1207:20:2788 | SSA phi read(x) | | UseUseExplosion.rb:20:1223:20:2772 | then ... | UseUseExplosion.rb:20:1207:20:2788 | if ... | -| UseUseExplosion.rb:20:1228:20:2772 | SSA phi read(self) | UseUseExplosion.rb:20:1207:20:2788 | SSA phi read(self) | -| UseUseExplosion.rb:20:1228:20:2772 | SSA phi read(x) | UseUseExplosion.rb:20:1207:20:2788 | SSA phi read(x) | +| UseUseExplosion.rb:20:1228:20:2772 | SSA phi read(self) | UseUseExplosion.rb:20:1223:20:2772 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1228:20:2772 | SSA phi read(x) | UseUseExplosion.rb:20:1223:20:2772 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1228:20:2772 | if ... | UseUseExplosion.rb:20:1223:20:2772 | then ... | | UseUseExplosion.rb:20:1232:20:1236 | @prop | UseUseExplosion.rb:20:1232:20:1241 | ... > ... | | UseUseExplosion.rb:20:1232:20:1236 | [post] self | UseUseExplosion.rb:20:1253:20:1257 | self | @@ -908,9 +1024,11 @@ | UseUseExplosion.rb:20:1232:20:1241 | ... > ... | UseUseExplosion.rb:20:1231:20:1242 | [false] ( ... ) | | UseUseExplosion.rb:20:1232:20:1241 | ... > ... | UseUseExplosion.rb:20:1231:20:1242 | [true] ( ... ) | | UseUseExplosion.rb:20:1240:20:1241 | 42 | UseUseExplosion.rb:20:1232:20:1241 | ... > ... | +| UseUseExplosion.rb:20:1244:20:2756 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1228:20:2772 | SSA phi read(self) | +| UseUseExplosion.rb:20:1244:20:2756 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1228:20:2772 | SSA phi read(x) | | UseUseExplosion.rb:20:1244:20:2756 | then ... | UseUseExplosion.rb:20:1228:20:2772 | if ... | -| UseUseExplosion.rb:20:1249:20:2756 | SSA phi read(self) | UseUseExplosion.rb:20:1228:20:2772 | SSA phi read(self) | -| UseUseExplosion.rb:20:1249:20:2756 | SSA phi read(x) | UseUseExplosion.rb:20:1228:20:2772 | SSA phi read(x) | +| UseUseExplosion.rb:20:1249:20:2756 | SSA phi read(self) | UseUseExplosion.rb:20:1244:20:2756 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1249:20:2756 | SSA phi read(x) | UseUseExplosion.rb:20:1244:20:2756 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1249:20:2756 | if ... | UseUseExplosion.rb:20:1244:20:2756 | then ... | | UseUseExplosion.rb:20:1253:20:1257 | @prop | UseUseExplosion.rb:20:1253:20:1262 | ... > ... | | UseUseExplosion.rb:20:1253:20:1257 | [post] self | UseUseExplosion.rb:20:1274:20:1278 | self | @@ -920,9 +1038,11 @@ | UseUseExplosion.rb:20:1253:20:1262 | ... > ... | UseUseExplosion.rb:20:1252:20:1263 | [false] ( ... ) | | UseUseExplosion.rb:20:1253:20:1262 | ... > ... | UseUseExplosion.rb:20:1252:20:1263 | [true] ( ... ) | | UseUseExplosion.rb:20:1261:20:1262 | 41 | UseUseExplosion.rb:20:1253:20:1262 | ... > ... | +| UseUseExplosion.rb:20:1265:20:2740 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1249:20:2756 | SSA phi read(self) | +| UseUseExplosion.rb:20:1265:20:2740 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1249:20:2756 | SSA phi read(x) | | UseUseExplosion.rb:20:1265:20:2740 | then ... | UseUseExplosion.rb:20:1249:20:2756 | if ... | -| UseUseExplosion.rb:20:1270:20:2740 | SSA phi read(self) | UseUseExplosion.rb:20:1249:20:2756 | SSA phi read(self) | -| UseUseExplosion.rb:20:1270:20:2740 | SSA phi read(x) | UseUseExplosion.rb:20:1249:20:2756 | SSA phi read(x) | +| UseUseExplosion.rb:20:1270:20:2740 | SSA phi read(self) | UseUseExplosion.rb:20:1265:20:2740 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1270:20:2740 | SSA phi read(x) | UseUseExplosion.rb:20:1265:20:2740 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1270:20:2740 | if ... | UseUseExplosion.rb:20:1265:20:2740 | then ... | | UseUseExplosion.rb:20:1274:20:1278 | @prop | UseUseExplosion.rb:20:1274:20:1283 | ... > ... | | UseUseExplosion.rb:20:1274:20:1278 | [post] self | UseUseExplosion.rb:20:1295:20:1299 | self | @@ -932,9 +1052,11 @@ | UseUseExplosion.rb:20:1274:20:1283 | ... > ... | UseUseExplosion.rb:20:1273:20:1284 | [false] ( ... ) | | UseUseExplosion.rb:20:1274:20:1283 | ... > ... | UseUseExplosion.rb:20:1273:20:1284 | [true] ( ... ) | | UseUseExplosion.rb:20:1282:20:1283 | 40 | UseUseExplosion.rb:20:1274:20:1283 | ... > ... | +| UseUseExplosion.rb:20:1286:20:2724 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1270:20:2740 | SSA phi read(self) | +| UseUseExplosion.rb:20:1286:20:2724 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1270:20:2740 | SSA phi read(x) | | UseUseExplosion.rb:20:1286:20:2724 | then ... | UseUseExplosion.rb:20:1270:20:2740 | if ... | -| UseUseExplosion.rb:20:1291:20:2724 | SSA phi read(self) | UseUseExplosion.rb:20:1270:20:2740 | SSA phi read(self) | -| UseUseExplosion.rb:20:1291:20:2724 | SSA phi read(x) | UseUseExplosion.rb:20:1270:20:2740 | SSA phi read(x) | +| UseUseExplosion.rb:20:1291:20:2724 | SSA phi read(self) | UseUseExplosion.rb:20:1286:20:2724 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1291:20:2724 | SSA phi read(x) | UseUseExplosion.rb:20:1286:20:2724 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1291:20:2724 | if ... | UseUseExplosion.rb:20:1286:20:2724 | then ... | | UseUseExplosion.rb:20:1295:20:1299 | @prop | UseUseExplosion.rb:20:1295:20:1304 | ... > ... | | UseUseExplosion.rb:20:1295:20:1299 | [post] self | UseUseExplosion.rb:20:1316:20:1320 | self | @@ -944,9 +1066,11 @@ | UseUseExplosion.rb:20:1295:20:1304 | ... > ... | UseUseExplosion.rb:20:1294:20:1305 | [false] ( ... ) | | UseUseExplosion.rb:20:1295:20:1304 | ... > ... | UseUseExplosion.rb:20:1294:20:1305 | [true] ( ... ) | | UseUseExplosion.rb:20:1303:20:1304 | 39 | UseUseExplosion.rb:20:1295:20:1304 | ... > ... | +| UseUseExplosion.rb:20:1307:20:2708 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1291:20:2724 | SSA phi read(self) | +| UseUseExplosion.rb:20:1307:20:2708 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1291:20:2724 | SSA phi read(x) | | UseUseExplosion.rb:20:1307:20:2708 | then ... | UseUseExplosion.rb:20:1291:20:2724 | if ... | -| UseUseExplosion.rb:20:1312:20:2708 | SSA phi read(self) | UseUseExplosion.rb:20:1291:20:2724 | SSA phi read(self) | -| UseUseExplosion.rb:20:1312:20:2708 | SSA phi read(x) | UseUseExplosion.rb:20:1291:20:2724 | SSA phi read(x) | +| UseUseExplosion.rb:20:1312:20:2708 | SSA phi read(self) | UseUseExplosion.rb:20:1307:20:2708 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1312:20:2708 | SSA phi read(x) | UseUseExplosion.rb:20:1307:20:2708 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1312:20:2708 | if ... | UseUseExplosion.rb:20:1307:20:2708 | then ... | | UseUseExplosion.rb:20:1316:20:1320 | @prop | UseUseExplosion.rb:20:1316:20:1325 | ... > ... | | UseUseExplosion.rb:20:1316:20:1320 | [post] self | UseUseExplosion.rb:20:1337:20:1341 | self | @@ -956,9 +1080,11 @@ | UseUseExplosion.rb:20:1316:20:1325 | ... > ... | UseUseExplosion.rb:20:1315:20:1326 | [false] ( ... ) | | UseUseExplosion.rb:20:1316:20:1325 | ... > ... | UseUseExplosion.rb:20:1315:20:1326 | [true] ( ... ) | | UseUseExplosion.rb:20:1324:20:1325 | 38 | UseUseExplosion.rb:20:1316:20:1325 | ... > ... | +| UseUseExplosion.rb:20:1328:20:2692 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1312:20:2708 | SSA phi read(self) | +| UseUseExplosion.rb:20:1328:20:2692 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1312:20:2708 | SSA phi read(x) | | UseUseExplosion.rb:20:1328:20:2692 | then ... | UseUseExplosion.rb:20:1312:20:2708 | if ... | -| UseUseExplosion.rb:20:1333:20:2692 | SSA phi read(self) | UseUseExplosion.rb:20:1312:20:2708 | SSA phi read(self) | -| UseUseExplosion.rb:20:1333:20:2692 | SSA phi read(x) | UseUseExplosion.rb:20:1312:20:2708 | SSA phi read(x) | +| UseUseExplosion.rb:20:1333:20:2692 | SSA phi read(self) | UseUseExplosion.rb:20:1328:20:2692 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1333:20:2692 | SSA phi read(x) | UseUseExplosion.rb:20:1328:20:2692 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1333:20:2692 | if ... | UseUseExplosion.rb:20:1328:20:2692 | then ... | | UseUseExplosion.rb:20:1337:20:1341 | @prop | UseUseExplosion.rb:20:1337:20:1346 | ... > ... | | UseUseExplosion.rb:20:1337:20:1341 | [post] self | UseUseExplosion.rb:20:1358:20:1362 | self | @@ -968,9 +1094,11 @@ | UseUseExplosion.rb:20:1337:20:1346 | ... > ... | UseUseExplosion.rb:20:1336:20:1347 | [false] ( ... ) | | UseUseExplosion.rb:20:1337:20:1346 | ... > ... | UseUseExplosion.rb:20:1336:20:1347 | [true] ( ... ) | | UseUseExplosion.rb:20:1345:20:1346 | 37 | UseUseExplosion.rb:20:1337:20:1346 | ... > ... | +| UseUseExplosion.rb:20:1349:20:2676 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1333:20:2692 | SSA phi read(self) | +| UseUseExplosion.rb:20:1349:20:2676 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1333:20:2692 | SSA phi read(x) | | UseUseExplosion.rb:20:1349:20:2676 | then ... | UseUseExplosion.rb:20:1333:20:2692 | if ... | -| UseUseExplosion.rb:20:1354:20:2676 | SSA phi read(self) | UseUseExplosion.rb:20:1333:20:2692 | SSA phi read(self) | -| UseUseExplosion.rb:20:1354:20:2676 | SSA phi read(x) | UseUseExplosion.rb:20:1333:20:2692 | SSA phi read(x) | +| UseUseExplosion.rb:20:1354:20:2676 | SSA phi read(self) | UseUseExplosion.rb:20:1349:20:2676 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1354:20:2676 | SSA phi read(x) | UseUseExplosion.rb:20:1349:20:2676 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1354:20:2676 | if ... | UseUseExplosion.rb:20:1349:20:2676 | then ... | | UseUseExplosion.rb:20:1358:20:1362 | @prop | UseUseExplosion.rb:20:1358:20:1367 | ... > ... | | UseUseExplosion.rb:20:1358:20:1362 | [post] self | UseUseExplosion.rb:20:1379:20:1383 | self | @@ -980,9 +1108,11 @@ | UseUseExplosion.rb:20:1358:20:1367 | ... > ... | UseUseExplosion.rb:20:1357:20:1368 | [false] ( ... ) | | UseUseExplosion.rb:20:1358:20:1367 | ... > ... | UseUseExplosion.rb:20:1357:20:1368 | [true] ( ... ) | | UseUseExplosion.rb:20:1366:20:1367 | 36 | UseUseExplosion.rb:20:1358:20:1367 | ... > ... | +| UseUseExplosion.rb:20:1370:20:2660 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1354:20:2676 | SSA phi read(self) | +| UseUseExplosion.rb:20:1370:20:2660 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1354:20:2676 | SSA phi read(x) | | UseUseExplosion.rb:20:1370:20:2660 | then ... | UseUseExplosion.rb:20:1354:20:2676 | if ... | -| UseUseExplosion.rb:20:1375:20:2660 | SSA phi read(self) | UseUseExplosion.rb:20:1354:20:2676 | SSA phi read(self) | -| UseUseExplosion.rb:20:1375:20:2660 | SSA phi read(x) | UseUseExplosion.rb:20:1354:20:2676 | SSA phi read(x) | +| UseUseExplosion.rb:20:1375:20:2660 | SSA phi read(self) | UseUseExplosion.rb:20:1370:20:2660 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1375:20:2660 | SSA phi read(x) | UseUseExplosion.rb:20:1370:20:2660 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1375:20:2660 | if ... | UseUseExplosion.rb:20:1370:20:2660 | then ... | | UseUseExplosion.rb:20:1379:20:1383 | @prop | UseUseExplosion.rb:20:1379:20:1388 | ... > ... | | UseUseExplosion.rb:20:1379:20:1383 | [post] self | UseUseExplosion.rb:20:1400:20:1404 | self | @@ -992,9 +1122,11 @@ | UseUseExplosion.rb:20:1379:20:1388 | ... > ... | UseUseExplosion.rb:20:1378:20:1389 | [false] ( ... ) | | UseUseExplosion.rb:20:1379:20:1388 | ... > ... | UseUseExplosion.rb:20:1378:20:1389 | [true] ( ... ) | | UseUseExplosion.rb:20:1387:20:1388 | 35 | UseUseExplosion.rb:20:1379:20:1388 | ... > ... | +| UseUseExplosion.rb:20:1391:20:2644 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1375:20:2660 | SSA phi read(self) | +| UseUseExplosion.rb:20:1391:20:2644 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1375:20:2660 | SSA phi read(x) | | UseUseExplosion.rb:20:1391:20:2644 | then ... | UseUseExplosion.rb:20:1375:20:2660 | if ... | -| UseUseExplosion.rb:20:1396:20:2644 | SSA phi read(self) | UseUseExplosion.rb:20:1375:20:2660 | SSA phi read(self) | -| UseUseExplosion.rb:20:1396:20:2644 | SSA phi read(x) | UseUseExplosion.rb:20:1375:20:2660 | SSA phi read(x) | +| UseUseExplosion.rb:20:1396:20:2644 | SSA phi read(self) | UseUseExplosion.rb:20:1391:20:2644 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1396:20:2644 | SSA phi read(x) | UseUseExplosion.rb:20:1391:20:2644 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1396:20:2644 | if ... | UseUseExplosion.rb:20:1391:20:2644 | then ... | | UseUseExplosion.rb:20:1400:20:1404 | @prop | UseUseExplosion.rb:20:1400:20:1409 | ... > ... | | UseUseExplosion.rb:20:1400:20:1404 | [post] self | UseUseExplosion.rb:20:1421:20:1425 | self | @@ -1004,9 +1136,11 @@ | UseUseExplosion.rb:20:1400:20:1409 | ... > ... | UseUseExplosion.rb:20:1399:20:1410 | [false] ( ... ) | | UseUseExplosion.rb:20:1400:20:1409 | ... > ... | UseUseExplosion.rb:20:1399:20:1410 | [true] ( ... ) | | UseUseExplosion.rb:20:1408:20:1409 | 34 | UseUseExplosion.rb:20:1400:20:1409 | ... > ... | +| UseUseExplosion.rb:20:1412:20:2628 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1396:20:2644 | SSA phi read(self) | +| UseUseExplosion.rb:20:1412:20:2628 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1396:20:2644 | SSA phi read(x) | | UseUseExplosion.rb:20:1412:20:2628 | then ... | UseUseExplosion.rb:20:1396:20:2644 | if ... | -| UseUseExplosion.rb:20:1417:20:2628 | SSA phi read(self) | UseUseExplosion.rb:20:1396:20:2644 | SSA phi read(self) | -| UseUseExplosion.rb:20:1417:20:2628 | SSA phi read(x) | UseUseExplosion.rb:20:1396:20:2644 | SSA phi read(x) | +| UseUseExplosion.rb:20:1417:20:2628 | SSA phi read(self) | UseUseExplosion.rb:20:1412:20:2628 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1417:20:2628 | SSA phi read(x) | UseUseExplosion.rb:20:1412:20:2628 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1417:20:2628 | if ... | UseUseExplosion.rb:20:1412:20:2628 | then ... | | UseUseExplosion.rb:20:1421:20:1425 | @prop | UseUseExplosion.rb:20:1421:20:1430 | ... > ... | | UseUseExplosion.rb:20:1421:20:1425 | [post] self | UseUseExplosion.rb:20:1442:20:1446 | self | @@ -1016,9 +1150,11 @@ | UseUseExplosion.rb:20:1421:20:1430 | ... > ... | UseUseExplosion.rb:20:1420:20:1431 | [false] ( ... ) | | UseUseExplosion.rb:20:1421:20:1430 | ... > ... | UseUseExplosion.rb:20:1420:20:1431 | [true] ( ... ) | | UseUseExplosion.rb:20:1429:20:1430 | 33 | UseUseExplosion.rb:20:1421:20:1430 | ... > ... | +| UseUseExplosion.rb:20:1433:20:2612 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1417:20:2628 | SSA phi read(self) | +| UseUseExplosion.rb:20:1433:20:2612 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1417:20:2628 | SSA phi read(x) | | UseUseExplosion.rb:20:1433:20:2612 | then ... | UseUseExplosion.rb:20:1417:20:2628 | if ... | -| UseUseExplosion.rb:20:1438:20:2612 | SSA phi read(self) | UseUseExplosion.rb:20:1417:20:2628 | SSA phi read(self) | -| UseUseExplosion.rb:20:1438:20:2612 | SSA phi read(x) | UseUseExplosion.rb:20:1417:20:2628 | SSA phi read(x) | +| UseUseExplosion.rb:20:1438:20:2612 | SSA phi read(self) | UseUseExplosion.rb:20:1433:20:2612 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1438:20:2612 | SSA phi read(x) | UseUseExplosion.rb:20:1433:20:2612 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1438:20:2612 | if ... | UseUseExplosion.rb:20:1433:20:2612 | then ... | | UseUseExplosion.rb:20:1442:20:1446 | @prop | UseUseExplosion.rb:20:1442:20:1451 | ... > ... | | UseUseExplosion.rb:20:1442:20:1446 | [post] self | UseUseExplosion.rb:20:1463:20:1467 | self | @@ -1028,9 +1164,11 @@ | UseUseExplosion.rb:20:1442:20:1451 | ... > ... | UseUseExplosion.rb:20:1441:20:1452 | [false] ( ... ) | | UseUseExplosion.rb:20:1442:20:1451 | ... > ... | UseUseExplosion.rb:20:1441:20:1452 | [true] ( ... ) | | UseUseExplosion.rb:20:1450:20:1451 | 32 | UseUseExplosion.rb:20:1442:20:1451 | ... > ... | +| UseUseExplosion.rb:20:1454:20:2596 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1438:20:2612 | SSA phi read(self) | +| UseUseExplosion.rb:20:1454:20:2596 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1438:20:2612 | SSA phi read(x) | | UseUseExplosion.rb:20:1454:20:2596 | then ... | UseUseExplosion.rb:20:1438:20:2612 | if ... | -| UseUseExplosion.rb:20:1459:20:2596 | SSA phi read(self) | UseUseExplosion.rb:20:1438:20:2612 | SSA phi read(self) | -| UseUseExplosion.rb:20:1459:20:2596 | SSA phi read(x) | UseUseExplosion.rb:20:1438:20:2612 | SSA phi read(x) | +| UseUseExplosion.rb:20:1459:20:2596 | SSA phi read(self) | UseUseExplosion.rb:20:1454:20:2596 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1459:20:2596 | SSA phi read(x) | UseUseExplosion.rb:20:1454:20:2596 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1459:20:2596 | if ... | UseUseExplosion.rb:20:1454:20:2596 | then ... | | UseUseExplosion.rb:20:1463:20:1467 | @prop | UseUseExplosion.rb:20:1463:20:1472 | ... > ... | | UseUseExplosion.rb:20:1463:20:1467 | [post] self | UseUseExplosion.rb:20:1484:20:1488 | self | @@ -1040,9 +1178,11 @@ | UseUseExplosion.rb:20:1463:20:1472 | ... > ... | UseUseExplosion.rb:20:1462:20:1473 | [false] ( ... ) | | UseUseExplosion.rb:20:1463:20:1472 | ... > ... | UseUseExplosion.rb:20:1462:20:1473 | [true] ( ... ) | | UseUseExplosion.rb:20:1471:20:1472 | 31 | UseUseExplosion.rb:20:1463:20:1472 | ... > ... | +| UseUseExplosion.rb:20:1475:20:2580 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1459:20:2596 | SSA phi read(self) | +| UseUseExplosion.rb:20:1475:20:2580 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1459:20:2596 | SSA phi read(x) | | UseUseExplosion.rb:20:1475:20:2580 | then ... | UseUseExplosion.rb:20:1459:20:2596 | if ... | -| UseUseExplosion.rb:20:1480:20:2580 | SSA phi read(self) | UseUseExplosion.rb:20:1459:20:2596 | SSA phi read(self) | -| UseUseExplosion.rb:20:1480:20:2580 | SSA phi read(x) | UseUseExplosion.rb:20:1459:20:2596 | SSA phi read(x) | +| UseUseExplosion.rb:20:1480:20:2580 | SSA phi read(self) | UseUseExplosion.rb:20:1475:20:2580 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1480:20:2580 | SSA phi read(x) | UseUseExplosion.rb:20:1475:20:2580 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1480:20:2580 | if ... | UseUseExplosion.rb:20:1475:20:2580 | then ... | | UseUseExplosion.rb:20:1484:20:1488 | @prop | UseUseExplosion.rb:20:1484:20:1493 | ... > ... | | UseUseExplosion.rb:20:1484:20:1488 | [post] self | UseUseExplosion.rb:20:1505:20:1509 | self | @@ -1052,9 +1192,11 @@ | UseUseExplosion.rb:20:1484:20:1493 | ... > ... | UseUseExplosion.rb:20:1483:20:1494 | [false] ( ... ) | | UseUseExplosion.rb:20:1484:20:1493 | ... > ... | UseUseExplosion.rb:20:1483:20:1494 | [true] ( ... ) | | UseUseExplosion.rb:20:1492:20:1493 | 30 | UseUseExplosion.rb:20:1484:20:1493 | ... > ... | +| UseUseExplosion.rb:20:1496:20:2564 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1480:20:2580 | SSA phi read(self) | +| UseUseExplosion.rb:20:1496:20:2564 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1480:20:2580 | SSA phi read(x) | | UseUseExplosion.rb:20:1496:20:2564 | then ... | UseUseExplosion.rb:20:1480:20:2580 | if ... | -| UseUseExplosion.rb:20:1501:20:2564 | SSA phi read(self) | UseUseExplosion.rb:20:1480:20:2580 | SSA phi read(self) | -| UseUseExplosion.rb:20:1501:20:2564 | SSA phi read(x) | UseUseExplosion.rb:20:1480:20:2580 | SSA phi read(x) | +| UseUseExplosion.rb:20:1501:20:2564 | SSA phi read(self) | UseUseExplosion.rb:20:1496:20:2564 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1501:20:2564 | SSA phi read(x) | UseUseExplosion.rb:20:1496:20:2564 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1501:20:2564 | if ... | UseUseExplosion.rb:20:1496:20:2564 | then ... | | UseUseExplosion.rb:20:1505:20:1509 | @prop | UseUseExplosion.rb:20:1505:20:1514 | ... > ... | | UseUseExplosion.rb:20:1505:20:1509 | [post] self | UseUseExplosion.rb:20:1526:20:1530 | self | @@ -1064,9 +1206,11 @@ | UseUseExplosion.rb:20:1505:20:1514 | ... > ... | UseUseExplosion.rb:20:1504:20:1515 | [false] ( ... ) | | UseUseExplosion.rb:20:1505:20:1514 | ... > ... | UseUseExplosion.rb:20:1504:20:1515 | [true] ( ... ) | | UseUseExplosion.rb:20:1513:20:1514 | 29 | UseUseExplosion.rb:20:1505:20:1514 | ... > ... | +| UseUseExplosion.rb:20:1517:20:2548 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1501:20:2564 | SSA phi read(self) | +| UseUseExplosion.rb:20:1517:20:2548 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1501:20:2564 | SSA phi read(x) | | UseUseExplosion.rb:20:1517:20:2548 | then ... | UseUseExplosion.rb:20:1501:20:2564 | if ... | -| UseUseExplosion.rb:20:1522:20:2548 | SSA phi read(self) | UseUseExplosion.rb:20:1501:20:2564 | SSA phi read(self) | -| UseUseExplosion.rb:20:1522:20:2548 | SSA phi read(x) | UseUseExplosion.rb:20:1501:20:2564 | SSA phi read(x) | +| UseUseExplosion.rb:20:1522:20:2548 | SSA phi read(self) | UseUseExplosion.rb:20:1517:20:2548 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1522:20:2548 | SSA phi read(x) | UseUseExplosion.rb:20:1517:20:2548 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1522:20:2548 | if ... | UseUseExplosion.rb:20:1517:20:2548 | then ... | | UseUseExplosion.rb:20:1526:20:1530 | @prop | UseUseExplosion.rb:20:1526:20:1535 | ... > ... | | UseUseExplosion.rb:20:1526:20:1530 | [post] self | UseUseExplosion.rb:20:1547:20:1551 | self | @@ -1076,9 +1220,11 @@ | UseUseExplosion.rb:20:1526:20:1535 | ... > ... | UseUseExplosion.rb:20:1525:20:1536 | [false] ( ... ) | | UseUseExplosion.rb:20:1526:20:1535 | ... > ... | UseUseExplosion.rb:20:1525:20:1536 | [true] ( ... ) | | UseUseExplosion.rb:20:1534:20:1535 | 28 | UseUseExplosion.rb:20:1526:20:1535 | ... > ... | +| UseUseExplosion.rb:20:1538:20:2532 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1522:20:2548 | SSA phi read(self) | +| UseUseExplosion.rb:20:1538:20:2532 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1522:20:2548 | SSA phi read(x) | | UseUseExplosion.rb:20:1538:20:2532 | then ... | UseUseExplosion.rb:20:1522:20:2548 | if ... | -| UseUseExplosion.rb:20:1543:20:2532 | SSA phi read(self) | UseUseExplosion.rb:20:1522:20:2548 | SSA phi read(self) | -| UseUseExplosion.rb:20:1543:20:2532 | SSA phi read(x) | UseUseExplosion.rb:20:1522:20:2548 | SSA phi read(x) | +| UseUseExplosion.rb:20:1543:20:2532 | SSA phi read(self) | UseUseExplosion.rb:20:1538:20:2532 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1543:20:2532 | SSA phi read(x) | UseUseExplosion.rb:20:1538:20:2532 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1543:20:2532 | if ... | UseUseExplosion.rb:20:1538:20:2532 | then ... | | UseUseExplosion.rb:20:1547:20:1551 | @prop | UseUseExplosion.rb:20:1547:20:1556 | ... > ... | | UseUseExplosion.rb:20:1547:20:1551 | [post] self | UseUseExplosion.rb:20:1568:20:1572 | self | @@ -1088,9 +1234,11 @@ | UseUseExplosion.rb:20:1547:20:1556 | ... > ... | UseUseExplosion.rb:20:1546:20:1557 | [false] ( ... ) | | UseUseExplosion.rb:20:1547:20:1556 | ... > ... | UseUseExplosion.rb:20:1546:20:1557 | [true] ( ... ) | | UseUseExplosion.rb:20:1555:20:1556 | 27 | UseUseExplosion.rb:20:1547:20:1556 | ... > ... | +| UseUseExplosion.rb:20:1559:20:2516 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1543:20:2532 | SSA phi read(self) | +| UseUseExplosion.rb:20:1559:20:2516 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1543:20:2532 | SSA phi read(x) | | UseUseExplosion.rb:20:1559:20:2516 | then ... | UseUseExplosion.rb:20:1543:20:2532 | if ... | -| UseUseExplosion.rb:20:1564:20:2516 | SSA phi read(self) | UseUseExplosion.rb:20:1543:20:2532 | SSA phi read(self) | -| UseUseExplosion.rb:20:1564:20:2516 | SSA phi read(x) | UseUseExplosion.rb:20:1543:20:2532 | SSA phi read(x) | +| UseUseExplosion.rb:20:1564:20:2516 | SSA phi read(self) | UseUseExplosion.rb:20:1559:20:2516 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1564:20:2516 | SSA phi read(x) | UseUseExplosion.rb:20:1559:20:2516 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1564:20:2516 | if ... | UseUseExplosion.rb:20:1559:20:2516 | then ... | | UseUseExplosion.rb:20:1568:20:1572 | @prop | UseUseExplosion.rb:20:1568:20:1577 | ... > ... | | UseUseExplosion.rb:20:1568:20:1572 | [post] self | UseUseExplosion.rb:20:1589:20:1593 | self | @@ -1100,9 +1248,11 @@ | UseUseExplosion.rb:20:1568:20:1577 | ... > ... | UseUseExplosion.rb:20:1567:20:1578 | [false] ( ... ) | | UseUseExplosion.rb:20:1568:20:1577 | ... > ... | UseUseExplosion.rb:20:1567:20:1578 | [true] ( ... ) | | UseUseExplosion.rb:20:1576:20:1577 | 26 | UseUseExplosion.rb:20:1568:20:1577 | ... > ... | +| UseUseExplosion.rb:20:1580:20:2500 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1564:20:2516 | SSA phi read(self) | +| UseUseExplosion.rb:20:1580:20:2500 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1564:20:2516 | SSA phi read(x) | | UseUseExplosion.rb:20:1580:20:2500 | then ... | UseUseExplosion.rb:20:1564:20:2516 | if ... | -| UseUseExplosion.rb:20:1585:20:2500 | SSA phi read(self) | UseUseExplosion.rb:20:1564:20:2516 | SSA phi read(self) | -| UseUseExplosion.rb:20:1585:20:2500 | SSA phi read(x) | UseUseExplosion.rb:20:1564:20:2516 | SSA phi read(x) | +| UseUseExplosion.rb:20:1585:20:2500 | SSA phi read(self) | UseUseExplosion.rb:20:1580:20:2500 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1585:20:2500 | SSA phi read(x) | UseUseExplosion.rb:20:1580:20:2500 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1585:20:2500 | if ... | UseUseExplosion.rb:20:1580:20:2500 | then ... | | UseUseExplosion.rb:20:1589:20:1593 | @prop | UseUseExplosion.rb:20:1589:20:1598 | ... > ... | | UseUseExplosion.rb:20:1589:20:1593 | [post] self | UseUseExplosion.rb:20:1610:20:1614 | self | @@ -1112,9 +1262,11 @@ | UseUseExplosion.rb:20:1589:20:1598 | ... > ... | UseUseExplosion.rb:20:1588:20:1599 | [false] ( ... ) | | UseUseExplosion.rb:20:1589:20:1598 | ... > ... | UseUseExplosion.rb:20:1588:20:1599 | [true] ( ... ) | | UseUseExplosion.rb:20:1597:20:1598 | 25 | UseUseExplosion.rb:20:1589:20:1598 | ... > ... | +| UseUseExplosion.rb:20:1601:20:2484 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1585:20:2500 | SSA phi read(self) | +| UseUseExplosion.rb:20:1601:20:2484 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1585:20:2500 | SSA phi read(x) | | UseUseExplosion.rb:20:1601:20:2484 | then ... | UseUseExplosion.rb:20:1585:20:2500 | if ... | -| UseUseExplosion.rb:20:1606:20:2484 | SSA phi read(self) | UseUseExplosion.rb:20:1585:20:2500 | SSA phi read(self) | -| UseUseExplosion.rb:20:1606:20:2484 | SSA phi read(x) | UseUseExplosion.rb:20:1585:20:2500 | SSA phi read(x) | +| UseUseExplosion.rb:20:1606:20:2484 | SSA phi read(self) | UseUseExplosion.rb:20:1601:20:2484 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1606:20:2484 | SSA phi read(x) | UseUseExplosion.rb:20:1601:20:2484 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1606:20:2484 | if ... | UseUseExplosion.rb:20:1601:20:2484 | then ... | | UseUseExplosion.rb:20:1610:20:1614 | @prop | UseUseExplosion.rb:20:1610:20:1619 | ... > ... | | UseUseExplosion.rb:20:1610:20:1614 | [post] self | UseUseExplosion.rb:20:1631:20:1635 | self | @@ -1124,9 +1276,11 @@ | UseUseExplosion.rb:20:1610:20:1619 | ... > ... | UseUseExplosion.rb:20:1609:20:1620 | [false] ( ... ) | | UseUseExplosion.rb:20:1610:20:1619 | ... > ... | UseUseExplosion.rb:20:1609:20:1620 | [true] ( ... ) | | UseUseExplosion.rb:20:1618:20:1619 | 24 | UseUseExplosion.rb:20:1610:20:1619 | ... > ... | +| UseUseExplosion.rb:20:1622:20:2468 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1606:20:2484 | SSA phi read(self) | +| UseUseExplosion.rb:20:1622:20:2468 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1606:20:2484 | SSA phi read(x) | | UseUseExplosion.rb:20:1622:20:2468 | then ... | UseUseExplosion.rb:20:1606:20:2484 | if ... | -| UseUseExplosion.rb:20:1627:20:2468 | SSA phi read(self) | UseUseExplosion.rb:20:1606:20:2484 | SSA phi read(self) | -| UseUseExplosion.rb:20:1627:20:2468 | SSA phi read(x) | UseUseExplosion.rb:20:1606:20:2484 | SSA phi read(x) | +| UseUseExplosion.rb:20:1627:20:2468 | SSA phi read(self) | UseUseExplosion.rb:20:1622:20:2468 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1627:20:2468 | SSA phi read(x) | UseUseExplosion.rb:20:1622:20:2468 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1627:20:2468 | if ... | UseUseExplosion.rb:20:1622:20:2468 | then ... | | UseUseExplosion.rb:20:1631:20:1635 | @prop | UseUseExplosion.rb:20:1631:20:1640 | ... > ... | | UseUseExplosion.rb:20:1631:20:1635 | [post] self | UseUseExplosion.rb:20:1652:20:1656 | self | @@ -1136,9 +1290,11 @@ | UseUseExplosion.rb:20:1631:20:1640 | ... > ... | UseUseExplosion.rb:20:1630:20:1641 | [false] ( ... ) | | UseUseExplosion.rb:20:1631:20:1640 | ... > ... | UseUseExplosion.rb:20:1630:20:1641 | [true] ( ... ) | | UseUseExplosion.rb:20:1639:20:1640 | 23 | UseUseExplosion.rb:20:1631:20:1640 | ... > ... | +| UseUseExplosion.rb:20:1643:20:2452 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1627:20:2468 | SSA phi read(self) | +| UseUseExplosion.rb:20:1643:20:2452 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1627:20:2468 | SSA phi read(x) | | UseUseExplosion.rb:20:1643:20:2452 | then ... | UseUseExplosion.rb:20:1627:20:2468 | if ... | -| UseUseExplosion.rb:20:1648:20:2452 | SSA phi read(self) | UseUseExplosion.rb:20:1627:20:2468 | SSA phi read(self) | -| UseUseExplosion.rb:20:1648:20:2452 | SSA phi read(x) | UseUseExplosion.rb:20:1627:20:2468 | SSA phi read(x) | +| UseUseExplosion.rb:20:1648:20:2452 | SSA phi read(self) | UseUseExplosion.rb:20:1643:20:2452 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1648:20:2452 | SSA phi read(x) | UseUseExplosion.rb:20:1643:20:2452 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1648:20:2452 | if ... | UseUseExplosion.rb:20:1643:20:2452 | then ... | | UseUseExplosion.rb:20:1652:20:1656 | @prop | UseUseExplosion.rb:20:1652:20:1661 | ... > ... | | UseUseExplosion.rb:20:1652:20:1656 | [post] self | UseUseExplosion.rb:20:1673:20:1677 | self | @@ -1148,9 +1304,11 @@ | UseUseExplosion.rb:20:1652:20:1661 | ... > ... | UseUseExplosion.rb:20:1651:20:1662 | [false] ( ... ) | | UseUseExplosion.rb:20:1652:20:1661 | ... > ... | UseUseExplosion.rb:20:1651:20:1662 | [true] ( ... ) | | UseUseExplosion.rb:20:1660:20:1661 | 22 | UseUseExplosion.rb:20:1652:20:1661 | ... > ... | +| UseUseExplosion.rb:20:1664:20:2436 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1648:20:2452 | SSA phi read(self) | +| UseUseExplosion.rb:20:1664:20:2436 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1648:20:2452 | SSA phi read(x) | | UseUseExplosion.rb:20:1664:20:2436 | then ... | UseUseExplosion.rb:20:1648:20:2452 | if ... | -| UseUseExplosion.rb:20:1669:20:2436 | SSA phi read(self) | UseUseExplosion.rb:20:1648:20:2452 | SSA phi read(self) | -| UseUseExplosion.rb:20:1669:20:2436 | SSA phi read(x) | UseUseExplosion.rb:20:1648:20:2452 | SSA phi read(x) | +| UseUseExplosion.rb:20:1669:20:2436 | SSA phi read(self) | UseUseExplosion.rb:20:1664:20:2436 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1669:20:2436 | SSA phi read(x) | UseUseExplosion.rb:20:1664:20:2436 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1669:20:2436 | if ... | UseUseExplosion.rb:20:1664:20:2436 | then ... | | UseUseExplosion.rb:20:1673:20:1677 | @prop | UseUseExplosion.rb:20:1673:20:1682 | ... > ... | | UseUseExplosion.rb:20:1673:20:1677 | [post] self | UseUseExplosion.rb:20:1694:20:1698 | self | @@ -1160,9 +1318,11 @@ | UseUseExplosion.rb:20:1673:20:1682 | ... > ... | UseUseExplosion.rb:20:1672:20:1683 | [false] ( ... ) | | UseUseExplosion.rb:20:1673:20:1682 | ... > ... | UseUseExplosion.rb:20:1672:20:1683 | [true] ( ... ) | | UseUseExplosion.rb:20:1681:20:1682 | 21 | UseUseExplosion.rb:20:1673:20:1682 | ... > ... | +| UseUseExplosion.rb:20:1685:20:2420 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1669:20:2436 | SSA phi read(self) | +| UseUseExplosion.rb:20:1685:20:2420 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1669:20:2436 | SSA phi read(x) | | UseUseExplosion.rb:20:1685:20:2420 | then ... | UseUseExplosion.rb:20:1669:20:2436 | if ... | -| UseUseExplosion.rb:20:1690:20:2420 | SSA phi read(self) | UseUseExplosion.rb:20:1669:20:2436 | SSA phi read(self) | -| UseUseExplosion.rb:20:1690:20:2420 | SSA phi read(x) | UseUseExplosion.rb:20:1669:20:2436 | SSA phi read(x) | +| UseUseExplosion.rb:20:1690:20:2420 | SSA phi read(self) | UseUseExplosion.rb:20:1685:20:2420 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1690:20:2420 | SSA phi read(x) | UseUseExplosion.rb:20:1685:20:2420 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1690:20:2420 | if ... | UseUseExplosion.rb:20:1685:20:2420 | then ... | | UseUseExplosion.rb:20:1694:20:1698 | @prop | UseUseExplosion.rb:20:1694:20:1703 | ... > ... | | UseUseExplosion.rb:20:1694:20:1698 | [post] self | UseUseExplosion.rb:20:1715:20:1719 | self | @@ -1172,9 +1332,11 @@ | UseUseExplosion.rb:20:1694:20:1703 | ... > ... | UseUseExplosion.rb:20:1693:20:1704 | [false] ( ... ) | | UseUseExplosion.rb:20:1694:20:1703 | ... > ... | UseUseExplosion.rb:20:1693:20:1704 | [true] ( ... ) | | UseUseExplosion.rb:20:1702:20:1703 | 20 | UseUseExplosion.rb:20:1694:20:1703 | ... > ... | +| UseUseExplosion.rb:20:1706:20:2404 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1690:20:2420 | SSA phi read(self) | +| UseUseExplosion.rb:20:1706:20:2404 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1690:20:2420 | SSA phi read(x) | | UseUseExplosion.rb:20:1706:20:2404 | then ... | UseUseExplosion.rb:20:1690:20:2420 | if ... | -| UseUseExplosion.rb:20:1711:20:2404 | SSA phi read(self) | UseUseExplosion.rb:20:1690:20:2420 | SSA phi read(self) | -| UseUseExplosion.rb:20:1711:20:2404 | SSA phi read(x) | UseUseExplosion.rb:20:1690:20:2420 | SSA phi read(x) | +| UseUseExplosion.rb:20:1711:20:2404 | SSA phi read(self) | UseUseExplosion.rb:20:1706:20:2404 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1711:20:2404 | SSA phi read(x) | UseUseExplosion.rb:20:1706:20:2404 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1711:20:2404 | if ... | UseUseExplosion.rb:20:1706:20:2404 | then ... | | UseUseExplosion.rb:20:1715:20:1719 | @prop | UseUseExplosion.rb:20:1715:20:1724 | ... > ... | | UseUseExplosion.rb:20:1715:20:1719 | [post] self | UseUseExplosion.rb:20:1736:20:1740 | self | @@ -1184,9 +1346,11 @@ | UseUseExplosion.rb:20:1715:20:1724 | ... > ... | UseUseExplosion.rb:20:1714:20:1725 | [false] ( ... ) | | UseUseExplosion.rb:20:1715:20:1724 | ... > ... | UseUseExplosion.rb:20:1714:20:1725 | [true] ( ... ) | | UseUseExplosion.rb:20:1723:20:1724 | 19 | UseUseExplosion.rb:20:1715:20:1724 | ... > ... | +| UseUseExplosion.rb:20:1727:20:2388 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1711:20:2404 | SSA phi read(self) | +| UseUseExplosion.rb:20:1727:20:2388 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1711:20:2404 | SSA phi read(x) | | UseUseExplosion.rb:20:1727:20:2388 | then ... | UseUseExplosion.rb:20:1711:20:2404 | if ... | -| UseUseExplosion.rb:20:1732:20:2388 | SSA phi read(self) | UseUseExplosion.rb:20:1711:20:2404 | SSA phi read(self) | -| UseUseExplosion.rb:20:1732:20:2388 | SSA phi read(x) | UseUseExplosion.rb:20:1711:20:2404 | SSA phi read(x) | +| UseUseExplosion.rb:20:1732:20:2388 | SSA phi read(self) | UseUseExplosion.rb:20:1727:20:2388 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1732:20:2388 | SSA phi read(x) | UseUseExplosion.rb:20:1727:20:2388 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1732:20:2388 | if ... | UseUseExplosion.rb:20:1727:20:2388 | then ... | | UseUseExplosion.rb:20:1736:20:1740 | @prop | UseUseExplosion.rb:20:1736:20:1745 | ... > ... | | UseUseExplosion.rb:20:1736:20:1740 | [post] self | UseUseExplosion.rb:20:1757:20:1761 | self | @@ -1196,9 +1360,11 @@ | UseUseExplosion.rb:20:1736:20:1745 | ... > ... | UseUseExplosion.rb:20:1735:20:1746 | [false] ( ... ) | | UseUseExplosion.rb:20:1736:20:1745 | ... > ... | UseUseExplosion.rb:20:1735:20:1746 | [true] ( ... ) | | UseUseExplosion.rb:20:1744:20:1745 | 18 | UseUseExplosion.rb:20:1736:20:1745 | ... > ... | +| UseUseExplosion.rb:20:1748:20:2372 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1732:20:2388 | SSA phi read(self) | +| UseUseExplosion.rb:20:1748:20:2372 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1732:20:2388 | SSA phi read(x) | | UseUseExplosion.rb:20:1748:20:2372 | then ... | UseUseExplosion.rb:20:1732:20:2388 | if ... | -| UseUseExplosion.rb:20:1753:20:2372 | SSA phi read(self) | UseUseExplosion.rb:20:1732:20:2388 | SSA phi read(self) | -| UseUseExplosion.rb:20:1753:20:2372 | SSA phi read(x) | UseUseExplosion.rb:20:1732:20:2388 | SSA phi read(x) | +| UseUseExplosion.rb:20:1753:20:2372 | SSA phi read(self) | UseUseExplosion.rb:20:1748:20:2372 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1753:20:2372 | SSA phi read(x) | UseUseExplosion.rb:20:1748:20:2372 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1753:20:2372 | if ... | UseUseExplosion.rb:20:1748:20:2372 | then ... | | UseUseExplosion.rb:20:1757:20:1761 | @prop | UseUseExplosion.rb:20:1757:20:1766 | ... > ... | | UseUseExplosion.rb:20:1757:20:1761 | [post] self | UseUseExplosion.rb:20:1778:20:1782 | self | @@ -1208,9 +1374,11 @@ | UseUseExplosion.rb:20:1757:20:1766 | ... > ... | UseUseExplosion.rb:20:1756:20:1767 | [false] ( ... ) | | UseUseExplosion.rb:20:1757:20:1766 | ... > ... | UseUseExplosion.rb:20:1756:20:1767 | [true] ( ... ) | | UseUseExplosion.rb:20:1765:20:1766 | 17 | UseUseExplosion.rb:20:1757:20:1766 | ... > ... | +| UseUseExplosion.rb:20:1769:20:2356 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1753:20:2372 | SSA phi read(self) | +| UseUseExplosion.rb:20:1769:20:2356 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1753:20:2372 | SSA phi read(x) | | UseUseExplosion.rb:20:1769:20:2356 | then ... | UseUseExplosion.rb:20:1753:20:2372 | if ... | -| UseUseExplosion.rb:20:1774:20:2356 | SSA phi read(self) | UseUseExplosion.rb:20:1753:20:2372 | SSA phi read(self) | -| UseUseExplosion.rb:20:1774:20:2356 | SSA phi read(x) | UseUseExplosion.rb:20:1753:20:2372 | SSA phi read(x) | +| UseUseExplosion.rb:20:1774:20:2356 | SSA phi read(self) | UseUseExplosion.rb:20:1769:20:2356 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1774:20:2356 | SSA phi read(x) | UseUseExplosion.rb:20:1769:20:2356 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1774:20:2356 | if ... | UseUseExplosion.rb:20:1769:20:2356 | then ... | | UseUseExplosion.rb:20:1778:20:1782 | @prop | UseUseExplosion.rb:20:1778:20:1787 | ... > ... | | UseUseExplosion.rb:20:1778:20:1782 | [post] self | UseUseExplosion.rb:20:1799:20:1803 | self | @@ -1220,9 +1388,11 @@ | UseUseExplosion.rb:20:1778:20:1787 | ... > ... | UseUseExplosion.rb:20:1777:20:1788 | [false] ( ... ) | | UseUseExplosion.rb:20:1778:20:1787 | ... > ... | UseUseExplosion.rb:20:1777:20:1788 | [true] ( ... ) | | UseUseExplosion.rb:20:1786:20:1787 | 16 | UseUseExplosion.rb:20:1778:20:1787 | ... > ... | +| UseUseExplosion.rb:20:1790:20:2340 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1774:20:2356 | SSA phi read(self) | +| UseUseExplosion.rb:20:1790:20:2340 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1774:20:2356 | SSA phi read(x) | | UseUseExplosion.rb:20:1790:20:2340 | then ... | UseUseExplosion.rb:20:1774:20:2356 | if ... | -| UseUseExplosion.rb:20:1795:20:2340 | SSA phi read(self) | UseUseExplosion.rb:20:1774:20:2356 | SSA phi read(self) | -| UseUseExplosion.rb:20:1795:20:2340 | SSA phi read(x) | UseUseExplosion.rb:20:1774:20:2356 | SSA phi read(x) | +| UseUseExplosion.rb:20:1795:20:2340 | SSA phi read(self) | UseUseExplosion.rb:20:1790:20:2340 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1795:20:2340 | SSA phi read(x) | UseUseExplosion.rb:20:1790:20:2340 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1795:20:2340 | if ... | UseUseExplosion.rb:20:1790:20:2340 | then ... | | UseUseExplosion.rb:20:1799:20:1803 | @prop | UseUseExplosion.rb:20:1799:20:1808 | ... > ... | | UseUseExplosion.rb:20:1799:20:1803 | [post] self | UseUseExplosion.rb:20:1820:20:1824 | self | @@ -1232,9 +1402,11 @@ | UseUseExplosion.rb:20:1799:20:1808 | ... > ... | UseUseExplosion.rb:20:1798:20:1809 | [false] ( ... ) | | UseUseExplosion.rb:20:1799:20:1808 | ... > ... | UseUseExplosion.rb:20:1798:20:1809 | [true] ( ... ) | | UseUseExplosion.rb:20:1807:20:1808 | 15 | UseUseExplosion.rb:20:1799:20:1808 | ... > ... | +| UseUseExplosion.rb:20:1811:20:2324 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1795:20:2340 | SSA phi read(self) | +| UseUseExplosion.rb:20:1811:20:2324 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1795:20:2340 | SSA phi read(x) | | UseUseExplosion.rb:20:1811:20:2324 | then ... | UseUseExplosion.rb:20:1795:20:2340 | if ... | -| UseUseExplosion.rb:20:1816:20:2324 | SSA phi read(self) | UseUseExplosion.rb:20:1795:20:2340 | SSA phi read(self) | -| UseUseExplosion.rb:20:1816:20:2324 | SSA phi read(x) | UseUseExplosion.rb:20:1795:20:2340 | SSA phi read(x) | +| UseUseExplosion.rb:20:1816:20:2324 | SSA phi read(self) | UseUseExplosion.rb:20:1811:20:2324 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1816:20:2324 | SSA phi read(x) | UseUseExplosion.rb:20:1811:20:2324 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1816:20:2324 | if ... | UseUseExplosion.rb:20:1811:20:2324 | then ... | | UseUseExplosion.rb:20:1820:20:1824 | @prop | UseUseExplosion.rb:20:1820:20:1829 | ... > ... | | UseUseExplosion.rb:20:1820:20:1824 | [post] self | UseUseExplosion.rb:20:1841:20:1845 | self | @@ -1244,9 +1416,11 @@ | UseUseExplosion.rb:20:1820:20:1829 | ... > ... | UseUseExplosion.rb:20:1819:20:1830 | [false] ( ... ) | | UseUseExplosion.rb:20:1820:20:1829 | ... > ... | UseUseExplosion.rb:20:1819:20:1830 | [true] ( ... ) | | UseUseExplosion.rb:20:1828:20:1829 | 14 | UseUseExplosion.rb:20:1820:20:1829 | ... > ... | +| UseUseExplosion.rb:20:1832:20:2308 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1816:20:2324 | SSA phi read(self) | +| UseUseExplosion.rb:20:1832:20:2308 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1816:20:2324 | SSA phi read(x) | | UseUseExplosion.rb:20:1832:20:2308 | then ... | UseUseExplosion.rb:20:1816:20:2324 | if ... | -| UseUseExplosion.rb:20:1837:20:2308 | SSA phi read(self) | UseUseExplosion.rb:20:1816:20:2324 | SSA phi read(self) | -| UseUseExplosion.rb:20:1837:20:2308 | SSA phi read(x) | UseUseExplosion.rb:20:1816:20:2324 | SSA phi read(x) | +| UseUseExplosion.rb:20:1837:20:2308 | SSA phi read(self) | UseUseExplosion.rb:20:1832:20:2308 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1837:20:2308 | SSA phi read(x) | UseUseExplosion.rb:20:1832:20:2308 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1837:20:2308 | if ... | UseUseExplosion.rb:20:1832:20:2308 | then ... | | UseUseExplosion.rb:20:1841:20:1845 | @prop | UseUseExplosion.rb:20:1841:20:1850 | ... > ... | | UseUseExplosion.rb:20:1841:20:1845 | [post] self | UseUseExplosion.rb:20:1862:20:1866 | self | @@ -1256,9 +1430,11 @@ | UseUseExplosion.rb:20:1841:20:1850 | ... > ... | UseUseExplosion.rb:20:1840:20:1851 | [false] ( ... ) | | UseUseExplosion.rb:20:1841:20:1850 | ... > ... | UseUseExplosion.rb:20:1840:20:1851 | [true] ( ... ) | | UseUseExplosion.rb:20:1849:20:1850 | 13 | UseUseExplosion.rb:20:1841:20:1850 | ... > ... | +| UseUseExplosion.rb:20:1853:20:2292 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1837:20:2308 | SSA phi read(self) | +| UseUseExplosion.rb:20:1853:20:2292 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1837:20:2308 | SSA phi read(x) | | UseUseExplosion.rb:20:1853:20:2292 | then ... | UseUseExplosion.rb:20:1837:20:2308 | if ... | -| UseUseExplosion.rb:20:1858:20:2292 | SSA phi read(self) | UseUseExplosion.rb:20:1837:20:2308 | SSA phi read(self) | -| UseUseExplosion.rb:20:1858:20:2292 | SSA phi read(x) | UseUseExplosion.rb:20:1837:20:2308 | SSA phi read(x) | +| UseUseExplosion.rb:20:1858:20:2292 | SSA phi read(self) | UseUseExplosion.rb:20:1853:20:2292 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1858:20:2292 | SSA phi read(x) | UseUseExplosion.rb:20:1853:20:2292 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1858:20:2292 | if ... | UseUseExplosion.rb:20:1853:20:2292 | then ... | | UseUseExplosion.rb:20:1862:20:1866 | @prop | UseUseExplosion.rb:20:1862:20:1871 | ... > ... | | UseUseExplosion.rb:20:1862:20:1866 | [post] self | UseUseExplosion.rb:20:1883:20:1887 | self | @@ -1268,9 +1444,11 @@ | UseUseExplosion.rb:20:1862:20:1871 | ... > ... | UseUseExplosion.rb:20:1861:20:1872 | [false] ( ... ) | | UseUseExplosion.rb:20:1862:20:1871 | ... > ... | UseUseExplosion.rb:20:1861:20:1872 | [true] ( ... ) | | UseUseExplosion.rb:20:1870:20:1871 | 12 | UseUseExplosion.rb:20:1862:20:1871 | ... > ... | +| UseUseExplosion.rb:20:1874:20:2276 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1858:20:2292 | SSA phi read(self) | +| UseUseExplosion.rb:20:1874:20:2276 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1858:20:2292 | SSA phi read(x) | | UseUseExplosion.rb:20:1874:20:2276 | then ... | UseUseExplosion.rb:20:1858:20:2292 | if ... | -| UseUseExplosion.rb:20:1879:20:2276 | SSA phi read(self) | UseUseExplosion.rb:20:1858:20:2292 | SSA phi read(self) | -| UseUseExplosion.rb:20:1879:20:2276 | SSA phi read(x) | UseUseExplosion.rb:20:1858:20:2292 | SSA phi read(x) | +| UseUseExplosion.rb:20:1879:20:2276 | SSA phi read(self) | UseUseExplosion.rb:20:1874:20:2276 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1879:20:2276 | SSA phi read(x) | UseUseExplosion.rb:20:1874:20:2276 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1879:20:2276 | if ... | UseUseExplosion.rb:20:1874:20:2276 | then ... | | UseUseExplosion.rb:20:1883:20:1887 | @prop | UseUseExplosion.rb:20:1883:20:1892 | ... > ... | | UseUseExplosion.rb:20:1883:20:1887 | [post] self | UseUseExplosion.rb:20:1904:20:1908 | self | @@ -1280,9 +1458,11 @@ | UseUseExplosion.rb:20:1883:20:1892 | ... > ... | UseUseExplosion.rb:20:1882:20:1893 | [false] ( ... ) | | UseUseExplosion.rb:20:1883:20:1892 | ... > ... | UseUseExplosion.rb:20:1882:20:1893 | [true] ( ... ) | | UseUseExplosion.rb:20:1891:20:1892 | 11 | UseUseExplosion.rb:20:1883:20:1892 | ... > ... | +| UseUseExplosion.rb:20:1895:20:2260 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1879:20:2276 | SSA phi read(self) | +| UseUseExplosion.rb:20:1895:20:2260 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1879:20:2276 | SSA phi read(x) | | UseUseExplosion.rb:20:1895:20:2260 | then ... | UseUseExplosion.rb:20:1879:20:2276 | if ... | -| UseUseExplosion.rb:20:1900:20:2260 | SSA phi read(self) | UseUseExplosion.rb:20:1879:20:2276 | SSA phi read(self) | -| UseUseExplosion.rb:20:1900:20:2260 | SSA phi read(x) | UseUseExplosion.rb:20:1879:20:2276 | SSA phi read(x) | +| UseUseExplosion.rb:20:1900:20:2260 | SSA phi read(self) | UseUseExplosion.rb:20:1895:20:2260 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1900:20:2260 | SSA phi read(x) | UseUseExplosion.rb:20:1895:20:2260 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1900:20:2260 | if ... | UseUseExplosion.rb:20:1895:20:2260 | then ... | | UseUseExplosion.rb:20:1904:20:1908 | @prop | UseUseExplosion.rb:20:1904:20:1913 | ... > ... | | UseUseExplosion.rb:20:1904:20:1908 | [post] self | UseUseExplosion.rb:20:1925:20:1929 | self | @@ -1292,9 +1472,11 @@ | UseUseExplosion.rb:20:1904:20:1913 | ... > ... | UseUseExplosion.rb:20:1903:20:1914 | [false] ( ... ) | | UseUseExplosion.rb:20:1904:20:1913 | ... > ... | UseUseExplosion.rb:20:1903:20:1914 | [true] ( ... ) | | UseUseExplosion.rb:20:1912:20:1913 | 10 | UseUseExplosion.rb:20:1904:20:1913 | ... > ... | +| UseUseExplosion.rb:20:1916:20:2244 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1900:20:2260 | SSA phi read(self) | +| UseUseExplosion.rb:20:1916:20:2244 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1900:20:2260 | SSA phi read(x) | | UseUseExplosion.rb:20:1916:20:2244 | then ... | UseUseExplosion.rb:20:1900:20:2260 | if ... | -| UseUseExplosion.rb:20:1921:20:2244 | SSA phi read(self) | UseUseExplosion.rb:20:1900:20:2260 | SSA phi read(self) | -| UseUseExplosion.rb:20:1921:20:2244 | SSA phi read(x) | UseUseExplosion.rb:20:1900:20:2260 | SSA phi read(x) | +| UseUseExplosion.rb:20:1921:20:2244 | SSA phi read(self) | UseUseExplosion.rb:20:1916:20:2244 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1921:20:2244 | SSA phi read(x) | UseUseExplosion.rb:20:1916:20:2244 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1921:20:2244 | if ... | UseUseExplosion.rb:20:1916:20:2244 | then ... | | UseUseExplosion.rb:20:1925:20:1929 | @prop | UseUseExplosion.rb:20:1925:20:1933 | ... > ... | | UseUseExplosion.rb:20:1925:20:1929 | [post] self | UseUseExplosion.rb:20:1945:20:1949 | self | @@ -1304,9 +1486,11 @@ | UseUseExplosion.rb:20:1925:20:1933 | ... > ... | UseUseExplosion.rb:20:1924:20:1934 | [false] ( ... ) | | UseUseExplosion.rb:20:1925:20:1933 | ... > ... | UseUseExplosion.rb:20:1924:20:1934 | [true] ( ... ) | | UseUseExplosion.rb:20:1933:20:1933 | 9 | UseUseExplosion.rb:20:1925:20:1933 | ... > ... | +| UseUseExplosion.rb:20:1936:20:2228 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1921:20:2244 | SSA phi read(self) | +| UseUseExplosion.rb:20:1936:20:2228 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1921:20:2244 | SSA phi read(x) | | UseUseExplosion.rb:20:1936:20:2228 | then ... | UseUseExplosion.rb:20:1921:20:2244 | if ... | -| UseUseExplosion.rb:20:1941:20:2228 | SSA phi read(self) | UseUseExplosion.rb:20:1921:20:2244 | SSA phi read(self) | -| UseUseExplosion.rb:20:1941:20:2228 | SSA phi read(x) | UseUseExplosion.rb:20:1921:20:2244 | SSA phi read(x) | +| UseUseExplosion.rb:20:1941:20:2228 | SSA phi read(self) | UseUseExplosion.rb:20:1936:20:2228 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1941:20:2228 | SSA phi read(x) | UseUseExplosion.rb:20:1936:20:2228 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1941:20:2228 | if ... | UseUseExplosion.rb:20:1936:20:2228 | then ... | | UseUseExplosion.rb:20:1945:20:1949 | @prop | UseUseExplosion.rb:20:1945:20:1953 | ... > ... | | UseUseExplosion.rb:20:1945:20:1949 | [post] self | UseUseExplosion.rb:20:1965:20:1969 | self | @@ -1316,9 +1500,11 @@ | UseUseExplosion.rb:20:1945:20:1953 | ... > ... | UseUseExplosion.rb:20:1944:20:1954 | [false] ( ... ) | | UseUseExplosion.rb:20:1945:20:1953 | ... > ... | UseUseExplosion.rb:20:1944:20:1954 | [true] ( ... ) | | UseUseExplosion.rb:20:1953:20:1953 | 8 | UseUseExplosion.rb:20:1945:20:1953 | ... > ... | +| UseUseExplosion.rb:20:1956:20:2212 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1941:20:2228 | SSA phi read(self) | +| UseUseExplosion.rb:20:1956:20:2212 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1941:20:2228 | SSA phi read(x) | | UseUseExplosion.rb:20:1956:20:2212 | then ... | UseUseExplosion.rb:20:1941:20:2228 | if ... | -| UseUseExplosion.rb:20:1961:20:2212 | SSA phi read(self) | UseUseExplosion.rb:20:1941:20:2228 | SSA phi read(self) | -| UseUseExplosion.rb:20:1961:20:2212 | SSA phi read(x) | UseUseExplosion.rb:20:1941:20:2228 | SSA phi read(x) | +| UseUseExplosion.rb:20:1961:20:2212 | SSA phi read(self) | UseUseExplosion.rb:20:1956:20:2212 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1961:20:2212 | SSA phi read(x) | UseUseExplosion.rb:20:1956:20:2212 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1961:20:2212 | if ... | UseUseExplosion.rb:20:1956:20:2212 | then ... | | UseUseExplosion.rb:20:1965:20:1969 | @prop | UseUseExplosion.rb:20:1965:20:1973 | ... > ... | | UseUseExplosion.rb:20:1965:20:1969 | [post] self | UseUseExplosion.rb:20:1985:20:1989 | self | @@ -1328,9 +1514,11 @@ | UseUseExplosion.rb:20:1965:20:1973 | ... > ... | UseUseExplosion.rb:20:1964:20:1974 | [false] ( ... ) | | UseUseExplosion.rb:20:1965:20:1973 | ... > ... | UseUseExplosion.rb:20:1964:20:1974 | [true] ( ... ) | | UseUseExplosion.rb:20:1973:20:1973 | 7 | UseUseExplosion.rb:20:1965:20:1973 | ... > ... | +| UseUseExplosion.rb:20:1976:20:2196 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1961:20:2212 | SSA phi read(self) | +| UseUseExplosion.rb:20:1976:20:2196 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1961:20:2212 | SSA phi read(x) | | UseUseExplosion.rb:20:1976:20:2196 | then ... | UseUseExplosion.rb:20:1961:20:2212 | if ... | -| UseUseExplosion.rb:20:1981:20:2196 | SSA phi read(self) | UseUseExplosion.rb:20:1961:20:2212 | SSA phi read(self) | -| UseUseExplosion.rb:20:1981:20:2196 | SSA phi read(x) | UseUseExplosion.rb:20:1961:20:2212 | SSA phi read(x) | +| UseUseExplosion.rb:20:1981:20:2196 | SSA phi read(self) | UseUseExplosion.rb:20:1976:20:2196 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1981:20:2196 | SSA phi read(x) | UseUseExplosion.rb:20:1976:20:2196 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1981:20:2196 | if ... | UseUseExplosion.rb:20:1976:20:2196 | then ... | | UseUseExplosion.rb:20:1985:20:1989 | @prop | UseUseExplosion.rb:20:1985:20:1993 | ... > ... | | UseUseExplosion.rb:20:1985:20:1989 | [post] self | UseUseExplosion.rb:20:2005:20:2009 | self | @@ -1340,9 +1528,11 @@ | UseUseExplosion.rb:20:1985:20:1993 | ... > ... | UseUseExplosion.rb:20:1984:20:1994 | [false] ( ... ) | | UseUseExplosion.rb:20:1985:20:1993 | ... > ... | UseUseExplosion.rb:20:1984:20:1994 | [true] ( ... ) | | UseUseExplosion.rb:20:1993:20:1993 | 6 | UseUseExplosion.rb:20:1985:20:1993 | ... > ... | +| UseUseExplosion.rb:20:1996:20:2180 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1981:20:2196 | SSA phi read(self) | +| UseUseExplosion.rb:20:1996:20:2180 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1981:20:2196 | SSA phi read(x) | | UseUseExplosion.rb:20:1996:20:2180 | then ... | UseUseExplosion.rb:20:1981:20:2196 | if ... | -| UseUseExplosion.rb:20:2001:20:2180 | SSA phi read(self) | UseUseExplosion.rb:20:1981:20:2196 | SSA phi read(self) | -| UseUseExplosion.rb:20:2001:20:2180 | SSA phi read(x) | UseUseExplosion.rb:20:1981:20:2196 | SSA phi read(x) | +| UseUseExplosion.rb:20:2001:20:2180 | SSA phi read(self) | UseUseExplosion.rb:20:1996:20:2180 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:2001:20:2180 | SSA phi read(x) | UseUseExplosion.rb:20:1996:20:2180 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:2001:20:2180 | if ... | UseUseExplosion.rb:20:1996:20:2180 | then ... | | UseUseExplosion.rb:20:2005:20:2009 | @prop | UseUseExplosion.rb:20:2005:20:2013 | ... > ... | | UseUseExplosion.rb:20:2005:20:2009 | [post] self | UseUseExplosion.rb:20:2025:20:2029 | self | @@ -1352,9 +1542,11 @@ | UseUseExplosion.rb:20:2005:20:2013 | ... > ... | UseUseExplosion.rb:20:2004:20:2014 | [false] ( ... ) | | UseUseExplosion.rb:20:2005:20:2013 | ... > ... | UseUseExplosion.rb:20:2004:20:2014 | [true] ( ... ) | | UseUseExplosion.rb:20:2013:20:2013 | 5 | UseUseExplosion.rb:20:2005:20:2013 | ... > ... | +| UseUseExplosion.rb:20:2016:20:2164 | [input] SSA phi read(self) | UseUseExplosion.rb:20:2001:20:2180 | SSA phi read(self) | +| UseUseExplosion.rb:20:2016:20:2164 | [input] SSA phi read(x) | UseUseExplosion.rb:20:2001:20:2180 | SSA phi read(x) | | UseUseExplosion.rb:20:2016:20:2164 | then ... | UseUseExplosion.rb:20:2001:20:2180 | if ... | -| UseUseExplosion.rb:20:2021:20:2164 | SSA phi read(self) | UseUseExplosion.rb:20:2001:20:2180 | SSA phi read(self) | -| UseUseExplosion.rb:20:2021:20:2164 | SSA phi read(x) | UseUseExplosion.rb:20:2001:20:2180 | SSA phi read(x) | +| UseUseExplosion.rb:20:2021:20:2164 | SSA phi read(self) | UseUseExplosion.rb:20:2016:20:2164 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:2021:20:2164 | SSA phi read(x) | UseUseExplosion.rb:20:2016:20:2164 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:2021:20:2164 | if ... | UseUseExplosion.rb:20:2016:20:2164 | then ... | | UseUseExplosion.rb:20:2025:20:2029 | @prop | UseUseExplosion.rb:20:2025:20:2033 | ... > ... | | UseUseExplosion.rb:20:2025:20:2029 | [post] self | UseUseExplosion.rb:20:2045:20:2049 | self | @@ -1364,9 +1556,11 @@ | UseUseExplosion.rb:20:2025:20:2033 | ... > ... | UseUseExplosion.rb:20:2024:20:2034 | [false] ( ... ) | | UseUseExplosion.rb:20:2025:20:2033 | ... > ... | UseUseExplosion.rb:20:2024:20:2034 | [true] ( ... ) | | UseUseExplosion.rb:20:2033:20:2033 | 4 | UseUseExplosion.rb:20:2025:20:2033 | ... > ... | +| UseUseExplosion.rb:20:2036:20:2148 | [input] SSA phi read(self) | UseUseExplosion.rb:20:2021:20:2164 | SSA phi read(self) | +| UseUseExplosion.rb:20:2036:20:2148 | [input] SSA phi read(x) | UseUseExplosion.rb:20:2021:20:2164 | SSA phi read(x) | | UseUseExplosion.rb:20:2036:20:2148 | then ... | UseUseExplosion.rb:20:2021:20:2164 | if ... | -| UseUseExplosion.rb:20:2041:20:2148 | SSA phi read(self) | UseUseExplosion.rb:20:2021:20:2164 | SSA phi read(self) | -| UseUseExplosion.rb:20:2041:20:2148 | SSA phi read(x) | UseUseExplosion.rb:20:2021:20:2164 | SSA phi read(x) | +| UseUseExplosion.rb:20:2041:20:2148 | SSA phi read(self) | UseUseExplosion.rb:20:2036:20:2148 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:2041:20:2148 | SSA phi read(x) | UseUseExplosion.rb:20:2036:20:2148 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:2041:20:2148 | if ... | UseUseExplosion.rb:20:2036:20:2148 | then ... | | UseUseExplosion.rb:20:2045:20:2049 | @prop | UseUseExplosion.rb:20:2045:20:2053 | ... > ... | | UseUseExplosion.rb:20:2045:20:2049 | [post] self | UseUseExplosion.rb:20:2065:20:2069 | self | @@ -1376,9 +1570,11 @@ | UseUseExplosion.rb:20:2045:20:2053 | ... > ... | UseUseExplosion.rb:20:2044:20:2054 | [false] ( ... ) | | UseUseExplosion.rb:20:2045:20:2053 | ... > ... | UseUseExplosion.rb:20:2044:20:2054 | [true] ( ... ) | | UseUseExplosion.rb:20:2053:20:2053 | 3 | UseUseExplosion.rb:20:2045:20:2053 | ... > ... | +| UseUseExplosion.rb:20:2056:20:2132 | [input] SSA phi read(self) | UseUseExplosion.rb:20:2041:20:2148 | SSA phi read(self) | +| UseUseExplosion.rb:20:2056:20:2132 | [input] SSA phi read(x) | UseUseExplosion.rb:20:2041:20:2148 | SSA phi read(x) | | UseUseExplosion.rb:20:2056:20:2132 | then ... | UseUseExplosion.rb:20:2041:20:2148 | if ... | -| UseUseExplosion.rb:20:2061:20:2132 | SSA phi read(self) | UseUseExplosion.rb:20:2041:20:2148 | SSA phi read(self) | -| UseUseExplosion.rb:20:2061:20:2132 | SSA phi read(x) | UseUseExplosion.rb:20:2041:20:2148 | SSA phi read(x) | +| UseUseExplosion.rb:20:2061:20:2132 | SSA phi read(self) | UseUseExplosion.rb:20:2056:20:2132 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:2061:20:2132 | SSA phi read(x) | UseUseExplosion.rb:20:2056:20:2132 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:2061:20:2132 | if ... | UseUseExplosion.rb:20:2056:20:2132 | then ... | | UseUseExplosion.rb:20:2065:20:2069 | @prop | UseUseExplosion.rb:20:2065:20:2073 | ... > ... | | UseUseExplosion.rb:20:2065:20:2069 | [post] self | UseUseExplosion.rb:20:2085:20:2089 | self | @@ -1388,9 +1584,11 @@ | UseUseExplosion.rb:20:2065:20:2073 | ... > ... | UseUseExplosion.rb:20:2064:20:2074 | [false] ( ... ) | | UseUseExplosion.rb:20:2065:20:2073 | ... > ... | UseUseExplosion.rb:20:2064:20:2074 | [true] ( ... ) | | UseUseExplosion.rb:20:2073:20:2073 | 2 | UseUseExplosion.rb:20:2065:20:2073 | ... > ... | +| UseUseExplosion.rb:20:2076:20:2116 | [input] SSA phi read(self) | UseUseExplosion.rb:20:2061:20:2132 | SSA phi read(self) | +| UseUseExplosion.rb:20:2076:20:2116 | [input] SSA phi read(x) | UseUseExplosion.rb:20:2061:20:2132 | SSA phi read(x) | | UseUseExplosion.rb:20:2076:20:2116 | then ... | UseUseExplosion.rb:20:2061:20:2132 | if ... | -| UseUseExplosion.rb:20:2081:20:2116 | SSA phi read(self) | UseUseExplosion.rb:20:2061:20:2132 | SSA phi read(self) | -| UseUseExplosion.rb:20:2081:20:2116 | SSA phi read(x) | UseUseExplosion.rb:20:2061:20:2132 | SSA phi read(x) | +| UseUseExplosion.rb:20:2081:20:2116 | SSA phi read(self) | UseUseExplosion.rb:20:2076:20:2116 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:2081:20:2116 | SSA phi read(x) | UseUseExplosion.rb:20:2076:20:2116 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:2081:20:2116 | if ... | UseUseExplosion.rb:20:2076:20:2116 | then ... | | UseUseExplosion.rb:20:2085:20:2089 | @prop | UseUseExplosion.rb:20:2085:20:2093 | ... > ... | | UseUseExplosion.rb:20:2085:20:2089 | [post] self | UseUseExplosion.rb:20:2107:20:2112 | self | @@ -1398,205 +1596,407 @@ | UseUseExplosion.rb:20:2085:20:2093 | ... > ... | UseUseExplosion.rb:20:2084:20:2094 | [false] ( ... ) | | UseUseExplosion.rb:20:2085:20:2093 | ... > ... | UseUseExplosion.rb:20:2084:20:2094 | [true] ( ... ) | | UseUseExplosion.rb:20:2093:20:2093 | 1 | UseUseExplosion.rb:20:2085:20:2093 | ... > ... | +| UseUseExplosion.rb:20:2096:20:2099 | [input] SSA phi read(self) | UseUseExplosion.rb:20:2081:20:2116 | SSA phi read(self) | +| UseUseExplosion.rb:20:2096:20:2099 | [input] SSA phi read(x) | UseUseExplosion.rb:20:2081:20:2116 | SSA phi read(x) | | UseUseExplosion.rb:20:2096:20:2099 | then ... | UseUseExplosion.rb:20:2081:20:2116 | if ... | +| UseUseExplosion.rb:20:2102:20:2112 | [input] SSA phi read(self) | UseUseExplosion.rb:20:2081:20:2116 | SSA phi read(self) | +| UseUseExplosion.rb:20:2102:20:2112 | [input] SSA phi read(x) | UseUseExplosion.rb:20:2081:20:2116 | SSA phi read(x) | | UseUseExplosion.rb:20:2102:20:2112 | else ... | UseUseExplosion.rb:20:2081:20:2116 | if ... | | UseUseExplosion.rb:20:2107:20:2112 | call to use | UseUseExplosion.rb:20:2102:20:2112 | else ... | +| UseUseExplosion.rb:20:2118:20:2128 | [input] SSA phi read(self) | UseUseExplosion.rb:20:2061:20:2132 | SSA phi read(self) | +| UseUseExplosion.rb:20:2118:20:2128 | [input] SSA phi read(x) | UseUseExplosion.rb:20:2061:20:2132 | SSA phi read(x) | | UseUseExplosion.rb:20:2118:20:2128 | else ... | UseUseExplosion.rb:20:2061:20:2132 | if ... | | UseUseExplosion.rb:20:2123:20:2128 | call to use | UseUseExplosion.rb:20:2118:20:2128 | else ... | +| UseUseExplosion.rb:20:2134:20:2144 | [input] SSA phi read(self) | UseUseExplosion.rb:20:2041:20:2148 | SSA phi read(self) | +| UseUseExplosion.rb:20:2134:20:2144 | [input] SSA phi read(x) | UseUseExplosion.rb:20:2041:20:2148 | SSA phi read(x) | | UseUseExplosion.rb:20:2134:20:2144 | else ... | UseUseExplosion.rb:20:2041:20:2148 | if ... | | UseUseExplosion.rb:20:2139:20:2144 | call to use | UseUseExplosion.rb:20:2134:20:2144 | else ... | +| UseUseExplosion.rb:20:2150:20:2160 | [input] SSA phi read(self) | UseUseExplosion.rb:20:2021:20:2164 | SSA phi read(self) | +| UseUseExplosion.rb:20:2150:20:2160 | [input] SSA phi read(x) | UseUseExplosion.rb:20:2021:20:2164 | SSA phi read(x) | | UseUseExplosion.rb:20:2150:20:2160 | else ... | UseUseExplosion.rb:20:2021:20:2164 | if ... | | UseUseExplosion.rb:20:2155:20:2160 | call to use | UseUseExplosion.rb:20:2150:20:2160 | else ... | +| UseUseExplosion.rb:20:2166:20:2176 | [input] SSA phi read(self) | UseUseExplosion.rb:20:2001:20:2180 | SSA phi read(self) | +| UseUseExplosion.rb:20:2166:20:2176 | [input] SSA phi read(x) | UseUseExplosion.rb:20:2001:20:2180 | SSA phi read(x) | | UseUseExplosion.rb:20:2166:20:2176 | else ... | UseUseExplosion.rb:20:2001:20:2180 | if ... | | UseUseExplosion.rb:20:2171:20:2176 | call to use | UseUseExplosion.rb:20:2166:20:2176 | else ... | +| UseUseExplosion.rb:20:2182:20:2192 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1981:20:2196 | SSA phi read(self) | +| UseUseExplosion.rb:20:2182:20:2192 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1981:20:2196 | SSA phi read(x) | | UseUseExplosion.rb:20:2182:20:2192 | else ... | UseUseExplosion.rb:20:1981:20:2196 | if ... | | UseUseExplosion.rb:20:2187:20:2192 | call to use | UseUseExplosion.rb:20:2182:20:2192 | else ... | +| UseUseExplosion.rb:20:2198:20:2208 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1961:20:2212 | SSA phi read(self) | +| UseUseExplosion.rb:20:2198:20:2208 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1961:20:2212 | SSA phi read(x) | | UseUseExplosion.rb:20:2198:20:2208 | else ... | UseUseExplosion.rb:20:1961:20:2212 | if ... | | UseUseExplosion.rb:20:2203:20:2208 | call to use | UseUseExplosion.rb:20:2198:20:2208 | else ... | +| UseUseExplosion.rb:20:2214:20:2224 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1941:20:2228 | SSA phi read(self) | +| UseUseExplosion.rb:20:2214:20:2224 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1941:20:2228 | SSA phi read(x) | | UseUseExplosion.rb:20:2214:20:2224 | else ... | UseUseExplosion.rb:20:1941:20:2228 | if ... | | UseUseExplosion.rb:20:2219:20:2224 | call to use | UseUseExplosion.rb:20:2214:20:2224 | else ... | +| UseUseExplosion.rb:20:2230:20:2240 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1921:20:2244 | SSA phi read(self) | +| UseUseExplosion.rb:20:2230:20:2240 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1921:20:2244 | SSA phi read(x) | | UseUseExplosion.rb:20:2230:20:2240 | else ... | UseUseExplosion.rb:20:1921:20:2244 | if ... | | UseUseExplosion.rb:20:2235:20:2240 | call to use | UseUseExplosion.rb:20:2230:20:2240 | else ... | +| UseUseExplosion.rb:20:2246:20:2256 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1900:20:2260 | SSA phi read(self) | +| UseUseExplosion.rb:20:2246:20:2256 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1900:20:2260 | SSA phi read(x) | | UseUseExplosion.rb:20:2246:20:2256 | else ... | UseUseExplosion.rb:20:1900:20:2260 | if ... | | UseUseExplosion.rb:20:2251:20:2256 | call to use | UseUseExplosion.rb:20:2246:20:2256 | else ... | +| UseUseExplosion.rb:20:2262:20:2272 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1879:20:2276 | SSA phi read(self) | +| UseUseExplosion.rb:20:2262:20:2272 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1879:20:2276 | SSA phi read(x) | | UseUseExplosion.rb:20:2262:20:2272 | else ... | UseUseExplosion.rb:20:1879:20:2276 | if ... | | UseUseExplosion.rb:20:2267:20:2272 | call to use | UseUseExplosion.rb:20:2262:20:2272 | else ... | +| UseUseExplosion.rb:20:2278:20:2288 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1858:20:2292 | SSA phi read(self) | +| UseUseExplosion.rb:20:2278:20:2288 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1858:20:2292 | SSA phi read(x) | | UseUseExplosion.rb:20:2278:20:2288 | else ... | UseUseExplosion.rb:20:1858:20:2292 | if ... | | UseUseExplosion.rb:20:2283:20:2288 | call to use | UseUseExplosion.rb:20:2278:20:2288 | else ... | +| UseUseExplosion.rb:20:2294:20:2304 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1837:20:2308 | SSA phi read(self) | +| UseUseExplosion.rb:20:2294:20:2304 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1837:20:2308 | SSA phi read(x) | | UseUseExplosion.rb:20:2294:20:2304 | else ... | UseUseExplosion.rb:20:1837:20:2308 | if ... | | UseUseExplosion.rb:20:2299:20:2304 | call to use | UseUseExplosion.rb:20:2294:20:2304 | else ... | +| UseUseExplosion.rb:20:2310:20:2320 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1816:20:2324 | SSA phi read(self) | +| UseUseExplosion.rb:20:2310:20:2320 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1816:20:2324 | SSA phi read(x) | | UseUseExplosion.rb:20:2310:20:2320 | else ... | UseUseExplosion.rb:20:1816:20:2324 | if ... | | UseUseExplosion.rb:20:2315:20:2320 | call to use | UseUseExplosion.rb:20:2310:20:2320 | else ... | +| UseUseExplosion.rb:20:2326:20:2336 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1795:20:2340 | SSA phi read(self) | +| UseUseExplosion.rb:20:2326:20:2336 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1795:20:2340 | SSA phi read(x) | | UseUseExplosion.rb:20:2326:20:2336 | else ... | UseUseExplosion.rb:20:1795:20:2340 | if ... | | UseUseExplosion.rb:20:2331:20:2336 | call to use | UseUseExplosion.rb:20:2326:20:2336 | else ... | +| UseUseExplosion.rb:20:2342:20:2352 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1774:20:2356 | SSA phi read(self) | +| UseUseExplosion.rb:20:2342:20:2352 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1774:20:2356 | SSA phi read(x) | | UseUseExplosion.rb:20:2342:20:2352 | else ... | UseUseExplosion.rb:20:1774:20:2356 | if ... | | UseUseExplosion.rb:20:2347:20:2352 | call to use | UseUseExplosion.rb:20:2342:20:2352 | else ... | +| UseUseExplosion.rb:20:2358:20:2368 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1753:20:2372 | SSA phi read(self) | +| UseUseExplosion.rb:20:2358:20:2368 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1753:20:2372 | SSA phi read(x) | | UseUseExplosion.rb:20:2358:20:2368 | else ... | UseUseExplosion.rb:20:1753:20:2372 | if ... | | UseUseExplosion.rb:20:2363:20:2368 | call to use | UseUseExplosion.rb:20:2358:20:2368 | else ... | +| UseUseExplosion.rb:20:2374:20:2384 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1732:20:2388 | SSA phi read(self) | +| UseUseExplosion.rb:20:2374:20:2384 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1732:20:2388 | SSA phi read(x) | | UseUseExplosion.rb:20:2374:20:2384 | else ... | UseUseExplosion.rb:20:1732:20:2388 | if ... | | UseUseExplosion.rb:20:2379:20:2384 | call to use | UseUseExplosion.rb:20:2374:20:2384 | else ... | +| UseUseExplosion.rb:20:2390:20:2400 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1711:20:2404 | SSA phi read(self) | +| UseUseExplosion.rb:20:2390:20:2400 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1711:20:2404 | SSA phi read(x) | | UseUseExplosion.rb:20:2390:20:2400 | else ... | UseUseExplosion.rb:20:1711:20:2404 | if ... | | UseUseExplosion.rb:20:2395:20:2400 | call to use | UseUseExplosion.rb:20:2390:20:2400 | else ... | +| UseUseExplosion.rb:20:2406:20:2416 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1690:20:2420 | SSA phi read(self) | +| UseUseExplosion.rb:20:2406:20:2416 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1690:20:2420 | SSA phi read(x) | | UseUseExplosion.rb:20:2406:20:2416 | else ... | UseUseExplosion.rb:20:1690:20:2420 | if ... | | UseUseExplosion.rb:20:2411:20:2416 | call to use | UseUseExplosion.rb:20:2406:20:2416 | else ... | +| UseUseExplosion.rb:20:2422:20:2432 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1669:20:2436 | SSA phi read(self) | +| UseUseExplosion.rb:20:2422:20:2432 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1669:20:2436 | SSA phi read(x) | | UseUseExplosion.rb:20:2422:20:2432 | else ... | UseUseExplosion.rb:20:1669:20:2436 | if ... | | UseUseExplosion.rb:20:2427:20:2432 | call to use | UseUseExplosion.rb:20:2422:20:2432 | else ... | +| UseUseExplosion.rb:20:2438:20:2448 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1648:20:2452 | SSA phi read(self) | +| UseUseExplosion.rb:20:2438:20:2448 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1648:20:2452 | SSA phi read(x) | | UseUseExplosion.rb:20:2438:20:2448 | else ... | UseUseExplosion.rb:20:1648:20:2452 | if ... | | UseUseExplosion.rb:20:2443:20:2448 | call to use | UseUseExplosion.rb:20:2438:20:2448 | else ... | +| UseUseExplosion.rb:20:2454:20:2464 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1627:20:2468 | SSA phi read(self) | +| UseUseExplosion.rb:20:2454:20:2464 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1627:20:2468 | SSA phi read(x) | | UseUseExplosion.rb:20:2454:20:2464 | else ... | UseUseExplosion.rb:20:1627:20:2468 | if ... | | UseUseExplosion.rb:20:2459:20:2464 | call to use | UseUseExplosion.rb:20:2454:20:2464 | else ... | +| UseUseExplosion.rb:20:2470:20:2480 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1606:20:2484 | SSA phi read(self) | +| UseUseExplosion.rb:20:2470:20:2480 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1606:20:2484 | SSA phi read(x) | | UseUseExplosion.rb:20:2470:20:2480 | else ... | UseUseExplosion.rb:20:1606:20:2484 | if ... | | UseUseExplosion.rb:20:2475:20:2480 | call to use | UseUseExplosion.rb:20:2470:20:2480 | else ... | +| UseUseExplosion.rb:20:2486:20:2496 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1585:20:2500 | SSA phi read(self) | +| UseUseExplosion.rb:20:2486:20:2496 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1585:20:2500 | SSA phi read(x) | | UseUseExplosion.rb:20:2486:20:2496 | else ... | UseUseExplosion.rb:20:1585:20:2500 | if ... | | UseUseExplosion.rb:20:2491:20:2496 | call to use | UseUseExplosion.rb:20:2486:20:2496 | else ... | +| UseUseExplosion.rb:20:2502:20:2512 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1564:20:2516 | SSA phi read(self) | +| UseUseExplosion.rb:20:2502:20:2512 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1564:20:2516 | SSA phi read(x) | | UseUseExplosion.rb:20:2502:20:2512 | else ... | UseUseExplosion.rb:20:1564:20:2516 | if ... | | UseUseExplosion.rb:20:2507:20:2512 | call to use | UseUseExplosion.rb:20:2502:20:2512 | else ... | +| UseUseExplosion.rb:20:2518:20:2528 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1543:20:2532 | SSA phi read(self) | +| UseUseExplosion.rb:20:2518:20:2528 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1543:20:2532 | SSA phi read(x) | | UseUseExplosion.rb:20:2518:20:2528 | else ... | UseUseExplosion.rb:20:1543:20:2532 | if ... | | UseUseExplosion.rb:20:2523:20:2528 | call to use | UseUseExplosion.rb:20:2518:20:2528 | else ... | +| UseUseExplosion.rb:20:2534:20:2544 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1522:20:2548 | SSA phi read(self) | +| UseUseExplosion.rb:20:2534:20:2544 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1522:20:2548 | SSA phi read(x) | | UseUseExplosion.rb:20:2534:20:2544 | else ... | UseUseExplosion.rb:20:1522:20:2548 | if ... | | UseUseExplosion.rb:20:2539:20:2544 | call to use | UseUseExplosion.rb:20:2534:20:2544 | else ... | +| UseUseExplosion.rb:20:2550:20:2560 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1501:20:2564 | SSA phi read(self) | +| UseUseExplosion.rb:20:2550:20:2560 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1501:20:2564 | SSA phi read(x) | | UseUseExplosion.rb:20:2550:20:2560 | else ... | UseUseExplosion.rb:20:1501:20:2564 | if ... | | UseUseExplosion.rb:20:2555:20:2560 | call to use | UseUseExplosion.rb:20:2550:20:2560 | else ... | +| UseUseExplosion.rb:20:2566:20:2576 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1480:20:2580 | SSA phi read(self) | +| UseUseExplosion.rb:20:2566:20:2576 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1480:20:2580 | SSA phi read(x) | | UseUseExplosion.rb:20:2566:20:2576 | else ... | UseUseExplosion.rb:20:1480:20:2580 | if ... | | UseUseExplosion.rb:20:2571:20:2576 | call to use | UseUseExplosion.rb:20:2566:20:2576 | else ... | +| UseUseExplosion.rb:20:2582:20:2592 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1459:20:2596 | SSA phi read(self) | +| UseUseExplosion.rb:20:2582:20:2592 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1459:20:2596 | SSA phi read(x) | | UseUseExplosion.rb:20:2582:20:2592 | else ... | UseUseExplosion.rb:20:1459:20:2596 | if ... | | UseUseExplosion.rb:20:2587:20:2592 | call to use | UseUseExplosion.rb:20:2582:20:2592 | else ... | +| UseUseExplosion.rb:20:2598:20:2608 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1438:20:2612 | SSA phi read(self) | +| UseUseExplosion.rb:20:2598:20:2608 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1438:20:2612 | SSA phi read(x) | | UseUseExplosion.rb:20:2598:20:2608 | else ... | UseUseExplosion.rb:20:1438:20:2612 | if ... | | UseUseExplosion.rb:20:2603:20:2608 | call to use | UseUseExplosion.rb:20:2598:20:2608 | else ... | +| UseUseExplosion.rb:20:2614:20:2624 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1417:20:2628 | SSA phi read(self) | +| UseUseExplosion.rb:20:2614:20:2624 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1417:20:2628 | SSA phi read(x) | | UseUseExplosion.rb:20:2614:20:2624 | else ... | UseUseExplosion.rb:20:1417:20:2628 | if ... | | UseUseExplosion.rb:20:2619:20:2624 | call to use | UseUseExplosion.rb:20:2614:20:2624 | else ... | +| UseUseExplosion.rb:20:2630:20:2640 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1396:20:2644 | SSA phi read(self) | +| UseUseExplosion.rb:20:2630:20:2640 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1396:20:2644 | SSA phi read(x) | | UseUseExplosion.rb:20:2630:20:2640 | else ... | UseUseExplosion.rb:20:1396:20:2644 | if ... | | UseUseExplosion.rb:20:2635:20:2640 | call to use | UseUseExplosion.rb:20:2630:20:2640 | else ... | +| UseUseExplosion.rb:20:2646:20:2656 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1375:20:2660 | SSA phi read(self) | +| UseUseExplosion.rb:20:2646:20:2656 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1375:20:2660 | SSA phi read(x) | | UseUseExplosion.rb:20:2646:20:2656 | else ... | UseUseExplosion.rb:20:1375:20:2660 | if ... | | UseUseExplosion.rb:20:2651:20:2656 | call to use | UseUseExplosion.rb:20:2646:20:2656 | else ... | +| UseUseExplosion.rb:20:2662:20:2672 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1354:20:2676 | SSA phi read(self) | +| UseUseExplosion.rb:20:2662:20:2672 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1354:20:2676 | SSA phi read(x) | | UseUseExplosion.rb:20:2662:20:2672 | else ... | UseUseExplosion.rb:20:1354:20:2676 | if ... | | UseUseExplosion.rb:20:2667:20:2672 | call to use | UseUseExplosion.rb:20:2662:20:2672 | else ... | +| UseUseExplosion.rb:20:2678:20:2688 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1333:20:2692 | SSA phi read(self) | +| UseUseExplosion.rb:20:2678:20:2688 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1333:20:2692 | SSA phi read(x) | | UseUseExplosion.rb:20:2678:20:2688 | else ... | UseUseExplosion.rb:20:1333:20:2692 | if ... | | UseUseExplosion.rb:20:2683:20:2688 | call to use | UseUseExplosion.rb:20:2678:20:2688 | else ... | +| UseUseExplosion.rb:20:2694:20:2704 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1312:20:2708 | SSA phi read(self) | +| UseUseExplosion.rb:20:2694:20:2704 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1312:20:2708 | SSA phi read(x) | | UseUseExplosion.rb:20:2694:20:2704 | else ... | UseUseExplosion.rb:20:1312:20:2708 | if ... | | UseUseExplosion.rb:20:2699:20:2704 | call to use | UseUseExplosion.rb:20:2694:20:2704 | else ... | +| UseUseExplosion.rb:20:2710:20:2720 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1291:20:2724 | SSA phi read(self) | +| UseUseExplosion.rb:20:2710:20:2720 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1291:20:2724 | SSA phi read(x) | | UseUseExplosion.rb:20:2710:20:2720 | else ... | UseUseExplosion.rb:20:1291:20:2724 | if ... | | UseUseExplosion.rb:20:2715:20:2720 | call to use | UseUseExplosion.rb:20:2710:20:2720 | else ... | +| UseUseExplosion.rb:20:2726:20:2736 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1270:20:2740 | SSA phi read(self) | +| UseUseExplosion.rb:20:2726:20:2736 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1270:20:2740 | SSA phi read(x) | | UseUseExplosion.rb:20:2726:20:2736 | else ... | UseUseExplosion.rb:20:1270:20:2740 | if ... | | UseUseExplosion.rb:20:2731:20:2736 | call to use | UseUseExplosion.rb:20:2726:20:2736 | else ... | +| UseUseExplosion.rb:20:2742:20:2752 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1249:20:2756 | SSA phi read(self) | +| UseUseExplosion.rb:20:2742:20:2752 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1249:20:2756 | SSA phi read(x) | | UseUseExplosion.rb:20:2742:20:2752 | else ... | UseUseExplosion.rb:20:1249:20:2756 | if ... | | UseUseExplosion.rb:20:2747:20:2752 | call to use | UseUseExplosion.rb:20:2742:20:2752 | else ... | +| UseUseExplosion.rb:20:2758:20:2768 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1228:20:2772 | SSA phi read(self) | +| UseUseExplosion.rb:20:2758:20:2768 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1228:20:2772 | SSA phi read(x) | | UseUseExplosion.rb:20:2758:20:2768 | else ... | UseUseExplosion.rb:20:1228:20:2772 | if ... | | UseUseExplosion.rb:20:2763:20:2768 | call to use | UseUseExplosion.rb:20:2758:20:2768 | else ... | +| UseUseExplosion.rb:20:2774:20:2784 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1207:20:2788 | SSA phi read(self) | +| UseUseExplosion.rb:20:2774:20:2784 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1207:20:2788 | SSA phi read(x) | | UseUseExplosion.rb:20:2774:20:2784 | else ... | UseUseExplosion.rb:20:1207:20:2788 | if ... | | UseUseExplosion.rb:20:2779:20:2784 | call to use | UseUseExplosion.rb:20:2774:20:2784 | else ... | +| UseUseExplosion.rb:20:2790:20:2800 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1186:20:2804 | SSA phi read(self) | +| UseUseExplosion.rb:20:2790:20:2800 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1186:20:2804 | SSA phi read(x) | | UseUseExplosion.rb:20:2790:20:2800 | else ... | UseUseExplosion.rb:20:1186:20:2804 | if ... | | UseUseExplosion.rb:20:2795:20:2800 | call to use | UseUseExplosion.rb:20:2790:20:2800 | else ... | +| UseUseExplosion.rb:20:2806:20:2816 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1165:20:2820 | SSA phi read(self) | +| UseUseExplosion.rb:20:2806:20:2816 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1165:20:2820 | SSA phi read(x) | | UseUseExplosion.rb:20:2806:20:2816 | else ... | UseUseExplosion.rb:20:1165:20:2820 | if ... | | UseUseExplosion.rb:20:2811:20:2816 | call to use | UseUseExplosion.rb:20:2806:20:2816 | else ... | +| UseUseExplosion.rb:20:2822:20:2832 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1144:20:2836 | SSA phi read(self) | +| UseUseExplosion.rb:20:2822:20:2832 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1144:20:2836 | SSA phi read(x) | | UseUseExplosion.rb:20:2822:20:2832 | else ... | UseUseExplosion.rb:20:1144:20:2836 | if ... | | UseUseExplosion.rb:20:2827:20:2832 | call to use | UseUseExplosion.rb:20:2822:20:2832 | else ... | +| UseUseExplosion.rb:20:2838:20:2848 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1123:20:2852 | SSA phi read(self) | +| UseUseExplosion.rb:20:2838:20:2848 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1123:20:2852 | SSA phi read(x) | | UseUseExplosion.rb:20:2838:20:2848 | else ... | UseUseExplosion.rb:20:1123:20:2852 | if ... | | UseUseExplosion.rb:20:2843:20:2848 | call to use | UseUseExplosion.rb:20:2838:20:2848 | else ... | +| UseUseExplosion.rb:20:2854:20:2864 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1102:20:2868 | SSA phi read(self) | +| UseUseExplosion.rb:20:2854:20:2864 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1102:20:2868 | SSA phi read(x) | | UseUseExplosion.rb:20:2854:20:2864 | else ... | UseUseExplosion.rb:20:1102:20:2868 | if ... | | UseUseExplosion.rb:20:2859:20:2864 | call to use | UseUseExplosion.rb:20:2854:20:2864 | else ... | +| UseUseExplosion.rb:20:2870:20:2880 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1081:20:2884 | SSA phi read(self) | +| UseUseExplosion.rb:20:2870:20:2880 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1081:20:2884 | SSA phi read(x) | | UseUseExplosion.rb:20:2870:20:2880 | else ... | UseUseExplosion.rb:20:1081:20:2884 | if ... | | UseUseExplosion.rb:20:2875:20:2880 | call to use | UseUseExplosion.rb:20:2870:20:2880 | else ... | +| UseUseExplosion.rb:20:2886:20:2896 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1060:20:2900 | SSA phi read(self) | +| UseUseExplosion.rb:20:2886:20:2896 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1060:20:2900 | SSA phi read(x) | | UseUseExplosion.rb:20:2886:20:2896 | else ... | UseUseExplosion.rb:20:1060:20:2900 | if ... | | UseUseExplosion.rb:20:2891:20:2896 | call to use | UseUseExplosion.rb:20:2886:20:2896 | else ... | +| UseUseExplosion.rb:20:2902:20:2912 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1039:20:2916 | SSA phi read(self) | +| UseUseExplosion.rb:20:2902:20:2912 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1039:20:2916 | SSA phi read(x) | | UseUseExplosion.rb:20:2902:20:2912 | else ... | UseUseExplosion.rb:20:1039:20:2916 | if ... | | UseUseExplosion.rb:20:2907:20:2912 | call to use | UseUseExplosion.rb:20:2902:20:2912 | else ... | +| UseUseExplosion.rb:20:2918:20:2928 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1018:20:2932 | SSA phi read(self) | +| UseUseExplosion.rb:20:2918:20:2928 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1018:20:2932 | SSA phi read(x) | | UseUseExplosion.rb:20:2918:20:2928 | else ... | UseUseExplosion.rb:20:1018:20:2932 | if ... | | UseUseExplosion.rb:20:2923:20:2928 | call to use | UseUseExplosion.rb:20:2918:20:2928 | else ... | +| UseUseExplosion.rb:20:2934:20:2944 | [input] SSA phi read(self) | UseUseExplosion.rb:20:997:20:2948 | SSA phi read(self) | +| UseUseExplosion.rb:20:2934:20:2944 | [input] SSA phi read(x) | UseUseExplosion.rb:20:997:20:2948 | SSA phi read(x) | | UseUseExplosion.rb:20:2934:20:2944 | else ... | UseUseExplosion.rb:20:997:20:2948 | if ... | | UseUseExplosion.rb:20:2939:20:2944 | call to use | UseUseExplosion.rb:20:2934:20:2944 | else ... | +| UseUseExplosion.rb:20:2950:20:2960 | [input] SSA phi read(self) | UseUseExplosion.rb:20:976:20:2964 | SSA phi read(self) | +| UseUseExplosion.rb:20:2950:20:2960 | [input] SSA phi read(x) | UseUseExplosion.rb:20:976:20:2964 | SSA phi read(x) | | UseUseExplosion.rb:20:2950:20:2960 | else ... | UseUseExplosion.rb:20:976:20:2964 | if ... | | UseUseExplosion.rb:20:2955:20:2960 | call to use | UseUseExplosion.rb:20:2950:20:2960 | else ... | +| UseUseExplosion.rb:20:2966:20:2976 | [input] SSA phi read(self) | UseUseExplosion.rb:20:955:20:2980 | SSA phi read(self) | +| UseUseExplosion.rb:20:2966:20:2976 | [input] SSA phi read(x) | UseUseExplosion.rb:20:955:20:2980 | SSA phi read(x) | | UseUseExplosion.rb:20:2966:20:2976 | else ... | UseUseExplosion.rb:20:955:20:2980 | if ... | | UseUseExplosion.rb:20:2971:20:2976 | call to use | UseUseExplosion.rb:20:2966:20:2976 | else ... | +| UseUseExplosion.rb:20:2982:20:2992 | [input] SSA phi read(self) | UseUseExplosion.rb:20:934:20:2996 | SSA phi read(self) | +| UseUseExplosion.rb:20:2982:20:2992 | [input] SSA phi read(x) | UseUseExplosion.rb:20:934:20:2996 | SSA phi read(x) | | UseUseExplosion.rb:20:2982:20:2992 | else ... | UseUseExplosion.rb:20:934:20:2996 | if ... | | UseUseExplosion.rb:20:2987:20:2992 | call to use | UseUseExplosion.rb:20:2982:20:2992 | else ... | +| UseUseExplosion.rb:20:2998:20:3008 | [input] SSA phi read(self) | UseUseExplosion.rb:20:913:20:3012 | SSA phi read(self) | +| UseUseExplosion.rb:20:2998:20:3008 | [input] SSA phi read(x) | UseUseExplosion.rb:20:913:20:3012 | SSA phi read(x) | | UseUseExplosion.rb:20:2998:20:3008 | else ... | UseUseExplosion.rb:20:913:20:3012 | if ... | | UseUseExplosion.rb:20:3003:20:3008 | call to use | UseUseExplosion.rb:20:2998:20:3008 | else ... | +| UseUseExplosion.rb:20:3014:20:3024 | [input] SSA phi read(self) | UseUseExplosion.rb:20:892:20:3028 | SSA phi read(self) | +| UseUseExplosion.rb:20:3014:20:3024 | [input] SSA phi read(x) | UseUseExplosion.rb:20:892:20:3028 | SSA phi read(x) | | UseUseExplosion.rb:20:3014:20:3024 | else ... | UseUseExplosion.rb:20:892:20:3028 | if ... | | UseUseExplosion.rb:20:3019:20:3024 | call to use | UseUseExplosion.rb:20:3014:20:3024 | else ... | +| UseUseExplosion.rb:20:3030:20:3040 | [input] SSA phi read(self) | UseUseExplosion.rb:20:871:20:3044 | SSA phi read(self) | +| UseUseExplosion.rb:20:3030:20:3040 | [input] SSA phi read(x) | UseUseExplosion.rb:20:871:20:3044 | SSA phi read(x) | | UseUseExplosion.rb:20:3030:20:3040 | else ... | UseUseExplosion.rb:20:871:20:3044 | if ... | | UseUseExplosion.rb:20:3035:20:3040 | call to use | UseUseExplosion.rb:20:3030:20:3040 | else ... | +| UseUseExplosion.rb:20:3046:20:3056 | [input] SSA phi read(self) | UseUseExplosion.rb:20:850:20:3060 | SSA phi read(self) | +| UseUseExplosion.rb:20:3046:20:3056 | [input] SSA phi read(x) | UseUseExplosion.rb:20:850:20:3060 | SSA phi read(x) | | UseUseExplosion.rb:20:3046:20:3056 | else ... | UseUseExplosion.rb:20:850:20:3060 | if ... | | UseUseExplosion.rb:20:3051:20:3056 | call to use | UseUseExplosion.rb:20:3046:20:3056 | else ... | +| UseUseExplosion.rb:20:3062:20:3072 | [input] SSA phi read(self) | UseUseExplosion.rb:20:829:20:3076 | SSA phi read(self) | +| UseUseExplosion.rb:20:3062:20:3072 | [input] SSA phi read(x) | UseUseExplosion.rb:20:829:20:3076 | SSA phi read(x) | | UseUseExplosion.rb:20:3062:20:3072 | else ... | UseUseExplosion.rb:20:829:20:3076 | if ... | | UseUseExplosion.rb:20:3067:20:3072 | call to use | UseUseExplosion.rb:20:3062:20:3072 | else ... | +| UseUseExplosion.rb:20:3078:20:3088 | [input] SSA phi read(self) | UseUseExplosion.rb:20:808:20:3092 | SSA phi read(self) | +| UseUseExplosion.rb:20:3078:20:3088 | [input] SSA phi read(x) | UseUseExplosion.rb:20:808:20:3092 | SSA phi read(x) | | UseUseExplosion.rb:20:3078:20:3088 | else ... | UseUseExplosion.rb:20:808:20:3092 | if ... | | UseUseExplosion.rb:20:3083:20:3088 | call to use | UseUseExplosion.rb:20:3078:20:3088 | else ... | +| UseUseExplosion.rb:20:3094:20:3104 | [input] SSA phi read(self) | UseUseExplosion.rb:20:787:20:3108 | SSA phi read(self) | +| UseUseExplosion.rb:20:3094:20:3104 | [input] SSA phi read(x) | UseUseExplosion.rb:20:787:20:3108 | SSA phi read(x) | | UseUseExplosion.rb:20:3094:20:3104 | else ... | UseUseExplosion.rb:20:787:20:3108 | if ... | | UseUseExplosion.rb:20:3099:20:3104 | call to use | UseUseExplosion.rb:20:3094:20:3104 | else ... | +| UseUseExplosion.rb:20:3110:20:3120 | [input] SSA phi read(self) | UseUseExplosion.rb:20:766:20:3124 | SSA phi read(self) | +| UseUseExplosion.rb:20:3110:20:3120 | [input] SSA phi read(x) | UseUseExplosion.rb:20:766:20:3124 | SSA phi read(x) | | UseUseExplosion.rb:20:3110:20:3120 | else ... | UseUseExplosion.rb:20:766:20:3124 | if ... | | UseUseExplosion.rb:20:3115:20:3120 | call to use | UseUseExplosion.rb:20:3110:20:3120 | else ... | +| UseUseExplosion.rb:20:3126:20:3136 | [input] SSA phi read(self) | UseUseExplosion.rb:20:745:20:3140 | SSA phi read(self) | +| UseUseExplosion.rb:20:3126:20:3136 | [input] SSA phi read(x) | UseUseExplosion.rb:20:745:20:3140 | SSA phi read(x) | | UseUseExplosion.rb:20:3126:20:3136 | else ... | UseUseExplosion.rb:20:745:20:3140 | if ... | | UseUseExplosion.rb:20:3131:20:3136 | call to use | UseUseExplosion.rb:20:3126:20:3136 | else ... | +| UseUseExplosion.rb:20:3142:20:3152 | [input] SSA phi read(self) | UseUseExplosion.rb:20:724:20:3156 | SSA phi read(self) | +| UseUseExplosion.rb:20:3142:20:3152 | [input] SSA phi read(x) | UseUseExplosion.rb:20:724:20:3156 | SSA phi read(x) | | UseUseExplosion.rb:20:3142:20:3152 | else ... | UseUseExplosion.rb:20:724:20:3156 | if ... | | UseUseExplosion.rb:20:3147:20:3152 | call to use | UseUseExplosion.rb:20:3142:20:3152 | else ... | +| UseUseExplosion.rb:20:3158:20:3168 | [input] SSA phi read(self) | UseUseExplosion.rb:20:703:20:3172 | SSA phi read(self) | +| UseUseExplosion.rb:20:3158:20:3168 | [input] SSA phi read(x) | UseUseExplosion.rb:20:703:20:3172 | SSA phi read(x) | | UseUseExplosion.rb:20:3158:20:3168 | else ... | UseUseExplosion.rb:20:703:20:3172 | if ... | | UseUseExplosion.rb:20:3163:20:3168 | call to use | UseUseExplosion.rb:20:3158:20:3168 | else ... | +| UseUseExplosion.rb:20:3174:20:3184 | [input] SSA phi read(self) | UseUseExplosion.rb:20:682:20:3188 | SSA phi read(self) | +| UseUseExplosion.rb:20:3174:20:3184 | [input] SSA phi read(x) | UseUseExplosion.rb:20:682:20:3188 | SSA phi read(x) | | UseUseExplosion.rb:20:3174:20:3184 | else ... | UseUseExplosion.rb:20:682:20:3188 | if ... | | UseUseExplosion.rb:20:3179:20:3184 | call to use | UseUseExplosion.rb:20:3174:20:3184 | else ... | +| UseUseExplosion.rb:20:3190:20:3200 | [input] SSA phi read(self) | UseUseExplosion.rb:20:661:20:3204 | SSA phi read(self) | +| UseUseExplosion.rb:20:3190:20:3200 | [input] SSA phi read(x) | UseUseExplosion.rb:20:661:20:3204 | SSA phi read(x) | | UseUseExplosion.rb:20:3190:20:3200 | else ... | UseUseExplosion.rb:20:661:20:3204 | if ... | | UseUseExplosion.rb:20:3195:20:3200 | call to use | UseUseExplosion.rb:20:3190:20:3200 | else ... | +| UseUseExplosion.rb:20:3206:20:3216 | [input] SSA phi read(self) | UseUseExplosion.rb:20:640:20:3220 | SSA phi read(self) | +| UseUseExplosion.rb:20:3206:20:3216 | [input] SSA phi read(x) | UseUseExplosion.rb:20:640:20:3220 | SSA phi read(x) | | UseUseExplosion.rb:20:3206:20:3216 | else ... | UseUseExplosion.rb:20:640:20:3220 | if ... | | UseUseExplosion.rb:20:3211:20:3216 | call to use | UseUseExplosion.rb:20:3206:20:3216 | else ... | +| UseUseExplosion.rb:20:3222:20:3232 | [input] SSA phi read(self) | UseUseExplosion.rb:20:619:20:3236 | SSA phi read(self) | +| UseUseExplosion.rb:20:3222:20:3232 | [input] SSA phi read(x) | UseUseExplosion.rb:20:619:20:3236 | SSA phi read(x) | | UseUseExplosion.rb:20:3222:20:3232 | else ... | UseUseExplosion.rb:20:619:20:3236 | if ... | | UseUseExplosion.rb:20:3227:20:3232 | call to use | UseUseExplosion.rb:20:3222:20:3232 | else ... | +| UseUseExplosion.rb:20:3238:20:3248 | [input] SSA phi read(self) | UseUseExplosion.rb:20:598:20:3252 | SSA phi read(self) | +| UseUseExplosion.rb:20:3238:20:3248 | [input] SSA phi read(x) | UseUseExplosion.rb:20:598:20:3252 | SSA phi read(x) | | UseUseExplosion.rb:20:3238:20:3248 | else ... | UseUseExplosion.rb:20:598:20:3252 | if ... | | UseUseExplosion.rb:20:3243:20:3248 | call to use | UseUseExplosion.rb:20:3238:20:3248 | else ... | +| UseUseExplosion.rb:20:3254:20:3264 | [input] SSA phi read(self) | UseUseExplosion.rb:20:577:20:3268 | SSA phi read(self) | +| UseUseExplosion.rb:20:3254:20:3264 | [input] SSA phi read(x) | UseUseExplosion.rb:20:577:20:3268 | SSA phi read(x) | | UseUseExplosion.rb:20:3254:20:3264 | else ... | UseUseExplosion.rb:20:577:20:3268 | if ... | | UseUseExplosion.rb:20:3259:20:3264 | call to use | UseUseExplosion.rb:20:3254:20:3264 | else ... | +| UseUseExplosion.rb:20:3270:20:3280 | [input] SSA phi read(self) | UseUseExplosion.rb:20:556:20:3284 | SSA phi read(self) | +| UseUseExplosion.rb:20:3270:20:3280 | [input] SSA phi read(x) | UseUseExplosion.rb:20:556:20:3284 | SSA phi read(x) | | UseUseExplosion.rb:20:3270:20:3280 | else ... | UseUseExplosion.rb:20:556:20:3284 | if ... | | UseUseExplosion.rb:20:3275:20:3280 | call to use | UseUseExplosion.rb:20:3270:20:3280 | else ... | +| UseUseExplosion.rb:20:3286:20:3296 | [input] SSA phi read(self) | UseUseExplosion.rb:20:535:20:3300 | SSA phi read(self) | +| UseUseExplosion.rb:20:3286:20:3296 | [input] SSA phi read(x) | UseUseExplosion.rb:20:535:20:3300 | SSA phi read(x) | | UseUseExplosion.rb:20:3286:20:3296 | else ... | UseUseExplosion.rb:20:535:20:3300 | if ... | | UseUseExplosion.rb:20:3291:20:3296 | call to use | UseUseExplosion.rb:20:3286:20:3296 | else ... | +| UseUseExplosion.rb:20:3302:20:3312 | [input] SSA phi read(self) | UseUseExplosion.rb:20:514:20:3316 | SSA phi read(self) | +| UseUseExplosion.rb:20:3302:20:3312 | [input] SSA phi read(x) | UseUseExplosion.rb:20:514:20:3316 | SSA phi read(x) | | UseUseExplosion.rb:20:3302:20:3312 | else ... | UseUseExplosion.rb:20:514:20:3316 | if ... | | UseUseExplosion.rb:20:3307:20:3312 | call to use | UseUseExplosion.rb:20:3302:20:3312 | else ... | +| UseUseExplosion.rb:20:3318:20:3328 | [input] SSA phi read(self) | UseUseExplosion.rb:20:493:20:3332 | SSA phi read(self) | +| UseUseExplosion.rb:20:3318:20:3328 | [input] SSA phi read(x) | UseUseExplosion.rb:20:493:20:3332 | SSA phi read(x) | | UseUseExplosion.rb:20:3318:20:3328 | else ... | UseUseExplosion.rb:20:493:20:3332 | if ... | | UseUseExplosion.rb:20:3323:20:3328 | call to use | UseUseExplosion.rb:20:3318:20:3328 | else ... | +| UseUseExplosion.rb:20:3334:20:3344 | [input] SSA phi read(self) | UseUseExplosion.rb:20:472:20:3348 | SSA phi read(self) | +| UseUseExplosion.rb:20:3334:20:3344 | [input] SSA phi read(x) | UseUseExplosion.rb:20:472:20:3348 | SSA phi read(x) | | UseUseExplosion.rb:20:3334:20:3344 | else ... | UseUseExplosion.rb:20:472:20:3348 | if ... | | UseUseExplosion.rb:20:3339:20:3344 | call to use | UseUseExplosion.rb:20:3334:20:3344 | else ... | +| UseUseExplosion.rb:20:3350:20:3360 | [input] SSA phi read(self) | UseUseExplosion.rb:20:451:20:3364 | SSA phi read(self) | +| UseUseExplosion.rb:20:3350:20:3360 | [input] SSA phi read(x) | UseUseExplosion.rb:20:451:20:3364 | SSA phi read(x) | | UseUseExplosion.rb:20:3350:20:3360 | else ... | UseUseExplosion.rb:20:451:20:3364 | if ... | | UseUseExplosion.rb:20:3355:20:3360 | call to use | UseUseExplosion.rb:20:3350:20:3360 | else ... | +| UseUseExplosion.rb:20:3366:20:3376 | [input] SSA phi read(self) | UseUseExplosion.rb:20:430:20:3380 | SSA phi read(self) | +| UseUseExplosion.rb:20:3366:20:3376 | [input] SSA phi read(x) | UseUseExplosion.rb:20:430:20:3380 | SSA phi read(x) | | UseUseExplosion.rb:20:3366:20:3376 | else ... | UseUseExplosion.rb:20:430:20:3380 | if ... | | UseUseExplosion.rb:20:3371:20:3376 | call to use | UseUseExplosion.rb:20:3366:20:3376 | else ... | +| UseUseExplosion.rb:20:3382:20:3392 | [input] SSA phi read(self) | UseUseExplosion.rb:20:409:20:3396 | SSA phi read(self) | +| UseUseExplosion.rb:20:3382:20:3392 | [input] SSA phi read(x) | UseUseExplosion.rb:20:409:20:3396 | SSA phi read(x) | | UseUseExplosion.rb:20:3382:20:3392 | else ... | UseUseExplosion.rb:20:409:20:3396 | if ... | | UseUseExplosion.rb:20:3387:20:3392 | call to use | UseUseExplosion.rb:20:3382:20:3392 | else ... | +| UseUseExplosion.rb:20:3398:20:3408 | [input] SSA phi read(self) | UseUseExplosion.rb:20:388:20:3412 | SSA phi read(self) | +| UseUseExplosion.rb:20:3398:20:3408 | [input] SSA phi read(x) | UseUseExplosion.rb:20:388:20:3412 | SSA phi read(x) | | UseUseExplosion.rb:20:3398:20:3408 | else ... | UseUseExplosion.rb:20:388:20:3412 | if ... | | UseUseExplosion.rb:20:3403:20:3408 | call to use | UseUseExplosion.rb:20:3398:20:3408 | else ... | +| UseUseExplosion.rb:20:3414:20:3424 | [input] SSA phi read(self) | UseUseExplosion.rb:20:367:20:3428 | SSA phi read(self) | +| UseUseExplosion.rb:20:3414:20:3424 | [input] SSA phi read(x) | UseUseExplosion.rb:20:367:20:3428 | SSA phi read(x) | | UseUseExplosion.rb:20:3414:20:3424 | else ... | UseUseExplosion.rb:20:367:20:3428 | if ... | | UseUseExplosion.rb:20:3419:20:3424 | call to use | UseUseExplosion.rb:20:3414:20:3424 | else ... | +| UseUseExplosion.rb:20:3430:20:3440 | [input] SSA phi read(self) | UseUseExplosion.rb:20:346:20:3444 | SSA phi read(self) | +| UseUseExplosion.rb:20:3430:20:3440 | [input] SSA phi read(x) | UseUseExplosion.rb:20:346:20:3444 | SSA phi read(x) | | UseUseExplosion.rb:20:3430:20:3440 | else ... | UseUseExplosion.rb:20:346:20:3444 | if ... | | UseUseExplosion.rb:20:3435:20:3440 | call to use | UseUseExplosion.rb:20:3430:20:3440 | else ... | +| UseUseExplosion.rb:20:3446:20:3456 | [input] SSA phi read(self) | UseUseExplosion.rb:20:325:20:3460 | SSA phi read(self) | +| UseUseExplosion.rb:20:3446:20:3456 | [input] SSA phi read(x) | UseUseExplosion.rb:20:325:20:3460 | SSA phi read(x) | | UseUseExplosion.rb:20:3446:20:3456 | else ... | UseUseExplosion.rb:20:325:20:3460 | if ... | | UseUseExplosion.rb:20:3451:20:3456 | call to use | UseUseExplosion.rb:20:3446:20:3456 | else ... | +| UseUseExplosion.rb:20:3462:20:3472 | [input] SSA phi read(self) | UseUseExplosion.rb:20:304:20:3476 | SSA phi read(self) | +| UseUseExplosion.rb:20:3462:20:3472 | [input] SSA phi read(x) | UseUseExplosion.rb:20:304:20:3476 | SSA phi read(x) | | UseUseExplosion.rb:20:3462:20:3472 | else ... | UseUseExplosion.rb:20:304:20:3476 | if ... | | UseUseExplosion.rb:20:3467:20:3472 | call to use | UseUseExplosion.rb:20:3462:20:3472 | else ... | +| UseUseExplosion.rb:20:3478:20:3488 | [input] SSA phi read(self) | UseUseExplosion.rb:20:283:20:3492 | SSA phi read(self) | +| UseUseExplosion.rb:20:3478:20:3488 | [input] SSA phi read(x) | UseUseExplosion.rb:20:283:20:3492 | SSA phi read(x) | | UseUseExplosion.rb:20:3478:20:3488 | else ... | UseUseExplosion.rb:20:283:20:3492 | if ... | | UseUseExplosion.rb:20:3483:20:3488 | call to use | UseUseExplosion.rb:20:3478:20:3488 | else ... | +| UseUseExplosion.rb:20:3494:20:3504 | [input] SSA phi read(self) | UseUseExplosion.rb:20:262:20:3508 | SSA phi read(self) | +| UseUseExplosion.rb:20:3494:20:3504 | [input] SSA phi read(x) | UseUseExplosion.rb:20:262:20:3508 | SSA phi read(x) | | UseUseExplosion.rb:20:3494:20:3504 | else ... | UseUseExplosion.rb:20:262:20:3508 | if ... | | UseUseExplosion.rb:20:3499:20:3504 | call to use | UseUseExplosion.rb:20:3494:20:3504 | else ... | +| UseUseExplosion.rb:20:3510:20:3520 | [input] SSA phi read(self) | UseUseExplosion.rb:20:241:20:3524 | SSA phi read(self) | +| UseUseExplosion.rb:20:3510:20:3520 | [input] SSA phi read(x) | UseUseExplosion.rb:20:241:20:3524 | SSA phi read(x) | | UseUseExplosion.rb:20:3510:20:3520 | else ... | UseUseExplosion.rb:20:241:20:3524 | if ... | | UseUseExplosion.rb:20:3515:20:3520 | call to use | UseUseExplosion.rb:20:3510:20:3520 | else ... | +| UseUseExplosion.rb:20:3526:20:3536 | [input] SSA phi read(self) | UseUseExplosion.rb:20:220:20:3540 | SSA phi read(self) | +| UseUseExplosion.rb:20:3526:20:3536 | [input] SSA phi read(x) | UseUseExplosion.rb:20:220:20:3540 | SSA phi read(x) | | UseUseExplosion.rb:20:3526:20:3536 | else ... | UseUseExplosion.rb:20:220:20:3540 | if ... | | UseUseExplosion.rb:20:3531:20:3536 | call to use | UseUseExplosion.rb:20:3526:20:3536 | else ... | +| UseUseExplosion.rb:20:3542:20:3552 | [input] SSA phi read(self) | UseUseExplosion.rb:20:199:20:3556 | SSA phi read(self) | +| UseUseExplosion.rb:20:3542:20:3552 | [input] SSA phi read(x) | UseUseExplosion.rb:20:199:20:3556 | SSA phi read(x) | | UseUseExplosion.rb:20:3542:20:3552 | else ... | UseUseExplosion.rb:20:199:20:3556 | if ... | | UseUseExplosion.rb:20:3547:20:3552 | call to use | UseUseExplosion.rb:20:3542:20:3552 | else ... | +| UseUseExplosion.rb:20:3558:20:3568 | [input] SSA phi read(self) | UseUseExplosion.rb:20:178:20:3572 | SSA phi read(self) | +| UseUseExplosion.rb:20:3558:20:3568 | [input] SSA phi read(x) | UseUseExplosion.rb:20:178:20:3572 | SSA phi read(x) | | UseUseExplosion.rb:20:3558:20:3568 | else ... | UseUseExplosion.rb:20:178:20:3572 | if ... | | UseUseExplosion.rb:20:3563:20:3568 | call to use | UseUseExplosion.rb:20:3558:20:3568 | else ... | +| UseUseExplosion.rb:20:3574:20:3584 | [input] SSA phi read(self) | UseUseExplosion.rb:20:157:20:3588 | SSA phi read(self) | +| UseUseExplosion.rb:20:3574:20:3584 | [input] SSA phi read(x) | UseUseExplosion.rb:20:157:20:3588 | SSA phi read(x) | | UseUseExplosion.rb:20:3574:20:3584 | else ... | UseUseExplosion.rb:20:157:20:3588 | if ... | | UseUseExplosion.rb:20:3579:20:3584 | call to use | UseUseExplosion.rb:20:3574:20:3584 | else ... | +| UseUseExplosion.rb:20:3590:20:3600 | [input] SSA phi read(self) | UseUseExplosion.rb:20:136:20:3604 | SSA phi read(self) | +| UseUseExplosion.rb:20:3590:20:3600 | [input] SSA phi read(x) | UseUseExplosion.rb:20:136:20:3604 | SSA phi read(x) | | UseUseExplosion.rb:20:3590:20:3600 | else ... | UseUseExplosion.rb:20:136:20:3604 | if ... | | UseUseExplosion.rb:20:3595:20:3600 | call to use | UseUseExplosion.rb:20:3590:20:3600 | else ... | +| UseUseExplosion.rb:20:3606:20:3616 | [input] SSA phi read(self) | UseUseExplosion.rb:20:115:20:3620 | SSA phi read(self) | +| UseUseExplosion.rb:20:3606:20:3616 | [input] SSA phi read(x) | UseUseExplosion.rb:20:115:20:3620 | SSA phi read(x) | | UseUseExplosion.rb:20:3606:20:3616 | else ... | UseUseExplosion.rb:20:115:20:3620 | if ... | | UseUseExplosion.rb:20:3611:20:3616 | call to use | UseUseExplosion.rb:20:3606:20:3616 | else ... | +| UseUseExplosion.rb:20:3622:20:3632 | [input] SSA phi read(self) | UseUseExplosion.rb:20:94:20:3636 | SSA phi read(self) | +| UseUseExplosion.rb:20:3622:20:3632 | [input] SSA phi read(x) | UseUseExplosion.rb:20:94:20:3636 | SSA phi read(x) | | UseUseExplosion.rb:20:3622:20:3632 | else ... | UseUseExplosion.rb:20:94:20:3636 | if ... | | UseUseExplosion.rb:20:3627:20:3632 | call to use | UseUseExplosion.rb:20:3622:20:3632 | else ... | +| UseUseExplosion.rb:20:3638:20:3648 | [input] SSA phi read(self) | UseUseExplosion.rb:20:73:20:3652 | SSA phi read(self) | +| UseUseExplosion.rb:20:3638:20:3648 | [input] SSA phi read(x) | UseUseExplosion.rb:20:73:20:3652 | SSA phi read(x) | | UseUseExplosion.rb:20:3638:20:3648 | else ... | UseUseExplosion.rb:20:73:20:3652 | if ... | | UseUseExplosion.rb:20:3643:20:3648 | call to use | UseUseExplosion.rb:20:3638:20:3648 | else ... | +| UseUseExplosion.rb:20:3654:20:3664 | [input] SSA phi read(self) | UseUseExplosion.rb:20:52:20:3668 | SSA phi read(self) | +| UseUseExplosion.rb:20:3654:20:3664 | [input] SSA phi read(x) | UseUseExplosion.rb:20:52:20:3668 | SSA phi read(x) | | UseUseExplosion.rb:20:3654:20:3664 | else ... | UseUseExplosion.rb:20:52:20:3668 | if ... | | UseUseExplosion.rb:20:3659:20:3664 | call to use | UseUseExplosion.rb:20:3654:20:3664 | else ... | +| UseUseExplosion.rb:20:3670:20:3680 | [input] SSA phi read(self) | UseUseExplosion.rb:20:31:20:3684 | SSA phi read(self) | +| UseUseExplosion.rb:20:3670:20:3680 | [input] SSA phi read(x) | UseUseExplosion.rb:20:31:20:3684 | SSA phi read(x) | | UseUseExplosion.rb:20:3670:20:3680 | else ... | UseUseExplosion.rb:20:31:20:3684 | if ... | | UseUseExplosion.rb:20:3675:20:3680 | call to use | UseUseExplosion.rb:20:3670:20:3680 | else ... | +| UseUseExplosion.rb:20:3686:20:3696 | [input] SSA phi read(self) | UseUseExplosion.rb:20:9:20:3700 | SSA phi read(self) | +| UseUseExplosion.rb:20:3686:20:3696 | [input] SSA phi read(x) | UseUseExplosion.rb:20:9:20:3700 | SSA phi read(x) | | UseUseExplosion.rb:20:3686:20:3696 | else ... | UseUseExplosion.rb:20:9:20:3700 | if ... | | UseUseExplosion.rb:20:3691:20:3696 | call to use | UseUseExplosion.rb:20:3686:20:3696 | else ... | | UseUseExplosion.rb:21:13:21:17 | @prop | UseUseExplosion.rb:21:13:21:23 | ... > ... | @@ -2889,12 +3289,14 @@ | local_dataflow.rb:10:5:13:3 | call to each | local_dataflow.rb:10:5:13:3 | ... | | local_dataflow.rb:10:5:13:3 | synthetic splat parameter | local_dataflow.rb:10:5:13:3 | __synth__0__1 | | local_dataflow.rb:10:9:10:9 | ... = ... | local_dataflow.rb:10:9:10:9 | if ... | +| local_dataflow.rb:10:9:10:9 | [input] phi | local_dataflow.rb:10:9:10:9 | phi | +| local_dataflow.rb:10:9:10:9 | [input] phi | local_dataflow.rb:10:9:10:9 | phi | | local_dataflow.rb:10:9:10:9 | defined? ... | local_dataflow.rb:10:9:10:9 | [false] ! ... | | local_dataflow.rb:10:9:10:9 | defined? ... | local_dataflow.rb:10:9:10:9 | [true] ! ... | | local_dataflow.rb:10:9:10:9 | nil | local_dataflow.rb:10:9:10:9 | ... = ... | | local_dataflow.rb:10:9:10:9 | nil | local_dataflow.rb:10:9:10:9 | x | +| local_dataflow.rb:10:9:10:9 | x | local_dataflow.rb:10:9:10:9 | [input] phi | | local_dataflow.rb:10:9:10:9 | x | local_dataflow.rb:10:9:10:9 | defined? ... | -| local_dataflow.rb:10:9:10:9 | x | local_dataflow.rb:10:9:10:9 | phi | | local_dataflow.rb:10:9:10:9 | x | local_dataflow.rb:12:5:12:5 | x | | local_dataflow.rb:10:14:10:18 | [post] array | local_dataflow.rb:15:10:15:14 | array | | local_dataflow.rb:10:14:10:18 | array | local_dataflow.rb:15:10:15:14 | array | @@ -2908,12 +3310,14 @@ | local_dataflow.rb:15:1:17:3 | call to each | local_dataflow.rb:15:1:17:3 | ... | | local_dataflow.rb:15:1:17:3 | synthetic splat parameter | local_dataflow.rb:15:1:17:3 | __synth__0__1 | | local_dataflow.rb:15:5:15:5 | ... = ... | local_dataflow.rb:15:5:15:5 | if ... | +| local_dataflow.rb:15:5:15:5 | [input] phi | local_dataflow.rb:15:5:15:5 | phi | +| local_dataflow.rb:15:5:15:5 | [input] phi | local_dataflow.rb:15:5:15:5 | phi | | local_dataflow.rb:15:5:15:5 | defined? ... | local_dataflow.rb:15:5:15:5 | [false] ! ... | | local_dataflow.rb:15:5:15:5 | defined? ... | local_dataflow.rb:15:5:15:5 | [true] ! ... | | local_dataflow.rb:15:5:15:5 | nil | local_dataflow.rb:15:5:15:5 | ... = ... | | local_dataflow.rb:15:5:15:5 | nil | local_dataflow.rb:15:5:15:5 | x | +| local_dataflow.rb:15:5:15:5 | x | local_dataflow.rb:15:5:15:5 | [input] phi | | local_dataflow.rb:15:5:15:5 | x | local_dataflow.rb:15:5:15:5 | defined? ... | -| local_dataflow.rb:15:5:15:5 | x | local_dataflow.rb:15:5:15:5 | phi | | local_dataflow.rb:15:10:15:14 | [post] array | local_dataflow.rb:19:10:19:14 | array | | local_dataflow.rb:15:10:15:14 | array | local_dataflow.rb:19:10:19:14 | array | | local_dataflow.rb:16:9:16:10 | 10 | local_dataflow.rb:16:3:16:10 | break | @@ -2924,12 +3328,14 @@ | local_dataflow.rb:19:1:21:3 | call to each | local_dataflow.rb:19:1:21:3 | ... | | local_dataflow.rb:19:1:21:3 | synthetic splat parameter | local_dataflow.rb:19:1:21:3 | __synth__0__1 | | local_dataflow.rb:19:5:19:5 | ... = ... | local_dataflow.rb:19:5:19:5 | if ... | +| local_dataflow.rb:19:5:19:5 | [input] phi | local_dataflow.rb:19:5:19:5 | phi | +| local_dataflow.rb:19:5:19:5 | [input] phi | local_dataflow.rb:19:5:19:5 | phi | | local_dataflow.rb:19:5:19:5 | defined? ... | local_dataflow.rb:19:5:19:5 | [false] ! ... | | local_dataflow.rb:19:5:19:5 | defined? ... | local_dataflow.rb:19:5:19:5 | [true] ! ... | | local_dataflow.rb:19:5:19:5 | nil | local_dataflow.rb:19:5:19:5 | ... = ... | | local_dataflow.rb:19:5:19:5 | nil | local_dataflow.rb:19:5:19:5 | x | +| local_dataflow.rb:19:5:19:5 | x | local_dataflow.rb:19:5:19:5 | [input] phi | | local_dataflow.rb:19:5:19:5 | x | local_dataflow.rb:19:5:19:5 | defined? ... | -| local_dataflow.rb:19:5:19:5 | x | local_dataflow.rb:19:5:19:5 | phi | | local_dataflow.rb:19:5:19:5 | x | local_dataflow.rb:20:6:20:6 | x | | local_dataflow.rb:20:6:20:6 | x | local_dataflow.rb:20:6:20:10 | ... > ... | | local_dataflow.rb:20:10:20:10 | 1 | local_dataflow.rb:20:6:20:10 | ... > ... | @@ -2978,12 +3384,16 @@ | local_dataflow.rb:61:12:61:12 | x | local_dataflow.rb:63:15:63:15 | x | | local_dataflow.rb:61:12:61:12 | x | local_dataflow.rb:65:6:65:6 | x | | local_dataflow.rb:61:12:61:12 | x | local_dataflow.rb:67:5:67:5 | x | +| local_dataflow.rb:62:10:62:15 | [input] SSA phi read(x) | local_dataflow.rb:61:7:68:5 | SSA phi read(x) | | local_dataflow.rb:62:10:62:15 | then ... | local_dataflow.rb:61:7:68:5 | case ... | | local_dataflow.rb:62:15:62:15 | 3 | local_dataflow.rb:62:10:62:15 | then ... | +| local_dataflow.rb:63:10:63:15 | [input] SSA phi read(x) | local_dataflow.rb:61:7:68:5 | SSA phi read(x) | | local_dataflow.rb:63:10:63:15 | then ... | local_dataflow.rb:61:7:68:5 | case ... | | local_dataflow.rb:63:15:63:15 | x | local_dataflow.rb:63:10:63:15 | then ... | +| local_dataflow.rb:64:9:65:6 | [input] SSA phi read(x) | local_dataflow.rb:61:7:68:5 | SSA phi read(x) | | local_dataflow.rb:64:9:65:6 | then ... | local_dataflow.rb:61:7:68:5 | case ... | | local_dataflow.rb:65:6:65:6 | x | local_dataflow.rb:64:9:65:6 | then ... | +| local_dataflow.rb:66:3:67:5 | [input] SSA phi read(x) | local_dataflow.rb:61:7:68:5 | SSA phi read(x) | | local_dataflow.rb:66:3:67:5 | else ... | local_dataflow.rb:61:7:68:5 | case ... | | local_dataflow.rb:67:5:67:5 | x | local_dataflow.rb:66:3:67:5 | else ... | | local_dataflow.rb:69:7:76:5 | case ... | local_dataflow.rb:69:3:76:5 | ... = ... | @@ -3023,6 +3433,7 @@ | local_dataflow.rb:78:12:78:20 | self | local_dataflow.rb:86:28:86:34 | self | | local_dataflow.rb:78:12:78:20 | self | local_dataflow.rb:87:20:87:26 | self | | local_dataflow.rb:79:13:79:13 | b | local_dataflow.rb:79:25:79:25 | b | +| local_dataflow.rb:79:15:79:45 | [input] SSA phi read(self) | local_dataflow.rb:78:7:88:5 | SSA phi read(self) | | local_dataflow.rb:79:15:79:45 | then ... | local_dataflow.rb:78:7:88:5 | case ... | | local_dataflow.rb:79:20:79:26 | call to sink | local_dataflow.rb:79:15:79:45 | then ... | | local_dataflow.rb:80:8:80:8 | a | local_dataflow.rb:80:13:80:13 | a | @@ -3030,11 +3441,13 @@ | local_dataflow.rb:80:13:80:13 | a | local_dataflow.rb:80:13:80:17 | ... > ... | | local_dataflow.rb:80:13:80:13 | a | local_dataflow.rb:80:29:80:29 | a | | local_dataflow.rb:80:17:80:17 | 0 | local_dataflow.rb:80:13:80:17 | ... > ... | +| local_dataflow.rb:80:19:80:49 | [input] SSA phi read(self) | local_dataflow.rb:78:7:88:5 | SSA phi read(self) | | local_dataflow.rb:80:19:80:49 | then ... | local_dataflow.rb:78:7:88:5 | case ... | | local_dataflow.rb:80:24:80:30 | call to sink | local_dataflow.rb:80:19:80:49 | then ... | | local_dataflow.rb:81:9:81:9 | c | local_dataflow.rb:82:12:82:12 | c | | local_dataflow.rb:81:13:81:13 | d | local_dataflow.rb:83:12:83:12 | d | | local_dataflow.rb:81:16:81:16 | e | local_dataflow.rb:84:12:84:12 | e | +| local_dataflow.rb:81:20:84:33 | [input] SSA phi read(self) | local_dataflow.rb:78:7:88:5 | SSA phi read(self) | | local_dataflow.rb:81:20:84:33 | then ... | local_dataflow.rb:78:7:88:5 | case ... | | local_dataflow.rb:81:25:84:14 | Array | local_dataflow.rb:81:25:84:14 | call to [] | | local_dataflow.rb:81:25:84:14 | call to [] | local_dataflow.rb:81:20:84:33 | then ... | @@ -3044,12 +3457,15 @@ | local_dataflow.rb:83:7:83:13 | [post] self | local_dataflow.rb:84:7:84:13 | self | | local_dataflow.rb:83:7:83:13 | self | local_dataflow.rb:84:7:84:13 | self | | local_dataflow.rb:85:13:85:13 | f | local_dataflow.rb:85:27:85:27 | f | +| local_dataflow.rb:85:17:85:47 | [input] SSA phi read(self) | local_dataflow.rb:78:7:88:5 | SSA phi read(self) | | local_dataflow.rb:85:17:85:47 | then ... | local_dataflow.rb:78:7:88:5 | case ... | | local_dataflow.rb:85:22:85:28 | call to sink | local_dataflow.rb:85:17:85:47 | then ... | | local_dataflow.rb:86:18:86:18 | g | local_dataflow.rb:86:33:86:33 | g | +| local_dataflow.rb:86:23:86:53 | [input] SSA phi read(self) | local_dataflow.rb:78:7:88:5 | SSA phi read(self) | | local_dataflow.rb:86:23:86:53 | then ... | local_dataflow.rb:78:7:88:5 | case ... | | local_dataflow.rb:86:28:86:34 | call to sink | local_dataflow.rb:86:23:86:53 | then ... | | local_dataflow.rb:87:10:87:10 | x | local_dataflow.rb:87:25:87:25 | x | +| local_dataflow.rb:87:15:87:48 | [input] SSA phi read(self) | local_dataflow.rb:78:7:88:5 | SSA phi read(self) | | local_dataflow.rb:87:15:87:48 | then ... | local_dataflow.rb:78:7:88:5 | case ... | | local_dataflow.rb:87:25:87:25 | [post] x | local_dataflow.rb:87:29:87:29 | x | | local_dataflow.rb:87:25:87:25 | x | local_dataflow.rb:87:29:87:29 | x | @@ -3057,42 +3473,50 @@ | local_dataflow.rb:92:1:109:3 | self (and_or) | local_dataflow.rb:93:7:93:15 | self | | local_dataflow.rb:92:1:109:3 | self in and_or | local_dataflow.rb:92:1:109:3 | self (and_or) | | local_dataflow.rb:93:3:93:3 | a | local_dataflow.rb:94:8:94:8 | a | +| local_dataflow.rb:93:7:93:15 | [input] SSA phi read(self) | local_dataflow.rb:93:7:93:28 | SSA phi read(self) | | local_dataflow.rb:93:7:93:15 | [post] self | local_dataflow.rb:93:20:93:28 | self | | local_dataflow.rb:93:7:93:15 | call to source | local_dataflow.rb:93:7:93:28 | ... \|\| ... | | local_dataflow.rb:93:7:93:15 | self | local_dataflow.rb:93:20:93:28 | self | | local_dataflow.rb:93:7:93:28 | ... \|\| ... | local_dataflow.rb:93:3:93:3 | a | | local_dataflow.rb:93:7:93:28 | ... \|\| ... | local_dataflow.rb:93:3:93:28 | ... = ... | | local_dataflow.rb:93:7:93:28 | SSA phi read(self) | local_dataflow.rb:94:3:94:9 | self | +| local_dataflow.rb:93:20:93:28 | [input] SSA phi read(self) | local_dataflow.rb:93:7:93:28 | SSA phi read(self) | | local_dataflow.rb:93:20:93:28 | call to source | local_dataflow.rb:93:7:93:28 | ... \|\| ... | | local_dataflow.rb:94:3:94:9 | [post] self | local_dataflow.rb:95:8:95:16 | self | | local_dataflow.rb:94:3:94:9 | self | local_dataflow.rb:95:8:95:16 | self | | local_dataflow.rb:95:3:95:3 | b | local_dataflow.rb:96:8:96:8 | b | | local_dataflow.rb:95:7:95:30 | ( ... ) | local_dataflow.rb:95:3:95:3 | b | | local_dataflow.rb:95:7:95:30 | ( ... ) | local_dataflow.rb:95:3:95:30 | ... = ... | +| local_dataflow.rb:95:8:95:16 | [input] SSA phi read(self) | local_dataflow.rb:95:8:95:29 | SSA phi read(self) | | local_dataflow.rb:95:8:95:16 | [post] self | local_dataflow.rb:95:21:95:29 | self | | local_dataflow.rb:95:8:95:16 | call to source | local_dataflow.rb:95:8:95:29 | ... or ... | | local_dataflow.rb:95:8:95:16 | self | local_dataflow.rb:95:21:95:29 | self | | local_dataflow.rb:95:8:95:29 | ... or ... | local_dataflow.rb:95:7:95:30 | ( ... ) | | local_dataflow.rb:95:8:95:29 | SSA phi read(self) | local_dataflow.rb:96:3:96:9 | self | +| local_dataflow.rb:95:21:95:29 | [input] SSA phi read(self) | local_dataflow.rb:95:8:95:29 | SSA phi read(self) | | local_dataflow.rb:95:21:95:29 | call to source | local_dataflow.rb:95:8:95:29 | ... or ... | | local_dataflow.rb:96:3:96:9 | [post] self | local_dataflow.rb:98:7:98:15 | self | | local_dataflow.rb:96:3:96:9 | self | local_dataflow.rb:98:7:98:15 | self | | local_dataflow.rb:98:3:98:3 | a | local_dataflow.rb:99:8:99:8 | a | +| local_dataflow.rb:98:7:98:15 | [input] SSA phi read(self) | local_dataflow.rb:98:7:98:28 | SSA phi read(self) | | local_dataflow.rb:98:7:98:15 | [post] self | local_dataflow.rb:98:20:98:28 | self | | local_dataflow.rb:98:7:98:15 | self | local_dataflow.rb:98:20:98:28 | self | | local_dataflow.rb:98:7:98:28 | ... && ... | local_dataflow.rb:98:3:98:3 | a | | local_dataflow.rb:98:7:98:28 | ... && ... | local_dataflow.rb:98:3:98:28 | ... = ... | | local_dataflow.rb:98:7:98:28 | SSA phi read(self) | local_dataflow.rb:99:3:99:9 | self | +| local_dataflow.rb:98:20:98:28 | [input] SSA phi read(self) | local_dataflow.rb:98:7:98:28 | SSA phi read(self) | | local_dataflow.rb:98:20:98:28 | call to source | local_dataflow.rb:98:7:98:28 | ... && ... | | local_dataflow.rb:99:3:99:9 | [post] self | local_dataflow.rb:100:8:100:16 | self | | local_dataflow.rb:99:3:99:9 | self | local_dataflow.rb:100:8:100:16 | self | | local_dataflow.rb:100:3:100:3 | b | local_dataflow.rb:101:8:101:8 | b | | local_dataflow.rb:100:7:100:31 | ( ... ) | local_dataflow.rb:100:3:100:3 | b | | local_dataflow.rb:100:7:100:31 | ( ... ) | local_dataflow.rb:100:3:100:31 | ... = ... | +| local_dataflow.rb:100:8:100:16 | [input] SSA phi read(self) | local_dataflow.rb:100:8:100:30 | SSA phi read(self) | | local_dataflow.rb:100:8:100:16 | [post] self | local_dataflow.rb:100:22:100:30 | self | | local_dataflow.rb:100:8:100:16 | self | local_dataflow.rb:100:22:100:30 | self | | local_dataflow.rb:100:8:100:30 | ... and ... | local_dataflow.rb:100:7:100:31 | ( ... ) | | local_dataflow.rb:100:8:100:30 | SSA phi read(self) | local_dataflow.rb:101:3:101:9 | self | +| local_dataflow.rb:100:22:100:30 | [input] SSA phi read(self) | local_dataflow.rb:100:8:100:30 | SSA phi read(self) | | local_dataflow.rb:100:22:100:30 | call to source | local_dataflow.rb:100:8:100:30 | ... and ... | | local_dataflow.rb:101:3:101:9 | [post] self | local_dataflow.rb:103:7:103:15 | self | | local_dataflow.rb:101:3:101:9 | self | local_dataflow.rb:103:7:103:15 | self | @@ -3101,11 +3525,13 @@ | local_dataflow.rb:103:7:103:15 | call to source | local_dataflow.rb:103:3:103:3 | a | | local_dataflow.rb:103:7:103:15 | call to source | local_dataflow.rb:103:3:103:15 | ... = ... | | local_dataflow.rb:103:7:103:15 | self | local_dataflow.rb:104:9:104:17 | self | +| local_dataflow.rb:104:3:104:3 | [input] SSA phi read(self) | local_dataflow.rb:104:5:104:7 | SSA phi read(self) | | local_dataflow.rb:104:3:104:3 | a | local_dataflow.rb:104:5:104:7 | ... \|\| ... | | local_dataflow.rb:104:3:104:3 | a | local_dataflow.rb:105:8:105:8 | a | | local_dataflow.rb:104:5:104:7 | ... \|\| ... | local_dataflow.rb:104:3:104:3 | a | | local_dataflow.rb:104:5:104:7 | ... \|\| ... | local_dataflow.rb:104:3:104:17 | ... = ... | | local_dataflow.rb:104:5:104:7 | SSA phi read(self) | local_dataflow.rb:105:3:105:9 | self | +| local_dataflow.rb:104:9:104:17 | [input] SSA phi read(self) | local_dataflow.rb:104:5:104:7 | SSA phi read(self) | | local_dataflow.rb:104:9:104:17 | call to source | local_dataflow.rb:104:5:104:7 | ... \|\| ... | | local_dataflow.rb:105:3:105:9 | [post] self | local_dataflow.rb:106:7:106:15 | self | | local_dataflow.rb:105:3:105:9 | self | local_dataflow.rb:106:7:106:15 | self | @@ -3114,10 +3540,12 @@ | local_dataflow.rb:106:7:106:15 | call to source | local_dataflow.rb:106:3:106:3 | b | | local_dataflow.rb:106:7:106:15 | call to source | local_dataflow.rb:106:3:106:15 | ... = ... | | local_dataflow.rb:106:7:106:15 | self | local_dataflow.rb:107:9:107:17 | self | +| local_dataflow.rb:107:3:107:3 | [input] SSA phi read(self) | local_dataflow.rb:107:5:107:7 | SSA phi read(self) | | local_dataflow.rb:107:3:107:3 | b | local_dataflow.rb:108:8:108:8 | b | | local_dataflow.rb:107:5:107:7 | ... && ... | local_dataflow.rb:107:3:107:3 | b | | local_dataflow.rb:107:5:107:7 | ... && ... | local_dataflow.rb:107:3:107:17 | ... = ... | | local_dataflow.rb:107:5:107:7 | SSA phi read(self) | local_dataflow.rb:108:3:108:9 | self | +| local_dataflow.rb:107:9:107:17 | [input] SSA phi read(self) | local_dataflow.rb:107:5:107:7 | SSA phi read(self) | | local_dataflow.rb:107:9:107:17 | call to source | local_dataflow.rb:107:5:107:7 | ... && ... | | local_dataflow.rb:111:1:114:3 | self (object_dup) | local_dataflow.rb:112:3:112:21 | self | | local_dataflow.rb:111:1:114:3 | self in object_dup | local_dataflow.rb:111:1:114:3 | self (object_dup) | @@ -3172,6 +3600,8 @@ | local_dataflow.rb:132:12:148:10 | then ... | local_dataflow.rb:132:3:149:5 | if ... | | local_dataflow.rb:133:5:139:7 | SSA phi read(self) | local_dataflow.rb:141:9:141:14 | self | | local_dataflow.rb:133:5:139:7 | SSA phi read(x) | local_dataflow.rb:141:13:141:13 | x | +| local_dataflow.rb:133:8:133:13 | [input] SSA phi read(self) | local_dataflow.rb:133:8:133:23 | SSA phi read(self) | +| local_dataflow.rb:133:8:133:13 | [input] SSA phi read(x) | local_dataflow.rb:133:8:133:23 | SSA phi read(x) | | local_dataflow.rb:133:8:133:13 | [post] self | local_dataflow.rb:133:18:133:23 | self | | local_dataflow.rb:133:8:133:13 | call to use | local_dataflow.rb:133:8:133:23 | [false] ... \|\| ... | | local_dataflow.rb:133:8:133:13 | call to use | local_dataflow.rb:133:8:133:23 | [true] ... \|\| ... | @@ -3180,29 +3610,43 @@ | local_dataflow.rb:133:8:133:23 | SSA phi read(x) | local_dataflow.rb:134:11:134:11 | x | | local_dataflow.rb:133:12:133:12 | [post] x | local_dataflow.rb:133:22:133:22 | x | | local_dataflow.rb:133:12:133:12 | x | local_dataflow.rb:133:22:133:22 | x | +| local_dataflow.rb:133:18:133:23 | [input] SSA phi read(self) | local_dataflow.rb:133:8:133:23 | SSA phi read(self) | +| local_dataflow.rb:133:18:133:23 | [input] SSA phi read(x) | local_dataflow.rb:133:8:133:23 | SSA phi read(x) | | local_dataflow.rb:133:18:133:23 | [post] self | local_dataflow.rb:136:7:136:12 | self | | local_dataflow.rb:133:18:133:23 | call to use | local_dataflow.rb:133:8:133:23 | [false] ... \|\| ... | | local_dataflow.rb:133:18:133:23 | call to use | local_dataflow.rb:133:8:133:23 | [true] ... \|\| ... | | local_dataflow.rb:133:18:133:23 | self | local_dataflow.rb:136:7:136:12 | self | | local_dataflow.rb:133:22:133:22 | [post] x | local_dataflow.rb:136:11:136:11 | x | | local_dataflow.rb:133:22:133:22 | x | local_dataflow.rb:136:11:136:11 | x | +| local_dataflow.rb:133:24:134:12 | [input] SSA phi read(self) | local_dataflow.rb:133:5:139:7 | SSA phi read(self) | +| local_dataflow.rb:133:24:134:12 | [input] SSA phi read(x) | local_dataflow.rb:133:5:139:7 | SSA phi read(x) | | local_dataflow.rb:133:24:134:12 | then ... | local_dataflow.rb:133:5:139:7 | if ... | | local_dataflow.rb:134:7:134:12 | call to use | local_dataflow.rb:133:24:134:12 | then ... | +| local_dataflow.rb:135:5:138:9 | [input] SSA phi read(self) | local_dataflow.rb:133:5:139:7 | SSA phi read(self) | +| local_dataflow.rb:135:5:138:9 | [input] SSA phi read(x) | local_dataflow.rb:133:5:139:7 | SSA phi read(x) | | local_dataflow.rb:135:5:138:9 | else ... | local_dataflow.rb:133:5:139:7 | if ... | | local_dataflow.rb:136:7:136:12 | [post] self | local_dataflow.rb:137:10:137:15 | self | | local_dataflow.rb:136:7:136:12 | self | local_dataflow.rb:137:10:137:15 | self | | local_dataflow.rb:136:11:136:11 | [post] x | local_dataflow.rb:137:14:137:14 | x | | local_dataflow.rb:136:11:136:11 | x | local_dataflow.rb:137:14:137:14 | x | -| local_dataflow.rb:137:7:138:9 | SSA phi read(self) | local_dataflow.rb:133:5:139:7 | SSA phi read(self) | -| local_dataflow.rb:137:7:138:9 | SSA phi read(x) | local_dataflow.rb:133:5:139:7 | SSA phi read(x) | +| local_dataflow.rb:137:7:138:9 | SSA phi read(self) | local_dataflow.rb:135:5:138:9 | [input] SSA phi read(self) | +| local_dataflow.rb:137:7:138:9 | SSA phi read(x) | local_dataflow.rb:135:5:138:9 | [input] SSA phi read(x) | | local_dataflow.rb:137:7:138:9 | if ... | local_dataflow.rb:135:5:138:9 | else ... | +| local_dataflow.rb:137:10:137:15 | [input] SSA phi read(self) | local_dataflow.rb:137:10:137:26 | SSA phi read(self) | +| local_dataflow.rb:137:10:137:15 | [input] SSA phi read(x) | local_dataflow.rb:137:10:137:26 | SSA phi read(x) | | local_dataflow.rb:137:10:137:15 | [post] self | local_dataflow.rb:137:21:137:26 | self | | local_dataflow.rb:137:10:137:15 | self | local_dataflow.rb:137:21:137:26 | self | -| local_dataflow.rb:137:10:137:26 | SSA phi read(self) | local_dataflow.rb:137:7:138:9 | SSA phi read(self) | -| local_dataflow.rb:137:10:137:26 | SSA phi read(x) | local_dataflow.rb:137:7:138:9 | SSA phi read(x) | +| local_dataflow.rb:137:10:137:26 | SSA phi read(self) | local_dataflow.rb:137:10:137:26 | [input] SSA phi read(self) | +| local_dataflow.rb:137:10:137:26 | SSA phi read(x) | local_dataflow.rb:137:10:137:26 | [input] SSA phi read(x) | +| local_dataflow.rb:137:10:137:26 | [input] SSA phi read(self) | local_dataflow.rb:137:7:138:9 | SSA phi read(self) | +| local_dataflow.rb:137:10:137:26 | [input] SSA phi read(self) | local_dataflow.rb:137:7:138:9 | SSA phi read(self) | +| local_dataflow.rb:137:10:137:26 | [input] SSA phi read(x) | local_dataflow.rb:137:7:138:9 | SSA phi read(x) | +| local_dataflow.rb:137:10:137:26 | [input] SSA phi read(x) | local_dataflow.rb:137:7:138:9 | SSA phi read(x) | | local_dataflow.rb:137:14:137:14 | [post] x | local_dataflow.rb:137:25:137:25 | x | | local_dataflow.rb:137:14:137:14 | x | local_dataflow.rb:137:25:137:25 | x | | local_dataflow.rb:137:20:137:26 | [false] ! ... | local_dataflow.rb:137:10:137:26 | [false] ... && ... | +| local_dataflow.rb:137:20:137:26 | [input] SSA phi read(self) | local_dataflow.rb:137:10:137:26 | SSA phi read(self) | +| local_dataflow.rb:137:20:137:26 | [input] SSA phi read(x) | local_dataflow.rb:137:10:137:26 | SSA phi read(x) | | local_dataflow.rb:137:20:137:26 | [true] ! ... | local_dataflow.rb:137:10:137:26 | [true] ... && ... | | local_dataflow.rb:137:21:137:26 | call to use | local_dataflow.rb:137:20:137:26 | [false] ! ... | | local_dataflow.rb:137:21:137:26 | call to use | local_dataflow.rb:137:20:137:26 | [true] ! ... | @@ -3210,9 +3654,11 @@ | local_dataflow.rb:141:5:145:7 | SSA phi read(x) | local_dataflow.rb:147:9:147:9 | x | | local_dataflow.rb:141:8:141:14 | [false] ! ... | local_dataflow.rb:141:8:141:37 | [false] ... \|\| ... | | local_dataflow.rb:141:8:141:14 | [false] ! ... | local_dataflow.rb:141:8:141:37 | [true] ... \|\| ... | +| local_dataflow.rb:141:8:141:14 | [input] SSA phi read(self) | local_dataflow.rb:141:8:141:37 | SSA phi read(self) | +| local_dataflow.rb:141:8:141:14 | [input] SSA phi read(x) | local_dataflow.rb:141:8:141:37 | SSA phi read(x) | | local_dataflow.rb:141:8:141:14 | [true] ! ... | local_dataflow.rb:141:8:141:37 | [true] ... \|\| ... | -| local_dataflow.rb:141:8:141:37 | SSA phi read(self) | local_dataflow.rb:141:5:145:7 | SSA phi read(self) | -| local_dataflow.rb:141:8:141:37 | SSA phi read(x) | local_dataflow.rb:141:5:145:7 | SSA phi read(x) | +| local_dataflow.rb:141:8:141:37 | SSA phi read(self) | local_dataflow.rb:141:38:142:9 | [input] SSA phi read(self) | +| local_dataflow.rb:141:8:141:37 | SSA phi read(x) | local_dataflow.rb:141:38:142:9 | [input] SSA phi read(x) | | local_dataflow.rb:141:9:141:14 | [post] self | local_dataflow.rb:141:20:141:25 | self | | local_dataflow.rb:141:9:141:14 | call to use | local_dataflow.rb:141:8:141:14 | [false] ! ... | | local_dataflow.rb:141:9:141:14 | call to use | local_dataflow.rb:141:8:141:14 | [true] ! ... | @@ -3220,7 +3666,11 @@ | local_dataflow.rb:141:13:141:13 | [post] x | local_dataflow.rb:141:24:141:24 | x | | local_dataflow.rb:141:13:141:13 | x | local_dataflow.rb:141:24:141:24 | x | | local_dataflow.rb:141:19:141:37 | [false] ( ... ) | local_dataflow.rb:141:8:141:37 | [false] ... \|\| ... | +| local_dataflow.rb:141:19:141:37 | [input] SSA phi read(self) | local_dataflow.rb:141:8:141:37 | SSA phi read(self) | +| local_dataflow.rb:141:19:141:37 | [input] SSA phi read(x) | local_dataflow.rb:141:8:141:37 | SSA phi read(x) | | local_dataflow.rb:141:19:141:37 | [true] ( ... ) | local_dataflow.rb:141:8:141:37 | [true] ... \|\| ... | +| local_dataflow.rb:141:20:141:25 | [input] SSA phi read(self) | local_dataflow.rb:141:20:141:36 | SSA phi read(self) | +| local_dataflow.rb:141:20:141:25 | [input] SSA phi read(x) | local_dataflow.rb:141:20:141:36 | SSA phi read(x) | | local_dataflow.rb:141:20:141:25 | [post] self | local_dataflow.rb:141:31:141:36 | self | | local_dataflow.rb:141:20:141:25 | self | local_dataflow.rb:141:31:141:36 | self | | local_dataflow.rb:141:20:141:36 | SSA phi read(self) | local_dataflow.rb:143:11:143:16 | self | @@ -3230,24 +3680,38 @@ | local_dataflow.rb:141:24:141:24 | [post] x | local_dataflow.rb:141:35:141:35 | x | | local_dataflow.rb:141:24:141:24 | x | local_dataflow.rb:141:35:141:35 | x | | local_dataflow.rb:141:30:141:36 | [false] ! ... | local_dataflow.rb:141:20:141:36 | [false] ... && ... | +| local_dataflow.rb:141:30:141:36 | [input] SSA phi read(self) | local_dataflow.rb:141:20:141:36 | SSA phi read(self) | +| local_dataflow.rb:141:30:141:36 | [input] SSA phi read(x) | local_dataflow.rb:141:20:141:36 | SSA phi read(x) | | local_dataflow.rb:141:30:141:36 | [true] ! ... | local_dataflow.rb:141:20:141:36 | [true] ... && ... | | local_dataflow.rb:141:31:141:36 | call to use | local_dataflow.rb:141:30:141:36 | [false] ! ... | | local_dataflow.rb:141:31:141:36 | call to use | local_dataflow.rb:141:30:141:36 | [true] ! ... | +| local_dataflow.rb:141:38:142:9 | [input] SSA phi read(self) | local_dataflow.rb:141:5:145:7 | SSA phi read(self) | +| local_dataflow.rb:141:38:142:9 | [input] SSA phi read(x) | local_dataflow.rb:141:5:145:7 | SSA phi read(x) | | local_dataflow.rb:141:38:142:9 | then ... | local_dataflow.rb:141:5:145:7 | if ... | | local_dataflow.rb:142:7:142:9 | nil | local_dataflow.rb:141:38:142:9 | then ... | -| local_dataflow.rb:143:5:144:16 | SSA phi read(self) | local_dataflow.rb:141:5:145:7 | SSA phi read(self) | -| local_dataflow.rb:143:5:144:16 | SSA phi read(x) | local_dataflow.rb:141:5:145:7 | SSA phi read(x) | +| local_dataflow.rb:143:5:144:16 | SSA phi read(self) | local_dataflow.rb:143:5:144:16 | [input] SSA phi read(self) | +| local_dataflow.rb:143:5:144:16 | SSA phi read(x) | local_dataflow.rb:143:5:144:16 | [input] SSA phi read(x) | +| local_dataflow.rb:143:5:144:16 | [input] SSA phi read(self) | local_dataflow.rb:141:5:145:7 | SSA phi read(self) | +| local_dataflow.rb:143:5:144:16 | [input] SSA phi read(x) | local_dataflow.rb:141:5:145:7 | SSA phi read(x) | | local_dataflow.rb:143:5:144:16 | elsif ... | local_dataflow.rb:141:5:145:7 | if ... | +| local_dataflow.rb:143:11:143:16 | [input] SSA phi read(self) | local_dataflow.rb:143:11:143:26 | SSA phi read(self) | +| local_dataflow.rb:143:11:143:16 | [input] SSA phi read(x) | local_dataflow.rb:143:11:143:26 | SSA phi read(x) | | local_dataflow.rb:143:11:143:16 | [post] self | local_dataflow.rb:143:21:143:26 | self | | local_dataflow.rb:143:11:143:16 | call to use | local_dataflow.rb:143:11:143:26 | [false] ... \|\| ... | | local_dataflow.rb:143:11:143:16 | call to use | local_dataflow.rb:143:11:143:26 | [true] ... \|\| ... | | local_dataflow.rb:143:11:143:16 | self | local_dataflow.rb:143:21:143:26 | self | | local_dataflow.rb:143:11:143:26 | SSA phi read(self) | local_dataflow.rb:144:11:144:16 | self | | local_dataflow.rb:143:11:143:26 | SSA phi read(x) | local_dataflow.rb:144:15:144:15 | x | +| local_dataflow.rb:143:11:143:26 | [input] SSA phi read(self) | local_dataflow.rb:143:5:144:16 | SSA phi read(self) | +| local_dataflow.rb:143:11:143:26 | [input] SSA phi read(x) | local_dataflow.rb:143:5:144:16 | SSA phi read(x) | | local_dataflow.rb:143:15:143:15 | [post] x | local_dataflow.rb:143:25:143:25 | x | | local_dataflow.rb:143:15:143:15 | x | local_dataflow.rb:143:25:143:25 | x | +| local_dataflow.rb:143:21:143:26 | [input] SSA phi read(self) | local_dataflow.rb:143:11:143:26 | SSA phi read(self) | +| local_dataflow.rb:143:21:143:26 | [input] SSA phi read(x) | local_dataflow.rb:143:11:143:26 | SSA phi read(x) | | local_dataflow.rb:143:21:143:26 | call to use | local_dataflow.rb:143:11:143:26 | [false] ... \|\| ... | | local_dataflow.rb:143:21:143:26 | call to use | local_dataflow.rb:143:11:143:26 | [true] ... \|\| ... | +| local_dataflow.rb:143:27:144:16 | [input] SSA phi read(self) | local_dataflow.rb:143:5:144:16 | SSA phi read(self) | +| local_dataflow.rb:143:27:144:16 | [input] SSA phi read(x) | local_dataflow.rb:143:5:144:16 | SSA phi read(x) | | local_dataflow.rb:143:27:144:16 | then ... | local_dataflow.rb:143:5:144:16 | elsif ... | | local_dataflow.rb:144:11:144:16 | call to use | local_dataflow.rb:143:27:144:16 | then ... | | local_dataflow.rb:147:5:147:10 | [post] self | local_dataflow.rb:148:5:148:10 | self | diff --git a/swift/integration-tests/posix-only/frontend-invocations/B.swift b/ruby/ql/test/library-tests/dataflow/regressions/Regressions.expected similarity index 100% rename from swift/integration-tests/posix-only/frontend-invocations/B.swift rename to ruby/ql/test/library-tests/dataflow/regressions/Regressions.expected diff --git a/ruby/ql/test/library-tests/dataflow/regressions/Regressions.ql b/ruby/ql/test/library-tests/dataflow/regressions/Regressions.ql new file mode 100644 index 00000000000..2d6c879aa39 --- /dev/null +++ b/ruby/ql/test/library-tests/dataflow/regressions/Regressions.ql @@ -0,0 +1,39 @@ +private import codeql.ruby.dataflow.FlowSummary + +private class ReverseSummary extends SimpleSummarizedCallable { + ReverseSummary() { this = "reverse" } + + override predicate propagatesFlow(string input, string output, boolean preservesValue) { + input = "Argument[self].WithElement[any]" and + output = "ReturnValue" and + preservesValue = true + } +} + +private module Config implements DataFlow::ConfigSig { + predicate isSource(DataFlow::Node source) { + source + .(DataFlow::PostUpdateNode) + .getPreUpdateNode() + .asExpr() + .getExpr() + .(MethodCall) + .getMethodName() = "reverse" + } + + predicate isSink(DataFlow::Node sink) { + exists(MethodCall mc | + mc.getMethodName() = "sink" and + sink.asExpr().getExpr() = mc.getAnArgument() + ) + } +} + +/** + * This predicate should not have a result. We check that the flow summary for + * `reverse` does not get picked up by the `reverseStepThroughInputOutputAlias` + * logic in `DataFlowImplCommon.qll`. + */ +query predicate noReverseStepThroughInputOutputAlias(DataFlow::Node source, DataFlow::Node sink) { + DataFlow::Global::flow(source, sink) +} diff --git a/ruby/ql/test/library-tests/dataflow/regressions/regressions.rb b/ruby/ql/test/library-tests/dataflow/regressions/regressions.rb new file mode 100644 index 00000000000..f3e22585a8d --- /dev/null +++ b/ruby/ql/test/library-tests/dataflow/regressions/regressions.rb @@ -0,0 +1,3 @@ +x = foo +x.reverse.bar +sink(x) \ No newline at end of file diff --git a/ruby/ql/test/library-tests/frameworks/gemfile/Gemfile b/ruby/ql/test/library-tests/frameworks/gemfile/Gemfile new file mode 100644 index 00000000000..2e3f2313bfb --- /dev/null +++ b/ruby/ql/test/library-tests/frameworks/gemfile/Gemfile @@ -0,0 +1,9 @@ +source "https://rubygems.org" + +gem "rails", "7.0.0" +gem "json", "~> 2.6.0" +gem "jwt" + +gem "loofah", ">= 2" + +gem "invalid-version", "abc" diff --git a/ruby/ql/test/library-tests/frameworks/gemfile/Gemfile.expected b/ruby/ql/test/library-tests/frameworks/gemfile/Gemfile.expected new file mode 100644 index 00000000000..9d87e77087e --- /dev/null +++ b/ruby/ql/test/library-tests/frameworks/gemfile/Gemfile.expected @@ -0,0 +1,8 @@ +gemCalls +| Gemfile:3:1:3:20 | call to gem | rails | 7.0.0 | 7.0.0 | +| Gemfile:4:1:4:22 | call to gem | json | ~> 2.6.0 | 2.6.0 | +| Gemfile:7:1:7:20 | call to gem | loofah | >= 2 | 2 | +versionBefore +| 2 | 2.6.0 | +| 2 | 7.0.0 | +| 2.6.0 | 7.0.0 | diff --git a/ruby/ql/test/library-tests/frameworks/gemfile/Gemfile.ql b/ruby/ql/test/library-tests/frameworks/gemfile/Gemfile.ql new file mode 100644 index 00000000000..487d224777b --- /dev/null +++ b/ruby/ql/test/library-tests/frameworks/gemfile/Gemfile.ql @@ -0,0 +1,17 @@ +import codeql.ruby.frameworks.Gemfile + +query predicate gemCalls( + Gemfile::Gem gem, string name, Gemfile::VersionConstraint constraint, string version +) { + name = gem.getName() and + constraint = gem.getAVersionConstraint() and + version = constraint.getVersion() +} + +query predicate versionBefore(string before, string after) { + exists(Gemfile::VersionConstraint c1, Gemfile::VersionConstraint c2 | + c1.getVersion() = before and c2.getVersion() = after + | + c1.getVersion().before(after) + ) +} diff --git a/ruby/ql/test/library-tests/frameworks/gemfile/not_gemfile.rb b/ruby/ql/test/library-tests/frameworks/gemfile/not_gemfile.rb new file mode 100644 index 00000000000..a526277026c --- /dev/null +++ b/ruby/ql/test/library-tests/frameworks/gemfile/not_gemfile.rb @@ -0,0 +1 @@ +gem "this-gem-not-in-gemfile", "1.2" diff --git a/ruby/ql/test/query-tests/security/cwe-079/UnsafeHtmlConstruction.expected b/ruby/ql/test/query-tests/security/cwe-079/UnsafeHtmlConstruction.expected index b9019c8f1d0..599f29e806c 100644 --- a/ruby/ql/test/query-tests/security/cwe-079/UnsafeHtmlConstruction.expected +++ b/ruby/ql/test/query-tests/security/cwe-079/UnsafeHtmlConstruction.expected @@ -2,6 +2,7 @@ edges | lib/unsafeHtml.rb:2:31:2:34 | name | lib/unsafeHtml.rb:3:10:3:16 | #{...} | provenance | | | lib/unsafeHtml.rb:9:27:9:30 | name | lib/unsafeHtml.rb:11:13:11:19 | #{...} | provenance | | | lib/unsafeHtml.rb:16:19:16:22 | name | lib/unsafeHtml.rb:17:28:17:31 | name | provenance | | +| lib/unsafeHtml.rb:23:32:23:35 | name | lib/unsafeHtml.rb:24:10:24:16 | #{...} | provenance | | nodes | lib/unsafeHtml.rb:2:31:2:34 | name | semmle.label | name | | lib/unsafeHtml.rb:3:10:3:16 | #{...} | semmle.label | #{...} | @@ -9,8 +10,11 @@ nodes | lib/unsafeHtml.rb:11:13:11:19 | #{...} | semmle.label | #{...} | | lib/unsafeHtml.rb:16:19:16:22 | name | semmle.label | name | | lib/unsafeHtml.rb:17:28:17:31 | name | semmle.label | name | +| lib/unsafeHtml.rb:23:32:23:35 | name | semmle.label | name | +| lib/unsafeHtml.rb:24:10:24:16 | #{...} | semmle.label | #{...} | subpaths #select | lib/unsafeHtml.rb:3:10:3:16 | #{...} | lib/unsafeHtml.rb:2:31:2:34 | name | lib/unsafeHtml.rb:3:10:3:16 | #{...} | This string interpolation which depends on $@ might later allow $@. | lib/unsafeHtml.rb:2:31:2:34 | name | library input | lib/unsafeHtml.rb:3:5:3:22 | "

    #{...}

    " | cross-site scripting | | lib/unsafeHtml.rb:11:13:11:19 | #{...} | lib/unsafeHtml.rb:9:27:9:30 | name | lib/unsafeHtml.rb:11:13:11:19 | #{...} | This string interpolation which depends on $@ might later allow $@. | lib/unsafeHtml.rb:9:27:9:30 | name | library input | lib/unsafeHtml.rb:13:5:13:5 | h | cross-site scripting | | lib/unsafeHtml.rb:17:28:17:31 | name | lib/unsafeHtml.rb:16:19:16:22 | name | lib/unsafeHtml.rb:17:28:17:31 | name | This string format which depends on $@ might later allow $@. | lib/unsafeHtml.rb:16:19:16:22 | name | library input | lib/unsafeHtml.rb:17:5:17:32 | call to sprintf | cross-site scripting | +| lib/unsafeHtml.rb:24:10:24:16 | #{...} | lib/unsafeHtml.rb:23:32:23:35 | name | lib/unsafeHtml.rb:24:10:24:16 | #{...} | This string interpolation which depends on $@ might later allow $@. | lib/unsafeHtml.rb:23:32:23:35 | name | library input | lib/unsafeHtml.rb:24:5:24:22 | "

    #{...}

    " | cross-site scripting | diff --git a/ruby/ql/test/query-tests/security/cwe-079/lib/unsafeHtml.rb b/ruby/ql/test/query-tests/security/cwe-079/lib/unsafeHtml.rb index d52932adedb..3f92d5938b1 100644 --- a/ruby/ql/test/query-tests/security/cwe-079/lib/unsafeHtml.rb +++ b/ruby/ql/test/query-tests/security/cwe-079/lib/unsafeHtml.rb @@ -19,4 +19,12 @@ class Foobar # escape sprintf("

    %s

    ", ERB::Util.html_escape(name)).html_safe # OK - the parameter is escaped end + + def create_user_description2(name) + "

    #{name}

    ".html_safe # NOT OK - the value is not necessarily HTML safe + + if name.html_safe? + "

    #{name}

    ".html_safe # OK - value is marked as being HTML safe + end + end end diff --git a/ruby/ql/test/query-tests/security/cwe-089/ActiveRecordInjection.rb b/ruby/ql/test/query-tests/security/cwe-089/ActiveRecordInjection.rb index ad074de5e98..f1f8d680b75 100644 --- a/ruby/ql/test/query-tests/security/cwe-089/ActiveRecordInjection.rb +++ b/ruby/ql/test/query-tests/security/cwe-089/ActiveRecordInjection.rb @@ -204,3 +204,14 @@ class RegressionController < ActionController::Base Regression.connection.execute("SELECT * FROM users WHERE id = #{permitted_params[:user_id]}") end end + +class User + scope :with_role, ->(role) { where("role = #{role}") } +end + +class UsersController < ActionController::Base + def index + # BAD: user input passed to scope which uses it without sanitization. + @users = User.with_role(params[:role]) + end +end diff --git a/ruby/ql/test/query-tests/security/cwe-089/SqlInjection.expected b/ruby/ql/test/query-tests/security/cwe-089/SqlInjection.expected index 8b6c5bf4d16..6593e7606da 100644 --- a/ruby/ql/test/query-tests/security/cwe-089/SqlInjection.expected +++ b/ruby/ql/test/query-tests/security/cwe-089/SqlInjection.expected @@ -76,6 +76,9 @@ edges | ActiveRecordInjection.rb:203:77:203:102 | ...[...] | ActiveRecordInjection.rb:203:43:203:104 | "SELECT * FROM users WHERE id ..." | provenance | | | ActiveRecordInjection.rb:204:69:204:84 | call to permitted_params | ActiveRecordInjection.rb:204:69:204:94 | ...[...] | provenance | | | ActiveRecordInjection.rb:204:69:204:94 | ...[...] | ActiveRecordInjection.rb:204:35:204:96 | "SELECT * FROM users WHERE id ..." | provenance | | +| ActiveRecordInjection.rb:209:24:209:27 | role | ActiveRecordInjection.rb:209:38:209:53 | "role = #{...}" | provenance | | +| ActiveRecordInjection.rb:215:29:215:34 | call to params | ActiveRecordInjection.rb:215:29:215:41 | ...[...] | provenance | | +| ActiveRecordInjection.rb:215:29:215:41 | ...[...] | ActiveRecordInjection.rb:209:24:209:27 | role | provenance | | | ArelInjection.rb:4:5:4:8 | name | ArelInjection.rb:6:20:6:61 | "SELECT * FROM users WHERE nam..." | provenance | | | ArelInjection.rb:4:5:4:8 | name | ArelInjection.rb:7:39:7:80 | "SELECT * FROM users WHERE nam..." | provenance | | | ArelInjection.rb:4:12:4:17 | call to params | ArelInjection.rb:4:12:4:29 | ...[...] | provenance | | @@ -201,6 +204,10 @@ nodes | ActiveRecordInjection.rb:204:35:204:96 | "SELECT * FROM users WHERE id ..." | semmle.label | "SELECT * FROM users WHERE id ..." | | ActiveRecordInjection.rb:204:69:204:84 | call to permitted_params | semmle.label | call to permitted_params | | ActiveRecordInjection.rb:204:69:204:94 | ...[...] | semmle.label | ...[...] | +| ActiveRecordInjection.rb:209:24:209:27 | role | semmle.label | role | +| ActiveRecordInjection.rb:209:38:209:53 | "role = #{...}" | semmle.label | "role = #{...}" | +| ActiveRecordInjection.rb:215:29:215:34 | call to params | semmle.label | call to params | +| ActiveRecordInjection.rb:215:29:215:41 | ...[...] | semmle.label | ...[...] | | ArelInjection.rb:4:5:4:8 | name | semmle.label | name | | ArelInjection.rb:4:12:4:17 | call to params | semmle.label | call to params | | ArelInjection.rb:4:12:4:29 | ...[...] | semmle.label | ...[...] | @@ -257,6 +264,7 @@ subpaths | ActiveRecordInjection.rb:194:37:194:41 | query | ActiveRecordInjection.rb:199:5:199:10 | call to params | ActiveRecordInjection.rb:194:37:194:41 | query | This SQL query depends on a $@. | ActiveRecordInjection.rb:199:5:199:10 | call to params | user-provided value | | ActiveRecordInjection.rb:203:43:203:104 | "SELECT * FROM users WHERE id ..." | ActiveRecordInjection.rb:199:5:199:10 | call to params | ActiveRecordInjection.rb:203:43:203:104 | "SELECT * FROM users WHERE id ..." | This SQL query depends on a $@. | ActiveRecordInjection.rb:199:5:199:10 | call to params | user-provided value | | ActiveRecordInjection.rb:204:35:204:96 | "SELECT * FROM users WHERE id ..." | ActiveRecordInjection.rb:199:5:199:10 | call to params | ActiveRecordInjection.rb:204:35:204:96 | "SELECT * FROM users WHERE id ..." | This SQL query depends on a $@. | ActiveRecordInjection.rb:199:5:199:10 | call to params | user-provided value | +| ActiveRecordInjection.rb:209:38:209:53 | "role = #{...}" | ActiveRecordInjection.rb:215:29:215:34 | call to params | ActiveRecordInjection.rb:209:38:209:53 | "role = #{...}" | This SQL query depends on a $@. | ActiveRecordInjection.rb:215:29:215:34 | call to params | user-provided value | | ArelInjection.rb:6:20:6:61 | "SELECT * FROM users WHERE nam..." | ArelInjection.rb:4:12:4:17 | call to params | ArelInjection.rb:6:20:6:61 | "SELECT * FROM users WHERE nam..." | This SQL query depends on a $@. | ArelInjection.rb:4:12:4:17 | call to params | user-provided value | | ArelInjection.rb:7:39:7:80 | "SELECT * FROM users WHERE nam..." | ArelInjection.rb:4:12:4:17 | call to params | ArelInjection.rb:7:39:7:80 | "SELECT * FROM users WHERE nam..." | This SQL query depends on a $@. | ArelInjection.rb:4:12:4:17 | call to params | user-provided value | | PgInjection.rb:14:15:14:18 | qry1 | PgInjection.rb:6:12:6:17 | call to params | PgInjection.rb:14:15:14:18 | qry1 | This SQL query depends on a $@. | PgInjection.rb:6:12:6:17 | call to params | user-provided value | diff --git a/ruby/ql/test/query-tests/security/cwe-352/CSRFProtectionDisabled.expected b/ruby/ql/test/query-tests/security/cwe-352/CSRFProtectionDisabled.expected index d80c52afc66..be0df7c9da7 100644 --- a/ruby/ql/test/query-tests/security/cwe-352/CSRFProtectionDisabled.expected +++ b/ruby/ql/test/query-tests/security/cwe-352/CSRFProtectionDisabled.expected @@ -1,5 +1,5 @@ | railsapp/app/controllers/application_controller.rb:5:3:5:22 | call to protect_from_forgery | Potential CSRF vulnerability due to forgery protection being disabled or weakened. | | railsapp/app/controllers/users_controller.rb:4:3:4:47 | call to skip_before_action | Potential CSRF vulnerability due to forgery protection being disabled or weakened. | -| railsapp/config/application.rb:15:5:15:53 | call to allow_forgery_protection= | Potential CSRF vulnerability due to forgery protection being disabled or weakened. | +| railsapp/config/application.rb:16:5:16:53 | call to allow_forgery_protection= | Potential CSRF vulnerability due to forgery protection being disabled or weakened. | | railsapp/config/environments/development.rb:5:3:5:51 | call to allow_forgery_protection= | Potential CSRF vulnerability due to forgery protection being disabled or weakened. | | railsapp/config/environments/production.rb:5:3:5:51 | call to allow_forgery_protection= | Potential CSRF vulnerability due to forgery protection being disabled or weakened. | diff --git a/ruby/ql/test/query-tests/security/cwe-352/CSRFProtectionNotEnabled.expected b/ruby/ql/test/query-tests/security/cwe-352/CSRFProtectionNotEnabled.expected new file mode 100644 index 00000000000..50da7dc0766 --- /dev/null +++ b/ruby/ql/test/query-tests/security/cwe-352/CSRFProtectionNotEnabled.expected @@ -0,0 +1 @@ +| railsapp/app/controllers/alternative_root_controller.rb:1:1:3:3 | AlternativeRootController | Potential CSRF vulnerability due to forgery protection not being enabled. | diff --git a/ruby/ql/test/query-tests/security/cwe-352/CSRFProtectionNotEnabled.qlref b/ruby/ql/test/query-tests/security/cwe-352/CSRFProtectionNotEnabled.qlref new file mode 100644 index 00000000000..8e9e894fe51 --- /dev/null +++ b/ruby/ql/test/query-tests/security/cwe-352/CSRFProtectionNotEnabled.qlref @@ -0,0 +1 @@ +queries/security/cwe-352/CSRFProtectionNotEnabled.ql \ No newline at end of file diff --git a/ruby/ql/test/query-tests/security/cwe-352/railsapp/app/controllers/alternative_root_controller.rb b/ruby/ql/test/query-tests/security/cwe-352/railsapp/app/controllers/alternative_root_controller.rb new file mode 100644 index 00000000000..8cbf31529c1 --- /dev/null +++ b/ruby/ql/test/query-tests/security/cwe-352/railsapp/app/controllers/alternative_root_controller.rb @@ -0,0 +1,3 @@ +class AlternativeRootController < ActionController::Base + # BAD: no protect_from_forgery call +end \ No newline at end of file diff --git a/ruby/ql/test/query-tests/security/cwe-352/railsapp/app/controllers/subscriptions_controller.rb b/ruby/ql/test/query-tests/security/cwe-352/railsapp/app/controllers/subscriptions_controller.rb new file mode 100644 index 00000000000..9e1cfcf9a1e --- /dev/null +++ b/ruby/ql/test/query-tests/security/cwe-352/railsapp/app/controllers/subscriptions_controller.rb @@ -0,0 +1,3 @@ +class SubscriptionsController < AlternativeRootController + protect_from_forgery with: :exception +end \ No newline at end of file diff --git a/ruby/ql/test/query-tests/security/cwe-352/railsapp/app/controllers/tags_controller.rb b/ruby/ql/test/query-tests/security/cwe-352/railsapp/app/controllers/tags_controller.rb new file mode 100644 index 00000000000..4c3f586b9fe --- /dev/null +++ b/ruby/ql/test/query-tests/security/cwe-352/railsapp/app/controllers/tags_controller.rb @@ -0,0 +1,2 @@ +class TagsController < AlternativeRootController +end \ No newline at end of file diff --git a/ruby/ql/test/query-tests/security/cwe-352/railsapp/config/application.rb b/ruby/ql/test/query-tests/security/cwe-352/railsapp/config/application.rb index 49ccf578c5e..02b349a1630 100644 --- a/ruby/ql/test/query-tests/security/cwe-352/railsapp/config/application.rb +++ b/ruby/ql/test/query-tests/security/cwe-352/railsapp/config/application.rb @@ -9,7 +9,8 @@ Bundler.require(*Rails.groups) module Railsapp class Application < Rails::Application # Initialize configuration defaults for originally generated Rails version. - config.load_defaults 6.0 + # This defaults version does NOT enable CSRF protection by default. + config.load_defaults 5.1 # BAD: Disabling forgery protection may open the application to CSRF attacks config.action_controller.allow_forgery_protection = false diff --git a/shared/controlflow/CHANGELOG.md b/shared/controlflow/CHANGELOG.md index dbfa6ef4512..aaebbbb4318 100644 --- a/shared/controlflow/CHANGELOG.md +++ b/shared/controlflow/CHANGELOG.md @@ -1,3 +1,19 @@ +## 0.1.13 + +No user-facing changes. + +## 0.1.12 + +No user-facing changes. + +## 0.1.11 + +No user-facing changes. + +## 0.1.10 + +No user-facing changes. + ## 0.1.9 No user-facing changes. diff --git a/shared/controlflow/change-notes/released/0.1.10.md b/shared/controlflow/change-notes/released/0.1.10.md new file mode 100644 index 00000000000..47358eeee93 --- /dev/null +++ b/shared/controlflow/change-notes/released/0.1.10.md @@ -0,0 +1,3 @@ +## 0.1.10 + +No user-facing changes. diff --git a/shared/controlflow/change-notes/released/0.1.11.md b/shared/controlflow/change-notes/released/0.1.11.md new file mode 100644 index 00000000000..ab62c1ac1b3 --- /dev/null +++ b/shared/controlflow/change-notes/released/0.1.11.md @@ -0,0 +1,3 @@ +## 0.1.11 + +No user-facing changes. diff --git a/shared/controlflow/change-notes/released/0.1.12.md b/shared/controlflow/change-notes/released/0.1.12.md new file mode 100644 index 00000000000..98aa326ef71 --- /dev/null +++ b/shared/controlflow/change-notes/released/0.1.12.md @@ -0,0 +1,3 @@ +## 0.1.12 + +No user-facing changes. diff --git a/shared/controlflow/change-notes/released/0.1.13.md b/shared/controlflow/change-notes/released/0.1.13.md new file mode 100644 index 00000000000..827f5e3ec44 --- /dev/null +++ b/shared/controlflow/change-notes/released/0.1.13.md @@ -0,0 +1,3 @@ +## 0.1.13 + +No user-facing changes. diff --git a/shared/controlflow/codeql-pack.release.yml b/shared/controlflow/codeql-pack.release.yml index 1425c0edf7f..f43379f8196 100644 --- a/shared/controlflow/codeql-pack.release.yml +++ b/shared/controlflow/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.1.9 +lastReleaseVersion: 0.1.13 diff --git a/shared/controlflow/qlpack.yml b/shared/controlflow/qlpack.yml index 9d35a678276..de39d621324 100644 --- a/shared/controlflow/qlpack.yml +++ b/shared/controlflow/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/controlflow -version: 0.1.10-dev +version: 0.1.14-dev groups: shared library: true dependencies: diff --git a/shared/dataflow/CHANGELOG.md b/shared/dataflow/CHANGELOG.md index 67a5bf589f4..b5267b6d9b0 100644 --- a/shared/dataflow/CHANGELOG.md +++ b/shared/dataflow/CHANGELOG.md @@ -1,3 +1,21 @@ +## 0.2.4 + +### Minor Analysis Improvements + +* Path explanations now include flow that goes through callbacks passed into library functions. For example, if `map` is a library function, then in `result = map(xs, x => x + 1)` we will now include the step from `x` to `x + 1` in the path explanation, instead of going directly from `xs` to `result`. Note that this change does not affect actual query results, but only how path explanations are computed. + +## 0.2.3 + +No user-facing changes. + +## 0.2.2 + +No user-facing changes. + +## 0.2.1 + +No user-facing changes. + ## 0.2.0 ### Breaking Changes diff --git a/shared/dataflow/change-notes/released/0.2.1.md b/shared/dataflow/change-notes/released/0.2.1.md new file mode 100644 index 00000000000..3dbfc85fe11 --- /dev/null +++ b/shared/dataflow/change-notes/released/0.2.1.md @@ -0,0 +1,3 @@ +## 0.2.1 + +No user-facing changes. diff --git a/shared/dataflow/change-notes/released/0.2.2.md b/shared/dataflow/change-notes/released/0.2.2.md new file mode 100644 index 00000000000..98e69fd0772 --- /dev/null +++ b/shared/dataflow/change-notes/released/0.2.2.md @@ -0,0 +1,3 @@ +## 0.2.2 + +No user-facing changes. diff --git a/shared/dataflow/change-notes/released/0.2.3.md b/shared/dataflow/change-notes/released/0.2.3.md new file mode 100644 index 00000000000..873fbbfa89b --- /dev/null +++ b/shared/dataflow/change-notes/released/0.2.3.md @@ -0,0 +1,3 @@ +## 0.2.3 + +No user-facing changes. diff --git a/shared/dataflow/change-notes/2024-02-28-hidden-subpaths.md b/shared/dataflow/change-notes/released/0.2.4.md similarity index 90% rename from shared/dataflow/change-notes/2024-02-28-hidden-subpaths.md rename to shared/dataflow/change-notes/released/0.2.4.md index 05a48eb8050..075802f2b5d 100644 --- a/shared/dataflow/change-notes/2024-02-28-hidden-subpaths.md +++ b/shared/dataflow/change-notes/released/0.2.4.md @@ -1,4 +1,5 @@ ---- -category: minorAnalysis ---- +## 0.2.4 + +### Minor Analysis Improvements + * Path explanations now include flow that goes through callbacks passed into library functions. For example, if `map` is a library function, then in `result = map(xs, x => x + 1)` we will now include the step from `x` to `x + 1` in the path explanation, instead of going directly from `xs` to `result`. Note that this change does not affect actual query results, but only how path explanations are computed. diff --git a/shared/dataflow/codeql-pack.release.yml b/shared/dataflow/codeql-pack.release.yml index 5274e27ed52..7f1e3841dcd 100644 --- a/shared/dataflow/codeql-pack.release.yml +++ b/shared/dataflow/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.2.0 +lastReleaseVersion: 0.2.4 diff --git a/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll b/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll index b5f99972bec..e6ce9008935 100644 --- a/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll +++ b/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll @@ -451,6 +451,15 @@ module MakeImpl Lang> { pragma[nomagic] private predicate notExpectsContent(NodeEx n) { not expectsContentCached(n.asNode(), _) } + pragma[nomagic] + private predicate storeExUnrestricted( + NodeEx node1, Content c, NodeEx node2, DataFlowType contentType, DataFlowType containerType + ) { + store(pragma[only_bind_into](node1.asNode()), c, pragma[only_bind_into](node2.asNode()), + contentType, containerType) and + stepFilter(node1, node2) + } + pragma[nomagic] private predicate hasReadStep(Content c) { read(_, c, _) } @@ -458,10 +467,8 @@ module MakeImpl Lang> { private predicate storeEx( NodeEx node1, Content c, NodeEx node2, DataFlowType contentType, DataFlowType containerType ) { - store(pragma[only_bind_into](node1.asNode()), c, pragma[only_bind_into](node2.asNode()), - contentType, containerType) and - hasReadStep(c) and - stepFilter(node1, node2) + storeExUnrestricted(node1, c, node2, contentType, containerType) and + hasReadStep(c) } pragma[nomagic] @@ -5141,7 +5148,7 @@ module MakeImpl Lang> { midNode = mid.getNodeEx() and t1 = mid.getType() and ap1 = mid.getAp() and - storeEx(midNode, c, node, contentType, t2) and + storeExUnrestricted(midNode, c, node, contentType, t2) and ap2.getHead() = c and ap2.len() = unbindInt(ap1.len() + 1) and compatibleTypes(t1, contentType) @@ -5318,7 +5325,7 @@ module MakeImpl Lang> { not outBarrier(node, state) and // if a node is not the target of a store, we can check `clearsContent` immediately ( - storeEx(_, _, node, _, _) + storeExUnrestricted(_, _, node, _, _) or not clearsContentEx(node, ap.getHead()) ) @@ -5459,7 +5466,7 @@ module MakeImpl Lang> { exists(NodeEx midNode | midNode = mid.getNodeEx() and ap = mid.getAp() and - storeEx(node, c, midNode, _, _) and + storeExUnrestricted(node, c, midNode, _, _) and ap.getHead() = c ) } diff --git a/shared/dataflow/codeql/dataflow/internal/DataFlowImplCommon.qll b/shared/dataflow/codeql/dataflow/internal/DataFlowImplCommon.qll index e83752fcced..81091303ff4 100644 --- a/shared/dataflow/codeql/dataflow/internal/DataFlowImplCommon.qll +++ b/shared/dataflow/codeql/dataflow/internal/DataFlowImplCommon.qll @@ -863,34 +863,37 @@ module MakeImplCommon Lang> { */ pragma[nomagic] private predicate parameterValueFlowCand(ParamNode p, Node node, boolean read) { - p = node and - read = false - or - // local flow - exists(Node mid | - parameterValueFlowCand(p, mid, read) and - simpleLocalFlowStep(mid, node) and - validParameterAliasStep(mid, node) - ) - or - // read - exists(Node mid | - parameterValueFlowCand(p, mid, false) and - readSet(mid, _, node) and - read = true - ) - or - // flow through: no prior read - exists(ArgNode arg | - parameterValueFlowArgCand(p, arg, false) and - argumentValueFlowsThroughCand(arg, node, read) - ) - or - // flow through: no read inside method - exists(ArgNode arg | - parameterValueFlowArgCand(p, arg, read) and - argumentValueFlowsThroughCand(arg, node, false) - ) + ( + p = node and + read = false + or + // local flow + exists(Node mid | + parameterValueFlowCand(p, mid, read) and + simpleLocalFlowStep(mid, node) and + validParameterAliasStep(mid, node) + ) + or + // read + exists(Node mid | + parameterValueFlowCand(p, mid, false) and + readSet(mid, _, node) and + read = true + ) + or + // flow through: no prior read + exists(ArgNode arg | + parameterValueFlowArgCand(p, arg, false) and + argumentValueFlowsThroughCand(arg, node, read) + ) + or + // flow through: no read inside method + exists(ArgNode arg | + parameterValueFlowArgCand(p, arg, read) and + argumentValueFlowsThroughCand(arg, node, false) + ) + ) and + not expectsContentCached(node, _) } pragma[nomagic] diff --git a/shared/dataflow/codeql/dataflow/internal/FlowSummaryImpl.qll b/shared/dataflow/codeql/dataflow/internal/FlowSummaryImpl.qll index 4d6df294521..a88259a506b 100644 --- a/shared/dataflow/codeql/dataflow/internal/FlowSummaryImpl.qll +++ b/shared/dataflow/codeql/dataflow/internal/FlowSummaryImpl.qll @@ -1470,13 +1470,13 @@ module Make< * Holds if an external source specification exists for `n` with output specification * `output` and kind `kind`. */ - predicate sourceElement(Element n, string output, string kind); + predicate sourceElement(Element n, string output, string kind, Provenance provenance); /** * Holds if an external sink specification exists for `n` with input specification * `input` and kind `kind`. */ - predicate sinkElement(Element n, string input, string kind); + predicate sinkElement(Element n, string input, string kind, Provenance provenance); class SourceOrSinkElement extends Element; @@ -1530,8 +1530,8 @@ module Make< private import SourceSinkInterpretationInput private predicate sourceSinkSpec(string spec) { - sourceElement(_, spec, _) or - sinkElement(_, spec, _) + sourceElement(_, spec, _, _) or + sinkElement(_, spec, _, _) } private module AccessPath = AccessPathSyntax::AccessPath; @@ -1563,7 +1563,7 @@ module Make< InterpretNode ref, SourceSinkAccessPath output, string kind ) { exists(SourceOrSinkElement e | - sourceElement(e, output, kind) and + sourceElement(e, output, kind, _) and if outputNeedsReferenceExt(output.getToken(0)) then e = ref.getCallTarget() else e = ref.asElement() @@ -1577,7 +1577,7 @@ module Make< private predicate sinkElementRef(InterpretNode ref, SourceSinkAccessPath input, string kind) { exists(SourceOrSinkElement e | - sinkElement(e, input, kind) and + sinkElement(e, input, kind, _) and if inputNeedsReferenceExt(input.getToken(0)) then e = ref.getCallTarget() else e = ref.asElement() @@ -1692,39 +1692,66 @@ module Make< interpretInput(input, input.getNumToken(), ref, node) ) } + + /** A source or sink relevant for testing. */ + signature class RelevantSourceOrSinkElementSig extends SourceOrSinkElement { + /** Gets the string representation of this callable used by `source/1` or `sink/1`. */ + string getCallableCsv(); + } + + /** Provides query predicates for outputting a set of relevant sources and sinks. */ + module TestSourceSinkOutput< + RelevantSourceOrSinkElementSig RelevantSource, RelevantSourceOrSinkElementSig RelevantSink> + { + /** + * Holds if there exists a relevant source callable with information roughly corresponding to `csv`. + * Used for testing. + * The syntax is: "namespace;type;overrides;name;signature;ext;outputspec;kind;provenance", + * ext is hardcoded to empty. + */ + query predicate source(string csv) { + exists(RelevantSource s, string output, string kind, Provenance provenance | + sourceElement(s, output, kind, provenance) and + csv = + s.getCallableCsv() // Callable information + + output + ";" // output + + kind + ";" // kind + + provenance // provenance + ) + } + + /** + * Holds if there exists a relevant sink callable with information roughly corresponding to `csv`. + * Used for testing. + * The syntax is: "namespace;type;overrides;name;signature;ext;inputspec;kind;provenance", + * ext is hardcoded to empty. + */ + query predicate sink(string csv) { + exists(RelevantSink s, string input, string kind, Provenance provenance | + sinkElement(s, input, kind, provenance) and + csv = + s.getCallableCsv() // Callable information + + input + ";" // input + + kind + ";" // kind + + provenance // provenance + ) + } + } } } + /** A summarized callable relevant for testing. */ + signature class RelevantSummarizedCallableSig extends SummarizedCallableImpl { + /** Gets the string representation of this callable used by `summary/1`. */ + string getCallableCsv(); + + predicate relevantSummary( + SummaryComponentStack input, SummaryComponentStack output, boolean preservesValue + ); + } + /** Provides a query predicate for outputting a set of relevant flow summaries. */ - module TestOutput { - final private class SummarizedCallableImplFinal = SummarizedCallableImpl; - - /** A flow summary to include in the `summary/1` query predicate. */ - abstract class RelevantSummarizedCallable extends SummarizedCallableImplFinal { - /** Gets the string representation of this callable used by `summary/1`. */ - abstract string getCallableCsv(); - - /** Holds if flow is propagated between `input` and `output`. */ - predicate relevantSummary( - SummaryComponentStack input, SummaryComponentStack output, boolean preservesValue - ) { - super.propagatesFlow(input, output, preservesValue) - } - } - - /** A model to include in the `neutral/1` query predicate. */ - abstract class RelevantNeutralCallable instanceof NeutralCallable { - /** Gets the string representation of this callable used by `neutral/1`. */ - abstract string getCallableCsv(); - - /** - * Gets the kind of the neutral. - */ - string getKind() { result = super.getKind() } - - string toString() { result = super.toString() } - } - + module TestSummaryOutput { /** Render the kind in the format used in flow summaries. */ private string renderKind(boolean preservesValue) { preservesValue = true and result = "value" @@ -1739,15 +1766,9 @@ module Make< c.hasProvenance(result) } - private string renderProvenanceNeutral(NeutralCallable c) { - exists(Provenance p | p.isManual() and c.hasProvenance(p) and result = p.toString()) - or - not c.hasManualModel() and - c.hasProvenance(result) - } - /** - * A query predicate for outputting flow summaries in semi-colon separated format in QL tests. + * Holds if there exists a relevant summary callable with information roughly corresponding to `csv`. + * Used for testing. * The syntax is: "namespace;type;overrides;name;signature;ext;inputspec;outputspec;kind;provenance", * ext is hardcoded to empty. */ @@ -1765,9 +1786,25 @@ module Make< + renderProvenance(c) // provenance ) } + } + + /** A summarized callable relevant for testing. */ + signature class RelevantNeutralCallableSig extends NeutralCallable { + /** Gets the string representation of this callable used by `neutral/1`. */ + string getCallableCsv(); + } + + module TestNeutralOutput { + private string renderProvenance(NeutralCallable c) { + exists(Provenance p | p.isManual() and c.hasProvenance(p) and result = p.toString()) + or + not c.hasManualModel() and + c.hasProvenance(result) + } /** - * Holds if a neutral model `csv` exists (semi-colon separated format). Used for testing purposes. + * Holds if there exists a relevant neutral callable with information roughly corresponding to `csv`. + * Used for testing. * The syntax is: "namespace;type;name;signature;kind;provenance"", */ query predicate neutral(string csv) { @@ -1775,7 +1812,7 @@ module Make< csv = c.getCallableCsv() // Callable information + c.getKind() + ";" // kind - + renderProvenanceNeutral(c) // provenance + + renderProvenance(c) // provenance ) } } diff --git a/shared/dataflow/qlpack.yml b/shared/dataflow/qlpack.yml index 1e7becf71c4..162b5dd0490 100644 --- a/shared/dataflow/qlpack.yml +++ b/shared/dataflow/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/dataflow -version: 0.2.1-dev +version: 0.2.5-dev groups: shared library: true dependencies: diff --git a/shared/mad/CHANGELOG.md b/shared/mad/CHANGELOG.md index 4d09057118c..afeee789487 100644 --- a/shared/mad/CHANGELOG.md +++ b/shared/mad/CHANGELOG.md @@ -1,3 +1,19 @@ +## 0.2.13 + +No user-facing changes. + +## 0.2.12 + +No user-facing changes. + +## 0.2.11 + +No user-facing changes. + +## 0.2.10 + +No user-facing changes. + ## 0.2.9 No user-facing changes. diff --git a/shared/mad/change-notes/released/0.2.10.md b/shared/mad/change-notes/released/0.2.10.md new file mode 100644 index 00000000000..81c9722b19f --- /dev/null +++ b/shared/mad/change-notes/released/0.2.10.md @@ -0,0 +1,3 @@ +## 0.2.10 + +No user-facing changes. diff --git a/shared/mad/change-notes/released/0.2.11.md b/shared/mad/change-notes/released/0.2.11.md new file mode 100644 index 00000000000..1037f9194f8 --- /dev/null +++ b/shared/mad/change-notes/released/0.2.11.md @@ -0,0 +1,3 @@ +## 0.2.11 + +No user-facing changes. diff --git a/shared/mad/change-notes/released/0.2.12.md b/shared/mad/change-notes/released/0.2.12.md new file mode 100644 index 00000000000..590eb0cedd1 --- /dev/null +++ b/shared/mad/change-notes/released/0.2.12.md @@ -0,0 +1,3 @@ +## 0.2.12 + +No user-facing changes. diff --git a/shared/mad/change-notes/released/0.2.13.md b/shared/mad/change-notes/released/0.2.13.md new file mode 100644 index 00000000000..42f11678bd3 --- /dev/null +++ b/shared/mad/change-notes/released/0.2.13.md @@ -0,0 +1,3 @@ +## 0.2.13 + +No user-facing changes. diff --git a/shared/mad/codeql-pack.release.yml b/shared/mad/codeql-pack.release.yml index d021cf0a6be..979eb20092e 100644 --- a/shared/mad/codeql-pack.release.yml +++ b/shared/mad/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.2.9 +lastReleaseVersion: 0.2.13 diff --git a/shared/mad/codeql/mad/ModelValidation.qll b/shared/mad/codeql/mad/ModelValidation.qll index bb3b8c174b9..20bcdd1908c 100644 --- a/shared/mad/codeql/mad/ModelValidation.qll +++ b/shared/mad/codeql/mad/ModelValidation.qll @@ -33,8 +33,8 @@ module KindValidation { "bean-validation", "fragment-injection", "groovy-injection", "hostname-verification", "information-leak", "intent-redirection", "jexl-injection", "jndi-injection", "mvel-injection", "notification", "ognl-injection", "pending-intents", - "response-splitting", "trust-boundary-violation", "template-injection", "xpath-injection", - "xslt-injection", + "response-splitting", "trust-boundary-violation", "template-injection", "url-forward", + "xpath-injection", "xslt-injection", // JavaScript-only currently, but may be shared in the future "mongodb.sink", "nosql-injection", "unsafe-deserialization", // Swift-only currently, but may be shared in the future diff --git a/shared/mad/codeql/mad/dynamic/GraphExport.qll b/shared/mad/codeql/mad/dynamic/GraphExport.qll new file mode 100644 index 00000000000..adcfcd747ed --- /dev/null +++ b/shared/mad/codeql/mad/dynamic/GraphExport.qll @@ -0,0 +1,238 @@ +/** + * Contains predicates for converting an arbitrary graph to a set of `typeModel` rows. + */ + +private import codeql.util.Location + +/** + * Concatenates two access paths, separating them by `.` unless one of them is empty. + */ +bindingset[x, y] +string join(string x, string y) { + if x = "" or y = "" then result = x + y else result = x + "." + y +} + +private module WithLocation { + signature class NodeSig { + /** Gets the location of this node if it has one. */ + Location getLocation(); + + /** Gets a string representation of this node. */ + string toString(); + } +} + +/** + * Specifies a graph to export in `GraphExport`. + */ +signature module GraphExportSig::NodeSig Node> { + /** + * Holds if an edge `pred -> succ` exist with the access path `path`. + */ + bindingset[pred] + predicate edge(Node pred, string path, Node succ); + + /** + * Holds if `node` is exposed to downstream packages with the given `(type, path)` tuple. + * + * A consumer of the exported graph should be able to interpret the `(type, path)` pair + * without having access to the current codebase. + */ + predicate exposedName(Node node, string type, string path); + + /** + * Holds if `name` is a good name for `node` that should be used in case the node needs + * to be named with a type name. + * + * Should not hold for nodes that are named via `exposedName`. + */ + predicate suggestedName(Node node, string name); + + /** + * Holds if `node` must be named if it part of the exported graph. + */ + predicate mustBeNamed(Node node); + + /** + * Holds if the exported graph should contain `node`, if it is reachable from an exposed node. + * + * This ensures that all paths leading from an exposed node to `node` will be exported. + */ + predicate shouldContain(Node node); + + /** + * Holds if `host` has a method that returns `this`, and `path` is the path from `host` + * to the method followed by the appropriate `ReturnValue` token. + * + * For example, if the method is named `m` then `path` should be `Member[m].ReturnValue` + * or `Method[m].ReturnValue`. + */ + bindingset[host] + predicate hasTypeSummary(Node host, string path); + + /** + * Holds if paths going through `node` should be blocked. + * + * For example, this can be the case for functions that are public at runtime + * but intended to be private. + */ + predicate shouldNotContain(Node node); +} + +/** + * Module for exporting an arbitrary graph as models-as-data rows. + */ +module GraphExport< + LocationSig Location, WithLocation::NodeSig Node, GraphExportSig S> +{ + private import S + + private Node getAnExposedNode() { + not shouldNotContain(result) and + ( + exposedName(result, _, _) + or + edge(getAnExposedNode(), _, result) + ) + } + + pragma[nomagic] + private predicate exposedEdge(Node pred, string path, Node succ) { + // Materialize this relation so we can access 'edge' without binding set on 'pred' + pred = getAnExposedNode() and + edge(pred, path, succ) + } + + private Node getARelevantNode() { + result = getAnExposedNode() and + shouldContain(result) + or + exposedEdge(result, _, getARelevantNode()) + } + + final private class FinalNode = Node; + + private class RelevantNode extends FinalNode { + RelevantNode() { this = getARelevantNode() } + } + + pragma[inline] + private RelevantNode getAPredecessor(RelevantNode node, string path) { + exposedEdge(result, path, node) + } + + private predicate hasPrettyName(RelevantNode node) { + exposedName(node, _, "") + or + suggestedName(node, _) + } + + private predicate nodeMustBeNamed(RelevantNode node) { + exposedName(node, _, "") + or + S::mustBeNamed(node) + or + strictcount(getAPredecessor(node, _)) > 1 + } + + /** Gets a type-name to use as a prefix, in case we need to synthesize a name. */ + private string getAPrefixTypeName(RelevantNode node) { + result = + min(string prefix | + exists(string type, string path | + exposedName(node, type, path) and + prefix = join(type, path) + ) + or + suggestedName(node, prefix) + | + prefix + ) + or + not hasPrettyName(node) and + result = getAPrefixTypeName(getAPredecessor(node, _)) + } + + /** + * Holds if a named type exists or will be generated for `node`. + */ + private predicate isSyntheticallyNamedNode(RelevantNode node, string prefix) { + nodeMustBeNamed(node) and + not hasPrettyName(node) and + prefix = min(getAPrefixTypeName(node)) + } + + /** + * Gets a synthetic type name to generate for `node`. + */ + private string getSyntheticName(RelevantNode node) { + exists(int k, string prefixTypeName | + node = + rank[k](RelevantNode n, string path, int startline, int startcol, int endline, int endcol | + isSyntheticallyNamedNode(n, prefixTypeName) and + n.getLocation().hasLocationInfo(path, startline, startcol, endline, endcol) + | + // Use location information for an arbitrary ordering + // TODO: improve support for nodes without a location, currently they can cause FNs + n order by path, startline, startcol, endline, endcol + ) and + result = prefixTypeName + "~expr" + k + ) + } + + private string getNodeName(RelevantNode node) { + nodeMustBeNamed(node) and + ( + exposedName(node, result, "") + or + suggestedName(node, result) and + not exposedName(node, _, "") + or + result = getSyntheticName(node) + ) + } + + /** + * Holds if `(type, path)` resolves to `node` in the exported graph. + */ + predicate pathToNode(string type, string path, RelevantNode node) { + type = getNodeName(node) and + path = "" + or + exposedName(node, type, path) + or + not nodeMustBeNamed(node) and + exists(string prevPath, string step | + pathToNode(type, prevPath, getAPredecessor(node, step)) and + path = join(prevPath, step) + ) + } + + /** + * Holds if `type1, type2, path` should be emitted as a type row. + * + * That is, `(type2, path)` leads to an value belonging to `type1`. + */ + predicate typeModel(string type1, string type2, string path) { + exists(string prevPath, string step, RelevantNode node | + type1 = getNodeName(node) and + pathToNode(type2, prevPath, getAPredecessor(node, step)) and + path = join(prevPath, step) + ) and + not (type1 = type2 and path = "") + } + + /** + * Holds if `type, path, input, output, kind` should be emitted as a summary row. + * + * This is only used to emit type propagation summaries, that is, summaries of kind `type`. + */ + predicate summaryModel(string type, string path, string input, string output, string kind) { + exists(RelevantNode host | + pathToNode(type, path, host) and + hasTypeSummary(host, output) and + input = "" and + kind = "type" + ) + } +} diff --git a/shared/mad/qlpack.yml b/shared/mad/qlpack.yml index 22c8f271ccc..1bdf6602e3d 100644 --- a/shared/mad/qlpack.yml +++ b/shared/mad/qlpack.yml @@ -1,6 +1,7 @@ name: codeql/mad -version: 0.2.10-dev +version: 0.2.14-dev groups: shared library: true -dependencies: null +dependencies: + codeql/util: ${workspace} warnOnImplicitThis: true diff --git a/shared/rangeanalysis/CHANGELOG.md b/shared/rangeanalysis/CHANGELOG.md index 5b8dbcfab22..465ab789d4a 100644 --- a/shared/rangeanalysis/CHANGELOG.md +++ b/shared/rangeanalysis/CHANGELOG.md @@ -1,3 +1,19 @@ +## 0.0.12 + +No user-facing changes. + +## 0.0.11 + +No user-facing changes. + +## 0.0.10 + +No user-facing changes. + +## 0.0.9 + +No user-facing changes. + ## 0.0.8 No user-facing changes. diff --git a/shared/rangeanalysis/change-notes/released/0.0.10.md b/shared/rangeanalysis/change-notes/released/0.0.10.md new file mode 100644 index 00000000000..22391080fd4 --- /dev/null +++ b/shared/rangeanalysis/change-notes/released/0.0.10.md @@ -0,0 +1,3 @@ +## 0.0.10 + +No user-facing changes. diff --git a/shared/rangeanalysis/change-notes/released/0.0.11.md b/shared/rangeanalysis/change-notes/released/0.0.11.md new file mode 100644 index 00000000000..19a2a55bd68 --- /dev/null +++ b/shared/rangeanalysis/change-notes/released/0.0.11.md @@ -0,0 +1,3 @@ +## 0.0.11 + +No user-facing changes. diff --git a/shared/rangeanalysis/change-notes/released/0.0.12.md b/shared/rangeanalysis/change-notes/released/0.0.12.md new file mode 100644 index 00000000000..0e206033bc4 --- /dev/null +++ b/shared/rangeanalysis/change-notes/released/0.0.12.md @@ -0,0 +1,3 @@ +## 0.0.12 + +No user-facing changes. diff --git a/shared/rangeanalysis/change-notes/released/0.0.9.md b/shared/rangeanalysis/change-notes/released/0.0.9.md new file mode 100644 index 00000000000..c9e17c6d6cf --- /dev/null +++ b/shared/rangeanalysis/change-notes/released/0.0.9.md @@ -0,0 +1,3 @@ +## 0.0.9 + +No user-facing changes. diff --git a/shared/rangeanalysis/codeql-pack.release.yml b/shared/rangeanalysis/codeql-pack.release.yml index 58fdc6b45de..997fb8da83c 100644 --- a/shared/rangeanalysis/codeql-pack.release.yml +++ b/shared/rangeanalysis/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.0.8 +lastReleaseVersion: 0.0.12 diff --git a/shared/rangeanalysis/qlpack.yml b/shared/rangeanalysis/qlpack.yml index 836fe51ee34..bdf15a5964d 100644 --- a/shared/rangeanalysis/qlpack.yml +++ b/shared/rangeanalysis/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/rangeanalysis -version: 0.0.9-dev +version: 0.0.13-dev groups: shared library: true dependencies: diff --git a/shared/regex/CHANGELOG.md b/shared/regex/CHANGELOG.md index cd5f91f71ec..6b0950887f9 100644 --- a/shared/regex/CHANGELOG.md +++ b/shared/regex/CHANGELOG.md @@ -1,3 +1,19 @@ +## 0.2.13 + +No user-facing changes. + +## 0.2.12 + +No user-facing changes. + +## 0.2.11 + +No user-facing changes. + +## 0.2.10 + +No user-facing changes. + ## 0.2.9 No user-facing changes. diff --git a/shared/regex/change-notes/released/0.2.10.md b/shared/regex/change-notes/released/0.2.10.md new file mode 100644 index 00000000000..81c9722b19f --- /dev/null +++ b/shared/regex/change-notes/released/0.2.10.md @@ -0,0 +1,3 @@ +## 0.2.10 + +No user-facing changes. diff --git a/shared/regex/change-notes/released/0.2.11.md b/shared/regex/change-notes/released/0.2.11.md new file mode 100644 index 00000000000..1037f9194f8 --- /dev/null +++ b/shared/regex/change-notes/released/0.2.11.md @@ -0,0 +1,3 @@ +## 0.2.11 + +No user-facing changes. diff --git a/shared/regex/change-notes/released/0.2.12.md b/shared/regex/change-notes/released/0.2.12.md new file mode 100644 index 00000000000..590eb0cedd1 --- /dev/null +++ b/shared/regex/change-notes/released/0.2.12.md @@ -0,0 +1,3 @@ +## 0.2.12 + +No user-facing changes. diff --git a/shared/regex/change-notes/released/0.2.13.md b/shared/regex/change-notes/released/0.2.13.md new file mode 100644 index 00000000000..42f11678bd3 --- /dev/null +++ b/shared/regex/change-notes/released/0.2.13.md @@ -0,0 +1,3 @@ +## 0.2.13 + +No user-facing changes. diff --git a/shared/regex/codeql-pack.release.yml b/shared/regex/codeql-pack.release.yml index d021cf0a6be..979eb20092e 100644 --- a/shared/regex/codeql-pack.release.yml +++ b/shared/regex/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.2.9 +lastReleaseVersion: 0.2.13 diff --git a/shared/regex/qlpack.yml b/shared/regex/qlpack.yml index ea3f7f9b238..166f8c54d5d 100644 --- a/shared/regex/qlpack.yml +++ b/shared/regex/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/regex -version: 0.2.10-dev +version: 0.2.14-dev groups: shared library: true dependencies: diff --git a/shared/ssa/CHANGELOG.md b/shared/ssa/CHANGELOG.md index 01acfae0148..7b073dbfe7b 100644 --- a/shared/ssa/CHANGELOG.md +++ b/shared/ssa/CHANGELOG.md @@ -1,3 +1,19 @@ +## 0.2.13 + +No user-facing changes. + +## 0.2.12 + +No user-facing changes. + +## 0.2.11 + +No user-facing changes. + +## 0.2.10 + +No user-facing changes. + ## 0.2.9 No user-facing changes. diff --git a/shared/ssa/change-notes/released/0.2.10.md b/shared/ssa/change-notes/released/0.2.10.md new file mode 100644 index 00000000000..81c9722b19f --- /dev/null +++ b/shared/ssa/change-notes/released/0.2.10.md @@ -0,0 +1,3 @@ +## 0.2.10 + +No user-facing changes. diff --git a/shared/ssa/change-notes/released/0.2.11.md b/shared/ssa/change-notes/released/0.2.11.md new file mode 100644 index 00000000000..1037f9194f8 --- /dev/null +++ b/shared/ssa/change-notes/released/0.2.11.md @@ -0,0 +1,3 @@ +## 0.2.11 + +No user-facing changes. diff --git a/shared/ssa/change-notes/released/0.2.12.md b/shared/ssa/change-notes/released/0.2.12.md new file mode 100644 index 00000000000..590eb0cedd1 --- /dev/null +++ b/shared/ssa/change-notes/released/0.2.12.md @@ -0,0 +1,3 @@ +## 0.2.12 + +No user-facing changes. diff --git a/shared/ssa/change-notes/released/0.2.13.md b/shared/ssa/change-notes/released/0.2.13.md new file mode 100644 index 00000000000..42f11678bd3 --- /dev/null +++ b/shared/ssa/change-notes/released/0.2.13.md @@ -0,0 +1,3 @@ +## 0.2.13 + +No user-facing changes. diff --git a/shared/ssa/codeql-pack.release.yml b/shared/ssa/codeql-pack.release.yml index d021cf0a6be..979eb20092e 100644 --- a/shared/ssa/codeql-pack.release.yml +++ b/shared/ssa/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.2.9 +lastReleaseVersion: 0.2.13 diff --git a/shared/ssa/codeql/ssa/Ssa.qll b/shared/ssa/codeql/ssa/Ssa.qll index 5445a71296b..e08953ebb65 100644 --- a/shared/ssa/codeql/ssa/Ssa.qll +++ b/shared/ssa/codeql/ssa/Ssa.qll @@ -473,7 +473,7 @@ module Make Input> { } pragma[noinline] - private predicate ssaDefReachesThroughBlock(DefinitionExt def, BasicBlock bb) { + predicate ssaDefReachesThroughBlock(DefinitionExt def, BasicBlock bb) { exists(SourceVariable v | ssaDefReachesEndOfBlockExt(bb, def, v) and not defOccursInBlock(_, bb, v, _) @@ -741,6 +741,16 @@ module Make Input> { defAdjacentRead(def, bb1, bb2, i2) } + private predicate lastRefRedefExtSameBlock( + DefinitionExt def, SourceVariable v, BasicBlock bb, int i, DefinitionExt next + ) { + exists(int rnk, int j | + rnk = ssaDefRank(def, v, bb, i, _) and + next.definesAt(v, bb, j, _) and + rnk + 1 = ssaRefRank(bb, j, v, ssaDefExt()) + ) + } + /** * NB: If this predicate is exposed, it should be cached. * @@ -753,11 +763,7 @@ module Make Input> { DefinitionExt def, SourceVariable v, BasicBlock bb, int i, DefinitionExt next ) { // Next reference to `v` inside `bb` is a write - exists(int rnk, int j | - rnk = ssaDefRank(def, v, bb, i, _) and - next.definesAt(v, bb, j, _) and - rnk + 1 = ssaRefRank(bb, j, v, ssaDefExt()) - ) + lastRefRedefExtSameBlock(def, v, bb, i, next) or // Can reach a write using one or more steps lastSsaRefExt(def, v, bb, i) and @@ -767,6 +773,38 @@ module Make Input> { ) } + /** + * NB: If this predicate is exposed, it should be cached. + * + * Holds if the node at index `i` in `bb` is a last reference to SSA definition + * `def`. The reference is last because it can reach another write `next`, + * without passing through another read or write. + * + * The path from node `i` in `bb` to `next` goes via basic block `input`, which is + * either a predecessor of the basic block of `next`, or `input = bb` in case `next` + * occurs in basic block `bb`. + */ + pragma[nomagic] + predicate lastRefRedefExt( + DefinitionExt def, SourceVariable v, BasicBlock bb, int i, BasicBlock input, DefinitionExt next + ) { + // Next reference to `v` inside `bb` is a write + lastRefRedefExtSameBlock(def, v, bb, i, next) and + input = bb + or + // Can reach a write using one or more steps + lastSsaRefExt(def, v, bb, i) and + exists(BasicBlock bb2 | + input = getABasicBlockPredecessor(bb2) and + 1 = ssaDefRank(next, v, bb2, _, ssaDefExt()) + | + input = bb + or + varBlockReachesExt(def, v, bb, input) and + ssaDefReachesThroughBlock(def, input) + ) + } + /** * NB: If this predicate is exposed, it should be cached. * diff --git a/shared/ssa/qlpack.yml b/shared/ssa/qlpack.yml index 19304ad107f..ddfa057d1ca 100644 --- a/shared/ssa/qlpack.yml +++ b/shared/ssa/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ssa -version: 0.2.10-dev +version: 0.2.14-dev groups: shared library: true dependencies: diff --git a/shared/threat-models/CHANGELOG.md b/shared/threat-models/CHANGELOG.md index fba2a870356..83a42fb0551 100644 --- a/shared/threat-models/CHANGELOG.md +++ b/shared/threat-models/CHANGELOG.md @@ -1,3 +1,19 @@ +## 0.0.12 + +No user-facing changes. + +## 0.0.11 + +No user-facing changes. + +## 0.0.10 + +No user-facing changes. + +## 0.0.9 + +No user-facing changes. + ## 0.0.8 No user-facing changes. diff --git a/shared/threat-models/change-notes/released/0.0.10.md b/shared/threat-models/change-notes/released/0.0.10.md new file mode 100644 index 00000000000..22391080fd4 --- /dev/null +++ b/shared/threat-models/change-notes/released/0.0.10.md @@ -0,0 +1,3 @@ +## 0.0.10 + +No user-facing changes. diff --git a/shared/threat-models/change-notes/released/0.0.11.md b/shared/threat-models/change-notes/released/0.0.11.md new file mode 100644 index 00000000000..19a2a55bd68 --- /dev/null +++ b/shared/threat-models/change-notes/released/0.0.11.md @@ -0,0 +1,3 @@ +## 0.0.11 + +No user-facing changes. diff --git a/shared/threat-models/change-notes/released/0.0.12.md b/shared/threat-models/change-notes/released/0.0.12.md new file mode 100644 index 00000000000..0e206033bc4 --- /dev/null +++ b/shared/threat-models/change-notes/released/0.0.12.md @@ -0,0 +1,3 @@ +## 0.0.12 + +No user-facing changes. diff --git a/shared/threat-models/change-notes/released/0.0.9.md b/shared/threat-models/change-notes/released/0.0.9.md new file mode 100644 index 00000000000..c9e17c6d6cf --- /dev/null +++ b/shared/threat-models/change-notes/released/0.0.9.md @@ -0,0 +1,3 @@ +## 0.0.9 + +No user-facing changes. diff --git a/shared/threat-models/codeql-pack.release.yml b/shared/threat-models/codeql-pack.release.yml index 58fdc6b45de..997fb8da83c 100644 --- a/shared/threat-models/codeql-pack.release.yml +++ b/shared/threat-models/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.0.8 +lastReleaseVersion: 0.0.12 diff --git a/shared/threat-models/qlpack.yml b/shared/threat-models/qlpack.yml index d0ed9a913b2..2a03df5358e 100644 --- a/shared/threat-models/qlpack.yml +++ b/shared/threat-models/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/threat-models -version: 0.0.9-dev +version: 0.0.13-dev library: true groups: shared dataExtensions: diff --git a/shared/tree-sitter-extractor/src/extractor/mod.rs b/shared/tree-sitter-extractor/src/extractor/mod.rs index 0d493ebd9e1..d26e5e45975 100644 --- a/shared/tree-sitter-extractor/src/extractor/mod.rs +++ b/shared/tree-sitter-extractor/src/extractor/mod.rs @@ -209,10 +209,10 @@ struct Visitor<'a> { diagnostics_writer: &'a mut diagnostics::LogWriter, /// A trap::Writer to accumulate trap entries trap_writer: &'a mut trap::Writer, - /// A counter for top-level child nodes - toplevel_child_counter: usize, - /// Language-specific name of the AST info table - ast_node_info_table_name: String, + /// Language-specific name of the AST location table + ast_node_location_table_name: String, + /// Language-specific name of the AST parent table + ast_node_parent_table_name: String, /// Language-specific name of the tokeninfo table tokeninfo_table_name: String, /// A lookup table from type name to node types @@ -242,8 +242,8 @@ impl<'a> Visitor<'a> { source, diagnostics_writer, trap_writer, - toplevel_child_counter: 0, - ast_node_info_table_name: format!("{}_ast_node_info", language_prefix), + ast_node_location_table_name: format!("{}_ast_node_location", language_prefix), + ast_node_parent_table_name: format!("{}_ast_node_parent", language_prefix), tokeninfo_table_name: format!("{}_tokeninfo", language_prefix), schema, stack: Vec::new(), @@ -342,27 +342,29 @@ impl<'a> Visitor<'a> { }) .unwrap(); let mut valid = true; - let (parent_id, parent_index) = match self.stack.last_mut() { + let parent_info = match self.stack.last_mut() { Some(p) if !node.is_extra() => { p.1 += 1; - (p.0, p.1 - 1) - } - _ => { - self.toplevel_child_counter += 1; - (self.file_label, self.toplevel_child_counter - 1) + Some((p.0, p.1 - 1)) } + _ => None, }; match &table.kind { EntryKind::Token { kind_id, .. } => { self.trap_writer.add_tuple( - &self.ast_node_info_table_name, - vec![ - trap::Arg::Label(id), - trap::Arg::Label(parent_id), - trap::Arg::Int(parent_index), - trap::Arg::Label(loc_label), - ], + &self.ast_node_location_table_name, + vec![trap::Arg::Label(id), trap::Arg::Label(loc_label)], ); + if let Some((parent_id, parent_index)) = parent_info { + self.trap_writer.add_tuple( + &self.ast_node_parent_table_name, + vec![ + trap::Arg::Label(id), + trap::Arg::Label(parent_id), + trap::Arg::Int(parent_index), + ], + ); + }; self.trap_writer.add_tuple( &self.tokeninfo_table_name, vec![ @@ -378,14 +380,19 @@ impl<'a> Visitor<'a> { } => { if let Some(args) = self.complex_node(&node, fields, &child_nodes, id) { self.trap_writer.add_tuple( - &self.ast_node_info_table_name, - vec![ - trap::Arg::Label(id), - trap::Arg::Label(parent_id), - trap::Arg::Int(parent_index), - trap::Arg::Label(loc_label), - ], + &self.ast_node_location_table_name, + vec![trap::Arg::Label(id), trap::Arg::Label(loc_label)], ); + if let Some((parent_id, parent_index)) = parent_info { + self.trap_writer.add_tuple( + &self.ast_node_parent_table_name, + vec![ + trap::Arg::Label(id), + trap::Arg::Label(parent_id), + trap::Arg::Int(parent_index), + ], + ); + }; let mut all_args = vec![trap::Arg::Label(id)]; all_args.extend(args); self.trap_writer.add_tuple(table_name, all_args); diff --git a/shared/tree-sitter-extractor/src/generator/mod.rs b/shared/tree-sitter-extractor/src/generator/mod.rs index 0d01deae57f..ea41f3190e6 100644 --- a/shared/tree-sitter-extractor/src/generator/mod.rs +++ b/shared/tree-sitter-extractor/src/generator/mod.rs @@ -52,8 +52,8 @@ pub fn generate( for language in languages { let prefix = node_types::to_snake_case(&language.name); let ast_node_name = format!("{}_ast_node", &prefix); - let node_info_table_name = format!("{}_ast_node_info", &prefix); - let ast_node_parent_name = format!("{}_ast_node_parent", &prefix); + let node_location_table_name = format!("{}_ast_node_location", &prefix); + let node_parent_table_name = format!("{}_ast_node_parent", &prefix); let token_name = format!("{}_token", &prefix); let tokeninfo_name = format!("{}_tokeninfo", &prefix); let reserved_word_name = format!("{}_reserved_word", &prefix); @@ -72,13 +72,12 @@ pub fn generate( name: &ast_node_name, members: ast_node_members, }), - dbscheme::Entry::Union(dbscheme::Union { - name: &ast_node_parent_name, - members: [&ast_node_name, "file"].iter().cloned().collect(), - }), - dbscheme::Entry::Table(create_ast_node_info_table( - &node_info_table_name, - &ast_node_parent_name, + dbscheme::Entry::Table(create_ast_node_location_table( + &node_location_table_name, + &ast_node_name, + )), + dbscheme::Entry::Table(create_ast_node_parent_table( + &node_parent_table_name, &ast_node_name, )), ], @@ -87,7 +86,8 @@ pub fn generate( let mut body = vec![ ql::TopLevel::Class(ql_gen::create_ast_node_class( &ast_node_name, - &node_info_table_name, + &node_location_table_name, + &node_parent_table_name, )), ql::TopLevel::Class(ql_gen::create_token_class(&token_name, &tokeninfo_name)), ql::TopLevel::Class(ql_gen::create_reserved_word_class(&reserved_word_name)), @@ -335,18 +335,43 @@ fn convert_nodes( (entries, ast_node_members, token_kinds) } -/// Creates a dbscheme table specifying the parent node and location for each -/// AST node. +/// Creates a dbscheme table specifying the location for each AST node. /// /// # Arguments /// - `name` - the name of the table to create. -/// - `parent_name` - the name of the parent type. /// - `ast_node_name` - the name of the node child type. -fn create_ast_node_info_table<'a>( +fn create_ast_node_location_table<'a>( name: &'a str, - parent_name: &'a str, ast_node_name: &'a str, ) -> dbscheme::Table<'a> { + dbscheme::Table { + name, + columns: vec![ + dbscheme::Column { + db_type: dbscheme::DbColumnType::Int, + name: "node", + unique: true, + ql_type: ql::Type::At(ast_node_name), + ql_type_is_ref: true, + }, + dbscheme::Column { + unique: false, + db_type: dbscheme::DbColumnType::Int, + name: "loc", + ql_type: ql::Type::At("location_default"), + ql_type_is_ref: true, + }, + ], + keysets: None, + } +} + +/// Creates a dbscheme table specifying the parent node for each AST node. +/// +/// # Arguments +/// - `name` - the name of the table to create. +/// - `ast_node_name` - the name of the node child type. +fn create_ast_node_parent_table<'a>(name: &'a str, ast_node_name: &'a str) -> dbscheme::Table<'a> { dbscheme::Table { name, columns: vec![ @@ -361,7 +386,7 @@ fn create_ast_node_info_table<'a>( db_type: dbscheme::DbColumnType::Int, name: "parent", unique: false, - ql_type: ql::Type::At(parent_name), + ql_type: ql::Type::At(ast_node_name), ql_type_is_ref: true, }, dbscheme::Column { @@ -371,13 +396,6 @@ fn create_ast_node_info_table<'a>( ql_type: ql::Type::Int, ql_type_is_ref: true, }, - dbscheme::Column { - unique: false, - db_type: dbscheme::DbColumnType::Int, - name: "loc", - ql_type: ql::Type::At("location_default"), - ql_type_is_ref: true, - }, ], keysets: Some(vec!["parent", "parent_index"]), } diff --git a/shared/tree-sitter-extractor/src/generator/ql_gen.rs b/shared/tree-sitter-extractor/src/generator/ql_gen.rs index 4407cbdd32e..919ff43af42 100644 --- a/shared/tree-sitter-extractor/src/generator/ql_gen.rs +++ b/shared/tree-sitter-extractor/src/generator/ql_gen.rs @@ -4,7 +4,11 @@ use crate::{generator::ql, node_types}; /// Creates the hard-coded `AstNode` class that acts as a supertype of all /// classes we generate. -pub fn create_ast_node_class<'a>(ast_node: &'a str, node_info_table: &'a str) -> ql::Class<'a> { +pub fn create_ast_node_class<'a>( + ast_node: &'a str, + node_location_table: &'a str, + node_parent_table: &'a str, +) -> ql::Class<'a> { // Default implementation of `toString` calls `this.getAPrimaryQlClass()` let to_string = ql::Predicate { qldoc: Some(String::from( @@ -32,13 +36,8 @@ pub fn create_ast_node_class<'a>(ast_node: &'a str, node_info_table: &'a str) -> return_type: Some(ql::Type::Normal("L::Location")), formal_parameters: vec![], body: ql::Expression::Pred( - node_info_table, - vec![ - ql::Expression::Var("this"), - ql::Expression::Var("_"), // parent - ql::Expression::Var("_"), // parent index - ql::Expression::Var("result"), // location - ], + node_location_table, + vec![ql::Expression::Var("this"), ql::Expression::Var("result")], ), }; let get_a_field_or_child = create_none_predicate( @@ -55,12 +54,11 @@ pub fn create_ast_node_class<'a>(ast_node: &'a str, node_info_table: &'a str) -> return_type: Some(ql::Type::Normal("AstNode")), formal_parameters: vec![], body: ql::Expression::Pred( - node_info_table, + node_parent_table, vec![ ql::Expression::Var("this"), ql::Expression::Var("result"), - ql::Expression::Var("_"), // parent index - ql::Expression::Var("_"), // location + ql::Expression::Var("_"), ], ), }; @@ -74,12 +72,11 @@ pub fn create_ast_node_class<'a>(ast_node: &'a str, node_info_table: &'a str) -> return_type: Some(ql::Type::Int), formal_parameters: vec![], body: ql::Expression::Pred( - node_info_table, + node_parent_table, vec![ ql::Expression::Var("this"), - ql::Expression::Var("_"), // parent - ql::Expression::Var("result"), // parent index - ql::Expression::Var("_"), // location + ql::Expression::Var("_"), + ql::Expression::Var("result"), ], ), }; diff --git a/shared/tutorial/CHANGELOG.md b/shared/tutorial/CHANGELOG.md index 1db3a01af0b..32d42cbeb39 100644 --- a/shared/tutorial/CHANGELOG.md +++ b/shared/tutorial/CHANGELOG.md @@ -1,3 +1,19 @@ +## 0.2.13 + +No user-facing changes. + +## 0.2.12 + +No user-facing changes. + +## 0.2.11 + +No user-facing changes. + +## 0.2.10 + +No user-facing changes. + ## 0.2.9 No user-facing changes. diff --git a/shared/tutorial/change-notes/released/0.2.10.md b/shared/tutorial/change-notes/released/0.2.10.md new file mode 100644 index 00000000000..81c9722b19f --- /dev/null +++ b/shared/tutorial/change-notes/released/0.2.10.md @@ -0,0 +1,3 @@ +## 0.2.10 + +No user-facing changes. diff --git a/shared/tutorial/change-notes/released/0.2.11.md b/shared/tutorial/change-notes/released/0.2.11.md new file mode 100644 index 00000000000..1037f9194f8 --- /dev/null +++ b/shared/tutorial/change-notes/released/0.2.11.md @@ -0,0 +1,3 @@ +## 0.2.11 + +No user-facing changes. diff --git a/shared/tutorial/change-notes/released/0.2.12.md b/shared/tutorial/change-notes/released/0.2.12.md new file mode 100644 index 00000000000..590eb0cedd1 --- /dev/null +++ b/shared/tutorial/change-notes/released/0.2.12.md @@ -0,0 +1,3 @@ +## 0.2.12 + +No user-facing changes. diff --git a/shared/tutorial/change-notes/released/0.2.13.md b/shared/tutorial/change-notes/released/0.2.13.md new file mode 100644 index 00000000000..42f11678bd3 --- /dev/null +++ b/shared/tutorial/change-notes/released/0.2.13.md @@ -0,0 +1,3 @@ +## 0.2.13 + +No user-facing changes. diff --git a/shared/tutorial/codeql-pack.release.yml b/shared/tutorial/codeql-pack.release.yml index d021cf0a6be..979eb20092e 100644 --- a/shared/tutorial/codeql-pack.release.yml +++ b/shared/tutorial/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.2.9 +lastReleaseVersion: 0.2.13 diff --git a/shared/tutorial/qlpack.yml b/shared/tutorial/qlpack.yml index b595ae9ee70..a5430d0a98b 100644 --- a/shared/tutorial/qlpack.yml +++ b/shared/tutorial/qlpack.yml @@ -1,7 +1,7 @@ name: codeql/tutorial description: Library for the CodeQL detective tutorials, helping new users learn to write CodeQL queries. -version: 0.2.10-dev +version: 0.2.14-dev groups: shared library: true warnOnImplicitThis: true diff --git a/shared/typeflow/change-notes/2024-02-26-initial-version.md b/shared/typeflow/change-notes/2024-02-26-initial-version.md new file mode 100644 index 00000000000..6b3dc344938 --- /dev/null +++ b/shared/typeflow/change-notes/2024-02-26-initial-version.md @@ -0,0 +1,4 @@ +--- +category: feature +--- +* Initial release. Adds a library to implement type-flow analysis. diff --git a/shared/typeflow/codeql/typeflow/TypeFlow.qll b/shared/typeflow/codeql/typeflow/TypeFlow.qll new file mode 100644 index 00000000000..7518805ac56 --- /dev/null +++ b/shared/typeflow/codeql/typeflow/TypeFlow.qll @@ -0,0 +1,115 @@ +/** + * Provides predicates for giving improved type bounds on expressions. + * + * An inferred bound on the runtime type of an expression can be either exact + * or merely an upper bound. Bounds are only reported if they are likely to be + * better than the static bound, which can happen either if an inferred exact + * type has a subtype or if an inferred upper bound passed through at least one + * explicit or implicit cast that lost type information. + */ + +private import codeql.util.Location + +/** Provides the input specification. */ +signature module TypeFlowInput { + /** + * A node for which type information is available. For example, expressions + * and method declarations. + */ + class TypeFlowNode { + /** Gets a textual representation of this node. */ + string toString(); + + /** Gets the type of this node. */ + Type getType(); + + /** Gets the location of this node. */ + Location getLocation(); + } + + /** + * Holds if data can flow from `n1` to `n2` in one step, and `n1` is not + * necessarily functionally determined by `n2`. + */ + predicate joinStep(TypeFlowNode n1, TypeFlowNode n2); + + /** + * Holds if data can flow from `n1` to `n2` in one step, and `n1` is + * functionally determined by `n2`. + */ + predicate step(TypeFlowNode n1, TypeFlowNode n2); + + /** Holds if `n` represents a `null` value. */ + predicate isNullValue(TypeFlowNode n); + + /** + * Holds if `n` should be excluded from the set of null values even if + * the null analysis determines that `n` is always null. + */ + default predicate isExcludedFromNullAnalysis(TypeFlowNode n) { none() } + + /** A type. */ + class Type { + /** Gets a textual representation of this type. */ + string toString(); + + /** Gets a direct super type of this type. */ + Type getASupertype(); + } + + /** + * Gets the source declaration of this type, or `t` if `t` is already a + * source declaration. + */ + default Type getSourceDeclaration(Type t) { result = t } + + /** + * Gets the erased version of this type. The erasure of a erasure of a + * parameterized type is its generic counterpart, or `t` if `t` is already + * fully erased. + */ + default Type getErasure(Type t) { result = t } + + /** Gets a direct or indirect supertype of this type, including itself. */ + default Type getAnAncestor(Type sub) { + result = sub + or + exists(Type mid | result = mid.getASupertype() and sub = getAnAncestor(mid)) + } + + /** + * Holds if `t` is the most precise type of `n`, if any. + */ + predicate exactTypeBase(TypeFlowNode n, Type t); + + /** + * Holds if `n` has type `t` and this information is discarded, such that `t` + * might be a better type bound for nodes where `n` flows to. This might include + * multiple bounds for a single node. + */ + predicate typeFlowBaseCand(TypeFlowNode n, Type t); + + /** + * Holds if `n` is a value that is guarded by a disjunction of a dynamic type + * check that checks if `n` is an instance of type `t_i` where `t` is one of + * those `t_i`. + */ + default predicate instanceofDisjunctionGuarded(TypeFlowNode n, Type t) { none() } + + /** + * Holds if `t` is a raw type or parameterised type with unrestricted type + * arguments. + * + * By default, no types are unbound. + */ + default predicate unbound(Type t) { none() } +} + +private import internal.TypeFlowImpl as Impl + +/** + * Provides an implementation of type-flow using input `I`. + */ +module Make I> { + import Impl::TypeFlow +} diff --git a/shared/typeflow/codeql/typeflow/internal/TypeFlowImpl.qll b/shared/typeflow/codeql/typeflow/internal/TypeFlowImpl.qll new file mode 100644 index 00000000000..ac7de53f85a --- /dev/null +++ b/shared/typeflow/codeql/typeflow/internal/TypeFlowImpl.qll @@ -0,0 +1,476 @@ +private import codeql.typeflow.TypeFlow +private import codeql.util.Location +private import codeql.util.Unit + +module TypeFlow I> { + private import I + + /** Holds if `null` is the only value that flows to `n`. */ + predicate isNull(TypeFlowNode n) { + isNullValue(n) + or + exists(TypeFlowNode mid | isNull(mid) and step(mid, n)) + or + forex(TypeFlowNode mid | joinStep(mid, n) | isNull(mid)) and + not isExcludedFromNullAnalysis(n) + } + + /** + * Holds if data can flow from `n1` to `n2` in one step, `n1` is not necessarily + * functionally determined by `n2`, and `n1` might take a non-null value. + */ + private predicate joinStepNotNull(TypeFlowNode n1, TypeFlowNode n2) { + joinStep(n1, n2) and not isNull(n1) + } + + private predicate anyStep(TypeFlowNode n1, TypeFlowNode n2) { + joinStepNotNull(n1, n2) or step(n1, n2) + } + + private predicate sccEdge(TypeFlowNode n1, TypeFlowNode n2) { + anyStep(n1, n2) and anyStep+(n2, n1) + } + + private module Scc = QlBuiltins::EquivalenceRelation; + + private class TypeFlowScc = Scc::EquivalenceClass; + + /** Holds if `n` is part of an SCC of size 2 or more represented by `scc`. */ + private predicate sccRepr(TypeFlowNode n, TypeFlowScc scc) { scc = Scc::getEquivalenceClass(n) } + + private predicate sccJoinStepNotNull(TypeFlowNode n, TypeFlowScc scc) { + exists(TypeFlowNode mid | + joinStepNotNull(n, mid) and + sccRepr(mid, scc) and + not sccRepr(n, scc) + ) + } + + private signature class NodeSig; + + private signature module Edge { + class Node; + + predicate edge(TypeFlowNode n1, Node n2); + } + + private signature module RankedEdge { + predicate edgeRank(int r, TypeFlowNode n1, Node n2); + + int lastRank(Node n); + } + + private module RankEdge implements RankedEdge { + private import E + + /** + * Holds if `r` is a ranking of the incoming edges `(n1,n2)` to `n2`. The used + * ordering is not necessarily total, so the ranking may have gaps. + */ + private predicate edgeRank1(int r, TypeFlowNode n1, Node n2) { + n1 = + rank[r](TypeFlowNode n, int startline, int startcolumn | + edge(n, n2) and + n.getLocation().hasLocationInfo(_, startline, startcolumn, _, _) + | + n order by startline, startcolumn + ) + } + + /** + * Holds if `r2` is a ranking of the ranks from `edgeRank1`. This removes the + * gaps from the ranking. + */ + private predicate edgeRank2(int r2, int r1, Node n) { + r1 = rank[r2](int r | edgeRank1(r, _, n) | r) + } + + /** Holds if `r` is a ranking of the incoming edges `(n1,n2)` to `n2`. */ + predicate edgeRank(int r, TypeFlowNode n1, Node n2) { + exists(int r1 | + edgeRank1(r1, n1, n2) and + edgeRank2(r, r1, n2) + ) + } + + int lastRank(Node n) { result = max(int r | edgeRank(r, _, n)) } + } + + private signature module TypePropagation { + class Typ; + + predicate candType(TypeFlowNode n, Typ t); + + bindingset[t] + predicate supportsType(TypeFlowNode n, Typ t); + } + + /** Implements recursion through `forall` by way of edge ranking. */ + private module ForAll E, TypePropagation T> { + /** + * Holds if `t` is a bound that holds on one of the incoming edges to `n` and + * thus is a candidate bound for `n`. + */ + pragma[nomagic] + private predicate candJoinType(Node n, T::Typ t) { + exists(TypeFlowNode mid | + T::candType(mid, t) and + E::edgeRank(_, mid, n) + ) + } + + /** + * Holds if `t` is a candidate bound for `n` that is also valid for data coming + * through the edges into `n` ranked from `1` to `r`. + */ + private predicate flowJoin(int r, Node n, T::Typ t) { + ( + r = 1 and candJoinType(n, t) + or + flowJoin(r - 1, n, t) and E::edgeRank(r, _, n) + ) and + forall(TypeFlowNode mid | E::edgeRank(r, mid, n) | T::supportsType(mid, t)) + } + + /** + * Holds if `t` is a candidate bound for `n` that is also valid for data + * coming through all the incoming edges, and therefore is a valid bound for + * `n`. + */ + predicate flowJoin(Node n, T::Typ t) { flowJoin(E::lastRank(n), n, t) } + } + + private module JoinStep implements Edge { + class Node = TypeFlowNode; + + predicate edge = joinStepNotNull/2; + } + + private module SccJoinStep implements Edge { + class Node = TypeFlowScc; + + predicate edge = sccJoinStepNotNull/2; + } + + private module RankedJoinStep = RankEdge; + + private module RankedSccJoinStep = RankEdge; + + private module ExactTypePropagation implements TypePropagation { + class Typ = Type; + + predicate candType = exactType/2; + + predicate supportsType = exactType/2; + } + + /** + * Holds if the runtime type of `n` is exactly `t` and if this bound is a + * non-trivial lower bound, that is, `t` has a subtype. + */ + private predicate exactType(TypeFlowNode n, Type t) { + exactTypeBase(n, t) + or + exists(TypeFlowNode mid | exactType(mid, t) and step(mid, n)) + or + // The following is an optimized version of + // `forex(TypeFlowNode mid | joinStepNotNull(mid, n) | exactType(mid, t))` + ForAll::flowJoin(n, t) + or + exists(TypeFlowScc scc | + sccRepr(n, scc) and + // Optimized version of + // `forex(TypeFlowNode mid | sccJoinStepNotNull(mid, scc) | exactType(mid, t))` + ForAll::flowJoin(scc, t) + ) + } + + /** + * Gets the source declaration of a direct supertype of this type, excluding itself. + */ + pragma[nomagic] + private Type getASourceSupertype(Type t) { + result = getSourceDeclaration(t.getASupertype()) and + result != t + } + + /** + * Holds if `n` has type `t` and this information is discarded, such that `t` + * might be a better type bound for nodes where `n` flows to. This only includes + * the best such bound for each node. + */ + private predicate typeFlowBase(TypeFlowNode n, Type t) { + exists(Type te | + typeFlowBaseCand(n, t) and + te = getErasure(t) and + not exists(Type better | + typeFlowBaseCand(n, better) and + better != t and + not t.getASupertype+() = better + | + better.getASupertype+() = t or + getASourceSupertype+(getErasure(better)) = te + ) + ) + } + + private module TypeFlowPropagation implements TypePropagation { + class Typ = Type; + + predicate candType = typeFlow/2; + + bindingset[t] + predicate supportsType(TypeFlowNode mid, Type t) { + exists(Type midtyp | exactType(mid, midtyp) or typeFlow(mid, midtyp) | + getAnAncestor(pragma[only_bind_out](midtyp)) = t + ) + } + } + + /** + * Holds if the runtime type of `n` is bounded by `t` and if this bound is + * likely to be better than the static type of `n`. + */ + private predicate typeFlow(TypeFlowNode n, Type t) { + typeFlowBase(n, t) + or + exists(TypeFlowNode mid | typeFlow(mid, t) and step(mid, n)) + or + ForAll::flowJoin(n, t) + or + exists(TypeFlowScc scc | + sccRepr(n, scc) and + ForAll::flowJoin(scc, t) + ) + } + + pragma[nomagic] + private predicate erasedTypeBound(Type t) { + exists(Type t0 | typeFlow(_, t0) and t = getErasure(t0)) + } + + pragma[nomagic] + private predicate typeBound(Type t) { typeFlow(_, t) } + + /** + * Gets a direct or indirect supertype of this type. + * This does not include itself, unless this type is part of a cycle + * in the type hierarchy. + */ + private Type getAStrictAncestor(Type sub) { result = getAnAncestor(sub.getASupertype()) } + + /** + * Holds if we have a bound for `n` that is better than `t`. + */ + pragma[nomagic] + private predicate irrelevantBound(TypeFlowNode n, Type t) { + exists(Type bound | + typeFlow(n, bound) and + t = getAStrictAncestor(bound) and + typeBound(t) and + typeFlow(n, pragma[only_bind_into](t)) and + not getAnAncestor(t) = bound + or + n.getType() = pragma[only_bind_into](bound) and + typeFlow(n, t) and + t = getAnAncestor(bound) + ) + } + + /** + * Holds if we have a bound for `n` that is better than `t`, taking only erased + * types into account. + */ + pragma[nomagic] + private predicate irrelevantErasedBound(TypeFlowNode n, Type t) { + exists(Type bound | + typeFlow(n, bound) + or + n.getType() = bound and typeFlow(n, _) + | + t = getASourceSupertype+(getErasure(bound)) and + erasedTypeBound(t) + ) + } + + /** + * Holds if the runtime type of `n` is bounded by `t`, if this bound is likely + * to be better than the static type of `n`, and if this the best such bound. + */ + private predicate bestTypeFlow(TypeFlowNode n, Type t) { + typeFlow(n, t) and + not irrelevantErasedBound(n, getErasure(t)) and + not irrelevantBound(n, t) + } + + /** + * Holds if the runtime type of `n` is bounded by `t` and if this bound is + * likely to be better than the static type of `n`. The flag `exact` indicates + * whether `t` is an exact bound or merely an upper bound. + */ + predicate bestTypeFlow(TypeFlowNode n, Type t, boolean exact) { + exactType(n, t) and exact = true + or + not exactType(n, _) and bestTypeFlow(n, t) and exact = false + } + + private predicate bestTypeFlowOrTypeFlowBase(TypeFlowNode n, Type t, boolean exact) { + bestTypeFlow(n, t, exact) + or + typeFlowBase(n, t) and + exact = false and + not bestTypeFlow(n, _, _) + } + + /** + * Holds if `n` has type `t` and this information is not propagated as a + * universal bound to a subsequent node, such that `t` might form the basis for + * a union type bound for that node. + */ + private predicate unionTypeFlowBaseCand(TypeFlowNode n, Type t, boolean exact) { + exists(TypeFlowNode next | + joinStepNotNull(n, next) and + bestTypeFlowOrTypeFlowBase(n, t, exact) and + not bestTypeFlowOrTypeFlowBase(next, t, exact) and + not exactType(next, _) + ) + } + + private module HasUnionTypePropagation implements TypePropagation { + class Typ = Unit; + + predicate candType(TypeFlowNode mid, Unit unit) { + exists(unit) and + (unionTypeFlowBaseCand(mid, _, _) or hasUnionTypeFlow(mid)) + } + + predicate supportsType = candType/2; + } + + /** + * Holds if all incoming type flow can be traced back to a + * `unionTypeFlowBaseCand`, such that we can compute a union type bound for `n`. + * Disregards nodes for which we have an exact bound. + */ + private predicate hasUnionTypeFlow(TypeFlowNode n) { + not exactType(n, _) and + ( + // Optimized version of + // `forex(TypeFlowNode mid | joinStepNotNull(mid, n) | unionTypeFlowBaseCand(mid, _, _) or hasUnionTypeFlow(mid))` + ForAll::flowJoin(n, _) + or + exists(TypeFlowScc scc | + sccRepr(n, scc) and + // Optimized version of + // `forex(TypeFlowNode mid | sccJoinStep(mid, scc) | unionTypeFlowBaseCand(mid, _, _) or hasUnionTypeFlow(mid))` + ForAll::flowJoin(scc, _) + ) + or + exists(TypeFlowNode mid | step(mid, n) and hasUnionTypeFlow(mid)) + or + instanceofDisjunctionGuarded(n, _) + ) + } + + pragma[nomagic] + private Type getTypeBound(TypeFlowNode n) { + bestTypeFlow(n, result) + or + not bestTypeFlow(n, _) and result = n.getType() + } + + pragma[nomagic] + private predicate unionTypeFlow0(TypeFlowNode n, Type t, boolean exact) { + hasUnionTypeFlow(n) and + ( + exists(TypeFlowNode mid | anyStep(mid, n) | + unionTypeFlowBaseCand(mid, t, exact) or unionTypeFlow(mid, t, exact) + ) + or + instanceofDisjunctionGuarded(n, t) and exact = false + ) + } + + /** Holds if this type is the same as its source declaration. */ + private predicate isSourceDeclaration(Type t) { getSourceDeclaration(t) = t } + + final private class FinalType = Type; + + /** A type that is the same as its source declaration. */ + private class SrcType extends FinalType { + SrcType() { isSourceDeclaration(this) } + } + + /** + * Holds if there is a common (reflexive, transitive) subtype of the erased + * types `t1` and `t2`. + */ + pragma[nomagic] + private predicate erasedHaveIntersection(Type t1, Type t2) { + exists(SrcType commonSub | + getASourceSupertype*(commonSub) = t1 and getASourceSupertype*(commonSub) = t2 + ) and + t1 = getErasure(_) and + t2 = getErasure(_) + } + + /** Holds if we have a union type bound for `n` and `t` is one of its parts. */ + private predicate unionTypeFlow(TypeFlowNode n, Type t, boolean exact) { + unionTypeFlow0(n, t, exact) and + // filter impossible union parts: + exists(Type tErased, Type boundErased | + pragma[only_bind_into](tErased) = getErasure(t) and + pragma[only_bind_into](boundErased) = getErasure(getTypeBound(n)) + | + if exact = true + then getASourceSupertype*(tErased) = boundErased + else erasedHaveIntersection(tErased, boundErased) + ) + } + + /** + * Holds if the inferred union type bound for `n` contains the best universal + * bound and thus is irrelevant. + */ + private predicate irrelevantUnionType(TypeFlowNode n) { + exists(Type t, Type nt, Type te, Type nte | + unionTypeFlow(n, t, false) and + nt = getTypeBound(n) and + te = getErasure(t) and + nte = getErasure(nt) + | + nt.getASupertype*() = t + or + getASourceSupertype+(nte) = te + or + nte = te and unbound(t) + ) + } + + /** + * Holds if `t` is an irrelevant part of the union type bound for `n` due to + * being contained in another part of the union type bound. + */ + private predicate irrelevantUnionTypePart(TypeFlowNode n, Type t, boolean exact) { + unionTypeFlow(n, t, exact) and + not irrelevantUnionType(n) and + exists(Type weaker | + unionTypeFlow(n, weaker, false) and + t.getASupertype*() = weaker + | + exact = true or not weaker.getASupertype*() = t + ) + } + + /** + * Holds if the runtime type of `n` is bounded by a union type and if this + * bound is likely to be better than the static type of `n`. The union type is + * made up of the types `t` related to `n` by this predicate, and the flag + * `exact` indicates whether `t` is an exact bound or merely an upper bound. + */ + predicate bestUnionType(TypeFlowNode n, Type t, boolean exact) { + unionTypeFlow(n, t, exact) and + not irrelevantUnionType(n) and + not irrelevantUnionTypePart(n, t, exact) + } +} diff --git a/shared/typeflow/qlpack.yml b/shared/typeflow/qlpack.yml new file mode 100644 index 00000000000..6bc23bcd4fc --- /dev/null +++ b/shared/typeflow/qlpack.yml @@ -0,0 +1,7 @@ +name: codeql/typeflow +version: 0.0.1-dev +groups: shared +library: true +dependencies: + codeql/util: ${workspace} +warnOnImplicitThis: true \ No newline at end of file diff --git a/shared/typetracking/CHANGELOG.md b/shared/typetracking/CHANGELOG.md index afc857bc6bc..18024e28981 100644 --- a/shared/typetracking/CHANGELOG.md +++ b/shared/typetracking/CHANGELOG.md @@ -1,3 +1,19 @@ +## 0.2.13 + +No user-facing changes. + +## 0.2.12 + +No user-facing changes. + +## 0.2.11 + +No user-facing changes. + +## 0.2.10 + +No user-facing changes. + ## 0.2.9 No user-facing changes. diff --git a/shared/typetracking/change-notes/released/0.2.10.md b/shared/typetracking/change-notes/released/0.2.10.md new file mode 100644 index 00000000000..81c9722b19f --- /dev/null +++ b/shared/typetracking/change-notes/released/0.2.10.md @@ -0,0 +1,3 @@ +## 0.2.10 + +No user-facing changes. diff --git a/shared/typetracking/change-notes/released/0.2.11.md b/shared/typetracking/change-notes/released/0.2.11.md new file mode 100644 index 00000000000..1037f9194f8 --- /dev/null +++ b/shared/typetracking/change-notes/released/0.2.11.md @@ -0,0 +1,3 @@ +## 0.2.11 + +No user-facing changes. diff --git a/shared/typetracking/change-notes/released/0.2.12.md b/shared/typetracking/change-notes/released/0.2.12.md new file mode 100644 index 00000000000..590eb0cedd1 --- /dev/null +++ b/shared/typetracking/change-notes/released/0.2.12.md @@ -0,0 +1,3 @@ +## 0.2.12 + +No user-facing changes. diff --git a/shared/typetracking/change-notes/released/0.2.13.md b/shared/typetracking/change-notes/released/0.2.13.md new file mode 100644 index 00000000000..42f11678bd3 --- /dev/null +++ b/shared/typetracking/change-notes/released/0.2.13.md @@ -0,0 +1,3 @@ +## 0.2.13 + +No user-facing changes. diff --git a/shared/typetracking/codeql-pack.release.yml b/shared/typetracking/codeql-pack.release.yml index d021cf0a6be..979eb20092e 100644 --- a/shared/typetracking/codeql-pack.release.yml +++ b/shared/typetracking/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.2.9 +lastReleaseVersion: 0.2.13 diff --git a/shared/typetracking/qlpack.yml b/shared/typetracking/qlpack.yml index b55927f59bb..39ee0cfe8e7 100644 --- a/shared/typetracking/qlpack.yml +++ b/shared/typetracking/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typetracking -version: 0.2.10-dev +version: 0.2.14-dev groups: shared library: true dependencies: diff --git a/shared/typos/CHANGELOG.md b/shared/typos/CHANGELOG.md index 66c5871d982..dbf4204fcad 100644 --- a/shared/typos/CHANGELOG.md +++ b/shared/typos/CHANGELOG.md @@ -1,3 +1,19 @@ +## 0.2.13 + +No user-facing changes. + +## 0.2.12 + +No user-facing changes. + +## 0.2.11 + +No user-facing changes. + +## 0.2.10 + +No user-facing changes. + ## 0.2.9 No user-facing changes. diff --git a/shared/typos/change-notes/released/0.2.10.md b/shared/typos/change-notes/released/0.2.10.md new file mode 100644 index 00000000000..81c9722b19f --- /dev/null +++ b/shared/typos/change-notes/released/0.2.10.md @@ -0,0 +1,3 @@ +## 0.2.10 + +No user-facing changes. diff --git a/shared/typos/change-notes/released/0.2.11.md b/shared/typos/change-notes/released/0.2.11.md new file mode 100644 index 00000000000..1037f9194f8 --- /dev/null +++ b/shared/typos/change-notes/released/0.2.11.md @@ -0,0 +1,3 @@ +## 0.2.11 + +No user-facing changes. diff --git a/shared/typos/change-notes/released/0.2.12.md b/shared/typos/change-notes/released/0.2.12.md new file mode 100644 index 00000000000..590eb0cedd1 --- /dev/null +++ b/shared/typos/change-notes/released/0.2.12.md @@ -0,0 +1,3 @@ +## 0.2.12 + +No user-facing changes. diff --git a/shared/typos/change-notes/released/0.2.13.md b/shared/typos/change-notes/released/0.2.13.md new file mode 100644 index 00000000000..42f11678bd3 --- /dev/null +++ b/shared/typos/change-notes/released/0.2.13.md @@ -0,0 +1,3 @@ +## 0.2.13 + +No user-facing changes. diff --git a/shared/typos/codeql-pack.release.yml b/shared/typos/codeql-pack.release.yml index d021cf0a6be..979eb20092e 100644 --- a/shared/typos/codeql-pack.release.yml +++ b/shared/typos/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.2.9 +lastReleaseVersion: 0.2.13 diff --git a/shared/typos/qlpack.yml b/shared/typos/qlpack.yml index 644bfe11bff..6f20df0d94b 100644 --- a/shared/typos/qlpack.yml +++ b/shared/typos/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typos -version: 0.2.10-dev +version: 0.2.14-dev groups: shared library: true warnOnImplicitThis: true diff --git a/shared/util/CHANGELOG.md b/shared/util/CHANGELOG.md index 63832e927fa..1c0c715c928 100644 --- a/shared/util/CHANGELOG.md +++ b/shared/util/CHANGELOG.md @@ -1,3 +1,19 @@ +## 0.2.13 + +No user-facing changes. + +## 0.2.12 + +No user-facing changes. + +## 0.2.11 + +No user-facing changes. + +## 0.2.10 + +No user-facing changes. + ## 0.2.9 No user-facing changes. diff --git a/shared/util/change-notes/released/0.2.10.md b/shared/util/change-notes/released/0.2.10.md new file mode 100644 index 00000000000..81c9722b19f --- /dev/null +++ b/shared/util/change-notes/released/0.2.10.md @@ -0,0 +1,3 @@ +## 0.2.10 + +No user-facing changes. diff --git a/shared/util/change-notes/released/0.2.11.md b/shared/util/change-notes/released/0.2.11.md new file mode 100644 index 00000000000..1037f9194f8 --- /dev/null +++ b/shared/util/change-notes/released/0.2.11.md @@ -0,0 +1,3 @@ +## 0.2.11 + +No user-facing changes. diff --git a/shared/util/change-notes/released/0.2.12.md b/shared/util/change-notes/released/0.2.12.md new file mode 100644 index 00000000000..590eb0cedd1 --- /dev/null +++ b/shared/util/change-notes/released/0.2.12.md @@ -0,0 +1,3 @@ +## 0.2.12 + +No user-facing changes. diff --git a/shared/util/change-notes/released/0.2.13.md b/shared/util/change-notes/released/0.2.13.md new file mode 100644 index 00000000000..42f11678bd3 --- /dev/null +++ b/shared/util/change-notes/released/0.2.13.md @@ -0,0 +1,3 @@ +## 0.2.13 + +No user-facing changes. diff --git a/shared/util/codeql-pack.release.yml b/shared/util/codeql-pack.release.yml index d021cf0a6be..979eb20092e 100644 --- a/shared/util/codeql-pack.release.yml +++ b/shared/util/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.2.9 +lastReleaseVersion: 0.2.13 diff --git a/shared/util/qlpack.yml b/shared/util/qlpack.yml index ca1a866a53d..c81bb89d78c 100644 --- a/shared/util/qlpack.yml +++ b/shared/util/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/util -version: 0.2.10-dev +version: 0.2.14-dev groups: shared library: true dependencies: null diff --git a/shared/xml/codeql/xml/Xml.qll b/shared/xml/codeql/xml/Xml.qll new file mode 100644 index 00000000000..02d0ffc66fd --- /dev/null +++ b/shared/xml/codeql/xml/Xml.qll @@ -0,0 +1,401 @@ +/** + * Provides classes and predicates for working with XML files and their content. + */ + +private import codeql.util.Location +private import codeql.util.FileSystem + +/** Provides the input specification of the XML implementation. */ +signature module InputSig { + class XmlLocatableBase; + + predicate xmllocations_(XmlLocatableBase e, Location loc); + + class XmlParentBase; + + class XmlNamespaceableBase instanceof XmlLocatableBase; + + class XmlElementBase instanceof XmlParentBase, XmlNamespaceableBase; + + class XmlFileBase extends File instanceof XmlParentBase; + + predicate xmlEncoding_(XmlFileBase f, string enc); + + class XmlDtdBase instanceof XmlLocatableBase; + + predicate xmlDTDs_(XmlDtdBase e, string root, string publicId, string systemId, XmlFileBase file); + + predicate xmlElements_( + XmlElementBase e, string name, XmlParentBase parent, int idx, XmlFileBase file + ); + + class XmlAttributeBase instanceof XmlNamespaceableBase; + + predicate xmlAttrs_( + XmlAttributeBase e, XmlElementBase elementid, string name, string value, int idx, + XmlFileBase file + ); + + class XmlNamespaceBase instanceof XmlLocatableBase; + + predicate xmlNs_(XmlNamespaceBase e, string prefixName, string uri, XmlFileBase file); + + predicate xmlHasNs_(XmlNamespaceableBase e, XmlNamespaceBase ns, XmlFileBase file); + + class XmlCommentBase instanceof XmlLocatableBase; + + predicate xmlComments_(XmlCommentBase e, string text, XmlParentBase parent, XmlFileBase file); + + class XmlCharactersBase instanceof XmlLocatableBase; + + predicate xmlChars_( + XmlCharactersBase e, string text, XmlParentBase parent, int idx, int isCDATA, XmlFileBase file + ); +} + +/** Provides a class hierarchy for working with XML files. */ +module Make Input> { + private import Input + + final private class XmlLocatableBaseFinal = XmlLocatableBase; + + /** An XML element that has a location. */ + abstract private class XmlLocatableImpl extends XmlLocatableBaseFinal { + /** Gets the location of this element. */ + Location getLocation() { xmllocations_(this, result) } + + /** + * Holds if this element is at the specified location. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `filepath`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ + predicate hasLocationInfo( + string filepath, int startline, int startcolumn, int endline, int endcolumn + ) { + this.getLocation().hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) + } + + /** Gets a textual representation of this element. */ + abstract string toString(); + } + + final class XmlLocatable = XmlLocatableImpl; + + final private class XmlParentBaseFinal = XmlParentBase; + + final private class XmlElementBaseFinal = XmlElementBase; + + /** + * An `XmlParent` is either an `XmlElement` or an `XmlFile`, + * both of which can contain other elements. + */ + abstract private class XmlParentImpl extends XmlParentBaseFinal { + XmlParentImpl() { + // explicitly restrict `this` to be either an `XmlElement` or an `XmlFile`; + // the type `@xmlparent` currently also includes non-XML files + this instanceof XmlElementBaseFinal or xmlEncoding_(this, _) + } + + /** Gets a printable representation of this XML parent. */ + abstract string getName(); + + /** Gets the file to which this XML parent belongs. */ + 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, _) } + + /** Gets a child element of this XML parent. */ + 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) + } + + /** Gets a comment that is a child of this XML parent. */ + XmlComment getAComment() { xmlComments_(result, _, this, _) } + + /** Gets a character sequence that is a child of this XML parent. */ + XmlCharacters getACharactersSet() { xmlChars_(result, _, this, _, _, _) } + + /** 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, _, _)) } + + /** Gets the number of places in the body of this XML parent where text occurs. */ + int getNumberOfCharacterSets() { result = count(int pos | xmlChars_(_, _, this, pos, _, _)) } + + /** + * Gets the result of appending all the character sequences of this XML parent from + * left to right, separated by a space. + */ + string allCharactersString() { + result = + concat(string chars, int pos | + xmlChars_(_, chars, this, pos, _, _) + | + chars, " " order by pos + ) + } + + /** Gets the text value contained in this XML parent. */ + string getTextValue() { result = this.allCharactersString() } + + /** Gets a printable representation of this XML parent. */ + string toString() { result = this.getName() } + } + + final class XmlParent = XmlParentImpl; + + final private class XmlFileBaseFinal = XmlFileBase; + + // needed for the `toString` override in `XmlFileImpl` + private class XmlFileBaseMid extends XmlFileBaseFinal { + /** Gets a printable representation of this XML file. */ + string toString() { none() } + } + + /** An XML file. */ + private class XmlFileImpl extends XmlParentImpl, XmlFileBaseMid { + XmlFileImpl() { xmlEncoding_(this, _) } + + override string toString() { result = this.getName() } + + /** Gets the name of this XML file. */ + override string getName() { result = super.getAbsolutePath() } + + /** Gets the encoding of this XML file. */ + string getEncoding() { xmlEncoding_(this, result) } + + /** Gets the XML file itself. */ + override XmlFile getFile() { result = this } + + /** Gets a top-most element in an XML file. */ + XmlElement getARootElement() { result = this.getAChild() } + + /** Gets a DTD associated with this XML file. */ + XmlDtd getADtd() { xmlDTDs_(result, _, _, _, this) } + } + + final class XmlFile = XmlFileImpl; + + final private class XmlDtdBaseFinal = XmlDtdBase; + + /** + * An XML document type definition (DTD). + * + * Example: + * + * ``` + * + * + * + * ``` + */ + private class XmlDtdImpl extends XmlLocatableImpl, XmlDtdBaseFinal { + /** Gets the name of the root element of this DTD. */ + string getRoot() { xmlDTDs_(this, result, _, _, _) } + + /** Gets the public ID of this DTD. */ + string getPublicId() { xmlDTDs_(this, _, result, _, _) } + + /** Gets the system ID of this DTD. */ + string getSystemId() { xmlDTDs_(this, _, _, result, _) } + + /** Holds if this DTD is public. */ + predicate isPublic() { not xmlDTDs_(this, _, "", _, _) } + + /** Gets the parent of this DTD. */ + XmlParent getParent() { xmlDTDs_(this, _, _, _, result) } + + override string toString() { + this.isPublic() and + result = this.getRoot() + " PUBLIC '" + this.getPublicId() + "' '" + this.getSystemId() + "'" + or + not this.isPublic() and + result = this.getRoot() + " SYSTEM '" + this.getSystemId() + "'" + } + } + + final class XmlDtd = XmlDtdImpl; + + /** + * An XML element in an XML file. + * + * Example: + * + * ``` + * + * + * ``` + */ + private class XmlElementImpl extends XmlElementBaseFinal, XmlParentImpl, XmlLocatableImpl { + /** Holds if this XML element has the given `name`. */ + predicate hasName(string name) { name = this.getName() } + + /** Gets the name of this XML element. */ + override string getName() { xmlElements_(this, result, _, _, _) } + + /** Gets the XML file in which this XML element occurs. */ + override XmlFile getFile() { xmlElements_(this, _, _, _, result) } + + /** Gets the parent of this XML element. */ + XmlParent getParent() { xmlElements_(this, _, result, _, _) } + + /** Gets the index of this XML element among its parent's children. */ + int getIndex() { xmlElements_(this, _, _, result, _) } + + /** Holds if this XML element has a namespace. */ + predicate hasNamespace() { xmlHasNs_(this, _, _) } + + /** Gets the namespace of this XML element, if any. */ + XmlNamespace getNamespace() { xmlHasNs_(this, result, _) } + + /** Gets the index of this XML element among its parent's children. */ + int getElementPositionIndex() { xmlElements_(this, _, _, result, _) } + + /** Gets the depth of this element within the XML file tree structure. */ + override int getDepth() { result = this.getParent().getDepth() + 1 } + + /** Gets an XML attribute of this XML element. */ + 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 + } + + /** Holds if this XML element has an attribute with the specified `name`. */ + predicate hasAttribute(string name) { exists(this.getAttribute(name)) } + + /** Gets the value of the attribute with the specified `name`, if any. */ + string getAttributeValue(string name) { result = this.getAttribute(name).getValue() } + + /** Gets a printable representation of this XML element. */ + override string toString() { result = this.getName() } + } + + final class XmlElement = XmlElementImpl; + + final private class XmlAttributeBaseFinal = XmlAttributeBase; + + /** + * An attribute that occurs inside an XML element. + * + * Examples: + * + * ``` + * package="com.example.exampleapp" + * android:versionCode="1" + * ``` + */ + private class XmlAttributeImpl extends XmlAttributeBaseFinal, XmlLocatableImpl { + /** 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, _, _, _, _) } + + /** Holds if this attribute has a namespace. */ + predicate hasNamespace() { xmlHasNs_(this, _, _) } + + /** Gets the namespace of this attribute, if any. */ + XmlNamespace getNamespace() { xmlHasNs_(this, result, _) } + + /** Gets the value of this attribute. */ + string getValue() { xmlAttrs_(this, _, _, result, _, _) } + + /** Gets a printable representation of this XML attribute. */ + override string toString() { result = this.getName() + "=" + this.getValue() } + } + + final class XmlAttribute = XmlAttributeImpl; + + final private class XmlNamespaceBaseFinal = XmlNamespaceBase; + + /** + * A namespace used in an XML file. + * + * Example: + * + * ``` + * xmlns:android="http://schemas.android.com/apk/res/android" + * ``` + */ + private class XmlNamespaceImpl extends XmlLocatableImpl, XmlNamespaceBaseFinal { + /** Gets the prefix of this namespace. */ + string getPrefix() { xmlNs_(this, result, _, _) } + + /** Gets the URI of this namespace. */ + string getUri() { xmlNs_(this, _, result, _) } + + /** Holds if this namespace has no prefix. */ + predicate isDefault() { this.getPrefix() = "" } + + override string toString() { + this.isDefault() and result = this.getUri() + or + not this.isDefault() and result = this.getPrefix() + ":" + this.getUri() + } + } + + final class XmlNamespace = XmlNamespaceImpl; + + final private class XmlCommentBaseFinal = XmlCommentBase; + + /** + * A comment in an XML file. + * + * Example: + * + * ``` + * + * ``` + */ + private class XmlCommentImpl extends XmlCommentBaseFinal, XmlLocatableImpl { + /** 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, _) } + + /** Gets a printable representation of this XML comment. */ + override string toString() { result = this.getText() } + } + + final class XmlComment = XmlCommentImpl; + + final private class XmlCharactersBaseFinal = XmlCharactersBase; + + /** + * A sequence of characters that occurs between opening and + * closing tags of an XML element, excluding other elements. + * + * Example: + * + * ``` + * This is a sequence of characters. + * ``` + */ + private class XmlCharactersImpl extends XmlCharactersBaseFinal, XmlLocatableImpl { + /** Gets the content of this character sequence. */ + string getCharacters() { xmlChars_(this, result, _, _, _, _) } + + /** Gets the parent of this character sequence. */ + XmlParent getParent() { xmlChars_(this, _, result, _, _, _) } + + /** Holds if this character sequence is CDATA. */ + predicate isCDATA() { xmlChars_(this, _, _, _, 1, _) } + + /** Gets a printable representation of this XML character sequence. */ + override string toString() { result = this.getCharacters() } + } + + final class XmlCharacters = XmlCharactersImpl; +} diff --git a/shared/xml/qlpack.yml b/shared/xml/qlpack.yml new file mode 100644 index 00000000000..d37cec01d2f --- /dev/null +++ b/shared/xml/qlpack.yml @@ -0,0 +1,7 @@ +name: codeql/xml +version: 0.0.1-dev +groups: shared +library: true +dependencies: + codeql/util: ${workspace} +warnOnImplicitThis: true diff --git a/shared/yaml/CHANGELOG.md b/shared/yaml/CHANGELOG.md index e5495abcd50..67d1e732a0f 100644 --- a/shared/yaml/CHANGELOG.md +++ b/shared/yaml/CHANGELOG.md @@ -1,3 +1,19 @@ +## 0.2.13 + +No user-facing changes. + +## 0.2.12 + +No user-facing changes. + +## 0.2.11 + +No user-facing changes. + +## 0.2.10 + +No user-facing changes. + ## 0.2.9 No user-facing changes. diff --git a/shared/yaml/change-notes/released/0.2.10.md b/shared/yaml/change-notes/released/0.2.10.md new file mode 100644 index 00000000000..81c9722b19f --- /dev/null +++ b/shared/yaml/change-notes/released/0.2.10.md @@ -0,0 +1,3 @@ +## 0.2.10 + +No user-facing changes. diff --git a/shared/yaml/change-notes/released/0.2.11.md b/shared/yaml/change-notes/released/0.2.11.md new file mode 100644 index 00000000000..1037f9194f8 --- /dev/null +++ b/shared/yaml/change-notes/released/0.2.11.md @@ -0,0 +1,3 @@ +## 0.2.11 + +No user-facing changes. diff --git a/shared/yaml/change-notes/released/0.2.12.md b/shared/yaml/change-notes/released/0.2.12.md new file mode 100644 index 00000000000..590eb0cedd1 --- /dev/null +++ b/shared/yaml/change-notes/released/0.2.12.md @@ -0,0 +1,3 @@ +## 0.2.12 + +No user-facing changes. diff --git a/shared/yaml/change-notes/released/0.2.13.md b/shared/yaml/change-notes/released/0.2.13.md new file mode 100644 index 00000000000..42f11678bd3 --- /dev/null +++ b/shared/yaml/change-notes/released/0.2.13.md @@ -0,0 +1,3 @@ +## 0.2.13 + +No user-facing changes. diff --git a/shared/yaml/codeql-pack.release.yml b/shared/yaml/codeql-pack.release.yml index d021cf0a6be..979eb20092e 100644 --- a/shared/yaml/codeql-pack.release.yml +++ b/shared/yaml/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.2.9 +lastReleaseVersion: 0.2.13 diff --git a/shared/yaml/qlpack.yml b/shared/yaml/qlpack.yml index de5b47e120a..ca9995d0e56 100644 --- a/shared/yaml/qlpack.yml +++ b/shared/yaml/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/yaml -version: 0.2.10-dev +version: 0.2.14-dev groups: shared library: true warnOnImplicitThis: true diff --git a/swift/.python-version b/swift/.python-version index c7413b842fc..2c0733315e4 100644 --- a/swift/.python-version +++ b/swift/.python-version @@ -1 +1 @@ -3.8.14 +3.11 diff --git a/swift/actions/run-integration-tests/action.yml b/swift/actions/run-integration-tests/action.yml index 6db78e2e01e..fe5a20b02bd 100644 --- a/swift/actions/run-integration-tests/action.yml +++ b/swift/actions/run-integration-tests/action.yml @@ -7,7 +7,7 @@ runs: - uses: actions/setup-python@v4 with: python-version-file: 'swift/.python-version' - - uses: swift-actions/setup-swift@65540b95f51493d65f5e59e97dcef9629ddf11bf + - uses: redsun82/setup-swift@b2b6f77ab14f6a9b136b520dc53ec8eca27d2b99 with: swift-version: "5.8" - uses: ./.github/actions/fetch-codeql @@ -18,7 +18,7 @@ runs: - name: Run integration tests shell: bash run: | - python swift/integration-tests/runner.py --compilation-cache "${{ steps.query-cache.outputs.cache-dir }}" + python swift/ql/integration-tests/runner.py --compilation-cache "${{ steps.query-cache.outputs.cache-dir }}" env: SEMMLE_DEBUG_TRACER: 10000 - name: Upload test logs @@ -27,5 +27,5 @@ runs: with: name: swift-integration-tests-logs-${{ runner.os }} path: | - swift/integration-tests/**/db/log + swift/ql/integration-tests/**/db/log retention-days: 1 diff --git a/swift/downgrades/15a630f68e14f053932cf6a23797f43d958eedc9/downgrade.ql b/swift/downgrades/15a630f68e14f053932cf6a23797f43d958eedc9/downgrade.ql new file mode 100644 index 00000000000..5870b93ac9f --- /dev/null +++ b/swift/downgrades/15a630f68e14f053932cf6a23797f43d958eedc9/downgrade.ql @@ -0,0 +1,17 @@ +class Element extends @element { + string toString() { none() } +} + +query predicate new_unspecified_elements(Element e, string property, string error) { + unspecified_elements(e, property, error) + or + error = "ThenStmt nodes removed during database downgrade. Please update your CodeQL code." and + property = "" and + then_stmts(e, _) +} + +query predicate new_unspecified_element_children(Element e, int index, Element child) { + unspecified_element_children(e, index, child) + or + then_stmts(e, child) and index = 0 +} diff --git a/swift/downgrades/15a630f68e14f053932cf6a23797f43d958eedc9/old.dbscheme b/swift/downgrades/15a630f68e14f053932cf6a23797f43d958eedc9/old.dbscheme new file mode 100644 index 00000000000..15a630f68e1 --- /dev/null +++ b/swift/downgrades/15a630f68e14f053932cf6a23797f43d958eedc9/old.dbscheme @@ -0,0 +1,2786 @@ +// generated by codegen/codegen.py + +// from prefix.dbscheme +/** + * The source location of the snapshot. + */ +sourceLocationPrefix( + string prefix: string ref +); + + +// from schema.py + +@element = + @callable +| @file +| @generic_context +| @locatable +| @location +| @type +; + +#keyset[id] +element_is_unknown( + int id: @element ref +); + +@callable = + @closure_expr +| @function +; + +#keyset[id] +callable_names( + int id: @callable ref, + string name: string ref +); + +#keyset[id] +callable_self_params( + int id: @callable ref, + int self_param: @param_decl_or_none ref +); + +#keyset[id, index] +callable_params( + int id: @callable ref, + int index: int ref, + int param: @param_decl_or_none ref +); + +#keyset[id] +callable_bodies( + int id: @callable ref, + int body: @brace_stmt_or_none ref +); + +#keyset[id, index] +callable_captures( + int id: @callable ref, + int index: int ref, + int capture: @captured_decl_or_none ref +); + +@file = + @db_file +; + +#keyset[id] +files( + int id: @file ref, + string name: string ref +); + +#keyset[id] +file_is_successfully_extracted( + int id: @file ref +); + +@locatable = + @argument +| @ast_node +| @comment +| @diagnostics +| @error_element +; + +#keyset[id] +locatable_locations( + int id: @locatable ref, + int location: @location_or_none ref +); + +@location = + @db_location +; + +#keyset[id] +locations( + int id: @location ref, + int file: @file_or_none ref, + int start_line: int ref, + int start_column: int ref, + int end_line: int ref, + int end_column: int ref +); + +@ast_node = + @availability_info +| @availability_spec +| @case_label_item +| @condition_element +| @decl +| @expr +| @key_path_component +| @macro_role +| @pattern +| @stmt +| @stmt_condition +| @type_repr +; + +comments( + unique int id: @comment, + string text: string ref +); + +db_files( + unique int id: @db_file +); + +db_locations( + unique int id: @db_location +); + +diagnostics( + unique int id: @diagnostics, + string text: string ref, + int kind: int ref +); + +@error_element = + @error_expr +| @error_type +| @overloaded_decl_ref_expr +| @unresolved_decl_ref_expr +| @unresolved_dot_expr +| @unresolved_member_chain_result_expr +| @unresolved_member_expr +| @unresolved_pattern_expr +| @unresolved_specialize_expr +| @unresolved_type +| @unresolved_type_conversion_expr +| @unspecified_element +; + +availability_infos( + unique int id: @availability_info +); + +#keyset[id] +availability_info_is_unavailable( + int id: @availability_info ref +); + +#keyset[id, index] +availability_info_specs( + int id: @availability_info ref, + int index: int ref, + int spec: @availability_spec_or_none ref +); + +@availability_spec = + @other_availability_spec +| @platform_version_availability_spec +; + +key_path_components( + unique int id: @key_path_component, + int kind: int ref, + int component_type: @type_or_none ref +); + +#keyset[id, index] +key_path_component_subscript_arguments( + int id: @key_path_component ref, + int index: int ref, + int subscript_argument: @argument_or_none ref +); + +#keyset[id] +key_path_component_tuple_indices( + int id: @key_path_component ref, + int tuple_index: int ref +); + +#keyset[id] +key_path_component_decl_refs( + int id: @key_path_component ref, + int decl_ref: @value_decl_or_none ref +); + +macro_roles( + unique int id: @macro_role, + int kind: int ref, + int macro_syntax: int ref +); + +#keyset[id, index] +macro_role_conformances( + int id: @macro_role ref, + int index: int ref, + int conformance: @type_expr_or_none ref +); + +#keyset[id, index] +macro_role_names( + int id: @macro_role ref, + int index: int ref, + string name: string ref +); + +unspecified_elements( + unique int id: @unspecified_element, + string property: string ref, + string error: string ref +); + +#keyset[id] +unspecified_element_parents( + int id: @unspecified_element ref, + int parent: @element ref +); + +#keyset[id] +unspecified_element_indices( + int id: @unspecified_element ref, + int index: int ref +); + +#keyset[id, index] +unspecified_element_children( + int id: @unspecified_element ref, + int index: int ref, + int child: @ast_node_or_none ref +); + +other_availability_specs( + unique int id: @other_availability_spec +); + +platform_version_availability_specs( + unique int id: @platform_version_availability_spec, + string platform: string ref, + string version: string ref +); + +@decl = + @captured_decl +| @enum_case_decl +| @extension_decl +| @if_config_decl +| @import_decl +| @missing_member_decl +| @operator_decl +| @pattern_binding_decl +| @pound_diagnostic_decl +| @precedence_group_decl +| @top_level_code_decl +| @value_decl +; + +#keyset[id] +decls( //dir=decl + int id: @decl ref, + int module: @module_decl_or_none ref +); + +#keyset[id, index] +decl_members( //dir=decl + int id: @decl ref, + int index: int ref, + int member: @decl_or_none ref +); + +@generic_context = + @extension_decl +| @function +| @generic_type_decl +| @macro_decl +| @subscript_decl +; + +#keyset[id, index] +generic_context_generic_type_params( //dir=decl + int id: @generic_context ref, + int index: int ref, + int generic_type_param: @generic_type_param_decl_or_none ref +); + +captured_decls( //dir=decl + unique int id: @captured_decl, + int decl: @value_decl_or_none ref +); + +#keyset[id] +captured_decl_is_direct( //dir=decl + int id: @captured_decl ref +); + +#keyset[id] +captured_decl_is_escaping( //dir=decl + int id: @captured_decl ref +); + +enum_case_decls( //dir=decl + unique int id: @enum_case_decl +); + +#keyset[id, index] +enum_case_decl_elements( //dir=decl + int id: @enum_case_decl ref, + int index: int ref, + int element: @enum_element_decl_or_none ref +); + +extension_decls( //dir=decl + unique int id: @extension_decl, + int extended_type_decl: @nominal_type_decl_or_none ref +); + +#keyset[id, index] +extension_decl_protocols( //dir=decl + int id: @extension_decl ref, + int index: int ref, + int protocol: @protocol_decl_or_none ref +); + +if_config_decls( //dir=decl + unique int id: @if_config_decl +); + +#keyset[id, index] +if_config_decl_active_elements( //dir=decl + int id: @if_config_decl ref, + int index: int ref, + int active_element: @ast_node_or_none ref +); + +import_decls( //dir=decl + unique int id: @import_decl +); + +#keyset[id] +import_decl_is_exported( //dir=decl + int id: @import_decl ref +); + +#keyset[id] +import_decl_imported_modules( //dir=decl + int id: @import_decl ref, + int imported_module: @module_decl_or_none ref +); + +#keyset[id, index] +import_decl_declarations( //dir=decl + int id: @import_decl ref, + int index: int ref, + int declaration: @value_decl_or_none ref +); + +missing_member_decls( //dir=decl + unique int id: @missing_member_decl, + string name: string ref +); + +@operator_decl = + @infix_operator_decl +| @postfix_operator_decl +| @prefix_operator_decl +; + +#keyset[id] +operator_decls( //dir=decl + int id: @operator_decl ref, + string name: string ref +); + +pattern_binding_decls( //dir=decl + unique int id: @pattern_binding_decl +); + +#keyset[id, index] +pattern_binding_decl_inits( //dir=decl + int id: @pattern_binding_decl ref, + int index: int ref, + int init: @expr_or_none ref +); + +#keyset[id, index] +pattern_binding_decl_patterns( //dir=decl + int id: @pattern_binding_decl ref, + int index: int ref, + int pattern: @pattern_or_none ref +); + +pound_diagnostic_decls( //dir=decl + unique int id: @pound_diagnostic_decl, + int kind: int ref, + int message: @string_literal_expr_or_none ref +); + +precedence_group_decls( //dir=decl + unique int id: @precedence_group_decl +); + +top_level_code_decls( //dir=decl + unique int id: @top_level_code_decl, + int body: @brace_stmt_or_none ref +); + +@value_decl = + @abstract_storage_decl +| @enum_element_decl +| @function +| @macro_decl +| @type_decl +; + +#keyset[id] +value_decls( //dir=decl + int id: @value_decl ref, + int interface_type: @type_or_none ref +); + +@abstract_storage_decl = + @subscript_decl +| @var_decl +; + +#keyset[id, index] +abstract_storage_decl_accessors( //dir=decl + int id: @abstract_storage_decl ref, + int index: int ref, + int accessor: @accessor_or_none ref +); + +enum_element_decls( //dir=decl + unique int id: @enum_element_decl, + string name: string ref +); + +#keyset[id, index] +enum_element_decl_params( //dir=decl + int id: @enum_element_decl ref, + int index: int ref, + int param: @param_decl_or_none ref +); + +@function = + @accessor_or_named_function +| @deinitializer +| @initializer +; + +infix_operator_decls( //dir=decl + unique int id: @infix_operator_decl +); + +#keyset[id] +infix_operator_decl_precedence_groups( //dir=decl + int id: @infix_operator_decl ref, + int precedence_group: @precedence_group_decl_or_none ref +); + +macro_decls( //dir=decl + unique int id: @macro_decl, + string name: string ref +); + +#keyset[id, index] +macro_decl_parameters( //dir=decl + int id: @macro_decl ref, + int index: int ref, + int parameter: @param_decl_or_none ref +); + +#keyset[id, index] +macro_decl_roles( //dir=decl + int id: @macro_decl ref, + int index: int ref, + int role: @macro_role_or_none ref +); + +postfix_operator_decls( //dir=decl + unique int id: @postfix_operator_decl +); + +prefix_operator_decls( //dir=decl + unique int id: @prefix_operator_decl +); + +@type_decl = + @abstract_type_param_decl +| @generic_type_decl +| @module_decl +; + +#keyset[id] +type_decls( //dir=decl + int id: @type_decl ref, + string name: string ref +); + +#keyset[id, index] +type_decl_inherited_types( //dir=decl + int id: @type_decl ref, + int index: int ref, + int inherited_type: @type_or_none ref +); + +@abstract_type_param_decl = + @associated_type_decl +| @generic_type_param_decl +; + +@accessor_or_named_function = + @accessor +| @named_function +; + +deinitializers( //dir=decl + unique int id: @deinitializer +); + +@generic_type_decl = + @nominal_type_decl +| @opaque_type_decl +| @type_alias_decl +; + +initializers( //dir=decl + unique int id: @initializer +); + +module_decls( //dir=decl + unique int id: @module_decl +); + +#keyset[id] +module_decl_is_builtin_module( //dir=decl + int id: @module_decl ref +); + +#keyset[id] +module_decl_is_system_module( //dir=decl + int id: @module_decl ref +); + +module_decl_imported_modules( //dir=decl + int id: @module_decl ref, + int imported_module: @module_decl_or_none ref +); + +module_decl_exported_modules( //dir=decl + int id: @module_decl ref, + int exported_module: @module_decl_or_none ref +); + +subscript_decls( //dir=decl + unique int id: @subscript_decl, + int element_type: @type_or_none ref +); + +#keyset[id, index] +subscript_decl_params( //dir=decl + int id: @subscript_decl ref, + int index: int ref, + int param: @param_decl_or_none ref +); + +@var_decl = + @concrete_var_decl +| @param_decl +; + +#keyset[id] +var_decls( //dir=decl + int id: @var_decl ref, + string name: string ref, + int type_: @type_or_none ref +); + +#keyset[id] +var_decl_attached_property_wrapper_types( //dir=decl + int id: @var_decl ref, + int attached_property_wrapper_type: @type_or_none ref +); + +#keyset[id] +var_decl_parent_patterns( //dir=decl + int id: @var_decl ref, + int parent_pattern: @pattern_or_none ref +); + +#keyset[id] +var_decl_parent_initializers( //dir=decl + int id: @var_decl ref, + int parent_initializer: @expr_or_none ref +); + +#keyset[id] +var_decl_property_wrapper_backing_var_bindings( //dir=decl + int id: @var_decl ref, + int property_wrapper_backing_var_binding: @pattern_binding_decl_or_none ref +); + +#keyset[id] +var_decl_property_wrapper_backing_vars( //dir=decl + int id: @var_decl ref, + int property_wrapper_backing_var: @var_decl_or_none ref +); + +#keyset[id] +var_decl_property_wrapper_projection_var_bindings( //dir=decl + int id: @var_decl ref, + int property_wrapper_projection_var_binding: @pattern_binding_decl_or_none ref +); + +#keyset[id] +var_decl_property_wrapper_projection_vars( //dir=decl + int id: @var_decl ref, + int property_wrapper_projection_var: @var_decl_or_none ref +); + +accessors( //dir=decl + unique int id: @accessor +); + +#keyset[id] +accessor_is_getter( //dir=decl + int id: @accessor ref +); + +#keyset[id] +accessor_is_setter( //dir=decl + int id: @accessor ref +); + +#keyset[id] +accessor_is_will_set( //dir=decl + int id: @accessor ref +); + +#keyset[id] +accessor_is_did_set( //dir=decl + int id: @accessor ref +); + +#keyset[id] +accessor_is_read( //dir=decl + int id: @accessor ref +); + +#keyset[id] +accessor_is_modify( //dir=decl + int id: @accessor ref +); + +#keyset[id] +accessor_is_unsafe_address( //dir=decl + int id: @accessor ref +); + +#keyset[id] +accessor_is_unsafe_mutable_address( //dir=decl + int id: @accessor ref +); + +associated_type_decls( //dir=decl + unique int id: @associated_type_decl +); + +concrete_var_decls( //dir=decl + unique int id: @concrete_var_decl, + int introducer_int: int ref +); + +generic_type_param_decls( //dir=decl + unique int id: @generic_type_param_decl +); + +named_functions( //dir=decl + unique int id: @named_function +); + +@nominal_type_decl = + @class_decl +| @enum_decl +| @protocol_decl +| @struct_decl +; + +#keyset[id] +nominal_type_decls( //dir=decl + int id: @nominal_type_decl ref, + int type_: @type_or_none ref +); + +opaque_type_decls( //dir=decl + unique int id: @opaque_type_decl, + int naming_declaration: @value_decl_or_none ref +); + +#keyset[id, index] +opaque_type_decl_opaque_generic_params( //dir=decl + int id: @opaque_type_decl ref, + int index: int ref, + int opaque_generic_param: @generic_type_param_type_or_none ref +); + +param_decls( //dir=decl + unique int id: @param_decl +); + +#keyset[id] +param_decl_is_inout( //dir=decl + int id: @param_decl ref +); + +#keyset[id] +param_decl_property_wrapper_local_wrapped_var_bindings( //dir=decl + int id: @param_decl ref, + int property_wrapper_local_wrapped_var_binding: @pattern_binding_decl_or_none ref +); + +#keyset[id] +param_decl_property_wrapper_local_wrapped_vars( //dir=decl + int id: @param_decl ref, + int property_wrapper_local_wrapped_var: @var_decl_or_none ref +); + +type_alias_decls( //dir=decl + unique int id: @type_alias_decl, + int aliased_type: @type_or_none ref +); + +class_decls( //dir=decl + unique int id: @class_decl +); + +enum_decls( //dir=decl + unique int id: @enum_decl +); + +protocol_decls( //dir=decl + unique int id: @protocol_decl +); + +struct_decls( //dir=decl + unique int id: @struct_decl +); + +arguments( //dir=expr + unique int id: @argument, + string label: string ref, + int expr: @expr_or_none ref +); + +@expr = + @any_try_expr +| @applied_property_wrapper_expr +| @apply_expr +| @assign_expr +| @bind_optional_expr +| @capture_list_expr +| @closure_expr +| @collection_expr +| @consume_expr +| @copy_expr +| @decl_ref_expr +| @default_argument_expr +| @discard_assignment_expr +| @dot_syntax_base_ignored_expr +| @dynamic_type_expr +| @enum_is_case_expr +| @error_expr +| @explicit_cast_expr +| @force_value_expr +| @identity_expr +| @if_expr +| @implicit_conversion_expr +| @in_out_expr +| @key_path_application_expr +| @key_path_dot_expr +| @key_path_expr +| @lazy_initialization_expr +| @literal_expr +| @lookup_expr +| @make_temporarily_escapable_expr +| @materialize_pack_expr +| @obj_c_selector_expr +| @one_way_expr +| @opaque_value_expr +| @open_existential_expr +| @optional_evaluation_expr +| @other_initializer_ref_expr +| @overloaded_decl_ref_expr +| @pack_element_expr +| @pack_expansion_expr +| @property_wrapper_value_placeholder_expr +| @rebind_self_in_initializer_expr +| @sequence_expr +| @single_value_stmt_expr +| @super_ref_expr +| @tap_expr +| @tuple_element_expr +| @tuple_expr +| @type_expr +| @unresolved_decl_ref_expr +| @unresolved_dot_expr +| @unresolved_member_expr +| @unresolved_pattern_expr +| @unresolved_specialize_expr +| @vararg_expansion_expr +; + +#keyset[id] +expr_types( //dir=expr + int id: @expr ref, + int type_: @type_or_none ref +); + +@any_try_expr = + @force_try_expr +| @optional_try_expr +| @try_expr +; + +#keyset[id] +any_try_exprs( //dir=expr + int id: @any_try_expr ref, + int sub_expr: @expr_or_none ref +); + +applied_property_wrapper_exprs( //dir=expr + unique int id: @applied_property_wrapper_expr, + int kind: int ref, + int value: @expr_or_none ref, + int param: @param_decl_or_none ref +); + +@apply_expr = + @binary_expr +| @call_expr +| @postfix_unary_expr +| @prefix_unary_expr +| @self_apply_expr +; + +#keyset[id] +apply_exprs( //dir=expr + int id: @apply_expr ref, + int function: @expr_or_none ref +); + +#keyset[id, index] +apply_expr_arguments( //dir=expr + int id: @apply_expr ref, + int index: int ref, + int argument: @argument_or_none ref +); + +assign_exprs( //dir=expr + unique int id: @assign_expr, + int dest: @expr_or_none ref, + int source: @expr_or_none ref +); + +bind_optional_exprs( //dir=expr + unique int id: @bind_optional_expr, + int sub_expr: @expr_or_none ref +); + +capture_list_exprs( //dir=expr + unique int id: @capture_list_expr, + int closure_body: @closure_expr_or_none ref +); + +#keyset[id, index] +capture_list_expr_binding_decls( //dir=expr + int id: @capture_list_expr ref, + int index: int ref, + int binding_decl: @pattern_binding_decl_or_none ref +); + +@closure_expr = + @auto_closure_expr +| @explicit_closure_expr +; + +@collection_expr = + @array_expr +| @dictionary_expr +; + +consume_exprs( //dir=expr + unique int id: @consume_expr, + int sub_expr: @expr_or_none ref +); + +copy_exprs( //dir=expr + unique int id: @copy_expr, + int sub_expr: @expr_or_none ref +); + +decl_ref_exprs( //dir=expr + unique int id: @decl_ref_expr, + int decl: @decl_or_none ref +); + +#keyset[id, index] +decl_ref_expr_replacement_types( //dir=expr + int id: @decl_ref_expr ref, + int index: int ref, + int replacement_type: @type_or_none ref +); + +#keyset[id] +decl_ref_expr_has_direct_to_storage_semantics( //dir=expr + int id: @decl_ref_expr ref +); + +#keyset[id] +decl_ref_expr_has_direct_to_implementation_semantics( //dir=expr + int id: @decl_ref_expr ref +); + +#keyset[id] +decl_ref_expr_has_ordinary_semantics( //dir=expr + int id: @decl_ref_expr ref +); + +#keyset[id] +decl_ref_expr_has_distributed_thunk_semantics( //dir=expr + int id: @decl_ref_expr ref +); + +default_argument_exprs( //dir=expr + unique int id: @default_argument_expr, + int param_decl: @param_decl_or_none ref, + int param_index: int ref +); + +#keyset[id] +default_argument_expr_caller_side_defaults( //dir=expr + int id: @default_argument_expr ref, + int caller_side_default: @expr_or_none ref +); + +discard_assignment_exprs( //dir=expr + unique int id: @discard_assignment_expr +); + +dot_syntax_base_ignored_exprs( //dir=expr + unique int id: @dot_syntax_base_ignored_expr, + int qualifier: @expr_or_none ref, + int sub_expr: @expr_or_none ref +); + +dynamic_type_exprs( //dir=expr + unique int id: @dynamic_type_expr, + int base: @expr_or_none ref +); + +enum_is_case_exprs( //dir=expr + unique int id: @enum_is_case_expr, + int sub_expr: @expr_or_none ref, + int element: @enum_element_decl_or_none ref +); + +error_exprs( //dir=expr + unique int id: @error_expr +); + +@explicit_cast_expr = + @checked_cast_expr +| @coerce_expr +; + +#keyset[id] +explicit_cast_exprs( //dir=expr + int id: @explicit_cast_expr ref, + int sub_expr: @expr_or_none ref +); + +force_value_exprs( //dir=expr + unique int id: @force_value_expr, + int sub_expr: @expr_or_none ref +); + +@identity_expr = + @await_expr +| @borrow_expr +| @dot_self_expr +| @paren_expr +| @unresolved_member_chain_result_expr +; + +#keyset[id] +identity_exprs( //dir=expr + int id: @identity_expr ref, + int sub_expr: @expr_or_none ref +); + +if_exprs( //dir=expr + unique int id: @if_expr, + int condition: @expr_or_none ref, + int then_expr: @expr_or_none ref, + int else_expr: @expr_or_none ref +); + +@implicit_conversion_expr = + @abi_safe_conversion_expr +| @any_hashable_erasure_expr +| @archetype_to_super_expr +| @array_to_pointer_expr +| @bridge_from_obj_c_expr +| @bridge_to_obj_c_expr +| @class_metatype_to_object_expr +| @collection_upcast_conversion_expr +| @conditional_bridge_from_obj_c_expr +| @covariant_function_conversion_expr +| @covariant_return_conversion_expr +| @derived_to_base_expr +| @destructure_tuple_expr +| @differentiable_function_expr +| @differentiable_function_extract_original_expr +| @erasure_expr +| @existential_metatype_to_object_expr +| @foreign_object_conversion_expr +| @function_conversion_expr +| @in_out_to_pointer_expr +| @inject_into_optional_expr +| @linear_function_expr +| @linear_function_extract_original_expr +| @linear_to_differentiable_function_expr +| @load_expr +| @metatype_conversion_expr +| @pointer_to_pointer_expr +| @protocol_metatype_to_object_expr +| @string_to_pointer_expr +| @underlying_to_opaque_expr +| @unevaluated_instance_expr +| @unresolved_type_conversion_expr +; + +#keyset[id] +implicit_conversion_exprs( //dir=expr + int id: @implicit_conversion_expr ref, + int sub_expr: @expr_or_none ref +); + +in_out_exprs( //dir=expr + unique int id: @in_out_expr, + int sub_expr: @expr_or_none ref +); + +key_path_application_exprs( //dir=expr + unique int id: @key_path_application_expr, + int base: @expr_or_none ref, + int key_path: @expr_or_none ref +); + +key_path_dot_exprs( //dir=expr + unique int id: @key_path_dot_expr +); + +key_path_exprs( //dir=expr + unique int id: @key_path_expr +); + +#keyset[id] +key_path_expr_roots( //dir=expr + int id: @key_path_expr ref, + int root: @type_repr_or_none ref +); + +#keyset[id, index] +key_path_expr_components( //dir=expr + int id: @key_path_expr ref, + int index: int ref, + int component: @key_path_component_or_none ref +); + +lazy_initialization_exprs( //dir=expr + unique int id: @lazy_initialization_expr, + int sub_expr: @expr_or_none ref +); + +@literal_expr = + @builtin_literal_expr +| @interpolated_string_literal_expr +| @nil_literal_expr +| @object_literal_expr +| @regex_literal_expr +; + +@lookup_expr = + @dynamic_lookup_expr +| @member_ref_expr +| @subscript_expr +; + +#keyset[id] +lookup_exprs( //dir=expr + int id: @lookup_expr ref, + int base: @expr_or_none ref +); + +#keyset[id] +lookup_expr_members( //dir=expr + int id: @lookup_expr ref, + int member: @decl_or_none ref +); + +make_temporarily_escapable_exprs( //dir=expr + unique int id: @make_temporarily_escapable_expr, + int escaping_closure: @opaque_value_expr_or_none ref, + int nonescaping_closure: @expr_or_none ref, + int sub_expr: @expr_or_none ref +); + +materialize_pack_exprs( //dir=expr + unique int id: @materialize_pack_expr, + int sub_expr: @expr_or_none ref +); + +obj_c_selector_exprs( //dir=expr + unique int id: @obj_c_selector_expr, + int sub_expr: @expr_or_none ref, + int method: @function_or_none ref +); + +one_way_exprs( //dir=expr + unique int id: @one_way_expr, + int sub_expr: @expr_or_none ref +); + +opaque_value_exprs( //dir=expr + unique int id: @opaque_value_expr +); + +open_existential_exprs( //dir=expr + unique int id: @open_existential_expr, + int sub_expr: @expr_or_none ref, + int existential: @expr_or_none ref, + int opaque_expr: @opaque_value_expr_or_none ref +); + +optional_evaluation_exprs( //dir=expr + unique int id: @optional_evaluation_expr, + int sub_expr: @expr_or_none ref +); + +other_initializer_ref_exprs( //dir=expr + unique int id: @other_initializer_ref_expr, + int initializer: @initializer_or_none ref +); + +overloaded_decl_ref_exprs( //dir=expr + unique int id: @overloaded_decl_ref_expr +); + +#keyset[id, index] +overloaded_decl_ref_expr_possible_declarations( //dir=expr + int id: @overloaded_decl_ref_expr ref, + int index: int ref, + int possible_declaration: @value_decl_or_none ref +); + +pack_element_exprs( //dir=expr + unique int id: @pack_element_expr, + int sub_expr: @expr_or_none ref +); + +pack_expansion_exprs( //dir=expr + unique int id: @pack_expansion_expr, + int pattern_expr: @expr_or_none ref +); + +property_wrapper_value_placeholder_exprs( //dir=expr + unique int id: @property_wrapper_value_placeholder_expr, + int placeholder: @opaque_value_expr_or_none ref +); + +#keyset[id] +property_wrapper_value_placeholder_expr_wrapped_values( //dir=expr + int id: @property_wrapper_value_placeholder_expr ref, + int wrapped_value: @expr_or_none ref +); + +rebind_self_in_initializer_exprs( //dir=expr + unique int id: @rebind_self_in_initializer_expr, + int sub_expr: @expr_or_none ref, + int self: @var_decl_or_none ref +); + +sequence_exprs( //dir=expr + unique int id: @sequence_expr +); + +#keyset[id, index] +sequence_expr_elements( //dir=expr + int id: @sequence_expr ref, + int index: int ref, + int element: @expr_or_none ref +); + +single_value_stmt_exprs( //dir=expr + unique int id: @single_value_stmt_expr, + int stmt: @stmt_or_none ref +); + +super_ref_exprs( //dir=expr + unique int id: @super_ref_expr, + int self: @var_decl_or_none ref +); + +tap_exprs( //dir=expr + unique int id: @tap_expr, + int body: @brace_stmt_or_none ref, + int var: @var_decl_or_none ref +); + +#keyset[id] +tap_expr_sub_exprs( //dir=expr + int id: @tap_expr ref, + int sub_expr: @expr_or_none ref +); + +tuple_element_exprs( //dir=expr + unique int id: @tuple_element_expr, + int sub_expr: @expr_or_none ref, + int index: int ref +); + +tuple_exprs( //dir=expr + unique int id: @tuple_expr +); + +#keyset[id, index] +tuple_expr_elements( //dir=expr + int id: @tuple_expr ref, + int index: int ref, + int element: @expr_or_none ref +); + +type_exprs( //dir=expr + unique int id: @type_expr +); + +#keyset[id] +type_expr_type_reprs( //dir=expr + int id: @type_expr ref, + int type_repr: @type_repr_or_none ref +); + +unresolved_decl_ref_exprs( //dir=expr + unique int id: @unresolved_decl_ref_expr +); + +#keyset[id] +unresolved_decl_ref_expr_names( //dir=expr + int id: @unresolved_decl_ref_expr ref, + string name: string ref +); + +unresolved_dot_exprs( //dir=expr + unique int id: @unresolved_dot_expr, + int base: @expr_or_none ref, + string name: string ref +); + +unresolved_member_exprs( //dir=expr + unique int id: @unresolved_member_expr, + string name: string ref +); + +unresolved_pattern_exprs( //dir=expr + unique int id: @unresolved_pattern_expr, + int sub_pattern: @pattern_or_none ref +); + +unresolved_specialize_exprs( //dir=expr + unique int id: @unresolved_specialize_expr, + int sub_expr: @expr_or_none ref +); + +vararg_expansion_exprs( //dir=expr + unique int id: @vararg_expansion_expr, + int sub_expr: @expr_or_none ref +); + +abi_safe_conversion_exprs( //dir=expr + unique int id: @abi_safe_conversion_expr +); + +any_hashable_erasure_exprs( //dir=expr + unique int id: @any_hashable_erasure_expr +); + +archetype_to_super_exprs( //dir=expr + unique int id: @archetype_to_super_expr +); + +array_exprs( //dir=expr + unique int id: @array_expr +); + +#keyset[id, index] +array_expr_elements( //dir=expr + int id: @array_expr ref, + int index: int ref, + int element: @expr_or_none ref +); + +array_to_pointer_exprs( //dir=expr + unique int id: @array_to_pointer_expr +); + +auto_closure_exprs( //dir=expr + unique int id: @auto_closure_expr +); + +await_exprs( //dir=expr + unique int id: @await_expr +); + +binary_exprs( //dir=expr + unique int id: @binary_expr +); + +borrow_exprs( //dir=expr + unique int id: @borrow_expr +); + +bridge_from_obj_c_exprs( //dir=expr + unique int id: @bridge_from_obj_c_expr +); + +bridge_to_obj_c_exprs( //dir=expr + unique int id: @bridge_to_obj_c_expr +); + +@builtin_literal_expr = + @boolean_literal_expr +| @magic_identifier_literal_expr +| @number_literal_expr +| @string_literal_expr +; + +call_exprs( //dir=expr + unique int id: @call_expr +); + +@checked_cast_expr = + @conditional_checked_cast_expr +| @forced_checked_cast_expr +| @is_expr +; + +class_metatype_to_object_exprs( //dir=expr + unique int id: @class_metatype_to_object_expr +); + +coerce_exprs( //dir=expr + unique int id: @coerce_expr +); + +collection_upcast_conversion_exprs( //dir=expr + unique int id: @collection_upcast_conversion_expr +); + +conditional_bridge_from_obj_c_exprs( //dir=expr + unique int id: @conditional_bridge_from_obj_c_expr +); + +covariant_function_conversion_exprs( //dir=expr + unique int id: @covariant_function_conversion_expr +); + +covariant_return_conversion_exprs( //dir=expr + unique int id: @covariant_return_conversion_expr +); + +derived_to_base_exprs( //dir=expr + unique int id: @derived_to_base_expr +); + +destructure_tuple_exprs( //dir=expr + unique int id: @destructure_tuple_expr +); + +dictionary_exprs( //dir=expr + unique int id: @dictionary_expr +); + +#keyset[id, index] +dictionary_expr_elements( //dir=expr + int id: @dictionary_expr ref, + int index: int ref, + int element: @expr_or_none ref +); + +differentiable_function_exprs( //dir=expr + unique int id: @differentiable_function_expr +); + +differentiable_function_extract_original_exprs( //dir=expr + unique int id: @differentiable_function_extract_original_expr +); + +dot_self_exprs( //dir=expr + unique int id: @dot_self_expr +); + +@dynamic_lookup_expr = + @dynamic_member_ref_expr +| @dynamic_subscript_expr +; + +erasure_exprs( //dir=expr + unique int id: @erasure_expr +); + +existential_metatype_to_object_exprs( //dir=expr + unique int id: @existential_metatype_to_object_expr +); + +explicit_closure_exprs( //dir=expr + unique int id: @explicit_closure_expr +); + +force_try_exprs( //dir=expr + unique int id: @force_try_expr +); + +foreign_object_conversion_exprs( //dir=expr + unique int id: @foreign_object_conversion_expr +); + +function_conversion_exprs( //dir=expr + unique int id: @function_conversion_expr +); + +in_out_to_pointer_exprs( //dir=expr + unique int id: @in_out_to_pointer_expr +); + +inject_into_optional_exprs( //dir=expr + unique int id: @inject_into_optional_expr +); + +interpolated_string_literal_exprs( //dir=expr + unique int id: @interpolated_string_literal_expr +); + +#keyset[id] +interpolated_string_literal_expr_interpolation_exprs( //dir=expr + int id: @interpolated_string_literal_expr ref, + int interpolation_expr: @opaque_value_expr_or_none ref +); + +#keyset[id] +interpolated_string_literal_expr_appending_exprs( //dir=expr + int id: @interpolated_string_literal_expr ref, + int appending_expr: @tap_expr_or_none ref +); + +linear_function_exprs( //dir=expr + unique int id: @linear_function_expr +); + +linear_function_extract_original_exprs( //dir=expr + unique int id: @linear_function_extract_original_expr +); + +linear_to_differentiable_function_exprs( //dir=expr + unique int id: @linear_to_differentiable_function_expr +); + +load_exprs( //dir=expr + unique int id: @load_expr +); + +member_ref_exprs( //dir=expr + unique int id: @member_ref_expr +); + +#keyset[id] +member_ref_expr_has_direct_to_storage_semantics( //dir=expr + int id: @member_ref_expr ref +); + +#keyset[id] +member_ref_expr_has_direct_to_implementation_semantics( //dir=expr + int id: @member_ref_expr ref +); + +#keyset[id] +member_ref_expr_has_ordinary_semantics( //dir=expr + int id: @member_ref_expr ref +); + +#keyset[id] +member_ref_expr_has_distributed_thunk_semantics( //dir=expr + int id: @member_ref_expr ref +); + +metatype_conversion_exprs( //dir=expr + unique int id: @metatype_conversion_expr +); + +nil_literal_exprs( //dir=expr + unique int id: @nil_literal_expr +); + +object_literal_exprs( //dir=expr + unique int id: @object_literal_expr, + int kind: int ref +); + +#keyset[id, index] +object_literal_expr_arguments( //dir=expr + int id: @object_literal_expr ref, + int index: int ref, + int argument: @argument_or_none ref +); + +optional_try_exprs( //dir=expr + unique int id: @optional_try_expr +); + +paren_exprs( //dir=expr + unique int id: @paren_expr +); + +pointer_to_pointer_exprs( //dir=expr + unique int id: @pointer_to_pointer_expr +); + +postfix_unary_exprs( //dir=expr + unique int id: @postfix_unary_expr +); + +prefix_unary_exprs( //dir=expr + unique int id: @prefix_unary_expr +); + +protocol_metatype_to_object_exprs( //dir=expr + unique int id: @protocol_metatype_to_object_expr +); + +regex_literal_exprs( //dir=expr + unique int id: @regex_literal_expr, + string pattern: string ref, + int version: int ref +); + +@self_apply_expr = + @dot_syntax_call_expr +| @initializer_ref_call_expr +; + +#keyset[id] +self_apply_exprs( //dir=expr + int id: @self_apply_expr ref, + int base: @expr_or_none ref +); + +string_to_pointer_exprs( //dir=expr + unique int id: @string_to_pointer_expr +); + +subscript_exprs( //dir=expr + unique int id: @subscript_expr +); + +#keyset[id, index] +subscript_expr_arguments( //dir=expr + int id: @subscript_expr ref, + int index: int ref, + int argument: @argument_or_none ref +); + +#keyset[id] +subscript_expr_has_direct_to_storage_semantics( //dir=expr + int id: @subscript_expr ref +); + +#keyset[id] +subscript_expr_has_direct_to_implementation_semantics( //dir=expr + int id: @subscript_expr ref +); + +#keyset[id] +subscript_expr_has_ordinary_semantics( //dir=expr + int id: @subscript_expr ref +); + +#keyset[id] +subscript_expr_has_distributed_thunk_semantics( //dir=expr + int id: @subscript_expr ref +); + +try_exprs( //dir=expr + unique int id: @try_expr +); + +underlying_to_opaque_exprs( //dir=expr + unique int id: @underlying_to_opaque_expr +); + +unevaluated_instance_exprs( //dir=expr + unique int id: @unevaluated_instance_expr +); + +unresolved_member_chain_result_exprs( //dir=expr + unique int id: @unresolved_member_chain_result_expr +); + +unresolved_type_conversion_exprs( //dir=expr + unique int id: @unresolved_type_conversion_expr +); + +boolean_literal_exprs( //dir=expr + unique int id: @boolean_literal_expr, + boolean value: boolean ref +); + +conditional_checked_cast_exprs( //dir=expr + unique int id: @conditional_checked_cast_expr +); + +dot_syntax_call_exprs( //dir=expr + unique int id: @dot_syntax_call_expr +); + +dynamic_member_ref_exprs( //dir=expr + unique int id: @dynamic_member_ref_expr +); + +dynamic_subscript_exprs( //dir=expr + unique int id: @dynamic_subscript_expr +); + +forced_checked_cast_exprs( //dir=expr + unique int id: @forced_checked_cast_expr +); + +initializer_ref_call_exprs( //dir=expr + unique int id: @initializer_ref_call_expr +); + +is_exprs( //dir=expr + unique int id: @is_expr +); + +magic_identifier_literal_exprs( //dir=expr + unique int id: @magic_identifier_literal_expr, + string kind: string ref +); + +@number_literal_expr = + @float_literal_expr +| @integer_literal_expr +; + +string_literal_exprs( //dir=expr + unique int id: @string_literal_expr, + string value: string ref +); + +float_literal_exprs( //dir=expr + unique int id: @float_literal_expr, + string string_value: string ref +); + +integer_literal_exprs( //dir=expr + unique int id: @integer_literal_expr, + string string_value: string ref +); + +@pattern = + @any_pattern +| @binding_pattern +| @bool_pattern +| @enum_element_pattern +| @expr_pattern +| @is_pattern +| @named_pattern +| @optional_some_pattern +| @paren_pattern +| @tuple_pattern +| @typed_pattern +; + +#keyset[id] +pattern_types( //dir=pattern + int id: @pattern ref, + int type_: @type_or_none ref +); + +any_patterns( //dir=pattern + unique int id: @any_pattern +); + +binding_patterns( //dir=pattern + unique int id: @binding_pattern, + int sub_pattern: @pattern_or_none ref +); + +bool_patterns( //dir=pattern + unique int id: @bool_pattern, + boolean value: boolean ref +); + +enum_element_patterns( //dir=pattern + unique int id: @enum_element_pattern, + int element: @enum_element_decl_or_none ref +); + +#keyset[id] +enum_element_pattern_sub_patterns( //dir=pattern + int id: @enum_element_pattern ref, + int sub_pattern: @pattern_or_none ref +); + +expr_patterns( //dir=pattern + unique int id: @expr_pattern, + int sub_expr: @expr_or_none ref +); + +is_patterns( //dir=pattern + unique int id: @is_pattern +); + +#keyset[id] +is_pattern_cast_type_reprs( //dir=pattern + int id: @is_pattern ref, + int cast_type_repr: @type_repr_or_none ref +); + +#keyset[id] +is_pattern_sub_patterns( //dir=pattern + int id: @is_pattern ref, + int sub_pattern: @pattern_or_none ref +); + +named_patterns( //dir=pattern + unique int id: @named_pattern, + int var_decl: @var_decl_or_none ref +); + +optional_some_patterns( //dir=pattern + unique int id: @optional_some_pattern, + int sub_pattern: @pattern_or_none ref +); + +paren_patterns( //dir=pattern + unique int id: @paren_pattern, + int sub_pattern: @pattern_or_none ref +); + +tuple_patterns( //dir=pattern + unique int id: @tuple_pattern +); + +#keyset[id, index] +tuple_pattern_elements( //dir=pattern + int id: @tuple_pattern ref, + int index: int ref, + int element: @pattern_or_none ref +); + +typed_patterns( //dir=pattern + unique int id: @typed_pattern, + int sub_pattern: @pattern_or_none ref +); + +#keyset[id] +typed_pattern_type_reprs( //dir=pattern + int id: @typed_pattern ref, + int type_repr: @type_repr_or_none ref +); + +case_label_items( //dir=stmt + unique int id: @case_label_item, + int pattern: @pattern_or_none ref +); + +#keyset[id] +case_label_item_guards( //dir=stmt + int id: @case_label_item ref, + int guard: @expr_or_none ref +); + +condition_elements( //dir=stmt + unique int id: @condition_element +); + +#keyset[id] +condition_element_booleans( //dir=stmt + int id: @condition_element ref, + int boolean_: @expr_or_none ref +); + +#keyset[id] +condition_element_patterns( //dir=stmt + int id: @condition_element ref, + int pattern: @pattern_or_none ref +); + +#keyset[id] +condition_element_initializers( //dir=stmt + int id: @condition_element ref, + int initializer: @expr_or_none ref +); + +#keyset[id] +condition_element_availabilities( //dir=stmt + int id: @condition_element ref, + int availability: @availability_info_or_none ref +); + +@stmt = + @brace_stmt +| @break_stmt +| @case_stmt +| @continue_stmt +| @defer_stmt +| @discard_stmt +| @fail_stmt +| @fallthrough_stmt +| @labeled_stmt +| @pound_assert_stmt +| @return_stmt +| @then_stmt +| @throw_stmt +| @yield_stmt +; + +stmt_conditions( //dir=stmt + unique int id: @stmt_condition +); + +#keyset[id, index] +stmt_condition_elements( //dir=stmt + int id: @stmt_condition ref, + int index: int ref, + int element: @condition_element_or_none ref +); + +brace_stmts( //dir=stmt + unique int id: @brace_stmt +); + +#keyset[id, index] +brace_stmt_elements( //dir=stmt + int id: @brace_stmt ref, + int index: int ref, + int element: @ast_node_or_none ref +); + +break_stmts( //dir=stmt + unique int id: @break_stmt +); + +#keyset[id] +break_stmt_target_names( //dir=stmt + int id: @break_stmt ref, + string target_name: string ref +); + +#keyset[id] +break_stmt_targets( //dir=stmt + int id: @break_stmt ref, + int target: @stmt_or_none ref +); + +case_stmts( //dir=stmt + unique int id: @case_stmt, + int body: @stmt_or_none ref +); + +#keyset[id, index] +case_stmt_labels( //dir=stmt + int id: @case_stmt ref, + int index: int ref, + int label: @case_label_item_or_none ref +); + +#keyset[id, index] +case_stmt_variables( //dir=stmt + int id: @case_stmt ref, + int index: int ref, + int variable: @var_decl_or_none ref +); + +continue_stmts( //dir=stmt + unique int id: @continue_stmt +); + +#keyset[id] +continue_stmt_target_names( //dir=stmt + int id: @continue_stmt ref, + string target_name: string ref +); + +#keyset[id] +continue_stmt_targets( //dir=stmt + int id: @continue_stmt ref, + int target: @stmt_or_none ref +); + +defer_stmts( //dir=stmt + unique int id: @defer_stmt, + int body: @brace_stmt_or_none ref +); + +discard_stmts( //dir=stmt + unique int id: @discard_stmt, + int sub_expr: @expr_or_none ref +); + +fail_stmts( //dir=stmt + unique int id: @fail_stmt +); + +fallthrough_stmts( //dir=stmt + unique int id: @fallthrough_stmt, + int fallthrough_source: @case_stmt_or_none ref, + int fallthrough_dest: @case_stmt_or_none ref +); + +@labeled_stmt = + @do_catch_stmt +| @do_stmt +| @for_each_stmt +| @labeled_conditional_stmt +| @repeat_while_stmt +| @switch_stmt +; + +#keyset[id] +labeled_stmt_labels( //dir=stmt + int id: @labeled_stmt ref, + string label: string ref +); + +pound_assert_stmts( //dir=stmt + unique int id: @pound_assert_stmt, + int condition: @expr_or_none ref, + string message: string ref +); + +return_stmts( //dir=stmt + unique int id: @return_stmt +); + +#keyset[id] +return_stmt_results( //dir=stmt + int id: @return_stmt ref, + int result: @expr_or_none ref +); + +then_stmts( //dir=stmt + unique int id: @then_stmt, + int result: @expr_or_none ref +); + +throw_stmts( //dir=stmt + unique int id: @throw_stmt, + int sub_expr: @expr_or_none ref +); + +yield_stmts( //dir=stmt + unique int id: @yield_stmt +); + +#keyset[id, index] +yield_stmt_results( //dir=stmt + int id: @yield_stmt ref, + int index: int ref, + int result: @expr_or_none ref +); + +do_catch_stmts( //dir=stmt + unique int id: @do_catch_stmt, + int body: @stmt_or_none ref +); + +#keyset[id, index] +do_catch_stmt_catches( //dir=stmt + int id: @do_catch_stmt ref, + int index: int ref, + int catch: @case_stmt_or_none ref +); + +do_stmts( //dir=stmt + unique int id: @do_stmt, + int body: @brace_stmt_or_none ref +); + +for_each_stmts( //dir=stmt + unique int id: @for_each_stmt, + int pattern: @pattern_or_none ref, + int body: @brace_stmt_or_none ref +); + +#keyset[id] +for_each_stmt_wheres( //dir=stmt + int id: @for_each_stmt ref, + int where: @expr_or_none ref +); + +#keyset[id] +for_each_stmt_iterator_vars( //dir=stmt + int id: @for_each_stmt ref, + int iteratorVar: @pattern_binding_decl_or_none ref +); + +#keyset[id] +for_each_stmt_next_calls( //dir=stmt + int id: @for_each_stmt ref, + int nextCall: @expr_or_none ref +); + +@labeled_conditional_stmt = + @guard_stmt +| @if_stmt +| @while_stmt +; + +#keyset[id] +labeled_conditional_stmts( //dir=stmt + int id: @labeled_conditional_stmt ref, + int condition: @stmt_condition_or_none ref +); + +repeat_while_stmts( //dir=stmt + unique int id: @repeat_while_stmt, + int condition: @expr_or_none ref, + int body: @stmt_or_none ref +); + +switch_stmts( //dir=stmt + unique int id: @switch_stmt, + int expr: @expr_or_none ref +); + +#keyset[id, index] +switch_stmt_cases( //dir=stmt + int id: @switch_stmt ref, + int index: int ref, + int case_: @case_stmt_or_none ref +); + +guard_stmts( //dir=stmt + unique int id: @guard_stmt, + int body: @brace_stmt_or_none ref +); + +if_stmts( //dir=stmt + unique int id: @if_stmt, + int then: @stmt_or_none ref +); + +#keyset[id] +if_stmt_elses( //dir=stmt + int id: @if_stmt ref, + int else: @stmt_or_none ref +); + +while_stmts( //dir=stmt + unique int id: @while_stmt, + int body: @stmt_or_none ref +); + +@type = + @any_function_type +| @any_generic_type +| @any_metatype_type +| @builtin_type +| @dependent_member_type +| @dynamic_self_type +| @error_type +| @existential_type +| @in_out_type +| @l_value_type +| @module_type +| @pack_element_type +| @pack_expansion_type +| @pack_type +| @parameterized_protocol_type +| @protocol_composition_type +| @reference_storage_type +| @substitutable_type +| @sugar_type +| @tuple_type +| @unresolved_type +; + +#keyset[id] +types( //dir=type + int id: @type ref, + string name: string ref, + int canonical_type: @type_or_none ref +); + +type_reprs( //dir=type + unique int id: @type_repr, + int type_: @type_or_none ref +); + +@any_function_type = + @function_type +| @generic_function_type +; + +#keyset[id] +any_function_types( //dir=type + int id: @any_function_type ref, + int result: @type_or_none ref +); + +#keyset[id, index] +any_function_type_param_types( //dir=type + int id: @any_function_type ref, + int index: int ref, + int param_type: @type_or_none ref +); + +#keyset[id] +any_function_type_is_throwing( //dir=type + int id: @any_function_type ref +); + +#keyset[id] +any_function_type_is_async( //dir=type + int id: @any_function_type ref +); + +@any_generic_type = + @nominal_or_bound_generic_nominal_type +| @unbound_generic_type +; + +#keyset[id] +any_generic_types( //dir=type + int id: @any_generic_type ref, + int declaration: @generic_type_decl_or_none ref +); + +#keyset[id] +any_generic_type_parents( //dir=type + int id: @any_generic_type ref, + int parent: @type_or_none ref +); + +@any_metatype_type = + @existential_metatype_type +| @metatype_type +; + +@builtin_type = + @any_builtin_integer_type +| @builtin_bridge_object_type +| @builtin_default_actor_storage_type +| @builtin_executor_type +| @builtin_float_type +| @builtin_job_type +| @builtin_native_object_type +| @builtin_raw_pointer_type +| @builtin_raw_unsafe_continuation_type +| @builtin_unsafe_value_buffer_type +| @builtin_vector_type +; + +dependent_member_types( //dir=type + unique int id: @dependent_member_type, + int base_type: @type_or_none ref, + int associated_type_decl: @associated_type_decl_or_none ref +); + +dynamic_self_types( //dir=type + unique int id: @dynamic_self_type, + int static_self_type: @type_or_none ref +); + +error_types( //dir=type + unique int id: @error_type +); + +existential_types( //dir=type + unique int id: @existential_type, + int constraint: @type_or_none ref +); + +in_out_types( //dir=type + unique int id: @in_out_type, + int object_type: @type_or_none ref +); + +l_value_types( //dir=type + unique int id: @l_value_type, + int object_type: @type_or_none ref +); + +module_types( //dir=type + unique int id: @module_type, + int module: @module_decl_or_none ref +); + +pack_element_types( //dir=type + unique int id: @pack_element_type, + int pack_type: @type_or_none ref +); + +pack_expansion_types( //dir=type + unique int id: @pack_expansion_type, + int pattern_type: @type_or_none ref, + int count_type: @type_or_none ref +); + +pack_types( //dir=type + unique int id: @pack_type +); + +#keyset[id, index] +pack_type_elements( //dir=type + int id: @pack_type ref, + int index: int ref, + int element: @type_or_none ref +); + +parameterized_protocol_types( //dir=type + unique int id: @parameterized_protocol_type, + int base: @protocol_type_or_none ref +); + +#keyset[id, index] +parameterized_protocol_type_args( //dir=type + int id: @parameterized_protocol_type ref, + int index: int ref, + int arg: @type_or_none ref +); + +protocol_composition_types( //dir=type + unique int id: @protocol_composition_type +); + +#keyset[id, index] +protocol_composition_type_members( //dir=type + int id: @protocol_composition_type ref, + int index: int ref, + int member: @type_or_none ref +); + +@reference_storage_type = + @unmanaged_storage_type +| @unowned_storage_type +| @weak_storage_type +; + +#keyset[id] +reference_storage_types( //dir=type + int id: @reference_storage_type ref, + int referent_type: @type_or_none ref +); + +@substitutable_type = + @archetype_type +| @generic_type_param_type +; + +@sugar_type = + @paren_type +| @syntax_sugar_type +| @type_alias_type +; + +tuple_types( //dir=type + unique int id: @tuple_type +); + +#keyset[id, index] +tuple_type_types( //dir=type + int id: @tuple_type ref, + int index: int ref, + int type_: @type_or_none ref +); + +#keyset[id, index] +tuple_type_names( //dir=type + int id: @tuple_type ref, + int index: int ref, + string name: string ref +); + +unresolved_types( //dir=type + unique int id: @unresolved_type +); + +@any_builtin_integer_type = + @builtin_integer_literal_type +| @builtin_integer_type +; + +@archetype_type = + @local_archetype_type +| @opaque_type_archetype_type +| @pack_archetype_type +| @primary_archetype_type +; + +#keyset[id] +archetype_types( //dir=type + int id: @archetype_type ref, + int interface_type: @type_or_none ref +); + +#keyset[id] +archetype_type_superclasses( //dir=type + int id: @archetype_type ref, + int superclass: @type_or_none ref +); + +#keyset[id, index] +archetype_type_protocols( //dir=type + int id: @archetype_type ref, + int index: int ref, + int protocol: @protocol_decl_or_none ref +); + +builtin_bridge_object_types( //dir=type + unique int id: @builtin_bridge_object_type +); + +builtin_default_actor_storage_types( //dir=type + unique int id: @builtin_default_actor_storage_type +); + +builtin_executor_types( //dir=type + unique int id: @builtin_executor_type +); + +builtin_float_types( //dir=type + unique int id: @builtin_float_type +); + +builtin_job_types( //dir=type + unique int id: @builtin_job_type +); + +builtin_native_object_types( //dir=type + unique int id: @builtin_native_object_type +); + +builtin_raw_pointer_types( //dir=type + unique int id: @builtin_raw_pointer_type +); + +builtin_raw_unsafe_continuation_types( //dir=type + unique int id: @builtin_raw_unsafe_continuation_type +); + +builtin_unsafe_value_buffer_types( //dir=type + unique int id: @builtin_unsafe_value_buffer_type +); + +builtin_vector_types( //dir=type + unique int id: @builtin_vector_type +); + +existential_metatype_types( //dir=type + unique int id: @existential_metatype_type +); + +function_types( //dir=type + unique int id: @function_type +); + +generic_function_types( //dir=type + unique int id: @generic_function_type +); + +#keyset[id, index] +generic_function_type_generic_params( //dir=type + int id: @generic_function_type ref, + int index: int ref, + int generic_param: @generic_type_param_type_or_none ref +); + +generic_type_param_types( //dir=type + unique int id: @generic_type_param_type +); + +metatype_types( //dir=type + unique int id: @metatype_type +); + +@nominal_or_bound_generic_nominal_type = + @bound_generic_type +| @nominal_type +; + +paren_types( //dir=type + unique int id: @paren_type, + int type_: @type_or_none ref +); + +@syntax_sugar_type = + @dictionary_type +| @unary_syntax_sugar_type +; + +type_alias_types( //dir=type + unique int id: @type_alias_type, + int decl: @type_alias_decl_or_none ref +); + +unbound_generic_types( //dir=type + unique int id: @unbound_generic_type +); + +unmanaged_storage_types( //dir=type + unique int id: @unmanaged_storage_type +); + +unowned_storage_types( //dir=type + unique int id: @unowned_storage_type +); + +weak_storage_types( //dir=type + unique int id: @weak_storage_type +); + +@bound_generic_type = + @bound_generic_class_type +| @bound_generic_enum_type +| @bound_generic_struct_type +; + +#keyset[id, index] +bound_generic_type_arg_types( //dir=type + int id: @bound_generic_type ref, + int index: int ref, + int arg_type: @type_or_none ref +); + +builtin_integer_literal_types( //dir=type + unique int id: @builtin_integer_literal_type +); + +builtin_integer_types( //dir=type + unique int id: @builtin_integer_type +); + +#keyset[id] +builtin_integer_type_widths( //dir=type + int id: @builtin_integer_type ref, + int width: int ref +); + +dictionary_types( //dir=type + unique int id: @dictionary_type, + int key_type: @type_or_none ref, + int value_type: @type_or_none ref +); + +@local_archetype_type = + @element_archetype_type +| @opened_archetype_type +; + +@nominal_type = + @class_type +| @enum_type +| @protocol_type +| @struct_type +; + +opaque_type_archetype_types( //dir=type + unique int id: @opaque_type_archetype_type, + int declaration: @opaque_type_decl_or_none ref +); + +pack_archetype_types( //dir=type + unique int id: @pack_archetype_type +); + +primary_archetype_types( //dir=type + unique int id: @primary_archetype_type +); + +@unary_syntax_sugar_type = + @array_slice_type +| @optional_type +| @variadic_sequence_type +; + +#keyset[id] +unary_syntax_sugar_types( //dir=type + int id: @unary_syntax_sugar_type ref, + int base_type: @type_or_none ref +); + +array_slice_types( //dir=type + unique int id: @array_slice_type +); + +bound_generic_class_types( //dir=type + unique int id: @bound_generic_class_type +); + +bound_generic_enum_types( //dir=type + unique int id: @bound_generic_enum_type +); + +bound_generic_struct_types( //dir=type + unique int id: @bound_generic_struct_type +); + +class_types( //dir=type + unique int id: @class_type +); + +element_archetype_types( //dir=type + unique int id: @element_archetype_type +); + +enum_types( //dir=type + unique int id: @enum_type +); + +opened_archetype_types( //dir=type + unique int id: @opened_archetype_type +); + +optional_types( //dir=type + unique int id: @optional_type +); + +protocol_types( //dir=type + unique int id: @protocol_type +); + +struct_types( //dir=type + unique int id: @struct_type +); + +variadic_sequence_types( //dir=type + unique int id: @variadic_sequence_type +); + +@accessor_or_none = + @accessor +| @unspecified_element +; + +@argument_or_none = + @argument +| @unspecified_element +; + +@associated_type_decl_or_none = + @associated_type_decl +| @unspecified_element +; + +@ast_node_or_none = + @ast_node +| @unspecified_element +; + +@availability_info_or_none = + @availability_info +| @unspecified_element +; + +@availability_spec_or_none = + @availability_spec +| @unspecified_element +; + +@brace_stmt_or_none = + @brace_stmt +| @unspecified_element +; + +@captured_decl_or_none = + @captured_decl +| @unspecified_element +; + +@case_label_item_or_none = + @case_label_item +| @unspecified_element +; + +@case_stmt_or_none = + @case_stmt +| @unspecified_element +; + +@closure_expr_or_none = + @closure_expr +| @unspecified_element +; + +@condition_element_or_none = + @condition_element +| @unspecified_element +; + +@decl_or_none = + @decl +| @unspecified_element +; + +@enum_element_decl_or_none = + @enum_element_decl +| @unspecified_element +; + +@expr_or_none = + @expr +| @unspecified_element +; + +@file_or_none = + @file +| @unspecified_element +; + +@function_or_none = + @function +| @unspecified_element +; + +@generic_type_decl_or_none = + @generic_type_decl +| @unspecified_element +; + +@generic_type_param_decl_or_none = + @generic_type_param_decl +| @unspecified_element +; + +@generic_type_param_type_or_none = + @generic_type_param_type +| @unspecified_element +; + +@initializer_or_none = + @initializer +| @unspecified_element +; + +@key_path_component_or_none = + @key_path_component +| @unspecified_element +; + +@location_or_none = + @location +| @unspecified_element +; + +@macro_role_or_none = + @macro_role +| @unspecified_element +; + +@module_decl_or_none = + @module_decl +| @unspecified_element +; + +@nominal_type_decl_or_none = + @nominal_type_decl +| @unspecified_element +; + +@opaque_type_decl_or_none = + @opaque_type_decl +| @unspecified_element +; + +@opaque_value_expr_or_none = + @opaque_value_expr +| @unspecified_element +; + +@param_decl_or_none = + @param_decl +| @unspecified_element +; + +@pattern_or_none = + @pattern +| @unspecified_element +; + +@pattern_binding_decl_or_none = + @pattern_binding_decl +| @unspecified_element +; + +@precedence_group_decl_or_none = + @precedence_group_decl +| @unspecified_element +; + +@protocol_decl_or_none = + @protocol_decl +| @unspecified_element +; + +@protocol_type_or_none = + @protocol_type +| @unspecified_element +; + +@stmt_or_none = + @stmt +| @unspecified_element +; + +@stmt_condition_or_none = + @stmt_condition +| @unspecified_element +; + +@string_literal_expr_or_none = + @string_literal_expr +| @unspecified_element +; + +@tap_expr_or_none = + @tap_expr +| @unspecified_element +; + +@type_or_none = + @type +| @unspecified_element +; + +@type_alias_decl_or_none = + @type_alias_decl +| @unspecified_element +; + +@type_expr_or_none = + @type_expr +| @unspecified_element +; + +@type_repr_or_none = + @type_repr +| @unspecified_element +; + +@value_decl_or_none = + @unspecified_element +| @value_decl +; + +@var_decl_or_none = + @unspecified_element +| @var_decl +; diff --git a/swift/downgrades/15a630f68e14f053932cf6a23797f43d958eedc9/swift.dbscheme b/swift/downgrades/15a630f68e14f053932cf6a23797f43d958eedc9/swift.dbscheme new file mode 100644 index 00000000000..60be249ad16 --- /dev/null +++ b/swift/downgrades/15a630f68e14f053932cf6a23797f43d958eedc9/swift.dbscheme @@ -0,0 +1,2780 @@ +// generated by codegen/codegen.py + +// from prefix.dbscheme +/** + * The source location of the snapshot. + */ +sourceLocationPrefix( + string prefix: string ref +); + + +// from schema.py + +@element = + @callable +| @file +| @generic_context +| @locatable +| @location +| @type +; + +#keyset[id] +element_is_unknown( + int id: @element ref +); + +@callable = + @closure_expr +| @function +; + +#keyset[id] +callable_names( + int id: @callable ref, + string name: string ref +); + +#keyset[id] +callable_self_params( + int id: @callable ref, + int self_param: @param_decl_or_none ref +); + +#keyset[id, index] +callable_params( + int id: @callable ref, + int index: int ref, + int param: @param_decl_or_none ref +); + +#keyset[id] +callable_bodies( + int id: @callable ref, + int body: @brace_stmt_or_none ref +); + +#keyset[id, index] +callable_captures( + int id: @callable ref, + int index: int ref, + int capture: @captured_decl_or_none ref +); + +@file = + @db_file +; + +#keyset[id] +files( + int id: @file ref, + string name: string ref +); + +#keyset[id] +file_is_successfully_extracted( + int id: @file ref +); + +@locatable = + @argument +| @ast_node +| @comment +| @diagnostics +| @error_element +; + +#keyset[id] +locatable_locations( + int id: @locatable ref, + int location: @location_or_none ref +); + +@location = + @db_location +; + +#keyset[id] +locations( + int id: @location ref, + int file: @file_or_none ref, + int start_line: int ref, + int start_column: int ref, + int end_line: int ref, + int end_column: int ref +); + +@ast_node = + @availability_info +| @availability_spec +| @case_label_item +| @condition_element +| @decl +| @expr +| @key_path_component +| @macro_role +| @pattern +| @stmt +| @stmt_condition +| @type_repr +; + +comments( + unique int id: @comment, + string text: string ref +); + +db_files( + unique int id: @db_file +); + +db_locations( + unique int id: @db_location +); + +diagnostics( + unique int id: @diagnostics, + string text: string ref, + int kind: int ref +); + +@error_element = + @error_expr +| @error_type +| @overloaded_decl_ref_expr +| @unresolved_decl_ref_expr +| @unresolved_dot_expr +| @unresolved_member_chain_result_expr +| @unresolved_member_expr +| @unresolved_pattern_expr +| @unresolved_specialize_expr +| @unresolved_type +| @unresolved_type_conversion_expr +| @unspecified_element +; + +availability_infos( + unique int id: @availability_info +); + +#keyset[id] +availability_info_is_unavailable( + int id: @availability_info ref +); + +#keyset[id, index] +availability_info_specs( + int id: @availability_info ref, + int index: int ref, + int spec: @availability_spec_or_none ref +); + +@availability_spec = + @other_availability_spec +| @platform_version_availability_spec +; + +key_path_components( + unique int id: @key_path_component, + int kind: int ref, + int component_type: @type_or_none ref +); + +#keyset[id, index] +key_path_component_subscript_arguments( + int id: @key_path_component ref, + int index: int ref, + int subscript_argument: @argument_or_none ref +); + +#keyset[id] +key_path_component_tuple_indices( + int id: @key_path_component ref, + int tuple_index: int ref +); + +#keyset[id] +key_path_component_decl_refs( + int id: @key_path_component ref, + int decl_ref: @value_decl_or_none ref +); + +macro_roles( + unique int id: @macro_role, + int kind: int ref, + int macro_syntax: int ref +); + +#keyset[id, index] +macro_role_conformances( + int id: @macro_role ref, + int index: int ref, + int conformance: @type_expr_or_none ref +); + +#keyset[id, index] +macro_role_names( + int id: @macro_role ref, + int index: int ref, + string name: string ref +); + +unspecified_elements( + unique int id: @unspecified_element, + string property: string ref, + string error: string ref +); + +#keyset[id] +unspecified_element_parents( + int id: @unspecified_element ref, + int parent: @element ref +); + +#keyset[id] +unspecified_element_indices( + int id: @unspecified_element ref, + int index: int ref +); + +#keyset[id, index] +unspecified_element_children( + int id: @unspecified_element ref, + int index: int ref, + int child: @ast_node_or_none ref +); + +other_availability_specs( + unique int id: @other_availability_spec +); + +platform_version_availability_specs( + unique int id: @platform_version_availability_spec, + string platform: string ref, + string version: string ref +); + +@decl = + @captured_decl +| @enum_case_decl +| @extension_decl +| @if_config_decl +| @import_decl +| @missing_member_decl +| @operator_decl +| @pattern_binding_decl +| @pound_diagnostic_decl +| @precedence_group_decl +| @top_level_code_decl +| @value_decl +; + +#keyset[id] +decls( //dir=decl + int id: @decl ref, + int module: @module_decl_or_none ref +); + +#keyset[id, index] +decl_members( //dir=decl + int id: @decl ref, + int index: int ref, + int member: @decl_or_none ref +); + +@generic_context = + @extension_decl +| @function +| @generic_type_decl +| @macro_decl +| @subscript_decl +; + +#keyset[id, index] +generic_context_generic_type_params( //dir=decl + int id: @generic_context ref, + int index: int ref, + int generic_type_param: @generic_type_param_decl_or_none ref +); + +captured_decls( //dir=decl + unique int id: @captured_decl, + int decl: @value_decl_or_none ref +); + +#keyset[id] +captured_decl_is_direct( //dir=decl + int id: @captured_decl ref +); + +#keyset[id] +captured_decl_is_escaping( //dir=decl + int id: @captured_decl ref +); + +enum_case_decls( //dir=decl + unique int id: @enum_case_decl +); + +#keyset[id, index] +enum_case_decl_elements( //dir=decl + int id: @enum_case_decl ref, + int index: int ref, + int element: @enum_element_decl_or_none ref +); + +extension_decls( //dir=decl + unique int id: @extension_decl, + int extended_type_decl: @nominal_type_decl_or_none ref +); + +#keyset[id, index] +extension_decl_protocols( //dir=decl + int id: @extension_decl ref, + int index: int ref, + int protocol: @protocol_decl_or_none ref +); + +if_config_decls( //dir=decl + unique int id: @if_config_decl +); + +#keyset[id, index] +if_config_decl_active_elements( //dir=decl + int id: @if_config_decl ref, + int index: int ref, + int active_element: @ast_node_or_none ref +); + +import_decls( //dir=decl + unique int id: @import_decl +); + +#keyset[id] +import_decl_is_exported( //dir=decl + int id: @import_decl ref +); + +#keyset[id] +import_decl_imported_modules( //dir=decl + int id: @import_decl ref, + int imported_module: @module_decl_or_none ref +); + +#keyset[id, index] +import_decl_declarations( //dir=decl + int id: @import_decl ref, + int index: int ref, + int declaration: @value_decl_or_none ref +); + +missing_member_decls( //dir=decl + unique int id: @missing_member_decl, + string name: string ref +); + +@operator_decl = + @infix_operator_decl +| @postfix_operator_decl +| @prefix_operator_decl +; + +#keyset[id] +operator_decls( //dir=decl + int id: @operator_decl ref, + string name: string ref +); + +pattern_binding_decls( //dir=decl + unique int id: @pattern_binding_decl +); + +#keyset[id, index] +pattern_binding_decl_inits( //dir=decl + int id: @pattern_binding_decl ref, + int index: int ref, + int init: @expr_or_none ref +); + +#keyset[id, index] +pattern_binding_decl_patterns( //dir=decl + int id: @pattern_binding_decl ref, + int index: int ref, + int pattern: @pattern_or_none ref +); + +pound_diagnostic_decls( //dir=decl + unique int id: @pound_diagnostic_decl, + int kind: int ref, + int message: @string_literal_expr_or_none ref +); + +precedence_group_decls( //dir=decl + unique int id: @precedence_group_decl +); + +top_level_code_decls( //dir=decl + unique int id: @top_level_code_decl, + int body: @brace_stmt_or_none ref +); + +@value_decl = + @abstract_storage_decl +| @enum_element_decl +| @function +| @macro_decl +| @type_decl +; + +#keyset[id] +value_decls( //dir=decl + int id: @value_decl ref, + int interface_type: @type_or_none ref +); + +@abstract_storage_decl = + @subscript_decl +| @var_decl +; + +#keyset[id, index] +abstract_storage_decl_accessors( //dir=decl + int id: @abstract_storage_decl ref, + int index: int ref, + int accessor: @accessor_or_none ref +); + +enum_element_decls( //dir=decl + unique int id: @enum_element_decl, + string name: string ref +); + +#keyset[id, index] +enum_element_decl_params( //dir=decl + int id: @enum_element_decl ref, + int index: int ref, + int param: @param_decl_or_none ref +); + +@function = + @accessor_or_named_function +| @deinitializer +| @initializer +; + +infix_operator_decls( //dir=decl + unique int id: @infix_operator_decl +); + +#keyset[id] +infix_operator_decl_precedence_groups( //dir=decl + int id: @infix_operator_decl ref, + int precedence_group: @precedence_group_decl_or_none ref +); + +macro_decls( //dir=decl + unique int id: @macro_decl, + string name: string ref +); + +#keyset[id, index] +macro_decl_parameters( //dir=decl + int id: @macro_decl ref, + int index: int ref, + int parameter: @param_decl_or_none ref +); + +#keyset[id, index] +macro_decl_roles( //dir=decl + int id: @macro_decl ref, + int index: int ref, + int role: @macro_role_or_none ref +); + +postfix_operator_decls( //dir=decl + unique int id: @postfix_operator_decl +); + +prefix_operator_decls( //dir=decl + unique int id: @prefix_operator_decl +); + +@type_decl = + @abstract_type_param_decl +| @generic_type_decl +| @module_decl +; + +#keyset[id] +type_decls( //dir=decl + int id: @type_decl ref, + string name: string ref +); + +#keyset[id, index] +type_decl_inherited_types( //dir=decl + int id: @type_decl ref, + int index: int ref, + int inherited_type: @type_or_none ref +); + +@abstract_type_param_decl = + @associated_type_decl +| @generic_type_param_decl +; + +@accessor_or_named_function = + @accessor +| @named_function +; + +deinitializers( //dir=decl + unique int id: @deinitializer +); + +@generic_type_decl = + @nominal_type_decl +| @opaque_type_decl +| @type_alias_decl +; + +initializers( //dir=decl + unique int id: @initializer +); + +module_decls( //dir=decl + unique int id: @module_decl +); + +#keyset[id] +module_decl_is_builtin_module( //dir=decl + int id: @module_decl ref +); + +#keyset[id] +module_decl_is_system_module( //dir=decl + int id: @module_decl ref +); + +module_decl_imported_modules( //dir=decl + int id: @module_decl ref, + int imported_module: @module_decl_or_none ref +); + +module_decl_exported_modules( //dir=decl + int id: @module_decl ref, + int exported_module: @module_decl_or_none ref +); + +subscript_decls( //dir=decl + unique int id: @subscript_decl, + int element_type: @type_or_none ref +); + +#keyset[id, index] +subscript_decl_params( //dir=decl + int id: @subscript_decl ref, + int index: int ref, + int param: @param_decl_or_none ref +); + +@var_decl = + @concrete_var_decl +| @param_decl +; + +#keyset[id] +var_decls( //dir=decl + int id: @var_decl ref, + string name: string ref, + int type_: @type_or_none ref +); + +#keyset[id] +var_decl_attached_property_wrapper_types( //dir=decl + int id: @var_decl ref, + int attached_property_wrapper_type: @type_or_none ref +); + +#keyset[id] +var_decl_parent_patterns( //dir=decl + int id: @var_decl ref, + int parent_pattern: @pattern_or_none ref +); + +#keyset[id] +var_decl_parent_initializers( //dir=decl + int id: @var_decl ref, + int parent_initializer: @expr_or_none ref +); + +#keyset[id] +var_decl_property_wrapper_backing_var_bindings( //dir=decl + int id: @var_decl ref, + int property_wrapper_backing_var_binding: @pattern_binding_decl_or_none ref +); + +#keyset[id] +var_decl_property_wrapper_backing_vars( //dir=decl + int id: @var_decl ref, + int property_wrapper_backing_var: @var_decl_or_none ref +); + +#keyset[id] +var_decl_property_wrapper_projection_var_bindings( //dir=decl + int id: @var_decl ref, + int property_wrapper_projection_var_binding: @pattern_binding_decl_or_none ref +); + +#keyset[id] +var_decl_property_wrapper_projection_vars( //dir=decl + int id: @var_decl ref, + int property_wrapper_projection_var: @var_decl_or_none ref +); + +accessors( //dir=decl + unique int id: @accessor +); + +#keyset[id] +accessor_is_getter( //dir=decl + int id: @accessor ref +); + +#keyset[id] +accessor_is_setter( //dir=decl + int id: @accessor ref +); + +#keyset[id] +accessor_is_will_set( //dir=decl + int id: @accessor ref +); + +#keyset[id] +accessor_is_did_set( //dir=decl + int id: @accessor ref +); + +#keyset[id] +accessor_is_read( //dir=decl + int id: @accessor ref +); + +#keyset[id] +accessor_is_modify( //dir=decl + int id: @accessor ref +); + +#keyset[id] +accessor_is_unsafe_address( //dir=decl + int id: @accessor ref +); + +#keyset[id] +accessor_is_unsafe_mutable_address( //dir=decl + int id: @accessor ref +); + +associated_type_decls( //dir=decl + unique int id: @associated_type_decl +); + +concrete_var_decls( //dir=decl + unique int id: @concrete_var_decl, + int introducer_int: int ref +); + +generic_type_param_decls( //dir=decl + unique int id: @generic_type_param_decl +); + +named_functions( //dir=decl + unique int id: @named_function +); + +@nominal_type_decl = + @class_decl +| @enum_decl +| @protocol_decl +| @struct_decl +; + +#keyset[id] +nominal_type_decls( //dir=decl + int id: @nominal_type_decl ref, + int type_: @type_or_none ref +); + +opaque_type_decls( //dir=decl + unique int id: @opaque_type_decl, + int naming_declaration: @value_decl_or_none ref +); + +#keyset[id, index] +opaque_type_decl_opaque_generic_params( //dir=decl + int id: @opaque_type_decl ref, + int index: int ref, + int opaque_generic_param: @generic_type_param_type_or_none ref +); + +param_decls( //dir=decl + unique int id: @param_decl +); + +#keyset[id] +param_decl_is_inout( //dir=decl + int id: @param_decl ref +); + +#keyset[id] +param_decl_property_wrapper_local_wrapped_var_bindings( //dir=decl + int id: @param_decl ref, + int property_wrapper_local_wrapped_var_binding: @pattern_binding_decl_or_none ref +); + +#keyset[id] +param_decl_property_wrapper_local_wrapped_vars( //dir=decl + int id: @param_decl ref, + int property_wrapper_local_wrapped_var: @var_decl_or_none ref +); + +type_alias_decls( //dir=decl + unique int id: @type_alias_decl, + int aliased_type: @type_or_none ref +); + +class_decls( //dir=decl + unique int id: @class_decl +); + +enum_decls( //dir=decl + unique int id: @enum_decl +); + +protocol_decls( //dir=decl + unique int id: @protocol_decl +); + +struct_decls( //dir=decl + unique int id: @struct_decl +); + +arguments( //dir=expr + unique int id: @argument, + string label: string ref, + int expr: @expr_or_none ref +); + +@expr = + @any_try_expr +| @applied_property_wrapper_expr +| @apply_expr +| @assign_expr +| @bind_optional_expr +| @capture_list_expr +| @closure_expr +| @collection_expr +| @consume_expr +| @copy_expr +| @decl_ref_expr +| @default_argument_expr +| @discard_assignment_expr +| @dot_syntax_base_ignored_expr +| @dynamic_type_expr +| @enum_is_case_expr +| @error_expr +| @explicit_cast_expr +| @force_value_expr +| @identity_expr +| @if_expr +| @implicit_conversion_expr +| @in_out_expr +| @key_path_application_expr +| @key_path_dot_expr +| @key_path_expr +| @lazy_initialization_expr +| @literal_expr +| @lookup_expr +| @make_temporarily_escapable_expr +| @materialize_pack_expr +| @obj_c_selector_expr +| @one_way_expr +| @opaque_value_expr +| @open_existential_expr +| @optional_evaluation_expr +| @other_initializer_ref_expr +| @overloaded_decl_ref_expr +| @pack_element_expr +| @pack_expansion_expr +| @property_wrapper_value_placeholder_expr +| @rebind_self_in_initializer_expr +| @sequence_expr +| @single_value_stmt_expr +| @super_ref_expr +| @tap_expr +| @tuple_element_expr +| @tuple_expr +| @type_expr +| @unresolved_decl_ref_expr +| @unresolved_dot_expr +| @unresolved_member_expr +| @unresolved_pattern_expr +| @unresolved_specialize_expr +| @vararg_expansion_expr +; + +#keyset[id] +expr_types( //dir=expr + int id: @expr ref, + int type_: @type_or_none ref +); + +@any_try_expr = + @force_try_expr +| @optional_try_expr +| @try_expr +; + +#keyset[id] +any_try_exprs( //dir=expr + int id: @any_try_expr ref, + int sub_expr: @expr_or_none ref +); + +applied_property_wrapper_exprs( //dir=expr + unique int id: @applied_property_wrapper_expr, + int kind: int ref, + int value: @expr_or_none ref, + int param: @param_decl_or_none ref +); + +@apply_expr = + @binary_expr +| @call_expr +| @postfix_unary_expr +| @prefix_unary_expr +| @self_apply_expr +; + +#keyset[id] +apply_exprs( //dir=expr + int id: @apply_expr ref, + int function: @expr_or_none ref +); + +#keyset[id, index] +apply_expr_arguments( //dir=expr + int id: @apply_expr ref, + int index: int ref, + int argument: @argument_or_none ref +); + +assign_exprs( //dir=expr + unique int id: @assign_expr, + int dest: @expr_or_none ref, + int source: @expr_or_none ref +); + +bind_optional_exprs( //dir=expr + unique int id: @bind_optional_expr, + int sub_expr: @expr_or_none ref +); + +capture_list_exprs( //dir=expr + unique int id: @capture_list_expr, + int closure_body: @closure_expr_or_none ref +); + +#keyset[id, index] +capture_list_expr_binding_decls( //dir=expr + int id: @capture_list_expr ref, + int index: int ref, + int binding_decl: @pattern_binding_decl_or_none ref +); + +@closure_expr = + @auto_closure_expr +| @explicit_closure_expr +; + +@collection_expr = + @array_expr +| @dictionary_expr +; + +consume_exprs( //dir=expr + unique int id: @consume_expr, + int sub_expr: @expr_or_none ref +); + +copy_exprs( //dir=expr + unique int id: @copy_expr, + int sub_expr: @expr_or_none ref +); + +decl_ref_exprs( //dir=expr + unique int id: @decl_ref_expr, + int decl: @decl_or_none ref +); + +#keyset[id, index] +decl_ref_expr_replacement_types( //dir=expr + int id: @decl_ref_expr ref, + int index: int ref, + int replacement_type: @type_or_none ref +); + +#keyset[id] +decl_ref_expr_has_direct_to_storage_semantics( //dir=expr + int id: @decl_ref_expr ref +); + +#keyset[id] +decl_ref_expr_has_direct_to_implementation_semantics( //dir=expr + int id: @decl_ref_expr ref +); + +#keyset[id] +decl_ref_expr_has_ordinary_semantics( //dir=expr + int id: @decl_ref_expr ref +); + +#keyset[id] +decl_ref_expr_has_distributed_thunk_semantics( //dir=expr + int id: @decl_ref_expr ref +); + +default_argument_exprs( //dir=expr + unique int id: @default_argument_expr, + int param_decl: @param_decl_or_none ref, + int param_index: int ref +); + +#keyset[id] +default_argument_expr_caller_side_defaults( //dir=expr + int id: @default_argument_expr ref, + int caller_side_default: @expr_or_none ref +); + +discard_assignment_exprs( //dir=expr + unique int id: @discard_assignment_expr +); + +dot_syntax_base_ignored_exprs( //dir=expr + unique int id: @dot_syntax_base_ignored_expr, + int qualifier: @expr_or_none ref, + int sub_expr: @expr_or_none ref +); + +dynamic_type_exprs( //dir=expr + unique int id: @dynamic_type_expr, + int base: @expr_or_none ref +); + +enum_is_case_exprs( //dir=expr + unique int id: @enum_is_case_expr, + int sub_expr: @expr_or_none ref, + int element: @enum_element_decl_or_none ref +); + +error_exprs( //dir=expr + unique int id: @error_expr +); + +@explicit_cast_expr = + @checked_cast_expr +| @coerce_expr +; + +#keyset[id] +explicit_cast_exprs( //dir=expr + int id: @explicit_cast_expr ref, + int sub_expr: @expr_or_none ref +); + +force_value_exprs( //dir=expr + unique int id: @force_value_expr, + int sub_expr: @expr_or_none ref +); + +@identity_expr = + @await_expr +| @borrow_expr +| @dot_self_expr +| @paren_expr +| @unresolved_member_chain_result_expr +; + +#keyset[id] +identity_exprs( //dir=expr + int id: @identity_expr ref, + int sub_expr: @expr_or_none ref +); + +if_exprs( //dir=expr + unique int id: @if_expr, + int condition: @expr_or_none ref, + int then_expr: @expr_or_none ref, + int else_expr: @expr_or_none ref +); + +@implicit_conversion_expr = + @abi_safe_conversion_expr +| @any_hashable_erasure_expr +| @archetype_to_super_expr +| @array_to_pointer_expr +| @bridge_from_obj_c_expr +| @bridge_to_obj_c_expr +| @class_metatype_to_object_expr +| @collection_upcast_conversion_expr +| @conditional_bridge_from_obj_c_expr +| @covariant_function_conversion_expr +| @covariant_return_conversion_expr +| @derived_to_base_expr +| @destructure_tuple_expr +| @differentiable_function_expr +| @differentiable_function_extract_original_expr +| @erasure_expr +| @existential_metatype_to_object_expr +| @foreign_object_conversion_expr +| @function_conversion_expr +| @in_out_to_pointer_expr +| @inject_into_optional_expr +| @linear_function_expr +| @linear_function_extract_original_expr +| @linear_to_differentiable_function_expr +| @load_expr +| @metatype_conversion_expr +| @pointer_to_pointer_expr +| @protocol_metatype_to_object_expr +| @string_to_pointer_expr +| @underlying_to_opaque_expr +| @unevaluated_instance_expr +| @unresolved_type_conversion_expr +; + +#keyset[id] +implicit_conversion_exprs( //dir=expr + int id: @implicit_conversion_expr ref, + int sub_expr: @expr_or_none ref +); + +in_out_exprs( //dir=expr + unique int id: @in_out_expr, + int sub_expr: @expr_or_none ref +); + +key_path_application_exprs( //dir=expr + unique int id: @key_path_application_expr, + int base: @expr_or_none ref, + int key_path: @expr_or_none ref +); + +key_path_dot_exprs( //dir=expr + unique int id: @key_path_dot_expr +); + +key_path_exprs( //dir=expr + unique int id: @key_path_expr +); + +#keyset[id] +key_path_expr_roots( //dir=expr + int id: @key_path_expr ref, + int root: @type_repr_or_none ref +); + +#keyset[id, index] +key_path_expr_components( //dir=expr + int id: @key_path_expr ref, + int index: int ref, + int component: @key_path_component_or_none ref +); + +lazy_initialization_exprs( //dir=expr + unique int id: @lazy_initialization_expr, + int sub_expr: @expr_or_none ref +); + +@literal_expr = + @builtin_literal_expr +| @interpolated_string_literal_expr +| @nil_literal_expr +| @object_literal_expr +| @regex_literal_expr +; + +@lookup_expr = + @dynamic_lookup_expr +| @member_ref_expr +| @subscript_expr +; + +#keyset[id] +lookup_exprs( //dir=expr + int id: @lookup_expr ref, + int base: @expr_or_none ref +); + +#keyset[id] +lookup_expr_members( //dir=expr + int id: @lookup_expr ref, + int member: @decl_or_none ref +); + +make_temporarily_escapable_exprs( //dir=expr + unique int id: @make_temporarily_escapable_expr, + int escaping_closure: @opaque_value_expr_or_none ref, + int nonescaping_closure: @expr_or_none ref, + int sub_expr: @expr_or_none ref +); + +materialize_pack_exprs( //dir=expr + unique int id: @materialize_pack_expr, + int sub_expr: @expr_or_none ref +); + +obj_c_selector_exprs( //dir=expr + unique int id: @obj_c_selector_expr, + int sub_expr: @expr_or_none ref, + int method: @function_or_none ref +); + +one_way_exprs( //dir=expr + unique int id: @one_way_expr, + int sub_expr: @expr_or_none ref +); + +opaque_value_exprs( //dir=expr + unique int id: @opaque_value_expr +); + +open_existential_exprs( //dir=expr + unique int id: @open_existential_expr, + int sub_expr: @expr_or_none ref, + int existential: @expr_or_none ref, + int opaque_expr: @opaque_value_expr_or_none ref +); + +optional_evaluation_exprs( //dir=expr + unique int id: @optional_evaluation_expr, + int sub_expr: @expr_or_none ref +); + +other_initializer_ref_exprs( //dir=expr + unique int id: @other_initializer_ref_expr, + int initializer: @initializer_or_none ref +); + +overloaded_decl_ref_exprs( //dir=expr + unique int id: @overloaded_decl_ref_expr +); + +#keyset[id, index] +overloaded_decl_ref_expr_possible_declarations( //dir=expr + int id: @overloaded_decl_ref_expr ref, + int index: int ref, + int possible_declaration: @value_decl_or_none ref +); + +pack_element_exprs( //dir=expr + unique int id: @pack_element_expr, + int sub_expr: @expr_or_none ref +); + +pack_expansion_exprs( //dir=expr + unique int id: @pack_expansion_expr, + int pattern_expr: @expr_or_none ref +); + +property_wrapper_value_placeholder_exprs( //dir=expr + unique int id: @property_wrapper_value_placeholder_expr, + int placeholder: @opaque_value_expr_or_none ref +); + +#keyset[id] +property_wrapper_value_placeholder_expr_wrapped_values( //dir=expr + int id: @property_wrapper_value_placeholder_expr ref, + int wrapped_value: @expr_or_none ref +); + +rebind_self_in_initializer_exprs( //dir=expr + unique int id: @rebind_self_in_initializer_expr, + int sub_expr: @expr_or_none ref, + int self: @var_decl_or_none ref +); + +sequence_exprs( //dir=expr + unique int id: @sequence_expr +); + +#keyset[id, index] +sequence_expr_elements( //dir=expr + int id: @sequence_expr ref, + int index: int ref, + int element: @expr_or_none ref +); + +single_value_stmt_exprs( //dir=expr + unique int id: @single_value_stmt_expr, + int stmt: @stmt_or_none ref +); + +super_ref_exprs( //dir=expr + unique int id: @super_ref_expr, + int self: @var_decl_or_none ref +); + +tap_exprs( //dir=expr + unique int id: @tap_expr, + int body: @brace_stmt_or_none ref, + int var: @var_decl_or_none ref +); + +#keyset[id] +tap_expr_sub_exprs( //dir=expr + int id: @tap_expr ref, + int sub_expr: @expr_or_none ref +); + +tuple_element_exprs( //dir=expr + unique int id: @tuple_element_expr, + int sub_expr: @expr_or_none ref, + int index: int ref +); + +tuple_exprs( //dir=expr + unique int id: @tuple_expr +); + +#keyset[id, index] +tuple_expr_elements( //dir=expr + int id: @tuple_expr ref, + int index: int ref, + int element: @expr_or_none ref +); + +type_exprs( //dir=expr + unique int id: @type_expr +); + +#keyset[id] +type_expr_type_reprs( //dir=expr + int id: @type_expr ref, + int type_repr: @type_repr_or_none ref +); + +unresolved_decl_ref_exprs( //dir=expr + unique int id: @unresolved_decl_ref_expr +); + +#keyset[id] +unresolved_decl_ref_expr_names( //dir=expr + int id: @unresolved_decl_ref_expr ref, + string name: string ref +); + +unresolved_dot_exprs( //dir=expr + unique int id: @unresolved_dot_expr, + int base: @expr_or_none ref, + string name: string ref +); + +unresolved_member_exprs( //dir=expr + unique int id: @unresolved_member_expr, + string name: string ref +); + +unresolved_pattern_exprs( //dir=expr + unique int id: @unresolved_pattern_expr, + int sub_pattern: @pattern_or_none ref +); + +unresolved_specialize_exprs( //dir=expr + unique int id: @unresolved_specialize_expr, + int sub_expr: @expr_or_none ref +); + +vararg_expansion_exprs( //dir=expr + unique int id: @vararg_expansion_expr, + int sub_expr: @expr_or_none ref +); + +abi_safe_conversion_exprs( //dir=expr + unique int id: @abi_safe_conversion_expr +); + +any_hashable_erasure_exprs( //dir=expr + unique int id: @any_hashable_erasure_expr +); + +archetype_to_super_exprs( //dir=expr + unique int id: @archetype_to_super_expr +); + +array_exprs( //dir=expr + unique int id: @array_expr +); + +#keyset[id, index] +array_expr_elements( //dir=expr + int id: @array_expr ref, + int index: int ref, + int element: @expr_or_none ref +); + +array_to_pointer_exprs( //dir=expr + unique int id: @array_to_pointer_expr +); + +auto_closure_exprs( //dir=expr + unique int id: @auto_closure_expr +); + +await_exprs( //dir=expr + unique int id: @await_expr +); + +binary_exprs( //dir=expr + unique int id: @binary_expr +); + +borrow_exprs( //dir=expr + unique int id: @borrow_expr +); + +bridge_from_obj_c_exprs( //dir=expr + unique int id: @bridge_from_obj_c_expr +); + +bridge_to_obj_c_exprs( //dir=expr + unique int id: @bridge_to_obj_c_expr +); + +@builtin_literal_expr = + @boolean_literal_expr +| @magic_identifier_literal_expr +| @number_literal_expr +| @string_literal_expr +; + +call_exprs( //dir=expr + unique int id: @call_expr +); + +@checked_cast_expr = + @conditional_checked_cast_expr +| @forced_checked_cast_expr +| @is_expr +; + +class_metatype_to_object_exprs( //dir=expr + unique int id: @class_metatype_to_object_expr +); + +coerce_exprs( //dir=expr + unique int id: @coerce_expr +); + +collection_upcast_conversion_exprs( //dir=expr + unique int id: @collection_upcast_conversion_expr +); + +conditional_bridge_from_obj_c_exprs( //dir=expr + unique int id: @conditional_bridge_from_obj_c_expr +); + +covariant_function_conversion_exprs( //dir=expr + unique int id: @covariant_function_conversion_expr +); + +covariant_return_conversion_exprs( //dir=expr + unique int id: @covariant_return_conversion_expr +); + +derived_to_base_exprs( //dir=expr + unique int id: @derived_to_base_expr +); + +destructure_tuple_exprs( //dir=expr + unique int id: @destructure_tuple_expr +); + +dictionary_exprs( //dir=expr + unique int id: @dictionary_expr +); + +#keyset[id, index] +dictionary_expr_elements( //dir=expr + int id: @dictionary_expr ref, + int index: int ref, + int element: @expr_or_none ref +); + +differentiable_function_exprs( //dir=expr + unique int id: @differentiable_function_expr +); + +differentiable_function_extract_original_exprs( //dir=expr + unique int id: @differentiable_function_extract_original_expr +); + +dot_self_exprs( //dir=expr + unique int id: @dot_self_expr +); + +@dynamic_lookup_expr = + @dynamic_member_ref_expr +| @dynamic_subscript_expr +; + +erasure_exprs( //dir=expr + unique int id: @erasure_expr +); + +existential_metatype_to_object_exprs( //dir=expr + unique int id: @existential_metatype_to_object_expr +); + +explicit_closure_exprs( //dir=expr + unique int id: @explicit_closure_expr +); + +force_try_exprs( //dir=expr + unique int id: @force_try_expr +); + +foreign_object_conversion_exprs( //dir=expr + unique int id: @foreign_object_conversion_expr +); + +function_conversion_exprs( //dir=expr + unique int id: @function_conversion_expr +); + +in_out_to_pointer_exprs( //dir=expr + unique int id: @in_out_to_pointer_expr +); + +inject_into_optional_exprs( //dir=expr + unique int id: @inject_into_optional_expr +); + +interpolated_string_literal_exprs( //dir=expr + unique int id: @interpolated_string_literal_expr +); + +#keyset[id] +interpolated_string_literal_expr_interpolation_exprs( //dir=expr + int id: @interpolated_string_literal_expr ref, + int interpolation_expr: @opaque_value_expr_or_none ref +); + +#keyset[id] +interpolated_string_literal_expr_appending_exprs( //dir=expr + int id: @interpolated_string_literal_expr ref, + int appending_expr: @tap_expr_or_none ref +); + +linear_function_exprs( //dir=expr + unique int id: @linear_function_expr +); + +linear_function_extract_original_exprs( //dir=expr + unique int id: @linear_function_extract_original_expr +); + +linear_to_differentiable_function_exprs( //dir=expr + unique int id: @linear_to_differentiable_function_expr +); + +load_exprs( //dir=expr + unique int id: @load_expr +); + +member_ref_exprs( //dir=expr + unique int id: @member_ref_expr +); + +#keyset[id] +member_ref_expr_has_direct_to_storage_semantics( //dir=expr + int id: @member_ref_expr ref +); + +#keyset[id] +member_ref_expr_has_direct_to_implementation_semantics( //dir=expr + int id: @member_ref_expr ref +); + +#keyset[id] +member_ref_expr_has_ordinary_semantics( //dir=expr + int id: @member_ref_expr ref +); + +#keyset[id] +member_ref_expr_has_distributed_thunk_semantics( //dir=expr + int id: @member_ref_expr ref +); + +metatype_conversion_exprs( //dir=expr + unique int id: @metatype_conversion_expr +); + +nil_literal_exprs( //dir=expr + unique int id: @nil_literal_expr +); + +object_literal_exprs( //dir=expr + unique int id: @object_literal_expr, + int kind: int ref +); + +#keyset[id, index] +object_literal_expr_arguments( //dir=expr + int id: @object_literal_expr ref, + int index: int ref, + int argument: @argument_or_none ref +); + +optional_try_exprs( //dir=expr + unique int id: @optional_try_expr +); + +paren_exprs( //dir=expr + unique int id: @paren_expr +); + +pointer_to_pointer_exprs( //dir=expr + unique int id: @pointer_to_pointer_expr +); + +postfix_unary_exprs( //dir=expr + unique int id: @postfix_unary_expr +); + +prefix_unary_exprs( //dir=expr + unique int id: @prefix_unary_expr +); + +protocol_metatype_to_object_exprs( //dir=expr + unique int id: @protocol_metatype_to_object_expr +); + +regex_literal_exprs( //dir=expr + unique int id: @regex_literal_expr, + string pattern: string ref, + int version: int ref +); + +@self_apply_expr = + @dot_syntax_call_expr +| @initializer_ref_call_expr +; + +#keyset[id] +self_apply_exprs( //dir=expr + int id: @self_apply_expr ref, + int base: @expr_or_none ref +); + +string_to_pointer_exprs( //dir=expr + unique int id: @string_to_pointer_expr +); + +subscript_exprs( //dir=expr + unique int id: @subscript_expr +); + +#keyset[id, index] +subscript_expr_arguments( //dir=expr + int id: @subscript_expr ref, + int index: int ref, + int argument: @argument_or_none ref +); + +#keyset[id] +subscript_expr_has_direct_to_storage_semantics( //dir=expr + int id: @subscript_expr ref +); + +#keyset[id] +subscript_expr_has_direct_to_implementation_semantics( //dir=expr + int id: @subscript_expr ref +); + +#keyset[id] +subscript_expr_has_ordinary_semantics( //dir=expr + int id: @subscript_expr ref +); + +#keyset[id] +subscript_expr_has_distributed_thunk_semantics( //dir=expr + int id: @subscript_expr ref +); + +try_exprs( //dir=expr + unique int id: @try_expr +); + +underlying_to_opaque_exprs( //dir=expr + unique int id: @underlying_to_opaque_expr +); + +unevaluated_instance_exprs( //dir=expr + unique int id: @unevaluated_instance_expr +); + +unresolved_member_chain_result_exprs( //dir=expr + unique int id: @unresolved_member_chain_result_expr +); + +unresolved_type_conversion_exprs( //dir=expr + unique int id: @unresolved_type_conversion_expr +); + +boolean_literal_exprs( //dir=expr + unique int id: @boolean_literal_expr, + boolean value: boolean ref +); + +conditional_checked_cast_exprs( //dir=expr + unique int id: @conditional_checked_cast_expr +); + +dot_syntax_call_exprs( //dir=expr + unique int id: @dot_syntax_call_expr +); + +dynamic_member_ref_exprs( //dir=expr + unique int id: @dynamic_member_ref_expr +); + +dynamic_subscript_exprs( //dir=expr + unique int id: @dynamic_subscript_expr +); + +forced_checked_cast_exprs( //dir=expr + unique int id: @forced_checked_cast_expr +); + +initializer_ref_call_exprs( //dir=expr + unique int id: @initializer_ref_call_expr +); + +is_exprs( //dir=expr + unique int id: @is_expr +); + +magic_identifier_literal_exprs( //dir=expr + unique int id: @magic_identifier_literal_expr, + string kind: string ref +); + +@number_literal_expr = + @float_literal_expr +| @integer_literal_expr +; + +string_literal_exprs( //dir=expr + unique int id: @string_literal_expr, + string value: string ref +); + +float_literal_exprs( //dir=expr + unique int id: @float_literal_expr, + string string_value: string ref +); + +integer_literal_exprs( //dir=expr + unique int id: @integer_literal_expr, + string string_value: string ref +); + +@pattern = + @any_pattern +| @binding_pattern +| @bool_pattern +| @enum_element_pattern +| @expr_pattern +| @is_pattern +| @named_pattern +| @optional_some_pattern +| @paren_pattern +| @tuple_pattern +| @typed_pattern +; + +#keyset[id] +pattern_types( //dir=pattern + int id: @pattern ref, + int type_: @type_or_none ref +); + +any_patterns( //dir=pattern + unique int id: @any_pattern +); + +binding_patterns( //dir=pattern + unique int id: @binding_pattern, + int sub_pattern: @pattern_or_none ref +); + +bool_patterns( //dir=pattern + unique int id: @bool_pattern, + boolean value: boolean ref +); + +enum_element_patterns( //dir=pattern + unique int id: @enum_element_pattern, + int element: @enum_element_decl_or_none ref +); + +#keyset[id] +enum_element_pattern_sub_patterns( //dir=pattern + int id: @enum_element_pattern ref, + int sub_pattern: @pattern_or_none ref +); + +expr_patterns( //dir=pattern + unique int id: @expr_pattern, + int sub_expr: @expr_or_none ref +); + +is_patterns( //dir=pattern + unique int id: @is_pattern +); + +#keyset[id] +is_pattern_cast_type_reprs( //dir=pattern + int id: @is_pattern ref, + int cast_type_repr: @type_repr_or_none ref +); + +#keyset[id] +is_pattern_sub_patterns( //dir=pattern + int id: @is_pattern ref, + int sub_pattern: @pattern_or_none ref +); + +named_patterns( //dir=pattern + unique int id: @named_pattern, + int var_decl: @var_decl_or_none ref +); + +optional_some_patterns( //dir=pattern + unique int id: @optional_some_pattern, + int sub_pattern: @pattern_or_none ref +); + +paren_patterns( //dir=pattern + unique int id: @paren_pattern, + int sub_pattern: @pattern_or_none ref +); + +tuple_patterns( //dir=pattern + unique int id: @tuple_pattern +); + +#keyset[id, index] +tuple_pattern_elements( //dir=pattern + int id: @tuple_pattern ref, + int index: int ref, + int element: @pattern_or_none ref +); + +typed_patterns( //dir=pattern + unique int id: @typed_pattern, + int sub_pattern: @pattern_or_none ref +); + +#keyset[id] +typed_pattern_type_reprs( //dir=pattern + int id: @typed_pattern ref, + int type_repr: @type_repr_or_none ref +); + +case_label_items( //dir=stmt + unique int id: @case_label_item, + int pattern: @pattern_or_none ref +); + +#keyset[id] +case_label_item_guards( //dir=stmt + int id: @case_label_item ref, + int guard: @expr_or_none ref +); + +condition_elements( //dir=stmt + unique int id: @condition_element +); + +#keyset[id] +condition_element_booleans( //dir=stmt + int id: @condition_element ref, + int boolean_: @expr_or_none ref +); + +#keyset[id] +condition_element_patterns( //dir=stmt + int id: @condition_element ref, + int pattern: @pattern_or_none ref +); + +#keyset[id] +condition_element_initializers( //dir=stmt + int id: @condition_element ref, + int initializer: @expr_or_none ref +); + +#keyset[id] +condition_element_availabilities( //dir=stmt + int id: @condition_element ref, + int availability: @availability_info_or_none ref +); + +@stmt = + @brace_stmt +| @break_stmt +| @case_stmt +| @continue_stmt +| @defer_stmt +| @discard_stmt +| @fail_stmt +| @fallthrough_stmt +| @labeled_stmt +| @pound_assert_stmt +| @return_stmt +| @throw_stmt +| @yield_stmt +; + +stmt_conditions( //dir=stmt + unique int id: @stmt_condition +); + +#keyset[id, index] +stmt_condition_elements( //dir=stmt + int id: @stmt_condition ref, + int index: int ref, + int element: @condition_element_or_none ref +); + +brace_stmts( //dir=stmt + unique int id: @brace_stmt +); + +#keyset[id, index] +brace_stmt_elements( //dir=stmt + int id: @brace_stmt ref, + int index: int ref, + int element: @ast_node_or_none ref +); + +break_stmts( //dir=stmt + unique int id: @break_stmt +); + +#keyset[id] +break_stmt_target_names( //dir=stmt + int id: @break_stmt ref, + string target_name: string ref +); + +#keyset[id] +break_stmt_targets( //dir=stmt + int id: @break_stmt ref, + int target: @stmt_or_none ref +); + +case_stmts( //dir=stmt + unique int id: @case_stmt, + int body: @stmt_or_none ref +); + +#keyset[id, index] +case_stmt_labels( //dir=stmt + int id: @case_stmt ref, + int index: int ref, + int label: @case_label_item_or_none ref +); + +#keyset[id, index] +case_stmt_variables( //dir=stmt + int id: @case_stmt ref, + int index: int ref, + int variable: @var_decl_or_none ref +); + +continue_stmts( //dir=stmt + unique int id: @continue_stmt +); + +#keyset[id] +continue_stmt_target_names( //dir=stmt + int id: @continue_stmt ref, + string target_name: string ref +); + +#keyset[id] +continue_stmt_targets( //dir=stmt + int id: @continue_stmt ref, + int target: @stmt_or_none ref +); + +defer_stmts( //dir=stmt + unique int id: @defer_stmt, + int body: @brace_stmt_or_none ref +); + +discard_stmts( //dir=stmt + unique int id: @discard_stmt, + int sub_expr: @expr_or_none ref +); + +fail_stmts( //dir=stmt + unique int id: @fail_stmt +); + +fallthrough_stmts( //dir=stmt + unique int id: @fallthrough_stmt, + int fallthrough_source: @case_stmt_or_none ref, + int fallthrough_dest: @case_stmt_or_none ref +); + +@labeled_stmt = + @do_catch_stmt +| @do_stmt +| @for_each_stmt +| @labeled_conditional_stmt +| @repeat_while_stmt +| @switch_stmt +; + +#keyset[id] +labeled_stmt_labels( //dir=stmt + int id: @labeled_stmt ref, + string label: string ref +); + +pound_assert_stmts( //dir=stmt + unique int id: @pound_assert_stmt, + int condition: @expr_or_none ref, + string message: string ref +); + +return_stmts( //dir=stmt + unique int id: @return_stmt +); + +#keyset[id] +return_stmt_results( //dir=stmt + int id: @return_stmt ref, + int result: @expr_or_none ref +); + +throw_stmts( //dir=stmt + unique int id: @throw_stmt, + int sub_expr: @expr_or_none ref +); + +yield_stmts( //dir=stmt + unique int id: @yield_stmt +); + +#keyset[id, index] +yield_stmt_results( //dir=stmt + int id: @yield_stmt ref, + int index: int ref, + int result: @expr_or_none ref +); + +do_catch_stmts( //dir=stmt + unique int id: @do_catch_stmt, + int body: @stmt_or_none ref +); + +#keyset[id, index] +do_catch_stmt_catches( //dir=stmt + int id: @do_catch_stmt ref, + int index: int ref, + int catch: @case_stmt_or_none ref +); + +do_stmts( //dir=stmt + unique int id: @do_stmt, + int body: @brace_stmt_or_none ref +); + +for_each_stmts( //dir=stmt + unique int id: @for_each_stmt, + int pattern: @pattern_or_none ref, + int body: @brace_stmt_or_none ref +); + +#keyset[id] +for_each_stmt_wheres( //dir=stmt + int id: @for_each_stmt ref, + int where: @expr_or_none ref +); + +#keyset[id] +for_each_stmt_iterator_vars( //dir=stmt + int id: @for_each_stmt ref, + int iteratorVar: @pattern_binding_decl_or_none ref +); + +#keyset[id] +for_each_stmt_next_calls( //dir=stmt + int id: @for_each_stmt ref, + int nextCall: @expr_or_none ref +); + +@labeled_conditional_stmt = + @guard_stmt +| @if_stmt +| @while_stmt +; + +#keyset[id] +labeled_conditional_stmts( //dir=stmt + int id: @labeled_conditional_stmt ref, + int condition: @stmt_condition_or_none ref +); + +repeat_while_stmts( //dir=stmt + unique int id: @repeat_while_stmt, + int condition: @expr_or_none ref, + int body: @stmt_or_none ref +); + +switch_stmts( //dir=stmt + unique int id: @switch_stmt, + int expr: @expr_or_none ref +); + +#keyset[id, index] +switch_stmt_cases( //dir=stmt + int id: @switch_stmt ref, + int index: int ref, + int case_: @case_stmt_or_none ref +); + +guard_stmts( //dir=stmt + unique int id: @guard_stmt, + int body: @brace_stmt_or_none ref +); + +if_stmts( //dir=stmt + unique int id: @if_stmt, + int then: @stmt_or_none ref +); + +#keyset[id] +if_stmt_elses( //dir=stmt + int id: @if_stmt ref, + int else: @stmt_or_none ref +); + +while_stmts( //dir=stmt + unique int id: @while_stmt, + int body: @stmt_or_none ref +); + +@type = + @any_function_type +| @any_generic_type +| @any_metatype_type +| @builtin_type +| @dependent_member_type +| @dynamic_self_type +| @error_type +| @existential_type +| @in_out_type +| @l_value_type +| @module_type +| @pack_element_type +| @pack_expansion_type +| @pack_type +| @parameterized_protocol_type +| @protocol_composition_type +| @reference_storage_type +| @substitutable_type +| @sugar_type +| @tuple_type +| @unresolved_type +; + +#keyset[id] +types( //dir=type + int id: @type ref, + string name: string ref, + int canonical_type: @type_or_none ref +); + +type_reprs( //dir=type + unique int id: @type_repr, + int type_: @type_or_none ref +); + +@any_function_type = + @function_type +| @generic_function_type +; + +#keyset[id] +any_function_types( //dir=type + int id: @any_function_type ref, + int result: @type_or_none ref +); + +#keyset[id, index] +any_function_type_param_types( //dir=type + int id: @any_function_type ref, + int index: int ref, + int param_type: @type_or_none ref +); + +#keyset[id] +any_function_type_is_throwing( //dir=type + int id: @any_function_type ref +); + +#keyset[id] +any_function_type_is_async( //dir=type + int id: @any_function_type ref +); + +@any_generic_type = + @nominal_or_bound_generic_nominal_type +| @unbound_generic_type +; + +#keyset[id] +any_generic_types( //dir=type + int id: @any_generic_type ref, + int declaration: @generic_type_decl_or_none ref +); + +#keyset[id] +any_generic_type_parents( //dir=type + int id: @any_generic_type ref, + int parent: @type_or_none ref +); + +@any_metatype_type = + @existential_metatype_type +| @metatype_type +; + +@builtin_type = + @any_builtin_integer_type +| @builtin_bridge_object_type +| @builtin_default_actor_storage_type +| @builtin_executor_type +| @builtin_float_type +| @builtin_job_type +| @builtin_native_object_type +| @builtin_raw_pointer_type +| @builtin_raw_unsafe_continuation_type +| @builtin_unsafe_value_buffer_type +| @builtin_vector_type +; + +dependent_member_types( //dir=type + unique int id: @dependent_member_type, + int base_type: @type_or_none ref, + int associated_type_decl: @associated_type_decl_or_none ref +); + +dynamic_self_types( //dir=type + unique int id: @dynamic_self_type, + int static_self_type: @type_or_none ref +); + +error_types( //dir=type + unique int id: @error_type +); + +existential_types( //dir=type + unique int id: @existential_type, + int constraint: @type_or_none ref +); + +in_out_types( //dir=type + unique int id: @in_out_type, + int object_type: @type_or_none ref +); + +l_value_types( //dir=type + unique int id: @l_value_type, + int object_type: @type_or_none ref +); + +module_types( //dir=type + unique int id: @module_type, + int module: @module_decl_or_none ref +); + +pack_element_types( //dir=type + unique int id: @pack_element_type, + int pack_type: @type_or_none ref +); + +pack_expansion_types( //dir=type + unique int id: @pack_expansion_type, + int pattern_type: @type_or_none ref, + int count_type: @type_or_none ref +); + +pack_types( //dir=type + unique int id: @pack_type +); + +#keyset[id, index] +pack_type_elements( //dir=type + int id: @pack_type ref, + int index: int ref, + int element: @type_or_none ref +); + +parameterized_protocol_types( //dir=type + unique int id: @parameterized_protocol_type, + int base: @protocol_type_or_none ref +); + +#keyset[id, index] +parameterized_protocol_type_args( //dir=type + int id: @parameterized_protocol_type ref, + int index: int ref, + int arg: @type_or_none ref +); + +protocol_composition_types( //dir=type + unique int id: @protocol_composition_type +); + +#keyset[id, index] +protocol_composition_type_members( //dir=type + int id: @protocol_composition_type ref, + int index: int ref, + int member: @type_or_none ref +); + +@reference_storage_type = + @unmanaged_storage_type +| @unowned_storage_type +| @weak_storage_type +; + +#keyset[id] +reference_storage_types( //dir=type + int id: @reference_storage_type ref, + int referent_type: @type_or_none ref +); + +@substitutable_type = + @archetype_type +| @generic_type_param_type +; + +@sugar_type = + @paren_type +| @syntax_sugar_type +| @type_alias_type +; + +tuple_types( //dir=type + unique int id: @tuple_type +); + +#keyset[id, index] +tuple_type_types( //dir=type + int id: @tuple_type ref, + int index: int ref, + int type_: @type_or_none ref +); + +#keyset[id, index] +tuple_type_names( //dir=type + int id: @tuple_type ref, + int index: int ref, + string name: string ref +); + +unresolved_types( //dir=type + unique int id: @unresolved_type +); + +@any_builtin_integer_type = + @builtin_integer_literal_type +| @builtin_integer_type +; + +@archetype_type = + @local_archetype_type +| @opaque_type_archetype_type +| @pack_archetype_type +| @primary_archetype_type +; + +#keyset[id] +archetype_types( //dir=type + int id: @archetype_type ref, + int interface_type: @type_or_none ref +); + +#keyset[id] +archetype_type_superclasses( //dir=type + int id: @archetype_type ref, + int superclass: @type_or_none ref +); + +#keyset[id, index] +archetype_type_protocols( //dir=type + int id: @archetype_type ref, + int index: int ref, + int protocol: @protocol_decl_or_none ref +); + +builtin_bridge_object_types( //dir=type + unique int id: @builtin_bridge_object_type +); + +builtin_default_actor_storage_types( //dir=type + unique int id: @builtin_default_actor_storage_type +); + +builtin_executor_types( //dir=type + unique int id: @builtin_executor_type +); + +builtin_float_types( //dir=type + unique int id: @builtin_float_type +); + +builtin_job_types( //dir=type + unique int id: @builtin_job_type +); + +builtin_native_object_types( //dir=type + unique int id: @builtin_native_object_type +); + +builtin_raw_pointer_types( //dir=type + unique int id: @builtin_raw_pointer_type +); + +builtin_raw_unsafe_continuation_types( //dir=type + unique int id: @builtin_raw_unsafe_continuation_type +); + +builtin_unsafe_value_buffer_types( //dir=type + unique int id: @builtin_unsafe_value_buffer_type +); + +builtin_vector_types( //dir=type + unique int id: @builtin_vector_type +); + +existential_metatype_types( //dir=type + unique int id: @existential_metatype_type +); + +function_types( //dir=type + unique int id: @function_type +); + +generic_function_types( //dir=type + unique int id: @generic_function_type +); + +#keyset[id, index] +generic_function_type_generic_params( //dir=type + int id: @generic_function_type ref, + int index: int ref, + int generic_param: @generic_type_param_type_or_none ref +); + +generic_type_param_types( //dir=type + unique int id: @generic_type_param_type +); + +metatype_types( //dir=type + unique int id: @metatype_type +); + +@nominal_or_bound_generic_nominal_type = + @bound_generic_type +| @nominal_type +; + +paren_types( //dir=type + unique int id: @paren_type, + int type_: @type_or_none ref +); + +@syntax_sugar_type = + @dictionary_type +| @unary_syntax_sugar_type +; + +type_alias_types( //dir=type + unique int id: @type_alias_type, + int decl: @type_alias_decl_or_none ref +); + +unbound_generic_types( //dir=type + unique int id: @unbound_generic_type +); + +unmanaged_storage_types( //dir=type + unique int id: @unmanaged_storage_type +); + +unowned_storage_types( //dir=type + unique int id: @unowned_storage_type +); + +weak_storage_types( //dir=type + unique int id: @weak_storage_type +); + +@bound_generic_type = + @bound_generic_class_type +| @bound_generic_enum_type +| @bound_generic_struct_type +; + +#keyset[id, index] +bound_generic_type_arg_types( //dir=type + int id: @bound_generic_type ref, + int index: int ref, + int arg_type: @type_or_none ref +); + +builtin_integer_literal_types( //dir=type + unique int id: @builtin_integer_literal_type +); + +builtin_integer_types( //dir=type + unique int id: @builtin_integer_type +); + +#keyset[id] +builtin_integer_type_widths( //dir=type + int id: @builtin_integer_type ref, + int width: int ref +); + +dictionary_types( //dir=type + unique int id: @dictionary_type, + int key_type: @type_or_none ref, + int value_type: @type_or_none ref +); + +@local_archetype_type = + @element_archetype_type +| @opened_archetype_type +; + +@nominal_type = + @class_type +| @enum_type +| @protocol_type +| @struct_type +; + +opaque_type_archetype_types( //dir=type + unique int id: @opaque_type_archetype_type, + int declaration: @opaque_type_decl_or_none ref +); + +pack_archetype_types( //dir=type + unique int id: @pack_archetype_type +); + +primary_archetype_types( //dir=type + unique int id: @primary_archetype_type +); + +@unary_syntax_sugar_type = + @array_slice_type +| @optional_type +| @variadic_sequence_type +; + +#keyset[id] +unary_syntax_sugar_types( //dir=type + int id: @unary_syntax_sugar_type ref, + int base_type: @type_or_none ref +); + +array_slice_types( //dir=type + unique int id: @array_slice_type +); + +bound_generic_class_types( //dir=type + unique int id: @bound_generic_class_type +); + +bound_generic_enum_types( //dir=type + unique int id: @bound_generic_enum_type +); + +bound_generic_struct_types( //dir=type + unique int id: @bound_generic_struct_type +); + +class_types( //dir=type + unique int id: @class_type +); + +element_archetype_types( //dir=type + unique int id: @element_archetype_type +); + +enum_types( //dir=type + unique int id: @enum_type +); + +opened_archetype_types( //dir=type + unique int id: @opened_archetype_type +); + +optional_types( //dir=type + unique int id: @optional_type +); + +protocol_types( //dir=type + unique int id: @protocol_type +); + +struct_types( //dir=type + unique int id: @struct_type +); + +variadic_sequence_types( //dir=type + unique int id: @variadic_sequence_type +); + +@accessor_or_none = + @accessor +| @unspecified_element +; + +@argument_or_none = + @argument +| @unspecified_element +; + +@associated_type_decl_or_none = + @associated_type_decl +| @unspecified_element +; + +@ast_node_or_none = + @ast_node +| @unspecified_element +; + +@availability_info_or_none = + @availability_info +| @unspecified_element +; + +@availability_spec_or_none = + @availability_spec +| @unspecified_element +; + +@brace_stmt_or_none = + @brace_stmt +| @unspecified_element +; + +@captured_decl_or_none = + @captured_decl +| @unspecified_element +; + +@case_label_item_or_none = + @case_label_item +| @unspecified_element +; + +@case_stmt_or_none = + @case_stmt +| @unspecified_element +; + +@closure_expr_or_none = + @closure_expr +| @unspecified_element +; + +@condition_element_or_none = + @condition_element +| @unspecified_element +; + +@decl_or_none = + @decl +| @unspecified_element +; + +@enum_element_decl_or_none = + @enum_element_decl +| @unspecified_element +; + +@expr_or_none = + @expr +| @unspecified_element +; + +@file_or_none = + @file +| @unspecified_element +; + +@function_or_none = + @function +| @unspecified_element +; + +@generic_type_decl_or_none = + @generic_type_decl +| @unspecified_element +; + +@generic_type_param_decl_or_none = + @generic_type_param_decl +| @unspecified_element +; + +@generic_type_param_type_or_none = + @generic_type_param_type +| @unspecified_element +; + +@initializer_or_none = + @initializer +| @unspecified_element +; + +@key_path_component_or_none = + @key_path_component +| @unspecified_element +; + +@location_or_none = + @location +| @unspecified_element +; + +@macro_role_or_none = + @macro_role +| @unspecified_element +; + +@module_decl_or_none = + @module_decl +| @unspecified_element +; + +@nominal_type_decl_or_none = + @nominal_type_decl +| @unspecified_element +; + +@opaque_type_decl_or_none = + @opaque_type_decl +| @unspecified_element +; + +@opaque_value_expr_or_none = + @opaque_value_expr +| @unspecified_element +; + +@param_decl_or_none = + @param_decl +| @unspecified_element +; + +@pattern_or_none = + @pattern +| @unspecified_element +; + +@pattern_binding_decl_or_none = + @pattern_binding_decl +| @unspecified_element +; + +@precedence_group_decl_or_none = + @precedence_group_decl +| @unspecified_element +; + +@protocol_decl_or_none = + @protocol_decl +| @unspecified_element +; + +@protocol_type_or_none = + @protocol_type +| @unspecified_element +; + +@stmt_or_none = + @stmt +| @unspecified_element +; + +@stmt_condition_or_none = + @stmt_condition +| @unspecified_element +; + +@string_literal_expr_or_none = + @string_literal_expr +| @unspecified_element +; + +@tap_expr_or_none = + @tap_expr +| @unspecified_element +; + +@type_or_none = + @type +| @unspecified_element +; + +@type_alias_decl_or_none = + @type_alias_decl +| @unspecified_element +; + +@type_expr_or_none = + @type_expr +| @unspecified_element +; + +@type_repr_or_none = + @type_repr +| @unspecified_element +; + +@value_decl_or_none = + @unspecified_element +| @value_decl +; + +@var_decl_or_none = + @unspecified_element +| @var_decl +; diff --git a/swift/downgrades/15a630f68e14f053932cf6a23797f43d958eedc9/upgrade.properties b/swift/downgrades/15a630f68e14f053932cf6a23797f43d958eedc9/upgrade.properties new file mode 100644 index 00000000000..b8ecfe23828 --- /dev/null +++ b/swift/downgrades/15a630f68e14f053932cf6a23797f43d958eedc9/upgrade.properties @@ -0,0 +1,5 @@ +description: Remove `ThenStmt` wrapper nodes. +compatibility: partial +unspecified_elements.rel: run downgrade.ql new_unspecified_elements +unspecified_element_children.rel: run downgrade.ql new_unspecified_element_children +then_stmts.rel: delete diff --git a/swift/extractor/BUILD.bazel b/swift/extractor/BUILD.bazel index f711b3b9d2b..42c1105053c 100644 --- a/swift/extractor/BUILD.bazel +++ b/swift/extractor/BUILD.bazel @@ -17,6 +17,10 @@ swift_cc_binary( "//swift/third_party/swift-llvm-support", "@absl//absl/strings", ], + linkopts = select({ + "@platforms//os:macos": ["-headerpad_max_install_names"], + "//conditions:default": [], + }), ) sh_binary( diff --git a/swift/extractor/infra/SwiftTagTraits.h b/swift/extractor/infra/SwiftTagTraits.h index 40bea71bd50..fc3c6343ce5 100644 --- a/swift/extractor/infra/SwiftTagTraits.h +++ b/swift/extractor/infra/SwiftTagTraits.h @@ -43,6 +43,7 @@ MAP(swift::Stmt, StmtTag) MAP(swift::BraceStmt, BraceStmtTag) MAP(swift::ReturnStmt, ReturnStmtTag) MAP(swift::YieldStmt, YieldStmtTag) + MAP(swift::ThenStmt, ThenStmtTag) MAP(swift::DeferStmt, DeferStmtTag) MAP(swift::LabeledStmt, LabeledStmtTag) MAP(swift::LabeledConditionalStmt, LabeledConditionalStmtTag) diff --git a/swift/extractor/translators/DeclTranslator.cpp b/swift/extractor/translators/DeclTranslator.cpp index 0248d98e79f..77f9bd18b13 100644 --- a/swift/extractor/translators/DeclTranslator.cpp +++ b/swift/extractor/translators/DeclTranslator.cpp @@ -269,8 +269,8 @@ void DeclTranslator::fillOperatorDecl(const swift::OperatorDecl& decl, void DeclTranslator::fillTypeDecl(const swift::TypeDecl& decl, codeql::TypeDecl& entry) { entry.name = decl.getNameStr().str(); - for (auto& typeLoc : decl.getInherited()) { - if (auto type = typeLoc.getType()) { + for (auto& inherited : decl.getInherited().getEntries()) { + if (auto type = inherited.getType()) { entry.inherited_types.push_back(dispatcher.fetchLabel(type)); } } @@ -289,7 +289,7 @@ void DeclTranslator::fillIterableDeclContext(const swift::IterableDeclContext& d void DeclTranslator::fillVarDecl(const swift::VarDecl& decl, codeql::VarDecl& entry) { entry.name = decl.getNameStr().str(); - entry.type = dispatcher.fetchLabel(decl.getType()); + entry.type = dispatcher.fetchLabel(decl.getTypeInContext()); entry.parent_pattern = dispatcher.fetchOptionalLabel(decl.getParentPattern()); entry.parent_initializer = dispatcher.fetchOptionalLabel(decl.getParentInitializer()); if (decl.hasAttachedPropertyWrapper()) { diff --git a/swift/extractor/translators/StmtTranslator.cpp b/swift/extractor/translators/StmtTranslator.cpp index ac684a01606..a433c93f406 100644 --- a/swift/extractor/translators/StmtTranslator.cpp +++ b/swift/extractor/translators/StmtTranslator.cpp @@ -218,4 +218,10 @@ codeql::DiscardStmt StmtTranslator::translateDiscardStmt(const swift::DiscardStm return entry; } +codeql::ThenStmt StmtTranslator::translateThenStmt(const swift::ThenStmt& stmt) { + auto entry = dispatcher.createEntry(stmt); + entry.result = dispatcher.fetchLabel(stmt.getResult()); + return entry; +} + } // namespace codeql diff --git a/swift/extractor/translators/StmtTranslator.h b/swift/extractor/translators/StmtTranslator.h index e713a57ac16..d593411af37 100644 --- a/swift/extractor/translators/StmtTranslator.h +++ b/swift/extractor/translators/StmtTranslator.h @@ -40,6 +40,7 @@ class StmtTranslator : public AstTranslatorBase { codeql::FailStmt translateFailStmt(const swift::FailStmt& stmt); codeql::PoundAssertStmt translatePoundAssertStmt(const swift::PoundAssertStmt& stmt); codeql::DiscardStmt translateDiscardStmt(const swift::DiscardStmt& stmt); + codeql::ThenStmt translateThenStmt(const swift::ThenStmt& stmt); private: void fillLabeledStmt(const swift::LabeledStmt& stmt, codeql::LabeledStmt& entry); diff --git a/swift/integration-tests/posix-only/deduplication/Relevant.qll b/swift/integration-tests/posix-only/deduplication/Relevant.qll deleted file mode 100644 index bab91e5829d..00000000000 --- a/swift/integration-tests/posix-only/deduplication/Relevant.qll +++ /dev/null @@ -1,5 +0,0 @@ -import swift - -predicate relevant(Locatable loc) { - loc.getLocation().getFile().getName().matches("%/swift/integration-tests/%/Sources/%") -} diff --git a/swift/integration-tests/qlpack.yml b/swift/integration-tests/qlpack.yml deleted file mode 100644 index f0a64418576..00000000000 --- a/swift/integration-tests/qlpack.yml +++ /dev/null @@ -1,7 +0,0 @@ -name: integration-tests-swift -version: 0.0.0 -dependencies: - codeql/swift-all: ${workspace} -tests: . -extractor: swift -warnOnImplicitThis: true diff --git a/swift/logging/tests/assertion-diagnostics/BUILD.bazel b/swift/logging/tests/assertion-diagnostics/BUILD.bazel index ea31eac779a..86fbbbee7c7 100644 --- a/swift/logging/tests/assertion-diagnostics/BUILD.bazel +++ b/swift/logging/tests/assertion-diagnostics/BUILD.bazel @@ -17,5 +17,5 @@ py_test( "diagnostics.expected", ":assert-false", ], - deps = ["//swift/integration-tests:integration_tests"], + deps = ["//swift/ql/integration-tests:utils"], ) diff --git a/swift/logging/tests/assertion-diagnostics/test.py b/swift/logging/tests/assertion-diagnostics/test.py index d18cfe7dff9..03c0334fd0b 100644 --- a/swift/logging/tests/assertion-diagnostics/test.py +++ b/swift/logging/tests/assertion-diagnostics/test.py @@ -2,7 +2,7 @@ import importlib import os import subprocess # We have to use importlib due to the '-' in the path -diagnostics_test_utils = importlib.import_module("swift.integration-tests.diagnostics_test_utils") +diagnostics_test_utils = importlib.import_module("swift.ql.integration-tests.diagnostics_test_utils") test_dir = "swift/logging/tests/assertion-diagnostics" diff --git a/swift/ql/.generated.list b/swift/ql/.generated.list index e6e778ebdd9..0abbd2ee5ae 100644 --- a/swift/ql/.generated.list +++ b/swift/ql/.generated.list @@ -271,6 +271,8 @@ lib/codeql/swift/elements/stmt/ReturnStmtConstructor.qll 2c66c1b1ece31bcfee06c87 lib/codeql/swift/elements/stmt/Stmt.qll b21643c4dd6a7e22c422df36c66d7389918c71cb05e71b58c2086f998035ca8a 2fd87fce67d61461dfd40f1430b67e2611729eb3205fd508a79c4fabf6cc51b8 lib/codeql/swift/elements/stmt/StmtConditionConstructor.qll 978a7c1dd6cc51194c847a6ed4785200515d90d484d013c367d7b86a177656f2 4a0dd278470676232b29e2ed02fef5b88061d9dd3ca082238e5fc4e978dcd66f lib/codeql/swift/elements/stmt/SwitchStmtConstructor.qll 8431feb4b68505ac0072be07a6ed07d71559daf5443e5164d0aad38bc8c5cc12 98a9e32dc3774e47070ec3b0f7f4febfe2ec298858955275e22471682da270bc +lib/codeql/swift/elements/stmt/ThenStmt.qll 70c38206142fa0bc5bbcfe3661dbfb4dcc53416160eef3e6f301504cddb4b0ae f7066479d4319db057de7d49d723dbfa9a6bc221738f8ea6cea795f5ef1e341a +lib/codeql/swift/elements/stmt/ThenStmtConstructor.qll 88823800957584b9a5f9601f85f75875d45d262718d736851b0e40d4028c5dc1 98c480d82177e5d223307aa0e2fe82bf859915b050ec66a5d959f7d0e58ee068 lib/codeql/swift/elements/stmt/ThrowStmtConstructor.qll 974ec76e814030df10362a516da9aa0f90dbb1040ef3297a12632b0654d95dfc a02f73cd6f36d96d6093ffb4608be6e5fb15d8412f3c4ff0f4648b82b909f582 lib/codeql/swift/elements/stmt/WhileStmtConstructor.qll a49c46100da57dc6e8b3cfcc665bd2d6cfa1b49efb0f7d66f49ed719b42ff34d d527c8f6d08b91917d209554c76aade2b35b90c09caec6aa21c3ba951e8e8bf7 lib/codeql/swift/elements/stmt/YieldStmtConstructor.qll ac2047e02add0796b5eff4180c777dc4ebd4bc52c2083036b959e3a1caa41bad 78209a97874bc3bb2c4c3b919ff4b9e68010b0d047d2b455881b980f5100767a @@ -390,7 +392,7 @@ lib/codeql/swift/elements/type/UnresolvedTypeConstructor.qll 7f75d489b4d7ce65cae lib/codeql/swift/elements/type/VariadicSequenceTypeConstructor.qll fc74a5a2a2effa28ef24509b20ee4373d97cf6e8c71840121bb031c6adedf584 c9b2effc1d01c13c5e6a74a111122fa79a2f6554dda3cb016d68ba397e566ec4 lib/codeql/swift/elements/type/WeakStorageType.qll edd13dd97b53040684409e187c1f975bcada6807c919e1345d8977144dbebb6f 9434c044d264a7f5f503a6422c106c9b8fedf74aaae314174473a29ea6ed17b9 lib/codeql/swift/elements/type/WeakStorageTypeConstructor.qll 5fdce3716aba6318522174a2c455a63480970222ae81c732fb19c6dd3ae2d271 60ea79d6943e129deba0deccb566cf9d73f78398b0f7f0212674d91287d6b2ae -lib/codeql/swift/elements.qll 27da89b0b50ea17b96a47aad31453ff0d43b8277ab660385f785879ce6cc243e 27da89b0b50ea17b96a47aad31453ff0d43b8277ab660385f785879ce6cc243e +lib/codeql/swift/elements.qll bb863ff140bfaa0bf887708f421a16c85816886f4d061bbc5af752a4e4d810d3 bb863ff140bfaa0bf887708f421a16c85816886f4d061bbc5af752a4e4d810d3 lib/codeql/swift/generated/AstNode.qll 68877daa9e14b462247ac6b7b724f5e683288e39953a8ebb02a362b7d1df8e4c 54d3512744738e1ee15645f3af116437053cb5209687f4106361a1943b38b666 lib/codeql/swift/generated/AvailabilityInfo.qll e74e218a1ab00416cb8823610ff93642101aa784aa61cbc2b4deef61471a5bac e2c6c19860dc3e6e211041c95d8e6d52c3505ccff7018b80a849735cc98141af lib/codeql/swift/generated/AvailabilitySpec.qll a8afc5071887a67b4e0dec27356ab8cbf3e176b5358cb34c785e3015b2cad5a2 c7f88b0d701612c821359c983b3102f31b23edc211c3dcfe97de5adec61af386 @@ -407,12 +409,12 @@ lib/codeql/swift/generated/Locatable.qll 6cb437dd7ff7331429ec6586b0af50b1af15e4f lib/codeql/swift/generated/Location.qll 3f3bad413be87d05a596fe7b8004f415c2caa98cb759021a6aad20b589b7d700 ed30ed646962b3ffb6b47c97c6434fe47a6b1ea8e3f2e0589577bea5cf96c88e lib/codeql/swift/generated/MacroRole.qll aaf5631c49de81e046854955341202d6d3516713cd09bc2e7b870e40c261cc9f 6cd17d40cbf1d8fa4ef01dfb8b3462b7cee902e6058fb76417c2035be12481d1 lib/codeql/swift/generated/OtherAvailabilitySpec.qll 06393a08e8da36106c5ec6efb9f1bd56a5c7b3d3f3d0bcefc6fa07fa96860c31 06393a08e8da36106c5ec6efb9f1bd56a5c7b3d3f3d0bcefc6fa07fa96860c31 -lib/codeql/swift/generated/ParentChild.qll 523f0fdf11a8007a80b35d7f8b99f736face08513311c8e998ca20ae1e535ebe 2829f5e61adbd863f4ad823ecfd7c1bb5eccaf14bb121b85ad460175b733fe30 +lib/codeql/swift/generated/ParentChild.qll eae164aa8a78e883e707fba6c671ff2cd0ddab1084b0871fc5ae27c44cded4c5 3af88b63e21d58090f9702e6e4716a5b8a5a65897b8c92362b6e3c0fba60ddc2 lib/codeql/swift/generated/PlatformVersionAvailabilitySpec.qll 5355be9da8b778d1d8ae60d25d9c3394477da24f94e8a6ab4484c6a16d07cd7c 075438c1762ec0a7775004b39032dcf85aada038a4269e6f428c34b8282786e9 lib/codeql/swift/generated/PureSynthConstructors.qll 40f5c0c573ce12f16322d9efb12306750f672254cbc36a200c298cb08e504229 40f5c0c573ce12f16322d9efb12306750f672254cbc36a200c298cb08e504229 -lib/codeql/swift/generated/Raw.qll 252bb96829d1c284ec8036e54f14db83d5a3c9be1c2bdc05bc7add7cf46ca618 4cdc6643270b2fc78805635a738dfd506bdee9dc770bc74ec66558c1efff7697 -lib/codeql/swift/generated/Synth.qll b8bf274c60f60df473ed9093b50906822613dee047bda19ad37d07c308f04564 692590b0b18556a23cc1de0c8a60fd17534791dccb876cab85170bbf78392bd1 -lib/codeql/swift/generated/SynthConstructors.qll d3b4b5d93be989004d7c05bbc32a5b859eaad768b4a52cfb01a767c90542f9a4 d3b4b5d93be989004d7c05bbc32a5b859eaad768b4a52cfb01a767c90542f9a4 +lib/codeql/swift/generated/Raw.qll 10633b948918d315b98b6ff6733d4c368e082c5afd78334c0862291f9d883216 66abde4c9a2283773033d90a4633c1203d6563fc238ddbd48fdf1b910f90021a +lib/codeql/swift/generated/Synth.qll 848284b2ae9854c5be74e5ef50a51090e248e5c9c02289a6bc63455e440122da e2607f46a4830e81718ca1636fa65bc29420a18539443d109fafd7f1af1591ce +lib/codeql/swift/generated/SynthConstructors.qll 7edffc30d3dddc4d73241f4e0d3df4501a99eb38d056f82043ed69e481404342 7edffc30d3dddc4d73241f4e0d3df4501a99eb38d056f82043ed69e481404342 lib/codeql/swift/generated/UnknownFile.qll 5325944cf96a72d5d224597745e15960fb6a9448b96b6644ececd6344dfd9d74 5325944cf96a72d5d224597745e15960fb6a9448b96b6644ececd6344dfd9d74 lib/codeql/swift/generated/UnknownLocation.qll dfdeb8eedb2564eccaac416695784ea04fe9754a3e109e8484c695021af4e554 dfdeb8eedb2564eccaac416695784ea04fe9754a3e109e8484c695021af4e554 lib/codeql/swift/generated/UnspecifiedElement.qll 8ecc275cc131fe5aa61052299e10c49c3718f96416df9eeacabf5aea34d97982 b02dfcf0df3859551b176e065291da943670ab4da6ed84d02a0861ff689001c6 @@ -624,6 +626,7 @@ lib/codeql/swift/generated/stmt/ReturnStmt.qll 82910f3c8360b39a2b5b649d41d206372 lib/codeql/swift/generated/stmt/Stmt.qll 3912b8b28aaf01624ac377bdf8caae2c20741c9ef98cef75156e1b0c3a8b5163 9805adf45af0ad4a0734477a5d80b5bcbb2bece8e83411a76aba96042d0c7f18 lib/codeql/swift/generated/stmt/StmtCondition.qll cf03296a32292d836ff9050ffc6d3d5fc56c90f9473e7f70a67116417590ee76 c5694a39bdcab60beaa04a275ec99616dd868c12c878513f783a0eb52f328ba9 lib/codeql/swift/generated/stmt/SwitchStmt.qll 4e0ee2230d295e7b592e837b3ad94f122540f06107139a279302f67cff5cefe8 5bd92a4997e7308b046d985f04f21b1f4284c6f782b56563c1020021f34755a4 +lib/codeql/swift/generated/stmt/ThenStmt.qll b0fb20f9ebfa836675912c385c133acbfc57f48b431a58ede48099cac131491d c78838d9084ff18f813e9cad68a56f8a838ed4ac59f046411442226bb41ad763 lib/codeql/swift/generated/stmt/ThrowStmt.qll 888825d19ced5a03dad6a20af8f8d86e8d8eb8fd8f69eaba9c0d0b58cbefac90 517d4aa93a9ae1874ac64dc1d6a170b4cde8e51c8f842dcba058ff2c61086ffd lib/codeql/swift/generated/stmt/WhileStmt.qll cca25bd25aaea758dce474354d5e57d92eaa5ca5abb918f8d677feb2be6d3b0d d7ae1bdd69c25d8eb882522053b07048f3a0f1bb5ed8dcbd5b3efbfe0f72631b lib/codeql/swift/generated/stmt/YieldStmt.qll c4619558f406dcf3ed1a0171b6c4b93c415fb5419745391c4df217d45e76b3f0 ca5c954cacf21233a35b88fe3e6de2eba0017e4e08b3f51b9d2bac6b01d8a219 @@ -898,6 +901,7 @@ test/extractor-tests/generated/expr/RebindSelfInInitializerExpr/MISSING_SOURCE.t test/extractor-tests/generated/expr/RegexLiteralExpr/MISSING_SOURCE.txt 66846d526b0bc4328735c3c4dd9c390a9325da5b5dfd42ec07622f9c7108a7d7 66846d526b0bc4328735c3c4dd9c390a9325da5b5dfd42ec07622f9c7108a7d7 test/extractor-tests/generated/expr/SingleValueStmtExpr/SingleValueStmtExpr.ql efbfaf798a86c5a7d8053a22f61249208db31edcdaf750f2671057ad2f376806 d3256d2315d5bd5420b40a4be9522752bb57897807ea3853a7a4c61e9a05e478 test/extractor-tests/generated/expr/SingleValueStmtExpr/SingleValueStmtExpr_getType.ql bfbeb24e57078b1bbaae331a6f3e8d13d0efbdca2228dbbca53b86d5e287efd8 864351b87f7981825e148a479e997936c653a4581e8a893eaed96ddeed891eab +test/extractor-tests/generated/expr/SingleValueStmtExpr/ThenStmt.ql 0bd26223160e846cfa64fad75672eab18b8ce27e24d802bc711f42a540d13ac7 6a5b7760c44ee34c6e33a517a52622cc70dbdee88eb20eaea787be0e1f888996 test/extractor-tests/generated/expr/StringLiteralExpr/MISSING_SOURCE.txt 66846d526b0bc4328735c3c4dd9c390a9325da5b5dfd42ec07622f9c7108a7d7 66846d526b0bc4328735c3c4dd9c390a9325da5b5dfd42ec07622f9c7108a7d7 test/extractor-tests/generated/expr/SubscriptExpr/MISSING_SOURCE.txt 66846d526b0bc4328735c3c4dd9c390a9325da5b5dfd42ec07622f9c7108a7d7 66846d526b0bc4328735c3c4dd9c390a9325da5b5dfd42ec07622f9c7108a7d7 test/extractor-tests/generated/expr/SuperRefExpr/MISSING_SOURCE.txt 66846d526b0bc4328735c3c4dd9c390a9325da5b5dfd42ec07622f9c7108a7d7 66846d526b0bc4328735c3c4dd9c390a9325da5b5dfd42ec07622f9c7108a7d7 diff --git a/swift/ql/.gitattributes b/swift/ql/.gitattributes index 44b728f62e6..e5eaf58d62a 100644 --- a/swift/ql/.gitattributes +++ b/swift/ql/.gitattributes @@ -273,6 +273,8 @@ /lib/codeql/swift/elements/stmt/Stmt.qll linguist-generated /lib/codeql/swift/elements/stmt/StmtConditionConstructor.qll linguist-generated /lib/codeql/swift/elements/stmt/SwitchStmtConstructor.qll linguist-generated +/lib/codeql/swift/elements/stmt/ThenStmt.qll linguist-generated +/lib/codeql/swift/elements/stmt/ThenStmtConstructor.qll linguist-generated /lib/codeql/swift/elements/stmt/ThrowStmtConstructor.qll linguist-generated /lib/codeql/swift/elements/stmt/WhileStmtConstructor.qll linguist-generated /lib/codeql/swift/elements/stmt/YieldStmtConstructor.qll linguist-generated @@ -626,6 +628,7 @@ /lib/codeql/swift/generated/stmt/Stmt.qll linguist-generated /lib/codeql/swift/generated/stmt/StmtCondition.qll linguist-generated /lib/codeql/swift/generated/stmt/SwitchStmt.qll linguist-generated +/lib/codeql/swift/generated/stmt/ThenStmt.qll linguist-generated /lib/codeql/swift/generated/stmt/ThrowStmt.qll linguist-generated /lib/codeql/swift/generated/stmt/WhileStmt.qll linguist-generated /lib/codeql/swift/generated/stmt/YieldStmt.qll linguist-generated @@ -900,6 +903,7 @@ /test/extractor-tests/generated/expr/RegexLiteralExpr/MISSING_SOURCE.txt linguist-generated /test/extractor-tests/generated/expr/SingleValueStmtExpr/SingleValueStmtExpr.ql linguist-generated /test/extractor-tests/generated/expr/SingleValueStmtExpr/SingleValueStmtExpr_getType.ql linguist-generated +/test/extractor-tests/generated/expr/SingleValueStmtExpr/ThenStmt.ql linguist-generated /test/extractor-tests/generated/expr/StringLiteralExpr/MISSING_SOURCE.txt linguist-generated /test/extractor-tests/generated/expr/SubscriptExpr/MISSING_SOURCE.txt linguist-generated /test/extractor-tests/generated/expr/SuperRefExpr/MISSING_SOURCE.txt linguist-generated diff --git a/swift/integration-tests/.clang-format b/swift/ql/integration-tests/.clang-format similarity index 100% rename from swift/integration-tests/.clang-format rename to swift/ql/integration-tests/.clang-format diff --git a/swift/integration-tests/.gitignore b/swift/ql/integration-tests/.gitignore similarity index 94% rename from swift/integration-tests/.gitignore rename to swift/ql/integration-tests/.gitignore index aa3e9b45c5c..a68e1d52164 100644 --- a/swift/integration-tests/.gitignore +++ b/swift/ql/integration-tests/.gitignore @@ -6,5 +6,5 @@ xcuserdata/ DerivedData/ .swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata *.actual -db +test-db *.swiftmodule diff --git a/swift/integration-tests/BUILD.bazel b/swift/ql/integration-tests/BUILD.bazel similarity index 82% rename from swift/integration-tests/BUILD.bazel rename to swift/ql/integration-tests/BUILD.bazel index 2fe1553da0e..06c7eb44bee 100644 --- a/swift/integration-tests/BUILD.bazel +++ b/swift/ql/integration-tests/BUILD.bazel @@ -1,5 +1,5 @@ py_library( - name = "integration_tests", + name = "utils", srcs = [ "create_database_utils.py", "diagnostics_test_utils.py", diff --git a/swift/integration-tests/create_database_utils.py b/swift/ql/integration-tests/create_database_utils.py similarity index 90% rename from swift/integration-tests/create_database_utils.py rename to swift/ql/integration-tests/create_database_utils.py index cbe2c5a7f67..b3b3803b05b 100644 --- a/swift/integration-tests/create_database_utils.py +++ b/swift/ql/integration-tests/create_database_utils.py @@ -27,8 +27,8 @@ def runUnsuccessfully(cmd): def run_codeql_database_create(cmds, lang, keep_trap=True, db=None, runFunction=runSuccessfully): """ db parameter is here solely for compatibility with the internal test runner """ assert lang == 'swift' - codeql_root = pathlib.Path(__file__).parents[2] - shutil.rmtree("db", ignore_errors=True) + codeql_root = pathlib.Path(__file__).parents[3] + shutil.rmtree("test-db", ignore_errors=True) cmd = [ "codeql", "database", "create", "-s", ".", "-l", "swift", f"--search-path={codeql_root}", "--no-cleanup", @@ -37,5 +37,5 @@ def run_codeql_database_create(cmds, lang, keep_trap=True, db=None, runFunction= cmd.append("--keep-trap") for c in cmds: cmd += ["-c", c] - cmd.append("db") + cmd.append("test-db") runFunction(cmd) diff --git a/swift/integration-tests/diagnostics_test_utils.py b/swift/ql/integration-tests/diagnostics_test_utils.py similarity index 97% rename from swift/integration-tests/diagnostics_test_utils.py rename to swift/ql/integration-tests/diagnostics_test_utils.py index d3887e33b32..bc33d8b4277 100644 --- a/swift/integration-tests/diagnostics_test_utils.py +++ b/swift/ql/integration-tests/diagnostics_test_utils.py @@ -50,7 +50,7 @@ def _normalize_json(data): return "\n".join(entries) -def check_diagnostics(test_dir=".", test_db="db", actual = None): +def check_diagnostics(test_dir=".", test_db="test-db", actual = None): test_dir = pathlib.Path(test_dir) test_db = pathlib.Path(test_db) if actual is None: diff --git a/swift/integration-tests/linux-only/RegexLiteralExpr/RegexLiteralExpr.expected b/swift/ql/integration-tests/linux-only/RegexLiteralExpr/RegexLiteralExpr.expected similarity index 100% rename from swift/integration-tests/linux-only/RegexLiteralExpr/RegexLiteralExpr.expected rename to swift/ql/integration-tests/linux-only/RegexLiteralExpr/RegexLiteralExpr.expected diff --git a/swift/integration-tests/linux-only/RegexLiteralExpr/RegexLiteralExpr.ql b/swift/ql/integration-tests/linux-only/RegexLiteralExpr/RegexLiteralExpr.ql similarity index 100% rename from swift/integration-tests/linux-only/RegexLiteralExpr/RegexLiteralExpr.ql rename to swift/ql/integration-tests/linux-only/RegexLiteralExpr/RegexLiteralExpr.ql diff --git a/swift/integration-tests/linux-only/RegexLiteralExpr/regex.swift b/swift/ql/integration-tests/linux-only/RegexLiteralExpr/regex.swift similarity index 100% rename from swift/integration-tests/linux-only/RegexLiteralExpr/regex.swift rename to swift/ql/integration-tests/linux-only/RegexLiteralExpr/regex.swift diff --git a/swift/integration-tests/linux-only/RegexLiteralExpr/test.py b/swift/ql/integration-tests/linux-only/RegexLiteralExpr/test.py similarity index 100% rename from swift/integration-tests/linux-only/RegexLiteralExpr/test.py rename to swift/ql/integration-tests/linux-only/RegexLiteralExpr/test.py diff --git a/swift/integration-tests/linux-only/autobuilder/unsupported-os/diagnostics.expected b/swift/ql/integration-tests/linux-only/autobuilder/unsupported-os/diagnostics.expected similarity index 100% rename from swift/integration-tests/linux-only/autobuilder/unsupported-os/diagnostics.expected rename to swift/ql/integration-tests/linux-only/autobuilder/unsupported-os/diagnostics.expected diff --git a/swift/integration-tests/linux-only/autobuilder/unsupported-os/test.py b/swift/ql/integration-tests/linux-only/autobuilder/unsupported-os/test.py similarity index 100% rename from swift/integration-tests/linux-only/autobuilder/unsupported-os/test.py rename to swift/ql/integration-tests/linux-only/autobuilder/unsupported-os/test.py diff --git a/swift/integration-tests/osx-only/autobuilder/failure/.gitignore b/swift/ql/integration-tests/osx-only/autobuilder/failure/.gitignore similarity index 100% rename from swift/integration-tests/osx-only/autobuilder/failure/.gitignore rename to swift/ql/integration-tests/osx-only/autobuilder/failure/.gitignore diff --git a/swift/integration-tests/osx-only/autobuilder/failure/diagnostics.expected b/swift/ql/integration-tests/osx-only/autobuilder/failure/diagnostics.expected similarity index 100% rename from swift/integration-tests/osx-only/autobuilder/failure/diagnostics.expected rename to swift/ql/integration-tests/osx-only/autobuilder/failure/diagnostics.expected diff --git a/swift/integration-tests/osx-only/autobuilder/failure/hello-failure.xcodeproj/project.pbxproj b/swift/ql/integration-tests/osx-only/autobuilder/failure/hello-failure.xcodeproj/project.pbxproj similarity index 100% rename from swift/integration-tests/osx-only/autobuilder/failure/hello-failure.xcodeproj/project.pbxproj rename to swift/ql/integration-tests/osx-only/autobuilder/failure/hello-failure.xcodeproj/project.pbxproj diff --git a/swift/integration-tests/osx-only/autobuilder/failure/hello-failure.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/swift/ql/integration-tests/osx-only/autobuilder/failure/hello-failure.xcodeproj/project.xcworkspace/contents.xcworkspacedata similarity index 100% rename from swift/integration-tests/osx-only/autobuilder/failure/hello-failure.xcodeproj/project.xcworkspace/contents.xcworkspacedata rename to swift/ql/integration-tests/osx-only/autobuilder/failure/hello-failure.xcodeproj/project.xcworkspace/contents.xcworkspacedata diff --git a/swift/integration-tests/osx-only/autobuilder/failure/hello-failure.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/swift/ql/integration-tests/osx-only/autobuilder/failure/hello-failure.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist similarity index 100% rename from swift/integration-tests/osx-only/autobuilder/failure/hello-failure.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist rename to swift/ql/integration-tests/osx-only/autobuilder/failure/hello-failure.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist diff --git a/swift/integration-tests/osx-only/autobuilder/failure/test.py b/swift/ql/integration-tests/osx-only/autobuilder/failure/test.py similarity index 100% rename from swift/integration-tests/osx-only/autobuilder/failure/test.py rename to swift/ql/integration-tests/osx-only/autobuilder/failure/test.py diff --git a/swift/integration-tests/osx-only/autobuilder/no-build-system/diagnostics.expected b/swift/ql/integration-tests/osx-only/autobuilder/no-build-system/diagnostics.expected similarity index 100% rename from swift/integration-tests/osx-only/autobuilder/no-build-system/diagnostics.expected rename to swift/ql/integration-tests/osx-only/autobuilder/no-build-system/diagnostics.expected diff --git a/swift/integration-tests/osx-only/autobuilder/no-build-system/test.py b/swift/ql/integration-tests/osx-only/autobuilder/no-build-system/test.py similarity index 100% rename from swift/integration-tests/osx-only/autobuilder/no-build-system/test.py rename to swift/ql/integration-tests/osx-only/autobuilder/no-build-system/test.py diff --git a/swift/integration-tests/posix-only/frontend-invocations/C.swift b/swift/ql/integration-tests/osx-only/autobuilder/no-build-system/x.swift similarity index 100% rename from swift/integration-tests/posix-only/frontend-invocations/C.swift rename to swift/ql/integration-tests/osx-only/autobuilder/no-build-system/x.swift diff --git a/swift/integration-tests/osx-only/autobuilder/no-swift-with-spm/diagnostics.expected b/swift/ql/integration-tests/osx-only/autobuilder/no-swift-with-spm/diagnostics.expected similarity index 100% rename from swift/integration-tests/osx-only/autobuilder/no-swift-with-spm/diagnostics.expected rename to swift/ql/integration-tests/osx-only/autobuilder/no-swift-with-spm/diagnostics.expected diff --git a/swift/integration-tests/osx-only/autobuilder/no-swift-with-spm/hello-objective.xcodeproj/project.pbxproj b/swift/ql/integration-tests/osx-only/autobuilder/no-swift-with-spm/hello-objective.xcodeproj/project.pbxproj similarity index 100% rename from swift/integration-tests/osx-only/autobuilder/no-swift-with-spm/hello-objective.xcodeproj/project.pbxproj rename to swift/ql/integration-tests/osx-only/autobuilder/no-swift-with-spm/hello-objective.xcodeproj/project.pbxproj diff --git a/swift/integration-tests/osx-only/autobuilder/no-swift-with-spm/hello-objective.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/swift/ql/integration-tests/osx-only/autobuilder/no-swift-with-spm/hello-objective.xcodeproj/project.xcworkspace/contents.xcworkspacedata similarity index 100% rename from swift/integration-tests/osx-only/autobuilder/no-swift-with-spm/hello-objective.xcodeproj/project.xcworkspace/contents.xcworkspacedata rename to swift/ql/integration-tests/osx-only/autobuilder/no-swift-with-spm/hello-objective.xcodeproj/project.xcworkspace/contents.xcworkspacedata diff --git a/swift/integration-tests/osx-only/autobuilder/no-swift-with-spm/hello-objective.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/swift/ql/integration-tests/osx-only/autobuilder/no-swift-with-spm/hello-objective.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist similarity index 100% rename from swift/integration-tests/osx-only/autobuilder/no-swift-with-spm/hello-objective.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist rename to swift/ql/integration-tests/osx-only/autobuilder/no-swift-with-spm/hello-objective.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist diff --git a/swift/integration-tests/osx-only/autobuilder/no-swift-with-spm/hello-objective/Package.swift b/swift/ql/integration-tests/osx-only/autobuilder/no-swift-with-spm/hello-objective/Package.swift similarity index 100% rename from swift/integration-tests/osx-only/autobuilder/no-swift-with-spm/hello-objective/Package.swift rename to swift/ql/integration-tests/osx-only/autobuilder/no-swift-with-spm/hello-objective/Package.swift diff --git a/swift/integration-tests/osx-only/autobuilder/no-swift-with-spm/hello-objective/main.m b/swift/ql/integration-tests/osx-only/autobuilder/no-swift-with-spm/hello-objective/main.m similarity index 100% rename from swift/integration-tests/osx-only/autobuilder/no-swift-with-spm/hello-objective/main.m rename to swift/ql/integration-tests/osx-only/autobuilder/no-swift-with-spm/hello-objective/main.m diff --git a/swift/integration-tests/osx-only/autobuilder/no-swift-with-spm/test.py b/swift/ql/integration-tests/osx-only/autobuilder/no-swift-with-spm/test.py similarity index 100% rename from swift/integration-tests/osx-only/autobuilder/no-swift-with-spm/test.py rename to swift/ql/integration-tests/osx-only/autobuilder/no-swift-with-spm/test.py diff --git a/swift/integration-tests/osx-only/autobuilder/no-swift/diagnostics.expected b/swift/ql/integration-tests/osx-only/autobuilder/no-swift/diagnostics.expected similarity index 100% rename from swift/integration-tests/osx-only/autobuilder/no-swift/diagnostics.expected rename to swift/ql/integration-tests/osx-only/autobuilder/no-swift/diagnostics.expected diff --git a/swift/integration-tests/osx-only/autobuilder/no-swift/hello-objective.xcodeproj/project.pbxproj b/swift/ql/integration-tests/osx-only/autobuilder/no-swift/hello-objective.xcodeproj/project.pbxproj similarity index 100% rename from swift/integration-tests/osx-only/autobuilder/no-swift/hello-objective.xcodeproj/project.pbxproj rename to swift/ql/integration-tests/osx-only/autobuilder/no-swift/hello-objective.xcodeproj/project.pbxproj diff --git a/swift/integration-tests/osx-only/autobuilder/no-swift/hello-objective.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/swift/ql/integration-tests/osx-only/autobuilder/no-swift/hello-objective.xcodeproj/project.xcworkspace/contents.xcworkspacedata similarity index 100% rename from swift/integration-tests/osx-only/autobuilder/no-swift/hello-objective.xcodeproj/project.xcworkspace/contents.xcworkspacedata rename to swift/ql/integration-tests/osx-only/autobuilder/no-swift/hello-objective.xcodeproj/project.xcworkspace/contents.xcworkspacedata diff --git a/swift/integration-tests/osx-only/autobuilder/no-swift/hello-objective.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/swift/ql/integration-tests/osx-only/autobuilder/no-swift/hello-objective.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist similarity index 100% rename from swift/integration-tests/osx-only/autobuilder/no-swift/hello-objective.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist rename to swift/ql/integration-tests/osx-only/autobuilder/no-swift/hello-objective.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist diff --git a/swift/integration-tests/osx-only/autobuilder/no-swift/hello-objective/main.m b/swift/ql/integration-tests/osx-only/autobuilder/no-swift/hello-objective/main.m similarity index 100% rename from swift/integration-tests/osx-only/autobuilder/no-swift/hello-objective/main.m rename to swift/ql/integration-tests/osx-only/autobuilder/no-swift/hello-objective/main.m diff --git a/swift/integration-tests/osx-only/autobuilder/no-swift/test.py b/swift/ql/integration-tests/osx-only/autobuilder/no-swift/test.py similarity index 100% rename from swift/integration-tests/osx-only/autobuilder/no-swift/test.py rename to swift/ql/integration-tests/osx-only/autobuilder/no-swift/test.py diff --git a/swift/integration-tests/osx-only/autobuilder/no-xcode-with-spm/Package.swift b/swift/ql/integration-tests/osx-only/autobuilder/no-xcode-with-spm/Package.swift similarity index 100% rename from swift/integration-tests/osx-only/autobuilder/no-xcode-with-spm/Package.swift rename to swift/ql/integration-tests/osx-only/autobuilder/no-xcode-with-spm/Package.swift diff --git a/swift/integration-tests/osx-only/autobuilder/no-xcode-with-spm/diagnostics.expected b/swift/ql/integration-tests/osx-only/autobuilder/no-xcode-with-spm/diagnostics.expected similarity index 100% rename from swift/integration-tests/osx-only/autobuilder/no-xcode-with-spm/diagnostics.expected rename to swift/ql/integration-tests/osx-only/autobuilder/no-xcode-with-spm/diagnostics.expected diff --git a/swift/integration-tests/osx-only/autobuilder/no-xcode-with-spm/test.py b/swift/ql/integration-tests/osx-only/autobuilder/no-xcode-with-spm/test.py similarity index 100% rename from swift/integration-tests/osx-only/autobuilder/no-xcode-with-spm/test.py rename to swift/ql/integration-tests/osx-only/autobuilder/no-xcode-with-spm/test.py diff --git a/swift/integration-tests/posix-only/frontend-invocations/D.swift b/swift/ql/integration-tests/osx-only/autobuilder/no-xcode-with-spm/x.swift similarity index 100% rename from swift/integration-tests/posix-only/frontend-invocations/D.swift rename to swift/ql/integration-tests/osx-only/autobuilder/no-xcode-with-spm/x.swift diff --git a/swift/integration-tests/osx-only/autobuilder/only-tests-with-spm/Package.swift b/swift/ql/integration-tests/osx-only/autobuilder/only-tests-with-spm/Package.swift similarity index 100% rename from swift/integration-tests/osx-only/autobuilder/only-tests-with-spm/Package.swift rename to swift/ql/integration-tests/osx-only/autobuilder/only-tests-with-spm/Package.swift diff --git a/swift/integration-tests/osx-only/autobuilder/only-tests-with-spm/diagnostics.expected b/swift/ql/integration-tests/osx-only/autobuilder/only-tests-with-spm/diagnostics.expected similarity index 100% rename from swift/integration-tests/osx-only/autobuilder/only-tests-with-spm/diagnostics.expected rename to swift/ql/integration-tests/osx-only/autobuilder/only-tests-with-spm/diagnostics.expected diff --git a/swift/integration-tests/osx-only/autobuilder/only-tests-with-spm/hello-tests.xcodeproj/project.pbxproj b/swift/ql/integration-tests/osx-only/autobuilder/only-tests-with-spm/hello-tests.xcodeproj/project.pbxproj similarity index 100% rename from swift/integration-tests/osx-only/autobuilder/only-tests-with-spm/hello-tests.xcodeproj/project.pbxproj rename to swift/ql/integration-tests/osx-only/autobuilder/only-tests-with-spm/hello-tests.xcodeproj/project.pbxproj diff --git a/swift/integration-tests/osx-only/autobuilder/only-tests-with-spm/hello-tests.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/swift/ql/integration-tests/osx-only/autobuilder/only-tests-with-spm/hello-tests.xcodeproj/project.xcworkspace/contents.xcworkspacedata similarity index 100% rename from swift/integration-tests/osx-only/autobuilder/only-tests-with-spm/hello-tests.xcodeproj/project.xcworkspace/contents.xcworkspacedata rename to swift/ql/integration-tests/osx-only/autobuilder/only-tests-with-spm/hello-tests.xcodeproj/project.xcworkspace/contents.xcworkspacedata diff --git a/swift/integration-tests/osx-only/autobuilder/only-tests-with-spm/test.py b/swift/ql/integration-tests/osx-only/autobuilder/only-tests-with-spm/test.py similarity index 100% rename from swift/integration-tests/osx-only/autobuilder/only-tests-with-spm/test.py rename to swift/ql/integration-tests/osx-only/autobuilder/only-tests-with-spm/test.py diff --git a/swift/integration-tests/osx-only/autobuilder/only-tests/diagnostics.expected b/swift/ql/integration-tests/osx-only/autobuilder/only-tests/diagnostics.expected similarity index 100% rename from swift/integration-tests/osx-only/autobuilder/only-tests/diagnostics.expected rename to swift/ql/integration-tests/osx-only/autobuilder/only-tests/diagnostics.expected diff --git a/swift/integration-tests/osx-only/autobuilder/only-tests/hello-tests.xcodeproj/project.pbxproj b/swift/ql/integration-tests/osx-only/autobuilder/only-tests/hello-tests.xcodeproj/project.pbxproj similarity index 100% rename from swift/integration-tests/osx-only/autobuilder/only-tests/hello-tests.xcodeproj/project.pbxproj rename to swift/ql/integration-tests/osx-only/autobuilder/only-tests/hello-tests.xcodeproj/project.pbxproj diff --git a/swift/integration-tests/osx-only/autobuilder/only-tests/hello-tests.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/swift/ql/integration-tests/osx-only/autobuilder/only-tests/hello-tests.xcodeproj/project.xcworkspace/contents.xcworkspacedata similarity index 100% rename from swift/integration-tests/osx-only/autobuilder/only-tests/hello-tests.xcodeproj/project.xcworkspace/contents.xcworkspacedata rename to swift/ql/integration-tests/osx-only/autobuilder/only-tests/hello-tests.xcodeproj/project.xcworkspace/contents.xcworkspacedata diff --git a/swift/integration-tests/osx-only/autobuilder/only-tests/test.py b/swift/ql/integration-tests/osx-only/autobuilder/only-tests/test.py similarity index 100% rename from swift/integration-tests/osx-only/autobuilder/only-tests/test.py rename to swift/ql/integration-tests/osx-only/autobuilder/only-tests/test.py diff --git a/swift/integration-tests/osx-only/autobuilder/xcode-fails-spm-works/Files.expected b/swift/ql/integration-tests/osx-only/autobuilder/xcode-fails-spm-works/Files.expected similarity index 100% rename from swift/integration-tests/osx-only/autobuilder/xcode-fails-spm-works/Files.expected rename to swift/ql/integration-tests/osx-only/autobuilder/xcode-fails-spm-works/Files.expected diff --git a/swift/integration-tests/osx-only/autobuilder/xcode-fails-spm-works/Files.ql b/swift/ql/integration-tests/osx-only/autobuilder/xcode-fails-spm-works/Files.ql similarity index 100% rename from swift/integration-tests/osx-only/autobuilder/xcode-fails-spm-works/Files.ql rename to swift/ql/integration-tests/osx-only/autobuilder/xcode-fails-spm-works/Files.ql diff --git a/swift/integration-tests/osx-only/autobuilder/xcode-fails-spm-works/Package.swift b/swift/ql/integration-tests/osx-only/autobuilder/xcode-fails-spm-works/Package.swift similarity index 100% rename from swift/integration-tests/osx-only/autobuilder/xcode-fails-spm-works/Package.swift rename to swift/ql/integration-tests/osx-only/autobuilder/xcode-fails-spm-works/Package.swift diff --git a/swift/integration-tests/osx-only/autobuilder/xcode-fails-spm-works/Sources/hello-world/hello_world.swift b/swift/ql/integration-tests/osx-only/autobuilder/xcode-fails-spm-works/Sources/hello-world/hello_world.swift similarity index 100% rename from swift/integration-tests/osx-only/autobuilder/xcode-fails-spm-works/Sources/hello-world/hello_world.swift rename to swift/ql/integration-tests/osx-only/autobuilder/xcode-fails-spm-works/Sources/hello-world/hello_world.swift diff --git a/swift/integration-tests/osx-only/autobuilder/xcode-fails-spm-works/codeql-swift-autobuild-test.xcodeproj/project.pbxproj b/swift/ql/integration-tests/osx-only/autobuilder/xcode-fails-spm-works/codeql-swift-autobuild-test.xcodeproj/project.pbxproj similarity index 100% rename from swift/integration-tests/osx-only/autobuilder/xcode-fails-spm-works/codeql-swift-autobuild-test.xcodeproj/project.pbxproj rename to swift/ql/integration-tests/osx-only/autobuilder/xcode-fails-spm-works/codeql-swift-autobuild-test.xcodeproj/project.pbxproj diff --git a/swift/integration-tests/osx-only/autobuilder/xcode-fails-spm-works/codeql-swift-autobuild-test/AppDelegate.swift b/swift/ql/integration-tests/osx-only/autobuilder/xcode-fails-spm-works/codeql-swift-autobuild-test/AppDelegate.swift similarity index 100% rename from swift/integration-tests/osx-only/autobuilder/xcode-fails-spm-works/codeql-swift-autobuild-test/AppDelegate.swift rename to swift/ql/integration-tests/osx-only/autobuilder/xcode-fails-spm-works/codeql-swift-autobuild-test/AppDelegate.swift diff --git a/swift/integration-tests/osx-only/autobuilder/xcode-fails-spm-works/test.py b/swift/ql/integration-tests/osx-only/autobuilder/xcode-fails-spm-works/test.py similarity index 100% rename from swift/integration-tests/osx-only/autobuilder/xcode-fails-spm-works/test.py rename to swift/ql/integration-tests/osx-only/autobuilder/xcode-fails-spm-works/test.py diff --git a/swift/integration-tests/osx-only/canonical-case/Files.expected b/swift/ql/integration-tests/osx-only/canonical-case/Files.expected similarity index 100% rename from swift/integration-tests/osx-only/canonical-case/Files.expected rename to swift/ql/integration-tests/osx-only/canonical-case/Files.expected diff --git a/swift/integration-tests/osx-only/canonical-case/Files.ql b/swift/ql/integration-tests/osx-only/canonical-case/Files.ql similarity index 100% rename from swift/integration-tests/osx-only/canonical-case/Files.ql rename to swift/ql/integration-tests/osx-only/canonical-case/Files.ql diff --git a/swift/integration-tests/posix-only/frontend-invocations/E.swift b/swift/ql/integration-tests/osx-only/canonical-case/MiXeDcAsE.swifT similarity index 100% rename from swift/integration-tests/posix-only/frontend-invocations/E.swift rename to swift/ql/integration-tests/osx-only/canonical-case/MiXeDcAsE.swifT diff --git a/swift/integration-tests/osx-only/canonical-case/build.sh b/swift/ql/integration-tests/osx-only/canonical-case/build.sh similarity index 100% rename from swift/integration-tests/osx-only/canonical-case/build.sh rename to swift/ql/integration-tests/osx-only/canonical-case/build.sh diff --git a/swift/integration-tests/osx-only/canonical-case/test.py b/swift/ql/integration-tests/osx-only/canonical-case/test.py similarity index 100% rename from swift/integration-tests/osx-only/canonical-case/test.py rename to swift/ql/integration-tests/osx-only/canonical-case/test.py diff --git a/swift/integration-tests/osx-only/hello-xcode/Files.expected b/swift/ql/integration-tests/osx-only/hello-xcode/Files.expected similarity index 100% rename from swift/integration-tests/osx-only/hello-xcode/Files.expected rename to swift/ql/integration-tests/osx-only/hello-xcode/Files.expected diff --git a/swift/integration-tests/osx-only/hello-xcode/Files.ql b/swift/ql/integration-tests/osx-only/hello-xcode/Files.ql similarity index 100% rename from swift/integration-tests/osx-only/hello-xcode/Files.ql rename to swift/ql/integration-tests/osx-only/hello-xcode/Files.ql diff --git a/swift/integration-tests/osx-only/hello-xcode/codeql-swift-autobuild-test.xcodeproj/project.pbxproj b/swift/ql/integration-tests/osx-only/hello-xcode/codeql-swift-autobuild-test.xcodeproj/project.pbxproj similarity index 100% rename from swift/integration-tests/osx-only/hello-xcode/codeql-swift-autobuild-test.xcodeproj/project.pbxproj rename to swift/ql/integration-tests/osx-only/hello-xcode/codeql-swift-autobuild-test.xcodeproj/project.pbxproj diff --git a/swift/integration-tests/osx-only/hello-xcode/codeql-swift-autobuild-test/AppDelegate.swift b/swift/ql/integration-tests/osx-only/hello-xcode/codeql-swift-autobuild-test/AppDelegate.swift similarity index 100% rename from swift/integration-tests/osx-only/hello-xcode/codeql-swift-autobuild-test/AppDelegate.swift rename to swift/ql/integration-tests/osx-only/hello-xcode/codeql-swift-autobuild-test/AppDelegate.swift diff --git a/swift/integration-tests/osx-only/hello-xcode/test.py b/swift/ql/integration-tests/osx-only/hello-xcode/test.py similarity index 100% rename from swift/integration-tests/osx-only/hello-xcode/test.py rename to swift/ql/integration-tests/osx-only/hello-xcode/test.py diff --git a/swift/integration-tests/posix-only/cross-references/Classes.expected b/swift/ql/integration-tests/posix-only/cross-references/Classes.expected similarity index 100% rename from swift/integration-tests/posix-only/cross-references/Classes.expected rename to swift/ql/integration-tests/posix-only/cross-references/Classes.expected diff --git a/swift/integration-tests/posix-only/cross-references/Classes.ql b/swift/ql/integration-tests/posix-only/cross-references/Classes.ql similarity index 100% rename from swift/integration-tests/posix-only/cross-references/Classes.ql rename to swift/ql/integration-tests/posix-only/cross-references/Classes.ql diff --git a/swift/integration-tests/posix-only/cross-references/Deinitializers.expected b/swift/ql/integration-tests/posix-only/cross-references/Deinitializers.expected similarity index 100% rename from swift/integration-tests/posix-only/cross-references/Deinitializers.expected rename to swift/ql/integration-tests/posix-only/cross-references/Deinitializers.expected diff --git a/swift/integration-tests/posix-only/cross-references/Deinitializers.ql b/swift/ql/integration-tests/posix-only/cross-references/Deinitializers.ql similarity index 100% rename from swift/integration-tests/posix-only/cross-references/Deinitializers.ql rename to swift/ql/integration-tests/posix-only/cross-references/Deinitializers.ql diff --git a/swift/integration-tests/posix-only/cross-references/Enums.expected b/swift/ql/integration-tests/posix-only/cross-references/Enums.expected similarity index 100% rename from swift/integration-tests/posix-only/cross-references/Enums.expected rename to swift/ql/integration-tests/posix-only/cross-references/Enums.expected diff --git a/swift/integration-tests/posix-only/cross-references/Enums.ql b/swift/ql/integration-tests/posix-only/cross-references/Enums.ql similarity index 100% rename from swift/integration-tests/posix-only/cross-references/Enums.ql rename to swift/ql/integration-tests/posix-only/cross-references/Enums.ql diff --git a/swift/integration-tests/posix-only/cross-references/Functions.expected b/swift/ql/integration-tests/posix-only/cross-references/Functions.expected similarity index 100% rename from swift/integration-tests/posix-only/cross-references/Functions.expected rename to swift/ql/integration-tests/posix-only/cross-references/Functions.expected diff --git a/swift/integration-tests/posix-only/cross-references/Functions.ql b/swift/ql/integration-tests/posix-only/cross-references/Functions.ql similarity index 100% rename from swift/integration-tests/posix-only/cross-references/Functions.ql rename to swift/ql/integration-tests/posix-only/cross-references/Functions.ql diff --git a/swift/integration-tests/posix-only/cross-references/Initializers.expected b/swift/ql/integration-tests/posix-only/cross-references/Initializers.expected similarity index 100% rename from swift/integration-tests/posix-only/cross-references/Initializers.expected rename to swift/ql/integration-tests/posix-only/cross-references/Initializers.expected diff --git a/swift/integration-tests/posix-only/cross-references/Initializers.ql b/swift/ql/integration-tests/posix-only/cross-references/Initializers.ql similarity index 100% rename from swift/integration-tests/posix-only/cross-references/Initializers.ql rename to swift/ql/integration-tests/posix-only/cross-references/Initializers.ql diff --git a/swift/integration-tests/posix-only/cross-references/Module.expected b/swift/ql/integration-tests/posix-only/cross-references/Module.expected similarity index 100% rename from swift/integration-tests/posix-only/cross-references/Module.expected rename to swift/ql/integration-tests/posix-only/cross-references/Module.expected diff --git a/swift/integration-tests/posix-only/cross-references/Module.ql b/swift/ql/integration-tests/posix-only/cross-references/Module.ql similarity index 100% rename from swift/integration-tests/posix-only/cross-references/Module.ql rename to swift/ql/integration-tests/posix-only/cross-references/Module.ql diff --git a/swift/integration-tests/posix-only/cross-references/Operators.expected b/swift/ql/integration-tests/posix-only/cross-references/Operators.expected similarity index 100% rename from swift/integration-tests/posix-only/cross-references/Operators.expected rename to swift/ql/integration-tests/posix-only/cross-references/Operators.expected diff --git a/swift/integration-tests/posix-only/cross-references/Operators.ql b/swift/ql/integration-tests/posix-only/cross-references/Operators.ql similarity index 100% rename from swift/integration-tests/posix-only/cross-references/Operators.ql rename to swift/ql/integration-tests/posix-only/cross-references/Operators.ql diff --git a/swift/integration-tests/posix-only/cross-references/Package.swift b/swift/ql/integration-tests/posix-only/cross-references/Package.swift similarity index 100% rename from swift/integration-tests/posix-only/cross-references/Package.swift rename to swift/ql/integration-tests/posix-only/cross-references/Package.swift diff --git a/swift/integration-tests/posix-only/cross-references/Protocols.expected b/swift/ql/integration-tests/posix-only/cross-references/Protocols.expected similarity index 100% rename from swift/integration-tests/posix-only/cross-references/Protocols.expected rename to swift/ql/integration-tests/posix-only/cross-references/Protocols.expected diff --git a/swift/integration-tests/posix-only/cross-references/Protocols.ql b/swift/ql/integration-tests/posix-only/cross-references/Protocols.ql similarity index 100% rename from swift/integration-tests/posix-only/cross-references/Protocols.ql rename to swift/ql/integration-tests/posix-only/cross-references/Protocols.ql diff --git a/swift/integration-tests/posix-only/cross-references/Sources/cross-references/lib.swift b/swift/ql/integration-tests/posix-only/cross-references/Sources/cross-references/lib.swift similarity index 100% rename from swift/integration-tests/posix-only/cross-references/Sources/cross-references/lib.swift rename to swift/ql/integration-tests/posix-only/cross-references/Sources/cross-references/lib.swift diff --git a/swift/integration-tests/posix-only/cross-references/Sources/cross-references/main.swift b/swift/ql/integration-tests/posix-only/cross-references/Sources/cross-references/main.swift similarity index 100% rename from swift/integration-tests/posix-only/cross-references/Sources/cross-references/main.swift rename to swift/ql/integration-tests/posix-only/cross-references/Sources/cross-references/main.swift diff --git a/swift/integration-tests/posix-only/cross-references/Structs.expected b/swift/ql/integration-tests/posix-only/cross-references/Structs.expected similarity index 100% rename from swift/integration-tests/posix-only/cross-references/Structs.expected rename to swift/ql/integration-tests/posix-only/cross-references/Structs.expected diff --git a/swift/integration-tests/posix-only/cross-references/Structs.ql b/swift/ql/integration-tests/posix-only/cross-references/Structs.ql similarity index 100% rename from swift/integration-tests/posix-only/cross-references/Structs.ql rename to swift/ql/integration-tests/posix-only/cross-references/Structs.ql diff --git a/swift/integration-tests/posix-only/cross-references/VarDecls.expected b/swift/ql/integration-tests/posix-only/cross-references/VarDecls.expected similarity index 100% rename from swift/integration-tests/posix-only/cross-references/VarDecls.expected rename to swift/ql/integration-tests/posix-only/cross-references/VarDecls.expected diff --git a/swift/integration-tests/posix-only/cross-references/VarDecls.ql b/swift/ql/integration-tests/posix-only/cross-references/VarDecls.ql similarity index 100% rename from swift/integration-tests/posix-only/cross-references/VarDecls.ql rename to swift/ql/integration-tests/posix-only/cross-references/VarDecls.ql diff --git a/swift/integration-tests/posix-only/cross-references/test.py b/swift/ql/integration-tests/posix-only/cross-references/test.py similarity index 100% rename from swift/integration-tests/posix-only/cross-references/test.py rename to swift/ql/integration-tests/posix-only/cross-references/test.py diff --git a/swift/integration-tests/posix-only/deduplication/BuiltinTypes.expected b/swift/ql/integration-tests/posix-only/deduplication/BuiltinTypes.expected similarity index 100% rename from swift/integration-tests/posix-only/deduplication/BuiltinTypes.expected rename to swift/ql/integration-tests/posix-only/deduplication/BuiltinTypes.expected diff --git a/swift/integration-tests/posix-only/deduplication/BuiltinTypes.ql b/swift/ql/integration-tests/posix-only/deduplication/BuiltinTypes.ql similarity index 100% rename from swift/integration-tests/posix-only/deduplication/BuiltinTypes.ql rename to swift/ql/integration-tests/posix-only/deduplication/BuiltinTypes.ql diff --git a/swift/integration-tests/posix-only/deduplication/Decls.expected b/swift/ql/integration-tests/posix-only/deduplication/Decls.expected similarity index 99% rename from swift/integration-tests/posix-only/deduplication/Decls.expected rename to swift/ql/integration-tests/posix-only/deduplication/Decls.expected index edfdbafdbf5..08ea0335af8 100644 --- a/swift/integration-tests/posix-only/deduplication/Decls.expected +++ b/swift/ql/integration-tests/posix-only/deduplication/Decls.expected @@ -46,8 +46,8 @@ | Sources/deduplication/def.swift:26:36:26:39 | _ | ParamDecl | A [GenericTypeParamType] | | Sources/deduplication/def.swift:26:42:26:45 | _ | ParamDecl | B [GenericTypeParamType] | | Sources/deduplication/def.swift:26:48:26:51 | _ | ParamDecl | C [GenericTypeParamType] | -| Sources/deduplication/def.swift:28:1:28:21 | Protocol1 | ProtocolDecl | Protocol1.Protocol [MetatypeType] | -| Sources/deduplication/def.swift:29:1:31:1 | Protocol2 | ProtocolDecl | Protocol2.Protocol [MetatypeType] | +| Sources/deduplication/def.swift:28:1:28:21 | Protocol1 | ProtocolDecl | Protocol1.Type [MetatypeType] | +| Sources/deduplication/def.swift:29:1:31:1 | Protocol2 | ProtocolDecl | Protocol2.Type [MetatypeType] | | Sources/deduplication/def.swift:30:5:30:20 | Associated | AssociatedTypeDecl | Self.Associated.Type [MetatypeType] | | Sources/deduplication/def.swift:32:1:32:14 | Class | ClassDecl | Class.Type [MetatypeType] | | Sources/deduplication/def.swift:32:7:32:7 | Class.deinit() | Deinitializer | (Class) -> () -> () [FunctionType] | diff --git a/swift/integration-tests/posix-only/deduplication/Decls.ql b/swift/ql/integration-tests/posix-only/deduplication/Decls.ql similarity index 100% rename from swift/integration-tests/posix-only/deduplication/Decls.ql rename to swift/ql/integration-tests/posix-only/deduplication/Decls.ql diff --git a/swift/integration-tests/posix-only/deduplication/Package.swift b/swift/ql/integration-tests/posix-only/deduplication/Package.swift similarity index 100% rename from swift/integration-tests/posix-only/deduplication/Package.swift rename to swift/ql/integration-tests/posix-only/deduplication/Package.swift diff --git a/swift/ql/integration-tests/posix-only/deduplication/Relevant.qll b/swift/ql/integration-tests/posix-only/deduplication/Relevant.qll new file mode 100644 index 00000000000..fb76e5e35b4 --- /dev/null +++ b/swift/ql/integration-tests/posix-only/deduplication/Relevant.qll @@ -0,0 +1,5 @@ +import swift + +predicate relevant(Locatable loc) { + loc.getLocation().getFile().getName().matches("%/swift/ql/integration-tests/%/Sources/%") +} diff --git a/swift/integration-tests/posix-only/deduplication/Sources/deduplication/def.swift b/swift/ql/integration-tests/posix-only/deduplication/Sources/deduplication/def.swift similarity index 100% rename from swift/integration-tests/posix-only/deduplication/Sources/deduplication/def.swift rename to swift/ql/integration-tests/posix-only/deduplication/Sources/deduplication/def.swift diff --git a/swift/integration-tests/posix-only/deduplication/Sources/deduplication/use.swift b/swift/ql/integration-tests/posix-only/deduplication/Sources/deduplication/use.swift similarity index 100% rename from swift/integration-tests/posix-only/deduplication/Sources/deduplication/use.swift rename to swift/ql/integration-tests/posix-only/deduplication/Sources/deduplication/use.swift diff --git a/swift/integration-tests/posix-only/deduplication/Types.expected b/swift/ql/integration-tests/posix-only/deduplication/Types.expected similarity index 100% rename from swift/integration-tests/posix-only/deduplication/Types.expected rename to swift/ql/integration-tests/posix-only/deduplication/Types.expected diff --git a/swift/integration-tests/posix-only/deduplication/Types.ql b/swift/ql/integration-tests/posix-only/deduplication/Types.ql similarity index 100% rename from swift/integration-tests/posix-only/deduplication/Types.ql rename to swift/ql/integration-tests/posix-only/deduplication/Types.ql diff --git a/swift/integration-tests/posix-only/deduplication/test.py b/swift/ql/integration-tests/posix-only/deduplication/test.py similarity index 100% rename from swift/integration-tests/posix-only/deduplication/test.py rename to swift/ql/integration-tests/posix-only/deduplication/test.py diff --git a/swift/integration-tests/posix-only/frontend-invocations/.gitignore b/swift/ql/integration-tests/posix-only/frontend-invocations/.gitignore similarity index 100% rename from swift/integration-tests/posix-only/frontend-invocations/.gitignore rename to swift/ql/integration-tests/posix-only/frontend-invocations/.gitignore diff --git a/swift/integration-tests/posix-only/frontend-invocations/Esup.swift b/swift/ql/integration-tests/posix-only/frontend-invocations/A.swift similarity index 100% rename from swift/integration-tests/posix-only/frontend-invocations/Esup.swift rename to swift/ql/integration-tests/posix-only/frontend-invocations/A.swift diff --git a/swift/integration-tests/posix-only/frontend-invocations/G.swift b/swift/ql/integration-tests/posix-only/frontend-invocations/B.swift similarity index 100% rename from swift/integration-tests/posix-only/frontend-invocations/G.swift rename to swift/ql/integration-tests/posix-only/frontend-invocations/B.swift diff --git a/swift/integration-tests/posix-only/frontend-invocations/dir/.empty b/swift/ql/integration-tests/posix-only/frontend-invocations/C.swift similarity index 100% rename from swift/integration-tests/posix-only/frontend-invocations/dir/.empty rename to swift/ql/integration-tests/posix-only/frontend-invocations/C.swift diff --git a/swift/integration-tests/posix-only/partial-modules/Unknown.expected b/swift/ql/integration-tests/posix-only/frontend-invocations/D.swift similarity index 100% rename from swift/integration-tests/posix-only/partial-modules/Unknown.expected rename to swift/ql/integration-tests/posix-only/frontend-invocations/D.swift diff --git a/swift/integration-tests/posix-only/symlinks/preserve/Sources/.gitkeep b/swift/ql/integration-tests/posix-only/frontend-invocations/E.swift similarity index 100% rename from swift/integration-tests/posix-only/symlinks/preserve/Sources/.gitkeep rename to swift/ql/integration-tests/posix-only/frontend-invocations/E.swift diff --git a/swift/integration-tests/posix-only/symlinks/resolve/Sources/.gitkeep b/swift/ql/integration-tests/posix-only/frontend-invocations/Esup.swift similarity index 100% rename from swift/integration-tests/posix-only/symlinks/resolve/Sources/.gitkeep rename to swift/ql/integration-tests/posix-only/frontend-invocations/Esup.swift diff --git a/swift/integration-tests/posix-only/frontend-invocations/F1.swift b/swift/ql/integration-tests/posix-only/frontend-invocations/F1.swift similarity index 100% rename from swift/integration-tests/posix-only/frontend-invocations/F1.swift rename to swift/ql/integration-tests/posix-only/frontend-invocations/F1.swift diff --git a/swift/integration-tests/posix-only/frontend-invocations/F2.swift b/swift/ql/integration-tests/posix-only/frontend-invocations/F2.swift similarity index 100% rename from swift/integration-tests/posix-only/frontend-invocations/F2.swift rename to swift/ql/integration-tests/posix-only/frontend-invocations/F2.swift diff --git a/swift/integration-tests/posix-only/frontend-invocations/F3.swift b/swift/ql/integration-tests/posix-only/frontend-invocations/F3.swift similarity index 100% rename from swift/integration-tests/posix-only/frontend-invocations/F3.swift rename to swift/ql/integration-tests/posix-only/frontend-invocations/F3.swift diff --git a/swift/integration-tests/posix-only/frontend-invocations/F4.swift b/swift/ql/integration-tests/posix-only/frontend-invocations/F4.swift similarity index 100% rename from swift/integration-tests/posix-only/frontend-invocations/F4.swift rename to swift/ql/integration-tests/posix-only/frontend-invocations/F4.swift diff --git a/swift/integration-tests/posix-only/frontend-invocations/F5.swift b/swift/ql/integration-tests/posix-only/frontend-invocations/F5.swift similarity index 100% rename from swift/integration-tests/posix-only/frontend-invocations/F5.swift rename to swift/ql/integration-tests/posix-only/frontend-invocations/F5.swift diff --git a/swift/integration-tests/posix-only/frontend-invocations/Files.expected b/swift/ql/integration-tests/posix-only/frontend-invocations/Files.expected similarity index 100% rename from swift/integration-tests/posix-only/frontend-invocations/Files.expected rename to swift/ql/integration-tests/posix-only/frontend-invocations/Files.expected diff --git a/swift/integration-tests/posix-only/frontend-invocations/Files.ql b/swift/ql/integration-tests/posix-only/frontend-invocations/Files.ql similarity index 100% rename from swift/integration-tests/posix-only/frontend-invocations/Files.ql rename to swift/ql/integration-tests/posix-only/frontend-invocations/Files.ql diff --git a/swift/ql/integration-tests/posix-only/frontend-invocations/G.swift b/swift/ql/integration-tests/posix-only/frontend-invocations/G.swift new file mode 100644 index 00000000000..e69de29bb2d diff --git a/swift/integration-tests/posix-only/frontend-invocations/H1.swift b/swift/ql/integration-tests/posix-only/frontend-invocations/H1.swift similarity index 100% rename from swift/integration-tests/posix-only/frontend-invocations/H1.swift rename to swift/ql/integration-tests/posix-only/frontend-invocations/H1.swift diff --git a/swift/integration-tests/posix-only/frontend-invocations/H2.swift b/swift/ql/integration-tests/posix-only/frontend-invocations/H2.swift similarity index 100% rename from swift/integration-tests/posix-only/frontend-invocations/H2.swift rename to swift/ql/integration-tests/posix-only/frontend-invocations/H2.swift diff --git a/swift/integration-tests/posix-only/frontend-invocations/H3.swift b/swift/ql/integration-tests/posix-only/frontend-invocations/H3.swift similarity index 100% rename from swift/integration-tests/posix-only/frontend-invocations/H3.swift rename to swift/ql/integration-tests/posix-only/frontend-invocations/H3.swift diff --git a/swift/integration-tests/posix-only/frontend-invocations/I1.swift b/swift/ql/integration-tests/posix-only/frontend-invocations/I1.swift similarity index 100% rename from swift/integration-tests/posix-only/frontend-invocations/I1.swift rename to swift/ql/integration-tests/posix-only/frontend-invocations/I1.swift diff --git a/swift/integration-tests/posix-only/frontend-invocations/I2.swift b/swift/ql/integration-tests/posix-only/frontend-invocations/I2.swift similarity index 100% rename from swift/integration-tests/posix-only/frontend-invocations/I2.swift rename to swift/ql/integration-tests/posix-only/frontend-invocations/I2.swift diff --git a/swift/integration-tests/posix-only/frontend-invocations/Modules.expected b/swift/ql/integration-tests/posix-only/frontend-invocations/Modules.expected similarity index 100% rename from swift/integration-tests/posix-only/frontend-invocations/Modules.expected rename to swift/ql/integration-tests/posix-only/frontend-invocations/Modules.expected diff --git a/swift/integration-tests/posix-only/frontend-invocations/Modules.ql b/swift/ql/integration-tests/posix-only/frontend-invocations/Modules.ql similarity index 100% rename from swift/integration-tests/posix-only/frontend-invocations/Modules.ql rename to swift/ql/integration-tests/posix-only/frontend-invocations/Modules.ql diff --git a/swift/integration-tests/posix-only/frontend-invocations/build.sh b/swift/ql/integration-tests/posix-only/frontend-invocations/build.sh similarity index 100% rename from swift/integration-tests/posix-only/frontend-invocations/build.sh rename to swift/ql/integration-tests/posix-only/frontend-invocations/build.sh diff --git a/swift/ql/integration-tests/posix-only/frontend-invocations/dir/.empty b/swift/ql/integration-tests/posix-only/frontend-invocations/dir/.empty new file mode 100644 index 00000000000..e69de29bb2d diff --git a/swift/integration-tests/posix-only/frontend-invocations/test.py b/swift/ql/integration-tests/posix-only/frontend-invocations/test.py similarity index 80% rename from swift/integration-tests/posix-only/frontend-invocations/test.py rename to swift/ql/integration-tests/posix-only/frontend-invocations/test.py index 06f07282e2f..cb07988676c 100644 --- a/swift/integration-tests/posix-only/frontend-invocations/test.py +++ b/swift/ql/integration-tests/posix-only/frontend-invocations/test.py @@ -5,7 +5,8 @@ from pathlib import Path run_codeql_database_create([ './build.sh', -], lang='swift') +], lang='swift', +) with open('hashes.expected', 'w') as expected: for f in sorted(Path().glob("*.swiftmodule")): @@ -13,7 +14,7 @@ with open('hashes.expected', 'w') as expected: print(f.name, sha256(module.read()).hexdigest(), file=expected) with open('hashes.actual', 'w') as actual: - hashes = [(s.name, s.resolve().name) for s in Path("db/working/swift-extraction-artifacts/store").iterdir()] + hashes = [(s.name, s.resolve().name) for s in Path("test-db/working/swift-extraction-artifacts/store").iterdir()] hashes.sort() for module, hash in hashes: print(module, hash, file=actual) diff --git a/swift/integration-tests/posix-only/hello-world/Bodies.expected b/swift/ql/integration-tests/posix-only/hello-world/Bodies.expected similarity index 100% rename from swift/integration-tests/posix-only/hello-world/Bodies.expected rename to swift/ql/integration-tests/posix-only/hello-world/Bodies.expected diff --git a/swift/integration-tests/posix-only/hello-world/Bodies.ql b/swift/ql/integration-tests/posix-only/hello-world/Bodies.ql similarity index 100% rename from swift/integration-tests/posix-only/hello-world/Bodies.ql rename to swift/ql/integration-tests/posix-only/hello-world/Bodies.ql diff --git a/swift/integration-tests/posix-only/hello-world/Package.swift b/swift/ql/integration-tests/posix-only/hello-world/Package.swift similarity index 100% rename from swift/integration-tests/posix-only/hello-world/Package.swift rename to swift/ql/integration-tests/posix-only/hello-world/Package.swift diff --git a/swift/integration-tests/posix-only/hello-world/Sources/hello-world/hello_world.swift b/swift/ql/integration-tests/posix-only/hello-world/Sources/hello-world/hello_world.swift similarity index 100% rename from swift/integration-tests/posix-only/hello-world/Sources/hello-world/hello_world.swift rename to swift/ql/integration-tests/posix-only/hello-world/Sources/hello-world/hello_world.swift diff --git a/swift/integration-tests/posix-only/hello-world/test.expected b/swift/ql/integration-tests/posix-only/hello-world/test.expected similarity index 100% rename from swift/integration-tests/posix-only/hello-world/test.expected rename to swift/ql/integration-tests/posix-only/hello-world/test.expected diff --git a/swift/integration-tests/posix-only/hello-world/test.py b/swift/ql/integration-tests/posix-only/hello-world/test.py similarity index 100% rename from swift/integration-tests/posix-only/hello-world/test.py rename to swift/ql/integration-tests/posix-only/hello-world/test.py diff --git a/swift/integration-tests/posix-only/hello-world/test.ql b/swift/ql/integration-tests/posix-only/hello-world/test.ql similarity index 100% rename from swift/integration-tests/posix-only/hello-world/test.ql rename to swift/ql/integration-tests/posix-only/hello-world/test.ql diff --git a/swift/integration-tests/posix-only/linkage-awareness/Bodies.expected b/swift/ql/integration-tests/posix-only/linkage-awareness/Bodies.expected similarity index 100% rename from swift/integration-tests/posix-only/linkage-awareness/Bodies.expected rename to swift/ql/integration-tests/posix-only/linkage-awareness/Bodies.expected diff --git a/swift/integration-tests/posix-only/linkage-awareness/Bodies.ql b/swift/ql/integration-tests/posix-only/linkage-awareness/Bodies.ql similarity index 100% rename from swift/integration-tests/posix-only/linkage-awareness/Bodies.ql rename to swift/ql/integration-tests/posix-only/linkage-awareness/Bodies.ql diff --git a/swift/integration-tests/posix-only/linkage-awareness/Foo1/Package.swift b/swift/ql/integration-tests/posix-only/linkage-awareness/Foo1/Package.swift similarity index 100% rename from swift/integration-tests/posix-only/linkage-awareness/Foo1/Package.swift rename to swift/ql/integration-tests/posix-only/linkage-awareness/Foo1/Package.swift diff --git a/swift/integration-tests/posix-only/linkage-awareness/Foo1/Sources/foo/main.swift b/swift/ql/integration-tests/posix-only/linkage-awareness/Foo1/Sources/foo/main.swift similarity index 100% rename from swift/integration-tests/posix-only/linkage-awareness/Foo1/Sources/foo/main.swift rename to swift/ql/integration-tests/posix-only/linkage-awareness/Foo1/Sources/foo/main.swift diff --git a/swift/integration-tests/posix-only/linkage-awareness/Foo2/Package.swift b/swift/ql/integration-tests/posix-only/linkage-awareness/Foo2/Package.swift similarity index 100% rename from swift/integration-tests/posix-only/linkage-awareness/Foo2/Package.swift rename to swift/ql/integration-tests/posix-only/linkage-awareness/Foo2/Package.swift diff --git a/swift/integration-tests/posix-only/linkage-awareness/Foo2/Sources/foo/main.swift b/swift/ql/integration-tests/posix-only/linkage-awareness/Foo2/Sources/foo/main.swift similarity index 100% rename from swift/integration-tests/posix-only/linkage-awareness/Foo2/Sources/foo/main.swift rename to swift/ql/integration-tests/posix-only/linkage-awareness/Foo2/Sources/foo/main.swift diff --git a/swift/integration-tests/posix-only/linkage-awareness/build.sh b/swift/ql/integration-tests/posix-only/linkage-awareness/build.sh similarity index 100% rename from swift/integration-tests/posix-only/linkage-awareness/build.sh rename to swift/ql/integration-tests/posix-only/linkage-awareness/build.sh diff --git a/swift/integration-tests/posix-only/linkage-awareness/test.py b/swift/ql/integration-tests/posix-only/linkage-awareness/test.py similarity index 100% rename from swift/integration-tests/posix-only/linkage-awareness/test.py rename to swift/ql/integration-tests/posix-only/linkage-awareness/test.py diff --git a/swift/integration-tests/posix-only/partial-modules/A/Package.swift b/swift/ql/integration-tests/posix-only/partial-modules/A/Package.swift similarity index 100% rename from swift/integration-tests/posix-only/partial-modules/A/Package.swift rename to swift/ql/integration-tests/posix-only/partial-modules/A/Package.swift diff --git a/swift/integration-tests/posix-only/partial-modules/A/Sources/A/A.swift b/swift/ql/integration-tests/posix-only/partial-modules/A/Sources/A/A.swift similarity index 100% rename from swift/integration-tests/posix-only/partial-modules/A/Sources/A/A.swift rename to swift/ql/integration-tests/posix-only/partial-modules/A/Sources/A/A.swift diff --git a/swift/integration-tests/posix-only/partial-modules/A/Sources/A/Asup.swift b/swift/ql/integration-tests/posix-only/partial-modules/A/Sources/A/Asup.swift similarity index 100% rename from swift/integration-tests/posix-only/partial-modules/A/Sources/A/Asup.swift rename to swift/ql/integration-tests/posix-only/partial-modules/A/Sources/A/Asup.swift diff --git a/swift/integration-tests/posix-only/partial-modules/B/Package.swift b/swift/ql/integration-tests/posix-only/partial-modules/B/Package.swift similarity index 100% rename from swift/integration-tests/posix-only/partial-modules/B/Package.swift rename to swift/ql/integration-tests/posix-only/partial-modules/B/Package.swift diff --git a/swift/integration-tests/posix-only/partial-modules/B/Sources/B/B.swift b/swift/ql/integration-tests/posix-only/partial-modules/B/Sources/B/B.swift similarity index 100% rename from swift/integration-tests/posix-only/partial-modules/B/Sources/B/B.swift rename to swift/ql/integration-tests/posix-only/partial-modules/B/Sources/B/B.swift diff --git a/swift/integration-tests/posix-only/partial-modules/B/Sources/B/Bsup.swift b/swift/ql/integration-tests/posix-only/partial-modules/B/Sources/B/Bsup.swift similarity index 100% rename from swift/integration-tests/posix-only/partial-modules/B/Sources/B/Bsup.swift rename to swift/ql/integration-tests/posix-only/partial-modules/B/Sources/B/Bsup.swift diff --git a/swift/integration-tests/posix-only/partial-modules/Modules.expected b/swift/ql/integration-tests/posix-only/partial-modules/Modules.expected similarity index 100% rename from swift/integration-tests/posix-only/partial-modules/Modules.expected rename to swift/ql/integration-tests/posix-only/partial-modules/Modules.expected diff --git a/swift/integration-tests/posix-only/partial-modules/Modules.ql b/swift/ql/integration-tests/posix-only/partial-modules/Modules.ql similarity index 100% rename from swift/integration-tests/posix-only/partial-modules/Modules.ql rename to swift/ql/integration-tests/posix-only/partial-modules/Modules.ql diff --git a/swift/integration-tests/posix-only/partial-modules/Package.swift b/swift/ql/integration-tests/posix-only/partial-modules/Package.swift similarity index 100% rename from swift/integration-tests/posix-only/partial-modules/Package.swift rename to swift/ql/integration-tests/posix-only/partial-modules/Package.swift diff --git a/swift/integration-tests/posix-only/partial-modules/Sources/partial-modules/partial_modules.swift b/swift/ql/integration-tests/posix-only/partial-modules/Sources/partial-modules/partial_modules.swift similarity index 100% rename from swift/integration-tests/posix-only/partial-modules/Sources/partial-modules/partial_modules.swift rename to swift/ql/integration-tests/posix-only/partial-modules/Sources/partial-modules/partial_modules.swift diff --git a/swift/ql/integration-tests/posix-only/partial-modules/Unknown.expected b/swift/ql/integration-tests/posix-only/partial-modules/Unknown.expected new file mode 100644 index 00000000000..e69de29bb2d diff --git a/swift/integration-tests/posix-only/partial-modules/Unknown.ql b/swift/ql/integration-tests/posix-only/partial-modules/Unknown.ql similarity index 100% rename from swift/integration-tests/posix-only/partial-modules/Unknown.ql rename to swift/ql/integration-tests/posix-only/partial-modules/Unknown.ql diff --git a/swift/integration-tests/posix-only/partial-modules/test.py b/swift/ql/integration-tests/posix-only/partial-modules/test.py similarity index 100% rename from swift/integration-tests/posix-only/partial-modules/test.py rename to swift/ql/integration-tests/posix-only/partial-modules/test.py diff --git a/swift/integration-tests/posix-only/symlinks/.gitignore b/swift/ql/integration-tests/posix-only/symlinks/.gitignore similarity index 100% rename from swift/integration-tests/posix-only/symlinks/.gitignore rename to swift/ql/integration-tests/posix-only/symlinks/.gitignore diff --git a/swift/integration-tests/posix-only/symlinks/Files.expected b/swift/ql/integration-tests/posix-only/symlinks/Files.expected similarity index 100% rename from swift/integration-tests/posix-only/symlinks/Files.expected rename to swift/ql/integration-tests/posix-only/symlinks/Files.expected diff --git a/swift/integration-tests/posix-only/symlinks/Files.ql b/swift/ql/integration-tests/posix-only/symlinks/Files.ql similarity index 100% rename from swift/integration-tests/posix-only/symlinks/Files.ql rename to swift/ql/integration-tests/posix-only/symlinks/Files.ql diff --git a/swift/integration-tests/posix-only/symlinks/main.swift b/swift/ql/integration-tests/posix-only/symlinks/main.swift similarity index 100% rename from swift/integration-tests/posix-only/symlinks/main.swift rename to swift/ql/integration-tests/posix-only/symlinks/main.swift diff --git a/swift/integration-tests/posix-only/symlinks/preserve/Package.swift b/swift/ql/integration-tests/posix-only/symlinks/preserve/Package.swift similarity index 100% rename from swift/integration-tests/posix-only/symlinks/preserve/Package.swift rename to swift/ql/integration-tests/posix-only/symlinks/preserve/Package.swift diff --git a/swift/ql/integration-tests/posix-only/symlinks/preserve/Sources/.gitkeep b/swift/ql/integration-tests/posix-only/symlinks/preserve/Sources/.gitkeep new file mode 100644 index 00000000000..e69de29bb2d diff --git a/swift/integration-tests/posix-only/symlinks/resolve/Package.swift b/swift/ql/integration-tests/posix-only/symlinks/resolve/Package.swift similarity index 100% rename from swift/integration-tests/posix-only/symlinks/resolve/Package.swift rename to swift/ql/integration-tests/posix-only/symlinks/resolve/Package.swift diff --git a/swift/ql/integration-tests/posix-only/symlinks/resolve/Sources/.gitkeep b/swift/ql/integration-tests/posix-only/symlinks/resolve/Sources/.gitkeep new file mode 100644 index 00000000000..e69de29bb2d diff --git a/swift/integration-tests/posix-only/symlinks/test.py b/swift/ql/integration-tests/posix-only/symlinks/test.py similarity index 100% rename from swift/integration-tests/posix-only/symlinks/test.py rename to swift/ql/integration-tests/posix-only/symlinks/test.py diff --git a/swift/ql/integration-tests/qlpack.yml b/swift/ql/integration-tests/qlpack.yml new file mode 100644 index 00000000000..c9b567bebda --- /dev/null +++ b/swift/ql/integration-tests/qlpack.yml @@ -0,0 +1,4 @@ +dependencies: + codeql/swift-all: '*' + codeql/swift-queries: '*' +warnOnImplicitThis: true diff --git a/swift/integration-tests/runner.py b/swift/ql/integration-tests/runner.py similarity index 93% rename from swift/integration-tests/runner.py rename to swift/ql/integration-tests/runner.py index bf65781cdb2..156ce6c425c 100755 --- a/swift/integration-tests/runner.py +++ b/swift/ql/integration-tests/runner.py @@ -17,6 +17,7 @@ import shutil import platform this_dir = pathlib.Path(__file__).parent.resolve() +codeql_root = this_dir.parents[2] def options(): p = argparse.ArgumentParser() @@ -30,7 +31,7 @@ def options(): def execute_test(path): - shutil.rmtree(path.parent / "db", ignore_errors=True) + shutil.rmtree(path.parent / "test-db", ignore_errors=True) return subprocess.run([sys.executable, "-u", path.name], cwd=path.parent).returncode == 0 def skipped(test): @@ -51,18 +52,18 @@ def main(opts): return False os.environ["PYTHONPATH"] = str(this_dir) + os.environ["CODEQL_CONFIG_FILE"] = "/dev/null" failed_db_creation = [] succesful_db_creation = [] for t in tests: (succesful_db_creation if execute_test(t) else failed_db_creation).append(t) if succesful_db_creation: - codeql_root = this_dir.parents[1] cmd = [ "codeql", "test", "run", f"--additional-packs={codeql_root}", "--keep-databases", - "--dataset=db/db-swift", + "--dataset=test-db/db-swift", f"--threads={opts.threads}", ] if opts.check_databases: diff --git a/swift/ql/lib/CHANGELOG.md b/swift/ql/lib/CHANGELOG.md index e88cd0259cc..4bc92a92c82 100644 --- a/swift/ql/lib/CHANGELOG.md +++ b/swift/ql/lib/CHANGELOG.md @@ -1,3 +1,24 @@ +## 0.3.13 + +### Major Analysis Improvements + +* Upgraded to Swift 5.10 +* New AST node is extracted: `ThenStmt` + +## 0.3.12 + +No user-facing changes. + +## 0.3.11 + +No user-facing changes. + +## 0.3.10 + +### Bug Fixes + +* Fixed an issue where `TypeDecl.getFullName` would get stuck in an loop and fail when minor database inconsistencies are present. + ## 0.3.9 ### Minor Analysis Improvements diff --git a/swift/ql/lib/change-notes/2024-02-22-extension-patch.md b/swift/ql/lib/change-notes/released/0.3.10.md similarity index 83% rename from swift/ql/lib/change-notes/2024-02-22-extension-patch.md rename to swift/ql/lib/change-notes/released/0.3.10.md index 7bd78f3b785..9d6286ff58a 100644 --- a/swift/ql/lib/change-notes/2024-02-22-extension-patch.md +++ b/swift/ql/lib/change-notes/released/0.3.10.md @@ -1,4 +1,5 @@ ---- -category: fix ---- +## 0.3.10 + +### Bug Fixes + * Fixed an issue where `TypeDecl.getFullName` would get stuck in an loop and fail when minor database inconsistencies are present. diff --git a/swift/ql/lib/change-notes/released/0.3.11.md b/swift/ql/lib/change-notes/released/0.3.11.md new file mode 100644 index 00000000000..10d35144a4a --- /dev/null +++ b/swift/ql/lib/change-notes/released/0.3.11.md @@ -0,0 +1,3 @@ +## 0.3.11 + +No user-facing changes. diff --git a/swift/ql/lib/change-notes/released/0.3.12.md b/swift/ql/lib/change-notes/released/0.3.12.md new file mode 100644 index 00000000000..8ccc61b9812 --- /dev/null +++ b/swift/ql/lib/change-notes/released/0.3.12.md @@ -0,0 +1,3 @@ +## 0.3.12 + +No user-facing changes. diff --git a/swift/ql/lib/change-notes/released/0.3.13.md b/swift/ql/lib/change-notes/released/0.3.13.md new file mode 100644 index 00000000000..c1639172fd4 --- /dev/null +++ b/swift/ql/lib/change-notes/released/0.3.13.md @@ -0,0 +1,6 @@ +## 0.3.13 + +### Major Analysis Improvements + +* Upgraded to Swift 5.10 +* New AST node is extracted: `ThenStmt` diff --git a/swift/ql/lib/codeql-pack.release.yml b/swift/ql/lib/codeql-pack.release.yml index 3fa5180bcb4..8791b4867d1 100644 --- a/swift/ql/lib/codeql-pack.release.yml +++ b/swift/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.3.9 +lastReleaseVersion: 0.3.13 diff --git a/swift/ql/lib/codeql/swift/controlflow/internal/ControlFlowGraphImpl.qll b/swift/ql/lib/codeql/swift/controlflow/internal/ControlFlowGraphImpl.qll index 705df1ed2f5..f785bd0f278 100644 --- a/swift/ql/lib/codeql/swift/controlflow/internal/ControlFlowGraphImpl.qll +++ b/swift/ql/lib/codeql/swift/controlflow/internal/ControlFlowGraphImpl.qll @@ -255,6 +255,15 @@ module Stmts { } } + private class ThenStmtTree extends AstStandardPostOrderTree { + override ThenStmt ast; + + final override ControlFlowElement getChildNode(int i) { + i = 0 and + result.asAstNode() = ast.getResult() + } + } + private class FailTree extends AstLeafTree { override FailStmt ast; } diff --git a/swift/ql/lib/codeql/swift/dataflow/ExternalFlow.qll b/swift/ql/lib/codeql/swift/dataflow/ExternalFlow.qll index 35515cb548c..9750b05fef1 100644 --- a/swift/ql/lib/codeql/swift/dataflow/ExternalFlow.qll +++ b/swift/ql/lib/codeql/swift/dataflow/ExternalFlow.qll @@ -25,11 +25,7 @@ * types can be short names or fully qualified names (mixing these two options * is not allowed within a single signature). * 6. The `ext` column specifies additional API-graph-like edges. Currently - * there are only two valid values: "" and "Annotated". The empty string has no - * effect. "Annotated" applies if `name` and `signature` were left blank and - * acts by selecting an element that is annotated by the annotation type - * selected by the first 4 columns. This can be another member such as a field - * or method, or a parameter. + * there is only one valid value: "". * 7. The `input` column specifies how data enters the element selected by the * first 6 columns, and the `output` column specifies how data leaves the * element selected by the first 6 columns. An `input` can be either "", @@ -44,15 +40,13 @@ * * An `output` can be either "", "Argument[n]", "Argument[n1..n2]", "Parameter", * "Parameter[n]", "Parameter[n1..n2]", or "ReturnValue": - * - "": Selects a read of a selected field, or a selected parameter. + * - "": Selects a read of a selected field. * - "Argument[n]": Selects the post-update value of an argument in a call to the * selected element. That is, the value of the argument after the call returns. * The arguments are zero-indexed, and `-1` specifies the qualifier. * - "Argument[n1..n2]": Similar to "Argument[n]" but select any argument in * the given range. The range is inclusive at both ends. * - "Parameter": Selects the value of a parameter of the selected element. - * "Parameter" is also allowed in case the selected element is already a - * parameter itself. * - "Parameter[n]": Similar to "Parameter" but restricted to a specific * numbered parameter (zero-indexed, and `-1` specifies the value of `this`). * - "Parameter[n1..n2]": Similar to "Parameter[n]" but selects any parameter diff --git a/swift/ql/lib/codeql/swift/dataflow/internal/FlowSummaryImpl.qll b/swift/ql/lib/codeql/swift/dataflow/internal/FlowSummaryImpl.qll index 53f51433dac..54c8370ed1d 100644 --- a/swift/ql/lib/codeql/swift/dataflow/internal/FlowSummaryImpl.qll +++ b/swift/ql/lib/codeql/swift/dataflow/internal/FlowSummaryImpl.qll @@ -119,11 +119,13 @@ module SourceSinkInterpretationInput implements * Holds if an external source specification exists for `e` with output specification * `output`, kind `kind`, and provenance `provenance`. */ - predicate sourceElement(SourceOrSinkElement e, string output, string kind) { + predicate sourceElement( + SourceOrSinkElement e, string output, string kind, Public::Provenance provenance + ) { exists( string namespace, string type, boolean subtypes, string name, string signature, string ext | - sourceModel(namespace, type, subtypes, name, signature, ext, output, kind, _) and + sourceModel(namespace, type, subtypes, name, signature, ext, output, kind, provenance) and e = interpretElement(namespace, type, subtypes, name, signature, ext) ) } @@ -132,11 +134,13 @@ module SourceSinkInterpretationInput implements * Holds if an external sink specification exists for `e` with input specification * `input`, kind `kind` and provenance `provenance`. */ - predicate sinkElement(SourceOrSinkElement e, string input, string kind) { + predicate sinkElement( + SourceOrSinkElement e, string input, string kind, Public::Provenance provenance + ) { exists( string package, string type, boolean subtypes, string name, string signature, string ext | - sinkModel(package, type, subtypes, name, signature, ext, input, kind, _) and + sinkModel(package, type, subtypes, name, signature, ext, input, kind, provenance) and e = interpretElement(package, type, subtypes, name, signature, ext) ) } diff --git a/swift/ql/lib/codeql/swift/elements.qll b/swift/ql/lib/codeql/swift/elements.qll index 32128d83e3c..e6e505e5da6 100644 --- a/swift/ql/lib/codeql/swift/elements.qll +++ b/swift/ql/lib/codeql/swift/elements.qll @@ -227,6 +227,7 @@ import codeql.swift.elements.stmt.ReturnStmt import codeql.swift.elements.stmt.Stmt import codeql.swift.elements.stmt.StmtCondition import codeql.swift.elements.stmt.SwitchStmt +import codeql.swift.elements.stmt.ThenStmt import codeql.swift.elements.stmt.ThrowStmt import codeql.swift.elements.stmt.WhileStmt import codeql.swift.elements.stmt.YieldStmt diff --git a/swift/ql/lib/codeql/swift/elements/stmt/ThenStmt.qll b/swift/ql/lib/codeql/swift/elements/stmt/ThenStmt.qll new file mode 100644 index 00000000000..49291d43b8c --- /dev/null +++ b/swift/ql/lib/codeql/swift/elements/stmt/ThenStmt.qll @@ -0,0 +1,19 @@ +// generated by codegen/codegen.py, remove this comment if you wish to edit this file +/** + * This module provides a hand-modifiable wrapper around the generated class `ThenStmt`. + */ + +private import codeql.swift.generated.stmt.ThenStmt + +/** + * A statement implicitly wrapping values to be used in branches of if/switch expressions. For example in: + * ``` + * let rank = switch value { + * case 0..<0x80: 1 + * case 0x80..<0x0800: 2 + * default: 3 + * } + * ``` + * the literal expressions `1`, `2` and `3` are wrapped in `ThenStmt`. + */ +class ThenStmt extends Generated::ThenStmt { } diff --git a/swift/ql/lib/codeql/swift/elements/stmt/ThenStmtConstructor.qll b/swift/ql/lib/codeql/swift/elements/stmt/ThenStmtConstructor.qll new file mode 100644 index 00000000000..dbedcd7c2ca --- /dev/null +++ b/swift/ql/lib/codeql/swift/elements/stmt/ThenStmtConstructor.qll @@ -0,0 +1,14 @@ +// generated by codegen/codegen.py, remove this comment if you wish to edit this file +/** + * This module defines the hook used internally to tweak the characteristic predicate of + * `ThenStmt` synthesized instances. + * INTERNAL: Do not use. + */ + +private import codeql.swift.generated.Raw + +/** + * The characteristic predicate of `ThenStmt` synthesized instances. + * INTERNAL: Do not use. + */ +predicate constructThenStmt(Raw::ThenStmt id) { any() } diff --git a/swift/ql/lib/codeql/swift/generated/ParentChild.qll b/swift/ql/lib/codeql/swift/generated/ParentChild.qll index 2dc4a8f9d47..1578315af7d 100644 --- a/swift/ql/lib/codeql/swift/generated/ParentChild.qll +++ b/swift/ql/lib/codeql/swift/generated/ParentChild.qll @@ -3780,6 +3780,22 @@ private module Impl { ) } + private Element getImmediateChildOfThenStmt(ThenStmt e, int index, string partialPredicateCall) { + exists(int b, int bStmt, int n, int nResult | + b = 0 and + bStmt = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfStmt(e, i, _)) | i) and + n = bStmt and + nResult = n + 1 and + ( + none() + or + result = getImmediateChildOfStmt(e, index - b, partialPredicateCall) + or + index = n and result = e.getImmediateResult() and partialPredicateCall = "Result()" + ) + ) + } + private Element getImmediateChildOfThrowStmt(ThrowStmt e, int index, string partialPredicateCall) { exists(int b, int bStmt, int n, int nSubExpr | b = 0 and @@ -5466,6 +5482,8 @@ private module Impl { or result = getImmediateChildOfReturnStmt(e, index, partialAccessor) or + result = getImmediateChildOfThenStmt(e, index, partialAccessor) + or result = getImmediateChildOfThrowStmt(e, index, partialAccessor) or result = getImmediateChildOfYieldStmt(e, index, partialAccessor) diff --git a/swift/ql/lib/codeql/swift/generated/Raw.qll b/swift/ql/lib/codeql/swift/generated/Raw.qll index 01f1f7e3179..69168ddd0a7 100644 --- a/swift/ql/lib/codeql/swift/generated/Raw.qll +++ b/swift/ql/lib/codeql/swift/generated/Raw.qll @@ -2923,6 +2923,27 @@ module Raw { Expr getResult() { return_stmt_results(this, result) } } + /** + * INTERNAL: Do not use. + * A statement implicitly wrapping values to be used in branches of if/switch expressions. For example in: + * ``` + * let rank = switch value { + * case 0..<0x80: 1 + * case 0x80..<0x0800: 2 + * default: 3 + * } + * ``` + * the literal expressions `1`, `2` and `3` are wrapped in `ThenStmt`. + */ + class ThenStmt extends @then_stmt, Stmt { + override string toString() { result = "ThenStmt" } + + /** + * Gets the result of this then statement. + */ + Expr getResult() { then_stmts(this, result) } + } + /** * INTERNAL: Do not use. */ diff --git a/swift/ql/lib/codeql/swift/generated/Synth.qll b/swift/ql/lib/codeql/swift/generated/Synth.qll index d8b5316ad92..778eb6462cf 100644 --- a/swift/ql/lib/codeql/swift/generated/Synth.qll +++ b/swift/ql/lib/codeql/swift/generated/Synth.qll @@ -823,6 +823,10 @@ module Synth { * INTERNAL: Do not use. */ TSwitchStmt(Raw::SwitchStmt id) { constructSwitchStmt(id) } or + /** + * INTERNAL: Do not use. + */ + TThenStmt(Raw::ThenStmt id) { constructThenStmt(id) } or /** * INTERNAL: Do not use. */ @@ -1311,7 +1315,7 @@ module Synth { class TStmt = TBraceStmt or TBreakStmt or TCaseStmt or TContinueStmt or TDeferStmt or TDiscardStmt or TFailStmt or TFallthroughStmt or TLabeledStmt or TPoundAssertStmt or TReturnStmt or - TThrowStmt or TYieldStmt; + TThenStmt or TThrowStmt or TYieldStmt; /** * INTERNAL: Do not use. @@ -2891,6 +2895,13 @@ module Synth { cached TSwitchStmt convertSwitchStmtFromRaw(Raw::Element e) { result = TSwitchStmt(e) } + /** + * INTERNAL: Do not use. + * Converts a raw element to a synthesized `TThenStmt`, if possible. + */ + cached + TThenStmt convertThenStmtFromRaw(Raw::Element e) { result = TThenStmt(e) } + /** * INTERNAL: Do not use. * Converts a raw element to a synthesized `TThrowStmt`, if possible. @@ -4116,6 +4127,8 @@ module Synth { or result = convertReturnStmtFromRaw(e) or + result = convertThenStmtFromRaw(e) + or result = convertThrowStmtFromRaw(e) or result = convertYieldStmtFromRaw(e) @@ -5854,6 +5867,13 @@ module Synth { cached Raw::Element convertSwitchStmtToRaw(TSwitchStmt e) { e = TSwitchStmt(result) } + /** + * INTERNAL: Do not use. + * Converts a synthesized `TThenStmt` to a raw DB element, if possible. + */ + cached + Raw::Element convertThenStmtToRaw(TThenStmt e) { e = TThenStmt(result) } + /** * INTERNAL: Do not use. * Converts a synthesized `TThrowStmt` to a raw DB element, if possible. @@ -7079,6 +7099,8 @@ module Synth { or result = convertReturnStmtToRaw(e) or + result = convertThenStmtToRaw(e) + or result = convertThrowStmtToRaw(e) or result = convertYieldStmtToRaw(e) diff --git a/swift/ql/lib/codeql/swift/generated/SynthConstructors.qll b/swift/ql/lib/codeql/swift/generated/SynthConstructors.qll index 8ce0d1ca540..28bec5d27e2 100644 --- a/swift/ql/lib/codeql/swift/generated/SynthConstructors.qll +++ b/swift/ql/lib/codeql/swift/generated/SynthConstructors.qll @@ -190,6 +190,7 @@ import codeql.swift.elements.stmt.RepeatWhileStmtConstructor import codeql.swift.elements.stmt.ReturnStmtConstructor import codeql.swift.elements.stmt.StmtConditionConstructor import codeql.swift.elements.stmt.SwitchStmtConstructor +import codeql.swift.elements.stmt.ThenStmtConstructor import codeql.swift.elements.stmt.ThrowStmtConstructor import codeql.swift.elements.stmt.WhileStmtConstructor import codeql.swift.elements.stmt.YieldStmtConstructor diff --git a/swift/ql/lib/codeql/swift/generated/stmt/ThenStmt.qll b/swift/ql/lib/codeql/swift/generated/stmt/ThenStmt.qll new file mode 100644 index 00000000000..8e00c4cfe88 --- /dev/null +++ b/swift/ql/lib/codeql/swift/generated/stmt/ThenStmt.qll @@ -0,0 +1,54 @@ +// generated by codegen/codegen.py +/** + * This module provides the generated definition of `ThenStmt`. + * INTERNAL: Do not import directly. + */ + +private import codeql.swift.generated.Synth +private import codeql.swift.generated.Raw +import codeql.swift.elements.expr.Expr +import codeql.swift.elements.stmt.Stmt + +/** + * INTERNAL: This module contains the fully generated definition of `ThenStmt` and should not + * be referenced directly. + */ +module Generated { + /** + * A statement implicitly wrapping values to be used in branches of if/switch expressions. For example in: + * ``` + * let rank = switch value { + * case 0..<0x80: 1 + * case 0x80..<0x0800: 2 + * default: 3 + * } + * ``` + * the literal expressions `1`, `2` and `3` are wrapped in `ThenStmt`. + * INTERNAL: Do not reference the `Generated::ThenStmt` class directly. + * Use the subclass `ThenStmt`, where the following predicates are available. + */ + class ThenStmt extends Synth::TThenStmt, Stmt { + override string getAPrimaryQlClass() { result = "ThenStmt" } + + /** + * Gets the result of this then statement. + * + * This includes nodes from the "hidden" AST. It can be overridden in subclasses to change the + * behavior of both the `Immediate` and non-`Immediate` versions. + */ + Expr getImmediateResult() { + result = + Synth::convertExprFromRaw(Synth::convertThenStmtToRaw(this).(Raw::ThenStmt).getResult()) + } + + /** + * Gets the result of this then statement. + */ + final Expr getResult() { + exists(Expr immediate | + immediate = this.getImmediateResult() and + result = immediate.resolve() + ) + } + } +} diff --git a/swift/ql/lib/qlpack.yml b/swift/ql/lib/qlpack.yml index a37a4cb3d58..ff871c756bf 100644 --- a/swift/ql/lib/qlpack.yml +++ b/swift/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/swift-all -version: 0.3.10-dev +version: 0.3.14-dev groups: swift extractor: swift dbscheme: swift.dbscheme diff --git a/swift/ql/lib/swift.dbscheme b/swift/ql/lib/swift.dbscheme index 60be249ad16..15a630f68e1 100644 --- a/swift/ql/lib/swift.dbscheme +++ b/swift/ql/lib/swift.dbscheme @@ -1846,6 +1846,7 @@ condition_element_availabilities( //dir=stmt | @labeled_stmt | @pound_assert_stmt | @return_stmt +| @then_stmt | @throw_stmt | @yield_stmt ; @@ -1974,6 +1975,11 @@ return_stmt_results( //dir=stmt int result: @expr_or_none ref ); +then_stmts( //dir=stmt + unique int id: @then_stmt, + int result: @expr_or_none ref +); + throw_stmts( //dir=stmt unique int id: @throw_stmt, int sub_expr: @expr_or_none ref diff --git a/swift/ql/lib/upgrades/60be249ad164f6e4b43c203323f1b3956dc97c2f/old.dbscheme b/swift/ql/lib/upgrades/60be249ad164f6e4b43c203323f1b3956dc97c2f/old.dbscheme new file mode 100644 index 00000000000..60be249ad16 --- /dev/null +++ b/swift/ql/lib/upgrades/60be249ad164f6e4b43c203323f1b3956dc97c2f/old.dbscheme @@ -0,0 +1,2780 @@ +// generated by codegen/codegen.py + +// from prefix.dbscheme +/** + * The source location of the snapshot. + */ +sourceLocationPrefix( + string prefix: string ref +); + + +// from schema.py + +@element = + @callable +| @file +| @generic_context +| @locatable +| @location +| @type +; + +#keyset[id] +element_is_unknown( + int id: @element ref +); + +@callable = + @closure_expr +| @function +; + +#keyset[id] +callable_names( + int id: @callable ref, + string name: string ref +); + +#keyset[id] +callable_self_params( + int id: @callable ref, + int self_param: @param_decl_or_none ref +); + +#keyset[id, index] +callable_params( + int id: @callable ref, + int index: int ref, + int param: @param_decl_or_none ref +); + +#keyset[id] +callable_bodies( + int id: @callable ref, + int body: @brace_stmt_or_none ref +); + +#keyset[id, index] +callable_captures( + int id: @callable ref, + int index: int ref, + int capture: @captured_decl_or_none ref +); + +@file = + @db_file +; + +#keyset[id] +files( + int id: @file ref, + string name: string ref +); + +#keyset[id] +file_is_successfully_extracted( + int id: @file ref +); + +@locatable = + @argument +| @ast_node +| @comment +| @diagnostics +| @error_element +; + +#keyset[id] +locatable_locations( + int id: @locatable ref, + int location: @location_or_none ref +); + +@location = + @db_location +; + +#keyset[id] +locations( + int id: @location ref, + int file: @file_or_none ref, + int start_line: int ref, + int start_column: int ref, + int end_line: int ref, + int end_column: int ref +); + +@ast_node = + @availability_info +| @availability_spec +| @case_label_item +| @condition_element +| @decl +| @expr +| @key_path_component +| @macro_role +| @pattern +| @stmt +| @stmt_condition +| @type_repr +; + +comments( + unique int id: @comment, + string text: string ref +); + +db_files( + unique int id: @db_file +); + +db_locations( + unique int id: @db_location +); + +diagnostics( + unique int id: @diagnostics, + string text: string ref, + int kind: int ref +); + +@error_element = + @error_expr +| @error_type +| @overloaded_decl_ref_expr +| @unresolved_decl_ref_expr +| @unresolved_dot_expr +| @unresolved_member_chain_result_expr +| @unresolved_member_expr +| @unresolved_pattern_expr +| @unresolved_specialize_expr +| @unresolved_type +| @unresolved_type_conversion_expr +| @unspecified_element +; + +availability_infos( + unique int id: @availability_info +); + +#keyset[id] +availability_info_is_unavailable( + int id: @availability_info ref +); + +#keyset[id, index] +availability_info_specs( + int id: @availability_info ref, + int index: int ref, + int spec: @availability_spec_or_none ref +); + +@availability_spec = + @other_availability_spec +| @platform_version_availability_spec +; + +key_path_components( + unique int id: @key_path_component, + int kind: int ref, + int component_type: @type_or_none ref +); + +#keyset[id, index] +key_path_component_subscript_arguments( + int id: @key_path_component ref, + int index: int ref, + int subscript_argument: @argument_or_none ref +); + +#keyset[id] +key_path_component_tuple_indices( + int id: @key_path_component ref, + int tuple_index: int ref +); + +#keyset[id] +key_path_component_decl_refs( + int id: @key_path_component ref, + int decl_ref: @value_decl_or_none ref +); + +macro_roles( + unique int id: @macro_role, + int kind: int ref, + int macro_syntax: int ref +); + +#keyset[id, index] +macro_role_conformances( + int id: @macro_role ref, + int index: int ref, + int conformance: @type_expr_or_none ref +); + +#keyset[id, index] +macro_role_names( + int id: @macro_role ref, + int index: int ref, + string name: string ref +); + +unspecified_elements( + unique int id: @unspecified_element, + string property: string ref, + string error: string ref +); + +#keyset[id] +unspecified_element_parents( + int id: @unspecified_element ref, + int parent: @element ref +); + +#keyset[id] +unspecified_element_indices( + int id: @unspecified_element ref, + int index: int ref +); + +#keyset[id, index] +unspecified_element_children( + int id: @unspecified_element ref, + int index: int ref, + int child: @ast_node_or_none ref +); + +other_availability_specs( + unique int id: @other_availability_spec +); + +platform_version_availability_specs( + unique int id: @platform_version_availability_spec, + string platform: string ref, + string version: string ref +); + +@decl = + @captured_decl +| @enum_case_decl +| @extension_decl +| @if_config_decl +| @import_decl +| @missing_member_decl +| @operator_decl +| @pattern_binding_decl +| @pound_diagnostic_decl +| @precedence_group_decl +| @top_level_code_decl +| @value_decl +; + +#keyset[id] +decls( //dir=decl + int id: @decl ref, + int module: @module_decl_or_none ref +); + +#keyset[id, index] +decl_members( //dir=decl + int id: @decl ref, + int index: int ref, + int member: @decl_or_none ref +); + +@generic_context = + @extension_decl +| @function +| @generic_type_decl +| @macro_decl +| @subscript_decl +; + +#keyset[id, index] +generic_context_generic_type_params( //dir=decl + int id: @generic_context ref, + int index: int ref, + int generic_type_param: @generic_type_param_decl_or_none ref +); + +captured_decls( //dir=decl + unique int id: @captured_decl, + int decl: @value_decl_or_none ref +); + +#keyset[id] +captured_decl_is_direct( //dir=decl + int id: @captured_decl ref +); + +#keyset[id] +captured_decl_is_escaping( //dir=decl + int id: @captured_decl ref +); + +enum_case_decls( //dir=decl + unique int id: @enum_case_decl +); + +#keyset[id, index] +enum_case_decl_elements( //dir=decl + int id: @enum_case_decl ref, + int index: int ref, + int element: @enum_element_decl_or_none ref +); + +extension_decls( //dir=decl + unique int id: @extension_decl, + int extended_type_decl: @nominal_type_decl_or_none ref +); + +#keyset[id, index] +extension_decl_protocols( //dir=decl + int id: @extension_decl ref, + int index: int ref, + int protocol: @protocol_decl_or_none ref +); + +if_config_decls( //dir=decl + unique int id: @if_config_decl +); + +#keyset[id, index] +if_config_decl_active_elements( //dir=decl + int id: @if_config_decl ref, + int index: int ref, + int active_element: @ast_node_or_none ref +); + +import_decls( //dir=decl + unique int id: @import_decl +); + +#keyset[id] +import_decl_is_exported( //dir=decl + int id: @import_decl ref +); + +#keyset[id] +import_decl_imported_modules( //dir=decl + int id: @import_decl ref, + int imported_module: @module_decl_or_none ref +); + +#keyset[id, index] +import_decl_declarations( //dir=decl + int id: @import_decl ref, + int index: int ref, + int declaration: @value_decl_or_none ref +); + +missing_member_decls( //dir=decl + unique int id: @missing_member_decl, + string name: string ref +); + +@operator_decl = + @infix_operator_decl +| @postfix_operator_decl +| @prefix_operator_decl +; + +#keyset[id] +operator_decls( //dir=decl + int id: @operator_decl ref, + string name: string ref +); + +pattern_binding_decls( //dir=decl + unique int id: @pattern_binding_decl +); + +#keyset[id, index] +pattern_binding_decl_inits( //dir=decl + int id: @pattern_binding_decl ref, + int index: int ref, + int init: @expr_or_none ref +); + +#keyset[id, index] +pattern_binding_decl_patterns( //dir=decl + int id: @pattern_binding_decl ref, + int index: int ref, + int pattern: @pattern_or_none ref +); + +pound_diagnostic_decls( //dir=decl + unique int id: @pound_diagnostic_decl, + int kind: int ref, + int message: @string_literal_expr_or_none ref +); + +precedence_group_decls( //dir=decl + unique int id: @precedence_group_decl +); + +top_level_code_decls( //dir=decl + unique int id: @top_level_code_decl, + int body: @brace_stmt_or_none ref +); + +@value_decl = + @abstract_storage_decl +| @enum_element_decl +| @function +| @macro_decl +| @type_decl +; + +#keyset[id] +value_decls( //dir=decl + int id: @value_decl ref, + int interface_type: @type_or_none ref +); + +@abstract_storage_decl = + @subscript_decl +| @var_decl +; + +#keyset[id, index] +abstract_storage_decl_accessors( //dir=decl + int id: @abstract_storage_decl ref, + int index: int ref, + int accessor: @accessor_or_none ref +); + +enum_element_decls( //dir=decl + unique int id: @enum_element_decl, + string name: string ref +); + +#keyset[id, index] +enum_element_decl_params( //dir=decl + int id: @enum_element_decl ref, + int index: int ref, + int param: @param_decl_or_none ref +); + +@function = + @accessor_or_named_function +| @deinitializer +| @initializer +; + +infix_operator_decls( //dir=decl + unique int id: @infix_operator_decl +); + +#keyset[id] +infix_operator_decl_precedence_groups( //dir=decl + int id: @infix_operator_decl ref, + int precedence_group: @precedence_group_decl_or_none ref +); + +macro_decls( //dir=decl + unique int id: @macro_decl, + string name: string ref +); + +#keyset[id, index] +macro_decl_parameters( //dir=decl + int id: @macro_decl ref, + int index: int ref, + int parameter: @param_decl_or_none ref +); + +#keyset[id, index] +macro_decl_roles( //dir=decl + int id: @macro_decl ref, + int index: int ref, + int role: @macro_role_or_none ref +); + +postfix_operator_decls( //dir=decl + unique int id: @postfix_operator_decl +); + +prefix_operator_decls( //dir=decl + unique int id: @prefix_operator_decl +); + +@type_decl = + @abstract_type_param_decl +| @generic_type_decl +| @module_decl +; + +#keyset[id] +type_decls( //dir=decl + int id: @type_decl ref, + string name: string ref +); + +#keyset[id, index] +type_decl_inherited_types( //dir=decl + int id: @type_decl ref, + int index: int ref, + int inherited_type: @type_or_none ref +); + +@abstract_type_param_decl = + @associated_type_decl +| @generic_type_param_decl +; + +@accessor_or_named_function = + @accessor +| @named_function +; + +deinitializers( //dir=decl + unique int id: @deinitializer +); + +@generic_type_decl = + @nominal_type_decl +| @opaque_type_decl +| @type_alias_decl +; + +initializers( //dir=decl + unique int id: @initializer +); + +module_decls( //dir=decl + unique int id: @module_decl +); + +#keyset[id] +module_decl_is_builtin_module( //dir=decl + int id: @module_decl ref +); + +#keyset[id] +module_decl_is_system_module( //dir=decl + int id: @module_decl ref +); + +module_decl_imported_modules( //dir=decl + int id: @module_decl ref, + int imported_module: @module_decl_or_none ref +); + +module_decl_exported_modules( //dir=decl + int id: @module_decl ref, + int exported_module: @module_decl_or_none ref +); + +subscript_decls( //dir=decl + unique int id: @subscript_decl, + int element_type: @type_or_none ref +); + +#keyset[id, index] +subscript_decl_params( //dir=decl + int id: @subscript_decl ref, + int index: int ref, + int param: @param_decl_or_none ref +); + +@var_decl = + @concrete_var_decl +| @param_decl +; + +#keyset[id] +var_decls( //dir=decl + int id: @var_decl ref, + string name: string ref, + int type_: @type_or_none ref +); + +#keyset[id] +var_decl_attached_property_wrapper_types( //dir=decl + int id: @var_decl ref, + int attached_property_wrapper_type: @type_or_none ref +); + +#keyset[id] +var_decl_parent_patterns( //dir=decl + int id: @var_decl ref, + int parent_pattern: @pattern_or_none ref +); + +#keyset[id] +var_decl_parent_initializers( //dir=decl + int id: @var_decl ref, + int parent_initializer: @expr_or_none ref +); + +#keyset[id] +var_decl_property_wrapper_backing_var_bindings( //dir=decl + int id: @var_decl ref, + int property_wrapper_backing_var_binding: @pattern_binding_decl_or_none ref +); + +#keyset[id] +var_decl_property_wrapper_backing_vars( //dir=decl + int id: @var_decl ref, + int property_wrapper_backing_var: @var_decl_or_none ref +); + +#keyset[id] +var_decl_property_wrapper_projection_var_bindings( //dir=decl + int id: @var_decl ref, + int property_wrapper_projection_var_binding: @pattern_binding_decl_or_none ref +); + +#keyset[id] +var_decl_property_wrapper_projection_vars( //dir=decl + int id: @var_decl ref, + int property_wrapper_projection_var: @var_decl_or_none ref +); + +accessors( //dir=decl + unique int id: @accessor +); + +#keyset[id] +accessor_is_getter( //dir=decl + int id: @accessor ref +); + +#keyset[id] +accessor_is_setter( //dir=decl + int id: @accessor ref +); + +#keyset[id] +accessor_is_will_set( //dir=decl + int id: @accessor ref +); + +#keyset[id] +accessor_is_did_set( //dir=decl + int id: @accessor ref +); + +#keyset[id] +accessor_is_read( //dir=decl + int id: @accessor ref +); + +#keyset[id] +accessor_is_modify( //dir=decl + int id: @accessor ref +); + +#keyset[id] +accessor_is_unsafe_address( //dir=decl + int id: @accessor ref +); + +#keyset[id] +accessor_is_unsafe_mutable_address( //dir=decl + int id: @accessor ref +); + +associated_type_decls( //dir=decl + unique int id: @associated_type_decl +); + +concrete_var_decls( //dir=decl + unique int id: @concrete_var_decl, + int introducer_int: int ref +); + +generic_type_param_decls( //dir=decl + unique int id: @generic_type_param_decl +); + +named_functions( //dir=decl + unique int id: @named_function +); + +@nominal_type_decl = + @class_decl +| @enum_decl +| @protocol_decl +| @struct_decl +; + +#keyset[id] +nominal_type_decls( //dir=decl + int id: @nominal_type_decl ref, + int type_: @type_or_none ref +); + +opaque_type_decls( //dir=decl + unique int id: @opaque_type_decl, + int naming_declaration: @value_decl_or_none ref +); + +#keyset[id, index] +opaque_type_decl_opaque_generic_params( //dir=decl + int id: @opaque_type_decl ref, + int index: int ref, + int opaque_generic_param: @generic_type_param_type_or_none ref +); + +param_decls( //dir=decl + unique int id: @param_decl +); + +#keyset[id] +param_decl_is_inout( //dir=decl + int id: @param_decl ref +); + +#keyset[id] +param_decl_property_wrapper_local_wrapped_var_bindings( //dir=decl + int id: @param_decl ref, + int property_wrapper_local_wrapped_var_binding: @pattern_binding_decl_or_none ref +); + +#keyset[id] +param_decl_property_wrapper_local_wrapped_vars( //dir=decl + int id: @param_decl ref, + int property_wrapper_local_wrapped_var: @var_decl_or_none ref +); + +type_alias_decls( //dir=decl + unique int id: @type_alias_decl, + int aliased_type: @type_or_none ref +); + +class_decls( //dir=decl + unique int id: @class_decl +); + +enum_decls( //dir=decl + unique int id: @enum_decl +); + +protocol_decls( //dir=decl + unique int id: @protocol_decl +); + +struct_decls( //dir=decl + unique int id: @struct_decl +); + +arguments( //dir=expr + unique int id: @argument, + string label: string ref, + int expr: @expr_or_none ref +); + +@expr = + @any_try_expr +| @applied_property_wrapper_expr +| @apply_expr +| @assign_expr +| @bind_optional_expr +| @capture_list_expr +| @closure_expr +| @collection_expr +| @consume_expr +| @copy_expr +| @decl_ref_expr +| @default_argument_expr +| @discard_assignment_expr +| @dot_syntax_base_ignored_expr +| @dynamic_type_expr +| @enum_is_case_expr +| @error_expr +| @explicit_cast_expr +| @force_value_expr +| @identity_expr +| @if_expr +| @implicit_conversion_expr +| @in_out_expr +| @key_path_application_expr +| @key_path_dot_expr +| @key_path_expr +| @lazy_initialization_expr +| @literal_expr +| @lookup_expr +| @make_temporarily_escapable_expr +| @materialize_pack_expr +| @obj_c_selector_expr +| @one_way_expr +| @opaque_value_expr +| @open_existential_expr +| @optional_evaluation_expr +| @other_initializer_ref_expr +| @overloaded_decl_ref_expr +| @pack_element_expr +| @pack_expansion_expr +| @property_wrapper_value_placeholder_expr +| @rebind_self_in_initializer_expr +| @sequence_expr +| @single_value_stmt_expr +| @super_ref_expr +| @tap_expr +| @tuple_element_expr +| @tuple_expr +| @type_expr +| @unresolved_decl_ref_expr +| @unresolved_dot_expr +| @unresolved_member_expr +| @unresolved_pattern_expr +| @unresolved_specialize_expr +| @vararg_expansion_expr +; + +#keyset[id] +expr_types( //dir=expr + int id: @expr ref, + int type_: @type_or_none ref +); + +@any_try_expr = + @force_try_expr +| @optional_try_expr +| @try_expr +; + +#keyset[id] +any_try_exprs( //dir=expr + int id: @any_try_expr ref, + int sub_expr: @expr_or_none ref +); + +applied_property_wrapper_exprs( //dir=expr + unique int id: @applied_property_wrapper_expr, + int kind: int ref, + int value: @expr_or_none ref, + int param: @param_decl_or_none ref +); + +@apply_expr = + @binary_expr +| @call_expr +| @postfix_unary_expr +| @prefix_unary_expr +| @self_apply_expr +; + +#keyset[id] +apply_exprs( //dir=expr + int id: @apply_expr ref, + int function: @expr_or_none ref +); + +#keyset[id, index] +apply_expr_arguments( //dir=expr + int id: @apply_expr ref, + int index: int ref, + int argument: @argument_or_none ref +); + +assign_exprs( //dir=expr + unique int id: @assign_expr, + int dest: @expr_or_none ref, + int source: @expr_or_none ref +); + +bind_optional_exprs( //dir=expr + unique int id: @bind_optional_expr, + int sub_expr: @expr_or_none ref +); + +capture_list_exprs( //dir=expr + unique int id: @capture_list_expr, + int closure_body: @closure_expr_or_none ref +); + +#keyset[id, index] +capture_list_expr_binding_decls( //dir=expr + int id: @capture_list_expr ref, + int index: int ref, + int binding_decl: @pattern_binding_decl_or_none ref +); + +@closure_expr = + @auto_closure_expr +| @explicit_closure_expr +; + +@collection_expr = + @array_expr +| @dictionary_expr +; + +consume_exprs( //dir=expr + unique int id: @consume_expr, + int sub_expr: @expr_or_none ref +); + +copy_exprs( //dir=expr + unique int id: @copy_expr, + int sub_expr: @expr_or_none ref +); + +decl_ref_exprs( //dir=expr + unique int id: @decl_ref_expr, + int decl: @decl_or_none ref +); + +#keyset[id, index] +decl_ref_expr_replacement_types( //dir=expr + int id: @decl_ref_expr ref, + int index: int ref, + int replacement_type: @type_or_none ref +); + +#keyset[id] +decl_ref_expr_has_direct_to_storage_semantics( //dir=expr + int id: @decl_ref_expr ref +); + +#keyset[id] +decl_ref_expr_has_direct_to_implementation_semantics( //dir=expr + int id: @decl_ref_expr ref +); + +#keyset[id] +decl_ref_expr_has_ordinary_semantics( //dir=expr + int id: @decl_ref_expr ref +); + +#keyset[id] +decl_ref_expr_has_distributed_thunk_semantics( //dir=expr + int id: @decl_ref_expr ref +); + +default_argument_exprs( //dir=expr + unique int id: @default_argument_expr, + int param_decl: @param_decl_or_none ref, + int param_index: int ref +); + +#keyset[id] +default_argument_expr_caller_side_defaults( //dir=expr + int id: @default_argument_expr ref, + int caller_side_default: @expr_or_none ref +); + +discard_assignment_exprs( //dir=expr + unique int id: @discard_assignment_expr +); + +dot_syntax_base_ignored_exprs( //dir=expr + unique int id: @dot_syntax_base_ignored_expr, + int qualifier: @expr_or_none ref, + int sub_expr: @expr_or_none ref +); + +dynamic_type_exprs( //dir=expr + unique int id: @dynamic_type_expr, + int base: @expr_or_none ref +); + +enum_is_case_exprs( //dir=expr + unique int id: @enum_is_case_expr, + int sub_expr: @expr_or_none ref, + int element: @enum_element_decl_or_none ref +); + +error_exprs( //dir=expr + unique int id: @error_expr +); + +@explicit_cast_expr = + @checked_cast_expr +| @coerce_expr +; + +#keyset[id] +explicit_cast_exprs( //dir=expr + int id: @explicit_cast_expr ref, + int sub_expr: @expr_or_none ref +); + +force_value_exprs( //dir=expr + unique int id: @force_value_expr, + int sub_expr: @expr_or_none ref +); + +@identity_expr = + @await_expr +| @borrow_expr +| @dot_self_expr +| @paren_expr +| @unresolved_member_chain_result_expr +; + +#keyset[id] +identity_exprs( //dir=expr + int id: @identity_expr ref, + int sub_expr: @expr_or_none ref +); + +if_exprs( //dir=expr + unique int id: @if_expr, + int condition: @expr_or_none ref, + int then_expr: @expr_or_none ref, + int else_expr: @expr_or_none ref +); + +@implicit_conversion_expr = + @abi_safe_conversion_expr +| @any_hashable_erasure_expr +| @archetype_to_super_expr +| @array_to_pointer_expr +| @bridge_from_obj_c_expr +| @bridge_to_obj_c_expr +| @class_metatype_to_object_expr +| @collection_upcast_conversion_expr +| @conditional_bridge_from_obj_c_expr +| @covariant_function_conversion_expr +| @covariant_return_conversion_expr +| @derived_to_base_expr +| @destructure_tuple_expr +| @differentiable_function_expr +| @differentiable_function_extract_original_expr +| @erasure_expr +| @existential_metatype_to_object_expr +| @foreign_object_conversion_expr +| @function_conversion_expr +| @in_out_to_pointer_expr +| @inject_into_optional_expr +| @linear_function_expr +| @linear_function_extract_original_expr +| @linear_to_differentiable_function_expr +| @load_expr +| @metatype_conversion_expr +| @pointer_to_pointer_expr +| @protocol_metatype_to_object_expr +| @string_to_pointer_expr +| @underlying_to_opaque_expr +| @unevaluated_instance_expr +| @unresolved_type_conversion_expr +; + +#keyset[id] +implicit_conversion_exprs( //dir=expr + int id: @implicit_conversion_expr ref, + int sub_expr: @expr_or_none ref +); + +in_out_exprs( //dir=expr + unique int id: @in_out_expr, + int sub_expr: @expr_or_none ref +); + +key_path_application_exprs( //dir=expr + unique int id: @key_path_application_expr, + int base: @expr_or_none ref, + int key_path: @expr_or_none ref +); + +key_path_dot_exprs( //dir=expr + unique int id: @key_path_dot_expr +); + +key_path_exprs( //dir=expr + unique int id: @key_path_expr +); + +#keyset[id] +key_path_expr_roots( //dir=expr + int id: @key_path_expr ref, + int root: @type_repr_or_none ref +); + +#keyset[id, index] +key_path_expr_components( //dir=expr + int id: @key_path_expr ref, + int index: int ref, + int component: @key_path_component_or_none ref +); + +lazy_initialization_exprs( //dir=expr + unique int id: @lazy_initialization_expr, + int sub_expr: @expr_or_none ref +); + +@literal_expr = + @builtin_literal_expr +| @interpolated_string_literal_expr +| @nil_literal_expr +| @object_literal_expr +| @regex_literal_expr +; + +@lookup_expr = + @dynamic_lookup_expr +| @member_ref_expr +| @subscript_expr +; + +#keyset[id] +lookup_exprs( //dir=expr + int id: @lookup_expr ref, + int base: @expr_or_none ref +); + +#keyset[id] +lookup_expr_members( //dir=expr + int id: @lookup_expr ref, + int member: @decl_or_none ref +); + +make_temporarily_escapable_exprs( //dir=expr + unique int id: @make_temporarily_escapable_expr, + int escaping_closure: @opaque_value_expr_or_none ref, + int nonescaping_closure: @expr_or_none ref, + int sub_expr: @expr_or_none ref +); + +materialize_pack_exprs( //dir=expr + unique int id: @materialize_pack_expr, + int sub_expr: @expr_or_none ref +); + +obj_c_selector_exprs( //dir=expr + unique int id: @obj_c_selector_expr, + int sub_expr: @expr_or_none ref, + int method: @function_or_none ref +); + +one_way_exprs( //dir=expr + unique int id: @one_way_expr, + int sub_expr: @expr_or_none ref +); + +opaque_value_exprs( //dir=expr + unique int id: @opaque_value_expr +); + +open_existential_exprs( //dir=expr + unique int id: @open_existential_expr, + int sub_expr: @expr_or_none ref, + int existential: @expr_or_none ref, + int opaque_expr: @opaque_value_expr_or_none ref +); + +optional_evaluation_exprs( //dir=expr + unique int id: @optional_evaluation_expr, + int sub_expr: @expr_or_none ref +); + +other_initializer_ref_exprs( //dir=expr + unique int id: @other_initializer_ref_expr, + int initializer: @initializer_or_none ref +); + +overloaded_decl_ref_exprs( //dir=expr + unique int id: @overloaded_decl_ref_expr +); + +#keyset[id, index] +overloaded_decl_ref_expr_possible_declarations( //dir=expr + int id: @overloaded_decl_ref_expr ref, + int index: int ref, + int possible_declaration: @value_decl_or_none ref +); + +pack_element_exprs( //dir=expr + unique int id: @pack_element_expr, + int sub_expr: @expr_or_none ref +); + +pack_expansion_exprs( //dir=expr + unique int id: @pack_expansion_expr, + int pattern_expr: @expr_or_none ref +); + +property_wrapper_value_placeholder_exprs( //dir=expr + unique int id: @property_wrapper_value_placeholder_expr, + int placeholder: @opaque_value_expr_or_none ref +); + +#keyset[id] +property_wrapper_value_placeholder_expr_wrapped_values( //dir=expr + int id: @property_wrapper_value_placeholder_expr ref, + int wrapped_value: @expr_or_none ref +); + +rebind_self_in_initializer_exprs( //dir=expr + unique int id: @rebind_self_in_initializer_expr, + int sub_expr: @expr_or_none ref, + int self: @var_decl_or_none ref +); + +sequence_exprs( //dir=expr + unique int id: @sequence_expr +); + +#keyset[id, index] +sequence_expr_elements( //dir=expr + int id: @sequence_expr ref, + int index: int ref, + int element: @expr_or_none ref +); + +single_value_stmt_exprs( //dir=expr + unique int id: @single_value_stmt_expr, + int stmt: @stmt_or_none ref +); + +super_ref_exprs( //dir=expr + unique int id: @super_ref_expr, + int self: @var_decl_or_none ref +); + +tap_exprs( //dir=expr + unique int id: @tap_expr, + int body: @brace_stmt_or_none ref, + int var: @var_decl_or_none ref +); + +#keyset[id] +tap_expr_sub_exprs( //dir=expr + int id: @tap_expr ref, + int sub_expr: @expr_or_none ref +); + +tuple_element_exprs( //dir=expr + unique int id: @tuple_element_expr, + int sub_expr: @expr_or_none ref, + int index: int ref +); + +tuple_exprs( //dir=expr + unique int id: @tuple_expr +); + +#keyset[id, index] +tuple_expr_elements( //dir=expr + int id: @tuple_expr ref, + int index: int ref, + int element: @expr_or_none ref +); + +type_exprs( //dir=expr + unique int id: @type_expr +); + +#keyset[id] +type_expr_type_reprs( //dir=expr + int id: @type_expr ref, + int type_repr: @type_repr_or_none ref +); + +unresolved_decl_ref_exprs( //dir=expr + unique int id: @unresolved_decl_ref_expr +); + +#keyset[id] +unresolved_decl_ref_expr_names( //dir=expr + int id: @unresolved_decl_ref_expr ref, + string name: string ref +); + +unresolved_dot_exprs( //dir=expr + unique int id: @unresolved_dot_expr, + int base: @expr_or_none ref, + string name: string ref +); + +unresolved_member_exprs( //dir=expr + unique int id: @unresolved_member_expr, + string name: string ref +); + +unresolved_pattern_exprs( //dir=expr + unique int id: @unresolved_pattern_expr, + int sub_pattern: @pattern_or_none ref +); + +unresolved_specialize_exprs( //dir=expr + unique int id: @unresolved_specialize_expr, + int sub_expr: @expr_or_none ref +); + +vararg_expansion_exprs( //dir=expr + unique int id: @vararg_expansion_expr, + int sub_expr: @expr_or_none ref +); + +abi_safe_conversion_exprs( //dir=expr + unique int id: @abi_safe_conversion_expr +); + +any_hashable_erasure_exprs( //dir=expr + unique int id: @any_hashable_erasure_expr +); + +archetype_to_super_exprs( //dir=expr + unique int id: @archetype_to_super_expr +); + +array_exprs( //dir=expr + unique int id: @array_expr +); + +#keyset[id, index] +array_expr_elements( //dir=expr + int id: @array_expr ref, + int index: int ref, + int element: @expr_or_none ref +); + +array_to_pointer_exprs( //dir=expr + unique int id: @array_to_pointer_expr +); + +auto_closure_exprs( //dir=expr + unique int id: @auto_closure_expr +); + +await_exprs( //dir=expr + unique int id: @await_expr +); + +binary_exprs( //dir=expr + unique int id: @binary_expr +); + +borrow_exprs( //dir=expr + unique int id: @borrow_expr +); + +bridge_from_obj_c_exprs( //dir=expr + unique int id: @bridge_from_obj_c_expr +); + +bridge_to_obj_c_exprs( //dir=expr + unique int id: @bridge_to_obj_c_expr +); + +@builtin_literal_expr = + @boolean_literal_expr +| @magic_identifier_literal_expr +| @number_literal_expr +| @string_literal_expr +; + +call_exprs( //dir=expr + unique int id: @call_expr +); + +@checked_cast_expr = + @conditional_checked_cast_expr +| @forced_checked_cast_expr +| @is_expr +; + +class_metatype_to_object_exprs( //dir=expr + unique int id: @class_metatype_to_object_expr +); + +coerce_exprs( //dir=expr + unique int id: @coerce_expr +); + +collection_upcast_conversion_exprs( //dir=expr + unique int id: @collection_upcast_conversion_expr +); + +conditional_bridge_from_obj_c_exprs( //dir=expr + unique int id: @conditional_bridge_from_obj_c_expr +); + +covariant_function_conversion_exprs( //dir=expr + unique int id: @covariant_function_conversion_expr +); + +covariant_return_conversion_exprs( //dir=expr + unique int id: @covariant_return_conversion_expr +); + +derived_to_base_exprs( //dir=expr + unique int id: @derived_to_base_expr +); + +destructure_tuple_exprs( //dir=expr + unique int id: @destructure_tuple_expr +); + +dictionary_exprs( //dir=expr + unique int id: @dictionary_expr +); + +#keyset[id, index] +dictionary_expr_elements( //dir=expr + int id: @dictionary_expr ref, + int index: int ref, + int element: @expr_or_none ref +); + +differentiable_function_exprs( //dir=expr + unique int id: @differentiable_function_expr +); + +differentiable_function_extract_original_exprs( //dir=expr + unique int id: @differentiable_function_extract_original_expr +); + +dot_self_exprs( //dir=expr + unique int id: @dot_self_expr +); + +@dynamic_lookup_expr = + @dynamic_member_ref_expr +| @dynamic_subscript_expr +; + +erasure_exprs( //dir=expr + unique int id: @erasure_expr +); + +existential_metatype_to_object_exprs( //dir=expr + unique int id: @existential_metatype_to_object_expr +); + +explicit_closure_exprs( //dir=expr + unique int id: @explicit_closure_expr +); + +force_try_exprs( //dir=expr + unique int id: @force_try_expr +); + +foreign_object_conversion_exprs( //dir=expr + unique int id: @foreign_object_conversion_expr +); + +function_conversion_exprs( //dir=expr + unique int id: @function_conversion_expr +); + +in_out_to_pointer_exprs( //dir=expr + unique int id: @in_out_to_pointer_expr +); + +inject_into_optional_exprs( //dir=expr + unique int id: @inject_into_optional_expr +); + +interpolated_string_literal_exprs( //dir=expr + unique int id: @interpolated_string_literal_expr +); + +#keyset[id] +interpolated_string_literal_expr_interpolation_exprs( //dir=expr + int id: @interpolated_string_literal_expr ref, + int interpolation_expr: @opaque_value_expr_or_none ref +); + +#keyset[id] +interpolated_string_literal_expr_appending_exprs( //dir=expr + int id: @interpolated_string_literal_expr ref, + int appending_expr: @tap_expr_or_none ref +); + +linear_function_exprs( //dir=expr + unique int id: @linear_function_expr +); + +linear_function_extract_original_exprs( //dir=expr + unique int id: @linear_function_extract_original_expr +); + +linear_to_differentiable_function_exprs( //dir=expr + unique int id: @linear_to_differentiable_function_expr +); + +load_exprs( //dir=expr + unique int id: @load_expr +); + +member_ref_exprs( //dir=expr + unique int id: @member_ref_expr +); + +#keyset[id] +member_ref_expr_has_direct_to_storage_semantics( //dir=expr + int id: @member_ref_expr ref +); + +#keyset[id] +member_ref_expr_has_direct_to_implementation_semantics( //dir=expr + int id: @member_ref_expr ref +); + +#keyset[id] +member_ref_expr_has_ordinary_semantics( //dir=expr + int id: @member_ref_expr ref +); + +#keyset[id] +member_ref_expr_has_distributed_thunk_semantics( //dir=expr + int id: @member_ref_expr ref +); + +metatype_conversion_exprs( //dir=expr + unique int id: @metatype_conversion_expr +); + +nil_literal_exprs( //dir=expr + unique int id: @nil_literal_expr +); + +object_literal_exprs( //dir=expr + unique int id: @object_literal_expr, + int kind: int ref +); + +#keyset[id, index] +object_literal_expr_arguments( //dir=expr + int id: @object_literal_expr ref, + int index: int ref, + int argument: @argument_or_none ref +); + +optional_try_exprs( //dir=expr + unique int id: @optional_try_expr +); + +paren_exprs( //dir=expr + unique int id: @paren_expr +); + +pointer_to_pointer_exprs( //dir=expr + unique int id: @pointer_to_pointer_expr +); + +postfix_unary_exprs( //dir=expr + unique int id: @postfix_unary_expr +); + +prefix_unary_exprs( //dir=expr + unique int id: @prefix_unary_expr +); + +protocol_metatype_to_object_exprs( //dir=expr + unique int id: @protocol_metatype_to_object_expr +); + +regex_literal_exprs( //dir=expr + unique int id: @regex_literal_expr, + string pattern: string ref, + int version: int ref +); + +@self_apply_expr = + @dot_syntax_call_expr +| @initializer_ref_call_expr +; + +#keyset[id] +self_apply_exprs( //dir=expr + int id: @self_apply_expr ref, + int base: @expr_or_none ref +); + +string_to_pointer_exprs( //dir=expr + unique int id: @string_to_pointer_expr +); + +subscript_exprs( //dir=expr + unique int id: @subscript_expr +); + +#keyset[id, index] +subscript_expr_arguments( //dir=expr + int id: @subscript_expr ref, + int index: int ref, + int argument: @argument_or_none ref +); + +#keyset[id] +subscript_expr_has_direct_to_storage_semantics( //dir=expr + int id: @subscript_expr ref +); + +#keyset[id] +subscript_expr_has_direct_to_implementation_semantics( //dir=expr + int id: @subscript_expr ref +); + +#keyset[id] +subscript_expr_has_ordinary_semantics( //dir=expr + int id: @subscript_expr ref +); + +#keyset[id] +subscript_expr_has_distributed_thunk_semantics( //dir=expr + int id: @subscript_expr ref +); + +try_exprs( //dir=expr + unique int id: @try_expr +); + +underlying_to_opaque_exprs( //dir=expr + unique int id: @underlying_to_opaque_expr +); + +unevaluated_instance_exprs( //dir=expr + unique int id: @unevaluated_instance_expr +); + +unresolved_member_chain_result_exprs( //dir=expr + unique int id: @unresolved_member_chain_result_expr +); + +unresolved_type_conversion_exprs( //dir=expr + unique int id: @unresolved_type_conversion_expr +); + +boolean_literal_exprs( //dir=expr + unique int id: @boolean_literal_expr, + boolean value: boolean ref +); + +conditional_checked_cast_exprs( //dir=expr + unique int id: @conditional_checked_cast_expr +); + +dot_syntax_call_exprs( //dir=expr + unique int id: @dot_syntax_call_expr +); + +dynamic_member_ref_exprs( //dir=expr + unique int id: @dynamic_member_ref_expr +); + +dynamic_subscript_exprs( //dir=expr + unique int id: @dynamic_subscript_expr +); + +forced_checked_cast_exprs( //dir=expr + unique int id: @forced_checked_cast_expr +); + +initializer_ref_call_exprs( //dir=expr + unique int id: @initializer_ref_call_expr +); + +is_exprs( //dir=expr + unique int id: @is_expr +); + +magic_identifier_literal_exprs( //dir=expr + unique int id: @magic_identifier_literal_expr, + string kind: string ref +); + +@number_literal_expr = + @float_literal_expr +| @integer_literal_expr +; + +string_literal_exprs( //dir=expr + unique int id: @string_literal_expr, + string value: string ref +); + +float_literal_exprs( //dir=expr + unique int id: @float_literal_expr, + string string_value: string ref +); + +integer_literal_exprs( //dir=expr + unique int id: @integer_literal_expr, + string string_value: string ref +); + +@pattern = + @any_pattern +| @binding_pattern +| @bool_pattern +| @enum_element_pattern +| @expr_pattern +| @is_pattern +| @named_pattern +| @optional_some_pattern +| @paren_pattern +| @tuple_pattern +| @typed_pattern +; + +#keyset[id] +pattern_types( //dir=pattern + int id: @pattern ref, + int type_: @type_or_none ref +); + +any_patterns( //dir=pattern + unique int id: @any_pattern +); + +binding_patterns( //dir=pattern + unique int id: @binding_pattern, + int sub_pattern: @pattern_or_none ref +); + +bool_patterns( //dir=pattern + unique int id: @bool_pattern, + boolean value: boolean ref +); + +enum_element_patterns( //dir=pattern + unique int id: @enum_element_pattern, + int element: @enum_element_decl_or_none ref +); + +#keyset[id] +enum_element_pattern_sub_patterns( //dir=pattern + int id: @enum_element_pattern ref, + int sub_pattern: @pattern_or_none ref +); + +expr_patterns( //dir=pattern + unique int id: @expr_pattern, + int sub_expr: @expr_or_none ref +); + +is_patterns( //dir=pattern + unique int id: @is_pattern +); + +#keyset[id] +is_pattern_cast_type_reprs( //dir=pattern + int id: @is_pattern ref, + int cast_type_repr: @type_repr_or_none ref +); + +#keyset[id] +is_pattern_sub_patterns( //dir=pattern + int id: @is_pattern ref, + int sub_pattern: @pattern_or_none ref +); + +named_patterns( //dir=pattern + unique int id: @named_pattern, + int var_decl: @var_decl_or_none ref +); + +optional_some_patterns( //dir=pattern + unique int id: @optional_some_pattern, + int sub_pattern: @pattern_or_none ref +); + +paren_patterns( //dir=pattern + unique int id: @paren_pattern, + int sub_pattern: @pattern_or_none ref +); + +tuple_patterns( //dir=pattern + unique int id: @tuple_pattern +); + +#keyset[id, index] +tuple_pattern_elements( //dir=pattern + int id: @tuple_pattern ref, + int index: int ref, + int element: @pattern_or_none ref +); + +typed_patterns( //dir=pattern + unique int id: @typed_pattern, + int sub_pattern: @pattern_or_none ref +); + +#keyset[id] +typed_pattern_type_reprs( //dir=pattern + int id: @typed_pattern ref, + int type_repr: @type_repr_or_none ref +); + +case_label_items( //dir=stmt + unique int id: @case_label_item, + int pattern: @pattern_or_none ref +); + +#keyset[id] +case_label_item_guards( //dir=stmt + int id: @case_label_item ref, + int guard: @expr_or_none ref +); + +condition_elements( //dir=stmt + unique int id: @condition_element +); + +#keyset[id] +condition_element_booleans( //dir=stmt + int id: @condition_element ref, + int boolean_: @expr_or_none ref +); + +#keyset[id] +condition_element_patterns( //dir=stmt + int id: @condition_element ref, + int pattern: @pattern_or_none ref +); + +#keyset[id] +condition_element_initializers( //dir=stmt + int id: @condition_element ref, + int initializer: @expr_or_none ref +); + +#keyset[id] +condition_element_availabilities( //dir=stmt + int id: @condition_element ref, + int availability: @availability_info_or_none ref +); + +@stmt = + @brace_stmt +| @break_stmt +| @case_stmt +| @continue_stmt +| @defer_stmt +| @discard_stmt +| @fail_stmt +| @fallthrough_stmt +| @labeled_stmt +| @pound_assert_stmt +| @return_stmt +| @throw_stmt +| @yield_stmt +; + +stmt_conditions( //dir=stmt + unique int id: @stmt_condition +); + +#keyset[id, index] +stmt_condition_elements( //dir=stmt + int id: @stmt_condition ref, + int index: int ref, + int element: @condition_element_or_none ref +); + +brace_stmts( //dir=stmt + unique int id: @brace_stmt +); + +#keyset[id, index] +brace_stmt_elements( //dir=stmt + int id: @brace_stmt ref, + int index: int ref, + int element: @ast_node_or_none ref +); + +break_stmts( //dir=stmt + unique int id: @break_stmt +); + +#keyset[id] +break_stmt_target_names( //dir=stmt + int id: @break_stmt ref, + string target_name: string ref +); + +#keyset[id] +break_stmt_targets( //dir=stmt + int id: @break_stmt ref, + int target: @stmt_or_none ref +); + +case_stmts( //dir=stmt + unique int id: @case_stmt, + int body: @stmt_or_none ref +); + +#keyset[id, index] +case_stmt_labels( //dir=stmt + int id: @case_stmt ref, + int index: int ref, + int label: @case_label_item_or_none ref +); + +#keyset[id, index] +case_stmt_variables( //dir=stmt + int id: @case_stmt ref, + int index: int ref, + int variable: @var_decl_or_none ref +); + +continue_stmts( //dir=stmt + unique int id: @continue_stmt +); + +#keyset[id] +continue_stmt_target_names( //dir=stmt + int id: @continue_stmt ref, + string target_name: string ref +); + +#keyset[id] +continue_stmt_targets( //dir=stmt + int id: @continue_stmt ref, + int target: @stmt_or_none ref +); + +defer_stmts( //dir=stmt + unique int id: @defer_stmt, + int body: @brace_stmt_or_none ref +); + +discard_stmts( //dir=stmt + unique int id: @discard_stmt, + int sub_expr: @expr_or_none ref +); + +fail_stmts( //dir=stmt + unique int id: @fail_stmt +); + +fallthrough_stmts( //dir=stmt + unique int id: @fallthrough_stmt, + int fallthrough_source: @case_stmt_or_none ref, + int fallthrough_dest: @case_stmt_or_none ref +); + +@labeled_stmt = + @do_catch_stmt +| @do_stmt +| @for_each_stmt +| @labeled_conditional_stmt +| @repeat_while_stmt +| @switch_stmt +; + +#keyset[id] +labeled_stmt_labels( //dir=stmt + int id: @labeled_stmt ref, + string label: string ref +); + +pound_assert_stmts( //dir=stmt + unique int id: @pound_assert_stmt, + int condition: @expr_or_none ref, + string message: string ref +); + +return_stmts( //dir=stmt + unique int id: @return_stmt +); + +#keyset[id] +return_stmt_results( //dir=stmt + int id: @return_stmt ref, + int result: @expr_or_none ref +); + +throw_stmts( //dir=stmt + unique int id: @throw_stmt, + int sub_expr: @expr_or_none ref +); + +yield_stmts( //dir=stmt + unique int id: @yield_stmt +); + +#keyset[id, index] +yield_stmt_results( //dir=stmt + int id: @yield_stmt ref, + int index: int ref, + int result: @expr_or_none ref +); + +do_catch_stmts( //dir=stmt + unique int id: @do_catch_stmt, + int body: @stmt_or_none ref +); + +#keyset[id, index] +do_catch_stmt_catches( //dir=stmt + int id: @do_catch_stmt ref, + int index: int ref, + int catch: @case_stmt_or_none ref +); + +do_stmts( //dir=stmt + unique int id: @do_stmt, + int body: @brace_stmt_or_none ref +); + +for_each_stmts( //dir=stmt + unique int id: @for_each_stmt, + int pattern: @pattern_or_none ref, + int body: @brace_stmt_or_none ref +); + +#keyset[id] +for_each_stmt_wheres( //dir=stmt + int id: @for_each_stmt ref, + int where: @expr_or_none ref +); + +#keyset[id] +for_each_stmt_iterator_vars( //dir=stmt + int id: @for_each_stmt ref, + int iteratorVar: @pattern_binding_decl_or_none ref +); + +#keyset[id] +for_each_stmt_next_calls( //dir=stmt + int id: @for_each_stmt ref, + int nextCall: @expr_or_none ref +); + +@labeled_conditional_stmt = + @guard_stmt +| @if_stmt +| @while_stmt +; + +#keyset[id] +labeled_conditional_stmts( //dir=stmt + int id: @labeled_conditional_stmt ref, + int condition: @stmt_condition_or_none ref +); + +repeat_while_stmts( //dir=stmt + unique int id: @repeat_while_stmt, + int condition: @expr_or_none ref, + int body: @stmt_or_none ref +); + +switch_stmts( //dir=stmt + unique int id: @switch_stmt, + int expr: @expr_or_none ref +); + +#keyset[id, index] +switch_stmt_cases( //dir=stmt + int id: @switch_stmt ref, + int index: int ref, + int case_: @case_stmt_or_none ref +); + +guard_stmts( //dir=stmt + unique int id: @guard_stmt, + int body: @brace_stmt_or_none ref +); + +if_stmts( //dir=stmt + unique int id: @if_stmt, + int then: @stmt_or_none ref +); + +#keyset[id] +if_stmt_elses( //dir=stmt + int id: @if_stmt ref, + int else: @stmt_or_none ref +); + +while_stmts( //dir=stmt + unique int id: @while_stmt, + int body: @stmt_or_none ref +); + +@type = + @any_function_type +| @any_generic_type +| @any_metatype_type +| @builtin_type +| @dependent_member_type +| @dynamic_self_type +| @error_type +| @existential_type +| @in_out_type +| @l_value_type +| @module_type +| @pack_element_type +| @pack_expansion_type +| @pack_type +| @parameterized_protocol_type +| @protocol_composition_type +| @reference_storage_type +| @substitutable_type +| @sugar_type +| @tuple_type +| @unresolved_type +; + +#keyset[id] +types( //dir=type + int id: @type ref, + string name: string ref, + int canonical_type: @type_or_none ref +); + +type_reprs( //dir=type + unique int id: @type_repr, + int type_: @type_or_none ref +); + +@any_function_type = + @function_type +| @generic_function_type +; + +#keyset[id] +any_function_types( //dir=type + int id: @any_function_type ref, + int result: @type_or_none ref +); + +#keyset[id, index] +any_function_type_param_types( //dir=type + int id: @any_function_type ref, + int index: int ref, + int param_type: @type_or_none ref +); + +#keyset[id] +any_function_type_is_throwing( //dir=type + int id: @any_function_type ref +); + +#keyset[id] +any_function_type_is_async( //dir=type + int id: @any_function_type ref +); + +@any_generic_type = + @nominal_or_bound_generic_nominal_type +| @unbound_generic_type +; + +#keyset[id] +any_generic_types( //dir=type + int id: @any_generic_type ref, + int declaration: @generic_type_decl_or_none ref +); + +#keyset[id] +any_generic_type_parents( //dir=type + int id: @any_generic_type ref, + int parent: @type_or_none ref +); + +@any_metatype_type = + @existential_metatype_type +| @metatype_type +; + +@builtin_type = + @any_builtin_integer_type +| @builtin_bridge_object_type +| @builtin_default_actor_storage_type +| @builtin_executor_type +| @builtin_float_type +| @builtin_job_type +| @builtin_native_object_type +| @builtin_raw_pointer_type +| @builtin_raw_unsafe_continuation_type +| @builtin_unsafe_value_buffer_type +| @builtin_vector_type +; + +dependent_member_types( //dir=type + unique int id: @dependent_member_type, + int base_type: @type_or_none ref, + int associated_type_decl: @associated_type_decl_or_none ref +); + +dynamic_self_types( //dir=type + unique int id: @dynamic_self_type, + int static_self_type: @type_or_none ref +); + +error_types( //dir=type + unique int id: @error_type +); + +existential_types( //dir=type + unique int id: @existential_type, + int constraint: @type_or_none ref +); + +in_out_types( //dir=type + unique int id: @in_out_type, + int object_type: @type_or_none ref +); + +l_value_types( //dir=type + unique int id: @l_value_type, + int object_type: @type_or_none ref +); + +module_types( //dir=type + unique int id: @module_type, + int module: @module_decl_or_none ref +); + +pack_element_types( //dir=type + unique int id: @pack_element_type, + int pack_type: @type_or_none ref +); + +pack_expansion_types( //dir=type + unique int id: @pack_expansion_type, + int pattern_type: @type_or_none ref, + int count_type: @type_or_none ref +); + +pack_types( //dir=type + unique int id: @pack_type +); + +#keyset[id, index] +pack_type_elements( //dir=type + int id: @pack_type ref, + int index: int ref, + int element: @type_or_none ref +); + +parameterized_protocol_types( //dir=type + unique int id: @parameterized_protocol_type, + int base: @protocol_type_or_none ref +); + +#keyset[id, index] +parameterized_protocol_type_args( //dir=type + int id: @parameterized_protocol_type ref, + int index: int ref, + int arg: @type_or_none ref +); + +protocol_composition_types( //dir=type + unique int id: @protocol_composition_type +); + +#keyset[id, index] +protocol_composition_type_members( //dir=type + int id: @protocol_composition_type ref, + int index: int ref, + int member: @type_or_none ref +); + +@reference_storage_type = + @unmanaged_storage_type +| @unowned_storage_type +| @weak_storage_type +; + +#keyset[id] +reference_storage_types( //dir=type + int id: @reference_storage_type ref, + int referent_type: @type_or_none ref +); + +@substitutable_type = + @archetype_type +| @generic_type_param_type +; + +@sugar_type = + @paren_type +| @syntax_sugar_type +| @type_alias_type +; + +tuple_types( //dir=type + unique int id: @tuple_type +); + +#keyset[id, index] +tuple_type_types( //dir=type + int id: @tuple_type ref, + int index: int ref, + int type_: @type_or_none ref +); + +#keyset[id, index] +tuple_type_names( //dir=type + int id: @tuple_type ref, + int index: int ref, + string name: string ref +); + +unresolved_types( //dir=type + unique int id: @unresolved_type +); + +@any_builtin_integer_type = + @builtin_integer_literal_type +| @builtin_integer_type +; + +@archetype_type = + @local_archetype_type +| @opaque_type_archetype_type +| @pack_archetype_type +| @primary_archetype_type +; + +#keyset[id] +archetype_types( //dir=type + int id: @archetype_type ref, + int interface_type: @type_or_none ref +); + +#keyset[id] +archetype_type_superclasses( //dir=type + int id: @archetype_type ref, + int superclass: @type_or_none ref +); + +#keyset[id, index] +archetype_type_protocols( //dir=type + int id: @archetype_type ref, + int index: int ref, + int protocol: @protocol_decl_or_none ref +); + +builtin_bridge_object_types( //dir=type + unique int id: @builtin_bridge_object_type +); + +builtin_default_actor_storage_types( //dir=type + unique int id: @builtin_default_actor_storage_type +); + +builtin_executor_types( //dir=type + unique int id: @builtin_executor_type +); + +builtin_float_types( //dir=type + unique int id: @builtin_float_type +); + +builtin_job_types( //dir=type + unique int id: @builtin_job_type +); + +builtin_native_object_types( //dir=type + unique int id: @builtin_native_object_type +); + +builtin_raw_pointer_types( //dir=type + unique int id: @builtin_raw_pointer_type +); + +builtin_raw_unsafe_continuation_types( //dir=type + unique int id: @builtin_raw_unsafe_continuation_type +); + +builtin_unsafe_value_buffer_types( //dir=type + unique int id: @builtin_unsafe_value_buffer_type +); + +builtin_vector_types( //dir=type + unique int id: @builtin_vector_type +); + +existential_metatype_types( //dir=type + unique int id: @existential_metatype_type +); + +function_types( //dir=type + unique int id: @function_type +); + +generic_function_types( //dir=type + unique int id: @generic_function_type +); + +#keyset[id, index] +generic_function_type_generic_params( //dir=type + int id: @generic_function_type ref, + int index: int ref, + int generic_param: @generic_type_param_type_or_none ref +); + +generic_type_param_types( //dir=type + unique int id: @generic_type_param_type +); + +metatype_types( //dir=type + unique int id: @metatype_type +); + +@nominal_or_bound_generic_nominal_type = + @bound_generic_type +| @nominal_type +; + +paren_types( //dir=type + unique int id: @paren_type, + int type_: @type_or_none ref +); + +@syntax_sugar_type = + @dictionary_type +| @unary_syntax_sugar_type +; + +type_alias_types( //dir=type + unique int id: @type_alias_type, + int decl: @type_alias_decl_or_none ref +); + +unbound_generic_types( //dir=type + unique int id: @unbound_generic_type +); + +unmanaged_storage_types( //dir=type + unique int id: @unmanaged_storage_type +); + +unowned_storage_types( //dir=type + unique int id: @unowned_storage_type +); + +weak_storage_types( //dir=type + unique int id: @weak_storage_type +); + +@bound_generic_type = + @bound_generic_class_type +| @bound_generic_enum_type +| @bound_generic_struct_type +; + +#keyset[id, index] +bound_generic_type_arg_types( //dir=type + int id: @bound_generic_type ref, + int index: int ref, + int arg_type: @type_or_none ref +); + +builtin_integer_literal_types( //dir=type + unique int id: @builtin_integer_literal_type +); + +builtin_integer_types( //dir=type + unique int id: @builtin_integer_type +); + +#keyset[id] +builtin_integer_type_widths( //dir=type + int id: @builtin_integer_type ref, + int width: int ref +); + +dictionary_types( //dir=type + unique int id: @dictionary_type, + int key_type: @type_or_none ref, + int value_type: @type_or_none ref +); + +@local_archetype_type = + @element_archetype_type +| @opened_archetype_type +; + +@nominal_type = + @class_type +| @enum_type +| @protocol_type +| @struct_type +; + +opaque_type_archetype_types( //dir=type + unique int id: @opaque_type_archetype_type, + int declaration: @opaque_type_decl_or_none ref +); + +pack_archetype_types( //dir=type + unique int id: @pack_archetype_type +); + +primary_archetype_types( //dir=type + unique int id: @primary_archetype_type +); + +@unary_syntax_sugar_type = + @array_slice_type +| @optional_type +| @variadic_sequence_type +; + +#keyset[id] +unary_syntax_sugar_types( //dir=type + int id: @unary_syntax_sugar_type ref, + int base_type: @type_or_none ref +); + +array_slice_types( //dir=type + unique int id: @array_slice_type +); + +bound_generic_class_types( //dir=type + unique int id: @bound_generic_class_type +); + +bound_generic_enum_types( //dir=type + unique int id: @bound_generic_enum_type +); + +bound_generic_struct_types( //dir=type + unique int id: @bound_generic_struct_type +); + +class_types( //dir=type + unique int id: @class_type +); + +element_archetype_types( //dir=type + unique int id: @element_archetype_type +); + +enum_types( //dir=type + unique int id: @enum_type +); + +opened_archetype_types( //dir=type + unique int id: @opened_archetype_type +); + +optional_types( //dir=type + unique int id: @optional_type +); + +protocol_types( //dir=type + unique int id: @protocol_type +); + +struct_types( //dir=type + unique int id: @struct_type +); + +variadic_sequence_types( //dir=type + unique int id: @variadic_sequence_type +); + +@accessor_or_none = + @accessor +| @unspecified_element +; + +@argument_or_none = + @argument +| @unspecified_element +; + +@associated_type_decl_or_none = + @associated_type_decl +| @unspecified_element +; + +@ast_node_or_none = + @ast_node +| @unspecified_element +; + +@availability_info_or_none = + @availability_info +| @unspecified_element +; + +@availability_spec_or_none = + @availability_spec +| @unspecified_element +; + +@brace_stmt_or_none = + @brace_stmt +| @unspecified_element +; + +@captured_decl_or_none = + @captured_decl +| @unspecified_element +; + +@case_label_item_or_none = + @case_label_item +| @unspecified_element +; + +@case_stmt_or_none = + @case_stmt +| @unspecified_element +; + +@closure_expr_or_none = + @closure_expr +| @unspecified_element +; + +@condition_element_or_none = + @condition_element +| @unspecified_element +; + +@decl_or_none = + @decl +| @unspecified_element +; + +@enum_element_decl_or_none = + @enum_element_decl +| @unspecified_element +; + +@expr_or_none = + @expr +| @unspecified_element +; + +@file_or_none = + @file +| @unspecified_element +; + +@function_or_none = + @function +| @unspecified_element +; + +@generic_type_decl_or_none = + @generic_type_decl +| @unspecified_element +; + +@generic_type_param_decl_or_none = + @generic_type_param_decl +| @unspecified_element +; + +@generic_type_param_type_or_none = + @generic_type_param_type +| @unspecified_element +; + +@initializer_or_none = + @initializer +| @unspecified_element +; + +@key_path_component_or_none = + @key_path_component +| @unspecified_element +; + +@location_or_none = + @location +| @unspecified_element +; + +@macro_role_or_none = + @macro_role +| @unspecified_element +; + +@module_decl_or_none = + @module_decl +| @unspecified_element +; + +@nominal_type_decl_or_none = + @nominal_type_decl +| @unspecified_element +; + +@opaque_type_decl_or_none = + @opaque_type_decl +| @unspecified_element +; + +@opaque_value_expr_or_none = + @opaque_value_expr +| @unspecified_element +; + +@param_decl_or_none = + @param_decl +| @unspecified_element +; + +@pattern_or_none = + @pattern +| @unspecified_element +; + +@pattern_binding_decl_or_none = + @pattern_binding_decl +| @unspecified_element +; + +@precedence_group_decl_or_none = + @precedence_group_decl +| @unspecified_element +; + +@protocol_decl_or_none = + @protocol_decl +| @unspecified_element +; + +@protocol_type_or_none = + @protocol_type +| @unspecified_element +; + +@stmt_or_none = + @stmt +| @unspecified_element +; + +@stmt_condition_or_none = + @stmt_condition +| @unspecified_element +; + +@string_literal_expr_or_none = + @string_literal_expr +| @unspecified_element +; + +@tap_expr_or_none = + @tap_expr +| @unspecified_element +; + +@type_or_none = + @type +| @unspecified_element +; + +@type_alias_decl_or_none = + @type_alias_decl +| @unspecified_element +; + +@type_expr_or_none = + @type_expr +| @unspecified_element +; + +@type_repr_or_none = + @type_repr +| @unspecified_element +; + +@value_decl_or_none = + @unspecified_element +| @value_decl +; + +@var_decl_or_none = + @unspecified_element +| @var_decl +; diff --git a/swift/ql/lib/upgrades/60be249ad164f6e4b43c203323f1b3956dc97c2f/swift.dbscheme b/swift/ql/lib/upgrades/60be249ad164f6e4b43c203323f1b3956dc97c2f/swift.dbscheme new file mode 100644 index 00000000000..15a630f68e1 --- /dev/null +++ b/swift/ql/lib/upgrades/60be249ad164f6e4b43c203323f1b3956dc97c2f/swift.dbscheme @@ -0,0 +1,2786 @@ +// generated by codegen/codegen.py + +// from prefix.dbscheme +/** + * The source location of the snapshot. + */ +sourceLocationPrefix( + string prefix: string ref +); + + +// from schema.py + +@element = + @callable +| @file +| @generic_context +| @locatable +| @location +| @type +; + +#keyset[id] +element_is_unknown( + int id: @element ref +); + +@callable = + @closure_expr +| @function +; + +#keyset[id] +callable_names( + int id: @callable ref, + string name: string ref +); + +#keyset[id] +callable_self_params( + int id: @callable ref, + int self_param: @param_decl_or_none ref +); + +#keyset[id, index] +callable_params( + int id: @callable ref, + int index: int ref, + int param: @param_decl_or_none ref +); + +#keyset[id] +callable_bodies( + int id: @callable ref, + int body: @brace_stmt_or_none ref +); + +#keyset[id, index] +callable_captures( + int id: @callable ref, + int index: int ref, + int capture: @captured_decl_or_none ref +); + +@file = + @db_file +; + +#keyset[id] +files( + int id: @file ref, + string name: string ref +); + +#keyset[id] +file_is_successfully_extracted( + int id: @file ref +); + +@locatable = + @argument +| @ast_node +| @comment +| @diagnostics +| @error_element +; + +#keyset[id] +locatable_locations( + int id: @locatable ref, + int location: @location_or_none ref +); + +@location = + @db_location +; + +#keyset[id] +locations( + int id: @location ref, + int file: @file_or_none ref, + int start_line: int ref, + int start_column: int ref, + int end_line: int ref, + int end_column: int ref +); + +@ast_node = + @availability_info +| @availability_spec +| @case_label_item +| @condition_element +| @decl +| @expr +| @key_path_component +| @macro_role +| @pattern +| @stmt +| @stmt_condition +| @type_repr +; + +comments( + unique int id: @comment, + string text: string ref +); + +db_files( + unique int id: @db_file +); + +db_locations( + unique int id: @db_location +); + +diagnostics( + unique int id: @diagnostics, + string text: string ref, + int kind: int ref +); + +@error_element = + @error_expr +| @error_type +| @overloaded_decl_ref_expr +| @unresolved_decl_ref_expr +| @unresolved_dot_expr +| @unresolved_member_chain_result_expr +| @unresolved_member_expr +| @unresolved_pattern_expr +| @unresolved_specialize_expr +| @unresolved_type +| @unresolved_type_conversion_expr +| @unspecified_element +; + +availability_infos( + unique int id: @availability_info +); + +#keyset[id] +availability_info_is_unavailable( + int id: @availability_info ref +); + +#keyset[id, index] +availability_info_specs( + int id: @availability_info ref, + int index: int ref, + int spec: @availability_spec_or_none ref +); + +@availability_spec = + @other_availability_spec +| @platform_version_availability_spec +; + +key_path_components( + unique int id: @key_path_component, + int kind: int ref, + int component_type: @type_or_none ref +); + +#keyset[id, index] +key_path_component_subscript_arguments( + int id: @key_path_component ref, + int index: int ref, + int subscript_argument: @argument_or_none ref +); + +#keyset[id] +key_path_component_tuple_indices( + int id: @key_path_component ref, + int tuple_index: int ref +); + +#keyset[id] +key_path_component_decl_refs( + int id: @key_path_component ref, + int decl_ref: @value_decl_or_none ref +); + +macro_roles( + unique int id: @macro_role, + int kind: int ref, + int macro_syntax: int ref +); + +#keyset[id, index] +macro_role_conformances( + int id: @macro_role ref, + int index: int ref, + int conformance: @type_expr_or_none ref +); + +#keyset[id, index] +macro_role_names( + int id: @macro_role ref, + int index: int ref, + string name: string ref +); + +unspecified_elements( + unique int id: @unspecified_element, + string property: string ref, + string error: string ref +); + +#keyset[id] +unspecified_element_parents( + int id: @unspecified_element ref, + int parent: @element ref +); + +#keyset[id] +unspecified_element_indices( + int id: @unspecified_element ref, + int index: int ref +); + +#keyset[id, index] +unspecified_element_children( + int id: @unspecified_element ref, + int index: int ref, + int child: @ast_node_or_none ref +); + +other_availability_specs( + unique int id: @other_availability_spec +); + +platform_version_availability_specs( + unique int id: @platform_version_availability_spec, + string platform: string ref, + string version: string ref +); + +@decl = + @captured_decl +| @enum_case_decl +| @extension_decl +| @if_config_decl +| @import_decl +| @missing_member_decl +| @operator_decl +| @pattern_binding_decl +| @pound_diagnostic_decl +| @precedence_group_decl +| @top_level_code_decl +| @value_decl +; + +#keyset[id] +decls( //dir=decl + int id: @decl ref, + int module: @module_decl_or_none ref +); + +#keyset[id, index] +decl_members( //dir=decl + int id: @decl ref, + int index: int ref, + int member: @decl_or_none ref +); + +@generic_context = + @extension_decl +| @function +| @generic_type_decl +| @macro_decl +| @subscript_decl +; + +#keyset[id, index] +generic_context_generic_type_params( //dir=decl + int id: @generic_context ref, + int index: int ref, + int generic_type_param: @generic_type_param_decl_or_none ref +); + +captured_decls( //dir=decl + unique int id: @captured_decl, + int decl: @value_decl_or_none ref +); + +#keyset[id] +captured_decl_is_direct( //dir=decl + int id: @captured_decl ref +); + +#keyset[id] +captured_decl_is_escaping( //dir=decl + int id: @captured_decl ref +); + +enum_case_decls( //dir=decl + unique int id: @enum_case_decl +); + +#keyset[id, index] +enum_case_decl_elements( //dir=decl + int id: @enum_case_decl ref, + int index: int ref, + int element: @enum_element_decl_or_none ref +); + +extension_decls( //dir=decl + unique int id: @extension_decl, + int extended_type_decl: @nominal_type_decl_or_none ref +); + +#keyset[id, index] +extension_decl_protocols( //dir=decl + int id: @extension_decl ref, + int index: int ref, + int protocol: @protocol_decl_or_none ref +); + +if_config_decls( //dir=decl + unique int id: @if_config_decl +); + +#keyset[id, index] +if_config_decl_active_elements( //dir=decl + int id: @if_config_decl ref, + int index: int ref, + int active_element: @ast_node_or_none ref +); + +import_decls( //dir=decl + unique int id: @import_decl +); + +#keyset[id] +import_decl_is_exported( //dir=decl + int id: @import_decl ref +); + +#keyset[id] +import_decl_imported_modules( //dir=decl + int id: @import_decl ref, + int imported_module: @module_decl_or_none ref +); + +#keyset[id, index] +import_decl_declarations( //dir=decl + int id: @import_decl ref, + int index: int ref, + int declaration: @value_decl_or_none ref +); + +missing_member_decls( //dir=decl + unique int id: @missing_member_decl, + string name: string ref +); + +@operator_decl = + @infix_operator_decl +| @postfix_operator_decl +| @prefix_operator_decl +; + +#keyset[id] +operator_decls( //dir=decl + int id: @operator_decl ref, + string name: string ref +); + +pattern_binding_decls( //dir=decl + unique int id: @pattern_binding_decl +); + +#keyset[id, index] +pattern_binding_decl_inits( //dir=decl + int id: @pattern_binding_decl ref, + int index: int ref, + int init: @expr_or_none ref +); + +#keyset[id, index] +pattern_binding_decl_patterns( //dir=decl + int id: @pattern_binding_decl ref, + int index: int ref, + int pattern: @pattern_or_none ref +); + +pound_diagnostic_decls( //dir=decl + unique int id: @pound_diagnostic_decl, + int kind: int ref, + int message: @string_literal_expr_or_none ref +); + +precedence_group_decls( //dir=decl + unique int id: @precedence_group_decl +); + +top_level_code_decls( //dir=decl + unique int id: @top_level_code_decl, + int body: @brace_stmt_or_none ref +); + +@value_decl = + @abstract_storage_decl +| @enum_element_decl +| @function +| @macro_decl +| @type_decl +; + +#keyset[id] +value_decls( //dir=decl + int id: @value_decl ref, + int interface_type: @type_or_none ref +); + +@abstract_storage_decl = + @subscript_decl +| @var_decl +; + +#keyset[id, index] +abstract_storage_decl_accessors( //dir=decl + int id: @abstract_storage_decl ref, + int index: int ref, + int accessor: @accessor_or_none ref +); + +enum_element_decls( //dir=decl + unique int id: @enum_element_decl, + string name: string ref +); + +#keyset[id, index] +enum_element_decl_params( //dir=decl + int id: @enum_element_decl ref, + int index: int ref, + int param: @param_decl_or_none ref +); + +@function = + @accessor_or_named_function +| @deinitializer +| @initializer +; + +infix_operator_decls( //dir=decl + unique int id: @infix_operator_decl +); + +#keyset[id] +infix_operator_decl_precedence_groups( //dir=decl + int id: @infix_operator_decl ref, + int precedence_group: @precedence_group_decl_or_none ref +); + +macro_decls( //dir=decl + unique int id: @macro_decl, + string name: string ref +); + +#keyset[id, index] +macro_decl_parameters( //dir=decl + int id: @macro_decl ref, + int index: int ref, + int parameter: @param_decl_or_none ref +); + +#keyset[id, index] +macro_decl_roles( //dir=decl + int id: @macro_decl ref, + int index: int ref, + int role: @macro_role_or_none ref +); + +postfix_operator_decls( //dir=decl + unique int id: @postfix_operator_decl +); + +prefix_operator_decls( //dir=decl + unique int id: @prefix_operator_decl +); + +@type_decl = + @abstract_type_param_decl +| @generic_type_decl +| @module_decl +; + +#keyset[id] +type_decls( //dir=decl + int id: @type_decl ref, + string name: string ref +); + +#keyset[id, index] +type_decl_inherited_types( //dir=decl + int id: @type_decl ref, + int index: int ref, + int inherited_type: @type_or_none ref +); + +@abstract_type_param_decl = + @associated_type_decl +| @generic_type_param_decl +; + +@accessor_or_named_function = + @accessor +| @named_function +; + +deinitializers( //dir=decl + unique int id: @deinitializer +); + +@generic_type_decl = + @nominal_type_decl +| @opaque_type_decl +| @type_alias_decl +; + +initializers( //dir=decl + unique int id: @initializer +); + +module_decls( //dir=decl + unique int id: @module_decl +); + +#keyset[id] +module_decl_is_builtin_module( //dir=decl + int id: @module_decl ref +); + +#keyset[id] +module_decl_is_system_module( //dir=decl + int id: @module_decl ref +); + +module_decl_imported_modules( //dir=decl + int id: @module_decl ref, + int imported_module: @module_decl_or_none ref +); + +module_decl_exported_modules( //dir=decl + int id: @module_decl ref, + int exported_module: @module_decl_or_none ref +); + +subscript_decls( //dir=decl + unique int id: @subscript_decl, + int element_type: @type_or_none ref +); + +#keyset[id, index] +subscript_decl_params( //dir=decl + int id: @subscript_decl ref, + int index: int ref, + int param: @param_decl_or_none ref +); + +@var_decl = + @concrete_var_decl +| @param_decl +; + +#keyset[id] +var_decls( //dir=decl + int id: @var_decl ref, + string name: string ref, + int type_: @type_or_none ref +); + +#keyset[id] +var_decl_attached_property_wrapper_types( //dir=decl + int id: @var_decl ref, + int attached_property_wrapper_type: @type_or_none ref +); + +#keyset[id] +var_decl_parent_patterns( //dir=decl + int id: @var_decl ref, + int parent_pattern: @pattern_or_none ref +); + +#keyset[id] +var_decl_parent_initializers( //dir=decl + int id: @var_decl ref, + int parent_initializer: @expr_or_none ref +); + +#keyset[id] +var_decl_property_wrapper_backing_var_bindings( //dir=decl + int id: @var_decl ref, + int property_wrapper_backing_var_binding: @pattern_binding_decl_or_none ref +); + +#keyset[id] +var_decl_property_wrapper_backing_vars( //dir=decl + int id: @var_decl ref, + int property_wrapper_backing_var: @var_decl_or_none ref +); + +#keyset[id] +var_decl_property_wrapper_projection_var_bindings( //dir=decl + int id: @var_decl ref, + int property_wrapper_projection_var_binding: @pattern_binding_decl_or_none ref +); + +#keyset[id] +var_decl_property_wrapper_projection_vars( //dir=decl + int id: @var_decl ref, + int property_wrapper_projection_var: @var_decl_or_none ref +); + +accessors( //dir=decl + unique int id: @accessor +); + +#keyset[id] +accessor_is_getter( //dir=decl + int id: @accessor ref +); + +#keyset[id] +accessor_is_setter( //dir=decl + int id: @accessor ref +); + +#keyset[id] +accessor_is_will_set( //dir=decl + int id: @accessor ref +); + +#keyset[id] +accessor_is_did_set( //dir=decl + int id: @accessor ref +); + +#keyset[id] +accessor_is_read( //dir=decl + int id: @accessor ref +); + +#keyset[id] +accessor_is_modify( //dir=decl + int id: @accessor ref +); + +#keyset[id] +accessor_is_unsafe_address( //dir=decl + int id: @accessor ref +); + +#keyset[id] +accessor_is_unsafe_mutable_address( //dir=decl + int id: @accessor ref +); + +associated_type_decls( //dir=decl + unique int id: @associated_type_decl +); + +concrete_var_decls( //dir=decl + unique int id: @concrete_var_decl, + int introducer_int: int ref +); + +generic_type_param_decls( //dir=decl + unique int id: @generic_type_param_decl +); + +named_functions( //dir=decl + unique int id: @named_function +); + +@nominal_type_decl = + @class_decl +| @enum_decl +| @protocol_decl +| @struct_decl +; + +#keyset[id] +nominal_type_decls( //dir=decl + int id: @nominal_type_decl ref, + int type_: @type_or_none ref +); + +opaque_type_decls( //dir=decl + unique int id: @opaque_type_decl, + int naming_declaration: @value_decl_or_none ref +); + +#keyset[id, index] +opaque_type_decl_opaque_generic_params( //dir=decl + int id: @opaque_type_decl ref, + int index: int ref, + int opaque_generic_param: @generic_type_param_type_or_none ref +); + +param_decls( //dir=decl + unique int id: @param_decl +); + +#keyset[id] +param_decl_is_inout( //dir=decl + int id: @param_decl ref +); + +#keyset[id] +param_decl_property_wrapper_local_wrapped_var_bindings( //dir=decl + int id: @param_decl ref, + int property_wrapper_local_wrapped_var_binding: @pattern_binding_decl_or_none ref +); + +#keyset[id] +param_decl_property_wrapper_local_wrapped_vars( //dir=decl + int id: @param_decl ref, + int property_wrapper_local_wrapped_var: @var_decl_or_none ref +); + +type_alias_decls( //dir=decl + unique int id: @type_alias_decl, + int aliased_type: @type_or_none ref +); + +class_decls( //dir=decl + unique int id: @class_decl +); + +enum_decls( //dir=decl + unique int id: @enum_decl +); + +protocol_decls( //dir=decl + unique int id: @protocol_decl +); + +struct_decls( //dir=decl + unique int id: @struct_decl +); + +arguments( //dir=expr + unique int id: @argument, + string label: string ref, + int expr: @expr_or_none ref +); + +@expr = + @any_try_expr +| @applied_property_wrapper_expr +| @apply_expr +| @assign_expr +| @bind_optional_expr +| @capture_list_expr +| @closure_expr +| @collection_expr +| @consume_expr +| @copy_expr +| @decl_ref_expr +| @default_argument_expr +| @discard_assignment_expr +| @dot_syntax_base_ignored_expr +| @dynamic_type_expr +| @enum_is_case_expr +| @error_expr +| @explicit_cast_expr +| @force_value_expr +| @identity_expr +| @if_expr +| @implicit_conversion_expr +| @in_out_expr +| @key_path_application_expr +| @key_path_dot_expr +| @key_path_expr +| @lazy_initialization_expr +| @literal_expr +| @lookup_expr +| @make_temporarily_escapable_expr +| @materialize_pack_expr +| @obj_c_selector_expr +| @one_way_expr +| @opaque_value_expr +| @open_existential_expr +| @optional_evaluation_expr +| @other_initializer_ref_expr +| @overloaded_decl_ref_expr +| @pack_element_expr +| @pack_expansion_expr +| @property_wrapper_value_placeholder_expr +| @rebind_self_in_initializer_expr +| @sequence_expr +| @single_value_stmt_expr +| @super_ref_expr +| @tap_expr +| @tuple_element_expr +| @tuple_expr +| @type_expr +| @unresolved_decl_ref_expr +| @unresolved_dot_expr +| @unresolved_member_expr +| @unresolved_pattern_expr +| @unresolved_specialize_expr +| @vararg_expansion_expr +; + +#keyset[id] +expr_types( //dir=expr + int id: @expr ref, + int type_: @type_or_none ref +); + +@any_try_expr = + @force_try_expr +| @optional_try_expr +| @try_expr +; + +#keyset[id] +any_try_exprs( //dir=expr + int id: @any_try_expr ref, + int sub_expr: @expr_or_none ref +); + +applied_property_wrapper_exprs( //dir=expr + unique int id: @applied_property_wrapper_expr, + int kind: int ref, + int value: @expr_or_none ref, + int param: @param_decl_or_none ref +); + +@apply_expr = + @binary_expr +| @call_expr +| @postfix_unary_expr +| @prefix_unary_expr +| @self_apply_expr +; + +#keyset[id] +apply_exprs( //dir=expr + int id: @apply_expr ref, + int function: @expr_or_none ref +); + +#keyset[id, index] +apply_expr_arguments( //dir=expr + int id: @apply_expr ref, + int index: int ref, + int argument: @argument_or_none ref +); + +assign_exprs( //dir=expr + unique int id: @assign_expr, + int dest: @expr_or_none ref, + int source: @expr_or_none ref +); + +bind_optional_exprs( //dir=expr + unique int id: @bind_optional_expr, + int sub_expr: @expr_or_none ref +); + +capture_list_exprs( //dir=expr + unique int id: @capture_list_expr, + int closure_body: @closure_expr_or_none ref +); + +#keyset[id, index] +capture_list_expr_binding_decls( //dir=expr + int id: @capture_list_expr ref, + int index: int ref, + int binding_decl: @pattern_binding_decl_or_none ref +); + +@closure_expr = + @auto_closure_expr +| @explicit_closure_expr +; + +@collection_expr = + @array_expr +| @dictionary_expr +; + +consume_exprs( //dir=expr + unique int id: @consume_expr, + int sub_expr: @expr_or_none ref +); + +copy_exprs( //dir=expr + unique int id: @copy_expr, + int sub_expr: @expr_or_none ref +); + +decl_ref_exprs( //dir=expr + unique int id: @decl_ref_expr, + int decl: @decl_or_none ref +); + +#keyset[id, index] +decl_ref_expr_replacement_types( //dir=expr + int id: @decl_ref_expr ref, + int index: int ref, + int replacement_type: @type_or_none ref +); + +#keyset[id] +decl_ref_expr_has_direct_to_storage_semantics( //dir=expr + int id: @decl_ref_expr ref +); + +#keyset[id] +decl_ref_expr_has_direct_to_implementation_semantics( //dir=expr + int id: @decl_ref_expr ref +); + +#keyset[id] +decl_ref_expr_has_ordinary_semantics( //dir=expr + int id: @decl_ref_expr ref +); + +#keyset[id] +decl_ref_expr_has_distributed_thunk_semantics( //dir=expr + int id: @decl_ref_expr ref +); + +default_argument_exprs( //dir=expr + unique int id: @default_argument_expr, + int param_decl: @param_decl_or_none ref, + int param_index: int ref +); + +#keyset[id] +default_argument_expr_caller_side_defaults( //dir=expr + int id: @default_argument_expr ref, + int caller_side_default: @expr_or_none ref +); + +discard_assignment_exprs( //dir=expr + unique int id: @discard_assignment_expr +); + +dot_syntax_base_ignored_exprs( //dir=expr + unique int id: @dot_syntax_base_ignored_expr, + int qualifier: @expr_or_none ref, + int sub_expr: @expr_or_none ref +); + +dynamic_type_exprs( //dir=expr + unique int id: @dynamic_type_expr, + int base: @expr_or_none ref +); + +enum_is_case_exprs( //dir=expr + unique int id: @enum_is_case_expr, + int sub_expr: @expr_or_none ref, + int element: @enum_element_decl_or_none ref +); + +error_exprs( //dir=expr + unique int id: @error_expr +); + +@explicit_cast_expr = + @checked_cast_expr +| @coerce_expr +; + +#keyset[id] +explicit_cast_exprs( //dir=expr + int id: @explicit_cast_expr ref, + int sub_expr: @expr_or_none ref +); + +force_value_exprs( //dir=expr + unique int id: @force_value_expr, + int sub_expr: @expr_or_none ref +); + +@identity_expr = + @await_expr +| @borrow_expr +| @dot_self_expr +| @paren_expr +| @unresolved_member_chain_result_expr +; + +#keyset[id] +identity_exprs( //dir=expr + int id: @identity_expr ref, + int sub_expr: @expr_or_none ref +); + +if_exprs( //dir=expr + unique int id: @if_expr, + int condition: @expr_or_none ref, + int then_expr: @expr_or_none ref, + int else_expr: @expr_or_none ref +); + +@implicit_conversion_expr = + @abi_safe_conversion_expr +| @any_hashable_erasure_expr +| @archetype_to_super_expr +| @array_to_pointer_expr +| @bridge_from_obj_c_expr +| @bridge_to_obj_c_expr +| @class_metatype_to_object_expr +| @collection_upcast_conversion_expr +| @conditional_bridge_from_obj_c_expr +| @covariant_function_conversion_expr +| @covariant_return_conversion_expr +| @derived_to_base_expr +| @destructure_tuple_expr +| @differentiable_function_expr +| @differentiable_function_extract_original_expr +| @erasure_expr +| @existential_metatype_to_object_expr +| @foreign_object_conversion_expr +| @function_conversion_expr +| @in_out_to_pointer_expr +| @inject_into_optional_expr +| @linear_function_expr +| @linear_function_extract_original_expr +| @linear_to_differentiable_function_expr +| @load_expr +| @metatype_conversion_expr +| @pointer_to_pointer_expr +| @protocol_metatype_to_object_expr +| @string_to_pointer_expr +| @underlying_to_opaque_expr +| @unevaluated_instance_expr +| @unresolved_type_conversion_expr +; + +#keyset[id] +implicit_conversion_exprs( //dir=expr + int id: @implicit_conversion_expr ref, + int sub_expr: @expr_or_none ref +); + +in_out_exprs( //dir=expr + unique int id: @in_out_expr, + int sub_expr: @expr_or_none ref +); + +key_path_application_exprs( //dir=expr + unique int id: @key_path_application_expr, + int base: @expr_or_none ref, + int key_path: @expr_or_none ref +); + +key_path_dot_exprs( //dir=expr + unique int id: @key_path_dot_expr +); + +key_path_exprs( //dir=expr + unique int id: @key_path_expr +); + +#keyset[id] +key_path_expr_roots( //dir=expr + int id: @key_path_expr ref, + int root: @type_repr_or_none ref +); + +#keyset[id, index] +key_path_expr_components( //dir=expr + int id: @key_path_expr ref, + int index: int ref, + int component: @key_path_component_or_none ref +); + +lazy_initialization_exprs( //dir=expr + unique int id: @lazy_initialization_expr, + int sub_expr: @expr_or_none ref +); + +@literal_expr = + @builtin_literal_expr +| @interpolated_string_literal_expr +| @nil_literal_expr +| @object_literal_expr +| @regex_literal_expr +; + +@lookup_expr = + @dynamic_lookup_expr +| @member_ref_expr +| @subscript_expr +; + +#keyset[id] +lookup_exprs( //dir=expr + int id: @lookup_expr ref, + int base: @expr_or_none ref +); + +#keyset[id] +lookup_expr_members( //dir=expr + int id: @lookup_expr ref, + int member: @decl_or_none ref +); + +make_temporarily_escapable_exprs( //dir=expr + unique int id: @make_temporarily_escapable_expr, + int escaping_closure: @opaque_value_expr_or_none ref, + int nonescaping_closure: @expr_or_none ref, + int sub_expr: @expr_or_none ref +); + +materialize_pack_exprs( //dir=expr + unique int id: @materialize_pack_expr, + int sub_expr: @expr_or_none ref +); + +obj_c_selector_exprs( //dir=expr + unique int id: @obj_c_selector_expr, + int sub_expr: @expr_or_none ref, + int method: @function_or_none ref +); + +one_way_exprs( //dir=expr + unique int id: @one_way_expr, + int sub_expr: @expr_or_none ref +); + +opaque_value_exprs( //dir=expr + unique int id: @opaque_value_expr +); + +open_existential_exprs( //dir=expr + unique int id: @open_existential_expr, + int sub_expr: @expr_or_none ref, + int existential: @expr_or_none ref, + int opaque_expr: @opaque_value_expr_or_none ref +); + +optional_evaluation_exprs( //dir=expr + unique int id: @optional_evaluation_expr, + int sub_expr: @expr_or_none ref +); + +other_initializer_ref_exprs( //dir=expr + unique int id: @other_initializer_ref_expr, + int initializer: @initializer_or_none ref +); + +overloaded_decl_ref_exprs( //dir=expr + unique int id: @overloaded_decl_ref_expr +); + +#keyset[id, index] +overloaded_decl_ref_expr_possible_declarations( //dir=expr + int id: @overloaded_decl_ref_expr ref, + int index: int ref, + int possible_declaration: @value_decl_or_none ref +); + +pack_element_exprs( //dir=expr + unique int id: @pack_element_expr, + int sub_expr: @expr_or_none ref +); + +pack_expansion_exprs( //dir=expr + unique int id: @pack_expansion_expr, + int pattern_expr: @expr_or_none ref +); + +property_wrapper_value_placeholder_exprs( //dir=expr + unique int id: @property_wrapper_value_placeholder_expr, + int placeholder: @opaque_value_expr_or_none ref +); + +#keyset[id] +property_wrapper_value_placeholder_expr_wrapped_values( //dir=expr + int id: @property_wrapper_value_placeholder_expr ref, + int wrapped_value: @expr_or_none ref +); + +rebind_self_in_initializer_exprs( //dir=expr + unique int id: @rebind_self_in_initializer_expr, + int sub_expr: @expr_or_none ref, + int self: @var_decl_or_none ref +); + +sequence_exprs( //dir=expr + unique int id: @sequence_expr +); + +#keyset[id, index] +sequence_expr_elements( //dir=expr + int id: @sequence_expr ref, + int index: int ref, + int element: @expr_or_none ref +); + +single_value_stmt_exprs( //dir=expr + unique int id: @single_value_stmt_expr, + int stmt: @stmt_or_none ref +); + +super_ref_exprs( //dir=expr + unique int id: @super_ref_expr, + int self: @var_decl_or_none ref +); + +tap_exprs( //dir=expr + unique int id: @tap_expr, + int body: @brace_stmt_or_none ref, + int var: @var_decl_or_none ref +); + +#keyset[id] +tap_expr_sub_exprs( //dir=expr + int id: @tap_expr ref, + int sub_expr: @expr_or_none ref +); + +tuple_element_exprs( //dir=expr + unique int id: @tuple_element_expr, + int sub_expr: @expr_or_none ref, + int index: int ref +); + +tuple_exprs( //dir=expr + unique int id: @tuple_expr +); + +#keyset[id, index] +tuple_expr_elements( //dir=expr + int id: @tuple_expr ref, + int index: int ref, + int element: @expr_or_none ref +); + +type_exprs( //dir=expr + unique int id: @type_expr +); + +#keyset[id] +type_expr_type_reprs( //dir=expr + int id: @type_expr ref, + int type_repr: @type_repr_or_none ref +); + +unresolved_decl_ref_exprs( //dir=expr + unique int id: @unresolved_decl_ref_expr +); + +#keyset[id] +unresolved_decl_ref_expr_names( //dir=expr + int id: @unresolved_decl_ref_expr ref, + string name: string ref +); + +unresolved_dot_exprs( //dir=expr + unique int id: @unresolved_dot_expr, + int base: @expr_or_none ref, + string name: string ref +); + +unresolved_member_exprs( //dir=expr + unique int id: @unresolved_member_expr, + string name: string ref +); + +unresolved_pattern_exprs( //dir=expr + unique int id: @unresolved_pattern_expr, + int sub_pattern: @pattern_or_none ref +); + +unresolved_specialize_exprs( //dir=expr + unique int id: @unresolved_specialize_expr, + int sub_expr: @expr_or_none ref +); + +vararg_expansion_exprs( //dir=expr + unique int id: @vararg_expansion_expr, + int sub_expr: @expr_or_none ref +); + +abi_safe_conversion_exprs( //dir=expr + unique int id: @abi_safe_conversion_expr +); + +any_hashable_erasure_exprs( //dir=expr + unique int id: @any_hashable_erasure_expr +); + +archetype_to_super_exprs( //dir=expr + unique int id: @archetype_to_super_expr +); + +array_exprs( //dir=expr + unique int id: @array_expr +); + +#keyset[id, index] +array_expr_elements( //dir=expr + int id: @array_expr ref, + int index: int ref, + int element: @expr_or_none ref +); + +array_to_pointer_exprs( //dir=expr + unique int id: @array_to_pointer_expr +); + +auto_closure_exprs( //dir=expr + unique int id: @auto_closure_expr +); + +await_exprs( //dir=expr + unique int id: @await_expr +); + +binary_exprs( //dir=expr + unique int id: @binary_expr +); + +borrow_exprs( //dir=expr + unique int id: @borrow_expr +); + +bridge_from_obj_c_exprs( //dir=expr + unique int id: @bridge_from_obj_c_expr +); + +bridge_to_obj_c_exprs( //dir=expr + unique int id: @bridge_to_obj_c_expr +); + +@builtin_literal_expr = + @boolean_literal_expr +| @magic_identifier_literal_expr +| @number_literal_expr +| @string_literal_expr +; + +call_exprs( //dir=expr + unique int id: @call_expr +); + +@checked_cast_expr = + @conditional_checked_cast_expr +| @forced_checked_cast_expr +| @is_expr +; + +class_metatype_to_object_exprs( //dir=expr + unique int id: @class_metatype_to_object_expr +); + +coerce_exprs( //dir=expr + unique int id: @coerce_expr +); + +collection_upcast_conversion_exprs( //dir=expr + unique int id: @collection_upcast_conversion_expr +); + +conditional_bridge_from_obj_c_exprs( //dir=expr + unique int id: @conditional_bridge_from_obj_c_expr +); + +covariant_function_conversion_exprs( //dir=expr + unique int id: @covariant_function_conversion_expr +); + +covariant_return_conversion_exprs( //dir=expr + unique int id: @covariant_return_conversion_expr +); + +derived_to_base_exprs( //dir=expr + unique int id: @derived_to_base_expr +); + +destructure_tuple_exprs( //dir=expr + unique int id: @destructure_tuple_expr +); + +dictionary_exprs( //dir=expr + unique int id: @dictionary_expr +); + +#keyset[id, index] +dictionary_expr_elements( //dir=expr + int id: @dictionary_expr ref, + int index: int ref, + int element: @expr_or_none ref +); + +differentiable_function_exprs( //dir=expr + unique int id: @differentiable_function_expr +); + +differentiable_function_extract_original_exprs( //dir=expr + unique int id: @differentiable_function_extract_original_expr +); + +dot_self_exprs( //dir=expr + unique int id: @dot_self_expr +); + +@dynamic_lookup_expr = + @dynamic_member_ref_expr +| @dynamic_subscript_expr +; + +erasure_exprs( //dir=expr + unique int id: @erasure_expr +); + +existential_metatype_to_object_exprs( //dir=expr + unique int id: @existential_metatype_to_object_expr +); + +explicit_closure_exprs( //dir=expr + unique int id: @explicit_closure_expr +); + +force_try_exprs( //dir=expr + unique int id: @force_try_expr +); + +foreign_object_conversion_exprs( //dir=expr + unique int id: @foreign_object_conversion_expr +); + +function_conversion_exprs( //dir=expr + unique int id: @function_conversion_expr +); + +in_out_to_pointer_exprs( //dir=expr + unique int id: @in_out_to_pointer_expr +); + +inject_into_optional_exprs( //dir=expr + unique int id: @inject_into_optional_expr +); + +interpolated_string_literal_exprs( //dir=expr + unique int id: @interpolated_string_literal_expr +); + +#keyset[id] +interpolated_string_literal_expr_interpolation_exprs( //dir=expr + int id: @interpolated_string_literal_expr ref, + int interpolation_expr: @opaque_value_expr_or_none ref +); + +#keyset[id] +interpolated_string_literal_expr_appending_exprs( //dir=expr + int id: @interpolated_string_literal_expr ref, + int appending_expr: @tap_expr_or_none ref +); + +linear_function_exprs( //dir=expr + unique int id: @linear_function_expr +); + +linear_function_extract_original_exprs( //dir=expr + unique int id: @linear_function_extract_original_expr +); + +linear_to_differentiable_function_exprs( //dir=expr + unique int id: @linear_to_differentiable_function_expr +); + +load_exprs( //dir=expr + unique int id: @load_expr +); + +member_ref_exprs( //dir=expr + unique int id: @member_ref_expr +); + +#keyset[id] +member_ref_expr_has_direct_to_storage_semantics( //dir=expr + int id: @member_ref_expr ref +); + +#keyset[id] +member_ref_expr_has_direct_to_implementation_semantics( //dir=expr + int id: @member_ref_expr ref +); + +#keyset[id] +member_ref_expr_has_ordinary_semantics( //dir=expr + int id: @member_ref_expr ref +); + +#keyset[id] +member_ref_expr_has_distributed_thunk_semantics( //dir=expr + int id: @member_ref_expr ref +); + +metatype_conversion_exprs( //dir=expr + unique int id: @metatype_conversion_expr +); + +nil_literal_exprs( //dir=expr + unique int id: @nil_literal_expr +); + +object_literal_exprs( //dir=expr + unique int id: @object_literal_expr, + int kind: int ref +); + +#keyset[id, index] +object_literal_expr_arguments( //dir=expr + int id: @object_literal_expr ref, + int index: int ref, + int argument: @argument_or_none ref +); + +optional_try_exprs( //dir=expr + unique int id: @optional_try_expr +); + +paren_exprs( //dir=expr + unique int id: @paren_expr +); + +pointer_to_pointer_exprs( //dir=expr + unique int id: @pointer_to_pointer_expr +); + +postfix_unary_exprs( //dir=expr + unique int id: @postfix_unary_expr +); + +prefix_unary_exprs( //dir=expr + unique int id: @prefix_unary_expr +); + +protocol_metatype_to_object_exprs( //dir=expr + unique int id: @protocol_metatype_to_object_expr +); + +regex_literal_exprs( //dir=expr + unique int id: @regex_literal_expr, + string pattern: string ref, + int version: int ref +); + +@self_apply_expr = + @dot_syntax_call_expr +| @initializer_ref_call_expr +; + +#keyset[id] +self_apply_exprs( //dir=expr + int id: @self_apply_expr ref, + int base: @expr_or_none ref +); + +string_to_pointer_exprs( //dir=expr + unique int id: @string_to_pointer_expr +); + +subscript_exprs( //dir=expr + unique int id: @subscript_expr +); + +#keyset[id, index] +subscript_expr_arguments( //dir=expr + int id: @subscript_expr ref, + int index: int ref, + int argument: @argument_or_none ref +); + +#keyset[id] +subscript_expr_has_direct_to_storage_semantics( //dir=expr + int id: @subscript_expr ref +); + +#keyset[id] +subscript_expr_has_direct_to_implementation_semantics( //dir=expr + int id: @subscript_expr ref +); + +#keyset[id] +subscript_expr_has_ordinary_semantics( //dir=expr + int id: @subscript_expr ref +); + +#keyset[id] +subscript_expr_has_distributed_thunk_semantics( //dir=expr + int id: @subscript_expr ref +); + +try_exprs( //dir=expr + unique int id: @try_expr +); + +underlying_to_opaque_exprs( //dir=expr + unique int id: @underlying_to_opaque_expr +); + +unevaluated_instance_exprs( //dir=expr + unique int id: @unevaluated_instance_expr +); + +unresolved_member_chain_result_exprs( //dir=expr + unique int id: @unresolved_member_chain_result_expr +); + +unresolved_type_conversion_exprs( //dir=expr + unique int id: @unresolved_type_conversion_expr +); + +boolean_literal_exprs( //dir=expr + unique int id: @boolean_literal_expr, + boolean value: boolean ref +); + +conditional_checked_cast_exprs( //dir=expr + unique int id: @conditional_checked_cast_expr +); + +dot_syntax_call_exprs( //dir=expr + unique int id: @dot_syntax_call_expr +); + +dynamic_member_ref_exprs( //dir=expr + unique int id: @dynamic_member_ref_expr +); + +dynamic_subscript_exprs( //dir=expr + unique int id: @dynamic_subscript_expr +); + +forced_checked_cast_exprs( //dir=expr + unique int id: @forced_checked_cast_expr +); + +initializer_ref_call_exprs( //dir=expr + unique int id: @initializer_ref_call_expr +); + +is_exprs( //dir=expr + unique int id: @is_expr +); + +magic_identifier_literal_exprs( //dir=expr + unique int id: @magic_identifier_literal_expr, + string kind: string ref +); + +@number_literal_expr = + @float_literal_expr +| @integer_literal_expr +; + +string_literal_exprs( //dir=expr + unique int id: @string_literal_expr, + string value: string ref +); + +float_literal_exprs( //dir=expr + unique int id: @float_literal_expr, + string string_value: string ref +); + +integer_literal_exprs( //dir=expr + unique int id: @integer_literal_expr, + string string_value: string ref +); + +@pattern = + @any_pattern +| @binding_pattern +| @bool_pattern +| @enum_element_pattern +| @expr_pattern +| @is_pattern +| @named_pattern +| @optional_some_pattern +| @paren_pattern +| @tuple_pattern +| @typed_pattern +; + +#keyset[id] +pattern_types( //dir=pattern + int id: @pattern ref, + int type_: @type_or_none ref +); + +any_patterns( //dir=pattern + unique int id: @any_pattern +); + +binding_patterns( //dir=pattern + unique int id: @binding_pattern, + int sub_pattern: @pattern_or_none ref +); + +bool_patterns( //dir=pattern + unique int id: @bool_pattern, + boolean value: boolean ref +); + +enum_element_patterns( //dir=pattern + unique int id: @enum_element_pattern, + int element: @enum_element_decl_or_none ref +); + +#keyset[id] +enum_element_pattern_sub_patterns( //dir=pattern + int id: @enum_element_pattern ref, + int sub_pattern: @pattern_or_none ref +); + +expr_patterns( //dir=pattern + unique int id: @expr_pattern, + int sub_expr: @expr_or_none ref +); + +is_patterns( //dir=pattern + unique int id: @is_pattern +); + +#keyset[id] +is_pattern_cast_type_reprs( //dir=pattern + int id: @is_pattern ref, + int cast_type_repr: @type_repr_or_none ref +); + +#keyset[id] +is_pattern_sub_patterns( //dir=pattern + int id: @is_pattern ref, + int sub_pattern: @pattern_or_none ref +); + +named_patterns( //dir=pattern + unique int id: @named_pattern, + int var_decl: @var_decl_or_none ref +); + +optional_some_patterns( //dir=pattern + unique int id: @optional_some_pattern, + int sub_pattern: @pattern_or_none ref +); + +paren_patterns( //dir=pattern + unique int id: @paren_pattern, + int sub_pattern: @pattern_or_none ref +); + +tuple_patterns( //dir=pattern + unique int id: @tuple_pattern +); + +#keyset[id, index] +tuple_pattern_elements( //dir=pattern + int id: @tuple_pattern ref, + int index: int ref, + int element: @pattern_or_none ref +); + +typed_patterns( //dir=pattern + unique int id: @typed_pattern, + int sub_pattern: @pattern_or_none ref +); + +#keyset[id] +typed_pattern_type_reprs( //dir=pattern + int id: @typed_pattern ref, + int type_repr: @type_repr_or_none ref +); + +case_label_items( //dir=stmt + unique int id: @case_label_item, + int pattern: @pattern_or_none ref +); + +#keyset[id] +case_label_item_guards( //dir=stmt + int id: @case_label_item ref, + int guard: @expr_or_none ref +); + +condition_elements( //dir=stmt + unique int id: @condition_element +); + +#keyset[id] +condition_element_booleans( //dir=stmt + int id: @condition_element ref, + int boolean_: @expr_or_none ref +); + +#keyset[id] +condition_element_patterns( //dir=stmt + int id: @condition_element ref, + int pattern: @pattern_or_none ref +); + +#keyset[id] +condition_element_initializers( //dir=stmt + int id: @condition_element ref, + int initializer: @expr_or_none ref +); + +#keyset[id] +condition_element_availabilities( //dir=stmt + int id: @condition_element ref, + int availability: @availability_info_or_none ref +); + +@stmt = + @brace_stmt +| @break_stmt +| @case_stmt +| @continue_stmt +| @defer_stmt +| @discard_stmt +| @fail_stmt +| @fallthrough_stmt +| @labeled_stmt +| @pound_assert_stmt +| @return_stmt +| @then_stmt +| @throw_stmt +| @yield_stmt +; + +stmt_conditions( //dir=stmt + unique int id: @stmt_condition +); + +#keyset[id, index] +stmt_condition_elements( //dir=stmt + int id: @stmt_condition ref, + int index: int ref, + int element: @condition_element_or_none ref +); + +brace_stmts( //dir=stmt + unique int id: @brace_stmt +); + +#keyset[id, index] +brace_stmt_elements( //dir=stmt + int id: @brace_stmt ref, + int index: int ref, + int element: @ast_node_or_none ref +); + +break_stmts( //dir=stmt + unique int id: @break_stmt +); + +#keyset[id] +break_stmt_target_names( //dir=stmt + int id: @break_stmt ref, + string target_name: string ref +); + +#keyset[id] +break_stmt_targets( //dir=stmt + int id: @break_stmt ref, + int target: @stmt_or_none ref +); + +case_stmts( //dir=stmt + unique int id: @case_stmt, + int body: @stmt_or_none ref +); + +#keyset[id, index] +case_stmt_labels( //dir=stmt + int id: @case_stmt ref, + int index: int ref, + int label: @case_label_item_or_none ref +); + +#keyset[id, index] +case_stmt_variables( //dir=stmt + int id: @case_stmt ref, + int index: int ref, + int variable: @var_decl_or_none ref +); + +continue_stmts( //dir=stmt + unique int id: @continue_stmt +); + +#keyset[id] +continue_stmt_target_names( //dir=stmt + int id: @continue_stmt ref, + string target_name: string ref +); + +#keyset[id] +continue_stmt_targets( //dir=stmt + int id: @continue_stmt ref, + int target: @stmt_or_none ref +); + +defer_stmts( //dir=stmt + unique int id: @defer_stmt, + int body: @brace_stmt_or_none ref +); + +discard_stmts( //dir=stmt + unique int id: @discard_stmt, + int sub_expr: @expr_or_none ref +); + +fail_stmts( //dir=stmt + unique int id: @fail_stmt +); + +fallthrough_stmts( //dir=stmt + unique int id: @fallthrough_stmt, + int fallthrough_source: @case_stmt_or_none ref, + int fallthrough_dest: @case_stmt_or_none ref +); + +@labeled_stmt = + @do_catch_stmt +| @do_stmt +| @for_each_stmt +| @labeled_conditional_stmt +| @repeat_while_stmt +| @switch_stmt +; + +#keyset[id] +labeled_stmt_labels( //dir=stmt + int id: @labeled_stmt ref, + string label: string ref +); + +pound_assert_stmts( //dir=stmt + unique int id: @pound_assert_stmt, + int condition: @expr_or_none ref, + string message: string ref +); + +return_stmts( //dir=stmt + unique int id: @return_stmt +); + +#keyset[id] +return_stmt_results( //dir=stmt + int id: @return_stmt ref, + int result: @expr_or_none ref +); + +then_stmts( //dir=stmt + unique int id: @then_stmt, + int result: @expr_or_none ref +); + +throw_stmts( //dir=stmt + unique int id: @throw_stmt, + int sub_expr: @expr_or_none ref +); + +yield_stmts( //dir=stmt + unique int id: @yield_stmt +); + +#keyset[id, index] +yield_stmt_results( //dir=stmt + int id: @yield_stmt ref, + int index: int ref, + int result: @expr_or_none ref +); + +do_catch_stmts( //dir=stmt + unique int id: @do_catch_stmt, + int body: @stmt_or_none ref +); + +#keyset[id, index] +do_catch_stmt_catches( //dir=stmt + int id: @do_catch_stmt ref, + int index: int ref, + int catch: @case_stmt_or_none ref +); + +do_stmts( //dir=stmt + unique int id: @do_stmt, + int body: @brace_stmt_or_none ref +); + +for_each_stmts( //dir=stmt + unique int id: @for_each_stmt, + int pattern: @pattern_or_none ref, + int body: @brace_stmt_or_none ref +); + +#keyset[id] +for_each_stmt_wheres( //dir=stmt + int id: @for_each_stmt ref, + int where: @expr_or_none ref +); + +#keyset[id] +for_each_stmt_iterator_vars( //dir=stmt + int id: @for_each_stmt ref, + int iteratorVar: @pattern_binding_decl_or_none ref +); + +#keyset[id] +for_each_stmt_next_calls( //dir=stmt + int id: @for_each_stmt ref, + int nextCall: @expr_or_none ref +); + +@labeled_conditional_stmt = + @guard_stmt +| @if_stmt +| @while_stmt +; + +#keyset[id] +labeled_conditional_stmts( //dir=stmt + int id: @labeled_conditional_stmt ref, + int condition: @stmt_condition_or_none ref +); + +repeat_while_stmts( //dir=stmt + unique int id: @repeat_while_stmt, + int condition: @expr_or_none ref, + int body: @stmt_or_none ref +); + +switch_stmts( //dir=stmt + unique int id: @switch_stmt, + int expr: @expr_or_none ref +); + +#keyset[id, index] +switch_stmt_cases( //dir=stmt + int id: @switch_stmt ref, + int index: int ref, + int case_: @case_stmt_or_none ref +); + +guard_stmts( //dir=stmt + unique int id: @guard_stmt, + int body: @brace_stmt_or_none ref +); + +if_stmts( //dir=stmt + unique int id: @if_stmt, + int then: @stmt_or_none ref +); + +#keyset[id] +if_stmt_elses( //dir=stmt + int id: @if_stmt ref, + int else: @stmt_or_none ref +); + +while_stmts( //dir=stmt + unique int id: @while_stmt, + int body: @stmt_or_none ref +); + +@type = + @any_function_type +| @any_generic_type +| @any_metatype_type +| @builtin_type +| @dependent_member_type +| @dynamic_self_type +| @error_type +| @existential_type +| @in_out_type +| @l_value_type +| @module_type +| @pack_element_type +| @pack_expansion_type +| @pack_type +| @parameterized_protocol_type +| @protocol_composition_type +| @reference_storage_type +| @substitutable_type +| @sugar_type +| @tuple_type +| @unresolved_type +; + +#keyset[id] +types( //dir=type + int id: @type ref, + string name: string ref, + int canonical_type: @type_or_none ref +); + +type_reprs( //dir=type + unique int id: @type_repr, + int type_: @type_or_none ref +); + +@any_function_type = + @function_type +| @generic_function_type +; + +#keyset[id] +any_function_types( //dir=type + int id: @any_function_type ref, + int result: @type_or_none ref +); + +#keyset[id, index] +any_function_type_param_types( //dir=type + int id: @any_function_type ref, + int index: int ref, + int param_type: @type_or_none ref +); + +#keyset[id] +any_function_type_is_throwing( //dir=type + int id: @any_function_type ref +); + +#keyset[id] +any_function_type_is_async( //dir=type + int id: @any_function_type ref +); + +@any_generic_type = + @nominal_or_bound_generic_nominal_type +| @unbound_generic_type +; + +#keyset[id] +any_generic_types( //dir=type + int id: @any_generic_type ref, + int declaration: @generic_type_decl_or_none ref +); + +#keyset[id] +any_generic_type_parents( //dir=type + int id: @any_generic_type ref, + int parent: @type_or_none ref +); + +@any_metatype_type = + @existential_metatype_type +| @metatype_type +; + +@builtin_type = + @any_builtin_integer_type +| @builtin_bridge_object_type +| @builtin_default_actor_storage_type +| @builtin_executor_type +| @builtin_float_type +| @builtin_job_type +| @builtin_native_object_type +| @builtin_raw_pointer_type +| @builtin_raw_unsafe_continuation_type +| @builtin_unsafe_value_buffer_type +| @builtin_vector_type +; + +dependent_member_types( //dir=type + unique int id: @dependent_member_type, + int base_type: @type_or_none ref, + int associated_type_decl: @associated_type_decl_or_none ref +); + +dynamic_self_types( //dir=type + unique int id: @dynamic_self_type, + int static_self_type: @type_or_none ref +); + +error_types( //dir=type + unique int id: @error_type +); + +existential_types( //dir=type + unique int id: @existential_type, + int constraint: @type_or_none ref +); + +in_out_types( //dir=type + unique int id: @in_out_type, + int object_type: @type_or_none ref +); + +l_value_types( //dir=type + unique int id: @l_value_type, + int object_type: @type_or_none ref +); + +module_types( //dir=type + unique int id: @module_type, + int module: @module_decl_or_none ref +); + +pack_element_types( //dir=type + unique int id: @pack_element_type, + int pack_type: @type_or_none ref +); + +pack_expansion_types( //dir=type + unique int id: @pack_expansion_type, + int pattern_type: @type_or_none ref, + int count_type: @type_or_none ref +); + +pack_types( //dir=type + unique int id: @pack_type +); + +#keyset[id, index] +pack_type_elements( //dir=type + int id: @pack_type ref, + int index: int ref, + int element: @type_or_none ref +); + +parameterized_protocol_types( //dir=type + unique int id: @parameterized_protocol_type, + int base: @protocol_type_or_none ref +); + +#keyset[id, index] +parameterized_protocol_type_args( //dir=type + int id: @parameterized_protocol_type ref, + int index: int ref, + int arg: @type_or_none ref +); + +protocol_composition_types( //dir=type + unique int id: @protocol_composition_type +); + +#keyset[id, index] +protocol_composition_type_members( //dir=type + int id: @protocol_composition_type ref, + int index: int ref, + int member: @type_or_none ref +); + +@reference_storage_type = + @unmanaged_storage_type +| @unowned_storage_type +| @weak_storage_type +; + +#keyset[id] +reference_storage_types( //dir=type + int id: @reference_storage_type ref, + int referent_type: @type_or_none ref +); + +@substitutable_type = + @archetype_type +| @generic_type_param_type +; + +@sugar_type = + @paren_type +| @syntax_sugar_type +| @type_alias_type +; + +tuple_types( //dir=type + unique int id: @tuple_type +); + +#keyset[id, index] +tuple_type_types( //dir=type + int id: @tuple_type ref, + int index: int ref, + int type_: @type_or_none ref +); + +#keyset[id, index] +tuple_type_names( //dir=type + int id: @tuple_type ref, + int index: int ref, + string name: string ref +); + +unresolved_types( //dir=type + unique int id: @unresolved_type +); + +@any_builtin_integer_type = + @builtin_integer_literal_type +| @builtin_integer_type +; + +@archetype_type = + @local_archetype_type +| @opaque_type_archetype_type +| @pack_archetype_type +| @primary_archetype_type +; + +#keyset[id] +archetype_types( //dir=type + int id: @archetype_type ref, + int interface_type: @type_or_none ref +); + +#keyset[id] +archetype_type_superclasses( //dir=type + int id: @archetype_type ref, + int superclass: @type_or_none ref +); + +#keyset[id, index] +archetype_type_protocols( //dir=type + int id: @archetype_type ref, + int index: int ref, + int protocol: @protocol_decl_or_none ref +); + +builtin_bridge_object_types( //dir=type + unique int id: @builtin_bridge_object_type +); + +builtin_default_actor_storage_types( //dir=type + unique int id: @builtin_default_actor_storage_type +); + +builtin_executor_types( //dir=type + unique int id: @builtin_executor_type +); + +builtin_float_types( //dir=type + unique int id: @builtin_float_type +); + +builtin_job_types( //dir=type + unique int id: @builtin_job_type +); + +builtin_native_object_types( //dir=type + unique int id: @builtin_native_object_type +); + +builtin_raw_pointer_types( //dir=type + unique int id: @builtin_raw_pointer_type +); + +builtin_raw_unsafe_continuation_types( //dir=type + unique int id: @builtin_raw_unsafe_continuation_type +); + +builtin_unsafe_value_buffer_types( //dir=type + unique int id: @builtin_unsafe_value_buffer_type +); + +builtin_vector_types( //dir=type + unique int id: @builtin_vector_type +); + +existential_metatype_types( //dir=type + unique int id: @existential_metatype_type +); + +function_types( //dir=type + unique int id: @function_type +); + +generic_function_types( //dir=type + unique int id: @generic_function_type +); + +#keyset[id, index] +generic_function_type_generic_params( //dir=type + int id: @generic_function_type ref, + int index: int ref, + int generic_param: @generic_type_param_type_or_none ref +); + +generic_type_param_types( //dir=type + unique int id: @generic_type_param_type +); + +metatype_types( //dir=type + unique int id: @metatype_type +); + +@nominal_or_bound_generic_nominal_type = + @bound_generic_type +| @nominal_type +; + +paren_types( //dir=type + unique int id: @paren_type, + int type_: @type_or_none ref +); + +@syntax_sugar_type = + @dictionary_type +| @unary_syntax_sugar_type +; + +type_alias_types( //dir=type + unique int id: @type_alias_type, + int decl: @type_alias_decl_or_none ref +); + +unbound_generic_types( //dir=type + unique int id: @unbound_generic_type +); + +unmanaged_storage_types( //dir=type + unique int id: @unmanaged_storage_type +); + +unowned_storage_types( //dir=type + unique int id: @unowned_storage_type +); + +weak_storage_types( //dir=type + unique int id: @weak_storage_type +); + +@bound_generic_type = + @bound_generic_class_type +| @bound_generic_enum_type +| @bound_generic_struct_type +; + +#keyset[id, index] +bound_generic_type_arg_types( //dir=type + int id: @bound_generic_type ref, + int index: int ref, + int arg_type: @type_or_none ref +); + +builtin_integer_literal_types( //dir=type + unique int id: @builtin_integer_literal_type +); + +builtin_integer_types( //dir=type + unique int id: @builtin_integer_type +); + +#keyset[id] +builtin_integer_type_widths( //dir=type + int id: @builtin_integer_type ref, + int width: int ref +); + +dictionary_types( //dir=type + unique int id: @dictionary_type, + int key_type: @type_or_none ref, + int value_type: @type_or_none ref +); + +@local_archetype_type = + @element_archetype_type +| @opened_archetype_type +; + +@nominal_type = + @class_type +| @enum_type +| @protocol_type +| @struct_type +; + +opaque_type_archetype_types( //dir=type + unique int id: @opaque_type_archetype_type, + int declaration: @opaque_type_decl_or_none ref +); + +pack_archetype_types( //dir=type + unique int id: @pack_archetype_type +); + +primary_archetype_types( //dir=type + unique int id: @primary_archetype_type +); + +@unary_syntax_sugar_type = + @array_slice_type +| @optional_type +| @variadic_sequence_type +; + +#keyset[id] +unary_syntax_sugar_types( //dir=type + int id: @unary_syntax_sugar_type ref, + int base_type: @type_or_none ref +); + +array_slice_types( //dir=type + unique int id: @array_slice_type +); + +bound_generic_class_types( //dir=type + unique int id: @bound_generic_class_type +); + +bound_generic_enum_types( //dir=type + unique int id: @bound_generic_enum_type +); + +bound_generic_struct_types( //dir=type + unique int id: @bound_generic_struct_type +); + +class_types( //dir=type + unique int id: @class_type +); + +element_archetype_types( //dir=type + unique int id: @element_archetype_type +); + +enum_types( //dir=type + unique int id: @enum_type +); + +opened_archetype_types( //dir=type + unique int id: @opened_archetype_type +); + +optional_types( //dir=type + unique int id: @optional_type +); + +protocol_types( //dir=type + unique int id: @protocol_type +); + +struct_types( //dir=type + unique int id: @struct_type +); + +variadic_sequence_types( //dir=type + unique int id: @variadic_sequence_type +); + +@accessor_or_none = + @accessor +| @unspecified_element +; + +@argument_or_none = + @argument +| @unspecified_element +; + +@associated_type_decl_or_none = + @associated_type_decl +| @unspecified_element +; + +@ast_node_or_none = + @ast_node +| @unspecified_element +; + +@availability_info_or_none = + @availability_info +| @unspecified_element +; + +@availability_spec_or_none = + @availability_spec +| @unspecified_element +; + +@brace_stmt_or_none = + @brace_stmt +| @unspecified_element +; + +@captured_decl_or_none = + @captured_decl +| @unspecified_element +; + +@case_label_item_or_none = + @case_label_item +| @unspecified_element +; + +@case_stmt_or_none = + @case_stmt +| @unspecified_element +; + +@closure_expr_or_none = + @closure_expr +| @unspecified_element +; + +@condition_element_or_none = + @condition_element +| @unspecified_element +; + +@decl_or_none = + @decl +| @unspecified_element +; + +@enum_element_decl_or_none = + @enum_element_decl +| @unspecified_element +; + +@expr_or_none = + @expr +| @unspecified_element +; + +@file_or_none = + @file +| @unspecified_element +; + +@function_or_none = + @function +| @unspecified_element +; + +@generic_type_decl_or_none = + @generic_type_decl +| @unspecified_element +; + +@generic_type_param_decl_or_none = + @generic_type_param_decl +| @unspecified_element +; + +@generic_type_param_type_or_none = + @generic_type_param_type +| @unspecified_element +; + +@initializer_or_none = + @initializer +| @unspecified_element +; + +@key_path_component_or_none = + @key_path_component +| @unspecified_element +; + +@location_or_none = + @location +| @unspecified_element +; + +@macro_role_or_none = + @macro_role +| @unspecified_element +; + +@module_decl_or_none = + @module_decl +| @unspecified_element +; + +@nominal_type_decl_or_none = + @nominal_type_decl +| @unspecified_element +; + +@opaque_type_decl_or_none = + @opaque_type_decl +| @unspecified_element +; + +@opaque_value_expr_or_none = + @opaque_value_expr +| @unspecified_element +; + +@param_decl_or_none = + @param_decl +| @unspecified_element +; + +@pattern_or_none = + @pattern +| @unspecified_element +; + +@pattern_binding_decl_or_none = + @pattern_binding_decl +| @unspecified_element +; + +@precedence_group_decl_or_none = + @precedence_group_decl +| @unspecified_element +; + +@protocol_decl_or_none = + @protocol_decl +| @unspecified_element +; + +@protocol_type_or_none = + @protocol_type +| @unspecified_element +; + +@stmt_or_none = + @stmt +| @unspecified_element +; + +@stmt_condition_or_none = + @stmt_condition +| @unspecified_element +; + +@string_literal_expr_or_none = + @string_literal_expr +| @unspecified_element +; + +@tap_expr_or_none = + @tap_expr +| @unspecified_element +; + +@type_or_none = + @type +| @unspecified_element +; + +@type_alias_decl_or_none = + @type_alias_decl +| @unspecified_element +; + +@type_expr_or_none = + @type_expr +| @unspecified_element +; + +@type_repr_or_none = + @type_repr +| @unspecified_element +; + +@value_decl_or_none = + @unspecified_element +| @value_decl +; + +@var_decl_or_none = + @unspecified_element +| @var_decl +; diff --git a/swift/ql/lib/upgrades/60be249ad164f6e4b43c203323f1b3956dc97c2f/upgrade.properties b/swift/ql/lib/upgrades/60be249ad164f6e4b43c203323f1b3956dc97c2f/upgrade.properties new file mode 100644 index 00000000000..0f8b0c447b5 --- /dev/null +++ b/swift/ql/lib/upgrades/60be249ad164f6e4b43c203323f1b3956dc97c2f/upgrade.properties @@ -0,0 +1,2 @@ +description: Add `ThenStmt` wrapper nodes. +compatibility: full diff --git a/swift/ql/src/CHANGELOG.md b/swift/ql/src/CHANGELOG.md index 96615d06972..2b745bd7bb1 100644 --- a/swift/ql/src/CHANGELOG.md +++ b/swift/ql/src/CHANGELOG.md @@ -1,3 +1,19 @@ +## 0.3.13 + +No user-facing changes. + +## 0.3.12 + +No user-facing changes. + +## 0.3.11 + +No user-facing changes. + +## 0.3.10 + +No user-facing changes. + ## 0.3.9 ### New Queries diff --git a/swift/ql/src/change-notes/released/0.3.10.md b/swift/ql/src/change-notes/released/0.3.10.md new file mode 100644 index 00000000000..925a48fc52e --- /dev/null +++ b/swift/ql/src/change-notes/released/0.3.10.md @@ -0,0 +1,3 @@ +## 0.3.10 + +No user-facing changes. diff --git a/swift/ql/src/change-notes/released/0.3.11.md b/swift/ql/src/change-notes/released/0.3.11.md new file mode 100644 index 00000000000..10d35144a4a --- /dev/null +++ b/swift/ql/src/change-notes/released/0.3.11.md @@ -0,0 +1,3 @@ +## 0.3.11 + +No user-facing changes. diff --git a/swift/ql/src/change-notes/released/0.3.12.md b/swift/ql/src/change-notes/released/0.3.12.md new file mode 100644 index 00000000000..8ccc61b9812 --- /dev/null +++ b/swift/ql/src/change-notes/released/0.3.12.md @@ -0,0 +1,3 @@ +## 0.3.12 + +No user-facing changes. diff --git a/swift/ql/src/change-notes/released/0.3.13.md b/swift/ql/src/change-notes/released/0.3.13.md new file mode 100644 index 00000000000..890ab1e3e3f --- /dev/null +++ b/swift/ql/src/change-notes/released/0.3.13.md @@ -0,0 +1,3 @@ +## 0.3.13 + +No user-facing changes. diff --git a/swift/ql/src/codeql-pack.release.yml b/swift/ql/src/codeql-pack.release.yml index 3fa5180bcb4..8791b4867d1 100644 --- a/swift/ql/src/codeql-pack.release.yml +++ b/swift/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.3.9 +lastReleaseVersion: 0.3.13 diff --git a/swift/ql/src/diagnostics/SuccessfullyExtractedLines.ql b/swift/ql/src/diagnostics/SuccessfullyExtractedLines.ql index 373b6c4bd0f..5aec16da4ef 100644 --- a/swift/ql/src/diagnostics/SuccessfullyExtractedLines.ql +++ b/swift/ql/src/diagnostics/SuccessfullyExtractedLines.ql @@ -4,6 +4,7 @@ * @kind metric * @id swift/diagnostics/successfully-extracted-lines * @tags summary + * debug */ import swift diff --git a/swift/ql/src/qlpack.yml b/swift/ql/src/qlpack.yml index e3ead42c98b..2ab77eb339d 100644 --- a/swift/ql/src/qlpack.yml +++ b/swift/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/swift-queries -version: 0.3.10-dev +version: 0.3.14-dev groups: - swift - queries diff --git a/swift/ql/test/extractor-tests/expressions/all.expected b/swift/ql/test/extractor-tests/expressions/all.expected index 927a7099bac..bc8fae6529b 100644 --- a/swift/ql/test/extractor-tests/expressions/all.expected +++ b/swift/ql/test/extractor-tests/expressions/all.expected @@ -31,7 +31,7 @@ | expressions.swift:15:11:15:11 | Int.Type | TypeExpr | | expressions.swift:15:14:15:14 | 0 | IntegerLiteralExpr | | expressions.swift:16:11:16:11 | AnError.Type | TypeExpr | -| expressions.swift:16:11:16:19 | (Error) ... | ErasureExpr | +| expressions.swift:16:11:16:19 | (any Error) ... | ErasureExpr | | expressions.swift:16:11:16:19 | .failed | MethodLookupExpr | | expressions.swift:16:19:16:19 | failed | DeclRefExpr | | expressions.swift:20:1:20:16 | try! ... | ForceTryExpr | diff --git a/swift/ql/test/extractor-tests/generated/expr/ImplicitConversionExpr/ImplicitConversionExpr.expected b/swift/ql/test/extractor-tests/generated/expr/ImplicitConversionExpr/ImplicitConversionExpr.expected index 90e2af39d30..9baeaf41241 100644 --- a/swift/ql/test/extractor-tests/generated/expr/ImplicitConversionExpr/ImplicitConversionExpr.expected +++ b/swift/ql/test/extractor-tests/generated/expr/ImplicitConversionExpr/ImplicitConversionExpr.expected @@ -1,5 +1,5 @@ | implicit_conversions.swift:2:3:2:3 | (UnsafePointer) ... | StringToPointerExpr | hasType: | yes | getSubExpr: | implicit_conversions.swift:2:3:2:3 | Hello | | implicit_conversions.swift:4:16:4:16 | (Int?) ... | InjectIntoOptionalExpr | hasType: | yes | getSubExpr: | implicit_conversions.swift:4:16:4:16 | 42 | -| implicit_conversions.swift:5:25:5:25 | (Equatable) ... | ErasureExpr | hasType: | yes | getSubExpr: | implicit_conversions.swift:5:25:5:25 | 42 | +| implicit_conversions.swift:5:25:5:25 | (any Equatable) ... | ErasureExpr | hasType: | yes | getSubExpr: | implicit_conversions.swift:5:25:5:25 | 42 | | implicit_conversions.swift:12:3:12:5 | (@lvalue (() -> Void)?) ... | AbiSafeConversionExpr | hasType: | yes | getSubExpr: | implicit_conversions.swift:12:3:12:5 | .b | | implicit_conversions.swift:12:9:12:10 | ((() -> Void)?) ... | InjectIntoOptionalExpr | hasType: | yes | getSubExpr: | implicit_conversions.swift:12:9:12:10 | { ... } | diff --git a/swift/ql/test/extractor-tests/generated/expr/ImplicitConversionExpr/ImplicitConversionExpr_getType.expected b/swift/ql/test/extractor-tests/generated/expr/ImplicitConversionExpr/ImplicitConversionExpr_getType.expected index d8dfc2cd957..e57454212df 100644 --- a/swift/ql/test/extractor-tests/generated/expr/ImplicitConversionExpr/ImplicitConversionExpr_getType.expected +++ b/swift/ql/test/extractor-tests/generated/expr/ImplicitConversionExpr/ImplicitConversionExpr_getType.expected @@ -1,5 +1,5 @@ | implicit_conversions.swift:2:3:2:3 | (UnsafePointer) ... | UnsafePointer | | implicit_conversions.swift:4:16:4:16 | (Int?) ... | Int? | -| implicit_conversions.swift:5:25:5:25 | (Equatable) ... | Equatable | +| implicit_conversions.swift:5:25:5:25 | (any Equatable) ... | any Equatable | | implicit_conversions.swift:12:3:12:5 | (@lvalue (() -> Void)?) ... | @lvalue (() -> Void)? | | implicit_conversions.swift:12:9:12:10 | ((() -> Void)?) ... | (() -> Void)? | diff --git a/swift/ql/test/extractor-tests/generated/expr/SingleValueStmtExpr/SingleValueStmtExpr.expected b/swift/ql/test/extractor-tests/generated/expr/SingleValueStmtExpr/SingleValueStmtExpr.expected index 8ddce624fb2..336aca667ee 100644 --- a/swift/ql/test/extractor-tests/generated/expr/SingleValueStmtExpr/SingleValueStmtExpr.expected +++ b/swift/ql/test/extractor-tests/generated/expr/SingleValueStmtExpr/SingleValueStmtExpr.expected @@ -1 +1,2 @@ -| test.swift:2:3:5:3 | SingleValueStmtExpr | hasType: | yes | getStmt: | test.swift:2:3:5:3 | switch x { ... } | +| test.swift:2:3:7:3 | SingleValueStmtExpr | hasType: | yes | getStmt: | test.swift:2:3:7:3 | switch x { ... } | +| test.swift:11:3:11:30 | SingleValueStmtExpr | hasType: | yes | getStmt: | test.swift:11:3:11:30 | if ... then { ... } else { ... } | diff --git a/swift/ql/test/extractor-tests/generated/expr/SingleValueStmtExpr/SingleValueStmtExpr_getType.expected b/swift/ql/test/extractor-tests/generated/expr/SingleValueStmtExpr/SingleValueStmtExpr_getType.expected index 2bf6c0cd5da..9d533e94cda 100644 --- a/swift/ql/test/extractor-tests/generated/expr/SingleValueStmtExpr/SingleValueStmtExpr_getType.expected +++ b/swift/ql/test/extractor-tests/generated/expr/SingleValueStmtExpr/SingleValueStmtExpr_getType.expected @@ -1 +1,2 @@ -| test.swift:2:3:5:3 | SingleValueStmtExpr | Int | +| test.swift:2:3:7:3 | SingleValueStmtExpr | Int | +| test.swift:11:3:11:30 | SingleValueStmtExpr | Int | diff --git a/swift/ql/test/extractor-tests/generated/expr/SingleValueStmtExpr/ThenStmt.expected b/swift/ql/test/extractor-tests/generated/expr/SingleValueStmtExpr/ThenStmt.expected new file mode 100644 index 00000000000..7138c023777 --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/expr/SingleValueStmtExpr/ThenStmt.expected @@ -0,0 +1,4 @@ +| test.swift:4:5:4:5 | ThenStmt | getResult: | test.swift:4:5:4:5 | 1 | +| test.swift:6:5:6:5 | ThenStmt | getResult: | test.swift:6:5:6:5 | 0 | +| test.swift:11:17:11:17 | ThenStmt | getResult: | test.swift:11:17:11:17 | 1 | +| test.swift:11:28:11:28 | ThenStmt | getResult: | test.swift:11:28:11:28 | 0 | diff --git a/swift/ql/test/extractor-tests/generated/expr/SingleValueStmtExpr/ThenStmt.ql b/swift/ql/test/extractor-tests/generated/expr/SingleValueStmtExpr/ThenStmt.ql new file mode 100644 index 00000000000..ca24dfa1c4f --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/expr/SingleValueStmtExpr/ThenStmt.ql @@ -0,0 +1,10 @@ +// generated by codegen/codegen.py +import codeql.swift.elements +import TestUtils + +from ThenStmt x, Expr getResult +where + toBeTested(x) and + not x.isUnknown() and + getResult = x.getResult() +select x, "getResult:", getResult diff --git a/swift/ql/test/extractor-tests/generated/expr/SingleValueStmtExpr/test.swift b/swift/ql/test/extractor-tests/generated/expr/SingleValueStmtExpr/test.swift index b7f7077d5e8..0ef2c31c730 100644 --- a/swift/ql/test/extractor-tests/generated/expr/SingleValueStmtExpr/test.swift +++ b/swift/ql/test/extractor-tests/generated/expr/SingleValueStmtExpr/test.swift @@ -1,6 +1,12 @@ func a(_ x: Int) -> Int { switch x { + case 0: + 1 default: 0 } } + +func b(_ x: Int) -> Int { + if (x < 42) { 1 } else { 0 } +} diff --git a/swift/ql/test/extractor-tests/generated/type/ExistentialType/ExistentialType.expected b/swift/ql/test/extractor-tests/generated/type/ExistentialType/ExistentialType.expected index 39ad24b358b..56c84e91878 100644 --- a/swift/ql/test/extractor-tests/generated/type/ExistentialType/ExistentialType.expected +++ b/swift/ql/test/extractor-tests/generated/type/ExistentialType/ExistentialType.expected @@ -1,3 +1,3 @@ -| ExplicitExistential | getName: | ExplicitExistential | getCanonicalType: | ExplicitExistential | getConstraint: | ExplicitExistential | -| ImplicitExistential | getName: | ImplicitExistential | getCanonicalType: | ImplicitExistential | getConstraint: | ImplicitExistential | -| P1 & P2 | getName: | P1 & P2 | getCanonicalType: | P1 & P2 | getConstraint: | P1 & P2 | +| any ExplicitExistential | getName: | any ExplicitExistential | getCanonicalType: | any ExplicitExistential | getConstraint: | ExplicitExistential | +| any ImplicitExistential | getName: | any ImplicitExistential | getCanonicalType: | any ImplicitExistential | getConstraint: | ImplicitExistential | +| any P1 & P2 | getName: | any P1 & P2 | getCanonicalType: | any P1 & P2 | getConstraint: | P1 & P2 | diff --git a/swift/ql/test/extractor-tests/generated/type/OpenedArchetypeType/OpenedArchetypeType.expected b/swift/ql/test/extractor-tests/generated/type/OpenedArchetypeType/OpenedArchetypeType.expected index 05697f352ba..24471c96e6c 100644 --- a/swift/ql/test/extractor-tests/generated/type/OpenedArchetypeType/OpenedArchetypeType.expected +++ b/swift/ql/test/extractor-tests/generated/type/OpenedArchetypeType/OpenedArchetypeType.expected @@ -1 +1 @@ -| C & P1 & P2 | getName: | C & P1 & P2 | getCanonicalType: | C & P1 & P2 | getInterfaceType: | \u03c4_0_0 | hasSuperclass: | yes | getNumberOfProtocols: | 2 | +| any C & P1 & P2 | getName: | any C & P1 & P2 | getCanonicalType: | any C & P1 & P2 | getInterfaceType: | \u03c4_0_0 | hasSuperclass: | yes | getNumberOfProtocols: | 2 | diff --git a/swift/ql/test/extractor-tests/generated/type/OpenedArchetypeType/OpenedArchetypeType_getProtocol.expected b/swift/ql/test/extractor-tests/generated/type/OpenedArchetypeType/OpenedArchetypeType_getProtocol.expected index 5899ea9308a..691608328bb 100644 --- a/swift/ql/test/extractor-tests/generated/type/OpenedArchetypeType/OpenedArchetypeType_getProtocol.expected +++ b/swift/ql/test/extractor-tests/generated/type/OpenedArchetypeType/OpenedArchetypeType_getProtocol.expected @@ -1,2 +1,2 @@ -| C & P1 & P2 | 0 | opened_archetypes.swift:3:1:3:14 | P1 | -| C & P1 & P2 | 1 | opened_archetypes.swift:9:1:9:14 | P2 | +| any C & P1 & P2 | 0 | opened_archetypes.swift:3:1:3:14 | P1 | +| any C & P1 & P2 | 1 | opened_archetypes.swift:9:1:9:14 | P2 | diff --git a/swift/ql/test/extractor-tests/generated/type/OpenedArchetypeType/OpenedArchetypeType_getSuperclass.expected b/swift/ql/test/extractor-tests/generated/type/OpenedArchetypeType/OpenedArchetypeType_getSuperclass.expected index be1cb7dcb05..dffe6bf270a 100644 --- a/swift/ql/test/extractor-tests/generated/type/OpenedArchetypeType/OpenedArchetypeType_getSuperclass.expected +++ b/swift/ql/test/extractor-tests/generated/type/OpenedArchetypeType/OpenedArchetypeType_getSuperclass.expected @@ -1 +1 @@ -| C & P1 & P2 | C | +| any C & P1 & P2 | C | diff --git a/swift/ql/test/library-tests/ast/PrintAst.expected b/swift/ql/test/library-tests/ast/PrintAst.expected index 8ef414bb530..4d12907d3a5 100644 --- a/swift/ql/test/library-tests/ast/PrintAst.expected +++ b/swift/ql/test/library-tests/ast/PrintAst.expected @@ -88,7 +88,7 @@ cfg.swift: # 19| getBase(): [TypeExpr] MyError.Type # 19| getTypeRepr(): [TypeRepr] MyError # 19| getMethodRef(): [DeclRefExpr] error1 -# 19| getSubExpr().getFullyConverted(): [ErasureExpr] (Error) ... +# 19| getSubExpr().getFullyConverted(): [ErasureExpr] (any Error) ... # 21| getElement(1): [GuardStmt] guard ... else { ... } # 21| getCondition(): [StmtCondition] StmtCondition # 21| getElement(0): [ConditionElement] ... .<=(_:_:) ... @@ -118,7 +118,7 @@ cfg.swift: # 22| getExpr(): [DeclRefExpr] x # 22| getArgument(1): [Argument] : 1 # 22| getExpr(): [IntegerLiteralExpr] 1 -# 22| getSubExpr().getFullyConverted(): [ErasureExpr] (Error) ... +# 22| getSubExpr().getFullyConverted(): [ErasureExpr] (any Error) ... # 26| [NamedFunction] tryCatch(x:) # 26| InterfaceType = (Int) -> Int # 26| getParam(0): [ParamDecl] x @@ -205,7 +205,7 @@ cfg.swift: # 39| getPattern(): [NamedPattern] error # 39| getPattern().getFullyUnresolved(): [BindingPattern] let ... # 39| getVariable(0): [ConcreteVarDecl] error -# 39| Type = Error +# 39| Type = any Error # 39| getBody(): [BraceStmt] { ... } # 40| getElement(0): [CallExpr] call to print(_:separator:terminator:) # 40| getFunction(): [DeclRefExpr] print(_:separator:terminator:) @@ -3412,7 +3412,7 @@ cfg.swift: # 564| getBody(): [BraceStmt] { ... } # 564| getElement(0): [ReturnStmt] return # 568| [NamedFunction] getMyProtocol() -# 568| InterfaceType = () -> MyProtocol +# 568| InterfaceType = () -> any MyProtocol # 568| getBody(): [BraceStmt] { ... } # 568| getElement(0): [ReturnStmt] return ... # 568| getResult(): [CallExpr] call to MyProcotolImpl.init() @@ -3420,7 +3420,7 @@ cfg.swift: # 568| getBase(): [TypeExpr] MyProcotolImpl.Type # 568| getTypeRepr(): [TypeRepr] MyProcotolImpl # 568| getMethodRef(): [DeclRefExpr] MyProcotolImpl.init() -# 568| getResult().getFullyConverted(): [ErasureExpr] (MyProtocol) ... +# 568| getResult().getFullyConverted(): [ErasureExpr] (any MyProtocol) ... # 569| [NamedFunction] getMyProtocolImpl() # 569| InterfaceType = () -> MyProcotolImpl # 569| getBody(): [BraceStmt] { ... } @@ -3436,9 +3436,9 @@ cfg.swift: # 571| Type = Int # 571| getBody(): [BraceStmt] { ... } # 573| [NamedFunction] testOpenExistentialExpr(x:y:) -# 573| InterfaceType = (MyProtocol, MyProcotolImpl) -> () +# 573| InterfaceType = (any MyProtocol, MyProcotolImpl) -> () # 573| getParam(0): [ParamDecl] x -# 573| Type = MyProtocol +# 573| Type = any MyProtocol # 573| getParam(1): [ParamDecl] y # 573| Type = MyProcotolImpl # 573| getBody(): [BraceStmt] { ... } @@ -3476,8 +3476,75 @@ cfg.swift: # 577| getBase(): [CallExpr] call to getMyProtocolImpl() # 577| getFunction(): [DeclRefExpr] getMyProtocolImpl() # 577| getMethodRef(): [DeclRefExpr] source() -# 580| [Comment] // --- -# 580| +# 580| [NamedFunction] singleStmtExpr(_:) +# 580| InterfaceType = (Int) -> () +# 580| getParam(0): [ParamDecl] x +# 580| Type = Int +# 580| getBody(): [BraceStmt] { ... } +# 581| getVariable(0): [ConcreteVarDecl] a +# 581| Type = Int +# 585| getVariable(1): [ConcreteVarDecl] b +# 585| Type = Int +# 581| getElement(0): [PatternBindingDecl] var ... = ... +# 581| getInit(0): [SingleValueStmtExpr] SingleValueStmtExpr +# 581| getStmt(): [SwitchStmt] switch x { ... } +# 581| getExpr(): [DeclRefExpr] x +# 582| getCase(0): [CaseStmt] case ... +# 582| getLabel(0): [CaseLabelItem] =~ ... +# 582| getPattern(): [ExprPattern] =~ ... +# 582| getSubExpr(): [BinaryExpr] ... .~=(_:_:) ... +# 582| getFunction(): [MethodLookupExpr] .~=(_:_:) +# 582| getBase(): [TypeExpr] Range.Type +# 582| getTypeRepr(): [TypeRepr] Range +# 582| getMethodRef(): [DeclRefExpr] ~=(_:_:) +# 582| getArgument(0): [Argument] : ... ...<(_:_:) ... +# 582| getExpr(): [BinaryExpr] ... ...<(_:_:) ... +# 582| getFunction(): [MethodLookupExpr] ...<(_:_:) +# 582| getBase(): [TypeExpr] Int.Type +# 582| getTypeRepr(): [TypeRepr] Int +# 582| getMethodRef(): [DeclRefExpr] ..<(_:_:) +# 582| getArgument(0): [Argument] : 0 +# 582| getExpr(): [IntegerLiteralExpr] 0 +# 582| getArgument(1): [Argument] : 5 +# 582| getExpr(): [IntegerLiteralExpr] 5 +# 582| getArgument(1): [Argument] : $match +# 582| getExpr(): [DeclRefExpr] $match +# 582| getBody(): [BraceStmt] { ... } +# 582| getElement(0): [ThenStmt] ThenStmt +# 582| getResult(): [IntegerLiteralExpr] 1 +# 583| getCase(1): [CaseStmt] case ... +# 583| getLabel(0): [CaseLabelItem] _ +# 583| getPattern(): [AnyPattern] _ +# 583| getBody(): [BraceStmt] { ... } +# 583| getElement(0): [ThenStmt] ThenStmt +# 583| getResult(): [IntegerLiteralExpr] 2 +# 581| getPattern(0): [NamedPattern] a +# 585| getElement(1): [PatternBindingDecl] var ... = ... +# 585| getInit(0): [SingleValueStmtExpr] SingleValueStmtExpr +# 585| getStmt(): [IfStmt] if ... then { ... } else { ... } +# 585| getCondition(): [StmtCondition] StmtCondition +# 585| getElement(0): [ConditionElement] ... .<(_:_:) ... +# 585| getBoolean(): [BinaryExpr] ... .<(_:_:) ... +# 585| getFunction(): [MethodLookupExpr] .<(_:_:) +# 585| getBase(): [TypeExpr] Int.Type +# 585| getTypeRepr(): [TypeRepr] Int +# 585| getMethodRef(): [DeclRefExpr] <(_:_:) +# 585| getArgument(0): [Argument] : x +# 585| getExpr(): [DeclRefExpr] x +# 585| getArgument(1): [Argument] : 42 +# 585| getExpr(): [IntegerLiteralExpr] 42 +# 585| getBoolean().getFullyConverted(): [ParenExpr] (...) +# 585| getThen(): [BraceStmt] { ... } +# 585| getElement(0): [ThenStmt] ThenStmt +# 585| getResult(): [IntegerLiteralExpr] 1 +# 585| getElse(): [BraceStmt] { ... } +# 585| getElement(0): [ThenStmt] ThenStmt +# 585| getResult(): [IntegerLiteralExpr] 2 +# 585| getPattern(0): [NamedPattern] b +# 582| [ConcreteVarDecl] $match +# 582| Type = Int +# 587| [Comment] // --- +# 587| declarations.swift: # 1| [StructDecl] Foo # 2| getMember(0): [PatternBindingDecl] var ... = ... @@ -4816,7 +4883,7 @@ expressions.swift: # 16| getBase(): [TypeExpr] AnError.Type # 16| getTypeRepr(): [TypeRepr] AnError # 16| getMethodRef(): [DeclRefExpr] failed -# 16| getSubExpr().getFullyConverted(): [ErasureExpr] (Error) ... +# 16| getSubExpr().getFullyConverted(): [ErasureExpr] (any Error) ... # 20| [TopLevelCodeDecl] { ... } # 20| getBody(): [BraceStmt] { ... } # 20| getElement(0): [ForceTryExpr] try! ... @@ -6976,7 +7043,7 @@ statements.swift: # 21| getPattern(): [NamedPattern] error # 21| getPattern().getFullyUnresolved(): [BindingPattern] let ... # 21| getVariable(0): [ConcreteVarDecl] error -# 21| Type = Error +# 21| Type = any Error # 21| getBody(): [BraceStmt] { ... } # 22| getElement(0): [CallExpr] call to print(_:separator:terminator:) # 22| getFunction(): [DeclRefExpr] print(_:separator:terminator:) @@ -7017,7 +7084,7 @@ statements.swift: # 29| getPattern(): [NamedPattern] error # 29| getPattern().getFullyUnresolved(): [BindingPattern] let ... # 29| getVariable(0): [ConcreteVarDecl] error -# 29| Type = Error +# 29| Type = any Error # 29| getBody(): [BraceStmt] { ... } # 30| getElement(0): [CallExpr] call to print(_:separator:terminator:) # 30| getFunction(): [DeclRefExpr] print(_:separator:terminator:) @@ -7144,7 +7211,7 @@ statements.swift: # 40| getBase(): [TypeExpr] AnError.Type # 40| getTypeRepr(): [TypeRepr] AnError # 40| getMethodRef(): [DeclRefExpr] failed -# 40| getSubExpr().getFullyConverted(): [ErasureExpr] (Error) ... +# 40| getSubExpr().getFullyConverted(): [ErasureExpr] (any Error) ... # 44| [TopLevelCodeDecl] { ... } # 44| getBody(): [BraceStmt] { ... } # 44| getElement(0): [DeferStmt] defer { ... } diff --git a/swift/ql/test/library-tests/ast/cfg.swift b/swift/ql/test/library-tests/ast/cfg.swift index 270f616cd9c..09090fc70ba 100644 --- a/swift/ql/test/library-tests/ast/cfg.swift +++ b/swift/ql/test/library-tests/ast/cfg.swift @@ -577,4 +577,11 @@ func testOpenExistentialExpr(x: MyProtocol, y: MyProcotolImpl) { sink(arg: getMyProtocolImpl().source()) } +func singleStmtExpr(_ x: Int) { + let a = switch x { + case 0..<5: 1 + default: 2 + } + let b = if (x < 42) { 1 } else { 2 } +} // --- diff --git a/swift/ql/test/library-tests/controlflow/graph/Cfg.expected b/swift/ql/test/library-tests/controlflow/graph/Cfg.expected index 1a1c7fc903d..184b07a132f 100644 --- a/swift/ql/test/library-tests/controlflow/graph/Cfg.expected +++ b/swift/ql/test/library-tests/controlflow/graph/Cfg.expected @@ -340,9 +340,9 @@ cfg.swift: #-----| exception -> exit mightThrow(x:) (abnormal) # 19| MyError.Type -#-----| -> (Error) ... +#-----| -> (any Error) ... -# 19| (Error) ... +# 19| (any Error) ... #-----| -> throw ... # 19| .error1 @@ -379,11 +379,11 @@ cfg.swift: # 22| .error3 #-----| -> MyError.Type -# 22| (Error) ... +# 22| (any Error) ... #-----| -> throw ... # 22| call to ... -#-----| -> (Error) ... +#-----| -> (any Error) ... # 22| x #-----| -> 1 @@ -6728,11 +6728,11 @@ cfg.swift: # 568| MyProcotolImpl.init() #-----| -> MyProcotolImpl.Type -# 568| (MyProtocol) ... +# 568| (any MyProtocol) ... #-----| -> return ... # 568| call to MyProcotolImpl.init() -#-----| -> (MyProtocol) ... +#-----| -> (any MyProtocol) ... # 569| enter getMyProtocolImpl() #-----| -> getMyProtocolImpl() @@ -6868,3 +6868,139 @@ cfg.swift: # 577| call to source() #-----| -> call to sink(arg:) + +# 580| enter singleStmtExpr(_:) +#-----| -> singleStmtExpr(_:) + +# 580| exit singleStmtExpr(_:) + +# 580| exit singleStmtExpr(_:) (normal) +#-----| -> exit singleStmtExpr(_:) + +# 580| singleStmtExpr(_:) +#-----| -> x + +# 580| x +#-----| -> a + +# 581| var ... = ... +#-----| -> b + +# 581| a +#-----| match -> switch x { ... } + +# 581| SingleValueStmtExpr +#-----| -> var ... = ... + +# 581| switch x { ... } +#-----| -> x + +# 581| x +#-----| -> case ... + +# 582| case ... +#-----| -> =~ ... + +# 582| .~=(_:_:) +#-----| -> Range.Type + +# 582| 0 +#-----| -> 5 + +# 582| Range.Type +#-----| -> ...<(_:_:) + +# 582| ... ...<(_:_:) ... +#-----| -> $match + +# 582| ... .~=(_:_:) ... +#-----| -> =~ ... + +# 582| =~ ... +#-----| -> .~=(_:_:) + +# 582| =~ ... +#-----| match -> 1 +#-----| no-match -> case ... + +# 582| ...<(_:_:) +#-----| -> Int.Type + +# 582| Int.Type +#-----| -> 0 + +# 582| $match +#-----| -> ... .~=(_:_:) ... + +# 582| 5 +#-----| -> ... ...<(_:_:) ... + +# 582| 1 +#-----| -> ThenStmt + +# 582| ThenStmt +#-----| -> SingleValueStmtExpr + +# 583| _ +#-----| match -> 2 + +# 583| _ +#-----| -> _ + +# 583| case ... +#-----| -> _ + +# 583| 2 +#-----| -> ThenStmt + +# 583| ThenStmt +#-----| -> SingleValueStmtExpr + +# 585| var ... = ... +#-----| -> exit singleStmtExpr(_:) (normal) + +# 585| b +#-----| match -> if ... then { ... } else { ... } + +# 585| SingleValueStmtExpr +#-----| -> var ... = ... + +# 585| if ... then { ... } else { ... } +#-----| -> StmtCondition + +# 585| StmtCondition +#-----| -> .<(_:_:) + +# 585| [false] (...) +#-----| false -> 2 + +# 585| [true] (...) +#-----| true -> 1 + +# 585| x +#-----| -> 42 + +# 585| ... .<(_:_:) ... +#-----| false -> [false] (...) +#-----| true -> [true] (...) + +# 585| .<(_:_:) +#-----| -> Int.Type + +# 585| Int.Type +#-----| -> x + +# 585| 42 +#-----| -> ... .<(_:_:) ... + +# 585| 1 +#-----| -> ThenStmt + +# 585| ThenStmt +#-----| -> SingleValueStmtExpr + +# 585| 2 +#-----| -> ThenStmt + +# 585| ThenStmt +#-----| -> SingleValueStmtExpr diff --git a/swift/ql/test/library-tests/controlflow/graph/cfg.swift b/swift/ql/test/library-tests/controlflow/graph/cfg.swift index 270f616cd9c..09090fc70ba 100644 --- a/swift/ql/test/library-tests/controlflow/graph/cfg.swift +++ b/swift/ql/test/library-tests/controlflow/graph/cfg.swift @@ -577,4 +577,11 @@ func testOpenExistentialExpr(x: MyProtocol, y: MyProcotolImpl) { sink(arg: getMyProtocolImpl().source()) } +func singleStmtExpr(_ x: Int) { + let a = switch x { + case 0..<5: 1 + default: 2 + } + let b = if (x < 42) { 1 } else { 2 } +} // --- diff --git a/swift/ql/test/library-tests/elements/type/nominaltype/nominaltype.expected b/swift/ql/test/library-tests/elements/type/nominaltype/nominaltype.expected index 81d6ba294d2..8aa6c1b2d02 100644 --- a/swift/ql/test/library-tests/elements/type/nominaltype/nominaltype.expected +++ b/swift/ql/test/library-tests/elements/type/nominaltype/nominaltype.expected @@ -7,14 +7,14 @@ | nominaltype.swift:90:6:90:6 | b2 | B2 | getABaseType:A, getCanonicalType:B2, getFullName:B2, getName:B2, getUnderlyingType:B2 | | nominaltype.swift:91:6:91:6 | b1_alias | B1_alias | getAliasedType:B1, getCanonicalType:B1, getFullName:B1_alias, getName:B1_alias, getUnderlyingType:B1 | | nominaltype.swift:92:6:92:6 | b2_alias | B2_alias | getAliasedType:B2, getCanonicalType:B2, getFullName:B2_alias, getName:B2_alias, getUnderlyingType:B2 | -| nominaltype.swift:93:6:93:6 | p | P | getCanonicalType:P, getFullName:P, getName:P, getUnderlyingType:P | -| nominaltype.swift:94:6:94:6 | p_alias | P_alias | getCanonicalType:P, getFullName:P_alias, getName:P_alias, getUnderlyingType:P_alias | +| nominaltype.swift:93:6:93:6 | p | any P | getCanonicalType:any P, getFullName:any P, getName:any P, getUnderlyingType:any P | +| nominaltype.swift:94:6:94:6 | p_alias | any P_alias | getCanonicalType:any P, getFullName:any P_alias, getName:any P_alias, getUnderlyingType:any P_alias | | nominaltype.swift:95:6:95:6 | c1 | C1 | getABaseType:P, getCanonicalType:C1, getFullName:C1, getName:C1, getUnderlyingType:C1 | | nominaltype.swift:96:6:96:6 | c2 | C2 | getABaseType:P, getCanonicalType:C2, getFullName:C2, getName:C2, getUnderlyingType:C2 | | nominaltype.swift:97:6:97:6 | o | Outer | getCanonicalType:Outer, getFullName:Outer, getName:Outer, getUnderlyingType:Outer | | nominaltype.swift:98:6:98:6 | oi | Outer.Inner | getCanonicalType:Outer.Inner, getFullName:Outer.Inner, getName:Inner, getUnderlyingType:Outer.Inner | | nominaltype.swift:99:6:99:6 | oia | Outer.Inner.InnerAlias | getAliasedType:A, getCanonicalType:A, getFullName:Outer.Inner.InnerAlias, getName:InnerAlias, getUnderlyingType:A | -| nominaltype.swift:100:6:100:6 | p1p2 | P1P2 | getCanonicalType:P1 & P2, getFullName:P1P2, getName:P1P2, getUnderlyingType:P1P2 | +| nominaltype.swift:100:6:100:6 | p1p2 | any P1P2 | getCanonicalType:any P1 & P2, getFullName:any P1P2, getName:any P1P2, getUnderlyingType:any P1P2 | | nominaltype.swift:101:6:101:6 | boxInt | Box | getCanonicalType:Box, getFullName:Box, getName:Box, getUnderlyingType:Box | | nominaltype.swift:102:6:102:6 | d1 | D1 | getABaseType:P3, getCanonicalType:D1, getFullName:D1, getName:D1, getUnderlyingType:D1 | | nominaltype.swift:103:6:103:6 | d2 | D2 | getABaseType:P4, getCanonicalType:D2, getFullName:D2, getName:D2, getUnderlyingType:D2 | diff --git a/swift/schema.py b/swift/schema.py index 1513c46c3e0..66fe693a8bc 100644 --- a/swift/schema.py +++ b/swift/schema.py @@ -994,6 +994,20 @@ class ThrowStmt(Stmt): class YieldStmt(Stmt): results: list[Expr] | child +@qltest.test_with('SingleValueStmtExpr') +class ThenStmt(Stmt): + """ A statement implicitly wrapping values to be used in branches of if/switch expressions. For example in: + ``` + let rank = switch value { + case 0..<0x80: 1 + case 0x80..<0x0800: 2 + default: 3 + } + ``` + the literal expressions `1`, `2` and `3` are wrapped in `ThenStmt`. + """ + result: Expr | child + class DoCatchStmt(LabeledStmt): body: Stmt | child catches: list[CaseStmt] | child diff --git a/swift/third_party/BUILD.swift-toolchain-linux.bazel b/swift/third_party/BUILD.swift-toolchain-linux.bazel index 7c00eae382a..8125d4a0448 100644 --- a/swift/third_party/BUILD.swift-toolchain-linux.bazel +++ b/swift/third_party/BUILD.swift-toolchain-linux.bazel @@ -30,7 +30,7 @@ _pm_interface_files = [ srcs = ["%s/%s/%s" % (_strip_prefix, dir, interface)], outs = [module], cmd = "$(location usr/bin/swift-frontend) -compile-module-from-interface $< -o $@ -I $$(dirname $<)", - local = True, + tags = ["no-sandbox"], tools = ["usr/bin/swift-frontend"], ), pkg_files( diff --git a/swift/third_party/load.bzl b/swift/third_party/load.bzl index 6f876f333f2..7e55ef50601 100644 --- a/swift/third_party/load.bzl +++ b/swift/third_party/load.bzl @@ -1,11 +1,11 @@ load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") load("@bazel_tools//tools/build_defs/repo:utils.bzl", "maybe") -_swift_prebuilt_version = "swift-5.9.2-RELEASE.299" +_swift_prebuilt_version = "swift-5.10-RELEASE.316" _swift_sha_map = { - "Linux-X64": "19e8150251601e7b27e76d1a405a72c459f9a3e2949a1e360fde15ebb4d87409", - "macOS-ARM64": "4aaec59489c1607be0bd9ea522c1772f9368e7e29197167d3db73e0eb4fa605f", - "macOS-X64": "16f3a248269a06b00c6a40567ca06d5494d9a0ce24e7dd7cb8534828639418e8", + "Linux-X64": "8c6769a39ec94517ed56a9bf437ffe391ab8d76268f7ece1464deb6cf414ef40", + "macOS-ARM64": "8541653cd3d78fd14a67150f12c96b9f522b2b51231b5d3085e356ed5f5f0a6b", + "macOS-X64": "69fafb0c93029e1824bc70e9d3b05d6359077da41d61eed014a4c82a35e9b56c", } _swift_arch_map = { @@ -20,13 +20,13 @@ _toolchain_info = { platform = "ubuntu2004", suffix = "ubuntu20.04", extension = "tar.gz", - sha = "93477b80db16f3e5085738ade05478ed435793e39864418e737a10ac306cbd8c", + sha = "935d0b68757d9b1aceb6410fe0b126a28a07e362553ebba0c4bcd1c9a55d0bc5", ), "macos": struct( platform = "xcode", suffix = "osx", extension = "pkg", - sha = "68951c313b4b559878fc5be27e460c877f98d14e161f755220b063123919e896", + sha = "ef9bb6b38711324e1b1c89de44a27d9519d0711924c57f4df541734b04aaf6cc", ), } @@ -124,14 +124,6 @@ def load_dependencies(module_ctx = None, repository_name = "codeql"): ), build_file = _build(repository_name, "swift-llvm-support"), sha256 = sha256, - patch_args = ["-p1"], - patches = [ - "@%s//swift/third_party/swift-llvm-support:patches/%s.patch" % (repository_name, patch_name) - for patch_name in ( - "remove-redundant-operators", - "add-constructor-to-Compilation", - ) - ], ) _toolchains(repository_name) diff --git a/swift/third_party/swift-llvm-support/patches/add-constructor-to-Compilation.patch b/swift/third_party/swift-llvm-support/patches/add-constructor-to-Compilation.patch deleted file mode 100644 index a663e6db42a..00000000000 --- a/swift/third_party/swift-llvm-support/patches/add-constructor-to-Compilation.patch +++ /dev/null @@ -1,17 +0,0 @@ -In C++20 aggregate initialization on classes with user-declared constructor is not -available, while in C++11-C++17 it was available if they were defaulted or deleted. - -diff --git a/include/swift/Driver/Compilation.h b/include/swift/Driver/Compilation.h -index ee76f92e0de..bd987157593 100644 ---- a/include/swift/Driver/Compilation.h -+++ b/include/swift/Driver/Compilation.h -@@ -89,6 +89,9 @@ public: - /// This data is used for cross-module module dependencies. - fine_grained_dependencies::ModuleDepGraph depGraph; - -+ Result(bool hadAbnormalExit = false, int exitCode = 0, fine_grained_dependencies::ModuleDepGraph depGraph = {}) -+ : hadAbnormalExit{hadAbnormalExit}, exitCode{exitCode}, depGraph{std::move(depGraph)} {} -+ - Result(const Result &) = delete; - Result &operator=(const Result &) = delete; - diff --git a/swift/third_party/swift-llvm-support/patches/remove-redundant-operators.patch b/swift/third_party/swift-llvm-support/patches/remove-redundant-operators.patch deleted file mode 100644 index 03f1c0ff08c..00000000000 --- a/swift/third_party/swift-llvm-support/patches/remove-redundant-operators.patch +++ /dev/null @@ -1,24 +0,0 @@ -In C++20 the removed operators are available via operator rewriting and -implicit constructors, providing them leads to ambiguity. - -diff --git a/include/swift/SIL/SILValue.h b/include/swift/SIL/SILValue.h -index 378ca039c7e..37c119c50c1 100644 ---- a/include/swift/SIL/SILValue.h -+++ b/include/swift/SIL/SILValue.h -@@ -271,16 +271,6 @@ struct ValueOwnershipKind { - - explicit operator bool() const { return value != OwnershipKind::Any; } - -- bool operator==(ValueOwnershipKind other) const { -- return value == other.value; -- } -- bool operator!=(ValueOwnershipKind other) const { -- return !(value == other.value); -- } -- -- bool operator==(innerty other) const { return value == other; } -- bool operator!=(innerty other) const { return !(value == other); } -- - /// We merge by moving down the lattice. - ValueOwnershipKind merge(ValueOwnershipKind rhs) const { - return value.meet(rhs.value);