From 097d5665e8f4870f82531b1c60cd754c6abe1a9c Mon Sep 17 00:00:00 2001 From: Jeroen Ketema Date: Wed, 14 Oct 2026 11:15:06 +0200 Subject: [PATCH 1/4] C++: Add support for C23 `_BitInt`s --- cpp/ql/lib/semmle/code/cpp/Type.qll | 47 +++++++++++++++-- cpp/ql/lib/semmlecode.cpp.dbscheme | 80 ++++++++++++++++------------- 2 files changed, 87 insertions(+), 40 deletions(-) diff --git a/cpp/ql/lib/semmle/code/cpp/Type.qll b/cpp/ql/lib/semmle/code/cpp/Type.qll index 4069b58134be..023aa1b6c3d4 100644 --- a/cpp/ql/lib/semmle/code/cpp/Type.qll +++ b/cpp/ql/lib/semmle/code/cpp/Type.qll @@ -398,6 +398,8 @@ private predicate isIntegralType(@builtintype type, int kind) { kind = 44 or kind = 51 + or + 67 <= kind and kind <= 69 ) } @@ -484,6 +486,12 @@ private predicate integralTypeMapping(int original, int canonical, int unsigned, original = 44 and canonical = 44 and unsigned = -1 and signed = -1 // char32_t or original = 51 and canonical = 51 and unsigned = -1 and signed = -1 // char8_t + or + original = 67 and canonical = 67 and unsigned = 68 and signed = 69 // _BitInt(N) + or + original = 68 and canonical = 68 and unsigned = 68 and signed = 69 // unsigned _BitInt(N) + or + original = 69 and canonical = 67 and unsigned = 68 and signed = 69 // signed _BitInt(N) } /** @@ -517,7 +525,8 @@ class IntegralType extends ArithmeticType, IntegralOrEnumType { builtintypes(underlyingElement(this), _, 13, _, _, _) or builtintypes(underlyingElement(this), _, 16, _, _, _) or builtintypes(underlyingElement(this), _, 19, _, _, _) or - builtintypes(underlyingElement(this), _, 37, _, _, _) + builtintypes(underlyingElement(this), _, 37, _, _, _) or + builtintypes(underlyingElement(this), _, 69, _, _, _) } /** Holds if this integral type is explicitly unsigned. */ @@ -527,7 +536,8 @@ class IntegralType extends ArithmeticType, IntegralOrEnumType { builtintypes(underlyingElement(this), _, 12, _, _, _) or builtintypes(underlyingElement(this), _, 15, _, _, _) or builtintypes(underlyingElement(this), _, 18, _, _, _) or - builtintypes(underlyingElement(this), _, 36, _, _, _) + builtintypes(underlyingElement(this), _, 36, _, _, _) or + builtintypes(underlyingElement(this), _, 68, _, _, _) } /** Holds if this integral type is implicitly signed. */ @@ -537,7 +547,8 @@ class IntegralType extends ArithmeticType, IntegralOrEnumType { builtintypes(underlyingElement(this), _, 11, _, -1, _) or builtintypes(underlyingElement(this), _, 14, _, -1, _) or builtintypes(underlyingElement(this), _, 17, _, -1, _) or - builtintypes(underlyingElement(this), _, 35, _, -1, _) + builtintypes(underlyingElement(this), _, 35, _, -1, _) or + builtintypes(underlyingElement(this), _, 67, _, -1, _) } /** @@ -547,7 +558,14 @@ class IntegralType extends ArithmeticType, IntegralOrEnumType { IntegralType getUnsigned() { exists(int unsignedKind | integralTypeMapping(kind, _, unsignedKind, _) and - builtintypes(unresolveElement(result), _, unsignedKind, _, _, _) + builtintypes(unresolveElement(result), _, unsignedKind, _, _, _) and + ( + not kind in [67, 68, 69] + or + exists(int bitWidth | bit_precise_int_types(underlyingElement(this), bitWidth) | + bit_precise_int_types(unresolveElement(result), bitWidth) + ) + ) ) } @@ -562,7 +580,14 @@ class IntegralType extends ArithmeticType, IntegralOrEnumType { IntegralType getCanonicalArithmeticType() { exists(int canonicalKind | integralTypeMapping(kind, canonicalKind, _, _) and - builtintypes(unresolveElement(result), _, canonicalKind, _, _, _) + builtintypes(unresolveElement(result), _, canonicalKind, _, _, _) and + ( + not kind in [67, 68, 69] + or + exists(int bitWidth | bit_precise_int_types(underlyingElement(this), bitWidth) | + bit_precise_int_types(unresolveElement(result), bitWidth) + ) + ) ) } } @@ -1045,6 +1070,18 @@ class Char32Type extends IntegralType { override string getAPrimaryQlClass() { result = "Char32Type" } } +/** + * A C23 bit-precise integer type `_BitInt(N)`. + */ +class BitPreciseIntType extends IntegralType { + BitPreciseIntType() { builtintypes(underlyingElement(this), _, [67, 68, 69], _, _, _) } + + /** Get the bit-with of the bit-precise integer. */ + int getBitWidth() { bit_precise_int_types(underlyingElement(this), result) } + + override string getAPrimaryQlClass() { result = "BitPreciseIntType" } +} + /** * The (primitive) type of the C++11 `nullptr` constant. It is a * distinct type, denoted by `decltype(nullptr)`, that is not itself a pointer diff --git a/cpp/ql/lib/semmlecode.cpp.dbscheme b/cpp/ql/lib/semmlecode.cpp.dbscheme index 0853f43dc8c0..6aec212e408f 100644 --- a/cpp/ql/lib/semmlecode.cpp.dbscheme +++ b/cpp/ql/lib/semmlecode.cpp.dbscheme @@ -660,46 +660,49 @@ case @builtintype.kind of | 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 +| 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 // ... 41 _Decimal64 // ... 42 _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 +| 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 +| 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 +| 67 = @bit_precise_int // _BitInt(N) +| 68 = @unsigned_bit_precise_int // unsigned _BitInt(N) +| 69 = @signed_bit_precise_int // signed _BitInt(N) ; builtintypes( @@ -711,6 +714,11 @@ builtintypes( int alignment: int ref ); +bit_precise_int_types( + unique int id: @builtintype ref, + int bit_width: 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. @@ -736,9 +744,11 @@ derivedtypes( int type_id: @type ref ); -pointerishsize(unique int id: @derivedtype ref, +pointerishsize( + unique int id: @derivedtype ref, int size: int ref, - int alignment: int ref); + int alignment: int ref +); arraysizes( unique int id: @derivedtype ref, From 88c321368dcfa4b5b817f7dc5052a1028b853a74 Mon Sep 17 00:00:00 2001 From: Jeroen Ketema Date: Wed, 14 Oct 2026 12:04:31 +0200 Subject: [PATCH 2/4] C++: Add upgrade and downgrade scripts --- .../builtintypes.ql | 9 + .../old.dbscheme | 2588 +++++++++++++++++ .../semmlecode.cpp.dbscheme | 2578 ++++++++++++++++ .../upgrade.properties | 4 + .../old.dbscheme | 2578 ++++++++++++++++ .../semmlecode.cpp.dbscheme | 2588 +++++++++++++++++ .../upgrade.properties | 2 + 7 files changed, 10347 insertions(+) create mode 100644 cpp/downgrades/6aec212e408fad907b19368a3376a4d9837783d2/builtintypes.ql create mode 100644 cpp/downgrades/6aec212e408fad907b19368a3376a4d9837783d2/old.dbscheme create mode 100644 cpp/downgrades/6aec212e408fad907b19368a3376a4d9837783d2/semmlecode.cpp.dbscheme create mode 100644 cpp/downgrades/6aec212e408fad907b19368a3376a4d9837783d2/upgrade.properties create mode 100644 cpp/ql/lib/upgrades/0853f43dc8c08deecb473c54a2b70da8597f1ab5/old.dbscheme create mode 100644 cpp/ql/lib/upgrades/0853f43dc8c08deecb473c54a2b70da8597f1ab5/semmlecode.cpp.dbscheme create mode 100644 cpp/ql/lib/upgrades/0853f43dc8c08deecb473c54a2b70da8597f1ab5/upgrade.properties diff --git a/cpp/downgrades/6aec212e408fad907b19368a3376a4d9837783d2/builtintypes.ql b/cpp/downgrades/6aec212e408fad907b19368a3376a4d9837783d2/builtintypes.ql new file mode 100644 index 000000000000..2ad09def291c --- /dev/null +++ b/cpp/downgrades/6aec212e408fad907b19368a3376a4d9837783d2/builtintypes.ql @@ -0,0 +1,9 @@ +class BuiltInType extends @builtintype { + string toString() { none() } +} + +from BuiltInType type, string name, int kind, int kind_new, int size, int sign, int alignment +where + builtintypes(type, name, kind, size, sign, alignment) and + if kind in [67, 68, 69] then kind_new = 1 else kind_new = kind +select type, name, kind_new, size, sign, alignment diff --git a/cpp/downgrades/6aec212e408fad907b19368a3376a4d9837783d2/old.dbscheme b/cpp/downgrades/6aec212e408fad907b19368a3376a4d9837783d2/old.dbscheme new file mode 100644 index 000000000000..6aec212e408f --- /dev/null +++ b/cpp/downgrades/6aec212e408fad907b19368a3376a4d9837783d2/old.dbscheme @@ -0,0 +1,2588 @@ + +/*- Compilations -*/ + +/** + * An invocation of the compiler. Note that more than one file may be + * compiled per invocation. For example, this command compiles three + * source files: + * + * gcc -c f1.c f2.c f3.c + * + * The `id` simply identifies the invocation, while `cwd` is the working + * directory from which the compiler was invoked. + */ +compilations( + /** + * An invocation of the compiler. Note that more than one file may + * be compiled per invocation. For example, this command compiles + * three source files: + * + * gcc -c f1.c f2.c f3.c + */ + unique int id : @compilation, + string cwd : string ref +); + +/** + * The arguments that were passed to the extractor for a compiler + * invocation. If `id` is for the compiler invocation + * + * gcc -c f1.c f2.c f3.c + * + * then typically there will be rows for + * + * num | arg + * --- | --- + * 0 | *path to extractor* + * 1 | `--mimic` + * 2 | `/usr/bin/gcc` + * 3 | `-c` + * 4 | f1.c + * 5 | f2.c + * 6 | f3.c + */ +#keyset[id, num] +compilation_args( + int id : @compilation ref, + int num : int ref, + string arg : string ref +); + +/** + * The expanded arguments that were passed to the extractor for a + * compiler invocation. This is similar to `compilation_args`, but + * for a `@someFile` argument, it includes the arguments from that + * file, rather than just taking the argument literally. + */ +#keyset[id, num] +compilation_expanded_args( + int id : @compilation ref, + int num : int ref, + string arg : string ref +); + +/** + * Optionally, record the build mode for each compilation. + */ +compilation_build_mode( + unique int id : @compilation ref, + int mode : int ref +); + +/* +case @compilation_build_mode.mode of + 0 = @build_mode_none +| 1 = @build_mode_manual +| 2 = @build_mode_auto +; +*/ + +/** + * The source files that are compiled by a compiler invocation. + * If `id` is for the compiler invocation + * + * gcc -c f1.c f2.c f3.c + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | f1.c + * 1 | f2.c + * 2 | f3.c + * + * Note that even if those files `#include` headers, those headers + * do not appear as rows. + */ +#keyset[id, num] +compilation_compiling_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The time taken by the extractor for a compiler invocation. + * + * For each file `num`, there will be rows for + * + * kind | seconds + * ---- | --- + * 1 | CPU seconds used by the extractor frontend + * 2 | Elapsed seconds during the extractor frontend + * 3 | CPU seconds used by the extractor backend + * 4 | Elapsed seconds during the extractor backend + */ +#keyset[id, num, kind] +compilation_time( + int id : @compilation ref, + int num : int ref, + /* kind: + 1 = frontend_cpu_seconds + 2 = frontend_elapsed_seconds + 3 = extractor_cpu_seconds + 4 = extractor_elapsed_seconds + */ + int kind : int ref, + float seconds : float ref +); + +/** + * An error or warning generated by the extractor. + * The diagnostic message `diagnostic` was generated during compiler + * invocation `compilation`, and is the `file_number_diagnostic_number`th + * message generated while extracting the `file_number`th file of that + * invocation. + */ +#keyset[compilation, file_number, file_number_diagnostic_number] +diagnostic_for( + int diagnostic : @diagnostic ref, + int compilation : @compilation ref, + int file_number : int ref, + int file_number_diagnostic_number : int ref +); + +/** + * If extraction was successful, then `cpu_seconds` and + * `elapsed_seconds` are the CPU time and elapsed time (respectively) + * that extraction took for compiler invocation `id`. + */ +compilation_finished( + unique int id : @compilation ref, + float cpu_seconds : float ref, + float elapsed_seconds : float ref +); + +/*- External data -*/ + +/** + * External data, loaded from CSV files during snapshot creation. See + * [Tutorial: Incorporating external data](https://help.semmle.com/wiki/display/SD/Tutorial%3A+Incorporating+external+data) + * for more information. + */ +externalData( + int id : @externalDataElement, + string path : string ref, + int column: int ref, + string value : string ref +); + +/*- Source location prefix -*/ + +/** + * The source location of the snapshot. + */ +sourceLocationPrefix(string prefix : string ref); + +/*- Files and folders -*/ + +/** + * The location of an element. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_default( + unique int id: @location_default, + int file: @file ref, + int beginLine: int ref, + int beginColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +files( + unique int id: @file, + string name: string ref +); + +folders( + unique int id: @folder, + string name: string ref +); + +@container = @file | @folder + +containerparent( + int parent: @container ref, + unique int child: @container ref +); + +/*- Lines of code -*/ + +numlines( + int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: int ref +); + +/*- Diagnostic messages -*/ + +diagnostics( + unique int id: @diagnostic, + int severity: int ref, + string error_tag: string ref, + string error_message: string ref, + string full_error_message: string ref, + int location: @location_default ref +); + +/*- C++ dbscheme -*/ + +extractor_version( + string codeql_version: string ref, + string frontend_version: string ref +) + +/** + * Gives the TRAP filename that `trap` is associated with. + * For debugging only. + */ +trap_filename( + int trap: @trap, + string filename: string ref +); + +/** + * Gives the tag name for `tag`. + * For debugging only. + */ +tag_name( + int tag: @tag, + string name: string ref +); + +@trap_or_tag = @tag | @trap; + +/** + * Gives the name for the source file. + */ +source_file_name( + int sf: @source_file, + string name: string ref +); + +/** + * In `build-mode: none` overlay mode, indicates that `source_file` + * (`/path/to/foo.c`) uses the TRAP file `trap_file`; i.e. it is the + * TRAP file corresponding to `foo.c`, something it transitively + * includes, or a template instantiation it transitively uses. + */ +source_file_uses_trap( + int source_file: @source_file ref, + int trap_file: @trap ref +); + +/** + * In `build-mode: none` overlay mode, indicates that the TRAP file + * `trap_file` uses tag `tag`. + */ +trap_uses_tag( + int trap_file: @trap ref, + int tag: @tag ref +); + +/** + * Holds if there is a definition of `element` in TRAP file or tag `t`. + */ +in_trap_or_tag( + int element: @element ref, + int t: @trap_or_tag 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 +// ... 41 _Decimal64 +// ... 42 _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 +| 67 = @bit_precise_int // _BitInt(N) +| 68 = @unsigned_bit_precise_int // unsigned _BitInt(N) +| 69 = @signed_bit_precise_int // signed _BitInt(N) +; + +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 +); + +bit_precise_int_types( + unique int id: @builtintype ref, + int bit_width: 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 +); +class_template_generated_from( + unique int template: @usertype ref, + int from: @usertype 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 +); +function_template_generated_from( + unique int template: @function ref, + int from: @function 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 +); +variable_template_generated_from( + unique int template: @variable ref, + int from: @variable ref +); + +is_alias_template(unique int id: @usertype ref); +alias_instantiation( + unique int to: @usertype ref, + int from: @usertype ref +); +alias_template_argument( + int type_id: @usertype ref, + int index: int ref, + int arg_type: @type ref +); +alias_template_argument_value( + int type_id: @usertype ref, + int index: int ref, + int arg_value: @expr ref +); +alias_template_generated_from( + unique int template: @usertype ref, + int from: @usertype ref +); + +template_template_instantiation( + int to: @usertype ref, + int from: @usertype ref +); +template_template_argument( + int type_id: @usertype ref, + int index: int ref, + int arg_type: @type ref +); +template_template_argument_value( + int type_id: @usertype ref, + int index: int ref, + int arg_value: @expr ref +); + +@concept = @concept_template | @concept_id; + +concept_templates( + unique int concept_id: @concept_template, + string name: string ref, + int location: @location_default ref +); +concept_instantiation( + unique int to: @concept_id ref, + int from: @concept_template ref +); +is_type_constraint(int concept_id: @concept_id ref); +concept_template_argument( + int concept_id: @concept ref, + int index: int ref, + int arg_type: @type ref +); +concept_template_argument_value( + int concept_id: @concept ref, + int index: int ref, + int arg_value: @expr ref +); + +routinetypes( + unique int id: @routinetype, + int return_type: @type ref +); + +routinetypeargs( + int routine: @routinetype ref, + int index: int ref, + int type_id: @type ref +); + +ptrtomembers( + unique int id: @ptrtomember, + int type_id: @type ref, + int class_id: @type ref +); + +/* + specifiers for types, functions, and variables + + "public", + "protected", + "private", + + "const", + "volatile", + "static", + + "pure", + "virtual", + "sealed", // Microsoft + "__interface", // Microsoft + "inline", + "explicit", + + "near", // near far extension + "far", // near far extension + "__ptr32", // Microsoft + "__ptr64", // Microsoft + "__sptr", // Microsoft + "__uptr", // Microsoft + "dllimport", // Microsoft + "dllexport", // Microsoft + "thread", // Microsoft + "naked", // Microsoft + "microsoft_inline", // Microsoft + "forceinline", // Microsoft + "selectany", // Microsoft + "nothrow", // Microsoft + "novtable", // Microsoft + "noreturn", // Microsoft + "noinline", // Microsoft + "noalias", // Microsoft + "restrict", // Microsoft +*/ + +specifiers( + unique int id: @specifier, + unique string str: string ref +); + +typespecifiers( + int type_id: @type ref, + int spec_id: @specifier ref +); + +funspecifiers( + int func_id: @function ref, + int spec_id: @specifier ref +); + +varspecifiers( + int var_id: @accessible ref, + int spec_id: @specifier ref +); + +explicit_specifier_exprs( + unique int func_id: @function ref, + int constant: @expr ref +) + +attributes( + unique int id: @attribute, + int kind: int ref, + string name: string ref, + string name_space: string ref, + int location: @location_default ref +); + +case @attribute.kind of + 0 = @gnuattribute +| 1 = @stdattribute +| 2 = @declspec +| 3 = @msattribute +| 4 = @alignas +// ... 5 @objc_propertyattribute deprecated +; + +attribute_args( + unique int id: @attribute_arg, + int kind: int ref, + int attribute: @attribute ref, + int index: int ref, + int location: @location_default ref +); + +case @attribute_arg.kind of + 0 = @attribute_arg_empty +| 1 = @attribute_arg_token +| 2 = @attribute_arg_constant +| 3 = @attribute_arg_type +| 4 = @attribute_arg_constant_expr +| 5 = @attribute_arg_expr +; + +attribute_arg_value( + unique int arg: @attribute_arg ref, + string value: string ref +); +attribute_arg_type( + unique int arg: @attribute_arg ref, + int type_id: @type ref +); +attribute_arg_constant( + unique int arg: @attribute_arg ref, + int constant: @expr ref +) +attribute_arg_expr( + unique int arg: @attribute_arg ref, + int expr: @expr ref +) +attribute_arg_name( + unique int arg: @attribute_arg ref, + string name: string ref +); + +typeattributes( + int type_id: @type ref, + int spec_id: @attribute ref +); + +funcattributes( + int func_id: @function ref, + int spec_id: @attribute ref +); + +varattributes( + int var_id: @accessible ref, + int spec_id: @attribute ref +); + +namespaceattributes( + int namespace_id: @namespace ref, + int spec_id: @attribute ref +); + +stmtattributes( + int stmt_id: @stmt ref, + int spec_id: @attribute ref +); + +@type = @builtintype + | @derivedtype + | @usertype + | @routinetype + | @ptrtomember + | @decltype + | @type_operator; + +unspecifiedtype( + unique int type_id: @type ref, + int unspecified_type_id: @type ref +); + +member( + int parent: @type ref, + int index: int ref, + int child: @member ref +); + +@enclosingfunction_child = @usertype | @variable | @namespace + +enclosingfunction( + unique int child: @enclosingfunction_child ref, + int parent: @function ref +); + +derivations( + unique int derivation: @derivation, + int sub: @type ref, + int index: int ref, + int super: @type ref, + int location: @location_default ref +); + +derspecifiers( + int der_id: @derivation ref, + int spec_id: @specifier ref +); + +/** + * Contains the byte offset of the base class subobject within the derived + * class. Only holds for non-virtual base classes, but see table + * `virtual_base_offsets` for offsets of virtual base class subobjects. + */ +direct_base_offsets( + unique int der_id: @derivation ref, + int offset: int ref +); + +/** + * Contains the byte offset of the virtual base class subobject for class + * `super` within a most-derived object of class `sub`. `super` can be either a + * direct or indirect base class. + */ +#keyset[sub, super] +virtual_base_offsets( + int sub: @usertype ref, + int super: @usertype ref, + int offset: int ref +); + +frienddecls( + unique int id: @frienddecl, + int type_id: @type ref, + int decl_id: @declaration ref, + int location: @location_default ref +); + +@declaredtype = @usertype ; + +@declaration = @function + | @declaredtype + | @variable + | @enumconstant + | @frienddecl + | @concept_template; + +@member = @membervariable + | @function + | @declaredtype + | @enumconstant; + +@locatable = @diagnostic + | @declaration + | @ppd_include + | @ppd_define + | @macroinvocation + /*| @funcall*/ + | @xmllocatable + | @attribute + | @attribute_arg; + +@namedscope = @namespace | @usertype; + +@element = @locatable + | @file + | @folder + | @specifier + | @type + | @expr + | @namespace + | @initialiser + | @stmt + | @derivation + | @comment + | @preprocdirect + | @fun_decl + | @var_decl + | @type_decl + | @namespace_decl + | @using + | @namequalifier + | @specialnamequalifyingelement + | @static_assert + | @type_mention + | @lambdacapture; + +@exprparent = @element; + +comments( + unique int id: @comment, + string contents: string ref, + int location: @location_default ref +); + +commentbinding( + int id: @comment ref, + int element: @element ref +); + +exprconv( + int converted: @expr ref, + unique int conversion: @expr ref +); + +compgenerated(unique int id: @element ref); + +/** + * `destructor_call` destructs the `i`'th entity that should be + * destructed following `element`. Note that entities should be + * destructed in reverse construction order, so for a given `element` + * these should be called from highest to lowest `i`. + */ +#keyset[element, destructor_call] +#keyset[element, i] +synthetic_destructor_call( + int element: @element ref, + int i: int ref, + int destructor_call: @routineexpr ref +); + +namespaces( + unique int id: @namespace, + string name: string ref +); + +namespace_inline( + unique int id: @namespace ref +); + +namespacembrs( + int parentid: @namespace ref, + unique int memberid: @namespacembr ref +); + +@namespacembr = @declaration | @namespace; + +exprparents( + int expr_id: @expr ref, + int child_index: int ref, + int parent_id: @exprparent ref +); + +expr_isload(unique int expr_id: @expr ref); + +@cast = @c_style_cast + | @const_cast + | @dynamic_cast + | @reinterpret_cast + | @static_cast + ; + +/* +case @conversion.kind of + 0 = @simple_conversion // a numeric conversion, qualification conversion, or a reinterpret_cast +| 1 = @bool_conversion // conversion to 'bool' +| 2 = @base_class_conversion // a derived-to-base conversion +| 3 = @derived_class_conversion // a base-to-derived conversion +| 4 = @pm_base_class_conversion // a derived-to-base conversion of a pointer to member +| 5 = @pm_derived_class_conversion // a base-to-derived conversion of a pointer to member +| 6 = @glvalue_adjust // an adjustment of the type of a glvalue +| 7 = @prvalue_adjust // an adjustment of the type of a prvalue +; +*/ +/** + * Describes the semantics represented by a cast expression. This is largely + * independent of the source syntax of the cast, so it is separate from the + * regular expression kind. + */ +conversionkinds( + unique int expr_id: @cast ref, + int kind: int ref +); + +@conversion = @cast + | @array_to_pointer + | @parexpr + | @reference_to + | @ref_indirect + | @temp_init + | @c11_generic + ; + +/* +case @funbindexpr.kind of + 0 = @normal_call // a normal call +| 1 = @virtual_call // a virtual call +| 2 = @adl_call // a call whose target is only found by ADL +; +*/ +iscall( + unique int caller: @funbindexpr ref, + int kind: int ref +); + +numtemplatearguments( + unique int expr_id: @expr ref, + int num: int ref +); + +specialnamequalifyingelements( + unique int id: @specialnamequalifyingelement, + unique string name: string ref +); + +@namequalifiableelement = @expr | @namequalifier; +@namequalifyingelement = @namespace + | @specialnamequalifyingelement + | @usertype + | @decltype + | @derivedtype; + +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 +| 394 = @isinvocable +| 395 = @isnothrowinvocable +| 396 = @isbitwisecloneable +; + +@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 + | @isinvocable + | @isnothrowinvocable + | @isbitwisecloneable + ; + +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 +); + +param_ref_to_this( + int expr: @param_ref 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 +| 17 = @ppd_embed +| 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 +); + +embeds( + unique int id: @ppd_embed 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 +); + +/*- Database metadata -*/ + +/** + * The CLI will automatically emit applicable tuples for this table, + * such as `databaseMetadata("isOverlay", "true")` when building an + * overlay database. + */ +databaseMetadata( + string metadataKey: string ref, + string value: string ref +); + +/*- Overlay support -*/ + +/** + * The CLI will automatically emit tuples for each new/modified/deleted file + * when building an overlay database. + */ +overlayChangedFiles( + string path: string ref +); + +/*- XML Files -*/ + +xmlEncoding( + unique int id: @file ref, + string encoding: string ref +); + +xmlDTDs( + unique int id: @xmldtd, + string root: string ref, + string publicId: string ref, + string systemId: string ref, + int fileid: @file ref +); + +xmlElements( + unique int id: @xmlelement, + string name: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int fileid: @file ref +); + +xmlAttrs( + unique int id: @xmlattribute, + int elementid: @xmlelement ref, + string name: string ref, + string value: string ref, + int idx: int ref, + int fileid: @file ref +); + +xmlNs( + int id: @xmlnamespace, + string prefixName: string ref, + string URI: string ref, + int fileid: @file ref +); + +xmlHasNs( + int elementId: @xmlnamespaceable ref, + int nsId: @xmlnamespace ref, + int fileid: @file ref +); + +xmlComments( + unique int id: @xmlcomment, + string text: string ref, + int parentid: @xmlparent ref, + int fileid: @file ref +); + +xmlChars( + unique int id: @xmlcharacters, + string text: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int isCDATA: int ref, + int fileid: @file ref +); + +@xmlparent = @file | @xmlelement; +@xmlnamespaceable = @xmlelement | @xmlattribute; + +xmllocations( + int xmlElement: @xmllocatable ref, + int location: @location_default ref +); + +@xmllocatable = @xmlcharacters | @xmlelement | @xmlcomment | @xmlattribute | @xmldtd | @file | @xmlnamespace; diff --git a/cpp/downgrades/6aec212e408fad907b19368a3376a4d9837783d2/semmlecode.cpp.dbscheme b/cpp/downgrades/6aec212e408fad907b19368a3376a4d9837783d2/semmlecode.cpp.dbscheme new file mode 100644 index 000000000000..0853f43dc8c0 --- /dev/null +++ b/cpp/downgrades/6aec212e408fad907b19368a3376a4d9837783d2/semmlecode.cpp.dbscheme @@ -0,0 +1,2578 @@ + +/*- Compilations -*/ + +/** + * An invocation of the compiler. Note that more than one file may be + * compiled per invocation. For example, this command compiles three + * source files: + * + * gcc -c f1.c f2.c f3.c + * + * The `id` simply identifies the invocation, while `cwd` is the working + * directory from which the compiler was invoked. + */ +compilations( + /** + * An invocation of the compiler. Note that more than one file may + * be compiled per invocation. For example, this command compiles + * three source files: + * + * gcc -c f1.c f2.c f3.c + */ + unique int id : @compilation, + string cwd : string ref +); + +/** + * The arguments that were passed to the extractor for a compiler + * invocation. If `id` is for the compiler invocation + * + * gcc -c f1.c f2.c f3.c + * + * then typically there will be rows for + * + * num | arg + * --- | --- + * 0 | *path to extractor* + * 1 | `--mimic` + * 2 | `/usr/bin/gcc` + * 3 | `-c` + * 4 | f1.c + * 5 | f2.c + * 6 | f3.c + */ +#keyset[id, num] +compilation_args( + int id : @compilation ref, + int num : int ref, + string arg : string ref +); + +/** + * The expanded arguments that were passed to the extractor for a + * compiler invocation. This is similar to `compilation_args`, but + * for a `@someFile` argument, it includes the arguments from that + * file, rather than just taking the argument literally. + */ +#keyset[id, num] +compilation_expanded_args( + int id : @compilation ref, + int num : int ref, + string arg : string ref +); + +/** + * Optionally, record the build mode for each compilation. + */ +compilation_build_mode( + unique int id : @compilation ref, + int mode : int ref +); + +/* +case @compilation_build_mode.mode of + 0 = @build_mode_none +| 1 = @build_mode_manual +| 2 = @build_mode_auto +; +*/ + +/** + * The source files that are compiled by a compiler invocation. + * If `id` is for the compiler invocation + * + * gcc -c f1.c f2.c f3.c + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | f1.c + * 1 | f2.c + * 2 | f3.c + * + * Note that even if those files `#include` headers, those headers + * do not appear as rows. + */ +#keyset[id, num] +compilation_compiling_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The time taken by the extractor for a compiler invocation. + * + * For each file `num`, there will be rows for + * + * kind | seconds + * ---- | --- + * 1 | CPU seconds used by the extractor frontend + * 2 | Elapsed seconds during the extractor frontend + * 3 | CPU seconds used by the extractor backend + * 4 | Elapsed seconds during the extractor backend + */ +#keyset[id, num, kind] +compilation_time( + int id : @compilation ref, + int num : int ref, + /* kind: + 1 = frontend_cpu_seconds + 2 = frontend_elapsed_seconds + 3 = extractor_cpu_seconds + 4 = extractor_elapsed_seconds + */ + int kind : int ref, + float seconds : float ref +); + +/** + * An error or warning generated by the extractor. + * The diagnostic message `diagnostic` was generated during compiler + * invocation `compilation`, and is the `file_number_diagnostic_number`th + * message generated while extracting the `file_number`th file of that + * invocation. + */ +#keyset[compilation, file_number, file_number_diagnostic_number] +diagnostic_for( + int diagnostic : @diagnostic ref, + int compilation : @compilation ref, + int file_number : int ref, + int file_number_diagnostic_number : int ref +); + +/** + * If extraction was successful, then `cpu_seconds` and + * `elapsed_seconds` are the CPU time and elapsed time (respectively) + * that extraction took for compiler invocation `id`. + */ +compilation_finished( + unique int id : @compilation ref, + float cpu_seconds : float ref, + float elapsed_seconds : float ref +); + +/*- External data -*/ + +/** + * External data, loaded from CSV files during snapshot creation. See + * [Tutorial: Incorporating external data](https://help.semmle.com/wiki/display/SD/Tutorial%3A+Incorporating+external+data) + * for more information. + */ +externalData( + int id : @externalDataElement, + string path : string ref, + int column: int ref, + string value : string ref +); + +/*- Source location prefix -*/ + +/** + * The source location of the snapshot. + */ +sourceLocationPrefix(string prefix : string ref); + +/*- Files and folders -*/ + +/** + * The location of an element. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_default( + unique int id: @location_default, + int file: @file ref, + int beginLine: int ref, + int beginColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +files( + unique int id: @file, + string name: string ref +); + +folders( + unique int id: @folder, + string name: string ref +); + +@container = @file | @folder + +containerparent( + int parent: @container ref, + unique int child: @container ref +); + +/*- Lines of code -*/ + +numlines( + int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: int ref +); + +/*- Diagnostic messages -*/ + +diagnostics( + unique int id: @diagnostic, + int severity: int ref, + string error_tag: string ref, + string error_message: string ref, + string full_error_message: string ref, + int location: @location_default ref +); + +/*- C++ dbscheme -*/ + +extractor_version( + string codeql_version: string ref, + string frontend_version: string ref +) + +/** + * Gives the TRAP filename that `trap` is associated with. + * For debugging only. + */ +trap_filename( + int trap: @trap, + string filename: string ref +); + +/** + * Gives the tag name for `tag`. + * For debugging only. + */ +tag_name( + int tag: @tag, + string name: string ref +); + +@trap_or_tag = @tag | @trap; + +/** + * Gives the name for the source file. + */ +source_file_name( + int sf: @source_file, + string name: string ref +); + +/** + * In `build-mode: none` overlay mode, indicates that `source_file` + * (`/path/to/foo.c`) uses the TRAP file `trap_file`; i.e. it is the + * TRAP file corresponding to `foo.c`, something it transitively + * includes, or a template instantiation it transitively uses. + */ +source_file_uses_trap( + int source_file: @source_file ref, + int trap_file: @trap ref +); + +/** + * In `build-mode: none` overlay mode, indicates that the TRAP file + * `trap_file` uses tag `tag`. + */ +trap_uses_tag( + int trap_file: @trap ref, + int tag: @tag ref +); + +/** + * Holds if there is a definition of `element` in TRAP file or tag `t`. + */ +in_trap_or_tag( + int element: @element ref, + int t: @trap_or_tag 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 +// ... 41 _Decimal64 +// ... 42 _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 +); +class_template_generated_from( + unique int template: @usertype ref, + int from: @usertype 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 +); +function_template_generated_from( + unique int template: @function ref, + int from: @function 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 +); +variable_template_generated_from( + unique int template: @variable ref, + int from: @variable ref +); + +is_alias_template(unique int id: @usertype ref); +alias_instantiation( + unique int to: @usertype ref, + int from: @usertype ref +); +alias_template_argument( + int type_id: @usertype ref, + int index: int ref, + int arg_type: @type ref +); +alias_template_argument_value( + int type_id: @usertype ref, + int index: int ref, + int arg_value: @expr ref +); +alias_template_generated_from( + unique int template: @usertype ref, + int from: @usertype ref +); + +template_template_instantiation( + int to: @usertype ref, + int from: @usertype ref +); +template_template_argument( + int type_id: @usertype ref, + int index: int ref, + int arg_type: @type ref +); +template_template_argument_value( + int type_id: @usertype ref, + int index: int ref, + int arg_value: @expr ref +); + +@concept = @concept_template | @concept_id; + +concept_templates( + unique int concept_id: @concept_template, + string name: string ref, + int location: @location_default ref +); +concept_instantiation( + unique int to: @concept_id ref, + int from: @concept_template ref +); +is_type_constraint(int concept_id: @concept_id ref); +concept_template_argument( + int concept_id: @concept ref, + int index: int ref, + int arg_type: @type ref +); +concept_template_argument_value( + int concept_id: @concept ref, + int index: int ref, + int arg_value: @expr ref +); + +routinetypes( + unique int id: @routinetype, + int return_type: @type ref +); + +routinetypeargs( + int routine: @routinetype ref, + int index: int ref, + int type_id: @type ref +); + +ptrtomembers( + unique int id: @ptrtomember, + int type_id: @type ref, + int class_id: @type ref +); + +/* + specifiers for types, functions, and variables + + "public", + "protected", + "private", + + "const", + "volatile", + "static", + + "pure", + "virtual", + "sealed", // Microsoft + "__interface", // Microsoft + "inline", + "explicit", + + "near", // near far extension + "far", // near far extension + "__ptr32", // Microsoft + "__ptr64", // Microsoft + "__sptr", // Microsoft + "__uptr", // Microsoft + "dllimport", // Microsoft + "dllexport", // Microsoft + "thread", // Microsoft + "naked", // Microsoft + "microsoft_inline", // Microsoft + "forceinline", // Microsoft + "selectany", // Microsoft + "nothrow", // Microsoft + "novtable", // Microsoft + "noreturn", // Microsoft + "noinline", // Microsoft + "noalias", // Microsoft + "restrict", // Microsoft +*/ + +specifiers( + unique int id: @specifier, + unique string str: string ref +); + +typespecifiers( + int type_id: @type ref, + int spec_id: @specifier ref +); + +funspecifiers( + int func_id: @function ref, + int spec_id: @specifier ref +); + +varspecifiers( + int var_id: @accessible ref, + int spec_id: @specifier ref +); + +explicit_specifier_exprs( + unique int func_id: @function ref, + int constant: @expr ref +) + +attributes( + unique int id: @attribute, + int kind: int ref, + string name: string ref, + string name_space: string ref, + int location: @location_default ref +); + +case @attribute.kind of + 0 = @gnuattribute +| 1 = @stdattribute +| 2 = @declspec +| 3 = @msattribute +| 4 = @alignas +// ... 5 @objc_propertyattribute deprecated +; + +attribute_args( + unique int id: @attribute_arg, + int kind: int ref, + int attribute: @attribute ref, + int index: int ref, + int location: @location_default ref +); + +case @attribute_arg.kind of + 0 = @attribute_arg_empty +| 1 = @attribute_arg_token +| 2 = @attribute_arg_constant +| 3 = @attribute_arg_type +| 4 = @attribute_arg_constant_expr +| 5 = @attribute_arg_expr +; + +attribute_arg_value( + unique int arg: @attribute_arg ref, + string value: string ref +); +attribute_arg_type( + unique int arg: @attribute_arg ref, + int type_id: @type ref +); +attribute_arg_constant( + unique int arg: @attribute_arg ref, + int constant: @expr ref +) +attribute_arg_expr( + unique int arg: @attribute_arg ref, + int expr: @expr ref +) +attribute_arg_name( + unique int arg: @attribute_arg ref, + string name: string ref +); + +typeattributes( + int type_id: @type ref, + int spec_id: @attribute ref +); + +funcattributes( + int func_id: @function ref, + int spec_id: @attribute ref +); + +varattributes( + int var_id: @accessible ref, + int spec_id: @attribute ref +); + +namespaceattributes( + int namespace_id: @namespace ref, + int spec_id: @attribute ref +); + +stmtattributes( + int stmt_id: @stmt ref, + int spec_id: @attribute ref +); + +@type = @builtintype + | @derivedtype + | @usertype + | @routinetype + | @ptrtomember + | @decltype + | @type_operator; + +unspecifiedtype( + unique int type_id: @type ref, + int unspecified_type_id: @type ref +); + +member( + int parent: @type ref, + int index: int ref, + int child: @member ref +); + +@enclosingfunction_child = @usertype | @variable | @namespace + +enclosingfunction( + unique int child: @enclosingfunction_child ref, + int parent: @function ref +); + +derivations( + unique int derivation: @derivation, + int sub: @type ref, + int index: int ref, + int super: @type ref, + int location: @location_default ref +); + +derspecifiers( + int der_id: @derivation ref, + int spec_id: @specifier ref +); + +/** + * Contains the byte offset of the base class subobject within the derived + * class. Only holds for non-virtual base classes, but see table + * `virtual_base_offsets` for offsets of virtual base class subobjects. + */ +direct_base_offsets( + unique int der_id: @derivation ref, + int offset: int ref +); + +/** + * Contains the byte offset of the virtual base class subobject for class + * `super` within a most-derived object of class `sub`. `super` can be either a + * direct or indirect base class. + */ +#keyset[sub, super] +virtual_base_offsets( + int sub: @usertype ref, + int super: @usertype ref, + int offset: int ref +); + +frienddecls( + unique int id: @frienddecl, + int type_id: @type ref, + int decl_id: @declaration ref, + int location: @location_default ref +); + +@declaredtype = @usertype ; + +@declaration = @function + | @declaredtype + | @variable + | @enumconstant + | @frienddecl + | @concept_template; + +@member = @membervariable + | @function + | @declaredtype + | @enumconstant; + +@locatable = @diagnostic + | @declaration + | @ppd_include + | @ppd_define + | @macroinvocation + /*| @funcall*/ + | @xmllocatable + | @attribute + | @attribute_arg; + +@namedscope = @namespace | @usertype; + +@element = @locatable + | @file + | @folder + | @specifier + | @type + | @expr + | @namespace + | @initialiser + | @stmt + | @derivation + | @comment + | @preprocdirect + | @fun_decl + | @var_decl + | @type_decl + | @namespace_decl + | @using + | @namequalifier + | @specialnamequalifyingelement + | @static_assert + | @type_mention + | @lambdacapture; + +@exprparent = @element; + +comments( + unique int id: @comment, + string contents: string ref, + int location: @location_default ref +); + +commentbinding( + int id: @comment ref, + int element: @element ref +); + +exprconv( + int converted: @expr ref, + unique int conversion: @expr ref +); + +compgenerated(unique int id: @element ref); + +/** + * `destructor_call` destructs the `i`'th entity that should be + * destructed following `element`. Note that entities should be + * destructed in reverse construction order, so for a given `element` + * these should be called from highest to lowest `i`. + */ +#keyset[element, destructor_call] +#keyset[element, i] +synthetic_destructor_call( + int element: @element ref, + int i: int ref, + int destructor_call: @routineexpr ref +); + +namespaces( + unique int id: @namespace, + string name: string ref +); + +namespace_inline( + unique int id: @namespace ref +); + +namespacembrs( + int parentid: @namespace ref, + unique int memberid: @namespacembr ref +); + +@namespacembr = @declaration | @namespace; + +exprparents( + int expr_id: @expr ref, + int child_index: int ref, + int parent_id: @exprparent ref +); + +expr_isload(unique int expr_id: @expr ref); + +@cast = @c_style_cast + | @const_cast + | @dynamic_cast + | @reinterpret_cast + | @static_cast + ; + +/* +case @conversion.kind of + 0 = @simple_conversion // a numeric conversion, qualification conversion, or a reinterpret_cast +| 1 = @bool_conversion // conversion to 'bool' +| 2 = @base_class_conversion // a derived-to-base conversion +| 3 = @derived_class_conversion // a base-to-derived conversion +| 4 = @pm_base_class_conversion // a derived-to-base conversion of a pointer to member +| 5 = @pm_derived_class_conversion // a base-to-derived conversion of a pointer to member +| 6 = @glvalue_adjust // an adjustment of the type of a glvalue +| 7 = @prvalue_adjust // an adjustment of the type of a prvalue +; +*/ +/** + * Describes the semantics represented by a cast expression. This is largely + * independent of the source syntax of the cast, so it is separate from the + * regular expression kind. + */ +conversionkinds( + unique int expr_id: @cast ref, + int kind: int ref +); + +@conversion = @cast + | @array_to_pointer + | @parexpr + | @reference_to + | @ref_indirect + | @temp_init + | @c11_generic + ; + +/* +case @funbindexpr.kind of + 0 = @normal_call // a normal call +| 1 = @virtual_call // a virtual call +| 2 = @adl_call // a call whose target is only found by ADL +; +*/ +iscall( + unique int caller: @funbindexpr ref, + int kind: int ref +); + +numtemplatearguments( + unique int expr_id: @expr ref, + int num: int ref +); + +specialnamequalifyingelements( + unique int id: @specialnamequalifyingelement, + unique string name: string ref +); + +@namequalifiableelement = @expr | @namequalifier; +@namequalifyingelement = @namespace + | @specialnamequalifyingelement + | @usertype + | @decltype + | @derivedtype; + +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 +| 394 = @isinvocable +| 395 = @isnothrowinvocable +| 396 = @isbitwisecloneable +; + +@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 + | @isinvocable + | @isnothrowinvocable + | @isbitwisecloneable + ; + +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 +); + +param_ref_to_this( + int expr: @param_ref 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 +| 17 = @ppd_embed +| 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 +); + +embeds( + unique int id: @ppd_embed 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 +); + +/*- Database metadata -*/ + +/** + * The CLI will automatically emit applicable tuples for this table, + * such as `databaseMetadata("isOverlay", "true")` when building an + * overlay database. + */ +databaseMetadata( + string metadataKey: string ref, + string value: string ref +); + +/*- Overlay support -*/ + +/** + * The CLI will automatically emit tuples for each new/modified/deleted file + * when building an overlay database. + */ +overlayChangedFiles( + string path: string ref +); + +/*- XML Files -*/ + +xmlEncoding( + unique int id: @file ref, + string encoding: string ref +); + +xmlDTDs( + unique int id: @xmldtd, + string root: string ref, + string publicId: string ref, + string systemId: string ref, + int fileid: @file ref +); + +xmlElements( + unique int id: @xmlelement, + string name: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int fileid: @file ref +); + +xmlAttrs( + unique int id: @xmlattribute, + int elementid: @xmlelement ref, + string name: string ref, + string value: string ref, + int idx: int ref, + int fileid: @file ref +); + +xmlNs( + int id: @xmlnamespace, + string prefixName: string ref, + string URI: string ref, + int fileid: @file ref +); + +xmlHasNs( + int elementId: @xmlnamespaceable ref, + int nsId: @xmlnamespace ref, + int fileid: @file ref +); + +xmlComments( + unique int id: @xmlcomment, + string text: string ref, + int parentid: @xmlparent ref, + int fileid: @file ref +); + +xmlChars( + unique int id: @xmlcharacters, + string text: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int isCDATA: int ref, + int fileid: @file ref +); + +@xmlparent = @file | @xmlelement; +@xmlnamespaceable = @xmlelement | @xmlattribute; + +xmllocations( + int xmlElement: @xmllocatable ref, + int location: @location_default ref +); + +@xmllocatable = @xmlcharacters | @xmlelement | @xmlcomment | @xmlattribute | @xmldtd | @file | @xmlnamespace; diff --git a/cpp/downgrades/6aec212e408fad907b19368a3376a4d9837783d2/upgrade.properties b/cpp/downgrades/6aec212e408fad907b19368a3376a4d9837783d2/upgrade.properties new file mode 100644 index 000000000000..f387b03144f0 --- /dev/null +++ b/cpp/downgrades/6aec212e408fad907b19368a3376a4d9837783d2/upgrade.properties @@ -0,0 +1,4 @@ +description: Support C23 _BitInt +compatibility: full +bit_precise_int_types.rel: delete +builtintypes.rel: run builtintypes.qlo diff --git a/cpp/ql/lib/upgrades/0853f43dc8c08deecb473c54a2b70da8597f1ab5/old.dbscheme b/cpp/ql/lib/upgrades/0853f43dc8c08deecb473c54a2b70da8597f1ab5/old.dbscheme new file mode 100644 index 000000000000..0853f43dc8c0 --- /dev/null +++ b/cpp/ql/lib/upgrades/0853f43dc8c08deecb473c54a2b70da8597f1ab5/old.dbscheme @@ -0,0 +1,2578 @@ + +/*- Compilations -*/ + +/** + * An invocation of the compiler. Note that more than one file may be + * compiled per invocation. For example, this command compiles three + * source files: + * + * gcc -c f1.c f2.c f3.c + * + * The `id` simply identifies the invocation, while `cwd` is the working + * directory from which the compiler was invoked. + */ +compilations( + /** + * An invocation of the compiler. Note that more than one file may + * be compiled per invocation. For example, this command compiles + * three source files: + * + * gcc -c f1.c f2.c f3.c + */ + unique int id : @compilation, + string cwd : string ref +); + +/** + * The arguments that were passed to the extractor for a compiler + * invocation. If `id` is for the compiler invocation + * + * gcc -c f1.c f2.c f3.c + * + * then typically there will be rows for + * + * num | arg + * --- | --- + * 0 | *path to extractor* + * 1 | `--mimic` + * 2 | `/usr/bin/gcc` + * 3 | `-c` + * 4 | f1.c + * 5 | f2.c + * 6 | f3.c + */ +#keyset[id, num] +compilation_args( + int id : @compilation ref, + int num : int ref, + string arg : string ref +); + +/** + * The expanded arguments that were passed to the extractor for a + * compiler invocation. This is similar to `compilation_args`, but + * for a `@someFile` argument, it includes the arguments from that + * file, rather than just taking the argument literally. + */ +#keyset[id, num] +compilation_expanded_args( + int id : @compilation ref, + int num : int ref, + string arg : string ref +); + +/** + * Optionally, record the build mode for each compilation. + */ +compilation_build_mode( + unique int id : @compilation ref, + int mode : int ref +); + +/* +case @compilation_build_mode.mode of + 0 = @build_mode_none +| 1 = @build_mode_manual +| 2 = @build_mode_auto +; +*/ + +/** + * The source files that are compiled by a compiler invocation. + * If `id` is for the compiler invocation + * + * gcc -c f1.c f2.c f3.c + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | f1.c + * 1 | f2.c + * 2 | f3.c + * + * Note that even if those files `#include` headers, those headers + * do not appear as rows. + */ +#keyset[id, num] +compilation_compiling_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The time taken by the extractor for a compiler invocation. + * + * For each file `num`, there will be rows for + * + * kind | seconds + * ---- | --- + * 1 | CPU seconds used by the extractor frontend + * 2 | Elapsed seconds during the extractor frontend + * 3 | CPU seconds used by the extractor backend + * 4 | Elapsed seconds during the extractor backend + */ +#keyset[id, num, kind] +compilation_time( + int id : @compilation ref, + int num : int ref, + /* kind: + 1 = frontend_cpu_seconds + 2 = frontend_elapsed_seconds + 3 = extractor_cpu_seconds + 4 = extractor_elapsed_seconds + */ + int kind : int ref, + float seconds : float ref +); + +/** + * An error or warning generated by the extractor. + * The diagnostic message `diagnostic` was generated during compiler + * invocation `compilation`, and is the `file_number_diagnostic_number`th + * message generated while extracting the `file_number`th file of that + * invocation. + */ +#keyset[compilation, file_number, file_number_diagnostic_number] +diagnostic_for( + int diagnostic : @diagnostic ref, + int compilation : @compilation ref, + int file_number : int ref, + int file_number_diagnostic_number : int ref +); + +/** + * If extraction was successful, then `cpu_seconds` and + * `elapsed_seconds` are the CPU time and elapsed time (respectively) + * that extraction took for compiler invocation `id`. + */ +compilation_finished( + unique int id : @compilation ref, + float cpu_seconds : float ref, + float elapsed_seconds : float ref +); + +/*- External data -*/ + +/** + * External data, loaded from CSV files during snapshot creation. See + * [Tutorial: Incorporating external data](https://help.semmle.com/wiki/display/SD/Tutorial%3A+Incorporating+external+data) + * for more information. + */ +externalData( + int id : @externalDataElement, + string path : string ref, + int column: int ref, + string value : string ref +); + +/*- Source location prefix -*/ + +/** + * The source location of the snapshot. + */ +sourceLocationPrefix(string prefix : string ref); + +/*- Files and folders -*/ + +/** + * The location of an element. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_default( + unique int id: @location_default, + int file: @file ref, + int beginLine: int ref, + int beginColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +files( + unique int id: @file, + string name: string ref +); + +folders( + unique int id: @folder, + string name: string ref +); + +@container = @file | @folder + +containerparent( + int parent: @container ref, + unique int child: @container ref +); + +/*- Lines of code -*/ + +numlines( + int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: int ref +); + +/*- Diagnostic messages -*/ + +diagnostics( + unique int id: @diagnostic, + int severity: int ref, + string error_tag: string ref, + string error_message: string ref, + string full_error_message: string ref, + int location: @location_default ref +); + +/*- C++ dbscheme -*/ + +extractor_version( + string codeql_version: string ref, + string frontend_version: string ref +) + +/** + * Gives the TRAP filename that `trap` is associated with. + * For debugging only. + */ +trap_filename( + int trap: @trap, + string filename: string ref +); + +/** + * Gives the tag name for `tag`. + * For debugging only. + */ +tag_name( + int tag: @tag, + string name: string ref +); + +@trap_or_tag = @tag | @trap; + +/** + * Gives the name for the source file. + */ +source_file_name( + int sf: @source_file, + string name: string ref +); + +/** + * In `build-mode: none` overlay mode, indicates that `source_file` + * (`/path/to/foo.c`) uses the TRAP file `trap_file`; i.e. it is the + * TRAP file corresponding to `foo.c`, something it transitively + * includes, or a template instantiation it transitively uses. + */ +source_file_uses_trap( + int source_file: @source_file ref, + int trap_file: @trap ref +); + +/** + * In `build-mode: none` overlay mode, indicates that the TRAP file + * `trap_file` uses tag `tag`. + */ +trap_uses_tag( + int trap_file: @trap ref, + int tag: @tag ref +); + +/** + * Holds if there is a definition of `element` in TRAP file or tag `t`. + */ +in_trap_or_tag( + int element: @element ref, + int t: @trap_or_tag 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 +// ... 41 _Decimal64 +// ... 42 _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 +); +class_template_generated_from( + unique int template: @usertype ref, + int from: @usertype 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 +); +function_template_generated_from( + unique int template: @function ref, + int from: @function 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 +); +variable_template_generated_from( + unique int template: @variable ref, + int from: @variable ref +); + +is_alias_template(unique int id: @usertype ref); +alias_instantiation( + unique int to: @usertype ref, + int from: @usertype ref +); +alias_template_argument( + int type_id: @usertype ref, + int index: int ref, + int arg_type: @type ref +); +alias_template_argument_value( + int type_id: @usertype ref, + int index: int ref, + int arg_value: @expr ref +); +alias_template_generated_from( + unique int template: @usertype ref, + int from: @usertype ref +); + +template_template_instantiation( + int to: @usertype ref, + int from: @usertype ref +); +template_template_argument( + int type_id: @usertype ref, + int index: int ref, + int arg_type: @type ref +); +template_template_argument_value( + int type_id: @usertype ref, + int index: int ref, + int arg_value: @expr ref +); + +@concept = @concept_template | @concept_id; + +concept_templates( + unique int concept_id: @concept_template, + string name: string ref, + int location: @location_default ref +); +concept_instantiation( + unique int to: @concept_id ref, + int from: @concept_template ref +); +is_type_constraint(int concept_id: @concept_id ref); +concept_template_argument( + int concept_id: @concept ref, + int index: int ref, + int arg_type: @type ref +); +concept_template_argument_value( + int concept_id: @concept ref, + int index: int ref, + int arg_value: @expr ref +); + +routinetypes( + unique int id: @routinetype, + int return_type: @type ref +); + +routinetypeargs( + int routine: @routinetype ref, + int index: int ref, + int type_id: @type ref +); + +ptrtomembers( + unique int id: @ptrtomember, + int type_id: @type ref, + int class_id: @type ref +); + +/* + specifiers for types, functions, and variables + + "public", + "protected", + "private", + + "const", + "volatile", + "static", + + "pure", + "virtual", + "sealed", // Microsoft + "__interface", // Microsoft + "inline", + "explicit", + + "near", // near far extension + "far", // near far extension + "__ptr32", // Microsoft + "__ptr64", // Microsoft + "__sptr", // Microsoft + "__uptr", // Microsoft + "dllimport", // Microsoft + "dllexport", // Microsoft + "thread", // Microsoft + "naked", // Microsoft + "microsoft_inline", // Microsoft + "forceinline", // Microsoft + "selectany", // Microsoft + "nothrow", // Microsoft + "novtable", // Microsoft + "noreturn", // Microsoft + "noinline", // Microsoft + "noalias", // Microsoft + "restrict", // Microsoft +*/ + +specifiers( + unique int id: @specifier, + unique string str: string ref +); + +typespecifiers( + int type_id: @type ref, + int spec_id: @specifier ref +); + +funspecifiers( + int func_id: @function ref, + int spec_id: @specifier ref +); + +varspecifiers( + int var_id: @accessible ref, + int spec_id: @specifier ref +); + +explicit_specifier_exprs( + unique int func_id: @function ref, + int constant: @expr ref +) + +attributes( + unique int id: @attribute, + int kind: int ref, + string name: string ref, + string name_space: string ref, + int location: @location_default ref +); + +case @attribute.kind of + 0 = @gnuattribute +| 1 = @stdattribute +| 2 = @declspec +| 3 = @msattribute +| 4 = @alignas +// ... 5 @objc_propertyattribute deprecated +; + +attribute_args( + unique int id: @attribute_arg, + int kind: int ref, + int attribute: @attribute ref, + int index: int ref, + int location: @location_default ref +); + +case @attribute_arg.kind of + 0 = @attribute_arg_empty +| 1 = @attribute_arg_token +| 2 = @attribute_arg_constant +| 3 = @attribute_arg_type +| 4 = @attribute_arg_constant_expr +| 5 = @attribute_arg_expr +; + +attribute_arg_value( + unique int arg: @attribute_arg ref, + string value: string ref +); +attribute_arg_type( + unique int arg: @attribute_arg ref, + int type_id: @type ref +); +attribute_arg_constant( + unique int arg: @attribute_arg ref, + int constant: @expr ref +) +attribute_arg_expr( + unique int arg: @attribute_arg ref, + int expr: @expr ref +) +attribute_arg_name( + unique int arg: @attribute_arg ref, + string name: string ref +); + +typeattributes( + int type_id: @type ref, + int spec_id: @attribute ref +); + +funcattributes( + int func_id: @function ref, + int spec_id: @attribute ref +); + +varattributes( + int var_id: @accessible ref, + int spec_id: @attribute ref +); + +namespaceattributes( + int namespace_id: @namespace ref, + int spec_id: @attribute ref +); + +stmtattributes( + int stmt_id: @stmt ref, + int spec_id: @attribute ref +); + +@type = @builtintype + | @derivedtype + | @usertype + | @routinetype + | @ptrtomember + | @decltype + | @type_operator; + +unspecifiedtype( + unique int type_id: @type ref, + int unspecified_type_id: @type ref +); + +member( + int parent: @type ref, + int index: int ref, + int child: @member ref +); + +@enclosingfunction_child = @usertype | @variable | @namespace + +enclosingfunction( + unique int child: @enclosingfunction_child ref, + int parent: @function ref +); + +derivations( + unique int derivation: @derivation, + int sub: @type ref, + int index: int ref, + int super: @type ref, + int location: @location_default ref +); + +derspecifiers( + int der_id: @derivation ref, + int spec_id: @specifier ref +); + +/** + * Contains the byte offset of the base class subobject within the derived + * class. Only holds for non-virtual base classes, but see table + * `virtual_base_offsets` for offsets of virtual base class subobjects. + */ +direct_base_offsets( + unique int der_id: @derivation ref, + int offset: int ref +); + +/** + * Contains the byte offset of the virtual base class subobject for class + * `super` within a most-derived object of class `sub`. `super` can be either a + * direct or indirect base class. + */ +#keyset[sub, super] +virtual_base_offsets( + int sub: @usertype ref, + int super: @usertype ref, + int offset: int ref +); + +frienddecls( + unique int id: @frienddecl, + int type_id: @type ref, + int decl_id: @declaration ref, + int location: @location_default ref +); + +@declaredtype = @usertype ; + +@declaration = @function + | @declaredtype + | @variable + | @enumconstant + | @frienddecl + | @concept_template; + +@member = @membervariable + | @function + | @declaredtype + | @enumconstant; + +@locatable = @diagnostic + | @declaration + | @ppd_include + | @ppd_define + | @macroinvocation + /*| @funcall*/ + | @xmllocatable + | @attribute + | @attribute_arg; + +@namedscope = @namespace | @usertype; + +@element = @locatable + | @file + | @folder + | @specifier + | @type + | @expr + | @namespace + | @initialiser + | @stmt + | @derivation + | @comment + | @preprocdirect + | @fun_decl + | @var_decl + | @type_decl + | @namespace_decl + | @using + | @namequalifier + | @specialnamequalifyingelement + | @static_assert + | @type_mention + | @lambdacapture; + +@exprparent = @element; + +comments( + unique int id: @comment, + string contents: string ref, + int location: @location_default ref +); + +commentbinding( + int id: @comment ref, + int element: @element ref +); + +exprconv( + int converted: @expr ref, + unique int conversion: @expr ref +); + +compgenerated(unique int id: @element ref); + +/** + * `destructor_call` destructs the `i`'th entity that should be + * destructed following `element`. Note that entities should be + * destructed in reverse construction order, so for a given `element` + * these should be called from highest to lowest `i`. + */ +#keyset[element, destructor_call] +#keyset[element, i] +synthetic_destructor_call( + int element: @element ref, + int i: int ref, + int destructor_call: @routineexpr ref +); + +namespaces( + unique int id: @namespace, + string name: string ref +); + +namespace_inline( + unique int id: @namespace ref +); + +namespacembrs( + int parentid: @namespace ref, + unique int memberid: @namespacembr ref +); + +@namespacembr = @declaration | @namespace; + +exprparents( + int expr_id: @expr ref, + int child_index: int ref, + int parent_id: @exprparent ref +); + +expr_isload(unique int expr_id: @expr ref); + +@cast = @c_style_cast + | @const_cast + | @dynamic_cast + | @reinterpret_cast + | @static_cast + ; + +/* +case @conversion.kind of + 0 = @simple_conversion // a numeric conversion, qualification conversion, or a reinterpret_cast +| 1 = @bool_conversion // conversion to 'bool' +| 2 = @base_class_conversion // a derived-to-base conversion +| 3 = @derived_class_conversion // a base-to-derived conversion +| 4 = @pm_base_class_conversion // a derived-to-base conversion of a pointer to member +| 5 = @pm_derived_class_conversion // a base-to-derived conversion of a pointer to member +| 6 = @glvalue_adjust // an adjustment of the type of a glvalue +| 7 = @prvalue_adjust // an adjustment of the type of a prvalue +; +*/ +/** + * Describes the semantics represented by a cast expression. This is largely + * independent of the source syntax of the cast, so it is separate from the + * regular expression kind. + */ +conversionkinds( + unique int expr_id: @cast ref, + int kind: int ref +); + +@conversion = @cast + | @array_to_pointer + | @parexpr + | @reference_to + | @ref_indirect + | @temp_init + | @c11_generic + ; + +/* +case @funbindexpr.kind of + 0 = @normal_call // a normal call +| 1 = @virtual_call // a virtual call +| 2 = @adl_call // a call whose target is only found by ADL +; +*/ +iscall( + unique int caller: @funbindexpr ref, + int kind: int ref +); + +numtemplatearguments( + unique int expr_id: @expr ref, + int num: int ref +); + +specialnamequalifyingelements( + unique int id: @specialnamequalifyingelement, + unique string name: string ref +); + +@namequalifiableelement = @expr | @namequalifier; +@namequalifyingelement = @namespace + | @specialnamequalifyingelement + | @usertype + | @decltype + | @derivedtype; + +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 +| 394 = @isinvocable +| 395 = @isnothrowinvocable +| 396 = @isbitwisecloneable +; + +@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 + | @isinvocable + | @isnothrowinvocable + | @isbitwisecloneable + ; + +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 +); + +param_ref_to_this( + int expr: @param_ref 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 +| 17 = @ppd_embed +| 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 +); + +embeds( + unique int id: @ppd_embed 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 +); + +/*- Database metadata -*/ + +/** + * The CLI will automatically emit applicable tuples for this table, + * such as `databaseMetadata("isOverlay", "true")` when building an + * overlay database. + */ +databaseMetadata( + string metadataKey: string ref, + string value: string ref +); + +/*- Overlay support -*/ + +/** + * The CLI will automatically emit tuples for each new/modified/deleted file + * when building an overlay database. + */ +overlayChangedFiles( + string path: string ref +); + +/*- XML Files -*/ + +xmlEncoding( + unique int id: @file ref, + string encoding: string ref +); + +xmlDTDs( + unique int id: @xmldtd, + string root: string ref, + string publicId: string ref, + string systemId: string ref, + int fileid: @file ref +); + +xmlElements( + unique int id: @xmlelement, + string name: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int fileid: @file ref +); + +xmlAttrs( + unique int id: @xmlattribute, + int elementid: @xmlelement ref, + string name: string ref, + string value: string ref, + int idx: int ref, + int fileid: @file ref +); + +xmlNs( + int id: @xmlnamespace, + string prefixName: string ref, + string URI: string ref, + int fileid: @file ref +); + +xmlHasNs( + int elementId: @xmlnamespaceable ref, + int nsId: @xmlnamespace ref, + int fileid: @file ref +); + +xmlComments( + unique int id: @xmlcomment, + string text: string ref, + int parentid: @xmlparent ref, + int fileid: @file ref +); + +xmlChars( + unique int id: @xmlcharacters, + string text: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int isCDATA: int ref, + int fileid: @file ref +); + +@xmlparent = @file | @xmlelement; +@xmlnamespaceable = @xmlelement | @xmlattribute; + +xmllocations( + int xmlElement: @xmllocatable ref, + int location: @location_default ref +); + +@xmllocatable = @xmlcharacters | @xmlelement | @xmlcomment | @xmlattribute | @xmldtd | @file | @xmlnamespace; diff --git a/cpp/ql/lib/upgrades/0853f43dc8c08deecb473c54a2b70da8597f1ab5/semmlecode.cpp.dbscheme b/cpp/ql/lib/upgrades/0853f43dc8c08deecb473c54a2b70da8597f1ab5/semmlecode.cpp.dbscheme new file mode 100644 index 000000000000..6aec212e408f --- /dev/null +++ b/cpp/ql/lib/upgrades/0853f43dc8c08deecb473c54a2b70da8597f1ab5/semmlecode.cpp.dbscheme @@ -0,0 +1,2588 @@ + +/*- Compilations -*/ + +/** + * An invocation of the compiler. Note that more than one file may be + * compiled per invocation. For example, this command compiles three + * source files: + * + * gcc -c f1.c f2.c f3.c + * + * The `id` simply identifies the invocation, while `cwd` is the working + * directory from which the compiler was invoked. + */ +compilations( + /** + * An invocation of the compiler. Note that more than one file may + * be compiled per invocation. For example, this command compiles + * three source files: + * + * gcc -c f1.c f2.c f3.c + */ + unique int id : @compilation, + string cwd : string ref +); + +/** + * The arguments that were passed to the extractor for a compiler + * invocation. If `id` is for the compiler invocation + * + * gcc -c f1.c f2.c f3.c + * + * then typically there will be rows for + * + * num | arg + * --- | --- + * 0 | *path to extractor* + * 1 | `--mimic` + * 2 | `/usr/bin/gcc` + * 3 | `-c` + * 4 | f1.c + * 5 | f2.c + * 6 | f3.c + */ +#keyset[id, num] +compilation_args( + int id : @compilation ref, + int num : int ref, + string arg : string ref +); + +/** + * The expanded arguments that were passed to the extractor for a + * compiler invocation. This is similar to `compilation_args`, but + * for a `@someFile` argument, it includes the arguments from that + * file, rather than just taking the argument literally. + */ +#keyset[id, num] +compilation_expanded_args( + int id : @compilation ref, + int num : int ref, + string arg : string ref +); + +/** + * Optionally, record the build mode for each compilation. + */ +compilation_build_mode( + unique int id : @compilation ref, + int mode : int ref +); + +/* +case @compilation_build_mode.mode of + 0 = @build_mode_none +| 1 = @build_mode_manual +| 2 = @build_mode_auto +; +*/ + +/** + * The source files that are compiled by a compiler invocation. + * If `id` is for the compiler invocation + * + * gcc -c f1.c f2.c f3.c + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | f1.c + * 1 | f2.c + * 2 | f3.c + * + * Note that even if those files `#include` headers, those headers + * do not appear as rows. + */ +#keyset[id, num] +compilation_compiling_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The time taken by the extractor for a compiler invocation. + * + * For each file `num`, there will be rows for + * + * kind | seconds + * ---- | --- + * 1 | CPU seconds used by the extractor frontend + * 2 | Elapsed seconds during the extractor frontend + * 3 | CPU seconds used by the extractor backend + * 4 | Elapsed seconds during the extractor backend + */ +#keyset[id, num, kind] +compilation_time( + int id : @compilation ref, + int num : int ref, + /* kind: + 1 = frontend_cpu_seconds + 2 = frontend_elapsed_seconds + 3 = extractor_cpu_seconds + 4 = extractor_elapsed_seconds + */ + int kind : int ref, + float seconds : float ref +); + +/** + * An error or warning generated by the extractor. + * The diagnostic message `diagnostic` was generated during compiler + * invocation `compilation`, and is the `file_number_diagnostic_number`th + * message generated while extracting the `file_number`th file of that + * invocation. + */ +#keyset[compilation, file_number, file_number_diagnostic_number] +diagnostic_for( + int diagnostic : @diagnostic ref, + int compilation : @compilation ref, + int file_number : int ref, + int file_number_diagnostic_number : int ref +); + +/** + * If extraction was successful, then `cpu_seconds` and + * `elapsed_seconds` are the CPU time and elapsed time (respectively) + * that extraction took for compiler invocation `id`. + */ +compilation_finished( + unique int id : @compilation ref, + float cpu_seconds : float ref, + float elapsed_seconds : float ref +); + +/*- External data -*/ + +/** + * External data, loaded from CSV files during snapshot creation. See + * [Tutorial: Incorporating external data](https://help.semmle.com/wiki/display/SD/Tutorial%3A+Incorporating+external+data) + * for more information. + */ +externalData( + int id : @externalDataElement, + string path : string ref, + int column: int ref, + string value : string ref +); + +/*- Source location prefix -*/ + +/** + * The source location of the snapshot. + */ +sourceLocationPrefix(string prefix : string ref); + +/*- Files and folders -*/ + +/** + * The location of an element. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_default( + unique int id: @location_default, + int file: @file ref, + int beginLine: int ref, + int beginColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +files( + unique int id: @file, + string name: string ref +); + +folders( + unique int id: @folder, + string name: string ref +); + +@container = @file | @folder + +containerparent( + int parent: @container ref, + unique int child: @container ref +); + +/*- Lines of code -*/ + +numlines( + int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: int ref +); + +/*- Diagnostic messages -*/ + +diagnostics( + unique int id: @diagnostic, + int severity: int ref, + string error_tag: string ref, + string error_message: string ref, + string full_error_message: string ref, + int location: @location_default ref +); + +/*- C++ dbscheme -*/ + +extractor_version( + string codeql_version: string ref, + string frontend_version: string ref +) + +/** + * Gives the TRAP filename that `trap` is associated with. + * For debugging only. + */ +trap_filename( + int trap: @trap, + string filename: string ref +); + +/** + * Gives the tag name for `tag`. + * For debugging only. + */ +tag_name( + int tag: @tag, + string name: string ref +); + +@trap_or_tag = @tag | @trap; + +/** + * Gives the name for the source file. + */ +source_file_name( + int sf: @source_file, + string name: string ref +); + +/** + * In `build-mode: none` overlay mode, indicates that `source_file` + * (`/path/to/foo.c`) uses the TRAP file `trap_file`; i.e. it is the + * TRAP file corresponding to `foo.c`, something it transitively + * includes, or a template instantiation it transitively uses. + */ +source_file_uses_trap( + int source_file: @source_file ref, + int trap_file: @trap ref +); + +/** + * In `build-mode: none` overlay mode, indicates that the TRAP file + * `trap_file` uses tag `tag`. + */ +trap_uses_tag( + int trap_file: @trap ref, + int tag: @tag ref +); + +/** + * Holds if there is a definition of `element` in TRAP file or tag `t`. + */ +in_trap_or_tag( + int element: @element ref, + int t: @trap_or_tag 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 +// ... 41 _Decimal64 +// ... 42 _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 +| 67 = @bit_precise_int // _BitInt(N) +| 68 = @unsigned_bit_precise_int // unsigned _BitInt(N) +| 69 = @signed_bit_precise_int // signed _BitInt(N) +; + +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 +); + +bit_precise_int_types( + unique int id: @builtintype ref, + int bit_width: 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 +); +class_template_generated_from( + unique int template: @usertype ref, + int from: @usertype 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 +); +function_template_generated_from( + unique int template: @function ref, + int from: @function 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 +); +variable_template_generated_from( + unique int template: @variable ref, + int from: @variable ref +); + +is_alias_template(unique int id: @usertype ref); +alias_instantiation( + unique int to: @usertype ref, + int from: @usertype ref +); +alias_template_argument( + int type_id: @usertype ref, + int index: int ref, + int arg_type: @type ref +); +alias_template_argument_value( + int type_id: @usertype ref, + int index: int ref, + int arg_value: @expr ref +); +alias_template_generated_from( + unique int template: @usertype ref, + int from: @usertype ref +); + +template_template_instantiation( + int to: @usertype ref, + int from: @usertype ref +); +template_template_argument( + int type_id: @usertype ref, + int index: int ref, + int arg_type: @type ref +); +template_template_argument_value( + int type_id: @usertype ref, + int index: int ref, + int arg_value: @expr ref +); + +@concept = @concept_template | @concept_id; + +concept_templates( + unique int concept_id: @concept_template, + string name: string ref, + int location: @location_default ref +); +concept_instantiation( + unique int to: @concept_id ref, + int from: @concept_template ref +); +is_type_constraint(int concept_id: @concept_id ref); +concept_template_argument( + int concept_id: @concept ref, + int index: int ref, + int arg_type: @type ref +); +concept_template_argument_value( + int concept_id: @concept ref, + int index: int ref, + int arg_value: @expr ref +); + +routinetypes( + unique int id: @routinetype, + int return_type: @type ref +); + +routinetypeargs( + int routine: @routinetype ref, + int index: int ref, + int type_id: @type ref +); + +ptrtomembers( + unique int id: @ptrtomember, + int type_id: @type ref, + int class_id: @type ref +); + +/* + specifiers for types, functions, and variables + + "public", + "protected", + "private", + + "const", + "volatile", + "static", + + "pure", + "virtual", + "sealed", // Microsoft + "__interface", // Microsoft + "inline", + "explicit", + + "near", // near far extension + "far", // near far extension + "__ptr32", // Microsoft + "__ptr64", // Microsoft + "__sptr", // Microsoft + "__uptr", // Microsoft + "dllimport", // Microsoft + "dllexport", // Microsoft + "thread", // Microsoft + "naked", // Microsoft + "microsoft_inline", // Microsoft + "forceinline", // Microsoft + "selectany", // Microsoft + "nothrow", // Microsoft + "novtable", // Microsoft + "noreturn", // Microsoft + "noinline", // Microsoft + "noalias", // Microsoft + "restrict", // Microsoft +*/ + +specifiers( + unique int id: @specifier, + unique string str: string ref +); + +typespecifiers( + int type_id: @type ref, + int spec_id: @specifier ref +); + +funspecifiers( + int func_id: @function ref, + int spec_id: @specifier ref +); + +varspecifiers( + int var_id: @accessible ref, + int spec_id: @specifier ref +); + +explicit_specifier_exprs( + unique int func_id: @function ref, + int constant: @expr ref +) + +attributes( + unique int id: @attribute, + int kind: int ref, + string name: string ref, + string name_space: string ref, + int location: @location_default ref +); + +case @attribute.kind of + 0 = @gnuattribute +| 1 = @stdattribute +| 2 = @declspec +| 3 = @msattribute +| 4 = @alignas +// ... 5 @objc_propertyattribute deprecated +; + +attribute_args( + unique int id: @attribute_arg, + int kind: int ref, + int attribute: @attribute ref, + int index: int ref, + int location: @location_default ref +); + +case @attribute_arg.kind of + 0 = @attribute_arg_empty +| 1 = @attribute_arg_token +| 2 = @attribute_arg_constant +| 3 = @attribute_arg_type +| 4 = @attribute_arg_constant_expr +| 5 = @attribute_arg_expr +; + +attribute_arg_value( + unique int arg: @attribute_arg ref, + string value: string ref +); +attribute_arg_type( + unique int arg: @attribute_arg ref, + int type_id: @type ref +); +attribute_arg_constant( + unique int arg: @attribute_arg ref, + int constant: @expr ref +) +attribute_arg_expr( + unique int arg: @attribute_arg ref, + int expr: @expr ref +) +attribute_arg_name( + unique int arg: @attribute_arg ref, + string name: string ref +); + +typeattributes( + int type_id: @type ref, + int spec_id: @attribute ref +); + +funcattributes( + int func_id: @function ref, + int spec_id: @attribute ref +); + +varattributes( + int var_id: @accessible ref, + int spec_id: @attribute ref +); + +namespaceattributes( + int namespace_id: @namespace ref, + int spec_id: @attribute ref +); + +stmtattributes( + int stmt_id: @stmt ref, + int spec_id: @attribute ref +); + +@type = @builtintype + | @derivedtype + | @usertype + | @routinetype + | @ptrtomember + | @decltype + | @type_operator; + +unspecifiedtype( + unique int type_id: @type ref, + int unspecified_type_id: @type ref +); + +member( + int parent: @type ref, + int index: int ref, + int child: @member ref +); + +@enclosingfunction_child = @usertype | @variable | @namespace + +enclosingfunction( + unique int child: @enclosingfunction_child ref, + int parent: @function ref +); + +derivations( + unique int derivation: @derivation, + int sub: @type ref, + int index: int ref, + int super: @type ref, + int location: @location_default ref +); + +derspecifiers( + int der_id: @derivation ref, + int spec_id: @specifier ref +); + +/** + * Contains the byte offset of the base class subobject within the derived + * class. Only holds for non-virtual base classes, but see table + * `virtual_base_offsets` for offsets of virtual base class subobjects. + */ +direct_base_offsets( + unique int der_id: @derivation ref, + int offset: int ref +); + +/** + * Contains the byte offset of the virtual base class subobject for class + * `super` within a most-derived object of class `sub`. `super` can be either a + * direct or indirect base class. + */ +#keyset[sub, super] +virtual_base_offsets( + int sub: @usertype ref, + int super: @usertype ref, + int offset: int ref +); + +frienddecls( + unique int id: @frienddecl, + int type_id: @type ref, + int decl_id: @declaration ref, + int location: @location_default ref +); + +@declaredtype = @usertype ; + +@declaration = @function + | @declaredtype + | @variable + | @enumconstant + | @frienddecl + | @concept_template; + +@member = @membervariable + | @function + | @declaredtype + | @enumconstant; + +@locatable = @diagnostic + | @declaration + | @ppd_include + | @ppd_define + | @macroinvocation + /*| @funcall*/ + | @xmllocatable + | @attribute + | @attribute_arg; + +@namedscope = @namespace | @usertype; + +@element = @locatable + | @file + | @folder + | @specifier + | @type + | @expr + | @namespace + | @initialiser + | @stmt + | @derivation + | @comment + | @preprocdirect + | @fun_decl + | @var_decl + | @type_decl + | @namespace_decl + | @using + | @namequalifier + | @specialnamequalifyingelement + | @static_assert + | @type_mention + | @lambdacapture; + +@exprparent = @element; + +comments( + unique int id: @comment, + string contents: string ref, + int location: @location_default ref +); + +commentbinding( + int id: @comment ref, + int element: @element ref +); + +exprconv( + int converted: @expr ref, + unique int conversion: @expr ref +); + +compgenerated(unique int id: @element ref); + +/** + * `destructor_call` destructs the `i`'th entity that should be + * destructed following `element`. Note that entities should be + * destructed in reverse construction order, so for a given `element` + * these should be called from highest to lowest `i`. + */ +#keyset[element, destructor_call] +#keyset[element, i] +synthetic_destructor_call( + int element: @element ref, + int i: int ref, + int destructor_call: @routineexpr ref +); + +namespaces( + unique int id: @namespace, + string name: string ref +); + +namespace_inline( + unique int id: @namespace ref +); + +namespacembrs( + int parentid: @namespace ref, + unique int memberid: @namespacembr ref +); + +@namespacembr = @declaration | @namespace; + +exprparents( + int expr_id: @expr ref, + int child_index: int ref, + int parent_id: @exprparent ref +); + +expr_isload(unique int expr_id: @expr ref); + +@cast = @c_style_cast + | @const_cast + | @dynamic_cast + | @reinterpret_cast + | @static_cast + ; + +/* +case @conversion.kind of + 0 = @simple_conversion // a numeric conversion, qualification conversion, or a reinterpret_cast +| 1 = @bool_conversion // conversion to 'bool' +| 2 = @base_class_conversion // a derived-to-base conversion +| 3 = @derived_class_conversion // a base-to-derived conversion +| 4 = @pm_base_class_conversion // a derived-to-base conversion of a pointer to member +| 5 = @pm_derived_class_conversion // a base-to-derived conversion of a pointer to member +| 6 = @glvalue_adjust // an adjustment of the type of a glvalue +| 7 = @prvalue_adjust // an adjustment of the type of a prvalue +; +*/ +/** + * Describes the semantics represented by a cast expression. This is largely + * independent of the source syntax of the cast, so it is separate from the + * regular expression kind. + */ +conversionkinds( + unique int expr_id: @cast ref, + int kind: int ref +); + +@conversion = @cast + | @array_to_pointer + | @parexpr + | @reference_to + | @ref_indirect + | @temp_init + | @c11_generic + ; + +/* +case @funbindexpr.kind of + 0 = @normal_call // a normal call +| 1 = @virtual_call // a virtual call +| 2 = @adl_call // a call whose target is only found by ADL +; +*/ +iscall( + unique int caller: @funbindexpr ref, + int kind: int ref +); + +numtemplatearguments( + unique int expr_id: @expr ref, + int num: int ref +); + +specialnamequalifyingelements( + unique int id: @specialnamequalifyingelement, + unique string name: string ref +); + +@namequalifiableelement = @expr | @namequalifier; +@namequalifyingelement = @namespace + | @specialnamequalifyingelement + | @usertype + | @decltype + | @derivedtype; + +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 +| 394 = @isinvocable +| 395 = @isnothrowinvocable +| 396 = @isbitwisecloneable +; + +@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 + | @isinvocable + | @isnothrowinvocable + | @isbitwisecloneable + ; + +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 +); + +param_ref_to_this( + int expr: @param_ref 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 +| 17 = @ppd_embed +| 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 +); + +embeds( + unique int id: @ppd_embed 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 +); + +/*- Database metadata -*/ + +/** + * The CLI will automatically emit applicable tuples for this table, + * such as `databaseMetadata("isOverlay", "true")` when building an + * overlay database. + */ +databaseMetadata( + string metadataKey: string ref, + string value: string ref +); + +/*- Overlay support -*/ + +/** + * The CLI will automatically emit tuples for each new/modified/deleted file + * when building an overlay database. + */ +overlayChangedFiles( + string path: string ref +); + +/*- XML Files -*/ + +xmlEncoding( + unique int id: @file ref, + string encoding: string ref +); + +xmlDTDs( + unique int id: @xmldtd, + string root: string ref, + string publicId: string ref, + string systemId: string ref, + int fileid: @file ref +); + +xmlElements( + unique int id: @xmlelement, + string name: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int fileid: @file ref +); + +xmlAttrs( + unique int id: @xmlattribute, + int elementid: @xmlelement ref, + string name: string ref, + string value: string ref, + int idx: int ref, + int fileid: @file ref +); + +xmlNs( + int id: @xmlnamespace, + string prefixName: string ref, + string URI: string ref, + int fileid: @file ref +); + +xmlHasNs( + int elementId: @xmlnamespaceable ref, + int nsId: @xmlnamespace ref, + int fileid: @file ref +); + +xmlComments( + unique int id: @xmlcomment, + string text: string ref, + int parentid: @xmlparent ref, + int fileid: @file ref +); + +xmlChars( + unique int id: @xmlcharacters, + string text: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int isCDATA: int ref, + int fileid: @file ref +); + +@xmlparent = @file | @xmlelement; +@xmlnamespaceable = @xmlelement | @xmlattribute; + +xmllocations( + int xmlElement: @xmllocatable ref, + int location: @location_default ref +); + +@xmllocatable = @xmlcharacters | @xmlelement | @xmlcomment | @xmlattribute | @xmldtd | @file | @xmlnamespace; diff --git a/cpp/ql/lib/upgrades/0853f43dc8c08deecb473c54a2b70da8597f1ab5/upgrade.properties b/cpp/ql/lib/upgrades/0853f43dc8c08deecb473c54a2b70da8597f1ab5/upgrade.properties new file mode 100644 index 000000000000..92084ebe9ad6 --- /dev/null +++ b/cpp/ql/lib/upgrades/0853f43dc8c08deecb473c54a2b70da8597f1ab5/upgrade.properties @@ -0,0 +1,2 @@ +description: Support C23 _BitInt +compatibility: partial From 31758812c59a13b9cc71cc2fde0d7afcd34d5f63 Mon Sep 17 00:00:00 2001 From: Jeroen Ketema Date: Wed, 14 Oct 2026 12:06:49 +0200 Subject: [PATCH 3/4] C++: Add change note --- cpp/ql/lib/change-notes/2026-10-14-bitint.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 cpp/ql/lib/change-notes/2026-10-14-bitint.md diff --git a/cpp/ql/lib/change-notes/2026-10-14-bitint.md b/cpp/ql/lib/change-notes/2026-10-14-bitint.md new file mode 100644 index 000000000000..8e185b0dbdc8 --- /dev/null +++ b/cpp/ql/lib/change-notes/2026-10-14-bitint.md @@ -0,0 +1,4 @@ +--- +category: feature +--- +* Added support for C23 bit-precise integers (`_BitInt(N)`). From 75d1cb9ca21ae2eff590b3b05f3da8ce26b5daa1 Mon Sep 17 00:00:00 2001 From: Jeroen Ketema Date: Wed, 14 Oct 2026 15:51:46 +0200 Subject: [PATCH 4/4] C++: Update stats file --- cpp/ql/lib/semmlecode.cpp.dbscheme.stats | 7217 +++++++++++----------- 1 file changed, 3636 insertions(+), 3581 deletions(-) diff --git a/cpp/ql/lib/semmlecode.cpp.dbscheme.stats b/cpp/ql/lib/semmlecode.cpp.dbscheme.stats index 54cdc7a85081..8f5c157b1ae7 100644 --- a/cpp/ql/lib/semmlecode.cpp.dbscheme.stats +++ b/cpp/ql/lib/semmlecode.cpp.dbscheme.stats @@ -2,7 +2,7 @@ @compilation - 12556 + 12799 @externalDataElement @@ -10,19 +10,19 @@ @file - 64766 + 66019 @folder - 12305 + 12543 @diagnostic - 356 + 363 @location_default - 46362405 + 46369281 @trap @@ -42,15 +42,15 @@ @macro_expansion - 40315722 + 40292589 @other_macro_reference - 300696 + 300524 @normal_function - 2699010 + 2699603 @unknown_function @@ -58,19 +58,19 @@ @constructor - 688614 + 692625 @destructor - 84823 + 84842 @conversion_function - 10188 + 10190 @operator - 647163 + 647305 @user_defined_literal @@ -78,31 +78,31 @@ @deduction_guide - 5769 + 5770 @fun_decl - 4148376 + 4149410 @var_decl - 9436285 + 9411101 @type_decl - 1639390 + 1639750 @namespace_decl - 405513 + 406675 @using_declaration - 265844 + 270974 @using_directive - 6377 + 6415 @using_enum_declaration @@ -110,27 +110,27 @@ @static_assert - 171628 + 172120 @parameter - 6930613 + 6932137 @membervariable - 1503078 + 1502215 @globalvariable - 661280 + 634536 @localvariable - 725852 + 733038 @enumconstant - 348112 + 347913 @errortype @@ -364,37 +364,49 @@ @complex_std_float16 122 + + @bit_precise_int + 3 + + + @unsigned_bit_precise_int + 4 + + + @signed_bit_precise_int + 1 + @pointer - 449159 + 449258 @type_with_specifiers - 686813 + 686964 @array - 89611 + 89630 @routineptr - 674281 + 678207 @reference - 958837 + 959048 @gnu_vector - 671 + 684 @routinereference - 369 + 371 @rvalue_reference - 286877 + 286941 @block @@ -404,9 +416,13 @@ @scalable_vector 1 + + @decltype + 101803 + @typeof - 812 + 811 @underlying_type @@ -454,7 +470,7 @@ @remove_cv - 2095 + 2098 @remove_cvref @@ -482,31 +498,27 @@ @remove_reference - 5688 - - - @decltype - 101861 + 5694 @struct - 1039206 + 1056586 @union - 20745 + 20750 @enum - 41614 + 41590 @template_parameter - 863096 + 879786 @alias - 1757610 + 1791267 @unknown_usertype @@ -514,27 +526,27 @@ @class - 320881 + 320951 @template_template_parameter - 6073 + 6191 @proxy_class - 50227 + 51198 @scoped_enum - 11416 + 11418 @template_struct - 210581 + 214653 @template_class - 28847 + 28853 @template_union @@ -542,27 +554,27 @@ @mangledname - 6352070 + 6345485 @type_mention - 5941339 + 5937930 @concept_template - 3592 + 3596 @routinetype - 595664 + 599125 @ptrtomember - 9651 + 9837 @specifier - 7610 + 7612 @gnuattribute @@ -570,11 +582,11 @@ @stdattribute - 347764 + 347840 @declspec - 330464 + 330275 @msattribute @@ -582,19 +594,19 @@ @alignas - 2164 + 2186 @attribute_arg_token - 16448 + 16545 @attribute_arg_constant_expr - 71688 + 72691 @attribute_arg_expr - 1582 + 1584 @attribute_arg_empty @@ -606,23 +618,23 @@ @attribute_arg_type - 460 + 464 @derivation - 492610 + 494887 @frienddecl - 761457 + 765587 @comment - 11056034 + 11058465 @namespace - 8591 + 8757 @specialnamequalifyingelement @@ -630,15 +642,15 @@ @namequalifier - 3050545 + 3044887 @value - 13547098 + 13539325 @initialiser - 2289023 + 2292690 @address_of @@ -646,131 +658,131 @@ @indirect - 401998 + 401768 @array_to_pointer - 1954311 + 1953190 @parexpr - 4916613 + 4913791 @arithnegexpr - 586702 + 586365 @unaryplusexpr - 4117 + 4158 @complementexpr - 38195 + 38173 @notexpr - 355868 + 355664 @postincrexpr - 84590 + 84542 @postdecrexpr - 57409 + 57376 @preincrexpr - 96742 + 96686 @predecrexpr - 35831 + 35810 @conditionalexpr - 898137 + 897622 @addexpr - 581041 + 580708 @subexpr - 466933 + 466665 @mulexpr - 445548 + 445292 @divexpr - 52399 + 52369 @remexpr - 15776 + 15870 @paddexpr - 118654 + 118586 @psubexpr - 68032 + 67993 @pdiffexpr - 42841 + 43833 @lshiftexpr - 552490 + 552173 @rshiftexpr - 201483 + 201367 @andexpr - 483730 + 483452 @orexpr - 194110 + 193999 @xorexpr - 73969 + 73926 @eqexpr - 643558 + 643188 @neexpr - 411988 + 411752 @gtexpr - 111181 + 111117 @ltexpr - 139469 + 139389 @geexpr - 81322 + 81275 @leexpr - 291998 + 291831 @assignexpr - 1281515 + 1280779 @assignaddexpr @@ -778,15 +790,15 @@ @assignsubexpr - 15312 + 15303 @assignmulexpr - 11109 + 11324 @assigndivexpr - 6808 + 6804 @assignremexpr @@ -794,7 +806,7 @@ @assignlshiftexpr - 3703 + 3701 @assignrshiftexpr @@ -802,127 +814,127 @@ @assignandexpr - 6530 + 6526 @assignorexpr - 19612 + 19601 @assignxorexpr - 29905 + 29888 @assignpaddexpr - 18633 + 18622 @assignpsubexpr - 1576 + 1575 @andlogicalexpr - 346689 + 346490 @orlogicalexpr - 1103855 + 1103221 @commaexpr - 165227 + 165264 @subscriptexpr - 435268 + 435018 @callexpr - 261260 + 263482 @vastartexpr - 5007 + 5021 @vaargexpr - 1303 + 1302 @vaendexpr - 2941 + 2939 @vacopyexpr - 134 + 135 @varaccess - 8257017 + 8252279 @runtime_sizeof - 401820 + 401589 @runtime_alignof - 50352 + 50650 @expr_stmt - 147669 + 147584 @routineexpr - 5708356 + 5708751 @type_operand - 1405785 + 1404979 @offsetofexpr - 148579 + 148494 @typescompexpr - 702145 + 701742 @literal - 8057470 + 8035745 @aggregateliteral - 1397495 + 1400988 @c_style_cast - 6028638 + 6023777 @temp_init - 974536 + 984852 @errorexpr - 44841 + 45078 @reference_to - 1869126 + 1891026 @ref_indirect - 2079573 + 2091992 @vacuous_destructor_call - 7720 + 7766 @assume - 4150 + 4162 @conjugation @@ -930,11 +942,11 @@ @realpartexpr - 73 + 74 @imagpartexpr - 73 + 74 @jmulexpr @@ -974,31 +986,31 @@ @thisaccess - 1549814 + 1554385 @new_expr - 45518 + 45787 @delete_expr - 11312 + 11379 @throw_expr - 23607 + 23913 @condition_decl - 406398 + 406885 @braced_init_list - 2092 + 2114 @type_id - 47196 + 47476 @sizeof_pack @@ -1030,7 +1042,7 @@ @hastrivialconstr - 7 + 3 @hastrivialcopy @@ -1054,7 +1066,7 @@ @isclassexpr - 2374 + 2381 @isconvtoexpr @@ -1062,15 +1074,15 @@ @isemptyexpr - 8715 + 8717 @isenumexpr - 2946 + 2332 @ispodexpr - 828 + 844 @ispolyexpr @@ -1086,83 +1098,83 @@ @hastrivialdestructor - 2752 + 776 @uuidof - 26214 + 26289 @delete_array_expr - 1237 + 1261 @new_array_expr - 6597 + 6616 @foldexpr - 1261 + 1263 @ctordirectinit - 111177 + 111802 @ctorvirtualinit - 3961 + 3984 @ctorfieldinit - 202913 + 204063 @ctordelegatinginit - 3559 + 3560 @dtordirectdestruct - 38871 + 39102 @dtorvirtualdestruct - 3927 + 3950 @dtorfielddestruct - 39241 + 39473 @static_cast - 346536 + 348331 @reinterpret_cast - 39434 + 39547 @const_cast - 24101 + 24244 @dynamic_cast - 786 + 801 @lambdaexpr - 18970 + 19024 @param_ref - 163542 + 165240 @noopexpr - 80 + 113 @istriviallyconstructibleexpr - 3682 + 2332 @isdestructibleexpr @@ -1178,15 +1190,15 @@ @istriviallyassignableexpr - 3682 + 2332 @isnothrowassignableexpr - 5032 + 5034 @istrivialexpr - 3310 + 1249 @isstandardlayoutexpr @@ -1214,11 +1226,11 @@ @isconstructibleexpr - 3559 + 3560 @isnothrowconstructibleexpr - 20377 + 20381 @hasfinalizerexpr @@ -1254,11 +1266,11 @@ @isfinalexpr - 9264 + 9319 @noexceptexpr - 30169 + 30482 @builtinshufflevector @@ -1266,11 +1278,11 @@ @builtinchooseexpr - 20614 + 20602 @builtinaddressof - 15221 + 15224 @vec_fill @@ -1286,7 +1298,7 @@ @spaceshipexpr - 1347 + 1348 @co_await @@ -1314,7 +1326,7 @@ @builtinshuffle - 608 + 620 @blockassignexpr @@ -1322,7 +1334,7 @@ @issame - 4511 + 4517 @isfunction @@ -1430,7 +1442,7 @@ @reuseexpr - 841815 + 842823 @istriviallycopyassignable @@ -1526,23 +1538,23 @@ @c11_generic - 29973 + 29956 @requires_expr - 16401 + 16421 @nested_requirement - 684 + 685 @compound_requirement - 10884 + 10897 @concept_id - 90068 + 90176 @isinvocable @@ -1558,79 +1570,79 @@ @lambdacapture - 31810 + 31901 @stmt_expr - 2032201 + 2031035 @stmt_if - 990500 + 989932 @stmt_while - 39659 + 39636 @stmt_goto - 156829 + 159862 @stmt_label - 77512 + 79011 @stmt_return - 1233370 + 1257082 @stmt_block - 1695980 + 1707526 @stmt_end_test_while - 232528 + 232395 @stmt_for - 84413 + 84365 @stmt_switch_case - 830952 + 831947 @stmt_switch - 409306 + 409797 @stmt_asm - 63893 + 63856 @stmt_decl - 770162 + 772377 @stmt_empty - 426756 + 427267 @stmt_continue - 28099 + 28083 @stmt_break - 137217 + 137610 @stmt_try_block - 26230 + 26563 @stmt_microsoft_try - 209 + 210 @stmt_set_vla_size @@ -1642,19 +1654,19 @@ @stmt_assigned_goto - 12425 + 12418 @stmt_range_based_for - 6157 + 6221 @stmt_handler - 42985 + 43492 @stmt_constexpr_if - 103236 + 103259 @stmt_co_return @@ -1674,51 +1686,51 @@ @ppd_if - 581489 + 581617 @ppd_ifdef - 214425 + 214302 @ppd_ifndef - 160411 + 160319 @ppd_elif - 21767 + 22188 @ppd_else - 231147 + 231198 @ppd_endif - 874750 + 874943 @ppd_plain_include - 316386 + 322504 @ppd_define - 2706007 + 2706601 @ppd_undef - 98817 + 98839 @ppd_pragma - 399689 + 399777 @ppd_include_next - 167 + 168 @ppd_line - 18810 + 18996 @ppd_error @@ -1750,7 +1762,7 @@ @link_target - 817 + 816 @xmldtd @@ -1780,11 +1792,11 @@ compilations - 12556 + 12799 id - 12556 + 12799 cwd @@ -1802,7 +1814,7 @@ 1 2 - 12556 + 12799 @@ -1828,19 +1840,19 @@ compilation_args - 1005291 + 1024731 id - 12556 + 12799 num - 1458 + 1486 arg - 29068 + 29630 @@ -1854,77 +1866,77 @@ 36 42 - 996 + 1015 42 43 - 1090 + 1112 43 44 - 713 + 727 44 45 - 503 + 513 45 51 - 944 + 962 51 70 - 482 + 491 71 72 - 702 + 716 72 90 - 891 + 908 94 96 - 388 + 395 98 99 - 1332 + 1358 100 102 - 94 + 96 103 104 - 1982 + 2020 104 119 - 1059 + 1080 120 138 - 923 + 940 139 140 - 451 + 459 @@ -1940,67 +1952,67 @@ 34 38 - 587 + 598 38 39 - 1489 + 1518 39 40 - 975 + 994 40 42 - 1080 + 1101 42 53 - 597 + 609 53 54 - 702 + 716 54 63 - 891 + 908 64 67 - 398 + 406 67 68 - 1395 + 1422 68 70 - 965 + 983 70 71 - 1395 + 1422 73 79 - 944 + 962 79 89 - 1122 + 1144 89 @@ -2021,57 +2033,57 @@ 43 90 - 62 + 64 90 108 - 115 + 117 108 183 - 104 + 106 198 422 - 115 + 117 422 595 - 125 + 128 595 605 - 125 + 128 605 749 - 115 + 117 750 778 - 115 + 117 781 883 - 115 + 117 930 1190 - 83 + 85 1197 1198 - 377 + 384 @@ -2087,72 +2099,72 @@ 1 5 - 125 + 128 5 7 - 115 + 117 9 12 - 73 + 74 12 15 - 115 + 117 15 18 - 94 + 96 18 22 - 115 + 117 22 27 - 125 + 128 27 29 - 83 + 85 29 34 - 115 + 117 34 44 - 125 + 128 45 63 - 115 + 117 67 94 - 115 + 117 94 164 - 115 + 117 171 199 - 20 + 21 @@ -2168,22 +2180,22 @@ 1 2 - 13312 + 13569 2 3 - 12598 + 12842 3 103 - 2181 + 2224 104 1198 - 975 + 994 @@ -2199,17 +2211,17 @@ 1 2 - 19249 + 19621 2 3 - 8664 + 8832 3 62 - 1153 + 1176 @@ -2219,19 +2231,19 @@ compilation_expanded_args - 1005291 + 1024731 id - 12556 + 12799 num - 1458 + 1486 arg - 29068 + 29630 @@ -2245,77 +2257,77 @@ 36 42 - 996 + 1015 42 43 - 1090 + 1112 43 44 - 713 + 727 44 45 - 503 + 513 45 51 - 944 + 962 51 70 - 482 + 491 71 72 - 702 + 716 72 90 - 891 + 908 94 96 - 388 + 395 98 99 - 1332 + 1358 100 102 - 94 + 96 103 104 - 1982 + 2020 104 119 - 1059 + 1080 120 138 - 923 + 940 139 140 - 451 + 459 @@ -2331,67 +2343,67 @@ 34 38 - 587 + 598 38 39 - 1489 + 1518 39 40 - 975 + 994 40 42 - 1080 + 1101 42 53 - 597 + 609 53 54 - 702 + 716 54 63 - 891 + 908 64 67 - 398 + 406 67 68 - 1395 + 1422 68 70 - 965 + 983 70 71 - 1395 + 1422 73 79 - 944 + 962 79 89 - 1122 + 1144 89 @@ -2412,57 +2424,57 @@ 43 90 - 62 + 64 90 108 - 115 + 117 108 183 - 104 + 106 198 422 - 115 + 117 422 595 - 125 + 128 595 605 - 125 + 128 605 749 - 115 + 117 750 778 - 115 + 117 781 883 - 115 + 117 930 1190 - 83 + 85 1197 1198 - 377 + 384 @@ -2478,72 +2490,72 @@ 1 5 - 125 + 128 5 7 - 115 + 117 9 12 - 73 + 74 12 15 - 115 + 117 15 18 - 94 + 96 18 22 - 115 + 117 22 27 - 125 + 128 27 29 - 83 + 85 29 34 - 115 + 117 34 44 - 125 + 128 45 63 - 115 + 117 67 94 - 115 + 117 94 164 - 115 + 117 171 199 - 20 + 21 @@ -2559,22 +2571,22 @@ 1 2 - 13312 + 13569 2 3 - 12598 + 12842 3 103 - 2181 + 2224 104 1198 - 975 + 994 @@ -2590,17 +2602,17 @@ 1 2 - 19249 + 19621 2 3 - 8664 + 8832 3 62 - 1153 + 1176 @@ -2658,19 +2670,19 @@ compilation_compiling_files - 15741 + 15732 id - 2723 + 2721 num - 4520 + 4518 file - 13671 + 13663 @@ -2684,7 +2696,7 @@ 1 2 - 1361 + 1360 2 @@ -2735,7 +2747,7 @@ 1 2 - 1361 + 1360 2 @@ -2786,17 +2798,17 @@ 1 2 - 2396 + 2395 2 3 - 980 + 979 3 4 - 490 + 489 4 @@ -2822,17 +2834,17 @@ 1 2 - 2396 + 2395 2 3 - 980 + 979 3 4 - 490 + 489 4 @@ -2858,7 +2870,7 @@ 1 2 - 12310 + 12302 2 @@ -2884,12 +2896,12 @@ 1 2 - 12527 + 12520 2 4 - 1089 + 1088 4 @@ -2904,15 +2916,15 @@ compilation_time - 62966 + 62930 id - 2723 + 2721 num - 4520 + 4518 kind @@ -2920,7 +2932,7 @@ seconds - 18682 + 22646 @@ -2934,7 +2946,7 @@ 1 2 - 1361 + 1360 2 @@ -2985,7 +2997,7 @@ 4 5 - 2723 + 2721 @@ -2998,56 +3010,56 @@ 12 - - 2 - 3 - 54 - 3 4 - 544 + 326 4 5 - 762 + 1034 6 - 9 - 217 + 7 + 163 - 9 + 8 10 - 108 + 163 10 11 - 163 + 108 11 - 13 + 12 217 - 14 - 17 - 217 + 12 + 18 + 163 - 17 - 22 + 18 + 20 217 - 26 - 121 + 21 + 40 217 + + 60 + 152 + 108 + @@ -3062,17 +3074,17 @@ 1 2 - 2396 + 2395 2 3 - 980 + 979 3 4 - 490 + 489 4 @@ -3098,7 +3110,7 @@ 4 5 - 4520 + 4518 @@ -3119,17 +3131,17 @@ 4 5 - 1525 + 1469 5 6 - 272 + 108 6 7 - 490 + 653 7 @@ -3138,18 +3150,18 @@ 9 - 12 + 11 381 - 13 - 41 + 12 + 31 381 - 44 - 100 - 163 + 42 + 98 + 217 @@ -3197,16 +3209,21 @@ 4 5 - 108 + 54 - 189 - 190 + 5 + 6 54 - 198 - 199 + 226 + 227 + 54 + + + 230 + 231 54 @@ -3223,22 +3240,17 @@ 1 2 - 12854 + 17583 2 3 - 3921 + 3701 3 - 5 - 1688 - - - 7 - 42 - 217 + 46 + 1360 @@ -3254,22 +3266,22 @@ 1 2 - 11765 + 16494 2 3 - 3867 + 4191 3 - 4 - 1743 + 8 + 1742 - 4 - 67 - 1307 + 12 + 71 + 217 @@ -3285,12 +3297,12 @@ 1 2 - 15850 + 19978 2 3 - 2832 + 2667 @@ -3300,15 +3312,15 @@ diagnostic_for - 503 + 513 diagnostic - 356 + 363 compilation - 188 + 192 file_number @@ -3316,7 +3328,7 @@ file_number_diagnostic_number - 52 + 53 @@ -3330,12 +3342,12 @@ 1 2 - 209 + 213 2 3 - 146 + 149 @@ -3351,7 +3363,7 @@ 1 2 - 356 + 363 @@ -3367,7 +3379,7 @@ 1 2 - 356 + 363 @@ -3383,17 +3395,17 @@ 2 3 - 104 + 106 3 4 - 62 + 64 5 6 - 20 + 21 @@ -3409,7 +3421,7 @@ 1 2 - 188 + 192 @@ -3425,17 +3437,17 @@ 2 3 - 104 + 106 3 4 - 62 + 64 5 6 - 20 + 21 @@ -3499,7 +3511,7 @@ 1 2 - 20 + 21 4 @@ -3530,7 +3542,7 @@ 2 3 - 20 + 21 8 @@ -3540,7 +3552,7 @@ 18 19 - 20 + 21 @@ -3556,7 +3568,7 @@ 1 2 - 52 + 53 @@ -3566,19 +3578,19 @@ compilation_finished - 12556 + 12799 id - 12556 + 12799 cpu_seconds - 9420 + 8843 elapsed_seconds - 199 + 149 @@ -3592,7 +3604,7 @@ 1 2 - 12556 + 12799 @@ -3608,7 +3620,7 @@ 1 2 - 12556 + 12799 @@ -3624,17 +3636,17 @@ 1 2 - 7930 + 7078 2 3 - 996 + 1186 3 - 28 - 493 + 34 + 577 @@ -3650,12 +3662,12 @@ 1 2 - 8843 + 8009 2 3 - 576 + 834 @@ -3671,66 +3683,56 @@ 1 2 - 31 + 32 2 3 - 31 - - - 4 - 5 10 - 10 - 11 - 31 - - - 12 - 13 + 3 + 4 10 - 14 - 15 + 4 + 5 10 - 18 - 19 - 10 + 15 + 16 + 21 - 32 - 33 + 24 + 25 10 - 51 - 52 + 30 + 31 10 - 159 - 160 + 37 + 38 10 - 260 - 261 + 235 + 236 10 - 286 - 287 + 411 + 412 10 - 322 - 323 + 418 + 419 10 @@ -3747,66 +3749,56 @@ 1 2 - 31 + 32 2 3 - 31 - - - 4 - 5 10 - 10 - 11 - 31 - - - 12 - 13 + 3 + 4 10 - 13 - 14 + 4 + 5 10 - 18 - 19 - 10 + 15 + 16 + 21 - 32 - 33 + 24 + 25 10 - 51 - 52 + 30 + 31 10 - 134 - 135 + 37 + 38 10 - 155 - 156 + 200 + 201 10 - 234 - 235 + 216 + 217 10 - 261 - 262 + 356 + 357 10 @@ -4044,31 +4036,31 @@ locations_default - 46362405 + 46369281 id - 46362405 + 46369281 file - 40263 + 40272 beginLine - 7381369 + 7382992 beginColumn - 21604 + 21609 endLine - 7382351 + 7383974 endColumn - 52907 + 52918 @@ -4082,7 +4074,7 @@ 1 2 - 46362405 + 46369281 @@ -4098,7 +4090,7 @@ 1 2 - 46362405 + 46369281 @@ -4114,7 +4106,7 @@ 1 2 - 46362405 + 46369281 @@ -4130,7 +4122,7 @@ 1 2 - 46362405 + 46369281 @@ -4146,7 +4138,7 @@ 1 2 - 46362405 + 46369281 @@ -4162,67 +4154,67 @@ 1 15 - 3068 + 3069 15 41 - 3068 + 3069 42 72 - 3068 + 3069 72 114 - 3191 + 3192 114 142 - 3191 + 3192 143 212 - 3068 + 3069 213 307 - 3068 + 3069 310 435 - 3068 + 3069 437 596 - 3068 + 3069 607 846 - 3068 + 3069 848 1304 - 3068 + 3069 1354 2855 - 3068 + 3069 3114 30788 - 3068 + 3069 57880 @@ -4243,62 +4235,62 @@ 1 13 - 3314 + 3315 13 31 - 3314 + 3315 31 47 - 3068 + 3069 47 64 - 3068 + 3069 64 84 - 3068 + 3069 85 115 - 3068 + 3069 116 160 - 3191 + 3192 160 206 - 3068 + 3069 206 291 - 3068 + 3069 298 388 - 3068 + 3069 395 527 - 3068 + 3069 561 1339 - 3068 + 3069 1385 @@ -4319,62 +4311,62 @@ 1 5 - 3682 + 3683 5 9 - 3068 + 3069 9 15 - 3191 + 3192 15 20 - 3191 + 3192 20 28 - 3191 + 3192 28 36 - 3068 + 3069 36 43 - 3314 + 3315 43 53 - 3191 + 3192 53 62 - 3068 + 3069 62 80 - 3068 + 3069 80 95 - 3191 + 3192 95 111 - 3068 + 3069 112 @@ -4395,62 +4387,62 @@ 1 13 - 3314 + 3315 13 31 - 3314 + 3315 31 46 - 3068 + 3069 46 63 - 3068 + 3069 63 84 - 3068 + 3069 84 114 - 3068 + 3069 118 160 - 3191 + 3192 160 206 - 3068 + 3069 207 291 - 3068 + 3069 300 390 - 3068 + 3069 395 562 - 3068 + 3069 564 1350 - 3068 + 3069 1430 @@ -4471,7 +4463,7 @@ 1 12 - 3314 + 3315 13 @@ -4481,27 +4473,27 @@ 26 34 - 3191 + 3192 34 42 - 3191 + 3192 42 50 - 3068 + 3069 50 61 - 3068 + 3069 61 67 - 3314 + 3315 67 @@ -4511,27 +4503,27 @@ 76 88 - 3191 + 3192 89 102 - 3068 + 3069 102 116 - 3314 + 3315 116 132 - 3068 + 3069 132 364 - 1595 + 1596 @@ -4547,32 +4539,32 @@ 1 2 - 4878521 + 4879594 2 3 - 768076 + 768245 3 4 - 535333 + 535451 4 12 - 558043 + 558166 12 97 - 555220 + 555342 97 639 - 86173 + 86192 @@ -4588,27 +4580,27 @@ 1 2 - 4939899 + 4940984 2 3 - 1200296 + 1200560 3 6 - 629609 + 629747 6 56 - 554851 + 554973 56 329 - 56712 + 56725 @@ -4624,27 +4616,27 @@ 1 2 - 5552936 + 5554157 2 3 - 476534 + 476638 3 7 - 568968 + 569093 7 25 - 556938 + 557061 25 94 - 225991 + 226041 @@ -4660,12 +4652,12 @@ 1 2 - 6921775 + 6923297 2 85 - 459594 + 459695 @@ -4681,32 +4673,32 @@ 1 2 - 4946036 + 4947124 2 3 - 731004 + 731165 3 4 - 528091 + 528207 4 12 - 576088 + 576214 12 71 - 554483 + 554605 71 252 - 45664 + 45674 @@ -4903,7 +4895,7 @@ 226 - 548 + 547 1718 @@ -4979,7 +4971,7 @@ 225 - 550 + 549 1718 @@ -5026,7 +5018,7 @@ 1 2 - 2086 + 2087 2 @@ -5036,7 +5028,7 @@ 5 8 - 1595 + 1596 8 @@ -5070,23 +5062,23 @@ 74 - 87 - 1964 + 85 + 1718 - 87 - 99 + 85 + 97 1718 - 100 - 160 + 98 + 155 1718 - 261 + 155 299 - 245 + 491 @@ -5102,32 +5094,32 @@ 1 2 - 4876312 + 4877384 2 3 - 771391 + 771560 3 4 - 534597 + 534714 4 12 - 556938 + 557061 12 94 - 553746 + 553868 94 622 - 89365 + 89385 @@ -5143,27 +5135,27 @@ 1 2 - 4936952 + 4938038 2 3 - 1203856 + 1204121 3 6 - 622121 + 622258 6 51 - 554728 + 554850 51 329 - 64691 + 64706 @@ -5179,12 +5171,12 @@ 1 2 - 6938592 + 6940118 2 15 - 443758 + 443856 @@ -5200,27 +5192,27 @@ 1 2 - 5551586 + 5552806 2 3 - 475061 + 475165 3 7 - 573019 + 573268 7 25 - 559761 + 559762 25 89 - 222922 + 222971 @@ -5236,32 +5228,32 @@ 1 2 - 4944563 + 4945650 2 3 - 736160 + 736322 3 4 - 526495 + 526611 4 12 - 577929 + 578056 12 72 - 554237 + 554359 72 252 - 42964 + 42973 @@ -5277,52 +5269,52 @@ 1 2 - 15344 + 15347 2 3 - 5646 + 5647 3 6 - 4173 + 4420 6 - 16 - 4050 + 17 + 4051 - 16 - 31 - 4173 + 17 + 32 + 4051 - 31 - 93 - 4050 + 32 + 97 + 4051 - 96 - 660 - 4050 + 107 + 663 + 4051 - 662 - 2411 - 4050 + 699 + 2462 + 4051 - 2462 - 4702 - 4050 + 2469 + 4721 + 4051 - 4720 + 4757 33780 - 3314 + 3192 @@ -5338,47 +5330,47 @@ 1 2 - 17922 + 18048 2 3 - 6014 + 6016 3 5 - 3437 + 3315 5 8 - 4541 + 4542 8 17 - 4173 + 4174 17 84 - 4050 + 4051 88 160 - 4173 + 4174 160 214 - 4050 + 4051 215 267 - 4050 + 4051 267 @@ -5399,50 +5391,50 @@ 1 2 - 15589 + 15593 2 3 - 6014 + 6139 3 7 - 4173 + 4051 7 18 - 4419 + 4420 18 40 - 4173 + 4174 41 188 - 4050 + 4051 217 747 - 4050 + 4051 - 766 + 765 2171 - 4050 + 4051 2171 2881 - 4050 + 4051 - 2891 + 2892 30763 2332 @@ -5460,47 +5452,47 @@ 1 2 - 16571 + 16575 2 3 - 6628 + 6630 3 5 - 4787 + 4788 5 9 - 4296 + 4297 9 20 - 4173 + 4174 20 32 - 4296 + 4297 33 57 - 4050 + 4051 57 76 - 4296 + 4297 76 117 - 3805 + 3806 @@ -5516,47 +5508,47 @@ 1 2 - 15589 + 15593 2 3 - 6014 + 6139 3 7 - 4173 + 4051 7 17 - 4050 + 4051 17 30 - 4050 + 4051 32 102 - 4050 + 4051 104 621 - 4050 + 4051 628 1958 - 4050 + 4051 - 1967 + 1966 2836 - 4050 + 4051 2841 @@ -5571,15 +5563,15 @@ files - 64766 + 66019 id - 64766 + 66019 name - 64766 + 66019 @@ -5593,7 +5585,7 @@ 1 2 - 64766 + 66019 @@ -5609,7 +5601,7 @@ 1 2 - 64766 + 66019 @@ -5619,15 +5611,15 @@ folders - 12305 + 12543 id - 12305 + 12543 name - 12305 + 12543 @@ -5641,7 +5633,7 @@ 1 2 - 12305 + 12543 @@ -5657,7 +5649,7 @@ 1 2 - 12305 + 12543 @@ -5667,15 +5659,15 @@ containerparent - 77050 + 78540 parent - 12305 + 12543 child - 77050 + 78540 @@ -5689,42 +5681,42 @@ 1 2 - 5989 + 6105 2 3 - 1510 + 1539 3 4 - 660 + 673 4 6 - 996 + 1015 6 10 - 965 + 983 10 16 - 996 + 1015 16 44 - 923 + 940 44 151 - 262 + 267 @@ -5740,7 +5732,7 @@ 1 2 - 77050 + 78540 @@ -5750,23 +5742,23 @@ numlines - 794223 + 794398 element_id - 793118 + 793293 num_lines - 38790 + 38799 num_code - 33512 + 33519 num_comment - 18044 + 18048 @@ -5780,12 +5772,12 @@ 1 2 - 792014 + 792188 2 3 - 1104 + 1105 @@ -5801,12 +5793,12 @@ 1 2 - 792014 + 792188 2 3 - 1104 + 1105 @@ -5822,7 +5814,7 @@ 1 2 - 792873 + 793047 2 @@ -5843,17 +5835,17 @@ 1 2 - 26269 + 26275 2 3 - 3682 + 3683 3 5 - 3314 + 3315 5 @@ -5863,7 +5855,7 @@ 39 1981 - 2577 + 2578 @@ -5879,12 +5871,12 @@ 1 2 - 26760 + 26766 2 3 - 4050 + 4051 3 @@ -5899,7 +5891,7 @@ 7 12 - 2086 + 2087 @@ -5915,12 +5907,12 @@ 1 2 - 26392 + 26398 2 3 - 4050 + 4051 3 @@ -5930,7 +5922,7 @@ 4 6 - 3191 + 3192 6 @@ -5951,12 +5943,12 @@ 1 2 - 21482 + 21486 2 3 - 3559 + 3560 3 @@ -5966,12 +5958,12 @@ 4 12 - 2577 + 2578 12 157 - 2577 + 2578 172 @@ -5992,17 +5984,17 @@ 1 2 - 21850 + 21855 2 3 - 3559 + 3560 3 4 - 2086 + 2087 4 @@ -6012,7 +6004,7 @@ 6 9 - 2700 + 2701 9 @@ -6033,12 +6025,12 @@ 1 2 - 21604 + 21609 2 3 - 4173 + 4174 3 @@ -6048,7 +6040,7 @@ 5 8 - 3068 + 3069 8 @@ -6069,7 +6061,7 @@ 1 2 - 11170 + 11173 2 @@ -6079,7 +6071,7 @@ 3 4 - 1104 + 1105 4 @@ -6110,7 +6102,7 @@ 1 2 - 11170 + 11173 2 @@ -6120,12 +6112,12 @@ 3 4 - 1104 + 1105 4 7 - 1595 + 1596 8 @@ -6151,7 +6143,7 @@ 1 2 - 11170 + 11173 2 @@ -6186,31 +6178,31 @@ diagnostics - 356 + 363 id - 356 + 363 severity - 20 + 21 error_tag - 73 + 74 error_message - 146 + 149 full_error_message - 178 + 181 location - 178 + 181 @@ -6224,7 +6216,7 @@ 1 2 - 356 + 363 @@ -6240,7 +6232,7 @@ 1 2 - 356 + 363 @@ -6256,7 +6248,7 @@ 1 2 - 356 + 363 @@ -6272,7 +6264,7 @@ 1 2 - 356 + 363 @@ -6288,7 +6280,7 @@ 1 2 - 356 + 363 @@ -6409,7 +6401,7 @@ 1 2 - 41 + 42 3 @@ -6440,7 +6432,7 @@ 1 2 - 73 + 74 @@ -6456,7 +6448,7 @@ 1 2 - 52 + 53 2 @@ -6482,7 +6474,7 @@ 1 2 - 52 + 53 3 @@ -6508,7 +6500,7 @@ 1 2 - 52 + 53 3 @@ -6534,12 +6526,12 @@ 1 2 - 104 + 106 2 3 - 31 + 32 18 @@ -6560,7 +6552,7 @@ 1 2 - 146 + 149 @@ -6576,7 +6568,7 @@ 1 2 - 146 + 149 @@ -6592,12 +6584,12 @@ 1 2 - 115 + 117 2 3 - 31 + 32 @@ -6613,12 +6605,12 @@ 1 2 - 115 + 117 2 3 - 31 + 32 @@ -6634,7 +6626,7 @@ 1 2 - 167 + 171 18 @@ -6655,7 +6647,7 @@ 1 2 - 178 + 181 @@ -6671,7 +6663,7 @@ 1 2 - 178 + 181 @@ -6687,7 +6679,7 @@ 1 2 - 178 + 181 @@ -6703,7 +6695,7 @@ 1 2 - 178 + 181 @@ -6719,7 +6711,7 @@ 1 2 - 167 + 171 18 @@ -6740,7 +6732,7 @@ 1 2 - 178 + 181 @@ -6756,7 +6748,7 @@ 1 2 - 178 + 181 @@ -6772,7 +6764,7 @@ 1 2 - 178 + 181 @@ -6788,7 +6780,7 @@ 1 2 - 178 + 181 @@ -7134,7 +7126,7 @@ pch_uses - 4118 + 4130 pch @@ -7142,11 +7134,11 @@ compilation - 4118 + 4130 id - 4118 + 4130 @@ -7342,7 +7334,7 @@ 1 2 - 4118 + 4130 @@ -7358,7 +7350,7 @@ 1 2 - 4118 + 4130 @@ -7374,7 +7366,7 @@ 1 2 - 4118 + 4130 @@ -7390,7 +7382,7 @@ 1 2 - 4118 + 4130 @@ -7516,23 +7508,23 @@ fileannotations - 4171827 + 4252500 id - 5727 + 5838 kind - 20 + 21 name - 58315 + 59443 value - 39244 + 40002 @@ -7546,12 +7538,12 @@ 1 2 - 199 + 203 2 3 - 5528 + 5635 @@ -7567,62 +7559,62 @@ 1 86 - 430 + 438 88 206 - 430 + 438 212 291 - 440 + 449 291 359 - 430 + 438 362 401 - 430 + 438 402 479 - 430 + 438 480 549 - 251 + 256 550 551 - 1321 + 1347 553 628 - 430 + 438 631 753 - 451 + 459 753 1231 - 440 + 449 1234 2155 - 241 + 245 @@ -7638,67 +7630,67 @@ 1 98 - 430 + 438 102 244 - 430 + 438 244 351 - 430 + 438 352 434 - 440 + 449 434 490 - 440 + 449 490 628 - 430 + 438 632 702 - 62 + 64 706 707 - 1321 + 1347 710 939 - 430 + 438 939 1038 - 430 + 438 1066 1853 - 430 + 438 1853 3292 - 430 + 438 3423 3742 - 20 + 21 @@ -7777,62 +7769,62 @@ 1 2 - 10951 + 11163 2 3 - 4332 + 4416 3 5 - 5024 + 5122 5 7 - 4070 + 4148 7 9 - 4563 + 4651 9 16 - 4301 + 4384 16 19 - 4856 + 4950 19 27 - 4227 + 4309 27 47 - 4804 + 4897 47 128 - 4888 + 4982 128 459 - 4594 + 4683 459 546 - 1699 + 1732 @@ -7848,7 +7840,7 @@ 1 2 - 58315 + 59443 @@ -7864,57 +7856,57 @@ 1 2 - 11507 + 11730 2 3 - 7636 + 7784 3 4 - 4070 + 4148 4 6 - 4038 + 4116 6 8 - 3398 + 3464 8 11 - 4710 + 4801 11 17 - 5360 + 5464 17 23 - 4668 + 4758 23 41 - 4647 + 4737 41 95 - 4437 + 4523 95 1726 - 3839 + 3913 @@ -7930,72 +7922,72 @@ 1 2 - 3335 + 3400 2 4 - 1625 + 1657 4 5 - 3168 + 3229 5 8 - 2444 + 2491 8 14 - 2947 + 3004 14 17 - 1919 + 1956 17 24 - 3021 + 3079 24 51 - 3514 + 3582 51 58 - 3010 + 3068 58 80 - 2958 + 3015 81 151 - 3063 + 3122 151 334 - 2958 + 3015 334 473 - 2979 + 3036 473 547 - 2297 + 2341 @@ -8011,7 +8003,7 @@ 1 2 - 39233 + 39992 2 @@ -8032,72 +8024,72 @@ 1 2 - 3377 + 3443 2 4 - 1898 + 1935 4 5 - 3031 + 3090 5 8 - 2465 + 2512 8 14 - 3461 + 3528 14 18 - 3430 + 3496 18 28 - 3178 + 3240 28 34 - 3126 + 3186 34 41 - 3178 + 3240 41 66 - 2968 + 3026 66 92 - 3052 + 3111 92 113 - 2968 + 3026 113 145 - 3010 + 3068 145 172 - 94 + 96 @@ -8107,15 +8099,15 @@ inmacroexpansion - 150039073 + 149973979 id - 24678024 + 24663860 inv - 3706403 + 3704596 @@ -8129,37 +8121,37 @@ 1 3 - 2210101 + 2207729 3 5 - 1475401 + 1468685 5 6 - 1620834 + 1626701 6 7 - 6584434 + 6580830 7 8 - 8721502 + 8716496 8 9 - 3558069 + 3556027 9 22 - 507680 + 507389 @@ -8175,57 +8167,57 @@ 1 2 - 531859 + 529077 2 3 - 743444 + 740947 3 4 - 481650 + 480815 4 7 - 275382 + 280651 7 8 - 282234 + 282072 8 9 - 330341 + 330155 9 10 - 3047 + 3041 10 11 - 444778 + 444522 11 337 - 307886 + 307708 339 423 - 281836 + 281674 423 7616 - 23941 + 23928 @@ -8235,15 +8227,15 @@ affectedbymacroexpansion - 48749819 + 48637828 id - 7046758 + 7021712 inv - 3804211 + 3802035 @@ -8257,37 +8249,37 @@ 1 2 - 3847809 + 3845602 2 3 - 766524 + 766084 3 4 - 361945 + 361737 4 5 - 772958 + 751511 5 12 - 535313 + 535006 12 50 - 556427 + 556107 50 9900 - 205778 + 205660 @@ -8303,67 +8295,67 @@ 1 4 - 313336 + 313742 4 7 - 316698 + 319104 7 9 - 301174 + 300107 9 12 - 343037 + 342542 12 13 - 456135 + 460448 13 14 - 226164 + 224633 14 15 - 408155 + 409403 15 16 - 166476 + 165317 16 17 - 377786 + 377187 17 18 - 200694 + 202389 18 20 - 344354 + 342019 20 - 25 - 285475 + 26 + 297274 - 25 + 26 207 - 64720 + 47865 @@ -8373,19 +8365,19 @@ macroinvocations - 40397045 + 40373865 id - 40397045 + 40373865 macro_id - 182471 + 182367 location - 5926523 + 5923123 kind @@ -8403,7 +8395,7 @@ 1 2 - 40397045 + 40373865 @@ -8419,7 +8411,7 @@ 1 2 - 40397045 + 40373865 @@ -8435,7 +8427,7 @@ 1 2 - 40397045 + 40373865 @@ -8451,47 +8443,47 @@ 1 2 - 61114 + 61079 2 3 - 27615 + 27600 3 4 - 18083 + 18073 4 5 - 10022 + 10016 5 7 - 13835 + 13827 7 13 - 14597 + 14589 13 33 - 13726 + 13718 33 187 - 13726 + 13718 190 72214 - 9749 + 9744 @@ -8507,42 +8499,42 @@ 1 2 - 77673 + 77628 2 3 - 30666 + 30648 3 4 - 14379 + 14371 4 5 - 10294 + 10288 5 8 - 14053 + 14044 8 18 - 14107 + 14099 18 90 - 13726 + 13718 90 12207 - 7571 + 7566 @@ -8558,12 +8550,12 @@ 1 2 - 177950 + 177848 2 3 - 4520 + 4518 @@ -8579,17 +8571,17 @@ 1 2 - 5262380 + 5259361 2 4 - 429653 + 429406 4 72214 - 234490 + 234355 @@ -8605,12 +8597,12 @@ 1 2 - 5904354 + 5900967 2 37 - 22168 + 22156 @@ -8626,7 +8618,7 @@ 1 2 - 5926523 + 5923123 @@ -8699,15 +8691,15 @@ macroparent - 33692864 + 33673531 id - 33692864 + 33673531 parent_id - 15944993 + 15935844 @@ -8721,7 +8713,7 @@ 1 2 - 33692864 + 33673531 @@ -8737,27 +8729,27 @@ 1 2 - 7816769 + 7812284 2 3 - 1596166 + 1595250 3 4 - 4708483 + 4705781 4 5 - 1297402 + 1296657 5 205 - 526172 + 525870 @@ -8767,15 +8759,15 @@ macrolocationbind - 6005206 + 6014601 id - 4196566 + 4204073 location - 2266167 + 2268452 @@ -8789,27 +8781,27 @@ 1 2 - 3275759 + 3282337 2 3 - 487614 + 488105 3 4 - 8639 + 8647 4 5 - 411573 + 411988 5 17 - 12979 + 12993 @@ -8825,27 +8817,27 @@ 1 2 - 1328980 + 1330299 2 3 - 479787 + 480271 3 4 - 7805 + 7812 4 5 - 425601 + 426051 5 522 - 23992 + 24016 @@ -8855,19 +8847,19 @@ macro_argument_unexpanded - 81936815 + 83523288 invocation - 26104126 + 26610301 argument_index - 692 + 705 text - 340922 + 347515 @@ -8881,22 +8873,22 @@ 1 2 - 9611464 + 9798055 2 3 - 9706317 + 9894700 3 4 - 4968887 + 5064942 4 67 - 1817457 + 1852603 @@ -8912,22 +8904,22 @@ 1 2 - 9792851 + 9982950 2 3 - 9723783 + 9912504 3 4 - 4813253 + 4906299 4 67 - 1774237 + 1808547 @@ -8943,17 +8935,17 @@ 46457 46458 - 608 + 620 46659 173253 - 52 + 53 - 646919 - 2488418 - 31 + 646916 + 2488547 + 32 @@ -8969,17 +8961,17 @@ 2 3 - 608 + 620 13 1115 - 52 + 53 7702 22873 - 31 + 32 @@ -8995,57 +8987,57 @@ 1 2 - 39432 + 40195 2 3 - 61882 + 63078 3 4 - 20844 + 21247 4 5 - 34449 + 35126 5 6 - 38992 + 39746 6 9 - 30600 + 31191 9 15 - 28774 + 29331 15 26 - 25711 + 26198 26 57 - 26959 + 27481 57 517 - 25837 + 26337 518 486640 - 7437 + 7581 @@ -9061,17 +9053,17 @@ 1 2 - 241517 + 246187 2 3 - 89261 + 90987 3 9 - 10144 + 10340 @@ -9081,19 +9073,19 @@ macro_argument_expanded - 81936815 + 83523288 invocation - 26104126 + 26610301 argument_index - 692 + 705 text - 206479 + 210472 @@ -9107,22 +9099,22 @@ 1 2 - 9611464 + 9798055 2 3 - 9706317 + 9894700 3 4 - 4968887 + 5064942 4 67 - 1817457 + 1852603 @@ -9138,22 +9130,22 @@ 1 2 - 12550907 + 12794618 2 3 - 8372817 + 8535135 3 4 - 4196783 + 4277907 4 9 - 983618 + 1002639 @@ -9169,17 +9161,17 @@ 46457 46458 - 608 + 620 46659 173253 - 52 + 53 - 646919 - 2488418 - 31 + 646916 + 2488547 + 32 @@ -9195,17 +9187,17 @@ 1 2 - 597 + 609 2 96 - 52 + 53 950 16173 - 41 + 42 @@ -9221,57 +9213,57 @@ 1 2 - 21683 + 22102 2 3 - 26634 + 27139 3 4 - 43167 + 44012 4 5 - 15924 + 16253 5 6 - 3251 + 3314 6 7 - 18169 + 18520 7 10 - 18830 + 19194 10 19 - 18211 + 18541 19 51 - 15661 + 15964 51 251 - 15494 + 15793 251 - 1169168 - 9451 + 1169187 + 9634 @@ -9287,17 +9279,17 @@ 1 2 - 104336 + 106353 2 3 - 88306 + 90014 3 66 - 13836 + 14104 @@ -9307,15 +9299,15 @@ functions - 3994932 + 3995810 id - 3994932 + 3995810 name - 1666273 + 1666640 kind @@ -9333,7 +9325,7 @@ 1 2 - 3994932 + 3995810 @@ -9349,7 +9341,7 @@ 1 2 - 3994932 + 3995810 @@ -9365,17 +9357,17 @@ 1 2 - 1421746 + 1422058 2 4 - 138467 + 138497 4 3162 - 106060 + 106083 @@ -9391,7 +9383,7 @@ 1 2 - 1663450 + 1663816 2 @@ -9498,26 +9490,26 @@ builtin_functions - 30715 + 31213 id - 30715 + 31213 function_entry_point - 1124932 + 1131527 id - 1121608 + 1128150 entry_point - 1124932 + 1131527 @@ -9531,12 +9523,12 @@ 1 2 - 1118822 + 1125314 2 17 - 2786 + 2836 @@ -9552,7 +9544,7 @@ 1 2 - 1124932 + 1131527 @@ -9562,15 +9554,15 @@ function_return_type - 4011995 + 4012877 id - 3994932 + 3995810 return_type - 610950 + 611084 @@ -9584,12 +9576,12 @@ 1 2 - 3977869 + 3978744 2 3 - 17062 + 17066 @@ -9605,22 +9597,22 @@ 1 2 - 304800 + 304867 2 3 - 211874 + 211921 3 5 - 47506 + 47516 5 464 - 45910 + 45920 475 @@ -9905,59 +9897,59 @@ purefunctions - 130740 + 131114 id - 130740 + 131114 function_deleted - 87523 + 87628 id - 87523 + 87628 function_defaulted - 51363 + 51425 id - 51363 + 51425 function_prototyped - 3993459 + 3994337 id - 3993459 + 3994337 deduction_guide_for_class - 5769 + 5770 id - 5769 + 5770 class_template - 2209 + 2210 @@ -9971,7 +9963,7 @@ 1 2 - 5769 + 5770 @@ -9987,7 +9979,7 @@ 1 2 - 1104 + 1105 2 @@ -10022,15 +10014,15 @@ member_function_this_type - 662507 + 670714 id - 662507 + 670714 this_type - 173084 + 227880 @@ -10044,7 +10036,7 @@ 1 2 - 662507 + 670714 @@ -10060,37 +10052,32 @@ 1 2 - 46524 + 100108 2 3 - 36335 + 59175 3 4 - 31916 + 22091 4 5 - 19763 + 13879 5 - 6 - 12643 - - - 6 - 10 - 14362 + 8 + 18520 - 10 - 65 - 11538 + 8 + 152 + 14104 @@ -10100,27 +10087,27 @@ fun_decls - 4154268 + 4155304 id - 4148376 + 4149410 function - 3974186 + 3975060 type_id - 604076 + 604209 name - 1664800 + 1665166 location - 2768243 + 2768852 @@ -10134,7 +10121,7 @@ 1 2 - 4148376 + 4149410 @@ -10150,12 +10137,12 @@ 1 2 - 4142483 + 4143517 2 3 - 5892 + 5893 @@ -10171,7 +10158,7 @@ 1 2 - 4148376 + 4149410 @@ -10187,7 +10174,7 @@ 1 2 - 4148376 + 4149410 @@ -10203,12 +10190,12 @@ 1 2 - 3814851 + 3815567 2 5 - 159335 + 159493 @@ -10224,12 +10211,12 @@ 1 2 - 3956142 + 3957011 2 3 - 18044 + 18048 @@ -10245,7 +10232,7 @@ 1 2 - 3974186 + 3975060 @@ -10261,12 +10248,12 @@ 1 2 - 3835842 + 3836562 2 4 - 138344 + 138497 @@ -10282,26 +10269,26 @@ 1 2 - 290192 + 290256 2 3 - 219240 + 219288 3 5 - 48365 + 48376 5 506 - 45419 + 45429 555 - 10332 + 10333 859 @@ -10318,22 +10305,22 @@ 1 2 - 300749 + 300815 2 3 - 210401 + 210447 3 5 - 47628 + 47639 5 9941 - 45296 + 45306 @@ -10349,22 +10336,22 @@ 1 2 - 485986 + 486093 2 3 - 52293 + 52305 3 7 - 49347 + 49358 7 2238 - 16449 + 16452 @@ -10380,22 +10367,22 @@ 1 2 - 449159 + 449258 2 3 - 69356 + 69371 3 6 - 55239 + 55251 6 4756 - 30320 + 30327 @@ -10411,22 +10398,22 @@ 1 2 - 1310039 + 1310327 2 3 - 190883 + 190925 3 11 - 127787 + 127693 11 3169 - 36089 + 36220 @@ -10442,17 +10429,17 @@ 1 2 - 1421255 + 1421567 2 4 - 138958 + 138988 4 3162 - 104587 + 104610 @@ -10468,12 +10455,12 @@ 1 2 - 1576417 + 1576763 2 1596 - 88383 + 88402 @@ -10489,17 +10476,17 @@ 1 2 - 1345392 + 1345688 2 3 - 205000 + 205045 3 1592 - 114407 + 114432 @@ -10515,17 +10502,17 @@ 1 2 - 2376164 + 2376564 2 3 - 251770 + 251948 3 211 - 140308 + 140339 @@ -10541,17 +10528,17 @@ 1 2 - 2395928 + 2396332 2 3 - 232497 + 232671 3 211 - 139817 + 139848 @@ -10567,12 +10554,12 @@ 1 2 - 2655309 + 2655893 2 211 - 112934 + 112959 @@ -10588,12 +10575,12 @@ 1 2 - 2729698 + 2730298 2 8 - 38545 + 38553 @@ -10603,22 +10590,22 @@ fun_def - 1397440 + 1397747 id - 1397440 + 1397747 fun_specialized - 7841 + 7864 id - 7841 + 7864 @@ -10636,11 +10623,11 @@ fun_decl_specifiers - 4214909 + 4215835 id - 1723968 + 1724347 name @@ -10658,22 +10645,22 @@ 1 2 - 360776 + 360855 2 3 - 258030 + 258087 3 4 - 1082574 + 1082812 4 5 - 22586 + 22591 @@ -10870,26 +10857,26 @@ fun_decl_empty_throws - 433439 + 434681 fun_decl - 433439 + 434681 fun_decl_noexcept - 139743 + 140571 fun_decl - 139743 + 140571 constant - 139307 + 140132 @@ -10903,7 +10890,7 @@ 1 2 - 139743 + 140571 @@ -10919,12 +10906,12 @@ 1 2 - 138870 + 139693 2 3 - 436 + 438 @@ -10934,26 +10921,26 @@ fun_decl_empty_noexcept - 1156104 + 1156481 fun_decl - 1156104 + 1156481 fun_decl_typedef_type - 2760 + 2788 fun_decl - 2760 + 2788 typedeftype_id - 124 + 125 @@ -10967,7 +10954,7 @@ 1 2 - 2760 + 2788 @@ -11043,11 +11030,11 @@ fun_requires - 28932 + 28966 id - 10050 + 10062 kind @@ -11055,7 +11042,7 @@ constraint - 28697 + 28731 @@ -11069,7 +11056,7 @@ 1 2 - 9986 + 9998 2 @@ -11090,27 +11077,27 @@ 1 2 - 7227 + 7236 2 3 - 491 + 492 3 6 - 855 + 856 6 13 - 320 + 321 13 14 - 1133 + 1134 19 @@ -11173,7 +11160,7 @@ 1 2 - 28461 + 28495 2 @@ -11194,7 +11181,7 @@ 1 2 - 28697 + 28731 @@ -11204,19 +11191,19 @@ param_decl_bind - 7218351 + 7220306 id - 7218351 + 7220306 index - 7856 + 7858 fun_decl - 3488446 + 3489335 @@ -11230,7 +11217,7 @@ 1 2 - 7218351 + 7220306 @@ -11246,7 +11233,7 @@ 1 2 - 7218351 + 7220306 @@ -11262,7 +11249,7 @@ 2 3 - 3928 + 3929 6 @@ -11281,12 +11268,12 @@ 343 - 16310 + 16311 613 - 28418 - 28419 + 28419 + 28420 122 @@ -11303,7 +11290,7 @@ 2 3 - 3928 + 3929 6 @@ -11322,12 +11309,12 @@ 343 - 16310 + 16311 613 - 28418 - 28419 + 28419 + 28420 122 @@ -11344,27 +11331,27 @@ 1 2 - 1486438 + 1486764 2 3 - 972463 + 972677 3 4 - 592291 + 592544 4 5 - 285895 + 285958 5 65 - 151356 + 151389 @@ -11380,27 +11367,27 @@ 1 2 - 1486438 + 1486764 2 3 - 972463 + 972677 3 4 - 592291 + 592544 4 5 - 285895 + 285958 5 65 - 151356 + 151389 @@ -11410,27 +11397,27 @@ var_decls - 9442668 + 9417486 id - 9436285 + 9411101 variable - 9098463 + 9072837 type_id - 1440773 + 1441089 name - 838906 + 839090 location - 6175671 + 6177029 @@ -11444,7 +11431,7 @@ 1 2 - 9436285 + 9411101 @@ -11460,12 +11447,12 @@ 1 2 - 9429901 + 9404717 2 3 - 6383 + 6384 @@ -11481,7 +11468,7 @@ 1 2 - 9436285 + 9411101 @@ -11497,7 +11484,7 @@ 1 2 - 9436285 + 9411101 @@ -11513,12 +11500,12 @@ 1 2 - 8778319 + 8752254 2 5 - 320144 + 320583 @@ -11534,12 +11521,12 @@ 1 2 - 9046170 + 9020532 2 3 - 52293 + 52305 @@ -11555,12 +11542,12 @@ 1 2 - 8994735 + 8969087 2 4 - 103727 + 103750 @@ -11576,12 +11563,12 @@ 1 2 - 8857496 + 8831448 2 4 - 240967 + 241389 @@ -11597,27 +11584,27 @@ 1 2 - 839151 + 839213 2 3 - 280617 + 280556 3 5 - 127296 + 127570 5 11 - 112934 + 112836 11 - 2963 - 80772 + 2786 + 80913 @@ -11633,27 +11620,27 @@ 1 2 - 860388 + 860454 2 3 - 265764 + 265699 3 5 - 122141 + 122413 5 11 - 112566 + 112468 11 - 2886 - 79913 + 2709 + 80053 @@ -11669,22 +11656,22 @@ 1 2 - 1104793 + 1105036 2 3 - 191006 + 191048 3 7 - 116371 + 116397 7 1038 - 28601 + 28608 @@ -11700,27 +11687,27 @@ 1 2 - 974304 + 974519 2 3 - 215189 + 215236 3 5 - 104587 + 104610 5 15 - 109865 + 109889 15 2622 - 36826 + 36834 @@ -11736,32 +11723,32 @@ 1 2 - 457507 + 457239 2 3 - 161668 + 162194 3 4 - 59290 + 59303 4 7 - 64814 + 64583 7 24 - 63341 + 63969 24 27139 - 32284 + 31800 @@ -11777,32 +11764,32 @@ 1 2 - 468432 + 468166 2 3 - 161668 + 162194 3 4 - 55116 + 55129 4 8 - 71197 + 70845 8 - 44 - 63586 + 43 + 63355 - 44 + 43 26704 - 18904 + 19399 @@ -11818,22 +11805,22 @@ 1 2 - 642744 + 642885 2 3 - 110847 + 110871 3 11 - 64078 + 64092 11 3463 - 21236 + 21241 @@ -11849,27 +11836,27 @@ 1 2 - 484758 + 484865 2 3 - 180940 + 180980 3 4 - 51311 + 51322 4 8 - 63955 + 63969 8 22619 - 57940 + 57953 @@ -11885,17 +11872,17 @@ 1 2 - 5670781 + 5668589 2 16 - 465117 + 468780 16 2943 - 39772 + 39658 @@ -11911,12 +11898,12 @@ 1 2 - 5751431 + 5749257 2 2935 - 424240 + 427771 @@ -11932,12 +11919,12 @@ 1 2 - 5874922 + 5876213 2 2555 - 300749 + 300815 @@ -11953,12 +11940,12 @@ 1 2 - 6163519 + 6164873 2 5 - 12152 + 12155 @@ -11968,33 +11955,33 @@ var_def - 3707686 + 3684804 id - 3707686 + 3684804 var_specialized - 641 + 642 id - 641 + 642 var_decl_specifiers - 481567 + 481672 id - 481567 + 481672 name @@ -12012,7 +11999,7 @@ 1 2 - 481567 + 481672 @@ -12053,18 +12040,18 @@ is_structured_binding - 940 + 942 id - 940 + 942 var_requires - 384 + 385 id @@ -12072,7 +12059,7 @@ constraint - 384 + 385 @@ -12112,7 +12099,7 @@ 1 2 - 384 + 385 @@ -12122,19 +12109,19 @@ type_decls - 1639390 + 1639750 id - 1639390 + 1639750 type_id - 1620731 + 1621088 location - 1543273 + 1543612 @@ -12148,7 +12135,7 @@ 1 2 - 1639390 + 1639750 @@ -12164,7 +12151,7 @@ 1 2 - 1639390 + 1639750 @@ -12180,12 +12167,12 @@ 1 2 - 1604650 + 1605003 2 10 - 16080 + 16084 @@ -12201,12 +12188,12 @@ 1 2 - 1604773 + 1605126 2 10 - 15958 + 15961 @@ -12222,12 +12209,12 @@ 1 2 - 1513198 + 1513531 2 64 - 30074 + 30081 @@ -12243,12 +12230,12 @@ 1 2 - 1513321 + 1513653 2 64 - 29952 + 29958 @@ -12258,37 +12245,37 @@ type_def - 1092272 + 1092512 id - 1092272 + 1092512 type_decl_top - 676616 + 676228 type_decl - 676616 + 676228 type_requires - 7634 + 7643 id - 2031 + 2033 constraint - 7612 + 7621 @@ -12302,17 +12289,17 @@ 1 2 - 1005 + 1006 2 5 - 106 + 107 5 6 - 598 + 599 6 @@ -12338,7 +12325,7 @@ 1 2 - 7591 + 7600 2 @@ -12353,23 +12340,23 @@ namespace_decls - 405513 + 406675 id - 405513 + 406675 namespace_id - 1768 + 1773 location - 405513 + 406675 bodylocation - 405513 + 406675 @@ -12383,7 +12370,7 @@ 1 2 - 405513 + 406675 @@ -12399,7 +12386,7 @@ 1 2 - 405513 + 406675 @@ -12415,7 +12402,7 @@ 1 2 - 405513 + 406675 @@ -12431,12 +12418,12 @@ 1 2 - 363 + 364 2 3 - 185 + 186 3 @@ -12497,12 +12484,12 @@ 1 2 - 363 + 364 2 3 - 185 + 186 3 @@ -12563,12 +12550,12 @@ 1 2 - 363 + 364 2 3 - 185 + 186 3 @@ -12629,7 +12616,7 @@ 1 2 - 405513 + 406675 @@ -12645,7 +12632,7 @@ 1 2 - 405513 + 406675 @@ -12661,7 +12648,7 @@ 1 2 - 405513 + 406675 @@ -12677,7 +12664,7 @@ 1 2 - 405513 + 406675 @@ -12693,7 +12680,7 @@ 1 2 - 405513 + 406675 @@ -12709,7 +12696,7 @@ 1 2 - 405513 + 406675 @@ -12719,23 +12706,23 @@ usings - 269966 + 275176 id - 269966 + 275176 element_id - 58399 + 59517 location - 26666 + 27181 kind - 20 + 21 @@ -12749,7 +12736,7 @@ 1 2 - 269966 + 275176 @@ -12765,7 +12752,7 @@ 1 2 - 269966 + 275176 @@ -12781,7 +12768,7 @@ 1 2 - 269966 + 275176 @@ -12797,17 +12784,17 @@ 1 2 - 50730 + 51701 2 5 - 5339 + 5442 5 134 - 2328 + 2373 @@ -12823,17 +12810,17 @@ 1 2 - 50730 + 51701 2 5 - 5339 + 5442 5 134 - 2328 + 2373 @@ -12849,7 +12836,7 @@ 1 2 - 58399 + 59517 @@ -12865,22 +12852,22 @@ 1 2 - 21043 + 21450 2 4 - 2276 + 2320 4 132 - 1930 + 1967 145 364 - 1416 + 1443 @@ -12896,22 +12883,22 @@ 1 2 - 21043 + 21450 2 4 - 2276 + 2320 4 132 - 1930 + 1967 145 364 - 1416 + 1443 @@ -12927,7 +12914,7 @@ 1 2 - 26666 + 27181 @@ -12946,8 +12933,8 @@ 10 - 25342 - 25343 + 25341 + 25342 10 @@ -12967,8 +12954,8 @@ 10 - 5353 - 5354 + 5352 + 5353 10 @@ -13000,15 +12987,15 @@ using_container - 571131 + 582165 parent - 20151 + 20541 child - 269966 + 275176 @@ -13022,42 +13009,42 @@ 1 2 - 8958 + 9131 2 3 - 1584 + 1625 3 6 - 1762 + 1785 6 7 - 2244 + 2288 7 26 - 1521 + 1550 26 136 - 797 + 812 145 146 - 2601 + 2651 146 437 - 681 + 695 @@ -13073,27 +13060,27 @@ 1 2 - 96332 + 98184 2 3 - 119536 + 121848 3 4 - 19585 + 19964 4 5 - 26330 + 26839 5 65 - 8182 + 8340 @@ -13103,27 +13090,27 @@ static_asserts - 171628 + 172120 id - 171628 + 172120 condition - 171628 + 172120 message - 38481 + 38591 location - 22434 + 22499 enclosing - 6202 + 6220 @@ -13137,7 +13124,7 @@ 1 2 - 171628 + 172120 @@ -13153,7 +13140,7 @@ 1 2 - 171628 + 172120 @@ -13169,7 +13156,7 @@ 1 2 - 171628 + 172120 @@ -13185,7 +13172,7 @@ 1 2 - 171628 + 172120 @@ -13201,7 +13188,7 @@ 1 2 - 171628 + 172120 @@ -13217,7 +13204,7 @@ 1 2 - 171628 + 172120 @@ -13233,7 +13220,7 @@ 1 2 - 171628 + 172120 @@ -13249,7 +13236,7 @@ 1 2 - 171628 + 172120 @@ -13265,32 +13252,32 @@ 1 2 - 28330 + 28411 2 3 - 662 + 664 3 4 - 3585 + 3595 4 10 - 2043 + 2049 12 17 - 3101 + 3110 17 513 - 759 + 761 @@ -13306,32 +13293,32 @@ 1 2 - 28330 + 28411 2 3 - 662 + 664 3 4 - 3585 + 3595 4 10 - 2043 + 2049 12 17 - 3101 + 3110 17 513 - 759 + 761 @@ -13347,12 +13334,12 @@ 1 2 - 35679 + 35781 2 33 - 2802 + 2810 @@ -13368,27 +13355,27 @@ 1 2 - 30147 + 30233 2 3 - 355 + 356 3 4 - 3351 + 3361 4 12 - 1865 + 1870 12 43 - 2761 + 2769 @@ -13404,37 +13391,37 @@ 1 2 - 4255 + 4268 2 3 - 3690 + 3701 3 4 - 1720 + 1725 4 5 - 104 + 105 5 6 - 4692 + 4705 6 13 - 428 + 429 14 15 - 2632 + 2640 16 @@ -13444,12 +13431,12 @@ 17 18 - 4369 + 4381 19 52 - 492 + 494 @@ -13465,37 +13452,37 @@ 1 2 - 4255 + 4268 2 3 - 3690 + 3701 3 4 - 1720 + 1725 4 5 - 104 + 105 5 6 - 4692 + 4705 6 13 - 428 + 429 14 15 - 2632 + 2640 16 @@ -13505,12 +13492,12 @@ 17 18 - 4369 + 4381 19 52 - 492 + 494 @@ -13526,17 +13513,17 @@ 1 2 - 6832 + 6851 2 3 - 7631 + 7653 3 4 - 7736 + 7758 4 @@ -13557,32 +13544,32 @@ 1 2 - 5055 + 5069 2 3 - 8019 + 8042 3 4 - 1461 + 1465 4 5 - 4716 + 4729 5 13 - 476 + 477 13 14 - 2632 + 2640 16 @@ -13603,22 +13590,22 @@ 1 2 - 5152 + 5167 2 3 - 476 + 477 3 210 - 476 + 477 223 11052 - 96 + 97 @@ -13634,22 +13621,22 @@ 1 2 - 5152 + 5167 2 3 - 476 + 477 3 210 - 476 + 477 223 11052 - 96 + 97 @@ -13665,17 +13652,17 @@ 1 2 - 5305 + 5321 2 3 - 476 + 477 3 2936 - 419 + 421 @@ -13691,17 +13678,17 @@ 1 2 - 5289 + 5304 2 3 - 492 + 494 3 1929 - 419 + 421 @@ -13711,23 +13698,23 @@ params - 6970509 + 6972041 id - 6930613 + 6932137 function - 3361394 + 3362133 index - 7856 + 7858 type_id - 1206679 + 1206945 @@ -13741,7 +13728,7 @@ 1 2 - 6930613 + 6932137 @@ -13757,7 +13744,7 @@ 1 2 - 6930613 + 6932137 @@ -13773,12 +13760,12 @@ 1 2 - 6890718 + 6892233 2 3 - 39895 + 39904 @@ -13794,27 +13781,27 @@ 1 2 - 1450593 + 1450912 2 3 - 920292 + 920495 3 4 - 570073 + 570198 4 5 - 276443 + 276504 5 65 - 143991 + 144023 @@ -13830,27 +13817,27 @@ 1 2 - 1450593 + 1450912 2 3 - 920292 + 920495 3 4 - 570073 + 570198 4 5 - 276443 + 276504 5 65 - 143991 + 144023 @@ -13866,22 +13853,22 @@ 1 2 - 1757357 + 1757744 2 3 - 1019846 + 1020071 3 4 - 431360 + 431455 4 11 - 152829 + 152863 @@ -13897,7 +13884,7 @@ 2 3 - 3928 + 3929 6 @@ -13938,7 +13925,7 @@ 2 3 - 3928 + 3929 6 @@ -13979,7 +13966,7 @@ 1 2 - 3928 + 3929 2 @@ -14020,27 +14007,27 @@ 1 2 - 728672 + 728832 2 3 - 237039 + 237091 3 5 - 92925 + 92945 5 13 - 93539 + 93559 13 2574 - 54503 + 54515 @@ -14056,27 +14043,27 @@ 1 2 - 810672 + 810850 2 3 - 175784 + 175823 3 6 - 107042 + 107065 6 27 - 90838 + 90858 27 2562 - 22341 + 22346 @@ -14092,17 +14079,17 @@ 1 2 - 981670 + 981886 2 3 - 167683 + 167719 3 65 - 57326 + 57339 @@ -14112,15 +14099,15 @@ overrides - 159700 + 160157 new - 150954 + 151386 old - 17451 + 17501 @@ -14134,12 +14121,12 @@ 1 2 - 142215 + 142623 2 4 - 8738 + 8763 @@ -14155,32 +14142,32 @@ 1 2 - 9392 + 9419 2 3 - 2366 + 2373 3 4 - 1647 + 1652 4 6 - 1437 + 1441 6 16 - 1332 + 1336 16 230 - 1275 + 1279 @@ -14190,19 +14177,19 @@ membervariables - 1505529 + 1504665 id - 1503078 + 1502215 type_id - 458086 + 457823 name - 644370 + 644001 @@ -14216,12 +14203,12 @@ 1 2 - 1500736 + 1499874 2 4 - 2342 + 2340 @@ -14237,7 +14224,7 @@ 1 2 - 1503078 + 1502215 @@ -14253,22 +14240,22 @@ 1 2 - 339887 + 339692 2 3 - 72607 + 72565 3 10 - 35404 + 35384 10 4445 - 10185 + 10179 @@ -14284,22 +14271,22 @@ 1 2 - 357481 + 357276 2 3 - 64763 + 64726 3 57 - 34370 + 34350 60 2186 - 1470 + 1469 @@ -14315,22 +14302,22 @@ 1 2 - 423443 + 423200 2 3 - 122610 + 122539 3 5 - 58118 + 58085 5 664 - 40198 + 40175 @@ -14346,17 +14333,17 @@ 1 2 - 526499 + 526197 2 3 - 73315 + 73273 3 668 - 44555 + 44530 @@ -14366,19 +14353,19 @@ globalvariables - 661280 + 634536 id - 661280 + 634536 type_id - 10188 + 10190 name - 110724 + 110749 @@ -14392,7 +14379,7 @@ 1 2 - 661280 + 634536 @@ -14408,7 +14395,7 @@ 1 2 - 661280 + 634536 @@ -14424,7 +14411,7 @@ 1 2 - 6874 + 6875 2 @@ -14443,7 +14430,7 @@ 20 - 80 + 74 859 @@ -14465,7 +14452,7 @@ 1 2 - 6997 + 6998 2 @@ -14506,22 +14493,22 @@ 1 2 - 92679 + 92700 2 8 - 9329 + 9454 8 - 139 - 8347 + 182 + 8349 - 181 + 632 1156 - 368 + 245 @@ -14537,12 +14524,12 @@ 1 2 - 93907 + 93928 2 3 - 16571 + 16575 3 @@ -14557,19 +14544,19 @@ localvariables - 725852 + 733038 id - 725852 + 733038 type_id - 53389 + 53913 name - 101620 + 102626 @@ -14583,7 +14570,7 @@ 1 2 - 725852 + 733038 @@ -14599,7 +14586,7 @@ 1 2 - 725852 + 733038 @@ -14615,37 +14602,37 @@ 1 2 - 28869 + 29150 2 3 - 7802 + 7879 3 4 - 4041 + 4081 4 6 - 4065 + 4105 6 12 - 4113 + 4154 12 162 - 4005 + 4044 162 19347 - 492 + 497 @@ -14661,22 +14648,22 @@ 1 2 - 38308 + 38683 2 3 - 6718 + 6784 3 5 - 4477 + 4521 5 3509 - 3885 + 3923 @@ -14692,32 +14679,32 @@ 1 2 - 62532 + 63151 2 3 - 16037 + 16195 3 4 - 6538 + 6602 4 8 - 8154 + 8235 8 137 - 7630 + 7705 137 7546 - 728 + 735 @@ -14733,22 +14720,22 @@ 1 2 - 84575 + 85412 2 3 - 8410 + 8493 3 15 - 7682 + 7758 15 1509 - 952 + 961 @@ -14758,11 +14745,11 @@ autoderivation - 223904 + 224076 var - 223904 + 224076 derivation_type @@ -14780,7 +14767,7 @@ 1 2 - 223904 + 224076 @@ -14809,8 +14796,8 @@ 122 - 527 - 528 + 528 + 529 122 @@ -14826,15 +14813,15 @@ orphaned_variables - 43672 + 43930 var - 43672 + 43930 function - 40449 + 40689 @@ -14848,7 +14835,7 @@ 1 2 - 43672 + 43930 @@ -14864,12 +14851,12 @@ 1 2 - 39610 + 39844 2 47 - 839 + 844 @@ -14879,19 +14866,19 @@ enumconstants - 348112 + 347913 id - 348112 + 347913 parent - 41614 + 41590 index - 13944 + 13936 type_id @@ -14899,11 +14886,11 @@ name - 347731 + 347531 location - 320714 + 320530 @@ -14917,7 +14904,7 @@ 1 2 - 348112 + 347913 @@ -14933,7 +14920,7 @@ 1 2 - 348112 + 347913 @@ -14949,7 +14936,7 @@ 1 2 - 348112 + 347913 @@ -14965,7 +14952,7 @@ 1 2 - 348112 + 347913 @@ -14981,7 +14968,7 @@ 1 2 - 348112 + 347913 @@ -14997,57 +14984,57 @@ 1 2 - 1525 + 1524 2 3 - 5828 + 5824 3 4 - 8715 + 8710 4 5 - 5555 + 5552 5 6 - 4575 + 4572 6 7 - 2560 + 2558 7 8 - 1960 + 1959 8 10 - 2995 + 2994 10 15 - 3431 + 3429 15 33 - 3159 + 3157 33 257 - 1307 + 1306 @@ -15063,57 +15050,57 @@ 1 2 - 1525 + 1524 2 3 - 5828 + 5824 3 4 - 8715 + 8710 4 5 - 5555 + 5552 5 6 - 4575 + 4572 6 7 - 2560 + 2558 7 8 - 1960 + 1959 8 10 - 2995 + 2994 10 15 - 3431 + 3429 15 33 - 3159 + 3157 33 257 - 1307 + 1306 @@ -15129,7 +15116,7 @@ 1 2 - 41614 + 41590 @@ -15145,57 +15132,57 @@ 1 2 - 1525 + 1524 2 3 - 5828 + 5824 3 4 - 8715 + 8710 4 5 - 5555 + 5552 5 6 - 4575 + 4572 6 7 - 2560 + 2558 7 8 - 1960 + 1959 8 10 - 2995 + 2994 10 15 - 3431 + 3429 15 33 - 3159 + 3157 33 257 - 1307 + 1306 @@ -15211,52 +15198,52 @@ 1 2 - 2124 + 2123 2 3 - 6046 + 6042 3 4 - 8769 + 8764 4 5 - 5501 + 5498 5 6 - 4575 + 4572 6 7 - 2505 + 2504 7 8 - 1851 + 1850 8 11 - 3812 + 3810 11 17 - 3213 + 3211 17 165 - 3159 + 3157 256 @@ -15277,22 +15264,22 @@ 1 2 - 2777 + 2776 2 3 - 2233 + 2231 3 4 - 2287 + 2286 4 5 - 1198 + 1197 5 @@ -15302,7 +15289,7 @@ 9 12 - 1089 + 1088 12 @@ -15312,12 +15299,12 @@ 20 59 - 1089 + 1088 64 765 - 980 + 979 @@ -15333,22 +15320,22 @@ 1 2 - 2777 + 2776 2 3 - 2233 + 2231 3 4 - 2287 + 2286 4 5 - 1198 + 1197 5 @@ -15358,7 +15345,7 @@ 9 12 - 1089 + 1088 12 @@ -15368,12 +15355,12 @@ 20 59 - 1089 + 1088 64 765 - 980 + 979 @@ -15389,7 +15376,7 @@ 1 2 - 13944 + 13936 @@ -15405,22 +15392,22 @@ 1 2 - 2777 + 2776 2 3 - 2233 + 2231 3 4 - 2287 + 2286 4 5 - 1198 + 1197 5 @@ -15430,7 +15417,7 @@ 9 12 - 1089 + 1088 12 @@ -15440,12 +15427,12 @@ 20 59 - 1089 + 1088 64 762 - 980 + 979 @@ -15461,22 +15448,22 @@ 1 2 - 2777 + 2776 2 3 - 2233 + 2231 3 4 - 2287 + 2286 4 5 - 1198 + 1197 5 @@ -15486,7 +15473,7 @@ 9 12 - 1089 + 1088 12 @@ -15496,12 +15483,12 @@ 20 59 - 1089 + 1088 64 765 - 980 + 979 @@ -15597,7 +15584,7 @@ 1 2 - 347350 + 347150 2 @@ -15618,7 +15605,7 @@ 1 2 - 347350 + 347150 2 @@ -15639,7 +15626,7 @@ 1 2 - 347731 + 347531 @@ -15655,7 +15642,7 @@ 1 2 - 347731 + 347531 @@ -15671,7 +15658,7 @@ 1 2 - 347350 + 347150 2 @@ -15692,7 +15679,7 @@ 1 2 - 319679 + 319496 2 @@ -15713,7 +15700,7 @@ 1 2 - 320714 + 320530 @@ -15729,7 +15716,7 @@ 1 2 - 319679 + 319496 2 @@ -15750,7 +15737,7 @@ 1 2 - 320714 + 320530 @@ -15766,7 +15753,7 @@ 1 2 - 319679 + 319496 2 @@ -15781,19 +15768,19 @@ builtintypes - 7119 + 7121 id - 7119 + 7121 name - 7119 + 7121 kind - 7119 + 7121 size @@ -15819,7 +15806,7 @@ 1 2 - 7119 + 7121 @@ -15835,7 +15822,7 @@ 1 2 - 7119 + 7121 @@ -15851,7 +15838,7 @@ 1 2 - 7119 + 7121 @@ -15867,7 +15854,7 @@ 1 2 - 7119 + 7121 @@ -15883,7 +15870,7 @@ 1 2 - 7119 + 7121 @@ -15899,7 +15886,7 @@ 1 2 - 7119 + 7121 @@ -15915,7 +15902,7 @@ 1 2 - 7119 + 7121 @@ -15931,7 +15918,7 @@ 1 2 - 7119 + 7121 @@ -15947,7 +15934,7 @@ 1 2 - 7119 + 7121 @@ -15963,7 +15950,7 @@ 1 2 - 7119 + 7121 @@ -15979,7 +15966,7 @@ 1 2 - 7119 + 7121 @@ -15995,7 +15982,7 @@ 1 2 - 7119 + 7121 @@ -16011,7 +15998,7 @@ 1 2 - 7119 + 7121 @@ -16027,7 +16014,7 @@ 1 2 - 7119 + 7121 @@ -16043,7 +16030,7 @@ 1 2 - 7119 + 7121 @@ -16471,17 +16458,75 @@ + + bit_precise_int_types + 8 + + + id + 8 + + + bit_width + 4 + + + + + id + bit_width + + + 12 + + + 1 + 2 + 8 + + + + + + + bit_width + id + + + 12 + + + 1 + 2 + 1 + + + 2 + 3 + 2 + + + 3 + 4 + 1 + + + + + + + derivedtypes - 2997672 + 2998331 id - 2997672 + 2998331 name - 1445315 + 1445632 kind @@ -16489,7 +16534,7 @@ type_id - 1925654 + 1926078 @@ -16503,7 +16548,7 @@ 1 2 - 2997672 + 2998331 @@ -16519,7 +16564,7 @@ 1 2 - 2997672 + 2998331 @@ -16535,7 +16580,7 @@ 1 2 - 2997672 + 2998331 @@ -16551,17 +16596,17 @@ 1 2 - 1327838 + 1328130 2 23 - 108760 + 108784 23 4289 - 8715 + 8717 @@ -16577,7 +16622,7 @@ 1 2 - 1445315 + 1445632 @@ -16593,17 +16638,17 @@ 1 2 - 1327961 + 1328253 2 23 - 108638 + 108661 23 4289 - 8715 + 8717 @@ -16742,22 +16787,22 @@ 1 2 - 1302919 + 1303205 2 3 - 372438 + 372519 3 4 - 121650 + 121676 4 137 - 128647 + 128675 @@ -16773,22 +16818,22 @@ 1 2 - 1304392 + 1304679 2 3 - 372438 + 372519 3 4 - 120176 + 120203 4 137 - 128647 + 128675 @@ -16804,22 +16849,22 @@ 1 2 - 1304760 + 1305047 2 3 - 373051 + 373133 3 4 - 121895 + 121922 4 6 - 125946 + 125974 @@ -16829,11 +16874,11 @@ pointerishsize - 2221248 + 2221736 id - 2221248 + 2221736 size @@ -16855,7 +16900,7 @@ 1 2 - 2221248 + 2221736 @@ -16871,7 +16916,7 @@ 1 2 - 2221248 + 2221736 @@ -16955,19 +17000,19 @@ arraysizes - 79299 + 79317 id - 79299 + 79317 num_elements - 17553 + 17557 bytesize - 19886 + 19890 alignment @@ -16985,7 +17030,7 @@ 1 2 - 79299 + 79317 @@ -17001,7 +17046,7 @@ 1 2 - 79299 + 79317 @@ -17017,7 +17062,7 @@ 1 2 - 79299 + 79317 @@ -17038,7 +17083,7 @@ 2 3 - 10679 + 10682 3 @@ -17079,12 +17124,12 @@ 1 2 - 11538 + 11541 2 3 - 3928 + 3929 3 @@ -17094,7 +17139,7 @@ 5 11 - 1104 + 1105 @@ -17110,12 +17155,12 @@ 1 2 - 11538 + 11541 2 3 - 3928 + 3929 3 @@ -17146,7 +17191,7 @@ 2 3 - 12520 + 12523 3 @@ -17156,7 +17201,7 @@ 4 5 - 2700 + 2701 5 @@ -17166,7 +17211,7 @@ 7 17 - 1595 + 1596 24 @@ -17187,12 +17232,12 @@ 1 2 - 14362 + 14365 2 3 - 3559 + 3560 3 @@ -17218,17 +17263,17 @@ 1 2 - 14607 + 14611 2 3 - 3314 + 3315 3 5 - 1595 + 1596 5 @@ -17394,15 +17439,15 @@ typedefbase - 1757610 + 1791267 id - 1757610 + 1791267 type_id - 835234 + 851342 @@ -17416,7 +17461,7 @@ 1 2 - 1757610 + 1791267 @@ -17432,22 +17477,22 @@ 1 2 - 660833 + 673623 2 3 - 80512 + 82048 3 6 - 63707 + 64928 6 4525 - 30180 + 30742 @@ -17457,15 +17502,15 @@ decltypes - 814720 + 814253 id - 27572 + 27556 expr - 814720 + 814253 kind @@ -17473,7 +17518,7 @@ base_type - 3342 + 3340 parentheses_would_change_meaning @@ -17491,17 +17536,17 @@ 1 2 - 9740 + 9734 2 3 - 3649 + 3647 4 5 - 3627 + 3625 6 @@ -17511,12 +17556,12 @@ 23 24 - 3254 + 3252 29 30 - 3144 + 3142 32 @@ -17526,7 +17571,7 @@ 171 172 - 3078 + 3076 173 @@ -17547,7 +17592,7 @@ 1 2 - 27572 + 27556 @@ -17563,7 +17608,7 @@ 1 2 - 27572 + 27556 @@ -17579,7 +17624,7 @@ 1 2 - 27572 + 27556 @@ -17595,7 +17640,7 @@ 1 2 - 814720 + 814253 @@ -17611,7 +17656,7 @@ 1 2 - 814720 + 814253 @@ -17627,7 +17672,7 @@ 1 2 - 814720 + 814253 @@ -17643,7 +17688,7 @@ 1 2 - 814720 + 814253 @@ -17723,12 +17768,12 @@ 1 2 - 1209 + 1208 2 3 - 1033 + 1032 3 @@ -17769,7 +17814,7 @@ 1 2 - 1165 + 1164 2 @@ -17815,7 +17860,7 @@ 1 2 - 3342 + 3340 @@ -17831,7 +17876,7 @@ 1 2 - 3342 + 3340 @@ -17905,15 +17950,15 @@ type_operators - 7954 + 7964 id - 7954 + 7964 arg_type - 7184 + 7193 kind @@ -17921,7 +17966,7 @@ base_type - 5217 + 5223 @@ -17935,7 +17980,7 @@ 1 2 - 7954 + 7964 @@ -17951,7 +17996,7 @@ 1 2 - 7954 + 7964 @@ -17967,7 +18012,7 @@ 1 2 - 7954 + 7964 @@ -17983,12 +18028,12 @@ 1 2 - 6415 + 6422 2 3 - 769 + 770 @@ -18004,12 +18049,12 @@ 1 2 - 6415 + 6422 2 3 - 769 + 770 @@ -18025,7 +18070,7 @@ 1 2 - 7163 + 7172 2 @@ -18139,12 +18184,12 @@ 1 2 - 3571 + 3575 2 3 - 940 + 942 3 @@ -18170,12 +18215,12 @@ 1 2 - 3720 + 3725 2 3 - 1026 + 1027 3 @@ -18201,12 +18246,12 @@ 1 2 - 4020 + 4024 2 3 - 1176 + 1177 3 @@ -18221,19 +18266,19 @@ usertypes - 4203790 + 4280805 id - 4203790 + 4280805 name - 950343 + 966486 kind - 125 + 128 @@ -18247,7 +18292,7 @@ 1 2 - 4203790 + 4280805 @@ -18263,7 +18308,7 @@ 1 2 - 4203790 + 4280805 @@ -18279,22 +18324,22 @@ 1 2 - 681205 + 692667 2 3 - 160794 + 163369 3 8 - 72561 + 73996 8 - 33452 - 35782 + 33429 + 36452 @@ -18310,12 +18355,12 @@ 1 2 - 898500 + 913640 2 10 - 51842 + 52845 @@ -18349,8 +18394,8 @@ 10 - 1662 - 1663 + 1557 + 1558 10 @@ -18369,8 +18414,8 @@ 10 - 21723 - 21724 + 21713 + 21714 10 @@ -18379,13 +18424,13 @@ 10 - 99064 - 99065 + 98810 + 98811 10 - 167547 - 167548 + 167516 + 167517 10 @@ -18450,13 +18495,13 @@ 10 - 12272 - 12273 + 12260 + 12261 10 - 61190 - 61191 + 60993 + 60994 10 @@ -18467,19 +18512,19 @@ usertypesize - 1421775 + 1445377 id - 1421775 + 1445377 size - 1468 + 1497 alignment - 83 + 85 @@ -18493,7 +18538,7 @@ 1 2 - 1421775 + 1445377 @@ -18509,7 +18554,7 @@ 1 2 - 1421775 + 1445377 @@ -18525,52 +18570,52 @@ 1 2 - 461 + 470 2 3 - 188 + 192 3 4 - 94 + 96 4 6 - 94 + 96 6 9 - 115 + 117 9 19 - 115 + 117 19 30 - 115 + 117 30 115 - 115 + 117 118 1731 - 115 + 117 1840 - 106128 - 52 + 105869 + 53 @@ -18586,17 +18631,17 @@ 1 2 - 1195 + 1219 2 3 - 178 + 181 3 6 - 94 + 96 @@ -18635,8 +18680,8 @@ 10 - 2147 - 2148 + 2042 + 2043 10 @@ -18645,8 +18690,8 @@ 10 - 121323 - 121324 + 121064 + 121065 10 @@ -18663,7 +18708,7 @@ 1 2 - 20 + 21 3 @@ -18703,26 +18748,26 @@ usertype_final - 11293 + 11295 id - 11293 + 11295 usertype_uuid - 47615 + 47751 id - 47615 + 47751 uuid - 47074 + 47209 @@ -18736,7 +18781,7 @@ 1 2 - 47615 + 47751 @@ -18752,12 +18797,12 @@ 1 2 - 46533 + 46666 2 3 - 541 + 542 @@ -18767,15 +18812,15 @@ usertype_alias_kind - 1757610 + 1791267 id - 1757610 + 1791267 alias_kind - 20 + 21 @@ -18789,7 +18834,7 @@ 1 2 - 1757610 + 1791267 @@ -18803,13 +18848,13 @@ 12 - 36943 - 36944 + 36937 + 36938 10 - 130604 - 130605 + 130579 + 130580 10 @@ -18820,26 +18865,26 @@ nontype_template_parameters - 754374 + 758842 id - 754374 + 758842 type_template_type_constraint - 26986 + 27018 id - 13300 + 13316 constraint - 25852 + 25883 @@ -18853,27 +18898,27 @@ 1 2 - 10157 + 10169 2 3 - 898 + 899 3 5 - 1026 + 1027 5 14 - 1111 + 1113 14 17 - 106 + 107 @@ -18889,12 +18934,12 @@ 1 2 - 24719 + 24749 2 3 - 1133 + 1134 @@ -18904,15 +18949,15 @@ mangled_name - 8184676 + 8178495 id - 8184676 + 8178495 mangled_name - 6352070 + 6345485 is_complete @@ -18930,7 +18975,7 @@ 1 2 - 8184676 + 8178495 @@ -18946,7 +18991,7 @@ 1 2 - 8184676 + 8178495 @@ -18962,12 +19007,12 @@ 1 2 - 5997431 + 5990769 2 1120 - 354638 + 354716 @@ -18983,7 +19028,7 @@ 1 2 - 6352070 + 6345485 @@ -19002,8 +19047,8 @@ 122 - 66669 - 66670 + 66604 + 66605 122 @@ -19023,8 +19068,8 @@ 122 - 51740 - 51741 + 51675 + 51676 122 @@ -19035,59 +19080,59 @@ is_pod_class - 608655 + 611214 id - 608655 + 611214 is_standard_layout_class - 1183332 + 1203445 id - 1183332 + 1203445 is_complete - 1403669 + 1428043 id - 1403669 + 1428043 is_class_template - 230554 + 235013 id - 230554 + 235013 class_instantiation - 1183835 + 1203980 to - 1180845 + 1200900 from - 71774 + 73130 @@ -19101,12 +19146,12 @@ 1 2 - 1178758 + 1198740 2 8 - 2087 + 2160 @@ -19122,47 +19167,47 @@ 1 2 - 20340 + 20787 2 3 - 12777 + 13034 3 4 - 7101 + 7217 4 5 - 4657 + 4758 5 7 - 6189 + 6330 7 10 - 5685 + 5752 10 17 - 5864 + 5956 17 - 52 - 5402 + 53 + 5560 - 52 + 53 4358 - 3755 + 3731 @@ -19172,19 +19217,19 @@ class_template_argument - 3001639 + 3054583 type_id - 1423558 + 1448328 index - 1174 + 1197 arg_type - 844622 + 860881 @@ -19198,27 +19243,27 @@ 1 2 - 599423 + 609999 2 3 - 434747 + 442010 3 4 - 263557 + 268054 4 8 - 107724 + 109807 8 113 - 18106 + 18456 @@ -19234,22 +19279,22 @@ 1 2 - 628313 + 639063 2 3 - 448888 + 456788 3 4 - 263630 + 268151 4 113 - 82726 + 84325 @@ -19270,32 +19315,32 @@ 4 5 - 744 + 759 5 30 - 94 + 96 33 90 - 94 + 96 95 453 - 94 + 96 643 7142 - 94 + 96 11996 - 135692 - 41 + 135434 + 42 @@ -19316,32 +19361,32 @@ 4 5 - 744 + 759 5 16 - 104 + 106 16 35 - 94 + 96 37 155 - 94 + 96 196 3290 - 94 + 96 - 11129 - 46222 - 31 + 11131 + 46219 + 32 @@ -19357,27 +19402,27 @@ 1 2 - 524281 + 534431 2 3 - 174662 + 178008 3 5 - 77711 + 79385 5 - 44 - 63413 + 46 + 64693 - 44 - 13910 - 4552 + 46 + 13875 + 4362 @@ -19393,17 +19438,17 @@ 1 2 - 737475 + 752067 2 3 - 87866 + 89169 3 22 - 19281 + 19643 @@ -19413,19 +19458,19 @@ class_template_argument_value - 508958 + 511973 type_id - 209162 + 210401 index - 302 + 303 arg_value - 508824 + 511838 @@ -19439,17 +19484,17 @@ 1 2 - 159884 + 160831 2 3 - 42732 + 42985 3 8 - 6545 + 6584 @@ -19465,22 +19510,22 @@ 1 2 - 152130 + 153031 2 3 - 39878 + 40115 3 52 - 15911 + 16005 54 154 - 1242 + 1249 @@ -19608,12 +19653,12 @@ 1 2 - 508690 + 511703 2 3 - 134 + 135 @@ -19629,7 +19674,7 @@ 1 2 - 508824 + 511838 @@ -19639,15 +19684,15 @@ class_template_generated_from - 61420 + 62608 template - 61420 + 62608 from - 3734 + 3806 @@ -19661,7 +19706,7 @@ 1 2 - 61420 + 62608 @@ -19677,47 +19722,47 @@ 1 2 - 1510 + 1539 2 3 - 472 + 481 3 5 - 209 + 213 5 6 - 178 + 181 6 7 - 262 + 267 7 10 - 262 + 267 10 16 - 283 + 288 16 63 - 335 + 342 63 603 - 220 + 224 @@ -19727,15 +19772,15 @@ is_proxy_class_for - 50227 + 51198 id - 50227 + 51198 templ_param_id - 46922 + 47830 @@ -19749,7 +19794,7 @@ 1 2 - 50227 + 51198 @@ -19765,12 +19810,12 @@ 1 2 - 46167 + 47060 2 82 - 755 + 769 @@ -19780,19 +19825,19 @@ type_mentions - 5941339 + 5937930 id - 5941339 + 5937930 type_id - 278065 + 277905 location - 5885018 + 5881641 kind @@ -19810,7 +19855,7 @@ 1 2 - 5941339 + 5937930 @@ -19826,7 +19871,7 @@ 1 2 - 5941339 + 5937930 @@ -19842,7 +19887,7 @@ 1 2 - 5941339 + 5937930 @@ -19858,42 +19903,42 @@ 1 2 - 137480 + 137401 2 3 - 31210 + 31192 3 4 - 11656 + 11649 4 5 - 14979 + 14970 5 7 - 19935 + 19924 7 12 - 21787 + 21775 12 28 - 21025 + 21013 28 8941 - 19990 + 19978 @@ -19909,42 +19954,42 @@ 1 2 - 137480 + 137401 2 3 - 31210 + 31192 3 4 - 11656 + 11649 4 5 - 14979 + 14970 5 7 - 19935 + 19924 7 12 - 21787 + 21775 12 28 - 21025 + 21013 28 8941 - 19990 + 19978 @@ -19960,7 +20005,7 @@ 1 2 - 278065 + 277905 @@ -19976,12 +20021,12 @@ 1 2 - 5839318 + 5835968 2 4 - 45699 + 45673 @@ -19997,12 +20042,12 @@ 1 2 - 5839318 + 5835968 2 4 - 45699 + 45673 @@ -20018,7 +20063,7 @@ 1 2 - 5885018 + 5881641 @@ -20076,26 +20121,26 @@ is_function_template - 1311389 + 1311677 id - 1311389 + 1311677 function_instantiation - 959643 + 965225 to - 959643 + 965225 from - 180058 + 181057 @@ -20109,7 +20154,7 @@ 1 2 - 959643 + 965225 @@ -20125,27 +20170,27 @@ 1 2 - 108961 + 109539 2 3 - 42195 + 42444 3 9 - 14232 + 14317 9 104 - 13527 + 13608 119 - 1532 - 1141 + 1531 + 1148 @@ -20155,19 +20200,19 @@ function_template_argument - 2464632 + 2479028 function_id - 1448091 + 1456567 index - 469 + 472 arg_type - 293619 + 295324 @@ -20181,22 +20226,22 @@ 1 2 - 787539 + 792170 2 3 - 407146 + 409524 3 4 - 169350 + 170320 4 15 - 84054 + 84552 @@ -20212,22 +20257,22 @@ 1 2 - 806405 + 811147 2 3 - 405266 + 407633 3 4 - 167202 + 168158 4 9 - 69217 + 69627 @@ -20243,7 +20288,7 @@ 1 2 - 167 + 168 7 @@ -20276,18 +20321,18 @@ 33 - 7549 - 7550 + 7548 + 7549 33 - 19678 - 19679 + 19676 + 19677 33 - 43139 - 43140 + 43136 + 43137 33 @@ -20304,7 +20349,7 @@ 1 2 - 167 + 168 4 @@ -20347,8 +20392,8 @@ 33 - 6081 - 6082 + 6080 + 6081 33 @@ -20365,37 +20410,37 @@ 1 2 - 172204 + 173224 2 3 - 25914 + 26034 3 4 - 19536 + 19652 4 6 - 22457 + 22590 6 11 - 22960 + 23096 11 76 - 22960 + 23096 79 2452 - 7586 + 7631 @@ -20411,17 +20456,17 @@ 1 2 - 253002 + 254467 2 3 - 31688 + 31875 3 15 - 8929 + 8981 @@ -20431,19 +20476,19 @@ function_template_argument_value - 453873 + 456494 function_id - 193888 + 194969 index - 469 + 472 arg_value - 451221 + 453826 @@ -20457,17 +20502,17 @@ 1 2 - 149176 + 149992 2 3 - 42262 + 42512 3 8 - 2450 + 2464 @@ -20483,22 +20528,22 @@ 1 2 - 142362 + 143137 2 3 - 36085 + 36299 3 54 - 14669 + 14756 54 166 - 772 + 776 @@ -20514,7 +20559,7 @@ 1 2 - 167 + 168 2 @@ -20552,13 +20597,13 @@ 33 - 1850 - 1851 + 1849 + 1850 33 - 2547 - 2548 + 2546 + 2547 33 @@ -20575,7 +20620,7 @@ 1 2 - 167 + 168 2 @@ -20613,13 +20658,13 @@ 33 - 3813 - 3814 + 3812 + 3813 33 - 4291 - 4292 + 4290 + 4291 33 @@ -20636,12 +20681,12 @@ 1 2 - 448569 + 451159 2 3 - 2651 + 2667 @@ -20657,7 +20702,7 @@ 1 2 - 451221 + 453826 @@ -20667,15 +20712,15 @@ function_template_generated_from - 864410 + 869530 template - 864410 + 869530 from - 22154 + 22286 @@ -20689,7 +20734,7 @@ 1 2 - 864410 + 869530 @@ -20705,62 +20750,62 @@ 1 2 - 3591 + 3613 2 3 - 1174 + 1181 3 5 - 1678 + 1688 5 8 - 1779 + 1789 8 14 - 1678 + 1688 16 20 - 1577 + 1587 20 23 - 1678 + 1688 23 32 - 1846 + 1857 33 66 - 2047 + 2059 70 79 - 1376 + 1384 83 110 - 1846 + 1857 111 370 - 1879 + 1890 @@ -20770,26 +20815,26 @@ is_variable_template - 57694 + 57707 id - 57694 + 57707 variable_instantiation - 596956 + 566269 to - 596956 + 566269 from - 36089 + 36097 @@ -20803,7 +20848,7 @@ 1 2 - 596956 + 566269 @@ -20819,12 +20864,12 @@ 1 2 - 14362 + 14733 2 3 - 3928 + 3683 3 @@ -20834,7 +20879,7 @@ 4 6 - 2700 + 2701 6 @@ -20844,22 +20889,22 @@ 8 11 - 3191 + 3192 11 - 30 + 25 2823 - 30 + 25 94 2823 103 1155 - 982 + 859 @@ -20869,11 +20914,11 @@ variable_template_argument - 1128116 + 1073726 variable_id - 575474 + 548711 index @@ -20881,7 +20926,7 @@ arg_type - 463276 + 461782 @@ -20895,22 +20940,22 @@ 1 2 - 189165 + 179998 2 3 - 288964 + 272698 3 4 - 77703 + 77720 4 17 - 19640 + 18294 @@ -20926,22 +20971,22 @@ 1 2 - 206841 + 196205 2 3 - 276198 + 261402 3 4 - 75616 + 75633 4 17 - 16817 + 15470 @@ -20955,43 +21000,43 @@ 12 - 27 - 28 + 22 + 23 859 - 33 - 34 + 28 + 29 368 - 40 - 41 + 35 + 36 122 - 72 - 73 + 67 + 68 122 - 160 - 161 + 149 + 150 122 - 793 - 794 + 782 + 783 122 - 3147 - 3148 + 3003 + 3004 122 - 4688 - 4689 + 4469 + 4470 122 @@ -21036,13 +21081,13 @@ 122 - 1465 - 1466 + 1448 + 1449 122 - 2164 - 2165 + 2157 + 2158 122 @@ -21059,22 +21104,22 @@ 1 2 - 359671 + 361101 2 3 - 57694 + 56234 3 - 16 - 35476 + 17 + 35606 - 16 + 17 227 - 10434 + 8840 @@ -21090,12 +21135,12 @@ 1 2 - 429887 + 429367 2 7 - 33389 + 32414 @@ -21105,11 +21150,11 @@ variable_template_argument_value - 19763 + 19767 variable_id - 14730 + 14733 index @@ -21117,7 +21162,7 @@ arg_value - 19763 + 19767 @@ -21131,7 +21176,7 @@ 1 2 - 13257 + 13260 2 @@ -21152,12 +21197,12 @@ 1 2 - 10434 + 10436 2 3 - 3928 + 3929 4 @@ -21240,7 +21285,7 @@ 1 2 - 19763 + 19767 @@ -21256,7 +21301,7 @@ 1 2 - 19763 + 19767 @@ -21314,26 +21359,26 @@ is_alias_template - 107518 + 108155 id - 107518 + 108155 alias_instantiation - 460184 + 462909 to - 460184 + 462909 from - 92312 + 92858 @@ -21347,7 +21392,7 @@ 1 2 - 460184 + 462909 @@ -21363,47 +21408,47 @@ 1 2 - 16549 + 16647 2 3 - 16817 + 16917 3 4 - 20040 + 20158 4 5 - 12487 + 12561 5 7 - 6713 + 6753 7 8 - 4800 + 4828 8 10 - 7821 + 7867 10 143 - 6948 + 6989 163 795 - 134 + 135 @@ -21413,19 +21458,19 @@ alias_template_argument - 994218 + 1000106 type_id - 567635 + 570997 index - 302 + 303 arg_type - 127860 + 128617 @@ -21439,22 +21484,22 @@ 1 2 - 276499 + 278137 2 3 - 182542 + 183624 3 4 - 87008 + 87523 4 10 - 21584 + 21712 @@ -21470,22 +21515,22 @@ 1 2 - 277741 + 279387 2 3 - 181334 + 182408 3 4 - 88451 + 88975 4 10 - 20107 + 20226 @@ -21613,32 +21658,32 @@ 1 2 - 78247 + 78710 2 3 - 20308 + 20428 3 4 - 5438 + 5470 4 6 - 10473 + 10535 6 76 - 10842 + 10906 84 4474 - 2551 + 2566 @@ -21654,17 +21699,17 @@ 1 2 - 108928 + 109573 2 3 - 17321 + 17423 3 9 - 1611 + 1620 @@ -21674,19 +21719,19 @@ alias_template_argument_value - 173378 + 174405 type_id - 160790 + 161743 index - 134 + 135 arg_value - 173378 + 174405 @@ -21700,12 +21745,12 @@ 1 2 - 159548 + 160493 2 3 - 1242 + 1249 @@ -21721,12 +21766,12 @@ 1 2 - 158877 + 159818 2 42 - 1913 + 1924 @@ -21804,7 +21849,7 @@ 1 2 - 173378 + 174405 @@ -21820,7 +21865,7 @@ 1 2 - 173378 + 174405 @@ -21830,15 +21875,15 @@ alias_template_generated_from - 99932 + 100523 template - 99932 + 100523 from - 1913 + 1924 @@ -21852,7 +21897,7 @@ 1 2 - 99932 + 100523 @@ -21868,42 +21913,42 @@ 1 2 - 134 + 135 2 4 - 134 + 135 4 8 - 134 + 135 9 18 - 167 + 168 18 20 - 134 + 135 20 21 - 201 + 202 31 32 - 134 + 135 43 50 - 134 + 135 64 @@ -21913,22 +21958,22 @@ 65 66 - 134 + 135 74 84 - 167 + 168 111 112 - 268 + 270 150 294 - 100 + 101 @@ -21938,15 +21983,15 @@ template_template_instantiation - 6014 + 6116 to - 4664 + 5720 from - 1104 + 3977 @@ -21960,12 +22005,12 @@ 1 2 - 3314 + 5603 2 - 3 - 1350 + 18 + 117 @@ -21981,22 +22026,17 @@ 1 2 - 736 + 2491 2 3 - 122 + 1325 - 14 - 15 - 122 - - - 27 - 28 - 122 + 3 + 20 + 160 @@ -22006,19 +22046,19 @@ template_template_argument - 9609 + 9794 type_id - 6073 + 6191 index - 104 + 106 arg_type - 9021 + 9196 @@ -22032,22 +22072,22 @@ 1 2 - 4982 + 5079 2 3 - 419 + 427 3 8 - 503 + 513 8 11 - 167 + 171 @@ -22063,22 +22103,22 @@ 1 2 - 5003 + 5100 2 4 - 555 + 566 4 10 - 461 + 470 10 11 - 52 + 53 @@ -22216,12 +22256,12 @@ 1 2 - 8990 + 9163 3 43 - 31 + 32 @@ -22237,12 +22277,12 @@ 1 2 - 9000 + 9174 2 11 - 20 + 21 @@ -22252,7 +22292,7 @@ template_template_argument_value - 1104 + 1105 type_id @@ -22264,7 +22304,7 @@ arg_value - 1104 + 1105 @@ -22342,7 +22382,7 @@ 1 2 - 1104 + 1105 @@ -22358,7 +22398,7 @@ 1 2 - 1104 + 1105 @@ -22368,19 +22408,19 @@ concept_templates - 3592 + 3596 concept_id - 3592 + 3596 name - 3592 + 3596 location - 3592 + 3596 @@ -22394,7 +22434,7 @@ 1 2 - 3592 + 3596 @@ -22410,7 +22450,7 @@ 1 2 - 3592 + 3596 @@ -22426,7 +22466,7 @@ 1 2 - 3592 + 3596 @@ -22442,7 +22482,7 @@ 1 2 - 3592 + 3596 @@ -22458,7 +22498,7 @@ 1 2 - 3592 + 3596 @@ -22474,7 +22514,7 @@ 1 2 - 3592 + 3596 @@ -22484,15 +22524,15 @@ concept_instantiation - 90068 + 90176 to - 90068 + 90176 from - 3421 + 3425 @@ -22506,7 +22546,7 @@ 1 2 - 90068 + 90176 @@ -22527,7 +22567,7 @@ 2 3 - 106 + 107 3 @@ -22547,7 +22587,7 @@ 6 8 - 213 + 214 8 @@ -22557,17 +22597,17 @@ 10 12 - 277 + 278 12 15 - 213 + 214 15 19 - 213 + 214 19 @@ -22592,7 +22632,7 @@ 79 387 - 213 + 214 @@ -22602,22 +22642,22 @@ is_type_constraint - 36673 + 36717 concept_id - 36673 + 36717 concept_template_argument - 112649 + 112784 concept_id - 76104 + 76196 index @@ -22625,7 +22665,7 @@ arg_type - 21490 + 21516 @@ -22639,17 +22679,17 @@ 1 2 - 46295 + 46351 2 3 - 24612 + 24642 3 7 - 5196 + 5202 @@ -22665,17 +22705,17 @@ 1 2 - 49888 + 49948 2 3 - 22324 + 22351 3 7 - 3891 + 3896 @@ -22773,42 +22813,42 @@ 1 2 - 10542 + 10554 2 3 - 2908 + 2911 3 4 - 1069 + 1070 4 5 - 1347 + 1348 5 6 - 1133 + 1134 6 9 - 1625 + 1627 9 14 - 1945 + 1948 14 259 - 919 + 920 @@ -22824,12 +22864,12 @@ 1 2 - 18090 + 18112 2 3 - 3271 + 3275 3 @@ -22844,19 +22884,19 @@ concept_template_argument_value - 104 + 105 concept_id - 82 + 83 index - 14 + 15 arg_value - 104 + 105 @@ -22870,7 +22910,7 @@ 1 2 - 82 + 83 @@ -22886,7 +22926,7 @@ 1 2 - 59 + 60 2 @@ -22949,7 +22989,7 @@ 1 2 - 104 + 105 @@ -22965,7 +23005,7 @@ 1 2 - 104 + 105 @@ -22975,15 +23015,15 @@ routinetypes - 595664 + 599125 id - 595664 + 599125 return_type - 279722 + 281345 @@ -22997,7 +23037,7 @@ 1 2 - 595664 + 599125 @@ -23013,17 +23053,17 @@ 1 2 - 230679 + 232012 2 3 - 34709 + 34914 3 - 4677 - 14333 + 4676 + 14418 @@ -23033,19 +23073,19 @@ routinetypeargs - 1178768 + 1178092 routine - 416090 + 415851 index - 980 + 979 type_id - 112097 + 112033 @@ -23059,32 +23099,32 @@ 1 2 - 82956 + 82909 2 3 - 126096 + 126023 3 4 - 107903 + 107841 4 5 - 49294 + 49266 5 7 - 33171 + 33152 7 19 - 16667 + 16658 @@ -23100,27 +23140,27 @@ 1 2 - 88948 + 88897 2 3 - 138733 + 138653 3 4 - 114657 + 114591 4 5 - 40742 + 40719 5 10 - 32899 + 32880 10 @@ -23318,47 +23358,47 @@ 1 2 - 33280 + 33261 2 3 - 15578 + 15569 3 4 - 13290 + 13282 4 5 - 9804 + 9798 5 6 - 6372 + 6369 6 8 - 9477 + 9472 8 13 - 9532 + 9526 13 26 - 8660 + 8655 26 926 - 6100 + 6097 @@ -23374,22 +23414,22 @@ 1 2 - 79416 + 79370 2 3 - 17539 + 17529 3 5 - 9477 + 9472 5 17 - 5664 + 5661 @@ -23399,19 +23439,19 @@ ptrtomembers - 9651 + 9837 id - 9651 + 9837 type_id - 7920 + 8073 class_id - 4836 + 4929 @@ -23425,7 +23465,7 @@ 1 2 - 9651 + 9837 @@ -23441,7 +23481,7 @@ 1 2 - 9651 + 9837 @@ -23457,12 +23497,12 @@ 1 2 - 7710 + 7859 2 84 - 209 + 213 @@ -23478,12 +23518,12 @@ 1 2 - 7710 + 7859 2 84 - 209 + 213 @@ -23499,22 +23539,22 @@ 1 2 - 3881 + 3956 2 3 - 514 + 523 8 9 - 398 + 406 10 65 - 41 + 42 @@ -23530,22 +23570,22 @@ 1 2 - 3881 + 3956 2 3 - 514 + 523 8 9 - 398 + 406 10 65 - 41 + 42 @@ -23555,15 +23595,15 @@ specifiers - 7610 + 7612 id - 7610 + 7612 str - 7610 + 7612 @@ -23577,7 +23617,7 @@ 1 2 - 7610 + 7612 @@ -23593,7 +23633,7 @@ 1 2 - 7610 + 7612 @@ -23603,15 +23643,15 @@ typespecifiers - 853570 + 868922 type_id - 848462 + 863725 spec_id - 94 + 96 @@ -23625,12 +23665,12 @@ 1 2 - 843353 + 858528 2 3 - 5108 + 5196 @@ -23664,8 +23704,8 @@ 10 - 821 - 822 + 820 + 821 10 @@ -23679,8 +23719,8 @@ 10 - 18435 - 18436 + 18328 + 18329 10 @@ -23696,11 +23736,11 @@ funspecifiers - 9569842 + 9572191 func_id - 3954300 + 3955783 spec_id @@ -23718,27 +23758,27 @@ 1 2 - 1510375 + 1511321 2 3 - 500471 + 501195 3 4 - 1019724 + 1019334 4 5 - 682148 + 682052 5 8 - 241581 + 241880 @@ -23827,8 +23867,8 @@ 122 - 6170 - 6171 + 6172 + 6173 122 @@ -23854,15 +23894,15 @@ varspecifiers - 3209301 + 3148493 var_id - 2456201 + 2429115 spec_id - 1104 + 1105 @@ -23876,17 +23916,17 @@ 1 2 - 1805109 + 1807839 2 3 - 549573 + 523664 3 5 - 101518 + 97611 @@ -23905,8 +23945,8 @@ 122 - 240 - 241 + 242 + 243 122 @@ -23920,28 +23960,28 @@ 122 - 2749 - 2750 + 2566 + 2567 122 - 2812 - 2813 + 2749 + 2750 122 - 3506 - 3507 + 3255 + 3256 122 - 4918 - 4919 + 4944 + 4945 122 - 8493 - 8494 + 8461 + 8462 122 @@ -23952,15 +23992,15 @@ explicit_specifier_exprs - 40631 + 40640 func_id - 40631 + 40640 constant - 40631 + 40640 @@ -23974,7 +24014,7 @@ 1 2 - 40631 + 40640 @@ -23990,7 +24030,7 @@ 1 2 - 40631 + 40640 @@ -24000,11 +24040,11 @@ attributes - 643971 + 644113 id - 643971 + 644113 kind @@ -24012,7 +24052,7 @@ name - 2086 + 2087 name_space @@ -24020,7 +24060,7 @@ location - 637956 + 638096 @@ -24034,7 +24074,7 @@ 1 2 - 643971 + 644113 @@ -24050,7 +24090,7 @@ 1 2 - 643971 + 644113 @@ -24066,7 +24106,7 @@ 1 2 - 643971 + 644113 @@ -24082,7 +24122,7 @@ 1 2 - 643971 + 644113 @@ -24299,7 +24339,7 @@ 1 2 - 2086 + 2087 @@ -24485,12 +24525,12 @@ 1 2 - 632187 + 632326 2 5 - 5769 + 5770 @@ -24506,7 +24546,7 @@ 1 2 - 637956 + 638096 @@ -24522,12 +24562,12 @@ 1 2 - 632923 + 633062 2 3 - 5032 + 5034 @@ -24543,7 +24583,7 @@ 1 2 - 637956 + 638096 @@ -24553,11 +24593,11 @@ attribute_args - 82169 + 82122 id - 82169 + 82122 kind @@ -24565,7 +24605,7 @@ attribute - 70920 + 70879 index @@ -24573,7 +24613,7 @@ location - 56912 + 56879 @@ -24587,7 +24627,7 @@ 1 2 - 82169 + 82122 @@ -24603,7 +24643,7 @@ 1 2 - 82169 + 82122 @@ -24619,7 +24659,7 @@ 1 2 - 82169 + 82122 @@ -24635,7 +24675,7 @@ 1 2 - 82169 + 82122 @@ -24755,12 +24795,12 @@ 1 2 - 65477 + 65439 2 7 - 5322 + 5318 7 @@ -24781,12 +24821,12 @@ 1 2 - 69411 + 69371 2 3 - 1509 + 1508 @@ -24802,12 +24842,12 @@ 1 2 - 67890 + 67851 2 8 - 3029 + 3027 @@ -24823,12 +24863,12 @@ 1 2 - 68420 + 68381 2 6 - 2499 + 2498 @@ -25008,17 +25048,17 @@ 1 2 - 41309 + 41285 2 3 - 11801 + 11795 3 25 - 3801 + 3799 @@ -25034,12 +25074,12 @@ 1 2 - 47426 + 47398 2 3 - 9486 + 9480 @@ -25055,17 +25095,17 @@ 1 2 - 42656 + 42632 2 3 - 12239 + 12232 3 11 - 2015 + 2014 @@ -25081,7 +25121,7 @@ 1 2 - 56664 + 56632 2 @@ -25096,15 +25136,15 @@ attribute_arg_value - 16448 + 16545 arg - 16448 + 16545 value - 503 + 506 @@ -25118,7 +25158,7 @@ 1 2 - 16448 + 16545 @@ -25134,7 +25174,7 @@ 1 2 - 201 + 202 5 @@ -25189,11 +25229,11 @@ attribute_arg_type - 460 + 464 arg - 460 + 464 type_id @@ -25211,7 +25251,7 @@ 1 2 - 460 + 464 @@ -25252,15 +25292,15 @@ attribute_arg_constant - 71688 + 72691 arg - 71688 + 72691 constant - 71688 + 72691 @@ -25274,7 +25314,7 @@ 1 2 - 71688 + 72691 @@ -25290,7 +25330,7 @@ 1 2 - 71688 + 72691 @@ -25300,15 +25340,15 @@ attribute_arg_expr - 1582 + 1584 arg - 1582 + 1584 expr - 1582 + 1584 @@ -25322,7 +25362,7 @@ 1 2 - 1582 + 1584 @@ -25338,7 +25378,7 @@ 1 2 - 1582 + 1584 @@ -25401,15 +25441,15 @@ typeattributes - 94766 + 94787 type_id - 93048 + 93068 spec_id - 31916 + 31923 @@ -25423,7 +25463,7 @@ 1 2 - 91329 + 91349 2 @@ -25444,7 +25484,7 @@ 1 2 - 27497 + 27503 2 @@ -25464,15 +25504,15 @@ funcattributes - 834364 + 834547 func_id - 788699 + 788873 spec_id - 607513 + 607647 @@ -25486,12 +25526,12 @@ 1 2 - 747454 + 747618 2 7 - 41245 + 41254 @@ -25507,12 +25547,12 @@ 1 2 - 561234 + 561358 2 45 - 45787 + 45797 55 @@ -25590,15 +25630,15 @@ namespaceattributes - 5907 + 5942 namespace_id - 134 + 135 spec_id - 5907 + 5942 @@ -25638,7 +25678,7 @@ 1 2 - 5907 + 5942 @@ -25648,15 +25688,15 @@ stmtattributes - 2223 + 2226 stmt_id - 2223 + 2226 spec_id - 577 + 578 @@ -25670,7 +25710,7 @@ 1 2 - 2223 + 2226 @@ -25701,7 +25741,7 @@ 9 10 - 106 + 107 13 @@ -25716,15 +25756,15 @@ unspecifiedtype - 7371180 + 7365434 type_id - 7371180 + 7365434 unspecified_type_id - 4135732 + 4133203 @@ -25738,7 +25778,7 @@ 1 2 - 7371180 + 7365434 @@ -25754,22 +25794,22 @@ 1 2 - 2670039 + 2667188 2 3 - 1104793 + 1105036 3 8 - 311674 + 311742 8 895 - 49224 + 49235 @@ -25779,19 +25819,19 @@ member - 4123947 + 4121662 parent - 534719 + 532872 index - 29215 + 29222 child - 4119405 + 4117119 @@ -25805,57 +25845,57 @@ 1 2 - 127419 + 126710 2 3 - 81754 + 80544 3 4 - 31916 + 31923 4 5 - 44191 + 44201 5 6 - 41613 + 41623 6 7 - 33389 + 33396 7 9 - 41613 + 41623 9 13 - 40509 + 40517 13 18 - 40631 + 40640 18 - 42 - 40140 + 41 + 40026 - 42 + 41 239 - 11538 + 11664 @@ -25871,57 +25911,57 @@ 1 2 - 127173 + 126465 2 3 - 81877 + 80667 3 4 - 31670 + 31677 4 5 - 44437 + 44447 5 6 - 41613 + 41623 6 7 - 32284 + 32291 7 9 - 41982 + 41991 9 13 - 40877 + 40886 13 18 - 40754 + 40763 18 42 - 40140 + 40149 42 265 - 11907 + 11909 @@ -25937,12 +25977,12 @@ 1 2 - 6383 + 6384 2 3 - 2577 + 2578 3 @@ -25957,12 +25997,12 @@ 10 19 - 2209 + 2210 19 26 - 2209 + 2210 26 @@ -25972,22 +26012,22 @@ 36 50 - 2209 + 2210 54 141 - 2209 + 2210 150 468 - 2209 + 2210 480 - 4311 - 2086 + 4295 + 2087 @@ -26003,12 +26043,12 @@ 1 2 - 5401 + 5402 2 3 - 3559 + 3560 3 @@ -26023,17 +26063,17 @@ 10 20 - 2209 + 2210 20 27 - 2209 + 2210 27 37 - 2577 + 2578 37 @@ -26043,16 +26083,16 @@ 58 155 - 2209 + 2210 164 528 - 2209 + 2210 548 - 4332 + 4316 1841 @@ -26069,7 +26109,7 @@ 1 2 - 4119405 + 4117119 @@ -26085,12 +26125,12 @@ 1 2 - 4114864 + 4112576 2 3 - 4541 + 4542 @@ -26100,15 +26140,15 @@ enclosingfunction - 114616 + 116832 child - 114616 + 116832 parent - 68858 + 70189 @@ -26122,7 +26162,7 @@ 1 2 - 114616 + 116832 @@ -26138,22 +26178,22 @@ 1 2 - 37324 + 38046 2 3 - 24410 + 24882 3 5 - 6042 + 6159 5 45 - 1080 + 1101 @@ -26163,27 +26203,27 @@ derivations - 492610 + 494887 derivation - 492610 + 494887 sub - 471194 + 473343 index - 234 + 236 super - 239877 + 240926 location - 34877 + 35083 @@ -26197,7 +26237,7 @@ 1 2 - 492610 + 494887 @@ -26213,7 +26253,7 @@ 1 2 - 492610 + 494887 @@ -26229,7 +26269,7 @@ 1 2 - 492610 + 494887 @@ -26245,7 +26285,7 @@ 1 2 - 492610 + 494887 @@ -26261,12 +26301,12 @@ 1 2 - 454914 + 456966 2 9 - 16280 + 16376 @@ -26282,12 +26322,12 @@ 1 2 - 454914 + 456966 2 8 - 16280 + 16376 @@ -26303,12 +26343,12 @@ 1 2 - 454914 + 456966 2 9 - 16280 + 16376 @@ -26324,12 +26364,12 @@ 1 2 - 454914 + 456966 2 8 - 16280 + 16376 @@ -26345,7 +26385,7 @@ 25 26 - 100 + 101 26 @@ -26363,8 +26403,8 @@ 33 - 14037 - 14038 + 14018 + 14019 33 @@ -26381,7 +26421,7 @@ 25 26 - 134 + 135 52 @@ -26394,8 +26434,8 @@ 33 - 14037 - 14038 + 14018 + 14019 33 @@ -26435,8 +26475,8 @@ 33 - 6742 - 6743 + 6731 + 6732 33 @@ -26453,7 +26493,7 @@ 1 2 - 134 + 135 7 @@ -26484,12 +26524,12 @@ 1 2 - 230108 + 231269 2 1758 - 9768 + 9657 @@ -26505,12 +26545,12 @@ 1 2 - 230108 + 231269 2 1758 - 9768 + 9657 @@ -26526,12 +26566,12 @@ 1 2 - 239440 + 240487 2 4 - 436 + 438 @@ -26547,12 +26587,12 @@ 1 2 - 234506 + 235658 2 81 - 5370 + 5267 @@ -26568,27 +26608,27 @@ 1 2 - 25847 + 26000 2 - 5 - 3188 + 4 + 2498 - 5 - 21 - 2618 + 4 + 12 + 2633 - 21 - 186 - 2618 + 13 + 85 + 2633 - 205 + 87 985 - 604 + 1316 @@ -26604,27 +26644,27 @@ 1 2 - 25847 + 26000 2 - 5 - 3188 + 4 + 2498 - 5 - 21 - 2618 + 4 + 12 + 2633 - 21 - 186 - 2618 + 13 + 85 + 2633 - 205 + 87 985 - 604 + 1316 @@ -26640,7 +26680,7 @@ 1 2 - 34877 + 35083 @@ -26656,22 +26696,22 @@ 1 2 - 28163 + 28330 2 4 - 2551 + 2600 4 24 - 2651 + 2633 24 933 - 1510 + 1519 @@ -26681,15 +26721,15 @@ derspecifiers - 494356 + 496643 der_id - 492174 + 494448 spec_id - 134 + 135 @@ -26703,12 +26743,12 @@ 1 2 - 489992 + 492253 2 3 - 2181 + 2194 @@ -26737,8 +26777,8 @@ 33 - 13466 - 13467 + 13447 + 13448 33 @@ -26749,15 +26789,15 @@ direct_base_offsets - 466092 + 468211 der_id - 466092 + 468211 offset - 503 + 506 @@ -26771,7 +26811,7 @@ 1 2 - 466092 + 468211 @@ -26787,17 +26827,17 @@ 1 2 - 100 + 101 2 3 - 134 + 135 3 4 - 100 + 101 4 @@ -26820,8 +26860,8 @@ 33 - 13735 - 13736 + 13716 + 13717 33 @@ -26832,19 +26872,19 @@ virtual_base_offsets - 5740 + 5774 sub - 5740 + 5774 super - 100 + 101 offset - 335 + 337 @@ -26858,7 +26898,7 @@ 1 2 - 5740 + 5774 @@ -26874,7 +26914,7 @@ 1 2 - 5740 + 5774 @@ -26932,7 +26972,7 @@ 2 3 - 302 + 303 153 @@ -26958,7 +26998,7 @@ 2 3 - 302 + 303 @@ -26968,23 +27008,23 @@ frienddecls - 761457 + 765587 id - 761457 + 765587 type_id - 53910 + 54229 decl_id - 99898 + 100489 location - 6008 + 6044 @@ -26998,7 +27038,7 @@ 1 2 - 761457 + 765587 @@ -27014,7 +27054,7 @@ 1 2 - 761457 + 765587 @@ -27030,7 +27070,7 @@ 1 2 - 761457 + 765587 @@ -27046,42 +27086,42 @@ 1 2 - 5538 + 5571 2 3 - 24806 + 24953 3 8 - 4733 + 4794 8 17 - 4699 + 4693 17 27 - 4430 + 4457 27 45 - 4263 + 4288 45 81 - 4699 + 4727 102 121 - 738 + 742 @@ -27097,42 +27137,42 @@ 1 2 - 5538 + 5571 2 3 - 24806 + 24953 3 8 - 4733 + 4794 8 17 - 4699 + 4693 17 27 - 4430 + 4457 27 45 - 4263 + 4288 45 81 - 4699 + 4727 102 121 - 738 + 742 @@ -27148,12 +27188,12 @@ 1 2 - 52567 + 52878 2 13 - 1342 + 1350 @@ -27169,32 +27209,32 @@ 1 2 - 66968 + 67431 2 3 - 8056 + 7968 3 9 - 9130 + 9252 9 24 - 7552 + 7597 24 - 136 - 7586 + 135 + 7597 - 136 + 135 191 - 604 + 641 @@ -27210,32 +27250,32 @@ 1 2 - 66968 + 67431 2 3 - 8056 + 7968 3 9 - 9130 + 9252 9 24 - 7552 + 7597 24 - 136 - 7586 + 135 + 7597 - 136 + 135 191 - 604 + 641 @@ -27251,12 +27291,12 @@ 1 2 - 98690 + 99273 2 6 - 1208 + 1215 @@ -27272,12 +27312,12 @@ 1 2 - 5639 + 5672 2 - 22495 - 369 + 22484 + 371 @@ -27293,12 +27333,12 @@ 1 2 - 5874 + 5909 2 1509 - 134 + 135 @@ -27314,12 +27354,12 @@ 1 2 - 5672 + 5706 2 2844 - 335 + 337 @@ -27329,19 +27369,19 @@ comments - 11056034 + 11058465 id - 11056034 + 11058465 contents - 4236514 + 4237445 location - 11056034 + 11058465 @@ -27355,7 +27395,7 @@ 1 2 - 11056034 + 11058465 @@ -27371,7 +27411,7 @@ 1 2 - 11056034 + 11058465 @@ -27387,17 +27427,17 @@ 1 2 - 3867144 + 3867994 2 6 - 318425 + 318495 6 34447 - 50943 + 50954 @@ -27413,17 +27453,17 @@ 1 2 - 3867144 + 3867994 2 6 - 318425 + 318495 6 34447 - 50943 + 50954 @@ -27439,7 +27479,7 @@ 1 2 - 11056034 + 11058465 @@ -27455,7 +27495,7 @@ 1 2 - 11056034 + 11058465 @@ -27465,15 +27505,15 @@ commentbinding - 3852168 + 3860014 id - 3297194 + 3297919 element - 3689273 + 3697082 @@ -27487,12 +27527,12 @@ 1 2 - 3236553 + 3230266 2 1706 - 60640 + 67652 @@ -27508,12 +27548,12 @@ 1 2 - 3526377 + 3534151 2 3 - 162895 + 162931 @@ -27523,15 +27563,15 @@ exprconv - 9635850 + 9630323 converted - 9635744 + 9630218 conversion - 9635850 + 9630323 @@ -27545,7 +27585,7 @@ 1 2 - 9635639 + 9630112 2 @@ -27566,7 +27606,7 @@ 1 2 - 9635850 + 9630323 @@ -27576,30 +27616,30 @@ compgenerated - 9880588 + 9856495 id - 9880588 + 9856495 synthetic_destructor_call - 1661391 + 1663253 element - 1237286 + 1238704 i - 384 + 385 destructor_call - 1661391 + 1663253 @@ -27613,17 +27653,17 @@ 1 2 - 823574 + 824561 2 3 - 406954 + 407377 3 19 - 6757 + 6765 @@ -27639,17 +27679,17 @@ 1 2 - 823574 + 824561 2 3 - 406954 + 407377 3 19 - 6757 + 6765 @@ -27708,13 +27748,13 @@ 21 - 19347 - 19348 + 19344 + 19345 21 - 57861 - 57862 + 57858 + 57859 21 @@ -27774,13 +27814,13 @@ 21 - 19347 - 19348 + 19344 + 19345 21 - 57861 - 57862 + 57858 + 57859 21 @@ -27797,7 +27837,7 @@ 1 2 - 1661391 + 1663253 @@ -27813,7 +27853,7 @@ 1 2 - 1661391 + 1663253 @@ -27823,15 +27863,15 @@ namespaces - 8591 + 8757 id - 8591 + 8757 name - 4542 + 4630 @@ -27845,7 +27885,7 @@ 1 2 - 8591 + 8757 @@ -27861,17 +27901,17 @@ 1 2 - 3713 + 3785 2 3 - 524 + 534 3 149 - 304 + 310 @@ -27892,15 +27932,15 @@ namespacembrs - 2487871 + 2457354 parentid - 3928 + 3929 memberid - 2487871 + 2457354 @@ -27972,8 +28012,8 @@ 245 - 19521 - 19522 + 19268 + 19269 122 @@ -27990,7 +28030,7 @@ 1 2 - 2487871 + 2457354 @@ -28000,19 +28040,19 @@ exprparents - 19459867 + 19448700 expr_id - 19459867 + 19448700 child_index - 20040 + 20029 parent_id - 12943755 + 12936328 @@ -28026,7 +28066,7 @@ 1 2 - 19459867 + 19448700 @@ -28042,7 +28082,7 @@ 1 2 - 19459867 + 19448700 @@ -28058,7 +28098,7 @@ 1 2 - 3856 + 3853 2 @@ -28073,17 +28113,17 @@ 4 5 - 8978 + 8973 5 8 - 1660 + 1659 8 11 - 1632 + 1631 11 @@ -28109,7 +28149,7 @@ 1 2 - 3856 + 3853 2 @@ -28124,17 +28164,17 @@ 4 5 - 8978 + 8973 5 8 - 1660 + 1659 8 11 - 1632 + 1631 11 @@ -28160,17 +28200,17 @@ 1 2 - 7396922 + 7392678 2 3 - 5084149 + 5081231 3 712 - 462684 + 462418 @@ -28186,17 +28226,17 @@ 1 2 - 7396922 + 7392678 2 3 - 5084149 + 5081231 3 712 - 462684 + 462418 @@ -28206,22 +28246,22 @@ expr_isload - 6902994 + 6890637 expr_id - 6902994 + 6890637 conversionkinds - 6052094 + 6047233 expr_id - 6052094 + 6047233 kind @@ -28239,7 +28279,7 @@ 1 2 - 6052094 + 6047233 @@ -28268,8 +28308,8 @@ 1 - 40990 - 40991 + 40996 + 40997 1 @@ -28278,13 +28318,13 @@ 1 - 92949 - 92950 + 92848 + 92849 1 - 5833488 - 5833489 + 5828722 + 5828723 1 @@ -28295,11 +28335,11 @@ iscall - 5772743 + 5777667 caller - 5772743 + 5777667 kind @@ -28317,7 +28357,7 @@ 1 2 - 5772743 + 5777667 @@ -28341,8 +28381,8 @@ 21 - 268245 - 268246 + 268152 + 268153 21 @@ -28353,11 +28393,11 @@ numtemplatearguments - 729040 + 684876 expr_id - 729040 + 684876 num @@ -28375,7 +28415,7 @@ 1 2 - 729040 + 684876 @@ -28399,8 +28439,8 @@ 122 - 27 - 28 + 22 + 23 122 @@ -28409,8 +28449,8 @@ 122 - 68 - 69 + 62 + 63 122 @@ -28419,13 +28459,13 @@ 122 - 2001 - 2002 + 1843 + 1844 122 - 3393 - 3394 + 3201 + 3202 122 @@ -28484,23 +28524,23 @@ namequalifiers - 3050545 + 3044887 id - 3050545 + 3044887 qualifiableelement - 3050545 + 3044887 qualifyingelement - 54656 + 54379 location - 558950 + 557008 @@ -28514,7 +28554,7 @@ 1 2 - 3050545 + 3044887 @@ -28530,7 +28570,7 @@ 1 2 - 3050545 + 3044887 @@ -28546,7 +28586,7 @@ 1 2 - 3050545 + 3044887 @@ -28562,7 +28602,7 @@ 1 2 - 3050545 + 3044887 @@ -28578,7 +28618,7 @@ 1 2 - 3050545 + 3044887 @@ -28594,7 +28634,7 @@ 1 2 - 3050545 + 3044887 @@ -28610,27 +28650,22 @@ 1 2 - 37913 + 37916 2 3 - 8382 + 8435 3 5 - 4127 + 4132 5 - 476 - 4105 - - - 1600 41956 - 128 + 3896 @@ -28646,27 +28681,22 @@ 1 2 - 37913 + 37916 2 3 - 8382 + 8435 3 5 - 4127 + 4132 5 - 476 - 4105 - - - 1600 41956 - 128 + 3896 @@ -28682,22 +28712,22 @@ 1 2 - 41441 + 41234 2 3 - 7420 + 7407 3 7 - 4148 + 4132 7 20059 - 1646 + 1605 @@ -28713,22 +28743,22 @@ 1 2 - 83311 + 84417 2 6 - 42339 + 39007 6 7 - 396669 + 397208 7 192 - 36630 + 36374 @@ -28744,22 +28774,22 @@ 1 2 - 83311 + 84417 2 6 - 42339 + 39007 6 7 - 396669 + 397208 7 192 - 36630 + 36374 @@ -28775,22 +28805,22 @@ 1 2 - 119492 + 117045 2 4 - 14070 + 14065 4 5 - 412920 + 413479 5 60 - 12466 + 12417 @@ -28800,15 +28830,15 @@ varbind - 8257017 + 8252279 expr - 8257017 + 8252279 var - 1050679 + 1050076 @@ -28822,7 +28852,7 @@ 1 2 - 8257017 + 8252279 @@ -28838,52 +28868,52 @@ 1 2 - 171585 + 171487 2 3 - 188755 + 188646 3 4 - 145690 + 145606 4 5 - 116670 + 116603 5 6 - 83175 + 83127 6 7 - 65836 + 65798 7 9 - 80838 + 80792 9 13 - 81598 + 81551 13 27 - 79150 + 79104 27 5137 - 37379 + 37358 @@ -28893,15 +28923,15 @@ funbind - 5787669 + 5788265 expr - 5785316 + 5785803 fun - 274909 + 275046 @@ -28915,12 +28945,12 @@ 1 2 - 5782964 + 5783341 2 3 - 2352 + 2462 @@ -28936,27 +28966,27 @@ 1 2 - 180650 + 180845 2 3 - 38212 + 38237 3 4 - 16764 + 17127 4 8 - 23286 + 23229 8 37798 - 15995 + 15607 @@ -28966,19 +28996,19 @@ expr_allocator - 44756 + 44842 expr - 44756 + 44842 func - 64 + 101 form - 21 + 33 @@ -28992,7 +29022,7 @@ 1 2 - 44756 + 44842 @@ -29008,7 +29038,7 @@ 1 2 - 44756 + 44842 @@ -29022,19 +29052,19 @@ 12 - 2 - 3 - 21 + 1 + 2 + 33 - 369 - 370 - 21 + 591 + 592 + 33 - 1722 - 1723 - 21 + 736 + 737 + 33 @@ -29050,7 +29080,7 @@ 1 2 - 64 + 101 @@ -29064,9 +29094,9 @@ 12 - 2093 - 2094 - 21 + 1328 + 1329 + 33 @@ -29082,7 +29112,7 @@ 3 4 - 21 + 33 @@ -29092,15 +29122,15 @@ expr_deallocator - 53037 + 53351 expr - 53037 + 53351 func - 100 + 101 form @@ -29118,7 +29148,7 @@ 1 2 - 53037 + 53351 @@ -29134,7 +29164,7 @@ 1 2 - 53037 + 53351 @@ -29176,7 +29206,7 @@ 1 2 - 100 + 101 @@ -29239,15 +29269,15 @@ expr_cond_guard - 898137 + 897622 cond - 898137 + 897622 guard - 898137 + 897622 @@ -29261,7 +29291,7 @@ 1 2 - 898137 + 897622 @@ -29277,7 +29307,7 @@ 1 2 - 898137 + 897622 @@ -29287,15 +29317,15 @@ expr_cond_true - 898134 + 897618 cond - 898134 + 897618 true - 898134 + 897618 @@ -29309,7 +29339,7 @@ 1 2 - 898134 + 897618 @@ -29325,7 +29355,7 @@ 1 2 - 898134 + 897618 @@ -29335,15 +29365,15 @@ expr_cond_false - 898137 + 897622 cond - 898137 + 897622 false - 898137 + 897622 @@ -29357,7 +29387,7 @@ 1 2 - 898137 + 897622 @@ -29373,7 +29403,7 @@ 1 2 - 898137 + 897622 @@ -29383,15 +29413,15 @@ values - 13547098 + 13539325 id - 13547098 + 13539325 str - 114026 + 113961 @@ -29405,7 +29435,7 @@ 1 2 - 13547098 + 13539325 @@ -29421,27 +29451,27 @@ 1 2 - 77935 + 77890 2 3 - 15228 + 15220 3 6 - 8841 + 8836 6 52 - 8587 + 8582 52 681857 - 3432 + 3430 @@ -29451,15 +29481,15 @@ valuetext - 6647904 + 6632066 id - 6647904 + 6632066 text - 1095330 + 1095191 @@ -29473,7 +29503,7 @@ 1 2 - 6647904 + 6632066 @@ -29489,22 +29519,22 @@ 1 2 - 833965 + 833960 2 3 - 146908 + 146907 3 7 - 86571 + 86513 7 - 593706 - 27886 + 594514 + 27811 @@ -29514,15 +29544,15 @@ valuebind - 13655359 + 13647524 val - 13547098 + 13539325 expr - 13655359 + 13647524 @@ -29536,12 +29566,12 @@ 1 2 - 13456848 + 13449127 2 6 - 90250 + 90198 @@ -29557,7 +29587,7 @@ 1 2 - 13655359 + 13647524 @@ -29567,15 +29597,15 @@ fieldoffsets - 1503078 + 1502215 id - 1503078 + 1502215 byteoffset - 31374 + 31356 bitoffset @@ -29593,7 +29623,7 @@ 1 2 - 1503078 + 1502215 @@ -29609,7 +29639,7 @@ 1 2 - 1503078 + 1502215 @@ -29625,32 +29655,32 @@ 1 2 - 17702 + 17692 2 3 - 2451 + 2449 3 5 - 2668 + 2667 5 12 - 2614 + 2613 12 35 - 2396 + 2395 35 200 - 2396 + 2395 210 @@ -29671,7 +29701,7 @@ 1 2 - 30339 + 30321 2 @@ -29773,11 +29803,11 @@ bitfield - 29829 + 29835 id - 29829 + 29835 bits @@ -29799,7 +29829,7 @@ 1 2 - 29829 + 29835 @@ -29815,7 +29845,7 @@ 1 2 - 29829 + 29835 @@ -29959,23 +29989,23 @@ initialisers - 2289023 + 2292690 init - 2289023 + 2292690 var - 998370 + 998340 expr - 2289023 + 2292690 location - 525173 + 526645 @@ -29989,7 +30019,7 @@ 1 2 - 2289023 + 2292690 @@ -30005,7 +30035,7 @@ 1 2 - 2289023 + 2292690 @@ -30021,7 +30051,7 @@ 1 2 - 2289023 + 2292690 @@ -30037,17 +30067,17 @@ 1 2 - 874745 + 874360 2 15 - 51071 + 51218 16 25 - 72553 + 72761 @@ -30063,17 +30093,17 @@ 1 2 - 874745 + 874360 2 15 - 51071 + 51218 16 25 - 72553 + 72761 @@ -30089,7 +30119,7 @@ 1 2 - 998362 + 998332 2 @@ -30110,7 +30140,7 @@ 1 2 - 2289023 + 2292690 @@ -30126,7 +30156,7 @@ 1 2 - 2289023 + 2292690 @@ -30142,7 +30172,7 @@ 1 2 - 2289023 + 2292690 @@ -30158,22 +30188,22 @@ 1 2 - 414711 + 415900 2 3 - 33393 + 33497 3 6 - 41518 + 41612 6 113696 - 35549 + 35635 @@ -30189,17 +30219,17 @@ 1 2 - 453031 + 454329 2 3 - 34225 + 34331 3 12835 - 37916 + 37984 @@ -30215,22 +30245,22 @@ 1 2 - 414711 + 415900 2 3 - 33393 + 33497 3 6 - 41518 + 41612 6 113696 - 35549 + 35635 @@ -30240,26 +30270,26 @@ braced_initialisers - 67191 + 67888 init - 67191 + 67888 expr_ancestor - 1667335 + 1669204 exp - 1667335 + 1669204 ancestor - 834480 + 835480 @@ -30273,7 +30303,7 @@ 1 2 - 1667335 + 1669204 @@ -30289,17 +30319,17 @@ 1 2 - 16978 + 16999 2 3 - 807494 + 808504 3 19 - 10007 + 9976 @@ -30309,19 +30339,19 @@ exprs - 25217889 + 25203419 id - 25217889 + 25203419 kind - 1451 + 1450 location - 10588753 + 10582678 @@ -30335,7 +30365,7 @@ 1 2 - 25217889 + 25203419 @@ -30351,7 +30381,7 @@ 1 2 - 25217889 + 25203419 @@ -30529,22 +30559,22 @@ 1 2 - 8906278 + 8901168 2 3 - 820855 + 820384 3 16 - 797438 + 796981 16 71733 - 64181 + 64144 @@ -30560,17 +30590,17 @@ 1 2 - 9045722 + 9040532 2 3 - 774505 + 774061 3 32 - 768525 + 768084 @@ -30580,15 +30610,15 @@ expr_reuse - 841815 + 842823 reuse - 841815 + 842823 original - 841815 + 842823 value_category @@ -30606,7 +30636,7 @@ 1 2 - 841815 + 842823 @@ -30622,7 +30652,7 @@ 1 2 - 841815 + 842823 @@ -30638,7 +30668,7 @@ 1 2 - 841815 + 842823 @@ -30654,7 +30684,7 @@ 1 2 - 841815 + 842823 @@ -30706,15 +30736,15 @@ expr_types - 25217889 + 25203419 id - 25217889 + 25203419 typeid - 214267 + 214144 value_category @@ -30732,7 +30762,7 @@ 1 2 - 25217889 + 25203419 @@ -30748,7 +30778,7 @@ 1 2 - 25217889 + 25203419 @@ -30764,52 +30794,52 @@ 1 2 - 52527 + 52497 2 3 - 35201 + 35181 3 4 - 14511 + 14503 4 5 - 14533 + 14525 5 8 - 17567 + 17557 8 14 - 17392 + 17382 14 24 - 16446 + 16437 24 49 - 16072 + 16063 49 134 - 16182 + 16173 134 441492 - 13830 + 13822 @@ -30825,12 +30855,12 @@ 1 2 - 185969 + 185862 2 3 - 28297 + 28281 @@ -30893,15 +30923,15 @@ new_allocated_type - 45518 + 45787 expr - 45518 + 45787 type_id - 26988 + 27148 @@ -30915,7 +30945,7 @@ 1 2 - 45518 + 45787 @@ -30931,17 +30961,17 @@ 1 2 - 11345 + 11413 2 3 - 14266 + 14350 3 19 - 1376 + 1384 @@ -30951,15 +30981,15 @@ new_array_allocated_type - 6597 + 6616 expr - 6597 + 6616 type_id - 2834 + 2842 @@ -30973,7 +31003,7 @@ 1 2 - 6597 + 6616 @@ -30994,7 +31024,7 @@ 2 3 - 2503 + 2510 3 @@ -31014,30 +31044,30 @@ param_ref_to_this - 25020 + 25267 expr - 25020 + 25267 aggregate_field_init - 5717385 + 5720718 aggregate - 1243071 + 1245402 initializer - 5717207 + 5720540 field - 3229 + 3236 position @@ -31059,12 +31089,12 @@ 1 2 - 19692 + 21021 2 3 - 669033 + 670035 3 @@ -31110,12 +31140,12 @@ 1 2 - 19688 + 21017 2 3 - 668965 + 669967 3 @@ -31161,12 +31191,12 @@ 1 2 - 19692 + 21021 2 3 - 669033 + 670035 3 @@ -31212,7 +31242,7 @@ 1 2 - 1242989 + 1245320 2 @@ -31233,7 +31263,7 @@ 1 2 - 5717207 + 5720540 @@ -31249,7 +31279,7 @@ 1 2 - 5717029 + 5720362 2 @@ -31270,7 +31300,7 @@ 1 2 - 5717207 + 5720540 @@ -31286,7 +31316,7 @@ 1 2 - 5717207 + 5720540 @@ -31307,12 +31337,12 @@ 2 3 - 272 + 273 3 6 - 274 + 275 6 @@ -31331,18 +31361,18 @@ 74 - 339 - 243 + 316 + 244 - 353 - 252555 - 252 + 338 + 252258 + 244 - 392631 + 252554 392632 - 2 + 14 @@ -31363,12 +31393,12 @@ 2 3 - 272 + 273 3 6 - 274 + 275 6 @@ -31387,18 +31417,18 @@ 74 - 339 - 243 + 316 + 244 - 353 - 252555 - 252 + 338 + 252258 + 244 - 392631 + 252554 392632 - 2 + 14 @@ -31414,7 +31444,7 @@ 1 2 - 3215 + 3222 2 @@ -31435,7 +31465,7 @@ 1 2 - 3203 + 3210 2 @@ -31505,12 +31535,12 @@ 554346 - 1223380 + 1224382 2 - 1243071 - 1243072 + 1245402 + 1245403 1 @@ -31576,12 +31606,12 @@ 554346 - 1223380 + 1224382 2 - 1243071 - 1243072 + 1245402 + 1245403 1 @@ -31647,12 +31677,12 @@ 318 - 885 + 886 2 - 1285 - 1286 + 1291 + 1292 1 @@ -31688,13 +31718,13 @@ 12 - 480 - 481 + 1482 + 1483 1 - 1242673 - 1242674 + 1244002 + 1244003 1 @@ -31709,13 +31739,13 @@ 12 - 710 - 711 + 1712 + 1713 1 - 5716497 - 5716498 + 5718828 + 5718829 1 @@ -31730,13 +31760,13 @@ 12 - 218 - 219 + 219 + 220 1 - 3037 - 3038 + 3043 + 3044 1 @@ -31768,15 +31798,15 @@ aggregate_array_init - 1349502 + 1353666 aggregate - 152357 + 153359 initializer - 1349502 + 1353666 element_index @@ -31802,27 +31832,27 @@ 1 2 - 14696 + 14702 2 3 - 13903 + 13963 3 4 - 61677 + 61827 4 5 - 17014 + 17356 5 6 - 19009 + 19453 6 @@ -31831,13 +31861,13 @@ 10 - 58 - 11429 + 61 + 11514 - 58 + 61 62923 - 1763 + 1678 @@ -31853,27 +31883,27 @@ 1 2 - 14696 + 14702 2 3 - 13903 + 13963 3 4 - 61677 + 61827 4 5 - 17014 + 17356 5 6 - 19009 + 19453 6 @@ -31882,13 +31912,13 @@ 10 - 58 - 11429 + 61 + 11514 - 58 + 61 62923 - 1763 + 1678 @@ -31904,27 +31934,27 @@ 1 2 - 14696 + 14702 2 3 - 13903 + 13963 3 4 - 61677 + 61827 4 5 - 17014 + 17356 5 6 - 19009 + 19453 6 @@ -31933,13 +31963,13 @@ 10 - 58 - 11429 + 61 + 11514 - 58 + 61 62923 - 1763 + 1678 @@ -31955,7 +31985,7 @@ 1 2 - 152357 + 153359 @@ -31971,7 +32001,7 @@ 1 2 - 1349502 + 1353666 @@ -31987,7 +32017,7 @@ 1 2 - 1349502 + 1353666 @@ -32003,7 +32033,7 @@ 1 2 - 1349502 + 1353666 @@ -32019,7 +32049,7 @@ 1 2 - 1349502 + 1353666 @@ -32059,7 +32089,7 @@ 37 - 152357 + 153359 2151 @@ -32100,7 +32130,7 @@ 37 - 152357 + 153359 2151 @@ -32183,7 +32213,7 @@ 37 - 152358 + 153360 2151 @@ -32224,7 +32254,7 @@ 37 - 152358 + 153360 2151 @@ -32286,8 +32316,8 @@ 1 - 152354 - 152355 + 153356 + 153357 1 @@ -32307,8 +32337,8 @@ 1 - 1349486 - 1349487 + 1353650 + 1353651 1 @@ -32361,15 +32391,15 @@ condition_decl_bind - 406398 + 406885 expr - 406398 + 406885 decl - 406398 + 406885 @@ -32383,7 +32413,7 @@ 1 2 - 406398 + 406885 @@ -32399,7 +32429,7 @@ 1 2 - 406398 + 406885 @@ -32409,15 +32439,15 @@ typeid_bind - 47196 + 47476 expr - 47196 + 47476 type_id - 15709 + 15802 @@ -32431,7 +32461,7 @@ 1 2 - 47196 + 47476 @@ -32447,17 +32477,17 @@ 1 2 - 2920 + 2937 2 3 - 12386 + 12459 3 328 - 402 + 405 @@ -32467,15 +32497,15 @@ uuidof_bind - 26214 + 26289 expr - 26214 + 26289 type_id - 26214 + 26289 @@ -32489,7 +32519,7 @@ 1 2 - 26214 + 26289 @@ -32505,7 +32535,7 @@ 1 2 - 26214 + 26289 @@ -32515,15 +32545,15 @@ sizeof_bind - 242078 + 241939 expr - 242078 + 241939 type_id - 11156 + 11150 @@ -32537,7 +32567,7 @@ 1 2 - 242078 + 241939 @@ -32553,17 +32583,17 @@ 1 2 - 3859 + 3856 2 3 - 2753 + 2751 3 4 - 1019 + 1018 4 @@ -32578,17 +32608,17 @@ 6 7 - 1117 + 1116 7 42 - 852 + 851 42 6061 - 167 + 166 @@ -32646,11 +32676,11 @@ lambdas - 18970 + 19024 expr - 18970 + 19024 default_capture @@ -32676,7 +32706,7 @@ 1 2 - 18970 + 19024 @@ -32692,7 +32722,7 @@ 1 2 - 18970 + 19024 @@ -32708,7 +32738,7 @@ 1 2 - 18970 + 19024 @@ -32892,15 +32922,15 @@ lambda_capture - 31810 + 31901 id - 31810 + 31901 lambda - 15424 + 15469 index @@ -32908,7 +32938,7 @@ field - 31810 + 31901 captured_by_reference @@ -32920,7 +32950,7 @@ location - 17888 + 17939 @@ -32934,7 +32964,7 @@ 1 2 - 31810 + 31901 @@ -32950,7 +32980,7 @@ 1 2 - 31810 + 31901 @@ -32966,7 +32996,7 @@ 1 2 - 31810 + 31901 @@ -32982,7 +33012,7 @@ 1 2 - 31810 + 31901 @@ -32998,7 +33028,7 @@ 1 2 - 31810 + 31901 @@ -33014,7 +33044,7 @@ 1 2 - 31810 + 31901 @@ -33030,27 +33060,27 @@ 1 2 - 8156 + 8179 2 3 - 3545 + 3555 3 4 - 1663 + 1668 4 6 - 1251 + 1255 6 18 - 807 + 809 @@ -33066,27 +33096,27 @@ 1 2 - 8156 + 8179 2 3 - 3545 + 3555 3 4 - 1663 + 1668 4 6 - 1251 + 1255 6 18 - 807 + 809 @@ -33102,27 +33132,27 @@ 1 2 - 8156 + 8179 2 3 - 3545 + 3555 3 4 - 1663 + 1668 4 6 - 1251 + 1255 6 18 - 807 + 809 @@ -33138,12 +33168,12 @@ 1 2 - 14189 + 14229 2 3 - 1235 + 1239 @@ -33159,7 +33189,7 @@ 1 2 - 15303 + 15347 2 @@ -33180,27 +33210,27 @@ 1 2 - 8746 + 8771 2 3 - 3698 + 3709 3 4 - 1397 + 1401 4 7 - 1284 + 1287 7 18 - 298 + 299 @@ -33509,7 +33539,7 @@ 2 3 - 104 + 105 @@ -33525,7 +33555,7 @@ 1 2 - 88 + 89 2 @@ -33642,7 +33672,7 @@ 1 2 - 31810 + 31901 @@ -33658,7 +33688,7 @@ 1 2 - 31810 + 31901 @@ -33674,7 +33704,7 @@ 1 2 - 31810 + 31901 @@ -33690,7 +33720,7 @@ 1 2 - 31810 + 31901 @@ -33706,7 +33736,7 @@ 1 2 - 31810 + 31901 @@ -33722,7 +33752,7 @@ 1 2 - 31810 + 31901 @@ -33980,17 +34010,17 @@ 1 2 - 15667 + 15712 2 6 - 1413 + 1417 6 68 - 807 + 809 @@ -34006,17 +34036,17 @@ 1 2 - 16240 + 16287 2 13 - 1445 + 1449 13 68 - 201 + 202 @@ -34032,12 +34062,12 @@ 1 2 - 17201 + 17250 2 8 - 686 + 688 @@ -34053,17 +34083,17 @@ 1 2 - 15667 + 15712 2 6 - 1413 + 1417 6 68 - 807 + 809 @@ -34079,7 +34109,7 @@ 1 2 - 17863 + 17915 2 @@ -34100,7 +34130,7 @@ 1 2 - 17888 + 17939 @@ -34110,11 +34140,11 @@ fold - 1261 + 1263 expr - 1261 + 1263 operator @@ -34136,7 +34166,7 @@ 1 2 - 1261 + 1263 @@ -34152,7 +34182,7 @@ 1 2 - 1261 + 1263 @@ -34236,11 +34266,11 @@ stmts - 6310367 + 6328636 id - 6310367 + 6328636 kind @@ -34248,7 +34278,7 @@ location - 2668742 + 2676389 @@ -34262,7 +34292,7 @@ 1 2 - 6310367 + 6328636 @@ -34278,7 +34308,7 @@ 1 2 - 6310367 + 6328636 @@ -34367,28 +34397,28 @@ 8 - 74923 - 74924 + 74926 + 74927 8 - 95366 - 95367 + 95367 + 95368 8 - 117878 - 117879 + 117880 + 117881 8 - 198406 - 198407 + 198412 + 198413 8 - 213672 - 213673 + 213683 + 213684 8 @@ -34516,22 +34546,22 @@ 1 2 - 2218981 + 2225153 2 3 - 177039 + 177732 3 11 - 202889 + 203471 11 1816 - 69832 + 70032 @@ -34547,12 +34577,12 @@ 1 2 - 2592497 + 2599926 2 10 - 76244 + 76462 @@ -34717,15 +34747,15 @@ if_then - 990500 + 989932 if_stmt - 990500 + 989932 then_id - 990500 + 989932 @@ -34739,7 +34769,7 @@ 1 2 - 990500 + 989932 @@ -34755,7 +34785,7 @@ 1 2 - 990500 + 989932 @@ -34765,15 +34795,15 @@ if_else - 434390 + 434910 if_stmt - 434390 + 434910 else_id - 434390 + 434910 @@ -34787,7 +34817,7 @@ 1 2 - 434390 + 434910 @@ -34803,7 +34833,7 @@ 1 2 - 434390 + 434910 @@ -34861,15 +34891,15 @@ constexpr_if_then - 103236 + 103259 constexpr_if_stmt - 103236 + 103259 then_id - 103236 + 103259 @@ -34883,7 +34913,7 @@ 1 2 - 103236 + 103259 @@ -34899,7 +34929,7 @@ 1 2 - 103236 + 103259 @@ -34909,15 +34939,15 @@ constexpr_if_else - 74021 + 74037 constexpr_if_stmt - 74021 + 74037 else_id - 74021 + 74037 @@ -34931,7 +34961,7 @@ 1 2 - 74021 + 74037 @@ -34947,7 +34977,7 @@ 1 2 - 74021 + 74037 @@ -35053,15 +35083,15 @@ while_body - 39659 + 39636 while_stmt - 39659 + 39636 body_id - 39659 + 39636 @@ -35075,7 +35105,7 @@ 1 2 - 39659 + 39636 @@ -35091,7 +35121,7 @@ 1 2 - 39659 + 39636 @@ -35101,15 +35131,15 @@ do_body - 232528 + 232395 do_stmt - 232528 + 232395 body_id - 232528 + 232395 @@ -35123,7 +35153,7 @@ 1 2 - 232528 + 232395 @@ -35139,7 +35169,7 @@ 1 2 - 232528 + 232395 @@ -35197,19 +35227,19 @@ switch_case - 830952 + 831947 switch_stmt - 409306 + 409797 index - 384 + 385 case_id - 830952 + 831947 @@ -35228,12 +35258,12 @@ 2 3 - 406441 + 406928 3 19 - 2844 + 2847 @@ -35254,12 +35284,12 @@ 2 3 - 406441 + 406928 3 19 - 2844 + 2847 @@ -35417,7 +35447,7 @@ 1 2 - 830952 + 831947 @@ -35433,7 +35463,7 @@ 1 2 - 830952 + 831947 @@ -35443,15 +35473,15 @@ switch_body - 409306 + 409797 switch_stmt - 409306 + 409797 body_id - 409306 + 409797 @@ -35465,7 +35495,7 @@ 1 2 - 409306 + 409797 @@ -35481,7 +35511,7 @@ 1 2 - 409306 + 409797 @@ -35491,15 +35521,15 @@ for_initialization - 73267 + 73225 for_stmt - 73267 + 73225 init_id - 73267 + 73225 @@ -35513,7 +35543,7 @@ 1 2 - 73267 + 73225 @@ -35529,7 +35559,7 @@ 1 2 - 73267 + 73225 @@ -35539,15 +35569,15 @@ for_condition - 76363 + 76319 for_stmt - 76363 + 76319 condition_id - 76363 + 76319 @@ -35561,7 +35591,7 @@ 1 2 - 76363 + 76319 @@ -35577,7 +35607,7 @@ 1 2 - 76363 + 76319 @@ -35587,15 +35617,15 @@ for_update - 73407 + 73365 for_stmt - 73407 + 73365 update_id - 73407 + 73365 @@ -35609,7 +35639,7 @@ 1 2 - 73407 + 73365 @@ -35625,7 +35655,7 @@ 1 2 - 73407 + 73365 @@ -35635,15 +35665,15 @@ for_body - 84413 + 84365 for_stmt - 84413 + 84365 body_id - 84413 + 84365 @@ -35657,7 +35687,7 @@ 1 2 - 84413 + 84365 @@ -35673,7 +35703,7 @@ 1 2 - 84413 + 84365 @@ -35683,19 +35713,19 @@ stmtparents - 5589515 + 5605702 id - 5589515 + 5605702 index - 15683 + 15728 parent - 2355552 + 2362374 @@ -35709,7 +35739,7 @@ 1 2 - 5589515 + 5605702 @@ -35725,7 +35755,7 @@ 1 2 - 5589515 + 5605702 @@ -35741,52 +35771,52 @@ 1 2 - 5152 + 5167 2 3 - 1284 + 1287 3 4 - 266 + 267 4 5 - 2010 + 2016 7 8 - 1308 + 1312 8 12 - 1017 + 1020 12 29 - 1380 + 1384 29 39 - 1179 + 1182 42 78 - 1187 + 1190 78 - 207977 - 896 + 207983 + 898 @@ -35802,52 +35832,52 @@ 1 2 - 5152 + 5167 2 3 - 1284 + 1287 3 4 - 266 + 267 4 5 - 2010 + 2016 7 8 - 1308 + 1312 8 12 - 1017 + 1020 12 29 - 1380 + 1384 29 39 - 1179 + 1182 42 78 - 1187 + 1190 78 - 207977 - 896 + 207983 + 898 @@ -35863,32 +35893,32 @@ 1 2 - 1338178 + 1342037 2 3 - 514505 + 516011 3 4 - 150687 + 151119 4 6 - 154814 + 155274 6 16 - 178500 + 179012 16 1943 - 18865 + 18919 @@ -35904,32 +35934,32 @@ 1 2 - 1338178 + 1342037 2 3 - 514505 + 516011 3 4 - 150687 + 151119 4 6 - 154814 + 155274 6 16 - 178500 + 179012 16 1943 - 18865 + 18919 @@ -35939,30 +35969,30 @@ ishandler - 42985 + 43492 block - 42985 + 43492 stmt_decl_bind - 724033 + 728504 stmt - 713534 + 688131 num - 72 + 125 decl - 724033 + 728435 @@ -35976,12 +36006,12 @@ 1 2 - 706121 + 665975 2 - 10 - 7413 + 32 + 22156 @@ -35997,12 +36027,12 @@ 1 2 - 706121 + 665975 2 - 10 - 7413 + 32 + 22156 @@ -36016,48 +36046,53 @@ 12 - 14 - 15 + 1 + 2 + 52 + + + 2 + 3 8 - 15 - 16 + 3 + 5 8 - 18 - 19 + 7 + 11 8 - 21 - 22 + 11 + 15 8 - 25 - 26 + 21 + 45 8 - 60 - 61 + 86 + 121 8 - 229 - 230 + 205 + 357 8 - 918 - 919 + 1067 + 2544 8 - 88354 - 88355 + 5483 + 170293 8 @@ -36072,48 +36107,53 @@ 12 - 14 - 15 + 1 + 2 + 52 + + + 2 + 3 8 - 15 - 16 + 3 + 5 8 - 18 - 19 + 7 + 11 8 - 21 - 22 + 11 + 15 8 - 25 - 26 + 21 + 45 8 - 60 - 61 + 86 + 121 8 - 229 - 230 + 205 + 357 8 - 918 - 919 + 1067 + 2544 8 - 88354 - 88355 + 5483 + 170276 8 @@ -36130,7 +36170,12 @@ 1 2 - 724033 + 728411 + + + 2 + 8 + 24 @@ -36146,7 +36191,7 @@ 1 2 - 724033 + 728435 @@ -36156,19 +36201,19 @@ stmt_decl_entry_bind - 724033 + 728504 stmt - 713534 + 688131 num - 72 + 125 decl_entry - 724033 + 728504 @@ -36182,12 +36227,12 @@ 1 2 - 706121 + 665975 2 - 10 - 7413 + 32 + 22156 @@ -36203,12 +36248,12 @@ 1 2 - 706121 + 665975 2 - 10 - 7413 + 32 + 22156 @@ -36222,48 +36267,53 @@ 12 - 14 - 15 + 1 + 2 + 52 + + + 2 + 3 8 - 15 - 16 + 3 + 5 8 - 18 - 19 + 7 + 11 8 - 21 - 22 + 11 + 15 8 - 25 - 26 + 21 + 45 8 - 60 - 61 + 86 + 121 8 - 229 - 230 + 205 + 357 8 - 918 - 919 + 1067 + 2544 8 - 88354 - 88355 + 5483 + 170293 8 @@ -36278,48 +36328,53 @@ 12 - 14 - 15 + 1 + 2 + 52 + + + 2 + 3 8 - 15 - 16 + 3 + 5 8 - 18 - 19 + 7 + 11 8 - 21 - 22 + 11 + 15 8 - 25 - 26 + 21 + 45 8 - 60 - 61 + 86 + 121 8 - 229 - 230 + 205 + 357 8 - 918 - 919 + 1067 + 2544 8 - 88354 - 88355 + 5483 + 170293 8 @@ -36336,7 +36391,7 @@ 1 2 - 724033 + 728504 @@ -36352,7 +36407,7 @@ 1 2 - 724033 + 728504 @@ -36362,15 +36417,15 @@ blockscope - 1614225 + 1625753 block - 1614225 + 1625753 enclosing - 1400877 + 1404746 @@ -36384,7 +36439,7 @@ 1 2 - 1614225 + 1625753 @@ -36400,17 +36455,17 @@ 1 2 - 1270635 + 1267599 2 4 - 115144 + 122045 4 29 - 15098 + 15102 @@ -36420,19 +36475,19 @@ jumpinfo - 348275 + 348076 id - 348275 + 348076 str - 28944 + 28928 target - 72696 + 72655 @@ -36446,7 +36501,7 @@ 1 2 - 348275 + 348076 @@ -36462,7 +36517,7 @@ 1 2 - 348275 + 348076 @@ -36478,32 +36533,32 @@ 2 3 - 13595 + 13587 3 4 - 6058 + 6054 4 5 - 2013 + 2012 5 6 - 1888 + 1887 6 10 - 2197 + 2196 10 25 - 2189 + 2188 25 @@ -36524,17 +36579,17 @@ 1 2 - 23187 + 23174 2 3 - 3626 + 3624 3 3321 - 2130 + 2129 @@ -36555,27 +36610,27 @@ 2 3 - 36206 + 36185 3 4 - 17631 + 17620 4 5 - 7378 + 7374 5 8 - 6417 + 6413 8 2124 - 5030 + 5027 @@ -36591,7 +36646,7 @@ 1 2 - 72696 + 72655 @@ -36601,11 +36656,11 @@ preprocdirects - 5321789 + 5322959 id - 5321789 + 5322959 kind @@ -36613,7 +36668,7 @@ location - 5318720 + 5319889 @@ -36627,7 +36682,7 @@ 1 2 - 5321789 + 5322959 @@ -36643,7 +36698,7 @@ 1 2 - 5321789 + 5322959 @@ -36791,7 +36846,7 @@ 1 2 - 5318597 + 5319766 26 @@ -36812,7 +36867,7 @@ 1 2 - 5318720 + 5319889 @@ -36822,15 +36877,15 @@ preprocpair - 1122961 + 1123207 begin - 874750 + 874943 elseelifend - 1122961 + 1123207 @@ -36844,17 +36899,17 @@ 1 2 - 639184 + 639324 2 3 - 226728 + 226777 3 9 - 8838 + 8840 @@ -36870,7 +36925,7 @@ 1 2 - 1122961 + 1123207 @@ -36880,41 +36935,41 @@ preproctrue - 432219 + 432314 branch - 432219 + 432314 preprocfalse - 280740 + 280801 branch - 280740 + 280801 preproctext - 4282669 + 4283611 id - 4282669 + 4283611 head - 2907815 + 2908455 body - 1656453 + 1656817 @@ -36928,7 +36983,7 @@ 1 2 - 4282669 + 4283611 @@ -36944,7 +36999,7 @@ 1 2 - 4282669 + 4283611 @@ -36960,12 +37015,12 @@ 1 2 - 2712390 + 2712986 2 798 - 195425 + 195468 @@ -36981,12 +37036,12 @@ 1 2 - 2827902 + 2828524 2 5 - 79913 + 79930 @@ -37002,17 +37057,17 @@ 1 2 - 1510620 + 1510952 2 10 - 125209 + 125237 10 13605 - 20622 + 20627 @@ -37028,17 +37083,17 @@ 1 2 - 1514794 + 1515127 2 12 - 124841 + 124869 12 3246 - 16817 + 16821 @@ -37048,15 +37103,15 @@ includes - 316459 + 322579 id - 316459 + 322579 included - 58294 + 59421 @@ -37070,7 +37125,7 @@ 1 2 - 316459 + 322579 @@ -37086,37 +37141,37 @@ 1 2 - 28848 + 29406 2 3 - 9378 + 9559 3 4 - 4919 + 5015 4 6 - 5318 + 5421 6 11 - 4489 + 4576 11 47 - 4374 + 4459 47 793 - 965 + 983 @@ -37174,15 +37229,15 @@ link_targets - 817 + 816 id - 817 + 816 binary - 817 + 816 @@ -37196,7 +37251,7 @@ 1 2 - 817 + 816 @@ -37212,7 +37267,7 @@ 1 2 - 817 + 816 @@ -37222,15 +37277,15 @@ link_parent - 30993807 + 31164351 element - 3938571 + 3960481 link_target - 335 + 337 @@ -37244,17 +37299,17 @@ 1 2 - 537390 + 540607 2 9 - 27022 + 27182 9 10 - 3374158 + 3392691 @@ -37273,48 +37328,48 @@ 33 - 100775 - 100776 + 100732 + 100733 33 - 100895 - 100896 + 100852 + 100853 33 - 100953 - 100954 + 100910 + 100911 33 - 100974 - 100975 + 100931 + 100932 33 - 100996 - 100997 + 100953 + 100954 33 - 101038 - 101039 + 100995 + 100996 33 - 103041 - 103042 + 102998 + 102999 33 - 106539 - 106540 + 106496 + 106497 33 - 108099 - 108100 + 108057 + 108058 33