diff --git a/cpp/downgrades/abfce5c170f93e281948f7689ece373464fdaf87/expr_reuse.ql b/cpp/downgrades/abfce5c170f93e281948f7689ece373464fdaf87/expr_reuse.ql
new file mode 100644
index 00000000000..201aa17cafd
--- /dev/null
+++ b/cpp/downgrades/abfce5c170f93e281948f7689ece373464fdaf87/expr_reuse.ql
@@ -0,0 +1,7 @@
+class Expr extends @expr {
+ string toString() { none() }
+}
+
+from Expr reuse, Expr original
+where expr_reuse(reuse, original, _)
+select reuse, original
diff --git a/cpp/downgrades/abfce5c170f93e281948f7689ece373464fdaf87/expr_types.ql b/cpp/downgrades/abfce5c170f93e281948f7689ece373464fdaf87/expr_types.ql
new file mode 100644
index 00000000000..0dc918e8d71
--- /dev/null
+++ b/cpp/downgrades/abfce5c170f93e281948f7689ece373464fdaf87/expr_types.ql
@@ -0,0 +1,22 @@
+class Expr extends @expr {
+ string toString() { none() }
+}
+
+class Type extends @type {
+ string toString() { none() }
+}
+
+predicate existingType(Expr expr, Type type, int value_category) {
+ expr_types(expr, type, value_category)
+}
+
+predicate reuseType(Expr reuse, Type type, int value_category) {
+ exists(Expr original |
+ expr_reuse(reuse, original, value_category) and
+ expr_types(original, type, _)
+ )
+}
+
+from Expr expr, Type type, int value_category
+where existingType(expr, type, value_category) or reuseType(expr, type, value_category)
+select expr, type, value_category
diff --git a/cpp/downgrades/abfce5c170f93e281948f7689ece373464fdaf87/old.dbscheme b/cpp/downgrades/abfce5c170f93e281948f7689ece373464fdaf87/old.dbscheme
new file mode 100644
index 00000000000..abfce5c170f
--- /dev/null
+++ b/cpp/downgrades/abfce5c170f93e281948f7689ece373464fdaf87/old.dbscheme
@@ -0,0 +1,2251 @@
+
+/**
+ * An invocation of the compiler. Note that more than one file may be
+ * compiled per invocation. For example, this command compiles three
+ * source files:
+ *
+ * gcc -c f1.c f2.c f3.c
+ *
+ * The `id` simply identifies the invocation, while `cwd` is the working
+ * directory from which the compiler was invoked.
+ */
+compilations(
+ /**
+ * An invocation of the compiler. Note that more than one file may
+ * be compiled per invocation. For example, this command compiles
+ * three source files:
+ *
+ * gcc -c f1.c f2.c f3.c
+ */
+ unique int id : @compilation,
+ string cwd : string ref
+);
+
+/**
+ * The arguments that were passed to the extractor for a compiler
+ * invocation. If `id` is for the compiler invocation
+ *
+ * gcc -c f1.c f2.c f3.c
+ *
+ * then typically there will be rows for
+ *
+ * num | arg
+ * --- | ---
+ * 0 | *path to extractor*
+ * 1 | `--mimic`
+ * 2 | `/usr/bin/gcc`
+ * 3 | `-c`
+ * 4 | f1.c
+ * 5 | f2.c
+ * 6 | f3.c
+ */
+#keyset[id, num]
+compilation_args(
+ int id : @compilation ref,
+ int num : int ref,
+ string arg : string ref
+);
+
+/**
+ * The source files that are compiled by a compiler invocation.
+ * If `id` is for the compiler invocation
+ *
+ * gcc -c f1.c f2.c f3.c
+ *
+ * then there will be rows for
+ *
+ * num | arg
+ * --- | ---
+ * 0 | f1.c
+ * 1 | f2.c
+ * 2 | f3.c
+ *
+ * Note that even if those files `#include` headers, those headers
+ * do not appear as rows.
+ */
+#keyset[id, num]
+compilation_compiling_files(
+ int id : @compilation ref,
+ int num : int ref,
+ int file : @file ref
+);
+
+/**
+ * The time taken by the extractor for a compiler invocation.
+ *
+ * For each file `num`, there will be rows for
+ *
+ * kind | seconds
+ * ---- | ---
+ * 1 | CPU seconds used by the extractor frontend
+ * 2 | Elapsed seconds during the extractor frontend
+ * 3 | CPU seconds used by the extractor backend
+ * 4 | Elapsed seconds during the extractor backend
+ */
+#keyset[id, num, kind]
+compilation_time(
+ int id : @compilation ref,
+ int num : int ref,
+ /* kind:
+ 1 = frontend_cpu_seconds
+ 2 = frontend_elapsed_seconds
+ 3 = extractor_cpu_seconds
+ 4 = extractor_elapsed_seconds
+ */
+ int kind : int ref,
+ float seconds : float ref
+);
+
+/**
+ * An error or warning generated by the extractor.
+ * The diagnostic message `diagnostic` was generated during compiler
+ * invocation `compilation`, and is the `file_number_diagnostic_number`th
+ * message generated while extracting the `file_number`th file of that
+ * invocation.
+ */
+#keyset[compilation, file_number, file_number_diagnostic_number]
+diagnostic_for(
+ int diagnostic : @diagnostic ref,
+ int compilation : @compilation ref,
+ int file_number : int ref,
+ int file_number_diagnostic_number : int ref
+);
+
+/**
+ * If extraction was successful, then `cpu_seconds` and
+ * `elapsed_seconds` are the CPU time and elapsed time (respectively)
+ * that extraction took for compiler invocation `id`.
+ */
+compilation_finished(
+ unique int id : @compilation ref,
+ float cpu_seconds : float ref,
+ float elapsed_seconds : float ref
+);
+
+
+/**
+ * External data, loaded from CSV files during snapshot creation. See
+ * [Tutorial: Incorporating external data](https://help.semmle.com/wiki/display/SD/Tutorial%3A+Incorporating+external+data)
+ * for more information.
+ */
+externalData(
+ int id : @externalDataElement,
+ string path : string ref,
+ int column: int ref,
+ string value : string ref
+);
+
+/**
+ * The source location of the snapshot.
+ */
+sourceLocationPrefix(string prefix : string ref);
+
+/**
+ * Information about packages that provide code used during compilation.
+ * The `id` is just a unique identifier.
+ * The `namespace` is typically the name of the package manager that
+ * provided the package (e.g. "dpkg" or "yum").
+ * The `package_name` is the name of the package, and `version` is its
+ * version (as a string).
+ */
+external_packages(
+ unique int id: @external_package,
+ string namespace : string ref,
+ string package_name : string ref,
+ string version : string ref
+);
+
+/**
+ * Holds if File `fileid` was provided by package `package`.
+ */
+header_to_external_package(
+ int fileid : @file ref,
+ int package : @external_package ref
+);
+
+/*
+ * Version history
+ */
+
+svnentries(
+ unique int id : @svnentry,
+ string revision : string ref,
+ string author : string ref,
+ date revisionDate : date ref,
+ int changeSize : int ref
+)
+
+svnaffectedfiles(
+ int id : @svnentry ref,
+ int file : @file ref,
+ string action : string ref
+)
+
+svnentrymsg(
+ unique int id : @svnentry ref,
+ string message : string ref
+)
+
+svnchurn(
+ int commit : @svnentry ref,
+ int file : @file ref,
+ int addedLines : int ref,
+ int deletedLines : int ref
+)
+
+/*
+ * C++ dbscheme
+ */
+
+extractor_version(
+ string codeql_version: string ref,
+ string frontend_version: string ref
+)
+
+@location = @location_stmt | @location_expr | @location_default ;
+
+/**
+ * The location of an element that is not an expression or a statement.
+ * The location spans column `startcolumn` of line `startline` to
+ * column `endcolumn` of line `endline` in file `file`.
+ * For more information, see
+ * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/).
+ */
+locations_default(
+ /** The location of an element that is not an expression or a statement. */
+ unique int id: @location_default,
+ int container: @container ref,
+ int startLine: int ref,
+ int startColumn: int ref,
+ int endLine: int ref,
+ int endColumn: int ref
+);
+
+/**
+ * The location of a statement.
+ * The location spans column `startcolumn` of line `startline` to
+ * column `endcolumn` of line `endline` in file `file`.
+ * For more information, see
+ * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/).
+ */
+locations_stmt(
+ /** The location of a statement. */
+ unique int id: @location_stmt,
+ int container: @container ref,
+ int startLine: int ref,
+ int startColumn: int ref,
+ int endLine: int ref,
+ int endColumn: int ref
+);
+
+/**
+ * The location of an expression.
+ * The location spans column `startcolumn` of line `startline` to
+ * column `endcolumn` of line `endline` in file `file`.
+ * For more information, see
+ * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/).
+ */
+locations_expr(
+ /** The location of an expression. */
+ unique int id: @location_expr,
+ int container: @container ref,
+ int startLine: int ref,
+ int startColumn: int ref,
+ int endLine: int ref,
+ int endColumn: int ref
+);
+
+/** An element for which line-count information is available. */
+@sourceline = @file | @function | @variable | @enumconstant | @xmllocatable;
+
+numlines(
+ int element_id: @sourceline ref,
+ int num_lines: int ref,
+ int num_code: int ref,
+ int num_comment: int ref
+);
+
+diagnostics(
+ unique int id: @diagnostic,
+ int severity: int ref,
+ string error_tag: string ref,
+ string error_message: string ref,
+ string full_error_message: string ref,
+ int location: @location_default ref
+);
+
+files(
+ unique int id: @file,
+ string name: string ref
+);
+
+folders(
+ unique int id: @folder,
+ string name: string ref
+);
+
+@container = @folder | @file
+
+containerparent(
+ int parent: @container ref,
+ unique int child: @container ref
+);
+
+fileannotations(
+ int id: @file ref,
+ int kind: int ref,
+ string name: string ref,
+ string value: string ref
+);
+
+inmacroexpansion(
+ int id: @element ref,
+ int inv: @macroinvocation ref
+);
+
+affectedbymacroexpansion(
+ int id: @element ref,
+ int inv: @macroinvocation ref
+);
+
+case @macroinvocation.kind of
+ 1 = @macro_expansion
+| 2 = @other_macro_reference
+;
+
+macroinvocations(
+ unique int id: @macroinvocation,
+ int macro_id: @ppd_define ref,
+ int location: @location_default ref,
+ int kind: int ref
+);
+
+macroparent(
+ unique int id: @macroinvocation ref,
+ int parent_id: @macroinvocation ref
+);
+
+// a macroinvocation may be part of another location
+// the way to find a constant expression that uses a macro
+// is thus to find a constant expression that has a location
+// to which a macro invocation is bound
+macrolocationbind(
+ int id: @macroinvocation ref,
+ int location: @location ref
+);
+
+#keyset[invocation, argument_index]
+macro_argument_unexpanded(
+ int invocation: @macroinvocation ref,
+ int argument_index: int ref,
+ string text: string ref
+);
+
+#keyset[invocation, argument_index]
+macro_argument_expanded(
+ int invocation: @macroinvocation ref,
+ int argument_index: int ref,
+ string text: string ref
+);
+
+/*
+case @function.kind of
+ 1 = @normal_function
+| 2 = @constructor
+| 3 = @destructor
+| 4 = @conversion_function
+| 5 = @operator
+| 6 = @builtin_function // GCC built-in functions, e.g. __builtin___memcpy_chk
+| 7 = @user_defined_literal
+| 8 = @deduction_guide
+;
+*/
+
+functions(
+ unique int id: @function,
+ string name: string ref,
+ int kind: int ref
+);
+
+function_entry_point(
+ int id: @function ref,
+ unique int entry_point: @stmt ref
+);
+
+function_return_type(
+ int id: @function ref,
+ int return_type: @type ref
+);
+
+/**
+ * If `function` is a coroutine, then this gives the `std::experimental::resumable_traits`
+ * instance associated with it, and the variables representing the `handle` and `promise`
+ * for it.
+ */
+coroutine(
+ unique int function: @function ref,
+ int traits: @type ref,
+ int handle: @variable ref,
+ int promise: @variable 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)
+
+member_function_this_type(
+ unique int id: @function ref,
+ int this_type: @type ref
+);
+
+#keyset[id, type_id]
+fun_decls(
+ int id: @fun_decl,
+ int function: @function ref,
+ int type_id: @type ref,
+ string name: string ref,
+ int location: @location_default ref
+);
+fun_def(unique int id: @fun_decl ref);
+fun_specialized(unique int id: @fun_decl ref);
+fun_implicit(unique int id: @fun_decl ref);
+fun_decl_specifiers(
+ int id: @fun_decl ref,
+ string name: string ref
+)
+#keyset[fun_decl, index]
+fun_decl_throws(
+ int fun_decl: @fun_decl ref,
+ int index: int ref,
+ int type_id: @type ref
+);
+/* an empty throw specification is different from none */
+fun_decl_empty_throws(unique int fun_decl: @fun_decl ref);
+fun_decl_noexcept(
+ int fun_decl: @fun_decl ref,
+ int constant: @expr ref
+);
+fun_decl_empty_noexcept(int fun_decl: @fun_decl ref);
+fun_decl_typedef_type(
+ unique int fun_decl: @fun_decl ref,
+ int typedeftype_id: @usertype ref
+);
+
+param_decl_bind(
+ unique int id: @var_decl ref,
+ int index: int ref,
+ int fun_decl: @fun_decl ref
+);
+
+#keyset[id, type_id]
+var_decls(
+ int id: @var_decl,
+ int variable: @variable ref,
+ int type_id: @type ref,
+ string name: string ref,
+ int location: @location_default ref
+);
+var_def(unique int id: @var_decl ref);
+var_decl_specifiers(
+ int id: @var_decl ref,
+ string name: string ref
+)
+is_structured_binding(unique int id: @variable ref);
+
+type_decls(
+ unique int id: @type_decl,
+ int type_id: @type ref,
+ int location: @location_default ref
+);
+type_def(unique int id: @type_decl ref);
+type_decl_top(
+ unique int type_decl: @type_decl ref
+);
+
+namespace_decls(
+ unique int id: @namespace_decl,
+ int namespace_id: @namespace ref,
+ int location: @location_default ref,
+ int bodylocation: @location_default ref
+);
+
+usings(
+ unique int id: @using,
+ int element_id: @element ref,
+ int location: @location_default ref
+);
+
+/** The element which contains the `using` declaration. */
+using_container(
+ int parent: @element ref,
+ int child: @using ref
+);
+
+static_asserts(
+ unique int id: @static_assert,
+ int condition : @expr ref,
+ string message : string ref,
+ int location: @location_default ref,
+ int enclosing : @element ref
+);
+
+// each function has an ordered list of parameters
+#keyset[id, type_id]
+#keyset[function, index, type_id]
+params(
+ int id: @parameter,
+ int function: @functionorblock ref,
+ int index: int ref,
+ int type_id: @type ref
+);
+
+overrides(
+ int new: @function ref,
+ int old: @function ref
+);
+
+#keyset[id, type_id]
+membervariables(
+ int id: @membervariable,
+ int type_id: @type ref,
+ string name: string ref
+);
+
+#keyset[id, type_id]
+globalvariables(
+ int id: @globalvariable,
+ int type_id: @type ref,
+ string name: string ref
+);
+
+#keyset[id, type_id]
+localvariables(
+ int id: @localvariable,
+ int type_id: @type ref,
+ string name: string ref
+);
+
+autoderivation(
+ unique int var: @variable ref,
+ int derivation_type: @type ref
+);
+
+orphaned_variables(
+ int var: @localvariable ref,
+ int function: @function ref
+)
+
+enumconstants(
+ unique int id: @enumconstant,
+ int parent: @usertype ref,
+ int index: int ref,
+ int type_id: @type ref,
+ string name: string ref,
+ int location: @location_default ref
+);
+
+@variable = @localscopevariable | @globalvariable | @membervariable;
+
+@localscopevariable = @localvariable | @parameter;
+
+/**
+ * Built-in types are the fundamental types, e.g., integral, floating, and void.
+ */
+case @builtintype.kind of
+ 1 = @errortype
+| 2 = @unknowntype
+| 3 = @void
+| 4 = @boolean
+| 5 = @char
+| 6 = @unsigned_char
+| 7 = @signed_char
+| 8 = @short
+| 9 = @unsigned_short
+| 10 = @signed_short
+| 11 = @int
+| 12 = @unsigned_int
+| 13 = @signed_int
+| 14 = @long
+| 15 = @unsigned_long
+| 16 = @signed_long
+| 17 = @long_long
+| 18 = @unsigned_long_long
+| 19 = @signed_long_long
+// ... 20 Microsoft-specific __int8
+// ... 21 Microsoft-specific __int16
+// ... 22 Microsoft-specific __int32
+// ... 23 Microsoft-specific __int64
+| 24 = @float
+| 25 = @double
+| 26 = @long_double
+| 27 = @complex_float // C99-specific _Complex float
+| 28 = @complex_double // C99-specific _Complex double
+| 29 = @complex_long_double // C99-specific _Complex long double
+| 30 = @imaginary_float // C99-specific _Imaginary float
+| 31 = @imaginary_double // C99-specific _Imaginary double
+| 32 = @imaginary_long_double // C99-specific _Imaginary long double
+| 33 = @wchar_t // Microsoft-specific
+| 34 = @decltype_nullptr // C++11
+| 35 = @int128 // __int128
+| 36 = @unsigned_int128 // unsigned __int128
+| 37 = @signed_int128 // signed __int128
+| 38 = @float128 // __float128
+| 39 = @complex_float128 // _Complex __float128
+| 40 = @decimal32 // _Decimal32
+| 41 = @decimal64 // _Decimal64
+| 42 = @decimal128 // _Decimal128
+| 43 = @char16_t
+| 44 = @char32_t
+| 45 = @std_float32 // _Float32
+| 46 = @float32x // _Float32x
+| 47 = @std_float64 // _Float64
+| 48 = @float64x // _Float64x
+| 49 = @std_float128 // _Float128
+// ... 50 _Float128x
+| 51 = @char8_t
+| 52 = @float16 // _Float16
+| 53 = @complex_float16 // _Complex _Float16
+| 54 = @fp16 // __fp16
+| 55 = @std_bfloat16 // __bf16
+| 56 = @std_float16 // std::float16_t
+| 57 = @complex_std_float32 // _Complex _Float32
+| 58 = @complex_float32x // _Complex _Float32x
+| 59 = @complex_std_float64 // _Complex _Float64
+| 60 = @complex_float64x // _Complex _Float64x
+| 61 = @complex_std_float128 // _Complex _Float128
+;
+
+builtintypes(
+ unique int id: @builtintype,
+ string name: string ref,
+ int kind: int ref,
+ int size: int ref,
+ int sign: int ref,
+ int alignment: int ref
+);
+
+/**
+ * Derived types are types that are directly derived from existing types and
+ * point to, refer to, transform type data to return a new type.
+ */
+case @derivedtype.kind of
+ 1 = @pointer
+| 2 = @reference
+| 3 = @type_with_specifiers
+| 4 = @array
+| 5 = @gnu_vector
+| 6 = @routineptr
+| 7 = @routinereference
+| 8 = @rvalue_reference // C++11
+// ... 9 type_conforming_to_protocols deprecated
+| 10 = @block
+;
+
+derivedtypes(
+ unique int id: @derivedtype,
+ string name: string ref,
+ int kind: int ref,
+ int type_id: @type ref
+);
+
+pointerishsize(unique int id: @derivedtype ref,
+ int size: int ref,
+ int alignment: int ref);
+
+arraysizes(
+ unique int id: @derivedtype ref,
+ int num_elements: int ref,
+ int bytesize: int ref,
+ int alignment: int ref
+);
+
+typedefbase(
+ unique int id: @usertype ref,
+ int type_id: @type ref
+);
+
+/**
+ * An instance of the C++11 `decltype` operator. For example:
+ * ```
+ * int a;
+ * decltype(1+a) b;
+ * ```
+ * Here `expr` is `1+a`.
+ *
+ * Sometimes an additional pair of parentheses around the expression
+ * would change the semantics of this decltype, e.g.
+ * ```
+ * struct A { double x; };
+ * const A* a = new A();
+ * decltype( a->x ); // type is double
+ * decltype((a->x)); // type is const double&
+ * ```
+ * (Please consult the C++11 standard for more details).
+ * `parentheses_would_change_meaning` is `true` iff that is the case.
+ */
+#keyset[id, expr]
+decltypes(
+ int id: @decltype,
+ int expr: @expr ref,
+ int base_type: @type ref,
+ boolean parentheses_would_change_meaning: boolean ref
+);
+
+/*
+case @usertype.kind of
+ 1 = @struct
+| 2 = @class
+| 3 = @union
+| 4 = @enum
+| 5 = @typedef // classic C: typedef typedef type name
+| 6 = @template
+| 7 = @template_parameter
+| 8 = @template_template_parameter
+| 9 = @proxy_class // a proxy class associated with a template parameter
+// ... 10 objc_class deprecated
+// ... 11 objc_protocol deprecated
+// ... 12 objc_category deprecated
+| 13 = @scoped_enum
+| 14 = @using_alias // a using name = type style typedef
+;
+*/
+
+usertypes(
+ unique int id: @usertype,
+ string name: string ref,
+ int kind: int ref
+);
+
+usertypesize(
+ unique int id: @usertype ref,
+ int size: int ref,
+ int alignment: int ref
+);
+
+usertype_final(unique int id: @usertype ref);
+
+usertype_uuid(
+ unique int id: @usertype ref,
+ string uuid: string ref
+);
+
+mangled_name(
+ unique int id: @declaration ref,
+ int mangled_name : @mangledname,
+ boolean is_complete: boolean ref
+);
+
+is_pod_class(unique int id: @usertype ref);
+is_standard_layout_class(unique int id: @usertype ref);
+
+is_complete(unique int id: @usertype ref);
+
+is_class_template(unique int id: @usertype ref);
+class_instantiation(
+ int to: @usertype ref,
+ int from: @usertype ref
+);
+class_template_argument(
+ int type_id: @usertype ref,
+ int index: int ref,
+ int arg_type: @type ref
+);
+class_template_argument_value(
+ int type_id: @usertype ref,
+ int index: int ref,
+ int arg_value: @expr ref
+);
+
+is_proxy_class_for(
+ unique int id: @usertype ref,
+ unique int templ_param_id: @usertype ref
+);
+
+type_mentions(
+ unique int id: @type_mention,
+ int type_id: @type ref,
+ int location: @location ref,
+ // a_symbol_reference_kind from the frontend.
+ int kind: int ref
+);
+
+is_function_template(unique int id: @function ref);
+function_instantiation(
+ unique int to: @function ref,
+ int from: @function ref
+);
+function_template_argument(
+ int function_id: @function ref,
+ int index: int ref,
+ int arg_type: @type ref
+);
+function_template_argument_value(
+ int function_id: @function ref,
+ int index: int ref,
+ int arg_value: @expr ref
+);
+
+is_variable_template(unique int id: @variable ref);
+variable_instantiation(
+ unique int to: @variable ref,
+ int from: @variable ref
+);
+variable_template_argument(
+ int variable_id: @variable ref,
+ int index: int ref,
+ int arg_type: @type ref
+);
+variable_template_argument_value(
+ int variable_id: @variable ref,
+ int index: int ref,
+ int arg_value: @expr ref
+);
+
+/*
+ Fixed point types
+ precision(1) = short, precision(2) = default, precision(3) = long
+ is_unsigned(1) = unsigned is_unsigned(2) = signed
+ is_fract_type(1) = declared with _Fract
+ saturating(1) = declared with _Sat
+*/
+/* TODO
+fixedpointtypes(
+ unique int id: @fixedpointtype,
+ int precision: int ref,
+ int is_unsigned: int ref,
+ int is_fract_type: int ref,
+ int saturating: int 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
+);
+
+attributes(
+ unique int id: @attribute,
+ int kind: int ref,
+ string name: string ref,
+ string name_space: string ref,
+ int location: @location_default ref
+);
+
+case @attribute.kind of
+ 0 = @gnuattribute
+| 1 = @stdattribute
+| 2 = @declspec
+| 3 = @msattribute
+| 4 = @alignas
+// ... 5 @objc_propertyattribute deprecated
+;
+
+attribute_args(
+ unique int id: @attribute_arg,
+ int kind: int ref,
+ int attribute: @attribute ref,
+ int index: int ref,
+ int location: @location_default ref
+);
+
+case @attribute_arg.kind of
+ 0 = @attribute_arg_empty
+| 1 = @attribute_arg_token
+| 2 = @attribute_arg_constant
+| 3 = @attribute_arg_type
+| 4 = @attribute_arg_constant_expr
+| 5 = @attribute_arg_expr
+;
+
+attribute_arg_value(
+ unique int arg: @attribute_arg ref,
+ string value: string ref
+);
+attribute_arg_type(
+ unique int arg: @attribute_arg ref,
+ int type_id: @type ref
+);
+attribute_arg_constant(
+ unique int arg: @attribute_arg ref,
+ int constant: @expr ref
+)
+attribute_arg_expr(
+ unique int arg: @attribute_arg ref,
+ int expr: @expr ref
+)
+attribute_arg_name(
+ unique int arg: @attribute_arg ref,
+ string name: string ref
+);
+
+typeattributes(
+ int type_id: @type ref,
+ int spec_id: @attribute ref
+);
+
+funcattributes(
+ int func_id: @function ref,
+ int spec_id: @attribute ref
+);
+
+varattributes(
+ int var_id: @accessible ref,
+ int spec_id: @attribute ref
+);
+
+stmtattributes(
+ int stmt_id: @stmt ref,
+ int spec_id: @attribute ref
+);
+
+@type = @builtintype
+ | @derivedtype
+ | @usertype
+ /* TODO | @fixedpointtype */
+ | @routinetype
+ | @ptrtomember
+ | @decltype;
+
+unspecifiedtype(
+ unique int type_id: @type ref,
+ int unspecified_type_id: @type ref
+);
+
+member(
+ int parent: @type ref,
+ int index: int ref,
+ int child: @member ref
+);
+
+@enclosingfunction_child = @usertype | @variable | @namespace
+
+enclosingfunction(
+ unique int child: @enclosingfunction_child ref,
+ int parent: @function ref
+);
+
+derivations(
+ unique int derivation: @derivation,
+ int sub: @type ref,
+ int index: int ref,
+ int super: @type ref,
+ int location: @location_default ref
+);
+
+derspecifiers(
+ int der_id: @derivation ref,
+ int spec_id: @specifier ref
+);
+
+/**
+ * Contains the byte offset of the base class subobject within the derived
+ * class. Only holds for non-virtual base classes, but see table
+ * `virtual_base_offsets` for offsets of virtual base class subobjects.
+ */
+direct_base_offsets(
+ unique int der_id: @derivation ref,
+ int offset: int ref
+);
+
+/**
+ * Contains the byte offset of the virtual base class subobject for class
+ * `super` within a most-derived object of class `sub`. `super` can be either a
+ * direct or indirect base class.
+ */
+#keyset[sub, super]
+virtual_base_offsets(
+ int sub: @usertype ref,
+ int super: @usertype ref,
+ int offset: int ref
+);
+
+frienddecls(
+ unique int id: @frienddecl,
+ int type_id: @type ref,
+ int decl_id: @declaration ref,
+ int location: @location_default ref
+);
+
+@declaredtype = @usertype ;
+
+@declaration = @function
+ | @declaredtype
+ | @variable
+ | @enumconstant
+ | @frienddecl;
+
+@member = @membervariable
+ | @function
+ | @declaredtype
+ | @enumconstant;
+
+@locatable = @diagnostic
+ | @declaration
+ | @ppd_include
+ | @ppd_define
+ | @macroinvocation
+ /*| @funcall*/
+ | @xmllocatable
+ | @attribute
+ | @attribute_arg;
+
+@namedscope = @namespace | @usertype;
+
+@element = @locatable
+ | @file
+ | @folder
+ | @specifier
+ | @type
+ | @expr
+ | @namespace
+ | @initialiser
+ | @stmt
+ | @derivation
+ | @comment
+ | @preprocdirect
+ | @fun_decl
+ | @var_decl
+ | @type_decl
+ | @namespace_decl
+ | @using
+ | @namequalifier
+ | @specialnamequalifyingelement
+ | @static_assert
+ | @type_mention
+ | @lambdacapture;
+
+@exprparent = @element;
+
+comments(
+ unique int id: @comment,
+ string contents: string ref,
+ int location: @location_default ref
+);
+
+commentbinding(
+ int id: @comment ref,
+ int element: @element ref
+);
+
+exprconv(
+ int converted: @expr ref,
+ unique int conversion: @expr ref
+);
+
+compgenerated(unique int id: @element ref);
+
+/**
+ * `destructor_call` destructs the `i`'th entity that should be
+ * destructed following `element`. Note that entities should be
+ * destructed in reverse construction order, so for a given `element`
+ * these should be called from highest to lowest `i`.
+ */
+#keyset[element, destructor_call]
+#keyset[element, i]
+synthetic_destructor_call(
+ int element: @element ref,
+ int i: int ref,
+ int destructor_call: @routineexpr ref
+);
+
+namespaces(
+ unique int id: @namespace,
+ string name: string ref
+);
+
+namespace_inline(
+ unique int id: @namespace ref
+);
+
+namespacembrs(
+ int parentid: @namespace ref,
+ unique int memberid: @namespacembr ref
+);
+
+@namespacembr = @declaration | @namespace;
+
+exprparents(
+ int expr_id: @expr ref,
+ int child_index: int ref,
+ int parent_id: @exprparent ref
+);
+
+expr_isload(unique int expr_id: @expr ref);
+
+@cast = @c_style_cast
+ | @const_cast
+ | @dynamic_cast
+ | @reinterpret_cast
+ | @static_cast
+ ;
+
+/*
+case @conversion.kind of
+ 0 = @simple_conversion // a numeric conversion, qualification conversion, or a reinterpret_cast
+| 1 = @bool_conversion // conversion to 'bool'
+| 2 = @base_class_conversion // a derived-to-base conversion
+| 3 = @derived_class_conversion // a base-to-derived conversion
+| 4 = @pm_base_class_conversion // a derived-to-base conversion of a pointer to member
+| 5 = @pm_derived_class_conversion // a base-to-derived conversion of a pointer to member
+| 6 = @glvalue_adjust // an adjustment of the type of a glvalue
+| 7 = @prvalue_adjust // an adjustment of the type of a prvalue
+;
+*/
+/**
+ * Describes the semantics represented by a cast expression. This is largely
+ * independent of the source syntax of the cast, so it is separate from the
+ * regular expression kind.
+ */
+conversionkinds(
+ unique int expr_id: @cast ref,
+ int kind: int ref
+);
+
+@conversion = @cast
+ | @array_to_pointer
+ | @parexpr
+ | @reference_to
+ | @ref_indirect
+ | @temp_init
+ ;
+
+/*
+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
+
+/*
+ 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
+);
+
+/*
+ case @deallocator.form of
+ 0 = plain
+ | 1 = size
+ | 2 = alignment
+ | 3 = size_and_alignment
+ ;
+*/
+
+/**
+ * The deallocator function associated with a `delete`, `delete[]`, `new`, or
+ * `new[]` expression. For a `new` or `new[]` expression, the deallocator is the
+ * one used to free memory if the initialization throws an exception.
+ * The `form` column specifies whether the deallocation call contains a size
+ * argument, and alignment argument, or both.
+ */
+expr_deallocator(
+ unique int expr: @new_or_delete_expr ref,
+ int func: @function ref,
+ int form: int ref
+);
+
+/**
+ * Holds if the `@conditionalexpr` is of the two operand form
+ * `guard ? : false`.
+ */
+expr_cond_two_operand(
+ unique int cond: @conditionalexpr ref
+);
+
+/**
+ * The guard of `@conditionalexpr` `guard ? true : false`
+ */
+expr_cond_guard(
+ unique int cond: @conditionalexpr ref,
+ int guard: @expr ref
+);
+
+/**
+ * The expression used when the guard of `@conditionalexpr`
+ * `guard ? true : false` holds. For the two operand form
+ * `guard ?: false` consider using `expr_cond_guard` instead.
+ */
+expr_cond_true(
+ unique int cond: @conditionalexpr ref,
+ int true: @expr ref
+);
+
+/**
+ * The expression used when the guard of `@conditionalexpr`
+ * `guard ? true : false` does not hold.
+ */
+expr_cond_false(
+ unique int cond: @conditionalexpr ref,
+ int false: @expr ref
+);
+
+/** A string representation of the value. */
+values(
+ unique int id: @value,
+ string str: string ref
+);
+
+/** The actual text in the source code for the value, if any. */
+valuetext(
+ unique int id: @value ref,
+ string text: string ref
+);
+
+valuebind(
+ int val: @value ref,
+ unique int expr: @expr ref
+);
+
+fieldoffsets(
+ unique int id: @variable ref,
+ int byteoffset: int ref,
+ int bitoffset: int ref
+);
+
+bitfield(
+ unique int id: @variable ref,
+ int bits: int ref,
+ int declared_bits: int ref
+);
+
+/* TODO
+memberprefix(
+ int member: @expr ref,
+ int prefix: @expr ref
+);
+*/
+
+/*
+ kind(1) = mbrcallexpr
+ kind(2) = mbrptrcallexpr
+ kind(3) = mbrptrmbrcallexpr
+ kind(4) = ptrmbrptrmbrcallexpr
+ kind(5) = mbrreadexpr // x.y
+ kind(6) = mbrptrreadexpr // p->y
+ kind(7) = mbrptrmbrreadexpr // x.*pm
+ kind(8) = mbrptrmbrptrreadexpr // x->*pm
+ kind(9) = staticmbrreadexpr // static x.y
+ kind(10) = staticmbrptrreadexpr // static p->y
+*/
+/* TODO
+memberaccess(
+ int member: @expr ref,
+ int kind: int ref
+);
+*/
+
+initialisers(
+ unique int init: @initialiser,
+ int var: @accessible ref,
+ unique int expr: @expr ref,
+ int location: @location_expr ref
+);
+
+braced_initialisers(
+ int init: @initialiser ref
+);
+
+/**
+ * An ancestor for the expression, for cases in which we cannot
+ * otherwise find the expression's parent.
+ */
+expr_ancestor(
+ int exp: @expr ref,
+ int ancestor: @element ref
+);
+
+exprs(
+ unique int id: @expr,
+ int kind: int ref,
+ int location: @location_expr ref
+);
+
+expr_reuse(
+ int reuse: @expr ref,
+ int original: @expr ref,
+ int value_category: int ref
+)
+
+/*
+ case @value.category of
+ 1 = prval
+ | 2 = xval
+ | 3 = lval
+ ;
+*/
+expr_types(
+ int id: @expr ref,
+ int typeid: @type ref,
+ int value_category: int ref
+);
+
+case @expr.kind of
+ 1 = @errorexpr
+| 2 = @address_of // & AddressOfExpr
+| 3 = @reference_to // ReferenceToExpr (implicit?)
+| 4 = @indirect // * PointerDereferenceExpr
+| 5 = @ref_indirect // ReferenceDereferenceExpr (implicit?)
+// ...
+| 8 = @array_to_pointer // (???)
+| 9 = @vacuous_destructor_call // VacuousDestructorCall
+// ...
+| 11 = @assume // Microsoft
+| 12 = @parexpr
+| 13 = @arithnegexpr
+| 14 = @unaryplusexpr
+| 15 = @complementexpr
+| 16 = @notexpr
+| 17 = @conjugation // GNU ~ operator
+| 18 = @realpartexpr // GNU __real
+| 19 = @imagpartexpr // GNU __imag
+| 20 = @postincrexpr
+| 21 = @postdecrexpr
+| 22 = @preincrexpr
+| 23 = @predecrexpr
+| 24 = @conditionalexpr
+| 25 = @addexpr
+| 26 = @subexpr
+| 27 = @mulexpr
+| 28 = @divexpr
+| 29 = @remexpr
+| 30 = @jmulexpr // C99 mul imaginary
+| 31 = @jdivexpr // C99 div imaginary
+| 32 = @fjaddexpr // C99 add real + imaginary
+| 33 = @jfaddexpr // C99 add imaginary + real
+| 34 = @fjsubexpr // C99 sub real - imaginary
+| 35 = @jfsubexpr // C99 sub imaginary - real
+| 36 = @paddexpr // pointer add (pointer + int or int + pointer)
+| 37 = @psubexpr // pointer sub (pointer - integer)
+| 38 = @pdiffexpr // difference between two pointers
+| 39 = @lshiftexpr
+| 40 = @rshiftexpr
+| 41 = @andexpr
+| 42 = @orexpr
+| 43 = @xorexpr
+| 44 = @eqexpr
+| 45 = @neexpr
+| 46 = @gtexpr
+| 47 = @ltexpr
+| 48 = @geexpr
+| 49 = @leexpr
+| 50 = @minexpr // GNU minimum
+| 51 = @maxexpr // GNU maximum
+| 52 = @assignexpr
+| 53 = @assignaddexpr
+| 54 = @assignsubexpr
+| 55 = @assignmulexpr
+| 56 = @assigndivexpr
+| 57 = @assignremexpr
+| 58 = @assignlshiftexpr
+| 59 = @assignrshiftexpr
+| 60 = @assignandexpr
+| 61 = @assignorexpr
+| 62 = @assignxorexpr
+| 63 = @assignpaddexpr // assign pointer add
+| 64 = @assignpsubexpr // assign pointer sub
+| 65 = @andlogicalexpr
+| 66 = @orlogicalexpr
+| 67 = @commaexpr
+| 68 = @subscriptexpr // access to member of an array, e.g., a[5]
+// ... 69 @objc_subscriptexpr deprecated
+// ... 70 @cmdaccess deprecated
+// ...
+| 73 = @virtfunptrexpr
+| 74 = @callexpr
+// ... 75 @msgexpr_normal deprecated
+// ... 76 @msgexpr_super deprecated
+// ... 77 @atselectorexpr deprecated
+// ... 78 @atprotocolexpr deprecated
+| 79 = @vastartexpr
+| 80 = @vaargexpr
+| 81 = @vaendexpr
+| 82 = @vacopyexpr
+// ... 83 @atencodeexpr deprecated
+| 84 = @varaccess
+| 85 = @thisaccess
+// ... 86 @objc_box_expr deprecated
+| 87 = @new_expr
+| 88 = @delete_expr
+| 89 = @throw_expr
+| 90 = @condition_decl // a variable declared in a condition, e.g., if(int x = y > 2)
+| 91 = @braced_init_list
+| 92 = @type_id
+| 93 = @runtime_sizeof
+| 94 = @runtime_alignof
+| 95 = @sizeof_pack
+| 96 = @expr_stmt // GNU extension
+| 97 = @routineexpr
+| 98 = @type_operand // used to access a type in certain contexts (haven't found any examples yet....)
+| 99 = @offsetofexpr // offsetof ::= type and field
+| 100 = @hasassignexpr // __has_assign ::= type
+| 101 = @hascopyexpr // __has_copy ::= type
+| 102 = @hasnothrowassign // __has_nothrow_assign ::= type
+| 103 = @hasnothrowconstr // __has_nothrow_constructor ::= type
+| 104 = @hasnothrowcopy // __has_nothrow_copy ::= type
+| 105 = @hastrivialassign // __has_trivial_assign ::= type
+| 106 = @hastrivialconstr // __has_trivial_constructor ::= type
+| 107 = @hastrivialcopy // __has_trivial_copy ::= type
+| 108 = @hasuserdestr // __has_user_destructor ::= type
+| 109 = @hasvirtualdestr // __has_virtual_destructor ::= type
+| 110 = @isabstractexpr // __is_abstract ::= type
+| 111 = @isbaseofexpr // __is_base_of ::= type type
+| 112 = @isclassexpr // __is_class ::= type
+| 113 = @isconvtoexpr // __is_convertible_to ::= type type
+| 114 = @isemptyexpr // __is_empty ::= type
+| 115 = @isenumexpr // __is_enum ::= type
+| 116 = @ispodexpr // __is_pod ::= type
+| 117 = @ispolyexpr // __is_polymorphic ::= type
+| 118 = @isunionexpr // __is_union ::= type
+| 119 = @typescompexpr // GNU __builtin_types_compatible ::= type type
+| 120 = @intaddrexpr // frontend internal builtin, used to implement offsetof
+// ...
+| 122 = @hastrivialdestructor // __has_trivial_destructor ::= type
+| 123 = @literal
+| 124 = @uuidof
+| 127 = @aggregateliteral
+| 128 = @delete_array_expr
+| 129 = @new_array_expr
+// ... 130 @objc_array_literal deprecated
+// ... 131 @objc_dictionary_literal deprecated
+| 132 = @foldexpr
+// ...
+| 200 = @ctordirectinit
+| 201 = @ctorvirtualinit
+| 202 = @ctorfieldinit
+| 203 = @ctordelegatinginit
+| 204 = @dtordirectdestruct
+| 205 = @dtorvirtualdestruct
+| 206 = @dtorfielddestruct
+// ...
+| 210 = @static_cast
+| 211 = @reinterpret_cast
+| 212 = @const_cast
+| 213 = @dynamic_cast
+| 214 = @c_style_cast
+| 215 = @lambdaexpr
+| 216 = @param_ref
+| 217 = @noopexpr
+// ...
+| 294 = @istriviallyconstructibleexpr
+| 295 = @isdestructibleexpr
+| 296 = @isnothrowdestructibleexpr
+| 297 = @istriviallydestructibleexpr
+| 298 = @istriviallyassignableexpr
+| 299 = @isnothrowassignableexpr
+| 300 = @istrivialexpr
+| 301 = @isstandardlayoutexpr
+| 302 = @istriviallycopyableexpr
+| 303 = @isliteraltypeexpr
+| 304 = @hastrivialmoveconstructorexpr
+| 305 = @hastrivialmoveassignexpr
+| 306 = @hasnothrowmoveassignexpr
+| 307 = @isconstructibleexpr
+| 308 = @isnothrowconstructibleexpr
+| 309 = @hasfinalizerexpr
+| 310 = @isdelegateexpr
+| 311 = @isinterfaceclassexpr
+| 312 = @isrefarrayexpr
+| 313 = @isrefclassexpr
+| 314 = @issealedexpr
+| 315 = @issimplevalueclassexpr
+| 316 = @isvalueclassexpr
+| 317 = @isfinalexpr
+| 319 = @noexceptexpr
+| 320 = @builtinshufflevector
+| 321 = @builtinchooseexpr
+| 322 = @builtinaddressof
+| 323 = @vec_fill
+| 324 = @builtinconvertvector
+| 325 = @builtincomplex
+| 326 = @spaceshipexpr
+| 327 = @co_await
+| 328 = @co_yield
+| 329 = @temp_init
+| 330 = @isassignable
+| 331 = @isaggregate
+| 332 = @hasuniqueobjectrepresentations
+| 333 = @builtinbitcast
+| 334 = @builtinshuffle
+| 335 = @blockassignexpr
+| 336 = @issame
+| 337 = @isfunction
+| 338 = @islayoutcompatible
+| 339 = @ispointerinterconvertiblebaseof
+| 340 = @isarray
+| 341 = @arrayrank
+| 342 = @arrayextent
+| 343 = @isarithmetic
+| 344 = @iscompletetype
+| 345 = @iscompound
+| 346 = @isconst
+| 347 = @isfloatingpoint
+| 348 = @isfundamental
+| 349 = @isintegral
+| 350 = @islvaluereference
+| 351 = @ismemberfunctionpointer
+| 352 = @ismemberobjectpointer
+| 353 = @ismemberpointer
+| 354 = @isobject
+| 355 = @ispointer
+| 356 = @isreference
+| 357 = @isrvaluereference
+| 358 = @isscalar
+| 359 = @issigned
+| 360 = @isunsigned
+| 361 = @isvoid
+| 362 = @isvolatile
+| 363 = @reuseexpr
+;
+
+@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
+ ;
+
+new_allocated_type(
+ unique int expr: @new_expr ref,
+ int type_id: @type ref
+);
+
+new_array_allocated_type(
+ unique int expr: @new_array_expr ref,
+ int type_id: @type ref
+);
+
+/**
+ * The field being initialized by an initializer expression within an aggregate
+ * initializer for a class/struct/union. Position is used to sort repeated initializers.
+ */
+#keyset[aggregate, position]
+aggregate_field_init(
+ int aggregate: @aggregateliteral ref,
+ int initializer: @expr ref,
+ int field: @membervariable ref,
+ int position: int ref
+);
+
+/**
+ * The index of the element being initialized by an initializer expression
+ * within an aggregate initializer for an array. Position is used to sort repeated initializers.
+ */
+#keyset[aggregate, position]
+aggregate_array_init(
+ int aggregate: @aggregateliteral ref,
+ int initializer: @expr ref,
+ int element_index: int ref,
+ int position: int ref
+);
+
+@ctorinit = @ctordirectinit
+ | @ctorvirtualinit
+ | @ctorfieldinit
+ | @ctordelegatinginit;
+@dtordestruct = @dtordirectdestruct
+ | @dtorvirtualdestruct
+ | @dtorfielddestruct;
+
+
+condition_decl_bind(
+ unique int expr: @condition_decl ref,
+ unique int decl: @declaration ref
+);
+
+typeid_bind(
+ unique int expr: @type_id ref,
+ int type_id: @type ref
+);
+
+uuidof_bind(
+ unique int expr: @uuidof ref,
+ int type_id: @type ref
+);
+
+@runtime_sizeof_or_alignof = @runtime_sizeof | @runtime_alignof;
+
+sizeof_bind(
+ unique int expr: @runtime_sizeof_or_alignof ref,
+ int type_id: @type ref
+);
+
+code_block(
+ unique int block: @literal ref,
+ unique int routine: @function ref
+);
+
+lambdas(
+ unique int expr: @lambdaexpr ref,
+ string default_capture: string ref,
+ boolean has_explicit_return_type: boolean ref
+);
+
+lambda_capture(
+ unique int id: @lambdacapture,
+ int lambda: @lambdaexpr ref,
+ int index: int ref,
+ int field: @membervariable ref,
+ boolean captured_by_reference: boolean ref,
+ boolean is_implicit: boolean ref,
+ int location: @location_default ref
+);
+
+@funbindexpr = @routineexpr
+ | @new_expr
+ | @delete_expr
+ | @delete_array_expr
+ | @ctordirectinit
+ | @ctorvirtualinit
+ | @ctordelegatinginit
+ | @dtordirectdestruct
+ | @dtorvirtualdestruct;
+
+@varbindexpr = @varaccess | @ctorfieldinit | @dtorfielddestruct;
+@addressable = @function | @variable ;
+@accessible = @addressable | @enumconstant ;
+
+@access = @varaccess | @routineexpr ;
+
+fold(
+ int expr: @foldexpr ref,
+ string operator: string ref,
+ boolean is_left_fold: boolean ref
+);
+
+stmts(
+ unique int id: @stmt,
+ int kind: int ref,
+ int location: @location_stmt ref
+);
+
+case @stmt.kind of
+ 1 = @stmt_expr
+| 2 = @stmt_if
+| 3 = @stmt_while
+| 4 = @stmt_goto
+| 5 = @stmt_label
+| 6 = @stmt_return
+| 7 = @stmt_block
+| 8 = @stmt_end_test_while // do { ... } while ( ... )
+| 9 = @stmt_for
+| 10 = @stmt_switch_case
+| 11 = @stmt_switch
+| 13 = @stmt_asm // "asm" statement or the body of an asm function
+| 15 = @stmt_try_block
+| 16 = @stmt_microsoft_try // Microsoft
+| 17 = @stmt_decl
+| 18 = @stmt_set_vla_size // C99
+| 19 = @stmt_vla_decl // C99
+| 25 = @stmt_assigned_goto // GNU
+| 26 = @stmt_empty
+| 27 = @stmt_continue
+| 28 = @stmt_break
+| 29 = @stmt_range_based_for // C++11
+// ... 30 @stmt_at_autoreleasepool_block deprecated
+// ... 31 @stmt_objc_for_in deprecated
+// ... 32 @stmt_at_synchronized deprecated
+| 33 = @stmt_handler
+// ... 34 @stmt_finally_end deprecated
+| 35 = @stmt_constexpr_if
+| 37 = @stmt_co_return
+;
+
+type_vla(
+ int type_id: @type ref,
+ int decl: @stmt_vla_decl ref
+);
+
+variable_vla(
+ int var: @variable ref,
+ int decl: @stmt_vla_decl ref
+);
+
+if_initialization(
+ unique int if_stmt: @stmt_if ref,
+ int init_id: @stmt ref
+);
+
+if_then(
+ unique int if_stmt: @stmt_if ref,
+ int then_id: @stmt ref
+);
+
+if_else(
+ unique int if_stmt: @stmt_if ref,
+ int else_id: @stmt ref
+);
+
+constexpr_if_initialization(
+ unique int constexpr_if_stmt: @stmt_constexpr_if ref,
+ int init_id: @stmt ref
+);
+
+constexpr_if_then(
+ unique int constexpr_if_stmt: @stmt_constexpr_if ref,
+ int then_id: @stmt ref
+);
+
+constexpr_if_else(
+ unique int constexpr_if_stmt: @stmt_constexpr_if ref,
+ int else_id: @stmt ref
+);
+
+while_body(
+ unique int while_stmt: @stmt_while ref,
+ int body_id: @stmt ref
+);
+
+do_body(
+ unique int do_stmt: @stmt_end_test_while ref,
+ int body_id: @stmt ref
+);
+
+switch_initialization(
+ unique int switch_stmt: @stmt_switch ref,
+ int init_id: @stmt ref
+);
+
+#keyset[switch_stmt, index]
+switch_case(
+ int switch_stmt: @stmt_switch ref,
+ int index: int ref,
+ int case_id: @stmt_switch_case ref
+);
+
+switch_body(
+ unique int switch_stmt: @stmt_switch ref,
+ int body_id: @stmt ref
+);
+
+@stmt_for_or_range_based_for = @stmt_for
+ | @stmt_range_based_for;
+
+for_initialization(
+ unique int for_stmt: @stmt_for_or_range_based_for ref,
+ int init_id: @stmt ref
+);
+
+for_condition(
+ unique int for_stmt: @stmt_for ref,
+ int condition_id: @expr ref
+);
+
+for_update(
+ unique int for_stmt: @stmt_for ref,
+ int update_id: @expr ref
+);
+
+for_body(
+ unique int for_stmt: @stmt_for ref,
+ int body_id: @stmt ref
+);
+
+@stmtparent = @stmt | @expr_stmt ;
+stmtparents(
+ unique int id: @stmt ref,
+ int index: int ref,
+ int parent: @stmtparent ref
+);
+
+ishandler(unique int block: @stmt_block ref);
+
+@cfgnode = @stmt | @expr | @function | @initialiser ;
+
+stmt_decl_bind(
+ int stmt: @stmt_decl ref,
+ int num: int ref,
+ int decl: @declaration ref
+);
+
+stmt_decl_entry_bind(
+ int stmt: @stmt_decl ref,
+ int num: int ref,
+ int decl_entry: @element ref
+);
+
+@functionorblock = @function | @stmt_block;
+
+blockscope(
+ unique int block: @stmt_block ref,
+ int enclosing: @functionorblock ref
+);
+
+@jump = @stmt_goto | @stmt_break | @stmt_continue;
+
+@jumporlabel = @jump | @stmt_label | @literal;
+
+jumpinfo(
+ unique int id: @jumporlabel ref,
+ string str: string ref,
+ int target: @stmt ref
+);
+
+preprocdirects(
+ unique int id: @preprocdirect,
+ int kind: int ref,
+ int location: @location_default ref
+);
+case @preprocdirect.kind of
+ 0 = @ppd_if
+| 1 = @ppd_ifdef
+| 2 = @ppd_ifndef
+| 3 = @ppd_elif
+| 4 = @ppd_else
+| 5 = @ppd_endif
+| 6 = @ppd_plain_include
+| 7 = @ppd_define
+| 8 = @ppd_undef
+| 9 = @ppd_line
+| 10 = @ppd_error
+| 11 = @ppd_pragma
+| 12 = @ppd_objc_import
+| 13 = @ppd_include_next
+| 18 = @ppd_warning
+;
+
+@ppd_include = @ppd_plain_include | @ppd_objc_import | @ppd_include_next;
+
+@ppd_branch = @ppd_if | @ppd_ifdef | @ppd_ifndef | @ppd_elif;
+
+preprocpair(
+ int begin : @ppd_branch ref,
+ int elseelifend : @preprocdirect ref
+);
+
+preproctrue(int branch : @ppd_branch ref);
+preprocfalse(int branch : @ppd_branch ref);
+
+preproctext(
+ unique int id: @preprocdirect ref,
+ string head: string ref,
+ string body: string ref
+);
+
+includes(
+ unique int id: @ppd_include ref,
+ int included: @file ref
+);
+
+link_targets(
+ int id: @link_target,
+ int binary: @file ref
+);
+
+link_parent(
+ int element : @element ref,
+ int link_target : @link_target ref
+);
+
+/* XML Files */
+
+xmlEncoding(unique int id: @file ref, string encoding: string ref);
+
+xmlDTDs(
+ unique int id: @xmldtd,
+ string root: string ref,
+ string publicId: string ref,
+ string systemId: string ref,
+ int fileid: @file ref
+);
+
+xmlElements(
+ unique int id: @xmlelement,
+ string name: string ref,
+ int parentid: @xmlparent ref,
+ int idx: int ref,
+ int fileid: @file ref
+);
+
+xmlAttrs(
+ unique int id: @xmlattribute,
+ int elementid: @xmlelement ref,
+ string name: string ref,
+ string value: string ref,
+ int idx: int ref,
+ int fileid: @file ref
+);
+
+xmlNs(
+ int id: @xmlnamespace,
+ string prefixName: string ref,
+ string URI: string ref,
+ int fileid: @file ref
+);
+
+xmlHasNs(
+ int elementId: @xmlnamespaceable ref,
+ int nsId: @xmlnamespace ref,
+ int fileid: @file ref
+);
+
+xmlComments(
+ unique int id: @xmlcomment,
+ string text: string ref,
+ int parentid: @xmlparent ref,
+ int fileid: @file ref
+);
+
+xmlChars(
+ unique int id: @xmlcharacters,
+ string text: string ref,
+ int parentid: @xmlparent ref,
+ int idx: int ref,
+ int isCDATA: int ref,
+ int fileid: @file ref
+);
+
+@xmlparent = @file | @xmlelement;
+@xmlnamespaceable = @xmlelement | @xmlattribute;
+
+xmllocations(
+ int xmlElement: @xmllocatable ref,
+ int location: @location_default ref
+);
+
+@xmllocatable = @xmlcharacters
+ | @xmlelement
+ | @xmlcomment
+ | @xmlattribute
+ | @xmldtd
+ | @file
+ | @xmlnamespace;
diff --git a/cpp/downgrades/abfce5c170f93e281948f7689ece373464fdaf87/semmlecode.cpp.dbscheme b/cpp/downgrades/abfce5c170f93e281948f7689ece373464fdaf87/semmlecode.cpp.dbscheme
new file mode 100644
index 00000000000..aa7ff0ab32c
--- /dev/null
+++ b/cpp/downgrades/abfce5c170f93e281948f7689ece373464fdaf87/semmlecode.cpp.dbscheme
@@ -0,0 +1,2250 @@
+
+/**
+ * An invocation of the compiler. Note that more than one file may be
+ * compiled per invocation. For example, this command compiles three
+ * source files:
+ *
+ * gcc -c f1.c f2.c f3.c
+ *
+ * The `id` simply identifies the invocation, while `cwd` is the working
+ * directory from which the compiler was invoked.
+ */
+compilations(
+ /**
+ * An invocation of the compiler. Note that more than one file may
+ * be compiled per invocation. For example, this command compiles
+ * three source files:
+ *
+ * gcc -c f1.c f2.c f3.c
+ */
+ unique int id : @compilation,
+ string cwd : string ref
+);
+
+/**
+ * The arguments that were passed to the extractor for a compiler
+ * invocation. If `id` is for the compiler invocation
+ *
+ * gcc -c f1.c f2.c f3.c
+ *
+ * then typically there will be rows for
+ *
+ * num | arg
+ * --- | ---
+ * 0 | *path to extractor*
+ * 1 | `--mimic`
+ * 2 | `/usr/bin/gcc`
+ * 3 | `-c`
+ * 4 | f1.c
+ * 5 | f2.c
+ * 6 | f3.c
+ */
+#keyset[id, num]
+compilation_args(
+ int id : @compilation ref,
+ int num : int ref,
+ string arg : string ref
+);
+
+/**
+ * The source files that are compiled by a compiler invocation.
+ * If `id` is for the compiler invocation
+ *
+ * gcc -c f1.c f2.c f3.c
+ *
+ * then there will be rows for
+ *
+ * num | arg
+ * --- | ---
+ * 0 | f1.c
+ * 1 | f2.c
+ * 2 | f3.c
+ *
+ * Note that even if those files `#include` headers, those headers
+ * do not appear as rows.
+ */
+#keyset[id, num]
+compilation_compiling_files(
+ int id : @compilation ref,
+ int num : int ref,
+ int file : @file ref
+);
+
+/**
+ * The time taken by the extractor for a compiler invocation.
+ *
+ * For each file `num`, there will be rows for
+ *
+ * kind | seconds
+ * ---- | ---
+ * 1 | CPU seconds used by the extractor frontend
+ * 2 | Elapsed seconds during the extractor frontend
+ * 3 | CPU seconds used by the extractor backend
+ * 4 | Elapsed seconds during the extractor backend
+ */
+#keyset[id, num, kind]
+compilation_time(
+ int id : @compilation ref,
+ int num : int ref,
+ /* kind:
+ 1 = frontend_cpu_seconds
+ 2 = frontend_elapsed_seconds
+ 3 = extractor_cpu_seconds
+ 4 = extractor_elapsed_seconds
+ */
+ int kind : int ref,
+ float seconds : float ref
+);
+
+/**
+ * An error or warning generated by the extractor.
+ * The diagnostic message `diagnostic` was generated during compiler
+ * invocation `compilation`, and is the `file_number_diagnostic_number`th
+ * message generated while extracting the `file_number`th file of that
+ * invocation.
+ */
+#keyset[compilation, file_number, file_number_diagnostic_number]
+diagnostic_for(
+ int diagnostic : @diagnostic ref,
+ int compilation : @compilation ref,
+ int file_number : int ref,
+ int file_number_diagnostic_number : int ref
+);
+
+/**
+ * If extraction was successful, then `cpu_seconds` and
+ * `elapsed_seconds` are the CPU time and elapsed time (respectively)
+ * that extraction took for compiler invocation `id`.
+ */
+compilation_finished(
+ unique int id : @compilation ref,
+ float cpu_seconds : float ref,
+ float elapsed_seconds : float ref
+);
+
+
+/**
+ * External data, loaded from CSV files during snapshot creation. See
+ * [Tutorial: Incorporating external data](https://help.semmle.com/wiki/display/SD/Tutorial%3A+Incorporating+external+data)
+ * for more information.
+ */
+externalData(
+ int id : @externalDataElement,
+ string path : string ref,
+ int column: int ref,
+ string value : string ref
+);
+
+/**
+ * The source location of the snapshot.
+ */
+sourceLocationPrefix(string prefix : string ref);
+
+/**
+ * Information about packages that provide code used during compilation.
+ * The `id` is just a unique identifier.
+ * The `namespace` is typically the name of the package manager that
+ * provided the package (e.g. "dpkg" or "yum").
+ * The `package_name` is the name of the package, and `version` is its
+ * version (as a string).
+ */
+external_packages(
+ unique int id: @external_package,
+ string namespace : string ref,
+ string package_name : string ref,
+ string version : string ref
+);
+
+/**
+ * Holds if File `fileid` was provided by package `package`.
+ */
+header_to_external_package(
+ int fileid : @file ref,
+ int package : @external_package ref
+);
+
+/*
+ * Version history
+ */
+
+svnentries(
+ unique int id : @svnentry,
+ string revision : string ref,
+ string author : string ref,
+ date revisionDate : date ref,
+ int changeSize : int ref
+)
+
+svnaffectedfiles(
+ int id : @svnentry ref,
+ int file : @file ref,
+ string action : string ref
+)
+
+svnentrymsg(
+ unique int id : @svnentry ref,
+ string message : string ref
+)
+
+svnchurn(
+ int commit : @svnentry ref,
+ int file : @file ref,
+ int addedLines : int ref,
+ int deletedLines : int ref
+)
+
+/*
+ * C++ dbscheme
+ */
+
+extractor_version(
+ string codeql_version: string ref,
+ string frontend_version: string ref
+)
+
+@location = @location_stmt | @location_expr | @location_default ;
+
+/**
+ * The location of an element that is not an expression or a statement.
+ * The location spans column `startcolumn` of line `startline` to
+ * column `endcolumn` of line `endline` in file `file`.
+ * For more information, see
+ * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/).
+ */
+locations_default(
+ /** The location of an element that is not an expression or a statement. */
+ unique int id: @location_default,
+ int container: @container ref,
+ int startLine: int ref,
+ int startColumn: int ref,
+ int endLine: int ref,
+ int endColumn: int ref
+);
+
+/**
+ * The location of a statement.
+ * The location spans column `startcolumn` of line `startline` to
+ * column `endcolumn` of line `endline` in file `file`.
+ * For more information, see
+ * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/).
+ */
+locations_stmt(
+ /** The location of a statement. */
+ unique int id: @location_stmt,
+ int container: @container ref,
+ int startLine: int ref,
+ int startColumn: int ref,
+ int endLine: int ref,
+ int endColumn: int ref
+);
+
+/**
+ * The location of an expression.
+ * The location spans column `startcolumn` of line `startline` to
+ * column `endcolumn` of line `endline` in file `file`.
+ * For more information, see
+ * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/).
+ */
+locations_expr(
+ /** The location of an expression. */
+ unique int id: @location_expr,
+ int container: @container ref,
+ int startLine: int ref,
+ int startColumn: int ref,
+ int endLine: int ref,
+ int endColumn: int ref
+);
+
+/** An element for which line-count information is available. */
+@sourceline = @file | @function | @variable | @enumconstant | @xmllocatable;
+
+numlines(
+ int element_id: @sourceline ref,
+ int num_lines: int ref,
+ int num_code: int ref,
+ int num_comment: int ref
+);
+
+diagnostics(
+ unique int id: @diagnostic,
+ int severity: int ref,
+ string error_tag: string ref,
+ string error_message: string ref,
+ string full_error_message: string ref,
+ int location: @location_default ref
+);
+
+files(
+ unique int id: @file,
+ string name: string ref
+);
+
+folders(
+ unique int id: @folder,
+ string name: string ref
+);
+
+@container = @folder | @file
+
+containerparent(
+ int parent: @container ref,
+ unique int child: @container ref
+);
+
+fileannotations(
+ int id: @file ref,
+ int kind: int ref,
+ string name: string ref,
+ string value: string ref
+);
+
+inmacroexpansion(
+ int id: @element ref,
+ int inv: @macroinvocation ref
+);
+
+affectedbymacroexpansion(
+ int id: @element ref,
+ int inv: @macroinvocation ref
+);
+
+case @macroinvocation.kind of
+ 1 = @macro_expansion
+| 2 = @other_macro_reference
+;
+
+macroinvocations(
+ unique int id: @macroinvocation,
+ int macro_id: @ppd_define ref,
+ int location: @location_default ref,
+ int kind: int ref
+);
+
+macroparent(
+ unique int id: @macroinvocation ref,
+ int parent_id: @macroinvocation ref
+);
+
+// a macroinvocation may be part of another location
+// the way to find a constant expression that uses a macro
+// is thus to find a constant expression that has a location
+// to which a macro invocation is bound
+macrolocationbind(
+ int id: @macroinvocation ref,
+ int location: @location ref
+);
+
+#keyset[invocation, argument_index]
+macro_argument_unexpanded(
+ int invocation: @macroinvocation ref,
+ int argument_index: int ref,
+ string text: string ref
+);
+
+#keyset[invocation, argument_index]
+macro_argument_expanded(
+ int invocation: @macroinvocation ref,
+ int argument_index: int ref,
+ string text: string ref
+);
+
+/*
+case @function.kind of
+ 1 = @normal_function
+| 2 = @constructor
+| 3 = @destructor
+| 4 = @conversion_function
+| 5 = @operator
+| 6 = @builtin_function // GCC built-in functions, e.g. __builtin___memcpy_chk
+| 7 = @user_defined_literal
+| 8 = @deduction_guide
+;
+*/
+
+functions(
+ unique int id: @function,
+ string name: string ref,
+ int kind: int ref
+);
+
+function_entry_point(
+ int id: @function ref,
+ unique int entry_point: @stmt ref
+);
+
+function_return_type(
+ int id: @function ref,
+ int return_type: @type ref
+);
+
+/**
+ * If `function` is a coroutine, then this gives the `std::experimental::resumable_traits`
+ * instance associated with it, and the variables representing the `handle` and `promise`
+ * for it.
+ */
+coroutine(
+ unique int function: @function ref,
+ int traits: @type ref,
+ int handle: @variable ref,
+ int promise: @variable 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)
+
+member_function_this_type(
+ unique int id: @function ref,
+ int this_type: @type ref
+);
+
+#keyset[id, type_id]
+fun_decls(
+ int id: @fun_decl,
+ int function: @function ref,
+ int type_id: @type ref,
+ string name: string ref,
+ int location: @location_default ref
+);
+fun_def(unique int id: @fun_decl ref);
+fun_specialized(unique int id: @fun_decl ref);
+fun_implicit(unique int id: @fun_decl ref);
+fun_decl_specifiers(
+ int id: @fun_decl ref,
+ string name: string ref
+)
+#keyset[fun_decl, index]
+fun_decl_throws(
+ int fun_decl: @fun_decl ref,
+ int index: int ref,
+ int type_id: @type ref
+);
+/* an empty throw specification is different from none */
+fun_decl_empty_throws(unique int fun_decl: @fun_decl ref);
+fun_decl_noexcept(
+ int fun_decl: @fun_decl ref,
+ int constant: @expr ref
+);
+fun_decl_empty_noexcept(int fun_decl: @fun_decl ref);
+fun_decl_typedef_type(
+ unique int fun_decl: @fun_decl ref,
+ int typedeftype_id: @usertype ref
+);
+
+param_decl_bind(
+ unique int id: @var_decl ref,
+ int index: int ref,
+ int fun_decl: @fun_decl ref
+);
+
+#keyset[id, type_id]
+var_decls(
+ int id: @var_decl,
+ int variable: @variable ref,
+ int type_id: @type ref,
+ string name: string ref,
+ int location: @location_default ref
+);
+var_def(unique int id: @var_decl ref);
+var_decl_specifiers(
+ int id: @var_decl ref,
+ string name: string ref
+)
+is_structured_binding(unique int id: @variable ref);
+
+type_decls(
+ unique int id: @type_decl,
+ int type_id: @type ref,
+ int location: @location_default ref
+);
+type_def(unique int id: @type_decl ref);
+type_decl_top(
+ unique int type_decl: @type_decl ref
+);
+
+namespace_decls(
+ unique int id: @namespace_decl,
+ int namespace_id: @namespace ref,
+ int location: @location_default ref,
+ int bodylocation: @location_default ref
+);
+
+usings(
+ unique int id: @using,
+ int element_id: @element ref,
+ int location: @location_default ref
+);
+
+/** The element which contains the `using` declaration. */
+using_container(
+ int parent: @element ref,
+ int child: @using ref
+);
+
+static_asserts(
+ unique int id: @static_assert,
+ int condition : @expr ref,
+ string message : string ref,
+ int location: @location_default ref,
+ int enclosing : @element ref
+);
+
+// each function has an ordered list of parameters
+#keyset[id, type_id]
+#keyset[function, index, type_id]
+params(
+ int id: @parameter,
+ int function: @functionorblock ref,
+ int index: int ref,
+ int type_id: @type ref
+);
+
+overrides(
+ int new: @function ref,
+ int old: @function ref
+);
+
+#keyset[id, type_id]
+membervariables(
+ int id: @membervariable,
+ int type_id: @type ref,
+ string name: string ref
+);
+
+#keyset[id, type_id]
+globalvariables(
+ int id: @globalvariable,
+ int type_id: @type ref,
+ string name: string ref
+);
+
+#keyset[id, type_id]
+localvariables(
+ int id: @localvariable,
+ int type_id: @type ref,
+ string name: string ref
+);
+
+autoderivation(
+ unique int var: @variable ref,
+ int derivation_type: @type ref
+);
+
+orphaned_variables(
+ int var: @localvariable ref,
+ int function: @function ref
+)
+
+enumconstants(
+ unique int id: @enumconstant,
+ int parent: @usertype ref,
+ int index: int ref,
+ int type_id: @type ref,
+ string name: string ref,
+ int location: @location_default ref
+);
+
+@variable = @localscopevariable | @globalvariable | @membervariable;
+
+@localscopevariable = @localvariable | @parameter;
+
+/**
+ * Built-in types are the fundamental types, e.g., integral, floating, and void.
+ */
+case @builtintype.kind of
+ 1 = @errortype
+| 2 = @unknowntype
+| 3 = @void
+| 4 = @boolean
+| 5 = @char
+| 6 = @unsigned_char
+| 7 = @signed_char
+| 8 = @short
+| 9 = @unsigned_short
+| 10 = @signed_short
+| 11 = @int
+| 12 = @unsigned_int
+| 13 = @signed_int
+| 14 = @long
+| 15 = @unsigned_long
+| 16 = @signed_long
+| 17 = @long_long
+| 18 = @unsigned_long_long
+| 19 = @signed_long_long
+// ... 20 Microsoft-specific __int8
+// ... 21 Microsoft-specific __int16
+// ... 22 Microsoft-specific __int32
+// ... 23 Microsoft-specific __int64
+| 24 = @float
+| 25 = @double
+| 26 = @long_double
+| 27 = @complex_float // C99-specific _Complex float
+| 28 = @complex_double // C99-specific _Complex double
+| 29 = @complex_long_double // C99-specific _Complex long double
+| 30 = @imaginary_float // C99-specific _Imaginary float
+| 31 = @imaginary_double // C99-specific _Imaginary double
+| 32 = @imaginary_long_double // C99-specific _Imaginary long double
+| 33 = @wchar_t // Microsoft-specific
+| 34 = @decltype_nullptr // C++11
+| 35 = @int128 // __int128
+| 36 = @unsigned_int128 // unsigned __int128
+| 37 = @signed_int128 // signed __int128
+| 38 = @float128 // __float128
+| 39 = @complex_float128 // _Complex __float128
+| 40 = @decimal32 // _Decimal32
+| 41 = @decimal64 // _Decimal64
+| 42 = @decimal128 // _Decimal128
+| 43 = @char16_t
+| 44 = @char32_t
+| 45 = @std_float32 // _Float32
+| 46 = @float32x // _Float32x
+| 47 = @std_float64 // _Float64
+| 48 = @float64x // _Float64x
+| 49 = @std_float128 // _Float128
+// ... 50 _Float128x
+| 51 = @char8_t
+| 52 = @float16 // _Float16
+| 53 = @complex_float16 // _Complex _Float16
+| 54 = @fp16 // __fp16
+| 55 = @std_bfloat16 // __bf16
+| 56 = @std_float16 // std::float16_t
+| 57 = @complex_std_float32 // _Complex _Float32
+| 58 = @complex_float32x // _Complex _Float32x
+| 59 = @complex_std_float64 // _Complex _Float64
+| 60 = @complex_float64x // _Complex _Float64x
+| 61 = @complex_std_float128 // _Complex _Float128
+;
+
+builtintypes(
+ unique int id: @builtintype,
+ string name: string ref,
+ int kind: int ref,
+ int size: int ref,
+ int sign: int ref,
+ int alignment: int ref
+);
+
+/**
+ * Derived types are types that are directly derived from existing types and
+ * point to, refer to, transform type data to return a new type.
+ */
+case @derivedtype.kind of
+ 1 = @pointer
+| 2 = @reference
+| 3 = @type_with_specifiers
+| 4 = @array
+| 5 = @gnu_vector
+| 6 = @routineptr
+| 7 = @routinereference
+| 8 = @rvalue_reference // C++11
+// ... 9 type_conforming_to_protocols deprecated
+| 10 = @block
+;
+
+derivedtypes(
+ unique int id: @derivedtype,
+ string name: string ref,
+ int kind: int ref,
+ int type_id: @type ref
+);
+
+pointerishsize(unique int id: @derivedtype ref,
+ int size: int ref,
+ int alignment: int ref);
+
+arraysizes(
+ unique int id: @derivedtype ref,
+ int num_elements: int ref,
+ int bytesize: int ref,
+ int alignment: int ref
+);
+
+typedefbase(
+ unique int id: @usertype ref,
+ int type_id: @type ref
+);
+
+/**
+ * An instance of the C++11 `decltype` operator. For example:
+ * ```
+ * int a;
+ * decltype(1+a) b;
+ * ```
+ * Here `expr` is `1+a`.
+ *
+ * Sometimes an additional pair of parentheses around the expression
+ * would change the semantics of this decltype, e.g.
+ * ```
+ * struct A { double x; };
+ * const A* a = new A();
+ * decltype( a->x ); // type is double
+ * decltype((a->x)); // type is const double&
+ * ```
+ * (Please consult the C++11 standard for more details).
+ * `parentheses_would_change_meaning` is `true` iff that is the case.
+ */
+#keyset[id, expr]
+decltypes(
+ int id: @decltype,
+ int expr: @expr ref,
+ int base_type: @type ref,
+ boolean parentheses_would_change_meaning: boolean ref
+);
+
+/*
+case @usertype.kind of
+ 1 = @struct
+| 2 = @class
+| 3 = @union
+| 4 = @enum
+| 5 = @typedef // classic C: typedef typedef type name
+| 6 = @template
+| 7 = @template_parameter
+| 8 = @template_template_parameter
+| 9 = @proxy_class // a proxy class associated with a template parameter
+// ... 10 objc_class deprecated
+// ... 11 objc_protocol deprecated
+// ... 12 objc_category deprecated
+| 13 = @scoped_enum
+| 14 = @using_alias // a using name = type style typedef
+;
+*/
+
+usertypes(
+ unique int id: @usertype,
+ string name: string ref,
+ int kind: int ref
+);
+
+usertypesize(
+ unique int id: @usertype ref,
+ int size: int ref,
+ int alignment: int ref
+);
+
+usertype_final(unique int id: @usertype ref);
+
+usertype_uuid(
+ unique int id: @usertype ref,
+ string uuid: string ref
+);
+
+mangled_name(
+ unique int id: @declaration ref,
+ int mangled_name : @mangledname,
+ boolean is_complete: boolean ref
+);
+
+is_pod_class(unique int id: @usertype ref);
+is_standard_layout_class(unique int id: @usertype ref);
+
+is_complete(unique int id: @usertype ref);
+
+is_class_template(unique int id: @usertype ref);
+class_instantiation(
+ int to: @usertype ref,
+ int from: @usertype ref
+);
+class_template_argument(
+ int type_id: @usertype ref,
+ int index: int ref,
+ int arg_type: @type ref
+);
+class_template_argument_value(
+ int type_id: @usertype ref,
+ int index: int ref,
+ int arg_value: @expr ref
+);
+
+is_proxy_class_for(
+ unique int id: @usertype ref,
+ unique int templ_param_id: @usertype ref
+);
+
+type_mentions(
+ unique int id: @type_mention,
+ int type_id: @type ref,
+ int location: @location ref,
+ // a_symbol_reference_kind from the frontend.
+ int kind: int ref
+);
+
+is_function_template(unique int id: @function ref);
+function_instantiation(
+ unique int to: @function ref,
+ int from: @function ref
+);
+function_template_argument(
+ int function_id: @function ref,
+ int index: int ref,
+ int arg_type: @type ref
+);
+function_template_argument_value(
+ int function_id: @function ref,
+ int index: int ref,
+ int arg_value: @expr ref
+);
+
+is_variable_template(unique int id: @variable ref);
+variable_instantiation(
+ unique int to: @variable ref,
+ int from: @variable ref
+);
+variable_template_argument(
+ int variable_id: @variable ref,
+ int index: int ref,
+ int arg_type: @type ref
+);
+variable_template_argument_value(
+ int variable_id: @variable ref,
+ int index: int ref,
+ int arg_value: @expr ref
+);
+
+/*
+ Fixed point types
+ precision(1) = short, precision(2) = default, precision(3) = long
+ is_unsigned(1) = unsigned is_unsigned(2) = signed
+ is_fract_type(1) = declared with _Fract
+ saturating(1) = declared with _Sat
+*/
+/* TODO
+fixedpointtypes(
+ unique int id: @fixedpointtype,
+ int precision: int ref,
+ int is_unsigned: int ref,
+ int is_fract_type: int ref,
+ int saturating: int 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
+);
+
+attributes(
+ unique int id: @attribute,
+ int kind: int ref,
+ string name: string ref,
+ string name_space: string ref,
+ int location: @location_default ref
+);
+
+case @attribute.kind of
+ 0 = @gnuattribute
+| 1 = @stdattribute
+| 2 = @declspec
+| 3 = @msattribute
+| 4 = @alignas
+// ... 5 @objc_propertyattribute deprecated
+;
+
+attribute_args(
+ unique int id: @attribute_arg,
+ int kind: int ref,
+ int attribute: @attribute ref,
+ int index: int ref,
+ int location: @location_default ref
+);
+
+case @attribute_arg.kind of
+ 0 = @attribute_arg_empty
+| 1 = @attribute_arg_token
+| 2 = @attribute_arg_constant
+| 3 = @attribute_arg_type
+| 4 = @attribute_arg_constant_expr
+| 5 = @attribute_arg_expr
+;
+
+attribute_arg_value(
+ unique int arg: @attribute_arg ref,
+ string value: string ref
+);
+attribute_arg_type(
+ unique int arg: @attribute_arg ref,
+ int type_id: @type ref
+);
+attribute_arg_constant(
+ unique int arg: @attribute_arg ref,
+ int constant: @expr ref
+)
+attribute_arg_expr(
+ unique int arg: @attribute_arg ref,
+ int expr: @expr ref
+)
+attribute_arg_name(
+ unique int arg: @attribute_arg ref,
+ string name: string ref
+);
+
+typeattributes(
+ int type_id: @type ref,
+ int spec_id: @attribute ref
+);
+
+funcattributes(
+ int func_id: @function ref,
+ int spec_id: @attribute ref
+);
+
+varattributes(
+ int var_id: @accessible ref,
+ int spec_id: @attribute ref
+);
+
+stmtattributes(
+ int stmt_id: @stmt ref,
+ int spec_id: @attribute ref
+);
+
+@type = @builtintype
+ | @derivedtype
+ | @usertype
+ /* TODO | @fixedpointtype */
+ | @routinetype
+ | @ptrtomember
+ | @decltype;
+
+unspecifiedtype(
+ unique int type_id: @type ref,
+ int unspecified_type_id: @type ref
+);
+
+member(
+ int parent: @type ref,
+ int index: int ref,
+ int child: @member ref
+);
+
+@enclosingfunction_child = @usertype | @variable | @namespace
+
+enclosingfunction(
+ unique int child: @enclosingfunction_child ref,
+ int parent: @function ref
+);
+
+derivations(
+ unique int derivation: @derivation,
+ int sub: @type ref,
+ int index: int ref,
+ int super: @type ref,
+ int location: @location_default ref
+);
+
+derspecifiers(
+ int der_id: @derivation ref,
+ int spec_id: @specifier ref
+);
+
+/**
+ * Contains the byte offset of the base class subobject within the derived
+ * class. Only holds for non-virtual base classes, but see table
+ * `virtual_base_offsets` for offsets of virtual base class subobjects.
+ */
+direct_base_offsets(
+ unique int der_id: @derivation ref,
+ int offset: int ref
+);
+
+/**
+ * Contains the byte offset of the virtual base class subobject for class
+ * `super` within a most-derived object of class `sub`. `super` can be either a
+ * direct or indirect base class.
+ */
+#keyset[sub, super]
+virtual_base_offsets(
+ int sub: @usertype ref,
+ int super: @usertype ref,
+ int offset: int ref
+);
+
+frienddecls(
+ unique int id: @frienddecl,
+ int type_id: @type ref,
+ int decl_id: @declaration ref,
+ int location: @location_default ref
+);
+
+@declaredtype = @usertype ;
+
+@declaration = @function
+ | @declaredtype
+ | @variable
+ | @enumconstant
+ | @frienddecl;
+
+@member = @membervariable
+ | @function
+ | @declaredtype
+ | @enumconstant;
+
+@locatable = @diagnostic
+ | @declaration
+ | @ppd_include
+ | @ppd_define
+ | @macroinvocation
+ /*| @funcall*/
+ | @xmllocatable
+ | @attribute
+ | @attribute_arg;
+
+@namedscope = @namespace | @usertype;
+
+@element = @locatable
+ | @file
+ | @folder
+ | @specifier
+ | @type
+ | @expr
+ | @namespace
+ | @initialiser
+ | @stmt
+ | @derivation
+ | @comment
+ | @preprocdirect
+ | @fun_decl
+ | @var_decl
+ | @type_decl
+ | @namespace_decl
+ | @using
+ | @namequalifier
+ | @specialnamequalifyingelement
+ | @static_assert
+ | @type_mention
+ | @lambdacapture;
+
+@exprparent = @element;
+
+comments(
+ unique int id: @comment,
+ string contents: string ref,
+ int location: @location_default ref
+);
+
+commentbinding(
+ int id: @comment ref,
+ int element: @element ref
+);
+
+exprconv(
+ int converted: @expr ref,
+ unique int conversion: @expr ref
+);
+
+compgenerated(unique int id: @element ref);
+
+/**
+ * `destructor_call` destructs the `i`'th entity that should be
+ * destructed following `element`. Note that entities should be
+ * destructed in reverse construction order, so for a given `element`
+ * these should be called from highest to lowest `i`.
+ */
+#keyset[element, destructor_call]
+#keyset[element, i]
+synthetic_destructor_call(
+ int element: @element ref,
+ int i: int ref,
+ int destructor_call: @routineexpr ref
+);
+
+namespaces(
+ unique int id: @namespace,
+ string name: string ref
+);
+
+namespace_inline(
+ unique int id: @namespace ref
+);
+
+namespacembrs(
+ int parentid: @namespace ref,
+ unique int memberid: @namespacembr ref
+);
+
+@namespacembr = @declaration | @namespace;
+
+exprparents(
+ int expr_id: @expr ref,
+ int child_index: int ref,
+ int parent_id: @exprparent ref
+);
+
+expr_isload(unique int expr_id: @expr ref);
+
+@cast = @c_style_cast
+ | @const_cast
+ | @dynamic_cast
+ | @reinterpret_cast
+ | @static_cast
+ ;
+
+/*
+case @conversion.kind of
+ 0 = @simple_conversion // a numeric conversion, qualification conversion, or a reinterpret_cast
+| 1 = @bool_conversion // conversion to 'bool'
+| 2 = @base_class_conversion // a derived-to-base conversion
+| 3 = @derived_class_conversion // a base-to-derived conversion
+| 4 = @pm_base_class_conversion // a derived-to-base conversion of a pointer to member
+| 5 = @pm_derived_class_conversion // a base-to-derived conversion of a pointer to member
+| 6 = @glvalue_adjust // an adjustment of the type of a glvalue
+| 7 = @prvalue_adjust // an adjustment of the type of a prvalue
+;
+*/
+/**
+ * Describes the semantics represented by a cast expression. This is largely
+ * independent of the source syntax of the cast, so it is separate from the
+ * regular expression kind.
+ */
+conversionkinds(
+ unique int expr_id: @cast ref,
+ int kind: int ref
+);
+
+@conversion = @cast
+ | @array_to_pointer
+ | @parexpr
+ | @reference_to
+ | @ref_indirect
+ | @temp_init
+ ;
+
+/*
+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
+
+/*
+ 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
+);
+
+/*
+ case @deallocator.form of
+ 0 = plain
+ | 1 = size
+ | 2 = alignment
+ | 3 = size_and_alignment
+ ;
+*/
+
+/**
+ * The deallocator function associated with a `delete`, `delete[]`, `new`, or
+ * `new[]` expression. For a `new` or `new[]` expression, the deallocator is the
+ * one used to free memory if the initialization throws an exception.
+ * The `form` column specifies whether the deallocation call contains a size
+ * argument, and alignment argument, or both.
+ */
+expr_deallocator(
+ unique int expr: @new_or_delete_expr ref,
+ int func: @function ref,
+ int form: int ref
+);
+
+/**
+ * Holds if the `@conditionalexpr` is of the two operand form
+ * `guard ? : false`.
+ */
+expr_cond_two_operand(
+ unique int cond: @conditionalexpr ref
+);
+
+/**
+ * The guard of `@conditionalexpr` `guard ? true : false`
+ */
+expr_cond_guard(
+ unique int cond: @conditionalexpr ref,
+ int guard: @expr ref
+);
+
+/**
+ * The expression used when the guard of `@conditionalexpr`
+ * `guard ? true : false` holds. For the two operand form
+ * `guard ?: false` consider using `expr_cond_guard` instead.
+ */
+expr_cond_true(
+ unique int cond: @conditionalexpr ref,
+ int true: @expr ref
+);
+
+/**
+ * The expression used when the guard of `@conditionalexpr`
+ * `guard ? true : false` does not hold.
+ */
+expr_cond_false(
+ unique int cond: @conditionalexpr ref,
+ int false: @expr ref
+);
+
+/** A string representation of the value. */
+values(
+ unique int id: @value,
+ string str: string ref
+);
+
+/** The actual text in the source code for the value, if any. */
+valuetext(
+ unique int id: @value ref,
+ string text: string ref
+);
+
+valuebind(
+ int val: @value ref,
+ unique int expr: @expr ref
+);
+
+fieldoffsets(
+ unique int id: @variable ref,
+ int byteoffset: int ref,
+ int bitoffset: int ref
+);
+
+bitfield(
+ unique int id: @variable ref,
+ int bits: int ref,
+ int declared_bits: int ref
+);
+
+/* TODO
+memberprefix(
+ int member: @expr ref,
+ int prefix: @expr ref
+);
+*/
+
+/*
+ kind(1) = mbrcallexpr
+ kind(2) = mbrptrcallexpr
+ kind(3) = mbrptrmbrcallexpr
+ kind(4) = ptrmbrptrmbrcallexpr
+ kind(5) = mbrreadexpr // x.y
+ kind(6) = mbrptrreadexpr // p->y
+ kind(7) = mbrptrmbrreadexpr // x.*pm
+ kind(8) = mbrptrmbrptrreadexpr // x->*pm
+ kind(9) = staticmbrreadexpr // static x.y
+ kind(10) = staticmbrptrreadexpr // static p->y
+*/
+/* TODO
+memberaccess(
+ int member: @expr ref,
+ int kind: int ref
+);
+*/
+
+initialisers(
+ unique int init: @initialiser,
+ int var: @accessible ref,
+ unique int expr: @expr ref,
+ int location: @location_expr ref
+);
+
+braced_initialisers(
+ int init: @initialiser ref
+);
+
+/**
+ * An ancestor for the expression, for cases in which we cannot
+ * otherwise find the expression's parent.
+ */
+expr_ancestor(
+ int exp: @expr ref,
+ int ancestor: @element ref
+);
+
+exprs(
+ unique int id: @expr,
+ int kind: int ref,
+ int location: @location_expr ref
+);
+
+expr_reuse(
+ int reuse: @expr ref,
+ int original: @expr ref
+)
+
+/*
+ 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
+;
+
+@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
+ ;
+
+new_allocated_type(
+ unique int expr: @new_expr ref,
+ int type_id: @type ref
+);
+
+new_array_allocated_type(
+ unique int expr: @new_array_expr ref,
+ int type_id: @type ref
+);
+
+/**
+ * The field being initialized by an initializer expression within an aggregate
+ * initializer for a class/struct/union. Position is used to sort repeated initializers.
+ */
+#keyset[aggregate, position]
+aggregate_field_init(
+ int aggregate: @aggregateliteral ref,
+ int initializer: @expr ref,
+ int field: @membervariable ref,
+ int position: int ref
+);
+
+/**
+ * The index of the element being initialized by an initializer expression
+ * within an aggregate initializer for an array. Position is used to sort repeated initializers.
+ */
+#keyset[aggregate, position]
+aggregate_array_init(
+ int aggregate: @aggregateliteral ref,
+ int initializer: @expr ref,
+ int element_index: int ref,
+ int position: int ref
+);
+
+@ctorinit = @ctordirectinit
+ | @ctorvirtualinit
+ | @ctorfieldinit
+ | @ctordelegatinginit;
+@dtordestruct = @dtordirectdestruct
+ | @dtorvirtualdestruct
+ | @dtorfielddestruct;
+
+
+condition_decl_bind(
+ unique int expr: @condition_decl ref,
+ unique int decl: @declaration ref
+);
+
+typeid_bind(
+ unique int expr: @type_id ref,
+ int type_id: @type ref
+);
+
+uuidof_bind(
+ unique int expr: @uuidof ref,
+ int type_id: @type ref
+);
+
+@runtime_sizeof_or_alignof = @runtime_sizeof | @runtime_alignof;
+
+sizeof_bind(
+ unique int expr: @runtime_sizeof_or_alignof ref,
+ int type_id: @type ref
+);
+
+code_block(
+ unique int block: @literal ref,
+ unique int routine: @function ref
+);
+
+lambdas(
+ unique int expr: @lambdaexpr ref,
+ string default_capture: string ref,
+ boolean has_explicit_return_type: boolean ref
+);
+
+lambda_capture(
+ unique int id: @lambdacapture,
+ int lambda: @lambdaexpr ref,
+ int index: int ref,
+ int field: @membervariable ref,
+ boolean captured_by_reference: boolean ref,
+ boolean is_implicit: boolean ref,
+ int location: @location_default ref
+);
+
+@funbindexpr = @routineexpr
+ | @new_expr
+ | @delete_expr
+ | @delete_array_expr
+ | @ctordirectinit
+ | @ctorvirtualinit
+ | @ctordelegatinginit
+ | @dtordirectdestruct
+ | @dtorvirtualdestruct;
+
+@varbindexpr = @varaccess | @ctorfieldinit | @dtorfielddestruct;
+@addressable = @function | @variable ;
+@accessible = @addressable | @enumconstant ;
+
+@access = @varaccess | @routineexpr ;
+
+fold(
+ int expr: @foldexpr ref,
+ string operator: string ref,
+ boolean is_left_fold: boolean ref
+);
+
+stmts(
+ unique int id: @stmt,
+ int kind: int ref,
+ int location: @location_stmt ref
+);
+
+case @stmt.kind of
+ 1 = @stmt_expr
+| 2 = @stmt_if
+| 3 = @stmt_while
+| 4 = @stmt_goto
+| 5 = @stmt_label
+| 6 = @stmt_return
+| 7 = @stmt_block
+| 8 = @stmt_end_test_while // do { ... } while ( ... )
+| 9 = @stmt_for
+| 10 = @stmt_switch_case
+| 11 = @stmt_switch
+| 13 = @stmt_asm // "asm" statement or the body of an asm function
+| 15 = @stmt_try_block
+| 16 = @stmt_microsoft_try // Microsoft
+| 17 = @stmt_decl
+| 18 = @stmt_set_vla_size // C99
+| 19 = @stmt_vla_decl // C99
+| 25 = @stmt_assigned_goto // GNU
+| 26 = @stmt_empty
+| 27 = @stmt_continue
+| 28 = @stmt_break
+| 29 = @stmt_range_based_for // C++11
+// ... 30 @stmt_at_autoreleasepool_block deprecated
+// ... 31 @stmt_objc_for_in deprecated
+// ... 32 @stmt_at_synchronized deprecated
+| 33 = @stmt_handler
+// ... 34 @stmt_finally_end deprecated
+| 35 = @stmt_constexpr_if
+| 37 = @stmt_co_return
+;
+
+type_vla(
+ int type_id: @type ref,
+ int decl: @stmt_vla_decl ref
+);
+
+variable_vla(
+ int var: @variable ref,
+ int decl: @stmt_vla_decl ref
+);
+
+if_initialization(
+ unique int if_stmt: @stmt_if ref,
+ int init_id: @stmt ref
+);
+
+if_then(
+ unique int if_stmt: @stmt_if ref,
+ int then_id: @stmt ref
+);
+
+if_else(
+ unique int if_stmt: @stmt_if ref,
+ int else_id: @stmt ref
+);
+
+constexpr_if_initialization(
+ unique int constexpr_if_stmt: @stmt_constexpr_if ref,
+ int init_id: @stmt ref
+);
+
+constexpr_if_then(
+ unique int constexpr_if_stmt: @stmt_constexpr_if ref,
+ int then_id: @stmt ref
+);
+
+constexpr_if_else(
+ unique int constexpr_if_stmt: @stmt_constexpr_if ref,
+ int else_id: @stmt ref
+);
+
+while_body(
+ unique int while_stmt: @stmt_while ref,
+ int body_id: @stmt ref
+);
+
+do_body(
+ unique int do_stmt: @stmt_end_test_while ref,
+ int body_id: @stmt ref
+);
+
+switch_initialization(
+ unique int switch_stmt: @stmt_switch ref,
+ int init_id: @stmt ref
+);
+
+#keyset[switch_stmt, index]
+switch_case(
+ int switch_stmt: @stmt_switch ref,
+ int index: int ref,
+ int case_id: @stmt_switch_case ref
+);
+
+switch_body(
+ unique int switch_stmt: @stmt_switch ref,
+ int body_id: @stmt ref
+);
+
+@stmt_for_or_range_based_for = @stmt_for
+ | @stmt_range_based_for;
+
+for_initialization(
+ unique int for_stmt: @stmt_for_or_range_based_for ref,
+ int init_id: @stmt ref
+);
+
+for_condition(
+ unique int for_stmt: @stmt_for ref,
+ int condition_id: @expr ref
+);
+
+for_update(
+ unique int for_stmt: @stmt_for ref,
+ int update_id: @expr ref
+);
+
+for_body(
+ unique int for_stmt: @stmt_for ref,
+ int body_id: @stmt ref
+);
+
+@stmtparent = @stmt | @expr_stmt ;
+stmtparents(
+ unique int id: @stmt ref,
+ int index: int ref,
+ int parent: @stmtparent ref
+);
+
+ishandler(unique int block: @stmt_block ref);
+
+@cfgnode = @stmt | @expr | @function | @initialiser ;
+
+stmt_decl_bind(
+ int stmt: @stmt_decl ref,
+ int num: int ref,
+ int decl: @declaration ref
+);
+
+stmt_decl_entry_bind(
+ int stmt: @stmt_decl ref,
+ int num: int ref,
+ int decl_entry: @element ref
+);
+
+@functionorblock = @function | @stmt_block;
+
+blockscope(
+ unique int block: @stmt_block ref,
+ int enclosing: @functionorblock ref
+);
+
+@jump = @stmt_goto | @stmt_break | @stmt_continue;
+
+@jumporlabel = @jump | @stmt_label | @literal;
+
+jumpinfo(
+ unique int id: @jumporlabel ref,
+ string str: string ref,
+ int target: @stmt ref
+);
+
+preprocdirects(
+ unique int id: @preprocdirect,
+ int kind: int ref,
+ int location: @location_default ref
+);
+case @preprocdirect.kind of
+ 0 = @ppd_if
+| 1 = @ppd_ifdef
+| 2 = @ppd_ifndef
+| 3 = @ppd_elif
+| 4 = @ppd_else
+| 5 = @ppd_endif
+| 6 = @ppd_plain_include
+| 7 = @ppd_define
+| 8 = @ppd_undef
+| 9 = @ppd_line
+| 10 = @ppd_error
+| 11 = @ppd_pragma
+| 12 = @ppd_objc_import
+| 13 = @ppd_include_next
+| 18 = @ppd_warning
+;
+
+@ppd_include = @ppd_plain_include | @ppd_objc_import | @ppd_include_next;
+
+@ppd_branch = @ppd_if | @ppd_ifdef | @ppd_ifndef | @ppd_elif;
+
+preprocpair(
+ int begin : @ppd_branch ref,
+ int elseelifend : @preprocdirect ref
+);
+
+preproctrue(int branch : @ppd_branch ref);
+preprocfalse(int branch : @ppd_branch ref);
+
+preproctext(
+ unique int id: @preprocdirect ref,
+ string head: string ref,
+ string body: string ref
+);
+
+includes(
+ unique int id: @ppd_include ref,
+ int included: @file ref
+);
+
+link_targets(
+ int id: @link_target,
+ int binary: @file ref
+);
+
+link_parent(
+ int element : @element ref,
+ int link_target : @link_target ref
+);
+
+/* XML Files */
+
+xmlEncoding(unique int id: @file ref, string encoding: string ref);
+
+xmlDTDs(
+ unique int id: @xmldtd,
+ string root: string ref,
+ string publicId: string ref,
+ string systemId: string ref,
+ int fileid: @file ref
+);
+
+xmlElements(
+ unique int id: @xmlelement,
+ string name: string ref,
+ int parentid: @xmlparent ref,
+ int idx: int ref,
+ int fileid: @file ref
+);
+
+xmlAttrs(
+ unique int id: @xmlattribute,
+ int elementid: @xmlelement ref,
+ string name: string ref,
+ string value: string ref,
+ int idx: int ref,
+ int fileid: @file ref
+);
+
+xmlNs(
+ int id: @xmlnamespace,
+ string prefixName: string ref,
+ string URI: string ref,
+ int fileid: @file ref
+);
+
+xmlHasNs(
+ int elementId: @xmlnamespaceable ref,
+ int nsId: @xmlnamespace ref,
+ int fileid: @file ref
+);
+
+xmlComments(
+ unique int id: @xmlcomment,
+ string text: string ref,
+ int parentid: @xmlparent ref,
+ int fileid: @file ref
+);
+
+xmlChars(
+ unique int id: @xmlcharacters,
+ string text: string ref,
+ int parentid: @xmlparent ref,
+ int idx: int ref,
+ int isCDATA: int ref,
+ int fileid: @file ref
+);
+
+@xmlparent = @file | @xmlelement;
+@xmlnamespaceable = @xmlelement | @xmlattribute;
+
+xmllocations(
+ int xmlElement: @xmllocatable ref,
+ int location: @location_default ref
+);
+
+@xmllocatable = @xmlcharacters
+ | @xmlelement
+ | @xmlcomment
+ | @xmlattribute
+ | @xmldtd
+ | @file
+ | @xmlnamespace;
diff --git a/cpp/downgrades/abfce5c170f93e281948f7689ece373464fdaf87/upgrade.properties b/cpp/downgrades/abfce5c170f93e281948f7689ece373464fdaf87/upgrade.properties
new file mode 100644
index 00000000000..00edbefddf7
--- /dev/null
+++ b/cpp/downgrades/abfce5c170f93e281948f7689ece373464fdaf87/upgrade.properties
@@ -0,0 +1,4 @@
+description: Add value category to expr_reuse table
+compatibility: full
+expr_reuse.rel: run expr_reuse.qlo
+expr_types.rel: run expr_types.qlo
diff --git a/cpp/ql/lib/semmle/code/cpp/exprs/Expr.qll b/cpp/ql/lib/semmle/code/cpp/exprs/Expr.qll
index 42e441668f2..a41a0b35fc8 100644
--- a/cpp/ql/lib/semmle/code/cpp/exprs/Expr.qll
+++ b/cpp/ql/lib/semmle/code/cpp/exprs/Expr.qll
@@ -1340,5 +1340,13 @@ class ReuseExpr extends Expr, @reuseexpr {
/**
* Gets the expression that is being re-used.
*/
- Expr getReusedExpr() { expr_reuse(underlyingElement(this), unresolveElement(result)) }
+ Expr getReusedExpr() { expr_reuse(underlyingElement(this), unresolveElement(result), _) }
+
+ override Type getType() { result = this.getReusedExpr().getType() }
+
+ override predicate isLValueCategory() { expr_reuse(underlyingElement(this), _, 3) }
+
+ override predicate isXValueCategory() { expr_reuse(underlyingElement(this), _, 2) }
+
+ override predicate isPRValueCategory() { expr_reuse(underlyingElement(this), _, 1) }
}
diff --git a/cpp/ql/lib/semmlecode.cpp.dbscheme b/cpp/ql/lib/semmlecode.cpp.dbscheme
index aa7ff0ab32c..abfce5c170f 100644
--- a/cpp/ql/lib/semmlecode.cpp.dbscheme
+++ b/cpp/ql/lib/semmlecode.cpp.dbscheme
@@ -1515,7 +1515,8 @@ exprs(
expr_reuse(
int reuse: @expr ref,
- int original: @expr ref
+ int original: @expr ref,
+ int value_category: int ref
)
/*
diff --git a/cpp/ql/lib/semmlecode.cpp.dbscheme.stats b/cpp/ql/lib/semmlecode.cpp.dbscheme.stats
index 8d4a841aaf8..d6f973be1f6 100644
--- a/cpp/ql/lib/semmlecode.cpp.dbscheme.stats
+++ b/cpp/ql/lib/semmlecode.cpp.dbscheme.stats
@@ -2,7 +2,7 @@
@compilation
- 9657
+ 9654
@externalDataElement
@@ -18,71 +18,71 @@
@location_default
- 29786456
+ 29787737
@location_stmt
- 3820105
-
-
- @location_expr
- 13188716
+ 3820076
@diagnostic
- 5013
+ 5001
+
+
+ @location_expr
+ 13188614
@file
- 123134
+ 123139
@folder
- 16324
+ 16325
@macro_expansion
- 32971750
+ 32959239
@other_macro_reference
- 858211
+ 858248
@function
- 4646000
+ 4646200
@fun_decl
- 5009807
+ 5010023
@var_decl
- 8423062
+ 8423424
@type_decl
- 3242079
+ 3242218
@namespace_decl
- 311530
+ 311523
@using
- 369403
+ 369419
@static_assert
- 134655
+ 134652
@parameter
- 6576042
+ 6576325
@membervariable
- 1054758
+ 1054750
@globalvariable
@@ -90,11 +90,11 @@
@localvariable
- 576906
+ 576895
@enumconstant
- 241684
+ 241682
@errortype
@@ -322,35 +322,35 @@
@pointer
- 567632
+ 567656
@type_with_specifiers
- 1010263
+ 1010307
@array
- 110074
+ 110079
@routineptr
- 624659
+ 624503
@reference
- 1721148
+ 1720495
@gnu_vector
- 693
+ 671
@routinereference
- 235
+ 234
@rvalue_reference
- 620692
+ 620537
@block
@@ -358,43 +358,43 @@
@decltype
- 27052
+ 27053
@usertype
- 5229957
+ 5230182
@mangledname
- 6448244
+ 6448521
@type_mention
- 4029370
+ 4029338
@routinetype
- 538161
+ 538026
@ptrtomember
- 37779
+ 37781
@specifier
- 24720
+ 24721
@gnuattribute
- 685636
+ 685665
@stdattribute
- 487895
+ 487639
@declspec
- 243123
+ 243121
@msattribute
@@ -402,15 +402,15 @@
@alignas
- 9794
+ 9795
@attribute_arg_token
- 39179
+ 39180
@attribute_arg_constant_expr
- 370336
+ 370352
@attribute_arg_empty
@@ -430,19 +430,19 @@
@derivation
- 391086
+ 390988
@frienddecl
- 706182
+ 706005
@comment
- 8686670
+ 8682106
@namespace
- 12126
+ 12127
@specialnamequalifyingelement
@@ -450,15 +450,15 @@
@namequalifier
- 1516804
+ 1515301
@value
- 10777325
+ 10777241
@initialiser
- 1710241
+ 1710223
@address_of
@@ -466,15 +466,15 @@
@indirect
- 292663
+ 292660
@array_to_pointer
- 1430922
+ 1430911
@parexpr
- 3587688
+ 3587661
@arithnegexpr
@@ -490,15 +490,15 @@
@notexpr
- 276441
+ 276439
@postincrexpr
- 62049
+ 62048
@postdecrexpr
- 42038
+ 42037
@preincrexpr
@@ -510,75 +510,75 @@
@conditionalexpr
- 657276
+ 657271
@addexpr
- 398417
+ 398414
@subexpr
- 340778
+ 340775
@mulexpr
- 306374
+ 306372
@divexpr
- 133174
+ 133173
@remexpr
- 15622
+ 15618
@paddexpr
- 86667
+ 86666
@psubexpr
- 49903
+ 49902
@pdiffexpr
- 35197
+ 35178
@lshiftexpr
- 566336
+ 566331
@rshiftexpr
- 140848
+ 140847
@andexpr
- 489084
+ 489081
@orexpr
- 145473
+ 145472
@xorexpr
- 54178
+ 54177
@eqexpr
- 470677
+ 470674
@neexpr
- 301684
+ 301682
@gtexpr
- 104011
+ 104015
@ltexpr
- 101679
+ 101683
@geexpr
@@ -586,11 +586,11 @@
@leexpr
- 212539
+ 212537
@assignexpr
- 937011
+ 937004
@assignaddexpr
@@ -602,7 +602,7 @@
@assignmulexpr
- 8214
+ 8210
@assigndivexpr
@@ -610,7 +610,7 @@
@assignremexpr
- 414
+ 413
@assignlshiftexpr
@@ -642,23 +642,23 @@
@andlogicalexpr
- 249967
+ 249965
@orlogicalexpr
- 866161
+ 866154
@commaexpr
- 122776
+ 122711
@subscriptexpr
- 364887
+ 364880
@callexpr
- 316232
+ 316245
@vastartexpr
@@ -678,15 +678,15 @@
@varaccess
- 6029477
+ 6029430
@runtime_sizeof
- 295853
+ 295851
@runtime_alignof
- 49198
+ 49186
@expr_stmt
@@ -694,11 +694,11 @@
@routineexpr
- 3151079
+ 3150048
@type_operand
- 1128821
+ 1128813
@offsetofexpr
@@ -706,7 +706,7 @@
@typescompexpr
- 563810
+ 563806
@literal
@@ -722,27 +722,27 @@
@temp_init
- 796653
+ 795228
@errorexpr
- 46241
+ 46229
@reference_to
- 1570260
+ 1569867
@ref_indirect
- 1906893
+ 1906417
@vacuous_destructor_call
- 8037
+ 8035
@assume
- 3231
+ 3230
@conjugation
@@ -794,31 +794,31 @@
@thisaccess
- 1117586
+ 1117561
@new_expr
- 47006
+ 46995
@delete_expr
- 11621
+ 11618
@throw_expr
- 21061
+ 21053
@condition_decl
- 40853
+ 40753
@braced_init_list
- 1067
+ 1064
@type_id
- 35977
+ 35968
@sizeof_pack
@@ -878,11 +878,11 @@
@isconvtoexpr
- 207
+ 206
@isemptyexpr
- 1461
+ 1460
@isenumexpr
@@ -914,7 +914,7 @@
@delete_array_expr
- 1365
+ 1364
@new_array_expr
@@ -926,55 +926,55 @@
@ctordirectinit
- 111410
+ 111383
@ctorvirtualinit
- 6322
+ 6320
@ctorfieldinit
- 198326
+ 198277
@ctordelegatinginit
- 3305
+ 3304
@dtordirectdestruct
- 41231
+ 41220
@dtorvirtualdestruct
- 4070
+ 4069
@dtorfielddestruct
- 41126
+ 41116
@static_cast
- 214451
+ 214369
@reinterpret_cast
- 30745
+ 30729
@const_cast
- 34990
+ 34971
@dynamic_cast
- 1007
+ 1006
@lambdaexpr
- 21455
+ 21456
@param_ref
- 236428
+ 235847
@noopexpr
@@ -994,7 +994,7 @@
@istriviallydestructibleexpr
- 828
+ 827
@istriviallyassignableexpr
@@ -1002,7 +1002,7 @@
@isnothrowassignableexpr
- 4140
+ 4138
@istrivialexpr
@@ -1038,7 +1038,7 @@
@isnothrowconstructibleexpr
- 14285
+ 14278
@hasfinalizerexpr
@@ -1074,11 +1074,11 @@
@isfinalexpr
- 1670
+ 1669
@noexceptexpr
- 24725
+ 24664
@builtinshufflevector
@@ -1090,7 +1090,7 @@
@builtinaddressof
- 13117
+ 13114
@vec_fill
@@ -1134,7 +1134,7 @@
@builtinshuffle
- 1902
+ 1901
@blockassignexpr
@@ -1250,67 +1250,67 @@
@reuseexpr
- 331632
+ 333955
@lambdacapture
- 27985
+ 27986
@stmt_expr
- 1486111
+ 1486099
@stmt_if
- 725956
+ 725951
@stmt_while
- 29152
+ 29141
@stmt_goto
- 110697
+ 110696
@stmt_label
- 53145
+ 53144
@stmt_return
- 1284984
+ 1285039
@stmt_block
- 1423977
+ 1424038
@stmt_end_test_while
- 148882
+ 148881
@stmt_for
- 61560
+ 61559
@stmt_switch_case
- 201865
+ 207702
@stmt_switch
- 20788
+ 20787
@stmt_asm
- 109989
+ 109988
@stmt_decl
- 589211
+ 588988
@stmt_empty
- 191899
+ 191895
@stmt_continue
@@ -1318,11 +1318,11 @@
@stmt_break
- 103183
+ 103193
@stmt_try_block
- 45181
+ 45069
@stmt_microsoft_try
@@ -1346,11 +1346,11 @@
@stmt_handler
- 62891
+ 62736
@stmt_constexpr_if
- 52071
+ 52043
@stmt_co_return
@@ -1358,39 +1358,39 @@
@ppd_if
- 666512
+ 666541
@ppd_ifdef
- 263060
+ 263071
@ppd_ifndef
- 266325
+ 266336
@ppd_elif
- 25186
+ 25187
@ppd_else
- 208955
+ 208964
@ppd_endif
- 1195898
+ 1195950
@ppd_plain_include
- 311101
+ 311114
@ppd_define
- 2408524
+ 2407258
@ppd_undef
- 258396
+ 258407
@ppd_include_next
@@ -1406,7 +1406,7 @@
@ppd_pragma
- 311805
+ 311642
@ppd_objc_import
@@ -1418,7 +1418,7 @@
@link_target
- 819
+ 817
@xmldtd
@@ -1436,23 +1436,23 @@
@xmlnamespace
4185
-
- @xmlcomment
- 26812
-
@xmlcharacters
439958
+
+ @xmlcomment
+ 26812
+
compilations
- 9657
+ 9654
id
- 9657
+ 9654
cwd
@@ -1470,7 +1470,7 @@
1
2
- 9657
+ 9654
@@ -1496,7 +1496,7 @@
compilation_args
- 652589
+ 652584
id
@@ -1508,7 +1508,7 @@
arg
- 34463
+ 34462
@@ -2044,7 +2044,7 @@
seconds
- 9828
+ 9748
@@ -2125,47 +2125,47 @@
3
4
- 719
+ 759
4
5
- 279
+ 239
5
- 8
- 159
+ 7
+ 119
- 9
+ 8
10
159
10
+ 11
+ 79
+
+
+ 11
12
159
12
- 16
- 119
-
-
- 16
- 18
+ 17
159
- 19
- 43
+ 18
+ 22
159
- 57
- 92
- 79
+ 25
+ 98
+ 159
@@ -2233,22 +2233,22 @@
3
4
- 1478
+ 1438
4
5
- 279
+ 319
5
6
- 239
+ 199
6
7
- 439
+ 479
7
@@ -2257,18 +2257,18 @@
8
- 9
- 199
-
-
- 9
- 23
+ 10
279
- 24
- 90
- 279
+ 10
+ 26
+ 239
+
+
+ 26
+ 84
+ 239
@@ -2316,21 +2316,16 @@
3
4
+ 79
+
+
+ 137
+ 138
39
- 4
- 5
- 39
-
-
- 136
- 137
- 39
-
-
- 146
- 147
+ 142
+ 143
39
@@ -2347,27 +2342,27 @@
1
2
- 4834
+ 4994
2
3
- 2557
+ 2117
3
4
- 1238
+ 1278
4
5
- 719
+ 958
5
- 46
- 479
+ 47
+ 399
@@ -2383,32 +2378,32 @@
1
2
- 4474
+ 4554
2
3
- 2197
+ 1997
3
4
- 1318
+ 1238
4
5
- 679
+ 839
5
7
- 799
+ 878
7
- 76
- 359
+ 74
+ 239
@@ -2429,7 +2424,7 @@
2
3
- 1718
+ 1638
@@ -2439,15 +2434,15 @@
diagnostic_for
- 5471
+ 5457
diagnostic
- 5013
+ 5001
compilation
- 819
+ 817
file_number
@@ -2455,7 +2450,7 @@
file_number_diagnostic_number
- 400
+ 399
@@ -2469,7 +2464,7 @@
1
2
- 4861
+ 4849
2
@@ -2490,7 +2485,7 @@
1
2
- 5013
+ 5001
@@ -2506,7 +2501,7 @@
1
2
- 5013
+ 5001
@@ -2522,7 +2517,7 @@
5
6
- 610
+ 608
7
@@ -2558,7 +2553,7 @@
1
2
- 819
+ 817
@@ -2574,7 +2569,7 @@
5
6
- 610
+ 608
7
@@ -2755,7 +2750,7 @@
1
2
- 400
+ 399
@@ -2765,15 +2760,15 @@
compilation_finished
- 9657
+ 9654
id
- 9657
+ 9654
cpu_seconds
- 7330
+ 7763
elapsed_seconds
@@ -2791,7 +2786,7 @@
1
2
- 9657
+ 9654
@@ -2807,7 +2802,7 @@
1
2
- 9657
+ 9654
@@ -2823,17 +2818,17 @@
1
2
- 6054
+ 6510
2
3
- 850
+ 872
3
- 20
- 425
+ 14
+ 380
@@ -2849,12 +2844,12 @@
1
2
- 6692
+ 7461
2
3
- 637
+ 302
@@ -2868,53 +2863,63 @@
12
- 1
- 2
+ 2
+ 3
+ 22
+
+
+ 3
+ 4
11
- 2
- 3
- 33
+ 6
+ 7
+ 11
7
8
- 22
-
-
- 11
- 12
11
- 12
- 13
+ 8
+ 9
11
- 52
- 53
+ 9
+ 10
11
- 161
- 162
+ 37
+ 38
11
- 163
- 164
+ 47
+ 48
11
- 184
- 185
+ 118
+ 119
11
- 259
- 260
+ 140
+ 141
+ 11
+
+
+ 229
+ 230
+ 11
+
+
+ 255
+ 256
11
@@ -2929,53 +2934,63 @@
12
- 1
- 2
+ 2
+ 3
+ 22
+
+
+ 3
+ 4
11
- 2
- 3
- 33
+ 6
+ 7
+ 11
7
8
- 22
-
-
- 11
- 12
11
- 12
- 13
+ 8
+ 9
11
- 52
- 53
+ 9
+ 10
11
- 115
- 116
+ 37
+ 38
11
- 119
- 120
+ 47
+ 48
11
- 140
- 141
+ 97
+ 98
11
- 242
- 243
+ 112
+ 113
+ 11
+
+
+ 183
+ 184
+ 11
+
+
+ 208
+ 209
11
@@ -4748,31 +4763,31 @@
locations_default
- 29786456
+ 29787737
id
- 29786456
+ 29787737
container
- 123134
+ 123139
startLine
- 2093288
+ 2093378
startColumn
- 36847
+ 36848
endLine
- 2097486
+ 2097576
endColumn
- 48041
+ 48043
@@ -4786,7 +4801,7 @@
1
2
- 29786456
+ 29787737
@@ -4802,7 +4817,7 @@
1
2
- 29786456
+ 29787737
@@ -4818,7 +4833,7 @@
1
2
- 29786456
+ 29787737
@@ -4834,7 +4849,7 @@
1
2
- 29786456
+ 29787737
@@ -4850,7 +4865,7 @@
1
2
- 29786456
+ 29787737
@@ -4866,7 +4881,7 @@
1
11
- 9794
+ 9795
11
@@ -4881,12 +4896,12 @@
30
42
- 9794
+ 9795
43
61
- 9794
+ 9795
61
@@ -4896,7 +4911,7 @@
80
106
- 9794
+ 9795
109
@@ -4952,7 +4967,7 @@
13
20
- 9794
+ 9795
20
@@ -4962,7 +4977,7 @@
32
43
- 9794
+ 9795
44
@@ -5023,7 +5038,7 @@
1
4
- 8861
+ 8862
4
@@ -5033,7 +5048,7 @@
5
6
- 7462
+ 7463
6
@@ -5048,12 +5063,12 @@
10
15
- 10727
+ 10728
15
23
- 9794
+ 9795
23
@@ -5063,7 +5078,7 @@
28
34
- 9794
+ 9795
34
@@ -5078,7 +5093,7 @@
55
66
- 9794
+ 9795
66
@@ -5109,7 +5124,7 @@
13
20
- 9794
+ 9795
20
@@ -5119,7 +5134,7 @@
32
43
- 9794
+ 9795
43
@@ -5180,7 +5195,7 @@
1
9
- 9794
+ 9795
9
@@ -5230,12 +5245,12 @@
66
74
- 9794
+ 9795
74
78
- 9794
+ 9795
78
@@ -5256,47 +5271,47 @@
1
2
- 581158
+ 581183
2
3
- 314832
+ 314846
3
4
- 194963
+ 194971
4
6
- 162313
+ 162320
6
10
- 183302
+ 183310
10
16
- 161847
+ 161854
16
25
- 168377
+ 168384
25
45
- 157183
+ 157189
45
160
- 157649
+ 157656
160
@@ -5317,42 +5332,42 @@
1
2
- 870338
+ 870375
2
3
- 273321
+ 273333
3
5
- 193563
+ 193572
5
8
- 173507
+ 173515
8
13
- 187966
+ 187974
13
20
- 160914
+ 160921
20
51
- 159515
+ 159522
51
265
- 74160
+ 74163
@@ -5368,47 +5383,47 @@
1
2
- 611475
+ 611501
2
3
- 312967
+ 312980
3
4
- 198228
+ 198236
4
6
- 182836
+ 182844
6
9
- 173041
+ 173048
9
13
- 163246
+ 163253
13
19
- 173974
+ 173981
19
29
- 165112
+ 165119
29
52
- 112407
+ 112411
@@ -5424,22 +5439,22 @@
1
2
- 1530321
+ 1530386
2
3
- 348415
+ 348430
3
5
- 161847
+ 161854
5
16
- 52705
+ 52707
@@ -5455,47 +5470,47 @@
1
2
- 585822
+ 585847
2
3
- 316232
+ 316245
3
4
- 197761
+ 197770
4
6
- 168377
+ 168384
6
10
- 191698
+ 191706
10
15
- 165578
+ 165585
15
22
- 167910
+ 167918
22
34
- 164179
+ 164186
34
66
- 135727
+ 135733
@@ -5597,7 +5612,7 @@
23
35
- 3264
+ 3265
38
@@ -5617,7 +5632,7 @@
73
84
- 3264
+ 3265
84
@@ -5627,12 +5642,12 @@
96
101
- 3264
+ 3265
101
105
- 3264
+ 3265
107
@@ -5835,12 +5850,12 @@
7
11
- 3264
+ 3265
11
16
- 3264
+ 3265
16
@@ -5850,7 +5865,7 @@
22
24
- 3264
+ 3265
24
@@ -5860,12 +5875,12 @@
29
34
- 3264
+ 3265
34
41
- 3264
+ 3265
41
@@ -5906,47 +5921,47 @@
1
2
- 591419
+ 591444
2
3
- 306903
+ 306916
3
4
- 198228
+ 198236
4
6
- 159515
+ 159522
6
10
- 182836
+ 182844
10
16
- 160448
+ 160455
16
25
- 170709
+ 170716
25
45
- 158116
+ 158122
45
160
- 158116
+ 158122
160
@@ -5967,42 +5982,42 @@
1
2
- 885729
+ 885767
2
3
- 259795
+ 259806
3
4
- 125000
+ 125005
4
6
- 140858
+ 140864
6
10
- 184701
+ 184709
10
15
- 168377
+ 168384
15
26
- 163246
+ 163253
26
120
- 158116
+ 158122
121
@@ -6023,22 +6038,22 @@
1
2
- 1527988
+ 1528054
2
3
- 341418
+ 341433
3
5
- 170709
+ 170716
5
10
- 57369
+ 57372
@@ -6054,47 +6069,47 @@
1
2
- 622669
+ 622696
2
3
- 303172
+ 303185
3
4
- 201493
+ 201501
4
6
- 183769
+ 183777
6
9
- 169776
+ 169783
9
13
- 166511
+ 166518
13
19
- 174907
+ 174914
19
29
- 160914
+ 160921
29
52
- 114272
+ 114277
@@ -6110,47 +6125,47 @@
1
2
- 597949
+ 597975
2
3
- 306903
+ 306916
3
4
- 196362
+ 196370
4
6
- 169310
+ 169317
6
9
- 154851
+ 154857
9
14
- 168377
+ 168384
14
21
- 178638
+ 178646
21
32
- 163246
+ 163253
32
60
- 158116
+ 158122
60
@@ -6434,17 +6449,17 @@
35
39
- 3264
+ 3265
39
42
- 3264
+ 3265
42
44
- 3264
+ 3265
44
@@ -6545,11 +6560,11 @@
locations_stmt
- 3820105
+ 3820076
id
- 3820105
+ 3820076
container
@@ -6557,7 +6572,7 @@
startLine
- 200183
+ 200182
startColumn
@@ -6565,7 +6580,7 @@
endLine
- 194439
+ 194437
endColumn
@@ -6583,7 +6598,7 @@
1
2
- 3820105
+ 3820076
@@ -6599,7 +6614,7 @@
1
2
- 3820105
+ 3820076
@@ -6615,7 +6630,7 @@
1
2
- 3820105
+ 3820076
@@ -6631,7 +6646,7 @@
1
2
- 3820105
+ 3820076
@@ -6647,7 +6662,7 @@
1
2
- 3820105
+ 3820076
@@ -7098,7 +7113,7 @@
37
45
- 15112
+ 15111
45
@@ -7139,7 +7154,7 @@
4
6
- 14412
+ 14411
6
@@ -7276,7 +7291,7 @@
3
4
- 18468
+ 18467
4
@@ -7321,7 +7336,7 @@
12
14
- 15812
+ 15811
14
@@ -7342,7 +7357,7 @@
1
2
- 22174
+ 22173
2
@@ -7798,7 +7813,7 @@
3
4
- 11509
+ 11508
4
@@ -7869,7 +7884,7 @@
2
3
- 16162
+ 16161
3
@@ -7889,7 +7904,7 @@
8
11
- 15915
+ 15914
11
@@ -7935,7 +7950,7 @@
1
2
- 32530
+ 32529
2
@@ -8016,7 +8031,7 @@
3
4
- 16862
+ 16861
4
@@ -8031,7 +8046,7 @@
6
7
- 20465
+ 20464
7
@@ -8082,7 +8097,7 @@
3
4
- 12559
+ 12558
4
@@ -8117,7 +8132,7 @@
19
22
- 14062
+ 14061
22
@@ -8527,11 +8542,11 @@
locations_expr
- 13188716
+ 13188614
id
- 13188716
+ 13188614
container
@@ -8539,7 +8554,7 @@
startLine
- 192236
+ 192235
startColumn
@@ -8547,7 +8562,7 @@
endLine
- 192215
+ 192214
endColumn
@@ -8565,7 +8580,7 @@
1
2
- 13188716
+ 13188614
@@ -8581,7 +8596,7 @@
1
2
- 13188716
+ 13188614
@@ -8597,7 +8612,7 @@
1
2
- 13188716
+ 13188614
@@ -8613,7 +8628,7 @@
1
2
- 13188716
+ 13188614
@@ -8629,7 +8644,7 @@
1
2
- 13188716
+ 13188614
@@ -9050,7 +9065,7 @@
5
9
- 16512
+ 16511
9
@@ -9202,7 +9217,7 @@
7
11
- 16718
+ 16717
11
@@ -9268,7 +9283,7 @@
2
3
- 44698
+ 44697
3
@@ -9339,7 +9354,7 @@
38
43
- 15565
+ 15564
43
@@ -9760,12 +9775,12 @@
1
5
- 16162
+ 16161
5
9
- 16512
+ 16511
9
@@ -9775,7 +9790,7 @@
15
23
- 15112
+ 15111
23
@@ -9785,12 +9800,12 @@
32
44
- 14762
+ 14761
44
60
- 14515
+ 14514
60
@@ -9912,17 +9927,17 @@
1
2
- 95634
+ 95633
2
3
- 50092
+ 50091
3
4
- 29421
+ 29420
4
@@ -9958,7 +9973,7 @@
7
11
- 16512
+ 16511
11
@@ -10059,7 +10074,7 @@
38
43
- 16162
+ 16161
43
@@ -10459,23 +10474,23 @@
numlines
- 1382466
+ 1382525
element_id
- 1375469
+ 1375529
num_lines
- 101679
+ 101683
num_code
- 84888
+ 84891
num_comment
- 59701
+ 59704
@@ -10489,7 +10504,7 @@
1
2
- 1368473
+ 1368532
2
@@ -10510,7 +10525,7 @@
1
2
- 1369406
+ 1369465
2
@@ -10531,7 +10546,7 @@
1
2
- 1375469
+ 1375529
@@ -10547,17 +10562,17 @@
1
2
- 68097
+ 68100
2
3
- 12126
+ 12127
3
4
- 7462
+ 7463
4
@@ -10583,12 +10598,12 @@
1
2
- 70429
+ 70432
2
3
- 12126
+ 12127
3
@@ -10619,22 +10634,22 @@
1
2
- 69496
+ 69499
2
3
- 14925
+ 14926
3
4
- 10727
+ 10728
4
7
- 6529
+ 6530
@@ -10650,22 +10665,22 @@
1
2
- 52705
+ 52707
2
3
- 14458
+ 14459
3
5
- 6529
+ 6530
5
42
- 6529
+ 6530
44
@@ -10686,7 +10701,7 @@
1
2
- 52705
+ 52707
2
@@ -10701,7 +10716,7 @@
5
8
- 6529
+ 6530
8
@@ -10722,7 +10737,7 @@
1
2
- 53171
+ 53174
2
@@ -10732,7 +10747,7 @@
3
5
- 7462
+ 7463
5
@@ -10742,7 +10757,7 @@
7
10
- 3264
+ 3265
@@ -10758,7 +10773,7 @@
1
2
- 34515
+ 34516
2
@@ -10799,7 +10814,7 @@
1
2
- 34515
+ 34516
2
@@ -10840,7 +10855,7 @@
1
2
- 34515
+ 34516
2
@@ -10875,11 +10890,11 @@
diagnostics
- 5013
+ 5001
id
- 5013
+ 5001
severity
@@ -10891,11 +10906,11 @@
error_message
- 400
+ 399
full_error_message
- 4213
+ 4202
location
@@ -10913,7 +10928,7 @@
1
2
- 5013
+ 5001
@@ -10929,7 +10944,7 @@
1
2
- 5013
+ 5001
@@ -10945,7 +10960,7 @@
1
2
- 5013
+ 5001
@@ -10961,7 +10976,7 @@
1
2
- 5013
+ 5001
@@ -10977,7 +10992,7 @@
1
2
- 5013
+ 5001
@@ -11209,7 +11224,7 @@
1
2
- 400
+ 399
@@ -11225,7 +11240,7 @@
1
2
- 400
+ 399
@@ -11303,7 +11318,7 @@
1
2
- 4194
+ 4183
43
@@ -11324,7 +11339,7 @@
1
2
- 4213
+ 4202
@@ -11340,7 +11355,7 @@
1
2
- 4213
+ 4202
@@ -11356,7 +11371,7 @@
1
2
- 4213
+ 4202
@@ -11372,7 +11387,7 @@
1
2
- 4213
+ 4202
@@ -11507,15 +11522,15 @@
files
- 123134
+ 123139
id
- 123134
+ 123139
name
- 123134
+ 123139
@@ -11529,7 +11544,7 @@
1
2
- 123134
+ 123139
@@ -11545,7 +11560,7 @@
1
2
- 123134
+ 123139
@@ -11555,15 +11570,15 @@
folders
- 16324
+ 16325
id
- 16324
+ 16325
name
- 16324
+ 16325
@@ -11577,7 +11592,7 @@
1
2
- 16324
+ 16325
@@ -11593,7 +11608,7 @@
1
2
- 16324
+ 16325
@@ -11603,15 +11618,15 @@
containerparent
- 138526
+ 138532
parent
- 16324
+ 16325
child
- 138526
+ 138532
@@ -11625,12 +11640,12 @@
1
2
- 7462
+ 7463
2
3
- 3264
+ 3265
3
@@ -11666,7 +11681,7 @@
1
2
- 138526
+ 138532
@@ -11676,11 +11691,11 @@
fileannotations
- 5084962
+ 5083033
id
- 4856
+ 4855
kind
@@ -11688,11 +11703,11 @@
name
- 54298
+ 54277
value
- 45647
+ 45630
@@ -11711,7 +11726,7 @@
2
3
- 4688
+ 4687
@@ -11772,7 +11787,7 @@
936
937
- 1410
+ 1409
1083
@@ -11838,7 +11853,7 @@
1501
1502
- 1410
+ 1409
1504
@@ -11848,7 +11863,7 @@
1972
4080
- 235
+ 234
@@ -11927,57 +11942,57 @@
1
2
- 8784
+ 8781
2
3
- 6166
+ 6163
3
5
- 4140
+ 4139
5
9
- 4230
+ 4228
9
14
- 3950
+ 3948
14
18
- 4140
+ 4139
18
20
- 4677
+ 4676
20
34
- 4185
+ 4183
34
128
- 4465
+ 4463
128
229
- 4084
+ 4083
229
387
- 4207
+ 4206
387
@@ -11998,7 +12013,7 @@
1
2
- 54298
+ 54277
@@ -12014,62 +12029,62 @@
1
2
- 8796
+ 8792
2
3
- 7990
+ 7987
3
4
- 2540
+ 2539
4
6
- 4476
+ 4474
6
9
- 4095
+ 4094
9
14
- 4174
+ 4172
14
17
- 4095
+ 4094
17
22
- 4554
+ 4552
22
41
- 4174
+ 4172
41
82
- 4129
+ 4127
82
157
- 4073
+ 4071
158
1895
- 1197
+ 1196
@@ -12085,62 +12100,62 @@
1
2
- 7095
+ 7092
2
5
- 2215
+ 2214
5
8
- 3301
+ 3300
8
15
- 3502
+ 3501
15
17
- 2517
+ 2516
17
19
- 4107
+ 4105
19
34
- 3301
+ 3300
34
189
- 3592
+ 3590
189
201
- 3581
+ 3579
201
266
- 3525
+ 3523
266
321
- 3648
+ 3646
322
399
- 3916
+ 3915
399
@@ -12161,7 +12176,7 @@
1
2
- 45636
+ 45619
2
@@ -12182,67 +12197,67 @@
1
2
- 7117
+ 7114
2
5
- 2562
+ 2561
5
8
- 3480
+ 3479
8
15
- 3525
+ 3523
15
17
- 2808
+ 2807
17
19
- 3558
+ 3557
19
29
- 3480
+ 3479
29
39
- 3637
+ 3635
39
48
- 3581
+ 3579
48
74
- 3536
+ 3534
74
102
- 3424
+ 3423
102
119
- 3569
+ 3568
119
146
- 1365
+ 1364
@@ -12252,15 +12267,15 @@
inmacroexpansion
- 109785545
+ 109784721
id
- 18028412
+ 18028276
inv
- 2700329
+ 2700307
@@ -12274,37 +12289,37 @@
1
3
- 1582049
+ 1582036
3
5
- 1077861
+ 1077853
5
6
- 1184952
+ 1184943
6
7
- 4820205
+ 4820169
7
8
- 6386332
+ 6386284
8
9
- 2605405
+ 2605386
9
21
- 371604
+ 371602
@@ -12320,32 +12335,32 @@
1
2
- 378447
+ 378443
2
3
- 544135
+ 544126
3
4
- 351535
+ 351533
4
7
- 200670
+ 200669
7
8
- 207164
+ 207162
8
9
- 241902
+ 241901
9
@@ -12355,17 +12370,17 @@
10
11
- 325505
+ 325503
11
337
- 224864
+ 224867
339
423
- 206365
+ 206363
423
@@ -12380,15 +12395,15 @@
affectedbymacroexpansion
- 35691161
+ 35690892
id
- 5157043
+ 5157002
inv
- 2784936
+ 2784914
@@ -12402,37 +12417,37 @@
1
2
- 2816098
+ 2816076
2
3
- 560161
+ 560157
3
4
- 264922
+ 264920
4
5
- 565827
+ 565823
5
12
- 391926
+ 391923
12
50
- 407425
+ 407422
50
9900
- 150681
+ 150680
@@ -12448,62 +12463,62 @@
1
4
- 229130
+ 229127
4
7
- 231802
+ 231800
7
9
- 220491
+ 220489
9
12
- 251102
+ 251100
12
13
- 333997
+ 333995
13
14
- 165598
+ 165596
14
15
- 298861
+ 298859
15
16
- 121850
+ 121849
16
17
- 276624
+ 276622
17
18
- 146949
+ 146948
18
20
- 252149
+ 252148
20
25
- 208991
+ 208989
25
@@ -12518,19 +12533,19 @@
macroinvocations
- 33202987
+ 33190389
id
- 33202987
+ 33190389
macro_id
- 78795
+ 78765
location
- 753796
+ 753510
kind
@@ -12548,7 +12563,7 @@
1
2
- 33202987
+ 33190389
@@ -12564,7 +12579,7 @@
1
2
- 33202987
+ 33190389
@@ -12580,7 +12595,7 @@
1
2
- 33202987
+ 33190389
@@ -12596,52 +12611,52 @@
1
2
- 16114
+ 16108
2
3
- 16428
+ 16421
3
4
- 3088
+ 3087
4
5
- 5226
+ 5224
5
8
- 5640
+ 5638
8
13
- 6054
+ 6051
13
26
- 6121
+ 6119
26
61
- 6009
+ 6007
61
199
- 5919
+ 5917
199
1697
- 5964
+ 5962
1716
@@ -12662,37 +12677,37 @@
1
2
- 42100
+ 42084
2
3
- 10306
+ 10302
3
4
- 5114
+ 5112
4
6
- 6781
+ 6779
6
13
- 6423
+ 6421
13
66
- 5953
+ 5951
66
3614
- 2115
+ 2114
@@ -12708,12 +12723,12 @@
1
2
- 73110
+ 73082
2
3
- 5684
+ 5682
@@ -12729,37 +12744,37 @@
1
2
- 278787
+ 278681
2
3
- 168154
+ 168090
3
4
- 70144
+ 70117
4
5
- 59770
+ 59747
5
9
- 69786
+ 69759
9
21
- 58595
+ 58573
21
244764
- 48557
+ 48538
@@ -12775,12 +12790,12 @@
1
2
- 708025
+ 707756
2
350
- 45770
+ 45753
@@ -12796,7 +12811,7 @@
1
2
- 753796
+ 753510
@@ -12869,15 +12884,15 @@
macroparent
- 29691721
+ 29680455
id
- 29691721
+ 29680455
parent_id
- 23085760
+ 23077000
@@ -12891,7 +12906,7 @@
1
2
- 29691721
+ 29680455
@@ -12907,17 +12922,17 @@
1
2
- 17837443
+ 17830675
2
3
- 4420895
+ 4419217
3
88
- 827421
+ 827107
@@ -12927,15 +12942,15 @@
macrolocationbind
- 4044034
+ 4043998
id
- 2831314
+ 2831290
location
- 2021186
+ 2021169
@@ -12949,17 +12964,17 @@
1
2
- 2230051
+ 2230032
2
3
- 341145
+ 341142
3
7
- 230539
+ 230537
7
@@ -12980,22 +12995,22 @@
1
2
- 1611118
+ 1611104
2
3
- 177692
+ 177691
3
8
- 156878
+ 156877
8
723
- 75497
+ 75496
@@ -13005,11 +13020,11 @@
macro_argument_unexpanded
- 83818746
+ 83786944
invocation
- 25989002
+ 25979141
argument_index
@@ -13017,7 +13032,7 @@
text
- 315549
+ 315429
@@ -13031,22 +13046,22 @@
1
2
- 7368800
+ 7366004
2
3
- 10582220
+ 10578205
3
4
- 6086111
+ 6083801
4
67
- 1951870
+ 1951130
@@ -13062,22 +13077,22 @@
1
2
- 7438351
+ 7435529
2
3
- 10727500
+ 10723430
3
4
- 5921224
+ 5918977
4
67
- 1901925
+ 1901204
@@ -13093,7 +13108,7 @@
41230
41231
- 649
+ 648
41432
@@ -13119,7 +13134,7 @@
2
3
- 649
+ 648
13
@@ -13145,57 +13160,57 @@
1
2
- 34770
+ 34756
2
3
- 60732
+ 60709
3
4
- 17592
+ 17585
4
5
- 44674
+ 44657
5
7
- 23713
+ 23704
7
12
- 18364
+ 18357
12
16
- 21430
+ 21422
16
23
- 24765
+ 24756
23
42
- 24116
+ 24107
42
129
- 23870
+ 23861
129
522417
- 21520
+ 21511
@@ -13211,17 +13226,17 @@
1
2
- 228204
+ 228118
2
3
- 77150
+ 77120
3
9
- 10194
+ 10191
@@ -13231,11 +13246,11 @@
macro_argument_expanded
- 83818746
+ 83786944
invocation
- 25989002
+ 25979141
argument_index
@@ -13243,7 +13258,7 @@
text
- 191229
+ 191157
@@ -13257,22 +13272,22 @@
1
2
- 7368800
+ 7366004
2
3
- 10582220
+ 10578205
3
4
- 6086111
+ 6083801
4
67
- 1951870
+ 1951130
@@ -13288,22 +13303,22 @@
1
2
- 10597171
+ 10593150
2
3
- 9122547
+ 9119085
3
4
- 5163131
+ 5161172
4
9
- 1106152
+ 1105732
@@ -13319,7 +13334,7 @@
41230
41231
- 649
+ 648
41432
@@ -13371,62 +13386,62 @@
1
2
- 20613
+ 20605
2
3
- 36985
+ 36971
3
4
- 8986
+ 8982
4
5
- 16237
+ 16231
5
6
- 2394
+ 2393
6
7
- 22650
+ 22641
7
9
- 14671
+ 14665
9
14
- 11940
+ 11936
14
19
- 14425
+ 14419
19
48
- 14346
+ 14341
48
151
- 14357
+ 14352
152
1060462
- 13619
+ 13614
@@ -13442,17 +13457,17 @@
1
2
- 96778
+ 96742
2
3
- 80171
+ 80141
3
66
- 14279
+ 14274
@@ -13462,19 +13477,19 @@
functions
- 4646000
+ 4646200
id
- 4646000
+ 4646200
name
- 1916982
+ 1917064
kind
- 3264
+ 3265
@@ -13488,7 +13503,7 @@
1
2
- 4646000
+ 4646200
@@ -13504,7 +13519,7 @@
1
2
- 4646000
+ 4646200
@@ -13520,22 +13535,22 @@
1
2
- 1504201
+ 1504266
2
3
- 152052
+ 152059
3
5
- 150186
+ 150193
5
1676
- 110541
+ 110546
@@ -13551,7 +13566,7 @@
1
2
- 1916516
+ 1916598
2
@@ -13658,15 +13673,15 @@
function_entry_point
- 1156719
+ 1156769
id
- 1146924
+ 1146973
entry_point
- 1156719
+ 1156769
@@ -13680,12 +13695,12 @@
1
2
- 1137129
+ 1137178
2
3
- 9794
+ 9795
@@ -13701,7 +13716,7 @@
1
2
- 1156719
+ 1156769
@@ -13711,15 +13726,15 @@
function_return_type
- 4651131
+ 4651331
id
- 4646000
+ 4646200
return_type
- 987409
+ 987451
@@ -13733,7 +13748,7 @@
1
2
- 4640870
+ 4641069
2
@@ -13754,22 +13769,22 @@
1
2
- 510262
+ 510284
2
3
- 375933
+ 375949
3
10
- 75093
+ 75096
10
2516
- 26119
+ 26120
@@ -14091,59 +14106,59 @@
purefunctions
- 100917
+ 100915
id
- 100917
+ 100915
function_deleted
- 137593
+ 137599
id
- 137593
+ 137599
function_defaulted
- 73694
+ 73697
id
- 73694
+ 73697
function_prototyped
- 4554116
+ 4554311
id
- 4554116
+ 4554311
member_function_this_type
- 546094
+ 545957
id
- 546094
+ 545957
this_type
- 187436
+ 187389
@@ -14157,7 +14172,7 @@
1
2
- 546094
+ 545957
@@ -14173,32 +14188,32 @@
1
2
- 67674
+ 67657
2
3
- 44849
+ 44838
3
4
- 30201
+ 30193
4
5
- 15344
+ 15340
5
7
- 15379
+ 15375
7
66
- 13987
+ 13983
@@ -14208,27 +14223,27 @@
fun_decls
- 5014938
+ 5015153
id
- 5009807
+ 5010023
function
- 4502343
+ 4502537
type_id
- 986009
+ 986052
name
- 1819500
+ 1819579
location
- 3418385
+ 3418532
@@ -14242,7 +14257,7 @@
1
2
- 5009807
+ 5010023
@@ -14258,7 +14273,7 @@
1
2
- 5004676
+ 5004892
2
@@ -14279,7 +14294,7 @@
1
2
- 5009807
+ 5010023
@@ -14295,7 +14310,7 @@
1
2
- 5009807
+ 5010023
@@ -14311,17 +14326,17 @@
1
2
- 4073704
+ 4073879
2
3
- 355877
+ 355893
3
7
- 72761
+ 72764
@@ -14337,12 +14352,12 @@
1
2
- 4462697
+ 4462889
2
3
- 39645
+ 39647
@@ -14358,7 +14373,7 @@
1
2
- 4502343
+ 4502537
@@ -14374,12 +14389,12 @@
1
2
- 4130141
+ 4130318
2
4
- 371269
+ 371285
5
@@ -14400,22 +14415,22 @@
1
2
- 435635
+ 435654
2
3
- 438433
+ 438452
3
8
- 75093
+ 75096
8
2761
- 36847
+ 36848
@@ -14431,22 +14446,22 @@
1
2
- 519590
+ 519613
2
3
- 367538
+ 367554
3
11
- 75559
+ 75563
11
2477
- 23320
+ 23321
@@ -14462,17 +14477,17 @@
1
2
- 858677
+ 858714
2
5
- 89552
+ 89556
5
823
- 37779
+ 37781
@@ -14488,22 +14503,22 @@
1
2
- 754666
+ 754698
2
3
- 131530
+ 131535
3
10
- 74627
+ 74630
10
2030
- 25186
+ 25187
@@ -14519,27 +14534,27 @@
1
2
- 1234611
+ 1234664
2
3
- 266791
+ 266803
3
4
- 80690
+ 80693
4
6
- 136660
+ 136666
6
1710
- 100746
+ 100750
@@ -14555,22 +14570,22 @@
1
2
- 1413716
+ 1413777
2
3
- 151119
+ 151126
3
5
- 144123
+ 144129
5
1660
- 110541
+ 110546
@@ -14586,17 +14601,17 @@
1
2
- 1601216
+ 1601285
2
4
- 134795
+ 134800
4
930
- 83489
+ 83492
@@ -14612,27 +14627,27 @@
1
2
- 1255600
+ 1255654
2
3
- 293377
+ 293390
3
4
- 79757
+ 79761
4
8
- 137593
+ 137599
8
653
- 53171
+ 53174
@@ -14648,17 +14663,17 @@
1
2
- 2962227
+ 2962355
2
4
- 296176
+ 296188
4
55
- 159981
+ 159988
@@ -14674,17 +14689,17 @@
1
2
- 3029392
+ 3029522
2
6
- 262593
+ 262605
6
55
- 126399
+ 126405
@@ -14700,12 +14715,12 @@
1
2
- 3208496
+ 3208634
2
25
- 209888
+ 209897
@@ -14721,12 +14736,12 @@
1
2
- 3246276
+ 3246416
2
13
- 172108
+ 172116
@@ -14736,22 +14751,22 @@
fun_def
- 1935172
+ 1935256
id
- 1935172
+ 1935256
fun_specialized
- 26119
+ 26120
id
- 26119
+ 26120
@@ -14769,11 +14784,11 @@
fun_decl_specifiers
- 2903925
+ 2904050
id
- 1687970
+ 1688043
name
@@ -14791,17 +14806,17 @@
1
2
- 490672
+ 490693
2
3
- 1178641
+ 1178691
3
4
- 18656
+ 18657
@@ -14973,26 +14988,26 @@
fun_decl_empty_throws
- 1933773
+ 1933856
fun_decl
- 1933773
+ 1933856
fun_decl_noexcept
- 60559
+ 60528
fun_decl
- 60559
+ 60528
constant
- 60456
+ 60424
@@ -15006,7 +15021,7 @@
1
2
- 60559
+ 60528
@@ -15022,7 +15037,7 @@
1
2
- 60352
+ 60321
2
@@ -15037,11 +15052,11 @@
fun_decl_empty_noexcept
- 869871
+ 869909
fun_decl
- 869871
+ 869909
@@ -15146,11 +15161,11 @@
param_decl_bind
- 7379682
+ 7380000
id
- 7379682
+ 7380000
index
@@ -15158,7 +15173,7 @@
fun_decl
- 4222958
+ 4223140
@@ -15172,7 +15187,7 @@
1
2
- 7379682
+ 7380000
@@ -15188,7 +15203,7 @@
1
2
- 7379682
+ 7380000
@@ -15366,22 +15381,22 @@
1
2
- 2363345
+ 2363447
2
3
- 1060637
+ 1060682
3
4
- 502333
+ 502354
4
18
- 296642
+ 296655
@@ -15397,22 +15412,22 @@
1
2
- 2363345
+ 2363447
2
3
- 1060637
+ 1060682
3
4
- 502333
+ 502354
4
18
- 296642
+ 296655
@@ -15422,27 +15437,27 @@
var_decls
- 8493958
+ 8494323
id
- 8423062
+ 8423424
variable
- 7411865
+ 7412184
type_id
- 2384334
+ 2384436
name
- 666979
+ 667007
location
- 5306916
+ 5307144
@@ -15456,7 +15471,7 @@
1
2
- 8423062
+ 8423424
@@ -15472,12 +15487,12 @@
1
2
- 8354965
+ 8355324
2
3
- 68097
+ 68100
@@ -15493,7 +15508,7 @@
1
2
- 8423062
+ 8423424
@@ -15509,7 +15524,7 @@
1
2
- 8420264
+ 8420626
2
@@ -15530,17 +15545,17 @@
1
2
- 6560651
+ 6560933
2
3
- 697762
+ 697792
3
7
- 153451
+ 153458
@@ -15556,12 +15571,12 @@
1
2
- 7240690
+ 7241001
2
4
- 171175
+ 171183
@@ -15577,12 +15592,12 @@
1
2
- 7296660
+ 7296974
2
3
- 115205
+ 115210
@@ -15598,12 +15613,12 @@
1
2
- 6867088
+ 6867383
2
4
- 544777
+ 544800
@@ -15619,27 +15634,27 @@
1
2
- 1469220
+ 1469283
2
3
- 509329
+ 509351
3
4
- 97948
+ 97952
4
7
- 187034
+ 187042
7
762
- 120802
+ 120807
@@ -15655,22 +15670,22 @@
1
2
- 1602616
+ 1602684
2
3
- 484609
+ 484630
3
7
- 186567
+ 186575
7
724
- 110541
+ 110546
@@ -15686,17 +15701,17 @@
1
2
- 1877336
+ 1877417
2
3
- 384795
+ 384812
3
128
- 122201
+ 122207
@@ -15712,22 +15727,22 @@
1
2
- 1705228
+ 1705301
2
3
- 401586
+ 401604
3
8
- 188433
+ 188441
8
592
- 89086
+ 89089
@@ -15743,37 +15758,37 @@
1
2
- 340952
+ 340967
2
3
- 86753
+ 86757
3
4
- 48507
+ 48509
4
6
- 51772
+ 51774
6
12
- 52238
+ 52241
12
33
- 50373
+ 50375
34
3223
- 36380
+ 36382
@@ -15789,37 +15804,37 @@
1
2
- 368471
+ 368486
2
3
- 77891
+ 77895
3
4
- 45242
+ 45244
4
6
- 49440
+ 49442
6
14
- 53171
+ 53174
14
56
- 50839
+ 50841
56
3140
- 21921
+ 21922
@@ -15835,27 +15850,27 @@
1
2
- 456624
+ 456643
2
3
- 93750
+ 93754
3
5
- 46641
+ 46643
5
19
- 50839
+ 50841
19
1927
- 19123
+ 19124
@@ -15871,32 +15886,32 @@
1
2
- 378732
+ 378748
2
3
- 90485
+ 90489
3
5
- 59701
+ 59704
5
9
- 51306
+ 51308
9
21
- 50373
+ 50375
21
1010
- 36380
+ 36382
@@ -15912,17 +15927,17 @@
1
2
- 4492082
+ 4492275
2
3
- 531251
+ 531274
3
1735
- 283582
+ 283595
@@ -15938,17 +15953,17 @@
1
2
- 4881075
+ 4881285
2
17
- 415112
+ 415130
17
1731
- 10727
+ 10728
@@ -15964,12 +15979,12 @@
1
2
- 4957102
+ 4957315
2
1513
- 349814
+ 349829
@@ -15985,7 +16000,7 @@
1
2
- 5297588
+ 5297815
2
@@ -16000,22 +16015,22 @@
var_def
- 4024730
+ 4024903
id
- 4024730
+ 4024903
var_decl_specifiers
- 310635
+ 310648
id
- 310635
+ 310648
name
@@ -16033,7 +16048,7 @@
1
2
- 310635
+ 310648
@@ -16080,19 +16095,19 @@
type_decls
- 3242079
+ 3242218
id
- 3242079
+ 3242218
type_id
- 3191705
+ 3191843
location
- 3163254
+ 3163390
@@ -16106,7 +16121,7 @@
1
2
- 3242079
+ 3242218
@@ -16122,7 +16137,7 @@
1
2
- 3242079
+ 3242218
@@ -16138,12 +16153,12 @@
1
2
- 3150194
+ 3150330
2
5
- 41511
+ 41513
@@ -16159,12 +16174,12 @@
1
2
- 3150194
+ 3150330
2
5
- 41511
+ 41513
@@ -16180,12 +16195,12 @@
1
2
- 3123142
+ 3123276
2
20
- 40112
+ 40113
@@ -16201,12 +16216,12 @@
1
2
- 3123142
+ 3123276
2
20
- 40112
+ 40113
@@ -16216,33 +16231,33 @@
type_def
- 2624540
+ 2624653
id
- 2624540
+ 2624653
type_decl_top
- 743005
+ 743037
type_decl
- 743005
+ 743037
namespace_decls
- 311530
+ 311523
id
- 311530
+ 311523
namespace_id
@@ -16250,11 +16265,11 @@
location
- 311530
+ 311523
bodylocation
- 311530
+ 311523
@@ -16268,7 +16283,7 @@
1
2
- 311530
+ 311523
@@ -16284,7 +16299,7 @@
1
2
- 311530
+ 311523
@@ -16300,7 +16315,7 @@
1
2
- 311530
+ 311523
@@ -16514,7 +16529,7 @@
1
2
- 311530
+ 311523
@@ -16530,7 +16545,7 @@
1
2
- 311530
+ 311523
@@ -16546,7 +16561,7 @@
1
2
- 311530
+ 311523
@@ -16562,7 +16577,7 @@
1
2
- 311530
+ 311523
@@ -16578,7 +16593,7 @@
1
2
- 311530
+ 311523
@@ -16594,7 +16609,7 @@
1
2
- 311530
+ 311523
@@ -16604,19 +16619,19 @@
usings
- 369403
+ 369419
id
- 369403
+ 369419
element_id
- 315299
+ 315312
location
- 247668
+ 247679
@@ -16630,7 +16645,7 @@
1
2
- 369403
+ 369419
@@ -16646,7 +16661,7 @@
1
2
- 369403
+ 369419
@@ -16662,12 +16677,12 @@
1
2
- 263060
+ 263071
2
3
- 50839
+ 50841
3
@@ -16688,12 +16703,12 @@
1
2
- 263060
+ 263071
2
3
- 50839
+ 50841
3
@@ -16714,22 +16729,22 @@
1
2
- 202425
+ 202434
2
4
- 10727
+ 10728
4
5
- 31250
+ 31251
5
11
- 3264
+ 3265
@@ -16745,22 +16760,22 @@
1
2
- 202425
+ 202434
2
4
- 10727
+ 10728
4
5
- 31250
+ 31251
5
11
- 3264
+ 3265
@@ -16770,15 +16785,15 @@
using_container
- 462754
+ 462579
parent
- 10955
+ 10951
child
- 293425
+ 293313
@@ -16792,7 +16807,7 @@
1
2
- 3267
+ 3266
2
@@ -16802,17 +16817,17 @@
4
6
- 414
+ 413
6
7
- 2473
+ 2472
7
17
- 895
+ 894
19
@@ -16848,22 +16863,22 @@
1
2
- 216420
+ 216338
2
3
- 51276
+ 51257
3
11
- 23612
+ 23603
13
41
- 2115
+ 2114
@@ -16873,15 +16888,15 @@
static_asserts
- 134655
+ 134652
id
- 134655
+ 134652
condition
- 134655
+ 134652
message
@@ -16889,7 +16904,7 @@
location
- 17564
+ 17563
enclosing
@@ -16907,7 +16922,7 @@
1
2
- 134655
+ 134652
@@ -16923,7 +16938,7 @@
1
2
- 134655
+ 134652
@@ -16939,7 +16954,7 @@
1
2
- 134655
+ 134652
@@ -16955,7 +16970,7 @@
1
2
- 134655
+ 134652
@@ -16971,7 +16986,7 @@
1
2
- 134655
+ 134652
@@ -16987,7 +17002,7 @@
1
2
- 134655
+ 134652
@@ -17003,7 +17018,7 @@
1
2
- 134655
+ 134652
@@ -17019,7 +17034,7 @@
1
2
- 134655
+ 134652
@@ -17035,7 +17050,7 @@
1
2
- 22236
+ 22235
2
@@ -17076,7 +17091,7 @@
1
2
- 22236
+ 22235
2
@@ -17117,7 +17132,7 @@
1
2
- 28006
+ 28005
2
@@ -17481,15 +17496,15 @@
params
- 6739755
+ 6740045
id
- 6576042
+ 6576325
function
- 3879674
+ 3879840
index
@@ -17497,7 +17512,7 @@
type_id
- 2188904
+ 2188998
@@ -17511,7 +17526,7 @@
1
2
- 6576042
+ 6576325
@@ -17527,7 +17542,7 @@
1
2
- 6576042
+ 6576325
@@ -17543,12 +17558,12 @@
1
2
- 6452441
+ 6452719
2
4
- 123601
+ 123606
@@ -17564,22 +17579,22 @@
1
2
- 2257002
+ 2257099
2
3
- 951961
+ 952002
3
4
- 429571
+ 429590
4
18
- 241138
+ 241149
@@ -17595,22 +17610,22 @@
1
2
- 2257002
+ 2257099
2
3
- 951961
+ 952002
3
4
- 429571
+ 429590
4
18
- 241138
+ 241149
@@ -17626,22 +17641,22 @@
1
2
- 2555043
+ 2555153
2
3
- 826028
+ 826063
3
4
- 346082
+ 346097
4
12
- 152519
+ 152525
@@ -17895,22 +17910,22 @@
1
2
- 1488343
+ 1488407
2
3
- 440299
+ 440318
3
8
- 170242
+ 170250
8
518
- 90018
+ 90022
@@ -17926,22 +17941,22 @@
1
2
- 1708026
+ 1708100
2
3
- 248134
+ 248145
3
9
- 168377
+ 168384
9
502
- 64365
+ 64368
@@ -17957,17 +17972,17 @@
1
2
- 1761664
+ 1761740
2
3
- 348415
+ 348430
3
13
- 78824
+ 78828
@@ -17977,11 +17992,11 @@
overrides
- 125866
+ 125864
new
- 122890
+ 122888
old
@@ -17999,7 +18014,7 @@
1
2
- 119922
+ 119920
2
@@ -18060,19 +18075,19 @@
membervariables
- 1056556
+ 1056548
id
- 1054758
+ 1054750
type_id
- 327746
+ 327744
name
- 451645
+ 451642
@@ -18086,7 +18101,7 @@
1
2
- 1053040
+ 1053032
2
@@ -18107,7 +18122,7 @@
1
2
- 1054758
+ 1054750
@@ -18123,7 +18138,7 @@
1
2
- 243043
+ 243041
2
@@ -18154,12 +18169,12 @@
1
2
- 255269
+ 255267
2
3
- 46467
+ 46466
3
@@ -18185,17 +18200,17 @@
1
2
- 295343
+ 295341
2
3
- 86541
+ 86540
3
5
- 41193
+ 41192
5
@@ -18216,12 +18231,12 @@
1
2
- 367860
+ 367858
2
3
- 51741
+ 51740
3
@@ -18407,19 +18422,19 @@
localvariables
- 576906
+ 576895
id
- 576906
+ 576895
type_id
- 37597
+ 37592
name
- 90649
+ 90648
@@ -18433,7 +18448,7 @@
1
2
- 576906
+ 576895
@@ -18449,7 +18464,7 @@
1
2
- 576906
+ 576895
@@ -18470,12 +18485,12 @@
2
3
- 5368
+ 5372
3
4
- 2467
+ 2459
4
@@ -18485,12 +18500,12 @@
7
18
- 2851
+ 2855
18
15849
- 2496
+ 2492
@@ -18506,17 +18521,17 @@
1
2
- 26772
+ 26775
2
3
- 4572
+ 4568
3
5
- 2921
+ 2917
5
@@ -18542,12 +18557,12 @@
1
2
- 57095
+ 57094
2
3
- 14301
+ 14300
3
@@ -18557,7 +18572,7 @@
5
15
- 6990
+ 6989
15
@@ -18578,7 +18593,7 @@
1
2
- 76577
+ 76576
2
@@ -18598,11 +18613,11 @@
autoderivation
- 148035
+ 147957
var
- 148035
+ 147957
derivation_type
@@ -18620,7 +18635,7 @@
1
2
- 148035
+ 147957
@@ -18666,15 +18681,15 @@
orphaned_variables
- 37368
+ 37359
var
- 37368
+ 37359
function
- 32845
+ 32837
@@ -18688,7 +18703,7 @@
1
2
- 37368
+ 37359
@@ -18704,7 +18719,7 @@
1
2
- 30792
+ 30785
2
@@ -18719,11 +18734,11 @@
enumconstants
- 241684
+ 241682
id
- 241684
+ 241682
parent
@@ -18739,11 +18754,11 @@
name
- 241405
+ 241403
location
- 221587
+ 221585
@@ -18757,7 +18772,7 @@
1
2
- 241684
+ 241682
@@ -18773,7 +18788,7 @@
1
2
- 241684
+ 241682
@@ -18789,7 +18804,7 @@
1
2
- 241684
+ 241682
@@ -18805,7 +18820,7 @@
1
2
- 241684
+ 241682
@@ -18821,7 +18836,7 @@
1
2
- 241684
+ 241682
@@ -19432,7 +19447,7 @@
1
2
- 241125
+ 241123
2
@@ -19453,7 +19468,7 @@
1
2
- 241125
+ 241123
2
@@ -19474,7 +19489,7 @@
1
2
- 241405
+ 241403
@@ -19490,7 +19505,7 @@
1
2
- 241405
+ 241403
@@ -19506,7 +19521,7 @@
1
2
- 241125
+ 241123
2
@@ -19527,7 +19542,7 @@
1
2
- 220828
+ 220826
2
@@ -19548,7 +19563,7 @@
1
2
- 221587
+ 221585
@@ -19564,7 +19579,7 @@
1
2
- 220828
+ 220826
2
@@ -19585,7 +19600,7 @@
1
2
- 221587
+ 221585
@@ -19601,7 +19616,7 @@
1
2
- 220828
+ 220826
2
@@ -19616,23 +19631,23 @@
builtintypes
- 26119
+ 26120
id
- 26119
+ 26120
name
- 26119
+ 26120
kind
- 26119
+ 26120
size
- 3264
+ 3265
sign
@@ -19654,7 +19669,7 @@
1
2
- 26119
+ 26120
@@ -19670,7 +19685,7 @@
1
2
- 26119
+ 26120
@@ -19686,7 +19701,7 @@
1
2
- 26119
+ 26120
@@ -19702,7 +19717,7 @@
1
2
- 26119
+ 26120
@@ -19718,7 +19733,7 @@
1
2
- 26119
+ 26120
@@ -19734,7 +19749,7 @@
1
2
- 26119
+ 26120
@@ -19750,7 +19765,7 @@
1
2
- 26119
+ 26120
@@ -19766,7 +19781,7 @@
1
2
- 26119
+ 26120
@@ -19782,7 +19797,7 @@
1
2
- 26119
+ 26120
@@ -19798,7 +19813,7 @@
1
2
- 26119
+ 26120
@@ -19814,7 +19829,7 @@
1
2
- 26119
+ 26120
@@ -19830,7 +19845,7 @@
1
2
- 26119
+ 26120
@@ -19846,7 +19861,7 @@
1
2
- 26119
+ 26120
@@ -19862,7 +19877,7 @@
1
2
- 26119
+ 26120
@@ -19878,7 +19893,7 @@
1
2
- 26119
+ 26120
@@ -20323,15 +20338,15 @@
derivedtypes
- 4330701
+ 4330887
id
- 4330701
+ 4330887
name
- 2160919
+ 2161012
kind
@@ -20339,7 +20354,7 @@
type_id
- 2670715
+ 2670830
@@ -20353,7 +20368,7 @@
1
2
- 4330701
+ 4330887
@@ -20369,7 +20384,7 @@
1
2
- 4330701
+ 4330887
@@ -20385,7 +20400,7 @@
1
2
- 4330701
+ 4330887
@@ -20401,17 +20416,17 @@
1
2
- 1899258
+ 1899340
2
5
- 164645
+ 164653
5
1153
- 97015
+ 97019
@@ -20427,7 +20442,7 @@
1
2
- 2159986
+ 2160079
2
@@ -20448,17 +20463,17 @@
1
2
- 1899258
+ 1899340
2
5
- 164645
+ 164653
5
1135
- 97015
+ 97019
@@ -20597,22 +20612,22 @@
1
2
- 1651123
+ 1651194
2
3
- 560169
+ 560193
3
4
- 354012
+ 354027
4
72
- 105410
+ 105415
@@ -20628,22 +20643,22 @@
1
2
- 1662317
+ 1662389
2
3
- 552706
+ 552730
3
4
- 351213
+ 351228
4
72
- 104477
+ 104482
@@ -20659,22 +20674,22 @@
1
2
- 1655321
+ 1655392
2
3
- 563900
+ 563924
3
4
- 353079
+ 353094
4
6
- 98414
+ 98418
@@ -20684,11 +20699,11 @@
pointerishsize
- 3210362
+ 3210500
id
- 3210362
+ 3210500
size
@@ -20710,7 +20725,7 @@
1
2
- 3210362
+ 3210500
@@ -20726,7 +20741,7 @@
1
2
- 3210362
+ 3210500
@@ -20800,19 +20815,19 @@
arraysizes
- 88153
+ 88157
id
- 88153
+ 88157
num_elements
- 31716
+ 31717
bytesize
- 33115
+ 33117
alignment
@@ -20830,7 +20845,7 @@
1
2
- 88153
+ 88157
@@ -20846,7 +20861,7 @@
1
2
- 88153
+ 88157
@@ -20862,7 +20877,7 @@
1
2
- 88153
+ 88157
@@ -20883,7 +20898,7 @@
2
3
- 23787
+ 23788
3
@@ -20914,7 +20929,7 @@
1
2
- 26585
+ 26587
2
@@ -20940,7 +20955,7 @@
1
2
- 26585
+ 26587
2
@@ -20971,12 +20986,12 @@
2
3
- 23787
+ 23788
3
4
- 3264
+ 3265
4
@@ -21002,7 +21017,7 @@
1
2
- 27518
+ 27519
2
@@ -21028,7 +21043,7 @@
1
2
- 27518
+ 27519
2
@@ -21136,15 +21151,15 @@
typedefbase
- 1672769
+ 1672135
id
- 1672769
+ 1672135
type_id
- 787413
+ 787114
@@ -21158,7 +21173,7 @@
1
2
- 1672769
+ 1672135
@@ -21174,22 +21189,22 @@
1
2
- 612790
+ 612558
2
3
- 82588
+ 82557
3
6
- 61505
+ 61481
6
5437
- 30528
+ 30517
@@ -21199,19 +21214,19 @@
decltypes
- 166216
+ 165808
id
- 16699
+ 16658
expr
- 166216
+ 165808
base_type
- 9970
+ 9945
parentheses_would_change_meaning
@@ -21229,37 +21244,37 @@
1
2
- 5090
+ 5077
2
3
- 6195
+ 6180
3
5
- 1105
+ 1102
5
12
- 1296
+ 1293
12
18
- 1353
+ 1350
18
46
- 1258
+ 1255
51
740
- 400
+ 399
@@ -21275,7 +21290,7 @@
1
2
- 16699
+ 16658
@@ -21291,7 +21306,7 @@
1
2
- 16699
+ 16658
@@ -21307,7 +21322,7 @@
1
2
- 166216
+ 165808
@@ -21323,7 +21338,7 @@
1
2
- 166216
+ 165808
@@ -21339,7 +21354,7 @@
1
2
- 166216
+ 165808
@@ -21355,17 +21370,17 @@
1
2
- 7244
+ 7226
2
3
- 2268
+ 2263
4
149
- 457
+ 456
@@ -21381,32 +21396,32 @@
1
2
- 724
+ 722
2
3
- 6138
+ 6123
3
4
- 343
+ 342
4
5
- 972
+ 969
5
7
- 762
+ 760
7
32
- 800
+ 798
32
@@ -21427,7 +21442,7 @@
1
2
- 9970
+ 9945
@@ -21485,15 +21500,15 @@
usertypes
- 5229957
+ 5230182
id
- 5229957
+ 5230182
name
- 1351216
+ 1351274
kind
@@ -21511,7 +21526,7 @@
1
2
- 5229957
+ 5230182
@@ -21527,7 +21542,7 @@
1
2
- 5229957
+ 5230182
@@ -21543,27 +21558,27 @@
1
2
- 982745
+ 982787
2
3
- 153451
+ 153458
3
7
- 104477
+ 104482
7
61
- 101679
+ 101683
65
874
- 8861
+ 8862
@@ -21579,17 +21594,17 @@
1
2
- 1210823
+ 1210876
2
3
- 125000
+ 125005
3
7
- 15391
+ 15392
@@ -21731,11 +21746,11 @@
usertypesize
- 1705694
+ 1705768
id
- 1705694
+ 1705768
size
@@ -21757,7 +21772,7 @@
1
2
- 1705694
+ 1705768
@@ -21773,7 +21788,7 @@
1
2
- 1705694
+ 1705768
@@ -21789,7 +21804,7 @@
1
2
- 3264
+ 3265
2
@@ -21937,22 +21952,22 @@
usertype_final
- 9420
+ 9415
id
- 9420
+ 9415
usertype_uuid
- 36639
+ 36638
id
- 36639
+ 36638
uuid
@@ -21970,7 +21985,7 @@
1
2
- 36639
+ 36638
@@ -21986,7 +22001,7 @@
1
2
- 35890
+ 35889
2
@@ -22001,15 +22016,15 @@
mangled_name
- 9477636
+ 9478043
id
- 9477636
+ 9478043
mangled_name
- 6448244
+ 6448521
is_complete
@@ -22027,7 +22042,7 @@
1
2
- 9477636
+ 9478043
@@ -22043,7 +22058,7 @@
1
2
- 9477636
+ 9478043
@@ -22059,12 +22074,12 @@
1
2
- 6167459
+ 6167725
2
874
- 280784
+ 280796
@@ -22080,7 +22095,7 @@
1
2
- 6448244
+ 6448521
@@ -22122,59 +22137,59 @@
is_pod_class
- 530716
+ 530515
id
- 530716
+ 530515
is_standard_layout_class
- 1253734
+ 1253788
id
- 1253734
+ 1253788
is_complete
- 1645060
+ 1645130
id
- 1645060
+ 1645130
is_class_template
- 397855
+ 397872
id
- 397855
+ 397872
class_instantiation
- 1088622
+ 1088668
to
- 1088622
+ 1088668
from
- 168377
+ 168384
@@ -22188,7 +22203,7 @@
1
2
- 1088622
+ 1088668
@@ -22204,12 +22219,12 @@
1
2
- 59701
+ 59704
2
3
- 29384
+ 29385
3
@@ -22219,12 +22234,12 @@
4
5
- 13059
+ 13060
5
6
- 9794
+ 9795
6
@@ -22234,7 +22249,7 @@
10
16
- 13059
+ 13060
16
@@ -22254,19 +22269,19 @@
class_template_argument
- 2859038
+ 2857953
type_id
- 1304835
+ 1304340
index
- 1253
+ 1252
arg_type
- 833229
+ 832912
@@ -22280,27 +22295,27 @@
1
2
- 536592
+ 536388
2
3
- 396090
+ 395940
3
4
- 229424
+ 229337
4
7
- 119328
+ 119283
7
113
- 23400
+ 23391
@@ -22316,22 +22331,22 @@
1
2
- 563013
+ 562800
2
3
- 407236
+ 407082
3
4
- 242752
+ 242660
4
113
- 91832
+ 91797
@@ -22439,27 +22454,27 @@
1
2
- 518731
+ 518534
2
3
- 172921
+ 172856
3
4
- 50884
+ 50865
4
10
- 63519
+ 63495
10
10265
- 27171
+ 27161
@@ -22475,17 +22490,17 @@
1
2
- 734424
+ 734146
2
3
- 80630
+ 80599
3
22
- 18174
+ 18167
@@ -22495,11 +22510,11 @@
class_template_argument_value
- 494870
+ 494891
type_id
- 304571
+ 304584
index
@@ -22507,7 +22522,7 @@
arg_value
- 494870
+ 494891
@@ -22521,12 +22536,12 @@
1
2
- 249534
+ 249544
2
3
- 53171
+ 53174
3
@@ -22547,22 +22562,22 @@
1
2
- 189366
+ 189374
2
3
- 81156
+ 81160
3
4
- 12126
+ 12127
4
9
- 21921
+ 21922
@@ -22640,7 +22655,7 @@
1
2
- 494870
+ 494891
@@ -22656,7 +22671,7 @@
1
2
- 494870
+ 494891
@@ -22666,15 +22681,15 @@
is_proxy_class_for
- 62966
+ 62969
id
- 62966
+ 62969
templ_param_id
- 62966
+ 62969
@@ -22688,7 +22703,7 @@
1
2
- 62966
+ 62969
@@ -22704,7 +22719,7 @@
1
2
- 62966
+ 62969
@@ -22714,19 +22729,19 @@
type_mentions
- 4029370
+ 4029338
id
- 4029370
+ 4029338
type_id
- 198214
+ 198212
location
- 3995848
+ 3995817
kind
@@ -22744,7 +22759,7 @@
1
2
- 4029370
+ 4029338
@@ -22760,7 +22775,7 @@
1
2
- 4029370
+ 4029338
@@ -22776,7 +22791,7 @@
1
2
- 4029370
+ 4029338
@@ -22894,7 +22909,7 @@
1
2
- 198214
+ 198212
@@ -22910,7 +22925,7 @@
1
2
- 3962326
+ 3962295
2
@@ -22931,7 +22946,7 @@
1
2
- 3962326
+ 3962295
2
@@ -22952,7 +22967,7 @@
1
2
- 3995848
+ 3995817
@@ -23010,26 +23025,26 @@
is_function_template
- 1401589
+ 1401649
id
- 1401589
+ 1401649
function_instantiation
- 894870
+ 894647
to
- 894870
+ 894647
from
- 144256
+ 144220
@@ -23043,7 +23058,7 @@
1
2
- 894870
+ 894647
@@ -23059,27 +23074,27 @@
1
2
- 100033
+ 100008
2
3
- 14230
+ 14227
3
6
- 11864
+ 11861
6
21
- 11899
+ 11896
22
870
- 6228
+ 6226
@@ -23089,11 +23104,11 @@
function_template_argument
- 2310645
+ 2310067
function_id
- 1319951
+ 1319621
index
@@ -23101,7 +23116,7 @@
arg_type
- 300865
+ 300789
@@ -23115,22 +23130,22 @@
1
2
- 673580
+ 673411
2
3
- 390007
+ 389910
3
4
- 186566
+ 186519
4
15
- 69797
+ 69779
@@ -23146,22 +23161,22 @@
1
2
- 690977
+ 690804
2
3
- 399784
+ 399684
3
4
- 166664
+ 166622
4
9
- 62525
+ 62509
@@ -23309,32 +23324,32 @@
1
2
- 184304
+ 184258
2
3
- 44049
+ 44038
3
5
- 23172
+ 23167
5
16
- 23207
+ 23201
16
107
- 22720
+ 22714
108
957
- 3409
+ 3408
@@ -23350,17 +23365,17 @@
1
2
- 271116
+ 271048
2
4
- 25678
+ 25671
4
17
- 4070
+ 4069
@@ -23370,11 +23385,11 @@
function_template_argument_value
- 358553
+ 358464
function_id
- 192516
+ 192467
index
@@ -23382,7 +23397,7 @@
arg_value
- 355944
+ 355855
@@ -23396,12 +23411,12 @@
1
2
- 183260
+ 183215
2
8
- 9255
+ 9252
@@ -23417,17 +23432,17 @@
1
2
- 175919
+ 175875
2
31
- 15100
+ 15096
32
97
- 1496
+ 1495
@@ -23565,12 +23580,12 @@
1
2
- 353334
+ 353246
2
3
- 2609
+ 2608
@@ -23586,7 +23601,7 @@
1
2
- 355944
+ 355855
@@ -23596,26 +23611,26 @@
is_variable_template
- 46998
+ 46973
id
- 46998
+ 46973
variable_instantiation
- 171327
+ 171237
to
- 171327
+ 171237
from
- 25673
+ 25659
@@ -23629,7 +23644,7 @@
1
2
- 171327
+ 171237
@@ -23645,22 +23660,22 @@
1
2
- 13768
+ 13761
2
3
- 2588
+ 2586
3
4
- 1242
+ 1241
4
6
- 1863
+ 1862
6
@@ -23670,12 +23685,12 @@
8
12
- 2173
+ 2172
12
38
- 1966
+ 1965
46
@@ -23690,19 +23705,19 @@
variable_template_argument
- 308493
+ 308331
variable_id
- 162217
+ 162132
index
- 1759
+ 1758
arg_type
- 170085
+ 169995
@@ -23716,22 +23731,22 @@
1
2
- 83023
+ 82980
2
3
- 50518
+ 50491
3
4
- 18633
+ 18624
4
17
- 10041
+ 10036
@@ -23747,22 +23762,22 @@
1
2
- 87682
+ 87636
2
3
- 51760
+ 51733
3
4
- 13561
+ 13554
4
17
- 9213
+ 9208
@@ -23783,12 +23798,12 @@
19
20
- 621
+ 620
26
27
- 414
+ 413
47
@@ -23839,17 +23854,17 @@
10
11
- 414
+ 413
11
12
- 207
+ 206
12
13
- 414
+ 413
29
@@ -23895,22 +23910,22 @@
1
2
- 136855
+ 136783
2
3
- 19358
+ 19348
3
24
- 12836
+ 12829
24
110
- 1035
+ 1034
@@ -23926,17 +23941,17 @@
1
2
- 153211
+ 153130
2
3
- 14803
+ 14795
3
6
- 2070
+ 2069
@@ -23946,19 +23961,19 @@
variable_template_argument_value
- 11801
+ 11795
variable_id
- 7764
+ 7760
index
- 414
+ 413
arg_value
- 11801
+ 11795
@@ -23972,12 +23987,12 @@
1
2
- 7350
+ 7346
2
3
- 414
+ 413
@@ -23993,12 +24008,12 @@
1
2
- 4347
+ 4345
2
3
- 3105
+ 3104
4
@@ -24081,7 +24096,7 @@
1
2
- 11801
+ 11795
@@ -24097,7 +24112,7 @@
1
2
- 11801
+ 11795
@@ -24107,15 +24122,15 @@
routinetypes
- 538161
+ 538026
id
- 538161
+ 538026
return_type
- 280406
+ 280336
@@ -24129,7 +24144,7 @@
1
2
- 538161
+ 538026
@@ -24145,17 +24160,17 @@
1
2
- 244220
+ 244159
2
3
- 20946
+ 20940
3
3595
- 15239
+ 15236
@@ -24165,11 +24180,11 @@
routinetypeargs
- 982278
+ 982320
routine
- 423042
+ 423060
index
@@ -24177,7 +24192,7 @@
type_id
- 226679
+ 226689
@@ -24191,27 +24206,27 @@
1
2
- 152519
+ 152525
2
3
- 133862
+ 133868
3
4
- 63432
+ 63435
4
5
- 45709
+ 45711
5
18
- 27518
+ 27519
@@ -24227,27 +24242,27 @@
1
2
- 182369
+ 182377
2
3
- 133395
+ 133401
3
4
- 58768
+ 58771
4
5
- 33582
+ 33583
5
11
- 14925
+ 14926
@@ -24405,12 +24420,12 @@
1
2
- 146455
+ 146461
2
3
- 30783
+ 30784
3
@@ -24420,12 +24435,12 @@
5
12
- 18190
+ 18191
12
110
- 14458
+ 14459
@@ -24441,17 +24456,17 @@
1
2
- 172575
+ 172582
2
3
- 30783
+ 30784
3
6
- 18656
+ 18657
6
@@ -24466,19 +24481,19 @@
ptrtomembers
- 37779
+ 37781
id
- 37779
+ 37781
type_id
- 37779
+ 37781
class_id
- 15391
+ 15392
@@ -24492,7 +24507,7 @@
1
2
- 37779
+ 37781
@@ -24508,7 +24523,7 @@
1
2
- 37779
+ 37781
@@ -24524,7 +24539,7 @@
1
2
- 37779
+ 37781
@@ -24540,7 +24555,7 @@
1
2
- 37779
+ 37781
@@ -24602,15 +24617,15 @@
specifiers
- 24720
+ 24721
id
- 24720
+ 24721
str
- 24720
+ 24721
@@ -24624,7 +24639,7 @@
1
2
- 24720
+ 24721
@@ -24640,7 +24655,7 @@
1
2
- 24720
+ 24721
@@ -24650,11 +24665,11 @@
typespecifiers
- 1291048
+ 1291103
type_id
- 1272857
+ 1272912
spec_id
@@ -24672,12 +24687,12 @@
1
2
- 1254667
+ 1254721
2
3
- 18190
+ 18191
@@ -24738,11 +24753,11 @@
funspecifiers
- 12607036
+ 12603886
func_id
- 3854601
+ 3853638
spec_id
@@ -24760,27 +24775,27 @@
1
2
- 310746
+ 310668
2
3
- 540214
+ 540079
3
4
- 1133732
+ 1133449
4
5
- 1624017
+ 1623611
5
8
- 245890
+ 245828
@@ -24896,11 +24911,11 @@
varspecifiers
- 2243942
+ 2244038
var_id
- 1223883
+ 1223936
spec_id
@@ -24918,22 +24933,22 @@
1
2
- 729479
+ 729510
2
3
- 202425
+ 202434
3
4
- 58302
+ 58304
4
5
- 233675
+ 233686
@@ -24994,11 +25009,11 @@
attributes
- 729824
+ 729440
id
- 729824
+ 729440
kind
@@ -25006,15 +25021,15 @@
name
- 1656
+ 1655
name_space
- 207
+ 206
location
- 479613
+ 479361
@@ -25028,7 +25043,7 @@
1
2
- 729824
+ 729440
@@ -25044,7 +25059,7 @@
1
2
- 729824
+ 729440
@@ -25060,7 +25075,7 @@
1
2
- 729824
+ 729440
@@ -25076,7 +25091,7 @@
1
2
- 729824
+ 729440
@@ -25144,7 +25159,7 @@
1
2
- 207
+ 206
2
@@ -25272,12 +25287,12 @@
1
2
- 1449
+ 1448
2
3
- 207
+ 206
@@ -25293,7 +25308,7 @@
1
2
- 1656
+ 1655
@@ -25314,7 +25329,7 @@
2
3
- 207
+ 206
4
@@ -25469,17 +25484,17 @@
1
2
- 422573
+ 422351
2
3
- 36335
+ 36316
3
201
- 20704
+ 20693
@@ -25495,7 +25510,7 @@
1
2
- 479613
+ 479361
@@ -25511,12 +25526,12 @@
1
2
- 475369
+ 475119
2
3
- 4244
+ 4242
@@ -25532,7 +25547,7 @@
1
2
- 479613
+ 479361
@@ -25542,11 +25557,11 @@
attribute_args
- 409982
+ 410000
id
- 409982
+ 410000
kind
@@ -25554,7 +25569,7 @@
attribute
- 298041
+ 298054
index
@@ -25562,7 +25577,7 @@
location
- 327426
+ 327440
@@ -25576,7 +25591,7 @@
1
2
- 409982
+ 410000
@@ -25592,7 +25607,7 @@
1
2
- 409982
+ 410000
@@ -25608,7 +25623,7 @@
1
2
- 409982
+ 410000
@@ -25624,7 +25639,7 @@
1
2
- 409982
+ 410000
@@ -25739,17 +25754,17 @@
1
2
- 215952
+ 215961
2
3
- 52238
+ 52241
3
4
- 29850
+ 29852
@@ -25765,12 +25780,12 @@
1
2
- 273788
+ 273799
2
3
- 24253
+ 24254
@@ -25786,17 +25801,17 @@
1
2
- 215952
+ 215961
2
3
- 52238
+ 52241
3
4
- 29850
+ 29852
@@ -25812,17 +25827,17 @@
1
2
- 215952
+ 215961
2
3
- 52238
+ 52241
3
4
- 29850
+ 29852
@@ -25937,17 +25952,17 @@
1
2
- 278918
+ 278930
2
3
- 23320
+ 23321
3
9
- 24720
+ 24721
17
@@ -25968,7 +25983,7 @@
1
2
- 314832
+ 314846
2
@@ -25989,17 +26004,17 @@
1
2
- 278918
+ 278930
2
3
- 23320
+ 23321
3
9
- 24720
+ 24721
17
@@ -26020,7 +26035,7 @@
1
2
- 327426
+ 327440
@@ -26030,11 +26045,11 @@
attribute_arg_value
- 39179
+ 39180
arg
- 39179
+ 39180
value
@@ -26052,7 +26067,7 @@
1
2
- 39179
+ 39180
@@ -26068,7 +26083,7 @@
1
2
- 14458
+ 14459
2
@@ -26131,15 +26146,15 @@
attribute_arg_constant
- 370336
+ 370352
arg
- 370336
+ 370352
constant
- 370336
+ 370352
@@ -26153,7 +26168,7 @@
1
2
- 370336
+ 370352
@@ -26169,7 +26184,7 @@
1
2
- 370336
+ 370352
@@ -26280,15 +26295,15 @@
typeattributes
- 84369
+ 84325
type_id
- 61698
+ 61666
spec_id
- 84369
+ 84325
@@ -26302,17 +26317,17 @@
1
2
- 55797
+ 55768
2
4
- 4244
+ 4242
12
13
- 1656
+ 1655
@@ -26328,7 +26343,7 @@
1
2
- 84369
+ 84325
@@ -26338,15 +26353,15 @@
funcattributes
- 651587
+ 651615
func_id
- 443098
+ 443117
spec_id
- 651587
+ 651615
@@ -26360,17 +26375,17 @@
1
2
- 334422
+ 334436
2
3
- 65298
+ 65301
3
6
- 34981
+ 34982
6
@@ -26391,7 +26406,7 @@
1
2
- 651587
+ 651615
@@ -26507,15 +26522,15 @@
unspecifiedtype
- 10144615
+ 10145051
type_id
- 10144615
+ 10145051
unspecified_type_id
- 6817181
+ 6817474
@@ -26529,7 +26544,7 @@
1
2
- 10144615
+ 10145051
@@ -26545,17 +26560,17 @@
1
2
- 4584433
+ 4584630
2
3
- 1995340
+ 1995426
3
145
- 237407
+ 237417
@@ -26565,19 +26580,19 @@
member
- 4945084
+ 4943849
parent
- 639377
+ 639217
index
- 8698
+ 8696
child
- 4900409
+ 4899184
@@ -26591,42 +26606,42 @@
1
3
- 19067
+ 19062
3
4
- 344496
+ 344410
4
5
- 37786
+ 37777
5
7
- 52504
+ 52491
7
10
- 52191
+ 52178
10
15
- 49581
+ 49569
15
24
- 48955
+ 48943
24
251
- 34794
+ 34785
@@ -26642,42 +26657,42 @@
1
3
- 19067
+ 19062
3
4
- 344427
+ 344341
4
5
- 37821
+ 37811
5
7
- 52608
+ 52595
7
10
- 52539
+ 52526
10
15
- 49198
+ 49186
15
24
- 49024
+ 49012
24
255
- 34689
+ 34681
@@ -26708,42 +26723,42 @@
5
22
- 661
+ 660
22
42
- 661
+ 660
42
56
- 661
+ 660
56
100
- 661
+ 660
104
164
- 661
+ 660
181
299
- 661
+ 660
300
727
- 661
+ 660
845
4002
- 661
+ 660
4606
@@ -26774,12 +26789,12 @@
3
4
- 1148
+ 1147
4
15
- 661
+ 660
16
@@ -26789,7 +26804,7 @@
36
55
- 661
+ 660
57
@@ -26799,22 +26814,22 @@
97
135
- 661
+ 660
140
256
- 661
+ 660
268
612
- 661
+ 660
619
2611
- 661
+ 660
2770
@@ -26835,7 +26850,7 @@
1
2
- 4900409
+ 4899184
@@ -26851,12 +26866,12 @@
1
2
- 4857090
+ 4855876
2
8
- 43318
+ 43307
@@ -26866,15 +26881,15 @@
enclosingfunction
- 117884
+ 117840
child
- 117884
+ 117840
parent
- 67335
+ 67310
@@ -26888,7 +26903,7 @@
1
2
- 117884
+ 117840
@@ -26904,22 +26919,22 @@
1
2
- 35587
+ 35573
2
3
- 20893
+ 20885
3
4
- 5908
+ 5906
4
45
- 4946
+ 4944
@@ -26929,15 +26944,15 @@
derivations
- 391086
+ 390988
derivation
- 391086
+ 390988
sub
- 370836
+ 370743
index
@@ -26945,11 +26960,11 @@
super
- 202501
+ 202451
location
- 37682
+ 37672
@@ -26963,7 +26978,7 @@
1
2
- 391086
+ 390988
@@ -26979,7 +26994,7 @@
1
2
- 391086
+ 390988
@@ -26995,7 +27010,7 @@
1
2
- 391086
+ 390988
@@ -27011,7 +27026,7 @@
1
2
- 391086
+ 390988
@@ -27027,12 +27042,12 @@
1
2
- 355874
+ 355785
2
7
- 14961
+ 14957
@@ -27048,12 +27063,12 @@
1
2
- 355874
+ 355785
2
7
- 14961
+ 14957
@@ -27069,12 +27084,12 @@
1
2
- 355874
+ 355785
2
7
- 14961
+ 14957
@@ -27090,12 +27105,12 @@
1
2
- 355874
+ 355785
2
7
- 14961
+ 14957
@@ -27240,12 +27255,12 @@
1
2
- 195125
+ 195076
2
1519
- 7376
+ 7374
@@ -27261,12 +27276,12 @@
1
2
- 195125
+ 195076
2
1519
- 7376
+ 7374
@@ -27282,7 +27297,7 @@
1
2
- 202049
+ 201999
2
@@ -27303,12 +27318,12 @@
1
2
- 198848
+ 198798
2
108
- 3653
+ 3652
@@ -27324,12 +27339,12 @@
1
2
- 28009
+ 28002
2
5
- 3201
+ 3200
5
@@ -27339,7 +27354,7 @@
15
134
- 2853
+ 2852
136
@@ -27360,12 +27375,12 @@
1
2
- 28009
+ 28002
2
5
- 3201
+ 3200
5
@@ -27375,7 +27390,7 @@
15
134
- 2853
+ 2852
136
@@ -27396,7 +27411,7 @@
1
2
- 37682
+ 37672
@@ -27412,17 +27427,17 @@
1
2
- 30375
+ 30367
2
5
- 3340
+ 3339
5
45
- 2853
+ 2852
54
@@ -27437,11 +27452,11 @@
derspecifiers
- 392965
+ 392867
der_id
- 390703
+ 390605
spec_id
@@ -27459,7 +27474,7 @@
1
2
- 388441
+ 388344
2
@@ -27505,11 +27520,11 @@
direct_base_offsets
- 362172
+ 362081
der_id
- 362172
+ 362081
offset
@@ -27527,7 +27542,7 @@
1
2
- 362172
+ 362081
@@ -27578,11 +27593,11 @@
virtual_base_offsets
- 6445
+ 6443
sub
- 3558
+ 3557
super
@@ -27604,7 +27619,7 @@
1
2
- 2797
+ 2796
2
@@ -27635,7 +27650,7 @@
1
2
- 2999
+ 2998
2
@@ -27869,23 +27884,23 @@
frienddecls
- 706182
+ 706005
id
- 706182
+ 706005
type_id
- 41857
+ 41846
decl_id
- 69309
+ 69292
location
- 6262
+ 6261
@@ -27899,7 +27914,7 @@
1
2
- 706182
+ 706005
@@ -27915,7 +27930,7 @@
1
2
- 706182
+ 706005
@@ -27931,7 +27946,7 @@
1
2
- 706182
+ 706005
@@ -27947,22 +27962,22 @@
1
2
- 6123
+ 6122
2
3
- 13047
+ 13044
3
6
- 2922
+ 2921
6
10
- 3166
+ 3165
10
@@ -27972,22 +27987,22 @@
17
24
- 3305
+ 3304
25
36
- 3270
+ 3269
37
55
- 3201
+ 3200
55
103
- 3583
+ 3582
@@ -28003,22 +28018,22 @@
1
2
- 6123
+ 6122
2
3
- 13047
+ 13044
3
6
- 2922
+ 2921
6
10
- 3166
+ 3165
10
@@ -28028,22 +28043,22 @@
17
24
- 3305
+ 3304
25
36
- 3270
+ 3269
37
55
- 3201
+ 3200
55
103
- 3583
+ 3582
@@ -28059,7 +28074,7 @@
1
2
- 40430
+ 40420
2
@@ -28080,32 +28095,32 @@
1
2
- 39978
+ 39968
2
3
- 5810
+ 5809
3
8
- 5949
+ 5948
8
15
- 5358
+ 5356
15
32
- 5219
+ 5217
32
71
- 5219
+ 5217
72
@@ -28126,32 +28141,32 @@
1
2
- 39978
+ 39968
2
3
- 5810
+ 5809
3
8
- 5949
+ 5948
8
15
- 5358
+ 5356
15
32
- 5219
+ 5217
32
71
- 5219
+ 5217
72
@@ -28172,12 +28187,12 @@
1
2
- 68648
+ 68631
2
5
- 661
+ 660
@@ -28193,7 +28208,7 @@
1
2
- 5880
+ 5878
2
@@ -28214,7 +28229,7 @@
1
2
- 6123
+ 6122
2
@@ -28235,7 +28250,7 @@
1
2
- 5915
+ 5913
2
@@ -28250,19 +28265,19 @@
comments
- 8686670
+ 8682106
id
- 8686670
+ 8682106
contents
- 3307709
+ 3305971
location
- 8686670
+ 8682106
@@ -28276,7 +28291,7 @@
1
2
- 8686670
+ 8682106
@@ -28292,7 +28307,7 @@
1
2
- 8686670
+ 8682106
@@ -28308,17 +28323,17 @@
1
2
- 3025820
+ 3024231
2
7
- 248657
+ 248527
7
32784
- 33230
+ 33212
@@ -28334,17 +28349,17 @@
1
2
- 3025820
+ 3024231
2
7
- 248657
+ 248527
7
32784
- 33230
+ 33212
@@ -28360,7 +28375,7 @@
1
2
- 8686670
+ 8682106
@@ -28376,7 +28391,7 @@
1
2
- 8686670
+ 8682106
@@ -28386,15 +28401,15 @@
commentbinding
- 3088160
+ 3088293
id
- 2443103
+ 2443208
element
- 3011668
+ 3011797
@@ -28408,12 +28423,12 @@
1
2
- 2366144
+ 2366245
2
97
- 76959
+ 76962
@@ -28429,12 +28444,12 @@
1
2
- 2935175
+ 2935301
2
3
- 76492
+ 76496
@@ -28444,15 +28459,15 @@
exprconv
- 7033432
+ 7033379
converted
- 7033432
+ 7033379
conversion
- 7033432
+ 7033379
@@ -28466,7 +28481,7 @@
1
2
- 7033432
+ 7033379
@@ -28482,7 +28497,7 @@
1
2
- 7033432
+ 7033379
@@ -28492,30 +28507,30 @@
compgenerated
- 9265823
+ 9267960
id
- 9265823
+ 9267960
synthetic_destructor_call
- 471159
+ 473158
element
- 286813
+ 286203
i
- 381
+ 380
destructor_call
- 471159
+ 473158
@@ -28529,27 +28544,27 @@
1
2
- 190103
+ 188057
2
3
- 50404
+ 50984
3
4
- 21503
+ 21850
4
- 7
- 23238
+ 6
+ 21584
- 7
+ 6
20
- 1563
+ 3727
@@ -28565,27 +28580,27 @@
1
2
- 189912
+ 188057
2
3
- 50537
+ 50984
3
4
- 21503
+ 21850
4
- 7
- 23295
+ 6
+ 21584
- 7
+ 6
20
- 1563
+ 3727
@@ -28644,18 +28659,18 @@
19
- 18
- 19
+ 19
+ 20
19
- 26
- 27
+ 27
+ 28
19
- 34
- 35
+ 35
+ 36
19
@@ -28664,38 +28679,38 @@
19
- 82
- 83
+ 83
+ 84
19
- 193
- 194
+ 196
+ 197
19
- 422
- 423
+ 435
+ 436
19
- 1301
- 1302
+ 1331
+ 1332
19
- 2429
- 2430
+ 2480
+ 2481
19
- 5068
- 5069
+ 5156
+ 5157
19
- 15013
- 15014
+ 15018
+ 15019
19
@@ -28755,18 +28770,18 @@
19
- 18
- 19
+ 19
+ 20
19
- 26
- 27
+ 27
+ 28
19
- 34
- 35
+ 35
+ 36
19
@@ -28775,38 +28790,38 @@
19
- 82
- 83
+ 83
+ 84
19
- 193
- 194
+ 196
+ 197
19
- 422
- 423
+ 435
+ 436
19
- 1301
- 1302
+ 1331
+ 1332
19
- 2429
- 2430
+ 2480
+ 2481
19
- 5071
- 5072
+ 5156
+ 5157
19
- 15038
- 15039
+ 15018
+ 15019
19
@@ -28823,7 +28838,7 @@
1
2
- 471159
+ 473158
@@ -28839,7 +28854,7 @@
1
2
- 471159
+ 473158
@@ -28849,15 +28864,15 @@
namespaces
- 12126
+ 12127
id
- 12126
+ 12127
name
- 9794
+ 9795
@@ -28871,7 +28886,7 @@
1
2
- 12126
+ 12127
@@ -28918,7 +28933,7 @@
namespacembrs
- 2385733
+ 2385836
parentid
@@ -28926,7 +28941,7 @@
memberid
- 2385733
+ 2385836
@@ -29001,7 +29016,7 @@
1
2
- 2385733
+ 2385836
@@ -29011,11 +29026,11 @@
exprparents
- 14207341
+ 14207231
expr_id
- 14207341
+ 14207231
child_index
@@ -29023,7 +29038,7 @@
parent_id
- 9454239
+ 9454166
@@ -29037,7 +29052,7 @@
1
2
- 14207341
+ 14207231
@@ -29053,7 +29068,7 @@
1
2
- 14207341
+ 14207231
@@ -29171,17 +29186,17 @@
1
2
- 5409675
+ 5409633
2
3
- 3706806
+ 3706777
3
712
- 337757
+ 337754
@@ -29197,17 +29212,17 @@
1
2
- 5409675
+ 5409633
2
3
- 3706806
+ 3706777
3
712
- 337757
+ 337754
@@ -29217,11 +29232,11 @@
expr_isload
- 5170780
+ 5168684
expr_id
- 5170780
+ 5168684
@@ -29301,11 +29316,11 @@
iscall
- 3183297
+ 3182186
caller
- 3183297
+ 3182186
kind
@@ -29323,7 +29338,7 @@
1
2
- 3183297
+ 3182186
@@ -29337,18 +29352,18 @@
12
- 1318
- 1319
+ 1319
+ 1320
19
- 2471
- 2472
+ 2473
+ 2474
19
- 163193
- 163194
+ 163543
+ 163544
19
@@ -29359,11 +29374,11 @@
numtemplatearguments
- 393347
+ 393249
expr_id
- 393347
+ 393249
num
@@ -29381,7 +29396,7 @@
1
2
- 393347
+ 393249
@@ -29485,23 +29500,23 @@
namequalifiers
- 1516804
+ 1515301
id
- 1516804
+ 1515301
qualifiableelement
- 1516804
+ 1515301
qualifyingelement
- 97777
+ 97613
location
- 305343
+ 304593
@@ -29515,7 +29530,7 @@
1
2
- 1516804
+ 1515301
@@ -29531,7 +29546,7 @@
1
2
- 1516804
+ 1515301
@@ -29547,7 +29562,7 @@
1
2
- 1516804
+ 1515301
@@ -29563,7 +29578,7 @@
1
2
- 1516804
+ 1515301
@@ -29579,7 +29594,7 @@
1
2
- 1516804
+ 1515301
@@ -29595,7 +29610,7 @@
1
2
- 1516804
+ 1515301
@@ -29611,27 +29626,27 @@
1
2
- 58601
+ 58457
2
3
- 22457
+ 22420
3
5
- 8921
+ 8918
5
92
- 7377
+ 7378
96
- 21572
- 419
+ 21584
+ 437
@@ -29647,27 +29662,27 @@
1
2
- 58601
+ 58457
2
3
- 22457
+ 22420
3
5
- 8921
+ 8918
5
92
- 7377
+ 7378
96
- 21572
- 419
+ 21584
+ 437
@@ -29683,22 +29698,22 @@
1
2
- 64035
+ 63877
2
3
- 20703
+ 20671
3
5
- 8388
+ 8386
5
7095
- 4651
+ 4678
@@ -29714,32 +29729,32 @@
1
2
- 101018
+ 100656
2
3
- 28385
+ 28430
3
4
- 44780
+ 44651
4
6
- 14316
+ 13768
6
7
- 95394
+ 95692
7
790
- 21446
+ 21393
@@ -29755,32 +29770,32 @@
1
2
- 101018
+ 100656
2
3
- 28385
+ 28430
3
4
- 44780
+ 44651
4
6
- 14316
+ 13768
6
7
- 95394
+ 95692
7
790
- 21446
+ 21393
@@ -29796,22 +29811,22 @@
1
2
- 137659
+ 137206
2
3
- 55799
+ 55738
3
4
- 102658
+ 102443
4
143
- 9226
+ 9204
@@ -29821,15 +29836,15 @@
varbind
- 6029477
+ 6029430
expr
- 6029477
+ 6029430
var
- 768575
+ 768569
@@ -29843,7 +29858,7 @@
1
2
- 6029477
+ 6029430
@@ -29859,22 +29874,22 @@
1
2
- 126229
+ 126228
2
3
- 137882
+ 137881
3
4
- 106299
+ 106298
4
5
- 85216
+ 85215
5
@@ -29914,15 +29929,15 @@
funbind
- 3187262
+ 3188690
expr
- 3183583
+ 3182471
fun
- 512661
+ 512219
@@ -29936,12 +29951,12 @@
1
2
- 3179903
+ 3176253
2
3
- 3679
+ 6218
@@ -29957,32 +29972,32 @@
1
2
- 316152
+ 315736
2
3
- 78084
+ 78026
3
4
- 31455
+ 31396
4
7
- 46210
+ 46153
7
- 133
- 38451
+ 121
+ 38471
- 133
- 4992
- 2306
+ 123
+ 5011
+ 2434
@@ -29992,11 +30007,11 @@
expr_allocator
- 45963
+ 45951
expr
- 45963
+ 45951
func
@@ -30018,7 +30033,7 @@
1
2
- 45963
+ 45951
@@ -30034,7 +30049,7 @@
1
2
- 45963
+ 45951
@@ -30118,11 +30133,11 @@
expr_deallocator
- 54626
+ 54613
expr
- 54626
+ 54613
func
@@ -30144,7 +30159,7 @@
1
2
- 54626
+ 54613
@@ -30160,7 +30175,7 @@
1
2
- 54626
+ 54613
@@ -30265,15 +30280,15 @@
expr_cond_guard
- 657276
+ 657271
cond
- 657276
+ 657271
guard
- 657276
+ 657271
@@ -30287,7 +30302,7 @@
1
2
- 657276
+ 657271
@@ -30303,7 +30318,7 @@
1
2
- 657276
+ 657271
@@ -30313,15 +30328,15 @@
expr_cond_true
- 657273
+ 657268
cond
- 657273
+ 657268
true
- 657273
+ 657268
@@ -30335,7 +30350,7 @@
1
2
- 657273
+ 657268
@@ -30351,7 +30366,7 @@
1
2
- 657273
+ 657268
@@ -30361,15 +30376,15 @@
expr_cond_false
- 657276
+ 657271
cond
- 657276
+ 657271
false
- 657276
+ 657271
@@ -30383,7 +30398,7 @@
1
2
- 657276
+ 657271
@@ -30399,7 +30414,7 @@
1
2
- 657276
+ 657271
@@ -30409,15 +30424,15 @@
values
- 10777325
+ 10777241
id
- 10777325
+ 10777241
str
- 88068
+ 88067
@@ -30431,7 +30446,7 @@
1
2
- 10777325
+ 10777241
@@ -30540,15 +30555,15 @@
valuebind
- 11211571
+ 11211484
val
- 10777325
+ 10777241
expr
- 11211571
+ 11211484
@@ -30562,12 +30577,12 @@
1
2
- 10365623
+ 10365543
2
7
- 411701
+ 411698
@@ -30583,7 +30598,7 @@
1
2
- 11211571
+ 11211484
@@ -30593,15 +30608,15 @@
fieldoffsets
- 1054758
+ 1054750
id
- 1054758
+ 1054750
byteoffset
- 22694
+ 22693
bitoffset
@@ -30619,7 +30634,7 @@
1
2
- 1054758
+ 1054750
@@ -30635,7 +30650,7 @@
1
2
- 1054758
+ 1054750
@@ -30794,19 +30809,19 @@
bitfield
- 20704
+ 20693
id
- 20704
+ 20693
bits
- 2588
+ 2586
declared_bits
- 2588
+ 2586
@@ -30820,7 +30835,7 @@
1
2
- 20704
+ 20693
@@ -30836,7 +30851,7 @@
1
2
- 20704
+ 20693
@@ -30857,37 +30872,37 @@
2
3
- 621
+ 620
3
4
- 207
+ 206
4
5
- 207
+ 206
5
6
- 207
+ 206
6
8
- 207
+ 206
8
11
- 207
+ 206
12
115
- 207
+ 206
@@ -30903,7 +30918,7 @@
1
2
- 2588
+ 2586
@@ -30924,37 +30939,37 @@
2
3
- 621
+ 620
3
4
- 207
+ 206
4
5
- 207
+ 206
5
6
- 207
+ 206
6
8
- 207
+ 206
8
11
- 207
+ 206
12
115
- 207
+ 206
@@ -30970,7 +30985,7 @@
1
2
- 2588
+ 2586
@@ -30980,23 +30995,23 @@
initialisers
- 1710241
+ 1710223
init
- 1710241
+ 1710223
var
- 719566
+ 719570
expr
- 1710241
+ 1710223
location
- 394521
+ 394513
@@ -31010,7 +31025,7 @@
1
2
- 1710241
+ 1710223
@@ -31026,7 +31041,7 @@
1
2
- 1710241
+ 1710223
@@ -31042,7 +31057,7 @@
1
2
- 1710241
+ 1710223
@@ -31058,7 +31073,7 @@
1
2
- 633820
+ 633825
2
@@ -31068,7 +31083,7 @@
16
25
- 57022
+ 57020
@@ -31084,7 +31099,7 @@
1
2
- 633820
+ 633825
2
@@ -31094,7 +31109,7 @@
16
25
- 57022
+ 57020
@@ -31110,7 +31125,7 @@
1
2
- 719560
+ 719563
2
@@ -31131,7 +31146,7 @@
1
2
- 1710241
+ 1710223
@@ -31147,7 +31162,7 @@
1
2
- 1710241
+ 1710223
@@ -31163,7 +31178,7 @@
1
2
- 1710241
+ 1710223
@@ -31179,7 +31194,7 @@
1
2
- 321604
+ 321597
2
@@ -31189,12 +31204,12 @@
3
15
- 30977
+ 30976
15
111551
- 17983
+ 17982
@@ -31210,17 +31225,17 @@
1
2
- 344488
+ 344480
2
4
- 36106
+ 36086
4
12073
- 13927
+ 13945
@@ -31236,7 +31251,7 @@
1
2
- 321604
+ 321597
2
@@ -31246,12 +31261,12 @@
3
15
- 30977
+ 30976
15
111551
- 17983
+ 17982
@@ -31272,15 +31287,15 @@
expr_ancestor
- 475296
+ 477285
exp
- 475296
+ 477285
ancestor
- 269541
+ 268993
@@ -31294,7 +31309,7 @@
1
2
- 475296
+ 477285
@@ -31310,27 +31325,27 @@
1
2
- 165739
+ 163963
2
3
- 54712
+ 55148
3
4
- 22152
+ 22496
4
6
- 22132
+ 22592
6
26
- 4804
+ 4792
@@ -31340,11 +31355,11 @@
exprs
- 18388573
+ 18388431
id
- 18388573
+ 18388431
kind
@@ -31352,7 +31367,7 @@
location
- 8488587
+ 8488521
@@ -31366,7 +31381,7 @@
1
2
- 18388573
+ 18388431
@@ -31382,7 +31397,7 @@
1
2
- 18388573
+ 18388431
@@ -31560,22 +31575,22 @@
1
2
- 7145568
+ 7145513
2
3
- 663069
+ 663064
3
18
- 638140
+ 638135
18
71656
- 41808
+ 41807
@@ -31591,17 +31606,17 @@
1
2
- 7251643
+ 7251587
2
3
- 618277
+ 618273
3
32
- 618666
+ 618661
@@ -31611,15 +31626,19 @@
expr_reuse
- 331632
+ 333955
reuse
- 331632
+ 333955
original
- 331632
+ 333955
+
+
+ value_category
+ 19
@@ -31633,7 +31652,23 @@
1
2
- 331632
+ 333955
+
+
+
+
+
+
+ reuse
+ value_category
+
+
+ 12
+
+
+ 1
+ 2
+ 333955
@@ -31649,7 +31684,55 @@
1
2
- 331632
+ 333955
+
+
+
+
+
+
+ original
+ value_category
+
+
+ 12
+
+
+ 1
+ 2
+ 333955
+
+
+
+
+
+
+ value_category
+ reuse
+
+
+ 12
+
+
+ 17561
+ 17562
+ 19
+
+
+
+
+
+
+ value_category
+ original
+
+
+ 12
+
+
+ 17561
+ 17562
+ 19
@@ -31659,15 +31742,15 @@
expr_types
- 18461112
+ 18456468
id
- 18330447
+ 18325931
typeid
- 1237209
+ 1236717
value_category
@@ -31685,12 +31768,12 @@
1
2
- 18199782
+ 18195394
2
3
- 130664
+ 130536
@@ -31706,7 +31789,7 @@
1
2
- 18330447
+ 18325931
@@ -31722,42 +31805,42 @@
1
2
- 448184
+ 448002
2
3
- 256965
+ 256901
3
4
- 102788
+ 102760
4
5
- 84133
+ 84078
5
8
- 110196
+ 110166
8
14
- 98435
+ 98352
14
42
- 93511
+ 93486
42
- 125366
- 42995
+ 125373
+ 42967
@@ -31773,17 +31856,17 @@
1
2
- 1069468
+ 1069040
2
3
- 157321
+ 157261
3
4
- 10418
+ 10414
@@ -31802,13 +31885,13 @@
11
- 372687
- 372688
+ 372581
+ 372582
11
- 1250400
- 1250401
+ 1250724
+ 1250725
11
@@ -31833,8 +31916,8 @@
11
- 92891
- 92892
+ 92889
+ 92890
11
@@ -31845,15 +31928,15 @@
new_allocated_type
- 47006
+ 46995
expr
- 47006
+ 46995
type_id
- 27800
+ 27793
@@ -31867,7 +31950,7 @@
1
2
- 47006
+ 46995
@@ -31883,17 +31966,17 @@
1
2
- 11621
+ 11618
2
3
- 14717
+ 14714
3
19
- 1461
+ 1460
@@ -32988,15 +33071,15 @@
condition_decl_bind
- 40853
+ 40753
expr
- 40853
+ 40753
decl
- 40853
+ 40753
@@ -33010,7 +33093,7 @@
1
2
- 40853
+ 40753
@@ -33026,7 +33109,7 @@
1
2
- 40853
+ 40753
@@ -33036,15 +33119,15 @@
typeid_bind
- 35977
+ 35968
expr
- 35977
+ 35968
type_id
- 16179
+ 16175
@@ -33058,7 +33141,7 @@
1
2
- 35977
+ 35968
@@ -33074,7 +33157,7 @@
1
2
- 15761
+ 15757
3
@@ -33097,7 +33180,7 @@
type_id
- 20097
+ 20096
@@ -33127,7 +33210,7 @@
1
2
- 19932
+ 19931
2
@@ -33142,15 +33225,15 @@
sizeof_bind
- 199195
+ 199194
expr
- 199195
+ 199194
type_id
- 8181
+ 8224
@@ -33164,7 +33247,7 @@
1
2
- 199195
+ 199194
@@ -33180,12 +33263,12 @@
1
2
- 2693
+ 2704
2
3
- 2333
+ 2328
3
@@ -33195,7 +33278,7 @@
4
5
- 740
+ 746
5
@@ -33205,12 +33288,12 @@
6
9
- 714
+ 756
9
133
- 650
+ 640
164
@@ -33273,11 +33356,11 @@
lambdas
- 21455
+ 21456
expr
- 21455
+ 21456
default_capture
@@ -33299,7 +33382,7 @@
1
2
- 21455
+ 21456
@@ -33315,7 +33398,7 @@
1
2
- 21455
+ 21456
@@ -33389,15 +33472,15 @@
lambda_capture
- 27985
+ 27986
id
- 27985
+ 27986
lambda
- 20522
+ 20523
index
@@ -33405,7 +33488,7 @@
field
- 27985
+ 27986
captured_by_reference
@@ -33431,7 +33514,7 @@
1
2
- 27985
+ 27986
@@ -33447,7 +33530,7 @@
1
2
- 27985
+ 27986
@@ -33463,7 +33546,7 @@
1
2
- 27985
+ 27986
@@ -33479,7 +33562,7 @@
1
2
- 27985
+ 27986
@@ -33495,7 +33578,7 @@
1
2
- 27985
+ 27986
@@ -33511,7 +33594,7 @@
1
2
- 27985
+ 27986
@@ -33527,12 +33610,12 @@
1
2
- 13059
+ 13060
2
3
- 7462
+ 7463
@@ -33548,12 +33631,12 @@
1
2
- 13059
+ 13060
2
3
- 7462
+ 7463
@@ -33569,12 +33652,12 @@
1
2
- 13059
+ 13060
2
3
- 7462
+ 7463
@@ -33590,7 +33673,7 @@
1
2
- 20522
+ 20523
@@ -33606,7 +33689,7 @@
1
2
- 20522
+ 20523
@@ -33622,12 +33705,12 @@
1
2
- 13059
+ 13060
2
3
- 7462
+ 7463
@@ -33759,7 +33842,7 @@
1
2
- 27985
+ 27986
@@ -33775,7 +33858,7 @@
1
2
- 27985
+ 27986
@@ -33791,7 +33874,7 @@
1
2
- 27985
+ 27986
@@ -33807,7 +33890,7 @@
1
2
- 27985
+ 27986
@@ -33823,7 +33906,7 @@
1
2
- 27985
+ 27986
@@ -33839,7 +33922,7 @@
1
2
- 27985
+ 27986
@@ -34268,19 +34351,19 @@
stmts
- 4619943
+ 4618654
id
- 4619943
+ 4618654
kind
- 1966
+ 1965
location
- 2269598
+ 2268406
@@ -34294,7 +34377,7 @@
1
2
- 4619943
+ 4618654
@@ -34310,7 +34393,7 @@
1
2
- 4619943
+ 4618654
@@ -34394,28 +34477,28 @@
103
- 2635
- 2636
+ 2636
+ 2637
103
- 4621
- 4622
+ 4622
+ 4623
103
- 8803
- 8804
+ 8806
+ 8807
103
- 11577
- 11578
+ 11579
+ 11580
103
- 13335
- 13336
+ 13339
+ 13340
103
@@ -34538,22 +34621,22 @@
1
2
- 1879323
+ 1878336
2
4
- 174019
+ 173927
4
12
- 174122
+ 174031
12
- 687
- 42133
+ 689
+ 42110
@@ -34569,12 +34652,12 @@
1
2
- 2212869
+ 2211706
2
8
- 56729
+ 56699
@@ -34728,15 +34811,15 @@
if_then
- 725956
+ 725951
if_stmt
- 725956
+ 725951
then_id
- 725956
+ 725951
@@ -34750,7 +34833,7 @@
1
2
- 725956
+ 725951
@@ -34766,7 +34849,7 @@
1
2
- 725956
+ 725951
@@ -34776,15 +34859,15 @@
if_else
- 184680
+ 184679
if_stmt
- 184680
+ 184679
else_id
- 184680
+ 184679
@@ -34798,7 +34881,7 @@
1
2
- 184680
+ 184679
@@ -34814,7 +34897,7 @@
1
2
- 184680
+ 184679
@@ -34824,15 +34907,15 @@
constexpr_if_initialization
- 1
+ 2
constexpr_if_stmt
- 1
+ 2
init_id
- 1
+ 2
@@ -34846,7 +34929,7 @@
1
2
- 1
+ 2
@@ -34862,7 +34945,7 @@
1
2
- 1
+ 2
@@ -34872,15 +34955,15 @@
constexpr_if_then
- 52071
+ 52043
constexpr_if_stmt
- 52071
+ 52043
then_id
- 52071
+ 52043
@@ -34894,7 +34977,7 @@
1
2
- 52071
+ 52043
@@ -34910,7 +34993,7 @@
1
2
- 52071
+ 52043
@@ -34920,15 +35003,15 @@
constexpr_if_else
- 30538
+ 30522
constexpr_if_stmt
- 30538
+ 30522
else_id
- 30538
+ 30522
@@ -34942,7 +35025,7 @@
1
2
- 30538
+ 30522
@@ -34958,7 +35041,7 @@
1
2
- 30538
+ 30522
@@ -34968,15 +35051,15 @@
while_body
- 29152
+ 29141
while_stmt
- 29152
+ 29141
body_id
- 29152
+ 29141
@@ -34990,7 +35073,7 @@
1
2
- 29152
+ 29141
@@ -35006,7 +35089,7 @@
1
2
- 29152
+ 29141
@@ -35016,15 +35099,15 @@
do_body
- 148882
+ 148881
do_stmt
- 148882
+ 148881
body_id
- 148882
+ 148881
@@ -35038,7 +35121,7 @@
1
2
- 148882
+ 148881
@@ -35054,7 +35137,7 @@
1
2
- 148882
+ 148881
@@ -35064,15 +35147,15 @@
switch_initialization
- 5
+ 6
switch_stmt
- 5
+ 6
init_id
- 5
+ 6
@@ -35086,7 +35169,7 @@
1
2
- 5
+ 6
@@ -35102,7 +35185,7 @@
1
2
- 5
+ 6
@@ -35112,19 +35195,19 @@
switch_case
- 201865
+ 207702
switch_stmt
- 10809
+ 11029
index
- 4689
+ 4678
case_id
- 201865
+ 207702
@@ -35143,52 +35226,52 @@
3
4
- 2402
+ 2396
4
5
- 1753
+ 1768
5
6
- 1048
+ 1045
6
8
- 991
+ 988
8
9
- 533
+ 532
9
10
- 1029
+ 1026
10
- 12
- 991
+ 11
+ 361
- 12
- 25
- 838
+ 11
+ 14
+ 1007
- 30
- 152
- 819
+ 14
+ 31
+ 931
- 181
+ 36
247
- 343
+ 912
@@ -35209,52 +35292,52 @@
3
4
- 2402
+ 2396
4
5
- 1753
+ 1768
5
6
- 1048
+ 1045
6
8
- 991
+ 988
8
9
- 533
+ 532
9
10
- 1029
+ 1026
10
- 12
- 991
+ 11
+ 361
- 12
- 25
- 838
+ 11
+ 14
+ 1007
- 30
- 152
- 819
+ 14
+ 31
+ 931
- 181
+ 36
247
- 343
+ 912
@@ -35270,31 +35353,31 @@
14
15
- 1239
+ 1236
- 18
- 19
- 571
-
-
- 32
- 33
- 2020
+ 19
+ 20
+ 570
33
- 62
- 400
+ 34
+ 2015
- 66
- 292
- 362
+ 34
+ 63
+ 399
- 346
- 568
+ 68
+ 304
+ 361
+
+
+ 358
+ 581
95
@@ -35311,31 +35394,31 @@
14
15
- 1239
+ 1236
- 18
- 19
- 571
-
-
- 32
- 33
- 2020
+ 19
+ 20
+ 570
33
- 62
- 400
+ 34
+ 2015
- 66
- 292
- 362
+ 34
+ 63
+ 399
- 346
- 568
+ 68
+ 304
+ 361
+
+
+ 358
+ 581
95
@@ -35352,7 +35435,7 @@
1
2
- 201865
+ 207702
@@ -35368,7 +35451,7 @@
1
2
- 201865
+ 207702
@@ -35378,15 +35461,15 @@
switch_body
- 20788
+ 20787
switch_stmt
- 20788
+ 20787
body_id
- 20788
+ 20787
@@ -35400,7 +35483,7 @@
1
2
- 20788
+ 20787
@@ -35416,7 +35499,7 @@
1
2
- 20788
+ 20787
@@ -35426,15 +35509,15 @@
for_initialization
- 53407
+ 53406
for_stmt
- 53407
+ 53406
init_id
- 53407
+ 53406
@@ -35448,7 +35531,7 @@
1
2
- 53407
+ 53406
@@ -35464,7 +35547,7 @@
1
2
- 53407
+ 53406
@@ -35570,15 +35653,15 @@
for_body
- 61560
+ 61559
for_stmt
- 61560
+ 61559
body_id
- 61560
+ 61559
@@ -35592,7 +35675,7 @@
1
2
- 61560
+ 61559
@@ -35608,7 +35691,7 @@
1
2
- 61560
+ 61559
@@ -35618,11 +35701,11 @@
stmtparents
- 4054468
+ 4054557
id
- 4054468
+ 4054557
index
@@ -35630,7 +35713,7 @@
parent
- 1721248
+ 1721299
@@ -35644,7 +35727,7 @@
1
2
- 4054468
+ 4054557
@@ -35660,7 +35743,7 @@
1
2
- 4054468
+ 4054557
@@ -35720,7 +35803,7 @@
77
- 195132
+ 195140
704
@@ -35781,7 +35864,7 @@
77
- 195132
+ 195140
704
@@ -35798,27 +35881,27 @@
1
2
- 989113
+ 989142
2
3
- 372551
+ 372562
3
4
- 105697
+ 105701
4
6
- 111251
+ 111255
6
17
- 130351
+ 130355
17
@@ -35839,27 +35922,27 @@
1
2
- 989113
+ 989142
2
3
- 372551
+ 372562
3
4
- 105697
+ 105701
4
6
- 111251
+ 111255
6
17
- 130351
+ 130355
17
@@ -35874,22 +35957,22 @@
ishandler
- 62891
+ 62736
block
- 62891
+ 62736
stmt_decl_bind
- 580807
+ 580797
stmt
- 540988
+ 540979
num
@@ -35897,7 +35980,7 @@
decl
- 580703
+ 580692
@@ -35911,7 +35994,7 @@
1
2
- 520281
+ 520271
2
@@ -35932,7 +36015,7 @@
1
2
- 520281
+ 520271
2
@@ -36135,7 +36218,7 @@
1
2
- 580665
+ 580655
2
@@ -36156,7 +36239,7 @@
1
2
- 580703
+ 580692
@@ -36166,11 +36249,11 @@
stmt_decl_entry_bind
- 523682
+ 523673
stmt
- 484163
+ 484155
num
@@ -36178,7 +36261,7 @@
decl_entry
- 523624
+ 523614
@@ -36192,7 +36275,7 @@
1
2
- 463719
+ 463710
2
@@ -36213,7 +36296,7 @@
1
2
- 463719
+ 463710
2
@@ -36416,7 +36499,7 @@
1
2
- 523603
+ 523593
3
@@ -36437,7 +36520,7 @@
1
2
- 523624
+ 523614
@@ -36447,15 +36530,15 @@
blockscope
- 1415581
+ 1415642
block
- 1415581
+ 1415642
enclosing
- 1300376
+ 1300432
@@ -36469,7 +36552,7 @@
1
2
- 1415581
+ 1415642
@@ -36485,12 +36568,12 @@
1
2
- 1235077
+ 1235130
2
13
- 65298
+ 65301
@@ -36500,11 +36583,11 @@
jumpinfo
- 254471
+ 254469
id
- 254471
+ 254469
str
@@ -36512,7 +36595,7 @@
target
- 53145
+ 53144
@@ -36526,7 +36609,7 @@
1
2
- 254471
+ 254469
@@ -36542,7 +36625,7 @@
1
2
- 254471
+ 254469
@@ -36640,7 +36723,7 @@
2
3
- 26478
+ 26477
3
@@ -36676,7 +36759,7 @@
1
2
- 53145
+ 53144
@@ -36686,11 +36769,11 @@
preprocdirects
- 4389195
+ 4386889
id
- 4389195
+ 4386889
kind
@@ -36698,7 +36781,7 @@
location
- 4386607
+ 4384302
@@ -36712,7 +36795,7 @@
1
2
- 4389195
+ 4386889
@@ -36728,7 +36811,7 @@
1
2
- 4389195
+ 4386889
@@ -36876,7 +36959,7 @@
1
2
- 4386503
+ 4384198
26
@@ -36897,7 +36980,7 @@
1
2
- 4386607
+ 4384302
@@ -36907,15 +36990,15 @@
preprocpair
- 1430040
+ 1430102
begin
- 1195898
+ 1195950
elseelifend
- 1430040
+ 1430102
@@ -36929,12 +37012,12 @@
1
2
- 977614
+ 977656
2
3
- 208022
+ 208031
3
@@ -36955,7 +37038,7 @@
1
2
- 1430040
+ 1430102
@@ -36965,41 +37048,41 @@
preproctrue
- 766326
+ 766359
branch
- 766326
+ 766359
preprocfalse
- 331157
+ 331171
branch
- 331157
+ 331171
preproctext
- 3539079
+ 3537219
id
- 3539079
+ 3537219
head
- 2564841
+ 2563493
body
- 1498986
+ 1498199
@@ -37013,7 +37096,7 @@
1
2
- 3539079
+ 3537219
@@ -37029,7 +37112,7 @@
1
2
- 3539079
+ 3537219
@@ -37045,12 +37128,12 @@
1
2
- 2418979
+ 2417708
2
740
- 145861
+ 145784
@@ -37066,12 +37149,12 @@
1
2
- 2503142
+ 2501827
2
5
- 61698
+ 61666
@@ -37087,17 +37170,17 @@
1
2
- 1356955
+ 1356242
2
6
- 112424
+ 112364
6
11630
- 29607
+ 29591
@@ -37113,17 +37196,17 @@
1
2
- 1359957
+ 1359243
2
7
- 112734
+ 112675
7
2980
- 26294
+ 26280
@@ -37133,15 +37216,15 @@
includes
- 312967
+ 312980
id
- 312967
+ 312980
included
- 117071
+ 117076
@@ -37155,7 +37238,7 @@
1
2
- 312967
+ 312980
@@ -37171,12 +37254,12 @@
1
2
- 61100
+ 61103
2
3
- 21921
+ 21922
3
@@ -37191,7 +37274,7 @@
6
14
- 8861
+ 8862
14
@@ -37206,15 +37289,15 @@
link_targets
- 819
+ 817
id
- 819
+ 817
binary
- 819
+ 817
@@ -37228,7 +37311,7 @@
1
2
- 819
+ 817
@@ -37244,7 +37327,7 @@
1
2
- 819
+ 817
@@ -37254,11 +37337,11 @@
link_parent
- 38877182
+ 38867468
element
- 4927618
+ 4926386
link_target
@@ -37276,17 +37359,17 @@
1
2
- 664255
+ 664089
2
9
- 25852
+ 25845
9
10
- 4237510
+ 4236452
diff --git a/cpp/ql/lib/upgrades/aa7ff0ab32cd4674f6ab731d32fea64116997b05/expr_reuse.ql b/cpp/ql/lib/upgrades/aa7ff0ab32cd4674f6ab731d32fea64116997b05/expr_reuse.ql
new file mode 100644
index 00000000000..e0648d97b73
--- /dev/null
+++ b/cpp/ql/lib/upgrades/aa7ff0ab32cd4674f6ab731d32fea64116997b05/expr_reuse.ql
@@ -0,0 +1,7 @@
+class Expr extends @expr {
+ string toString() { none() }
+}
+
+from Expr reuse, Expr original, int value_category
+where expr_reuse(reuse, original) and expr_types(original, _, value_category)
+select reuse, original, value_category
diff --git a/cpp/ql/lib/upgrades/aa7ff0ab32cd4674f6ab731d32fea64116997b05/old.dbscheme b/cpp/ql/lib/upgrades/aa7ff0ab32cd4674f6ab731d32fea64116997b05/old.dbscheme
new file mode 100644
index 00000000000..aa7ff0ab32c
--- /dev/null
+++ b/cpp/ql/lib/upgrades/aa7ff0ab32cd4674f6ab731d32fea64116997b05/old.dbscheme
@@ -0,0 +1,2250 @@
+
+/**
+ * An invocation of the compiler. Note that more than one file may be
+ * compiled per invocation. For example, this command compiles three
+ * source files:
+ *
+ * gcc -c f1.c f2.c f3.c
+ *
+ * The `id` simply identifies the invocation, while `cwd` is the working
+ * directory from which the compiler was invoked.
+ */
+compilations(
+ /**
+ * An invocation of the compiler. Note that more than one file may
+ * be compiled per invocation. For example, this command compiles
+ * three source files:
+ *
+ * gcc -c f1.c f2.c f3.c
+ */
+ unique int id : @compilation,
+ string cwd : string ref
+);
+
+/**
+ * The arguments that were passed to the extractor for a compiler
+ * invocation. If `id` is for the compiler invocation
+ *
+ * gcc -c f1.c f2.c f3.c
+ *
+ * then typically there will be rows for
+ *
+ * num | arg
+ * --- | ---
+ * 0 | *path to extractor*
+ * 1 | `--mimic`
+ * 2 | `/usr/bin/gcc`
+ * 3 | `-c`
+ * 4 | f1.c
+ * 5 | f2.c
+ * 6 | f3.c
+ */
+#keyset[id, num]
+compilation_args(
+ int id : @compilation ref,
+ int num : int ref,
+ string arg : string ref
+);
+
+/**
+ * The source files that are compiled by a compiler invocation.
+ * If `id` is for the compiler invocation
+ *
+ * gcc -c f1.c f2.c f3.c
+ *
+ * then there will be rows for
+ *
+ * num | arg
+ * --- | ---
+ * 0 | f1.c
+ * 1 | f2.c
+ * 2 | f3.c
+ *
+ * Note that even if those files `#include` headers, those headers
+ * do not appear as rows.
+ */
+#keyset[id, num]
+compilation_compiling_files(
+ int id : @compilation ref,
+ int num : int ref,
+ int file : @file ref
+);
+
+/**
+ * The time taken by the extractor for a compiler invocation.
+ *
+ * For each file `num`, there will be rows for
+ *
+ * kind | seconds
+ * ---- | ---
+ * 1 | CPU seconds used by the extractor frontend
+ * 2 | Elapsed seconds during the extractor frontend
+ * 3 | CPU seconds used by the extractor backend
+ * 4 | Elapsed seconds during the extractor backend
+ */
+#keyset[id, num, kind]
+compilation_time(
+ int id : @compilation ref,
+ int num : int ref,
+ /* kind:
+ 1 = frontend_cpu_seconds
+ 2 = frontend_elapsed_seconds
+ 3 = extractor_cpu_seconds
+ 4 = extractor_elapsed_seconds
+ */
+ int kind : int ref,
+ float seconds : float ref
+);
+
+/**
+ * An error or warning generated by the extractor.
+ * The diagnostic message `diagnostic` was generated during compiler
+ * invocation `compilation`, and is the `file_number_diagnostic_number`th
+ * message generated while extracting the `file_number`th file of that
+ * invocation.
+ */
+#keyset[compilation, file_number, file_number_diagnostic_number]
+diagnostic_for(
+ int diagnostic : @diagnostic ref,
+ int compilation : @compilation ref,
+ int file_number : int ref,
+ int file_number_diagnostic_number : int ref
+);
+
+/**
+ * If extraction was successful, then `cpu_seconds` and
+ * `elapsed_seconds` are the CPU time and elapsed time (respectively)
+ * that extraction took for compiler invocation `id`.
+ */
+compilation_finished(
+ unique int id : @compilation ref,
+ float cpu_seconds : float ref,
+ float elapsed_seconds : float ref
+);
+
+
+/**
+ * External data, loaded from CSV files during snapshot creation. See
+ * [Tutorial: Incorporating external data](https://help.semmle.com/wiki/display/SD/Tutorial%3A+Incorporating+external+data)
+ * for more information.
+ */
+externalData(
+ int id : @externalDataElement,
+ string path : string ref,
+ int column: int ref,
+ string value : string ref
+);
+
+/**
+ * The source location of the snapshot.
+ */
+sourceLocationPrefix(string prefix : string ref);
+
+/**
+ * Information about packages that provide code used during compilation.
+ * The `id` is just a unique identifier.
+ * The `namespace` is typically the name of the package manager that
+ * provided the package (e.g. "dpkg" or "yum").
+ * The `package_name` is the name of the package, and `version` is its
+ * version (as a string).
+ */
+external_packages(
+ unique int id: @external_package,
+ string namespace : string ref,
+ string package_name : string ref,
+ string version : string ref
+);
+
+/**
+ * Holds if File `fileid` was provided by package `package`.
+ */
+header_to_external_package(
+ int fileid : @file ref,
+ int package : @external_package ref
+);
+
+/*
+ * Version history
+ */
+
+svnentries(
+ unique int id : @svnentry,
+ string revision : string ref,
+ string author : string ref,
+ date revisionDate : date ref,
+ int changeSize : int ref
+)
+
+svnaffectedfiles(
+ int id : @svnentry ref,
+ int file : @file ref,
+ string action : string ref
+)
+
+svnentrymsg(
+ unique int id : @svnentry ref,
+ string message : string ref
+)
+
+svnchurn(
+ int commit : @svnentry ref,
+ int file : @file ref,
+ int addedLines : int ref,
+ int deletedLines : int ref
+)
+
+/*
+ * C++ dbscheme
+ */
+
+extractor_version(
+ string codeql_version: string ref,
+ string frontend_version: string ref
+)
+
+@location = @location_stmt | @location_expr | @location_default ;
+
+/**
+ * The location of an element that is not an expression or a statement.
+ * The location spans column `startcolumn` of line `startline` to
+ * column `endcolumn` of line `endline` in file `file`.
+ * For more information, see
+ * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/).
+ */
+locations_default(
+ /** The location of an element that is not an expression or a statement. */
+ unique int id: @location_default,
+ int container: @container ref,
+ int startLine: int ref,
+ int startColumn: int ref,
+ int endLine: int ref,
+ int endColumn: int ref
+);
+
+/**
+ * The location of a statement.
+ * The location spans column `startcolumn` of line `startline` to
+ * column `endcolumn` of line `endline` in file `file`.
+ * For more information, see
+ * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/).
+ */
+locations_stmt(
+ /** The location of a statement. */
+ unique int id: @location_stmt,
+ int container: @container ref,
+ int startLine: int ref,
+ int startColumn: int ref,
+ int endLine: int ref,
+ int endColumn: int ref
+);
+
+/**
+ * The location of an expression.
+ * The location spans column `startcolumn` of line `startline` to
+ * column `endcolumn` of line `endline` in file `file`.
+ * For more information, see
+ * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/).
+ */
+locations_expr(
+ /** The location of an expression. */
+ unique int id: @location_expr,
+ int container: @container ref,
+ int startLine: int ref,
+ int startColumn: int ref,
+ int endLine: int ref,
+ int endColumn: int ref
+);
+
+/** An element for which line-count information is available. */
+@sourceline = @file | @function | @variable | @enumconstant | @xmllocatable;
+
+numlines(
+ int element_id: @sourceline ref,
+ int num_lines: int ref,
+ int num_code: int ref,
+ int num_comment: int ref
+);
+
+diagnostics(
+ unique int id: @diagnostic,
+ int severity: int ref,
+ string error_tag: string ref,
+ string error_message: string ref,
+ string full_error_message: string ref,
+ int location: @location_default ref
+);
+
+files(
+ unique int id: @file,
+ string name: string ref
+);
+
+folders(
+ unique int id: @folder,
+ string name: string ref
+);
+
+@container = @folder | @file
+
+containerparent(
+ int parent: @container ref,
+ unique int child: @container ref
+);
+
+fileannotations(
+ int id: @file ref,
+ int kind: int ref,
+ string name: string ref,
+ string value: string ref
+);
+
+inmacroexpansion(
+ int id: @element ref,
+ int inv: @macroinvocation ref
+);
+
+affectedbymacroexpansion(
+ int id: @element ref,
+ int inv: @macroinvocation ref
+);
+
+case @macroinvocation.kind of
+ 1 = @macro_expansion
+| 2 = @other_macro_reference
+;
+
+macroinvocations(
+ unique int id: @macroinvocation,
+ int macro_id: @ppd_define ref,
+ int location: @location_default ref,
+ int kind: int ref
+);
+
+macroparent(
+ unique int id: @macroinvocation ref,
+ int parent_id: @macroinvocation ref
+);
+
+// a macroinvocation may be part of another location
+// the way to find a constant expression that uses a macro
+// is thus to find a constant expression that has a location
+// to which a macro invocation is bound
+macrolocationbind(
+ int id: @macroinvocation ref,
+ int location: @location ref
+);
+
+#keyset[invocation, argument_index]
+macro_argument_unexpanded(
+ int invocation: @macroinvocation ref,
+ int argument_index: int ref,
+ string text: string ref
+);
+
+#keyset[invocation, argument_index]
+macro_argument_expanded(
+ int invocation: @macroinvocation ref,
+ int argument_index: int ref,
+ string text: string ref
+);
+
+/*
+case @function.kind of
+ 1 = @normal_function
+| 2 = @constructor
+| 3 = @destructor
+| 4 = @conversion_function
+| 5 = @operator
+| 6 = @builtin_function // GCC built-in functions, e.g. __builtin___memcpy_chk
+| 7 = @user_defined_literal
+| 8 = @deduction_guide
+;
+*/
+
+functions(
+ unique int id: @function,
+ string name: string ref,
+ int kind: int ref
+);
+
+function_entry_point(
+ int id: @function ref,
+ unique int entry_point: @stmt ref
+);
+
+function_return_type(
+ int id: @function ref,
+ int return_type: @type ref
+);
+
+/**
+ * If `function` is a coroutine, then this gives the `std::experimental::resumable_traits`
+ * instance associated with it, and the variables representing the `handle` and `promise`
+ * for it.
+ */
+coroutine(
+ unique int function: @function ref,
+ int traits: @type ref,
+ int handle: @variable ref,
+ int promise: @variable 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)
+
+member_function_this_type(
+ unique int id: @function ref,
+ int this_type: @type ref
+);
+
+#keyset[id, type_id]
+fun_decls(
+ int id: @fun_decl,
+ int function: @function ref,
+ int type_id: @type ref,
+ string name: string ref,
+ int location: @location_default ref
+);
+fun_def(unique int id: @fun_decl ref);
+fun_specialized(unique int id: @fun_decl ref);
+fun_implicit(unique int id: @fun_decl ref);
+fun_decl_specifiers(
+ int id: @fun_decl ref,
+ string name: string ref
+)
+#keyset[fun_decl, index]
+fun_decl_throws(
+ int fun_decl: @fun_decl ref,
+ int index: int ref,
+ int type_id: @type ref
+);
+/* an empty throw specification is different from none */
+fun_decl_empty_throws(unique int fun_decl: @fun_decl ref);
+fun_decl_noexcept(
+ int fun_decl: @fun_decl ref,
+ int constant: @expr ref
+);
+fun_decl_empty_noexcept(int fun_decl: @fun_decl ref);
+fun_decl_typedef_type(
+ unique int fun_decl: @fun_decl ref,
+ int typedeftype_id: @usertype ref
+);
+
+param_decl_bind(
+ unique int id: @var_decl ref,
+ int index: int ref,
+ int fun_decl: @fun_decl ref
+);
+
+#keyset[id, type_id]
+var_decls(
+ int id: @var_decl,
+ int variable: @variable ref,
+ int type_id: @type ref,
+ string name: string ref,
+ int location: @location_default ref
+);
+var_def(unique int id: @var_decl ref);
+var_decl_specifiers(
+ int id: @var_decl ref,
+ string name: string ref
+)
+is_structured_binding(unique int id: @variable ref);
+
+type_decls(
+ unique int id: @type_decl,
+ int type_id: @type ref,
+ int location: @location_default ref
+);
+type_def(unique int id: @type_decl ref);
+type_decl_top(
+ unique int type_decl: @type_decl ref
+);
+
+namespace_decls(
+ unique int id: @namespace_decl,
+ int namespace_id: @namespace ref,
+ int location: @location_default ref,
+ int bodylocation: @location_default ref
+);
+
+usings(
+ unique int id: @using,
+ int element_id: @element ref,
+ int location: @location_default ref
+);
+
+/** The element which contains the `using` declaration. */
+using_container(
+ int parent: @element ref,
+ int child: @using ref
+);
+
+static_asserts(
+ unique int id: @static_assert,
+ int condition : @expr ref,
+ string message : string ref,
+ int location: @location_default ref,
+ int enclosing : @element ref
+);
+
+// each function has an ordered list of parameters
+#keyset[id, type_id]
+#keyset[function, index, type_id]
+params(
+ int id: @parameter,
+ int function: @functionorblock ref,
+ int index: int ref,
+ int type_id: @type ref
+);
+
+overrides(
+ int new: @function ref,
+ int old: @function ref
+);
+
+#keyset[id, type_id]
+membervariables(
+ int id: @membervariable,
+ int type_id: @type ref,
+ string name: string ref
+);
+
+#keyset[id, type_id]
+globalvariables(
+ int id: @globalvariable,
+ int type_id: @type ref,
+ string name: string ref
+);
+
+#keyset[id, type_id]
+localvariables(
+ int id: @localvariable,
+ int type_id: @type ref,
+ string name: string ref
+);
+
+autoderivation(
+ unique int var: @variable ref,
+ int derivation_type: @type ref
+);
+
+orphaned_variables(
+ int var: @localvariable ref,
+ int function: @function ref
+)
+
+enumconstants(
+ unique int id: @enumconstant,
+ int parent: @usertype ref,
+ int index: int ref,
+ int type_id: @type ref,
+ string name: string ref,
+ int location: @location_default ref
+);
+
+@variable = @localscopevariable | @globalvariable | @membervariable;
+
+@localscopevariable = @localvariable | @parameter;
+
+/**
+ * Built-in types are the fundamental types, e.g., integral, floating, and void.
+ */
+case @builtintype.kind of
+ 1 = @errortype
+| 2 = @unknowntype
+| 3 = @void
+| 4 = @boolean
+| 5 = @char
+| 6 = @unsigned_char
+| 7 = @signed_char
+| 8 = @short
+| 9 = @unsigned_short
+| 10 = @signed_short
+| 11 = @int
+| 12 = @unsigned_int
+| 13 = @signed_int
+| 14 = @long
+| 15 = @unsigned_long
+| 16 = @signed_long
+| 17 = @long_long
+| 18 = @unsigned_long_long
+| 19 = @signed_long_long
+// ... 20 Microsoft-specific __int8
+// ... 21 Microsoft-specific __int16
+// ... 22 Microsoft-specific __int32
+// ... 23 Microsoft-specific __int64
+| 24 = @float
+| 25 = @double
+| 26 = @long_double
+| 27 = @complex_float // C99-specific _Complex float
+| 28 = @complex_double // C99-specific _Complex double
+| 29 = @complex_long_double // C99-specific _Complex long double
+| 30 = @imaginary_float // C99-specific _Imaginary float
+| 31 = @imaginary_double // C99-specific _Imaginary double
+| 32 = @imaginary_long_double // C99-specific _Imaginary long double
+| 33 = @wchar_t // Microsoft-specific
+| 34 = @decltype_nullptr // C++11
+| 35 = @int128 // __int128
+| 36 = @unsigned_int128 // unsigned __int128
+| 37 = @signed_int128 // signed __int128
+| 38 = @float128 // __float128
+| 39 = @complex_float128 // _Complex __float128
+| 40 = @decimal32 // _Decimal32
+| 41 = @decimal64 // _Decimal64
+| 42 = @decimal128 // _Decimal128
+| 43 = @char16_t
+| 44 = @char32_t
+| 45 = @std_float32 // _Float32
+| 46 = @float32x // _Float32x
+| 47 = @std_float64 // _Float64
+| 48 = @float64x // _Float64x
+| 49 = @std_float128 // _Float128
+// ... 50 _Float128x
+| 51 = @char8_t
+| 52 = @float16 // _Float16
+| 53 = @complex_float16 // _Complex _Float16
+| 54 = @fp16 // __fp16
+| 55 = @std_bfloat16 // __bf16
+| 56 = @std_float16 // std::float16_t
+| 57 = @complex_std_float32 // _Complex _Float32
+| 58 = @complex_float32x // _Complex _Float32x
+| 59 = @complex_std_float64 // _Complex _Float64
+| 60 = @complex_float64x // _Complex _Float64x
+| 61 = @complex_std_float128 // _Complex _Float128
+;
+
+builtintypes(
+ unique int id: @builtintype,
+ string name: string ref,
+ int kind: int ref,
+ int size: int ref,
+ int sign: int ref,
+ int alignment: int ref
+);
+
+/**
+ * Derived types are types that are directly derived from existing types and
+ * point to, refer to, transform type data to return a new type.
+ */
+case @derivedtype.kind of
+ 1 = @pointer
+| 2 = @reference
+| 3 = @type_with_specifiers
+| 4 = @array
+| 5 = @gnu_vector
+| 6 = @routineptr
+| 7 = @routinereference
+| 8 = @rvalue_reference // C++11
+// ... 9 type_conforming_to_protocols deprecated
+| 10 = @block
+;
+
+derivedtypes(
+ unique int id: @derivedtype,
+ string name: string ref,
+ int kind: int ref,
+ int type_id: @type ref
+);
+
+pointerishsize(unique int id: @derivedtype ref,
+ int size: int ref,
+ int alignment: int ref);
+
+arraysizes(
+ unique int id: @derivedtype ref,
+ int num_elements: int ref,
+ int bytesize: int ref,
+ int alignment: int ref
+);
+
+typedefbase(
+ unique int id: @usertype ref,
+ int type_id: @type ref
+);
+
+/**
+ * An instance of the C++11 `decltype` operator. For example:
+ * ```
+ * int a;
+ * decltype(1+a) b;
+ * ```
+ * Here `expr` is `1+a`.
+ *
+ * Sometimes an additional pair of parentheses around the expression
+ * would change the semantics of this decltype, e.g.
+ * ```
+ * struct A { double x; };
+ * const A* a = new A();
+ * decltype( a->x ); // type is double
+ * decltype((a->x)); // type is const double&
+ * ```
+ * (Please consult the C++11 standard for more details).
+ * `parentheses_would_change_meaning` is `true` iff that is the case.
+ */
+#keyset[id, expr]
+decltypes(
+ int id: @decltype,
+ int expr: @expr ref,
+ int base_type: @type ref,
+ boolean parentheses_would_change_meaning: boolean ref
+);
+
+/*
+case @usertype.kind of
+ 1 = @struct
+| 2 = @class
+| 3 = @union
+| 4 = @enum
+| 5 = @typedef // classic C: typedef typedef type name
+| 6 = @template
+| 7 = @template_parameter
+| 8 = @template_template_parameter
+| 9 = @proxy_class // a proxy class associated with a template parameter
+// ... 10 objc_class deprecated
+// ... 11 objc_protocol deprecated
+// ... 12 objc_category deprecated
+| 13 = @scoped_enum
+| 14 = @using_alias // a using name = type style typedef
+;
+*/
+
+usertypes(
+ unique int id: @usertype,
+ string name: string ref,
+ int kind: int ref
+);
+
+usertypesize(
+ unique int id: @usertype ref,
+ int size: int ref,
+ int alignment: int ref
+);
+
+usertype_final(unique int id: @usertype ref);
+
+usertype_uuid(
+ unique int id: @usertype ref,
+ string uuid: string ref
+);
+
+mangled_name(
+ unique int id: @declaration ref,
+ int mangled_name : @mangledname,
+ boolean is_complete: boolean ref
+);
+
+is_pod_class(unique int id: @usertype ref);
+is_standard_layout_class(unique int id: @usertype ref);
+
+is_complete(unique int id: @usertype ref);
+
+is_class_template(unique int id: @usertype ref);
+class_instantiation(
+ int to: @usertype ref,
+ int from: @usertype ref
+);
+class_template_argument(
+ int type_id: @usertype ref,
+ int index: int ref,
+ int arg_type: @type ref
+);
+class_template_argument_value(
+ int type_id: @usertype ref,
+ int index: int ref,
+ int arg_value: @expr ref
+);
+
+is_proxy_class_for(
+ unique int id: @usertype ref,
+ unique int templ_param_id: @usertype ref
+);
+
+type_mentions(
+ unique int id: @type_mention,
+ int type_id: @type ref,
+ int location: @location ref,
+ // a_symbol_reference_kind from the frontend.
+ int kind: int ref
+);
+
+is_function_template(unique int id: @function ref);
+function_instantiation(
+ unique int to: @function ref,
+ int from: @function ref
+);
+function_template_argument(
+ int function_id: @function ref,
+ int index: int ref,
+ int arg_type: @type ref
+);
+function_template_argument_value(
+ int function_id: @function ref,
+ int index: int ref,
+ int arg_value: @expr ref
+);
+
+is_variable_template(unique int id: @variable ref);
+variable_instantiation(
+ unique int to: @variable ref,
+ int from: @variable ref
+);
+variable_template_argument(
+ int variable_id: @variable ref,
+ int index: int ref,
+ int arg_type: @type ref
+);
+variable_template_argument_value(
+ int variable_id: @variable ref,
+ int index: int ref,
+ int arg_value: @expr ref
+);
+
+/*
+ Fixed point types
+ precision(1) = short, precision(2) = default, precision(3) = long
+ is_unsigned(1) = unsigned is_unsigned(2) = signed
+ is_fract_type(1) = declared with _Fract
+ saturating(1) = declared with _Sat
+*/
+/* TODO
+fixedpointtypes(
+ unique int id: @fixedpointtype,
+ int precision: int ref,
+ int is_unsigned: int ref,
+ int is_fract_type: int ref,
+ int saturating: int 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
+);
+
+attributes(
+ unique int id: @attribute,
+ int kind: int ref,
+ string name: string ref,
+ string name_space: string ref,
+ int location: @location_default ref
+);
+
+case @attribute.kind of
+ 0 = @gnuattribute
+| 1 = @stdattribute
+| 2 = @declspec
+| 3 = @msattribute
+| 4 = @alignas
+// ... 5 @objc_propertyattribute deprecated
+;
+
+attribute_args(
+ unique int id: @attribute_arg,
+ int kind: int ref,
+ int attribute: @attribute ref,
+ int index: int ref,
+ int location: @location_default ref
+);
+
+case @attribute_arg.kind of
+ 0 = @attribute_arg_empty
+| 1 = @attribute_arg_token
+| 2 = @attribute_arg_constant
+| 3 = @attribute_arg_type
+| 4 = @attribute_arg_constant_expr
+| 5 = @attribute_arg_expr
+;
+
+attribute_arg_value(
+ unique int arg: @attribute_arg ref,
+ string value: string ref
+);
+attribute_arg_type(
+ unique int arg: @attribute_arg ref,
+ int type_id: @type ref
+);
+attribute_arg_constant(
+ unique int arg: @attribute_arg ref,
+ int constant: @expr ref
+)
+attribute_arg_expr(
+ unique int arg: @attribute_arg ref,
+ int expr: @expr ref
+)
+attribute_arg_name(
+ unique int arg: @attribute_arg ref,
+ string name: string ref
+);
+
+typeattributes(
+ int type_id: @type ref,
+ int spec_id: @attribute ref
+);
+
+funcattributes(
+ int func_id: @function ref,
+ int spec_id: @attribute ref
+);
+
+varattributes(
+ int var_id: @accessible ref,
+ int spec_id: @attribute ref
+);
+
+stmtattributes(
+ int stmt_id: @stmt ref,
+ int spec_id: @attribute ref
+);
+
+@type = @builtintype
+ | @derivedtype
+ | @usertype
+ /* TODO | @fixedpointtype */
+ | @routinetype
+ | @ptrtomember
+ | @decltype;
+
+unspecifiedtype(
+ unique int type_id: @type ref,
+ int unspecified_type_id: @type ref
+);
+
+member(
+ int parent: @type ref,
+ int index: int ref,
+ int child: @member ref
+);
+
+@enclosingfunction_child = @usertype | @variable | @namespace
+
+enclosingfunction(
+ unique int child: @enclosingfunction_child ref,
+ int parent: @function ref
+);
+
+derivations(
+ unique int derivation: @derivation,
+ int sub: @type ref,
+ int index: int ref,
+ int super: @type ref,
+ int location: @location_default ref
+);
+
+derspecifiers(
+ int der_id: @derivation ref,
+ int spec_id: @specifier ref
+);
+
+/**
+ * Contains the byte offset of the base class subobject within the derived
+ * class. Only holds for non-virtual base classes, but see table
+ * `virtual_base_offsets` for offsets of virtual base class subobjects.
+ */
+direct_base_offsets(
+ unique int der_id: @derivation ref,
+ int offset: int ref
+);
+
+/**
+ * Contains the byte offset of the virtual base class subobject for class
+ * `super` within a most-derived object of class `sub`. `super` can be either a
+ * direct or indirect base class.
+ */
+#keyset[sub, super]
+virtual_base_offsets(
+ int sub: @usertype ref,
+ int super: @usertype ref,
+ int offset: int ref
+);
+
+frienddecls(
+ unique int id: @frienddecl,
+ int type_id: @type ref,
+ int decl_id: @declaration ref,
+ int location: @location_default ref
+);
+
+@declaredtype = @usertype ;
+
+@declaration = @function
+ | @declaredtype
+ | @variable
+ | @enumconstant
+ | @frienddecl;
+
+@member = @membervariable
+ | @function
+ | @declaredtype
+ | @enumconstant;
+
+@locatable = @diagnostic
+ | @declaration
+ | @ppd_include
+ | @ppd_define
+ | @macroinvocation
+ /*| @funcall*/
+ | @xmllocatable
+ | @attribute
+ | @attribute_arg;
+
+@namedscope = @namespace | @usertype;
+
+@element = @locatable
+ | @file
+ | @folder
+ | @specifier
+ | @type
+ | @expr
+ | @namespace
+ | @initialiser
+ | @stmt
+ | @derivation
+ | @comment
+ | @preprocdirect
+ | @fun_decl
+ | @var_decl
+ | @type_decl
+ | @namespace_decl
+ | @using
+ | @namequalifier
+ | @specialnamequalifyingelement
+ | @static_assert
+ | @type_mention
+ | @lambdacapture;
+
+@exprparent = @element;
+
+comments(
+ unique int id: @comment,
+ string contents: string ref,
+ int location: @location_default ref
+);
+
+commentbinding(
+ int id: @comment ref,
+ int element: @element ref
+);
+
+exprconv(
+ int converted: @expr ref,
+ unique int conversion: @expr ref
+);
+
+compgenerated(unique int id: @element ref);
+
+/**
+ * `destructor_call` destructs the `i`'th entity that should be
+ * destructed following `element`. Note that entities should be
+ * destructed in reverse construction order, so for a given `element`
+ * these should be called from highest to lowest `i`.
+ */
+#keyset[element, destructor_call]
+#keyset[element, i]
+synthetic_destructor_call(
+ int element: @element ref,
+ int i: int ref,
+ int destructor_call: @routineexpr ref
+);
+
+namespaces(
+ unique int id: @namespace,
+ string name: string ref
+);
+
+namespace_inline(
+ unique int id: @namespace ref
+);
+
+namespacembrs(
+ int parentid: @namespace ref,
+ unique int memberid: @namespacembr ref
+);
+
+@namespacembr = @declaration | @namespace;
+
+exprparents(
+ int expr_id: @expr ref,
+ int child_index: int ref,
+ int parent_id: @exprparent ref
+);
+
+expr_isload(unique int expr_id: @expr ref);
+
+@cast = @c_style_cast
+ | @const_cast
+ | @dynamic_cast
+ | @reinterpret_cast
+ | @static_cast
+ ;
+
+/*
+case @conversion.kind of
+ 0 = @simple_conversion // a numeric conversion, qualification conversion, or a reinterpret_cast
+| 1 = @bool_conversion // conversion to 'bool'
+| 2 = @base_class_conversion // a derived-to-base conversion
+| 3 = @derived_class_conversion // a base-to-derived conversion
+| 4 = @pm_base_class_conversion // a derived-to-base conversion of a pointer to member
+| 5 = @pm_derived_class_conversion // a base-to-derived conversion of a pointer to member
+| 6 = @glvalue_adjust // an adjustment of the type of a glvalue
+| 7 = @prvalue_adjust // an adjustment of the type of a prvalue
+;
+*/
+/**
+ * Describes the semantics represented by a cast expression. This is largely
+ * independent of the source syntax of the cast, so it is separate from the
+ * regular expression kind.
+ */
+conversionkinds(
+ unique int expr_id: @cast ref,
+ int kind: int ref
+);
+
+@conversion = @cast
+ | @array_to_pointer
+ | @parexpr
+ | @reference_to
+ | @ref_indirect
+ | @temp_init
+ ;
+
+/*
+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
+
+/*
+ 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
+);
+
+/*
+ case @deallocator.form of
+ 0 = plain
+ | 1 = size
+ | 2 = alignment
+ | 3 = size_and_alignment
+ ;
+*/
+
+/**
+ * The deallocator function associated with a `delete`, `delete[]`, `new`, or
+ * `new[]` expression. For a `new` or `new[]` expression, the deallocator is the
+ * one used to free memory if the initialization throws an exception.
+ * The `form` column specifies whether the deallocation call contains a size
+ * argument, and alignment argument, or both.
+ */
+expr_deallocator(
+ unique int expr: @new_or_delete_expr ref,
+ int func: @function ref,
+ int form: int ref
+);
+
+/**
+ * Holds if the `@conditionalexpr` is of the two operand form
+ * `guard ? : false`.
+ */
+expr_cond_two_operand(
+ unique int cond: @conditionalexpr ref
+);
+
+/**
+ * The guard of `@conditionalexpr` `guard ? true : false`
+ */
+expr_cond_guard(
+ unique int cond: @conditionalexpr ref,
+ int guard: @expr ref
+);
+
+/**
+ * The expression used when the guard of `@conditionalexpr`
+ * `guard ? true : false` holds. For the two operand form
+ * `guard ?: false` consider using `expr_cond_guard` instead.
+ */
+expr_cond_true(
+ unique int cond: @conditionalexpr ref,
+ int true: @expr ref
+);
+
+/**
+ * The expression used when the guard of `@conditionalexpr`
+ * `guard ? true : false` does not hold.
+ */
+expr_cond_false(
+ unique int cond: @conditionalexpr ref,
+ int false: @expr ref
+);
+
+/** A string representation of the value. */
+values(
+ unique int id: @value,
+ string str: string ref
+);
+
+/** The actual text in the source code for the value, if any. */
+valuetext(
+ unique int id: @value ref,
+ string text: string ref
+);
+
+valuebind(
+ int val: @value ref,
+ unique int expr: @expr ref
+);
+
+fieldoffsets(
+ unique int id: @variable ref,
+ int byteoffset: int ref,
+ int bitoffset: int ref
+);
+
+bitfield(
+ unique int id: @variable ref,
+ int bits: int ref,
+ int declared_bits: int ref
+);
+
+/* TODO
+memberprefix(
+ int member: @expr ref,
+ int prefix: @expr ref
+);
+*/
+
+/*
+ kind(1) = mbrcallexpr
+ kind(2) = mbrptrcallexpr
+ kind(3) = mbrptrmbrcallexpr
+ kind(4) = ptrmbrptrmbrcallexpr
+ kind(5) = mbrreadexpr // x.y
+ kind(6) = mbrptrreadexpr // p->y
+ kind(7) = mbrptrmbrreadexpr // x.*pm
+ kind(8) = mbrptrmbrptrreadexpr // x->*pm
+ kind(9) = staticmbrreadexpr // static x.y
+ kind(10) = staticmbrptrreadexpr // static p->y
+*/
+/* TODO
+memberaccess(
+ int member: @expr ref,
+ int kind: int ref
+);
+*/
+
+initialisers(
+ unique int init: @initialiser,
+ int var: @accessible ref,
+ unique int expr: @expr ref,
+ int location: @location_expr ref
+);
+
+braced_initialisers(
+ int init: @initialiser ref
+);
+
+/**
+ * An ancestor for the expression, for cases in which we cannot
+ * otherwise find the expression's parent.
+ */
+expr_ancestor(
+ int exp: @expr ref,
+ int ancestor: @element ref
+);
+
+exprs(
+ unique int id: @expr,
+ int kind: int ref,
+ int location: @location_expr ref
+);
+
+expr_reuse(
+ int reuse: @expr ref,
+ int original: @expr ref
+)
+
+/*
+ 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
+;
+
+@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
+ ;
+
+new_allocated_type(
+ unique int expr: @new_expr ref,
+ int type_id: @type ref
+);
+
+new_array_allocated_type(
+ unique int expr: @new_array_expr ref,
+ int type_id: @type ref
+);
+
+/**
+ * The field being initialized by an initializer expression within an aggregate
+ * initializer for a class/struct/union. Position is used to sort repeated initializers.
+ */
+#keyset[aggregate, position]
+aggregate_field_init(
+ int aggregate: @aggregateliteral ref,
+ int initializer: @expr ref,
+ int field: @membervariable ref,
+ int position: int ref
+);
+
+/**
+ * The index of the element being initialized by an initializer expression
+ * within an aggregate initializer for an array. Position is used to sort repeated initializers.
+ */
+#keyset[aggregate, position]
+aggregate_array_init(
+ int aggregate: @aggregateliteral ref,
+ int initializer: @expr ref,
+ int element_index: int ref,
+ int position: int ref
+);
+
+@ctorinit = @ctordirectinit
+ | @ctorvirtualinit
+ | @ctorfieldinit
+ | @ctordelegatinginit;
+@dtordestruct = @dtordirectdestruct
+ | @dtorvirtualdestruct
+ | @dtorfielddestruct;
+
+
+condition_decl_bind(
+ unique int expr: @condition_decl ref,
+ unique int decl: @declaration ref
+);
+
+typeid_bind(
+ unique int expr: @type_id ref,
+ int type_id: @type ref
+);
+
+uuidof_bind(
+ unique int expr: @uuidof ref,
+ int type_id: @type ref
+);
+
+@runtime_sizeof_or_alignof = @runtime_sizeof | @runtime_alignof;
+
+sizeof_bind(
+ unique int expr: @runtime_sizeof_or_alignof ref,
+ int type_id: @type ref
+);
+
+code_block(
+ unique int block: @literal ref,
+ unique int routine: @function ref
+);
+
+lambdas(
+ unique int expr: @lambdaexpr ref,
+ string default_capture: string ref,
+ boolean has_explicit_return_type: boolean ref
+);
+
+lambda_capture(
+ unique int id: @lambdacapture,
+ int lambda: @lambdaexpr ref,
+ int index: int ref,
+ int field: @membervariable ref,
+ boolean captured_by_reference: boolean ref,
+ boolean is_implicit: boolean ref,
+ int location: @location_default ref
+);
+
+@funbindexpr = @routineexpr
+ | @new_expr
+ | @delete_expr
+ | @delete_array_expr
+ | @ctordirectinit
+ | @ctorvirtualinit
+ | @ctordelegatinginit
+ | @dtordirectdestruct
+ | @dtorvirtualdestruct;
+
+@varbindexpr = @varaccess | @ctorfieldinit | @dtorfielddestruct;
+@addressable = @function | @variable ;
+@accessible = @addressable | @enumconstant ;
+
+@access = @varaccess | @routineexpr ;
+
+fold(
+ int expr: @foldexpr ref,
+ string operator: string ref,
+ boolean is_left_fold: boolean ref
+);
+
+stmts(
+ unique int id: @stmt,
+ int kind: int ref,
+ int location: @location_stmt ref
+);
+
+case @stmt.kind of
+ 1 = @stmt_expr
+| 2 = @stmt_if
+| 3 = @stmt_while
+| 4 = @stmt_goto
+| 5 = @stmt_label
+| 6 = @stmt_return
+| 7 = @stmt_block
+| 8 = @stmt_end_test_while // do { ... } while ( ... )
+| 9 = @stmt_for
+| 10 = @stmt_switch_case
+| 11 = @stmt_switch
+| 13 = @stmt_asm // "asm" statement or the body of an asm function
+| 15 = @stmt_try_block
+| 16 = @stmt_microsoft_try // Microsoft
+| 17 = @stmt_decl
+| 18 = @stmt_set_vla_size // C99
+| 19 = @stmt_vla_decl // C99
+| 25 = @stmt_assigned_goto // GNU
+| 26 = @stmt_empty
+| 27 = @stmt_continue
+| 28 = @stmt_break
+| 29 = @stmt_range_based_for // C++11
+// ... 30 @stmt_at_autoreleasepool_block deprecated
+// ... 31 @stmt_objc_for_in deprecated
+// ... 32 @stmt_at_synchronized deprecated
+| 33 = @stmt_handler
+// ... 34 @stmt_finally_end deprecated
+| 35 = @stmt_constexpr_if
+| 37 = @stmt_co_return
+;
+
+type_vla(
+ int type_id: @type ref,
+ int decl: @stmt_vla_decl ref
+);
+
+variable_vla(
+ int var: @variable ref,
+ int decl: @stmt_vla_decl ref
+);
+
+if_initialization(
+ unique int if_stmt: @stmt_if ref,
+ int init_id: @stmt ref
+);
+
+if_then(
+ unique int if_stmt: @stmt_if ref,
+ int then_id: @stmt ref
+);
+
+if_else(
+ unique int if_stmt: @stmt_if ref,
+ int else_id: @stmt ref
+);
+
+constexpr_if_initialization(
+ unique int constexpr_if_stmt: @stmt_constexpr_if ref,
+ int init_id: @stmt ref
+);
+
+constexpr_if_then(
+ unique int constexpr_if_stmt: @stmt_constexpr_if ref,
+ int then_id: @stmt ref
+);
+
+constexpr_if_else(
+ unique int constexpr_if_stmt: @stmt_constexpr_if ref,
+ int else_id: @stmt ref
+);
+
+while_body(
+ unique int while_stmt: @stmt_while ref,
+ int body_id: @stmt ref
+);
+
+do_body(
+ unique int do_stmt: @stmt_end_test_while ref,
+ int body_id: @stmt ref
+);
+
+switch_initialization(
+ unique int switch_stmt: @stmt_switch ref,
+ int init_id: @stmt ref
+);
+
+#keyset[switch_stmt, index]
+switch_case(
+ int switch_stmt: @stmt_switch ref,
+ int index: int ref,
+ int case_id: @stmt_switch_case ref
+);
+
+switch_body(
+ unique int switch_stmt: @stmt_switch ref,
+ int body_id: @stmt ref
+);
+
+@stmt_for_or_range_based_for = @stmt_for
+ | @stmt_range_based_for;
+
+for_initialization(
+ unique int for_stmt: @stmt_for_or_range_based_for ref,
+ int init_id: @stmt ref
+);
+
+for_condition(
+ unique int for_stmt: @stmt_for ref,
+ int condition_id: @expr ref
+);
+
+for_update(
+ unique int for_stmt: @stmt_for ref,
+ int update_id: @expr ref
+);
+
+for_body(
+ unique int for_stmt: @stmt_for ref,
+ int body_id: @stmt ref
+);
+
+@stmtparent = @stmt | @expr_stmt ;
+stmtparents(
+ unique int id: @stmt ref,
+ int index: int ref,
+ int parent: @stmtparent ref
+);
+
+ishandler(unique int block: @stmt_block ref);
+
+@cfgnode = @stmt | @expr | @function | @initialiser ;
+
+stmt_decl_bind(
+ int stmt: @stmt_decl ref,
+ int num: int ref,
+ int decl: @declaration ref
+);
+
+stmt_decl_entry_bind(
+ int stmt: @stmt_decl ref,
+ int num: int ref,
+ int decl_entry: @element ref
+);
+
+@functionorblock = @function | @stmt_block;
+
+blockscope(
+ unique int block: @stmt_block ref,
+ int enclosing: @functionorblock ref
+);
+
+@jump = @stmt_goto | @stmt_break | @stmt_continue;
+
+@jumporlabel = @jump | @stmt_label | @literal;
+
+jumpinfo(
+ unique int id: @jumporlabel ref,
+ string str: string ref,
+ int target: @stmt ref
+);
+
+preprocdirects(
+ unique int id: @preprocdirect,
+ int kind: int ref,
+ int location: @location_default ref
+);
+case @preprocdirect.kind of
+ 0 = @ppd_if
+| 1 = @ppd_ifdef
+| 2 = @ppd_ifndef
+| 3 = @ppd_elif
+| 4 = @ppd_else
+| 5 = @ppd_endif
+| 6 = @ppd_plain_include
+| 7 = @ppd_define
+| 8 = @ppd_undef
+| 9 = @ppd_line
+| 10 = @ppd_error
+| 11 = @ppd_pragma
+| 12 = @ppd_objc_import
+| 13 = @ppd_include_next
+| 18 = @ppd_warning
+;
+
+@ppd_include = @ppd_plain_include | @ppd_objc_import | @ppd_include_next;
+
+@ppd_branch = @ppd_if | @ppd_ifdef | @ppd_ifndef | @ppd_elif;
+
+preprocpair(
+ int begin : @ppd_branch ref,
+ int elseelifend : @preprocdirect ref
+);
+
+preproctrue(int branch : @ppd_branch ref);
+preprocfalse(int branch : @ppd_branch ref);
+
+preproctext(
+ unique int id: @preprocdirect ref,
+ string head: string ref,
+ string body: string ref
+);
+
+includes(
+ unique int id: @ppd_include ref,
+ int included: @file ref
+);
+
+link_targets(
+ int id: @link_target,
+ int binary: @file ref
+);
+
+link_parent(
+ int element : @element ref,
+ int link_target : @link_target ref
+);
+
+/* XML Files */
+
+xmlEncoding(unique int id: @file ref, string encoding: string ref);
+
+xmlDTDs(
+ unique int id: @xmldtd,
+ string root: string ref,
+ string publicId: string ref,
+ string systemId: string ref,
+ int fileid: @file ref
+);
+
+xmlElements(
+ unique int id: @xmlelement,
+ string name: string ref,
+ int parentid: @xmlparent ref,
+ int idx: int ref,
+ int fileid: @file ref
+);
+
+xmlAttrs(
+ unique int id: @xmlattribute,
+ int elementid: @xmlelement ref,
+ string name: string ref,
+ string value: string ref,
+ int idx: int ref,
+ int fileid: @file ref
+);
+
+xmlNs(
+ int id: @xmlnamespace,
+ string prefixName: string ref,
+ string URI: string ref,
+ int fileid: @file ref
+);
+
+xmlHasNs(
+ int elementId: @xmlnamespaceable ref,
+ int nsId: @xmlnamespace ref,
+ int fileid: @file ref
+);
+
+xmlComments(
+ unique int id: @xmlcomment,
+ string text: string ref,
+ int parentid: @xmlparent ref,
+ int fileid: @file ref
+);
+
+xmlChars(
+ unique int id: @xmlcharacters,
+ string text: string ref,
+ int parentid: @xmlparent ref,
+ int idx: int ref,
+ int isCDATA: int ref,
+ int fileid: @file ref
+);
+
+@xmlparent = @file | @xmlelement;
+@xmlnamespaceable = @xmlelement | @xmlattribute;
+
+xmllocations(
+ int xmlElement: @xmllocatable ref,
+ int location: @location_default ref
+);
+
+@xmllocatable = @xmlcharacters
+ | @xmlelement
+ | @xmlcomment
+ | @xmlattribute
+ | @xmldtd
+ | @file
+ | @xmlnamespace;
diff --git a/cpp/ql/lib/upgrades/aa7ff0ab32cd4674f6ab731d32fea64116997b05/semmlecode.cpp.dbscheme b/cpp/ql/lib/upgrades/aa7ff0ab32cd4674f6ab731d32fea64116997b05/semmlecode.cpp.dbscheme
new file mode 100644
index 00000000000..abfce5c170f
--- /dev/null
+++ b/cpp/ql/lib/upgrades/aa7ff0ab32cd4674f6ab731d32fea64116997b05/semmlecode.cpp.dbscheme
@@ -0,0 +1,2251 @@
+
+/**
+ * An invocation of the compiler. Note that more than one file may be
+ * compiled per invocation. For example, this command compiles three
+ * source files:
+ *
+ * gcc -c f1.c f2.c f3.c
+ *
+ * The `id` simply identifies the invocation, while `cwd` is the working
+ * directory from which the compiler was invoked.
+ */
+compilations(
+ /**
+ * An invocation of the compiler. Note that more than one file may
+ * be compiled per invocation. For example, this command compiles
+ * three source files:
+ *
+ * gcc -c f1.c f2.c f3.c
+ */
+ unique int id : @compilation,
+ string cwd : string ref
+);
+
+/**
+ * The arguments that were passed to the extractor for a compiler
+ * invocation. If `id` is for the compiler invocation
+ *
+ * gcc -c f1.c f2.c f3.c
+ *
+ * then typically there will be rows for
+ *
+ * num | arg
+ * --- | ---
+ * 0 | *path to extractor*
+ * 1 | `--mimic`
+ * 2 | `/usr/bin/gcc`
+ * 3 | `-c`
+ * 4 | f1.c
+ * 5 | f2.c
+ * 6 | f3.c
+ */
+#keyset[id, num]
+compilation_args(
+ int id : @compilation ref,
+ int num : int ref,
+ string arg : string ref
+);
+
+/**
+ * The source files that are compiled by a compiler invocation.
+ * If `id` is for the compiler invocation
+ *
+ * gcc -c f1.c f2.c f3.c
+ *
+ * then there will be rows for
+ *
+ * num | arg
+ * --- | ---
+ * 0 | f1.c
+ * 1 | f2.c
+ * 2 | f3.c
+ *
+ * Note that even if those files `#include` headers, those headers
+ * do not appear as rows.
+ */
+#keyset[id, num]
+compilation_compiling_files(
+ int id : @compilation ref,
+ int num : int ref,
+ int file : @file ref
+);
+
+/**
+ * The time taken by the extractor for a compiler invocation.
+ *
+ * For each file `num`, there will be rows for
+ *
+ * kind | seconds
+ * ---- | ---
+ * 1 | CPU seconds used by the extractor frontend
+ * 2 | Elapsed seconds during the extractor frontend
+ * 3 | CPU seconds used by the extractor backend
+ * 4 | Elapsed seconds during the extractor backend
+ */
+#keyset[id, num, kind]
+compilation_time(
+ int id : @compilation ref,
+ int num : int ref,
+ /* kind:
+ 1 = frontend_cpu_seconds
+ 2 = frontend_elapsed_seconds
+ 3 = extractor_cpu_seconds
+ 4 = extractor_elapsed_seconds
+ */
+ int kind : int ref,
+ float seconds : float ref
+);
+
+/**
+ * An error or warning generated by the extractor.
+ * The diagnostic message `diagnostic` was generated during compiler
+ * invocation `compilation`, and is the `file_number_diagnostic_number`th
+ * message generated while extracting the `file_number`th file of that
+ * invocation.
+ */
+#keyset[compilation, file_number, file_number_diagnostic_number]
+diagnostic_for(
+ int diagnostic : @diagnostic ref,
+ int compilation : @compilation ref,
+ int file_number : int ref,
+ int file_number_diagnostic_number : int ref
+);
+
+/**
+ * If extraction was successful, then `cpu_seconds` and
+ * `elapsed_seconds` are the CPU time and elapsed time (respectively)
+ * that extraction took for compiler invocation `id`.
+ */
+compilation_finished(
+ unique int id : @compilation ref,
+ float cpu_seconds : float ref,
+ float elapsed_seconds : float ref
+);
+
+
+/**
+ * External data, loaded from CSV files during snapshot creation. See
+ * [Tutorial: Incorporating external data](https://help.semmle.com/wiki/display/SD/Tutorial%3A+Incorporating+external+data)
+ * for more information.
+ */
+externalData(
+ int id : @externalDataElement,
+ string path : string ref,
+ int column: int ref,
+ string value : string ref
+);
+
+/**
+ * The source location of the snapshot.
+ */
+sourceLocationPrefix(string prefix : string ref);
+
+/**
+ * Information about packages that provide code used during compilation.
+ * The `id` is just a unique identifier.
+ * The `namespace` is typically the name of the package manager that
+ * provided the package (e.g. "dpkg" or "yum").
+ * The `package_name` is the name of the package, and `version` is its
+ * version (as a string).
+ */
+external_packages(
+ unique int id: @external_package,
+ string namespace : string ref,
+ string package_name : string ref,
+ string version : string ref
+);
+
+/**
+ * Holds if File `fileid` was provided by package `package`.
+ */
+header_to_external_package(
+ int fileid : @file ref,
+ int package : @external_package ref
+);
+
+/*
+ * Version history
+ */
+
+svnentries(
+ unique int id : @svnentry,
+ string revision : string ref,
+ string author : string ref,
+ date revisionDate : date ref,
+ int changeSize : int ref
+)
+
+svnaffectedfiles(
+ int id : @svnentry ref,
+ int file : @file ref,
+ string action : string ref
+)
+
+svnentrymsg(
+ unique int id : @svnentry ref,
+ string message : string ref
+)
+
+svnchurn(
+ int commit : @svnentry ref,
+ int file : @file ref,
+ int addedLines : int ref,
+ int deletedLines : int ref
+)
+
+/*
+ * C++ dbscheme
+ */
+
+extractor_version(
+ string codeql_version: string ref,
+ string frontend_version: string ref
+)
+
+@location = @location_stmt | @location_expr | @location_default ;
+
+/**
+ * The location of an element that is not an expression or a statement.
+ * The location spans column `startcolumn` of line `startline` to
+ * column `endcolumn` of line `endline` in file `file`.
+ * For more information, see
+ * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/).
+ */
+locations_default(
+ /** The location of an element that is not an expression or a statement. */
+ unique int id: @location_default,
+ int container: @container ref,
+ int startLine: int ref,
+ int startColumn: int ref,
+ int endLine: int ref,
+ int endColumn: int ref
+);
+
+/**
+ * The location of a statement.
+ * The location spans column `startcolumn` of line `startline` to
+ * column `endcolumn` of line `endline` in file `file`.
+ * For more information, see
+ * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/).
+ */
+locations_stmt(
+ /** The location of a statement. */
+ unique int id: @location_stmt,
+ int container: @container ref,
+ int startLine: int ref,
+ int startColumn: int ref,
+ int endLine: int ref,
+ int endColumn: int ref
+);
+
+/**
+ * The location of an expression.
+ * The location spans column `startcolumn` of line `startline` to
+ * column `endcolumn` of line `endline` in file `file`.
+ * For more information, see
+ * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/).
+ */
+locations_expr(
+ /** The location of an expression. */
+ unique int id: @location_expr,
+ int container: @container ref,
+ int startLine: int ref,
+ int startColumn: int ref,
+ int endLine: int ref,
+ int endColumn: int ref
+);
+
+/** An element for which line-count information is available. */
+@sourceline = @file | @function | @variable | @enumconstant | @xmllocatable;
+
+numlines(
+ int element_id: @sourceline ref,
+ int num_lines: int ref,
+ int num_code: int ref,
+ int num_comment: int ref
+);
+
+diagnostics(
+ unique int id: @diagnostic,
+ int severity: int ref,
+ string error_tag: string ref,
+ string error_message: string ref,
+ string full_error_message: string ref,
+ int location: @location_default ref
+);
+
+files(
+ unique int id: @file,
+ string name: string ref
+);
+
+folders(
+ unique int id: @folder,
+ string name: string ref
+);
+
+@container = @folder | @file
+
+containerparent(
+ int parent: @container ref,
+ unique int child: @container ref
+);
+
+fileannotations(
+ int id: @file ref,
+ int kind: int ref,
+ string name: string ref,
+ string value: string ref
+);
+
+inmacroexpansion(
+ int id: @element ref,
+ int inv: @macroinvocation ref
+);
+
+affectedbymacroexpansion(
+ int id: @element ref,
+ int inv: @macroinvocation ref
+);
+
+case @macroinvocation.kind of
+ 1 = @macro_expansion
+| 2 = @other_macro_reference
+;
+
+macroinvocations(
+ unique int id: @macroinvocation,
+ int macro_id: @ppd_define ref,
+ int location: @location_default ref,
+ int kind: int ref
+);
+
+macroparent(
+ unique int id: @macroinvocation ref,
+ int parent_id: @macroinvocation ref
+);
+
+// a macroinvocation may be part of another location
+// the way to find a constant expression that uses a macro
+// is thus to find a constant expression that has a location
+// to which a macro invocation is bound
+macrolocationbind(
+ int id: @macroinvocation ref,
+ int location: @location ref
+);
+
+#keyset[invocation, argument_index]
+macro_argument_unexpanded(
+ int invocation: @macroinvocation ref,
+ int argument_index: int ref,
+ string text: string ref
+);
+
+#keyset[invocation, argument_index]
+macro_argument_expanded(
+ int invocation: @macroinvocation ref,
+ int argument_index: int ref,
+ string text: string ref
+);
+
+/*
+case @function.kind of
+ 1 = @normal_function
+| 2 = @constructor
+| 3 = @destructor
+| 4 = @conversion_function
+| 5 = @operator
+| 6 = @builtin_function // GCC built-in functions, e.g. __builtin___memcpy_chk
+| 7 = @user_defined_literal
+| 8 = @deduction_guide
+;
+*/
+
+functions(
+ unique int id: @function,
+ string name: string ref,
+ int kind: int ref
+);
+
+function_entry_point(
+ int id: @function ref,
+ unique int entry_point: @stmt ref
+);
+
+function_return_type(
+ int id: @function ref,
+ int return_type: @type ref
+);
+
+/**
+ * If `function` is a coroutine, then this gives the `std::experimental::resumable_traits`
+ * instance associated with it, and the variables representing the `handle` and `promise`
+ * for it.
+ */
+coroutine(
+ unique int function: @function ref,
+ int traits: @type ref,
+ int handle: @variable ref,
+ int promise: @variable 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)
+
+member_function_this_type(
+ unique int id: @function ref,
+ int this_type: @type ref
+);
+
+#keyset[id, type_id]
+fun_decls(
+ int id: @fun_decl,
+ int function: @function ref,
+ int type_id: @type ref,
+ string name: string ref,
+ int location: @location_default ref
+);
+fun_def(unique int id: @fun_decl ref);
+fun_specialized(unique int id: @fun_decl ref);
+fun_implicit(unique int id: @fun_decl ref);
+fun_decl_specifiers(
+ int id: @fun_decl ref,
+ string name: string ref
+)
+#keyset[fun_decl, index]
+fun_decl_throws(
+ int fun_decl: @fun_decl ref,
+ int index: int ref,
+ int type_id: @type ref
+);
+/* an empty throw specification is different from none */
+fun_decl_empty_throws(unique int fun_decl: @fun_decl ref);
+fun_decl_noexcept(
+ int fun_decl: @fun_decl ref,
+ int constant: @expr ref
+);
+fun_decl_empty_noexcept(int fun_decl: @fun_decl ref);
+fun_decl_typedef_type(
+ unique int fun_decl: @fun_decl ref,
+ int typedeftype_id: @usertype ref
+);
+
+param_decl_bind(
+ unique int id: @var_decl ref,
+ int index: int ref,
+ int fun_decl: @fun_decl ref
+);
+
+#keyset[id, type_id]
+var_decls(
+ int id: @var_decl,
+ int variable: @variable ref,
+ int type_id: @type ref,
+ string name: string ref,
+ int location: @location_default ref
+);
+var_def(unique int id: @var_decl ref);
+var_decl_specifiers(
+ int id: @var_decl ref,
+ string name: string ref
+)
+is_structured_binding(unique int id: @variable ref);
+
+type_decls(
+ unique int id: @type_decl,
+ int type_id: @type ref,
+ int location: @location_default ref
+);
+type_def(unique int id: @type_decl ref);
+type_decl_top(
+ unique int type_decl: @type_decl ref
+);
+
+namespace_decls(
+ unique int id: @namespace_decl,
+ int namespace_id: @namespace ref,
+ int location: @location_default ref,
+ int bodylocation: @location_default ref
+);
+
+usings(
+ unique int id: @using,
+ int element_id: @element ref,
+ int location: @location_default ref
+);
+
+/** The element which contains the `using` declaration. */
+using_container(
+ int parent: @element ref,
+ int child: @using ref
+);
+
+static_asserts(
+ unique int id: @static_assert,
+ int condition : @expr ref,
+ string message : string ref,
+ int location: @location_default ref,
+ int enclosing : @element ref
+);
+
+// each function has an ordered list of parameters
+#keyset[id, type_id]
+#keyset[function, index, type_id]
+params(
+ int id: @parameter,
+ int function: @functionorblock ref,
+ int index: int ref,
+ int type_id: @type ref
+);
+
+overrides(
+ int new: @function ref,
+ int old: @function ref
+);
+
+#keyset[id, type_id]
+membervariables(
+ int id: @membervariable,
+ int type_id: @type ref,
+ string name: string ref
+);
+
+#keyset[id, type_id]
+globalvariables(
+ int id: @globalvariable,
+ int type_id: @type ref,
+ string name: string ref
+);
+
+#keyset[id, type_id]
+localvariables(
+ int id: @localvariable,
+ int type_id: @type ref,
+ string name: string ref
+);
+
+autoderivation(
+ unique int var: @variable ref,
+ int derivation_type: @type ref
+);
+
+orphaned_variables(
+ int var: @localvariable ref,
+ int function: @function ref
+)
+
+enumconstants(
+ unique int id: @enumconstant,
+ int parent: @usertype ref,
+ int index: int ref,
+ int type_id: @type ref,
+ string name: string ref,
+ int location: @location_default ref
+);
+
+@variable = @localscopevariable | @globalvariable | @membervariable;
+
+@localscopevariable = @localvariable | @parameter;
+
+/**
+ * Built-in types are the fundamental types, e.g., integral, floating, and void.
+ */
+case @builtintype.kind of
+ 1 = @errortype
+| 2 = @unknowntype
+| 3 = @void
+| 4 = @boolean
+| 5 = @char
+| 6 = @unsigned_char
+| 7 = @signed_char
+| 8 = @short
+| 9 = @unsigned_short
+| 10 = @signed_short
+| 11 = @int
+| 12 = @unsigned_int
+| 13 = @signed_int
+| 14 = @long
+| 15 = @unsigned_long
+| 16 = @signed_long
+| 17 = @long_long
+| 18 = @unsigned_long_long
+| 19 = @signed_long_long
+// ... 20 Microsoft-specific __int8
+// ... 21 Microsoft-specific __int16
+// ... 22 Microsoft-specific __int32
+// ... 23 Microsoft-specific __int64
+| 24 = @float
+| 25 = @double
+| 26 = @long_double
+| 27 = @complex_float // C99-specific _Complex float
+| 28 = @complex_double // C99-specific _Complex double
+| 29 = @complex_long_double // C99-specific _Complex long double
+| 30 = @imaginary_float // C99-specific _Imaginary float
+| 31 = @imaginary_double // C99-specific _Imaginary double
+| 32 = @imaginary_long_double // C99-specific _Imaginary long double
+| 33 = @wchar_t // Microsoft-specific
+| 34 = @decltype_nullptr // C++11
+| 35 = @int128 // __int128
+| 36 = @unsigned_int128 // unsigned __int128
+| 37 = @signed_int128 // signed __int128
+| 38 = @float128 // __float128
+| 39 = @complex_float128 // _Complex __float128
+| 40 = @decimal32 // _Decimal32
+| 41 = @decimal64 // _Decimal64
+| 42 = @decimal128 // _Decimal128
+| 43 = @char16_t
+| 44 = @char32_t
+| 45 = @std_float32 // _Float32
+| 46 = @float32x // _Float32x
+| 47 = @std_float64 // _Float64
+| 48 = @float64x // _Float64x
+| 49 = @std_float128 // _Float128
+// ... 50 _Float128x
+| 51 = @char8_t
+| 52 = @float16 // _Float16
+| 53 = @complex_float16 // _Complex _Float16
+| 54 = @fp16 // __fp16
+| 55 = @std_bfloat16 // __bf16
+| 56 = @std_float16 // std::float16_t
+| 57 = @complex_std_float32 // _Complex _Float32
+| 58 = @complex_float32x // _Complex _Float32x
+| 59 = @complex_std_float64 // _Complex _Float64
+| 60 = @complex_float64x // _Complex _Float64x
+| 61 = @complex_std_float128 // _Complex _Float128
+;
+
+builtintypes(
+ unique int id: @builtintype,
+ string name: string ref,
+ int kind: int ref,
+ int size: int ref,
+ int sign: int ref,
+ int alignment: int ref
+);
+
+/**
+ * Derived types are types that are directly derived from existing types and
+ * point to, refer to, transform type data to return a new type.
+ */
+case @derivedtype.kind of
+ 1 = @pointer
+| 2 = @reference
+| 3 = @type_with_specifiers
+| 4 = @array
+| 5 = @gnu_vector
+| 6 = @routineptr
+| 7 = @routinereference
+| 8 = @rvalue_reference // C++11
+// ... 9 type_conforming_to_protocols deprecated
+| 10 = @block
+;
+
+derivedtypes(
+ unique int id: @derivedtype,
+ string name: string ref,
+ int kind: int ref,
+ int type_id: @type ref
+);
+
+pointerishsize(unique int id: @derivedtype ref,
+ int size: int ref,
+ int alignment: int ref);
+
+arraysizes(
+ unique int id: @derivedtype ref,
+ int num_elements: int ref,
+ int bytesize: int ref,
+ int alignment: int ref
+);
+
+typedefbase(
+ unique int id: @usertype ref,
+ int type_id: @type ref
+);
+
+/**
+ * An instance of the C++11 `decltype` operator. For example:
+ * ```
+ * int a;
+ * decltype(1+a) b;
+ * ```
+ * Here `expr` is `1+a`.
+ *
+ * Sometimes an additional pair of parentheses around the expression
+ * would change the semantics of this decltype, e.g.
+ * ```
+ * struct A { double x; };
+ * const A* a = new A();
+ * decltype( a->x ); // type is double
+ * decltype((a->x)); // type is const double&
+ * ```
+ * (Please consult the C++11 standard for more details).
+ * `parentheses_would_change_meaning` is `true` iff that is the case.
+ */
+#keyset[id, expr]
+decltypes(
+ int id: @decltype,
+ int expr: @expr ref,
+ int base_type: @type ref,
+ boolean parentheses_would_change_meaning: boolean ref
+);
+
+/*
+case @usertype.kind of
+ 1 = @struct
+| 2 = @class
+| 3 = @union
+| 4 = @enum
+| 5 = @typedef // classic C: typedef typedef type name
+| 6 = @template
+| 7 = @template_parameter
+| 8 = @template_template_parameter
+| 9 = @proxy_class // a proxy class associated with a template parameter
+// ... 10 objc_class deprecated
+// ... 11 objc_protocol deprecated
+// ... 12 objc_category deprecated
+| 13 = @scoped_enum
+| 14 = @using_alias // a using name = type style typedef
+;
+*/
+
+usertypes(
+ unique int id: @usertype,
+ string name: string ref,
+ int kind: int ref
+);
+
+usertypesize(
+ unique int id: @usertype ref,
+ int size: int ref,
+ int alignment: int ref
+);
+
+usertype_final(unique int id: @usertype ref);
+
+usertype_uuid(
+ unique int id: @usertype ref,
+ string uuid: string ref
+);
+
+mangled_name(
+ unique int id: @declaration ref,
+ int mangled_name : @mangledname,
+ boolean is_complete: boolean ref
+);
+
+is_pod_class(unique int id: @usertype ref);
+is_standard_layout_class(unique int id: @usertype ref);
+
+is_complete(unique int id: @usertype ref);
+
+is_class_template(unique int id: @usertype ref);
+class_instantiation(
+ int to: @usertype ref,
+ int from: @usertype ref
+);
+class_template_argument(
+ int type_id: @usertype ref,
+ int index: int ref,
+ int arg_type: @type ref
+);
+class_template_argument_value(
+ int type_id: @usertype ref,
+ int index: int ref,
+ int arg_value: @expr ref
+);
+
+is_proxy_class_for(
+ unique int id: @usertype ref,
+ unique int templ_param_id: @usertype ref
+);
+
+type_mentions(
+ unique int id: @type_mention,
+ int type_id: @type ref,
+ int location: @location ref,
+ // a_symbol_reference_kind from the frontend.
+ int kind: int ref
+);
+
+is_function_template(unique int id: @function ref);
+function_instantiation(
+ unique int to: @function ref,
+ int from: @function ref
+);
+function_template_argument(
+ int function_id: @function ref,
+ int index: int ref,
+ int arg_type: @type ref
+);
+function_template_argument_value(
+ int function_id: @function ref,
+ int index: int ref,
+ int arg_value: @expr ref
+);
+
+is_variable_template(unique int id: @variable ref);
+variable_instantiation(
+ unique int to: @variable ref,
+ int from: @variable ref
+);
+variable_template_argument(
+ int variable_id: @variable ref,
+ int index: int ref,
+ int arg_type: @type ref
+);
+variable_template_argument_value(
+ int variable_id: @variable ref,
+ int index: int ref,
+ int arg_value: @expr ref
+);
+
+/*
+ Fixed point types
+ precision(1) = short, precision(2) = default, precision(3) = long
+ is_unsigned(1) = unsigned is_unsigned(2) = signed
+ is_fract_type(1) = declared with _Fract
+ saturating(1) = declared with _Sat
+*/
+/* TODO
+fixedpointtypes(
+ unique int id: @fixedpointtype,
+ int precision: int ref,
+ int is_unsigned: int ref,
+ int is_fract_type: int ref,
+ int saturating: int 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
+);
+
+attributes(
+ unique int id: @attribute,
+ int kind: int ref,
+ string name: string ref,
+ string name_space: string ref,
+ int location: @location_default ref
+);
+
+case @attribute.kind of
+ 0 = @gnuattribute
+| 1 = @stdattribute
+| 2 = @declspec
+| 3 = @msattribute
+| 4 = @alignas
+// ... 5 @objc_propertyattribute deprecated
+;
+
+attribute_args(
+ unique int id: @attribute_arg,
+ int kind: int ref,
+ int attribute: @attribute ref,
+ int index: int ref,
+ int location: @location_default ref
+);
+
+case @attribute_arg.kind of
+ 0 = @attribute_arg_empty
+| 1 = @attribute_arg_token
+| 2 = @attribute_arg_constant
+| 3 = @attribute_arg_type
+| 4 = @attribute_arg_constant_expr
+| 5 = @attribute_arg_expr
+;
+
+attribute_arg_value(
+ unique int arg: @attribute_arg ref,
+ string value: string ref
+);
+attribute_arg_type(
+ unique int arg: @attribute_arg ref,
+ int type_id: @type ref
+);
+attribute_arg_constant(
+ unique int arg: @attribute_arg ref,
+ int constant: @expr ref
+)
+attribute_arg_expr(
+ unique int arg: @attribute_arg ref,
+ int expr: @expr ref
+)
+attribute_arg_name(
+ unique int arg: @attribute_arg ref,
+ string name: string ref
+);
+
+typeattributes(
+ int type_id: @type ref,
+ int spec_id: @attribute ref
+);
+
+funcattributes(
+ int func_id: @function ref,
+ int spec_id: @attribute ref
+);
+
+varattributes(
+ int var_id: @accessible ref,
+ int spec_id: @attribute ref
+);
+
+stmtattributes(
+ int stmt_id: @stmt ref,
+ int spec_id: @attribute ref
+);
+
+@type = @builtintype
+ | @derivedtype
+ | @usertype
+ /* TODO | @fixedpointtype */
+ | @routinetype
+ | @ptrtomember
+ | @decltype;
+
+unspecifiedtype(
+ unique int type_id: @type ref,
+ int unspecified_type_id: @type ref
+);
+
+member(
+ int parent: @type ref,
+ int index: int ref,
+ int child: @member ref
+);
+
+@enclosingfunction_child = @usertype | @variable | @namespace
+
+enclosingfunction(
+ unique int child: @enclosingfunction_child ref,
+ int parent: @function ref
+);
+
+derivations(
+ unique int derivation: @derivation,
+ int sub: @type ref,
+ int index: int ref,
+ int super: @type ref,
+ int location: @location_default ref
+);
+
+derspecifiers(
+ int der_id: @derivation ref,
+ int spec_id: @specifier ref
+);
+
+/**
+ * Contains the byte offset of the base class subobject within the derived
+ * class. Only holds for non-virtual base classes, but see table
+ * `virtual_base_offsets` for offsets of virtual base class subobjects.
+ */
+direct_base_offsets(
+ unique int der_id: @derivation ref,
+ int offset: int ref
+);
+
+/**
+ * Contains the byte offset of the virtual base class subobject for class
+ * `super` within a most-derived object of class `sub`. `super` can be either a
+ * direct or indirect base class.
+ */
+#keyset[sub, super]
+virtual_base_offsets(
+ int sub: @usertype ref,
+ int super: @usertype ref,
+ int offset: int ref
+);
+
+frienddecls(
+ unique int id: @frienddecl,
+ int type_id: @type ref,
+ int decl_id: @declaration ref,
+ int location: @location_default ref
+);
+
+@declaredtype = @usertype ;
+
+@declaration = @function
+ | @declaredtype
+ | @variable
+ | @enumconstant
+ | @frienddecl;
+
+@member = @membervariable
+ | @function
+ | @declaredtype
+ | @enumconstant;
+
+@locatable = @diagnostic
+ | @declaration
+ | @ppd_include
+ | @ppd_define
+ | @macroinvocation
+ /*| @funcall*/
+ | @xmllocatable
+ | @attribute
+ | @attribute_arg;
+
+@namedscope = @namespace | @usertype;
+
+@element = @locatable
+ | @file
+ | @folder
+ | @specifier
+ | @type
+ | @expr
+ | @namespace
+ | @initialiser
+ | @stmt
+ | @derivation
+ | @comment
+ | @preprocdirect
+ | @fun_decl
+ | @var_decl
+ | @type_decl
+ | @namespace_decl
+ | @using
+ | @namequalifier
+ | @specialnamequalifyingelement
+ | @static_assert
+ | @type_mention
+ | @lambdacapture;
+
+@exprparent = @element;
+
+comments(
+ unique int id: @comment,
+ string contents: string ref,
+ int location: @location_default ref
+);
+
+commentbinding(
+ int id: @comment ref,
+ int element: @element ref
+);
+
+exprconv(
+ int converted: @expr ref,
+ unique int conversion: @expr ref
+);
+
+compgenerated(unique int id: @element ref);
+
+/**
+ * `destructor_call` destructs the `i`'th entity that should be
+ * destructed following `element`. Note that entities should be
+ * destructed in reverse construction order, so for a given `element`
+ * these should be called from highest to lowest `i`.
+ */
+#keyset[element, destructor_call]
+#keyset[element, i]
+synthetic_destructor_call(
+ int element: @element ref,
+ int i: int ref,
+ int destructor_call: @routineexpr ref
+);
+
+namespaces(
+ unique int id: @namespace,
+ string name: string ref
+);
+
+namespace_inline(
+ unique int id: @namespace ref
+);
+
+namespacembrs(
+ int parentid: @namespace ref,
+ unique int memberid: @namespacembr ref
+);
+
+@namespacembr = @declaration | @namespace;
+
+exprparents(
+ int expr_id: @expr ref,
+ int child_index: int ref,
+ int parent_id: @exprparent ref
+);
+
+expr_isload(unique int expr_id: @expr ref);
+
+@cast = @c_style_cast
+ | @const_cast
+ | @dynamic_cast
+ | @reinterpret_cast
+ | @static_cast
+ ;
+
+/*
+case @conversion.kind of
+ 0 = @simple_conversion // a numeric conversion, qualification conversion, or a reinterpret_cast
+| 1 = @bool_conversion // conversion to 'bool'
+| 2 = @base_class_conversion // a derived-to-base conversion
+| 3 = @derived_class_conversion // a base-to-derived conversion
+| 4 = @pm_base_class_conversion // a derived-to-base conversion of a pointer to member
+| 5 = @pm_derived_class_conversion // a base-to-derived conversion of a pointer to member
+| 6 = @glvalue_adjust // an adjustment of the type of a glvalue
+| 7 = @prvalue_adjust // an adjustment of the type of a prvalue
+;
+*/
+/**
+ * Describes the semantics represented by a cast expression. This is largely
+ * independent of the source syntax of the cast, so it is separate from the
+ * regular expression kind.
+ */
+conversionkinds(
+ unique int expr_id: @cast ref,
+ int kind: int ref
+);
+
+@conversion = @cast
+ | @array_to_pointer
+ | @parexpr
+ | @reference_to
+ | @ref_indirect
+ | @temp_init
+ ;
+
+/*
+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
+
+/*
+ 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
+);
+
+/*
+ case @deallocator.form of
+ 0 = plain
+ | 1 = size
+ | 2 = alignment
+ | 3 = size_and_alignment
+ ;
+*/
+
+/**
+ * The deallocator function associated with a `delete`, `delete[]`, `new`, or
+ * `new[]` expression. For a `new` or `new[]` expression, the deallocator is the
+ * one used to free memory if the initialization throws an exception.
+ * The `form` column specifies whether the deallocation call contains a size
+ * argument, and alignment argument, or both.
+ */
+expr_deallocator(
+ unique int expr: @new_or_delete_expr ref,
+ int func: @function ref,
+ int form: int ref
+);
+
+/**
+ * Holds if the `@conditionalexpr` is of the two operand form
+ * `guard ? : false`.
+ */
+expr_cond_two_operand(
+ unique int cond: @conditionalexpr ref
+);
+
+/**
+ * The guard of `@conditionalexpr` `guard ? true : false`
+ */
+expr_cond_guard(
+ unique int cond: @conditionalexpr ref,
+ int guard: @expr ref
+);
+
+/**
+ * The expression used when the guard of `@conditionalexpr`
+ * `guard ? true : false` holds. For the two operand form
+ * `guard ?: false` consider using `expr_cond_guard` instead.
+ */
+expr_cond_true(
+ unique int cond: @conditionalexpr ref,
+ int true: @expr ref
+);
+
+/**
+ * The expression used when the guard of `@conditionalexpr`
+ * `guard ? true : false` does not hold.
+ */
+expr_cond_false(
+ unique int cond: @conditionalexpr ref,
+ int false: @expr ref
+);
+
+/** A string representation of the value. */
+values(
+ unique int id: @value,
+ string str: string ref
+);
+
+/** The actual text in the source code for the value, if any. */
+valuetext(
+ unique int id: @value ref,
+ string text: string ref
+);
+
+valuebind(
+ int val: @value ref,
+ unique int expr: @expr ref
+);
+
+fieldoffsets(
+ unique int id: @variable ref,
+ int byteoffset: int ref,
+ int bitoffset: int ref
+);
+
+bitfield(
+ unique int id: @variable ref,
+ int bits: int ref,
+ int declared_bits: int ref
+);
+
+/* TODO
+memberprefix(
+ int member: @expr ref,
+ int prefix: @expr ref
+);
+*/
+
+/*
+ kind(1) = mbrcallexpr
+ kind(2) = mbrptrcallexpr
+ kind(3) = mbrptrmbrcallexpr
+ kind(4) = ptrmbrptrmbrcallexpr
+ kind(5) = mbrreadexpr // x.y
+ kind(6) = mbrptrreadexpr // p->y
+ kind(7) = mbrptrmbrreadexpr // x.*pm
+ kind(8) = mbrptrmbrptrreadexpr // x->*pm
+ kind(9) = staticmbrreadexpr // static x.y
+ kind(10) = staticmbrptrreadexpr // static p->y
+*/
+/* TODO
+memberaccess(
+ int member: @expr ref,
+ int kind: int ref
+);
+*/
+
+initialisers(
+ unique int init: @initialiser,
+ int var: @accessible ref,
+ unique int expr: @expr ref,
+ int location: @location_expr ref
+);
+
+braced_initialisers(
+ int init: @initialiser ref
+);
+
+/**
+ * An ancestor for the expression, for cases in which we cannot
+ * otherwise find the expression's parent.
+ */
+expr_ancestor(
+ int exp: @expr ref,
+ int ancestor: @element ref
+);
+
+exprs(
+ unique int id: @expr,
+ int kind: int ref,
+ int location: @location_expr ref
+);
+
+expr_reuse(
+ int reuse: @expr ref,
+ int original: @expr ref,
+ int value_category: int ref
+)
+
+/*
+ case @value.category of
+ 1 = prval
+ | 2 = xval
+ | 3 = lval
+ ;
+*/
+expr_types(
+ int id: @expr ref,
+ int typeid: @type ref,
+ int value_category: int ref
+);
+
+case @expr.kind of
+ 1 = @errorexpr
+| 2 = @address_of // & AddressOfExpr
+| 3 = @reference_to // ReferenceToExpr (implicit?)
+| 4 = @indirect // * PointerDereferenceExpr
+| 5 = @ref_indirect // ReferenceDereferenceExpr (implicit?)
+// ...
+| 8 = @array_to_pointer // (???)
+| 9 = @vacuous_destructor_call // VacuousDestructorCall
+// ...
+| 11 = @assume // Microsoft
+| 12 = @parexpr
+| 13 = @arithnegexpr
+| 14 = @unaryplusexpr
+| 15 = @complementexpr
+| 16 = @notexpr
+| 17 = @conjugation // GNU ~ operator
+| 18 = @realpartexpr // GNU __real
+| 19 = @imagpartexpr // GNU __imag
+| 20 = @postincrexpr
+| 21 = @postdecrexpr
+| 22 = @preincrexpr
+| 23 = @predecrexpr
+| 24 = @conditionalexpr
+| 25 = @addexpr
+| 26 = @subexpr
+| 27 = @mulexpr
+| 28 = @divexpr
+| 29 = @remexpr
+| 30 = @jmulexpr // C99 mul imaginary
+| 31 = @jdivexpr // C99 div imaginary
+| 32 = @fjaddexpr // C99 add real + imaginary
+| 33 = @jfaddexpr // C99 add imaginary + real
+| 34 = @fjsubexpr // C99 sub real - imaginary
+| 35 = @jfsubexpr // C99 sub imaginary - real
+| 36 = @paddexpr // pointer add (pointer + int or int + pointer)
+| 37 = @psubexpr // pointer sub (pointer - integer)
+| 38 = @pdiffexpr // difference between two pointers
+| 39 = @lshiftexpr
+| 40 = @rshiftexpr
+| 41 = @andexpr
+| 42 = @orexpr
+| 43 = @xorexpr
+| 44 = @eqexpr
+| 45 = @neexpr
+| 46 = @gtexpr
+| 47 = @ltexpr
+| 48 = @geexpr
+| 49 = @leexpr
+| 50 = @minexpr // GNU minimum
+| 51 = @maxexpr // GNU maximum
+| 52 = @assignexpr
+| 53 = @assignaddexpr
+| 54 = @assignsubexpr
+| 55 = @assignmulexpr
+| 56 = @assigndivexpr
+| 57 = @assignremexpr
+| 58 = @assignlshiftexpr
+| 59 = @assignrshiftexpr
+| 60 = @assignandexpr
+| 61 = @assignorexpr
+| 62 = @assignxorexpr
+| 63 = @assignpaddexpr // assign pointer add
+| 64 = @assignpsubexpr // assign pointer sub
+| 65 = @andlogicalexpr
+| 66 = @orlogicalexpr
+| 67 = @commaexpr
+| 68 = @subscriptexpr // access to member of an array, e.g., a[5]
+// ... 69 @objc_subscriptexpr deprecated
+// ... 70 @cmdaccess deprecated
+// ...
+| 73 = @virtfunptrexpr
+| 74 = @callexpr
+// ... 75 @msgexpr_normal deprecated
+// ... 76 @msgexpr_super deprecated
+// ... 77 @atselectorexpr deprecated
+// ... 78 @atprotocolexpr deprecated
+| 79 = @vastartexpr
+| 80 = @vaargexpr
+| 81 = @vaendexpr
+| 82 = @vacopyexpr
+// ... 83 @atencodeexpr deprecated
+| 84 = @varaccess
+| 85 = @thisaccess
+// ... 86 @objc_box_expr deprecated
+| 87 = @new_expr
+| 88 = @delete_expr
+| 89 = @throw_expr
+| 90 = @condition_decl // a variable declared in a condition, e.g., if(int x = y > 2)
+| 91 = @braced_init_list
+| 92 = @type_id
+| 93 = @runtime_sizeof
+| 94 = @runtime_alignof
+| 95 = @sizeof_pack
+| 96 = @expr_stmt // GNU extension
+| 97 = @routineexpr
+| 98 = @type_operand // used to access a type in certain contexts (haven't found any examples yet....)
+| 99 = @offsetofexpr // offsetof ::= type and field
+| 100 = @hasassignexpr // __has_assign ::= type
+| 101 = @hascopyexpr // __has_copy ::= type
+| 102 = @hasnothrowassign // __has_nothrow_assign ::= type
+| 103 = @hasnothrowconstr // __has_nothrow_constructor ::= type
+| 104 = @hasnothrowcopy // __has_nothrow_copy ::= type
+| 105 = @hastrivialassign // __has_trivial_assign ::= type
+| 106 = @hastrivialconstr // __has_trivial_constructor ::= type
+| 107 = @hastrivialcopy // __has_trivial_copy ::= type
+| 108 = @hasuserdestr // __has_user_destructor ::= type
+| 109 = @hasvirtualdestr // __has_virtual_destructor ::= type
+| 110 = @isabstractexpr // __is_abstract ::= type
+| 111 = @isbaseofexpr // __is_base_of ::= type type
+| 112 = @isclassexpr // __is_class ::= type
+| 113 = @isconvtoexpr // __is_convertible_to ::= type type
+| 114 = @isemptyexpr // __is_empty ::= type
+| 115 = @isenumexpr // __is_enum ::= type
+| 116 = @ispodexpr // __is_pod ::= type
+| 117 = @ispolyexpr // __is_polymorphic ::= type
+| 118 = @isunionexpr // __is_union ::= type
+| 119 = @typescompexpr // GNU __builtin_types_compatible ::= type type
+| 120 = @intaddrexpr // frontend internal builtin, used to implement offsetof
+// ...
+| 122 = @hastrivialdestructor // __has_trivial_destructor ::= type
+| 123 = @literal
+| 124 = @uuidof
+| 127 = @aggregateliteral
+| 128 = @delete_array_expr
+| 129 = @new_array_expr
+// ... 130 @objc_array_literal deprecated
+// ... 131 @objc_dictionary_literal deprecated
+| 132 = @foldexpr
+// ...
+| 200 = @ctordirectinit
+| 201 = @ctorvirtualinit
+| 202 = @ctorfieldinit
+| 203 = @ctordelegatinginit
+| 204 = @dtordirectdestruct
+| 205 = @dtorvirtualdestruct
+| 206 = @dtorfielddestruct
+// ...
+| 210 = @static_cast
+| 211 = @reinterpret_cast
+| 212 = @const_cast
+| 213 = @dynamic_cast
+| 214 = @c_style_cast
+| 215 = @lambdaexpr
+| 216 = @param_ref
+| 217 = @noopexpr
+// ...
+| 294 = @istriviallyconstructibleexpr
+| 295 = @isdestructibleexpr
+| 296 = @isnothrowdestructibleexpr
+| 297 = @istriviallydestructibleexpr
+| 298 = @istriviallyassignableexpr
+| 299 = @isnothrowassignableexpr
+| 300 = @istrivialexpr
+| 301 = @isstandardlayoutexpr
+| 302 = @istriviallycopyableexpr
+| 303 = @isliteraltypeexpr
+| 304 = @hastrivialmoveconstructorexpr
+| 305 = @hastrivialmoveassignexpr
+| 306 = @hasnothrowmoveassignexpr
+| 307 = @isconstructibleexpr
+| 308 = @isnothrowconstructibleexpr
+| 309 = @hasfinalizerexpr
+| 310 = @isdelegateexpr
+| 311 = @isinterfaceclassexpr
+| 312 = @isrefarrayexpr
+| 313 = @isrefclassexpr
+| 314 = @issealedexpr
+| 315 = @issimplevalueclassexpr
+| 316 = @isvalueclassexpr
+| 317 = @isfinalexpr
+| 319 = @noexceptexpr
+| 320 = @builtinshufflevector
+| 321 = @builtinchooseexpr
+| 322 = @builtinaddressof
+| 323 = @vec_fill
+| 324 = @builtinconvertvector
+| 325 = @builtincomplex
+| 326 = @spaceshipexpr
+| 327 = @co_await
+| 328 = @co_yield
+| 329 = @temp_init
+| 330 = @isassignable
+| 331 = @isaggregate
+| 332 = @hasuniqueobjectrepresentations
+| 333 = @builtinbitcast
+| 334 = @builtinshuffle
+| 335 = @blockassignexpr
+| 336 = @issame
+| 337 = @isfunction
+| 338 = @islayoutcompatible
+| 339 = @ispointerinterconvertiblebaseof
+| 340 = @isarray
+| 341 = @arrayrank
+| 342 = @arrayextent
+| 343 = @isarithmetic
+| 344 = @iscompletetype
+| 345 = @iscompound
+| 346 = @isconst
+| 347 = @isfloatingpoint
+| 348 = @isfundamental
+| 349 = @isintegral
+| 350 = @islvaluereference
+| 351 = @ismemberfunctionpointer
+| 352 = @ismemberobjectpointer
+| 353 = @ismemberpointer
+| 354 = @isobject
+| 355 = @ispointer
+| 356 = @isreference
+| 357 = @isrvaluereference
+| 358 = @isscalar
+| 359 = @issigned
+| 360 = @isunsigned
+| 361 = @isvoid
+| 362 = @isvolatile
+| 363 = @reuseexpr
+;
+
+@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
+ ;
+
+new_allocated_type(
+ unique int expr: @new_expr ref,
+ int type_id: @type ref
+);
+
+new_array_allocated_type(
+ unique int expr: @new_array_expr ref,
+ int type_id: @type ref
+);
+
+/**
+ * The field being initialized by an initializer expression within an aggregate
+ * initializer for a class/struct/union. Position is used to sort repeated initializers.
+ */
+#keyset[aggregate, position]
+aggregate_field_init(
+ int aggregate: @aggregateliteral ref,
+ int initializer: @expr ref,
+ int field: @membervariable ref,
+ int position: int ref
+);
+
+/**
+ * The index of the element being initialized by an initializer expression
+ * within an aggregate initializer for an array. Position is used to sort repeated initializers.
+ */
+#keyset[aggregate, position]
+aggregate_array_init(
+ int aggregate: @aggregateliteral ref,
+ int initializer: @expr ref,
+ int element_index: int ref,
+ int position: int ref
+);
+
+@ctorinit = @ctordirectinit
+ | @ctorvirtualinit
+ | @ctorfieldinit
+ | @ctordelegatinginit;
+@dtordestruct = @dtordirectdestruct
+ | @dtorvirtualdestruct
+ | @dtorfielddestruct;
+
+
+condition_decl_bind(
+ unique int expr: @condition_decl ref,
+ unique int decl: @declaration ref
+);
+
+typeid_bind(
+ unique int expr: @type_id ref,
+ int type_id: @type ref
+);
+
+uuidof_bind(
+ unique int expr: @uuidof ref,
+ int type_id: @type ref
+);
+
+@runtime_sizeof_or_alignof = @runtime_sizeof | @runtime_alignof;
+
+sizeof_bind(
+ unique int expr: @runtime_sizeof_or_alignof ref,
+ int type_id: @type ref
+);
+
+code_block(
+ unique int block: @literal ref,
+ unique int routine: @function ref
+);
+
+lambdas(
+ unique int expr: @lambdaexpr ref,
+ string default_capture: string ref,
+ boolean has_explicit_return_type: boolean ref
+);
+
+lambda_capture(
+ unique int id: @lambdacapture,
+ int lambda: @lambdaexpr ref,
+ int index: int ref,
+ int field: @membervariable ref,
+ boolean captured_by_reference: boolean ref,
+ boolean is_implicit: boolean ref,
+ int location: @location_default ref
+);
+
+@funbindexpr = @routineexpr
+ | @new_expr
+ | @delete_expr
+ | @delete_array_expr
+ | @ctordirectinit
+ | @ctorvirtualinit
+ | @ctordelegatinginit
+ | @dtordirectdestruct
+ | @dtorvirtualdestruct;
+
+@varbindexpr = @varaccess | @ctorfieldinit | @dtorfielddestruct;
+@addressable = @function | @variable ;
+@accessible = @addressable | @enumconstant ;
+
+@access = @varaccess | @routineexpr ;
+
+fold(
+ int expr: @foldexpr ref,
+ string operator: string ref,
+ boolean is_left_fold: boolean ref
+);
+
+stmts(
+ unique int id: @stmt,
+ int kind: int ref,
+ int location: @location_stmt ref
+);
+
+case @stmt.kind of
+ 1 = @stmt_expr
+| 2 = @stmt_if
+| 3 = @stmt_while
+| 4 = @stmt_goto
+| 5 = @stmt_label
+| 6 = @stmt_return
+| 7 = @stmt_block
+| 8 = @stmt_end_test_while // do { ... } while ( ... )
+| 9 = @stmt_for
+| 10 = @stmt_switch_case
+| 11 = @stmt_switch
+| 13 = @stmt_asm // "asm" statement or the body of an asm function
+| 15 = @stmt_try_block
+| 16 = @stmt_microsoft_try // Microsoft
+| 17 = @stmt_decl
+| 18 = @stmt_set_vla_size // C99
+| 19 = @stmt_vla_decl // C99
+| 25 = @stmt_assigned_goto // GNU
+| 26 = @stmt_empty
+| 27 = @stmt_continue
+| 28 = @stmt_break
+| 29 = @stmt_range_based_for // C++11
+// ... 30 @stmt_at_autoreleasepool_block deprecated
+// ... 31 @stmt_objc_for_in deprecated
+// ... 32 @stmt_at_synchronized deprecated
+| 33 = @stmt_handler
+// ... 34 @stmt_finally_end deprecated
+| 35 = @stmt_constexpr_if
+| 37 = @stmt_co_return
+;
+
+type_vla(
+ int type_id: @type ref,
+ int decl: @stmt_vla_decl ref
+);
+
+variable_vla(
+ int var: @variable ref,
+ int decl: @stmt_vla_decl ref
+);
+
+if_initialization(
+ unique int if_stmt: @stmt_if ref,
+ int init_id: @stmt ref
+);
+
+if_then(
+ unique int if_stmt: @stmt_if ref,
+ int then_id: @stmt ref
+);
+
+if_else(
+ unique int if_stmt: @stmt_if ref,
+ int else_id: @stmt ref
+);
+
+constexpr_if_initialization(
+ unique int constexpr_if_stmt: @stmt_constexpr_if ref,
+ int init_id: @stmt ref
+);
+
+constexpr_if_then(
+ unique int constexpr_if_stmt: @stmt_constexpr_if ref,
+ int then_id: @stmt ref
+);
+
+constexpr_if_else(
+ unique int constexpr_if_stmt: @stmt_constexpr_if ref,
+ int else_id: @stmt ref
+);
+
+while_body(
+ unique int while_stmt: @stmt_while ref,
+ int body_id: @stmt ref
+);
+
+do_body(
+ unique int do_stmt: @stmt_end_test_while ref,
+ int body_id: @stmt ref
+);
+
+switch_initialization(
+ unique int switch_stmt: @stmt_switch ref,
+ int init_id: @stmt ref
+);
+
+#keyset[switch_stmt, index]
+switch_case(
+ int switch_stmt: @stmt_switch ref,
+ int index: int ref,
+ int case_id: @stmt_switch_case ref
+);
+
+switch_body(
+ unique int switch_stmt: @stmt_switch ref,
+ int body_id: @stmt ref
+);
+
+@stmt_for_or_range_based_for = @stmt_for
+ | @stmt_range_based_for;
+
+for_initialization(
+ unique int for_stmt: @stmt_for_or_range_based_for ref,
+ int init_id: @stmt ref
+);
+
+for_condition(
+ unique int for_stmt: @stmt_for ref,
+ int condition_id: @expr ref
+);
+
+for_update(
+ unique int for_stmt: @stmt_for ref,
+ int update_id: @expr ref
+);
+
+for_body(
+ unique int for_stmt: @stmt_for ref,
+ int body_id: @stmt ref
+);
+
+@stmtparent = @stmt | @expr_stmt ;
+stmtparents(
+ unique int id: @stmt ref,
+ int index: int ref,
+ int parent: @stmtparent ref
+);
+
+ishandler(unique int block: @stmt_block ref);
+
+@cfgnode = @stmt | @expr | @function | @initialiser ;
+
+stmt_decl_bind(
+ int stmt: @stmt_decl ref,
+ int num: int ref,
+ int decl: @declaration ref
+);
+
+stmt_decl_entry_bind(
+ int stmt: @stmt_decl ref,
+ int num: int ref,
+ int decl_entry: @element ref
+);
+
+@functionorblock = @function | @stmt_block;
+
+blockscope(
+ unique int block: @stmt_block ref,
+ int enclosing: @functionorblock ref
+);
+
+@jump = @stmt_goto | @stmt_break | @stmt_continue;
+
+@jumporlabel = @jump | @stmt_label | @literal;
+
+jumpinfo(
+ unique int id: @jumporlabel ref,
+ string str: string ref,
+ int target: @stmt ref
+);
+
+preprocdirects(
+ unique int id: @preprocdirect,
+ int kind: int ref,
+ int location: @location_default ref
+);
+case @preprocdirect.kind of
+ 0 = @ppd_if
+| 1 = @ppd_ifdef
+| 2 = @ppd_ifndef
+| 3 = @ppd_elif
+| 4 = @ppd_else
+| 5 = @ppd_endif
+| 6 = @ppd_plain_include
+| 7 = @ppd_define
+| 8 = @ppd_undef
+| 9 = @ppd_line
+| 10 = @ppd_error
+| 11 = @ppd_pragma
+| 12 = @ppd_objc_import
+| 13 = @ppd_include_next
+| 18 = @ppd_warning
+;
+
+@ppd_include = @ppd_plain_include | @ppd_objc_import | @ppd_include_next;
+
+@ppd_branch = @ppd_if | @ppd_ifdef | @ppd_ifndef | @ppd_elif;
+
+preprocpair(
+ int begin : @ppd_branch ref,
+ int elseelifend : @preprocdirect ref
+);
+
+preproctrue(int branch : @ppd_branch ref);
+preprocfalse(int branch : @ppd_branch ref);
+
+preproctext(
+ unique int id: @preprocdirect ref,
+ string head: string ref,
+ string body: string ref
+);
+
+includes(
+ unique int id: @ppd_include ref,
+ int included: @file ref
+);
+
+link_targets(
+ int id: @link_target,
+ int binary: @file ref
+);
+
+link_parent(
+ int element : @element ref,
+ int link_target : @link_target ref
+);
+
+/* XML Files */
+
+xmlEncoding(unique int id: @file ref, string encoding: string ref);
+
+xmlDTDs(
+ unique int id: @xmldtd,
+ string root: string ref,
+ string publicId: string ref,
+ string systemId: string ref,
+ int fileid: @file ref
+);
+
+xmlElements(
+ unique int id: @xmlelement,
+ string name: string ref,
+ int parentid: @xmlparent ref,
+ int idx: int ref,
+ int fileid: @file ref
+);
+
+xmlAttrs(
+ unique int id: @xmlattribute,
+ int elementid: @xmlelement ref,
+ string name: string ref,
+ string value: string ref,
+ int idx: int ref,
+ int fileid: @file ref
+);
+
+xmlNs(
+ int id: @xmlnamespace,
+ string prefixName: string ref,
+ string URI: string ref,
+ int fileid: @file ref
+);
+
+xmlHasNs(
+ int elementId: @xmlnamespaceable ref,
+ int nsId: @xmlnamespace ref,
+ int fileid: @file ref
+);
+
+xmlComments(
+ unique int id: @xmlcomment,
+ string text: string ref,
+ int parentid: @xmlparent ref,
+ int fileid: @file ref
+);
+
+xmlChars(
+ unique int id: @xmlcharacters,
+ string text: string ref,
+ int parentid: @xmlparent ref,
+ int idx: int ref,
+ int isCDATA: int ref,
+ int fileid: @file ref
+);
+
+@xmlparent = @file | @xmlelement;
+@xmlnamespaceable = @xmlelement | @xmlattribute;
+
+xmllocations(
+ int xmlElement: @xmllocatable ref,
+ int location: @location_default ref
+);
+
+@xmllocatable = @xmlcharacters
+ | @xmlelement
+ | @xmlcomment
+ | @xmlattribute
+ | @xmldtd
+ | @file
+ | @xmlnamespace;
diff --git a/cpp/ql/lib/upgrades/aa7ff0ab32cd4674f6ab731d32fea64116997b05/upgrade.properties b/cpp/ql/lib/upgrades/aa7ff0ab32cd4674f6ab731d32fea64116997b05/upgrade.properties
new file mode 100644
index 00000000000..82bbbe273cd
--- /dev/null
+++ b/cpp/ql/lib/upgrades/aa7ff0ab32cd4674f6ab731d32fea64116997b05/upgrade.properties
@@ -0,0 +1,3 @@
+description: Add value category to expr_reuse table
+compatibility: full
+expr_reuse.rel: run expr_reuse.qlo