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