LCOV - code coverage report
Current view: top level - gcc/c - c-tree.h (source / functions) Coverage Total Hit
Test: gcc.info Lines: 100.0 % 21 21
Test Date: 2026-02-28 14:20:25 Functions: 100.0 % 3 3
Legend: Lines:     hit not hit

            Line data    Source code
       1              : /* Definitions for C parsing and type checking.
       2              :    Copyright (C) 1987-2026 Free Software Foundation, Inc.
       3              : 
       4              : This file is part of GCC.
       5              : 
       6              : GCC is free software; you can redistribute it and/or modify it under
       7              : the terms of the GNU General Public License as published by the Free
       8              : Software Foundation; either version 3, or (at your option) any later
       9              : version.
      10              : 
      11              : GCC is distributed in the hope that it will be useful, but WITHOUT ANY
      12              : WARRANTY; without even the implied warranty of MERCHANTABILITY or
      13              : FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
      14              : for more details.
      15              : 
      16              : You should have received a copy of the GNU General Public License
      17              : along with GCC; see the file COPYING3.  If not see
      18              : <http://www.gnu.org/licenses/>.  */
      19              : 
      20              : #ifndef GCC_C_TREE_H
      21              : #define GCC_C_TREE_H
      22              : 
      23              : #include "c-family/c-common.h"
      24              : #include "diagnostic.h"
      25              : 
      26              : /* struct lang_identifier is private to c-decl.cc, but langhooks.cc needs to
      27              :    know how big it is.  This is sanity-checked in c-decl.cc.  */
      28              : #define C_SIZEOF_STRUCT_LANG_IDENTIFIER \
      29              :   (sizeof (struct c_common_identifier) + 3 * sizeof (void *))
      30              : 
      31              : /* In a RECORD_TYPE or UNION_TYPE, nonzero if any component is read-only.  */
      32              : #define C_TYPE_FIELDS_READONLY(TYPE) TREE_LANG_FLAG_1 (TYPE)
      33              : 
      34              : /* In a RECORD_TYPE or UNION_TYPE, nonzero if any component is volatile.  */
      35              : #define C_TYPE_FIELDS_VOLATILE(TYPE) TREE_LANG_FLAG_2 (TYPE)
      36              : 
      37              : /* In a RECORD_TYPE or UNION_TYPE, nonzero if any component is
      38              :    volatile, restrict-qualified or atomic; that is, has a type not
      39              :    permitted for a constexpr object.  */
      40              : #define C_TYPE_FIELDS_NON_CONSTEXPR(TYPE) TREE_LANG_FLAG_4 (TYPE)
      41              : 
      42              : /* In a RECORD_TYPE or UNION_TYPE, nonzero if any component has a
      43              :    counted_by attribute.  */
      44              : #define C_TYPE_FIELDS_HAS_COUNTED_BY(TYPE) TYPE_LANG_FLAG_3 (TYPE)
      45              : 
      46              : /* In a RECORD_TYPE or UNION_TYPE or ENUMERAL_TYPE
      47              :    nonzero if the definition of the type has already started.  */
      48              : #define C_TYPE_BEING_DEFINED(TYPE) TYPE_LANG_FLAG_0 (TYPE)
      49              : 
      50              : /* In an incomplete RECORD_TYPE, UNION_TYPE or ENUMERAL_TYPE, a list of
      51              :    variable declarations whose type would be completed by completing
      52              :    that type.  */
      53              : #define C_TYPE_INCOMPLETE_VARS(TYPE) \
      54              :   TYPE_LANG_SLOT_1 (TREE_CHECK4 (TYPE, RECORD_TYPE, UNION_TYPE, \
      55              :                                  QUAL_UNION_TYPE, ENUMERAL_TYPE))
      56              : 
      57              : /* In an IDENTIFIER_NODE, nonzero if this identifier is actually a
      58              :    keyword.  C_RID_CODE (node) is then the RID_* value of the keyword.  */
      59              : #define C_IS_RESERVED_WORD(ID) TREE_LANG_FLAG_0 (ID)
      60              : 
      61              : /* Record whether a type or decl was written with nonconstant size.
      62              :    Note that TYPE_SIZE may have simplified to a constant.  */
      63              : #define C_TYPE_VARIABLE_SIZE(TYPE) TYPE_LANG_FLAG_1 (TYPE)
      64              : #define C_DECL_VARIABLE_SIZE(TYPE) DECL_LANG_FLAG_0 (TYPE)
      65              : 
      66              : /* Record whether a type is variably modified. */
      67              : #define C_TYPE_VARIABLY_MODIFIED(TYPE) TYPE_LANG_FLAG_6 (TYPE)
      68              : 
      69              : 
      70              : /* Record whether a type is defined inside a struct or union type.
      71              :    This is used for -Wc++-compat. */
      72              : #define C_TYPE_DEFINED_IN_STRUCT(TYPE) TYPE_LANG_FLAG_2 (TYPE)
      73              : 
      74              : /* Record whether a typedef for type `int' was actually `signed int'.  */
      75              : #define C_TYPEDEF_EXPLICITLY_SIGNED(EXP) DECL_LANG_FLAG_1 (EXP)
      76              : 
      77              : /* For a FUNCTION_DECL, nonzero if it was defined without an explicit
      78              :    return type.  */
      79              : #define C_FUNCTION_IMPLICIT_INT(EXP) DECL_LANG_FLAG_1 (EXP)
      80              : 
      81              : /* For a FUNCTION_DECL, nonzero if it was an implicit declaration.  */
      82              : #define C_DECL_IMPLICIT(EXP) DECL_LANG_FLAG_2 (EXP)
      83              : 
      84              : /* For a PARM_DECL, nonzero if it was declared as an array.  */
      85              : #define C_ARRAY_PARAMETER(NODE) DECL_LANG_FLAG_0 (NODE)
      86              : 
      87              : /* For FUNCTION_DECLs, evaluates true if the decl is a nested
      88              :    function that requires a non-local context.  */
      89              : #define C_FUNC_NONLOCAL_CONTEXT(EXP)            \
      90              :   DECL_LANG_FLAG_4 (FUNCTION_DECL_CHECK (EXP))
      91              : 
      92              : /* For FUNCTION_DECLs, evaluates true if the decl is built-in but has
      93              :    been declared.  */
      94              : #define C_DECL_DECLARED_BUILTIN(EXP)            \
      95              :   DECL_LANG_FLAG_3 (FUNCTION_DECL_CHECK (EXP))
      96              : 
      97              : /* For FUNCTION_DECLs, evaluates true if the decl is built-in, has a
      98              :    built-in prototype and does not have a non-built-in prototype.  */
      99              : #define C_DECL_BUILTIN_PROTOTYPE(EXP)           \
     100              :   DECL_LANG_FLAG_6 (FUNCTION_DECL_CHECK (EXP))
     101              : 
     102              : /* For LABEL_DECLs marks canonical name of a loop.  */
     103              : #define C_DECL_LOOP_NAME(EXP) DECL_LANG_FLAG_3 (LABEL_DECL_CHECK (EXP))
     104              : 
     105              : /* For LABEL_DECLs marks canonical name of a switch.  During parsing of
     106              :    ObjC foreach named loop both C_DECL_LOOP_NAME and C_DECL_SWITCH_NAME
     107              :    are temporarily set.  */
     108              : #define C_DECL_SWITCH_NAME(EXP) DECL_LANG_FLAG_5 (LABEL_DECL_CHECK (EXP))
     109              : 
     110              : /* For LABEL_DECLs marks canonical name of a loop or switch being
     111              :    valid for use in break identifier or continue identifier statements.  */
     112              : #define C_DECL_LOOP_SWITCH_NAME_VALID(EXP) \
     113              :   DECL_LANG_FLAG_6 (LABEL_DECL_CHECK (EXP))
     114              : 
     115              : /* For LABEL_DECLs marks canonical loop or switch names which were actually
     116              :    used in one or more break identifier or continue identifier statements.  */
     117              : #define C_DECL_LOOP_SWITCH_NAME_USED(EXP) \
     118              :   DECL_LANG_FLAG_8 (LABEL_DECL_CHECK (EXP))
     119              : 
     120              : /* Record whether a decl was declared register.  This is strictly a
     121              :    front-end flag, whereas DECL_REGISTER is used for code generation;
     122              :    they may differ for structures with volatile fields.  */
     123              : #define C_DECL_REGISTER(EXP) \
     124              :   DECL_LANG_FLAG_4 (TREE_NOT_CHECK (EXP, FUNCTION_DECL))
     125              : 
     126              : /* Record whether a decl was used in an expression anywhere except an
     127              :    unevaluated operand of sizeof / typeof / alignof.  This is only
     128              :    used for functions declared static but not defined, though outside
     129              :    sizeof and typeof it is set for other function decls as well.  */
     130              : #define C_DECL_USED(EXP) DECL_LANG_FLAG_5 (FUNCTION_DECL_CHECK (EXP))
     131              : 
     132              : /* Record whether a variable has been declared threadprivate by
     133              :    #pragma omp threadprivate.  */
     134              : #define C_DECL_THREADPRIVATE_P(DECL) DECL_LANG_FLAG_3 (VAR_DECL_CHECK (DECL))
     135              : 
     136              : /* Set on VAR_DECLs for compound literals.  */
     137              : #define C_DECL_COMPOUND_LITERAL_P(DECL) \
     138              :   DECL_LANG_FLAG_5 (VAR_DECL_CHECK (DECL))
     139              : 
     140              : /* Set on decls used as placeholders for a C23 underspecified object
     141              :    definition.  */
     142              : #define C_DECL_UNDERSPECIFIED(DECL) DECL_LANG_FLAG_7 (DECL)
     143              : 
     144              : /* Set on VAR_DECLs declared as 'constexpr'.  */
     145              : #define C_DECL_DECLARED_CONSTEXPR(DECL) \
     146              :   DECL_LANG_FLAG_8 (VAR_DECL_CHECK (DECL))
     147              : 
     148              : /* Nonzero for a decl which either doesn't exist or isn't a prototype.
     149              :    N.B. Could be simplified if all built-in decls had complete prototypes
     150              :    (but this is presently difficult because some of them need FILE*).  */
     151              : #define C_DECL_ISNT_PROTOTYPE(EXP)                      \
     152              :        (EXP == 0                                        \
     153              :         || (!prototype_p (TREE_TYPE (EXP))      \
     154              :             && !fndecl_built_in_p (EXP)))
     155              : 
     156              : /* For FUNCTION_TYPE, a hidden list of types of arguments.  The same as
     157              :    TYPE_ARG_TYPES for functions with prototypes, but created for functions
     158              :    without prototypes.  */
     159              : #define TYPE_ACTUAL_ARG_TYPES(NODE) \
     160              :   TYPE_LANG_SLOT_1 (FUNCTION_TYPE_CHECK (NODE))
     161              : 
     162              : /* For a CONSTRUCTOR, whether some initializer contains a
     163              :    subexpression meaning it is not a constant expression.  */
     164              : #define CONSTRUCTOR_NON_CONST(EXPR) TREE_LANG_FLAG_1 (CONSTRUCTOR_CHECK (EXPR))
     165              : 
     166              : /* For a SAVE_EXPR, nonzero if the operand of the SAVE_EXPR has already
     167              :    been folded.  */
     168              : #define SAVE_EXPR_FOLDED_P(EXP) TREE_LANG_FLAG_1 (SAVE_EXPR_CHECK (EXP))
     169              : 
     170              : /* Whether a type has boolean semantics: either a boolean type or an
     171              :    enumeration type with a boolean type as its underlying type.  */
     172              : #define C_BOOLEAN_TYPE_P(TYPE)                                          \
     173              :   (TREE_CODE (TYPE) == BOOLEAN_TYPE                                     \
     174              :    || (TREE_CODE (TYPE) == ENUMERAL_TYPE                                \
     175              :        && ENUM_UNDERLYING_TYPE (TYPE) != NULL_TREE                      \
     176              :        && (TREE_CODE (ENUM_UNDERLYING_TYPE (TYPE)) == BOOLEAN_TYPE      \
     177              :            || c_hardbool_type_attr (TYPE))))
     178              : 
     179              : /* Record parser information about an expression that is irrelevant
     180              :    for code generation alongside a tree representing its value.  */
     181              : struct c_expr
     182              : {
     183              :   /* The value of the expression.  */
     184              :   tree value;
     185              :   /* Record the original unary/binary operator of an expression, which may
     186              :      have been changed by fold, STRING_CST for unparenthesized string
     187              :      constants, C_MAYBE_CONST_EXPR for __builtin_constant_p calls
     188              :      (even if parenthesized), for subexpressions, and for non-constant
     189              :      initializers, or ERROR_MARK for other expressions (including
     190              :      parenthesized expressions).  */
     191              :   enum tree_code original_code;
     192              :   /* If not NULL, the original type of an expression.  This will
     193              :      differ from the type of the value field for an enum constant.
     194              :      The type of an enum constant is a plain integer type, but this
     195              :      field will be the enum type.  */
     196              :   tree original_type;
     197              : 
     198              :   /* The source range of this expression.  This is redundant
     199              :      for node values that have locations, but not all node kinds
     200              :      have locations (e.g. constants, and references to params, locals,
     201              :      etc), so we stash a copy here.  */
     202              :   source_range src_range;
     203              : 
     204              :   /* True if this was directly from a decimal constant token.  */
     205              :   bool m_decimal : 1;
     206              : 
     207              :   /* Access to the first and last locations within the source spelling
     208              :      of this expression.  */
     209     56945461 :   location_t get_start () const { return src_range.m_start; }
     210    141959653 :   location_t get_finish () const { return src_range.m_finish; }
     211              : 
     212    252617139 :   location_t get_location () const
     213              :   {
     214    252617139 :     if (EXPR_HAS_LOCATION (value))
     215    161615692 :       return EXPR_LOCATION (value);
     216              :     else
     217     91001447 :       return make_location (get_start (), get_start (), get_finish ());
     218              :   }
     219              : 
     220              :   /* Set the value to error_mark_node whilst ensuring that src_range
     221              :      and m_decimal are initialized.  */
     222        22943 :   void set_error ()
     223              :   {
     224        22943 :     value = error_mark_node;
     225        22943 :     src_range.m_start = UNKNOWN_LOCATION;
     226        22943 :     src_range.m_finish = UNKNOWN_LOCATION;
     227        22927 :     m_decimal = 0;
     228         1161 :   }
     229              : };
     230              : 
     231              : /* Type alias for struct c_expr. This allows to use the structure
     232              :    inside the VEC types.  */
     233              : typedef struct c_expr c_expr_t;
     234              : 
     235              : /* A kind of type specifier.  Note that this information is currently
     236              :    only used to distinguish tag definitions, tag references and typeof
     237              :    uses.  */
     238              : enum c_typespec_kind {
     239              :   /* No typespec.  This appears only in struct c_declspec.  */
     240              :   ctsk_none,
     241              :   /* A reserved keyword type specifier.  */
     242              :   ctsk_resword,
     243              :   /* A reference to a tag, previously declared, such as "struct foo".
     244              :      This includes where the previous declaration was as a different
     245              :      kind of tag, in which case this is only valid if shadowing that
     246              :      tag in an inner scope.  */
     247              :   ctsk_tagref,
     248              :   /* Likewise, with standard attributes present in the reference.  */
     249              :   ctsk_tagref_attrs,
     250              :   /* A reference to a tag, not previously declared in a visible
     251              :      scope.  */
     252              :   ctsk_tagfirstref,
     253              :   /* Likewise, with standard attributes present in the reference.  */
     254              :   ctsk_tagfirstref_attrs,
     255              :   /* A definition of a tag such as "struct foo { int a; }".  */
     256              :   ctsk_tagdef,
     257              :   /* A typedef name.  */
     258              :   ctsk_typedef,
     259              :   /* An ObjC-specific kind of type specifier.  */
     260              :   ctsk_objc,
     261              :   /* A typeof specifier, or _Atomic ( type-name ).  */
     262              :   ctsk_typeof
     263              : };
     264              : 
     265              : /* A type specifier: this structure is created in the parser and
     266              :    passed to declspecs_add_type only.  */
     267              : struct c_typespec {
     268              :   /* What kind of type specifier this is.  */
     269              :   enum c_typespec_kind kind;
     270              :   /* Whether the expression has operands suitable for use in constant
     271              :      expressions.  */
     272              :   bool expr_const_operands;
     273              :   /* Whether the type specifier includes an enum type specifier (that
     274              :      is, ": specifier-qualifier-list" in a declaration using
     275              :      "enum").  */
     276              :   bool has_enum_type_specifier;
     277              :   /* The specifier itself.  */
     278              :   tree spec;
     279              :   /* An expression to be evaluated before the type specifier, in the
     280              :      case of typeof specifiers, or NULL otherwise or if no such
     281              :      expression is required for a particular typeof specifier.  In
     282              :      particular, when typeof is applied to an expression of variably
     283              :      modified type, that expression must be evaluated in order to
     284              :      determine array sizes that form part of the type, but the
     285              :      expression itself (as opposed to the array sizes) forms no part
     286              :      of the type and so needs to be recorded separately.  */
     287              :   tree expr;
     288              : };
     289              : 
     290              : /* A storage class specifier.  */
     291              : enum c_storage_class {
     292              :   csc_none,
     293              :   csc_auto,
     294              :   csc_extern,
     295              :   csc_register,
     296              :   csc_static,
     297              :   csc_typedef
     298              : };
     299              : 
     300              : /* A type specifier keyword "void", "_Bool", "char", "int", "float",
     301              :    "double", "_Decimal32", "_Decimal64", "_Decimal128", "_Decimal64x",
     302              :    "_Fract", "_Accum", "_BitInt", or none of these.  */
     303              : enum c_typespec_keyword {
     304              :   cts_none,
     305              :   cts_void,
     306              :   cts_bool,
     307              :   cts_char,
     308              :   cts_int,
     309              :   cts_float,
     310              :   cts_int_n,
     311              :   cts_double,
     312              :   cts_dfloat32,
     313              :   cts_dfloat64,
     314              :   cts_dfloat128,
     315              :   cts_dfloat64x,
     316              :   cts_floatn_nx,
     317              :   cts_fract,
     318              :   cts_accum,
     319              :   cts_bitint,
     320              :   cts_auto_type
     321              : };
     322              : 
     323              : /* This enum lists all the possible declarator specifiers, storage
     324              :    class or attribute that a user can write.  There is at least one
     325              :    enumerator per possible declarator specifier in the struct
     326              :    c_declspecs below.
     327              : 
     328              :    It is used to index the array of declspec locations in struct
     329              :    c_declspecs.  */
     330              : enum c_declspec_word {
     331              :   cdw_typespec /* A catch-all for a typespec.  */,
     332              :   cdw_storage_class  /* A catch-all for a storage class */,
     333              :   cdw_attributes,
     334              :   cdw_typedef,
     335              :   cdw_explicit_signed,
     336              :   cdw_deprecated,
     337              :   cdw_default_int,
     338              :   cdw_long,
     339              :   cdw_long_long,
     340              :   cdw_short,
     341              :   cdw_signed,
     342              :   cdw_unsigned,
     343              :   cdw_complex,
     344              :   cdw_inline,
     345              :   cdw_noreturn,
     346              :   cdw_thread,
     347              :   cdw_const,
     348              :   cdw_volatile,
     349              :   cdw_restrict,
     350              :   cdw_atomic,
     351              :   cdw_saturating,
     352              :   cdw_alignas,
     353              :   cdw_address_space,
     354              :   cdw_gimple,
     355              :   cdw_rtl,
     356              :   cdw_number_of_elements /* This one must always be the last
     357              :                             enumerator.  */
     358              : };
     359              : 
     360              : enum c_declspec_il {
     361              :   cdil_none,
     362              :   cdil_gimple,          /* __GIMPLE  */
     363              :   cdil_gimple_cfg,      /* __GIMPLE(cfg)  */
     364              :   cdil_gimple_ssa,      /* __GIMPLE(ssa)  */
     365              :   cdil_rtl              /* __RTL  */
     366              : };
     367              : 
     368              : /* A sequence of declaration specifiers in C.  When a new declaration
     369              :    specifier is added, please update the enum c_declspec_word above
     370              :    accordingly.  */
     371              : struct c_declspecs {
     372              :   location_t locations[cdw_number_of_elements];
     373              :   /* The type specified, if a single type specifier such as a struct,
     374              :      union or enum specifier, typedef name or typeof specifies the
     375              :      whole type, or NULL_TREE if none or a keyword such as "void" or
     376              :      "char" is used.  Does not include qualifiers.  */
     377              :   tree type;
     378              :   /* Any expression to be evaluated before the type, from a typeof
     379              :      specifier.  */
     380              :   tree expr;
     381              :   /* The attributes from a typedef decl.  */
     382              :   tree decl_attr;
     383              :   /* When parsing, the GNU attributes and prefix standard attributes.
     384              :      Outside the parser, this will be NULL; attributes (possibly from
     385              :      multiple lists) will be passed separately.  */
     386              :   tree attrs;
     387              :   /* When parsing, postfix standard attributes (which appertain to the
     388              :      type specified by the preceding declaration specifiers, unlike
     389              :      prefix standard attributes which appertain to the declaration or
     390              :      declarations as a whole).  */
     391              :   tree postfix_attrs;
     392              :   /* The pass to start compiling a __GIMPLE or __RTL function with.  */
     393              :   char *gimple_or_rtl_pass;
     394              :   /* ENTRY BB count.  */
     395              :   profile_count entry_bb_count;
     396              :   /* The base-2 log of the greatest alignment required by an _Alignas
     397              :      specifier, in bytes, or -1 if no such specifiers with nonzero
     398              :      alignment.  */
     399              :   int align_log;
     400              :   union {
     401              :     /* For the __intN declspec, this stores the index into the int_n_*
     402              :        arrays.  */
     403              :     int int_n_idx;
     404              :     /* For the _FloatN and _FloatNx declspec, this stores the index into
     405              :        the floatn_nx_types array.  */
     406              :     int floatn_nx_idx;
     407              :     /* For _BitInt(N) this stores the N.  */
     408              :     int bitint_prec;
     409              :   } u;
     410              :   /* The storage class specifier, or csc_none if none.  */
     411              :   enum c_storage_class storage_class;
     412              :   /* Any type specifier keyword used such as "int", not reflecting
     413              :      modifiers such as "short", or cts_none if none.  */
     414              :   ENUM_BITFIELD (c_typespec_keyword) typespec_word : 8;
     415              :   /* The kind of type specifier if one has been seen, ctsk_none
     416              :      otherwise.  */
     417              :   ENUM_BITFIELD (c_typespec_kind) typespec_kind : 4;
     418              :   ENUM_BITFIELD (c_declspec_il) declspec_il : 3;
     419              :   /* Whether any expressions in typeof specifiers may appear in
     420              :      constant expressions.  */
     421              :   BOOL_BITFIELD expr_const_operands : 1;
     422              :   /* Whether any declaration specifiers have been seen at all.  */
     423              :   BOOL_BITFIELD declspecs_seen_p : 1;
     424              :   /* Whether any declaration specifiers other than standard attributes
     425              :      have been seen at all.  If only standard attributes have been
     426              :      seen, this is an attribute-declaration.  */
     427              :   BOOL_BITFIELD non_std_attrs_seen_p : 1;
     428              :   /* Whether something other than a storage class specifier or
     429              :      attribute has been seen.  This is used to warn for the
     430              :      obsolescent usage of storage class specifiers other than at the
     431              :      start of the list.  (Doing this properly would require function
     432              :      specifiers to be handled separately from storage class
     433              :      specifiers.)  */
     434              :   BOOL_BITFIELD non_sc_seen_p : 1;
     435              :   /* Whether the type is specified by a typedef or typeof name.  */
     436              :   BOOL_BITFIELD typedef_p : 1;
     437              :   /* Whether the type is explicitly "signed" or specified by a typedef
     438              :      whose type is explicitly "signed".  */
     439              :   BOOL_BITFIELD explicit_signed_p : 1;
     440              :   /* Whether the specifiers include a deprecated typedef.  */
     441              :   BOOL_BITFIELD deprecated_p : 1;
     442              :   /* Whether the specifiers include an unavailable typedef.  */
     443              :   BOOL_BITFIELD unavailable_p : 1;
     444              :   /* Whether the type defaulted to "int" because there were no type
     445              :      specifiers.  */
     446              :   BOOL_BITFIELD default_int_p : 1;
     447              :   /* Whether "long" was specified.  */
     448              :   BOOL_BITFIELD long_p : 1;
     449              :   /* Whether "long" was specified more than once.  */
     450              :   BOOL_BITFIELD long_long_p : 1;
     451              :   /* Whether "short" was specified.  */
     452              :   BOOL_BITFIELD short_p : 1;
     453              :   /* Whether "signed" was specified.  */
     454              :   BOOL_BITFIELD signed_p : 1;
     455              :   /* Whether "unsigned" was specified.  */
     456              :   BOOL_BITFIELD unsigned_p : 1;
     457              :   /* Whether "complex" was specified.  */
     458              :   BOOL_BITFIELD complex_p : 1;
     459              :   /* Whether "inline" was specified.  */
     460              :   BOOL_BITFIELD inline_p : 1;
     461              :   /* Whether "_Noreturn" was speciied.  */
     462              :   BOOL_BITFIELD noreturn_p : 1;
     463              :   /* Whether "__thread" or "_Thread_local" was specified.  */
     464              :   BOOL_BITFIELD thread_p : 1;
     465              :   /* Whether "__thread" rather than "_Thread_local" was specified.  */
     466              :   BOOL_BITFIELD thread_gnu_p : 1;
     467              :   /* Whether "const" was specified.  */
     468              :   BOOL_BITFIELD const_p : 1;
     469              :   /* Whether "volatile" was specified.  */
     470              :   BOOL_BITFIELD volatile_p : 1;
     471              :   /* Whether "restrict" was specified.  */
     472              :   BOOL_BITFIELD restrict_p : 1;
     473              :   /* Whether "_Atomic" was specified.  */
     474              :   BOOL_BITFIELD atomic_p : 1;
     475              :   /* Whether "_Sat" was specified.  */
     476              :   BOOL_BITFIELD saturating_p : 1;
     477              :   /* Whether any alignment specifier (even with zero alignment) was
     478              :      specified.  */
     479              :   BOOL_BITFIELD alignas_p : 1;
     480              :   /* Whether an enum type specifier (": specifier-qualifier-list") was
     481              :      specified other than in a definition of that enum (if so, this is
     482              :      invalid unless it is an empty declaration "enum identifier
     483              :      enum-type-specifier;", but such an empty declaration is valid in
     484              :      C23 when "enum identifier;" would not be).  */
     485              :   BOOL_BITFIELD enum_type_specifier_ref_p : 1;
     486              :   /* Whether "auto" was specified in C23 (or later) mode and means the
     487              :      type is to be deduced from an initializer, or would mean that if
     488              :      no type specifier appears later in these declaration
     489              :      specifiers.  */
     490              :   BOOL_BITFIELD c23_auto_p : 1;
     491              :   /* Whether "constexpr" was specified.  */
     492              :   BOOL_BITFIELD constexpr_p : 1;
     493              :   /* The address space that the declaration belongs to.  */
     494              :   addr_space_t address_space;
     495              : };
     496              : 
     497              : /* The various kinds of declarators in C.  */
     498              : enum c_declarator_kind {
     499              :   /* An identifier.  */
     500              :   cdk_id,
     501              :   /* A function.  */
     502              :   cdk_function,
     503              :   /* An array.  */
     504              :   cdk_array,
     505              :   /* A pointer.  */
     506              :   cdk_pointer,
     507              :   /* Parenthesized declarator with nested attributes.  */
     508              :   cdk_attrs
     509              : };
     510              : 
     511              : struct c_arg_tag {
     512              :   /* The argument name.  */
     513              :   tree id;
     514              :   /* The type of the argument.  */
     515              :   tree type;
     516              : };
     517              : 
     518              : 
     519              : /* Information about the parameters in a function declarator.  */
     520              : struct c_arg_info {
     521              :   /* A list of parameter decls.  */
     522              :   tree parms;
     523              :   /* A list of structure, union and enum tags defined.  */
     524              :   vec<c_arg_tag, va_gc> *tags;
     525              :   /* A list of argument types to go in the FUNCTION_TYPE.  */
     526              :   tree types;
     527              :   /* A list of non-parameter decls (notably enumeration constants)
     528              :      defined with the parameters.  */
     529              :   tree others;
     530              :   /* A compound expression of VLA sizes from the parameters, or NULL.
     531              :      In a function definition, these are used to ensure that
     532              :      side-effects in sizes of arrays converted to pointers (such as a
     533              :      parameter int i[n++]) take place; otherwise, they are
     534              :      ignored.  */
     535              :   tree pending_sizes;
     536              :   /* True when these arguments had [*].  */
     537              :   BOOL_BITFIELD had_vla_unspec : 1;
     538              :   /* True when the arguments are a (...) prototype.  */
     539              :   BOOL_BITFIELD no_named_args_stdarg_p : 1;
     540              :   /* True when empty parentheses have been interpreted as (void) in C23 or
     541              :      later.  This is only for use by -Wtraditional and is no longer needed if
     542              :      -Wtraditional is removed.  */
     543              :   BOOL_BITFIELD c23_empty_parens : 1;
     544              : };
     545              : 
     546              : /* A declarator.  */
     547              : struct c_declarator {
     548              :   /* The kind of declarator.  */
     549              :   enum c_declarator_kind kind;
     550              :   location_t id_loc; /* Currently only set for cdk_id, cdk_array. */
     551              :   /* Except for cdk_id, the contained declarator.  For cdk_id, NULL.  */
     552              :   struct c_declarator *declarator;
     553              :   union {
     554              :     /* For identifiers.  */
     555              :     struct {
     556              :       /* An IDENTIFIER_NODE, or NULL_TREE if an abstract
     557              :          declarator.  */
     558              :       tree id;
     559              :       /* Any attributes (which apply to the declaration rather than to
     560              :          the type described by the outer declarators).  */
     561              :       tree attrs;
     562              :     } id;
     563              :     /* For functions.  */
     564              :     struct c_arg_info *arg_info;
     565              :     /* For arrays.  */
     566              :     struct {
     567              :       /* The array dimension, or NULL for [] and [*].  */
     568              :       tree dimen;
     569              :       /* The qualifiers inside [].  */
     570              :       int quals;
     571              :       /* The attributes (currently ignored) inside [].  */
     572              :       tree attrs;
     573              :       /* Whether [static] was used.  */
     574              :       BOOL_BITFIELD static_p : 1;
     575              :       /* Whether [*] was used.  */
     576              :       BOOL_BITFIELD vla_unspec_p : 1;
     577              :     } array;
     578              :     /* For pointers, the qualifiers on the pointer type.  */
     579              :     int pointer_quals;
     580              :     /* For attributes.  */
     581              :     tree attrs;
     582              :   } u;
     583              : };
     584              : 
     585              : /* A type name.  */
     586              : struct c_type_name {
     587              :   /* The declaration specifiers.  */
     588              :   struct c_declspecs *specs;
     589              :   /* The declarator.  */
     590              :   struct c_declarator *declarator;
     591              : };
     592              : 
     593              : /* A parameter.  */
     594              : struct c_parm {
     595              :   /* The declaration specifiers, minus any prefix attributes.  */
     596              :   struct c_declspecs *specs;
     597              :   /* The attributes.  */
     598              :   tree attrs;
     599              :   /* The declarator.  */
     600              :   struct c_declarator *declarator;
     601              :   /* The location of the parameter.  */
     602              :   location_t loc;
     603              : };
     604              : 
     605              : /* Used when parsing an enum.  Initialized by start_enum.  */
     606              : struct c_enum_contents
     607              : {
     608              :   /* While defining an enum type, this is 1 plus the last enumerator
     609              :      constant value.  */
     610              :   tree enum_next_value;
     611              : 
     612              :   /* The enumeration type itself.  */
     613              :   tree enum_type;
     614              : 
     615              :   /* Nonzero means that there was overflow computing enum_next_value.  */
     616              :   int enum_overflow;
     617              : };
     618              : 
     619              : /* A type of reference to a static identifier in an inline
     620              :    function.  */
     621              : enum c_inline_static_type {
     622              :   /* Identifier with internal linkage used in function that may be an
     623              :      inline definition (i.e., file-scope static).  */
     624              :   csi_internal,
     625              :   /* Modifiable object with static storage duration defined in
     626              :      function that may be an inline definition (i.e., local
     627              :      static).  */
     628              :   csi_modifiable
     629              : };
     630              : 
     631              : /* Record details of decls possibly used inside sizeof or typeof.  */
     632              : struct maybe_used_decl
     633              : {
     634              :   /* The decl.  */
     635              :   tree decl;
     636              :   /* The level seen at (in_sizeof + in_typeof + in_countof + in_generic).  */
     637              :   int level;
     638              :   /* Seen in address-of.  */
     639              :   bool address;
     640              :   /* The next one at this level or above, or NULL.  */
     641              :   struct maybe_used_decl *next;
     642              : };
     643              : 
     644              : 
     645              : /* in c-parser.cc */
     646              : struct c_tree_token_vec;
     647              : extern void c_parse_init (void);
     648              : extern bool c_keyword_starts_typename (enum rid keyword);
     649              : 
     650              : /* in c-aux-info.cc */
     651              : extern void gen_aux_info_record (tree, int, int, int);
     652              : 
     653              : /* in c-decl.cc */
     654              : struct c_spot_bindings;
     655              : class c_struct_parse_info;
     656              : extern struct obstack parser_obstack;
     657              : /* Set to IN_ITERATION_STMT if parsing an iteration-statement,
     658              :    to IN_OMP_BLOCK if parsing OpenMP structured block and
     659              :    IN_OMP_FOR if parsing OpenMP loop.  If parsing a switch statement,
     660              :    this is bitwise ORed with IN_SWITCH_STMT, unless parsing an
     661              :    iteration-statement, OpenMP block or loop within that switch.
     662              :    If the innermost iteration/switch statement is named, IN_NAMED_STMT
     663              :    is additionally bitwise ORed into it.  */
     664              : #define IN_SWITCH_STMT          1
     665              : #define IN_ITERATION_STMT       2
     666              : #define IN_OMP_BLOCK            4
     667              : #define IN_OMP_FOR              8
     668              : #define IN_OBJC_FOREACH         16
     669              : #define IN_NAMED_STMT           32
     670              : extern unsigned char in_statement;
     671              : 
     672              : extern bool switch_statement_break_seen_p;
     673              : 
     674              : extern bool global_bindings_p (void);
     675              : extern tree pushdecl (tree);
     676              : extern unsigned int start_underspecified_init (location_t, tree);
     677              : extern void finish_underspecified_init (tree, unsigned int);
     678              : extern void push_scope (void);
     679              : extern tree pop_scope (void);
     680              : extern void c_mark_decl_jump_unsafe_in_current_scope ();
     681              : extern void c_bindings_start_stmt_expr (struct c_spot_bindings *);
     682              : extern void c_bindings_end_stmt_expr (struct c_spot_bindings *);
     683              : 
     684              : extern void record_inline_static (location_t, tree, tree,
     685              :                                   enum c_inline_static_type);
     686              : extern void c_init_decl_processing (void);
     687              : extern void c_print_identifier (FILE *, tree, int);
     688              : extern int quals_from_declspecs (const struct c_declspecs *);
     689              : extern struct c_declarator *build_array_declarator (location_t, tree,
     690              :                                                     struct c_declspecs *,
     691              :                                                     bool, bool);
     692              : extern tree build_enumerator (location_t, location_t, struct c_enum_contents *,
     693              :                               tree, tree);
     694              : extern tree check_for_loop_decls (location_t, bool);
     695              : extern void mark_forward_parm_decls (void);
     696              : extern void declare_parm_level (void);
     697              : extern void undeclared_variable (location_t, tree);
     698              : extern tree lookup_label_for_goto (location_t, tree);
     699              : extern tree declare_label (tree);
     700              : extern tree define_label (location_t, tree);
     701              : extern struct c_spot_bindings *c_get_switch_bindings (void);
     702              : extern void c_release_switch_bindings (struct c_spot_bindings *);
     703              : extern bool c_check_switch_jump_warnings (struct c_spot_bindings *,
     704              :                                           location_t, location_t);
     705              : extern void finish_decl (tree, location_t, tree, tree, tree);
     706              : extern tree finish_enum (tree, tree, tree);
     707              : extern void finish_function (location_t = input_location);
     708              : extern tree finish_struct (location_t, tree, tree, tree,
     709              :                            class c_struct_parse_info *,
     710              :                            tree *expr = NULL);
     711              : extern tree c_simulate_enum_decl (location_t, const char *,
     712              :                                   vec<string_int_pair> *);
     713              : extern tree c_simulate_record_decl (location_t, const char *,
     714              :                                     array_slice<const tree>);
     715              : extern struct c_arg_info *build_arg_info (void);
     716              : extern struct c_arg_info *get_parm_info (bool, tree);
     717              : extern tree grokfield (location_t, struct c_declarator *,
     718              :                        struct c_declspecs *, tree, tree *, tree *);
     719              : extern tree groktypename (struct c_type_name *, tree *, bool *);
     720              : extern tree grokgenassoc (struct c_type_name *);
     721              : extern tree grokparm (const struct c_parm *, tree *);
     722              : extern tree implicitly_declare (location_t, tree);
     723              : extern void keep_next_level (void);
     724              : extern void pending_xref_error (void);
     725              : extern void c_push_function_context (void);
     726              : extern void c_pop_function_context (void);
     727              : extern void push_parm_decl (const struct c_parm *, tree *);
     728              : extern struct c_declarator *set_array_declarator_inner (struct c_declarator *,
     729              :                                                         struct c_declarator *);
     730              : extern tree c_builtin_function (tree);
     731              : extern tree c_builtin_function_ext_scope (tree);
     732              : extern tree c_simulate_builtin_function_decl (tree);
     733              : extern void c_warn_unused_attributes (tree);
     734              : extern tree c_warn_type_attributes (tree, tree);
     735              : extern void shadow_tag (const struct c_declspecs *);
     736              : extern void shadow_tag_warned (const struct c_declspecs *, int);
     737              : extern tree start_enum (location_t, struct c_enum_contents *, tree, tree,
     738              :                         bool potential_nesting_p);
     739              : extern bool start_function (struct c_declspecs *, struct c_declarator *, tree);
     740              : extern tree start_decl (struct c_declarator *, struct c_declspecs *, bool,
     741              :                         tree, bool = true, location_t * = NULL);
     742              : extern tree start_struct (location_t, enum tree_code, tree,
     743              :                           class c_struct_parse_info **);
     744              : extern void store_parm_decls (void);
     745              : extern void store_parm_decls_from (struct c_arg_info *);
     746              : extern void temp_store_parm_decls (tree, tree);
     747              : extern void temp_pop_parm_decls (void);
     748              : extern tree xref_tag (enum tree_code, tree);
     749              : extern struct c_typespec parser_xref_tag (location_t, enum tree_code, tree,
     750              :                                           bool, tree, bool);
     751              : extern struct c_parm *build_c_parm (struct c_declspecs *, tree,
     752              :                                     struct c_declarator *, location_t);
     753              : extern struct c_declarator *build_attrs_declarator (tree,
     754              :                                                     struct c_declarator *);
     755              : extern struct c_declarator *build_function_declarator (struct c_arg_info *,
     756              :                                                        struct c_declarator *);
     757              : extern struct c_declarator *build_id_declarator (tree);
     758              : extern struct c_declarator *make_pointer_declarator (struct c_declspecs *,
     759              :                                                      struct c_declarator *);
     760              : extern struct c_declspecs *build_null_declspecs (void);
     761              : extern struct c_declspecs *declspecs_add_qual (location_t,
     762              :                                                struct c_declspecs *, tree);
     763              : extern struct c_declspecs *declspecs_add_type (location_t,
     764              :                                                struct c_declspecs *,
     765              :                                                struct c_typespec);
     766              : extern struct c_declspecs *declspecs_add_scspec (location_t,
     767              :                                                  struct c_declspecs *, tree);
     768              : extern struct c_declspecs *declspecs_add_attrs (location_t,
     769              :                                                 struct c_declspecs *, tree);
     770              : extern struct c_declspecs *declspecs_add_addrspace (location_t,
     771              :                                                     struct c_declspecs *,
     772              :                                                     addr_space_t);
     773              : extern struct c_declspecs *declspecs_add_alignas (location_t,
     774              :                                                   struct c_declspecs *, tree);
     775              : extern struct c_declspecs *finish_declspecs (struct c_declspecs *);
     776              : extern size_t c_tree_size (enum tree_code);
     777              : extern int c_get_loop_names (tree, bool, tree *);
     778              : extern void c_release_loop_names (int);
     779              : extern tree c_finish_bc_name (location_t, tree, bool);
     780              : 
     781              : /* in c-objc-common.cc */
     782              : extern bool c_objc_common_init (void);
     783              : extern bool c_missing_noreturn_ok_p (tree);
     784              : extern bool c_warn_unused_global_decl (const_tree);
     785              : extern void c_initialize_diagnostics (diagnostics::context *);
     786              : extern bool c_var_mod_p (tree x, tree fn);
     787              : extern alias_set_type c_get_alias_set (tree);
     788              : extern int c_type_dwarf_attribute (const_tree, int);
     789              : 
     790              : /* in c-typeck.cc */
     791              : extern int in_alignof;
     792              : extern int in_sizeof;
     793              : extern int in_countof;
     794              : extern int in_typeof;
     795              : extern int in_generic;
     796              : extern bool c_in_omp_for;
     797              : extern bool c_omp_array_section_p;
     798              : 
     799              : extern tree c_last_sizeof_arg;
     800              : extern location_t c_last_sizeof_loc;
     801              : 
     802              : extern struct c_switch *c_switch_stack;
     803              : 
     804              : extern bool null_pointer_constant_p (const_tree);
     805              : 
     806              : 
     807              : inline bool
     808    135894007 : c_type_variably_modified_p (tree t)
     809              : {
     810    135894007 :   return error_mark_node != t && C_TYPE_VARIABLY_MODIFIED (t);
     811              : }
     812              : 
     813              : inline bool
     814         8314 : c_type_unspecified_p (tree t)
     815              : {
     816         8314 :   return error_mark_node != t
     817         8314 :          && C_TYPE_VARIABLE_SIZE (t) && TREE_CODE (t) == ARRAY_TYPE
     818         8228 :          && TYPE_DOMAIN (t) && TYPE_MAX_VALUE (TYPE_DOMAIN (t))
     819         8228 :          && TREE_CODE (TYPE_MAX_VALUE (TYPE_DOMAIN (t))) == COMPOUND_EXPR
     820           33 :          && integer_zerop (TREE_OPERAND (TYPE_MAX_VALUE (TYPE_DOMAIN (t)), 0))
     821         8347 :          && integer_zerop (TREE_OPERAND (TYPE_MAX_VALUE (TYPE_DOMAIN (t)), 1));
     822              : }
     823              : 
     824              : extern bool char_type_p (tree);
     825              : extern tree c_type_tag (const_tree t);
     826              : extern tree c_objc_common_truthvalue_conversion (location_t, tree,
     827              :                                                  tree = integer_type_node);
     828              : extern tree require_complete_type (location_t, tree);
     829              : extern bool same_translation_unit_p (const_tree, const_tree);
     830              : extern int comptypes (tree, tree);
     831              : extern bool comptypes_same_p (tree, tree);
     832              : extern bool comptypes_equiv_p (tree, tree);
     833              : extern int comptypes_check_different_types (tree, tree, bool *);
     834              : extern int comptypes_check_enum_int (tree, tree, bool *);
     835              : extern bool c_mark_addressable (tree, bool = false, bool = false);
     836              : extern void c_incomplete_type_error (location_t, const_tree, const_tree);
     837              : extern tree c_type_promotes_to (tree);
     838              : extern struct c_expr default_function_array_conversion (location_t,
     839              :                                                         struct c_expr);
     840              : extern struct c_expr default_function_array_read_conversion (location_t,
     841              :                                                              struct c_expr);
     842              : extern struct c_expr convert_lvalue_to_rvalue (location_t, struct c_expr,
     843              :                                                bool, bool, bool = false);
     844              : extern tree decl_constant_value_1 (tree, bool);
     845              : extern void mark_exp_read (tree);
     846              : extern tree composite_type (tree, tree);
     847              : extern tree lookup_field (const_tree, tree);
     848              : extern tree build_component_ref (location_t, tree, tree, location_t,
     849              :                                  location_t);
     850              : extern tree handle_counted_by_for_component_ref (location_t, tree);
     851              : extern tree build_array_ref (location_t, tree, tree);
     852              : extern tree build_omp_array_section (location_t, tree, tree, tree);
     853              : extern tree build_external_ref (location_t, tree, bool, tree *);
     854              : extern void pop_maybe_used (bool);
     855              : extern struct maybe_used_decl *save_maybe_used ();
     856              : extern void restore_maybe_used (struct maybe_used_decl *);
     857              : extern void mark_decl_used (tree, bool);
     858              : extern struct c_expr c_expr_sizeof_expr (location_t, struct c_expr);
     859              : extern struct c_expr c_expr_sizeof_type (location_t, struct c_type_name *);
     860              : extern struct c_expr c_expr_countof_expr (location_t, struct c_expr);
     861              : extern struct c_expr c_expr_countof_type (location_t loc,
     862              :                                           struct c_type_name *);
     863              : extern struct c_expr c_expr_maxof_type (location_t loc, struct c_type_name *);
     864              : extern struct c_expr c_expr_minof_type (location_t loc, struct c_type_name *);
     865              : extern struct c_expr parser_build_unary_op (location_t, enum tree_code,
     866              :                                             struct c_expr);
     867              : extern struct c_expr parser_build_binary_op (location_t,
     868              :                                              enum tree_code, struct c_expr,
     869              :                                              struct c_expr);
     870              : extern tree build_conditional_expr (location_t, tree, bool, tree, tree,
     871              :                                     location_t, tree, tree, location_t);
     872              : extern tree build_compound_expr (location_t, tree, tree);
     873              : extern tree c_cast_expr (location_t, struct c_type_name *, tree);
     874              : extern tree build_c_cast (location_t, tree, tree);
     875              : extern void store_init_value (location_t, tree, tree, tree);
     876              : extern void maybe_warn_string_init (location_t, tree, struct c_expr);
     877              : extern void start_init (tree, tree, bool, bool, rich_location *);
     878              : extern void finish_init (void);
     879              : extern void really_start_incremental_init (tree);
     880              : extern void finish_implicit_inits (location_t, struct obstack *);
     881              : extern void push_init_level (location_t, int, struct obstack *);
     882              : extern struct c_expr pop_init_level (location_t, int, struct obstack *,
     883              :                                      location_t);
     884              : extern void set_init_index (location_t, tree, tree, struct obstack *);
     885              : extern void set_init_label (location_t, tree, location_t, struct obstack *);
     886              : unsigned c_maybe_optimize_large_byte_initializer (void);
     887              : extern void process_init_element (location_t, struct c_expr, bool,
     888              :                                   struct obstack *);
     889              : extern tree build_compound_literal (location_t, tree, tree, bool,
     890              :                                     unsigned int, struct c_declspecs *);
     891              : extern void check_compound_literal_type (location_t, struct c_type_name *);
     892              : extern tree c_start_switch (location_t, location_t, tree, bool, tree);
     893              : extern void c_finish_switch (tree, tree);
     894              : extern tree build_asm_expr (location_t, tree, tree, tree, tree, tree, bool,
     895              :                             bool);
     896              : extern tree build_asm_stmt (bool, tree);
     897              : extern int c_types_compatible_p (tree, tree);
     898              : extern tree c_begin_compound_stmt (bool);
     899              : extern tree c_end_compound_stmt (location_t, tree, bool);
     900              : extern void c_finish_if_stmt (location_t, tree, tree, tree);
     901              : extern void c_finish_loop (location_t, location_t, tree, location_t, tree,
     902              :                            tree, tree, tree, bool);
     903              : extern tree c_begin_stmt_expr (void);
     904              : extern tree c_finish_stmt_expr (location_t, tree);
     905              : extern tree c_process_expr_stmt (location_t, tree);
     906              : extern tree c_finish_expr_stmt (location_t, tree);
     907              : extern tree c_finish_return (location_t, tree, tree, bool = false);
     908              : extern tree c_finish_bc_stmt (location_t, tree, bool, tree);
     909              : extern tree c_finish_goto_label (location_t, tree);
     910              : extern tree c_finish_goto_ptr (location_t, c_expr val);
     911              : extern tree c_expr_to_decl (tree, bool *, bool *);
     912              : extern tree c_finish_omp_construct (location_t, enum tree_code, tree, tree);
     913              : extern tree c_finish_oacc_data (location_t, tree, tree);
     914              : extern tree c_finish_oacc_host_data (location_t, tree, tree);
     915              : extern tree c_begin_omp_parallel (void);
     916              : extern tree c_finish_omp_parallel (location_t, tree, tree);
     917              : extern tree c_begin_omp_task (void);
     918              : extern tree c_finish_omp_task (location_t, tree, tree);
     919              : extern void c_finish_omp_cancel (location_t, tree);
     920              : extern void c_finish_omp_cancellation_point (location_t, tree);
     921              : extern tree c_finish_omp_clauses (tree, enum c_omp_region_type);
     922              : extern tree c_omp_finish_mapper_clauses (tree);
     923              : extern tree c_omp_mapper_lookup (tree, tree);
     924              : extern tree c_omp_extract_mapper_directive (tree);
     925              : extern tree c_omp_map_array_section (location_t, tree);
     926              : extern tree c_build_va_arg (location_t, tree, location_t, tree, tree);
     927              : extern tree c_finish_transaction (location_t, tree, int);
     928              : extern bool c_tree_equal (tree, tree);
     929              : extern tree c_build_function_call_vec (location_t, const vec<location_t>&,
     930              :                                        tree, vec<tree, va_gc> *,
     931              :                                        vec<tree, va_gc> *);
     932              : extern tree c_omp_clause_copy_ctor (tree, tree, tree);
     933              : extern tree c_reconstruct_complex_type (tree, tree);
     934              : extern tree c_build_type_attribute_variant (tree ntype, tree attrs);
     935              : extern tree c_build_pointer_type (tree type);
     936              : extern tree c_build_array_type (tree type, tree domain);
     937              : extern tree c_build_array_type_unspecified (tree type);
     938              : extern tree c_build_function_type (tree type, tree args, bool no = false);
     939              : extern tree c_build_pointer_type_for_mode (tree type, machine_mode mode, bool m);
     940              : 
     941              : /* Set to 0 at beginning of a function definition, set to 1 if
     942              :    a return statement that specifies a return value is seen.  */
     943              : 
     944              : extern int current_function_returns_value;
     945              : 
     946              : /* Set to 0 at beginning of a function definition, set to 1 if
     947              :    a return statement with no argument is seen.  */
     948              : 
     949              : extern int current_function_returns_null;
     950              : 
     951              : /* Set to 0 at beginning of a function definition, set to 1 if
     952              :    a call to a noreturn function is seen.  */
     953              : 
     954              : extern int current_function_returns_abnormally;
     955              : 
     956              : /* In c-decl.cc */
     957              : 
     958              : /* Tell the binding oracle what kind of binding we are looking for.  */
     959              : 
     960              : enum c_oracle_request
     961              : {
     962              :   C_ORACLE_SYMBOL,
     963              :   C_ORACLE_TAG,
     964              :   C_ORACLE_LABEL
     965              : };
     966              : 
     967              : /* If this is non-NULL, then it is a "binding oracle" which can lazily
     968              :    create bindings when needed by the C compiler.  The oracle is told
     969              :    the name and type of the binding to create.  It can call pushdecl
     970              :    or the like to ensure the binding is visible; or do nothing,
     971              :    leaving the binding untouched.  c-decl.cc takes note of when the
     972              :    oracle has been called and will not call it again if it fails to
     973              :    create a given binding.  */
     974              : 
     975              : typedef void c_binding_oracle_function (enum c_oracle_request, tree identifier);
     976              : 
     977              : extern c_binding_oracle_function *c_binding_oracle;
     978              : 
     979              : extern void c_finish_incomplete_decl (tree);
     980              : extern tree c_omp_reduction_id (enum tree_code, tree);
     981              : extern tree c_omp_reduction_decl (tree);
     982              : extern tree c_omp_reduction_lookup (tree, tree);
     983              : extern tree c_check_omp_declare_reduction_r (tree *, int *, void *);
     984              : extern tree c_omp_mapper_id (tree);
     985              : extern tree c_omp_mapper_decl (tree);
     986              : extern void c_omp_scan_mapper_bindings (location_t, tree *, tree);
     987              : extern tree c_omp_instantiate_mappers (tree);
     988              : extern bool c_check_in_current_scope (tree);
     989              : extern void c_pushtag (location_t, tree, tree);
     990              : extern void c_bind (location_t, tree, bool);
     991              : extern bool tag_exists_p (enum tree_code, tree);
     992              : 
     993              : extern void verify_counted_by_for_top_anonymous_type (tree);
     994              : 
     995              : /* In c-errors.cc */
     996              : extern bool pedwarn_c90 (location_t, diagnostics::option_id, const char *, ...)
     997              :     ATTRIBUTE_GCC_DIAG(3,4);
     998              : extern bool pedwarn_c99 (location_t, diagnostics::option_id, const char *, ...)
     999              :     ATTRIBUTE_GCC_DIAG(3,4);
    1000              : extern bool pedwarn_c11 (location_t, diagnostics::option_id, const char *, ...)
    1001              :     ATTRIBUTE_GCC_DIAG(3,4);
    1002              : extern bool pedwarn_c23 (location_t, diagnostics::option_id, const char *, ...)
    1003              :     ATTRIBUTE_GCC_DIAG(3,4);
    1004              : extern void add_note_about_new_keyword (location_t loc,
    1005              :                                         tree keyword_id);
    1006              : 
    1007              : extern void
    1008              : set_c_expr_source_range (c_expr *expr,
    1009              :                          location_t start, location_t finish);
    1010              : 
    1011              : extern void
    1012              : set_c_expr_source_range (c_expr *expr,
    1013              :                          source_range src_range);
    1014              : 
    1015              : /* In c-fold.cc */
    1016              : extern vec<tree> incomplete_record_decls;
    1017              : 
    1018              : extern const char *c_get_sarif_source_language (const char *filename);
    1019              : 
    1020              : extern const struct scoped_attribute_specs std_attribute_table;
    1021              : 
    1022              : #if CHECKING_P
    1023              : namespace selftest {
    1024              :   extern void run_c_tests (void);
    1025              : } // namespace selftest
    1026              : #endif /* #if CHECKING_P */
    1027              : 
    1028              : 
    1029              : #endif /* ! GCC_C_TREE_H */
        

Generated by: LCOV version 2.4-beta

LCOV profile is generated on x86_64 machine using following configure options: configure --disable-bootstrap --enable-coverage=opt --enable-languages=c,c++,fortran,go,jit,lto,rust,m2 --enable-host-shared. GCC test suite is run with the built compiler.