diff --git a/cpp/downgrades/45f9d92df0bd1396e5f9c976919749edd68acb32/decltypes.ql b/cpp/downgrades/45f9d92df0bd1396e5f9c976919749edd68acb32/decltypes.ql new file mode 100644 index 000000000000..483f3b181901 --- /dev/null +++ b/cpp/downgrades/45f9d92df0bd1396e5f9c976919749edd68acb32/decltypes.ql @@ -0,0 +1,11 @@ +class Type extends @type { + string toString() { none() } +} + +class Expr extends @expr { + string toString() { none() } +} + +from Type decltype, Expr expr, Type basetype, boolean parentheses +where decltypes(decltype, expr, _, basetype, parentheses) +select decltype, expr, basetype, parentheses diff --git a/cpp/downgrades/45f9d92df0bd1396e5f9c976919749edd68acb32/derivedtypes.ql b/cpp/downgrades/45f9d92df0bd1396e5f9c976919749edd68acb32/derivedtypes.ql new file mode 100644 index 000000000000..8ab6ba525576 --- /dev/null +++ b/cpp/downgrades/45f9d92df0bd1396e5f9c976919749edd68acb32/derivedtypes.ql @@ -0,0 +1,19 @@ +class Type extends @type { + string toString() { none() } +} + +predicate derivedType(Type type, string name, int kind, Type type_id) { + derivedtypes(type, name, kind, type_id) +} + +predicate typeTransformation(Type type, string name, int kind, Type type_id) { + type_operators(type, _, _, type_id) and + name = "" and + kind = 3 // @type_with_specifiers +} + +from Type type, string name, int kind, Type type_id +where + derivedType(type, name, kind, type_id) or + typeTransformation(type, name, kind, type_id) +select type, name, kind, type_id diff --git a/cpp/downgrades/45f9d92df0bd1396e5f9c976919749edd68acb32/old.dbscheme b/cpp/downgrades/45f9d92df0bd1396e5f9c976919749edd68acb32/old.dbscheme new file mode 100644 index 000000000000..45f9d92df0bd --- /dev/null +++ b/cpp/downgrades/45f9d92df0bd1396e5f9c976919749edd68acb32/old.dbscheme @@ -0,0 +1,2487 @@ + +/** + * An invocation of the compiler. Note that more than one file may be + * compiled per invocation. For example, this command compiles three + * source files: + * + * gcc -c f1.c f2.c f3.c + * + * The `id` simply identifies the invocation, while `cwd` is the working + * directory from which the compiler was invoked. + */ +compilations( + /** + * An invocation of the compiler. Note that more than one file may + * be compiled per invocation. For example, this command compiles + * three source files: + * + * gcc -c f1.c f2.c f3.c + */ + unique int id : @compilation, + string cwd : string ref +); + +/** + * The arguments that were passed to the extractor for a compiler + * invocation. If `id` is for the compiler invocation + * + * gcc -c f1.c f2.c f3.c + * + * then typically there will be rows for + * + * num | arg + * --- | --- + * 0 | *path to extractor* + * 1 | `--mimic` + * 2 | `/usr/bin/gcc` + * 3 | `-c` + * 4 | f1.c + * 5 | f2.c + * 6 | f3.c + */ +#keyset[id, num] +compilation_args( + int id : @compilation ref, + int num : int ref, + string arg : string ref +); + +/** + * Optionally, record the build mode for each compilation. + */ +compilation_build_mode( + unique int id : @compilation ref, + int mode : int ref +); + +/* +case @compilation_build_mode.mode of + 0 = @build_mode_none +| 1 = @build_mode_manual +| 2 = @build_mode_auto +; +*/ + +/** + * The source files that are compiled by a compiler invocation. + * If `id` is for the compiler invocation + * + * gcc -c f1.c f2.c f3.c + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | f1.c + * 1 | f2.c + * 2 | f3.c + * + * Note that even if those files `#include` headers, those headers + * do not appear as rows. + */ +#keyset[id, num] +compilation_compiling_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The time taken by the extractor for a compiler invocation. + * + * For each file `num`, there will be rows for + * + * kind | seconds + * ---- | --- + * 1 | CPU seconds used by the extractor frontend + * 2 | Elapsed seconds during the extractor frontend + * 3 | CPU seconds used by the extractor backend + * 4 | Elapsed seconds during the extractor backend + */ +#keyset[id, num, kind] +compilation_time( + int id : @compilation ref, + int num : int ref, + /* kind: + 1 = frontend_cpu_seconds + 2 = frontend_elapsed_seconds + 3 = extractor_cpu_seconds + 4 = extractor_elapsed_seconds + */ + int kind : int ref, + float seconds : float ref +); + +/** + * An error or warning generated by the extractor. + * The diagnostic message `diagnostic` was generated during compiler + * invocation `compilation`, and is the `file_number_diagnostic_number`th + * message generated while extracting the `file_number`th file of that + * invocation. + */ +#keyset[compilation, file_number, file_number_diagnostic_number] +diagnostic_for( + int diagnostic : @diagnostic ref, + int compilation : @compilation ref, + int file_number : int ref, + int file_number_diagnostic_number : int ref +); + +/** + * If extraction was successful, then `cpu_seconds` and + * `elapsed_seconds` are the CPU time and elapsed time (respectively) + * that extraction took for compiler invocation `id`. + */ +compilation_finished( + unique int id : @compilation ref, + float cpu_seconds : float ref, + float elapsed_seconds : float ref +); + + +/** + * External data, 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 +); + +/* +case @coroutine_placeholder_variable.kind of + 1 = @handle +| 2 = @promise +| 3 = @init_await_resume +; +*/ + +coroutine_placeholder_variable( + unique int placeholder_variable: @variable ref, + int kind: int ref, + int function: @function ref +) + +/** The `new` function used for allocating the coroutine state, if any. */ +coroutine_new( + unique int function: @function ref, + int new: @function ref +); + +/** The `delete` function used for deallocating the coroutine state, if any. */ +coroutine_delete( + unique int function: @function ref, + int delete: @function ref +); + +purefunctions(unique int id: @function ref); + +function_deleted(unique int id: @function ref); + +function_defaulted(unique int id: @function ref); + +function_prototyped(unique int id: @function ref) + +deduction_guide_for_class( + int id: @function ref, + int class_template: @usertype ref +) + +member_function_this_type( + unique int id: @function ref, + int this_type: @type ref +); + +#keyset[id, type_id] +fun_decls( + int id: @fun_decl, + int function: @function ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +fun_def(unique int id: @fun_decl ref); +fun_specialized(unique int id: @fun_decl ref); +fun_implicit(unique int id: @fun_decl ref); +fun_decl_specifiers( + int id: @fun_decl ref, + string name: string ref +) +#keyset[fun_decl, index] +fun_decl_throws( + int fun_decl: @fun_decl ref, + int index: int ref, + int type_id: @type ref +); +/* an empty throw specification is different from none */ +fun_decl_empty_throws(unique int fun_decl: @fun_decl ref); +fun_decl_noexcept( + int fun_decl: @fun_decl ref, + int constant: @expr ref +); +fun_decl_empty_noexcept(int fun_decl: @fun_decl ref); +fun_decl_typedef_type( + unique int fun_decl: @fun_decl ref, + int typedeftype_id: @usertype ref +); + +/* +case @fun_requires.kind of + 1 = @template_attached +| 2 = @function_attached +; +*/ + +fun_requires( + int id: @fun_decl ref, + int kind: int ref, + int constraint: @expr ref +); + +param_decl_bind( + unique int id: @var_decl ref, + int index: int ref, + int fun_decl: @fun_decl ref +); + +#keyset[id, type_id] +var_decls( + int id: @var_decl, + int variable: @variable ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +var_def(unique int id: @var_decl ref); +var_specialized(int id: @var_decl ref); +var_decl_specifiers( + int id: @var_decl ref, + string name: string ref +) +is_structured_binding(unique int id: @variable ref); +var_requires( + int id: @var_decl ref, + int constraint: @expr ref +); + +type_decls( + unique int id: @type_decl, + int type_id: @type ref, + int location: @location_default ref +); +type_def(unique int id: @type_decl ref); +type_decl_top( + unique int type_decl: @type_decl ref +); +type_requires( + int id: @type_decl ref, + int constraint: @expr ref +); + +namespace_decls( + unique int id: @namespace_decl, + int namespace_id: @namespace ref, + int location: @location_default ref, + int bodylocation: @location_default ref +); + +case @using.kind of + 1 = @using_declaration +| 2 = @using_directive +| 3 = @using_enum_declaration +; + +usings( + unique int id: @using, + int element_id: @element ref, + int location: @location_default ref, + int kind: int ref +); + +/** The element which contains the `using` declaration. */ +using_container( + int parent: @element ref, + int child: @using ref +); + +static_asserts( + unique int id: @static_assert, + int condition : @expr ref, + string message : string ref, + int location: @location_default ref, + int enclosing : @element ref +); + +// each function has an ordered list of parameters +#keyset[id, type_id] +#keyset[function, index, type_id] +params( + int id: @parameter, + int function: @parameterized_element ref, + int index: int ref, + int type_id: @type ref +); + +overrides( + int new: @function ref, + int old: @function ref +); + +#keyset[id, type_id] +membervariables( + int id: @membervariable, + int type_id: @type ref, + string name: string ref +); + +#keyset[id, type_id] +globalvariables( + int id: @globalvariable, + int type_id: @type ref, + string name: string ref +); + +#keyset[id, type_id] +localvariables( + int id: @localvariable, + int type_id: @type ref, + string name: string ref +); + +autoderivation( + unique int var: @variable ref, + int derivation_type: @type ref +); + +orphaned_variables( + int var: @localvariable ref, + int function: @function ref +) + +enumconstants( + unique int id: @enumconstant, + int parent: @usertype ref, + int index: int ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); + +@variable = @localscopevariable | @globalvariable | @membervariable; + +@localscopevariable = @localvariable | @parameter; + +/** + * Built-in types are the fundamental types, e.g., integral, floating, and void. + */ +case @builtintype.kind of + 1 = @errortype +| 2 = @unknowntype +| 3 = @void +| 4 = @boolean +| 5 = @char +| 6 = @unsigned_char +| 7 = @signed_char +| 8 = @short +| 9 = @unsigned_short +| 10 = @signed_short +| 11 = @int +| 12 = @unsigned_int +| 13 = @signed_int +| 14 = @long +| 15 = @unsigned_long +| 16 = @signed_long +| 17 = @long_long +| 18 = @unsigned_long_long +| 19 = @signed_long_long +// ... 20 Microsoft-specific __int8 +// ... 21 Microsoft-specific __int16 +// ... 22 Microsoft-specific __int32 +// ... 23 Microsoft-specific __int64 +| 24 = @float +| 25 = @double +| 26 = @long_double +| 27 = @complex_float // C99-specific _Complex float +| 28 = @complex_double // C99-specific _Complex double +| 29 = @complex_long_double // C99-specific _Complex long double +| 30 = @imaginary_float // C99-specific _Imaginary float +| 31 = @imaginary_double // C99-specific _Imaginary double +| 32 = @imaginary_long_double // C99-specific _Imaginary long double +| 33 = @wchar_t // Microsoft-specific +| 34 = @decltype_nullptr // C++11 +| 35 = @int128 // __int128 +| 36 = @unsigned_int128 // unsigned __int128 +| 37 = @signed_int128 // signed __int128 +| 38 = @float128 // __float128 +| 39 = @complex_float128 // _Complex __float128 +| 40 = @decimal32 // _Decimal32 +| 41 = @decimal64 // _Decimal64 +| 42 = @decimal128 // _Decimal128 +| 43 = @char16_t +| 44 = @char32_t +| 45 = @std_float32 // _Float32 +| 46 = @float32x // _Float32x +| 47 = @std_float64 // _Float64 +| 48 = @float64x // _Float64x +| 49 = @std_float128 // _Float128 +// ... 50 _Float128x +| 51 = @char8_t +| 52 = @float16 // _Float16 +| 53 = @complex_float16 // _Complex _Float16 +| 54 = @fp16 // __fp16 +| 55 = @std_bfloat16 // __bf16 +| 56 = @std_float16 // std::float16_t +| 57 = @complex_std_float32 // _Complex _Float32 +| 58 = @complex_float32x // _Complex _Float32x +| 59 = @complex_std_float64 // _Complex _Float64 +| 60 = @complex_float64x // _Complex _Float64x +| 61 = @complex_std_float128 // _Complex _Float128 +; + +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 or C23 `typeof`/`typeof_unqual` + * operator taking an expression as its argument. For example: + * ``` + * int a; + * decltype(1+a) b; + * typeof(1+a) c; + * ``` + * Here `expr` is `1+a`. + * + * Sometimes an additional pair of parentheses around the expression + * changes the semantics of the decltype, e.g. + * ``` + * struct A { double x; }; + * const A* a = new A(); + * decltype( a->x ); // type is double + * decltype((a->x)); // type is const double& + * ``` + * (Please consult the C++11 standard for more details). + * `parentheses_would_change_meaning` is `true` iff that is the case. + */ + +/* +case @decltype.kind of +| 0 = @decltype +| 1 = @typeof // The frontend does not differentiate between typeof and typeof_unqual +; +*/ + +#keyset[id, expr] +decltypes( + int id: @decltype, + int expr: @expr ref, + int kind: int ref, + int base_type: @type ref, + boolean parentheses_would_change_meaning: boolean ref +); + +/* +case @type_operator.kind of +| 0 = @typeof // The frontend does not differentiate between typeof and typeof_unqual +| 1 = @underlying_type +| 2 = @bases +| 3 = @direct_bases +| 4 = @add_lvalue_reference +| 5 = @add_pointer +| 6 = @add_rvalue_reference +| 7 = @decay +| 8 = @make_signed +| 9 = @make_unsigned +| 10 = @remove_all_extents +| 11 = @remove_const +| 12 = @remove_cv +| 13 = @remove_cvref +| 14 = @remove_extent +| 15 = @remove_pointer +| 16 = @remove_reference_t +| 17 = @remove_restrict +| 18 = @remove_volatile +| 19 = @remove_reference +; +*/ + +type_operators( + unique int id: @type_operator, + int arg_type: @type ref, + int kind: int ref, + int base_type: @type ref +) + +/* +case @usertype.kind of +| 0 = @unknown_usertype +| 1 = @struct +| 2 = @class +| 3 = @union +| 4 = @enum +// ... 5 = @typedef deprecated // classic C: typedef typedef type name +// ... 6 = @template deprecated +| 7 = @template_parameter +| 8 = @template_template_parameter +| 9 = @proxy_class // a proxy class associated with a template parameter +// ... 10 objc_class deprecated +// ... 11 objc_protocol deprecated +// ... 12 objc_category deprecated +| 13 = @scoped_enum +// ... 14 = @using_alias deprecated // a using name = type style typedef +| 15 = @template_struct +| 16 = @template_class +| 17 = @template_union +| 18 = @alias +; +*/ + +usertypes( + unique int id: @usertype, + string name: string ref, + int kind: int ref +); + +usertypesize( + unique int id: @usertype ref, + int size: int ref, + int alignment: int ref +); + +usertype_final(unique int id: @usertype ref); + +usertype_uuid( + unique int id: @usertype ref, + string uuid: string ref +); + +/* +case @usertype.alias_kind of +| 0 = @typedef +| 1 = @alias +*/ + +usertype_alias_kind( + int id: @usertype ref, + int alias_kind: int ref +) + +nontype_template_parameters( + int id: @expr ref +); + +type_template_type_constraint( + int id: @usertype ref, + int constraint: @expr ref +); + +mangled_name( + unique int id: @declaration ref, + int mangled_name : @mangledname, + boolean is_complete: boolean ref +); + +is_pod_class(unique int id: @usertype ref); +is_standard_layout_class(unique int id: @usertype ref); + +is_complete(unique int id: @usertype ref); + +is_class_template(unique int id: @usertype ref); +class_instantiation( + int to: @usertype ref, + int from: @usertype ref +); +class_template_argument( + int type_id: @usertype ref, + int index: int ref, + int arg_type: @type ref +); +class_template_argument_value( + int type_id: @usertype ref, + int index: int ref, + int arg_value: @expr ref +); + +@user_or_decltype = @usertype | @decltype; + +is_proxy_class_for( + unique int id: @usertype ref, + int templ_param_id: @user_or_decltype ref +); + +type_mentions( + unique int id: @type_mention, + int type_id: @type ref, + int location: @location ref, + // a_symbol_reference_kind from the frontend. + int kind: int ref +); + +is_function_template(unique int id: @function ref); +function_instantiation( + unique int to: @function ref, + int from: @function ref +); +function_template_argument( + int function_id: @function ref, + int index: int ref, + int arg_type: @type ref +); +function_template_argument_value( + int function_id: @function ref, + int index: int ref, + int arg_value: @expr ref +); + +is_variable_template(unique int id: @variable ref); +variable_instantiation( + unique int to: @variable ref, + int from: @variable ref +); +variable_template_argument( + int variable_id: @variable ref, + int index: int ref, + int arg_type: @type ref +); +variable_template_argument_value( + int variable_id: @variable ref, + int index: int ref, + int arg_value: @expr ref +); + +template_template_instantiation( + int to: @usertype ref, + int from: @usertype ref +); +template_template_argument( + int type_id: @usertype ref, + int index: int ref, + int arg_type: @type ref +); +template_template_argument_value( + int type_id: @usertype ref, + int index: int ref, + int arg_value: @expr ref +); + +@concept = @concept_template | @concept_id; + +concept_templates( + unique int concept_id: @concept_template, + string name: string ref, + int location: @location_default ref +); +concept_instantiation( + unique int to: @concept_id ref, + int from: @concept_template ref +); +is_type_constraint(int concept_id: @concept_id ref); +concept_template_argument( + int concept_id: @concept ref, + int index: int ref, + int arg_type: @type ref +); +concept_template_argument_value( + int concept_id: @concept ref, + int index: int ref, + int arg_value: @expr ref +); + +routinetypes( + unique int id: @routinetype, + int return_type: @type ref +); + +routinetypeargs( + int routine: @routinetype ref, + int index: int ref, + int type_id: @type ref +); + +ptrtomembers( + unique int id: @ptrtomember, + int type_id: @type ref, + int class_id: @type ref +); + +/* + specifiers for types, functions, and variables + + "public", + "protected", + "private", + + "const", + "volatile", + "static", + + "pure", + "virtual", + "sealed", // Microsoft + "__interface", // Microsoft + "inline", + "explicit", + + "near", // near far extension + "far", // near far extension + "__ptr32", // Microsoft + "__ptr64", // Microsoft + "__sptr", // Microsoft + "__uptr", // Microsoft + "dllimport", // Microsoft + "dllexport", // Microsoft + "thread", // Microsoft + "naked", // Microsoft + "microsoft_inline", // Microsoft + "forceinline", // Microsoft + "selectany", // Microsoft + "nothrow", // Microsoft + "novtable", // Microsoft + "noreturn", // Microsoft + "noinline", // Microsoft + "noalias", // Microsoft + "restrict", // Microsoft +*/ + +specifiers( + unique int id: @specifier, + unique string str: string ref +); + +typespecifiers( + int type_id: @type ref, + int spec_id: @specifier ref +); + +funspecifiers( + int func_id: @function ref, + int spec_id: @specifier ref +); + +varspecifiers( + int var_id: @accessible ref, + int spec_id: @specifier ref +); + +explicit_specifier_exprs( + unique int func_id: @function ref, + int constant: @expr ref +) + +attributes( + unique int id: @attribute, + int kind: int ref, + string name: string ref, + string name_space: string ref, + int location: @location_default ref +); + +case @attribute.kind of + 0 = @gnuattribute +| 1 = @stdattribute +| 2 = @declspec +| 3 = @msattribute +| 4 = @alignas +// ... 5 @objc_propertyattribute deprecated +; + +attribute_args( + unique int id: @attribute_arg, + int kind: int ref, + int attribute: @attribute ref, + int index: int ref, + int location: @location_default ref +); + +case @attribute_arg.kind of + 0 = @attribute_arg_empty +| 1 = @attribute_arg_token +| 2 = @attribute_arg_constant +| 3 = @attribute_arg_type +| 4 = @attribute_arg_constant_expr +| 5 = @attribute_arg_expr +; + +attribute_arg_value( + unique int arg: @attribute_arg ref, + string value: string ref +); +attribute_arg_type( + unique int arg: @attribute_arg ref, + int type_id: @type ref +); +attribute_arg_constant( + unique int arg: @attribute_arg ref, + int constant: @expr ref +) +attribute_arg_expr( + unique int arg: @attribute_arg ref, + int expr: @expr ref +) +attribute_arg_name( + unique int arg: @attribute_arg ref, + string name: string ref +); + +typeattributes( + int type_id: @type ref, + int spec_id: @attribute ref +); + +funcattributes( + int func_id: @function ref, + int spec_id: @attribute ref +); + +varattributes( + int var_id: @accessible ref, + int spec_id: @attribute ref +); + +stmtattributes( + int stmt_id: @stmt ref, + int spec_id: @attribute ref +); + +@type = @builtintype + | @derivedtype + | @usertype + | @routinetype + | @ptrtomember + | @decltype + | @type_operator; + +unspecifiedtype( + unique int type_id: @type ref, + int unspecified_type_id: @type ref +); + +member( + int parent: @type ref, + int index: int ref, + int child: @member ref +); + +@enclosingfunction_child = @usertype | @variable | @namespace + +enclosingfunction( + unique int child: @enclosingfunction_child ref, + int parent: @function ref +); + +derivations( + unique int derivation: @derivation, + int sub: @type ref, + int index: int ref, + int super: @type ref, + int location: @location_default ref +); + +derspecifiers( + int der_id: @derivation ref, + int spec_id: @specifier ref +); + +/** + * Contains the byte offset of the base class subobject within the derived + * class. Only holds for non-virtual base classes, but see table + * `virtual_base_offsets` for offsets of virtual base class subobjects. + */ +direct_base_offsets( + unique int der_id: @derivation ref, + int offset: int ref +); + +/** + * Contains the byte offset of the virtual base class subobject for class + * `super` within a most-derived object of class `sub`. `super` can be either a + * direct or indirect base class. + */ +#keyset[sub, super] +virtual_base_offsets( + int sub: @usertype ref, + int super: @usertype ref, + int offset: int ref +); + +frienddecls( + unique int id: @frienddecl, + int type_id: @type ref, + int decl_id: @declaration ref, + int location: @location_default ref +); + +@declaredtype = @usertype ; + +@declaration = @function + | @declaredtype + | @variable + | @enumconstant + | @frienddecl + | @concept_template; + +@member = @membervariable + | @function + | @declaredtype + | @enumconstant; + +@locatable = @diagnostic + | @declaration + | @ppd_include + | @ppd_define + | @macroinvocation + /*| @funcall*/ + | @xmllocatable + | @attribute + | @attribute_arg; + +@namedscope = @namespace | @usertype; + +@element = @locatable + | @file + | @folder + | @specifier + | @type + | @expr + | @namespace + | @initialiser + | @stmt + | @derivation + | @comment + | @preprocdirect + | @fun_decl + | @var_decl + | @type_decl + | @namespace_decl + | @using + | @namequalifier + | @specialnamequalifyingelement + | @static_assert + | @type_mention + | @lambdacapture; + +@exprparent = @element; + +comments( + unique int id: @comment, + string contents: string ref, + int location: @location_default ref +); + +commentbinding( + int id: @comment ref, + int element: @element ref +); + +exprconv( + int converted: @expr ref, + unique int conversion: @expr ref +); + +compgenerated(unique int id: @element ref); + +/** + * `destructor_call` destructs the `i`'th entity that should be + * destructed following `element`. Note that entities should be + * destructed in reverse construction order, so for a given `element` + * these should be called from highest to lowest `i`. + */ +#keyset[element, destructor_call] +#keyset[element, i] +synthetic_destructor_call( + int element: @element ref, + int i: int ref, + int destructor_call: @routineexpr ref +); + +namespaces( + unique int id: @namespace, + string name: string ref +); + +namespace_inline( + unique int id: @namespace ref +); + +namespacembrs( + int parentid: @namespace ref, + unique int memberid: @namespacembr ref +); + +@namespacembr = @declaration | @namespace; + +exprparents( + int expr_id: @expr ref, + int child_index: int ref, + int parent_id: @exprparent ref +); + +expr_isload(unique int expr_id: @expr ref); + +@cast = @c_style_cast + | @const_cast + | @dynamic_cast + | @reinterpret_cast + | @static_cast + ; + +/* +case @conversion.kind of + 0 = @simple_conversion // a numeric conversion, qualification conversion, or a reinterpret_cast +| 1 = @bool_conversion // conversion to 'bool' +| 2 = @base_class_conversion // a derived-to-base conversion +| 3 = @derived_class_conversion // a base-to-derived conversion +| 4 = @pm_base_class_conversion // a derived-to-base conversion of a pointer to member +| 5 = @pm_derived_class_conversion // a base-to-derived conversion of a pointer to member +| 6 = @glvalue_adjust // an adjustment of the type of a glvalue +| 7 = @prvalue_adjust // an adjustment of the type of a prvalue +; +*/ +/** + * Describes the semantics represented by a cast expression. This is largely + * independent of the source syntax of the cast, so it is separate from the + * regular expression kind. + */ +conversionkinds( + unique int expr_id: @cast ref, + int kind: int ref +); + +@conversion = @cast + | @array_to_pointer + | @parexpr + | @reference_to + | @ref_indirect + | @temp_init + | @c11_generic + ; + +/* +case @funbindexpr.kind of + 0 = @normal_call // a normal call +| 1 = @virtual_call // a virtual call +| 2 = @adl_call // a call whose target is only found by ADL +; +*/ +iscall( + unique int caller: @funbindexpr ref, + int kind: int ref +); + +numtemplatearguments( + unique int expr_id: @expr ref, + int num: int ref +); + +specialnamequalifyingelements( + unique int id: @specialnamequalifyingelement, + unique string name: string ref +); + +@namequalifiableelement = @expr | @namequalifier; +@namequalifyingelement = @namespace + | @specialnamequalifyingelement + | @usertype; + +namequalifiers( + unique int id: @namequalifier, + unique int qualifiableelement: @namequalifiableelement ref, + int qualifyingelement: @namequalifyingelement ref, + int location: @location_default ref +); + +varbind( + int expr: @varbindexpr ref, + int var: @accessible ref +); + +funbind( + int expr: @funbindexpr ref, + int fun: @function ref +); + +@any_new_expr = @new_expr + | @new_array_expr; + +@new_or_delete_expr = @any_new_expr + | @delete_expr + | @delete_array_expr; + +@prefix_crement_expr = @preincrexpr | @predecrexpr; + +@postfix_crement_expr = @postincrexpr | @postdecrexpr; + +@increment_expr = @preincrexpr | @postincrexpr; + +@decrement_expr = @predecrexpr | @postdecrexpr; + +@crement_expr = @increment_expr | @decrement_expr; + +@un_arith_op_expr = @arithnegexpr + | @unaryplusexpr + | @conjugation + | @realpartexpr + | @imagpartexpr + | @crement_expr + ; + +@un_bitwise_op_expr = @complementexpr; + +@un_log_op_expr = @notexpr; + +@un_op_expr = @address_of + | @indirect + | @un_arith_op_expr + | @un_bitwise_op_expr + | @builtinaddressof + | @vec_fill + | @un_log_op_expr + | @co_await + | @co_yield + ; + +@bin_log_op_expr = @andlogicalexpr | @orlogicalexpr; + +@cmp_op_expr = @eq_op_expr | @rel_op_expr; + +@eq_op_expr = @eqexpr | @neexpr; + +@rel_op_expr = @gtexpr + | @ltexpr + | @geexpr + | @leexpr + | @spaceshipexpr + ; + +@bin_bitwise_op_expr = @lshiftexpr + | @rshiftexpr + | @andexpr + | @orexpr + | @xorexpr + ; + +@p_arith_op_expr = @paddexpr + | @psubexpr + | @pdiffexpr + ; + +@bin_arith_op_expr = @addexpr + | @subexpr + | @mulexpr + | @divexpr + | @remexpr + | @jmulexpr + | @jdivexpr + | @fjaddexpr + | @jfaddexpr + | @fjsubexpr + | @jfsubexpr + | @minexpr + | @maxexpr + | @p_arith_op_expr + ; + +@bin_op_expr = @bin_arith_op_expr + | @bin_bitwise_op_expr + | @cmp_op_expr + | @bin_log_op_expr + ; + +@op_expr = @un_op_expr + | @bin_op_expr + | @assign_expr + | @conditionalexpr + ; + +@assign_arith_expr = @assignaddexpr + | @assignsubexpr + | @assignmulexpr + | @assigndivexpr + | @assignremexpr + ; + +@assign_bitwise_expr = @assignandexpr + | @assignorexpr + | @assignxorexpr + | @assignlshiftexpr + | @assignrshiftexpr + ; + +@assign_pointer_expr = @assignpaddexpr + | @assignpsubexpr + ; + +@assign_op_expr = @assign_arith_expr + | @assign_bitwise_expr + | @assign_pointer_expr + ; + +@assign_expr = @assignexpr | @assign_op_expr | @blockassignexpr + +/* + Binary encoding of the allocator form. + + case @allocator.form of + 0 = plain + | 1 = alignment + ; +*/ + +/** + * The allocator function associated with a `new` or `new[]` expression. + * The `form` column specified whether the allocation call contains an alignment + * argument. + */ +expr_allocator( + unique int expr: @any_new_expr ref, + int func: @function ref, + int form: int ref +); + +/* + Binary encoding of the deallocator form. + + case @deallocator.form of + 0 = plain + | 1 = size + | 2 = alignment + | 4 = destroying_delete + ; +*/ + +/** + * The deallocator function associated with a `delete`, `delete[]`, `new`, or + * `new[]` expression. For a `new` or `new[]` expression, the deallocator is the + * one used to free memory if the initialization throws an exception. + * The `form` column specifies whether the deallocation call contains a size + * argument, and alignment argument, or both. + */ +expr_deallocator( + unique int expr: @new_or_delete_expr ref, + int func: @function ref, + int form: int ref +); + +/** + * Holds if the `@conditionalexpr` is of the two operand form + * `guard ? : false`. + */ +expr_cond_two_operand( + unique int cond: @conditionalexpr ref +); + +/** + * The guard of `@conditionalexpr` `guard ? true : false` + */ +expr_cond_guard( + unique int cond: @conditionalexpr ref, + int guard: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` holds. For the two operand form + * `guard ?: false` consider using `expr_cond_guard` instead. + */ +expr_cond_true( + unique int cond: @conditionalexpr ref, + int true: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` does not hold. + */ +expr_cond_false( + unique int cond: @conditionalexpr ref, + int false: @expr ref +); + +/** A string representation of the value. */ +values( + unique int id: @value, + string str: string ref +); + +/** The actual text in the source code for the value, if any. */ +valuetext( + unique int id: @value ref, + string text: string ref +); + +valuebind( + int val: @value ref, + unique int expr: @expr ref +); + +fieldoffsets( + unique int id: @variable ref, + int byteoffset: int ref, + int bitoffset: int ref +); + +bitfield( + unique int id: @variable ref, + int bits: int ref, + int declared_bits: int ref +); + +/* TODO +memberprefix( + int member: @expr ref, + int prefix: @expr ref +); +*/ + +/* + kind(1) = mbrcallexpr + kind(2) = mbrptrcallexpr + kind(3) = mbrptrmbrcallexpr + kind(4) = ptrmbrptrmbrcallexpr + kind(5) = mbrreadexpr // x.y + kind(6) = mbrptrreadexpr // p->y + kind(7) = mbrptrmbrreadexpr // x.*pm + kind(8) = mbrptrmbrptrreadexpr // x->*pm + kind(9) = staticmbrreadexpr // static x.y + kind(10) = staticmbrptrreadexpr // static p->y +*/ +/* TODO +memberaccess( + int member: @expr ref, + int kind: int ref +); +*/ + +initialisers( + unique int init: @initialiser, + int var: @accessible ref, + unique int expr: @expr ref, + int location: @location_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 +| 364 = @istriviallycopyassignable +| 365 = @isassignablenopreconditioncheck +| 366 = @referencebindstotemporary +| 367 = @issameas +| 368 = @builtinhasattribute +| 369 = @ispointerinterconvertiblewithclass +| 370 = @builtinispointerinterconvertiblewithclass +| 371 = @iscorrespondingmember +| 372 = @builtiniscorrespondingmember +| 373 = @isboundedarray +| 374 = @isunboundedarray +| 375 = @isreferenceable +| 378 = @isnothrowconvertible +| 379 = @referenceconstructsfromtemporary +| 380 = @referenceconvertsfromtemporary +| 381 = @isconvertible +| 382 = @isvalidwinrttype +| 383 = @iswinclass +| 384 = @iswininterface +| 385 = @istriviallyequalitycomparable +| 386 = @isscopedenum +| 387 = @istriviallyrelocatable +| 388 = @datasizeof +| 389 = @c11_generic +| 390 = @requires_expr +| 391 = @nested_requirement +| 392 = @compound_requirement +| 393 = @concept_id +; + +@var_args_expr = @vastartexpr + | @vaendexpr + | @vaargexpr + | @vacopyexpr + ; + +@builtin_op = @var_args_expr + | @noopexpr + | @offsetofexpr + | @intaddrexpr + | @hasassignexpr + | @hascopyexpr + | @hasnothrowassign + | @hasnothrowconstr + | @hasnothrowcopy + | @hastrivialassign + | @hastrivialconstr + | @hastrivialcopy + | @hastrivialdestructor + | @hasuserdestr + | @hasvirtualdestr + | @isabstractexpr + | @isbaseofexpr + | @isclassexpr + | @isconvtoexpr + | @isemptyexpr + | @isenumexpr + | @ispodexpr + | @ispolyexpr + | @isunionexpr + | @typescompexpr + | @builtinshufflevector + | @builtinconvertvector + | @builtinaddressof + | @istriviallyconstructibleexpr + | @isdestructibleexpr + | @isnothrowdestructibleexpr + | @istriviallydestructibleexpr + | @istriviallyassignableexpr + | @isnothrowassignableexpr + | @istrivialexpr + | @isstandardlayoutexpr + | @istriviallycopyableexpr + | @isliteraltypeexpr + | @hastrivialmoveconstructorexpr + | @hastrivialmoveassignexpr + | @hasnothrowmoveassignexpr + | @isconstructibleexpr + | @isnothrowconstructibleexpr + | @hasfinalizerexpr + | @isdelegateexpr + | @isinterfaceclassexpr + | @isrefarrayexpr + | @isrefclassexpr + | @issealedexpr + | @issimplevalueclassexpr + | @isvalueclassexpr + | @isfinalexpr + | @builtinchooseexpr + | @builtincomplex + | @isassignable + | @isaggregate + | @hasuniqueobjectrepresentations + | @builtinbitcast + | @builtinshuffle + | @issame + | @isfunction + | @islayoutcompatible + | @ispointerinterconvertiblebaseof + | @isarray + | @arrayrank + | @arrayextent + | @isarithmetic + | @iscompletetype + | @iscompound + | @isconst + | @isfloatingpoint + | @isfundamental + | @isintegral + | @islvaluereference + | @ismemberfunctionpointer + | @ismemberobjectpointer + | @ismemberpointer + | @isobject + | @ispointer + | @isreference + | @isrvaluereference + | @isscalar + | @issigned + | @isunsigned + | @isvoid + | @isvolatile + | @istriviallycopyassignable + | @isassignablenopreconditioncheck + | @referencebindstotemporary + | @issameas + | @builtinhasattribute + | @ispointerinterconvertiblewithclass + | @builtinispointerinterconvertiblewithclass + | @iscorrespondingmember + | @builtiniscorrespondingmember + | @isboundedarray + | @isunboundedarray + | @isreferenceable + | @isnothrowconvertible + | @referenceconstructsfromtemporary + | @referenceconvertsfromtemporary + | @isconvertible + | @isvalidwinrttype + | @iswinclass + | @iswininterface + | @istriviallyequalitycomparable + | @isscopedenum + | @istriviallyrelocatable + ; + +compound_requirement_is_noexcept( + int expr: @compound_requirement ref +); + +new_allocated_type( + unique int expr: @new_expr ref, + int type_id: @type ref +); + +new_array_allocated_type( + unique int expr: @new_array_expr ref, + int type_id: @type ref +); + +/** + * The field being initialized by an initializer expression within an aggregate + * initializer for a class/struct/union. Position is used to sort repeated initializers. + */ +#keyset[aggregate, position] +aggregate_field_init( + int aggregate: @aggregateliteral ref, + int initializer: @expr ref, + int field: @membervariable ref, + int position: int ref +); + +/** + * 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 +); + +@sizeof_or_alignof = @runtime_sizeof | @runtime_alignof | @datasizeof | @sizeof_pack; + +sizeof_bind( + unique int expr: @sizeof_or_alignof ref, + int type_id: @type ref +); + +code_block( + unique int block: @literal ref, + unique int routine: @function ref +); + +lambdas( + unique int expr: @lambdaexpr ref, + string default_capture: string ref, + boolean has_explicit_return_type: boolean ref +); + +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 +| 38 = @stmt_consteval_if +| 39 = @stmt_not_consteval_if +; + +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 +); + +@stmt_consteval_or_not_consteval_if = @stmt_consteval_if | @stmt_not_consteval_if; + +consteval_if_then( + unique int constexpr_if_stmt: @stmt_consteval_or_not_consteval_if ref, + int then_id: @stmt ref +); + +consteval_if_else( + unique int constexpr_if_stmt: @stmt_consteval_or_not_consteval_if ref, + int else_id: @stmt ref +); + +while_body( + unique int while_stmt: @stmt_while ref, + int body_id: @stmt ref +); + +do_body( + unique int do_stmt: @stmt_end_test_while ref, + int body_id: @stmt ref +); + +switch_initialization( + unique int switch_stmt: @stmt_switch ref, + int init_id: @stmt ref +); + +#keyset[switch_stmt, index] +switch_case( + int switch_stmt: @stmt_switch ref, + int index: int ref, + int case_id: @stmt_switch_case ref +); + +switch_body( + unique int switch_stmt: @stmt_switch ref, + int body_id: @stmt ref +); + +@stmt_for_or_range_based_for = @stmt_for + | @stmt_range_based_for; + +for_initialization( + unique int for_stmt: @stmt_for_or_range_based_for ref, + int init_id: @stmt ref +); + +for_condition( + unique int for_stmt: @stmt_for ref, + int condition_id: @expr ref +); + +for_update( + unique int for_stmt: @stmt_for ref, + int update_id: @expr ref +); + +for_body( + unique int for_stmt: @stmt_for ref, + int body_id: @stmt ref +); + +@stmtparent = @stmt | @expr_stmt ; +stmtparents( + unique int id: @stmt ref, + int index: int ref, + int parent: @stmtparent ref +); + +ishandler(unique int block: @stmt_block ref); + +@cfgnode = @stmt | @expr | @function | @initialiser ; + +stmt_decl_bind( + int stmt: @stmt_decl ref, + int num: int ref, + int decl: @declaration ref +); + +stmt_decl_entry_bind( + int stmt: @stmt_decl ref, + int num: int ref, + int decl_entry: @element ref +); + +@parameterized_element = @function | @stmt_block | @requires_expr; + +blockscope( + unique int block: @stmt_block ref, + int enclosing: @parameterized_element ref +); + +@jump = @stmt_goto | @stmt_break | @stmt_continue; + +@jumporlabel = @jump | @stmt_label | @literal; + +jumpinfo( + unique int id: @jumporlabel ref, + string str: string ref, + int target: @stmt ref +); + +preprocdirects( + unique int id: @preprocdirect, + int kind: int ref, + int location: @location_default ref +); +case @preprocdirect.kind of + 0 = @ppd_if +| 1 = @ppd_ifdef +| 2 = @ppd_ifndef +| 3 = @ppd_elif +| 4 = @ppd_else +| 5 = @ppd_endif +| 6 = @ppd_plain_include +| 7 = @ppd_define +| 8 = @ppd_undef +| 9 = @ppd_line +| 10 = @ppd_error +| 11 = @ppd_pragma +| 12 = @ppd_objc_import +| 13 = @ppd_include_next +| 14 = @ppd_ms_import +| 15 = @ppd_elifdef +| 16 = @ppd_elifndef +| 18 = @ppd_warning +; + +@ppd_include = @ppd_plain_include | @ppd_objc_import | @ppd_include_next | @ppd_ms_import; + +@ppd_branch = @ppd_if | @ppd_ifdef | @ppd_ifndef | @ppd_elif | @ppd_elifdef | @ppd_elifndef; + +preprocpair( + int begin : @ppd_branch ref, + int elseelifend : @preprocdirect ref +); + +preproctrue(int branch : @ppd_branch ref); +preprocfalse(int branch : @ppd_branch ref); + +preproctext( + unique int id: @preprocdirect ref, + string head: string ref, + string body: string ref +); + +includes( + unique int id: @ppd_include ref, + int included: @file ref +); + +link_targets( + int id: @link_target, + int binary: @file ref +); + +link_parent( + int element : @element ref, + int link_target : @link_target ref +); + +/* XML Files */ + +xmlEncoding(unique int id: @file ref, string encoding: string ref); + +xmlDTDs( + unique int id: @xmldtd, + string root: string ref, + string publicId: string ref, + string systemId: string ref, + int fileid: @file ref +); + +xmlElements( + unique int id: @xmlelement, + string name: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int fileid: @file ref +); + +xmlAttrs( + unique int id: @xmlattribute, + int elementid: @xmlelement ref, + string name: string ref, + string value: string ref, + int idx: int ref, + int fileid: @file ref +); + +xmlNs( + int id: @xmlnamespace, + string prefixName: string ref, + string URI: string ref, + int fileid: @file ref +); + +xmlHasNs( + int elementId: @xmlnamespaceable ref, + int nsId: @xmlnamespace ref, + int fileid: @file ref +); + +xmlComments( + unique int id: @xmlcomment, + string text: string ref, + int parentid: @xmlparent ref, + int fileid: @file ref +); + +xmlChars( + unique int id: @xmlcharacters, + string text: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int isCDATA: int ref, + int fileid: @file ref +); + +@xmlparent = @file | @xmlelement; +@xmlnamespaceable = @xmlelement | @xmlattribute; + +xmllocations( + int xmlElement: @xmllocatable ref, + int location: @location_default ref +); + +@xmllocatable = @xmlcharacters + | @xmlelement + | @xmlcomment + | @xmlattribute + | @xmldtd + | @file + | @xmlnamespace; diff --git a/cpp/downgrades/45f9d92df0bd1396e5f9c976919749edd68acb32/semmlecode.cpp.dbscheme b/cpp/downgrades/45f9d92df0bd1396e5f9c976919749edd68acb32/semmlecode.cpp.dbscheme new file mode 100644 index 000000000000..e594389175c0 --- /dev/null +++ b/cpp/downgrades/45f9d92df0bd1396e5f9c976919749edd68acb32/semmlecode.cpp.dbscheme @@ -0,0 +1,2444 @@ + +/** + * An invocation of the compiler. Note that more than one file may be + * compiled per invocation. For example, this command compiles three + * source files: + * + * gcc -c f1.c f2.c f3.c + * + * The `id` simply identifies the invocation, while `cwd` is the working + * directory from which the compiler was invoked. + */ +compilations( + /** + * An invocation of the compiler. Note that more than one file may + * be compiled per invocation. For example, this command compiles + * three source files: + * + * gcc -c f1.c f2.c f3.c + */ + unique int id : @compilation, + string cwd : string ref +); + +/** + * The arguments that were passed to the extractor for a compiler + * invocation. If `id` is for the compiler invocation + * + * gcc -c f1.c f2.c f3.c + * + * then typically there will be rows for + * + * num | arg + * --- | --- + * 0 | *path to extractor* + * 1 | `--mimic` + * 2 | `/usr/bin/gcc` + * 3 | `-c` + * 4 | f1.c + * 5 | f2.c + * 6 | f3.c + */ +#keyset[id, num] +compilation_args( + int id : @compilation ref, + int num : int ref, + string arg : string ref +); + +/** + * Optionally, record the build mode for each compilation. + */ +compilation_build_mode( + unique int id : @compilation ref, + int mode : int ref +); + +/* +case @compilation_build_mode.mode of + 0 = @build_mode_none +| 1 = @build_mode_manual +| 2 = @build_mode_auto +; +*/ + +/** + * The source files that are compiled by a compiler invocation. + * If `id` is for the compiler invocation + * + * gcc -c f1.c f2.c f3.c + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | f1.c + * 1 | f2.c + * 2 | f3.c + * + * Note that even if those files `#include` headers, those headers + * do not appear as rows. + */ +#keyset[id, num] +compilation_compiling_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The time taken by the extractor for a compiler invocation. + * + * For each file `num`, there will be rows for + * + * kind | seconds + * ---- | --- + * 1 | CPU seconds used by the extractor frontend + * 2 | Elapsed seconds during the extractor frontend + * 3 | CPU seconds used by the extractor backend + * 4 | Elapsed seconds during the extractor backend + */ +#keyset[id, num, kind] +compilation_time( + int id : @compilation ref, + int num : int ref, + /* kind: + 1 = frontend_cpu_seconds + 2 = frontend_elapsed_seconds + 3 = extractor_cpu_seconds + 4 = extractor_elapsed_seconds + */ + int kind : int ref, + float seconds : float ref +); + +/** + * An error or warning generated by the extractor. + * The diagnostic message `diagnostic` was generated during compiler + * invocation `compilation`, and is the `file_number_diagnostic_number`th + * message generated while extracting the `file_number`th file of that + * invocation. + */ +#keyset[compilation, file_number, file_number_diagnostic_number] +diagnostic_for( + int diagnostic : @diagnostic ref, + int compilation : @compilation ref, + int file_number : int ref, + int file_number_diagnostic_number : int ref +); + +/** + * If extraction was successful, then `cpu_seconds` and + * `elapsed_seconds` are the CPU time and elapsed time (respectively) + * that extraction took for compiler invocation `id`. + */ +compilation_finished( + unique int id : @compilation ref, + float cpu_seconds : float ref, + float elapsed_seconds : float ref +); + + +/** + * External data, 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 +); + +/* +case @coroutine_placeholder_variable.kind of + 1 = @handle +| 2 = @promise +| 3 = @init_await_resume +; +*/ + +coroutine_placeholder_variable( + unique int placeholder_variable: @variable ref, + int kind: int ref, + int function: @function ref +) + +/** The `new` function used for allocating the coroutine state, if any. */ +coroutine_new( + unique int function: @function ref, + int new: @function ref +); + +/** The `delete` function used for deallocating the coroutine state, if any. */ +coroutine_delete( + unique int function: @function ref, + int delete: @function ref +); + +purefunctions(unique int id: @function ref); + +function_deleted(unique int id: @function ref); + +function_defaulted(unique int id: @function ref); + +function_prototyped(unique int id: @function ref) + +deduction_guide_for_class( + int id: @function ref, + int class_template: @usertype ref +) + +member_function_this_type( + unique int id: @function ref, + int this_type: @type ref +); + +#keyset[id, type_id] +fun_decls( + int id: @fun_decl, + int function: @function ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +fun_def(unique int id: @fun_decl ref); +fun_specialized(unique int id: @fun_decl ref); +fun_implicit(unique int id: @fun_decl ref); +fun_decl_specifiers( + int id: @fun_decl ref, + string name: string ref +) +#keyset[fun_decl, index] +fun_decl_throws( + int fun_decl: @fun_decl ref, + int index: int ref, + int type_id: @type ref +); +/* an empty throw specification is different from none */ +fun_decl_empty_throws(unique int fun_decl: @fun_decl ref); +fun_decl_noexcept( + int fun_decl: @fun_decl ref, + int constant: @expr ref +); +fun_decl_empty_noexcept(int fun_decl: @fun_decl ref); +fun_decl_typedef_type( + unique int fun_decl: @fun_decl ref, + int typedeftype_id: @usertype ref +); + +/* +case @fun_requires.kind of + 1 = @template_attached +| 2 = @function_attached +; +*/ + +fun_requires( + int id: @fun_decl ref, + int kind: int ref, + int constraint: @expr ref +); + +param_decl_bind( + unique int id: @var_decl ref, + int index: int ref, + int fun_decl: @fun_decl ref +); + +#keyset[id, type_id] +var_decls( + int id: @var_decl, + int variable: @variable ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +var_def(unique int id: @var_decl ref); +var_specialized(int id: @var_decl ref); +var_decl_specifiers( + int id: @var_decl ref, + string name: string ref +) +is_structured_binding(unique int id: @variable ref); +var_requires( + int id: @var_decl ref, + int constraint: @expr ref +); + +type_decls( + unique int id: @type_decl, + int type_id: @type ref, + int location: @location_default ref +); +type_def(unique int id: @type_decl ref); +type_decl_top( + unique int type_decl: @type_decl ref +); +type_requires( + int id: @type_decl ref, + int constraint: @expr ref +); + +namespace_decls( + unique int id: @namespace_decl, + int namespace_id: @namespace ref, + int location: @location_default ref, + int bodylocation: @location_default ref +); + +case @using.kind of + 1 = @using_declaration +| 2 = @using_directive +| 3 = @using_enum_declaration +; + +usings( + unique int id: @using, + int element_id: @element ref, + int location: @location_default ref, + int kind: int ref +); + +/** The element which contains the `using` declaration. */ +using_container( + int parent: @element ref, + int child: @using ref +); + +static_asserts( + unique int id: @static_assert, + int condition : @expr ref, + string message : string ref, + int location: @location_default ref, + int enclosing : @element ref +); + +// each function has an ordered list of parameters +#keyset[id, type_id] +#keyset[function, index, type_id] +params( + int id: @parameter, + int function: @parameterized_element ref, + int index: int ref, + int type_id: @type ref +); + +overrides( + int new: @function ref, + int old: @function ref +); + +#keyset[id, type_id] +membervariables( + int id: @membervariable, + int type_id: @type ref, + string name: string ref +); + +#keyset[id, type_id] +globalvariables( + int id: @globalvariable, + int type_id: @type ref, + string name: string ref +); + +#keyset[id, type_id] +localvariables( + int id: @localvariable, + int type_id: @type ref, + string name: string ref +); + +autoderivation( + unique int var: @variable ref, + int derivation_type: @type ref +); + +orphaned_variables( + int var: @localvariable ref, + int function: @function ref +) + +enumconstants( + unique int id: @enumconstant, + int parent: @usertype ref, + int index: int ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); + +@variable = @localscopevariable | @globalvariable | @membervariable; + +@localscopevariable = @localvariable | @parameter; + +/** + * Built-in types are the fundamental types, e.g., integral, floating, and void. + */ +case @builtintype.kind of + 1 = @errortype +| 2 = @unknowntype +| 3 = @void +| 4 = @boolean +| 5 = @char +| 6 = @unsigned_char +| 7 = @signed_char +| 8 = @short +| 9 = @unsigned_short +| 10 = @signed_short +| 11 = @int +| 12 = @unsigned_int +| 13 = @signed_int +| 14 = @long +| 15 = @unsigned_long +| 16 = @signed_long +| 17 = @long_long +| 18 = @unsigned_long_long +| 19 = @signed_long_long +// ... 20 Microsoft-specific __int8 +// ... 21 Microsoft-specific __int16 +// ... 22 Microsoft-specific __int32 +// ... 23 Microsoft-specific __int64 +| 24 = @float +| 25 = @double +| 26 = @long_double +| 27 = @complex_float // C99-specific _Complex float +| 28 = @complex_double // C99-specific _Complex double +| 29 = @complex_long_double // C99-specific _Complex long double +| 30 = @imaginary_float // C99-specific _Imaginary float +| 31 = @imaginary_double // C99-specific _Imaginary double +| 32 = @imaginary_long_double // C99-specific _Imaginary long double +| 33 = @wchar_t // Microsoft-specific +| 34 = @decltype_nullptr // C++11 +| 35 = @int128 // __int128 +| 36 = @unsigned_int128 // unsigned __int128 +| 37 = @signed_int128 // signed __int128 +| 38 = @float128 // __float128 +| 39 = @complex_float128 // _Complex __float128 +| 40 = @decimal32 // _Decimal32 +| 41 = @decimal64 // _Decimal64 +| 42 = @decimal128 // _Decimal128 +| 43 = @char16_t +| 44 = @char32_t +| 45 = @std_float32 // _Float32 +| 46 = @float32x // _Float32x +| 47 = @std_float64 // _Float64 +| 48 = @float64x // _Float64x +| 49 = @std_float128 // _Float128 +// ... 50 _Float128x +| 51 = @char8_t +| 52 = @float16 // _Float16 +| 53 = @complex_float16 // _Complex _Float16 +| 54 = @fp16 // __fp16 +| 55 = @std_bfloat16 // __bf16 +| 56 = @std_float16 // std::float16_t +| 57 = @complex_std_float32 // _Complex _Float32 +| 58 = @complex_float32x // _Complex _Float32x +| 59 = @complex_std_float64 // _Complex _Float64 +| 60 = @complex_float64x // _Complex _Float64x +| 61 = @complex_std_float128 // _Complex _Float128 +; + +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 +| 0 = @unknown_usertype +| 1 = @struct +| 2 = @class +| 3 = @union +| 4 = @enum +// ... 5 = @typedef deprecated // classic C: typedef typedef type name +// ... 6 = @template deprecated +| 7 = @template_parameter +| 8 = @template_template_parameter +| 9 = @proxy_class // a proxy class associated with a template parameter +// ... 10 objc_class deprecated +// ... 11 objc_protocol deprecated +// ... 12 objc_category deprecated +| 13 = @scoped_enum +// ... 14 = @using_alias deprecated // a using name = type style typedef +| 15 = @template_struct +| 16 = @template_class +| 17 = @template_union +| 18 = @alias +; +*/ + +usertypes( + unique int id: @usertype, + string name: string ref, + int kind: int ref +); + +usertypesize( + unique int id: @usertype ref, + int size: int ref, + int alignment: int ref +); + +usertype_final(unique int id: @usertype ref); + +usertype_uuid( + unique int id: @usertype ref, + string uuid: string ref +); + +/* +case @usertype.alias_kind of +| 0 = @typedef +| 1 = @alias +*/ + +usertype_alias_kind( + int id: @usertype ref, + int alias_kind: int ref +) + +nontype_template_parameters( + int id: @expr ref +); + +type_template_type_constraint( + int id: @usertype ref, + int constraint: @expr ref +); + +mangled_name( + unique int id: @declaration ref, + int mangled_name : @mangledname, + boolean is_complete: boolean ref +); + +is_pod_class(unique int id: @usertype ref); +is_standard_layout_class(unique int id: @usertype ref); + +is_complete(unique int id: @usertype ref); + +is_class_template(unique int id: @usertype ref); +class_instantiation( + int to: @usertype ref, + int from: @usertype ref +); +class_template_argument( + int type_id: @usertype ref, + int index: int ref, + int arg_type: @type ref +); +class_template_argument_value( + int type_id: @usertype ref, + int index: int ref, + int arg_value: @expr ref +); + +@user_or_decltype = @usertype | @decltype; + +is_proxy_class_for( + unique int id: @usertype ref, + int templ_param_id: @user_or_decltype ref +); + +type_mentions( + unique int id: @type_mention, + int type_id: @type ref, + int location: @location ref, + // a_symbol_reference_kind from the frontend. + int kind: int ref +); + +is_function_template(unique int id: @function ref); +function_instantiation( + unique int to: @function ref, + int from: @function ref +); +function_template_argument( + int function_id: @function ref, + int index: int ref, + int arg_type: @type ref +); +function_template_argument_value( + int function_id: @function ref, + int index: int ref, + int arg_value: @expr ref +); + +is_variable_template(unique int id: @variable ref); +variable_instantiation( + unique int to: @variable ref, + int from: @variable ref +); +variable_template_argument( + int variable_id: @variable ref, + int index: int ref, + int arg_type: @type ref +); +variable_template_argument_value( + int variable_id: @variable ref, + int index: int ref, + int arg_value: @expr ref +); + +template_template_instantiation( + int to: @usertype ref, + int from: @usertype ref +); +template_template_argument( + int type_id: @usertype ref, + int index: int ref, + int arg_type: @type ref +); +template_template_argument_value( + int type_id: @usertype ref, + int index: int ref, + int arg_value: @expr ref +); + +@concept = @concept_template | @concept_id; + +concept_templates( + unique int concept_id: @concept_template, + string name: string ref, + int location: @location_default ref +); +concept_instantiation( + unique int to: @concept_id ref, + int from: @concept_template ref +); +is_type_constraint(int concept_id: @concept_id ref); +concept_template_argument( + int concept_id: @concept ref, + int index: int ref, + int arg_type: @type ref +); +concept_template_argument_value( + int concept_id: @concept ref, + int index: int ref, + int arg_value: @expr ref +); + +routinetypes( + unique int id: @routinetype, + int return_type: @type ref +); + +routinetypeargs( + int routine: @routinetype ref, + int index: int ref, + int type_id: @type ref +); + +ptrtomembers( + unique int id: @ptrtomember, + int type_id: @type ref, + int class_id: @type ref +); + +/* + specifiers for types, functions, and variables + + "public", + "protected", + "private", + + "const", + "volatile", + "static", + + "pure", + "virtual", + "sealed", // Microsoft + "__interface", // Microsoft + "inline", + "explicit", + + "near", // near far extension + "far", // near far extension + "__ptr32", // Microsoft + "__ptr64", // Microsoft + "__sptr", // Microsoft + "__uptr", // Microsoft + "dllimport", // Microsoft + "dllexport", // Microsoft + "thread", // Microsoft + "naked", // Microsoft + "microsoft_inline", // Microsoft + "forceinline", // Microsoft + "selectany", // Microsoft + "nothrow", // Microsoft + "novtable", // Microsoft + "noreturn", // Microsoft + "noinline", // Microsoft + "noalias", // Microsoft + "restrict", // Microsoft +*/ + +specifiers( + unique int id: @specifier, + unique string str: string ref +); + +typespecifiers( + int type_id: @type ref, + int spec_id: @specifier ref +); + +funspecifiers( + int func_id: @function ref, + int spec_id: @specifier ref +); + +varspecifiers( + int var_id: @accessible ref, + int spec_id: @specifier ref +); + +explicit_specifier_exprs( + unique int func_id: @function ref, + int constant: @expr ref +) + +attributes( + unique int id: @attribute, + int kind: int ref, + string name: string ref, + string name_space: string ref, + int location: @location_default ref +); + +case @attribute.kind of + 0 = @gnuattribute +| 1 = @stdattribute +| 2 = @declspec +| 3 = @msattribute +| 4 = @alignas +// ... 5 @objc_propertyattribute deprecated +; + +attribute_args( + unique int id: @attribute_arg, + int kind: int ref, + int attribute: @attribute ref, + int index: int ref, + int location: @location_default ref +); + +case @attribute_arg.kind of + 0 = @attribute_arg_empty +| 1 = @attribute_arg_token +| 2 = @attribute_arg_constant +| 3 = @attribute_arg_type +| 4 = @attribute_arg_constant_expr +| 5 = @attribute_arg_expr +; + +attribute_arg_value( + unique int arg: @attribute_arg ref, + string value: string ref +); +attribute_arg_type( + unique int arg: @attribute_arg ref, + int type_id: @type ref +); +attribute_arg_constant( + unique int arg: @attribute_arg ref, + int constant: @expr ref +) +attribute_arg_expr( + unique int arg: @attribute_arg ref, + int expr: @expr ref +) +attribute_arg_name( + unique int arg: @attribute_arg ref, + string name: string ref +); + +typeattributes( + int type_id: @type ref, + int spec_id: @attribute ref +); + +funcattributes( + int func_id: @function ref, + int spec_id: @attribute ref +); + +varattributes( + int var_id: @accessible ref, + int spec_id: @attribute ref +); + +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 + | @concept_template; + +@member = @membervariable + | @function + | @declaredtype + | @enumconstant; + +@locatable = @diagnostic + | @declaration + | @ppd_include + | @ppd_define + | @macroinvocation + /*| @funcall*/ + | @xmllocatable + | @attribute + | @attribute_arg; + +@namedscope = @namespace | @usertype; + +@element = @locatable + | @file + | @folder + | @specifier + | @type + | @expr + | @namespace + | @initialiser + | @stmt + | @derivation + | @comment + | @preprocdirect + | @fun_decl + | @var_decl + | @type_decl + | @namespace_decl + | @using + | @namequalifier + | @specialnamequalifyingelement + | @static_assert + | @type_mention + | @lambdacapture; + +@exprparent = @element; + +comments( + unique int id: @comment, + string contents: string ref, + int location: @location_default ref +); + +commentbinding( + int id: @comment ref, + int element: @element ref +); + +exprconv( + int converted: @expr ref, + unique int conversion: @expr ref +); + +compgenerated(unique int id: @element ref); + +/** + * `destructor_call` destructs the `i`'th entity that should be + * destructed following `element`. Note that entities should be + * destructed in reverse construction order, so for a given `element` + * these should be called from highest to lowest `i`. + */ +#keyset[element, destructor_call] +#keyset[element, i] +synthetic_destructor_call( + int element: @element ref, + int i: int ref, + int destructor_call: @routineexpr ref +); + +namespaces( + unique int id: @namespace, + string name: string ref +); + +namespace_inline( + unique int id: @namespace ref +); + +namespacembrs( + int parentid: @namespace ref, + unique int memberid: @namespacembr ref +); + +@namespacembr = @declaration | @namespace; + +exprparents( + int expr_id: @expr ref, + int child_index: int ref, + int parent_id: @exprparent ref +); + +expr_isload(unique int expr_id: @expr ref); + +@cast = @c_style_cast + | @const_cast + | @dynamic_cast + | @reinterpret_cast + | @static_cast + ; + +/* +case @conversion.kind of + 0 = @simple_conversion // a numeric conversion, qualification conversion, or a reinterpret_cast +| 1 = @bool_conversion // conversion to 'bool' +| 2 = @base_class_conversion // a derived-to-base conversion +| 3 = @derived_class_conversion // a base-to-derived conversion +| 4 = @pm_base_class_conversion // a derived-to-base conversion of a pointer to member +| 5 = @pm_derived_class_conversion // a base-to-derived conversion of a pointer to member +| 6 = @glvalue_adjust // an adjustment of the type of a glvalue +| 7 = @prvalue_adjust // an adjustment of the type of a prvalue +; +*/ +/** + * Describes the semantics represented by a cast expression. This is largely + * independent of the source syntax of the cast, so it is separate from the + * regular expression kind. + */ +conversionkinds( + unique int expr_id: @cast ref, + int kind: int ref +); + +@conversion = @cast + | @array_to_pointer + | @parexpr + | @reference_to + | @ref_indirect + | @temp_init + | @c11_generic + ; + +/* +case @funbindexpr.kind of + 0 = @normal_call // a normal call +| 1 = @virtual_call // a virtual call +| 2 = @adl_call // a call whose target is only found by ADL +; +*/ +iscall( + unique int caller: @funbindexpr ref, + int kind: int ref +); + +numtemplatearguments( + unique int expr_id: @expr ref, + int num: int ref +); + +specialnamequalifyingelements( + unique int id: @specialnamequalifyingelement, + unique string name: string ref +); + +@namequalifiableelement = @expr | @namequalifier; +@namequalifyingelement = @namespace + | @specialnamequalifyingelement + | @usertype; + +namequalifiers( + unique int id: @namequalifier, + unique int qualifiableelement: @namequalifiableelement ref, + int qualifyingelement: @namequalifyingelement ref, + int location: @location_default ref +); + +varbind( + int expr: @varbindexpr ref, + int var: @accessible ref +); + +funbind( + int expr: @funbindexpr ref, + int fun: @function ref +); + +@any_new_expr = @new_expr + | @new_array_expr; + +@new_or_delete_expr = @any_new_expr + | @delete_expr + | @delete_array_expr; + +@prefix_crement_expr = @preincrexpr | @predecrexpr; + +@postfix_crement_expr = @postincrexpr | @postdecrexpr; + +@increment_expr = @preincrexpr | @postincrexpr; + +@decrement_expr = @predecrexpr | @postdecrexpr; + +@crement_expr = @increment_expr | @decrement_expr; + +@un_arith_op_expr = @arithnegexpr + | @unaryplusexpr + | @conjugation + | @realpartexpr + | @imagpartexpr + | @crement_expr + ; + +@un_bitwise_op_expr = @complementexpr; + +@un_log_op_expr = @notexpr; + +@un_op_expr = @address_of + | @indirect + | @un_arith_op_expr + | @un_bitwise_op_expr + | @builtinaddressof + | @vec_fill + | @un_log_op_expr + | @co_await + | @co_yield + ; + +@bin_log_op_expr = @andlogicalexpr | @orlogicalexpr; + +@cmp_op_expr = @eq_op_expr | @rel_op_expr; + +@eq_op_expr = @eqexpr | @neexpr; + +@rel_op_expr = @gtexpr + | @ltexpr + | @geexpr + | @leexpr + | @spaceshipexpr + ; + +@bin_bitwise_op_expr = @lshiftexpr + | @rshiftexpr + | @andexpr + | @orexpr + | @xorexpr + ; + +@p_arith_op_expr = @paddexpr + | @psubexpr + | @pdiffexpr + ; + +@bin_arith_op_expr = @addexpr + | @subexpr + | @mulexpr + | @divexpr + | @remexpr + | @jmulexpr + | @jdivexpr + | @fjaddexpr + | @jfaddexpr + | @fjsubexpr + | @jfsubexpr + | @minexpr + | @maxexpr + | @p_arith_op_expr + ; + +@bin_op_expr = @bin_arith_op_expr + | @bin_bitwise_op_expr + | @cmp_op_expr + | @bin_log_op_expr + ; + +@op_expr = @un_op_expr + | @bin_op_expr + | @assign_expr + | @conditionalexpr + ; + +@assign_arith_expr = @assignaddexpr + | @assignsubexpr + | @assignmulexpr + | @assigndivexpr + | @assignremexpr + ; + +@assign_bitwise_expr = @assignandexpr + | @assignorexpr + | @assignxorexpr + | @assignlshiftexpr + | @assignrshiftexpr + ; + +@assign_pointer_expr = @assignpaddexpr + | @assignpsubexpr + ; + +@assign_op_expr = @assign_arith_expr + | @assign_bitwise_expr + | @assign_pointer_expr + ; + +@assign_expr = @assignexpr | @assign_op_expr | @blockassignexpr + +/* + Binary encoding of the allocator form. + + case @allocator.form of + 0 = plain + | 1 = alignment + ; +*/ + +/** + * The allocator function associated with a `new` or `new[]` expression. + * The `form` column specified whether the allocation call contains an alignment + * argument. + */ +expr_allocator( + unique int expr: @any_new_expr ref, + int func: @function ref, + int form: int ref +); + +/* + Binary encoding of the deallocator form. + + case @deallocator.form of + 0 = plain + | 1 = size + | 2 = alignment + | 4 = destroying_delete + ; +*/ + +/** + * The deallocator function associated with a `delete`, `delete[]`, `new`, or + * `new[]` expression. For a `new` or `new[]` expression, the deallocator is the + * one used to free memory if the initialization throws an exception. + * The `form` column specifies whether the deallocation call contains a size + * argument, and alignment argument, or both. + */ +expr_deallocator( + unique int expr: @new_or_delete_expr ref, + int func: @function ref, + int form: int ref +); + +/** + * Holds if the `@conditionalexpr` is of the two operand form + * `guard ? : false`. + */ +expr_cond_two_operand( + unique int cond: @conditionalexpr ref +); + +/** + * The guard of `@conditionalexpr` `guard ? true : false` + */ +expr_cond_guard( + unique int cond: @conditionalexpr ref, + int guard: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` holds. For the two operand form + * `guard ?: false` consider using `expr_cond_guard` instead. + */ +expr_cond_true( + unique int cond: @conditionalexpr ref, + int true: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` does not hold. + */ +expr_cond_false( + unique int cond: @conditionalexpr ref, + int false: @expr ref +); + +/** A string representation of the value. */ +values( + unique int id: @value, + string str: string ref +); + +/** The actual text in the source code for the value, if any. */ +valuetext( + unique int id: @value ref, + string text: string ref +); + +valuebind( + int val: @value ref, + unique int expr: @expr ref +); + +fieldoffsets( + unique int id: @variable ref, + int byteoffset: int ref, + int bitoffset: int ref +); + +bitfield( + unique int id: @variable ref, + int bits: int ref, + int declared_bits: int ref +); + +/* TODO +memberprefix( + int member: @expr ref, + int prefix: @expr ref +); +*/ + +/* + kind(1) = mbrcallexpr + kind(2) = mbrptrcallexpr + kind(3) = mbrptrmbrcallexpr + kind(4) = ptrmbrptrmbrcallexpr + kind(5) = mbrreadexpr // x.y + kind(6) = mbrptrreadexpr // p->y + kind(7) = mbrptrmbrreadexpr // x.*pm + kind(8) = mbrptrmbrptrreadexpr // x->*pm + kind(9) = staticmbrreadexpr // static x.y + kind(10) = staticmbrptrreadexpr // static p->y +*/ +/* TODO +memberaccess( + int member: @expr ref, + int kind: int ref +); +*/ + +initialisers( + unique int init: @initialiser, + int var: @accessible ref, + unique int expr: @expr ref, + int location: @location_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 +| 364 = @istriviallycopyassignable +| 365 = @isassignablenopreconditioncheck +| 366 = @referencebindstotemporary +| 367 = @issameas +| 368 = @builtinhasattribute +| 369 = @ispointerinterconvertiblewithclass +| 370 = @builtinispointerinterconvertiblewithclass +| 371 = @iscorrespondingmember +| 372 = @builtiniscorrespondingmember +| 373 = @isboundedarray +| 374 = @isunboundedarray +| 375 = @isreferenceable +| 378 = @isnothrowconvertible +| 379 = @referenceconstructsfromtemporary +| 380 = @referenceconvertsfromtemporary +| 381 = @isconvertible +| 382 = @isvalidwinrttype +| 383 = @iswinclass +| 384 = @iswininterface +| 385 = @istriviallyequalitycomparable +| 386 = @isscopedenum +| 387 = @istriviallyrelocatable +| 388 = @datasizeof +| 389 = @c11_generic +| 390 = @requires_expr +| 391 = @nested_requirement +| 392 = @compound_requirement +| 393 = @concept_id +; + +@var_args_expr = @vastartexpr + | @vaendexpr + | @vaargexpr + | @vacopyexpr + ; + +@builtin_op = @var_args_expr + | @noopexpr + | @offsetofexpr + | @intaddrexpr + | @hasassignexpr + | @hascopyexpr + | @hasnothrowassign + | @hasnothrowconstr + | @hasnothrowcopy + | @hastrivialassign + | @hastrivialconstr + | @hastrivialcopy + | @hastrivialdestructor + | @hasuserdestr + | @hasvirtualdestr + | @isabstractexpr + | @isbaseofexpr + | @isclassexpr + | @isconvtoexpr + | @isemptyexpr + | @isenumexpr + | @ispodexpr + | @ispolyexpr + | @isunionexpr + | @typescompexpr + | @builtinshufflevector + | @builtinconvertvector + | @builtinaddressof + | @istriviallyconstructibleexpr + | @isdestructibleexpr + | @isnothrowdestructibleexpr + | @istriviallydestructibleexpr + | @istriviallyassignableexpr + | @isnothrowassignableexpr + | @istrivialexpr + | @isstandardlayoutexpr + | @istriviallycopyableexpr + | @isliteraltypeexpr + | @hastrivialmoveconstructorexpr + | @hastrivialmoveassignexpr + | @hasnothrowmoveassignexpr + | @isconstructibleexpr + | @isnothrowconstructibleexpr + | @hasfinalizerexpr + | @isdelegateexpr + | @isinterfaceclassexpr + | @isrefarrayexpr + | @isrefclassexpr + | @issealedexpr + | @issimplevalueclassexpr + | @isvalueclassexpr + | @isfinalexpr + | @builtinchooseexpr + | @builtincomplex + | @isassignable + | @isaggregate + | @hasuniqueobjectrepresentations + | @builtinbitcast + | @builtinshuffle + | @issame + | @isfunction + | @islayoutcompatible + | @ispointerinterconvertiblebaseof + | @isarray + | @arrayrank + | @arrayextent + | @isarithmetic + | @iscompletetype + | @iscompound + | @isconst + | @isfloatingpoint + | @isfundamental + | @isintegral + | @islvaluereference + | @ismemberfunctionpointer + | @ismemberobjectpointer + | @ismemberpointer + | @isobject + | @ispointer + | @isreference + | @isrvaluereference + | @isscalar + | @issigned + | @isunsigned + | @isvoid + | @isvolatile + | @istriviallycopyassignable + | @isassignablenopreconditioncheck + | @referencebindstotemporary + | @issameas + | @builtinhasattribute + | @ispointerinterconvertiblewithclass + | @builtinispointerinterconvertiblewithclass + | @iscorrespondingmember + | @builtiniscorrespondingmember + | @isboundedarray + | @isunboundedarray + | @isreferenceable + | @isnothrowconvertible + | @referenceconstructsfromtemporary + | @referenceconvertsfromtemporary + | @isconvertible + | @isvalidwinrttype + | @iswinclass + | @iswininterface + | @istriviallyequalitycomparable + | @isscopedenum + | @istriviallyrelocatable + ; + +compound_requirement_is_noexcept( + int expr: @compound_requirement ref +); + +new_allocated_type( + unique int expr: @new_expr ref, + int type_id: @type ref +); + +new_array_allocated_type( + unique int expr: @new_array_expr ref, + int type_id: @type ref +); + +/** + * The field being initialized by an initializer expression within an aggregate + * initializer for a class/struct/union. Position is used to sort repeated initializers. + */ +#keyset[aggregate, position] +aggregate_field_init( + int aggregate: @aggregateliteral ref, + int initializer: @expr ref, + int field: @membervariable ref, + int position: int ref +); + +/** + * 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 +); + +@sizeof_or_alignof = @runtime_sizeof | @runtime_alignof | @datasizeof | @sizeof_pack; + +sizeof_bind( + unique int expr: @sizeof_or_alignof ref, + int type_id: @type ref +); + +code_block( + unique int block: @literal ref, + unique int routine: @function ref +); + +lambdas( + unique int expr: @lambdaexpr ref, + string default_capture: string ref, + boolean has_explicit_return_type: boolean ref +); + +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 +| 38 = @stmt_consteval_if +| 39 = @stmt_not_consteval_if +; + +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 +); + +@stmt_consteval_or_not_consteval_if = @stmt_consteval_if | @stmt_not_consteval_if; + +consteval_if_then( + unique int constexpr_if_stmt: @stmt_consteval_or_not_consteval_if ref, + int then_id: @stmt ref +); + +consteval_if_else( + unique int constexpr_if_stmt: @stmt_consteval_or_not_consteval_if ref, + int else_id: @stmt ref +); + +while_body( + unique int while_stmt: @stmt_while ref, + int body_id: @stmt ref +); + +do_body( + unique int do_stmt: @stmt_end_test_while ref, + int body_id: @stmt ref +); + +switch_initialization( + unique int switch_stmt: @stmt_switch ref, + int init_id: @stmt ref +); + +#keyset[switch_stmt, index] +switch_case( + int switch_stmt: @stmt_switch ref, + int index: int ref, + int case_id: @stmt_switch_case ref +); + +switch_body( + unique int switch_stmt: @stmt_switch ref, + int body_id: @stmt ref +); + +@stmt_for_or_range_based_for = @stmt_for + | @stmt_range_based_for; + +for_initialization( + unique int for_stmt: @stmt_for_or_range_based_for ref, + int init_id: @stmt ref +); + +for_condition( + unique int for_stmt: @stmt_for ref, + int condition_id: @expr ref +); + +for_update( + unique int for_stmt: @stmt_for ref, + int update_id: @expr ref +); + +for_body( + unique int for_stmt: @stmt_for ref, + int body_id: @stmt ref +); + +@stmtparent = @stmt | @expr_stmt ; +stmtparents( + unique int id: @stmt ref, + int index: int ref, + int parent: @stmtparent ref +); + +ishandler(unique int block: @stmt_block ref); + +@cfgnode = @stmt | @expr | @function | @initialiser ; + +stmt_decl_bind( + int stmt: @stmt_decl ref, + int num: int ref, + int decl: @declaration ref +); + +stmt_decl_entry_bind( + int stmt: @stmt_decl ref, + int num: int ref, + int decl_entry: @element ref +); + +@parameterized_element = @function | @stmt_block | @requires_expr; + +blockscope( + unique int block: @stmt_block ref, + int enclosing: @parameterized_element ref +); + +@jump = @stmt_goto | @stmt_break | @stmt_continue; + +@jumporlabel = @jump | @stmt_label | @literal; + +jumpinfo( + unique int id: @jumporlabel ref, + string str: string ref, + int target: @stmt ref +); + +preprocdirects( + unique int id: @preprocdirect, + int kind: int ref, + int location: @location_default ref +); +case @preprocdirect.kind of + 0 = @ppd_if +| 1 = @ppd_ifdef +| 2 = @ppd_ifndef +| 3 = @ppd_elif +| 4 = @ppd_else +| 5 = @ppd_endif +| 6 = @ppd_plain_include +| 7 = @ppd_define +| 8 = @ppd_undef +| 9 = @ppd_line +| 10 = @ppd_error +| 11 = @ppd_pragma +| 12 = @ppd_objc_import +| 13 = @ppd_include_next +| 14 = @ppd_ms_import +| 15 = @ppd_elifdef +| 16 = @ppd_elifndef +| 18 = @ppd_warning +; + +@ppd_include = @ppd_plain_include | @ppd_objc_import | @ppd_include_next | @ppd_ms_import; + +@ppd_branch = @ppd_if | @ppd_ifdef | @ppd_ifndef | @ppd_elif | @ppd_elifdef | @ppd_elifndef; + +preprocpair( + int begin : @ppd_branch ref, + int elseelifend : @preprocdirect ref +); + +preproctrue(int branch : @ppd_branch ref); +preprocfalse(int branch : @ppd_branch ref); + +preproctext( + unique int id: @preprocdirect ref, + string head: string ref, + string body: string ref +); + +includes( + unique int id: @ppd_include ref, + int included: @file ref +); + +link_targets( + int id: @link_target, + int binary: @file ref +); + +link_parent( + int element : @element ref, + int link_target : @link_target ref +); + +/* XML Files */ + +xmlEncoding(unique int id: @file ref, string encoding: string ref); + +xmlDTDs( + unique int id: @xmldtd, + string root: string ref, + string publicId: string ref, + string systemId: string ref, + int fileid: @file ref +); + +xmlElements( + unique int id: @xmlelement, + string name: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int fileid: @file ref +); + +xmlAttrs( + unique int id: @xmlattribute, + int elementid: @xmlelement ref, + string name: string ref, + string value: string ref, + int idx: int ref, + int fileid: @file ref +); + +xmlNs( + int id: @xmlnamespace, + string prefixName: string ref, + string URI: string ref, + int fileid: @file ref +); + +xmlHasNs( + int elementId: @xmlnamespaceable ref, + int nsId: @xmlnamespace ref, + int fileid: @file ref +); + +xmlComments( + unique int id: @xmlcomment, + string text: string ref, + int parentid: @xmlparent ref, + int fileid: @file ref +); + +xmlChars( + unique int id: @xmlcharacters, + string text: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int isCDATA: int ref, + int fileid: @file ref +); + +@xmlparent = @file | @xmlelement; +@xmlnamespaceable = @xmlelement | @xmlattribute; + +xmllocations( + int xmlElement: @xmllocatable ref, + int location: @location_default ref +); + +@xmllocatable = @xmlcharacters + | @xmlelement + | @xmlcomment + | @xmlattribute + | @xmldtd + | @file + | @xmlnamespace; diff --git a/cpp/downgrades/45f9d92df0bd1396e5f9c976919749edd68acb32/upgrade.properties b/cpp/downgrades/45f9d92df0bd1396e5f9c976919749edd68acb32/upgrade.properties new file mode 100644 index 000000000000..48949a6e6e6f --- /dev/null +++ b/cpp/downgrades/45f9d92df0bd1396e5f9c976919749edd68acb32/upgrade.properties @@ -0,0 +1,5 @@ +description: Support C23 typeof and typeof_unqual +compatibility: backwards +decltypes.rel: run decltypes.qlo +derivedtypes.rel: run derivedtypes.qlo +type_operators.rel: delete diff --git a/cpp/ql/lib/semmle/code/cpp/Print.qll b/cpp/ql/lib/semmle/code/cpp/Print.qll index 5aafe1c2b65b..90be4fb8339c 100644 --- a/cpp/ql/lib/semmle/code/cpp/Print.qll +++ b/cpp/ql/lib/semmle/code/cpp/Print.qll @@ -176,6 +176,30 @@ private class DecltypeDumpType extends DumpType, Decltype { } } +private class TypeofDumpType extends DumpType, TypeofType { + override string getTypeSpecifier() { result = this.getBaseType().(DumpType).getTypeSpecifier() } + + override string getDeclaratorPrefix() { + result = this.getBaseType().(DumpType).getDeclaratorPrefix() + } + + override string getDeclaratorSuffix() { + result = this.getBaseType().(DumpType).getDeclaratorSuffix() + } +} + +private class IntrinsicTransformedDumpType extends DumpType, IntrinsicTransformedType { + override string getTypeSpecifier() { result = this.getBaseType().(DumpType).getTypeSpecifier() } + + override string getDeclaratorPrefix() { + result = this.getBaseType().(DumpType).getDeclaratorPrefix() + } + + override string getDeclaratorSuffix() { + result = this.getBaseType().(DumpType).getDeclaratorSuffix() + } +} + private class PointerIshDumpType extends DerivedDumpType { PointerIshDumpType() { this instanceof PointerType or diff --git a/cpp/ql/lib/semmle/code/cpp/Type.qll b/cpp/ql/lib/semmle/code/cpp/Type.qll index 9c33dbec1b59..34cc36fe7899 100644 --- a/cpp/ql/lib/semmle/code/cpp/Type.qll +++ b/cpp/ql/lib/semmle/code/cpp/Type.qll @@ -92,8 +92,9 @@ class Type extends Locatable, @type { /** * Gets this type after typedefs have been resolved. * - * The result of this predicate will be the type itself, except in the case of a TypedefType or a Decltype, - * in which case the result will be type which results from (possibly recursively) resolving typedefs. + * The result of this predicate will be the type itself, except in the case of a TypedefType, a Decltype, + * or a TypeofType, in which case the result will be type which results from (possibly recursively) + * resolving typedefs. */ pragma[nomagic] Type getUnderlyingType() { result = this } @@ -1117,18 +1118,20 @@ class DerivedType extends Type, @derivedtype { * decltype(a) b; * ``` */ -class Decltype extends Type, @decltype { +class Decltype extends Type { + Decltype() { decltypes(underlyingElement(this), _, 0, _, _) } + override string getAPrimaryQlClass() { result = "Decltype" } /** - * The expression whose type is being obtained by this decltype. + * Gets the expression whose type is being obtained by this decltype. */ - Expr getExpr() { decltypes(underlyingElement(this), unresolveElement(result), _, _) } + Expr getExpr() { decltypes(underlyingElement(this), unresolveElement(result), _, _, _) } /** - * The type immediately yielded by this decltype. + * Gets the type immediately yielded by this decltype. */ - Type getBaseType() { decltypes(underlyingElement(this), _, unresolveElement(result), _) } + Type getBaseType() { decltypes(underlyingElement(this), _, _, unresolveElement(result), _) } /** * Whether an extra pair of parentheses around the expression would change the semantics of this decltype. @@ -1142,7 +1145,7 @@ class Decltype extends Type, @decltype { * ``` * Please consult the C++11 standard for more details. */ - predicate parenthesesWouldChangeMeaning() { decltypes(underlyingElement(this), _, _, true) } + predicate parenthesesWouldChangeMeaning() { decltypes(underlyingElement(this), _, _, _, true) } override Type getUnderlyingType() { result = this.getBaseType().getUnderlyingType() } @@ -1183,6 +1186,215 @@ class Decltype extends Type, @decltype { } } +/** + * An instance of the C23 `typeof` or `typeof_unqual` operator. For example: + * ``` + * int a; + * typeof(a) b; + * * typeof_unqual(const int) b; + * ``` + */ +class TypeofType extends Type { + TypeofType() { + decltypes(underlyingElement(this), _, 1, _, _) or + type_operators(underlyingElement(this), _, 0, _) + } + + /** + * Gets the type immediately yielded by this typeof. + */ + Type getBaseType() { + decltypes(underlyingElement(this), _, _, unresolveElement(result), _) + or + type_operators(underlyingElement(this), _, _, unresolveElement(result)) + } + + override Type getUnderlyingType() { result = this.getBaseType().getUnderlyingType() } + + override Type stripTopLevelSpecifiers() { result = this.getBaseType().stripTopLevelSpecifiers() } + + override Type stripType() { result = this.getBaseType().stripType() } + + override Type resolveTypedefs() { result = this.getBaseType().resolveTypedefs() } + + override string toString() { result = "typeof(...)" } + + override string getName() { none() } + + override int getSize() { result = this.getBaseType().getSize() } + + override int getAlignment() { result = this.getBaseType().getAlignment() } + + override int getPointerIndirectionLevel() { + result = this.getBaseType().getPointerIndirectionLevel() + } + + override string explain() { + result = "typeof resulting in {" + this.getBaseType().explain() + "}" + } + + override predicate involvesReference() { this.getBaseType().involvesReference() } + + override predicate involvesTemplateParameter() { this.getBaseType().involvesTemplateParameter() } + + override predicate isDeeplyConst() { this.getBaseType().isDeeplyConst() } + + override predicate isDeeplyConstBelow() { this.getBaseType().isDeeplyConstBelow() } + + override Specifier internal_getAnAdditionalSpecifier() { + result = this.getBaseType().getASpecifier() + } +} + +/** + * An instance of the C23 `typeof` or `typeof_unqual` operator taking an expression + * as its argument. For example: + * ``` + * int a; + * typeof(a) b; + * ``` + */ +class TypeofExprType extends TypeofType { + TypeofExprType() { decltypes(underlyingElement(this), _, 1, _, _) } + + override string getAPrimaryQlClass() { result = "TypeofExprType" } + + /** + * Gets the expression whose type is being obtained by this typeof. + */ + Expr getExpr() { decltypes(underlyingElement(this), unresolveElement(result), _, _, _) } + + override Location getLocation() { result = this.getExpr().getLocation() } +} + +/** + * A type obtained by C23 `typeof` or `typeof_unqual` operator taking a type as its + * argument. For example: + * ``` + * typeof_unqual(const int) b; + * ``` + */ +class TypeofTypeType extends TypeofType { + TypeofTypeType() { type_operators(underlyingElement(this), _, 0, _) } + + /** + * Gets the expression whose type is being obtained by this typeof. + */ + Type getType() { type_operators(underlyingElement(this), unresolveElement(result), _, _) } + + override string getAPrimaryQlClass() { result = "TypeofTypeType" } + + override string toString() { result = "typeof(...)" } +} + +/** + * A type obtained by applying a type transforming intrinsic. For example: + * ``` + * __make_unsigned(int) x; + * ``` + */ +class IntrinsicTransformedType extends Type { + int intrinsic; + + IntrinsicTransformedType() { + type_operators(underlyingElement(this), _, intrinsic, _) and + intrinsic in [1 .. 19] + } + + override string getAPrimaryQlClass() { result = "IntrinsicTransformedType" } + + override string toString() { result = this.getIntrinsicName() + "(...)" } + + /** + * Gets the type immediately yielded by this transformation. + */ + Type getBaseType() { type_operators(underlyingElement(this), _, _, unresolveElement(result)) } + + /** + * Gets the type that is transformed. + */ + Type getType() { type_operators(underlyingElement(this), unresolveElement(result), _, _) } + + /** + * Gets the name of the intrinsic used to transform the type. + */ + string getIntrinsicName() { + intrinsic = 1 and result = "__underlying_type" + or + intrinsic = 2 and result = "__bases" + or + intrinsic = 3 and result = "__direct_bases" + or + intrinsic = 4 and result = "__add_lvalue_reference" + or + intrinsic = 5 and result = "__add_pointer" + or + intrinsic = 6 and result = "__add_rvalue_reference" + or + intrinsic = 7 and result = "__decay" + or + intrinsic = 8 and result = "__make_signed" + or + intrinsic = 9 and result = "__make_unsigned" + or + intrinsic = 10 and result = "__remove_all_extents" + or + intrinsic = 11 and result = "__remove_const" + or + intrinsic = 12 and result = "__remove_cv" + or + intrinsic = 13 and result = "__remove_cvref" + or + intrinsic = 14 and result = "__remove_extent" + or + intrinsic = 15 and result = "__remove_pointer" + or + intrinsic = 16 and result = "__remove_reference_t" + or + intrinsic = 17 and result = "__remove_restrict" + or + intrinsic = 18 and result = "__remove_volatile" + or + intrinsic = 19 and result = "__remove_reference" + } + + override Type getUnderlyingType() { result = this.getBaseType().getUnderlyingType() } + + override Type stripTopLevelSpecifiers() { result = this.getBaseType().stripTopLevelSpecifiers() } + + override Type stripType() { result = this.getBaseType().stripType() } + + override Type resolveTypedefs() { result = this.getBaseType().resolveTypedefs() } + + override string getName() { none() } + + override int getSize() { result = this.getBaseType().getSize() } + + override int getAlignment() { result = this.getBaseType().getAlignment() } + + override int getPointerIndirectionLevel() { + result = this.getBaseType().getPointerIndirectionLevel() + } + + override string explain() { + result = + "application of " + this.getIntrinsicName() + " resulting in {" + this.getBaseType().explain() + + "}" + } + + override predicate involvesReference() { this.getBaseType().involvesReference() } + + override predicate involvesTemplateParameter() { this.getBaseType().involvesTemplateParameter() } + + override predicate isDeeplyConst() { this.getBaseType().isDeeplyConst() } + + override predicate isDeeplyConstBelow() { this.getBaseType().isDeeplyConstBelow() } + + override Specifier internal_getAnAdditionalSpecifier() { + result = this.getBaseType().getASpecifier() + } +} + /** * A C/C++ pointer type. See 4.9.1. * ``` diff --git a/cpp/ql/lib/semmle/code/cpp/exprs/Expr.qll b/cpp/ql/lib/semmle/code/cpp/exprs/Expr.qll index 8ae182394186..2b9fb2649d51 100644 --- a/cpp/ql/lib/semmle/code/cpp/exprs/Expr.qll +++ b/cpp/ql/lib/semmle/code/cpp/exprs/Expr.qll @@ -310,6 +310,8 @@ class Expr extends StmtParent, @expr { or exists(Decltype d | d.getExpr() = this.getParentWithConversions*()) or + exists(TypeofExprType t | t.getExpr() = this.getParentWithConversions*()) + or exists(ConstexprIfStmt constIf | constIf.getControllingExpr() = this.getParentWithConversions*() ) diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/SideEffects.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/SideEffects.qll index 187cde6e700e..1b63322610a1 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/SideEffects.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/SideEffects.qll @@ -16,6 +16,10 @@ private predicate isDeeplyConst(Type t) { or isDeeplyConst(t.(Decltype).getBaseType()) or + isDeeplyConst(t.(TypeofType).getBaseType()) + or + isDeeplyConst(t.(IntrinsicTransformedType).getBaseType()) + or isDeeplyConst(t.(ReferenceType).getBaseType()) or exists(SpecifiedType specType | specType = t | @@ -36,6 +40,10 @@ private predicate isDeeplyConstBelow(Type t) { or isDeeplyConstBelow(t.(Decltype).getBaseType()) or + isDeeplyConstBelow(t.(TypeofType).getBaseType()) + or + isDeeplyConstBelow(t.(IntrinsicTransformedType).getBaseType()) + or isDeeplyConst(t.(PointerType).getBaseType()) or isDeeplyConst(t.(ReferenceType).getBaseType()) diff --git a/cpp/ql/lib/semmlecode.cpp.dbscheme b/cpp/ql/lib/semmlecode.cpp.dbscheme index e594389175c0..45f9d92df0bd 100644 --- a/cpp/ql/lib/semmlecode.cpp.dbscheme +++ b/cpp/ql/lib/semmlecode.cpp.dbscheme @@ -743,15 +743,17 @@ typedefbase( ); /** - * An instance of the C++11 `decltype` operator. For example: + * An instance of the C++11 `decltype` operator or C23 `typeof`/`typeof_unqual` + * operator taking an expression as its argument. For example: * ``` * int a; * decltype(1+a) b; + * typeof(1+a) c; * ``` * Here `expr` is `1+a`. * * Sometimes an additional pair of parentheses around the expression - * would change the semantics of this decltype, e.g. + * changes the semantics of the decltype, e.g. * ``` * struct A { double x; }; * const A* a = new A(); @@ -761,14 +763,55 @@ typedefbase( * (Please consult the C++11 standard for more details). * `parentheses_would_change_meaning` is `true` iff that is the case. */ + +/* +case @decltype.kind of +| 0 = @decltype +| 1 = @typeof // The frontend does not differentiate between typeof and typeof_unqual +; +*/ + #keyset[id, expr] decltypes( int id: @decltype, int expr: @expr ref, + int kind: int ref, int base_type: @type ref, boolean parentheses_would_change_meaning: boolean ref ); +/* +case @type_operator.kind of +| 0 = @typeof // The frontend does not differentiate between typeof and typeof_unqual +| 1 = @underlying_type +| 2 = @bases +| 3 = @direct_bases +| 4 = @add_lvalue_reference +| 5 = @add_pointer +| 6 = @add_rvalue_reference +| 7 = @decay +| 8 = @make_signed +| 9 = @make_unsigned +| 10 = @remove_all_extents +| 11 = @remove_const +| 12 = @remove_cv +| 13 = @remove_cvref +| 14 = @remove_extent +| 15 = @remove_pointer +| 16 = @remove_reference_t +| 17 = @remove_restrict +| 18 = @remove_volatile +| 19 = @remove_reference +; +*/ + +type_operators( + unique int id: @type_operator, + int arg_type: @type ref, + int kind: int ref, + int base_type: @type ref +) + /* case @usertype.kind of | 0 = @unknown_usertype @@ -1103,10 +1146,10 @@ stmtattributes( @type = @builtintype | @derivedtype | @usertype - /* TODO | @fixedpointtype */ | @routinetype | @ptrtomember - | @decltype; + | @decltype + | @type_operator; unspecifiedtype( unique int type_id: @type ref, diff --git a/cpp/ql/lib/semmlecode.cpp.dbscheme.stats b/cpp/ql/lib/semmlecode.cpp.dbscheme.stats index 5f0f15438374..3954092dcc9b 100644 --- a/cpp/ql/lib/semmlecode.cpp.dbscheme.stats +++ b/cpp/ql/lib/semmlecode.cpp.dbscheme.stats @@ -2,7 +2,7 @@ @compilation - 16215 + 16209 @externalDataElement @@ -18,63 +18,63 @@ @location_default - 31650404 + 31651342 @location_stmt - 5202910 + 5201798 @location_expr - 17958942 + 17955105 @diagnostic - 1591 + 1590 @file - 83639 + 83604 @folder - 15890 + 15884 @macro_expansion - 40298943 + 40282246 @other_macro_reference - 314182 + 313754 @function - 3356850 + 3352274 @fun_decl - 3388814 + 3384194 @var_decl - 6734234 + 6734165 @type_decl - 1890757 + 1889985 @namespace_decl - 425651 + 425664 @using_declaration - 333243 + 333104 @using_directive - 8162 + 8151 @using_enum_declaration @@ -82,27 +82,27 @@ @static_assert - 183983 + 183988 @parameter - 4798833 + 4792291 @membervariable - 1441780 + 1441823 @globalvariable - 425546 + 425544 @localvariable - 735324 + 735183 @enumconstant - 330365 + 330375 @errortype @@ -330,35 +330,35 @@ @pointer - 472799 + 472813 @type_with_specifiers - 725883 + 725905 @array - 95663 + 95666 @routineptr - 862680 + 861504 @reference - 1024847 + 1024878 @gnu_vector - 867 + 866 @routinereference - 472 + 471 @rvalue_reference - 292102 + 292111 @block @@ -366,35 +366,39 @@ @decltype - 22068 + 102046 + + + @type_operator + 8530 @usertype - 4992117 + 4985358 @mangledname - 5808009 + 5807374 @type_mention - 5507865 + 5508028 @concept_template - 3874 + 3873 @routinetype - 762063 + 761024 @ptrtomember - 12083 + 12078 @specifier - 7131 + 8342 @gnuattribute @@ -402,11 +406,11 @@ @stdattribute - 346325 + 346335 @declspec - 326925 + 326934 @msattribute @@ -418,11 +422,11 @@ @attribute_arg_token - 21051 + 21022 @attribute_arg_constant_expr - 89599 + 89386 @attribute_arg_expr @@ -442,19 +446,19 @@ @derivation - 599880 + 599063 @frienddecl - 883302 + 882098 @comment - 11290145 + 11290480 @namespace - 11095 + 11090 @specialnamequalifyingelement @@ -462,147 +466,147 @@ @namequalifier - 3258064 + 3257061 @value - 14099266 + 13198558 @initialiser - 2336673 + 2336742 @address_of - 595215 + 595216 @indirect - 399728 + 402982 @array_to_pointer - 1951449 + 1948139 @parexpr - 4895384 + 4901079 @arithnegexpr - 585843 + 584849 @unaryplusexpr - 4125 + 4124 @complementexpr - 38095 + 38088 @notexpr - 381104 + 357996 @postincrexpr - 84817 + 84819 @postdecrexpr - 57327 + 57229 @preincrexpr - 96451 + 96430 @predecrexpr - 35723 + 35716 @conditionalexpr - 896445 + 895301 @addexpr - 636624 + 569732 @subexpr - 466249 + 465458 @mulexpr - 487054 + 434352 @divexpr - 60351 + 60326 @remexpr - 19891 + 19864 @paddexpr - 118344 + 118323 @psubexpr - 68214 + 68216 @pdiffexpr - 46015 + 46016 @lshiftexpr - 610849 + 550128 @rshiftexpr - 223512 + 199984 @andexpr - 536666 + 479850 @orexpr - 218106 + 193504 @xorexpr - 74057 + 74060 @eqexpr - 641622 + 641485 @neexpr - 411385 + 410687 @gtexpr - 110847 + 110823 @ltexpr - 139049 + 139020 @geexpr - 80994 + 80996 @leexpr - 291234 + 291183 @assignexpr - 1277660 + 1277387 @assignaddexpr @@ -610,15 +614,15 @@ @assignsubexpr - 15266 + 15262 @assignmulexpr - 14129 + 14123 @assigndivexpr - 6826 + 6827 @assignremexpr @@ -634,19 +638,19 @@ @assignandexpr - 6661 + 6509 @assignorexpr - 21379 + 19572 @assignxorexpr - 29827 + 29822 @assignpaddexpr - 18577 + 18573 @assignpsubexpr @@ -654,23 +658,23 @@ @andlogicalexpr - 345646 + 345572 @orlogicalexpr - 1203319 + 1101613 @commaexpr - 167780 + 167785 @subscriptexpr - 433959 + 433866 @callexpr - 302410 + 301955 @vastartexpr @@ -678,7 +682,7 @@ @vaargexpr - 1300 + 1299 @vaendexpr @@ -690,39 +694,39 @@ @varaccess - 8226118 + 8230420 @runtime_sizeof - 397856 + 400616 @runtime_alignof - 61478 + 61395 @expr_stmt - 159816 + 147937 @routineexpr - 6144464 + 6142595 @type_operand - 1532455 + 1402930 @offsetofexpr - 167297 + 148600 @typescompexpr - 765413 + 700719 @literal - 6101418 + 6101434 @aggregateliteral @@ -730,27 +734,27 @@ @c_style_cast - 6024777 + 6024780 @temp_init - 1075849 + 1076397 @errorexpr - 57612 + 57533 @reference_to - 2194465 + 2191474 @ref_indirect - 2657383 + 2653760 @vacuous_destructor_call - 9881 + 9867 @assume @@ -806,23 +810,23 @@ @thisaccess - 1525361 + 1525407 @new_expr - 58256 + 58177 @delete_expr - 14478 + 14458 @throw_expr - 26214 + 26250 @condition_decl - 438290 + 438155 @braced_init_list @@ -830,11 +834,11 @@ @type_id - 60404 + 60322 @sizeof_pack - 2191 + 2188 @hasassignexpr @@ -918,7 +922,7 @@ @hastrivialdestructor - 558 + 557 @uuidof @@ -926,7 +930,7 @@ @delete_array_expr - 1598 + 1597 @new_array_expr @@ -934,19 +938,19 @@ @foldexpr - 1374 + 1372 @ctordirectinit - 142247 + 142053 @ctorvirtualinit - 5069 + 5062 @ctorfieldinit - 259362 + 259009 @ctordelegatinginit @@ -954,39 +958,39 @@ @dtordirectdestruct - 49707 + 49639 @dtorvirtualdestruct - 5026 + 5019 @dtorfielddestruct - 50222 + 50154 @static_cast - 335478 + 335393 @reinterpret_cast - 43189 + 43191 @const_cast - 47226 + 47227 @dynamic_cast - 1016 + 1015 @lambdaexpr - 17829 + 17805 @param_ref - 177918 + 177913 @noopexpr @@ -1014,11 +1018,11 @@ @isnothrowassignableexpr - 5381 + 5382 @istrivialexpr - 830 + 829 @isstandardlayoutexpr @@ -1050,7 +1054,7 @@ @isnothrowconstructibleexpr - 18567 + 18568 @hasfinalizerexpr @@ -1086,11 +1090,11 @@ @isfinalexpr - 1718 + 1716 @noexceptexpr - 30759 + 30758 @builtinshufflevector @@ -1098,7 +1102,7 @@ @builtinchooseexpr - 9758 + 20636 @builtinaddressof @@ -1142,7 +1146,7 @@ @builtinbitcast - 149 + 148 @builtinshuffle @@ -1154,7 +1158,7 @@ @issame - 4866 + 4864 @isfunction @@ -1262,7 +1266,7 @@ @reuseexpr - 907876 + 907596 @istriviallycopyassignable @@ -1358,11 +1362,11 @@ @c11_generic - 2901 + 30031 @requires_expr - 17688 + 17683 @nested_requirement @@ -1370,11 +1374,11 @@ @compound_requirement - 11738 + 11734 @concept_id - 96929 + 96899 @lambdacapture @@ -1382,71 +1386,71 @@ @stmt_expr - 2026088 + 2025655 @stmt_if - 987521 + 987310 @stmt_while - 39540 + 39531 @stmt_goto - 151172 + 151145 @stmt_label - 72506 + 72493 @stmt_return - 1515834 + 1513768 @stmt_block - 1897791 + 1897848 @stmt_end_test_while - 258278 + 232977 @stmt_for - 84159 + 84141 @stmt_switch_case - 896207 + 895931 @stmt_switch - 441450 + 441314 @stmt_asm - 72114 + 64016 @stmt_decl - 770893 + 770572 @stmt_empty - 460245 + 460103 @stmt_continue - 30631 + 28042 @stmt_break - 140999 + 141003 @stmt_try_block - 29027 + 29057 @stmt_microsoft_try @@ -1462,19 +1466,19 @@ @stmt_assigned_goto - 12392 + 12390 @stmt_range_based_for - 7432 + 7422 @stmt_handler - 47521 + 47512 @stmt_constexpr_if - 72386 + 72388 @stmt_co_return @@ -1490,43 +1494,43 @@ @ppd_if - 511549 + 511564 @ppd_ifdef - 227250 + 227257 @ppd_ifndef - 154178 + 154182 @ppd_elif - 28110 + 28098 @ppd_else - 241109 + 241116 @ppd_endif - 846303 + 846328 @ppd_plain_include - 401967 + 401800 @ppd_define - 3130381 + 3130473 @ppd_undef - 93375 + 93378 @ppd_pragma - 405256 + 405268 @ppd_include_next @@ -1534,7 +1538,7 @@ @ppd_line - 19068 + 19065 @ppd_error @@ -1558,11 +1562,11 @@ @ppd_warning - 6 + 13 @link_target - 948 + 947 @xmldtd @@ -1592,11 +1596,11 @@ compilations - 16215 + 16209 id - 16215 + 16209 cwd @@ -1614,7 +1618,7 @@ 1 2 - 16215 + 16209 @@ -1640,19 +1644,19 @@ compilation_args - 1298224 + 1297685 id - 16215 + 16209 num - 1883 + 1882 arg - 37538 + 37523 @@ -1676,22 +1680,22 @@ 43 44 - 921 + 920 44 45 - 650 + 649 45 51 - 1219 + 1218 51 70 - 623 + 622 71 @@ -1711,7 +1715,7 @@ 98 99 - 1720 + 1719 100 @@ -1721,17 +1725,17 @@ 103 104 - 2560 + 2559 104 119 - 1368 + 1367 120 138 - 1192 + 1191 139 @@ -1757,7 +1761,7 @@ 38 39 - 1923 + 1922 39 @@ -1767,12 +1771,12 @@ 40 42 - 1395 + 1394 42 53 - 772 + 771 53 @@ -1797,7 +1801,7 @@ 68 70 - 1246 + 1245 70 @@ -1807,12 +1811,12 @@ 73 79 - 1219 + 1218 79 89 - 1449 + 1448 89 @@ -1838,7 +1842,7 @@ 90 108 - 149 + 148 108 @@ -1848,7 +1852,7 @@ 198 422 - 149 + 148 422 @@ -1863,17 +1867,17 @@ 605 749 - 149 + 148 750 778 - 149 + 148 781 883 - 149 + 148 930 @@ -1904,7 +1908,7 @@ 5 7 - 149 + 148 9 @@ -1914,7 +1918,7 @@ 12 15 - 149 + 148 15 @@ -1924,7 +1928,7 @@ 18 22 - 149 + 148 22 @@ -1939,7 +1943,7 @@ 29 34 - 149 + 148 34 @@ -1949,17 +1953,17 @@ 45 63 - 149 + 148 67 94 - 149 + 148 94 164 - 149 + 148 171 @@ -1980,17 +1984,17 @@ 1 2 - 17191 + 17184 2 3 - 16269 + 16263 3 103 - 2817 + 2816 104 @@ -2011,17 +2015,17 @@ 1 2 - 24858 + 24848 2 3 - 11189 + 11185 3 62 - 1490 + 1489 @@ -2031,11 +2035,11 @@ compilation_build_mode - 16215 + 16209 id - 16215 + 16209 mode @@ -2053,7 +2057,7 @@ 1 2 - 16215 + 16209 @@ -2079,11 +2083,11 @@ compilation_compiling_files - 16215 + 16209 id - 16215 + 16209 num @@ -2091,7 +2095,7 @@ file - 7423 + 7420 @@ -2105,7 +2109,7 @@ 1 2 - 16215 + 16209 @@ -2121,7 +2125,7 @@ 1 2 - 16215 + 16209 @@ -2174,7 +2178,7 @@ 2 3 - 7220 + 7217 28 @@ -2195,7 +2199,7 @@ 1 2 - 7423 + 7420 @@ -2205,11 +2209,11 @@ compilation_time - 64592 + 64565 id - 16148 + 16141 num @@ -2221,7 +2225,7 @@ seconds - 17489 + 17752 @@ -2235,7 +2239,7 @@ 1 2 - 16148 + 16141 @@ -2251,7 +2255,7 @@ 4 5 - 16148 + 16141 @@ -2267,17 +2271,17 @@ 2 3 - 203 + 135 3 4 - 8277 + 8300 4 5 - 7667 + 7705 @@ -2323,8 +2327,8 @@ 12 - 1291 - 1292 + 1311 + 1312 13 @@ -2376,18 +2380,18 @@ 13 - 11 - 12 + 12 + 13 13 - 714 - 715 + 727 + 728 13 - 787 - 788 + 770 + 771 13 @@ -2404,27 +2408,27 @@ 1 2 - 10891 + 11415 2 3 - 3806 + 3629 3 4 - 1463 + 1272 4 - 662 - 1314 + 33 + 1340 - 689 + 37 690 - 13 + 94 @@ -2440,7 +2444,7 @@ 1 2 - 17489 + 17752 @@ -2456,17 +2460,17 @@ 1 2 - 14414 + 14990 2 3 - 3048 + 2721 3 - 5 - 27 + 4 + 40 @@ -2476,11 +2480,11 @@ diagnostic_for - 4450 + 4449 diagnostic - 1591 + 1590 compilation @@ -2506,7 +2510,7 @@ 1 2 - 1545 + 1544 63 @@ -2527,7 +2531,7 @@ 1 2 - 1591 + 1590 @@ -2543,7 +2547,7 @@ 1 2 - 1591 + 1590 @@ -2722,15 +2726,15 @@ compilation_finished - 16215 + 16209 id - 16215 + 16209 cpu_seconds - 11921 + 11929 elapsed_seconds @@ -2748,7 +2752,7 @@ 1 2 - 16215 + 16209 @@ -2764,7 +2768,7 @@ 1 2 - 16215 + 16209 @@ -2780,17 +2784,17 @@ 1 2 - 9916 + 9790 2 3 - 1354 + 1530 3 - 42 - 650 + 23 + 609 @@ -2806,12 +2810,12 @@ 1 2 - 11054 + 11022 2 3 - 867 + 907 @@ -2840,53 +2844,58 @@ 13 - 7 - 8 + 8 + 9 13 9 10 + 13 + + + 11 + 12 27 - 10 - 11 + 16 + 17 13 - 20 - 21 - 27 + 17 + 18 + 13 - 24 - 25 + 25 + 26 13 - 46 - 47 + 42 + 43 13 - 128 - 129 + 139 + 140 13 - 275 - 276 + 269 + 270 13 - 306 - 307 + 296 + 297 13 - 331 - 332 + 342 + 343 13 @@ -2916,48 +2925,58 @@ 13 - 7 - 8 + 8 + 9 13 9 10 - 40 + 13 - 20 - 21 + 11 + 12 27 - 24 - 25 + 16 + 17 13 - 46 - 47 + 17 + 18 13 - 122 - 123 + 25 + 26 13 - 166 - 167 + 41 + 42 13 - 248 - 249 + 134 + 135 13 - 252 - 253 + 177 + 178 + 13 + + + 243 + 244 + 13 + + + 244 + 245 13 @@ -4730,31 +4749,31 @@ locations_default - 31650404 + 31651342 id - 31650404 + 31651342 container - 41844 + 41845 startLine - 7709299 + 7709528 startColumn - 22469 + 22470 endLine - 7708627 + 7708855 endColumn - 56240 + 56242 @@ -4768,7 +4787,7 @@ 1 2 - 31650404 + 31651342 @@ -4784,7 +4803,7 @@ 1 2 - 31650404 + 31651342 @@ -4800,7 +4819,7 @@ 1 2 - 31650404 + 31651342 @@ -4816,7 +4835,7 @@ 1 2 - 31650404 + 31651342 @@ -4832,7 +4851,7 @@ 1 2 - 31650404 + 31651342 @@ -4908,7 +4927,7 @@ 2212 55160 - 2690 + 2691 @@ -5233,27 +5252,27 @@ 1 2 - 5187073 + 5187227 2 3 - 787640 + 787664 3 4 - 633853 + 633871 4 10 - 618380 + 618398 10 414 - 482352 + 482366 @@ -5269,27 +5288,27 @@ 1 2 - 5247619 + 5247775 2 3 - 1198817 + 1198853 3 5 - 636005 + 636024 5 54 - 579764 + 579782 54 312 - 47091 + 47093 @@ -5305,27 +5324,27 @@ 1 2 - 5929506 + 5929681 2 3 - 579495 + 579513 3 5 - 581379 + 581396 5 42 - 579495 + 579513 42 71 - 39422 + 39423 @@ -5341,12 +5360,12 @@ 1 2 - 7561432 + 7558830 2 82 - 147867 + 150697 @@ -5362,27 +5381,27 @@ 1 2 - 5256096 + 5256252 2 3 - 764364 + 764386 3 4 - 626991 + 627009 4 10 - 600619 + 600637 10 225 - 461228 + 461242 @@ -5685,7 +5704,7 @@ 2521 - 56781 + 56782 807 @@ -5778,27 +5797,27 @@ 1 2 - 5183440 + 5183594 2 3 - 792888 + 792777 3 4 - 630623 + 630911 4 9 - 579630 + 579513 9 412 - 522044 + 522059 @@ -5814,27 +5833,27 @@ 1 2 - 5242910 + 5243065 2 3 - 1200970 + 1201006 3 5 - 638831 + 638850 5 54 - 579495 + 579647 54 312 - 46418 + 46285 @@ -5850,12 +5869,12 @@ 1 2 - 7548112 + 7545510 2 7 - 160515 + 163345 @@ -5871,27 +5890,27 @@ 1 2 - 5929640 + 5929816 2 3 - 579092 + 578974 3 5 - 581379 + 581531 5 42 - 578957 + 578974 42 71 - 39556 + 39558 @@ -5907,27 +5926,27 @@ 1 2 - 5253136 + 5253291 2 3 - 768938 + 768826 3 4 - 623761 + 624049 4 10 - 600619 + 600503 10 225 - 462170 + 462184 @@ -5943,7 +5962,7 @@ 1 2 - 15203 + 15204 2 @@ -6009,7 +6028,7 @@ 1 2 - 17356 + 17357 2 @@ -6029,7 +6048,7 @@ 6 8 - 4170 + 4171 8 @@ -6181,7 +6200,7 @@ 60 69 - 4170 + 4171 @@ -6257,19 +6276,19 @@ locations_stmt - 5202910 + 5201798 id - 5202910 + 5201798 container - 4153 + 4152 startLine - 272852 + 272793 startColumn @@ -6277,11 +6296,11 @@ endLine - 265022 + 264966 endColumn - 3227 + 3226 @@ -6295,7 +6314,7 @@ 1 2 - 5202910 + 5201798 @@ -6311,7 +6330,7 @@ 1 2 - 5202910 + 5201798 @@ -6327,7 +6346,7 @@ 1 2 - 5202910 + 5201798 @@ -6343,7 +6362,7 @@ 1 2 - 5202910 + 5201798 @@ -6359,7 +6378,7 @@ 1 2 - 5202910 + 5201798 @@ -6760,67 +6779,67 @@ 1 2 - 29409 + 29403 2 3 - 20878 + 20874 3 4 - 17033 + 17030 4 6 - 19727 + 19723 6 8 - 17090 + 17086 8 11 - 22814 + 22809 11 16 - 23572 + 23567 16 22 - 20934 + 20930 22 29 - 23235 + 23230 29 37 - 23684 + 23679 37 45 - 20625 + 20621 45 56 - 22141 + 22136 56 73 - 11702 + 11699 @@ -6836,67 +6855,67 @@ 1 2 - 30447 + 30441 2 3 - 21467 + 21463 3 4 - 17314 + 17310 4 6 - 19643 + 19639 6 8 - 17370 + 17367 8 11 - 23993 + 23988 11 16 - 22337 + 22333 16 22 - 22141 + 22136 22 29 - 23151 + 23146 29 36 - 21860 + 21856 36 44 - 22309 + 22304 44 54 - 21664 + 21659 54 68 - 9148 + 9146 @@ -6912,57 +6931,57 @@ 1 2 - 36621 + 36613 2 3 - 28455 + 28449 3 4 - 22955 + 22950 4 5 - 21972 + 21968 5 6 - 23797 + 23791 6 7 - 27108 + 27102 7 8 - 31065 + 31058 8 9 - 27894 + 27888 9 10 - 20429 + 20425 10 12 - 22702 + 22697 12 18 - 9849 + 9847 @@ -6978,67 +6997,67 @@ 1 2 - 47229 + 47219 2 3 - 35218 + 35210 3 4 - 25172 + 25166 4 5 - 22113 + 22108 5 6 - 17454 + 17451 6 7 - 16472 + 16469 7 8 - 13919 + 13916 8 9 - 15069 + 15066 9 10 - 14732 + 14729 10 11 - 14396 + 14393 11 12 - 13862 + 13859 12 14 - 21580 + 21575 14 24 - 15630 + 15627 @@ -7054,62 +7073,62 @@ 1 2 - 30223 + 30216 2 3 - 22113 + 22108 3 4 - 17679 + 17675 4 6 - 21944 + 21940 6 8 - 20064 + 20060 8 10 - 18016 + 18012 10 14 - 24947 + 24942 14 18 - 23235 + 23230 18 22 - 24077 + 24072 22 26 - 25228 + 25222 26 30 - 22534 + 22529 30 36 - 20682 + 20677 36 @@ -7500,67 +7519,67 @@ 1 2 - 23768 + 23763 2 3 - 19671 + 19667 3 4 - 15686 + 15683 4 6 - 21299 + 21294 6 8 - 17062 + 17058 8 11 - 21103 + 21098 11 15 - 20008 + 20004 15 21 - 21944 + 21940 21 27 - 21074 + 21070 27 34 - 20373 + 20369 34 42 - 21552 + 21547 42 51 - 19924 + 19920 51 68 - 20261 + 20256 68 @@ -7581,62 +7600,62 @@ 1 2 - 34067 + 34060 2 3 - 22029 + 22024 3 4 - 17426 + 17423 4 6 - 21383 + 21379 6 8 - 20485 + 20481 8 11 - 21692 + 21687 11 16 - 23797 + 23791 16 20 - 19924 + 19920 20 26 - 23432 + 23427 26 32 - 22225 + 22220 32 39 - 20457 + 20453 39 58 - 18100 + 18096 @@ -7652,62 +7671,62 @@ 1 2 - 44338 + 44329 2 3 - 32412 + 32405 3 4 - 25200 + 25194 4 5 - 20794 + 20789 5 6 - 18858 + 18854 6 7 - 15855 + 15851 7 8 - 16248 + 16244 8 9 - 14929 + 14926 9 10 - 13919 + 13916 10 12 - 24442 + 24437 12 15 - 24189 + 24184 15 100 - 13834 + 13831 @@ -7723,57 +7742,57 @@ 1 2 - 34067 + 34060 2 3 - 27838 + 27832 3 4 - 22983 + 22978 4 5 - 24330 + 24325 5 6 - 25340 + 25335 6 7 - 27950 + 27944 7 8 - 30616 + 30609 8 9 - 25593 + 25587 9 10 - 17623 + 17619 10 12 - 20457 + 20453 12 18 - 8222 + 8220 @@ -7789,67 +7808,67 @@ 1 2 - 33731 + 33723 2 3 - 22702 + 22697 3 4 - 17118 + 17114 4 6 - 24330 + 24325 6 8 - 20934 + 20930 8 10 - 17482 + 17479 10 13 - 19699 + 19695 13 16 - 20513 + 20509 16 19 - 20064 + 20060 19 22 - 18970 + 18966 22 26 - 23684 + 23679 26 31 - 20962 + 20958 31 39 - 4826 + 4825 @@ -8249,31 +8268,31 @@ locations_expr - 17958942 + 17955105 id - 17958942 + 17955105 container - 6342 + 6340 startLine - 262020 + 261964 startColumn - 3367 + 3366 endLine - 261992 + 261936 endColumn - 3816 + 3815 @@ -8287,7 +8306,7 @@ 1 2 - 17958942 + 17955105 @@ -8303,7 +8322,7 @@ 1 2 - 17958942 + 17955105 @@ -8319,7 +8338,7 @@ 1 2 - 17958942 + 17955105 @@ -8335,7 +8354,7 @@ 1 2 - 17958942 + 17955105 @@ -8351,7 +8370,7 @@ 1 2 - 17958942 + 17955105 @@ -8372,12 +8391,12 @@ 2 6 - 477 + 476 6 11 - 477 + 476 12 @@ -8387,47 +8406,47 @@ 27 87 - 477 + 476 95 514 - 477 + 476 525 1401 - 477 + 476 1526 2343 - 477 + 476 2404 3615 - 477 + 476 3668 5162 - 477 + 476 5341 7345 - 477 + 476 7399 9307 - 477 + 476 9382 16759 - 477 + 476 18811 @@ -8453,7 +8472,7 @@ 2 4 - 477 + 476 4 @@ -8468,42 +8487,42 @@ 20 66 - 477 + 476 67 162 - 477 + 476 166 362 - 477 + 476 376 591 - 477 + 476 593 929 - 477 + 476 960 1269 - 477 + 476 1291 1782 - 477 + 476 1851 2492 - 477 + 476 2594 @@ -8539,7 +8558,7 @@ 7 16 - 477 + 476 16 @@ -8549,7 +8568,7 @@ 36 59 - 477 + 476 59 @@ -8615,7 +8634,7 @@ 2 4 - 477 + 476 4 @@ -8630,42 +8649,42 @@ 20 68 - 477 + 476 68 163 - 477 + 476 166 362 - 477 + 476 376 592 - 477 + 476 593 931 - 477 + 476 960 1273 - 477 + 476 1292 1786 - 477 + 476 1855 2501 - 477 + 476 2593 @@ -8691,7 +8710,7 @@ 2 4 - 477 + 476 4 @@ -8701,17 +8720,17 @@ 7 15 - 477 + 476 15 36 - 477 + 476 36 62 - 477 + 476 62 @@ -8726,7 +8745,7 @@ 73 75 - 449 + 448 75 @@ -8741,12 +8760,12 @@ 77 79 - 477 + 476 79 84 - 477 + 476 84 @@ -8767,67 +8786,67 @@ 1 5 - 22001 + 21996 5 9 - 22506 + 22501 9 15 - 21888 + 21884 15 23 - 20625 + 20621 23 32 - 20682 + 20677 32 44 - 20485 + 20481 44 60 - 20148 + 20144 60 80 - 20289 + 20284 80 103 - 19952 + 19948 103 130 - 20092 + 20088 130 159 - 19896 + 19892 159 194 - 19952 + 19948 194 297 - 13498 + 13495 @@ -8843,62 +8862,62 @@ 1 2 - 32103 + 32096 2 3 - 21327 + 21322 3 4 - 15490 + 15487 4 6 - 22337 + 22333 6 8 - 18605 + 18601 8 11 - 22421 + 22417 11 16 - 23684 + 23679 16 21 - 22506 + 22501 21 28 - 22674 + 22669 28 35 - 21636 + 21631 35 43 - 21776 + 21771 43 61 - 17454 + 17451 @@ -8914,62 +8933,62 @@ 1 4 - 21804 + 21799 4 7 - 23937 + 23932 7 11 - 22786 + 22781 11 16 - 23768 + 23763 16 21 - 23909 + 23904 21 26 - 20569 + 20565 26 31 - 22085 + 22080 31 36 - 24105 + 24100 36 40 - 21467 + 21463 40 44 - 22618 + 22613 44 49 - 22758 + 22753 49 63 - 12207 + 12204 @@ -8985,27 +9004,27 @@ 1 2 - 138965 + 138936 2 3 - 61120 + 61107 3 4 - 37688 + 37679 4 6 - 19980 + 19976 6 23 - 4265 + 4264 @@ -9021,62 +9040,62 @@ 1 4 - 23151 + 23146 4 7 - 22730 + 22725 7 11 - 22421 + 22417 11 16 - 22141 + 22136 16 21 - 22450 + 22445 21 27 - 22870 + 22866 27 33 - 22478 + 22473 33 38 - 19756 + 19751 38 43 - 21299 + 21294 43 47 - 19952 + 19948 47 52 - 23039 + 23034 52 66 - 19671 + 19667 68 @@ -9173,7 +9192,7 @@ 1 2 - 449 + 448 2 @@ -9401,7 +9420,7 @@ 1 2 - 449 + 448 2 @@ -9477,67 +9496,67 @@ 1 5 - 22029 + 22024 5 9 - 22506 + 22501 9 15 - 21580 + 21575 15 23 - 20597 + 20593 23 32 - 21355 + 21351 32 44 - 20120 + 20116 44 60 - 19784 + 19779 60 80 - 20878 + 20874 80 103 - 19812 + 19807 103 130 - 20008 + 20004 130 159 - 19952 + 19948 159 193 - 19671 + 19667 193 296 - 13694 + 13691 @@ -9553,67 +9572,67 @@ 1 2 - 32103 + 32096 2 3 - 21243 + 21238 3 4 - 15490 + 15487 4 6 - 21916 + 21912 6 8 - 18409 + 18405 8 11 - 22506 + 22501 11 15 - 19784 + 19779 15 20 - 22814 + 22809 20 26 - 20457 + 20453 26 33 - 21916 + 21912 33 40 - 19896 + 19892 40 49 - 20036 + 20032 49 61 - 5416 + 5414 @@ -9629,27 +9648,27 @@ 1 2 - 130266 + 130238 2 3 - 68220 + 68205 3 4 - 40157 + 40148 4 6 - 21383 + 21379 6 11 - 1964 + 1963 @@ -9665,62 +9684,62 @@ 1 4 - 21608 + 21603 4 7 - 23825 + 23820 7 11 - 22506 + 22501 11 16 - 23684 + 23679 16 21 - 23628 + 23623 21 26 - 20682 + 20677 26 31 - 22281 + 22276 31 36 - 24077 + 24072 36 40 - 20878 + 20874 40 44 - 22590 + 22585 44 49 - 23151 + 23146 49 63 - 13077 + 13074 @@ -9736,62 +9755,62 @@ 1 4 - 23460 + 23455 4 7 - 22927 + 22922 7 11 - 22421 + 22417 11 16 - 23039 + 23034 16 21 - 21860 + 21856 21 26 - 19812 + 19807 26 32 - 22057 + 22052 32 38 - 23881 + 23876 38 43 - 22113 + 22108 43 47 - 19784 + 19779 47 52 - 22758 + 22753 52 69 - 17875 + 17872 @@ -9883,7 +9902,7 @@ 1 2 - 449 + 448 2 @@ -10176,19 +10195,19 @@ numlines - 860969 + 860994 element_id - 859623 + 859649 num_lines - 40095 + 40096 num_code - 35924 + 35925 num_comment @@ -10206,7 +10225,7 @@ 1 2 - 858278 + 858303 2 @@ -10227,7 +10246,7 @@ 1 2 - 858278 + 858303 2 @@ -10248,7 +10267,7 @@ 1 2 - 859354 + 859380 2 @@ -10269,7 +10288,7 @@ 1 2 - 26909 + 26910 2 @@ -10305,7 +10324,7 @@ 1 2 - 27178 + 27179 2 @@ -10382,7 +10401,7 @@ 1 2 - 23814 + 23815 2 @@ -10418,7 +10437,7 @@ 1 2 - 24083 + 24084 2 @@ -10433,7 +10452,7 @@ 5 8 - 2690 + 2691 8 @@ -10454,7 +10473,7 @@ 1 2 - 23949 + 23950 2 @@ -10607,11 +10626,11 @@ diagnostics - 1591 + 1590 id - 1591 + 1590 severity @@ -10645,7 +10664,7 @@ 1 2 - 1591 + 1590 @@ -10661,7 +10680,7 @@ 1 2 - 1591 + 1590 @@ -10677,7 +10696,7 @@ 1 2 - 1591 + 1590 @@ -10693,7 +10712,7 @@ 1 2 - 1591 + 1590 @@ -10709,7 +10728,7 @@ 1 2 - 1591 + 1590 @@ -11164,15 +11183,15 @@ files - 83639 + 83604 id - 83639 + 83604 name - 83639 + 83604 @@ -11186,7 +11205,7 @@ 1 2 - 83639 + 83604 @@ -11202,7 +11221,7 @@ 1 2 - 83639 + 83604 @@ -11212,15 +11231,15 @@ folders - 15890 + 15884 id - 15890 + 15884 name - 15890 + 15884 @@ -11234,7 +11253,7 @@ 1 2 - 15890 + 15884 @@ -11250,7 +11269,7 @@ 1 2 - 15890 + 15884 @@ -11260,15 +11279,15 @@ containerparent - 99502 + 99461 parent - 15890 + 15884 child - 99502 + 99461 @@ -11282,12 +11301,12 @@ 1 2 - 7735 + 7732 2 3 - 1950 + 1949 3 @@ -11302,7 +11321,7 @@ 6 10 - 1246 + 1245 10 @@ -11312,7 +11331,7 @@ 16 44 - 1192 + 1191 44 @@ -11333,7 +11352,7 @@ 1 2 - 99502 + 99461 @@ -11343,11 +11362,11 @@ fileannotations - 5387460 + 5385222 id - 7396 + 7393 kind @@ -11355,11 +11374,11 @@ name - 75307 + 75276 value - 50679 + 50658 @@ -11378,7 +11397,7 @@ 2 3 - 7139 + 7136 @@ -11424,7 +11443,7 @@ 480 549 - 325 + 324 550 @@ -11604,62 +11623,62 @@ 1 2 - 14143 + 14137 2 3 - 5594 + 5592 3 5 - 6489 + 6486 5 7 - 5256 + 5254 7 9 - 5892 + 5890 9 16 - 5554 + 5551 16 19 - 6272 + 6269 19 27 - 5459 + 5457 27 47 - 6204 + 6201 47 128 - 6312 + 6310 128 459 - 5933 + 5931 459 546 - 2194 + 2193 @@ -11675,7 +11694,7 @@ 1 2 - 75307 + 75276 @@ -11691,57 +11710,57 @@ 1 2 - 14861 + 14854 2 3 - 9862 + 9858 3 4 - 5256 + 5254 4 6 - 5215 + 5213 6 8 - 4389 + 4387 8 11 - 6082 + 6080 11 17 - 6922 + 6919 17 23 - 6028 + 6025 23 41 - 6001 + 5998 41 95 - 5730 + 5728 95 1726 - 4958 + 4956 @@ -11757,72 +11776,72 @@ 1 2 - 4307 + 4306 2 4 - 2099 + 2098 4 5 - 4091 + 4089 5 8 - 3156 + 3155 8 14 - 3806 + 3805 14 17 - 2479 + 2478 17 24 - 3901 + 3899 24 51 - 4538 + 4536 51 58 - 3887 + 3886 58 80 - 3820 + 3818 81 151 - 3955 + 3954 151 334 - 3820 + 3818 334 473 - 3847 + 3845 473 547 - 2966 + 2965 @@ -11838,7 +11857,7 @@ 1 2 - 50665 + 50644 2 @@ -11859,67 +11878,67 @@ 1 2 - 4362 + 4360 2 4 - 2452 + 2450 4 5 - 3915 + 3913 5 8 - 3183 + 3182 8 14 - 4470 + 4468 14 18 - 4429 + 4428 18 28 - 4104 + 4103 28 34 - 4037 + 4035 34 41 - 4104 + 4103 41 66 - 3833 + 3832 66 92 - 3942 + 3940 92 113 - 3833 + 3832 113 145 - 3887 + 3886 145 @@ -11934,15 +11953,15 @@ inmacroexpansion - 149742415 + 149563642 id - 24596921 + 24598527 inv - 3698101 + 3693136 @@ -11956,37 +11975,37 @@ 1 3 - 2167550 + 2201564 3 5 - 1469288 + 1470741 5 6 - 1617557 + 1615715 6 7 - 6574000 + 6563638 7 8 - 8708728 + 8693957 8 9 - 3552858 + 3546832 9 22 - 506936 + 506077 @@ -12002,57 +12021,57 @@ 1 2 - 529537 + 528641 2 3 - 743635 + 741073 3 4 - 479645 + 480129 4 7 - 273727 + 274512 7 8 - 282496 + 281342 8 9 - 329912 + 329298 9 10 - 2984 + 3037 10 11 - 443915 + 443373 11 337 - 306935 + 306914 339 423 - 281412 + 280946 423 7616 - 23899 + 23866 @@ -12062,15 +12081,15 @@ affectedbymacroexpansion - 48676789 + 48595858 id - 7035609 + 7024506 inv - 3798618 + 3792198 @@ -12084,37 +12103,37 @@ 1 2 - 3842147 + 3835660 2 3 - 764600 + 764104 3 4 - 361415 + 360802 4 5 - 771826 + 770517 5 12 - 534529 + 533623 12 50 - 555612 + 554669 50 9900 - 205477 + 205128 @@ -12130,67 +12149,67 @@ 1 4 - 312858 + 312348 4 7 - 316262 + 315698 7 9 - 300716 + 300223 9 12 - 342529 + 341953 12 13 - 455467 + 454694 13 14 - 225833 + 225450 14 15 - 407558 + 406866 15 16 - 166232 + 165951 16 17 - 377232 + 376593 17 18 - 200400 + 200060 18 20 - 343850 + 343266 20 25 - 285057 + 284573 25 - 109 - 64618 + 207 + 64516 @@ -12200,19 +12219,19 @@ macroinvocations - 40601028 + 40584205 id - 40601028 + 40584205 macro_id - 109906 + 109861 location - 1070092 + 1069648 kind @@ -12230,7 +12249,7 @@ 1 2 - 40601028 + 40584205 @@ -12246,7 +12265,7 @@ 1 2 - 40601028 + 40584205 @@ -12262,7 +12281,7 @@ 1 2 - 40601028 + 40584205 @@ -12278,52 +12297,52 @@ 1 2 - 23517 + 23507 2 3 - 20428 + 20420 3 4 - 7491 + 7488 4 6 - 10106 + 10101 6 11 - 9455 + 9451 11 21 - 9184 + 9181 21 48 - 8250 + 8246 48 145 - 8304 + 8300 145 952 - 8250 + 8246 954 175299 - 4917 + 4915 @@ -12339,37 +12358,37 @@ 1 2 - 60257 + 60232 2 3 - 13641 + 13636 3 4 - 6881 + 6879 4 6 - 8724 + 8720 6 13 - 9442 + 9438 13 67 - 8290 + 8287 67 4815 - 2668 + 2667 @@ -12385,12 +12404,12 @@ 1 2 - 101453 + 101411 2 3 - 8453 + 8449 @@ -12406,37 +12425,37 @@ 1 2 - 426609 + 426432 2 3 - 252746 + 252614 3 4 - 113185 + 113165 4 6 - 77475 + 77443 6 11 - 82758 + 82724 11 42 - 80455 + 80422 42 226288 - 36861 + 36846 @@ -12452,12 +12471,12 @@ 1 2 - 1009645 + 1009226 2 367 - 60446 + 60421 @@ -12473,7 +12492,7 @@ 1 2 - 1070092 + 1069648 @@ -12492,8 +12511,8 @@ 13 - 2974746 - 2974747 + 2974749 + 2974750 13 @@ -12546,15 +12565,15 @@ macroparent - 35810829 + 35795982 id - 35810829 + 35795982 parent_id - 28059915 + 28048287 @@ -12568,7 +12587,7 @@ 1 2 - 35810829 + 35795982 @@ -12584,17 +12603,17 @@ 1 2 - 21857859 + 21848807 2 3 - 5174257 + 5172108 3 91 - 1027798 + 1027371 @@ -12604,15 +12623,15 @@ macrolocationbind - 5543856 + 5543168 id - 3882187 + 3881795 location - 2758860 + 2758368 @@ -12626,22 +12645,22 @@ 1 2 - 3056762 + 3056517 2 3 - 469909 + 469825 3 7 - 314962 + 314905 7 57 - 40553 + 40546 @@ -12657,22 +12676,22 @@ 1 2 - 2198775 + 2198083 2 3 - 239730 + 239987 3 8 - 216594 + 216556 8 723 - 103759 + 103740 @@ -12682,19 +12701,19 @@ macro_argument_unexpanded - 103251986 + 103209086 invocation - 31225989 + 31213006 argument_index - 894 + 893 text - 440264 + 440081 @@ -12708,22 +12727,22 @@ 1 2 - 9979439 + 9975280 2 3 - 12505023 + 12499829 3 4 - 6395493 + 6392837 4 67 - 2346032 + 2345057 @@ -12739,22 +12758,22 @@ 1 2 - 10213680 + 10209425 2 3 - 12526522 + 12521320 3 4 - 6195580 + 6193007 4 67 - 2290205 + 2289253 @@ -12779,7 +12798,7 @@ 645273 - 2305009 + 2305008 40 @@ -12822,57 +12841,57 @@ 1 2 - 52020 + 51998 2 3 - 79995 + 79961 3 4 - 29681 + 29669 4 5 - 44447 + 44429 5 6 - 50218 + 50197 6 9 - 36590 + 36575 9 15 - 36847 + 36832 15 27 - 33515 + 33501 27 57 - 34124 + 34110 57 517 - 33244 + 33230 518 485091 - 9577 + 9573 @@ -12888,17 +12907,17 @@ 1 2 - 311893 + 311763 2 3 - 115271 + 115223 3 9 - 13099 + 13094 @@ -12908,19 +12927,19 @@ macro_argument_expanded - 103251986 + 103209086 invocation - 31225989 + 31213006 argument_index - 894 + 893 text - 266686 + 266575 @@ -12934,22 +12953,22 @@ 1 2 - 9979439 + 9975280 2 3 - 12505023 + 12499829 3 4 - 6395493 + 6392837 4 67 - 2346032 + 2345057 @@ -12965,22 +12984,22 @@ 1 2 - 13763081 + 13757351 2 3 - 10789713 + 10785232 3 4 - 5403974 + 5401729 4 9 - 1269220 + 1268693 @@ -13005,7 +13024,7 @@ 645273 - 2305009 + 2305008 40 @@ -13022,7 +13041,7 @@ 1 2 - 772 + 771 2 @@ -13048,57 +13067,57 @@ 1 2 - 28299 + 28287 2 3 - 35154 + 35139 3 4 - 58509 + 58485 4 5 - 20564 + 20555 5 6 - 3996 + 3994 6 7 - 23314 + 23304 7 10 - 21770 + 21761 10 19 - 22948 + 22939 19 51 - 20076 + 20068 51 253 - 20090 + 20081 254 990266 - 11962 + 11957 @@ -13114,17 +13133,17 @@ 1 2 - 134779 + 134723 2 3 - 114038 + 113991 3 66 - 17868 + 17861 @@ -13134,15 +13153,15 @@ functions - 3356850 + 3352274 id - 3356850 + 3352274 name - 466655 + 466019 kind @@ -13160,7 +13179,7 @@ 1 2 - 3356850 + 3352274 @@ -13176,7 +13195,7 @@ 1 2 - 3356850 + 3352274 @@ -13192,22 +13211,22 @@ 1 2 - 372696 + 372188 2 3 - 31834 + 31791 3 9 - 36045 + 35996 9 4916 - 26078 + 26042 @@ -13223,12 +13242,12 @@ 1 2 - 465409 + 464774 2 4 - 1245 + 1244 @@ -13340,15 +13359,15 @@ function_entry_point - 1438631 + 1436670 id - 1433905 + 1431951 entry_point - 1438631 + 1436670 @@ -13362,12 +13381,12 @@ 1 2 - 1429867 + 1427918 2 17 - 4038 + 4032 @@ -13383,7 +13402,7 @@ 1 2 - 1438631 + 1436670 @@ -13393,15 +13412,15 @@ function_return_type - 3363165 + 3358581 id - 3356850 + 3352274 return_type - 631801 + 630940 @@ -13415,12 +13434,12 @@ 1 2 - 3351050 + 3346482 2 5 - 5799 + 5791 @@ -13436,22 +13455,22 @@ 1 2 - 436968 + 436372 2 3 - 120423 + 120258 3 6 - 52070 + 51999 6 36283 - 22340 + 22309 @@ -13731,44 +13750,44 @@ purefunctions - 137885 + 137889 id - 137885 + 137889 function_deleted - 94415 + 94386 id - 94415 + 94386 function_defaulted - 55394 + 55377 id - 55394 + 55377 function_prototyped - 3352726 + 3348155 id - 3352726 + 3348155 @@ -13848,15 +13867,15 @@ member_function_this_type - 674420 + 673501 id - 674420 + 673501 this_type - 233542 + 233224 @@ -13870,7 +13889,7 @@ 1 2 - 674420 + 673501 @@ -13886,32 +13905,32 @@ 1 2 - 82831 + 82718 2 3 - 61135 + 61051 3 4 - 36517 + 36468 4 5 - 16927 + 16904 5 7 - 19204 + 19177 7 66 - 16927 + 16904 @@ -13921,27 +13940,27 @@ fun_decls - 3392723 + 3388098 id - 3388814 + 3384194 function - 3232260 + 3227853 type_id - 600783 + 599964 name - 462015 + 461385 location - 932365 + 931094 @@ -13955,7 +13974,7 @@ 1 2 - 3388814 + 3384194 @@ -13971,12 +13990,12 @@ 1 2 - 3385420 + 3380805 2 5 - 3394 + 3389 @@ -13992,7 +14011,7 @@ 1 2 - 3388814 + 3384194 @@ -14008,7 +14027,7 @@ 1 2 - 3388814 + 3384194 @@ -14024,12 +14043,12 @@ 1 2 - 3101869 + 3097641 2 7 - 130390 + 130212 @@ -14045,12 +14064,12 @@ 1 2 - 3221906 + 3217514 2 5 - 10353 + 10339 @@ -14066,7 +14085,7 @@ 1 2 - 3232260 + 3227853 @@ -14082,12 +14101,12 @@ 1 2 - 3146937 + 3142647 2 6 - 85322 + 85206 @@ -14103,22 +14122,22 @@ 1 2 - 397056 + 396515 2 3 - 127253 + 127080 3 6 - 53359 + 53286 6 37538 - 23113 + 23082 @@ -14134,22 +14153,22 @@ 1 2 - 415401 + 414835 2 3 - 112732 + 112579 3 6 - 52284 + 52213 6 35946 - 20364 + 20336 @@ -14165,22 +14184,22 @@ 1 2 - 472627 + 471982 2 3 - 73422 + 73322 3 7 - 45153 + 45091 7 3213 - 9580 + 9567 @@ -14196,22 +14215,22 @@ 1 2 - 441307 + 440705 2 3 - 90220 + 90097 3 6 - 51382 + 51312 6 7079 - 17872 + 17847 @@ -14227,27 +14246,27 @@ 1 2 - 347650 + 347176 2 3 - 37978 + 37926 3 6 - 37591 + 37540 6 110 - 34756 + 34709 110 4996 - 4038 + 4032 @@ -14263,22 +14282,22 @@ 1 2 - 369345 + 368842 2 3 - 32049 + 32006 3 9 - 35615 + 35567 9 4900 - 25003 + 24969 @@ -14294,12 +14313,12 @@ 1 2 - 427516 + 426933 2 3435 - 34498 + 34451 @@ -14315,22 +14334,22 @@ 1 2 - 355512 + 355027 2 3 - 50738 + 50669 3 6 - 35787 + 35738 6 1706 - 19977 + 19950 @@ -14346,22 +14365,22 @@ 1 2 - 736887 + 735882 2 3 - 90263 + 90140 3 13 - 70629 + 70533 13 1516 - 34584 + 34537 @@ -14377,22 +14396,22 @@ 1 2 - 777787 + 776727 2 4 - 73250 + 73150 4 66 - 71016 + 70919 66 1516 - 10310 + 10296 @@ -14408,17 +14427,17 @@ 1 2 - 854388 + 853224 2 19 - 70286 + 70190 19 1509 - 7690 + 7679 @@ -14434,12 +14453,12 @@ 1 2 - 884763 + 883557 2 10 - 47602 + 47537 @@ -14449,11 +14468,11 @@ fun_def - 1592178 + 1590008 id - 1592178 + 1590008 @@ -14482,15 +14501,15 @@ fun_decl_specifiers - 1763135 + 2464628 id - 1197760 + 1197796 name - 218 + 327 @@ -14504,17 +14523,22 @@ 1 2 - 640797 + 267566 2 3 - 548552 + 596795 3 4 - 8410 + 330266 + + + 4 + 5 + 3167 @@ -14537,6 +14561,16 @@ 2862 54 + + 6284 + 6285 + 54 + + + 6559 + 6560 + 54 + 6738 6739 @@ -14676,26 +14710,26 @@ fun_decl_empty_throws - 435235 + 435248 fun_decl - 435235 + 435248 fun_decl_noexcept - 178851 + 178607 fun_decl - 178851 + 178607 constant - 178336 + 178007 @@ -14709,7 +14743,7 @@ 1 2 - 178851 + 178607 @@ -14725,12 +14759,12 @@ 1 2 - 177863 + 177449 2 4 - 472 + 557 @@ -14740,11 +14774,11 @@ fun_decl_empty_noexcept - 1063866 + 1063898 fun_decl - 1063866 + 1063898 @@ -14849,11 +14883,11 @@ fun_requires - 31202 + 31193 id - 10839 + 10835 kind @@ -14861,7 +14895,7 @@ constraint - 30949 + 30939 @@ -14875,7 +14909,7 @@ 1 2 - 10769 + 10766 2 @@ -14896,7 +14930,7 @@ 1 2 - 7794 + 7792 2 @@ -14916,7 +14950,7 @@ 13 14 - 1222 + 1221 19 @@ -14979,7 +15013,7 @@ 1 2 - 30695 + 30685 2 @@ -15000,7 +15034,7 @@ 1 2 - 30949 + 30939 @@ -15010,19 +15044,19 @@ param_decl_bind - 4870837 + 4864198 id - 4870837 + 4864198 index - 859 + 858 fun_decl - 2664643 + 2661011 @@ -15036,7 +15070,7 @@ 1 2 - 4870837 + 4864198 @@ -15052,7 +15086,7 @@ 1 2 - 4870837 + 4864198 @@ -15230,22 +15264,22 @@ 1 2 - 1370794 + 1368925 2 3 - 667761 + 666850 3 4 - 448997 + 448385 4 21 - 177090 + 176848 @@ -15261,22 +15295,22 @@ 1 2 - 1370794 + 1368925 2 3 - 667761 + 666850 3 4 - 448997 + 448385 4 21 - 177090 + 176848 @@ -15286,27 +15320,27 @@ var_decls - 6739212 + 6739143 id - 6734234 + 6734165 variable - 6565781 + 6565975 type_id - 1513120 + 1513165 name - 829081 + 829105 location - 3605468 + 3605574 @@ -15320,7 +15354,7 @@ 1 2 - 6734234 + 6734165 @@ -15336,7 +15370,7 @@ 1 2 - 6729256 + 6729186 2 @@ -15357,7 +15391,7 @@ 1 2 - 6734234 + 6734165 @@ -15373,7 +15407,7 @@ 1 2 - 6734234 + 6734165 @@ -15389,12 +15423,12 @@ 1 2 - 6408495 + 6408954 2 4 - 157285 + 157021 @@ -15410,7 +15444,7 @@ 1 2 - 6551250 + 6551444 2 @@ -15431,7 +15465,7 @@ 1 2 - 6548559 + 6548753 2 @@ -15452,12 +15486,12 @@ 1 2 - 6434731 + 6434922 2 4 - 131049 + 131053 @@ -15473,27 +15507,27 @@ 1 2 - 890165 + 890192 2 3 - 294120 + 294129 3 5 - 133201 + 133205 5 12 - 116518 + 116521 12 1800 - 79113 + 79116 @@ -15509,27 +15543,27 @@ 1 2 - 909406 + 909433 2 3 - 280531 + 280539 3 5 - 129165 + 129169 5 12 - 116383 + 116386 12 1756 - 77633 + 77636 @@ -15545,22 +15579,22 @@ 1 2 - 1159933 + 1159967 2 3 - 207741 + 207747 3 7 - 115979 + 115983 7 981 - 29465 + 29466 @@ -15576,27 +15610,27 @@ 1 2 - 1026327 + 1026358 2 3 - 228596 + 228602 3 5 - 112481 + 112485 5 17 - 114365 + 114368 17 1756 - 31349 + 31350 @@ -15612,32 +15646,32 @@ 1 2 - 457999 + 458013 2 3 - 157016 + 157021 3 4 - 58124 + 58126 4 7 - 65390 + 65392 7 28 - 62833 + 62835 28 - 6411 - 27716 + 6409 + 27717 @@ -15653,27 +15687,27 @@ 1 2 - 471857 + 471871 2 3 - 156344 + 156348 3 4 - 51935 + 51936 4 8 - 69830 + 69832 8 47 - 62564 + 62566 47 @@ -15694,22 +15728,22 @@ 1 2 - 640176 + 640195 2 3 - 101448 + 101451 3 10 - 62968 + 62970 10 3216 - 24487 + 24488 @@ -15725,27 +15759,27 @@ 1 2 - 487734 + 487748 2 3 - 170067 + 170073 3 4 - 51800 + 51802 4 8 - 63371 + 63373 8 1866 - 56106 + 56107 @@ -15761,17 +15795,17 @@ 1 2 - 3120828 + 3120920 2 4 - 290622 + 290631 4 - 2760 - 194017 + 2758 + 194023 @@ -15787,17 +15821,17 @@ 1 2 - 3145719 + 3145812 2 5 - 299771 + 299780 5 2752 - 159976 + 159981 @@ -15813,17 +15847,17 @@ 1 2 - 3312961 + 3313060 2 13 - 271516 + 271524 13 2391 - 20989 + 20990 @@ -15839,12 +15873,12 @@ 1 2 - 3594435 + 3594541 2 5 - 11032 + 11033 @@ -15854,11 +15888,11 @@ var_def - 3747415 + 3747526 id - 3747415 + 3747526 @@ -15876,11 +15910,11 @@ var_decl_specifiers - 487061 + 487076 id - 487061 + 487076 name @@ -15898,7 +15932,7 @@ 1 2 - 487061 + 487076 @@ -15950,7 +15984,7 @@ var_requires - 415 + 414 id @@ -15958,7 +15992,7 @@ constraint - 415 + 414 @@ -15998,7 +16032,7 @@ 1 2 - 415 + 414 @@ -16008,19 +16042,19 @@ type_decls - 1890757 + 1889985 id - 1890757 + 1889985 type_id - 1849357 + 1848589 location - 1485512 + 1484895 @@ -16034,7 +16068,7 @@ 1 2 - 1890757 + 1889985 @@ -16050,7 +16084,7 @@ 1 2 - 1890757 + 1889985 @@ -16066,12 +16100,12 @@ 1 2 - 1819567 + 1818812 2 24 - 29789 + 29777 @@ -16087,12 +16121,12 @@ 1 2 - 1820895 + 1820139 2 24 - 28462 + 28450 @@ -16108,12 +16142,12 @@ 1 2 - 1408984 + 1408399 2 651 - 76527 + 76495 @@ -16129,12 +16163,12 @@ 1 2 - 1410326 + 1409740 2 651 - 75185 + 75154 @@ -16144,29 +16178,29 @@ type_def - 1297357 + 1296818 id - 1297357 + 1296818 type_decl_top - 652212 + 652231 type_decl - 652212 + 652231 type_requires - 8233 + 8230 id @@ -16174,7 +16208,7 @@ constraint - 8210 + 8207 @@ -16224,7 +16258,7 @@ 1 2 - 8186 + 8184 2 @@ -16239,11 +16273,11 @@ namespace_decls - 425651 + 425664 id - 425651 + 425664 namespace_id @@ -16251,11 +16285,11 @@ location - 425651 + 425664 bodylocation - 425651 + 425664 @@ -16269,7 +16303,7 @@ 1 2 - 425651 + 425664 @@ -16285,7 +16319,7 @@ 1 2 - 425651 + 425664 @@ -16301,7 +16335,7 @@ 1 2 - 425651 + 425664 @@ -16515,7 +16549,7 @@ 1 2 - 425651 + 425664 @@ -16531,7 +16565,7 @@ 1 2 - 425651 + 425664 @@ -16547,7 +16581,7 @@ 1 2 - 425651 + 425664 @@ -16563,7 +16597,7 @@ 1 2 - 425651 + 425664 @@ -16579,7 +16613,7 @@ 1 2 - 425651 + 425664 @@ -16595,7 +16629,7 @@ 1 2 - 425651 + 425664 @@ -16605,19 +16639,19 @@ usings - 338567 + 338426 id - 338567 + 338426 element_id - 65337 + 65310 location - 33921 + 33907 kind @@ -16635,7 +16669,7 @@ 1 2 - 338567 + 338426 @@ -16651,7 +16685,7 @@ 1 2 - 338567 + 338426 @@ -16667,7 +16701,7 @@ 1 2 - 338567 + 338426 @@ -16683,17 +16717,17 @@ 1 2 - 55420 + 55397 2 4 - 5608 + 5606 4 134 - 4307 + 4306 @@ -16709,17 +16743,17 @@ 1 2 - 55420 + 55397 2 4 - 5608 + 5606 4 134 - 4307 + 4306 @@ -16735,7 +16769,7 @@ 1 2 - 65337 + 65310 @@ -16751,22 +16785,22 @@ 1 2 - 26809 + 26798 2 4 - 2858 + 2857 4 145 - 2465 + 2464 145 289 - 1788 + 1787 @@ -16782,22 +16816,22 @@ 1 2 - 26809 + 26798 2 4 - 2858 + 2857 4 145 - 2465 + 2464 145 289 - 1788 + 1787 @@ -16813,7 +16847,7 @@ 1 2 - 33921 + 33907 @@ -16886,15 +16920,15 @@ using_container - 732094 + 731790 parent - 26484 + 26473 child - 338567 + 338426 @@ -16908,27 +16942,27 @@ 1 2 - 12327 + 12322 2 4 - 2438 + 2437 4 6 - 1598 + 1597 6 7 - 2899 + 2897 7 27 - 1991 + 1990 27 @@ -16938,12 +16972,12 @@ 145 146 - 3359 + 3358 146 437 - 867 + 866 @@ -16959,27 +16993,27 @@ 1 2 - 114174 + 114126 2 3 - 154259 + 154195 3 4 - 25238 + 25227 4 5 - 34233 + 34219 5 65 - 10661 + 10657 @@ -16989,23 +17023,23 @@ static_asserts - 183983 + 183988 id - 183983 + 183988 condition - 183983 + 183988 message - 41292 + 41294 location - 23998 + 23999 enclosing @@ -17023,7 +17057,7 @@ 1 2 - 183983 + 183988 @@ -17039,7 +17073,7 @@ 1 2 - 183983 + 183988 @@ -17055,7 +17089,7 @@ 1 2 - 183983 + 183988 @@ -17071,7 +17105,7 @@ 1 2 - 183983 + 183988 @@ -17087,7 +17121,7 @@ 1 2 - 183983 + 183988 @@ -17103,7 +17137,7 @@ 1 2 - 183983 + 183988 @@ -17119,7 +17153,7 @@ 1 2 - 183983 + 183988 @@ -17135,7 +17169,7 @@ 1 2 - 183983 + 183988 @@ -17151,7 +17185,7 @@ 1 2 - 30381 + 30382 2 @@ -17161,12 +17195,12 @@ 3 4 - 3928 + 3929 4 12 - 2202 + 2203 12 @@ -17192,7 +17226,7 @@ 1 2 - 30381 + 30382 2 @@ -17202,12 +17236,12 @@ 3 4 - 3928 + 3929 4 12 - 2202 + 2203 12 @@ -17233,12 +17267,12 @@ 1 2 - 38265 + 38267 2 33 - 3026 + 3027 @@ -17254,7 +17288,7 @@ 1 2 - 32333 + 32334 2 @@ -17422,7 +17456,7 @@ 3 4 - 8308 + 8309 4 @@ -17597,23 +17631,23 @@ params - 4808499 + 4801944 id - 4798833 + 4792291 function - 2659144 + 2655519 index - 859 + 858 type_id - 862079 + 860904 @@ -17627,7 +17661,7 @@ 1 2 - 4798833 + 4792291 @@ -17643,7 +17677,7 @@ 1 2 - 4798833 + 4792291 @@ -17659,12 +17693,12 @@ 1 2 - 4789510 + 4782981 2 4 - 9322 + 9310 @@ -17680,22 +17714,22 @@ 1 2 - 1392103 + 1390206 2 3 - 661145 + 660243 3 4 - 439589 + 438989 4 21 - 166306 + 166079 @@ -17711,22 +17745,22 @@ 1 2 - 1392103 + 1390206 2 3 - 661145 + 660243 3 4 - 439589 + 438989 4 21 - 166306 + 166079 @@ -17742,22 +17776,22 @@ 1 2 - 1481035 + 1479016 2 3 - 669909 + 668996 3 4 - 403844 + 403294 4 10 - 104355 + 104212 @@ -18016,32 +18050,32 @@ 1 2 - 449169 + 448557 2 3 - 180011 + 179766 3 4 - 53144 + 53071 4 6 - 77761 + 77655 6 15 - 65603 + 65513 15 3702 - 36388 + 36339 @@ -18057,32 +18091,32 @@ 1 2 - 492088 + 491418 2 3 - 152343 + 152136 3 4 - 53230 + 53157 4 6 - 69383 + 69289 6 18 - 66247 + 66157 18 3701 - 28784 + 28745 @@ -18098,17 +18132,17 @@ 1 2 - 634465 + 633600 2 3 - 187744 + 187488 3 17 - 39868 + 39814 @@ -18118,15 +18152,15 @@ overrides - 170557 + 170562 new - 161259 + 161264 old - 19193 + 19194 @@ -18140,12 +18174,12 @@ 1 2 - 151970 + 151975 2 4 - 9288 + 9289 @@ -18196,19 +18230,19 @@ membervariables - 1444238 + 1444281 id - 1441780 + 1441823 type_id - 448006 + 448019 name - 617367 + 617385 @@ -18222,7 +18256,7 @@ 1 2 - 1439432 + 1439474 2 @@ -18243,7 +18277,7 @@ 1 2 - 1441780 + 1441823 @@ -18259,22 +18293,22 @@ 1 2 - 332222 + 332232 2 3 - 70944 + 70946 3 10 - 34898 + 34900 10 4152 - 9939 + 9940 @@ -18290,17 +18324,17 @@ 1 2 - 348935 + 348945 2 3 - 63517 + 63519 3 40 - 33642 + 33643 41 @@ -18321,22 +18355,22 @@ 1 2 - 403713 + 403725 2 3 - 118296 + 118299 3 5 - 56308 + 56309 5 646 - 39049 + 39050 @@ -18352,17 +18386,17 @@ 1 2 - 502840 + 502854 2 3 - 70726 + 70728 3 650 - 43801 + 43802 @@ -18372,15 +18406,15 @@ globalvariables - 425557 + 425555 id - 425546 + 425544 type_id - 1634 + 1632 name @@ -18398,7 +18432,7 @@ 1 2 - 425535 + 425533 2 @@ -18419,7 +18453,7 @@ 1 2 - 425546 + 425544 @@ -18435,7 +18469,7 @@ 1 2 - 1147 + 1145 2 @@ -18471,7 +18505,7 @@ 1 2 - 1179 + 1177 2 @@ -18507,12 +18541,12 @@ 1 2 - 399362 + 399364 2 1044 - 5652 + 5650 @@ -18528,12 +18562,12 @@ 1 2 - 404349 + 404351 2 15 - 665 + 663 @@ -18543,19 +18577,19 @@ localvariables - 735324 + 735183 id - 735324 + 735183 type_id - 54078 + 54088 name - 102827 + 102807 @@ -18569,7 +18603,7 @@ 1 2 - 735324 + 735183 @@ -18585,7 +18619,7 @@ 1 2 - 735324 + 735183 @@ -18601,17 +18635,17 @@ 1 2 - 29229 + 29244 2 3 - 7925 + 7924 3 4 - 4076 + 4075 4 @@ -18621,17 +18655,17 @@ 6 12 - 4202 + 4201 12 - 165 - 4056 + 166 + 4059 - 165 + 168 19320 - 486 + 482 @@ -18647,22 +18681,22 @@ 1 2 - 38830 + 38843 2 3 - 6786 + 6784 3 5 - 4522 + 4521 5 3502 - 3938 + 3937 @@ -18678,27 +18712,27 @@ 1 2 - 63261 + 63250 2 3 - 16249 + 16246 3 4 - 6615 + 6614 4 8 - 8234 + 8232 8 135 - 7715 + 7713 135 @@ -18719,17 +18753,17 @@ 1 2 - 85563 + 85547 2 3 - 8526 + 8524 3 15 - 7771 + 7770 15 @@ -18744,11 +18778,11 @@ autoderivation - 202090 + 202096 var - 202090 + 202096 derivation_type @@ -18766,7 +18800,7 @@ 1 2 - 202090 + 202096 @@ -18812,15 +18846,15 @@ orphaned_variables - 55893 + 55817 var - 55893 + 55817 function - 51769 + 51698 @@ -18834,7 +18868,7 @@ 1 2 - 55893 + 55817 @@ -18850,12 +18884,12 @@ 1 2 - 50695 + 50626 2 47 - 1074 + 1072 @@ -18865,15 +18899,15 @@ enumconstants - 330365 + 330375 id - 330365 + 330375 parent - 38995 + 38996 index @@ -18885,11 +18919,11 @@ name - 329983 + 329993 location - 302894 + 302903 @@ -18903,7 +18937,7 @@ 1 2 - 330365 + 330375 @@ -18919,7 +18953,7 @@ 1 2 - 330365 + 330375 @@ -18935,7 +18969,7 @@ 1 2 - 330365 + 330375 @@ -18951,7 +18985,7 @@ 1 2 - 330365 + 330375 @@ -18967,7 +19001,7 @@ 1 2 - 330365 + 330375 @@ -19018,7 +19052,7 @@ 8 11 - 3549 + 3550 11 @@ -19084,7 +19118,7 @@ 8 11 - 3549 + 3550 11 @@ -19115,7 +19149,7 @@ 1 2 - 38995 + 38996 @@ -19166,7 +19200,7 @@ 8 11 - 3549 + 3550 11 @@ -19207,7 +19241,7 @@ 3 4 - 7973 + 7974 4 @@ -19578,7 +19612,7 @@ 1 2 - 329601 + 329611 2 @@ -19599,7 +19633,7 @@ 1 2 - 329601 + 329611 2 @@ -19620,7 +19654,7 @@ 1 2 - 329983 + 329993 @@ -19636,7 +19670,7 @@ 1 2 - 329983 + 329993 @@ -19652,7 +19686,7 @@ 1 2 - 329601 + 329611 2 @@ -19673,7 +19707,7 @@ 1 2 - 301856 + 301865 2 @@ -19694,7 +19728,7 @@ 1 2 - 302894 + 302903 @@ -19710,7 +19744,7 @@ 1 2 - 301856 + 301865 2 @@ -19731,7 +19765,7 @@ 1 2 - 302894 + 302903 @@ -19747,7 +19781,7 @@ 1 2 - 301856 + 301865 2 @@ -20439,15 +20473,15 @@ derivedtypes - 3188505 + 3188600 id - 3188505 + 3188600 name - 1506662 + 1506707 kind @@ -20455,7 +20489,7 @@ type_id - 2055212 + 2055273 @@ -20469,7 +20503,7 @@ 1 2 - 3188505 + 3188600 @@ -20485,7 +20519,7 @@ 1 2 - 3188505 + 3188600 @@ -20501,7 +20535,7 @@ 1 2 - 3188505 + 3188600 @@ -20517,17 +20551,17 @@ 1 2 - 1369020 + 1369060 2 10 - 113827 + 113830 10 4291 - 23814 + 23815 @@ -20543,7 +20577,7 @@ 1 2 - 1506662 + 1506707 @@ -20559,17 +20593,17 @@ 1 2 - 1369154 + 1369195 2 10 - 113692 + 113695 10 4291 - 23814 + 23815 @@ -20708,22 +20742,22 @@ 1 2 - 1388260 + 1388301 2 3 - 410100 + 410112 3 4 - 122572 + 122576 4 124 - 134278 + 134282 @@ -20739,22 +20773,22 @@ 1 2 - 1389875 + 1389916 2 3 - 410100 + 410112 3 4 - 120958 + 120961 4 124 - 134278 + 134282 @@ -20770,22 +20804,22 @@ 1 2 - 1390144 + 1390185 2 3 - 410907 + 410920 3 4 - 122707 + 122710 4 6 - 131452 + 131456 @@ -20795,11 +20829,11 @@ pointerishsize - 2366958 + 2367028 id - 2366958 + 2367028 size @@ -20821,7 +20855,7 @@ 1 2 - 2366958 + 2367028 @@ -20837,7 +20871,7 @@ 1 2 - 2366958 + 2367028 @@ -20921,15 +20955,15 @@ arraysizes - 86379 + 86382 id - 86379 + 86382 num_elements - 18567 + 18568 bytesize @@ -20951,7 +20985,7 @@ 1 2 - 86379 + 86382 @@ -20967,7 +21001,7 @@ 1 2 - 86379 + 86382 @@ -20983,7 +21017,7 @@ 1 2 - 86379 + 86382 @@ -21045,12 +21079,12 @@ 1 2 - 9283 + 9284 2 3 - 6861 + 6862 3 @@ -21076,12 +21110,12 @@ 1 2 - 9283 + 9284 2 3 - 6861 + 6862 3 @@ -21317,15 +21351,15 @@ typedefbase - 2175691 + 2172725 id - 2175691 + 2172725 type_id - 905385 + 904236 @@ -21339,7 +21373,7 @@ 1 2 - 2175691 + 2172725 @@ -21355,22 +21389,22 @@ 1 2 - 730529 + 729661 2 3 - 81714 + 81602 3 6 - 70028 + 69889 6 2848 - 23113 + 23082 @@ -21380,23 +21414,27 @@ decltypes - 175625 + 813066 id - 15417 + 27516 expr - 161560 + 813066 + + + kind + 21 base_type - 11309 + 3335 parentheses_would_change_meaning - 16 + 21 @@ -21410,37 +21448,63 @@ 1 2 - 2185 + 9720 2 3 - 6656 - - - 3 - 4 - 2161 + 3642 4 5 - 1055 + 3620 - 5 + 6 9 - 1212 + 548 - 9 - 22 - 1204 + 23 + 24 + 3247 - 22 - 1808 - 940 + 29 + 30 + 3137 + + + 32 + 33 + 131 + + + 171 + 172 + 3071 + + + 173 + 224 + 394 + + + + + + + id + kind + + + 12 + + + 1 + 2 + 27516 @@ -21456,7 +21520,7 @@ 1 2 - 15417 + 27516 @@ -21472,7 +21536,7 @@ 1 2 - 15417 + 27516 @@ -21488,17 +21552,23 @@ 1 2 - 148024 - - - 2 - 3 - 13057 + 813066 + + + + + + expr + kind + + + 12 + - 3 - 5 - 478 + 1 + 2 + 813066 @@ -21514,17 +21584,7 @@ 1 2 - 148024 - - - 2 - 3 - 13057 - - - 3 - 5 - 478 + 813066 @@ -21540,33 +21600,71 @@ 1 2 - 161560 + 813066 - base_type + kind id 12 - 1 - 2 - 9799 + 1254 + 1255 + 21 + + + + + + kind + expr + + + 12 + - 2 - 3 - 1336 + 37054 + 37055 + 21 + + + + + + kind + base_type + + + 12 + - 3 - 269 - 173 + 152 + 153 + 21 + + + + + + + kind + parentheses_would_change_meaning + + + 12 + + + 1 + 2 + 21 @@ -21574,7 +21672,7 @@ base_type - expr + id 12 @@ -21582,37 +21680,99 @@ 1 2 - 981 + 1206 2 3 - 5518 + 1031 3 4 - 1600 + 351 4 5 - 1113 + 175 5 8 - 948 + 285 8 - 41 - 857 + 166 + 263 - 42 - 5498 - 288 + 245 + 246 + 21 + + + + + + + base_type + expr + + + 12 + + + 1 + 2 + 1162 + + + 2 + 3 + 855 + + + 3 + 4 + 329 + + + 4 + 7 + 285 + + + 7 + 201 + 307 + + + 340 + 1601 + 263 + + + 2800 + 8194 + 131 + + + + + + + base_type + kind + + + 12 + + + 1 + 2 + 3335 @@ -21628,7 +21788,23 @@ 1 2 - 11309 + 3335 + + + + + + + parentheses_would_change_meaning + id + + + 12 + + + 1254 + 1255 + 21 @@ -21636,62 +21812,363 @@ parentheses_would_change_meaning + expr + + + 12 + + + 37054 + 37055 + 21 + + + + + + + parentheses_would_change_meaning + kind + + + 12 + + + 1 + 2 + 21 + + + + + + + parentheses_would_change_meaning + base_type + + + 12 + + + 152 + 153 + 21 + + + + + + + + + type_operators + 8530 + + + id + 8530 + + + arg_type + 7700 + + + kind + 92 + + + base_type + 5625 + + + + + id + arg_type + + + 12 + + + 1 + 2 + 8530 + + + + + + + id + kind + + + 12 + + + 1 + 2 + 8530 + + + + + + + id + base_type + + + 12 + + + 1 + 2 + 8530 + + + + + + + arg_type id 12 + + 1 + 2 + 6870 + 2 3 - 8 + 829 + + + + + + + arg_type + kind + + + 12 + + + 1 + 2 + 6870 - 1867 - 1868 - 8 + 2 + 3 + 829 - parentheses_would_change_meaning - expr + arg_type + base_type 12 + + 1 + 2 + 7677 + 2 3 - 8 + 23 + + + + + + kind + id + + + 12 + - 19584 - 19585 - 8 + 1 + 2 + 23 + + + 7 + 8 + 23 + + + 96 + 97 + 23 + + + 266 + 267 + 23 - parentheses_would_change_meaning + kind + arg_type + + + 12 + + + 1 + 2 + 23 + + + 7 + 8 + 23 + + + 96 + 97 + 23 + + + 266 + 267 + 23 + + + + + + + kind base_type 12 + + 1 + 2 + 23 + + + 4 + 5 + 23 + + + 72 + 73 + 23 + + + 222 + 223 + 23 + + + + + + + base_type + id + + + 12 + + + 1 + 2 + 3896 + 2 3 - 8 + 968 - 1369 - 1370 - 8 + 3 + 4 + 368 + + + 4 + 6 + 391 + + + + + + + base_type + arg_type + + + 12 + + + 1 + 2 + 4057 + + + 2 + 3 + 1060 + + + 3 + 4 + 484 + + + 4 + 5 + 23 + + + + + + + base_type + kind + + + 12 + + + 1 + 2 + 4380 + + + 2 + 3 + 1221 + + + 3 + 4 + 23 @@ -21701,15 +22178,15 @@ usertypes - 4992117 + 4985358 id - 4992117 + 4985358 name - 1074915 + 1074347 kind @@ -21727,7 +22204,7 @@ 1 2 - 4992117 + 4985358 @@ -21743,7 +22220,7 @@ 1 2 - 4992117 + 4985358 @@ -21759,22 +22236,22 @@ 1 2 - 742932 + 742934 2 3 - 197244 + 196864 3 7 - 86104 + 85987 7 - 29574 - 48633 + 30181 + 48559 @@ -21790,12 +22267,12 @@ 1 2 - 1007695 + 1008021 2 10 - 67220 + 66325 @@ -21839,8 +22316,8 @@ 13 - 4522 - 4523 + 4581 + 4582 13 @@ -21849,23 +22326,23 @@ 13 - 20080 - 20081 + 20064 + 20065 13 - 82457 - 82458 + 82095 + 82096 13 - 85575 - 85576 + 85549 + 85550 13 - 151140 - 151141 + 151139 + 151140 13 @@ -21905,8 +22382,8 @@ 13 - 832 - 833 + 771 + 772 13 @@ -21915,8 +22392,8 @@ 13 - 3087 - 3088 + 3066 + 3067 13 @@ -21925,8 +22402,8 @@ 13 - 10837 - 10838 + 10827 + 10828 13 @@ -21935,8 +22412,8 @@ 13 - 51364 - 51365 + 51346 + 51347 13 @@ -21947,15 +22424,15 @@ usertypesize - 1631914 + 1631467 id - 1631914 + 1631467 size - 1896 + 1895 alignment @@ -21973,7 +22450,7 @@ 1 2 - 1631914 + 1631467 @@ -21989,7 +22466,7 @@ 1 2 - 1631914 + 1631467 @@ -22005,7 +22482,7 @@ 1 2 - 596 + 595 2 @@ -22025,31 +22502,31 @@ 6 8 - 149 + 148 8 14 - 149 + 148 14 26 - 149 + 148 26 86 - 149 + 148 96 1592 - 149 + 148 1733 - 92713 + 92730 67 @@ -22125,8 +22602,8 @@ 13 - 107899 - 107900 + 107916 + 107917 13 @@ -22183,26 +22660,26 @@ usertype_final - 12243 + 12244 id - 12243 + 12244 usertype_uuid - 50061 + 50062 id - 50061 + 50062 uuid - 49549 + 49551 @@ -22216,7 +22693,7 @@ 1 2 - 50061 + 50062 @@ -22232,7 +22709,7 @@ 1 2 - 49037 + 49039 2 @@ -22247,11 +22724,11 @@ usertype_alias_kind - 2175733 + 2172768 id - 2175691 + 2172725 alias_kind @@ -22269,7 +22746,7 @@ 1 2 - 2175648 + 2172682 2 @@ -22305,26 +22782,26 @@ nontype_template_parameters - 966305 + 964988 id - 966305 + 964988 type_template_type_constraint - 29104 + 29095 id - 14344 + 14340 constraint - 27881 + 27873 @@ -22338,7 +22815,7 @@ 1 2 - 10954 + 10951 2 @@ -22353,7 +22830,7 @@ 5 14 - 1199 + 1198 14 @@ -22374,12 +22851,12 @@ 1 2 - 26659 + 26651 2 3 - 1222 + 1221 @@ -22389,15 +22866,15 @@ mangled_name - 7780866 + 7772962 id - 7780866 + 7772962 mangled_name - 5325726 + 5322850 is_complete @@ -22415,7 +22892,7 @@ 1 2 - 7780866 + 7772962 @@ -22431,7 +22908,7 @@ 1 2 - 7780866 + 7772962 @@ -22447,17 +22924,17 @@ 1 2 - 4731594 + 4729548 2 3 - 459569 + 459175 3 - 8985 - 134562 + 9032 + 134127 @@ -22473,7 +22950,7 @@ 1 2 - 5325726 + 5322850 @@ -22487,13 +22964,13 @@ 12 - 5005 - 5006 + 5002 + 5003 13 - 570981 - 570982 + 570639 + 570640 13 @@ -22513,8 +22990,8 @@ 13 - 391611 - 391612 + 391562 + 391563 13 @@ -22525,59 +23002,59 @@ is_pod_class - 747542 + 746523 id - 747542 + 746523 is_standard_layout_class - 1344636 + 1344308 id - 1344636 + 1344308 is_complete - 1611052 + 1610613 id - 1611052 + 1610613 is_class_template - 292182 + 292060 id - 292182 + 292060 class_instantiation - 1327526 + 1326501 to - 1323611 + 1322587 from - 91713 + 91566 @@ -22591,12 +23068,12 @@ 1 2 - 1320861 + 1319838 2 8 - 2750 + 2748 @@ -22612,47 +23089,47 @@ 1 2 - 26741 + 26717 2 3 - 16676 + 16615 3 4 - 9130 + 9099 4 5 - 5987 + 5971 5 7 - 7667 + 7677 7 10 - 6922 + 6960 10 17 - 7423 + 7366 17 53 - 6922 + 6919 53 4219 - 4240 + 4238 @@ -22662,19 +23139,19 @@ class_template_argument - 3502880 + 3500247 type_id - 1631792 + 1630546 index - 1517 + 1516 arg_type - 1034653 + 1034034 @@ -22688,27 +23165,27 @@ 1 2 - 679139 + 678613 2 3 - 490293 + 489900 3 4 - 308844 + 308621 4 7 - 124144 + 124066 7 113 - 29369 + 29344 @@ -22724,22 +23201,22 @@ 1 2 - 713697 + 713157 2 3 - 505642 + 505242 3 4 - 306907 + 306685 4 113 - 105544 + 105460 @@ -22779,12 +23256,12 @@ 643 - 6821 + 6819 121 - 11332 - 120452 + 11329 + 120410 54 @@ -22829,8 +23306,8 @@ 121 - 10038 - 43717 + 10035 + 43710 40 @@ -22847,27 +23324,27 @@ 1 2 - 648834 + 648808 2 3 - 212417 + 212098 3 4 - 62194 + 62127 4 11 - 78830 + 78634 11 - 11558 - 32377 + 11553 + 32363 @@ -22883,17 +23360,17 @@ 1 2 - 912540 + 911999 2 3 - 98879 + 98811 3 22 - 23233 + 23223 @@ -22903,11 +23380,11 @@ class_template_argument_value - 643229 + 642353 type_id - 259534 + 259180 index @@ -22915,7 +23392,7 @@ arg_value - 643057 + 642181 @@ -22929,17 +23406,17 @@ 1 2 - 196466 + 196198 2 3 - 54690 + 54616 3 8 - 8377 + 8366 @@ -22955,22 +23432,22 @@ 1 2 - 186541 + 186287 2 3 - 51039 + 50969 3 45 - 19590 + 19564 45 154 - 2362 + 2359 @@ -23098,7 +23575,7 @@ 1 2 - 642886 + 642009 2 @@ -23119,7 +23596,7 @@ 1 2 - 643057 + 642181 @@ -23129,15 +23606,15 @@ is_proxy_class_for - 61259 + 62033 id - 61259 + 62033 templ_param_id - 60135 + 58607 @@ -23151,7 +23628,7 @@ 1 2 - 61259 + 62033 @@ -23167,12 +23644,12 @@ 1 2 - 59620 + 57686 2 - 21 - 514 + 79 + 920 @@ -23182,19 +23659,19 @@ type_mentions - 5507865 + 5508028 id - 5507865 + 5508028 type_id - 270944 + 270952 location - 5462043 + 5462205 kind @@ -23212,7 +23689,7 @@ 1 2 - 5507865 + 5508028 @@ -23228,7 +23705,7 @@ 1 2 - 5507865 + 5508028 @@ -23244,7 +23721,7 @@ 1 2 - 5507865 + 5508028 @@ -23260,17 +23737,17 @@ 1 2 - 133424 + 133428 2 3 - 29710 + 29711 3 4 - 11250 + 11251 4 @@ -23290,7 +23767,7 @@ 12 27 - 20753 + 20754 27 @@ -23311,17 +23788,17 @@ 1 2 - 133424 + 133428 2 3 - 29710 + 29711 3 4 - 11250 + 11251 4 @@ -23341,7 +23818,7 @@ 12 27 - 20753 + 20754 27 @@ -23362,7 +23839,7 @@ 1 2 - 270944 + 270952 @@ -23378,12 +23855,12 @@ 1 2 - 5416221 + 5416382 2 3 - 45821 + 45823 @@ -23399,12 +23876,12 @@ 1 2 - 5416221 + 5416382 2 3 - 45821 + 45823 @@ -23420,7 +23897,7 @@ 1 2 - 5462043 + 5462205 @@ -23478,26 +23955,26 @@ is_function_template - 1418399 + 1418441 id - 1418399 + 1418441 function_instantiation - 1226957 + 1225284 to - 1226957 + 1225284 from - 230191 + 229877 @@ -23511,7 +23988,7 @@ 1 2 - 1226957 + 1225284 @@ -23527,27 +24004,27 @@ 1 2 - 140013 + 139822 2 3 - 53273 + 53200 3 9 - 18130 + 18105 9 103 - 17270 + 17247 103 1532 - 1503 + 1501 @@ -23557,19 +24034,19 @@ function_template_argument - 3133404 + 3129132 function_id - 1832637 + 1830139 index - 601 + 600 arg_type - 375790 + 375277 @@ -23583,22 +24060,22 @@ 1 2 - 987399 + 986053 2 3 - 521002 + 520292 3 4 - 216658 + 216362 4 15 - 107577 + 107430 @@ -23614,22 +24091,22 @@ 1 2 - 1011544 + 1010165 2 3 - 518596 + 517889 3 4 - 213908 + 213617 4 9 - 88588 + 88467 @@ -23767,37 +24244,37 @@ 1 2 - 220396 + 220095 2 3 - 33209 + 33164 3 4 - 25218 + 25184 4 6 - 28569 + 28530 6 11 - 29300 + 29260 11 76 - 29472 + 29431 79 2452 - 9623 + 9610 @@ -23813,17 +24290,17 @@ 1 2 - 323848 + 323407 2 3 - 40513 + 40458 3 15 - 11427 + 11412 @@ -23833,19 +24310,19 @@ function_template_argument_value - 570967 + 570189 function_id - 248149 + 247811 index - 601 + 600 arg_value - 567573 + 566799 @@ -23859,17 +24336,17 @@ 1 2 - 190923 + 190663 2 3 - 54089 + 54015 3 8 - 3136 + 3131 @@ -23885,22 +24362,22 @@ 1 2 - 182202 + 181954 2 3 - 46270 + 46207 3 54 - 18731 + 18705 54 113 - 945 + 943 @@ -24038,12 +24515,12 @@ 1 2 - 564179 + 563410 2 3 - 3394 + 3389 @@ -24059,7 +24536,7 @@ 1 2 - 567573 + 566799 @@ -24069,26 +24546,26 @@ is_variable_template - 55029 + 55031 id - 55029 + 55031 variable_instantiation - 279051 + 279059 to - 279051 + 279059 from - 34040 + 34041 @@ -24102,7 +24579,7 @@ 1 2 - 279051 + 279059 @@ -24118,7 +24595,7 @@ 1 2 - 16683 + 16684 2 @@ -24163,11 +24640,11 @@ variable_template_argument - 525811 + 525827 variable_id - 267211 + 267219 index @@ -24175,7 +24652,7 @@ arg_type - 257120 + 257127 @@ -24189,17 +24666,17 @@ 1 2 - 116248 + 116252 2 3 - 97277 + 97280 3 4 - 39422 + 39423 4 @@ -24220,17 +24697,17 @@ 1 2 - 122169 + 122172 2 3 - 99296 + 99298 3 4 - 32829 + 32830 4 @@ -24368,17 +24845,17 @@ 1 2 - 199668 + 199674 2 3 - 30542 + 30543 3 11 - 19643 + 19644 11 @@ -24399,17 +24876,17 @@ 1 2 - 233439 + 233446 2 3 - 20989 + 20990 3 7 - 2690 + 2691 @@ -24423,7 +24900,7 @@ variable_id - 11032 + 11033 index @@ -24445,7 +24922,7 @@ 1 2 - 10494 + 10495 2 @@ -24466,7 +24943,7 @@ 1 2 - 6592 + 6593 2 @@ -24580,15 +25057,15 @@ template_template_instantiation - 7437 + 7434 to - 6976 + 6973 from - 4931 + 4929 @@ -24602,12 +25079,12 @@ 1 2 - 6827 + 6824 2 15 - 149 + 148 @@ -24623,7 +25100,7 @@ 1 2 - 3224 + 3222 2 @@ -24643,11 +25120,11 @@ template_template_argument - 12409 + 12403 type_id - 7843 + 7840 index @@ -24655,7 +25132,7 @@ arg_type - 11650 + 11645 @@ -24669,7 +25146,7 @@ 1 2 - 6434 + 6432 2 @@ -24679,7 +25156,7 @@ 3 8 - 650 + 649 8 @@ -24700,7 +25177,7 @@ 1 2 - 6461 + 6459 2 @@ -24710,7 +25187,7 @@ 4 10 - 596 + 595 10 @@ -24853,7 +25330,7 @@ 1 2 - 11609 + 11604 3 @@ -24874,7 +25351,7 @@ 1 2 - 11623 + 11618 2 @@ -24889,7 +25366,7 @@ template_template_argument_value - 799 + 798 type_id @@ -24901,7 +25378,7 @@ arg_value - 799 + 798 @@ -24999,7 +25476,7 @@ 1 2 - 799 + 798 @@ -25015,7 +25492,7 @@ 1 2 - 799 + 798 @@ -25025,19 +25502,19 @@ concept_templates - 3874 + 3873 concept_id - 3874 + 3873 name - 3874 + 3873 location - 3874 + 3873 @@ -25051,7 +25528,7 @@ 1 2 - 3874 + 3873 @@ -25067,7 +25544,7 @@ 1 2 - 3874 + 3873 @@ -25083,7 +25560,7 @@ 1 2 - 3874 + 3873 @@ -25099,7 +25576,7 @@ 1 2 - 3874 + 3873 @@ -25115,7 +25592,7 @@ 1 2 - 3874 + 3873 @@ -25131,7 +25608,7 @@ 1 2 - 3874 + 3873 @@ -25141,15 +25618,15 @@ concept_instantiation - 96929 + 96899 to - 96929 + 96899 from - 3689 + 3688 @@ -25163,7 +25640,7 @@ 1 2 - 96929 + 96899 @@ -25189,7 +25666,7 @@ 3 4 - 392 + 391 4 @@ -25259,22 +25736,22 @@ is_type_constraint - 39551 + 39538 concept_id - 39551 + 39538 concept_template_argument - 121167 + 121129 concept_id - 81869 + 81844 index @@ -25282,7 +25759,7 @@ arg_type - 22969 + 22962 @@ -25296,17 +25773,17 @@ 1 2 - 49813 + 49798 2 3 - 26451 + 26443 3 7 - 5604 + 5602 @@ -25322,17 +25799,17 @@ 1 2 - 53688 + 53671 2 3 - 23984 + 23976 3 7 - 4197 + 4195 @@ -25430,17 +25907,17 @@ 1 2 - 11138 + 11135 2 3 - 3182 + 3181 3 4 - 1130 + 1129 4 @@ -25450,7 +25927,7 @@ 5 6 - 1245 + 1244 6 @@ -25481,12 +25958,12 @@ 1 2 - 19325 + 19319 2 3 - 3505 + 3504 3 @@ -25632,15 +26109,15 @@ routinetypes - 762063 + 761024 id - 762063 + 761024 return_type - 357960 + 357472 @@ -25654,7 +26131,7 @@ 1 2 - 762063 + 761024 @@ -25670,17 +26147,17 @@ 1 2 - 295365 + 294962 2 3 - 44251 + 44190 3 4676 - 18344 + 18319 @@ -25690,11 +26167,11 @@ routinetypeargs - 1165647 + 1165681 routine - 411414 + 411426 index @@ -25702,7 +26179,7 @@ type_id - 110813 + 110817 @@ -25716,32 +26193,32 @@ 1 2 - 81430 + 81433 2 3 - 125395 + 125399 3 4 - 106717 + 106720 4 5 - 48935 + 48936 5 7 - 32441 + 32442 7 19 - 16493 + 16494 @@ -25757,27 +26234,27 @@ 1 2 - 87383 + 87386 2 3 - 138121 + 138125 3 4 - 113435 + 113438 4 5 - 40142 + 40143 5 10 - 32222 + 32223 10 @@ -25975,7 +26452,7 @@ 1 2 - 33096 + 33097 2 @@ -25985,7 +26462,7 @@ 3 4 - 13052 + 13053 4 @@ -26031,7 +26508,7 @@ 1 2 - 78154 + 78156 2 @@ -26056,19 +26533,19 @@ ptrtomembers - 12083 + 12078 id - 12083 + 12078 type_id - 10160 + 10156 class_id - 5987 + 5985 @@ -26082,7 +26559,7 @@ 1 2 - 12083 + 12078 @@ -26098,7 +26575,7 @@ 1 2 - 12083 + 12078 @@ -26114,7 +26591,7 @@ 1 2 - 9875 + 9871 2 @@ -26135,7 +26612,7 @@ 1 2 - 9875 + 9871 2 @@ -26156,7 +26633,7 @@ 1 2 - 4876 + 4874 2 @@ -26187,7 +26664,7 @@ 1 2 - 4876 + 4874 2 @@ -26212,15 +26689,15 @@ specifiers - 7131 + 8342 id - 7131 + 8342 str - 7131 + 8342 @@ -26234,7 +26711,7 @@ 1 2 - 7131 + 8342 @@ -26250,7 +26727,7 @@ 1 2 - 7131 + 8342 @@ -26260,11 +26737,11 @@ typespecifiers - 988078 + 991081 type_id - 981495 + 984499 spec_id @@ -26282,12 +26759,12 @@ 1 2 - 974911 + 977918 2 3 - 6583 + 6581 @@ -26331,8 +26808,8 @@ 13 - 17156 - 17157 + 17408 + 17409 13 @@ -26348,15 +26825,15 @@ funspecifiers - 9758473 + 9715095 func_id - 3343789 + 3335928 spec_id - 859 + 815 @@ -26370,32 +26847,32 @@ 1 2 - 431941 + 437273 2 3 - 686449 + 676332 3 4 - 1416678 + 1422255 4 5 - 458148 + 458854 5 6 - 233886 + 224772 6 8 - 116685 + 116440 @@ -26438,11 +26915,6 @@ 563 42 - - 704 - 705 - 42 - 1589 1590 @@ -26489,8 +26961,8 @@ 42 - 42404 - 42405 + 42407 + 42408 42 @@ -26511,11 +26983,11 @@ varspecifiers - 2898034 + 2898120 var_id - 2545003 + 2545078 spec_id @@ -26533,12 +27005,12 @@ 1 2 - 2191971 + 2192036 2 3 - 353031 + 353041 @@ -26594,15 +27066,15 @@ explicit_specifier_exprs - 44535 + 44536 func_id - 44535 + 44536 constant - 44535 + 44536 @@ -26616,7 +27088,7 @@ 1 2 - 44535 + 44536 @@ -26632,7 +27104,7 @@ 1 2 - 44535 + 44536 @@ -26642,11 +27114,11 @@ attributes - 629816 + 629835 id - 629816 + 629835 kind @@ -26662,7 +27134,7 @@ location - 623358 + 623376 @@ -26676,7 +27148,7 @@ 1 2 - 629816 + 629835 @@ -26692,7 +27164,7 @@ 1 2 - 629816 + 629835 @@ -26708,7 +27180,7 @@ 1 2 - 629816 + 629835 @@ -26724,7 +27196,7 @@ 1 2 - 629816 + 629835 @@ -27112,7 +27584,7 @@ 1 2 - 617034 + 617052 2 @@ -27133,7 +27605,7 @@ 1 2 - 623358 + 623376 @@ -27149,7 +27621,7 @@ 1 2 - 617841 + 617860 2 @@ -27170,7 +27642,7 @@ 1 2 - 623358 + 623376 @@ -27180,11 +27652,11 @@ attribute_args - 99123 + 98906 id - 99123 + 98906 kind @@ -27192,7 +27664,7 @@ attribute - 85332 + 85297 index @@ -27200,7 +27672,7 @@ location - 91943 + 91905 @@ -27214,7 +27686,7 @@ 1 2 - 99123 + 98906 @@ -27230,7 +27702,7 @@ 1 2 - 99123 + 98906 @@ -27246,7 +27718,7 @@ 1 2 - 99123 + 98906 @@ -27262,7 +27734,7 @@ 1 2 - 99123 + 98906 @@ -27291,8 +27763,8 @@ 13 - 6614 - 6615 + 6601 + 6602 13 @@ -27397,12 +27869,12 @@ 1 2 - 77177 + 77321 2 4 - 6800 + 6621 4 @@ -27423,7 +27895,7 @@ 1 2 - 83029 + 82995 2 @@ -27444,12 +27916,12 @@ 1 2 - 79046 + 79014 2 6 - 6285 + 6283 @@ -27465,12 +27937,12 @@ 1 2 - 80658 + 80625 2 6 - 4673 + 4671 @@ -27504,8 +27976,8 @@ 13 - 6497 - 6498 + 6484 + 6485 13 @@ -27620,12 +28092,12 @@ 1 2 - 89329 + 89467 2 23 - 2614 + 2437 @@ -27641,7 +28113,7 @@ 1 2 - 91726 + 91688 2 @@ -27662,7 +28134,7 @@ 1 2 - 91537 + 91499 2 @@ -27683,7 +28155,7 @@ 1 2 - 91388 + 91350 2 @@ -27698,15 +28170,15 @@ attribute_arg_value - 21051 + 21022 arg - 21051 + 21022 value - 644 + 643 @@ -27720,7 +28192,7 @@ 1 2 - 21051 + 21022 @@ -27829,7 +28301,7 @@ 1 2 - 73 + 72 2 @@ -27854,15 +28326,15 @@ attribute_arg_constant - 89599 + 89386 arg - 89599 + 89386 constant - 89599 + 89386 @@ -27876,7 +28348,7 @@ 1 2 - 89599 + 89386 @@ -27892,7 +28364,7 @@ 1 2 - 89599 + 89386 @@ -28003,15 +28475,15 @@ typeattributes - 84495 + 84498 type_id - 83957 + 83960 spec_id - 26909 + 26910 @@ -28025,7 +28497,7 @@ 1 2 - 83419 + 83421 2 @@ -28071,15 +28543,15 @@ funcattributes - 824910 + 824934 func_id - 776473 + 776496 spec_id - 598601 + 598619 @@ -28093,12 +28565,12 @@ 1 2 - 732879 + 732901 2 7 - 43593 + 43594 @@ -28114,12 +28586,12 @@ 1 2 - 555008 + 555024 2 202 - 43593 + 43594 @@ -28192,11 +28664,11 @@ stmtattributes - 2375 + 2374 stmt_id - 2375 + 2374 spec_id @@ -28214,7 +28686,7 @@ 1 2 - 2375 + 2374 @@ -28260,15 +28732,15 @@ unspecifiedtype - 8350274 + 8343055 type_id - 8350274 + 8343055 unspecified_type_id - 4803705 + 4797092 @@ -28282,7 +28754,7 @@ 1 2 - 8350274 + 8343055 @@ -28298,17 +28770,17 @@ 1 2 - 3203138 + 3197163 2 3 - 1309007 + 1308477 3 6271 - 291558 + 291451 @@ -28318,19 +28790,19 @@ member - 4687174 + 4680785 parent - 562417 + 561651 index - 10740 + 10725 child - 4569973 + 4563743 @@ -28344,52 +28816,52 @@ 1 2 - 233198 + 232880 2 3 - 25949 + 25913 3 4 - 29429 + 29388 4 5 - 37763 + 37712 5 7 - 47859 + 47794 7 11 - 43348 + 43289 11 14 - 41759 + 41702 14 19 - 45368 + 45306 19 53 - 42317 + 42260 53 251 - 15423 + 15402 @@ -28405,52 +28877,52 @@ 1 2 - 233069 + 232752 2 3 - 26078 + 26042 3 4 - 29472 + 29431 4 5 - 37849 + 37798 5 7 - 47645 + 47580 7 11 - 43778 + 43718 11 14 - 41673 + 41616 14 19 - 45153 + 45091 19 53 - 42317 + 42260 53 255 - 15380 + 15359 @@ -28466,57 +28938,57 @@ 1 2 - 2835 + 2831 2 4 - 816 + 815 4 22 - 816 + 815 22 31 - 816 + 815 31 53 - 859 + 858 53 108 - 816 + 815 110 218 - 816 + 815 223 328 - 816 + 815 328 581 - 816 + 815 653 2518 - 816 + 815 2884 12742 - 515 + 514 @@ -28532,57 +29004,57 @@ 1 2 - 1761 + 1759 2 3 - 1374 + 1372 3 8 - 816 + 815 8 31 - 859 + 858 31 41 - 859 + 858 41 97 - 816 + 815 97 161 - 816 + 815 164 314 - 859 + 858 318 386 - 816 + 815 435 1127 - 816 + 815 1139 6168 - 816 + 815 6500 @@ -28603,7 +29075,7 @@ 1 2 - 4569973 + 4563743 @@ -28619,12 +29091,12 @@ 1 2 - 4482115 + 4476006 2 13 - 87857 + 87737 @@ -28634,15 +29106,15 @@ enclosingfunction - 144782 + 144585 child - 144782 + 144585 parent - 89962 + 89840 @@ -28656,7 +29128,7 @@ 1 2 - 144782 + 144585 @@ -28672,22 +29144,22 @@ 1 2 - 62209 + 62124 2 3 - 5842 + 5834 3 4 - 19375 + 19349 4 37 - 2534 + 2531 @@ -28697,15 +29169,15 @@ derivations - 599880 + 599063 derivation - 599880 + 599063 sub - 572471 + 571690 index @@ -28713,11 +29185,11 @@ super - 296052 + 295648 location - 44637 + 44576 @@ -28731,7 +29203,7 @@ 1 2 - 599880 + 599063 @@ -28747,7 +29219,7 @@ 1 2 - 599880 + 599063 @@ -28763,7 +29235,7 @@ 1 2 - 599880 + 599063 @@ -28779,7 +29251,7 @@ 1 2 - 599880 + 599063 @@ -28795,12 +29267,12 @@ 1 2 - 551634 + 550882 2 9 - 20836 + 20808 @@ -28816,12 +29288,12 @@ 1 2 - 551634 + 550882 2 8 - 20836 + 20808 @@ -28837,12 +29309,12 @@ 1 2 - 551634 + 550882 2 9 - 20836 + 20808 @@ -28858,12 +29330,12 @@ 1 2 - 551634 + 550882 2 8 - 20836 + 20808 @@ -29018,12 +29490,12 @@ 1 2 - 283937 + 283550 2 1655 - 12115 + 12098 @@ -29039,12 +29511,12 @@ 1 2 - 283937 + 283550 2 1655 - 12115 + 12098 @@ -29060,12 +29532,12 @@ 1 2 - 295493 + 295091 2 4 - 558 + 557 @@ -29081,12 +29553,12 @@ 1 2 - 289522 + 289127 2 81 - 6530 + 6521 @@ -29102,22 +29574,22 @@ 1 2 - 33510 + 33464 2 5 - 3995 + 3990 5 22 - 3394 + 3389 23 383 - 3351 + 3346 388 @@ -29138,22 +29610,22 @@ 1 2 - 33510 + 33464 2 5 - 3995 + 3990 5 22 - 3394 + 3389 23 383 - 3351 + 3346 388 @@ -29174,7 +29646,7 @@ 1 2 - 44637 + 44576 @@ -29190,22 +29662,22 @@ 1 2 - 36303 + 36253 2 4 - 3308 + 3303 4 26 - 3479 + 3475 26 928 - 1546 + 1544 @@ -29215,11 +29687,11 @@ derspecifiers - 602115 + 601294 der_id - 599322 + 598505 spec_id @@ -29237,12 +29709,12 @@ 1 2 - 596529 + 595716 2 3 - 2792 + 2788 @@ -29283,15 +29755,15 @@ direct_base_offsets - 565940 + 565169 der_id - 565940 + 565169 offset - 644 + 643 @@ -29305,7 +29777,7 @@ 1 2 - 565940 + 565169 @@ -29366,11 +29838,11 @@ virtual_base_offsets - 7346 + 7336 sub - 7346 + 7336 super @@ -29392,7 +29864,7 @@ 1 2 - 7346 + 7336 @@ -29408,7 +29880,7 @@ 1 2 - 7346 + 7336 @@ -29502,23 +29974,23 @@ frienddecls - 883302 + 882098 id - 883302 + 882098 type_id - 53487 + 53415 decl_id - 98039 + 98034 location - 7690 + 7679 @@ -29532,7 +30004,7 @@ 1 2 - 883302 + 882098 @@ -29548,7 +30020,7 @@ 1 2 - 883302 + 882098 @@ -29564,7 +30036,7 @@ 1 2 - 883302 + 882098 @@ -29580,47 +30052,47 @@ 1 2 - 7776 + 7765 2 3 - 17614 + 17590 3 7 - 4511 + 4504 7 12 - 4339 + 4333 12 20 - 4596 + 4590 20 32 - 4167 + 4161 33 50 - 4768 + 4762 50 80 - 4768 + 4762 101 120 - 945 + 943 @@ -29636,47 +30108,47 @@ 1 2 - 7776 + 7765 2 3 - 17614 + 17590 3 7 - 4511 + 4504 7 12 - 4339 + 4333 12 20 - 4596 + 4590 20 32 - 4167 + 4161 33 50 - 4768 + 4762 50 80 - 4768 + 4762 101 120 - 945 + 943 @@ -29692,12 +30164,12 @@ 1 2 - 51769 + 51698 2 13 - 1718 + 1716 @@ -29713,32 +30185,32 @@ 1 2 - 60361 + 60537 2 3 - 7647 + 7508 3 8 - 7561 + 7551 8 15 - 7647 + 7636 15 40 - 7647 + 7636 40 164 - 7174 + 7164 @@ -29754,32 +30226,32 @@ 1 2 - 60361 + 60537 2 3 - 7647 + 7508 3 8 - 7561 + 7551 8 15 - 7647 + 7636 15 40 - 7647 + 7636 40 164 - 7174 + 7164 @@ -29795,12 +30267,12 @@ 1 2 - 97180 + 97176 2 5 - 859 + 858 @@ -29816,12 +30288,12 @@ 1 2 - 7217 + 7207 2 20371 - 472 + 471 @@ -29837,7 +30309,7 @@ 1 2 - 7518 + 7508 2 @@ -29858,11 +30330,11 @@ 1 2 - 7260 + 7250 2 - 2129 + 2132 429 @@ -29873,19 +30345,19 @@ comments - 11290145 + 11290480 id - 11290145 + 11290480 contents - 4299060 + 4299187 location - 11290145 + 11290480 @@ -29899,7 +30371,7 @@ 1 2 - 11290145 + 11290480 @@ -29915,7 +30387,7 @@ 1 2 - 11290145 + 11290480 @@ -29931,17 +30403,17 @@ 1 2 - 3932687 + 3932804 2 7 - 323182 + 323192 7 32784 - 43189 + 43191 @@ -29957,17 +30429,17 @@ 1 2 - 3932687 + 3932804 2 7 - 323182 + 323192 7 32784 - 43189 + 43191 @@ -29983,7 +30455,7 @@ 1 2 - 11290145 + 11290480 @@ -29999,7 +30471,7 @@ 1 2 - 11290145 + 11290480 @@ -30009,15 +30481,15 @@ commentbinding - 3316594 + 3316693 id - 3263044 + 3263141 element - 3173570 + 3173664 @@ -30031,12 +30503,12 @@ 1 2 - 3231291 + 3231387 2 85 - 31753 + 31754 @@ -30052,12 +30524,12 @@ 1 2 - 3030546 + 3030636 2 3 - 143023 + 143028 @@ -30067,15 +30539,15 @@ exprconv - 9603748 + 9605404 converted - 9603643 + 9605299 conversion - 9603748 + 9605404 @@ -30089,7 +30561,7 @@ 1 2 - 9603537 + 9605194 2 @@ -30110,7 +30582,7 @@ 1 2 - 9603748 + 9605404 @@ -30120,30 +30592,30 @@ compgenerated - 10714603 + 10711660 id - 10714603 + 10711660 synthetic_destructor_call - 1791768 + 1791216 element - 1334382 + 1333971 i - 415 + 414 destructor_call - 1791768 + 1791216 @@ -30157,17 +30629,17 @@ 1 2 - 888204 + 887931 2 3 - 438890 + 438755 3 19 - 7287 + 7285 @@ -30183,17 +30655,17 @@ 1 2 - 888204 + 887931 2 3 - 438890 + 438755 3 19 - 7287 + 7285 @@ -30341,7 +30813,7 @@ 1 2 - 1791768 + 1791216 @@ -30357,7 +30829,7 @@ 1 2 - 1791768 + 1791216 @@ -30367,15 +30839,15 @@ namespaces - 11095 + 11090 id - 11095 + 11090 name - 5865 + 5863 @@ -30389,7 +30861,7 @@ 1 2 - 11095 + 11090 @@ -30405,7 +30877,7 @@ 1 2 - 4795 + 4793 2 @@ -30436,15 +30908,15 @@ namespacembrs - 2026146 + 2024844 parentid - 10363 + 10359 memberid - 2026146 + 2024844 @@ -30458,7 +30930,7 @@ 1 2 - 1124 + 1123 2 @@ -30473,52 +30945,52 @@ 4 5 - 772 + 771 5 8 - 894 + 893 8 14 - 894 + 893 14 22 - 785 + 812 22 - 36 - 785 + 37 + 798 - 36 - 55 - 812 + 37 + 57 + 798 - 56 - 115 + 57 + 118 785 - 115 - 244 - 785 + 118 + 255 + 812 - 252 - 673 + 256 + 828 785 - 674 - 42760 - 392 + 829 + 42759 + 338 @@ -30534,7 +31006,7 @@ 1 2 - 2026146 + 2024844 @@ -30544,19 +31016,19 @@ exprparents - 19401302 + 19397156 expr_id - 19401302 + 19397156 child_index - 19980 + 19976 parent_id - 12904791 + 12902034 @@ -30570,7 +31042,7 @@ 1 2 - 19401302 + 19397156 @@ -30586,7 +31058,7 @@ 1 2 - 19401302 + 19397156 @@ -30602,7 +31074,7 @@ 1 2 - 3844 + 3843 2 @@ -30617,7 +31089,7 @@ 4 5 - 8951 + 8950 5 @@ -30653,7 +31125,7 @@ 1 2 - 3844 + 3843 2 @@ -30668,7 +31140,7 @@ 4 5 - 8951 + 8950 5 @@ -30704,17 +31176,17 @@ 1 2 - 7374643 + 7373067 2 3 - 5068855 + 5067772 3 712 - 461292 + 461193 @@ -30730,17 +31202,17 @@ 1 2 - 7374643 + 7373067 2 3 - 5068855 + 5067772 3 712 - 461292 + 461193 @@ -30750,22 +31222,22 @@ expr_isload - 6961485 + 6961691 expr_id - 6961485 + 6961691 conversionkinds - 6048224 + 6048227 expr_id - 6048224 + 6048227 kind @@ -30783,7 +31255,7 @@ 1 2 - 6048224 + 6048227 @@ -30827,8 +31299,8 @@ 1 - 5829769 - 5829770 + 5829772 + 5829773 1 @@ -30839,11 +31311,11 @@ iscall - 6219922 + 6218007 caller - 6219922 + 6218007 kind @@ -30861,7 +31333,7 @@ 1 2 - 6219922 + 6218007 @@ -30897,11 +31369,11 @@ numtemplatearguments - 723397 + 722411 expr_id - 723397 + 722411 num @@ -30919,7 +31391,7 @@ 1 2 - 723397 + 722411 @@ -31028,23 +31500,23 @@ namequalifiers - 3258064 + 3257061 id - 3258064 + 3257061 qualifiableelement - 3258064 + 3257061 qualifyingelement - 50413 + 50397 location - 591859 + 591677 @@ -31058,7 +31530,7 @@ 1 2 - 3258064 + 3257061 @@ -31074,7 +31546,7 @@ 1 2 - 3258064 + 3257061 @@ -31090,7 +31562,7 @@ 1 2 - 3258064 + 3257061 @@ -31106,7 +31578,7 @@ 1 2 - 3258064 + 3257061 @@ -31122,7 +31594,7 @@ 1 2 - 3258064 + 3257061 @@ -31138,7 +31610,7 @@ 1 2 - 3258064 + 3257061 @@ -31154,22 +31626,22 @@ 1 2 - 33831 + 33821 2 3 - 8417 + 8414 3 5 - 4266 + 4265 5 1601 - 3782 + 3780 6807 @@ -31190,22 +31662,22 @@ 1 2 - 33831 + 33821 2 3 - 8417 + 8414 3 5 - 4266 + 4265 5 1601 - 3782 + 3780 6807 @@ -31226,22 +31698,22 @@ 1 2 - 36714 + 36703 2 3 - 7587 + 7585 3 6 - 3782 + 3780 6 20057 - 2329 + 2328 @@ -31257,22 +31729,22 @@ 1 2 - 84982 + 84956 2 6 - 40565 + 40553 6 7 - 427774 + 427642 7 192 - 38536 + 38524 @@ -31288,22 +31760,22 @@ 1 2 - 84982 + 84956 2 6 - 40565 + 40553 6 7 - 427774 + 427642 7 192 - 38536 + 38524 @@ -31319,22 +31791,22 @@ 1 2 - 119345 + 119308 2 4 - 14252 + 14247 4 5 - 445209 + 445072 5 33 - 13053 + 13048 @@ -31344,15 +31816,15 @@ varbind - 8226118 + 8230420 expr - 8226118 + 8230420 var - 1047519 + 1047295 @@ -31366,7 +31838,7 @@ 1 2 - 8226118 + 8230420 @@ -31382,52 +31854,52 @@ 1 2 - 171069 + 171032 2 3 - 188187 + 188147 3 4 - 145251 + 145220 4 5 - 116319 + 116294 5 6 - 82924 + 82907 6 7 - 65638 + 65624 7 9 - 80595 + 80578 9 13 - 82139 + 81335 13 - 28 - 80286 + 27 + 78895 - 28 + 27 5137 - 35106 + 37259 @@ -31437,15 +31909,15 @@ funbind - 6230323 + 6228428 expr - 6227671 + 6225777 fun - 295537 + 295469 @@ -31459,12 +31931,12 @@ 1 2 - 6225019 + 6223126 2 3 - 2652 + 2651 @@ -31480,27 +31952,27 @@ 1 2 - 194319 + 194282 2 3 - 41557 + 41544 3 4 - 18403 + 18397 4 8 - 24376 + 24368 8 37798 - 16881 + 16876 @@ -31510,11 +31982,11 @@ expr_allocator - 57053 + 56976 expr - 57053 + 56976 func @@ -31536,7 +32008,7 @@ 1 2 - 57053 + 56976 @@ -31552,7 +32024,7 @@ 1 2 - 57053 + 56976 @@ -31636,11 +32108,11 @@ expr_deallocator - 67880 + 67787 expr - 67880 + 67787 func @@ -31662,7 +32134,7 @@ 1 2 - 67880 + 67787 @@ -31678,7 +32150,7 @@ 1 2 - 67880 + 67787 @@ -31772,26 +32244,26 @@ expr_cond_two_operand - 722 + 652 cond - 722 + 652 expr_cond_guard - 896445 + 895301 cond - 896445 + 895301 guard - 896445 + 895301 @@ -31805,7 +32277,7 @@ 1 2 - 896445 + 895301 @@ -31821,7 +32293,7 @@ 1 2 - 896445 + 895301 @@ -31831,15 +32303,15 @@ expr_cond_true - 896442 + 895297 cond - 896442 + 895297 true - 896442 + 895297 @@ -31853,7 +32325,7 @@ 1 2 - 896442 + 895297 @@ -31869,7 +32341,7 @@ 1 2 - 896442 + 895297 @@ -31879,15 +32351,15 @@ expr_cond_false - 896445 + 895301 cond - 896445 + 895301 false - 896445 + 895301 @@ -31901,7 +32373,7 @@ 1 2 - 896445 + 895301 @@ -31917,7 +32389,7 @@ 1 2 - 896445 + 895301 @@ -31927,15 +32399,15 @@ values - 14099266 + 13198558 id - 14099266 + 13198558 str - 128199 + 113721 @@ -31949,7 +32421,7 @@ 1 2 - 14099266 + 13198558 @@ -31965,27 +32437,27 @@ 1 2 - 88599 + 78593 2 3 - 17382 + 15419 3 7 - 11000 + 9741 7 - 359 - 9621 + 351 + 8529 - 360 - 562781 - 1593 + 352 + 660247 + 1436 @@ -31995,11 +32467,11 @@ valuetext - 6605852 + 6605760 id - 6605852 + 6605760 text @@ -32017,7 +32489,7 @@ 1 2 - 6605852 + 6605760 @@ -32047,7 +32519,7 @@ 7 - 593266 + 593269 27560 @@ -32058,15 +32530,15 @@ valuebind - 14484502 + 13543093 val - 14099266 + 13198558 expr - 14484502 + 13543093 @@ -32080,12 +32552,12 @@ 1 2 - 13735597 + 12873881 2 6 - 363669 + 324676 @@ -32101,7 +32573,7 @@ 1 2 - 14484502 + 13543093 @@ -32111,15 +32583,15 @@ fieldoffsets - 1441780 + 1441823 id - 1441780 + 1441823 byteoffset - 31021 + 31022 bitoffset @@ -32137,7 +32609,7 @@ 1 2 - 1441780 + 1441823 @@ -32153,7 +32625,7 @@ 1 2 - 1441780 + 1441823 @@ -32169,7 +32641,7 @@ 1 2 - 17804 + 17805 2 @@ -32215,7 +32687,7 @@ 1 2 - 30092 + 30093 2 @@ -32312,19 +32784,19 @@ bitfield - 27375 + 26910 id - 27375 + 26910 bits - 279 + 3363 declared_bits - 279 + 3363 @@ -32338,7 +32810,7 @@ 1 2 - 27375 + 26910 @@ -32354,7 +32826,7 @@ 1 2 - 27375 + 26910 @@ -32370,62 +32842,42 @@ 1 2 - 58 + 941 2 3 - 32 + 807 3 4 - 26 + 269 4 5 - 19 + 269 5 6 - 19 + 269 6 - 7 - 19 + 8 + 269 - 10 + 8 11 - 19 - - - 17 - 21 - 19 - - - 26 - 33 - 19 - - - 36 - 78 - 19 - - - 82 - 1081 - 19 + 269 - 2547 - 2548 - 6 + 12 + 115 + 269 @@ -32441,7 +32893,7 @@ 1 2 - 279 + 3363 @@ -32457,62 +32909,42 @@ 1 2 - 58 + 941 2 3 - 32 + 807 3 4 - 26 + 269 4 5 - 19 + 269 5 6 - 19 + 269 6 - 7 - 19 + 8 + 269 - 10 + 8 11 - 19 - - - 17 - 21 - 19 - - - 26 - 33 - 19 - - - 36 - 78 - 19 - - - 82 - 1081 - 19 + 269 - 2547 - 2548 - 6 + 12 + 115 + 269 @@ -32528,7 +32960,7 @@ 1 2 - 279 + 3363 @@ -32538,23 +32970,23 @@ initialisers - 2336673 + 2336742 init - 2336673 + 2336742 var - 983091 + 983120 expr - 2336673 + 2336742 location - 539035 + 539051 @@ -32568,7 +33000,7 @@ 1 2 - 2336673 + 2336742 @@ -32584,7 +33016,7 @@ 1 2 - 2336673 + 2336742 @@ -32600,7 +33032,7 @@ 1 2 - 2336673 + 2336742 @@ -32616,17 +33048,17 @@ 1 2 - 865934 + 865960 2 15 - 39245 + 39247 16 25 - 77910 + 77913 @@ -32642,17 +33074,17 @@ 1 2 - 865934 + 865960 2 15 - 39245 + 39247 16 25 - 77910 + 77913 @@ -32668,7 +33100,7 @@ 1 2 - 983082 + 983111 2 @@ -32689,7 +33121,7 @@ 1 2 - 2336673 + 2336742 @@ -32705,7 +33137,7 @@ 1 2 - 2336673 + 2336742 @@ -32721,7 +33153,7 @@ 1 2 - 2336673 + 2336742 @@ -32737,22 +33169,22 @@ 1 2 - 439415 + 439428 2 3 - 32732 + 32733 3 15 - 42316 + 42317 15 111551 - 24570 + 24571 @@ -32768,12 +33200,12 @@ 1 2 - 470682 + 470696 2 4 - 49306 + 49308 4 @@ -32794,22 +33226,22 @@ 1 2 - 439415 + 439428 2 3 - 32732 + 32733 3 15 - 42316 + 42317 15 111551 - 24570 + 24571 @@ -32819,26 +33251,26 @@ braced_initialisers - 74272 + 74270 init - 74272 + 74270 expr_ancestor - 1798179 + 1797625 exp - 1798179 + 1797625 ancestor - 899966 + 899689 @@ -32852,7 +33284,7 @@ 1 2 - 1798179 + 1797625 @@ -32868,17 +33300,17 @@ 1 2 - 18311 + 18305 2 3 - 870862 + 870593 3 19 - 10792 + 10789 @@ -32888,19 +33320,19 @@ exprs - 25135886 + 25136631 id - 25135886 + 25136631 kind - 1581 + 1448 location - 11535483 + 10563693 @@ -32914,7 +33346,7 @@ 1 2 - 25135886 + 25136631 @@ -32930,7 +33362,7 @@ 1 2 - 25135886 + 25136631 @@ -32946,72 +33378,72 @@ 1 10 - 119 + 109 12 18 - 119 + 109 26 100 - 119 + 109 105 305 - 119 + 109 323 - 417 - 119 + 467 + 109 - 466 - 876 - 119 + 607 + 893 + 109 - 892 + 906 1658 - 119 + 109 - 1680 + 1781 2386 - 119 + 109 3210 - 4067 - 119 + 4267 + 109 - 4299 + 4809 5185 - 119 + 109 5187 - 20392 - 119 + 22126 + 109 26363 50205 - 119 + 109 - 61894 - 137424 - 119 + 63936 + 144106 + 109 - 286226 - 286227 - 23 + 312846 + 312847 + 21 @@ -33027,72 +33459,72 @@ 1 9 - 119 + 109 9 15 - 119 + 109 17 96 - 119 + 109 99 222 - 119 + 109 260 383 - 119 + 109 408 594 - 119 + 109 599 749 - 119 + 109 864 1774 - 119 + 109 1812 2545 - 119 + 109 2623 2919 - 119 + 109 3419 4913 - 119 + 109 5471 21139 - 119 + 109 26254 76840 - 119 + 109 - 223932 - 223933 - 23 + 224078 + 224079 + 21 @@ -33108,22 +33540,22 @@ 1 2 - 9705673 + 8887663 2 3 - 898510 + 818573 3 16 - 866991 + 793537 16 71733 - 64307 + 63919 @@ -33139,17 +33571,17 @@ 1 2 - 9853416 + 9023795 2 3 - 844293 + 772932 3 32 - 837774 + 766964 @@ -33159,15 +33591,15 @@ expr_reuse - 907876 + 907596 reuse - 907876 + 907596 original - 907876 + 907596 value_category @@ -33185,7 +33617,7 @@ 1 2 - 907876 + 907596 @@ -33201,7 +33633,7 @@ 1 2 - 907876 + 907596 @@ -33217,7 +33649,7 @@ 1 2 - 907876 + 907596 @@ -33233,7 +33665,7 @@ 1 2 - 907876 + 907596 @@ -33285,19 +33717,19 @@ expr_types - 25135886 + 25136631 id - 25135886 + 25136631 typeid - 200113 + 213831 value_category - 47 + 43 @@ -33311,7 +33743,7 @@ 1 2 - 25135886 + 25136631 @@ -33327,7 +33759,7 @@ 1 2 - 25135886 + 25136631 @@ -33343,52 +33775,52 @@ 1 2 - 50525 + 52421 2 3 - 34227 + 35130 3 4 - 15819 + 14504 4 5 - 11696 + 14504 5 - 7 - 14045 + 8 + 17510 - 7 - 11 - 16658 + 8 + 14 + 17378 - 11 - 19 - 16130 + 14 + 24 + 16391 - 19 - 37 - 15124 + 24 + 49 + 16084 - 37 + 49 134 - 15076 + 16105 134 - 467220 - 10809 + 440938 + 13801 @@ -33404,12 +33836,12 @@ 1 2 - 168858 + 185591 2 3 - 31255 + 28240 @@ -33423,14 +33855,14 @@ 12 - 110354 - 110355 - 23 + 153383 + 153384 + 21 - 938347 - 938348 - 23 + 992173 + 992174 + 21 @@ -33444,14 +33876,14 @@ 12 - 2274 - 2275 - 23 + 2282 + 2283 + 21 - 7379 - 7380 - 23 + 8750 + 8751 + 21 @@ -33472,15 +33904,15 @@ new_allocated_type - 58256 + 58177 expr - 58256 + 58177 type_id - 34541 + 34494 @@ -33494,7 +33926,7 @@ 1 2 - 58256 + 58177 @@ -33510,17 +33942,17 @@ 1 2 - 14521 + 14501 2 3 - 18258 + 18234 3 19 - 1761 + 1759 @@ -34600,15 +35032,15 @@ condition_decl_bind - 438290 + 438155 expr - 438290 + 438155 decl - 438290 + 438155 @@ -34622,7 +35054,7 @@ 1 2 - 438290 + 438155 @@ -34638,7 +35070,7 @@ 1 2 - 438290 + 438155 @@ -34648,15 +35080,15 @@ typeid_bind - 60404 + 60322 expr - 60404 + 60322 type_id - 20106 + 20078 @@ -34670,7 +35102,7 @@ 1 2 - 60404 + 60322 @@ -34686,17 +35118,17 @@ 1 2 - 3737 + 3732 2 3 - 15853 + 15831 3 328 - 515 + 514 @@ -34744,7 +35176,7 @@ 1 2 - 27233 + 27234 2 @@ -34759,15 +35191,15 @@ sizeof_bind - 245235 + 241252 expr - 245235 + 241252 type_id - 12607 + 11189 @@ -34781,7 +35213,7 @@ 1 2 - 245235 + 241252 @@ -34797,42 +35229,42 @@ 1 2 - 4410 + 3901 2 3 - 3103 + 2758 3 4 - 1164 + 1021 4 5 - 1340 + 1136 5 6 - 318 + 294 6 7 - 1164 + 1061 7 - 42 - 949 + 40 + 848 - 42 - 5351 - 156 + 40 + 6061 + 167 @@ -34890,11 +35322,11 @@ lambdas - 17829 + 17805 expr - 17829 + 17805 default_capture @@ -34916,7 +35348,7 @@ 1 2 - 17829 + 17805 @@ -34932,7 +35364,7 @@ 1 2 - 17829 + 17805 @@ -35059,7 +35491,7 @@ location - 18603 + 18604 @@ -36145,7 +36577,7 @@ 1 2 - 17380 + 17381 2 @@ -36166,7 +36598,7 @@ 1 2 - 17857 + 17858 2 @@ -36213,7 +36645,7 @@ 1 2 - 18577 + 18578 2 @@ -36234,7 +36666,7 @@ 1 2 - 18603 + 18604 @@ -36244,11 +36676,11 @@ fold - 1374 + 1372 expr - 1374 + 1372 operator @@ -36270,7 +36702,7 @@ 1 2 - 1374 + 1372 @@ -36286,7 +36718,7 @@ 1 2 - 1374 + 1372 @@ -36365,11 +36797,11 @@ stmts - 6324268 + 6324455 id - 6324268 + 6324455 kind @@ -36377,7 +36809,7 @@ location - 2966233 + 2966321 @@ -36391,7 +36823,7 @@ 1 2 - 6324268 + 6324455 @@ -36407,7 +36839,7 @@ 1 2 - 6324268 + 6324455 @@ -36635,22 +37067,22 @@ 1 2 - 2357136 + 2357206 2 3 - 243530 + 243538 3 8 - 228596 + 228602 8 653 - 136969 + 136973 @@ -36666,12 +37098,12 @@ 1 2 - 2892635 + 2892721 2 8 - 73597 + 73599 @@ -36825,15 +37257,15 @@ if_then - 987521 + 987310 if_stmt - 987521 + 987310 then_id - 987521 + 987310 @@ -36847,7 +37279,7 @@ 1 2 - 987521 + 987310 @@ -36863,7 +37295,7 @@ 1 2 - 987521 + 987310 @@ -36873,15 +37305,15 @@ if_else - 468501 + 468357 if_stmt - 468501 + 468357 else_id - 468501 + 468357 @@ -36895,7 +37327,7 @@ 1 2 - 468501 + 468357 @@ -36911,7 +37343,7 @@ 1 2 - 468501 + 468357 @@ -36969,15 +37401,15 @@ constexpr_if_then - 72386 + 72388 constexpr_if_stmt - 72386 + 72388 then_id - 72386 + 72388 @@ -36991,7 +37423,7 @@ 1 2 - 72386 + 72388 @@ -37007,7 +37439,7 @@ 1 2 - 72386 + 72388 @@ -37017,15 +37449,15 @@ constexpr_if_else - 41978 + 41980 constexpr_if_stmt - 41978 + 41980 else_id - 41978 + 41980 @@ -37039,7 +37471,7 @@ 1 2 - 41978 + 41980 @@ -37055,7 +37487,7 @@ 1 2 - 41978 + 41980 @@ -37161,15 +37593,15 @@ while_body - 39540 + 39531 while_stmt - 39540 + 39531 body_id - 39540 + 39531 @@ -37183,7 +37615,7 @@ 1 2 - 39540 + 39531 @@ -37199,7 +37631,7 @@ 1 2 - 39540 + 39531 @@ -37209,15 +37641,15 @@ do_body - 258278 + 232977 do_stmt - 258278 + 232977 body_id - 258278 + 232977 @@ -37231,7 +37663,7 @@ 1 2 - 258278 + 232977 @@ -37247,7 +37679,7 @@ 1 2 - 258278 + 232977 @@ -37305,19 +37737,19 @@ switch_case - 896207 + 895931 switch_stmt - 441450 + 441314 index - 415 + 414 case_id - 896207 + 895931 @@ -37336,12 +37768,12 @@ 2 3 - 438359 + 438224 3 19 - 3067 + 3066 @@ -37362,12 +37794,12 @@ 2 3 - 438359 + 438224 3 19 - 3067 + 3066 @@ -37525,7 +37957,7 @@ 1 2 - 896207 + 895931 @@ -37541,7 +37973,7 @@ 1 2 - 896207 + 895931 @@ -37551,15 +37983,15 @@ switch_body - 441450 + 441314 switch_stmt - 441450 + 441314 body_id - 441450 + 441314 @@ -37573,7 +38005,7 @@ 1 2 - 441450 + 441314 @@ -37589,7 +38021,7 @@ 1 2 - 441450 + 441314 @@ -37599,15 +38031,15 @@ for_initialization - 73046 + 73031 for_stmt - 73046 + 73031 init_id - 73046 + 73031 @@ -37621,7 +38053,7 @@ 1 2 - 73046 + 73031 @@ -37637,7 +38069,7 @@ 1 2 - 73046 + 73031 @@ -37647,15 +38079,15 @@ for_condition - 76133 + 76117 for_stmt - 76133 + 76117 condition_id - 76133 + 76117 @@ -37669,7 +38101,7 @@ 1 2 - 76133 + 76117 @@ -37685,7 +38117,7 @@ 1 2 - 76133 + 76117 @@ -37695,15 +38127,15 @@ for_update - 73187 + 73171 for_stmt - 73187 + 73171 update_id - 73187 + 73171 @@ -37717,7 +38149,7 @@ 1 2 - 73187 + 73171 @@ -37733,7 +38165,7 @@ 1 2 - 73187 + 73171 @@ -37743,15 +38175,15 @@ for_body - 84159 + 84141 for_stmt - 84159 + 84141 body_id - 84159 + 84141 @@ -37765,7 +38197,7 @@ 1 2 - 84159 + 84141 @@ -37781,7 +38213,7 @@ 1 2 - 84159 + 84141 @@ -37791,11 +38223,11 @@ stmtparents - 5536444 + 5536608 id - 5536444 + 5536608 index @@ -37803,7 +38235,7 @@ parent - 2349075 + 2349145 @@ -37817,7 +38249,7 @@ 1 2 - 5536444 + 5536608 @@ -37833,7 +38265,7 @@ 1 2 - 5536444 + 5536608 @@ -37971,32 +38403,32 @@ 1 2 - 1349054 + 1349094 2 3 - 508948 + 508963 3 4 - 144286 + 144290 4 6 - 151883 + 151888 6 17 - 178120 + 178125 17 1943 - 16782 + 16783 @@ -38012,32 +38444,32 @@ 1 2 - 1349054 + 1349094 2 3 - 508948 + 508963 3 4 - 144286 + 144290 4 6 - 151883 + 151888 6 17 - 178120 + 178125 17 1943 - 16782 + 16783 @@ -38047,22 +38479,22 @@ ishandler - 47521 + 47512 block - 47521 + 47512 stmt_decl_bind - 730761 + 730621 stmt - 690291 + 690159 num @@ -38070,7 +38502,7 @@ decl - 730692 + 730552 @@ -38084,12 +38516,12 @@ 1 2 - 668063 + 667934 2 32 - 22228 + 22224 @@ -38105,12 +38537,12 @@ 1 2 - 668063 + 667934 2 32 - 22228 + 22224 @@ -38170,7 +38602,7 @@ 5480 - 170179 + 170178 8 @@ -38231,7 +38663,7 @@ 5480 - 170162 + 170161 8 @@ -38248,7 +38680,7 @@ 1 2 - 730668 + 730527 2 @@ -38269,7 +38701,7 @@ 1 2 - 730692 + 730552 @@ -38279,11 +38711,11 @@ stmt_decl_entry_bind - 730761 + 730621 stmt - 690291 + 690159 num @@ -38291,7 +38723,7 @@ decl_entry - 730761 + 730621 @@ -38305,12 +38737,12 @@ 1 2 - 668063 + 667934 2 32 - 22228 + 22224 @@ -38326,12 +38758,12 @@ 1 2 - 668063 + 667934 2 32 - 22228 + 22224 @@ -38391,7 +38823,7 @@ 5480 - 170179 + 170178 8 @@ -38452,7 +38884,7 @@ 5480 - 170179 + 170178 8 @@ -38469,7 +38901,7 @@ 1 2 - 730761 + 730621 @@ -38485,7 +38917,7 @@ 1 2 - 730761 + 730621 @@ -38495,15 +38927,15 @@ blockscope - 1838725 + 1838779 block - 1838725 + 1838779 enclosing - 1575685 + 1575731 @@ -38517,7 +38949,7 @@ 1 2 - 1838725 + 1838779 @@ -38533,17 +38965,17 @@ 1 2 - 1400369 + 1400411 2 3 - 129838 + 129842 3 28 - 45477 + 45478 @@ -38553,19 +38985,19 @@ jumpinfo - 347365 + 347303 id - 347365 + 347303 str - 28869 + 28864 target - 72506 + 72493 @@ -38579,7 +39011,7 @@ 1 2 - 347365 + 347303 @@ -38595,7 +39027,7 @@ 1 2 - 347365 + 347303 @@ -38611,12 +39043,12 @@ 2 3 - 13559 + 13557 3 4 - 6042 + 6041 4 @@ -38641,7 +39073,7 @@ 25 13711 - 1000 + 999 @@ -38657,7 +39089,7 @@ 1 2 - 23127 + 23122 2 @@ -38667,7 +39099,7 @@ 3 3321 - 2125 + 2124 @@ -38688,27 +39120,27 @@ 2 3 - 36111 + 36105 3 4 - 17584 + 17581 4 5 - 7359 + 7357 5 8 - 6400 + 6399 8 2124 - 5017 + 5016 @@ -38724,7 +39156,7 @@ 1 2 - 72506 + 72493 @@ -38734,11 +39166,11 @@ preprocdirects - 5704677 + 5704846 id - 5704677 + 5704846 kind @@ -38746,7 +39178,7 @@ location - 5701313 + 5701482 @@ -38760,7 +39192,7 @@ 1 2 - 5704677 + 5704846 @@ -38776,7 +39208,7 @@ 1 2 - 5704677 + 5704846 @@ -38924,7 +39356,7 @@ 1 2 - 5701179 + 5701348 26 @@ -38945,7 +39377,7 @@ 1 2 - 5701313 + 5701482 @@ -38955,15 +39387,15 @@ preprocpair - 1103827 + 1103860 begin - 846303 + 846328 elseelifend - 1103827 + 1103860 @@ -38977,12 +39409,12 @@ 1 2 - 601561 + 601579 2 3 - 235592 + 235599 3 @@ -39003,7 +39435,7 @@ 1 2 - 1103827 + 1103860 @@ -39013,41 +39445,41 @@ preproctrue - 388573 + 388584 branch - 388573 + 388584 preprocfalse - 273265 + 273273 branch - 273265 + 273273 preproctext - 4599773 + 4690463 id - 4599773 + 4690463 head - 3333547 + 3333242 body - 1948247 + 1948304 @@ -39061,7 +39493,7 @@ 1 2 - 4599773 + 4690463 @@ -39077,7 +39509,7 @@ 1 2 - 4599773 + 4690463 @@ -39093,12 +39525,12 @@ 1 2 - 3143970 + 3143794 2 740 - 189577 + 189448 @@ -39114,12 +39546,12 @@ 1 2 - 3253357 + 3253050 2 5 - 80190 + 80192 @@ -39135,17 +39567,17 @@ 1 2 - 1763648 + 1763700 2 6 - 146118 + 146122 6 - 11630 - 38480 + 12303 + 38481 @@ -39161,17 +39593,17 @@ 1 2 - 1767549 + 1767602 2 7 - 146522 + 146526 7 - 2980 - 34175 + 2977 + 34176 @@ -39181,15 +39613,15 @@ includes - 408672 + 408503 id - 408672 + 408503 included - 75280 + 75249 @@ -39203,7 +39635,7 @@ 1 2 - 408672 + 408503 @@ -39219,37 +39651,37 @@ 1 2 - 37254 + 37238 2 3 - 12111 + 12106 3 4 - 6353 + 6350 4 6 - 6868 + 6865 6 11 - 5798 + 5795 11 47 - 5649 + 5646 47 793 - 1246 + 1245 @@ -39259,15 +39691,15 @@ link_targets - 948 + 947 id - 948 + 947 binary - 948 + 947 @@ -39281,7 +39713,7 @@ 1 2 - 948 + 947 @@ -39297,7 +39729,7 @@ 1 2 - 948 + 947 @@ -39307,11 +39739,11 @@ link_parent - 38279006 + 38261191 element - 4869162 + 4866386 link_target @@ -39329,17 +39761,17 @@ 1 2 - 668749 + 667923 2 9 - 34026 + 33936 9 10 - 4166386 + 4164525 @@ -39358,48 +39790,48 @@ 42 - 97236 - 97237 + 97325 + 97326 42 - 97355 - 97356 + 97444 + 97445 42 - 97408 - 97409 + 97497 + 97498 42 - 97435 - 97436 + 97524 + 97525 42 - 97457 - 97458 + 97546 + 97547 42 - 97490 - 97491 + 97578 + 97579 42 - 99496 - 99497 + 99585 + 99586 42 - 102875 - 102876 + 102965 + 102966 42 - 104238 - 104239 + 104327 + 104328 42 diff --git a/cpp/ql/lib/upgrades/e594389175c098d7225683d0fd8cefcc47d84bc1/decltypes.ql b/cpp/ql/lib/upgrades/e594389175c098d7225683d0fd8cefcc47d84bc1/decltypes.ql new file mode 100644 index 000000000000..6ca3c7e89362 --- /dev/null +++ b/cpp/ql/lib/upgrades/e594389175c098d7225683d0fd8cefcc47d84bc1/decltypes.ql @@ -0,0 +1,11 @@ +class Type extends @type { + string toString() { none() } +} + +class Expr extends @expr { + string toString() { none() } +} + +from Type decltype, Expr expr, Type basetype, boolean parentheses +where decltypes(decltype, expr, basetype, parentheses) +select decltype, expr, 0, basetype, parentheses diff --git a/cpp/ql/lib/upgrades/e594389175c098d7225683d0fd8cefcc47d84bc1/old.dbscheme b/cpp/ql/lib/upgrades/e594389175c098d7225683d0fd8cefcc47d84bc1/old.dbscheme new file mode 100644 index 000000000000..e594389175c0 --- /dev/null +++ b/cpp/ql/lib/upgrades/e594389175c098d7225683d0fd8cefcc47d84bc1/old.dbscheme @@ -0,0 +1,2444 @@ + +/** + * An invocation of the compiler. Note that more than one file may be + * compiled per invocation. For example, this command compiles three + * source files: + * + * gcc -c f1.c f2.c f3.c + * + * The `id` simply identifies the invocation, while `cwd` is the working + * directory from which the compiler was invoked. + */ +compilations( + /** + * An invocation of the compiler. Note that more than one file may + * be compiled per invocation. For example, this command compiles + * three source files: + * + * gcc -c f1.c f2.c f3.c + */ + unique int id : @compilation, + string cwd : string ref +); + +/** + * The arguments that were passed to the extractor for a compiler + * invocation. If `id` is for the compiler invocation + * + * gcc -c f1.c f2.c f3.c + * + * then typically there will be rows for + * + * num | arg + * --- | --- + * 0 | *path to extractor* + * 1 | `--mimic` + * 2 | `/usr/bin/gcc` + * 3 | `-c` + * 4 | f1.c + * 5 | f2.c + * 6 | f3.c + */ +#keyset[id, num] +compilation_args( + int id : @compilation ref, + int num : int ref, + string arg : string ref +); + +/** + * Optionally, record the build mode for each compilation. + */ +compilation_build_mode( + unique int id : @compilation ref, + int mode : int ref +); + +/* +case @compilation_build_mode.mode of + 0 = @build_mode_none +| 1 = @build_mode_manual +| 2 = @build_mode_auto +; +*/ + +/** + * The source files that are compiled by a compiler invocation. + * If `id` is for the compiler invocation + * + * gcc -c f1.c f2.c f3.c + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | f1.c + * 1 | f2.c + * 2 | f3.c + * + * Note that even if those files `#include` headers, those headers + * do not appear as rows. + */ +#keyset[id, num] +compilation_compiling_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The time taken by the extractor for a compiler invocation. + * + * For each file `num`, there will be rows for + * + * kind | seconds + * ---- | --- + * 1 | CPU seconds used by the extractor frontend + * 2 | Elapsed seconds during the extractor frontend + * 3 | CPU seconds used by the extractor backend + * 4 | Elapsed seconds during the extractor backend + */ +#keyset[id, num, kind] +compilation_time( + int id : @compilation ref, + int num : int ref, + /* kind: + 1 = frontend_cpu_seconds + 2 = frontend_elapsed_seconds + 3 = extractor_cpu_seconds + 4 = extractor_elapsed_seconds + */ + int kind : int ref, + float seconds : float ref +); + +/** + * An error or warning generated by the extractor. + * The diagnostic message `diagnostic` was generated during compiler + * invocation `compilation`, and is the `file_number_diagnostic_number`th + * message generated while extracting the `file_number`th file of that + * invocation. + */ +#keyset[compilation, file_number, file_number_diagnostic_number] +diagnostic_for( + int diagnostic : @diagnostic ref, + int compilation : @compilation ref, + int file_number : int ref, + int file_number_diagnostic_number : int ref +); + +/** + * If extraction was successful, then `cpu_seconds` and + * `elapsed_seconds` are the CPU time and elapsed time (respectively) + * that extraction took for compiler invocation `id`. + */ +compilation_finished( + unique int id : @compilation ref, + float cpu_seconds : float ref, + float elapsed_seconds : float ref +); + + +/** + * External data, 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 +); + +/* +case @coroutine_placeholder_variable.kind of + 1 = @handle +| 2 = @promise +| 3 = @init_await_resume +; +*/ + +coroutine_placeholder_variable( + unique int placeholder_variable: @variable ref, + int kind: int ref, + int function: @function ref +) + +/** The `new` function used for allocating the coroutine state, if any. */ +coroutine_new( + unique int function: @function ref, + int new: @function ref +); + +/** The `delete` function used for deallocating the coroutine state, if any. */ +coroutine_delete( + unique int function: @function ref, + int delete: @function ref +); + +purefunctions(unique int id: @function ref); + +function_deleted(unique int id: @function ref); + +function_defaulted(unique int id: @function ref); + +function_prototyped(unique int id: @function ref) + +deduction_guide_for_class( + int id: @function ref, + int class_template: @usertype ref +) + +member_function_this_type( + unique int id: @function ref, + int this_type: @type ref +); + +#keyset[id, type_id] +fun_decls( + int id: @fun_decl, + int function: @function ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +fun_def(unique int id: @fun_decl ref); +fun_specialized(unique int id: @fun_decl ref); +fun_implicit(unique int id: @fun_decl ref); +fun_decl_specifiers( + int id: @fun_decl ref, + string name: string ref +) +#keyset[fun_decl, index] +fun_decl_throws( + int fun_decl: @fun_decl ref, + int index: int ref, + int type_id: @type ref +); +/* an empty throw specification is different from none */ +fun_decl_empty_throws(unique int fun_decl: @fun_decl ref); +fun_decl_noexcept( + int fun_decl: @fun_decl ref, + int constant: @expr ref +); +fun_decl_empty_noexcept(int fun_decl: @fun_decl ref); +fun_decl_typedef_type( + unique int fun_decl: @fun_decl ref, + int typedeftype_id: @usertype ref +); + +/* +case @fun_requires.kind of + 1 = @template_attached +| 2 = @function_attached +; +*/ + +fun_requires( + int id: @fun_decl ref, + int kind: int ref, + int constraint: @expr ref +); + +param_decl_bind( + unique int id: @var_decl ref, + int index: int ref, + int fun_decl: @fun_decl ref +); + +#keyset[id, type_id] +var_decls( + int id: @var_decl, + int variable: @variable ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +var_def(unique int id: @var_decl ref); +var_specialized(int id: @var_decl ref); +var_decl_specifiers( + int id: @var_decl ref, + string name: string ref +) +is_structured_binding(unique int id: @variable ref); +var_requires( + int id: @var_decl ref, + int constraint: @expr ref +); + +type_decls( + unique int id: @type_decl, + int type_id: @type ref, + int location: @location_default ref +); +type_def(unique int id: @type_decl ref); +type_decl_top( + unique int type_decl: @type_decl ref +); +type_requires( + int id: @type_decl ref, + int constraint: @expr ref +); + +namespace_decls( + unique int id: @namespace_decl, + int namespace_id: @namespace ref, + int location: @location_default ref, + int bodylocation: @location_default ref +); + +case @using.kind of + 1 = @using_declaration +| 2 = @using_directive +| 3 = @using_enum_declaration +; + +usings( + unique int id: @using, + int element_id: @element ref, + int location: @location_default ref, + int kind: int ref +); + +/** The element which contains the `using` declaration. */ +using_container( + int parent: @element ref, + int child: @using ref +); + +static_asserts( + unique int id: @static_assert, + int condition : @expr ref, + string message : string ref, + int location: @location_default ref, + int enclosing : @element ref +); + +// each function has an ordered list of parameters +#keyset[id, type_id] +#keyset[function, index, type_id] +params( + int id: @parameter, + int function: @parameterized_element ref, + int index: int ref, + int type_id: @type ref +); + +overrides( + int new: @function ref, + int old: @function ref +); + +#keyset[id, type_id] +membervariables( + int id: @membervariable, + int type_id: @type ref, + string name: string ref +); + +#keyset[id, type_id] +globalvariables( + int id: @globalvariable, + int type_id: @type ref, + string name: string ref +); + +#keyset[id, type_id] +localvariables( + int id: @localvariable, + int type_id: @type ref, + string name: string ref +); + +autoderivation( + unique int var: @variable ref, + int derivation_type: @type ref +); + +orphaned_variables( + int var: @localvariable ref, + int function: @function ref +) + +enumconstants( + unique int id: @enumconstant, + int parent: @usertype ref, + int index: int ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); + +@variable = @localscopevariable | @globalvariable | @membervariable; + +@localscopevariable = @localvariable | @parameter; + +/** + * Built-in types are the fundamental types, e.g., integral, floating, and void. + */ +case @builtintype.kind of + 1 = @errortype +| 2 = @unknowntype +| 3 = @void +| 4 = @boolean +| 5 = @char +| 6 = @unsigned_char +| 7 = @signed_char +| 8 = @short +| 9 = @unsigned_short +| 10 = @signed_short +| 11 = @int +| 12 = @unsigned_int +| 13 = @signed_int +| 14 = @long +| 15 = @unsigned_long +| 16 = @signed_long +| 17 = @long_long +| 18 = @unsigned_long_long +| 19 = @signed_long_long +// ... 20 Microsoft-specific __int8 +// ... 21 Microsoft-specific __int16 +// ... 22 Microsoft-specific __int32 +// ... 23 Microsoft-specific __int64 +| 24 = @float +| 25 = @double +| 26 = @long_double +| 27 = @complex_float // C99-specific _Complex float +| 28 = @complex_double // C99-specific _Complex double +| 29 = @complex_long_double // C99-specific _Complex long double +| 30 = @imaginary_float // C99-specific _Imaginary float +| 31 = @imaginary_double // C99-specific _Imaginary double +| 32 = @imaginary_long_double // C99-specific _Imaginary long double +| 33 = @wchar_t // Microsoft-specific +| 34 = @decltype_nullptr // C++11 +| 35 = @int128 // __int128 +| 36 = @unsigned_int128 // unsigned __int128 +| 37 = @signed_int128 // signed __int128 +| 38 = @float128 // __float128 +| 39 = @complex_float128 // _Complex __float128 +| 40 = @decimal32 // _Decimal32 +| 41 = @decimal64 // _Decimal64 +| 42 = @decimal128 // _Decimal128 +| 43 = @char16_t +| 44 = @char32_t +| 45 = @std_float32 // _Float32 +| 46 = @float32x // _Float32x +| 47 = @std_float64 // _Float64 +| 48 = @float64x // _Float64x +| 49 = @std_float128 // _Float128 +// ... 50 _Float128x +| 51 = @char8_t +| 52 = @float16 // _Float16 +| 53 = @complex_float16 // _Complex _Float16 +| 54 = @fp16 // __fp16 +| 55 = @std_bfloat16 // __bf16 +| 56 = @std_float16 // std::float16_t +| 57 = @complex_std_float32 // _Complex _Float32 +| 58 = @complex_float32x // _Complex _Float32x +| 59 = @complex_std_float64 // _Complex _Float64 +| 60 = @complex_float64x // _Complex _Float64x +| 61 = @complex_std_float128 // _Complex _Float128 +; + +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 +| 0 = @unknown_usertype +| 1 = @struct +| 2 = @class +| 3 = @union +| 4 = @enum +// ... 5 = @typedef deprecated // classic C: typedef typedef type name +// ... 6 = @template deprecated +| 7 = @template_parameter +| 8 = @template_template_parameter +| 9 = @proxy_class // a proxy class associated with a template parameter +// ... 10 objc_class deprecated +// ... 11 objc_protocol deprecated +// ... 12 objc_category deprecated +| 13 = @scoped_enum +// ... 14 = @using_alias deprecated // a using name = type style typedef +| 15 = @template_struct +| 16 = @template_class +| 17 = @template_union +| 18 = @alias +; +*/ + +usertypes( + unique int id: @usertype, + string name: string ref, + int kind: int ref +); + +usertypesize( + unique int id: @usertype ref, + int size: int ref, + int alignment: int ref +); + +usertype_final(unique int id: @usertype ref); + +usertype_uuid( + unique int id: @usertype ref, + string uuid: string ref +); + +/* +case @usertype.alias_kind of +| 0 = @typedef +| 1 = @alias +*/ + +usertype_alias_kind( + int id: @usertype ref, + int alias_kind: int ref +) + +nontype_template_parameters( + int id: @expr ref +); + +type_template_type_constraint( + int id: @usertype ref, + int constraint: @expr ref +); + +mangled_name( + unique int id: @declaration ref, + int mangled_name : @mangledname, + boolean is_complete: boolean ref +); + +is_pod_class(unique int id: @usertype ref); +is_standard_layout_class(unique int id: @usertype ref); + +is_complete(unique int id: @usertype ref); + +is_class_template(unique int id: @usertype ref); +class_instantiation( + int to: @usertype ref, + int from: @usertype ref +); +class_template_argument( + int type_id: @usertype ref, + int index: int ref, + int arg_type: @type ref +); +class_template_argument_value( + int type_id: @usertype ref, + int index: int ref, + int arg_value: @expr ref +); + +@user_or_decltype = @usertype | @decltype; + +is_proxy_class_for( + unique int id: @usertype ref, + int templ_param_id: @user_or_decltype ref +); + +type_mentions( + unique int id: @type_mention, + int type_id: @type ref, + int location: @location ref, + // a_symbol_reference_kind from the frontend. + int kind: int ref +); + +is_function_template(unique int id: @function ref); +function_instantiation( + unique int to: @function ref, + int from: @function ref +); +function_template_argument( + int function_id: @function ref, + int index: int ref, + int arg_type: @type ref +); +function_template_argument_value( + int function_id: @function ref, + int index: int ref, + int arg_value: @expr ref +); + +is_variable_template(unique int id: @variable ref); +variable_instantiation( + unique int to: @variable ref, + int from: @variable ref +); +variable_template_argument( + int variable_id: @variable ref, + int index: int ref, + int arg_type: @type ref +); +variable_template_argument_value( + int variable_id: @variable ref, + int index: int ref, + int arg_value: @expr ref +); + +template_template_instantiation( + int to: @usertype ref, + int from: @usertype ref +); +template_template_argument( + int type_id: @usertype ref, + int index: int ref, + int arg_type: @type ref +); +template_template_argument_value( + int type_id: @usertype ref, + int index: int ref, + int arg_value: @expr ref +); + +@concept = @concept_template | @concept_id; + +concept_templates( + unique int concept_id: @concept_template, + string name: string ref, + int location: @location_default ref +); +concept_instantiation( + unique int to: @concept_id ref, + int from: @concept_template ref +); +is_type_constraint(int concept_id: @concept_id ref); +concept_template_argument( + int concept_id: @concept ref, + int index: int ref, + int arg_type: @type ref +); +concept_template_argument_value( + int concept_id: @concept ref, + int index: int ref, + int arg_value: @expr ref +); + +routinetypes( + unique int id: @routinetype, + int return_type: @type ref +); + +routinetypeargs( + int routine: @routinetype ref, + int index: int ref, + int type_id: @type ref +); + +ptrtomembers( + unique int id: @ptrtomember, + int type_id: @type ref, + int class_id: @type ref +); + +/* + specifiers for types, functions, and variables + + "public", + "protected", + "private", + + "const", + "volatile", + "static", + + "pure", + "virtual", + "sealed", // Microsoft + "__interface", // Microsoft + "inline", + "explicit", + + "near", // near far extension + "far", // near far extension + "__ptr32", // Microsoft + "__ptr64", // Microsoft + "__sptr", // Microsoft + "__uptr", // Microsoft + "dllimport", // Microsoft + "dllexport", // Microsoft + "thread", // Microsoft + "naked", // Microsoft + "microsoft_inline", // Microsoft + "forceinline", // Microsoft + "selectany", // Microsoft + "nothrow", // Microsoft + "novtable", // Microsoft + "noreturn", // Microsoft + "noinline", // Microsoft + "noalias", // Microsoft + "restrict", // Microsoft +*/ + +specifiers( + unique int id: @specifier, + unique string str: string ref +); + +typespecifiers( + int type_id: @type ref, + int spec_id: @specifier ref +); + +funspecifiers( + int func_id: @function ref, + int spec_id: @specifier ref +); + +varspecifiers( + int var_id: @accessible ref, + int spec_id: @specifier ref +); + +explicit_specifier_exprs( + unique int func_id: @function ref, + int constant: @expr ref +) + +attributes( + unique int id: @attribute, + int kind: int ref, + string name: string ref, + string name_space: string ref, + int location: @location_default ref +); + +case @attribute.kind of + 0 = @gnuattribute +| 1 = @stdattribute +| 2 = @declspec +| 3 = @msattribute +| 4 = @alignas +// ... 5 @objc_propertyattribute deprecated +; + +attribute_args( + unique int id: @attribute_arg, + int kind: int ref, + int attribute: @attribute ref, + int index: int ref, + int location: @location_default ref +); + +case @attribute_arg.kind of + 0 = @attribute_arg_empty +| 1 = @attribute_arg_token +| 2 = @attribute_arg_constant +| 3 = @attribute_arg_type +| 4 = @attribute_arg_constant_expr +| 5 = @attribute_arg_expr +; + +attribute_arg_value( + unique int arg: @attribute_arg ref, + string value: string ref +); +attribute_arg_type( + unique int arg: @attribute_arg ref, + int type_id: @type ref +); +attribute_arg_constant( + unique int arg: @attribute_arg ref, + int constant: @expr ref +) +attribute_arg_expr( + unique int arg: @attribute_arg ref, + int expr: @expr ref +) +attribute_arg_name( + unique int arg: @attribute_arg ref, + string name: string ref +); + +typeattributes( + int type_id: @type ref, + int spec_id: @attribute ref +); + +funcattributes( + int func_id: @function ref, + int spec_id: @attribute ref +); + +varattributes( + int var_id: @accessible ref, + int spec_id: @attribute ref +); + +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 + | @concept_template; + +@member = @membervariable + | @function + | @declaredtype + | @enumconstant; + +@locatable = @diagnostic + | @declaration + | @ppd_include + | @ppd_define + | @macroinvocation + /*| @funcall*/ + | @xmllocatable + | @attribute + | @attribute_arg; + +@namedscope = @namespace | @usertype; + +@element = @locatable + | @file + | @folder + | @specifier + | @type + | @expr + | @namespace + | @initialiser + | @stmt + | @derivation + | @comment + | @preprocdirect + | @fun_decl + | @var_decl + | @type_decl + | @namespace_decl + | @using + | @namequalifier + | @specialnamequalifyingelement + | @static_assert + | @type_mention + | @lambdacapture; + +@exprparent = @element; + +comments( + unique int id: @comment, + string contents: string ref, + int location: @location_default ref +); + +commentbinding( + int id: @comment ref, + int element: @element ref +); + +exprconv( + int converted: @expr ref, + unique int conversion: @expr ref +); + +compgenerated(unique int id: @element ref); + +/** + * `destructor_call` destructs the `i`'th entity that should be + * destructed following `element`. Note that entities should be + * destructed in reverse construction order, so for a given `element` + * these should be called from highest to lowest `i`. + */ +#keyset[element, destructor_call] +#keyset[element, i] +synthetic_destructor_call( + int element: @element ref, + int i: int ref, + int destructor_call: @routineexpr ref +); + +namespaces( + unique int id: @namespace, + string name: string ref +); + +namespace_inline( + unique int id: @namespace ref +); + +namespacembrs( + int parentid: @namespace ref, + unique int memberid: @namespacembr ref +); + +@namespacembr = @declaration | @namespace; + +exprparents( + int expr_id: @expr ref, + int child_index: int ref, + int parent_id: @exprparent ref +); + +expr_isload(unique int expr_id: @expr ref); + +@cast = @c_style_cast + | @const_cast + | @dynamic_cast + | @reinterpret_cast + | @static_cast + ; + +/* +case @conversion.kind of + 0 = @simple_conversion // a numeric conversion, qualification conversion, or a reinterpret_cast +| 1 = @bool_conversion // conversion to 'bool' +| 2 = @base_class_conversion // a derived-to-base conversion +| 3 = @derived_class_conversion // a base-to-derived conversion +| 4 = @pm_base_class_conversion // a derived-to-base conversion of a pointer to member +| 5 = @pm_derived_class_conversion // a base-to-derived conversion of a pointer to member +| 6 = @glvalue_adjust // an adjustment of the type of a glvalue +| 7 = @prvalue_adjust // an adjustment of the type of a prvalue +; +*/ +/** + * Describes the semantics represented by a cast expression. This is largely + * independent of the source syntax of the cast, so it is separate from the + * regular expression kind. + */ +conversionkinds( + unique int expr_id: @cast ref, + int kind: int ref +); + +@conversion = @cast + | @array_to_pointer + | @parexpr + | @reference_to + | @ref_indirect + | @temp_init + | @c11_generic + ; + +/* +case @funbindexpr.kind of + 0 = @normal_call // a normal call +| 1 = @virtual_call // a virtual call +| 2 = @adl_call // a call whose target is only found by ADL +; +*/ +iscall( + unique int caller: @funbindexpr ref, + int kind: int ref +); + +numtemplatearguments( + unique int expr_id: @expr ref, + int num: int ref +); + +specialnamequalifyingelements( + unique int id: @specialnamequalifyingelement, + unique string name: string ref +); + +@namequalifiableelement = @expr | @namequalifier; +@namequalifyingelement = @namespace + | @specialnamequalifyingelement + | @usertype; + +namequalifiers( + unique int id: @namequalifier, + unique int qualifiableelement: @namequalifiableelement ref, + int qualifyingelement: @namequalifyingelement ref, + int location: @location_default ref +); + +varbind( + int expr: @varbindexpr ref, + int var: @accessible ref +); + +funbind( + int expr: @funbindexpr ref, + int fun: @function ref +); + +@any_new_expr = @new_expr + | @new_array_expr; + +@new_or_delete_expr = @any_new_expr + | @delete_expr + | @delete_array_expr; + +@prefix_crement_expr = @preincrexpr | @predecrexpr; + +@postfix_crement_expr = @postincrexpr | @postdecrexpr; + +@increment_expr = @preincrexpr | @postincrexpr; + +@decrement_expr = @predecrexpr | @postdecrexpr; + +@crement_expr = @increment_expr | @decrement_expr; + +@un_arith_op_expr = @arithnegexpr + | @unaryplusexpr + | @conjugation + | @realpartexpr + | @imagpartexpr + | @crement_expr + ; + +@un_bitwise_op_expr = @complementexpr; + +@un_log_op_expr = @notexpr; + +@un_op_expr = @address_of + | @indirect + | @un_arith_op_expr + | @un_bitwise_op_expr + | @builtinaddressof + | @vec_fill + | @un_log_op_expr + | @co_await + | @co_yield + ; + +@bin_log_op_expr = @andlogicalexpr | @orlogicalexpr; + +@cmp_op_expr = @eq_op_expr | @rel_op_expr; + +@eq_op_expr = @eqexpr | @neexpr; + +@rel_op_expr = @gtexpr + | @ltexpr + | @geexpr + | @leexpr + | @spaceshipexpr + ; + +@bin_bitwise_op_expr = @lshiftexpr + | @rshiftexpr + | @andexpr + | @orexpr + | @xorexpr + ; + +@p_arith_op_expr = @paddexpr + | @psubexpr + | @pdiffexpr + ; + +@bin_arith_op_expr = @addexpr + | @subexpr + | @mulexpr + | @divexpr + | @remexpr + | @jmulexpr + | @jdivexpr + | @fjaddexpr + | @jfaddexpr + | @fjsubexpr + | @jfsubexpr + | @minexpr + | @maxexpr + | @p_arith_op_expr + ; + +@bin_op_expr = @bin_arith_op_expr + | @bin_bitwise_op_expr + | @cmp_op_expr + | @bin_log_op_expr + ; + +@op_expr = @un_op_expr + | @bin_op_expr + | @assign_expr + | @conditionalexpr + ; + +@assign_arith_expr = @assignaddexpr + | @assignsubexpr + | @assignmulexpr + | @assigndivexpr + | @assignremexpr + ; + +@assign_bitwise_expr = @assignandexpr + | @assignorexpr + | @assignxorexpr + | @assignlshiftexpr + | @assignrshiftexpr + ; + +@assign_pointer_expr = @assignpaddexpr + | @assignpsubexpr + ; + +@assign_op_expr = @assign_arith_expr + | @assign_bitwise_expr + | @assign_pointer_expr + ; + +@assign_expr = @assignexpr | @assign_op_expr | @blockassignexpr + +/* + Binary encoding of the allocator form. + + case @allocator.form of + 0 = plain + | 1 = alignment + ; +*/ + +/** + * The allocator function associated with a `new` or `new[]` expression. + * The `form` column specified whether the allocation call contains an alignment + * argument. + */ +expr_allocator( + unique int expr: @any_new_expr ref, + int func: @function ref, + int form: int ref +); + +/* + Binary encoding of the deallocator form. + + case @deallocator.form of + 0 = plain + | 1 = size + | 2 = alignment + | 4 = destroying_delete + ; +*/ + +/** + * The deallocator function associated with a `delete`, `delete[]`, `new`, or + * `new[]` expression. For a `new` or `new[]` expression, the deallocator is the + * one used to free memory if the initialization throws an exception. + * The `form` column specifies whether the deallocation call contains a size + * argument, and alignment argument, or both. + */ +expr_deallocator( + unique int expr: @new_or_delete_expr ref, + int func: @function ref, + int form: int ref +); + +/** + * Holds if the `@conditionalexpr` is of the two operand form + * `guard ? : false`. + */ +expr_cond_two_operand( + unique int cond: @conditionalexpr ref +); + +/** + * The guard of `@conditionalexpr` `guard ? true : false` + */ +expr_cond_guard( + unique int cond: @conditionalexpr ref, + int guard: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` holds. For the two operand form + * `guard ?: false` consider using `expr_cond_guard` instead. + */ +expr_cond_true( + unique int cond: @conditionalexpr ref, + int true: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` does not hold. + */ +expr_cond_false( + unique int cond: @conditionalexpr ref, + int false: @expr ref +); + +/** A string representation of the value. */ +values( + unique int id: @value, + string str: string ref +); + +/** The actual text in the source code for the value, if any. */ +valuetext( + unique int id: @value ref, + string text: string ref +); + +valuebind( + int val: @value ref, + unique int expr: @expr ref +); + +fieldoffsets( + unique int id: @variable ref, + int byteoffset: int ref, + int bitoffset: int ref +); + +bitfield( + unique int id: @variable ref, + int bits: int ref, + int declared_bits: int ref +); + +/* TODO +memberprefix( + int member: @expr ref, + int prefix: @expr ref +); +*/ + +/* + kind(1) = mbrcallexpr + kind(2) = mbrptrcallexpr + kind(3) = mbrptrmbrcallexpr + kind(4) = ptrmbrptrmbrcallexpr + kind(5) = mbrreadexpr // x.y + kind(6) = mbrptrreadexpr // p->y + kind(7) = mbrptrmbrreadexpr // x.*pm + kind(8) = mbrptrmbrptrreadexpr // x->*pm + kind(9) = staticmbrreadexpr // static x.y + kind(10) = staticmbrptrreadexpr // static p->y +*/ +/* TODO +memberaccess( + int member: @expr ref, + int kind: int ref +); +*/ + +initialisers( + unique int init: @initialiser, + int var: @accessible ref, + unique int expr: @expr ref, + int location: @location_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 +| 364 = @istriviallycopyassignable +| 365 = @isassignablenopreconditioncheck +| 366 = @referencebindstotemporary +| 367 = @issameas +| 368 = @builtinhasattribute +| 369 = @ispointerinterconvertiblewithclass +| 370 = @builtinispointerinterconvertiblewithclass +| 371 = @iscorrespondingmember +| 372 = @builtiniscorrespondingmember +| 373 = @isboundedarray +| 374 = @isunboundedarray +| 375 = @isreferenceable +| 378 = @isnothrowconvertible +| 379 = @referenceconstructsfromtemporary +| 380 = @referenceconvertsfromtemporary +| 381 = @isconvertible +| 382 = @isvalidwinrttype +| 383 = @iswinclass +| 384 = @iswininterface +| 385 = @istriviallyequalitycomparable +| 386 = @isscopedenum +| 387 = @istriviallyrelocatable +| 388 = @datasizeof +| 389 = @c11_generic +| 390 = @requires_expr +| 391 = @nested_requirement +| 392 = @compound_requirement +| 393 = @concept_id +; + +@var_args_expr = @vastartexpr + | @vaendexpr + | @vaargexpr + | @vacopyexpr + ; + +@builtin_op = @var_args_expr + | @noopexpr + | @offsetofexpr + | @intaddrexpr + | @hasassignexpr + | @hascopyexpr + | @hasnothrowassign + | @hasnothrowconstr + | @hasnothrowcopy + | @hastrivialassign + | @hastrivialconstr + | @hastrivialcopy + | @hastrivialdestructor + | @hasuserdestr + | @hasvirtualdestr + | @isabstractexpr + | @isbaseofexpr + | @isclassexpr + | @isconvtoexpr + | @isemptyexpr + | @isenumexpr + | @ispodexpr + | @ispolyexpr + | @isunionexpr + | @typescompexpr + | @builtinshufflevector + | @builtinconvertvector + | @builtinaddressof + | @istriviallyconstructibleexpr + | @isdestructibleexpr + | @isnothrowdestructibleexpr + | @istriviallydestructibleexpr + | @istriviallyassignableexpr + | @isnothrowassignableexpr + | @istrivialexpr + | @isstandardlayoutexpr + | @istriviallycopyableexpr + | @isliteraltypeexpr + | @hastrivialmoveconstructorexpr + | @hastrivialmoveassignexpr + | @hasnothrowmoveassignexpr + | @isconstructibleexpr + | @isnothrowconstructibleexpr + | @hasfinalizerexpr + | @isdelegateexpr + | @isinterfaceclassexpr + | @isrefarrayexpr + | @isrefclassexpr + | @issealedexpr + | @issimplevalueclassexpr + | @isvalueclassexpr + | @isfinalexpr + | @builtinchooseexpr + | @builtincomplex + | @isassignable + | @isaggregate + | @hasuniqueobjectrepresentations + | @builtinbitcast + | @builtinshuffle + | @issame + | @isfunction + | @islayoutcompatible + | @ispointerinterconvertiblebaseof + | @isarray + | @arrayrank + | @arrayextent + | @isarithmetic + | @iscompletetype + | @iscompound + | @isconst + | @isfloatingpoint + | @isfundamental + | @isintegral + | @islvaluereference + | @ismemberfunctionpointer + | @ismemberobjectpointer + | @ismemberpointer + | @isobject + | @ispointer + | @isreference + | @isrvaluereference + | @isscalar + | @issigned + | @isunsigned + | @isvoid + | @isvolatile + | @istriviallycopyassignable + | @isassignablenopreconditioncheck + | @referencebindstotemporary + | @issameas + | @builtinhasattribute + | @ispointerinterconvertiblewithclass + | @builtinispointerinterconvertiblewithclass + | @iscorrespondingmember + | @builtiniscorrespondingmember + | @isboundedarray + | @isunboundedarray + | @isreferenceable + | @isnothrowconvertible + | @referenceconstructsfromtemporary + | @referenceconvertsfromtemporary + | @isconvertible + | @isvalidwinrttype + | @iswinclass + | @iswininterface + | @istriviallyequalitycomparable + | @isscopedenum + | @istriviallyrelocatable + ; + +compound_requirement_is_noexcept( + int expr: @compound_requirement ref +); + +new_allocated_type( + unique int expr: @new_expr ref, + int type_id: @type ref +); + +new_array_allocated_type( + unique int expr: @new_array_expr ref, + int type_id: @type ref +); + +/** + * The field being initialized by an initializer expression within an aggregate + * initializer for a class/struct/union. Position is used to sort repeated initializers. + */ +#keyset[aggregate, position] +aggregate_field_init( + int aggregate: @aggregateliteral ref, + int initializer: @expr ref, + int field: @membervariable ref, + int position: int ref +); + +/** + * 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 +); + +@sizeof_or_alignof = @runtime_sizeof | @runtime_alignof | @datasizeof | @sizeof_pack; + +sizeof_bind( + unique int expr: @sizeof_or_alignof ref, + int type_id: @type ref +); + +code_block( + unique int block: @literal ref, + unique int routine: @function ref +); + +lambdas( + unique int expr: @lambdaexpr ref, + string default_capture: string ref, + boolean has_explicit_return_type: boolean ref +); + +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 +| 38 = @stmt_consteval_if +| 39 = @stmt_not_consteval_if +; + +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 +); + +@stmt_consteval_or_not_consteval_if = @stmt_consteval_if | @stmt_not_consteval_if; + +consteval_if_then( + unique int constexpr_if_stmt: @stmt_consteval_or_not_consteval_if ref, + int then_id: @stmt ref +); + +consteval_if_else( + unique int constexpr_if_stmt: @stmt_consteval_or_not_consteval_if ref, + int else_id: @stmt ref +); + +while_body( + unique int while_stmt: @stmt_while ref, + int body_id: @stmt ref +); + +do_body( + unique int do_stmt: @stmt_end_test_while ref, + int body_id: @stmt ref +); + +switch_initialization( + unique int switch_stmt: @stmt_switch ref, + int init_id: @stmt ref +); + +#keyset[switch_stmt, index] +switch_case( + int switch_stmt: @stmt_switch ref, + int index: int ref, + int case_id: @stmt_switch_case ref +); + +switch_body( + unique int switch_stmt: @stmt_switch ref, + int body_id: @stmt ref +); + +@stmt_for_or_range_based_for = @stmt_for + | @stmt_range_based_for; + +for_initialization( + unique int for_stmt: @stmt_for_or_range_based_for ref, + int init_id: @stmt ref +); + +for_condition( + unique int for_stmt: @stmt_for ref, + int condition_id: @expr ref +); + +for_update( + unique int for_stmt: @stmt_for ref, + int update_id: @expr ref +); + +for_body( + unique int for_stmt: @stmt_for ref, + int body_id: @stmt ref +); + +@stmtparent = @stmt | @expr_stmt ; +stmtparents( + unique int id: @stmt ref, + int index: int ref, + int parent: @stmtparent ref +); + +ishandler(unique int block: @stmt_block ref); + +@cfgnode = @stmt | @expr | @function | @initialiser ; + +stmt_decl_bind( + int stmt: @stmt_decl ref, + int num: int ref, + int decl: @declaration ref +); + +stmt_decl_entry_bind( + int stmt: @stmt_decl ref, + int num: int ref, + int decl_entry: @element ref +); + +@parameterized_element = @function | @stmt_block | @requires_expr; + +blockscope( + unique int block: @stmt_block ref, + int enclosing: @parameterized_element ref +); + +@jump = @stmt_goto | @stmt_break | @stmt_continue; + +@jumporlabel = @jump | @stmt_label | @literal; + +jumpinfo( + unique int id: @jumporlabel ref, + string str: string ref, + int target: @stmt ref +); + +preprocdirects( + unique int id: @preprocdirect, + int kind: int ref, + int location: @location_default ref +); +case @preprocdirect.kind of + 0 = @ppd_if +| 1 = @ppd_ifdef +| 2 = @ppd_ifndef +| 3 = @ppd_elif +| 4 = @ppd_else +| 5 = @ppd_endif +| 6 = @ppd_plain_include +| 7 = @ppd_define +| 8 = @ppd_undef +| 9 = @ppd_line +| 10 = @ppd_error +| 11 = @ppd_pragma +| 12 = @ppd_objc_import +| 13 = @ppd_include_next +| 14 = @ppd_ms_import +| 15 = @ppd_elifdef +| 16 = @ppd_elifndef +| 18 = @ppd_warning +; + +@ppd_include = @ppd_plain_include | @ppd_objc_import | @ppd_include_next | @ppd_ms_import; + +@ppd_branch = @ppd_if | @ppd_ifdef | @ppd_ifndef | @ppd_elif | @ppd_elifdef | @ppd_elifndef; + +preprocpair( + int begin : @ppd_branch ref, + int elseelifend : @preprocdirect ref +); + +preproctrue(int branch : @ppd_branch ref); +preprocfalse(int branch : @ppd_branch ref); + +preproctext( + unique int id: @preprocdirect ref, + string head: string ref, + string body: string ref +); + +includes( + unique int id: @ppd_include ref, + int included: @file ref +); + +link_targets( + int id: @link_target, + int binary: @file ref +); + +link_parent( + int element : @element ref, + int link_target : @link_target ref +); + +/* XML Files */ + +xmlEncoding(unique int id: @file ref, string encoding: string ref); + +xmlDTDs( + unique int id: @xmldtd, + string root: string ref, + string publicId: string ref, + string systemId: string ref, + int fileid: @file ref +); + +xmlElements( + unique int id: @xmlelement, + string name: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int fileid: @file ref +); + +xmlAttrs( + unique int id: @xmlattribute, + int elementid: @xmlelement ref, + string name: string ref, + string value: string ref, + int idx: int ref, + int fileid: @file ref +); + +xmlNs( + int id: @xmlnamespace, + string prefixName: string ref, + string URI: string ref, + int fileid: @file ref +); + +xmlHasNs( + int elementId: @xmlnamespaceable ref, + int nsId: @xmlnamespace ref, + int fileid: @file ref +); + +xmlComments( + unique int id: @xmlcomment, + string text: string ref, + int parentid: @xmlparent ref, + int fileid: @file ref +); + +xmlChars( + unique int id: @xmlcharacters, + string text: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int isCDATA: int ref, + int fileid: @file ref +); + +@xmlparent = @file | @xmlelement; +@xmlnamespaceable = @xmlelement | @xmlattribute; + +xmllocations( + int xmlElement: @xmllocatable ref, + int location: @location_default ref +); + +@xmllocatable = @xmlcharacters + | @xmlelement + | @xmlcomment + | @xmlattribute + | @xmldtd + | @file + | @xmlnamespace; diff --git a/cpp/ql/lib/upgrades/e594389175c098d7225683d0fd8cefcc47d84bc1/semmlecode.cpp.dbscheme b/cpp/ql/lib/upgrades/e594389175c098d7225683d0fd8cefcc47d84bc1/semmlecode.cpp.dbscheme new file mode 100644 index 000000000000..45f9d92df0bd --- /dev/null +++ b/cpp/ql/lib/upgrades/e594389175c098d7225683d0fd8cefcc47d84bc1/semmlecode.cpp.dbscheme @@ -0,0 +1,2487 @@ + +/** + * An invocation of the compiler. Note that more than one file may be + * compiled per invocation. For example, this command compiles three + * source files: + * + * gcc -c f1.c f2.c f3.c + * + * The `id` simply identifies the invocation, while `cwd` is the working + * directory from which the compiler was invoked. + */ +compilations( + /** + * An invocation of the compiler. Note that more than one file may + * be compiled per invocation. For example, this command compiles + * three source files: + * + * gcc -c f1.c f2.c f3.c + */ + unique int id : @compilation, + string cwd : string ref +); + +/** + * The arguments that were passed to the extractor for a compiler + * invocation. If `id` is for the compiler invocation + * + * gcc -c f1.c f2.c f3.c + * + * then typically there will be rows for + * + * num | arg + * --- | --- + * 0 | *path to extractor* + * 1 | `--mimic` + * 2 | `/usr/bin/gcc` + * 3 | `-c` + * 4 | f1.c + * 5 | f2.c + * 6 | f3.c + */ +#keyset[id, num] +compilation_args( + int id : @compilation ref, + int num : int ref, + string arg : string ref +); + +/** + * Optionally, record the build mode for each compilation. + */ +compilation_build_mode( + unique int id : @compilation ref, + int mode : int ref +); + +/* +case @compilation_build_mode.mode of + 0 = @build_mode_none +| 1 = @build_mode_manual +| 2 = @build_mode_auto +; +*/ + +/** + * The source files that are compiled by a compiler invocation. + * If `id` is for the compiler invocation + * + * gcc -c f1.c f2.c f3.c + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | f1.c + * 1 | f2.c + * 2 | f3.c + * + * Note that even if those files `#include` headers, those headers + * do not appear as rows. + */ +#keyset[id, num] +compilation_compiling_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The time taken by the extractor for a compiler invocation. + * + * For each file `num`, there will be rows for + * + * kind | seconds + * ---- | --- + * 1 | CPU seconds used by the extractor frontend + * 2 | Elapsed seconds during the extractor frontend + * 3 | CPU seconds used by the extractor backend + * 4 | Elapsed seconds during the extractor backend + */ +#keyset[id, num, kind] +compilation_time( + int id : @compilation ref, + int num : int ref, + /* kind: + 1 = frontend_cpu_seconds + 2 = frontend_elapsed_seconds + 3 = extractor_cpu_seconds + 4 = extractor_elapsed_seconds + */ + int kind : int ref, + float seconds : float ref +); + +/** + * An error or warning generated by the extractor. + * The diagnostic message `diagnostic` was generated during compiler + * invocation `compilation`, and is the `file_number_diagnostic_number`th + * message generated while extracting the `file_number`th file of that + * invocation. + */ +#keyset[compilation, file_number, file_number_diagnostic_number] +diagnostic_for( + int diagnostic : @diagnostic ref, + int compilation : @compilation ref, + int file_number : int ref, + int file_number_diagnostic_number : int ref +); + +/** + * If extraction was successful, then `cpu_seconds` and + * `elapsed_seconds` are the CPU time and elapsed time (respectively) + * that extraction took for compiler invocation `id`. + */ +compilation_finished( + unique int id : @compilation ref, + float cpu_seconds : float ref, + float elapsed_seconds : float ref +); + + +/** + * External data, 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 +); + +/* +case @coroutine_placeholder_variable.kind of + 1 = @handle +| 2 = @promise +| 3 = @init_await_resume +; +*/ + +coroutine_placeholder_variable( + unique int placeholder_variable: @variable ref, + int kind: int ref, + int function: @function ref +) + +/** The `new` function used for allocating the coroutine state, if any. */ +coroutine_new( + unique int function: @function ref, + int new: @function ref +); + +/** The `delete` function used for deallocating the coroutine state, if any. */ +coroutine_delete( + unique int function: @function ref, + int delete: @function ref +); + +purefunctions(unique int id: @function ref); + +function_deleted(unique int id: @function ref); + +function_defaulted(unique int id: @function ref); + +function_prototyped(unique int id: @function ref) + +deduction_guide_for_class( + int id: @function ref, + int class_template: @usertype ref +) + +member_function_this_type( + unique int id: @function ref, + int this_type: @type ref +); + +#keyset[id, type_id] +fun_decls( + int id: @fun_decl, + int function: @function ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +fun_def(unique int id: @fun_decl ref); +fun_specialized(unique int id: @fun_decl ref); +fun_implicit(unique int id: @fun_decl ref); +fun_decl_specifiers( + int id: @fun_decl ref, + string name: string ref +) +#keyset[fun_decl, index] +fun_decl_throws( + int fun_decl: @fun_decl ref, + int index: int ref, + int type_id: @type ref +); +/* an empty throw specification is different from none */ +fun_decl_empty_throws(unique int fun_decl: @fun_decl ref); +fun_decl_noexcept( + int fun_decl: @fun_decl ref, + int constant: @expr ref +); +fun_decl_empty_noexcept(int fun_decl: @fun_decl ref); +fun_decl_typedef_type( + unique int fun_decl: @fun_decl ref, + int typedeftype_id: @usertype ref +); + +/* +case @fun_requires.kind of + 1 = @template_attached +| 2 = @function_attached +; +*/ + +fun_requires( + int id: @fun_decl ref, + int kind: int ref, + int constraint: @expr ref +); + +param_decl_bind( + unique int id: @var_decl ref, + int index: int ref, + int fun_decl: @fun_decl ref +); + +#keyset[id, type_id] +var_decls( + int id: @var_decl, + int variable: @variable ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +var_def(unique int id: @var_decl ref); +var_specialized(int id: @var_decl ref); +var_decl_specifiers( + int id: @var_decl ref, + string name: string ref +) +is_structured_binding(unique int id: @variable ref); +var_requires( + int id: @var_decl ref, + int constraint: @expr ref +); + +type_decls( + unique int id: @type_decl, + int type_id: @type ref, + int location: @location_default ref +); +type_def(unique int id: @type_decl ref); +type_decl_top( + unique int type_decl: @type_decl ref +); +type_requires( + int id: @type_decl ref, + int constraint: @expr ref +); + +namespace_decls( + unique int id: @namespace_decl, + int namespace_id: @namespace ref, + int location: @location_default ref, + int bodylocation: @location_default ref +); + +case @using.kind of + 1 = @using_declaration +| 2 = @using_directive +| 3 = @using_enum_declaration +; + +usings( + unique int id: @using, + int element_id: @element ref, + int location: @location_default ref, + int kind: int ref +); + +/** The element which contains the `using` declaration. */ +using_container( + int parent: @element ref, + int child: @using ref +); + +static_asserts( + unique int id: @static_assert, + int condition : @expr ref, + string message : string ref, + int location: @location_default ref, + int enclosing : @element ref +); + +// each function has an ordered list of parameters +#keyset[id, type_id] +#keyset[function, index, type_id] +params( + int id: @parameter, + int function: @parameterized_element ref, + int index: int ref, + int type_id: @type ref +); + +overrides( + int new: @function ref, + int old: @function ref +); + +#keyset[id, type_id] +membervariables( + int id: @membervariable, + int type_id: @type ref, + string name: string ref +); + +#keyset[id, type_id] +globalvariables( + int id: @globalvariable, + int type_id: @type ref, + string name: string ref +); + +#keyset[id, type_id] +localvariables( + int id: @localvariable, + int type_id: @type ref, + string name: string ref +); + +autoderivation( + unique int var: @variable ref, + int derivation_type: @type ref +); + +orphaned_variables( + int var: @localvariable ref, + int function: @function ref +) + +enumconstants( + unique int id: @enumconstant, + int parent: @usertype ref, + int index: int ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); + +@variable = @localscopevariable | @globalvariable | @membervariable; + +@localscopevariable = @localvariable | @parameter; + +/** + * Built-in types are the fundamental types, e.g., integral, floating, and void. + */ +case @builtintype.kind of + 1 = @errortype +| 2 = @unknowntype +| 3 = @void +| 4 = @boolean +| 5 = @char +| 6 = @unsigned_char +| 7 = @signed_char +| 8 = @short +| 9 = @unsigned_short +| 10 = @signed_short +| 11 = @int +| 12 = @unsigned_int +| 13 = @signed_int +| 14 = @long +| 15 = @unsigned_long +| 16 = @signed_long +| 17 = @long_long +| 18 = @unsigned_long_long +| 19 = @signed_long_long +// ... 20 Microsoft-specific __int8 +// ... 21 Microsoft-specific __int16 +// ... 22 Microsoft-specific __int32 +// ... 23 Microsoft-specific __int64 +| 24 = @float +| 25 = @double +| 26 = @long_double +| 27 = @complex_float // C99-specific _Complex float +| 28 = @complex_double // C99-specific _Complex double +| 29 = @complex_long_double // C99-specific _Complex long double +| 30 = @imaginary_float // C99-specific _Imaginary float +| 31 = @imaginary_double // C99-specific _Imaginary double +| 32 = @imaginary_long_double // C99-specific _Imaginary long double +| 33 = @wchar_t // Microsoft-specific +| 34 = @decltype_nullptr // C++11 +| 35 = @int128 // __int128 +| 36 = @unsigned_int128 // unsigned __int128 +| 37 = @signed_int128 // signed __int128 +| 38 = @float128 // __float128 +| 39 = @complex_float128 // _Complex __float128 +| 40 = @decimal32 // _Decimal32 +| 41 = @decimal64 // _Decimal64 +| 42 = @decimal128 // _Decimal128 +| 43 = @char16_t +| 44 = @char32_t +| 45 = @std_float32 // _Float32 +| 46 = @float32x // _Float32x +| 47 = @std_float64 // _Float64 +| 48 = @float64x // _Float64x +| 49 = @std_float128 // _Float128 +// ... 50 _Float128x +| 51 = @char8_t +| 52 = @float16 // _Float16 +| 53 = @complex_float16 // _Complex _Float16 +| 54 = @fp16 // __fp16 +| 55 = @std_bfloat16 // __bf16 +| 56 = @std_float16 // std::float16_t +| 57 = @complex_std_float32 // _Complex _Float32 +| 58 = @complex_float32x // _Complex _Float32x +| 59 = @complex_std_float64 // _Complex _Float64 +| 60 = @complex_float64x // _Complex _Float64x +| 61 = @complex_std_float128 // _Complex _Float128 +; + +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 or C23 `typeof`/`typeof_unqual` + * operator taking an expression as its argument. For example: + * ``` + * int a; + * decltype(1+a) b; + * typeof(1+a) c; + * ``` + * Here `expr` is `1+a`. + * + * Sometimes an additional pair of parentheses around the expression + * changes the semantics of the decltype, e.g. + * ``` + * struct A { double x; }; + * const A* a = new A(); + * decltype( a->x ); // type is double + * decltype((a->x)); // type is const double& + * ``` + * (Please consult the C++11 standard for more details). + * `parentheses_would_change_meaning` is `true` iff that is the case. + */ + +/* +case @decltype.kind of +| 0 = @decltype +| 1 = @typeof // The frontend does not differentiate between typeof and typeof_unqual +; +*/ + +#keyset[id, expr] +decltypes( + int id: @decltype, + int expr: @expr ref, + int kind: int ref, + int base_type: @type ref, + boolean parentheses_would_change_meaning: boolean ref +); + +/* +case @type_operator.kind of +| 0 = @typeof // The frontend does not differentiate between typeof and typeof_unqual +| 1 = @underlying_type +| 2 = @bases +| 3 = @direct_bases +| 4 = @add_lvalue_reference +| 5 = @add_pointer +| 6 = @add_rvalue_reference +| 7 = @decay +| 8 = @make_signed +| 9 = @make_unsigned +| 10 = @remove_all_extents +| 11 = @remove_const +| 12 = @remove_cv +| 13 = @remove_cvref +| 14 = @remove_extent +| 15 = @remove_pointer +| 16 = @remove_reference_t +| 17 = @remove_restrict +| 18 = @remove_volatile +| 19 = @remove_reference +; +*/ + +type_operators( + unique int id: @type_operator, + int arg_type: @type ref, + int kind: int ref, + int base_type: @type ref +) + +/* +case @usertype.kind of +| 0 = @unknown_usertype +| 1 = @struct +| 2 = @class +| 3 = @union +| 4 = @enum +// ... 5 = @typedef deprecated // classic C: typedef typedef type name +// ... 6 = @template deprecated +| 7 = @template_parameter +| 8 = @template_template_parameter +| 9 = @proxy_class // a proxy class associated with a template parameter +// ... 10 objc_class deprecated +// ... 11 objc_protocol deprecated +// ... 12 objc_category deprecated +| 13 = @scoped_enum +// ... 14 = @using_alias deprecated // a using name = type style typedef +| 15 = @template_struct +| 16 = @template_class +| 17 = @template_union +| 18 = @alias +; +*/ + +usertypes( + unique int id: @usertype, + string name: string ref, + int kind: int ref +); + +usertypesize( + unique int id: @usertype ref, + int size: int ref, + int alignment: int ref +); + +usertype_final(unique int id: @usertype ref); + +usertype_uuid( + unique int id: @usertype ref, + string uuid: string ref +); + +/* +case @usertype.alias_kind of +| 0 = @typedef +| 1 = @alias +*/ + +usertype_alias_kind( + int id: @usertype ref, + int alias_kind: int ref +) + +nontype_template_parameters( + int id: @expr ref +); + +type_template_type_constraint( + int id: @usertype ref, + int constraint: @expr ref +); + +mangled_name( + unique int id: @declaration ref, + int mangled_name : @mangledname, + boolean is_complete: boolean ref +); + +is_pod_class(unique int id: @usertype ref); +is_standard_layout_class(unique int id: @usertype ref); + +is_complete(unique int id: @usertype ref); + +is_class_template(unique int id: @usertype ref); +class_instantiation( + int to: @usertype ref, + int from: @usertype ref +); +class_template_argument( + int type_id: @usertype ref, + int index: int ref, + int arg_type: @type ref +); +class_template_argument_value( + int type_id: @usertype ref, + int index: int ref, + int arg_value: @expr ref +); + +@user_or_decltype = @usertype | @decltype; + +is_proxy_class_for( + unique int id: @usertype ref, + int templ_param_id: @user_or_decltype ref +); + +type_mentions( + unique int id: @type_mention, + int type_id: @type ref, + int location: @location ref, + // a_symbol_reference_kind from the frontend. + int kind: int ref +); + +is_function_template(unique int id: @function ref); +function_instantiation( + unique int to: @function ref, + int from: @function ref +); +function_template_argument( + int function_id: @function ref, + int index: int ref, + int arg_type: @type ref +); +function_template_argument_value( + int function_id: @function ref, + int index: int ref, + int arg_value: @expr ref +); + +is_variable_template(unique int id: @variable ref); +variable_instantiation( + unique int to: @variable ref, + int from: @variable ref +); +variable_template_argument( + int variable_id: @variable ref, + int index: int ref, + int arg_type: @type ref +); +variable_template_argument_value( + int variable_id: @variable ref, + int index: int ref, + int arg_value: @expr ref +); + +template_template_instantiation( + int to: @usertype ref, + int from: @usertype ref +); +template_template_argument( + int type_id: @usertype ref, + int index: int ref, + int arg_type: @type ref +); +template_template_argument_value( + int type_id: @usertype ref, + int index: int ref, + int arg_value: @expr ref +); + +@concept = @concept_template | @concept_id; + +concept_templates( + unique int concept_id: @concept_template, + string name: string ref, + int location: @location_default ref +); +concept_instantiation( + unique int to: @concept_id ref, + int from: @concept_template ref +); +is_type_constraint(int concept_id: @concept_id ref); +concept_template_argument( + int concept_id: @concept ref, + int index: int ref, + int arg_type: @type ref +); +concept_template_argument_value( + int concept_id: @concept ref, + int index: int ref, + int arg_value: @expr ref +); + +routinetypes( + unique int id: @routinetype, + int return_type: @type ref +); + +routinetypeargs( + int routine: @routinetype ref, + int index: int ref, + int type_id: @type ref +); + +ptrtomembers( + unique int id: @ptrtomember, + int type_id: @type ref, + int class_id: @type ref +); + +/* + specifiers for types, functions, and variables + + "public", + "protected", + "private", + + "const", + "volatile", + "static", + + "pure", + "virtual", + "sealed", // Microsoft + "__interface", // Microsoft + "inline", + "explicit", + + "near", // near far extension + "far", // near far extension + "__ptr32", // Microsoft + "__ptr64", // Microsoft + "__sptr", // Microsoft + "__uptr", // Microsoft + "dllimport", // Microsoft + "dllexport", // Microsoft + "thread", // Microsoft + "naked", // Microsoft + "microsoft_inline", // Microsoft + "forceinline", // Microsoft + "selectany", // Microsoft + "nothrow", // Microsoft + "novtable", // Microsoft + "noreturn", // Microsoft + "noinline", // Microsoft + "noalias", // Microsoft + "restrict", // Microsoft +*/ + +specifiers( + unique int id: @specifier, + unique string str: string ref +); + +typespecifiers( + int type_id: @type ref, + int spec_id: @specifier ref +); + +funspecifiers( + int func_id: @function ref, + int spec_id: @specifier ref +); + +varspecifiers( + int var_id: @accessible ref, + int spec_id: @specifier ref +); + +explicit_specifier_exprs( + unique int func_id: @function ref, + int constant: @expr ref +) + +attributes( + unique int id: @attribute, + int kind: int ref, + string name: string ref, + string name_space: string ref, + int location: @location_default ref +); + +case @attribute.kind of + 0 = @gnuattribute +| 1 = @stdattribute +| 2 = @declspec +| 3 = @msattribute +| 4 = @alignas +// ... 5 @objc_propertyattribute deprecated +; + +attribute_args( + unique int id: @attribute_arg, + int kind: int ref, + int attribute: @attribute ref, + int index: int ref, + int location: @location_default ref +); + +case @attribute_arg.kind of + 0 = @attribute_arg_empty +| 1 = @attribute_arg_token +| 2 = @attribute_arg_constant +| 3 = @attribute_arg_type +| 4 = @attribute_arg_constant_expr +| 5 = @attribute_arg_expr +; + +attribute_arg_value( + unique int arg: @attribute_arg ref, + string value: string ref +); +attribute_arg_type( + unique int arg: @attribute_arg ref, + int type_id: @type ref +); +attribute_arg_constant( + unique int arg: @attribute_arg ref, + int constant: @expr ref +) +attribute_arg_expr( + unique int arg: @attribute_arg ref, + int expr: @expr ref +) +attribute_arg_name( + unique int arg: @attribute_arg ref, + string name: string ref +); + +typeattributes( + int type_id: @type ref, + int spec_id: @attribute ref +); + +funcattributes( + int func_id: @function ref, + int spec_id: @attribute ref +); + +varattributes( + int var_id: @accessible ref, + int spec_id: @attribute ref +); + +stmtattributes( + int stmt_id: @stmt ref, + int spec_id: @attribute ref +); + +@type = @builtintype + | @derivedtype + | @usertype + | @routinetype + | @ptrtomember + | @decltype + | @type_operator; + +unspecifiedtype( + unique int type_id: @type ref, + int unspecified_type_id: @type ref +); + +member( + int parent: @type ref, + int index: int ref, + int child: @member ref +); + +@enclosingfunction_child = @usertype | @variable | @namespace + +enclosingfunction( + unique int child: @enclosingfunction_child ref, + int parent: @function ref +); + +derivations( + unique int derivation: @derivation, + int sub: @type ref, + int index: int ref, + int super: @type ref, + int location: @location_default ref +); + +derspecifiers( + int der_id: @derivation ref, + int spec_id: @specifier ref +); + +/** + * Contains the byte offset of the base class subobject within the derived + * class. Only holds for non-virtual base classes, but see table + * `virtual_base_offsets` for offsets of virtual base class subobjects. + */ +direct_base_offsets( + unique int der_id: @derivation ref, + int offset: int ref +); + +/** + * Contains the byte offset of the virtual base class subobject for class + * `super` within a most-derived object of class `sub`. `super` can be either a + * direct or indirect base class. + */ +#keyset[sub, super] +virtual_base_offsets( + int sub: @usertype ref, + int super: @usertype ref, + int offset: int ref +); + +frienddecls( + unique int id: @frienddecl, + int type_id: @type ref, + int decl_id: @declaration ref, + int location: @location_default ref +); + +@declaredtype = @usertype ; + +@declaration = @function + | @declaredtype + | @variable + | @enumconstant + | @frienddecl + | @concept_template; + +@member = @membervariable + | @function + | @declaredtype + | @enumconstant; + +@locatable = @diagnostic + | @declaration + | @ppd_include + | @ppd_define + | @macroinvocation + /*| @funcall*/ + | @xmllocatable + | @attribute + | @attribute_arg; + +@namedscope = @namespace | @usertype; + +@element = @locatable + | @file + | @folder + | @specifier + | @type + | @expr + | @namespace + | @initialiser + | @stmt + | @derivation + | @comment + | @preprocdirect + | @fun_decl + | @var_decl + | @type_decl + | @namespace_decl + | @using + | @namequalifier + | @specialnamequalifyingelement + | @static_assert + | @type_mention + | @lambdacapture; + +@exprparent = @element; + +comments( + unique int id: @comment, + string contents: string ref, + int location: @location_default ref +); + +commentbinding( + int id: @comment ref, + int element: @element ref +); + +exprconv( + int converted: @expr ref, + unique int conversion: @expr ref +); + +compgenerated(unique int id: @element ref); + +/** + * `destructor_call` destructs the `i`'th entity that should be + * destructed following `element`. Note that entities should be + * destructed in reverse construction order, so for a given `element` + * these should be called from highest to lowest `i`. + */ +#keyset[element, destructor_call] +#keyset[element, i] +synthetic_destructor_call( + int element: @element ref, + int i: int ref, + int destructor_call: @routineexpr ref +); + +namespaces( + unique int id: @namespace, + string name: string ref +); + +namespace_inline( + unique int id: @namespace ref +); + +namespacembrs( + int parentid: @namespace ref, + unique int memberid: @namespacembr ref +); + +@namespacembr = @declaration | @namespace; + +exprparents( + int expr_id: @expr ref, + int child_index: int ref, + int parent_id: @exprparent ref +); + +expr_isload(unique int expr_id: @expr ref); + +@cast = @c_style_cast + | @const_cast + | @dynamic_cast + | @reinterpret_cast + | @static_cast + ; + +/* +case @conversion.kind of + 0 = @simple_conversion // a numeric conversion, qualification conversion, or a reinterpret_cast +| 1 = @bool_conversion // conversion to 'bool' +| 2 = @base_class_conversion // a derived-to-base conversion +| 3 = @derived_class_conversion // a base-to-derived conversion +| 4 = @pm_base_class_conversion // a derived-to-base conversion of a pointer to member +| 5 = @pm_derived_class_conversion // a base-to-derived conversion of a pointer to member +| 6 = @glvalue_adjust // an adjustment of the type of a glvalue +| 7 = @prvalue_adjust // an adjustment of the type of a prvalue +; +*/ +/** + * Describes the semantics represented by a cast expression. This is largely + * independent of the source syntax of the cast, so it is separate from the + * regular expression kind. + */ +conversionkinds( + unique int expr_id: @cast ref, + int kind: int ref +); + +@conversion = @cast + | @array_to_pointer + | @parexpr + | @reference_to + | @ref_indirect + | @temp_init + | @c11_generic + ; + +/* +case @funbindexpr.kind of + 0 = @normal_call // a normal call +| 1 = @virtual_call // a virtual call +| 2 = @adl_call // a call whose target is only found by ADL +; +*/ +iscall( + unique int caller: @funbindexpr ref, + int kind: int ref +); + +numtemplatearguments( + unique int expr_id: @expr ref, + int num: int ref +); + +specialnamequalifyingelements( + unique int id: @specialnamequalifyingelement, + unique string name: string ref +); + +@namequalifiableelement = @expr | @namequalifier; +@namequalifyingelement = @namespace + | @specialnamequalifyingelement + | @usertype; + +namequalifiers( + unique int id: @namequalifier, + unique int qualifiableelement: @namequalifiableelement ref, + int qualifyingelement: @namequalifyingelement ref, + int location: @location_default ref +); + +varbind( + int expr: @varbindexpr ref, + int var: @accessible ref +); + +funbind( + int expr: @funbindexpr ref, + int fun: @function ref +); + +@any_new_expr = @new_expr + | @new_array_expr; + +@new_or_delete_expr = @any_new_expr + | @delete_expr + | @delete_array_expr; + +@prefix_crement_expr = @preincrexpr | @predecrexpr; + +@postfix_crement_expr = @postincrexpr | @postdecrexpr; + +@increment_expr = @preincrexpr | @postincrexpr; + +@decrement_expr = @predecrexpr | @postdecrexpr; + +@crement_expr = @increment_expr | @decrement_expr; + +@un_arith_op_expr = @arithnegexpr + | @unaryplusexpr + | @conjugation + | @realpartexpr + | @imagpartexpr + | @crement_expr + ; + +@un_bitwise_op_expr = @complementexpr; + +@un_log_op_expr = @notexpr; + +@un_op_expr = @address_of + | @indirect + | @un_arith_op_expr + | @un_bitwise_op_expr + | @builtinaddressof + | @vec_fill + | @un_log_op_expr + | @co_await + | @co_yield + ; + +@bin_log_op_expr = @andlogicalexpr | @orlogicalexpr; + +@cmp_op_expr = @eq_op_expr | @rel_op_expr; + +@eq_op_expr = @eqexpr | @neexpr; + +@rel_op_expr = @gtexpr + | @ltexpr + | @geexpr + | @leexpr + | @spaceshipexpr + ; + +@bin_bitwise_op_expr = @lshiftexpr + | @rshiftexpr + | @andexpr + | @orexpr + | @xorexpr + ; + +@p_arith_op_expr = @paddexpr + | @psubexpr + | @pdiffexpr + ; + +@bin_arith_op_expr = @addexpr + | @subexpr + | @mulexpr + | @divexpr + | @remexpr + | @jmulexpr + | @jdivexpr + | @fjaddexpr + | @jfaddexpr + | @fjsubexpr + | @jfsubexpr + | @minexpr + | @maxexpr + | @p_arith_op_expr + ; + +@bin_op_expr = @bin_arith_op_expr + | @bin_bitwise_op_expr + | @cmp_op_expr + | @bin_log_op_expr + ; + +@op_expr = @un_op_expr + | @bin_op_expr + | @assign_expr + | @conditionalexpr + ; + +@assign_arith_expr = @assignaddexpr + | @assignsubexpr + | @assignmulexpr + | @assigndivexpr + | @assignremexpr + ; + +@assign_bitwise_expr = @assignandexpr + | @assignorexpr + | @assignxorexpr + | @assignlshiftexpr + | @assignrshiftexpr + ; + +@assign_pointer_expr = @assignpaddexpr + | @assignpsubexpr + ; + +@assign_op_expr = @assign_arith_expr + | @assign_bitwise_expr + | @assign_pointer_expr + ; + +@assign_expr = @assignexpr | @assign_op_expr | @blockassignexpr + +/* + Binary encoding of the allocator form. + + case @allocator.form of + 0 = plain + | 1 = alignment + ; +*/ + +/** + * The allocator function associated with a `new` or `new[]` expression. + * The `form` column specified whether the allocation call contains an alignment + * argument. + */ +expr_allocator( + unique int expr: @any_new_expr ref, + int func: @function ref, + int form: int ref +); + +/* + Binary encoding of the deallocator form. + + case @deallocator.form of + 0 = plain + | 1 = size + | 2 = alignment + | 4 = destroying_delete + ; +*/ + +/** + * The deallocator function associated with a `delete`, `delete[]`, `new`, or + * `new[]` expression. For a `new` or `new[]` expression, the deallocator is the + * one used to free memory if the initialization throws an exception. + * The `form` column specifies whether the deallocation call contains a size + * argument, and alignment argument, or both. + */ +expr_deallocator( + unique int expr: @new_or_delete_expr ref, + int func: @function ref, + int form: int ref +); + +/** + * Holds if the `@conditionalexpr` is of the two operand form + * `guard ? : false`. + */ +expr_cond_two_operand( + unique int cond: @conditionalexpr ref +); + +/** + * The guard of `@conditionalexpr` `guard ? true : false` + */ +expr_cond_guard( + unique int cond: @conditionalexpr ref, + int guard: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` holds. For the two operand form + * `guard ?: false` consider using `expr_cond_guard` instead. + */ +expr_cond_true( + unique int cond: @conditionalexpr ref, + int true: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` does not hold. + */ +expr_cond_false( + unique int cond: @conditionalexpr ref, + int false: @expr ref +); + +/** A string representation of the value. */ +values( + unique int id: @value, + string str: string ref +); + +/** The actual text in the source code for the value, if any. */ +valuetext( + unique int id: @value ref, + string text: string ref +); + +valuebind( + int val: @value ref, + unique int expr: @expr ref +); + +fieldoffsets( + unique int id: @variable ref, + int byteoffset: int ref, + int bitoffset: int ref +); + +bitfield( + unique int id: @variable ref, + int bits: int ref, + int declared_bits: int ref +); + +/* TODO +memberprefix( + int member: @expr ref, + int prefix: @expr ref +); +*/ + +/* + kind(1) = mbrcallexpr + kind(2) = mbrptrcallexpr + kind(3) = mbrptrmbrcallexpr + kind(4) = ptrmbrptrmbrcallexpr + kind(5) = mbrreadexpr // x.y + kind(6) = mbrptrreadexpr // p->y + kind(7) = mbrptrmbrreadexpr // x.*pm + kind(8) = mbrptrmbrptrreadexpr // x->*pm + kind(9) = staticmbrreadexpr // static x.y + kind(10) = staticmbrptrreadexpr // static p->y +*/ +/* TODO +memberaccess( + int member: @expr ref, + int kind: int ref +); +*/ + +initialisers( + unique int init: @initialiser, + int var: @accessible ref, + unique int expr: @expr ref, + int location: @location_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 +| 364 = @istriviallycopyassignable +| 365 = @isassignablenopreconditioncheck +| 366 = @referencebindstotemporary +| 367 = @issameas +| 368 = @builtinhasattribute +| 369 = @ispointerinterconvertiblewithclass +| 370 = @builtinispointerinterconvertiblewithclass +| 371 = @iscorrespondingmember +| 372 = @builtiniscorrespondingmember +| 373 = @isboundedarray +| 374 = @isunboundedarray +| 375 = @isreferenceable +| 378 = @isnothrowconvertible +| 379 = @referenceconstructsfromtemporary +| 380 = @referenceconvertsfromtemporary +| 381 = @isconvertible +| 382 = @isvalidwinrttype +| 383 = @iswinclass +| 384 = @iswininterface +| 385 = @istriviallyequalitycomparable +| 386 = @isscopedenum +| 387 = @istriviallyrelocatable +| 388 = @datasizeof +| 389 = @c11_generic +| 390 = @requires_expr +| 391 = @nested_requirement +| 392 = @compound_requirement +| 393 = @concept_id +; + +@var_args_expr = @vastartexpr + | @vaendexpr + | @vaargexpr + | @vacopyexpr + ; + +@builtin_op = @var_args_expr + | @noopexpr + | @offsetofexpr + | @intaddrexpr + | @hasassignexpr + | @hascopyexpr + | @hasnothrowassign + | @hasnothrowconstr + | @hasnothrowcopy + | @hastrivialassign + | @hastrivialconstr + | @hastrivialcopy + | @hastrivialdestructor + | @hasuserdestr + | @hasvirtualdestr + | @isabstractexpr + | @isbaseofexpr + | @isclassexpr + | @isconvtoexpr + | @isemptyexpr + | @isenumexpr + | @ispodexpr + | @ispolyexpr + | @isunionexpr + | @typescompexpr + | @builtinshufflevector + | @builtinconvertvector + | @builtinaddressof + | @istriviallyconstructibleexpr + | @isdestructibleexpr + | @isnothrowdestructibleexpr + | @istriviallydestructibleexpr + | @istriviallyassignableexpr + | @isnothrowassignableexpr + | @istrivialexpr + | @isstandardlayoutexpr + | @istriviallycopyableexpr + | @isliteraltypeexpr + | @hastrivialmoveconstructorexpr + | @hastrivialmoveassignexpr + | @hasnothrowmoveassignexpr + | @isconstructibleexpr + | @isnothrowconstructibleexpr + | @hasfinalizerexpr + | @isdelegateexpr + | @isinterfaceclassexpr + | @isrefarrayexpr + | @isrefclassexpr + | @issealedexpr + | @issimplevalueclassexpr + | @isvalueclassexpr + | @isfinalexpr + | @builtinchooseexpr + | @builtincomplex + | @isassignable + | @isaggregate + | @hasuniqueobjectrepresentations + | @builtinbitcast + | @builtinshuffle + | @issame + | @isfunction + | @islayoutcompatible + | @ispointerinterconvertiblebaseof + | @isarray + | @arrayrank + | @arrayextent + | @isarithmetic + | @iscompletetype + | @iscompound + | @isconst + | @isfloatingpoint + | @isfundamental + | @isintegral + | @islvaluereference + | @ismemberfunctionpointer + | @ismemberobjectpointer + | @ismemberpointer + | @isobject + | @ispointer + | @isreference + | @isrvaluereference + | @isscalar + | @issigned + | @isunsigned + | @isvoid + | @isvolatile + | @istriviallycopyassignable + | @isassignablenopreconditioncheck + | @referencebindstotemporary + | @issameas + | @builtinhasattribute + | @ispointerinterconvertiblewithclass + | @builtinispointerinterconvertiblewithclass + | @iscorrespondingmember + | @builtiniscorrespondingmember + | @isboundedarray + | @isunboundedarray + | @isreferenceable + | @isnothrowconvertible + | @referenceconstructsfromtemporary + | @referenceconvertsfromtemporary + | @isconvertible + | @isvalidwinrttype + | @iswinclass + | @iswininterface + | @istriviallyequalitycomparable + | @isscopedenum + | @istriviallyrelocatable + ; + +compound_requirement_is_noexcept( + int expr: @compound_requirement ref +); + +new_allocated_type( + unique int expr: @new_expr ref, + int type_id: @type ref +); + +new_array_allocated_type( + unique int expr: @new_array_expr ref, + int type_id: @type ref +); + +/** + * The field being initialized by an initializer expression within an aggregate + * initializer for a class/struct/union. Position is used to sort repeated initializers. + */ +#keyset[aggregate, position] +aggregate_field_init( + int aggregate: @aggregateliteral ref, + int initializer: @expr ref, + int field: @membervariable ref, + int position: int ref +); + +/** + * 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 +); + +@sizeof_or_alignof = @runtime_sizeof | @runtime_alignof | @datasizeof | @sizeof_pack; + +sizeof_bind( + unique int expr: @sizeof_or_alignof ref, + int type_id: @type ref +); + +code_block( + unique int block: @literal ref, + unique int routine: @function ref +); + +lambdas( + unique int expr: @lambdaexpr ref, + string default_capture: string ref, + boolean has_explicit_return_type: boolean ref +); + +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 +| 38 = @stmt_consteval_if +| 39 = @stmt_not_consteval_if +; + +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 +); + +@stmt_consteval_or_not_consteval_if = @stmt_consteval_if | @stmt_not_consteval_if; + +consteval_if_then( + unique int constexpr_if_stmt: @stmt_consteval_or_not_consteval_if ref, + int then_id: @stmt ref +); + +consteval_if_else( + unique int constexpr_if_stmt: @stmt_consteval_or_not_consteval_if ref, + int else_id: @stmt ref +); + +while_body( + unique int while_stmt: @stmt_while ref, + int body_id: @stmt ref +); + +do_body( + unique int do_stmt: @stmt_end_test_while ref, + int body_id: @stmt ref +); + +switch_initialization( + unique int switch_stmt: @stmt_switch ref, + int init_id: @stmt ref +); + +#keyset[switch_stmt, index] +switch_case( + int switch_stmt: @stmt_switch ref, + int index: int ref, + int case_id: @stmt_switch_case ref +); + +switch_body( + unique int switch_stmt: @stmt_switch ref, + int body_id: @stmt ref +); + +@stmt_for_or_range_based_for = @stmt_for + | @stmt_range_based_for; + +for_initialization( + unique int for_stmt: @stmt_for_or_range_based_for ref, + int init_id: @stmt ref +); + +for_condition( + unique int for_stmt: @stmt_for ref, + int condition_id: @expr ref +); + +for_update( + unique int for_stmt: @stmt_for ref, + int update_id: @expr ref +); + +for_body( + unique int for_stmt: @stmt_for ref, + int body_id: @stmt ref +); + +@stmtparent = @stmt | @expr_stmt ; +stmtparents( + unique int id: @stmt ref, + int index: int ref, + int parent: @stmtparent ref +); + +ishandler(unique int block: @stmt_block ref); + +@cfgnode = @stmt | @expr | @function | @initialiser ; + +stmt_decl_bind( + int stmt: @stmt_decl ref, + int num: int ref, + int decl: @declaration ref +); + +stmt_decl_entry_bind( + int stmt: @stmt_decl ref, + int num: int ref, + int decl_entry: @element ref +); + +@parameterized_element = @function | @stmt_block | @requires_expr; + +blockscope( + unique int block: @stmt_block ref, + int enclosing: @parameterized_element ref +); + +@jump = @stmt_goto | @stmt_break | @stmt_continue; + +@jumporlabel = @jump | @stmt_label | @literal; + +jumpinfo( + unique int id: @jumporlabel ref, + string str: string ref, + int target: @stmt ref +); + +preprocdirects( + unique int id: @preprocdirect, + int kind: int ref, + int location: @location_default ref +); +case @preprocdirect.kind of + 0 = @ppd_if +| 1 = @ppd_ifdef +| 2 = @ppd_ifndef +| 3 = @ppd_elif +| 4 = @ppd_else +| 5 = @ppd_endif +| 6 = @ppd_plain_include +| 7 = @ppd_define +| 8 = @ppd_undef +| 9 = @ppd_line +| 10 = @ppd_error +| 11 = @ppd_pragma +| 12 = @ppd_objc_import +| 13 = @ppd_include_next +| 14 = @ppd_ms_import +| 15 = @ppd_elifdef +| 16 = @ppd_elifndef +| 18 = @ppd_warning +; + +@ppd_include = @ppd_plain_include | @ppd_objc_import | @ppd_include_next | @ppd_ms_import; + +@ppd_branch = @ppd_if | @ppd_ifdef | @ppd_ifndef | @ppd_elif | @ppd_elifdef | @ppd_elifndef; + +preprocpair( + int begin : @ppd_branch ref, + int elseelifend : @preprocdirect ref +); + +preproctrue(int branch : @ppd_branch ref); +preprocfalse(int branch : @ppd_branch ref); + +preproctext( + unique int id: @preprocdirect ref, + string head: string ref, + string body: string ref +); + +includes( + unique int id: @ppd_include ref, + int included: @file ref +); + +link_targets( + int id: @link_target, + int binary: @file ref +); + +link_parent( + int element : @element ref, + int link_target : @link_target ref +); + +/* XML Files */ + +xmlEncoding(unique int id: @file ref, string encoding: string ref); + +xmlDTDs( + unique int id: @xmldtd, + string root: string ref, + string publicId: string ref, + string systemId: string ref, + int fileid: @file ref +); + +xmlElements( + unique int id: @xmlelement, + string name: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int fileid: @file ref +); + +xmlAttrs( + unique int id: @xmlattribute, + int elementid: @xmlelement ref, + string name: string ref, + string value: string ref, + int idx: int ref, + int fileid: @file ref +); + +xmlNs( + int id: @xmlnamespace, + string prefixName: string ref, + string URI: string ref, + int fileid: @file ref +); + +xmlHasNs( + int elementId: @xmlnamespaceable ref, + int nsId: @xmlnamespace ref, + int fileid: @file ref +); + +xmlComments( + unique int id: @xmlcomment, + string text: string ref, + int parentid: @xmlparent ref, + int fileid: @file ref +); + +xmlChars( + unique int id: @xmlcharacters, + string text: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int isCDATA: int ref, + int fileid: @file ref +); + +@xmlparent = @file | @xmlelement; +@xmlnamespaceable = @xmlelement | @xmlattribute; + +xmllocations( + int xmlElement: @xmllocatable ref, + int location: @location_default ref +); + +@xmllocatable = @xmlcharacters + | @xmlelement + | @xmlcomment + | @xmlattribute + | @xmldtd + | @file + | @xmlnamespace; diff --git a/cpp/ql/lib/upgrades/e594389175c098d7225683d0fd8cefcc47d84bc1/upgrade.properties b/cpp/ql/lib/upgrades/e594389175c098d7225683d0fd8cefcc47d84bc1/upgrade.properties new file mode 100644 index 000000000000..9f42c57a59bb --- /dev/null +++ b/cpp/ql/lib/upgrades/e594389175c098d7225683d0fd8cefcc47d84bc1/upgrade.properties @@ -0,0 +1,3 @@ +description: Support C23 typeof and typeof_unqual +compatibility: partial +decltypes.rel: run decltypes.qlo diff --git a/cpp/ql/src/Likely Bugs/Memory Management/SuspiciousCallToMemset.ql b/cpp/ql/src/Likely Bugs/Memory Management/SuspiciousCallToMemset.ql index cb495f939fba..d485666ea4cf 100644 --- a/cpp/ql/src/Likely Bugs/Memory Management/SuspiciousCallToMemset.ql +++ b/cpp/ql/src/Likely Bugs/Memory Management/SuspiciousCallToMemset.ql @@ -47,11 +47,17 @@ Type stripType(Type t) { or result = stripType(t.(Decltype).getBaseType()) or + result = stripType(t.(TypeofType).getBaseType()) + or + result = stripType(t.(IntrinsicTransformedType).getBaseType()) + or not t instanceof TypedefType and not t instanceof ArrayType and not t instanceof ReferenceType and not t instanceof SpecifiedType and not t instanceof Decltype and + not t instanceof TypeofType and + not t instanceof IntrinsicTransformedType and result = t } diff --git a/cpp/ql/test/library-tests/declstmt/getDeclaration.expected b/cpp/ql/test/library-tests/declstmt/getDeclaration.expected index 995816ef6775..4cfe46b88396 100644 --- a/cpp/ql/test/library-tests/declstmt/getDeclaration.expected +++ b/cpp/ql/test/library-tests/declstmt/getDeclaration.expected @@ -1,5 +1,7 @@ | cpp.cpp:3:5:3:51 | declaration | 0 | cpp.cpp:3:19:3:24 | twisty | | cpp.cpp:3:5:3:51 | declaration | 0 | cpp.cpp:3:43:3:48 | twisty | +| cpp.cpp:3:15:3:27 | declaration | 0 | cpp.cpp:3:19:3:24 | twisty | +| cpp.cpp:3:15:3:27 | declaration | 0 | cpp.cpp:3:43:3:48 | twisty | | cpp.cpp:5:5:5:62 | declaration | 0 | cpp.cpp:5:61:5:61 | i | | cpp.cpp:5:38:5:51 | declaration | 0 | cpp.cpp:5:44:5:44 | t | | declstmt.c:7:5:7:19 | declaration | 0 | declstmt.c:7:9:7:12 | fun1 | diff --git a/cpp/ql/test/library-tests/declstmt/getDeclarationEntry.expected b/cpp/ql/test/library-tests/declstmt/getDeclarationEntry.expected index 198e8ccf9fe4..ce2b3d3576e6 100644 --- a/cpp/ql/test/library-tests/declstmt/getDeclarationEntry.expected +++ b/cpp/ql/test/library-tests/declstmt/getDeclarationEntry.expected @@ -1,4 +1,5 @@ | cpp.cpp:3:5:3:51 | declaration | 0 | cpp.cpp:3:43:3:48 | declaration of twisty | +| cpp.cpp:3:15:3:27 | declaration | 0 | cpp.cpp:3:19:3:24 | declaration of twisty | | cpp.cpp:5:5:5:62 | declaration | 0 | cpp.cpp:5:61:5:61 | definition of i | | cpp.cpp:5:38:5:51 | declaration | 0 | cpp.cpp:5:44:5:44 | declaration of t | | declstmt.c:7:5:7:19 | declaration | 0 | declstmt.c:7:9:7:12 | definition of fun1 | diff --git a/cpp/ql/test/library-tests/enums/typedefs/exprs.expected b/cpp/ql/test/library-tests/enums/typedefs/exprs.expected index 7a9ce45b403e..0613d9e4c2f4 100644 --- a/cpp/ql/test/library-tests/enums/typedefs/exprs.expected +++ b/cpp/ql/test/library-tests/enums/typedefs/exprs.expected @@ -1,2 +1,3 @@ | file://:0:0:0:0 | 0 | file://:0:0:0:0 | int | -| test.c:7:20:7:21 | E | file://:0:0:0:0 | int | +| test.c:7:14:7:14 | E | file://:0:0:0:0 | int | +| test.c:7:20:7:21 | E | test.c:7:14:7:14 | typeof(...) | diff --git a/cpp/ql/test/library-tests/syntax-zoo/dataflow-consistency.expected b/cpp/ql/test/library-tests/syntax-zoo/dataflow-consistency.expected index 9fbef1167a4f..064c4e01e2bc 100644 --- a/cpp/ql/test/library-tests/syntax-zoo/dataflow-consistency.expected +++ b/cpp/ql/test/library-tests/syntax-zoo/dataflow-consistency.expected @@ -8,7 +8,10 @@ uniqueEnclosingCallable | misc.c:210:24:210:24 | 0 | Node should have one enclosing callable but has 0. | | misc.c:210:24:210:28 | ... + ... | Node should have one enclosing callable but has 0. | | misc.c:210:28:210:28 | 1 | Node should have one enclosing callable but has 0. | +| stmt_in_type.cpp:3:12:3:40 | (statement expression) | Node should have one enclosing callable but has 0. | +| stmt_in_type.cpp:3:29:3:34 | call to twisty | Node should have one enclosing callable but has 0. | uniqueCallEnclosingCallable +| stmt_in_type.cpp:3:29:3:34 | call to twisty | Call should have one enclosing callable but has 0. | uniqueType uniqueNodeLocation | file://:0:0:0:0 | (unnamed parameter 2) | Node should have one location but has 0. |