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