From 861c236daef3ba9ce36f723381e5888b8fe527ff Mon Sep 17 00:00:00 2001 From: Jeroen Ketema Date: Wed, 12 Nov 2025 11:44:12 +0100 Subject: [PATCH 1/6] C++: Add table for expanded compilation arguments --- cpp/ql/lib/semmlecode.cpp.dbscheme | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/cpp/ql/lib/semmlecode.cpp.dbscheme b/cpp/ql/lib/semmlecode.cpp.dbscheme index 2121ffec11fa..1a6854060d5d 100644 --- a/cpp/ql/lib/semmlecode.cpp.dbscheme +++ b/cpp/ql/lib/semmlecode.cpp.dbscheme @@ -47,6 +47,19 @@ compilation_args( string arg : string ref ); +/** + * The expanded arguments that were passed to the extractor for a + * compiler invocation. This is similar to `compilation_args`, but + * for a `@someFile` argument, it includes the arguments from that + * file, rather than just taking the argument literally. + */ +#keyset[id, num] +compilation_expanded_args( + int id : @compilation ref, + int num : int ref, + string arg : string ref +); + /** * Optionally, record the build mode for each compilation. */ From ee97d6f46189b21fb81d12f0bebdc20b5ef22e02 Mon Sep 17 00:00:00 2001 From: Jeroen Ketema Date: Wed, 12 Nov 2025 11:47:29 +0100 Subject: [PATCH 2/6] C++: Expose the expanded compilation arguments --- cpp/ql/lib/semmle/code/cpp/Compilation.qll | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/cpp/ql/lib/semmle/code/cpp/Compilation.qll b/cpp/ql/lib/semmle/code/cpp/Compilation.qll index 407dc31e05f1..716156acb449 100644 --- a/cpp/ql/lib/semmle/code/cpp/Compilation.qll +++ b/cpp/ql/lib/semmle/code/cpp/Compilation.qll @@ -94,6 +94,19 @@ class Compilation extends @compilation { */ string getArgument(int i) { compilation_args(this, i, result) } + /** + * Gets an expanded argument passed to the extractor on this invocation. + */ + string getAnExpandedArgument() { result = this.getArgument(_) } + + /** + * The expanded arguments that were passed to the extractor for a + * compiler invocation. This is similar to `getArgument`, but + * for a `@someFile` argument, it includes the arguments from that + * file, rather than just taking the argument literally. + */ + string getExpandedArgument(int i) { compilation_expanded_args(this, i, result) } + /** * Gets the total amount of CPU time spent processing all the files in the * front-end and extractor. From a8d488fa29688404400422e8dd02166bd494eacf Mon Sep 17 00:00:00 2001 From: Jeroen Ketema Date: Wed, 12 Nov 2025 15:32:20 +0100 Subject: [PATCH 3/6] C++: Add upgrade and downgrade scripts --- .../old.dbscheme | 2450 +++++++++++++++++ .../semmlecode.cpp.dbscheme | 2437 ++++++++++++++++ .../upgrade.properties | 3 + .../old.dbscheme | 2437 ++++++++++++++++ .../semmlecode.cpp.dbscheme | 2450 +++++++++++++++++ .../upgrade.properties | 2 + 6 files changed, 9779 insertions(+) create mode 100644 cpp/downgrades/1a6854060d5d3ada16c580a29f8c5ce21f3367f8/old.dbscheme create mode 100644 cpp/downgrades/1a6854060d5d3ada16c580a29f8c5ce21f3367f8/semmlecode.cpp.dbscheme create mode 100644 cpp/downgrades/1a6854060d5d3ada16c580a29f8c5ce21f3367f8/upgrade.properties create mode 100644 cpp/ql/lib/upgrades/2121ffec11fac265524955fee1775217364d4ca4/old.dbscheme create mode 100644 cpp/ql/lib/upgrades/2121ffec11fac265524955fee1775217364d4ca4/semmlecode.cpp.dbscheme create mode 100644 cpp/ql/lib/upgrades/2121ffec11fac265524955fee1775217364d4ca4/upgrade.properties diff --git a/cpp/downgrades/1a6854060d5d3ada16c580a29f8c5ce21f3367f8/old.dbscheme b/cpp/downgrades/1a6854060d5d3ada16c580a29f8c5ce21f3367f8/old.dbscheme new file mode 100644 index 000000000000..1a6854060d5d --- /dev/null +++ b/cpp/downgrades/1a6854060d5d3ada16c580a29f8c5ce21f3367f8/old.dbscheme @@ -0,0 +1,2450 @@ +/*- 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 + * + * 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 expanded arguments that were passed to the extractor for a + * compiler invocation. This is similar to `compilation_args`, but + * for a `@someFile` argument, it includes the arguments from that + * file, rather than just taking the argument literally. + */ +#keyset[id, num] +compilation_expanded_args( + int id : @compilation ref, + int num : int ref, + string arg : string ref +); + +/** + * Optionally, record the build mode for each compilation. + */ +compilation_build_mode( + unique int id : @compilation ref, + int mode : int ref +); + +/* +case @compilation_build_mode.mode of + 0 = @build_mode_none +| 1 = @build_mode_manual +| 2 = @build_mode_auto +; +*/ + +/** + * 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 -*/ + +/** + * 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 +); + +/*- Source location prefix -*/ + +/** + * The source location of the snapshot. + */ +sourceLocationPrefix(string prefix : string ref); + +/*- Files and folders -*/ + +/** + * The location of an element. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_default( + unique int id: @location_default, + int file: @file ref, + int beginLine: int ref, + int beginColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +files( + unique int id: @file, + string name: string ref +); + +folders( + unique int id: @folder, + string name: string ref +); + +@container = @file | @folder + +containerparent( + int parent: @container ref, + unique int child: @container ref +); + +/*- Lines of code -*/ + +numlines( + int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: int ref +); + +/*- Diagnostic messages -*/ + +diagnostics( + unique int id: @diagnostic, + int severity: int ref, + string error_tag: string ref, + string error_message: string ref, + string full_error_message: string ref, + int location: @location_default ref +); + +/*- C++ dbscheme -*/ + +extractor_version( + string codeql_version: string ref, + string frontend_version: string ref +) + +pch_uses( + int pch: @pch ref, + int compilation: @compilation ref, + int id: @file ref +) + +#keyset[pch, compilation] +pch_creations( + int pch: @pch, + int compilation: @compilation ref, + int from: @file ref +) + +/** An element for which line-count information is available. */ +@sourceline = @file | @function | @variable | @enumconstant | @xmllocatable; + +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_default 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 + 0 = @unknown_function +| 1 = @normal_function +| 2 = @constructor +| 3 = @destructor +| 4 = @conversion_function +| 5 = @operator +// ... 6 = @builtin_function deprecated // 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 +); + +builtin_functions( + int id: @function 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 +); + +/* +case @fun_requires.kind of + 1 = @template_attached +| 2 = @function_attached +; +*/ + +fun_requires( + int id: @fun_decl ref, + int kind: int ref, + int constraint: @expr 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_specialized(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); +var_requires( + int id: @var_decl ref, + int constraint: @expr 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 +); +type_requires( + int id: @type_decl ref, + int constraint: @expr 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: @parameterized_element 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 +| 62 = @mfp8 // __mfp8 +| 63 = @scalable_vector_count // __SVCount_t +| 64 = @complex_fp16 // _Complex __fp16 +| 65 = @complex_std_bfloat16 // _Complex __bf16 +| 66 = @complex_std_float16 // _Complex std::float16_t +; + +builtintypes( + unique int id: @builtintype, + string name: string ref, + int kind: int ref, + int size: int ref, + int sign: int ref, + int alignment: int ref +); + +/** + * Derived types are types that are directly derived from existing types and + * point to, refer to, transform type data to return a new type. + */ +case @derivedtype.kind of + 1 = @pointer +| 2 = @reference +| 3 = @type_with_specifiers +| 4 = @array +| 5 = @gnu_vector +| 6 = @routineptr +| 7 = @routinereference +| 8 = @rvalue_reference // C++11 +// ... 9 type_conforming_to_protocols deprecated +| 10 = @block +| 11 = @scalable_vector // Arm SVE +; + +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 +); + +tupleelements( + unique int id: @derivedtype ref, + int num_elements: int ref +); + +typedefbase( + unique int id: @usertype ref, + int type_id: @type ref +); + +/** + * An instance of the C++11 `decltype` operator or C23 `typeof`/`typeof_unqual` + * operator taking an expression as its argument. For example: + * ``` + * int a; + * decltype(1+a) b; + * typeof(1+a) c; + * ``` + * Here `expr` is `1+a`. + * + * Sometimes an additional pair of parentheses around the expression + * changes the semantics of the 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. + */ + +/* +case @decltype.kind of +| 0 = @decltype +| 1 = @typeof // The frontend does not differentiate between typeof and typeof_unqual +; +*/ + +#keyset[id, expr] +decltypes( + int id: @decltype, + int expr: @expr ref, + int kind: int ref, + int base_type: @type ref, + boolean parentheses_would_change_meaning: boolean ref +); + +case @type_operator.kind of + 0 = @typeof // The frontend does not differentiate between typeof and typeof_unqual +| 1 = @underlying_type +| 2 = @bases +| 3 = @direct_bases +| 4 = @add_lvalue_reference +| 5 = @add_pointer +| 6 = @add_rvalue_reference +| 7 = @decay +| 8 = @make_signed +| 9 = @make_unsigned +| 10 = @remove_all_extents +| 11 = @remove_const +| 12 = @remove_cv +| 13 = @remove_cvref +| 14 = @remove_extent +| 15 = @remove_pointer +| 16 = @remove_reference_t +| 17 = @remove_restrict +| 18 = @remove_volatile +| 19 = @remove_reference +; + +type_operators( + unique int id: @type_operator, + int arg_type: @type ref, + int kind: int ref, + int base_type: @type ref +) + +case @usertype.kind of + 0 = @unknown_usertype +| 1 = @struct +| 2 = @class +| 3 = @union +| 4 = @enum +// ... 5 = @typedef deprecated // classic C: typedef typedef type name +// ... 6 = @template deprecated +| 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 deprecated // a using name = type style typedef +| 15 = @template_struct +| 16 = @template_class +| 17 = @template_union +| 18 = @alias +; + +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 +); + +/* +case @usertype.alias_kind of +| 0 = @typedef +| 1 = @alias +*/ + +usertype_alias_kind( + int id: @usertype ref, + int alias_kind: int ref +) + +nontype_template_parameters( + int id: @expr ref +); + +type_template_type_constraint( + int id: @usertype ref, + int constraint: @expr 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 +); + +@user_or_decltype = @usertype | @decltype; + +is_proxy_class_for( + unique int id: @usertype ref, + int templ_param_id: @user_or_decltype ref +); + +type_mentions( + unique int id: @type_mention, + int type_id: @type ref, + int location: @location_default 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 +); + +template_template_instantiation( + int to: @usertype ref, + int from: @usertype ref +); +template_template_argument( + int type_id: @usertype ref, + int index: int ref, + int arg_type: @type ref +); +template_template_argument_value( + int type_id: @usertype ref, + int index: int ref, + int arg_value: @expr ref +); + +@concept = @concept_template | @concept_id; + +concept_templates( + unique int concept_id: @concept_template, + string name: string ref, + int location: @location_default ref +); +concept_instantiation( + unique int to: @concept_id ref, + int from: @concept_template ref +); +is_type_constraint(int concept_id: @concept_id ref); +concept_template_argument( + int concept_id: @concept ref, + int index: int ref, + int arg_type: @type ref +); +concept_template_argument_value( + int concept_id: @concept 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 +); + +namespaceattributes( + int namespace_id: @namespace ref, + int spec_id: @attribute ref +); + +stmtattributes( + int stmt_id: @stmt ref, + int spec_id: @attribute ref +); + +@type = @builtintype + | @derivedtype + | @usertype + | @routinetype + | @ptrtomember + | @decltype + | @type_operator; + +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 + | @concept_template; + +@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 + | @decltype; + +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_default 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_default 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 +| 391 = @nested_requirement +| 392 = @compound_requirement +| 393 = @concept_id +; + +@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 + ; + +compound_requirement_is_noexcept( + int expr: @compound_requirement ref +); + +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, + boolean is_designated: boolean 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, + boolean is_designated: boolean 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 +); + +@sizeof_or_alignof = @runtime_sizeof | @runtime_alignof | @datasizeof | @sizeof_pack; + +sizeof_bind( + unique int expr: @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, + boolean has_explicit_parameter_list: 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_default 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 +| 38 = @stmt_consteval_if +| 39 = @stmt_not_consteval_if +| 40 = @stmt_leave +; + +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 +); + +type_is_vla(unique int type_id: @derivedtype 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 +); + +@stmt_consteval_or_not_consteval_if = @stmt_consteval_if | @stmt_not_consteval_if; + +consteval_if_then( + unique int constexpr_if_stmt: @stmt_consteval_or_not_consteval_if ref, + int then_id: @stmt ref +); + +consteval_if_else( + unique int constexpr_if_stmt: @stmt_consteval_or_not_consteval_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 +); + +@parameterized_element = @function | @stmt_block | @requires_expr; + +blockscope( + unique int block: @stmt_block ref, + int enclosing: @parameterized_element ref +); + +@jump = @stmt_goto | @stmt_break | @stmt_continue | @stmt_leave; + +@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 +| 14 = @ppd_ms_import +| 15 = @ppd_elifdef +| 16 = @ppd_elifndef +| 18 = @ppd_warning +; + +@ppd_include = @ppd_plain_include | @ppd_objc_import | @ppd_include_next | @ppd_ms_import; + +@ppd_branch = @ppd_if | @ppd_ifdef | @ppd_ifndef | @ppd_elif | @ppd_elifdef | @ppd_elifndef; + +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/1a6854060d5d3ada16c580a29f8c5ce21f3367f8/semmlecode.cpp.dbscheme b/cpp/downgrades/1a6854060d5d3ada16c580a29f8c5ce21f3367f8/semmlecode.cpp.dbscheme new file mode 100644 index 000000000000..2121ffec11fa --- /dev/null +++ b/cpp/downgrades/1a6854060d5d3ada16c580a29f8c5ce21f3367f8/semmlecode.cpp.dbscheme @@ -0,0 +1,2437 @@ +/*- 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 + * + * 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 +); + +/** + * Optionally, record the build mode for each compilation. + */ +compilation_build_mode( + unique int id : @compilation ref, + int mode : int ref +); + +/* +case @compilation_build_mode.mode of + 0 = @build_mode_none +| 1 = @build_mode_manual +| 2 = @build_mode_auto +; +*/ + +/** + * 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 -*/ + +/** + * 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 +); + +/*- Source location prefix -*/ + +/** + * The source location of the snapshot. + */ +sourceLocationPrefix(string prefix : string ref); + +/*- Files and folders -*/ + +/** + * The location of an element. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_default( + unique int id: @location_default, + int file: @file ref, + int beginLine: int ref, + int beginColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +files( + unique int id: @file, + string name: string ref +); + +folders( + unique int id: @folder, + string name: string ref +); + +@container = @file | @folder + +containerparent( + int parent: @container ref, + unique int child: @container ref +); + +/*- Lines of code -*/ + +numlines( + int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: int ref +); + +/*- Diagnostic messages -*/ + +diagnostics( + unique int id: @diagnostic, + int severity: int ref, + string error_tag: string ref, + string error_message: string ref, + string full_error_message: string ref, + int location: @location_default ref +); + +/*- C++ dbscheme -*/ + +extractor_version( + string codeql_version: string ref, + string frontend_version: string ref +) + +pch_uses( + int pch: @pch ref, + int compilation: @compilation ref, + int id: @file ref +) + +#keyset[pch, compilation] +pch_creations( + int pch: @pch, + int compilation: @compilation ref, + int from: @file ref +) + +/** An element for which line-count information is available. */ +@sourceline = @file | @function | @variable | @enumconstant | @xmllocatable; + +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_default 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 + 0 = @unknown_function +| 1 = @normal_function +| 2 = @constructor +| 3 = @destructor +| 4 = @conversion_function +| 5 = @operator +// ... 6 = @builtin_function deprecated // 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 +); + +builtin_functions( + int id: @function 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 +); + +/* +case @fun_requires.kind of + 1 = @template_attached +| 2 = @function_attached +; +*/ + +fun_requires( + int id: @fun_decl ref, + int kind: int ref, + int constraint: @expr 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_specialized(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); +var_requires( + int id: @var_decl ref, + int constraint: @expr 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 +); +type_requires( + int id: @type_decl ref, + int constraint: @expr 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: @parameterized_element 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 +| 62 = @mfp8 // __mfp8 +| 63 = @scalable_vector_count // __SVCount_t +| 64 = @complex_fp16 // _Complex __fp16 +| 65 = @complex_std_bfloat16 // _Complex __bf16 +| 66 = @complex_std_float16 // _Complex std::float16_t +; + +builtintypes( + unique int id: @builtintype, + string name: string ref, + int kind: int ref, + int size: int ref, + int sign: int ref, + int alignment: int ref +); + +/** + * Derived types are types that are directly derived from existing types and + * point to, refer to, transform type data to return a new type. + */ +case @derivedtype.kind of + 1 = @pointer +| 2 = @reference +| 3 = @type_with_specifiers +| 4 = @array +| 5 = @gnu_vector +| 6 = @routineptr +| 7 = @routinereference +| 8 = @rvalue_reference // C++11 +// ... 9 type_conforming_to_protocols deprecated +| 10 = @block +| 11 = @scalable_vector // Arm SVE +; + +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 +); + +tupleelements( + unique int id: @derivedtype ref, + int num_elements: int ref +); + +typedefbase( + unique int id: @usertype ref, + int type_id: @type ref +); + +/** + * An instance of the C++11 `decltype` operator or C23 `typeof`/`typeof_unqual` + * operator taking an expression as its argument. For example: + * ``` + * int a; + * decltype(1+a) b; + * typeof(1+a) c; + * ``` + * Here `expr` is `1+a`. + * + * Sometimes an additional pair of parentheses around the expression + * changes the semantics of the 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. + */ + +/* +case @decltype.kind of +| 0 = @decltype +| 1 = @typeof // The frontend does not differentiate between typeof and typeof_unqual +; +*/ + +#keyset[id, expr] +decltypes( + int id: @decltype, + int expr: @expr ref, + int kind: int ref, + int base_type: @type ref, + boolean parentheses_would_change_meaning: boolean ref +); + +case @type_operator.kind of + 0 = @typeof // The frontend does not differentiate between typeof and typeof_unqual +| 1 = @underlying_type +| 2 = @bases +| 3 = @direct_bases +| 4 = @add_lvalue_reference +| 5 = @add_pointer +| 6 = @add_rvalue_reference +| 7 = @decay +| 8 = @make_signed +| 9 = @make_unsigned +| 10 = @remove_all_extents +| 11 = @remove_const +| 12 = @remove_cv +| 13 = @remove_cvref +| 14 = @remove_extent +| 15 = @remove_pointer +| 16 = @remove_reference_t +| 17 = @remove_restrict +| 18 = @remove_volatile +| 19 = @remove_reference +; + +type_operators( + unique int id: @type_operator, + int arg_type: @type ref, + int kind: int ref, + int base_type: @type ref +) + +case @usertype.kind of + 0 = @unknown_usertype +| 1 = @struct +| 2 = @class +| 3 = @union +| 4 = @enum +// ... 5 = @typedef deprecated // classic C: typedef typedef type name +// ... 6 = @template deprecated +| 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 deprecated // a using name = type style typedef +| 15 = @template_struct +| 16 = @template_class +| 17 = @template_union +| 18 = @alias +; + +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 +); + +/* +case @usertype.alias_kind of +| 0 = @typedef +| 1 = @alias +*/ + +usertype_alias_kind( + int id: @usertype ref, + int alias_kind: int ref +) + +nontype_template_parameters( + int id: @expr ref +); + +type_template_type_constraint( + int id: @usertype ref, + int constraint: @expr 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 +); + +@user_or_decltype = @usertype | @decltype; + +is_proxy_class_for( + unique int id: @usertype ref, + int templ_param_id: @user_or_decltype ref +); + +type_mentions( + unique int id: @type_mention, + int type_id: @type ref, + int location: @location_default 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 +); + +template_template_instantiation( + int to: @usertype ref, + int from: @usertype ref +); +template_template_argument( + int type_id: @usertype ref, + int index: int ref, + int arg_type: @type ref +); +template_template_argument_value( + int type_id: @usertype ref, + int index: int ref, + int arg_value: @expr ref +); + +@concept = @concept_template | @concept_id; + +concept_templates( + unique int concept_id: @concept_template, + string name: string ref, + int location: @location_default ref +); +concept_instantiation( + unique int to: @concept_id ref, + int from: @concept_template ref +); +is_type_constraint(int concept_id: @concept_id ref); +concept_template_argument( + int concept_id: @concept ref, + int index: int ref, + int arg_type: @type ref +); +concept_template_argument_value( + int concept_id: @concept 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 +); + +namespaceattributes( + int namespace_id: @namespace ref, + int spec_id: @attribute ref +); + +stmtattributes( + int stmt_id: @stmt ref, + int spec_id: @attribute ref +); + +@type = @builtintype + | @derivedtype + | @usertype + | @routinetype + | @ptrtomember + | @decltype + | @type_operator; + +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 + | @concept_template; + +@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 + | @decltype; + +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_default 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_default 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 +| 391 = @nested_requirement +| 392 = @compound_requirement +| 393 = @concept_id +; + +@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 + ; + +compound_requirement_is_noexcept( + int expr: @compound_requirement ref +); + +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, + boolean is_designated: boolean 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, + boolean is_designated: boolean 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 +); + +@sizeof_or_alignof = @runtime_sizeof | @runtime_alignof | @datasizeof | @sizeof_pack; + +sizeof_bind( + unique int expr: @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, + boolean has_explicit_parameter_list: 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_default 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 +| 38 = @stmt_consteval_if +| 39 = @stmt_not_consteval_if +| 40 = @stmt_leave +; + +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 +); + +type_is_vla(unique int type_id: @derivedtype 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 +); + +@stmt_consteval_or_not_consteval_if = @stmt_consteval_if | @stmt_not_consteval_if; + +consteval_if_then( + unique int constexpr_if_stmt: @stmt_consteval_or_not_consteval_if ref, + int then_id: @stmt ref +); + +consteval_if_else( + unique int constexpr_if_stmt: @stmt_consteval_or_not_consteval_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 +); + +@parameterized_element = @function | @stmt_block | @requires_expr; + +blockscope( + unique int block: @stmt_block ref, + int enclosing: @parameterized_element ref +); + +@jump = @stmt_goto | @stmt_break | @stmt_continue | @stmt_leave; + +@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 +| 14 = @ppd_ms_import +| 15 = @ppd_elifdef +| 16 = @ppd_elifndef +| 18 = @ppd_warning +; + +@ppd_include = @ppd_plain_include | @ppd_objc_import | @ppd_include_next | @ppd_ms_import; + +@ppd_branch = @ppd_if | @ppd_ifdef | @ppd_ifndef | @ppd_elif | @ppd_elifdef | @ppd_elifndef; + +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/1a6854060d5d3ada16c580a29f8c5ce21f3367f8/upgrade.properties b/cpp/downgrades/1a6854060d5d3ada16c580a29f8c5ce21f3367f8/upgrade.properties new file mode 100644 index 000000000000..6fa192fc0007 --- /dev/null +++ b/cpp/downgrades/1a6854060d5d3ada16c580a29f8c5ce21f3367f8/upgrade.properties @@ -0,0 +1,3 @@ +description: Support expanded compilation argument lists +compatibility: full +compilation_expanded_args.rel: delete diff --git a/cpp/ql/lib/upgrades/2121ffec11fac265524955fee1775217364d4ca4/old.dbscheme b/cpp/ql/lib/upgrades/2121ffec11fac265524955fee1775217364d4ca4/old.dbscheme new file mode 100644 index 000000000000..2121ffec11fa --- /dev/null +++ b/cpp/ql/lib/upgrades/2121ffec11fac265524955fee1775217364d4ca4/old.dbscheme @@ -0,0 +1,2437 @@ +/*- 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 + * + * 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 +); + +/** + * Optionally, record the build mode for each compilation. + */ +compilation_build_mode( + unique int id : @compilation ref, + int mode : int ref +); + +/* +case @compilation_build_mode.mode of + 0 = @build_mode_none +| 1 = @build_mode_manual +| 2 = @build_mode_auto +; +*/ + +/** + * 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 -*/ + +/** + * 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 +); + +/*- Source location prefix -*/ + +/** + * The source location of the snapshot. + */ +sourceLocationPrefix(string prefix : string ref); + +/*- Files and folders -*/ + +/** + * The location of an element. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_default( + unique int id: @location_default, + int file: @file ref, + int beginLine: int ref, + int beginColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +files( + unique int id: @file, + string name: string ref +); + +folders( + unique int id: @folder, + string name: string ref +); + +@container = @file | @folder + +containerparent( + int parent: @container ref, + unique int child: @container ref +); + +/*- Lines of code -*/ + +numlines( + int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: int ref +); + +/*- Diagnostic messages -*/ + +diagnostics( + unique int id: @diagnostic, + int severity: int ref, + string error_tag: string ref, + string error_message: string ref, + string full_error_message: string ref, + int location: @location_default ref +); + +/*- C++ dbscheme -*/ + +extractor_version( + string codeql_version: string ref, + string frontend_version: string ref +) + +pch_uses( + int pch: @pch ref, + int compilation: @compilation ref, + int id: @file ref +) + +#keyset[pch, compilation] +pch_creations( + int pch: @pch, + int compilation: @compilation ref, + int from: @file ref +) + +/** An element for which line-count information is available. */ +@sourceline = @file | @function | @variable | @enumconstant | @xmllocatable; + +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_default 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 + 0 = @unknown_function +| 1 = @normal_function +| 2 = @constructor +| 3 = @destructor +| 4 = @conversion_function +| 5 = @operator +// ... 6 = @builtin_function deprecated // 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 +); + +builtin_functions( + int id: @function 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 +); + +/* +case @fun_requires.kind of + 1 = @template_attached +| 2 = @function_attached +; +*/ + +fun_requires( + int id: @fun_decl ref, + int kind: int ref, + int constraint: @expr 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_specialized(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); +var_requires( + int id: @var_decl ref, + int constraint: @expr 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 +); +type_requires( + int id: @type_decl ref, + int constraint: @expr 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: @parameterized_element 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 +| 62 = @mfp8 // __mfp8 +| 63 = @scalable_vector_count // __SVCount_t +| 64 = @complex_fp16 // _Complex __fp16 +| 65 = @complex_std_bfloat16 // _Complex __bf16 +| 66 = @complex_std_float16 // _Complex std::float16_t +; + +builtintypes( + unique int id: @builtintype, + string name: string ref, + int kind: int ref, + int size: int ref, + int sign: int ref, + int alignment: int ref +); + +/** + * Derived types are types that are directly derived from existing types and + * point to, refer to, transform type data to return a new type. + */ +case @derivedtype.kind of + 1 = @pointer +| 2 = @reference +| 3 = @type_with_specifiers +| 4 = @array +| 5 = @gnu_vector +| 6 = @routineptr +| 7 = @routinereference +| 8 = @rvalue_reference // C++11 +// ... 9 type_conforming_to_protocols deprecated +| 10 = @block +| 11 = @scalable_vector // Arm SVE +; + +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 +); + +tupleelements( + unique int id: @derivedtype ref, + int num_elements: int ref +); + +typedefbase( + unique int id: @usertype ref, + int type_id: @type ref +); + +/** + * An instance of the C++11 `decltype` operator or C23 `typeof`/`typeof_unqual` + * operator taking an expression as its argument. For example: + * ``` + * int a; + * decltype(1+a) b; + * typeof(1+a) c; + * ``` + * Here `expr` is `1+a`. + * + * Sometimes an additional pair of parentheses around the expression + * changes the semantics of the 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. + */ + +/* +case @decltype.kind of +| 0 = @decltype +| 1 = @typeof // The frontend does not differentiate between typeof and typeof_unqual +; +*/ + +#keyset[id, expr] +decltypes( + int id: @decltype, + int expr: @expr ref, + int kind: int ref, + int base_type: @type ref, + boolean parentheses_would_change_meaning: boolean ref +); + +case @type_operator.kind of + 0 = @typeof // The frontend does not differentiate between typeof and typeof_unqual +| 1 = @underlying_type +| 2 = @bases +| 3 = @direct_bases +| 4 = @add_lvalue_reference +| 5 = @add_pointer +| 6 = @add_rvalue_reference +| 7 = @decay +| 8 = @make_signed +| 9 = @make_unsigned +| 10 = @remove_all_extents +| 11 = @remove_const +| 12 = @remove_cv +| 13 = @remove_cvref +| 14 = @remove_extent +| 15 = @remove_pointer +| 16 = @remove_reference_t +| 17 = @remove_restrict +| 18 = @remove_volatile +| 19 = @remove_reference +; + +type_operators( + unique int id: @type_operator, + int arg_type: @type ref, + int kind: int ref, + int base_type: @type ref +) + +case @usertype.kind of + 0 = @unknown_usertype +| 1 = @struct +| 2 = @class +| 3 = @union +| 4 = @enum +// ... 5 = @typedef deprecated // classic C: typedef typedef type name +// ... 6 = @template deprecated +| 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 deprecated // a using name = type style typedef +| 15 = @template_struct +| 16 = @template_class +| 17 = @template_union +| 18 = @alias +; + +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 +); + +/* +case @usertype.alias_kind of +| 0 = @typedef +| 1 = @alias +*/ + +usertype_alias_kind( + int id: @usertype ref, + int alias_kind: int ref +) + +nontype_template_parameters( + int id: @expr ref +); + +type_template_type_constraint( + int id: @usertype ref, + int constraint: @expr 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 +); + +@user_or_decltype = @usertype | @decltype; + +is_proxy_class_for( + unique int id: @usertype ref, + int templ_param_id: @user_or_decltype ref +); + +type_mentions( + unique int id: @type_mention, + int type_id: @type ref, + int location: @location_default 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 +); + +template_template_instantiation( + int to: @usertype ref, + int from: @usertype ref +); +template_template_argument( + int type_id: @usertype ref, + int index: int ref, + int arg_type: @type ref +); +template_template_argument_value( + int type_id: @usertype ref, + int index: int ref, + int arg_value: @expr ref +); + +@concept = @concept_template | @concept_id; + +concept_templates( + unique int concept_id: @concept_template, + string name: string ref, + int location: @location_default ref +); +concept_instantiation( + unique int to: @concept_id ref, + int from: @concept_template ref +); +is_type_constraint(int concept_id: @concept_id ref); +concept_template_argument( + int concept_id: @concept ref, + int index: int ref, + int arg_type: @type ref +); +concept_template_argument_value( + int concept_id: @concept 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 +); + +namespaceattributes( + int namespace_id: @namespace ref, + int spec_id: @attribute ref +); + +stmtattributes( + int stmt_id: @stmt ref, + int spec_id: @attribute ref +); + +@type = @builtintype + | @derivedtype + | @usertype + | @routinetype + | @ptrtomember + | @decltype + | @type_operator; + +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 + | @concept_template; + +@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 + | @decltype; + +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_default 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_default 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 +| 391 = @nested_requirement +| 392 = @compound_requirement +| 393 = @concept_id +; + +@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 + ; + +compound_requirement_is_noexcept( + int expr: @compound_requirement ref +); + +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, + boolean is_designated: boolean 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, + boolean is_designated: boolean 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 +); + +@sizeof_or_alignof = @runtime_sizeof | @runtime_alignof | @datasizeof | @sizeof_pack; + +sizeof_bind( + unique int expr: @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, + boolean has_explicit_parameter_list: 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_default 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 +| 38 = @stmt_consteval_if +| 39 = @stmt_not_consteval_if +| 40 = @stmt_leave +; + +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 +); + +type_is_vla(unique int type_id: @derivedtype 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 +); + +@stmt_consteval_or_not_consteval_if = @stmt_consteval_if | @stmt_not_consteval_if; + +consteval_if_then( + unique int constexpr_if_stmt: @stmt_consteval_or_not_consteval_if ref, + int then_id: @stmt ref +); + +consteval_if_else( + unique int constexpr_if_stmt: @stmt_consteval_or_not_consteval_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 +); + +@parameterized_element = @function | @stmt_block | @requires_expr; + +blockscope( + unique int block: @stmt_block ref, + int enclosing: @parameterized_element ref +); + +@jump = @stmt_goto | @stmt_break | @stmt_continue | @stmt_leave; + +@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 +| 14 = @ppd_ms_import +| 15 = @ppd_elifdef +| 16 = @ppd_elifndef +| 18 = @ppd_warning +; + +@ppd_include = @ppd_plain_include | @ppd_objc_import | @ppd_include_next | @ppd_ms_import; + +@ppd_branch = @ppd_if | @ppd_ifdef | @ppd_ifndef | @ppd_elif | @ppd_elifdef | @ppd_elifndef; + +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/2121ffec11fac265524955fee1775217364d4ca4/semmlecode.cpp.dbscheme b/cpp/ql/lib/upgrades/2121ffec11fac265524955fee1775217364d4ca4/semmlecode.cpp.dbscheme new file mode 100644 index 000000000000..1a6854060d5d --- /dev/null +++ b/cpp/ql/lib/upgrades/2121ffec11fac265524955fee1775217364d4ca4/semmlecode.cpp.dbscheme @@ -0,0 +1,2450 @@ +/*- 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 + * + * 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 expanded arguments that were passed to the extractor for a + * compiler invocation. This is similar to `compilation_args`, but + * for a `@someFile` argument, it includes the arguments from that + * file, rather than just taking the argument literally. + */ +#keyset[id, num] +compilation_expanded_args( + int id : @compilation ref, + int num : int ref, + string arg : string ref +); + +/** + * Optionally, record the build mode for each compilation. + */ +compilation_build_mode( + unique int id : @compilation ref, + int mode : int ref +); + +/* +case @compilation_build_mode.mode of + 0 = @build_mode_none +| 1 = @build_mode_manual +| 2 = @build_mode_auto +; +*/ + +/** + * 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 -*/ + +/** + * 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 +); + +/*- Source location prefix -*/ + +/** + * The source location of the snapshot. + */ +sourceLocationPrefix(string prefix : string ref); + +/*- Files and folders -*/ + +/** + * The location of an element. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_default( + unique int id: @location_default, + int file: @file ref, + int beginLine: int ref, + int beginColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +files( + unique int id: @file, + string name: string ref +); + +folders( + unique int id: @folder, + string name: string ref +); + +@container = @file | @folder + +containerparent( + int parent: @container ref, + unique int child: @container ref +); + +/*- Lines of code -*/ + +numlines( + int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: int ref +); + +/*- Diagnostic messages -*/ + +diagnostics( + unique int id: @diagnostic, + int severity: int ref, + string error_tag: string ref, + string error_message: string ref, + string full_error_message: string ref, + int location: @location_default ref +); + +/*- C++ dbscheme -*/ + +extractor_version( + string codeql_version: string ref, + string frontend_version: string ref +) + +pch_uses( + int pch: @pch ref, + int compilation: @compilation ref, + int id: @file ref +) + +#keyset[pch, compilation] +pch_creations( + int pch: @pch, + int compilation: @compilation ref, + int from: @file ref +) + +/** An element for which line-count information is available. */ +@sourceline = @file | @function | @variable | @enumconstant | @xmllocatable; + +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_default 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 + 0 = @unknown_function +| 1 = @normal_function +| 2 = @constructor +| 3 = @destructor +| 4 = @conversion_function +| 5 = @operator +// ... 6 = @builtin_function deprecated // 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 +); + +builtin_functions( + int id: @function 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 +); + +/* +case @fun_requires.kind of + 1 = @template_attached +| 2 = @function_attached +; +*/ + +fun_requires( + int id: @fun_decl ref, + int kind: int ref, + int constraint: @expr 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_specialized(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); +var_requires( + int id: @var_decl ref, + int constraint: @expr 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 +); +type_requires( + int id: @type_decl ref, + int constraint: @expr 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: @parameterized_element 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 +| 62 = @mfp8 // __mfp8 +| 63 = @scalable_vector_count // __SVCount_t +| 64 = @complex_fp16 // _Complex __fp16 +| 65 = @complex_std_bfloat16 // _Complex __bf16 +| 66 = @complex_std_float16 // _Complex std::float16_t +; + +builtintypes( + unique int id: @builtintype, + string name: string ref, + int kind: int ref, + int size: int ref, + int sign: int ref, + int alignment: int ref +); + +/** + * Derived types are types that are directly derived from existing types and + * point to, refer to, transform type data to return a new type. + */ +case @derivedtype.kind of + 1 = @pointer +| 2 = @reference +| 3 = @type_with_specifiers +| 4 = @array +| 5 = @gnu_vector +| 6 = @routineptr +| 7 = @routinereference +| 8 = @rvalue_reference // C++11 +// ... 9 type_conforming_to_protocols deprecated +| 10 = @block +| 11 = @scalable_vector // Arm SVE +; + +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 +); + +tupleelements( + unique int id: @derivedtype ref, + int num_elements: int ref +); + +typedefbase( + unique int id: @usertype ref, + int type_id: @type ref +); + +/** + * An instance of the C++11 `decltype` operator or C23 `typeof`/`typeof_unqual` + * operator taking an expression as its argument. For example: + * ``` + * int a; + * decltype(1+a) b; + * typeof(1+a) c; + * ``` + * Here `expr` is `1+a`. + * + * Sometimes an additional pair of parentheses around the expression + * changes the semantics of the 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. + */ + +/* +case @decltype.kind of +| 0 = @decltype +| 1 = @typeof // The frontend does not differentiate between typeof and typeof_unqual +; +*/ + +#keyset[id, expr] +decltypes( + int id: @decltype, + int expr: @expr ref, + int kind: int ref, + int base_type: @type ref, + boolean parentheses_would_change_meaning: boolean ref +); + +case @type_operator.kind of + 0 = @typeof // The frontend does not differentiate between typeof and typeof_unqual +| 1 = @underlying_type +| 2 = @bases +| 3 = @direct_bases +| 4 = @add_lvalue_reference +| 5 = @add_pointer +| 6 = @add_rvalue_reference +| 7 = @decay +| 8 = @make_signed +| 9 = @make_unsigned +| 10 = @remove_all_extents +| 11 = @remove_const +| 12 = @remove_cv +| 13 = @remove_cvref +| 14 = @remove_extent +| 15 = @remove_pointer +| 16 = @remove_reference_t +| 17 = @remove_restrict +| 18 = @remove_volatile +| 19 = @remove_reference +; + +type_operators( + unique int id: @type_operator, + int arg_type: @type ref, + int kind: int ref, + int base_type: @type ref +) + +case @usertype.kind of + 0 = @unknown_usertype +| 1 = @struct +| 2 = @class +| 3 = @union +| 4 = @enum +// ... 5 = @typedef deprecated // classic C: typedef typedef type name +// ... 6 = @template deprecated +| 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 deprecated // a using name = type style typedef +| 15 = @template_struct +| 16 = @template_class +| 17 = @template_union +| 18 = @alias +; + +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 +); + +/* +case @usertype.alias_kind of +| 0 = @typedef +| 1 = @alias +*/ + +usertype_alias_kind( + int id: @usertype ref, + int alias_kind: int ref +) + +nontype_template_parameters( + int id: @expr ref +); + +type_template_type_constraint( + int id: @usertype ref, + int constraint: @expr 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 +); + +@user_or_decltype = @usertype | @decltype; + +is_proxy_class_for( + unique int id: @usertype ref, + int templ_param_id: @user_or_decltype ref +); + +type_mentions( + unique int id: @type_mention, + int type_id: @type ref, + int location: @location_default 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 +); + +template_template_instantiation( + int to: @usertype ref, + int from: @usertype ref +); +template_template_argument( + int type_id: @usertype ref, + int index: int ref, + int arg_type: @type ref +); +template_template_argument_value( + int type_id: @usertype ref, + int index: int ref, + int arg_value: @expr ref +); + +@concept = @concept_template | @concept_id; + +concept_templates( + unique int concept_id: @concept_template, + string name: string ref, + int location: @location_default ref +); +concept_instantiation( + unique int to: @concept_id ref, + int from: @concept_template ref +); +is_type_constraint(int concept_id: @concept_id ref); +concept_template_argument( + int concept_id: @concept ref, + int index: int ref, + int arg_type: @type ref +); +concept_template_argument_value( + int concept_id: @concept 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 +); + +namespaceattributes( + int namespace_id: @namespace ref, + int spec_id: @attribute ref +); + +stmtattributes( + int stmt_id: @stmt ref, + int spec_id: @attribute ref +); + +@type = @builtintype + | @derivedtype + | @usertype + | @routinetype + | @ptrtomember + | @decltype + | @type_operator; + +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 + | @concept_template; + +@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 + | @decltype; + +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_default 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_default 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 +| 391 = @nested_requirement +| 392 = @compound_requirement +| 393 = @concept_id +; + +@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 + ; + +compound_requirement_is_noexcept( + int expr: @compound_requirement ref +); + +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, + boolean is_designated: boolean 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, + boolean is_designated: boolean 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 +); + +@sizeof_or_alignof = @runtime_sizeof | @runtime_alignof | @datasizeof | @sizeof_pack; + +sizeof_bind( + unique int expr: @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, + boolean has_explicit_parameter_list: 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_default 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 +| 38 = @stmt_consteval_if +| 39 = @stmt_not_consteval_if +| 40 = @stmt_leave +; + +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 +); + +type_is_vla(unique int type_id: @derivedtype 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 +); + +@stmt_consteval_or_not_consteval_if = @stmt_consteval_if | @stmt_not_consteval_if; + +consteval_if_then( + unique int constexpr_if_stmt: @stmt_consteval_or_not_consteval_if ref, + int then_id: @stmt ref +); + +consteval_if_else( + unique int constexpr_if_stmt: @stmt_consteval_or_not_consteval_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 +); + +@parameterized_element = @function | @stmt_block | @requires_expr; + +blockscope( + unique int block: @stmt_block ref, + int enclosing: @parameterized_element ref +); + +@jump = @stmt_goto | @stmt_break | @stmt_continue | @stmt_leave; + +@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 +| 14 = @ppd_ms_import +| 15 = @ppd_elifdef +| 16 = @ppd_elifndef +| 18 = @ppd_warning +; + +@ppd_include = @ppd_plain_include | @ppd_objc_import | @ppd_include_next | @ppd_ms_import; + +@ppd_branch = @ppd_if | @ppd_ifdef | @ppd_ifndef | @ppd_elif | @ppd_elifdef | @ppd_elifndef; + +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/2121ffec11fac265524955fee1775217364d4ca4/upgrade.properties b/cpp/ql/lib/upgrades/2121ffec11fac265524955fee1775217364d4ca4/upgrade.properties new file mode 100644 index 000000000000..046b67dcbf3f --- /dev/null +++ b/cpp/ql/lib/upgrades/2121ffec11fac265524955fee1775217364d4ca4/upgrade.properties @@ -0,0 +1,2 @@ +description: Support expanded compilation argument lists +compatibility: backwards From 61b7eb3d5c87b387129faa427246850edfe8ff7f Mon Sep 17 00:00:00 2001 From: Jeroen Ketema Date: Thu, 13 Nov 2025 10:41:18 +0100 Subject: [PATCH 4/6] C++: Update dbscheme stats file --- cpp/ql/lib/semmlecode.cpp.dbscheme.stats | 5774 ++++++++++++---------- 1 file changed, 3145 insertions(+), 2629 deletions(-) diff --git a/cpp/ql/lib/semmlecode.cpp.dbscheme.stats b/cpp/ql/lib/semmlecode.cpp.dbscheme.stats index 42cff5d8d16f..1d796c9aa9ad 100644 --- a/cpp/ql/lib/semmlecode.cpp.dbscheme.stats +++ b/cpp/ql/lib/semmlecode.cpp.dbscheme.stats @@ -2,7 +2,7 @@ @compilation - 12643 + 12640 @externalDataElement @@ -10,19 +10,19 @@ @file - 65212 + 65198 @folder - 12389 + 12387 @diagnostic - 1484 + 359 @location_default - 46945087 + 46943795 @pch @@ -30,15 +30,15 @@ @macro_expansion - 40256583 + 40272403 @other_macro_reference - 300694 + 300697 @normal_function - 2738022 + 2737947 @unknown_function @@ -46,11 +46,11 @@ @constructor - 698728 + 698677 @destructor - 86202 + 86200 @conversion_function @@ -58,11 +58,11 @@ @operator - 652444 + 652426 @user_defined_literal - 998 + 997 @deduction_guide @@ -70,27 +70,27 @@ @fun_decl - 4202967 + 4202851 @var_decl - 9383104 + 9383095 @type_decl - 1633482 + 1633437 @namespace_decl - 407775 + 407917 @using_declaration - 267822 + 267880 @using_directive - 6473 + 6472 @using_enum_declaration @@ -98,27 +98,27 @@ @static_assert - 173262 + 172982 @parameter - 7019832 + 7019638 @membervariable - 1497674 + 1499493 @globalvariable - 488148 + 488384 @localvariable - 726300 + 725806 @enumconstant - 347816 + 347930 @errortype @@ -366,23 +366,23 @@ @pointer - 452469 + 452457 @type_with_specifiers - 693238 + 693219 @array - 90319 + 90316 @routineptr - 684112 + 684266 @reference - 967314 + 967288 @gnu_vector @@ -394,7 +394,7 @@ @rvalue_reference - 291042 + 291034 @block @@ -404,10 +404,6 @@ @scalable_vector 1 - - @decltype - 102349 - @typeof 816 @@ -458,7 +454,7 @@ @remove_cv - 2065 + 2062 @remove_cvref @@ -486,27 +482,31 @@ @remove_reference - 5723 + 5715 + + + @decltype + 102350 @struct - 979892 + 979711 @union - 20958 + 20957 @enum - 41550 + 41551 @template_parameter - 867095 + 866907 @alias - 1762360 + 1762011 @unknown_usertype @@ -514,15 +514,15 @@ @class - 324974 + 324965 @template_template_parameter - 6115 + 6114 @proxy_class - 48439 + 48429 @scoped_enum @@ -530,11 +530,11 @@ @template_struct - 212084 + 212038 @template_class - 29316 + 29315 @template_union @@ -542,23 +542,23 @@ @mangledname - 6364268 + 6364342 @type_mention - 5903894 + 5907627 @concept_template - 3614 + 3610 @routinetype - 604322 + 604482 @ptrtomember - 9728 + 9725 @specifier @@ -570,11 +570,11 @@ @stdattribute - 352794 + 352784 @declspec - 330281 + 330286 @msattribute @@ -582,15 +582,15 @@ @alignas - 2164 + 2163 @attribute_arg_token - 16693 + 16692 @attribute_arg_constant_expr - 71856 + 71883 @attribute_arg_expr @@ -606,23 +606,23 @@ @attribute_arg_type - 460 + 459 @derivation - 476902 + 476867 @frienddecl - 700465 + 699835 @comment - 11233402 + 11233093 @namespace - 8650 + 8648 @specialnamequalifyingelement @@ -630,15 +630,15 @@ @namequalifier - 3041979 + 3037999 @value - 13474601 + 13474763 @initialiser - 2251321 + 2247635 @address_of @@ -646,43 +646,43 @@ @indirect - 404153 + 404158 @array_to_pointer - 1953750 + 1953766 @parexpr - 4915206 + 4915246 @arithnegexpr - 586534 + 586538 @unaryplusexpr - 4069 + 4067 @complementexpr - 38199 + 38200 @notexpr - 355764 + 355767 @postincrexpr - 84571 + 84572 @postdecrexpr - 57394 + 57395 @preincrexpr - 96714 + 96715 @predecrexpr @@ -690,87 +690,87 @@ @conditionalexpr - 897879 + 897887 @addexpr - 571552 + 571559 @subexpr - 466799 + 466802 @mulexpr - 435793 + 435798 @divexpr - 52387 + 52388 @remexpr - 16012 + 16011 @paddexpr - 118669 + 118671 @psubexpr - 68016 + 68017 @pdiffexpr - 43912 + 43910 @lshiftexpr - 551696 + 551703 @rshiftexpr - 200554 + 200557 @andexpr - 481218 + 481223 @orexpr - 194055 + 194057 @xorexpr - 73952 + 73953 @eqexpr - 643372 + 643379 @neexpr - 411870 + 411873 @gtexpr - 111149 + 111150 @ltexpr - 139429 + 139430 @geexpr - 81358 + 81359 @leexpr - 292036 + 292039 @assignexpr - 1281144 + 1281159 @assignaddexpr @@ -782,7 +782,7 @@ @assignmulexpr - 11185 + 11183 @assigndivexpr @@ -806,11 +806,11 @@ @assignorexpr - 19606 + 19607 @assignxorexpr - 29909 + 29910 @assignpaddexpr @@ -822,27 +822,27 @@ @andlogicalexpr - 346589 + 346593 @orlogicalexpr - 1103522 + 1103536 @commaexpr - 168288 + 168283 @subscriptexpr - 435142 + 435148 @callexpr - 239780 + 239762 @vastartexpr - 4979 + 4970 @vaargexpr @@ -858,63 +858,63 @@ @varaccess - 8254629 + 8254728 @runtime_sizeof - 402047 + 402052 @runtime_alignof - 49877 + 49873 @expr_stmt - 148364 + 148366 @routineexpr - 5732444 + 5730574 @type_operand - 1405362 + 1405379 @offsetofexpr - 149024 + 149026 @typescompexpr - 701934 + 701942 @literal - 7966299 + 7966636 @aggregateliteral - 1397521 + 1397522 @c_style_cast - 6026987 + 6026984 @temp_init - 992173 + 991871 @errorexpr - 45686 + 45479 @reference_to - 1903138 + 1902179 @ref_indirect - 2107325 + 2107171 @vacuous_destructor_call @@ -922,7 +922,7 @@ @assume - 4151 + 4143 @conjugation @@ -974,23 +974,23 @@ @thisaccess - 1558277 + 1555763 @new_expr - 46198 + 46194 @delete_expr - 11481 + 11480 @throw_expr - 24178 + 24145 @condition_decl - 408920 + 408385 @braced_init_list @@ -998,7 +998,7 @@ @type_id - 47901 + 47898 @sizeof_pack @@ -1050,11 +1050,11 @@ @isbaseofexpr - 258 + 257 @isclassexpr - 2388 + 2384 @isconvtoexpr @@ -1066,7 +1066,7 @@ @isenumexpr - 2994 + 2993 @ispodexpr @@ -1090,7 +1090,7 @@ @uuidof - 26677 + 26695 @delete_array_expr @@ -1098,23 +1098,23 @@ @new_array_expr - 6653 + 6641 @foldexpr - 1247 + 1246 @ctordirectinit - 112837 + 112829 @ctorvirtualinit - 4020 + 4019 @ctorfieldinit - 206212 + 206206 @ctordelegatinginit @@ -1122,27 +1122,27 @@ @dtordirectdestruct - 39452 + 39449 @dtorvirtualdestruct - 3986 + 3985 @dtorfielddestruct - 39827 + 39824 @static_cast - 348053 + 348044 @reinterpret_cast - 40088 + 40018 @const_cast - 24461 + 24460 @dynamic_cast @@ -1150,15 +1150,15 @@ @lambdaexpr - 19057 + 19023 @param_ref - 164066 + 163939 @noopexpr - 48 + 64 @istriviallyconstructibleexpr @@ -1174,7 +1174,7 @@ @istriviallydestructibleexpr - 998 + 997 @istriviallyassignableexpr @@ -1254,11 +1254,11 @@ @isfinalexpr - 9403 + 9402 @noexceptexpr - 28465 + 28343 @builtinshufflevector @@ -1270,7 +1270,7 @@ @builtinaddressof - 15469 + 15468 @vec_fill @@ -1286,7 +1286,7 @@ @spaceshipexpr - 1312 + 1310 @co_await @@ -1306,7 +1306,7 @@ @hasuniqueobjectrepresentations - 43 + 42 @builtinbitcast @@ -1322,7 +1322,7 @@ @issame - 4539 + 4534 @isfunction @@ -1430,7 +1430,7 @@ @reuseexpr - 847039 + 845931 @istriviallycopyassignable @@ -1486,7 +1486,7 @@ @referenceconstructsfromtemporary - 43 + 42 @referenceconvertsfromtemporary @@ -1494,7 +1494,7 @@ @isconvertible - 129 + 128 @isvalidwinrttype @@ -1530,67 +1530,67 @@ @requires_expr - 16503 + 16481 @nested_requirement - 688 + 687 @compound_requirement - 10951 + 10937 @concept_id - 90433 + 90315 @lambdacapture - 31965 + 31909 @stmt_expr - 2031613 + 2031638 @stmt_if - 990214 + 990226 @stmt_while - 39647 + 39648 @stmt_goto - 157909 + 157874 @stmt_label - 78025 + 78008 @stmt_return - 1241788 + 1241721 @stmt_block - 1728666 + 1728619 @stmt_end_test_while - 233641 + 233643 @stmt_for - 84389 + 84390 @stmt_switch_case - 836152 + 835058 @stmt_switch - 411868 + 411329 @stmt_asm @@ -1598,11 +1598,11 @@ @stmt_decl - 772425 + 771065 @stmt_empty - 429404 + 428842 @stmt_continue @@ -1610,15 +1610,15 @@ @stmt_break - 137934 + 137691 @stmt_try_block - 26740 + 26736 @stmt_microsoft_try - 211 + 210 @stmt_set_vla_size @@ -1630,7 +1630,7 @@ @stmt_assigned_goto - 12426 + 12427 @stmt_range_based_for @@ -1638,11 +1638,11 @@ @stmt_handler - 43781 + 43770 @stmt_constexpr_if - 106037 + 106034 @stmt_co_return @@ -1662,43 +1662,43 @@ @ppd_if - 590942 + 590926 @ppd_ifdef - 214363 + 214366 @ppd_ifndef - 158633 + 160377 @ppd_elif - 21917 + 21912 @ppd_else - 234905 + 234898 @ppd_endif - 888971 + 888947 @ppd_plain_include - 318564 + 318495 @ppd_define - 2750123 + 2750047 @ppd_undef - 100424 + 100421 @ppd_pragma - 406187 + 406176 @ppd_include_next @@ -1706,7 +1706,7 @@ @ppd_line - 18812 + 18799 @ppd_error @@ -1764,11 +1764,11 @@ compilations - 12643 + 12640 id - 12643 + 12640 cwd @@ -1786,7 +1786,7 @@ 1 2 - 12643 + 12640 @@ -1812,19 +1812,410 @@ compilation_args - 1012213 + 1011994 + + + id + 12640 + + + num + 1467 + + + arg + 29262 + + + + + id + num + + + 12 + + + 36 + 42 + 1003 + + + 42 + 43 + 1098 + + + 43 + 44 + 718 + + + 44 + 45 + 506 + + + 45 + 51 + 950 + + + 51 + 70 + 485 + + + 71 + 72 + 707 + + + 72 + 90 + 897 + + + 94 + 96 + 390 + + + 98 + 99 + 1341 + + + 100 + 102 + 95 + + + 103 + 104 + 1995 + + + 104 + 119 + 1066 + + + 120 + 138 + 929 + + + 139 + 140 + 454 + + + + + + + id + arg + + + 12 + + + 34 + 38 + 591 + + + 38 + 39 + 1499 + + + 39 + 40 + 982 + + + 40 + 42 + 1087 + + + 42 + 53 + 601 + + + 53 + 54 + 707 + + + 54 + 63 + 897 + + + 64 + 67 + 401 + + + 67 + 68 + 1404 + + + 68 + 70 + 971 + + + 70 + 71 + 1404 + + + 73 + 79 + 950 + + + 79 + 89 + 1129 + + + 89 + 90 + 10 + + + + + + + num + id + + + 12 + + + 43 + 90 + 63 + + + 90 + 108 + 116 + + + 108 + 183 + 105 + + + 198 + 422 + 116 + + + 422 + 595 + 126 + + + 595 + 605 + 126 + + + 605 + 749 + 116 + + + 750 + 778 + 116 + + + 781 + 883 + 116 + + + 930 + 1190 + 84 + + + 1197 + 1198 + 380 + + + + + + + num + arg + + + 12 + + + 1 + 5 + 126 + + + 5 + 7 + 116 + + + 9 + 12 + 73 + + + 12 + 15 + 116 + + + 15 + 18 + 95 + + + 18 + 22 + 116 + + + 22 + 27 + 126 + + + 27 + 29 + 84 + + + 29 + 34 + 116 + + + 34 + 44 + 126 + + + 45 + 63 + 116 + + + 67 + 94 + 116 + + + 94 + 164 + 116 + + + 171 + 199 + 21 + + + + + + + arg + id + + + 12 + + + 1 + 2 + 13400 + + + 2 + 3 + 12682 + + + 3 + 103 + 2196 + + + 104 + 1198 + 982 + + + + + + + arg + num + + + 12 + + + 1 + 2 + 19377 + + + 2 + 3 + 8722 + + + 3 + 62 + 1161 + + + + + + + + + compilation_expanded_args + 1011994 id - 12643 + 12640 num - 1468 + 1467 arg - 29268 + 29262 @@ -1893,7 +2284,7 @@ 103 104 - 1996 + 1995 104 @@ -1944,7 +2335,7 @@ 42 53 - 602 + 601 53 @@ -1984,7 +2375,7 @@ 79 89 - 1130 + 1129 89 @@ -2152,12 +2543,12 @@ 1 2 - 13403 + 13400 2 3 - 12685 + 12682 3 @@ -2183,12 +2574,12 @@ 1 2 - 19382 + 19377 2 3 - 8724 + 8722 3 @@ -2497,7 +2888,7 @@ compilation_time - 62952 + 62953 id @@ -2513,7 +2904,7 @@ seconds - 13396 + 14485 @@ -2594,12 +2985,12 @@ 3 4 - 816 + 544 4 5 - 544 + 816 6 @@ -2608,33 +2999,33 @@ 8 - 9 - 163 + 10 + 217 10 11 - 217 + 108 11 - 15 + 12 217 - 15 - 19 + 13 + 18 217 - 19 - 26 + 18 + 22 217 - 42 - 92 - 163 + 25 + 98 + 217 @@ -2707,46 +3098,46 @@ 3 4 - 1361 + 1089 4 5 - 980 + 1306 5 6 - 272 + 163 6 7 - 544 + 599 7 8 - 163 + 217 8 9 - 272 + 217 9 - 14 + 13 381 17 - 44 + 46 381 - 49 - 87 + 50 + 90 108 @@ -2792,24 +3183,19 @@ 12 - - 3 - 4 - 54 - 4 5 - 54 + 108 - 144 - 145 + 154 + 155 54 - 149 - 150 + 171 + 172 54 @@ -2826,7 +3212,7 @@ 1 2 - 6807 + 7732 2 @@ -2836,18 +3222,13 @@ 3 4 - 1633 + 2341 4 - 5 + 46 1034 - - 5 - 45 - 544 - @@ -2862,32 +3243,27 @@ 1 2 - 6208 + 7242 2 3 - 2668 + 3158 3 4 - 2069 + 1960 4 - 5 - 925 - - - 5 - 8 - 1198 + 6 + 1306 - 8 - 74 - 326 + 6 + 77 + 816 @@ -2903,17 +3279,12 @@ 1 2 - 10510 + 10837 2 3 - 2831 - - - 3 - 4 - 54 + 3648 @@ -2923,23 +3294,23 @@ diagnostic_for - 4152 + 506 diagnostic - 1484 + 359 compilation - 1355 + 190 file_number - 21 + 10 file_number_diagnostic_number - 107 + 52 @@ -2953,12 +3324,12 @@ 1 2 - 1441 + 211 - 63 - 64 - 43 + 2 + 3 + 147 @@ -2974,7 +3345,7 @@ 1 2 - 1484 + 359 @@ -2990,7 +3361,7 @@ 1 2 - 1484 + 359 @@ -3003,15 +3374,20 @@ 12 + + 2 + 3 + 105 + 3 4 - 1312 + 63 5 6 - 43 + 21 @@ -3027,7 +3403,7 @@ 1 2 - 1355 + 190 @@ -3040,15 +3416,20 @@ 12 + + 2 + 3 + 105 + 3 4 - 1312 + 63 5 6 - 43 + 21 @@ -3062,9 +3443,9 @@ 12 - 69 - 70 - 21 + 34 + 35 + 10 @@ -3078,9 +3459,9 @@ 12 - 63 - 64 - 21 + 18 + 19 + 10 @@ -3096,7 +3477,7 @@ 5 6 - 21 + 10 @@ -3112,17 +3493,22 @@ 1 2 - 43 + 21 - 2 - 3 - 43 + 4 + 5 + 10 - 63 - 64 - 21 + 10 + 11 + 10 + + + 18 + 19 + 10 @@ -3138,12 +3524,17 @@ 2 3 - 43 + 21 - 63 - 64 - 64 + 8 + 9 + 10 + + + 18 + 19 + 21 @@ -3159,7 +3550,7 @@ 1 2 - 107 + 52 @@ -3169,19 +3560,19 @@ compilation_finished - 12643 + 12640 id - 12643 + 12640 cpu_seconds - 9379 + 9630 elapsed_seconds - 232 + 221 @@ -3195,7 +3586,7 @@ 1 2 - 12643 + 12640 @@ -3211,7 +3602,7 @@ 1 2 - 12643 + 12640 @@ -3227,17 +3618,17 @@ 1 2 - 7763 + 8268 2 3 - 1172 + 1013 3 - 29 - 443 + 37 + 348 @@ -3253,12 +3644,12 @@ 1 2 - 8735 + 8923 2 3 - 644 + 707 @@ -3277,43 +3668,68 @@ 63 - 2 - 3 + 3 + 4 21 - 3 + 4 5 - 21 + 10 8 9 - 31 + 10 - 12 - 15 + 11 + 12 21 - 15 - 37 - 21 + 12 + 13 + 10 - 51 - 177 - 21 + 13 + 14 + 10 - 241 - 286 - 21 + 20 + 21 + 10 - 326 - 327 + 29 + 30 + 10 + + + 59 + 60 + 10 + + + 150 + 151 + 10 + + + 247 + 248 + 10 + + + 302 + 303 + 10 + + + 319 + 320 10 @@ -3333,45 +3749,70 @@ 63 - 2 - 3 + 3 + 4 21 - 3 + 4 5 - 21 + 10 8 9 - 31 + 10 - 12 - 15 + 11 + 12 21 - 15 - 37 - 21 + 12 + 13 + 10 - 48 - 162 - 21 + 13 + 14 + 10 - 165 - 221 - 21 + 20 + 21 + 10 + + + 29 + 30 + 10 + + + 59 + 60 + 10 + + + 148 + 149 + 10 + + + 159 + 160 + 10 237 238 10 + + 256 + 257 + 10 + @@ -3607,31 +4048,31 @@ locations_default - 46945087 + 46943795 id - 46945087 + 46943795 file - 40918 + 40917 beginLine - 7500620 + 7500413 beginColumn - 21956 + 21955 endLine - 7501742 + 7501536 endColumn - 53393 + 53391 @@ -3645,7 +4086,7 @@ 1 2 - 46945087 + 46943795 @@ -3661,7 +4102,7 @@ 1 2 - 46945087 + 46943795 @@ -3677,7 +4118,7 @@ 1 2 - 46945087 + 46943795 @@ -3693,7 +4134,7 @@ 1 2 - 46945087 + 46943795 @@ -3709,7 +4150,7 @@ 1 2 - 46945087 + 46943795 @@ -3942,7 +4383,7 @@ 112 156 - 1996 + 1995 @@ -4039,7 +4480,7 @@ 13 26 - 3493 + 3492 26 @@ -4069,7 +4510,7 @@ 67 76 - 3493 + 3492 76 @@ -4084,7 +4525,7 @@ 102 116 - 3493 + 3492 116 @@ -4094,7 +4535,7 @@ 136 363 - 1497 + 1496 @@ -4110,32 +4551,32 @@ 1 2 - 4957457 + 4957321 2 3 - 779066 + 779045 3 4 - 543911 + 543896 4 12 - 570359 + 570343 12 97 - 563372 + 563357 97 637 - 86452 + 86449 @@ -4151,27 +4592,27 @@ 1 2 - 5019458 + 5019320 2 3 - 1221306 + 1221273 3 6 - 639969 + 639952 6 57 - 563248 + 563232 57 329 - 56636 + 56635 @@ -4187,27 +4628,27 @@ 1 2 - 5641339 + 5641184 2 3 - 483158 + 483145 3 7 - 582085 + 582069 7 25 - 565244 + 565228 25 94 - 228792 + 228786 @@ -4223,12 +4664,12 @@ 1 2 - 7034552 + 7034358 2 85 - 466067 + 466054 @@ -4244,32 +4685,32 @@ 1 2 - 5026444 + 5026306 2 3 - 739395 + 739375 3 4 - 539795 + 539780 4 12 - 586950 + 586934 12 72 - 564121 + 564105 72 250 - 43912 + 43910 @@ -4290,7 +4731,7 @@ 2 6 - 1996 + 1995 6 @@ -4361,7 +4802,7 @@ 1 2 - 1996 + 1995 2 @@ -4421,7 +4862,7 @@ 243 329 - 499 + 498 @@ -4594,7 +5035,7 @@ 2 5 - 1497 + 1496 5 @@ -4609,7 +5050,7 @@ 13 23 - 1996 + 1995 23 @@ -4629,7 +5070,7 @@ 58 73 - 1497 + 1496 73 @@ -4665,32 +5106,32 @@ 1 2 - 4955336 + 4955200 2 3 - 781561 + 781539 3 4 - 544785 + 544770 4 12 - 567864 + 567848 12 95 - 563497 + 563482 95 620 - 88697 + 88695 @@ -4706,27 +5147,27 @@ 1 2 - 5016589 + 5016451 2 3 - 1223801 + 1223768 3 6 - 633357 + 633340 6 52 - 564121 + 564105 52 329 - 63872 + 63870 @@ -4742,12 +5183,12 @@ 1 2 - 7051643 + 7051449 2 15 - 450099 + 450087 @@ -4763,27 +5204,27 @@ 1 2 - 5640466 + 5640311 2 3 - 480538 + 480525 3 7 - 587075 + 587059 7 25 - 568862 + 568846 25 89 - 224800 + 224794 @@ -4799,32 +5240,32 @@ 1 2 - 5025072 + 5024934 2 3 - 743762 + 743741 3 4 - 539545 + 539530 4 12 - 587574 + 587558 12 72 - 562749 + 562733 72 250 - 43038 + 43037 @@ -4962,12 +5403,12 @@ 1 2 - 15968 + 15967 2 3 - 5988 + 5987 3 @@ -5048,7 +5489,7 @@ 14 28 - 4491 + 4490 28 @@ -5084,12 +5525,12 @@ 1 2 - 15968 + 15967 2 3 - 5988 + 5987 3 @@ -5139,15 +5580,15 @@ files - 65212 + 65198 id - 65212 + 65198 name - 65212 + 65198 @@ -5161,7 +5602,7 @@ 1 2 - 65212 + 65198 @@ -5177,7 +5618,7 @@ 1 2 - 65212 + 65198 @@ -5187,15 +5628,15 @@ folders - 12389 + 12387 id - 12389 + 12387 name - 12389 + 12387 @@ -5209,7 +5650,7 @@ 1 2 - 12389 + 12387 @@ -5225,7 +5666,7 @@ 1 2 - 12389 + 12387 @@ -5235,15 +5676,15 @@ containerparent - 77581 + 77564 parent - 12389 + 12387 child - 77581 + 77564 @@ -5257,7 +5698,7 @@ 1 2 - 6031 + 6029 2 @@ -5308,7 +5749,7 @@ 1 2 - 77581 + 77564 @@ -5318,23 +5759,23 @@ numlines - 807883 + 807861 element_id - 806761 + 806738 num_lines - 39421 + 39420 num_code - 34056 + 34055 num_comment - 18338 + 18337 @@ -5348,7 +5789,7 @@ 1 2 - 805638 + 805616 2 @@ -5369,7 +5810,7 @@ 1 2 - 805638 + 805616 2 @@ -5390,7 +5831,7 @@ 1 2 - 806511 + 806489 2 @@ -5411,7 +5852,7 @@ 1 2 - 26696 + 26695 2 @@ -5426,7 +5867,7 @@ 5 35 - 2994 + 2993 39 @@ -5447,7 +5888,7 @@ 1 2 - 27195 + 27194 2 @@ -5457,12 +5898,12 @@ 3 4 - 2495 + 2494 4 7 - 3493 + 3492 7 @@ -5483,7 +5924,7 @@ 1 2 - 26821 + 26820 2 @@ -5519,7 +5960,7 @@ 1 2 - 21831 + 21830 2 @@ -5560,7 +6001,7 @@ 1 2 - 22205 + 22204 2 @@ -5585,7 +6026,7 @@ 9 13 - 1497 + 1496 @@ -5601,7 +6042,7 @@ 1 2 - 21956 + 21955 2 @@ -5637,12 +6078,12 @@ 1 2 - 11352 + 11351 2 3 - 1996 + 1995 3 @@ -5652,12 +6093,12 @@ 4 7 - 1497 + 1496 8 22 - 1497 + 1496 42 @@ -5678,12 +6119,12 @@ 1 2 - 11352 + 11351 2 3 - 1996 + 1995 3 @@ -5698,7 +6139,7 @@ 8 27 - 1497 + 1496 30 @@ -5719,12 +6160,12 @@ 1 2 - 11352 + 11351 2 3 - 1996 + 1995 3 @@ -5734,12 +6175,12 @@ 4 8 - 1497 + 1496 8 31 - 1497 + 1496 35 @@ -5754,11 +6195,11 @@ diagnostics - 1484 + 359 id - 1484 + 359 severity @@ -5766,19 +6207,19 @@ error_tag - 43 + 73 error_message - 150 + 147 full_error_message - 150 + 179 location - 64 + 179 @@ -5792,7 +6233,7 @@ 1 2 - 1484 + 359 @@ -5808,7 +6249,7 @@ 1 2 - 1484 + 359 @@ -5824,7 +6265,7 @@ 1 2 - 1484 + 359 @@ -5840,7 +6281,7 @@ 1 2 - 1484 + 359 @@ -5856,7 +6297,7 @@ 1 2 - 1484 + 359 @@ -5870,9 +6311,14 @@ 12 - 69 - 70 - 21 + 3 + 4 + 10 + + + 31 + 32 + 10 @@ -5886,9 +6332,14 @@ 12 - 2 - 3 - 21 + 1 + 2 + 10 + + + 6 + 7 + 10 @@ -5902,9 +6353,14 @@ 12 - 7 - 8 - 21 + 2 + 3 + 10 + + + 12 + 13 + 10 @@ -5918,9 +6374,14 @@ 12 - 7 - 8 - 21 + 3 + 4 + 10 + + + 14 + 15 + 10 @@ -5936,7 +6397,12 @@ 3 4 - 21 + 10 + + + 14 + 15 + 10 @@ -5950,14 +6416,24 @@ 12 - 6 - 7 - 21 + 1 + 2 + 42 - 63 - 64 - 21 + 3 + 4 + 10 + + + 9 + 10 + 10 + + + 18 + 19 + 10 @@ -5973,7 +6449,7 @@ 1 2 - 43 + 73 @@ -5989,12 +6465,17 @@ 1 2 - 21 + 52 - 6 - 7 - 21 + 2 + 3 + 10 + + + 7 + 8 + 10 @@ -6010,12 +6491,17 @@ 1 2 - 21 + 52 - 6 - 7 - 21 + 3 + 4 + 10 + + + 9 + 10 + 10 @@ -6031,12 +6517,17 @@ 1 2 - 21 + 52 - 2 - 3 - 21 + 3 + 4 + 10 + + + 9 + 10 + 10 @@ -6052,12 +6543,17 @@ 1 2 - 129 + 105 - 63 - 64 - 21 + 2 + 3 + 31 + + + 18 + 19 + 10 @@ -6073,7 +6569,7 @@ 1 2 - 150 + 147 @@ -6089,7 +6585,7 @@ 1 2 - 150 + 147 @@ -6105,7 +6601,12 @@ 1 2 - 150 + 116 + + + 2 + 3 + 31 @@ -6121,7 +6622,12 @@ 1 2 - 150 + 116 + + + 2 + 3 + 31 @@ -6137,12 +6643,12 @@ 1 2 - 129 + 168 - 63 - 64 - 21 + 18 + 19 + 10 @@ -6158,7 +6664,7 @@ 1 2 - 150 + 179 @@ -6174,7 +6680,7 @@ 1 2 - 150 + 179 @@ -6190,7 +6696,7 @@ 1 2 - 150 + 179 @@ -6206,7 +6712,7 @@ 1 2 - 150 + 179 @@ -6220,14 +6726,14 @@ 12 - 3 - 4 - 43 + 1 + 2 + 168 - 63 - 64 - 21 + 18 + 19 + 10 @@ -6243,7 +6749,7 @@ 1 2 - 64 + 179 @@ -6259,7 +6765,7 @@ 1 2 - 64 + 179 @@ -6275,12 +6781,7 @@ 1 2 - 21 - - - 3 - 4 - 43 + 179 @@ -6296,12 +6797,7 @@ 1 2 - 21 - - - 3 - 4 - 43 + 179 @@ -6359,7 +6855,7 @@ pch_uses - 4134 + 4127 pch @@ -6367,11 +6863,11 @@ compilation - 4134 + 4127 id - 4134 + 4127 @@ -6567,7 +7063,7 @@ 1 2 - 4134 + 4127 @@ -6583,7 +7079,7 @@ 1 2 - 4134 + 4127 @@ -6599,7 +7095,7 @@ 1 2 - 4134 + 4127 @@ -6615,7 +7111,7 @@ 1 2 - 4134 + 4127 @@ -6741,11 +7237,11 @@ fileannotations - 4200551 + 4199643 id - 5767 + 5765 kind @@ -6753,11 +7249,11 @@ name - 58716 + 58704 value - 39514 + 39505 @@ -6776,7 +7272,7 @@ 2 3 - 5566 + 5565 @@ -6792,12 +7288,12 @@ 1 86 - 433 + 432 88 206 - 433 + 432 212 @@ -6807,17 +7303,17 @@ 291 359 - 433 + 432 362 401 - 433 + 432 402 479 - 433 + 432 480 @@ -6832,7 +7328,7 @@ 553 628 - 433 + 432 631 @@ -6863,17 +7359,17 @@ 1 98 - 433 + 432 102 244 - 433 + 432 244 351 - 433 + 432 352 @@ -6888,7 +7384,7 @@ 490 628 - 433 + 432 632 @@ -6903,22 +7399,22 @@ 710 939 - 433 + 432 939 1038 - 433 + 432 1066 1853 - 433 + 432 1853 3292 - 433 + 432 3423 @@ -7002,62 +7498,62 @@ 1 2 - 11027 + 11024 2 3 - 4362 + 4361 3 5 - 5059 + 5058 5 7 - 4098 + 4097 7 9 - 4594 + 4593 9 16 - 4330 + 4329 16 19 - 4890 + 4889 19 27 - 4256 + 4255 27 47 - 4837 + 4836 47 128 - 4922 + 4921 128 459 - 4626 + 4625 459 546 - 1711 + 1710 @@ -7073,7 +7569,7 @@ 1 2 - 58716 + 58704 @@ -7089,52 +7585,52 @@ 1 2 - 11587 + 11584 2 3 - 7689 + 7687 3 4 - 4098 + 4097 4 6 - 4066 + 4065 6 8 - 3422 + 3421 8 11 - 4742 + 4741 11 17 - 5397 + 5396 17 23 - 4700 + 4699 23 41 - 4679 + 4678 41 95 - 4467 + 4466 95 @@ -7160,7 +7656,7 @@ 2 4 - 1637 + 1636 4 @@ -7170,12 +7666,12 @@ 5 8 - 2461 + 2460 8 14 - 2968 + 2967 14 @@ -7190,27 +7686,27 @@ 24 51 - 3538 + 3537 51 58 - 3031 + 3030 58 80 - 2978 + 2977 81 151 - 3084 + 3083 151 334 - 2978 + 2977 334 @@ -7220,7 +7716,7 @@ 473 547 - 2313 + 2312 @@ -7236,7 +7732,7 @@ 1 2 - 39503 + 39495 2 @@ -7257,7 +7753,7 @@ 1 2 - 3401 + 3400 2 @@ -7267,17 +7763,17 @@ 4 5 - 3052 + 3051 5 8 - 2482 + 2481 8 14 - 3485 + 3484 14 @@ -7287,22 +7783,22 @@ 18 28 - 3200 + 3199 28 34 - 3147 + 3146 34 41 - 3200 + 3199 41 66 - 2989 + 2988 66 @@ -7312,12 +7808,12 @@ 92 113 - 2989 + 2988 113 145 - 3031 + 3030 145 @@ -7332,15 +7828,15 @@ inmacroexpansion - 149995903 + 149997201 id - 24670868 + 24671160 inv - 3705270 + 3705370 @@ -7354,37 +7850,37 @@ 1 3 - 2209399 + 2209511 3 5 - 1474977 + 1474989 5 6 - 1620368 + 1620381 6 7 - 6582542 + 6582595 7 8 - 8718997 + 8719067 8 9 - 3557047 + 3557076 9 22 - 507534 + 507538 @@ -7400,32 +7896,32 @@ 1 2 - 531661 + 531711 2 3 - 743208 + 743238 3 4 - 481512 + 481516 4 7 - 275303 + 275305 7 8 - 282152 + 282155 8 9 - 330246 + 330249 9 @@ -7435,22 +7931,22 @@ 10 11 - 444650 + 444653 11 337 - 307798 + 307800 339 423 - 281755 + 281757 423 7616 - 23934 + 23935 @@ -7460,15 +7956,15 @@ affectedbymacroexpansion - 48735823 + 48736214 id - 7044739 + 7044796 inv - 3803120 + 3803150 @@ -7482,37 +7978,37 @@ 1 2 - 3846709 + 3846740 2 3 - 766304 + 766310 3 4 - 361841 + 361844 4 5 - 772736 + 772742 5 12 - 535160 + 535164 12 50 - 556267 + 556271 50 9900 - 205719 + 205721 @@ -7528,62 +8024,62 @@ 1 4 - 313248 + 313251 4 7 - 316607 + 316610 7 9 - 301087 + 301090 9 12 - 342938 + 342941 12 13 - 456004 + 456008 13 14 - 226099 + 226101 14 15 - 408038 + 408041 15 16 - 166429 + 166430 16 17 - 377677 + 377680 17 18 - 200636 + 200638 18 20 - 344255 + 344258 20 25 - 285393 + 285395 25 @@ -7598,19 +8094,19 @@ macroinvocations - 40337724 + 40354035 id - 40337724 + 40354035 macro_id - 182049 + 182487 location - 5912934 + 5919825 kind @@ -7628,7 +8124,7 @@ 1 2 - 40337724 + 40354035 @@ -7644,7 +8140,7 @@ 1 2 - 40337724 + 40354035 @@ -7660,7 +8156,7 @@ 1 2 - 40337724 + 40354035 @@ -7676,17 +8172,17 @@ 1 2 - 60773 + 61156 2 3 - 27555 + 27610 3 4 - 17970 + 17971 4 @@ -7710,13 +8206,13 @@ 33 - 180 - 13668 + 182 + 13723 - 181 + 185 72152 - 9802 + 9747 @@ -7732,12 +8228,12 @@ 1 2 - 77274 + 77656 2 3 - 30550 + 30605 3 @@ -7757,17 +8253,17 @@ 8 18 - 14158 + 14213 18 - 88 - 13668 + 90 + 13723 - 89 + 90 12187 - 7678 + 7569 @@ -7783,12 +8279,12 @@ 1 2 - 177475 + 177858 2 3 - 4574 + 4628 @@ -7804,17 +8300,17 @@ 1 2 - 5256183 + 5256857 2 4 - 422313 + 428527 4 72152 - 234437 + 234440 @@ -7830,12 +8326,12 @@ 1 2 - 5890770 + 5897661 2 37 - 22163 + 22164 @@ -7851,7 +8347,7 @@ 1 2 - 5912934 + 5919825 @@ -7865,13 +8361,13 @@ 12 - 1490 - 1491 + 1499 + 1500 54 - 739237 - 739238 + 739517 + 739518 54 @@ -7886,8 +8382,8 @@ 12 - 282 - 283 + 291 + 292 54 @@ -7907,13 +8403,13 @@ 12 - 1069 - 1070 + 1078 + 1079 54 - 107511 - 107512 + 107627 + 107628 54 @@ -7924,15 +8420,15 @@ macroparent - 33655149 + 33658296 id - 33655149 + 33658296 parent_id - 15926203 + 15929098 @@ -7946,7 +8442,7 @@ 1 2 - 33655149 + 33658296 @@ -7962,27 +8458,27 @@ 1 2 - 7806456 + 7809235 2 3 - 1595479 + 1595502 3 4 - 4702955 + 4703022 4 5 - 1295312 + 1295331 5 205 - 525999 + 526007 @@ -7992,15 +8488,15 @@ macrolocationbind - 6040022 + 6032778 id - 4221190 + 4216419 location - 2279306 + 2276207 @@ -8014,27 +8510,27 @@ 1 2 - 3294948 + 3291436 2 3 - 491264 + 490596 3 4 - 7896 + 7885 4 5 - 413891 + 413328 5 17 - 13189 + 13171 @@ -8050,27 +8546,27 @@ 1 2 - 1337013 + 1335195 2 3 - 482141 + 481486 3 4 - 7810 + 7799 4 5 - 428221 + 427639 5 522 - 24119 + 24087 @@ -8080,19 +8576,19 @@ macro_argument_unexpanded - 82495572 + 82481176 invocation - 26282637 + 26280397 argument_index - 697 + 696 text - 343270 + 343195 @@ -8106,22 +8602,22 @@ 1 2 - 9679766 + 9681115 2 3 - 9770635 + 9768522 3 4 - 5002265 + 5001183 4 67 - 1829971 + 1829575 @@ -8137,22 +8633,22 @@ 1 2 - 9862401 + 9863712 2 3 - 9788179 + 9786062 3 4 - 4845602 + 4844554 4 67 - 1786453 + 1786067 @@ -8177,7 +8673,7 @@ 646840 - 2488302 + 2488628 31 @@ -8220,57 +8716,57 @@ 1 2 - 39704 + 39695 2 3 - 62329 + 62315 3 4 - 21029 + 21025 4 5 - 34581 + 34574 5 6 - 39250 + 39241 6 9 - 30874 + 30867 9 15 - 28983 + 28977 15 26 - 25888 + 25883 26 57 - 27145 + 27139 57 517 - 25994 + 25988 518 486610 - 7488 + 7487 @@ -8286,17 +8782,17 @@ 1 2 - 243180 + 243127 2 3 - 89876 + 89856 3 9 - 10213 + 10211 @@ -8306,19 +8802,19 @@ macro_argument_expanded - 82495572 + 82481176 invocation - 26282637 + 26280397 argument_index - 697 + 696 text - 207933 + 207888 @@ -8332,22 +8828,22 @@ 1 2 - 9679766 + 9681115 2 3 - 9770635 + 9768522 3 4 - 5002265 + 5001183 4 67 - 1829971 + 1829575 @@ -8363,22 +8859,22 @@ 1 2 - 12638444 + 12639154 2 3 - 8428470 + 8426648 3 4 - 4225331 + 4224417 4 9 - 990391 + 990177 @@ -8403,7 +8899,7 @@ 646840 - 2488302 + 2488628 31 @@ -8420,7 +8916,7 @@ 1 2 - 602 + 601 2 @@ -8446,22 +8942,22 @@ 1 2 - 21832 + 21827 2 3 - 26860 + 26854 3 4 - 43496 + 43486 4 5 - 15907 + 15903 5 @@ -8471,32 +8967,32 @@ 6 7 - 18399 + 18395 7 10 - 18970 + 18966 10 19 - 18325 + 18321 19 51 - 15780 + 15776 51 252 - 15600 + 15597 252 - 1169205 - 9495 + 1169531 + 9493 @@ -8512,17 +9008,17 @@ 1 2 - 105086 + 105063 2 3 - 88914 + 88895 3 66 - 13931 + 13928 @@ -8532,15 +9028,15 @@ functions - 4049399 + 4049287 id - 4049399 + 4049287 name - 1693362 + 1693315 kind @@ -8558,7 +9054,7 @@ 1 2 - 4049399 + 4049287 @@ -8574,7 +9070,7 @@ 1 2 - 4049399 + 4049287 @@ -8590,17 +9086,17 @@ 1 2 - 1447229 + 1447190 2 4 - 138971 + 138968 4 3162 - 107160 + 107157 @@ -8616,7 +9112,7 @@ 1 2 - 1690493 + 1690446 2 @@ -8723,26 +9219,26 @@ builtin_functions - 30926 + 30920 id - 30926 + 30920 function_entry_point - 1141561 + 1141750 id - 1137813 + 1138003 entry_point - 1141561 + 1141750 @@ -8756,7 +9252,7 @@ 1 2 - 1134611 + 1134801 2 @@ -8777,7 +9273,7 @@ 1 2 - 1141561 + 1141750 @@ -8787,15 +9283,15 @@ function_return_type - 4066864 + 4066752 id - 4049399 + 4049287 return_type - 619261 + 619244 @@ -8809,12 +9305,12 @@ 1 2 - 4031934 + 4031823 2 3 - 17465 + 17464 @@ -8830,22 +9326,22 @@ 1 2 - 309880 + 309871 2 3 - 213697 + 213691 3 5 - 48028 + 48027 5 365 - 46531 + 46530 432 @@ -9130,44 +9626,44 @@ purefunctions - 131703 + 131626 id - 131703 + 131626 function_deleted - 88088 + 87973 id - 88088 + 87973 function_defaulted - 51682 + 51614 id - 51682 + 51614 function_prototyped - 4047902 + 4047790 id - 4047902 + 4047790 @@ -9247,15 +9743,15 @@ member_function_this_type - 674151 + 674132 id - 674151 + 674132 this_type - 176022 + 176018 @@ -9269,7 +9765,7 @@ 1 2 - 674151 + 674132 @@ -9285,17 +9781,17 @@ 1 2 - 47155 + 47154 2 3 - 36926 + 36925 3 4 - 32684 + 32683 4 @@ -9305,17 +9801,17 @@ 5 6 - 12849 + 12848 6 10 - 14471 + 14470 10 65 - 11851 + 11850 @@ -9325,27 +9821,27 @@ fun_decls - 4208955 + 4208839 id - 4202967 + 4202851 function - 4024823 + 4024712 type_id - 611277 + 611260 name - 1691865 + 1691818 location - 2813247 + 2813169 @@ -9359,7 +9855,7 @@ 1 2 - 4202967 + 4202851 @@ -9375,12 +9871,12 @@ 1 2 - 4196979 + 4196863 2 3 - 5988 + 5987 @@ -9396,7 +9892,7 @@ 1 2 - 4202967 + 4202851 @@ -9412,7 +9908,7 @@ 1 2 - 4202967 + 4202851 @@ -9428,12 +9924,12 @@ 1 2 - 3861275 + 3861169 2 5 - 163547 + 163543 @@ -9449,12 +9945,12 @@ 1 2 - 4006360 + 4006250 2 3 - 18463 + 18462 @@ -9470,7 +9966,7 @@ 1 2 - 4024823 + 4024712 @@ -9486,12 +9982,12 @@ 1 2 - 3881734 + 3881627 2 4 - 143088 + 143084 @@ -9507,22 +10003,22 @@ 1 2 - 295159 + 295151 2 3 - 220558 + 220552 3 5 - 48403 + 48401 5 364 - 45908 + 45906 364 @@ -9543,22 +10039,22 @@ 1 2 - 305264 + 305255 2 3 - 211826 + 211820 3 5 - 48028 + 48027 5 1163 - 45908 + 45906 1483 @@ -9579,17 +10075,17 @@ 1 2 - 491516 + 491503 2 3 - 52894 + 52892 3 7 - 50149 + 50148 7 @@ -9610,22 +10106,22 @@ 1 2 - 454964 + 454952 2 3 - 69485 + 69484 3 6 - 56012 + 56011 6 4756 - 30813 + 30812 @@ -9641,22 +10137,22 @@ 1 2 - 1331336 + 1331300 2 3 - 194485 + 194480 3 11 - 129490 + 129487 11 3169 - 36551 + 36550 @@ -9672,17 +10168,17 @@ 1 2 - 1446730 + 1446691 2 4 - 139470 + 139467 4 3162 - 105663 + 105660 @@ -9698,12 +10194,12 @@ 1 2 - 1602045 + 1602001 2 1596 - 89820 + 89817 @@ -9719,17 +10215,17 @@ 1 2 - 1367264 + 1367227 2 3 - 208333 + 208327 3 1592 - 116267 + 116264 @@ -9745,17 +10241,17 @@ 1 2 - 2420283 + 2420216 2 3 - 251496 + 251489 3 211 - 141466 + 141463 @@ -9771,17 +10267,17 @@ 1 2 - 2438995 + 2438928 2 3 - 233283 + 233276 3 211 - 140967 + 140964 @@ -9797,12 +10293,12 @@ 1 2 - 2698851 + 2698776 2 211 - 114396 + 114393 @@ -9818,12 +10314,12 @@ 1 2 - 2774075 + 2773999 2 8 - 39171 + 39170 @@ -9833,22 +10329,22 @@ fun_def - 1422279 + 1422240 id - 1422279 + 1422240 fun_specialized - 7936 + 7922 id - 7936 + 7922 @@ -9866,11 +10362,11 @@ fun_decl_specifiers - 4279688 + 4279570 id - 1748252 + 1748204 name @@ -9888,22 +10384,22 @@ 1 2 - 362899 + 362889 2 3 - 262225 + 262218 3 4 - 1100174 + 1100143 4 5 - 22954 + 22953 @@ -10100,26 +10596,26 @@ fun_decl_empty_throws - 420911 + 421168 fun_decl - 420911 + 421168 fun_decl_noexcept - 141830 + 141820 fun_decl - 141830 + 141820 constant - 141353 + 141343 @@ -10133,7 +10629,7 @@ 1 2 - 141830 + 141820 @@ -10149,7 +10645,7 @@ 1 2 - 140910 + 140900 2 @@ -10164,26 +10660,26 @@ fun_decl_empty_noexcept - 1163672 + 1163640 fun_decl - 1163672 + 1163640 fun_decl_typedef_type - 2761 + 2759 fun_decl - 2761 + 2759 typedeftype_id - 124 + 123 @@ -10197,7 +10693,7 @@ 1 2 - 2761 + 2759 @@ -10213,57 +10709,57 @@ 1 2 - 40 + 39 2 3 - 12 + 11 3 4 - 12 + 11 5 13 - 8 + 7 16 17 - 12 + 11 17 18 - 4 + 3 21 22 - 8 + 7 25 43 - 8 + 7 46 55 - 8 + 7 89 128 - 8 + 7 158 159 - 4 + 3 @@ -10273,19 +10769,19 @@ fun_requires - 29111 + 29073 id - 10112 + 10099 kind - 43 + 42 constraint - 28875 + 28837 @@ -10299,7 +10795,7 @@ 1 2 - 10048 + 10035 2 @@ -10320,7 +10816,7 @@ 1 2 - 7272 + 7263 2 @@ -10330,7 +10826,7 @@ 3 6 - 860 + 859 6 @@ -10340,7 +10836,7 @@ 13 14 - 1140 + 1138 19 @@ -10403,7 +10899,7 @@ 1 2 - 28638 + 28600 2 @@ -10424,7 +10920,7 @@ 1 2 - 28875 + 28837 @@ -10434,19 +10930,19 @@ param_decl_bind - 7310375 + 7310174 id - 7310375 + 7310174 index - 7984 + 7983 fun_decl - 3531684 + 3531587 @@ -10460,7 +10956,7 @@ 1 2 - 7310375 + 7310174 @@ -10476,7 +10972,7 @@ 1 2 - 7310375 + 7310174 @@ -10492,12 +10988,12 @@ 2 3 - 3992 + 3991 6 7 - 1996 + 1995 16 @@ -10533,12 +11029,12 @@ 2 3 - 3992 + 3991 6 7 - 1996 + 1995 16 @@ -10574,27 +11070,27 @@ 1 2 - 1508981 + 1508939 2 3 - 976296 + 976270 3 4 - 602045 + 602029 4 5 - 290668 + 290660 5 65 - 153692 + 153688 @@ -10610,27 +11106,27 @@ 1 2 - 1508981 + 1508939 2 3 - 976296 + 976270 3 4 - 602045 + 602029 4 5 - 290668 + 290660 5 65 - 153692 + 153688 @@ -10640,27 +11136,27 @@ var_decls - 9389965 + 9389956 id - 9383104 + 9383095 variable - 9034676 + 9034677 type_id - 1456461 + 1456421 name - 852544 + 852521 location - 6274572 + 6274400 @@ -10674,7 +11170,7 @@ 1 2 - 9383104 + 9383095 @@ -10690,7 +11186,7 @@ 1 2 - 9376243 + 9376234 2 @@ -10711,7 +11207,7 @@ 1 2 - 9383104 + 9383095 @@ -10727,7 +11223,7 @@ 1 2 - 9383104 + 9383095 @@ -10743,12 +11239,12 @@ 1 2 - 8703713 + 8703723 2 5 - 330962 + 330953 @@ -10764,12 +11260,12 @@ 1 2 - 8981158 + 8981160 2 3 - 53517 + 53516 @@ -10785,12 +11281,12 @@ 1 2 - 8929262 + 8929265 2 4 - 105414 + 105411 @@ -10806,12 +11302,12 @@ 1 2 - 8783054 + 8783062 2 4 - 251621 + 251614 @@ -10827,27 +11323,27 @@ 1 2 - 849924 + 849901 2 3 - 284056 + 284048 3 5 - 127370 + 127366 5 11 - 113148 + 113145 11 2944 - 81961 + 81958 @@ -10863,27 +11359,27 @@ 1 2 - 870758 + 870734 2 3 - 269086 + 269079 3 5 - 122754 + 122751 5 11 - 113023 + 113020 11 2860 - 80838 + 80836 @@ -10899,17 +11395,17 @@ 1 2 - 1119510 + 1119479 2 3 - 192614 + 192609 3 7 - 115269 + 115266 7 @@ -10930,22 +11426,22 @@ 1 2 - 985403 + 985376 2 3 - 219061 + 219055 3 6 - 133607 + 133604 6 95 - 109281 + 109278 97 @@ -10966,32 +11462,32 @@ 1 2 - 465942 + 465930 2 3 - 165793 + 165788 3 4 - 59630 + 59629 4 7 - 65868 + 65866 7 25 - 64121 + 64119 25 27139 - 31187 + 31186 @@ -11007,27 +11503,27 @@ 1 2 - 478916 + 478903 2 3 - 165044 + 165040 3 4 - 54640 + 54639 4 8 - 71606 + 71604 8 45 - 64246 + 64244 45 @@ -11048,17 +11544,17 @@ 1 2 - 654690 + 654672 2 3 - 110778 + 110775 3 11 - 65493 + 65492 11 @@ -11079,27 +11575,27 @@ 1 2 - 493762 + 493748 2 3 - 183258 + 183253 3 4 - 51646 + 51645 4 8 - 64994 + 64993 8 22619 - 58882 + 58880 @@ -11115,17 +11611,17 @@ 1 2 - 5774822 + 5774663 2 21 - 472305 + 472292 21 2943 - 27445 + 27444 @@ -11141,12 +11637,12 @@ 1 2 - 5855660 + 5855499 2 2935 - 418911 + 418900 @@ -11162,12 +11658,12 @@ 1 2 - 5976045 + 5975880 2 2555 - 298527 + 298519 @@ -11183,12 +11679,12 @@ 1 2 - 6262222 + 6262050 2 5 - 12350 + 12349 @@ -11198,37 +11694,37 @@ var_def - 3766964 + 3766860 id - 3766964 + 3766860 var_specialized - 645 + 644 id - 645 + 644 var_decl_specifiers - 489894 + 489881 id - 489894 + 489881 name - 499 + 498 @@ -11242,7 +11738,7 @@ 1 2 - 489894 + 489881 @@ -11283,18 +11779,18 @@ is_structured_binding - 946 + 945 id - 946 + 945 var_requires - 387 + 386 id @@ -11302,7 +11798,7 @@ constraint - 387 + 386 @@ -11342,7 +11838,7 @@ 1 2 - 387 + 386 @@ -11352,19 +11848,19 @@ type_decls - 1633482 + 1633437 id - 1633482 + 1633437 type_id - 1614520 + 1614475 location - 1547404 + 1547361 @@ -11378,7 +11874,7 @@ 1 2 - 1633482 + 1633437 @@ -11394,7 +11890,7 @@ 1 2 - 1633482 + 1633437 @@ -11410,12 +11906,12 @@ 1 2 - 1598177 + 1598133 2 10 - 16342 + 16341 @@ -11431,7 +11927,7 @@ 1 2 - 1598302 + 1598258 2 @@ -11452,7 +11948,7 @@ 1 2 - 1525323 + 1525281 2 @@ -11473,12 +11969,12 @@ 1 2 - 1525448 + 1525406 2 64 - 21956 + 21955 @@ -11488,37 +11984,37 @@ type_def - 1095558 + 1095528 id - 1095558 + 1095528 type_decl_top - 673959 + 675275 type_decl - 673959 + 675275 type_requires - 7681 + 7671 id - 2044 + 2041 constraint - 7659 + 7649 @@ -11532,7 +12028,7 @@ 1 2 - 1011 + 1009 2 @@ -11542,12 +12038,12 @@ 5 6 - 602 + 601 6 13 - 172 + 171 13 @@ -11568,7 +12064,7 @@ 1 2 - 7638 + 7628 2 @@ -11583,23 +12079,23 @@ namespace_decls - 407775 + 407917 id - 407775 + 407917 namespace_id - 1844 + 1840 location - 407775 + 407917 bodylocation - 407775 + 407917 @@ -11613,7 +12109,7 @@ 1 2 - 407775 + 407917 @@ -11629,7 +12125,7 @@ 1 2 - 407775 + 407917 @@ -11645,7 +12141,7 @@ 1 2 - 407775 + 407917 @@ -11666,7 +12162,7 @@ 2 3 - 203 + 202 3 @@ -11681,36 +12177,36 @@ 15 34 - 146 + 145 35 62 - 154 + 145 63 - 87 - 146 + 81 + 145 - 90 + 86 144 - 154 + 162 - 146 + 151 264 - 146 + 145 270 1870 - 146 + 145 2205 - 12461 + 12488 32 @@ -11732,7 +12228,7 @@ 2 3 - 203 + 202 3 @@ -11747,36 +12243,36 @@ 15 34 - 146 + 145 35 62 - 154 + 145 63 - 87 - 146 + 81 + 145 - 90 + 86 144 - 154 + 162 - 146 + 151 264 - 146 + 145 270 1870 - 146 + 145 2205 - 12461 + 12488 32 @@ -11798,7 +12294,7 @@ 2 3 - 203 + 202 3 @@ -11813,36 +12309,36 @@ 15 34 - 146 + 145 35 62 - 154 + 145 63 - 87 - 146 + 81 + 145 - 90 + 86 144 - 154 + 162 - 146 + 151 264 - 146 + 145 270 1870 - 146 + 145 2205 - 12461 + 12488 32 @@ -11859,7 +12355,7 @@ 1 2 - 407775 + 407917 @@ -11875,7 +12371,7 @@ 1 2 - 407775 + 407917 @@ -11891,7 +12387,7 @@ 1 2 - 407775 + 407917 @@ -11907,7 +12403,7 @@ 1 2 - 407775 + 407917 @@ -11923,7 +12419,7 @@ 1 2 - 407775 + 407917 @@ -11939,7 +12435,7 @@ 1 2 - 407775 + 407917 @@ -11949,19 +12445,19 @@ usings - 271973 + 272030 id - 271973 + 272030 element_id - 58938 + 59042 location - 26849 + 26844 kind @@ -11979,7 +12475,7 @@ 1 2 - 271973 + 272030 @@ -11995,7 +12491,7 @@ 1 2 - 271973 + 272030 @@ -12011,7 +12507,7 @@ 1 2 - 271973 + 272030 @@ -12027,12 +12523,12 @@ 1 2 - 51206 + 51312 2 5 - 5386 + 5385 5 @@ -12053,12 +12549,12 @@ 1 2 - 51206 + 51312 2 5 - 5386 + 5385 5 @@ -12079,7 +12575,7 @@ 1 2 - 58938 + 59042 @@ -12095,17 +12591,17 @@ 1 2 - 21177 + 21173 2 4 - 2292 + 2302 4 132 - 1954 + 1943 145 @@ -12126,17 +12622,17 @@ 1 2 - 21177 + 21173 2 4 - 2292 + 2302 4 132 - 1954 + 1943 145 @@ -12157,7 +12653,7 @@ 1 2 - 26849 + 26844 @@ -12176,8 +12672,8 @@ 10 - 25356 - 25357 + 25367 + 25368 10 @@ -12197,8 +12693,8 @@ 10 - 5366 - 5367 + 5377 + 5378 10 @@ -12230,15 +12726,15 @@ using_container - 580049 + 580040 parent - 21874 + 21891 child - 271973 + 272030 @@ -12252,12 +12748,12 @@ 1 2 - 10372 + 10370 2 3 - 1616 + 1615 3 @@ -12267,7 +12763,7 @@ 6 7 - 2270 + 2291 7 @@ -12282,7 +12778,7 @@ 145 146 - 2619 + 2618 146 @@ -12303,27 +12799,27 @@ 1 2 - 96488 + 96583 2 3 - 120285 + 120259 3 4 - 20100 + 20096 4 5 - 26712 + 26706 5 65 - 8386 + 8384 @@ -12333,27 +12829,27 @@ static_asserts - 173262 + 172982 id - 173262 + 172982 condition - 173262 + 172982 message - 38764 + 38704 location - 22647 + 22616 enclosing - 6807 + 6819 @@ -12367,7 +12863,7 @@ 1 2 - 173262 + 172982 @@ -12383,7 +12879,7 @@ 1 2 - 173262 + 172982 @@ -12399,7 +12895,7 @@ 1 2 - 173262 + 172982 @@ -12415,7 +12911,7 @@ 1 2 - 173262 + 172982 @@ -12431,7 +12927,7 @@ 1 2 - 173262 + 172982 @@ -12447,7 +12943,7 @@ 1 2 - 173262 + 172982 @@ -12463,7 +12959,7 @@ 1 2 - 173262 + 172982 @@ -12479,7 +12975,7 @@ 1 2 - 173262 + 172982 @@ -12495,32 +12991,32 @@ 1 2 - 28504 + 28454 2 3 - 641 + 640 3 4 - 3623 + 3624 4 12 - 2087 + 2084 12 17 - 3135 + 3130 17 513 - 771 + 770 @@ -12536,32 +13032,32 @@ 1 2 - 28504 + 28454 2 3 - 641 + 640 3 4 - 3623 + 3624 4 12 - 2087 + 2084 12 17 - 3135 + 3130 17 513 - 771 + 770 @@ -12577,12 +13073,12 @@ 1 2 - 35921 + 35866 2 33 - 2843 + 2838 @@ -12598,27 +13094,27 @@ 1 2 - 30316 + 30262 2 3 - 349 + 348 3 4 - 3387 + 3389 4 12 - 1908 + 1905 12 43 - 2802 + 2797 @@ -12634,17 +13130,17 @@ 1 2 - 4281 + 4273 2 3 - 3728 + 3722 3 4 - 1738 + 1743 4 @@ -12654,17 +13150,17 @@ 5 6 - 4735 + 4727 6 13 - 430 + 429 14 15 - 2648 + 2643 16 @@ -12674,12 +13170,12 @@ 17 18 - 4394 + 4386 19 52 - 503 + 502 @@ -12695,17 +13191,17 @@ 1 2 - 4281 + 4273 2 3 - 3728 + 3722 3 4 - 1738 + 1743 4 @@ -12715,17 +13211,17 @@ 5 6 - 4735 + 4727 6 13 - 430 + 429 14 15 - 2648 + 2643 16 @@ -12735,12 +13231,12 @@ 17 18 - 4394 + 4386 19 52 - 503 + 502 @@ -12756,17 +13252,17 @@ 1 2 - 6953 + 6949 2 3 - 7676 + 7663 3 4 - 7782 + 7768 4 @@ -12787,32 +13283,32 @@ 1 2 - 5068 + 5060 2 3 - 8098 + 8084 3 4 - 1478 + 1483 4 5 - 4760 + 4751 5 13 - 495 + 494 13 14 - 2648 + 2643 16 @@ -12833,17 +13329,17 @@ 1 2 - 5702 + 5716 2 3 - 528 + 527 3 228 - 528 + 527 229 @@ -12864,17 +13360,17 @@ 1 2 - 5702 + 5716 2 3 - 528 + 527 3 228 - 528 + 527 229 @@ -12895,17 +13391,17 @@ 1 2 - 5856 + 5870 2 3 - 519 + 518 3 2936 - 430 + 429 @@ -12921,17 +13417,17 @@ 1 2 - 5840 + 5854 2 3 - 536 + 535 3 1929 - 430 + 429 @@ -12941,23 +13437,23 @@ params - 7060750 + 7060555 id - 7019832 + 7019638 function - 3404938 + 3404844 index - 7984 + 7983 type_id - 1220308 + 1220275 @@ -12971,7 +13467,7 @@ 1 2 - 7019832 + 7019638 @@ -12987,7 +13483,7 @@ 1 2 - 7019832 + 7019638 @@ -13003,12 +13499,12 @@ 1 2 - 6978913 + 6978721 2 3 - 40918 + 40917 @@ -13024,27 +13520,27 @@ 1 2 - 1473177 + 1473137 2 3 - 926272 + 926246 3 4 - 578717 + 578701 4 5 - 280813 + 280805 5 65 - 145958 + 145953 @@ -13060,27 +13556,27 @@ 1 2 - 1473177 + 1473137 2 3 - 926272 + 926246 3 4 - 578717 + 578701 4 5 - 280813 + 280805 5 65 - 145958 + 145953 @@ -13096,22 +13592,22 @@ 1 2 - 1781685 + 1781636 2 3 - 1030688 + 1030659 3 4 - 437499 + 437487 4 11 - 155064 + 155060 @@ -13127,12 +13623,12 @@ 2 3 - 3992 + 3991 6 7 - 1996 + 1995 14 @@ -13168,12 +13664,12 @@ 2 3 - 3992 + 3991 6 7 - 1996 + 1995 14 @@ -13209,12 +13705,12 @@ 1 2 - 3992 + 3991 2 3 - 1996 + 1995 4 @@ -13250,27 +13746,27 @@ 1 2 - 737524 + 737504 2 3 - 240394 + 240387 3 5 - 93188 + 93186 5 13 - 93812 + 93809 13 2574 - 55389 + 55387 @@ -13286,27 +13782,27 @@ 1 2 - 819610 + 819587 2 3 - 179640 + 179635 3 6 - 106162 + 106159 6 27 - 92190 + 92188 27 2562 - 22704 + 22703 @@ -13322,17 +13818,17 @@ 1 2 - 995134 + 995106 2 3 - 166791 + 166786 3 65 - 58383 + 58381 @@ -13342,15 +13838,15 @@ overrides - 159778 + 159497 new - 151069 + 150804 old - 17993 + 17961 @@ -13364,12 +13860,12 @@ 1 2 - 142369 + 142119 2 4 - 8700 + 8684 @@ -13385,32 +13881,32 @@ 1 2 - 9845 + 9828 2 3 - 2437 + 2432 3 4 - 1632 + 1629 4 6 - 1486 + 1483 6 18 - 1356 + 1354 18 230 - 1234 + 1232 @@ -13420,19 +13916,19 @@ membervariables - 1500125 + 1501943 id - 1497674 + 1499493 type_id - 456185 + 457553 name - 642156 + 642219 @@ -13446,7 +13942,7 @@ 1 2 - 1495333 + 1497151 2 @@ -13467,7 +13963,7 @@ 1 2 - 1497674 + 1499493 @@ -13483,12 +13979,12 @@ 1 2 - 338449 + 339380 2 3 - 72155 + 72592 3 @@ -13498,7 +13994,7 @@ 10 4445 - 10128 + 10129 @@ -13514,22 +14010,22 @@ 1 2 - 356039 + 356970 2 3 - 64313 + 64750 3 - 49 - 34253 + 57 + 34362 - 49 + 60 2186 - 1579 + 1470 @@ -13545,12 +14041,12 @@ 1 2 - 421496 + 421557 2 3 - 122419 + 122420 3 @@ -13559,7 +14055,7 @@ 5 - 656 + 664 40189 @@ -13576,17 +14072,17 @@ 1 2 - 524420 + 524482 2 3 - 73190 + 73191 3 - 660 - 44545 + 668 + 44546 @@ -13596,11 +14092,11 @@ globalvariables - 488148 + 488384 id - 488148 + 488384 type_id @@ -13608,7 +14104,7 @@ name - 112524 + 112521 @@ -13622,7 +14118,7 @@ 1 2 - 488148 + 488384 @@ -13638,7 +14134,7 @@ 1 2 - 488148 + 488384 @@ -13654,7 +14150,7 @@ 1 2 - 6986 + 6985 2 @@ -13679,7 +14175,7 @@ 152 2216 - 499 + 498 @@ -13720,7 +14216,7 @@ 125 228 - 499 + 498 @@ -13736,7 +14232,7 @@ 1 2 - 95309 + 95306 2 @@ -13762,12 +14258,12 @@ 1 2 - 96931 + 96928 2 3 - 15344 + 15343 3 @@ -13782,19 +14278,19 @@ localvariables - 726300 + 725806 id - 726300 + 725806 type_id - 53440 + 53403 name - 101634 + 101564 @@ -13808,7 +14304,7 @@ 1 2 - 726300 + 725806 @@ -13824,7 +14320,7 @@ 1 2 - 726300 + 725806 @@ -13840,37 +14336,37 @@ 1 2 - 28865 + 28845 2 3 - 7843 + 7838 3 4 - 4029 + 4027 4 6 - 4065 + 4063 6 12 - 4133 + 4131 12 162 - 4009 + 4007 162 19347 - 492 + 491 @@ -13886,22 +14382,22 @@ 1 2 - 38369 + 38343 2 3 - 6707 + 6702 3 5 - 4478 + 4474 5 3509 - 3885 + 3883 @@ -13917,32 +14413,32 @@ 1 2 - 62540 + 62497 2 3 - 16039 + 16028 3 4 - 6530 + 6526 4 8 - 8147 + 8142 8 134 - 7623 + 7618 134 7549 - 752 + 751 @@ -13958,22 +14454,22 @@ 1 2 - 84586 + 84528 2 3 - 8411 + 8406 3 15 - 7683 + 7678 15 1509 - 952 + 951 @@ -13983,11 +14479,11 @@ autoderivation - 229166 + 229160 var - 229166 + 229160 derivation_type @@ -14005,7 +14501,7 @@ 1 2 - 229166 + 229160 @@ -14051,15 +14547,15 @@ orphaned_variables - 44324 + 44320 var - 44324 + 44320 function - 41053 + 41050 @@ -14073,7 +14569,7 @@ 1 2 - 44324 + 44320 @@ -14089,7 +14585,7 @@ 1 2 - 40201 + 40198 2 @@ -14104,19 +14600,19 @@ enumconstants - 347816 + 347930 id - 347816 + 347930 parent - 41550 + 41551 index - 13940 + 13941 type_id @@ -14124,11 +14620,11 @@ name - 347435 + 347549 location - 320424 + 320538 @@ -14142,7 +14638,7 @@ 1 2 - 347816 + 347930 @@ -14158,7 +14654,7 @@ 1 2 - 347816 + 347930 @@ -14174,7 +14670,7 @@ 1 2 - 347816 + 347930 @@ -14190,7 +14686,7 @@ 1 2 - 347816 + 347930 @@ -14206,7 +14702,7 @@ 1 2 - 347816 + 347930 @@ -14354,7 +14850,7 @@ 1 2 - 41550 + 41551 @@ -14471,12 +14967,12 @@ 8 11 - 3811 + 3812 11 17 - 3212 + 3213 17 @@ -14614,7 +15110,7 @@ 1 2 - 13940 + 13941 @@ -14740,8 +15236,8 @@ 12 - 6387 - 6388 + 6389 + 6390 54 @@ -14788,8 +15284,8 @@ 12 - 6380 - 6381 + 6382 + 6383 54 @@ -14804,8 +15300,8 @@ 12 - 5884 - 5885 + 5886 + 5887 54 @@ -14822,7 +15318,7 @@ 1 2 - 347054 + 347167 2 @@ -14843,7 +15339,7 @@ 1 2 - 347054 + 347167 2 @@ -14864,7 +15360,7 @@ 1 2 - 347435 + 347549 @@ -14880,7 +15376,7 @@ 1 2 - 347435 + 347549 @@ -14896,7 +15392,7 @@ 1 2 - 347054 + 347167 2 @@ -14917,7 +15413,7 @@ 1 2 - 319389 + 319503 2 @@ -14938,7 +15434,7 @@ 1 2 - 320424 + 320538 @@ -14954,7 +15450,7 @@ 1 2 - 319389 + 319503 2 @@ -14975,7 +15471,7 @@ 1 2 - 320424 + 320538 @@ -14991,7 +15487,7 @@ 1 2 - 319389 + 319503 2 @@ -15428,7 +15924,7 @@ 1 2 - 499 + 498 2 @@ -15683,15 +16179,15 @@ derivedtypes - 3030936 + 3030853 id - 3030936 + 3030853 name - 1460578 + 1460537 kind @@ -15699,7 +16195,7 @@ type_id - 1946730 + 1946677 @@ -15713,7 +16209,7 @@ 1 2 - 3030936 + 3030853 @@ -15729,7 +16225,7 @@ 1 2 - 3030936 + 3030853 @@ -15745,7 +16241,7 @@ 1 2 - 3030936 + 3030853 @@ -15761,12 +16257,12 @@ 1 2 - 1344061 + 1344024 2 28 - 109905 + 109902 29 @@ -15787,7 +16283,7 @@ 1 2 - 1460578 + 1460537 @@ -15803,12 +16299,12 @@ 1 2 - 1344185 + 1344148 2 28 - 109780 + 109777 29 @@ -15952,22 +16448,22 @@ 1 2 - 1317489 + 1317453 2 3 - 375873 + 375862 3 4 - 123253 + 123250 4 137 - 130114 + 130111 @@ -15983,22 +16479,22 @@ 1 2 - 1318986 + 1318950 2 3 - 375873 + 375862 3 4 - 121756 + 121753 4 137 - 130114 + 130111 @@ -16014,22 +16510,22 @@ 1 2 - 1319360 + 1319324 2 3 - 376496 + 376486 3 4 - 123502 + 123499 4 6 - 127370 + 127366 @@ -16039,11 +16535,11 @@ pointerishsize - 2247379 + 2247317 id - 2247379 + 2247317 size @@ -16065,7 +16561,7 @@ 1 2 - 2247379 + 2247317 @@ -16081,7 +16577,7 @@ 1 2 - 2247379 + 2247317 @@ -16165,15 +16661,15 @@ arraysizes - 80588 + 80586 id - 80588 + 80586 num_elements - 17839 + 17838 bytesize @@ -16195,7 +16691,7 @@ 1 2 - 80588 + 80586 @@ -16211,7 +16707,7 @@ 1 2 - 80588 + 80586 @@ -16227,7 +16723,7 @@ 1 2 - 80588 + 80586 @@ -16248,7 +16744,7 @@ 2 3 - 10853 + 10852 3 @@ -16258,12 +16754,12 @@ 4 5 - 3493 + 3492 5 9 - 1497 + 1496 9 @@ -16294,12 +16790,12 @@ 2 3 - 3992 + 3991 3 5 - 998 + 997 5 @@ -16325,7 +16821,7 @@ 2 3 - 3992 + 3991 3 @@ -16361,7 +16857,7 @@ 3 4 - 499 + 498 4 @@ -16371,7 +16867,7 @@ 5 7 - 1497 + 1496 7 @@ -16381,7 +16877,7 @@ 24 45 - 499 + 498 @@ -16428,7 +16924,7 @@ 1 2 - 14845 + 14844 2 @@ -16604,15 +17100,15 @@ typedefbase - 1762360 + 1762011 id - 1762360 + 1762011 type_id - 838037 + 837877 @@ -16626,7 +17122,7 @@ 1 2 - 1762360 + 1762011 @@ -16642,22 +17138,22 @@ 1 2 - 662552 + 662420 2 3 - 80940 + 80933 3 6 - 64177 + 64163 6 4526 - 30367 + 30360 @@ -16667,15 +17163,15 @@ decltypes - 814475 + 814485 id - 27563 + 27564 expr - 814475 + 814485 kind @@ -16757,7 +17253,7 @@ 1 2 - 27563 + 27564 @@ -16773,7 +17269,7 @@ 1 2 - 27563 + 27564 @@ -16789,7 +17285,7 @@ 1 2 - 27563 + 27564 @@ -16805,7 +17301,7 @@ 1 2 - 814475 + 814485 @@ -16821,7 +17317,7 @@ 1 2 - 814475 + 814485 @@ -16837,7 +17333,7 @@ 1 2 - 814475 + 814485 @@ -16853,7 +17349,7 @@ 1 2 - 814475 + 814485 @@ -17115,23 +17611,23 @@ type_operators - 7961 + 7950 id - 7961 + 7950 arg_type - 7186 + 7177 kind - 86 + 85 base_type - 5250 + 5243 @@ -17145,7 +17641,7 @@ 1 2 - 7961 + 7950 @@ -17161,7 +17657,7 @@ 1 2 - 7961 + 7950 @@ -17177,7 +17673,7 @@ 1 2 - 7961 + 7950 @@ -17193,12 +17689,12 @@ 1 2 - 6411 + 6403 2 3 - 774 + 773 @@ -17214,12 +17710,12 @@ 1 2 - 6411 + 6403 2 3 - 774 + 773 @@ -17235,7 +17731,7 @@ 1 2 - 7164 + 7155 2 @@ -17349,17 +17845,17 @@ 1 2 - 3636 + 3631 2 3 - 903 + 902 3 4 - 344 + 343 4 @@ -17380,12 +17876,12 @@ 1 2 - 3786 + 3781 2 3 - 989 + 988 3 @@ -17411,12 +17907,12 @@ 1 2 - 4088 + 4082 2 3 - 1140 + 1138 3 @@ -17431,15 +17927,15 @@ usertypes - 4151710 + 4150876 id - 4151710 + 4150876 name - 918534 + 918367 kind @@ -17457,7 +17953,7 @@ 1 2 - 4151710 + 4150876 @@ -17473,7 +17969,7 @@ 1 2 - 4151710 + 4150876 @@ -17489,22 +17985,22 @@ 1 2 - 654261 + 654151 2 3 - 158669 + 158635 3 8 - 70567 + 70552 8 - 32669 - 35035 + 32672 + 35028 @@ -17520,12 +18016,12 @@ 1 2 - 866789 + 866633 2 10 - 51745 + 51734 @@ -17589,13 +18085,13 @@ 10 - 92771 - 92772 + 92774 + 92775 10 - 166851 - 166852 + 166854 + 166855 10 @@ -17665,8 +18161,8 @@ 10 - 57608 - 57609 + 57611 + 57612 10 @@ -17677,11 +18173,11 @@ usertypesize - 1363817 + 1363554 id - 1363817 + 1363554 size @@ -17703,7 +18199,7 @@ 1 2 - 1363817 + 1363554 @@ -17719,7 +18215,7 @@ 1 2 - 1363817 + 1363554 @@ -17779,7 +18275,7 @@ 1839 - 99774 + 99777 52 @@ -17796,7 +18292,7 @@ 1 2 - 1204 + 1203 2 @@ -17855,8 +18351,8 @@ 10 - 114969 - 114970 + 114972 + 114973 10 @@ -17913,26 +18409,26 @@ usertype_final - 11477 + 11476 id - 11477 + 11476 usertype_uuid - 47716 + 47827 id - 47716 + 47827 uuid - 47237 + 47283 @@ -17946,7 +18442,7 @@ 1 2 - 47716 + 47827 @@ -17962,12 +18458,12 @@ 1 2 - 46758 + 46740 2 3 - 479 + 543 @@ -17977,11 +18473,11 @@ usertype_alias_kind - 1762360 + 1762011 id - 1762360 + 1762011 alias_kind @@ -17999,7 +18495,7 @@ 1 2 - 1762360 + 1762011 @@ -18018,8 +18514,8 @@ 10 - 129944 - 129945 + 129947 + 129948 10 @@ -18030,26 +18526,26 @@ nontype_template_parameters - 766287 + 766231 id - 766287 + 766231 type_template_type_constraint - 27153 + 27118 id - 13383 + 13365 constraint - 26013 + 25979 @@ -18063,22 +18559,22 @@ 1 2 - 10220 + 10206 2 3 - 903 + 902 3 5 - 1032 + 1031 5 14 - 1118 + 1117 14 @@ -18099,12 +18595,12 @@ 1 2 - 24873 + 24840 2 3 - 1140 + 1138 @@ -18114,15 +18610,15 @@ mangled_name - 7852416 + 7853946 id - 7852416 + 7853946 mangled_name - 6364268 + 6364342 is_complete @@ -18140,7 +18636,7 @@ 1 2 - 7852416 + 7853946 @@ -18156,7 +18652,7 @@ 1 2 - 7852416 + 7853946 @@ -18172,12 +18668,12 @@ 1 2 - 6036174 + 6036258 2 1120 - 328093 + 328084 @@ -18193,7 +18689,7 @@ 1 2 - 6364268 + 6364342 @@ -18212,8 +18708,8 @@ 124 - 62939 - 62940 + 62953 + 62954 124 @@ -18233,8 +18729,8 @@ 124 - 51010 - 51011 + 51012 + 51013 124 @@ -18245,59 +18741,59 @@ is_pod_class - 593760 + 593785 id - 593760 + 593785 is_standard_layout_class - 1124418 + 1124207 id - 1124418 + 1124207 is_complete - 1346294 + 1346034 id - 1346294 + 1346034 is_class_template - 232173 + 232123 id - 232173 + 232123 class_instantiation - 1126076 + 1125875 to - 1123034 + 1122823 from - 71803 + 71788 @@ -18311,12 +18807,12 @@ 1 2 - 1120901 + 1120680 2 8 - 2133 + 2143 @@ -18332,47 +18828,47 @@ 1 2 - 20501 + 20497 2 3 - 12886 + 12883 3 4 - 7108 + 7107 4 5 - 4658 + 4657 5 7 - 6073 + 6061 7 10 - 5714 + 5723 10 17 - 5904 + 5913 17 51 - 5397 + 5385 51 4223 - 3559 + 3558 @@ -18382,11 +18878,11 @@ class_template_argument - 2898672 + 2898088 type_id - 1367112 + 1366848 index @@ -18394,7 +18890,7 @@ arg_type - 822099 + 821942 @@ -18408,27 +18904,27 @@ 1 2 - 579362 + 579258 2 3 - 410289 + 410210 3 4 - 251049 + 250994 4 7 - 103100 + 103078 7 113 - 23311 + 23306 @@ -18444,22 +18940,22 @@ 1 2 - 607902 + 607792 2 3 - 424294 + 424213 3 4 - 251883 + 251829 4 113 - 83031 + 83013 @@ -18504,7 +19000,7 @@ 11968 - 129429 + 129432 42 @@ -18550,7 +19046,7 @@ 10413 - 44533 + 44535 31 @@ -18567,27 +19063,27 @@ 1 2 - 513716 + 513626 2 3 - 167647 + 167611 3 5 - 75088 + 75072 5 47 - 61737 + 61724 47 - 12618 - 3908 + 12619 + 3907 @@ -18603,17 +19099,17 @@ 1 2 - 723815 + 723679 2 3 - 79915 + 79898 3 22 - 18368 + 18364 @@ -18623,11 +19119,11 @@ class_template_argument_value - 510086 + 510048 type_id - 205812 + 205797 index @@ -18635,7 +19131,7 @@ arg_value - 509949 + 509912 @@ -18649,12 +19145,12 @@ 1 2 - 155799 + 155787 2 3 - 43370 + 43367 3 @@ -18675,17 +19171,17 @@ 1 2 - 147929 + 147918 2 3 - 40474 + 40471 3 45 - 15535 + 15534 45 @@ -18818,7 +19314,7 @@ 1 2 - 509813 + 509776 2 @@ -18839,7 +19335,7 @@ 1 2 - 509949 + 509912 @@ -18849,15 +19345,15 @@ is_proxy_class_for - 48439 + 48429 id - 48439 + 48429 templ_param_id - 45767 + 45757 @@ -18871,7 +19367,7 @@ 1 2 - 48439 + 48429 @@ -18887,7 +19383,7 @@ 1 2 - 45048 + 45039 2 @@ -18902,19 +19398,19 @@ type_mentions - 5903894 + 5907627 id - 5903894 + 5907627 type_id - 276913 + 277788 location - 5847585 + 5851317 kind @@ -18932,7 +19428,7 @@ 1 2 - 5903894 + 5907627 @@ -18948,7 +19444,7 @@ 1 2 - 5903894 + 5907627 @@ -18964,7 +19460,7 @@ 1 2 - 5903894 + 5907627 @@ -18980,22 +19476,22 @@ 1 2 - 136795 + 137233 2 3 - 31203 + 31204 3 4 - 11272 + 11653 4 5 - 14921 + 14975 5 @@ -19010,12 +19506,12 @@ 12 28 - 21074 + 21075 28 8941 - 19876 + 19877 @@ -19031,22 +19527,22 @@ 1 2 - 136795 + 137233 2 3 - 31203 + 31204 3 4 - 11272 + 11653 4 5 - 14921 + 14975 5 @@ -19061,12 +19557,12 @@ 12 28 - 21074 + 21075 28 8941 - 19876 + 19877 @@ -19082,7 +19578,7 @@ 1 2 - 276913 + 277788 @@ -19098,12 +19594,12 @@ 1 2 - 5801896 + 5805627 2 4 - 45689 + 45690 @@ -19119,12 +19615,12 @@ 1 2 - 5801896 + 5805627 2 4 - 45689 + 45690 @@ -19140,7 +19636,7 @@ 1 2 - 5847585 + 5851317 @@ -19154,8 +19650,8 @@ 12 - 108414 - 108415 + 108481 + 108482 54 @@ -19170,8 +19666,8 @@ 12 - 5085 - 5086 + 5101 + 5102 54 @@ -19186,8 +19682,8 @@ 12 - 107380 - 107381 + 107447 + 107448 54 @@ -19198,26 +19694,26 @@ is_function_template - 1331336 + 1331300 id - 1331336 + 1331300 function_instantiation - 973633 + 973767 to - 973633 + 973767 from - 182645 + 182700 @@ -19231,7 +19727,7 @@ 1 2 - 973633 + 973767 @@ -19247,22 +19743,22 @@ 1 2 - 110589 + 110581 2 3 - 42791 + 42787 3 9 - 14377 + 14444 9 104 - 13729 + 13728 119 @@ -19277,11 +19773,11 @@ function_template_argument - 2484813 + 2484632 function_id - 1453296 + 1453189 index @@ -19289,7 +19785,7 @@ arg_type - 298004 + 297982 @@ -19303,22 +19799,22 @@ 1 2 - 783015 + 782958 2 3 - 413158 + 413128 3 4 - 171811 + 171799 4 15 - 85309 + 85303 @@ -19334,22 +19830,22 @@ 1 2 - 802162 + 802104 2 3 - 411251 + 411221 3 4 - 169631 + 169618 4 9 - 70250 + 70245 @@ -19487,37 +19983,37 @@ 1 2 - 174775 + 174762 2 3 - 26335 + 26333 3 4 - 19998 + 19997 4 6 - 22656 + 22654 6 11 - 23235 + 23233 11 76 - 23371 + 23369 79 2452 - 7631 + 7630 @@ -19533,17 +20029,17 @@ 1 2 - 256814 + 256795 2 3 - 32127 + 32125 3 15 - 9062 + 9061 @@ -19553,11 +20049,11 @@ function_template_argument_value - 452781 + 452748 function_id - 196784 + 196770 index @@ -19565,7 +20061,7 @@ arg_value - 450090 + 450057 @@ -19579,17 +20075,17 @@ 1 2 - 151404 + 151393 2 3 - 42893 + 42890 3 8 - 2487 + 2486 @@ -19605,17 +20101,17 @@ 1 2 - 144488 + 144477 2 3 - 36692 + 36690 3 54 - 14854 + 14853 54 @@ -19758,7 +20254,7 @@ 1 2 - 447398 + 447365 2 @@ -19779,7 +20275,7 @@ 1 2 - 450090 + 450057 @@ -19789,26 +20285,26 @@ is_variable_template - 58632 + 58631 id - 58632 + 58631 variable_instantiation - 422779 + 423017 to - 422779 + 423017 from - 35304 + 35303 @@ -19822,7 +20318,7 @@ 1 2 - 422779 + 423017 @@ -19853,7 +20349,7 @@ 4 6 - 2994 + 2993 6 @@ -19883,19 +20379,19 @@ variable_template_argument - 768462 + 768940 variable_id - 400947 + 401186 index - 1996 + 1995 arg_type - 256112 + 256355 @@ -19909,17 +20405,17 @@ 1 2 - 156561 + 156557 2 3 - 189745 + 189989 3 4 - 36427 + 36426 4 @@ -19940,22 +20436,22 @@ 1 2 - 171407 + 171402 2 3 - 180014 + 180259 3 4 - 33682 + 33681 4 17 - 15843 + 15842 @@ -19999,13 +20495,13 @@ 124 - 1959 - 1960 + 1961 + 1962 124 - 3214 - 3215 + 3216 + 3217 124 @@ -20050,8 +20546,8 @@ 124 - 745 - 746 + 747 + 748 124 @@ -20073,12 +20569,12 @@ 1 2 - 175399 + 175519 2 3 - 44660 + 44784 3 @@ -20088,7 +20584,7 @@ 6 206 - 14471 + 14470 @@ -20104,12 +20600,12 @@ 1 2 - 227794 + 228037 2 3 - 24700 + 24699 3 @@ -20124,19 +20620,19 @@ variable_template_argument_value - 19960 + 19959 variable_id - 14845 + 14844 index - 499 + 498 arg_value - 19960 + 19959 @@ -20150,12 +20646,12 @@ 1 2 - 13348 + 13347 2 3 - 1497 + 1496 @@ -20171,12 +20667,12 @@ 1 2 - 10479 + 10478 2 3 - 3992 + 3991 4 @@ -20259,7 +20755,7 @@ 1 2 - 19960 + 19959 @@ -20275,7 +20771,7 @@ 1 2 - 19960 + 19959 @@ -20289,7 +20785,7 @@ to - 4990 + 4989 from @@ -20353,11 +20849,11 @@ template_template_argument - 9675 + 9673 type_id - 6115 + 6114 index @@ -20365,7 +20861,7 @@ arg_type - 9083 + 9081 @@ -20379,7 +20875,7 @@ 1 2 - 5017 + 5016 2 @@ -20410,7 +20906,7 @@ 1 2 - 5038 + 5037 2 @@ -20563,7 +21059,7 @@ 1 2 - 9052 + 9050 3 @@ -20584,7 +21080,7 @@ 1 2 - 9062 + 9060 2 @@ -20735,19 +21231,19 @@ concept_templates - 3614 + 3610 concept_id - 3614 + 3610 name - 3614 + 3610 location - 3614 + 3610 @@ -20761,7 +21257,7 @@ 1 2 - 3614 + 3610 @@ -20777,7 +21273,7 @@ 1 2 - 3614 + 3610 @@ -20793,7 +21289,7 @@ 1 2 - 3614 + 3610 @@ -20809,7 +21305,7 @@ 1 2 - 3614 + 3610 @@ -20825,7 +21321,7 @@ 1 2 - 3614 + 3610 @@ -20841,7 +21337,7 @@ 1 2 - 3614 + 3610 @@ -20851,15 +21347,15 @@ concept_instantiation - 90433 + 90315 to - 90433 + 90315 from - 3442 + 3438 @@ -20873,7 +21369,7 @@ 1 2 - 90433 + 90315 @@ -20904,12 +21400,12 @@ 4 5 - 129 + 128 5 6 - 301 + 300 6 @@ -20929,37 +21425,37 @@ 12 15 - 215 + 214 15 19 - 215 + 214 19 25 - 258 + 257 25 37 - 258 + 257 38 49 - 258 + 257 50 72 - 258 + 257 78 387 - 215 + 214 @@ -20969,30 +21465,30 @@ is_type_constraint - 36900 + 36852 concept_id - 36900 + 36852 concept_template_argument - 113047 + 112899 concept_id - 76383 + 76283 index - 129 + 128 arg_type - 21430 + 21402 @@ -21006,17 +21502,17 @@ 1 2 - 46475 + 46414 2 3 - 24679 + 24647 3 7 - 5228 + 5221 @@ -21032,17 +21528,17 @@ 1 2 - 50090 + 50024 2 3 - 22377 + 22347 3 7 - 3916 + 3910 @@ -21140,42 +21636,42 @@ 1 2 - 10392 + 10378 2 3 - 2969 + 2965 3 4 - 1054 + 1052 4 5 - 1355 + 1353 5 6 - 1161 + 1160 6 9 - 1613 + 1611 9 14 - 1979 + 1976 14 259 - 903 + 902 @@ -21191,17 +21687,17 @@ 1 2 - 18030 + 18007 2 3 - 3270 + 3266 3 4 - 129 + 128 @@ -21342,15 +21838,15 @@ routinetypes - 604322 + 604482 id - 604322 + 604482 return_type - 283865 + 283845 @@ -21364,7 +21860,7 @@ 1 2 - 604322 + 604482 @@ -21380,17 +21876,17 @@ 1 2 - 234226 + 234073 2 3 - 35091 + 35225 3 - 4676 - 14547 + 4677 + 14546 @@ -21400,11 +21896,11 @@ routinetypeargs - 1176651 + 1178519 routine - 415070 + 416002 index @@ -21412,7 +21908,7 @@ type_id - 111582 + 112073 @@ -21426,22 +21922,22 @@ 1 2 - 82502 + 82939 2 3 - 126013 + 126069 3 4 - 107443 + 107880 4 5 - 49283 + 49284 5 @@ -21451,7 +21947,7 @@ 7 19 - 16663 + 16664 @@ -21467,27 +21963,27 @@ 1 2 - 88492 + 88929 2 3 - 138647 + 138703 3 4 - 114196 + 114633 4 5 - 40733 + 40734 5 10 - 32891 + 32892 10 @@ -21571,18 +22067,18 @@ 54 - 3793 - 3794 + 3801 + 3802 54 - 6107 - 6108 + 6116 + 6117 54 - 7622 - 7623 + 7639 + 7640 54 @@ -21662,13 +22158,13 @@ 54 - 787 - 788 + 788 + 789 54 - 1174 - 1175 + 1182 + 1183 54 @@ -21685,17 +22181,17 @@ 1 2 - 33218 + 33273 2 3 - 15193 + 15574 3 4 - 13233 + 13287 4 @@ -21715,7 +22211,7 @@ 8 13 - 9529 + 9530 13 @@ -21724,7 +22220,7 @@ 26 - 918 + 926 6099 @@ -21741,7 +22237,7 @@ 1 2 - 78908 + 79399 2 @@ -21766,19 +22262,19 @@ ptrtomembers - 9728 + 9725 id - 9728 + 9725 type_id - 7974 + 7972 class_id - 4869 + 4868 @@ -21792,7 +22288,7 @@ 1 2 - 9728 + 9725 @@ -21808,7 +22304,7 @@ 1 2 - 9728 + 9725 @@ -21824,7 +22320,7 @@ 1 2 - 7752 + 7751 2 @@ -21845,7 +22341,7 @@ 1 2 - 7752 + 7751 2 @@ -21866,7 +22362,7 @@ 1 2 - 3897 + 3896 2 @@ -21897,7 +22393,7 @@ 1 2 - 3897 + 3896 2 @@ -21970,15 +22466,15 @@ typespecifiers - 854272 + 854142 type_id - 849128 + 846657 spec_id - 95 + 1621 @@ -21992,12 +22488,12 @@ 1 2 - 843984 + 839173 2 3 - 5143 + 7484 @@ -22011,49 +22507,69 @@ 12 - 168 - 169 - 10 + 1 + 2 + 124 - 215 - 216 - 10 + 2 + 3 + 124 - 225 - 226 - 10 + 16 + 17 + 124 - 533 - 534 - 10 + 17 + 18 + 124 - 821 - 822 - 10 + 24 + 25 + 124 - 1568 - 1569 - 10 + 44 + 45 + 124 - 4195 - 4196 - 10 + 49 + 50 + 124 - 18295 - 18296 - 10 + 51 + 52 + 124 - 54858 - 54859 - 10 + 112 + 113 + 124 + + + 199 + 200 + 124 + + + 325 + 326 + 124 + + + 545 + 546 + 124 + + + 5462 + 5463 + 124 @@ -22063,11 +22579,11 @@ funspecifiers - 9714441 + 9714174 func_id - 4008855 + 4008745 spec_id @@ -22085,27 +22601,27 @@ 1 2 - 1527070 + 1527028 2 3 - 506237 + 506223 3 4 - 1036925 + 1036897 4 5 - 692863 + 692844 5 8 - 245758 + 245751 @@ -22221,11 +22737,11 @@ varspecifiers - 3075347 + 3075512 var_id - 2314869 + 2315054 spec_id @@ -22243,17 +22759,17 @@ 1 2 - 1658058 + 1658261 2 3 - 553642 + 553627 3 5 - 103168 + 103165 @@ -22282,8 +22798,8 @@ 124 - 1332 - 1333 + 1334 + 1335 124 @@ -22319,15 +22835,15 @@ explicit_specifier_exprs - 41292 + 41291 func_id - 41292 + 41291 constant - 41292 + 41291 @@ -22341,7 +22857,7 @@ 1 2 - 41292 + 41291 @@ -22357,7 +22873,7 @@ 1 2 - 41292 + 41291 @@ -22367,11 +22883,11 @@ attributes - 653817 + 653799 id - 653817 + 653799 kind @@ -22387,7 +22903,7 @@ location - 647704 + 647686 @@ -22401,7 +22917,7 @@ 1 2 - 653817 + 653799 @@ -22417,7 +22933,7 @@ 1 2 - 653817 + 653799 @@ -22433,7 +22949,7 @@ 1 2 - 653817 + 653799 @@ -22449,7 +22965,7 @@ 1 2 - 653817 + 653799 @@ -22852,7 +23368,7 @@ 1 2 - 641841 + 641823 2 @@ -22873,7 +23389,7 @@ 1 2 - 647704 + 647686 @@ -22889,7 +23405,7 @@ 1 2 - 642589 + 642571 2 @@ -22910,7 +23426,7 @@ 1 2 - 647704 + 647686 @@ -22920,11 +23436,11 @@ attribute_args - 82562 + 82563 id - 82562 + 82563 kind @@ -22932,7 +23448,7 @@ attribute - 71259 + 71260 index @@ -22940,7 +23456,7 @@ location - 57184 + 57185 @@ -22954,7 +23470,7 @@ 1 2 - 82562 + 82563 @@ -22970,7 +23486,7 @@ 1 2 - 82562 + 82563 @@ -22986,7 +23502,7 @@ 1 2 - 82562 + 82563 @@ -23002,7 +23518,7 @@ 1 2 - 82562 + 82563 @@ -23122,7 +23638,7 @@ 1 2 - 65790 + 65791 2 @@ -23148,7 +23664,7 @@ 1 2 - 69743 + 69744 2 @@ -23169,7 +23685,7 @@ 1 2 - 68215 + 68216 2 @@ -23190,7 +23706,7 @@ 1 2 - 68747 + 68748 2 @@ -23375,7 +23891,7 @@ 1 2 - 41506 + 41507 2 @@ -23448,7 +23964,7 @@ 1 2 - 56935 + 56936 2 @@ -23463,11 +23979,11 @@ attribute_arg_value - 16693 + 16692 arg - 16693 + 16692 value @@ -23485,7 +24001,7 @@ 1 2 - 16693 + 16692 @@ -23556,15 +24072,15 @@ attribute_arg_type - 460 + 459 arg - 460 + 459 type_id - 84 + 83 @@ -23578,7 +24094,7 @@ 1 2 - 460 + 459 @@ -23594,22 +24110,22 @@ 1 2 - 72 + 71 2 3 - 4 + 3 35 36 - 4 + 3 60 61 - 4 + 3 @@ -23619,15 +24135,15 @@ attribute_arg_constant - 71856 + 71883 arg - 71856 + 71883 constant - 71856 + 71883 @@ -23641,7 +24157,7 @@ 1 2 - 71856 + 71883 @@ -23657,7 +24173,7 @@ 1 2 - 71856 + 71883 @@ -23768,15 +24284,15 @@ typeattributes - 96307 + 96304 type_id - 94560 + 94558 spec_id - 32435 + 32434 @@ -23790,7 +24306,7 @@ 1 2 - 92814 + 92811 2 @@ -23811,17 +24327,17 @@ 1 2 - 27944 + 27943 2 9 - 2495 + 2494 11 58 - 1996 + 1995 @@ -23831,15 +24347,15 @@ funcattributes - 843562 + 843539 func_id - 799026 + 799004 spec_id - 616766 + 616749 @@ -23853,12 +24369,12 @@ 1 2 - 758981 + 758960 2 7 - 40044 + 40043 @@ -23874,12 +24390,12 @@ 1 2 - 571731 + 571715 2 213 - 45034 + 45033 @@ -23952,7 +24468,7 @@ namespaceattributes - 5996 + 5995 namespace_id @@ -23960,7 +24476,7 @@ spec_id - 5996 + 5995 @@ -24000,7 +24516,7 @@ 1 2 - 5996 + 5995 @@ -24010,15 +24526,15 @@ stmtattributes - 2216 + 2213 stmt_id - 2216 + 2213 spec_id - 559 + 558 @@ -24032,7 +24548,7 @@ 1 2 - 2216 + 2213 @@ -24048,7 +24564,7 @@ 1 2 - 215 + 214 2 @@ -24058,7 +24574,7 @@ 3 4 - 43 + 42 9 @@ -24068,7 +24584,7 @@ 13 16 - 43 + 42 @@ -24078,15 +24594,15 @@ unspecifiedtype - 7172900 + 7174200 type_id - 7172900 + 7174200 unspecified_type_id - 3962323 + 3962838 @@ -24100,7 +24616,7 @@ 1 2 - 7172900 + 7174200 @@ -24116,22 +24632,22 @@ 1 2 - 2480537 + 2481093 2 3 - 1116765 + 1116610 3 7 - 302644 + 302636 7 537 - 62375 + 62498 @@ -24141,19 +24657,19 @@ member - 4189618 + 4189503 parent - 543288 + 543273 index - 29690 + 29689 child - 4185003 + 4184887 @@ -24167,52 +24683,52 @@ 1 2 - 128991 + 128988 2 3 - 83333 + 83331 3 4 - 32435 + 32434 4 5 - 44910 + 44908 5 6 - 42415 + 42413 6 7 - 33932 + 33931 7 9 - 42290 + 42289 9 13 - 41167 + 41166 13 18 - 41292 + 41291 18 42 - 40793 + 40792 42 @@ -24233,57 +24749,57 @@ 1 2 - 128742 + 128738 2 3 - 83458 + 83455 3 4 - 32185 + 32184 4 5 - 45034 + 45033 5 6 - 42539 + 42538 6 7 - 32809 + 32808 7 9 - 42664 + 42663 9 13 - 41541 + 41540 13 18 - 41417 + 41416 18 42 - 40918 + 40917 42 265 - 11976 + 11975 @@ -24299,7 +24815,7 @@ 1 2 - 6487 + 6486 2 @@ -24329,7 +24845,7 @@ 26 36 - 2495 + 2494 36 @@ -24365,7 +24881,7 @@ 1 2 - 5489 + 5488 2 @@ -24431,7 +24947,7 @@ 1 2 - 4185003 + 4184887 @@ -24447,7 +24963,7 @@ 1 2 - 4180387 + 4180272 2 @@ -24462,15 +24978,15 @@ enclosingfunction - 114813 + 114805 child - 114813 + 114805 parent - 71341 + 71335 @@ -24484,7 +25000,7 @@ 1 2 - 114813 + 114805 @@ -24500,7 +25016,7 @@ 1 2 - 49332 + 49328 2 @@ -24510,12 +25026,12 @@ 3 4 - 15365 + 15364 4 37 - 2010 + 2009 @@ -24525,15 +25041,15 @@ derivations - 476902 + 476867 derivation - 476902 + 476867 sub - 455166 + 455133 index @@ -24541,11 +25057,11 @@ super - 235555 + 235538 location - 35398 + 35395 @@ -24559,7 +25075,7 @@ 1 2 - 476902 + 476867 @@ -24575,7 +25091,7 @@ 1 2 - 476902 + 476867 @@ -24591,7 +25107,7 @@ 1 2 - 476902 + 476867 @@ -24607,7 +25123,7 @@ 1 2 - 476902 + 476867 @@ -24623,12 +25139,12 @@ 1 2 - 438642 + 438610 2 9 - 16523 + 16522 @@ -24644,12 +25160,12 @@ 1 2 - 438642 + 438610 2 8 - 16523 + 16522 @@ -24665,12 +25181,12 @@ 1 2 - 438642 + 438610 2 9 - 16523 + 16522 @@ -24686,12 +25202,12 @@ 1 2 - 438642 + 438610 2 8 - 16523 + 16522 @@ -24846,7 +25362,7 @@ 1 2 - 225743 + 225726 2 @@ -24867,7 +25383,7 @@ 1 2 - 225743 + 225726 2 @@ -24888,7 +25404,7 @@ 1 2 - 235112 + 235095 2 @@ -24909,7 +25425,7 @@ 1 2 - 230206 + 230189 2 @@ -24930,7 +25446,7 @@ 1 2 - 26505 + 26504 2 @@ -24966,7 +25482,7 @@ 1 2 - 26505 + 26504 2 @@ -25002,7 +25518,7 @@ 1 2 - 35398 + 35395 @@ -25018,7 +25534,7 @@ 1 2 - 28720 + 28718 2 @@ -25043,11 +25559,11 @@ derspecifiers - 478674 + 478639 der_id - 476459 + 476424 spec_id @@ -25065,7 +25581,7 @@ 1 2 - 474245 + 474210 2 @@ -25111,11 +25627,11 @@ direct_base_offsets - 449987 + 449955 der_id - 449987 + 449955 offset @@ -25133,7 +25649,7 @@ 1 2 - 449987 + 449955 @@ -25330,23 +25846,23 @@ frienddecls - 700465 + 699835 id - 700465 + 699835 type_id - 42416 + 42413 decl_id - 77848 + 77876 location - 6098 + 6097 @@ -25360,7 +25876,7 @@ 1 2 - 700465 + 699835 @@ -25376,7 +25892,7 @@ 1 2 - 700465 + 699835 @@ -25392,7 +25908,7 @@ 1 2 - 700465 + 699835 @@ -25408,12 +25924,12 @@ 1 2 - 6166 + 6200 2 3 - 13968 + 14001 3 @@ -25423,12 +25939,12 @@ 7 12 - 3441 + 3440 12 20 - 3645 + 3577 20 @@ -25464,12 +25980,12 @@ 1 2 - 6166 + 6200 2 3 - 13968 + 14001 3 @@ -25479,12 +25995,12 @@ 7 12 - 3441 + 3440 12 20 - 3645 + 3577 20 @@ -25520,7 +26036,7 @@ 1 2 - 41053 + 41050 2 @@ -25541,32 +26057,32 @@ 1 2 - 48071 + 48170 2 3 - 5962 + 5893 3 8 - 5996 + 5995 8 15 - 6064 + 5995 15 40 - 6064 + 6097 40 164 - 5689 + 5723 @@ -25582,32 +26098,32 @@ 1 2 - 48071 + 48170 2 3 - 5962 + 5893 3 8 - 5996 + 5995 8 15 - 6064 + 5995 15 40 - 6064 + 6097 40 164 - 5689 + 5723 @@ -25623,7 +26139,7 @@ 1 2 - 77167 + 77195 2 @@ -25648,7 +26164,7 @@ 2 - 20371 + 20354 374 @@ -25665,7 +26181,7 @@ 1 2 - 5962 + 5961 2 @@ -25690,7 +26206,7 @@ 2 - 2132 + 2133 340 @@ -25701,19 +26217,19 @@ comments - 11233402 + 11233093 id - 11233402 + 11233093 contents - 4303640 + 4303522 location - 11233402 + 11233093 @@ -25727,7 +26243,7 @@ 1 2 - 11233402 + 11233093 @@ -25743,7 +26259,7 @@ 1 2 - 11233402 + 11233093 @@ -25759,17 +26275,17 @@ 1 2 - 3928890 + 3928782 2 6 - 322978 + 322969 6 34447 - 51771 + 51770 @@ -25785,17 +26301,17 @@ 1 2 - 3928890 + 3928782 2 6 - 322978 + 322969 6 34447 - 51771 + 51770 @@ -25811,7 +26327,7 @@ 1 2 - 11233402 + 11233093 @@ -25827,7 +26343,7 @@ 1 2 - 11233402 + 11233093 @@ -25837,15 +26353,15 @@ commentbinding - 3914793 + 3914685 id - 3350796 + 3350704 element - 3749249 + 3749146 @@ -25859,12 +26375,12 @@ 1 2 - 3289170 + 3289079 2 1706 - 61626 + 61625 @@ -25880,12 +26396,12 @@ 1 2 - 3583705 + 3583607 2 3 - 165543 + 165539 @@ -25895,15 +26411,15 @@ exprconv - 9633084 + 9633161 converted - 9632979 + 9633056 conversion - 9633084 + 9633161 @@ -25917,7 +26433,7 @@ 1 2 - 9632873 + 9632950 2 @@ -25938,7 +26454,7 @@ 1 2 - 9633084 + 9633161 @@ -25948,30 +26464,30 @@ compgenerated - 9892394 + 9893081 id - 9892394 + 9893081 synthetic_destructor_call - 1671701 + 1669514 element - 1244965 + 1243336 i - 387 + 386 destructor_call - 1671701 + 1669514 @@ -25985,17 +26501,17 @@ 1 2 - 828685 + 827601 2 3 - 409480 + 408944 3 19 - 6799 + 6790 @@ -26011,17 +26527,17 @@ 1 2 - 828685 + 827601 2 3 - 409480 + 408944 3 19 - 6799 + 6790 @@ -26037,17 +26553,17 @@ 1 2 - 43 + 42 2 3 - 86 + 85 3 4 - 86 + 85 13 @@ -26103,17 +26619,17 @@ 1 2 - 43 + 42 2 3 - 86 + 85 3 4 - 86 + 85 13 @@ -26169,7 +26685,7 @@ 1 2 - 1671701 + 1669514 @@ -26185,7 +26701,7 @@ 1 2 - 1671701 + 1669514 @@ -26195,15 +26711,15 @@ namespaces - 8650 + 8648 id - 8650 + 8648 name - 4573 + 4572 @@ -26217,7 +26733,7 @@ 1 2 - 8650 + 8648 @@ -26233,7 +26749,7 @@ 1 2 - 3739 + 3738 2 @@ -26253,26 +26769,26 @@ namespace_inline - 499 + 498 id - 499 + 498 namespacembrs - 2037673 + 2038490 parentid - 3992 + 3991 memberid - 2037673 + 2038490 @@ -26286,7 +26802,7 @@ 1 2 - 499 + 498 2 @@ -26296,7 +26812,7 @@ 3 4 - 499 + 498 4 @@ -26344,8 +26860,8 @@ 249 - 15606 - 15607 + 15613 + 15614 124 @@ -26362,7 +26878,7 @@ 1 2 - 2037673 + 2038490 @@ -26372,11 +26888,11 @@ exprparents - 19454210 + 19454445 expr_id - 19454210 + 19454445 child_index @@ -26384,7 +26900,7 @@ parent_id - 12939983 + 12940139 @@ -26398,7 +26914,7 @@ 1 2 - 19454210 + 19454445 @@ -26414,7 +26930,7 @@ 1 2 - 19454210 + 19454445 @@ -26532,17 +27048,17 @@ 1 2 - 7394754 + 7394844 2 3 - 5082678 + 5082739 3 712 - 462550 + 462555 @@ -26558,17 +27074,17 @@ 1 2 - 7394754 + 7394844 2 3 - 5082678 + 5082739 3 712 - 462550 + 462555 @@ -26578,22 +27094,22 @@ expr_isload - 6909332 + 6899307 expr_id - 6909332 + 6899307 conversionkinds - 6050443 + 6050440 expr_id - 6050443 + 6050440 kind @@ -26611,7 +27127,7 @@ 1 2 - 6050443 + 6050440 @@ -26655,8 +27171,8 @@ 1 - 5831535 - 5831536 + 5831532 + 5831533 1 @@ -26667,11 +27183,11 @@ iscall - 5802824 + 5800862 caller - 5802824 + 5800862 kind @@ -26689,7 +27205,7 @@ 1 2 - 5802824 + 5800862 @@ -26713,8 +27229,8 @@ 21 - 268054 - 268055 + 268316 + 268317 21 @@ -26725,11 +27241,11 @@ numtemplatearguments - 627369 + 627726 expr_id - 627369 + 627726 num @@ -26747,7 +27263,7 @@ 1 2 - 627369 + 627726 @@ -26766,8 +27282,8 @@ 124 - 1263 - 1264 + 1266 + 1267 124 @@ -26831,23 +27347,23 @@ namequalifiers - 3041979 + 3037999 id - 3041979 + 3037999 qualifiableelement - 3041979 + 3037999 qualifyingelement - 47486 + 47424 location - 552457 + 551734 @@ -26861,7 +27377,7 @@ 1 2 - 3041979 + 3037999 @@ -26877,7 +27393,7 @@ 1 2 - 3041979 + 3037999 @@ -26893,7 +27409,7 @@ 1 2 - 3041979 + 3037999 @@ -26909,7 +27425,7 @@ 1 2 - 3041979 + 3037999 @@ -26925,7 +27441,7 @@ 1 2 - 3041979 + 3037999 @@ -26941,7 +27457,7 @@ 1 2 - 3041979 + 3037999 @@ -26957,27 +27473,27 @@ 1 2 - 31543 + 31501 2 3 - 8176 + 8165 3 5 - 4109 + 4104 5 6811 - 3571 + 3567 19018 41956 - 86 + 85 @@ -26993,27 +27509,27 @@ 1 2 - 31543 + 31501 2 3 - 8176 + 8165 3 5 - 4109 + 4104 5 6811 - 3571 + 3567 19018 41956 - 86 + 85 @@ -27029,22 +27545,22 @@ 1 2 - 34404 + 34359 2 3 - 7358 + 7349 3 6 - 3571 + 3567 6 20057 - 2151 + 2148 @@ -27060,22 +27576,22 @@ 1 2 - 79137 + 79034 2 6 - 38105 + 38055 6 7 - 399001 + 398479 7 192 - 36212 + 36164 @@ -27091,22 +27607,22 @@ 1 2 - 79137 + 79034 2 6 - 38105 + 38055 6 7 - 399001 + 398479 7 192 - 36212 + 36164 @@ -27122,22 +27638,22 @@ 1 2 - 111541 + 111395 2 4 - 13297 + 13279 4 5 - 415311 + 414767 5 33 - 12307 + 12291 @@ -27147,15 +27663,15 @@ varbind - 8254629 + 8254728 expr - 8254629 + 8254728 var - 1050375 + 1050388 @@ -27169,7 +27685,7 @@ 1 2 - 8254629 + 8254728 @@ -27185,52 +27701,52 @@ 1 2 - 171535 + 171537 2 3 - 188700 + 188702 3 4 - 145647 + 145649 4 5 - 116636 + 116637 5 6 - 83150 + 83152 6 7 - 65817 + 65818 7 9 - 80815 + 80816 9 13 - 81575 + 81576 13 27 - 79127 + 79128 27 5137 - 37368 + 37369 @@ -27240,15 +27756,15 @@ funbind - 5812528 + 5810554 expr - 5810054 + 5808083 fun - 275948 + 275716 @@ -27262,12 +27778,12 @@ 1 2 - 5807579 + 5805611 2 3 - 2474 + 2471 @@ -27283,27 +27799,27 @@ 1 2 - 181448 + 181318 2 3 - 38837 + 38786 3 4 - 17191 + 17169 4 8 - 22742 + 22713 8 37798 - 15728 + 15729 @@ -27313,11 +27829,11 @@ expr_allocator - 45244 + 45240 expr - 45244 + 45240 func @@ -27339,7 +27855,7 @@ 1 2 - 45244 + 45240 @@ -27355,7 +27871,7 @@ 1 2 - 45244 + 45240 @@ -27439,11 +27955,11 @@ expr_deallocator - 53829 + 53825 expr - 53829 + 53825 func @@ -27465,7 +27981,7 @@ 1 2 - 53829 + 53825 @@ -27481,7 +27997,7 @@ 1 2 - 53829 + 53825 @@ -27586,15 +28102,15 @@ expr_cond_guard - 897879 + 897887 cond - 897879 + 897887 guard - 897879 + 897887 @@ -27608,7 +28124,7 @@ 1 2 - 897879 + 897887 @@ -27624,7 +28140,7 @@ 1 2 - 897879 + 897887 @@ -27634,15 +28150,15 @@ expr_cond_true - 897876 + 897883 cond - 897876 + 897883 true - 897876 + 897883 @@ -27656,7 +28172,7 @@ 1 2 - 897876 + 897883 @@ -27672,7 +28188,7 @@ 1 2 - 897876 + 897883 @@ -27682,15 +28198,15 @@ expr_cond_false - 897879 + 897887 cond - 897879 + 897887 false - 897879 + 897887 @@ -27704,7 +28220,7 @@ 1 2 - 897879 + 897887 @@ -27720,7 +28236,7 @@ 1 2 - 897879 + 897887 @@ -27730,15 +28246,15 @@ values - 13474601 + 13474763 id - 13474601 + 13474763 str - 114566 + 114567 @@ -27752,7 +28268,7 @@ 1 2 - 13474601 + 13474763 @@ -27768,7 +28284,7 @@ 1 2 - 78302 + 78303 2 @@ -27783,7 +28299,7 @@ 6 52 - 8628 + 8629 52 @@ -27798,11 +28314,11 @@ valuetext - 6647456 + 6647515 id - 6647456 + 6647515 text @@ -27820,7 +28336,7 @@ 1 2 - 6647456 + 6647515 @@ -27861,15 +28377,15 @@ valuebind - 13583183 + 13583347 val - 13474601 + 13474763 expr - 13583183 + 13583347 @@ -27883,12 +28399,12 @@ 1 2 - 13384046 + 13384208 2 6 - 90554 + 90555 @@ -27904,7 +28420,7 @@ 1 2 - 13583183 + 13583347 @@ -27914,11 +28430,11 @@ fieldoffsets - 1497674 + 1499493 id - 1497674 + 1499493 byteoffset @@ -27940,7 +28456,7 @@ 1 2 - 1497674 + 1499493 @@ -27956,7 +28472,7 @@ 1 2 - 1497674 + 1499493 @@ -28001,7 +28517,7 @@ 250 - 5950 + 5966 1089 @@ -28018,7 +28534,7 @@ 1 2 - 30386 + 30387 2 @@ -28072,8 +28588,8 @@ 54 - 27146 - 27147 + 27179 + 27180 54 @@ -28115,19 +28631,19 @@ bitfield - 30314 + 30313 id - 30314 + 30313 bits - 3493 + 3492 declared_bits - 3493 + 3492 @@ -28141,7 +28657,7 @@ 1 2 - 30314 + 30313 @@ -28157,7 +28673,7 @@ 1 2 - 30314 + 30313 @@ -28173,7 +28689,7 @@ 1 2 - 998 + 997 2 @@ -28188,7 +28704,7 @@ 4 5 - 499 + 498 5 @@ -28224,7 +28740,7 @@ 1 2 - 3493 + 3492 @@ -28240,7 +28756,7 @@ 1 2 - 998 + 997 2 @@ -28255,7 +28771,7 @@ 4 5 - 499 + 498 5 @@ -28291,7 +28807,7 @@ 1 2 - 3493 + 3492 @@ -28301,23 +28817,23 @@ initialisers - 2251321 + 2247635 init - 2251321 + 2247635 var - 981178 + 979695 expr - 2251321 + 2247635 location - 516961 + 516295 @@ -28331,7 +28847,7 @@ 1 2 - 2251321 + 2247635 @@ -28347,7 +28863,7 @@ 1 2 - 2251321 + 2247635 @@ -28363,7 +28879,7 @@ 1 2 - 2251321 + 2247635 @@ -28379,17 +28895,17 @@ 1 2 - 870758 + 869453 2 15 - 37448 + 37398 16 25 - 72972 + 72843 @@ -28405,17 +28921,17 @@ 1 2 - 870758 + 869453 2 15 - 37448 + 37398 16 25 - 72972 + 72843 @@ -28431,7 +28947,7 @@ 1 2 - 981170 + 979687 2 @@ -28452,7 +28968,7 @@ 1 2 - 2251321 + 2247635 @@ -28468,7 +28984,7 @@ 1 2 - 2251321 + 2247635 @@ -28484,7 +29000,7 @@ 1 2 - 2251321 + 2247635 @@ -28500,22 +29016,22 @@ 1 2 - 415111 + 414607 2 3 - 33614 + 33555 3 13 - 42070 + 42013 13 111925 - 26165 + 26119 @@ -28531,17 +29047,17 @@ 1 2 - 444412 + 443873 2 3 - 34524 + 34463 3 12238 - 38025 + 37958 @@ -28557,22 +29073,22 @@ 1 2 - 415111 + 414607 2 3 - 33614 + 33555 3 13 - 42070 + 42013 13 111925 - 26165 + 26119 @@ -28582,26 +29098,26 @@ braced_initialisers - 68438 + 68436 init - 68438 + 68436 expr_ancestor - 1677683 + 1675488 exp - 1677683 + 1675488 ancestor - 839659 + 838560 @@ -28615,7 +29131,7 @@ 1 2 - 1677683 + 1675488 @@ -28631,17 +29147,17 @@ 1 2 - 17084 + 17061 2 3 - 812505 + 811442 3 19 - 10069 + 10056 @@ -28651,11 +29167,11 @@ exprs - 25210567 + 25210871 id - 25210567 + 25210871 kind @@ -28663,7 +29179,7 @@ location - 10585854 + 10585982 @@ -28677,7 +29193,7 @@ 1 2 - 25210567 + 25210871 @@ -28693,7 +29209,7 @@ 1 2 - 25210567 + 25210871 @@ -28871,22 +29387,22 @@ 1 2 - 8903885 + 8903992 2 3 - 820608 + 820618 3 16 - 797198 + 797208 16 71733 - 64161 + 64162 @@ -28902,17 +29418,17 @@ 1 2 - 9043287 + 9043396 2 3 - 774272 + 774282 3 32 - 768294 + 768303 @@ -28922,19 +29438,19 @@ expr_reuse - 847039 + 845931 reuse - 847039 + 845931 original - 847039 + 845931 value_category - 43 + 42 @@ -28948,7 +29464,7 @@ 1 2 - 847039 + 845931 @@ -28964,7 +29480,7 @@ 1 2 - 847039 + 845931 @@ -28980,7 +29496,7 @@ 1 2 - 847039 + 845931 @@ -28996,7 +29512,7 @@ 1 2 - 847039 + 845931 @@ -29048,15 +29564,15 @@ expr_types - 25210567 + 25210871 id - 25210567 + 25210871 typeid - 214202 + 214205 value_category @@ -29074,7 +29590,7 @@ 1 2 - 25210567 + 25210871 @@ -29090,7 +29606,7 @@ 1 2 - 25210567 + 25210871 @@ -29131,7 +29647,7 @@ 8 14 - 17386 + 17387 14 @@ -29141,17 +29657,17 @@ 24 49 - 16067 + 16068 49 134 - 16177 + 16178 134 441505 - 13825 + 13826 @@ -29167,7 +29683,7 @@ 1 2 - 185913 + 185915 2 @@ -29235,15 +29751,15 @@ new_allocated_type - 46198 + 46194 expr - 46198 + 46194 type_id - 27391 + 27389 @@ -29257,7 +29773,7 @@ 1 2 - 46198 + 46194 @@ -29273,12 +29789,12 @@ 1 2 - 11515 + 11514 2 3 - 14479 + 14478 3 @@ -29293,15 +29809,15 @@ new_array_allocated_type - 6653 + 6641 expr - 6653 + 6641 type_id - 2843 + 2838 @@ -29315,7 +29831,7 @@ 1 2 - 6653 + 6641 @@ -29336,17 +29852,17 @@ 2 3 - 2510 + 2505 3 5 - 219 + 218 6 15 - 73 + 72 @@ -29356,19 +29872,19 @@ aggregate_field_init - 5717380 + 5717381 aggregate - 1243068 + 1243069 initializer - 5717202 + 5717203 field - 3227 + 3228 position @@ -29390,7 +29906,7 @@ 1 2 - 19690 + 19691 2 @@ -29441,7 +29957,7 @@ 1 2 - 19686 + 19687 2 @@ -29492,7 +30008,7 @@ 1 2 - 19690 + 19691 2 @@ -29543,7 +30059,7 @@ 1 2 - 1242986 + 1242987 2 @@ -29564,7 +30080,7 @@ 1 2 - 5717202 + 5717203 @@ -29580,7 +30096,7 @@ 1 2 - 5717024 + 5717025 2 @@ -29601,7 +30117,7 @@ 1 2 - 5717202 + 5717203 @@ -29617,7 +30133,7 @@ 1 2 - 5717202 + 5717203 @@ -29633,7 +30149,7 @@ 1 2 - 1433 + 1434 2 @@ -29689,7 +30205,7 @@ 1 2 - 1433 + 1434 2 @@ -29745,7 +30261,7 @@ 1 2 - 3213 + 3214 2 @@ -29766,7 +30282,7 @@ 1 2 - 3201 + 3202 2 @@ -29840,8 +30356,8 @@ 2 - 1243068 - 1243069 + 1243069 + 1243070 1 @@ -29911,8 +30427,8 @@ 2 - 1243068 - 1243069 + 1243069 + 1243070 1 @@ -29982,8 +30498,8 @@ 2 - 1283 - 1284 + 1284 + 1285 1 @@ -30024,8 +30540,8 @@ 1 - 1242670 - 1242671 + 1242671 + 1242672 1 @@ -30045,8 +30561,8 @@ 1 - 5716492 - 5716493 + 5716493 + 5716494 1 @@ -30066,8 +30582,8 @@ 1 - 3035 - 3036 + 3036 + 3037 1 @@ -30099,15 +30615,15 @@ aggregate_array_init - 1349246 + 1349502 aggregate - 152356 + 152357 initializer - 1349246 + 1349502 element_index @@ -30168,7 +30684,7 @@ 58 62923 - 1762 + 1763 @@ -30219,7 +30735,7 @@ 58 62923 - 1762 + 1763 @@ -30270,7 +30786,7 @@ 58 62923 - 1762 + 1763 @@ -30286,7 +30802,7 @@ 1 2 - 152356 + 152357 @@ -30302,7 +30818,7 @@ 1 2 - 1349246 + 1349502 @@ -30318,7 +30834,7 @@ 1 2 - 1349246 + 1349502 @@ -30334,7 +30850,7 @@ 1 2 - 1349246 + 1349502 @@ -30350,7 +30866,7 @@ 1 2 - 1349246 + 1349502 @@ -30390,7 +30906,7 @@ 37 - 152356 + 152357 2151 @@ -30431,7 +30947,7 @@ 37 - 152356 + 152357 2151 @@ -30514,7 +31030,7 @@ 37 - 152357 + 152358 2151 @@ -30555,7 +31071,7 @@ 37 - 152357 + 152358 2151 @@ -30617,8 +31133,8 @@ 1 - 152353 - 152354 + 152354 + 152355 1 @@ -30638,8 +31154,8 @@ 1 - 1349230 - 1349231 + 1349486 + 1349487 1 @@ -30692,15 +31208,15 @@ condition_decl_bind - 408920 + 408385 expr - 408920 + 408385 decl - 408920 + 408385 @@ -30714,7 +31230,7 @@ 1 2 - 408920 + 408385 @@ -30730,7 +31246,7 @@ 1 2 - 408920 + 408385 @@ -30740,15 +31256,15 @@ typeid_bind - 47901 + 47898 expr - 47901 + 47898 type_id - 15944 + 15943 @@ -30762,7 +31278,7 @@ 1 2 - 47901 + 47898 @@ -30778,12 +31294,12 @@ 1 2 - 2964 + 2963 2 3 - 12571 + 12570 3 @@ -30798,15 +31314,15 @@ uuidof_bind - 26677 + 26695 expr - 26677 + 26695 type_id - 26425 + 26443 @@ -30820,7 +31336,7 @@ 1 2 - 26677 + 26695 @@ -30836,12 +31352,12 @@ 1 2 - 26214 + 26232 2 4 - 211 + 210 @@ -30851,11 +31367,11 @@ sizeof_bind - 242026 + 242029 expr - 242026 + 242029 type_id @@ -30873,7 +31389,7 @@ 1 2 - 242026 + 242029 @@ -30982,11 +31498,11 @@ lambdas - 19057 + 19023 expr - 19057 + 19023 default_capture @@ -31012,7 +31528,7 @@ 1 2 - 19057 + 19023 @@ -31028,7 +31544,7 @@ 1 2 - 19057 + 19023 @@ -31044,7 +31560,7 @@ 1 2 - 19057 + 19023 @@ -31228,23 +31744,23 @@ lambda_capture - 31965 + 31909 id - 31965 + 31909 lambda - 15491 + 15463 index - 138 + 137 field - 31965 + 31909 captured_by_reference @@ -31256,7 +31772,7 @@ location - 17944 + 17912 @@ -31270,7 +31786,7 @@ 1 2 - 31965 + 31909 @@ -31286,7 +31802,7 @@ 1 2 - 31965 + 31909 @@ -31302,7 +31818,7 @@ 1 2 - 31965 + 31909 @@ -31318,7 +31834,7 @@ 1 2 - 31965 + 31909 @@ -31334,7 +31850,7 @@ 1 2 - 31965 + 31909 @@ -31350,7 +31866,7 @@ 1 2 - 31965 + 31909 @@ -31366,27 +31882,27 @@ 1 2 - 8212 + 8198 2 3 - 3541 + 3535 3 4 - 1657 + 1654 4 6 - 1259 + 1256 6 18 - 820 + 819 @@ -31402,27 +31918,27 @@ 1 2 - 8212 + 8198 2 3 - 3541 + 3535 3 4 - 1657 + 1654 4 6 - 1259 + 1256 6 18 - 820 + 819 @@ -31438,27 +31954,27 @@ 1 2 - 8212 + 8198 2 3 - 3541 + 3535 3 4 - 1657 + 1654 4 6 - 1259 + 1256 6 18 - 820 + 819 @@ -31474,12 +31990,12 @@ 1 2 - 14248 + 14223 2 3 - 1242 + 1240 @@ -31495,7 +32011,7 @@ 1 2 - 15369 + 15342 2 @@ -31516,22 +32032,22 @@ 1 2 - 8805 + 8790 2 3 - 3696 + 3689 3 4 - 1389 + 1386 4 7 - 1291 + 1289 7 @@ -31978,7 +32494,7 @@ 1 2 - 31965 + 31909 @@ -31994,7 +32510,7 @@ 1 2 - 31965 + 31909 @@ -32010,7 +32526,7 @@ 1 2 - 31965 + 31909 @@ -32026,7 +32542,7 @@ 1 2 - 31965 + 31909 @@ -32042,7 +32558,7 @@ 1 2 - 31965 + 31909 @@ -32058,7 +32574,7 @@ 1 2 - 31965 + 31909 @@ -32316,17 +32832,17 @@ 1 2 - 15694 + 15666 2 6 - 1437 + 1435 6 68 - 812 + 810 @@ -32342,17 +32858,17 @@ 1 2 - 16271 + 16242 2 13 - 1470 + 1467 13 68 - 203 + 202 @@ -32368,12 +32884,12 @@ 1 2 - 17253 + 17223 2 8 - 690 + 689 @@ -32389,17 +32905,17 @@ 1 2 - 15694 + 15666 2 6 - 1437 + 1435 6 68 - 812 + 810 @@ -32415,7 +32931,7 @@ 1 2 - 17920 + 17888 2 @@ -32436,7 +32952,7 @@ 1 2 - 17944 + 17912 @@ -32446,15 +32962,15 @@ fold - 1247 + 1246 expr - 1247 + 1246 operator - 86 + 85 is_left_fold @@ -32472,7 +32988,7 @@ 1 2 - 1247 + 1246 @@ -32488,7 +33004,7 @@ 1 2 - 1247 + 1246 @@ -32504,7 +33020,7 @@ 1 2 - 43 + 42 2 @@ -32530,7 +33046,7 @@ 1 2 - 86 + 85 @@ -32572,11 +33088,11 @@ stmts - 6368836 + 6358197 id - 6368836 + 6358197 kind @@ -32584,7 +33100,7 @@ location - 2684483 + 2679767 @@ -32598,7 +33114,7 @@ 1 2 - 6368836 + 6358197 @@ -32614,7 +33130,7 @@ 1 2 - 6368836 + 6358197 @@ -32713,13 +33229,13 @@ 8 - 119871 - 119872 + 119906 + 119907 8 - 200105 - 200106 + 200140 + 200141 8 @@ -32824,13 +33340,13 @@ 8 - 49039 - 49040 + 49040 + 49041 8 - 86405 - 86406 + 86406 + 86407 8 @@ -32852,22 +33368,22 @@ 1 2 - 2224993 + 2221078 2 3 - 182231 + 181910 3 10 - 202173 + 201818 10 1789 - 75084 + 74960 @@ -32883,12 +33399,12 @@ 1 2 - 2601527 + 2596949 2 10 - 82955 + 82817 @@ -32898,15 +33414,15 @@ type_vla - 1 + 3 type_id - 1 + 3 decl - 1 + 3 @@ -32920,7 +33436,7 @@ 1 2 - 1 + 3 @@ -32936,7 +33452,7 @@ 1 2 - 1 + 3 @@ -33053,15 +33569,15 @@ if_then - 990214 + 990226 if_stmt - 990214 + 990226 then_id - 990214 + 990226 @@ -33075,7 +33591,7 @@ 1 2 - 990214 + 990226 @@ -33091,7 +33607,7 @@ 1 2 - 990214 + 990226 @@ -33101,15 +33617,15 @@ if_else - 437107 + 436535 if_stmt - 437107 + 436535 else_id - 437107 + 436535 @@ -33123,7 +33639,7 @@ 1 2 - 437107 + 436535 @@ -33139,7 +33655,7 @@ 1 2 - 437107 + 436535 @@ -33197,15 +33713,15 @@ constexpr_if_then - 106037 + 106034 constexpr_if_stmt - 106037 + 106034 then_id - 106037 + 106034 @@ -33219,7 +33735,7 @@ 1 2 - 106037 + 106034 @@ -33235,7 +33751,7 @@ 1 2 - 106037 + 106034 @@ -33245,15 +33761,15 @@ constexpr_if_else - 76097 + 76095 constexpr_if_stmt - 76097 + 76095 else_id - 76097 + 76095 @@ -33267,7 +33783,7 @@ 1 2 - 76097 + 76095 @@ -33283,7 +33799,7 @@ 1 2 - 76097 + 76095 @@ -33389,15 +33905,15 @@ while_body - 39647 + 39648 while_stmt - 39647 + 39648 body_id - 39647 + 39648 @@ -33411,7 +33927,7 @@ 1 2 - 39647 + 39648 @@ -33427,7 +33943,7 @@ 1 2 - 39647 + 39648 @@ -33437,15 +33953,15 @@ do_body - 233641 + 233643 do_stmt - 233641 + 233643 body_id - 233641 + 233643 @@ -33459,7 +33975,7 @@ 1 2 - 233641 + 233643 @@ -33475,7 +33991,7 @@ 1 2 - 233641 + 233643 @@ -33533,19 +34049,19 @@ switch_case - 836152 + 835058 switch_stmt - 411868 + 411329 index - 387 + 386 case_id - 836152 + 835058 @@ -33564,12 +34080,12 @@ 2 3 - 408985 + 408450 3 19 - 2861 + 2857 @@ -33590,12 +34106,12 @@ 2 3 - 408985 + 408450 3 19 - 2861 + 2857 @@ -33753,7 +34269,7 @@ 1 2 - 836152 + 835058 @@ -33769,7 +34285,7 @@ 1 2 - 836152 + 835058 @@ -33779,15 +34295,15 @@ switch_body - 411868 + 411329 switch_stmt - 411868 + 411329 body_id - 411868 + 411329 @@ -33801,7 +34317,7 @@ 1 2 - 411868 + 411329 @@ -33817,7 +34333,7 @@ 1 2 - 411868 + 411329 @@ -33875,15 +34391,15 @@ for_condition - 76341 + 76342 for_stmt - 76341 + 76342 condition_id - 76341 + 76342 @@ -33897,7 +34413,7 @@ 1 2 - 76341 + 76342 @@ -33913,7 +34429,7 @@ 1 2 - 76341 + 76342 @@ -33923,15 +34439,15 @@ for_update - 73386 + 73387 for_stmt - 73386 + 73387 update_id - 73386 + 73387 @@ -33945,7 +34461,7 @@ 1 2 - 73386 + 73387 @@ -33961,7 +34477,7 @@ 1 2 - 73386 + 73387 @@ -33971,15 +34487,15 @@ for_body - 84389 + 84390 for_stmt - 84389 + 84390 body_id - 84389 + 84390 @@ -33993,7 +34509,7 @@ 1 2 - 84389 + 84390 @@ -34009,7 +34525,7 @@ 1 2 - 84389 + 84390 @@ -34019,19 +34535,19 @@ stmtparents - 5628263 + 5618643 id - 5628263 + 5618643 index - 15775 + 15747 parent - 2381441 + 2377534 @@ -34045,7 +34561,7 @@ 1 2 - 5628263 + 5618643 @@ -34061,7 +34577,7 @@ 1 2 - 5628263 + 5618643 @@ -34077,52 +34593,52 @@ 1 2 - 5182 + 5173 2 3 - 1291 + 1289 3 4 - 284 + 283 4 5 - 2006 + 2002 7 8 - 1315 + 1313 8 12 - 1023 + 1021 12 29 - 1389 + 1386 29 39 - 1186 + 1183 42 78 - 1194 + 1192 78 - 209668 - 901 + 209703 + 900 @@ -34138,52 +34654,52 @@ 1 2 - 5182 + 5173 2 3 - 1291 + 1289 3 4 - 284 + 283 4 5 - 2006 + 2002 7 8 - 1315 + 1313 8 12 - 1023 + 1021 12 29 - 1389 + 1386 29 39 - 1186 + 1183 42 78 - 1194 + 1192 78 - 209668 - 901 + 209703 + 900 @@ -34199,32 +34715,32 @@ 1 2 - 1358987 + 1356880 2 3 - 517368 + 516457 3 4 - 151516 + 151250 4 6 - 155724 + 155450 6 16 - 178868 + 178553 16 1943 - 18976 + 18942 @@ -34240,32 +34756,32 @@ 1 2 - 1358987 + 1356880 2 3 - 517368 + 516457 3 4 - 151516 + 151250 4 6 - 155724 + 155450 6 16 - 178868 + 178553 16 1943 - 18976 + 18942 @@ -34275,30 +34791,30 @@ ishandler - 43781 + 43770 block - 43781 + 43770 stmt_decl_bind - 725870 + 724592 stmt - 715301 + 714042 num - 73 + 72 decl - 725870 + 724592 @@ -34312,12 +34828,12 @@ 1 2 - 707836 + 706590 2 10 - 7465 + 7452 @@ -34333,12 +34849,12 @@ 1 2 - 707836 + 706590 2 10 - 7465 + 7452 @@ -34466,7 +34982,7 @@ 1 2 - 725870 + 724592 @@ -34482,7 +34998,7 @@ 1 2 - 725870 + 724592 @@ -34492,19 +35008,19 @@ stmt_decl_entry_bind - 725870 + 724592 stmt - 715301 + 714042 num - 73 + 72 decl_entry - 725870 + 724592 @@ -34518,12 +35034,12 @@ 1 2 - 707836 + 706590 2 10 - 7465 + 7452 @@ -34539,12 +35055,12 @@ 1 2 - 707836 + 706590 2 10 - 7465 + 7452 @@ -34672,7 +35188,7 @@ 1 2 - 725870 + 724592 @@ -34688,7 +35204,7 @@ 1 2 - 725870 + 724592 @@ -34698,15 +35214,15 @@ blockscope - 1644335 + 1644290 block - 1644335 + 1644290 enclosing - 1427145 + 1427105 @@ -34720,7 +35236,7 @@ 1 2 - 1644335 + 1644290 @@ -34736,17 +35252,17 @@ 1 2 - 1294535 + 1294499 2 4 - 117265 + 117262 4 29 - 15344 + 15343 @@ -34756,15 +35272,15 @@ jumpinfo - 348320 + 348324 id - 348320 + 348324 str - 28948 + 28949 target @@ -34782,7 +35298,7 @@ 1 2 - 348320 + 348324 @@ -34798,7 +35314,7 @@ 1 2 - 348320 + 348324 @@ -34814,7 +35330,7 @@ 2 3 - 13596 + 13597 3 @@ -34860,7 +35376,7 @@ 1 2 - 23190 + 23191 2 @@ -34891,7 +35407,7 @@ 2 3 - 36210 + 36211 3 @@ -34937,11 +35453,11 @@ preprocdirects - 5408430 + 5408281 id - 5408430 + 5408281 kind @@ -34949,7 +35465,7 @@ location - 5405187 + 5405038 @@ -34963,7 +35479,7 @@ 1 2 - 5408430 + 5408281 @@ -34979,7 +35495,7 @@ 1 2 - 5408430 + 5408281 @@ -35127,7 +35643,7 @@ 1 2 - 5405062 + 5404913 27 @@ -35148,7 +35664,7 @@ 1 2 - 5405187 + 5405038 @@ -35158,15 +35674,15 @@ preprocpair - 1141217 + 1141185 begin - 888971 + 888947 elseelifend - 1141217 + 1141185 @@ -35180,17 +35696,17 @@ 1 2 - 649575 + 649557 2 3 - 230414 + 230407 3 9 - 8982 + 8981 @@ -35206,7 +35722,7 @@ 1 2 - 1141217 + 1141185 @@ -35216,41 +35732,41 @@ preproctrue - 439371 + 439358 branch - 439371 + 439358 preprocfalse - 285304 + 285296 branch - 285304 + 285296 preproctext - 4352418 + 4352298 id - 4352418 + 4352298 head - 2955088 + 2955007 body - 1683382 + 1683336 @@ -35264,7 +35780,7 @@ 1 2 - 4352418 + 4352298 @@ -35280,7 +35796,7 @@ 1 2 - 4352418 + 4352298 @@ -35296,12 +35812,12 @@ 1 2 - 2756485 + 2756409 2 798 - 198602 + 198597 @@ -35317,12 +35833,12 @@ 1 2 - 2873875 + 2873796 2 5 - 81212 + 81210 @@ -35338,17 +35854,17 @@ 1 2 - 1535178 + 1535136 2 10 - 127245 + 127241 10 13606 - 20958 + 20957 @@ -35364,12 +35880,12 @@ 1 2 - 1539420 + 1539378 2 12 - 126871 + 126867 12 @@ -35384,15 +35900,15 @@ includes - 318638 + 318569 id - 318638 + 318569 included - 58695 + 58683 @@ -35406,7 +35922,7 @@ 1 2 - 318638 + 318569 @@ -35422,32 +35938,32 @@ 1 2 - 29046 + 29040 2 3 - 9442 + 9440 3 4 - 4953 + 4952 4 6 - 5355 + 5354 6 11 - 4520 + 4519 11 47 - 4404 + 4403 47 @@ -35510,11 +36026,11 @@ link_parent - 30398238 + 30400377 element - 3866121 + 3866383 link_target @@ -35532,17 +36048,17 @@ 1 2 - 530459 + 530489 2 9 - 26948 + 26946 9 10 - 3308712 + 3308947 @@ -35561,48 +36077,48 @@ 34 - 97375 - 97376 + 97389 + 97390 34 - 97494 - 97495 + 97508 + 97509 34 - 97547 - 97548 + 97561 + 97562 34 - 97574 - 97575 + 97588 + 97589 34 - 97596 - 97597 + 97610 + 97611 34 - 97628 - 97629 + 97642 + 97643 34 - 99635 - 99636 + 99649 + 99650 34 - 103015 - 103016 + 103029 + 103030 34 - 104379 - 104380 + 104395 + 104396 34 From 15393ae62135eadff82963c9a4d4ad02c246c666 Mon Sep 17 00:00:00 2001 From: Jeroen Ketema Date: Thu, 13 Nov 2025 13:15:03 +0100 Subject: [PATCH 5/6] C++: Add change note --- cpp/ql/lib/change-notes/2025-11-13-expanded.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 cpp/ql/lib/change-notes/2025-11-13-expanded.md diff --git a/cpp/ql/lib/change-notes/2025-11-13-expanded.md b/cpp/ql/lib/change-notes/2025-11-13-expanded.md new file mode 100644 index 000000000000..82d0a1f51057 --- /dev/null +++ b/cpp/ql/lib/change-notes/2025-11-13-expanded.md @@ -0,0 +1,4 @@ +--- +category: feature +--- +* New predicates `getAnExpandedArgument` and `getExpandedArgument` were added to the `Compilation` class, yielding compilation arguments after expansion of response files. From 1df47cc747cce7eee04cae90c7e1b2790496f24f Mon Sep 17 00:00:00 2001 From: Jeroen Ketema Date: Thu, 13 Nov 2025 13:32:06 +0100 Subject: [PATCH 6/6] C++: Fix QL-for-QL warning --- cpp/ql/lib/semmle/code/cpp/Compilation.qll | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/cpp/ql/lib/semmle/code/cpp/Compilation.qll b/cpp/ql/lib/semmle/code/cpp/Compilation.qll index 716156acb449..c4b3796dec86 100644 --- a/cpp/ql/lib/semmle/code/cpp/Compilation.qll +++ b/cpp/ql/lib/semmle/code/cpp/Compilation.qll @@ -100,10 +100,12 @@ class Compilation extends @compilation { string getAnExpandedArgument() { result = this.getArgument(_) } /** - * The expanded arguments that were passed to the extractor for a - * compiler invocation. This is similar to `getArgument`, but - * for a `@someFile` argument, it includes the arguments from that - * file, rather than just taking the argument literally. + * Gets the `i`th expanded argument passed to the extractor on this + * invocation. + * + * This is similar to `getArgument`, but for a `@someFile` argument, it + * includes the arguments from that file, rather than just taking the + * argument literally. */ string getExpandedArgument(int i) { compilation_expanded_args(this, i, result) }