From e9b00f1e0db55c0ce9aeb7dfbb567f639d16446c Mon Sep 17 00:00:00 2001 From: Jeroen Ketema Date: Tue, 26 Aug 2025 18:19:50 +0200 Subject: [PATCH 1/7] C++: Add tables that represent the creation and use of PCH files This allows a use to be linked to a creation. --- 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 5340d6d5f428..c16b29b27f71 100644 --- a/cpp/ql/lib/semmlecode.cpp.dbscheme +++ b/cpp/ql/lib/semmlecode.cpp.dbscheme @@ -222,6 +222,19 @@ extractor_version( 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; From e20ce5702310ace8191d572cfe672381edead3a5 Mon Sep 17 00:00:00 2001 From: Jeroen Ketema Date: Tue, 26 Aug 2025 20:52:48 +0200 Subject: [PATCH 2/7] C++: Expose PCH file creation as usage in QL --- cpp/ql/lib/cpp.qll | 1 + cpp/ql/lib/semmle/code/cpp/PchFile.qll | 23 +++++++++++++++++++++++ 2 files changed, 24 insertions(+) create mode 100644 cpp/ql/lib/semmle/code/cpp/PchFile.qll diff --git a/cpp/ql/lib/cpp.qll b/cpp/ql/lib/cpp.qll index c8afac1c7ae9..46c651daf579 100644 --- a/cpp/ql/lib/cpp.qll +++ b/cpp/ql/lib/cpp.qll @@ -15,6 +15,7 @@ import Customizations import semmle.code.cpp.File +import semmle.code.cpp.PchFile import semmle.code.cpp.Linkage import semmle.code.cpp.Location import semmle.code.cpp.Compilation diff --git a/cpp/ql/lib/semmle/code/cpp/PchFile.qll b/cpp/ql/lib/semmle/code/cpp/PchFile.qll new file mode 100644 index 000000000000..fbb372b30e5b --- /dev/null +++ b/cpp/ql/lib/semmle/code/cpp/PchFile.qll @@ -0,0 +1,23 @@ +/** + * Provides the `PchFile` class representing precompiled header (PCH) files created and + * used during the build process. + */ + +import semmle.code.cpp.File + +/** + * A precompiled header (PCH) file created during the build process. + */ +class PchFile extends @pch { + string toString() { result = "PCH for " + this.getHeaderFile() } + + /** + * Gets the header file from with the PCH file was created. + */ + File getHeaderFile() { pch_creations(this, _, result) } + + /** + * Gets a source file that includes the PCH. + */ + File getAUse() { pch_uses(this, _, result) } +} From 896a802194b367892d87ebd796cf524c455de765 Mon Sep 17 00:00:00 2001 From: Jeroen Ketema Date: Tue, 26 Aug 2025 23:12:15 +0200 Subject: [PATCH 3/7] C++: Add upgrade and downgrade scripts --- .../old.dbscheme | 2436 +++++++++++++++++ .../semmlecode.cpp.dbscheme | 2423 ++++++++++++++++ .../upgrade.properties | 4 + .../old.dbscheme | 2423 ++++++++++++++++ .../semmlecode.cpp.dbscheme | 2436 +++++++++++++++++ .../upgrade.properties | 2 + 6 files changed, 9724 insertions(+) create mode 100644 cpp/downgrades/c16b29b27f71247023321cc0d0360998b318837c/old.dbscheme create mode 100644 cpp/downgrades/c16b29b27f71247023321cc0d0360998b318837c/semmlecode.cpp.dbscheme create mode 100644 cpp/downgrades/c16b29b27f71247023321cc0d0360998b318837c/upgrade.properties create mode 100644 cpp/ql/lib/upgrades/5340d6d5f428557632b1a50113e406430f29ef7d/old.dbscheme create mode 100644 cpp/ql/lib/upgrades/5340d6d5f428557632b1a50113e406430f29ef7d/semmlecode.cpp.dbscheme create mode 100644 cpp/ql/lib/upgrades/5340d6d5f428557632b1a50113e406430f29ef7d/upgrade.properties diff --git a/cpp/downgrades/c16b29b27f71247023321cc0d0360998b318837c/old.dbscheme b/cpp/downgrades/c16b29b27f71247023321cc0d0360998b318837c/old.dbscheme new file mode 100644 index 000000000000..c16b29b27f71 --- /dev/null +++ b/cpp/downgrades/c16b29b27f71247023321cc0d0360998b318837c/old.dbscheme @@ -0,0 +1,2436 @@ +/*- 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; + +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/c16b29b27f71247023321cc0d0360998b318837c/semmlecode.cpp.dbscheme b/cpp/downgrades/c16b29b27f71247023321cc0d0360998b318837c/semmlecode.cpp.dbscheme new file mode 100644 index 000000000000..5340d6d5f428 --- /dev/null +++ b/cpp/downgrades/c16b29b27f71247023321cc0d0360998b318837c/semmlecode.cpp.dbscheme @@ -0,0 +1,2423 @@ +/*- 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 +) + +/** 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; + +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/c16b29b27f71247023321cc0d0360998b318837c/upgrade.properties b/cpp/downgrades/c16b29b27f71247023321cc0d0360998b318837c/upgrade.properties new file mode 100644 index 000000000000..c0351e51e293 --- /dev/null +++ b/cpp/downgrades/c16b29b27f71247023321cc0d0360998b318837c/upgrade.properties @@ -0,0 +1,4 @@ +description: Link PCH creations and uses +compatibility: full +pch_uses.rel: delete +pch_creations.rel: delete diff --git a/cpp/ql/lib/upgrades/5340d6d5f428557632b1a50113e406430f29ef7d/old.dbscheme b/cpp/ql/lib/upgrades/5340d6d5f428557632b1a50113e406430f29ef7d/old.dbscheme new file mode 100644 index 000000000000..5340d6d5f428 --- /dev/null +++ b/cpp/ql/lib/upgrades/5340d6d5f428557632b1a50113e406430f29ef7d/old.dbscheme @@ -0,0 +1,2423 @@ +/*- 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 +) + +/** 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; + +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/5340d6d5f428557632b1a50113e406430f29ef7d/semmlecode.cpp.dbscheme b/cpp/ql/lib/upgrades/5340d6d5f428557632b1a50113e406430f29ef7d/semmlecode.cpp.dbscheme new file mode 100644 index 000000000000..c16b29b27f71 --- /dev/null +++ b/cpp/ql/lib/upgrades/5340d6d5f428557632b1a50113e406430f29ef7d/semmlecode.cpp.dbscheme @@ -0,0 +1,2436 @@ +/*- 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; + +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/5340d6d5f428557632b1a50113e406430f29ef7d/upgrade.properties b/cpp/ql/lib/upgrades/5340d6d5f428557632b1a50113e406430f29ef7d/upgrade.properties new file mode 100644 index 000000000000..d8e09e944fe5 --- /dev/null +++ b/cpp/ql/lib/upgrades/5340d6d5f428557632b1a50113e406430f29ef7d/upgrade.properties @@ -0,0 +1,2 @@ +description: Link PCH creations and uses +compatibility: backwards From 9b19ccf884bbbc786aef54cc3f096b9f1c548478 Mon Sep 17 00:00:00 2001 From: Jeroen Ketema Date: Wed, 27 Aug 2025 12:52:26 +0200 Subject: [PATCH 4/7] C++: Update dbscheme stats file --- cpp/ql/lib/semmlecode.cpp.dbscheme.stats | 5128 ++++++++++++---------- 1 file changed, 2782 insertions(+), 2346 deletions(-) diff --git a/cpp/ql/lib/semmlecode.cpp.dbscheme.stats b/cpp/ql/lib/semmlecode.cpp.dbscheme.stats index ef86a76e7edd..0943aadd6943 100644 --- a/cpp/ql/lib/semmlecode.cpp.dbscheme.stats +++ b/cpp/ql/lib/semmlecode.cpp.dbscheme.stats @@ -10,11 +10,11 @@ @file - 65211 + 65207 @folder - 12389 + 12388 @diagnostic @@ -22,11 +22,15 @@ @location_default - 46965929 + 46945184 + + + @pch + 249 @macro_expansion - 40257319 + 40256666 @other_macro_reference @@ -34,7 +38,7 @@ @normal_function - 2740505 + 2738028 @unknown_function @@ -42,19 +46,19 @@ @constructor - 698724 + 698700 @destructor - 86280 + 86202 @conversion_function - 10363 + 10354 @operator - 653036 + 652446 @user_defined_literal @@ -62,31 +66,31 @@ @deduction_guide - 5868 + 5863 @fun_decl - 4206778 + 4202975 @var_decl - 9391612 + 9383123 @type_decl - 1634963 + 1633485 @namespace_decl - 407321 + 407776 @using_declaration - 267931 + 267925 @using_directive - 6473 + 6472 @using_enum_declaration @@ -94,27 +98,27 @@ @static_assert - 173266 + 173263 @parameter - 7026197 + 7019846 @membervariable - 1496815 + 1497677 @globalvariable - 488591 + 488149 @localvariable - 726232 + 726313 @enumconstant - 345733 + 347817 @errortype @@ -362,23 +366,23 @@ @pointer - 452880 + 452470 @type_with_specifiers - 693866 + 693239 @array - 90401 + 90319 @routineptr - 684109 + 684085 @reference - 968192 + 967316 @gnu_vector @@ -390,7 +394,7 @@ @rvalue_reference - 291306 + 291043 @block @@ -400,17 +404,13 @@ @scalable_vector 1 - - @decltype - 102349 - @typeof 816 @underlying_type - 624 + 623 @bases @@ -484,25 +484,29 @@ @remove_reference 5723 + + @decltype + 102349 + @struct - 979865 + 979805 @union - 20977 + 20958 @enum - 41337 + 41550 @template_parameter - 867072 + 867019 @alias - 1762239 + 1762205 @unknown_usertype @@ -510,7 +514,7 @@ @class - 325269 + 324975 @template_template_parameter @@ -518,31 +522,31 @@ @proxy_class - 48438 + 48435 @scoped_enum - 11612 + 11601 @template_struct - 212078 + 212065 @template_class - 29342 + 29316 @template_union - 1373 + 1372 @mangledname - 6370039 + 6364281 @type_mention - 5902897 + 5903906 @concept_template @@ -550,7 +554,7 @@ @routinetype - 604319 + 604298 @ptrtomember @@ -558,7 +562,7 @@ @specifier - 7741 + 7734 @gnuattribute @@ -566,11 +570,11 @@ @stdattribute - 353114 + 352794 @declspec - 330047 + 330282 @msattribute @@ -578,7 +582,7 @@ @alignas - 2166 + 2165 @attribute_arg_token @@ -586,7 +590,7 @@ @attribute_arg_constant_expr - 71875 + 71712 @attribute_arg_expr @@ -606,19 +610,19 @@ @derivation - 476900 + 476883 @frienddecl - 700462 + 700403 @comment - 11241965 + 11233426 @namespace - 8650 + 8649 @specialnamequalifyingelement @@ -626,15 +630,15 @@ @namequalifier - 3041863 + 3041831 @value - 13474606 + 13474629 @initialiser - 2251035 + 2251326 @address_of @@ -642,35 +646,35 @@ @indirect - 404153 + 404154 @array_to_pointer - 1953751 + 1953754 @parexpr - 4915208 + 4915216 @arithnegexpr - 586534 + 586535 @unaryplusexpr - 4073 + 4069 @complementexpr - 38199 + 38200 @notexpr - 355764 + 355765 @postincrexpr - 84581 + 84571 @postdecrexpr @@ -686,27 +690,27 @@ @conditionalexpr - 897880 + 897881 @addexpr - 571553 + 571554 @subexpr - 466799 + 466800 @mulexpr - 435793 + 435794 @divexpr - 52393 + 52387 @remexpr - 16012 + 16011 @paddexpr @@ -714,39 +718,39 @@ @psubexpr - 68024 + 68016 @pdiffexpr - 43951 + 43912 @lshiftexpr - 551696 + 551697 @rshiftexpr - 200554 + 200555 @andexpr - 481218 + 481219 @orexpr - 194055 + 194056 @xorexpr - 73961 + 73952 @eqexpr - 643372 + 643373 @neexpr - 411870 + 411871 @gtexpr @@ -758,7 +762,7 @@ @geexpr - 81368 + 81358 @leexpr @@ -766,7 +770,7 @@ @assignexpr - 1281144 + 1281147 @assignaddexpr @@ -778,7 +782,7 @@ @assignmulexpr - 11185 + 11184 @assigndivexpr @@ -786,7 +790,7 @@ @assignremexpr - 874 + 873 @assignlshiftexpr @@ -822,11 +826,11 @@ @orlogicalexpr - 1103523 + 1103525 @commaexpr - 168440 + 168288 @subscriptexpr @@ -834,7 +838,7 @@ @callexpr - 239778 + 239770 @vastartexpr @@ -846,7 +850,7 @@ @vaendexpr - 2941 + 2940 @vacopyexpr @@ -854,15 +858,15 @@ @varaccess - 8254632 + 8254646 @runtime_sizeof - 402047 + 402048 @runtime_alignof - 49877 + 49875 @expr_stmt @@ -870,11 +874,11 @@ @routineexpr - 5732226 + 5732184 @type_operand - 1405363 + 1405365 @offsetofexpr @@ -882,11 +886,11 @@ @typescompexpr - 701934 + 701935 @literal - 7967630 + 7967037 @aggregateliteral @@ -898,19 +902,19 @@ @temp_init - 992324 + 992080 @errorexpr - 45686 + 45685 @reference_to - 1902638 + 1903026 @ref_indirect - 2107314 + 2107241 @vacuous_destructor_call @@ -970,23 +974,23 @@ @thisaccess - 1558310 + 1558281 @new_expr - 46197 + 46196 @delete_expr - 11481 + 11480 @throw_expr - 24105 + 24156 @condition_decl - 408905 + 408903 @braced_init_list @@ -994,7 +998,7 @@ @type_id - 47901 + 47899 @sizeof_pack @@ -1058,11 +1062,11 @@ @isemptyexpr - 8865 + 8857 @isenumexpr - 2996 + 2994 @ispodexpr @@ -1086,7 +1090,7 @@ @uuidof - 26588 + 26677 @delete_array_expr @@ -1102,7 +1106,7 @@ @ctordirectinit - 112837 + 112833 @ctorvirtualinit @@ -1110,35 +1114,35 @@ @ctorfieldinit - 206399 + 206212 @ctordelegatinginit - 3621 + 3617 @dtordirectdestruct - 39452 + 39450 @dtorvirtualdestruct - 3986 + 3985 @dtorfielddestruct - 39826 + 39825 @static_cast - 348369 + 348054 @reinterpret_cast - 40089 + 40088 @const_cast - 24461 + 24460 @dynamic_cast @@ -1150,7 +1154,7 @@ @param_ref - 164014 + 163949 @noopexpr @@ -1158,7 +1162,7 @@ @istriviallyconstructibleexpr - 3745 + 3742 @isdestructibleexpr @@ -1174,15 +1178,15 @@ @istriviallyassignableexpr - 3745 + 3742 @isnothrowassignableexpr - 5119 + 5114 @istrivialexpr - 3368 + 3367 @isstandardlayoutexpr @@ -1190,7 +1194,7 @@ @istriviallycopyableexpr - 1373 + 1372 @isliteraltypeexpr @@ -1210,11 +1214,11 @@ @isconstructibleexpr - 3621 + 3617 @isnothrowconstructibleexpr - 20727 + 20708 @hasfinalizerexpr @@ -1250,11 +1254,11 @@ @isfinalexpr - 9403 + 9402 @noexceptexpr - 28356 + 28344 @builtinshufflevector @@ -1266,7 +1270,7 @@ @builtinaddressof - 15483 + 15469 @vec_fill @@ -1426,7 +1430,7 @@ @reuseexpr - 847007 + 847004 @istriviallycopyassignable @@ -1542,35 +1546,35 @@ @lambdacapture - 31966 + 31965 @stmt_expr - 2031614 + 2031618 @stmt_if - 990214 + 990216 @stmt_while - 39647 + 39648 @stmt_goto - 157904 + 157895 @stmt_label - 78022 + 78018 @stmt_return - 1241797 + 1241679 @stmt_block - 1729360 + 1728670 @stmt_end_test_while @@ -1582,11 +1586,11 @@ @stmt_switch_case - 836120 + 836117 @stmt_switch - 411852 + 411851 @stmt_asm @@ -1594,11 +1598,11 @@ @stmt_decl - 772441 + 772426 @stmt_empty - 429388 + 429386 @stmt_continue @@ -1606,11 +1610,11 @@ @stmt_break - 137937 + 137934 @stmt_try_block - 26698 + 26748 @stmt_microsoft_try @@ -1630,15 +1634,15 @@ @stmt_range_based_for - 6387 + 6384 @stmt_handler - 43746 + 43790 @stmt_constexpr_if - 106134 + 106038 @stmt_co_return @@ -1658,43 +1662,43 @@ @ppd_if - 591478 + 590944 @ppd_ifdef - 214363 + 214364 @ppd_ifndef - 158651 + 158633 @ppd_elif - 21916 + 21915 @ppd_else - 235118 + 234905 @ppd_endif - 889777 + 888973 @ppd_plain_include - 318555 + 318536 @ppd_define - 2752617 + 2750129 @ppd_undef - 100515 + 100424 @ppd_pragma - 406555 + 406188 @ppd_include_next @@ -1702,7 +1706,7 @@ @ppd_line - 18827 + 18812 @ppd_error @@ -1808,7 +1812,7 @@ compilation_args - 1012186 + 1012124 id @@ -1820,7 +1824,7 @@ arg - 29267 + 29266 @@ -2148,12 +2152,12 @@ 1 2 - 13403 + 13402 2 3 - 12685 + 12684 3 @@ -2179,12 +2183,12 @@ 1 2 - 19381 + 19380 2 3 - 8724 + 8723 3 @@ -2247,19 +2251,19 @@ compilation_compiling_files - 15739 + 15738 id - 2723 + 2722 num - 4520 + 4519 file - 13670 + 13668 @@ -2447,7 +2451,7 @@ 1 2 - 12308 + 12307 2 @@ -2473,7 +2477,7 @@ 1 2 - 12526 + 12525 2 @@ -2493,15 +2497,15 @@ compilation_time - 62959 + 62952 id - 2723 + 2722 num - 4520 + 4519 kind @@ -2509,7 +2513,7 @@ seconds - 13343 + 12634 @@ -2574,7 +2578,7 @@ 4 5 - 2723 + 2722 @@ -2587,54 +2591,49 @@ 12 - - 2 - 3 - 54 - 3 4 - 653 + 980 4 5 - 653 + 381 - 6 - 7 - 163 + 5 + 8 + 217 8 - 9 + 10 163 10 11 - 217 + 108 11 - 14 + 12 217 - 16 - 18 - 163 + 14 + 17 + 217 - 18 + 17 22 217 25 - 103 + 93 217 @@ -2687,7 +2686,7 @@ 4 5 - 4520 + 4519 @@ -2713,17 +2712,17 @@ 5 6 - 326 + 272 6 7 - 381 + 490 7 8 - 326 + 217 8 @@ -2732,14 +2731,19 @@ 9 - 22 + 17 381 - 25 - 91 + 23 + 48 381 + + 83 + 84 + 54 + @@ -2794,13 +2798,13 @@ 54 - 148 - 149 + 129 + 130 54 - 154 - 155 + 150 + 151 54 @@ -2817,27 +2821,27 @@ 1 2 - 6644 + 6643 2 3 - 3267 + 2069 3 4 - 1797 + 2014 4 - 6 + 5 1198 - 6 - 48 - 435 + 5 + 46 + 707 @@ -2853,32 +2857,32 @@ 1 2 - 5882 + 6480 2 3 - 2941 + 1797 3 4 - 1960 + 1361 4 5 - 925 + 1198 5 7 - 1198 + 1143 7 - 73 - 435 + 77 + 653 @@ -2894,12 +2898,12 @@ 1 2 - 9857 + 9693 2 3 - 3485 + 2940 @@ -3163,11 +3167,11 @@ cpu_seconds - 9579 + 9537 elapsed_seconds - 232 + 221 @@ -3213,17 +3217,17 @@ 1 2 - 8080 + 8026 2 3 - 1077 + 1056 3 - 25 - 422 + 28 + 454 @@ -3239,12 +3243,12 @@ 1 2 - 9051 + 8945 2 3 - 528 + 591 @@ -3260,47 +3264,82 @@ 1 2 - 73 + 42 2 - 5 + 3 21 + + 3 + 4 + 10 + + + 4 + 5 + 10 + + + 5 + 6 + 10 + 6 - 8 - 21 + 7 + 10 - 11 - 12 + 8 + 9 10 - 13 - 14 - 21 + 9 + 10 + 10 14 - 17 - 21 + 15 + 10 - 27 - 54 + 15 + 16 21 - 164 - 251 - 21 + 34 + 35 + 10 - 289 - 322 - 21 + 61 + 62 + 10 + + + 172 + 173 + 10 + + + 230 + 231 + 10 + + + 300 + 301 + 10 + + + 313 + 314 + 10 @@ -3316,47 +3355,82 @@ 1 2 - 73 + 42 2 - 5 + 3 21 + + 3 + 4 + 10 + + + 4 + 5 + 10 + + + 5 + 6 + 10 + 6 - 8 - 21 + 7 + 10 - 11 - 12 + 8 + 9 10 - 13 - 14 - 21 + 9 + 10 + 10 14 - 17 + 15 21 - 26 - 53 - 21 + 15 + 16 + 10 - 154 - 161 - 21 + 33 + 34 + 10 - 227 - 246 - 21 + 58 + 59 + 10 + + + 156 + 157 + 10 + + + 161 + 162 + 10 + + + 218 + 219 + 10 + + + 247 + 248 + 10 @@ -3593,31 +3667,31 @@ locations_default - 46965929 + 46945184 id - 46965929 + 46945184 file - 40955 + 40918 beginLine - 7507421 + 7500635 beginColumn - 21975 + 21956 endLine - 7508545 + 7501758 endColumn - 53441 + 53393 @@ -3631,7 +3705,7 @@ 1 2 - 46965929 + 46945184 @@ -3647,7 +3721,7 @@ 1 2 - 46965929 + 46945184 @@ -3663,7 +3737,7 @@ 1 2 - 46965929 + 46945184 @@ -3679,7 +3753,7 @@ 1 2 - 46965929 + 46945184 @@ -3695,7 +3769,7 @@ 1 2 - 46965929 + 46945184 @@ -3711,67 +3785,67 @@ 1 15 - 3121 + 3118 15 41 - 3121 + 3118 42 72 - 3121 + 3118 72 114 - 3371 + 3368 114 142 - 3121 + 3118 143 211 - 3121 + 3118 213 307 - 3121 + 3118 310 430 - 3121 + 3118 437 596 - 3121 + 3118 607 827 - 3121 + 3118 839 1298 - 3121 + 3118 1300 - 2722 - 3121 + 2855 + 3118 3114 30788 - 3121 + 3118 57880 @@ -3792,67 +3866,67 @@ 1 13 - 3371 + 3368 13 31 - 3371 + 3368 31 47 - 3121 + 3118 47 64 - 3121 + 3118 64 84 - 3121 + 3118 85 115 - 3121 + 3118 116 160 - 3246 + 3243 160 206 - 3121 + 3118 206 291 - 3121 + 3118 298 388 - 3121 + 3118 395 527 - 3121 + 3118 561 1339 - 3121 + 3118 1375 57764 - 2871 + 2869 @@ -3868,67 +3942,67 @@ 1 5 - 3745 + 3742 5 9 - 3121 + 3118 9 15 - 3246 + 3243 15 20 - 3246 + 3243 20 28 - 3246 + 3243 28 36 - 3246 + 3243 36 42 - 3121 + 3118 42 53 - 3371 + 3368 53 62 - 3246 + 3243 62 81 - 3121 + 3118 81 95 - 3121 + 3118 95 111 - 3121 + 3118 112 156 - 1997 + 1996 @@ -3944,67 +4018,67 @@ 1 13 - 3371 + 3368 13 31 - 3371 + 3368 31 46 - 3121 + 3118 46 63 - 3121 + 3118 63 84 - 3121 + 3118 84 114 - 3121 + 3118 118 160 - 3246 + 3243 160 206 - 3121 + 3118 207 291 - 3121 + 3118 300 390 - 3121 + 3118 395 562 - 3121 + 3118 564 1350 - 3121 + 3118 1420 57764 - 2871 + 2869 @@ -4020,67 +4094,67 @@ 1 12 - 3371 + 3368 13 26 - 3496 + 3493 26 34 - 3246 + 3243 34 42 - 3246 + 3243 42 50 - 3246 + 3243 50 61 - 3121 + 3118 61 67 - 3246 + 3243 67 76 - 3496 + 3493 76 88 - 3246 + 3243 89 102 - 3121 + 3118 102 116 - 3496 + 3493 116 133 - 3121 + 3118 136 363 - 1498 + 1497 @@ -4096,32 +4170,32 @@ 1 2 - 4961952 + 4957467 2 3 - 779772 + 779068 3 4 - 544405 + 543913 4 12 - 570876 + 570360 12 97 - 563134 + 563374 97 637 - 87279 + 86452 @@ -4137,27 +4211,27 @@ 1 2 - 5024010 + 5019469 2 3 - 1222414 + 1221309 3 6 - 640550 + 639971 6 57 - 563509 + 563249 57 329 - 56937 + 56636 @@ -4173,27 +4247,27 @@ 1 2 - 5646455 + 5641351 2 3 - 483596 + 483159 3 7 - 582613 + 582086 7 25 - 566256 + 565245 25 94 - 228500 + 228792 @@ -4209,12 +4283,12 @@ 1 2 - 7041180 + 7034567 2 85 - 466240 + 466068 @@ -4230,32 +4304,32 @@ 1 2 - 5031002 + 5026455 2 3 - 740066 + 739397 3 4 - 540284 + 539796 4 12 - 587483 + 586952 12 72 - 565257 + 564122 72 250 - 43327 + 43912 @@ -4271,67 +4345,67 @@ 1 2 - 1748 + 1746 2 6 - 1997 + 1996 6 12 - 1872 + 1871 12 40 - 1748 + 1746 49 128 - 1748 + 1746 129 253 - 1748 + 1746 316 707 - 1748 + 1746 791 1267 - 1748 + 1746 1281 1943 - 1748 + 1746 2017 2398 - 1748 + 1746 - 2491 - 3203 - 1748 + 2493 + 3212 + 1746 - 3252 + 3260 7915 - 1748 + 1746 - 10983 + 11053 121029 - 624 + 623 @@ -4347,62 +4421,62 @@ 1 2 - 1997 + 1996 2 4 - 1748 + 1746 4 7 - 1748 + 1746 7 18 - 1872 + 1871 19 43 - 1748 + 1746 44 60 - 1748 + 1746 66 93 - 1748 + 1746 96 117 - 1748 + 1746 117 150 - 1748 + 1746 150 169 - 1748 + 1746 169 181 - 1748 + 1746 182 217 - 1872 + 1871 243 @@ -4423,67 +4497,67 @@ 1 2 - 1872 + 1871 2 5 - 1872 + 1871 5 11 - 1748 + 1746 11 36 - 1748 + 1746 36 101 - 1748 + 1746 108 217 - 1748 + 1746 - 226 + 225 543 - 1748 + 1746 633 - 1057 - 1748 + 1059 + 1746 - 1072 - 1409 - 1748 + 1071 + 1410 + 1746 - 1416 - 1614 - 1748 + 1414 + 1610 + 1746 - 1615 - 1810 - 1748 + 1613 + 1807 + 1746 - 1826 - 3777 - 1748 + 1834 + 3791 + 1746 - 3834 + 3837 59554 - 749 + 748 @@ -4499,67 +4573,67 @@ 1 2 - 1872 + 1871 2 5 - 1872 + 1871 5 11 - 1748 + 1746 11 36 - 1748 + 1746 36 102 - 1748 + 1746 109 218 - 1748 + 1746 - 225 + 224 545 - 1748 + 1746 631 - 1055 - 1748 + 1057 + 1746 - 1074 + 1073 1407 - 1748 + 1746 - 1425 - 1611 - 1748 + 1423 + 1609 + 1746 - 1614 - 1807 - 1748 + 1612 + 1805 + 1746 - 1827 - 3760 - 1748 + 1835 + 3774 + 1746 - 3827 + 3830 59562 - 749 + 748 @@ -4575,67 +4649,67 @@ 1 2 - 2122 + 2120 2 5 - 1498 + 1497 5 8 - 1623 + 1621 8 13 - 1748 + 1746 13 23 - 1997 + 1996 23 33 - 1872 + 1871 34 44 - 1748 + 1746 45 57 - 1748 + 1746 58 - 74 - 1997 + 73 + 1497 - 77 - 86 - 1872 + 73 + 83 + 1746 - 86 - 98 - 1748 + 83 + 92 + 1746 - 98 - 160 - 1748 + 92 + 144 + 1746 - 258 + 147 299 - 249 + 873 @@ -4651,32 +4725,32 @@ 1 2 - 4959830 + 4955347 2 3 - 782270 + 781563 3 4 - 545279 + 544786 4 12 - 568378 + 567865 12 - 96 - 564757 + 95 + 563498 - 96 + 95 620 - 88028 + 88697 @@ -4692,27 +4766,27 @@ 1 2 - 5021138 + 5016599 2 3 - 1224911 + 1223804 3 6 - 633932 + 633359 6 52 - 564633 + 564122 52 329 - 63930 + 63872 @@ -4728,12 +4802,12 @@ 1 2 - 7057912 + 7051657 2 - 18 - 450632 + 15 + 450100 @@ -4749,27 +4823,27 @@ 1 2 - 5645580 + 5640478 2 3 - 480974 + 480539 3 7 - 587607 + 587076 7 25 - 569752 + 568863 25 89 - 224629 + 224800 @@ -4785,32 +4859,32 @@ 1 2 - 5029629 + 5025082 2 3 - 744436 + 743763 3 4 - 540034 + 539546 4 12 - 588107 + 587575 12 72 - 563509 + 562750 72 250 - 42828 + 43038 @@ -4826,52 +4900,52 @@ 1 2 - 15732 + 15718 2 3 - 5618 + 5613 3 7 - 4245 + 4241 7 17 - 4120 + 4116 17 33 - 4120 + 4116 33 106 - 4120 + 4116 114 689 - 4120 + 4116 721 - 2458 - 4120 + 2460 + 4116 - 2593 - 4731 - 4120 + 2595 + 4737 + 4116 4759 33780 - 3121 + 3118 @@ -4887,52 +4961,52 @@ 1 2 - 18604 + 18587 2 3 - 5618 + 5613 3 5 - 3621 + 3617 5 7 - 3745 + 3742 7 16 - 4370 + 4366 16 80 - 4120 + 4116 81 152 - 4245 + 4241 158 212 - 4245 + 4241 212 265 - 4120 + 4116 265 329 - 749 + 748 @@ -4948,52 +5022,52 @@ 1 2 - 15982 + 15968 2 3 - 5993 + 5988 3 8 - 4245 + 4241 8 18 - 4370 + 4366 18 42 - 4120 + 4116 43 218 - 4120 + 4116 - 235 - 759 - 4120 + 234 + 758 + 4116 - 768 - 2177 - 4120 + 767 + 2176 + 4116 - 2209 - 2884 - 4120 + 2206 + 2882 + 4116 - 2885 + 2890 30763 - 2247 + 2245 @@ -5009,52 +5083,52 @@ 1 2 - 17231 + 17215 2 3 - 6243 + 6237 3 4 - 3246 + 3243 4 7 - 4245 + 4241 7 14 - 4245 + 4241 14 28 - 4120 + 4491 28 - 45 - 4245 + 46 + 4116 - 45 - 69 - 4120 + 46 + 70 + 4116 - 69 - 81 - 4245 + 70 + 82 + 4241 - 81 + 82 117 - 1498 + 1247 @@ -5070,52 +5144,52 @@ 1 2 - 15982 + 15968 2 3 - 5993 + 5988 3 8 - 4245 + 4241 8 18 - 4370 + 4366 18 41 - 4120 + 4116 43 217 - 4120 + 4116 - 233 - 756 - 4120 + 232 + 755 + 4116 768 - 2177 - 4120 + 2176 + 4116 - 2208 - 2858 - 4120 + 2206 + 2862 + 4116 - 2868 + 2867 30757 - 2247 + 2245 @@ -5125,15 +5199,15 @@ files - 65211 + 65207 id - 65211 + 65207 name - 65211 + 65207 @@ -5147,7 +5221,7 @@ 1 2 - 65211 + 65207 @@ -5163,7 +5237,7 @@ 1 2 - 65211 + 65207 @@ -5173,15 +5247,15 @@ folders - 12389 + 12388 id - 12389 + 12388 name - 12389 + 12388 @@ -5195,7 +5269,7 @@ 1 2 - 12389 + 12388 @@ -5211,7 +5285,7 @@ 1 2 - 12389 + 12388 @@ -5221,15 +5295,15 @@ containerparent - 77579 + 77574 parent - 12389 + 12388 child - 77579 + 77574 @@ -5243,7 +5317,7 @@ 1 2 - 6031 + 6030 2 @@ -5294,7 +5368,7 @@ 1 2 - 77579 + 77574 @@ -5304,23 +5378,23 @@ numlines - 808616 + 807885 element_id - 807492 + 806762 num_lines - 39456 + 39421 num_code - 34087 + 34056 num_comment - 18230 + 18338 @@ -5334,12 +5408,12 @@ 1 2 - 806368 + 805640 2 3 - 1123 + 1122 @@ -5355,12 +5429,12 @@ 1 2 - 806368 + 805640 2 3 - 1123 + 1122 @@ -5376,7 +5450,7 @@ 1 2 - 807242 + 806513 2 @@ -5397,27 +5471,27 @@ 1 2 - 26720 + 26696 2 3 - 3745 + 3742 3 5 - 3371 + 3368 5 35 - 2996 + 2994 39 1983 - 2622 + 2619 @@ -5433,27 +5507,27 @@ 1 2 - 27220 + 27195 2 3 - 4120 + 4116 3 4 - 2497 + 2495 4 7 - 3496 + 3493 7 12 - 2122 + 2120 @@ -5469,27 +5543,27 @@ 1 2 - 26845 + 26821 2 3 - 4120 + 4116 3 4 - 2372 + 2370 4 6 - 3246 + 3243 6 10 - 2871 + 2869 @@ -5505,32 +5579,32 @@ 1 2 - 21851 + 21831 2 3 - 3621 + 3617 3 4 - 2372 + 2370 4 13 - 2871 + 2869 14 198 - 2622 + 2619 204 2092 - 749 + 748 @@ -5546,32 +5620,32 @@ 1 2 - 22225 + 22205 2 3 - 3621 + 3617 3 4 - 2122 + 2120 4 6 - 1872 + 1871 6 9 - 2746 + 2744 9 13 - 1498 + 1497 @@ -5587,27 +5661,27 @@ 1 2 - 21975 + 21956 2 3 - 4245 + 4241 3 5 - 2871 + 2869 5 8 - 3121 + 3118 8 12 - 1872 + 1871 @@ -5623,32 +5697,32 @@ 1 2 - 11112 + 11352 2 3 - 2122 + 1996 3 4 - 1123 + 1122 4 7 - 1498 + 1497 8 - 21 - 1373 + 22 + 1497 - 21 + 42 3651 - 998 + 873 @@ -5664,32 +5738,32 @@ 1 2 - 11112 + 11352 2 3 - 2122 + 1996 3 4 - 1123 + 1122 4 7 - 1623 + 1621 8 - 21 - 1373 + 27 + 1497 - 26 + 30 48 - 874 + 748 @@ -5705,32 +5779,32 @@ 1 2 - 11112 + 11352 2 3 - 2122 + 1996 3 4 - 1373 + 1372 4 - 7 - 1373 + 8 + 1497 - 7 - 21 - 1373 + 8 + 31 + 1497 - 23 + 35 42 - 874 + 623 @@ -6343,9 +6417,391 @@ + + pch_uses + 4134 + + + pch + 162 + + + compilation + 4134 + + + id + 4134 + + + + + pch + compilation + + + 12 + + + 1 + 2 + 24 + + + 4 + 5 + 8 + + + 8 + 9 + 8 + + + 10 + 11 + 16 + + + 11 + 12 + 8 + + + 13 + 14 + 8 + + + 14 + 15 + 8 + + + 19 + 20 + 16 + + + 24 + 25 + 8 + + + 25 + 26 + 8 + + + 26 + 27 + 8 + + + 36 + 37 + 8 + + + 42 + 43 + 8 + + + 51 + 52 + 8 + + + 87 + 88 + 8 + + + 107 + 108 + 8 + + + + + + + pch + id + + + 12 + + + 1 + 2 + 24 + + + 4 + 5 + 8 + + + 8 + 9 + 8 + + + 10 + 11 + 16 + + + 11 + 12 + 8 + + + 13 + 14 + 8 + + + 14 + 15 + 8 + + + 19 + 20 + 16 + + + 24 + 25 + 8 + + + 25 + 26 + 8 + + + 26 + 27 + 8 + + + 36 + 37 + 8 + + + 42 + 43 + 8 + + + 51 + 52 + 8 + + + 87 + 88 + 8 + + + 107 + 108 + 8 + + + + + + + compilation + pch + + + 12 + + + 1 + 2 + 4134 + + + + + + + compilation + id + + + 12 + + + 1 + 2 + 4134 + + + + + + + id + pch + + + 12 + + + 1 + 2 + 4134 + + + + + + + id + compilation + + + 12 + + + 1 + 2 + 4134 + + + + + + + + + pch_creations + 249 + + + pch + 249 + + + compilation + 249 + + + from + 249 + + + + + pch + compilation + + + 12 + + + 1 + 2 + 249 + + + + + + + pch + from + + + 12 + + + 1 + 2 + 249 + + + + + + + compilation + pch + + + 12 + + + 1 + 2 + 249 + + + + + + + compilation + from + + + 12 + + + 1 + 2 + 249 + + + + + + + from + pch + + + 12 + + + 1 + 2 + 249 + + + + + + + from + compilation + + + 12 + + + 1 + 2 + 249 + + + + + + + fileannotations - 4200439 + 4200182 id @@ -6357,11 +6813,11 @@ name - 58715 + 58711 value - 39513 + 39510 @@ -6380,7 +6836,7 @@ 2 3 - 5566 + 5565 @@ -6611,17 +7067,17 @@ 2 3 - 4362 + 4361 3 5 - 5059 + 5058 5 7 - 4098 + 4097 7 @@ -6636,7 +7092,7 @@ 16 19 - 4890 + 4889 19 @@ -6656,12 +7112,12 @@ 128 459 - 4626 + 4625 459 546 - 1711 + 1710 @@ -6677,7 +7133,7 @@ 1 2 - 58715 + 58711 @@ -6698,12 +7154,12 @@ 2 3 - 7689 + 7688 3 4 - 4098 + 4097 4 @@ -6713,7 +7169,7 @@ 6 8 - 3422 + 3421 8 @@ -6723,17 +7179,17 @@ 11 17 - 5397 + 5396 17 23 - 4700 + 4699 23 41 - 4679 + 4678 41 @@ -6809,7 +7265,7 @@ 81 151 - 3084 + 3083 151 @@ -6824,7 +7280,7 @@ 473 547 - 2313 + 2312 @@ -6840,7 +7296,7 @@ 1 2 - 39502 + 39500 2 @@ -6861,7 +7317,7 @@ 1 2 - 3401 + 3400 2 @@ -6876,7 +7332,7 @@ 5 8 - 2482 + 2481 8 @@ -6906,7 +7362,7 @@ 41 66 - 2989 + 2988 66 @@ -6916,7 +7372,7 @@ 92 113 - 2989 + 2988 113 @@ -6936,15 +7392,15 @@ inmacroexpansion - 149995963 + 149996213 id - 24670878 + 24670919 inv - 3705272 + 3705278 @@ -6958,37 +7414,37 @@ 1 3 - 2209399 + 2209403 3 5 - 1474977 + 1474980 5 6 - 1620369 + 1620372 6 7 - 6582545 + 6582556 7 8 - 8719001 + 8719015 8 9 - 3557049 + 3557055 9 22 - 507534 + 507535 @@ -7004,17 +7460,17 @@ 1 2 - 531661 + 531662 2 3 - 743208 + 743209 3 4 - 481512 + 481513 4 @@ -7039,17 +7495,17 @@ 10 11 - 444650 + 444651 11 337 - 307798 + 307799 339 423 - 281755 + 281756 423 @@ -7064,15 +7520,15 @@ affectedbymacroexpansion - 48735840 + 48735923 id - 7044740 + 7044754 inv - 3803121 + 3803128 @@ -7086,32 +7542,32 @@ 1 2 - 3846709 + 3846717 2 3 - 766305 + 766306 3 4 - 361841 + 361842 4 5 - 772736 + 772737 5 12 - 535160 + 535161 12 50 - 556267 + 556268 50 @@ -7132,12 +7588,12 @@ 1 4 - 313248 + 313249 4 7 - 316607 + 316608 7 @@ -7147,12 +7603,12 @@ 9 12 - 342938 + 342939 12 13 - 456004 + 456005 13 @@ -7162,7 +7618,7 @@ 14 15 - 408038 + 408039 15 @@ -7172,17 +7628,17 @@ 16 17 - 377677 + 377678 17 18 - 200636 + 200637 18 20 - 344255 + 344256 20 @@ -7202,19 +7658,19 @@ macroinvocations - 40338469 + 40337807 id - 40338469 + 40337807 macro_id - 182070 + 182049 location - 5912755 + 5912946 kind @@ -7232,7 +7688,7 @@ 1 2 - 40338469 + 40337807 @@ -7248,7 +7704,7 @@ 1 2 - 40338469 + 40337807 @@ -7264,7 +7720,7 @@ 1 2 - 40338469 + 40337807 @@ -7280,47 +7736,47 @@ 1 2 - 60781 + 60774 2 3 - 27558 + 27555 3 4 - 17972 + 17970 4 5 - 10021 + 10020 5 7 - 13779 + 13777 7 13 - 14705 + 14703 13 33 - 13779 + 13777 33 180 - 13670 + 13668 181 - 72144 - 9803 + 72152 + 9802 @@ -7336,42 +7792,42 @@ 1 2 - 77283 + 77274 2 3 - 30553 + 30550 3 4 - 14323 + 14322 4 5 - 10293 + 10292 5 8 - 14105 + 14104 8 18 - 14160 + 14158 18 88 - 13670 + 13668 89 - 12189 - 7679 + 12187 + 7678 @@ -7387,7 +7843,7 @@ 1 2 - 177495 + 177475 2 @@ -7408,17 +7864,17 @@ 1 2 - 5255927 + 5256194 2 4 - 422362 + 422314 4 - 72144 - 234464 + 72152 + 234437 @@ -7434,12 +7890,12 @@ 1 2 - 5890588 + 5890782 2 37 - 22166 + 22164 @@ -7455,7 +7911,7 @@ 1 2 - 5912755 + 5912946 @@ -7474,8 +7930,8 @@ 54 - 739164 - 739165 + 739237 + 739238 54 @@ -7516,8 +7972,8 @@ 54 - 107495 - 107496 + 107511 + 107512 54 @@ -7528,15 +7984,15 @@ macroparent - 33655984 + 33655219 id - 33655984 + 33655219 parent_id - 15926379 + 15926236 @@ -7550,7 +8006,7 @@ 1 2 - 33655984 + 33655219 @@ -7566,27 +8022,27 @@ 1 2 - 7806498 + 7806472 2 3 - 1595448 + 1595482 3 4 - 4702906 + 4702965 4 5 - 1295464 + 1295315 5 205 - 526061 + 526000 @@ -7596,15 +8052,15 @@ macrolocationbind - 6046191 + 6041019 id - 4227950 + 4222263 location - 2278566 + 2279211 @@ -7618,27 +8074,27 @@ 1 2 - 3302009 + 3296060 2 3 - 491104 + 491244 3 4 - 7893 + 7896 4 5 - 413756 + 413873 5 17 - 13185 + 13189 @@ -7654,27 +8110,27 @@ 1 2 - 1336578 + 1336957 2 3 - 481984 + 482121 3 4 - 7807 + 7810 4 5 - 428082 + 428203 5 522 - 24112 + 24118 @@ -7684,11 +8140,11 @@ macro_argument_unexpanded - 82497361 + 82490730 invocation - 26285935 + 26282743 argument_index @@ -7696,7 +8152,7 @@ text - 343260 + 343239 @@ -7710,22 +8166,22 @@ 1 2 - 9683509 + 9681332 2 3 - 9770372 + 9769775 3 4 - 5002131 + 5001825 4 67 - 1829922 + 1829810 @@ -7741,22 +8197,22 @@ 1 2 - 9866140 + 9863952 2 3 - 9787916 + 9787317 3 4 - 4845472 + 4845176 4 67 - 1786405 + 1786296 @@ -7781,7 +8237,7 @@ 646840 - 2488681 + 2488531 31 @@ -7824,52 +8280,52 @@ 1 2 - 39703 + 39700 2 3 - 62327 + 62323 3 4 - 21029 + 21028 4 5 - 34580 + 34578 5 6 - 39249 + 39246 6 9 - 30873 + 30871 9 15 - 28982 + 28980 15 26 - 25887 + 25886 26 57 - 27144 + 27143 57 517 - 25993 + 25991 518 @@ -7890,12 +8346,12 @@ 1 2 - 243173 + 243158 2 3 - 89873 + 89868 3 @@ -7910,11 +8366,11 @@ macro_argument_expanded - 82497361 + 82490730 invocation - 26285935 + 26282743 argument_index @@ -7922,7 +8378,7 @@ text - 207927 + 207914 @@ -7936,22 +8392,22 @@ 1 2 - 9683509 + 9681332 2 3 - 9770372 + 9769775 3 4 - 5002131 + 5001825 4 67 - 1829922 + 1829810 @@ -7967,22 +8423,22 @@ 1 2 - 12642108 + 12639750 2 3 - 8428244 + 8427729 3 4 - 4225217 + 4224959 4 9 - 990364 + 990304 @@ -8007,7 +8463,7 @@ 646840 - 2488681 + 2488531 31 @@ -8050,22 +8506,22 @@ 1 2 - 21832 + 21830 2 3 - 26859 + 26858 3 4 - 43495 + 43492 4 5 - 15906 + 15905 5 @@ -8075,32 +8531,32 @@ 6 7 - 18399 + 18398 7 10 - 18969 + 18968 10 19 - 18325 + 18324 19 51 - 15779 + 15778 51 252 - 15600 + 15599 252 - 1169584 - 9495 + 1169434 + 9494 @@ -8116,17 +8572,17 @@ 1 2 - 105083 + 105076 2 3 - 88912 + 88907 3 66 - 13931 + 13930 @@ -8136,19 +8592,19 @@ functions - 4053071 + 4049407 id - 4053071 + 4049407 name - 1694897 + 1693365 kind - 874 + 873 @@ -8162,7 +8618,7 @@ 1 2 - 4053071 + 4049407 @@ -8178,7 +8634,7 @@ 1 2 - 4053071 + 4049407 @@ -8194,17 +8650,17 @@ 1 2 - 1448542 + 1447232 2 4 - 139098 + 138972 4 3162 - 107257 + 107160 @@ -8220,12 +8676,12 @@ 1 2 - 1692026 + 1690496 2 3 - 2871 + 2869 @@ -8327,26 +8783,26 @@ builtin_functions - 30926 + 30924 id - 30926 + 30924 function_entry_point - 1141555 + 1141516 id - 1137808 + 1137768 entry_point - 1141555 + 1141516 @@ -8360,7 +8816,7 @@ 1 2 - 1134605 + 1134566 2 @@ -8381,7 +8837,7 @@ 1 2 - 1141555 + 1141516 @@ -8391,15 +8847,15 @@ function_return_type - 4070552 + 4066872 id - 4053071 + 4049407 return_type - 619822 + 619262 @@ -8413,12 +8869,12 @@ 1 2 - 4035590 + 4031942 2 3 - 17480 + 17465 @@ -8434,27 +8890,27 @@ 1 2 - 310161 + 309880 2 3 - 213891 + 213697 3 5 - 48072 + 48029 5 365 - 46574 + 46532 432 9944 - 1123 + 1122 @@ -8734,22 +9190,22 @@ purefunctions - 131414 + 131704 id - 131414 + 131704 function_deleted - 88085 + 88084 id - 88085 + 88084 @@ -8767,26 +9223,26 @@ function_prototyped - 4051572 + 4047910 id - 4051572 + 4047910 deduction_guide_for_class - 5868 + 5863 id - 5868 + 5863 class_template - 2247 + 2245 @@ -8800,7 +9256,7 @@ 1 2 - 5868 + 5863 @@ -8816,7 +9272,7 @@ 1 2 - 1123 + 1122 2 @@ -8851,15 +9307,15 @@ member_function_this_type - 674762 + 674152 id - 674762 + 674152 this_type - 176182 + 176023 @@ -8873,7 +9329,7 @@ 1 2 - 674762 + 674152 @@ -8889,37 +9345,37 @@ 1 2 - 47198 + 47155 2 3 - 36959 + 36926 3 4 - 32714 + 32684 4 5 - 20103 + 20084 5 6 - 12860 + 12849 6 10 - 14484 + 14471 10 65 - 11862 + 11851 @@ -8929,27 +9385,27 @@ fun_decls - 4212771 + 4208963 id - 4206778 + 4202975 function - 4028473 + 4024831 type_id - 611831 + 611278 name - 1693399 + 1691868 location - 2815798 + 2813252 @@ -8963,7 +9419,7 @@ 1 2 - 4206778 + 4202975 @@ -8979,12 +9435,12 @@ 1 2 - 4200784 + 4196987 2 3 - 5993 + 5988 @@ -9000,7 +9456,7 @@ 1 2 - 4206778 + 4202975 @@ -9016,7 +9472,7 @@ 1 2 - 4206778 + 4202975 @@ -9032,12 +9488,12 @@ 1 2 - 3864776 + 3861283 2 5 - 163696 + 163548 @@ -9053,12 +9509,12 @@ 1 2 - 4009993 + 4006368 2 3 - 18479 + 18463 @@ -9074,7 +9530,7 @@ 1 2 - 4028473 + 4024831 @@ -9090,12 +9546,12 @@ 1 2 - 3885254 + 3881742 2 4 - 143218 + 143089 @@ -9111,27 +9567,27 @@ 1 2 - 295427 + 295160 2 3 - 220758 + 220559 3 5 - 48447 + 48403 5 364 - 45949 + 45908 364 10292 - 1248 + 1247 @@ -9147,22 +9603,22 @@ 1 2 - 305541 + 305264 2 3 - 212018 + 211826 3 5 - 48072 + 48029 5 1163 - 45949 + 45908 1483 @@ -9183,22 +9639,22 @@ 1 2 - 491962 + 491517 2 3 - 52942 + 52894 3 7 - 50195 + 50149 7 2238 - 16731 + 16716 @@ -9214,22 +9670,22 @@ 1 2 - 455377 + 454965 2 3 - 69549 + 69486 3 6 - 56063 + 56013 6 4756 - 30841 + 30813 @@ -9245,22 +9701,22 @@ 1 2 - 1332543 + 1331339 2 3 - 194662 + 194486 3 11 - 129608 + 129491 11 3169 - 36585 + 36551 @@ -9276,17 +9732,17 @@ 1 2 - 1448042 + 1446733 2 4 - 139597 + 139471 4 3162 - 105759 + 105663 @@ -9302,12 +9758,12 @@ 1 2 - 1603497 + 1602048 2 1596 - 89901 + 89820 @@ -9323,17 +9779,17 @@ 1 2 - 1368504 + 1367267 2 3 - 208522 + 208333 3 1592 - 116372 + 116267 @@ -9349,17 +9805,17 @@ 1 2 - 2422477 + 2420288 2 3 - 251724 + 251497 3 211 - 141595 + 141467 @@ -9375,17 +9831,17 @@ 1 2 - 2441207 + 2439000 2 3 - 233494 + 233283 3 211 - 141095 + 140968 @@ -9401,12 +9857,12 @@ 1 2 - 2701298 + 2698856 2 211 - 114499 + 114396 @@ -9422,12 +9878,12 @@ 1 2 - 2776590 + 2774081 2 8 - 39207 + 39171 @@ -9437,11 +9893,11 @@ fun_def - 1423569 + 1422282 id - 1423569 + 1422282 @@ -9470,15 +9926,15 @@ fun_decl_specifiers - 4283569 + 4279697 id - 1749837 + 1748256 name - 1373 + 1372 @@ -9492,22 +9948,22 @@ 1 2 - 363228 + 362899 2 3 - 262463 + 262225 3 4 - 1101171 + 1100176 4 5 - 22974 + 22954 @@ -9704,26 +10160,26 @@ fun_decl_empty_throws - 420457 + 420912 fun_decl - 420457 + 420912 fun_decl_noexcept - 141829 + 141825 fun_decl - 141829 + 141825 constant - 141353 + 141348 @@ -9737,7 +10193,7 @@ 1 2 - 141829 + 141825 @@ -9753,7 +10209,7 @@ 1 2 - 140910 + 140905 2 @@ -9768,22 +10224,22 @@ fun_decl_empty_noexcept - 1164727 + 1163674 fun_decl - 1164727 + 1163674 fun_decl_typedef_type - 2763 + 2761 fun_decl - 2763 + 2761 typedeftype_id @@ -9801,7 +10257,7 @@ 1 2 - 2763 + 2761 @@ -9889,7 +10345,7 @@ constraint - 28874 + 28873 @@ -10028,7 +10484,7 @@ 1 2 - 28874 + 28873 @@ -10038,19 +10494,19 @@ param_decl_bind - 7317004 + 7310390 id - 7317004 + 7310390 index - 7991 + 7984 fun_decl - 3534887 + 3531692 @@ -10064,7 +10520,7 @@ 1 2 - 7317004 + 7310390 @@ -10080,7 +10536,7 @@ 1 2 - 7317004 + 7310390 @@ -10096,27 +10552,27 @@ 2 3 - 3995 + 3992 6 7 - 1997 + 1996 16 20 - 624 + 623 25 147 - 624 + 623 343 16215 - 624 + 623 28310 @@ -10137,27 +10593,27 @@ 2 3 - 3995 + 3992 6 7 - 1997 + 1996 16 20 - 624 + 623 25 147 - 624 + 623 343 16215 - 624 + 623 28310 @@ -10178,27 +10634,27 @@ 1 2 - 1510349 + 1508984 2 3 - 977182 + 976298 3 4 - 602591 + 602046 4 5 - 290932 + 290669 5 65 - 153831 + 153692 @@ -10214,27 +10670,27 @@ 1 2 - 1510349 + 1508984 2 3 - 977182 + 976298 3 4 - 602591 + 602046 4 5 - 290932 + 290669 5 65 - 153831 + 153692 @@ -10244,27 +10700,27 @@ var_decls - 9398480 + 9389985 id - 9391612 + 9383123 variable - 9042868 + 9034695 type_id - 1457782 + 1456464 name - 853317 + 852546 location - 6280262 + 6274585 @@ -10278,7 +10734,7 @@ 1 2 - 9391612 + 9383123 @@ -10294,12 +10750,12 @@ 1 2 - 9384745 + 9376262 2 3 - 6867 + 6861 @@ -10315,7 +10771,7 @@ 1 2 - 9391612 + 9383123 @@ -10331,7 +10787,7 @@ 1 2 - 9391612 + 9383123 @@ -10347,12 +10803,12 @@ 1 2 - 8711605 + 8703731 2 5 - 331263 + 330963 @@ -10368,12 +10824,12 @@ 1 2 - 8989302 + 8981176 2 3 - 53566 + 53518 @@ -10389,12 +10845,12 @@ 1 2 - 8937359 + 8929280 2 4 - 105509 + 105414 @@ -10410,12 +10866,12 @@ 1 2 - 8791018 + 8783072 2 4 - 251849 + 251622 @@ -10431,27 +10887,27 @@ 1 2 - 850695 + 849926 2 3 - 284314 + 284057 3 5 - 127485 + 127370 5 11 - 113251 + 113148 11 2944 - 82035 + 81961 @@ -10467,27 +10923,27 @@ 1 2 - 871547 + 870759 2 3 - 269330 + 269087 3 5 - 122865 + 122754 5 11 - 113126 + 113024 11 2860 - 80911 + 80838 @@ -10503,22 +10959,22 @@ 1 2 - 1120525 + 1119512 2 3 - 192789 + 192615 3 7 - 115373 + 115269 7 1038 - 29093 + 29066 @@ -10534,27 +10990,27 @@ 1 2 - 986297 + 985405 2 3 - 219260 + 219062 3 6 - 133728 + 133607 6 95 - 109380 + 109281 97 2622 - 9115 + 9106 @@ -10570,32 +11026,32 @@ 1 2 - 466365 + 465943 2 3 - 165943 + 165793 3 4 - 59684 + 59630 4 7 - 65927 + 65868 7 25 - 64179 + 64121 25 27139 - 31215 + 31187 @@ -10611,32 +11067,32 @@ 1 2 - 479351 + 478917 2 3 - 165194 + 165045 3 4 - 54690 + 54640 4 8 - 71671 + 71606 8 45 - 64304 + 64246 45 26704 - 18105 + 18088 @@ -10652,22 +11108,22 @@ 1 2 - 655283 + 654691 2 3 - 110878 + 110778 3 11 - 65553 + 65494 11 3463 - 21601 + 21581 @@ -10683,27 +11139,27 @@ 1 2 - 494209 + 493763 2 3 - 183424 + 183258 3 4 - 51693 + 51646 4 8 - 65053 + 64995 8 22619 - 58935 + 58882 @@ -10719,17 +11175,17 @@ 1 2 - 5780059 + 5774834 2 21 - 472733 + 472306 21 2943 - 27469 + 27445 @@ -10745,12 +11201,12 @@ 1 2 - 5860970 + 5855673 2 2935 - 419291 + 418912 @@ -10766,12 +11222,12 @@ 1 2 - 5981463 + 5976057 2 2555 - 298798 + 298528 @@ -10787,12 +11243,12 @@ 1 2 - 6267900 + 6262235 2 5 - 12361 + 12350 @@ -10802,11 +11258,11 @@ var_def - 3770380 + 3766972 id - 3770380 + 3766972 @@ -10824,11 +11280,11 @@ var_decl_specifiers - 490339 + 489895 id - 490339 + 489895 name @@ -10846,7 +11302,7 @@ 1 2 - 490339 + 489895 @@ -10956,19 +11412,19 @@ type_decls - 1634963 + 1633485 id - 1634963 + 1633485 type_id - 1615984 + 1614523 location - 1548807 + 1547407 @@ -10982,7 +11438,7 @@ 1 2 - 1634963 + 1633485 @@ -10998,7 +11454,7 @@ 1 2 - 1634963 + 1633485 @@ -11014,12 +11470,12 @@ 1 2 - 1599627 + 1598181 2 10 - 16357 + 16342 @@ -11035,12 +11491,12 @@ 1 2 - 1599751 + 1598305 2 10 - 16232 + 16217 @@ -11056,12 +11512,12 @@ 1 2 - 1526706 + 1525326 2 64 - 22100 + 22080 @@ -11077,12 +11533,12 @@ 1 2 - 1526831 + 1525451 2 64 - 21975 + 21956 @@ -11092,22 +11548,22 @@ type_def - 1096551 + 1095560 id - 1096551 + 1095560 type_decl_top - 673602 + 673960 type_decl - 673602 + 673960 @@ -11187,11 +11643,11 @@ namespace_decls - 407321 + 407776 id - 407321 + 407776 namespace_id @@ -11199,11 +11655,11 @@ location - 407321 + 407776 bodylocation - 407321 + 407776 @@ -11217,7 +11673,7 @@ 1 2 - 407321 + 407776 @@ -11233,7 +11689,7 @@ 1 2 - 407321 + 407776 @@ -11249,7 +11705,7 @@ 1 2 - 407321 + 407776 @@ -11308,13 +11764,13 @@ 146 - 268 - 1868 + 270 + 1870 146 2205 - 12449 + 12461 32 @@ -11374,13 +11830,13 @@ 146 - 268 - 1868 + 270 + 1870 146 2205 - 12449 + 12461 32 @@ -11440,13 +11896,13 @@ 146 - 268 - 1868 + 270 + 1870 146 2205 - 12449 + 12461 32 @@ -11463,7 +11919,7 @@ 1 2 - 407321 + 407776 @@ -11479,7 +11935,7 @@ 1 2 - 407321 + 407776 @@ -11495,7 +11951,7 @@ 1 2 - 407321 + 407776 @@ -11511,7 +11967,7 @@ 1 2 - 407321 + 407776 @@ -11527,7 +11983,7 @@ 1 2 - 407321 + 407776 @@ -11543,7 +11999,7 @@ 1 2 - 407321 + 407776 @@ -11553,19 +12009,19 @@ usings - 272082 + 272076 id - 272082 + 272076 element_id - 59053 + 59060 location - 26849 + 26847 kind @@ -11583,7 +12039,7 @@ 1 2 - 272082 + 272076 @@ -11599,7 +12055,7 @@ 1 2 - 272082 + 272076 @@ -11615,7 +12071,7 @@ 1 2 - 272082 + 272076 @@ -11631,7 +12087,7 @@ 1 2 - 51321 + 51329 2 @@ -11657,7 +12113,7 @@ 1 2 - 51321 + 51329 2 @@ -11683,7 +12139,7 @@ 1 2 - 59053 + 59060 @@ -11699,17 +12155,17 @@ 1 2 - 21177 + 21175 2 4 - 2302 + 2291 4 132 - 1943 + 1953 145 @@ -11730,17 +12186,17 @@ 1 2 - 21177 + 21175 2 4 - 2302 + 2291 4 132 - 1943 + 1953 145 @@ -11761,7 +12217,7 @@ 1 2 - 26849 + 26847 @@ -11780,8 +12236,8 @@ 10 - 25367 - 25368 + 25368 + 25369 10 @@ -11801,8 +12257,8 @@ 10 - 5377 - 5378 + 5378 + 5379 10 @@ -11834,15 +12290,15 @@ using_container - 580149 + 580125 parent - 21895 + 21894 child - 272082 + 272076 @@ -11856,12 +12312,12 @@ 1 2 - 10372 + 10371 2 3 - 1616 + 1615 3 @@ -11907,27 +12363,27 @@ 1 2 - 96601 + 96606 2 3 - 120282 + 120274 3 4 - 20099 + 20098 4 5 - 26711 + 26710 5 65 - 8386 + 8385 @@ -11937,23 +12393,23 @@ static_asserts - 173266 + 173263 id - 173266 + 173263 condition - 173266 + 173263 message - 38765 + 38764 location - 22648 + 22647 enclosing @@ -11971,7 +12427,7 @@ 1 2 - 173266 + 173263 @@ -11987,7 +12443,7 @@ 1 2 - 173266 + 173263 @@ -12003,7 +12459,7 @@ 1 2 - 173266 + 173263 @@ -12019,7 +12475,7 @@ 1 2 - 173266 + 173263 @@ -12035,7 +12491,7 @@ 1 2 - 173266 + 173263 @@ -12051,7 +12507,7 @@ 1 2 - 173266 + 173263 @@ -12067,7 +12523,7 @@ 1 2 - 173266 + 173263 @@ -12083,7 +12539,7 @@ 1 2 - 173266 + 173263 @@ -12099,7 +12555,7 @@ 1 2 - 28505 + 28504 2 @@ -12140,7 +12596,7 @@ 1 2 - 28505 + 28504 2 @@ -12181,7 +12637,7 @@ 1 2 - 35922 + 35921 2 @@ -12217,7 +12673,7 @@ 4 12 - 1909 + 1908 12 @@ -12258,7 +12714,7 @@ 5 6 - 4736 + 4735 6 @@ -12319,7 +12775,7 @@ 5 6 - 4736 + 4735 6 @@ -12391,12 +12847,12 @@ 1 2 - 5069 + 5068 2 3 - 8099 + 8098 3 @@ -12499,7 +12955,7 @@ 1 2 - 5857 + 5856 2 @@ -12545,23 +13001,23 @@ params - 7067152 + 7060764 id - 7026197 + 7019846 function - 3408025 + 3404945 index - 7991 + 7984 type_id - 1221415 + 1220311 @@ -12575,7 +13031,7 @@ 1 2 - 7026197 + 7019846 @@ -12591,7 +13047,7 @@ 1 2 - 7026197 + 7019846 @@ -12607,12 +13063,12 @@ 1 2 - 6985242 + 6978928 2 3 - 40955 + 40918 @@ -12628,27 +13084,27 @@ 1 2 - 1474513 + 1473180 2 3 - 927111 + 926273 3 4 - 579242 + 578718 4 5 - 281067 + 280813 5 65 - 146090 + 145958 @@ -12664,27 +13120,27 @@ 1 2 - 1474513 + 1473180 2 3 - 927111 + 926273 3 4 - 579242 + 578718 4 5 - 281067 + 280813 5 65 - 146090 + 145958 @@ -12700,22 +13156,22 @@ 1 2 - 1783301 + 1781689 2 3 - 1031622 + 1030690 3 4 - 437896 + 437500 4 11 - 155205 + 155065 @@ -12731,27 +13187,27 @@ 2 3 - 3995 + 3992 6 7 - 1997 + 1996 14 18 - 624 + 623 23 138 - 624 + 623 320 15486 - 624 + 623 27294 @@ -12772,27 +13228,27 @@ 2 3 - 3995 + 3992 6 7 - 1997 + 1996 14 18 - 624 + 623 23 138 - 624 + 623 320 15486 - 624 + 623 27294 @@ -12813,27 +13269,27 @@ 1 2 - 3995 + 3992 2 3 - 1997 + 1996 4 7 - 624 + 623 9 55 - 624 + 623 116 2703 - 624 + 623 7497 @@ -12854,27 +13310,27 @@ 1 2 - 738193 + 737526 2 3 - 240612 + 240394 3 5 - 93273 + 93188 5 13 - 93897 + 93812 13 2574 - 55439 + 55389 @@ -12890,27 +13346,27 @@ 1 2 - 820353 + 819612 2 3 - 179803 + 179641 3 6 - 106258 + 106162 6 27 - 92274 + 92190 27 2562 - 22725 + 22704 @@ -12926,17 +13382,17 @@ 1 2 - 996036 + 995136 2 3 - 166942 + 166791 3 65 - 58436 + 58383 @@ -12946,11 +13402,11 @@ overrides - 159781 + 159778 new - 151073 + 151070 old @@ -12968,7 +13424,7 @@ 1 2 - 142372 + 142370 2 @@ -13024,19 +13480,19 @@ membervariables - 1499266 + 1500128 id - 1496815 + 1497677 type_id - 456075 + 456186 name - 641686 + 642157 @@ -13050,7 +13506,7 @@ 1 2 - 1494473 + 1495336 2 @@ -13071,7 +13527,7 @@ 1 2 - 1496815 + 1497677 @@ -13087,22 +13543,22 @@ 1 2 - 338326 + 338450 2 3 - 72218 + 72155 3 10 - 35401 + 35451 10 - 4444 - 10130 + 4445 + 10129 @@ -13118,22 +13574,22 @@ 1 2 - 355917 + 356040 2 3 - 64321 + 64313 3 49 - 34311 + 34253 - 56 - 2185 - 1524 + 49 + 2186 + 1579 @@ -13149,22 +13605,22 @@ 1 2 - 421164 + 421497 2 3 - 122542 + 122419 3 5 - 57785 + 58051 5 656 - 40193 + 40189 @@ -13180,17 +13636,17 @@ 1 2 - 524318 + 524421 2 3 - 72817 + 73190 3 660 - 44550 + 44545 @@ -13200,19 +13656,19 @@ globalvariables - 488591 + 488149 id - 488591 + 488149 type_id - 10363 + 10354 name - 112626 + 112525 @@ -13226,7 +13682,7 @@ 1 2 - 488591 + 488149 @@ -13242,7 +13698,7 @@ 1 2 - 488591 + 488149 @@ -13258,7 +13714,7 @@ 1 2 - 6992 + 6986 2 @@ -13268,17 +13724,17 @@ 3 5 - 749 + 748 5 20 - 874 + 873 20 74 - 874 + 873 152 @@ -13299,7 +13755,7 @@ 1 2 - 7117 + 7110 2 @@ -13309,17 +13765,17 @@ 3 5 - 749 + 748 5 20 - 749 + 748 20 74 - 874 + 873 125 @@ -13340,17 +13796,17 @@ 1 2 - 95395 + 95309 2 7 - 8865 + 8857 7 604 - 8365 + 8358 @@ -13366,12 +13822,12 @@ 1 2 - 97018 + 96931 2 3 - 15358 + 15344 3 @@ -13386,19 +13842,19 @@ localvariables - 726232 + 726313 id - 726232 + 726313 type_id - 53437 + 53445 name - 101525 + 101635 @@ -13412,7 +13868,7 @@ 1 2 - 726232 + 726313 @@ -13428,7 +13884,7 @@ 1 2 - 726232 + 726313 @@ -13444,37 +13900,37 @@ 1 2 - 28883 + 28869 2 3 - 7837 + 7843 3 4 - 4028 + 4029 4 6 - 4053 + 4065 6 12 - 4145 + 4133 12 - 165 - 4008 + 162 + 4009 - 165 - 19323 - 480 + 162 + 19347 + 492 @@ -13490,22 +13946,22 @@ 1 2 - 38383 + 38374 2 3 - 6700 + 6707 3 5 - 4465 + 4478 5 - 3502 - 3888 + 3509 + 3885 @@ -13521,32 +13977,32 @@ 1 2 - 62449 + 62541 2 3 - 16031 + 16039 3 4 - 6524 + 6531 4 8 - 8146 + 8147 8 - 132 - 7617 + 134 + 7623 - 132 - 7547 - 756 + 134 + 7549 + 752 @@ -13562,22 +14018,22 @@ 1 2 - 84480 + 84587 2 3 - 8414 + 8411 3 15 - 7677 + 7683 15 1509 - 953 + 952 @@ -13587,15 +14043,15 @@ autoderivation - 229374 + 229167 var - 229374 + 229167 derivation_type - 624 + 623 @@ -13609,7 +14065,7 @@ 1 2 - 229374 + 229167 @@ -13655,15 +14111,15 @@ orphaned_variables - 44323 + 44322 var - 44323 + 44322 function - 41052 + 41051 @@ -13677,7 +14133,7 @@ 1 2 - 44323 + 44322 @@ -13693,7 +14149,7 @@ 1 2 - 40201 + 40200 2 @@ -13708,19 +14164,19 @@ enumconstants - 345733 + 347817 id - 345733 + 347817 parent - 41337 + 41550 index - 13942 + 13941 type_id @@ -13728,11 +14184,11 @@ name - 345351 + 347435 location - 318338 + 320425 @@ -13746,7 +14202,7 @@ 1 2 - 345733 + 347817 @@ -13762,7 +14218,7 @@ 1 2 - 345733 + 347817 @@ -13778,7 +14234,7 @@ 1 2 - 345733 + 347817 @@ -13794,7 +14250,7 @@ 1 2 - 345733 + 347817 @@ -13810,7 +14266,7 @@ 1 2 - 345733 + 347817 @@ -13831,17 +14287,17 @@ 2 3 - 5773 + 5772 3 4 - 8714 + 8713 4 5 - 5500 + 5554 5 @@ -13861,22 +14317,22 @@ 8 10 - 2941 + 2995 10 15 - 3322 + 3430 15 - 32 - 3104 + 33 + 3158 - 32 + 33 257 - 1361 + 1306 @@ -13897,17 +14353,17 @@ 2 3 - 5773 + 5772 3 4 - 8714 + 8713 4 5 - 5500 + 5554 5 @@ -13927,22 +14383,22 @@ 8 10 - 2941 + 2995 10 15 - 3322 + 3430 15 - 32 - 3104 + 33 + 3158 - 32 + 33 257 - 1361 + 1306 @@ -13958,7 +14414,7 @@ 1 2 - 41337 + 41550 @@ -13979,17 +14435,17 @@ 2 3 - 5773 + 5772 3 4 - 8714 + 8713 4 5 - 5500 + 5554 5 @@ -14009,22 +14465,22 @@ 8 10 - 2941 + 2995 10 15 - 3322 + 3430 15 - 32 - 3104 + 33 + 3158 - 32 + 33 257 - 1361 + 1306 @@ -14040,7 +14496,7 @@ 1 2 - 2124 + 2123 2 @@ -14050,12 +14506,12 @@ 3 4 - 8768 + 8767 4 5 - 5446 + 5500 5 @@ -14075,22 +14531,22 @@ 8 11 - 3757 + 3811 11 17 - 3104 + 3212 17 - 123 - 3104 + 165 + 3158 - 164 + 256 257 - 108 + 54 @@ -14145,7 +14601,7 @@ 64 - 760 + 764 980 @@ -14201,7 +14657,7 @@ 64 - 760 + 764 980 @@ -14218,7 +14674,7 @@ 1 2 - 13942 + 13941 @@ -14273,7 +14729,7 @@ 64 - 757 + 761 980 @@ -14329,7 +14785,7 @@ 64 - 760 + 764 980 @@ -14344,8 +14800,8 @@ 12 - 6348 - 6349 + 6387 + 6388 54 @@ -14360,8 +14816,8 @@ 12 - 759 - 760 + 763 + 764 54 @@ -14392,8 +14848,8 @@ 12 - 6341 - 6342 + 6380 + 6381 54 @@ -14408,8 +14864,8 @@ 12 - 5845 - 5846 + 5884 + 5885 54 @@ -14426,7 +14882,7 @@ 1 2 - 344970 + 347054 2 @@ -14447,7 +14903,7 @@ 1 2 - 344970 + 347054 2 @@ -14468,7 +14924,7 @@ 1 2 - 345351 + 347435 @@ -14484,7 +14940,7 @@ 1 2 - 345351 + 347435 @@ -14500,7 +14956,7 @@ 1 2 - 344970 + 347054 2 @@ -14521,7 +14977,7 @@ 1 2 - 317303 + 319390 2 @@ -14542,7 +14998,7 @@ 1 2 - 318338 + 320425 @@ -14558,7 +15014,7 @@ 1 2 - 317303 + 319390 2 @@ -14579,7 +15035,7 @@ 1 2 - 318338 + 320425 @@ -14595,7 +15051,7 @@ 1 2 - 317303 + 319390 2 @@ -14610,23 +15066,23 @@ builtintypes - 7616 + 7609 id - 7616 + 7609 name - 7616 + 7609 kind - 7616 + 7609 size - 874 + 873 sign @@ -14634,7 +15090,7 @@ alignment - 624 + 623 @@ -14648,7 +15104,7 @@ 1 2 - 7616 + 7609 @@ -14664,7 +15120,7 @@ 1 2 - 7616 + 7609 @@ -14680,7 +15136,7 @@ 1 2 - 7616 + 7609 @@ -14696,7 +15152,7 @@ 1 2 - 7616 + 7609 @@ -14712,7 +15168,7 @@ 1 2 - 7616 + 7609 @@ -14728,7 +15184,7 @@ 1 2 - 7616 + 7609 @@ -14744,7 +15200,7 @@ 1 2 - 7616 + 7609 @@ -14760,7 +15216,7 @@ 1 2 - 7616 + 7609 @@ -14776,7 +15232,7 @@ 1 2 - 7616 + 7609 @@ -14792,7 +15248,7 @@ 1 2 - 7616 + 7609 @@ -14808,7 +15264,7 @@ 1 2 - 7616 + 7609 @@ -14824,7 +15280,7 @@ 1 2 - 7616 + 7609 @@ -14840,7 +15296,7 @@ 1 2 - 7616 + 7609 @@ -14856,7 +15312,7 @@ 1 2 - 7616 + 7609 @@ -14872,7 +15328,7 @@ 1 2 - 7616 + 7609 @@ -15016,7 +15472,7 @@ 3 4 - 624 + 623 @@ -15261,7 +15717,7 @@ 2 3 - 624 + 623 @@ -15277,7 +15733,7 @@ 3 4 - 624 + 623 @@ -15287,23 +15743,23 @@ derivedtypes - 3033685 + 3030942 id - 3033685 + 3030942 name - 1461902 + 1460581 kind - 749 + 748 type_id - 1948495 + 1946734 @@ -15317,7 +15773,7 @@ 1 2 - 3033685 + 3030942 @@ -15333,7 +15789,7 @@ 1 2 - 3033685 + 3030942 @@ -15349,7 +15805,7 @@ 1 2 - 3033685 + 3030942 @@ -15365,17 +15821,17 @@ 1 2 - 1345279 + 1344064 2 28 - 110004 + 109905 29 4302 - 6617 + 6611 @@ -15391,7 +15847,7 @@ 1 2 - 1461902 + 1460581 @@ -15407,17 +15863,17 @@ 1 2 - 1345404 + 1344188 2 28 - 109879 + 109780 29 4302 - 6617 + 6611 @@ -15556,22 +16012,22 @@ 1 2 - 1318684 + 1317492 2 3 - 376213 + 375873 3 4 - 123365 + 123253 4 137 - 130232 + 130114 @@ -15587,22 +16043,22 @@ 1 2 - 1320182 + 1318989 2 3 - 376213 + 375873 3 4 - 121866 + 121756 4 137 - 130232 + 130114 @@ -15618,22 +16074,22 @@ 1 2 - 1320557 + 1319363 2 3 - 376838 + 376497 3 4 - 123614 + 123503 4 6 - 127485 + 127370 @@ -15643,11 +16099,11 @@ pointerishsize - 2249417 + 2247383 id - 2249417 + 2247383 size @@ -15669,7 +16125,7 @@ 1 2 - 2249417 + 2247383 @@ -15685,7 +16141,7 @@ 1 2 - 2249417 + 2247383 @@ -15769,23 +16225,23 @@ arraysizes - 80661 + 80588 id - 80661 + 80588 num_elements - 17855 + 17839 bytesize - 20227 + 20209 alignment - 624 + 623 @@ -15799,7 +16255,7 @@ 1 2 - 80661 + 80588 @@ -15815,7 +16271,7 @@ 1 2 - 80661 + 80588 @@ -15831,7 +16287,7 @@ 1 2 - 80661 + 80588 @@ -15852,7 +16308,7 @@ 2 3 - 10863 + 10853 3 @@ -15862,17 +16318,17 @@ 4 5 - 3496 + 3493 5 9 - 1498 + 1497 9 42 - 1373 + 1372 56 @@ -15893,12 +16349,12 @@ 1 2 - 11737 + 11726 2 3 - 3995 + 3992 3 @@ -15908,7 +16364,7 @@ 5 11 - 1123 + 1122 @@ -15924,22 +16380,22 @@ 1 2 - 11737 + 11726 2 3 - 3995 + 3992 3 4 - 749 + 748 4 6 - 1373 + 1372 @@ -15955,12 +16411,12 @@ 1 2 - 624 + 623 2 3 - 12736 + 12724 3 @@ -15970,17 +16426,17 @@ 4 5 - 2746 + 2744 5 7 - 1498 + 1497 7 17 - 1623 + 1621 24 @@ -16001,17 +16457,17 @@ 1 2 - 14609 + 14595 2 3 - 3621 + 3617 3 6 - 1872 + 1871 6 @@ -16032,17 +16488,17 @@ 1 2 - 14858 + 14845 2 3 - 3371 + 3368 3 5 - 1623 + 1621 5 @@ -16208,15 +16664,15 @@ typedefbase - 1762239 + 1762205 id - 1762239 + 1762205 type_id - 838004 + 837964 @@ -16230,7 +16686,7 @@ 1 2 - 1762239 + 1762205 @@ -16246,22 +16702,22 @@ 1 2 - 662556 + 662494 2 3 - 80927 + 80933 3 6 - 64154 + 64172 6 4526 - 30366 + 30364 @@ -16271,7 +16727,7 @@ decltypes - 814476 + 814477 id @@ -16279,7 +16735,7 @@ expr - 814476 + 814477 kind @@ -16409,7 +16865,7 @@ 1 2 - 814476 + 814477 @@ -16425,7 +16881,7 @@ 1 2 - 814476 + 814477 @@ -16441,7 +16897,7 @@ 1 2 - 814476 + 814477 @@ -16457,7 +16913,7 @@ 1 2 - 814476 + 814477 @@ -17035,15 +17491,15 @@ usertypes - 4151525 + 4151345 id - 4151525 + 4151345 name - 918510 + 918453 kind @@ -17061,7 +17517,7 @@ 1 2 - 4151525 + 4151345 @@ -17077,7 +17533,7 @@ 1 2 - 4151525 + 4151345 @@ -17093,22 +17549,22 @@ 1 2 - 654243 + 654203 2 3 - 158665 + 158655 3 8 - 70566 + 70561 8 32669 - 35034 + 35032 @@ -17124,12 +17580,12 @@ 1 2 - 866765 + 866712 2 10 - 51744 + 51741 @@ -17198,8 +17654,8 @@ 10 - 166844 - 166845 + 166851 + 166852 10 @@ -17281,11 +17737,11 @@ usertypesize - 1363780 + 1363697 id - 1363780 + 1363697 size @@ -17307,7 +17763,7 @@ 1 2 - 1363780 + 1363697 @@ -17323,7 +17779,7 @@ 1 2 - 1363780 + 1363697 @@ -17517,26 +17973,26 @@ usertype_final - 11487 + 11477 id - 11487 + 11477 usertype_uuid - 47628 + 47716 id - 47628 + 47716 uuid - 47148 + 47237 @@ -17550,7 +18006,7 @@ 1 2 - 47628 + 47716 @@ -17566,7 +18022,7 @@ 1 2 - 46669 + 46758 2 @@ -17581,11 +18037,11 @@ usertype_alias_kind - 1762239 + 1762205 id - 1762239 + 1762205 alias_kind @@ -17603,7 +18059,7 @@ 1 2 - 1762239 + 1762205 @@ -17617,8 +18073,8 @@ 12 - 36900 - 36901 + 36907 + 36908 10 @@ -17634,11 +18090,11 @@ nontype_template_parameters - 766283 + 766257 id - 766283 + 766257 @@ -17718,15 +18174,15 @@ mangled_name - 7859536 + 7852432 id - 7859536 + 7852432 mangled_name - 6370039 + 6364281 is_complete @@ -17744,7 +18200,7 @@ 1 2 - 7859536 + 7852432 @@ -17760,7 +18216,7 @@ 1 2 - 7859536 + 7852432 @@ -17776,12 +18232,12 @@ 1 2 - 6041648 + 6036187 2 1120 - 328391 + 328094 @@ -17797,7 +18253,7 @@ 1 2 - 6370039 + 6364281 @@ -17849,59 +18305,59 @@ is_pod_class - 593757 + 593736 id - 593757 + 593736 is_standard_layout_class - 1124388 + 1124319 id - 1124388 + 1124319 is_complete - 1346258 + 1346175 id - 1346258 + 1346175 is_class_template - 232167 + 232153 id - 232167 + 232153 class_instantiation - 1126046 + 1125977 to - 1123004 + 1122936 from - 71801 + 71797 @@ -17915,7 +18371,7 @@ 1 2 - 1120871 + 1120802 2 @@ -17936,7 +18392,7 @@ 1 2 - 20490 + 20499 2 @@ -17946,7 +18402,7 @@ 3 4 - 7108 + 7107 4 @@ -17956,22 +18412,22 @@ 5 7 - 6073 + 6072 7 10 - 5724 + 5713 10 17 - 5904 + 5903 17 51 - 5397 + 5396 51 @@ -17986,11 +18442,11 @@ class_template_argument - 2898595 + 2898417 type_id - 1367076 + 1366992 index @@ -17998,7 +18454,7 @@ arg_type - 822077 + 822026 @@ -18012,27 +18468,27 @@ 1 2 - 579347 + 579311 2 3 - 410278 + 410252 3 4 - 251042 + 251027 4 7 - 103097 + 103091 7 113 - 23310 + 23309 @@ -18048,22 +18504,22 @@ 1 2 - 607886 + 607849 2 3 - 424283 + 424257 3 4 - 251876 + 251861 4 113 - 83029 + 83024 @@ -18171,27 +18627,27 @@ 1 2 - 513703 + 513671 2 3 - 167643 + 167632 3 5 - 75086 + 75082 5 47 - 61736 + 61732 47 12618 - 3908 + 3907 @@ -18207,17 +18663,17 @@ 1 2 - 723795 + 723751 2 3 - 79913 + 79908 3 22 - 18367 + 18366 @@ -18227,11 +18683,11 @@ class_template_argument_value - 510083 + 510065 type_id - 205811 + 205804 index @@ -18239,7 +18695,7 @@ arg_value - 509947 + 509929 @@ -18253,12 +18709,12 @@ 1 2 - 155798 + 155792 2 3 - 43370 + 43368 3 @@ -18279,12 +18735,12 @@ 1 2 - 147928 + 147923 2 3 - 40474 + 40472 3 @@ -18422,7 +18878,7 @@ 1 2 - 509811 + 509793 2 @@ -18443,7 +18899,7 @@ 1 2 - 509947 + 509929 @@ -18453,15 +18909,15 @@ is_proxy_class_for - 48438 + 48435 id - 48438 + 48435 templ_param_id - 45766 + 45763 @@ -18475,7 +18931,7 @@ 1 2 - 48438 + 48435 @@ -18491,7 +18947,7 @@ 1 2 - 45047 + 45045 2 @@ -18506,19 +18962,19 @@ type_mentions - 5902897 + 5903906 id - 5902897 + 5903906 type_id - 276673 + 276914 location - 5846582 + 5847598 kind @@ -18536,7 +18992,7 @@ 1 2 - 5902897 + 5903906 @@ -18552,7 +19008,7 @@ 1 2 - 5902897 + 5903906 @@ -18568,7 +19024,7 @@ 1 2 - 5902897 + 5903906 @@ -18584,42 +19040,42 @@ 1 2 - 136593 + 136796 2 3 - 31153 + 31203 3 4 - 11273 + 11272 4 5 - 14922 + 14921 5 7 - 19988 + 19931 7 12 - 21785 + 21837 12 28 - 21077 + 21074 28 - 8940 - 19879 + 8941 + 19876 @@ -18635,42 +19091,42 @@ 1 2 - 136593 + 136796 2 3 - 31153 + 31203 3 4 - 11273 + 11272 4 5 - 14922 + 14921 5 7 - 19988 + 19931 7 12 - 21785 + 21837 12 28 - 21077 + 21074 28 - 8940 - 19879 + 8941 + 19876 @@ -18686,7 +19142,7 @@ 1 2 - 276673 + 276914 @@ -18702,12 +19158,12 @@ 1 2 - 5800887 + 5801908 2 4 - 45694 + 45689 @@ -18723,12 +19179,12 @@ 1 2 - 5800887 + 5801908 2 4 - 45694 + 45689 @@ -18744,7 +19200,7 @@ 1 2 - 5846582 + 5847598 @@ -18758,8 +19214,8 @@ 12 - 108383 - 108384 + 108414 + 108415 54 @@ -18774,8 +19230,8 @@ 12 - 5080 - 5081 + 5085 + 5086 54 @@ -18790,8 +19246,8 @@ 12 - 107349 - 107350 + 107380 + 107381 54 @@ -18802,26 +19258,26 @@ is_function_template - 1332543 + 1331339 id - 1332543 + 1331339 function_instantiation - 973628 + 973595 to - 973628 + 973595 from - 182644 + 182638 @@ -18835,7 +19291,7 @@ 1 2 - 973628 + 973595 @@ -18851,17 +19307,17 @@ 1 2 - 110588 + 110584 2 3 - 42790 + 42789 3 9 - 14377 + 14376 9 @@ -18881,11 +19337,11 @@ function_template_argument - 2484801 + 2484714 function_id - 1453288 + 1453238 index @@ -18893,7 +19349,7 @@ arg_type - 298003 + 297992 @@ -18907,22 +19363,22 @@ 1 2 - 783011 + 782984 2 3 - 413156 + 413142 3 4 - 171810 + 171804 4 15 - 85309 + 85306 @@ -18938,22 +19394,22 @@ 1 2 - 802158 + 802130 2 3 - 411249 + 411234 3 4 - 169630 + 169624 4 9 - 70250 + 70248 @@ -19091,32 +19547,32 @@ 1 2 - 174774 + 174768 2 3 - 26335 + 26334 3 4 - 19998 + 19997 4 6 - 22656 + 22655 6 11 - 23235 + 23234 11 76 - 23371 + 23370 79 @@ -19137,12 +19593,12 @@ 1 2 - 256813 + 256804 2 3 - 32127 + 32126 3 @@ -19157,11 +19613,11 @@ function_template_argument_value - 452779 + 452763 function_id - 196783 + 196776 index @@ -19169,7 +19625,7 @@ arg_value - 450087 + 450072 @@ -19183,17 +19639,17 @@ 1 2 - 151403 + 151398 2 3 - 42893 + 42891 3 8 - 2487 + 2486 @@ -19209,17 +19665,17 @@ 1 2 - 144487 + 144482 2 3 - 36692 + 36691 3 54 - 14854 + 14853 54 @@ -19362,7 +19818,7 @@ 1 2 - 447396 + 447380 2 @@ -19383,7 +19839,7 @@ 1 2 - 450087 + 450072 @@ -19393,26 +19849,26 @@ is_variable_template - 58685 + 58632 id - 58685 + 58632 variable_instantiation - 423162 + 422780 to - 423162 + 422780 from - 35336 + 35304 @@ -19426,7 +19882,7 @@ 1 2 - 423162 + 422780 @@ -19442,42 +19898,42 @@ 1 2 - 15233 + 15219 2 3 - 3870 + 3867 3 4 - 2372 + 2370 4 6 - 2996 + 2994 6 8 - 2247 + 2245 8 12 - 3121 + 3118 12 31 - 2746 + 2744 32 546 - 2746 + 2744 @@ -19487,19 +19943,19 @@ variable_template_argument - 769159 + 768464 variable_id - 401311 + 400948 index - 1997 + 1996 arg_type - 256344 + 256113 @@ -19513,22 +19969,22 @@ 1 2 - 156703 + 156562 2 3 - 189917 + 189745 3 4 - 36460 + 36427 4 17 - 18230 + 18213 @@ -19544,22 +20000,22 @@ 1 2 - 171562 + 171407 2 3 - 180178 + 180015 3 4 - 33713 + 33682 4 17 - 15857 + 15843 @@ -19575,7 +20031,7 @@ 28 29 - 874 + 873 34 @@ -19626,7 +20082,7 @@ 1 2 - 874 + 873 2 @@ -19677,22 +20133,22 @@ 1 2 - 175558 + 175399 2 3 - 44701 + 44660 3 6 - 21601 + 21581 6 206 - 14484 + 14471 @@ -19708,17 +20164,17 @@ 1 2 - 228000 + 227794 2 3 - 24722 + 24700 3 7 - 3621 + 3617 @@ -19728,11 +20184,11 @@ variable_template_argument_value - 19978 + 19960 variable_id - 14858 + 14845 index @@ -19740,7 +20196,7 @@ arg_value - 19978 + 19960 @@ -19754,12 +20210,12 @@ 1 2 - 13360 + 13348 2 3 - 1498 + 1497 @@ -19775,12 +20231,12 @@ 1 2 - 10488 + 10479 2 3 - 3995 + 3992 4 @@ -19863,7 +20319,7 @@ 1 2 - 19978 + 19960 @@ -19879,7 +20335,7 @@ 1 2 - 19978 + 19960 @@ -19889,15 +20345,15 @@ template_template_instantiation - 6368 + 6362 to - 4994 + 4990 from - 1123 + 1122 @@ -19911,12 +20367,12 @@ 1 2 - 3621 + 3617 2 3 - 1373 + 1372 @@ -19932,7 +20388,7 @@ 1 2 - 749 + 748 2 @@ -19969,7 +20425,7 @@ arg_type - 9083 + 9082 @@ -19983,7 +20439,7 @@ 1 2 - 5017 + 5016 2 @@ -20014,7 +20470,7 @@ 1 2 - 5038 + 5037 2 @@ -20188,7 +20644,7 @@ 1 2 - 9062 + 9061 2 @@ -20584,7 +21040,7 @@ concept_template_argument - 113043 + 113042 concept_id @@ -20946,15 +21402,15 @@ routinetypes - 604319 + 604298 id - 604319 + 604298 return_type - 283864 + 283854 @@ -20968,7 +21424,7 @@ 1 2 - 604319 + 604298 @@ -20984,12 +21440,12 @@ 1 2 - 234225 + 234217 2 3 - 35091 + 35090 3 @@ -21004,11 +21460,11 @@ routinetypeargs - 1176788 + 1176653 routine - 415119 + 415071 index @@ -21016,7 +21472,7 @@ type_id - 111595 + 111582 @@ -21030,32 +21486,32 @@ 1 2 - 82511 + 82502 2 3 - 126028 + 126013 3 4 - 107456 + 107443 4 5 - 49289 + 49283 5 7 - 33168 + 33164 7 19 - 16665 + 16663 @@ -21071,27 +21527,27 @@ 1 2 - 88502 + 88492 2 3 - 138663 + 138647 3 4 - 114209 + 114196 4 5 - 40738 + 40733 5 10 - 32895 + 32892 10 @@ -21289,42 +21745,42 @@ 1 2 - 33222 + 33218 2 3 - 15195 + 15193 3 4 - 13234 + 13233 4 5 - 9803 + 9802 5 6 - 6372 + 6371 6 8 - 9476 + 9475 8 13 - 9531 + 9529 13 26 - 8659 + 8658 26 @@ -21345,22 +21801,22 @@ 1 2 - 78917 + 78908 2 3 - 17537 + 17535 3 5 - 9476 + 9475 5 17 - 5664 + 5663 @@ -21378,11 +21834,11 @@ type_id - 7974 + 7973 class_id - 4869 + 4868 @@ -21526,15 +21982,15 @@ specifiers - 7741 + 7734 id - 7741 + 7734 str - 7741 + 7734 @@ -21548,7 +22004,7 @@ 1 2 - 7741 + 7734 @@ -21564,7 +22020,7 @@ 1 2 - 7741 + 7734 @@ -21574,15 +22030,15 @@ typespecifiers - 854940 + 854197 type_id - 847448 + 849053 spec_id - 1623 + 95 @@ -21596,12 +22052,12 @@ 1 2 - 839957 + 843910 2 3 - 7491 + 5143 @@ -21615,69 +22071,49 @@ 12 - 1 - 2 - 124 - - - 2 - 3 - 124 - - - 16 - 17 - 124 - - - 17 - 18 - 124 - - - 24 - 25 - 124 + 168 + 169 + 10 - 44 - 45 - 124 + 215 + 216 + 10 - 49 - 50 - 124 + 225 + 226 + 10 - 51 - 52 - 124 + 533 + 534 + 10 - 112 - 113 - 124 + 821 + 822 + 10 - 199 - 200 - 124 + 1568 + 1569 + 10 - 325 - 326 - 124 + 4195 + 4196 + 10 - 545 - 546 - 124 + 18295 + 18296 + 10 - 5462 - 5463 - 124 + 54858 + 54859 + 10 @@ -21687,15 +22123,15 @@ funspecifiers - 9723250 + 9714461 func_id - 4012490 + 4008863 spec_id - 2372 + 2370 @@ -21709,27 +22145,27 @@ 1 2 - 1528454 + 1527073 2 3 - 506696 + 506238 3 4 - 1037865 + 1036927 4 5 - 693492 + 692865 5 8 - 245981 + 245758 @@ -21845,15 +22281,15 @@ varspecifiers - 3078136 + 3075354 var_id - 2316968 + 2314873 spec_id - 1123 + 1122 @@ -21867,17 +22303,17 @@ 1 2 - 1659561 + 1658061 2 3 - 554144 + 553643 3 5 - 103262 + 103168 @@ -21943,15 +22379,15 @@ explicit_specifier_exprs - 41329 + 41292 func_id - 41329 + 41292 constant - 41329 + 41292 @@ -21965,7 +22401,7 @@ 1 2 - 41329 + 41292 @@ -21981,7 +22417,7 @@ 1 2 - 41329 + 41292 @@ -21991,11 +22427,11 @@ attributes - 654409 + 653818 id - 654409 + 653818 kind @@ -22003,7 +22439,7 @@ name - 2122 + 2120 name_space @@ -22011,7 +22447,7 @@ location - 648291 + 647705 @@ -22025,7 +22461,7 @@ 1 2 - 654409 + 653818 @@ -22041,7 +22477,7 @@ 1 2 - 654409 + 653818 @@ -22057,7 +22493,7 @@ 1 2 - 654409 + 653818 @@ -22073,7 +22509,7 @@ 1 2 - 654409 + 653818 @@ -22269,7 +22705,7 @@ 1 2 - 1872 + 1871 2 @@ -22290,7 +22726,7 @@ 1 2 - 2122 + 2120 @@ -22476,12 +22912,12 @@ 1 2 - 642423 + 641842 2 5 - 5868 + 5863 @@ -22497,7 +22933,7 @@ 1 2 - 648291 + 647705 @@ -22513,12 +22949,12 @@ 1 2 - 643172 + 642590 2 3 - 5119 + 5114 @@ -22534,7 +22970,7 @@ 1 2 - 648291 + 647705 @@ -22814,7 +23250,7 @@ 1 2 - 68747 + 68748 2 @@ -23072,7 +23508,7 @@ 1 2 - 56935 + 56936 2 @@ -23243,15 +23679,15 @@ attribute_arg_constant - 71875 + 71712 arg - 71875 + 71712 constant - 71875 + 71712 @@ -23265,7 +23701,7 @@ 1 2 - 71875 + 71712 @@ -23281,7 +23717,7 @@ 1 2 - 71875 + 71712 @@ -23392,15 +23828,15 @@ typeattributes - 96394 + 96307 type_id - 94646 + 94561 spec_id - 32464 + 32435 @@ -23414,12 +23850,12 @@ 1 2 - 92898 + 92814 2 3 - 1748 + 1746 @@ -23435,17 +23871,17 @@ 1 2 - 27969 + 27944 2 9 - 2497 + 2495 11 58 - 1997 + 1996 @@ -23455,15 +23891,15 @@ funcattributes - 844327 + 843564 func_id - 799751 + 799028 spec_id - 617325 + 616767 @@ -23477,12 +23913,12 @@ 1 2 - 759669 + 758983 2 7 - 40081 + 40044 @@ -23498,12 +23934,12 @@ 1 2 - 572249 + 571732 2 213 - 45075 + 45035 @@ -23576,7 +24012,7 @@ namespaceattributes - 5996 + 5995 namespace_id @@ -23584,7 +24020,7 @@ spec_id - 5996 + 5995 @@ -23624,7 +24060,7 @@ 1 2 - 5996 + 5995 @@ -23702,15 +24138,15 @@ unspecifiedtype - 7179404 + 7172915 type_id - 7179404 + 7172915 unspecified_type_id - 3965916 + 3962331 @@ -23724,7 +24160,7 @@ 1 2 - 7179404 + 7172915 @@ -23740,22 +24176,22 @@ 1 2 - 2482787 + 2480542 2 3 - 1117778 + 1116768 3 7 - 302918 + 302645 7 537 - 62431 + 62375 @@ -23765,19 +24201,19 @@ member - 4193417 + 4189627 parent - 543780 + 543289 index - 29717 + 29690 child - 4188797 + 4185011 @@ -23791,57 +24227,57 @@ 1 2 - 129108 + 128992 2 3 - 83408 + 83333 3 4 - 32464 + 32435 4 5 - 44950 + 44910 5 6 - 42453 + 42415 6 7 - 33962 + 33932 7 9 - 42328 + 42290 9 13 - 41204 + 41167 13 18 - 41329 + 41292 18 42 - 40830 + 40793 42 239 - 11737 + 11726 @@ -23857,57 +24293,57 @@ 1 2 - 128859 + 128742 2 3 - 83533 + 83458 3 4 - 32214 + 32185 4 5 - 45075 + 45035 5 6 - 42578 + 42539 6 7 - 32839 + 32809 7 9 - 42703 + 42664 9 13 - 41579 + 41541 13 18 - 41454 + 41417 18 42 - 40955 + 40918 42 265 - 11986 + 11976 @@ -23923,57 +24359,57 @@ 1 2 - 6492 + 6487 2 3 - 2622 + 2619 3 8 - 1872 + 1871 9 10 - 2871 + 2869 10 19 - 2247 + 2245 19 26 - 2247 + 2245 26 36 - 2497 + 2495 36 50 - 2247 + 2245 54 141 - 2247 + 2245 150 468 - 2247 + 2245 480 4310 - 2122 + 2120 @@ -23989,57 +24425,57 @@ 1 2 - 5493 + 5489 2 3 - 3621 + 3617 3 9 - 1872 + 1871 9 10 - 2871 + 2869 10 20 - 2372 + 2370 20 28 - 2372 + 2370 28 37 - 2372 + 2370 37 56 - 2372 + 2370 58 156 - 2247 + 2245 163 527 - 2247 + 2245 547 4330 - 1872 + 1871 @@ -24055,7 +24491,7 @@ 1 2 - 4188797 + 4185011 @@ -24071,12 +24507,12 @@ 1 2 - 4184177 + 4180395 2 3 - 4619 + 4615 @@ -24086,15 +24522,15 @@ enclosingfunction - 114813 + 114809 child - 114813 + 114809 parent - 71340 + 71338 @@ -24108,7 +24544,7 @@ 1 2 - 114813 + 114809 @@ -24124,7 +24560,7 @@ 1 2 - 49332 + 49330 2 @@ -24134,7 +24570,7 @@ 3 4 - 15365 + 15364 4 @@ -24149,15 +24585,15 @@ derivations - 476900 + 476883 derivation - 476900 + 476883 sub - 455164 + 455148 index @@ -24165,11 +24601,11 @@ super - 235554 + 235546 location - 35397 + 35396 @@ -24183,7 +24619,7 @@ 1 2 - 476900 + 476883 @@ -24199,7 +24635,7 @@ 1 2 - 476900 + 476883 @@ -24215,7 +24651,7 @@ 1 2 - 476900 + 476883 @@ -24231,7 +24667,7 @@ 1 2 - 476900 + 476883 @@ -24247,12 +24683,12 @@ 1 2 - 438640 + 438625 2 9 - 16523 + 16522 @@ -24268,12 +24704,12 @@ 1 2 - 438640 + 438625 2 8 - 16523 + 16522 @@ -24289,12 +24725,12 @@ 1 2 - 438640 + 438625 2 9 - 16523 + 16522 @@ -24310,12 +24746,12 @@ 1 2 - 438640 + 438625 2 8 - 16523 + 16522 @@ -24470,7 +24906,7 @@ 1 2 - 225742 + 225734 2 @@ -24491,7 +24927,7 @@ 1 2 - 225742 + 225734 2 @@ -24512,7 +24948,7 @@ 1 2 - 235111 + 235103 2 @@ -24533,7 +24969,7 @@ 1 2 - 230205 + 230197 2 @@ -24554,7 +24990,7 @@ 1 2 - 26505 + 26504 2 @@ -24590,7 +25026,7 @@ 1 2 - 26505 + 26504 2 @@ -24626,7 +25062,7 @@ 1 2 - 35397 + 35396 @@ -24642,7 +25078,7 @@ 1 2 - 28720 + 28719 2 @@ -24667,11 +25103,11 @@ derspecifiers - 478671 + 478655 der_id - 476457 + 476440 spec_id @@ -24689,7 +25125,7 @@ 1 2 - 474242 + 474226 2 @@ -24735,11 +25171,11 @@ direct_base_offsets - 449985 + 449970 der_id - 449985 + 449970 offset @@ -24757,7 +25193,7 @@ 1 2 - 449985 + 449970 @@ -24954,19 +25390,19 @@ frienddecls - 700462 + 700403 id - 700462 + 700403 type_id - 42416 + 42414 decl_id - 77848 + 77845 location @@ -24984,7 +25420,7 @@ 1 2 - 700462 + 700403 @@ -25000,7 +25436,7 @@ 1 2 - 700462 + 700403 @@ -25016,7 +25452,7 @@ 1 2 - 700462 + 700403 @@ -25032,12 +25468,12 @@ 1 2 - 6166 + 6200 2 3 - 13968 + 13933 3 @@ -25088,12 +25524,12 @@ 1 2 - 6166 + 6200 2 3 - 13968 + 13933 3 @@ -25144,7 +25580,7 @@ 1 2 - 41053 + 41051 2 @@ -25165,17 +25601,17 @@ 1 2 - 48071 + 48104 2 3 - 5962 + 5927 3 8 - 5996 + 5995 8 @@ -25206,17 +25642,17 @@ 1 2 - 48071 + 48104 2 3 - 5962 + 5927 3 8 - 5996 + 5995 8 @@ -25247,7 +25683,7 @@ 1 2 - 77166 + 77163 2 @@ -25272,7 +25708,7 @@ 2 - 20371 + 20370 374 @@ -25289,7 +25725,7 @@ 1 2 - 5962 + 5961 2 @@ -25325,19 +25761,19 @@ comments - 11241965 + 11233426 id - 11241965 + 11233426 contents - 4306669 + 4303649 location - 11241965 + 11233426 @@ -25351,7 +25787,7 @@ 1 2 - 11241965 + 11233426 @@ -25367,7 +25803,7 @@ 1 2 - 11241965 + 11233426 @@ -25383,17 +25819,17 @@ 1 2 - 3932328 + 3928898 2 - 7 - 330014 + 6 + 322979 - 7 + 6 34447 - 44326 + 51771 @@ -25409,17 +25845,17 @@ 1 2 - 3932328 + 3928898 2 - 7 - 330014 + 6 + 322979 - 7 + 6 34447 - 44326 + 51771 @@ -25435,7 +25871,7 @@ 1 2 - 11241965 + 11233426 @@ -25451,7 +25887,7 @@ 1 2 - 11241965 + 11233426 @@ -25461,15 +25897,15 @@ commentbinding - 3916720 + 3914801 id - 3352211 + 3350803 element - 3751026 + 3749257 @@ -25483,12 +25919,12 @@ 1 2 - 3290529 + 3289176 2 1706 - 61682 + 61626 @@ -25504,12 +25940,12 @@ 1 2 - 3585332 + 3583713 2 3 - 165693 + 165544 @@ -25519,15 +25955,15 @@ exprconv - 9633088 + 9633104 converted - 9632982 + 9632998 conversion - 9633088 + 9633104 @@ -25541,7 +25977,7 @@ 1 2 - 9632877 + 9632893 2 @@ -25562,7 +25998,7 @@ 1 2 - 9633088 + 9633104 @@ -25572,22 +26008,22 @@ compgenerated - 9891529 + 9892067 id - 9891529 + 9892067 synthetic_destructor_call - 1671638 + 1671632 element - 1244918 + 1244913 i @@ -25595,7 +26031,7 @@ destructor_call - 1671638 + 1671632 @@ -25609,12 +26045,12 @@ 1 2 - 828654 + 828651 2 3 - 409464 + 409463 3 @@ -25635,12 +26071,12 @@ 1 2 - 828654 + 828651 2 3 - 409464 + 409463 3 @@ -25793,7 +26229,7 @@ 1 2 - 1671638 + 1671632 @@ -25809,7 +26245,7 @@ 1 2 - 1671638 + 1671632 @@ -25819,11 +26255,11 @@ namespaces - 8650 + 8649 id - 8650 + 8649 name @@ -25841,7 +26277,7 @@ 1 2 - 8650 + 8649 @@ -25857,7 +26293,7 @@ 1 2 - 3739 + 3738 2 @@ -25888,15 +26324,15 @@ namespacembrs - 2039521 + 2037677 parentid - 3995 + 3992 memberid - 2039521 + 2037677 @@ -25925,7 +26361,7 @@ 4 5 - 624 + 623 5 @@ -25986,7 +26422,7 @@ 1 2 - 2039521 + 2037677 @@ -25996,11 +26432,11 @@ exprparents - 19454218 + 19454250 expr_id - 19454218 + 19454250 child_index @@ -26008,7 +26444,7 @@ parent_id - 12939988 + 12940010 @@ -26022,7 +26458,7 @@ 1 2 - 19454218 + 19454250 @@ -26038,7 +26474,7 @@ 1 2 - 19454218 + 19454250 @@ -26156,17 +26592,17 @@ 1 2 - 7394757 + 7394770 2 3 - 5082680 + 5082689 3 712 - 462550 + 462551 @@ -26182,17 +26618,17 @@ 1 2 - 7394757 + 7394770 2 3 - 5082680 + 5082689 3 712 - 462550 + 462551 @@ -26202,22 +26638,22 @@ expr_isload - 6909475 + 6909346 expr_id - 6909475 + 6909346 conversionkinds - 6050433 + 6050442 expr_id - 6050433 + 6050442 kind @@ -26235,7 +26671,7 @@ 1 2 - 6050433 + 6050442 @@ -26259,8 +26695,8 @@ 1 - 7362 - 7363 + 7371 + 7372 1 @@ -26291,11 +26727,11 @@ iscall - 5802603 + 5802562 caller - 5802603 + 5802562 kind @@ -26313,7 +26749,7 @@ 1 2 - 5802603 + 5802562 @@ -26337,8 +26773,8 @@ 21 - 268054 - 268055 + 268053 + 268054 21 @@ -26349,11 +26785,11 @@ numtemplatearguments - 627938 + 627371 expr_id - 627938 + 627371 num @@ -26371,7 +26807,7 @@ 1 2 - 627938 + 627371 @@ -26455,23 +26891,23 @@ namequalifiers - 3041863 + 3041831 id - 3041863 + 3041831 qualifiableelement - 3041863 + 3041831 qualifyingelement - 47485 + 47484 location - 552436 + 552434 @@ -26485,7 +26921,7 @@ 1 2 - 3041863 + 3041831 @@ -26501,7 +26937,7 @@ 1 2 - 3041863 + 3041831 @@ -26517,7 +26953,7 @@ 1 2 - 3041863 + 3041831 @@ -26533,7 +26969,7 @@ 1 2 - 3041863 + 3041831 @@ -26549,7 +26985,7 @@ 1 2 - 3041863 + 3041831 @@ -26565,7 +27001,7 @@ 1 2 - 3041863 + 3041831 @@ -26595,7 +27031,7 @@ 5 - 6811 + 6810 3571 @@ -26631,7 +27067,7 @@ 5 - 6811 + 6810 3571 @@ -26684,17 +27120,17 @@ 1 2 - 79134 + 79155 2 6 - 38104 + 38082 6 7 - 398986 + 398985 7 @@ -26715,17 +27151,17 @@ 1 2 - 79134 + 79155 2 6 - 38104 + 38082 6 7 - 398986 + 398985 7 @@ -26746,7 +27182,7 @@ 1 2 - 111537 + 111536 2 @@ -26756,7 +27192,7 @@ 4 5 - 415295 + 415294 5 @@ -26771,15 +27207,15 @@ varbind - 8254632 + 8254646 expr - 8254632 + 8254646 var - 1050376 + 1050377 @@ -26793,7 +27229,7 @@ 1 2 - 8254632 + 8254646 @@ -26809,17 +27245,17 @@ 1 2 - 171535 + 171536 2 3 - 188700 + 188701 3 4 - 145647 + 145648 4 @@ -26864,15 +27300,15 @@ funbind - 5812199 + 5812287 expr - 5809833 + 5809813 fun - 275916 + 275937 @@ -26886,12 +27322,12 @@ 1 2 - 5807466 + 5807338 2 3 - 2366 + 2474 @@ -26907,7 +27343,7 @@ 1 2 - 181420 + 181441 2 @@ -26917,12 +27353,12 @@ 3 4 - 17212 + 17190 4 8 - 22720 + 22741 8 @@ -26937,11 +27373,11 @@ expr_allocator - 45243 + 45242 expr - 45243 + 45242 func @@ -26963,7 +27399,7 @@ 1 2 - 45243 + 45242 @@ -26979,7 +27415,7 @@ 1 2 - 45243 + 45242 @@ -27063,11 +27499,11 @@ expr_deallocator - 53829 + 53827 expr - 53829 + 53827 func @@ -27089,7 +27525,7 @@ 1 2 - 53829 + 53827 @@ -27105,7 +27541,7 @@ 1 2 - 53829 + 53827 @@ -27210,15 +27646,15 @@ expr_cond_guard - 897880 + 897881 cond - 897880 + 897881 guard - 897880 + 897881 @@ -27232,7 +27668,7 @@ 1 2 - 897880 + 897881 @@ -27248,7 +27684,7 @@ 1 2 - 897880 + 897881 @@ -27258,15 +27694,15 @@ expr_cond_true - 897876 + 897877 cond - 897876 + 897877 true - 897876 + 897877 @@ -27280,7 +27716,7 @@ 1 2 - 897876 + 897877 @@ -27296,7 +27732,7 @@ 1 2 - 897876 + 897877 @@ -27306,15 +27742,15 @@ expr_cond_false - 897880 + 897881 cond - 897880 + 897881 false - 897880 + 897881 @@ -27328,7 +27764,7 @@ 1 2 - 897880 + 897881 @@ -27344,7 +27780,7 @@ 1 2 - 897880 + 897881 @@ -27354,11 +27790,11 @@ values - 13474606 + 13474629 id - 13474606 + 13474629 str @@ -27376,7 +27812,7 @@ 1 2 - 13474606 + 13474629 @@ -27392,7 +27828,7 @@ 1 2 - 78302 + 78303 2 @@ -27422,11 +27858,11 @@ valuetext - 6647578 + 6647554 id - 6647578 + 6647554 text @@ -27444,7 +27880,7 @@ 1 2 - 6647578 + 6647554 @@ -27485,15 +27921,15 @@ valuebind - 13583189 + 13583211 val - 13474606 + 13474629 expr - 13583189 + 13583211 @@ -27507,7 +27943,7 @@ 1 2 - 13384052 + 13384074 2 @@ -27528,7 +27964,7 @@ 1 2 - 13583189 + 13583211 @@ -27538,15 +27974,15 @@ fieldoffsets - 1496815 + 1497677 id - 1496815 + 1497677 byteoffset - 31370 + 31367 bitoffset @@ -27564,7 +28000,7 @@ 1 2 - 1496815 + 1497677 @@ -27580,7 +28016,7 @@ 1 2 - 1496815 + 1497677 @@ -27596,7 +28032,7 @@ 1 2 - 17700 + 17698 2 @@ -27611,7 +28047,7 @@ 5 12 - 2614 + 2613 12 @@ -27625,7 +28061,7 @@ 250 - 5947 + 5950 1089 @@ -27642,7 +28078,7 @@ 1 2 - 30390 + 30387 2 @@ -27696,8 +28132,8 @@ 54 - 27127 - 27128 + 27146 + 27147 54 @@ -27739,19 +28175,19 @@ bitfield - 30341 + 30314 id - 30341 + 30314 bits - 3496 + 3493 declared_bits - 3496 + 3493 @@ -27765,7 +28201,7 @@ 1 2 - 30341 + 30314 @@ -27781,7 +28217,7 @@ 1 2 - 30341 + 30314 @@ -27802,7 +28238,7 @@ 2 3 - 749 + 748 3 @@ -27848,7 +28284,7 @@ 1 2 - 3496 + 3493 @@ -27869,7 +28305,7 @@ 2 3 - 749 + 748 3 @@ -27915,7 +28351,7 @@ 1 2 - 3496 + 3493 @@ -27925,23 +28361,23 @@ initialisers - 2251035 + 2251326 init - 2251035 + 2251326 var - 980971 + 981180 expr - 2251035 + 2251326 location - 516371 + 516962 @@ -27955,7 +28391,7 @@ 1 2 - 2251035 + 2251326 @@ -27971,7 +28407,7 @@ 1 2 - 2251035 + 2251326 @@ -27987,7 +28423,7 @@ 1 2 - 2251035 + 2251326 @@ -28003,17 +28439,17 @@ 1 2 - 870556 + 870760 2 15 - 37441 + 37448 16 25 - 72973 + 72972 @@ -28029,17 +28465,17 @@ 1 2 - 870556 + 870760 2 15 - 37441 + 37448 16 25 - 72973 + 72972 @@ -28055,7 +28491,7 @@ 1 2 - 980963 + 981172 2 @@ -28076,7 +28512,7 @@ 1 2 - 2251035 + 2251326 @@ -28092,7 +28528,7 @@ 1 2 - 2251035 + 2251326 @@ -28108,7 +28544,7 @@ 1 2 - 2251035 + 2251326 @@ -28124,22 +28560,22 @@ 1 2 - 414356 + 415112 2 3 - 33606 + 33614 3 13 - 42250 + 42070 13 - 111911 - 26157 + 111925 + 26165 @@ -28155,17 +28591,17 @@ 1 2 - 443657 + 444413 2 3 - 34516 + 34524 3 - 12237 - 38196 + 12238 + 38025 @@ -28181,22 +28617,22 @@ 1 2 - 414356 + 415112 2 3 - 33606 + 33614 3 13 - 42250 + 42070 13 - 111911 - 26157 + 111925 + 26165 @@ -28206,26 +28642,26 @@ braced_initialisers - 68468 + 68440 init - 68468 + 68440 expr_ancestor - 1677619 + 1677613 exp - 1677619 + 1677613 ancestor - 839627 + 839624 @@ -28239,7 +28675,7 @@ 1 2 - 1677619 + 1677613 @@ -28260,7 +28696,7 @@ 2 3 - 812474 + 812471 3 @@ -28275,11 +28711,11 @@ exprs - 25210577 + 25210619 id - 25210577 + 25210619 kind @@ -28287,7 +28723,7 @@ location - 10582671 + 10585876 @@ -28301,7 +28737,7 @@ 1 2 - 25210577 + 25210619 @@ -28317,7 +28753,7 @@ 1 2 - 25210577 + 25210619 @@ -28477,8 +28913,8 @@ 109 - 224080 - 224081 + 224225 + 224226 21 @@ -28495,22 +28931,22 @@ 1 2 - 8900701 + 8903903 2 3 - 820608 + 820610 3 16 - 797199 + 797200 16 71733 - 64161 + 64162 @@ -28526,17 +28962,17 @@ 1 2 - 9040103 + 9043306 2 3 - 774273 + 774274 3 32 - 768294 + 768295 @@ -28546,15 +28982,15 @@ expr_reuse - 847007 + 847004 reuse - 847007 + 847004 original - 847007 + 847004 value_category @@ -28572,7 +29008,7 @@ 1 2 - 847007 + 847004 @@ -28588,7 +29024,7 @@ 1 2 - 847007 + 847004 @@ -28604,7 +29040,7 @@ 1 2 - 847007 + 847004 @@ -28620,7 +29056,7 @@ 1 2 - 847007 + 847004 @@ -28672,15 +29108,15 @@ expr_types - 25210577 + 25210619 id - 25210577 + 25210619 typeid - 214202 + 214203 value_category @@ -28698,7 +29134,7 @@ 1 2 - 25210577 + 25210619 @@ -28714,7 +29150,7 @@ 1 2 - 25210577 + 25210619 @@ -28859,15 +29295,15 @@ new_allocated_type - 46197 + 46196 expr - 46197 + 46196 type_id - 27391 + 27390 @@ -28881,7 +29317,7 @@ 1 2 - 46197 + 46196 @@ -28897,12 +29333,12 @@ 1 2 - 11515 + 11514 2 3 - 14479 + 14478 3 @@ -30316,15 +30752,15 @@ condition_decl_bind - 408905 + 408903 expr - 408905 + 408903 decl - 408905 + 408903 @@ -30338,7 +30774,7 @@ 1 2 - 408905 + 408903 @@ -30354,7 +30790,7 @@ 1 2 - 408905 + 408903 @@ -30364,15 +30800,15 @@ typeid_bind - 47901 + 47899 expr - 47901 + 47899 type_id - 15944 + 15943 @@ -30386,7 +30822,7 @@ 1 2 - 47901 + 47899 @@ -30402,7 +30838,7 @@ 1 2 - 2964 + 2963 2 @@ -30422,15 +30858,15 @@ uuidof_bind - 26588 + 26677 expr - 26588 + 26677 type_id - 26336 + 26425 @@ -30444,7 +30880,7 @@ 1 2 - 26588 + 26677 @@ -30460,7 +30896,7 @@ 1 2 - 26125 + 26214 2 @@ -30852,11 +31288,11 @@ lambda_capture - 31966 + 31965 id - 31966 + 31965 lambda @@ -30868,7 +31304,7 @@ field - 31966 + 31965 captured_by_reference @@ -30894,7 +31330,7 @@ 1 2 - 31966 + 31965 @@ -30910,7 +31346,7 @@ 1 2 - 31966 + 31965 @@ -30926,7 +31362,7 @@ 1 2 - 31966 + 31965 @@ -30942,7 +31378,7 @@ 1 2 - 31966 + 31965 @@ -30958,7 +31394,7 @@ 1 2 - 31966 + 31965 @@ -30974,7 +31410,7 @@ 1 2 - 31966 + 31965 @@ -31602,7 +32038,7 @@ 1 2 - 31966 + 31965 @@ -31618,7 +32054,7 @@ 1 2 - 31966 + 31965 @@ -31634,7 +32070,7 @@ 1 2 - 31966 + 31965 @@ -31650,7 +32086,7 @@ 1 2 - 31966 + 31965 @@ -31666,7 +32102,7 @@ 1 2 - 31966 + 31965 @@ -31682,7 +32118,7 @@ 1 2 - 31966 + 31965 @@ -32196,11 +32632,11 @@ stmts - 6368968 + 6368850 id - 6368968 + 6368850 kind @@ -32208,7 +32644,7 @@ location - 2684538 + 2684488 @@ -32222,7 +32658,7 @@ 1 2 - 6368968 + 6368850 @@ -32238,7 +32674,7 @@ 1 2 - 6368968 + 6368850 @@ -32476,22 +32912,22 @@ 1 2 - 2225039 + 2224998 2 3 - 182234 + 182231 3 10 - 202178 + 202174 10 1789 - 75085 + 75084 @@ -32507,12 +32943,12 @@ 1 2 - 2601581 + 2601532 2 10 - 82957 + 82955 @@ -32677,15 +33113,15 @@ if_then - 990214 + 990216 if_stmt - 990214 + 990216 then_id - 990214 + 990216 @@ -32699,7 +33135,7 @@ 1 2 - 990214 + 990216 @@ -32715,7 +33151,7 @@ 1 2 - 990214 + 990216 @@ -32725,15 +33161,15 @@ if_else - 437090 + 437089 if_stmt - 437090 + 437089 else_id - 437090 + 437089 @@ -32747,7 +33183,7 @@ 1 2 - 437090 + 437089 @@ -32763,7 +33199,7 @@ 1 2 - 437090 + 437089 @@ -32821,15 +33257,15 @@ constexpr_if_then - 106134 + 106038 constexpr_if_stmt - 106134 + 106038 then_id - 106134 + 106038 @@ -32843,7 +33279,7 @@ 1 2 - 106134 + 106038 @@ -32859,7 +33295,7 @@ 1 2 - 106134 + 106038 @@ -32869,15 +33305,15 @@ constexpr_if_else - 76166 + 76097 constexpr_if_stmt - 76166 + 76097 else_id - 76166 + 76097 @@ -32891,7 +33327,7 @@ 1 2 - 76166 + 76097 @@ -32907,7 +33343,7 @@ 1 2 - 76166 + 76097 @@ -33013,15 +33449,15 @@ while_body - 39647 + 39648 while_stmt - 39647 + 39648 body_id - 39647 + 39648 @@ -33035,7 +33471,7 @@ 1 2 - 39647 + 39648 @@ -33051,7 +33487,7 @@ 1 2 - 39647 + 39648 @@ -33157,11 +33593,11 @@ switch_case - 836120 + 836117 switch_stmt - 411852 + 411851 index @@ -33169,7 +33605,7 @@ case_id - 836120 + 836117 @@ -33188,7 +33624,7 @@ 2 3 - 408969 + 408968 3 @@ -33214,7 +33650,7 @@ 2 3 - 408969 + 408968 3 @@ -33377,7 +33813,7 @@ 1 2 - 836120 + 836117 @@ -33393,7 +33829,7 @@ 1 2 - 836120 + 836117 @@ -33403,15 +33839,15 @@ switch_body - 411852 + 411851 switch_stmt - 411852 + 411851 body_id - 411852 + 411851 @@ -33425,7 +33861,7 @@ 1 2 - 411852 + 411851 @@ -33441,7 +33877,7 @@ 1 2 - 411852 + 411851 @@ -33643,11 +34079,11 @@ stmtparents - 5628380 + 5628275 id - 5628380 + 5628275 index @@ -33655,7 +34091,7 @@ parent - 2381490 + 2381446 @@ -33669,7 +34105,7 @@ 1 2 - 5628380 + 5628275 @@ -33685,7 +34121,7 @@ 1 2 - 5628380 + 5628275 @@ -33721,7 +34157,7 @@ 7 8 - 1316 + 1315 8 @@ -33782,7 +34218,7 @@ 7 8 - 1316 + 1315 8 @@ -33823,27 +34259,27 @@ 1 2 - 1359015 + 1358990 2 3 - 517378 + 517369 3 4 - 151519 + 151517 4 6 - 155727 + 155724 6 16 - 178871 + 178868 16 @@ -33864,27 +34300,27 @@ 1 2 - 1359015 + 1358990 2 3 - 517378 + 517369 3 4 - 151519 + 151517 4 6 - 155727 + 155724 6 16 - 178871 + 178868 16 @@ -33899,22 +34335,22 @@ ishandler - 43746 + 43790 block - 43746 + 43790 stmt_decl_bind - 725885 + 725871 stmt - 715316 + 715303 num @@ -33922,7 +34358,7 @@ decl - 725885 + 725871 @@ -33936,7 +34372,7 @@ 1 2 - 707850 + 707837 2 @@ -33957,7 +34393,7 @@ 1 2 - 707850 + 707837 2 @@ -34090,7 +34526,7 @@ 1 2 - 725885 + 725871 @@ -34106,7 +34542,7 @@ 1 2 - 725885 + 725871 @@ -34116,11 +34552,11 @@ stmt_decl_entry_bind - 725885 + 725871 stmt - 715316 + 715303 num @@ -34128,7 +34564,7 @@ decl_entry - 725885 + 725871 @@ -34142,7 +34578,7 @@ 1 2 - 707850 + 707837 2 @@ -34163,7 +34599,7 @@ 1 2 - 707850 + 707837 2 @@ -34296,7 +34732,7 @@ 1 2 - 725885 + 725871 @@ -34312,7 +34748,7 @@ 1 2 - 725885 + 725871 @@ -34322,15 +34758,15 @@ blockscope - 1644952 + 1644338 block - 1644952 + 1644338 enclosing - 1428064 + 1427147 @@ -34344,7 +34780,7 @@ 1 2 - 1644952 + 1644338 @@ -34360,17 +34796,17 @@ 1 2 - 1295584 + 1294537 2 4 - 117122 + 117265 4 - 28 - 15358 + 29 + 15344 @@ -34380,11 +34816,11 @@ jumpinfo - 348320 + 348321 id - 348320 + 348321 str @@ -34406,7 +34842,7 @@ 1 2 - 348320 + 348321 @@ -34422,7 +34858,7 @@ 1 2 - 348320 + 348321 @@ -34515,7 +34951,7 @@ 2 3 - 36210 + 36211 3 @@ -34561,19 +34997,19 @@ preprocdirects - 5413334 + 5408441 id - 5413334 + 5408441 kind - 1373 + 1372 location - 5410088 + 5405198 @@ -34587,7 +35023,7 @@ 1 2 - 5413334 + 5408441 @@ -34603,7 +35039,7 @@ 1 2 - 5413334 + 5408441 @@ -34751,7 +35187,7 @@ 1 2 - 5409963 + 5405073 27 @@ -34772,7 +35208,7 @@ 1 2 - 5410088 + 5405198 @@ -34782,15 +35218,15 @@ preprocpair - 1142251 + 1141219 begin - 889777 + 888973 elseelifend - 1142251 + 1141219 @@ -34804,17 +35240,17 @@ 1 2 - 650164 + 649576 2 3 - 230622 + 230414 3 9 - 8990 + 8982 @@ -34830,7 +35266,7 @@ 1 2 - 1142251 + 1141219 @@ -34840,41 +35276,41 @@ preproctrue - 439769 + 439371 branch - 439769 + 439371 preprocfalse - 285562 + 285304 branch - 285562 + 285304 preproctext - 4356364 + 4352427 id - 4356364 + 4352427 head - 2957767 + 2955094 body - 1684908 + 1683385 @@ -34888,7 +35324,7 @@ 1 2 - 4356364 + 4352427 @@ -34904,7 +35340,7 @@ 1 2 - 4356364 + 4352427 @@ -34920,12 +35356,12 @@ 1 2 - 2758985 + 2756491 2 798 - 198782 + 198603 @@ -34941,12 +35377,12 @@ 1 2 - 2876481 + 2873881 2 5 - 81286 + 81212 @@ -34962,17 +35398,17 @@ 1 2 - 1536570 + 1535182 2 10 - 127360 + 127245 10 13606 - 20977 + 20958 @@ -34988,17 +35424,17 @@ 1 2 - 1540816 + 1539423 2 12 - 126986 + 126871 12 3246 - 17106 + 17090 @@ -35008,15 +35444,15 @@ includes - 318629 + 318610 id - 318629 + 318610 included - 58694 + 58690 @@ -35030,7 +35466,7 @@ 1 2 - 318629 + 318610 @@ -35046,7 +35482,7 @@ 1 2 - 29046 + 29044 2 @@ -35061,7 +35497,7 @@ 4 6 - 5355 + 5354 6 @@ -35134,11 +35570,11 @@ link_parent - 30398086 + 30397027 element - 3866101 + 3865967 link_target @@ -35156,17 +35592,17 @@ 1 2 - 530457 + 530438 2 9 - 26948 + 26947 9 10 - 3308696 + 3308580 From 97d39820618868801138b87ec6ba41025dc6fe93 Mon Sep 17 00:00:00 2001 From: Jeroen Ketema Date: Wed, 27 Aug 2025 13:42:46 +0200 Subject: [PATCH 5/7] C++: Add change note --- cpp/ql/lib/change-notes/2025-08-27-pch.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 cpp/ql/lib/change-notes/2025-08-27-pch.md diff --git a/cpp/ql/lib/change-notes/2025-08-27-pch.md b/cpp/ql/lib/change-notes/2025-08-27-pch.md new file mode 100644 index 000000000000..c4a59f112c56 --- /dev/null +++ b/cpp/ql/lib/change-notes/2025-08-27-pch.md @@ -0,0 +1,5 @@ +--- +category: feature +--- +* Added a new class `PchFile` representing precompiled header (PCH) files used during project compilation. + From fd752d36cb8b8b77c19239f9f087477fc9208762 Mon Sep 17 00:00:00 2001 From: Jeroen Ketema Date: Wed, 27 Aug 2025 13:48:10 +0200 Subject: [PATCH 6/7] C++: Add missing QLDoc --- cpp/ql/lib/semmle/code/cpp/PchFile.qll | 3 +++ 1 file changed, 3 insertions(+) diff --git a/cpp/ql/lib/semmle/code/cpp/PchFile.qll b/cpp/ql/lib/semmle/code/cpp/PchFile.qll index fbb372b30e5b..787ad947b554 100644 --- a/cpp/ql/lib/semmle/code/cpp/PchFile.qll +++ b/cpp/ql/lib/semmle/code/cpp/PchFile.qll @@ -9,6 +9,9 @@ import semmle.code.cpp.File * A precompiled header (PCH) file created during the build process. */ class PchFile extends @pch { + /** + * Gets a textual representation of this element. + */ string toString() { result = "PCH for " + this.getHeaderFile() } /** From 31126649a9806c909f8d76bac09c4726e53ec25b Mon Sep 17 00:00:00 2001 From: Jeroen Ketema <93738568+jketema@users.noreply.github.com> Date: Thu, 28 Aug 2025 13:10:39 +0200 Subject: [PATCH 7/7] Update cpp/ql/lib/semmle/code/cpp/PchFile.qll Co-authored-by: Idriss Riouak --- cpp/ql/lib/semmle/code/cpp/PchFile.qll | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cpp/ql/lib/semmle/code/cpp/PchFile.qll b/cpp/ql/lib/semmle/code/cpp/PchFile.qll index 787ad947b554..6522edf6593c 100644 --- a/cpp/ql/lib/semmle/code/cpp/PchFile.qll +++ b/cpp/ql/lib/semmle/code/cpp/PchFile.qll @@ -15,7 +15,7 @@ class PchFile extends @pch { string toString() { result = "PCH for " + this.getHeaderFile() } /** - * Gets the header file from with the PCH file was created. + * Gets the header file from which the PCH file was created. */ File getHeaderFile() { pch_creations(this, _, result) }