diff --git a/.bazelrc b/.bazelrc index 9abda3e670a0..26a0600a44ed 100644 --- a/.bazelrc +++ b/.bazelrc @@ -25,5 +25,6 @@ common --registry=https://bcr.bazel.build common --@rules_dotnet//dotnet/settings:strict_deps=false common --experimental_isolated_extension_usages +common --incompatible_use_plus_in_repo_names try-import %workspace%/local.bazelrc diff --git a/Cargo.lock b/Cargo.lock index a0d31f77ad8b..327f62e7935b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -112,6 +112,16 @@ version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" +[[package]] +name = "ast-generator" +version = "0.1.0" +dependencies = [ + "itertools 0.10.5", + "proc-macro2", + "quote", + "ungrammar", +] + [[package]] name = "atomic" version = "0.6.0" @@ -380,11 +390,13 @@ dependencies = [ "ra_ap_base_db", "ra_ap_hir", "ra_ap_hir_def", + "ra_ap_hir_expand", "ra_ap_ide_db", "ra_ap_load-cargo", "ra_ap_parser", "ra_ap_paths", "ra_ap_project_model", + "ra_ap_span", "ra_ap_syntax", "ra_ap_vfs", "rust-extractor-macros", @@ -681,16 +693,6 @@ version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7ab85b9b05e3978cc9a9cf8fea7f01b494e1a09ed3037e16ba39edc7a29eb61a" -[[package]] -name = "generate-schema" -version = "0.1.0" -dependencies = [ - "itertools 0.10.5", - "proc-macro2", - "quote", - "ungrammar", -] - [[package]] name = "getrandom" version = "0.2.15" diff --git a/Cargo.toml b/Cargo.toml index 4b80e2ac9b77..b63e3971ee5f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -7,7 +7,7 @@ members = [ "ruby/extractor", "rust/extractor", "rust/extractor/macros", - "rust/generate-schema", + "rust/ast-generator", ] [patch.crates-io] diff --git a/MODULE.bazel b/MODULE.bazel index 38f182d14bac..d0d9ad4ea230 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -23,11 +23,11 @@ bazel_dep(name = "bazel_skylib", version = "1.6.1") bazel_dep(name = "abseil-cpp", version = "20240116.0", repo_name = "absl") bazel_dep(name = "nlohmann_json", version = "3.11.3", repo_name = "json") bazel_dep(name = "fmt", version = "10.0.0") -bazel_dep(name = "rules_kotlin", version = "1.9.4-codeql.1") +bazel_dep(name = "rules_kotlin", version = "2.0.0-codeql.1") bazel_dep(name = "gazelle", version = "0.38.0") bazel_dep(name = "rules_dotnet", version = "0.15.1") bazel_dep(name = "googletest", version = "1.14.0.bcr.1") -bazel_dep(name = "rules_rust", version = "0.50.0") +bazel_dep(name = "rules_rust", version = "0.52.2") bazel_dep(name = "buildifier_prebuilt", version = "6.4.0", dev_dependency = True) @@ -61,7 +61,7 @@ r.from_cargo( "//ruby/extractor:Cargo.toml", "//rust/extractor:Cargo.toml", "//rust/extractor/macros:Cargo.toml", - "//rust/generate-schema:Cargo.toml", + "//rust/ast-generator:Cargo.toml", "//shared/tree-sitter-extractor:Cargo.toml", ], ) diff --git a/cpp/downgrades/6f5d51e89e762fe4609fd4ac8ee3afb04221e873/exprs.ql b/cpp/downgrades/6f5d51e89e762fe4609fd4ac8ee3afb04221e873/exprs.ql new file mode 100644 index 000000000000..5c335c836fb8 --- /dev/null +++ b/cpp/downgrades/6f5d51e89e762fe4609fd4ac8ee3afb04221e873/exprs.ql @@ -0,0 +1,15 @@ +class Expr extends @expr { + string toString() { none() } +} + +class Location extends @location_expr { + string toString() { none() } +} + +predicate isExprRequires(Expr expr) { exists(int kind | exprs(expr, kind, _) | kind = 390) } + +from Expr expr, int kind, int kind_new, Location location +where + exprs(expr, kind, location) and + if isExprRequires(expr) then kind_new = 1 else kind_new = kind +select expr, kind_new, location diff --git a/cpp/downgrades/6f5d51e89e762fe4609fd4ac8ee3afb04221e873/old.dbscheme b/cpp/downgrades/6f5d51e89e762fe4609fd4ac8ee3afb04221e873/old.dbscheme new file mode 100644 index 000000000000..6f5d51e89e76 --- /dev/null +++ b/cpp/downgrades/6f5d51e89e762fe4609fd4ac8ee3afb04221e873/old.dbscheme @@ -0,0 +1,2316 @@ + +/** + * 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 +); + +/* +case @coroutine_placeholder_variable.kind of + 1 = @handle +| 2 = @promise +| 3 = @init_await_resume +; +*/ + +coroutine_placeholder_variable( + unique int placeholder_variable: @variable ref, + int kind: int ref, + int function: @function 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) + +deduction_guide_for_class( + int id: @function ref, + int class_template: @usertype 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 +); + +case @using.kind of + 1 = @using_declaration +| 2 = @using_directive +| 3 = @using_enum_declaration +; + +usings( + unique int id: @using, + int element_id: @element ref, + int location: @location_default ref, + int kind: int 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 +); + +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 +); + +explicit_specifier_exprs( + unique int func_id: @function ref, + int constant: @expr 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 + | @c11_generic + ; + +/* +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 + +/* + Binary encoding of the allocator form. + + 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 +); + +/* + Binary encoding of the deallocator form. + + case @deallocator.form of + 0 = plain + | 1 = size + | 2 = alignment + | 4 = destroying_delete + ; +*/ + +/** + * 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 +| 364 = @istriviallycopyassignable +| 365 = @isassignablenopreconditioncheck +| 366 = @referencebindstotemporary +| 367 = @issameas +| 368 = @builtinhasattribute +| 369 = @ispointerinterconvertiblewithclass +| 370 = @builtinispointerinterconvertiblewithclass +| 371 = @iscorrespondingmember +| 372 = @builtiniscorrespondingmember +| 373 = @isboundedarray +| 374 = @isunboundedarray +| 375 = @isreferenceable +| 378 = @isnothrowconvertible +| 379 = @referenceconstructsfromtemporary +| 380 = @referenceconvertsfromtemporary +| 381 = @isconvertible +| 382 = @isvalidwinrttype +| 383 = @iswinclass +| 384 = @iswininterface +| 385 = @istriviallyequalitycomparable +| 386 = @isscopedenum +| 387 = @istriviallyrelocatable +| 388 = @datasizeof +| 389 = @c11_generic +| 390 = @requires_expr +; + +@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 + | @istriviallycopyassignable + | @isassignablenopreconditioncheck + | @referencebindstotemporary + | @issameas + | @builtinhasattribute + | @ispointerinterconvertiblewithclass + | @builtinispointerinterconvertiblewithclass + | @iscorrespondingmember + | @builtiniscorrespondingmember + | @isboundedarray + | @isunboundedarray + | @isreferenceable + | @isnothrowconvertible + | @referenceconstructsfromtemporary + | @referenceconvertsfromtemporary + | @isconvertible + | @isvalidwinrttype + | @iswinclass + | @iswininterface + | @istriviallyequalitycomparable + | @isscopedenum + | @istriviallyrelocatable + ; + +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 | @datasizeof; + +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/6f5d51e89e762fe4609fd4ac8ee3afb04221e873/semmlecode.cpp.dbscheme b/cpp/downgrades/6f5d51e89e762fe4609fd4ac8ee3afb04221e873/semmlecode.cpp.dbscheme new file mode 100644 index 000000000000..7ff6a6e53dbc --- /dev/null +++ b/cpp/downgrades/6f5d51e89e762fe4609fd4ac8ee3afb04221e873/semmlecode.cpp.dbscheme @@ -0,0 +1,2315 @@ + +/** + * 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 +); + +/* +case @coroutine_placeholder_variable.kind of + 1 = @handle +| 2 = @promise +| 3 = @init_await_resume +; +*/ + +coroutine_placeholder_variable( + unique int placeholder_variable: @variable ref, + int kind: int ref, + int function: @function 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) + +deduction_guide_for_class( + int id: @function ref, + int class_template: @usertype 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 +); + +case @using.kind of + 1 = @using_declaration +| 2 = @using_directive +| 3 = @using_enum_declaration +; + +usings( + unique int id: @using, + int element_id: @element ref, + int location: @location_default ref, + int kind: int 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 +); + +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 +); + +explicit_specifier_exprs( + unique int func_id: @function ref, + int constant: @expr 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 + | @c11_generic + ; + +/* +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 + +/* + Binary encoding of the allocator form. + + 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 +); + +/* + Binary encoding of the deallocator form. + + case @deallocator.form of + 0 = plain + | 1 = size + | 2 = alignment + | 4 = destroying_delete + ; +*/ + +/** + * 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 +| 364 = @istriviallycopyassignable +| 365 = @isassignablenopreconditioncheck +| 366 = @referencebindstotemporary +| 367 = @issameas +| 368 = @builtinhasattribute +| 369 = @ispointerinterconvertiblewithclass +| 370 = @builtinispointerinterconvertiblewithclass +| 371 = @iscorrespondingmember +| 372 = @builtiniscorrespondingmember +| 373 = @isboundedarray +| 374 = @isunboundedarray +| 375 = @isreferenceable +| 378 = @isnothrowconvertible +| 379 = @referenceconstructsfromtemporary +| 380 = @referenceconvertsfromtemporary +| 381 = @isconvertible +| 382 = @isvalidwinrttype +| 383 = @iswinclass +| 384 = @iswininterface +| 385 = @istriviallyequalitycomparable +| 386 = @isscopedenum +| 387 = @istriviallyrelocatable +| 388 = @datasizeof +| 389 = @c11_generic +; + +@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 + | @istriviallycopyassignable + | @isassignablenopreconditioncheck + | @referencebindstotemporary + | @issameas + | @builtinhasattribute + | @ispointerinterconvertiblewithclass + | @builtinispointerinterconvertiblewithclass + | @iscorrespondingmember + | @builtiniscorrespondingmember + | @isboundedarray + | @isunboundedarray + | @isreferenceable + | @isnothrowconvertible + | @referenceconstructsfromtemporary + | @referenceconvertsfromtemporary + | @isconvertible + | @isvalidwinrttype + | @iswinclass + | @iswininterface + | @istriviallyequalitycomparable + | @isscopedenum + | @istriviallyrelocatable + ; + +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 | @datasizeof; + +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/6f5d51e89e762fe4609fd4ac8ee3afb04221e873/upgrade.properties b/cpp/downgrades/6f5d51e89e762fe4609fd4ac8ee3afb04221e873/upgrade.properties new file mode 100644 index 000000000000..89fbcd9b239e --- /dev/null +++ b/cpp/downgrades/6f5d51e89e762fe4609fd4ac8ee3afb04221e873/upgrade.properties @@ -0,0 +1,3 @@ +description: Add requires expr +compatibility: partial +exprs.rel: run exprs.qlo diff --git a/cpp/ql/lib/CHANGELOG.md b/cpp/ql/lib/CHANGELOG.md index 5d39629f62b0..73c42c5dfa07 100644 --- a/cpp/ql/lib/CHANGELOG.md +++ b/cpp/ql/lib/CHANGELOG.md @@ -1,3 +1,10 @@ +## 2.0.2 + +### Minor Analysis Improvements + +* Added taint flow model for `fopen` and related functions. +* The `SimpleRangeAnalysis` library (`semmle.code.cpp.rangeanalysis.SimpleRangeAnalysis`) now generates more precise ranges for calls to `fgetc` and `getc`. + ## 2.0.1 No user-facing changes. diff --git a/cpp/ql/lib/change-notes/released/2.0.2.md b/cpp/ql/lib/change-notes/released/2.0.2.md new file mode 100644 index 000000000000..db3a11e55a8e --- /dev/null +++ b/cpp/ql/lib/change-notes/released/2.0.2.md @@ -0,0 +1,6 @@ +## 2.0.2 + +### Minor Analysis Improvements + +* Added taint flow model for `fopen` and related functions. +* The `SimpleRangeAnalysis` library (`semmle.code.cpp.rangeanalysis.SimpleRangeAnalysis`) now generates more precise ranges for calls to `fgetc` and `getc`. diff --git a/cpp/ql/lib/codeql-pack.release.yml b/cpp/ql/lib/codeql-pack.release.yml index fe974a4dbf37..81c7f1dbc13c 100644 --- a/cpp/ql/lib/codeql-pack.release.yml +++ b/cpp/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 2.0.1 +lastReleaseVersion: 2.0.2 diff --git a/cpp/ql/lib/cpp.qll b/cpp/ql/lib/cpp.qll index 0a29f7b86bac..5162248c4b85 100644 --- a/cpp/ql/lib/cpp.qll +++ b/cpp/ql/lib/cpp.qll @@ -17,6 +17,7 @@ import semmle.code.cpp.File import semmle.code.cpp.Linkage import semmle.code.cpp.Location import semmle.code.cpp.Compilation +import semmle.code.cpp.Concept import semmle.code.cpp.Element import semmle.code.cpp.Namespace import semmle.code.cpp.Specifier diff --git a/cpp/ql/lib/qlpack.yml b/cpp/ql/lib/qlpack.yml index f1a2ac3942f2..91af68ed6411 100644 --- a/cpp/ql/lib/qlpack.yml +++ b/cpp/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/cpp-all -version: 2.0.1 +version: 2.0.2 groups: cpp dbscheme: semmlecode.cpp.dbscheme extractor: cpp diff --git a/cpp/ql/lib/semmle/code/cpp/Concept.qll b/cpp/ql/lib/semmle/code/cpp/Concept.qll new file mode 100644 index 000000000000..d6245ecea825 --- /dev/null +++ b/cpp/ql/lib/semmle/code/cpp/Concept.qll @@ -0,0 +1,14 @@ +/** + * Provides classes for working with C++ concepts. + */ + +import semmle.code.cpp.exprs.Expr + +/** + * A C++ requires expression. + */ +class RequiresExpr extends Expr, @requires_expr { + override string toString() { result = "requires ..." } + + override string getAPrimaryQlClass() { result = "RequiresExpr" } +} diff --git a/cpp/ql/lib/semmle/code/cpp/Function.qll b/cpp/ql/lib/semmle/code/cpp/Function.qll index 0648c6260ce5..7cfa779338f7 100644 --- a/cpp/ql/lib/semmle/code/cpp/Function.qll +++ b/cpp/ql/lib/semmle/code/cpp/Function.qll @@ -500,6 +500,17 @@ class Function extends Declaration, ControlFlowNode, AccessHolder, @function { * Gets the nearest enclosing AccessHolder. */ override AccessHolder getEnclosingAccessHolder() { result = this.getDeclaringType() } + + /** + * Holds if this function has extraction errors that create an `ErrorExpr`. + */ + predicate hasErrors() { + exists(ErrorExpr e | + e.getEnclosingFunction() = this and + // Exclude the first allocator call argument because it is always extracted as `ErrorExpr`. + not exists(NewOrNewArrayExpr new | e = new.getAllocatorCall().getArgument(0)) + ) + } } pragma[noinline] diff --git a/cpp/ql/lib/semmle/code/cpp/PrintAST.qll b/cpp/ql/lib/semmle/code/cpp/PrintAST.qll index 6194710f0c58..3bdbd637cca6 100644 --- a/cpp/ql/lib/semmle/code/cpp/PrintAST.qll +++ b/cpp/ql/lib/semmle/code/cpp/PrintAST.qll @@ -80,6 +80,8 @@ private Declaration getAnEnclosingDeclaration(Locatable ast) { or result = ast.(Parameter).getFunction() or + result = ast.(Parameter).getCatchBlock().getEnclosingFunction() + or result = ast.(Expr).getEnclosingDeclaration() or result = ast.(Initializer).getDeclaration() @@ -510,6 +512,22 @@ class DeclStmtNode extends StmtNode { } } +/** + * A node representing a `Handler`. + */ +class HandlerNode extends ChildStmtNode { + Handler handler; + + HandlerNode() { handler = stmt } + + override BaseAstNode getChildInternal(int childIndex) { + result = super.getChildInternal(childIndex) + or + childIndex = -1 and + result.getAst() = handler.getParameter() + } +} + /** * A node representing a `Parameter`. */ @@ -754,6 +772,8 @@ private predicate namedStmtChildPredicates(Locatable s, Element e, string pred) or s.(ConstexprIfStmt).getElse() = e and pred = "getElse()" or + s.(Handler).getParameter() = e and pred = "getParameter()" + or s.(IfStmt).getInitialization() = e and pred = "getInitialization()" or s.(IfStmt).getCondition() = e and pred = "getCondition()" diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/PrintIR.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/PrintIR.qll index c4b18d9cb61c..7fd66ba84414 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/PrintIR.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/PrintIR.qll @@ -6,6 +6,112 @@ * uses, however, it is better to write a query that imports `PrintIR.qll`, extends * `PrintIRConfiguration`, and overrides `shouldPrintDeclaration()` to select a subset of declarations * to dump. + * + * Anatomy of a printed IR instruction + * + * An instruction: + * + * ``` + * # 2281| v2281_19(void) = Call[~String] : func:r2281_18, this:r2281_17 + * ``` + * + * The prefix `# 2281|` specifies that this instruction was generated by the C++ source code on line 2281. + * Scrolling up in the printed output, one will eventually find the name of the file to which the line + * belongs. + * + * `v2281_19(void)` is the result of the instruction. Here, `v` means this is a void result or operand (so + * there should be no later uses of the result; see below for other possible values). The `2281_19` is a + * unique ID for the result. This is usually just the line number plus a small integer suffix to make it + * unique within the function. The type of the result is `void`. In this case, it is `void`, because + * `~String` returns `void`. The type of the result is usually just the name of the appropriate C++ type, + * but it will sometimes be a type like `glval`, which means result holds a glvalue, which at the + * IR level works like a pointer. In other words, in the source code the type was `int`, but it is really + * more like an `int*`. We see this, for example, in `x = y;`, where `x` is a glvalue. + * + * `Call` is the opcode of the instruction. Common opcodes include: + * + * * Arithmetic operations: `Add`, `Sub`, `Mul`, etc. + * * Memory access operations: `Load`, `Store`. + * * Function calls: `Call`. + * * Literals: `Constant`. + * * Variable addresses: `VariableAddress`. + * * Function entry points: `EnterFunction`. + * * Return from a function: `Return`, `ReturnVoid`. Note that the value being returned is set separately by a + * `Store` to a special `#return` variable. + * * Stack unwinding for C++ function that throw and where the exception escapes the function: `Unwind`. + * * Common exit point for `Unwind` and `Return`: `ExitFunction`. + * * SSA-related opcodes: `Phi`, `Chi`. + * + * `[~String]` denotes additional information. The information might be present earlier in the IR, as is the case + * for `Call`, where it is the name of the called function. This is also the case for `Load` and `Store`, where it + * is the name of the variable that loaded or stored (if known). In the case of `Constant`, `FieldAddress`, and + * `VariableAddress`, the information between brackets does not occur earlier. + * + * `func:r2281_18` and `this:r28281_17` are the operands of the instruction. The `func:` prefix denotes the operand + * that holds the address of the called function. The `this:` prefix denotes the argument to the special `this` + * parameter of an instance member function. `r2281_18`, `r2281_17` are the unique IDs of the operands. Each of these + * matches the ID of a previously seen result, showing where that value came from. The `r` means that these are + * "register" operands (see below). + * + * Result and operand kinds: + * + * Every result and operand is one of these three kinds: + * + * * `r` "register". These operands are not stored in any particular memory location. We can think of them as + * temporary values created during the evaluation of an expression. A register operand almost always has one + * use, often in the same block as its definition. + * * `m` "memory". These operands represents accesses to a specific memory location. The location could be a + * local variable, a global variable, a field of an object, an element of an array, or any memory that we happen + * to have a pointer to. These only occur as the result of a `Store`, the source operand of a `Load` or on the + * SSA instructions (`Phi`, `Chi`). + * * `v` "void". Really just a register operand, but we mark register operands of type void with this special prefix + * so we know that there is no actual value there. + * + * Branches in the IR: + * + * The IR is divided into basic blocks. At the end of each block, there are one or more edges showing the possible + * control flow successors of the block. + * + * ``` + * # 44| v44_3(void) = ConditionalBranch : r44_2 + * #-----| False -> Block 4 + * #-----| True -> Block 3 + * ``` + * Here we have a block that ends with a conditional branch. The two edges show where the control flows to depending + * on whether the condition is true or false. + * + * SSA instructions: + * + * We use `Phi` instructions in SSA to create a single definition for a variable that might be assigned on multiple + * control flow paths. The `Phi` instruction merges the potential values of that variable from each predecessor edge, + * and the resulting definition is then used wherever that variable is accessed later on. + * + * When dealing with aliased memory, we use the `Chi` instruction to create a single definition for memory that might + * or might not have been updated by a store, depending on the actual address that was written to. For example, take: + * + * ```cpp + * int x = 5; + * int y = 7; + * int* p = condition ? &x : &y; + * *p = 6; + * return x; + * ``` + * + * At the point where we store to `*p`, we do not know whether `p` points to `x` or `y`. Thus, we do not know whether + * `return x;` is going to return the value that `x` was originally initialized to (5), or whether it will return 6, + * because it was overwritten by `*p = 6;`. We insert a `Chi` instruction immediately after the store to `*p`: + * + * ``` + * r2(int) = Constant[6] + * r3(int*) = <> + * m4(int) = Store : &r3, r2 // Stores the constant 6 to *p + * m5(unknown) = Chi : total:m1, partial:m4 + * ``` + * The `partial:` operand represents the memory that was just stored. The `total:` operand represents the previous + * contents of all of the memory that `p` might have pointed to (in this case, both `x` and `y`). The result of the + * `Chi` represents the new contents of whatever memory the `total:` operand referred to. We usually do not know exactly + * which parts of that memory were overwritten, but it does model that any of that memory could have been modified, so + * that later instructions do not assume that the memory was unchanged. */ private import internal.IRInternal diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/PrintIR.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/PrintIR.qll index c4b18d9cb61c..7fd66ba84414 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/PrintIR.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/PrintIR.qll @@ -6,6 +6,112 @@ * uses, however, it is better to write a query that imports `PrintIR.qll`, extends * `PrintIRConfiguration`, and overrides `shouldPrintDeclaration()` to select a subset of declarations * to dump. + * + * Anatomy of a printed IR instruction + * + * An instruction: + * + * ``` + * # 2281| v2281_19(void) = Call[~String] : func:r2281_18, this:r2281_17 + * ``` + * + * The prefix `# 2281|` specifies that this instruction was generated by the C++ source code on line 2281. + * Scrolling up in the printed output, one will eventually find the name of the file to which the line + * belongs. + * + * `v2281_19(void)` is the result of the instruction. Here, `v` means this is a void result or operand (so + * there should be no later uses of the result; see below for other possible values). The `2281_19` is a + * unique ID for the result. This is usually just the line number plus a small integer suffix to make it + * unique within the function. The type of the result is `void`. In this case, it is `void`, because + * `~String` returns `void`. The type of the result is usually just the name of the appropriate C++ type, + * but it will sometimes be a type like `glval`, which means result holds a glvalue, which at the + * IR level works like a pointer. In other words, in the source code the type was `int`, but it is really + * more like an `int*`. We see this, for example, in `x = y;`, where `x` is a glvalue. + * + * `Call` is the opcode of the instruction. Common opcodes include: + * + * * Arithmetic operations: `Add`, `Sub`, `Mul`, etc. + * * Memory access operations: `Load`, `Store`. + * * Function calls: `Call`. + * * Literals: `Constant`. + * * Variable addresses: `VariableAddress`. + * * Function entry points: `EnterFunction`. + * * Return from a function: `Return`, `ReturnVoid`. Note that the value being returned is set separately by a + * `Store` to a special `#return` variable. + * * Stack unwinding for C++ function that throw and where the exception escapes the function: `Unwind`. + * * Common exit point for `Unwind` and `Return`: `ExitFunction`. + * * SSA-related opcodes: `Phi`, `Chi`. + * + * `[~String]` denotes additional information. The information might be present earlier in the IR, as is the case + * for `Call`, where it is the name of the called function. This is also the case for `Load` and `Store`, where it + * is the name of the variable that loaded or stored (if known). In the case of `Constant`, `FieldAddress`, and + * `VariableAddress`, the information between brackets does not occur earlier. + * + * `func:r2281_18` and `this:r28281_17` are the operands of the instruction. The `func:` prefix denotes the operand + * that holds the address of the called function. The `this:` prefix denotes the argument to the special `this` + * parameter of an instance member function. `r2281_18`, `r2281_17` are the unique IDs of the operands. Each of these + * matches the ID of a previously seen result, showing where that value came from. The `r` means that these are + * "register" operands (see below). + * + * Result and operand kinds: + * + * Every result and operand is one of these three kinds: + * + * * `r` "register". These operands are not stored in any particular memory location. We can think of them as + * temporary values created during the evaluation of an expression. A register operand almost always has one + * use, often in the same block as its definition. + * * `m` "memory". These operands represents accesses to a specific memory location. The location could be a + * local variable, a global variable, a field of an object, an element of an array, or any memory that we happen + * to have a pointer to. These only occur as the result of a `Store`, the source operand of a `Load` or on the + * SSA instructions (`Phi`, `Chi`). + * * `v` "void". Really just a register operand, but we mark register operands of type void with this special prefix + * so we know that there is no actual value there. + * + * Branches in the IR: + * + * The IR is divided into basic blocks. At the end of each block, there are one or more edges showing the possible + * control flow successors of the block. + * + * ``` + * # 44| v44_3(void) = ConditionalBranch : r44_2 + * #-----| False -> Block 4 + * #-----| True -> Block 3 + * ``` + * Here we have a block that ends with a conditional branch. The two edges show where the control flows to depending + * on whether the condition is true or false. + * + * SSA instructions: + * + * We use `Phi` instructions in SSA to create a single definition for a variable that might be assigned on multiple + * control flow paths. The `Phi` instruction merges the potential values of that variable from each predecessor edge, + * and the resulting definition is then used wherever that variable is accessed later on. + * + * When dealing with aliased memory, we use the `Chi` instruction to create a single definition for memory that might + * or might not have been updated by a store, depending on the actual address that was written to. For example, take: + * + * ```cpp + * int x = 5; + * int y = 7; + * int* p = condition ? &x : &y; + * *p = 6; + * return x; + * ``` + * + * At the point where we store to `*p`, we do not know whether `p` points to `x` or `y`. Thus, we do not know whether + * `return x;` is going to return the value that `x` was originally initialized to (5), or whether it will return 6, + * because it was overwritten by `*p = 6;`. We insert a `Chi` instruction immediately after the store to `*p`: + * + * ``` + * r2(int) = Constant[6] + * r3(int*) = <> + * m4(int) = Store : &r3, r2 // Stores the constant 6 to *p + * m5(unknown) = Chi : total:m1, partial:m4 + * ``` + * The `partial:` operand represents the memory that was just stored. The `total:` operand represents the previous + * contents of all of the memory that `p` might have pointed to (in this case, both `x` and `y`). The result of the + * `Chi` represents the new contents of whatever memory the `total:` operand referred to. We usually do not know exactly + * which parts of that memory were overwritten, but it does model that any of that memory could have been modified, so + * that later instructions do not assume that the memory was unchanged. */ private import internal.IRInternal diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/PrintIR.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/PrintIR.qll index c4b18d9cb61c..7fd66ba84414 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/PrintIR.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/PrintIR.qll @@ -6,6 +6,112 @@ * uses, however, it is better to write a query that imports `PrintIR.qll`, extends * `PrintIRConfiguration`, and overrides `shouldPrintDeclaration()` to select a subset of declarations * to dump. + * + * Anatomy of a printed IR instruction + * + * An instruction: + * + * ``` + * # 2281| v2281_19(void) = Call[~String] : func:r2281_18, this:r2281_17 + * ``` + * + * The prefix `# 2281|` specifies that this instruction was generated by the C++ source code on line 2281. + * Scrolling up in the printed output, one will eventually find the name of the file to which the line + * belongs. + * + * `v2281_19(void)` is the result of the instruction. Here, `v` means this is a void result or operand (so + * there should be no later uses of the result; see below for other possible values). The `2281_19` is a + * unique ID for the result. This is usually just the line number plus a small integer suffix to make it + * unique within the function. The type of the result is `void`. In this case, it is `void`, because + * `~String` returns `void`. The type of the result is usually just the name of the appropriate C++ type, + * but it will sometimes be a type like `glval`, which means result holds a glvalue, which at the + * IR level works like a pointer. In other words, in the source code the type was `int`, but it is really + * more like an `int*`. We see this, for example, in `x = y;`, where `x` is a glvalue. + * + * `Call` is the opcode of the instruction. Common opcodes include: + * + * * Arithmetic operations: `Add`, `Sub`, `Mul`, etc. + * * Memory access operations: `Load`, `Store`. + * * Function calls: `Call`. + * * Literals: `Constant`. + * * Variable addresses: `VariableAddress`. + * * Function entry points: `EnterFunction`. + * * Return from a function: `Return`, `ReturnVoid`. Note that the value being returned is set separately by a + * `Store` to a special `#return` variable. + * * Stack unwinding for C++ function that throw and where the exception escapes the function: `Unwind`. + * * Common exit point for `Unwind` and `Return`: `ExitFunction`. + * * SSA-related opcodes: `Phi`, `Chi`. + * + * `[~String]` denotes additional information. The information might be present earlier in the IR, as is the case + * for `Call`, where it is the name of the called function. This is also the case for `Load` and `Store`, where it + * is the name of the variable that loaded or stored (if known). In the case of `Constant`, `FieldAddress`, and + * `VariableAddress`, the information between brackets does not occur earlier. + * + * `func:r2281_18` and `this:r28281_17` are the operands of the instruction. The `func:` prefix denotes the operand + * that holds the address of the called function. The `this:` prefix denotes the argument to the special `this` + * parameter of an instance member function. `r2281_18`, `r2281_17` are the unique IDs of the operands. Each of these + * matches the ID of a previously seen result, showing where that value came from. The `r` means that these are + * "register" operands (see below). + * + * Result and operand kinds: + * + * Every result and operand is one of these three kinds: + * + * * `r` "register". These operands are not stored in any particular memory location. We can think of them as + * temporary values created during the evaluation of an expression. A register operand almost always has one + * use, often in the same block as its definition. + * * `m` "memory". These operands represents accesses to a specific memory location. The location could be a + * local variable, a global variable, a field of an object, an element of an array, or any memory that we happen + * to have a pointer to. These only occur as the result of a `Store`, the source operand of a `Load` or on the + * SSA instructions (`Phi`, `Chi`). + * * `v` "void". Really just a register operand, but we mark register operands of type void with this special prefix + * so we know that there is no actual value there. + * + * Branches in the IR: + * + * The IR is divided into basic blocks. At the end of each block, there are one or more edges showing the possible + * control flow successors of the block. + * + * ``` + * # 44| v44_3(void) = ConditionalBranch : r44_2 + * #-----| False -> Block 4 + * #-----| True -> Block 3 + * ``` + * Here we have a block that ends with a conditional branch. The two edges show where the control flows to depending + * on whether the condition is true or false. + * + * SSA instructions: + * + * We use `Phi` instructions in SSA to create a single definition for a variable that might be assigned on multiple + * control flow paths. The `Phi` instruction merges the potential values of that variable from each predecessor edge, + * and the resulting definition is then used wherever that variable is accessed later on. + * + * When dealing with aliased memory, we use the `Chi` instruction to create a single definition for memory that might + * or might not have been updated by a store, depending on the actual address that was written to. For example, take: + * + * ```cpp + * int x = 5; + * int y = 7; + * int* p = condition ? &x : &y; + * *p = 6; + * return x; + * ``` + * + * At the point where we store to `*p`, we do not know whether `p` points to `x` or `y`. Thus, we do not know whether + * `return x;` is going to return the value that `x` was originally initialized to (5), or whether it will return 6, + * because it was overwritten by `*p = 6;`. We insert a `Chi` instruction immediately after the store to `*p`: + * + * ``` + * r2(int) = Constant[6] + * r3(int*) = <> + * m4(int) = Store : &r3, r2 // Stores the constant 6 to *p + * m5(unknown) = Chi : total:m1, partial:m4 + * ``` + * The `partial:` operand represents the memory that was just stored. The `total:` operand represents the previous + * contents of all of the memory that `p` might have pointed to (in this case, both `x` and `y`). The result of the + * `Chi` represents the new contents of whatever memory the `total:` operand referred to. We usually do not know exactly + * which parts of that memory were overwritten, but it does model that any of that memory could have been modified, so + * that later instructions do not assume that the memory was unchanged. */ private import internal.IRInternal diff --git a/cpp/ql/lib/semmle/code/cpp/models/implementations/Fopen.qll b/cpp/ql/lib/semmle/code/cpp/models/implementations/Fopen.qll index 6bc700becf1e..fc6ceb321c1f 100644 --- a/cpp/ql/lib/semmle/code/cpp/models/implementations/Fopen.qll +++ b/cpp/ql/lib/semmle/code/cpp/models/implementations/Fopen.qll @@ -7,7 +7,7 @@ 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 { +private class Fopen extends Function, AliasFunction, SideEffectFunction, TaintFunction { Fopen() { this.hasGlobalOrStdName(["fopen", "fopen_s", "freopen"]) or @@ -47,4 +47,22 @@ private class Fopen extends Function, AliasFunction, SideEffectFunction { i = 0 and buffer = true } + + override predicate hasTaintFlow(FunctionInput input, FunctionOutput output) { + ( + this.hasGlobalOrStdName(["fopen", "freopen"]) or + this.hasGlobalName(["_wfopen", "_fsopen", "_wfsopen"]) + ) and + input.isParameterDeref(0) and + output.isReturnValueDeref() + or + // The out parameter is a pointer to a `FILE*`. + this.hasGlobalOrStdName("fopen_s") and + input.isParameterDeref(1) and + output.isParameterDeref(0, 2) + or + this.hasGlobalName(["_open", "_wopen"]) and + input.isParameterDeref(0) and + output.isReturnValue() + } } diff --git a/cpp/ql/lib/semmle/code/cpp/rangeanalysis/SimpleRangeAnalysis.qll b/cpp/ql/lib/semmle/code/cpp/rangeanalysis/SimpleRangeAnalysis.qll index 1ce7a6a4f5a8..990def8b2f1c 100644 --- a/cpp/ql/lib/semmle/code/cpp/rangeanalysis/SimpleRangeAnalysis.qll +++ b/cpp/ql/lib/semmle/code/cpp/rangeanalysis/SimpleRangeAnalysis.qll @@ -192,6 +192,37 @@ private class UnsignedMulExpr extends MulExpr { } } +/** + * Gets the value of the `EOF` macro. + * + * This is typically `"-1"`, but this is not guaranteed to be the case on all + * systems. + */ +private int getEofValue() { + exists(MacroInvocation mi | + mi.getMacroName() = "EOF" and + result = unique( | | mi.getExpr().getValue().toInt()) + ) +} + +/** Get standard `getc` function or related variants. */ +private class Getc extends Function { + Getc() { this.hasGlobalOrStdOrBslName(["fgetc", "getc"]) } +} + +/** A call to `getc` */ +private class CallToGetc extends FunctionCall { + CallToGetc() { this.getTarget() instanceof Getc } +} + +/** + * A call to `getc` that we can analyze because we know + * the value of the `EOF` macro. + */ +private class AnalyzableCallToGetc extends CallToGetc { + AnalyzableCallToGetc() { exists(getEofValue()) } +} + /** * Holds if `expr` is effectively a multiplication of `operand` with the * positive constant `positive`. @@ -287,6 +318,8 @@ private predicate analyzableExpr(Expr e) { or e instanceof RemExpr or + e instanceof AnalyzableCallToGetc + or // A conversion is analyzable, provided that its child has an arithmetic // type. (Sometimes the child is a reference type, and so does not get // any bounds.) Rather than checking whether the type of the child is @@ -861,6 +894,14 @@ private float getLowerBoundsImpl(Expr expr) { ) ) or + exists(AnalyzableCallToGetc getc | + expr = getc and + // from https://en.cppreference.com/w/c/io/fgetc: + // On success, returns the obtained character as an unsigned char + // converted to an int. On failure, returns EOF. + result = min([typeLowerBound(any(UnsignedCharType pct)), getEofValue()]) + ) + or // If the conversion is to an arithmetic type then we just return the // lower bound of the child. We do not need to handle truncation and // overflow here, because that is done in `getTruncatedLowerBounds`. @@ -1055,6 +1096,14 @@ private float getUpperBoundsImpl(Expr expr) { ) ) or + exists(AnalyzableCallToGetc getc | + expr = getc and + // from https://en.cppreference.com/w/c/io/fgetc: + // On success, returns the obtained character as an unsigned char + // converted to an int. On failure, returns EOF. + result = max([typeUpperBound(any(UnsignedCharType pct)), getEofValue()]) + ) + or // If the conversion is to an arithmetic type then we just return the // upper bound of the child. We do not need to handle truncation and // overflow here, because that is done in `getTruncatedUpperBounds`. diff --git a/cpp/ql/lib/semmlecode.cpp.dbscheme b/cpp/ql/lib/semmlecode.cpp.dbscheme index 7ff6a6e53dbc..6f5d51e89e76 100644 --- a/cpp/ql/lib/semmlecode.cpp.dbscheme +++ b/cpp/ql/lib/semmlecode.cpp.dbscheme @@ -1790,6 +1790,7 @@ case @expr.kind of | 387 = @istriviallyrelocatable | 388 = @datasizeof | 389 = @c11_generic +| 390 = @requires_expr ; @var_args_expr = @vastartexpr diff --git a/cpp/ql/lib/semmlecode.cpp.dbscheme.stats b/cpp/ql/lib/semmlecode.cpp.dbscheme.stats index 07045b0bd67a..20534e223c94 100644 --- a/cpp/ql/lib/semmlecode.cpp.dbscheme.stats +++ b/cpp/ql/lib/semmlecode.cpp.dbscheme.stats @@ -18,15 +18,15 @@ @location_default - 29765023 + 29768202 @location_stmt - 3819884 + 3819867 @location_expr - 13187951 + 13187892 @diagnostic @@ -34,43 +34,43 @@ @file - 123252 + 123267 @folder - 16340 + 16342 @macro_expansion - 33257908 + 33257556 @other_macro_reference - 859032 + 859138 @function - 4179381 + 4179893 @fun_decl - 4543537 + 4544093 @var_decl - 8039427 + 8040412 @type_decl - 3283466 + 3283868 @namespace_decl - 311638 + 311636 @using_declaration - 363221 + 363266 @using_directive @@ -82,15 +82,15 @@ @static_assert - 134702 + 134701 @parameter - 6190639 + 6191397 @membervariable - 1054697 + 1054692 @globalvariable @@ -102,7 +102,7 @@ @enumconstant - 241670 + 241669 @errortype @@ -330,23 +330,23 @@ @pointer - 568175 + 568245 @type_with_specifiers - 852029 + 852134 @array - 110180 + 110193 @routineptr - 625429 + 625426 @reference - 1276410 + 1276567 @gnu_vector @@ -358,7 +358,7 @@ @rvalue_reference - 333342 + 333382 @block @@ -366,43 +366,43 @@ @decltype - 27078 + 27081 @usertype - 5234965 + 5235606 @mangledname - 6061784 + 6062526 @type_mention - 4029136 + 4029118 @routinetype - 538824 + 538891 @ptrtomember - 37816 + 37820 @specifier - 24743 + 24746 @gnuattribute - 553702 + 553770 @stdattribute - 253563 + 253562 @declspec - 239153 + 239152 @msattribute @@ -410,15 +410,15 @@ @alignas - 4668 + 4669 @attribute_arg_token - 25210 + 25213 @attribute_arg_constant_expr - 318402 + 318441 @attribute_arg_empty @@ -438,19 +438,19 @@ @derivation - 391568 + 391566 @frienddecl - 707052 + 707049 @comment - 8266137 + 8266100 @namespace - 12138 + 12139 @specialnamequalifyingelement @@ -458,15 +458,15 @@ @namequalifier - 1513800 + 1513793 @value - 10776699 + 10776651 @initialiser - 1710781 + 1710773 @address_of @@ -474,15 +474,15 @@ @indirect - 292646 + 292644 @array_to_pointer - 1430838 + 1430832 @parexpr - 3587479 + 3587464 @arithnegexpr @@ -498,7 +498,7 @@ @notexpr - 276425 + 276424 @postincrexpr @@ -518,19 +518,19 @@ @conditionalexpr - 657237 + 657235 @addexpr - 398394 + 398392 @subexpr - 340758 + 340757 @mulexpr - 306356 + 306355 @divexpr @@ -542,7 +542,7 @@ @paddexpr - 86662 + 86661 @psubexpr @@ -554,51 +554,51 @@ @lshiftexpr - 566303 + 566300 @rshiftexpr - 140840 + 140839 @andexpr - 489056 + 489054 @orexpr - 145465 + 145464 @xorexpr - 54175 + 54174 @eqexpr - 470650 + 470648 @neexpr - 301667 + 301666 @gtexpr - 104111 + 104123 @ltexpr - 101776 + 101789 @geexpr - 59249 + 59248 @leexpr - 212526 + 212525 @assignexpr - 936957 + 936952 @assignaddexpr @@ -614,7 +614,7 @@ @assigndivexpr - 4994 + 4993 @assignremexpr @@ -638,7 +638,7 @@ @assignxorexpr - 21844 + 21843 @assignpaddexpr @@ -650,15 +650,15 @@ @andlogicalexpr - 249952 + 249951 @orlogicalexpr - 866110 + 866116 @commaexpr - 122841 + 122840 @subscriptexpr @@ -666,7 +666,7 @@ @callexpr - 316534 + 316533 @vastartexpr @@ -686,11 +686,11 @@ @varaccess - 6029127 + 6029100 @runtime_sizeof - 295836 + 295835 @runtime_alignof @@ -698,27 +698,27 @@ @expr_stmt - 94387 + 94386 @routineexpr - 3186314 + 3186299 @type_operand - 1128756 + 1128764 @offsetofexpr - 19993 + 19992 @typescompexpr - 563777 + 563781 @literal - 4406923 + 4406841 @aggregateliteral @@ -730,7 +730,7 @@ @temp_init - 794460 + 794456 @errorexpr @@ -738,11 +738,11 @@ @reference_to - 1572195 + 1572188 @ref_indirect - 1901648 + 1901640 @vacuous_destructor_call @@ -802,7 +802,7 @@ @thisaccess - 1116784 + 1116779 @new_expr @@ -830,7 +830,7 @@ @sizeof_pack - 5602 + 5603 @hasassignexpr @@ -942,7 +942,7 @@ @ctorfieldinit - 190976 + 190975 @ctordelegatinginit @@ -962,7 +962,7 @@ @static_cast - 215649 + 215647 @reinterpret_cast @@ -978,11 +978,11 @@ @lambdaexpr - 21475 + 21478 @param_ref - 235619 + 235618 @noopexpr @@ -1022,7 +1022,7 @@ @istriviallycopyableexpr - 3734 + 3735 @isliteraltypeexpr @@ -1086,7 +1086,7 @@ @noexceptexpr - 24641 + 24640 @builtinshufflevector @@ -1258,7 +1258,7 @@ @reuseexpr - 373719 + 373717 @istriviallycopyassignable @@ -1356,25 +1356,29 @@ @c11_generic 8 + + @requires_expr + 1 + @lambdacapture - 28011 + 28015 @stmt_expr - 1486025 + 1486018 @stmt_if - 725914 + 725911 @stmt_while - 29317 + 29316 @stmt_goto - 110691 + 110690 @stmt_label @@ -1382,15 +1386,15 @@ @stmt_return - 1280145 + 1280140 @stmt_block - 1419271 + 1419265 @stmt_end_test_while - 148874 + 148873 @stmt_for @@ -1398,7 +1402,7 @@ @stmt_switch_case - 207501 + 207500 @stmt_switch @@ -1410,7 +1414,7 @@ @stmt_decl - 593124 + 593118 @stmt_empty @@ -1446,15 +1450,15 @@ @stmt_range_based_for - 8403 + 8404 @stmt_handler - 62676 + 62675 @stmt_constexpr_if - 52998 + 52997 @stmt_co_return @@ -1462,39 +1466,39 @@ @ppd_if - 667151 + 667232 @ppd_ifdef - 263312 + 263344 @ppd_ifndef - 266580 + 266612 @ppd_elif - 25210 + 25213 @ppd_else - 209155 + 209181 @ppd_endif - 1197043 + 1197190 @ppd_plain_include - 311399 + 311437 @ppd_define - 2291924 + 2291914 @ppd_undef - 258643 + 258675 @ppd_include_next @@ -1510,7 +1514,7 @@ @ppd_pragma - 296710 + 296709 @ppd_objc_import @@ -1600,7 +1604,7 @@ compilation_args - 652551 + 652548 id @@ -2148,7 +2152,7 @@ seconds - 9149 + 9348 @@ -2237,39 +2241,39 @@ 239 - 5 - 8 - 159 + 6 + 7 + 119 8 - 10 - 119 + 9 + 79 - 10 + 9 11 159 11 - 15 + 13 159 - 17 - 19 + 14 + 17 159 - 20 - 44 + 18 + 22 159 - 50 - 92 - 79 + 25 + 91 + 159 @@ -2337,37 +2341,37 @@ 3 4 - 1478 + 1358 4 5 - 279 + 399 5 6 - 239 + 279 6 7 - 479 + 319 7 8 - 39 + 159 8 9 - 279 + 239 9 - 24 - 239 + 23 + 279 25 @@ -2420,21 +2424,16 @@ 3 4 - 39 - - - 4 - 5 - 39 + 79 - 124 - 125 + 138 + 139 39 - 129 - 130 + 144 + 145 39 @@ -2451,27 +2450,27 @@ 1 2 - 4394 + 4434 2 3 - 1757 + 2437 3 4 - 1518 + 1158 4 5 - 998 + 679 5 46 - 479 + 639 @@ -2492,27 +2491,27 @@ 2 3 - 1478 + 2037 3 4 - 1478 + 998 4 5 - 799 + 918 5 - 6 - 559 + 7 + 759 - 6 - 75 - 719 + 7 + 74 + 519 @@ -2528,12 +2527,12 @@ 1 2 - 7910 + 7191 2 3 - 1238 + 2157 @@ -2877,7 +2876,7 @@ cpu_seconds - 7100 + 7145 elapsed_seconds @@ -2927,22 +2926,17 @@ 1 2 - 5655 + 5757 2 3 - 857 + 903 3 - 7 - 553 - - - 11 - 13 - 33 + 20 + 485 @@ -2958,12 +2952,12 @@ 1 2 - 6400 + 6524 2 3 - 699 + 620 @@ -2982,8 +2976,8 @@ 33 - 4 - 5 + 6 + 7 11 @@ -2991,10 +2985,15 @@ 9 11 + + 10 + 11 + 11 + 13 14 - 22 + 11 51 @@ -3002,23 +3001,23 @@ 11 - 159 - 160 + 164 + 165 11 - 177 - 178 + 171 + 172 11 - 185 - 186 + 191 + 192 11 - 247 - 248 + 243 + 244 11 @@ -3038,8 +3037,8 @@ 33 - 4 - 5 + 6 + 7 11 @@ -3048,8 +3047,8 @@ 11 - 12 - 13 + 10 + 11 11 @@ -3063,23 +3062,23 @@ 11 - 112 - 113 + 121 + 122 11 - 124 - 125 + 123 + 124 11 - 145 - 146 + 138 + 139 11 - 218 - 219 + 214 + 215 11 @@ -4852,31 +4851,31 @@ locations_default - 29765023 + 29768202 id - 29765023 + 29768202 container - 123252 + 123267 startLine - 2095293 + 2095549 startColumn - 36882 + 36886 endLine - 2099495 + 2099752 endColumn - 48087 + 48093 @@ -4890,7 +4889,7 @@ 1 2 - 29765023 + 29768202 @@ -4906,7 +4905,7 @@ 1 2 - 29765023 + 29768202 @@ -4922,7 +4921,7 @@ 1 2 - 29765023 + 29768202 @@ -4938,7 +4937,7 @@ 1 2 - 29765023 + 29768202 @@ -4954,7 +4953,7 @@ 1 2 - 29765023 + 29768202 @@ -4970,67 +4969,67 @@ 1 11 - 9804 + 9805 11 18 - 10271 + 10272 18 30 - 9337 + 9338 30 42 - 9804 + 9805 43 61 - 9804 + 9805 61 79 - 9337 + 9338 80 106 - 9804 + 9805 108 149 - 9337 + 9338 149 199 - 9337 + 9338 206 291 - 9337 + 9338 304 469 - 9337 + 9338 482 850 - 9337 + 9338 936 2380 - 8403 + 8404 @@ -5046,67 +5045,67 @@ 1 8 - 9337 + 9338 8 13 - 9337 + 9338 13 20 - 9804 + 9805 20 32 - 9337 + 9338 32 43 - 9804 + 9805 44 61 - 9337 + 9338 62 72 - 9337 + 9338 73 93 - 9337 + 9338 97 128 - 9337 + 9338 128 180 - 9337 + 9338 180 267 - 9337 + 9338 277 414 - 9337 + 9338 439 1465 - 9337 + 9338 1557 @@ -5127,67 +5126,67 @@ 1 4 - 8870 + 8871 4 5 - 7936 + 7937 5 6 - 7469 + 7470 6 8 - 11204 + 11206 8 10 - 9337 + 9338 10 15 - 10737 + 10739 15 23 - 9804 + 9805 23 28 - 11204 + 11206 28 34 - 9804 + 9805 34 44 - 9337 + 9338 44 55 - 9337 + 9338 55 66 - 9804 + 9805 66 77 - 8403 + 8404 @@ -5203,67 +5202,67 @@ 1 8 - 9337 + 9338 8 13 - 9337 + 9338 13 20 - 9804 + 9805 20 32 - 9337 + 9338 32 43 - 9804 + 9805 43 60 - 9337 + 9338 61 71 - 9337 + 9338 72 93 - 9337 + 9338 94 127 - 9337 + 9338 128 179 - 9337 + 9338 180 268 - 9337 + 9338 278 413 - 9337 + 9338 437 1465 - 9337 + 9338 1554 @@ -5284,67 +5283,67 @@ 1 9 - 9804 + 9805 9 13 - 9337 + 9338 13 18 - 9337 + 9338 18 26 - 10271 + 10272 27 33 - 9337 + 9338 33 39 - 9337 + 9338 39 47 - 10271 + 10272 47 53 - 9337 + 9338 53 60 - 10271 + 10272 60 66 - 9337 + 9338 66 74 - 9804 + 9805 74 78 - 9804 + 9805 78 90 - 7002 + 7003 @@ -5360,52 +5359,52 @@ 1 2 - 583115 + 583186 2 3 - 314200 + 314239 3 4 - 195616 + 195640 4 6 - 162002 + 162022 6 10 - 183011 + 183033 10 16 - 162936 + 162956 16 25 - 169005 + 169026 25 46 - 161068 + 161088 46 169 - 157333 + 157353 169 265 - 7002 + 7003 @@ -5421,42 +5420,42 @@ 1 2 - 871171 + 871278 2 3 - 273583 + 273616 3 5 - 193749 + 193773 5 8 - 173674 + 173695 8 13 - 188146 + 188169 13 20 - 161068 + 161088 20 51 - 159668 + 159687 51 265 - 74231 + 74240 @@ -5472,47 +5471,47 @@ 1 2 - 612060 + 612135 2 3 - 313266 + 313305 3 4 - 198417 + 198442 4 6 - 183011 + 183033 6 9 - 173207 + 173228 9 13 - 163402 + 163423 13 19 - 174607 + 174629 19 29 - 164803 + 164823 29 52 - 112514 + 112528 @@ -5528,22 +5527,22 @@ 1 2 - 1531786 + 1531974 2 3 - 348748 + 348791 3 5 - 162002 + 162022 5 16 - 52755 + 52762 @@ -5559,47 +5558,47 @@ 1 2 - 587783 + 587855 2 3 - 316068 + 316106 3 4 - 197484 + 197508 4 6 - 168538 + 168559 6 9 - 158267 + 158286 9 14 - 170872 + 170893 14 21 - 175074 + 175096 21 32 - 162469 + 162489 32 63 - 157800 + 157819 64 @@ -6015,52 +6014,52 @@ 1 2 - 593386 + 593459 2 3 - 306263 + 306301 3 4 - 198417 + 198442 4 6 - 159668 + 159687 6 10 - 182544 + 182566 10 16 - 162002 + 162022 16 25 - 171339 + 171360 25 46 - 158734 + 158753 46 161 - 158267 + 158286 162 265 - 8870 + 8871 @@ -6076,47 +6075,47 @@ 1 2 - 886577 + 886686 2 3 - 260044 + 260076 3 4 - 125120 + 125135 4 6 - 140993 + 141010 6 10 - 184878 + 184901 10 15 - 168538 + 168559 15 26 - 163402 + 163423 26 120 - 158267 + 158286 121 265 - 11671 + 11673 @@ -6132,22 +6131,22 @@ 1 2 - 1529452 + 1529639 2 3 - 341745 + 341787 3 5 - 170872 + 170893 5 10 - 57424 + 57431 @@ -6163,47 +6162,47 @@ 1 2 - 623265 + 623342 2 3 - 303462 + 303499 3 4 - 201685 + 201710 4 6 - 183945 + 183967 6 9 - 169939 + 169959 9 13 - 166671 + 166691 13 19 - 175074 + 175096 19 29 - 161068 + 161088 29 52 - 114382 + 114396 @@ -6219,52 +6218,52 @@ 1 2 - 599922 + 599995 2 3 - 306263 + 306301 3 4 - 197017 + 197041 4 6 - 169005 + 169026 6 9 - 156400 + 156419 9 14 - 169005 + 169026 14 21 - 177875 + 177897 21 32 - 162002 + 162022 32 60 - 158267 + 158286 60 65 - 3734 + 3735 @@ -6280,62 +6279,62 @@ 1 2 - 5135 + 5136 2 8 - 3734 + 3735 9 186 - 3734 + 3735 193 288 - 3734 + 3735 294 495 - 3734 + 3735 503 - 555 - 3734 + 554 + 3735 561 633 - 3734 + 3735 640 758 - 3734 + 3735 758 869 - 3734 + 3735 875 1074 - 3734 + 3735 1074 1281 - 3734 + 3735 1289 1590 - 3734 + 3735 1685 @@ -6356,62 +6355,62 @@ 1 2 - 5602 + 5603 2 5 - 3734 + 3735 5 65 - 3734 + 3735 70 100 - 3734 + 3735 100 111 - 3734 + 3735 112 122 - 4201 + 4202 122 140 - 3734 + 3735 143 153 - 3734 + 3735 153 161 - 4201 + 4202 161 173 - 4201 + 4202 173 178 - 3734 + 3735 188 265 - 3734 + 3735 @@ -6427,62 +6426,62 @@ 1 2 - 5602 + 5603 2 8 - 3734 + 3735 9 105 - 3734 + 3735 155 241 - 3734 + 3735 253 336 - 3734 + 3735 340 426 - 3734 + 3735 434 488 - 3734 + 3735 489 572 - 3734 + 3735 573 623 - 3734 + 3735 626 696 - 4201 + 4202 701 813 - 3734 + 3735 818 1095 - 3734 + 3735 1172 @@ -6508,32 +6507,32 @@ 2 4 - 3734 + 3735 4 8 - 4201 + 4202 8 15 - 3734 + 3735 15 23 - 3734 + 3735 23 29 - 3734 + 3735 29 35 - 4201 + 4202 35 @@ -6553,12 +6552,12 @@ 44 46 - 3734 + 3735 46 49 - 3734 + 3735 49 @@ -6579,62 +6578,62 @@ 1 2 - 5602 + 5603 2 8 - 3734 + 3735 9 156 - 3734 + 3735 159 240 - 3734 + 3735 251 335 - 3734 + 3735 342 430 - 3734 + 3735 432 490 - 3734 + 3735 490 573 - 3734 + 3735 574 622 - 3734 + 3735 626 698 - 3734 + 3735 700 798 - 3734 + 3735 811 987 - 3734 + 3735 1096 @@ -6649,11 +6648,11 @@ locations_stmt - 3819884 + 3819867 id - 3819884 + 3819867 container @@ -6661,7 +6660,7 @@ startLine - 200172 + 200171 startColumn @@ -6669,7 +6668,7 @@ endLine - 194428 + 194427 endColumn @@ -6687,7 +6686,7 @@ 1 2 - 3819884 + 3819867 @@ -6703,7 +6702,7 @@ 1 2 - 3819884 + 3819867 @@ -6719,7 +6718,7 @@ 1 2 - 3819884 + 3819867 @@ -6735,7 +6734,7 @@ 1 2 - 3819884 + 3819867 @@ -6751,7 +6750,7 @@ 1 2 - 3819884 + 3819867 @@ -7167,7 +7166,7 @@ 4 6 - 14473 + 14472 6 @@ -7273,7 +7272,7 @@ 29 36 - 16017 + 16016 36 @@ -7466,7 +7465,7 @@ 6 8 - 14720 + 14719 8 @@ -7927,7 +7926,7 @@ 15 21 - 16120 + 16119 21 @@ -7942,7 +7941,7 @@ 34 42 - 15770 + 15769 42 @@ -8631,11 +8630,11 @@ locations_expr - 13187951 + 13187892 id - 13187951 + 13187892 container @@ -8643,7 +8642,7 @@ startLine - 192225 + 192224 startColumn @@ -8651,7 +8650,7 @@ endLine - 192204 + 192203 endColumn @@ -8669,7 +8668,7 @@ 1 2 - 13187951 + 13187892 @@ -8685,7 +8684,7 @@ 1 2 - 13187951 + 13187892 @@ -8701,7 +8700,7 @@ 1 2 - 13187951 + 13187892 @@ -8717,7 +8716,7 @@ 1 2 - 13187951 + 13187892 @@ -8733,7 +8732,7 @@ 1 2 - 13187951 + 13187892 @@ -9225,7 +9224,7 @@ 1 2 - 23552 + 23551 2 @@ -9306,7 +9305,7 @@ 7 11 - 16717 + 16716 11 @@ -9448,7 +9447,7 @@ 43 47 - 14720 + 14719 47 @@ -9458,7 +9457,7 @@ 52 65 - 14473 + 14472 65 @@ -9940,7 +9939,7 @@ 1 2 - 23552 + 23551 2 @@ -10563,23 +10562,23 @@ numlines - 1383789 + 1383959 element_id - 1376786 + 1376955 num_lines - 101776 + 101789 num_code - 84969 + 84979 num_comment - 59758 + 59766 @@ -10593,12 +10592,12 @@ 1 2 - 1369783 + 1369951 2 3 - 7002 + 7003 @@ -10614,7 +10613,7 @@ 1 2 - 1370717 + 1370885 2 @@ -10635,7 +10634,7 @@ 1 2 - 1376786 + 1376955 @@ -10651,22 +10650,22 @@ 1 2 - 68162 + 68170 2 3 - 12138 + 12139 3 4 - 7469 + 7470 4 21 - 7936 + 7937 29 @@ -10687,22 +10686,22 @@ 1 2 - 70496 + 70505 2 3 - 12138 + 12139 3 4 - 8403 + 8404 4 6 - 9337 + 9338 6 @@ -10723,17 +10722,17 @@ 1 2 - 69562 + 69571 2 3 - 14939 + 14941 3 4 - 10737 + 10739 4 @@ -10754,12 +10753,12 @@ 1 2 - 52755 + 52762 2 3 - 14472 + 14474 3 @@ -10774,7 +10773,7 @@ 44 922 - 4668 + 4669 @@ -10790,12 +10789,12 @@ 1 2 - 52755 + 52762 2 3 - 16807 + 16809 3 @@ -10826,22 +10825,22 @@ 1 2 - 53222 + 53229 2 3 - 15873 + 15875 3 5 - 7469 + 7470 5 7 - 5135 + 5136 7 @@ -10862,27 +10861,27 @@ 1 2 - 34548 + 34552 2 3 - 9337 + 9338 3 4 - 4201 + 4202 4 6 - 4668 + 4669 6 11 - 5135 + 5136 17 @@ -10903,27 +10902,27 @@ 1 2 - 34548 + 34552 2 3 - 9337 + 9338 3 4 - 4201 + 4202 4 6 - 4668 + 4669 6 8 - 4668 + 4669 10 @@ -10944,27 +10943,27 @@ 1 2 - 34548 + 34552 2 3 - 9337 + 9338 3 4 - 4201 + 4202 4 6 - 4668 + 4669 6 10 - 4668 + 4669 10 @@ -11611,15 +11610,15 @@ files - 123252 + 123267 id - 123252 + 123267 name - 123252 + 123267 @@ -11633,7 +11632,7 @@ 1 2 - 123252 + 123267 @@ -11649,7 +11648,7 @@ 1 2 - 123252 + 123267 @@ -11659,15 +11658,15 @@ folders - 16340 + 16342 id - 16340 + 16342 name - 16340 + 16342 @@ -11681,7 +11680,7 @@ 1 2 - 16340 + 16342 @@ -11697,7 +11696,7 @@ 1 2 - 16340 + 16342 @@ -11707,15 +11706,15 @@ containerparent - 138659 + 138676 parent - 16340 + 16342 child - 138659 + 138676 @@ -11729,7 +11728,7 @@ 1 2 - 7469 + 7470 2 @@ -11770,7 +11769,7 @@ 1 2 - 138659 + 138676 @@ -11780,7 +11779,7 @@ fileannotations - 5129447 + 5129404 id @@ -11792,7 +11791,7 @@ name - 54773 + 54772 value @@ -11815,7 +11814,7 @@ 2 3 - 4730 + 4729 @@ -12066,7 +12065,7 @@ 20 34 - 4222 + 4221 34 @@ -12102,7 +12101,7 @@ 1 2 - 54773 + 54772 @@ -12326,12 +12325,12 @@ 39 48 - 3612 + 3646 48 74 - 3567 + 3533 74 @@ -12356,15 +12355,15 @@ inmacroexpansion - 109779137 + 109779097 id - 18027366 + 18027697 inv - 2700175 + 2700160 @@ -12378,37 +12377,37 @@ 1 3 - 1581965 + 1582361 3 5 - 1077798 + 1077794 5 6 - 1184883 + 1184878 6 7 - 4819923 + 4819904 7 8 - 6385959 + 6385933 8 9 - 2605253 + 2605242 9 21 - 371583 + 371581 @@ -12424,7 +12423,7 @@ 1 2 - 378428 + 378424 2 @@ -12434,22 +12433,22 @@ 3 4 - 351515 + 351513 4 7 - 200660 + 200658 7 8 - 207152 + 207151 8 9 - 241888 + 241887 9 @@ -12459,17 +12458,17 @@ 10 11 - 325486 + 325485 11 337 - 224849 + 224845 339 423 - 206353 + 206352 423 @@ -12484,15 +12483,15 @@ affectedbymacroexpansion - 35689082 + 35689256 id - 5156745 + 5156949 inv - 2784776 + 2784762 @@ -12506,32 +12505,32 @@ 1 2 - 2815933 + 2816079 2 3 - 560132 + 560184 3 4 - 264906 + 264908 4 5 - 565794 + 565803 5 12 - 391903 + 391901 12 50 - 407401 + 407399 50 @@ -12552,32 +12551,32 @@ 1 4 - 229120 + 229116 4 7 - 231788 + 231720 7 9 - 220478 + 220491 9 12 - 251087 + 251120 12 13 - 333978 + 333985 13 14 - 165588 + 165593 14 @@ -12587,7 +12586,7 @@ 15 16 - 121843 + 121842 16 @@ -12597,7 +12596,7 @@ 17 18 - 146940 + 146942 18 @@ -12607,7 +12606,7 @@ 20 25 - 208979 + 208978 25 @@ -12622,19 +12621,19 @@ macroinvocations - 33491157 + 33490802 id - 33491157 + 33490802 macro_id - 79484 + 79483 location - 760390 + 760382 kind @@ -12652,7 +12651,7 @@ 1 2 - 33491157 + 33490802 @@ -12668,7 +12667,7 @@ 1 2 - 33491157 + 33490802 @@ -12684,7 +12683,7 @@ 1 2 - 33491157 + 33490802 @@ -12766,7 +12765,7 @@ 1 2 - 42468 + 42467 2 @@ -12781,7 +12780,7 @@ 4 6 - 6841 + 6840 6 @@ -12812,7 +12811,7 @@ 1 2 - 73749 + 73748 2 @@ -12833,22 +12832,22 @@ 1 2 - 281226 + 281223 2 3 - 169659 + 169657 3 4 - 70735 + 70734 4 5 - 60327 + 60326 5 @@ -12884,12 +12883,12 @@ 1 2 - 714219 + 714211 2 350 - 46171 + 46170 @@ -12905,7 +12904,7 @@ 1 2 - 760390 + 760382 @@ -12978,15 +12977,15 @@ macroparent - 29950856 + 29950538 id - 29950856 + 29950538 parent_id - 23287102 + 23286856 @@ -13000,7 +12999,7 @@ 1 2 - 29950856 + 29950538 @@ -13016,17 +13015,17 @@ 1 2 - 17992872 + 17992681 2 3 - 4459570 + 4459523 3 88 - 834659 + 834650 @@ -13036,15 +13035,15 @@ macrolocationbind - 4043799 + 4043781 id - 2831150 + 2831137 location - 2021069 + 2021060 @@ -13058,22 +13057,22 @@ 1 2 - 2229922 + 2229912 2 3 - 341125 + 341123 3 7 - 230525 + 230524 7 57 - 29577 + 29576 @@ -13089,12 +13088,12 @@ 1 2 - 1611024 + 1611017 2 3 - 177682 + 177681 3 @@ -13104,7 +13103,7 @@ 8 723 - 75493 + 75492 @@ -13114,11 +13113,11 @@ macro_argument_unexpanded - 84549814 + 84548918 invocation - 26214874 + 26214596 argument_index @@ -13126,7 +13125,7 @@ text - 318310 + 318306 @@ -13140,22 +13139,22 @@ 1 2 - 7432497 + 7432418 2 3 - 10674075 + 10673962 3 4 - 6139354 + 6139289 4 67 - 1968946 + 1968925 @@ -13171,22 +13170,22 @@ 1 2 - 7502657 + 7502578 2 3 - 10820626 + 10820511 3 4 - 5973025 + 5972962 4 67 - 1918564 + 1918544 @@ -13254,12 +13253,12 @@ 1 2 - 35074 + 35073 2 3 - 61264 + 61263 3 @@ -13269,12 +13268,12 @@ 4 5 - 45087 + 45086 5 7 - 23932 + 23931 7 @@ -13289,7 +13288,7 @@ 16 23 - 24982 + 24981 23 @@ -13320,7 +13319,7 @@ 1 2 - 230201 + 230198 2 @@ -13330,7 +13329,7 @@ 3 9 - 10284 + 10283 @@ -13340,11 +13339,11 @@ macro_argument_expanded - 84549814 + 84548918 invocation - 26214874 + 26214596 argument_index @@ -13352,7 +13351,7 @@ text - 192902 + 192900 @@ -13366,22 +13365,22 @@ 1 2 - 7432497 + 7432418 2 3 - 10674075 + 10673962 3 4 - 6139354 + 6139289 4 67 - 1968946 + 1968925 @@ -13397,22 +13396,22 @@ 1 2 - 10688841 + 10688727 2 3 - 9201903 + 9201805 3 4 - 5208300 + 5208245 4 9 - 1115829 + 1115817 @@ -13551,7 +13550,7 @@ 1 2 - 97625 + 97624 2 @@ -13571,15 +13570,15 @@ functions - 4179381 + 4179893 id - 4179381 + 4179893 name - 1895474 + 1895706 kind @@ -13597,7 +13596,7 @@ 1 2 - 4179381 + 4179893 @@ -13613,7 +13612,7 @@ 1 2 - 4179381 + 4179893 @@ -13629,22 +13628,22 @@ 1 2 - 1498172 + 1498355 2 3 - 153131 + 153150 3 5 - 142860 + 142878 5 952 - 101309 + 101322 @@ -13660,7 +13659,7 @@ 1 2 - 1895007 + 1895240 2 @@ -13762,15 +13761,15 @@ function_entry_point - 1151757 + 1151752 id - 1141953 + 1141948 entry_point - 1151757 + 1151752 @@ -13784,7 +13783,7 @@ 1 2 - 1132149 + 1132144 2 @@ -13805,7 +13804,7 @@ 1 2 - 1151757 + 1151752 @@ -13815,15 +13814,15 @@ function_return_type - 4184517 + 4185029 id - 4179381 + 4179893 return_type - 817948 + 818048 @@ -13837,12 +13836,12 @@ 1 2 - 4174246 + 4174757 2 3 - 5135 + 5136 @@ -13858,22 +13857,22 @@ 1 2 - 506082 + 506144 2 3 - 211490 + 211516 3 7 - 66294 + 66303 7 2231 - 34081 + 34085 @@ -14153,44 +14152,44 @@ purefunctions - 100952 + 100951 id - 100952 + 100951 function_deleted - 96174 + 96186 id - 96174 + 96186 function_defaulted - 73764 + 73773 id - 73764 + 73773 function_prototyped - 4087409 + 4087910 id - 4087409 + 4087910 @@ -14270,11 +14269,11 @@ member_function_this_type - 536525 + 536522 id - 536525 + 536522 this_type @@ -14292,7 +14291,7 @@ 1 2 - 536525 + 536522 @@ -14343,27 +14342,27 @@ fun_decls - 4548672 + 4549229 id - 4543537 + 4544093 function - 4035587 + 4036081 type_id - 816548 + 816648 name - 1797899 + 1798120 location - 3370770 + 3371183 @@ -14377,7 +14376,7 @@ 1 2 - 4543537 + 4544093 @@ -14393,12 +14392,12 @@ 1 2 - 4538401 + 4538957 2 3 - 5135 + 5136 @@ -14414,7 +14413,7 @@ 1 2 - 4543537 + 4544093 @@ -14430,7 +14429,7 @@ 1 2 - 4543537 + 4544093 @@ -14446,17 +14445,17 @@ 1 2 - 3606537 + 3606979 2 3 - 356218 + 356262 3 7 - 72831 + 72839 @@ -14472,12 +14471,12 @@ 1 2 - 3995903 + 3996393 2 3 - 39683 + 39688 @@ -14493,7 +14492,7 @@ 1 2 - 4035587 + 4036081 @@ -14509,17 +14508,17 @@ 1 2 - 3663028 + 3663477 2 3 - 311866 + 311904 3 6 - 60692 + 60699 @@ -14535,22 +14534,22 @@ 1 2 - 431383 + 431436 2 3 - 274050 + 274083 3 6 - 63493 + 63501 6 2476 - 47620 + 47626 @@ -14566,22 +14565,22 @@ 1 2 - 515419 + 515482 2 3 - 203086 + 203111 3 7 - 63026 + 63034 7 2192 - 35014 + 35019 @@ -14597,17 +14596,17 @@ 1 2 - 690027 + 690112 2 4 - 67228 + 67236 4 773 - 59291 + 59299 @@ -14623,22 +14622,22 @@ 1 2 - 595253 + 595326 2 3 - 121385 + 121399 3 7 - 63493 + 63501 7 1959 - 36415 + 36419 @@ -14654,27 +14653,27 @@ 1 2 - 1228323 + 1228474 2 3 - 267047 + 267079 3 4 - 77966 + 77976 4 7 - 146128 + 146146 7 986 - 78433 + 78443 @@ -14690,22 +14689,22 @@ 1 2 - 1407600 + 1407772 2 3 - 152198 + 152216 3 5 - 136791 + 136808 5 936 - 101309 + 101322 @@ -14721,17 +14720,17 @@ 1 2 - 1579406 + 1579600 2 4 - 134924 + 134940 4 562 - 83568 + 83579 @@ -14747,27 +14746,27 @@ 1 2 - 1236260 + 1236411 2 3 - 293191 + 293227 3 4 - 78900 + 78909 4 8 - 137258 + 137275 8 542 - 52288 + 52295 @@ -14783,17 +14782,17 @@ 1 2 - 2966464 + 2966828 2 4 - 277785 + 277819 4 55 - 126520 + 126536 @@ -14809,17 +14808,17 @@ 1 2 - 3033693 + 3034065 2 7 - 244170 + 244200 7 55 - 92906 + 92917 @@ -14835,12 +14834,12 @@ 1 2 - 3207367 + 3207760 2 18 - 163402 + 163423 @@ -14856,12 +14855,12 @@ 1 2 - 3232578 + 3232974 2 13 - 138192 + 138209 @@ -14871,22 +14870,22 @@ fun_def - 1888938 + 1889170 id - 1888938 + 1889170 fun_specialized - 26144 + 26147 id - 26144 + 26147 @@ -14904,11 +14903,11 @@ fun_decl_specifiers - 2906705 + 2907062 id - 1689587 + 1689793 name @@ -14926,17 +14925,17 @@ 1 2 - 491142 + 491202 2 3 - 1179769 + 1179914 3 4 - 18674 + 18676 @@ -15108,22 +15107,22 @@ fun_decl_empty_throws - 1472027 + 1472207 fun_decl - 1472027 + 1472207 fun_decl_noexcept - 61667 + 61666 fun_decl - 61667 + 61666 constant @@ -15141,7 +15140,7 @@ 1 2 - 61667 + 61666 @@ -15172,11 +15171,11 @@ fun_decl_empty_noexcept - 863234 + 863340 fun_decl - 863234 + 863340 @@ -15281,19 +15280,19 @@ param_decl_bind - 6995048 + 6995905 id - 6995048 + 6995905 index - 7936 + 7937 fun_decl - 3835301 + 3835771 @@ -15307,7 +15306,7 @@ 1 2 - 6995048 + 6995905 @@ -15323,7 +15322,7 @@ 1 2 - 6995048 + 6995905 @@ -15501,22 +15500,22 @@ 1 2 - 1973908 + 1974150 2 3 - 1061652 + 1061782 3 4 - 502814 + 502875 4 8 - 290857 + 290892 8 @@ -15537,22 +15536,22 @@ 1 2 - 1973908 + 1974150 2 3 - 1061652 + 1061782 3 4 - 502814 + 502875 4 8 - 290857 + 290892 8 @@ -15567,27 +15566,27 @@ var_decls - 8110391 + 8111384 id - 8039427 + 8040412 variable - 7027262 + 7028123 type_id - 2043471 + 2043721 name - 667617 + 667699 location - 5311998 + 5312648 @@ -15601,7 +15600,7 @@ 1 2 - 8039427 + 8040412 @@ -15617,12 +15616,12 @@ 1 2 - 7971265 + 7972241 2 3 - 68162 + 68170 @@ -15638,7 +15637,7 @@ 1 2 - 8039427 + 8040412 @@ -15654,7 +15653,7 @@ 1 2 - 8036626 + 8037610 2 @@ -15675,17 +15674,17 @@ 1 2 - 6175232 + 6175989 2 3 - 698431 + 698516 3 7 - 153598 + 153617 @@ -15701,12 +15700,12 @@ 1 2 - 6855922 + 6856762 2 4 - 171339 + 171360 @@ -15722,12 +15721,12 @@ 1 2 - 6911946 + 6912793 2 3 - 115315 + 115329 @@ -15743,12 +15742,12 @@ 1 2 - 6481963 + 6482757 2 3 - 542964 + 543031 3 @@ -15769,27 +15768,27 @@ 1 2 - 1165763 + 1165906 2 3 - 477136 + 477195 3 4 - 94773 + 94785 4 7 - 184878 + 184901 7 762 - 120918 + 120933 @@ -15805,22 +15804,22 @@ 1 2 - 1299287 + 1299446 2 3 - 452392 + 452448 3 6 - 155933 + 155952 6 724 - 135857 + 135874 @@ -15836,17 +15835,17 @@ 1 2 - 1539256 + 1539444 2 3 - 383296 + 383343 3 128 - 120918 + 120933 @@ -15862,22 +15861,22 @@ 1 2 - 1365582 + 1365749 2 3 - 404305 + 404355 3 7 - 173207 + 173228 7 592 - 100376 + 100388 @@ -15893,37 +15892,37 @@ 1 2 - 341278 + 341320 2 3 - 86837 + 86847 3 4 - 48554 + 48559 4 6 - 51822 + 51828 6 12 - 52288 + 52295 12 33 - 50421 + 50427 34 2384 - 36415 + 36419 @@ -15939,37 +15938,37 @@ 1 2 - 368823 + 368869 2 3 - 77966 + 77976 3 4 - 45285 + 45291 4 6 - 49487 + 49493 6 14 - 53222 + 53229 14 56 - 50888 + 50894 56 2301 - 21942 + 21945 @@ -15985,27 +15984,27 @@ 1 2 - 457061 + 457117 2 3 - 93840 + 93851 3 5 - 46686 + 46692 5 19 - 50888 + 50894 19 1182 - 19141 + 19143 @@ -16021,32 +16020,32 @@ 1 2 - 379094 + 379141 2 3 - 90571 + 90583 3 5 - 59758 + 59766 5 9 - 51355 + 51361 9 21 - 50421 + 50427 21 1010 - 36415 + 36419 @@ -16062,17 +16061,17 @@ 1 2 - 4496383 + 4496934 2 3 - 531760 + 531825 3 896 - 283854 + 283889 @@ -16088,17 +16087,17 @@ 1 2 - 4885749 + 4886348 2 17 - 415510 + 415561 17 892 - 10737 + 10739 @@ -16114,12 +16113,12 @@ 1 2 - 4961848 + 4962456 2 759 - 350149 + 350192 @@ -16135,12 +16134,12 @@ 1 2 - 5302660 + 5303310 2 6 - 9337 + 9338 @@ -16150,22 +16149,22 @@ var_def - 3994969 + 3995459 id - 3994969 + 3995459 var_decl_specifiers - 378628 + 378674 id - 378628 + 378674 name @@ -16183,7 +16182,7 @@ 1 2 - 378628 + 378674 @@ -16235,19 +16234,19 @@ type_decls - 3283466 + 3283868 id - 3283466 + 3283868 type_id - 3233045 + 3233441 location - 3166283 + 3166671 @@ -16261,7 +16260,7 @@ 1 2 - 3283466 + 3283868 @@ -16277,7 +16276,7 @@ 1 2 - 3283466 + 3283868 @@ -16293,12 +16292,12 @@ 1 2 - 3191493 + 3191884 2 5 - 41551 + 41556 @@ -16314,12 +16313,12 @@ 1 2 - 3191493 + 3191884 2 5 - 41551 + 41556 @@ -16335,12 +16334,12 @@ 1 2 - 3113994 + 3114375 2 20 - 52288 + 52295 @@ -16356,12 +16355,12 @@ 1 2 - 3113994 + 3114375 2 20 - 52288 + 52295 @@ -16371,33 +16370,33 @@ type_def - 2641993 + 2642316 id - 2641993 + 2642316 type_decl_top - 743717 + 743808 type_decl - 743717 + 743808 namespace_decls - 311638 + 311636 id - 311638 + 311636 namespace_id @@ -16405,11 +16404,11 @@ location - 311638 + 311636 bodylocation - 311638 + 311636 @@ -16423,7 +16422,7 @@ 1 2 - 311638 + 311636 @@ -16439,7 +16438,7 @@ 1 2 - 311638 + 311636 @@ -16455,7 +16454,7 @@ 1 2 - 311638 + 311636 @@ -16669,7 +16668,7 @@ 1 2 - 311638 + 311636 @@ -16685,7 +16684,7 @@ 1 2 - 311638 + 311636 @@ -16701,7 +16700,7 @@ 1 2 - 311638 + 311636 @@ -16717,7 +16716,7 @@ 1 2 - 311638 + 311636 @@ -16733,7 +16732,7 @@ 1 2 - 311638 + 311636 @@ -16749,7 +16748,7 @@ 1 2 - 311638 + 311636 @@ -16759,19 +16758,19 @@ usings - 369757 + 369802 id - 369757 + 369802 element_id - 315601 + 315639 location - 247905 + 247936 kind @@ -16789,7 +16788,7 @@ 1 2 - 369757 + 369802 @@ -16805,7 +16804,7 @@ 1 2 - 369757 + 369802 @@ -16821,7 +16820,7 @@ 1 2 - 369757 + 369802 @@ -16837,12 +16836,12 @@ 1 2 - 263312 + 263344 2 3 - 50888 + 50894 3 @@ -16863,12 +16862,12 @@ 1 2 - 263312 + 263344 2 3 - 50888 + 50894 3 @@ -16889,7 +16888,7 @@ 1 2 - 315601 + 315639 @@ -16905,17 +16904,17 @@ 1 2 - 202619 + 202644 2 4 - 10737 + 10739 4 5 - 31280 + 31283 5 @@ -16936,17 +16935,17 @@ 1 2 - 202619 + 202644 2 4 - 10737 + 10739 4 5 - 31280 + 31283 5 @@ -16967,7 +16966,7 @@ 1 2 - 247905 + 247936 @@ -17040,7 +17039,7 @@ using_container - 466802 + 466798 parent @@ -17048,7 +17047,7 @@ child - 295992 + 295989 @@ -17118,12 +17117,12 @@ 1 2 - 218314 + 218311 2 3 - 51725 + 51724 3 @@ -17143,15 +17142,15 @@ static_asserts - 134702 + 134701 id - 134702 + 134701 condition - 134702 + 134701 message @@ -17177,7 +17176,7 @@ 1 2 - 134702 + 134701 @@ -17193,7 +17192,7 @@ 1 2 - 134702 + 134701 @@ -17209,7 +17208,7 @@ 1 2 - 134702 + 134701 @@ -17225,7 +17224,7 @@ 1 2 - 134702 + 134701 @@ -17241,7 +17240,7 @@ 1 2 - 134702 + 134701 @@ -17257,7 +17256,7 @@ 1 2 - 134702 + 134701 @@ -17273,7 +17272,7 @@ 1 2 - 134702 + 134701 @@ -17289,7 +17288,7 @@ 1 2 - 134702 + 134701 @@ -17751,23 +17750,23 @@ params - 6354509 + 6355287 id - 6190639 + 6191397 function - 3491688 + 3492116 index - 7936 + 7937 type_id - 1846453 + 1846680 @@ -17781,7 +17780,7 @@ 1 2 - 6190639 + 6191397 @@ -17797,7 +17796,7 @@ 1 2 - 6190639 + 6191397 @@ -17813,12 +17812,12 @@ 1 2 - 6066919 + 6067663 2 4 - 123719 + 123734 @@ -17834,22 +17833,22 @@ 1 2 - 1867462 + 1867691 2 3 - 952872 + 952989 3 4 - 429983 + 430035 4 18 - 241369 + 241399 @@ -17865,22 +17864,22 @@ 1 2 - 1867462 + 1867691 2 3 - 952872 + 952989 3 4 - 429983 + 430035 4 18 - 241369 + 241399 @@ -17896,22 +17895,22 @@ 1 2 - 2165790 + 2166055 2 3 - 826819 + 826920 3 4 - 346414 + 346456 4 12 - 152665 + 152683 @@ -18165,22 +18164,22 @@ 1 2 - 1183971 + 1184116 2 3 - 406173 + 406222 3 7 - 154065 + 154084 7 518 - 102243 + 102256 @@ -18196,22 +18195,22 @@ 1 2 - 1404798 + 1404971 2 3 - 212423 + 212449 3 7 - 147529 + 147547 7 502 - 81701 + 81711 @@ -18227,17 +18226,17 @@ 1 2 - 1420205 + 1420379 2 3 - 347348 + 347390 3 13 - 78900 + 78909 @@ -18330,19 +18329,19 @@ membervariables - 1056495 + 1056490 id - 1054697 + 1054692 type_id - 327727 + 327726 name - 451619 + 451617 @@ -18356,7 +18355,7 @@ 1 2 - 1052979 + 1052974 2 @@ -18377,7 +18376,7 @@ 1 2 - 1054697 + 1054692 @@ -18393,7 +18392,7 @@ 1 2 - 243029 + 243027 2 @@ -18424,7 +18423,7 @@ 1 2 - 255254 + 255253 2 @@ -18455,7 +18454,7 @@ 1 2 - 295326 + 295325 2 @@ -18486,12 +18485,12 @@ 1 2 - 367839 + 367837 2 3 - 51738 + 51737 3 @@ -18506,7 +18505,7 @@ globalvariables - 301284 + 301286 id @@ -18532,12 +18531,12 @@ 1 2 - 301268 + 301266 2 3 - 8 + 10 @@ -18574,12 +18573,12 @@ 2 3 - 160 + 159 3 7 - 116 + 117 7 @@ -18868,11 +18867,11 @@ autoderivation - 147961 + 147960 var - 147961 + 147960 derivation_type @@ -18890,7 +18889,7 @@ 1 2 - 147961 + 147960 @@ -18989,11 +18988,11 @@ enumconstants - 241670 + 241669 id - 241670 + 241669 parent @@ -19009,11 +19008,11 @@ name - 241391 + 241389 location - 221574 + 221573 @@ -19027,7 +19026,7 @@ 1 2 - 241670 + 241669 @@ -19043,7 +19042,7 @@ 1 2 - 241670 + 241669 @@ -19059,7 +19058,7 @@ 1 2 - 241670 + 241669 @@ -19075,7 +19074,7 @@ 1 2 - 241670 + 241669 @@ -19091,7 +19090,7 @@ 1 2 - 241670 + 241669 @@ -19331,7 +19330,7 @@ 3 4 - 5833 + 5832 4 @@ -19702,7 +19701,7 @@ 1 2 - 241111 + 241110 2 @@ -19723,7 +19722,7 @@ 1 2 - 241111 + 241110 2 @@ -19744,7 +19743,7 @@ 1 2 - 241391 + 241389 @@ -19760,7 +19759,7 @@ 1 2 - 241391 + 241389 @@ -19776,7 +19775,7 @@ 1 2 - 241111 + 241110 2 @@ -19797,7 +19796,7 @@ 1 2 - 220815 + 220814 2 @@ -19818,7 +19817,7 @@ 1 2 - 221574 + 221573 @@ -19834,7 +19833,7 @@ 1 2 - 220815 + 220814 2 @@ -19855,7 +19854,7 @@ 1 2 - 221574 + 221573 @@ -19871,7 +19870,7 @@ 1 2 - 220815 + 220814 2 @@ -19886,19 +19885,19 @@ builtintypes - 26144 + 26147 id - 26144 + 26147 name - 26144 + 26147 kind - 26144 + 26147 size @@ -19924,7 +19923,7 @@ 1 2 - 26144 + 26147 @@ -19940,7 +19939,7 @@ 1 2 - 26144 + 26147 @@ -19956,7 +19955,7 @@ 1 2 - 26144 + 26147 @@ -19972,7 +19971,7 @@ 1 2 - 26144 + 26147 @@ -19988,7 +19987,7 @@ 1 2 - 26144 + 26147 @@ -20004,7 +20003,7 @@ 1 2 - 26144 + 26147 @@ -20020,7 +20019,7 @@ 1 2 - 26144 + 26147 @@ -20036,7 +20035,7 @@ 1 2 - 26144 + 26147 @@ -20052,7 +20051,7 @@ 1 2 - 26144 + 26147 @@ -20068,7 +20067,7 @@ 1 2 - 26144 + 26147 @@ -20084,7 +20083,7 @@ 1 2 - 26144 + 26147 @@ -20100,7 +20099,7 @@ 1 2 - 26144 + 26147 @@ -20116,7 +20115,7 @@ 1 2 - 26144 + 26147 @@ -20132,7 +20131,7 @@ 1 2 - 26144 + 26147 @@ -20148,7 +20147,7 @@ 1 2 - 26144 + 26147 @@ -20593,15 +20592,15 @@ derivedtypes - 3669564 + 3670014 id - 3669564 + 3670014 name - 1552795 + 1552985 kind @@ -20609,7 +20608,7 @@ type_id - 2362807 + 2363096 @@ -20623,7 +20622,7 @@ 1 2 - 3669564 + 3670014 @@ -20639,7 +20638,7 @@ 1 2 - 3669564 + 3670014 @@ -20655,7 +20654,7 @@ 1 2 - 3669564 + 3670014 @@ -20671,17 +20670,17 @@ 1 2 - 1324031 + 1324193 2 4 - 120451 + 120466 4 1153 - 108312 + 108326 @@ -20697,7 +20696,7 @@ 1 2 - 1551861 + 1552051 2 @@ -20718,17 +20717,17 @@ 1 2 - 1324031 + 1324193 2 4 - 120451 + 120466 4 1135 - 108312 + 108326 @@ -20867,22 +20866,22 @@ 1 2 - 1515446 + 1515631 2 3 - 546232 + 546299 3 4 - 218493 + 218519 4 72 - 82635 + 82645 @@ -20898,22 +20897,22 @@ 1 2 - 1526650 + 1526837 2 3 - 538763 + 538829 3 4 - 215691 + 215718 4 72 - 81701 + 81711 @@ -20929,22 +20928,22 @@ 1 2 - 1519647 + 1519834 2 3 - 549967 + 550035 3 4 - 217559 + 217586 4 6 - 75632 + 75641 @@ -20954,11 +20953,11 @@ pointerishsize - 2707354 + 2707685 id - 2707354 + 2707685 size @@ -20980,7 +20979,7 @@ 1 2 - 2707354 + 2707685 @@ -20996,7 +20995,7 @@ 1 2 - 2707354 + 2707685 @@ -21070,19 +21069,19 @@ arraysizes - 88237 + 88248 id - 88237 + 88248 num_elements - 31746 + 31750 bytesize - 33147 + 33151 alignment @@ -21100,7 +21099,7 @@ 1 2 - 88237 + 88248 @@ -21116,7 +21115,7 @@ 1 2 - 88237 + 88248 @@ -21132,7 +21131,7 @@ 1 2 - 88237 + 88248 @@ -21153,7 +21152,7 @@ 2 3 - 23810 + 23813 3 @@ -21184,7 +21183,7 @@ 1 2 - 26611 + 26614 2 @@ -21210,7 +21209,7 @@ 1 2 - 26611 + 26614 2 @@ -21241,7 +21240,7 @@ 2 3 - 23810 + 23813 3 @@ -21272,12 +21271,12 @@ 1 2 - 27545 + 27548 2 3 - 3734 + 3735 3 @@ -21298,12 +21297,12 @@ 1 2 - 27545 + 27548 2 3 - 4668 + 4669 4 @@ -21406,15 +21405,15 @@ typedefbase - 1686117 + 1686099 id - 1686117 + 1686099 type_id - 793489 + 793481 @@ -21428,7 +21427,7 @@ 1 2 - 1686117 + 1686099 @@ -21444,12 +21443,12 @@ 1 2 - 617406 + 617400 2 3 - 83254 + 83253 3 @@ -21755,19 +21754,19 @@ usertypes - 5234965 + 5235606 id - 5234965 + 5235606 name - 1352509 + 1352675 kind - 5135 + 5136 @@ -21781,7 +21780,7 @@ 1 2 - 5234965 + 5235606 @@ -21797,7 +21796,7 @@ 1 2 - 5234965 + 5235606 @@ -21813,27 +21812,27 @@ 1 2 - 983686 + 983806 2 3 - 153598 + 153617 3 7 - 104577 + 104590 7 61 - 101776 + 101789 65 874 - 8870 + 8871 @@ -21849,17 +21848,17 @@ 1 2 - 1211983 + 1212131 2 3 - 125120 + 125135 3 7 - 15406 + 15408 @@ -22001,15 +22000,15 @@ usertypesize - 1707327 + 1707537 id - 1707327 + 1707537 size - 13539 + 13540 alignment @@ -22027,7 +22026,7 @@ 1 2 - 1707327 + 1707537 @@ -22043,7 +22042,7 @@ 1 2 - 1707327 + 1707537 @@ -22064,7 +22063,7 @@ 2 3 - 4201 + 4202 3 @@ -22115,7 +22114,7 @@ 1 2 - 10271 + 10272 2 @@ -22218,11 +22217,11 @@ usertype_uuid - 36652 + 36651 id - 36652 + 36651 uuid @@ -22240,7 +22239,7 @@ 1 2 - 36652 + 36651 @@ -22271,15 +22270,15 @@ mangled_name - 9020312 + 9021417 id - 9020312 + 9021417 mangled_name - 6061784 + 6062526 is_complete @@ -22297,7 +22296,7 @@ 1 2 - 9020312 + 9021417 @@ -22313,7 +22312,7 @@ 1 2 - 9020312 + 9021417 @@ -22329,12 +22328,12 @@ 1 2 - 5789134 + 5789844 2 874 - 272649 + 272682 @@ -22350,7 +22349,7 @@ 1 2 - 6061784 + 6062526 @@ -22392,59 +22391,59 @@ is_pod_class - 534705 + 534710 id - 534705 + 534710 is_standard_layout_class - 1254935 + 1255088 id - 1254935 + 1255088 is_complete - 1646635 + 1646837 id - 1646635 + 1646837 is_class_template - 398236 + 398285 id - 398236 + 398285 class_instantiation - 1089664 + 1089798 to - 1089664 + 1089798 from - 168538 + 168559 @@ -22458,7 +22457,7 @@ 1 2 - 1089664 + 1089798 @@ -22474,42 +22473,42 @@ 1 2 - 59758 + 59766 2 3 - 29412 + 29416 3 4 - 15873 + 15875 4 5 - 13072 + 13073 5 6 - 9804 + 9805 6 10 - 12605 + 12606 10 16 - 13072 + 13073 16 70 - 13539 + 13540 70 @@ -22524,11 +22523,11 @@ class_template_argument - 2882763 + 2882732 type_id - 1315517 + 1315503 index @@ -22536,7 +22535,7 @@ arg_type - 840394 + 840385 @@ -22550,22 +22549,22 @@ 1 2 - 540959 + 540953 2 3 - 399239 + 399235 3 4 - 231397 + 231395 4 7 - 120315 + 120314 7 @@ -22586,22 +22585,22 @@ 1 2 - 567611 + 567605 2 3 - 410483 + 410478 3 4 - 244842 + 244840 4 113 - 92579 + 92578 @@ -22709,17 +22708,17 @@ 1 2 - 523348 + 523343 2 3 - 174344 + 174342 3 4 - 51341 + 51340 4 @@ -22745,12 +22744,12 @@ 1 2 - 746494 + 746486 2 3 - 77836 + 77835 3 @@ -22765,11 +22764,11 @@ class_template_argument_value - 495344 + 495405 type_id - 304863 + 304900 index @@ -22777,7 +22776,7 @@ arg_value - 495344 + 495405 @@ -22791,12 +22790,12 @@ 1 2 - 249773 + 249803 2 3 - 53222 + 53229 3 @@ -22817,22 +22816,22 @@ 1 2 - 189547 + 189570 2 3 - 81234 + 81244 3 4 - 12138 + 12139 4 9 - 21942 + 21945 @@ -22910,7 +22909,7 @@ 1 2 - 495344 + 495405 @@ -22926,7 +22925,7 @@ 1 2 - 495344 + 495405 @@ -22936,15 +22935,15 @@ is_proxy_class_for - 63026 + 63034 id - 63026 + 63034 templ_param_id - 63026 + 63034 @@ -22958,7 +22957,7 @@ 1 2 - 63026 + 63034 @@ -22974,7 +22973,7 @@ 1 2 - 63026 + 63034 @@ -22984,19 +22983,19 @@ type_mentions - 4029136 + 4029118 id - 4029136 + 4029118 type_id - 198202 + 198201 location - 3995616 + 3995598 kind @@ -23014,7 +23013,7 @@ 1 2 - 4029136 + 4029118 @@ -23030,7 +23029,7 @@ 1 2 - 4029136 + 4029118 @@ -23046,7 +23045,7 @@ 1 2 - 4029136 + 4029118 @@ -23062,7 +23061,7 @@ 1 2 - 97603 + 97602 2 @@ -23087,7 +23086,7 @@ 7 12 - 15861 + 15860 12 @@ -23113,7 +23112,7 @@ 1 2 - 97603 + 97602 2 @@ -23138,7 +23137,7 @@ 7 12 - 15861 + 15860 12 @@ -23164,7 +23163,7 @@ 1 2 - 198202 + 198201 @@ -23180,7 +23179,7 @@ 1 2 - 3962096 + 3962078 2 @@ -23201,7 +23200,7 @@ 1 2 - 3962096 + 3962078 2 @@ -23222,7 +23221,7 @@ 1 2 - 3995616 + 3995598 @@ -23280,26 +23279,26 @@ is_function_template - 1402931 + 1403103 id - 1402931 + 1403103 function_instantiation - 894823 + 894819 to - 894823 + 894819 from - 144434 + 144433 @@ -23313,7 +23312,7 @@ 1 2 - 894823 + 894819 @@ -23359,11 +23358,11 @@ function_template_argument - 2313492 + 2313481 function_id - 1321577 + 1321571 index @@ -23371,7 +23370,7 @@ arg_type - 301235 + 301234 @@ -23385,22 +23384,22 @@ 1 2 - 674410 + 674407 2 3 - 390488 + 390486 3 4 - 186796 + 186795 4 15 - 69883 + 69882 @@ -23416,22 +23415,22 @@ 1 2 - 691828 + 691825 2 3 - 400277 + 400275 3 4 - 166869 + 166868 4 9 - 62602 + 62601 @@ -23569,7 +23568,7 @@ 1 2 - 184531 + 184530 2 @@ -23610,7 +23609,7 @@ 1 2 - 271728 + 271727 2 @@ -23630,11 +23629,11 @@ function_template_argument_value - 358995 + 358993 function_id - 192753 + 192752 index @@ -23642,7 +23641,7 @@ arg_value - 356382 + 356381 @@ -23656,7 +23655,7 @@ 1 2 - 183486 + 183485 2 @@ -23677,7 +23676,7 @@ 1 2 - 176136 + 176135 2 @@ -23815,7 +23814,7 @@ 1 2 - 353770 + 353768 2 @@ -23836,7 +23835,7 @@ 1 2 - 356382 + 356381 @@ -23857,11 +23856,11 @@ variable_instantiation - 204308 + 204307 to - 204308 + 204307 from @@ -23879,7 +23878,7 @@ 1 2 - 204308 + 204307 @@ -23940,11 +23939,11 @@ variable_template_argument - 383990 + 383988 variable_id - 195640 + 195639 index @@ -23952,7 +23951,7 @@ arg_type - 187562 + 187561 @@ -23981,7 +23980,7 @@ 4 17 - 10442 + 10441 @@ -24145,7 +24144,7 @@ 1 2 - 145597 + 145596 2 @@ -24176,7 +24175,7 @@ 1 2 - 170224 + 170223 2 @@ -24357,15 +24356,15 @@ routinetypes - 538824 + 538891 id - 538824 + 538891 return_type - 280751 + 280750 @@ -24379,7 +24378,7 @@ 1 2 - 538824 + 538891 @@ -24395,12 +24394,12 @@ 1 2 - 244521 + 244450 2 3 - 20971 + 21041 3 @@ -24415,19 +24414,19 @@ routinetypeargs - 983219 + 983339 routine - 423447 + 423499 index - 7936 + 7937 type_id - 226896 + 226924 @@ -24441,27 +24440,27 @@ 1 2 - 152665 + 152683 2 3 - 133990 + 134006 3 4 - 63493 + 63501 4 5 - 45752 + 45758 5 18 - 27545 + 27548 @@ -24477,27 +24476,27 @@ 1 2 - 182544 + 182566 2 3 - 133523 + 133539 3 4 - 58825 + 58832 4 5 - 33614 + 33618 5 11 - 14939 + 14941 @@ -24655,27 +24654,27 @@ 1 2 - 146595 + 146613 2 3 - 30813 + 30816 3 5 - 16807 + 16809 5 12 - 18207 + 18209 12 110 - 14472 + 14474 @@ -24691,22 +24690,22 @@ 1 2 - 172740 + 172761 2 3 - 30813 + 30816 3 6 - 18674 + 18676 6 14 - 4668 + 4669 @@ -24716,19 +24715,19 @@ ptrtomembers - 37816 + 37820 id - 37816 + 37820 type_id - 37816 + 37820 class_id - 15406 + 15408 @@ -24742,7 +24741,7 @@ 1 2 - 37816 + 37820 @@ -24758,7 +24757,7 @@ 1 2 - 37816 + 37820 @@ -24774,7 +24773,7 @@ 1 2 - 37816 + 37820 @@ -24790,7 +24789,7 @@ 1 2 - 37816 + 37820 @@ -24806,7 +24805,7 @@ 1 2 - 13539 + 13540 8 @@ -24832,7 +24831,7 @@ 1 2 - 13539 + 13540 8 @@ -24852,15 +24851,15 @@ specifiers - 24743 + 24746 id - 24743 + 24746 str - 24743 + 24746 @@ -24874,7 +24873,7 @@ 1 2 - 24743 + 24746 @@ -24890,7 +24889,7 @@ 1 2 - 24743 + 24746 @@ -24900,15 +24899,15 @@ typespecifiers - 1133083 + 1133221 type_id - 1114875 + 1115011 spec_id - 3734 + 3735 @@ -24922,12 +24921,12 @@ 1 2 - 1096667 + 1096801 2 3 - 18207 + 18209 @@ -24988,15 +24987,15 @@ funspecifiers - 10304659 + 10305922 func_id - 4068267 + 4068766 spec_id - 8403 + 8404 @@ -25010,27 +25009,27 @@ 1 2 - 1357645 + 1357811 2 3 - 641006 + 641085 3 4 - 985086 + 985207 4 5 - 780132 + 780228 5 8 - 304396 + 304433 @@ -25141,15 +25140,15 @@ varspecifiers - 2246090 + 2246366 var_id - 1225055 + 1225205 spec_id - 3734 + 3735 @@ -25163,22 +25162,22 @@ 1 2 - 730177 + 730267 2 3 - 202619 + 202644 3 4 - 58358 + 58365 4 5 - 233899 + 233928 @@ -25287,11 +25286,11 @@ attributes - 561639 + 561708 id - 561639 + 561708 kind @@ -25299,7 +25298,7 @@ name - 11204 + 11206 name_space @@ -25307,7 +25306,7 @@ location - 481338 + 481397 @@ -25321,7 +25320,7 @@ 1 2 - 561639 + 561708 @@ -25337,7 +25336,7 @@ 1 2 - 561639 + 561708 @@ -25353,7 +25352,7 @@ 1 2 - 561639 + 561708 @@ -25369,7 +25368,7 @@ 1 2 - 561639 + 561708 @@ -25560,7 +25559,7 @@ 1 2 - 10271 + 10272 2 @@ -25581,7 +25580,7 @@ 1 2 - 11204 + 11206 @@ -25752,17 +25751,17 @@ 1 2 - 431850 + 431903 2 3 - 20075 + 20077 3 7 - 29412 + 29416 @@ -25778,7 +25777,7 @@ 1 2 - 481338 + 481397 @@ -25794,17 +25793,17 @@ 1 2 - 433251 + 433304 2 3 - 19608 + 19610 3 4 - 28478 + 28482 @@ -25820,7 +25819,7 @@ 1 2 - 481338 + 481397 @@ -25830,11 +25829,11 @@ attribute_args - 344080 + 344122 id - 344080 + 344122 kind @@ -25842,7 +25841,7 @@ attribute - 262845 + 262877 index @@ -25850,7 +25849,7 @@ location - 327739 + 327779 @@ -25864,7 +25863,7 @@ 1 2 - 344080 + 344122 @@ -25880,7 +25879,7 @@ 1 2 - 344080 + 344122 @@ -25896,7 +25895,7 @@ 1 2 - 344080 + 344122 @@ -25912,7 +25911,7 @@ 1 2 - 344080 + 344122 @@ -26027,17 +26026,17 @@ 1 2 - 197484 + 197508 2 3 - 49487 + 49493 3 4 - 15873 + 15875 @@ -26053,12 +26052,12 @@ 1 2 - 252574 + 252605 2 3 - 10271 + 10272 @@ -26074,17 +26073,17 @@ 1 2 - 197484 + 197508 2 3 - 49487 + 49493 3 4 - 15873 + 15875 @@ -26100,17 +26099,17 @@ 1 2 - 197484 + 197508 2 3 - 49487 + 49493 3 4 - 15873 + 15875 @@ -26225,12 +26224,12 @@ 1 2 - 313733 + 313772 2 7 - 14005 + 14007 @@ -26246,12 +26245,12 @@ 1 2 - 315134 + 315172 2 3 - 12605 + 12606 @@ -26267,12 +26266,12 @@ 1 2 - 313733 + 313772 2 7 - 14005 + 14007 @@ -26288,7 +26287,7 @@ 1 2 - 327739 + 327779 @@ -26298,15 +26297,15 @@ attribute_arg_value - 25210 + 25213 arg - 25210 + 25213 value - 15873 + 15875 @@ -26320,7 +26319,7 @@ 1 2 - 25210 + 25213 @@ -26336,7 +26335,7 @@ 1 2 - 14472 + 14474 2 @@ -26399,15 +26398,15 @@ attribute_arg_constant - 318402 + 318441 arg - 318402 + 318441 constant - 318402 + 318441 @@ -26421,7 +26420,7 @@ 1 2 - 318402 + 318441 @@ -26437,7 +26436,7 @@ 1 2 - 318402 + 318441 @@ -26548,15 +26547,15 @@ typeattributes - 60997 + 61863 type_id - 37617 + 61469 spec_id - 60572 + 19701 @@ -26570,17 +26569,12 @@ 1 2 - 14636 + 61075 2 3 - 22580 - - - 3 - 4 - 400 + 394 @@ -26596,12 +26590,22 @@ 1 2 - 60477 + 16254 2 - 26 - 95 + 5 + 1576 + + + 5 + 23 + 1379 + + + 57 + 58 + 492 @@ -26611,15 +26615,15 @@ funcattributes - 630268 + 630345 func_id - 443522 + 443576 spec_id - 524757 + 524821 @@ -26633,17 +26637,17 @@ 1 2 - 338477 + 338519 2 3 - 64427 + 64435 3 6 - 39683 + 39688 6 @@ -26664,12 +26668,12 @@ 1 2 - 506082 + 506144 2 17 - 18674 + 18676 @@ -26805,15 +26809,15 @@ unspecifiedtype - 9489045 + 9490208 type_id - 9489045 + 9490208 unspecified_type_id - 6491300 + 6492096 @@ -26827,7 +26831,7 @@ 1 2 - 9489045 + 9490208 @@ -26843,17 +26847,17 @@ 1 2 - 4559877 + 4560436 2 3 - 1715731 + 1715941 3 145 - 215691 + 215718 @@ -26863,19 +26867,19 @@ member - 3881054 + 3881530 parent - 545766 + 545832 index - 92906 + 92917 child - 3809624 + 3810090 @@ -26889,47 +26893,47 @@ 1 2 - 129788 + 129804 2 3 - 64894 + 64902 3 4 - 73297 + 73306 4 5 - 75165 + 75174 5 6 - 40617 + 40622 6 8 - 46686 + 46692 8 14 - 45752 + 45758 14 30 - 41551 + 41556 30 200 - 28011 + 28015 @@ -26945,52 +26949,52 @@ 1 2 - 129788 + 129804 2 3 - 64894 + 64902 3 4 - 73297 + 73306 4 5 - 76099 + 76108 5 6 - 39683 + 39688 6 7 - 24277 + 24279 7 9 - 42017 + 42023 9 17 - 43885 + 43890 17 41 - 41551 + 41556 41 200 - 10271 + 10272 @@ -27006,57 +27010,57 @@ 1 2 - 26144 + 26147 2 3 - 7002 + 7003 3 4 - 3734 + 3735 4 5 - 7936 + 7937 5 6 - 5602 + 5603 6 7 - 5602 + 5603 7 9 - 7469 + 7470 9 16 - 7002 + 7003 16 52 - 7002 + 7003 52 107 - 7002 + 7003 108 577 - 7002 + 7003 737 @@ -27077,57 +27081,57 @@ 1 2 - 26144 + 26147 2 3 - 7002 + 7003 3 4 - 3734 + 3735 4 5 - 7936 + 7937 5 6 - 5602 + 5603 6 7 - 5602 + 5603 7 9 - 7469 + 7470 9 16 - 7002 + 7003 16 52 - 7002 + 7003 52 107 - 7002 + 7003 108 577 - 7002 + 7003 738 @@ -27148,7 +27152,7 @@ 1 2 - 3809624 + 3810090 @@ -27164,12 +27168,12 @@ 1 2 - 3738193 + 3738651 2 3 - 71430 + 71439 @@ -27179,15 +27183,15 @@ enclosingfunction - 118329 + 118327 child - 118329 + 118327 parent - 67665 + 67664 @@ -27201,7 +27205,7 @@ 1 2 - 118329 + 118327 @@ -27232,7 +27236,7 @@ 4 45 - 4888 + 4887 @@ -27242,15 +27246,15 @@ derivations - 391568 + 391566 derivation - 391568 + 391566 sub - 371293 + 371291 index @@ -27258,7 +27262,7 @@ super - 202751 + 202750 location @@ -27276,7 +27280,7 @@ 1 2 - 391568 + 391566 @@ -27292,7 +27296,7 @@ 1 2 - 391568 + 391566 @@ -27308,7 +27312,7 @@ 1 2 - 391568 + 391566 @@ -27324,7 +27328,7 @@ 1 2 - 391568 + 391566 @@ -27340,7 +27344,7 @@ 1 2 - 356313 + 356311 2 @@ -27361,7 +27365,7 @@ 1 2 - 356313 + 356311 2 @@ -27382,7 +27386,7 @@ 1 2 - 356313 + 356311 2 @@ -27403,7 +27407,7 @@ 1 2 - 356313 + 356311 2 @@ -27553,7 +27557,7 @@ 1 2 - 195366 + 195365 2 @@ -27574,7 +27578,7 @@ 1 2 - 195366 + 195365 2 @@ -27595,7 +27599,7 @@ 1 2 - 202298 + 202297 2 @@ -27616,7 +27620,7 @@ 1 2 - 199093 + 199092 2 @@ -27642,7 +27646,7 @@ 2 5 - 3205 + 3204 5 @@ -27678,7 +27682,7 @@ 2 5 - 3205 + 3204 5 @@ -27750,11 +27754,11 @@ derspecifiers - 393449 + 393447 der_id - 391184 + 391183 spec_id @@ -27772,7 +27776,7 @@ 1 2 - 388920 + 388918 2 @@ -27818,11 +27822,11 @@ direct_base_offsets - 362618 + 362617 der_id - 362618 + 362617 offset @@ -27840,7 +27844,7 @@ 1 2 - 362618 + 362617 @@ -28182,11 +28186,11 @@ frienddecls - 707052 + 707049 id - 707052 + 707049 type_id @@ -28212,7 +28216,7 @@ 1 2 - 707052 + 707049 @@ -28228,7 +28232,7 @@ 1 2 - 707052 + 707049 @@ -28244,7 +28248,7 @@ 1 2 - 707052 + 707049 @@ -28295,7 +28299,7 @@ 37 55 - 3205 + 3204 55 @@ -28351,7 +28355,7 @@ 37 55 - 3205 + 3204 55 @@ -28563,19 +28567,19 @@ comments - 8266137 + 8266100 id - 8266137 + 8266100 contents - 3147578 + 3147564 location - 8266137 + 8266100 @@ -28589,7 +28593,7 @@ 1 2 - 8266137 + 8266100 @@ -28605,7 +28609,7 @@ 1 2 - 8266137 + 8266100 @@ -28621,12 +28625,12 @@ 1 2 - 2879337 + 2879324 2 7 - 236620 + 236618 7 @@ -28647,12 +28651,12 @@ 1 2 - 2879337 + 2879324 2 7 - 236620 + 236618 7 @@ -28673,7 +28677,7 @@ 1 2 - 8266137 + 8266100 @@ -28689,7 +28693,7 @@ 1 2 - 8266137 + 8266100 @@ -28699,15 +28703,15 @@ commentbinding - 3091117 + 3091496 id - 2445442 + 2445742 element - 3014551 + 3014921 @@ -28721,12 +28725,12 @@ 1 2 - 2368409 + 2368699 2 97 - 77032 + 77042 @@ -28742,12 +28746,12 @@ 1 2 - 2937985 + 2938345 2 3 - 76565 + 76575 @@ -28757,15 +28761,15 @@ exprconv - 7033022 + 7032992 converted - 7033022 + 7032992 conversion - 7033022 + 7032992 @@ -28779,7 +28783,7 @@ 1 2 - 7033022 + 7032992 @@ -28795,7 +28799,7 @@ 1 2 - 7033022 + 7032992 @@ -28805,22 +28809,22 @@ compgenerated - 7908075 + 7908039 id - 7908075 + 7908039 synthetic_destructor_call - 512503 + 512501 element - 325805 + 325803 i @@ -28828,7 +28832,7 @@ destructor_call - 512503 + 512501 @@ -28842,7 +28846,7 @@ 1 2 - 227848 + 227847 2 @@ -28857,7 +28861,7 @@ 4 8 - 24622 + 24621 8 @@ -28878,7 +28882,7 @@ 1 2 - 227848 + 227847 2 @@ -28893,7 +28897,7 @@ 4 8 - 24622 + 24621 8 @@ -29126,7 +29130,7 @@ 1 2 - 512503 + 512501 @@ -29142,7 +29146,7 @@ 1 2 - 512503 + 512501 @@ -29152,15 +29156,15 @@ namespaces - 12138 + 12139 id - 12138 + 12139 name - 9804 + 9805 @@ -29174,7 +29178,7 @@ 1 2 - 12138 + 12139 @@ -29190,7 +29194,7 @@ 1 2 - 8403 + 8404 2 @@ -29221,15 +29225,15 @@ namespacembrs - 2388018 + 2388310 parentid - 10271 + 10272 memberid - 2388018 + 2388310 @@ -29304,7 +29308,7 @@ 1 2 - 2388018 + 2388310 @@ -29314,11 +29318,11 @@ exprparents - 14206517 + 14206453 expr_id - 14206517 + 14206453 child_index @@ -29326,7 +29330,7 @@ parent_id - 9453690 + 9453648 @@ -29340,7 +29344,7 @@ 1 2 - 14206517 + 14206453 @@ -29356,7 +29360,7 @@ 1 2 - 14206517 + 14206453 @@ -29474,17 +29478,17 @@ 1 2 - 5409361 + 5409337 2 3 - 3706591 + 3706574 3 712 - 337737 + 337736 @@ -29500,17 +29504,17 @@ 1 2 - 5409361 + 5409337 2 3 - 3706591 + 3706574 3 712 - 337737 + 337736 @@ -29520,11 +29524,11 @@ expr_isload - 5096886 + 5096863 expr_id - 5096886 + 5096863 @@ -29604,11 +29608,11 @@ iscall - 3218003 + 3217989 caller - 3218003 + 3217989 kind @@ -29626,7 +29630,7 @@ 1 2 - 3218003 + 3217989 @@ -29662,11 +29666,11 @@ numtemplatearguments - 393832 + 393830 expr_id - 393832 + 393830 num @@ -29684,7 +29688,7 @@ 1 2 - 393832 + 393830 @@ -29788,23 +29792,23 @@ namequalifiers - 1513800 + 1513793 id - 1513800 + 1513793 qualifiableelement - 1513800 + 1513793 qualifyingelement - 97519 + 97518 location - 304298 + 304297 @@ -29818,7 +29822,7 @@ 1 2 - 1513800 + 1513793 @@ -29834,7 +29838,7 @@ 1 2 - 1513800 + 1513793 @@ -29850,7 +29854,7 @@ 1 2 - 1513800 + 1513793 @@ -29866,7 +29870,7 @@ 1 2 - 1513800 + 1513793 @@ -29882,7 +29886,7 @@ 1 2 - 1513800 + 1513793 @@ -29898,7 +29902,7 @@ 1 2 - 1513800 + 1513793 @@ -30017,7 +30021,7 @@ 1 2 - 100559 + 100558 2 @@ -30058,7 +30062,7 @@ 1 2 - 100559 + 100558 2 @@ -30099,7 +30103,7 @@ 1 2 - 137074 + 137073 2 @@ -30124,15 +30128,15 @@ varbind - 6029127 + 6029100 expr - 6029127 + 6029100 var - 768530 + 768527 @@ -30146,7 +30150,7 @@ 1 2 - 6029127 + 6029100 @@ -30167,12 +30171,12 @@ 2 3 - 137874 + 137873 3 4 - 106293 + 106292 4 @@ -30202,7 +30206,7 @@ 13 28 - 58880 + 58879 28 @@ -30217,15 +30221,15 @@ funbind - 3224501 + 3224486 expr - 3218288 + 3218274 fun - 511344 + 511323 @@ -30239,7 +30243,7 @@ 1 2 - 3212076 + 3212061 2 @@ -30260,12 +30264,12 @@ 1 2 - 315090 + 315050 2 3 - 77893 + 77912 3 @@ -30421,11 +30425,11 @@ expr_deallocator - 54694 + 54693 expr - 54694 + 54693 func @@ -30447,7 +30451,7 @@ 1 2 - 54694 + 54693 @@ -30463,7 +30467,7 @@ 1 2 - 54694 + 54693 @@ -30568,15 +30572,15 @@ expr_cond_guard - 657237 + 657235 cond - 657237 + 657235 guard - 657237 + 657235 @@ -30590,7 +30594,7 @@ 1 2 - 657237 + 657235 @@ -30606,7 +30610,7 @@ 1 2 - 657237 + 657235 @@ -30616,15 +30620,15 @@ expr_cond_true - 657235 + 657232 cond - 657235 + 657232 true - 657235 + 657232 @@ -30638,7 +30642,7 @@ 1 2 - 657235 + 657232 @@ -30654,7 +30658,7 @@ 1 2 - 657235 + 657232 @@ -30664,15 +30668,15 @@ expr_cond_false - 657237 + 657235 cond - 657237 + 657235 false - 657237 + 657235 @@ -30686,7 +30690,7 @@ 1 2 - 657237 + 657235 @@ -30702,7 +30706,7 @@ 1 2 - 657237 + 657235 @@ -30712,11 +30716,11 @@ values - 10776699 + 10776651 id - 10776699 + 10776651 str @@ -30734,7 +30738,7 @@ 1 2 - 10776699 + 10776651 @@ -30750,7 +30754,7 @@ 1 2 - 59545 + 59544 2 @@ -30780,11 +30784,11 @@ valuetext - 4757348 + 4757344 id - 4757348 + 4757344 text @@ -30802,7 +30806,7 @@ 1 2 - 4757348 + 4757344 @@ -30843,15 +30847,15 @@ valuebind - 11210920 + 11210870 val - 10776699 + 10776651 expr - 11210920 + 11210870 @@ -30865,12 +30869,12 @@ 1 2 - 10365022 + 10364976 2 7 - 411677 + 411675 @@ -30886,7 +30890,7 @@ 1 2 - 11210920 + 11210870 @@ -30896,11 +30900,11 @@ fieldoffsets - 1054697 + 1054692 id - 1054697 + 1054692 byteoffset @@ -30922,7 +30926,7 @@ 1 2 - 1054697 + 1054692 @@ -30938,7 +30942,7 @@ 1 2 - 1054697 + 1054692 @@ -31283,23 +31287,23 @@ initialisers - 1710781 + 1710773 init - 1710781 + 1710773 var - 719764 + 719761 expr - 1710781 + 1710773 location - 394651 + 394649 @@ -31313,7 +31317,7 @@ 1 2 - 1710781 + 1710773 @@ -31329,7 +31333,7 @@ 1 2 - 1710781 + 1710773 @@ -31345,7 +31349,7 @@ 1 2 - 1710781 + 1710773 @@ -31361,7 +31365,7 @@ 1 2 - 633988 + 633986 2 @@ -31387,7 +31391,7 @@ 1 2 - 633988 + 633986 2 @@ -31413,7 +31417,7 @@ 1 2 - 719758 + 719754 2 @@ -31434,7 +31438,7 @@ 1 2 - 1710781 + 1710773 @@ -31450,7 +31454,7 @@ 1 2 - 1710781 + 1710773 @@ -31466,7 +31470,7 @@ 1 2 - 1710781 + 1710773 @@ -31482,7 +31486,7 @@ 1 2 - 321715 + 321714 2 @@ -31513,7 +31517,7 @@ 1 2 - 344607 + 344605 2 @@ -31539,7 +31543,7 @@ 1 2 - 321715 + 321714 2 @@ -31575,15 +31579,15 @@ expr_ancestor - 516626 + 516623 exp - 516626 + 516623 ancestor - 308516 + 308515 @@ -31597,7 +31601,7 @@ 1 2 - 516626 + 516623 @@ -31613,7 +31617,7 @@ 1 2 - 203568 + 203567 2 @@ -31628,7 +31632,7 @@ 4 7 - 25154 + 25153 7 @@ -31643,11 +31647,11 @@ exprs - 18387506 + 18387424 id - 18387506 + 18387424 kind @@ -31655,7 +31659,7 @@ location - 8488094 + 8488154 @@ -31669,7 +31673,7 @@ 1 2 - 18387506 + 18387424 @@ -31685,7 +31689,7 @@ 1 2 - 18387506 + 18387424 @@ -31863,22 +31867,22 @@ 1 2 - 7145154 + 7145204 2 3 - 663031 + 663036 3 18 - 638103 + 638107 18 71656 - 41805 + 41806 @@ -31894,17 +31898,17 @@ 1 2 - 7251222 + 7251273 2 3 - 618242 + 618246 3 32 - 618630 + 618634 @@ -31914,15 +31918,15 @@ expr_reuse - 373719 + 373717 reuse - 373719 + 373717 original - 373700 + 373698 value_category @@ -31940,7 +31944,7 @@ 1 2 - 373719 + 373717 @@ -31956,7 +31960,7 @@ 1 2 - 373719 + 373717 @@ -31972,7 +31976,7 @@ 1 2 - 373681 + 373679 2 @@ -31993,7 +31997,7 @@ 1 2 - 373700 + 373698 @@ -32045,15 +32049,15 @@ expr_types - 18451524 + 18451442 id - 18319863 + 18319782 typeid - 1214606 + 1214616 value_category @@ -32071,12 +32075,12 @@ 1 2 - 18188202 + 18188122 2 3 - 131661 + 131659 @@ -32092,7 +32096,7 @@ 1 2 - 18319863 + 18319782 @@ -32108,42 +32112,42 @@ 1 2 - 438558 + 438565 2 3 - 249335 + 249332 3 4 - 102807 + 102839 4 5 - 81888 + 81865 5 8 - 109275 + 109274 8 14 - 96485 + 96495 14 41 - 91665 + 91664 41 125325 - 44590 + 44578 @@ -32159,12 +32163,12 @@ 1 2 - 1050219 + 1050230 2 3 - 154193 + 154192 3 @@ -32193,8 +32197,8 @@ 11 - 1239479 - 1239480 + 1239489 + 1239490 11 @@ -32219,8 +32223,8 @@ 11 - 90427 - 90428 + 90429 + 90430 11 @@ -32274,7 +32278,7 @@ 2 3 - 14736 + 14735 3 @@ -33483,7 +33487,7 @@ type_id - 20104 + 20103 @@ -33528,11 +33532,11 @@ sizeof_bind - 199184 + 199183 expr - 199184 + 199183 type_id @@ -33550,7 +33554,7 @@ 1 2 - 199184 + 199183 @@ -33659,11 +33663,11 @@ lambdas - 21475 + 21478 expr - 21475 + 21478 default_capture @@ -33685,7 +33689,7 @@ 1 2 - 21475 + 21478 @@ -33701,7 +33705,7 @@ 1 2 - 21475 + 21478 @@ -33775,15 +33779,15 @@ lambda_capture - 28011 + 28015 id - 28011 + 28015 lambda - 20542 + 20544 index @@ -33791,7 +33795,7 @@ field - 28011 + 28015 captured_by_reference @@ -33817,7 +33821,7 @@ 1 2 - 28011 + 28015 @@ -33833,7 +33837,7 @@ 1 2 - 28011 + 28015 @@ -33849,7 +33853,7 @@ 1 2 - 28011 + 28015 @@ -33865,7 +33869,7 @@ 1 2 - 28011 + 28015 @@ -33881,7 +33885,7 @@ 1 2 - 28011 + 28015 @@ -33897,7 +33901,7 @@ 1 2 - 28011 + 28015 @@ -33913,12 +33917,12 @@ 1 2 - 13072 + 13073 2 3 - 7469 + 7470 @@ -33934,12 +33938,12 @@ 1 2 - 13072 + 13073 2 3 - 7469 + 7470 @@ -33955,12 +33959,12 @@ 1 2 - 13072 + 13073 2 3 - 7469 + 7470 @@ -33976,7 +33980,7 @@ 1 2 - 20542 + 20544 @@ -33992,7 +33996,7 @@ 1 2 - 20542 + 20544 @@ -34008,12 +34012,12 @@ 1 2 - 13072 + 13073 2 3 - 7469 + 7470 @@ -34145,7 +34149,7 @@ 1 2 - 28011 + 28015 @@ -34161,7 +34165,7 @@ 1 2 - 28011 + 28015 @@ -34177,7 +34181,7 @@ 1 2 - 28011 + 28015 @@ -34193,7 +34197,7 @@ 1 2 - 28011 + 28015 @@ -34209,7 +34213,7 @@ 1 2 - 28011 + 28015 @@ -34225,7 +34229,7 @@ 1 2 - 28011 + 28015 @@ -34654,11 +34658,11 @@ stmts - 4630345 + 4630324 id - 4630345 + 4630324 kind @@ -34666,7 +34670,7 @@ location - 2171742 + 2171732 @@ -34680,7 +34684,7 @@ 1 2 - 4630345 + 4630324 @@ -34696,7 +34700,7 @@ 1 2 - 4630345 + 4630324 @@ -34924,12 +34928,12 @@ 1 2 - 1725789 + 1725781 2 3 - 178302 + 178301 3 @@ -34955,7 +34959,7 @@ 1 2 - 2117857 + 2117848 2 @@ -35114,15 +35118,15 @@ if_then - 725914 + 725911 if_stmt - 725914 + 725911 then_id - 725914 + 725911 @@ -35136,7 +35140,7 @@ 1 2 - 725914 + 725911 @@ -35152,7 +35156,7 @@ 1 2 - 725914 + 725911 @@ -35162,15 +35166,15 @@ if_else - 184669 + 184668 if_stmt - 184669 + 184668 else_id - 184669 + 184668 @@ -35184,7 +35188,7 @@ 1 2 - 184669 + 184668 @@ -35200,7 +35204,7 @@ 1 2 - 184669 + 184668 @@ -35258,15 +35262,15 @@ constexpr_if_then - 52998 + 52997 constexpr_if_stmt - 52998 + 52997 then_id - 52998 + 52997 @@ -35280,7 +35284,7 @@ 1 2 - 52998 + 52997 @@ -35296,7 +35300,7 @@ 1 2 - 52998 + 52997 @@ -35354,15 +35358,15 @@ while_body - 29317 + 29316 while_stmt - 29317 + 29316 body_id - 29317 + 29316 @@ -35376,7 +35380,7 @@ 1 2 - 29317 + 29316 @@ -35392,7 +35396,7 @@ 1 2 - 29317 + 29316 @@ -35402,15 +35406,15 @@ do_body - 148874 + 148873 do_stmt - 148874 + 148873 body_id - 148874 + 148873 @@ -35424,7 +35428,7 @@ 1 2 - 148874 + 148873 @@ -35440,7 +35444,7 @@ 1 2 - 148874 + 148873 @@ -35498,7 +35502,7 @@ switch_case - 207501 + 207500 switch_stmt @@ -35510,7 +35514,7 @@ case_id - 207501 + 207500 @@ -35738,7 +35742,7 @@ 1 2 - 207501 + 207500 @@ -35754,7 +35758,7 @@ 1 2 - 207501 + 207500 @@ -36004,11 +36008,11 @@ stmtparents - 4053474 + 4053456 id - 4053474 + 4053456 index @@ -36016,7 +36020,7 @@ parent - 1719861 + 1719854 @@ -36030,7 +36034,7 @@ 1 2 - 4053474 + 4053456 @@ -36046,7 +36050,7 @@ 1 2 - 4053474 + 4053456 @@ -36184,17 +36188,17 @@ 1 2 - 987702 + 987697 2 3 - 372623 + 372621 3 4 - 105638 + 105637 4 @@ -36225,17 +36229,17 @@ 1 2 - 987702 + 987697 2 3 - 372623 + 372621 3 4 - 105638 + 105637 4 @@ -36260,11 +36264,11 @@ ishandler - 62676 + 62675 block - 62676 + 62675 @@ -36297,7 +36301,7 @@ 1 2 - 520372 + 520373 2 @@ -36318,7 +36322,7 @@ 1 2 - 520372 + 520373 2 @@ -36578,7 +36582,7 @@ 1 2 - 520372 + 520373 2 @@ -36599,7 +36603,7 @@ 1 2 - 520372 + 520373 2 @@ -36833,15 +36837,15 @@ blockscope - 1410868 + 1410861 block - 1410868 + 1410861 enclosing - 1295552 + 1295546 @@ -36855,7 +36859,7 @@ 1 2 - 1410868 + 1410861 @@ -36871,12 +36875,12 @@ 1 2 - 1230191 + 1230185 2 13 - 65361 + 65360 @@ -36886,15 +36890,15 @@ jumpinfo - 254457 + 254455 id - 254457 + 254455 str - 21191 + 21190 target @@ -36912,7 +36916,7 @@ 1 2 - 254457 + 254455 @@ -36928,7 +36932,7 @@ 1 2 - 254457 + 254455 @@ -37072,19 +37076,19 @@ preprocdirects - 4190586 + 4191099 id - 4190586 + 4191099 kind - 5135 + 5136 location - 4149969 + 4150477 @@ -37098,7 +37102,7 @@ 1 2 - 4190586 + 4191099 @@ -37114,7 +37118,7 @@ 1 2 - 4190586 + 4191099 @@ -37262,7 +37266,7 @@ 1 2 - 4149502 + 4150010 88 @@ -37283,7 +37287,7 @@ 1 2 - 4149969 + 4150477 @@ -37293,15 +37297,15 @@ preprocpair - 1431410 + 1431585 begin - 1197043 + 1197190 elseelifend - 1431410 + 1431585 @@ -37315,17 +37319,17 @@ 1 2 - 978550 + 978670 2 3 - 208222 + 208247 3 11 - 10271 + 10272 @@ -37341,7 +37345,7 @@ 1 2 - 1431410 + 1431585 @@ -37351,41 +37355,41 @@ preproctrue - 767060 + 767154 branch - 767060 + 767154 preprocfalse - 331474 + 331515 branch - 331474 + 331515 preproctext - 3367747 + 3367732 id - 3367747 + 3367732 head - 2440673 + 2440662 body - 1426418 + 1426412 @@ -37399,7 +37403,7 @@ 1 2 - 3367747 + 3367732 @@ -37415,7 +37419,7 @@ 1 2 - 3367747 + 3367732 @@ -37431,12 +37435,12 @@ 1 2 - 2301873 + 2301863 2 740 - 138800 + 138799 @@ -37452,7 +37456,7 @@ 1 2 - 2381962 + 2381951 2 @@ -37473,12 +37477,12 @@ 1 2 - 1291263 + 1291258 2 6 - 106981 + 106980 6 @@ -37499,7 +37503,7 @@ 1 2 - 1294120 + 1294114 2 @@ -37519,15 +37523,15 @@ includes - 313266 + 313305 id - 313266 + 313305 included - 117183 + 117197 @@ -37541,7 +37545,7 @@ 1 2 - 313266 + 313305 @@ -37557,27 +37561,27 @@ 1 2 - 61159 + 61166 2 3 - 21942 + 21945 3 4 - 12605 + 12606 4 6 - 10271 + 10272 6 14 - 8870 + 8871 14 @@ -37640,11 +37644,11 @@ link_parent - 28676866 + 28676738 element - 3584451 + 3584435 link_target @@ -37662,7 +37666,7 @@ 1 2 - 432954 + 432952 2 @@ -37672,7 +37676,7 @@ 9 10 - 3131152 + 3131138 diff --git a/cpp/ql/lib/upgrades/7ff6a6e53dbcff09d1b9b758b594bc6d17366863/old.dbscheme b/cpp/ql/lib/upgrades/7ff6a6e53dbcff09d1b9b758b594bc6d17366863/old.dbscheme new file mode 100644 index 000000000000..7ff6a6e53dbc --- /dev/null +++ b/cpp/ql/lib/upgrades/7ff6a6e53dbcff09d1b9b758b594bc6d17366863/old.dbscheme @@ -0,0 +1,2315 @@ + +/** + * 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 +); + +/* +case @coroutine_placeholder_variable.kind of + 1 = @handle +| 2 = @promise +| 3 = @init_await_resume +; +*/ + +coroutine_placeholder_variable( + unique int placeholder_variable: @variable ref, + int kind: int ref, + int function: @function 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) + +deduction_guide_for_class( + int id: @function ref, + int class_template: @usertype 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 +); + +case @using.kind of + 1 = @using_declaration +| 2 = @using_directive +| 3 = @using_enum_declaration +; + +usings( + unique int id: @using, + int element_id: @element ref, + int location: @location_default ref, + int kind: int 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 +); + +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 +); + +explicit_specifier_exprs( + unique int func_id: @function ref, + int constant: @expr 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 + | @c11_generic + ; + +/* +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 + +/* + Binary encoding of the allocator form. + + 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 +); + +/* + Binary encoding of the deallocator form. + + case @deallocator.form of + 0 = plain + | 1 = size + | 2 = alignment + | 4 = destroying_delete + ; +*/ + +/** + * 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 +| 364 = @istriviallycopyassignable +| 365 = @isassignablenopreconditioncheck +| 366 = @referencebindstotemporary +| 367 = @issameas +| 368 = @builtinhasattribute +| 369 = @ispointerinterconvertiblewithclass +| 370 = @builtinispointerinterconvertiblewithclass +| 371 = @iscorrespondingmember +| 372 = @builtiniscorrespondingmember +| 373 = @isboundedarray +| 374 = @isunboundedarray +| 375 = @isreferenceable +| 378 = @isnothrowconvertible +| 379 = @referenceconstructsfromtemporary +| 380 = @referenceconvertsfromtemporary +| 381 = @isconvertible +| 382 = @isvalidwinrttype +| 383 = @iswinclass +| 384 = @iswininterface +| 385 = @istriviallyequalitycomparable +| 386 = @isscopedenum +| 387 = @istriviallyrelocatable +| 388 = @datasizeof +| 389 = @c11_generic +; + +@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 + | @istriviallycopyassignable + | @isassignablenopreconditioncheck + | @referencebindstotemporary + | @issameas + | @builtinhasattribute + | @ispointerinterconvertiblewithclass + | @builtinispointerinterconvertiblewithclass + | @iscorrespondingmember + | @builtiniscorrespondingmember + | @isboundedarray + | @isunboundedarray + | @isreferenceable + | @isnothrowconvertible + | @referenceconstructsfromtemporary + | @referenceconvertsfromtemporary + | @isconvertible + | @isvalidwinrttype + | @iswinclass + | @iswininterface + | @istriviallyequalitycomparable + | @isscopedenum + | @istriviallyrelocatable + ; + +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 | @datasizeof; + +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/7ff6a6e53dbcff09d1b9b758b594bc6d17366863/semmlecode.cpp.dbscheme b/cpp/ql/lib/upgrades/7ff6a6e53dbcff09d1b9b758b594bc6d17366863/semmlecode.cpp.dbscheme new file mode 100644 index 000000000000..6f5d51e89e76 --- /dev/null +++ b/cpp/ql/lib/upgrades/7ff6a6e53dbcff09d1b9b758b594bc6d17366863/semmlecode.cpp.dbscheme @@ -0,0 +1,2316 @@ + +/** + * 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 +); + +/* +case @coroutine_placeholder_variable.kind of + 1 = @handle +| 2 = @promise +| 3 = @init_await_resume +; +*/ + +coroutine_placeholder_variable( + unique int placeholder_variable: @variable ref, + int kind: int ref, + int function: @function 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) + +deduction_guide_for_class( + int id: @function ref, + int class_template: @usertype 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 +); + +case @using.kind of + 1 = @using_declaration +| 2 = @using_directive +| 3 = @using_enum_declaration +; + +usings( + unique int id: @using, + int element_id: @element ref, + int location: @location_default ref, + int kind: int 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 +); + +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 +); + +explicit_specifier_exprs( + unique int func_id: @function ref, + int constant: @expr 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 + | @c11_generic + ; + +/* +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 + +/* + Binary encoding of the allocator form. + + 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 +); + +/* + Binary encoding of the deallocator form. + + case @deallocator.form of + 0 = plain + | 1 = size + | 2 = alignment + | 4 = destroying_delete + ; +*/ + +/** + * 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 +| 364 = @istriviallycopyassignable +| 365 = @isassignablenopreconditioncheck +| 366 = @referencebindstotemporary +| 367 = @issameas +| 368 = @builtinhasattribute +| 369 = @ispointerinterconvertiblewithclass +| 370 = @builtinispointerinterconvertiblewithclass +| 371 = @iscorrespondingmember +| 372 = @builtiniscorrespondingmember +| 373 = @isboundedarray +| 374 = @isunboundedarray +| 375 = @isreferenceable +| 378 = @isnothrowconvertible +| 379 = @referenceconstructsfromtemporary +| 380 = @referenceconvertsfromtemporary +| 381 = @isconvertible +| 382 = @isvalidwinrttype +| 383 = @iswinclass +| 384 = @iswininterface +| 385 = @istriviallyequalitycomparable +| 386 = @isscopedenum +| 387 = @istriviallyrelocatable +| 388 = @datasizeof +| 389 = @c11_generic +| 390 = @requires_expr +; + +@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 + | @istriviallycopyassignable + | @isassignablenopreconditioncheck + | @referencebindstotemporary + | @issameas + | @builtinhasattribute + | @ispointerinterconvertiblewithclass + | @builtinispointerinterconvertiblewithclass + | @iscorrespondingmember + | @builtiniscorrespondingmember + | @isboundedarray + | @isunboundedarray + | @isreferenceable + | @isnothrowconvertible + | @referenceconstructsfromtemporary + | @referenceconvertsfromtemporary + | @isconvertible + | @isvalidwinrttype + | @iswinclass + | @iswininterface + | @istriviallyequalitycomparable + | @isscopedenum + | @istriviallyrelocatable + ; + +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 | @datasizeof; + +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/7ff6a6e53dbcff09d1b9b758b594bc6d17366863/upgrade.properties b/cpp/ql/lib/upgrades/7ff6a6e53dbcff09d1b9b758b594bc6d17366863/upgrade.properties new file mode 100644 index 000000000000..dddc448b8e13 --- /dev/null +++ b/cpp/ql/lib/upgrades/7ff6a6e53dbcff09d1b9b758b594bc6d17366863/upgrade.properties @@ -0,0 +1,2 @@ +description: Add requires expressions +compatibility: full diff --git a/cpp/ql/src/Best Practices/Unused Entities/UnusedLocals.ql b/cpp/ql/src/Best Practices/Unused Entities/UnusedLocals.ql index 1d02474bfbb7..5ae8468d0fc4 100644 --- a/cpp/ql/src/Best Practices/Unused Entities/UnusedLocals.ql +++ b/cpp/ql/src/Best Practices/Unused Entities/UnusedLocals.ql @@ -57,5 +57,5 @@ where not declarationHasSideEffects(v) and not exists(AsmStmt s | f = s.getEnclosingFunction()) and not v.getAnAttribute().getName() = "unused" and - not any(ErrorExpr e).getEnclosingFunction() = f // unextracted expr may use `v` + not f.hasErrors() // Unextracted expressions may use `v` select v, "Variable " + v.getName() + " is not used." diff --git a/cpp/ql/src/CHANGELOG.md b/cpp/ql/src/CHANGELOG.md index 8eaccb0404dc..e73850bbfe96 100644 --- a/cpp/ql/src/CHANGELOG.md +++ b/cpp/ql/src/CHANGELOG.md @@ -1,3 +1,12 @@ +## 1.2.5 + +### Minor Analysis Improvements + +* The `cpp/unclear-array-index-validation` ("Unclear validation of array index") query has been improved to reduce false positives and increase true positives. +* Fixed false positives in the `cpp/uninitialized-local` ("Potentially uninitialized local variable") query if there are extraction errors in the function. +* The `cpp/incorrect-string-type-conversion` query now produces fewer false positives caused by failure to detect byte arrays. +* The `cpp/incorrect-string-type-conversion` query now produces fewer false positives caused by failure to recognize dynamic checks prior to possible dangerous widening. + ## 1.2.4 ### Minor Analysis Improvements diff --git a/cpp/ql/src/Likely Bugs/Memory Management/ReturnStackAllocatedMemory.ql b/cpp/ql/src/Likely Bugs/Memory Management/ReturnStackAllocatedMemory.ql index 16679d67fd2e..02678beaf124 100644 --- a/cpp/ql/src/Likely Bugs/Memory Management/ReturnStackAllocatedMemory.ql +++ b/cpp/ql/src/Likely Bugs/Memory Management/ReturnStackAllocatedMemory.ql @@ -29,7 +29,7 @@ class ReturnStackAllocatedMemoryConfig extends MustFlowConfiguration { override predicate isSource(Instruction source) { exists(Function func | // Rule out FPs caused by extraction errors. - not any(ErrorExpr e).getEnclosingFunction() = func and + not func.hasErrors() and not intentionallyReturnsStackPointer(func) and func = source.getEnclosingFunction() | diff --git a/cpp/ql/src/Likely Bugs/Memory Management/UninitializedLocal.ql b/cpp/ql/src/Likely Bugs/Memory Management/UninitializedLocal.ql index 35bee25c9f5f..763a142f1b90 100644 --- a/cpp/ql/src/Likely Bugs/Memory Management/UninitializedLocal.ql +++ b/cpp/ql/src/Likely Bugs/Memory Management/UninitializedLocal.ql @@ -65,6 +65,7 @@ predicate isSinkImpl(Instruction sink, VariableAccess va) { exists(LoadInstruction load | va = load.getUnconvertedResultExpression() and not va = commonException() and + not va.getTarget().(LocalVariable).getFunction().hasErrors() and sink = load.getSourceValue() ) } diff --git a/cpp/ql/src/Likely Bugs/Memory Management/UsingExpiredStackAddress.ql b/cpp/ql/src/Likely Bugs/Memory Management/UsingExpiredStackAddress.ql index 678cb95a7214..0df59b5f01db 100644 --- a/cpp/ql/src/Likely Bugs/Memory Management/UsingExpiredStackAddress.ql +++ b/cpp/ql/src/Likely Bugs/Memory Management/UsingExpiredStackAddress.ql @@ -24,7 +24,7 @@ predicate instructionHasVariable(VariableAddressInstruction vai, StackVariable v // Pointer-to-member types aren't properly handled in the dbscheme. not vai.getResultType() instanceof PointerToMemberType and // Rule out FPs caused by extraction errors. - not any(ErrorExpr e).getEnclosingFunction() = f + not f.hasErrors() } /** diff --git a/cpp/ql/src/Security/CWE/CWE-129/ImproperArrayIndexValidation.ql b/cpp/ql/src/Security/CWE/CWE-129/ImproperArrayIndexValidation.ql index 66336de4624c..3fd2be384a98 100644 --- a/cpp/ql/src/Security/CWE/CWE-129/ImproperArrayIndexValidation.ql +++ b/cpp/ql/src/Security/CWE/CWE-129/ImproperArrayIndexValidation.ql @@ -14,57 +14,42 @@ import cpp import semmle.code.cpp.controlflow.IRGuards -import semmle.code.cpp.security.FlowSources -import semmle.code.cpp.ir.dataflow.TaintTracking -import semmle.code.cpp.rangeanalysis.RangeAnalysisUtils +import semmle.code.cpp.security.FlowSources as FS +import semmle.code.cpp.dataflow.new.TaintTracking +import semmle.code.cpp.rangeanalysis.SimpleRangeAnalysis import ImproperArrayIndexValidation::PathGraph -import semmle.code.cpp.security.Security -predicate hasUpperBound(VariableAccess offsetExpr) { - exists(BasicBlock controlled, StackVariable offsetVar, SsaDefinition def | - controlled.contains(offsetExpr) and - linearBoundControls(controlled, def, offsetVar) and - offsetExpr = def.getAUse(offsetVar) - ) +predicate isFlowSource(FS::FlowSource source, string sourceType) { + sourceType = source.getSourceType() } -pragma[noinline] -predicate linearBoundControls(BasicBlock controlled, SsaDefinition def, StackVariable offsetVar) { - exists(GuardCondition guard, boolean branch | - guard.controls(controlled, branch) and - cmpWithLinearBound(guard, def.getAUse(offsetVar), Lesser(), branch) +predicate guardChecks(IRGuardCondition g, Expr e, boolean branch) { + exists(Operand op | op.getDef().getConvertedResultExpression() = e | + // `op < k` is true and `k > 0` + g.comparesLt(op, any(int k | k > 0), true, any(BooleanValue bv | bv.getValue() = branch)) + or + // `op < _ + k` is true and `k > 0`. + g.comparesLt(op, _, any(int k | k > 0), true, branch) + or + // op == k + g.comparesEq(op, _, true, any(BooleanValue bv | bv.getValue() = branch)) + or + // op == _ + k + g.comparesEq(op, _, _, true, branch) ) } -predicate readsVariable(LoadInstruction load, Variable var) { - load.getSourceAddress().(VariableAddressInstruction).getAstVariable() = var -} - -predicate hasUpperBoundsCheck(Variable var) { - exists(RelationalOperation oper, VariableAccess access | - oper.getAnOperand() = access and - access.getTarget() = var and - // Comparing to 0 is not an upper bound check - not oper.getAnOperand().getValue() = "0" +/** + * Holds if `arrayExpr` accesses an `ArrayType` with a constant size `N`, and + * the value of `offsetExpr` is known to be smaller than `N`. + */ +predicate offsetIsAlwaysInBounds(ArrayExpr arrayExpr, VariableAccess offsetExpr) { + exists(ArrayType arrayType | + arrayType = arrayExpr.getArrayBase().getUnspecifiedType() and + arrayType.getArraySize() > upperBound(offsetExpr.getFullyConverted()) ) } -predicate nodeIsBarrierEqualityCandidate(DataFlow::Node node, Operand access, Variable checkedVar) { - readsVariable(node.asInstruction(), checkedVar) and - any(IRGuardCondition guard).ensuresEq(access, _, _, node.asInstruction().getBlock(), true) -} - -predicate isFlowSource(FlowSource source, string sourceType) { sourceType = source.getSourceType() } - -predicate predictableInstruction(Instruction instr) { - instr instanceof ConstantInstruction - or - instr instanceof StringConstantInstruction - or - // This could be a conversion on a string literal - predictableInstruction(instr.(UnaryInstruction).getUnary()) -} - module ImproperArrayIndexValidationConfig implements DataFlow::ConfigSig { predicate isSource(DataFlow::Node source) { isFlowSource(source, _) and @@ -72,47 +57,16 @@ module ImproperArrayIndexValidationConfig implements DataFlow::ConfigSig { } predicate isBarrier(DataFlow::Node node) { - hasUpperBound(node.asExpr()) - or - // These barriers are ported from `DefaultTaintTracking` because this query is quite noisy - // otherwise. - exists(Variable checkedVar | - readsVariable(node.asInstruction(), checkedVar) and - hasUpperBoundsCheck(checkedVar) - ) - or - exists(Variable checkedVar, Operand access | - readsVariable(access.getDef(), checkedVar) and - nodeIsBarrierEqualityCandidate(node, access, checkedVar) - ) - or - // Don't use dataflow into binary instructions if both operands are unpredictable - exists(BinaryInstruction iTo | - iTo = node.asInstruction() and - not predictableInstruction(iTo.getLeft()) and - not predictableInstruction(iTo.getRight()) and - // propagate taint from either the pointer or the offset, regardless of predictability - not iTo instanceof PointerArithmeticInstruction - ) - or - // don't use dataflow through calls to pure functions if two or more operands - // are unpredictable - exists(Instruction iFrom1, Instruction iFrom2, CallInstruction iTo | - iTo = node.asInstruction() and - isPureFunction(iTo.getStaticCallTarget().getName()) and - iFrom1 = iTo.getAnArgument() and - iFrom2 = iTo.getAnArgument() and - not predictableInstruction(iFrom1) and - not predictableInstruction(iFrom2) and - iFrom1 != iFrom2 - ) + node = DataFlow::BarrierGuard::getABarrierNode() } + predicate isBarrierOut(DataFlow::Node node) { isSink(node) } + predicate isSink(DataFlow::Node sink) { exists(ArrayExpr arrayExpr, VariableAccess offsetExpr | offsetExpr = arrayExpr.getArrayOffset() and sink.asExpr() = offsetExpr and - not hasUpperBound(offsetExpr) + not offsetIsAlwaysInBounds(arrayExpr, offsetExpr) ) } } diff --git a/cpp/ql/src/change-notes/released/1.2.5.md b/cpp/ql/src/change-notes/released/1.2.5.md new file mode 100644 index 000000000000..04aead25cb99 --- /dev/null +++ b/cpp/ql/src/change-notes/released/1.2.5.md @@ -0,0 +1,8 @@ +## 1.2.5 + +### Minor Analysis Improvements + +* The `cpp/unclear-array-index-validation` ("Unclear validation of array index") query has been improved to reduce false positives and increase true positives. +* Fixed false positives in the `cpp/uninitialized-local` ("Potentially uninitialized local variable") query if there are extraction errors in the function. +* The `cpp/incorrect-string-type-conversion` query now produces fewer false positives caused by failure to detect byte arrays. +* The `cpp/incorrect-string-type-conversion` query now produces fewer false positives caused by failure to recognize dynamic checks prior to possible dangerous widening. diff --git a/cpp/ql/src/codeql-pack.release.yml b/cpp/ql/src/codeql-pack.release.yml index 172090f46b6d..40355f0807f9 100644 --- a/cpp/ql/src/codeql-pack.release.yml +++ b/cpp/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.2.4 +lastReleaseVersion: 1.2.5 diff --git a/cpp/ql/src/jsf/4.13 Functions/AV Rule 114.ql b/cpp/ql/src/jsf/4.13 Functions/AV Rule 114.ql index ac5db25ea6b5..9027c064ac67 100644 --- a/cpp/ql/src/jsf/4.13 Functions/AV Rule 114.ql +++ b/cpp/ql/src/jsf/4.13 Functions/AV Rule 114.ql @@ -49,7 +49,7 @@ predicate functionsMissingReturnStmt(Function f, ControlFlowNode blame) { predicate functionImperfectlyExtracted(Function f) { exists(CompilerError e | f.getBlock().getLocation().subsumes(e.getLocation())) or - exists(ErrorExpr ee | ee.getEnclosingFunction() = f) + f.hasErrors() or count(f.getType()) > 1 or diff --git a/cpp/ql/src/qlpack.yml b/cpp/ql/src/qlpack.yml index e541f95cd85f..eee6e064b22f 100644 --- a/cpp/ql/src/qlpack.yml +++ b/cpp/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/cpp-queries -version: 1.2.4 +version: 1.2.5 groups: - cpp - queries diff --git a/cpp/ql/test/examples/expressions/PrintAST.expected b/cpp/ql/test/examples/expressions/PrintAST.expected index 7de95cb8b4a4..e8e753becb56 100644 --- a/cpp/ql/test/examples/expressions/PrintAST.expected +++ b/cpp/ql/test/examples/expressions/PrintAST.expected @@ -870,6 +870,8 @@ Throw.cpp: # 8| Type = [BoolType] bool # 8| ValueCategory = prvalue # 12| getChild(1): [Handler] +# 12| getParameter(): [Parameter] e +# 12| Type = [PointerType] E * # 12| getBlock(): [CatchBlock] { ... } # 13| getStmt(0): [ExprStmt] ExprStmt # 13| getExpr(): [ReThrowExpr] re-throw exception diff --git a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-125/semmle/tests/test.cpp b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-125/semmle/tests/test.cpp index b5e8096af2ac..b4f0830039d8 100644 --- a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-125/semmle/tests/test.cpp +++ b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-125/semmle/tests/test.cpp @@ -6,7 +6,7 @@ int wprintf (const wchar_t* format, ...); int strlen( const char * string ); int checkErrors(); -void goodTest0() +static void goodTest0() { char * ptr = "123456789"; int ret; @@ -17,7 +17,7 @@ void goodTest0() ptr += ret; } } -void goodTest1(const char* ptr) +static void goodTest1(const char* ptr) { int ret; int len; @@ -27,7 +27,7 @@ void goodTest1(const char* ptr) ptr += ret; } } -void goodTest2(char* ptr) +static void goodTest2(char* ptr) { int ret; ptr[10]=0; @@ -38,7 +38,7 @@ void goodTest2(char* ptr) } } -void goodTest3(const char* ptr) +static void goodTest3(const char* ptr) { int ret; int len; @@ -48,7 +48,7 @@ void goodTest3(const char* ptr) ptr += ret; } } -void goodTest4(const char* ptr) +static void goodTest4(const char* ptr) { int ret; int len; @@ -58,7 +58,7 @@ void goodTest4(const char* ptr) ptr += ret; } } -void badTest1(const char* ptr) +static void badTest1(const char* ptr) { int ret; int len; @@ -68,7 +68,7 @@ void badTest1(const char* ptr) ptr += ret; } } -void badTest2(const char* ptr) +static void badTest2(const char* ptr) { int ret; int len; @@ -79,7 +79,7 @@ void badTest2(const char* ptr) } } -void goodTest5(const char* ptr,wchar_t *wc,int wc_len) +static void goodTest5(const char* ptr,wchar_t *wc,int wc_len) { int ret; int len; @@ -96,7 +96,7 @@ void goodTest5(const char* ptr,wchar_t *wc,int wc_len) } } -void badTest3(const char* ptr,int wc_len) +static void badTest3(const char* ptr,int wc_len) { int ret; int len; @@ -113,7 +113,7 @@ void badTest3(const char* ptr,int wc_len) wc++; } } -void badTest4(const char* ptr,int wc_len) +static void badTest4(const char* ptr,int wc_len) { int ret; int len; @@ -130,7 +130,7 @@ void badTest4(const char* ptr,int wc_len) wc++; } } -void badTest5(const char* ptr,int wc_len) +static void badTest5(const char* ptr,int wc_len) { int ret; int len; @@ -148,7 +148,7 @@ void badTest5(const char* ptr,int wc_len) } } -void badTest6(const char* ptr,int wc_len) +static void badTest6(const char* ptr,int wc_len) { int ret; int len; @@ -171,7 +171,7 @@ void badTest6(const char* ptr,int wc_len) ptr+=ret; } } -void badTest7(const char* ptr,int wc_len) +static void badTest7(const char* ptr,int wc_len) { int ret; int len; @@ -188,7 +188,7 @@ void badTest7(const char* ptr,int wc_len) ptr+=ret; } } -void badTest8(const char* ptr,wchar_t *wc) +static void badTest8(const char* ptr,wchar_t *wc) { int ret; int len; diff --git a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-125/semmle/tests/test1.cpp b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-125/semmle/tests/test1.cpp index 828b91a44f19..d66f36d38b97 100644 --- a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-125/semmle/tests/test1.cpp +++ b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-125/semmle/tests/test1.cpp @@ -24,7 +24,7 @@ typedef unsigned int size_t; void* calloc (size_t num, size_t size); void* malloc (size_t size); -void badTest1(void *src, int size) { +static void badTest1(void *src, int size) { WideCharToMultiByte(CP_ACP, 0, (LPCWSTR)src, -1, (LPSTR)src, size, 0, 0); // BAD MultiByteToWideChar(CP_ACP, 0, (LPCSTR)src, -1, (LPCWSTR)src, 30); // BAD } @@ -39,43 +39,43 @@ void goodTest2(){ } printf("%s\n", dst); } -void badTest2(){ +static void badTest2(){ wchar_t src[] = L"0123456789ABCDEF"; char dst[16]; WideCharToMultiByte(CP_UTF8, 0, src, -1, dst, 16, NULL, NULL); // BAD printf("%s\n", dst); } -void goodTest3(){ +static void goodTest3(){ char src[] = "0123456789ABCDEF"; int size = MultiByteToWideChar(CP_UTF8, 0, src,sizeof(src),NULL,0); wchar_t * dst = (wchar_t*)calloc(size + 1, sizeof(wchar_t)); MultiByteToWideChar(CP_UTF8, 0, src, -1, dst, size+1); // GOOD } -void badTest3(){ +static void badTest3(){ char src[] = "0123456789ABCDEF"; int size = MultiByteToWideChar(CP_UTF8, 0, src,sizeof(src),NULL,0); wchar_t * dst = (wchar_t*)calloc(size + 1, 1); MultiByteToWideChar(CP_UTF8, 0, src, -1, dst, size+1); // BAD } -void goodTest4(){ +static void goodTest4(){ char src[] = "0123456789ABCDEF"; int size = MultiByteToWideChar(CP_UTF8, 0, src,sizeof(src),NULL,0); wchar_t * dst = (wchar_t*)malloc((size + 1)*sizeof(wchar_t)); MultiByteToWideChar(CP_UTF8, 0, src, -1, dst, size+1); // GOOD } -void badTest4(){ +static void badTest4(){ char src[] = "0123456789ABCDEF"; int size = MultiByteToWideChar(CP_UTF8, 0, src,sizeof(src),NULL,0); wchar_t * dst = (wchar_t*)malloc(size + 1); MultiByteToWideChar(CP_UTF8, 0, src, -1, dst, size+1); // BAD } -int goodTest5(void *src){ +static int goodTest5(void *src){ return WideCharToMultiByte(CP_ACP, 0, (LPCWSTR)src, -1, 0, 0, 0, 0); // GOOD } -int badTest5 (void *src) { +static int badTest5 (void *src) { return WideCharToMultiByte(CP_ACP, 0, (LPCWSTR)src, -1, 0, 3, 0, 0); // BAD } -void goodTest6(WCHAR *src) +static void goodTest6(WCHAR *src) { int size; char dst[5] =""; @@ -87,7 +87,7 @@ void goodTest6(WCHAR *src) WideCharToMultiByte(CP_ACP, 0, src, -1, dst, sizeof(dst), 0, 0); // GOOD printf("%s\n", dst); } -void badTest6(WCHAR *src) +static void badTest6(WCHAR *src) { char dst[5] =""; WideCharToMultiByte(CP_ACP, 0, src, -1, dst, 260, 0, 0); // BAD diff --git a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-125/semmle/tests/test2.cpp b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-125/semmle/tests/test2.cpp index 99dc3e47e5ba..65e5a9ee275f 100644 --- a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-125/semmle/tests/test2.cpp +++ b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-125/semmle/tests/test2.cpp @@ -11,14 +11,14 @@ size_t _mbstowcs_l(wchar_t *wcstr,const char *mbstr,size_t count, _locale_t loca size_t mbsrtowcs(wchar_t *wcstr,const char *mbstr,size_t count, mbstate_t *mbstate); -void badTest1(void *src, int size) { +static void badTest1(void *src, int size) { mbstowcs((wchar_t*)src,(char*)src,size); // BAD _locale_t locale; _mbstowcs_l((wchar_t*)src,(char*)src,size,locale); // BAD mbstate_t *mbstate; mbsrtowcs((wchar_t*)src,(char*)src,size,mbstate); // BAD } -void goodTest2(){ +static void goodTest2(){ char src[] = "0123456789ABCDEF"; wchar_t dst[16]; int res = mbstowcs(dst, src,16); // GOOD @@ -29,43 +29,43 @@ void goodTest2(){ } printf("%s\n", dst); } -void badTest2(){ +static void badTest2(){ char src[] = "0123456789ABCDEF"; wchar_t dst[16]; mbstowcs(dst, src,16); // BAD printf("%s\n", dst); } -void goodTest3(){ +static void goodTest3(){ char src[] = "0123456789ABCDEF"; int size = mbstowcs(NULL, src,NULL); wchar_t * dst = (wchar_t*)calloc(size + 1, sizeof(wchar_t)); mbstowcs(dst, src,size+1); // GOOD } -void badTest3(){ +static void badTest3(){ char src[] = "0123456789ABCDEF"; int size = mbstowcs(NULL, src,NULL); wchar_t * dst = (wchar_t*)calloc(size + 1, 1); mbstowcs(dst, src,size+1); // BAD } -void goodTest4(){ +static void goodTest4(){ char src[] = "0123456789ABCDEF"; int size = mbstowcs(NULL, src,NULL); wchar_t * dst = (wchar_t*)malloc((size + 1)*sizeof(wchar_t)); mbstowcs(dst, src,size+1); // GOOD } -void badTest4(){ +static void badTest4(){ char src[] = "0123456789ABCDEF"; int size = mbstowcs(NULL, src,NULL); wchar_t * dst = (wchar_t*)malloc(size + 1); mbstowcs(dst, src,size+1); // BAD } -int goodTest5(void *src){ +static int goodTest5(void *src){ return mbstowcs(NULL, (char*)src,NULL); // GOOD } -int badTest5 (void *src) { +static int badTest5 (void *src) { return mbstowcs(NULL, (char*)src,3); // BAD } -void goodTest6(void *src){ +static void goodTest6(void *src){ wchar_t dst[5]; int size = mbstowcs(NULL, (char*)src,NULL); if(size>=sizeof(dst)){ @@ -75,7 +75,7 @@ void goodTest6(void *src){ mbstowcs(dst, (char*)src,sizeof(dst)); // GOOD printf("%s\n", dst); } -void badTest6(void *src){ +static void badTest6(void *src){ wchar_t dst[5]; mbstowcs(dst, (char*)src,260); // BAD printf("%s\n", dst); diff --git a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-125/semmle/tests/test3.cpp b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-125/semmle/tests/test3.cpp index e37052e839b1..662cdfc7be81 100644 --- a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-125/semmle/tests/test3.cpp +++ b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-125/semmle/tests/test3.cpp @@ -9,14 +9,14 @@ void goodTest1(unsigned char *src){ unsigned char dst[50]; _mbsnbcpy(dst,src,sizeof(dst)); // GOOD } -size_t badTest1(unsigned char *src){ +static size_t badTest1(unsigned char *src){ int cb = 0; unsigned char dst[50]; while( cb < sizeof(dst) ) dst[cb++]=*src++; // BAD return _mbclen(dst); } -void goodTest2(unsigned char *src){ +static void goodTest2(unsigned char *src){ int cb = 0; unsigned char dst[50]; @@ -27,7 +27,7 @@ void goodTest2(unsigned char *src){ src=_mbsinc(src); } } -void badTest2(unsigned char *src){ +static void badTest2(unsigned char *src){ int cb = 0; unsigned char dst[50]; @@ -38,11 +38,11 @@ void badTest2(unsigned char *src){ src=_mbsinc(src); } } -void goodTest3(){ +static void goodTest3(){ wchar_t name[50]; name[sizeof(name) / sizeof(*name) - 1] = L'\0'; // GOOD } -void badTest3(){ +static void badTest3(){ wchar_t name[50]; name[sizeof(name) - 1] = L'\0'; // BAD } diff --git a/cpp/ql/test/library-tests/dataflow/dataflow-tests/flowOut.cpp b/cpp/ql/test/library-tests/dataflow/dataflow-tests/flowOut.cpp index d6a06361524e..a60a20f12e3a 100644 --- a/cpp/ql/test/library-tests/dataflow/dataflow-tests/flowOut.cpp +++ b/cpp/ql/test/library-tests/dataflow/dataflow-tests/flowOut.cpp @@ -78,7 +78,7 @@ int* deref(int** p) { // $ ast-def=p ir-def=*p ir-def=**p return q; } -void test1() { +void flowout_test1() { int x = 0; int* p = &x; deref(&p)[0] = source(); @@ -95,7 +95,7 @@ void addtaint2(int** p) { // $ ast-def=p ir-def=*p ir-def=**p addtaint1(q); } -void test2() { +void flowout_test2() { int x = 0; int* p = &x; addtaint2(&p); diff --git a/cpp/ql/test/library-tests/dataflow/dataflow-tests/self-Iterator.cpp b/cpp/ql/test/library-tests/dataflow/dataflow-tests/self-Iterator.cpp index cac7f222c302..3303a250ccc6 100644 --- a/cpp/ql/test/library-tests/dataflow/dataflow-tests/self-Iterator.cpp +++ b/cpp/ql/test/library-tests/dataflow/dataflow-tests/self-Iterator.cpp @@ -15,7 +15,7 @@ template<> struct std::iterator_traits }; -int test() { +int iterator_test() { unsigned long x = source(); sink(x); // $ ast ir } \ No newline at end of file diff --git a/cpp/ql/test/library-tests/dataflow/dataflow-tests/true_upon_entry.cpp b/cpp/ql/test/library-tests/dataflow/dataflow-tests/true_upon_entry.cpp index 923a7c0513d7..cb97ce325d20 100644 --- a/cpp/ql/test/library-tests/dataflow/dataflow-tests/true_upon_entry.cpp +++ b/cpp/ql/test/library-tests/dataflow/dataflow-tests/true_upon_entry.cpp @@ -5,7 +5,7 @@ int source(); void sink(...); bool random(); -void test1() { +void on_entry_test1() { int x = source(); for (int i = 0; i < 10; i++) { x = 0; @@ -13,7 +13,7 @@ void test1() { sink(x); // $ SPURIOUS: ir } -void test2(int iterations) { +void on_entry_test2(int iterations) { int x = source(); for (int i = 0; i < iterations; i++) { x = 0; @@ -21,7 +21,7 @@ void test2(int iterations) { sink(x); // $ ast,ir } -void test3() { +void on_entry_test3() { int x = 0; for (int i = 0; i < 10; i++) { x = source(); @@ -29,7 +29,7 @@ void test3() { sink(x); // $ ast,ir } -void test4() { +void on_entry_test4() { int x = source(); for (int i = 0; i < 10; i++) { if (random()) @@ -39,7 +39,7 @@ void test4() { sink(x); // $ ast,ir } -void test5() { +void on_entry_test5() { int x = source(); for (int i = 0; i < 10; i++) { if (random()) @@ -49,7 +49,7 @@ void test5() { sink(x); // $ ast,ir } -void test6() { +void on_entry_test6() { int y; int x = source(); for (int i = 0; i < 10 && (y = 1); i++) { @@ -57,7 +57,7 @@ void test6() { sink(x); // $ ast,ir } -void test7() { +void on_entry_test7() { int y; int x = source(); for (int i = 0; i < 10 && (y = 1); i++) { @@ -66,7 +66,7 @@ void test7() { sink(x); // $ SPURIOUS: ir } -void test8() { +void on_entry_test8() { int x = source(); // It appears to the analysis that the condition can exit after `i < 10` // without having assigned to `x`. That is an effect of how the @@ -78,7 +78,7 @@ void test8() { sink(x); // $ SPURIOUS: ast,ir } -void test9() { +void on_entry_test9() { int y; int x = source(); for (int i = 0; (y = 1) && i < 10; i++) { @@ -86,14 +86,14 @@ void test9() { sink(x); // $ ast,ir } -void test10() { +void on_entry_test10() { int x = source(); for (int i = 0; (x = 1) && i < 10; i++) { } sink(x); // no flow } -void test10(int b, int d) { +void on_entry_test10(int b, int d) { int i = 0; int x = source(); if (b) 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 80541c16115f..7de6914e8aac 100644 --- a/cpp/ql/test/library-tests/dataflow/taint-tests/localTaint.expected +++ b/cpp/ql/test/library-tests/dataflow/taint-tests/localTaint.expected @@ -6584,6 +6584,16 @@ WARNING: module 'TaintTracking' has been deprecated and may be removed in future | taint.cpp:767:21:767:24 | ref arg path | taint.cpp:768:8:768:11 | path | | | taint.cpp:768:8:768:11 | path | taint.cpp:768:7:768:11 | * ... | | | taint.cpp:778:37:778:42 | call to source | taint.cpp:779:7:779:9 | obj | | +| taint.cpp:785:23:785:28 | source | taint.cpp:785:23:785:28 | source | | +| taint.cpp:785:23:785:28 | source | taint.cpp:786:18:786:23 | source | | +| taint.cpp:785:23:785:28 | source | taint.cpp:790:15:790:20 | source | | +| taint.cpp:786:12:786:16 | call to fopen | taint.cpp:787:7:787:7 | f | | +| taint.cpp:786:18:786:23 | source | taint.cpp:786:12:786:16 | call to fopen | TAINT | +| taint.cpp:789:8:789:9 | f2 | taint.cpp:790:11:790:12 | f2 | | +| taint.cpp:789:8:789:9 | f2 | taint.cpp:791:7:791:8 | f2 | | +| taint.cpp:790:10:790:12 | ref arg & ... | taint.cpp:790:11:790:12 | f2 [inner post update] | | +| taint.cpp:790:10:790:12 | ref arg & ... | taint.cpp:791:7:791:8 | f2 | | +| taint.cpp:790:11:790:12 | f2 | taint.cpp:790:10:790:12 | & ... | | | 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 220265a3bb1a..a5f63b3d2e61 100644 --- a/cpp/ql/test/library-tests/dataflow/taint-tests/taint.cpp +++ b/cpp/ql/test/library-tests/dataflow/taint-tests/taint.cpp @@ -777,4 +777,16 @@ TaintInheritingContentObject source(bool); void test_TaintInheritingContent() { TaintInheritingContentObject obj = source(true); sink(obj.flowFromObject); // $ ir MISSING: ast +} + +FILE* fopen(const char*, const char*); +int fopen_s(FILE** pFile, const char *filename, const char *mode); + +void fopen_test(char* source) { + FILE* f = fopen(source, "r"); + sink(f); // $ ast,ir + + FILE* f2; + fopen_s(&f2, source, "r"); + sink(f2); // $ ast,ir } \ No newline at end of file diff --git a/cpp/ql/test/library-tests/files/Files.expected b/cpp/ql/test/library-tests/files/Files.expected index 68187793433b..13f3a6b2da17 100644 --- a/cpp/ql/test/library-tests/files/Files.expected +++ b/cpp/ql/test/library-tests/files/Files.expected @@ -1,4 +1,4 @@ -| c.c | library-tests/files/c.c | CFile, MetricFile | C | | | -| files1.cpp | library-tests/files/files1.cpp | CppFile, MetricFile | C++ | swap | t | -| files1.h | library-tests/files/files1.h | HeaderFile, MetricFile | | swap | | -| files2.cpp | library-tests/files/files2.cpp | CppFile, MetricFile | C++ | g | x, y | +| c.c | c.c | CFile, MetricFile | C | | | +| files1.cpp | files1.cpp | CppFile, MetricFile | C++ | swap | t | +| files1.h | files1.h | HeaderFile, MetricFile | | swap | | +| files2.cpp | files2.cpp | CppFile, MetricFile | C++ | g | x, y | diff --git a/cpp/ql/test/library-tests/ir/ir/PrintAST.expected b/cpp/ql/test/library-tests/ir/ir/PrintAST.expected index 986ce6dd158a..510d13fdfa2b 100644 --- a/cpp/ql/test/library-tests/ir/ir/PrintAST.expected +++ b/cpp/ql/test/library-tests/ir/ir/PrintAST.expected @@ -9055,6 +9055,8 @@ ir.cpp: # 733| Value = [Literal] 7 # 733| ValueCategory = prvalue # 735| getChild(1): [Handler] +# 735| getParameter(): [Parameter] s +# 735| Type = [PointerType] const char * # 735| getBlock(): [CatchBlock] { ... } # 736| getStmt(0): [ExprStmt] ExprStmt # 736| getExpr(): [ThrowExpr] throw ... @@ -9067,6 +9069,8 @@ ir.cpp: # 736| Type = [PointerType] const char * # 736| ValueCategory = prvalue(load) # 738| getChild(2): [Handler] +# 738| getParameter(): [Parameter] e +# 738| Type = [LValueReferenceType] const String & # 738| getBlock(): [CatchBlock] { ... } # 740| getChild(3): [Handler] # 740| getBlock(): [CatchAnyBlock] { ... } @@ -12852,6 +12856,8 @@ ir.cpp: # 1200| Value = [Literal] 7 # 1200| ValueCategory = prvalue # 1202| getChild(1): [Handler] +# 1202| getParameter(): [Parameter] s +# 1202| Type = [PointerType] const char * # 1202| getBlock(): [CatchBlock] { ... } # 1203| getStmt(0): [ExprStmt] ExprStmt # 1203| getExpr(): [ThrowExpr] throw ... @@ -12864,6 +12870,8 @@ ir.cpp: # 1203| Type = [PointerType] const char * # 1203| ValueCategory = prvalue(load) # 1205| getChild(2): [Handler] +# 1205| getParameter(): [Parameter] e +# 1205| Type = [LValueReferenceType] const String & # 1205| getBlock(): [CatchBlock] { ... } # 1207| getStmt(1): [ReturnStmt] return ... # 1211| [TopLevelFunction] void VectorTypes(int) @@ -20586,6 +20594,8 @@ ir.cpp: # 2281| Type = [Struct] String # 2281| ValueCategory = lvalue # 2282| getChild(1): [Handler] +# 2282| getParameter(): [Parameter] s +# 2282| Type = [PointerType] const char * # 2282| getBlock(): [CatchBlock] { ... } # 2283| getStmt(0): [ExprStmt] ExprStmt # 2283| getExpr(): [ThrowExpr] throw ... @@ -20598,6 +20608,8 @@ ir.cpp: # 2283| Type = [PointerType] const char * # 2283| ValueCategory = prvalue(load) # 2285| getChild(2): [Handler] +# 2285| getParameter(): [Parameter] e +# 2285| Type = [LValueReferenceType] const String & # 2285| getBlock(): [CatchBlock] { ... } # 2287| getChild(3): [Handler] # 2287| getBlock(): [CatchAnyBlock] { ... } @@ -22845,6 +22857,8 @@ ir.cpp: # 2537| Value = [Literal] 42 # 2537| ValueCategory = prvalue # 2539| getChild(1): [Handler] +# 2539| getParameter(): [Parameter] (unnamed parameter 0) +# 2539| Type = [PlainCharType] char # 2539| getBlock(): [CatchBlock] { ... } # 2541| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor # 2541| Type = [VoidType] void @@ -23564,6 +23578,26 @@ ir.cpp: # 2686| Value = [CStyleCast] 0 # 2686| ValueCategory = prvalue # 2687| getStmt(1): [ReturnStmt] return ... +# 2691| [TopLevelFunction] int concepts::requires_use() +# 2691| : +# 2691| getEntryPoint(): [BlockStmt] { ... } +# 2692| getStmt(0): [DeclStmt] declaration +# 2692| getDeclarationEntry(0): [VariableDeclarationEntry] definition of y +# 2692| Type = [IntType] int +# 2692| getVariable().getInitializer(): [Initializer] initializer for y +#-----| getExpr(): [RequiresExpr] requires ... +#-----| Type = [BoolType] bool +#-----| Value = [RequiresExpr] 1 +#-----| ValueCategory = prvalue +#-----| getExpr().getFullyConverted(): [CStyleCast] (int)... +#-----| Conversion = [IntegralConversion] integral conversion +#-----| Type = [IntType] int +#-----| Value = [CStyleCast] 1 +#-----| ValueCategory = prvalue +# 2693| getStmt(1): [ReturnStmt] return ... +# 2693| getExpr(): [VariableAccess] y +# 2693| Type = [IntType] int +# 2693| ValueCategory = prvalue(load) many-defs-per-use.cpp: # 34| [TopLevelFunction] void many_defs_per_use() # 34| : 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 57c806278672..9fcaf04382d3 100644 --- a/cpp/ql/test/library-tests/ir/ir/aliased_ir.expected +++ b/cpp/ql/test/library-tests/ir/ir/aliased_ir.expected @@ -19099,6 +19099,24 @@ ir.cpp: # 2684| Block 8 # 2684| v2684_14(void) = Unreached : +# 2691| int concepts::requires_use() +# 2691| Block 0 +# 2691| v2691_1(void) = EnterFunction : +# 2691| m2691_2(unknown) = AliasedDefinition : +# 2691| m2691_3(unknown) = InitializeNonLocal : +# 2691| m2691_4(unknown) = Chi : total:m2691_2, partial:m2691_3 +# 2692| r2692_1(glval) = VariableAddress[y] : +#-----| r0_1(int) = Constant[1] : +#-----| m0_2(int) = Store[y] : &:r2692_1, r0_1 +# 2693| r2693_1(glval) = VariableAddress[#return] : +# 2693| r2693_2(glval) = VariableAddress[y] : +# 2693| r2693_3(int) = Load[y] : &:r2693_2, m0_2 +# 2693| m2693_4(int) = Store[#return] : &:r2693_1, r2693_3 +# 2691| r2691_5(glval) = VariableAddress[#return] : +# 2691| v2691_6(void) = ReturnValue : &:r2691_5, m2693_4 +# 2691| v2691_7(void) = AliasedUse : m2691_3 +# 2691| v2691_8(void) = ExitFunction : + many-defs-per-use.cpp: # 34| void many_defs_per_use() # 34| Block 0 diff --git a/cpp/ql/test/library-tests/ir/ir/ir.cpp b/cpp/ql/test/library-tests/ir/ir/ir.cpp index f8e163685373..105cdbf3ae65 100644 --- a/cpp/ql/test/library-tests/ir/ir/ir.cpp +++ b/cpp/ql/test/library-tests/ir/ir/ir.cpp @@ -2686,4 +2686,13 @@ void test(bool b) twice_call_use(b ? "" : ""); } +namespace concepts { + +int requires_use() { + int y = requires { sizeof(int) > 0; }; + return y; +} + +} + // semmle-extractor-options: -std=c++20 --clang 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 a2d605daef17..ff4f47f3c22f 100644 --- a/cpp/ql/test/library-tests/ir/ir/raw_ir.expected +++ b/cpp/ql/test/library-tests/ir/ir/raw_ir.expected @@ -17422,6 +17422,23 @@ ir.cpp: # 2684| v2684_7(void) = AliasedUse : ~m? # 2684| v2684_8(void) = ExitFunction : +# 2691| int concepts::requires_use() +# 2691| Block 0 +# 2691| v2691_1(void) = EnterFunction : +# 2691| mu2691_2(unknown) = AliasedDefinition : +# 2691| mu2691_3(unknown) = InitializeNonLocal : +# 2692| r2692_1(glval) = VariableAddress[y] : +#-----| r0_1(int) = Constant[1] : +#-----| mu0_2(int) = Store[y] : &:r2692_1, r0_1 +# 2693| r2693_1(glval) = VariableAddress[#return] : +# 2693| r2693_2(glval) = VariableAddress[y] : +# 2693| r2693_3(int) = Load[y] : &:r2693_2, ~m? +# 2693| mu2693_4(int) = Store[#return] : &:r2693_1, r2693_3 +# 2691| r2691_4(glval) = VariableAddress[#return] : +# 2691| v2691_5(void) = ReturnValue : &:r2691_4, ~m? +# 2691| v2691_6(void) = AliasedUse : ~m? +# 2691| v2691_7(void) = ExitFunction : + many-defs-per-use.cpp: # 34| void many_defs_per_use() # 34| Block 0 diff --git a/cpp/ql/test/library-tests/macros/inmacroexpansion/inmacroexpansion.expected b/cpp/ql/test/library-tests/macros/inmacroexpansion/inmacroexpansion.expected index 7ffe4cb03e9f..f8eff955d47c 100644 --- a/cpp/ql/test/library-tests/macros/inmacroexpansion/inmacroexpansion.expected +++ b/cpp/ql/test/library-tests/macros/inmacroexpansion/inmacroexpansion.expected @@ -2,25 +2,168 @@ | file://:0:0:0:0 | (unnamed parameter 0) | false | | file://:0:0:0:0 | __super | false | | file://:0:0:0:0 | __va_list_tag | false | +| file://:0:0:0:0 | decltype([...](...){...}) | false | | file://:0:0:0:0 | operator= | false | | file://:0:0:0:0 | operator= | false | | test.cpp:0:0:0:0 | test.cpp | false | -| test.cpp:2:1:2:61 | #define FOO class S{int i; void f(void) { int j; return; } }; | false | +| test.cpp:2:1:2:68 | #define CLASS_DECL class S{int i; void f(void) { int j; return; } }; | false | | test.cpp:4:1:4:1 | S | false | | test.cpp:4:1:4:1 | declaration of S | false | | test.cpp:4:1:4:1 | declaration of operator= | false | | test.cpp:4:1:4:1 | declaration of operator= | false | | test.cpp:4:1:4:1 | operator= | false | | test.cpp:4:1:4:1 | operator= | false | -| test.cpp:4:1:4:3 | FOO | false | -| test.cpp:4:1:4:3 | S | false | -| test.cpp:4:1:4:3 | declaration | true | -| test.cpp:4:1:4:3 | definition of S | true | -| test.cpp:4:1:4:3 | definition of f | true | -| test.cpp:4:1:4:3 | definition of i | true | -| test.cpp:4:1:4:3 | definition of j | true | -| test.cpp:4:1:4:3 | f | false | -| test.cpp:4:1:4:3 | i | false | -| test.cpp:4:1:4:3 | j | true | -| test.cpp:4:1:4:3 | return ... | true | -| test.cpp:4:1:4:3 | { ... } | true | +| test.cpp:4:1:4:10 | CLASS_DECL | false | +| test.cpp:4:1:4:10 | S | false | +| test.cpp:4:1:4:10 | declaration | true | +| test.cpp:4:1:4:10 | definition of S | true | +| test.cpp:4:1:4:10 | definition of f | true | +| test.cpp:4:1:4:10 | definition of i | true | +| test.cpp:4:1:4:10 | definition of j | true | +| test.cpp:4:1:4:10 | f | false | +| test.cpp:4:1:4:10 | i | false | +| test.cpp:4:1:4:10 | j | true | +| test.cpp:4:1:4:10 | return ... | true | +| test.cpp:4:1:4:10 | { ... } | true | +| test.cpp:6:1:6:42 | #define FUNCTION_DECL void f1() { int k; } | false | +| test.cpp:8:1:8:13 | FUNCTION_DECL | false | +| test.cpp:8:1:8:13 | declaration | true | +| test.cpp:8:1:8:13 | definition of f1 | true | +| test.cpp:8:1:8:13 | definition of k | true | +| test.cpp:8:1:8:13 | f1 | false | +| test.cpp:8:1:8:13 | k | true | +| test.cpp:8:1:8:13 | return ... | true | +| test.cpp:8:1:8:13 | { ... } | true | +| test.cpp:10:1:10:33 | #define VARIABLE_DECL int v1 = 1; | false | +| test.cpp:12:1:12:13 | 1 | true | +| test.cpp:12:1:12:13 | VARIABLE_DECL | false | +| test.cpp:12:1:12:13 | definition of v1 | true | +| test.cpp:12:1:12:13 | initializer for v1 | true | +| test.cpp:12:1:12:13 | v1 | true | +| test.cpp:14:1:14:35 | #define TYPE_DECL_1 typedef int t1; | false | +| test.cpp:16:1:16:11 | TYPE_DECL_1 | false | +| test.cpp:16:1:16:11 | declaration of t1 | true | +| test.cpp:16:1:16:11 | t1 | false | +| test.cpp:18:1:18:35 | #define TYPE_DECL_2 using t2 = int; | false | +| test.cpp:20:1:20:11 | TYPE_DECL_2 | false | +| test.cpp:20:1:20:11 | declaration of t2 | true | +| test.cpp:20:1:20:11 | t2 | false | +| test.cpp:22:1:22:47 | #define NAMESPACE_DECL namespace ns { int v2; } | false | +| test.cpp:24:1:24:14 | NAMESPACE_DECL | false | +| test.cpp:24:1:24:14 | definition of v2 | true | +| test.cpp:24:1:24:14 | ns | false | +| test.cpp:24:1:24:14 | ns | false | +| test.cpp:24:1:24:14 | v2 | true | +| test.cpp:26:1:26:43 | #define USING_NAMESPACE using namespace ns; | false | +| test.cpp:28:1:28:34 | #define ENUM_CONSTANT enum_element | false | +| test.cpp:30:12:30:21 | definition of enum_class | false | +| test.cpp:30:12:30:21 | enum_class | false | +| test.cpp:30:25:30:37 | ENUM_CONSTANT | false | +| test.cpp:30:25:30:37 | enum_element | false | +| test.cpp:32:1:32:41 | #define USING_ENUM using enum enum_class; | false | +| test.cpp:34:1:34:10 | USING_ENUM | false | +| test.cpp:34:1:34:10 | using enum enum_class | false | +| test.cpp:36:1:36:48 | #define STATIC_ASSERT static_assert(1 == 1, ""); | false | +| test.cpp:38:1:38:13 | 1 | true | +| test.cpp:38:1:38:13 | 1 | true | +| test.cpp:38:1:38:13 | ... == ... | true | +| test.cpp:38:1:38:13 | STATIC_ASSERT | false | +| test.cpp:38:1:38:13 | static_assert(..., "") | false | +| test.cpp:40:1:40:42 | #define ATTRIBUTE [[nodiscard("reason1")]] | false | +| test.cpp:42:1:42:9 | ATTRIBUTE | false | +| test.cpp:42:1:42:9 | nodiscard | false | +| test.cpp:42:1:42:9 | reason1 | false | +| test.cpp:42:1:42:9 | reason1 | true | +| test.cpp:43:5:43:6 | declaration of f2 | false | +| test.cpp:43:5:43:6 | f2 | false | +| test.cpp:45:1:45:31 | #define ATTRIBUTE_ARG "reason2" | false | +| test.cpp:47:3:47:11 | nodiscard | false | +| test.cpp:47:13:47:25 | ATTRIBUTE_ARG | false | +| test.cpp:47:13:47:25 | reason2 | false | +| test.cpp:47:13:47:25 | reason2 | true | +| test.cpp:48:5:48:6 | declaration of f3 | false | +| test.cpp:48:5:48:6 | f3 | false | +| test.cpp:50:1:50:16 | #define TYPE int | false | +| test.cpp:52:1:52:4 | TYPE | false | +| test.cpp:52:6:52:7 | definition of v3 | true | +| test.cpp:52:6:52:7 | v3 | true | +| test.cpp:52:11:52:11 | 1 | false | +| test.cpp:52:11:52:11 | initializer for v3 | false | +| test.cpp:54:1:54:29 | #define DERIVATION : public S | false | +| test.cpp:56:7:56:7 | T | false | +| test.cpp:56:7:56:7 | T | false | +| test.cpp:56:7:56:7 | declaration of T | false | +| test.cpp:56:7:56:7 | declaration of operator= | false | +| test.cpp:56:7:56:7 | declaration of operator= | false | +| test.cpp:56:7:56:7 | definition of T | false | +| test.cpp:56:7:56:7 | operator= | false | +| test.cpp:56:7:56:7 | operator= | false | +| test.cpp:56:9:56:18 | DERIVATION | false | +| test.cpp:56:9:56:18 | derivation | false | +| test.cpp:58:1:58:31 | #define FRIEND friend int f3(); | false | +| test.cpp:60:7:60:7 | U | false | +| test.cpp:60:7:60:7 | declaration of operator= | false | +| test.cpp:60:7:60:7 | declaration of operator= | false | +| test.cpp:60:7:60:7 | definition of U | false | +| test.cpp:60:7:60:7 | operator= | false | +| test.cpp:60:7:60:7 | operator= | false | +| test.cpp:61:3:61:8 | FRIEND | false | +| test.cpp:61:3:61:8 | U's friend | false | +| test.cpp:64:1:64:24 | #define NAME_QUAL_1 ns:: | false | +| test.cpp:66:1:66:22 | #define NAME_QUAL_2 ns | false | +| test.cpp:68:1:68:19 | #define LOCAL_VAR m | false | +| test.cpp:70:6:70:7 | definition of f4 | false | +| test.cpp:70:6:70:7 | f4 | false | +| test.cpp:70:11:76:1 | { ... } | false | +| test.cpp:71:5:71:8 | ns:: | false | +| test.cpp:71:5:71:15 | NAME_QUAL_1 | false | +| test.cpp:71:5:71:18 | v2 | false | +| test.cpp:71:5:71:19 | ExprStmt | false | +| test.cpp:72:5:72:8 | ns:: | false | +| test.cpp:72:5:72:15 | NAME_QUAL_2 | false | +| test.cpp:72:5:72:21 | v2 | false | +| test.cpp:72:5:72:22 | ExprStmt | false | +| test.cpp:73:5:73:23 | declaration | false | +| test.cpp:73:9:73:17 | LOCAL_VAR | false | +| test.cpp:73:9:73:17 | definition of m | true | +| test.cpp:73:9:73:17 | m | true | +| test.cpp:73:20:73:22 | 42 | false | +| test.cpp:73:20:73:22 | initializer for m | false | +| test.cpp:74:5:74:41 | declaration | false | +| test.cpp:74:10:74:10 | definition of l | false | +| test.cpp:74:10:74:10 | l | false | +| test.cpp:74:13:74:40 | [...](...){...} | false | +| test.cpp:74:13:74:40 | initializer for l | false | +| test.cpp:74:13:74:40 | {...} | false | +| test.cpp:74:14:74:14 | (unnamed constructor) | false | +| test.cpp:74:14:74:14 | (unnamed constructor) | false | +| test.cpp:74:14:74:14 | (unnamed constructor) | false | +| test.cpp:74:14:74:14 | declaration of (unnamed constructor) | false | +| test.cpp:74:14:74:14 | declaration of (unnamed constructor) | false | +| test.cpp:74:14:74:14 | definition of (unnamed constructor) | false | +| test.cpp:74:14:74:14 | definition of operator= | false | +| test.cpp:74:14:74:14 | operator= | false | +| test.cpp:74:15:74:15 | definition of m | false | +| test.cpp:74:15:74:15 | m | false | +| test.cpp:74:15:74:15 | m | false | +| test.cpp:74:15:74:23 | LOCAL_VAR | false | +| test.cpp:74:15:74:23 | m | true | +| test.cpp:74:25:74:25 | definition of operator() | false | +| test.cpp:74:25:74:25 | operator() | false | +| test.cpp:74:28:74:40 | { ... } | false | +| test.cpp:74:30:74:38 | return ... | false | +| test.cpp:74:37:74:37 | (int)... | false | +| test.cpp:75:5:75:5 | (const lambda [] type at line 74, col. 14)... | false | +| test.cpp:75:5:75:5 | l | false | +| test.cpp:75:5:75:8 | ExprStmt | false | +| test.cpp:75:6:75:6 | call to operator() | false | +| test.cpp:76:1:76:1 | return ... | false | +| test.cpp:78:1:78:15 | #define ID(x) x | false | +| test.cpp:79:1:79:23 | #define NESTED(x) ID(x) | false | +| test.cpp:80:5:80:6 | definition of v4 | false | +| test.cpp:80:5:80:6 | v4 | false | +| test.cpp:80:10:80:18 | ID(x) | false | +| test.cpp:80:10:80:18 | NESTED(x) | false | +| test.cpp:80:17:80:17 | 1 | true | +| test.cpp:80:17:80:17 | initializer for v4 | true | +| test.cpp:82:1:82:39 | // semmle-extractor-options: -std=c++20 | false | diff --git a/cpp/ql/test/library-tests/macros/inmacroexpansion/test.cpp b/cpp/ql/test/library-tests/macros/inmacroexpansion/test.cpp index 7cc1d581a0a9..22e55b17f5a3 100644 --- a/cpp/ql/test/library-tests/macros/inmacroexpansion/test.cpp +++ b/cpp/ql/test/library-tests/macros/inmacroexpansion/test.cpp @@ -1,5 +1,82 @@ -#define FOO class S{int i; void f(void) { int j; return; } }; +#define CLASS_DECL class S{int i; void f(void) { int j; return; } }; -FOO +CLASS_DECL +#define FUNCTION_DECL void f1() { int k; } + +FUNCTION_DECL + +#define VARIABLE_DECL int v1 = 1; + +VARIABLE_DECL + +#define TYPE_DECL_1 typedef int t1; + +TYPE_DECL_1 + +#define TYPE_DECL_2 using t2 = int; + +TYPE_DECL_2 + +#define NAMESPACE_DECL namespace ns { int v2; } + +NAMESPACE_DECL + +#define USING_NAMESPACE using namespace ns; + +#define ENUM_CONSTANT enum_element + +enum class enum_class { ENUM_CONSTANT }; + +#define USING_ENUM using enum enum_class; + +USING_ENUM + +#define STATIC_ASSERT static_assert(1 == 1, ""); + +STATIC_ASSERT + +#define ATTRIBUTE [[nodiscard("reason1")]] + +ATTRIBUTE +int f2(); + +#define ATTRIBUTE_ARG "reason2" + +[[nodiscard(ATTRIBUTE_ARG)]] +int f3(); + +#define TYPE int + +TYPE v3 = 1; + +#define DERIVATION : public S + +class T DERIVATION {}; + +#define FRIEND friend int f3(); + +class U { + FRIEND +}; + +#define NAME_QUAL_1 ns:: + +#define NAME_QUAL_2 ns + +#define LOCAL_VAR m + +void f4() { + NAME_QUAL_1 v2; + NAME_QUAL_2 :: v2; + int LOCAL_VAR = 42; + auto l = [LOCAL_VAR]() { return m; }; + l(); +} + +#define ID(x) x +#define NESTED(x) ID(x) +int v4 = NESTED(1); + +// semmle-extractor-options: -std=c++20 diff --git a/cpp/ql/test/query-tests/Diagnostics/Info.expected b/cpp/ql/test/query-tests/Diagnostics/Info.expected index 55e3310fd19b..a32541303609 100644 --- a/cpp/ql/test/query-tests/Diagnostics/Info.expected +++ b/cpp/ql/test/query-tests/Diagnostics/Info.expected @@ -1,6 +1,6 @@ -| containserror.cpp:0:0:0:0 | containserror.cpp | query-tests/Diagnostics/containserror.cpp | fromSource, normalTermination | -| containswarning.cpp:0:0:0:0 | containswarning.cpp | query-tests/Diagnostics/containswarning.cpp | fromSource, normalTermination | -| doesnotcompile.cpp:0:0:0:0 | doesnotcompile.cpp | query-tests/Diagnostics/doesnotcompile.cpp | ExtractionProblem (severity 1), fromSource, normalTermination | +| containserror.cpp:0:0:0:0 | containserror.cpp | containserror.cpp | fromSource, normalTermination | +| containswarning.cpp:0:0:0:0 | containswarning.cpp | containswarning.cpp | fromSource, normalTermination | +| doesnotcompile.cpp:0:0:0:0 | doesnotcompile.cpp | doesnotcompile.cpp | ExtractionProblem (severity 1), fromSource, normalTermination | | file://:0:0:0:0 | | | | -| header.h:0:0:0:0 | header.h | query-tests/Diagnostics/header.h | fromSource | -| successful.cpp:0:0:0:0 | successful.cpp | query-tests/Diagnostics/successful.cpp | fromSource, normalTermination | +| header.h:0:0:0:0 | header.h | header.h | fromSource | +| successful.cpp:0:0:0:0 | successful.cpp | successful.cpp | fromSource, normalTermination | diff --git a/cpp/ql/test/query-tests/Documentation/DocumentApi/DocumentApi.expected b/cpp/ql/test/query-tests/Documentation/DocumentApi/DocumentApi.expected index b19d88acdc28..62d47bc8db0b 100644 --- a/cpp/ql/test/query-tests/Documentation/DocumentApi/DocumentApi.expected +++ b/cpp/ql/test/query-tests/Documentation/DocumentApi/DocumentApi.expected @@ -1,16 +1,16 @@ -| comment_prototypes.c:29:6:29:11 | proto6 | Functions called from other files should be documented (called from $@). | comment_prototypes_caller1.c:9:5:9:10 | call to proto6 | query-tests/Documentation/DocumentApi/comment_prototypes_caller1.c | -| comment_prototypes.c:29:6:29:11 | proto6 | Functions called from other files should be documented (called from $@). | comment_prototypes_caller2.c:9:5:9:10 | call to proto6 | query-tests/Documentation/DocumentApi/comment_prototypes_caller2.c | -| comment_prototypes.c:34:6:34:11 | proto7 | Functions called from other files should be documented (called from $@). | comment_prototypes_caller1.c:10:5:10:10 | call to proto7 | query-tests/Documentation/DocumentApi/comment_prototypes_caller1.c | -| comment_prototypes.c:34:6:34:11 | proto7 | Functions called from other files should be documented (called from $@). | comment_prototypes_caller2.c:10:5:10:10 | call to proto7 | query-tests/Documentation/DocumentApi/comment_prototypes_caller2.c | -| comment_prototypes.c:45:6:45:11 | proto9 | Functions called from other files should be documented (called from $@). | comment_prototypes_caller1.c:12:5:12:10 | call to proto9 | query-tests/Documentation/DocumentApi/comment_prototypes_caller1.c | -| comment_prototypes.c:45:6:45:11 | proto9 | Functions called from other files should be documented (called from $@). | comment_prototypes_caller2.c:12:5:12:10 | call to proto9 | query-tests/Documentation/DocumentApi/comment_prototypes_caller2.c | -| comment_prototypes.c:50:6:50:12 | proto10 | Functions called from other files should be documented (called from $@). | comment_prototypes_caller1.c:13:5:13:11 | call to proto10 | query-tests/Documentation/DocumentApi/comment_prototypes_caller1.c | -| comment_prototypes.c:50:6:50:12 | proto10 | Functions called from other files should be documented (called from $@). | comment_prototypes_caller2.c:13:5:13:11 | call to proto10 | query-tests/Documentation/DocumentApi/comment_prototypes_caller2.c | -| comment_prototypes.c:55:6:55:12 | proto11 | Functions called from other files should be documented (called from $@). | comment_prototypes_caller1.c:14:5:14:11 | call to proto11 | query-tests/Documentation/DocumentApi/comment_prototypes_caller1.c | -| comment_prototypes.c:55:6:55:12 | proto11 | Functions called from other files should be documented (called from $@). | comment_prototypes_caller2.c:14:5:14:11 | call to proto11 | query-tests/Documentation/DocumentApi/comment_prototypes_caller2.c | -| comment_prototypes.c:66:6:66:12 | proto13 | Functions called from other files should be documented (called from $@). | comment_prototypes_caller1.c:16:5:16:11 | call to proto13 | query-tests/Documentation/DocumentApi/comment_prototypes_caller1.c | -| comment_prototypes.c:66:6:66:12 | proto13 | Functions called from other files should be documented (called from $@). | comment_prototypes_caller2.c:16:5:16:11 | call to proto13 | query-tests/Documentation/DocumentApi/comment_prototypes_caller2.c | -| definition.c:2:6:2:7 | f1 | Functions called from other files should be documented (called from $@). | user1.c:9:5:9:6 | call to f1 | query-tests/Documentation/DocumentApi/user1.c | -| definition.c:2:6:2:7 | f1 | Functions called from other files should be documented (called from $@). | user2.c:7:5:7:6 | call to f1 | query-tests/Documentation/DocumentApi/user2.c | -| definition.c:32:6:32:7 | f6 | Functions called from other files should be documented (called from $@). | user1.c:14:5:14:6 | call to f6 | query-tests/Documentation/DocumentApi/user1.c | -| definition.c:32:6:32:7 | f6 | Functions called from other files should be documented (called from $@). | user2.c:10:5:10:6 | call to f6 | query-tests/Documentation/DocumentApi/user2.c | +| comment_prototypes.c:29:6:29:11 | proto6 | Functions called from other files should be documented (called from $@). | comment_prototypes_caller1.c:9:5:9:10 | call to proto6 | comment_prototypes_caller1.c | +| comment_prototypes.c:29:6:29:11 | proto6 | Functions called from other files should be documented (called from $@). | comment_prototypes_caller2.c:9:5:9:10 | call to proto6 | comment_prototypes_caller2.c | +| comment_prototypes.c:34:6:34:11 | proto7 | Functions called from other files should be documented (called from $@). | comment_prototypes_caller1.c:10:5:10:10 | call to proto7 | comment_prototypes_caller1.c | +| comment_prototypes.c:34:6:34:11 | proto7 | Functions called from other files should be documented (called from $@). | comment_prototypes_caller2.c:10:5:10:10 | call to proto7 | comment_prototypes_caller2.c | +| comment_prototypes.c:45:6:45:11 | proto9 | Functions called from other files should be documented (called from $@). | comment_prototypes_caller1.c:12:5:12:10 | call to proto9 | comment_prototypes_caller1.c | +| comment_prototypes.c:45:6:45:11 | proto9 | Functions called from other files should be documented (called from $@). | comment_prototypes_caller2.c:12:5:12:10 | call to proto9 | comment_prototypes_caller2.c | +| comment_prototypes.c:50:6:50:12 | proto10 | Functions called from other files should be documented (called from $@). | comment_prototypes_caller1.c:13:5:13:11 | call to proto10 | comment_prototypes_caller1.c | +| comment_prototypes.c:50:6:50:12 | proto10 | Functions called from other files should be documented (called from $@). | comment_prototypes_caller2.c:13:5:13:11 | call to proto10 | comment_prototypes_caller2.c | +| comment_prototypes.c:55:6:55:12 | proto11 | Functions called from other files should be documented (called from $@). | comment_prototypes_caller1.c:14:5:14:11 | call to proto11 | comment_prototypes_caller1.c | +| comment_prototypes.c:55:6:55:12 | proto11 | Functions called from other files should be documented (called from $@). | comment_prototypes_caller2.c:14:5:14:11 | call to proto11 | comment_prototypes_caller2.c | +| comment_prototypes.c:66:6:66:12 | proto13 | Functions called from other files should be documented (called from $@). | comment_prototypes_caller1.c:16:5:16:11 | call to proto13 | comment_prototypes_caller1.c | +| comment_prototypes.c:66:6:66:12 | proto13 | Functions called from other files should be documented (called from $@). | comment_prototypes_caller2.c:16:5:16:11 | call to proto13 | comment_prototypes_caller2.c | +| definition.c:2:6:2:7 | f1 | Functions called from other files should be documented (called from $@). | user1.c:9:5:9:6 | call to f1 | user1.c | +| definition.c:2:6:2:7 | f1 | Functions called from other files should be documented (called from $@). | user2.c:7:5:7:6 | call to f1 | user2.c | +| definition.c:32:6:32:7 | f6 | Functions called from other files should be documented (called from $@). | user1.c:14:5:14:6 | call to f6 | user1.c | +| definition.c:32:6:32:7 | f6 | Functions called from other files should be documented (called from $@). | user2.c:10:5:10:6 | call to f6 | user2.c | diff --git a/cpp/ql/test/query-tests/Metrics/Dependencies/ExternalDependencies.expected b/cpp/ql/test/query-tests/Metrics/Dependencies/ExternalDependencies.expected index a42506f8be11..795f6dba431a 100644 --- a/cpp/ql/test/query-tests/Metrics/Dependencies/ExternalDependencies.expected +++ b/cpp/ql/test/query-tests/Metrics/Dependencies/ExternalDependencies.expected @@ -1,4 +1,4 @@ -| /query-tests/Metrics/Dependencies/main.cpp<\|>LibC<\|>unknown | 5 | -| /query-tests/Metrics/Dependencies/include.h<\|>LibD<\|>unknown | 1 | -| /query-tests/Metrics/Dependencies/main.cpp<\|>LibA<\|>unknown | 1 | -| /query-tests/Metrics/Dependencies/main.cpp<\|>LibB<\|>unknown | 1 | +| /main.cpp<\|>LibC<\|>unknown | 5 | +| /include.h<\|>LibD<\|>unknown | 1 | +| /main.cpp<\|>LibA<\|>unknown | 1 | +| /main.cpp<\|>LibB<\|>unknown | 1 | diff --git a/cpp/ql/test/query-tests/Metrics/Dependencies/ExternalDependenciesSourceLinks.expected b/cpp/ql/test/query-tests/Metrics/Dependencies/ExternalDependenciesSourceLinks.expected index f5399bf6ac31..b00deb76d7d8 100644 --- a/cpp/ql/test/query-tests/Metrics/Dependencies/ExternalDependenciesSourceLinks.expected +++ b/cpp/ql/test/query-tests/Metrics/Dependencies/ExternalDependenciesSourceLinks.expected @@ -1,4 +1,4 @@ -| /query-tests/Metrics/Dependencies/include.h<\|>LibD<\|>unknown | include.h:0:0:0:0 | include.h | -| /query-tests/Metrics/Dependencies/main.cpp<\|>LibA<\|>unknown | main.cpp:0:0:0:0 | main.cpp | -| /query-tests/Metrics/Dependencies/main.cpp<\|>LibB<\|>unknown | main.cpp:0:0:0:0 | main.cpp | -| /query-tests/Metrics/Dependencies/main.cpp<\|>LibC<\|>unknown | main.cpp:0:0:0:0 | main.cpp | +| /include.h<\|>LibD<\|>unknown | include.h:0:0:0:0 | include.h | +| /main.cpp<\|>LibA<\|>unknown | main.cpp:0:0:0:0 | main.cpp | +| /main.cpp<\|>LibB<\|>unknown | main.cpp:0:0:0:0 | main.cpp | +| /main.cpp<\|>LibC<\|>unknown | main.cpp:0:0:0:0 | main.cpp | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-129/semmle/ImproperArrayIndexValidation/ImproperArrayIndexValidation.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-129/semmle/ImproperArrayIndexValidation/ImproperArrayIndexValidation.expected index d6ffc7aed578..184af69e72c4 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-129/semmle/ImproperArrayIndexValidation/ImproperArrayIndexValidation.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-129/semmle/ImproperArrayIndexValidation/ImproperArrayIndexValidation.expected @@ -2,29 +2,36 @@ edges | test1.c:7:26:7:29 | **argv | test1.c:8:11:8:14 | call to atoi | provenance | TaintFunction | | test1.c:8:11:8:14 | call to atoi | test1.c:9:9:9:9 | i | provenance | | | test1.c:8:11:8:14 | call to atoi | test1.c:11:9:11:9 | i | provenance | | +| test1.c:8:11:8:14 | call to atoi | test1.c:12:9:12:9 | i | provenance | | | test1.c:8:11:8:14 | call to atoi | test1.c:13:9:13:9 | i | provenance | | -| test1.c:9:9:9:9 | i | test1.c:16:16:16:16 | i | provenance | | -| test1.c:11:9:11:9 | i | test1.c:32:16:32:16 | i | provenance | | -| test1.c:13:9:13:9 | i | test1.c:48:16:48:16 | i | provenance | | -| test1.c:16:16:16:16 | i | test1.c:18:16:18:16 | i | provenance | | -| test1.c:32:16:32:16 | i | test1.c:33:11:33:11 | i | provenance | | -| test1.c:48:16:48:16 | i | test1.c:51:3:51:7 | ... = ... | provenance | | -| test1.c:51:3:51:7 | ... = ... | test1.c:53:15:53:15 | j | provenance | | +| test1.c:9:9:9:9 | i | test1.c:18:16:18:16 | i | provenance | | +| test1.c:11:9:11:9 | i | test1.c:34:16:34:16 | i | provenance | | +| test1.c:12:9:12:9 | i | test1.c:42:16:42:16 | i | provenance | | +| test1.c:13:9:13:9 | i | test1.c:50:16:50:16 | i | provenance | | +| test1.c:18:16:18:16 | i | test1.c:20:16:20:16 | i | provenance | | +| test1.c:34:16:34:16 | i | test1.c:35:11:35:11 | i | provenance | | +| test1.c:42:16:42:16 | i | test1.c:43:11:43:11 | i | provenance | | +| test1.c:50:16:50:16 | i | test1.c:53:3:53:7 | ... = ... | provenance | | +| test1.c:53:3:53:7 | ... = ... | test1.c:55:15:55:15 | j | provenance | | nodes | test1.c:7:26:7:29 | **argv | semmle.label | **argv | | test1.c:8:11:8:14 | call to atoi | semmle.label | call to atoi | | test1.c:9:9:9:9 | i | semmle.label | i | | test1.c:11:9:11:9 | i | semmle.label | i | +| test1.c:12:9:12:9 | i | semmle.label | i | | test1.c:13:9:13:9 | i | semmle.label | i | -| test1.c:16:16:16:16 | i | semmle.label | i | | test1.c:18:16:18:16 | i | semmle.label | i | -| test1.c:32:16:32:16 | i | semmle.label | i | -| test1.c:33:11:33:11 | i | semmle.label | i | -| test1.c:48:16:48:16 | i | semmle.label | i | -| test1.c:51:3:51:7 | ... = ... | semmle.label | ... = ... | -| test1.c:53:15:53:15 | j | semmle.label | j | +| test1.c:20:16:20:16 | i | semmle.label | i | +| test1.c:34:16:34:16 | i | semmle.label | i | +| test1.c:35:11:35:11 | i | semmle.label | i | +| test1.c:42:16:42:16 | i | semmle.label | i | +| test1.c:43:11:43:11 | i | semmle.label | i | +| test1.c:50:16:50:16 | i | semmle.label | i | +| test1.c:53:3:53:7 | ... = ... | semmle.label | ... = ... | +| test1.c:55:15:55:15 | j | semmle.label | j | subpaths #select -| test1.c:18:16:18:16 | i | test1.c:7:26:7:29 | **argv | test1.c:18:16:18:16 | i | An array indexing expression depends on $@ that might be outside the bounds of the array. | test1.c:7:26:7:29 | **argv | a command-line argument | -| test1.c:33:11:33:11 | i | test1.c:7:26:7:29 | **argv | test1.c:33:11:33:11 | i | An array indexing expression depends on $@ that might be outside the bounds of the array. | test1.c:7:26:7:29 | **argv | a command-line argument | -| test1.c:53:15:53:15 | j | test1.c:7:26:7:29 | **argv | test1.c:53:15:53:15 | j | An array indexing expression depends on $@ that might be outside the bounds of the array. | test1.c:7:26:7:29 | **argv | a command-line argument | +| test1.c:20:16:20:16 | i | test1.c:7:26:7:29 | **argv | test1.c:20:16:20:16 | i | An array indexing expression depends on $@ that might be outside the bounds of the array. | test1.c:7:26:7:29 | **argv | a command-line argument | +| test1.c:35:11:35:11 | i | test1.c:7:26:7:29 | **argv | test1.c:35:11:35:11 | i | An array indexing expression depends on $@ that might be outside the bounds of the array. | test1.c:7:26:7:29 | **argv | a command-line argument | +| test1.c:43:11:43:11 | i | test1.c:7:26:7:29 | **argv | test1.c:43:11:43:11 | i | An array indexing expression depends on $@ that might be outside the bounds of the array. | test1.c:7:26:7:29 | **argv | a command-line argument | +| test1.c:55:15:55:15 | j | test1.c:7:26:7:29 | **argv | test1.c:55:15:55:15 | j | An array indexing expression depends on $@ that might be outside the bounds of the array. | test1.c:7:26:7:29 | **argv | a command-line argument | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-129/semmle/ImproperArrayIndexValidation/test1.c b/cpp/ql/test/query-tests/Security/CWE/CWE-129/semmle/ImproperArrayIndexValidation/test1.c index 08484aef51fc..89619626de91 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-129/semmle/ImproperArrayIndexValidation/test1.c +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-129/semmle/ImproperArrayIndexValidation/test1.c @@ -11,6 +11,8 @@ int main(int argc, char *argv[]) { test3(i); test4(i); test5(i); + test6(i); + test7(argv[1]); } void test1(int i) { @@ -38,7 +40,7 @@ void test3(int i) { } void test4(int i) { - myArray[i] = 0; // BAD: i has not been validated [NOT REPORTED] + myArray[i] = 0; // BAD: i has not been validated if ((i < 0) || (i >= 10)) return; @@ -52,3 +54,26 @@ void test5(int i) { j = myArray[j]; // BAD: j has not been validated } + +extern int myTable[256]; + +void test6(int i) { + unsigned char s = i; + + myTable[s] = 0; // GOOD: Input is small [FALSE POSITIVE] +} + +typedef void FILE; +#define EOF (-1) + +int getc(FILE*); + +extern int myMaxCharTable[256]; + +void test7(FILE* fp) { + int ch; + while ((ch = getc(fp)) != EOF) { + myMaxCharTable[ch] = 0; // GOOD + } +} + diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-131/NoSpaceForZeroTerminator/test.c b/cpp/ql/test/query-tests/Security/CWE/CWE-131/NoSpaceForZeroTerminator/test.c index 21dcad6f2fd5..551b2441a41c 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-131/NoSpaceForZeroTerminator/test.c +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-131/NoSpaceForZeroTerminator/test.c @@ -11,14 +11,14 @@ char *strcpy(char *s1, const char *s2); //// Test code ///// -void bad0(char *str) { +static void bad0(char *str) { // BAD -- Not allocating space for '\0' terminator char *buffer = malloc(strlen(str)); strcpy(buffer, str); free(buffer); } -void good0(char *str) { +static void good0(char *str) { // GOOD -- Allocating extra byte for terminator char *buffer = malloc(strlen(str)+1); strcpy(buffer, str); @@ -26,7 +26,7 @@ void good0(char *str) { } -void bad1(char *str) { +static void bad1(char *str) { int len = strlen(str); // BAD -- Not allocating space for '\0' terminator char *buffer = malloc(len); @@ -34,7 +34,7 @@ void bad1(char *str) { free(buffer); } -void good1(char *str) { +static void good1(char *str) { int len = strlen(str); // GOOD -- Allocating extra byte for terminator char *buffer = malloc(len+1); @@ -43,7 +43,7 @@ void good1(char *str) { } -void bad2(char *str) { +static void bad2(char *str) { int len = strlen(str); // BAD -- Not allocating space for '\0' terminator char *buffer = malloc(len); @@ -51,7 +51,7 @@ void bad2(char *str) { free(buffer); } -void good2(char *str) { +static void good2(char *str) { int len = strlen(str)+1; // GOOD -- Allocating extra byte for terminator char *buffer = malloc(len); @@ -59,14 +59,14 @@ void good2(char *str) { free(buffer); } -void bad3(char *str) { +static void bad3(char *str) { // BAD -- Not allocating space for '\0' terminator char *buffer = malloc(strlen(str) * sizeof(char)); strcpy(buffer, str); free(buffer); } -void good3(char *str) { +static void good3(char *str) { // GOOD -- Allocating extra byte for terminator char *buffer = malloc((strlen(str) + 1) * sizeof(char)); strcpy(buffer, str); @@ -75,7 +75,7 @@ void good3(char *str) { void *memcpy(void *s1, const void *s2, size_t n); -void good4(char *str) { +static void good4(char *str) { // GOOD -- allocating a non zero-terminated string int len = strlen(str); char *buffer = malloc(len); diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-131/NoSpaceForZeroTerminator/test.cpp b/cpp/ql/test/query-tests/Security/CWE/CWE-131/NoSpaceForZeroTerminator/test.cpp index 63b2b4e760a7..24032a91ef15 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-131/NoSpaceForZeroTerminator/test.cpp +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-131/NoSpaceForZeroTerminator/test.cpp @@ -19,28 +19,28 @@ int strcmp(const char *s1, const char *s2); //// Test code ///// -void bad1(wchar_t *wstr) { +static void bad1(wchar_t *wstr) { // BAD -- Not allocating space for '\0' terminator wchar_t *wbuffer = (wchar_t *)malloc(wcslen(wstr)); wcscpy(wbuffer, wstr); free(wbuffer); } -void bad2(wchar_t *wstr) { +static void bad2(wchar_t *wstr) { // BAD -- Not allocating space for '\0' terminator wchar_t *wbuffer = (wchar_t *)malloc(wcslen(wstr) * sizeof(wchar_t)); wcscpy(wbuffer, wstr); free(wbuffer); } -void good1(wchar_t *wstr) { +static void good1(wchar_t *wstr) { // GOOD -- Allocating extra character for terminator wchar_t *wbuffer = (wchar_t *)malloc((wcslen(wstr) + 1) * sizeof(wchar_t)); wcscpy(wbuffer, wstr); free(wbuffer); } -void bad3(char *str) { +static void bad3(char *str) { // BAD -- zero-termination proved by sprintf (as destination) char *buffer = (char *)malloc(strlen(str)); sprintf(buffer, "%s", str); @@ -50,7 +50,7 @@ void bad3(char *str) { void decode(char *dest, char *src); void wdecode(wchar_t *dest, wchar_t *src); -void bad4(char *str) { +static void bad4(char *str) { // BAD -- zero-termination proved by wprintf (as parameter) char *buffer = (char *)malloc(strlen(str)); decode(buffer, str); @@ -58,7 +58,7 @@ void bad4(char *str) { free(buffer); } -void bad5(char *str) { +static void bad5(char *str) { // BAD -- zero-termination proved by strcat (as destination) char *buffer = (char *)malloc(strlen(str)); buffer[0] = 0; @@ -66,7 +66,7 @@ void bad5(char *str) { free(buffer); } -void bad6(char *str, char *dest) { +static void bad6(char *str, char *dest) { // BAD -- zero-termination proved by strcat (as source) char *buffer = (char *)malloc(strlen(str)); decode(buffer, str); @@ -74,7 +74,7 @@ void bad6(char *str, char *dest) { free(buffer); } -void bad7(char *str, char *str2) { +static void bad7(char *str, char *str2) { // BAD -- zero-termination proved by strcmp char *buffer = (char *)malloc(strlen(str)); decode(buffer, str); @@ -84,7 +84,7 @@ void bad7(char *str, char *str2) { free(buffer); } -void bad8(wchar_t *str) { +static void bad8(wchar_t *str) { // BAD -- zero-termination proved by wcslen wchar_t *wbuffer = (wchar_t *)malloc(wcslen(str)); wdecode(wbuffer, str); @@ -94,21 +94,21 @@ void bad8(wchar_t *str) { free(wbuffer); } -void good2(char *str, char *dest) { +static void good2(char *str, char *dest) { // GOOD -- zero-termination not proven char *buffer = (char *)malloc(strlen(str)); decode(buffer, str); free(buffer); } -void bad9(wchar_t *wstr) { +static void bad9(wchar_t *wstr) { // BAD -- using new wchar_t *wbuffer = new wchar_t[wcslen(wstr)]; wcscpy(wbuffer, wstr); delete wbuffer; } -void good3(char *str) { +static void good3(char *str) { // GOOD -- zero-termination not required for this printf char *buffer = (char *)malloc(strlen(str)); decode(buffer, str); @@ -116,7 +116,7 @@ void good3(char *str) { free(buffer); } -void good4(char *str) { +static void good4(char *str) { // GOOD -- zero-termination not required for this printf char *buffer = (char *)malloc(strlen(str)); decode(buffer, str); diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-131/NoSpaceForZeroTerminator/test2.cpp b/cpp/ql/test/query-tests/Security/CWE/CWE-131/NoSpaceForZeroTerminator/test2.cpp index 3b02e89b8525..7c7f74066976 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-131/NoSpaceForZeroTerminator/test2.cpp +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-131/NoSpaceForZeroTerminator/test2.cpp @@ -38,35 +38,35 @@ namespace std //// Test code ///// -void bad1(char *str) { +static void bad1(char *str) { // BAD -- Not allocating space for '\0' terminator [NOT DETECTED] char *buffer = (char *)malloc(strlen(str)); std::string str2(buffer); free(buffer); } -void good1(char *str) { +static void good1(char *str) { // GOOD --- copy does not overrun due to size limit char *buffer = (char *)malloc(strlen(str)); std::string str2(buffer, strlen(str)); free(buffer); } -void bad2(wchar_t *str) { +static void bad2(wchar_t *str) { // BAD -- Not allocating space for '\0' terminator [NOT DETECTED] wchar_t *buffer = (wchar_t *)calloc(wcslen(str), sizeof(wchar_t)); wcscpy(buffer, str); free(buffer); } -void bad3(wchar_t *str) { +static void bad3(wchar_t *str) { // BAD -- Not allocating space for '\0' terminator wchar_t *buffer = (wchar_t *)calloc(sizeof(wchar_t), wcslen(str)); wcscpy(buffer, str); free(buffer); } -void bad4(char *str) { +static void bad4(char *str) { // BAD -- Not allocating space for '\0' terminator char *buffer = (char *)realloc(0, strlen(str)); strcpy(buffer, str); diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-190/semmle/tainted/ArithmeticTainted.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-190/semmle/tainted/ArithmeticTainted.expected index c60b26aae407..34aa8a7a7e4a 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-190/semmle/tainted/ArithmeticTainted.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-190/semmle/tainted/ArithmeticTainted.expected @@ -1,4 +1,6 @@ edges +| main.cpp:7:27:7:30 | **argv | main.cpp:8:17:8:20 | **argv | provenance | | +| main.cpp:8:17:8:20 | **argv | test.c:10:28:10:31 | **argv | provenance | | | test2.cpp:12:21:12:21 | v | test2.cpp:14:11:14:11 | v | provenance | | | test2.cpp:25:22:25:23 | fscanf output argument | test2.cpp:27:13:27:13 | v | provenance | | | test2.cpp:27:13:27:13 | v | test2.cpp:12:21:12:21 | v | provenance | | @@ -6,18 +8,15 @@ edges | test2.cpp:38:13:38:16 | call to atoi | test2.cpp:39:3:39:18 | ... = ... | provenance | | | test2.cpp:38:13:38:16 | call to atoi | test2.cpp:39:9:39:11 | num | provenance | | | test2.cpp:39:3:39:18 | ... = ... | test2.cpp:40:3:40:5 | num | provenance | | -| test3.c:10:27:10:30 | **argv | test.c:11:24:11:27 | call to atoi | provenance | TaintFunction | -| test3.c:10:27:10:30 | **argv | test.c:41:5:41:24 | ... = ... | provenance | TaintFunction | -| test3.c:10:27:10:30 | **argv | test.c:51:5:51:24 | ... = ... | provenance | TaintFunction | | test5.cpp:5:5:5:17 | *getTaintedInt | test5.cpp:17:6:17:18 | call to getTaintedInt | provenance | | | test5.cpp:5:5:5:17 | *getTaintedInt | test5.cpp:18:6:18:18 | call to getTaintedInt | provenance | | | test5.cpp:9:7:9:9 | gets output argument | test5.cpp:10:9:10:27 | call to strtoul | provenance | TaintFunction | | test5.cpp:10:9:10:27 | call to strtoul | test5.cpp:5:5:5:17 | *getTaintedInt | provenance | | | test5.cpp:18:2:18:20 | ... = ... | test5.cpp:19:6:19:6 | y | provenance | | | test5.cpp:18:6:18:18 | call to getTaintedInt | test5.cpp:18:2:18:20 | ... = ... | provenance | | -| test.c:10:27:10:30 | **argv | test.c:11:24:11:27 | call to atoi | provenance | TaintFunction | -| test.c:10:27:10:30 | **argv | test.c:41:5:41:24 | ... = ... | provenance | TaintFunction | -| test.c:10:27:10:30 | **argv | test.c:51:5:51:24 | ... = ... | provenance | TaintFunction | +| test.c:10:28:10:31 | **argv | test.c:11:24:11:27 | call to atoi | provenance | TaintFunction | +| test.c:10:28:10:31 | **argv | test.c:41:5:41:24 | ... = ... | provenance | TaintFunction | +| test.c:10:28:10:31 | **argv | test.c:51:5:51:24 | ... = ... | provenance | TaintFunction | | test.c:11:24:11:27 | call to atoi | test.c:14:15:14:28 | maxConnections | provenance | | | test.c:41:5:41:24 | ... = ... | test.c:44:7:44:10 | len2 | provenance | | | test.c:41:5:41:24 | ... = ... | test.c:44:7:44:12 | ... -- | provenance | | @@ -26,6 +25,8 @@ edges | test.c:51:5:51:24 | ... = ... | test.c:54:7:54:12 | ... -- | provenance | | | test.c:54:7:54:12 | ... -- | test.c:54:7:54:10 | len3 | provenance | | nodes +| main.cpp:7:27:7:30 | **argv | semmle.label | **argv | +| main.cpp:8:17:8:20 | **argv | semmle.label | **argv | | test2.cpp:12:21:12:21 | v | semmle.label | v | | test2.cpp:14:11:14:11 | v | semmle.label | v | | test2.cpp:25:22:25:23 | fscanf output argument | semmle.label | fscanf output argument | @@ -35,7 +36,6 @@ nodes | test2.cpp:39:3:39:18 | ... = ... | semmle.label | ... = ... | | test2.cpp:39:9:39:11 | num | semmle.label | num | | test2.cpp:40:3:40:5 | num | semmle.label | num | -| test3.c:10:27:10:30 | **argv | semmle.label | **argv | | test5.cpp:5:5:5:17 | *getTaintedInt | semmle.label | *getTaintedInt | | test5.cpp:9:7:9:9 | gets output argument | semmle.label | gets output argument | | test5.cpp:10:9:10:27 | call to strtoul | semmle.label | call to strtoul | @@ -43,7 +43,7 @@ nodes | test5.cpp:18:2:18:20 | ... = ... | semmle.label | ... = ... | | test5.cpp:18:6:18:18 | call to getTaintedInt | semmle.label | call to getTaintedInt | | test5.cpp:19:6:19:6 | y | semmle.label | y | -| test.c:10:27:10:30 | **argv | semmle.label | **argv | +| test.c:10:28:10:31 | **argv | semmle.label | **argv | | test.c:11:24:11:27 | call to atoi | semmle.label | call to atoi | | test.c:14:15:14:28 | maxConnections | semmle.label | maxConnections | | test.c:41:5:41:24 | ... = ... | semmle.label | ... = ... | @@ -61,19 +61,7 @@ subpaths | test5.cpp:17:6:17:18 | call to getTaintedInt | test5.cpp:9:7:9:9 | gets output argument | test5.cpp:17:6:17:18 | call to getTaintedInt | $@ flows to an operand of an arithmetic expression, potentially causing an overflow. | test5.cpp:9:7:9:9 | gets output argument | string read by gets | | test5.cpp:19:6:19:6 | y | test5.cpp:9:7:9:9 | gets output argument | test5.cpp:19:6:19:6 | y | $@ flows to an operand of an arithmetic expression, potentially causing an overflow. | test5.cpp:9:7:9:9 | gets output argument | string read by gets | | test5.cpp:19:6:19:6 | y | test5.cpp:9:7:9:9 | gets output argument | test5.cpp:19:6:19:6 | y | $@ flows to an operand of an arithmetic expression, potentially causing an underflow. | test5.cpp:9:7:9:9 | gets output argument | string read by gets | -| test.c:14:15:14:28 | maxConnections | test3.c:10:27:10:30 | **argv | test.c:14:15:14:28 | maxConnections | $@ flows to an operand of an arithmetic expression, potentially causing an overflow. | test3.c:10:27:10:30 | **argv | a command-line argument | -| test.c:14:15:14:28 | maxConnections | test3.c:10:27:10:30 | **argv | test.c:14:15:14:28 | maxConnections | $@ flows to an operand of an arithmetic expression, potentially causing an overflow. | test.c:10:27:10:30 | **argv | a command-line argument | -| test.c:14:15:14:28 | maxConnections | test3.c:10:27:10:30 | **argv | test.c:14:15:14:28 | maxConnections | $@ flows to an operand of an arithmetic expression, potentially causing an underflow. | test3.c:10:27:10:30 | **argv | a command-line argument | -| test.c:14:15:14:28 | maxConnections | test3.c:10:27:10:30 | **argv | test.c:14:15:14:28 | maxConnections | $@ flows to an operand of an arithmetic expression, potentially causing an underflow. | test.c:10:27:10:30 | **argv | a command-line argument | -| test.c:14:15:14:28 | maxConnections | test.c:10:27:10:30 | **argv | test.c:14:15:14:28 | maxConnections | $@ flows to an operand of an arithmetic expression, potentially causing an overflow. | test3.c:10:27:10:30 | **argv | a command-line argument | -| test.c:14:15:14:28 | maxConnections | test.c:10:27:10:30 | **argv | test.c:14:15:14:28 | maxConnections | $@ flows to an operand of an arithmetic expression, potentially causing an overflow. | test.c:10:27:10:30 | **argv | a command-line argument | -| test.c:14:15:14:28 | maxConnections | test.c:10:27:10:30 | **argv | test.c:14:15:14:28 | maxConnections | $@ flows to an operand of an arithmetic expression, potentially causing an underflow. | test3.c:10:27:10:30 | **argv | a command-line argument | -| test.c:14:15:14:28 | maxConnections | test.c:10:27:10:30 | **argv | test.c:14:15:14:28 | maxConnections | $@ flows to an operand of an arithmetic expression, potentially causing an underflow. | test.c:10:27:10:30 | **argv | a command-line argument | -| test.c:44:7:44:10 | len2 | test3.c:10:27:10:30 | **argv | test.c:44:7:44:10 | len2 | $@ flows to an operand of an arithmetic expression, potentially causing an underflow. | test3.c:10:27:10:30 | **argv | a command-line argument | -| test.c:44:7:44:10 | len2 | test3.c:10:27:10:30 | **argv | test.c:44:7:44:10 | len2 | $@ flows to an operand of an arithmetic expression, potentially causing an underflow. | test.c:10:27:10:30 | **argv | a command-line argument | -| test.c:44:7:44:10 | len2 | test.c:10:27:10:30 | **argv | test.c:44:7:44:10 | len2 | $@ flows to an operand of an arithmetic expression, potentially causing an underflow. | test3.c:10:27:10:30 | **argv | a command-line argument | -| test.c:44:7:44:10 | len2 | test.c:10:27:10:30 | **argv | test.c:44:7:44:10 | len2 | $@ flows to an operand of an arithmetic expression, potentially causing an underflow. | test.c:10:27:10:30 | **argv | a command-line argument | -| test.c:54:7:54:10 | len3 | test3.c:10:27:10:30 | **argv | test.c:54:7:54:10 | len3 | $@ flows to an operand of an arithmetic expression, potentially causing an underflow. | test3.c:10:27:10:30 | **argv | a command-line argument | -| test.c:54:7:54:10 | len3 | test3.c:10:27:10:30 | **argv | test.c:54:7:54:10 | len3 | $@ flows to an operand of an arithmetic expression, potentially causing an underflow. | test.c:10:27:10:30 | **argv | a command-line argument | -| test.c:54:7:54:10 | len3 | test.c:10:27:10:30 | **argv | test.c:54:7:54:10 | len3 | $@ flows to an operand of an arithmetic expression, potentially causing an underflow. | test3.c:10:27:10:30 | **argv | a command-line argument | -| test.c:54:7:54:10 | len3 | test.c:10:27:10:30 | **argv | test.c:54:7:54:10 | len3 | $@ flows to an operand of an arithmetic expression, potentially causing an underflow. | test.c:10:27:10:30 | **argv | a command-line argument | +| test.c:14:15:14:28 | maxConnections | main.cpp:7:27:7:30 | **argv | test.c:14:15:14:28 | maxConnections | $@ flows to an operand of an arithmetic expression, potentially causing an overflow. | main.cpp:7:27:7:30 | **argv | a command-line argument | +| test.c:14:15:14:28 | maxConnections | main.cpp:7:27:7:30 | **argv | test.c:14:15:14:28 | maxConnections | $@ flows to an operand of an arithmetic expression, potentially causing an underflow. | main.cpp:7:27:7:30 | **argv | a command-line argument | +| test.c:44:7:44:10 | len2 | main.cpp:7:27:7:30 | **argv | test.c:44:7:44:10 | len2 | $@ flows to an operand of an arithmetic expression, potentially causing an underflow. | main.cpp:7:27:7:30 | **argv | a command-line argument | +| test.c:54:7:54:10 | len3 | main.cpp:7:27:7:30 | **argv | test.c:54:7:54:10 | len3 | $@ flows to an operand of an arithmetic expression, potentially causing an underflow. | main.cpp:7:27:7:30 | **argv | a command-line argument | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-190/semmle/tainted/IntegerOverflowTainted.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-190/semmle/tainted/IntegerOverflowTainted.expected index a79144feaca0..ae20929d7b8a 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-190/semmle/tainted/IntegerOverflowTainted.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-190/semmle/tainted/IntegerOverflowTainted.expected @@ -4,20 +4,15 @@ | test2.cpp:17:11:17:22 | ... * ... | $@ flows an expression which might overflow. | test2.cpp:25:22:25:23 | fscanf output argument | value read by fscanf | | test2.cpp:39:9:39:18 | ... + ... | $@ flows an expression which might overflow. | test2.cpp:36:9:36:14 | fgets output argument | string read by fgets | | test2.cpp:40:3:40:13 | ... += ... | $@ flows an expression which might overflow. | test2.cpp:36:9:36:14 | fgets output argument | string read by fgets | -| test3.c:12:11:12:34 | * ... | $@ flows an expression which might overflow negatively. | test3.c:10:27:10:30 | **argv | a command-line argument | -| test3.c:12:11:12:34 | * ... | $@ flows an expression which might overflow negatively. | test.c:10:27:10:30 | **argv | a command-line argument | -| test3.c:13:11:13:20 | * ... | $@ flows an expression which might overflow negatively. | test3.c:10:27:10:30 | **argv | a command-line argument | -| test3.c:13:11:13:20 | * ... | $@ flows an expression which might overflow negatively. | test.c:10:27:10:30 | **argv | a command-line argument | -| test4.cpp:13:7:13:20 | access to array | $@ flows an expression which might overflow negatively. | test4.cpp:8:27:8:30 | **argv | a command-line argument | +| test3.c:12:11:12:34 | * ... | $@ flows an expression which might overflow negatively. | main.cpp:7:27:7:30 | **argv | a command-line argument | +| test3.c:13:11:13:20 | * ... | $@ flows an expression which might overflow negatively. | main.cpp:7:27:7:30 | **argv | a command-line argument | +| test4.cpp:13:7:13:20 | access to array | $@ flows an expression which might overflow negatively. | main.cpp:7:27:7:30 | **argv | a command-line argument | | test5.cpp:10:9:10:27 | call to strtoul | $@ flows an expression which might overflow. | test5.cpp:9:7:9:9 | gets output argument | string read by gets | | test5.cpp:17:6:17:27 | ... * ... | $@ flows an expression which might overflow. | test5.cpp:9:7:9:9 | gets output argument | string read by gets | | test5.cpp:19:6:19:13 | ... * ... | $@ flows an expression which might overflow. | test5.cpp:9:7:9:9 | gets output argument | string read by gets | | test6.cpp:11:10:11:15 | s | $@ flows an expression which might overflow. | test6.cpp:39:23:39:24 | fscanf output argument | value read by fscanf | | test6.cpp:16:10:16:15 | s | $@ flows an expression which might overflow. | test6.cpp:39:23:39:24 | fscanf output argument | value read by fscanf | | test6.cpp:30:11:30:16 | s | $@ flows an expression which might overflow. | test6.cpp:39:23:39:24 | fscanf output argument | value read by fscanf | -| test.c:14:15:14:35 | ... * ... | $@ flows an expression which might overflow. | test3.c:10:27:10:30 | **argv | a command-line argument | -| test.c:14:15:14:35 | ... * ... | $@ flows an expression which might overflow. | test.c:10:27:10:30 | **argv | a command-line argument | -| test.c:44:7:44:12 | ... -- | $@ flows an expression which might overflow negatively. | test3.c:10:27:10:30 | **argv | a command-line argument | -| test.c:44:7:44:12 | ... -- | $@ flows an expression which might overflow negatively. | test.c:10:27:10:30 | **argv | a command-line argument | -| test.c:54:7:54:12 | ... -- | $@ flows an expression which might overflow negatively. | test3.c:10:27:10:30 | **argv | a command-line argument | -| test.c:54:7:54:12 | ... -- | $@ flows an expression which might overflow negatively. | test.c:10:27:10:30 | **argv | a command-line argument | +| test.c:14:15:14:35 | ... * ... | $@ flows an expression which might overflow. | main.cpp:7:27:7:30 | **argv | a command-line argument | +| test.c:44:7:44:12 | ... -- | $@ flows an expression which might overflow negatively. | main.cpp:7:27:7:30 | **argv | a command-line argument | +| test.c:54:7:54:12 | ... -- | $@ flows an expression which might overflow negatively. | main.cpp:7:27:7:30 | **argv | a command-line argument | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-190/semmle/tainted/main.cpp b/cpp/ql/test/query-tests/Security/CWE/CWE-190/semmle/tainted/main.cpp new file mode 100644 index 000000000000..645b5893deaa --- /dev/null +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-190/semmle/tainted/main.cpp @@ -0,0 +1,12 @@ +extern "C" { +int main1(int argc, char** argv); +int main3(int argc, char** argv); +} +int main4(int argc, char** argv); + +int main(int argc, char** argv) { + main1(argc, argv); + main3(argc, argv); + main4(argc, argv); + return 0; +} diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-190/semmle/tainted/test.c b/cpp/ql/test/query-tests/Security/CWE/CWE-190/semmle/tainted/test.c index 29ab7cc8f25c..b39e54084ac3 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-190/semmle/tainted/test.c +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-190/semmle/tainted/test.c @@ -7,7 +7,7 @@ void startServer(int heapSize); typedef unsigned long size_t; size_t strlen(const char *s); -int main(int argc, char** argv) { +int main1(int argc, char** argv) { int maxConnections = atoi(argv[1]); // BAD: arithmetic on a user input without any validation diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-190/semmle/tainted/test3.c b/cpp/ql/test/query-tests/Security/CWE/CWE-190/semmle/tainted/test3.c index 57c3b529f586..a8116e058530 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-190/semmle/tainted/test3.c +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-190/semmle/tainted/test3.c @@ -7,7 +7,7 @@ // Regression test for ODASA-6054: IntegerOverflowTainted should // not report a result if the overflow happens in a macro expansion // from a macro that is defined in a system header. -int main(int argc, char **argv) { +int main3(int argc, char **argv) { char *cmd = argv[0]; int x = (int)(unsigned char)*cmd; // BAD: overflow int y = CAST(*cmd); // BAD: overflow in macro expansion (macro is not from a system header) diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-190/semmle/tainted/test4.cpp b/cpp/ql/test/query-tests/Security/CWE/CWE-190/semmle/tainted/test4.cpp index 054aea93fbad..ad4cc80d30ac 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-190/semmle/tainted/test4.cpp +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-190/semmle/tainted/test4.cpp @@ -5,7 +5,7 @@ // by comparing the value to 0. This means that the cast cannot overflow, // regardless of what the input type is. -int main(int argc, char **argv) { +int main4(int argc, char **argv) { char *p = argv[0]; if (!p[0]) { // GOOD: cast to bool. return 1; diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-457/semmle/tests/UninitializedLocal.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-457/semmle/tests/UninitializedLocal.expected index a8b3c7782e7c..6773f5aef942 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-457/semmle/tests/UninitializedLocal.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-457/semmle/tests/UninitializedLocal.expected @@ -1,5 +1,6 @@ edges nodes +| errors.cpp:13:7:13:7 | definition of x | semmle.label | definition of x | | test.cpp:11:6:11:8 | definition of foo | semmle.label | definition of foo | | test.cpp:111:6:111:8 | definition of foo | semmle.label | definition of foo | | test.cpp:226:7:226:7 | definition of x | semmle.label | definition of x | @@ -14,6 +15,7 @@ nodes | test.cpp:472:6:472:6 | definition of x | semmle.label | definition of x | | test.cpp:479:6:479:6 | definition of x | semmle.label | definition of x | #select +| errors.cpp:14:18:14:18 | x | errors.cpp:13:7:13:7 | definition of x | errors.cpp:13:7:13:7 | definition of x | The variable $@ may not be initialized at this access. | errors.cpp:13:7:13:7 | x | x | | test.cpp:12:6:12:8 | foo | test.cpp:11:6:11:8 | definition of foo | test.cpp:11:6:11:8 | definition of foo | The variable $@ may not be initialized at this access. | test.cpp:11:6:11:8 | foo | foo | | test.cpp:113:6:113:8 | foo | test.cpp:111:6:111:8 | definition of foo | test.cpp:111:6:111:8 | definition of foo | The variable $@ may not be initialized at this access. | test.cpp:111:6:111:8 | foo | foo | | test.cpp:227:3:227:3 | x | test.cpp:226:7:226:7 | definition of x | test.cpp:226:7:226:7 | definition of x | The variable $@ may not be initialized at this access. | test.cpp:226:7:226:7 | x | x | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-457/semmle/tests/errors.cpp b/cpp/ql/test/query-tests/Security/CWE/CWE-457/semmle/tests/errors.cpp new file mode 100644 index 000000000000..07bb61f943ed --- /dev/null +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-457/semmle/tests/errors.cpp @@ -0,0 +1,15 @@ +// semmle-extractor-options: --expect_errors + +int f1() { + int x; + initialize(&x); // error expression - initialize() is not defined + return x; // GOOD - assume x is initialized +} + +void * operator new(unsigned long, bool); +void operator delete(void*, bool); + +int f2() { + int x; + new(true) int (x); // BAD, ignore implicit error expression +} diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-497/semmle/tests/tests2.cpp b/cpp/ql/test/query-tests/Security/CWE/CWE-497/semmle/tests/tests2.cpp index 4c72bc61f31d..c22d74b7a758 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-497/semmle/tests/tests2.cpp +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-497/semmle/tests/tests2.cpp @@ -50,7 +50,7 @@ int val(); const char *global1 = mysql_get_client_info(); const char *global2 = "abc"; -void test1() +void test7() { int sock = socket(val(), val(), val()); diff --git a/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md b/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md index 989d5e74408f..eb646b9ce77f 100644 --- a/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md +++ b/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.7.27 + +No user-facing changes. + ## 1.7.26 No user-facing changes. diff --git a/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.27.md b/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.27.md new file mode 100644 index 000000000000..7d323c891002 --- /dev/null +++ b/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.27.md @@ -0,0 +1,3 @@ +## 1.7.27 + +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 ca4c34e70d1b..5c0490dbda8e 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.26 +lastReleaseVersion: 1.7.27 diff --git a/csharp/ql/campaigns/Solorigate/lib/qlpack.yml b/csharp/ql/campaigns/Solorigate/lib/qlpack.yml index 871d2ed3619a..e02f2f0733ce 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.26 +version: 1.7.27 groups: - csharp - solorigate diff --git a/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md b/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md index 989d5e74408f..eb646b9ce77f 100644 --- a/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md +++ b/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.7.27 + +No user-facing changes. + ## 1.7.26 No user-facing changes. diff --git a/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.27.md b/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.27.md new file mode 100644 index 000000000000..7d323c891002 --- /dev/null +++ b/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.27.md @@ -0,0 +1,3 @@ +## 1.7.27 + +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 ca4c34e70d1b..5c0490dbda8e 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.26 +lastReleaseVersion: 1.7.27 diff --git a/csharp/ql/campaigns/Solorigate/src/qlpack.yml b/csharp/ql/campaigns/Solorigate/src/qlpack.yml index 00c3209afe98..d94e11459d4c 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.26 +version: 1.7.27 groups: - csharp - solorigate diff --git a/csharp/ql/lib/CHANGELOG.md b/csharp/ql/lib/CHANGELOG.md index 7e8378798830..302087e4f147 100644 --- a/csharp/ql/lib/CHANGELOG.md +++ b/csharp/ql/lib/CHANGELOG.md @@ -1,3 +1,7 @@ +## 3.0.1 + +No user-facing changes. + ## 3.0.0 ### Breaking Changes diff --git a/csharp/ql/lib/change-notes/released/3.0.1.md b/csharp/ql/lib/change-notes/released/3.0.1.md new file mode 100644 index 000000000000..ac5998ace618 --- /dev/null +++ b/csharp/ql/lib/change-notes/released/3.0.1.md @@ -0,0 +1,3 @@ +## 3.0.1 + +No user-facing changes. diff --git a/csharp/ql/lib/codeql-pack.release.yml b/csharp/ql/lib/codeql-pack.release.yml index 33d3a2cd1139..e3b15d965db6 100644 --- a/csharp/ql/lib/codeql-pack.release.yml +++ b/csharp/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 3.0.0 +lastReleaseVersion: 3.0.1 diff --git a/csharp/ql/lib/qlpack.yml b/csharp/ql/lib/qlpack.yml index eb36d3ac9db4..cdebb33e8ecd 100644 --- a/csharp/ql/lib/qlpack.yml +++ b/csharp/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-all -version: 3.0.0 +version: 3.0.1 groups: csharp dbscheme: semmlecode.csharp.dbscheme extractor: csharp diff --git a/csharp/ql/lib/semmle/code/csharp/controlflow/internal/ControlFlowGraphImpl.qll b/csharp/ql/lib/semmle/code/csharp/controlflow/internal/ControlFlowGraphImpl.qll index 74383240f5e3..463ed260067c 100644 --- a/csharp/ql/lib/semmle/code/csharp/controlflow/internal/ControlFlowGraphImpl.qll +++ b/csharp/ql/lib/semmle/code/csharp/controlflow/internal/ControlFlowGraphImpl.qll @@ -53,7 +53,6 @@ private predicate idOf(AstNode x, int y) = equivalenceRelation(id/2)(x, y) private module CfgInput implements CfgShared::InputSig { private import ControlFlowGraphImpl as Impl private import Completion as Comp - private import Splitting as Splitting private import SuccessorType as ST private import semmle.code.csharp.Caching @@ -80,10 +79,6 @@ private module CfgInput implements CfgShared::InputSig { Impl::scopeLast(scope, last, c) } - class SplitKindBase = Splitting::TSplitKind; - - class Split = Splitting::Split; - class SuccessorType = ST::SuccessorType; SuccessorType getAMatchingSuccessorType(Completion c) { result = c.getAMatchingSuccessorType() } @@ -102,7 +97,21 @@ private module CfgInput implements CfgShared::InputSig { } } -import CfgShared::Make +private module CfgSplittingInput implements CfgShared::SplittingInputSig { + private import Splitting as S + + class SplitKindBase = S::TSplitKind; + + class Split = S::Split; +} + +private module ConditionalCompletionSplittingInput implements + CfgShared::ConditionalCompletionSplittingInputSig +{ + import Splitting::ConditionalCompletionSplitting::ConditionalCompletionSplittingInput +} + +import CfgShared::MakeWithSplitting /** * A compilation. diff --git a/csharp/ql/lib/semmle/code/csharp/controlflow/internal/Splitting.qll b/csharp/ql/lib/semmle/code/csharp/controlflow/internal/Splitting.qll index 2fc5ffe4afd6..b6efdfcf1eac 100644 --- a/csharp/ql/lib/semmle/code/csharp/controlflow/internal/Splitting.qll +++ b/csharp/ql/lib/semmle/code/csharp/controlflow/internal/Splitting.qll @@ -5,7 +5,8 @@ */ import csharp -private import Completion +private import Completion as Comp +private import Comp private import ControlFlowGraphImpl private import semmle.code.csharp.controlflow.ControlFlowGraph::ControlFlow as Cfg private import semmle.code.csharp.controlflow.internal.PreSsa @@ -260,10 +261,12 @@ module ConditionalCompletionSplitting { ConditionalCompletionSplit() { this = TConditionalCompletionSplit(completion) } + ConditionalCompletion getCompletion() { result = completion } + override string toString() { result = completion.toString() } } - private class ConditionalCompletionSplitKind extends SplitKind, TConditionalCompletionSplitKind { + private class ConditionalCompletionSplitKind_ extends SplitKind, TConditionalCompletionSplitKind { override int getListOrder() { result = InitializerSplitting::getNextListOrder() } override predicate isEnabled(AstNode cfe) { this.appliesTo(cfe) } @@ -271,89 +274,64 @@ module ConditionalCompletionSplitting { override string toString() { result = "ConditionalCompletion" } } - int getNextListOrder() { result = InitializerSplitting::getNextListOrder() + 1 } + module ConditionalCompletionSplittingInput { + private import Completion as Comp - private class ConditionalCompletionSplitImpl extends SplitImpl instanceof ConditionalCompletionSplit - { - ConditionalCompletion completion; + class ConditionalCompletion = Comp::ConditionalCompletion; - ConditionalCompletionSplitImpl() { this = TConditionalCompletionSplit(completion) } + class ConditionalCompletionSplitKind extends ConditionalCompletionSplitKind_, TSplitKind { } - override ConditionalCompletionSplitKind getKind() { any() } + class ConditionalCompletionSplit = ConditionalCompletionSplitting::ConditionalCompletionSplit; - override predicate hasEntry(AstNode pred, AstNode succ, Completion c) { - succ(pred, succ, c) and - last(succ, _, completion) and + bindingset[parent, parentCompletion] + predicate condPropagateExpr( + AstNode parent, ConditionalCompletion parentCompletion, AstNode child, + ConditionalCompletion childCompletion + ) { + child = parent.(LogicalNotExpr).getOperand() and + childCompletion.getDual() = parentCompletion + or + childCompletion = parentCompletion and ( - last(succ.(LogicalNotExpr).getOperand(), pred, c) and - completion.(BooleanCompletion).getDual() = c + child = parent.(LogicalAndExpr).getAnOperand() or - last(succ.(LogicalAndExpr).getAnOperand(), pred, c) and - completion = c + child = parent.(LogicalOrExpr).getAnOperand() or - last(succ.(LogicalOrExpr).getAnOperand(), pred, c) and - completion = c + parent = any(ConditionalExpr ce | child = [ce.getThen(), ce.getElse()]) or - succ = - any(ConditionalExpr ce | - last([ce.getThen(), ce.getElse()], pred, c) and - completion = c - ) + child = parent.(SwitchExpr).getACase() or - succ = + child = parent.(SwitchCaseExpr).getBody() + or + parent = any(NullCoalescingExpr nce | - exists(Expr operand | - last(operand, pred, c) and - completion = c - | - if c instanceof NullnessCompletion - then operand = nce.getRightOperand() - else operand = nce.getAnOperand() - ) + if childCompletion instanceof NullnessCompletion + then child = nce.getRightOperand() + else child = nce.getAnOperand() ) + ) + or + child = parent.(NotPatternExpr).getPattern() and + childCompletion.getDual() = parentCompletion + or + child = parent.(IsExpr).getPattern() and + parentCompletion.(BooleanCompletion).getValue() = + childCompletion.(MatchingCompletion).getValue() + or + childCompletion = parentCompletion and + ( + child = parent.(AndPatternExpr).getAnOperand() or - last(succ.(SwitchExpr).getACase(), pred, c) and - completion = c - or - last(succ.(SwitchCaseExpr).getBody(), pred, c) and - completion = c - or - last(succ.(NotPatternExpr).getPattern(), pred, c) and - completion.(MatchingCompletion).getDual() = c - or - last(succ.(IsExpr).getPattern(), pred, c) and - completion.(BooleanCompletion).getValue() = c.(MatchingCompletion).getValue() - or - last(succ.(AndPatternExpr).getAnOperand(), pred, c) and - completion = c - or - last(succ.(OrPatternExpr).getAnOperand(), pred, c) and - completion = c + child = parent.(OrPatternExpr).getAnOperand() or - last(succ.(RecursivePatternExpr).getAChildExpr(), pred, c) and - completion = c + child = parent.(RecursivePatternExpr).getAChildExpr() or - last(succ.(PropertyPatternExpr).getPattern(_), pred, c) and - completion = c + child = parent.(PropertyPatternExpr).getPattern(_) ) } - - override predicate hasEntryScope(CfgScope scope, AstNode first) { none() } - - override predicate hasExit(AstNode pred, AstNode succ, Completion c) { - this.appliesTo(pred) and - succ(pred, succ, c) and - if c instanceof ConditionalCompletion then completion = c else any() - } - - override predicate hasExitScope(CfgScope scope, AstNode last, Completion c) { - this.appliesTo(last) and - scopeLast(scope, last, c) and - if c instanceof ConditionalCompletion then completion = c else any() - } - - override predicate hasSuccessor(AstNode pred, AstNode succ, Completion c) { none() } } + + int getNextListOrder() { result = InitializerSplitting::getNextListOrder() + 1 } } module AssertionSplitting { 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 4ac73cae9e9f..ccc0a333b9e7 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/ExternalFlow.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/ExternalFlow.qll @@ -318,7 +318,7 @@ private predicate elementSpec( or summaryModel(namespace, type, subtypes, name, signature, ext, _, _, _, _, _) or - neutralModel(namespace, type, name, signature, _, _) and ext = "" and subtypes = false + neutralModel(namespace, type, name, signature, _, _) and ext = "" and subtypes = true } private predicate elementSpec( @@ -602,7 +602,7 @@ private predicate interpretSummary( predicate interpretNeutral(UnboundCallable c, string kind, string provenance) { exists(string namespace, string type, string name, string signature | neutralModel(namespace, type, name, signature, kind, provenance) and - c = interpretElement(namespace, type, false, name, signature, "") + c = interpretElement(namespace, type, true, name, signature, "") ) } diff --git a/csharp/ql/lib/semmle/code/csharp/security/dataflow/LogForgingQuery.qll b/csharp/ql/lib/semmle/code/csharp/security/dataflow/LogForgingQuery.qll index 8181c9bcb74a..ebb481d2525e 100644 --- a/csharp/ql/lib/semmle/code/csharp/security/dataflow/LogForgingQuery.qll +++ b/csharp/ql/lib/semmle/code/csharp/security/dataflow/LogForgingQuery.qll @@ -42,7 +42,7 @@ private module LogForgingConfig implements DataFlow::ConfigSig { */ module LogForging = TaintTracking::Global; -/** A source of remote user input. */ +/** A source supported by the current threat model. */ private class ThreatModelSource extends Source instanceof ActiveThreatModelSource { } private class HtmlSanitizer extends Sanitizer { diff --git a/csharp/ql/src/CHANGELOG.md b/csharp/ql/src/CHANGELOG.md index 4c162b64d8f7..59a98aca72a2 100644 --- a/csharp/ql/src/CHANGELOG.md +++ b/csharp/ql/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.10 + +No user-facing changes. + ## 1.0.9 ### Minor Analysis Improvements diff --git a/csharp/ql/src/change-notes/released/1.0.10.md b/csharp/ql/src/change-notes/released/1.0.10.md new file mode 100644 index 000000000000..b601d8784532 --- /dev/null +++ b/csharp/ql/src/change-notes/released/1.0.10.md @@ -0,0 +1,3 @@ +## 1.0.10 + +No user-facing changes. diff --git a/csharp/ql/src/codeql-pack.release.yml b/csharp/ql/src/codeql-pack.release.yml index fb813c5ee050..3865dbcf4b2a 100644 --- a/csharp/ql/src/codeql-pack.release.yml +++ b/csharp/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.9 +lastReleaseVersion: 1.0.10 diff --git a/csharp/ql/src/qlpack.yml b/csharp/ql/src/qlpack.yml index 82e9607d7ab7..90e7ec11d865 100644 --- a/csharp/ql/src/qlpack.yml +++ b/csharp/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-queries -version: 1.0.9 +version: 1.0.10 groups: - csharp - queries diff --git a/csharp/ql/test/library-tests/dataflow/library/FlowSummaries.expected b/csharp/ql/test/library-tests/dataflow/library/FlowSummaries.expected index 1e30cae7031f..ccb38ae35f96 100644 --- a/csharp/ql/test/library-tests/dataflow/library/FlowSummaries.expected +++ b/csharp/ql/test/library-tests/dataflow/library/FlowSummaries.expected @@ -21187,6 +21187,233 @@ summary | System;WeakReference;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);Argument[this];Argument[0];taint;df-generated | | System;WeakReference;TryGetTarget;(T);Argument[this];ReturnValue;taint;df-generated | neutral +| Dapper;SqlMapper+GridReader;Dispose;();summary;df-generated | +| Dapper;SqlMapper+Identity;Equals;(Dapper.SqlMapper+Identity);summary;df-generated | +| Funq;Container;Dispose;();summary;df-generated | +| Microsoft.AspNetCore.Authentication.Cookies;PostConfigureCookieAuthenticationOptions;PostConfigure;(System.String,Microsoft.AspNetCore.Authentication.Cookies.CookieAuthenticationOptions);summary;df-generated | +| Microsoft.AspNetCore.Authentication.OAuth;OAuthTokenResponse;Dispose;();summary;df-generated | +| Microsoft.AspNetCore.Builder;ConfigureHostBuilder;Build;();summary;df-generated | +| Microsoft.AspNetCore.Builder;ConfigureHostBuilder;get_Properties;();summary;df-generated | +| Microsoft.AspNetCore.Builder;WebApplication;Dispose;();summary;df-generated | +| Microsoft.AspNetCore.Builder;WebApplication;StartAsync;(System.Threading.CancellationToken);summary;df-generated | +| Microsoft.AspNetCore.Builder;WebApplication;StopAsync;(System.Threading.CancellationToken);summary;df-generated | +| Microsoft.AspNetCore.Builder;WebApplication;get_Services;();summary;df-generated | +| Microsoft.AspNetCore.Components.Authorization;CascadingAuthenticationState;Dispose;();summary;df-generated | +| Microsoft.AspNetCore.Components.Forms;DataAnnotationsValidator;Dispose;();summary;df-generated | +| Microsoft.AspNetCore.Components.Forms;FieldIdentifier;Equals;(Microsoft.AspNetCore.Components.Forms.FieldIdentifier);summary;df-generated | +| Microsoft.AspNetCore.Components.Forms;InputBase;Dispose;();summary;df-generated | +| Microsoft.AspNetCore.Components.Forms;InputFile;Dispose;();summary;df-generated | +| Microsoft.AspNetCore.Components.Forms;ValidationMessage;Dispose;();summary;df-generated | +| Microsoft.AspNetCore.Components.Forms;ValidationSummary;Dispose;();summary;df-generated | +| Microsoft.AspNetCore.Components.RenderTree;Renderer;Dispose;();summary;df-generated | +| Microsoft.AspNetCore.Components.Rendering;RenderTreeBuilder;Dispose;();summary;df-generated | +| Microsoft.AspNetCore.Components.Routing;NavLink;Dispose;();summary;df-generated | +| Microsoft.AspNetCore.Components.Routing;Router;Dispose;();summary;df-generated | +| Microsoft.AspNetCore.Components.Sections;SectionContent;Dispose;();summary;df-generated | +| Microsoft.AspNetCore.Components.Sections;SectionOutlet;Dispose;();summary;df-generated | +| Microsoft.AspNetCore.Components.Server;RevalidatingServerAuthenticationStateProvider;Dispose;();summary;df-generated | +| Microsoft.AspNetCore.Components.Web;HtmlRenderer;Dispose;();summary;df-generated | +| Microsoft.AspNetCore.Components;OwningComponentBase;Dispose;();summary;df-generated | +| Microsoft.AspNetCore.Components;PersistingComponentStateSubscription;Dispose;();summary;df-generated | +| Microsoft.AspNetCore.Connections;ConnectionItems;Contains;(System.Collections.Generic.KeyValuePair);summary;df-generated | +| Microsoft.AspNetCore.Connections;ConnectionItems;ContainsKey;(System.Object);summary;df-generated | +| Microsoft.AspNetCore.Connections;ConnectionItems;Remove;(System.Collections.Generic.KeyValuePair);summary;df-generated | +| Microsoft.AspNetCore.Connections;ConnectionItems;Remove;(System.Object);summary;df-generated | +| Microsoft.AspNetCore.Connections;ConnectionItems;TryGetValue;(System.Object,System.Object);summary;df-generated | +| Microsoft.AspNetCore.Connections;ConnectionItems;get_Count;();summary;df-generated | +| Microsoft.AspNetCore.Connections;ConnectionItems;get_IsReadOnly;();summary;df-generated | +| Microsoft.AspNetCore.DataProtection;Secret;Dispose;();summary;df-generated | +| Microsoft.AspNetCore.Http.Connections;ConnectionOptionsSetup;Configure;(Microsoft.AspNetCore.Http.Connections.ConnectionOptions);summary;df-generated | +| Microsoft.AspNetCore.Http.Features;RequestServicesFeature;Dispose;();summary;df-generated | +| Microsoft.AspNetCore.Http;EndpointMetadataCollection+Enumerator;Dispose;();summary;df-generated | +| Microsoft.AspNetCore.Http;EndpointMetadataCollection+Enumerator;MoveNext;();summary;df-generated | +| Microsoft.AspNetCore.Http;EndpointMetadataCollection+Enumerator;Reset;();summary;df-generated | +| Microsoft.AspNetCore.Http;EndpointMetadataCollection+Enumerator;get_Current;();summary;df-generated | +| Microsoft.AspNetCore.Http;EndpointMetadataCollection;get_Count;();summary;df-generated | +| Microsoft.AspNetCore.Http;EndpointMetadataCollection;get_Item;(System.Int32);summary;df-generated | +| Microsoft.AspNetCore.Http;FormCollection+Enumerator;Dispose;();summary;df-generated | +| Microsoft.AspNetCore.Http;FormCollection+Enumerator;MoveNext;();summary;df-generated | +| Microsoft.AspNetCore.Http;FormCollection+Enumerator;Reset;();summary;df-generated | +| Microsoft.AspNetCore.Http;FormCollection+Enumerator;get_Current;();summary;df-generated | +| Microsoft.AspNetCore.Http;FragmentString;Equals;(Microsoft.AspNetCore.Http.FragmentString);summary;df-generated | +| Microsoft.AspNetCore.Http;HeaderDictionary+Enumerator;Dispose;();summary;df-generated | +| Microsoft.AspNetCore.Http;HeaderDictionary+Enumerator;MoveNext;();summary;df-generated | +| Microsoft.AspNetCore.Http;HeaderDictionary+Enumerator;Reset;();summary;df-generated | +| Microsoft.AspNetCore.Http;HeaderDictionary+Enumerator;get_Current;();summary;df-generated | +| Microsoft.AspNetCore.Http;HeaderDictionary;Contains;(System.Collections.Generic.KeyValuePair);summary;df-generated | +| Microsoft.AspNetCore.Http;HeaderDictionary;ContainsKey;(System.String);summary;df-generated | +| Microsoft.AspNetCore.Http;HeaderDictionary;Remove;(System.Collections.Generic.KeyValuePair);summary;df-generated | +| Microsoft.AspNetCore.Http;HeaderDictionary;Remove;(System.String);summary;df-generated | +| Microsoft.AspNetCore.Http;HeaderDictionary;TryGetValue;(System.String,Microsoft.Extensions.Primitives.StringValues);summary;df-generated | +| Microsoft.AspNetCore.Http;HeaderDictionary;get_Count;();summary;df-generated | +| Microsoft.AspNetCore.Http;HeaderDictionary;get_IsReadOnly;();summary;df-generated | +| Microsoft.AspNetCore.Http;HostString;Equals;(Microsoft.AspNetCore.Http.HostString);summary;df-generated | +| Microsoft.AspNetCore.Http;PathString;Equals;(Microsoft.AspNetCore.Http.PathString);summary;df-generated | +| Microsoft.AspNetCore.Http;QueryCollection+Enumerator;Dispose;();summary;df-generated | +| Microsoft.AspNetCore.Http;QueryCollection+Enumerator;MoveNext;();summary;df-generated | +| Microsoft.AspNetCore.Http;QueryCollection+Enumerator;Reset;();summary;df-generated | +| Microsoft.AspNetCore.Http;QueryCollection+Enumerator;get_Current;();summary;df-generated | +| Microsoft.AspNetCore.Http;QueryString;Equals;(Microsoft.AspNetCore.Http.QueryString);summary;df-generated | +| Microsoft.AspNetCore.Identity;RoleManager;Dispose;();summary;df-generated | +| Microsoft.AspNetCore.Identity;RoleStoreBase;Dispose;();summary;df-generated | +| Microsoft.AspNetCore.Identity;UserManager;Dispose;();summary;df-generated | +| Microsoft.AspNetCore.Identity;UserStoreBase;Dispose;();summary;df-generated | +| Microsoft.AspNetCore.Mvc.Diagnostics;EventData+Enumerator;Dispose;();summary;df-generated | +| Microsoft.AspNetCore.Mvc.Diagnostics;EventData+Enumerator;MoveNext;();summary;df-generated | +| Microsoft.AspNetCore.Mvc.Diagnostics;EventData+Enumerator;Reset;();summary;df-generated | +| Microsoft.AspNetCore.Mvc.Diagnostics;EventData+Enumerator;get_Current;();summary;df-generated | +| Microsoft.AspNetCore.Mvc.Diagnostics;EventData;get_Count;();summary;df-generated | +| Microsoft.AspNetCore.Mvc.Diagnostics;EventData;get_Item;(System.Int32);summary;df-generated | +| Microsoft.AspNetCore.Mvc.Formatters.Xml;DelegatingEnumerator;Dispose;();summary;df-generated | +| Microsoft.AspNetCore.Mvc.Formatters.Xml;DelegatingEnumerator;MoveNext;();summary;df-generated | +| Microsoft.AspNetCore.Mvc.Formatters.Xml;DelegatingEnumerator;Reset;();summary;df-generated | +| Microsoft.AspNetCore.Mvc.Formatters.Xml;DelegatingEnumerator;get_Current;();summary;df-generated | +| Microsoft.AspNetCore.Mvc.Formatters.Xml;ProblemDetailsWrapper;GetSchema;();summary;df-generated | +| Microsoft.AspNetCore.Mvc.Formatters.Xml;SerializableErrorWrapper;GetSchema;();summary;df-generated | +| Microsoft.AspNetCore.Mvc.Infrastructure;ConfigureCompatibilityOptions;PostConfigure;(System.String,TOptions);summary;df-generated | +| Microsoft.AspNetCore.Mvc.ModelBinding.Metadata;ModelMetadataIdentity;Equals;(Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelMetadataIdentity);summary;df-generated | +| Microsoft.AspNetCore.Mvc.ModelBinding.Validation;ValidationStateDictionary;Contains;(System.Collections.Generic.KeyValuePair);summary;df-generated | +| Microsoft.AspNetCore.Mvc.ModelBinding.Validation;ValidationStateDictionary;ContainsKey;(System.Object);summary;df-generated | +| Microsoft.AspNetCore.Mvc.ModelBinding.Validation;ValidationStateDictionary;Remove;(System.Collections.Generic.KeyValuePair);summary;df-generated | +| Microsoft.AspNetCore.Mvc.ModelBinding.Validation;ValidationStateDictionary;Remove;(System.Object);summary;df-generated | +| Microsoft.AspNetCore.Mvc.ModelBinding.Validation;ValidationStateDictionary;TryGetValue;(System.Object,Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationStateEntry);summary;df-generated | +| Microsoft.AspNetCore.Mvc.ModelBinding.Validation;ValidationStateDictionary;get_Count;();summary;df-generated | +| Microsoft.AspNetCore.Mvc.ModelBinding.Validation;ValidationStateDictionary;get_IsReadOnly;();summary;df-generated | +| Microsoft.AspNetCore.Mvc.ModelBinding.Validation;ValidationStateDictionary;get_Item;(System.Object);summary;df-generated | +| Microsoft.AspNetCore.Mvc.ModelBinding.Validation;ValidationStateDictionary;get_Keys;();summary;df-generated | +| Microsoft.AspNetCore.Mvc.ModelBinding.Validation;ValidationStateDictionary;get_Values;();summary;df-generated | +| Microsoft.AspNetCore.Mvc.ModelBinding.Validation;ValidationVisitor+StateManager;Dispose;();summary;df-generated | +| Microsoft.AspNetCore.Mvc.ModelBinding;BindingSource;Equals;(Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource);summary;df-generated | +| Microsoft.AspNetCore.Mvc.ModelBinding;ModelBindingContext+NestedScope;Dispose;();summary;df-generated | +| Microsoft.AspNetCore.Mvc.ModelBinding;ModelBindingResult;Equals;(Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingResult);summary;df-generated | +| Microsoft.AspNetCore.Mvc.ModelBinding;ModelMetadata;Equals;(Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata);summary;df-generated | +| Microsoft.AspNetCore.Mvc.ModelBinding;ModelStateDictionary+Enumerator;Dispose;();summary;df-generated | +| Microsoft.AspNetCore.Mvc.ModelBinding;ModelStateDictionary+Enumerator;MoveNext;();summary;df-generated | +| Microsoft.AspNetCore.Mvc.ModelBinding;ModelStateDictionary+Enumerator;Reset;();summary;df-generated | +| Microsoft.AspNetCore.Mvc.ModelBinding;ModelStateDictionary+Enumerator;get_Current;();summary;df-generated | +| Microsoft.AspNetCore.Mvc.ModelBinding;ModelStateDictionary+KeyEnumerator;Dispose;();summary;df-generated | +| Microsoft.AspNetCore.Mvc.ModelBinding;ModelStateDictionary+KeyEnumerator;MoveNext;();summary;df-generated | +| Microsoft.AspNetCore.Mvc.ModelBinding;ModelStateDictionary+KeyEnumerator;Reset;();summary;df-generated | +| Microsoft.AspNetCore.Mvc.ModelBinding;ModelStateDictionary+KeyEnumerator;get_Current;();summary;df-generated | +| Microsoft.AspNetCore.Mvc.ModelBinding;ModelStateDictionary+ValueEnumerator;Dispose;();summary;df-generated | +| Microsoft.AspNetCore.Mvc.ModelBinding;ModelStateDictionary+ValueEnumerator;MoveNext;();summary;df-generated | +| Microsoft.AspNetCore.Mvc.ModelBinding;ModelStateDictionary+ValueEnumerator;Reset;();summary;df-generated | +| Microsoft.AspNetCore.Mvc.ModelBinding;ModelStateDictionary+ValueEnumerator;get_Current;();summary;df-generated | +| Microsoft.AspNetCore.Mvc.ModelBinding;ModelStateDictionary;ContainsKey;(System.String);summary;df-generated | +| Microsoft.AspNetCore.Mvc.ModelBinding;ModelStateDictionary;TryGetValue;(System.String,Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateEntry);summary;df-generated | +| Microsoft.AspNetCore.Mvc.ModelBinding;ModelStateDictionary;get_Count;();summary;df-generated | +| Microsoft.AspNetCore.Mvc.ModelBinding;ModelStateDictionary;get_Item;(System.String);summary;df-generated | +| Microsoft.AspNetCore.Mvc.ModelBinding;ModelStateDictionary;get_Keys;();summary;df-generated | +| Microsoft.AspNetCore.Mvc.ModelBinding;ModelStateDictionary;get_Values;();summary;df-generated | +| Microsoft.AspNetCore.Mvc.ModelBinding;ValueProviderResult;Equals;(Microsoft.AspNetCore.Mvc.ModelBinding.ValueProviderResult);summary;df-generated | +| Microsoft.AspNetCore.Mvc.Rendering;MvcForm;Dispose;();summary;df-generated | +| Microsoft.AspNetCore.Mvc.TagHelpers.Cache;CacheTagKey;Equals;(Microsoft.AspNetCore.Mvc.TagHelpers.Cache.CacheTagKey);summary;df-generated | +| Microsoft.AspNetCore.Mvc.ViewFeatures;AttributeDictionary+Enumerator;Dispose;();summary;df-generated | +| Microsoft.AspNetCore.Mvc.ViewFeatures;AttributeDictionary+Enumerator;MoveNext;();summary;df-generated | +| Microsoft.AspNetCore.Mvc.ViewFeatures;AttributeDictionary+Enumerator;Reset;();summary;df-generated | +| Microsoft.AspNetCore.Mvc.ViewFeatures;AttributeDictionary+Enumerator;get_Current;();summary;df-generated | +| Microsoft.AspNetCore.Mvc.ViewFeatures;AttributeDictionary;Contains;(System.Collections.Generic.KeyValuePair);summary;df-generated | +| Microsoft.AspNetCore.Mvc.ViewFeatures;AttributeDictionary;ContainsKey;(System.String);summary;df-generated | +| Microsoft.AspNetCore.Mvc.ViewFeatures;AttributeDictionary;Remove;(System.Collections.Generic.KeyValuePair);summary;df-generated | +| Microsoft.AspNetCore.Mvc.ViewFeatures;AttributeDictionary;Remove;(System.String);summary;df-generated | +| Microsoft.AspNetCore.Mvc.ViewFeatures;AttributeDictionary;TryGetValue;(System.String,System.String);summary;df-generated | +| Microsoft.AspNetCore.Mvc.ViewFeatures;AttributeDictionary;get_Count;();summary;df-generated | +| Microsoft.AspNetCore.Mvc.ViewFeatures;AttributeDictionary;get_IsReadOnly;();summary;df-generated | +| Microsoft.AspNetCore.Mvc.ViewFeatures;AttributeDictionary;get_Item;(System.String);summary;df-generated | +| Microsoft.AspNetCore.Mvc.ViewFeatures;AttributeDictionary;get_Keys;();summary;df-generated | +| Microsoft.AspNetCore.Mvc.ViewFeatures;AttributeDictionary;get_Values;();summary;df-generated | +| Microsoft.AspNetCore.Mvc.ViewFeatures;TempDataDictionary;Contains;(System.Collections.Generic.KeyValuePair);summary;df-generated | +| Microsoft.AspNetCore.Mvc.ViewFeatures;TempDataDictionary;ContainsKey;(System.String);summary;df-generated | +| Microsoft.AspNetCore.Mvc.ViewFeatures;TempDataDictionary;Remove;(System.Collections.Generic.KeyValuePair);summary;df-generated | +| Microsoft.AspNetCore.Mvc.ViewFeatures;TempDataDictionary;Remove;(System.String);summary;df-generated | +| Microsoft.AspNetCore.Mvc.ViewFeatures;TempDataDictionary;TryGetValue;(System.String,System.Object);summary;df-generated | +| Microsoft.AspNetCore.Mvc.ViewFeatures;TempDataDictionary;get_Count;();summary;df-generated | +| Microsoft.AspNetCore.Mvc.ViewFeatures;TempDataDictionary;get_IsReadOnly;();summary;df-generated | +| Microsoft.AspNetCore.Mvc.ViewFeatures;ViewDataDictionary;Contains;(System.Collections.Generic.KeyValuePair);summary;df-generated | +| Microsoft.AspNetCore.Mvc.ViewFeatures;ViewDataDictionary;ContainsKey;(System.String);summary;df-generated | +| Microsoft.AspNetCore.Mvc.ViewFeatures;ViewDataDictionary;Remove;(System.Collections.Generic.KeyValuePair);summary;df-generated | +| Microsoft.AspNetCore.Mvc.ViewFeatures;ViewDataDictionary;Remove;(System.String);summary;df-generated | +| Microsoft.AspNetCore.Mvc.ViewFeatures;ViewDataDictionary;TryGetValue;(System.String,System.Object);summary;df-generated | +| Microsoft.AspNetCore.Mvc.ViewFeatures;ViewDataDictionary;get_Count;();summary;df-generated | +| Microsoft.AspNetCore.Mvc.ViewFeatures;ViewDataDictionary;get_IsReadOnly;();summary;df-generated | +| Microsoft.AspNetCore.Mvc;Controller;Dispose;();summary;df-generated | +| Microsoft.AspNetCore.Mvc;RemoteAttributeBase;IsValid;(System.Object);summary;df-generated | +| Microsoft.AspNetCore.Razor.TagHelpers;NullHtmlEncoder;FindFirstCharacterToEncode;(System.Char*,System.Int32);summary;df-generated | +| Microsoft.AspNetCore.Razor.TagHelpers;NullHtmlEncoder;TryEncodeUnicodeScalar;(System.Int32,System.Char*,System.Int32,System.Int32);summary;df-generated | +| Microsoft.AspNetCore.Razor.TagHelpers;NullHtmlEncoder;WillEncode;(System.Int32);summary;df-generated | +| Microsoft.AspNetCore.Razor.TagHelpers;NullHtmlEncoder;get_MaxOutputCharactersPerInputCharacter;();summary;df-generated | +| Microsoft.AspNetCore.Razor.TagHelpers;TagHelperAttributeList;Remove;(Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute);summary;df-generated | +| Microsoft.AspNetCore.Razor.TagHelpers;TagHelperAttributeList;RemoveAt;(System.Int32);summary;df-generated | +| Microsoft.AspNetCore.Razor.TagHelpers;TagHelperAttributeList;get_IsReadOnly;();summary;df-generated | +| Microsoft.AspNetCore.ResponseCompression;BrotliCompressionProviderOptions;get_Value;();summary;df-generated | +| Microsoft.AspNetCore.ResponseCompression;GzipCompressionProviderOptions;get_Value;();summary;df-generated | +| Microsoft.AspNetCore.Routing.Matching;EndpointMetadataComparer;Compare;(Microsoft.AspNetCore.Http.Endpoint,Microsoft.AspNetCore.Http.Endpoint);summary;df-generated | +| Microsoft.AspNetCore.Routing.Matching;EndpointMetadataComparer;Compare;(Microsoft.AspNetCore.Http.Endpoint,Microsoft.AspNetCore.Http.Endpoint);summary;df-generated | +| Microsoft.AspNetCore.Routing;CompositeEndpointDataSource;Dispose;();summary;df-generated | +| Microsoft.AspNetCore.Routing;RouteValueDictionary+Enumerator;Dispose;();summary;df-generated | +| Microsoft.AspNetCore.Routing;RouteValueDictionary+Enumerator;MoveNext;();summary;df-generated | +| Microsoft.AspNetCore.Routing;RouteValueDictionary+Enumerator;Reset;();summary;df-generated | +| Microsoft.AspNetCore.Routing;RouteValueDictionary+Enumerator;get_Current;();summary;df-generated | +| Microsoft.AspNetCore.Routing;RouteValueDictionary;Contains;(System.Collections.Generic.KeyValuePair);summary;df-generated | +| Microsoft.AspNetCore.Routing;RouteValueDictionary;ContainsKey;(System.String);summary;df-generated | +| Microsoft.AspNetCore.Routing;RouteValueDictionary;Remove;(System.Collections.Generic.KeyValuePair);summary;df-generated | +| Microsoft.AspNetCore.Routing;RouteValueDictionary;Remove;(System.String);summary;df-generated | +| Microsoft.AspNetCore.Routing;RouteValueDictionary;TryGetValue;(System.String,System.Object);summary;df-generated | +| Microsoft.AspNetCore.Routing;RouteValueDictionary;get_Count;();summary;df-generated | +| Microsoft.AspNetCore.Routing;RouteValueDictionary;get_IsReadOnly;();summary;df-generated | +| Microsoft.AspNetCore.Routing;RouteValueDictionary;get_Item;(System.String);summary;df-generated | +| Microsoft.AspNetCore.Routing;RouteValueDictionary;get_Keys;();summary;df-generated | +| Microsoft.AspNetCore.Routing;RouteValueDictionary;get_Values;();summary;df-generated | +| Microsoft.AspNetCore.Routing;RouteValueEqualityComparer;Equals;(System.Object,System.Object);summary;df-generated | +| Microsoft.AspNetCore.Routing;RouteValueEqualityComparer;GetHashCode;(System.Object);summary;df-generated | +| Microsoft.AspNetCore.Server.HttpSys;DelegationRule;Dispose;();summary;df-generated | +| Microsoft.AspNetCore.Server.HttpSys;HttpSysException;get_ErrorCode;();summary;df-generated | +| Microsoft.AspNetCore.Server.HttpSys;UrlPrefixCollection;Contains;(Microsoft.AspNetCore.Server.HttpSys.UrlPrefix);summary;df-generated | +| Microsoft.AspNetCore.Server.HttpSys;UrlPrefixCollection;Remove;(Microsoft.AspNetCore.Server.HttpSys.UrlPrefix);summary;df-generated | +| Microsoft.AspNetCore.Server.HttpSys;UrlPrefixCollection;get_Count;();summary;df-generated | +| Microsoft.AspNetCore.Server.HttpSys;UrlPrefixCollection;get_IsReadOnly;();summary;df-generated | +| Microsoft.AspNetCore.Server.Kestrel.Core;KestrelServer;Dispose;();summary;df-generated | +| Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets;SocketConnectionContextFactory;Dispose;();summary;df-generated | +| Microsoft.AspNetCore.SignalR;Hub;Dispose;();summary;df-generated | +| Microsoft.AspNetCore.SignalR;HubConnectionStore+Enumerator;Dispose;();summary;df-generated | +| Microsoft.AspNetCore.SignalR;HubConnectionStore+Enumerator;MoveNext;();summary;df-generated | +| Microsoft.AspNetCore.SignalR;HubConnectionStore+Enumerator;Reset;();summary;df-generated | +| Microsoft.AspNetCore.SignalR;HubConnectionStore+Enumerator;get_Current;();summary;df-generated | +| Microsoft.AspNetCore.SignalR;HubOptionsSetup;Configure;(Microsoft.AspNetCore.SignalR.HubOptions);summary;df-generated | +| Microsoft.AspNetCore.SignalR;HubOptionsSetup;Configure;(Microsoft.AspNetCore.SignalR.HubOptions);summary;df-generated | +| Microsoft.AspNetCore.WebUtilities;BufferedReadStream;Dispose;(System.Boolean);summary;df-generated | +| Microsoft.AspNetCore.WebUtilities;BufferedReadStream;Flush;();summary;df-generated | +| Microsoft.AspNetCore.WebUtilities;BufferedReadStream;Seek;(System.Int64,System.IO.SeekOrigin);summary;df-generated | +| Microsoft.AspNetCore.WebUtilities;BufferedReadStream;SetLength;(System.Int64);summary;df-generated | +| Microsoft.AspNetCore.WebUtilities;BufferedReadStream;get_CanRead;();summary;df-generated | +| Microsoft.AspNetCore.WebUtilities;BufferedReadStream;get_CanSeek;();summary;df-generated | +| Microsoft.AspNetCore.WebUtilities;BufferedReadStream;get_CanTimeout;();summary;df-generated | +| Microsoft.AspNetCore.WebUtilities;BufferedReadStream;get_CanWrite;();summary;df-generated | +| Microsoft.AspNetCore.WebUtilities;BufferedReadStream;get_Length;();summary;df-generated | +| Microsoft.AspNetCore.WebUtilities;FileBufferingReadStream;Dispose;(System.Boolean);summary;df-generated | +| Microsoft.AspNetCore.WebUtilities;FileBufferingReadStream;Flush;();summary;df-generated | +| Microsoft.AspNetCore.WebUtilities;FileBufferingReadStream;Seek;(System.Int64,System.IO.SeekOrigin);summary;df-generated | +| Microsoft.AspNetCore.WebUtilities;FileBufferingReadStream;SetLength;(System.Int64);summary;df-generated | +| Microsoft.AspNetCore.WebUtilities;FileBufferingReadStream;get_CanRead;();summary;df-generated | +| Microsoft.AspNetCore.WebUtilities;FileBufferingReadStream;get_CanSeek;();summary;df-generated | +| Microsoft.AspNetCore.WebUtilities;FileBufferingReadStream;get_CanWrite;();summary;df-generated | +| Microsoft.AspNetCore.WebUtilities;FileBufferingReadStream;get_Length;();summary;df-generated | +| Microsoft.AspNetCore.WebUtilities;FileBufferingWriteStream;Dispose;(System.Boolean);summary;df-generated | +| Microsoft.AspNetCore.WebUtilities;FileBufferingWriteStream;Flush;();summary;df-generated | +| Microsoft.AspNetCore.WebUtilities;FileBufferingWriteStream;Seek;(System.Int64,System.IO.SeekOrigin);summary;df-generated | +| Microsoft.AspNetCore.WebUtilities;FileBufferingWriteStream;SetLength;(System.Int64);summary;df-generated | +| Microsoft.AspNetCore.WebUtilities;FileBufferingWriteStream;get_CanRead;();summary;df-generated | +| Microsoft.AspNetCore.WebUtilities;FileBufferingWriteStream;get_CanSeek;();summary;df-generated | +| Microsoft.AspNetCore.WebUtilities;FileBufferingWriteStream;get_CanWrite;();summary;df-generated | +| Microsoft.AspNetCore.WebUtilities;FileBufferingWriteStream;get_Length;();summary;df-generated | +| Microsoft.AspNetCore.WebUtilities;FormReader;Dispose;();summary;df-generated | +| Microsoft.AspNetCore.WebUtilities;HttpRequestStreamReader;Dispose;(System.Boolean);summary;df-generated | +| Microsoft.AspNetCore.WebUtilities;HttpRequestStreamReader;Peek;();summary;df-generated | +| Microsoft.AspNetCore.WebUtilities;HttpResponseStreamWriter;Dispose;(System.Boolean);summary;df-generated | +| Microsoft.AspNetCore.WebUtilities;HttpResponseStreamWriter;Flush;();summary;df-generated | +| Microsoft.AspNetCore.WebUtilities;HttpResponseStreamWriter;Write;(System.Char);summary;df-generated | +| Microsoft.AspNetCore.WebUtilities;HttpResponseStreamWriter;Write;(System.ReadOnlySpan);summary;df-generated | +| Microsoft.AspNetCore.WebUtilities;HttpResponseStreamWriter;WriteLine;(System.ReadOnlySpan);summary;df-generated | | Microsoft.CSharp.RuntimeBinder;Binder;Convert;(Microsoft.CSharp.RuntimeBinder.CSharpBinderFlags,System.Type,System.Type);summary;df-generated | | Microsoft.CSharp.RuntimeBinder;RuntimeBinderException;RuntimeBinderException;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);summary;df-generated | | Microsoft.CSharp.RuntimeBinder;RuntimeBinderException;RuntimeBinderException;(System.String);summary;df-generated | @@ -21196,6 +21423,7 @@ neutral | Microsoft.CSharp.RuntimeBinder;RuntimeBinderInternalCompilerException;RuntimeBinderInternalCompilerException;(System.String,System.Exception);summary;df-generated | | Microsoft.CSharp;CSharpCodeProvider;GetConverter;(System.Type);summary;df-generated | | Microsoft.CSharp;CSharpCodeProvider;get_FileExtension;();summary;df-generated | +| Microsoft.EntityFrameworkCore;DbContext;Dispose;();summary;df-generated | | Microsoft.Extensions.Caching.Distributed;DistributedCacheExtensions;GetString;(Microsoft.Extensions.Caching.Distributed.IDistributedCache,System.String);summary;df-generated | | Microsoft.Extensions.Caching.Distributed;DistributedCacheExtensions;GetStringAsync;(Microsoft.Extensions.Caching.Distributed.IDistributedCache,System.String,System.Threading.CancellationToken);summary;df-generated | | Microsoft.Extensions.Caching.Distributed;DistributedCacheExtensions;Set;(Microsoft.Extensions.Caching.Distributed.IDistributedCache,System.String,System.Byte[]);summary;df-generated | @@ -21239,6 +21467,7 @@ neutral | Microsoft.Extensions.Caching.Memory;MemoryCache;get_Count;();summary;df-generated | | Microsoft.Extensions.Caching.Memory;MemoryCacheEntryOptions;get_ExpirationTokens;();summary;df-generated | | Microsoft.Extensions.Caching.Memory;MemoryCacheEntryOptions;get_PostEvictionCallbacks;();summary;df-generated | +| Microsoft.Extensions.Caching.Memory;MemoryCacheOptions;get_Value;();summary;df-generated | | Microsoft.Extensions.Configuration.CommandLine;CommandLineConfigurationProvider;CommandLineConfigurationProvider;(System.Collections.Generic.IEnumerable,System.Collections.Generic.IDictionary);summary;df-generated | | Microsoft.Extensions.Configuration.CommandLine;CommandLineConfigurationProvider;Load;();summary;df-generated | | Microsoft.Extensions.Configuration.EnvironmentVariables;EnvironmentVariablesConfigurationProvider;Load;();summary;df-generated | @@ -21251,6 +21480,8 @@ neutral | Microsoft.Extensions.Configuration.Json;JsonConfigurationProvider;Load;(System.IO.Stream);summary;df-generated | | Microsoft.Extensions.Configuration.Json;JsonStreamConfigurationProvider;JsonStreamConfigurationProvider;(Microsoft.Extensions.Configuration.Json.JsonStreamConfigurationSource);summary;df-generated | | Microsoft.Extensions.Configuration.Json;JsonStreamConfigurationProvider;Load;(System.IO.Stream);summary;df-generated | +| Microsoft.Extensions.Configuration.KeyPerFile;KeyPerFileConfigurationProvider;Dispose;();summary;df-generated | +| Microsoft.Extensions.Configuration.KeyPerFile;KeyPerFileConfigurationProvider;Load;();summary;df-generated | | Microsoft.Extensions.Configuration.Memory;MemoryConfigurationProvider;Add;(System.String,System.String);summary;df-generated | | Microsoft.Extensions.Configuration.UserSecrets;UserSecretsIdAttribute;UserSecretsIdAttribute;(System.String);summary;df-generated | | Microsoft.Extensions.Configuration.UserSecrets;UserSecretsIdAttribute;get_UserSecretsId;();summary;df-generated | @@ -21283,6 +21514,7 @@ neutral | Microsoft.Extensions.Configuration;ConfigurationProvider;OnReload;();summary;df-generated | | Microsoft.Extensions.Configuration;ConfigurationProvider;Set;(System.String,System.String);summary;df-generated | | Microsoft.Extensions.Configuration;ConfigurationReloadToken;OnReload;();summary;df-generated | +| Microsoft.Extensions.Configuration;ConfigurationReloadToken;get_ActiveChangeCallbacks;();summary;df-generated | | Microsoft.Extensions.Configuration;ConfigurationReloadToken;get_HasChanged;();summary;df-generated | | Microsoft.Extensions.Configuration;ConfigurationRoot;Dispose;();summary;df-generated | | Microsoft.Extensions.Configuration;ConfigurationRoot;GetChildren;();summary;df-generated | @@ -21339,6 +21571,7 @@ neutral | Microsoft.Extensions.DependencyInjection;ActivatorUtilities;CreateInstance;(System.IServiceProvider,System.Type,System.Object[]);summary;df-generated | | Microsoft.Extensions.DependencyInjection;ActivatorUtilities;CreateInstance;(System.IServiceProvider,System.Object[]);summary;df-generated | | Microsoft.Extensions.DependencyInjection;AsyncServiceScope;Dispose;();summary;df-generated | +| Microsoft.Extensions.DependencyInjection;DefaultServiceProviderFactory;CreateBuilder;(Microsoft.Extensions.DependencyInjection.IServiceCollection);summary;df-generated | | Microsoft.Extensions.DependencyInjection;DefaultServiceProviderFactory;CreateServiceProvider;(Microsoft.Extensions.DependencyInjection.IServiceCollection);summary;df-generated | | Microsoft.Extensions.DependencyInjection;FromKeyedServicesAttribute;FromKeyedServicesAttribute;(System.Object);summary;df-generated | | Microsoft.Extensions.DependencyInjection;FromKeyedServicesAttribute;get_Key;();summary;df-generated | @@ -21354,6 +21587,7 @@ neutral | Microsoft.Extensions.DependencyInjection;ISocketsHttpHandlerBuilder;get_Services;();summary;df-generated | | Microsoft.Extensions.DependencyInjection;ISupportRequiredService;GetRequiredService;(System.Type);summary;df-generated | | Microsoft.Extensions.DependencyInjection;KeyedService;get_AnyKey;();summary;df-generated | +| Microsoft.Extensions.DependencyInjection;OAuthPostConfigureOptions;PostConfigure;(System.String,TOptions);summary;df-generated | | Microsoft.Extensions.DependencyInjection;OptionsServiceCollectionExtensions;AddOptions;(Microsoft.Extensions.DependencyInjection.IServiceCollection);summary;df-generated | | Microsoft.Extensions.DependencyInjection;OptionsServiceCollectionExtensions;AddOptions;(Microsoft.Extensions.DependencyInjection.IServiceCollection,System.String);summary;df-generated | | Microsoft.Extensions.DependencyInjection;OptionsServiceCollectionExtensions;AddOptionsWithValidateOnStart;(Microsoft.Extensions.DependencyInjection.IServiceCollection,System.String);summary;df-generated | @@ -21420,6 +21654,10 @@ neutral | Microsoft.Extensions.Diagnostics.Metrics;InstrumentRule;get_Scopes;();summary;df-generated | | Microsoft.Extensions.Diagnostics.Metrics;MetricsOptions;get_Rules;();summary;df-generated | | Microsoft.Extensions.FileProviders.Composite;CompositeDirectoryContents;get_Exists;();summary;df-generated | +| Microsoft.Extensions.FileProviders.Embedded;EmbeddedResourceFileInfo;get_Exists;();summary;df-generated | +| Microsoft.Extensions.FileProviders.Embedded;EmbeddedResourceFileInfo;get_IsDirectory;();summary;df-generated | +| Microsoft.Extensions.FileProviders.Embedded;EmbeddedResourceFileInfo;get_LastModified;();summary;df-generated | +| Microsoft.Extensions.FileProviders.Embedded;EmbeddedResourceFileInfo;get_Length;();summary;df-generated | | Microsoft.Extensions.FileProviders.Internal;PhysicalDirectoryContents;PhysicalDirectoryContents;(System.String);summary;df-generated | | Microsoft.Extensions.FileProviders.Internal;PhysicalDirectoryContents;PhysicalDirectoryContents;(System.String,Microsoft.Extensions.FileProviders.Physical.ExclusionFilters);summary;df-generated | | Microsoft.Extensions.FileProviders.Internal;PhysicalDirectoryContents;get_Exists;();summary;df-generated | @@ -21435,12 +21673,16 @@ neutral | Microsoft.Extensions.FileProviders.Physical;PhysicalFilesWatcher;Dispose;();summary;df-generated | | Microsoft.Extensions.FileProviders.Physical;PhysicalFilesWatcher;Dispose;(System.Boolean);summary;df-generated | | Microsoft.Extensions.FileProviders.Physical;PhysicalFilesWatcher;PhysicalFilesWatcher;(System.String,System.IO.FileSystemWatcher,System.Boolean);summary;df-generated | +| Microsoft.Extensions.FileProviders.Physical;PollingFileChangeToken;get_ActiveChangeCallbacks;();summary;df-generated | | Microsoft.Extensions.FileProviders.Physical;PollingFileChangeToken;get_HasChanged;();summary;df-generated | | Microsoft.Extensions.FileProviders.Physical;PollingWildCardChangeToken;GetLastWriteUtc;(System.String);summary;df-generated | | Microsoft.Extensions.FileProviders.Physical;PollingWildCardChangeToken;PollingWildCardChangeToken;(System.String,System.String);summary;df-generated | +| Microsoft.Extensions.FileProviders.Physical;PollingWildCardChangeToken;get_ActiveChangeCallbacks;();summary;df-generated | | Microsoft.Extensions.FileProviders.Physical;PollingWildCardChangeToken;get_HasChanged;();summary;df-generated | | Microsoft.Extensions.FileProviders;CompositeFileProvider;GetFileInfo;(System.String);summary;df-generated | | Microsoft.Extensions.FileProviders;CompositeFileProvider;Watch;(System.String);summary;df-generated | +| Microsoft.Extensions.FileProviders;EmbeddedFileProvider;GetFileInfo;(System.String);summary;df-generated | +| Microsoft.Extensions.FileProviders;EmbeddedFileProvider;Watch;(System.String);summary;df-generated | | Microsoft.Extensions.FileProviders;IDirectoryContents;get_Exists;();summary;df-generated | | Microsoft.Extensions.FileProviders;IFileInfo;get_Exists;();summary;df-generated | | Microsoft.Extensions.FileProviders;IFileInfo;get_IsDirectory;();summary;df-generated | @@ -21448,6 +21690,8 @@ neutral | Microsoft.Extensions.FileProviders;IFileInfo;get_Length;();summary;df-generated | | Microsoft.Extensions.FileProviders;IFileProvider;GetFileInfo;(System.String);summary;df-generated | | Microsoft.Extensions.FileProviders;IFileProvider;Watch;(System.String);summary;df-generated | +| Microsoft.Extensions.FileProviders;ManifestEmbeddedFileProvider;GetFileInfo;(System.String);summary;df-generated | +| Microsoft.Extensions.FileProviders;ManifestEmbeddedFileProvider;Watch;(System.String);summary;df-generated | | Microsoft.Extensions.FileProviders;NotFoundDirectoryContents;get_Exists;();summary;df-generated | | Microsoft.Extensions.FileProviders;NotFoundDirectoryContents;get_Singleton;();summary;df-generated | | Microsoft.Extensions.FileProviders;NotFoundFileInfo;NotFoundFileInfo;(System.String);summary;df-generated | @@ -21638,12 +21882,15 @@ neutral | Microsoft.Extensions.Logging.Configuration;LoggerProviderOptionsChangeTokenSource;LoggerProviderOptionsChangeTokenSource;(Microsoft.Extensions.Logging.Configuration.ILoggerProviderConfiguration);summary;df-generated | | Microsoft.Extensions.Logging.Configuration;LoggingBuilderConfigurationExtensions;AddConfiguration;(Microsoft.Extensions.Logging.ILoggingBuilder);summary;df-generated | | Microsoft.Extensions.Logging.Console;ConfigurationConsoleLoggerSettings;TryGetSwitch;(System.String,Microsoft.Extensions.Logging.LogLevel);summary;df-generated | +| Microsoft.Extensions.Logging.Console;ConfigurationConsoleLoggerSettings;get_ChangeToken;();summary;df-generated | | Microsoft.Extensions.Logging.Console;ConfigurationConsoleLoggerSettings;get_IncludeScopes;();summary;df-generated | | Microsoft.Extensions.Logging.Console;ConsoleFormatter;ConsoleFormatter;(System.String);summary;df-generated | | Microsoft.Extensions.Logging.Console;ConsoleFormatter;get_Name;();summary;df-generated | | Microsoft.Extensions.Logging.Console;ConsoleLoggerProvider;ConsoleLoggerProvider;(Microsoft.Extensions.Options.IOptionsMonitor);summary;df-generated | | Microsoft.Extensions.Logging.Console;ConsoleLoggerProvider;Dispose;();summary;df-generated | | Microsoft.Extensions.Logging.Console;ConsoleLoggerSettings;TryGetSwitch;(System.String,Microsoft.Extensions.Logging.LogLevel);summary;df-generated | +| Microsoft.Extensions.Logging.Console;ConsoleLoggerSettings;get_ChangeToken;();summary;df-generated | +| Microsoft.Extensions.Logging.Console;ConsoleLoggerSettings;get_IncludeScopes;();summary;df-generated | | Microsoft.Extensions.Logging.Console;IConsoleLoggerSettings;TryGetSwitch;(System.String,Microsoft.Extensions.Logging.LogLevel);summary;df-generated | | Microsoft.Extensions.Logging.Console;IConsoleLoggerSettings;get_ChangeToken;();summary;df-generated | | Microsoft.Extensions.Logging.Console;IConsoleLoggerSettings;get_IncludeScopes;();summary;df-generated | @@ -21734,6 +21981,7 @@ neutral | Microsoft.Extensions.Logging;ProviderAliasAttribute;ProviderAliasAttribute;(System.String);summary;df-generated | | Microsoft.Extensions.Logging;ProviderAliasAttribute;get_Alias;();summary;df-generated | | Microsoft.Extensions.Options;ConfigurationChangeTokenSource;ConfigurationChangeTokenSource;(Microsoft.Extensions.Configuration.IConfiguration);summary;df-generated | +| Microsoft.Extensions.Options;ConfigurationChangeTokenSource;GetChangeToken;();summary;df-generated | | Microsoft.Extensions.Options;ConfigurationChangeTokenSource;get_Name;();summary;df-generated | | Microsoft.Extensions.Options;ConfigureFromConfigurationOptions;ConfigureFromConfigurationOptions;(Microsoft.Extensions.Configuration.IConfiguration);summary;df-generated | | Microsoft.Extensions.Options;ConfigureNamedOptions;Configure;(System.String,TOptions);summary;df-generated | @@ -21902,6 +22150,7 @@ neutral | Microsoft.Extensions.Options;ValidateOptionsResult;Fail;(System.String);summary;df-generated | | Microsoft.Extensions.Options;ValidateOptionsResultBuilder;Build;();summary;df-generated | | Microsoft.Extensions.Options;ValidateOptionsResultBuilder;Clear;();summary;df-generated | +| Microsoft.Extensions.Primitives;CancellationChangeToken;get_ActiveChangeCallbacks;();summary;df-generated | | Microsoft.Extensions.Primitives;CancellationChangeToken;get_HasChanged;();summary;df-generated | | Microsoft.Extensions.Primitives;CompositeChangeToken;CompositeChangeToken;(System.Collections.Generic.IReadOnlyList);summary;df-generated | | Microsoft.Extensions.Primitives;CompositeChangeToken;get_ActiveChangeCallbacks;();summary;df-generated | @@ -21957,10 +22206,22 @@ neutral | Microsoft.Extensions.Primitives;StringTokenizer+Enumerator;Dispose;();summary;df-generated | | Microsoft.Extensions.Primitives;StringTokenizer+Enumerator;MoveNext;();summary;df-generated | | Microsoft.Extensions.Primitives;StringTokenizer+Enumerator;Reset;();summary;df-generated | +| Microsoft.Extensions.Primitives;StringTokenizer+Enumerator;get_Current;();summary;df-generated | | Microsoft.Extensions.Primitives;StringValues+Enumerator;Dispose;();summary;df-generated | | Microsoft.Extensions.Primitives;StringValues+Enumerator;Enumerator;(Microsoft.Extensions.Primitives.StringValues);summary;df-generated | | Microsoft.Extensions.Primitives;StringValues+Enumerator;MoveNext;();summary;df-generated | | Microsoft.Extensions.Primitives;StringValues+Enumerator;Reset;();summary;df-generated | +| Microsoft.Extensions.Primitives;StringValues+Enumerator;get_Current;();summary;df-generated | +| Microsoft.Extensions.Primitives;StringValues;Contains;(System.String);summary;df-generated | +| Microsoft.Extensions.Primitives;StringValues;Equals;(Microsoft.Extensions.Primitives.StringValues);summary;df-generated | +| Microsoft.Extensions.Primitives;StringValues;Equals;(System.String);summary;df-generated | +| Microsoft.Extensions.Primitives;StringValues;Equals;(System.String[]);summary;df-generated | +| Microsoft.Extensions.Primitives;StringValues;IndexOf;(System.String);summary;df-generated | +| Microsoft.Extensions.Primitives;StringValues;Remove;(System.String);summary;df-generated | +| Microsoft.Extensions.Primitives;StringValues;RemoveAt;(System.Int32);summary;df-generated | +| Microsoft.Extensions.Primitives;StringValues;get_Count;();summary;df-generated | +| Microsoft.Extensions.Primitives;StringValues;get_IsReadOnly;();summary;df-generated | +| Microsoft.Extensions.Primitives;StringValues;get_Item;(System.Int32);summary;df-generated | | Microsoft.Extensions.Primitives;StringValues;op_Equality;(Microsoft.Extensions.Primitives.StringValues,Microsoft.Extensions.Primitives.StringValues);summary;df-generated | | Microsoft.Extensions.Primitives;StringValues;op_Equality;(Microsoft.Extensions.Primitives.StringValues,System.Object);summary;df-generated | | Microsoft.Extensions.Primitives;StringValues;op_Equality;(Microsoft.Extensions.Primitives.StringValues,System.String);summary;df-generated | @@ -21975,6 +22236,44 @@ neutral | Microsoft.Extensions.Primitives;StringValues;op_Inequality;(System.Object,Microsoft.Extensions.Primitives.StringValues);summary;df-generated | | Microsoft.Extensions.Primitives;StringValues;op_Inequality;(System.String,Microsoft.Extensions.Primitives.StringValues);summary;df-generated | | Microsoft.Extensions.Primitives;StringValues;op_Inequality;(System.String[],Microsoft.Extensions.Primitives.StringValues);summary;df-generated | +| Microsoft.Extensions.WebEncoders.Testing;HtmlTestEncoder;FindFirstCharacterToEncode;(System.Char*,System.Int32);summary;df-generated | +| Microsoft.Extensions.WebEncoders.Testing;HtmlTestEncoder;TryEncodeUnicodeScalar;(System.Int32,System.Char*,System.Int32,System.Int32);summary;df-generated | +| Microsoft.Extensions.WebEncoders.Testing;HtmlTestEncoder;WillEncode;(System.Int32);summary;df-generated | +| Microsoft.Extensions.WebEncoders.Testing;HtmlTestEncoder;get_MaxOutputCharactersPerInputCharacter;();summary;df-generated | +| Microsoft.Extensions.WebEncoders.Testing;JavaScriptTestEncoder;FindFirstCharacterToEncode;(System.Char*,System.Int32);summary;df-generated | +| Microsoft.Extensions.WebEncoders.Testing;JavaScriptTestEncoder;TryEncodeUnicodeScalar;(System.Int32,System.Char*,System.Int32,System.Int32);summary;df-generated | +| Microsoft.Extensions.WebEncoders.Testing;JavaScriptTestEncoder;WillEncode;(System.Int32);summary;df-generated | +| Microsoft.Extensions.WebEncoders.Testing;JavaScriptTestEncoder;get_MaxOutputCharactersPerInputCharacter;();summary;df-generated | +| Microsoft.Extensions.WebEncoders.Testing;UrlTestEncoder;FindFirstCharacterToEncode;(System.Char*,System.Int32);summary;df-generated | +| Microsoft.Extensions.WebEncoders.Testing;UrlTestEncoder;TryEncodeUnicodeScalar;(System.Int32,System.Char*,System.Int32,System.Int32);summary;df-generated | +| Microsoft.Extensions.WebEncoders.Testing;UrlTestEncoder;WillEncode;(System.Int32);summary;df-generated | +| Microsoft.Extensions.WebEncoders.Testing;UrlTestEncoder;get_MaxOutputCharactersPerInputCharacter;();summary;df-generated | +| Microsoft.JSInterop.Implementation;JSInProcessObjectReference;Dispose;();summary;df-generated | +| Microsoft.JSInterop;DotNetObjectReference;Dispose;();summary;df-generated | +| Microsoft.JSInterop;DotNetStreamReference;Dispose;();summary;df-generated | +| Microsoft.JSInterop;JSRuntime;Dispose;();summary;df-generated | +| Microsoft.Net.Http.Headers;MediaTypeHeaderValueComparer;Compare;(Microsoft.Net.Http.Headers.MediaTypeHeaderValue,Microsoft.Net.Http.Headers.MediaTypeHeaderValue);summary;df-generated | +| Microsoft.Net.Http.Headers;StringWithQualityHeaderValueComparer;Compare;(Microsoft.Net.Http.Headers.StringWithQualityHeaderValue,Microsoft.Net.Http.Headers.StringWithQualityHeaderValue);summary;df-generated | +| Microsoft.SqlServer.Server;SqlDataRecord;GetBoolean;(System.Int32);summary;df-generated | +| Microsoft.SqlServer.Server;SqlDataRecord;GetByte;(System.Int32);summary;df-generated | +| Microsoft.SqlServer.Server;SqlDataRecord;GetBytes;(System.Int32,System.Int64,System.Byte[],System.Int32,System.Int32);summary;df-generated | +| Microsoft.SqlServer.Server;SqlDataRecord;GetChar;(System.Int32);summary;df-generated | +| Microsoft.SqlServer.Server;SqlDataRecord;GetChars;(System.Int32,System.Int64,System.Char[],System.Int32,System.Int32);summary;df-generated | +| Microsoft.SqlServer.Server;SqlDataRecord;GetData;(System.Int32);summary;df-generated | +| Microsoft.SqlServer.Server;SqlDataRecord;GetDataTypeName;(System.Int32);summary;manual | +| Microsoft.SqlServer.Server;SqlDataRecord;GetDateTime;(System.Int32);summary;df-generated | +| Microsoft.SqlServer.Server;SqlDataRecord;GetDecimal;(System.Int32);summary;df-generated | +| Microsoft.SqlServer.Server;SqlDataRecord;GetDouble;(System.Int32);summary;df-generated | +| Microsoft.SqlServer.Server;SqlDataRecord;GetFieldType;(System.Int32);summary;df-generated | +| Microsoft.SqlServer.Server;SqlDataRecord;GetFloat;(System.Int32);summary;df-generated | +| Microsoft.SqlServer.Server;SqlDataRecord;GetGuid;(System.Int32);summary;manual | +| Microsoft.SqlServer.Server;SqlDataRecord;GetInt16;(System.Int32);summary;df-generated | +| Microsoft.SqlServer.Server;SqlDataRecord;GetInt32;(System.Int32);summary;df-generated | +| Microsoft.SqlServer.Server;SqlDataRecord;GetInt64;(System.Int32);summary;df-generated | +| Microsoft.SqlServer.Server;SqlDataRecord;GetName;(System.Int32);summary;manual | +| Microsoft.SqlServer.Server;SqlDataRecord;GetOrdinal;(System.String);summary;df-generated | +| Microsoft.SqlServer.Server;SqlDataRecord;IsDBNull;(System.Int32);summary;df-generated | +| Microsoft.SqlServer.Server;SqlDataRecord;get_FieldCount;();summary;df-generated | | Microsoft.VisualBasic.CompilerServices;BooleanType;FromObject;(System.Object);summary;df-generated | | Microsoft.VisualBasic.CompilerServices;BooleanType;FromString;(System.String);summary;df-generated | | Microsoft.VisualBasic.CompilerServices;ByteType;FromObject;(System.Object);summary;df-generated | @@ -22648,6 +22947,238 @@ neutral | Microsoft.Win32;UserPreferenceChangedEventArgs;get_Category;();summary;df-generated | | Microsoft.Win32;UserPreferenceChangingEventArgs;UserPreferenceChangingEventArgs;(Microsoft.Win32.UserPreferenceCategory);summary;df-generated | | Microsoft.Win32;UserPreferenceChangingEventArgs;get_Category;();summary;df-generated | +| Newtonsoft.Json.Linq;JArray;Contains;(Newtonsoft.Json.Linq.JToken);summary;df-generated | +| Newtonsoft.Json.Linq;JArray;IndexOf;(Newtonsoft.Json.Linq.JToken);summary;df-generated | +| Newtonsoft.Json.Linq;JArray;Remove;(Newtonsoft.Json.Linq.JToken);summary;df-generated | +| Newtonsoft.Json.Linq;JArray;RemoveAt;(System.Int32);summary;df-generated | +| Newtonsoft.Json.Linq;JArray;get_IsReadOnly;();summary;df-generated | +| Newtonsoft.Json.Linq;JContainer;AddIndex;(System.ComponentModel.PropertyDescriptor);summary;df-generated | +| Newtonsoft.Json.Linq;JContainer;Contains;(Newtonsoft.Json.Linq.JToken);summary;df-generated | +| Newtonsoft.Json.Linq;JContainer;Contains;(System.Object);summary;df-generated | +| Newtonsoft.Json.Linq;JContainer;IndexOf;(Newtonsoft.Json.Linq.JToken);summary;df-generated | +| Newtonsoft.Json.Linq;JContainer;IndexOf;(System.Object);summary;df-generated | +| Newtonsoft.Json.Linq;JContainer;Remove;(Newtonsoft.Json.Linq.JToken);summary;df-generated | +| Newtonsoft.Json.Linq;JContainer;RemoveAt;(System.Int32);summary;df-generated | +| Newtonsoft.Json.Linq;JContainer;RemoveIndex;(System.ComponentModel.PropertyDescriptor);summary;df-generated | +| Newtonsoft.Json.Linq;JContainer;RemoveSort;();summary;df-generated | +| Newtonsoft.Json.Linq;JContainer;get_AllowEdit;();summary;df-generated | +| Newtonsoft.Json.Linq;JContainer;get_AllowNew;();summary;df-generated | +| Newtonsoft.Json.Linq;JContainer;get_AllowRemove;();summary;df-generated | +| Newtonsoft.Json.Linq;JContainer;get_Count;();summary;df-generated | +| Newtonsoft.Json.Linq;JContainer;get_IsFixedSize;();summary;df-generated | +| Newtonsoft.Json.Linq;JContainer;get_IsReadOnly;();summary;df-generated | +| Newtonsoft.Json.Linq;JContainer;get_IsSorted;();summary;df-generated | +| Newtonsoft.Json.Linq;JContainer;get_IsSynchronized;();summary;df-generated | +| Newtonsoft.Json.Linq;JContainer;get_SortDirection;();summary;df-generated | +| Newtonsoft.Json.Linq;JContainer;get_SupportsChangeNotification;();summary;df-generated | +| Newtonsoft.Json.Linq;JContainer;get_SupportsSearching;();summary;df-generated | +| Newtonsoft.Json.Linq;JContainer;get_SupportsSorting;();summary;df-generated | +| Newtonsoft.Json.Linq;JEnumerable;Equals;(Newtonsoft.Json.Linq.JEnumerable);summary;df-generated | +| Newtonsoft.Json.Linq;JObject;Contains;(System.Collections.Generic.KeyValuePair);summary;df-generated | +| Newtonsoft.Json.Linq;JObject;ContainsKey;(System.String);summary;df-generated | +| Newtonsoft.Json.Linq;JObject;GetClassName;();summary;df-generated | +| Newtonsoft.Json.Linq;JObject;GetComponentName;();summary;df-generated | +| Newtonsoft.Json.Linq;JObject;GetConverter;();summary;df-generated | +| Newtonsoft.Json.Linq;JObject;GetDefaultEvent;();summary;df-generated | +| Newtonsoft.Json.Linq;JObject;GetDefaultProperty;();summary;df-generated | +| Newtonsoft.Json.Linq;JObject;GetEditor;(System.Type);summary;df-generated | +| Newtonsoft.Json.Linq;JObject;GetEvents;();summary;df-generated | +| Newtonsoft.Json.Linq;JObject;GetEvents;(System.Attribute[]);summary;df-generated | +| Newtonsoft.Json.Linq;JObject;Remove;(System.Collections.Generic.KeyValuePair);summary;df-generated | +| Newtonsoft.Json.Linq;JObject;Remove;(System.String);summary;df-generated | +| Newtonsoft.Json.Linq;JObject;TryGetValue;(System.String,Newtonsoft.Json.Linq.JToken);summary;df-generated | +| Newtonsoft.Json.Linq;JObject;get_IsReadOnly;();summary;df-generated | +| Newtonsoft.Json.Linq;JPropertyDescriptor;CanResetValue;(System.Object);summary;df-generated | +| Newtonsoft.Json.Linq;JPropertyDescriptor;ShouldSerializeValue;(System.Object);summary;df-generated | +| Newtonsoft.Json.Linq;JPropertyDescriptor;get_ComponentType;();summary;df-generated | +| Newtonsoft.Json.Linq;JPropertyDescriptor;get_IsReadOnly;();summary;df-generated | +| Newtonsoft.Json.Linq;JPropertyDescriptor;get_NameHashCode;();summary;df-generated | +| Newtonsoft.Json.Linq;JPropertyDescriptor;get_PropertyType;();summary;df-generated | +| Newtonsoft.Json.Linq;JToken;GetMetaObject;(System.Linq.Expressions.Expression);summary;df-generated | +| Newtonsoft.Json.Linq;JTokenEqualityComparer;Equals;(Newtonsoft.Json.Linq.JToken,Newtonsoft.Json.Linq.JToken);summary;df-generated | +| Newtonsoft.Json.Linq;JTokenEqualityComparer;GetHashCode;(Newtonsoft.Json.Linq.JToken);summary;df-generated | +| Newtonsoft.Json.Linq;JValue;CompareTo;(Newtonsoft.Json.Linq.JValue);summary;df-generated | +| Newtonsoft.Json.Linq;JValue;CompareTo;(System.Object);summary;df-generated | +| Newtonsoft.Json.Linq;JValue;Equals;(Newtonsoft.Json.Linq.JValue);summary;df-generated | +| Newtonsoft.Json.Linq;JValue;GetTypeCode;();summary;df-generated | +| Newtonsoft.Json.Linq;JValue;ToBoolean;(System.IFormatProvider);summary;df-generated | +| Newtonsoft.Json.Linq;JValue;ToByte;(System.IFormatProvider);summary;df-generated | +| Newtonsoft.Json.Linq;JValue;ToChar;(System.IFormatProvider);summary;df-generated | +| Newtonsoft.Json.Linq;JValue;ToDouble;(System.IFormatProvider);summary;df-generated | +| Newtonsoft.Json.Linq;JValue;ToInt16;(System.IFormatProvider);summary;df-generated | +| Newtonsoft.Json.Linq;JValue;ToInt32;(System.IFormatProvider);summary;df-generated | +| Newtonsoft.Json.Linq;JValue;ToInt64;(System.IFormatProvider);summary;df-generated | +| Newtonsoft.Json.Linq;JValue;ToSByte;(System.IFormatProvider);summary;df-generated | +| Newtonsoft.Json.Linq;JValue;ToSingle;(System.IFormatProvider);summary;df-generated | +| Newtonsoft.Json.Linq;JValue;ToUInt16;(System.IFormatProvider);summary;df-generated | +| Newtonsoft.Json.Linq;JValue;ToUInt32;(System.IFormatProvider);summary;df-generated | +| Newtonsoft.Json.Linq;JValue;ToUInt64;(System.IFormatProvider);summary;df-generated | +| Newtonsoft.Json.Serialization;DefaultSerializationBinder;BindToName;(System.Type,System.String,System.String);summary;df-generated | +| Newtonsoft.Json.Serialization;DefaultSerializationBinder;BindToType;(System.String,System.String);summary;df-generated | +| Newtonsoft.Json.Serialization;JsonPropertyCollection;GetKeyForItem;(Newtonsoft.Json.Serialization.JsonProperty);summary;df-generated | +| Newtonsoft.Json;JsonReader;Dispose;();summary;df-generated | +| Newtonsoft.Json;JsonWriter;Dispose;();summary;df-generated | +| ServiceStack.AsyncEx;CancellationTokenTaskSource;Dispose;();summary;df-generated | +| ServiceStack.Caching;CacheClientWithPrefix;Dispose;();summary;df-generated | +| ServiceStack.Caching;MemoryCacheClient;Dispose;();summary;df-generated | +| ServiceStack.Caching;MultiCacheClient;Dispose;();summary;df-generated | +| ServiceStack.Messaging;BackgroundMqClient;Dispose;();summary;df-generated | +| ServiceStack.Messaging;BackgroundMqCollection;Dispose;();summary;df-generated | +| ServiceStack.Messaging;BackgroundMqMessageFactory;Dispose;();summary;df-generated | +| ServiceStack.Messaging;BackgroundMqService;Dispose;();summary;df-generated | +| ServiceStack.Messaging;BackgroundMqWorker;Dispose;();summary;df-generated | +| ServiceStack.Messaging;InMemoryMessageQueueClient;Dispose;();summary;df-generated | +| ServiceStack.Messaging;InMemoryTransientMessageFactory;Dispose;();summary;df-generated | +| ServiceStack.Messaging;MessageHandler;Dispose;();summary;df-generated | +| ServiceStack.Messaging;MessageQueueClientFactory;Dispose;();summary;df-generated | +| ServiceStack.Messaging;RedisMessageFactory;Dispose;();summary;df-generated | +| ServiceStack.Messaging;RedisMessageProducer;Dispose;();summary;df-generated | +| ServiceStack.Messaging;RedisMessageQueueClient;Dispose;();summary;df-generated | +| ServiceStack.Messaging;RedisMessageQueueClientFactory;Dispose;();summary;df-generated | +| ServiceStack.Messaging;TransientMessageServiceBase;Dispose;();summary;df-generated | +| ServiceStack.MiniProfiler.Data;ProfiledCommand;Cancel;();summary;df-generated | +| ServiceStack.MiniProfiler.Data;ProfiledCommand;CreateDbParameter;();summary;df-generated | +| ServiceStack.MiniProfiler.Data;ProfiledCommand;Dispose;(System.Boolean);summary;df-generated | +| ServiceStack.MiniProfiler.Data;ProfiledCommand;ExecuteNonQuery;();summary;df-generated | +| ServiceStack.MiniProfiler.Data;ProfiledCommand;Prepare;();summary;df-generated | +| ServiceStack.MiniProfiler.Data;ProfiledConnection;ChangeDatabase;(System.String);summary;df-generated | +| ServiceStack.MiniProfiler.Data;ProfiledConnection;Close;();summary;df-generated | +| ServiceStack.MiniProfiler.Data;ProfiledConnection;Dispose;(System.Boolean);summary;df-generated | +| ServiceStack.MiniProfiler.Data;ProfiledConnection;Open;();summary;df-generated | +| ServiceStack.MiniProfiler.Data;ProfiledConnection;get_CanRaiseEvents;();summary;df-generated | +| ServiceStack.MiniProfiler.Data;ProfiledConnection;get_ConnectionTimeout;();summary;df-generated | +| ServiceStack.MiniProfiler.Data;ProfiledConnection;get_DataSource;();summary;df-generated | +| ServiceStack.MiniProfiler.Data;ProfiledConnection;get_Database;();summary;df-generated | +| ServiceStack.MiniProfiler.Data;ProfiledConnection;get_State;();summary;df-generated | +| ServiceStack.MiniProfiler.Data;ProfiledDbDataReader;Close;();summary;df-generated | +| ServiceStack.MiniProfiler.Data;ProfiledDbDataReader;GetBoolean;(System.Int32);summary;df-generated | +| ServiceStack.MiniProfiler.Data;ProfiledDbDataReader;GetByte;(System.Int32);summary;df-generated | +| ServiceStack.MiniProfiler.Data;ProfiledDbDataReader;GetBytes;(System.Int32,System.Int64,System.Byte[],System.Int32,System.Int32);summary;df-generated | +| ServiceStack.MiniProfiler.Data;ProfiledDbDataReader;GetChar;(System.Int32);summary;df-generated | +| ServiceStack.MiniProfiler.Data;ProfiledDbDataReader;GetChars;(System.Int32,System.Int64,System.Char[],System.Int32,System.Int32);summary;df-generated | +| ServiceStack.MiniProfiler.Data;ProfiledDbDataReader;GetDataTypeName;(System.Int32);summary;manual | +| ServiceStack.MiniProfiler.Data;ProfiledDbDataReader;GetDateTime;(System.Int32);summary;df-generated | +| ServiceStack.MiniProfiler.Data;ProfiledDbDataReader;GetDecimal;(System.Int32);summary;df-generated | +| ServiceStack.MiniProfiler.Data;ProfiledDbDataReader;GetDouble;(System.Int32);summary;df-generated | +| ServiceStack.MiniProfiler.Data;ProfiledDbDataReader;GetFieldType;(System.Int32);summary;df-generated | +| ServiceStack.MiniProfiler.Data;ProfiledDbDataReader;GetFloat;(System.Int32);summary;df-generated | +| ServiceStack.MiniProfiler.Data;ProfiledDbDataReader;GetGuid;(System.Int32);summary;manual | +| ServiceStack.MiniProfiler.Data;ProfiledDbDataReader;GetInt16;(System.Int32);summary;df-generated | +| ServiceStack.MiniProfiler.Data;ProfiledDbDataReader;GetInt32;(System.Int32);summary;df-generated | +| ServiceStack.MiniProfiler.Data;ProfiledDbDataReader;GetInt64;(System.Int32);summary;df-generated | +| ServiceStack.MiniProfiler.Data;ProfiledDbDataReader;GetName;(System.Int32);summary;manual | +| ServiceStack.MiniProfiler.Data;ProfiledDbDataReader;GetOrdinal;(System.String);summary;df-generated | +| ServiceStack.MiniProfiler.Data;ProfiledDbDataReader;IsDBNull;(System.Int32);summary;df-generated | +| ServiceStack.MiniProfiler.Data;ProfiledDbDataReader;NextResult;();summary;df-generated | +| ServiceStack.MiniProfiler.Data;ProfiledDbDataReader;Read;();summary;df-generated | +| ServiceStack.MiniProfiler.Data;ProfiledDbDataReader;get_Depth;();summary;df-generated | +| ServiceStack.MiniProfiler.Data;ProfiledDbDataReader;get_FieldCount;();summary;df-generated | +| ServiceStack.MiniProfiler.Data;ProfiledDbDataReader;get_HasRows;();summary;df-generated | +| ServiceStack.MiniProfiler.Data;ProfiledDbDataReader;get_IsClosed;();summary;df-generated | +| ServiceStack.MiniProfiler.Data;ProfiledDbDataReader;get_RecordsAffected;();summary;df-generated | +| ServiceStack.MiniProfiler.Data;ProfiledDbTransaction;Commit;();summary;df-generated | +| ServiceStack.MiniProfiler.Data;ProfiledDbTransaction;Dispose;(System.Boolean);summary;df-generated | +| ServiceStack.MiniProfiler.Data;ProfiledDbTransaction;Rollback;();summary;df-generated | +| ServiceStack.MiniProfiler.Data;ProfiledDbTransaction;get_IsolationLevel;();summary;df-generated | +| ServiceStack.MiniProfiler.Data;ProfiledProviderFactory;CreateCommand;();summary;df-generated | +| ServiceStack.MiniProfiler.Data;ProfiledProviderFactory;CreateConnection;();summary;df-generated | +| ServiceStack.MiniProfiler.Data;ProfiledProviderFactory;CreateConnectionStringBuilder;();summary;df-generated | +| ServiceStack.MiniProfiler.Data;ProfiledProviderFactory;CreateParameter;();summary;df-generated | +| ServiceStack.NetCore;NetCoreContainerAdapter;Dispose;();summary;df-generated | +| ServiceStack.NetCore;NetCoreHeadersCollection;GetValues;(System.String);summary;df-generated | +| ServiceStack.NetCore;NetCoreHeadersCollection;Remove;(System.String);summary;df-generated | +| ServiceStack.NetCore;NetCoreHeadersCollection;get_Count;();summary;df-generated | +| ServiceStack.NetCore;NetCoreQueryStringCollection;GetValues;(System.String);summary;df-generated | +| ServiceStack.NetCore;NetCoreQueryStringCollection;Remove;(System.String);summary;df-generated | +| ServiceStack.NetCore;NetCoreQueryStringCollection;get_Count;();summary;df-generated | +| ServiceStack.OrmLite.Dapper;SqlMapper+GridReader;Dispose;();summary;df-generated | +| ServiceStack.OrmLite.Dapper;SqlMapper+Identity;Equals;(ServiceStack.OrmLite.Dapper.SqlMapper+Identity);summary;df-generated | +| ServiceStack.OrmLite;OrmLiteCommand;Cancel;();summary;df-generated | +| ServiceStack.OrmLite;OrmLiteCommand;CreateParameter;();summary;df-generated | +| ServiceStack.OrmLite;OrmLiteCommand;Dispose;();summary;df-generated | +| ServiceStack.OrmLite;OrmLiteCommand;ExecuteNonQuery;();summary;df-generated | +| ServiceStack.OrmLite;OrmLiteCommand;ExecuteReader;(System.Data.CommandBehavior);summary;df-generated | +| ServiceStack.OrmLite;OrmLiteCommand;Prepare;();summary;df-generated | +| ServiceStack.OrmLite;OrmLiteConnection;ChangeDatabase;(System.String);summary;df-generated | +| ServiceStack.OrmLite;OrmLiteConnection;Close;();summary;df-generated | +| ServiceStack.OrmLite;OrmLiteConnection;Dispose;();summary;df-generated | +| ServiceStack.OrmLite;OrmLiteConnection;Open;();summary;df-generated | +| ServiceStack.OrmLite;OrmLiteConnection;get_ConnectionTimeout;();summary;df-generated | +| ServiceStack.OrmLite;OrmLiteConnection;get_Database;();summary;df-generated | +| ServiceStack.OrmLite;OrmLiteConnection;get_State;();summary;df-generated | +| ServiceStack.OrmLite;OrmLiteDataParameter;get_IsNullable;();summary;df-generated | +| ServiceStack.OrmLite;OrmLitePersistenceProvider;Dispose;();summary;df-generated | +| ServiceStack.OrmLite;OrmLiteResultsFilter;Dispose;();summary;df-generated | +| ServiceStack.OrmLite;OrmLiteSPStatement;Dispose;();summary;df-generated | +| ServiceStack.OrmLite;OrmLiteTransaction;Commit;();summary;df-generated | +| ServiceStack.OrmLite;OrmLiteTransaction;Dispose;();summary;df-generated | +| ServiceStack.OrmLite;OrmLiteTransaction;Rollback;();summary;df-generated | +| ServiceStack.OrmLite;OrmLiteTransaction;get_IsolationLevel;();summary;df-generated | +| ServiceStack.Script;PageResult;Dispose;();summary;df-generated | +| ServiceStack.Script;ScriptContext;Dispose;();summary;df-generated | +| ServiceStack.Script;SharpCodePage;Dispose;();summary;df-generated | +| ServiceStack.Serialization;XmlSerializerWrapper;IsStartObject;(System.Xml.XmlDictionaryReader);summary;df-generated | +| ServiceStack.Serialization;XmlSerializerWrapper;ReadObject;(System.Xml.XmlDictionaryReader);summary;df-generated | +| ServiceStack.Serialization;XmlSerializerWrapper;ReadObject;(System.Xml.XmlDictionaryReader,System.Boolean);summary;df-generated | +| ServiceStack.Serialization;XmlSerializerWrapper;WriteEndObject;(System.Xml.XmlDictionaryWriter);summary;df-generated | +| ServiceStack.Serialization;XmlSerializerWrapper;WriteObject;(System.Xml.XmlDictionaryWriter,System.Object);summary;df-generated | +| ServiceStack.Serialization;XmlSerializerWrapper;WriteObjectContent;(System.Xml.XmlDictionaryWriter,System.Object);summary;df-generated | +| ServiceStack.Serialization;XmlSerializerWrapper;WriteStartObject;(System.Xml.XmlDictionaryWriter,System.Object);summary;df-generated | +| ServiceStack.Text.Pools;PooledObject;Dispose;();summary;df-generated | +| ServiceStack.Text;DirectStreamWriter;Flush;();summary;df-generated | +| ServiceStack.Text;DirectStreamWriter;Write;(System.Char);summary;df-generated | +| ServiceStack.Text;JsConfigScope;Dispose;();summary;df-generated | +| ServiceStack.Text;RecyclableMemoryStream;Close;();summary;df-generated | +| ServiceStack.Text;RecyclableMemoryStream;Dispose;(System.Boolean);summary;df-generated | +| ServiceStack.Text;RecyclableMemoryStream;ReadByte;();summary;df-generated | +| ServiceStack.Text;RecyclableMemoryStream;Seek;(System.Int64,System.IO.SeekOrigin);summary;df-generated | +| ServiceStack.Text;RecyclableMemoryStream;SetLength;(System.Int64);summary;df-generated | +| ServiceStack.Text;RecyclableMemoryStream;Write;(System.ReadOnlySpan);summary;df-generated | +| ServiceStack.Text;RecyclableMemoryStream;WriteByte;(System.Byte);summary;df-generated | +| ServiceStack.Text;RecyclableMemoryStream;get_CanRead;();summary;df-generated | +| ServiceStack.Text;RecyclableMemoryStream;get_CanSeek;();summary;df-generated | +| ServiceStack.Text;RecyclableMemoryStream;get_CanTimeout;();summary;df-generated | +| ServiceStack.Text;RecyclableMemoryStream;get_CanWrite;();summary;df-generated | +| ServiceStack.Text;RecyclableMemoryStream;get_Length;();summary;df-generated | +| ServiceStack.Validation;ExecOnceOnly;Dispose;();summary;df-generated | +| ServiceStack;AsyncTimer;Dispose;();summary;df-generated | +| ServiceStack;AuthenticateAttribute;Equals;(System.Object);summary;df-generated | +| ServiceStack;AuthenticateAttribute;GetHashCode;();summary;df-generated | +| ServiceStack;ByteArrayComparer;Equals;(System.Byte[],System.Byte[]);summary;df-generated | +| ServiceStack;ByteArrayComparer;GetHashCode;(System.Byte[]);summary;df-generated | +| ServiceStack;CachedServiceClient;Dispose;();summary;df-generated | +| ServiceStack;Defer;Dispose;();summary;df-generated | +| ServiceStack;DisposableTracker;Dispose;();summary;df-generated | +| ServiceStack;DynamicJson;TryGetMember;(System.Dynamic.GetMemberBinder,System.Object);summary;df-generated | +| ServiceStack;DynamicJson;TrySetMember;(System.Dynamic.SetMemberBinder,System.Object);summary;df-generated | +| ServiceStack;EventSubscription;Dispose;();summary;df-generated | +| ServiceStack;HttpResult;Dispose;();summary;df-generated | +| ServiceStack;JsonApiClient;Dispose;();summary;df-generated | +| ServiceStack;LispReplTcpServer;Dispose;();summary;df-generated | +| ServiceStack;LogicBase;Dispose;();summary;df-generated | +| ServiceStack;LongRange;Equals;(ServiceStack.LongRange);summary;df-generated | +| ServiceStack;MemoryServerEvents;Dispose;();summary;df-generated | +| ServiceStack;NameValue;Equals;(ServiceStack.NameValue);summary;df-generated | +| ServiceStack;ProfilerDiagnosticObserver;OnCompleted;();summary;df-generated | +| ServiceStack;ProfilerDiagnosticObserver;OnError;(System.Exception);summary;df-generated | +| ServiceStack;ProfilerDiagnosticObserver;OnNext;(System.Collections.Generic.KeyValuePair);summary;df-generated | +| ServiceStack;ProfilerDiagnosticObserver;OnNext;(System.Diagnostics.DiagnosticListener);summary;df-generated | +| ServiceStack;QueryDataSource;Dispose;();summary;df-generated | +| ServiceStack;RepositoryBase;Dispose;();summary;df-generated | +| ServiceStack;RequiredClaimAttribute;Equals;(System.Object);summary;df-generated | +| ServiceStack;RequiredClaimAttribute;GetHashCode;();summary;df-generated | +| ServiceStack;RequiredPermissionAttribute;Equals;(System.Object);summary;df-generated | +| ServiceStack;RequiredPermissionAttribute;GetHashCode;();summary;df-generated | +| ServiceStack;RequiredRoleAttribute;Equals;(System.Object);summary;df-generated | +| ServiceStack;RequiredRoleAttribute;GetHashCode;();summary;df-generated | +| ServiceStack;RouteAttribute;Equals;(System.Object);summary;df-generated | +| ServiceStack;RouteAttribute;GetHashCode;();summary;df-generated | +| ServiceStack;ServerEventsClient;Dispose;();summary;df-generated | +| ServiceStack;Service;Dispose;();summary;df-generated | +| ServiceStack;ServiceClientBase;Dispose;();summary;df-generated | +| ServiceStack;ServiceStackCodePage;Dispose;();summary;df-generated | +| ServiceStack;ServiceStackHost;Dispose;();summary;df-generated | +| ServiceStack;ServiceStackProvider;Dispose;();summary;df-generated | | System.Buffers.Binary;BinaryPrimitives;ReadDoubleBigEndian;(System.ReadOnlySpan);summary;df-generated | | System.Buffers.Binary;BinaryPrimitives;ReadDoubleLittleEndian;(System.ReadOnlySpan);summary;df-generated | | System.Buffers.Binary;BinaryPrimitives;ReadHalfBigEndian;(System.ReadOnlySpan);summary;df-generated | @@ -22819,6 +23350,7 @@ neutral | System.Buffers;ArrayBufferWriter;Advance;(System.Int32);summary;df-generated | | System.Buffers;ArrayBufferWriter;ArrayBufferWriter;(System.Int32);summary;df-generated | | System.Buffers;ArrayBufferWriter;Clear;();summary;df-generated | +| System.Buffers;ArrayBufferWriter;GetMemory;(System.Int32);summary;df-generated | | System.Buffers;ArrayBufferWriter;GetSpan;(System.Int32);summary;df-generated | | System.Buffers;ArrayBufferWriter;ResetWrittenCount;();summary;df-generated | | System.Buffers;ArrayBufferWriter;get_Capacity;();summary;df-generated | @@ -22844,6 +23376,7 @@ neutral | System.Buffers;MemoryManager;Pin;(System.Int32);summary;df-generated | | System.Buffers;MemoryManager;TryGetArray;(System.ArraySegment);summary;df-generated | | System.Buffers;MemoryManager;Unpin;();summary;df-generated | +| System.Buffers;MemoryManager;get_Memory;();summary;df-generated | | System.Buffers;MemoryPool;Dispose;();summary;df-generated | | System.Buffers;MemoryPool;Dispose;(System.Boolean);summary;df-generated | | System.Buffers;MemoryPool;Rent;(System.Int32);summary;df-generated | @@ -23136,6 +23669,9 @@ neutral | System.Collections.Concurrent;BlockingCollection;get_IsCompleted;();summary;df-generated | | System.Collections.Concurrent;BlockingCollection;get_IsSynchronized;();summary;df-generated | | System.Collections.Concurrent;ConcurrentBag;ConcurrentBag;(System.Collections.Generic.IEnumerable);summary;df-generated | +| System.Collections.Concurrent;ConcurrentBag;ToArray;();summary;df-generated | +| System.Collections.Concurrent;ConcurrentBag;TryAdd;(T);summary;df-generated | +| System.Collections.Concurrent;ConcurrentBag;TryTake;(T);summary;df-generated | | System.Collections.Concurrent;ConcurrentBag;get_Count;();summary;df-generated | | System.Collections.Concurrent;ConcurrentBag;get_IsEmpty;();summary;df-generated | | System.Collections.Concurrent;ConcurrentBag;get_IsSynchronized;();summary;df-generated | @@ -23159,6 +23695,9 @@ neutral | System.Collections.Concurrent;ConcurrentDictionary;get_IsFixedSize;();summary;df-generated | | System.Collections.Concurrent;ConcurrentDictionary;get_IsReadOnly;();summary;df-generated | | System.Collections.Concurrent;ConcurrentDictionary;get_IsSynchronized;();summary;df-generated | +| System.Collections.Concurrent;ConcurrentDictionary;get_Item;(TKey);summary;df-generated | +| System.Collections.Concurrent;ConcurrentDictionary;get_Keys;();summary;df-generated | +| System.Collections.Concurrent;ConcurrentDictionary;get_Values;();summary;df-generated | | System.Collections.Concurrent;ConcurrentQueue;ConcurrentQueue;(System.Collections.Generic.IEnumerable);summary;df-generated | | System.Collections.Concurrent;ConcurrentQueue;Enqueue;(T);summary;df-generated | | System.Collections.Concurrent;ConcurrentQueue;ToArray;();summary;df-generated | @@ -23174,6 +23713,7 @@ neutral | System.Collections.Concurrent;ConcurrentStack;PushRange;(T[],System.Int32,System.Int32);summary;df-generated | | System.Collections.Concurrent;ConcurrentStack;ToArray;();summary;df-generated | | System.Collections.Concurrent;ConcurrentStack;TryAdd;(T);summary;df-generated | +| System.Collections.Concurrent;ConcurrentStack;TryTake;(T);summary;df-generated | | System.Collections.Concurrent;ConcurrentStack;get_Count;();summary;df-generated | | System.Collections.Concurrent;ConcurrentStack;get_IsEmpty;();summary;df-generated | | System.Collections.Concurrent;ConcurrentStack;get_IsSynchronized;();summary;df-generated | @@ -23195,6 +23735,7 @@ neutral | System.Collections.Frozen;FrozenDictionary+Enumerator;Dispose;();summary;df-generated | | System.Collections.Frozen;FrozenDictionary+Enumerator;MoveNext;();summary;df-generated | | System.Collections.Frozen;FrozenDictionary+Enumerator;Reset;();summary;df-generated | +| System.Collections.Frozen;FrozenDictionary+Enumerator;get_Current;();summary;df-generated | | System.Collections.Frozen;FrozenDictionary;Contains;(System.Collections.Generic.KeyValuePair);summary;df-generated | | System.Collections.Frozen;FrozenDictionary;Contains;(System.Object);summary;df-generated | | System.Collections.Frozen;FrozenDictionary;ContainsKey;(TKey);summary;df-generated | @@ -23212,9 +23753,12 @@ neutral | System.Collections.Frozen;FrozenDictionary;get_IsReadOnly;();summary;df-generated | | System.Collections.Frozen;FrozenDictionary;get_IsSynchronized;();summary;df-generated | | System.Collections.Frozen;FrozenDictionary;get_Item;(TKey);summary;df-generated | +| System.Collections.Frozen;FrozenDictionary;get_Keys;();summary;df-generated | +| System.Collections.Frozen;FrozenDictionary;get_Values;();summary;df-generated | | System.Collections.Frozen;FrozenSet+Enumerator;Dispose;();summary;df-generated | | System.Collections.Frozen;FrozenSet+Enumerator;MoveNext;();summary;df-generated | | System.Collections.Frozen;FrozenSet+Enumerator;Reset;();summary;df-generated | +| System.Collections.Frozen;FrozenSet+Enumerator;get_Current;();summary;df-generated | | System.Collections.Frozen;FrozenSet;Contains;(T);summary;df-generated | | System.Collections.Frozen;FrozenSet;ExceptWith;(System.Collections.Generic.IEnumerable);summary;df-generated | | System.Collections.Frozen;FrozenSet;GetEnumerator;();summary;df-generated | @@ -23241,9 +23785,11 @@ neutral | System.Collections.Generic;Dictionary+Enumerator;Dispose;();summary;df-generated | | System.Collections.Generic;Dictionary+Enumerator;MoveNext;();summary;df-generated | | System.Collections.Generic;Dictionary+Enumerator;Reset;();summary;df-generated | +| System.Collections.Generic;Dictionary+Enumerator;get_Current;();summary;df-generated | | System.Collections.Generic;Dictionary+KeyCollection+Enumerator;Dispose;();summary;df-generated | | System.Collections.Generic;Dictionary+KeyCollection+Enumerator;MoveNext;();summary;df-generated | | System.Collections.Generic;Dictionary+KeyCollection+Enumerator;Reset;();summary;df-generated | +| System.Collections.Generic;Dictionary+KeyCollection+Enumerator;get_Current;();summary;df-generated | | System.Collections.Generic;Dictionary+KeyCollection;Contains;(TKey);summary;df-generated | | System.Collections.Generic;Dictionary+KeyCollection;Remove;(TKey);summary;df-generated | | System.Collections.Generic;Dictionary+KeyCollection;get_Count;();summary;df-generated | @@ -23252,6 +23798,7 @@ neutral | System.Collections.Generic;Dictionary+ValueCollection+Enumerator;Dispose;();summary;df-generated | | System.Collections.Generic;Dictionary+ValueCollection+Enumerator;MoveNext;();summary;df-generated | | System.Collections.Generic;Dictionary+ValueCollection+Enumerator;Reset;();summary;df-generated | +| System.Collections.Generic;Dictionary+ValueCollection+Enumerator;get_Current;();summary;df-generated | | System.Collections.Generic;Dictionary+ValueCollection;Contains;(TValue);summary;df-generated | | System.Collections.Generic;Dictionary+ValueCollection;Remove;(TValue);summary;df-generated | | System.Collections.Generic;Dictionary+ValueCollection;get_Count;();summary;df-generated | @@ -23278,6 +23825,9 @@ neutral | System.Collections.Generic;Dictionary;get_IsFixedSize;();summary;df-generated | | System.Collections.Generic;Dictionary;get_IsReadOnly;();summary;df-generated | | System.Collections.Generic;Dictionary;get_IsSynchronized;();summary;df-generated | +| System.Collections.Generic;Dictionary;get_Item;(TKey);summary;df-generated | +| System.Collections.Generic;Dictionary;get_Keys;();summary;df-generated | +| System.Collections.Generic;Dictionary;get_Values;();summary;df-generated | | System.Collections.Generic;EqualityComparer;Equals;(System.Object,System.Object);summary;df-generated | | System.Collections.Generic;EqualityComparer;Equals;(T,T);summary;df-generated | | System.Collections.Generic;EqualityComparer;GetHashCode;(System.Object);summary;df-generated | @@ -23286,6 +23836,7 @@ neutral | System.Collections.Generic;HashSet+Enumerator;Dispose;();summary;df-generated | | System.Collections.Generic;HashSet+Enumerator;MoveNext;();summary;df-generated | | System.Collections.Generic;HashSet+Enumerator;Reset;();summary;df-generated | +| System.Collections.Generic;HashSet+Enumerator;get_Current;();summary;df-generated | | System.Collections.Generic;HashSet;Contains;(T);summary;df-generated | | System.Collections.Generic;HashSet;CopyTo;(T[]);summary;df-generated | | System.Collections.Generic;HashSet;CopyTo;(T[],System.Int32,System.Int32);summary;df-generated | @@ -23358,6 +23909,7 @@ neutral | System.Collections.Generic;LinkedList+Enumerator;MoveNext;();summary;df-generated | | System.Collections.Generic;LinkedList+Enumerator;OnDeserialization;(System.Object);summary;df-generated | | System.Collections.Generic;LinkedList+Enumerator;Reset;();summary;df-generated | +| System.Collections.Generic;LinkedList+Enumerator;get_Current;();summary;df-generated | | System.Collections.Generic;LinkedList;Contains;(T);summary;df-generated | | System.Collections.Generic;LinkedList;OnDeserialization;(System.Object);summary;df-generated | | System.Collections.Generic;LinkedList;Remove;(T);summary;df-generated | @@ -23370,6 +23922,7 @@ neutral | System.Collections.Generic;List+Enumerator;Dispose;();summary;df-generated | | System.Collections.Generic;List+Enumerator;MoveNext;();summary;df-generated | | System.Collections.Generic;List+Enumerator;Reset;();summary;df-generated | +| System.Collections.Generic;List+Enumerator;get_Current;();summary;df-generated | | System.Collections.Generic;List;BinarySearch;(System.Int32,System.Int32,T,System.Collections.Generic.IComparer);summary;df-generated | | System.Collections.Generic;List;BinarySearch;(T);summary;df-generated | | System.Collections.Generic;List;BinarySearch;(T,System.Collections.Generic.IComparer);summary;df-generated | @@ -23399,6 +23952,7 @@ neutral | System.Collections.Generic;List;get_IsFixedSize;();summary;df-generated | | System.Collections.Generic;List;get_IsReadOnly;();summary;df-generated | | System.Collections.Generic;List;get_IsSynchronized;();summary;df-generated | +| System.Collections.Generic;List;get_Item;(System.Int32);summary;df-generated | | System.Collections.Generic;PriorityQueue+UnorderedItemsCollection+Enumerator;Dispose;();summary;df-generated | | System.Collections.Generic;PriorityQueue+UnorderedItemsCollection+Enumerator;MoveNext;();summary;df-generated | | System.Collections.Generic;PriorityQueue+UnorderedItemsCollection+Enumerator;Reset;();summary;df-generated | @@ -23417,6 +23971,7 @@ neutral | System.Collections.Generic;Queue+Enumerator;Dispose;();summary;df-generated | | System.Collections.Generic;Queue+Enumerator;MoveNext;();summary;df-generated | | System.Collections.Generic;Queue+Enumerator;Reset;();summary;df-generated | +| System.Collections.Generic;Queue+Enumerator;get_Current;();summary;df-generated | | System.Collections.Generic;Queue;Contains;(T);summary;df-generated | | System.Collections.Generic;Queue;EnsureCapacity;(System.Int32);summary;df-generated | | System.Collections.Generic;Queue;Queue;(System.Int32);summary;df-generated | @@ -23430,6 +23985,7 @@ neutral | System.Collections.Generic;SortedDictionary+Enumerator;Dispose;();summary;df-generated | | System.Collections.Generic;SortedDictionary+Enumerator;MoveNext;();summary;df-generated | | System.Collections.Generic;SortedDictionary+Enumerator;Reset;();summary;df-generated | +| System.Collections.Generic;SortedDictionary+Enumerator;get_Current;();summary;df-generated | | System.Collections.Generic;SortedDictionary+KeyCollection+Enumerator;Dispose;();summary;df-generated | | System.Collections.Generic;SortedDictionary+KeyCollection+Enumerator;MoveNext;();summary;df-generated | | System.Collections.Generic;SortedDictionary+KeyCollection+Enumerator;Reset;();summary;df-generated | @@ -23462,6 +24018,9 @@ neutral | System.Collections.Generic;SortedDictionary;get_IsFixedSize;();summary;df-generated | | System.Collections.Generic;SortedDictionary;get_IsReadOnly;();summary;df-generated | | System.Collections.Generic;SortedDictionary;get_IsSynchronized;();summary;df-generated | +| System.Collections.Generic;SortedDictionary;get_Item;(TKey);summary;df-generated | +| System.Collections.Generic;SortedDictionary;get_Keys;();summary;df-generated | +| System.Collections.Generic;SortedDictionary;get_Values;();summary;df-generated | | System.Collections.Generic;SortedList;Contains;(System.Collections.Generic.KeyValuePair);summary;df-generated | | System.Collections.Generic;SortedList;Contains;(System.Object);summary;df-generated | | System.Collections.Generic;SortedList;ContainsKey;(TKey);summary;df-generated | @@ -23475,18 +24034,24 @@ neutral | System.Collections.Generic;SortedList;SortedList;(System.Int32);summary;df-generated | | System.Collections.Generic;SortedList;SortedList;(System.Int32,System.Collections.Generic.IComparer);summary;df-generated | | System.Collections.Generic;SortedList;TrimExcess;();summary;df-generated | +| System.Collections.Generic;SortedList;TryGetValue;(TKey,TValue);summary;df-generated | | System.Collections.Generic;SortedList;get_Count;();summary;df-generated | | System.Collections.Generic;SortedList;get_IsFixedSize;();summary;df-generated | | System.Collections.Generic;SortedList;get_IsReadOnly;();summary;df-generated | | System.Collections.Generic;SortedList;get_IsSynchronized;();summary;df-generated | +| System.Collections.Generic;SortedList;get_Item;(TKey);summary;df-generated | +| System.Collections.Generic;SortedList;get_Keys;();summary;df-generated | +| System.Collections.Generic;SortedList;get_Values;();summary;df-generated | | System.Collections.Generic;SortedSet+Enumerator;Dispose;();summary;df-generated | | System.Collections.Generic;SortedSet+Enumerator;MoveNext;();summary;df-generated | | System.Collections.Generic;SortedSet+Enumerator;OnDeserialization;(System.Object);summary;df-generated | | System.Collections.Generic;SortedSet+Enumerator;Reset;();summary;df-generated | +| System.Collections.Generic;SortedSet+Enumerator;get_Current;();summary;df-generated | | System.Collections.Generic;SortedSet;Contains;(T);summary;df-generated | | System.Collections.Generic;SortedSet;CreateSetComparer;();summary;df-generated | | System.Collections.Generic;SortedSet;CreateSetComparer;(System.Collections.Generic.IEqualityComparer);summary;df-generated | | System.Collections.Generic;SortedSet;ExceptWith;(System.Collections.Generic.IEnumerable);summary;df-generated | +| System.Collections.Generic;SortedSet;IntersectWith;(System.Collections.Generic.IEnumerable);summary;df-generated | | System.Collections.Generic;SortedSet;IsProperSubsetOf;(System.Collections.Generic.IEnumerable);summary;df-generated | | System.Collections.Generic;SortedSet;IsProperSupersetOf;(System.Collections.Generic.IEnumerable);summary;df-generated | | System.Collections.Generic;SortedSet;IsSubsetOf;(System.Collections.Generic.IEnumerable);summary;df-generated | @@ -23496,12 +24061,15 @@ neutral | System.Collections.Generic;SortedSet;Remove;(T);summary;df-generated | | System.Collections.Generic;SortedSet;SetEquals;(System.Collections.Generic.IEnumerable);summary;df-generated | | System.Collections.Generic;SortedSet;SortedSet;(System.Collections.Generic.IEnumerable);summary;df-generated | +| System.Collections.Generic;SortedSet;SymmetricExceptWith;(System.Collections.Generic.IEnumerable);summary;df-generated | +| System.Collections.Generic;SortedSet;UnionWith;(System.Collections.Generic.IEnumerable);summary;df-generated | | System.Collections.Generic;SortedSet;get_Count;();summary;df-generated | | System.Collections.Generic;SortedSet;get_IsReadOnly;();summary;df-generated | | System.Collections.Generic;SortedSet;get_IsSynchronized;();summary;df-generated | | System.Collections.Generic;Stack+Enumerator;Dispose;();summary;df-generated | | System.Collections.Generic;Stack+Enumerator;MoveNext;();summary;df-generated | | System.Collections.Generic;Stack+Enumerator;Reset;();summary;df-generated | +| System.Collections.Generic;Stack+Enumerator;get_Current;();summary;df-generated | | System.Collections.Generic;Stack;Contains;(T);summary;df-generated | | System.Collections.Generic;Stack;EnsureCapacity;(System.Int32);summary;df-generated | | System.Collections.Generic;Stack;Stack;(System.Int32);summary;df-generated | @@ -23585,7 +24153,9 @@ neutral | System.Collections.Immutable;ImmutableArray+Builder;Sort;(System.Int32,System.Int32,System.Collections.Generic.IComparer);summary;df-generated | | System.Collections.Immutable;ImmutableArray+Builder;ToArray;();summary;df-generated | | System.Collections.Immutable;ImmutableArray+Builder;ToImmutable;();summary;df-generated | +| System.Collections.Immutable;ImmutableArray+Builder;get_Count;();summary;df-generated | | System.Collections.Immutable;ImmutableArray+Builder;get_IsReadOnly;();summary;df-generated | +| System.Collections.Immutable;ImmutableArray+Builder;get_Item;(System.Int32);summary;df-generated | | System.Collections.Immutable;ImmutableArray+Enumerator;MoveNext;();summary;df-generated | | System.Collections.Immutable;ImmutableArray;Clear;();summary;df-generated | | System.Collections.Immutable;ImmutableArray;CompareTo;(System.Object,System.Collections.IComparer);summary;df-generated | @@ -23605,13 +24175,20 @@ neutral | System.Collections.Immutable;ImmutableArray;IndexOf;(T,System.Int32,System.Collections.Generic.IEqualityComparer);summary;df-generated | | System.Collections.Immutable;ImmutableArray;IndexOf;(T,System.Int32,System.Int32);summary;df-generated | | System.Collections.Immutable;ImmutableArray;IndexOf;(T,System.Int32,System.Int32,System.Collections.Generic.IEqualityComparer);summary;df-generated | +| System.Collections.Immutable;ImmutableArray;Insert;(System.Int32,T);summary;df-generated | +| System.Collections.Immutable;ImmutableArray;InsertRange;(System.Int32,System.Collections.Generic.IEnumerable);summary;df-generated | | System.Collections.Immutable;ImmutableArray;ItemRef;(System.Int32);summary;df-generated | | System.Collections.Immutable;ImmutableArray;LastIndexOf;(T);summary;df-generated | | System.Collections.Immutable;ImmutableArray;LastIndexOf;(T,System.Int32);summary;df-generated | | System.Collections.Immutable;ImmutableArray;LastIndexOf;(T,System.Int32,System.Int32);summary;df-generated | | System.Collections.Immutable;ImmutableArray;LastIndexOf;(T,System.Int32,System.Int32,System.Collections.Generic.IEqualityComparer);summary;df-generated | | System.Collections.Immutable;ImmutableArray;Remove;(T);summary;df-generated | +| System.Collections.Immutable;ImmutableArray;Remove;(T,System.Collections.Generic.IEqualityComparer);summary;df-generated | | System.Collections.Immutable;ImmutableArray;RemoveAt;(System.Int32);summary;df-generated | +| System.Collections.Immutable;ImmutableArray;RemoveRange;(System.Collections.Generic.IEnumerable,System.Collections.Generic.IEqualityComparer);summary;df-generated | +| System.Collections.Immutable;ImmutableArray;RemoveRange;(System.Int32,System.Int32);summary;df-generated | +| System.Collections.Immutable;ImmutableArray;Replace;(T,T,System.Collections.Generic.IEqualityComparer);summary;df-generated | +| System.Collections.Immutable;ImmutableArray;SetItem;(System.Int32,T);summary;df-generated | | System.Collections.Immutable;ImmutableArray;get_Count;();summary;df-generated | | System.Collections.Immutable;ImmutableArray;get_IsDefault;();summary;df-generated | | System.Collections.Immutable;ImmutableArray;get_IsDefaultOrEmpty;();summary;df-generated | @@ -23619,6 +24196,7 @@ neutral | System.Collections.Immutable;ImmutableArray;get_IsFixedSize;();summary;df-generated | | System.Collections.Immutable;ImmutableArray;get_IsReadOnly;();summary;df-generated | | System.Collections.Immutable;ImmutableArray;get_IsSynchronized;();summary;df-generated | +| System.Collections.Immutable;ImmutableArray;get_Item;(System.Int32);summary;df-generated | | System.Collections.Immutable;ImmutableArray;get_Length;();summary;df-generated | | System.Collections.Immutable;ImmutableArray;op_Equality;(System.Collections.Immutable.ImmutableArray,System.Collections.Immutable.ImmutableArray);summary;df-generated | | System.Collections.Immutable;ImmutableArray;op_Equality;(System.Nullable>,System.Nullable>);summary;df-generated | @@ -23644,9 +24222,14 @@ neutral | System.Collections.Immutable;ImmutableDictionary+Builder;get_IsFixedSize;();summary;df-generated | | System.Collections.Immutable;ImmutableDictionary+Builder;get_IsReadOnly;();summary;df-generated | | System.Collections.Immutable;ImmutableDictionary+Builder;get_IsSynchronized;();summary;df-generated | +| System.Collections.Immutable;ImmutableDictionary+Builder;get_Item;(TKey);summary;df-generated | +| System.Collections.Immutable;ImmutableDictionary+Builder;get_Keys;();summary;df-generated | +| System.Collections.Immutable;ImmutableDictionary+Builder;get_Values;();summary;df-generated | | System.Collections.Immutable;ImmutableDictionary+Enumerator;Dispose;();summary;df-generated | | System.Collections.Immutable;ImmutableDictionary+Enumerator;MoveNext;();summary;df-generated | | System.Collections.Immutable;ImmutableDictionary+Enumerator;Reset;();summary;df-generated | +| System.Collections.Immutable;ImmutableDictionary+Enumerator;get_Current;();summary;df-generated | +| System.Collections.Immutable;ImmutableDictionary;Add;(TKey,TValue);summary;df-generated | | System.Collections.Immutable;ImmutableDictionary;Contains;(System.Collections.Generic.KeyValuePair);summary;df-generated | | System.Collections.Immutable;ImmutableDictionary;Contains;(System.Object);summary;df-generated | | System.Collections.Immutable;ImmutableDictionary;ContainsKey;(TKey);summary;df-generated | @@ -23654,12 +24237,19 @@ neutral | System.Collections.Immutable;ImmutableDictionary;Remove;(System.Collections.Generic.KeyValuePair);summary;df-generated | | System.Collections.Immutable;ImmutableDictionary;Remove;(System.Object);summary;df-generated | | System.Collections.Immutable;ImmutableDictionary;Remove;(TKey);summary;df-generated | +| System.Collections.Immutable;ImmutableDictionary;RemoveRange;(System.Collections.Generic.IEnumerable);summary;df-generated | +| System.Collections.Immutable;ImmutableDictionary;SetItem;(TKey,TValue);summary;df-generated | +| System.Collections.Immutable;ImmutableDictionary;SetItems;(System.Collections.Generic.IEnumerable>);summary;df-generated | +| System.Collections.Immutable;ImmutableDictionary;TryGetKey;(TKey,TKey);summary;df-generated | | System.Collections.Immutable;ImmutableDictionary;TryGetValue;(TKey,TValue);summary;df-generated | | System.Collections.Immutable;ImmutableDictionary;get_Count;();summary;df-generated | | System.Collections.Immutable;ImmutableDictionary;get_IsEmpty;();summary;df-generated | | System.Collections.Immutable;ImmutableDictionary;get_IsFixedSize;();summary;df-generated | | System.Collections.Immutable;ImmutableDictionary;get_IsReadOnly;();summary;df-generated | | System.Collections.Immutable;ImmutableDictionary;get_IsSynchronized;();summary;df-generated | +| System.Collections.Immutable;ImmutableDictionary;get_Item;(TKey);summary;df-generated | +| System.Collections.Immutable;ImmutableDictionary;get_Keys;();summary;df-generated | +| System.Collections.Immutable;ImmutableDictionary;get_Values;();summary;df-generated | | System.Collections.Immutable;ImmutableHashSet;Create;();summary;df-generated | | System.Collections.Immutable;ImmutableHashSet;Create;(System.Collections.Generic.IEqualityComparer);summary;df-generated | | System.Collections.Immutable;ImmutableHashSet;CreateBuilder;();summary;df-generated | @@ -23675,6 +24265,7 @@ neutral | System.Collections.Immutable;ImmutableHashSet+Builder;Overlaps;(System.Collections.Generic.IEnumerable);summary;df-generated | | System.Collections.Immutable;ImmutableHashSet+Builder;Remove;(T);summary;df-generated | | System.Collections.Immutable;ImmutableHashSet+Builder;SetEquals;(System.Collections.Generic.IEnumerable);summary;df-generated | +| System.Collections.Immutable;ImmutableHashSet+Builder;SymmetricExceptWith;(System.Collections.Generic.IEnumerable);summary;df-generated | | System.Collections.Immutable;ImmutableHashSet+Builder;ToImmutable;();summary;df-generated | | System.Collections.Immutable;ImmutableHashSet+Builder;UnionWith;(System.Collections.Generic.IEnumerable);summary;df-generated | | System.Collections.Immutable;ImmutableHashSet+Builder;get_Count;();summary;df-generated | @@ -23682,8 +24273,11 @@ neutral | System.Collections.Immutable;ImmutableHashSet+Enumerator;Dispose;();summary;df-generated | | System.Collections.Immutable;ImmutableHashSet+Enumerator;MoveNext;();summary;df-generated | | System.Collections.Immutable;ImmutableHashSet+Enumerator;Reset;();summary;df-generated | +| System.Collections.Immutable;ImmutableHashSet+Enumerator;get_Current;();summary;df-generated | | System.Collections.Immutable;ImmutableHashSet;Contains;(T);summary;df-generated | +| System.Collections.Immutable;ImmutableHashSet;Except;(System.Collections.Generic.IEnumerable);summary;df-generated | | System.Collections.Immutable;ImmutableHashSet;ExceptWith;(System.Collections.Generic.IEnumerable);summary;df-generated | +| System.Collections.Immutable;ImmutableHashSet;Intersect;(System.Collections.Generic.IEnumerable);summary;df-generated | | System.Collections.Immutable;ImmutableHashSet;IntersectWith;(System.Collections.Generic.IEnumerable);summary;df-generated | | System.Collections.Immutable;ImmutableHashSet;IsProperSubsetOf;(System.Collections.Generic.IEnumerable);summary;df-generated | | System.Collections.Immutable;ImmutableHashSet;IsProperSupersetOf;(System.Collections.Generic.IEnumerable);summary;df-generated | @@ -23692,7 +24286,10 @@ neutral | System.Collections.Immutable;ImmutableHashSet;Overlaps;(System.Collections.Generic.IEnumerable);summary;df-generated | | System.Collections.Immutable;ImmutableHashSet;Remove;(T);summary;df-generated | | System.Collections.Immutable;ImmutableHashSet;SetEquals;(System.Collections.Generic.IEnumerable);summary;df-generated | +| System.Collections.Immutable;ImmutableHashSet;SymmetricExcept;(System.Collections.Generic.IEnumerable);summary;df-generated | | System.Collections.Immutable;ImmutableHashSet;SymmetricExceptWith;(System.Collections.Generic.IEnumerable);summary;df-generated | +| System.Collections.Immutable;ImmutableHashSet;TryGetValue;(T,T);summary;df-generated | +| System.Collections.Immutable;ImmutableHashSet;Union;(System.Collections.Generic.IEnumerable);summary;df-generated | | System.Collections.Immutable;ImmutableHashSet;UnionWith;(System.Collections.Generic.IEnumerable);summary;df-generated | | System.Collections.Immutable;ImmutableHashSet;get_Count;();summary;df-generated | | System.Collections.Immutable;ImmutableHashSet;get_IsEmpty;();summary;df-generated | @@ -23754,6 +24351,7 @@ neutral | System.Collections.Immutable;ImmutableList+Enumerator;Dispose;();summary;df-generated | | System.Collections.Immutable;ImmutableList+Enumerator;MoveNext;();summary;df-generated | | System.Collections.Immutable;ImmutableList+Enumerator;Reset;();summary;df-generated | +| System.Collections.Immutable;ImmutableList+Enumerator;get_Current;();summary;df-generated | | System.Collections.Immutable;ImmutableList;BinarySearch;(T);summary;df-generated | | System.Collections.Immutable;ImmutableList;Clear;();summary;df-generated | | System.Collections.Immutable;ImmutableList;Contains;(System.Object);summary;df-generated | @@ -23762,18 +24360,29 @@ neutral | System.Collections.Immutable;ImmutableList;IndexOf;(System.Object);summary;df-generated | | System.Collections.Immutable;ImmutableList;IndexOf;(T);summary;df-generated | | System.Collections.Immutable;ImmutableList;IndexOf;(T,System.Int32,System.Int32,System.Collections.Generic.IEqualityComparer);summary;df-generated | +| System.Collections.Immutable;ImmutableList;Insert;(System.Int32,T);summary;df-generated | +| System.Collections.Immutable;ImmutableList;InsertRange;(System.Int32,System.Collections.Generic.IEnumerable);summary;df-generated | | System.Collections.Immutable;ImmutableList;ItemRef;(System.Int32);summary;df-generated | | System.Collections.Immutable;ImmutableList;LastIndexOf;(T,System.Int32,System.Int32,System.Collections.Generic.IEqualityComparer);summary;df-generated | | System.Collections.Immutable;ImmutableList;Remove;(T);summary;df-generated | +| System.Collections.Immutable;ImmutableList;Remove;(T,System.Collections.Generic.IEqualityComparer);summary;df-generated | | System.Collections.Immutable;ImmutableList;RemoveAt;(System.Int32);summary;df-generated | +| System.Collections.Immutable;ImmutableList;RemoveRange;(System.Collections.Generic.IEnumerable,System.Collections.Generic.IEqualityComparer);summary;df-generated | +| System.Collections.Immutable;ImmutableList;RemoveRange;(System.Int32,System.Int32);summary;df-generated | +| System.Collections.Immutable;ImmutableList;Replace;(T,T,System.Collections.Generic.IEqualityComparer);summary;df-generated | +| System.Collections.Immutable;ImmutableList;SetItem;(System.Int32,T);summary;df-generated | | System.Collections.Immutable;ImmutableList;get_Count;();summary;df-generated | | System.Collections.Immutable;ImmutableList;get_IsEmpty;();summary;df-generated | | System.Collections.Immutable;ImmutableList;get_IsFixedSize;();summary;df-generated | | System.Collections.Immutable;ImmutableList;get_IsReadOnly;();summary;df-generated | | System.Collections.Immutable;ImmutableList;get_IsSynchronized;();summary;df-generated | +| System.Collections.Immutable;ImmutableList;get_Item;(System.Int32);summary;df-generated | | System.Collections.Immutable;ImmutableQueue;Create;();summary;df-generated | | System.Collections.Immutable;ImmutableQueue+Enumerator;MoveNext;();summary;df-generated | | System.Collections.Immutable;ImmutableQueue;Clear;();summary;df-generated | +| System.Collections.Immutable;ImmutableQueue;Dequeue;();summary;df-generated | +| System.Collections.Immutable;ImmutableQueue;Enqueue;(T);summary;df-generated | +| System.Collections.Immutable;ImmutableQueue;Peek;();summary;df-generated | | System.Collections.Immutable;ImmutableQueue;PeekRef;();summary;df-generated | | System.Collections.Immutable;ImmutableQueue;get_Empty;();summary;df-generated | | System.Collections.Immutable;ImmutableQueue;get_IsEmpty;();summary;df-generated | @@ -23796,9 +24405,14 @@ neutral | System.Collections.Immutable;ImmutableSortedDictionary+Builder;get_IsFixedSize;();summary;df-generated | | System.Collections.Immutable;ImmutableSortedDictionary+Builder;get_IsReadOnly;();summary;df-generated | | System.Collections.Immutable;ImmutableSortedDictionary+Builder;get_IsSynchronized;();summary;df-generated | +| System.Collections.Immutable;ImmutableSortedDictionary+Builder;get_Item;(TKey);summary;df-generated | +| System.Collections.Immutable;ImmutableSortedDictionary+Builder;get_Keys;();summary;df-generated | +| System.Collections.Immutable;ImmutableSortedDictionary+Builder;get_Values;();summary;df-generated | | System.Collections.Immutable;ImmutableSortedDictionary+Enumerator;Dispose;();summary;df-generated | | System.Collections.Immutable;ImmutableSortedDictionary+Enumerator;MoveNext;();summary;df-generated | | System.Collections.Immutable;ImmutableSortedDictionary+Enumerator;Reset;();summary;df-generated | +| System.Collections.Immutable;ImmutableSortedDictionary+Enumerator;get_Current;();summary;df-generated | +| System.Collections.Immutable;ImmutableSortedDictionary;Add;(TKey,TValue);summary;df-generated | | System.Collections.Immutable;ImmutableSortedDictionary;Contains;(System.Collections.Generic.KeyValuePair);summary;df-generated | | System.Collections.Immutable;ImmutableSortedDictionary;Contains;(System.Object);summary;df-generated | | System.Collections.Immutable;ImmutableSortedDictionary;ContainsKey;(TKey);summary;df-generated | @@ -23806,6 +24420,10 @@ neutral | System.Collections.Immutable;ImmutableSortedDictionary;Remove;(System.Collections.Generic.KeyValuePair);summary;df-generated | | System.Collections.Immutable;ImmutableSortedDictionary;Remove;(System.Object);summary;df-generated | | System.Collections.Immutable;ImmutableSortedDictionary;Remove;(TKey);summary;df-generated | +| System.Collections.Immutable;ImmutableSortedDictionary;RemoveRange;(System.Collections.Generic.IEnumerable);summary;df-generated | +| System.Collections.Immutable;ImmutableSortedDictionary;SetItem;(TKey,TValue);summary;df-generated | +| System.Collections.Immutable;ImmutableSortedDictionary;SetItems;(System.Collections.Generic.IEnumerable>);summary;df-generated | +| System.Collections.Immutable;ImmutableSortedDictionary;TryGetKey;(TKey,TKey);summary;df-generated | | System.Collections.Immutable;ImmutableSortedDictionary;TryGetValue;(TKey,TValue);summary;df-generated | | System.Collections.Immutable;ImmutableSortedDictionary;ValueRef;(TKey);summary;df-generated | | System.Collections.Immutable;ImmutableSortedDictionary;get_Count;();summary;df-generated | @@ -23813,12 +24431,16 @@ neutral | System.Collections.Immutable;ImmutableSortedDictionary;get_IsFixedSize;();summary;df-generated | | System.Collections.Immutable;ImmutableSortedDictionary;get_IsReadOnly;();summary;df-generated | | System.Collections.Immutable;ImmutableSortedDictionary;get_IsSynchronized;();summary;df-generated | +| System.Collections.Immutable;ImmutableSortedDictionary;get_Item;(TKey);summary;df-generated | +| System.Collections.Immutable;ImmutableSortedDictionary;get_Keys;();summary;df-generated | +| System.Collections.Immutable;ImmutableSortedDictionary;get_Values;();summary;df-generated | | System.Collections.Immutable;ImmutableSortedSet;Create;();summary;df-generated | | System.Collections.Immutable;ImmutableSortedSet;CreateBuilder;();summary;df-generated | | System.Collections.Immutable;ImmutableSortedSet;ToImmutableSortedSet;(System.Collections.Immutable.ImmutableSortedSet+Builder);summary;df-generated | | System.Collections.Immutable;ImmutableSortedSet+Builder;Contains;(T);summary;df-generated | | System.Collections.Immutable;ImmutableSortedSet+Builder;ExceptWith;(System.Collections.Generic.IEnumerable);summary;df-generated | | System.Collections.Immutable;ImmutableSortedSet+Builder;IndexOf;(T);summary;df-generated | +| System.Collections.Immutable;ImmutableSortedSet+Builder;IntersectWith;(System.Collections.Generic.IEnumerable);summary;df-generated | | System.Collections.Immutable;ImmutableSortedSet+Builder;IsProperSubsetOf;(System.Collections.Generic.IEnumerable);summary;df-generated | | System.Collections.Immutable;ImmutableSortedSet+Builder;IsProperSupersetOf;(System.Collections.Generic.IEnumerable);summary;df-generated | | System.Collections.Immutable;ImmutableSortedSet+Builder;IsSubsetOf;(System.Collections.Generic.IEnumerable);summary;df-generated | @@ -23827,7 +24449,9 @@ neutral | System.Collections.Immutable;ImmutableSortedSet+Builder;Overlaps;(System.Collections.Generic.IEnumerable);summary;df-generated | | System.Collections.Immutable;ImmutableSortedSet+Builder;Remove;(T);summary;df-generated | | System.Collections.Immutable;ImmutableSortedSet+Builder;SetEquals;(System.Collections.Generic.IEnumerable);summary;df-generated | +| System.Collections.Immutable;ImmutableSortedSet+Builder;SymmetricExceptWith;(System.Collections.Generic.IEnumerable);summary;df-generated | | System.Collections.Immutable;ImmutableSortedSet+Builder;ToImmutable;();summary;df-generated | +| System.Collections.Immutable;ImmutableSortedSet+Builder;UnionWith;(System.Collections.Generic.IEnumerable);summary;df-generated | | System.Collections.Immutable;ImmutableSortedSet+Builder;get_Count;();summary;df-generated | | System.Collections.Immutable;ImmutableSortedSet+Builder;get_IsReadOnly;();summary;df-generated | | System.Collections.Immutable;ImmutableSortedSet+Builder;get_IsSynchronized;();summary;df-generated | @@ -23835,11 +24459,14 @@ neutral | System.Collections.Immutable;ImmutableSortedSet+Enumerator;Dispose;();summary;df-generated | | System.Collections.Immutable;ImmutableSortedSet+Enumerator;MoveNext;();summary;df-generated | | System.Collections.Immutable;ImmutableSortedSet+Enumerator;Reset;();summary;df-generated | +| System.Collections.Immutable;ImmutableSortedSet+Enumerator;get_Current;();summary;df-generated | | System.Collections.Immutable;ImmutableSortedSet;Contains;(System.Object);summary;df-generated | | System.Collections.Immutable;ImmutableSortedSet;Contains;(T);summary;df-generated | +| System.Collections.Immutable;ImmutableSortedSet;Except;(System.Collections.Generic.IEnumerable);summary;df-generated | | System.Collections.Immutable;ImmutableSortedSet;ExceptWith;(System.Collections.Generic.IEnumerable);summary;df-generated | | System.Collections.Immutable;ImmutableSortedSet;IndexOf;(System.Object);summary;df-generated | | System.Collections.Immutable;ImmutableSortedSet;IndexOf;(T);summary;df-generated | +| System.Collections.Immutable;ImmutableSortedSet;Intersect;(System.Collections.Generic.IEnumerable);summary;df-generated | | System.Collections.Immutable;ImmutableSortedSet;IntersectWith;(System.Collections.Generic.IEnumerable);summary;df-generated | | System.Collections.Immutable;ImmutableSortedSet;IsProperSubsetOf;(System.Collections.Generic.IEnumerable);summary;df-generated | | System.Collections.Immutable;ImmutableSortedSet;IsProperSupersetOf;(System.Collections.Generic.IEnumerable);summary;df-generated | @@ -23850,17 +24477,24 @@ neutral | System.Collections.Immutable;ImmutableSortedSet;Remove;(T);summary;df-generated | | System.Collections.Immutable;ImmutableSortedSet;RemoveAt;(System.Int32);summary;df-generated | | System.Collections.Immutable;ImmutableSortedSet;SetEquals;(System.Collections.Generic.IEnumerable);summary;df-generated | +| System.Collections.Immutable;ImmutableSortedSet;SymmetricExcept;(System.Collections.Generic.IEnumerable);summary;df-generated | | System.Collections.Immutable;ImmutableSortedSet;SymmetricExceptWith;(System.Collections.Generic.IEnumerable);summary;df-generated | +| System.Collections.Immutable;ImmutableSortedSet;TryGetValue;(T,T);summary;df-generated | +| System.Collections.Immutable;ImmutableSortedSet;Union;(System.Collections.Generic.IEnumerable);summary;df-generated | | System.Collections.Immutable;ImmutableSortedSet;UnionWith;(System.Collections.Generic.IEnumerable);summary;df-generated | | System.Collections.Immutable;ImmutableSortedSet;get_Count;();summary;df-generated | | System.Collections.Immutable;ImmutableSortedSet;get_IsEmpty;();summary;df-generated | | System.Collections.Immutable;ImmutableSortedSet;get_IsFixedSize;();summary;df-generated | | System.Collections.Immutable;ImmutableSortedSet;get_IsReadOnly;();summary;df-generated | | System.Collections.Immutable;ImmutableSortedSet;get_IsSynchronized;();summary;df-generated | +| System.Collections.Immutable;ImmutableSortedSet;get_Item;(System.Int32);summary;df-generated | | System.Collections.Immutable;ImmutableStack;Create;();summary;df-generated | | System.Collections.Immutable;ImmutableStack+Enumerator;MoveNext;();summary;df-generated | | System.Collections.Immutable;ImmutableStack;Clear;();summary;df-generated | +| System.Collections.Immutable;ImmutableStack;Peek;();summary;df-generated | | System.Collections.Immutable;ImmutableStack;PeekRef;();summary;df-generated | +| System.Collections.Immutable;ImmutableStack;Pop;();summary;df-generated | +| System.Collections.Immutable;ImmutableStack;Push;(T);summary;df-generated | | System.Collections.Immutable;ImmutableStack;get_Empty;();summary;df-generated | | System.Collections.Immutable;ImmutableStack;get_IsEmpty;();summary;df-generated | | System.Collections.ObjectModel;Collection;ClearItems;();summary;df-generated | @@ -23875,6 +24509,7 @@ neutral | System.Collections.ObjectModel;Collection;get_IsFixedSize;();summary;df-generated | | System.Collections.ObjectModel;Collection;get_IsReadOnly;();summary;df-generated | | System.Collections.ObjectModel;Collection;get_IsSynchronized;();summary;df-generated | +| System.Collections.ObjectModel;Collection;get_Item;(System.Int32);summary;df-generated | | System.Collections.ObjectModel;KeyedCollection;ChangeItemKey;(TItem,TKey);summary;df-generated | | System.Collections.ObjectModel;KeyedCollection;ClearItems;();summary;df-generated | | System.Collections.ObjectModel;KeyedCollection;Contains;(TKey);summary;df-generated | @@ -23903,6 +24538,7 @@ neutral | System.Collections.ObjectModel;ReadOnlyCollection;get_IsFixedSize;();summary;df-generated | | System.Collections.ObjectModel;ReadOnlyCollection;get_IsReadOnly;();summary;df-generated | | System.Collections.ObjectModel;ReadOnlyCollection;get_IsSynchronized;();summary;df-generated | +| System.Collections.ObjectModel;ReadOnlyCollection;get_Item;(System.Int32);summary;df-generated | | System.Collections.ObjectModel;ReadOnlyDictionary+KeyCollection;Contains;(TKey);summary;df-generated | | System.Collections.ObjectModel;ReadOnlyDictionary+KeyCollection;Remove;(TKey);summary;df-generated | | System.Collections.ObjectModel;ReadOnlyDictionary+KeyCollection;get_Count;();summary;df-generated | @@ -23925,6 +24561,9 @@ neutral | System.Collections.ObjectModel;ReadOnlyDictionary;get_IsFixedSize;();summary;df-generated | | System.Collections.ObjectModel;ReadOnlyDictionary;get_IsReadOnly;();summary;df-generated | | System.Collections.ObjectModel;ReadOnlyDictionary;get_IsSynchronized;();summary;df-generated | +| System.Collections.ObjectModel;ReadOnlyDictionary;get_Item;(TKey);summary;df-generated | +| System.Collections.ObjectModel;ReadOnlyDictionary;get_Keys;();summary;df-generated | +| System.Collections.ObjectModel;ReadOnlyDictionary;get_Values;();summary;df-generated | | System.Collections.ObjectModel;ReadOnlyObservableCollection;OnCollectionChanged;(System.Collections.Specialized.NotifyCollectionChangedEventArgs);summary;df-generated | | System.Collections.ObjectModel;ReadOnlyObservableCollection;OnPropertyChanged;(System.ComponentModel.PropertyChangedEventArgs);summary;df-generated | | System.Collections.ObjectModel;ReadOnlyObservableCollection;ReadOnlyObservableCollection;(System.Collections.ObjectModel.ObservableCollection);summary;df-generated | @@ -24010,6 +24649,7 @@ neutral | System.Collections.Specialized;NotifyCollectionChangedEventArgs;get_NewStartingIndex;();summary;df-generated | | System.Collections.Specialized;NotifyCollectionChangedEventArgs;get_OldStartingIndex;();summary;df-generated | | System.Collections.Specialized;OrderedDictionary;Contains;(System.Object);summary;df-generated | +| System.Collections.Specialized;OrderedDictionary;GetEnumerator;();summary;df-generated | | System.Collections.Specialized;OrderedDictionary;Insert;(System.Int32,System.Object,System.Object);summary;df-generated | | System.Collections.Specialized;OrderedDictionary;OnDeserialization;(System.Object);summary;df-generated | | System.Collections.Specialized;OrderedDictionary;OrderedDictionary;(System.Collections.IEqualityComparer);summary;df-generated | @@ -24193,6 +24833,8 @@ neutral | System.ComponentModel.DataAnnotations.Schema;DatabaseGeneratedAttribute;get_DatabaseGeneratedOption;();summary;df-generated | | System.ComponentModel.DataAnnotations.Schema;ForeignKeyAttribute;ForeignKeyAttribute;(System.String);summary;df-generated | | System.ComponentModel.DataAnnotations.Schema;ForeignKeyAttribute;get_Name;();summary;df-generated | +| System.ComponentModel.DataAnnotations.Schema;IndexAttribute;Equals;(System.Object);summary;df-generated | +| System.ComponentModel.DataAnnotations.Schema;IndexAttribute;GetHashCode;();summary;df-generated | | System.ComponentModel.DataAnnotations.Schema;InversePropertyAttribute;InversePropertyAttribute;(System.String);summary;df-generated | | System.ComponentModel.DataAnnotations.Schema;InversePropertyAttribute;get_Property;();summary;df-generated | | System.ComponentModel.DataAnnotations.Schema;TableAttribute;TableAttribute;(System.String);summary;df-generated | @@ -25167,6 +25809,7 @@ neutral | System.ComponentModel;PropertyDescriptorCollection;InternalSort;(System.Collections.IComparer);summary;df-generated | | System.ComponentModel;PropertyDescriptorCollection;InternalSort;(System.String[]);summary;df-generated | | System.ComponentModel;PropertyDescriptorCollection;Remove;(System.ComponentModel.PropertyDescriptor);summary;df-generated | +| System.ComponentModel;PropertyDescriptorCollection;Remove;(System.Object);summary;df-generated | | System.ComponentModel;PropertyDescriptorCollection;RemoveAt;(System.Int32);summary;df-generated | | System.ComponentModel;PropertyDescriptorCollection;get_Count;();summary;df-generated | | System.ComponentModel;PropertyDescriptorCollection;get_IsFixedSize;();summary;df-generated | @@ -25968,15 +26611,18 @@ neutral | System.Data.Common;DbDataReader;GetChars;(System.Int32,System.Int64,System.Char[],System.Int32,System.Int32);summary;df-generated | | System.Data.Common;DbDataReader;GetColumnSchemaAsync;(System.Threading.CancellationToken);summary;df-generated | | System.Data.Common;DbDataReader;GetData;(System.Int32);summary;df-generated | +| System.Data.Common;DbDataReader;GetDataTypeName;(System.Int32);summary;manual | | System.Data.Common;DbDataReader;GetDateTime;(System.Int32);summary;df-generated | | System.Data.Common;DbDataReader;GetDbDataReader;(System.Int32);summary;df-generated | | System.Data.Common;DbDataReader;GetDecimal;(System.Int32);summary;df-generated | | System.Data.Common;DbDataReader;GetDouble;(System.Int32);summary;df-generated | | System.Data.Common;DbDataReader;GetFieldType;(System.Int32);summary;df-generated | | System.Data.Common;DbDataReader;GetFloat;(System.Int32);summary;df-generated | +| System.Data.Common;DbDataReader;GetGuid;(System.Int32);summary;manual | | System.Data.Common;DbDataReader;GetInt16;(System.Int32);summary;df-generated | | System.Data.Common;DbDataReader;GetInt32;(System.Int32);summary;df-generated | | System.Data.Common;DbDataReader;GetInt64;(System.Int32);summary;df-generated | +| System.Data.Common;DbDataReader;GetName;(System.Int32);summary;manual | | System.Data.Common;DbDataReader;GetOrdinal;(System.String);summary;df-generated | | System.Data.Common;DbDataReader;GetProviderSpecificFieldType;(System.Int32);summary;df-generated | | System.Data.Common;DbDataReader;GetStream;(System.Int32);summary;df-generated | @@ -26006,6 +26652,7 @@ neutral | System.Data.Common;DbDataRecord;GetComponentName;();summary;df-generated | | System.Data.Common;DbDataRecord;GetConverter;();summary;df-generated | | System.Data.Common;DbDataRecord;GetData;(System.Int32);summary;df-generated | +| System.Data.Common;DbDataRecord;GetDataTypeName;(System.Int32);summary;manual | | System.Data.Common;DbDataRecord;GetDateTime;(System.Int32);summary;df-generated | | System.Data.Common;DbDataRecord;GetDbDataReader;(System.Int32);summary;df-generated | | System.Data.Common;DbDataRecord;GetDecimal;(System.Int32);summary;df-generated | @@ -26017,9 +26664,11 @@ neutral | System.Data.Common;DbDataRecord;GetEvents;(System.Attribute[]);summary;df-generated | | System.Data.Common;DbDataRecord;GetFieldType;(System.Int32);summary;df-generated | | System.Data.Common;DbDataRecord;GetFloat;(System.Int32);summary;df-generated | +| System.Data.Common;DbDataRecord;GetGuid;(System.Int32);summary;manual | | System.Data.Common;DbDataRecord;GetInt16;(System.Int32);summary;df-generated | | System.Data.Common;DbDataRecord;GetInt32;(System.Int32);summary;df-generated | | System.Data.Common;DbDataRecord;GetInt64;(System.Int32);summary;df-generated | +| System.Data.Common;DbDataRecord;GetName;(System.Int32);summary;manual | | System.Data.Common;DbDataRecord;GetOrdinal;(System.String);summary;df-generated | | System.Data.Common;DbDataRecord;IsDBNull;(System.Int32);summary;df-generated | | System.Data.Common;DbDataRecord;get_FieldCount;();summary;df-generated | @@ -26047,6 +26696,7 @@ neutral | System.Data.Common;DbException;get_IsTransient;();summary;df-generated | | System.Data.Common;DbException;get_SqlState;();summary;df-generated | | System.Data.Common;DbParameter;ResetDbType;();summary;df-generated | +| System.Data.Common;DbParameter;get_IsNullable;();summary;df-generated | | System.Data.Common;DbParameterCollection;Contains;(System.Object);summary;df-generated | | System.Data.Common;DbParameterCollection;Contains;(System.String);summary;df-generated | | System.Data.Common;DbParameterCollection;IndexOf;(System.Object);summary;df-generated | @@ -26096,6 +26746,150 @@ neutral | System.Data.Common;RowUpdatedEventArgs;get_RowCount;();summary;df-generated | | System.Data.Common;RowUpdatedEventArgs;get_StatementType;();summary;df-generated | | System.Data.Common;RowUpdatingEventArgs;get_StatementType;();summary;df-generated | +| System.Data.Entity.Core.EntityClient;EntityCommand;Cancel;();summary;df-generated | +| System.Data.Entity.Core.EntityClient;EntityCommand;CreateDbParameter;();summary;df-generated | +| System.Data.Entity.Core.EntityClient;EntityCommand;ExecuteNonQuery;();summary;df-generated | +| System.Data.Entity.Core.EntityClient;EntityCommand;ExecuteNonQueryAsync;(System.Threading.CancellationToken);summary;df-generated | +| System.Data.Entity.Core.EntityClient;EntityCommand;Prepare;();summary;df-generated | +| System.Data.Entity.Core.EntityClient;EntityConnection;ChangeDatabase;(System.String);summary;df-generated | +| System.Data.Entity.Core.EntityClient;EntityConnection;Close;();summary;df-generated | +| System.Data.Entity.Core.EntityClient;EntityConnection;Dispose;(System.Boolean);summary;df-generated | +| System.Data.Entity.Core.EntityClient;EntityConnection;EnlistTransaction;(System.Transactions.Transaction);summary;df-generated | +| System.Data.Entity.Core.EntityClient;EntityConnection;Open;();summary;df-generated | +| System.Data.Entity.Core.EntityClient;EntityConnection;get_ConnectionTimeout;();summary;df-generated | +| System.Data.Entity.Core.EntityClient;EntityConnection;get_DataSource;();summary;df-generated | +| System.Data.Entity.Core.EntityClient;EntityConnection;get_Database;();summary;df-generated | +| System.Data.Entity.Core.EntityClient;EntityConnection;get_DbProviderFactory;();summary;df-generated | +| System.Data.Entity.Core.EntityClient;EntityConnection;get_State;();summary;df-generated | +| System.Data.Entity.Core.EntityClient;EntityConnectionStringBuilder;ContainsKey;(System.String);summary;df-generated | +| System.Data.Entity.Core.EntityClient;EntityConnectionStringBuilder;Remove;(System.String);summary;df-generated | +| System.Data.Entity.Core.EntityClient;EntityConnectionStringBuilder;get_IsFixedSize;();summary;df-generated | +| System.Data.Entity.Core.EntityClient;EntityDataReader;Close;();summary;df-generated | +| System.Data.Entity.Core.EntityClient;EntityDataReader;Dispose;(System.Boolean);summary;df-generated | +| System.Data.Entity.Core.EntityClient;EntityDataReader;GetBoolean;(System.Int32);summary;df-generated | +| System.Data.Entity.Core.EntityClient;EntityDataReader;GetByte;(System.Int32);summary;df-generated | +| System.Data.Entity.Core.EntityClient;EntityDataReader;GetBytes;(System.Int32,System.Int64,System.Byte[],System.Int32,System.Int32);summary;df-generated | +| System.Data.Entity.Core.EntityClient;EntityDataReader;GetChar;(System.Int32);summary;df-generated | +| System.Data.Entity.Core.EntityClient;EntityDataReader;GetChars;(System.Int32,System.Int64,System.Char[],System.Int32,System.Int32);summary;df-generated | +| System.Data.Entity.Core.EntityClient;EntityDataReader;GetDataTypeName;(System.Int32);summary;manual | +| System.Data.Entity.Core.EntityClient;EntityDataReader;GetDateTime;(System.Int32);summary;df-generated | +| System.Data.Entity.Core.EntityClient;EntityDataReader;GetDbDataReader;(System.Int32);summary;df-generated | +| System.Data.Entity.Core.EntityClient;EntityDataReader;GetDecimal;(System.Int32);summary;df-generated | +| System.Data.Entity.Core.EntityClient;EntityDataReader;GetDouble;(System.Int32);summary;df-generated | +| System.Data.Entity.Core.EntityClient;EntityDataReader;GetFieldType;(System.Int32);summary;df-generated | +| System.Data.Entity.Core.EntityClient;EntityDataReader;GetFloat;(System.Int32);summary;df-generated | +| System.Data.Entity.Core.EntityClient;EntityDataReader;GetGuid;(System.Int32);summary;manual | +| System.Data.Entity.Core.EntityClient;EntityDataReader;GetInt16;(System.Int32);summary;df-generated | +| System.Data.Entity.Core.EntityClient;EntityDataReader;GetInt32;(System.Int32);summary;df-generated | +| System.Data.Entity.Core.EntityClient;EntityDataReader;GetInt64;(System.Int32);summary;df-generated | +| System.Data.Entity.Core.EntityClient;EntityDataReader;GetName;(System.Int32);summary;manual | +| System.Data.Entity.Core.EntityClient;EntityDataReader;GetOrdinal;(System.String);summary;df-generated | +| System.Data.Entity.Core.EntityClient;EntityDataReader;GetProviderSpecificFieldType;(System.Int32);summary;df-generated | +| System.Data.Entity.Core.EntityClient;EntityDataReader;IsDBNull;(System.Int32);summary;df-generated | +| System.Data.Entity.Core.EntityClient;EntityDataReader;NextResult;();summary;df-generated | +| System.Data.Entity.Core.EntityClient;EntityDataReader;NextResultAsync;(System.Threading.CancellationToken);summary;df-generated | +| System.Data.Entity.Core.EntityClient;EntityDataReader;Read;();summary;df-generated | +| System.Data.Entity.Core.EntityClient;EntityDataReader;ReadAsync;(System.Threading.CancellationToken);summary;df-generated | +| System.Data.Entity.Core.EntityClient;EntityDataReader;get_Depth;();summary;df-generated | +| System.Data.Entity.Core.EntityClient;EntityDataReader;get_FieldCount;();summary;df-generated | +| System.Data.Entity.Core.EntityClient;EntityDataReader;get_HasRows;();summary;df-generated | +| System.Data.Entity.Core.EntityClient;EntityDataReader;get_IsClosed;();summary;df-generated | +| System.Data.Entity.Core.EntityClient;EntityDataReader;get_RecordsAffected;();summary;df-generated | +| System.Data.Entity.Core.EntityClient;EntityDataReader;get_VisibleFieldCount;();summary;df-generated | +| System.Data.Entity.Core.EntityClient;EntityParameter;ResetDbType;();summary;df-generated | +| System.Data.Entity.Core.EntityClient;EntityParameter;get_IsNullable;();summary;df-generated | +| System.Data.Entity.Core.EntityClient;EntityParameterCollection;Contains;(System.Object);summary;df-generated | +| System.Data.Entity.Core.EntityClient;EntityParameterCollection;Contains;(System.String);summary;df-generated | +| System.Data.Entity.Core.EntityClient;EntityParameterCollection;IndexOf;(System.Object);summary;df-generated | +| System.Data.Entity.Core.EntityClient;EntityParameterCollection;IndexOf;(System.String);summary;df-generated | +| System.Data.Entity.Core.EntityClient;EntityParameterCollection;Remove;(System.Object);summary;df-generated | +| System.Data.Entity.Core.EntityClient;EntityParameterCollection;RemoveAt;(System.Int32);summary;df-generated | +| System.Data.Entity.Core.EntityClient;EntityParameterCollection;RemoveAt;(System.String);summary;df-generated | +| System.Data.Entity.Core.EntityClient;EntityParameterCollection;get_Count;();summary;df-generated | +| System.Data.Entity.Core.EntityClient;EntityParameterCollection;get_IsFixedSize;();summary;df-generated | +| System.Data.Entity.Core.EntityClient;EntityParameterCollection;get_IsReadOnly;();summary;df-generated | +| System.Data.Entity.Core.EntityClient;EntityParameterCollection;get_IsSynchronized;();summary;df-generated | +| System.Data.Entity.Core.EntityClient;EntityProviderFactory;CreateCommand;();summary;df-generated | +| System.Data.Entity.Core.EntityClient;EntityProviderFactory;CreateCommandBuilder;();summary;df-generated | +| System.Data.Entity.Core.EntityClient;EntityProviderFactory;CreateConnection;();summary;df-generated | +| System.Data.Entity.Core.EntityClient;EntityProviderFactory;CreateConnectionStringBuilder;();summary;df-generated | +| System.Data.Entity.Core.EntityClient;EntityProviderFactory;CreateDataAdapter;();summary;df-generated | +| System.Data.Entity.Core.EntityClient;EntityProviderFactory;CreateParameter;();summary;df-generated | +| System.Data.Entity.Core.EntityClient;EntityTransaction;Commit;();summary;df-generated | +| System.Data.Entity.Core.EntityClient;EntityTransaction;Dispose;(System.Boolean);summary;df-generated | +| System.Data.Entity.Core.EntityClient;EntityTransaction;Rollback;();summary;df-generated | +| System.Data.Entity.Core.EntityClient;EntityTransaction;get_IsolationLevel;();summary;df-generated | +| System.Data.Entity.Core.Metadata.Edm;ReadOnlyMetadataCollection+Enumerator;Dispose;();summary;df-generated | +| System.Data.Entity.Core.Metadata.Edm;ReadOnlyMetadataCollection+Enumerator;MoveNext;();summary;df-generated | +| System.Data.Entity.Core.Metadata.Edm;ReadOnlyMetadataCollection+Enumerator;Reset;();summary;df-generated | +| System.Data.Entity.Core.Metadata.Edm;ReadOnlyMetadataCollection+Enumerator;get_Current;();summary;df-generated | +| System.Data.Entity.Core.Objects.DataClasses;EntityCollection;Contains;(TEntity);summary;df-generated | +| System.Data.Entity.Core.Objects.DataClasses;EntityCollection;Remove;(TEntity);summary;df-generated | +| System.Data.Entity.Core.Objects.DataClasses;EntityCollection;get_ContainsListCollection;();summary;df-generated | +| System.Data.Entity.Core.Objects.DataClasses;EntityCollection;get_Count;();summary;df-generated | +| System.Data.Entity.Core.Objects.DataClasses;EntityCollection;get_IsReadOnly;();summary;df-generated | +| System.Data.Entity.Core.Objects;DbUpdatableDataRecord;GetBoolean;(System.Int32);summary;df-generated | +| System.Data.Entity.Core.Objects;DbUpdatableDataRecord;GetByte;(System.Int32);summary;df-generated | +| System.Data.Entity.Core.Objects;DbUpdatableDataRecord;GetBytes;(System.Int32,System.Int64,System.Byte[],System.Int32,System.Int32);summary;df-generated | +| System.Data.Entity.Core.Objects;DbUpdatableDataRecord;GetChar;(System.Int32);summary;df-generated | +| System.Data.Entity.Core.Objects;DbUpdatableDataRecord;GetChars;(System.Int32,System.Int64,System.Char[],System.Int32,System.Int32);summary;df-generated | +| System.Data.Entity.Core.Objects;DbUpdatableDataRecord;GetData;(System.Int32);summary;df-generated | +| System.Data.Entity.Core.Objects;DbUpdatableDataRecord;GetDataTypeName;(System.Int32);summary;manual | +| System.Data.Entity.Core.Objects;DbUpdatableDataRecord;GetDateTime;(System.Int32);summary;df-generated | +| System.Data.Entity.Core.Objects;DbUpdatableDataRecord;GetDbDataReader;(System.Int32);summary;df-generated | +| System.Data.Entity.Core.Objects;DbUpdatableDataRecord;GetDecimal;(System.Int32);summary;df-generated | +| System.Data.Entity.Core.Objects;DbUpdatableDataRecord;GetDouble;(System.Int32);summary;df-generated | +| System.Data.Entity.Core.Objects;DbUpdatableDataRecord;GetFieldType;(System.Int32);summary;df-generated | +| System.Data.Entity.Core.Objects;DbUpdatableDataRecord;GetFloat;(System.Int32);summary;df-generated | +| System.Data.Entity.Core.Objects;DbUpdatableDataRecord;GetGuid;(System.Int32);summary;manual | +| System.Data.Entity.Core.Objects;DbUpdatableDataRecord;GetInt16;(System.Int32);summary;df-generated | +| System.Data.Entity.Core.Objects;DbUpdatableDataRecord;GetInt32;(System.Int32);summary;df-generated | +| System.Data.Entity.Core.Objects;DbUpdatableDataRecord;GetInt64;(System.Int32);summary;df-generated | +| System.Data.Entity.Core.Objects;DbUpdatableDataRecord;GetName;(System.Int32);summary;manual | +| System.Data.Entity.Core.Objects;DbUpdatableDataRecord;GetOrdinal;(System.String);summary;df-generated | +| System.Data.Entity.Core.Objects;DbUpdatableDataRecord;IsDBNull;(System.Int32);summary;df-generated | +| System.Data.Entity.Core.Objects;DbUpdatableDataRecord;get_FieldCount;();summary;df-generated | +| System.Data.Entity.Core.Objects;ObjectContext;Dispose;();summary;df-generated | +| System.Data.Entity.Core.Objects;ObjectParameterCollection;Contains;(System.Data.Entity.Core.Objects.ObjectParameter);summary;df-generated | +| System.Data.Entity.Core.Objects;ObjectParameterCollection;Remove;(System.Data.Entity.Core.Objects.ObjectParameter);summary;df-generated | +| System.Data.Entity.Core.Objects;ObjectParameterCollection;get_Count;();summary;df-generated | +| System.Data.Entity.Core.Objects;ObjectParameterCollection;get_IsReadOnly;();summary;df-generated | +| System.Data.Entity.Core.Objects;ObjectQuery;get_ContainsListCollection;();summary;df-generated | +| System.Data.Entity.Core.Objects;ObjectQuery;get_ElementType;();summary;df-generated | +| System.Data.Entity.Core.Objects;ObjectResult;Dispose;();summary;df-generated | +| System.Data.Entity.Core.Objects;ObjectResult;get_ContainsListCollection;();summary;df-generated | +| System.Data.Entity.Core.Objects;ProxyDataContractResolver;ResolveName;(System.String,System.String,System.Type,System.Runtime.Serialization.DataContractResolver);summary;df-generated | +| System.Data.Entity.Core.Objects;ProxyDataContractResolver;TryResolveType;(System.Type,System.Type,System.Runtime.Serialization.DataContractResolver,System.Xml.XmlDictionaryString,System.Xml.XmlDictionaryString);summary;df-generated | +| System.Data.Entity.Core;EntityKey;Equals;(System.Data.Entity.Core.EntityKey);summary;df-generated | +| System.Data.Entity.Hierarchy;HierarchyId;CompareTo;(System.Object);summary;df-generated | +| System.Data.Entity.Infrastructure.Interception;DatabaseLogger;Dispose;();summary;df-generated | +| System.Data.Entity.Infrastructure;DbQuery;get_ContainsListCollection;();summary;df-generated | +| System.Data.Entity.Infrastructure;DbQuery;get_ElementType;();summary;df-generated | +| System.Data.Entity.Infrastructure;DbQuery;get_ContainsListCollection;();summary;df-generated | +| System.Data.Entity.Infrastructure;DbQuery;get_ElementType;();summary;df-generated | +| System.Data.Entity.Infrastructure;DbRawSqlQuery;get_ContainsListCollection;();summary;df-generated | +| System.Data.Entity.Infrastructure;DbRawSqlQuery;get_ContainsListCollection;();summary;df-generated | +| System.Data.Entity.Infrastructure;ObjectReferenceEqualityComparer;Equals;(System.Object,System.Object);summary;df-generated | +| System.Data.Entity.Infrastructure;ObjectReferenceEqualityComparer;GetHashCode;(System.Object);summary;df-generated | +| System.Data.Entity.Infrastructure;TransactionHandler;Dispose;();summary;df-generated | +| System.Data.Entity.Migrations.Utilities;IndentedTextWriter;Close;();summary;df-generated | +| System.Data.Entity.Migrations.Utilities;IndentedTextWriter;Flush;();summary;df-generated | +| System.Data.Entity.Migrations.Utilities;IndentedTextWriter;Write;(System.Boolean);summary;df-generated | +| System.Data.Entity.Migrations.Utilities;IndentedTextWriter;Write;(System.Char);summary;df-generated | +| System.Data.Entity.Migrations.Utilities;IndentedTextWriter;Write;(System.Double);summary;df-generated | +| System.Data.Entity.Migrations.Utilities;IndentedTextWriter;Write;(System.Int32);summary;df-generated | +| System.Data.Entity.Migrations.Utilities;IndentedTextWriter;Write;(System.Int64);summary;df-generated | +| System.Data.Entity.Migrations.Utilities;IndentedTextWriter;Write;(System.Single);summary;df-generated | +| System.Data.Entity.Migrations.Utilities;IndentedTextWriter;WriteLine;();summary;df-generated | +| System.Data.Entity.Migrations.Utilities;IndentedTextWriter;WriteLine;(System.Boolean);summary;df-generated | +| System.Data.Entity.Migrations.Utilities;IndentedTextWriter;WriteLine;(System.Char);summary;df-generated | +| System.Data.Entity.Migrations.Utilities;IndentedTextWriter;WriteLine;(System.Double);summary;df-generated | +| System.Data.Entity.Migrations.Utilities;IndentedTextWriter;WriteLine;(System.Int32);summary;df-generated | +| System.Data.Entity.Migrations.Utilities;IndentedTextWriter;WriteLine;(System.Int64);summary;df-generated | +| System.Data.Entity.Migrations.Utilities;IndentedTextWriter;WriteLine;(System.Single);summary;df-generated | +| System.Data.Entity.Migrations.Utilities;IndentedTextWriter;WriteLine;(System.UInt32);summary;df-generated | +| System.Data.Entity;DbContext;Dispose;();summary;df-generated | +| System.Data.Entity;DbContextTransaction;Dispose;();summary;df-generated | | System.Data.Odbc;OdbcPermission;Add;(System.String,System.String,System.Data.KeyRestrictionBehavior);summary;df-generated | | System.Data.Odbc;OdbcPermission;OdbcPermission;(System.Security.Permissions.PermissionState);summary;df-generated | | System.Data.Odbc;OdbcPermission;OdbcPermission;(System.Security.Permissions.PermissionState,System.Boolean);summary;df-generated | @@ -26115,11 +26909,95 @@ neutral | System.Data.OracleClient;OraclePermissionAttribute;OraclePermissionAttribute;(System.Security.Permissions.SecurityAction);summary;df-generated | | System.Data.OracleClient;OraclePermissionAttribute;ShouldSerializeConnectionString;();summary;df-generated | | System.Data.OracleClient;OraclePermissionAttribute;ShouldSerializeKeyRestrictions;();summary;df-generated | +| System.Data.SqlClient;SqlBulkCopy;Dispose;();summary;df-generated | +| System.Data.SqlClient;SqlClientFactory;CreateCommand;();summary;df-generated | +| System.Data.SqlClient;SqlClientFactory;CreateCommandBuilder;();summary;df-generated | +| System.Data.SqlClient;SqlClientFactory;CreateConnection;();summary;df-generated | +| System.Data.SqlClient;SqlClientFactory;CreateConnectionStringBuilder;();summary;df-generated | +| System.Data.SqlClient;SqlClientFactory;CreateDataAdapter;();summary;df-generated | +| System.Data.SqlClient;SqlClientFactory;CreateParameter;();summary;df-generated | | System.Data.SqlClient;SqlClientPermission;Add;(System.String,System.String,System.Data.KeyRestrictionBehavior);summary;df-generated | | System.Data.SqlClient;SqlClientPermission;SqlClientPermission;(System.Security.Permissions.PermissionState);summary;df-generated | | System.Data.SqlClient;SqlClientPermission;SqlClientPermission;(System.Security.Permissions.PermissionState,System.Boolean);summary;df-generated | | System.Data.SqlClient;SqlClientPermissionAttribute;CreatePermission;();summary;df-generated | | System.Data.SqlClient;SqlClientPermissionAttribute;SqlClientPermissionAttribute;(System.Security.Permissions.SecurityAction);summary;df-generated | +| System.Data.SqlClient;SqlCommand;Cancel;();summary;df-generated | +| System.Data.SqlClient;SqlCommand;CreateDbParameter;();summary;df-generated | +| System.Data.SqlClient;SqlCommand;Dispose;(System.Boolean);summary;df-generated | +| System.Data.SqlClient;SqlCommand;ExecuteNonQuery;();summary;df-generated | +| System.Data.SqlClient;SqlCommand;ExecuteNonQueryAsync;(System.Threading.CancellationToken);summary;df-generated | +| System.Data.SqlClient;SqlCommand;Prepare;();summary;df-generated | +| System.Data.SqlClient;SqlCommandBuilder;ApplyParameterInfo;(System.Data.Common.DbParameter,System.Data.DataRow,System.Data.StatementType,System.Boolean);summary;df-generated | +| System.Data.SqlClient;SqlCommandBuilder;GetParameterName;(System.Int32);summary;df-generated | +| System.Data.SqlClient;SqlCommandBuilder;GetParameterPlaceholder;(System.Int32);summary;df-generated | +| System.Data.SqlClient;SqlCommandBuilder;GetSchemaTable;(System.Data.Common.DbCommand);summary;df-generated | +| System.Data.SqlClient;SqlCommandBuilder;SetRowUpdatingHandler;(System.Data.Common.DbDataAdapter);summary;df-generated | +| System.Data.SqlClient;SqlConnection;ChangeDatabase;(System.String);summary;df-generated | +| System.Data.SqlClient;SqlConnection;Close;();summary;df-generated | +| System.Data.SqlClient;SqlConnection;Dispose;(System.Boolean);summary;df-generated | +| System.Data.SqlClient;SqlConnection;GetSchema;();summary;df-generated | +| System.Data.SqlClient;SqlConnection;GetSchema;(System.String);summary;df-generated | +| System.Data.SqlClient;SqlConnection;GetSchema;(System.String,System.String[]);summary;df-generated | +| System.Data.SqlClient;SqlConnection;Open;();summary;df-generated | +| System.Data.SqlClient;SqlConnection;get_ConnectionTimeout;();summary;df-generated | +| System.Data.SqlClient;SqlConnection;get_DataSource;();summary;df-generated | +| System.Data.SqlClient;SqlConnection;get_Database;();summary;df-generated | +| System.Data.SqlClient;SqlConnection;get_State;();summary;df-generated | +| System.Data.SqlClient;SqlConnectionStringBuilder;ContainsKey;(System.String);summary;df-generated | +| System.Data.SqlClient;SqlConnectionStringBuilder;Remove;(System.String);summary;df-generated | +| System.Data.SqlClient;SqlConnectionStringBuilder;ShouldSerialize;(System.String);summary;df-generated | +| System.Data.SqlClient;SqlDataAdapter;OnRowUpdated;(System.Data.Common.RowUpdatedEventArgs);summary;df-generated | +| System.Data.SqlClient;SqlDataAdapter;OnRowUpdating;(System.Data.Common.RowUpdatingEventArgs);summary;df-generated | +| System.Data.SqlClient;SqlDataReader;GetBoolean;(System.Int32);summary;df-generated | +| System.Data.SqlClient;SqlDataReader;GetByte;(System.Int32);summary;df-generated | +| System.Data.SqlClient;SqlDataReader;GetBytes;(System.Int32,System.Int64,System.Byte[],System.Int32,System.Int32);summary;df-generated | +| System.Data.SqlClient;SqlDataReader;GetChar;(System.Int32);summary;df-generated | +| System.Data.SqlClient;SqlDataReader;GetChars;(System.Int32,System.Int64,System.Char[],System.Int32,System.Int32);summary;df-generated | +| System.Data.SqlClient;SqlDataReader;GetColumnSchema;();summary;df-generated | +| System.Data.SqlClient;SqlDataReader;GetDataTypeName;(System.Int32);summary;manual | +| System.Data.SqlClient;SqlDataReader;GetDateTime;(System.Int32);summary;df-generated | +| System.Data.SqlClient;SqlDataReader;GetDecimal;(System.Int32);summary;df-generated | +| System.Data.SqlClient;SqlDataReader;GetDouble;(System.Int32);summary;df-generated | +| System.Data.SqlClient;SqlDataReader;GetFieldType;(System.Int32);summary;df-generated | +| System.Data.SqlClient;SqlDataReader;GetFloat;(System.Int32);summary;df-generated | +| System.Data.SqlClient;SqlDataReader;GetGuid;(System.Int32);summary;manual | +| System.Data.SqlClient;SqlDataReader;GetInt16;(System.Int32);summary;df-generated | +| System.Data.SqlClient;SqlDataReader;GetInt32;(System.Int32);summary;df-generated | +| System.Data.SqlClient;SqlDataReader;GetInt64;(System.Int32);summary;df-generated | +| System.Data.SqlClient;SqlDataReader;GetName;(System.Int32);summary;manual | +| System.Data.SqlClient;SqlDataReader;GetOrdinal;(System.String);summary;df-generated | +| System.Data.SqlClient;SqlDataReader;GetProviderSpecificFieldType;(System.Int32);summary;df-generated | +| System.Data.SqlClient;SqlDataReader;GetStream;(System.Int32);summary;df-generated | +| System.Data.SqlClient;SqlDataReader;IsDBNull;(System.Int32);summary;df-generated | +| System.Data.SqlClient;SqlDataReader;IsDBNullAsync;(System.Int32,System.Threading.CancellationToken);summary;df-generated | +| System.Data.SqlClient;SqlDataReader;NextResult;();summary;df-generated | +| System.Data.SqlClient;SqlDataReader;NextResultAsync;(System.Threading.CancellationToken);summary;df-generated | +| System.Data.SqlClient;SqlDataReader;Read;();summary;df-generated | +| System.Data.SqlClient;SqlDataReader;ReadAsync;(System.Threading.CancellationToken);summary;df-generated | +| System.Data.SqlClient;SqlDataReader;get_Depth;();summary;df-generated | +| System.Data.SqlClient;SqlDataReader;get_FieldCount;();summary;df-generated | +| System.Data.SqlClient;SqlDataReader;get_HasRows;();summary;df-generated | +| System.Data.SqlClient;SqlDataReader;get_IsClosed;();summary;df-generated | +| System.Data.SqlClient;SqlDataReader;get_RecordsAffected;();summary;df-generated | +| System.Data.SqlClient;SqlDataReader;get_VisibleFieldCount;();summary;df-generated | +| System.Data.SqlClient;SqlErrorCollection;get_Count;();summary;df-generated | +| System.Data.SqlClient;SqlErrorCollection;get_IsSynchronized;();summary;df-generated | +| System.Data.SqlClient;SqlParameter;ResetDbType;();summary;df-generated | +| System.Data.SqlClient;SqlParameter;get_IsNullable;();summary;df-generated | +| System.Data.SqlClient;SqlParameterCollection;Contains;(System.Object);summary;df-generated | +| System.Data.SqlClient;SqlParameterCollection;Contains;(System.String);summary;df-generated | +| System.Data.SqlClient;SqlParameterCollection;IndexOf;(System.Object);summary;df-generated | +| System.Data.SqlClient;SqlParameterCollection;IndexOf;(System.String);summary;df-generated | +| System.Data.SqlClient;SqlParameterCollection;Remove;(System.Object);summary;df-generated | +| System.Data.SqlClient;SqlParameterCollection;RemoveAt;(System.Int32);summary;df-generated | +| System.Data.SqlClient;SqlParameterCollection;RemoveAt;(System.String);summary;df-generated | +| System.Data.SqlClient;SqlParameterCollection;get_Count;();summary;df-generated | +| System.Data.SqlClient;SqlParameterCollection;get_IsFixedSize;();summary;df-generated | +| System.Data.SqlClient;SqlParameterCollection;get_IsReadOnly;();summary;df-generated | +| System.Data.SqlClient;SqlTransaction;Commit;();summary;df-generated | +| System.Data.SqlClient;SqlTransaction;Dispose;(System.Boolean);summary;df-generated | +| System.Data.SqlClient;SqlTransaction;Rollback;();summary;df-generated | +| System.Data.SqlClient;SqlTransaction;get_IsolationLevel;();summary;df-generated | | System.Data.SqlTypes;INullable;get_IsNull;();summary;df-generated | | System.Data.SqlTypes;SqlAlreadyFilledException;SqlAlreadyFilledException;(System.String);summary;df-generated | | System.Data.SqlTypes;SqlAlreadyFilledException;SqlAlreadyFilledException;(System.String,System.Exception);summary;df-generated | @@ -26408,6 +27286,13 @@ neutral | System.Data.SqlTypes;SqlDouble;op_Multiply;(System.Data.SqlTypes.SqlDouble,System.Data.SqlTypes.SqlDouble);summary;df-generated | | System.Data.SqlTypes;SqlDouble;op_Subtraction;(System.Data.SqlTypes.SqlDouble,System.Data.SqlTypes.SqlDouble);summary;df-generated | | System.Data.SqlTypes;SqlDouble;op_UnaryNegation;(System.Data.SqlTypes.SqlDouble);summary;df-generated | +| System.Data.SqlTypes;SqlFileStream;Flush;();summary;df-generated | +| System.Data.SqlTypes;SqlFileStream;Seek;(System.Int64,System.IO.SeekOrigin);summary;df-generated | +| System.Data.SqlTypes;SqlFileStream;SetLength;(System.Int64);summary;df-generated | +| System.Data.SqlTypes;SqlFileStream;get_CanRead;();summary;df-generated | +| System.Data.SqlTypes;SqlFileStream;get_CanSeek;();summary;df-generated | +| System.Data.SqlTypes;SqlFileStream;get_CanWrite;();summary;df-generated | +| System.Data.SqlTypes;SqlFileStream;get_Length;();summary;df-generated | | System.Data.SqlTypes;SqlGuid;CompareTo;(System.Data.SqlTypes.SqlGuid);summary;df-generated | | System.Data.SqlTypes;SqlGuid;CompareTo;(System.Object);summary;df-generated | | System.Data.SqlTypes;SqlGuid;Equals;(System.Data.SqlTypes.SqlGuid);summary;df-generated | @@ -27046,14 +27931,17 @@ neutral | System.Data;DataTableReader;GetBytes;(System.Int32,System.Int64,System.Byte[],System.Int32,System.Int32);summary;df-generated | | System.Data;DataTableReader;GetChar;(System.Int32);summary;df-generated | | System.Data;DataTableReader;GetChars;(System.Int32,System.Int64,System.Char[],System.Int32,System.Int32);summary;df-generated | +| System.Data;DataTableReader;GetDataTypeName;(System.Int32);summary;manual | | System.Data;DataTableReader;GetDateTime;(System.Int32);summary;df-generated | | System.Data;DataTableReader;GetDecimal;(System.Int32);summary;df-generated | | System.Data;DataTableReader;GetDouble;(System.Int32);summary;df-generated | | System.Data;DataTableReader;GetFieldType;(System.Int32);summary;df-generated | | System.Data;DataTableReader;GetFloat;(System.Int32);summary;df-generated | +| System.Data;DataTableReader;GetGuid;(System.Int32);summary;manual | | System.Data;DataTableReader;GetInt16;(System.Int32);summary;df-generated | | System.Data;DataTableReader;GetInt32;(System.Int32);summary;df-generated | | System.Data;DataTableReader;GetInt64;(System.Int32);summary;df-generated | +| System.Data;DataTableReader;GetName;(System.Int32);summary;manual | | System.Data;DataTableReader;GetOrdinal;(System.String);summary;df-generated | | System.Data;DataTableReader;GetProviderSpecificFieldType;(System.Int32);summary;df-generated | | System.Data;DataTableReader;IsDBNull;(System.Int32);summary;df-generated | @@ -27790,10 +28678,12 @@ neutral | System.Diagnostics;ActivityTagsCollection+Enumerator;Dispose;();summary;df-generated | | System.Diagnostics;ActivityTagsCollection+Enumerator;MoveNext;();summary;df-generated | | System.Diagnostics;ActivityTagsCollection+Enumerator;Reset;();summary;df-generated | +| System.Diagnostics;ActivityTagsCollection+Enumerator;get_Current;();summary;df-generated | | System.Diagnostics;ActivityTagsCollection;Contains;(System.Collections.Generic.KeyValuePair);summary;df-generated | | System.Diagnostics;ActivityTagsCollection;ContainsKey;(System.String);summary;df-generated | | System.Diagnostics;ActivityTagsCollection;Remove;(System.Collections.Generic.KeyValuePair);summary;df-generated | | System.Diagnostics;ActivityTagsCollection;Remove;(System.String);summary;df-generated | +| System.Diagnostics;ActivityTagsCollection;TryGetValue;(System.String,System.Object);summary;df-generated | | System.Diagnostics;ActivityTagsCollection;get_Count;();summary;df-generated | | System.Diagnostics;ActivityTagsCollection;get_IsReadOnly;();summary;df-generated | | System.Diagnostics;ActivityTraceId;CopyTo;(System.Span);summary;df-generated | @@ -27913,6 +28803,7 @@ neutral | System.Diagnostics;DiagnosticListener;IsEnabled;(System.String,System.Object,System.Object);summary;df-generated | | System.Diagnostics;DiagnosticListener;OnActivityExport;(System.Diagnostics.Activity,System.Object);summary;df-generated | | System.Diagnostics;DiagnosticListener;OnActivityImport;(System.Diagnostics.Activity,System.Object);summary;df-generated | +| System.Diagnostics;DiagnosticListener;Subscribe;(System.IObserver>);summary;df-generated | | System.Diagnostics;DiagnosticListener;Write;(System.String,System.Object);summary;df-generated | | System.Diagnostics;DiagnosticListener;get_AllListeners;();summary;df-generated | | System.Diagnostics;DiagnosticSource;IsEnabled;(System.String);summary;df-generated | @@ -28196,6 +29087,7 @@ neutral | System.Diagnostics;TagList+Enumerator;Dispose;();summary;df-generated | | System.Diagnostics;TagList+Enumerator;MoveNext;();summary;df-generated | | System.Diagnostics;TagList+Enumerator;Reset;();summary;df-generated | +| System.Diagnostics;TagList+Enumerator;get_Current;();summary;df-generated | | System.Diagnostics;TagList;Add;(System.String,System.Object);summary;df-generated | | System.Diagnostics;TagList;Contains;(System.Collections.Generic.KeyValuePair);summary;df-generated | | System.Diagnostics;TagList;IndexOf;(System.Collections.Generic.KeyValuePair);summary;df-generated | @@ -28203,6 +29095,7 @@ neutral | System.Diagnostics;TagList;RemoveAt;(System.Int32);summary;df-generated | | System.Diagnostics;TagList;get_Count;();summary;df-generated | | System.Diagnostics;TagList;get_IsReadOnly;();summary;df-generated | +| System.Diagnostics;TagList;get_Item;(System.Int32);summary;df-generated | | System.Diagnostics;TextWriterTraceListener;Close;();summary;df-generated | | System.Diagnostics;TextWriterTraceListener;Dispose;(System.Boolean);summary;df-generated | | System.Diagnostics;TextWriterTraceListener;Flush;();summary;df-generated | @@ -28300,6 +29193,25 @@ neutral | System.Diagnostics;XmlWriterTraceListener;XmlWriterTraceListener;(System.IO.TextWriter,System.String);summary;df-generated | | System.Diagnostics;XmlWriterTraceListener;XmlWriterTraceListener;(System.String);summary;df-generated | | System.Diagnostics;XmlWriterTraceListener;XmlWriterTraceListener;(System.String,System.String);summary;df-generated | +| System.Drawing.Drawing2D;CustomLineCap;Dispose;();summary;df-generated | +| System.Drawing.Drawing2D;GraphicsPath;Dispose;();summary;df-generated | +| System.Drawing.Drawing2D;GraphicsPathIterator;Dispose;();summary;df-generated | +| System.Drawing.Drawing2D;Matrix;Dispose;();summary;df-generated | +| System.Drawing.Imaging;EncoderParameter;Dispose;();summary;df-generated | +| System.Drawing.Imaging;EncoderParameters;Dispose;();summary;df-generated | +| System.Drawing.Imaging;ImageAttributes;Dispose;();summary;df-generated | +| System.Drawing.Printing;MarginsConverter;CanConvertFrom;(System.ComponentModel.ITypeDescriptorContext,System.Type);summary;df-generated | +| System.Drawing.Printing;MarginsConverter;CanConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Type);summary;df-generated | +| System.Drawing.Printing;MarginsConverter;CreateInstance;(System.ComponentModel.ITypeDescriptorContext,System.Collections.IDictionary);summary;df-generated | +| System.Drawing.Printing;MarginsConverter;GetCreateInstanceSupported;(System.ComponentModel.ITypeDescriptorContext);summary;df-generated | +| System.Drawing.Printing;PrinterSettings+PaperSizeCollection;get_Count;();summary;df-generated | +| System.Drawing.Printing;PrinterSettings+PaperSizeCollection;get_IsSynchronized;();summary;df-generated | +| System.Drawing.Printing;PrinterSettings+PaperSourceCollection;get_Count;();summary;df-generated | +| System.Drawing.Printing;PrinterSettings+PaperSourceCollection;get_IsSynchronized;();summary;df-generated | +| System.Drawing.Printing;PrinterSettings+PrinterResolutionCollection;get_Count;();summary;df-generated | +| System.Drawing.Printing;PrinterSettings+PrinterResolutionCollection;get_IsSynchronized;();summary;df-generated | +| System.Drawing.Printing;PrinterSettings+StringCollection;get_Count;();summary;df-generated | +| System.Drawing.Printing;PrinterSettings+StringCollection;get_IsSynchronized;();summary;df-generated | | System.Drawing.Printing;PrintingPermission;FromXml;(System.Security.SecurityElement);summary;df-generated | | System.Drawing.Printing;PrintingPermission;IsSubsetOf;(System.Security.IPermission);summary;df-generated | | System.Drawing.Printing;PrintingPermission;IsUnrestricted;();summary;df-generated | @@ -28308,6 +29220,10 @@ neutral | System.Drawing.Printing;PrintingPermission;ToXml;();summary;df-generated | | System.Drawing.Printing;PrintingPermissionAttribute;CreatePermission;();summary;df-generated | | System.Drawing.Printing;PrintingPermissionAttribute;PrintingPermissionAttribute;(System.Security.Permissions.SecurityAction);summary;df-generated | +| System.Drawing.Text;FontCollection;Dispose;();summary;df-generated | +| System.Drawing;Brush;Dispose;();summary;df-generated | +| System.Drawing;BufferedGraphics;Dispose;();summary;df-generated | +| System.Drawing;BufferedGraphicsContext;Dispose;();summary;df-generated | | System.Drawing;Color;Equals;(System.Drawing.Color);summary;df-generated | | System.Drawing;Color;Equals;(System.Object);summary;df-generated | | System.Drawing;Color;FromArgb;(System.Int32);summary;df-generated | @@ -28480,6 +29396,29 @@ neutral | System.Drawing;ColorTranslator;FromWin32;(System.Int32);summary;df-generated | | System.Drawing;ColorTranslator;ToOle;(System.Drawing.Color);summary;df-generated | | System.Drawing;ColorTranslator;ToWin32;(System.Drawing.Color);summary;df-generated | +| System.Drawing;Font;Dispose;();summary;df-generated | +| System.Drawing;FontConverter+FontNameConverter;CanConvertFrom;(System.ComponentModel.ITypeDescriptorContext,System.Type);summary;df-generated | +| System.Drawing;FontConverter+FontNameConverter;Dispose;();summary;df-generated | +| System.Drawing;FontConverter+FontNameConverter;GetStandardValuesExclusive;(System.ComponentModel.ITypeDescriptorContext);summary;df-generated | +| System.Drawing;FontConverter+FontNameConverter;GetStandardValuesSupported;(System.ComponentModel.ITypeDescriptorContext);summary;df-generated | +| System.Drawing;FontConverter;CanConvertFrom;(System.ComponentModel.ITypeDescriptorContext,System.Type);summary;df-generated | +| System.Drawing;FontConverter;CanConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Type);summary;df-generated | +| System.Drawing;FontConverter;CreateInstance;(System.ComponentModel.ITypeDescriptorContext,System.Collections.IDictionary);summary;df-generated | +| System.Drawing;FontConverter;GetCreateInstanceSupported;(System.ComponentModel.ITypeDescriptorContext);summary;df-generated | +| System.Drawing;FontConverter;GetPropertiesSupported;(System.ComponentModel.ITypeDescriptorContext);summary;df-generated | +| System.Drawing;FontFamily;Dispose;();summary;df-generated | +| System.Drawing;Graphics;Dispose;();summary;df-generated | +| System.Drawing;Icon;Dispose;();summary;df-generated | +| System.Drawing;IconConverter;CanConvertFrom;(System.ComponentModel.ITypeDescriptorContext,System.Type);summary;df-generated | +| System.Drawing;IconConverter;CanConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Type);summary;df-generated | +| System.Drawing;Image;Dispose;();summary;df-generated | +| System.Drawing;ImageConverter;CanConvertFrom;(System.ComponentModel.ITypeDescriptorContext,System.Type);summary;df-generated | +| System.Drawing;ImageConverter;CanConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Type);summary;df-generated | +| System.Drawing;ImageConverter;GetPropertiesSupported;(System.ComponentModel.ITypeDescriptorContext);summary;df-generated | +| System.Drawing;ImageFormatConverter;CanConvertFrom;(System.ComponentModel.ITypeDescriptorContext,System.Type);summary;df-generated | +| System.Drawing;ImageFormatConverter;CanConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Type);summary;df-generated | +| System.Drawing;ImageFormatConverter;GetStandardValuesSupported;(System.ComponentModel.ITypeDescriptorContext);summary;df-generated | +| System.Drawing;Pen;Dispose;();summary;df-generated | | System.Drawing;Point;Add;(System.Drawing.Point,System.Drawing.Size);summary;df-generated | | System.Drawing;Point;Ceiling;(System.Drawing.PointF);summary;df-generated | | System.Drawing;Point;Equals;(System.Drawing.Point);summary;df-generated | @@ -28582,6 +29521,7 @@ neutral | System.Drawing;RectangleF;get_Top;();summary;df-generated | | System.Drawing;RectangleF;op_Equality;(System.Drawing.RectangleF,System.Drawing.RectangleF);summary;df-generated | | System.Drawing;RectangleF;op_Inequality;(System.Drawing.RectangleF,System.Drawing.RectangleF);summary;df-generated | +| System.Drawing;Region;Dispose;();summary;df-generated | | System.Drawing;Size;Add;(System.Drawing.Size,System.Drawing.Size);summary;df-generated | | System.Drawing;Size;Ceiling;(System.Drawing.SizeF);summary;df-generated | | System.Drawing;Size;Equals;(System.Drawing.Size);summary;df-generated | @@ -28635,6 +29575,7 @@ neutral | System.Drawing;SizeFConverter;CreateInstance;(System.ComponentModel.ITypeDescriptorContext,System.Collections.IDictionary);summary;df-generated | | System.Drawing;SizeFConverter;GetCreateInstanceSupported;(System.ComponentModel.ITypeDescriptorContext);summary;df-generated | | System.Drawing;SizeFConverter;GetPropertiesSupported;(System.ComponentModel.ITypeDescriptorContext);summary;df-generated | +| System.Drawing;StringFormat;Dispose;();summary;df-generated | | System.Drawing;SystemColors;get_ActiveBorder;();summary;df-generated | | System.Drawing;SystemColors;get_ActiveCaption;();summary;df-generated | | System.Drawing;SystemColors;get_ActiveCaptionText;();summary;df-generated | @@ -28668,6 +29609,8 @@ neutral | System.Drawing;SystemColors;get_Window;();summary;df-generated | | System.Drawing;SystemColors;get_WindowFrame;();summary;df-generated | | System.Drawing;SystemColors;get_WindowText;();summary;df-generated | +| System.Drawing;ToolboxBitmapAttribute;Equals;(System.Object);summary;df-generated | +| System.Drawing;ToolboxBitmapAttribute;GetHashCode;();summary;df-generated | | System.Dynamic;BinaryOperationBinder;BinaryOperationBinder;(System.Linq.Expressions.ExpressionType);summary;df-generated | | System.Dynamic;BinaryOperationBinder;Bind;(System.Dynamic.DynamicMetaObject,System.Dynamic.DynamicMetaObject[]);summary;df-generated | | System.Dynamic;BinaryOperationBinder;FallbackBinaryOperation;(System.Dynamic.DynamicMetaObject,System.Dynamic.DynamicMetaObject);summary;df-generated | @@ -28748,6 +29691,7 @@ neutral | System.Dynamic;ExpandoObject;GetMetaObject;(System.Linq.Expressions.Expression);summary;df-generated | | System.Dynamic;ExpandoObject;Remove;(System.Collections.Generic.KeyValuePair);summary;df-generated | | System.Dynamic;ExpandoObject;Remove;(System.String);summary;df-generated | +| System.Dynamic;ExpandoObject;TryGetValue;(System.String,System.Object);summary;df-generated | | System.Dynamic;ExpandoObject;get_Count;();summary;df-generated | | System.Dynamic;ExpandoObject;get_IsReadOnly;();summary;df-generated | | System.Dynamic;GetIndexBinder;Bind;(System.Dynamic.DynamicMetaObject,System.Dynamic.DynamicMetaObject[]);summary;df-generated | @@ -29485,6 +30429,7 @@ neutral | System.IO.Enumeration;FileSystemEnumerator;ShouldIncludeEntry;(System.IO.Enumeration.FileSystemEntry);summary;df-generated | | System.IO.Enumeration;FileSystemEnumerator;ShouldRecurseIntoEntry;(System.IO.Enumeration.FileSystemEntry);summary;df-generated | | System.IO.Enumeration;FileSystemEnumerator;TransformEntry;(System.IO.Enumeration.FileSystemEntry);summary;df-generated | +| System.IO.Enumeration;FileSystemEnumerator;get_Current;();summary;df-generated | | System.IO.Enumeration;FileSystemName;MatchesSimpleExpression;(System.ReadOnlySpan,System.ReadOnlySpan,System.Boolean);summary;df-generated | | System.IO.Enumeration;FileSystemName;MatchesWin32Expression;(System.ReadOnlySpan,System.ReadOnlySpan,System.Boolean);summary;df-generated | | System.IO.IsolatedStorage;INormalizeForIsolatedStorage;Normalize;();summary;df-generated | @@ -29616,6 +30561,8 @@ neutral | System.IO.Pipelines;PipeWriter;Complete;(System.Exception);summary;df-generated | | System.IO.Pipelines;PipeWriter;CompleteAsync;(System.Exception);summary;df-generated | | System.IO.Pipelines;PipeWriter;CopyFromAsync;(System.IO.Stream,System.Threading.CancellationToken);summary;df-generated | +| System.IO.Pipelines;PipeWriter;GetMemory;(System.Int32);summary;df-generated | +| System.IO.Pipelines;PipeWriter;GetSpan;(System.Int32);summary;df-generated | | System.IO.Pipelines;PipeWriter;get_CanGetUnflushedBytes;();summary;df-generated | | System.IO.Pipelines;PipeWriter;get_UnflushedBytes;();summary;df-generated | | System.IO.Pipelines;ReadResult;get_IsCanceled;();summary;df-generated | @@ -30605,6 +31552,7 @@ neutral | System.Linq;ImmutableArrayExtensions;SingleOrDefault;(System.Collections.Immutable.ImmutableArray);summary;df-generated | | System.Linq;Lookup;Contains;(TKey);summary;df-generated | | System.Linq;Lookup;get_Count;();summary;df-generated | +| System.Linq;Lookup;get_Item;(TKey);summary;df-generated | | System.Linq;ParallelEnumerable;Any;(System.Linq.ParallelQuery);summary;df-generated | | System.Linq;ParallelEnumerable;Average;(System.Linq.ParallelQuery);summary;df-generated | | System.Linq;ParallelEnumerable;Average;(System.Linq.ParallelQuery);summary;df-generated | @@ -30774,6 +31722,7 @@ neutral | System.Net.Http.Headers;HeaderStringValues+Enumerator;Dispose;();summary;df-generated | | System.Net.Http.Headers;HeaderStringValues+Enumerator;MoveNext;();summary;df-generated | | System.Net.Http.Headers;HeaderStringValues+Enumerator;Reset;();summary;df-generated | +| System.Net.Http.Headers;HeaderStringValues+Enumerator;get_Current;();summary;df-generated | | System.Net.Http.Headers;HeaderStringValues;get_Count;();summary;df-generated | | System.Net.Http.Headers;HttpContentHeaders;get_Allow;();summary;df-generated | | System.Net.Http.Headers;HttpContentHeaders;get_ContentEncoding;();summary;df-generated | @@ -30797,9 +31746,14 @@ neutral | System.Net.Http.Headers;HttpHeadersNonValidated+Enumerator;Dispose;();summary;df-generated | | System.Net.Http.Headers;HttpHeadersNonValidated+Enumerator;MoveNext;();summary;df-generated | | System.Net.Http.Headers;HttpHeadersNonValidated+Enumerator;Reset;();summary;df-generated | +| System.Net.Http.Headers;HttpHeadersNonValidated+Enumerator;get_Current;();summary;df-generated | | System.Net.Http.Headers;HttpHeadersNonValidated;Contains;(System.String);summary;df-generated | | System.Net.Http.Headers;HttpHeadersNonValidated;ContainsKey;(System.String);summary;df-generated | +| System.Net.Http.Headers;HttpHeadersNonValidated;TryGetValue;(System.String,System.Net.Http.Headers.HeaderStringValues);summary;df-generated | | System.Net.Http.Headers;HttpHeadersNonValidated;get_Count;();summary;df-generated | +| System.Net.Http.Headers;HttpHeadersNonValidated;get_Item;(System.String);summary;df-generated | +| System.Net.Http.Headers;HttpHeadersNonValidated;get_Keys;();summary;df-generated | +| System.Net.Http.Headers;HttpHeadersNonValidated;get_Values;();summary;df-generated | | System.Net.Http.Headers;HttpRequestHeaders;get_Accept;();summary;df-generated | | System.Net.Http.Headers;HttpRequestHeaders;get_AcceptCharset;();summary;df-generated | | System.Net.Http.Headers;HttpRequestHeaders;get_AcceptEncoding;();summary;df-generated | @@ -31056,6 +32010,9 @@ neutral | System.Net.Http;HttpRequestOptions;TryGetValue;(System.Net.Http.HttpRequestOptionsKey,TValue);summary;df-generated | | System.Net.Http;HttpRequestOptions;get_Count;();summary;df-generated | | System.Net.Http;HttpRequestOptions;get_IsReadOnly;();summary;df-generated | +| System.Net.Http;HttpRequestOptions;get_Item;(System.String);summary;df-generated | +| System.Net.Http;HttpRequestOptions;get_Keys;();summary;df-generated | +| System.Net.Http;HttpRequestOptions;get_Values;();summary;df-generated | | System.Net.Http;HttpRequestOptionsKey;HttpRequestOptionsKey;(System.String);summary;df-generated | | System.Net.Http;HttpRequestOptionsKey;get_Key;();summary;df-generated | | System.Net.Http;HttpResponseMessage;Dispose;();summary;df-generated | @@ -32234,6 +33191,7 @@ neutral | System.Net;WebUtility;UrlDecodeToBytes;(System.Byte[],System.Int32,System.Int32);summary;df-generated | | System.Net;WebUtility;UrlEncodeToBytes;(System.Byte[],System.Int32,System.Int32);summary;df-generated | | System.Net;WriteStreamClosedEventArgs;get_Error;();summary;df-generated | +| System.Numerics;BigInteger;Abs;(System.Numerics.BigInteger);summary;df-generated | | System.Numerics;BigInteger;Add;(System.Numerics.BigInteger,System.Numerics.BigInteger);summary;df-generated | | System.Numerics;BigInteger;BigInteger;(System.Byte[]);summary;df-generated | | System.Numerics;BigInteger;BigInteger;(System.Decimal);summary;df-generated | @@ -32249,6 +33207,7 @@ neutral | System.Numerics;BigInteger;CompareTo;(System.Numerics.BigInteger);summary;df-generated | | System.Numerics;BigInteger;CompareTo;(System.Object);summary;df-generated | | System.Numerics;BigInteger;CompareTo;(System.UInt64);summary;df-generated | +| System.Numerics;BigInteger;DivRem;(System.Numerics.BigInteger,System.Numerics.BigInteger);summary;df-generated | | System.Numerics;BigInteger;Divide;(System.Numerics.BigInteger,System.Numerics.BigInteger);summary;df-generated | | System.Numerics;BigInteger;Equals;(System.Int64);summary;df-generated | | System.Numerics;BigInteger;Equals;(System.Numerics.BigInteger);summary;df-generated | @@ -32283,6 +33242,10 @@ neutral | System.Numerics;BigInteger;Log10;(System.Numerics.BigInteger);summary;df-generated | | System.Numerics;BigInteger;Log;(System.Numerics.BigInteger);summary;df-generated | | System.Numerics;BigInteger;Log;(System.Numerics.BigInteger,System.Double);summary;df-generated | +| System.Numerics;BigInteger;MaxMagnitude;(System.Numerics.BigInteger,System.Numerics.BigInteger);summary;df-generated | +| System.Numerics;BigInteger;MaxMagnitudeNumber;(System.Numerics.BigInteger,System.Numerics.BigInteger);summary;df-generated | +| System.Numerics;BigInteger;MinMagnitude;(System.Numerics.BigInteger,System.Numerics.BigInteger);summary;df-generated | +| System.Numerics;BigInteger;MinMagnitudeNumber;(System.Numerics.BigInteger,System.Numerics.BigInteger);summary;df-generated | | System.Numerics;BigInteger;ModPow;(System.Numerics.BigInteger,System.Numerics.BigInteger,System.Numerics.BigInteger);summary;df-generated | | System.Numerics;BigInteger;Multiply;(System.Numerics.BigInteger,System.Numerics.BigInteger);summary;df-generated | | System.Numerics;BigInteger;Negate;(System.Numerics.BigInteger);summary;df-generated | @@ -32293,8 +33256,32 @@ neutral | System.Numerics;BigInteger;Parse;(System.String,System.Globalization.NumberStyles,System.IFormatProvider);summary;df-generated | | System.Numerics;BigInteger;Parse;(System.String,System.IFormatProvider);summary;df-generated | | System.Numerics;BigInteger;PopCount;(System.Numerics.BigInteger);summary;df-generated | +| System.Numerics;BigInteger;RotateLeft;(System.Numerics.BigInteger,System.Int32);summary;df-generated | +| System.Numerics;BigInteger;RotateRight;(System.Numerics.BigInteger,System.Int32);summary;df-generated | | System.Numerics;BigInteger;Sign;(System.Numerics.BigInteger);summary;df-generated | | System.Numerics;BigInteger;Subtract;(System.Numerics.BigInteger,System.Numerics.BigInteger);summary;df-generated | +| System.Numerics;BigInteger;System.Numerics.IAdditionOperators.op_Addition;(System.Numerics.BigInteger,System.Numerics.BigInteger);summary;df-generated | +| System.Numerics;BigInteger;System.Numerics.IBitwiseOperators.op_BitwiseAnd;(System.Numerics.BigInteger,System.Numerics.BigInteger);summary;df-generated | +| System.Numerics;BigInteger;System.Numerics.IBitwiseOperators.op_BitwiseOr;(System.Numerics.BigInteger,System.Numerics.BigInteger);summary;df-generated | +| System.Numerics;BigInteger;System.Numerics.IBitwiseOperators.op_ExclusiveOr;(System.Numerics.BigInteger,System.Numerics.BigInteger);summary;df-generated | +| System.Numerics;BigInteger;System.Numerics.IBitwiseOperators.op_OnesComplement;(System.Numerics.BigInteger);summary;df-generated | +| System.Numerics;BigInteger;System.Numerics.IComparisonOperators.op_GreaterThan;(System.Numerics.BigInteger,System.Numerics.BigInteger);summary;df-generated | +| System.Numerics;BigInteger;System.Numerics.IComparisonOperators.op_GreaterThanOrEqual;(System.Numerics.BigInteger,System.Numerics.BigInteger);summary;df-generated | +| System.Numerics;BigInteger;System.Numerics.IComparisonOperators.op_LessThan;(System.Numerics.BigInteger,System.Numerics.BigInteger);summary;df-generated | +| System.Numerics;BigInteger;System.Numerics.IComparisonOperators.op_LessThanOrEqual;(System.Numerics.BigInteger,System.Numerics.BigInteger);summary;df-generated | +| System.Numerics;BigInteger;System.Numerics.IDecrementOperators.op_Decrement;(System.Numerics.BigInteger);summary;df-generated | +| System.Numerics;BigInteger;System.Numerics.IDivisionOperators.op_Division;(System.Numerics.BigInteger,System.Numerics.BigInteger);summary;df-generated | +| System.Numerics;BigInteger;System.Numerics.IEqualityOperators.op_Equality;(System.Numerics.BigInteger,System.Numerics.BigInteger);summary;df-generated | +| System.Numerics;BigInteger;System.Numerics.IEqualityOperators.op_Inequality;(System.Numerics.BigInteger,System.Numerics.BigInteger);summary;df-generated | +| System.Numerics;BigInteger;System.Numerics.IIncrementOperators.op_Increment;(System.Numerics.BigInteger);summary;df-generated | +| System.Numerics;BigInteger;System.Numerics.IModulusOperators.op_Modulus;(System.Numerics.BigInteger,System.Numerics.BigInteger);summary;df-generated | +| System.Numerics;BigInteger;System.Numerics.IMultiplyOperators.op_Multiply;(System.Numerics.BigInteger,System.Numerics.BigInteger);summary;df-generated | +| System.Numerics;BigInteger;System.Numerics.IShiftOperators.op_LeftShift;(System.Numerics.BigInteger,System.Int32);summary;df-generated | +| System.Numerics;BigInteger;System.Numerics.IShiftOperators.op_RightShift;(System.Numerics.BigInteger,System.Int32);summary;df-generated | +| System.Numerics;BigInteger;System.Numerics.IShiftOperators.op_UnsignedRightShift;(System.Numerics.BigInteger,System.Int32);summary;df-generated | +| System.Numerics;BigInteger;System.Numerics.ISubtractionOperators.op_Subtraction;(System.Numerics.BigInteger,System.Numerics.BigInteger);summary;df-generated | +| System.Numerics;BigInteger;System.Numerics.IUnaryNegationOperators.op_UnaryNegation;(System.Numerics.BigInteger);summary;df-generated | +| System.Numerics;BigInteger;System.Numerics.IUnaryPlusOperators.op_UnaryPlus;(System.Numerics.BigInteger);summary;df-generated | | System.Numerics;BigInteger;ToByteArray;();summary;df-generated | | System.Numerics;BigInteger;ToByteArray;(System.Boolean,System.Boolean);summary;df-generated | | System.Numerics;BigInteger;ToString;();summary;df-generated | @@ -32429,6 +33416,10 @@ neutral | System.Numerics;Complex;Log10;(System.Numerics.Complex);summary;df-generated | | System.Numerics;Complex;Log;(System.Numerics.Complex);summary;df-generated | | System.Numerics;Complex;Log;(System.Numerics.Complex,System.Double);summary;df-generated | +| System.Numerics;Complex;MaxMagnitude;(System.Numerics.Complex,System.Numerics.Complex);summary;df-generated | +| System.Numerics;Complex;MaxMagnitudeNumber;(System.Numerics.Complex,System.Numerics.Complex);summary;df-generated | +| System.Numerics;Complex;MinMagnitude;(System.Numerics.Complex,System.Numerics.Complex);summary;df-generated | +| System.Numerics;Complex;MinMagnitudeNumber;(System.Numerics.Complex,System.Numerics.Complex);summary;df-generated | | System.Numerics;Complex;Multiply;(System.Double,System.Numerics.Complex);summary;df-generated | | System.Numerics;Complex;Multiply;(System.Numerics.Complex,System.Double);summary;df-generated | | System.Numerics;Complex;Multiply;(System.Numerics.Complex,System.Numerics.Complex);summary;df-generated | @@ -32446,6 +33437,16 @@ neutral | System.Numerics;Complex;Subtract;(System.Double,System.Numerics.Complex);summary;df-generated | | System.Numerics;Complex;Subtract;(System.Numerics.Complex,System.Double);summary;df-generated | | System.Numerics;Complex;Subtract;(System.Numerics.Complex,System.Numerics.Complex);summary;df-generated | +| System.Numerics;Complex;System.Numerics.IAdditionOperators.op_Addition;(System.Numerics.Complex,System.Numerics.Complex);summary;df-generated | +| System.Numerics;Complex;System.Numerics.IDecrementOperators.op_Decrement;(System.Numerics.Complex);summary;df-generated | +| System.Numerics;Complex;System.Numerics.IDivisionOperators.op_Division;(System.Numerics.Complex,System.Numerics.Complex);summary;df-generated | +| System.Numerics;Complex;System.Numerics.IEqualityOperators.op_Equality;(System.Numerics.Complex,System.Numerics.Complex);summary;df-generated | +| System.Numerics;Complex;System.Numerics.IEqualityOperators.op_Inequality;(System.Numerics.Complex,System.Numerics.Complex);summary;df-generated | +| System.Numerics;Complex;System.Numerics.IIncrementOperators.op_Increment;(System.Numerics.Complex);summary;df-generated | +| System.Numerics;Complex;System.Numerics.IMultiplyOperators.op_Multiply;(System.Numerics.Complex,System.Numerics.Complex);summary;df-generated | +| System.Numerics;Complex;System.Numerics.ISubtractionOperators.op_Subtraction;(System.Numerics.Complex,System.Numerics.Complex);summary;df-generated | +| System.Numerics;Complex;System.Numerics.IUnaryNegationOperators.op_UnaryNegation;(System.Numerics.Complex);summary;df-generated | +| System.Numerics;Complex;System.Numerics.IUnaryPlusOperators.op_UnaryPlus;(System.Numerics.Complex);summary;df-generated | | System.Numerics;Complex;Tan;(System.Numerics.Complex);summary;df-generated | | System.Numerics;Complex;Tanh;(System.Numerics.Complex);summary;df-generated | | System.Numerics;Complex;ToString;();summary;df-generated | @@ -34377,6 +35378,7 @@ neutral | System.Reflection.Metadata;ImportDefinitionCollection+Enumerator;Dispose;();summary;df-generated | | System.Reflection.Metadata;ImportDefinitionCollection+Enumerator;MoveNext;();summary;df-generated | | System.Reflection.Metadata;ImportDefinitionCollection+Enumerator;Reset;();summary;df-generated | +| System.Reflection.Metadata;ImportDefinitionCollection+Enumerator;get_Current;();summary;df-generated | | System.Reflection.Metadata;ImportScope;GetImports;();summary;df-generated | | System.Reflection.Metadata;ImportScope;get_ImportsBlob;();summary;df-generated | | System.Reflection.Metadata;ImportScope;get_Parent;();summary;df-generated | @@ -34672,6 +35674,7 @@ neutral | System.Reflection.Metadata;SequencePointCollection+Enumerator;Dispose;();summary;df-generated | | System.Reflection.Metadata;SequencePointCollection+Enumerator;MoveNext;();summary;df-generated | | System.Reflection.Metadata;SequencePointCollection+Enumerator;Reset;();summary;df-generated | +| System.Reflection.Metadata;SequencePointCollection+Enumerator;get_Current;();summary;df-generated | | System.Reflection.Metadata;SignatureHeader;Equals;(System.Object);summary;df-generated | | System.Reflection.Metadata;SignatureHeader;Equals;(System.Reflection.Metadata.SignatureHeader);summary;df-generated | | System.Reflection.Metadata;SignatureHeader;GetHashCode;();summary;df-generated | @@ -36601,17 +37604,32 @@ neutral | System.Runtime.InteropServices;NFloat;SinPi;(System.Runtime.InteropServices.NFloat);summary;df-generated | | System.Runtime.InteropServices;NFloat;Sinh;(System.Runtime.InteropServices.NFloat);summary;df-generated | | System.Runtime.InteropServices;NFloat;Sqrt;(System.Runtime.InteropServices.NFloat);summary;df-generated | +| System.Runtime.InteropServices;NFloat;System.Numerics.IAdditionOperators.op_Addition;(System.Runtime.InteropServices.NFloat,System.Runtime.InteropServices.NFloat);summary;df-generated | | System.Runtime.InteropServices;NFloat;System.Numerics.IAdditionOperators.op_CheckedAddition;(System.Runtime.InteropServices.NFloat,System.Runtime.InteropServices.NFloat);summary;df-generated | | System.Runtime.InteropServices;NFloat;System.Numerics.IBitwiseOperators.op_BitwiseAnd;(System.Runtime.InteropServices.NFloat,System.Runtime.InteropServices.NFloat);summary;df-generated | | System.Runtime.InteropServices;NFloat;System.Numerics.IBitwiseOperators.op_BitwiseOr;(System.Runtime.InteropServices.NFloat,System.Runtime.InteropServices.NFloat);summary;df-generated | | System.Runtime.InteropServices;NFloat;System.Numerics.IBitwiseOperators.op_ExclusiveOr;(System.Runtime.InteropServices.NFloat,System.Runtime.InteropServices.NFloat);summary;df-generated | | System.Runtime.InteropServices;NFloat;System.Numerics.IBitwiseOperators.op_OnesComplement;(System.Runtime.InteropServices.NFloat);summary;df-generated | +| System.Runtime.InteropServices;NFloat;System.Numerics.IComparisonOperators.op_GreaterThan;(System.Runtime.InteropServices.NFloat,System.Runtime.InteropServices.NFloat);summary;df-generated | +| System.Runtime.InteropServices;NFloat;System.Numerics.IComparisonOperators.op_GreaterThanOrEqual;(System.Runtime.InteropServices.NFloat,System.Runtime.InteropServices.NFloat);summary;df-generated | +| System.Runtime.InteropServices;NFloat;System.Numerics.IComparisonOperators.op_LessThan;(System.Runtime.InteropServices.NFloat,System.Runtime.InteropServices.NFloat);summary;df-generated | +| System.Runtime.InteropServices;NFloat;System.Numerics.IComparisonOperators.op_LessThanOrEqual;(System.Runtime.InteropServices.NFloat,System.Runtime.InteropServices.NFloat);summary;df-generated | | System.Runtime.InteropServices;NFloat;System.Numerics.IDecrementOperators.op_CheckedDecrement;(System.Runtime.InteropServices.NFloat);summary;df-generated | +| System.Runtime.InteropServices;NFloat;System.Numerics.IDecrementOperators.op_Decrement;(System.Runtime.InteropServices.NFloat);summary;df-generated | | System.Runtime.InteropServices;NFloat;System.Numerics.IDivisionOperators.op_CheckedDivision;(System.Runtime.InteropServices.NFloat,System.Runtime.InteropServices.NFloat);summary;df-generated | +| System.Runtime.InteropServices;NFloat;System.Numerics.IDivisionOperators.op_Division;(System.Runtime.InteropServices.NFloat,System.Runtime.InteropServices.NFloat);summary;df-generated | +| System.Runtime.InteropServices;NFloat;System.Numerics.IEqualityOperators.op_Equality;(System.Runtime.InteropServices.NFloat,System.Runtime.InteropServices.NFloat);summary;df-generated | +| System.Runtime.InteropServices;NFloat;System.Numerics.IEqualityOperators.op_Inequality;(System.Runtime.InteropServices.NFloat,System.Runtime.InteropServices.NFloat);summary;df-generated | | System.Runtime.InteropServices;NFloat;System.Numerics.IIncrementOperators.op_CheckedIncrement;(System.Runtime.InteropServices.NFloat);summary;df-generated | +| System.Runtime.InteropServices;NFloat;System.Numerics.IIncrementOperators.op_Increment;(System.Runtime.InteropServices.NFloat);summary;df-generated | +| System.Runtime.InteropServices;NFloat;System.Numerics.IModulusOperators.op_Modulus;(System.Runtime.InteropServices.NFloat,System.Runtime.InteropServices.NFloat);summary;df-generated | | System.Runtime.InteropServices;NFloat;System.Numerics.IMultiplyOperators.op_CheckedMultiply;(System.Runtime.InteropServices.NFloat,System.Runtime.InteropServices.NFloat);summary;df-generated | +| System.Runtime.InteropServices;NFloat;System.Numerics.IMultiplyOperators.op_Multiply;(System.Runtime.InteropServices.NFloat,System.Runtime.InteropServices.NFloat);summary;df-generated | | System.Runtime.InteropServices;NFloat;System.Numerics.ISubtractionOperators.op_CheckedSubtraction;(System.Runtime.InteropServices.NFloat,System.Runtime.InteropServices.NFloat);summary;df-generated | +| System.Runtime.InteropServices;NFloat;System.Numerics.ISubtractionOperators.op_Subtraction;(System.Runtime.InteropServices.NFloat,System.Runtime.InteropServices.NFloat);summary;df-generated | | System.Runtime.InteropServices;NFloat;System.Numerics.IUnaryNegationOperators.op_CheckedUnaryNegation;(System.Runtime.InteropServices.NFloat);summary;df-generated | +| System.Runtime.InteropServices;NFloat;System.Numerics.IUnaryNegationOperators.op_UnaryNegation;(System.Runtime.InteropServices.NFloat);summary;df-generated | +| System.Runtime.InteropServices;NFloat;System.Numerics.IUnaryPlusOperators.op_UnaryPlus;(System.Runtime.InteropServices.NFloat);summary;df-generated | | System.Runtime.InteropServices;NFloat;Tan;(System.Runtime.InteropServices.NFloat);summary;df-generated | | System.Runtime.InteropServices;NFloat;TanPi;(System.Runtime.InteropServices.NFloat);summary;df-generated | | System.Runtime.InteropServices;NFloat;Tanh;(System.Runtime.InteropServices.NFloat);summary;df-generated | @@ -43755,6 +44773,7 @@ neutral | System.Security.Cryptography.X509Certificates;X509Certificate2Enumerator;Dispose;();summary;df-generated | | System.Security.Cryptography.X509Certificates;X509Certificate2Enumerator;MoveNext;();summary;df-generated | | System.Security.Cryptography.X509Certificates;X509Certificate2Enumerator;Reset;();summary;df-generated | +| System.Security.Cryptography.X509Certificates;X509Certificate2Enumerator;get_Current;();summary;df-generated | | System.Security.Cryptography.X509Certificates;X509Certificate2UI;DisplayCertificate;(System.Security.Cryptography.X509Certificates.X509Certificate2);summary;df-generated | | System.Security.Cryptography.X509Certificates;X509Certificate2UI;DisplayCertificate;(System.Security.Cryptography.X509Certificates.X509Certificate2,System.IntPtr);summary;df-generated | | System.Security.Cryptography.X509Certificates;X509Certificate2UI;SelectFromCollection;(System.Security.Cryptography.X509Certificates.X509Certificate2Collection,System.String,System.String,System.Security.Cryptography.X509Certificates.X509SelectionFlag);summary;df-generated | @@ -43828,6 +44847,7 @@ neutral | System.Security.Cryptography.X509Certificates;X509ChainElementEnumerator;Dispose;();summary;df-generated | | System.Security.Cryptography.X509Certificates;X509ChainElementEnumerator;MoveNext;();summary;df-generated | | System.Security.Cryptography.X509Certificates;X509ChainElementEnumerator;Reset;();summary;df-generated | +| System.Security.Cryptography.X509Certificates;X509ChainElementEnumerator;get_Current;();summary;df-generated | | System.Security.Cryptography.X509Certificates;X509ChainPolicy;Reset;();summary;df-generated | | System.Security.Cryptography.X509Certificates;X509ChainPolicy;get_ApplicationPolicy;();summary;df-generated | | System.Security.Cryptography.X509Certificates;X509ChainPolicy;get_CertificatePolicy;();summary;df-generated | @@ -43845,6 +44865,7 @@ neutral | System.Security.Cryptography.X509Certificates;X509ExtensionEnumerator;Dispose;();summary;df-generated | | System.Security.Cryptography.X509Certificates;X509ExtensionEnumerator;MoveNext;();summary;df-generated | | System.Security.Cryptography.X509Certificates;X509ExtensionEnumerator;Reset;();summary;df-generated | +| System.Security.Cryptography.X509Certificates;X509ExtensionEnumerator;get_Current;();summary;df-generated | | System.Security.Cryptography.X509Certificates;X509KeyUsageExtension;X509KeyUsageExtension;(System.Security.Cryptography.AsnEncodedData,System.Boolean);summary;df-generated | | System.Security.Cryptography.X509Certificates;X509KeyUsageExtension;X509KeyUsageExtension;(System.Security.Cryptography.X509Certificates.X509KeyUsageFlags,System.Boolean);summary;df-generated | | System.Security.Cryptography.X509Certificates;X509KeyUsageExtension;get_KeyUsages;();summary;df-generated | @@ -46049,6 +47070,7 @@ neutral | System.Text.Json.Nodes;JsonObject;JsonObject;(System.Nullable);summary;df-generated | | System.Text.Json.Nodes;JsonObject;Remove;(System.Collections.Generic.KeyValuePair);summary;df-generated | | System.Text.Json.Nodes;JsonObject;Remove;(System.String);summary;df-generated | +| System.Text.Json.Nodes;JsonObject;TryGetValue;(System.String,System.Text.Json.Nodes.JsonNode);summary;df-generated | | System.Text.Json.Nodes;JsonObject;WriteTo;(System.Text.Json.Utf8JsonWriter,System.Text.Json.JsonSerializerOptions);summary;df-generated | | System.Text.Json.Nodes;JsonObject;get_Count;();summary;df-generated | | System.Text.Json.Nodes;JsonObject;get_IsReadOnly;();summary;df-generated | @@ -46188,6 +47210,7 @@ neutral | System.Text.Json;JsonElement+ArrayEnumerator;Dispose;();summary;df-generated | | System.Text.Json;JsonElement+ArrayEnumerator;MoveNext;();summary;df-generated | | System.Text.Json;JsonElement+ArrayEnumerator;Reset;();summary;df-generated | +| System.Text.Json;JsonElement+ArrayEnumerator;get_Current;();summary;df-generated | | System.Text.Json;JsonElement+ObjectEnumerator;Dispose;();summary;df-generated | | System.Text.Json;JsonElement+ObjectEnumerator;MoveNext;();summary;df-generated | | System.Text.Json;JsonElement+ObjectEnumerator;Reset;();summary;df-generated | @@ -46507,6 +47530,7 @@ neutral | System.Text.RegularExpressions;CaptureCollection;get_IsFixedSize;();summary;df-generated | | System.Text.RegularExpressions;CaptureCollection;get_IsReadOnly;();summary;df-generated | | System.Text.RegularExpressions;CaptureCollection;get_IsSynchronized;();summary;df-generated | +| System.Text.RegularExpressions;CaptureCollection;get_Item;(System.Int32);summary;df-generated | | System.Text.RegularExpressions;GeneratedRegexAttribute;GeneratedRegexAttribute;(System.String);summary;df-generated | | System.Text.RegularExpressions;GeneratedRegexAttribute;GeneratedRegexAttribute;(System.String,System.Text.RegularExpressions.RegexOptions);summary;df-generated | | System.Text.RegularExpressions;GeneratedRegexAttribute;GeneratedRegexAttribute;(System.String,System.Text.RegularExpressions.RegexOptions,System.Int32);summary;df-generated | @@ -46525,10 +47549,15 @@ neutral | System.Text.RegularExpressions;GroupCollection;IndexOf;(System.Text.RegularExpressions.Group);summary;df-generated | | System.Text.RegularExpressions;GroupCollection;Remove;(System.Text.RegularExpressions.Group);summary;df-generated | | System.Text.RegularExpressions;GroupCollection;RemoveAt;(System.Int32);summary;df-generated | +| System.Text.RegularExpressions;GroupCollection;TryGetValue;(System.String,System.Text.RegularExpressions.Group);summary;df-generated | | System.Text.RegularExpressions;GroupCollection;get_Count;();summary;df-generated | | System.Text.RegularExpressions;GroupCollection;get_IsFixedSize;();summary;df-generated | | System.Text.RegularExpressions;GroupCollection;get_IsReadOnly;();summary;df-generated | | System.Text.RegularExpressions;GroupCollection;get_IsSynchronized;();summary;df-generated | +| System.Text.RegularExpressions;GroupCollection;get_Item;(System.Int32);summary;df-generated | +| System.Text.RegularExpressions;GroupCollection;get_Item;(System.String);summary;df-generated | +| System.Text.RegularExpressions;GroupCollection;get_Keys;();summary;df-generated | +| System.Text.RegularExpressions;GroupCollection;get_Values;();summary;df-generated | | System.Text.RegularExpressions;Match;Result;(System.String);summary;df-generated | | System.Text.RegularExpressions;Match;get_Empty;();summary;df-generated | | System.Text.RegularExpressions;Match;get_Groups;();summary;df-generated | @@ -46542,6 +47571,7 @@ neutral | System.Text.RegularExpressions;MatchCollection;get_IsFixedSize;();summary;df-generated | | System.Text.RegularExpressions;MatchCollection;get_IsReadOnly;();summary;df-generated | | System.Text.RegularExpressions;MatchCollection;get_IsSynchronized;();summary;df-generated | +| System.Text.RegularExpressions;MatchCollection;get_Item;(System.Int32);summary;df-generated | | System.Text.RegularExpressions;Regex+ValueMatchEnumerator;MoveNext;();summary;df-generated | | System.Text.RegularExpressions;Regex;CompileToAssembly;(System.Text.RegularExpressions.RegexCompilationInfo[],System.Reflection.AssemblyName);summary;df-generated | | System.Text.RegularExpressions;Regex;CompileToAssembly;(System.Text.RegularExpressions.RegexCompilationInfo[],System.Reflection.AssemblyName,System.Reflection.Emit.CustomAttributeBuilder[]);summary;df-generated | @@ -47062,6 +48092,7 @@ neutral | System.Text;StringRuneEnumerator;Dispose;();summary;df-generated | | System.Text;StringRuneEnumerator;MoveNext;();summary;df-generated | | System.Text;StringRuneEnumerator;Reset;();summary;df-generated | +| System.Text;StringRuneEnumerator;get_Current;();summary;df-generated | | System.Text;UTF7Encoding;Equals;(System.Object);summary;df-generated | | System.Text;UTF7Encoding;GetByteCount;(System.Char*,System.Int32);summary;df-generated | | System.Text;UTF7Encoding;GetByteCount;(System.Char[],System.Int32,System.Int32);summary;df-generated | @@ -47202,8 +48233,10 @@ neutral | System.Threading.Tasks.Dataflow;BatchBlock;Complete;();summary;df-generated | | System.Threading.Tasks.Dataflow;BatchBlock;ConsumeMessage;(System.Threading.Tasks.Dataflow.DataflowMessageHeader,System.Threading.Tasks.Dataflow.ITargetBlock,System.Boolean);summary;df-generated | | System.Threading.Tasks.Dataflow;BatchBlock;Fault;(System.Exception);summary;df-generated | +| System.Threading.Tasks.Dataflow;BatchBlock;LinkTo;(System.Threading.Tasks.Dataflow.ITargetBlock,System.Threading.Tasks.Dataflow.DataflowLinkOptions);summary;df-generated | | System.Threading.Tasks.Dataflow;BatchBlock;OfferMessage;(System.Threading.Tasks.Dataflow.DataflowMessageHeader,T,System.Threading.Tasks.Dataflow.ISourceBlock,System.Boolean);summary;df-generated | | System.Threading.Tasks.Dataflow;BatchBlock;ReleaseReservation;(System.Threading.Tasks.Dataflow.DataflowMessageHeader,System.Threading.Tasks.Dataflow.ITargetBlock);summary;df-generated | +| System.Threading.Tasks.Dataflow;BatchBlock;ReserveMessage;(System.Threading.Tasks.Dataflow.DataflowMessageHeader,System.Threading.Tasks.Dataflow.ITargetBlock);summary;df-generated | | System.Threading.Tasks.Dataflow;BatchBlock;ToString;();summary;df-generated | | System.Threading.Tasks.Dataflow;BatchBlock;TriggerBatch;();summary;df-generated | | System.Threading.Tasks.Dataflow;BatchBlock;TryReceiveAll;(System.Collections.Generic.IList);summary;df-generated | @@ -47213,7 +48246,9 @@ neutral | System.Threading.Tasks.Dataflow;BatchedJoinBlock;Complete;();summary;df-generated | | System.Threading.Tasks.Dataflow;BatchedJoinBlock;ConsumeMessage;(System.Threading.Tasks.Dataflow.DataflowMessageHeader,System.Threading.Tasks.Dataflow.ITargetBlock,System.Collections.Generic.IList,System.Collections.Generic.IList>>,System.Boolean);summary;df-generated | | System.Threading.Tasks.Dataflow;BatchedJoinBlock;Fault;(System.Exception);summary;df-generated | +| System.Threading.Tasks.Dataflow;BatchedJoinBlock;LinkTo;(System.Threading.Tasks.Dataflow.ITargetBlock,System.Collections.Generic.IList,System.Collections.Generic.IList>>,System.Threading.Tasks.Dataflow.DataflowLinkOptions);summary;df-generated | | System.Threading.Tasks.Dataflow;BatchedJoinBlock;ReleaseReservation;(System.Threading.Tasks.Dataflow.DataflowMessageHeader,System.Threading.Tasks.Dataflow.ITargetBlock,System.Collections.Generic.IList,System.Collections.Generic.IList>>);summary;df-generated | +| System.Threading.Tasks.Dataflow;BatchedJoinBlock;ReserveMessage;(System.Threading.Tasks.Dataflow.DataflowMessageHeader,System.Threading.Tasks.Dataflow.ITargetBlock,System.Collections.Generic.IList,System.Collections.Generic.IList>>);summary;df-generated | | System.Threading.Tasks.Dataflow;BatchedJoinBlock;ToString;();summary;df-generated | | System.Threading.Tasks.Dataflow;BatchedJoinBlock;TryReceiveAll;(System.Collections.Generic.IList,System.Collections.Generic.IList,System.Collections.Generic.IList>>);summary;df-generated | | System.Threading.Tasks.Dataflow;BatchedJoinBlock;get_BatchSize;();summary;df-generated | @@ -47222,21 +48257,29 @@ neutral | System.Threading.Tasks.Dataflow;BatchedJoinBlock;Complete;();summary;df-generated | | System.Threading.Tasks.Dataflow;BatchedJoinBlock;ConsumeMessage;(System.Threading.Tasks.Dataflow.DataflowMessageHeader,System.Threading.Tasks.Dataflow.ITargetBlock,System.Collections.Generic.IList>>,System.Boolean);summary;df-generated | | System.Threading.Tasks.Dataflow;BatchedJoinBlock;Fault;(System.Exception);summary;df-generated | +| System.Threading.Tasks.Dataflow;BatchedJoinBlock;LinkTo;(System.Threading.Tasks.Dataflow.ITargetBlock,System.Collections.Generic.IList>>,System.Threading.Tasks.Dataflow.DataflowLinkOptions);summary;df-generated | | System.Threading.Tasks.Dataflow;BatchedJoinBlock;ReleaseReservation;(System.Threading.Tasks.Dataflow.DataflowMessageHeader,System.Threading.Tasks.Dataflow.ITargetBlock,System.Collections.Generic.IList>>);summary;df-generated | +| System.Threading.Tasks.Dataflow;BatchedJoinBlock;ReserveMessage;(System.Threading.Tasks.Dataflow.DataflowMessageHeader,System.Threading.Tasks.Dataflow.ITargetBlock,System.Collections.Generic.IList>>);summary;df-generated | | System.Threading.Tasks.Dataflow;BatchedJoinBlock;ToString;();summary;df-generated | | System.Threading.Tasks.Dataflow;BatchedJoinBlock;TryReceiveAll;(System.Collections.Generic.IList,System.Collections.Generic.IList>>);summary;df-generated | | System.Threading.Tasks.Dataflow;BatchedJoinBlock;get_BatchSize;();summary;df-generated | | System.Threading.Tasks.Dataflow;BatchedJoinBlock;get_OutputCount;();summary;df-generated | | System.Threading.Tasks.Dataflow;BroadcastBlock;Complete;();summary;df-generated | +| System.Threading.Tasks.Dataflow;BroadcastBlock;ConsumeMessage;(System.Threading.Tasks.Dataflow.DataflowMessageHeader,System.Threading.Tasks.Dataflow.ITargetBlock,System.Boolean);summary;df-generated | | System.Threading.Tasks.Dataflow;BroadcastBlock;Fault;(System.Exception);summary;df-generated | +| System.Threading.Tasks.Dataflow;BroadcastBlock;LinkTo;(System.Threading.Tasks.Dataflow.ITargetBlock,System.Threading.Tasks.Dataflow.DataflowLinkOptions);summary;df-generated | | System.Threading.Tasks.Dataflow;BroadcastBlock;OfferMessage;(System.Threading.Tasks.Dataflow.DataflowMessageHeader,T,System.Threading.Tasks.Dataflow.ISourceBlock,System.Boolean);summary;df-generated | | System.Threading.Tasks.Dataflow;BroadcastBlock;ReleaseReservation;(System.Threading.Tasks.Dataflow.DataflowMessageHeader,System.Threading.Tasks.Dataflow.ITargetBlock);summary;df-generated | +| System.Threading.Tasks.Dataflow;BroadcastBlock;ReserveMessage;(System.Threading.Tasks.Dataflow.DataflowMessageHeader,System.Threading.Tasks.Dataflow.ITargetBlock);summary;df-generated | | System.Threading.Tasks.Dataflow;BroadcastBlock;ToString;();summary;df-generated | +| System.Threading.Tasks.Dataflow;BroadcastBlock;TryReceiveAll;(System.Collections.Generic.IList);summary;df-generated | | System.Threading.Tasks.Dataflow;BufferBlock;Complete;();summary;df-generated | | System.Threading.Tasks.Dataflow;BufferBlock;ConsumeMessage;(System.Threading.Tasks.Dataflow.DataflowMessageHeader,System.Threading.Tasks.Dataflow.ITargetBlock,System.Boolean);summary;df-generated | | System.Threading.Tasks.Dataflow;BufferBlock;Fault;(System.Exception);summary;df-generated | +| System.Threading.Tasks.Dataflow;BufferBlock;LinkTo;(System.Threading.Tasks.Dataflow.ITargetBlock,System.Threading.Tasks.Dataflow.DataflowLinkOptions);summary;df-generated | | System.Threading.Tasks.Dataflow;BufferBlock;OfferMessage;(System.Threading.Tasks.Dataflow.DataflowMessageHeader,T,System.Threading.Tasks.Dataflow.ISourceBlock,System.Boolean);summary;df-generated | | System.Threading.Tasks.Dataflow;BufferBlock;ReleaseReservation;(System.Threading.Tasks.Dataflow.DataflowMessageHeader,System.Threading.Tasks.Dataflow.ITargetBlock);summary;df-generated | +| System.Threading.Tasks.Dataflow;BufferBlock;ReserveMessage;(System.Threading.Tasks.Dataflow.DataflowMessageHeader,System.Threading.Tasks.Dataflow.ITargetBlock);summary;df-generated | | System.Threading.Tasks.Dataflow;BufferBlock;ToString;();summary;df-generated | | System.Threading.Tasks.Dataflow;BufferBlock;TryReceiveAll;(System.Collections.Generic.IList);summary;df-generated | | System.Threading.Tasks.Dataflow;BufferBlock;get_Count;();summary;df-generated | @@ -47262,22 +48305,28 @@ neutral | System.Threading.Tasks.Dataflow;JoinBlock;Complete;();summary;df-generated | | System.Threading.Tasks.Dataflow;JoinBlock;ConsumeMessage;(System.Threading.Tasks.Dataflow.DataflowMessageHeader,System.Threading.Tasks.Dataflow.ITargetBlock>,System.Boolean);summary;df-generated | | System.Threading.Tasks.Dataflow;JoinBlock;Fault;(System.Exception);summary;df-generated | +| System.Threading.Tasks.Dataflow;JoinBlock;LinkTo;(System.Threading.Tasks.Dataflow.ITargetBlock>,System.Threading.Tasks.Dataflow.DataflowLinkOptions);summary;df-generated | | System.Threading.Tasks.Dataflow;JoinBlock;ReleaseReservation;(System.Threading.Tasks.Dataflow.DataflowMessageHeader,System.Threading.Tasks.Dataflow.ITargetBlock>);summary;df-generated | +| System.Threading.Tasks.Dataflow;JoinBlock;ReserveMessage;(System.Threading.Tasks.Dataflow.DataflowMessageHeader,System.Threading.Tasks.Dataflow.ITargetBlock>);summary;df-generated | | System.Threading.Tasks.Dataflow;JoinBlock;ToString;();summary;df-generated | | System.Threading.Tasks.Dataflow;JoinBlock;TryReceiveAll;(System.Collections.Generic.IList>);summary;df-generated | | System.Threading.Tasks.Dataflow;JoinBlock;get_OutputCount;();summary;df-generated | | System.Threading.Tasks.Dataflow;JoinBlock;Complete;();summary;df-generated | | System.Threading.Tasks.Dataflow;JoinBlock;ConsumeMessage;(System.Threading.Tasks.Dataflow.DataflowMessageHeader,System.Threading.Tasks.Dataflow.ITargetBlock>,System.Boolean);summary;df-generated | | System.Threading.Tasks.Dataflow;JoinBlock;Fault;(System.Exception);summary;df-generated | +| System.Threading.Tasks.Dataflow;JoinBlock;LinkTo;(System.Threading.Tasks.Dataflow.ITargetBlock>,System.Threading.Tasks.Dataflow.DataflowLinkOptions);summary;df-generated | | System.Threading.Tasks.Dataflow;JoinBlock;ReleaseReservation;(System.Threading.Tasks.Dataflow.DataflowMessageHeader,System.Threading.Tasks.Dataflow.ITargetBlock>);summary;df-generated | +| System.Threading.Tasks.Dataflow;JoinBlock;ReserveMessage;(System.Threading.Tasks.Dataflow.DataflowMessageHeader,System.Threading.Tasks.Dataflow.ITargetBlock>);summary;df-generated | | System.Threading.Tasks.Dataflow;JoinBlock;ToString;();summary;df-generated | | System.Threading.Tasks.Dataflow;JoinBlock;TryReceiveAll;(System.Collections.Generic.IList>);summary;df-generated | | System.Threading.Tasks.Dataflow;JoinBlock;get_OutputCount;();summary;df-generated | | System.Threading.Tasks.Dataflow;TransformBlock;Complete;();summary;df-generated | | System.Threading.Tasks.Dataflow;TransformBlock;ConsumeMessage;(System.Threading.Tasks.Dataflow.DataflowMessageHeader,System.Threading.Tasks.Dataflow.ITargetBlock,System.Boolean);summary;df-generated | | System.Threading.Tasks.Dataflow;TransformBlock;Fault;(System.Exception);summary;df-generated | +| System.Threading.Tasks.Dataflow;TransformBlock;LinkTo;(System.Threading.Tasks.Dataflow.ITargetBlock,System.Threading.Tasks.Dataflow.DataflowLinkOptions);summary;df-generated | | System.Threading.Tasks.Dataflow;TransformBlock;OfferMessage;(System.Threading.Tasks.Dataflow.DataflowMessageHeader,TInput,System.Threading.Tasks.Dataflow.ISourceBlock,System.Boolean);summary;df-generated | | System.Threading.Tasks.Dataflow;TransformBlock;ReleaseReservation;(System.Threading.Tasks.Dataflow.DataflowMessageHeader,System.Threading.Tasks.Dataflow.ITargetBlock);summary;df-generated | +| System.Threading.Tasks.Dataflow;TransformBlock;ReserveMessage;(System.Threading.Tasks.Dataflow.DataflowMessageHeader,System.Threading.Tasks.Dataflow.ITargetBlock);summary;df-generated | | System.Threading.Tasks.Dataflow;TransformBlock;ToString;();summary;df-generated | | System.Threading.Tasks.Dataflow;TransformBlock;TryReceiveAll;(System.Collections.Generic.IList);summary;df-generated | | System.Threading.Tasks.Dataflow;TransformBlock;get_InputCount;();summary;df-generated | @@ -47285,15 +48334,22 @@ neutral | System.Threading.Tasks.Dataflow;TransformManyBlock;Complete;();summary;df-generated | | System.Threading.Tasks.Dataflow;TransformManyBlock;ConsumeMessage;(System.Threading.Tasks.Dataflow.DataflowMessageHeader,System.Threading.Tasks.Dataflow.ITargetBlock,System.Boolean);summary;df-generated | | System.Threading.Tasks.Dataflow;TransformManyBlock;Fault;(System.Exception);summary;df-generated | +| System.Threading.Tasks.Dataflow;TransformManyBlock;LinkTo;(System.Threading.Tasks.Dataflow.ITargetBlock,System.Threading.Tasks.Dataflow.DataflowLinkOptions);summary;df-generated | | System.Threading.Tasks.Dataflow;TransformManyBlock;OfferMessage;(System.Threading.Tasks.Dataflow.DataflowMessageHeader,TInput,System.Threading.Tasks.Dataflow.ISourceBlock,System.Boolean);summary;df-generated | | System.Threading.Tasks.Dataflow;TransformManyBlock;ReleaseReservation;(System.Threading.Tasks.Dataflow.DataflowMessageHeader,System.Threading.Tasks.Dataflow.ITargetBlock);summary;df-generated | +| System.Threading.Tasks.Dataflow;TransformManyBlock;ReserveMessage;(System.Threading.Tasks.Dataflow.DataflowMessageHeader,System.Threading.Tasks.Dataflow.ITargetBlock);summary;df-generated | | System.Threading.Tasks.Dataflow;TransformManyBlock;ToString;();summary;df-generated | | System.Threading.Tasks.Dataflow;TransformManyBlock;TryReceiveAll;(System.Collections.Generic.IList);summary;df-generated | | System.Threading.Tasks.Dataflow;TransformManyBlock;get_InputCount;();summary;df-generated | | System.Threading.Tasks.Dataflow;TransformManyBlock;get_OutputCount;();summary;df-generated | | System.Threading.Tasks.Dataflow;WriteOnceBlock;Complete;();summary;df-generated | +| System.Threading.Tasks.Dataflow;WriteOnceBlock;ConsumeMessage;(System.Threading.Tasks.Dataflow.DataflowMessageHeader,System.Threading.Tasks.Dataflow.ITargetBlock,System.Boolean);summary;df-generated | | System.Threading.Tasks.Dataflow;WriteOnceBlock;Fault;(System.Exception);summary;df-generated | +| System.Threading.Tasks.Dataflow;WriteOnceBlock;LinkTo;(System.Threading.Tasks.Dataflow.ITargetBlock,System.Threading.Tasks.Dataflow.DataflowLinkOptions);summary;df-generated | +| System.Threading.Tasks.Dataflow;WriteOnceBlock;OfferMessage;(System.Threading.Tasks.Dataflow.DataflowMessageHeader,T,System.Threading.Tasks.Dataflow.ISourceBlock,System.Boolean);summary;df-generated | +| System.Threading.Tasks.Dataflow;WriteOnceBlock;ReleaseReservation;(System.Threading.Tasks.Dataflow.DataflowMessageHeader,System.Threading.Tasks.Dataflow.ITargetBlock);summary;df-generated | | System.Threading.Tasks.Dataflow;WriteOnceBlock;ReserveMessage;(System.Threading.Tasks.Dataflow.DataflowMessageHeader,System.Threading.Tasks.Dataflow.ITargetBlock);summary;df-generated | +| System.Threading.Tasks.Dataflow;WriteOnceBlock;TryReceiveAll;(System.Collections.Generic.IList);summary;df-generated | | System.Threading.Tasks.Sources;IValueTaskSource;GetResult;(System.Int16);summary;df-generated | | System.Threading.Tasks.Sources;IValueTaskSource;GetStatus;(System.Int16);summary;df-generated | | System.Threading.Tasks.Sources;IValueTaskSource;GetResult;(System.Int16);summary;df-generated | @@ -47986,6 +49042,7 @@ neutral | System.Web;AspNetHostingPermission;ToXml;();summary;df-generated | | System.Web;AspNetHostingPermissionAttribute;AspNetHostingPermissionAttribute;(System.Security.Permissions.SecurityAction);summary;df-generated | | System.Web;AspNetHostingPermissionAttribute;CreatePermission;();summary;df-generated | +| System.Web;HtmlString;ToHtmlString;();summary;df-generated | | System.Web;HttpUtility;ParseQueryString;(System.String);summary;df-generated | | System.Web;HttpUtility;ParseQueryString;(System.String,System.Text.Encoding);summary;df-generated | | System.Web;HttpUtility;UrlDecode;(System.Byte[],System.Int32,System.Int32,System.Text.Encoding);summary;df-generated | @@ -48186,6 +49243,9 @@ neutral | System.Xml.Schema;XmlSchemaInferenceException;XmlSchemaInferenceException;(System.String);summary;df-generated | | System.Xml.Schema;XmlSchemaInferenceException;XmlSchemaInferenceException;(System.String,System.Exception);summary;df-generated | | System.Xml.Schema;XmlSchemaInferenceException;XmlSchemaInferenceException;(System.String,System.Exception,System.Int32,System.Int32);summary;df-generated | +| System.Xml.Schema;XmlSchemaInfo;get_IsDefault;();summary;df-generated | +| System.Xml.Schema;XmlSchemaInfo;get_IsNil;();summary;df-generated | +| System.Xml.Schema;XmlSchemaInfo;get_Validity;();summary;df-generated | | System.Xml.Schema;XmlSchemaObjectCollection;Contains;(System.Xml.Schema.XmlSchemaObject);summary;df-generated | | System.Xml.Schema;XmlSchemaObjectCollection;IndexOf;(System.Xml.Schema.XmlSchemaObject);summary;df-generated | | System.Xml.Schema;XmlSchemaObjectCollection;OnClear;();summary;df-generated | @@ -48283,6 +49343,7 @@ neutral | System.Xml.Serialization;XmlSchemaEnumerator;Dispose;();summary;df-generated | | System.Xml.Serialization;XmlSchemaEnumerator;MoveNext;();summary;df-generated | | System.Xml.Serialization;XmlSchemaEnumerator;Reset;();summary;df-generated | +| System.Xml.Serialization;XmlSchemaEnumerator;get_Current;();summary;df-generated | | System.Xml.Serialization;XmlSchemaExporter;ExportAnyType;(System.String);summary;df-generated | | System.Xml.Serialization;XmlSchemaExporter;ExportAnyType;(System.Xml.Serialization.XmlMembersMapping);summary;df-generated | | System.Xml.Serialization;XmlSchemaImporter;ImportAnyType;(System.Xml.XmlQualifiedName,System.String);summary;df-generated | @@ -49314,6 +50375,7 @@ neutral | System;ArraySegment+Enumerator;Dispose;();summary;df-generated | | System;ArraySegment+Enumerator;MoveNext;();summary;df-generated | | System;ArraySegment+Enumerator;Reset;();summary;df-generated | +| System;ArraySegment+Enumerator;get_Current;();summary;df-generated | | System;ArraySegment;Contains;(T);summary;df-generated | | System;ArraySegment;CopyTo;(System.ArraySegment);summary;df-generated | | System;ArraySegment;CopyTo;(T[]);summary;df-generated | @@ -49328,6 +50390,7 @@ neutral | System;ArraySegment;get_Count;();summary;df-generated | | System;ArraySegment;get_Empty;();summary;df-generated | | System;ArraySegment;get_IsReadOnly;();summary;df-generated | +| System;ArraySegment;get_Item;(System.Int32);summary;df-generated | | System;ArraySegment;get_Offset;();summary;df-generated | | System;ArraySegment;op_Equality;(System.ArraySegment,System.ArraySegment);summary;df-generated | | System;ArraySegment;op_Inequality;(System.ArraySegment,System.ArraySegment);summary;df-generated | @@ -50221,6 +51284,21 @@ neutral | System;Decimal;Round;(System.Decimal,System.MidpointRounding);summary;df-generated | | System;Decimal;Sign;(System.Decimal);summary;df-generated | | System;Decimal;Subtract;(System.Decimal,System.Decimal);summary;df-generated | +| System;Decimal;System.Numerics.IAdditionOperators.op_Addition;(System.Decimal,System.Decimal);summary;df-generated | +| System;Decimal;System.Numerics.IComparisonOperators.op_GreaterThan;(System.Decimal,System.Decimal);summary;df-generated | +| System;Decimal;System.Numerics.IComparisonOperators.op_GreaterThanOrEqual;(System.Decimal,System.Decimal);summary;df-generated | +| System;Decimal;System.Numerics.IComparisonOperators.op_LessThan;(System.Decimal,System.Decimal);summary;df-generated | +| System;Decimal;System.Numerics.IComparisonOperators.op_LessThanOrEqual;(System.Decimal,System.Decimal);summary;df-generated | +| System;Decimal;System.Numerics.IDecrementOperators.op_Decrement;(System.Decimal);summary;df-generated | +| System;Decimal;System.Numerics.IDivisionOperators.op_Division;(System.Decimal,System.Decimal);summary;df-generated | +| System;Decimal;System.Numerics.IEqualityOperators.op_Equality;(System.Decimal,System.Decimal);summary;df-generated | +| System;Decimal;System.Numerics.IEqualityOperators.op_Inequality;(System.Decimal,System.Decimal);summary;df-generated | +| System;Decimal;System.Numerics.IIncrementOperators.op_Increment;(System.Decimal);summary;df-generated | +| System;Decimal;System.Numerics.IModulusOperators.op_Modulus;(System.Decimal,System.Decimal);summary;df-generated | +| System;Decimal;System.Numerics.IMultiplyOperators.op_Multiply;(System.Decimal,System.Decimal);summary;df-generated | +| System;Decimal;System.Numerics.ISubtractionOperators.op_Subtraction;(System.Decimal,System.Decimal);summary;df-generated | +| System;Decimal;System.Numerics.IUnaryNegationOperators.op_UnaryNegation;(System.Decimal);summary;df-generated | +| System;Decimal;System.Numerics.IUnaryPlusOperators.op_UnaryPlus;(System.Decimal);summary;df-generated | | System;Decimal;ToBoolean;(System.IFormatProvider);summary;df-generated | | System;Decimal;ToByte;(System.Decimal);summary;df-generated | | System;Decimal;ToByte;(System.IFormatProvider);summary;df-generated | @@ -50410,8 +51488,14 @@ neutral | System;Double;System.Numerics.IBitwiseOperators.op_BitwiseOr;(System.Double,System.Double);summary;df-generated | | System;Double;System.Numerics.IBitwiseOperators.op_ExclusiveOr;(System.Double,System.Double);summary;df-generated | | System;Double;System.Numerics.IBitwiseOperators.op_OnesComplement;(System.Double);summary;df-generated | +| System;Double;System.Numerics.IComparisonOperators.op_GreaterThan;(System.Double,System.Double);summary;df-generated | +| System;Double;System.Numerics.IComparisonOperators.op_GreaterThanOrEqual;(System.Double,System.Double);summary;df-generated | +| System;Double;System.Numerics.IComparisonOperators.op_LessThan;(System.Double,System.Double);summary;df-generated | +| System;Double;System.Numerics.IComparisonOperators.op_LessThanOrEqual;(System.Double,System.Double);summary;df-generated | | System;Double;System.Numerics.IDecrementOperators.op_Decrement;(System.Double);summary;df-generated | | System;Double;System.Numerics.IDivisionOperators.op_Division;(System.Double,System.Double);summary;df-generated | +| System;Double;System.Numerics.IEqualityOperators.op_Equality;(System.Double,System.Double);summary;df-generated | +| System;Double;System.Numerics.IEqualityOperators.op_Inequality;(System.Double,System.Double);summary;df-generated | | System;Double;System.Numerics.IIncrementOperators.op_Increment;(System.Double);summary;df-generated | | System;Double;System.Numerics.IModulusOperators.op_Modulus;(System.Double,System.Double);summary;df-generated | | System;Double;System.Numerics.IMultiplyOperators.op_Multiply;(System.Double,System.Double);summary;df-generated | @@ -50695,6 +51779,8 @@ neutral | System;Half;Atan;(System.Half);summary;df-generated | | System;Half;AtanPi;(System.Half);summary;df-generated | | System;Half;Atanh;(System.Half);summary;df-generated | +| System;Half;BitDecrement;(System.Half);summary;df-generated | +| System;Half;BitIncrement;(System.Half);summary;df-generated | | System;Half;Cbrt;(System.Half);summary;df-generated | | System;Half;Ceiling;(System.Half);summary;df-generated | | System;Half;Clamp;(System.Half,System.Half,System.Half);summary;df-generated | @@ -50751,8 +51837,10 @@ neutral | System;Half;LogP1;(System.Half);summary;df-generated | | System;Half;Max;(System.Half,System.Half);summary;df-generated | | System;Half;MaxMagnitude;(System.Half,System.Half);summary;df-generated | +| System;Half;MaxMagnitudeNumber;(System.Half,System.Half);summary;df-generated | | System;Half;Min;(System.Half,System.Half);summary;df-generated | | System;Half;MinMagnitude;(System.Half,System.Half);summary;df-generated | +| System;Half;MinMagnitudeNumber;(System.Half,System.Half);summary;df-generated | | System;Half;Parse;(System.ReadOnlySpan,System.Globalization.NumberStyles,System.IFormatProvider);summary;df-generated | | System;Half;Parse;(System.ReadOnlySpan,System.IFormatProvider);summary;df-generated | | System;Half;Parse;(System.ReadOnlySpan,System.Globalization.NumberStyles,System.IFormatProvider);summary;df-generated | @@ -50778,10 +51866,25 @@ neutral | System;Half;SinPi;(System.Half);summary;df-generated | | System;Half;Sinh;(System.Half);summary;df-generated | | System;Half;Sqrt;(System.Half);summary;df-generated | +| System;Half;System.Numerics.IAdditionOperators.op_Addition;(System.Half,System.Half);summary;df-generated | | System;Half;System.Numerics.IBitwiseOperators.op_BitwiseAnd;(System.Half,System.Half);summary;df-generated | | System;Half;System.Numerics.IBitwiseOperators.op_BitwiseOr;(System.Half,System.Half);summary;df-generated | | System;Half;System.Numerics.IBitwiseOperators.op_ExclusiveOr;(System.Half,System.Half);summary;df-generated | | System;Half;System.Numerics.IBitwiseOperators.op_OnesComplement;(System.Half);summary;df-generated | +| System;Half;System.Numerics.IComparisonOperators.op_GreaterThan;(System.Half,System.Half);summary;df-generated | +| System;Half;System.Numerics.IComparisonOperators.op_GreaterThanOrEqual;(System.Half,System.Half);summary;df-generated | +| System;Half;System.Numerics.IComparisonOperators.op_LessThan;(System.Half,System.Half);summary;df-generated | +| System;Half;System.Numerics.IComparisonOperators.op_LessThanOrEqual;(System.Half,System.Half);summary;df-generated | +| System;Half;System.Numerics.IDecrementOperators.op_Decrement;(System.Half);summary;df-generated | +| System;Half;System.Numerics.IDivisionOperators.op_Division;(System.Half,System.Half);summary;df-generated | +| System;Half;System.Numerics.IEqualityOperators.op_Equality;(System.Half,System.Half);summary;df-generated | +| System;Half;System.Numerics.IEqualityOperators.op_Inequality;(System.Half,System.Half);summary;df-generated | +| System;Half;System.Numerics.IIncrementOperators.op_Increment;(System.Half);summary;df-generated | +| System;Half;System.Numerics.IModulusOperators.op_Modulus;(System.Half,System.Half);summary;df-generated | +| System;Half;System.Numerics.IMultiplyOperators.op_Multiply;(System.Half,System.Half);summary;df-generated | +| System;Half;System.Numerics.ISubtractionOperators.op_Subtraction;(System.Half,System.Half);summary;df-generated | +| System;Half;System.Numerics.IUnaryNegationOperators.op_UnaryNegation;(System.Half);summary;df-generated | +| System;Half;System.Numerics.IUnaryPlusOperators.op_UnaryPlus;(System.Half);summary;df-generated | | System;Half;Tan;(System.Half);summary;df-generated | | System;Half;TanPi;(System.Half);summary;df-generated | | System;Half;Tanh;(System.Half);summary;df-generated | @@ -51064,7 +52167,10 @@ neutral | System;Int32;MinNumber;(System.Int32,System.Int32);summary;df-generated | | System;Int32;Parse;(System.ReadOnlySpan,System.Globalization.NumberStyles,System.IFormatProvider);summary;df-generated | | System;Int32;Parse;(System.ReadOnlySpan,System.IFormatProvider);summary;df-generated | +| System;Int32;Parse;(System.ReadOnlySpan,System.Globalization.NumberStyles,System.IFormatProvider);summary;df-generated | | System;Int32;Parse;(System.ReadOnlySpan,System.IFormatProvider);summary;df-generated | +| System;Int32;Parse;(System.String,System.Globalization.NumberStyles,System.IFormatProvider);summary;df-generated | +| System;Int32;Parse;(System.String,System.IFormatProvider);summary;df-generated | | System;Int32;PopCount;(System.Int32);summary;df-generated | | System;Int32;RotateLeft;(System.Int32,System.Int32);summary;df-generated | | System;Int32;RotateRight;(System.Int32,System.Int32);summary;df-generated | @@ -51123,7 +52229,9 @@ neutral | System;Int32;TryParse;(System.ReadOnlySpan,System.Globalization.NumberStyles,System.IFormatProvider,System.Int32);summary;df-generated | | System;Int32;TryParse;(System.ReadOnlySpan,System.IFormatProvider,System.Int32);summary;df-generated | | System;Int32;TryParse;(System.ReadOnlySpan,System.Int32);summary;df-generated | +| System;Int32;TryParse;(System.ReadOnlySpan,System.Globalization.NumberStyles,System.IFormatProvider,System.Int32);summary;df-generated | | System;Int32;TryParse;(System.ReadOnlySpan,System.IFormatProvider,System.Int32);summary;df-generated | +| System;Int32;TryParse;(System.String,System.Globalization.NumberStyles,System.IFormatProvider,System.Int32);summary;df-generated | | System;Int32;TryParse;(System.String,System.IFormatProvider,System.Int32);summary;df-generated | | System;Int32;TryReadBigEndian;(System.ReadOnlySpan,System.Boolean,System.Int32);summary;df-generated | | System;Int32;TryReadLittleEndian;(System.ReadOnlySpan,System.Boolean,System.Int32);summary;df-generated | @@ -51266,6 +52374,7 @@ neutral | System;Int64;get_One;();summary;df-generated | | System;Int64;get_Radix;();summary;df-generated | | System;Int64;get_Zero;();summary;df-generated | +| System;Int128;Abs;(System.Int128);summary;df-generated | | System;Int128;CompareTo;(System.Int128);summary;df-generated | | System;Int128;CompareTo;(System.Object);summary;df-generated | | System;Int128;DivRem;(System.Int128,System.Int128);summary;df-generated | @@ -51295,6 +52404,10 @@ neutral | System;Int128;IsZero;(System.Int128);summary;df-generated | | System;Int128;LeadingZeroCount;(System.Int128);summary;df-generated | | System;Int128;Log2;(System.Int128);summary;df-generated | +| System;Int128;MaxMagnitude;(System.Int128,System.Int128);summary;df-generated | +| System;Int128;MaxMagnitudeNumber;(System.Int128,System.Int128);summary;df-generated | +| System;Int128;MinMagnitude;(System.Int128,System.Int128);summary;df-generated | +| System;Int128;MinMagnitudeNumber;(System.Int128,System.Int128);summary;df-generated | | System;Int128;Parse;(System.ReadOnlySpan,System.Globalization.NumberStyles,System.IFormatProvider);summary;df-generated | | System;Int128;Parse;(System.ReadOnlySpan,System.IFormatProvider);summary;df-generated | | System;Int128;Parse;(System.ReadOnlySpan,System.Globalization.NumberStyles,System.IFormatProvider);summary;df-generated | @@ -51307,6 +52420,34 @@ neutral | System;Int128;RotateLeft;(System.Int128,System.Int32);summary;df-generated | | System;Int128;RotateRight;(System.Int128,System.Int32);summary;df-generated | | System;Int128;Sign;(System.Int128);summary;df-generated | +| System;Int128;System.Numerics.IAdditionOperators.op_Addition;(System.Int128,System.Int128);summary;df-generated | +| System;Int128;System.Numerics.IBitwiseOperators.op_BitwiseAnd;(System.Int128,System.Int128);summary;df-generated | +| System;Int128;System.Numerics.IBitwiseOperators.op_BitwiseOr;(System.Int128,System.Int128);summary;df-generated | +| System;Int128;System.Numerics.IBitwiseOperators.op_ExclusiveOr;(System.Int128,System.Int128);summary;df-generated | +| System;Int128;System.Numerics.IBitwiseOperators.op_OnesComplement;(System.Int128);summary;df-generated | +| System;Int128;System.Numerics.IComparisonOperators.op_GreaterThan;(System.Int128,System.Int128);summary;df-generated | +| System;Int128;System.Numerics.IComparisonOperators.op_GreaterThanOrEqual;(System.Int128,System.Int128);summary;df-generated | +| System;Int128;System.Numerics.IComparisonOperators.op_LessThan;(System.Int128,System.Int128);summary;df-generated | +| System;Int128;System.Numerics.IComparisonOperators.op_LessThanOrEqual;(System.Int128,System.Int128);summary;df-generated | +| System;Int128;System.Numerics.IDecrementOperators.op_CheckedDecrement;(System.Int128);summary;df-generated | +| System;Int128;System.Numerics.IDecrementOperators.op_Decrement;(System.Int128);summary;df-generated | +| System;Int128;System.Numerics.IDivisionOperators.op_CheckedDivision;(System.Int128,System.Int128);summary;df-generated | +| System;Int128;System.Numerics.IDivisionOperators.op_Division;(System.Int128,System.Int128);summary;df-generated | +| System;Int128;System.Numerics.IEqualityOperators.op_Equality;(System.Int128,System.Int128);summary;df-generated | +| System;Int128;System.Numerics.IEqualityOperators.op_Inequality;(System.Int128,System.Int128);summary;df-generated | +| System;Int128;System.Numerics.IIncrementOperators.op_CheckedIncrement;(System.Int128);summary;df-generated | +| System;Int128;System.Numerics.IIncrementOperators.op_Increment;(System.Int128);summary;df-generated | +| System;Int128;System.Numerics.IModulusOperators.op_Modulus;(System.Int128,System.Int128);summary;df-generated | +| System;Int128;System.Numerics.IMultiplyOperators.op_CheckedMultiply;(System.Int128,System.Int128);summary;df-generated | +| System;Int128;System.Numerics.IMultiplyOperators.op_Multiply;(System.Int128,System.Int128);summary;df-generated | +| System;Int128;System.Numerics.IShiftOperators.op_LeftShift;(System.Int128,System.Int32);summary;df-generated | +| System;Int128;System.Numerics.IShiftOperators.op_RightShift;(System.Int128,System.Int32);summary;df-generated | +| System;Int128;System.Numerics.IShiftOperators.op_UnsignedRightShift;(System.Int128,System.Int32);summary;df-generated | +| System;Int128;System.Numerics.ISubtractionOperators.op_CheckedSubtraction;(System.Int128,System.Int128);summary;df-generated | +| System;Int128;System.Numerics.ISubtractionOperators.op_Subtraction;(System.Int128,System.Int128);summary;df-generated | +| System;Int128;System.Numerics.IUnaryNegationOperators.op_CheckedUnaryNegation;(System.Int128);summary;df-generated | +| System;Int128;System.Numerics.IUnaryNegationOperators.op_UnaryNegation;(System.Int128);summary;df-generated | +| System;Int128;System.Numerics.IUnaryPlusOperators.op_UnaryPlus;(System.Int128);summary;df-generated | | System;Int128;ToString;();summary;df-generated | | System;Int128;ToString;(System.IFormatProvider);summary;df-generated | | System;Int128;ToString;(System.String);summary;df-generated | @@ -51341,6 +52482,7 @@ neutral | System;Int128;get_One;();summary;df-generated | | System;Int128;get_Radix;();summary;df-generated | | System;Int128;get_Zero;();summary;df-generated | +| System;IntPtr;Abs;(System.IntPtr);summary;df-generated | | System;IntPtr;CompareTo;(System.IntPtr);summary;df-generated | | System;IntPtr;CompareTo;(System.Object);summary;df-generated | | System;IntPtr;DivRem;(System.IntPtr,System.IntPtr);summary;df-generated | @@ -51372,6 +52514,10 @@ neutral | System;IntPtr;IsZero;(System.IntPtr);summary;df-generated | | System;IntPtr;LeadingZeroCount;(System.IntPtr);summary;df-generated | | System;IntPtr;Log2;(System.IntPtr);summary;df-generated | +| System;IntPtr;MaxMagnitude;(System.IntPtr,System.IntPtr);summary;df-generated | +| System;IntPtr;MaxMagnitudeNumber;(System.IntPtr,System.IntPtr);summary;df-generated | +| System;IntPtr;MinMagnitude;(System.IntPtr,System.IntPtr);summary;df-generated | +| System;IntPtr;MinMagnitudeNumber;(System.IntPtr,System.IntPtr);summary;df-generated | | System;IntPtr;Parse;(System.ReadOnlySpan,System.Globalization.NumberStyles,System.IFormatProvider);summary;df-generated | | System;IntPtr;Parse;(System.ReadOnlySpan,System.IFormatProvider);summary;df-generated | | System;IntPtr;Parse;(System.ReadOnlySpan,System.Globalization.NumberStyles,System.IFormatProvider);summary;df-generated | @@ -51385,6 +52531,7 @@ neutral | System;IntPtr;RotateRight;(System.IntPtr,System.Int32);summary;df-generated | | System;IntPtr;Sign;(System.IntPtr);summary;df-generated | | System;IntPtr;Subtract;(System.IntPtr,System.Int32);summary;df-generated | +| System;IntPtr;System.Numerics.IAdditionOperators.op_Addition;(System.IntPtr,System.IntPtr);summary;df-generated | | System;IntPtr;System.Numerics.IBitwiseOperators.op_BitwiseAnd;(System.IntPtr,System.IntPtr);summary;df-generated | | System;IntPtr;System.Numerics.IBitwiseOperators.op_BitwiseOr;(System.IntPtr,System.IntPtr);summary;df-generated | | System;IntPtr;System.Numerics.IBitwiseOperators.op_ExclusiveOr;(System.IntPtr,System.IntPtr);summary;df-generated | @@ -51396,6 +52543,8 @@ neutral | System;IntPtr;System.Numerics.IDecrementOperators.op_CheckedDecrement;(System.IntPtr);summary;df-generated | | System;IntPtr;System.Numerics.IDecrementOperators.op_Decrement;(System.IntPtr);summary;df-generated | | System;IntPtr;System.Numerics.IDivisionOperators.op_Division;(System.IntPtr,System.IntPtr);summary;df-generated | +| System;IntPtr;System.Numerics.IEqualityOperators.op_Equality;(System.IntPtr,System.IntPtr);summary;df-generated | +| System;IntPtr;System.Numerics.IEqualityOperators.op_Inequality;(System.IntPtr,System.IntPtr);summary;df-generated | | System;IntPtr;System.Numerics.IIncrementOperators.op_CheckedIncrement;(System.IntPtr);summary;df-generated | | System;IntPtr;System.Numerics.IIncrementOperators.op_Increment;(System.IntPtr);summary;df-generated | | System;IntPtr;System.Numerics.IModulusOperators.op_Modulus;(System.IntPtr,System.IntPtr);summary;df-generated | @@ -52203,8 +53352,14 @@ neutral | System;Single;System.Numerics.IBitwiseOperators.op_BitwiseOr;(System.Single,System.Single);summary;df-generated | | System;Single;System.Numerics.IBitwiseOperators.op_ExclusiveOr;(System.Single,System.Single);summary;df-generated | | System;Single;System.Numerics.IBitwiseOperators.op_OnesComplement;(System.Single);summary;df-generated | +| System;Single;System.Numerics.IComparisonOperators.op_GreaterThan;(System.Single,System.Single);summary;df-generated | +| System;Single;System.Numerics.IComparisonOperators.op_GreaterThanOrEqual;(System.Single,System.Single);summary;df-generated | +| System;Single;System.Numerics.IComparisonOperators.op_LessThan;(System.Single,System.Single);summary;df-generated | +| System;Single;System.Numerics.IComparisonOperators.op_LessThanOrEqual;(System.Single,System.Single);summary;df-generated | | System;Single;System.Numerics.IDecrementOperators.op_Decrement;(System.Single);summary;df-generated | | System;Single;System.Numerics.IDivisionOperators.op_Division;(System.Single,System.Single);summary;df-generated | +| System;Single;System.Numerics.IEqualityOperators.op_Equality;(System.Single,System.Single);summary;df-generated | +| System;Single;System.Numerics.IEqualityOperators.op_Inequality;(System.Single,System.Single);summary;df-generated | | System;Single;System.Numerics.IIncrementOperators.op_Increment;(System.Single);summary;df-generated | | System;Single;System.Numerics.IModulusOperators.op_Modulus;(System.Single,System.Single);summary;df-generated | | System;Single;System.Numerics.IMultiplyOperators.op_Multiply;(System.Single,System.Single);summary;df-generated | @@ -52349,6 +53504,7 @@ neutral | System;String;LastIndexOfAny;(System.Char[],System.Int32);summary;df-generated | | System;String;LastIndexOfAny;(System.Char[],System.Int32,System.Int32);summary;df-generated | | System;String;Parse;(System.ReadOnlySpan,System.IFormatProvider);summary;df-generated | +| System;String;Parse;(System.String,System.IFormatProvider);summary;df-generated | | System;String;StartsWith;(System.Char);summary;df-generated | | System;String;StartsWith;(System.String);summary;df-generated | | System;String;StartsWith;(System.String,System.Boolean,System.Globalization.CultureInfo);summary;df-generated | @@ -52376,6 +53532,7 @@ neutral | System;String;ToUInt64;(System.IFormatProvider);summary;df-generated | | System;String;TryCopyTo;(System.Span);summary;df-generated | | System;String;TryParse;(System.ReadOnlySpan,System.IFormatProvider,System.String);summary;df-generated | +| System;String;TryParse;(System.String,System.IFormatProvider,System.String);summary;df-generated | | System;String;get_Chars;(System.Int32);summary;df-generated | | System;String;get_Length;();summary;df-generated | | System;String;op_Equality;(System.String,System.String);summary;df-generated | @@ -53235,6 +54392,7 @@ neutral | System;UInt64;get_One;();summary;df-generated | | System;UInt64;get_Radix;();summary;df-generated | | System;UInt64;get_Zero;();summary;df-generated | +| System;UInt128;Abs;(System.UInt128);summary;df-generated | | System;UInt128;CompareTo;(System.Object);summary;df-generated | | System;UInt128;CompareTo;(System.UInt128);summary;df-generated | | System;UInt128;DivRem;(System.UInt128,System.UInt128);summary;df-generated | @@ -53263,6 +54421,10 @@ neutral | System;UInt128;IsZero;(System.UInt128);summary;df-generated | | System;UInt128;LeadingZeroCount;(System.UInt128);summary;df-generated | | System;UInt128;Log2;(System.UInt128);summary;df-generated | +| System;UInt128;MaxMagnitude;(System.UInt128,System.UInt128);summary;df-generated | +| System;UInt128;MaxMagnitudeNumber;(System.UInt128,System.UInt128);summary;df-generated | +| System;UInt128;MinMagnitude;(System.UInt128,System.UInt128);summary;df-generated | +| System;UInt128;MinMagnitudeNumber;(System.UInt128,System.UInt128);summary;df-generated | | System;UInt128;Parse;(System.ReadOnlySpan,System.Globalization.NumberStyles,System.IFormatProvider);summary;df-generated | | System;UInt128;Parse;(System.ReadOnlySpan,System.IFormatProvider);summary;df-generated | | System;UInt128;Parse;(System.ReadOnlySpan,System.Globalization.NumberStyles,System.IFormatProvider);summary;df-generated | @@ -53275,6 +54437,34 @@ neutral | System;UInt128;RotateLeft;(System.UInt128,System.Int32);summary;df-generated | | System;UInt128;RotateRight;(System.UInt128,System.Int32);summary;df-generated | | System;UInt128;Sign;(System.UInt128);summary;df-generated | +| System;UInt128;System.Numerics.IAdditionOperators.op_Addition;(System.UInt128,System.UInt128);summary;df-generated | +| System;UInt128;System.Numerics.IBitwiseOperators.op_BitwiseAnd;(System.UInt128,System.UInt128);summary;df-generated | +| System;UInt128;System.Numerics.IBitwiseOperators.op_BitwiseOr;(System.UInt128,System.UInt128);summary;df-generated | +| System;UInt128;System.Numerics.IBitwiseOperators.op_ExclusiveOr;(System.UInt128,System.UInt128);summary;df-generated | +| System;UInt128;System.Numerics.IBitwiseOperators.op_OnesComplement;(System.UInt128);summary;df-generated | +| System;UInt128;System.Numerics.IComparisonOperators.op_GreaterThan;(System.UInt128,System.UInt128);summary;df-generated | +| System;UInt128;System.Numerics.IComparisonOperators.op_GreaterThanOrEqual;(System.UInt128,System.UInt128);summary;df-generated | +| System;UInt128;System.Numerics.IComparisonOperators.op_LessThan;(System.UInt128,System.UInt128);summary;df-generated | +| System;UInt128;System.Numerics.IComparisonOperators.op_LessThanOrEqual;(System.UInt128,System.UInt128);summary;df-generated | +| System;UInt128;System.Numerics.IDecrementOperators.op_CheckedDecrement;(System.UInt128);summary;df-generated | +| System;UInt128;System.Numerics.IDecrementOperators.op_Decrement;(System.UInt128);summary;df-generated | +| System;UInt128;System.Numerics.IDivisionOperators.op_CheckedDivision;(System.UInt128,System.UInt128);summary;df-generated | +| System;UInt128;System.Numerics.IDivisionOperators.op_Division;(System.UInt128,System.UInt128);summary;df-generated | +| System;UInt128;System.Numerics.IEqualityOperators.op_Equality;(System.UInt128,System.UInt128);summary;df-generated | +| System;UInt128;System.Numerics.IEqualityOperators.op_Inequality;(System.UInt128,System.UInt128);summary;df-generated | +| System;UInt128;System.Numerics.IIncrementOperators.op_CheckedIncrement;(System.UInt128);summary;df-generated | +| System;UInt128;System.Numerics.IIncrementOperators.op_Increment;(System.UInt128);summary;df-generated | +| System;UInt128;System.Numerics.IModulusOperators.op_Modulus;(System.UInt128,System.UInt128);summary;df-generated | +| System;UInt128;System.Numerics.IMultiplyOperators.op_CheckedMultiply;(System.UInt128,System.UInt128);summary;df-generated | +| System;UInt128;System.Numerics.IMultiplyOperators.op_Multiply;(System.UInt128,System.UInt128);summary;df-generated | +| System;UInt128;System.Numerics.IShiftOperators.op_LeftShift;(System.UInt128,System.Int32);summary;df-generated | +| System;UInt128;System.Numerics.IShiftOperators.op_RightShift;(System.UInt128,System.Int32);summary;df-generated | +| System;UInt128;System.Numerics.IShiftOperators.op_UnsignedRightShift;(System.UInt128,System.Int32);summary;df-generated | +| System;UInt128;System.Numerics.ISubtractionOperators.op_CheckedSubtraction;(System.UInt128,System.UInt128);summary;df-generated | +| System;UInt128;System.Numerics.ISubtractionOperators.op_Subtraction;(System.UInt128,System.UInt128);summary;df-generated | +| System;UInt128;System.Numerics.IUnaryNegationOperators.op_CheckedUnaryNegation;(System.UInt128);summary;df-generated | +| System;UInt128;System.Numerics.IUnaryNegationOperators.op_UnaryNegation;(System.UInt128);summary;df-generated | +| System;UInt128;System.Numerics.IUnaryPlusOperators.op_UnaryPlus;(System.UInt128);summary;df-generated | | System;UInt128;ToString;();summary;df-generated | | System;UInt128;ToString;(System.IFormatProvider);summary;df-generated | | System;UInt128;ToString;(System.String);summary;df-generated | @@ -53309,6 +54499,7 @@ neutral | System;UInt128;get_One;();summary;df-generated | | System;UInt128;get_Radix;();summary;df-generated | | System;UInt128;get_Zero;();summary;df-generated | +| System;UIntPtr;Abs;(System.UIntPtr);summary;df-generated | | System;UIntPtr;CompareTo;(System.Object);summary;df-generated | | System;UIntPtr;CompareTo;(System.UIntPtr);summary;df-generated | | System;UIntPtr;DivRem;(System.UIntPtr,System.UIntPtr);summary;df-generated | @@ -53337,6 +54528,10 @@ neutral | System;UIntPtr;IsZero;(System.UIntPtr);summary;df-generated | | System;UIntPtr;LeadingZeroCount;(System.UIntPtr);summary;df-generated | | System;UIntPtr;Log2;(System.UIntPtr);summary;df-generated | +| System;UIntPtr;MaxMagnitude;(System.UIntPtr,System.UIntPtr);summary;df-generated | +| System;UIntPtr;MaxMagnitudeNumber;(System.UIntPtr,System.UIntPtr);summary;df-generated | +| System;UIntPtr;MinMagnitude;(System.UIntPtr,System.UIntPtr);summary;df-generated | +| System;UIntPtr;MinMagnitudeNumber;(System.UIntPtr,System.UIntPtr);summary;df-generated | | System;UIntPtr;Parse;(System.ReadOnlySpan,System.Globalization.NumberStyles,System.IFormatProvider);summary;df-generated | | System;UIntPtr;Parse;(System.ReadOnlySpan,System.IFormatProvider);summary;df-generated | | System;UIntPtr;Parse;(System.ReadOnlySpan,System.Globalization.NumberStyles,System.IFormatProvider);summary;df-generated | @@ -53350,6 +54545,7 @@ neutral | System;UIntPtr;RotateRight;(System.UIntPtr,System.Int32);summary;df-generated | | System;UIntPtr;Sign;(System.UIntPtr);summary;df-generated | | System;UIntPtr;Subtract;(System.UIntPtr,System.Int32);summary;df-generated | +| System;UIntPtr;System.Numerics.IAdditionOperators.op_Addition;(System.UIntPtr,System.UIntPtr);summary;df-generated | | System;UIntPtr;System.Numerics.IBitwiseOperators.op_BitwiseAnd;(System.UIntPtr,System.UIntPtr);summary;df-generated | | System;UIntPtr;System.Numerics.IBitwiseOperators.op_BitwiseOr;(System.UIntPtr,System.UIntPtr);summary;df-generated | | System;UIntPtr;System.Numerics.IBitwiseOperators.op_ExclusiveOr;(System.UIntPtr,System.UIntPtr);summary;df-generated | @@ -53361,6 +54557,8 @@ neutral | System;UIntPtr;System.Numerics.IDecrementOperators.op_CheckedDecrement;(System.UIntPtr);summary;df-generated | | System;UIntPtr;System.Numerics.IDecrementOperators.op_Decrement;(System.UIntPtr);summary;df-generated | | System;UIntPtr;System.Numerics.IDivisionOperators.op_Division;(System.UIntPtr,System.UIntPtr);summary;df-generated | +| System;UIntPtr;System.Numerics.IEqualityOperators.op_Equality;(System.UIntPtr,System.UIntPtr);summary;df-generated | +| System;UIntPtr;System.Numerics.IEqualityOperators.op_Inequality;(System.UIntPtr,System.UIntPtr);summary;df-generated | | System;UIntPtr;System.Numerics.IIncrementOperators.op_CheckedIncrement;(System.UIntPtr);summary;df-generated | | System;UIntPtr;System.Numerics.IIncrementOperators.op_Increment;(System.UIntPtr);summary;df-generated | | System;UIntPtr;System.Numerics.IModulusOperators.op_Modulus;(System.UIntPtr,System.UIntPtr);summary;df-generated | diff --git a/csharp/ql/test/utils/modelgenerator/dataflow/Summaries.cs b/csharp/ql/test/utils/modelgenerator/dataflow/Summaries.cs index d7256b1019c4..473144358f47 100644 --- a/csharp/ql/test/utils/modelgenerator/dataflow/Summaries.cs +++ b/csharp/ql/test/utils/modelgenerator/dataflow/Summaries.cs @@ -639,7 +639,7 @@ public DImpl(string s) public override string Prop { get { return tainted; } } } - public abstract class BaseContent + public abstract class BaseContent { public abstract object GetValue(); @@ -961,3 +961,30 @@ public string ConcatValueOnBase2(string other, Base2 b2) return other + b2.GetValue(); } } + +public class AvoidDuplicateLifted +{ + public class A + { + public object Prop { get; set; } + + // contentbased-summary=Models;AvoidDuplicateLifted+A;true;GetValue;();;Argument[this].Property[Models.AvoidDuplicateLifted+A.Prop];ReturnValue;value;dfc-generated + // summary=Models;AvoidDuplicateLifted+A;true;GetValue;();;Argument[this];ReturnValue;taint;df-generated + public virtual object GetValue() + { + return Prop; + } + } + + public class B : A + { + private object field; + + // No content based summary as field is a dead synthetic field. + // summary=Models;AvoidDuplicateLifted+A;true;GetValue;();;Argument[this];ReturnValue;taint;df-generated + public override object GetValue() + { + return field; + } + } +} diff --git a/docs/codeql/codeql-language-guides/extensible-predicates.rst b/docs/codeql/codeql-language-guides/extensible-predicates.rst index 7b00f09785e1..7d5f6d8c9ccd 100644 --- a/docs/codeql/codeql-language-guides/extensible-predicates.rst +++ b/docs/codeql/codeql-language-guides/extensible-predicates.rst @@ -27,8 +27,8 @@ This example of an extensible predicate for a source is taken from the core Java .. code-block:: ql extensible predicate sourceModel( - string package, string type, boolean subtypes, string name, - string signature, string ext, string output, string kind, + string package, string type, boolean subtypes, string name, + string signature, string ext, string output, string kind, string provenance ); @@ -36,7 +36,7 @@ An extensible predicate is a CodeQL predicate with the following restrictions: - It uses the ``extensible`` keyword. - It has no body. -- All predicate parameters have primitive types. +- All predicate parameters have type ``string``, ``int``, ``float``, ``boolean``, or ``date``. - It is not in a module. Columns shared by all extensible predicates diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.19.1.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.19.1.rst new file mode 100644 index 000000000000..5fe18dde3d46 --- /dev/null +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.19.1.rst @@ -0,0 +1,137 @@ +.. _codeql-cli-2.19.1: + +========================== +CodeQL 2.19.1 (2024-10-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.19.1 runs a total of 426 security queries when configured with the Default suite (covering 164 CWE). The Extended suite enables an additional 128 queries (covering 34 more CWE). + +CodeQL CLI +---------- + +New Features +~~~~~~~~~~~~ + +* The command :code:`codeql generate query-help` now supports Markdown help files. + The Markdown help format is commonly used in custom CodeQL query packs. This new feature allows us to generate SARIF reporting descriptors for CodeQL queries that include Markdown help directly from a query Markdown help file. + +* Added a new command, :code:`codeql resolve packs`. This command shows each step in the pack search process, including what packs were found in each step. With the + :code:`--show-hidden-packs` option, it can also show details on which packs were hidden by packs found earlier in the search sequence. :code:`codeql resolve packs` is intended as a replacement for most uses of :code:`codeql resolve qlpacks`, whose output is both less detailed and less accurate. + +Query Packs +----------- + +Minor Analysis Improvements +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +C/C++ +""""" + +* Fixed false positives in the :code:`cpp/wrong-number-format-arguments` ("Too few arguments to formatting function") query when the formatting function has been declared implicitly. + +C# +"" + +* C#: The indexer and :code:`Add` method on :code:`System.Web.UI.AttributeCollection` is no longer considered an HTML sink. + +Java/Kotlin +""""""""""" + +* Added taint summary model for :code:`org.springframework.core.io.InputStreamSource#getInputStream()`. + +New Queries +~~~~~~~~~~~ + +Python +"""""" + +* The :code:`py/cors-misconfiguration-with-credentials` query, which finds insecure CORS middleware configurations. + +Query Metadata Changes +~~~~~~~~~~~~~~~~~~~~~~ + +Golang +"""""" + +* The precision of the :code:`go/incorrect-integer-conversion-query` query was decreased from :code:`very-high` to :code:`high`, since there is at least one known class of false positives involving dynamic bounds checking. + +Language Libraries +------------------ + +Breaking Changes +~~~~~~~~~~~~~~~~ + +C# +"" + +* C#: Add support for MaD directly on properties and indexers using *attributes*. Using :code:`Attribute.Getter` or :code:`Attribute.Setter` in the model :code:`ext` field applies the model to the getter or setter for properties and indexers. Prior to this change :code:`Attribute` models unintentionally worked for property setters (if the property is decorated with the matching attribute). That is, a model that uses the :code:`Attribute` feature directly on a property for a property setter needs to be changed to :code:`Attribute.Setter`. +* C#: Remove all CIL tables and related QL library functionality. + +Minor Analysis Improvements +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +C# +"" + +* :code:`DataFlow::Node` instances are no longer created for library methods and fields that are not callable (either statically or dynamically) or otherwise referred to from source code. This may affect third-party queries that use these nodes to identify library methods or fields that are present in DLL files where those methods or fields are unreferenced. If this presents a problem, consider using :code:`Callable` and other non-dataflow classes to identify such library entities. +* C#: Add extractor support for attributes on indexers. + +Golang +"""""" + +* A method in the method set of an embedded field of a struct should not be promoted to the method set of the struct if the struct has a method with the same name. This was not being enforced, which meant that there were two methods with the same qualified name, and models were sometimes being applied when they shouldn't have been. This has now been fixed. + +Python +"""""" + +* The common sanitizer guard :code:`StringConstCompareBarrier` has been renamed to :code:`ConstCompareBarrier` and expanded to cover comparisons with other constant values such as :code:`None`. This may result in fewer false positive results for several queries. + +Swift +""""" + +* All AST classes in :code:`codeql.swift.elements` are now :code:`final`, which means that it is no longer possible to :code:`override` predicates defined in those classes (it is, however, still possible to :code:`extend` the classes). + +Deprecated APIs +~~~~~~~~~~~~~~~ + +C# +"" + +* The class :code:`ThreatModelFlowSource` has been renamed to :code:`ActiveThreatModelSource` to more clearly reflect it only contains the currently active threat model sources. :code:`ThreatModelFlowSource` has been marked as deprecated. + +Golang +"""""" + +* The class :code:`ThreatModelFlowSource` has been renamed to :code:`ActiveThreatModelSource` to more clearly reflect it only contains the currently active threat model sources. :code:`ThreatModelFlowSource` has been marked as deprecated. + +Java/Kotlin +""""""""""" + +* The :code:`Field.getSourceDeclaration()` predicate has been deprecated. The result was always the original field, so calls to it can simply be removed. +* The :code:`Field.isSourceDeclaration()` predicate has been deprecated. It always holds. +* The :code:`RefType.nestedName()` predicate has been deprecated, and :code:`RefType.getNestedName()` added to replace it. +* The class :code:`ThreatModelFlowSource` has been renamed to :code:`ActiveThreatModelSource` to more clearly reflect it only contains the currently active threat model sources. :code:`ThreatModelFlowSource` has been marked as deprecated. + +New Features +~~~~~~~~~~~~ + +Java/Kotlin +""""""""""" + +* The Java extractor and QL libraries now support Java 23. +* Kotlin versions up to 2.1.0\ *x* are now supported. + +Python +"""""" + +* Added support for custom threat-models, which can be used in most of our taint-tracking queries, see our `documentation `__ for more details. diff --git a/docs/codeql/codeql-overview/codeql-changelog/index.rst b/docs/codeql/codeql-overview/codeql-changelog/index.rst index 1270d569efb1..4c8d07bd9408 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/index.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/index.rst @@ -11,6 +11,7 @@ A list of queries for each suite and language `is available here latest version of CodeQL...
- +
CodeQL coverage of CWEs
Detailed information on the coverage of Common Weakness Enumerations (CWEs) in the latest release...
diff --git a/docs/codeql/ql-language-reference/modules.rst b/docs/codeql/ql-language-reference/modules.rst index 7b2b16f3b7bf..75b61667246e 100644 --- a/docs/codeql/ql-language-reference/modules.rst +++ b/docs/codeql/ql-language-reference/modules.rst @@ -4,10 +4,10 @@ Modules ####### - -Modules provide a way of organizing QL code by grouping together related types, predicates, and other modules. -You can import modules into other files, which avoids duplication, and helps +Modules provide a way of organizing QL code by grouping together related types, predicates, and other modules. + +You can import modules into other files, which avoids duplication, and helps structure your code into more manageable pieces. .. _defining-module: @@ -16,7 +16,7 @@ Defining a module ***************** There are various ways to define modules—here is an example of the simplest way, declaring an -:ref:`explicit module ` named ``Example`` containing +:ref:`explicit module ` named ``Example`` containing a class ``OneTwoThree``: .. code-block:: ql @@ -27,17 +27,17 @@ a class ``OneTwoThree``: this = 1 or this = 2 or this = 3 } } - } + } The name of a module can be any `identifier `_ -that starts with an uppercase or lowercase letter. +that starts with an uppercase or lowercase letter. ``.ql`` or ``.qll`` files also implicitly define modules. For more information, see ":ref:`kinds-of-modules`." You can also annotate a module. For more information, see of ":ref:`annotations-overview`." -Note that you can only annotate :ref:`explicit modules `. +Note that you can only annotate :ref:`explicit modules `. File modules cannot be annotated. .. _kinds-of-modules: @@ -48,7 +48,7 @@ Kinds of modules File modules ============ -Each query file (extension ``.ql``) and library file (extension ``.qll``) implicitly defines +Each query file (extension ``.ql``) and library file (extension ``.qll``) implicitly defines a module. The module has the same name as the file, but any spaces in the file name are replaced by underscores (``_``). The contents of the file form the :ref:`body of the module `. @@ -57,7 +57,7 @@ by underscores (``_``). The contents of the file form the :ref:`body of the modu Library modules --------------- -A library module is defined by a ``.qll`` file. It can contain any of the +A library module is defined by a ``.qll`` file. It can contain any of the elements listed in :ref:`module-bodies` below, apart from select clauses. For example, consider the following QL library: @@ -75,19 +75,19 @@ For example, consider the following QL library: This file defines a library module named ``OneTwoThreeLib``. The body of this module defines the class ``OneTwoThree``. -.. _query-modules: +.. _query-modules: Query modules ------------- -A query module is defined by a ``.ql`` file. It can contain any of the elements listed -in :ref:`module-bodies` below. +A query module is defined by a ``.ql`` file. It can contain any of the elements listed +in :ref:`module-bodies` below. Query modules are slightly different from other modules: - A query module can't be imported. -- A query module must have at least one query in its - :ref:`namespace `. This is usually a :ref:`select clause `, +- A query module must have at least one query in its + :ref:`namespace `. This is usually a :ref:`select clause `, but can also be a :ref:`query predicate `. For example: @@ -97,7 +97,7 @@ For example: .. code-block:: ql import OneTwoThreeLib - + from OneTwoThree ott where ott = 1 or ott = 2 select ott @@ -110,13 +110,13 @@ This file defines a query module named ``OneTwoQuery``. The body of this module Explicit modules ================ -You can also define a module within another module. This is an explicit module definition. +You can also define a module within another module. This is an explicit module definition. -An explicit module is defined with the keyword ``module`` followed by -the module name, and then the module body enclosed in braces. It can contain any -of the elements listed in ":ref:`module-bodies`" below, apart from select clauses. +An explicit module is defined with the keyword ``module`` followed by +the module name, and then the module body enclosed in braces. It can contain any +of the elements listed in ":ref:`module-bodies`" below, apart from select clauses. -For example, you could add the following QL snippet to the library file **OneTwoThreeLib.qll** +For example, you could add the following QL snippet to the library file **OneTwoThreeLib.qll** defined :ref:`above `: .. code-block:: ql @@ -129,7 +129,7 @@ defined :ref:`above `: } } } - + This defines an explicit module named ``M``. The body of this module defines the class ``OneTwo``. @@ -226,7 +226,7 @@ Module bodies ************* The body of a module is the code inside the module definition, for example -the class ``OneTwo`` in the :ref:`explicit module ` ``M``. +the class ``OneTwo`` in the :ref:`explicit module ` ``M``. In general, the body of a module can contain the following constructs: @@ -243,11 +243,11 @@ In general, the body of a module can contain the following constructs: Importing modules ***************** -The main benefit of storing code in a module is that you can reuse it in other modules. -To access the contents of an external module, you can import the module using an +The main benefit of storing code in a module is that you can reuse it in other modules. +To access the contents of an external module, you can import the module using an :ref:`import statement `. -When you import a module this brings all the names in its namespace, apart from :ref:`private` names, +When you import a module this brings all the names in its namespace, apart from :ref:`private` names, into the :ref:`namespace ` of the current module. .. _import-statements: @@ -263,7 +263,7 @@ Import statements are used for importing modules. They are of the form: import Import statements are usually listed at the beginning of the module. Each -import statement imports one module. You can import multiple modules by +import statement imports one module. You can import multiple modules by including multiple import statements (one for each module you want to import). An import statement can also be :ref:`annotated ` with @@ -272,14 +272,14 @@ An import statement can also be :ref:`annotated ` with only reachable through deprecated imports in a given context then usage of the name in that context will generate deprecation warnings. -You can import a module under a different name using the ``as`` keyword, +You can import a module under a different name using the ``as`` keyword, for example ``import javascript as js``. The ```` itself can be a module name, a selection, or a qualified reference. For more information, see ":ref:`name-resolution`." For information about how import statements are looked up, see "`Module resolution `__" -in the QL language specification. +in the QL language specification. Built-in modules **************** @@ -353,7 +353,7 @@ Sets The built-in ``InternSets`` module is parameterized by ``Key`` and ``Value`` types and a ``Value getAValue(Key key)`` relation. The module groups the ``Value`` -column by ``Key`` and creates a set for each group of values related by a key. +column by ``Key`` and creates a set for each group of values related by a key. The ``InternSets`` module exports a functional ``Set getSet(Key key)`` relation that relates keys with the set of value related to the given key by @@ -424,3 +424,30 @@ The above query therefore evalutes to: +----+----+ | 4 | 4 | +----+----+ + +.. index:: BigInt +.. _bigint: + +BigInt +====== + +The built-in ``QlBuiltins`` module provides an **experimental** type ``BigInt`` of arbitrary-precision integers. + +This type is not available in the CodeQL CLI by default, but you can enable it by passing the ``--allow-experimental=bigint`` +option to the CodeQL CLI. Consequently, BigInts are currently disallowed in query results and dbscheme columns. + +Unlike ``int`` and ``float``, there is no automatic conversion between ``BigInt`` and other numeric types. +Instead, big integers can be constructed using the ``.toBigInt()`` methods of ``int`` and ``string``. + +The other built-in operations are: + +* comparisons between ``BigInt``\s: ``=``, ``!=``, ``<``, ``<=``, ``>``, ``>=``, +* conversions from ``BigInt``\s to strings or integers (if within range): ``.toString()``, ``.toInt()``, +* ``BigInt`` arithmetic: binary ``+``, ``-``, ``*``, ``/``, ``%``, unary ``-``, +* bitwise operations: ``.bitAnd(BigInt)``, ``.bitOr(BigInt)``, + ``.bitXor(BigInt)``, ``.bitShiftLeft(int)``, ``.bitShiftRightSigned(int)``, + ``.bitNot()``, +* aggregates: ``min``, ``max``, (``strict``)\ ``sum``, (``strict``)\ ``count``, ``avg``, + ``rank``, ``unique``, ``any``. +* other: ``.pow(int)``, ``.abs()``, ``.gcd(BigInt)``, ``.minimum(BigInt)``, + ``.maximum(BigInt)``. diff --git a/docs/codeql/ql-language-reference/ql-language-specification.rst b/docs/codeql/ql-language-reference/ql-language-specification.rst index ae0057d3cf62..60e5ece73303 100644 --- a/docs/codeql/ql-language-reference/ql-language-specification.rst +++ b/docs/codeql/ql-language-reference/ql-language-specification.rst @@ -359,7 +359,7 @@ Kinds of types Types in QL are either *primitive* types, *database* types, *class* types, *character* types, *class domain* types, type *parameters*, or *instantiation-nested* types. -The primitive types are ``boolean``, ``date``, ``float``, ``int``, and ``string``. +The primitive types are ``boolean``, ``date``, ``float``, ``int``, ``string``, and ``QlBuiltins::BigInt``. Database types are supplied as part of the database. Each database type has a *name*, which is an identifier starting with an at sign (``@``, U+0040) followed by lower-case letter. Database types have some number of *base types*, which are other database types. In a valid database, the base types relation is non-cyclic. @@ -433,7 +433,7 @@ Values are the fundamental data that QL programs compute over. This section spec Kinds of values ~~~~~~~~~~~~~~~ -There are six kinds of values in QL: one kind for each of the five primitive types, and *entities*. Each value has a type. +There are seven kinds of values in QL: one kind for each of the six primitive types, and *entities*. Each value has a type. A boolean value is of type ``boolean``, and may have one of two distinct values: ``true`` or ``false``. @@ -445,6 +445,8 @@ An integer value is of type ``int``. Each value is a 32-bit two's complement int A string is a finite sequence of 16-bit characters. The characters are interpreted as Unicode code points. +A :ref:`big integer ` value is of type ``QlBuiltins::BigInt``. Each value is a signed arbitrary-precision integer. + The database includes a number of opaque entity values. Each such value has a type that is one of the database types, and an identifying integer. An entity value is written as the name of its database type followed by its identifying integer in parentheses. For example, ``@tree(12)``, ``@person(16)``, and ``@location(38132)`` are entity values. The identifying integers are left opaque to programmers in this specification, so an implementation of QL is free to use some other set of countable labels to identify its entities. Ordering @@ -458,7 +460,7 @@ For dates, the ordering is chronological. For floats, the ordering is as specified in IEEE 754 when one exists, except that NaN is considered equal to itself and is ordered after all other floats, and negative zero is considered to be strictly less than positive zero. -For integers, the ordering is as for two's complement integers. +For integers (and :ref:`big integers `), the ordering is numerical. For strings, the ordering is lexicographic. diff --git a/docs/codeql/ql-language-reference/types.rst b/docs/codeql/ql-language-reference/types.rst index 12aadc7213a3..e14f542dcf88 100644 --- a/docs/codeql/ql-language-reference/types.rst +++ b/docs/codeql/ql-language-reference/types.rst @@ -10,12 +10,12 @@ Types QL is a statically typed language, so each variable must have a declared type. A type is a set of values. -For example, the type ``int`` is the set of integers. -Note that a value can belong to more than one of these sets, which means that it can have more +For example, the type ``int`` is the set of integers. +Note that a value can belong to more than one of these sets, which means that it can have more than one type. The kinds of types in QL are :ref:`primitive types `, :ref:`classes `, -:ref:`character types `, :ref:`class domain types `, +:ref:`character types `, :ref:`class domain types `, :ref:`algebraic datatypes `, :ref:`type unions `, and :ref:`database types `. @@ -31,27 +31,29 @@ independent of the database that you are querying. .. _boolean: #. **boolean**: This type contains the values ``true`` and ``false``. - + .. _float: #. **float**: This type contains 64-bit floating point numbers, such as ``6.28`` and ``-0.618``. - + .. _int: #. **int**: This type contains 32-bit `two's complement `_ integers, such as ``-1`` and ``42``. - + .. _string: #. **string**: This type contains finite strings of 16-bit characters. - + .. _date: -#. **date**: This type contains dates (and optionally times). - +#. **date**: This type contains dates (and optionally times). + QL has a range of built-in operations defined on primitive types. These are available by using dispatch on expressions of the appropriate type. For example, ``1.toString()`` is the string representation of the integer constant ``1``. For a full list of built-in operations available in QL, see the section on `built-ins `__ in the QL language specification. +Additionally, there is an experimental arbitrary-precision integer primitive type at :ref:`QlBuiltins::BigInt `. This type is not available in the CodeQL CLI by default, but you can enable it by passing the ``--allow-experimental=bigint`` option to the CodeQL CLI. + .. index:: class .. _classes: @@ -65,7 +67,7 @@ Classes provide an easy way to reuse and structure code. For example, you can: - Define :ref:`member predicates ` on those values. - Define subclasses that :ref:`override member predicates `. -A class in QL doesn't "create" a new object, it just represents a logical property. A value is +A class in QL doesn't "create" a new object, it just represents a logical property. A value is in a particular class if it satisfies that logical property. .. _defining-a-class: @@ -75,8 +77,8 @@ Defining a class To define a class, you write: -#. The keyword ``class``. -#. The name of the class. This is an `identifier `_ +#. The keyword ``class``. +#. The name of the class. This is an `identifier `_ starting with an uppercase letter. #. The supertypes that the class is derived from via `extends` and/or `instanceof` #. The :ref:`body of the class `, enclosed in braces. @@ -89,11 +91,11 @@ For example: OneTwoThree() { // characteristic predicate this = 1 or this = 2 or this = 3 } - + string getAString() { // member predicate result = "One, two or three: " + this.toString() } - + predicate isEven() { // member predicate this = 2 } @@ -101,7 +103,7 @@ For example: This defines a class ``OneTwoThree``, which contains the values ``1``, ``2``, and ``3``. The :ref:`characteristic predicate ` captures the logical property of -"being one of the integers 1, 2, or 3." +"being one of the integers 1, 2, or 3." .. index:: extends @@ -132,12 +134,12 @@ Class bodies The body of a class can contain: - A :ref:`characteristic predicate ` declaration. - Any number of :ref:`member predicate ` declarations. - - Any number of :ref:`field ` declarations. + - Any number of :ref:`field ` declarations. When you define a class, that class also inherits all non-:ref:`private` member predicates and fields from its supertypes. -Depending on whether they are final, you can :ref:`override ` or +Depending on whether they are final, you can :ref:`override ` or :ref:`shadow ` those predicates and fields to give them a more specific definition. .. _characteristic-predicates: @@ -181,22 +183,22 @@ This call returns ``"ONE, TWO OR THREE: 1"``. .. pull-quote:: Note - Characteristic predicates and member predicates often use the variable ``this``. - This variable always refers to a member of the class—in this case a value belonging to the + Characteristic predicates and member predicates often use the variable ``this``. + This variable always refers to a member of the class—in this case a value belonging to the class ``OneTwoThree``. - In the :ref:`characteristic predicate `, the variable ``this`` + In the :ref:`characteristic predicate `, the variable ``this`` constrains the values that are in the class. - In a :ref:`member predicate `, ``this`` acts in the same way as any + In a :ref:`member predicate `, ``this`` acts in the same way as any other argument to the predicate. .. index:: field -.. _fields: +.. _fields: Fields ------ These are variables declared in the body of a class. A class can have any number of field -declarations (that is, variable declarations) within its body. You can use these variables in +declarations (that is, variable declarations) within its body. You can use these variables in predicate declarations inside the class. Much like the :ref:`variable ` ``this``, fields must be constrained in the :ref:`characteristic predicate `. @@ -207,21 +209,21 @@ For example: class SmallInt extends int { SmallInt() { this = [1 .. 10] } } - + class DivisibleInt extends SmallInt { SmallInt divisor; // declaration of the field `divisor` DivisibleInt() { this % divisor = 0 } - + SmallInt getADivisor() { result = divisor } } - + from DivisibleInt i select i, i.getADivisor() In this example, the declaration ``SmallInt divisor`` introduces a field ``divisor``, constrains it in the characteristic predicate, and then uses it in the declaration of the member predicate ``getADivisor``. This is similar to introducing variables in a :ref:`select clause ` -by declaring them in the ``from`` part. +by declaring them in the ``from`` part. You can also annotate predicates and fields. See the list of :ref:`annotations ` that are available. @@ -231,7 +233,7 @@ that are available. Concrete classes ================ -The classes in the above examples are all **concrete** classes. They are defined by +The classes in the above examples are all **concrete** classes. They are defined by restricting the values in a larger type. The values in a concrete class are precisely those values in the intersection of the supertypes that also satisfy the :ref:`characteristic predicate ` of the class. @@ -241,32 +243,32 @@ values in the intersection of the supertypes that also satisfy the Abstract classes ================ -A class :ref:`annotated ` with ``abstract``, known as an **abstract** class, is also a restriction of -the values in a larger type. However, an abstract class is defined as the union of its -subclasses. In particular, for a value to be in an abstract class, it must satisfy the +A class :ref:`annotated ` with ``abstract``, known as an **abstract** class, is also a restriction of +the values in a larger type. However, an abstract class is defined as the union of its +subclasses. In particular, for a value to be in an abstract class, it must satisfy the characteristic predicate of the class itself **and** the characteristic predicate of a subclass. Note that final extensions are not considered subclasses in this context. -An abstract class is useful if you want to group multiple existing classes together -under a common name. You can then define member predicates on all those classes. You can also -extend predefined abstract classes: for example, if you import a library that contains an +An abstract class is useful if you want to group multiple existing classes together +under a common name. You can then define member predicates on all those classes. You can also +extend predefined abstract classes: for example, if you import a library that contains an abstract class, you can add more subclasses to it. **Example** -If you are writing a security query, you may be interested in identifying -all expressions that can be interpreted as SQL queries. +If you are writing a security query, you may be interested in identifying +all expressions that can be interpreted as SQL queries. You can use the following abstract class to describe these expressions: .. code-block:: ql abstract class SqlExpr extends Expr { - ... + ... } Now define various subclasses—one for each kind of database management system. For example, you -can define a subclass ``class PostgresSqlExpr extends SqlExpr``, which contains expressions -passed to some Postgres API that performs a database query. +can define a subclass ``class PostgresSqlExpr extends SqlExpr``, which contains expressions +passed to some Postgres API that performs a database query. You can define similar subclasses for MySQL and other database management systems. The abstract class ``SqlExpr`` refers to all of those different expressions. If you want to add @@ -278,7 +280,7 @@ there is no need to update the queries that rely on it. You must take care when you add a new subclass to an existing abstract class. Adding a subclass is not an isolated change, it also extends the abstract class since that is a union of its - subclasses. + subclasses. .. _overriding-member-predicates: @@ -288,7 +290,7 @@ Overriding member predicates If a class inherits a member predicate from a non-final supertype, you can **override** the inherited definition. You do this by defining a member predicate with the same name and arity as the inherited predicate, and by adding the ``override`` :ref:`annotation `. -This is useful if you want to refine the predicate to give a more specific result for the +This is useful if you want to refine the predicate to give a more specific result for the values in the subclass. For example, extending the class from the :ref:`first example `: @@ -299,7 +301,7 @@ For example, extending the class from the :ref:`first example OneTwo() { this = 1 or this = 2 } - + override string getAString() { result = "One or two: " + this.toString() } @@ -328,7 +330,7 @@ look like this: | 3 | One, two or three: 3 | +---+-------------------------+ -In QL, unlike other object-oriented languages, different subtypes of the same types don't need to be +In QL, unlike other object-oriented languages, different subtypes of the same types don't need to be disjoint. For example, you could define another subclass of ``OneTwoThree``, which overlaps with ``OneTwo``: @@ -338,14 +340,14 @@ with ``OneTwo``: TwoThree() { this = 2 or this = 3 } - + override string getAString() { result = "Two or three: " + this.toString() } } -Now the value 2 is included in both class types ``OneTwo`` and ``TwoThree``. Both of these classes -override the original definition of ``getAString()``. There are two new "most specific" definitions, +Now the value 2 is included in both class types ``OneTwo`` and ``TwoThree``. Both of these classes +override the original definition of ``getAString()``. There are two new "most specific" definitions, so running the above query gives the following results: +---+-------------------------+ @@ -373,7 +375,7 @@ For example, using the definitions from the above section: class Two extends OneTwo, TwoThree {} -Any value in the class ``Two`` must satisfy the logical property represented by ``OneTwo``, +Any value in the class ``Two`` must satisfy the logical property represented by ``OneTwo``, **and** the logical property represented by ``TwoThree``. Here the class ``Two`` contains one value, namely 2. @@ -401,12 +403,12 @@ For example, extending the class from the :ref:`first example .. code-block:: ql final class FinalOneTwoThree = OneTwoThree; - + class OneTwoFinalExtension extends FinalOneTwoThree { OneTwoFinalExtension() { this = 1 or this = 2 } - + string getAString() { result = "One or two: " + this.toString() } @@ -507,19 +509,19 @@ Had ``Bar`` been defined as ``extends Foo``, then ``select any(Foo f).foo()`` wo Character types and class domain types ************************************** -You can't refer to these types directly, but each class in QL implicitly defines a character -type and a class domain type. (These are rather more subtle concepts and don't appear very +You can't refer to these types directly, but each class in QL implicitly defines a character +type and a class domain type. (These are rather more subtle concepts and don't appear very often in practical query writing.) -The **character type** of a QL class is the set of values satisfying the :ref:`characteristic -predicate ` of the class. -It is a subset of the domain type. For concrete classes, a value belongs to -the class if, and only if, it is in the character type. For :ref:`abstract classes +The **character type** of a QL class is the set of values satisfying the :ref:`characteristic +predicate ` of the class. +It is a subset of the domain type. For concrete classes, a value belongs to +the class if, and only if, it is in the character type. For :ref:`abstract classes `, a value must also belong to at least one of the subclasses, in addition to -being in the character type. +being in the character type. The **domain type** of a QL class is the intersection of the character types of all its supertypes, that is, a value -belongs to the domain type if it belongs to every supertype. It occurs as the type of ``this`` +belongs to the domain type if it belongs to every supertype. It occurs as the type of ``this`` in the characteristic predicate of a class. .. index:: newtype @@ -570,13 +572,13 @@ The branch definitions have the following form: () { } -- The type name and the branch names must be `identifiers `_ +- The type name and the branch names must be `identifiers `_ starting with an uppercase letter. Conventionally, they start with ``T``. - The different branches of an algebraic datatype are separated by ``or``. - The arguments to a branch, if any, are :ref:`variable declarations ` separated by commas. - The body of a branch is a :ref:`predicate ` body. You can omit the branch body, in which case - it defaults to ``any()``. + it defaults to ``any()``. Note that branch bodies are evaluated fully, so they must be finite. They should be kept small for good performance. @@ -586,28 +588,28 @@ For example, the following algebraic datatype has three branches: newtype T = Type1(A a, B b) { body(a, b) } - or + or Type2(C c) - or + or Type3() Standard pattern for using algebraic datatypes ============================================== -Algebraic datatypes are different from :ref:`classes `. In particular, algebraic datatypes don't have a +Algebraic datatypes are different from :ref:`classes `. In particular, algebraic datatypes don't have a ``toString()`` member predicate, so you can't use them in a :ref:`select clause `. -Classes are often used to extend algebraic datatypes (and to provide a ``toString()`` predicate). +Classes are often used to extend algebraic datatypes (and to provide a ``toString()`` predicate). In the standard QL language libraries, this is usually done as follows: - Define a class ``A`` that extends the algebraic datatype and optionally declares :ref:`abstract` predicates. -- For each branch type, define a class ``B`` that extends both ``A`` and the branch type, +- For each branch type, define a class ``B`` that extends both ``A`` and the branch type, and provide a definition for any abstract predicates from ``A``. - Annotate the algebraic datatype with :ref:`private`, and leave the classes public. For example, the following code snippet from the CodeQL data-flow library for C# defines classes -for dealing with tainted or untainted values. In this case, it doesn't make sense for +for dealing with tainted or untainted values. In this case, it doesn't make sense for ``TaintType`` to extend a database type. It is part of the taint analysis, not the underlying program, so it's helpful to extend a new type (namely ``TTaintType``): @@ -617,24 +619,24 @@ program, so it's helpful to extend a new type (namely ``TTaintType``): TExactValue() or TTaintedValue() - + /** Describes how data is tainted. */ class TaintType extends TTaintType { string toString() { this = TExactValue() and result = "exact" - or + or this = TTaintedValue() and result = "tainted" } } - + /** A taint type where the data is untainted. */ class Untainted extends TaintType, TExactValue { } - + /** A taint type where the data is tainted. */ class Tainted extends TaintType, TTaintedValue { } - + .. _type-unions: Type unions @@ -672,7 +674,7 @@ If we had implemented ``DefiniteInitialization`` as a class extension instead, i .. code-block:: ql - // THIS WON'T WORK: The implicit type check for InitialValueSource involves an illegal recursion + // THIS WON'T WORK: The implicit type check for InitialValueSource involves an illegal recursion // DefiniteInitialization -> InitialValueSource -> UnknownInitialGarbage -> ¬DefiniteInitialization! class DefiniteInitialization extends InitialValueSource { DefiniteInitialization() { @@ -692,7 +694,7 @@ Database types are defined in the database schema. This means that they depend o that you are querying, and vary according to the data you are analyzing. For example, if you are querying a CodeQL database for a Java project, the database types may -include ``@ifstmt``, representing an if statement in the Java code, and ``@variable``, +include ``@ifstmt``, representing an if statement in the Java code, and ``@variable``, representing a variable. .. _type-compatibility: diff --git a/go/codeql-extractor.yml b/go/codeql-extractor.yml index f21c0ed7466d..49c8c75232f3 100644 --- a/go/codeql-extractor.yml +++ b/go/codeql-extractor.yml @@ -27,3 +27,10 @@ options: The default is 'false'. type: string pattern: "^(false|true)$" + extract_vendor_dirs: + title: Whether to include Go vendor directories in the CodeQL database. + description: > + A value indicating whether Go vendor directories should be included in the CodeQL database. + The default is 'false'. + type: string + pattern: "^(false|true)$" diff --git a/go/downgrades/4bd57e093275e5e892dfb16b55ed4bd76ea662be/go.dbscheme b/go/downgrades/4bd57e093275e5e892dfb16b55ed4bd76ea662be/go.dbscheme new file mode 100644 index 000000000000..a58b81b1b4c4 --- /dev/null +++ b/go/downgrades/4bd57e093275e5e892dfb16b55ed4bd76ea662be/go.dbscheme @@ -0,0 +1,546 @@ +/** Auto-generated dbscheme; do not edit. */ + + +/** Duplicate code **/ + +duplicateCode( + unique int id : @duplication, + varchar(900) relativePath : string ref, + int equivClass : int ref); + +similarCode( + unique int id : @similarity, + varchar(900) relativePath : string ref, + int equivClass : int ref); + +@duplication_or_similarity = @duplication | @similarity; + +tokens( + int id : @duplication_or_similarity ref, + int offset : int ref, + int beginLine : int ref, + int beginColumn : int ref, + int endLine : int ref, + int endColumn : int ref); + +/** External data **/ + +externalData( + int id : @externalDataElement, + varchar(900) path : string ref, + int column: int ref, + varchar(900) value : string ref +); + +snapshotDate(unique date snapshotDate : date ref); + +sourceLocationPrefix(varchar(900) prefix : string 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; + +compilations(unique int id: @compilation, string cwd: string ref); + +#keyset[id, num] +compilation_args(int id: @compilation ref, int num: int ref, string arg: string ref); + +#keyset[id, num, kind] +compilation_time(int id: @compilation ref, int num: int ref, int kind: int ref, float secs: float ref); + +diagnostic_for(unique int diagnostic: @diagnostic ref, int compilation: @compilation ref, int file_number: int ref, int file_number_diagnostic_number: int ref); + +compilation_finished(unique int id: @compilation ref, float cpu_seconds: float ref, float elapsed_seconds: float ref); + +#keyset[id, num] +compilation_compiling_files(int id: @compilation ref, int num: int ref, int file: @file ref); + +diagnostics(unique int id: @diagnostic, int severity: int ref, string error_tag: string ref, string error_message: string ref, + string full_error_message: string ref, int location: @location ref); + +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); + +numlines(int element_id: @sourceline ref, int num_lines: int ref, int num_code: int ref, int num_comment: int ref); + +files(unique int id: @file, string name: string ref); + +folders(unique int id: @folder, string name: string ref); + +containerparent(int parent: @container ref, unique int child: @container ref); + +has_location(unique int locatable: @locatable ref, int location: @location ref); + +#keyset[parent, idx] +comment_groups(unique int id: @comment_group, int parent: @file ref, int idx: int ref); + +comments(unique int id: @comment, int kind: int ref, int parent: @comment_group ref, int idx: int ref, string text: string ref); + +doc_comments(unique int node: @documentable ref, int comment: @comment_group ref); + +#keyset[parent, idx] +exprs(unique int id: @expr, int kind: int ref, int parent: @exprparent ref, int idx: int ref); + +literals(unique int expr: @expr ref, string value: string ref, string raw: string ref); + +constvalues(unique int expr: @expr ref, string value: string ref, string exact: string ref); + +fields(unique int id: @field, int parent: @fieldparent ref, int idx: int ref); + +typeparamdecls(unique int id: @typeparamdecl, int parent: @typeparamdeclparent ref, int idx: int ref); + +#keyset[parent, idx] +stmts(unique int id: @stmt, int kind: int ref, int parent: @stmtparent ref, int idx: int ref); + +#keyset[parent, idx] +decls(unique int id: @decl, int kind: int ref, int parent: @declparent ref, int idx: int ref); + +#keyset[parent, idx] +specs(unique int id: @spec, int kind: int ref, int parent: @gendecl ref, int idx: int ref); + +scopes(unique int id: @scope, int kind: int ref); + +scopenesting(unique int inner: @scope ref, int outer: @scope ref); + +scopenodes(unique int node: @scopenode ref, int scope: @localscope ref); + +objects(unique int id: @object, int kind: int ref, string name: string ref); + +objectscopes(unique int object: @object ref, int scope: @scope ref); + +objecttypes(unique int object: @object ref, int tp: @type ref); + +methodreceivers(unique int method: @object ref, int receiver: @object ref); + +fieldstructs(unique int field: @object ref, int struct: @structtype ref); + +methodhosts(int method: @object ref, int host: @namedtype ref); + +defs(int ident: @ident ref, int object: @object ref); + +uses(int ident: @ident ref, int object: @object ref); + +types(unique int id: @type, int kind: int ref); + +type_of(unique int expr: @expr ref, int tp: @type ref); + +typename(unique int tp: @type ref, string name: string ref); + +key_type(unique int map: @maptype ref, int tp: @type ref); + +element_type(unique int container: @containertype ref, int tp: @type ref); + +base_type(unique int ptr: @pointertype ref, int tp: @type ref); + +underlying_type(unique int named: @namedtype ref, int tp: @type ref); + +#keyset[parent, index] +component_types(int parent: @compositetype ref, int index: int ref, string name: string ref, int tp: @type ref); + +array_length(unique int tp: @arraytype ref, string len: string ref); + +type_objects(unique int tp: @type ref, int object: @object ref); + +packages(unique int id: @package, string name: string ref, string path: string ref, int scope: @packagescope ref); + +#keyset[parent, idx] +modexprs(unique int id: @modexpr, int kind: int ref, int parent: @modexprparent ref, int idx: int ref); + +#keyset[parent, idx] +modtokens(string token: string ref, int parent: @modexpr ref, int idx: int ref); + +#keyset[package, idx] +errors(unique int id: @error, int kind: int ref, string msg: string ref, string rawpos: string ref, + string file: string ref, int line: int ref, int col: int ref, int package: @package ref, int idx: int ref); + +has_ellipsis(int id: @callorconversionexpr ref); + +variadic(int id: @signaturetype ref); + +#keyset[parent, idx] +typeparam(unique int tp: @typeparamtype ref, string name: string ref, int bound: @compositetype ref, + int parent: @typeparamparentobject ref, int idx: int ref); + +@container = @file | @folder; + +@locatable = @xmllocatable | @node | @localscope; + +@node = @documentable | @exprparent | @modexprparent | @fieldparent | @stmtparent | @declparent | @typeparamdeclparent + | @scopenode | @comment_group | @comment; + +@documentable = @file | @field | @typeparamdecl | @spec | @gendecl | @funcdecl | @modexpr; + +@exprparent = @funcdef | @file | @expr | @field | @stmt | @decl | @typeparamdecl | @spec; + +@modexprparent = @file | @modexpr; + +@fieldparent = @decl | @structtypeexpr | @functypeexpr | @interfacetypeexpr; + +@stmtparent = @funcdef | @stmt | @decl; + +@declparent = @file | @declstmt; + +@typeparamdeclparent = @funcdecl | @typespec; + +@funcdef = @funclit | @funcdecl; + +@scopenode = @file | @functypeexpr | @blockstmt | @ifstmt | @caseclause | @switchstmt | @commclause | @loopstmt; + +@location = @location_default; + +@sourceline = @locatable; + +case @comment.kind of + 0 = @slashslashcomment +| 1 = @slashstarcomment; + +case @expr.kind of + 0 = @badexpr +| 1 = @ident +| 2 = @ellipsis +| 3 = @intlit +| 4 = @floatlit +| 5 = @imaglit +| 6 = @charlit +| 7 = @stringlit +| 8 = @funclit +| 9 = @compositelit +| 10 = @parenexpr +| 11 = @selectorexpr +| 12 = @indexexpr +| 13 = @genericfunctioninstantiationexpr +| 14 = @generictypeinstantiationexpr +| 15 = @sliceexpr +| 16 = @typeassertexpr +| 17 = @callorconversionexpr +| 18 = @starexpr +| 19 = @keyvalueexpr +| 20 = @arraytypeexpr +| 21 = @structtypeexpr +| 22 = @functypeexpr +| 23 = @interfacetypeexpr +| 24 = @maptypeexpr +| 25 = @typesetliteralexpr +| 26 = @plusexpr +| 27 = @minusexpr +| 28 = @notexpr +| 29 = @complementexpr +| 30 = @derefexpr +| 31 = @addressexpr +| 32 = @arrowexpr +| 33 = @lorexpr +| 34 = @landexpr +| 35 = @eqlexpr +| 36 = @neqexpr +| 37 = @lssexpr +| 38 = @leqexpr +| 39 = @gtrexpr +| 40 = @geqexpr +| 41 = @addexpr +| 42 = @subexpr +| 43 = @orexpr +| 44 = @xorexpr +| 45 = @mulexpr +| 46 = @quoexpr +| 47 = @remexpr +| 48 = @shlexpr +| 49 = @shrexpr +| 50 = @andexpr +| 51 = @andnotexpr +| 52 = @sendchantypeexpr +| 53 = @recvchantypeexpr +| 54 = @sendrcvchantypeexpr; + +@basiclit = @intlit | @floatlit | @imaglit | @charlit | @stringlit; + +@operatorexpr = @logicalexpr | @arithmeticexpr | @bitwiseexpr | @unaryexpr | @binaryexpr; + +@logicalexpr = @logicalunaryexpr | @logicalbinaryexpr; + +@arithmeticexpr = @arithmeticunaryexpr | @arithmeticbinaryexpr; + +@bitwiseexpr = @bitwiseunaryexpr | @bitwisebinaryexpr; + +@unaryexpr = @logicalunaryexpr | @bitwiseunaryexpr | @arithmeticunaryexpr | @derefexpr | @addressexpr | @arrowexpr; + +@logicalunaryexpr = @notexpr; + +@bitwiseunaryexpr = @complementexpr; + +@arithmeticunaryexpr = @plusexpr | @minusexpr; + +@binaryexpr = @logicalbinaryexpr | @bitwisebinaryexpr | @arithmeticbinaryexpr | @comparison; + +@logicalbinaryexpr = @lorexpr | @landexpr; + +@bitwisebinaryexpr = @shiftexpr | @orexpr | @xorexpr | @andexpr | @andnotexpr; + +@arithmeticbinaryexpr = @addexpr | @subexpr | @mulexpr | @quoexpr | @remexpr; + +@shiftexpr = @shlexpr | @shrexpr; + +@comparison = @equalitytest | @relationalcomparison; + +@equalitytest = @eqlexpr | @neqexpr; + +@relationalcomparison = @lssexpr | @leqexpr | @gtrexpr | @geqexpr; + +@chantypeexpr = @sendchantypeexpr | @recvchantypeexpr | @sendrcvchantypeexpr; + +case @stmt.kind of + 0 = @badstmt +| 1 = @declstmt +| 2 = @emptystmt +| 3 = @labeledstmt +| 4 = @exprstmt +| 5 = @sendstmt +| 6 = @incstmt +| 7 = @decstmt +| 8 = @gostmt +| 9 = @deferstmt +| 10 = @returnstmt +| 11 = @breakstmt +| 12 = @continuestmt +| 13 = @gotostmt +| 14 = @fallthroughstmt +| 15 = @blockstmt +| 16 = @ifstmt +| 17 = @caseclause +| 18 = @exprswitchstmt +| 19 = @typeswitchstmt +| 20 = @commclause +| 21 = @selectstmt +| 22 = @forstmt +| 23 = @rangestmt +| 24 = @assignstmt +| 25 = @definestmt +| 26 = @addassignstmt +| 27 = @subassignstmt +| 28 = @mulassignstmt +| 29 = @quoassignstmt +| 30 = @remassignstmt +| 31 = @andassignstmt +| 32 = @orassignstmt +| 33 = @xorassignstmt +| 34 = @shlassignstmt +| 35 = @shrassignstmt +| 36 = @andnotassignstmt; + +@incdecstmt = @incstmt | @decstmt; + +@assignment = @simpleassignstmt | @compoundassignstmt; + +@simpleassignstmt = @assignstmt | @definestmt; + +@compoundassignstmt = @addassignstmt | @subassignstmt | @mulassignstmt | @quoassignstmt | @remassignstmt + | @andassignstmt | @orassignstmt | @xorassignstmt | @shlassignstmt | @shrassignstmt | @andnotassignstmt; + +@branchstmt = @breakstmt | @continuestmt | @gotostmt | @fallthroughstmt; + +@switchstmt = @exprswitchstmt | @typeswitchstmt; + +@loopstmt = @forstmt | @rangestmt; + +case @decl.kind of + 0 = @baddecl +| 1 = @importdecl +| 2 = @constdecl +| 3 = @typedecl +| 4 = @vardecl +| 5 = @funcdecl; + +@gendecl = @importdecl | @constdecl | @typedecl | @vardecl; + +case @spec.kind of + 0 = @importspec +| 1 = @valuespec +| 2 = @typedefspec +| 3 = @aliasspec; + +@typespec = @typedefspec | @aliasspec; + +case @object.kind of + 0 = @pkgobject +| 1 = @decltypeobject +| 2 = @builtintypeobject +| 3 = @declconstobject +| 4 = @builtinconstobject +| 5 = @declvarobject +| 6 = @declfunctionobject +| 7 = @builtinfunctionobject +| 8 = @labelobject; + +@typeparamparentobject = @decltypeobject | @declfunctionobject; + +@declobject = @decltypeobject | @declconstobject | @declvarobject | @declfunctionobject; + +@builtinobject = @builtintypeobject | @builtinconstobject | @builtinfunctionobject; + +@typeobject = @decltypeobject | @builtintypeobject; + +@valueobject = @constobject | @varobject | @functionobject; + +@constobject = @declconstobject | @builtinconstobject; + +@varobject = @declvarobject; + +@functionobject = @declfunctionobject | @builtinfunctionobject; + +case @scope.kind of + 0 = @universescope +| 1 = @packagescope +| 2 = @localscope; + +case @type.kind of + 0 = @invalidtype +| 1 = @boolexprtype +| 2 = @inttype +| 3 = @int8type +| 4 = @int16type +| 5 = @int32type +| 6 = @int64type +| 7 = @uinttype +| 8 = @uint8type +| 9 = @uint16type +| 10 = @uint32type +| 11 = @uint64type +| 12 = @uintptrtype +| 13 = @float32type +| 14 = @float64type +| 15 = @complex64type +| 16 = @complex128type +| 17 = @stringexprtype +| 18 = @unsafepointertype +| 19 = @boolliteraltype +| 20 = @intliteraltype +| 21 = @runeliteraltype +| 22 = @floatliteraltype +| 23 = @complexliteraltype +| 24 = @stringliteraltype +| 25 = @nilliteraltype +| 26 = @typeparamtype +| 27 = @arraytype +| 28 = @slicetype +| 29 = @structtype +| 30 = @pointertype +| 31 = @interfacetype +| 32 = @tupletype +| 33 = @signaturetype +| 34 = @maptype +| 35 = @sendchantype +| 36 = @recvchantype +| 37 = @sendrcvchantype +| 38 = @namedtype +| 39 = @typesetliteraltype; + +@basictype = @booltype | @numerictype | @stringtype | @literaltype | @invalidtype | @unsafepointertype; + +@booltype = @boolexprtype | @boolliteraltype; + +@numerictype = @integertype | @floattype | @complextype; + +@integertype = @signedintegertype | @unsignedintegertype; + +@signedintegertype = @inttype | @int8type | @int16type | @int32type | @int64type | @intliteraltype | @runeliteraltype; + +@unsignedintegertype = @uinttype | @uint8type | @uint16type | @uint32type | @uint64type | @uintptrtype; + +@floattype = @float32type | @float64type | @floatliteraltype; + +@complextype = @complex64type | @complex128type | @complexliteraltype; + +@stringtype = @stringexprtype | @stringliteraltype; + +@literaltype = @boolliteraltype | @intliteraltype | @runeliteraltype | @floatliteraltype | @complexliteraltype + | @stringliteraltype | @nilliteraltype; + +@compositetype = @typeparamtype | @containertype | @structtype | @pointertype | @interfacetype | @tupletype + | @signaturetype | @namedtype | @typesetliteraltype; + +@containertype = @arraytype | @slicetype | @maptype | @chantype; + +@chantype = @sendchantype | @recvchantype | @sendrcvchantype; + +case @modexpr.kind of + 0 = @modcommentblock +| 1 = @modline +| 2 = @modlineblock +| 3 = @modlparen +| 4 = @modrparen; + +case @error.kind of + 0 = @unknownerror +| 1 = @listerror +| 2 = @parseerror +| 3 = @typeerror; + diff --git a/go/downgrades/4bd57e093275e5e892dfb16b55ed4bd76ea662be/old.dbscheme b/go/downgrades/4bd57e093275e5e892dfb16b55ed4bd76ea662be/old.dbscheme new file mode 100644 index 000000000000..4bd57e093275 --- /dev/null +++ b/go/downgrades/4bd57e093275e5e892dfb16b55ed4bd76ea662be/old.dbscheme @@ -0,0 +1,552 @@ +/** Auto-generated dbscheme; do not edit. Run `make gen` in directory `go/` to regenerate. */ + + +/** Duplicate code **/ + +duplicateCode( + unique int id : @duplication, + varchar(900) relativePath : string ref, + int equivClass : int ref); + +similarCode( + unique int id : @similarity, + varchar(900) relativePath : string ref, + int equivClass : int ref); + +@duplication_or_similarity = @duplication | @similarity; + +tokens( + int id : @duplication_or_similarity ref, + int offset : int ref, + int beginLine : int ref, + int beginColumn : int ref, + int endLine : int ref, + int endColumn : int ref); + +/** External data **/ + +externalData( + int id : @externalDataElement, + varchar(900) path : string ref, + int column: int ref, + varchar(900) value : string ref +); + +snapshotDate(unique date snapshotDate : date ref); + +sourceLocationPrefix(varchar(900) prefix : string 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; + +compilations(unique int id: @compilation, string cwd: string ref); + +#keyset[id, num] +compilation_args(int id: @compilation ref, int num: int ref, string arg: string ref); + +#keyset[id, num, kind] +compilation_time(int id: @compilation ref, int num: int ref, int kind: int ref, float secs: float ref); + +diagnostic_for(unique int diagnostic: @diagnostic ref, int compilation: @compilation ref, int file_number: int ref, int file_number_diagnostic_number: int ref); + +compilation_finished(unique int id: @compilation ref, float cpu_seconds: float ref, float elapsed_seconds: float ref); + +#keyset[id, num] +compilation_compiling_files(int id: @compilation ref, int num: int ref, int file: @file ref); + +diagnostics(unique int id: @diagnostic, int severity: int ref, string error_tag: string ref, string error_message: string ref, + string full_error_message: string ref, int location: @location ref); + +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); + +numlines(int element_id: @sourceline ref, int num_lines: int ref, int num_code: int ref, int num_comment: int ref); + +files(unique int id: @file, string name: string ref); + +folders(unique int id: @folder, string name: string ref); + +containerparent(int parent: @container ref, unique int child: @container ref); + +has_location(unique int locatable: @locatable ref, int location: @location ref); + +#keyset[parent, idx] +comment_groups(unique int id: @comment_group, int parent: @file ref, int idx: int ref); + +comments(unique int id: @comment, int kind: int ref, int parent: @comment_group ref, int idx: int ref, string text: string ref); + +doc_comments(unique int node: @documentable ref, int comment: @comment_group ref); + +#keyset[parent, idx] +exprs(unique int id: @expr, int kind: int ref, int parent: @exprparent ref, int idx: int ref); + +literals(unique int expr: @expr ref, string value: string ref, string raw: string ref); + +constvalues(unique int expr: @expr ref, string value: string ref, string exact: string ref); + +fields(unique int id: @field, int parent: @fieldparent ref, int idx: int ref); + +typeparamdecls(unique int id: @typeparamdecl, int parent: @typeparamdeclparent ref, int idx: int ref); + +#keyset[parent, idx] +stmts(unique int id: @stmt, int kind: int ref, int parent: @stmtparent ref, int idx: int ref); + +#keyset[parent, idx] +decls(unique int id: @decl, int kind: int ref, int parent: @declparent ref, int idx: int ref); + +#keyset[parent, idx] +specs(unique int id: @spec, int kind: int ref, int parent: @gendecl ref, int idx: int ref); + +scopes(unique int id: @scope, int kind: int ref); + +scopenesting(unique int inner: @scope ref, int outer: @scope ref); + +scopenodes(unique int node: @scopenode ref, int scope: @localscope ref); + +objects(unique int id: @object, int kind: int ref, string name: string ref); + +objectscopes(unique int object: @object ref, int scope: @scope ref); + +objecttypes(unique int object: @object ref, int tp: @type ref); + +methodreceivers(unique int method: @object ref, int receiver: @object ref); + +fieldstructs(unique int field: @object ref, int struct: @structtype ref); + +methodhosts(int method: @object ref, int host: @namedtype ref); + +defs(int ident: @ident ref, int object: @object ref); + +uses(int ident: @ident ref, int object: @object ref); + +types(unique int id: @type, int kind: int ref); + +type_of(unique int expr: @expr ref, int tp: @type ref); + +typename(unique int tp: @type ref, string name: string ref); + +key_type(unique int map: @maptype ref, int tp: @type ref); + +element_type(unique int container: @containertype ref, int tp: @type ref); + +base_type(unique int ptr: @pointertype ref, int tp: @type ref); + +underlying_type(unique int named: @namedtype ref, int tp: @type ref); + +#keyset[parent, index] +component_types(int parent: @compositetype ref, int index: int ref, string name: string ref, int tp: @type ref); + +#keyset[parent, index] +struct_tags(int parent: @structtype ref, int index: int ref, string tag: string ref); + +#keyset[interface, index] +interface_private_method_ids(int interface: @interfacetype ref, int index: int ref, string id: string ref); + +array_length(unique int tp: @arraytype ref, string len: string ref); + +type_objects(unique int tp: @type ref, int object: @object ref); + +packages(unique int id: @package, string name: string ref, string path: string ref, int scope: @packagescope ref); + +#keyset[parent, idx] +modexprs(unique int id: @modexpr, int kind: int ref, int parent: @modexprparent ref, int idx: int ref); + +#keyset[parent, idx] +modtokens(string token: string ref, int parent: @modexpr ref, int idx: int ref); + +#keyset[package, idx] +errors(unique int id: @error, int kind: int ref, string msg: string ref, string rawpos: string ref, + string file: string ref, int line: int ref, int col: int ref, int package: @package ref, int idx: int ref); + +has_ellipsis(int id: @callorconversionexpr ref); + +variadic(int id: @signaturetype ref); + +#keyset[parent, idx] +typeparam(unique int tp: @typeparamtype ref, string name: string ref, int bound: @compositetype ref, + int parent: @typeparamparentobject ref, int idx: int ref); + +@container = @file | @folder; + +@locatable = @xmllocatable | @node | @localscope; + +@node = @documentable | @exprparent | @modexprparent | @fieldparent | @stmtparent | @declparent | @typeparamdeclparent + | @scopenode | @comment_group | @comment; + +@documentable = @file | @field | @typeparamdecl | @spec | @gendecl | @funcdecl | @modexpr; + +@exprparent = @funcdef | @file | @expr | @field | @stmt | @decl | @typeparamdecl | @spec; + +@modexprparent = @file | @modexpr; + +@fieldparent = @decl | @structtypeexpr | @functypeexpr | @interfacetypeexpr; + +@stmtparent = @funcdef | @stmt | @decl; + +@declparent = @file | @declstmt; + +@typeparamdeclparent = @funcdecl | @typespec; + +@funcdef = @funclit | @funcdecl; + +@scopenode = @file | @functypeexpr | @blockstmt | @ifstmt | @caseclause | @switchstmt | @commclause | @loopstmt; + +@location = @location_default; + +@sourceline = @locatable; + +case @comment.kind of + 0 = @slashslashcomment +| 1 = @slashstarcomment; + +case @expr.kind of + 0 = @badexpr +| 1 = @ident +| 2 = @ellipsis +| 3 = @intlit +| 4 = @floatlit +| 5 = @imaglit +| 6 = @charlit +| 7 = @stringlit +| 8 = @funclit +| 9 = @compositelit +| 10 = @parenexpr +| 11 = @selectorexpr +| 12 = @indexexpr +| 13 = @genericfunctioninstantiationexpr +| 14 = @generictypeinstantiationexpr +| 15 = @sliceexpr +| 16 = @typeassertexpr +| 17 = @callorconversionexpr +| 18 = @starexpr +| 19 = @keyvalueexpr +| 20 = @arraytypeexpr +| 21 = @structtypeexpr +| 22 = @functypeexpr +| 23 = @interfacetypeexpr +| 24 = @maptypeexpr +| 25 = @typesetliteralexpr +| 26 = @plusexpr +| 27 = @minusexpr +| 28 = @notexpr +| 29 = @complementexpr +| 30 = @derefexpr +| 31 = @addressexpr +| 32 = @arrowexpr +| 33 = @lorexpr +| 34 = @landexpr +| 35 = @eqlexpr +| 36 = @neqexpr +| 37 = @lssexpr +| 38 = @leqexpr +| 39 = @gtrexpr +| 40 = @geqexpr +| 41 = @addexpr +| 42 = @subexpr +| 43 = @orexpr +| 44 = @xorexpr +| 45 = @mulexpr +| 46 = @quoexpr +| 47 = @remexpr +| 48 = @shlexpr +| 49 = @shrexpr +| 50 = @andexpr +| 51 = @andnotexpr +| 52 = @sendchantypeexpr +| 53 = @recvchantypeexpr +| 54 = @sendrcvchantypeexpr; + +@basiclit = @intlit | @floatlit | @imaglit | @charlit | @stringlit; + +@operatorexpr = @logicalexpr | @arithmeticexpr | @bitwiseexpr | @unaryexpr | @binaryexpr; + +@logicalexpr = @logicalunaryexpr | @logicalbinaryexpr; + +@arithmeticexpr = @arithmeticunaryexpr | @arithmeticbinaryexpr; + +@bitwiseexpr = @bitwiseunaryexpr | @bitwisebinaryexpr; + +@unaryexpr = @logicalunaryexpr | @bitwiseunaryexpr | @arithmeticunaryexpr | @derefexpr | @addressexpr | @arrowexpr; + +@logicalunaryexpr = @notexpr; + +@bitwiseunaryexpr = @complementexpr; + +@arithmeticunaryexpr = @plusexpr | @minusexpr; + +@binaryexpr = @logicalbinaryexpr | @bitwisebinaryexpr | @arithmeticbinaryexpr | @comparison; + +@logicalbinaryexpr = @lorexpr | @landexpr; + +@bitwisebinaryexpr = @shiftexpr | @orexpr | @xorexpr | @andexpr | @andnotexpr; + +@arithmeticbinaryexpr = @addexpr | @subexpr | @mulexpr | @quoexpr | @remexpr; + +@shiftexpr = @shlexpr | @shrexpr; + +@comparison = @equalitytest | @relationalcomparison; + +@equalitytest = @eqlexpr | @neqexpr; + +@relationalcomparison = @lssexpr | @leqexpr | @gtrexpr | @geqexpr; + +@chantypeexpr = @sendchantypeexpr | @recvchantypeexpr | @sendrcvchantypeexpr; + +case @stmt.kind of + 0 = @badstmt +| 1 = @declstmt +| 2 = @emptystmt +| 3 = @labeledstmt +| 4 = @exprstmt +| 5 = @sendstmt +| 6 = @incstmt +| 7 = @decstmt +| 8 = @gostmt +| 9 = @deferstmt +| 10 = @returnstmt +| 11 = @breakstmt +| 12 = @continuestmt +| 13 = @gotostmt +| 14 = @fallthroughstmt +| 15 = @blockstmt +| 16 = @ifstmt +| 17 = @caseclause +| 18 = @exprswitchstmt +| 19 = @typeswitchstmt +| 20 = @commclause +| 21 = @selectstmt +| 22 = @forstmt +| 23 = @rangestmt +| 24 = @assignstmt +| 25 = @definestmt +| 26 = @addassignstmt +| 27 = @subassignstmt +| 28 = @mulassignstmt +| 29 = @quoassignstmt +| 30 = @remassignstmt +| 31 = @andassignstmt +| 32 = @orassignstmt +| 33 = @xorassignstmt +| 34 = @shlassignstmt +| 35 = @shrassignstmt +| 36 = @andnotassignstmt; + +@incdecstmt = @incstmt | @decstmt; + +@assignment = @simpleassignstmt | @compoundassignstmt; + +@simpleassignstmt = @assignstmt | @definestmt; + +@compoundassignstmt = @addassignstmt | @subassignstmt | @mulassignstmt | @quoassignstmt | @remassignstmt + | @andassignstmt | @orassignstmt | @xorassignstmt | @shlassignstmt | @shrassignstmt | @andnotassignstmt; + +@branchstmt = @breakstmt | @continuestmt | @gotostmt | @fallthroughstmt; + +@switchstmt = @exprswitchstmt | @typeswitchstmt; + +@loopstmt = @forstmt | @rangestmt; + +case @decl.kind of + 0 = @baddecl +| 1 = @importdecl +| 2 = @constdecl +| 3 = @typedecl +| 4 = @vardecl +| 5 = @funcdecl; + +@gendecl = @importdecl | @constdecl | @typedecl | @vardecl; + +case @spec.kind of + 0 = @importspec +| 1 = @valuespec +| 2 = @typedefspec +| 3 = @aliasspec; + +@typespec = @typedefspec | @aliasspec; + +case @object.kind of + 0 = @pkgobject +| 1 = @decltypeobject +| 2 = @builtintypeobject +| 3 = @declconstobject +| 4 = @builtinconstobject +| 5 = @declvarobject +| 6 = @declfunctionobject +| 7 = @builtinfunctionobject +| 8 = @labelobject; + +@typeparamparentobject = @decltypeobject | @declfunctionobject; + +@declobject = @decltypeobject | @declconstobject | @declvarobject | @declfunctionobject; + +@builtinobject = @builtintypeobject | @builtinconstobject | @builtinfunctionobject; + +@typeobject = @decltypeobject | @builtintypeobject; + +@valueobject = @constobject | @varobject | @functionobject; + +@constobject = @declconstobject | @builtinconstobject; + +@varobject = @declvarobject; + +@functionobject = @declfunctionobject | @builtinfunctionobject; + +case @scope.kind of + 0 = @universescope +| 1 = @packagescope +| 2 = @localscope; + +case @type.kind of + 0 = @invalidtype +| 1 = @boolexprtype +| 2 = @inttype +| 3 = @int8type +| 4 = @int16type +| 5 = @int32type +| 6 = @int64type +| 7 = @uinttype +| 8 = @uint8type +| 9 = @uint16type +| 10 = @uint32type +| 11 = @uint64type +| 12 = @uintptrtype +| 13 = @float32type +| 14 = @float64type +| 15 = @complex64type +| 16 = @complex128type +| 17 = @stringexprtype +| 18 = @unsafepointertype +| 19 = @boolliteraltype +| 20 = @intliteraltype +| 21 = @runeliteraltype +| 22 = @floatliteraltype +| 23 = @complexliteraltype +| 24 = @stringliteraltype +| 25 = @nilliteraltype +| 26 = @typeparamtype +| 27 = @arraytype +| 28 = @slicetype +| 29 = @structtype +| 30 = @pointertype +| 31 = @interfacetype +| 32 = @tupletype +| 33 = @signaturetype +| 34 = @maptype +| 35 = @sendchantype +| 36 = @recvchantype +| 37 = @sendrcvchantype +| 38 = @namedtype +| 39 = @typesetliteraltype; + +@basictype = @booltype | @numerictype | @stringtype | @literaltype | @invalidtype | @unsafepointertype; + +@booltype = @boolexprtype | @boolliteraltype; + +@numerictype = @integertype | @floattype | @complextype; + +@integertype = @signedintegertype | @unsignedintegertype; + +@signedintegertype = @inttype | @int8type | @int16type | @int32type | @int64type | @intliteraltype | @runeliteraltype; + +@unsignedintegertype = @uinttype | @uint8type | @uint16type | @uint32type | @uint64type | @uintptrtype; + +@floattype = @float32type | @float64type | @floatliteraltype; + +@complextype = @complex64type | @complex128type | @complexliteraltype; + +@stringtype = @stringexprtype | @stringliteraltype; + +@literaltype = @boolliteraltype | @intliteraltype | @runeliteraltype | @floatliteraltype | @complexliteraltype + | @stringliteraltype | @nilliteraltype; + +@compositetype = @typeparamtype | @containertype | @structtype | @pointertype | @interfacetype | @tupletype + | @signaturetype | @namedtype | @typesetliteraltype; + +@containertype = @arraytype | @slicetype | @maptype | @chantype; + +@chantype = @sendchantype | @recvchantype | @sendrcvchantype; + +case @modexpr.kind of + 0 = @modcommentblock +| 1 = @modline +| 2 = @modlineblock +| 3 = @modlparen +| 4 = @modrparen; + +case @error.kind of + 0 = @unknownerror +| 1 = @listerror +| 2 = @parseerror +| 3 = @typeerror; + diff --git a/go/downgrades/4bd57e093275e5e892dfb16b55ed4bd76ea662be/upgrade.properties b/go/downgrades/4bd57e093275e5e892dfb16b55ed4bd76ea662be/upgrade.properties new file mode 100644 index 000000000000..0cda1e3644f8 --- /dev/null +++ b/go/downgrades/4bd57e093275e5e892dfb16b55ed4bd76ea662be/upgrade.properties @@ -0,0 +1,5 @@ +description: Remove component-tags and interface-method-id tables +compatibility: full + +struct_tags.rel: delete +interface_private_method_ids.rel: delete diff --git a/go/extractor/configurebaseline/configurebaseline.go b/go/extractor/configurebaseline/configurebaseline.go index f8e2c998f8c1..04037d61425e 100644 --- a/go/extractor/configurebaseline/configurebaseline.go +++ b/go/extractor/configurebaseline/configurebaseline.go @@ -28,7 +28,8 @@ type BaselineConfig struct { func GetConfigBaselineAsJSON(rootDir string) ([]byte, error) { vendorDirs := make([]string, 0) - if util.IsVendorDirExtractionEnabled() { + extractVendorDirs, _ := util.IsVendorDirExtractionEnabled() + if extractVendorDirs { // The user wants vendor directories scanned; emit an empty report. } else { filepath.WalkDir(rootDir, func(dirPath string, d fs.DirEntry, err error) error { diff --git a/go/extractor/dbscheme/dbscheme.go b/go/extractor/dbscheme/dbscheme.go index 923fda859dba..550c7920c711 100644 --- a/go/extractor/dbscheme/dbscheme.go +++ b/go/extractor/dbscheme/dbscheme.go @@ -410,7 +410,7 @@ func AddDefaultSnippet(snippet string) bool { // PrintDbScheme prints the schema of this database to the writer `w` func PrintDbScheme(w io.Writer) { - fmt.Fprintf(w, "/** Auto-generated dbscheme; do not edit. */\n\n") + fmt.Fprintf(w, "/** Auto-generated dbscheme; do not edit. Run `make gen` in directory `go/` to regenerate. */\n\n") for _, snippet := range defaultSnippets { fmt.Fprintf(w, "%s\n", snippet) } diff --git a/go/extractor/dbscheme/tables.go b/go/extractor/dbscheme/tables.go index e987cb402ae4..aa44c6248424 100644 --- a/go/extractor/dbscheme/tables.go +++ b/go/extractor/dbscheme/tables.go @@ -1150,6 +1150,20 @@ var ComponentTypesTable = NewTable("component_types", EntityColumn(TypeType, "tp"), ).KeySet("parent", "index") +// StructTagsTable is the table associating struct types with their component types' tags +var StructTagsTable = NewTable("struct_tags", + EntityColumn(StructType, "parent"), + IntColumn("index"), + StringColumn("tag"), +).KeySet("parent", "index") + +// InterfacePrivateMethodIdsTable is the table associating interface types with the indices and ids of their private methods. +var InterfacePrivateMethodIdsTable = NewTable("interface_private_method_ids", + EntityColumn(InterfaceType, "interface"), + IntColumn("index"), + StringColumn("id"), +).KeySet("interface", "index") + // ArrayLengthTable is the table associating array types with their length (represented as a string // since Go array lengths are 64-bit and hence do not always fit into a QL integer) var ArrayLengthTable = NewTable("array_length", diff --git a/go/extractor/extractor.go b/go/extractor/extractor.go index f372cc161805..c157f7c8f672 100644 --- a/go/extractor/extractor.go +++ b/go/extractor/extractor.go @@ -81,11 +81,27 @@ func ExtractWithFlags(buildFlags []string, patterns []string, extractTests bool) } } - testMessage := "" + // If CODEQL_EXTRACTOR_GO_[OPTION_]EXTRACT_VENDOR_DIRS is "true", we extract `vendor` directories; + // otherwise (the default) is to exclude them from extraction + includeVendor, oldOptionUsed := util.IsVendorDirExtractionEnabled() + + if oldOptionUsed { + log.Println("Warning: obsolete option \"CODEQL_EXTRACTOR_GO_EXTRACT_VENDOR_DIRS\" was set. Use \"CODEQL_EXTRACTOR_GO_OPTION_EXTRACT_VENDOR_DIRS\" or pass `--extractor-option extract_vendor_dirs=true` instead.") + } + + modeNotifications := make([]string, 0, 2) if extractTests { - testMessage = " (test extraction enabled)" + modeNotifications = append(modeNotifications, "test extraction enabled") + } + if includeVendor { + modeNotifications = append(modeNotifications, "extracting vendor directories") } - log.Printf("Running packages.Load%s.", testMessage) + + modeMessage := strings.Join(modeNotifications, ", ") + if modeMessage != "" { + modeMessage = " (" + modeMessage + ")" + } + log.Printf("Running packages.Load%s.", modeMessage) // This includes test packages if either we're tracing a `go test` command, // or if CODEQL_EXTRACTOR_GO_OPTION_EXTRACT_TESTS is set to "true". @@ -233,9 +249,6 @@ func ExtractWithFlags(buildFlags []string, patterns []string, extractTests bool) // Construct a list of directory segments to exclude from extraction, starting with ".." excludedDirs := []string{`\.\.`} - // If CODEQL_EXTRACTOR_GO_EXTRACT_VENDOR_DIRS is "true", we extract `vendor` directories; - // otherwise (the default) is to exclude them from extraction - includeVendor := util.IsVendorDirExtractionEnabled() if !includeVendor { excludedDirs = append(excludedDirs, "vendor") } @@ -1611,6 +1624,9 @@ func extractType(tw *trap.Writer, tp types.Type) trap.Label { name = "" } extractComponentType(tw, lbl, i, name, field.Type()) + if tp.Tag(i) != "" { + dbscheme.StructTagsTable.Emit(tw, lbl, i, tp.Tag(i)) + } } case *types.Pointer: kind = dbscheme.PointerType.Index() @@ -1628,6 +1644,10 @@ func extractType(tw *trap.Writer, tp types.Type) trap.Label { extractMethod(tw, meth) extractComponentType(tw, lbl, i, meth.Name(), meth.Type()) + + if !meth.Exported() { + dbscheme.InterfacePrivateMethodIdsTable.Emit(tw, lbl, i, meth.Id()) + } } for i := 0; i < tp.NumEmbeddeds(); i++ { component := tp.EmbeddedType(i) diff --git a/go/extractor/go.mod b/go/extractor/go.mod index 691996e75f1e..a0dfec15866f 100644 --- a/go/extractor/go.mod +++ b/go/extractor/go.mod @@ -10,7 +10,7 @@ toolchain go1.23.1 // bazel mod tidy require ( golang.org/x/mod v0.21.0 - golang.org/x/tools v0.25.0 + golang.org/x/tools v0.26.0 ) require golang.org/x/sync v0.8.0 // indirect diff --git a/go/extractor/go.sum b/go/extractor/go.sum index ed8839215f25..1bf208ccc72c 100644 --- a/go/extractor/go.sum +++ b/go/extractor/go.sum @@ -2,5 +2,5 @@ golang.org/x/mod v0.21.0 h1:vvrHzRwRfVKSiLrG+d4FMl/Qi4ukBCE6kZlTUkDYRT0= golang.org/x/mod v0.21.0/go.mod h1:6SkKJ3Xj0I0BrPOZoBy3bdMptDDU9oJrpohJ3eWZ1fY= golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ= golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= -golang.org/x/tools v0.25.0 h1:oFU9pkj/iJgs+0DT+VMHrx+oBKs/LJMV+Uvg78sl+fE= -golang.org/x/tools v0.25.0/go.mod h1:/vtpO8WL1N9cQC3FN5zPqb//fRXskFHbLKk4OW1Q7rg= +golang.org/x/tools v0.26.0 h1:v/60pFQmzmT9ExmjDv2gGIfi3OqfKoEP6I5+umXlbnQ= +golang.org/x/tools v0.26.0/go.mod h1:TPVVj70c7JJ3WCazhD8OdXcZg/og+b9+tH/KxylGwH0= diff --git a/go/extractor/util/extractvendordirs.go b/go/extractor/util/extractvendordirs.go index 778d5120cf20..adeb2461f892 100644 --- a/go/extractor/util/extractvendordirs.go +++ b/go/extractor/util/extractvendordirs.go @@ -4,6 +4,8 @@ import ( "os" ) -func IsVendorDirExtractionEnabled() bool { - return os.Getenv("CODEQL_EXTRACTOR_GO_EXTRACT_VENDOR_DIRS") == "true" +func IsVendorDirExtractionEnabled() (bool, bool) { + oldOptionVal := os.Getenv("CODEQL_EXTRACTOR_GO_EXTRACT_VENDOR_DIRS") + return (oldOptionVal == "true" || + os.Getenv("CODEQL_EXTRACTOR_GO_OPTION_EXTRACT_VENDOR_DIRS") == "true"), oldOptionVal != "" } diff --git a/go/ql/consistency-queries/CHANGELOG.md b/go/ql/consistency-queries/CHANGELOG.md index 9589b67148fa..b62e06e3dff0 100644 --- a/go/ql/consistency-queries/CHANGELOG.md +++ b/go/ql/consistency-queries/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.10 + +No user-facing changes. + ## 1.0.9 No user-facing changes. diff --git a/go/ql/consistency-queries/change-notes/released/1.0.10.md b/go/ql/consistency-queries/change-notes/released/1.0.10.md new file mode 100644 index 000000000000..b601d8784532 --- /dev/null +++ b/go/ql/consistency-queries/change-notes/released/1.0.10.md @@ -0,0 +1,3 @@ +## 1.0.10 + +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 fb813c5ee050..3865dbcf4b2a 100644 --- a/go/ql/consistency-queries/codeql-pack.release.yml +++ b/go/ql/consistency-queries/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.9 +lastReleaseVersion: 1.0.10 diff --git a/go/ql/consistency-queries/qlpack.yml b/go/ql/consistency-queries/qlpack.yml index 9800f5090fac..726aa918f891 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: 1.0.9 +version: 1.0.10 groups: - go - queries diff --git a/go/ql/integration-tests/extract-vendor/test.py b/go/ql/integration-tests/extract-vendor/test.py index 04dfd61c38f3..ff28cc6fe9a3 100644 --- a/go/ql/integration-tests/extract-vendor/test.py +++ b/go/ql/integration-tests/extract-vendor/test.py @@ -4,3 +4,6 @@ def test(codeql, go): os.environ["CODEQL_EXTRACTOR_GO_EXTRACT_VENDOR_DIRS"] = "true" codeql.database.create(source_root="src") + +def test_extractor_option(codeql, go): + codeql.database.create(source_root="src", extractor_option = "extract_vendor_dirs=true") diff --git a/go/ql/integration-tests/test-extraction-autobuild/test.expected b/go/ql/integration-tests/test-extraction-autobuild/test.expected deleted file mode 100644 index 9e1585fc5ef8..000000000000 --- a/go/ql/integration-tests/test-extraction-autobuild/test.expected +++ /dev/null @@ -1,9 +0,0 @@ -#select -| src/testme.go:0:0:0:0 | src/testme.go | -| src/testme_blackbox_test.go:0:0:0:0 | src/testme_blackbox_test.go | -| src/testme_test.go:0:0:0:0 | src/testme_test.go | -calls -| src/testme_blackbox_test.go:10:18:10:44 | call to PublicFunction | src/testme.go:3:1:3:38 | function declaration | -| src/testme_test.go:9:18:9:33 | call to PublicFunction | src/testme.go:3:1:3:38 | function declaration | -| src/testme_test.go:14:19:14:35 | call to privateFunction | src/testme.go:5:1:5:39 | function declaration | -extractionErrors diff --git a/go/ql/integration-tests/test-extraction-autobuild/test.py b/go/ql/integration-tests/test-extraction-autobuild/test.py deleted file mode 100644 index 0dc91b5212c5..000000000000 --- a/go/ql/integration-tests/test-extraction-autobuild/test.py +++ /dev/null @@ -1,4 +0,0 @@ -import os - -def test(codeql, go): - codeql.database.create(source_root="src", extractor_option = ["extract_tests=true"]) diff --git a/go/ql/integration-tests/test-extraction-traced/src/Makefile b/go/ql/integration-tests/test-extraction-traced/src/Makefile deleted file mode 100644 index 266e02877884..000000000000 --- a/go/ql/integration-tests/test-extraction-traced/src/Makefile +++ /dev/null @@ -1,2 +0,0 @@ -all: - go get diff --git a/go/ql/integration-tests/test-extraction-traced/src/go.mod b/go/ql/integration-tests/test-extraction-traced/src/go.mod deleted file mode 100644 index c4a9f55df6c1..000000000000 --- a/go/ql/integration-tests/test-extraction-traced/src/go.mod +++ /dev/null @@ -1,3 +0,0 @@ -go 1.14 - -module testsample diff --git a/go/ql/integration-tests/test-extraction-traced/src/go.sum b/go/ql/integration-tests/test-extraction-traced/src/go.sum deleted file mode 100644 index a8e1b59ae4b1..000000000000 --- a/go/ql/integration-tests/test-extraction-traced/src/go.sum +++ /dev/null @@ -1,45 +0,0 @@ -github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU= -golang.org/x/crypto v0.21.0/go.mod h1:0BP7YvVV9gBbVKyeTG0Gyn+gZm94bibOW5BjDEYAOMs= -golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= -golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= -golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= -golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44= -golang.org/x/net v0.23.0 h1:7EYJ93RZ9vYSZAIb2x3lnuvqO5zneoD6IvWjuhfxjTs= -golang.org/x/net v0.23.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg= -golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.18.0 h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4= -golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= -golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= -golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk= -golang.org/x/term v0.18.0/go.mod h1:ILwASektA3OnRv7amZ1xhE/KTR+u50pbXfZ03+6Nx58= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= -golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= -golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= -golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= -golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= diff --git a/go/ql/integration-tests/test-extraction-traced/src/testme.go b/go/ql/integration-tests/test-extraction-traced/src/testme.go deleted file mode 100644 index e24138553ce9..000000000000 --- a/go/ql/integration-tests/test-extraction-traced/src/testme.go +++ /dev/null @@ -1,5 +0,0 @@ -package testsample - -func PublicFunction() int { return 1 } - -func privateFunction() int { return 2 } diff --git a/go/ql/integration-tests/test-extraction-traced/src/testme_blackbox_test.go b/go/ql/integration-tests/test-extraction-traced/src/testme_blackbox_test.go deleted file mode 100644 index 18a507b5aa38..000000000000 --- a/go/ql/integration-tests/test-extraction-traced/src/testme_blackbox_test.go +++ /dev/null @@ -1,15 +0,0 @@ -package testsample_test - -import ( - "testing" - "testsample" -) - -func TestTestMe(t *testing.T) { - - publicResult := testsample.PublicFunction() - if publicResult != 1 { - t.Errorf("Expected 1, got %d", publicResult) - } - -} diff --git a/go/ql/integration-tests/test-extraction-traced/src/testme_test.go b/go/ql/integration-tests/test-extraction-traced/src/testme_test.go deleted file mode 100644 index 183d7cd3dffe..000000000000 --- a/go/ql/integration-tests/test-extraction-traced/src/testme_test.go +++ /dev/null @@ -1,19 +0,0 @@ -package testsample - -import ( - "testing" -) - -func TestTestMe(t *testing.T) { - - publicResult := PublicFunction() - if publicResult != 1 { - t.Errorf("Expected 1, got %d", publicResult) - } - - privateResult := privateFunction() - if privateResult != 2 { - t.Errorf("Expected 2, got %d", privateResult) - } - -} diff --git a/go/ql/integration-tests/test-extraction-traced/test.py b/go/ql/integration-tests/test-extraction-traced/test.py deleted file mode 100644 index 2887d3fa0d09..000000000000 --- a/go/ql/integration-tests/test-extraction-traced/test.py +++ /dev/null @@ -1,4 +0,0 @@ -import os - -def test(codeql, go): - codeql.database.create(source_root="src", command="go test -c") diff --git a/go/ql/integration-tests/test-extraction-traced/test.ql b/go/ql/integration-tests/test-extraction-traced/test.ql deleted file mode 100644 index 15eae8959862..000000000000 --- a/go/ql/integration-tests/test-extraction-traced/test.ql +++ /dev/null @@ -1,9 +0,0 @@ -import go -import semmle.go.DiagnosticsReporting - -from GoFile f -select f - -query predicate calls(CallExpr ce, FuncDecl f) { f = ce.getTarget().getFuncDecl() } - -query predicate extractionErrors(string msg, int sev) { reportableDiagnostics(_, msg, sev) } diff --git a/go/ql/integration-tests/test-extraction-autobuild/src/Makefile b/go/ql/integration-tests/test-extraction/src/Makefile similarity index 100% rename from go/ql/integration-tests/test-extraction-autobuild/src/Makefile rename to go/ql/integration-tests/test-extraction/src/Makefile diff --git a/go/ql/integration-tests/test-extraction-autobuild/src/go.mod b/go/ql/integration-tests/test-extraction/src/go.mod similarity index 70% rename from go/ql/integration-tests/test-extraction-autobuild/src/go.mod rename to go/ql/integration-tests/test-extraction/src/go.mod index c4a9f55df6c1..dae010718cf0 100644 --- a/go/ql/integration-tests/test-extraction-autobuild/src/go.mod +++ b/go/ql/integration-tests/test-extraction/src/go.mod @@ -1,3 +1,3 @@ -go 1.14 +go 1.18 module testsample diff --git a/go/ql/integration-tests/test-extraction-autobuild/src/go.sum b/go/ql/integration-tests/test-extraction/src/go.sum similarity index 100% rename from go/ql/integration-tests/test-extraction-autobuild/src/go.sum rename to go/ql/integration-tests/test-extraction/src/go.sum diff --git a/go/ql/integration-tests/test-extraction/src/pkg1/def.go b/go/ql/integration-tests/test-extraction/src/pkg1/def.go new file mode 100644 index 000000000000..e768e81b89d4 --- /dev/null +++ b/go/ql/integration-tests/test-extraction/src/pkg1/def.go @@ -0,0 +1,7 @@ +package pkg1 + +type Generic[T any] struct { + element T +} + +func TestMe() {} diff --git a/go/ql/integration-tests/test-extraction/src/pkg1/def_blackbox_test.go b/go/ql/integration-tests/test-extraction/src/pkg1/def_blackbox_test.go new file mode 100644 index 000000000000..09c9474567a6 --- /dev/null +++ b/go/ql/integration-tests/test-extraction/src/pkg1/def_blackbox_test.go @@ -0,0 +1,9 @@ +package pkg1_test + +import ( + "testsample/pkg1" +) + +func UsePkg1() { + pkg1.TestMe() +} diff --git a/go/ql/integration-tests/test-extraction/src/pkg1/def_test.go b/go/ql/integration-tests/test-extraction/src/pkg1/def_test.go new file mode 100644 index 000000000000..f321ab577c90 --- /dev/null +++ b/go/ql/integration-tests/test-extraction/src/pkg1/def_test.go @@ -0,0 +1,5 @@ +package pkg1 + +func UsePkg1() { + TestMe() +} diff --git a/go/ql/integration-tests/test-extraction/src/pkg2/use.go b/go/ql/integration-tests/test-extraction/src/pkg2/use.go new file mode 100644 index 000000000000..8caabc3847e7 --- /dev/null +++ b/go/ql/integration-tests/test-extraction/src/pkg2/use.go @@ -0,0 +1,12 @@ +package pkg2 + +import ( + "testsample/pkg1" +) + +// This tests the case of cross-package generic type references +// in the presence of test extraction. We need to make sure we +// extract packages, including test variants, in the right order +// such that we've seen pkg1.Generic before we try to use it here. + +type Specialised = pkg1.Generic[string] diff --git a/go/ql/integration-tests/test-extraction-autobuild/src/testme.go b/go/ql/integration-tests/test-extraction/src/testme.go similarity index 100% rename from go/ql/integration-tests/test-extraction-autobuild/src/testme.go rename to go/ql/integration-tests/test-extraction/src/testme.go diff --git a/go/ql/integration-tests/test-extraction-autobuild/src/testme_blackbox_test.go b/go/ql/integration-tests/test-extraction/src/testme_blackbox_test.go similarity index 100% rename from go/ql/integration-tests/test-extraction-autobuild/src/testme_blackbox_test.go rename to go/ql/integration-tests/test-extraction/src/testme_blackbox_test.go diff --git a/go/ql/integration-tests/test-extraction-autobuild/src/testme_test.go b/go/ql/integration-tests/test-extraction/src/testme_test.go similarity index 100% rename from go/ql/integration-tests/test-extraction-autobuild/src/testme_test.go rename to go/ql/integration-tests/test-extraction/src/testme_test.go diff --git a/go/ql/integration-tests/test-extraction-traced/test.expected b/go/ql/integration-tests/test-extraction/test.expected similarity index 54% rename from go/ql/integration-tests/test-extraction-traced/test.expected rename to go/ql/integration-tests/test-extraction/test.expected index 9e1585fc5ef8..77983c448071 100644 --- a/go/ql/integration-tests/test-extraction-traced/test.expected +++ b/go/ql/integration-tests/test-extraction/test.expected @@ -1,8 +1,14 @@ #select +| src/pkg1/def.go:0:0:0:0 | src/pkg1/def.go | +| src/pkg1/def_blackbox_test.go:0:0:0:0 | src/pkg1/def_blackbox_test.go | +| src/pkg1/def_test.go:0:0:0:0 | src/pkg1/def_test.go | +| src/pkg2/use.go:0:0:0:0 | src/pkg2/use.go | | src/testme.go:0:0:0:0 | src/testme.go | | src/testme_blackbox_test.go:0:0:0:0 | src/testme_blackbox_test.go | | src/testme_test.go:0:0:0:0 | src/testme_test.go | calls +| src/pkg1/def_blackbox_test.go:8:2:8:14 | call to TestMe | src/pkg1/def.go:7:1:7:16 | function declaration | +| src/pkg1/def_test.go:4:2:4:9 | call to TestMe | src/pkg1/def.go:7:1:7:16 | function declaration | | src/testme_blackbox_test.go:10:18:10:44 | call to PublicFunction | src/testme.go:3:1:3:38 | function declaration | | src/testme_test.go:9:18:9:33 | call to PublicFunction | src/testme.go:3:1:3:38 | function declaration | | src/testme_test.go:14:19:14:35 | call to privateFunction | src/testme.go:5:1:5:39 | function declaration | diff --git a/go/ql/integration-tests/test-extraction/test.py b/go/ql/integration-tests/test-extraction/test.py new file mode 100644 index 000000000000..e25b46801146 --- /dev/null +++ b/go/ql/integration-tests/test-extraction/test.py @@ -0,0 +1,7 @@ +import os + +def test_traced(codeql, go): + codeql.database.create(source_root="src", command="go test -c ./...") + +def test_autobuild(codeql, go): + codeql.database.create(source_root="src", extractor_option = ["extract_tests=true"]) diff --git a/go/ql/integration-tests/test-extraction-autobuild/test.ql b/go/ql/integration-tests/test-extraction/test.ql similarity index 100% rename from go/ql/integration-tests/test-extraction-autobuild/test.ql rename to go/ql/integration-tests/test-extraction/test.ql diff --git a/go/ql/lib/CHANGELOG.md b/go/ql/lib/CHANGELOG.md index a9a8190e6acc..d3c6fcd4a611 100644 --- a/go/ql/lib/CHANGELOG.md +++ b/go/ql/lib/CHANGELOG.md @@ -1,3 +1,11 @@ +## 2.1.1 + +### Minor Analysis Improvements + +* Added member predicates `StructTag.hasOwnFieldWithTag` and `Field.getTag`, which enable CodeQL queries to examine struct field tags. +* Added member predicate `InterfaceType.hasPrivateMethodWithQualifiedName`, which enables CodeQL queries to distinguish interfaces with matching non-exported method names that are declared in different packages, and are therefore incompatible. +* Local source models with the `stdin` source kind have been added for the variable `os.Stdin` and the functions `fmt.Scan`, `fmt.Scanf` and `fmt.Scanln`. You can optionally include threat models as appropriate when using the CodeQL CLI and in GitHub code scanning. For more information, see [Analyzing your code with CodeQL queries](https://docs.github.com/code-security/codeql-cli/getting-started-with-the-codeql-cli/analyzing-your-code-with-codeql-queries#including-model-packs-to-add-potential-sources-of-tainted-data>) and [Customizing your advanced setup for code scanning](https://docs.github.com/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/customizing-your-advanced-setup-for-code-scanning#extending-codeql-coverage-with-threat-models). + ## 2.1.0 ### Deprecated APIs diff --git a/go/ql/lib/change-notes/released/2.1.1.md b/go/ql/lib/change-notes/released/2.1.1.md new file mode 100644 index 000000000000..7319120fd3cb --- /dev/null +++ b/go/ql/lib/change-notes/released/2.1.1.md @@ -0,0 +1,7 @@ +## 2.1.1 + +### Minor Analysis Improvements + +* Added member predicates `StructTag.hasOwnFieldWithTag` and `Field.getTag`, which enable CodeQL queries to examine struct field tags. +* Added member predicate `InterfaceType.hasPrivateMethodWithQualifiedName`, which enables CodeQL queries to distinguish interfaces with matching non-exported method names that are declared in different packages, and are therefore incompatible. +* Local source models with the `stdin` source kind have been added for the variable `os.Stdin` and the functions `fmt.Scan`, `fmt.Scanf` and `fmt.Scanln`. You can optionally include threat models as appropriate when using the CodeQL CLI and in GitHub code scanning. For more information, see [Analyzing your code with CodeQL queries](https://docs.github.com/code-security/codeql-cli/getting-started-with-the-codeql-cli/analyzing-your-code-with-codeql-queries#including-model-packs-to-add-potential-sources-of-tainted-data>) and [Customizing your advanced setup for code scanning](https://docs.github.com/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/customizing-your-advanced-setup-for-code-scanning#extending-codeql-coverage-with-threat-models). diff --git a/go/ql/lib/codeql-pack.release.yml b/go/ql/lib/codeql-pack.release.yml index 487a1a58b2b8..576c2ea18d68 100644 --- a/go/ql/lib/codeql-pack.release.yml +++ b/go/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 2.1.0 +lastReleaseVersion: 2.1.1 diff --git a/go/ql/lib/go.dbscheme b/go/ql/lib/go.dbscheme index a58b81b1b4c4..4bd57e093275 100644 --- a/go/ql/lib/go.dbscheme +++ b/go/ql/lib/go.dbscheme @@ -1,4 +1,4 @@ -/** Auto-generated dbscheme; do not edit. */ +/** Auto-generated dbscheme; do not edit. Run `make gen` in directory `go/` to regenerate. */ /** Duplicate code **/ @@ -207,6 +207,12 @@ underlying_type(unique int named: @namedtype ref, int tp: @type ref); #keyset[parent, index] component_types(int parent: @compositetype ref, int index: int ref, string name: string ref, int tp: @type ref); +#keyset[parent, index] +struct_tags(int parent: @structtype ref, int index: int ref, string tag: string ref); + +#keyset[interface, index] +interface_private_method_ids(int interface: @interfacetype ref, int index: int ref, string id: string ref); + array_length(unique int tp: @arraytype ref, string len: string ref); type_objects(unique int tp: @type ref, int object: @object ref); diff --git a/go/ql/lib/go.dbscheme.stats b/go/ql/lib/go.dbscheme.stats index b18e8556fb24..a602a143ee0c 100644 --- a/go/ql/lib/go.dbscheme.stats +++ b/go/ql/lib/go.dbscheme.stats @@ -1,11 +1,15 @@ - @similarity + @duplication 0 - @duplication + @externalDataElement + 0 + + + @similarity 0 @@ -14,15 +18,11 @@ @xmlelement - 504 + 8655540 @xmlattribute - 408 - - - @externalDataElement - 0 + 3762921 @xmlnamespace @@ -30,667 +30,695 @@ @xmlcomment - 30 + 131455 @xmlcharacters - 869 + 13383839 @compilation - 1 + 31407 @diagnostic - 0 + 233782 @file - 529 + 146783 @folder - 210 + 98591 @comment_group - 12083 + 2493839 @slashslashcomment - 24878 + 2514613 @slashstarcomment - 846 + 77689 + + + @location_default + 37058201 @ident - 237316 + 5500549 @ellipsis - 141 + 42416 @intlit - 7683 - - - @floatlit - 27 + 8029312 @charlit - 838 + 44853 @stringlit - 24892 + 936836 @funclit - 678 + 145208 @compositelit - 2704 + 638762 @parenexpr - 343 + 44180 @selectorexpr - 54353 + 1563876 @indexexpr - 4581 + 1269900 @sliceexpr - 836 + 26235 @typeassertexpr - 2127 + 86701 @callorconversionexpr - 32041 + 1123396 @starexpr - 10360 + 401599 @keyvalueexpr - 5616 + 2321152 @arraytypeexpr - 3465 + 172175 @structtypeexpr - 1207 + 126802 @functypeexpr - 6015 + 302047 @interfacetypeexpr - 509 + 154636 @maptypeexpr - 1013 + 71689 @minusexpr - 270 + 183167 @notexpr - 1190 - - - @complementexpr - 21 + 36971 @addressexpr - 1739 + 112784 @arrowexpr - 92 + 27351 @lorexpr - 612 + 27296 @landexpr - 1234 + 99629 @eqlexpr - 3244 + 91950 @neqexpr - 4103 - - - @lssexpr - 785 - - - @leqexpr - 248 + 326490 @gtrexpr - 619 + 38816 @geqexpr - 270 + 21923 @addexpr - 1272 + 194589 @subexpr - 557 + 222492 - @orexpr - 146 + @mulexpr + 32053 - @xorexpr - 14 + @sendchantypeexpr + 22312 - @mulexpr - 207 + @recvchantypeexpr + 9117 - @quoexpr - 53 + @sendrcvchantypeexpr + 25432 - @remexpr - 24 + @badexpr + 2 - @shlexpr - 164 + @floatlit + 393088 - @shrexpr - 57 + @imaglit + 1233 - @andexpr - 235 + @genericfunctioninstantiationexpr + 9823 - @andnotexpr - 19 + @generictypeinstantiationexpr + 4188 - @sendchantypeexpr - 7 + @typesetliteralexpr + 1171 - @recvchantypeexpr - 9 + @plusexpr + 370 - @sendrcvchantypeexpr - 101 + @complementexpr + 3979 - @badexpr + @derefexpr 0 - @imaglit - 0 + @lssexpr + 32125 - @plusexpr - 0 + @leqexpr + 9262 - @derefexpr - 0 + @orexpr + 81746 - @field - 19974 + @xorexpr + 1753 - @location_default - 539178 + @quoexpr + 61619 - @declstmt - 1454 + @remexpr + 2999 - @labeledstmt - 49 + @shlexpr + 82494 + + + @shrexpr + 7813 + + + @andexpr + 11860 + + + @andnotexpr + 396 + + + @field + 995459 + + + @typeparamdecl + 9798 + + + @declstmt + 74013 @exprstmt - 7605 + 460278 @sendstmt - 69 + 16794 @incstmt - 614 + 15889 @decstmt - 71 + 9601 @gostmt - 72 + 20539 @deferstmt - 358 + 98332 @returnstmt - 9225 + 355294 @breakstmt - 301 + 14232 @continuestmt - 606 - - - @gotostmt - 8 - - - @fallthroughstmt - 7 + 45187 @blockstmt - 19358 + 539596 @ifstmt - 9728 + 313551 @caseclause - 3476 + 79016 @exprswitchstmt - 378 + 17092 @typeswitchstmt - 400 + 9269 @commclause - 72 + 25912 @selectstmt - 35 + 11996 @forstmt - 654 + 25752 @rangestmt - 2135 + 64694 @assignstmt - 7478 + 641512 @definestmt - 9514 + 433774 @addassignstmt - 223 + 21683 - @subassignstmt - 18 + @badstmt + 0 - @mulassignstmt - 5 + @emptystmt + 181 - @quoassignstmt - 3 + @labeledstmt + 4273 - @orassignstmt - 63 + @gotostmt + 4431 - @xorassignstmt - 3 + @fallthroughstmt + 11233 - @shlassignstmt - 2 + @subassignstmt + 6675 - @shrassignstmt - 3 + @mulassignstmt + 470 - @andnotassignstmt - 3 + @quoassignstmt + 556 - @badstmt - 0 + @remassignstmt + 171 - @emptystmt - 0 + @andassignstmt + 279 - @remassignstmt - 0 + @orassignstmt + 9913 - @andassignstmt - 0 + @xorassignstmt + 2562 + + + @shlassignstmt + 367 + + + @shrassignstmt + 429 + + + @andnotassignstmt + 279 @importdecl - 479 + 83355 @constdecl - 280 + 54489 @typedecl - 1349 + 100497 @vardecl - 1769 + 118650 @funcdecl - 4813 + 283367 @baddecl - 0 + 214 @importspec - 3468 + 247378 @valuespec - 3056 + 152556 @typedefspec - 1349 + 101666 @aliasspec - 16 + 17497 @universescope - 1 + 5401 @packagescope - 346 + 924779 @localscope - 36428 + 919952 @pkgobject - 3468 + 247378 @decltypeobject - 3602 + 13124885 @builtintypeobject - 20 + 118831 @declconstobject - 8857 + 80430386 @builtinconstobject - 4 + 21605 @declvarobject - 51098 + 118985930 @declfunctionobject - 17793 + 93191570 @builtinfunctionobject - 18 + 140437 @labelobject - 49 + 4273 @invalidtype - 1 + 5401 @boolexprtype - 1 + 5401 @inttype - 1 + 5401 @int8type - 1 + 5401 @int16type - 1 + 5401 @int32type - 1 + 5401 @int64type - 1 + 5401 @uinttype - 1 + 5401 @uint8type - 1 + 5401 @uint16type - 1 + 5401 @uint32type - 1 + 5401 @uint64type - 1 + 5401 @uintptrtype - 1 + 5401 @float32type - 1 + 5401 @float64type - 1 + 5401 @complex64type - 1 + 4107 @complex128type - 1 + 5401 @stringexprtype - 1 + 5401 @unsafepointertype - 1 + 5401 @boolliteraltype - 1 + 5401 @intliteraltype - 1 + 5401 @runeliteraltype - 1 + 5401 @floatliteraltype - 1 + 5401 @stringliteraltype - 1 + 5401 @nilliteraltype - 1 + 5401 + + + @typeparamtype + 331358 @arraytype - 293 + 1528173 @slicetype - 637 + 2313692 @structtype - 2409 + 8070007 @pointertype - 1903 + 8158995 @interfacetype - 247 + 1636684 @tupletype - 559 + 69835 @signaturetype - 8010 + 28950823 @maptype - 430 + 866786 @sendchantype - 13 + 32408 @recvchantype - 10 + 48612 @sendrcvchantype - 29 + 101202 @namedtype - 3567 + 12852686 + + + @typesetliteraltype + 59325 + + + @typealias + 660784 @complexliteraltype - 0 + 88 @package - 346 + 924779 @modline - 6 + 191935 @modlineblock - 1 + 22683 @modlparen - 1 + 22683 @modrparen - 1 + 22683 @modcommentblock - 0 + 431 @unknownerror @@ -698,15 +726,15 @@ @listerror - 0 + 22275 @parseerror - 0 + 3428 @typeerror - 0 + 219425 @@ -738,7 +766,7 @@ 1 2 - 1 + 403 @@ -754,7 +782,7 @@ 1 2 - 1 + 403 @@ -830,7 +858,7 @@ 1 2 - 1 + 403 @@ -846,7 +874,7 @@ 1 2 - 1 + 403 @@ -1383,11 +1411,11 @@ sourceLocationPrefix - 1 + 5401 prefix - 1 + 5401 @@ -1416,7 +1444,7 @@ 1 2 - 1 + 403 @@ -1470,7 +1498,7 @@ 1 2 - 1 + 403 @@ -1486,7 +1514,7 @@ 1 2 - 1 + 403 @@ -1502,7 +1530,7 @@ 1 2 - 1 + 403 @@ -1518,7 +1546,7 @@ 1 2 - 1 + 403 @@ -1688,27 +1716,27 @@ xmlElements - 504 + 8655540 id - 504 + 8655540 name - 38 + 160211 parentid - 199 + 2961862 idx - 86 + 1302233 fileid - 14 + 90375 @@ -1722,7 +1750,7 @@ 1 2 - 504 + 8655540 @@ -1738,7 +1766,7 @@ 1 2 - 504 + 8655540 @@ -1754,7 +1782,7 @@ 1 2 - 504 + 8655540 @@ -1770,7 +1798,7 @@ 1 2 - 504 + 8655540 @@ -1786,52 +1814,72 @@ 1 2 - 11 + 24647 2 3 - 3 + 8215 3 4 - 4 + 8215 4 + 5 + 12323 + + + 5 6 - 3 + 4107 - 7 - 12 - 3 + 8 + 9 + 12323 - 12 + 13 14 - 2 + 8215 - 14 - 16 - 3 + 18 + 22 + 12323 - 16 - 22 - 3 + 22 + 30 + 12323 - 27 + 30 40 - 3 + 12323 - 55 - 101 - 3 + 49 + 52 + 12323 + + + 52 + 58 + 8215 + + + 135 + 200 + 12323 + + + 233 + 570 + 12323 @@ -1847,47 +1895,57 @@ 1 2 - 15 + 49295 2 3 - 4 - - - 3 - 4 - 4 + 8215 4 5 - 3 + 20539 5 - 6 - 1 + 11 + 8215 - 6 - 7 - 3 + 11 + 12 + 8215 - 7 - 18 - 3 + 13 + 19 + 12323 - 18 + 19 22 - 3 + 12323 - 29 - 76 - 2 + 22 + 30 + 12323 + + + 33 + 53 + 12323 + + + 72 + 132 + 12323 + + + 302 + 303 + 4107 @@ -1903,52 +1961,52 @@ 1 2 - 12 + 41079 2 3 - 4 + 28755 3 4 - 5 + 12323 4 5 - 1 + 12323 5 6 - 3 + 12323 - 6 - 9 - 3 + 7 + 10 + 12323 - 10 - 11 - 2 + 11 + 14 + 12323 - 13 - 15 - 3 + 14 + 16 + 12323 - 15 - 17 - 3 + 33 + 50 + 12323 - 17 - 41 - 2 + 212 + 213 + 4107 @@ -1964,37 +2022,37 @@ 1 2 - 18 + 86267 2 3 - 7 + 12323 - 3 - 4 - 3 + 10 + 11 + 24647 - 4 - 5 - 1 + 13 + 19 + 8215 - 5 - 6 - 4 + 19 + 21 + 12323 - 7 - 11 - 3 + 21 + 22 + 8215 - 11 - 14 - 2 + 22 + 23 + 8215 @@ -2010,27 +2068,32 @@ 1 2 - 116 + 1429581 2 3 - 37 + 788734 3 4 - 22 + 172535 4 - 8 - 15 + 5 + 168427 - 8 - 61 - 9 + 5 + 7 + 267019 + + + 7 + 311 + 135563 @@ -2046,17 +2109,17 @@ 1 2 - 160 + 2185452 2 3 - 23 + 636738 3 - 8 - 16 + 10 + 139671 @@ -2072,27 +2135,32 @@ 1 2 - 116 + 1429581 2 3 - 37 + 788734 3 4 - 22 + 172535 4 - 8 - 15 + 5 + 168427 - 8 - 61 - 9 + 5 + 7 + 267019 + + + 7 + 311 + 135563 @@ -2108,7 +2176,7 @@ 1 2 - 199 + 2961862 @@ -2124,32 +2192,17 @@ 1 2 - 54 + 1125589 2 - 3 - 4 - - - 3 - 4 - 11 - - - 4 6 - 6 + 110915 6 - 21 - 7 - - - 40 - 141 - 4 + 404 + 65727 @@ -2165,32 +2218,17 @@ 1 2 - 54 + 1125589 2 3 - 5 + 106807 3 - 4 - 11 - - - 4 - 5 - 6 - - - 5 - 12 - 7 - - - 14 26 - 3 + 69835 @@ -2206,32 +2244,17 @@ 1 2 - 54 + 1125589 2 - 3 - 4 - - - 3 - 4 - 11 - - - 4 6 - 6 + 110915 6 - 21 - 7 - - - 40 - 141 - 4 + 404 + 65727 @@ -2247,32 +2270,12 @@ 1 2 - 54 + 1236505 2 - 3 - 4 - - - 3 - 4 - 11 - - - 4 - 5 - 8 - - - 5 - 13 - 7 - - - 13 - 15 - 2 + 23 + 65727 @@ -2286,64 +2289,49 @@ 12 - 2 - 3 - 1 - - - 7 - 8 - 1 + 6 + 7 + 4107 8 9 - 2 - - - 10 - 11 - 1 - - - 16 - 17 - 1 + 8215 - 18 - 19 - 1 + 9 + 10 + 12323 - 20 - 21 - 1 + 10 + 11 + 8215 - 21 - 22 - 2 + 13 + 16 + 8215 - 58 - 59 - 1 + 19 + 39 + 8215 - 100 - 101 - 1 + 40 + 41 + 4107 - 107 - 108 - 1 + 41 + 42 + 28755 - 108 - 109 - 1 + 67 + 1560 + 8215 @@ -2356,55 +2344,35 @@ 12 - - 2 - 3 - 1 - - - 3 - 4 - 2 - - - 4 - 5 - 1 - - - 5 - 6 - 2 - 6 7 - 2 + 8215 - 8 - 9 - 2 + 7 + 8 + 12323 - 11 - 12 - 1 + 8 + 9 + 20539 - 16 - 17 - 1 + 9 + 15 + 8215 - 17 - 18 - 1 + 15 + 16 + 36971 - 19 - 20 - 1 + 31 + 32 + 4107 @@ -2418,54 +2386,29 @@ 12 - 2 - 3 - 2 + 3 + 4 + 4107 4 5 - 1 - - - 6 - 7 - 2 - - - 7 - 8 - 3 - - - 9 - 10 - 1 - - - 10 - 11 - 1 - - - 20 - 21 - 1 + 32863 - 23 - 24 - 1 + 5 + 6 + 8215 - 47 - 48 - 1 + 13 + 14 + 36971 - 49 - 50 - 1 + 38 + 522 + 8215 @@ -2479,59 +2422,39 @@ 12 - 1 - 2 - 1 - - - 3 - 4 - 2 + 2 + 3 + 4107 - 4 - 5 - 1 + 5 + 6 + 24647 - 7 + 6 8 - 3 + 8215 - 8 - 9 - 1 + 11 + 13 + 8215 13 14 - 1 + 12323 14 15 - 1 + 24647 16 - 17 - 1 - - - 30 - 31 - 1 - - - 34 - 35 - 1 - - - 67 - 68 - 1 + 314 + 8215 @@ -2541,31 +2464,31 @@ xmlAttrs - 408 + 3762921 id - 408 + 3762921 elementid - 288 + 2744139 name - 28 + 180751 value - 235 + 1713032 idx - 6 + 20539 fileid - 14 + 90375 @@ -2579,7 +2502,7 @@ 1 2 - 408 + 3762921 @@ -2595,7 +2518,7 @@ 1 2 - 408 + 3762921 @@ -2611,7 +2534,7 @@ 1 2 - 408 + 3762921 @@ -2627,7 +2550,7 @@ 1 2 - 408 + 3762921 @@ -2643,7 +2566,7 @@ 1 2 - 408 + 3762921 @@ -2659,22 +2582,17 @@ 1 2 - 195 + 1963620 2 3 - 69 + 579226 3 - 4 - 23 - - - 6 - 7 - 1 + 6 + 201291 @@ -2690,22 +2608,17 @@ 1 2 - 195 + 1963620 2 3 - 69 + 579226 3 - 4 - 23 - - - 6 - 7 - 1 + 6 + 201291 @@ -2721,22 +2634,17 @@ 1 2 - 195 + 1963620 2 3 - 70 + 579226 3 - 4 - 22 - - - 4 - 5 - 1 + 6 + 201291 @@ -2752,22 +2660,17 @@ 1 2 - 195 + 1963620 2 3 - 69 + 579226 3 - 4 - 23 - - - 6 - 7 - 1 + 6 + 201291 @@ -2783,7 +2686,7 @@ 1 2 - 288 + 2744139 @@ -2799,42 +2702,42 @@ 1 2 - 12 + 65727 2 3 - 3 + 8215 3 4 - 4 + 24647 - 5 - 15 - 2 + 4 + 6 + 16431 - 21 - 22 - 2 + 8 + 12 + 16431 - 22 - 23 - 2 + 17 + 30 + 16431 - 45 - 97 - 2 + 30 + 50 + 16431 - 132 - 133 - 1 + 50 + 250 + 16431 @@ -2850,42 +2753,42 @@ 1 2 - 12 + 65727 2 3 - 3 + 8215 3 4 - 4 + 24647 - 5 - 15 - 2 + 4 + 6 + 16431 - 21 - 22 - 2 + 8 + 12 + 16431 - 22 - 23 - 2 + 17 + 30 + 16431 - 45 - 97 - 2 + 30 + 50 + 16431 - 132 - 133 - 1 + 50 + 250 + 16431 @@ -2901,37 +2804,32 @@ 1 2 - 16 + 94483 2 3 - 2 + 20539 3 4 - 3 - - - 11 - 12 - 1 + 20539 - 15 - 16 - 2 + 4 + 5 + 12323 - 21 - 36 - 2 + 5 + 14 + 16431 - 41 - 75 - 2 + 30 + 178 + 16431 @@ -2947,17 +2845,17 @@ 1 2 - 19 + 135563 2 3 - 5 + 28755 3 - 4 - 4 + 5 + 16431 @@ -2973,32 +2871,37 @@ 1 2 - 18 + 102699 2 3 - 2 + 12323 3 - 4 - 2 + 8 + 16431 - 4 - 6 - 2 + 9 + 12 + 16431 - 10 - 11 - 3 + 14 + 17 + 12323 - 13 - 14 - 1 + 17 + 18 + 12323 + + + 19 + 20 + 8215 @@ -3014,22 +2917,27 @@ 1 2 - 171 + 1294017 2 3 - 32 + 127347 3 5 - 18 + 139671 5 - 13 - 14 + 17 + 131455 + + + 19 + 31 + 20539 @@ -3045,22 +2953,27 @@ 1 2 - 174 + 1298125 2 3 - 29 + 127347 3 5 - 18 + 135563 5 - 13 - 14 + 17 + 131455 + + + 19 + 31 + 20539 @@ -3076,12 +2989,12 @@ 1 2 - 230 + 1688384 2 4 - 5 + 24647 @@ -3097,12 +3010,12 @@ 1 2 - 224 + 1671952 2 4 - 11 + 41079 @@ -3118,17 +3031,17 @@ 1 2 - 193 + 1474769 2 - 3 - 32 + 6 + 127347 - 3 - 7 - 10 + 9 + 20 + 110915 @@ -3142,24 +3055,29 @@ 12 - 1 - 2 - 3 + 3 + 4 + 4107 - 24 - 25 - 1 + 6 + 7 + 4107 + + + 49 + 50 + 4107 - 93 - 94 - 1 + 190 + 191 + 4107 - 288 - 289 - 1 + 668 + 669 + 4107 @@ -3173,24 +3091,29 @@ 12 - 1 - 2 - 3 + 3 + 4 + 4107 - 24 - 25 - 1 + 6 + 7 + 4107 - 93 - 94 - 1 + 49 + 50 + 4107 + + + 190 + 191 + 4107 - 288 - 289 - 1 + 668 + 669 + 4107 @@ -3204,24 +3127,29 @@ 12 - 1 - 2 - 3 + 2 + 3 + 4107 - 8 - 9 - 1 + 4 + 5 + 4107 - 14 - 15 - 1 + 9 + 10 + 4107 - 16 - 17 - 1 + 21 + 22 + 4107 + + + 25 + 26 + 4107 @@ -3235,24 +3163,29 @@ 12 - 1 - 2 - 3 + 3 + 4 + 4107 - 23 - 24 - 1 + 6 + 7 + 4107 - 64 - 65 - 1 + 21 + 22 + 4107 + + + 72 + 73 + 4107 - 157 - 158 - 1 + 326 + 327 + 4107 @@ -3266,24 +3199,19 @@ 12 - 1 - 2 - 3 - - - 6 - 7 - 1 - - - 12 - 13 - 1 + 3 + 4 + 8215 14 15 - 1 + 4107 + + + 22 + 23 + 8215 @@ -3297,64 +3225,54 @@ 12 - 2 - 3 - 1 + 3 + 4 + 4107 4 5 - 1 + 8215 - 10 - 11 - 2 + 9 + 10 + 4107 11 12 - 1 + 12323 12 - 13 - 1 - - - 17 - 18 - 1 + 14 + 8215 18 - 19 - 1 - - - 19 - 20 - 1 + 38 + 8215 - 22 - 23 - 1 + 39 + 40 + 12323 - 48 - 49 - 1 + 40 + 41 + 12323 - 73 - 74 - 2 + 41 + 42 + 12323 - 89 - 90 - 1 + 91 + 333 + 8215 @@ -3368,64 +3286,49 @@ 12 - 1 - 2 - 1 + 2 + 3 + 4107 - 4 - 5 - 1 + 3 + 4 + 8215 - 8 - 9 - 2 + 5 + 7 + 8215 - 9 - 10 - 1 + 7 + 8 + 12323 - 11 + 9 12 - 1 - - - 12 - 13 - 2 - - - 16 - 17 - 1 + 8215 17 18 - 1 - - - 18 - 19 - 1 + 4107 - 42 - 43 - 1 + 25 + 26 + 12323 - 63 - 64 - 1 + 26 + 27 + 24647 - 67 - 68 - 1 + 58 + 303 + 8215 @@ -3438,40 +3341,55 @@ 12 - - 2 - 3 - 2 - 3 4 - 2 + 4107 4 5 - 4 + 8215 5 6 - 1 + 4107 - 6 - 7 - 2 + 8 + 9 + 8215 - 7 - 8 - 2 + 9 + 10 + 12323 - 23 - 24 - 1 + 10 + 11 + 4107 + + + 11 + 12 + 12323 + + + 12 + 13 + 24647 + + + 13 + 17 + 8215 + + + 20 + 21 + 4107 @@ -3484,70 +3402,50 @@ 12 - - 2 - 3 - 1 - 3 4 - 1 - - - 6 - 7 - 1 + 4107 - 8 - 9 - 2 + 4 + 5 + 8215 9 10 - 1 + 4107 - 10 - 11 - 1 - - - 13 - 14 - 1 + 11 + 12 + 20539 - 14 - 15 - 1 + 17 + 27 + 8215 - 18 - 19 - 1 + 33 + 34 + 12323 - 32 - 33 - 1 + 34 + 35 + 12323 - 54 - 55 - 1 + 35 + 36 + 12323 60 - 61 - 1 - - - 61 - 62 - 1 + 244 + 8215 @@ -3560,25 +3458,20 @@ 12 - - 1 - 2 - 2 - 2 3 - 6 + 32863 3 4 - 5 + 45187 - 6 - 7 - 1 + 5 + 6 + 12323 @@ -3812,23 +3705,23 @@ xmlComments - 30 + 131455 id - 30 + 131455 text - 18 + 98591 parentid - 20 + 115023 fileid - 10 + 49295 @@ -3842,7 +3735,7 @@ 1 2 - 30 + 131455 @@ -3858,7 +3751,7 @@ 1 2 - 30 + 131455 @@ -3874,7 +3767,7 @@ 1 2 - 30 + 131455 @@ -3890,22 +3783,17 @@ 1 2 - 13 + 86267 - 2 - 3 - 3 + 3 + 4 + 4107 4 5 - 1 - - - 7 - 8 - 1 + 8215 @@ -3921,22 +3809,17 @@ 1 2 - 14 + 86267 - 2 - 3 - 2 + 3 + 4 + 4107 4 5 - 1 - - - 7 - 8 - 1 + 8215 @@ -3952,17 +3835,17 @@ 1 2 - 15 + 86267 - 2 - 3 - 2 + 3 + 4 + 4107 - 7 - 8 - 1 + 4 + 5 + 8215 @@ -3978,22 +3861,12 @@ 1 2 - 15 + 98591 2 3 - 3 - - - 4 - 5 - 1 - - - 5 - 6 - 1 + 16431 @@ -4009,22 +3882,12 @@ 1 2 - 15 + 98591 2 3 - 3 - - - 3 - 4 - 1 - - - 5 - 6 - 1 + 16431 @@ -4040,7 +3903,7 @@ 1 2 - 20 + 115023 @@ -4056,27 +3919,22 @@ 1 2 - 6 + 28755 2 3 - 1 - - - 4 - 5 - 1 + 12323 - 8 - 9 - 1 + 3 + 4 + 4107 - 10 - 11 - 1 + 16 + 17 + 4107 @@ -4092,27 +3950,22 @@ 1 2 - 6 + 28755 2 3 - 1 - - - 4 - 5 - 1 + 12323 - 5 - 6 - 1 + 3 + 4 + 4107 - 9 - 10 - 1 + 16 + 17 + 4107 @@ -4128,17 +3981,17 @@ 1 2 - 7 + 41079 - 3 - 4 - 1 + 2 + 3 + 4107 - 5 - 6 - 2 + 16 + 17 + 4107 @@ -4148,31 +4001,31 @@ xmlChars - 869 + 13383839 id - 869 + 13383839 text - 427 + 5862105 parentid - 432 + 6926075 idx - 87 + 1281693 isCDATA - 1 + 4107 fileid - 14 + 94483 @@ -4186,7 +4039,7 @@ 1 2 - 869 + 13383839 @@ -4202,7 +4055,7 @@ 1 2 - 869 + 13383839 @@ -4218,7 +4071,7 @@ 1 2 - 869 + 13383839 @@ -4234,7 +4087,7 @@ 1 2 - 869 + 13383839 @@ -4250,7 +4103,7 @@ 1 2 - 869 + 13383839 @@ -4266,22 +4119,17 @@ 1 2 - 339 + 5081586 2 - 3 - 53 - - - 3 - 49 - 33 + 4 + 480635 - 68 - 90 - 2 + 4 + 567 + 299883 @@ -4297,22 +4145,17 @@ 1 2 - 342 + 5098018 2 - 3 - 50 - - - 3 - 28 - 33 + 4 + 484743 - 28 - 32 - 2 + 4 + 179 + 279343 @@ -4328,12 +4171,12 @@ 1 2 - 400 + 5701893 2 - 58 - 27 + 298 + 160211 @@ -4349,7 +4192,7 @@ 1 2 - 427 + 5862105 @@ -4365,17 +4208,12 @@ 1 2 - 380 + 5710109 2 - 4 - 36 - - - 4 - 11 - 11 + 22 + 151995 @@ -4391,27 +4229,22 @@ 1 2 - 302 + 5328066 2 3 - 53 + 583334 3 - 4 - 28 - - - 4 - 7 - 34 + 5 + 521715 - 7 - 60 - 15 + 5 + 308 + 492959 @@ -4427,22 +4260,22 @@ 1 2 - 314 + 5664921 2 3 - 67 + 558686 3 - 5 - 37 + 7 + 595658 - 5 - 26 - 14 + 7 + 14 + 106807 @@ -4458,27 +4291,22 @@ 1 2 - 302 + 5328066 2 3 - 53 + 583334 3 - 4 - 28 - - - 4 - 7 - 34 + 5 + 521715 - 7 - 60 - 15 + 5 + 308 + 492959 @@ -4494,7 +4322,7 @@ 1 2 - 432 + 6926075 @@ -4510,7 +4338,7 @@ 1 2 - 432 + 6926075 @@ -4526,32 +4354,17 @@ 1 2 - 55 - - - 2 - 3 - 3 + 1105050 3 - 4 - 11 - - - 4 - 7 - 7 - - - 8 - 28 - 7 + 6 + 110915 - 41 - 408 - 4 + 6 + 1550 + 65727 @@ -4567,32 +4380,17 @@ 1 2 - 55 + 1105050 2 3 - 3 + 102699 3 - 4 - 12 - - - 4 - 7 - 7 - - - 7 - 28 - 7 - - - 44 - 251 - 3 + 923 + 73943 @@ -4608,32 +4406,17 @@ 1 2 - 55 - - - 2 - 3 - 3 + 1105050 3 - 4 - 11 - - - 4 - 7 - 7 - - - 8 - 28 - 7 + 6 + 110915 - 41 - 408 - 4 + 6 + 1550 + 65727 @@ -4649,7 +4432,7 @@ 1 2 - 87 + 1281693 @@ -4665,32 +4448,12 @@ 1 2 - 55 - - - 2 - 3 - 3 - - - 3 - 4 - 12 + 1215965 4 - 5 - 7 - - - 5 - 12 - 7 - - - 13 - 15 - 3 + 24 + 65727 @@ -4704,9 +4467,9 @@ 12 - 869 - 870 - 1 + 3258 + 3259 + 4107 @@ -4720,9 +4483,9 @@ 12 - 427 - 428 - 1 + 1427 + 1428 + 4107 @@ -4736,9 +4499,9 @@ 12 - 432 - 433 - 1 + 1686 + 1687 + 4107 @@ -4752,9 +4515,9 @@ 12 - 87 - 88 - 1 + 312 + 313 + 4107 @@ -4768,9 +4531,9 @@ 12 - 14 - 15 - 1 + 23 + 24 + 4107 @@ -4784,69 +4547,54 @@ 12 - 5 - 6 - 1 + 1 + 10 + 8215 - 13 - 14 - 1 + 11 + 13 + 8215 - 14 + 13 15 - 2 + 8215 - 17 - 18 - 1 + 15 + 16 + 4107 - 28 - 29 - 1 + 16 + 17 + 8215 - 30 - 31 - 1 + 18 + 21 + 8215 - 34 - 35 - 1 + 23 + 49 + 8215 - 35 - 36 - 1 + 51 + 52 + 4107 - 36 - 37 - 1 - - - 80 - 81 - 1 - - - 177 - 178 - 1 - - - 191 - 192 - 1 + 52 + 53 + 28755 - 195 - 196 - 1 + 118 + 2510 + 8215 @@ -4860,69 +4608,54 @@ 12 - 3 - 4 - 1 - - - 7 - 8 - 2 + 1 + 2 + 4107 - 9 - 10 - 1 + 4 + 5 + 16431 - 13 - 14 - 1 + 5 + 6 + 4107 - 15 - 16 - 1 + 6 + 7 + 12323 - 18 - 19 - 1 + 7 + 8 + 4107 - 24 - 25 - 1 + 8 + 9 + 8215 - 25 - 26 - 1 + 23 + 24 + 4107 26 27 - 1 - - - 49 - 50 - 1 - - - 100 - 101 - 1 + 28755 - 105 - 106 - 1 + 27 + 37 + 8215 - 118 - 119 - 1 + 1314 + 1315 + 4107 @@ -4936,64 +4669,44 @@ 12 - 3 - 4 - 1 - - - 7 - 8 - 1 - - - 9 - 10 - 2 - - - 10 - 11 - 1 - - - 14 - 15 - 1 + 1 + 2 + 4107 - 15 - 16 - 2 + 5 + 6 + 28755 - 18 - 19 - 1 + 6 + 7 + 8215 - 20 - 21 - 1 + 7 + 9 + 8215 - 33 - 34 - 1 + 23 + 24 + 4107 - 88 - 89 - 1 + 26 + 27 + 28755 - 95 - 96 - 1 + 27 + 55 + 8215 - 96 - 97 - 1 + 1337 + 1338 + 4107 @@ -5007,54 +4720,49 @@ 12 - 2 - 3 - 1 - - - 4 - 5 - 2 + 1 + 4 + 8215 - 5 - 6 - 1 + 6 + 7 + 8215 7 8 - 3 + 20539 - 9 - 10 - 1 + 8 + 9 + 8215 - 13 - 14 - 1 + 11 + 12 + 4107 - 15 - 16 - 2 + 12 + 13 + 8215 - 32 - 33 - 1 + 13 + 14 + 8215 - 35 - 36 - 1 + 14 + 15 + 24647 - 65 - 66 - 1 + 310 + 311 + 4107 @@ -5070,7 +4778,7 @@ 1 2 - 14 + 94483 @@ -5080,15 +4788,15 @@ xmllocations - 1825 + 26028241 xmlElement - 1825 + 26028241 location - 1825 + 26028241 @@ -5102,7 +4810,7 @@ 1 2 - 1825 + 26028241 @@ -5118,7 +4826,7 @@ 1 2 - 1825 + 26028241 @@ -5128,15 +4836,15 @@ compilations - 1 + 31407 id - 1 + 31407 cwd - 1 + 31407 @@ -5150,7 +4858,7 @@ 1 2 - 1 + 31407 @@ -5166,7 +4874,7 @@ 1 2 - 1 + 31407 @@ -5176,19 +4884,19 @@ compilation_args - 3 + 94222 id - 1 + 31407 num - 3 + 5234 arg - 3 + 5234 @@ -5202,7 +4910,7 @@ 3 4 - 1 + 31407 @@ -5218,7 +4926,7 @@ 3 4 - 1 + 31407 @@ -5232,9 +4940,9 @@ 12 - 1 - 2 - 3 + 18 + 19 + 5234 @@ -5250,7 +4958,7 @@ 1 2 - 3 + 5234 @@ -5264,9 +4972,9 @@ 12 - 1 - 2 - 3 + 18 + 19 + 5234 @@ -5282,7 +4990,7 @@ 1 2 - 3 + 5234 @@ -5436,23 +5144,23 @@ diagnostic_for - 0 + 233782 diagnostic - 0 + 233782 compilation - 0 + 214 file_number - 0 + 56356 file_number_diagnostic_number - 0 + 19713 @@ -5466,7 +5174,7 @@ 1 2 - 1 + 233782 @@ -5482,7 +5190,7 @@ 1 2 - 1 + 233782 @@ -5498,7 +5206,7 @@ 1 2 - 1 + 233782 @@ -5510,7 +5218,13 @@ 12 - + + + 1091 + 1092 + 214 + + @@ -5520,7 +5234,13 @@ 12 - + + + 263 + 264 + 214 + + @@ -5530,7 +5250,13 @@ 12 - + + + 92 + 93 + 214 + + @@ -5540,7 +5266,43 @@ 12 - + + + 1 + 2 + 26999 + + + 2 + 3 + 8142 + + + 3 + 4 + 5785 + + + 4 + 6 + 4928 + + + 6 + 11 + 4714 + + + 11 + 18 + 4285 + + + 18 + 93 + 1499 + + @@ -5550,7 +5312,13 @@ 12 - + + + 1 + 2 + 56356 + + @@ -5560,7 +5328,43 @@ 12 - + + + 1 + 2 + 26999 + + + 2 + 3 + 8142 + + + 3 + 4 + 5785 + + + 4 + 6 + 4928 + + + 6 + 11 + 4714 + + + 11 + 18 + 4285 + + + 18 + 93 + 1499 + + @@ -5570,47 +5374,125 @@ 12 - - - - - - file_number_diagnostic_number - compilation - - - 12 - - - - - - file_number_diagnostic_number - file_number - - - 12 - - + + + 1 + 2 + 6642 + + + 2 + 3 + 4714 + + + 3 + 4 + 3428 + + + 4 + 10 + 1499 + + + 10 + 33 + 1499 + + + 33 + 100 + 1499 + + + 137 + 264 + 428 + + + + + + + file_number_diagnostic_number + compilation + + + 12 + + + 1 + 2 + 19713 + + + + + + + file_number_diagnostic_number + file_number + + + 12 + + + 1 + 2 + 6642 + + + 2 + 3 + 4714 + + + 3 + 4 + 3428 + + + 4 + 10 + 1499 + + + 10 + 33 + 1499 + + + 33 + 100 + 1499 + + + 137 + 264 + 428 + + + compilation_finished - 1 + 31407 id - 1 + 31407 cpu_seconds - 1 + 1744 elapsed_seconds - 1 + 31407 @@ -5624,7 +5506,7 @@ 1 2 - 1 + 31407 @@ -5640,7 +5522,7 @@ 1 2 - 1 + 31407 @@ -5654,9 +5536,9 @@ 12 - 1 - 2 - 1 + 18 + 19 + 1744 @@ -5670,9 +5552,9 @@ 12 - 1 - 2 - 1 + 18 + 19 + 1744 @@ -5688,7 +5570,7 @@ 1 2 - 1 + 31407 @@ -5704,7 +5586,7 @@ 1 2 - 1 + 31407 @@ -5714,19 +5596,19 @@ compilation_compiling_files - 515 + 82070 id - 1 + 214 num - 515 + 82070 file - 515 + 82070 @@ -5738,9 +5620,9 @@ 12 - 515 - 516 - 1 + 383 + 384 + 214 @@ -5754,9 +5636,9 @@ 12 - 515 - 516 - 1 + 383 + 384 + 214 @@ -5772,7 +5654,7 @@ 1 2 - 515 + 82070 @@ -5788,7 +5670,7 @@ 1 2 - 515 + 82070 @@ -5804,7 +5686,7 @@ 1 2 - 515 + 82070 @@ -5820,7 +5702,7 @@ 1 2 - 515 + 82070 @@ -5830,31 +5712,31 @@ diagnostics - 0 + 233782 id - 0 + 233782 severity - 0 + 214 error_tag - 0 + 642 error_message - 0 + 56999 full_error_message - 0 + 56999 location - 0 + 149140 @@ -5868,7 +5750,7 @@ 1 2 - 1 + 233782 @@ -5884,7 +5766,7 @@ 1 2 - 1 + 233782 @@ -5900,7 +5782,7 @@ 1 2 - 1 + 233782 @@ -5916,7 +5798,7 @@ 1 2 - 1 + 233782 @@ -5932,7 +5814,7 @@ 1 2 - 1 + 233782 @@ -5944,7 +5826,13 @@ 12 - + + + 1091 + 1092 + 214 + + @@ -5954,7 +5842,13 @@ 12 - + + + 3 + 4 + 214 + + @@ -5964,7 +5858,13 @@ 12 - + + + 266 + 267 + 214 + + @@ -5974,7 +5874,13 @@ 12 - + + + 266 + 267 + 214 + + @@ -5984,7 +5890,13 @@ 12 - + + + 696 + 697 + 214 + + @@ -5994,7 +5906,23 @@ 12 - + + + 16 + 17 + 214 + + + 51 + 52 + 214 + + + 1024 + 1025 + 214 + + @@ -6004,7 +5932,13 @@ 12 - + + + 1 + 2 + 642 + + @@ -6014,7 +5948,23 @@ 12 - + + + 10 + 11 + 214 + + + 47 + 48 + 214 + + + 210 + 211 + 214 + + @@ -6024,7 +5974,23 @@ 12 - + + + 10 + 11 + 214 + + + 47 + 48 + 214 + + + 210 + 211 + 214 + + @@ -6034,7 +6000,23 @@ 12 - + + + 9 + 10 + 214 + + + 39 + 40 + 214 + + + 680 + 681 + 214 + + @@ -6044,7 +6026,38 @@ 12 - + + + 1 + 2 + 32142 + + + 2 + 3 + 8357 + + + 3 + 4 + 6428 + + + 4 + 7 + 4928 + + + 7 + 17 + 4285 + + + 20 + 214 + 857 + + @@ -6054,7 +6067,13 @@ 12 - + + + 1 + 2 + 56999 + + @@ -6064,7 +6083,18 @@ 12 - + + + 1 + 2 + 56784 + + + 2 + 3 + 214 + + @@ -6074,7 +6104,13 @@ 12 - + + + 1 + 2 + 56999 + + @@ -6084,27 +6120,90 @@ 12 - - - - - - full_error_message - id - - - 12 - - - - - - full_error_message - severity + + + 1 + 2 + 39642 + + + 2 + 3 + 6214 + + + 3 + 4 + 4071 + + + 4 + 8 + 4499 + + + 8 + 214 + 2571 + + + + + + + full_error_message + id 12 - + + + 1 + 2 + 32142 + + + 2 + 3 + 8357 + + + 3 + 4 + 6428 + + + 4 + 7 + 4928 + + + 7 + 17 + 4285 + + + 20 + 214 + 857 + + + + + + + full_error_message + severity + + + 12 + + + 1 + 2 + 56999 + + @@ -6114,7 +6213,18 @@ 12 - + + + 1 + 2 + 56784 + + + 2 + 3 + 214 + + @@ -6124,7 +6234,13 @@ 12 - + + + 1 + 2 + 56999 + + @@ -6134,7 +6250,33 @@ 12 - + + + 1 + 2 + 39642 + + + 2 + 3 + 6214 + + + 3 + 4 + 4071 + + + 4 + 8 + 4499 + + + 8 + 214 + 2571 + + @@ -6144,7 +6286,23 @@ 12 - + + + 1 + 2 + 133069 + + + 2 + 4 + 11571 + + + 4 + 93 + 4499 + + @@ -6154,7 +6312,13 @@ 12 - + + + 1 + 2 + 149140 + + @@ -6164,7 +6328,18 @@ 12 - + + + 1 + 2 + 142283 + + + 2 + 3 + 6857 + + @@ -6174,7 +6349,18 @@ 12 - + + + 1 + 2 + 142069 + + + 2 + 15 + 7071 + + @@ -6184,7 +6370,18 @@ 12 - + + + 1 + 2 + 142069 + + + 2 + 15 + 7071 + + @@ -6192,31 +6389,31 @@ locations_default - 539178 + 37058201 id - 539178 + 37058201 file - 529 + 115023 beginLine - 10312 + 6174312 beginColumn - 211 + 1026998 endLine - 10378 + 7357414 endColumn - 274 + 1154345 @@ -6230,7 +6427,7 @@ 1 2 - 539178 + 37058201 @@ -6246,7 +6443,7 @@ 1 2 - 539178 + 37058201 @@ -6262,7 +6459,7 @@ 1 2 - 539178 + 37058201 @@ -6278,7 +6475,7 @@ 1 2 - 539178 + 37058201 @@ -6294,7 +6491,7 @@ 1 2 - 539178 + 37058201 @@ -6308,74 +6505,74 @@ 12 - 4 - 39 - 41 + 2 + 24 + 8215 - 39 - 120 - 40 + 28 + 30 + 8215 - 120 - 208 - 40 + 33 + 38 + 8215 - 210 - 290 - 40 + 38 + 39 + 8215 - 291 - 372 - 40 + 44 + 48 + 8215 - 372 - 453 - 41 + 58 + 68 + 8215 - 456 - 563 - 40 + 72 + 86 + 8215 - 565 - 769 - 40 + 126 + 132 + 8215 - 774 - 1007 - 40 + 133 + 134 + 4107 - 1012 - 1339 - 42 + 134 + 135 + 12323 - 1347 - 1700 - 40 + 135 + 136 + 12323 - 1701 - 2804 - 40 + 211 + 279 + 8215 - 2873 - 6918 - 40 + 1057 + 1261 + 8215 - 8171 - 11207 - 5 + 4417 + 4418 + 4107 @@ -6389,69 +6586,64 @@ 12 - 3 - 15 - 44 - - - 15 - 27 - 42 + 2 + 11 + 8215 - 27 - 46 - 40 + 12 + 14 + 8215 - 46 - 63 - 43 + 14 + 16 + 8215 - 63 - 78 - 40 + 16 + 17 + 4107 - 78 - 94 - 41 + 17 + 18 + 8215 - 95 - 120 - 40 + 20 + 21 + 8215 - 120 - 152 - 41 + 21 + 24 + 8215 - 152 - 188 - 40 + 28 + 34 + 8215 - 189 - 247 - 41 + 34 + 35 + 32863 - 249 - 325 - 40 + 40 + 109 + 8215 - 336 - 544 - 40 + 168 + 228 + 8215 - 554 - 10233 - 37 + 1355 + 1356 + 4107 @@ -6465,69 +6657,79 @@ 12 - 3 - 16 - 40 + 2 + 18 + 8215 - 16 - 34 - 40 + 19 + 20 + 8215 - 34 - 44 - 40 + 21 + 22 + 8215 - 45 - 51 - 44 + 22 + 23 + 8215 - 51 - 58 - 41 + 23 + 24 + 8215 - 58 - 63 - 47 + 25 + 27 + 8215 - 63 - 68 - 44 + 32 + 59 + 8215 - 68 - 73 - 43 + 60 + 65 + 8215 - 73 - 80 - 47 + 65 + 67 + 8215 - 80 - 86 - 43 + 67 + 68 + 4107 - 86 - 98 - 42 + 68 + 69 + 8215 - 98 - 115 - 42 + 69 + 70 + 4107 + + + 70 + 71 + 8215 + + + 80 + 93 + 8215 - 115 - 157 - 16 + 101 + 132 + 8215 @@ -6541,74 +6743,69 @@ 12 - 3 - 16 - 41 - - - 16 - 31 - 40 + 2 + 12 + 8215 - 31 - 52 - 40 + 12 + 14 + 8215 - 52 - 73 - 43 + 14 + 15 + 4107 - 73 - 92 - 42 + 15 + 16 + 8215 - 92 - 111 - 40 + 16 + 17 + 8215 - 111 - 139 - 40 + 19 + 20 + 8215 - 139 - 180 - 40 + 26 + 29 + 8215 - 180 - 219 - 40 + 30 + 38 + 8215 - 223 - 293 - 40 + 38 + 39 + 20539 - 294 - 370 - 40 + 39 + 40 + 12323 - 373 - 616 - 40 + 40 + 110 + 8215 - 617 - 1835 - 40 + 202 + 266 + 8215 - 2166 - 10377 - 3 + 1676 + 1677 + 4107 @@ -6622,69 +6819,79 @@ 12 - 4 - 21 - 42 + 2 + 17 + 8215 - 22 - 45 - 41 + 18 + 20 + 8215 - 46 - 59 - 43 + 23 + 25 + 8215 - 59 - 65 - 40 + 25 + 26 + 8215 - 65 - 71 - 42 + 26 + 31 + 8215 - 71 - 76 - 47 + 33 + 41 + 8215 - 76 - 81 - 40 + 42 + 61 + 8215 - 81 - 85 - 48 + 71 + 72 + 4107 85 - 91 - 41 + 86 + 8215 - 91 - 97 - 42 + 86 + 87 + 4107 - 97 - 105 - 41 + 88 + 89 + 8215 - 105 - 119 - 42 + 89 + 91 + 8215 - 119 - 166 - 20 + 91 + 92 + 8215 + + + 92 + 102 + 8215 + + + 125 + 149 + 8215 @@ -6700,32 +6907,47 @@ 1 2 - 6869 + 1142021 2 - 7 - 843 + 3 + 1092726 - 7 - 20 - 796 + 3 + 4 + 1039322 - 20 - 80 - 780 + 4 + 5 + 603874 - 80 - 698 - 774 + 5 + 6 + 612090 - 699 - 1775 - 250 + 6 + 7 + 390259 + + + 7 + 9 + 546363 + + + 9 + 21 + 484743 + + + 21 + 179 + 262911 @@ -6741,32 +6963,22 @@ 1 2 - 6947 + 5311634 2 3 - 868 + 353287 3 - 6 - 899 - - - 6 - 24 - 774 - - - 24 - 304 - 774 + 22 + 464203 - 305 - 530 - 50 + 22 + 29 + 45187 @@ -6782,32 +6994,47 @@ 1 2 - 6894 + 1146129 2 + 3 + 1121481 + + + 3 + 4 + 1051646 + + + 4 5 - 789 + 665494 5 - 11 - 780 + 6 + 624414 - 11 - 30 - 796 + 6 + 7 + 402583 - 30 - 72 - 779 + 7 + 8 + 517607 - 72 - 115 - 274 + 8 + 17 + 497067 + + + 17 + 57 + 147887 @@ -6823,27 +7050,17 @@ 1 2 - 7630 + 2690735 2 3 - 1017 + 3031698 3 - 6 - 779 - - - 6 - 21 - 792 - - - 21 - 315 - 94 + 14 + 451879 @@ -6859,32 +7076,47 @@ 1 2 - 6871 + 1630873 2 + 3 + 624414 + + + 3 + 4 + 1063970 + + + 4 5 - 793 + 636738 5 - 12 - 789 + 6 + 644954 - 12 - 33 - 778 + 6 + 7 + 480635 - 33 - 81 - 781 + 7 + 9 + 464203 - 81 - 127 - 300 + 9 + 19 + 476527 + + + 19 + 65 + 151995 @@ -6900,67 +7132,52 @@ 1 2 - 29 + 308099 2 - 4 - 19 - - - 4 - 9 - 16 - - - 10 - 22 - 16 - - - 22 - 62 - 16 + 3 + 127347 - 62 - 141 - 16 + 3 + 5 + 94483 - 144 - 330 - 16 + 5 + 8 + 90375 - 330 - 759 - 16 + 9 + 16 + 82159 - 781 - 1804 - 16 + 16 + 35 + 78051 - 1846 - 3757 - 16 + 35 + 66 + 78051 - 4042 - 8613 - 16 + 72 + 105 + 78051 - 8764 - 22092 - 16 + 105 + 408 + 78051 - 28067 - 55590 - 3 + 500 + 1007 + 12323 @@ -6976,62 +7193,47 @@ 1 2 - 36 + 320423 2 - 4 - 14 - - - 4 - 10 - 18 - - - 10 - 22 - 17 - - - 22 - 48 - 17 + 3 + 151995 - 49 - 96 - 17 + 3 + 4 + 53403 - 96 - 180 - 16 + 4 + 5 + 90375 - 180 - 292 - 16 + 5 + 6 + 98591 - 297 - 382 - 16 + 6 + 9 + 82159 - 383 - 430 - 16 + 9 + 13 + 69835 - 431 - 463 - 16 + 13 + 17 + 78051 - 463 - 530 - 12 + 17 + 29 + 82159 @@ -7047,67 +7249,47 @@ 1 2 - 36 + 394367 2 - 4 - 13 - - - 4 - 9 - 16 - - - 9 - 20 - 16 - - - 20 - 53 - 16 - - - 55 - 103 - 16 + 3 + 143779 - 107 - 209 - 16 + 3 + 5 + 86267 - 221 - 412 - 16 + 5 + 14 + 78051 - 422 - 682 - 16 + 14 + 32 + 82159 - 706 - 975 - 16 + 32 + 58 + 78051 - 977 - 1410 - 16 + 61 + 82 + 82159 - 1417 - 1983 - 16 + 83 + 623 + 78051 - 2809 - 10184 - 2 + 752 + 753 + 4107 @@ -7123,62 +7305,47 @@ 1 2 - 36 + 394367 2 - 4 - 13 - - - 4 - 9 - 16 - - - 9 - 21 - 19 - - - 24 - 55 - 16 + 3 + 143779 - 58 - 128 - 16 + 3 + 5 + 86267 - 131 - 226 - 16 + 5 + 14 + 78051 - 231 - 453 - 16 + 14 + 31 + 78051 - 480 - 769 - 16 + 31 + 56 + 78051 - 783 - 1037 - 16 + 57 + 80 + 82159 - 1057 - 1521 - 16 + 81 + 412 + 78051 - 1526 - 10180 - 15 + 627 + 773 + 8215 @@ -7194,62 +7361,42 @@ 1 2 - 31 + 468311 2 3 - 16 + 94483 3 - 6 - 17 - - - 6 - 12 - 17 - - - 12 - 21 - 16 - - - 21 - 28 - 16 - - - 28 - 35 - 17 + 5 + 78051 - 35 - 45 - 16 + 5 + 13 + 78051 - 46 - 56 - 16 + 13 + 23 + 90375 - 56 - 77 - 17 + 25 + 34 + 82159 - 77 - 101 - 17 + 34 + 41 + 82159 - 101 - 201 - 15 + 41 + 106 + 53403 @@ -7265,32 +7412,47 @@ 1 2 - 6731 + 3093318 2 + 3 + 505283 + + + 3 + 4 + 796950 + + + 4 + 5 + 801058 + + + 5 6 - 903 + 443663 6 - 16 - 817 + 7 + 303991 - 16 - 58 - 785 + 7 + 8 + 579226 - 58 - 457 - 779 + 8 + 21 + 562794 - 458 - 1734 - 363 + 21 + 174 + 271127 @@ -7306,32 +7468,22 @@ 1 2 - 6847 + 6318092 2 3 - 810 + 382043 3 - 5 - 787 - - - 5 - 14 - 802 - - - 14 - 104 - 780 + 16 + 554578 - 105 - 530 - 352 + 16 + 29 + 102699 @@ -7347,27 +7499,17 @@ 1 2 - 7766 + 4962455 2 3 - 956 + 1934864 3 - 7 - 860 - - - 7 - 27 - 785 - - - 27 - 31 - 11 + 8 + 460095 @@ -7383,32 +7525,47 @@ 1 2 - 6749 + 3101534 2 + 3 + 521715 + + + 3 4 - 616 + 813382 4 - 8 - 878 + 5 + 870894 - 8 - 21 - 799 + 5 + 6 + 468311 - 21 - 53 - 779 + 6 + 7 + 308099 - 53 - 113 - 557 + 7 + 8 + 640846 + + + 8 + 24 + 562794 + + + 24 + 54 + 69835 @@ -7424,32 +7581,47 @@ 1 2 - 6792 + 3130290 2 + 3 + 529931 + + + 3 + 4 + 796950 + + + 4 5 - 936 + 854462 5 - 12 - 801 + 6 + 443663 - 12 - 34 - 791 + 6 + 7 + 414907 - 34 - 83 - 787 + 7 + 9 + 583334 - 83 - 127 - 271 + 9 + 32 + 554578 + + + 33 + 66 + 49295 @@ -7465,57 +7637,57 @@ 1 2 - 33 + 262911 2 3 - 60 + 180751 3 - 9 - 23 + 4 + 32863 - 9 - 40 - 21 + 4 + 5 + 98591 - 43 - 111 - 21 + 5 + 7 + 90375 - 121 - 347 - 21 + 7 + 15 + 90375 - 369 - 1229 - 21 + 15 + 37 + 90375 - 1267 - 3311 - 21 + 40 + 71 + 90375 - 3642 - 7560 - 21 + 71 + 101 + 90375 - 7682 - 12716 - 21 + 101 + 144 + 90375 - 12740 - 20483 - 11 + 146 + 448 + 36971 @@ -7531,52 +7703,52 @@ 1 2 - 94 + 312207 2 - 6 - 19 + 3 + 156103 - 6 - 16 - 21 + 3 + 4 + 53403 - 16 - 45 - 21 + 4 + 5 + 119131 - 45 - 110 - 21 + 5 + 6 + 94483 - 123 - 281 - 21 + 6 + 9 + 102699 - 290 - 393 - 21 + 9 + 12 + 90375 - 395 - 445 - 21 + 12 + 15 + 82159 - 446 - 468 - 21 + 15 + 19 + 94483 - 470 - 530 - 14 + 19 + 29 + 49295 @@ -7592,52 +7764,47 @@ 1 2 - 94 + 414907 2 - 6 - 19 - - - 6 - 21 - 21 + 3 + 160211 - 21 - 52 - 21 + 3 + 5 + 102699 - 54 - 154 - 21 + 5 + 11 + 94483 - 157 - 449 - 21 + 11 + 38 + 90375 - 455 - 808 - 21 + 40 + 66 + 90375 - 814 - 1132 - 21 + 67 + 86 + 90375 - 1145 - 1769 - 21 + 86 + 126 + 94483 - 1792 - 2365 - 14 + 126 + 352 + 16431 @@ -7653,57 +7820,47 @@ 1 2 - 39 + 460095 2 3 - 56 + 102699 3 - 7 - 23 + 4 + 69835 - 7 - 18 - 21 - - - 18 - 27 - 24 - - - 27 - 37 - 22 + 4 + 8 + 106807 - 37 - 49 - 23 + 8 + 16 + 94483 - 49 - 63 - 22 + 16 + 26 + 94483 - 63 - 74 - 20 + 26 + 31 + 86267 - 74 - 102 - 21 + 31 + 35 + 94483 - 103 - 172 - 3 + 35 + 58 + 45187 @@ -7719,52 +7876,47 @@ 1 2 - 94 + 414907 2 - 6 - 19 - - - 6 - 21 - 21 + 3 + 160211 - 21 - 52 - 21 + 3 + 5 + 102699 - 53 - 153 - 21 + 5 + 11 + 94483 - 156 - 444 - 21 + 11 + 38 + 90375 - 446 - 789 - 21 + 40 + 67 + 94483 - 806 - 1121 - 21 + 68 + 87 + 90375 - 1138 - 1726 - 21 + 87 + 127 + 90375 - 1787 - 2357 - 14 + 131 + 394 + 16431 @@ -7774,23 +7926,23 @@ numlines - 514 + 81641 element_id - 514 + 81641 num_lines - 309 + 22071 num_code - 350 + 17999 num_comment - 150 + 10928 @@ -7804,7 +7956,7 @@ 1 2 - 514 + 81641 @@ -7820,7 +7972,7 @@ 1 2 - 514 + 81641 @@ -7836,7 +7988,7 @@ 1 2 - 514 + 81641 @@ -7852,22 +8004,47 @@ 1 2 - 183 + 7285 2 3 - 74 + 3857 3 4 - 32 + 1285 4 + 5 + 2142 + + + 5 + 6 + 1928 + + + 6 7 - 20 + 1928 + + + 7 + 9 + 1285 + + + 9 + 11 + 1285 + + + 11 + 12 + 1071 @@ -7883,22 +8060,37 @@ 1 2 - 187 + 8357 2 3 - 82 + 3642 3 4 - 23 + 2142 4 - 7 - 17 + 5 + 2357 + + + 5 + 6 + 2785 + + + 6 + 8 + 1928 + + + 8 + 10 + 857 @@ -7914,22 +8106,37 @@ 1 2 - 188 + 8785 2 3 - 79 + 3857 3 4 - 28 + 2357 4 + 5 + 2357 + + + 5 + 6 + 1928 + + + 6 7 - 14 + 1285 + + + 7 + 10 + 1499 @@ -7945,22 +8152,37 @@ 1 2 - 252 + 6214 2 3 - 65 + 4071 3 - 5 - 28 + 4 + 2142 - 6 - 18 - 5 + 5 + 8 + 1285 + + + 8 + 10 + 1285 + + + 10 + 13 + 1499 + + + 14 + 22 + 1499 @@ -7976,17 +8198,42 @@ 1 2 - 256 + 7071 2 3 - 67 + 3428 3 + 4 + 2142 + + + 4 + 7 + 1499 + + + 7 + 9 + 1285 + + + 9 + 10 + 857 + + + 10 + 15 + 1499 + + + 17 18 - 27 + 214 @@ -8002,22 +8249,37 @@ 1 2 - 259 + 7071 2 3 - 63 + 3428 3 + 4 + 2142 + + + 4 + 6 + 857 + + + 6 7 - 27 + 1714 - 17 - 18 - 1 + 7 + 9 + 1499 + + + 9 + 16 + 1285 @@ -8033,37 +8295,47 @@ 1 2 - 65 + 3214 2 3 - 27 + 2142 3 4 - 17 + 1285 4 - 5 - 7 + 7 + 642 - 5 - 6 - 10 + 7 + 8 + 428 - 6 - 10 - 12 + 8 + 9 + 1071 - 10 - 31 - 12 + 11 + 18 + 857 + + + 18 + 28 + 857 + + + 37 + 84 + 428 @@ -8079,37 +8351,47 @@ 1 2 - 65 + 3214 2 3 - 27 + 2357 3 4 - 18 + 1285 4 5 - 7 + 214 - 5 - 6 - 10 + 6 + 7 + 857 - 6 - 10 - 13 + 7 + 9 + 857 10 - 25 - 10 + 13 + 642 + + + 14 + 16 + 857 + + + 22 + 39 + 642 @@ -8125,37 +8407,47 @@ 1 2 - 66 + 3214 2 3 - 27 + 2357 3 4 - 17 + 1285 4 - 5 - 6 - - - 5 6 - 10 + 642 6 - 9 - 12 + 8 + 642 - 9 - 24 - 12 + 8 + 10 + 857 + + + 10 + 14 + 857 + + + 14 + 26 + 857 + + + 33 + 34 + 214 @@ -8165,15 +8457,15 @@ files - 529 + 146783 id - 529 + 146783 name - 529 + 146783 @@ -8187,7 +8479,7 @@ 1 2 - 529 + 146783 @@ -8203,7 +8495,7 @@ 1 2 - 529 + 146783 @@ -8213,15 +8505,15 @@ folders - 210 + 98591 id - 210 + 98591 name - 210 + 98591 @@ -8235,7 +8527,7 @@ 1 2 - 210 + 98591 @@ -8251,7 +8543,7 @@ 1 2 - 210 + 98591 @@ -8261,15 +8553,15 @@ containerparent - 738 + 243853 parent - 210 + 97284 child - 738 + 243853 @@ -8283,32 +8575,27 @@ 1 2 - 115 + 56142 2 3 - 32 + 21856 3 4 - 12 + 6214 4 - 6 - 19 - - - 6 - 12 - 16 + 7 + 8357 - 13 - 38 - 16 + 7 + 95 + 4714 @@ -8324,7 +8611,7 @@ 1 2 - 738 + 243853 @@ -8334,15 +8621,15 @@ has_location - 599339 + 14587326 locatable - 599339 + 14587326 location - 537353 + 11868805 @@ -8356,7 +8643,7 @@ 1 2 - 599339 + 14587326 @@ -8372,17 +8659,12 @@ 1 2 - 475682 + 9150285 2 3 - 61627 - - - 3 - 75 - 44 + 2718520 @@ -8392,19 +8674,19 @@ comment_groups - 12083 + 2493839 id - 12083 + 2493839 parent - 509 + 3187 idx - 720 + 846614 @@ -8418,7 +8700,7 @@ 1 2 - 12083 + 2493839 @@ -8434,7 +8716,7 @@ 1 2 - 12083 + 2493839 @@ -8450,67 +8732,52 @@ 1 2 - 44 + 691 2 3 - 45 + 384 3 4 - 32 + 230 4 - 5 - 27 - - - 5 - 7 - 38 - - - 7 - 10 - 47 + 6 + 268 - 10 - 13 - 34 + 6 + 12 + 268 - 13 - 17 - 47 + 12 + 18 + 230 - 17 - 23 - 40 + 18 + 24 + 268 - 23 - 29 - 40 + 34 + 110 + 230 - 29 - 38 - 39 + 256 + 257 + 460 - 38 - 70 - 39 - - - 70 - 721 - 37 + 7980 + 22048 + 153 @@ -8526,67 +8793,52 @@ 1 2 - 44 + 691 2 3 - 45 + 384 3 4 - 32 + 230 4 - 5 - 27 - - - 5 - 7 - 38 - - - 7 - 10 - 47 - - - 10 - 13 - 34 + 6 + 268 - 13 - 17 - 47 + 6 + 12 + 268 - 17 - 23 - 40 + 12 + 18 + 230 - 23 - 29 - 40 + 18 + 24 + 268 - 29 - 38 - 39 + 34 + 110 + 230 - 38 - 70 - 39 + 256 + 257 + 460 - 70 - 721 - 37 + 7980 + 22048 + 153 @@ -8602,37 +8854,27 @@ 1 2 - 429 + 182133 2 3 - 53 + 136129 3 - 8 - 66 + 4 + 221916 - 8 - 16 - 57 + 4 + 5 + 296604 16 - 44 - 54 - - - 44 - 311 - 54 - - - 323 - 510 - 7 + 84 + 9830 @@ -8648,37 +8890,27 @@ 1 2 - 429 + 182133 2 3 - 53 + 136129 3 - 8 - 66 + 4 + 221916 - 8 - 16 - 57 + 4 + 5 + 296604 16 - 44 - 54 - - - 44 - 311 - 54 - - - 323 - 510 - 7 + 84 + 9830 @@ -8688,27 +8920,27 @@ comments - 25724 + 2514805 id - 25724 + 2514805 kind - 2 + 76 parent - 12083 + 2493839 idx - 156 + 1728 text - 20683 + 541522 @@ -8722,7 +8954,7 @@ 1 2 - 25724 + 2514805 @@ -8738,7 +8970,7 @@ 1 2 - 25724 + 2514805 @@ -8754,7 +8986,7 @@ 1 2 - 25724 + 2514805 @@ -8770,7 +9002,7 @@ 1 2 - 25724 + 2514805 @@ -8784,14 +9016,14 @@ 12 - 846 - 847 - 1 + 5 + 6 + 38 - 24878 - 24879 - 1 + 65484 + 65485 + 38 @@ -8805,14 +9037,14 @@ 12 - 846 - 847 - 1 + 5 + 6 + 38 - 11239 - 11240 - 1 + 64938 + 64939 + 38 @@ -8826,14 +9058,14 @@ 12 - 2 - 3 - 1 + 1 + 2 + 38 - 156 - 157 - 1 + 45 + 46 + 38 @@ -8847,14 +9079,14 @@ 12 - 690 - 691 - 1 + 5 + 6 + 38 - 19993 - 19994 - 1 + 14097 + 14098 + 38 @@ -8870,27 +9102,12 @@ 1 2 - 7828 + 2484930 2 - 3 - 1787 - - - 3 - 4 - 1289 - - - 4 - 11 - 937 - - - 11 - 157 - 242 + 46 + 8908 @@ -8906,12 +9123,7 @@ 1 2 - 12081 - - - 2 - 3 - 2 + 2493839 @@ -8927,27 +9139,12 @@ 1 2 - 7828 + 2484930 2 - 3 - 1787 - - - 3 - 4 - 1289 - - - 4 - 11 - 937 - - - 11 - 157 - 242 + 46 + 8908 @@ -8963,27 +9160,12 @@ 1 2 - 7828 + 2484930 2 - 3 - 1817 - - - 3 - 4 - 1275 - - - 4 - 10 - 937 - - - 10 - 131 - 226 + 33 + 8908 @@ -8999,57 +9181,32 @@ 1 2 - 36 + 921 2 - 4 - 13 - - - 4 - 5 - 16 + 3 + 307 5 - 7 - 12 - - - 7 - 9 - 12 - - - 9 - 11 - 6 - - - 12 - 14 - 13 - - - 14 - 24 - 13 + 10 + 153 - 26 - 52 - 12 + 11 + 20 + 153 - 59 - 218 - 12 + 34 + 233 + 153 - 242 - 12084 - 11 + 64943 + 64944 + 38 @@ -9065,12 +9222,12 @@ 1 2 - 154 + 1689 2 3 - 2 + 38 @@ -9086,57 +9243,32 @@ 1 2 - 36 + 921 2 - 4 - 13 - - - 4 - 5 - 16 + 3 + 307 5 - 7 - 12 - - - 7 - 9 - 12 - - - 9 - 11 - 6 - - - 12 - 14 - 13 - - - 14 - 24 - 13 + 10 + 153 - 26 - 52 - 12 + 11 + 20 + 153 - 59 - 218 - 12 + 34 + 233 + 153 - 242 - 12084 - 11 + 64943 + 64944 + 38 @@ -9152,52 +9284,32 @@ 1 2 - 36 + 960 2 - 4 - 14 + 3 + 268 4 - 5 - 18 - - - 5 - 7 - 14 - - - 7 - 9 - 11 - - - 9 - 12 - 14 - - - 12 - 17 - 12 + 8 + 153 - 19 - 36 - 13 + 8 + 15 + 153 - 39 - 128 - 12 + 29 + 188 + 153 - 165 - 10500 - 12 + 13716 + 13717 + 38 @@ -9213,12 +9325,17 @@ 1 2 - 19550 + 494827 2 - 1935 - 1133 + 12 + 40819 + + + 12 + 45601 + 5875 @@ -9234,7 +9351,7 @@ 1 2 - 20683 + 541522 @@ -9250,12 +9367,17 @@ 1 2 - 19575 + 494904 2 - 828 - 1108 + 12 + 40742 + + + 12 + 45601 + 5875 @@ -9271,12 +9393,12 @@ 1 2 - 20523 + 540255 2 - 107 - 160 + 18 + 1267 @@ -9286,15 +9408,15 @@ doc_comments - 4330 + 273911 node - 4330 + 273911 comment - 4330 + 273911 @@ -9308,7 +9430,7 @@ 1 2 - 4330 + 273911 @@ -9324,7 +9446,7 @@ 1 2 - 4330 + 273911 @@ -9334,23 +9456,23 @@ exprs - 414037 + 8869156 id - 414037 + 8869156 kind - 48 + 14536 parent - 219324 + 4516748 idx - 5163 + 258019 @@ -9364,7 +9486,7 @@ 1 2 - 414037 + 8869156 @@ -9380,7 +9502,7 @@ 1 2 - 414037 + 8869156 @@ -9396,7 +9518,7 @@ 1 2 - 414037 + 8869156 @@ -9410,64 +9532,64 @@ 12 - 7 - 20 - 4 + 1 + 2 + 1211 - 21 - 54 - 4 + 2 + 3 + 1615 - 57 - 142 - 4 + 5 + 10 + 1211 - 146 - 236 - 4 + 11 + 13 + 1211 - 248 - 344 - 4 + 13 + 16 + 1211 - 509 - 620 - 4 + 17 + 36 + 1211 - 678 - 839 - 4 + 37 + 44 + 1211 - 1013 - 1235 - 4 + 49 + 120 + 1211 - 1272 - 2705 - 4 + 193 + 250 + 1211 - 3244 - 4582 - 4 + 322 + 516 + 1211 - 5616 - 10361 - 4 + 752 + 1581 + 1211 - 24892 - 237317 - 4 + 3202 + 12977 + 807 @@ -9481,64 +9603,64 @@ 12 - 7 - 20 - 4 + 1 + 2 + 1211 - 21 - 54 - 4 + 2 + 3 + 1615 - 57 - 142 - 4 + 5 + 10 + 1211 - 144 - 207 - 4 + 11 + 13 + 1211 - 233 - 324 - 4 + 13 + 16 + 1211 - 509 - 613 - 4 + 17 + 36 + 1211 - 676 - 790 - 4 + 37 + 39 + 1211 - 1013 - 1226 - 4 + 49 + 107 + 1211 - 1239 - 1949 - 4 + 119 + 177 + 1211 - 2582 - 3985 - 4 + 245 + 323 + 1211 - 4252 - 10115 - 4 + 414 + 1535 + 1211 - 14086 - 154744 - 4 + 2864 + 8533 + 807 @@ -9554,52 +9676,32 @@ 1 2 - 3 + 4441 2 3 - 8 + 4845 3 4 - 10 + 1615 4 - 5 - 6 - - - 5 - 7 - 4 - - - 7 - 8 - 4 - - - 8 - 14 - 3 - - - 15 - 22 - 4 + 11 + 1211 - 23 - 34 - 4 + 11 + 13 + 1211 - 1057 - 5164 - 2 + 14 + 638 + 1211 @@ -9615,22 +9717,22 @@ 1 2 - 65804 + 1170575 2 3 - 133334 + 2867283 3 - 5 - 17889 + 4 + 315760 - 5 - 5144 - 2297 + 4 + 637 + 163129 @@ -9646,17 +9748,17 @@ 1 2 - 137263 + 2711018 2 3 - 75813 + 1642197 3 - 7 - 6248 + 5 + 163533 @@ -9672,22 +9774,22 @@ 1 2 - 65804 + 1170575 2 3 - 133334 + 2867283 3 - 5 - 17889 + 4 + 315760 - 5 - 5144 - 2297 + 4 + 637 + 163129 @@ -9703,22 +9805,12 @@ 1 2 - 3910 + 249943 2 - 3 - 183 - - - 3 - 4 - 782 - - - 4 - 180006 - 288 + 9640 + 8075 @@ -9734,17 +9826,12 @@ 1 2 - 4087 + 250347 2 - 3 - 1033 - - - 3 - 48 - 43 + 33 + 7671 @@ -9760,22 +9847,12 @@ 1 2 - 3910 + 249943 2 - 3 - 183 - - - 3 - 4 - 782 - - - 4 - 180006 - 288 + 9640 + 8075 @@ -9785,19 +9862,19 @@ literals - 270756 + 8555361 expr - 270756 + 8555361 value - 25795 + 75495 raw - 27594 + 77891 @@ -9811,7 +9888,7 @@ 1 2 - 270756 + 8555361 @@ -9827,7 +9904,7 @@ 1 2 - 270756 + 8555361 @@ -9843,37 +9920,42 @@ 1 2 - 14635 + 27811 2 3 - 3291 + 12538 3 4 - 1783 + 6753 4 - 6 - 1931 + 5 + 5276 - 6 - 12 - 1968 + 5 + 8 + 6269 - 12 - 139 - 1935 + 8 + 17 + 5809 + + + 17 + 1233 + 5663 - 139 - 6840 - 252 + 1234 + 3959 + 5373 @@ -9889,12 +9971,12 @@ 1 2 - 24051 + 73171 2 - 5 - 1744 + 4 + 2323 @@ -9910,32 +9992,42 @@ 1 2 - 16038 + 29191 2 3 - 3521 + 13046 3 4 - 1869 + 6777 4 - 7 - 2553 + 5 + 5276 - 7 - 18 - 2129 + 5 + 8 + 6632 - 18 - 6833 - 1484 + 8 + 17 + 5857 + + + 17 + 1239 + 5857 + + + 1240 + 3937 + 5252 @@ -9951,7 +10043,7 @@ 1 2 - 27594 + 77891 @@ -9961,19 +10053,19 @@ constvalues - 43931 + 8093673 expr - 43931 + 8093673 value - 16896 + 27230 exact - 16897 + 27230 @@ -9987,7 +10079,7 @@ 1 2 - 43931 + 8093673 @@ -10003,7 +10095,7 @@ 1 2 - 43931 + 8093673 @@ -10019,17 +10111,37 @@ 1 2 - 14932 + 15539 2 - 4 - 1388 + 3 + 2420 - 4 - 6766 - 576 + 3 + 6 + 2130 + + + 6 + 1243 + 2105 + + + 1243 + 1281 + 2105 + + + 1281 + 1340 + 2057 + + + 1340 + 3974 + 871 @@ -10045,12 +10157,7 @@ 1 2 - 16895 - - - 2 - 3 - 1 + 27230 @@ -10066,17 +10173,37 @@ 1 2 - 14933 + 15539 2 - 4 - 1388 + 3 + 2420 - 4 - 6766 - 576 + 3 + 6 + 2130 + + + 6 + 1243 + 2105 + + + 1243 + 1281 + 2105 + + + 1281 + 1340 + 2057 + + + 1340 + 3974 + 871 @@ -10092,7 +10219,7 @@ 1 2 - 16897 + 27230 @@ -10102,19 +10229,19 @@ fields - 19974 + 995459 id - 19974 + 995459 parent - 9600 + 346065 idx - 57 + 48913 @@ -10128,7 +10255,7 @@ 1 2 - 19974 + 995459 @@ -10144,7 +10271,7 @@ 1 2 - 19974 + 995459 @@ -10160,27 +10287,32 @@ 1 2 - 4790 + 141898 2 3 - 2214 + 76625 3 4 - 1363 + 45908 4 5 - 653 + 32219 5 - 53 - 580 + 7 + 29548 + + + 7 + 290 + 19865 @@ -10196,27 +10328,32 @@ 1 2 - 4790 + 141898 2 3 - 2214 + 76625 3 4 - 1363 + 45908 4 5 - 653 + 32219 5 - 53 - 580 + 7 + 29548 + + + 7 + 290 + 19865 @@ -10232,47 +10369,27 @@ 1 2 - 14 + 38729 2 - 3 - 8 - - - 3 - 6 - 5 + 4 + 1836 - 6 - 11 - 5 + 4 + 12 + 3672 12 - 18 - 5 - - - 19 - 31 - 5 - - - 46 - 105 - 5 - - - 115 - 633 - 5 + 185 + 3672 - 914 - 7063 - 5 + 269 + 1368 + 1001 @@ -10288,47 +10405,27 @@ 1 2 - 14 + 38729 2 - 3 - 8 - - - 3 - 6 - 5 + 4 + 1836 - 6 - 11 - 5 + 4 + 12 + 3672 12 - 18 - 5 - - - 19 - 31 - 5 - - - 46 - 105 - 5 - - - 115 - 633 - 5 + 185 + 3672 - 914 - 7063 - 5 + 269 + 1368 + 1001 @@ -10337,30 +10434,26 @@ - stmts - 73990 + typeparamdecls + 9798 id - 73990 - - - kind - 33 + 9798 parent - 41543 + 8398 idx - 81 + 1399 id - kind + parent 12 @@ -10368,7 +10461,7 @@ 1 2 - 73990 + 9798 @@ -10376,7 +10469,7 @@ id - parent + idx 12 @@ -10384,15 +10477,15 @@ 1 2 - 73990 + 9798 - id - idx + parent + id 12 @@ -10400,85 +10493,61 @@ 1 2 - 73990 + 6999 + + + 2 + 3 + 1399 - kind - id + parent + idx 12 - 2 - 3 - 1 - - - 3 - 4 - 4 - - - 5 - 9 - 3 - - - 18 - 50 - 3 - - - 63 - 72 - 3 - - - 72 - 224 - 3 - - - 301 - 379 - 3 - - - 400 - 615 - 3 - - - 654 - 2136 - 3 + 1 + 2 + 6999 - 3476 - 7606 - 3 + 2 + 3 + 1399 + + + + + + idx + id + + + 12 + - 9225 - 9729 - 3 + 2 + 3 + 699 - 19358 - 19359 - 1 + 12 + 13 + 699 - kind + idx parent @@ -10487,62 +10556,185 @@ 2 3 - 1 + 699 - 3 + 12 + 13 + 699 + + + + + + + + + stmts + 1915917 + + + id + 1915917 + + + kind + 30538 + + + parent + 935456 + + + idx + 33753 + + + + + id + kind + + + 12 + + + 1 + 2 + 1915917 + + + + + + + id + parent + + + 12 + + + 1 + 2 + 1915917 + + + + + + + id + idx + + + 12 + + + 1 + 2 + 1915917 + + + + + + + kind + id + + + 12 + + + 1 + 2 + 1607 + + + 3 4 - 4 + 1607 + + + 4 + 5 + 3214 5 + 6 + 1607 + + + 6 + 7 + 1607 + + + 7 + 8 + 1607 + + + 8 9 - 3 + 1607 - 17 - 35 - 3 + 11 + 12 + 1607 - 47 - 69 - 3 + 13 + 14 + 1607 - 69 - 205 - 3 + 14 + 15 + 1607 + + + 17 + 18 + 1607 + + + 33 + 34 + 1607 - 301 - 367 - 3 + 95 + 96 + 1607 - 385 - 586 - 3 + 106 + 107 + 1607 - 606 - 1154 - 3 + 177 + 178 + 1607 - 1719 - 5672 - 3 + 191 + 192 + 1607 - 5912 - 9226 - 3 + 208 + 209 + 1607 - 18820 - 18821 - 1 + 289 + 290 + 1607 @@ -10550,7 +10742,7 @@ kind - idx + parent 12 @@ -10558,70 +10750,95 @@ 1 2 - 1 + 1607 2 3 - 5 + 1607 3 + 4 + 1607 + + + 4 5 - 2 + 4821 5 - 8 - 3 + 6 + 1607 - 8 - 9 - 3 + 6 + 7 + 1607 - 9 + 7 + 8 + 1607 + + + 12 13 - 3 + 1607 13 - 16 - 3 + 14 + 1607 - 16 - 17 - 2 + 15 + 16 + 1607 17 - 27 - 3 + 18 + 1607 - 27 - 33 - 3 + 75 + 76 + 1607 - 44 - 47 - 3 + 88 + 89 + 1607 - 55 - 82 - 2 + 92 + 93 + 1607 + + + 106 + 107 + 1607 + + + 154 + 155 + 1607 + + + 274 + 275 + 1607 - parent - id + kind + idx 12 @@ -10629,22 +10846,57 @@ 1 2 - 29362 + 3214 2 3 - 6137 + 1607 3 + 4 + 9643 + + + 4 5 - 3650 + 3214 5 - 82 - 2394 + 6 + 1607 + + + 9 + 10 + 1607 + + + 12 + 13 + 1607 + + + 13 + 14 + 1607 + + + 15 + 16 + 3214 + + + 16 + 17 + 1607 + + + 20 + 21 + 1607 @@ -10652,7 +10904,7 @@ parent - kind + id 12 @@ -10660,22 +10912,22 @@ 1 2 - 31418 + 622030 2 3 - 5760 + 162338 3 5 - 3597 + 85187 5 - 11 - 768 + 22 + 65899 @@ -10683,7 +10935,7 @@ parent - idx + kind 12 @@ -10691,30 +10943,30 @@ 1 2 - 29362 + 683108 2 3 - 6137 + 155909 3 - 5 - 3650 + 6 + 72329 - 5 - 82 - 2394 + 6 + 8 + 24109 - idx - id + parent + idx 12 @@ -10722,52 +10974,22 @@ 1 2 - 6 + 622030 2 3 - 20 - - - 5 - 6 - 3 + 162338 - 7 - 8 - 11 - - - 10 - 15 - 7 - - - 15 - 27 - 7 - - - 27 - 70 - 7 - - - 85 - 262 - 7 - - - 314 - 1279 - 7 + 3 + 5 + 85187 - 1720 - 24879 - 6 + 5 + 22 + 65899 @@ -10775,7 +10997,7 @@ idx - kind + id 12 @@ -10783,52 +11005,87 @@ 1 2 - 12 + 1607 - 2 - 3 - 22 + 6 + 7 + 4821 - 3 - 5 - 7 - - - 5 - 6 - 6 + 7 + 8 + 3214 - 6 - 7 - 4 + 8 + 9 + 1607 - 7 - 9 - 7 + 10 + 11 + 1607 - 9 - 13 - 7 + 11 + 12 + 3214 - 13 + 17 18 - 7 + 1607 + + + 19 + 20 + 1607 20 - 28 - 6 + 21 + 1607 + + + 25 + 26 + 1607 29 - 34 - 3 + 30 + 1607 + + + 37 + 38 + 1607 + + + 41 + 42 + 1607 + + + 98 + 99 + 1607 + + + 167 + 168 + 1607 + + + 331 + 332 + 1607 + + + 335 + 336 + 1607 @@ -10836,7 +11093,7 @@ idx - parent + kind 12 @@ -10844,52 +11101,163 @@ 1 2 - 6 + 3214 2 3 - 20 + 1607 + + + 3 + 4 + 3214 + + + 4 + 5 + 4821 5 6 - 3 + 4821 + + + 6 + 7 + 1607 7 8 - 11 + 3214 + + + 8 + 9 + 1607 + + + 9 + 10 + 3214 10 + 11 + 1607 + + + 12 + 13 + 1607 + + + 14 15 - 7 + 1607 - 15 - 27 - 7 + 16 + 17 + 1607 + + + + + + idx + parent + + + 12 + - 27 - 70 - 7 + 1 + 2 + 1607 - 85 - 262 - 7 + 6 + 7 + 4821 + + + 7 + 8 + 3214 + + + 8 + 9 + 1607 + + + 10 + 11 + 1607 + + + 11 + 12 + 3214 + + + 17 + 18 + 1607 + + + 19 + 20 + 1607 + + + 20 + 21 + 1607 + + + 25 + 26 + 1607 + + + 29 + 30 + 1607 + + + 37 + 38 + 1607 + + + 41 + 42 + 1607 + + + 98 + 99 + 1607 + + + 167 + 168 + 1607 - 314 - 1279 - 7 + 331 + 332 + 1607 - 1720 - 24879 - 6 + 335 + 336 + 1607 @@ -10899,23 +11267,23 @@ decls - 8690 + 443378 id - 8690 + 443378 kind - 5 + 528 parent - 1951 + 123356 idx - 226 + 59475 @@ -10929,7 +11297,7 @@ 1 2 - 8690 + 443378 @@ -10945,7 +11313,7 @@ 1 2 - 8690 + 443378 @@ -10961,7 +11329,7 @@ 1 2 - 8690 + 443378 @@ -10975,29 +11343,34 @@ 12 - 280 - 281 - 1 + 2 + 3 + 88 + + + 45 + 46 + 88 - 479 - 480 - 1 + 208 + 209 + 88 - 1349 - 1350 - 1 + 421 + 422 + 88 - 1769 - 1770 - 1 + 1140 + 1141 + 88 - 4813 - 4814 - 1 + 3216 + 3217 + 88 @@ -11011,29 +11384,34 @@ 12 - 196 - 197 - 1 + 2 + 3 + 88 + + + 34 + 35 + 88 - 336 - 337 - 1 + 100 + 101 + 88 - 478 - 479 - 1 + 421 + 422 + 88 - 483 - 484 - 1 + 547 + 548 + 88 - 1566 - 1567 - 1 + 882 + 883 + 88 @@ -11047,29 +11425,29 @@ 12 - 2 - 3 - 1 + 1 + 2 + 176 - 39 - 40 - 1 + 15 + 16 + 88 - 105 - 106 - 1 + 26 + 27 + 88 - 219 - 220 - 1 + 237 + 238 + 88 - 225 - 226 - 1 + 675 + 676 + 88 @@ -11085,27 +11463,27 @@ 1 2 - 1460 + 80886 2 - 6 - 149 + 3 + 16476 - 6 - 12 - 155 + 3 + 5 + 9956 - 12 - 36 - 147 + 5 + 12 + 9956 - 36 - 227 - 40 + 12 + 676 + 6079 @@ -11121,27 +11499,17 @@ 1 2 - 1463 + 83089 2 3 - 111 + 31632 3 - 4 - 185 - - - 4 - 5 - 141 - - - 5 6 - 51 + 8634 @@ -11157,27 +11525,27 @@ 1 2 - 1460 + 80886 2 - 6 - 149 + 3 + 16476 - 6 - 12 - 155 + 3 + 5 + 9956 - 12 - 36 - 147 + 5 + 12 + 9956 - 36 - 227 - 40 + 12 + 676 + 6079 @@ -11193,57 +11561,22 @@ 1 2 - 4 + 38592 2 3 - 30 + 13833 3 - 4 - 18 - - - 4 - 5 - 66 - - - 5 - 6 - 2 - - - 6 - 7 - 31 - - - 7 - 11 - 17 - - - 11 - 31 - 17 - - - 31 - 65 - 17 - - - 67 - 275 - 17 + 17 + 4581 - 323 - 1952 - 7 + 19 + 1401 + 2467 @@ -11259,27 +11592,17 @@ 1 2 - 7 + 38592 2 3 - 113 + 18503 3 - 4 - 69 - - - 4 - 5 - 35 - - - 5 - 6 - 2 + 7 + 2379 @@ -11295,57 +11618,22 @@ 1 2 - 4 + 38592 2 3 - 30 + 13833 3 - 4 - 18 + 17 + 4581 - 4 - 5 - 66 - - - 5 - 6 - 2 - - - 6 - 7 - 31 - - - 7 - 11 - 17 - - - 11 - 31 - 17 - - - 31 - 65 - 17 - - - 67 - 275 - 17 - - - 323 - 1952 - 7 + 19 + 1401 + 2467 @@ -11355,23 +11643,23 @@ specs - 7889 + 397829 id - 7889 + 397829 kind - 4 + 5234 parent - 3877 + 193680 idx - 108 + 31407 @@ -11385,7 +11673,7 @@ 1 2 - 7889 + 397829 @@ -11401,7 +11689,7 @@ 1 2 - 7889 + 397829 @@ -11417,7 +11705,7 @@ 1 2 - 7889 + 397829 @@ -11431,24 +11719,19 @@ 12 - 16 - 17 - 1 - - - 1349 - 1350 - 1 + 18 + 19 + 1744 - 3056 - 3057 - 1 + 70 + 71 + 1744 - 3468 - 3469 - 1 + 140 + 141 + 1744 @@ -11462,24 +11745,19 @@ 12 - 16 - 17 - 1 - - - 479 - 480 - 1 + 18 + 19 + 1744 - 1333 - 1334 - 1 + 23 + 24 + 1744 - 2049 - 2050 - 1 + 70 + 71 + 1744 @@ -11495,22 +11773,12 @@ 1 2 - 1 + 3489 - 14 - 15 - 1 - - - 36 - 37 - 1 - - - 108 - 109 - 1 + 18 + 19 + 1744 @@ -11526,22 +11794,22 @@ 1 2 - 3206 + 157037 2 - 6 - 343 + 5 + 15703 6 - 18 - 298 + 11 + 15703 - 18 - 109 - 30 + 14 + 19 + 5234 @@ -11557,7 +11825,7 @@ 1 2 - 3877 + 193680 @@ -11573,22 +11841,22 @@ 1 2 - 3206 + 157037 2 - 6 - 343 + 5 + 15703 6 - 18 - 298 + 11 + 15703 - 18 - 109 - 30 + 14 + 19 + 5234 @@ -11604,32 +11872,47 @@ 1 2 - 53 + 6979 - 2 - 3 - 19 + 3 + 4 + 6979 - 3 - 6 - 9 + 4 + 5 + 3489 - 6 - 28 - 9 + 9 + 10 + 3489 - 30 - 156 - 9 + 12 + 13 + 3489 + + + 14 + 15 + 1744 + + + 16 + 17 + 1744 + + + 21 + 22 + 1744 - 188 - 3878 - 9 + 111 + 112 + 1744 @@ -11645,22 +11928,12 @@ 1 2 - 72 - - - 2 - 3 - 22 + 29662 3 4 - 13 - - - 4 - 5 - 1 + 1744 @@ -11676,32 +11949,47 @@ 1 2 - 53 + 6979 - 2 - 3 - 19 + 3 + 4 + 6979 - 3 - 6 - 9 + 4 + 5 + 3489 - 6 - 28 - 9 + 9 + 10 + 3489 - 30 - 156 - 9 + 12 + 13 + 3489 + + + 14 + 15 + 1744 + + + 16 + 17 + 1744 + + + 21 + 22 + 1744 - 188 - 3878 - 9 + 111 + 112 + 1744 @@ -11711,15 +11999,15 @@ scopes - 36775 + 1519778 id - 36775 + 1519778 kind - 3 + 5234 @@ -11733,7 +12021,7 @@ 1 2 - 36775 + 1519778 @@ -11749,17 +12037,17 @@ 1 2 - 1 + 1744 - 346 - 347 - 1 + 340 + 341 + 1744 - 36428 - 36429 - 1 + 530 + 531 + 1744 @@ -11769,15 +12057,15 @@ scopenesting - 36774 + 1518033 inner - 36774 + 1518033 outer - 21713 + 397829 @@ -11791,7 +12079,7 @@ 1 2 - 36774 + 1518033 @@ -11807,22 +12095,22 @@ 1 2 - 16964 + 280923 2 3 - 2474 + 71539 3 - 7 - 1759 + 5 + 34897 - 7 - 347 - 516 + 5 + 531 + 10469 @@ -11832,15 +12120,15 @@ scopenodes - 36428 + 919952 node - 36428 + 919952 scope - 36428 + 919952 @@ -11854,7 +12142,7 @@ 1 2 - 36428 + 919952 @@ -11870,7 +12158,7 @@ 1 2 - 36428 + 919952 @@ -11880,19 +12168,19 @@ objects - 84909 + 260849313 id - 84909 + 260849313 kind - 9 + 32863 name - 30576 + 153297959 @@ -11906,7 +12194,7 @@ 1 2 - 84909 + 260849313 @@ -11922,7 +12210,7 @@ 1 2 - 84909 + 260849313 @@ -11938,47 +12226,42 @@ 4 5 - 1 - - - 18 - 19 - 1 + 4107 - 20 - 21 - 1 + 22 + 23 + 4107 - 49 - 50 - 1 + 26 + 27 + 4107 - 3468 - 3469 - 1 + 33 + 34 + 4107 - 3602 - 3603 - 1 + 3147 + 3148 + 4107 - 8857 - 8858 - 1 + 17646 + 17647 + 4107 - 17793 - 17794 - 1 + 19579 + 19580 + 4107 - 51098 - 51099 - 1 + 23041 + 23042 + 4107 @@ -11994,47 +12277,42 @@ 4 5 - 1 - - - 18 - 19 - 1 + 4107 - 20 - 21 - 1 + 22 + 23 + 4107 - 38 - 39 - 1 + 23 + 24 + 4107 - 203 - 204 - 1 + 26 + 27 + 4107 - 3004 - 3005 - 1 + 2654 + 2655 + 4107 - 8418 - 8419 - 1 + 7829 + 7830 + 4107 - 10132 - 10133 - 1 + 10951 + 10952 + 4107 - 10913 - 10914 - 1 + 17127 + 17128 + 4107 @@ -12050,22 +12328,17 @@ 1 2 - 25286 + 124595415 2 3 - 2613 + 20954870 3 - 20 - 2304 - - - 20 - 2222 - 373 + 1189 + 7747674 @@ -12081,12 +12354,12 @@ 1 2 - 28809 + 148692899 2 6 - 1767 + 4605059 @@ -12096,15 +12369,15 @@ objectscopes - 54774 + 140464590 object - 54774 + 140464590 scope - 13947 + 1068078 @@ -12118,7 +12391,7 @@ 1 2 - 54774 + 140464590 @@ -12134,32 +12407,72 @@ 1 2 - 7112 + 73943 2 3 - 2972 + 57511 3 4 - 1274 + 69835 4 - 6 - 1264 + 7 + 86267 - 6 - 15 - 1055 + 7 + 13 + 82159 - 15 - 2694 - 270 + 13 + 18 + 86267 + + + 18 + 24 + 86267 + + + 24 + 35 + 86267 + + + 35 + 48 + 82159 + + + 48 + 62 + 82159 + + + 63 + 106 + 82159 + + + 108 + 186 + 82159 + + + 206 + 689 + 82159 + + + 711 + 10035 + 28755 @@ -12169,15 +12482,15 @@ objecttypes - 84907 + 258988392 object - 84907 + 258988392 tp - 13462 + 47738981 @@ -12191,7 +12504,7 @@ 1 2 - 84907 + 258988392 @@ -12207,32 +12520,32 @@ 1 2 - 7893 + 29216043 2 3 - 2114 + 7813401 3 4 - 892 + 3039914 4 7 - 1190 + 3730057 7 - 25 - 1011 + 53 + 3582169 - 25 - 4267 - 362 + 53 + 13253 + 357395 @@ -12242,15 +12555,15 @@ methodreceivers - 9873 + 70035448 method - 9873 + 70035448 receiver - 9873 + 70035448 @@ -12264,7 +12577,7 @@ 1 2 - 9873 + 70035448 @@ -12280,7 +12593,7 @@ 1 2 - 9873 + 70035448 @@ -12290,15 +12603,15 @@ fieldstructs - 10934 + 41038845 field - 10934 + 41038845 struct - 2408 + 8035233 @@ -12312,7 +12625,7 @@ 1 2 - 10934 + 41038845 @@ -12328,42 +12641,42 @@ 1 2 - 260 + 936622 2 3 - 677 + 2033456 3 4 - 468 + 1425473 4 5 - 292 + 1031106 5 6 - 194 + 640846 6 8 - 208 + 694250 8 - 13 - 199 + 12 + 681926 - 13 - 65 - 110 + 12 + 80 + 591550 @@ -12373,15 +12686,15 @@ methodhosts - 838 + 8181678 method - 699 + 5569613 host - 258 + 1579104 @@ -12395,17 +12708,27 @@ 1 2 - 625 + 4430215 2 3 - 56 + 509500 3 - 16 - 18 + 4 + 122140 + + + 4 + 5 + 439706 + + + 5 + 28 + 68049 @@ -12421,55 +12744,60 @@ 1 2 - 99 + 645600 2 3 - 56 + 272199 3 4 - 37 + 158782 4 5 - 20 + 90733 5 - 6 - 15 + 8 + 130864 - 6 + 8 11 - 21 + 123885 11 - 53 - 10 + 19 + 118650 - - - + + 19 + 293 + 38387 + + + + defs - 40703 + 1417649 ident - 40703 + 1417649 object - 40490 + 1388768 @@ -12483,7 +12811,7 @@ 1 2 - 40703 + 1417649 @@ -12499,12 +12827,12 @@ 1 2 - 40383 + 1370071 2 - 15 - 107 + 7 + 18697 @@ -12514,15 +12842,15 @@ uses - 195902 + 4531459 ident - 195902 + 4531459 object - 41616 + 802598 @@ -12536,7 +12864,7 @@ 1 2 - 195902 + 4531459 @@ -12552,37 +12880,37 @@ 1 2 - 15493 + 294651 2 3 - 9727 + 231900 3 4 - 5056 + 77848 4 5 - 2974 + 50873 5 - 7 - 3203 + 8 + 68403 - 7 - 14 - 3336 + 8 + 21 + 60890 - 14 - 6833 - 1827 + 21 + 3870 + 18031 @@ -12592,15 +12920,15 @@ types - 18132 + 64230277 id - 18132 + 64230277 kind - 37 + 68049 @@ -12614,7 +12942,7 @@ 1 2 - 18132 + 64230277 @@ -12630,27 +12958,32 @@ 1 2 - 25 + 41876 - 10 - 30 - 3 + 12 + 25 + 5234 + + + 34 + 143 + 5234 - 247 - 431 - 3 + 158 + 413 + 5234 - 559 - 1904 - 3 + 938 + 4626 + 5234 - 2409 - 8011 - 3 + 4676 + 16593 + 5234 @@ -12660,15 +12993,15 @@ type_of - 397965 + 8829217 expr - 397965 + 8829217 tp - 8687 + 26916 @@ -12682,7 +13015,7 @@ 1 2 - 397965 + 8829217 @@ -12698,57 +13031,52 @@ 1 2 - 2019 + 4744 2 3 - 967 + 5567 3 4 - 711 + 2154 4 5 - 388 + 2444 5 7 - 780 + 2420 7 10 - 772 + 2105 10 15 - 734 + 2033 15 - 23 - 700 - - - 23 - 43 - 652 + 26 + 2105 - 43 - 143 - 652 + 26 + 90 + 2081 - 143 - 46949 - 312 + 90 + 331257 + 1258 @@ -12758,15 +13086,15 @@ typename - 3567 + 13128374 tp - 3567 + 13128374 name - 2983 + 10010298 @@ -12780,7 +13108,7 @@ 1 2 - 3567 + 13128374 @@ -12796,17 +13124,17 @@ 1 2 - 2660 + 8108394 2 - 4 - 267 + 3 + 1210937 - 4 - 17 - 56 + 3 + 26 + 690967 @@ -12816,15 +13144,15 @@ key_type - 430 + 866786 map - 430 + 866786 tp - 149 + 283451 @@ -12838,7 +13166,7 @@ 1 2 - 430 + 866786 @@ -12854,27 +13182,27 @@ 1 2 - 106 + 201291 2 3 - 17 + 28755 3 6 - 12 + 24647 - 6 + 9 13 - 12 + 24647 - 20 - 136 - 2 + 65 + 66 + 4107 @@ -12884,15 +13212,15 @@ element_type - 1412 + 4132640 container - 1412 + 4132640 tp - 916 + 2382635 @@ -12906,7 +13234,7 @@ 1 2 - 1412 + 4132640 @@ -12922,17 +13250,17 @@ 1 2 - 773 + 2008808 2 3 - 94 + 250587 3 - 68 - 49 + 78 + 123239 @@ -12942,15 +13270,15 @@ base_type - 1903 + 8158995 ptr - 1903 + 8158995 tp - 1903 + 8158995 @@ -12964,7 +13292,7 @@ 1 2 - 1903 + 8158995 @@ -12980,7 +13308,7 @@ 1 2 - 1903 + 8158995 @@ -12990,15 +13318,15 @@ underlying_type - 3567 + 12852686 named - 3567 + 12852686 tp - 2755 + 9731120 @@ -13012,7 +13340,7 @@ 1 2 - 3567 + 12852686 @@ -13028,12 +13356,75 @@ 1 2 - 2582 + 8959889 + + + 2 + 9 + 732843 + + + 9 + 252 + 38387 + + + + + + + + + alias_rhs + 660784 + + + alias + 660784 + + + tp + 320067 + + + + + alias + tp + + + 12 + + + 1 + 2 + 660784 + + + + + + + tp + alias + + + 12 + + + 1 + 2 + 284886 2 - 154 - 173 + 4 + 28679 + + + 4 + 348 + 6500 @@ -13043,23 +13434,23 @@ component_types - 36474 + 130391792 parent - 11221 + 37395056 index - 74 + 361503 name - 5540 + 21435505 tp - 4295 + 15006496 @@ -13073,37 +13464,37 @@ 1 2 - 1198 + 4761163 2 3 - 3864 + 10956016 3 4 - 2953 + 9378547 4 5 - 1446 + 5356822 5 6 - 780 + 3076886 6 - 13 - 860 + 11 + 2982402 - 13 - 65 - 120 + 11 + 80 + 883218 @@ -13119,22 +13510,27 @@ 1 2 - 8936 + 29495386 2 3 - 733 + 2230639 3 - 6 - 1008 + 5 + 2768787 - 6 - 64 - 544 + 5 + 39 + 2805758 + + + 39 + 80 + 94483 @@ -13150,32 +13546,32 @@ 1 2 - 2194 + 6646732 2 3 - 4537 + 13724803 3 4 - 2475 + 9657890 4 5 - 1110 + 4284636 5 12 - 848 + 2818082 12 - 52 - 57 + 34 + 262911 @@ -13191,62 +13587,62 @@ 1 2 - 15 + 65727 2 - 4 - 6 + 3 + 32863 - 4 - 7 - 4 + 3 + 5 + 28755 - 8 - 13 - 6 + 5 + 11 + 28755 - 13 - 18 - 6 + 12 + 23 + 28755 - 18 - 28 - 6 + 23 + 31 + 28755 - 29 - 49 - 6 + 34 + 50 + 28755 - 52 - 82 - 6 + 51 + 75 + 28755 - 89 - 193 - 6 + 79 + 149 + 28755 - 232 - 824 - 6 + 169 + 511 + 28755 - 1505 - 6458 - 6 + 778 + 5506 + 28755 - 10274 - 10275 - 1 + 8121 + 8122 + 4107 @@ -13262,52 +13658,52 @@ 1 2 - 22 + 94483 2 - 6 - 6 + 3 + 32863 - 6 - 9 - 6 + 4 + 6 + 28755 - 9 - 16 - 4 + 6 + 14 + 32863 - 16 - 24 - 6 + 17 + 22 + 28755 - 24 - 37 - 6 + 22 + 34 + 28755 - 39 - 61 - 6 + 35 + 55 + 28755 - 69 - 116 - 6 + 58 + 102 + 28755 - 153 - 379 - 6 + 110 + 277 + 28755 - 475 - 1260 - 6 + 331 + 1018 + 28755 @@ -13323,62 +13719,62 @@ 1 2 - 15 + 65727 2 - 4 - 6 + 3 + 32863 - 4 - 7 - 6 + 3 + 5 + 32863 - 7 - 11 - 5 + 5 + 7 + 24647 - 11 - 14 - 5 + 9 + 15 + 28755 15 19 - 6 + 28755 20 - 27 - 5 + 25 + 28755 - 29 - 44 - 6 + 25 + 37 + 28755 - 45 - 72 - 6 + 38 + 59 + 28755 - 86 - 161 - 6 + 67 + 149 + 28755 - 224 - 1436 - 6 + 179 + 1225 + 28755 - 1878 - 2153 - 2 + 1559 + 1560 + 4107 @@ -13394,22 +13790,22 @@ 1 2 - 3941 + 13843935 2 3 - 851 + 4633815 3 - 6 - 484 + 5 + 1733572 - 6 - 8917 - 264 + 5 + 7182 + 1224181 @@ -13425,22 +13821,22 @@ 1 2 - 4284 + 16793473 2 3 - 737 + 2998834 3 - 6 - 440 + 12 + 1618549 - 6 - 28 - 79 + 12 + 31 + 24647 @@ -13456,22 +13852,17 @@ 1 2 - 4599 + 18029979 2 3 - 518 + 2099184 3 - 21 - 416 - - - 21 - 3014 - 7 + 2295 + 1306341 @@ -13487,32 +13878,32 @@ 1 2 - 2055 + 7665514 2 3 - 812 + 2748247 3 4 - 408 + 1207749 4 6 - 394 + 1277585 6 - 11 - 342 + 12 + 1199533 - 11 - 2187 - 284 + 12 + 2060 + 907866 @@ -13528,32 +13919,27 @@ 1 2 - 2111 + 8893803 2 3 - 859 + 2863270 3 4 - 580 + 1409041 4 - 5 - 352 - - - 5 - 10 - 328 + 6 + 1146129 - 10 - 51 - 65 + 6 + 68 + 694250 @@ -13569,22 +13955,22 @@ 1 2 - 2897 + 11165523 2 3 - 865 + 2193668 3 - 5 - 343 + 6 + 1187209 - 5 - 738 - 190 + 6 + 719 + 460095 @@ -13593,38 +13979,26 @@ - array_length - 293 + struct_tags + 41038845 - tp - 293 + parent + 8035233 - len - 103 + index + 324531 + + + tag + 747654 - tp - len - - - 12 - - - 1 - 2 - 293 - - - - - - - len - tp + parent + index 12 @@ -13632,56 +14006,50 @@ 1 2 - 62 + 936622 2 3 - 15 + 2033456 3 4 - 7 + 1425473 4 - 7 - 8 + 5 + 1031106 - 7 - 15 - 7 + 5 + 6 + 640846 - 15 - 26 - 4 + 6 + 8 + 694250 + + + 8 + 12 + 681926 + + + 12 + 80 + 591550 - - - - type_objects - 3567 - - - tp - 3567 - - - object - 3567 - - - - tp - object + parent + tag 12 @@ -13689,15 +14057,20 @@ 1 2 - 3567 + 7891453 + + + 2 + 36 + 143779 - object - tp + index + parent 12 @@ -13705,39 +14078,70 @@ 1 2 - 3567 + 57511 + + + 2 + 3 + 32863 + + + 4 + 5 + 24647 + + + 6 + 11 + 24647 + + + 12 + 22 + 24647 + + + 22 + 25 + 24647 + + + 26 + 36 + 24647 + + + 39 + 55 + 24647 + + + 58 + 93 + 24647 + + + 105 + 220 + 24647 + + + 252 + 887 + 24647 + + + 1233 + 1957 + 12323 - - - - packages - 346 - - - id - 346 - - - name - 281 - - - path - 346 - - - scope - 346 - - - - id - name + index + tag 12 @@ -13745,15 +14149,35 @@ 1 2 - 346 + 180751 + + + 2 + 3 + 73943 + + + 3 + 7 + 24647 + + + 9 + 15 + 24647 + + + 15 + 29 + 20539 - id - path + tag + parent 12 @@ -13761,15 +14185,25 @@ 1 2 - 346 + 673710 + + + 2 + 4 + 61619 + + + 4 + 1931 + 12323 - id - scope + tag + index 12 @@ -13777,15 +14211,40 @@ 1 2 - 346 + 690142 + + + 2 + 80 + 57511 + + + + interface_private_method_ids + 439555 + + + interface + 156103 + + + index + 94483 + + + id + 386151 + + + - name - id + interface + index 12 @@ -13793,25 +14252,45 @@ 1 2 - 255 + 53403 2 3 - 23 + 53403 3 - 40 - 3 + 4 + 12323 + + + 4 + 5 + 8215 + + + 5 + 6 + 12323 + + + 7 + 10 + 12323 + + + 12 + 13 + 4107 - name - path + interface + id 12 @@ -13819,25 +14298,45 @@ 1 2 - 255 + 53403 2 3 - 23 + 53403 3 - 40 - 3 + 4 + 12323 + + + 4 + 5 + 8215 + + + 5 + 6 + 12323 + + + 7 + 10 + 12323 + + + 12 + 13 + 4107 - name - scope + index + interface 12 @@ -13845,24 +14344,39 @@ 1 2 - 255 + 24647 2 3 - 23 + 28755 3 - 40 - 3 + 4 + 16431 + + + 5 + 10 + 8215 + + + 10 + 14 + 8215 + + + 18 + 21 + 8215 - path + index id @@ -13871,31 +14385,40 @@ 1 2 - 346 + 32863 - - - - - - path - name - - - 12 - - 1 - 2 - 346 + 2 + 3 + 28755 + + + 3 + 4 + 8215 + + + 5 + 10 + 8215 + + + 10 + 14 + 8215 + + + 18 + 21 + 8215 - path - scope + id + interface 12 @@ -13903,15 +14426,25 @@ 1 2 - 346 + 345071 + + + 2 + 3 + 28755 + + + 3 + 4 + 12323 - scope - id + id + index 12 @@ -13919,15 +14452,36 @@ 1 2 - 346 + 361503 + + + 2 + 4 + 24647 - - scope - name + + + + array_length + 1528173 + + + tp + 1528173 + + + len + 488851 + + + + + tp + len 12 @@ -13935,15 +14489,15 @@ 1 2 - 346 + 1528173 - scope - path + len + tp 12 @@ -13951,7 +14505,37 @@ 1 2 - 346 + 258803 + + + 2 + 3 + 90375 + + + 3 + 4 + 24647 + + + 4 + 5 + 24647 + + + 5 + 7 + 41079 + + + 8 + 15 + 36971 + + + 16 + 28 + 12323 @@ -13960,30 +14544,78 @@ - modexprs - 9 + type_objects + 13128374 + + + tp + 13128374 + + + object + 13128374 + + + + + tp + object + + + 12 + + + 1 + 2 + 13128374 + + + + + + + object + tp + + + 12 + + + 1 + 2 + 13128374 + + + + + + + + + packages + 924779 id - 9 + 924779 - kind - 4 + name + 570571 - parent - 2 + path + 924779 - idx - 6 + scope + 924779 id - kind + name 12 @@ -13991,7 +14623,7 @@ 1 2 - 9 + 924779 @@ -13999,7 +14631,7 @@ id - parent + path 12 @@ -14007,7 +14639,7 @@ 1 2 - 9 + 924779 @@ -14015,7 +14647,7 @@ id - idx + scope 12 @@ -14023,14 +14655,14 @@ 1 2 - 9 + 924779 - kind + name id @@ -14039,20 +14671,25 @@ 1 2 - 3 + 479838 - 6 - 7 - 1 + 2 + 3 + 57580 + + + 3 + 53 + 33152 - kind - parent + name + path 12 @@ -14060,20 +14697,25 @@ 1 2 - 3 + 479838 2 3 - 1 + 57580 + + + 3 + 53 + 33152 - kind - idx + name + scope 12 @@ -14081,82 +14723,72 @@ 1 2 - 3 + 479838 - 5 - 6 - 1 + 2 + 3 + 57580 + + + 3 + 53 + 33152 - parent + path id 12 - 3 - 4 - 1 - - - 6 - 7 - 1 + 1 + 2 + 924779 - parent - kind + path + name 12 - 2 - 3 - 1 - - - 3 - 4 - 1 + 1 + 2 + 924779 - parent - idx + path + scope 12 - 3 - 4 - 1 - - - 6 - 7 - 1 + 1 + 2 + 924779 - idx + scope id @@ -14165,20 +14797,15 @@ 1 2 - 3 - - - 2 - 3 - 3 + 924779 - idx - kind + scope + name 12 @@ -14186,20 +14813,15 @@ 1 2 - 4 - - - 2 - 3 - 2 + 924779 - idx - parent + scope + path 12 @@ -14207,12 +14829,7 @@ 1 2 - 3 - - - 2 - 3 - 3 + 924779 @@ -14221,26 +14838,30 @@ - modtokens - 13 + modexprs + 259985 - token - 13 + id + 259985 + + + kind + 6979 parent - 7 + 54090 idx - 2 + 24428 - token - parent + id + kind 12 @@ -14248,15 +14869,15 @@ 1 2 - 13 + 259985 - token - idx + id + parent 12 @@ -14264,15 +14885,15 @@ 1 2 - 13 + 259985 - parent - token + id + idx 12 @@ -14280,143 +14901,134 @@ 1 2 - 1 - - - 2 - 3 - 6 + 259985 - parent - idx + kind + id 12 - 1 - 2 - 1 + 13 + 14 + 5234 - 2 - 3 - 6 + 110 + 111 + 1744 - idx - token + kind + parent 12 - 6 - 7 - 1 + 12 + 13 + 1744 - 7 - 8 - 1 + 13 + 14 + 3489 + + + 31 + 32 + 1744 - idx - parent + kind + idx 12 - 6 - 7 - 1 + 1 + 2 + 1744 - 7 - 8 - 1 + 2 + 3 + 1744 + + + 5 + 6 + 1744 + + + 13 + 14 + 1744 - - - - errors - 0 - - - id - 0 - - - kind - 0 - - - msg - 0 - - - rawpos - 0 - - - file - 0 - - - line - 0 - - - col - 0 - - - package - 0 - - - idx - 0 - - - - id - kind + parent + id 12 - 1 - 2 - 1 + 2 + 3 + 8724 + + + 3 + 4 + 19193 + + + 4 + 5 + 6979 + + + 5 + 6 + 10469 + + + 11 + 12 + 5234 + + + 13 + 15 + 3489 - id - msg + parent + kind 12 @@ -14424,31 +15036,66 @@ 1 2 - 1 + 10469 + + + 2 + 3 + 20938 + + + 3 + 4 + 22683 - id - rawpos + parent + idx 12 - 1 - 2 - 1 + 2 + 3 + 8724 + + + 3 + 4 + 19193 + + + 4 + 5 + 6979 + + + 5 + 6 + 10469 + + + 11 + 12 + 5234 + + + 13 + 15 + 3489 - id - file + idx + id 12 @@ -14456,15 +15103,45 @@ 1 2 - 1 + 1744 + + + 2 + 3 + 3489 + + + 5 + 6 + 10469 + + + 11 + 12 + 1744 + + + 15 + 16 + 1744 + + + 26 + 27 + 1744 + + + 31 + 32 + 3489 - id - line + idx + kind 12 @@ -14472,15 +15149,25 @@ 1 2 - 1 + 13958 + + + 2 + 3 + 8724 + + + 3 + 4 + 1744 - id - col + idx + parent 12 @@ -14488,15 +15175,65 @@ 1 2 - 1 + 1744 + + + 2 + 3 + 3489 + + + 5 + 6 + 10469 + + + 11 + 12 + 1744 + + + 15 + 16 + 1744 + + + 26 + 27 + 1744 + + + 31 + 32 + 3489 + + + + modtokens + 410043 + + + token + 164017 + + + parent + 214618 + + + idx + 5234 + + + - id - package + token + parent 12 @@ -14504,14 +15241,34 @@ 1 2 - 1 + 76774 + + + 2 + 3 + 54090 + + + 3 + 5 + 13958 + + + 5 + 9 + 13958 + + + 15 + 19 + 5234 - id + token idx @@ -14520,664 +15277,3123 @@ 1 2 - 1 + 162272 + + + 2 + 3 + 1744 - kind - id - - - 12 - - - - - - kind - msg + parent + token 12 - - - - - - kind - rawpos - - - 12 - - - - - - kind - file - - - 12 - - - - - - kind - line - - - 12 - + + + 1 + 2 + 22683 + + + 2 + 3 + 188445 + + + 3 + 4 + 3489 + + - kind - col + parent + idx 12 - + + + 1 + 2 + 22683 + + + 2 + 3 + 188445 + + + 3 + 4 + 3489 + + - kind - package + idx + token 12 - + + + 2 + 3 + 1744 + + + 40 + 41 + 1744 + + + 53 + 54 + 1744 + + - kind - idx + idx + parent 12 - + + + 2 + 3 + 1744 + + + 110 + 111 + 1744 + + + 123 + 124 + 1744 + + + + + + errors + 232496 + + + id + 232496 + + + kind + 642 + + + msg + 55713 + + + rawpos + 155997 + + + file + 56356 + + + line + 21856 + + + col + 10071 + + + package + 16928 + + + idx + 89355 + + + - msg - id + id + kind 12 - + + + 1 + 2 + 232496 + + - msg - kind + id + msg 12 - + + + 1 + 2 + 232496 + + - msg + id rawpos 12 - + + + 1 + 2 + 232496 + + - msg + id file 12 - + + + 1 + 2 + 232496 + + - msg + id line 12 - + + + 1 + 2 + 232496 + + - msg + id col 12 - + + + 1 + 2 + 232496 + + - msg + id package 12 - + + + 1 + 2 + 232496 + + - msg + id idx 12 - + + + 1 + 2 + 232496 + + - rawpos + kind id 12 - + + + 16 + 17 + 214 + + + 45 + 46 + 214 + + + 1024 + 1025 + 214 + + - rawpos - kind + kind + msg 12 - + + + 10 + 11 + 214 + + + 41 + 42 + 214 + + + 210 + 211 + 214 + + - rawpos - msg + kind + rawpos 12 - - - - + + + 9 + 10 + 214 + + + 39 + 40 + 214 + + + 680 + 681 + 214 + + + + + - rawpos + kind file 12 - + + + 4 + 5 + 214 + + + 26 + 27 + 214 + + + 262 + 263 + 214 + + - rawpos + kind line 12 - + + + 6 + 7 + 214 + + + 16 + 17 + 214 + + + 102 + 103 + 214 + + - rawpos + kind col 12 - + + + 6 + 7 + 214 + + + 8 + 9 + 214 + + + 42 + 43 + 214 + + - rawpos + kind package 12 - + + + 3 + 4 + 214 + + + 36 + 37 + 214 + + + 45 + 46 + 214 + + - rawpos + kind idx 12 - + + + 1 + 2 + 214 + + + 13 + 14 + 214 + + + 417 + 418 + 214 + + - file + msg id 12 - + + + 1 + 2 + 30856 + + + 2 + 3 + 8357 + + + 3 + 4 + 6428 + + + 4 + 7 + 4928 + + + 7 + 17 + 4285 + + + 20 + 214 + 857 + + - file + msg kind 12 - + + + 1 + 2 + 55499 + + + 2 + 3 + 214 + + - file - msg + msg + rawpos 12 - + + + 1 + 2 + 38142 + + + 2 + 3 + 6428 + + + 3 + 4 + 4071 + + + 4 + 8 + 4499 + + + 8 + 214 + 2571 + + - file - rawpos + msg + file 12 - + + + 1 + 2 + 39642 + + + 2 + 3 + 6857 + + + 3 + 5 + 4499 + + + 5 + 17 + 4285 + + + 20 + 214 + 428 + + - file + msg line 12 - + + + 1 + 2 + 42213 + + + 2 + 3 + 5999 + + + 3 + 5 + 4285 + + + 5 + 52 + 3214 + + - file + msg col 12 - + + + 1 + 2 + 51856 + + + 2 + 5 + 3857 + + - file + msg package 12 - + + + 1 + 2 + 49499 + + + 2 + 5 + 4714 + + + 5 + 10 + 1499 + + - file + msg idx 12 - - - - - - line - id - - - 12 - - - - - - line - kind - - - 12 - + + + 1 + 2 + 33213 + + + 2 + 3 + 7928 + + + 3 + 4 + 5999 + + + 4 + 8 + 4285 + + + 8 + 163 + 4285 + + - line - msg + rawpos + id 12 - + + + 1 + 2 + 146355 + + + 2 + 93 + 9642 + + - line - rawpos + rawpos + kind 12 - + + + 1 + 2 + 155997 + + - line - file + rawpos + msg 12 - + + + 1 + 2 + 155354 + + + 3 + 8 + 642 + + - line - col + rawpos + file 12 - + + + 1 + 2 + 155997 + + - line - package + rawpos + line 12 - + + + 1 + 2 + 155997 + + - line - idx + rawpos + col 12 - + + + 1 + 2 + 155997 + + - col - id + rawpos + package 12 - + + + 1 + 2 + 155783 + + + 7 + 8 + 214 + + - col - kind + rawpos + idx 12 - + + + 1 + 2 + 146569 + + + 2 + 93 + 9428 + + - col - msg + file + id 12 - + + + 1 + 2 + 26999 + + + 2 + 3 + 8142 + + + 3 + 4 + 5785 + + + 4 + 6 + 4928 + + + 6 + 11 + 4928 + + + 11 + 19 + 4285 + + + 19 + 93 + 1285 + + - col - rawpos + file + kind 12 - + + + 1 + 2 + 50570 + + + 2 + 3 + 5357 + + + 3 + 4 + 428 + + - col - file + file + msg 12 - + + + 1 + 2 + 28071 + + + 2 + 3 + 9856 + + + 3 + 4 + 7071 + + + 4 + 6 + 4499 + + + 6 + 11 + 5142 + + + 11 + 17 + 1714 + + - col - line + file + rawpos 12 - + + + 1 + 2 + 28071 + + + 2 + 3 + 10071 + + + 3 + 4 + 6642 + + + 4 + 6 + 4071 + + + 6 + 11 + 4928 + + + 11 + 18 + 2571 + + - col - package + file + line 12 - - - - - - col - idx - + + + 1 + 2 + 29999 + + + 2 + 3 + 9214 + + + 3 + 4 + 5999 + + + 4 + 6 + 5142 + + + 6 + 12 + 5142 + + + 12 + 16 + 857 + + + + + + + file + col + 12 - + + + 1 + 2 + 43499 + + + 2 + 3 + 5785 + + + 3 + 5 + 5142 + + + 5 + 9 + 1928 + + - package + file + package + + + 12 + + + 1 + 2 + 50999 + + + 2 + 4 + 4285 + + + 4 + 9 + 1071 + + + + + + + file + idx + + + 12 + + + 1 + 2 + 28285 + + + 2 + 3 + 7499 + + + 3 + 4 + 5785 + + + 4 + 5 + 2571 + + + 5 + 8 + 4499 + + + 8 + 13 + 4499 + + + 13 + 93 + 3214 + + + + + + + line id 12 - + + + 1 + 2 + 6642 + + + 2 + 3 + 3642 + + + 3 + 4 + 1499 + + + 4 + 5 + 1071 + + + 5 + 6 + 1071 + + + 6 + 7 + 2142 + + + 7 + 13 + 1714 + + + 14 + 31 + 1714 + + + 31 + 50 + 1714 + + + 53 + 208 + 642 + + - package + line kind 12 - + + + 1 + 2 + 17999 + + + 2 + 3 + 2999 + + + 3 + 4 + 857 + + - package + line msg 12 - + + + 1 + 2 + 7714 + + + 2 + 3 + 3214 + + + 3 + 4 + 2571 + + + 4 + 5 + 1928 + + + 5 + 6 + 1499 + + + 6 + 10 + 1714 + + + 10 + 16 + 1714 + + + 16 + 23 + 1499 + + - package + line rawpos 12 - + + + 1 + 2 + 6857 + + + 2 + 3 + 3642 + + + 3 + 4 + 2142 + + + 4 + 5 + 1285 + + + 5 + 6 + 1499 + + + 6 + 7 + 1714 + + + 7 + 19 + 1928 + + + 20 + 32 + 1714 + + + 32 + 87 + 1071 + + - package + line file 12 - + + + 1 + 2 + 7071 + + + 2 + 3 + 4071 + + + 3 + 4 + 1928 + + + 4 + 5 + 1714 + + + 5 + 6 + 857 + + + 6 + 7 + 1928 + + + 7 + 18 + 1499 + + + 18 + 27 + 1714 + + + 29 + 86 + 1071 + + + + + + + line + col + + + 12 + + + 1 + 2 + 10499 + + + 2 + 3 + 3857 + + + 3 + 4 + 2571 + + + 4 + 5 + 2785 + + + 5 + 9 + 1928 + + + 10 + 11 + 214 + + + + + + + line + package + + + 12 + + + 1 + 2 + 8142 + + + 2 + 3 + 5571 + + + 3 + 4 + 2571 + + + 4 + 6 + 1714 + + + 7 + 10 + 1928 + + + 10 + 19 + 1714 + + + 21 + 22 + 214 + + + + + + + line + idx + + + 12 + + + 1 + 2 + 7071 + + + 2 + 3 + 3642 + + + 3 + 4 + 1714 + + + 4 + 6 + 1928 + + + 6 + 7 + 2142 + + + 7 + 14 + 1714 + + + 15 + 30 + 1714 + + + 30 + 77 + 1714 + + + 187 + 188 + 214 + + + + + + + col + id + + + 12 + + + 1 + 2 + 3428 + + + 2 + 3 + 2142 + + + 3 + 4 + 1071 + + + 4 + 7 + 642 + + + 7 + 10 + 857 + + + 10 + 14 + 642 + + + 17 + 24 + 857 + + + 107 + 768 + 428 + + + + + + + col + kind + + + 12 + + + 1 + 2 + 8142 + + + 2 + 3 + 1928 + + + + + + + col + msg + + + 12 + + + 1 + 2 + 4499 + + + 2 + 3 + 2357 + + + 3 + 6 + 857 + + + 6 + 9 + 857 + + + 9 + 12 + 642 + + + 13 + 84 + 857 + + + + + + + col + rawpos + + + 12 + + + 1 + 2 + 3428 + + + 2 + 3 + 2571 + + + 3 + 4 + 1071 + + + 4 + 8 + 857 + + + 8 + 14 + 857 + + + 17 + 22 + 857 + + + 100 + 436 + 428 + + + + + + + col + file + + + 12 + + + 1 + 2 + 4714 + + + 2 + 3 + 2357 + + + 3 + 7 + 857 + + + 7 + 8 + 428 + + + 9 + 11 + 857 + + + 15 + 223 + 857 + + + + + + + col + line + + + 12 + + + 1 + 2 + 4285 + + + 2 + 3 + 2357 + + + 3 + 4 + 857 + + + 4 + 7 + 857 + + + 7 + 12 + 642 + + + 13 + 19 + 857 + + + 80 + 81 + 214 + + + + + + + col + package + + + 12 + + + 1 + 2 + 5785 + + + 2 + 3 + 2142 + + + 3 + 5 + 857 + + + 8 + 13 + 857 + + + 14 + 45 + 428 + + + + + + + col + idx + + + 12 + + + 1 + 2 + 3642 + + + 2 + 3 + 2142 + + + 3 + 4 + 1071 + + + 4 + 7 + 642 + + + 7 + 9 + 857 + + + 9 + 14 + 857 + + + 17 + 358 + 857 + + + + + + + package + id + + + 12 + + + 1 + 2 + 11571 + + + 2 + 3 + 1285 + + + 3 + 5 + 1285 + + + 5 + 10 + 1285 + + + 15 + 204 + 1285 + + + 417 + 418 + 214 + + + + + + + package + kind + + + 12 + + + 1 + 2 + 16285 + + + 2 + 4 + 642 + + + + + + + package + msg + + + 12 + + + 1 + 2 + 11571 + + + 2 + 3 + 1714 + + + 3 + 4 + 1285 + + + 4 + 15 + 1499 + + + 25 + 71 + 857 + + + + + + + package + rawpos + + + 12 + + + 1 + 2 + 11571 + + + 2 + 3 + 1285 + + + 3 + 4 + 1285 + + + 5 + 10 + 1285 + + + 15 + 128 + 1285 + + + 258 + 259 + 214 + + + + + + + package + file + + + 12 + + + 1 + 2 + 14356 + + + 2 + 4 + 1285 + + + 4 + 95 + 1285 + + + + + + + package + line + + + 12 + + + 1 + 2 + 11785 + + + 2 + 3 + 1285 + + + 3 + 5 + 1285 + + + 5 + 15 + 1285 + + + 15 + 68 + 1285 + + + + + + + package + col + + + 12 + + + 1 + 2 + 14142 + + + 2 + 5 + 1285 + + + 5 + 23 + 1285 + + + 23 + 24 + 214 + + + + + + + package + idx + + + 12 + + + 1 + 2 + 11571 + + + 2 + 3 + 1285 + + + 3 + 5 + 1285 + + + 5 + 10 + 1285 + + + 15 + 204 + 1285 + + + 417 + 418 + 214 + + + + + + + idx + id + + + 12 + + + 1 + 2 + 45856 + + + 2 + 3 + 9642 + + + 3 + 4 + 8357 + + + 4 + 5 + 18428 + + + 5 + 26 + 6857 + + + 79 + 80 + 214 + + + + + + + idx + kind + + + 12 + + + 1 + 2 + 86570 + + + 2 + 4 + 2785 + + + + + + + idx + msg + + + 12 + + + 1 + 2 + 45856 + + + 2 + 3 + 11999 + + + 3 + 4 + 14356 + + + 4 + 5 + 14785 + + + 5 + 60 + 2357 + + + + + + + idx + rawpos + + + 12 + + + 1 + 2 + 45856 + + + 2 + 3 + 9642 + + + 3 + 4 + 8357 + + + 4 + 5 + 18428 + + + 5 + 26 + 6857 + + + 73 + 74 + 214 + + + + + + + idx + file + + + 12 + + + 1 + 2 + 45856 + + + 2 + 3 + 9642 + + + 3 + 4 + 8357 + + + 4 + 5 + 18428 + + + 5 + 26 + 6857 + + + 44 + 45 + 214 + + + + + + + idx + line + + + 12 + + + 1 + 2 + 45856 + + + 2 + 3 + 10285 + + + 3 + 4 + 10071 + + + 4 + 5 + 18214 + + + 5 + 19 + 4928 + + + + + + + idx + col + + + 12 + + + 1 + 2 + 66856 + + + 2 + 3 + 17999 + + + 3 + 9 + 4499 + + + + + + + idx + package + + + 12 + + + 1 + 2 + 45856 + + + 2 + 3 + 9642 + + + 3 + 4 + 8357 + + + 4 + 5 + 18428 + + + 5 + 26 + 6857 + + + 79 + 80 + 214 + + + + + + + + + has_ellipsis + 45900 + + + id + 45900 + + + + + + variadic + 2105580 + + + id + 2105580 + + + + + + typeparam + 331358 + + + tp + 331358 + + + name + 19381 + + + bound + 42513 + + + parent + 249456 + + + idx + 3126 + + + + + tp + name + + + 12 + + + 1 + 2 + 331358 + + + + + + + tp + bound + + + 12 + + + 1 + 2 + 331358 + + + + + + + tp + parent + + + 12 + + + 1 + 2 + 331358 + + + + + + + tp + idx + + + 12 + + + 1 + 2 + 331358 + + + + + + + name + tp + + + 12 + + + 1 + 2 + 6877 + + + 2 + 3 + 2500 + + + 3 + 4 + 2500 + + + 4 + 6 + 1250 + + + 6 + 9 + 1250 + + + 10 + 12 + 1250 + + + 27 + 34 + 1250 + + + 69 + 74 + 1250 + + + 109 + 145 + 1250 + + + + + + + name + bound + + + 12 + + + 1 + 2 + 12504 + + + 2 + 3 + 1875 + + + 3 + 4 + 2500 + + + 4 + 12 + 1250 + + + 12 + 32 + 1250 + + + + + + + name + parent + + + 12 + + + 1 + 2 + 6877 + + + 2 + 3 + 2500 + + + 3 + 4 + 2500 + + + 4 + 6 + 1250 + + + 6 + 9 + 1250 + + + 10 + 12 + 1250 + + + 27 + 34 + 1250 + + + 69 + 74 + 1250 + + + 109 + 145 + 1250 + + + + + + + name + idx + + + 12 + + + 1 + 2 + 14379 + + + 2 + 3 + 3126 + + + 3 + 4 + 1250 + + + 4 + 5 + 625 + + + + + + + bound + tp + + + 12 + + + 1 + 2 + 32510 + + + 2 + 4 + 3126 + + + 4 + 7 + 3751 + + + 15 + 271 + 3126 + + - package - line + bound + name 12 - + + + 1 + 2 + 36887 + + + 2 + 3 + 3751 + + + 4 + 18 + 1875 + + - package - col + bound + parent 12 - + + + 1 + 2 + 33761 + + + 2 + 4 + 1875 + + + 4 + 7 + 3751 + + + 15 + 260 + 3126 + + - package + bound idx 12 - + + + 1 + 2 + 38762 + + + 2 + 6 + 3751 + + - idx - id + parent + tp 12 - + + + 1 + 2 + 183185 + + + 2 + 3 + 55018 + + + 3 + 6 + 11253 + + - idx - kind + parent + name 12 - + + + 1 + 2 + 183185 + + + 2 + 3 + 55018 + + + 3 + 6 + 11253 + + - idx - msg + parent + bound 12 - + + + 1 + 2 + 187561 + + + 2 + 3 + 51892 + + + 3 + 5 + 10003 + + - idx - rawpos + parent + idx 12 - + + + 1 + 2 + 183185 + + + 2 + 3 + 55018 + + + 3 + 6 + 11253 + + idx - file + tp 12 - + + + 1 + 2 + 625 + + + 6 + 7 + 625 + + + 18 + 19 + 625 + + + 110 + 111 + 625 + + + 395 + 396 + 625 + + idx - line + name 12 - + + + 1 + 2 + 625 + + + 4 + 5 + 625 + + + 6 + 7 + 625 + + + 13 + 14 + 625 + + + 19 + 20 + 625 + + idx - col + bound 12 - + + + 1 + 2 + 625 + + + 3 + 4 + 625 + + + 9 + 10 + 625 + + + 11 + 12 + 625 + + + 57 + 58 + 625 + + idx - package + parent 12 - + + + 1 + 2 + 625 + + + 6 + 7 + 625 + + + 18 + 19 + 625 + + + 110 + 111 + 625 + + + 395 + 396 + 625 + + - - has_ellipsis - 268 - - - id - 268 - - - - diff --git a/go/ql/lib/qlpack.yml b/go/ql/lib/qlpack.yml index b6987a250d1a..ba6a48a29d49 100644 --- a/go/ql/lib/qlpack.yml +++ b/go/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/go-all -version: 2.1.0 +version: 2.1.1 groups: go dbscheme: go.dbscheme extractor: go diff --git a/go/ql/lib/semmle/go/AST.qll b/go/ql/lib/semmle/go/AST.qll index 92bf9dc2cb8f..64c6231d1054 100644 --- a/go/ql/lib/semmle/go/AST.qll +++ b/go/ql/lib/semmle/go/AST.qll @@ -79,6 +79,7 @@ class AstNode extends @node, Locatable { } /** Gets the innermost function definition to which this AST node belongs, if any. */ + pragma[nomagic] FuncDef getEnclosingFunction() { result = this.getParent().parentInSameFunction*() } /** diff --git a/go/ql/lib/semmle/go/Expr.qll b/go/ql/lib/semmle/go/Expr.qll index b1e1a1697843..4a4ab00f0538 100644 --- a/go/ql/lib/semmle/go/Expr.qll +++ b/go/ql/lib/semmle/go/Expr.qll @@ -2098,6 +2098,7 @@ class LabelName extends Name { * may be identified as such, so not all type expressions can be determined by * a bottom-up analysis. In such cases, `isTypeExprTopDown` below is useful. */ +pragma[nomagic] private predicate isTypeExprBottomUp(Expr e) { e instanceof TypeName or @@ -2136,6 +2137,7 @@ private predicate isTypeExprBottomUp(Expr e) { * it may be the latter and so this predicate does not consider the expression to be * a type expression. */ +pragma[nomagic] private predicate isTypeExprTopDown(Expr e) { e = any(CompositeLit cl).getTypeExpr() or diff --git a/go/ql/lib/semmle/go/Scopes.qll b/go/ql/lib/semmle/go/Scopes.qll index 7386b81868fc..191534759ea6 100644 --- a/go/ql/lib/semmle/go/Scopes.qll +++ b/go/ql/lib/semmle/go/Scopes.qll @@ -385,6 +385,11 @@ class Field extends Variable { this = base.getField(f) ) } + + /** + * Gets the tag associated with this field, or the empty string if this field has no tag. + */ + string getTag() { declaringType.hasOwnFieldWithTag(_, this.getName(), this.getType(), _, result) } } /** @@ -474,6 +479,13 @@ class Function extends ValueEntity, @functionobject { ResultVariable getAResult() { result = this.getResult(_) } } +bindingset[m] +pragma[inline_late] +private Type implementsIncludingInterfaceMethodsCand(Method m, string mname) { + result.implements(m.getReceiverType().getUnderlyingType()) and + mname = m.getName() +} + /** * A method, that is, a function with a receiver variable, or a function declared in an interface. * @@ -575,9 +587,9 @@ class Method extends Function { predicate implementsIncludingInterfaceMethods(Method m) { this = m or - exists(Type t | - this = t.getMethod(m.getName()) and - t.implements(m.getReceiverType().getUnderlyingType()) + exists(Type t, string mname | + t = implementsIncludingInterfaceMethodsCand(m, mname) and + this = t.getMethod(mname) ) } diff --git a/go/ql/lib/semmle/go/Types.qll b/go/ql/lib/semmle/go/Types.qll index f7bb6afe3d7a..4818db2f774d 100644 --- a/go/ql/lib/semmle/go/Types.qll +++ b/go/ql/lib/semmle/go/Types.qll @@ -69,6 +69,7 @@ class Type extends @type { * is contained in the method set of this type and any type restrictions are * satisfied. */ + pragma[nomagic] predicate implements(InterfaceType i) { if i = any(ComparableType comparable).getUnderlyingType() then this.implementsComparable() @@ -457,6 +458,21 @@ class StructType extends @structtype, CompositeType { ) } + /** + * Holds if this struct contains a field `name` with type `tp` and tag `tag`; + * `isEmbedded` is true if the field is embedded. + * + * Note that this predicate does not take promoted fields into account. + */ + predicate hasOwnFieldWithTag(int i, string name, Type tp, boolean isEmbedded, string tag) { + this.hasOwnField(i, name, tp, isEmbedded) and + ( + struct_tags(this, i, tag) + or + not struct_tags(this, i, _) and tag = "" + ) + } + /** * Get a field with the name `name`; `isEmbedded` is true if the field is embedded. * @@ -575,10 +591,15 @@ class StructType extends @structtype, CompositeType { override string pp() { result = "struct { " + - concat(int i, string name, Type tp | - component_types(this, i, name, tp) + concat(int i, string name, Type tp, string tagToPrint | + component_types(this, i, name, tp) and + ( + tagToPrint = " `" + any(string tag | struct_tags(this, i, tag)) + "`" + or + tagToPrint = "" and not struct_tags(this, i, _) + ) | - name + " " + tp.pp(), "; " order by i + name + " " + tp.pp() + tagToPrint, "; " order by i ) + " }" } @@ -747,6 +768,17 @@ class InterfaceType extends @interfacetype, CompositeType { exists(int i | i >= 0 | component_types(this, i, name, result)) } + /** + * Holds if this interface type has a private method `name`, + * with qualified name `qname` and type `type`. + */ + predicate hasPrivateMethodWithQualifiedName(string name, string qname, Type type) { + exists(int i | i >= 0 | + component_types(this, i, name, type) and + interface_private_method_ids(this, i, qname) + ) + } + override predicate hasMethod(string m, SignatureType t) { t = this.getMethodType(m) } /** @@ -1032,10 +1064,19 @@ class ErrorType extends Type { ErrorType() { this.implements(Builtin::error().getType().getUnderlyingType()) } } +/** + * Gets the number of types with method `name`. + */ +bindingset[name] +int numberOfTypesWithMethodName(string name) { result = count(Type t | t.hasMethod(name, _)) } + /** * Gets the name of a method in the method set of `i`. * * This is used to restrict the set of interfaces to consider in the definition of `implements`, - * so it does not matter which method name is chosen (we use the lexicographically least). + * so it does not matter which method name is chosen (we use the most unusual name the interface + * requires; this is the most discriminating and so shrinks the search space the most). */ -private string getExampleMethodName(InterfaceType i) { result = min(string m | i.hasMethod(m, _)) } +private string getExampleMethodName(InterfaceType i) { + result = min(string m | i.hasMethod(m, _) | m order by numberOfTypesWithMethodName(m)) +} diff --git a/go/ql/lib/semmle/go/controlflow/IR.qll b/go/ql/lib/semmle/go/controlflow/IR.qll index d337f526cdef..b036ddf6d0f5 100644 --- a/go/ql/lib/semmle/go/controlflow/IR.qll +++ b/go/ql/lib/semmle/go/controlflow/IR.qll @@ -501,10 +501,11 @@ module IR { override StructLit lit; /** Gets the name of the initialized field. */ + pragma[nomagic] string getFieldName() { if elt instanceof KeyValueExpr then result = elt.(KeyValueExpr).getKey().(Ident).getName() - else lit.getStructType().hasOwnField(i, result, _, _) + else pragma[only_bind_out](lit.getStructType()).hasOwnField(i, result, _, _) } /** Gets the initialized field. */ @@ -1480,7 +1481,7 @@ module IR { override predicate refersTo(ValueEntity e) { this instanceof MkLhs and - loc = e.getAReference() + pragma[only_bind_out](loc) = e.getAReference() or exists(WriteResultInstruction wr | this = MkResultWriteTarget(wr) | e = wr.getResultVariable() diff --git a/go/ql/lib/semmle/go/dataflow/internal/DataFlowDispatch.qll b/go/ql/lib/semmle/go/dataflow/internal/DataFlowDispatch.qll index b045d6dc5522..a06edad0be2c 100644 --- a/go/ql/lib/semmle/go/dataflow/internal/DataFlowDispatch.qll +++ b/go/ql/lib/semmle/go/dataflow/internal/DataFlowDispatch.qll @@ -8,9 +8,9 @@ private import DataFlowPrivate private predicate isInterfaceCallReceiver( DataFlow::CallNode call, DataFlow::Node recv, InterfaceType tp, string m ) { - call.getReceiver() = recv and + pragma[only_bind_out](call).getReceiver() = recv and recv.getType().getUnderlyingType() = tp and - m = call.getACalleeIncludingExternals().asFunction().getName() + m = pragma[only_bind_out](call).getACalleeIncludingExternals().asFunction().getName() } /** Gets a data-flow node that may flow into the receiver value of `call`, which is an interface value. */ diff --git a/go/ql/lib/semmle/go/dataflow/internal/DataFlowNodes.qll b/go/ql/lib/semmle/go/dataflow/internal/DataFlowNodes.qll index 6b088f44e73a..cc353ab64df5 100644 --- a/go/ql/lib/semmle/go/dataflow/internal/DataFlowNodes.qll +++ b/go/ql/lib/semmle/go/dataflow/internal/DataFlowNodes.qll @@ -525,6 +525,7 @@ module Public { * As `getACalleeIncludingExternals`, except excluding external functions (those for which * we lack a definition, such as standard library functions). */ + pragma[nomagic] FuncDef getACallee() { result = this.getACalleeIncludingExternals().getFuncDef() } /** @@ -726,7 +727,10 @@ module Public { override string getNodeKind() { result = "external parameter node" } override Type getType() { - result = this.getSummarizedCallable().getType().getParameterType(this.getPos()) + result = + this.getSummarizedCallable() + .getType() + .getParameterType(pragma[only_bind_into](this.getPos())) or this.getPos() = -1 and result = this.getSummarizedCallable().asFunction().(Method).getReceiverType() diff --git a/go/ql/lib/semmle/go/dataflow/internal/DataFlowUtil.qll b/go/ql/lib/semmle/go/dataflow/internal/DataFlowUtil.qll index 9f76e7c7c95b..68ffe57f5f59 100644 --- a/go/ql/lib/semmle/go/dataflow/internal/DataFlowUtil.qll +++ b/go/ql/lib/semmle/go/dataflow/internal/DataFlowUtil.qll @@ -284,9 +284,11 @@ signature predicate guardChecksSig(Node g, Expr e, boolean branch); module BarrierGuard { /** Gets a node that is safely guarded by the given guard check. */ Node getABarrierNode() { - exists(ControlFlow::ConditionGuardNode guard, SsaWithFields var | result = var.getAUse() | + exists(ControlFlow::ConditionGuardNode guard, SsaWithFields var | + result = pragma[only_bind_out](var).getAUse() + | guards(_, guard, _, var) and - guard.dominates(result.getBasicBlock()) + pragma[only_bind_out](guard).dominates(result.getBasicBlock()) ) } @@ -339,6 +341,21 @@ module BarrierGuard { localFlow(pragma[only_bind_out](outp.getNode(c)), resNode) } + private predicate onlyPossibleReturnSatisfyingProperty( + FuncDecl fd, FunctionOutput outp, Node ret, DataFlow::Property p + ) { + exists(boolean b | + onlyPossibleReturnOfBool(fd, outp, ret, b) and + p.isBoolean(b) + ) + or + onlyPossibleReturnOfNonNil(fd, outp, ret) and + p.isNonNil() + or + onlyPossibleReturnOfNil(fd, outp, ret) and + p.isNil() + } + /** * Holds if whenever `p` holds of output `outp` of function `f`, this node * is known to validate the input `inp` of `f`. @@ -353,24 +370,14 @@ module BarrierGuard { ) { exists(FuncDecl fd, Node arg, Node ret | fd.getFunction() = f and - localFlow(inp.getExitNode(fd), arg) and - ret = outp.getEntryNode(fd) and + localFlow(inp.getExitNode(fd), pragma[only_bind_out](arg)) and ( // Case: a function like "if someBarrierGuard(arg) { return true } else { return false }" exists(ControlFlow::ConditionGuardNode guard | - guards(g, guard, arg) and - guard.dominates(ret.getBasicBlock()) + guards(g, pragma[only_bind_out](guard), arg) and + guard.dominates(pragma[only_bind_out](ret).getBasicBlock()) | - exists(boolean b | - onlyPossibleReturnOfBool(fd, outp, ret, b) and - p.isBoolean(b) - ) - or - onlyPossibleReturnOfNonNil(fd, outp, ret) and - p.isNonNil() - or - onlyPossibleReturnOfNil(fd, outp, ret) and - p.isNil() + onlyPossibleReturnSatisfyingProperty(fd, outp, ret, p) ) or // Case: a function like "return someBarrierGuard(arg)" diff --git a/go/ql/lib/semmle/go/dataflow/internal/TaintTrackingUtil.qll b/go/ql/lib/semmle/go/dataflow/internal/TaintTrackingUtil.qll index 1b521d89d98d..85f6bb0874f5 100644 --- a/go/ql/lib/semmle/go/dataflow/internal/TaintTrackingUtil.qll +++ b/go/ql/lib/semmle/go/dataflow/internal/TaintTrackingUtil.qll @@ -190,6 +190,7 @@ predicate sliceStep(DataFlow::Node pred, DataFlow::Node succ) { */ abstract class FunctionModel extends Function { /** Holds if taint propagates through this function from `input` to `output`. */ + pragma[nomagic] abstract predicate hasTaintFlow(FunctionInput input, FunctionOutput output); /** Gets an input node for this model for the call `c`. */ @@ -202,8 +203,8 @@ abstract class FunctionModel extends Function { predicate taintStepForCall(DataFlow::Node pred, DataFlow::Node succ, DataFlow::CallNode c) { c = this.getACall() and exists(FunctionInput inp, FunctionOutput outp | this.hasTaintFlow(inp, outp) | - pred = inp.getNode(c) and - succ = outp.getNode(c) + pred = pragma[only_bind_out](inp).getNode(c) and + succ = pragma[only_bind_out](outp).getNode(c) ) } @@ -382,9 +383,9 @@ predicate inputIsConstantIfOutputHasProperty( ) { exists(Function f, FunctionInput inp, FunctionOutput outp, DataFlow::CallNode call | functionEnsuresInputIsConstant(f, inp, outp, p) and - call = f.getACall() and - inputNode = inp.getNode(call) and - DataFlow::localFlow(outp.getNode(call), outputNode) + call = pragma[only_bind_out](f).getACall() and + inputNode = pragma[only_bind_out](inp).getNode(call) and + DataFlow::localFlow(pragma[only_bind_out](outp).getNode(call), outputNode) ) } diff --git a/go/ql/lib/semmle/go/frameworks/Afero.qll b/go/ql/lib/semmle/go/frameworks/Afero.qll index 598036de22bc..c03bf6114334 100644 --- a/go/ql/lib/semmle/go/frameworks/Afero.qll +++ b/go/ql/lib/semmle/go/frameworks/Afero.qll @@ -65,7 +65,7 @@ module Afero { exists(Function f | f.hasQualifiedName(aferoPackage(), ["WriteReader", "SafeWriteReader", "WriteFile", "ReadFile", "ReadDir"]) and - this = f.getACall() and + this = pragma[only_bind_out](f.getACall()) and pathArg = 1 and not aferoSanitizer(this.getArgument(0)) ) @@ -73,7 +73,7 @@ module Afero { exists(Method m | m.hasQualifiedName(aferoPackage(), "Afero", ["WriteReader", "SafeWriteReader", "WriteFile", "ReadFile", "ReadDir"]) and - this = m.getACall() and + this = pragma[only_bind_out](m.getACall()) and pathArg = 0 and not aferoSanitizer(this.getReceiver()) ) diff --git a/go/ql/lib/semmle/go/frameworks/GoMicro.qll b/go/ql/lib/semmle/go/frameworks/GoMicro.qll index 55f5bded6276..116ebee030ea 100644 --- a/go/ql/lib/semmle/go/frameworks/GoMicro.qll +++ b/go/ql/lib/semmle/go/frameworks/GoMicro.qll @@ -98,6 +98,12 @@ module GoMicro { } } + bindingset[m] + pragma[inline_late] + private predicate implementsServiceType(Method m) { + m.implements(any(ServiceInterfaceType i).getNamedType().getMethod(_)) + } + /** * A service handler. */ @@ -106,7 +112,7 @@ module GoMicro { exists(DataFlow::CallNode call | call.getTarget() instanceof ServiceRegisterHandler and this = call.getArgument(1).getType().getMethod(_) and - this.implements(any(ServiceInterfaceType i).getNamedType().getMethod(_)) + implementsServiceType(this) ) } } diff --git a/go/ql/lib/semmle/go/frameworks/Twirp.qll b/go/ql/lib/semmle/go/frameworks/Twirp.qll index 3efd91eee4d7..7f338816b383 100644 --- a/go/ql/lib/semmle/go/frameworks/Twirp.qll +++ b/go/ql/lib/semmle/go/frameworks/Twirp.qll @@ -118,13 +118,19 @@ module Twirp { override string getKind() { result = "URL" } } + bindingset[m] + pragma[inline_late] + private predicate implementsServiceType(Method m) { + m.implements(any(ServiceInterfaceType i).getNamedType().getMethod(_)) + } + /** A service handler. */ class ServiceHandler extends Method { ServiceHandler() { exists(DataFlow::CallNode call | call.getTarget() instanceof ServerConstructor and this = call.getArgument(0).getType().getMethod(_) and - this.implements(any(ServiceInterfaceType i).getNamedType().getMethod(_)) + implementsServiceType(this) ) } } diff --git a/go/ql/lib/semmle/go/frameworks/stdlib/Fmt.qll b/go/ql/lib/semmle/go/frameworks/stdlib/Fmt.qll index 950b67483f00..54794ea21c9e 100644 --- a/go/ql/lib/semmle/go/frameworks/stdlib/Fmt.qll +++ b/go/ql/lib/semmle/go/frameworks/stdlib/Fmt.qll @@ -112,6 +112,15 @@ module Fmt { Scanner() { this.hasQualifiedName("fmt", ["Scan", "Scanf", "Scanln"]) } } + private class ScannerSource extends SourceNode { + ScannerSource() { + // All of the arguments which are sources are varargs. + this.asExpr() = any(Scanner s).getACall().getAnImplicitVarargsArgument().asExpr() + } + + override string getThreatModel() { result = "stdin" } + } + /** * The `Fscan` function or one of its variants, * all of which read from a specified `io.Reader`. diff --git a/go/ql/lib/semmle/go/frameworks/stdlib/Os.qll b/go/ql/lib/semmle/go/frameworks/stdlib/Os.qll index 72ea4cc6c573..fb153451c597 100644 --- a/go/ql/lib/semmle/go/frameworks/stdlib/Os.qll +++ b/go/ql/lib/semmle/go/frameworks/stdlib/Os.qll @@ -43,4 +43,12 @@ module Os { input = inp and output = outp } } + + private class Stdin extends SourceNode { + Stdin() { + exists(Variable osStdin | osStdin.hasQualifiedName("os", "Stdin") | this = osStdin.getARead()) + } + + override string getThreatModel() { result = "stdin" } + } } diff --git a/go/ql/lib/semmle/go/security/OpenUrlRedirectCustomizations.qll b/go/ql/lib/semmle/go/security/OpenUrlRedirectCustomizations.qll index 304bc004e038..870edeee9621 100644 --- a/go/ql/lib/semmle/go/security/OpenUrlRedirectCustomizations.qll +++ b/go/ql/lib/semmle/go/security/OpenUrlRedirectCustomizations.qll @@ -75,6 +75,13 @@ module OpenUrlRedirect { } } + bindingset[var, w] + pragma[inline_late] + private predicate useIsDominated(SsaWithFields var, Write w, DataFlow::ReadNode sanitizedRead) { + w.dominatesNode(sanitizedRead.asInstruction()) and + sanitizedRead = var.getAUse() + } + /** * An access to a variable that is preceded by an assignment to its `Path` field. * @@ -83,13 +90,10 @@ module OpenUrlRedirect { */ class PathAssignmentBarrier extends Barrier, Read { PathAssignmentBarrier() { - exists(Write w, Field f, SsaWithFields var | - f.getName() = "Path" and + exists(Write w, SsaWithFields var | hasHostnameSanitizingSubstring(w.getRhs()) and - this = var.getAUse() - | - w.writesField(var.getAUse(), f, _) and - w.dominatesNode(insn) + w.writesField(var.getAUse(), any(Field f | f.getName() = "Path"), _) and + useIsDominated(var, w, this) ) } } diff --git a/go/ql/lib/upgrades/a58b81b1b4c4cccc8ca11731c1db86622f33af57/go.dbscheme b/go/ql/lib/upgrades/a58b81b1b4c4cccc8ca11731c1db86622f33af57/go.dbscheme new file mode 100644 index 000000000000..4bd57e093275 --- /dev/null +++ b/go/ql/lib/upgrades/a58b81b1b4c4cccc8ca11731c1db86622f33af57/go.dbscheme @@ -0,0 +1,552 @@ +/** Auto-generated dbscheme; do not edit. Run `make gen` in directory `go/` to regenerate. */ + + +/** Duplicate code **/ + +duplicateCode( + unique int id : @duplication, + varchar(900) relativePath : string ref, + int equivClass : int ref); + +similarCode( + unique int id : @similarity, + varchar(900) relativePath : string ref, + int equivClass : int ref); + +@duplication_or_similarity = @duplication | @similarity; + +tokens( + int id : @duplication_or_similarity ref, + int offset : int ref, + int beginLine : int ref, + int beginColumn : int ref, + int endLine : int ref, + int endColumn : int ref); + +/** External data **/ + +externalData( + int id : @externalDataElement, + varchar(900) path : string ref, + int column: int ref, + varchar(900) value : string ref +); + +snapshotDate(unique date snapshotDate : date ref); + +sourceLocationPrefix(varchar(900) prefix : string 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; + +compilations(unique int id: @compilation, string cwd: string ref); + +#keyset[id, num] +compilation_args(int id: @compilation ref, int num: int ref, string arg: string ref); + +#keyset[id, num, kind] +compilation_time(int id: @compilation ref, int num: int ref, int kind: int ref, float secs: float ref); + +diagnostic_for(unique int diagnostic: @diagnostic ref, int compilation: @compilation ref, int file_number: int ref, int file_number_diagnostic_number: int ref); + +compilation_finished(unique int id: @compilation ref, float cpu_seconds: float ref, float elapsed_seconds: float ref); + +#keyset[id, num] +compilation_compiling_files(int id: @compilation ref, int num: int ref, int file: @file ref); + +diagnostics(unique int id: @diagnostic, int severity: int ref, string error_tag: string ref, string error_message: string ref, + string full_error_message: string ref, int location: @location ref); + +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); + +numlines(int element_id: @sourceline ref, int num_lines: int ref, int num_code: int ref, int num_comment: int ref); + +files(unique int id: @file, string name: string ref); + +folders(unique int id: @folder, string name: string ref); + +containerparent(int parent: @container ref, unique int child: @container ref); + +has_location(unique int locatable: @locatable ref, int location: @location ref); + +#keyset[parent, idx] +comment_groups(unique int id: @comment_group, int parent: @file ref, int idx: int ref); + +comments(unique int id: @comment, int kind: int ref, int parent: @comment_group ref, int idx: int ref, string text: string ref); + +doc_comments(unique int node: @documentable ref, int comment: @comment_group ref); + +#keyset[parent, idx] +exprs(unique int id: @expr, int kind: int ref, int parent: @exprparent ref, int idx: int ref); + +literals(unique int expr: @expr ref, string value: string ref, string raw: string ref); + +constvalues(unique int expr: @expr ref, string value: string ref, string exact: string ref); + +fields(unique int id: @field, int parent: @fieldparent ref, int idx: int ref); + +typeparamdecls(unique int id: @typeparamdecl, int parent: @typeparamdeclparent ref, int idx: int ref); + +#keyset[parent, idx] +stmts(unique int id: @stmt, int kind: int ref, int parent: @stmtparent ref, int idx: int ref); + +#keyset[parent, idx] +decls(unique int id: @decl, int kind: int ref, int parent: @declparent ref, int idx: int ref); + +#keyset[parent, idx] +specs(unique int id: @spec, int kind: int ref, int parent: @gendecl ref, int idx: int ref); + +scopes(unique int id: @scope, int kind: int ref); + +scopenesting(unique int inner: @scope ref, int outer: @scope ref); + +scopenodes(unique int node: @scopenode ref, int scope: @localscope ref); + +objects(unique int id: @object, int kind: int ref, string name: string ref); + +objectscopes(unique int object: @object ref, int scope: @scope ref); + +objecttypes(unique int object: @object ref, int tp: @type ref); + +methodreceivers(unique int method: @object ref, int receiver: @object ref); + +fieldstructs(unique int field: @object ref, int struct: @structtype ref); + +methodhosts(int method: @object ref, int host: @namedtype ref); + +defs(int ident: @ident ref, int object: @object ref); + +uses(int ident: @ident ref, int object: @object ref); + +types(unique int id: @type, int kind: int ref); + +type_of(unique int expr: @expr ref, int tp: @type ref); + +typename(unique int tp: @type ref, string name: string ref); + +key_type(unique int map: @maptype ref, int tp: @type ref); + +element_type(unique int container: @containertype ref, int tp: @type ref); + +base_type(unique int ptr: @pointertype ref, int tp: @type ref); + +underlying_type(unique int named: @namedtype ref, int tp: @type ref); + +#keyset[parent, index] +component_types(int parent: @compositetype ref, int index: int ref, string name: string ref, int tp: @type ref); + +#keyset[parent, index] +struct_tags(int parent: @structtype ref, int index: int ref, string tag: string ref); + +#keyset[interface, index] +interface_private_method_ids(int interface: @interfacetype ref, int index: int ref, string id: string ref); + +array_length(unique int tp: @arraytype ref, string len: string ref); + +type_objects(unique int tp: @type ref, int object: @object ref); + +packages(unique int id: @package, string name: string ref, string path: string ref, int scope: @packagescope ref); + +#keyset[parent, idx] +modexprs(unique int id: @modexpr, int kind: int ref, int parent: @modexprparent ref, int idx: int ref); + +#keyset[parent, idx] +modtokens(string token: string ref, int parent: @modexpr ref, int idx: int ref); + +#keyset[package, idx] +errors(unique int id: @error, int kind: int ref, string msg: string ref, string rawpos: string ref, + string file: string ref, int line: int ref, int col: int ref, int package: @package ref, int idx: int ref); + +has_ellipsis(int id: @callorconversionexpr ref); + +variadic(int id: @signaturetype ref); + +#keyset[parent, idx] +typeparam(unique int tp: @typeparamtype ref, string name: string ref, int bound: @compositetype ref, + int parent: @typeparamparentobject ref, int idx: int ref); + +@container = @file | @folder; + +@locatable = @xmllocatable | @node | @localscope; + +@node = @documentable | @exprparent | @modexprparent | @fieldparent | @stmtparent | @declparent | @typeparamdeclparent + | @scopenode | @comment_group | @comment; + +@documentable = @file | @field | @typeparamdecl | @spec | @gendecl | @funcdecl | @modexpr; + +@exprparent = @funcdef | @file | @expr | @field | @stmt | @decl | @typeparamdecl | @spec; + +@modexprparent = @file | @modexpr; + +@fieldparent = @decl | @structtypeexpr | @functypeexpr | @interfacetypeexpr; + +@stmtparent = @funcdef | @stmt | @decl; + +@declparent = @file | @declstmt; + +@typeparamdeclparent = @funcdecl | @typespec; + +@funcdef = @funclit | @funcdecl; + +@scopenode = @file | @functypeexpr | @blockstmt | @ifstmt | @caseclause | @switchstmt | @commclause | @loopstmt; + +@location = @location_default; + +@sourceline = @locatable; + +case @comment.kind of + 0 = @slashslashcomment +| 1 = @slashstarcomment; + +case @expr.kind of + 0 = @badexpr +| 1 = @ident +| 2 = @ellipsis +| 3 = @intlit +| 4 = @floatlit +| 5 = @imaglit +| 6 = @charlit +| 7 = @stringlit +| 8 = @funclit +| 9 = @compositelit +| 10 = @parenexpr +| 11 = @selectorexpr +| 12 = @indexexpr +| 13 = @genericfunctioninstantiationexpr +| 14 = @generictypeinstantiationexpr +| 15 = @sliceexpr +| 16 = @typeassertexpr +| 17 = @callorconversionexpr +| 18 = @starexpr +| 19 = @keyvalueexpr +| 20 = @arraytypeexpr +| 21 = @structtypeexpr +| 22 = @functypeexpr +| 23 = @interfacetypeexpr +| 24 = @maptypeexpr +| 25 = @typesetliteralexpr +| 26 = @plusexpr +| 27 = @minusexpr +| 28 = @notexpr +| 29 = @complementexpr +| 30 = @derefexpr +| 31 = @addressexpr +| 32 = @arrowexpr +| 33 = @lorexpr +| 34 = @landexpr +| 35 = @eqlexpr +| 36 = @neqexpr +| 37 = @lssexpr +| 38 = @leqexpr +| 39 = @gtrexpr +| 40 = @geqexpr +| 41 = @addexpr +| 42 = @subexpr +| 43 = @orexpr +| 44 = @xorexpr +| 45 = @mulexpr +| 46 = @quoexpr +| 47 = @remexpr +| 48 = @shlexpr +| 49 = @shrexpr +| 50 = @andexpr +| 51 = @andnotexpr +| 52 = @sendchantypeexpr +| 53 = @recvchantypeexpr +| 54 = @sendrcvchantypeexpr; + +@basiclit = @intlit | @floatlit | @imaglit | @charlit | @stringlit; + +@operatorexpr = @logicalexpr | @arithmeticexpr | @bitwiseexpr | @unaryexpr | @binaryexpr; + +@logicalexpr = @logicalunaryexpr | @logicalbinaryexpr; + +@arithmeticexpr = @arithmeticunaryexpr | @arithmeticbinaryexpr; + +@bitwiseexpr = @bitwiseunaryexpr | @bitwisebinaryexpr; + +@unaryexpr = @logicalunaryexpr | @bitwiseunaryexpr | @arithmeticunaryexpr | @derefexpr | @addressexpr | @arrowexpr; + +@logicalunaryexpr = @notexpr; + +@bitwiseunaryexpr = @complementexpr; + +@arithmeticunaryexpr = @plusexpr | @minusexpr; + +@binaryexpr = @logicalbinaryexpr | @bitwisebinaryexpr | @arithmeticbinaryexpr | @comparison; + +@logicalbinaryexpr = @lorexpr | @landexpr; + +@bitwisebinaryexpr = @shiftexpr | @orexpr | @xorexpr | @andexpr | @andnotexpr; + +@arithmeticbinaryexpr = @addexpr | @subexpr | @mulexpr | @quoexpr | @remexpr; + +@shiftexpr = @shlexpr | @shrexpr; + +@comparison = @equalitytest | @relationalcomparison; + +@equalitytest = @eqlexpr | @neqexpr; + +@relationalcomparison = @lssexpr | @leqexpr | @gtrexpr | @geqexpr; + +@chantypeexpr = @sendchantypeexpr | @recvchantypeexpr | @sendrcvchantypeexpr; + +case @stmt.kind of + 0 = @badstmt +| 1 = @declstmt +| 2 = @emptystmt +| 3 = @labeledstmt +| 4 = @exprstmt +| 5 = @sendstmt +| 6 = @incstmt +| 7 = @decstmt +| 8 = @gostmt +| 9 = @deferstmt +| 10 = @returnstmt +| 11 = @breakstmt +| 12 = @continuestmt +| 13 = @gotostmt +| 14 = @fallthroughstmt +| 15 = @blockstmt +| 16 = @ifstmt +| 17 = @caseclause +| 18 = @exprswitchstmt +| 19 = @typeswitchstmt +| 20 = @commclause +| 21 = @selectstmt +| 22 = @forstmt +| 23 = @rangestmt +| 24 = @assignstmt +| 25 = @definestmt +| 26 = @addassignstmt +| 27 = @subassignstmt +| 28 = @mulassignstmt +| 29 = @quoassignstmt +| 30 = @remassignstmt +| 31 = @andassignstmt +| 32 = @orassignstmt +| 33 = @xorassignstmt +| 34 = @shlassignstmt +| 35 = @shrassignstmt +| 36 = @andnotassignstmt; + +@incdecstmt = @incstmt | @decstmt; + +@assignment = @simpleassignstmt | @compoundassignstmt; + +@simpleassignstmt = @assignstmt | @definestmt; + +@compoundassignstmt = @addassignstmt | @subassignstmt | @mulassignstmt | @quoassignstmt | @remassignstmt + | @andassignstmt | @orassignstmt | @xorassignstmt | @shlassignstmt | @shrassignstmt | @andnotassignstmt; + +@branchstmt = @breakstmt | @continuestmt | @gotostmt | @fallthroughstmt; + +@switchstmt = @exprswitchstmt | @typeswitchstmt; + +@loopstmt = @forstmt | @rangestmt; + +case @decl.kind of + 0 = @baddecl +| 1 = @importdecl +| 2 = @constdecl +| 3 = @typedecl +| 4 = @vardecl +| 5 = @funcdecl; + +@gendecl = @importdecl | @constdecl | @typedecl | @vardecl; + +case @spec.kind of + 0 = @importspec +| 1 = @valuespec +| 2 = @typedefspec +| 3 = @aliasspec; + +@typespec = @typedefspec | @aliasspec; + +case @object.kind of + 0 = @pkgobject +| 1 = @decltypeobject +| 2 = @builtintypeobject +| 3 = @declconstobject +| 4 = @builtinconstobject +| 5 = @declvarobject +| 6 = @declfunctionobject +| 7 = @builtinfunctionobject +| 8 = @labelobject; + +@typeparamparentobject = @decltypeobject | @declfunctionobject; + +@declobject = @decltypeobject | @declconstobject | @declvarobject | @declfunctionobject; + +@builtinobject = @builtintypeobject | @builtinconstobject | @builtinfunctionobject; + +@typeobject = @decltypeobject | @builtintypeobject; + +@valueobject = @constobject | @varobject | @functionobject; + +@constobject = @declconstobject | @builtinconstobject; + +@varobject = @declvarobject; + +@functionobject = @declfunctionobject | @builtinfunctionobject; + +case @scope.kind of + 0 = @universescope +| 1 = @packagescope +| 2 = @localscope; + +case @type.kind of + 0 = @invalidtype +| 1 = @boolexprtype +| 2 = @inttype +| 3 = @int8type +| 4 = @int16type +| 5 = @int32type +| 6 = @int64type +| 7 = @uinttype +| 8 = @uint8type +| 9 = @uint16type +| 10 = @uint32type +| 11 = @uint64type +| 12 = @uintptrtype +| 13 = @float32type +| 14 = @float64type +| 15 = @complex64type +| 16 = @complex128type +| 17 = @stringexprtype +| 18 = @unsafepointertype +| 19 = @boolliteraltype +| 20 = @intliteraltype +| 21 = @runeliteraltype +| 22 = @floatliteraltype +| 23 = @complexliteraltype +| 24 = @stringliteraltype +| 25 = @nilliteraltype +| 26 = @typeparamtype +| 27 = @arraytype +| 28 = @slicetype +| 29 = @structtype +| 30 = @pointertype +| 31 = @interfacetype +| 32 = @tupletype +| 33 = @signaturetype +| 34 = @maptype +| 35 = @sendchantype +| 36 = @recvchantype +| 37 = @sendrcvchantype +| 38 = @namedtype +| 39 = @typesetliteraltype; + +@basictype = @booltype | @numerictype | @stringtype | @literaltype | @invalidtype | @unsafepointertype; + +@booltype = @boolexprtype | @boolliteraltype; + +@numerictype = @integertype | @floattype | @complextype; + +@integertype = @signedintegertype | @unsignedintegertype; + +@signedintegertype = @inttype | @int8type | @int16type | @int32type | @int64type | @intliteraltype | @runeliteraltype; + +@unsignedintegertype = @uinttype | @uint8type | @uint16type | @uint32type | @uint64type | @uintptrtype; + +@floattype = @float32type | @float64type | @floatliteraltype; + +@complextype = @complex64type | @complex128type | @complexliteraltype; + +@stringtype = @stringexprtype | @stringliteraltype; + +@literaltype = @boolliteraltype | @intliteraltype | @runeliteraltype | @floatliteraltype | @complexliteraltype + | @stringliteraltype | @nilliteraltype; + +@compositetype = @typeparamtype | @containertype | @structtype | @pointertype | @interfacetype | @tupletype + | @signaturetype | @namedtype | @typesetliteraltype; + +@containertype = @arraytype | @slicetype | @maptype | @chantype; + +@chantype = @sendchantype | @recvchantype | @sendrcvchantype; + +case @modexpr.kind of + 0 = @modcommentblock +| 1 = @modline +| 2 = @modlineblock +| 3 = @modlparen +| 4 = @modrparen; + +case @error.kind of + 0 = @unknownerror +| 1 = @listerror +| 2 = @parseerror +| 3 = @typeerror; + diff --git a/go/ql/lib/upgrades/a58b81b1b4c4cccc8ca11731c1db86622f33af57/old.dbscheme b/go/ql/lib/upgrades/a58b81b1b4c4cccc8ca11731c1db86622f33af57/old.dbscheme new file mode 100644 index 000000000000..a58b81b1b4c4 --- /dev/null +++ b/go/ql/lib/upgrades/a58b81b1b4c4cccc8ca11731c1db86622f33af57/old.dbscheme @@ -0,0 +1,546 @@ +/** Auto-generated dbscheme; do not edit. */ + + +/** Duplicate code **/ + +duplicateCode( + unique int id : @duplication, + varchar(900) relativePath : string ref, + int equivClass : int ref); + +similarCode( + unique int id : @similarity, + varchar(900) relativePath : string ref, + int equivClass : int ref); + +@duplication_or_similarity = @duplication | @similarity; + +tokens( + int id : @duplication_or_similarity ref, + int offset : int ref, + int beginLine : int ref, + int beginColumn : int ref, + int endLine : int ref, + int endColumn : int ref); + +/** External data **/ + +externalData( + int id : @externalDataElement, + varchar(900) path : string ref, + int column: int ref, + varchar(900) value : string ref +); + +snapshotDate(unique date snapshotDate : date ref); + +sourceLocationPrefix(varchar(900) prefix : string 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; + +compilations(unique int id: @compilation, string cwd: string ref); + +#keyset[id, num] +compilation_args(int id: @compilation ref, int num: int ref, string arg: string ref); + +#keyset[id, num, kind] +compilation_time(int id: @compilation ref, int num: int ref, int kind: int ref, float secs: float ref); + +diagnostic_for(unique int diagnostic: @diagnostic ref, int compilation: @compilation ref, int file_number: int ref, int file_number_diagnostic_number: int ref); + +compilation_finished(unique int id: @compilation ref, float cpu_seconds: float ref, float elapsed_seconds: float ref); + +#keyset[id, num] +compilation_compiling_files(int id: @compilation ref, int num: int ref, int file: @file ref); + +diagnostics(unique int id: @diagnostic, int severity: int ref, string error_tag: string ref, string error_message: string ref, + string full_error_message: string ref, int location: @location ref); + +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); + +numlines(int element_id: @sourceline ref, int num_lines: int ref, int num_code: int ref, int num_comment: int ref); + +files(unique int id: @file, string name: string ref); + +folders(unique int id: @folder, string name: string ref); + +containerparent(int parent: @container ref, unique int child: @container ref); + +has_location(unique int locatable: @locatable ref, int location: @location ref); + +#keyset[parent, idx] +comment_groups(unique int id: @comment_group, int parent: @file ref, int idx: int ref); + +comments(unique int id: @comment, int kind: int ref, int parent: @comment_group ref, int idx: int ref, string text: string ref); + +doc_comments(unique int node: @documentable ref, int comment: @comment_group ref); + +#keyset[parent, idx] +exprs(unique int id: @expr, int kind: int ref, int parent: @exprparent ref, int idx: int ref); + +literals(unique int expr: @expr ref, string value: string ref, string raw: string ref); + +constvalues(unique int expr: @expr ref, string value: string ref, string exact: string ref); + +fields(unique int id: @field, int parent: @fieldparent ref, int idx: int ref); + +typeparamdecls(unique int id: @typeparamdecl, int parent: @typeparamdeclparent ref, int idx: int ref); + +#keyset[parent, idx] +stmts(unique int id: @stmt, int kind: int ref, int parent: @stmtparent ref, int idx: int ref); + +#keyset[parent, idx] +decls(unique int id: @decl, int kind: int ref, int parent: @declparent ref, int idx: int ref); + +#keyset[parent, idx] +specs(unique int id: @spec, int kind: int ref, int parent: @gendecl ref, int idx: int ref); + +scopes(unique int id: @scope, int kind: int ref); + +scopenesting(unique int inner: @scope ref, int outer: @scope ref); + +scopenodes(unique int node: @scopenode ref, int scope: @localscope ref); + +objects(unique int id: @object, int kind: int ref, string name: string ref); + +objectscopes(unique int object: @object ref, int scope: @scope ref); + +objecttypes(unique int object: @object ref, int tp: @type ref); + +methodreceivers(unique int method: @object ref, int receiver: @object ref); + +fieldstructs(unique int field: @object ref, int struct: @structtype ref); + +methodhosts(int method: @object ref, int host: @namedtype ref); + +defs(int ident: @ident ref, int object: @object ref); + +uses(int ident: @ident ref, int object: @object ref); + +types(unique int id: @type, int kind: int ref); + +type_of(unique int expr: @expr ref, int tp: @type ref); + +typename(unique int tp: @type ref, string name: string ref); + +key_type(unique int map: @maptype ref, int tp: @type ref); + +element_type(unique int container: @containertype ref, int tp: @type ref); + +base_type(unique int ptr: @pointertype ref, int tp: @type ref); + +underlying_type(unique int named: @namedtype ref, int tp: @type ref); + +#keyset[parent, index] +component_types(int parent: @compositetype ref, int index: int ref, string name: string ref, int tp: @type ref); + +array_length(unique int tp: @arraytype ref, string len: string ref); + +type_objects(unique int tp: @type ref, int object: @object ref); + +packages(unique int id: @package, string name: string ref, string path: string ref, int scope: @packagescope ref); + +#keyset[parent, idx] +modexprs(unique int id: @modexpr, int kind: int ref, int parent: @modexprparent ref, int idx: int ref); + +#keyset[parent, idx] +modtokens(string token: string ref, int parent: @modexpr ref, int idx: int ref); + +#keyset[package, idx] +errors(unique int id: @error, int kind: int ref, string msg: string ref, string rawpos: string ref, + string file: string ref, int line: int ref, int col: int ref, int package: @package ref, int idx: int ref); + +has_ellipsis(int id: @callorconversionexpr ref); + +variadic(int id: @signaturetype ref); + +#keyset[parent, idx] +typeparam(unique int tp: @typeparamtype ref, string name: string ref, int bound: @compositetype ref, + int parent: @typeparamparentobject ref, int idx: int ref); + +@container = @file | @folder; + +@locatable = @xmllocatable | @node | @localscope; + +@node = @documentable | @exprparent | @modexprparent | @fieldparent | @stmtparent | @declparent | @typeparamdeclparent + | @scopenode | @comment_group | @comment; + +@documentable = @file | @field | @typeparamdecl | @spec | @gendecl | @funcdecl | @modexpr; + +@exprparent = @funcdef | @file | @expr | @field | @stmt | @decl | @typeparamdecl | @spec; + +@modexprparent = @file | @modexpr; + +@fieldparent = @decl | @structtypeexpr | @functypeexpr | @interfacetypeexpr; + +@stmtparent = @funcdef | @stmt | @decl; + +@declparent = @file | @declstmt; + +@typeparamdeclparent = @funcdecl | @typespec; + +@funcdef = @funclit | @funcdecl; + +@scopenode = @file | @functypeexpr | @blockstmt | @ifstmt | @caseclause | @switchstmt | @commclause | @loopstmt; + +@location = @location_default; + +@sourceline = @locatable; + +case @comment.kind of + 0 = @slashslashcomment +| 1 = @slashstarcomment; + +case @expr.kind of + 0 = @badexpr +| 1 = @ident +| 2 = @ellipsis +| 3 = @intlit +| 4 = @floatlit +| 5 = @imaglit +| 6 = @charlit +| 7 = @stringlit +| 8 = @funclit +| 9 = @compositelit +| 10 = @parenexpr +| 11 = @selectorexpr +| 12 = @indexexpr +| 13 = @genericfunctioninstantiationexpr +| 14 = @generictypeinstantiationexpr +| 15 = @sliceexpr +| 16 = @typeassertexpr +| 17 = @callorconversionexpr +| 18 = @starexpr +| 19 = @keyvalueexpr +| 20 = @arraytypeexpr +| 21 = @structtypeexpr +| 22 = @functypeexpr +| 23 = @interfacetypeexpr +| 24 = @maptypeexpr +| 25 = @typesetliteralexpr +| 26 = @plusexpr +| 27 = @minusexpr +| 28 = @notexpr +| 29 = @complementexpr +| 30 = @derefexpr +| 31 = @addressexpr +| 32 = @arrowexpr +| 33 = @lorexpr +| 34 = @landexpr +| 35 = @eqlexpr +| 36 = @neqexpr +| 37 = @lssexpr +| 38 = @leqexpr +| 39 = @gtrexpr +| 40 = @geqexpr +| 41 = @addexpr +| 42 = @subexpr +| 43 = @orexpr +| 44 = @xorexpr +| 45 = @mulexpr +| 46 = @quoexpr +| 47 = @remexpr +| 48 = @shlexpr +| 49 = @shrexpr +| 50 = @andexpr +| 51 = @andnotexpr +| 52 = @sendchantypeexpr +| 53 = @recvchantypeexpr +| 54 = @sendrcvchantypeexpr; + +@basiclit = @intlit | @floatlit | @imaglit | @charlit | @stringlit; + +@operatorexpr = @logicalexpr | @arithmeticexpr | @bitwiseexpr | @unaryexpr | @binaryexpr; + +@logicalexpr = @logicalunaryexpr | @logicalbinaryexpr; + +@arithmeticexpr = @arithmeticunaryexpr | @arithmeticbinaryexpr; + +@bitwiseexpr = @bitwiseunaryexpr | @bitwisebinaryexpr; + +@unaryexpr = @logicalunaryexpr | @bitwiseunaryexpr | @arithmeticunaryexpr | @derefexpr | @addressexpr | @arrowexpr; + +@logicalunaryexpr = @notexpr; + +@bitwiseunaryexpr = @complementexpr; + +@arithmeticunaryexpr = @plusexpr | @minusexpr; + +@binaryexpr = @logicalbinaryexpr | @bitwisebinaryexpr | @arithmeticbinaryexpr | @comparison; + +@logicalbinaryexpr = @lorexpr | @landexpr; + +@bitwisebinaryexpr = @shiftexpr | @orexpr | @xorexpr | @andexpr | @andnotexpr; + +@arithmeticbinaryexpr = @addexpr | @subexpr | @mulexpr | @quoexpr | @remexpr; + +@shiftexpr = @shlexpr | @shrexpr; + +@comparison = @equalitytest | @relationalcomparison; + +@equalitytest = @eqlexpr | @neqexpr; + +@relationalcomparison = @lssexpr | @leqexpr | @gtrexpr | @geqexpr; + +@chantypeexpr = @sendchantypeexpr | @recvchantypeexpr | @sendrcvchantypeexpr; + +case @stmt.kind of + 0 = @badstmt +| 1 = @declstmt +| 2 = @emptystmt +| 3 = @labeledstmt +| 4 = @exprstmt +| 5 = @sendstmt +| 6 = @incstmt +| 7 = @decstmt +| 8 = @gostmt +| 9 = @deferstmt +| 10 = @returnstmt +| 11 = @breakstmt +| 12 = @continuestmt +| 13 = @gotostmt +| 14 = @fallthroughstmt +| 15 = @blockstmt +| 16 = @ifstmt +| 17 = @caseclause +| 18 = @exprswitchstmt +| 19 = @typeswitchstmt +| 20 = @commclause +| 21 = @selectstmt +| 22 = @forstmt +| 23 = @rangestmt +| 24 = @assignstmt +| 25 = @definestmt +| 26 = @addassignstmt +| 27 = @subassignstmt +| 28 = @mulassignstmt +| 29 = @quoassignstmt +| 30 = @remassignstmt +| 31 = @andassignstmt +| 32 = @orassignstmt +| 33 = @xorassignstmt +| 34 = @shlassignstmt +| 35 = @shrassignstmt +| 36 = @andnotassignstmt; + +@incdecstmt = @incstmt | @decstmt; + +@assignment = @simpleassignstmt | @compoundassignstmt; + +@simpleassignstmt = @assignstmt | @definestmt; + +@compoundassignstmt = @addassignstmt | @subassignstmt | @mulassignstmt | @quoassignstmt | @remassignstmt + | @andassignstmt | @orassignstmt | @xorassignstmt | @shlassignstmt | @shrassignstmt | @andnotassignstmt; + +@branchstmt = @breakstmt | @continuestmt | @gotostmt | @fallthroughstmt; + +@switchstmt = @exprswitchstmt | @typeswitchstmt; + +@loopstmt = @forstmt | @rangestmt; + +case @decl.kind of + 0 = @baddecl +| 1 = @importdecl +| 2 = @constdecl +| 3 = @typedecl +| 4 = @vardecl +| 5 = @funcdecl; + +@gendecl = @importdecl | @constdecl | @typedecl | @vardecl; + +case @spec.kind of + 0 = @importspec +| 1 = @valuespec +| 2 = @typedefspec +| 3 = @aliasspec; + +@typespec = @typedefspec | @aliasspec; + +case @object.kind of + 0 = @pkgobject +| 1 = @decltypeobject +| 2 = @builtintypeobject +| 3 = @declconstobject +| 4 = @builtinconstobject +| 5 = @declvarobject +| 6 = @declfunctionobject +| 7 = @builtinfunctionobject +| 8 = @labelobject; + +@typeparamparentobject = @decltypeobject | @declfunctionobject; + +@declobject = @decltypeobject | @declconstobject | @declvarobject | @declfunctionobject; + +@builtinobject = @builtintypeobject | @builtinconstobject | @builtinfunctionobject; + +@typeobject = @decltypeobject | @builtintypeobject; + +@valueobject = @constobject | @varobject | @functionobject; + +@constobject = @declconstobject | @builtinconstobject; + +@varobject = @declvarobject; + +@functionobject = @declfunctionobject | @builtinfunctionobject; + +case @scope.kind of + 0 = @universescope +| 1 = @packagescope +| 2 = @localscope; + +case @type.kind of + 0 = @invalidtype +| 1 = @boolexprtype +| 2 = @inttype +| 3 = @int8type +| 4 = @int16type +| 5 = @int32type +| 6 = @int64type +| 7 = @uinttype +| 8 = @uint8type +| 9 = @uint16type +| 10 = @uint32type +| 11 = @uint64type +| 12 = @uintptrtype +| 13 = @float32type +| 14 = @float64type +| 15 = @complex64type +| 16 = @complex128type +| 17 = @stringexprtype +| 18 = @unsafepointertype +| 19 = @boolliteraltype +| 20 = @intliteraltype +| 21 = @runeliteraltype +| 22 = @floatliteraltype +| 23 = @complexliteraltype +| 24 = @stringliteraltype +| 25 = @nilliteraltype +| 26 = @typeparamtype +| 27 = @arraytype +| 28 = @slicetype +| 29 = @structtype +| 30 = @pointertype +| 31 = @interfacetype +| 32 = @tupletype +| 33 = @signaturetype +| 34 = @maptype +| 35 = @sendchantype +| 36 = @recvchantype +| 37 = @sendrcvchantype +| 38 = @namedtype +| 39 = @typesetliteraltype; + +@basictype = @booltype | @numerictype | @stringtype | @literaltype | @invalidtype | @unsafepointertype; + +@booltype = @boolexprtype | @boolliteraltype; + +@numerictype = @integertype | @floattype | @complextype; + +@integertype = @signedintegertype | @unsignedintegertype; + +@signedintegertype = @inttype | @int8type | @int16type | @int32type | @int64type | @intliteraltype | @runeliteraltype; + +@unsignedintegertype = @uinttype | @uint8type | @uint16type | @uint32type | @uint64type | @uintptrtype; + +@floattype = @float32type | @float64type | @floatliteraltype; + +@complextype = @complex64type | @complex128type | @complexliteraltype; + +@stringtype = @stringexprtype | @stringliteraltype; + +@literaltype = @boolliteraltype | @intliteraltype | @runeliteraltype | @floatliteraltype | @complexliteraltype + | @stringliteraltype | @nilliteraltype; + +@compositetype = @typeparamtype | @containertype | @structtype | @pointertype | @interfacetype | @tupletype + | @signaturetype | @namedtype | @typesetliteraltype; + +@containertype = @arraytype | @slicetype | @maptype | @chantype; + +@chantype = @sendchantype | @recvchantype | @sendrcvchantype; + +case @modexpr.kind of + 0 = @modcommentblock +| 1 = @modline +| 2 = @modlineblock +| 3 = @modlparen +| 4 = @modrparen; + +case @error.kind of + 0 = @unknownerror +| 1 = @listerror +| 2 = @parseerror +| 3 = @typeerror; + diff --git a/go/ql/lib/upgrades/a58b81b1b4c4cccc8ca11731c1db86622f33af57/upgrade.properties b/go/ql/lib/upgrades/a58b81b1b4c4cccc8ca11731c1db86622f33af57/upgrade.properties new file mode 100644 index 000000000000..68a09f8148c7 --- /dev/null +++ b/go/ql/lib/upgrades/a58b81b1b4c4cccc8ca11731c1db86622f33af57/upgrade.properties @@ -0,0 +1,2 @@ +description: Add tables for struct tags and interface method IDs +compatibility: full diff --git a/go/ql/src/CHANGELOG.md b/go/ql/src/CHANGELOG.md index 69a5ed3e9f83..bdb40a2d2bb4 100644 --- a/go/ql/src/CHANGELOG.md +++ b/go/ql/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.1.1 + +No user-facing changes. + ## 1.1.0 ### Query Metadata Changes diff --git a/go/ql/src/Security/CWE-798/HardcodedCredentials.ql b/go/ql/src/Security/CWE-798/HardcodedCredentials.ql index 6dd422413f7f..37ebbad8f68b 100644 --- a/go/ql/src/Security/CWE-798/HardcodedCredentials.ql +++ b/go/ql/src/Security/CWE-798/HardcodedCredentials.ql @@ -23,8 +23,8 @@ import semmle.go.security.SensitiveActions */ predicate isSensitive(DataFlow::Node sink, SensitiveExpr::Classification type) { exists(Write write, string name | - write.getRhs() = sink and - name = write.getLhs().getName() and + pragma[only_bind_out](write).getRhs() = sink and + name = pragma[only_bind_out](write).getLhs().getName() and // allow obvious test password variables not name.regexpMatch(HeuristicNames::notSensitive()) | diff --git a/go/ql/src/change-notes/released/1.1.1.md b/go/ql/src/change-notes/released/1.1.1.md new file mode 100644 index 000000000000..7fb56d366105 --- /dev/null +++ b/go/ql/src/change-notes/released/1.1.1.md @@ -0,0 +1,3 @@ +## 1.1.1 + +No user-facing changes. diff --git a/go/ql/src/codeql-pack.release.yml b/go/ql/src/codeql-pack.release.yml index 2ac15439f561..1a19084be3f7 100644 --- a/go/ql/src/codeql-pack.release.yml +++ b/go/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.1.0 +lastReleaseVersion: 1.1.1 diff --git a/go/ql/src/qlpack.yml b/go/ql/src/qlpack.yml index e783026f6cfd..0dbc1fe67fae 100644 --- a/go/ql/src/qlpack.yml +++ b/go/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/go-queries -version: 1.1.0 +version: 1.1.1 groups: - go - queries diff --git a/go/ql/test/library-tests/semmle/go/PrintAst/PrintAst.expected b/go/ql/test/library-tests/semmle/go/PrintAst/PrintAst.expected index eb792c7028ed..41815e473a03 100644 --- a/go/ql/test/library-tests/semmle/go/PrintAst/PrintAst.expected +++ b/go/ql/test/library-tests/semmle/go/PrintAst/PrintAst.expected @@ -1,9 +1,9 @@ go.mod: -# 0| [GoModFile] library-tests/semmle/go/PrintAst/go.mod +# 0| [GoModFile] go.mod # 1| 0: [GoModModuleLine] go.mod module line # 3| 1: [GoModGoLine] go.mod go line input.go: -# 0| [GoFile] library-tests/semmle/go/PrintAst/input.go +# 0| [GoFile] input.go # 1| package: [Ident] main # 5| 1: [CommentGroup] comment group # 5| 0: [SlashSlashComment] comment @@ -597,7 +597,7 @@ input.go: # 145| Type = []int # 145| 1: [BlockStmt] block statement other.go: -# 0| [GoFile] library-tests/semmle/go/PrintAst/other.go +# 0| [GoFile] other.go # 1| package: [Ident] main # 3| 1: [FuncDecl] function declaration # 3| 0: [FunctionName, Ident] main diff --git a/go/ql/test/library-tests/semmle/go/PrintAst/PrintAstExcludeComments.expected b/go/ql/test/library-tests/semmle/go/PrintAst/PrintAstExcludeComments.expected index e0777268f048..570ce08f2394 100644 --- a/go/ql/test/library-tests/semmle/go/PrintAst/PrintAstExcludeComments.expected +++ b/go/ql/test/library-tests/semmle/go/PrintAst/PrintAstExcludeComments.expected @@ -1,9 +1,9 @@ go.mod: -# 0| [GoModFile] library-tests/semmle/go/PrintAst/go.mod +# 0| [GoModFile] go.mod # 1| 0: [GoModModuleLine] go.mod module line # 3| 1: [GoModGoLine] go.mod go line input.go: -# 0| [GoFile] library-tests/semmle/go/PrintAst/input.go +# 0| [GoFile] input.go # 1| package: [Ident] main # 3| 1: [ImportDecl] import declaration # 3| 0: [ImportSpec] import specifier @@ -577,7 +577,7 @@ input.go: # 145| Type = []int # 145| 1: [BlockStmt] block statement other.go: -# 0| [GoFile] library-tests/semmle/go/PrintAst/other.go +# 0| [GoFile] other.go # 1| package: [Ident] main # 3| 1: [FuncDecl] function declaration # 3| 0: [FunctionName, Ident] main diff --git a/go/ql/test/library-tests/semmle/go/PrintAst/PrintAstNestedFunction.expected b/go/ql/test/library-tests/semmle/go/PrintAst/PrintAstNestedFunction.expected index 7a04ffd637c6..c8a01b1ba97a 100644 --- a/go/ql/test/library-tests/semmle/go/PrintAst/PrintAstNestedFunction.expected +++ b/go/ql/test/library-tests/semmle/go/PrintAst/PrintAstNestedFunction.expected @@ -1,9 +1,9 @@ go.mod: -# 0| [GoModFile] library-tests/semmle/go/PrintAst/go.mod +# 0| [GoModFile] go.mod # 1| 0: [GoModModuleLine] go.mod module line # 3| 1: [GoModGoLine] go.mod go line input.go: -# 0| [GoFile] library-tests/semmle/go/PrintAst/input.go +# 0| [GoFile] input.go # 1| package: [Ident] main # 5| 1: [CommentGroup] comment group # 5| 0: [SlashSlashComment] comment @@ -29,7 +29,7 @@ input.go: # 3| 0: [ImportSpec] import specifier # 3| 0: [StringLit] "fmt" other.go: -# 0| [GoFile] library-tests/semmle/go/PrintAst/other.go +# 0| [GoFile] other.go # 1| package: [Ident] main # 8| 1: [FuncDecl] function declaration # 8| 0: [FunctionName, Ident] hasNested diff --git a/go/ql/test/library-tests/semmle/go/PrintAst/PrintAstRestrictFile.expected b/go/ql/test/library-tests/semmle/go/PrintAst/PrintAstRestrictFile.expected index 3df7749557d5..1981fde0357e 100644 --- a/go/ql/test/library-tests/semmle/go/PrintAst/PrintAstRestrictFile.expected +++ b/go/ql/test/library-tests/semmle/go/PrintAst/PrintAstRestrictFile.expected @@ -1,5 +1,5 @@ other.go: -# 0| [GoFile] library-tests/semmle/go/PrintAst/other.go +# 0| [GoFile] other.go # 1| package: [Ident] main # 3| 1: [FuncDecl] function declaration # 3| 0: [FunctionName, Ident] main diff --git a/go/ql/test/library-tests/semmle/go/PrintAst/PrintAstRestrictFunction.expected b/go/ql/test/library-tests/semmle/go/PrintAst/PrintAstRestrictFunction.expected index 85f2335d5b03..5783960cedc2 100644 --- a/go/ql/test/library-tests/semmle/go/PrintAst/PrintAstRestrictFunction.expected +++ b/go/ql/test/library-tests/semmle/go/PrintAst/PrintAstRestrictFunction.expected @@ -1,9 +1,9 @@ go.mod: -# 0| [GoModFile] library-tests/semmle/go/PrintAst/go.mod +# 0| [GoModFile] go.mod # 1| 0: [GoModModuleLine] go.mod module line # 3| 1: [GoModGoLine] go.mod go line input.go: -# 0| [GoFile] library-tests/semmle/go/PrintAst/input.go +# 0| [GoFile] input.go # 1| package: [Ident] main # 5| 1: [CommentGroup] comment group # 5| 0: [SlashSlashComment] comment @@ -29,7 +29,7 @@ input.go: # 3| 0: [ImportSpec] import specifier # 3| 0: [StringLit] "fmt" other.go: -# 0| [GoFile] library-tests/semmle/go/PrintAst/other.go +# 0| [GoFile] other.go # 1| package: [Ident] main # 6| 1: [FuncDecl] function declaration # 6| 0: [FunctionName, Ident] g diff --git a/go/ql/test/library-tests/semmle/go/Types/Field_getPackage.expected b/go/ql/test/library-tests/semmle/go/Types/Field_getPackage.expected index 758199c63523..6fd88c35259e 100644 --- a/go/ql/test/library-tests/semmle/go/Types/Field_getPackage.expected +++ b/go/ql/test/library-tests/semmle/go/Types/Field_getPackage.expected @@ -46,3 +46,7 @@ | pkg1/tst.go:30:2:30:5 | flag | package github.com/github/codeql-go/ql/test/library-tests/semmle/go/Types/pkg1 | | pkg2/tst.go:4:2:4:2 | g | package github.com/github/codeql-go/ql/test/library-tests/semmle/go/Types/pkg2 | | pkg2/tst.go:8:2:8:2 | g | package github.com/github/codeql-go/ql/test/library-tests/semmle/go/Types/pkg2 | +| struct_tags.go:4:2:4:7 | field1 | package github.com/github/codeql-go/ql/test/library-tests/semmle/go/Types | +| struct_tags.go:5:2:5:7 | field2 | package github.com/github/codeql-go/ql/test/library-tests/semmle/go/Types | +| struct_tags.go:9:2:9:7 | field1 | package github.com/github/codeql-go/ql/test/library-tests/semmle/go/Types | +| struct_tags.go:10:2:10:7 | field2 | package github.com/github/codeql-go/ql/test/library-tests/semmle/go/Types | diff --git a/go/ql/test/library-tests/semmle/go/Types/Field_hasQualifiedName2.expected b/go/ql/test/library-tests/semmle/go/Types/Field_hasQualifiedName2.expected index 4c69f36880be..910d9a0dd5ff 100644 --- a/go/ql/test/library-tests/semmle/go/Types/Field_hasQualifiedName2.expected +++ b/go/ql/test/library-tests/semmle/go/Types/Field_hasQualifiedName2.expected @@ -64,3 +64,7 @@ | pkg2/tst.go:4:2:4:2 | g | github.com/github/codeql-go/ql/test/library-tests/semmle/go/Types/pkg2.T | g | | pkg2/tst.go:8:2:8:2 | g | github.com/github/codeql-go/ql/test/library-tests/semmle/go/Types/pkg2.G | g | | pkg2/tst.go:8:2:8:2 | g | github.com/github/codeql-go/ql/test/library-tests/semmle/go/Types/pkg2.T | g | +| struct_tags.go:4:2:4:7 | field1 | github.com/github/codeql-go/ql/test/library-tests/semmle/go/Types.S1 | field1 | +| struct_tags.go:5:2:5:7 | field2 | github.com/github/codeql-go/ql/test/library-tests/semmle/go/Types.S1 | field2 | +| struct_tags.go:9:2:9:7 | field1 | github.com/github/codeql-go/ql/test/library-tests/semmle/go/Types.S2 | field1 | +| struct_tags.go:10:2:10:7 | field2 | github.com/github/codeql-go/ql/test/library-tests/semmle/go/Types.S2 | field2 | diff --git a/go/ql/test/library-tests/semmle/go/Types/Field_hasQualifiedName3.expected b/go/ql/test/library-tests/semmle/go/Types/Field_hasQualifiedName3.expected index 4fe8aee19f4c..1b8e88be66ff 100644 --- a/go/ql/test/library-tests/semmle/go/Types/Field_hasQualifiedName3.expected +++ b/go/ql/test/library-tests/semmle/go/Types/Field_hasQualifiedName3.expected @@ -64,3 +64,7 @@ | pkg2/tst.go:4:2:4:2 | g | github.com/github/codeql-go/ql/test/library-tests/semmle/go/Types/pkg2 | T | g | | pkg2/tst.go:8:2:8:2 | g | github.com/github/codeql-go/ql/test/library-tests/semmle/go/Types/pkg2 | G | g | | pkg2/tst.go:8:2:8:2 | g | github.com/github/codeql-go/ql/test/library-tests/semmle/go/Types/pkg2 | T | g | +| struct_tags.go:4:2:4:7 | field1 | github.com/github/codeql-go/ql/test/library-tests/semmle/go/Types | S1 | field1 | +| struct_tags.go:5:2:5:7 | field2 | github.com/github/codeql-go/ql/test/library-tests/semmle/go/Types | S1 | field2 | +| struct_tags.go:9:2:9:7 | field1 | github.com/github/codeql-go/ql/test/library-tests/semmle/go/Types | S2 | field1 | +| struct_tags.go:10:2:10:7 | field2 | github.com/github/codeql-go/ql/test/library-tests/semmle/go/Types | S2 | field2 | diff --git a/go/ql/test/library-tests/semmle/go/Types/InterfaceMethodIds.expected b/go/ql/test/library-tests/semmle/go/Types/InterfaceMethodIds.expected new file mode 100644 index 000000000000..9bcfcde1db96 --- /dev/null +++ b/go/ql/test/library-tests/semmle/go/Types/InterfaceMethodIds.expected @@ -0,0 +1,3 @@ +| interface { Exported func() ; notExported func() } | func() | Exported | +| interface { Exported func() ; notExported func() } | func() | github.com/github/codeql-go/ql/test/library-tests/semmle/go/Types/pkg1.notExported | +| interface { Exported func() ; notExported func() } | func() | github.com/github/codeql-go/ql/test/library-tests/semmle/go/Types/pkg2.notExported | diff --git a/go/ql/test/library-tests/semmle/go/Types/InterfaceMethodIds.ql b/go/ql/test/library-tests/semmle/go/Types/InterfaceMethodIds.ql new file mode 100644 index 000000000000..356bc85c931b --- /dev/null +++ b/go/ql/test/library-tests/semmle/go/Types/InterfaceMethodIds.ql @@ -0,0 +1,12 @@ +import go + +from NamedType nt, InterfaceType it, Type methodType, string id +where + nt.getName() = "MixedExportedAndNot" and + it = nt.getUnderlyingType() and + ( + it.hasPrivateMethodWithQualifiedName(_, id, methodType) + or + it.hasMethod(id, methodType) and not it.hasPrivateMethodWithQualifiedName(id, _, _) + ) +select it.pp(), methodType.pp(), id diff --git a/go/ql/test/library-tests/semmle/go/Types/MethodCount.expected b/go/ql/test/library-tests/semmle/go/Types/MethodCount.expected index 2b6dc32cada9..a91da6a8e90c 100644 --- a/go/ql/test/library-tests/semmle/go/Types/MethodCount.expected +++ b/go/ql/test/library-tests/semmle/go/Types/MethodCount.expected @@ -14,6 +14,7 @@ | C | 2 | | Foo | 1 | | GenericInterface | 1 | +| MixedExportedAndNot | 2 | | MyInterface | 17 | | T | 1 | | T3 | 1 | diff --git a/go/ql/test/library-tests/semmle/go/Types/MethodTypes.expected b/go/ql/test/library-tests/semmle/go/Types/MethodTypes.expected index da2e9c1eb308..695f2cb7e906 100644 --- a/go/ql/test/library-tests/semmle/go/Types/MethodTypes.expected +++ b/go/ql/test/library-tests/semmle/go/Types/MethodTypes.expected @@ -48,6 +48,10 @@ | pkg1/interfaces.go:26:6:26:14 | AExtended | m | func() | | pkg1/interfaces.go:26:6:26:14 | AExtended | n | func() | | pkg1/interfaces.go:31:6:31:7 | A2 | m | func() | +| pkg1/interfaces.go:35:6:35:24 | MixedExportedAndNot | Exported | func() | +| pkg1/interfaces.go:35:6:35:24 | MixedExportedAndNot | notExported | func() | | pkg1/tst.go:3:6:3:6 | T | half | func() Foo | | pkg1/tst.go:14:6:14:7 | T3 | half | func() Foo | | pkg1/tst.go:19:6:19:7 | T4 | half | func() Foo | +| pkg2/tst.go:11:6:11:24 | MixedExportedAndNot | Exported | func() | +| pkg2/tst.go:11:6:11:24 | MixedExportedAndNot | notExported | func() | diff --git a/go/ql/test/library-tests/semmle/go/Types/Method_hasQualifiedName2.expected b/go/ql/test/library-tests/semmle/go/Types/Method_hasQualifiedName2.expected index bf1bd76aa338..e39dc1c37bf2 100644 --- a/go/ql/test/library-tests/semmle/go/Types/Method_hasQualifiedName2.expected +++ b/go/ql/test/library-tests/semmle/go/Types/Method_hasQualifiedName2.expected @@ -53,7 +53,11 @@ | pkg1/interfaces.go:14:2:14:2 | o | github.com/github/codeql-go/ql/test/library-tests/semmle/go/Types/pkg1.C | o | | pkg1/interfaces.go:28:2:28:2 | n | github.com/github/codeql-go/ql/test/library-tests/semmle/go/Types/pkg1.AExtended | n | | pkg1/interfaces.go:32:2:32:2 | m | github.com/github/codeql-go/ql/test/library-tests/semmle/go/Types/pkg1.A2 | m | +| pkg1/interfaces.go:36:2:36:9 | Exported | github.com/github/codeql-go/ql/test/library-tests/semmle/go/Types/pkg1.MixedExportedAndNot | Exported | +| pkg1/interfaces.go:37:2:37:12 | notExported | github.com/github/codeql-go/ql/test/library-tests/semmle/go/Types/pkg1.MixedExportedAndNot | notExported | | pkg1/tst.go:33:16:33:19 | half | github.com/github/codeql-go/ql/test/library-tests/semmle/go/Types/pkg1.Foo | half | | pkg1/tst.go:33:16:33:19 | half | github.com/github/codeql-go/ql/test/library-tests/semmle/go/Types/pkg1.T | half | | pkg1/tst.go:33:16:33:19 | half | github.com/github/codeql-go/ql/test/library-tests/semmle/go/Types/pkg1.T3 | half | | pkg1/tst.go:33:16:33:19 | half | github.com/github/codeql-go/ql/test/library-tests/semmle/go/Types/pkg1.T4 | half | +| pkg2/tst.go:12:2:12:9 | Exported | github.com/github/codeql-go/ql/test/library-tests/semmle/go/Types/pkg2.MixedExportedAndNot | Exported | +| pkg2/tst.go:13:2:13:12 | notExported | github.com/github/codeql-go/ql/test/library-tests/semmle/go/Types/pkg2.MixedExportedAndNot | notExported | diff --git a/go/ql/test/library-tests/semmle/go/Types/Method_hasQualifiedName3.expected b/go/ql/test/library-tests/semmle/go/Types/Method_hasQualifiedName3.expected index 24eac7cebc14..6bf4488df233 100644 --- a/go/ql/test/library-tests/semmle/go/Types/Method_hasQualifiedName3.expected +++ b/go/ql/test/library-tests/semmle/go/Types/Method_hasQualifiedName3.expected @@ -53,7 +53,11 @@ | pkg1/interfaces.go:14:2:14:2 | o | github.com/github/codeql-go/ql/test/library-tests/semmle/go/Types/pkg1 | C | o | | pkg1/interfaces.go:28:2:28:2 | n | github.com/github/codeql-go/ql/test/library-tests/semmle/go/Types/pkg1 | AExtended | n | | pkg1/interfaces.go:32:2:32:2 | m | github.com/github/codeql-go/ql/test/library-tests/semmle/go/Types/pkg1 | A2 | m | +| pkg1/interfaces.go:36:2:36:9 | Exported | github.com/github/codeql-go/ql/test/library-tests/semmle/go/Types/pkg1 | MixedExportedAndNot | Exported | +| pkg1/interfaces.go:37:2:37:12 | notExported | github.com/github/codeql-go/ql/test/library-tests/semmle/go/Types/pkg1 | MixedExportedAndNot | notExported | | pkg1/tst.go:33:16:33:19 | half | github.com/github/codeql-go/ql/test/library-tests/semmle/go/Types/pkg1 | Foo | half | | pkg1/tst.go:33:16:33:19 | half | github.com/github/codeql-go/ql/test/library-tests/semmle/go/Types/pkg1 | T | half | | pkg1/tst.go:33:16:33:19 | half | github.com/github/codeql-go/ql/test/library-tests/semmle/go/Types/pkg1 | T3 | half | | pkg1/tst.go:33:16:33:19 | half | github.com/github/codeql-go/ql/test/library-tests/semmle/go/Types/pkg1 | T4 | half | +| pkg2/tst.go:12:2:12:9 | Exported | github.com/github/codeql-go/ql/test/library-tests/semmle/go/Types/pkg2 | MixedExportedAndNot | Exported | +| pkg2/tst.go:13:2:13:12 | notExported | github.com/github/codeql-go/ql/test/library-tests/semmle/go/Types/pkg2 | MixedExportedAndNot | notExported | diff --git a/go/ql/test/library-tests/semmle/go/Types/Methods.expected b/go/ql/test/library-tests/semmle/go/Types/Methods.expected index 8b2406ec8589..d84593653ad9 100644 --- a/go/ql/test/library-tests/semmle/go/Types/Methods.expected +++ b/go/ql/test/library-tests/semmle/go/Types/Methods.expected @@ -24,6 +24,10 @@ | C | o | pkg1/interfaces.go:14:2:14:2 | o | | Foo | half | pkg1/tst.go:33:16:33:19 | half | | GenericInterface | GetT | generic.go:33:2:33:5 | GetT | +| MixedExportedAndNot | Exported | pkg1/interfaces.go:36:2:36:9 | Exported | +| MixedExportedAndNot | Exported | pkg2/tst.go:12:2:12:9 | Exported | +| MixedExportedAndNot | notExported | pkg1/interfaces.go:37:2:37:12 | notExported | +| MixedExportedAndNot | notExported | pkg2/tst.go:13:2:13:12 | notExported | | MyInterface | clone | generic.go:48:2:48:6 | clone | | MyInterface | dummy1 | generic.go:49:2:49:7 | dummy1 | | MyInterface | dummy2 | generic.go:50:2:50:7 | dummy2 | diff --git a/go/ql/test/library-tests/semmle/go/Types/QualifiedNames.expected b/go/ql/test/library-tests/semmle/go/Types/QualifiedNames.expected index bedfbc5fa00a..b2befe28a2d1 100644 --- a/go/ql/test/library-tests/semmle/go/Types/QualifiedNames.expected +++ b/go/ql/test/library-tests/semmle/go/Types/QualifiedNames.expected @@ -90,6 +90,7 @@ | pkg1/interfaces.go:21:6:21:7 | AC | github.com/github/codeql-go/ql/test/library-tests/semmle/go/Types/pkg1.AC | | pkg1/interfaces.go:26:6:26:14 | AExtended | github.com/github/codeql-go/ql/test/library-tests/semmle/go/Types/pkg1.AExtended | | pkg1/interfaces.go:31:6:31:7 | A2 | github.com/github/codeql-go/ql/test/library-tests/semmle/go/Types/pkg1.A2 | +| pkg1/interfaces.go:35:6:35:24 | MixedExportedAndNot | github.com/github/codeql-go/ql/test/library-tests/semmle/go/Types/pkg1.MixedExportedAndNot | | pkg1/tst.go:3:6:3:6 | T | github.com/github/codeql-go/ql/test/library-tests/semmle/go/Types/pkg1.T | | pkg1/tst.go:9:6:9:7 | T2 | github.com/github/codeql-go/ql/test/library-tests/semmle/go/Types/pkg1.T2 | | pkg1/tst.go:14:6:14:7 | T3 | github.com/github/codeql-go/ql/test/library-tests/semmle/go/Types/pkg1.T3 | @@ -98,3 +99,6 @@ | pkg1/tst.go:29:6:29:8 | Bar | github.com/github/codeql-go/ql/test/library-tests/semmle/go/Types/pkg1.Bar | | pkg2/tst.go:3:6:3:6 | T | github.com/github/codeql-go/ql/test/library-tests/semmle/go/Types/pkg2.T | | pkg2/tst.go:7:6:7:6 | G | github.com/github/codeql-go/ql/test/library-tests/semmle/go/Types/pkg2.G | +| pkg2/tst.go:11:6:11:24 | MixedExportedAndNot | github.com/github/codeql-go/ql/test/library-tests/semmle/go/Types/pkg2.MixedExportedAndNot | +| struct_tags.go:3:6:3:7 | S1 | github.com/github/codeql-go/ql/test/library-tests/semmle/go/Types.S1 | +| struct_tags.go:8:6:8:7 | S2 | github.com/github/codeql-go/ql/test/library-tests/semmle/go/Types.S2 | diff --git a/go/ql/test/library-tests/semmle/go/Types/StructFields.expected b/go/ql/test/library-tests/semmle/go/Types/StructFields.expected index 5bce8e1d7df1..a8194965721e 100644 --- a/go/ql/test/library-tests/semmle/go/Types/StructFields.expected +++ b/go/ql/test/library-tests/semmle/go/Types/StructFields.expected @@ -66,3 +66,7 @@ | pkg2/tst.go:3:6:3:6 | T | pkg2/tst.go:7:8:9:1 | struct type | g | int | | pkg2/tst.go:7:6:7:6 | G | pkg2/tst.go:3:8:5:1 | struct type | g | int | | pkg2/tst.go:7:6:7:6 | G | pkg2/tst.go:7:8:9:1 | struct type | g | int | +| struct_tags.go:3:6:3:7 | S1 | struct_tags.go:3:9:6:1 | struct type | field1 | int | +| struct_tags.go:3:6:3:7 | S1 | struct_tags.go:3:9:6:1 | struct type | field2 | int | +| struct_tags.go:8:6:8:7 | S2 | struct_tags.go:8:9:11:1 | struct type | field1 | int | +| struct_tags.go:8:6:8:7 | S2 | struct_tags.go:8:9:11:1 | struct type | field2 | int | diff --git a/go/ql/test/library-tests/semmle/go/Types/Types.expected b/go/ql/test/library-tests/semmle/go/Types/Types.expected index 3801769db02d..19cfb7bd4f2e 100644 --- a/go/ql/test/library-tests/semmle/go/Types/Types.expected +++ b/go/ql/test/library-tests/semmle/go/Types/Types.expected @@ -90,6 +90,7 @@ | pkg1/interfaces.go:21:6:21:7 | AC | AC | | pkg1/interfaces.go:26:6:26:14 | AExtended | AExtended | | pkg1/interfaces.go:31:6:31:7 | A2 | A2 | +| pkg1/interfaces.go:35:6:35:24 | MixedExportedAndNot | MixedExportedAndNot | | pkg1/tst.go:3:6:3:6 | T | T | | pkg1/tst.go:9:6:9:7 | T2 | T2 | | pkg1/tst.go:14:6:14:7 | T3 | T3 | @@ -98,3 +99,6 @@ | pkg1/tst.go:29:6:29:8 | Bar | Bar | | pkg2/tst.go:3:6:3:6 | T | T | | pkg2/tst.go:7:6:7:6 | G | G | +| pkg2/tst.go:11:6:11:24 | MixedExportedAndNot | MixedExportedAndNot | +| struct_tags.go:3:6:3:7 | S1 | S1 | +| struct_tags.go:8:6:8:7 | S2 | S2 | diff --git a/go/ql/test/library-tests/semmle/go/Types/pkg1/interfaces.go b/go/ql/test/library-tests/semmle/go/Types/pkg1/interfaces.go index caeb62ea40ca..81a5e5854072 100644 --- a/go/ql/test/library-tests/semmle/go/Types/pkg1/interfaces.go +++ b/go/ql/test/library-tests/semmle/go/Types/pkg1/interfaces.go @@ -31,3 +31,8 @@ type AExtended interface { type A2 interface { m() } + +type MixedExportedAndNot interface { + Exported() + notExported() +} diff --git a/go/ql/test/library-tests/semmle/go/Types/pkg2/tst.go b/go/ql/test/library-tests/semmle/go/Types/pkg2/tst.go index 7f6f7f2d2877..af91e514b77c 100644 --- a/go/ql/test/library-tests/semmle/go/Types/pkg2/tst.go +++ b/go/ql/test/library-tests/semmle/go/Types/pkg2/tst.go @@ -7,3 +7,8 @@ type T struct { type G struct { g int } + +type MixedExportedAndNot interface { + Exported() + notExported() +} diff --git a/go/ql/test/library-tests/semmle/go/Types/struct_tags.expected b/go/ql/test/library-tests/semmle/go/Types/struct_tags.expected new file mode 100644 index 000000000000..33c7afd80ec6 --- /dev/null +++ b/go/ql/test/library-tests/semmle/go/Types/struct_tags.expected @@ -0,0 +1,4 @@ +| struct { field1 int `tag1a`; field2 int `tag2a` } | struct_tags.go:4:2:4:7 | field1 | tag1a | +| struct { field1 int `tag1a`; field2 int `tag2a` } | struct_tags.go:5:2:5:7 | field2 | tag2a | +| struct { field1 int `tag1b`; field2 int `tag2b` } | struct_tags.go:9:2:9:7 | field1 | tag1b | +| struct { field1 int `tag1b`; field2 int `tag2b` } | struct_tags.go:10:2:10:7 | field2 | tag2b | diff --git a/go/ql/test/library-tests/semmle/go/Types/struct_tags.go b/go/ql/test/library-tests/semmle/go/Types/struct_tags.go new file mode 100644 index 000000000000..c06f8395135a --- /dev/null +++ b/go/ql/test/library-tests/semmle/go/Types/struct_tags.go @@ -0,0 +1,11 @@ +package main + +type S1 struct { + field1 int `tag1a` + field2 int `tag2a` +} + +type S2 struct { + field1 int `tag1b` + field2 int `tag2b` +} diff --git a/go/ql/test/library-tests/semmle/go/Types/struct_tags.ql b/go/ql/test/library-tests/semmle/go/Types/struct_tags.ql new file mode 100644 index 000000000000..05ce098aed4b --- /dev/null +++ b/go/ql/test/library-tests/semmle/go/Types/struct_tags.ql @@ -0,0 +1,8 @@ +import go + +from StructType s, Field f, string tag +where + f = s.getOwnField(_, _) and + tag = f.getTag() and + tag != "" +select s.pp(), f, tag diff --git a/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/stdin/go.mod b/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/stdin/go.mod new file mode 100644 index 000000000000..2334541a2f0d --- /dev/null +++ b/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/stdin/go.mod @@ -0,0 +1,3 @@ +module test + +go 1.22.6 diff --git a/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/stdin/source.expected b/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/stdin/source.expected new file mode 100644 index 000000000000..db33d6d2504a --- /dev/null +++ b/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/stdin/source.expected @@ -0,0 +1,3 @@ +testFailures +invalidModelRow +failures diff --git a/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/stdin/source.ext.yml b/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/stdin/source.ext.yml new file mode 100644 index 000000000000..92156e87f400 --- /dev/null +++ b/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/stdin/source.ext.yml @@ -0,0 +1,7 @@ +extensions: + + - addsTo: + pack: codeql/threat-models + extensible: threatModelConfiguration + data: + - ["stdin", true, 0] diff --git a/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/stdin/source.ql b/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/stdin/source.ql new file mode 100644 index 000000000000..eb7ba46508e7 --- /dev/null +++ b/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/stdin/source.ql @@ -0,0 +1,19 @@ +import go +import ModelValidation +import TestUtilities.InlineExpectationsTest + +module SourceTest implements TestSig { + string getARelevantTag() { result = "source" } + + predicate hasActualResult(Location location, string element, string tag, string value) { + exists(ActiveThreatModelSource s | + s.hasLocationInfo(location.getFile().getAbsolutePath(), location.getStartLine(), + location.getStartColumn(), location.getEndLine(), location.getEndColumn()) and + element = s.toString() and + value = "" and + tag = "source" + ) + } +} + +import MakeTest diff --git a/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/stdin/test.expected b/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/stdin/test.expected new file mode 100644 index 000000000000..55e9aed2e93c --- /dev/null +++ b/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/stdin/test.expected @@ -0,0 +1,2 @@ +testFailures +invalidModelRow diff --git a/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/stdin/test.ext.yml b/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/stdin/test.ext.yml new file mode 100644 index 000000000000..92156e87f400 --- /dev/null +++ b/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/stdin/test.ext.yml @@ -0,0 +1,7 @@ +extensions: + + - addsTo: + pack: codeql/threat-models + extensible: threatModelConfiguration + data: + - ["stdin", true, 0] diff --git a/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/stdin/test.go b/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/stdin/test.go new file mode 100644 index 000000000000..4166dc4000b0 --- /dev/null +++ b/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/stdin/test.go @@ -0,0 +1,48 @@ +package test + +import ( + "bufio" + "fmt" + "os" +) + +func sink(string) { + +} + +func readStdinBuffer() { + buf := make([]byte, 1024) + n, err := os.Stdin.Read(buf) // $source + if err != nil { + return + } + sink(string(buf[:n])) // $hasTaintFlow="type conversion" +} + +func readStdinBuffReader() { + buf := make([]byte, 1024) + r := bufio.NewReader(os.Stdin) // $source + n, err := r.Read(buf) + if err != nil { + return + } + sink(string(buf[:n])) // $hasTaintFlow="type conversion" +} + +func scan() { + var username, email string + fmt.Scan(&username, &email) // $source + sink(username) // $hasTaintFlow="username" +} + +func scanf() { + var s string + fmt.Scanf("%s", &s) // $source + sink(s) // $hasTaintFlow="s" +} + +func scanl() { + var s string + fmt.Scanln(&s) // $source + sink(s) // $hasTaintFlow="s" +} diff --git a/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/stdin/test.ql b/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/stdin/test.ql new file mode 100644 index 000000000000..5cdebdbc6c93 --- /dev/null +++ b/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/stdin/test.ql @@ -0,0 +1,15 @@ +import go +import semmle.go.dataflow.ExternalFlow +import ModelValidation +import experimental.frameworks.CleverGo +import TestUtilities.InlineFlowTest + +module Config implements DataFlow::ConfigSig { + predicate isSource(DataFlow::Node source) { source instanceof ActiveThreatModelSource } + + predicate isSink(DataFlow::Node sink) { + sink.asExpr() = any(CallExpr c | c.getTarget().getName() = "sink").getArgument(0) + } +} + +import TaintFlowTest diff --git a/go/ql/test/query-tests/Diagnostics/ExtractionErrors.expected b/go/ql/test/query-tests/Diagnostics/ExtractionErrors.expected index b3a9e8631f08..c5afba4d05dd 100644 --- a/go/ql/test/query-tests/Diagnostics/ExtractionErrors.expected +++ b/go/ql/test/query-tests/Diagnostics/ExtractionErrors.expected @@ -1,5 +1,5 @@ -| Extraction failed in query-tests/Diagnostics/badimport.go with error invalid import path (invalid character U+007B '{') | 2 | -| Extraction failed in query-tests/Diagnostics/type.go with error cannot use v (variable of type V) as T value in argument to takesT | 2 | +| Extraction failed in badimport.go with error invalid import path (invalid character U+007B '{') | 2 | +| Extraction failed in type.go with error cannot use v (variable of type V) as T value in argument to takesT | 2 | | Extraction failed with error expected ';', found wnvwun | 2 | | Extraction failed with error expected 'IDENT', found newline | 2 | | Extraction failed with error expected 'package', found avvu | 2 | diff --git a/go/ql/test/query-tests/Diagnostics/SuccessfullyExtractedFiles.expected b/go/ql/test/query-tests/Diagnostics/SuccessfullyExtractedFiles.expected index f038c938c6dc..999b4a4eb4f1 100644 --- a/go/ql/test/query-tests/Diagnostics/SuccessfullyExtractedFiles.expected +++ b/go/ql/test/query-tests/Diagnostics/SuccessfullyExtractedFiles.expected @@ -1,4 +1,3 @@ -| ../../go.mod:0:0:0:0 | ../../go.mod | | | badimport.go:0:0:0:0 | badimport.go | | | type.go:0:0:0:0 | type.go | | | util.go:0:0:0:0 | util.go | | diff --git a/java/kotlin-extractor/deps.bzl b/java/kotlin-extractor/deps.bzl index 6e55969f2512..bee713f8c466 100644 --- a/java/kotlin-extractor/deps.bzl +++ b/java/kotlin-extractor/deps.bzl @@ -17,7 +17,7 @@ def _get_dep(repository_ctx, name): return repository_ctx.path(Label("//java/kotlin-extractor/deps:%s" % name)) def _kotlin_dep_impl(repository_ctx): - _, _, name = repository_ctx.name.rpartition("~") + _, _, name = repository_ctx.name.rpartition("+") lfs_smudge(repository_ctx, [_get_dep(repository_ctx, name + ".jar")]) # for some reason rules_kotlin warns about these jars missing, this is to silence those warnings diff --git a/java/ql/automodel/src/CHANGELOG.md b/java/ql/automodel/src/CHANGELOG.md index 4d632a2ae2d2..537e84b2c0e5 100644 --- a/java/ql/automodel/src/CHANGELOG.md +++ b/java/ql/automodel/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.10 + +No user-facing changes. + ## 1.0.9 No user-facing changes. diff --git a/java/ql/automodel/src/change-notes/released/1.0.10.md b/java/ql/automodel/src/change-notes/released/1.0.10.md new file mode 100644 index 000000000000..b601d8784532 --- /dev/null +++ b/java/ql/automodel/src/change-notes/released/1.0.10.md @@ -0,0 +1,3 @@ +## 1.0.10 + +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 fb813c5ee050..3865dbcf4b2a 100644 --- a/java/ql/automodel/src/codeql-pack.release.yml +++ b/java/ql/automodel/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.9 +lastReleaseVersion: 1.0.10 diff --git a/java/ql/automodel/src/qlpack.yml b/java/ql/automodel/src/qlpack.yml index 1e1fdbb9f38d..7621f1900d53 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: 1.0.9 +version: 1.0.10 groups: - java - automodel diff --git a/java/ql/lib/CHANGELOG.md b/java/ql/lib/CHANGELOG.md index 5441126d72c9..6be0cdc10e5a 100644 --- a/java/ql/lib/CHANGELOG.md +++ b/java/ql/lib/CHANGELOG.md @@ -1,3 +1,7 @@ +## 4.1.1 + +No user-facing changes. + ## 4.1.0 ### Deprecated APIs diff --git a/java/ql/lib/change-notes/released/4.1.1.md b/java/ql/lib/change-notes/released/4.1.1.md new file mode 100644 index 000000000000..23583cbad734 --- /dev/null +++ b/java/ql/lib/change-notes/released/4.1.1.md @@ -0,0 +1,3 @@ +## 4.1.1 + +No user-facing changes. diff --git a/java/ql/lib/codeql-pack.release.yml b/java/ql/lib/codeql-pack.release.yml index d5b1bf88d10e..9c871cefc42c 100644 --- a/java/ql/lib/codeql-pack.release.yml +++ b/java/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 4.1.0 +lastReleaseVersion: 4.1.1 diff --git a/java/ql/lib/ext/java.lang.model.yml b/java/ql/lib/ext/java.lang.model.yml index fa020831b78b..8c2c448f4c2f 100644 --- a/java/ql/lib/ext/java.lang.model.yml +++ b/java/ql/lib/ext/java.lang.model.yml @@ -212,7 +212,6 @@ extensions: - ["java.lang", "Object", "equals", "(Object)", "summary", "manual"] - ["java.lang", "Object", "getClass", "()", "summary", "manual"] - ["java.lang", "Object", "hashCode", "()", "summary", "manual"] - - ["java.lang", "Object", "toString", "()", "summary", "manual"] - ["java.lang", "Runtime", "getRuntime", "()", "summary", "manual"] - ["java.lang", "String", "compareTo", "(String)", "summary", "manual"] - ["java.lang", "String", "contains", "(CharSequence)", "summary", "manual"] diff --git a/java/ql/lib/qlpack.yml b/java/ql/lib/qlpack.yml index ab50defe90f8..8b7c059ba593 100644 --- a/java/ql/lib/qlpack.yml +++ b/java/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-all -version: 4.1.0 +version: 4.1.1 groups: java dbscheme: config/semmlecode.dbscheme extractor: java diff --git a/java/ql/lib/semmle/code/java/Exception.qll b/java/ql/lib/semmle/code/java/Exception.qll index c2c8e5682817..0b92975a580d 100644 --- a/java/ql/lib/semmle/code/java/Exception.qll +++ b/java/ql/lib/semmle/code/java/Exception.qll @@ -7,7 +7,7 @@ import Type /** * An Exception represents an element listed in the `throws` clause - * of a method of constructor. + * of a method or constructor. * * For example, `E` is an exception thrown by method `m` in * `void m() throws E;`, whereas `T` is an exception _type_ in diff --git a/java/ql/lib/semmle/code/java/dataflow/ExternalFlow.qll b/java/ql/lib/semmle/code/java/dataflow/ExternalFlow.qll index 28be9a61d75a..123e042b6215 100644 --- a/java/ql/lib/semmle/code/java/dataflow/ExternalFlow.qll +++ b/java/ql/lib/semmle/code/java/dataflow/ExternalFlow.qll @@ -416,7 +416,7 @@ private predicate elementSpec( or summaryModel(package, type, subtypes, name, signature, ext, _, _, _, _, _) or - neutralModel(package, type, name, signature, _, _) and ext = "" and subtypes = false + neutralModel(package, type, name, signature, _, _) and ext = "" and subtypes = true } private string getNestedName(Type t) { 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 feab4b3cec78..b4a2bad48f35 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/FlowSummaryImpl.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/FlowSummaryImpl.qll @@ -34,7 +34,7 @@ module Input implements InputSig { ) { exists(string namespace, string type, string name, string signature | neutralModel(namespace, type, name, signature, kind, provenance) and - c.asCallable() = interpretElement(namespace, type, false, name, signature, "", isExact) + c.asCallable() = interpretElement(namespace, type, true, name, signature, "", isExact) ) } diff --git a/java/ql/lib/semmle/code/java/frameworks/android/Layout.qll b/java/ql/lib/semmle/code/java/frameworks/android/Layout.qll index d7f0b0e2e6cb..ee430b62d577 100644 --- a/java/ql/lib/semmle/code/java/frameworks/android/Layout.qll +++ b/java/ql/lib/semmle/code/java/frameworks/android/Layout.qll @@ -6,7 +6,7 @@ private import semmle.code.java.dataflow.DataFlow /** An Android Layout XML file. */ class AndroidLayoutXmlFile extends XmlFile { - AndroidLayoutXmlFile() { this.getRelativePath().matches("%/res/layout/%.xml") } + AndroidLayoutXmlFile() { this.getRelativePath().regexpMatch("(.*/)?res/layout/.*\\.xml") } } /** A component declared in an Android layout file. */ diff --git a/java/ql/src/CHANGELOG.md b/java/ql/src/CHANGELOG.md index 20e7a248aebb..a034dc0abf90 100644 --- a/java/ql/src/CHANGELOG.md +++ b/java/ql/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.1.7 + +No user-facing changes. + ## 1.1.6 ### Minor Analysis Improvements diff --git a/java/ql/src/Metrics/Summaries/GeneratedVsManualCoverageQuery.qll b/java/ql/src/Metrics/Summaries/GeneratedVsManualCoverageQuery.qll index 9a2a0201e803..8309126c06de 100644 --- a/java/ql/src/Metrics/Summaries/GeneratedVsManualCoverageQuery.qll +++ b/java/ql/src/Metrics/Summaries/GeneratedVsManualCoverageQuery.qll @@ -17,12 +17,12 @@ private int getNumMadModeledApis(string package, string provenance, string apiSu ( // "auto-only" not sc.hasManualModel() and - sc.hasProvenance("df-generated") and + sc.hasGeneratedModel() and provenance = "generated" or sc.hasManualModel() and ( - if sc.hasProvenance("df-generated") + if sc.hasGeneratedModel() then // "both" provenance = "both" diff --git a/java/ql/src/change-notes/released/1.1.7.md b/java/ql/src/change-notes/released/1.1.7.md new file mode 100644 index 000000000000..81505c0507a2 --- /dev/null +++ b/java/ql/src/change-notes/released/1.1.7.md @@ -0,0 +1,3 @@ +## 1.1.7 + +No user-facing changes. diff --git a/java/ql/src/codeql-pack.release.yml b/java/ql/src/codeql-pack.release.yml index 9e712a00a21d..759105565166 100644 --- a/java/ql/src/codeql-pack.release.yml +++ b/java/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.1.6 +lastReleaseVersion: 1.1.7 diff --git a/java/ql/src/qlpack.yml b/java/ql/src/qlpack.yml index 635ef97836fe..82b14986199e 100644 --- a/java/ql/src/qlpack.yml +++ b/java/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-queries -version: 1.1.6 +version: 1.1.7 groups: - java - queries diff --git a/java/ql/src/utils/modeleditor/ModelEditor.qll b/java/ql/src/utils/modeleditor/ModelEditor.qll index d5286e9024a8..016b4664b3b9 100644 --- a/java/ql/src/utils/modeleditor/ModelEditor.qll +++ b/java/ql/src/utils/modeleditor/ModelEditor.qll @@ -77,7 +77,7 @@ class Endpoint extends Callable { predicate isNeutral() { exists(string namespace, string type, string name, string signature | neutralModel(namespace, type, name, signature, _, _) and - this = interpretElement(namespace, type, false, name, signature, "", _) + this = interpretElement(namespace, type, true, name, signature, "", _) ) } diff --git a/java/ql/test-kotlin1/library-tests/classes/local_anonymous.ql b/java/ql/test-kotlin1/library-tests/classes/local_anonymous.ql index af8e63e50d8d..479c6111d42e 100644 --- a/java/ql/test-kotlin1/library-tests/classes/local_anonymous.ql +++ b/java/ql/test-kotlin1/library-tests/classes/local_anonymous.ql @@ -1,8 +1,6 @@ import java -private predicate filterFile(Top t) { - t.getFile().getRelativePath().matches("%/local_anonymous.kt") -} +private predicate filterFile(Top t) { t.getFile().getRelativePath().matches("%local_anonymous.kt") } private string isAnonymousType(Type t) { if t instanceof AnonymousClass then result = "anonymous" else result = "not anonymous" diff --git a/java/ql/test-kotlin2/library-tests/classes/local_anonymous.ql b/java/ql/test-kotlin2/library-tests/classes/local_anonymous.ql index af8e63e50d8d..479c6111d42e 100644 --- a/java/ql/test-kotlin2/library-tests/classes/local_anonymous.ql +++ b/java/ql/test-kotlin2/library-tests/classes/local_anonymous.ql @@ -1,8 +1,6 @@ import java -private predicate filterFile(Top t) { - t.getFile().getRelativePath().matches("%/local_anonymous.kt") -} +private predicate filterFile(Top t) { t.getFile().getRelativePath().matches("%local_anonymous.kt") } private string isAnonymousType(Type t) { if t instanceof AnonymousClass then result = "anonymous" else result = "not anonymous" diff --git a/java/ql/test/ext/TopJdkApis/TopJdkApisTest.expected b/java/ql/test/ext/TopJdkApis/TopJdkApisTest.expected index f289ad7feb7b..b5e3960f1b4d 100644 --- a/java/ql/test/ext/TopJdkApis/TopJdkApisTest.expected +++ b/java/ql/test/ext/TopJdkApis/TopJdkApisTest.expected @@ -1,3 +1,4 @@ +| java.lang.Object#toString() | no manual model | | java.lang.Runnable#run() | no manual model | | java.util.Comparator#comparing(Function) | no manual model | | java.util.function.BiConsumer#accept(Object,Object) | no manual model | diff --git a/java/ql/test/library-tests/MemberRefExpr/parameters.expected b/java/ql/test/library-tests/MemberRefExpr/parameters.expected new file mode 100644 index 000000000000..2981f022fef6 --- /dev/null +++ b/java/ql/test/library-tests/MemberRefExpr/parameters.expected @@ -0,0 +1,10 @@ +| Test.java:3:22:3:24 | o | +| Test.java:7:22:7:26 | i | +| Test.java:45:22:45:26 | s | +| Test.java:49:29:49:42 | this | +| Test.java:50:29:50:42 | this | +| Test.java:51:29:51:39 | this | +| Test.java:52:40:52:64 | this | +| Test.java:70:13:70:22 | length | +| Test.java:71:13:71:26 | length | +| Test.java:75:31:75:47 | this | diff --git a/java/ql/test/library-tests/MemberRefExpr/parameters.ql b/java/ql/test/library-tests/MemberRefExpr/parameters.ql new file mode 100644 index 000000000000..d4b8690b4850 --- /dev/null +++ b/java/ql/test/library-tests/MemberRefExpr/parameters.ql @@ -0,0 +1,5 @@ +import java + +from Parameter p +where p.fromSource() +select p diff --git a/javascript/ql/lib/CHANGELOG.md b/javascript/ql/lib/CHANGELOG.md index bb77b4f1f496..6068cf26319d 100644 --- a/javascript/ql/lib/CHANGELOG.md +++ b/javascript/ql/lib/CHANGELOG.md @@ -1,3 +1,7 @@ +## 2.0.2 + +No user-facing changes. + ## 2.0.1 No user-facing changes. diff --git a/javascript/ql/lib/change-notes/released/2.0.2.md b/javascript/ql/lib/change-notes/released/2.0.2.md new file mode 100644 index 000000000000..862ef0e9df7c --- /dev/null +++ b/javascript/ql/lib/change-notes/released/2.0.2.md @@ -0,0 +1,3 @@ +## 2.0.2 + +No user-facing changes. diff --git a/javascript/ql/lib/codeql-pack.release.yml b/javascript/ql/lib/codeql-pack.release.yml index fe974a4dbf37..81c7f1dbc13c 100644 --- a/javascript/ql/lib/codeql-pack.release.yml +++ b/javascript/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 2.0.1 +lastReleaseVersion: 2.0.2 diff --git a/javascript/ql/lib/qlpack.yml b/javascript/ql/lib/qlpack.yml index a93cb421a869..8cf13a5240ce 100644 --- a/javascript/ql/lib/qlpack.yml +++ b/javascript/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/javascript-all -version: 2.0.1 +version: 2.0.2 groups: javascript dbscheme: semmlecode.javascript.dbscheme extractor: javascript diff --git a/javascript/ql/src/CHANGELOG.md b/javascript/ql/src/CHANGELOG.md index adf7daa3eb43..df7becd46de5 100644 --- a/javascript/ql/src/CHANGELOG.md +++ b/javascript/ql/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.2.2 + +No user-facing changes. + ## 1.2.1 No user-facing changes. diff --git a/javascript/ql/src/change-notes/released/1.2.2.md b/javascript/ql/src/change-notes/released/1.2.2.md new file mode 100644 index 000000000000..7b520f6c258f --- /dev/null +++ b/javascript/ql/src/change-notes/released/1.2.2.md @@ -0,0 +1,3 @@ +## 1.2.2 + +No user-facing changes. diff --git a/javascript/ql/src/codeql-pack.release.yml b/javascript/ql/src/codeql-pack.release.yml index 73dd403938c9..0a70a9a01a7e 100644 --- a/javascript/ql/src/codeql-pack.release.yml +++ b/javascript/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.2.1 +lastReleaseVersion: 1.2.2 diff --git a/javascript/ql/src/qlpack.yml b/javascript/ql/src/qlpack.yml index 49489696e79a..5aee59e9b015 100644 --- a/javascript/ql/src/qlpack.yml +++ b/javascript/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/javascript-queries -version: 1.2.1 +version: 1.2.2 groups: - javascript - queries diff --git a/javascript/ql/test/library-tests/Files/relativePaths.expected b/javascript/ql/test/library-tests/Files/relativePaths.expected index d70416666954..16c365fdbb13 100644 --- a/javascript/ql/test/library-tests/Files/relativePaths.expected +++ b/javascript/ql/test/library-tests/Files/relativePaths.expected @@ -1,2 +1,2 @@ -| a.js:0:0:0:0 | a.js | library-tests/Files/a.js | -| b/c.js:0:0:0:0 | b/c.js | library-tests/Files/b/c.js | +| a.js:0:0:0:0 | a.js | a.js | +| b/c.js:0:0:0:0 | b/c.js | b/c.js | diff --git a/javascript/ql/test/library-tests/Modules/tests.expected b/javascript/ql/test/library-tests/Modules/tests.expected index cec0b96049e8..bf0efddba553 100644 --- a/javascript/ql/test/library-tests/Modules/tests.expected +++ b/javascript/ql/test/library-tests/Modules/tests.expected @@ -115,16 +115,16 @@ test_ReExportDeclarations | m/c.js:5:1:5:30 | export ... '../b'; | m/c.js:5:24:5:29 | '../b' | | reExportNamespace.js:1:1:1:26 | export ... "./a"; | reExportNamespace.js:1:21:1:25 | "./a" | test_getAnImportedModule -| library-tests/Modules/b.js | library-tests/Modules/a.js | -| library-tests/Modules/d.js | library-tests/Modules/a.js | -| library-tests/Modules/d.js | library-tests/Modules/b.js | -| library-tests/Modules/es2015_require.js | library-tests/Modules/d.js | -| library-tests/Modules/f.ts | library-tests/Modules/e.js | -| library-tests/Modules/g.ts | library-tests/Modules/f.ts | -| library-tests/Modules/import-indirect-path.js | library-tests/Modules/a.js | -| library-tests/Modules/import-ts-with-js-extension.ts | library-tests/Modules/f.ts | -| library-tests/Modules/m/c.js | library-tests/Modules/b.js | -| library-tests/Modules/reExportNamespaceClient.js | library-tests/Modules/reExportNamespace.js | +| b.js | a.js | +| d.js | a.js | +| d.js | b.js | +| es2015_require.js | d.js | +| f.ts | e.js | +| g.ts | f.ts | +| import-indirect-path.js | a.js | +| import-ts-with-js-extension.ts | f.ts | +| m/c.js | b.js | +| reExportNamespaceClient.js | reExportNamespace.js | test_getExportedName | arbitrarySpecifier.ts:5:10:5:30 | Foo_new ... o::new" | Foo::new | | arbitrarySpecifier.ts:6:13:6:28 | * as "Foo_types" | Foo_types | diff --git a/javascript/ql/test/library-tests/NodeJS/tests.expected b/javascript/ql/test/library-tests/NodeJS/tests.expected index 2f5d09245ec8..b97c6a345e8f 100644 --- a/javascript/ql/test/library-tests/NodeJS/tests.expected +++ b/javascript/ql/test/library-tests/NodeJS/tests.expected @@ -94,12 +94,12 @@ requireImport | a.js:3:6:3:23 | require('./sub/c') | ./sub/c | sub/c.js:1:1:4:0 | | | a.js:4:6:4:29 | require ... /d.js') | ./sub/../d.js | d.js:1:1:7:15 | | | a.js:7:1:7:18 | require('./sub/c') | ./sub/c | sub/c.js:1:1:4:0 | | -| a.js:10:1:10:18 | require(__dirname) | /library-tests/NodeJS | index.js:1:1:3:0 | | -| a.js:11:1:11:25 | require ... + '/e') | /library-tests/NodeJS/e | e.js:1:1:6:0 | | +| a.js:10:1:10:18 | require(__dirname) | | index.js:1:1:3:0 | | +| a.js:11:1:11:25 | require ... + '/e') | /e | e.js:1:1:6:0 | | | a.js:12:1:12:28 | require ... + 'c') | ./sub/c | sub/c.js:1:1:4:0 | | | b.js:1:1:1:18 | require('./sub/c') | ./sub/c | sub/c.js:1:1:4:0 | | | d.js:7:1:7:14 | require('foo') | foo | sub/f.js:1:1:4:17 | | -| index.js:2:1:2:41 | require ... b.js")) | /library-tests/NodeJS/index.js/../b.js | b.js:1:1:8:0 | | +| index.js:2:1:2:41 | require ... b.js")) | /index.js/../b.js | b.js:1:1:8:0 | | | mjs-files/require-from-js.js:1:12:1:36 | require ... on-me') | ./depend-on-me | mjs-files/depend-on-me.mjs:1:1:7:1 | | | mjs-files/require-from-js.js:2:12:2:39 | require ... me.js') | ./depend-on-me.js | mjs-files/depend-on-me.js:1:1:8:0 | | | mjs-files/require-from-js.js:3:12:3:40 | require ... e.mjs') | ./depend-on-me.mjs | mjs-files/depend-on-me.mjs:1:1:7:1 | | diff --git a/javascript/ql/test/library-tests/TypeScript/EmbeddedInScript/Test.expected b/javascript/ql/test/library-tests/TypeScript/EmbeddedInScript/Test.expected index 711e94cfdaa1..2bb7faf59eb9 100644 --- a/javascript/ql/test/library-tests/TypeScript/EmbeddedInScript/Test.expected +++ b/javascript/ql/test/library-tests/TypeScript/EmbeddedInScript/Test.expected @@ -8,27 +8,27 @@ exprType | htmlfile.html:5:26:5:28 | foo | () => void | | htmlfile.html:5:26:5:30 | foo() | void | | htmlfile.html:5:26:5:42 | foo() as number[] | number[] | -| other.ts:1:8:1:16 | Component | typeof default in library-tests/TypeScript/EmbeddedInScript/test.vue | +| other.ts:1:8:1:16 | Component | typeof default in test.vue | | other.ts:1:23:1:34 | "./test.vue" | any | -| other.ts:2:8:2:19 | ComponentTsx | typeof default in library-tests/TypeScript/EmbeddedInScript/test_tsx.vue | +| other.ts:2:8:2:19 | ComponentTsx | typeof default in test_tsx.vue | | other.ts:2:26:2:41 | "./test_tsx.vue" | any | | other.ts:4:1:4:15 | new Component() | MyComponent | -| other.ts:4:5:4:13 | Component | typeof default in library-tests/TypeScript/EmbeddedInScript/test.vue | +| other.ts:4:5:4:13 | Component | typeof default in test.vue | | other.ts:5:1:5:18 | new ComponentTsx() | MyComponentTsx | -| other.ts:5:5:5:16 | ComponentTsx | typeof default in library-tests/TypeScript/EmbeddedInScript/test_tsx.vue | +| other.ts:5:5:5:16 | ComponentTsx | typeof default in test_tsx.vue | | other.ts:7:17:7:19 | foo | () => void | -| test.vue:2:15:2:19 | other | typeof library-tests/TypeScript/EmbeddedInScript/other.ts | +| test.vue:2:15:2:19 | other | typeof other.ts | | test.vue:2:26:2:34 | "./other" | any | | test.vue:3:24:3:34 | MyComponent | MyComponent | | test.vue:4:7:4:7 | x | number | -| test_tsx.vue:2:15:2:19 | other | typeof library-tests/TypeScript/EmbeddedInScript/other.ts | +| test_tsx.vue:2:15:2:19 | other | typeof other.ts | | test_tsx.vue:2:26:2:34 | "./other" | any | | test_tsx.vue:3:24:3:37 | MyComponentTsx | MyComponentTsx | | test_tsx.vue:4:7:4:7 | x | number | symbols -| other.ts:1:1:8:0 | | library-tests/TypeScript/EmbeddedInScript/other.ts | -| test.vue:2:3:6:0 | | library-tests/TypeScript/EmbeddedInScript/test.vue | -| test_tsx.vue:2:3:6:0 | | library-tests/TypeScript/EmbeddedInScript/test_tsx.vue | +| other.ts:1:1:8:0 | | other.ts | +| test.vue:2:3:6:0 | | test.vue | +| test_tsx.vue:2:3:6:0 | | test_tsx.vue | importTarget | htmlfile.html:4:13:4:42 | import ... other"; | other.ts:1:1:8:0 | | | other.ts:1:1:1:35 | import ... t.vue"; | test.vue:2:3:6:0 | | diff --git a/javascript/ql/test/library-tests/TypeScript/HasQualifiedNameFallback/Test.expected b/javascript/ql/test/library-tests/TypeScript/HasQualifiedNameFallback/Test.expected index 5da73c5cfe45..5ee97e2dfb59 100644 --- a/javascript/ql/test/library-tests/TypeScript/HasQualifiedNameFallback/Test.expected +++ b/javascript/ql/test/library-tests/TypeScript/HasQualifiedNameFallback/Test.expected @@ -1,12 +1,12 @@ hasQualifiedNameModule | default-import | default | tst.ts:11:9:11:21 | DefaultImport | | import-assign | Foo | tst.ts:10:9:10:15 | asn.Foo | -| library-tests/TypeScript/HasQualifiedNameFallback/tst.ts | ExportedClass | relative.ts:4:8:4:20 | ExportedClass | | named-import | Name1 | tst.ts:7:9:7:13 | Name1 | | named-import | Name1 | tst.ts:13:9:13:13 | Name1 | | named-import | Name1 | tst.ts:13:9:13:21 | Name1 | | named-import | Name2 | tst.ts:8:9:8:13 | Name2 | | namespace-import | Foo | tst.ts:9:9:9:21 | namespace.Foo | +| tst.ts | ExportedClass | relative.ts:4:8:4:20 | ExportedClass | hasQualifiedNameGlobal | UnresolvedName | tst.ts:12:9:12:22 | UnresolvedName | paramExample diff --git a/javascript/ql/test/library-tests/TypeScript/PathMapping/Imports.expected b/javascript/ql/test/library-tests/TypeScript/PathMapping/Imports.expected index c608ea2c7b61..886391b14552 100644 --- a/javascript/ql/test/library-tests/TypeScript/PathMapping/Imports.expected +++ b/javascript/ql/test/library-tests/TypeScript/PathMapping/Imports.expected @@ -1,11 +1,11 @@ symbols -| src/lib/foo.ts:1:1:4:0 | | library-tests/TypeScript/PathMapping/src/lib/foo.ts | -| src/lib/foo.ts:1:8:3:1 | functio ... 123;\\n} | foo in library-tests/TypeScript/PathMapping/src/lib/foo.ts | -| test/test_foo.ts:1:1:1:28 | import ... @/foo"; | library-tests/TypeScript/PathMapping/src/lib/foo.ts | -| test/test_foo.ts:1:1:7:0 | | library-tests/TypeScript/PathMapping/test/test_foo.ts | -| test/test_foo.ts:2:17:2:32 | require("@/foo") | library-tests/TypeScript/PathMapping/src/lib/foo.ts | -| test/test_foo.ts:4:1:4:5 | foo() | foo in library-tests/TypeScript/PathMapping/src/lib/foo.ts | -| test/test_foo.ts:6:1:6:12 | foolib.foo() | foo in library-tests/TypeScript/PathMapping/src/lib/foo.ts | +| src/lib/foo.ts:1:1:4:0 | | src/lib/foo.ts | +| src/lib/foo.ts:1:8:3:1 | functio ... 123;\\n} | foo in src/lib/foo.ts | +| test/test_foo.ts:1:1:1:28 | import ... @/foo"; | src/lib/foo.ts | +| test/test_foo.ts:1:1:7:0 | | test/test_foo.ts | +| test/test_foo.ts:2:17:2:32 | require("@/foo") | src/lib/foo.ts | +| test/test_foo.ts:4:1:4:5 | foo() | foo in src/lib/foo.ts | +| test/test_foo.ts:6:1:6:12 | foolib.foo() | foo in src/lib/foo.ts | #select | test/test_foo.ts:1:1:1:28 | import ... @/foo"; | src/lib/foo.ts:1:1:4:0 | | | test/test_foo.ts:2:17:2:32 | require("@/foo") | src/lib/foo.ts:1:1:4:0 | | diff --git a/javascript/ql/test/library-tests/TypeScript/QualifiedNameResolution/Namespaces.expected b/javascript/ql/test/library-tests/TypeScript/QualifiedNameResolution/Namespaces.expected index 214b23594e7f..0494011bc70a 100644 --- a/javascript/ql/test/library-tests/TypeScript/QualifiedNameResolution/Namespaces.expected +++ b/javascript/ql/test/library-tests/TypeScript/QualifiedNameResolution/Namespaces.expected @@ -1,33 +1,33 @@ -| A in library-tests/TypeScript/QualifiedNameResolution/enums.ts | -| A in library-tests/TypeScript/QualifiedNameResolution/export-qualified.ts | -| A in library-tests/TypeScript/QualifiedNameResolution/namespaces.ts | -| A.B in library-tests/TypeScript/QualifiedNameResolution/export-qualified.ts | -| A.C in library-tests/TypeScript/QualifiedNameResolution/namespaces.ts | -| A.E in library-tests/TypeScript/QualifiedNameResolution/enums.ts | +| A in enums.ts | +| A in export-qualified.ts | +| A in namespaces.ts | +| A.B in export-qualified.ts | +| A.C in namespaces.ts | +| A.E in enums.ts | | B in namespaces.ts:3 | | B in namespaces.ts:10 | | B.Bx in namespaces.ts:3 | | B.Bx in namespaces.ts:10 | -| D in library-tests/TypeScript/QualifiedNameResolution/export-specifiers.ts | -| D in library-tests/TypeScript/QualifiedNameResolution/namespaces.ts | -| D in library-tests/TypeScript/QualifiedNameResolution/otherlib.ts | -| D.F in library-tests/TypeScript/QualifiedNameResolution/namespaces.ts | +| D in export-specifiers.ts | +| D in namespaces.ts | +| D in otherlib.ts | +| D.F in namespaces.ts | | E in namespaces.ts:17 | | E in namespaces.ts:22 | | Foo in global scope | -| G in library-tests/TypeScript/QualifiedNameResolution/namespaces.ts | -| G.J in library-tests/TypeScript/QualifiedNameResolution/namespaces.ts | +| G in namespaces.ts | +| G.J in namespaces.ts | | Glob in global scope | | H in namespaces.ts:27 | | H.I in namespaces.ts:27 | -| N in library-tests/TypeScript/QualifiedNameResolution/export-specifiers.ts | +| N in export-specifiers.ts | | X in global scope | -| X in library-tests/TypeScript/QualifiedNameResolution/namespaces.ts | -| X.Y in library-tests/TypeScript/QualifiedNameResolution/namespaces.ts | -| X.Y.Z in library-tests/TypeScript/QualifiedNameResolution/namespaces.ts | +| X in namespaces.ts | +| X.Y in namespaces.ts | +| X.Y.Z in namespaces.ts | | Y in global scope | -| library-tests/TypeScript/QualifiedNameResolution/export-class.ts | -| library-tests/TypeScript/QualifiedNameResolution/namespaces.ts | -| library-tests/TypeScript/QualifiedNameResolution/otherlib.ts | -| library-tests/TypeScript/QualifiedNameResolution/reexport-all.ts | -| library-tests/TypeScript/QualifiedNameResolution/reexport-named.ts | +| export-class.ts | +| namespaces.ts | +| otherlib.ts | +| reexport-all.ts | +| reexport-named.ts | diff --git a/javascript/ql/test/library-tests/TypeScript/QualifiedNameResolution/ResolveNamespace.expected b/javascript/ql/test/library-tests/TypeScript/QualifiedNameResolution/ResolveNamespace.expected index 20df7b95bd9a..7ec8faec19ff 100644 --- a/javascript/ql/test/library-tests/TypeScript/QualifiedNameResolution/ResolveNamespace.expected +++ b/javascript/ql/test/library-tests/TypeScript/QualifiedNameResolution/ResolveNamespace.expected @@ -1,31 +1,31 @@ | ambient.ts:5:16:5:18 | Foo | Foo in global scope | -| enums.ts:9:8:9:8 | A | A in library-tests/TypeScript/QualifiedNameResolution/enums.ts | -| enums.ts:9:8:9:10 | A.E | A.E in library-tests/TypeScript/QualifiedNameResolution/enums.ts | -| enums.ts:10:8:10:8 | A | A in library-tests/TypeScript/QualifiedNameResolution/enums.ts | -| export-qualified-client.ts:3:8:3:9 | AB | A.B in library-tests/TypeScript/QualifiedNameResolution/export-qualified.ts | -| export-specifiers-client.ts:4:8:4:8 | N | N in library-tests/TypeScript/QualifiedNameResolution/export-specifiers.ts | -| export-specifiers-client.ts:5:8:5:8 | D | D in library-tests/TypeScript/QualifiedNameResolution/export-specifiers.ts | +| enums.ts:9:8:9:8 | A | A in enums.ts | +| enums.ts:9:8:9:10 | A.E | A.E in enums.ts | +| enums.ts:10:8:10:8 | A | A in enums.ts | +| export-qualified-client.ts:3:8:3:9 | AB | A.B in export-qualified.ts | +| export-specifiers-client.ts:4:8:4:8 | N | N in export-specifiers.ts | +| export-specifiers-client.ts:5:8:5:8 | D | D in export-specifiers.ts | | global.ts:5:9:5:12 | Glob | Glob in global scope | | import-in-namespace.ts:9:13:9:13 | A | X in global scope | -| namespaces-client.ts:4:9:4:10 | ns | library-tests/TypeScript/QualifiedNameResolution/namespaces.ts | -| namespaces-client.ts:4:9:4:12 | ns.G | G in library-tests/TypeScript/QualifiedNameResolution/namespaces.ts | -| namespaces-client.ts:5:9:5:9 | G | G in library-tests/TypeScript/QualifiedNameResolution/namespaces.ts | -| namespaces-client.ts:6:9:6:9 | G | G in library-tests/TypeScript/QualifiedNameResolution/namespaces.ts | -| namespaces-client.ts:6:9:6:11 | G.J | G.J in library-tests/TypeScript/QualifiedNameResolution/namespaces.ts | -| reexport-all-client.ts:4:9:4:10 | ns | library-tests/TypeScript/QualifiedNameResolution/reexport-all.ts | -| reexport-all-client.ts:4:9:4:12 | ns.G | G in library-tests/TypeScript/QualifiedNameResolution/namespaces.ts | -| reexport-all-client.ts:5:9:5:9 | G | G in library-tests/TypeScript/QualifiedNameResolution/namespaces.ts | -| reexport-all-client.ts:6:9:6:9 | G | G in library-tests/TypeScript/QualifiedNameResolution/namespaces.ts | -| reexport-all-client.ts:6:9:6:11 | G.J | G.J in library-tests/TypeScript/QualifiedNameResolution/namespaces.ts | -| reexport-all-client.ts:8:8:8:8 | D | D in library-tests/TypeScript/QualifiedNameResolution/otherlib.ts | -| reexport-all-client.ts:9:8:9:9 | ns | library-tests/TypeScript/QualifiedNameResolution/reexport-all.ts | -| reexport-all-client.ts:9:8:9:11 | ns.D | D in library-tests/TypeScript/QualifiedNameResolution/otherlib.ts | -| reexport-all-client.ts:11:8:11:9 | ns | library-tests/TypeScript/QualifiedNameResolution/reexport-all.ts | -| reexport-named-client.ts:4:9:4:10 | ns | library-tests/TypeScript/QualifiedNameResolution/reexport-named.ts | -| reexport-named-client.ts:4:9:4:12 | ns.G | G in library-tests/TypeScript/QualifiedNameResolution/namespaces.ts | -| reexport-named-client.ts:5:9:5:9 | G | G in library-tests/TypeScript/QualifiedNameResolution/namespaces.ts | -| reexport-named-client.ts:6:9:6:9 | G | G in library-tests/TypeScript/QualifiedNameResolution/namespaces.ts | -| reexport-named-client.ts:6:9:6:11 | G.J | G.J in library-tests/TypeScript/QualifiedNameResolution/namespaces.ts | -| reexport-named-client.ts:8:8:8:8 | X | D in library-tests/TypeScript/QualifiedNameResolution/namespaces.ts | -| reexport-named-client.ts:9:8:9:9 | ns | library-tests/TypeScript/QualifiedNameResolution/reexport-named.ts | -| reexport-named-client.ts:9:8:9:11 | ns.X | D in library-tests/TypeScript/QualifiedNameResolution/namespaces.ts | +| namespaces-client.ts:4:9:4:10 | ns | namespaces.ts | +| namespaces-client.ts:4:9:4:12 | ns.G | G in namespaces.ts | +| namespaces-client.ts:5:9:5:9 | G | G in namespaces.ts | +| namespaces-client.ts:6:9:6:9 | G | G in namespaces.ts | +| namespaces-client.ts:6:9:6:11 | G.J | G.J in namespaces.ts | +| reexport-all-client.ts:4:9:4:10 | ns | reexport-all.ts | +| reexport-all-client.ts:4:9:4:12 | ns.G | G in namespaces.ts | +| reexport-all-client.ts:5:9:5:9 | G | G in namespaces.ts | +| reexport-all-client.ts:6:9:6:9 | G | G in namespaces.ts | +| reexport-all-client.ts:6:9:6:11 | G.J | G.J in namespaces.ts | +| reexport-all-client.ts:8:8:8:8 | D | D in otherlib.ts | +| reexport-all-client.ts:9:8:9:9 | ns | reexport-all.ts | +| reexport-all-client.ts:9:8:9:11 | ns.D | D in otherlib.ts | +| reexport-all-client.ts:11:8:11:9 | ns | reexport-all.ts | +| reexport-named-client.ts:4:9:4:10 | ns | reexport-named.ts | +| reexport-named-client.ts:4:9:4:12 | ns.G | G in namespaces.ts | +| reexport-named-client.ts:5:9:5:9 | G | G in namespaces.ts | +| reexport-named-client.ts:6:9:6:9 | G | G in namespaces.ts | +| reexport-named-client.ts:6:9:6:11 | G.J | G.J in namespaces.ts | +| reexport-named-client.ts:8:8:8:8 | X | D in namespaces.ts | +| reexport-named-client.ts:9:8:9:9 | ns | reexport-named.ts | +| reexport-named-client.ts:9:8:9:11 | ns.X | D in namespaces.ts | diff --git a/javascript/ql/test/library-tests/TypeScript/QualifiedNameResolution/ResolveTypeName.expected b/javascript/ql/test/library-tests/TypeScript/QualifiedNameResolution/ResolveTypeName.expected index 008b2cbbbeb0..1629bdac5b15 100644 --- a/javascript/ql/test/library-tests/TypeScript/QualifiedNameResolution/ResolveTypeName.expected +++ b/javascript/ql/test/library-tests/TypeScript/QualifiedNameResolution/ResolveTypeName.expected @@ -1,27 +1,27 @@ | ambient.ts:5:16:5:20 | Foo.C | Foo.C in global scope | -| enums.ts:9:8:9:12 | A.E.x | A.E.x in library-tests/TypeScript/QualifiedNameResolution/enums.ts | -| enums.ts:10:8:10:10 | A.E | A.E in library-tests/TypeScript/QualifiedNameResolution/enums.ts | -| export-class-client-renamed.ts:3:8:3:8 | X | Banana in library-tests/TypeScript/QualifiedNameResolution/export-class.ts | -| export-class-client.ts:3:8:3:13 | Banana | Banana in library-tests/TypeScript/QualifiedNameResolution/export-class.ts | -| export-qualified-client.ts:3:8:3:11 | AB.C | A.B.C in library-tests/TypeScript/QualifiedNameResolution/export-qualified.ts | -| export-specifiers-client.ts:4:8:4:10 | N.C | N.C in library-tests/TypeScript/QualifiedNameResolution/export-specifiers.ts | -| export-specifiers-client.ts:5:8:5:10 | D.C | D.C in library-tests/TypeScript/QualifiedNameResolution/export-specifiers.ts | -| export-specifiers-client.ts:6:8:6:8 | C | C in library-tests/TypeScript/QualifiedNameResolution/export-specifiers.ts | +| enums.ts:9:8:9:12 | A.E.x | A.E.x in enums.ts | +| enums.ts:10:8:10:10 | A.E | A.E in enums.ts | +| export-class-client-renamed.ts:3:8:3:8 | X | Banana in export-class.ts | +| export-class-client.ts:3:8:3:13 | Banana | Banana in export-class.ts | +| export-qualified-client.ts:3:8:3:11 | AB.C | A.B.C in export-qualified.ts | +| export-specifiers-client.ts:4:8:4:10 | N.C | N.C in export-specifiers.ts | +| export-specifiers-client.ts:5:8:5:10 | D.C | D.C in export-specifiers.ts | +| export-specifiers-client.ts:6:8:6:8 | C | C in export-specifiers.ts | | global.ts:5:9:5:14 | Glob.C | Glob.C in global scope | | import-in-namespace.ts:9:13:9:15 | A.C | X.C in global scope | | import-in-namespace.ts:10:13:10:13 | D | X.C in global scope | -| namespaces-client.ts:4:9:4:14 | ns.G.C | G.C in library-tests/TypeScript/QualifiedNameResolution/namespaces.ts | -| namespaces-client.ts:5:9:5:11 | G.C | G.C in library-tests/TypeScript/QualifiedNameResolution/namespaces.ts | -| namespaces-client.ts:6:9:6:13 | G.J.C | G.J.C in library-tests/TypeScript/QualifiedNameResolution/namespaces.ts | -| reexport-all-client.ts:4:9:4:14 | ns.G.C | G.C in library-tests/TypeScript/QualifiedNameResolution/namespaces.ts | -| reexport-all-client.ts:5:9:5:11 | G.C | G.C in library-tests/TypeScript/QualifiedNameResolution/namespaces.ts | -| reexport-all-client.ts:6:9:6:13 | G.J.C | G.J.C in library-tests/TypeScript/QualifiedNameResolution/namespaces.ts | +| namespaces-client.ts:4:9:4:14 | ns.G.C | G.C in namespaces.ts | +| namespaces-client.ts:5:9:5:11 | G.C | G.C in namespaces.ts | +| namespaces-client.ts:6:9:6:13 | G.J.C | G.J.C in namespaces.ts | +| reexport-all-client.ts:4:9:4:14 | ns.G.C | G.C in namespaces.ts | +| reexport-all-client.ts:5:9:5:11 | G.C | G.C in namespaces.ts | +| reexport-all-client.ts:6:9:6:13 | G.J.C | G.J.C in namespaces.ts | | reexport-all-client.ts:8:8:8:10 | D.F | D.F in unknown scope | | reexport-all-client.ts:9:8:9:13 | ns.D.F | ns.D.F in unknown scope | -| reexport-all-client.ts:11:8:11:16 | ns.Banana | Banana in library-tests/TypeScript/QualifiedNameResolution/export-class.ts | -| reexport-named-client.ts:4:9:4:14 | ns.G.C | G.C in library-tests/TypeScript/QualifiedNameResolution/namespaces.ts | -| reexport-named-client.ts:5:9:5:11 | G.C | G.C in library-tests/TypeScript/QualifiedNameResolution/namespaces.ts | -| reexport-named-client.ts:6:9:6:13 | G.J.C | G.J.C in library-tests/TypeScript/QualifiedNameResolution/namespaces.ts | +| reexport-all-client.ts:11:8:11:16 | ns.Banana | Banana in export-class.ts | +| reexport-named-client.ts:4:9:4:14 | ns.G.C | G.C in namespaces.ts | +| reexport-named-client.ts:5:9:5:11 | G.C | G.C in namespaces.ts | +| reexport-named-client.ts:6:9:6:13 | G.J.C | G.J.C in namespaces.ts | | reexport-named-client.ts:8:8:8:10 | X.F | X.F in unknown scope | | reexport-named-client.ts:9:8:9:13 | ns.X.F | ns.X.F in unknown scope | -| reexport-named-client.ts:11:9:11:9 | Y | Banana in library-tests/TypeScript/QualifiedNameResolution/export-class.ts | +| reexport-named-client.ts:11:9:11:9 | Y | Banana in export-class.ts | diff --git a/javascript/ql/test/library-tests/TypeScript/RegressionTests/EmptyName/test.expected b/javascript/ql/test/library-tests/TypeScript/RegressionTests/EmptyName/test.expected index 47317a00a867..85cb86df42a2 100644 --- a/javascript/ql/test/library-tests/TypeScript/RegressionTests/EmptyName/test.expected +++ b/javascript/ql/test/library-tests/TypeScript/RegressionTests/EmptyName/test.expected @@ -1,4 +1,4 @@ | MK in unknown scope | -| Mapped in library-tests/TypeScript/RegressionTests/EmptyName/test.ts | -| fn in library-tests/TypeScript/RegressionTests/EmptyName/test.ts | -| library-tests/TypeScript/RegressionTests/EmptyName/test.ts | +| Mapped in test.ts | +| fn in test.ts | +| test.ts | diff --git a/javascript/ql/test/library-tests/TypeScript/RegressionTests/ExportEqualsExpr/test.expected b/javascript/ql/test/library-tests/TypeScript/RegressionTests/ExportEqualsExpr/test.expected index 3736c602bc32..24fc12058753 100644 --- a/javascript/ql/test/library-tests/TypeScript/RegressionTests/ExportEqualsExpr/test.expected +++ b/javascript/ql/test/library-tests/TypeScript/RegressionTests/ExportEqualsExpr/test.expected @@ -1,7 +1,7 @@ | "bar" in global scope | | C in module 'bar' | | Foo in global scope | -| Foo in library-tests/TypeScript/RegressionTests/ExportEqualsExpr/tst.ts | -| library-tests/TypeScript/RegressionTests/ExportEqualsExpr/tst.ts | +| Foo in tst.ts | | module 'bar' | | module 'foo' | +| tst.ts | diff --git a/javascript/ql/test/library-tests/TypeScript/RegressionTests/SemicolonInName/test.expected b/javascript/ql/test/library-tests/TypeScript/RegressionTests/SemicolonInName/test.expected index 074e6d0c2777..603eaba0d279 100644 --- a/javascript/ql/test/library-tests/TypeScript/RegressionTests/SemicolonInName/test.expected +++ b/javascript/ql/test/library-tests/TypeScript/RegressionTests/SemicolonInName/test.expected @@ -1,2 +1,2 @@ | Bar.Foo in global scope | Bar in global scope | -| fn in library-tests/TypeScript/RegressionTests/SemicolonInName/test.ts | library-tests/TypeScript/RegressionTests/SemicolonInName/test.ts | +| fn in test.ts | test.ts | diff --git a/javascript/ql/test/library-tests/TypeScript/SyntaxErrors/SyntaxErrors.expected b/javascript/ql/test/library-tests/TypeScript/SyntaxErrors/SyntaxErrors.expected index 58e88ed6fe11..cca870438e91 100644 --- a/javascript/ql/test/library-tests/TypeScript/SyntaxErrors/SyntaxErrors.expected +++ b/javascript/ql/test/library-tests/TypeScript/SyntaxErrors/SyntaxErrors.expected @@ -1 +1 @@ -| library-tests/TypeScript/SyntaxErrors/jsdocTypes.ts | This file contains a parse error | +| jsdocTypes.ts | This file contains a parse error | diff --git a/javascript/ql/test/library-tests/TypeScript/Types/tests.expected b/javascript/ql/test/library-tests/TypeScript/Types/tests.expected index 1cf1ca607ae3..b786fae3713e 100644 --- a/javascript/ql/test/library-tests/TypeScript/Types/tests.expected +++ b/javascript/ql/test/library-tests/TypeScript/Types/tests.expected @@ -1,7 +1,7 @@ booleans | boolean | getExprType -| boolean-type.ts:1:13:1:17 | dummy | typeof library-tests/TypeScript/Types/dummy.ts | +| boolean-type.ts:1:13:1:17 | dummy | typeof dummy.ts | | boolean-type.ts:1:24:1:32 | "./dummy" | any | | boolean-type.ts:3:5:3:9 | true1 | true | | boolean-type.ts:4:5:4:9 | true2 | true | @@ -24,7 +24,7 @@ getExprType | middle-rest.ts:3:8:3:11 | true | true | | middle-rest.ts:3:14:3:20 | "hello" | "hello" | | middle-rest.ts:3:23:3:25 | 123 | 123 | -| tst.ts:1:13:1:17 | dummy | typeof library-tests/TypeScript/Types/dummy.ts | +| tst.ts:1:13:1:17 | dummy | typeof dummy.ts | | tst.ts:1:24:1:32 | "./dummy" | any | | tst.ts:3:5:3:10 | numVar | number | | tst.ts:5:5:5:8 | num1 | number | @@ -127,7 +127,7 @@ getExprType | tst.ts:69:24:69:45 | {yetAno ... : true} | MyUnion2 | | tst.ts:69:25:69:38 | yetAnotherType | true | | tst.ts:69:41:69:44 | true | true | -| tst.ts:71:8:71:11 | TS43 | typeof TS43 in library-tests/TypeScript/Types/tst.ts | +| tst.ts:71:8:71:11 | TS43 | typeof TS43 in tst.ts | | tst.ts:74:5:74:22 | get size(): number | number | | tst.ts:74:9:74:12 | size | number | | tst.ts:75:5:75:47 | set siz ... olean); | number | @@ -175,7 +175,7 @@ getExprType | tst.ts:126:7:126:22 | this.#someMethod | () => number | | tst.ts:126:7:126:24 | this.#someMethod() | number | | tst.ts:127:14:127:28 | this.#someValue | number | -| tst.ts:132:8:132:11 | TS44 | typeof TS44 in library-tests/TypeScript/Types/tst.ts | +| tst.ts:132:8:132:11 | TS44 | typeof TS44 in tst.ts | | tst.ts:133:12:133:14 | foo | (arg: unknown) => void | | tst.ts:133:16:133:18 | arg | unknown | | tst.ts:134:11:134:21 | argIsString | boolean | @@ -260,7 +260,7 @@ getExprType | tst.ts:189:11:189:15 | count | number | | tst.ts:189:19:189:21 | Foo | typeof Foo in tst.ts:132 | | tst.ts:189:19:189:28 | Foo.#count | number | -| tst.ts:195:8:195:11 | TS45 | typeof TS45 in library-tests/TypeScript/Types/tst.ts | +| tst.ts:195:8:195:11 | TS45 | typeof TS45 in tst.ts | | tst.ts:207:5:207:8 | body | string | | tst.ts:212:7:212:13 | message | string | | tst.ts:215:19:215:25 | handler | (r: Success \| Error) => void | @@ -301,7 +301,7 @@ getExprType | tst.ts:238:11:238:14 | Foo3 | { foo: string; } | | tst.ts:238:11:238:18 | Foo3.foo | string | | tst.ts:238:16:238:18 | foo | string | -| tst.ts:240:8:240:11 | TS46 | typeof TS46 in library-tests/TypeScript/Types/tst.ts | +| tst.ts:240:8:240:11 | TS46 | typeof TS46 in tst.ts | | tst.ts:241:9:241:12 | Base | Base | | tst.ts:243:9:243:15 | Derived | Derived | | tst.ts:243:25:243:28 | Base | Base | @@ -481,27 +481,27 @@ getExprType | tst.ts:362:9:362:11 | log | (...data: any[]) => void | | tst.ts:362:13:362:24 | tstModuleCJS | () => "a" \| "b" | | tst.ts:362:13:362:26 | tstModuleCJS() | "a" \| "b" | -| tst.ts:368:13:368:13 | A | typeof library-tests/TypeScript/Types/tstSuffixA.ts | +| tst.ts:368:13:368:13 | A | typeof tstSuffixA.ts | | tst.ts:368:20:368:33 | './tstSuffixA' | any | | tst.ts:370:1:370:7 | console | Console | | tst.ts:370:1:370:11 | console.log | (...data: any[]) => void | | tst.ts:370:1:370:29 | console ... File()) | void | | tst.ts:370:9:370:11 | log | (...data: any[]) => void | -| tst.ts:370:13:370:13 | A | typeof library-tests/TypeScript/Types/tstSuffixA.ts | +| tst.ts:370:13:370:13 | A | typeof tstSuffixA.ts | | tst.ts:370:13:370:26 | A.resolvedFile | () => "tstSuffixA.ts" | | tst.ts:370:13:370:28 | A.resolvedFile() | "tstSuffixA.ts" | | tst.ts:370:15:370:26 | resolvedFile | () => "tstSuffixA.ts" | -| tst.ts:372:13:372:13 | B | typeof library-tests/TypeScript/Types/tstSuffixB.ios.ts | +| tst.ts:372:13:372:13 | B | typeof tstSuffixB.ios.ts | | tst.ts:372:20:372:33 | './tstSuffixB' | any | | tst.ts:374:1:374:7 | console | Console | | tst.ts:374:1:374:11 | console.log | (...data: any[]) => void | | tst.ts:374:1:374:29 | console ... File()) | void | | tst.ts:374:9:374:11 | log | (...data: any[]) => void | -| tst.ts:374:13:374:13 | B | typeof library-tests/TypeScript/Types/tstSuffixB.ios.ts | +| tst.ts:374:13:374:13 | B | typeof tstSuffixB.ios.ts | | tst.ts:374:13:374:26 | B.resolvedFile | () => "tstSuffixB.ios.ts" | | tst.ts:374:13:374:28 | B.resolvedFile() | "tstSuffixB.ios.ts" | | tst.ts:374:15:374:26 | resolvedFile | () => "tstSuffixB.ios.ts" | -| tst.ts:379:8:379:11 | TS48 | typeof TS48 in library-tests/TypeScript/Types/tst.ts | +| tst.ts:379:8:379:11 | TS48 | typeof TS48 in tst.ts | | tst.ts:383:22:383:35 | chooseRandomly | (x: T, y: T) => T | | tst.ts:383:40:383:40 | x | T | | tst.ts:383:46:383:46 | y | T | @@ -518,7 +518,7 @@ getExprType | tst.ts:385:56:385:56 | 0 | 0 | | tst.ts:385:59:385:63 | false | false | | tst.ts:385:66:385:71 | "bye!" | "bye!" | -| tst.ts:390:8:390:11 | TS49 | typeof TS49 in library-tests/TypeScript/Types/tst.ts | +| tst.ts:390:8:390:11 | TS49 | typeof TS49 in tst.ts | | tst.ts:395:9:395:15 | palette | { red: [number, number, number]; green: string;... | | tst.ts:395:19:399:3 | {\\n r ... 5],\\n } | Record | | tst.ts:395:19:399:42 | {\\n r ... \| RGB> | { red: [number, number, number]; green: string;... | @@ -559,7 +559,7 @@ getExprType | tst.ts:423:7:423:22 | this.name = name | string | | tst.ts:423:12:423:15 | name | string | | tst.ts:423:19:423:22 | name | string | -| tst.ts:430:8:430:11 | TS50 | typeof TS50 in library-tests/TypeScript/Types/tst.ts | +| tst.ts:430:8:430:11 | TS50 | typeof TS50 in tst.ts | | tst.ts:432:33:432:36 | args | Args | | tst.ts:433:68:433:71 | args | Args | | tst.ts:435:15:435:24 | methodName | string | @@ -632,7 +632,7 @@ getExprType | tst.ts:467:15:467:17 | foo | readonly ["a", "b", "c"] | | tst.ts:467:15:467:20 | foo[1] | "b" | | tst.ts:467:19:467:19 | 1 | 1 | -| tst.ts:472:8:472:11 | TS52 | typeof TS52 in library-tests/TypeScript/Types/tst.ts | +| tst.ts:472:8:472:11 | TS52 | typeof TS52 in tst.ts | | tst.ts:473:11:473:19 | SomeClass | SomeClass | | tst.ts:474:10:474:36 | ((_targ ... => {}) | (_target: undefined, _context: ClassFieldDecora... | | tst.ts:474:11:474:35 | (_targe ... ) => {} | (_target: undefined, _context: ClassFieldDecora... | @@ -657,7 +657,7 @@ getExprType | tst.ts:483:17:483:58 | ["hello ... string> | [first: string, string] | | tst.ts:483:18:483:24 | "hello" | "hello" | | tst.ts:483:27:483:33 | "world" | "world" | -| tst.ts:486:8:486:11 | TS54 | typeof TS54 in library-tests/TypeScript/Types/tst.ts | +| tst.ts:486:8:486:11 | TS54 | typeof TS54 in tst.ts | | tst.ts:487:48:487:53 | colors | C[] | | tst.ts:488:12:488:17 | colors | C[] | | tst.ts:488:12:488:20 | colors[0] | C | @@ -691,7 +691,7 @@ getExprType | tst.ts:494:24:494:24 | 0 | 0 | | tst.ts:494:28:494:33 | "even" | "even" | | tst.ts:494:36:494:40 | "odd" | "odd" | -| tst.ts:498:8:498:11 | TS55 | typeof TS55 in library-tests/TypeScript/Types/tst.ts | +| tst.ts:498:8:498:11 | TS55 | typeof TS55 in tst.ts | | tst.ts:499:9:499:15 | strings | string[] | | tst.ts:499:19:499:32 | (["foo", 123]) | (string \| number)[] | | tst.ts:499:19:500:11 | (["foo" ... .filter | { (predicate: (value... | @@ -779,18 +779,18 @@ getExprType | type_alias.ts:26:19:26:20 | id | string | | type_alias.ts:26:23:26:36 | "second-child" | "second-child" | | type_alias.ts:26:41:26:62 | "I'm th ... child" | "I'm the second child" | -| type_definition_objects.ts:1:13:1:17 | dummy | typeof library-tests/TypeScript/Types/dummy.ts | +| type_definition_objects.ts:1:13:1:17 | dummy | typeof dummy.ts | | type_definition_objects.ts:1:24:1:32 | "./dummy" | any | | type_definition_objects.ts:3:14:3:14 | C | C | -| type_definition_objects.ts:4:5:4:12 | classObj | typeof C in library-tests/TypeScript/Types/type_definition_objects.ts | -| type_definition_objects.ts:4:16:4:16 | C | typeof C in library-tests/TypeScript/Types/type_definition_objects.ts | +| type_definition_objects.ts:4:5:4:12 | classObj | typeof C in type_definition_objects.ts | +| type_definition_objects.ts:4:16:4:16 | C | typeof C in type_definition_objects.ts | | type_definition_objects.ts:6:13:6:13 | E | E | -| type_definition_objects.ts:7:5:7:11 | enumObj | typeof E in library-tests/TypeScript/Types/type_definition_objects.ts | -| type_definition_objects.ts:7:15:7:15 | E | typeof E in library-tests/TypeScript/Types/type_definition_objects.ts | -| type_definition_objects.ts:9:18:9:18 | N | typeof N in library-tests/TypeScript/Types/type_definition_objects.ts | -| type_definition_objects.ts:10:5:10:16 | namespaceObj | typeof N in library-tests/TypeScript/Types/type_definition_objects.ts | -| type_definition_objects.ts:10:20:10:20 | N | typeof N in library-tests/TypeScript/Types/type_definition_objects.ts | -| type_definitions.ts:1:13:1:17 | dummy | typeof library-tests/TypeScript/Types/dummy.ts | +| type_definition_objects.ts:7:5:7:11 | enumObj | typeof E in type_definition_objects.ts | +| type_definition_objects.ts:7:15:7:15 | E | typeof E in type_definition_objects.ts | +| type_definition_objects.ts:9:18:9:18 | N | typeof N in type_definition_objects.ts | +| type_definition_objects.ts:10:5:10:16 | namespaceObj | typeof N in type_definition_objects.ts | +| type_definition_objects.ts:10:20:10:20 | N | typeof N in type_definition_objects.ts | +| type_definitions.ts:1:13:1:17 | dummy | typeof dummy.ts | | type_definitions.ts:1:24:1:32 | "./dummy" | any | | type_definitions.ts:4:3:4:3 | x | S | | type_definitions.ts:6:5:6:5 | i | I | diff --git a/javascript/ql/test/query-tests/Metrics/ExternalDependencies/ExternalDependencies.expected b/javascript/ql/test/query-tests/Metrics/ExternalDependencies/ExternalDependencies.expected index d690d12e11b1..39b6d8ffcad8 100644 --- a/javascript/ql/test/query-tests/Metrics/ExternalDependencies/ExternalDependencies.expected +++ b/javascript/ql/test/query-tests/Metrics/ExternalDependencies/ExternalDependencies.expected @@ -1,9 +1,9 @@ -| /query-tests/Metrics/ExternalDependencies/src/tst.html<\|>jquery<\|>23.0.0 | 4 | -| /query-tests/Metrics/ExternalDependencies/src/a.js<\|>lib3<\|>unknown | 3 | -| /query-tests/Metrics/ExternalDependencies/src/tst.html<\|>jquery<\|>42.0.0 | 3 | -| /query-tests/Metrics/ExternalDependencies/src/a.js<\|>lib1<\|>1.0.2 | 2 | -| /query-tests/Metrics/ExternalDependencies/src/b.js<\|>lib3<\|>unknown | 2 | -| /query-tests/Metrics/ExternalDependencies/src/a.js<\|>lib2<\|>1.0.0 | 1 | -| /query-tests/Metrics/ExternalDependencies/src/b.js<\|>lib2<\|>1.0.0 | 1 | -| /query-tests/Metrics/ExternalDependencies/src/sub/c.js<\|>lib1<\|>1.0.2 | 1 | -| /query-tests/Metrics/ExternalDependencies/src/sub/subsub/d.js<\|>lib1<\|>1.0.3 | 1 | +| /src/tst.html<\|>jquery<\|>23.0.0 | 4 | +| /src/a.js<\|>lib3<\|>unknown | 3 | +| /src/tst.html<\|>jquery<\|>42.0.0 | 3 | +| /src/a.js<\|>lib1<\|>1.0.2 | 2 | +| /src/b.js<\|>lib3<\|>unknown | 2 | +| /src/a.js<\|>lib2<\|>1.0.0 | 1 | +| /src/b.js<\|>lib2<\|>1.0.0 | 1 | +| /src/sub/c.js<\|>lib1<\|>1.0.2 | 1 | +| /src/sub/subsub/d.js<\|>lib1<\|>1.0.3 | 1 | diff --git a/javascript/ql/test/query-tests/NodeJS/CyclicImport/CyclicImport.expected b/javascript/ql/test/query-tests/NodeJS/CyclicImport/CyclicImport.expected index c19bb2303441..2fb5f863389e 100644 --- a/javascript/ql/test/query-tests/NodeJS/CyclicImport/CyclicImport.expected +++ b/javascript/ql/test/query-tests/NodeJS/CyclicImport/CyclicImport.expected @@ -1,7 +1,7 @@ | a.js:4:9:4:25 | require('./b.js') | Module a imports module b, which in turn $@ it. | b.js:4:9:4:25 | require('./a.js') | imports | | b.js:4:9:4:25 | require('./a.js') | Module b imports module a, which in turn $@ it. | a.js:4:9:4:25 | require('./b.js') | imports | | selfimport.js:1:1:1:23 | require ... mport') | Module selfimport directly imports itself. | selfimport.js:1:1:1:24 | | | -| test1/a.js:1:1:1:27 | require ... ner/a') | Module .../test1/a.js imports module .../inner/a.js, which in turn $@ it. | test2/inner/a.js:1:1:1:24 | require ... st1/a') | imports | +| test1/a.js:1:1:1:27 | require ... ner/a') | Module /test1/a.js imports module .../inner/a.js, which in turn $@ it. | test2/inner/a.js:1:1:1:24 | require ... st1/a') | imports | | test1/a.js:2:1:2:14 | require('./b') | Module a imports module b, which in turn $@ it. | test1/b.js:1:1:1:27 | require ... ner/a') | indirectly imports | | test1/b.js:1:1:1:27 | require ... ner/a') | Module b imports module a, which in turn $@ it. | test2/inner/a.js:1:1:1:24 | require ... st1/a') | indirectly imports | -| test2/inner/a.js:1:1:1:24 | require ... st1/a') | Module .../inner/a.js imports module .../test1/a.js, which in turn $@ it. | test1/a.js:1:1:1:27 | require ... ner/a') | imports | +| test2/inner/a.js:1:1:1:24 | require ... st1/a') | Module .../inner/a.js imports module /test1/a.js, which in turn $@ it. | test1/a.js:1:1:1:27 | require ... ner/a') | imports | diff --git a/javascript/ql/test/query-tests/Security/CWE-200/PrivateFileExposure.expected b/javascript/ql/test/query-tests/Security/CWE-200/PrivateFileExposure.expected index 3cf199ce3714..39a5a884af13 100644 --- a/javascript/ql/test/query-tests/Security/CWE-200/PrivateFileExposure.expected +++ b/javascript/ql/test/query-tests/Security/CWE-200/PrivateFileExposure.expected @@ -1,6 +1,6 @@ -| lib/tst.js:7:1:7:45 | app.use ... rname)) | Serves the folder query-tests/Security/CWE-200/lib, which can contain private information. | -| lib/tst.js:9:1:9:43 | app.use ... otDir)) | Serves the folder query-tests/Security/CWE-200/lib, which can contain private information. | -| lib/tst.js:11:1:11:52 | app.use ... + '/')) | Serves the folder query-tests/Security/CWE-200/lib, which can contain private information. | +| lib/tst.js:7:1:7:45 | app.use ... rname)) | Serves the folder lib, which can contain private information. | +| lib/tst.js:9:1:9:43 | app.use ... otDir)) | Serves the folder lib, which can contain private information. | +| lib/tst.js:11:1:11:52 | app.use ... + '/')) | Serves the folder lib, which can contain private information. | | private-file-exposure.js:8:1:8:49 | app.use ... ular')) | Serves the folder "./node_modules/angular", which can contain private information. | | private-file-exposure.js:9:1:9:59 | app.use ... ular')) | Serves the folder "node_modules/angular", which can contain private information. | | private-file-exposure.js:10:1:10:67 | app.use ... mate')) | Serves the folder "node_modules/angular-animate", which can contain private information. | @@ -20,4 +20,4 @@ | private-file-exposure.js:43:1:43:46 | app.use ... )("/")) | Serves the root folder, which can contain private information. | | private-file-exposure.js:51:5:51:88 | app.use ... les'))) | Serves the folder "../node_modules", which can contain private information. | | private-file-exposure.js:70:5:70:71 | serveHa ... ular"}) | Serves the folder "./node_modules/angular", which can contain private information. | -| subfolder/private-file-exposure-2.js:6:1:6:34 | app.use ... rname)) | Serves the folder query-tests/Security/CWE-200/subfolder, which can contain private information. | +| subfolder/private-file-exposure-2.js:6:1:6:34 | app.use ... rname)) | Serves the folder subfolder, which can contain private information. | diff --git a/javascript/ql/test/tutorials/Introducing the JavaScript libraries/tests.expected b/javascript/ql/test/tutorials/Introducing the JavaScript libraries/tests.expected index d9f7f8005021..bd22abd7c823 100644 --- a/javascript/ql/test/tutorials/Introducing the JavaScript libraries/tests.expected +++ b/javascript/ql/test/tutorials/Introducing the JavaScript libraries/tests.expected @@ -1,7 +1,5 @@ test_query1 -| | 0 | -| tutorials | 0 | -| tutorials/Introducing the JavaScript libraries | 2 | +| | 2 | test_query3 | tst.js:27:1:27:4 |